Skip to content

Commit

Permalink
v5 extension detection (thirdweb-dev#4302)
Browse files Browse the repository at this point in the history
  • Loading branch information
jnsdls committed Aug 28, 2024
1 parent 56eb30f commit 55a0073
Show file tree
Hide file tree
Showing 671 changed files with 4,002 additions and 5,292 deletions.
66 changes: 17 additions & 49 deletions packages/thirdweb/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -117,54 +117,22 @@
},
"typesVersions": {
"*": {
"adapters/*": [
"./dist/types/exports/adapters/*.d.ts"
],
"auth": [
"./dist/types/exports/auth.d.ts"
],
"chains": [
"./dist/types/exports/chains.d.ts"
],
"contract": [
"./dist/types/exports/contract.d.ts"
],
"deploys": [
"./dist/types/exports/deploys.d.ts"
],
"event": [
"./dist/types/exports/event.d.ts"
],
"extensions/*": [
"./dist/types/exports/extensions/*.d.ts"
],
"pay": [
"./dist/types/exports/pay.d.ts"
],
"react": [
"./dist/types/exports/react.d.ts"
],
"react-native": [
"./dist/types/exports/react-native.d.ts"
],
"rpc": [
"./dist/types/exports/rpc.d.ts"
],
"storage": [
"./dist/types/exports/storage.d.ts"
],
"transaction": [
"./dist/types/exports/transaction.d.ts"
],
"utils": [
"./dist/types/exports/utils.d.ts"
],
"wallets": [
"./dist/types/exports/wallets.d.ts"
],
"wallets/*": [
"./dist/types/exports/wallets/*.d.ts"
]
"adapters/*": ["./dist/types/exports/adapters/*.d.ts"],
"auth": ["./dist/types/exports/auth.d.ts"],
"chains": ["./dist/types/exports/chains.d.ts"],
"contract": ["./dist/types/exports/contract.d.ts"],
"deploys": ["./dist/types/exports/deploys.d.ts"],
"event": ["./dist/types/exports/event.d.ts"],
"extensions/*": ["./dist/types/exports/extensions/*.d.ts"],
"pay": ["./dist/types/exports/pay.d.ts"],
"react": ["./dist/types/exports/react.d.ts"],
"react-native": ["./dist/types/exports/react-native.d.ts"],
"rpc": ["./dist/types/exports/rpc.d.ts"],
"storage": ["./dist/types/exports/storage.d.ts"],
"transaction": ["./dist/types/exports/transaction.d.ts"],
"utils": ["./dist/types/exports/utils.d.ts"],
"wallets": ["./dist/types/exports/wallets.d.ts"],
"wallets/*": ["./dist/types/exports/wallets/*.d.ts"]
}
},
"browser": {
Expand Down Expand Up @@ -343,8 +311,8 @@
"react-native-passkey": "3.0.0-beta2",
"react-native-quick-crypto": "0.7.0-rc.6",
"react-native-svg": "15.3.0",
"typescript": "5.5.4",
"storybook": "^8.2.9",
"typescript": "5.5.4",
"vite": "^5.3.1",
"vitest": "1.6.0"
}
Expand Down
22 changes: 10 additions & 12 deletions packages/thirdweb/scripts/generate/generate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,6 @@ ${
import { once } from "../../../../../utils/promise/once.js";`
: ""
}
import type { ThirdwebContract } from "../../../../../contract/contract.js";
import { detectMethod } from "../../../../../utils/bytecode/detectExtension.js";
Expand Down Expand Up @@ -152,20 +151,20 @@ const FN_OUTPUTS = ${JSON.stringify(preparedMethod[2], null, 2)} as const;
/**
* Checks if the \`${f.name}\` method is supported by the given contract.
* @param contract The ThirdwebContract.
* @returns A promise that resolves to a boolean indicating if the \`${f.name}\` method is supported.
* @param availableSelectors An array of 4byte function selectors of the contract. You can get this in various ways, such as using "whatsabi" or if you have the ABI of the contract available you can use it to generate the selectors.
* @returns A boolean indicating if the \`${f.name}\` method is supported.
* @extension ${extensionName.toUpperCase()}
* @example
* \`\`\`ts
* import { is${uppercaseFirstLetter(
f.name,
)}Supported } from "thirdweb/extensions/${extensionName}";
*
* const supported = await is${uppercaseFirstLetter(f.name)}Supported(contract);
* const supported = is${uppercaseFirstLetter(f.name)}Supported(["0x..."]);
* \`\`\`
*/
export async function is${uppercaseFirstLetter(f.name)}Supported(contract: ThirdwebContract<any>) {
return detectMethod({contract, method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const});
export function is${uppercaseFirstLetter(f.name)}Supported(availableSelectors: string[]) {
return detectMethod({availableSelectors, method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const});
}
${
Expand Down Expand Up @@ -308,7 +307,6 @@ ${
import type { Hex } from "../../../../../utils/encoding/hex.js";`
: ""
}
import type { ThirdwebContract } from "../../../../../contract/contract.js";
import { detectMethod } from "../../../../../utils/bytecode/detectExtension.js";
${
Expand All @@ -335,20 +333,20 @@ const FN_OUTPUTS = ${JSON.stringify(preparedMethod[2], null, 2)} as const;
/**
* Checks if the \`${f.name}\` method is supported by the given contract.
* @param contract The ThirdwebContract.
* @returns A promise that resolves to a boolean indicating if the \`${f.name}\` method is supported.
* @param availableSelectors An array of 4byte function selectors of the contract. You can get this in various ways, such as using "whatsabi" or if you have the ABI of the contract available you can use it to generate the selectors.
* @returns A boolean indicating if the \`${f.name}\` method is supported.
* @extension ${extensionName.toUpperCase()}
* @example
* \`\`\`ts
* import { is${uppercaseFirstLetter(
f.name,
)}Supported } from "thirdweb/extensions/${extensionName}";
*
* const supported = await is${uppercaseFirstLetter(f.name)}Supported(contract);
* const supported = is${uppercaseFirstLetter(f.name)}Supported(["0x..."]);
* \`\`\`
*/
export async function is${uppercaseFirstLetter(f.name)}Supported(contract: ThirdwebContract<any>) {
return detectMethod({contract, method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const});
export function is${uppercaseFirstLetter(f.name)}Supported(availableSelectors: string[]) {
return detectMethod({availableSelectors, method: [FN_SELECTOR, FN_INPUTS, FN_OUTPUTS] as const});
}
${
Expand Down
40 changes: 33 additions & 7 deletions packages/thirdweb/src/exports/extensions/common.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,24 @@
// read
export { contractURI } from "../../extensions/common/__generated__/IContractMetadata/read/contractURI.js";
export { getContractMetadata } from "../../extensions/common/read/getContractMetadata.js";
export { owner } from "../../extensions/common/__generated__/IOwnable/read/owner.js";
export { name } from "../../extensions/common/read/name.js";
export { symbol } from "../../extensions/common/read/symbol.js";
export {
getContractMetadata,
isGetContractMetadataSupported,
} from "../../extensions/common/read/getContractMetadata.js";
export {
owner,
isOwnerSupported,
} from "../../extensions/common/__generated__/IOwnable/read/owner.js";
export { name, isNameSupported } from "../../extensions/common/read/name.js";
export {
symbol,
isSymbolSupported,
} from "../../extensions/common/read/symbol.js";

// write
export {
setContractURI,
type SetContractURIParams,
isSetContractURISupported,
} from "../../extensions/common/__generated__/IContractMetadata/write/setContractURI.js";

export {
Expand All @@ -19,11 +29,13 @@ export {
export {
setContractMetadata,
type SetContractMetadataParams,
isSetContractMetadataSupported,
} from "../../extensions/common/write/setContractMetadata.js";

export {
multicall,
type MulticallParams,
isMulticallSupported,
} from "../../extensions/common/__generated__/IMulticall/write/multicall.js";

// events
Expand All @@ -37,37 +49,51 @@ export {
// Royalty
// --------------------------------------------------------
// read
export { getDefaultRoyaltyInfo } from "../../extensions/common/__generated__/IRoyalty/read/getDefaultRoyaltyInfo.js";
export {
getDefaultRoyaltyInfo,
isGetDefaultRoyaltyInfoSupported,
} from "../../extensions/common/__generated__/IRoyalty/read/getDefaultRoyaltyInfo.js";
export {
getRoyaltyInfoForToken,
type GetRoyaltyInfoForTokenParams,
isGetRoyaltyInfoForTokenSupported,
} from "../../extensions/common/__generated__/IRoyalty/read/getRoyaltyInfoForToken.js";

// write
export {
setDefaultRoyaltyInfo,
type SetDefaultRoyaltyInfoParams,
isSetDefaultRoyaltyInfoSupported,
} from "../../extensions/common/__generated__/IRoyalty/write/setDefaultRoyaltyInfo.js";
export {
setRoyaltyInfoForToken,
type SetRoyaltyInfoForTokenParams,
isSetRoyaltyInfoForTokenSupported,
} from "../../extensions/common/__generated__/IRoyalty/write/setRoyaltyInfoForToken.js";

// --------------------------------------------------------
// Platform Fees
// --------------------------------------------------------

export { getPlatformFeeInfo } from "../../extensions/common/__generated__/IPlatformFee/read/getPlatformFeeInfo.js";
export {
getPlatformFeeInfo,
isGetPlatformFeeInfoSupported,
} from "../../extensions/common/__generated__/IPlatformFee/read/getPlatformFeeInfo.js";
export {
setPlatformFeeInfo,
isSetPlatformFeeInfoSupported,
type SetPlatformFeeInfoParams,
} from "../../extensions/common/__generated__/IPlatformFee/write/setPlatformFeeInfo.js";

// --------------------------------------------------------
// Primary Sale
// --------------------------------------------------------
export { primarySaleRecipient } from "../../extensions/common/__generated__/IPrimarySale/read/primarySaleRecipient.js";
export {
primarySaleRecipient,
isPrimarySaleRecipientSupported,
} from "../../extensions/common/__generated__/IPrimarySale/read/primarySaleRecipient.js";
export {
setPrimarySaleRecipient,
type SetPrimarySaleRecipientParams,
isSetPrimarySaleRecipientSupported,
} from "../../extensions/common/__generated__/IPrimarySale/write/setPrimarySaleRecipient.js";
2 changes: 2 additions & 0 deletions packages/thirdweb/src/exports/extensions/erc20.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ export {

// write
export {
isMintToSupported,
mintTo,
type MintToParams,
} from "../../extensions/erc20/write/mintTo.js";
Expand Down Expand Up @@ -63,6 +64,7 @@ export { getActiveClaimCondition } from "../../extensions/erc20/drops/read/getAc
export {
claimTo,
type ClaimToParams,
isClaimToSupported,
} from "../../extensions/erc20/drops/write/claimTo.js";
export {
setClaimConditions,
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 55a0073

Please sign in to comment.