Compare commits

..
Author SHA1 Message Date
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
091ce2eb45 Version Packages (#149)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-19 16:08:23 -07:00
Joaquim Verges e24a371508 fix changeset 2022-09-19 16:03:14 -07:00
Adam MajmudarandGitHub b86afb4b09 Add documentation for storage (#147) 2022-09-19 22:26:44 +00:00
Joaquim VergesandGitHub 964add6f20 [CLI, Storage] Fix deploy/release uploads via CLI (#148) 2022-09-19 14:56:42 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
ec414bbc42 Version Packages (#136)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-19 11:11:34 -07:00
Joaquim VergesandGitHub 51dde28224 [SDK, React] Fix using external signers with ThirdwebSDKProvider (#143) 2022-09-19 18:03:39 +00:00
Adam MajmudarandGitHub 57432d21c4 Update Storage SDK (#139) 2022-09-19 16:58:12 +00:00
Jarrod WattsandGitHub 19d87c2885 Jw/react readme (#144) 2022-09-19 07:20:08 +00:00
Joaquim VergesandGitHub 68812e9d27 Update README.md 2022-09-17 11:29:03 -07:00
Joaquim VergesandGitHub 90c53475f0 Update README.md 2022-09-17 11:23:54 -07:00
Joaquim VergesandGitHub 5a52585a7a [SOL] More solana integration (#140) 2022-09-16 19:15:35 -07:00
Joaquim VergesandGitHub 6b48b9288b [SOL] solana dashboard integration (#138) 2022-09-16 13:19:17 -07:00
Joaquim VergesandGitHub 9d74a43aac [SDK] Make contract events generic for better DX (#133) 2022-09-16 05:51:23 +00:00
Jonas DanielsandGitHub 9c7e5518ff [SOL] - enforce owner when deploying (#137) 2022-09-15 22:24:05 -07:00
Jonas DanielsandGitHub b234c58d44 [SDK] - less rpc calls = good (#135) 2022-09-16 03:43:24 +00:00
Adam MajmudarandGitHub b1ae844e8b Reorder CLI commands (#134) 2022-09-15 20:20:43 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
78bae497ba Version Packages (#126)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-15 14:00:20 -07:00
Joaquim VergesandGitHub 3e425bf8e6 [SOL] get account type for a given address (#132) 2022-09-15 20:54:45 +00:00
Jarrod WattsandGitHub 4dca5b21a6 Change feature detection URLs (#128) 2022-09-15 13:45:04 -07:00
Joaquim VergesandGitHub 42c79e93dc [SDK] fix editing releases from the dashboard (#131) 2022-09-15 19:17:02 +00:00
Joaquim VergesandGitHub 2951b5533c [SOL] New return type for registry.getAccountsForWallet (#130) 2022-09-15 18:09:52 +00:00
Joaquim VergesandGitHub fe8751eeae [SDK] add ownable feature detection (#124) 2022-09-15 17:41:32 +00:00
Jonas DanielsandGitHub a0cd47ec35 [SOL] - explicitly export the missing schemata (#129) 2022-09-15 17:13:20 +00:00
Jarrod WattsandGitHub 3902e7aba4 Update read and write hook names for snippet generation (#127) 2022-09-15 17:36:23 +10:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
8717cb2c05 Version Packages (#118)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-14 19:38:16 -07:00
Jarrod WattsandGitHub d57ab03f5d Add useContract hook snippet back in (#125) 2022-09-15 12:34:57 +10:00
Joaquim VergesandGitHub 5aa3c433d7 [Solana] Add sdk.wallet.getBalance() (#123) 2022-09-14 19:27:52 +00:00
Joaquim VergesandGitHub 98dd64a375 [SDK] handle legacy claim method signature in extensions (#122) 2022-09-14 19:15:47 +00:00
Joaquim VergesandGitHub e25dd1ac8e [Solana] Handle WalletAdapter connections, internal cleanup (#120) 2022-09-14 05:04:08 +00:00
Jonas DanielsandGitHub e68f9685b3 fix snippets (#119) 2022-09-14 03:16:58 +00:00
Joaquim VergesandGitHub 84beda1cbb [Solana] Create account registry (#117) 2022-09-13 16:22:00 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
32e7fb0c96 Version Packages (#92)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-13 15:24:45 -07:00
Joaquim VergesandGitHub 8202cc60d8 v3 release notes (#116) 2022-09-13 15:16:00 -07:00
Jonas DanielsandGitHub a37bc00991 [SDK] - add sales to token pre-built (#115) 2022-09-13 20:49:11 +00:00
b442c97080 [SDK] Fix get owned for Signature Drop (#111)
Co-authored-by: Jonas Daniels <[email protected]>
2022-09-13 11:49:42 -07:00
Jonas DanielsandGitHub 1df2dea18f [CLI, REACT] - small improvements (#114) 2022-09-13 17:51:01 +00:00
0fa6f3fcfb [REACT, SDK] universal use-contract & async pre-built contracts (#106)
Co-authored-by: Joaquim Verges <[email protected]>
2022-09-13 09:12:14 -07:00
Jonas DanielsandGitHub b900b8503f Create codeql-analysis.yml (#113) 2022-09-13 07:44:16 +00:00
5a5bc36150 addPackContents function (#108)
Co-authored-by: Joaquim Verges <[email protected]>
2022-09-12 22:21:16 -07:00
Nacho IacovinoandGitHub 8158a55e66 Remove incorrect await (#110) 2022-09-12 21:39:16 +00:00
Adam MajmudarandGitHub f7ccc30f9d Add enabled check to useUser (#109) 2022-09-12 21:11:08 +00:00
78b40a94df [Solana] Add support for NFT Drop (#78)
Co-authored-by: Joaquim Verges <[email protected]>
2022-09-12 18:10:36 +00:00
YashandGitHub 95d850515c Pass empty trustedForwarders for Pack (#107) 2022-09-11 20:20:21 -07:00
Joaquim VergesandGitHub 1244c38162 [Solana] Custom Program support (#94) 2022-09-10 22:34:33 -07:00
Joaquim Verges 7b923be499 add twfeature for non-ERC extensions 2022-09-10 21:23:00 -07:00
Adam MajmudarandGitHub 0912dc5f9c [Solana] Remove error catch from supplyOf (#105) 2022-09-10 22:57:21 +00:00
052aa23888 Add test case and supplyOf (#102)
Co-authored-by: Jarrod Watts <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2022-09-10 22:45:16 +00:00
Joaquim Verges 6c10ed93cb Fix standard function snippets 2022-09-09 21:04:53 -07:00
Joaquim VergesandGitHub 2327a9d611 generate feature snippets for all ERC standards (#101) 2022-09-10 12:29:20 +10:00
Nacho IacovinoandGitHub 27ffbc252b [Multi] Fix typo (#100) 2022-09-10 01:27:40 +00:00
Jonas DanielsandGitHub a70b590be1 [SDK] - do not prompt to deploy again if user rejected the first call (#99) 2022-09-09 17:15:54 -07:00
45818944e5 Add mint additional supply and balance (#97)
Co-authored-by: Joaquim Verges <[email protected]>
2022-09-09 23:21:06 +00:00
Adam MajmudarandGitHub fe047d551e [Solana] Add nft helper common interface (#79) 2022-09-09 20:56:03 +00:00
82627ea031 [SDK, REACT] Switch to simpler detection API for ERC20/721/1155 extensions (#19)
Co-authored-by: Nacho Iacovino <[email protected]>
Co-authored-by: Jonas Daniels <[email protected]>
Co-authored-by: Nacho Iacovino <[email protected]>
2022-09-09 13:45:51 -07:00
Adam MajmudarandGitHub 1de14730bc Update auth docs domain to example.com (#96) 2022-09-09 19:02:27 +00:00
2adb8ff667 [SDK, React] Support arbitrum and optimism goerli testnets (#91)
Co-authored-by: Joaquim Verges <[email protected]>
2022-09-09 07:07:08 +00:00
Joaquim VergesandGitHub 820a5191b5 [SDK] Expose ERC721Claimable/ERC1155Claimable features (#90) 2022-09-08 21:44:20 -07:00
Jarrod WattsandGitHub c94ef909d0 Update README.md (#89) 2022-09-08 08:28:27 +00:00
Joaquim VergesandGitHub 8aef97d6f1 apply prettier on everything (#80) 2022-09-08 04:38:16 +00:00
Jarrod WattsandGitHub 8a5501fb80 Add contributing.md and update readme (#77) 2022-09-07 19:58:39 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
8696199849 Version Packages (#67)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-06 21:03:48 -07:00
Joaquim VergesandGitHub 05353fd8da Add support for chain agnostic gasless tx (#71) 2022-09-06 20:52:39 -07:00
baa87a1fbd Update Opezeppelin forwarder address for Goerli (#74)
Co-authored-by: Krishang Nadgauda <[email protected]>
Co-authored-by: Joaquim Verges <[email protected]>
2022-09-07 03:17:18 +00:00
Jonas DanielsandGitHub 407932680f [SDK] - fix FactoryDeploymentSchema initialize function by adding a default (#75) 2022-09-06 22:40:18 +00:00
Jarrod WattsandGitHub 6bec17c07a [SDK] more snippets (#73) 2022-09-06 02:21:39 +00:00
Jarrod WattsandGitHub c379d19dfb [SDK] - Document contract from ABI (#72) 2022-09-06 02:00:07 +00:00
Joaquim VergesandGitHub 3e2bec8a47 Fix links in README 2022-09-05 15:29:23 -07:00
Jarrod WattsandGitHub 8b028c29d5 Update erc-1155-claimable.ts (#69) 2022-09-05 15:43:21 +10:00
Jarrod WattsandGitHub cc286841e2 Update erc-1155-mintable.ts (#68) 2022-09-05 15:01:56 +10:00
576d968a89 [SDK] Doc - Remove "reveal" from "create reveal batch" snippet (#66)
Co-authored-by: Joaquim Verges <[email protected]>
2022-09-05 02:36:43 +00:00
f2bdf47b4f [Solana] deploy and manage tokens (#63)
Co-authored-by: Jonas Daniels <[email protected]>
2022-09-04 19:15:58 -07:00
Jonas Daniels b92d3f7006 release dev 2022-09-02 18:49:15 -07:00
Jonas Daniels c9457bc2e7 also allow contributors 2022-09-02 18:38:06 -07:00
Jonas Daniels 3308bddd70 fix release pr action? 2022-09-02 18:37:39 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
8954b8c5b6 Version Packages (#62)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-02 17:31:37 -07:00
Jonas DanielsandGitHub 3287c2b0f2 Jd/add pre release (#61) 2022-09-02 17:26:47 -07:00
Jonas DanielsandGitHub a5cdd85c77 [SDK] - rapid testing (#64) 2022-09-02 16:17:18 -07:00
e9e71cfcd8 Add CLI tests (#56)
Co-authored-by: Jonas Daniels <[email protected]>
2022-09-02 13:44:43 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
27b3475d64 Version Packages (#60)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-02 09:23:54 -07:00
6ba9cad8d8 fix contracts build (#59)
Co-authored-by: Joaquim Verges <[email protected]>
2022-09-02 09:14:34 -07:00
Jonas Daniels a5ad3d6828 fix e2e tests (re-instll playwright in CI for now 2022-09-02 09:07:52 -07:00
Joaquim Verges 9c817de558 fix GH action formatting 2022-09-01 21:01:08 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
326f52ae4e Version Packages (#58)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-01 19:26:52 -07:00
Jonas Daniels beafc856cf change the file so workflow runs 2022-09-01 19:21:30 -07:00
Jonas Daniels a85b35e75f fix workflows 2022-09-01 19:19:44 -07:00
Jonas Daniels 5644ccd3ee bump versions 2022-09-01 19:13:49 -07:00
Jonas Daniels 14a5a31d70 Merge branch 'main' of github.com:thirdweb-dev/js 2022-09-01 19:10:26 -07:00
Jonas Daniels 83417c23d8 fix workflows? 2022-09-01 19:10:17 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
b6ebc82d5a Version Packages (#57)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-01 18:49:01 -07:00
Jonas Daniels 091f175860 bump & release all 2022-09-01 18:43:13 -07:00
Jonas Daniels 8811b99ad5 fix release workflow? 2022-09-01 18:35:02 -07:00
Jonas DanielsandGitHub 711783dbbf add workflow files (#55) 2022-09-01 18:09:16 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
cd44d4d0c2 Version Packages (#54)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-01 17:35:59 -07:00
Jonas DanielsandGitHub 924247a8ed [MULTI] - automatically bump & pin versions of dependent packages + do not check in ABIs (#53) 2022-09-01 17:29:15 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
97c6041b15 Version Packages (#51)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-01 15:50:44 -07:00
Joaquim VergesandGitHub 2eb7e945b1 Pack contract updates (#52) 2022-09-01 15:42:00 -07:00
Joaquim VergesandGitHub e59735b6a2 [SDK] add contract encoder to custom contracts (#49) 2022-09-01 13:40:36 -07:00
Jonas DanielsandGitHub c903ca8af9 [REACT] - apply sandboxing to MediaRenderer (#50) 2022-09-01 19:52:10 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
600a51d509 Version Packages (#35)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-09-01 11:50:23 -07:00
Jonas Daniels 32d923bd70 fix changeset config 2022-09-01 05:10:35 -07:00
Jonas DanielsandGitHub 82156cc727 [AUTH] - fix build (#47) 2022-09-01 04:55:20 -07:00
Jonas DanielsandGitHub 349b5c1e02 better babel transforms (#46) 2022-09-01 11:00:09 +00:00
Jonas DanielsandGitHub ed639d659d [MULTI] - switch back to preconstruct (#45) 2022-09-01 02:50:08 -07:00
Jonas Daniels a8d93a34c0 add missing dep 2022-09-01 00:42:31 -07:00
Jonas DanielsandGitHub f6b24a5b06 [AUTH] - fix build? (#44) 2022-09-01 00:40:00 -07:00
Jonas DanielsandGitHub 821383e26f attempt to fix auth build (#43) 2022-09-01 00:14:00 -07:00
Jonas DanielsandGitHub 46ad691a16 [MULTI] switch build to tsup to fix dependency build issues (#42) 2022-08-31 23:35:26 -07:00
Mahesh VagicherlaandGitHub f9067eb79b Fix typo in CLI (#41) 2022-08-31 22:32:40 -07:00
Joaquim VergesandGitHub 5bb92c3163 [Solana] add balance/transfer functions (#40) 2022-08-31 21:04:11 -07:00
Adam MajmudarandGitHub 00015fa958 Fix auth build CI (#39) 2022-09-01 01:55:50 +00:00
74640b23bf Add callbacks to next and express auth (#38)
Co-authored-by: Jonas Daniels <[email protected]>
2022-08-31 18:23:40 -07:00
Jonas Daniels 280b786e07 fix e2e job name 2022-08-31 17:28:15 -07:00
Joaquim VergesandGitHub 127bc50217 update to Contracts SDK 3.1.5 (#36) 2022-09-01 00:01:59 +00:00
Jonas Daniels 81e9a4a475 remove prepublishOnly steps 2022-08-31 16:34:47 -07:00
Jonas Daniels 6b10e0d9e6 add back independent nightly workflow 2022-08-31 16:31:48 -07:00
Jonas Daniels c075435be6 fix nightly snapshot 2022-08-31 16:23:42 -07:00
Jonas DanielsandGitHub 5731ac2f50 [MULTI] - add e2e tests in react, sdk & cli (#34) 2022-08-31 16:11:41 -07:00
Adam MajmudarandGitHub 5d8654a222 Update next endpoints (#37) 2022-08-31 14:27:24 -07:00
Adam MajmudarandGitHub c52a43c886 [Auth] Add support for next-auth integration (#30) 2022-08-31 19:43:52 +00:00
Joaquim VergesandGitHub 5f2c7063f3 add cache output for solana builds (#33) 2022-08-30 21:07:09 -07:00
Jarrod WattsandGitHub c7850ac4f7 [MULTI] - Update Old references to SDK URLs across readme files (#32) 2022-08-30 20:28:47 -07:00
Joaquim VergesandGitHub 3f77fc8b59 [Solana] setup basic testing for Solana (#31) 2022-08-30 17:47:31 -07:00
Jonas Daniels c4556a8026 fix workflow file 2022-08-29 23:14:42 -07:00
Jonas DanielsandGitHub a5de09b513 make nightly version part of the Release worfklow (#29) 2022-08-29 23:12:17 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
f801e97f34 Version Packages (#28)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-08-29 22:40:06 -07:00
Jonas DanielsandGitHub 02c2b52dda [MULTI] - force release (#27) 2022-08-29 22:37:50 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
ffb43f3789 Version Packages (#25)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-08-29 22:07:01 -07:00
046032711a [SDK] Add ThirdwebSDK and UserWallet to snippet generation (#26)
Co-authored-by: Jonas Daniels <[email protected]>
2022-08-29 22:04:33 -07:00
Jonas Daniels 66c1a7007f [CLI] bump version 2022-08-29 22:01:30 -07:00
Jonas DanielsandGitHub b58361eade [storage] explicitly rely on cross-fetch for fetching (#24) 2022-08-29 21:48:18 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
6f7fa93577 Version Packages (#23)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-08-29 21:05:57 -07:00
Jonas DanielsandGitHub b800302e4e [CLI] fix cli build (#22) 2022-08-30 03:46:56 +00:00
60e1e706d9 [CLI] Update README - Fix Link (#20)
Co-authored-by: Jonas Daniels <[email protected]>
2022-08-29 20:45:21 -07:00
Jarrod WattsandGitHub e9893cac6c [TS] - Update README - Fix Link (#21) 2022-08-29 20:44:43 -07:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
88df843a7b Version Packages (#18)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-08-29 16:30:36 -07:00
Jonas Daniels 3abe26cb66 bump everything 1 minor version 2022-08-29 16:28:24 -07:00
597 changed files with 21564 additions and 71767 deletions
+4 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "https://unpkg.com/@changesets/[email protected]/schema.json",
"changelog": "@changesets/cli/changelog",
"changelog": ["@changesets/changelog-github", { "repo": "thirdweb-dev/js" }],
"commit": false,
"fixed": [],
"linked": [],
@@ -8,6 +8,9 @@
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": [],
"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
"updateInternalDependents": "always"
},
"snapshot": {
"useCalculatedVersion": true,
"prereleaseTemplate": "{tag}-{commit}"
@@ -0,0 +1,18 @@
name: "Install"
description: "Sets up Node.js and runs install"
runs:
using: composite
steps:
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 16
registry-url: "https://registry.npmjs.org"
cache: "yarn"
- name: Install dependencies
shell: bash
run: yarn install --frozen-lockfile
env:
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: "1"
+132
View File
@@ -0,0 +1,132 @@
# Contributing to thirdweb
## Getting Started
To get started, read the [How this repo works](#how-this-repo-works) section below to learn about the structure of this repo.
From there, you can take a look at our [Good First Issues](https://github.com/thirdweb-dev/js/labels/good%20first%20issue) board and find an issue that interests you!
If you have any questions about the issue, feel free to ask on our [Discord server](https://discord.gg/thirdweb) in the `#contributors` channel; where you'll be able to get help from our team and other contributors.
<br/>
## How this repo works
[@thirdweb-dev/js](https://github.com/thirdweb-dev/js) is a monorepo, meaning it contains many projects within it.
We use [Turborepo](https://turborepo.org/docs/getting-started) to manage the monorepo, and help speed up the [CI/CD](https://www.atlassian.com/continuous-delivery/principles/continuous-integration-vs-delivery-vs-deployment) pipeline to ship to production faster 🚢.
You can see a quick outline of each of the projects within this repo below, which each live within the [/packages](/packages) directory:
| 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> |
| [/solana](./packages/solana) | Solana SDK for Browser, Node and React Native | <a href="https://www.npmjs.com/package/@thirdweb-dev/solana"><img src="https://img.shields.io/npm/v/@thirdweb-dev/solana?color=red&label=npm&logo=npm" alt="npm version"/></a> |
## How to contribute
Let's explore how you can set up the repo on your local machine and start contributing!
This section requires some existing knowledge of [Git](https://git-scm.com/), [Node.js](https://nodejs.org/en/) and [Yarn](https://yarnpkg.com/).
<br/>
### Getting the repo
For OSS contributions, we use a [Forking Workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow), meaning each developer will fork the repo and work on their own fork; and then submit a PR to the main repo when they're ready to merge their changes.
To begin:
1. [Create a fork](https://github.com/thirdweb-dev/js/fork) of this repository to your own GitHub account.
2. [Clone your fork](https://help.github.com/articles/cloning-a-repository/) to your local device.
3. Create a new branch on your fork to start working on your changes:
```
git checkout -b MY_BRANCH_NAME
```
4. Install the dependencies:
```
yarn
```
Now you have got the repo on your local machine, and you're ready to start making your changes!
<br/>
### Publish Your Changes
1. Use [changeset](https://github.com/changesets/changesets) to generate a changeset file:
```
yarn changeset
```
We follow [semantic versioning](https://semver.org/) for generating versioned releases of our packages (i.e. version = `MAJOR.MINOR.PATCH`)
- Update `major` for breaking changes
- Update `minor` for new features,
- Update `patch` for non-breaking bug fixes, etc)
2. Commit the changeset along with your changes:
```
git commit -am "My commit message"
```
3. Push your changes to the SDK:
```
git push origin MY_BRANCH_NAME
```
4. Create a [pull request](https://www.atlassian.com/git/tutorials/making-a-pull-request) to the `main` branch of the official (not your fork) SDK repo.
It's helpful to tag PRs with `[SDK]`, `[REACT]`, `[AUTH]`, (the name of the package you're modifying) to indicate the package that you are engaging with.
<br/>
### Testing Your Changes
When you make a pull request, your changes will be tested automatically by our CI/CD pipeline using [GitHub Actions](https://github.com/features/actions).
On your pull request, you can release your changes to a `dev` version by adding a **comment** with the following text:
```
/release-pr
```
This comment triggers the `release-pr` GitHub Action that publishes your changes to a `dev` version of the package(s) you are modifying.
Once this is done, you can test your changes by installing the `dev` version of the package(s).
If you don't already have a test project, you can use the [CLI](https://github.com/thirdweb-dev/thirdweb-cli) to create one:
```bash
npx thirdweb create
```
Inside your test project, you can install the `dev` version of the package(s) you are modifying.
For example, if you are modifying the `@thirdweb-dev/react` package, you can install the `dev` version of the package by running:
```
yarn add @thirdweb-dev/sdk@dev
```
This will install the `dev` version of the `@thirdweb-dev/react` package in your project, as you can see in the `package.json` file:
```diff
"dependencies": {
- "@thirdweb-dev/react": "^2",
+ "@thirdweb-dev/react": "^2.9.7-dev-b073878",
}
```
You can now test your changes in your test project!
+4 -10
View File
@@ -7,7 +7,7 @@ on:
types: [opened, synchronize]
concurrency:
group: ${{ github.ref }}
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
@@ -22,18 +22,12 @@ jobs:
steps:
- name: Check out code
uses: actions/checkout@v2
uses: actions/checkout@v3
with:
fetch-depth: 2
- name: Setup Node.js environment
uses: actions/setup-node@v2
with:
node-version: 16
cache: "yarn"
- name: Install Dependencies
run: yarn
- name: Install
uses: ./.github/composite-actions/install
- name: Build
run: yarn build
-41
View File
@@ -1,41 +0,0 @@
name: Release Nightly
on:
push:
branches:
- main
concurrency: ${{ github.workflow }}-${{ github.ref }}
jobs:
release:
name: Release Nightly
runs-on: ubuntu-latest
# To use Remote Caching, uncomment the next lines and follow the steps below.
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
steps:
- name: Checkout Repo
uses: actions/checkout@v2
- name: Setup Node.js environment
uses: actions/setup-node@v2
with:
node-version: 16
- name: Install Dependencies
run: yarn
- name: Create an .npmrc
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: |
cat << EOF > "$HOME/.npmrc"
//registry.npmjs.org/:_authToken=$NPM_TOKEN
EOF
- name: Publish Nightly version to NPM
run: yarn ci:release:nightly
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
-38
View File
@@ -1,38 +0,0 @@
name: Release
on:
push:
branches:
- main
concurrency: ${{ github.workflow }}-${{ github.ref }}
jobs:
release:
name: Release
runs-on: ubuntu-latest
# To use Remote Caching, uncomment the next lines and follow the steps below.
env:
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
TURBO_TEAM: ${{ secrets.TURBO_TEAM }}
steps:
- name: Checkout Repo
uses: actions/checkout@v2
- name: Setup Node.js environment
uses: actions/setup-node@v2
with:
node-version: 16
- name: Install Dependencies
run: yarn
- name: Create Release Pull Request or Publish to npm
id: changesets
uses: changesets/action@v1
with:
# This expects you to have a script called release which does a build for your packages and calls changeset publish
publish: yarn release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+72
View File
@@ -0,0 +1,72 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ "main" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "main" ]
schedule:
- cron: '37 9 * * 3'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
steps:
- name: Checkout repository
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2
# ℹ️ Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
# If the Autobuild fails above, remove it and uncomment the following three lines.
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
# - run: |
# echo "Run, Build Application using script"
# ./location_of_script_within_repo/buildscript.sh
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
+35
View File
@@ -0,0 +1,35 @@
name: Integration tests
on:
push:
branches: ["main"]
pull_request:
types: [opened, synchronize]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
integration-tests:
timeout-minutes: 60
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install
uses: ./.github/composite-actions/install
- name: Install Playwright
run: npx playwright install --with-deps
- name: Run e2e tests
run: yarn e2e
env:
NODE_OPTIONS: "--max_old_space_size=4096"
- uses: actions/upload-artifact@v2
if: always()
with:
name: playwright-report
path: packages/react/playwright-report/
retention-days: 30
+81
View File
@@ -0,0 +1,81 @@
# pulled from: https://github.com/changesets/changesets/pull/909
name: release-pr
on:
issue_comment:
types: [created]
jobs:
deploy-check:
runs-on: ubuntu-latest
steps:
- name: acknowledge deployment request to commenter
id: check
uses: khan/pull-request-comment-trigger@master
with:
trigger: "/release-pr"
reaction: rocket
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
- name: validate user
id: validate_user
if: ${{ steps.check.outputs.triggered == 'true' }}
run: |
if [[ "${AUTHOR_ASSOCIATION}" != 'MEMBER' && "${AUTHOR_ASSOCIATION}" != 'OWNER' && "${AUTHOR_ASSOCIATION}" != 'CONTRIBUTOR' ]]
then
echo "User authorization failed"
exit 1
else
echo "User authorization successful"
fi
env:
AUTHOR_ASSOCIATION: ${{ github.event.comment.author_association }}
- name: check outputs
run: echo ${{ steps.check.outputs.triggered }}
outputs:
triggered: ${{ steps.check.outputs.triggered }}
comment_body: ${{ github.event.comment.body }}
deploy:
runs-on: ubuntu-latest
needs: deploy-check
if: needs.deploy-check.outputs.triggered == 'true'
steps:
- name: get pull request ref
id: get_pull_request_ref
uses: octokit/[email protected]
with:
route: GET /repos/{owner}/{repository}/pulls/{issue_id}
owner: ${{ github.repository_owner }}
repository: ${{ github.event.repository.name }}
issue_id: ${{ github.event.issue.number }}
env:
GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
- name: pull the repo.
uses: actions/checkout@v3
with:
persist-credentials: true
repository: ${{ fromJson(steps.get_pull_request_ref.outputs.data).head.repo.full_name }}
ref: ${{ fromJson(steps.get_pull_request_ref.outputs.data).head.ref }}
- name: Install
uses: ./.github/composite-actions/install
- name: Build
run: yarn build:release
- name: Configure npm
run: |
echo "//registry.npmjs.org/:_authToken=${NPM_TOKEN}" > .npmrc
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Deploy pre-release
run: |
yarn changeset version --snapshot dev
yarn changeset publish --tag dev --no-git-tag
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+49
View File
@@ -0,0 +1,49 @@
name: Release Nightly & Stable
on:
push:
paths:
- ".changeset/**"
- "packages/**"
branches:
- main
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
jobs:
release:
name: Release
runs-on: ubuntu-latest
steps:
- name: Checkout branch
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Install
uses: ./.github/composite-actions/install
- name: Build
run: yarn build:release
- name: Create release Pull Request or publish to NPM
id: changesets
uses: changesets/action@v1
with:
publish: yarn release
version: yarn version-packages
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create @nightly release
if: steps.changesets.outputs.published != 'true'
run: |
git checkout main
yarn version-packages:nightly
yarn release:nightly
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+4 -1
View File
@@ -1,2 +1,5 @@
lib
node_modules
node_modules
dist
contracts-js
*.d.ts
+15 -15
View File
@@ -10,19 +10,19 @@ We pledge to act and interact in ways that contribute to an open, welcoming, div
Examples of behavior that contributes to a positive environment for our community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall community
- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience
- Focusing on what is best not just for us as individuals, but for the overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
- The use of sexualized language or imagery, and sexual attention or advances of any kind
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or email address, without their explicit permission
- Other conduct which could reasonably be considered inappropriate in a professional setting
## Enforcement Responsibilities
@@ -64,7 +64,7 @@ Community leaders will follow these Community Impact Guidelines in determining t
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the community.
@@ -72,12 +72,12 @@ Community leaders will follow these Community Impact Guidelines in determining t
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available at [https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][Mozilla CoC].
Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder][mozilla coc].
For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][FAQ]. Translations are available at [https://www.contributor-covenant.org/translations][translations].
For answers to common questions about this code of conduct, see the FAQ at [https://www.contributor-covenant.org/faq][faq]. Translations are available at [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[mozilla coc]: https://github.com/mozilla/diversity
[faq]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
+36 -28
View File
@@ -1,44 +1,52 @@
<p align="center">
<br />
<a href="https://thirdweb.com"><img src="https://github.com/thirdweb-dev/typescript-sdk/blob/main/logo.svg?raw=true" width="200" alt=""/></a>
<br />
<br />
<a href="https://thirdweb.com">
<img src="https://github.com/thirdweb-dev/js/blob/main/packages/sdk/logo.svg?raw=true" width="200" alt=""/></a>
<br />
</p>
<h1 align="center">thirdweb JavaScript/TypeScript monorepo</h1>
<h1 align="center"><a href='http://thirdweb.com/'>thirdweb</a> JavaScript/TypeScript monorepo</h1>
<p align="center">
<a href="https://github.com/thirdweb-dev/js/actions/workflows/CI.yml"><img alt="Build Status" src="https://github.com/thirdweb-dev/js/actions/workflows/CI.yml/badge.svg"/></a>
<a href="https://discord.gg/thirdweb"><img alt="Join our Discord!" src="https://img.shields.io/discord/834227967404146718.svg?color=7289da&label=discord&logo=discord&style=flat"/></a>
<a href="https://github.com/thirdweb-dev/js/actions/workflows/CI.yml">
<img alt="Build Status" src="https://github.com/thirdweb-dev/js/actions/workflows/CI.yml/badge.svg"/>
</a>
<a href="https://discord.gg/thirdweb">
<img alt="Join our Discord!" src="https://img.shields.io/discord/834227967404146718.svg?color=7289da&label=discord&logo=discord&style=flat"/>
</a>
</p>
<p align="center"><strong>Best in class web3 SDKs for Browser, Node and Mobile apps</strong></p>
<br />
## Packages
| Package | Description | Latest Version |
| ---------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [/sdk](./packages/sdk/README.md) | 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/README.md) | 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/README.md) | 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/README.md) | 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/README.md) | 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> |
| [/solana](./packages/cli/README.md) | Solana SDK for Browser, Node and React Native | <a href="https://www.npmjs.com/package/@thirdweb-dev/solana"><img src="https://img.shields.io/npm/v/@thirdweb-dev/solana?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> |
| [/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> |
| [/solana](./packages/solana) | Solana SDK for Browser, Node and React Native | <a href="https://www.npmjs.com/package/@thirdweb-dev/solana"><img src="https://img.shields.io/npm/v/@thirdweb-dev/solana?color=red&label=npm&logo=npm" alt="npm version"/></a> |
## How this monorepo functions
## Documentation
### Contributing
Visit [https://portal.thirdweb.com/](https://portal.thirdweb.com/) to view the full documentation.
1. Create PRs to the monorepo
2. Tag PRs with `[SDK]`, `[REACT]`, `[AUTH]`, etc to indicate the package that you are engaging with (TBD a better process for this / if it is necessary)
3. Create a `changeset` (with `yarn changeset`) for every **user impacting** change and describe what changed (try to focus on the end-user impact as much as possible -- use `major` for breaking changes, `minor` for new features, `patch` for non-breaking bug fixes, etc)
4. when the PR builds and tests pass merge to main
<br />
### Releases
## Contributing
#### Nightly
We welcome contributions from all developers, regardless of experience level. If you are interested in contributing, please read our [Contributing Guide](.github/contributing.md) where you'll learn how the repo works, how to test your changes, and how to submit a pull request.
- every push to main automatically gets published to the `@nightly` tag as a snapshot version (based on the commit hash)
- nightly versions are published to npm under the `@nightly` tag
<br />
#### Stable
## Community
- every push to main that contains a changeset automatically gets added to the [Version Packages](https://github.com/thirdweb-dev/js/tree/changeset-release/main) PR
- to release a stable version of the code that is on main (with the change sets as the release notes / changelog) merge the `Version Packages` PR to main, this will automatically create new `@latest` packages for all of the packages in the monorepo that have changesets
The best place to discuss your ideas, ask questions, and troubleshoot issues is our [Discord server](https://discord.gg/thirdweb).
<br/>
## Security
If you believe you have found a security vulnerability in any of our packages, we kindly ask you not to open a public issue; and to disclose this to us by emailing `[email protected]`.
+24 -13
View File
@@ -2,7 +2,7 @@
"name": "@thirdweb-dev/js",
"version": "1.0.0",
"main": "index.js",
"repository": "git@github.com:thirdweb-dev/js.git",
"repository": "https://github.com/thirdweb-dev/js",
"author": "thirdweb eng <[email protected]>",
"license": "MIT",
"private": true,
@@ -11,30 +11,41 @@
"packages/*"
]
},
"devDependencies": {
"@changesets/cli": "^2.24.3",
"@trivago/prettier-plugin-sort-imports": "^3.3.0",
"eslint": "^8.23.0",
"eslint-config-thirdweb": "*",
"prettier": "^2.7.1",
"turbo": "latest",
"yarn-deduplicate": "^5.0.2"
},
"scripts": {
"postinstall": "yarn-deduplicate yarn.lock",
"test": "turbo run test",
"e2e": "turbo run e2e",
"build": "turbo run build",
"build:release": "turbo run build --force",
"dev": "turbo run dev --no-cache --parallel --continue",
"fix:repo": "manypkg fix",
"lint": "turbo run lint",
"fix": "turbo run fix",
"clean": "turbo run clean && rm -rf node_modules",
"format": "prettier --write \"**/*.{ts,tsx,md}\"",
"changeset": "changeset",
"release": "turbo run build && changeset publish",
"ci:release:nightly": "turbo run build && yarn changeset version --snapshot nightly && yarn changeset publish --tag nightly --no-git-tag"
"version-packages": "changeset version",
"release": "node ./scripts/pre-release.mjs && changeset publish",
"version-packages:nightly": "changeset version --snapshot nightly",
"release:nightly": "node ./scripts/pre-release.mjs && changeset publish --tag nightly"
},
"preconstruct": {
"packages": [
"packages/*"
]
},
"packageManager": "[email protected]",
"dependencies": {
"@changesets/changelog-github": "^0.4.6",
"@changesets/cli": "^2.24.3",
"@manypkg/cli": "^0.19.1",
"@manypkg/get-packages": "^1.1.3",
"@trivago/prettier-plugin-sort-imports": "^3.3.0",
"eslint": "^8.21.0",
"postinstall-postinstall": "^2.1.0",
"prettier": "^2.7.1",
"turbo": "^1.4.6"
},
"manypkg": {
"defaultBranch": "main"
}
}
+2 -2
View File
@@ -1,6 +1,6 @@
{
"presets": [
"@babel/preset-typescript",
"@babel/preset-env"
["@babel/preset-env", { "targets": "defaults, not ie 11" }]
]
}
}
+125
View File
@@ -1,5 +1,130 @@
# @thirdweb-dev/auth
## 2.0.4
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/sdk@3.0.4
## 2.0.3
### Patch Changes
- Updated dependencies [[`51dde28`](https://github.com/thirdweb-dev/js/commit/51dde28224209f1b8b26f436c204a5e702281564), [`9d74a43`](https://github.com/thirdweb-dev/js/commit/9d74a43aac21448beba63ba4e2637945965a3634), [`b234c58`](https://github.com/thirdweb-dev/js/commit/b234c58d44d8322e44b2d2ba87ad4ec7d699e961)]:
- @thirdweb-dev/sdk@3.0.3
## 2.0.2
### Patch Changes
- Updated dependencies [[`42c79e9`](https://github.com/thirdweb-dev/js/commit/42c79e93dc958ca46a55d705aeea44ffdbbcc5f6), [`fe8751e`](https://github.com/thirdweb-dev/js/commit/fe8751eeae7ad013b890a8092ddbd091ecbd6708)]:
- @thirdweb-dev/sdk@3.0.2
## 2.0.1
### Patch Changes
- Updated dependencies [[`98dd64a`](https://github.com/thirdweb-dev/js/commit/98dd64a375c302a879aab3c628ecfb84b4dd19da)]:
- @thirdweb-dev/sdk@3.0.1
## 2.0.0
### Patch Changes
- Updated dependencies [[`a70b590`](https://github.com/thirdweb-dev/js/commit/a70b590be1efa7c0ad93a724afb24870439558ed), [`a37bc00`](https://github.com/thirdweb-dev/js/commit/a37bc00991bf1a359f5f8aa8e24e2c388dcd99d8), [`b442c97`](https://github.com/thirdweb-dev/js/commit/b442c970808f6cb7457d29542bd826dba711579c), [`0fa6f3f`](https://github.com/thirdweb-dev/js/commit/0fa6f3fcfbd571579baf9d2a0dbeee556ddbd5fe), [`2adb8ff`](https://github.com/thirdweb-dev/js/commit/2adb8ff6673768a91fa411c2d069245190ad9397), [`5a5bc36`](https://github.com/thirdweb-dev/js/commit/5a5bc361507bd8707dc12e9000bb9a218221cf61), [`820a519`](https://github.com/thirdweb-dev/js/commit/820a5191b5e7af5aba5e4d1cc90cd895c0dade11), [`0fa6f3f`](https://github.com/thirdweb-dev/js/commit/0fa6f3fcfbd571579baf9d2a0dbeee556ddbd5fe), [`82627ea`](https://github.com/thirdweb-dev/js/commit/82627ea0311f612119d0596ed0f568267a7af16b)]:
- @thirdweb-dev/sdk@3.0.0
## 1.0.8
### Patch Changes
- Updated dependencies [[`baa87a1`](https://github.com/thirdweb-dev/js/commit/baa87a1fbd7eee24ce9a95e16028de8435f85e69), [`4079326`](https://github.com/thirdweb-dev/js/commit/407932680fb024f17f12f578aa22c7f8c0c13339), [`05353fd`](https://github.com/thirdweb-dev/js/commit/05353fd8da82f77fb642bb38a533fb99801aed30)]:
- @thirdweb-dev/sdk@2.4.9
## 1.0.7
### Patch Changes
- [#61](https://github.com/thirdweb-dev/js/pull/61) [`3287c2b`](https://github.com/thirdweb-dev/js/commit/3287c2b0f233332fe4a095f973deed8efab91db6) Thanks [@jnsdls](https://github.com/jnsdls)! - fix versions in dependencies before releasing stable
- Updated dependencies [[`3287c2b`](https://github.com/thirdweb-dev/js/commit/3287c2b0f233332fe4a095f973deed8efab91db6)]:
- @thirdweb-dev/sdk@2.4.8
## 1.0.6
### Patch Changes
- Updated dependencies [[`6ba9cad`](https://github.com/thirdweb-dev/js/commit/6ba9cad8d8b933256599dc3b147601cd4828c89b)]:
- @thirdweb-dev/sdk@2.4.7
## 1.0.5
### Patch Changes
- [`5644ccd`](https://github.com/thirdweb-dev/js/commit/5644ccd3ee2ff330e4e5840d3266033376750117) Thanks [@jnsdls](https://github.com/jnsdls)! - bump versions again
- Updated dependencies [[`5644ccd`](https://github.com/thirdweb-dev/js/commit/5644ccd3ee2ff330e4e5840d3266033376750117)]:
- @thirdweb-dev/sdk@2.4.6
## 1.0.4
### Patch Changes
- [`091f175`](https://github.com/thirdweb-dev/js/commit/091f1758604d40e825ea28a13c2699d67bc75d8c) Thanks [@jnsdls](https://github.com/jnsdls)! - release-all-packages
- Updated dependencies [[`091f175`](https://github.com/thirdweb-dev/js/commit/091f1758604d40e825ea28a13c2699d67bc75d8c)]:
- @thirdweb-dev/sdk@2.4.5
## 1.0.3
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/sdk@2.4.4
## 1.0.2
### Patch Changes
- [#38](https://github.com/thirdweb-dev/js/pull/38) [`74640b2`](https://github.com/thirdweb-dev/js/commit/74640b23bf2c537f873186d3537e49b3289e8197) Thanks [@adam-maj](https://github.com/adam-maj)! - Add callbacks to express and next auth
- [#43](https://github.com/thirdweb-dev/js/pull/43) [`821383e`](https://github.com/thirdweb-dev/js/commit/821383e26f0e9f489e49be708a47823ac2de1473) Thanks [@jnsdls](https://github.com/jnsdls)! - export all entrypoints from main package
- [#39](https://github.com/thirdweb-dev/js/pull/39) [`00015fa`](https://github.com/thirdweb-dev/js/commit/00015fa958fbaea72526f42b95d919382694bbcd) Thanks [@adam-maj](https://github.com/adam-maj)! - Update auth build CI
- [#44](https://github.com/thirdweb-dev/js/pull/44) [`f6b24a5`](https://github.com/thirdweb-dev/js/commit/f6b24a5b06b034435785a2b788096e834bcefef9) Thanks [@jnsdls](https://github.com/jnsdls)! - attempt to fix auth build
- [#46](https://github.com/thirdweb-dev/js/pull/46) [`349b5c1`](https://github.com/thirdweb-dev/js/commit/349b5c1e028a06616d40de84257fd8d1cf05df83) Thanks [@jnsdls](https://github.com/jnsdls)! - imrprove babel & tsconfig settings
- [#47](https://github.com/thirdweb-dev/js/pull/47) [`82156cc`](https://github.com/thirdweb-dev/js/commit/82156cc727166230d301eeaf8fdc422332b06a8e) Thanks [@jnsdls](https://github.com/jnsdls)! - re-enable cache for auth build output
- [#37](https://github.com/thirdweb-dev/js/pull/37) [`5d8654a`](https://github.com/thirdweb-dev/js/commit/5d8654a22231c6205829f1731f91fb47d3410e98) Thanks [@adam-maj](https://github.com/adam-maj)! - Update user endpoints for express and next
- [#30](https://github.com/thirdweb-dev/js/pull/30) [`c52a43c`](https://github.com/thirdweb-dev/js/commit/c52a43c8863052b6d1bc9b8c3e1e86d0e1759d39) Thanks [@adam-maj](https://github.com/adam-maj)! - Add support for next-auth
- Updated dependencies [[`ed639d6`](https://github.com/thirdweb-dev/js/commit/ed639d659d9d746321fb8858212d22cc16d9cd19), [`349b5c1`](https://github.com/thirdweb-dev/js/commit/349b5c1e028a06616d40de84257fd8d1cf05df83), [`46ad691`](https://github.com/thirdweb-dev/js/commit/46ad691a1636dbc7915ade22067ccfa1d39f7851), [`5731ac2`](https://github.com/thirdweb-dev/js/commit/5731ac2f50ef63c243d3a6c2516e85920c325a95), [`5731ac2`](https://github.com/thirdweb-dev/js/commit/5731ac2f50ef63c243d3a6c2516e85920c325a95)]:
- @thirdweb-dev/sdk@2.4.2
## 1.0.1
### Patch Changes
- 02c2b52: force version
- Updated dependencies [02c2b52]
- @thirdweb-dev/sdk@2.4.1
## 1.0.0
### Minor Changes
- 3abe26c: initialze monorepo packages
### Patch Changes
- Updated dependencies [3abe26c]
- @thirdweb-dev/sdk@2.4.0
## 0.2.1
### Patch Changes
+2 -1
View File
@@ -1,6 +1,6 @@
<p align="center">
<br />
<a href="https://thirdweb.com"><img src="https://github.com/thirdweb-dev/typescript-sdk/blob/main/logo.svg?raw=true" width="200" alt=""/></a>
<a href="https://thirdweb.com"><img src="https://github.com/thirdweb-dev/js/blob/main/packages/sdk/logo.svg?raw=true" width="200" alt=""/></a>
<br />
</p>
<h1 align="center">thirdweb Auth</h1>
@@ -18,6 +18,7 @@ Install the latest version of the SDK with either `npm` or `yarn`:
```shell
npm install @thirdweb-dev/auth @thirdweb-dev/sdk ethers
```
```shell
yarn add @thirdweb-dev/auth @thirdweb-dev/sdk ethers
```
+2 -1
View File
@@ -1,3 +1,4 @@
{
"main": "dist/thirdweb-dev-auth-express.cjs.js"
"main": "dist/thirdweb-dev-auth-express.cjs.js",
"module": "dist/thirdweb-dev-auth-express.esm.js"
}
+4
View File
@@ -0,0 +1,4 @@
{
"main": "dist/thirdweb-dev-auth-next-auth.cjs.js",
"module": "dist/thirdweb-dev-auth-next-auth.esm.js"
}
+2 -1
View File
@@ -1,3 +1,4 @@
{
"main": "dist/thirdweb-dev-auth-next.cjs.js"
"main": "dist/thirdweb-dev-auth-next.cjs.js",
"module": "dist/thirdweb-dev-auth-next.esm.js"
}
+42 -13
View File
@@ -1,26 +1,42 @@
{
"name": "@thirdweb-dev/auth",
"version": "0.2.1",
"repository": {
"directory": "packages/auth",
"type": "git",
"url": "https://github.com/thirdweb-dev/js.git"
"version": "2.0.4",
"exports": {
"./package.json": "./package.json",
"./express": {
"module": "./express/dist/thirdweb-dev-auth-express.esm.js",
"default": "./express/dist/thirdweb-dev-auth-express.cjs.js"
},
"./next": {
"module": "./next/dist/thirdweb-dev-auth-next.esm.js",
"default": "./next/dist/thirdweb-dev-auth-express.cjs.js"
},
"./next-auth": {
"module": "./next-auth/dist/thirdweb-dev-auth-next-auth.esm.js",
"default": "./next-auth/dist/thirdweb-dev-auth-next-auth.cjs.js"
}
},
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/auth",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
"files": [
"dist/",
"next/",
"express/"
"dist/**/*",
"next/**/*",
"express/**/*",
"next-auth/**/*"
],
"scripts": {
"build": "preconstruct build",
"lint": "eslint"
"format": "prettier --write 'src/**/*'",
"lint": "eslint src/",
"fix": "eslint src/ --fix",
"clean": "rm -rf dist/ && rm -rf node_modules/"
},
"preconstruct": {
"entrypoints": [
"next/index.ts",
"express/index.ts"
"express/index.ts",
"next-auth/index.ts"
]
},
"devDependencies": {
@@ -37,14 +53,15 @@
"@typescript-eslint/eslint-plugin": "^5.33.0",
"@typescript-eslint/parser": "^5.33.0",
"eslint": "^8.21.0",
"eslint-config-prettier": "^8.5.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.26.0",
"eslint-plugin-inclusive-language": "^2.2.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-tsdoc": "^0.2.16",
"ethers": ">=5.5.1",
"ethers": "^5.7.0",
"express": "^4.18.1",
"next": "12.2.0",
"next-auth": "^4.10.3",
"prettier": "^2.7.1",
"typescript": "^4.7.4"
},
@@ -52,7 +69,19 @@
"@thirdweb-dev/sdk": "*",
"ethers": ">=5.5.1",
"express": "^4.18.1",
"next": "12.2.0"
"next": "12.2.0",
"next-auth": "^4.10.3"
},
"peerDependenciesMeta": {
"express": {
"optional": true
},
"next": {
"optional": true
},
"next-auth": {
"optional": true
}
},
"dependencies": {
"cookie": "^0.5.0",
+7 -2
View File
@@ -34,13 +34,18 @@ export function ThirdwebAuth(app: Express, cfg: ThirdwebAuthConfig) {
if (token) {
try {
const address = await sdk.auth.authenticate(domain, token);
user = { address };
if (ctx.callbacks?.user) {
user = await ctx.callbacks.user(address);
}
user = { ...user, address };
} catch {
// No-op
}
}
req.user = user;
req.user = user as ThirdwebAuthUser | null;
next();
});
+8 -3
View File
@@ -1,5 +1,5 @@
import { ThirdwebAuthContext } from "../types";
import { LoginPayload } from "@thirdweb-dev/sdk/dist/src/schema";
import { LoginPayload } from "@thirdweb-dev/sdk";
import { serialize } from "cookie";
import { Request, Response } from "express";
@@ -13,7 +13,7 @@ function redirectWithError(req: Request, res: Response, error: string) {
export default async function handler(
req: Request,
res: Response,
ctx: ThirdwebAuthContext
ctx: ThirdwebAuthContext,
) {
if (req.method !== "GET") {
return redirectWithError(req, res, "INVALID_METHOD");
@@ -44,8 +44,13 @@ export default async function handler(
httpOnly: true,
secure: true,
sameSite: "strict",
})
}),
);
if (ctx.callbacks?.login) {
const address = sdk.auth.verify(domain, payload);
await ctx.callbacks.login(address);
}
return res.status(301).redirect(req.query.redirect as string);
}
+1 -1
View File
@@ -14,7 +14,7 @@ export default async function handler(req: Request, res: Response) {
serialize("thirdweb_auth_token", "", {
path: "/",
expires: new Date(Date.now() + 5 * 1000),
})
}),
);
return res.status(301).redirect(req.headers.referer as string);
+6
View File
@@ -1,5 +1,11 @@
import { Request, Response } from "express";
export default async function handler(req: Request, res: Response) {
if (req.method !== "GET") {
return res.status(400).json({
error: "Invalid method. Only GET supported.",
});
}
return res.status(200).json(req.user);
}
+17
View File
@@ -7,15 +7,32 @@ export type ThirdwebAuthConfig = {
privateKey: string;
domain: string;
authUrl?: string;
callbacks?: {
login?: (address: string) => Promise<void> | void;
user?: (
address: string,
) =>
| Promise<Omit<ThirdwebAuthUser, "address">>
| Omit<ThirdwebAuthUser, "address">;
};
};
export type ThirdwebAuthContext = {
sdk: ThirdwebSDK;
domain: string;
callbacks?: {
login?: (address: string) => Promise<void> | void;
user?: (
address: string,
) =>
| Promise<Omit<ThirdwebAuthUser, "address">>
| Omit<ThirdwebAuthUser, "address">;
};
};
export type ThirdwebAuthUser = {
address: string;
[key: string]: any;
};
export type RequestWithUser = Request & {
+145
View File
@@ -0,0 +1,145 @@
import { ThirdwebNextAuthConfig } from "./types";
import { ThirdwebSDK } from "@thirdweb-dev/sdk";
import { serialize } from "cookie";
import {
GetServerSidePropsContext,
NextApiRequest,
NextApiResponse,
} from "next";
import NextAuth, {
NextAuthOptions,
Session,
unstable_getServerSession,
} from "next-auth";
import CredentialsProvider from "next-auth/providers/credentials";
export function ThirdwebNextAuth(cfg: ThirdwebNextAuthConfig) {
const sdk = ThirdwebSDK.fromPrivateKey(cfg.privateKey, "mainnet");
function ThirdwebProvider(res: GetServerSidePropsContext["res"]) {
return CredentialsProvider({
name: "ThirdwebAuth",
credentials: {
payload: {
label: "Payload",
type: "text",
placeholder: "",
},
},
async authorize({ payload }: any) {
try {
const parsed = JSON.parse(payload);
const token = await sdk.auth.generateAuthToken(cfg.domain, parsed);
const address = await sdk.auth.authenticate(cfg.domain, 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, {
path: "/",
httpOnly: true,
secure: true,
sameSite: "strict",
}),
);
return { address };
} catch (err) {
return null;
}
},
});
}
function nextOptions(
req: GetServerSidePropsContext["req"],
res: GetServerSidePropsContext["res"],
): NextAuthOptions {
async function session({
session: _session,
}: {
session: Session;
}): Promise<Session> {
const token = req.cookies.thirdweb_auth_token || "";
try {
const address = await sdk.auth.authenticate(cfg.domain, token);
_session.user = { ..._session.user, address } as Session["user"];
return _session;
} catch {
return _session;
}
}
function signOut() {
res.setHeader(
"Set-Cookie",
serialize("thirdweb_auth_token", "", {
path: "/",
expires: new Date(Date.now() + 5 * 1000),
}),
);
}
const providers: NextAuthOptions["providers"] = [
...cfg.nextOptions.providers,
ThirdwebProvider(res),
];
const configSession = cfg.nextOptions.callbacks?.session;
const callbacks: NextAuthOptions["callbacks"] = {
...cfg.nextOptions.callbacks,
session: configSession
? async (params) => {
params.session = await session(params);
return configSession(params);
}
: session,
};
const configSignOut = cfg.nextOptions.events?.signOut;
const events: NextAuthOptions["events"] = {
...cfg.nextOptions.events,
signOut: configSignOut
? async (params) => {
signOut();
return configSignOut(params);
}
: signOut,
};
return {
...cfg.nextOptions,
providers,
callbacks,
events,
};
}
async function getUser(
...args:
| [NextApiRequest, NextApiResponse]
| [GetServerSidePropsContext["req"], GetServerSidePropsContext["res"]]
) {
return unstable_getServerSession(
args[0],
args[1],
nextOptions(args[0], args[1]),
);
}
function NextAuthHandler(...args: [] | [NextApiRequest, NextApiResponse]) {
if (args.length === 0) {
return (req: NextApiRequest, res: NextApiResponse) => {
return NextAuth(req, res, nextOptions(req, res));
};
}
return NextAuth(args[0], args[1], nextOptions(args[0], args[1]));
}
return {
NextAuthHandler,
getUser,
};
}
@@ -0,0 +1,7 @@
import { NextAuthOptions } from "next-auth";
export type ThirdwebNextAuthConfig = {
privateKey: string;
domain: string;
nextOptions: NextAuthOptions;
};
+2 -2
View File
@@ -20,7 +20,7 @@ export * from "./types";
async function ThirdwebAuthRouter(
req: NextApiRequest,
res: NextApiResponse,
ctx: ThirdwebAuthContext
ctx: ThirdwebAuthContext,
) {
// Catch-all route must be named with [...thirdweb]
const { thirdweb } = req.query;
@@ -58,7 +58,7 @@ export function ThirdwebAuth(cfg: ThirdwebAuthConfig) {
}
async function getUser(
req: GetServerSidePropsContext["req"] | NextRequest | NextApiRequest
req: GetServerSidePropsContext["req"] | NextRequest | NextApiRequest,
) {
const { sdk, domain } = ctx;
let user: ThirdwebAuthUser | null = null;
+9 -4
View File
@@ -1,12 +1,12 @@
import { ThirdwebAuthContext } from "../types";
import { LoginPayload } from "@thirdweb-dev/sdk/dist/src/schema";
import { LoginPayload } from "@thirdweb-dev/sdk";
import { serialize } from "cookie";
import { NextApiRequest, NextApiResponse } from "next";
function redirectWithError(
req: NextApiRequest,
res: NextApiResponse,
error: string
error: string,
) {
const encodedError = encodeURIComponent(error);
const url = new URL(req.headers.referer as string);
@@ -17,7 +17,7 @@ function redirectWithError(
export default async function handler(
req: NextApiRequest,
res: NextApiResponse,
ctx: ThirdwebAuthContext
ctx: ThirdwebAuthContext,
) {
if (req.method !== "GET") {
return redirectWithError(req, res, "INVALID_METHOD");
@@ -48,8 +48,13 @@ export default async function handler(
httpOnly: true,
secure: true,
sameSite: "strict",
})
}),
);
if (ctx.callbacks?.login) {
const address = sdk.auth.verify(domain, payload);
await ctx.callbacks.login(address);
}
return res.status(301).redirect(req.query.redirect as string);
}
+2 -2
View File
@@ -3,7 +3,7 @@ import { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
res: NextApiResponse,
) {
if (req.method !== "GET") {
return res.status(400).json({
@@ -17,7 +17,7 @@ export default async function handler(
serialize("thirdweb_auth_token", "", {
path: "/",
expires: new Date(Date.now() + 5 * 1000),
})
}),
);
return res.status(301).redirect(req.headers.referer as string);
+15 -4
View File
@@ -1,11 +1,17 @@
import { ThirdwebAuthContext } from "../types";
import { ThirdwebAuthContext, ThirdwebAuthUser } from "../types";
import { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse,
ctx: ThirdwebAuthContext
ctx: ThirdwebAuthContext,
) {
if (req.method !== "GET") {
return res.status(400).json({
error: "Invalid method. Only GET supported.",
});
}
const { sdk, domain } = ctx;
let user = null;
const token = req.cookies.thirdweb_auth_token;
@@ -13,11 +19,16 @@ export default async function handler(
if (token) {
try {
const address = await sdk.auth.authenticate(domain, token);
user = { address };
if (ctx.callbacks?.user) {
user = await ctx.callbacks.user(address);
}
user = { ...user, address };
} catch {
// No-op
}
}
return res.status(200).json(user);
return res.status(200).json(user as ThirdwebAuthUser | null);
}
+17
View File
@@ -5,13 +5,30 @@ export type ThirdwebAuthRoute = "login" | "logout" | "user";
export type ThirdwebAuthConfig = {
privateKey: string;
domain: string;
callbacks?: {
login?: (address: string) => Promise<void> | void;
user?: (
address: string,
) =>
| Promise<Omit<ThirdwebAuthUser, "address">>
| Omit<ThirdwebAuthUser, "address">;
};
};
export type ThirdwebAuthContext = {
sdk: ThirdwebSDK;
domain: string;
callbacks?: {
login?: (address: string) => Promise<void> | void;
user?: (
address: string,
) =>
| Promise<Omit<ThirdwebAuthUser, "address">>
| Omit<ThirdwebAuthUser, "address">;
};
};
export type ThirdwebAuthUser = {
address: string;
[key: string]: any;
};
+135
View File
@@ -1,5 +1,140 @@
# thirdweb
## 0.7.15
### Patch Changes
- [#148](https://github.com/thirdweb-dev/js/pull/148) [`964add6`](https://github.com/thirdweb-dev/js/commit/964add6f205577298b8f4b9ce7298e5bf09e88e7) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Fix deploy/release CLI uploads
- Updated dependencies []:
- @thirdweb-dev/sdk@3.0.4
## 0.7.14
### Patch Changes
- [#134](https://github.com/thirdweb-dev/js/pull/134) [`b1ae844`](https://github.com/thirdweb-dev/js/commit/b1ae844e8bbed59c0225b32f4115ae384fa23ef5) Thanks [@adam-maj](https://github.com/adam-maj)! - Update ordering of commands in npx thirdweb
- Updated dependencies [[`51dde28`](https://github.com/thirdweb-dev/js/commit/51dde28224209f1b8b26f436c204a5e702281564), [`9d74a43`](https://github.com/thirdweb-dev/js/commit/9d74a43aac21448beba63ba4e2637945965a3634), [`b234c58`](https://github.com/thirdweb-dev/js/commit/b234c58d44d8322e44b2d2ba87ad4ec7d699e961)]:
- @thirdweb-dev/sdk@3.0.3
## 0.7.13
### Patch Changes
- [#128](https://github.com/thirdweb-dev/js/pull/128) [`4dca5b2`](https://github.com/thirdweb-dev/js/commit/4dca5b21a66fe8ff4c4b24663e1b9ad6c446b7e2) Thanks [@jarrodwatts](https://github.com/jarrodwatts)! - Add new documentation for detectable features
- Updated dependencies [[`42c79e9`](https://github.com/thirdweb-dev/js/commit/42c79e93dc958ca46a55d705aeea44ffdbbcc5f6), [`fe8751e`](https://github.com/thirdweb-dev/js/commit/fe8751eeae7ad013b890a8092ddbd091ecbd6708)]:
- @thirdweb-dev/sdk@3.0.2
## 0.7.12
### Patch Changes
- Updated dependencies [[`98dd64a`](https://github.com/thirdweb-dev/js/commit/98dd64a375c302a879aab3c628ecfb84b4dd19da)]:
- @thirdweb-dev/sdk@3.0.1
## 0.7.11
### Patch Changes
- [#114](https://github.com/thirdweb-dev/js/pull/114) [`1df2dea`](https://github.com/thirdweb-dev/js/commit/1df2dea18f85f6760040c9000f2eb8aee8a6011b) Thanks [@jnsdls](https://github.com/jnsdls)! - remove deprecacted `publish` cli command (use `release` instead)
- Updated dependencies [[`a70b590`](https://github.com/thirdweb-dev/js/commit/a70b590be1efa7c0ad93a724afb24870439558ed), [`a37bc00`](https://github.com/thirdweb-dev/js/commit/a37bc00991bf1a359f5f8aa8e24e2c388dcd99d8), [`b442c97`](https://github.com/thirdweb-dev/js/commit/b442c970808f6cb7457d29542bd826dba711579c), [`0fa6f3f`](https://github.com/thirdweb-dev/js/commit/0fa6f3fcfbd571579baf9d2a0dbeee556ddbd5fe), [`2adb8ff`](https://github.com/thirdweb-dev/js/commit/2adb8ff6673768a91fa411c2d069245190ad9397), [`5a5bc36`](https://github.com/thirdweb-dev/js/commit/5a5bc361507bd8707dc12e9000bb9a218221cf61), [`820a519`](https://github.com/thirdweb-dev/js/commit/820a5191b5e7af5aba5e4d1cc90cd895c0dade11), [`0fa6f3f`](https://github.com/thirdweb-dev/js/commit/0fa6f3fcfbd571579baf9d2a0dbeee556ddbd5fe), [`82627ea`](https://github.com/thirdweb-dev/js/commit/82627ea0311f612119d0596ed0f568267a7af16b)]:
- @thirdweb-dev/sdk@3.0.0
## 0.7.10
### Patch Changes
- Updated dependencies [[`baa87a1`](https://github.com/thirdweb-dev/js/commit/baa87a1fbd7eee24ce9a95e16028de8435f85e69), [`4079326`](https://github.com/thirdweb-dev/js/commit/407932680fb024f17f12f578aa22c7f8c0c13339), [`05353fd`](https://github.com/thirdweb-dev/js/commit/05353fd8da82f77fb642bb38a533fb99801aed30)]:
- @thirdweb-dev/sdk@2.4.9
## 0.7.9
### Patch Changes
- [#61](https://github.com/thirdweb-dev/js/pull/61) [`3287c2b`](https://github.com/thirdweb-dev/js/commit/3287c2b0f233332fe4a095f973deed8efab91db6) Thanks [@jnsdls](https://github.com/jnsdls)! - fix versions in dependencies before releasing stable
- [#56](https://github.com/thirdweb-dev/js/pull/56) [`e9e71cf`](https://github.com/thirdweb-dev/js/commit/e9e71cfcd892611cd653431dc433b27532e9e3cc) Thanks [@nachoiacovino](https://github.com/nachoiacovino)! - Add basic tests
- Updated dependencies [[`3287c2b`](https://github.com/thirdweb-dev/js/commit/3287c2b0f233332fe4a095f973deed8efab91db6)]:
- @thirdweb-dev/sdk@2.4.8
## 0.7.8
### Patch Changes
- Updated dependencies [[`6ba9cad`](https://github.com/thirdweb-dev/js/commit/6ba9cad8d8b933256599dc3b147601cd4828c89b)]:
- @thirdweb-dev/sdk@2.4.7
## 0.7.7
### Patch Changes
- [`5644ccd`](https://github.com/thirdweb-dev/js/commit/5644ccd3ee2ff330e4e5840d3266033376750117) Thanks [@jnsdls](https://github.com/jnsdls)! - bump versions again
- Updated dependencies [[`5644ccd`](https://github.com/thirdweb-dev/js/commit/5644ccd3ee2ff330e4e5840d3266033376750117)]:
- @thirdweb-dev/sdk@2.4.6
## 0.7.6
### Patch Changes
- [`091f175`](https://github.com/thirdweb-dev/js/commit/091f1758604d40e825ea28a13c2699d67bc75d8c) Thanks [@jnsdls](https://github.com/jnsdls)! - release-all-packages
- Updated dependencies [[`091f175`](https://github.com/thirdweb-dev/js/commit/091f1758604d40e825ea28a13c2699d67bc75d8c)]:
- @thirdweb-dev/sdk@2.4.5
## 0.7.5
### Patch Changes
- Updated dependencies []:
- @thirdweb-dev/sdk@2.4.4
## 0.7.4
### Patch Changes
- [#42](https://github.com/thirdweb-dev/js/pull/42) [`46ad691`](https://github.com/thirdweb-dev/js/commit/46ad691a1636dbc7915ade22067ccfa1d39f7851) Thanks [@jnsdls](https://github.com/jnsdls)! - switch build to tsup
- [#34](https://github.com/thirdweb-dev/js/pull/34) [`5731ac2`](https://github.com/thirdweb-dev/js/commit/5731ac2f50ef63c243d3a6c2516e85920c325a95) Thanks [@jnsdls](https://github.com/jnsdls)! - add e2e tests
- Updated dependencies [[`ed639d6`](https://github.com/thirdweb-dev/js/commit/ed639d659d9d746321fb8858212d22cc16d9cd19), [`349b5c1`](https://github.com/thirdweb-dev/js/commit/349b5c1e028a06616d40de84257fd8d1cf05df83), [`46ad691`](https://github.com/thirdweb-dev/js/commit/46ad691a1636dbc7915ade22067ccfa1d39f7851), [`5731ac2`](https://github.com/thirdweb-dev/js/commit/5731ac2f50ef63c243d3a6c2516e85920c325a95), [`5731ac2`](https://github.com/thirdweb-dev/js/commit/5731ac2f50ef63c243d3a6c2516e85920c325a95)]:
- @thirdweb-dev/sdk@2.4.2
## 0.7.3
### Patch Changes
- 02c2b52: force version
- Updated dependencies [02c2b52]
- @thirdweb-dev/sdk@2.4.1
## 0.7.2
### Patch Changes
- 66c1a70: version cli & fix typo
## 0.7.1
### Patch Changes
- b800302: fix the build (ESM package)
## 0.7.0
### Minor Changes
- 3abe26c: initialze monorepo packages
### Patch Changes
- Updated dependencies [3abe26c]
- @thirdweb-dev/sdk@2.4.0
## 0.6.16
### Patch Changes
+2 -2
View File
@@ -1,6 +1,6 @@
<p align="center">
<br />
<a href="https://thirdweb.com"><img src="https://github.com/thirdweb-dev/typescript-sdk/blob/main/logo.svg?raw=true" width="200" alt=""/></a>
<a href="https://thirdweb.com"><img src="https://github.com/thirdweb-dev/js/blob/main/packages/sdk/logo.svg?raw=true" width="200" alt=""/></a>
<br />
</p>
<h1 align="center">thirdweb CLI</h1>
@@ -62,7 +62,7 @@ Deploying released contracts give deployers access to automatic SDKs to integrat
npx thirdweb@latest detect
```
As you're developing your contracts, you may want to implement [Contract Extensions](https://portal.thirdweb.com/thirdweb-deploy/contract-extensions) to unlock functionality on the SDKs (ie. nft minting with automatic upload to IPFS) and the dashboard (ie. generated UI to manage permissions). This command will show what extensions were detected on your contract, unlocking the corresponding functionality on the SDKs and dashboard.
As you're developing your contracts, you may want to implement [Extensions](https://portal.thirdweb.com/extensions) to unlock functionality on the SDKs (ie. nft minting with automatic upload to IPFS) and the dashboard (ie. generated UI to manage permissions). This command will show what extensions were detected on your contract, unlocking the corresponding functionality on the SDKs and dashboard.
---
+12
View File
@@ -0,0 +1,12 @@
export const CREATE_MESSAGES = {
typeOfProject: "What type of project do you want to create?",
projectName: "What is your project named?",
framework: "What framework do you want to use?",
language: "What language do you want to use?",
contract: "What contract do you want to start from?",
} as const;
export const ERROR_MESSAGES = {
noConfiguration:
"Failed to find a supported project configuration file in current directory",
};
+37
View File
@@ -0,0 +1,37 @@
import { CREATE_MESSAGES } from "../constants/constants";
import { prepareEnvironment } from "@gmrchk/cli-testing-library";
// this creates an app, can take some time that's fine
jest.setTimeout(120_000);
describe("npx thirdweb create", () => {
it("should create app (CRA) successfully", async () => {
const { spawn, cleanup, exists } = await prepareEnvironment();
const { waitForText, waitForFinish, getExitCode, pressKey } = await spawn(
"node",
"./dist/cli/index.js create",
);
await waitForText(CREATE_MESSAGES.typeOfProject);
await pressKey("enter");
await waitForText(CREATE_MESSAGES.projectName);
await pressKey("enter");
await waitForText(CREATE_MESSAGES.framework);
// select CRA
await pressKey("arrowDown");
await pressKey("enter");
await waitForText(CREATE_MESSAGES.language);
await pressKey("enter");
// wait for program to finish
await waitForFinish();
// check if the app was created
expect(await exists("thirdweb-app/package.json")).toEqual(true);
// the process should exit with code 0
expect(getExitCode()).toEqual(0);
await cleanup(); // cleanup after test
});
});
+38
View File
@@ -0,0 +1,38 @@
import { ERROR_MESSAGES } from "../constants/constants";
import { prepareEnvironment } from "@gmrchk/cli-testing-library";
import { copyFile } from "fs/promises";
import { resolve } from "path";
// this creates an app, can take some time that's fine
jest.setTimeout(120_000);
describe("npx thirdweb deploy", () => {
it("should return deploy page url", async () => {
const { spawn, cleanup, exists, path } = await prepareEnvironment();
await copyFile(
resolve("./e2e/files/BasicContract.sol"),
`${path}/BasicContract.sol`,
);
const { waitForText, waitForFinish, getExitCode, writeText, getStdout } =
await spawn("node", "./dist/cli/index.js deploy");
expect(await exists("BasicContract.sol")).toEqual(true);
await waitForText(ERROR_MESSAGES.noConfiguration);
await writeText("y");
// wait for program to finish
await waitForFinish();
expect(getStdout().at(-1)).toContain(
"https://thirdweb.com/contracts/deploy/",
);
// the process should exit with code 0
expect(getExitCode()).toEqual(0);
await cleanup(); // cleanup after test
});
});
+84
View File
@@ -0,0 +1,84 @@
import { CREATE_MESSAGES } from "../constants/constants";
import { prepareEnvironment } from "@gmrchk/cli-testing-library";
// this creates an app, can take some time that's fine
jest.setTimeout(120_000);
describe("npx thirdweb detect", () => {
it("should detect ERC721Base extensions", async () => {
const { spawn, cleanup, exists } = await prepareEnvironment();
const create = await spawn("node", "./dist/cli/index.js create");
await create.waitForText(CREATE_MESSAGES.typeOfProject);
// select contract
await create.pressKey("arrowDown");
await create.pressKey("enter");
await create.waitForText(CREATE_MESSAGES.projectName);
// use default name
await create.pressKey("enter");
await create.waitForText(CREATE_MESSAGES.framework);
// select hardhat
await create.pressKey("enter");
await create.waitForText(CREATE_MESSAGES.contract);
// select ERC721Base
await create.pressKey("arrowDown");
await create.pressKey("enter");
// wait for program to finish
await create.waitForFinish();
// the process should exit with code 0
expect(create.getExitCode()).toEqual(0);
// check if the contract was created
expect(await exists("thirdweb-contracts/contracts/Contract.sol")).toEqual(
true,
);
// check that hardhat config exists
expect(await exists("thirdweb-contracts/hardhat.config.js")).toEqual(true);
await create.writeText("cd thirdweb-contracts");
await create.pressKey("enter");
await create.writeText("npm install");
await create.pressKey("enter");
const detect = await spawn(
"node",
"./dist/cli/index.js detect",
"./thirdweb-contracts",
);
// wait for program to finish
await detect.waitForFinish();
const lines = detect.getStdout();
// Detected extensions
expect(lines.findIndex((line) => line.includes("ERC721"))).toBeGreaterThan(
-1,
);
expect(
lines.findIndex((line) => line.includes("ERC721Burnable")),
).toBeGreaterThan(-1);
expect(
lines.findIndex((line) => line.includes("ERC721Mintable")),
).toBeGreaterThan(-1);
// Suggested extensions
expect(
lines.findIndex((line) => line.includes("- ERC721Enumerable")),
).toBeGreaterThan(-1);
expect(
lines.findIndex((line) => line.includes("- ERC721LazyMintable")),
).toBeGreaterThan(-1);
expect(
lines.findIndex((line) => line.includes("- ERC721SignatureMint")),
).toBeGreaterThan(-1);
// the process should exit with code 0
expect(detect.getExitCode()).toEqual(0);
await cleanup(); // cleanup after test
});
});
+6
View File
@@ -0,0 +1,6 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract BasicContract {
constructor() {}
}
+38
View File
@@ -0,0 +1,38 @@
import { ERROR_MESSAGES } from "../constants/constants";
import { prepareEnvironment } from "@gmrchk/cli-testing-library";
import { copyFile } from "fs/promises";
import { resolve } from "path";
// this creates an app, can take some time that's fine
jest.setTimeout(120_000);
describe("npx thirdweb release", () => {
it("should return release page url", async () => {
const { spawn, cleanup, exists, path } = await prepareEnvironment();
await copyFile(
resolve("./e2e/files/BasicContract.sol"),
`${path}/BasicContract.sol`,
);
const { waitForText, waitForFinish, getExitCode, writeText, getStdout } =
await spawn("node", "./dist/cli/index.js release");
expect(await exists("BasicContract.sol")).toEqual(true);
await waitForText(ERROR_MESSAGES.noConfiguration);
await writeText("y");
// wait for program to finish
await waitForFinish();
expect(getStdout().at(-1)).toContain(
"https://thirdweb.com/contracts/release/",
);
// the process should exit with code 0
expect(getExitCode()).toEqual(0);
await cleanup(); // cleanup after test
});
});
+5
View File
@@ -0,0 +1,5 @@
/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
module.exports = {
preset: 'ts-jest',
testEnvironment: 'node',
};
+17 -16
View File
@@ -1,21 +1,19 @@
{
"name": "thirdweb",
"main": "dist/cli/index.js",
"version": "0.6.16",
"repository": {
"type": "git",
"url": "git+https://github.com:thirdweb-dev/js.git",
"directory": "packages/cli"
},
"version": "0.7.15",
"repository": "https://github.com/thirdweb-dev/js/tree/main/packages/cli",
"author": "thirdweb eng <[email protected]>",
"license": "Apache-2.0",
"engines": {
"node": ">=14.0.0 <19"
},
"devDependencies": {
"@gmrchk/cli-testing-library": "^0.1.2",
"@types/async-retry": "1.3.0",
"@types/cross-spawn": "^6.0.2",
"@types/inquirer": "^8.2.1",
"@types/jest": "^29.0.0",
"@types/node": "^18.0.0",
"@types/prompts": "^2.0.14",
"@types/rimraf": "^3.0.0",
@@ -23,11 +21,13 @@
"@types/update-notifier": "^5.1.0",
"@types/validate-npm-package-name": "^4.0.0",
"hardhat": "^2.9.3",
"prettier": "^2.6.2",
"jest": "^28",
"prettier": "^2.7.1",
"ts-jest": "^28.0.8",
"ts-node": "^10.7.0",
"tsc": "^2.0.4",
"tsup": "^6.2.3",
"typescript": "^4.6.3"
"typescript": "^4.7.4"
},
"dependencies": {
"@thirdweb-dev/sdk": "*",
@@ -36,13 +36,12 @@
"commander": "^9.1.0",
"cpy": "^9.0.1",
"enquirer": "^2.3.6",
"ethers": "^5.6.9",
"ethers": "^5.7.0",
"form-data": "^4.0.0",
"got": "11.8.5",
"inquirer": "^8.2.3",
"ipfs-unixfs": "^6.0.7",
"ipld-dag-pb": "^0.22.3",
"isomorphic-fetch": "^3.0.0",
"multihashes": "^4.0.3",
"open": "^8.4.0",
"prompts": "^2.4.2",
@@ -53,19 +52,21 @@
"update-check": "^1.5.4",
"update-notifier": "^6.0.2",
"validate-npm-package-name": "^4.0.0",
"yaml": "^2.0.1"
"yaml": "^2.1.1"
},
"bin": {
"thirdweb": "./dist/cli/index.js"
},
"scripts": {
"prettier": "prettier --write 'src/**/*'",
"format": "prettier --write 'src/**/*'",
"lint": "eslint src/",
"fix": "eslint src/ --fix",
"clean": "rm -rf dist/",
"cli": "node -r ts-node/register src/cli/index.ts",
"build": "yarn clean && tsc --noEmit && tsup --env.NODE_ENV production --minify --format cjs --external hardhat --dts-resolve",
"build": "yarn clean && tsup --env.NODE_ENV production --minify --format cjs --external hardhat --dts-resolve",
"build:watch": "yarn run build --watch",
"prepublishOnly": "yarn build",
"generate-thirdweb-package": "node scripts/generate-thirdweb-package.js"
"generate-thirdweb-package": "node scripts/generate-thirdweb-package.js",
"e2e": "jest"
},
"files": [
"src/",
@@ -80,4 +81,4 @@
"sourcemap": true,
"clean": true
}
}
}
+55 -71
View File
@@ -9,7 +9,6 @@ import generateDashboardUrl from "../helpers/generate-dashboard-url";
import chalk from "chalk";
import { Command } from "commander";
import open from "open";
import updateNotifier from "update-notifier";
const main = async () => {
const program = new Command();
@@ -25,61 +24,49 @@ $$$$$$\\ $$$$$$$\\ $$\\ $$$$$$\\ $$$$$$$ |$$\\ $$\\ $$\\ $$$$$$\\ $$$$
\\$$$$ |$$ | $$ |$$ |$$ | \\$$$$$$$ |\\$$$$$\\$$$$ |\\$$$$$$$\\ $$$$$$$ |
\\____/ \\__| \\__|\\__|\\__| \\_______| \\_____\\____/ \\_______|\\_______/ `);
console.info(`\n 💎 thirdweb-cli v${cliVersion} 💎\n`);
updateNotifier({
pkg,
shouldNotifyInNpmScript: true,
//check every time while we're still building the CLI
updateCheckInterval: 0,
}).notify();
import("update-notifier").then(({ default: updateNotifier }) => {
updateNotifier({
pkg,
shouldNotifyInNpmScript: true,
// check every time while we're still building the CLI
updateCheckInterval: 0,
}).notify();
});
program
.name("thirdweb-cli")
.description("Official thirdweb command line interface")
.version(cliVersion, "-v, --version", "output the current version");
.version(cliVersion, "-v, --version");
program
.command("detect")
.command("create")
.description(
"Compile contracts and detect implemented thirdweb contract extensions",
"Create a thirdweb app from any of our official templates. Checkout some examples you can use here: https://github.com/thirdweb-example/",
)
.option("-p, --path <project-path>", "path to project", ".")
.option("-d, --debug", "show debug logs")
.option("-a, --all", "run detection on all contracts")
.action(async (options) => {
await detectExtensions(options);
});
program
.command("publish")
.description("[Deprecated] use 'release' instead.")
.option("-p, --path <project-path>", "path to project", ".")
.option("--dry-run", "dry run (skip actually publishing)")
.option("-d, --debug", "show debug logs")
.option("--ci", "Continuous Integration mode")
.action(async (options) => {
logger.warn(
"'publish' is deprecated adn will be removed in a future update. Please use 'release' instead.",
);
const url = await processProject(options, "release");
info(`Open this link to release your contracts:`);
logger.info(chalk.blueBright(url.toString()));
open(url.toString());
});
program
.command("release")
.description(
"Release contracts, making them available for others to deploy and unlocking SDKs, Dashboards and Analytics.",
.option("--app", `Create a thirdweb app.`)
.option("--contract", `Create a thirdweb contracts project.`)
.option("--ts, --typescript", `Initialize as a TypeScript project.`)
.option("--js, --javascript", `Initialize as a JavaScript project.`)
.option("--forge", `Initialize as a Forge project.`)
.option("--hardhat", `Initialize as a Hardhat project.`)
.option("--cra", `Initialize as a Create React App project.`)
.option("--next", `Initialize as a Next.js project.`)
.option("--vite", `Initialize as a Vite project.`)
.option(
"--use-npm",
`Explicitly tell the CLI to bootstrap the app using npm`,
)
.option(
"--use-pnpm",
`Explicitly tell the CLI to bootstrap the app using pnpm`,
)
.option("--framework [name]", `The preferred framework.`)
.option(
"-t, --template [name]",
`A template to start your project from. You can use an template repository name from the official thirdweb-example org.`,
)
.option("-p, --path <project-path>", "path to project", ".")
.option("--dry-run", "dry run (skip actually publishing)")
.option("-d, --debug", "show debug logs")
.option("--ci", "Continuous Integration mode")
.action(async (options) => {
const url = await processProject(options, "release");
info(`Open this link to release your contracts:`);
logger.info(chalk.blueBright(url.toString()));
open(url.toString());
await twCreate(options);
});
program
@@ -127,34 +114,31 @@ $$$$$$\\ $$$$$$$\\ $$\\ $$$$$$\\ $$$$$$$ |$$\\ $$\\ $$\\ $$$$$$\\ $$$$
});
program
.command("create")
.command("release")
.description(
"Create a thirdweb app from any of our official templates. Checkout some examples you can use here: https://github.com/thirdweb-example/",
)
.option("--app", `Create a thirdweb app.`)
.option("--contract", `Create a thirdweb contracts project.`)
.option("--ts, --typescript", `Initialize as a TypeScript project.`)
.option("--js, --javascript", `Initialize as a JavaScript project.`)
.option("--forge", `Initialize as a Forge project.`)
.option("--hardhat", `Initialize as a Hardhat project.`)
.option("--cra", `Initialize as a Create React App project.`)
.option("--next", `Initialize as a Next.js project.`)
.option("--vite", `Initialize as a Vite project.`)
.option(
"--use-npm",
`Explicitly tell the CLI to bootstrap the app using npm`,
)
.option(
"--use-pnpm",
`Explicitly tell the CLI to bootstrap the app using pnpm`,
)
.option("--framework [name]", `The preferred framework.`)
.option(
"-t, --template [name]",
`A template to start your project from. You can use an template repository name from the official thirdweb-example org.`,
"Release contracts, making them available for others to deploy and unlocking SDKs, Dashboards and Analytics.",
)
.option("-p, --path <project-path>", "path to project", ".")
.option("--dry-run", "dry run (skip actually publishing)")
.option("-d, --debug", "show debug logs")
.option("--ci", "Continuous Integration mode")
.action(async (options) => {
await twCreate(options);
const url = await processProject(options, "release");
info(`Open this link to release your contracts:`);
logger.info(chalk.blueBright(url.toString()));
open(url.toString());
});
program
.command("detect")
.description(
"Compile contracts and detect implemented thirdweb contract extensions",
)
.option("-p, --path <project-path>", "path to project", ".")
.option("-d, --debug", "show debug logs")
.option("-a, --all", "run detection on all contracts")
.action(async (options) => {
await detectExtensions(options);
});
program
+3 -3
View File
@@ -1,5 +1,5 @@
import { spinner } from "../core/helpers/logger";
import { IpfsStorage } from "@thirdweb-dev/storage";
import { ThirdwebStorage } from "@thirdweb-dev/storage";
import { existsSync, mkdirSync, writeFileSync } from "fs";
import path, { join } from "path";
@@ -13,10 +13,10 @@ export async function installGithubAction(options: any) {
: path.resolve(`${projectPath}/${options.path}`);
projectPath = resolvedPath;
}
const storage = new IpfsStorage();
const storage = new ThirdwebStorage();
const log = spinner("Installing thirdweb Github Action...");
try {
const ghActionData = await storage.getRaw(ghActionHash);
const ghActionData = await (await storage.download(ghActionHash)).text();
const dir = join(projectPath, ".github/workflows");
if (!existsSync(dir)) {
mkdirSync(dir, { recursive: true });
+6 -9
View File
@@ -1,18 +1,15 @@
import { ALWAYS_SUGGESTED } from "../constants/features";
import build from "../core/builder/build";
import detect from "../core/detection/detect";
import { logger, spinner, warn, info } from "../core/helpers/logger";
import { logger, spinner } from "../core/helpers/logger";
import { createContractsPrompt } from "../core/helpers/selector";
import { ContractFeatures, Feature } from "../core/interfaces/ContractFeatures";
import { ContractPayload } from "../core/interfaces/ContractPayload";
import { detectFeatures } from "@thirdweb-dev/sdk";
import { FeatureWithEnabled } from "@thirdweb-dev/sdk/dist/declarations/src/constants/contract-features";
import { detectFeatures, FeatureWithEnabled } from "@thirdweb-dev/sdk";
import chalk from "chalk";
import ora from "ora";
import path from "path";
const { MultiSelect } = require("enquirer");
export async function detectExtensions(options: any) {
logger.setSettings({
minLevel: options.debug ? "debug" : "info",
@@ -44,7 +41,7 @@ export async function detectExtensions(options: any) {
compileLoader.succeed("Compilation successful");
let selectedContracts: ContractPayload[] = [];
if (compiledResult.contracts.length == 1) {
if (compiledResult.contracts.length === 1) {
selectedContracts = [compiledResult.contracts[0]];
} else {
if (options.all) {
@@ -73,13 +70,13 @@ export async function detectExtensions(options: any) {
const enabledFeatures: Feature[] = features.enabledFeatures.map(
(feature) => ({
name: feature.name,
reference: `https://portal.thirdweb.com/contracts/${feature.docLinks.contracts}`,
reference: `https://portal.thirdweb.com/extensions/${feature.name.toLowerCase()}`,
}),
);
const suggestedFeatures: Feature[] = features.suggestedFeatures.map(
(feature) => ({
name: feature.name,
reference: `https://portal.thirdweb.com/contracts/${feature.docLinks.contracts}`,
reference: `https://portal.thirdweb.com/extensions/${feature.name.toLowerCase()}`,
}),
);
@@ -104,7 +101,7 @@ export async function detectExtensions(options: any) {
`Detected extension on ${chalk.blueBright(contractWithFeatures.name)}`,
).stopAndPersist({ symbol: "🔎" });
contractWithFeatures.enabledFeatures.map((feature) => {
info(`${chalk.green(feature.name)}`);
logger.info(`✔️ ${chalk.green(feature.name)}`);
});
}
logger.info(``);
+19 -17
View File
@@ -1,11 +1,11 @@
import { THIRDWEB_URL, cliVersion } from "../constants/urls";
import { cliVersion, THIRDWEB_URL } from "../constants/urls";
import build from "../core/builder/build";
import detect from "../core/detection/detect";
import { execute } from "../core/helpers/exec";
import { error, info, logger, spinner, warn } from "../core/helpers/logger";
import { error, info, logger, spinner } from "../core/helpers/logger";
import { createContractsPrompt } from "../core/helpers/selector";
import { ContractPayload } from "../core/interfaces/ContractPayload";
import { IpfsStorage } from "@thirdweb-dev/storage";
import { ThirdwebStorage } from "@thirdweb-dev/storage";
import chalk from "chalk";
import { readFileSync } from "fs";
import path from "path";
@@ -15,7 +15,7 @@ export async function processProject(
command: "deploy" | "release",
) {
// TODO: allow overriding the default storage
const storage = new IpfsStorage();
const storage = new ThirdwebStorage();
logger.setSettings({
minLevel: options.debug ? "debug" : "info",
@@ -65,7 +65,7 @@ export async function processProject(
}
compileLoader.succeed("Compilation successful");
if (compiledResult.contracts.length == 0) {
if (compiledResult.contracts.length === 0) {
logger.error(
"No deployable contract detected. Run with the '--debug' option to see what contracts were skipped and why.",
);
@@ -73,7 +73,7 @@ export async function processProject(
}
let selectedContracts: ContractPayload[] = [];
if (compiledResult.contracts.length == 1) {
if (compiledResult.contracts.length === 1) {
selectedContracts = [compiledResult.contracts[0]];
info(
`Processing contract: ${chalk.blueBright(
@@ -129,7 +129,9 @@ export async function processProject(
if (file.includes(soliditySDKPackage)) {
usesSoliditySDK = true;
}
return await storage.uploadSingle(file);
return await storage.upload(file, {
uploadWithoutDirectory: true,
});
}),
);
}
@@ -140,14 +142,15 @@ export async function processProject(
const metadataURIs = await Promise.all(
selectedContracts.map(async (c) => {
logger.debug(`Uploading ${c.name}...`);
const hash = await storage.uploadSingle(c.metadata);
return `ipfs://${hash}`;
return await storage.upload(JSON.parse(c.metadata), {
uploadWithoutDirectory: true,
});
}),
);
// Upload batch all bytecodes
const bytecodes = selectedContracts.map((c) => c.bytecode);
const { uris: bytecodeURIs } = await storage.uploadBatch(bytecodes);
const bytecodeURIs = await storage.uploadBatch(bytecodes);
const combinedContents = selectedContracts.map((c, i) => {
// attach analytics blob to metadata
@@ -167,16 +170,15 @@ export async function processProject(
};
});
let combinedURIs: string[] = [];
if (combinedContents.length == 1) {
if (combinedContents.length === 1) {
// use upload single if only one contract to get a clean IPFS hash
const metadataUri = await storage.uploadSingle(
JSON.stringify(combinedContents[0]),
);
const metadataUri = await storage.upload(combinedContents[0], {
uploadWithoutDirectory: true,
});
combinedURIs.push(metadataUri);
} else {
// otherwise upload batch
const { uris } = await storage.uploadMetadataBatch(combinedContents);
combinedURIs = uris;
combinedURIs = await storage.uploadBatch(combinedContents);
}
loader.succeed("Upload successful");
@@ -190,7 +192,7 @@ export async function processProject(
export function getUrl(hashes: string[], command: string) {
let url;
if (hashes.length == 1) {
if (hashes.length === 1) {
url = new URL(
THIRDWEB_URL +
`/contracts/${command}/` +
+294 -294
View File
@@ -1,294 +1,294 @@
const baseContracts = {
ERC721Base: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC721Base.sol";
contract Contract is ERC721Base {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
)
ERC721Base(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps
)
{}
}`,
ERC721Signature: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC721SignatureMint.sol";
contract Contract is ERC721SignatureMint {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps,
address _primarySaleRecipient
)
ERC721SignatureMint(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps,
_primarySaleRecipient
)
{}
}`,
ERC721LazyMint: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC721LazyMint.sol";
contract Contract is ERC721LazyMint {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
) ERC721LazyMint(_name, _symbol, _royaltyRecipient, _royaltyBps) {}
}`,
ERC721DelayedReveal: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC721DelayedReveal.sol";
contract Contract is ERC721DelayedReveal {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
) ERC721DelayedReveal(_name, _symbol, _royaltyRecipient, _royaltyBps) {}
}`,
ERC721Drop: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC721Drop.sol";
contract Contract is ERC721Drop {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps,
address _primarySaleRecipient
)
ERC721Drop(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps,
_primarySaleRecipient
)
{}
}`,
ERC1155Base: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC1155Base.sol";
contract Contract is ERC1155Base {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
)
ERC1155Base(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps
)
{}
}`,
ERC1155Signature: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC1155SignatureMint.sol";
contract Contract is ERC1155SignatureMint {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps,
address _primarySaleRecipient
)
ERC1155SignatureMint(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps,
_primarySaleRecipient
)
{}
}`,
ERC1155LazyMint: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC1155LazyMint.sol";
contract Contract is ERC1155LazyMint {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
) ERC1155LazyMint(_name, _symbol, _royaltyRecipient, _royaltyBps) {}
}`,
ERC1155DelayedReveal: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC1155DelayedReveal.sol";
contract Contract is ERC1155DelayedReveal {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
) ERC1155DelayedReveal(_name, _symbol, _royaltyRecipient, _royaltyBps) {}
}`,
ERC1155Drop: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC1155Drop.sol";
contract Contract is ERC1155Drop {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps,
address _primarySaleRecipient
)
ERC1155Drop(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps,
_primarySaleRecipient
)
{}
}`,
ERC20Base: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20Base.sol";
contract Contract is ERC20Base {
constructor(
string memory _name,
string memory _symbol
)
ERC20Base(
_name,
_symbol
)
{}
}`,
ERC20Vote: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20Vote.sol";
contract Contract is ERC20Vote {
constructor(
string memory _name,
string memory _symbol
)
ERC20Vote(
_name,
_symbol
)
{}
}`,
ERC20SignatureMint: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20SignatureMint.sol";
contract Contract is ERC20SignatureMint {
constructor(
string memory _name,
string memory _symbol,
address _primarySaleRecipient
)
ERC20SignatureMint(
_name,
_symbol,
_primarySaleRecipient
)
{}
}`,
ERC20SignatureMintVote: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20SignatureMintVote.sol";
contract Contract is ERC20SignatureMintVote {
constructor(
string memory _name,
string memory _symbol,
address _primarySaleRecipient
)
ERC20SignatureMintVote(
_name,
_symbol,
_primarySaleRecipient
)
{}
}`,
ERC20Drop: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20Drop.sol";
contract Contract is ERC20Drop {
constructor(
string memory _name,
string memory _symbol,
address _primarySaleRecipient
)
ERC20Drop(
_name,
_symbol,
_primarySaleRecipient
)
{}
}`,
ERC20DropVote: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20DropVote.sol";
contract Contract is ERC20DropVote {
constructor(
string memory _name,
string memory _symbol,
address _primarySaleRecipient
)
ERC20DropVote(
_name,
_symbol,
_primarySaleRecipient
)
{}
}`,
};
export default baseContracts;
const baseContracts = {
ERC721Base: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC721Base.sol";
contract Contract is ERC721Base {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
)
ERC721Base(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps
)
{}
}`,
ERC721Signature: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC721SignatureMint.sol";
contract Contract is ERC721SignatureMint {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps,
address _primarySaleRecipient
)
ERC721SignatureMint(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps,
_primarySaleRecipient
)
{}
}`,
ERC721LazyMint: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC721LazyMint.sol";
contract Contract is ERC721LazyMint {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
) ERC721LazyMint(_name, _symbol, _royaltyRecipient, _royaltyBps) {}
}`,
ERC721DelayedReveal: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC721DelayedReveal.sol";
contract Contract is ERC721DelayedReveal {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
) ERC721DelayedReveal(_name, _symbol, _royaltyRecipient, _royaltyBps) {}
}`,
ERC721Drop: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC721Drop.sol";
contract Contract is ERC721Drop {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps,
address _primarySaleRecipient
)
ERC721Drop(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps,
_primarySaleRecipient
)
{}
}`,
ERC1155Base: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC1155Base.sol";
contract Contract is ERC1155Base {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
)
ERC1155Base(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps
)
{}
}`,
ERC1155Signature: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC1155SignatureMint.sol";
contract Contract is ERC1155SignatureMint {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps,
address _primarySaleRecipient
)
ERC1155SignatureMint(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps,
_primarySaleRecipient
)
{}
}`,
ERC1155LazyMint: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC1155LazyMint.sol";
contract Contract is ERC1155LazyMint {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
) ERC1155LazyMint(_name, _symbol, _royaltyRecipient, _royaltyBps) {}
}`,
ERC1155DelayedReveal: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC1155DelayedReveal.sol";
contract Contract is ERC1155DelayedReveal {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps
) ERC1155DelayedReveal(_name, _symbol, _royaltyRecipient, _royaltyBps) {}
}`,
ERC1155Drop: `// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC1155Drop.sol";
contract Contract is ERC1155Drop {
constructor(
string memory _name,
string memory _symbol,
address _royaltyRecipient,
uint128 _royaltyBps,
address _primarySaleRecipient
)
ERC1155Drop(
_name,
_symbol,
_royaltyRecipient,
_royaltyBps,
_primarySaleRecipient
)
{}
}`,
ERC20Base: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20Base.sol";
contract Contract is ERC20Base {
constructor(
string memory _name,
string memory _symbol
)
ERC20Base(
_name,
_symbol
)
{}
}`,
ERC20Vote: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20Vote.sol";
contract Contract is ERC20Vote {
constructor(
string memory _name,
string memory _symbol
)
ERC20Vote(
_name,
_symbol
)
{}
}`,
ERC20SignatureMint: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20SignatureMint.sol";
contract Contract is ERC20SignatureMint {
constructor(
string memory _name,
string memory _symbol,
address _primarySaleRecipient
)
ERC20SignatureMint(
_name,
_symbol,
_primarySaleRecipient
)
{}
}`,
ERC20SignatureMintVote: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20SignatureMintVote.sol";
contract Contract is ERC20SignatureMintVote {
constructor(
string memory _name,
string memory _symbol,
address _primarySaleRecipient
)
ERC20SignatureMintVote(
_name,
_symbol,
_primarySaleRecipient
)
{}
}`,
ERC20Drop: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20Drop.sol";
contract Contract is ERC20Drop {
constructor(
string memory _name,
string memory _symbol,
address _primarySaleRecipient
)
ERC20Drop(
_name,
_symbol,
_primarySaleRecipient
)
{}
}`,
ERC20DropVote: `// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@thirdweb-dev/contracts/base/ERC20DropVote.sol";
contract Contract is ERC20DropVote {
constructor(
string memory _name,
string memory _symbol,
address _primarySaleRecipient
)
ERC20DropVote(
_name,
_symbol,
_primarySaleRecipient
)
{}
}`,
};
export default baseContracts;
+1 -1
View File
@@ -1,4 +1,4 @@
/**
* Features that are always recommended to implement
*/
export const ALWAYS_SUGGESTED = ["ContractMetadata", "Permissions"];
export const ALWAYS_SUGGESTED = ["ContractMetadata", "Permissions"];
+1
View File
@@ -19,4 +19,5 @@ export const PINATA_IPFS_URL = `https://api.pinata.cloud/pinning/pinFileToIPFS`;
export const THIRDWEB_URL = `https://thirdweb.com`;
export const pkg = require("../../package.json");
export const cliVersion = pkg.version;
+5 -2
View File
@@ -1,6 +1,6 @@
import { findFiles } from "../../common/file-helper";
import { execute } from "../helpers/exec";
import { logger, spinner } from "../helpers/logger";
import { logger } from "../helpers/logger";
import { CompileOptions } from "../interfaces/Builder";
import { ContractPayload } from "../interfaces/ContractPayload";
import { BaseBuilder } from "./builder-base";
@@ -21,7 +21,10 @@ export class BrownieBuilder extends BaseBuilder {
config?.project_structure?.build || "./build",
);
existsSync(buildPath) && rmSync(buildPath, { recursive: true });
if (existsSync(buildPath)) {
rmSync(buildPath, { recursive: true });
}
await execute("brownie compile", options.projectPath);
const contractsPath = join(buildPath, "contracts/");
+1 -1
View File
@@ -1,5 +1,5 @@
import { ContractPayload } from "../interfaces/ContractPayload";
import { ProjectType } from "./../types/ProjectType";
import { ProjectType } from "../types/ProjectType";
import { BrownieBuilder } from "./brownie";
import { FoundryBuilder } from "./foundry";
import { HardhatBuilder } from "./hardhat";
@@ -2,8 +2,6 @@ import { extractIPFSHashFromBytecode } from "../helpers/ipfs";
import { logger } from "../helpers/logger";
import { CompileOptions, IBuilder } from "../interfaces/Builder";
import { ContractPayload } from "../interfaces/ContractPayload";
import { existsSync, readdirSync, statSync } from "fs";
import { basename, join } from "path";
export abstract class BaseBuilder implements IBuilder {
abstract compile(
@@ -20,7 +18,7 @@ export abstract class BaseBuilder implements IBuilder {
bytecode === "" ||
bytecode === "0x" ||
!abi ||
abi.length == 0
abi.length === 0
) {
return false;
}
+2 -1
View File
@@ -111,9 +111,10 @@ export class FoundryBuilder extends BaseBuilder {
}
private sort(object: any) {
if (typeof object != "object" || object instanceof Array)
if (typeof object !== "object" || object instanceof Array) {
// Not to sort the array
return object;
}
var keys = Object.keys(object);
keys.sort();
var newObject: any = {};
+1 -1
View File
@@ -1,6 +1,6 @@
import { findFiles } from "../../common/file-helper";
import { execute } from "../helpers/exec";
import { logger, spinner } from "../helpers/logger";
import { logger } from "../helpers/logger";
import { CompileOptions } from "../interfaces/Builder";
import { ContractPayload } from "../interfaces/ContractPayload";
import { BaseBuilder } from "./builder-base";
+4 -4
View File
@@ -1,5 +1,5 @@
import { findFiles } from "../../common/file-helper";
import { logger, spinner } from "../helpers/logger";
import { logger } from "../helpers/logger";
import { CompileOptions } from "../interfaces/Builder";
import { ContractPayload } from "../interfaces/ContractPayload";
import { BaseBuilder } from "./builder-base";
@@ -49,7 +49,7 @@ export class SolcBuilder extends BaseBuilder {
return { contents: readFileSync(nodeModulesPath, "utf-8") };
}
return {
error: "file not fount",
error: "file not found",
};
},
}),
@@ -122,7 +122,7 @@ export class SolcBuilder extends BaseBuilder {
continue;
}
const sources = Object.keys(parsedMetadata.sources)
const _sources = Object.keys(parsedMetadata.sources)
.map((path) => {
const matchingSourcePath = inputPaths.find((p) => p.includes(path));
if (matchingSourcePath && existsSync(matchingSourcePath)) {
@@ -145,7 +145,7 @@ export class SolcBuilder extends BaseBuilder {
metadata,
bytecode,
name: contractName,
sources,
sources: _sources,
});
}
}
+5 -2
View File
@@ -1,6 +1,6 @@
import { findFiles } from "../../common/file-helper";
import { execute } from "../helpers/exec";
import { logger, spinner } from "../helpers/logger";
import { logger } from "../helpers/logger";
import { CompileOptions } from "../interfaces/Builder";
import { ContractPayload } from "../interfaces/ContractPayload";
import { BaseBuilder } from "./builder-base";
@@ -22,7 +22,10 @@ export class TruffleBuilder extends BaseBuilder {
truffleConfig.contracts_build_directory || "./build/contracts",
);
existsSync(buildPath) && rmSync(buildPath, { recursive: true });
if (existsSync(buildPath)) {
rmSync(buildPath, { recursive: true });
}
await execute("npx --yes truffle compile", options.projectPath);
const contracts: ContractPayload[] = [];
@@ -1,4 +1,3 @@
import { logger } from "../helpers/logger";
import { ProjectType } from "../types/ProjectType";
import { Detector } from "./detector";
import { existsSync } from "fs";
+4 -2
View File
@@ -1,3 +1,4 @@
import { ERROR_MESSAGES } from "../../../constants/constants";
import { info, logger, warn } from "../helpers/logger";
import { ProjectType } from "../types/ProjectType";
import { Detector } from "./detector";
@@ -25,10 +26,11 @@ export default async function detect(
//if there is no project returned at all then just return unknown}
if (!possibleProjectTypes.length) {
warn("Failed to find a supported project configuration file in current directory " + path);
warn(`${ERROR_MESSAGES.noConfiguration} ${path}`);
const prompt = new Confirm({
name: "continue",
message: "Do you want to continue and compile this project with solc instead?",
message:
"Do you want to continue and compile this project with solc instead?",
});
const shouldCompile = await prompt.run();
if (!shouldCompile) {
@@ -1,4 +1,3 @@
import { logger } from "../helpers/logger";
import { ProjectType } from "../types/ProjectType";
import { Detector } from "./detector";
import { existsSync } from "fs";
@@ -1,4 +1,3 @@
import { logger } from "../helpers/logger";
import { ProjectType } from "../types/ProjectType";
import { Detector } from "./detector";
import { existsSync } from "fs";
@@ -1,4 +1,3 @@
import { logger } from "../helpers/logger";
import { ProjectType } from "../types/ProjectType";
import { Detector } from "./detector";
import { existsSync } from "fs";
+2 -2
View File
@@ -1,4 +1,3 @@
import { logger } from "./logger";
import { decodeFirstSync } from "cbor";
import { UnixFS } from "ipfs-unixfs";
import { DAGNode } from "ipld-dag-pb";
@@ -53,8 +52,9 @@ function hexToBytes(hex: string | number) {
hex = hex.replace(/^0x/i, "");
for (var bytes = [], c = 0; c < hex.length; c += 2)
for (var bytes = [], c = 0; c < hex.length; c += 2) {
bytes.push(parseInt(hex.slice(c, c + 2), 16));
}
return bytes;
}
+2 -2
View File
@@ -5,7 +5,7 @@ const { MultiSelect } = require("enquirer");
export function createContractsPrompt(
choices: { name: string; value: ContractPayload }[],
message: string
message: string,
) {
return new MultiSelect({
name: "value",
@@ -33,4 +33,4 @@ export function createContractsPrompt(
},
},
});
}
}
@@ -1,4 +1,3 @@
export interface Feature {
/**
* The name of the contract (with the .sol extension)
@@ -20,7 +19,6 @@ export interface ContractFeatures {
*/
name: string;
/**
* The features detected on the contract
*/
@@ -30,4 +28,4 @@ export interface ContractFeatures {
* The features suggested to implement on the contract
*/
suggestedFeatures: Feature[];
}
}
+9 -8
View File
@@ -1,6 +1,7 @@
#!/usr/bin/env node
/* eslint-disable import/no-extraneous-dependencies */
import { CREATE_MESSAGES } from "../../constants/constants";
import { DownloadError, createApp } from "./helpers/create-app";
import { createContract } from "./helpers/create-contract";
import { getPkgManager } from "./helpers/get-pkg-manager";
@@ -65,7 +66,7 @@ export async function twCreate(options: any) {
const res = await prompts({
type: "select",
name: "projectType",
message: "What type of project do you want to create?",
message: CREATE_MESSAGES.typeOfProject,
choices: [
{ title: "App", value: "app" },
{ title: "Contract", value: "contract" },
@@ -87,14 +88,14 @@ export async function twCreate(options: any) {
const res = await prompts({
type: "text",
name: "path",
message: "What is your project named?",
message: CREATE_MESSAGES.projectName,
initial: options.template || defaultName,
validate: (name) => {
const validation = validateNpmName(path.basename(path.resolve(name)));
if (validation.valid) {
return true;
}
return "Invalid project name: " + validation.problems![0];
return "Invalid project name: " + validation.problems?.[0];
},
});
@@ -123,7 +124,7 @@ export async function twCreate(options: any) {
const res = await prompts({
type: "select",
name: "framework",
message: "What framework do you want to use?",
message: CREATE_MESSAGES.framework,
choices: [
{ title: "Next.js", value: "next" },
{ title: "Create React App", value: "cra" },
@@ -140,7 +141,7 @@ export async function twCreate(options: any) {
const res = await prompts({
type: "select",
name: "language",
message: "What language do you want to use?",
message: CREATE_MESSAGES.language,
choices: [
{ title: "JavaScript", value: "javascript" },
{ title: "TypeScript", value: "typescript" },
@@ -160,7 +161,7 @@ export async function twCreate(options: any) {
const res = await prompts({
type: "select",
name: "framework",
message: "What framework do you want to use?",
message: CREATE_MESSAGES.framework,
choices: [
{ title: "Hardhat", value: "hardhat" },
{ title: "Forge", value: "forge" },
@@ -177,7 +178,7 @@ export async function twCreate(options: any) {
const res = await prompts({
type: "select",
name: "baseContract",
message: "What contract do you want to start from?",
message: CREATE_MESSAGES.contract,
choices: [
{ title: "Empty Contract", value: "" },
{ title: "ERC721 Base", value: "ERC721Base" },
@@ -229,7 +230,7 @@ export async function twCreate(options: any) {
)} because of npm naming restrictions:`,
);
problems!.forEach((p) => console.error(` ${chalk.red.bold("*")} ${p}`));
problems?.forEach((p) => console.error(` ${chalk.red.bold("*")} ${p}`));
process.exit(1);
}
@@ -1,10 +1,10 @@
// Import the base contracts'
import baseContracts from "../../constants/base-contracts";
export function hasBaseContract(name: string): boolean {
return baseContracts[name as keyof typeof baseContracts] !== undefined;
}
export function readBaseContract(name: string): string {
return baseContracts[name as keyof typeof baseContracts];
}
// Import the base contracts'
import baseContracts from "../../constants/base-contracts";
export function hasBaseContract(name: string): boolean {
return baseContracts[name as keyof typeof baseContracts] !== undefined;
}
export function readBaseContract(name: string): string {
return baseContracts[name as keyof typeof baseContracts];
}
@@ -109,7 +109,7 @@ export async function createApp({
);
} catch (reason) {
throw new DownloadError(
isErrorLike(reason) ? reason.message : reason + "",
isErrorLike(reason) ? reason.message : String(reason),
);
}
@@ -137,7 +137,7 @@ export async function createApp({
);
} catch (reason) {
throw new DownloadError(
isErrorLike(reason) ? reason.message : reason + "",
isErrorLike(reason) ? reason.message : String(reason),
);
}
@@ -7,12 +7,12 @@ import { isFolderEmpty } from "./is-folder-empty";
import { getOnline } from "./is-online";
import { isWriteable } from "./is-writeable";
import { makeDir } from "./make-dir";
import { downloadAndExtractRepo, hasTemplate } from "./templates";
import { submodules } from "./submodules";
import { downloadAndExtractRepo } from "./templates";
import retry from "async-retry";
import chalk from "chalk";
import { writeFile } from "fs/promises";
import path from "path";
import { submodules } from "./submodules";
interface ICreateContract {
contractPath: string;
@@ -88,7 +88,7 @@ export async function createContract({
starter = "forge-starter";
} else {
console.error("Please provide a valid contracts framework.");
process.exit(1)
process.exit(1);
}
await retry(
@@ -115,7 +115,9 @@ export async function createContract({
await writeFile(contractFile, baseContractText);
}
} catch (reason) {
throw new DownloadError(isErrorLike(reason) ? reason.message : reason + "");
throw new DownloadError(
isErrorLike(reason) ? reason.message : String(reason),
);
}
console.log("Installing packages. This might take a couple of minutes.");
@@ -4,6 +4,7 @@ export type PackageManager = "npm" | "pnpm" | "yarn";
export function getPkgManager(): PackageManager {
try {
// eslint-disable-next-line turbo/no-undeclared-env-vars
const userAgent = process.env.npm_config_user_agent;
if (userAgent) {
if (userAgent.startsWith("yarn")) {
+7 -3
View File
@@ -1,7 +1,7 @@
/* eslint-disable import/no-extraneous-dependencies */
import type { PackageManager } from "./get-pkg-manager";
import chalk from "chalk";
import spawn from "cross-spawn";
import type { PackageManager } from "./get-pkg-manager";
interface InstallArgs {
/**
@@ -53,9 +53,13 @@ export function install(
* Call `yarn add --exact (--offline)? (-D)? ...`.
*/
args = ["add", "--exact"];
if (!isOnline) args.push("--offline");
if (!isOnline) {
args.push("--offline");
}
args.push("--cwd", root);
if (devDependencies) args.push("--dev");
if (devDependencies) {
args.push("--dev");
}
args.push(...dependencies);
} else {
/**
+3 -1
View File
@@ -3,7 +3,9 @@ import dns from "dns";
import url from "url";
function getProxy(): string | undefined {
// eslint-disable-next-line turbo/no-undeclared-env-vars
if (process.env.https_proxy) {
// eslint-disable-next-line turbo/no-undeclared-env-vars
return process.env.https_proxy;
}
@@ -33,7 +35,7 @@ export function getOnline(): Promise<boolean> {
}
dns.lookup(hostname, (proxyErr) => {
resolve(proxyErr == null);
resolve(proxyErr === null);
});
});
});
@@ -14,4 +14,4 @@ export async function runCommand(command: string, args: string[]) {
resolve();
});
});
}
}
@@ -14,6 +14,11 @@ export async function submodules(): Promise<void> {
await runCommand("rm", ["-rf", ".gitmodules"]);
await runCommand("rm", ["-rf", "lib"]);
await runCommand("touch", [".gitmodules"]);
await runCommand("git", ["submodule", "add", "https://github.com/foundry-rs/forge-std.git", "lib/forge-std"])
await runCommand("git", [
"submodule",
"add",
"https://github.com/foundry-rs/forge-std.git",
"lib/forge-std",
]);
await runCommand("git", ["submodule", "update", "--init", "--recursive"]);
}
@@ -1,38 +1,38 @@
export default function generateDashboardUrl(
name: string,
version: string | undefined,
): string | undefined {
const splitName = name.split("/");
// Released contract
if (splitName.length > 1) {
return `https://thirdweb.com/dashboard/${splitName[0]}/${splitName[1]}${
version ? `/${version}` : ""
}`;
}
// Pre-built contract
else {
const mapping = {
"signature-drop": "drop/signature-drop",
"nft-drop": "drop/nft-drop",
"edition-drop": "drop/edition-drop",
"nft-collection": "token/nft-collection",
edition: "token/edition",
"token-drop": "drop/token-drop",
token: "token/token",
marketplace: "marketplace/marketplace",
split: "governance/split",
vote: "governance/vote",
pack: "token/pack",
multiwrap: "token/multiwrap",
};
const foundMapping = mapping[name as keyof typeof mapping];
if (!foundMapping) {
return undefined;
}
return `https://thirdweb.com/contracts/new/pre-built/${foundMapping}`;
}
}
export default function generateDashboardUrl(
name: string,
version: string | undefined,
): string | undefined {
const splitName = name.split("/");
// Released contract
if (splitName.length > 1) {
return `https://thirdweb.com/dashboard/${splitName[0]}/${splitName[1]}${
version ? `/${version}` : ""
}`;
}
// Pre-built contract
else {
const mapping = {
"signature-drop": "drop/signature-drop",
"nft-drop": "drop/nft-drop",
"edition-drop": "drop/edition-drop",
"nft-collection": "token/nft-collection",
edition: "token/edition",
"token-drop": "drop/token-drop",
token: "token/token",
marketplace: "marketplace/marketplace",
split: "governance/split",
vote: "governance/vote",
pack: "token/pack",
multiwrap: "token/multiwrap",
};
const foundMapping = mapping[name as keyof typeof mapping];
if (!foundMapping) {
return undefined;
}
return `https://thirdweb.com/contracts/new/pre-built/${foundMapping}`;
}
}
@@ -1,3 +1,7 @@
(BigInt.prototype as any).toJSON = function () {
return this.toString();
};
console.log(`__tw__${JSON.stringify((globalThis as any).config)}__tw__`);
export {};
+4 -1
View File
@@ -1,5 +1,8 @@
{
"extends": "@thirdweb-dev/tsconfig/sdk.json",
"include": ["src"],
"exclude": ["dist", "build", "node_modules"]
"exclude": ["dist", "build", "node_modules"],
"compilerOptions": {
"allowJs": true
}
}
+4 -1
View File
@@ -1,3 +1,6 @@
{
"presets": ["@babel/preset-typescript", "@babel/preset-env"]
"presets": [
"@babel/preset-typescript",
["@babel/preset-env", { "targets": "defaults, not ie 11" }]
]
}
+61
View File
@@ -0,0 +1,61 @@
# @thirdweb-dev/contracts-js
## 1.1.8
### Patch Changes
- [#90](https://github.com/thirdweb-dev/js/pull/90) [`820a519`](https://github.com/thirdweb-dev/js/commit/820a5191b5e7af5aba5e4d1cc90cd895c0dade11) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Update to contracts v3.1.7
## 1.1.7
### Patch Changes
- [#61](https://github.com/thirdweb-dev/js/pull/61) [`3287c2b`](https://github.com/thirdweb-dev/js/commit/3287c2b0f233332fe4a095f973deed8efab91db6) Thanks [@jnsdls](https://github.com/jnsdls)! - fix versions in dependencies before releasing stable
## 1.1.6
### Patch Changes
- [#59](https://github.com/thirdweb-dev/js/pull/59) [`6ba9cad`](https://github.com/thirdweb-dev/js/commit/6ba9cad8d8b933256599dc3b147601cd4828c89b) Thanks [@jnsdls](https://github.com/jnsdls)! - move `abis` from top level into `dist` in contracts-js
## 1.1.5
### Patch Changes
- [`5644ccd`](https://github.com/thirdweb-dev/js/commit/5644ccd3ee2ff330e4e5840d3266033376750117) Thanks [@jnsdls](https://github.com/jnsdls)! - bump versions again
## 1.1.4
### Patch Changes
- [`091f175`](https://github.com/thirdweb-dev/js/commit/091f1758604d40e825ea28a13c2699d67bc75d8c) Thanks [@jnsdls](https://github.com/jnsdls)! - release-all-packages
## 1.1.3
### Patch Changes
- [#53](https://github.com/thirdweb-dev/js/pull/53) [`924247a`](https://github.com/thirdweb-dev/js/commit/924247a8ed5ef1867dccfad9479b00f71795ebf6) Thanks [@jnsdls](https://github.com/jnsdls)! - do not check-in abis output
## 1.1.2
### Patch Changes
- [#52](https://github.com/thirdweb-dev/js/pull/52) [`2eb7e94`](https://github.com/thirdweb-dev/js/commit/2eb7e945b14fd47fc46408d90499888c1f87ca94) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Support for audited Pack contract
## 1.1.1
### Patch Changes
- [#36](https://github.com/thirdweb-dev/js/pull/36) [`127bc50`](https://github.com/thirdweb-dev/js/commit/127bc50217139345dd44a09114a9bec2c3ac9e97) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Update to Contracts SDK v3.1.5
- [#46](https://github.com/thirdweb-dev/js/pull/46) [`349b5c1`](https://github.com/thirdweb-dev/js/commit/349b5c1e028a06616d40de84257fd8d1cf05df83) Thanks [@jnsdls](https://github.com/jnsdls)! - imrprove babel & tsconfig settings
- [#30](https://github.com/thirdweb-dev/js/pull/30) [`c52a43c`](https://github.com/thirdweb-dev/js/commit/c52a43c8863052b6d1bc9b8c3e1e86d0e1759d39) Thanks [@adam-maj](https://github.com/adam-maj)! - Pin contracts to v3.1.3
- [#34](https://github.com/thirdweb-dev/js/pull/34) [`5731ac2`](https://github.com/thirdweb-dev/js/commit/5731ac2f50ef63c243d3a6c2516e85920c325a95) Thanks [@jnsdls](https://github.com/jnsdls)! - pin `@thirdweb-dev/contracts` version
## 1.1.0
### Minor Changes
- 3abe26c: initialze monorepo packages
-47
View File
@@ -1,47 +0,0 @@
[
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "prevURI",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "newURI",
"type": "string"
}
],
"name": "AppURIUpdated",
"type": "event"
},
{
"inputs": [],
"name": "appURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_uri",
"type": "string"
}
],
"name": "setAppURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
@@ -1,34 +0,0 @@
[
{
"inputs": [],
"name": "getBaseURICount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "getBatchIdAtIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
]
-1
View File
@@ -1 +0,0 @@
[]
@@ -1,47 +0,0 @@
[
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "prevURI",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "newURI",
"type": "string"
}
],
"name": "ContractURIUpdated",
"type": "event"
},
{
"inputs": [],
"name": "contractURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_uri",
"type": "string"
}
],
"name": "setContractURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
@@ -1,717 +0,0 @@
[
{
"inputs": [
{
"internalType": "address",
"name": "_trustedForwarder",
"type": "address"
},
{
"internalType": "contract IContractPublisher",
"name": "_prevPublisher",
"type": "address"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "publisher",
"type": "address"
},
{
"components": [
{
"internalType": "string",
"name": "contractId",
"type": "string"
},
{
"internalType": "uint256",
"name": "publishTimestamp",
"type": "uint256"
},
{
"internalType": "string",
"name": "publishMetadataUri",
"type": "string"
},
{
"internalType": "bytes32",
"name": "bytecodeHash",
"type": "bytes32"
},
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"indexed": false,
"internalType": "struct IContractPublisher.CustomContractInstance",
"name": "publishedContract",
"type": "tuple"
}
],
"name": "ContractPublished",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "publisher",
"type": "address"
},
{
"indexed": true,
"internalType": "string",
"name": "contractId",
"type": "string"
}
],
"name": "ContractUnpublished",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "bool",
"name": "isPaused",
"type": "bool"
}
],
"name": "Paused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "publisher",
"type": "address"
},
{
"indexed": false,
"internalType": "string",
"name": "prevURI",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "newURI",
"type": "string"
}
],
"name": "PublisherProfileUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_publisher",
"type": "address"
}
],
"name": "getAllPublishedContracts",
"outputs": [
{
"components": [
{
"internalType": "string",
"name": "contractId",
"type": "string"
},
{
"internalType": "uint256",
"name": "publishTimestamp",
"type": "uint256"
},
{
"internalType": "string",
"name": "publishMetadataUri",
"type": "string"
},
{
"internalType": "bytes32",
"name": "bytecodeHash",
"type": "bytes32"
},
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"internalType": "struct IContractPublisher.CustomContractInstance[]",
"name": "published",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_publisher",
"type": "address"
},
{
"internalType": "string",
"name": "_contractId",
"type": "string"
}
],
"name": "getPublishedContract",
"outputs": [
{
"components": [
{
"internalType": "string",
"name": "contractId",
"type": "string"
},
{
"internalType": "uint256",
"name": "publishTimestamp",
"type": "uint256"
},
{
"internalType": "string",
"name": "publishMetadataUri",
"type": "string"
},
{
"internalType": "bytes32",
"name": "bytecodeHash",
"type": "bytes32"
},
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"internalType": "struct IContractPublisher.CustomContractInstance",
"name": "published",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_publisher",
"type": "address"
},
{
"internalType": "string",
"name": "_contractId",
"type": "string"
}
],
"name": "getPublishedContractVersions",
"outputs": [
{
"components": [
{
"internalType": "string",
"name": "contractId",
"type": "string"
},
{
"internalType": "uint256",
"name": "publishTimestamp",
"type": "uint256"
},
{
"internalType": "string",
"name": "publishMetadataUri",
"type": "string"
},
{
"internalType": "bytes32",
"name": "bytecodeHash",
"type": "bytes32"
},
{
"internalType": "address",
"name": "implementation",
"type": "address"
}
],
"internalType": "struct IContractPublisher.CustomContractInstance[]",
"name": "published",
"type": "tuple[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "compilerMetadataUri",
"type": "string"
}
],
"name": "getPublishedUriFromCompilerUri",
"outputs": [
{
"internalType": "string[]",
"name": "publishedMetadataUris",
"type": "string[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "publisher",
"type": "address"
}
],
"name": "getPublisherProfileUri",
"outputs": [
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "index",
"type": "uint256"
}
],
"name": "getRoleMember",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleMemberCount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "isPaused",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "forwarder",
"type": "address"
}
],
"name": "isTrustedForwarder",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "data",
"type": "bytes[]"
}
],
"name": "multicall",
"outputs": [
{
"internalType": "bytes[]",
"name": "results",
"type": "bytes[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "prevPublisher",
"outputs": [
{
"internalType": "contract IContractPublisher",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_publisher",
"type": "address"
},
{
"internalType": "string",
"name": "_contractId",
"type": "string"
},
{
"internalType": "string",
"name": "_publishMetadataUri",
"type": "string"
},
{
"internalType": "string",
"name": "_compilerMetadataUri",
"type": "string"
},
{
"internalType": "bytes32",
"name": "_bytecodeHash",
"type": "bytes32"
},
{
"internalType": "address",
"name": "_implementation",
"type": "address"
}
],
"name": "publishContract",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_pause",
"type": "bool"
}
],
"name": "setPause",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "publisher",
"type": "address"
},
{
"internalType": "string",
"name": "uri",
"type": "string"
}
],
"name": "setPublisherProfileUri",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_publisher",
"type": "address"
},
{
"internalType": "string",
"name": "_contractId",
"type": "string"
}
],
"name": "unpublishContract",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]
-1
View File
@@ -1 +0,0 @@
[]
@@ -1,15 +0,0 @@
[
{
"inputs": [],
"name": "NATIVE_TOKEN",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
}
]
@@ -1,131 +0,0 @@
[
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "revealedURI",
"type": "string"
}
],
"name": "TokenURIRevealed",
"type": "event"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "key",
"type": "bytes"
}
],
"name": "encryptDecrypt",
"outputs": [
{
"internalType": "bytes",
"name": "result",
"type": "bytes"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "encryptedData",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_batchId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_key",
"type": "bytes"
}
],
"name": "getRevealURI",
"outputs": [
{
"internalType": "string",
"name": "revealedURI",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_batchId",
"type": "uint256"
}
],
"name": "isEncryptedBatch",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "identifier",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "key",
"type": "bytes"
}
],
"name": "reveal",
"outputs": [
{
"internalType": "string",
"name": "revealedURI",
"type": "string"
}
],
"stateMutability": "nonpayable",
"type": "function"
}
]
-530
View File
@@ -1,530 +0,0 @@
[
{
"inputs": [
{
"internalType": "uint256",
"name": "blockTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "startTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "lastClaimedAt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nextValidClaimTimestamp",
"type": "uint256"
}
],
"name": "Drop__CannotClaimYet",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "supplyClaimed",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxClaimableSupply",
"type": "uint256"
}
],
"name": "Drop__ExceedMaxClaimableSupply",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "givenCurrency",
"type": "address"
},
{
"internalType": "address",
"name": "requiredCurrency",
"type": "address"
},
{
"internalType": "uint256",
"name": "givenPricePerToken",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "requiredPricePerToken",
"type": "uint256"
}
],
"name": "Drop__InvalidCurrencyOrPrice",
"type": "error"
},
{
"inputs": [],
"name": "Drop__InvalidQuantity",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "maxQuantityInAllowlist",
"type": "uint256"
}
],
"name": "Drop__InvalidQuantityProof",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "supplyClaimedAlready",
"type": "uint256"
}
],
"name": "Drop__MaxSupplyClaimedAlready",
"type": "error"
},
{
"inputs": [],
"name": "Drop__NotAuthorized",
"type": "error"
},
{
"inputs": [],
"name": "Drop__NotInWhitelist",
"type": "error"
},
{
"inputs": [],
"name": "Drop__ProofClaimed",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "startTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxClaimableSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "supplyClaimed",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "quantityLimitPerTransaction",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "waitTimeInSecondsBetweenClaims",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "pricePerToken",
"type": "uint256"
},
{
"internalType": "address",
"name": "currency",
"type": "address"
}
],
"indexed": false,
"internalType": "struct IClaimCondition.ClaimCondition[]",
"name": "claimConditions",
"type": "tuple[]"
},
{
"indexed": false,
"internalType": "bool",
"name": "resetEligibility",
"type": "bool"
}
],
"name": "ClaimConditionsUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "claimConditionIndex",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "claimer",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "startTokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "quantityClaimed",
"type": "uint256"
}
],
"name": "TokensClaimed",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "_receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "_quantity",
"type": "uint256"
},
{
"internalType": "address",
"name": "_currency",
"type": "address"
},
{
"internalType": "uint256",
"name": "_pricePerToken",
"type": "uint256"
},
{
"components": [
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "maxQuantityInAllowlist",
"type": "uint256"
}
],
"internalType": "struct IDrop.AllowlistProof",
"name": "_allowlistProof",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "claim",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "claimCondition",
"outputs": [
{
"internalType": "uint256",
"name": "currentStartId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "count",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getActiveClaimConditionId",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_conditionId",
"type": "uint256"
}
],
"name": "getClaimConditionById",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "startTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxClaimableSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "supplyClaimed",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "quantityLimitPerTransaction",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "waitTimeInSecondsBetweenClaims",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "pricePerToken",
"type": "uint256"
},
{
"internalType": "address",
"name": "currency",
"type": "address"
}
],
"internalType": "struct IClaimCondition.ClaimCondition",
"name": "condition",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_conditionId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_claimer",
"type": "address"
}
],
"name": "getClaimTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "lastClaimTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nextValidClaimTimestamp",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "startTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxClaimableSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "supplyClaimed",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "quantityLimitPerTransaction",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "waitTimeInSecondsBetweenClaims",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "pricePerToken",
"type": "uint256"
},
{
"internalType": "address",
"name": "currency",
"type": "address"
}
],
"internalType": "struct IClaimCondition.ClaimCondition[]",
"name": "_conditions",
"type": "tuple[]"
},
{
"internalType": "bool",
"name": "_resetClaimEligibility",
"type": "bool"
}
],
"name": "setClaimConditions",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_conditionId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_claimer",
"type": "address"
},
{
"internalType": "uint256",
"name": "_quantity",
"type": "uint256"
},
{
"internalType": "address",
"name": "_currency",
"type": "address"
},
{
"internalType": "uint256",
"name": "_pricePerToken",
"type": "uint256"
},
{
"internalType": "bool",
"name": "verifyMaxQuantityPerTransaction",
"type": "bool"
}
],
"name": "verifyClaim",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_conditionId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_claimer",
"type": "address"
},
{
"internalType": "uint256",
"name": "_quantity",
"type": "uint256"
},
{
"components": [
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "maxQuantityInAllowlist",
"type": "uint256"
}
],
"internalType": "struct IDrop.AllowlistProof",
"name": "_allowlistProof",
"type": "tuple"
}
],
"name": "verifyClaimMerkleProof",
"outputs": [
{
"internalType": "bool",
"name": "validMerkleProof",
"type": "bool"
},
{
"internalType": "uint256",
"name": "merkleProofIndex",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
]
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,355 +0,0 @@
[
{
"anonymous": false,
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "startTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxClaimableSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "supplyClaimed",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "quantityLimitPerTransaction",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "waitTimeInSecondsBetweenClaims",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "pricePerToken",
"type": "uint256"
},
{
"internalType": "address",
"name": "currency",
"type": "address"
}
],
"indexed": false,
"internalType": "struct IClaimCondition.ClaimCondition",
"name": "condition",
"type": "tuple"
},
{
"indexed": false,
"internalType": "bool",
"name": "resetEligibility",
"type": "bool"
}
],
"name": "ClaimConditionUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "claimer",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "startTokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "quantityClaimed",
"type": "uint256"
}
],
"name": "TokensClaimed",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "_receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "_quantity",
"type": "uint256"
},
{
"internalType": "address",
"name": "_currency",
"type": "address"
},
{
"internalType": "uint256",
"name": "_pricePerToken",
"type": "uint256"
},
{
"components": [
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "maxQuantityInAllowlist",
"type": "uint256"
}
],
"internalType": "struct IDropSinglePhase.AllowlistProof",
"name": "_allowlistProof",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "claim",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "claimCondition",
"outputs": [
{
"internalType": "uint256",
"name": "startTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxClaimableSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "supplyClaimed",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "quantityLimitPerTransaction",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "waitTimeInSecondsBetweenClaims",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "pricePerToken",
"type": "uint256"
},
{
"internalType": "address",
"name": "currency",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_claimer",
"type": "address"
}
],
"name": "getClaimTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "lastClaimedAt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nextValidClaimTimestamp",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "startTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxClaimableSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "supplyClaimed",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "quantityLimitPerTransaction",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "waitTimeInSecondsBetweenClaims",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "pricePerToken",
"type": "uint256"
},
{
"internalType": "address",
"name": "currency",
"type": "address"
}
],
"internalType": "struct IClaimCondition.ClaimCondition",
"name": "_condition",
"type": "tuple"
},
{
"internalType": "bool",
"name": "_resetClaimEligibility",
"type": "bool"
}
],
"name": "setClaimConditions",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_claimer",
"type": "address"
},
{
"internalType": "uint256",
"name": "_quantity",
"type": "uint256"
},
{
"internalType": "address",
"name": "_currency",
"type": "address"
},
{
"internalType": "uint256",
"name": "_pricePerToken",
"type": "uint256"
},
{
"internalType": "bool",
"name": "verifyMaxQuantityPerTransaction",
"type": "bool"
}
],
"name": "verifyClaim",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_claimer",
"type": "address"
},
{
"internalType": "uint256",
"name": "_quantity",
"type": "uint256"
},
{
"components": [
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "maxQuantityInAllowlist",
"type": "uint256"
}
],
"internalType": "struct IDropSinglePhase.AllowlistProof",
"name": "_allowlistProof",
"type": "tuple"
}
],
"name": "verifyClaimMerkleProof",
"outputs": [
{
"internalType": "bool",
"name": "validMerkleProof",
"type": "bool"
},
{
"internalType": "uint256",
"name": "merkleProofIndex",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
]
@@ -1,392 +0,0 @@
[
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"components": [
{
"internalType": "uint256",
"name": "startTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxClaimableSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "supplyClaimed",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "quantityLimitPerTransaction",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "waitTimeInSecondsBetweenClaims",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "pricePerToken",
"type": "uint256"
},
{
"internalType": "address",
"name": "currency",
"type": "address"
}
],
"indexed": false,
"internalType": "struct IClaimCondition.ClaimCondition",
"name": "condition",
"type": "tuple"
},
{
"indexed": false,
"internalType": "bool",
"name": "resetEligibility",
"type": "bool"
}
],
"name": "ClaimConditionUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "claimer",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "quantityClaimed",
"type": "uint256"
}
],
"name": "TokensClaimed",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "_receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_quantity",
"type": "uint256"
},
{
"internalType": "address",
"name": "_currency",
"type": "address"
},
{
"internalType": "uint256",
"name": "_pricePerToken",
"type": "uint256"
},
{
"components": [
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "maxQuantityInAllowlist",
"type": "uint256"
}
],
"internalType": "struct IDropSinglePhase1155.AllowlistProof",
"name": "_allowlistProof",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "claim",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "claimCondition",
"outputs": [
{
"internalType": "uint256",
"name": "startTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxClaimableSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "supplyClaimed",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "quantityLimitPerTransaction",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "waitTimeInSecondsBetweenClaims",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "pricePerToken",
"type": "uint256"
},
{
"internalType": "address",
"name": "currency",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_claimer",
"type": "address"
}
],
"name": "getClaimTimestamp",
"outputs": [
{
"internalType": "uint256",
"name": "lastClaimedAt",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "nextValidClaimTimestamp",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"components": [
{
"internalType": "uint256",
"name": "startTimestamp",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxClaimableSupply",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "supplyClaimed",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "quantityLimitPerTransaction",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "waitTimeInSecondsBetweenClaims",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "merkleRoot",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "pricePerToken",
"type": "uint256"
},
{
"internalType": "address",
"name": "currency",
"type": "address"
}
],
"internalType": "struct IClaimCondition.ClaimCondition",
"name": "_condition",
"type": "tuple"
},
{
"internalType": "bool",
"name": "_resetClaimEligibility",
"type": "bool"
}
],
"name": "setClaimConditions",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_claimer",
"type": "address"
},
{
"internalType": "uint256",
"name": "_quantity",
"type": "uint256"
},
{
"internalType": "address",
"name": "_currency",
"type": "address"
},
{
"internalType": "uint256",
"name": "_pricePerToken",
"type": "uint256"
},
{
"internalType": "bool",
"name": "verifyMaxQuantityPerTransaction",
"type": "bool"
}
],
"name": "verifyClaim",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_claimer",
"type": "address"
},
{
"internalType": "uint256",
"name": "_quantity",
"type": "uint256"
},
{
"components": [
{
"internalType": "bytes32[]",
"name": "proof",
"type": "bytes32[]"
},
{
"internalType": "uint256",
"name": "maxQuantityInAllowlist",
"type": "uint256"
}
],
"internalType": "struct IDropSinglePhase1155.AllowlistProof",
"name": "_allowlistProof",
"type": "tuple"
}
],
"name": "verifyClaimMerkleProof",
"outputs": [
{
"internalType": "bool",
"name": "validMerkleProof",
"type": "bool"
},
{
"internalType": "uint256",
"name": "merkleProofIndex",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
}
]
-1
View File
@@ -1 +0,0 @@
[]
-1
View File
@@ -1 +0,0 @@
[]
-356
View File
@@ -1,356 +0,0 @@
[
{
"inputs": [
{
"internalType": "string",
"name": "_name",
"type": "string"
},
{
"internalType": "string",
"name": "_symbol",
"type": "string"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "_approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "_ids",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "_values",
"type": "uint256[]"
}
],
"name": "TransferBatch",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_id",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "TransferSingle",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "_value",
"type": "string"
},
{
"indexed": true,
"internalType": "uint256",
"name": "_id",
"type": "uint256"
}
],
"name": "URI",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "ids",
"type": "uint256[]"
}
],
"name": "balanceOfBatch",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "ids",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeBatchTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "uri",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
}
]
-797
View File
@@ -1,797 +0,0 @@
[
{
"inputs": [
{
"internalType": "string",
"name": "_name",
"type": "string"
},
{
"internalType": "string",
"name": "_symbol",
"type": "string"
},
{
"internalType": "address",
"name": "_royaltyRecipient",
"type": "address"
},
{
"internalType": "uint128",
"name": "_royaltyBps",
"type": "uint128"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "_approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "prevURI",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "newURI",
"type": "string"
}
],
"name": "ContractURIUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "newRoyaltyRecipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newRoyaltyBps",
"type": "uint256"
}
],
"name": "DefaultRoyalty",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "prevOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnerUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "royaltyRecipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "royaltyBps",
"type": "uint256"
}
],
"name": "RoyaltyForToken",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "_ids",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "_values",
"type": "uint256[]"
}
],
"name": "TransferBatch",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_id",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "TransferSingle",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "_value",
"type": "string"
},
{
"indexed": true,
"internalType": "uint256",
"name": "_id",
"type": "uint256"
}
],
"name": "URI",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "ids",
"type": "uint256[]"
}
],
"name": "balanceOfBatch",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "_tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "_amounts",
"type": "uint256[]"
},
{
"internalType": "string",
"name": "_baseURI",
"type": "string"
}
],
"name": "batchMintTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "_tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "_amounts",
"type": "uint256[]"
}
],
"name": "burnBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "contractURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getBaseURICount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "getBatchIdAtIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDefaultRoyaltyInfo",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "getRoyaltyInfoForToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "string",
"name": "_tokenURI",
"type": "string"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "mintTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "data",
"type": "bytes[]"
}
],
"name": "multicall",
"outputs": [
{
"internalType": "bytes[]",
"name": "results",
"type": "bytes[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "nextTokenIdToMint",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "salePrice",
"type": "uint256"
}
],
"name": "royaltyInfo",
"outputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "royaltyAmount",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "ids",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeBatchTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_uri",
"type": "string"
}
],
"name": "setContractURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_royaltyRecipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "_royaltyBps",
"type": "uint256"
}
],
"name": "setDefaultRoyaltyInfo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "setOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "_bps",
"type": "uint256"
}
],
"name": "setRoyaltyInfoForToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "uri",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
}
]
@@ -1,986 +0,0 @@
[
{
"inputs": [
{
"internalType": "string",
"name": "_name",
"type": "string"
},
{
"internalType": "string",
"name": "_symbol",
"type": "string"
},
{
"internalType": "address",
"name": "_royaltyRecipient",
"type": "address"
},
{
"internalType": "uint128",
"name": "_royaltyBps",
"type": "uint128"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_operator",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "_approved",
"type": "bool"
}
],
"name": "ApprovalForAll",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "prevURI",
"type": "string"
},
{
"indexed": false,
"internalType": "string",
"name": "newURI",
"type": "string"
}
],
"name": "ContractURIUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "newRoyaltyRecipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newRoyaltyBps",
"type": "uint256"
}
],
"name": "DefaultRoyalty",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "prevOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "OwnerUpdated",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"indexed": true,
"internalType": "address",
"name": "royaltyRecipient",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "royaltyBps",
"type": "uint256"
}
],
"name": "RoyaltyForToken",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "index",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "revealedURI",
"type": "string"
}
],
"name": "TokenURIRevealed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint256",
"name": "startTokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "endTokenId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "baseURI",
"type": "string"
},
{
"indexed": false,
"internalType": "bytes",
"name": "encryptedBaseURI",
"type": "bytes"
}
],
"name": "TokensLazyMinted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "_ids",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "_values",
"type": "uint256[]"
}
],
"name": "TransferBatch",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_operator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_id",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_value",
"type": "uint256"
}
],
"name": "TransferSingle",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "_value",
"type": "string"
},
{
"indexed": true,
"internalType": "uint256",
"name": "_id",
"type": "uint256"
}
],
"name": "URI",
"type": "event"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "accounts",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "ids",
"type": "uint256[]"
}
],
"name": "balanceOfBatch",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "_tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "_amounts",
"type": "uint256[]"
},
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"name": "batchMintTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "burn",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_owner",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "_tokenIds",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "_amounts",
"type": "uint256[]"
}
],
"name": "burnBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "contractURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "key",
"type": "bytes"
}
],
"name": "encryptDecrypt",
"outputs": [
{
"internalType": "bytes",
"name": "result",
"type": "bytes"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "encryptedData",
"outputs": [
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getBaseURICount",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "getBatchIdAtIndex",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDefaultRoyaltyInfo",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_batchId",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_key",
"type": "bytes"
}
],
"name": "getRevealURI",
"outputs": [
{
"internalType": "string",
"name": "revealedURI",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "getRoyaltyInfoForToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"name": "isApprovedForAll",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_batchId",
"type": "uint256"
}
],
"name": "isEncryptedBatch",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "string",
"name": "_baseURIForTokens",
"type": "string"
},
{
"internalType": "bytes",
"name": "_data",
"type": "bytes"
}
],
"name": "lazyMint",
"outputs": [
{
"internalType": "uint256",
"name": "batchId",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "string",
"name": "",
"type": "string"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "mintTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes[]",
"name": "data",
"type": "bytes[]"
}
],
"name": "multicall",
"outputs": [
{
"internalType": "bytes[]",
"name": "results",
"type": "bytes[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "nextTokenIdToMint",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "_key",
"type": "bytes"
}
],
"name": "reveal",
"outputs": [
{
"internalType": "string",
"name": "revealedURI",
"type": "string"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "salePrice",
"type": "uint256"
}
],
"name": "royaltyInfo",
"outputs": [
{
"internalType": "address",
"name": "receiver",
"type": "address"
},
{
"internalType": "uint256",
"name": "royaltyAmount",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "ids",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "amounts",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeBatchTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "id",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "safeTransferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "operator",
"type": "address"
},
{
"internalType": "bool",
"name": "approved",
"type": "bool"
}
],
"name": "setApprovalForAll",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_uri",
"type": "string"
}
],
"name": "setContractURI",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_royaltyRecipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "_royaltyBps",
"type": "uint256"
}
],
"name": "setDefaultRoyaltyInfo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "setOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_recipient",
"type": "address"
},
{
"internalType": "uint256",
"name": "_bps",
"type": "uint256"
}
],
"name": "setRoyaltyInfoForToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_tokenId",
"type": "uint256"
}
],
"name": "uri",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
}
]
File diff suppressed because it is too large Load Diff
@@ -1,99 +0,0 @@
[
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155BatchReceived",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
]

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