diff --git a/.vscode/settings.json b/.vscode/settings.json index 1d675d7e0..67f12c6d0 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -88,6 +88,6 @@ "workbench.layoutControl.enabled": true, "workbench.statusBar.visible": true, "favorites.sortOrder": "DESC", - "workbench.preferredLightColorTheme": "Kimbie Dark", + "workbench.preferredLightColorTheme": "Bluloco Light Italic", "liveServer.settings.root": "/web/dapp/" } diff --git a/common/package.json b/common/package.json index 34008ec46..2150e1a65 100644 --- a/common/package.json +++ b/common/package.json @@ -25,12 +25,12 @@ "@kredeum/skale": "workspace:^", "ethers": "^5.7.2", "multiformats": "^13.1.0", - "viem": "^2.9.26" + "viem": "^2.9.32" }, "devDependencies": { "@ipld/dag-pb": "^4.1.0", "@types/findup-sync": "^4.0.5", - "@types/node": "^20.12.7", + "@types/node": "^20.12.8", "findup-sync": "^5.0.0", "tslib": "^2.6.2", "typescript": "^5.4.5" diff --git a/common/scripts/ens/ethers5.ts b/common/scripts/ens/ethers5.ts new file mode 100644 index 000000000..ca4e2a59e --- /dev/null +++ b/common/scripts/ens/ethers5.ts @@ -0,0 +1,14 @@ +import { providers } from "ethers"; + +const main = async () => { + const rpcUrl = "https://rpc.ankr.com/eth"; + const provider = new providers.JsonRpcProvider(rpcUrl); + + const ensName = await provider.resolveName("zapaz.eth"); + console.log("ensName:", ensName); + + const ensAvatar = await provider.getAvatar("zapaz.eth"); + console.log("ensAvatar:", ensAvatar); +}; + +main().catch(console.error); diff --git a/common/scripts/ens/viem.ts b/common/scripts/ens/viem.ts new file mode 100644 index 000000000..28902d1cc --- /dev/null +++ b/common/scripts/ens/viem.ts @@ -0,0 +1,24 @@ +import { createPublicClient, http } from "viem"; +import { normalize } from "viem/ens"; +import { mainnet } from "viem/chains"; + +export const publicClient = createPublicClient({ + chain: mainnet, + transport: http() +}); + +const address = "0x981ab0D817710d8FFFC5693383C00D985A3BDa38"; + +const main = async () => { + const ensName = await publicClient.getEnsName({ address }); + console.log("ensName :", ensName); + + if (!ensName) return; + + const ensAvatar = await publicClient.getEnsAvatar({ + name: normalize(ensName) + }); + console.log("ensAvatar:", ensAvatar); +}; + +main().catch(console.error); diff --git a/common/src/apis/api-covalent.ts b/common/src/apis/api-covalent.ts index c50a69860..385317398 100644 --- a/common/src/apis/api-covalent.ts +++ b/common/src/apis/api-covalent.ts @@ -25,13 +25,13 @@ const _covalentFetch = async (chainId: number, path: string): Promise = Accept: "application/json" } }; - console.info("_covalentFetch <==", urlPath, "\n", config); + // console.log("_covalentFetch <==", urlPath, "\n", config); const answerCov: FetchResponse = await fetchJson(urlPath, config); if (answerCov.error) console.error("_covalentFetch ERROR", answerCov.error); - console.info("_covalentFetch ==>", answerCov?.data); + // console.log("_covalentFetch ==>", answerCov?.data); return answerCov?.data; }; @@ -162,6 +162,6 @@ const covalentNftList = async ( return nfts; }; -const covalentActive = (chainId: number): boolean => Boolean(networks.get(chainId)?.covalent?.active); +const covalentActive = (chainId: number): boolean => !(networks.get(chainId)?.covalent?.active === false); export { covalentCollections, covalentNftList, covalentActive, _covalentFetch }; diff --git a/common/src/collection/collection-list.ts b/common/src/collection/collection-list.ts index 3166580dd..2d474308e 100644 --- a/common/src/collection/collection-list.ts +++ b/common/src/collection/collection-list.ts @@ -5,7 +5,7 @@ import { collectionMerge } from "../collection/collection-get"; import { alchemyActive, alchemyCollections } from "../apis/api-alchemy"; import { covalentActive, covalentCollections } from "../apis/api-covalent"; import { thegraphActive, thegraphCollections } from "../apis/api-thegraph"; -import { resolverFilterCollections, resolverGetCollections } from "../resolver/resolver-get-collection"; +import { resolverFilterCollections, resolverGetCollectionsInfos } from "../resolver/resolver-get-collection"; import { networks } from "../common/networks"; // import { infuraActive, infuraCollections } from "../apis/api-infura"; @@ -67,7 +67,7 @@ const collectionList = async ( const removed = lengthBefore - collectionsApi.size; if (removed > 0) console.info("collectionList collectionsApi removed", removed); - collectionsResolver = await resolverGetCollections(chainId, account); + collectionsResolver = await resolverGetCollectionsInfos(chainId, account); // console.log("collectionList collectionsResolver", collectionsResolver); // MERGE collectionsApi and collectionsResolver diff --git a/common/src/common/config.ts b/common/src/common/config.ts index 3817ccb1f..2ca6d0a70 100644 --- a/common/src/common/config.ts +++ b/common/src/common/config.ts @@ -55,15 +55,13 @@ const getOpenBound = (chainId: number): string => getAddresses(chainId)?.OpenBou const hasOpenBound = (chainId: number): boolean => isAddress(getOpenBound(chainId)); // GET Dapp Url -const getDappUrl = ( - chainId: number, - ref: NftType | { address?: string; tokenID?: string } = {}, - base = "." -): string => { +const getDappUrl = (chainId: number, ref: RefPageType = {}, base = "."): string => { let dappUrl = `${base}/#/${chainId}`; if (isAddress(ref.address)) { dappUrl += `/${ref.address}`; if (isNumeric(ref.tokenID)) dappUrl += `/${ref.tokenID}`; + if (isAddress(ref.account)) dappUrl += `@${ref.account}`; + if (ref.action) dappUrl += `|${ref.action}`; } return dappUrl; }; diff --git a/common/src/common/keys.ts b/common/src/common/keys.ts index a129808b2..864d0cbf5 100644 --- a/common/src/common/keys.ts +++ b/common/src/common/keys.ts @@ -24,6 +24,8 @@ const keyCollectionContract = (chainId: number, address: string, getSigner: bool const keyNft = (chainId: number, address: string, tokenID: string, account?: string): string => `nft://${String(chainId)}/${address}/${tokenID}${account ? "@" + account : ""}`; +const keyStats = (chainId: number): string => `stats://${String(chainId)}`; + const keyNftInverse = (key: string): NftType => { const [key1] = key.split("@"); const [chId, addr, tokenID] = key1.replace("nft://", "").split("/"); @@ -38,6 +40,7 @@ export { keyCollectionInverse, keyCollectionDefault, keyCollectionContract, + keyStats, keyNft, keyNftInverse }; diff --git a/common/src/common/local.ts b/common/src/common/local.ts index a4b611f88..2494c416a 100644 --- a/common/src/common/local.ts +++ b/common/src/common/local.ts @@ -13,8 +13,6 @@ const localStorageClear = (): void => _localStorage?.clear(); const localStorageKey = (index: number): string => _localStorage?.key(index) || ""; -const localStorageLength = (): number => _localStorage?.length || 0; - const localStorageRemove = (key: string): void => _localStorage?.removeItem(key); const localStorageInit = (): void => { @@ -22,8 +20,12 @@ const localStorageInit = (): void => { if (!localStorageGet("KEY")) localStorageSet("KEY", "KEY_DEFAULT"); }; +const localStorageKeys = (startsWith: string): string[] => + Object.keys(localStorage).filter((key) => key.startsWith(startsWith)); + export { localNamespace, + localStorageKeys, localConfigNamespace, localStorageDefined, localStorageSet, @@ -31,6 +33,5 @@ export { localStorageKey, localStorageInit, localStorageRemove, - localStorageClear, - localStorageLength + localStorageClear }; diff --git a/common/src/common/networks.ts b/common/src/common/networks.ts index 989b23877..8fd1524ba 100644 --- a/common/src/common/networks.ts +++ b/common/src/common/networks.ts @@ -20,12 +20,20 @@ const networks = (() => { const getAllSameType = (chainId: chainIdish): NetworkType[] => getAllActive().filter((nw: NetworkType) => isMainnet(nw.chainId) === isMainnet(chainId)); - const getAllMainnets = (): NetworkType[] => getAllActive().filter((nw: NetworkType) => isMainnet(nw.chainId)); + const getAllMainnetIds = (): number[] => + getAllActive() + .filter((nw: NetworkType) => isMainnet(nw.chainId)) + .map((nw) => nw.chainId); - const getAllTestnets = (): NetworkType[] => getAllActive().filter((nw: NetworkType) => isTestnet(nw.chainId)); + const getAllTestnetIds = (): number[] => + getAllActive() + .filter((nw: NetworkType) => isTestnet(nw.chainId)) + .map((nw) => nw.chainId); - const getAllOpMainnets = (): NetworkType[] => - getAllActive().filter((nw: NetworkType) => isOpStack(nw.chainId) && isMainnet(nw.chainId)); + const getAllOpMainnetIds = (): number[] => + getAllActive() + .filter((nw: NetworkType) => (isOpStack(nw.chainId) && isMainnet(nw.chainId)) || nw.chainId == 1) + .map((nw) => nw.chainId); const get = (chainId: chainIdish): NetworkType | undefined => _networksMap?.get(Number(chainId)); @@ -56,9 +64,9 @@ const networks = (() => { const isLayer2 = (chainId: chainIdish): boolean => !isLayer1(chainId); const isOpStack = (chainId: chainIdish): boolean => get(chainId)?.opstack || false; - const getChainName = (chainId: chainIdish): string | undefined => get(chainId)?.chainName; - const getChainLabel = (chainId: chainIdish): string | undefined => - get(chainId)?.chainLabel || strUpFirst(strSanitize(getChainName(chainId))); + const getChainName = (chainId: chainIdish): string => get(chainId)?.chainName || ""; + const getChainLabel = (chainId: chainIdish): string => + get(chainId)?.chainLabel || strUpFirst(strSanitize(getChainName(chainId))) || ""; const getMainnetName = (chainId: chainIdish) => isTestnet(chainId) ? getChainName(getLinkedMainnet(chainId)) : getChainName(chainId); @@ -74,9 +82,9 @@ const networks = (() => { getAllActive, getAllInactive, getAllSameType, - getAllMainnets, - getAllTestnets, - getAllOpMainnets, + getAllMainnetIds, + getAllTestnetIds, + getAllOpMainnetIds, getBlur, getBlurUrl, diff --git a/common/src/nft/nft-list.ts b/common/src/nft/nft-list.ts index 07932f8ac..37bc593ba 100644 --- a/common/src/nft/nft-list.ts +++ b/common/src/nft/nft-list.ts @@ -42,16 +42,18 @@ const nftListTokenIds = async ( } else if (covalentActive(chainId)) { nftsOwner = await covalentNftList(chainId, collection, filter); } else { - console.error("No NFTs found:-("); + console.error(`No NFT API found:-( on ${chainId}`); } ({ nfts: nftsKredeum } = await resolverGetNfts(chainId, collection, filter)); } - // console.log("nftListTokenIds", nfts); // MERGE nftsOwner and nftsKredeum nfts = nftsMerge(nftsOwner, nftsKredeum); + if (nfts.size === 0) console.error("No NFT found:-("); + + // console.log("nftListTokenIds", nfts); return nfts; }; diff --git a/common/src/nft/nft-uri.ts b/common/src/nft/nft-uri.ts index 66202f118..910ce3b0a 100644 --- a/common/src/nft/nft-uri.ts +++ b/common/src/nft/nft-uri.ts @@ -7,7 +7,7 @@ import { ipfsConfigValid, ipfsPin, ipfsTokenUri } from "../storage/ipfs"; /////////////////////////////////////////////////////////////////////////////////// // GET image uri const nftPin = async (chainId: number, media: string): Promise => { - if (ipfsConfigValid()) return ipfsPin(media); + if (ipfsConfigValid(chainId)) return ipfsPin(media); if (swarmConfigValid(chainId)) return swarmPin(media); return ""; }; @@ -26,7 +26,7 @@ const nftTokenUri = async ( pdfUri = "" ): Promise => { let nftTokenUriFunc; - if (ipfsConfigValid()) nftTokenUriFunc = ipfsTokenUri; + if (ipfsConfigValid(chainId)) nftTokenUriFunc = ipfsTokenUri; if (swarmConfigValid(chainId)) nftTokenUriFunc = swarmTokenUri; return nftTokenUriFunc diff --git a/common/src/resolver/resolver-get-collection.ts b/common/src/resolver/resolver-get-collection.ts index 0eeef7412..83e8280f5 100644 --- a/common/src/resolver/resolver-get-collection.ts +++ b/common/src/resolver/resolver-get-collection.ts @@ -58,51 +58,69 @@ const resolverAreCollections = async (chainId: number, collections: Array => { +// console.log("resolverGetCollections >", chainId); +// const collections: CollectionType[] = []; + +// const nftsResolver = await resolverGetContract(chainId); +// const colls = await nftsResolver.getCo(); + +// console.log("resolverGetCollections <", collections); +// return collections; +// }; + +const resolverGetCollectionsAddresses = async (chainId: number): Promise => { + // console.log("resolverGetCollectionsAddresses", chainId); + + const nftsResolver = await resolverGetContract(chainId); + + const addresses = await nftsResolver.getAddresses(); + // console.log("resolverGetCollectionsInfos openNFTsStructOutput", collectionInfos); + + // console.log("resolverGetCollectionsAddresses", chainId, addresses); + return addresses; +}; + +const resolverGetCollectionsInfos = async ( chainId: number, account = ADDRESS_ZERO ): Promise> => { - // console.log(`resolverGetCollections ${keyCollections(chainId, account)}\n`, chainId, account); + // console.log("resolverGetCollectionsInfos >", chainId, account); const collections: Map = new Map(); const nftsResolver = await resolverGetContract(chainId); - const collectionInfos = await nftsResolver.getOpenNFTsCollectionsInfos(account); - // console.log("resolverGetCollections openNFTsStructOutput", collectionInfos); + const collectionsInfos = await nftsResolver.getOpenNFTsCollectionsInfos(account); + // console.log("resolverGetCollectionsInfos openNFTsStructOutput", collectionsInfos); - if (collectionInfos[0].length !== collectionInfos[1].length) { - console.error("ERROR resolverGetCollections", collectionInfos); + if (collectionsInfos[0].length !== collectionsInfos[1].length) { + console.error("ERROR resolverGetCollectionsInfos", collectionsInfos); } - for (let index = 0; index < collectionInfos[0].length; index++) { + for (let index = 0; index < collectionsInfos[0].length; index++) { const collection = resolverConvOpenNFTsCollectionInfos( chainId, - [collectionInfos[0][index], collectionInfos[1][index]], + [collectionsInfos[0][index], collectionsInfos[1][index]], account ); // console.log("collection", collection); collections.set(keyCollection(chainId, collection.address), collection); } - // console.log(`resolverGetCollections ${chainId} ${account}\n`, collections); + // console.log("resolverGetCollectionsInfos <", collections); return collections; }; -const countCollectionsCache = new Map(); const resolverCountCollections = async (chainId: number): Promise => { - if (!countCollectionsCache.has(chainId)) { - const nftsResolver = await resolverGetContract(chainId); - const countCollections = Number(await nftsResolver.countAddresses()); - countCollectionsCache.set(chainId, countCollections); - } - - return countCollectionsCache.get(chainId); + const nftsResolver = await resolverGetContract(chainId); + return Number(await nftsResolver.countAddresses()); }; export { resolverCountCollections, - resolverGetCollections, + resolverGetCollectionsInfos, + resolverGetCollectionsAddresses, resolverGetCollection, resolverAreCollections, resolverFilterCollections, diff --git a/common/src/storage/ipfs.ts b/common/src/storage/ipfs.ts index 1c9c948be..83baa7ff1 100644 --- a/common/src/storage/ipfs.ts +++ b/common/src/storage/ipfs.ts @@ -84,7 +84,7 @@ const ipfsGatewayLink = (ipfs: string): string => urlToLink(ipfsGatewayUrl(ipfs) ///////////////////////////////////////////////////////////////////////////////////////////////////// // TEST if ipfs config or params are valid -const ipfsConfigValid = (): boolean => storageDefault() == "ipfs" && ipfsParamsValid(); +const ipfsConfigValid = (chainId: number): boolean => storageDefault(chainId) == "ipfs" && ipfsParamsValid(); const ipfsParamsValid = (): boolean => storageParamsValid(storageParamsGet("ipfs")); // GET ipfs gateway diff --git a/common/src/storage/storage.ts b/common/src/storage/storage.ts index 18550a284..ff7ca6636 100644 --- a/common/src/storage/storage.ts +++ b/common/src/storage/storage.ts @@ -7,6 +7,7 @@ import { ipfsGateway, ipfsGatewayUrl, ipfsLinkToUrlHttp, ipfsGetLink } from "./i import { swarmGateway, swarmGatewayUrl, swarmLinkToUrlHttp, swarmGetLink } from "./swarm"; import config from "@kredeum/config/dist/config.json"; import { localConfigNamespace, localStorageGet, localStorageSet } from "../common/local"; +import { networks } from "../common/networks"; // IN MEMORY Storage Config let _storageConfig: StorageConfigType; @@ -43,7 +44,8 @@ const storageConfigGet = (): StorageConfigType => { }; // GET storage default -const storageDefault = (): string => storageConfigGet().default; +// only IPFS on Mainnets +const storageDefault = (chainId: number): string => (networks.isMainnet(chainId) ? "ipfs" : storageConfigGet().default); // GET storage params const storageParamsGet = (type: StorageType): StorageParamsType | undefined => { diff --git a/common/src/storage/swarm.ts b/common/src/storage/swarm.ts index 137e6a1b4..f47ef7985 100644 --- a/common/src/storage/swarm.ts +++ b/common/src/storage/swarm.ts @@ -65,7 +65,7 @@ const swarmGateway = (): string => storageParamsGet("swarm")?.gateway.replace(/\ const SWARM_ZERO_APIKEY = "0000000000000000000000000000000000000000000000000000000000000000"; // TEST if swarm config or params are valid -const swarmConfigValid = (chainId: number): boolean => storageDefault() == "swarm" && swarmParamsValid(chainId); +const swarmConfigValid = (chainId: number): boolean => storageDefault(chainId) == "swarm" && swarmParamsValid(chainId); const swarmParamsValid = (chainId: number): boolean => { const swarmParams = storageParamsGet("swarm"); diff --git a/common/src/viem/ens-get.ts b/common/src/viem/ens-get.ts new file mode 100644 index 000000000..5917896ca --- /dev/null +++ b/common/src/viem/ens-get.ts @@ -0,0 +1,43 @@ +import { Address, createPublicClient, http } from "viem"; +import { normalize } from "viem/ens"; +import { mainnet } from "viem/chains"; + +const publicClient = createPublicClient({ + chain: mainnet, + transport: http() +}); + +const ens = (() => { + const getName = async (address: string): Promise => { + let name: string | null = null; + + try { + name = await publicClient.getEnsName({ address: address as Address }); + } catch (e) { + console.error("ENS lookupAddress not found"); + } + + // console.log("getName", address, "=>", name); + return name || address || ""; + }; + + const getAvatar = async (address: string): Promise => { + let avatar: string | null = null; + + try { + // avatar = await ensProvider.getAvatar(address); + avatar = await publicClient.getEnsAvatar({ + name: normalize(address) + }); + } catch (e) { + console.error("ENS lookupAddress not found"); + } + + // console.log("getAvatar", address, "=>", avatar); + return avatar || ""; + }; + + return { getName, getAvatar }; +})(); + +export { ens }; diff --git a/common/tsconfig.json b/common/tsconfig.json index d4591370d..a0e134547 100644 --- a/common/tsconfig.json +++ b/common/tsconfig.json @@ -6,5 +6,5 @@ "esModuleInterop": true, "resolveJsonModule": true }, - "include": ["src/**/*.ts"] + "include": ["src/**/*.ts", "scripts/**/*.ts"] } diff --git a/common/turbo.json b/common/turbo.json index 6ce0571c8..5084c3fe8 100644 --- a/common/turbo.json +++ b/common/turbo.json @@ -1,9 +1,18 @@ { - "extends": ["//"], + "extends": [ + "//" + ], "pipeline": { "check": { - "dependsOn": ["format", "@kredeum/config#build", "@kredeum/contracts#build"], - "inputs": ["src/**", "../contracts/addresses.json"] + "dependsOn": [ + "format", + "@kredeum/config#build", + "@kredeum/contracts#build" + ], + "inputs": [ + "src/**/*.ts", + "../contracts/addresses.json" + ] } } -} +} \ No newline at end of file diff --git a/config/package.json b/config/package.json index da6c2fcaa..4ed2b9bab 100644 --- a/config/package.json +++ b/config/package.json @@ -13,7 +13,7 @@ "license": "ISC", "devDependencies": { "@types/fs-extra": "^11.0.4", - "@types/node": "^20.12.7", + "@types/node": "^20.12.8", "eslint-plugin-json": "^3.1.0", "fs-extra": "^11.2.0", "handlebars": "^4.7.8" diff --git a/config/src/config.handlebars.json b/config/src/config.handlebars.json index 9fcd5c5ca..2c99e7bdc 100644 --- a/config/src/config.handlebars.json +++ b/config/src/config.handlebars.json @@ -1,7 +1,7 @@ { "version": { - "latest": "1.4.0", - "stable": "1.1.4", + "latest": "1.6.0", + "stable": "1.6.0", "branch": "{{GIT_BRANCH}}", "commit": "{{GIT_COMMIT}}" }, diff --git a/config/src/mainnets.handlebars.json b/config/src/mainnets.handlebars.json index adcea19e1..8ee85b9d7 100644 --- a/config/src/mainnets.handlebars.json +++ b/config/src/mainnets.handlebars.json @@ -4,9 +4,9 @@ "chainName": "mainnet", "chainLabel": "Ethereum", "rpcUrls": [ + "https://rpc.ankr.com/eth/{{ANKR_API_KEY}}", "https://eth-mainnet.g.alchemy.com/v2/{{ALCHEMY_API_KEY}}", - "https://mainnet.infura.io/v3/{{INFURA_API_KEY}}", - "https://rpc.ankr.com/eth" + "https://mainnet.infura.io/v3/{{INFURA_API_KEY}}" ], "nativeCurrency": { "name": "Ether", @@ -33,9 +33,9 @@ "chainId": 42161, "chainName": "arbitrum", "rpcUrls": [ - "https://arbitrum-mainnet.infura.io/v3/{{INFURA_API_KEY}}", + "https://rpc.ankr.com/arbitrum/{{ANKR_API_KEY}}", "https://arb-mainnet.g.alchemy.com/v2/{{ALCHEMY_API_KEY_ARBITRUM}}", - "https://rpc.ankr.com/arbitrum" + "https://arbitrum-mainnet.infura.io/v3/{{INFURA_API_KEY}}" ], "nativeCurrency": { "name": "Ether", @@ -76,9 +76,9 @@ "chainId": 10, "chainName": "optimism", "rpcUrls": [ - "https://optimism-mainnet.infura.io/v3/{{INFURA_API_KEY}}", + "https://rpc.ankr.com/optimism/{{ANKR_API_KEY}}", "https://opt-mainnet.g.alchemy.com/v2/{{ALCHEMY_API_KEY_OPTIMISM}}", - "https://rpc.ankr.com/optimism", + "https://optimism-mainnet.infura.io/v3/{{INFURA_API_KEY}}", "https://mainnet.optimism.io" ], "nativeCurrency": { @@ -102,6 +102,7 @@ "chainId": 534352, "chainName": "scroll", "rpcUrls": [ + "https://rpc.ankr.com/scroll/{{ANKR_API_KEY}}", "https://rpc.scroll.io" ], "nativeCurrency": { @@ -121,6 +122,7 @@ "chainId": 8453, "chainName": "base", "rpcUrls": [ + "https://rpc.ankr.com/base/{{ANKR_API_KEY}}", "https://base-mainnet.g.alchemy.com/v2/{{ALCHEMY_API_KEY_BASE}}", "https://mainnet.base.org/", "https://developer-access-mainnet.base.org/" @@ -147,7 +149,7 @@ "chainId": 5000, "chainName": "mantle", "rpcUrls": [ - "https://rpc.ankr.com/mantle", + "https://rpc.ankr.com/mantle/{{ANKR_API_KEY}}", "https://rpc.mantle.xyz", "https://1rpc.io/mantle" ], @@ -188,8 +190,8 @@ "chainName": "blast", "chainLabel": "Blast", "rpcUrls": [ - "https://rpc.blast.io", - "https://rpc.ankr.com/blast" + "https://rpc.ankr.com/blast/{{ANKR_API_KEY}}", + "https://rpc.blast.io" ], "nativeCurrency": { "name": "Ether", @@ -209,8 +211,8 @@ "chainName": "polygon-zkevm", "chainLabel": "Polygon zkEVM", "rpcUrls": [ - "https://zkevm-rpc.com", - "https://rpc.ankr.com/polygon_zkevm" + "https://rpc.ankr.com/polygon_zkevm/{{ANKR_API_KEY}}", + "https://zkevm-rpc.com" ], "nativeCurrency": { "name": "Ether", @@ -267,10 +269,10 @@ "chainId": 137, "chainName": "polygon", "rpcUrls": [ - "https://polygon-mainnet.infura.io/v3/{{INFURA_API_KEY}}", + "https://rpc.ankr.com/polygon/{{ANKR_API_KEY}}", "https://polygon-mainnet.g.alchemy.com/v2/{{ALCHEMY_API_KEY_POLYGON}}", - "https://polygon-rpc.com/", - "https://rpc.ankr.com/polygon" + "https://polygon-mainnet.infura.io/v3/{{INFURA_API_KEY}}", + "https://polygon-rpc.com/" ], "nativeCurrency": { "name": "Matic", @@ -298,7 +300,7 @@ "chainId": 100, "chainName": "gnosis", "rpcUrls": [ - "https://rpc.ankr.com/gnosis", + "https://rpc.ankr.com/gnosis/{{ANKR_API_KEY}}", "https://rpc.gnosischain.com", "https://rpc.xdaichain.com", "https://xdai.poanetwork.dev/", @@ -319,8 +321,8 @@ "chainId": 43114, "chainName": "avalanche", "rpcUrls": [ + "https://rpc.ankr.com/avalanche/{{ANKR_API_KEY}}", "https://avalanche-mainnet.infura.io/v3/{{INFURA_API_KEY}}", - "https://rpc.ankr.com/avalanche", "https://api.avax.network/ext/bc/C/rpc" ], "nativeCurrency": { @@ -339,9 +341,9 @@ "chainId": 42220, "chainName": "celo", "rpcUrls": [ + "https://rpc.ankr.com/celo/{{ANKR_API_KEY}}", "https://celo-mainnet.infura.io/v3/{{INFURA_API_KEY}}", "https: //celo.drpc.org", - "https://rpc.ankr.com/celo", "https://forno.celo.org" ], "nativeCurrency": { @@ -359,8 +361,8 @@ "chainId": 250, "chainName": "fantom", "rpcUrls": [ + "https://rpc.ankr.com/fantom/{{ANKR_API_KEY}}", "https://rpc.ftm.tools/", - "https://rpc.ankr.com/fantom", "https://rpcapi.fantom.network" ], "nativeCurrency": { @@ -379,8 +381,8 @@ "chainName": "bsc", "chainLabel": "Binance Smart Chain", "rpcUrls": [ + "https://rpc.ankr.com/bsc/{{ANKR_API_KEY}}", "https://bsc-rpc.publicnode.com", - "https://rpc.ankr.com/bsc", "https://bsc-dataseed.binance.org", "https://bsc-dataseed1.defibit.io", "https://bsc-dataseed1.ninicoin.io" @@ -417,6 +419,7 @@ { "chainId": 1564830818, "chainName": "skale-calypso", + "chainLabel": "SKALE Calypso Hub", "rpcUrls": [ "https://mainnet.skalenodes.com/v1/honorable-steel-rasalhague" ], @@ -428,8 +431,11 @@ "blockExplorerUrls": [ "https://honorable-steel-rasalhague.explorer.mainnet.skalenodes.com/" ], - "active": false, - "create": true, + "active": true, + "covalent": { + "active": false + }, + "create": false, "paymaster": true }, { @@ -449,6 +455,9 @@ ], "opstack": true, "create": true, + "covalent": { + "active": false + }, "active": false, "linkedLayer1": 0 }, @@ -468,6 +477,9 @@ ], "linkedLayer1": 1, "active": false, + "covalent": { + "active": false + }, "create": true } ] \ No newline at end of file diff --git a/config/src/testnets.handlebars.json b/config/src/testnets.handlebars.json index aff7bbc9d..15600ad09 100644 --- a/config/src/testnets.handlebars.json +++ b/config/src/testnets.handlebars.json @@ -3,9 +3,10 @@ "chainId": 11155111, "chainName": "sepolia", "rpcUrls": [ - "https://sepolia.infura.io/v3/{{INFURA_API_KEY}}", - "https://rpc.ankr.com/eth_sepolia", - "https://rpc.sepolia.org" + "https://rpc.ankr.com/eth_sepolia/{{ANKR_API_KEY}}", + "https://rpc.sepolia.org", + "https://ethereum-sepolia-rpc.publicnode.com", + "https://sepolia.infura.io/v3/{{INFURA_API_KEY}}" ], "nativeCurrency": { "name": "Ether", @@ -26,6 +27,7 @@ "chainId": 534351, "chainName": "scroll-sepolia", "rpcUrls": [ + "https://rpc.ankr.com/scroll_sepolia_testnet/{{ANKR_API_KEY}}", "https://sepolia-rpc.scroll.io/" ], "nativeCurrency": { @@ -46,6 +48,7 @@ "chainId": 84532, "chainName": "base-sepolia", "rpcUrls": [ + "https://rpc.ankr.com/base_sepolia/{{ANKR_API_KEY}}", "https://sepolia.base.org", "https://base-sepolia.blockpi.network/v1/rpc/public" ], @@ -87,6 +90,7 @@ "chainId": 168587773, "chainName": "blast-sepolia", "rpcUrls": [ + "https://rpc.ankr.com/blast_testnet_sepolia/{{ANKR_API_KEY}}", "https://sepolia.blast.io" ], "nativeCurrency": { @@ -190,7 +194,7 @@ "linkedMainnet": 59144, "linkedLayer1": 5, "create": true, - "active": true + "active": false }, { "chainId": 59141, @@ -257,6 +261,7 @@ "chainId": 17000, "chainName": "holesky", "rpcUrls": [ + "https://rpc.ankr.com/eth_holesky/{{ANKR_API_KEY}}", "https://ethereum-holesky.publicnode.com" ], "nativeCurrency": { @@ -275,6 +280,7 @@ "chainName": "taiko-katla", "chainLabel": "Taiko Katla", "rpcUrls": [ + "https://rpc.ankr.com/taiko_katla/{{ANKR_API_KEY}}", "https://rpc.katla.taiko.xyz" ], "nativeCurrency": { @@ -293,6 +299,7 @@ "chainId": 80002, "chainName": "amoy", "rpcUrls": [ + "https://rpc.ankr.com/polygon_amoy/{{ANKR_API_KEY}}", "https://polygon-amoy.infura.io/v3/{{INFURA_API_KEY}}", "https://rpc-amoy.polygon.technology" ], @@ -359,6 +366,7 @@ "chainId": 10200, "chainName": "chiado", "rpcUrls": [ + "https://rpc.ankr.com/gnosis_testnet/{{ANKR_API_KEY}}", "https://rpc.chiadochain.net", "https://rpc.chiado.gnosis.gateway.fm" ], @@ -378,8 +386,8 @@ "chainId": 43113, "chainName": "fuji", "rpcUrls": [ + "https://rpc.ankr.com/avalanche_fuji/{{ANKR_API_KEY}}", "https://avalanche-fuji.infura.io/v3/{{INFURA_API_KEY}}", - "https://rpc.ankr.com/avalanche_fuji", "https://api.avax-test.network/ext/bc/C/rpc" ], "nativeCurrency": { @@ -418,8 +426,8 @@ "chainId": 4002, "chainName": "fantom-testnet", "rpcUrls": [ - "https://rpc.testnet.fantom.network", - "https://rpc.ankr.com/fantom_testnet" + "https://rpc.ankr.com/fantom_testnet/{{ANKR_API_KEY}}", + "https://rpc.testnet.fantom.network" ], "nativeCurrency": { "name": "FTM", @@ -437,6 +445,7 @@ "chainId": 97, "chainName": "bsc-testnet", "rpcUrls": [ + "https://rpc.ankr.com/bsc_testnet_chapel/{{ANKR_API_KEY}}", "https://bsc-testnet-rpc.publicnode.com", "https://bsc-testnet.public.blastapi.io" ], @@ -525,6 +534,7 @@ "http://localhost/explorer" ], "linkedMainnet": 31337, - "create": true + "create": true, + "active": false } ] \ No newline at end of file diff --git a/contracts/addresses.json b/contracts/addresses.json index 9031bb7a9..0e789526a 100644 --- a/contracts/addresses.json +++ b/contracts/addresses.json @@ -62,11 +62,6 @@ "OpenNFTsV4": "0x485ed00c43e919E02279Ca137343B2aC63EF0eF2", "chainName": "chaos-testnet" }, - "974399131": { - "OpenNFTsResolver": "0xb5c8CB0846317d82af2DbF90713716B01A2f680a", - "OpenNFTsV4Skale": "0x25F56b5527F5634752Fd2C85564E8d2484cAAEF3", - "chainName": "calypso-testnet" - }, "137": { "OpenAutoMarket": "0x5Cf67C52eD5608B9841238bCc2bDe012263b7111", "OpenBound": "0xE82984f872B68B6B369D5700654F229ba6f57c42", @@ -86,6 +81,11 @@ "OpenNFTsV4": "0xd1ca741de2d2975822ADf4646Cf0A8AE3Df51c78", "chainName": "polygon-zkevm-testnet" }, + "1564830818": { + "OpenNFTsResolver": "0xb5c8CB0846317d82af2DbF90713716B01A2f680a", + "OpenNFTsV4Skale": "0x25F56b5527F5634752Fd2C85564E8d2484cAAEF3", + "chainName": "skale-calypso" + }, "167008": { "OpenAutoMarket": "0x485ed00c43e919E02279Ca137343B2aC63EF0eF2", "OpenNFTsFactoryV3": "0xb5c8CB0846317d82af2DbF90713716B01A2f680a", @@ -331,6 +331,11 @@ "OpenNFTsV4": "0xd1ca741de2d2975822ADf4646Cf0A8AE3Df51c78", "chainName": "bsc-testnet" }, + "974399131": { + "OpenNFTsResolver": "0xb5c8CB0846317d82af2DbF90713716B01A2f680a", + "OpenNFTsV4Skale": "0x25F56b5527F5634752Fd2C85564E8d2484cAAEF3", + "chainName": "calypso-testnet" + }, "999": { "OpenAutoMarket": "0x10bdda29d9a84dC0E8C263B29734d4502a74BCF2", "OpenNFTsFactoryV3": "0xECC12ab909CfaEb5989E35509218f399c8Dc4b4c", diff --git a/contracts/addresses.txt b/contracts/addresses.txt new file mode 100644 index 000000000..b3af7b38c --- /dev/null +++ b/contracts/addresses.txt @@ -0,0 +1,67 @@ +mainnet +OpenNFTsFactoryV3: 0x215890506F31EB0E573d7E75108C2E169c7B0EE7, +OpenNFTsResolver: 0x6Da66ce3C9CA569Ce692F68620166b368D1b598D, + +optimism +OpenNFTsFactoryV3: 0x57BDf6E59C2652D349f7022beB8D1B7458CA09EB, +OpenNFTsResolver: 0xD53e7aa446e4615DEC602c1D0d024425256f631a, + +gnosis +OpenNFTsFactoryV3: 0xC308A8c2fbDea84D1028F906cf966492B14645a0, +OpenNFTsResolver: 0xfa44e688bD672b46dcF70CFD467cE10139d3d8DF, + +polygon-zkevm +OpenNFTsFactoryV3: 0x432390f20c4Cc1074189Be686dC0f7c55f4D7a4f, +OpenNFTsResolver: 0xF5bD742333e052b28f17dAeF849fe44A88948e72, + +polygon +OpenNFTsFactoryV3: 0x2a1036F570B75116e6e5E1B7e0Af4cdaD01De7C3, +OpenNFTsResolver: 0x14533d672cb51a9c5cc9c92ac3f30a9791b407db, + +skale-calypso +OpenNFTsResolver: 0xb5c8CB0846317d82af2DbF90713716B01A2f680a, +OpenNFTsV4Skale: 0x25F56b5527F5634752Fd2C85564E8d2484cAAEF3, + +fantom +OpenNFTsFactoryV3: 0x2558bEFfC5b6520F68b2A6a22185a48B3c8D7610, +OpenNFTsResolver: 0x9fe67971255298DeE0e3Fb06E2dE615C424A692E, + +mode +OpenNFTsFactoryV3: 0xFc008F04042530Bf0bd8333FBe45470b514bD847, +OpenNFTsResolver: 0x393F71f4afEDF852c589fBA06ED81a2cb3a165e4, + +arbitrum +OpenNFTsFactoryV3: 0x5E03Acd53d5D3A834278014D91F0AFD36f8147Ce, +OpenNFTsResolver: 0x88A9B09B081CA46daEa53f170d8da27490a16b82, + +avalanche +OpenNFTsFactoryV3: 0x9a5642c32e4115fEb205dC0057cE087eB97c202c, +OpenNFTsResolver: 0xc12d57A1B9f15E7893D0818f02A28dD20Ee5cBc0, + +mantle +OpenNFTsFactoryV3: 0xFc008F04042530Bf0bd8333FBe45470b514bD847, +OpenNFTsResolver: 0x393F71f4afEDF852c589fBA06ED81a2cb3a165e4, + +scroll +OpenNFTsFactoryV3: 0x393F71f4afEDF852c589fBA06ED81a2cb3a165e4, +OpenNFTsResolver: 0x4C2907b974d10458A6D4Dd5269f23B5a23DA087E, + +bsc +OpenNFTsFactoryV3: 0x7B5E42Ab37Bf962413a2B062fE7373141e643f46, +OpenNFTsResolver: 0x2b3050E1B9c592869143f04c2a6962aAb4B95FbE, + +linea +OpenNFTsFactoryV3: 0xFc008F04042530Bf0bd8333FBe45470b514bD847, +OpenNFTsResolver: 0x393F71f4afEDF852c589fBA06ED81a2cb3a165e4, + +zora +OpenNFTsFactoryV3: 0x393F71f4afEDF852c589fBA06ED81a2cb3a165e4, +OpenNFTsResolver: 0x07Fc1f455D198B518B1998dCc0EE63cB8c77491d, + +blast +OpenNFTsFactoryV3: 0xFc008F04042530Bf0bd8333FBe45470b514bD847, +OpenNFTsResolver: 0x393F71f4afEDF852c589fBA06ED81a2cb3a165e4, + +base +OpenNFTsFactoryV3: 0x25F56b5527F5634752Fd2C85564E8d2484cAAEF3, +OpenNFTsResolver: 0x1524E69d35961dee5Ab066269efb6c4992367019, diff --git a/contracts/foundry.toml b/contracts/foundry.toml index 9568646ee..bca0a638f 100644 --- a/contracts/foundry.toml +++ b/contracts/foundry.toml @@ -34,6 +34,7 @@ mode = "https://mainnet.mode.network" manta-pacific = "https://pacific-rpc.manta.network/http" blast = "https://blast-mainnet.infura.io/v3/${INFURA_API_KEY}" celo = "https://forno.celo.org" +skale-calypso = "https://mainnet.skalenodes.com/v1/honorable-steel-rasalhague" # TESTNETS sepolia = "https://sepolia.infura.io/v3/${INFURA_API_KEY}" diff --git a/contracts/scripts/deploy/DeployOpenNFTsResolver.s.sol b/contracts/scripts/deploy/DeployOpenNFTsResolver.s.sol index 95ae6906d..ec958185d 100644 --- a/contracts/scripts/deploy/DeployOpenNFTsResolver.s.sol +++ b/contracts/scripts/deploy/DeployOpenNFTsResolver.s.sol @@ -13,9 +13,11 @@ contract DeployOpenNFTsResolver is DeployLite, DeployOpenNFTsFactoryV3 { function deployOpenNFTsResolver() public returns (address) { address openNFTsFactoryV3 = readAddress("OpenNFTsFactoryV3"); address openNFTsResolverOld = readAddress("OpenNFTsResolver"); + bool factory = openNFTsFactoryV3 != address(0); require( - msg.sender == OpenNFTsFactoryV3(openNFTsFactoryV3).owner(), "Deployer must be OpenNFTsFactoryV3 owner !" + !factory || msg.sender == OpenNFTsFactoryV3(openNFTsFactoryV3).owner(), + "Deployer must be OpenNFTsFactoryV3 owner !" ); bytes memory args = abi.encode(msg.sender, openNFTsFactoryV3); @@ -25,7 +27,7 @@ contract DeployOpenNFTsResolver is DeployLite, DeployOpenNFTsFactoryV3 { vm.startBroadcast(); address openNFTsResolver = deploy("OpenNFTsResolver", args); - OpenNFTsFactoryV3(openNFTsFactoryV3).setResolver(openNFTsResolver); + if (factory) OpenNFTsFactoryV3(openNFTsFactoryV3).setResolver(openNFTsResolver); if (openNFTsResolverOld != address(0)) { // migrate addresses from old to new diff --git a/contracts/tests/OpenNFTsV4Skale/OpenNFTsV4SkaleTest.t.sol b/contracts/tests/OpenNFTsV4Skale/OpenNFTsV4SkaleTest.t.sol new file mode 100644 index 000000000..bb5ac4d98 --- /dev/null +++ b/contracts/tests/OpenNFTsV4Skale/OpenNFTsV4SkaleTest.t.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: MITs +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; + +import "src/OpenNFTsV4Skale.sol"; + +contract OpenNFTsV4SkaleTest is Test { + address owner = makeAddr("owner"); + address minter = makeAddr("minter"); + OpenNFTsV4Skale collection; + string constant TOKEN_URI = "ipfs://bafkreidfhassyaujwpbarjwtrc6vgn2iwfjmukw3v7hvgggvwlvdngzllm"; + + function setUp() public { + bool[] memory options = new bool[](1); + options[0] = true; + + vm.startPrank(owner); + collection = new OpenNFTsV4Skale(); + collection.initialize( + "SkaleTest", "SKTEST", owner, abi.encode(abi.encode(0, address(0), 0, options), address(0), 0) + ); + vm.stopPrank(); + } + + function test_OpenNFTsV4Skale_cooldownPeriod(uint256 coolDownPeriod) public { + vm.assume(coolDownPeriod < 1e16); + + vm.prank(owner); + collection.setCooldownPeriod(coolDownPeriod); + + vm.startPrank(minter); + collection.mint(TOKEN_URI); + + vm.warp(block.timestamp + coolDownPeriod); + + vm.expectRevert(); + collection.mint(TOKEN_URI); + + vm.warp(block.timestamp + 1); + + collection.mint(TOKEN_URI); + vm.stopPrank(); + } + + function test_OpenNFTsV4Skale_tokenUriMaxLength() public { + vm.prank(minter); + collection.mint(TOKEN_URI); + + vm.prank(owner); + collection.setTokenUriMaxLength(64); + + vm.prank(minter); + vm.expectRevert(); + collection.mint(TOKEN_URI); + } +} diff --git a/gulp/package.json b/gulp/package.json index 8a96d59e6..845feff79 100644 --- a/gulp/package.json +++ b/gulp/package.json @@ -17,7 +17,7 @@ "del": "^7.1.0", "gulp": "^4.0.2", "gulp-if": "^3.0.0", - "gulp-imagemin": "^9.0.0", + "gulp-imagemin": "^9.1.0", "gulp-newer": "^1.4.0", "gulp-noop": "^1.0.1", "gulp-plumber": "^1.2.1", @@ -27,7 +27,7 @@ "gulp-sourcemaps": "^3.0.0", "gulp-uglify": "^3.0.2", "postcss": "^8.4.38", - "sass": "^1.75.0" + "sass": "^1.76.0" }, "type": "module" } \ No newline at end of file diff --git a/gulp/turbo.json b/gulp/turbo.json index 38ecd5176..3da0e478d 100644 --- a/gulp/turbo.json +++ b/gulp/turbo.json @@ -3,7 +3,7 @@ "pipeline": { "build": { "inputs": ["src/**", "gulpfile.js", "package.json"], - "outputs": ["web/dapp/favicon.ico", "web/dapp/**/*"] + "outputs": ["web/dapp/favicon.ico", "web/dapp/**"] } } } diff --git a/package.json b/package.json index 2074a42aa..ec25f3890 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "1.4.0", "main": "index.js", "scripts": { - "clean": "pnpm -r clean && rm -rf node_modules pnpm-lock.yaml .turbo web/dapp", + "clean": "pnpm -r clean && rm -rf node_modules .turbo web/dapp", "all": "pnpm clean && pnpm install && pnpm build", "build": "turbo build", "dev:dapp": "turbo dev -F sveltekit", @@ -25,13 +25,13 @@ "pnpm": "^8" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^7.7.1", - "@typescript-eslint/parser": "^7.7.1", + "@typescript-eslint/eslint-plugin": "^7.8.0", + "@typescript-eslint/parser": "^7.8.0", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "prettier": "^3.2.5", "ts-node": "^10.9.2", - "turbo": "^1.13.2" + "turbo": "^1.13.3" }, "type": "module" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7f1d08571..fbdb8eddd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,10 +9,10 @@ importers: .: devDependencies: '@typescript-eslint/eslint-plugin': - specifier: ^7.7.1 + specifier: ^7.8.0 version: 7.8.0(@typescript-eslint/parser@7.8.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': - specifier: ^7.7.1 + specifier: ^7.8.0 version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) eslint: specifier: ^8.57.0 @@ -25,9 +25,9 @@ importers: version: 3.2.5 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) + version: 10.9.2(@types/node@20.12.8)(typescript@5.4.5) turbo: - specifier: ^1.13.2 + specifier: ^1.13.3 version: 1.13.3 common: @@ -72,8 +72,8 @@ importers: specifier: ^13.1.0 version: 13.1.0 viem: - specifier: ^2.9.26 - version: 2.9.29(typescript@5.4.5) + specifier: ^2.9.32 + version: 2.9.32(typescript@5.4.5) devDependencies: '@ipld/dag-pb': specifier: ^4.1.0 @@ -82,8 +82,8 @@ importers: specifier: ^4.0.5 version: 4.0.5 '@types/node': - specifier: ^20.12.7 - version: 20.12.7 + specifier: ^20.12.8 + version: 20.12.8 findup-sync: specifier: ^5.0.0 version: 5.0.0 @@ -100,8 +100,8 @@ importers: specifier: ^11.0.4 version: 11.0.4 '@types/node': - specifier: ^20.12.7 - version: 20.12.7 + specifier: ^20.12.8 + version: 20.12.8 eslint-plugin-json: specifier: ^3.1.0 version: 3.1.0 @@ -163,8 +163,8 @@ importers: specifier: ^3.0.0 version: 3.0.0 gulp-imagemin: - specifier: ^9.0.0 - version: 9.0.0(gulp@4.0.2) + specifier: ^9.1.0 + version: 9.1.0(gulp@4.0.2) gulp-newer: specifier: ^1.4.0 version: 1.4.0 @@ -193,8 +193,8 @@ importers: specifier: ^8.4.38 version: 8.4.38 sass: - specifier: ^1.75.0 - version: 1.75.0 + specifier: ^1.76.0 + version: 1.76.0 providers: dependencies: @@ -203,14 +203,14 @@ importers: version: link:../config devDependencies: viem: - specifier: ^2.9.26 - version: 2.9.29(typescript@5.4.5) + specifier: ^2.9.32 + version: 2.9.32(typescript@5.4.5) skale: dependencies: viem: - specifier: ^2.9.26 - version: 2.9.29(typescript@5.4.5) + specifier: ^2.9.32 + version: 2.9.32(typescript@5.4.5) devDependencies: tsup: specifier: ^8.0.2 @@ -281,7 +281,7 @@ importers: version: 7.1.0 eslint-plugin-svelte: specifier: ^2.38.0 - version: 2.38.0(eslint@8.57.0)(svelte@4.2.15)(ts-node@10.9.2) + version: 2.38.0(eslint@9.2.0)(svelte@4.2.15)(ts-node@10.9.2) ethers: specifier: ^5.7.2 version: 5.7.2 @@ -295,7 +295,7 @@ importers: specifier: ^3.2.3 version: 3.2.3(prettier@3.2.5)(svelte@4.2.15) rollup: - specifier: ^4.16.4 + specifier: ^4.17.2 version: 4.17.2 rollup-plugin-postcss: specifier: ^4.0.2 @@ -310,8 +310,8 @@ importers: specifier: ^4.2.15 version: 4.2.15 svelte-check: - specifier: ^3.7.0 - version: 3.7.0(postcss@8.4.38)(svelte@4.2.15) + specifier: ^3.7.1 + version: 3.7.1(postcss@8.4.38)(svelte@4.2.15) svelte-preprocess: specifier: ^5.1.4 version: 5.1.4(postcss@8.4.38)(svelte@4.2.15)(typescript@5.4.5) @@ -327,12 +327,6 @@ importers: '@kredeum/common': specifier: workspace:^ version: link:../common - '@kredeum/contracts': - specifier: workspace:^ - version: link:../contracts - '@kredeum/providers': - specifier: workspace:^ - version: link:../providers '@kredeum/svelte': specifier: workspace:^ version: link:../svelte @@ -345,10 +339,10 @@ importers: version: 3.0.1(@sveltejs/kit@2.5.7) '@sveltejs/kit': specifier: ^2.5.7 - version: 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.10) + version: 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.11) '@sveltejs/vite-plugin-svelte': specifier: ^3.1.0 - version: 3.1.0(svelte@4.2.15)(vite@5.2.10) + version: 3.1.0(svelte@4.2.15)(vite@5.2.11) '@synthetixio/synpress': specifier: 3.7.2-beta.10 version: 3.7.2-beta.10(@babel/core@7.24.5)(@babel/preset-env@7.24.5)(babel-loader@9.1.3)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5)(webpack@5.91.0) @@ -359,8 +353,8 @@ importers: specifier: ^4.2.15 version: 4.2.15 svelte-check: - specifier: ^3.7.0 - version: 3.7.0(@babel/core@7.24.5)(svelte@4.2.15) + specifier: ^3.7.1 + version: 3.7.1(@babel/core@7.24.5)(svelte@4.2.15) tslib: specifier: ^2.6.2 version: 2.6.2 @@ -368,14 +362,14 @@ importers: specifier: ^5.4.5 version: 5.4.5 viem: - specifier: ^2.9.26 - version: 2.9.29(typescript@5.4.5) + specifier: ^2.9.32 + version: 2.9.32(typescript@5.4.5) vite: - specifier: ^5.2.10 - version: 5.2.10(@types/node@20.12.7) + specifier: ^5.2.11 + version: 5.2.11(@types/node@20.12.8) vitest: - specifier: ^1.5.2 - version: 1.5.3(@types/node@20.12.7) + specifier: ^1.6.0 + version: 1.6.0(@types/node@20.12.8) wordpress: dependencies: @@ -2136,6 +2130,16 @@ packages: eslint-visitor-keys: 3.4.3 dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@9.2.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 9.2.0 + eslint-visitor-keys: 3.4.3 + dev: true + /@eslint-community/regexpp@4.10.0: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -2158,11 +2162,33 @@ packages: - supports-color dev: true + /@eslint/eslintrc@3.0.2: + resolution: {integrity: sha512-wV19ZEGEMAC1eHgrS7UQPqsdEiCIbTKTasEfcXAigzoXICcqZSjBZEHlZwNVvKg6UBCjSlos84XiLqsRJnIcIg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4(supports-color@8.1.1) + espree: 10.0.1 + globals: 14.0.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@eslint/js@8.57.0: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /@eslint/js@9.2.0: + resolution: {integrity: sha512-ESiIudvhoYni+MdsI8oD7skpprZ89qKocwRM2KEvhhBJ9nl5MRh7BXU5GTod7Mdygq+AUl+QzId6iWJKR/wABA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + /@ethereumjs/rlp@4.0.1: resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} @@ -2515,6 +2541,17 @@ packages: - supports-color dev: true + /@humanwhocodes/config-array@0.13.0: + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.4(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -2524,6 +2561,11 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} dev: true + /@humanwhocodes/retry@0.2.4: + resolution: {integrity: sha512-Ttl/jHpxfS3st5sxwICYfk4pOH0WrLI1SpW283GgQL7sCWU7EHIOhX4b4fkIxr3tkfzwg8+FNojtzsIEE7Ecgg==} + engines: {node: '>=18.18'} + dev: true + /@ipld/dag-pb@4.1.0: resolution: {integrity: sha512-LJU451Drqs5zjFm7jI4Hs3kHlilOqkjcSfPiQgVsZnWaYb2C7YdfhnclrVn/X+ucKejlU9BL3+gXFCZUXkMuCg==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} @@ -2572,7 +2614,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/yargs': 15.0.19 chalk: 4.1.2 dev: true @@ -3366,6 +3408,16 @@ packages: engines: {node: '>=14.16'} dev: true + /@sindresorhus/is@6.3.0: + resolution: {integrity: sha512-bOSPck7aIJjASXIg1qvXSIjXhVBpIEKdl2Wxg4pVqoTRPL8wWExKBrnGIh6CEnhkFQHfc36k7APhO3uXV4g5xg==} + engines: {node: '>=16'} + dev: true + + /@sindresorhus/merge-streams@2.3.0: + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + dev: true + /@solidity-parser/parser@0.18.0: resolution: {integrity: sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA==} dev: true @@ -3375,10 +3427,10 @@ packages: peerDependencies: '@sveltejs/kit': ^2.0.0 dependencies: - '@sveltejs/kit': 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.10) + '@sveltejs/kit': 2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.11) dev: true - /@sveltejs/kit@2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.10): + /@sveltejs/kit@2.5.7(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.11): resolution: {integrity: sha512-6uedTzrb7nQrw6HALxnPrPaXdIN2jJJTzTIl96Z3P5NiG+OAfpdPbrWrvkJ3GN4CfWqrmU4dJqwMMRMTD/C7ow==} engines: {node: '>=18.13'} hasBin: true @@ -3388,7 +3440,7 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.3 dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.10) + '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.11) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 5.0.0 @@ -3402,10 +3454,10 @@ packages: sirv: 2.0.4 svelte: 4.2.15 tiny-glob: 0.2.9 - vite: 5.2.10(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.8) dev: true - /@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.10): + /@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.11): resolution: {integrity: sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==} engines: {node: ^18.0.0 || >=20} peerDependencies: @@ -3413,30 +3465,30 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.10) + '@sveltejs/vite-plugin-svelte': 3.1.0(svelte@4.2.15)(vite@5.2.11) debug: 4.3.4(supports-color@8.1.1) svelte: 4.2.15 - vite: 5.2.10(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.8) transitivePeerDependencies: - supports-color dev: true - /@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.10): + /@sveltejs/vite-plugin-svelte@3.1.0(svelte@4.2.15)(vite@5.2.11): resolution: {integrity: sha512-sY6ncCvg+O3njnzbZexcVtUqOBE3iYmQPJ9y+yXSkOwG576QI/xJrBnQSRXFLGwJNBa0T78JEKg5cIR0WOAuUw==} engines: {node: ^18.0.0 || >=20} peerDependencies: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.0 dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.10) + '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.0)(svelte@4.2.15)(vite@5.2.11) debug: 4.3.4(supports-color@8.1.1) deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.10 svelte: 4.2.15 svelte-hmr: 0.16.0(svelte@4.2.15) - vite: 5.2.10(@types/node@20.12.7) - vitefu: 0.2.5(vite@5.2.10) + vite: 5.2.11(@types/node@20.12.8) + vitefu: 0.2.5(vite@5.2.11) transitivePeerDependencies: - supports-color dev: true @@ -3470,7 +3522,7 @@ packages: dotenv: 16.4.5 dotenv-parse-variables: 2.0.0 download: 8.0.0 - ethers: 6.12.0 + ethers: 6.12.1 etherscan-api: 10.3.0(debug@4.3.4) find-config: 1.0.0 get-port: 7.1.0 @@ -3627,26 +3679,26 @@ packages: /@types/bn.js@4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/bn.js@5.1.5: resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/bonjour@3.5.13: resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/braces@3.0.4: @@ -3657,13 +3709,13 @@ packages: resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} dependencies: '@types/express-serve-static-core': 4.19.0 - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/cookie@0.6.0: @@ -3695,7 +3747,7 @@ packages: /@types/express-serve-static-core@4.19.0: resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/qs': 6.9.15 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -3720,14 +3772,14 @@ packages: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/html-minifier-terser@5.1.2: @@ -3749,7 +3801,7 @@ packages: /@types/http-proxy@1.17.14: resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -3775,13 +3827,13 @@ packages: /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/lru-cache@5.1.1: @@ -3805,7 +3857,7 @@ packages: /@types/node-forge@1.3.11: resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/node@16.18.96: @@ -3816,8 +3868,8 @@ packages: resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} dev: true - /@types/node@20.12.7: - resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + /@types/node@20.12.8: + resolution: {integrity: sha512-NU0rJLJnshZWdE/097cdCBbyW1h4hEg0xpovcoAQYHl8dnEyp/NAOiE45pvc+Bd1Dt+2r94v2eGFpQJ4R7g+2w==} dependencies: undici-types: 5.26.5 dev: true @@ -3825,7 +3877,7 @@ packages: /@types/pbkdf2@3.1.2: resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/prettier@2.7.3: @@ -3868,7 +3920,7 @@ packages: /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/retry@0.12.0: @@ -3878,7 +3930,7 @@ packages: /@types/secp256k1@4.0.6: resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/semver@7.5.8: @@ -3889,7 +3941,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/serve-index@1.9.4: @@ -3902,7 +3954,7 @@ packages: resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/send': 0.17.4 dev: true @@ -3917,7 +3969,7 @@ packages: /@types/sockjs@0.3.36: resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/source-list-map@0.1.6: @@ -3945,13 +3997,13 @@ packages: resolution: {integrity: sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==} dependencies: '@types/expect': 1.20.4 - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/webpack-sources@3.2.3: resolution: {integrity: sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/source-list-map': 0.1.6 source-map: 0.7.4 dev: true @@ -3959,7 +4011,7 @@ packages: /@types/webpack@4.41.38: resolution: {integrity: sha512-oOW7E931XJU1mVfCnxCVgv8GLFL768pDO5u2Gzk82i8yTIgX6i7cntyZOkZYb/JtYM8252SN9bQp9tgkVDSsRw==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 '@types/tapable': 1.0.12 '@types/uglify-js': 3.17.5 '@types/webpack-sources': 3.2.3 @@ -3970,7 +4022,7 @@ packages: /@types/ws@8.5.10: resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 dev: true /@types/yargs-parser@21.0.3: @@ -3987,7 +4039,7 @@ packages: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: - '@types/node': 20.12.7 + '@types/node': 16.18.96 dev: true optional: true @@ -4140,38 +4192,38 @@ packages: - utf-8-validate dev: true - /@vitest/expect@1.5.3: - resolution: {integrity: sha512-y+waPz31pOFr3rD7vWTbwiLe5+MgsMm40jTZbQE8p8/qXyBX3CQsIXRx9XK12IbY7q/t5a5aM/ckt33b4PxK2g==} + /@vitest/expect@1.6.0: + resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} dependencies: - '@vitest/spy': 1.5.3 - '@vitest/utils': 1.5.3 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 chai: 4.4.1 dev: true - /@vitest/runner@1.5.3: - resolution: {integrity: sha512-7PlfuReN8692IKQIdCxwir1AOaP5THfNkp0Uc4BKr2na+9lALNit7ub9l3/R7MP8aV61+mHKRGiqEKRIwu6iiQ==} + /@vitest/runner@1.6.0: + resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} dependencies: - '@vitest/utils': 1.5.3 + '@vitest/utils': 1.6.0 p-limit: 5.0.0 pathe: 1.1.2 dev: true - /@vitest/snapshot@1.5.3: - resolution: {integrity: sha512-K3mvIsjyKYBhNIDujMD2gfQEzddLe51nNOAf45yKRt/QFJcUIeTQd2trRvv6M6oCBHNVnZwFWbQ4yj96ibiDsA==} + /@vitest/snapshot@1.6.0: + resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} dependencies: magic-string: 0.30.10 pathe: 1.1.2 pretty-format: 29.7.0 dev: true - /@vitest/spy@1.5.3: - resolution: {integrity: sha512-Llj7Jgs6lbnL55WoshJUUacdJfjU2honvGcAJBxhra5TPEzTJH8ZuhI3p/JwqqfnTr4PmP7nDmOXP53MS7GJlg==} + /@vitest/spy@1.6.0: + resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} dependencies: tinyspy: 2.2.1 dev: true - /@vitest/utils@1.5.3: - resolution: {integrity: sha512-rE9DTN1BRhzkzqNQO+kw8ZgfeEBCLXiHJwetk668shmNBpSagQxneT5eSqEBLP+cqSiAeecvQmbpFfdMyLcIQA==} + /@vitest/utils@1.6.0: + resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} dependencies: diff-sequences: 29.6.3 estree-walker: 3.0.3 @@ -4770,11 +4822,6 @@ packages: engines: {node: '>=8'} dev: true - /array-union@3.0.1: - resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} - engines: {node: '>=12'} - dev: true - /array-uniq@1.0.3: resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} engines: {node: '>=0.10.0'} @@ -4899,7 +4946,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001614 + caniuse-lite: 1.0.30001616 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -5329,10 +5376,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001614 - electron-to-chromium: 1.4.751 + caniuse-lite: 1.0.30001616 + electron-to-chromium: 1.4.756 node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.23.0) + update-browserslist-db: 1.0.15(browserslist@4.23.0) dev: true /bs58@4.0.1: @@ -5393,8 +5440,8 @@ packages: engines: {node: '>=6'} dev: true - /bundle-require@4.0.3(esbuild@0.19.12): - resolution: {integrity: sha512-2iscZ3fcthP2vka4Y7j277YJevwmsby/FpFDwjgw34Nl7dtCpt7zz/4TexmHMzY6KZEih7En9ImlbbgUNNQGtA==} + /bundle-require@4.1.0(esbuild@0.19.12): + resolution: {integrity: sha512-FeArRFM+ziGkRViKRnSTbHZc35dgmR9yNog05Kn0+ItI59pOAISGvnnIwW1WgFZQW59IxD9QpJnUPkdIPfZuXg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: esbuild: '>=0.17' @@ -5499,6 +5546,11 @@ packages: engines: {node: '>=6'} dev: true + /callsites@4.1.0: + resolution: {integrity: sha512-aBMbD1Xxay75ViYezwT40aQONfr+pSXTHwNKvIXhXD6+LY3F1dLIcceoC5OZKBVHbXcysz1hL9D2w0JJIMXpUw==} + engines: {node: '>=12.20'} + dev: true + /camel-case@4.1.2: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: @@ -5525,13 +5577,13 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.23.0 - caniuse-lite: 1.0.30001614 + caniuse-lite: 1.0.30001616 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true - /caniuse-lite@1.0.30001614: - resolution: {integrity: sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==} + /caniuse-lite@1.0.30001616: + resolution: {integrity: sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==} dev: true /caseless@0.12.0: @@ -5600,6 +5652,11 @@ packages: resolution: {integrity: sha512-kqTg3WWywappJPqtgrdvbA380VoXO2eu9VCV895JgbyHsaErXdyHK9LOZ911OvAk6L0obK7kDk9CGs8+oBawVA==} dev: true + /change-file-extension@0.1.1: + resolution: {integrity: sha512-lB0j9teu8JtDPDHRfU8pNH33w4wMu5bOaKoT4PxH+AKugBrIfpiJMTTKIm0TErNeJPkeQEgvH31YpccTwOKPRg==} + engines: {node: '>=18'} + dev: true + /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -6031,6 +6088,11 @@ packages: engines: {node: '>= 0.6'} dev: true + /convert-hrtime@5.0.0: + resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} + engines: {node: '>=12'} + dev: true + /convert-source-map@1.9.0: resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true @@ -6914,6 +6976,13 @@ packages: tslib: 2.6.2 dev: true + /dot-prop@8.0.2: + resolution: {integrity: sha512-xaBe6ZT4DHPkg0k4Ytbvn5xoxgpG0jOS1dYxSOwAHPuNLjP3/OzN0gH55SrLqpx8cBfSaVt91lXYkApjb+nYdQ==} + engines: {node: '>=16'} + dependencies: + type-fest: 3.13.1 + dev: true + /dotenv-parse-variables@2.0.0: resolution: {integrity: sha512-/Tezlx6xpDqR6zKg1V4vLCeQtHWiELhWoBz5A/E0+A1lXN9iIkNbbfc4THSymS0LQUo8F1PMiIwVG8ai/HrnSA==} engines: {node: '>= 8.3.0'} @@ -7034,8 +7103,8 @@ packages: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /electron-to-chromium@1.4.751: - resolution: {integrity: sha512-2DEPi++qa89SMGRhufWTiLmzqyuGmNF3SK4+PQetW1JKiZdEpF4XQonJXJCzyuYSA6mauiMhbyVhqYAP45Hvfw==} + /electron-to-chromium@1.4.756: + resolution: {integrity: sha512-RJKZ9+vEBMeiPAvKNWyZjuYyUqMndcP1f335oHqn3BEQbs2NFtVrnK5+6Xg5wSM9TknNNpWghGDUCKGYF+xWXw==} dev: true /elliptic@6.5.4: @@ -7119,6 +7188,11 @@ packages: engines: {node: '>=6'} dev: true + /environment@1.0.0: + resolution: {integrity: sha512-u6cXAuofxkVkkXHsBFBsYhRYjwGe5K16gv5j55kB872jJnw0dPm7WzMZ4pTeEIaXD2+G8PsQukvJ2rzqEluT/A==} + engines: {node: '>=18'} + dev: true + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -7379,13 +7453,13 @@ packages: source-map: 0.2.0 dev: true - /eslint-compat-utils@0.5.0(eslint@8.57.0): + /eslint-compat-utils@0.5.0(eslint@9.2.0): resolution: {integrity: sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==} engines: {node: '>=12'} peerDependencies: eslint: '>=6.0.0' dependencies: - eslint: 8.57.0 + eslint: 9.2.0 semver: 7.6.0 dev: true @@ -7412,7 +7486,7 @@ packages: vscode-json-languageservice: 4.2.1 dev: true - /eslint-plugin-svelte@2.38.0(eslint@8.57.0)(svelte@4.2.15)(ts-node@10.9.2): + /eslint-plugin-svelte@2.38.0(eslint@9.2.0)(svelte@4.2.15)(ts-node@10.9.2): resolution: {integrity: sha512-IwwxhHzitx3dr0/xo0z4jjDlb2AAHBPKt+juMyKKGTLlKi1rZfA4qixMwnveU20/JTHyipM6keX4Vr7LZFYc9g==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -7422,11 +7496,11 @@ packages: svelte: optional: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.2.0) '@jridgewell/sourcemap-codec': 1.4.15 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 - eslint-compat-utils: 0.5.0(eslint@8.57.0) + eslint: 9.2.0 + eslint-compat-utils: 0.5.0(eslint@9.2.0) esutils: 2.0.3 known-css-properties: 0.30.0 postcss: 8.4.38 @@ -7457,11 +7531,24 @@ packages: estraverse: 5.3.0 dev: true + /eslint-scope@8.0.1: + resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dev: true + /eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7509,6 +7596,49 @@ packages: - supports-color dev: true + /eslint@9.2.0: + resolution: {integrity: sha512-0n/I88vZpCOzO+PQpt0lbsqmn9AsnsJAQseIqhZFI8ibQT0U1AkEKRxA3EVMos0BoHSXDQvCXY25TUjB5tr8Og==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.2.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 3.0.2 + '@eslint/js': 9.2.0 + '@humanwhocodes/config-array': 0.13.0 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.2.4 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint-scope: 8.0.1 + eslint-visitor-keys: 4.0.0 + espree: 10.0.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /esm-env@1.0.0: resolution: {integrity: sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==} dev: true @@ -7523,6 +7653,15 @@ packages: type: 2.7.2 dev: true + /espree@10.0.1: + resolution: {integrity: sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 4.0.0 + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -7697,8 +7836,8 @@ packages: - bufferutil - utf-8-validate - /ethers@6.12.0: - resolution: {integrity: sha512-zL5NlOTjML239gIvtVJuaSk0N9GQLi1Hom3ZWUszE5lDTQE/IVB62mrPkQ2W1bGcZwVGSLaetQbWNQSvI4rGDQ==} + /ethers@6.12.1: + resolution: {integrity: sha512-j6wcVoZf06nqEcBbDWkKg8Fp895SS96dSnTCjiXT+8vt2o02raTn4Lo9ERUuIVU5bAjoPYeA+7ytQFexFmLuVw==} engines: {node: '>=14.0.0'} dependencies: '@adraffy/ens-normalize': 1.10.1 @@ -8061,6 +8200,11 @@ packages: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true + /fast-equals@5.0.1: + resolution: {integrity: sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==} + engines: {node: '>=6.0.0'} + dev: true + /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} @@ -8126,6 +8270,13 @@ packages: flat-cache: 3.2.0 dev: true + /file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + dependencies: + flat-cache: 4.0.1 + dev: true + /file-type@10.11.0: resolution: {integrity: sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==} engines: {node: '>=6'} @@ -8138,13 +8289,13 @@ packages: engines: {node: '>=6'} dev: true - /file-type@16.5.4: - resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} - engines: {node: '>=10'} + /file-type@19.0.0: + resolution: {integrity: sha512-s7cxa7/leUWLiXO78DVVfBVse+milos9FitauDLG1pI7lNaJ2+5lzPnr2N24ym+84HVwJL6hVuGfgVE+ALvU8Q==} + engines: {node: '>=18'} dependencies: readable-web-to-node-stream: 3.0.2 - strtok3: 6.3.0 - token-types: 4.2.1 + strtok3: 7.0.0 + token-types: 5.0.1 dev: true /file-type@3.9.0: @@ -8384,6 +8535,14 @@ packages: rimraf: 3.0.2 dev: true + /flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + dev: true + /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true @@ -8572,8 +8731,8 @@ packages: through2: 2.0.5 dev: true - /fs-monkey@1.0.5: - resolution: {integrity: sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==} + /fs-monkey@1.0.6: + resolution: {integrity: sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==} dev: true /fs.realpath@1.0.0: @@ -8612,6 +8771,11 @@ packages: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true + /function-timeout@1.0.1: + resolution: {integrity: sha512-6yPMImFFuaMPNaTMTBuolA8EanHJWF5Vju0NHpObRURT105J6x1Mf2a7J4P7Sqk2xDxv24N5L0RatEhTBhNmdA==} + engines: {node: '>=18'} + dev: true + /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} @@ -8846,7 +9010,7 @@ packages: foreground-child: 3.1.1 jackspeak: 2.3.6 minimatch: 9.0.4 - minipass: 7.0.4 + minipass: 7.1.0 path-scurry: 1.10.2 dev: true @@ -8959,6 +9123,11 @@ packages: type-fest: 0.20.2 dev: true + /globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + dev: true + /globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -8997,11 +9166,10 @@ packages: slash: 3.0.0 dev: true - /globby@12.2.0: - resolution: {integrity: sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==} + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - array-union: 3.0.1 dir-glob: 3.0.1 fast-glob: 3.3.2 ignore: 5.3.1 @@ -9009,15 +9177,16 @@ packages: slash: 4.0.0 dev: true - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /globby@14.0.1: + resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} + engines: {node: '>=18'} dependencies: - dir-glob: 3.0.1 + '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.2 ignore: 5.3.1 - merge2: 1.4.1 - slash: 4.0.0 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 dev: true /globby@6.1.0: @@ -9161,8 +9330,8 @@ packages: through2: 3.0.2 dev: true - /gulp-imagemin@9.0.0(gulp@4.0.2): - resolution: {integrity: sha512-ZJDch86GnKBCA0lFj0mgcAOBrGMt0kA9dwrOjIsoi/RUSOiPK3NNURgY0wS2tppaIYrbL6myiqeAjeqxLE14RQ==} + /gulp-imagemin@9.1.0(gulp@4.0.2): + resolution: {integrity: sha512-PmzTWoNrVMYVN4ObRdHyt6oer4mqxV53IbCDi3Q8EHeDZW0OzAuh6RlOtpd/R7PFmbDUk64q5P+L04fD9I5cVA==} engines: {node: '>=18'} peerDependencies: gulp: '>=4' @@ -9172,8 +9341,8 @@ packages: dependencies: chalk: 5.3.0 gulp: 4.0.2 - gulp-plugin-extras: 0.2.2 - imagemin: 8.0.1 + gulp-plugin-extras: 1.0.0 + imagemin: 9.0.0 plur: 5.1.0 pretty-bytes: 6.1.1 optionalDependencies: @@ -9204,8 +9373,8 @@ packages: through2: 2.0.5 dev: true - /gulp-plugin-extras@0.2.2: - resolution: {integrity: sha512-0gssXzTNrrOocYBWN4qOZqd03cz3bxhjxVUPZV9iJdBR0ZZbwMQO/OT8hZChYoc9GjKaA5meaqDr6CjkmKA7BA==} + /gulp-plugin-extras@1.0.0: + resolution: {integrity: sha512-YXizWkBgb2030JBuHZ9DQFTkphnKgzwknL+ozSoCKdv8Zt1S8EpVAPo+MwGxqSsd/DtFFM+kThZe6UJvM5DFsw==} engines: {node: '>=18'} dependencies: '@types/vinyl': 2.0.12 @@ -9232,10 +9401,11 @@ packages: fancy-log: 2.0.0 plugin-error: 2.0.1 postcss: 8.4.38 - postcss-load-config: 5.0.3(postcss@8.4.38) + postcss-load-config: 5.1.0(postcss@8.4.38) vinyl-sourcemaps-apply: 0.2.1 transitivePeerDependencies: - jiti + - tsx dev: true /gulp-rename@2.0.0: @@ -9377,7 +9547,7 @@ packages: solc: 0.7.3(debug@4.3.4) source-map-support: 0.5.21 stacktrace-parser: 0.1.10 - ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.12.8)(typescript@5.4.5) tsort: 0.0.1 typescript: 5.4.5 undici: 5.28.4 @@ -9786,6 +9956,13 @@ packages: postcss: 8.4.38 dev: true + /identifier-regex@1.0.0: + resolution: {integrity: sha512-Rcy5cjBOM9iTR+Vwy0Llyip9u0cA99T1yiWOhDW/+PDaTQhyski0tMovsipQ/FRNDkudjLWusJ/IMVIlG5WZnQ==} + engines: {node: '>=18'} + dependencies: + reserved-identifiers: 1.0.0 + dev: true + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true @@ -9838,17 +10015,19 @@ packages: dev: true optional: true - /imagemin@8.0.1: - resolution: {integrity: sha512-Q/QaPi+5HuwbZNtQRqUVk6hKacI6z9iWiCSQBisAv7uBynZwO7t1svkryKl7+iSQbkU/6t9DWnHz04cFs2WY7w==} - engines: {node: '>=12'} + /imagemin@9.0.0: + resolution: {integrity: sha512-oFlmioXTIrDCNYiKUVPjzUzm8M/7X74WEO6v8NFjn3ZtxjArdVJiRRdbPpq/OG4BdwaHMUz8ej9Fp4AcaDzMnA==} + engines: {node: '>=18'} dependencies: - file-type: 16.5.4 - globby: 12.2.0 - graceful-fs: 4.2.11 - junk: 3.1.0 + change-file-extension: 0.1.1 + environment: 1.0.0 + file-type: 19.0.0 + globby: 14.0.1 + junk: 4.0.1 + ow: 2.0.0 p-pipe: 4.0.0 - replace-ext: 2.0.0 - slash: 3.0.0 + slash: 5.1.0 + uint8array-extras: 1.1.0 dev: true /immutable@4.3.5: @@ -10166,6 +10345,14 @@ packages: engines: {node: '>=6.5.0', npm: '>=3'} dev: true + /is-identifier@1.0.0: + resolution: {integrity: sha512-DKRLe7IyxafGKlI6VdPnarF/nZNfvlNJmYAzRVsN2TBJk93qnw6XXvslQ8Nv7MngoMByoyI6tMzSI3M1y/pBKw==} + engines: {node: '>=18'} + dependencies: + identifier-regex: 1.0.0 + super-regex: 1.0.0 + dev: true + /is-installed-globally@0.4.0: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} @@ -10574,13 +10761,13 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /joi@17.13.0: - resolution: {integrity: sha512-9qcrTyoBmFZRNHeVP4edKqIUEgFzq7MHvTNSDuHSqkpOPtiBkgNgcmTSqmiw1kw9tdKaiddvIDv/eCJDxmqWCA==} + /joi@17.13.1: + resolution: {integrity: sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==} dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 @@ -10718,9 +10905,9 @@ packages: verror: 1.10.0 dev: true - /junk@3.1.0: - resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} - engines: {node: '>=8'} + /junk@4.0.1: + resolution: {integrity: sha512-Qush0uP+G8ZScpGMZvHUiRfI0YBWuB3gVBYlI0v0vvOJt5FLicco+IkP0a50LqTTQhmts/m6tP5SWE+USyIvcQ==} + engines: {node: '>=12.20'} dev: true /just-debounce@1.1.0: @@ -10733,7 +10920,7 @@ packages: requiresBuild: true dependencies: node-addon-api: 2.0.2 - node-gyp-build: 4.8.0 + node-gyp-build: 4.8.1 readable-stream: 3.6.2 dev: true @@ -10955,7 +11142,7 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} dependencies: - mlly: 1.6.1 + mlly: 1.7.0 pkg-types: 1.1.0 dev: true @@ -11252,7 +11439,7 @@ packages: resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} engines: {node: '>= 4.0.0'} dependencies: - fs-monkey: 1.0.5 + fs-monkey: 1.0.6 dev: true /memoizee@0.4.15: @@ -11414,8 +11601,8 @@ packages: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} + /minipass@7.1.0: + resolution: {integrity: sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==} engines: {node: '>=16 || 14 >=14.17'} dev: true @@ -11440,8 +11627,8 @@ packages: hasBin: true dev: true - /mlly@1.6.1: - resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} + /mlly@1.7.0: + resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==} dependencies: acorn: 8.11.3 pathe: 1.1.2 @@ -11627,8 +11814,8 @@ packages: engines: {node: '>= 6.13.0'} dev: true - /node-gyp-build@4.8.0: - resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} + /node-gyp-build@4.8.1: + resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==} hasBin: true dev: true @@ -12004,6 +12191,18 @@ packages: resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} dev: true + /ow@2.0.0: + resolution: {integrity: sha512-ESUigmGrdhUZ2nQSFNkeKSl6ZRPupXzprMs3yF9DYlNVpJ8XAjM/fI9RUZxA7PI1K9HQDCCvBo1jr/GEIo9joQ==} + engines: {node: '>=18'} + dependencies: + '@sindresorhus/is': 6.3.0 + callsites: 4.1.0 + dot-prop: 8.0.2 + environment: 1.0.0 + fast-equals: 5.0.1 + is-identifier: 1.0.0 + dev: true + /p-cancelable@0.3.0: resolution: {integrity: sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==} engines: {node: '>=4'} @@ -12362,7 +12561,7 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: lru-cache: 10.2.2 - minipass: 7.0.4 + minipass: 7.1.0 dev: true /path-to-regexp@0.1.7: @@ -12383,6 +12582,11 @@ packages: engines: {node: '>=8'} dev: true + /path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + dev: true + /pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} dev: true @@ -12402,9 +12606,9 @@ packages: sha.js: 2.4.11 dev: true - /peek-readable@4.1.0: - resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} - engines: {node: '>=8'} + /peek-readable@5.0.0: + resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} + engines: {node: '>=14.16'} dev: true /pend@1.2.0: @@ -12491,7 +12695,7 @@ packages: resolution: {integrity: sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==} dependencies: confbox: 0.1.7 - mlly: 1.6.1 + mlly: 1.7.0 pathe: 1.1.2 dev: true @@ -12716,7 +12920,7 @@ packages: dependencies: lilconfig: 2.1.0 postcss: 8.4.38 - ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.12.8)(typescript@5.4.5) yaml: 1.10.2 dev: true @@ -12733,21 +12937,24 @@ packages: optional: true dependencies: lilconfig: 3.1.1 - ts-node: 10.9.2(@types/node@20.12.7)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.12.8)(typescript@5.4.5) yaml: 2.4.2 dev: true - /postcss-load-config@5.0.3(postcss@8.4.38): - resolution: {integrity: sha512-90pBBI5apUVruIEdCxZic93Wm+i9fTrp7TXbgdUCH+/L+2WnfpITSpq5dFU/IPvbv7aNiMlQISpUkAm3fEcvgQ==} + /postcss-load-config@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-G5AJ+IX0aD0dygOE0yFZQ/huFFMSNneyfp0e3/bT05a8OfPC5FUoZRPfGijUdGOJNMewJiwzcHJXFafFzeKFVA==} engines: {node: '>= 18'} peerDependencies: jiti: '>=1.21.0' postcss: '>=8.0.9' + tsx: ^4.8.1 peerDependenciesMeta: jiti: optional: true postcss: optional: true + tsx: + optional: true dependencies: lilconfig: 3.1.1 postcss: 8.4.38 @@ -13821,6 +14028,11 @@ packages: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true + /reserved-identifiers@1.0.0: + resolution: {integrity: sha512-h0bP2Katmvf3hv4Z3WtDl4+6xt/OglQ2Xa6TnhZ/Rm9/7IH1crXQqMwD4J2ngKBonVv+fB55zfGgNDAmsevLVQ==} + engines: {node: '>=18'} + dev: true + /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: true @@ -14085,8 +14297,8 @@ packages: rimraf: 2.7.1 dev: true - /sass@1.75.0: - resolution: {integrity: sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==} + /sass@1.76.0: + resolution: {integrity: sha512-nc3LeqvF2FNW5xGF1zxZifdW3ffIz5aBb7I7tSvOoNu7z1RQ6pFt9MBuiPtjgaI62YWrM/txjWlOCFiGtf2xpw==} engines: {node: '>=14.0.0'} hasBin: true dependencies: @@ -14150,7 +14362,7 @@ packages: dependencies: elliptic: 6.5.5 node-addon-api: 2.0.2 - node-gyp-build: 4.8.0 + node-gyp-build: 4.8.1 dev: true /seek-bzip@1.0.6: @@ -14424,6 +14636,11 @@ packages: engines: {node: '>=12'} dev: true + /slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + dev: true + /slice-ansi@3.0.0: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} @@ -15016,12 +15233,12 @@ packages: dev: true optional: true - /strtok3@6.3.0: - resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} - engines: {node: '>=10'} + /strtok3@7.0.0: + resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} + engines: {node: '>=14.16'} dependencies: '@tokenizer/token': 0.3.0 - peek-readable: 4.1.0 + peek-readable: 5.0.0 dev: true /style-inject@0.3.0: @@ -15064,6 +15281,14 @@ packages: ts-interface-checker: 0.1.13 dev: true + /super-regex@1.0.0: + resolution: {integrity: sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==} + engines: {node: '>=18'} + dependencies: + function-timeout: 1.0.1 + time-span: 5.1.0 + dev: true + /supports-color@2.0.0: resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} engines: {node: '>=0.8.0'} @@ -15102,8 +15327,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /svelte-check@3.7.0(@babel/core@7.24.5)(svelte@4.2.15): - resolution: {integrity: sha512-Va6sGL4Vy4znn0K+vaatk98zoBvG2aDee4y3r5X4S80z8DXfbACHvdLlyXa4C4c5tQzK9H0Uq2pbd20wH3ucjQ==} + /svelte-check@3.7.1(@babel/core@7.24.5)(svelte@4.2.15): + resolution: {integrity: sha512-U4uJoLCzmz2o2U33c7mPDJNhRYX/DNFV11XTUDlFxaKLsO7P+40gvJHMPpoRfa24jqZfST4/G9fGNcUGMO8NAQ==} hasBin: true peerDependencies: svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 @@ -15129,8 +15354,8 @@ packages: - sugarss dev: true - /svelte-check@3.7.0(postcss@8.4.38)(svelte@4.2.15): - resolution: {integrity: sha512-Va6sGL4Vy4znn0K+vaatk98zoBvG2aDee4y3r5X4S80z8DXfbACHvdLlyXa4C4c5tQzK9H0Uq2pbd20wH3ucjQ==} + /svelte-check@3.7.1(postcss@8.4.38)(svelte@4.2.15): + resolution: {integrity: sha512-U4uJoLCzmz2o2U33c7mPDJNhRYX/DNFV11XTUDlFxaKLsO7P+40gvJHMPpoRfa24jqZfST4/G9fGNcUGMO8NAQ==} hasBin: true peerDependencies: svelte: ^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0 @@ -15508,6 +15733,13 @@ packages: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} dev: true + /time-span@5.1.0: + resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} + engines: {node: '>=12'} + dependencies: + convert-hrtime: 5.0.0 + dev: true + /time-stamp@1.1.0: resolution: {integrity: sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==} engines: {node: '>=0.10.0'} @@ -15624,9 +15856,9 @@ packages: engines: {node: '>=0.6'} dev: true - /token-types@4.2.1: - resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} - engines: {node: '>=10'} + /token-types@5.0.1: + resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} + engines: {node: '>=14.16'} dependencies: '@tokenizer/token': 0.3.0 ieee754: 1.2.1 @@ -15700,7 +15932,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-node@10.9.2(@types/node@20.12.7)(typescript@5.4.5): + /ts-node@10.9.2(@types/node@20.12.8)(typescript@5.4.5): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -15719,7 +15951,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.12.7 + '@types/node': 20.12.8 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -15766,7 +15998,7 @@ packages: typescript: optional: true dependencies: - bundle-require: 4.0.3(esbuild@0.19.12) + bundle-require: 4.1.0(esbuild@0.19.12) cac: 6.7.14 chokidar: 3.6.0 debug: 4.3.4(supports-color@8.1.1) @@ -15903,6 +16135,11 @@ packages: engines: {node: '>=8'} dev: true + /type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + dev: true + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -16015,6 +16252,11 @@ packages: hasBin: true dev: true + /uint8array-extras@1.1.0: + resolution: {integrity: sha512-CVaBSyOmGoFHu+zOVPbetXEXykOd8KHVBHLlqvmaMWpwcq3rewj18xVNbU5uzf48hclnNQhfNaNany2cMHFK/g==} + engines: {node: '>=18'} + dev: true + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: @@ -16095,6 +16337,11 @@ packages: engines: {node: '>=4'} dev: true + /unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + dev: true + /union-value@1.0.1: resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} engines: {node: '>=0.10.0'} @@ -16150,8 +16397,8 @@ packages: engines: {node: '>=4'} dev: true - /update-browserslist-db@1.0.13(browserslist@4.23.0): - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + /update-browserslist-db@1.0.15(browserslist@4.23.0): + resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -16309,8 +16556,8 @@ packages: - zod dev: true - /viem@2.9.29(typescript@5.4.5): - resolution: {integrity: sha512-LWvDSyB2tftKuSMAyZTXk3pDYj3c0aaOdr2JbDZEsPJw5zVbqg3FpoPHnUkHai8KcZI8aPWRKV31TYV1cBse9A==} + /viem@2.9.32(typescript@5.4.5): + resolution: {integrity: sha512-V2K1kkR+L/JZ1be/3NTsqLhN7BsMXXTTFOH3/LyEALbL8gln7QCHvmI942VbY9l5eYYH1EQ90vwKh24TqDd9gw==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: @@ -16385,8 +16632,8 @@ packages: replace-ext: 1.0.1 dev: true - /vite-node@1.5.3(@types/node@20.12.7): - resolution: {integrity: sha512-axFo00qiCpU/JLd8N1gu9iEYL3xTbMbMrbe5nDp9GL0nb6gurIdZLkkFogZXWnE8Oyy5kfSLwNVIcVsnhE7lgQ==} + /vite-node@1.6.0(@types/node@20.12.8): + resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true dependencies: @@ -16394,7 +16641,7 @@ packages: debug: 4.3.4(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.2.10(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.8) transitivePeerDependencies: - '@types/node' - less @@ -16406,8 +16653,8 @@ packages: - terser dev: true - /vite@5.2.10(@types/node@20.12.7): - resolution: {integrity: sha512-PAzgUZbP7msvQvqdSD+ErD5qGnSFiGOoWmV5yAKUEI0kdhjbH6nMWVyZQC/hSc4aXwc0oJ9aEdIiF9Oje0JFCw==} + /vite@5.2.11(@types/node@20.12.8): + resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -16434,7 +16681,7 @@ packages: terser: optional: true dependencies: - '@types/node': 20.12.7 + '@types/node': 20.12.8 esbuild: 0.20.2 postcss: 8.4.38 rollup: 4.17.2 @@ -16442,7 +16689,7 @@ packages: fsevents: 2.3.3 dev: true - /vitefu@0.2.5(vite@5.2.10): + /vitefu@0.2.5(vite@5.2.11): resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 @@ -16450,18 +16697,18 @@ packages: vite: optional: true dependencies: - vite: 5.2.10(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.8) dev: true - /vitest@1.5.3(@types/node@20.12.7): - resolution: {integrity: sha512-2oM7nLXylw3mQlW6GXnRriw+7YvZFk/YNV8AxIC3Z3MfFbuziLGWP9GPxxu/7nRlXhqyxBikpamr+lEEj1sUEw==} + /vitest@1.6.0(@types/node@20.12.8): + resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' '@types/node': ^18.0.0 || >=20.0.0 - '@vitest/browser': 1.5.3 - '@vitest/ui': 1.5.3 + '@vitest/browser': 1.6.0 + '@vitest/ui': 1.6.0 happy-dom: '*' jsdom: '*' peerDependenciesMeta: @@ -16478,12 +16725,12 @@ packages: jsdom: optional: true dependencies: - '@types/node': 20.12.7 - '@vitest/expect': 1.5.3 - '@vitest/runner': 1.5.3 - '@vitest/snapshot': 1.5.3 - '@vitest/spy': 1.5.3 - '@vitest/utils': 1.5.3 + '@types/node': 20.12.8 + '@vitest/expect': 1.6.0 + '@vitest/runner': 1.6.0 + '@vitest/snapshot': 1.6.0 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 acorn-walk: 8.3.2 chai: 4.4.1 debug: 4.3.4(supports-color@8.1.1) @@ -16496,8 +16743,8 @@ packages: strip-literal: 2.1.0 tinybench: 2.8.0 tinypool: 0.8.4 - vite: 5.2.10(@types/node@20.12.7) - vite-node: 1.5.3(@types/node@20.12.7) + vite: 5.2.11(@types/node@20.12.8) + vite-node: 1.6.0(@types/node@20.12.8) why-is-node-running: 2.2.2 transitivePeerDependencies: - less @@ -16541,7 +16788,7 @@ packages: hasBin: true dependencies: axios: 1.6.8(debug@4.3.4) - joi: 17.13.0 + joi: 17.13.1 lodash: 4.17.21 minimist: 1.2.8 rxjs: 7.8.1 diff --git a/providers/package.json b/providers/package.json index 674db53a5..67d54d76c 100644 --- a/providers/package.json +++ b/providers/package.json @@ -12,7 +12,7 @@ "author": "", "license": "MIT", "devDependencies": { - "viem": "^2.9.26" + "viem": "^2.9.32" }, "dependencies": { "@kredeum/config": "workspace:^" diff --git a/providers/turbo.json b/providers/turbo.json index 9d927af19..6f742fdd6 100644 --- a/providers/turbo.json +++ b/providers/turbo.json @@ -3,7 +3,7 @@ "pipeline": { "check": { "dependsOn": ["format"], - "inputs": ["src/**"] + "inputs": ["src/**/*.ts"] } } } diff --git a/skale/package.json b/skale/package.json index 628bd4506..80225e9df 100644 --- a/skale/package.json +++ b/skale/package.json @@ -20,6 +20,6 @@ "typescript": "^5.4.5" }, "dependencies": { - "viem": "^2.9.26" + "viem": "^2.9.32" } } \ No newline at end of file diff --git a/skale/src/skaleReceiveFunds.ts b/skale/src/skaleReceiveFunds.ts index 3d92629af..15f106aad 100644 --- a/skale/src/skaleReceiveFunds.ts +++ b/skale/src/skaleReceiveFunds.ts @@ -61,7 +61,7 @@ const _rmBytesSymbol = (address: string) => address.replace(/^0x/, ""); //////////////////////////////////////////////// const receiveFunds = async (account: string, chainId: number): Promise => { if (!isSkaleChain(chainId)) { - console.info("@kredeum/Skale receiveFunds : ", "Not on a Skale chain, no sFuel to claim"); + // console.log("@kredeum/Skale receiveFunds : ", "Not on a Skale chain, no sFuel to claim"); return; } if (!account) throw new Error("@kredeum/Skale receiveFunds : No account provided"); @@ -100,12 +100,12 @@ const receiveFunds = async (account: string, chainId: number): Promise ${scaleFaucets[chainId].explorer}/tx/${hash}`); + console.info("@kredeum/Skale receiveFunds - TxHash: ", `${hash} => ${scaleFaucets[chainId].explorer}/tx/${hash}`); const transactionReceipt = await publicClient.waitForTransactionReceipt({ hash: hash }); - console.info("@kredeum/Skale receiveFunds - TransactionReceipt:", transactionReceipt); + console.info("@kredeum/Skale receiveFunds - TxReceipt:", transactionReceipt); return transactionReceipt; }; diff --git a/skale/turbo.json b/skale/turbo.json index 9d927af19..6f742fdd6 100644 --- a/skale/turbo.json +++ b/skale/turbo.json @@ -3,7 +3,7 @@ "pipeline": { "check": { "dependsOn": ["format"], - "inputs": ["src/**"] + "inputs": ["src/**/*.ts"] } } } diff --git a/svelte/package.json b/svelte/package.json index 9f175d02e..314036672 100644 --- a/svelte/package.json +++ b/svelte/package.json @@ -36,12 +36,12 @@ "findup-sync": "^5.0.0", "postcss": "^8.4.38", "prettier-plugin-svelte": "^3.2.3", - "rollup": "^4.16.4", + "rollup": "^4.17.2", "rollup-plugin-postcss": "^4.0.2", "rollup-plugin-svelte": "^7.2.0", "semver": "^7.6.0", "svelte": "^4.2.15", - "svelte-check": "^3.7.0", + "svelte-check": "^3.7.1", "svelte-preprocess": "^5.1.4", "tslib": "^2.6.2", "typescript": "^5.4.5" diff --git a/svelte/src/components/Account/Account.svelte b/svelte/src/components/Account/Account.svelte index c42037b70..0b81f4fa0 100644 --- a/svelte/src/components/Account/Account.svelte +++ b/svelte/src/components/Account/Account.svelte @@ -1,5 +1,5 @@ - -{#await ens.getName(account)} - {account} -{:then accountName} - {accountName} -{/await} diff --git a/svelte/src/components/Collection/CollectionSelect.svelte b/svelte/src/components/Collection/CollectionSelect.svelte index 8237208ff..75e8774d2 100644 --- a/svelte/src/components/Collection/CollectionSelect.svelte +++ b/svelte/src/components/Collection/CollectionSelect.svelte @@ -5,7 +5,7 @@ import { getContext } from "svelte"; import type { Writable } from "svelte/store"; - import { explorerCollectionUrl, isAddressNotZero } from "@kredeum/common/src/common/config"; + import { ADDRESS_ZERO, explorerCollectionUrl, isAddressNotZero } from "@kredeum/common/src/common/config"; import Collection from "./Collection.svelte"; import { clickOutside } from "../../helpers/clickOutside"; @@ -25,7 +25,7 @@ ///////////////////////////////////////////////// export let chainId: number; export let address: string | undefined = undefined; - export let account: string | undefined = undefined; + export let account: string | undefined = ADDRESS_ZERO; export let mintable: boolean = false; export let txt: boolean = false; export let label: boolean = true; @@ -39,7 +39,7 @@ // let i: number = 0; // HANDLE CHANGE : on truthy chainId and account, and whatever mintable - $: $refreshAll, mintable, chainId && account && handleChangeCollection(); + $: $refreshAll, mintable, chainId && handleChangeCollection(); const handleChangeCollection = async (): Promise => { // console.log(`COLLECTION LIST CHANGE #${i++} ${keyCollection(chainId, account || ADDRESS_ZERO)}`); @@ -64,15 +64,16 @@ // const logDefault = () => console.log(`handleChange ${i} ${mintable} ~ collectionDefault`, $collectionDefault); // Current Collection is already defined, or is defined in url, or is default collection - $: $collectionDefault && account && handleChangeAddress(); + $: $collectionDefault && handleChangeAddress(); const handleChangeAddress = (): void => { - console.log("handleChangeAddress ~ $collectionDefault:", $collectionDefault); + // console.log("handleChangeAddress ~ $collectionDefault:", $collectionDefault); if (isAddressNotZero(address)) return; address = $collectionDefault; }; // STATE CHANGER : SET default Collection const _setCollection = (collection: string, mintable_ = mintable): void => { + // console.log(" + ///////////////////////////////////////////////// + // + // Select All button + ///////////////////////////////////////////////// + export let all: boolean; + ///////////////////////////////////////////////// + + + diff --git a/svelte/src/components/Global/ButtonOwner.svelte b/svelte/src/components/Global/ButtonOwner.svelte deleted file mode 100644 index 6e96cc74d..000000000 --- a/svelte/src/components/Global/ButtonOwner.svelte +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/svelte/src/components/Global/Create.svelte b/svelte/src/components/Global/Create.svelte index 73ae759ca..a4bc432b6 100644 --- a/svelte/src/components/Global/Create.svelte +++ b/svelte/src/components/Global/Create.svelte @@ -9,13 +9,13 @@ // // Create Collection or Nft ///////////////////////////////////////////////// - export let chainId: number | undefined = undefined; - export let signer: string | undefined = undefined; + export let chainId: number; + export let signer: string; let open = false; const toggle = () => (open = !open); - $: mint = signer && networks.getCreate(chainId); + $: mint = networks.getCreate(chainId); Add @@ -61,18 +61,16 @@ -{#if chainId && signer} - - {#if open} - - {/if} - - - + +{#if open} + {/if} + + + diff --git a/sveltekit/src/lib/components/StatsNetwork.svelte b/sveltekit/src/lib/components/StatsNetwork.svelte new file mode 100644 index 000000000..311be53b0 --- /dev/null +++ b/sveltekit/src/lib/components/StatsNetwork.svelte @@ -0,0 +1,91 @@ + + + + + + + + +

Kredeum NFTs Factory - Statistics {networks.getChainLabel(chainId).toUpperCase()}

+
+ + + + + + + + + + + + {#await resolverGetCollectionsAddresses(chainId)} + ... + {:then addresses} + {#each addresses as address} + + + + + {/each} + {:catch} + --- + {/await} + +

{networks.getChainName(chainId)} #{chainId}

Collections AddressesView
+ {address} + + + + +
+
+
+ + diff --git a/sveltekit/src/lib/components/StatsNetworkLine.svelte b/sveltekit/src/lib/components/StatsNetworkLine.svelte new file mode 100644 index 000000000..e1df9dda7 --- /dev/null +++ b/sveltekit/src/lib/components/StatsNetworkLine.svelte @@ -0,0 +1,109 @@ + + +{#if chainId} + + {chainId} + {networks.getChainName(chainId)} + + {#await countCollections(chainId)} + ... + {:then value} + {value} + {:catch} + --- + {/await} + + + + + {getShortAddress(factoryGetAddress(chainId))} + + + + + {getShortAddress(resolverGetAddress(chainId))} + + + + + {getShortAddress(getAddressOpenNFTsTemplate(chainId))} + + + + + {getShortAddress(getAddressOpenAutoMarket(chainId))} + + + +{/if} + + diff --git a/sveltekit/src/lib/components/StatsNetworkNew.svelte b/sveltekit/src/lib/components/StatsNetworkNew.svelte new file mode 100644 index 000000000..b69cc9db4 --- /dev/null +++ b/sveltekit/src/lib/components/StatsNetworkNew.svelte @@ -0,0 +1,96 @@ + + + + + + + + +

Kredeum NFTs Factory - Statistics {networks.getChainLabel(chainId).toUpperCase()}

+
+ + + + + + + + + + + + + + {#each collections as collection} + + + + + + + {/each} + +

{networks.getChainName(chainId)} #{chainId}

nameTotal ViewCollections Addresses
{collection.name}{collection.totalSupply} {collection.symbol} + view collection + + + {collection.address} + +
+
+
+ + diff --git a/sveltekit/src/lib/components/StatsNetworks.svelte b/sveltekit/src/lib/components/StatsNetworks.svelte new file mode 100644 index 000000000..5479ddf5e --- /dev/null +++ b/sveltekit/src/lib/components/StatsNetworks.svelte @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + {#each chainIdsSorted as chainId} + + {/each} + +
Chain IDChain
Name
{updated}/{chainIds.length}
Collections
Count
{total}
OpenNFTs
Factory
OpenNFTs
Resolver
OpenNFTsV4
Template
OpenAutoMarket
Template
+ + diff --git a/sveltekit/src/lib/stores/statsCounts.ts b/sveltekit/src/lib/stores/statsCounts.ts new file mode 100644 index 000000000..c0efe3f57 --- /dev/null +++ b/sveltekit/src/lib/stores/statsCounts.ts @@ -0,0 +1,76 @@ +import type { Writable } from "svelte/store"; +import { get, writable } from "svelte/store"; +import { + localStorageGet, + localStorageKeys, + localStorageRemove, + localStorageSet +} from "@kredeum/common/src/common/local"; +import { keyStats } from "@kredeum/common/src/common/keys"; + +type StatsCounts = Map; + +// LOADER // +const _statsCountLoadLocalStorage = (): StatsCounts => { + const _statsCounts: StatsCounts = new Map(); + + localStorageKeys("stats://") + .map((key) => _statsCounts.set(Number(key.replace("stats://", "")), Number(localStorageGet(key)))); + + // console.log("_statsCountLoadLocalStorage", _statsCounts); + return _statsCounts; +}; + +// STORES // + +// collection count per chainId +const statsCounts: Writable = writable(_statsCountLoadLocalStorage()); + +// number of collection counts updates +const stats: Writable = writable(1); + +// FUNCTIONS // + +// chainIds with collection counts +const statsChainIds = (): number[] => [...get(statsCounts).keys()]; + +// get collection count of chainId +const statsChain = (chainId: number): number => get(statsCounts).get(chainId) || 0; + +// subtotal collection count of specific set of chainIds +const statsSubTotal = (chainIds: number[]): number => chainIds.reduce((sum, chainId) => sum + statsChain(chainId), 0); + +const statsSubTotalUpdated = (chainIds: number[]): number => + chainIds.reduce((sum, chainId) => sum + (get(statsCounts).get(chainId) ? 1 : 0), 0); + +// update stats +const statsUpdate = (chainId: number, value: number) => { + statsCounts.update(($statsCounts) => { + // increment number of collection updates + stats.update((n) => n + 1); + + // set collection count for chainId in localstorage + localStorageSet(keyStats(chainId), String(value)); + + // set collection count for chainId in svelte store + return $statsCounts.set(chainId, value); + }); +}; + +const statsSort = (chainIds: number[]): number[] => chainIds.sort((a, b) => statsChain(b) - statsChain(a)); + +const statsClean = () => + localStorageKeys("stats://") + .map((key) => localStorageRemove(key)); + +export { + stats, + statsCounts, + statsClean, + statsChainIds, + statsSort, + statsChain, + statsSubTotal, + statsSubTotalUpdated, + statsUpdate +}; diff --git a/sveltekit/src/routes/stats/+layout.ts b/sveltekit/src/routes/stats/+layout.ts new file mode 100644 index 000000000..94a25ecf8 --- /dev/null +++ b/sveltekit/src/routes/stats/+layout.ts @@ -0,0 +1,10 @@ +import type { Load } from "@sveltejs/kit"; + +const prerender = false; +const ssr = false; + +const load: Load = async () => { + return {}; +}; + +export { prerender, ssr, load }; diff --git a/sveltekit/src/routes/stats/+page.svelte b/sveltekit/src/routes/stats/+page.svelte index 9007d17b3..1d515e980 100644 --- a/sveltekit/src/routes/stats/+page.svelte +++ b/sveltekit/src/routes/stats/+page.svelte @@ -1,76 +1,5 @@ -
-

Kredeum NFTs Factory - Statistics

- -
- {#each Object.keys(tabsMounted) as tabKey} - - {/each} -
- - {#each Object.entries(tabsMounted) as [tabKey, tabMounted]} - {#if tabMounted} - - - - {/if} - {/each} -
- - + diff --git a/sveltekit/src/routes/stats/Addresses.svelte b/sveltekit/src/routes/stats/Addresses.svelte deleted file mode 100644 index 0d63b5f22..000000000 --- a/sveltekit/src/routes/stats/Addresses.svelte +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - {#each networksSorted || networks as network} - - - - - - - - - - - {/each} - -
Chain IDChain
Name
{done}/{networks.length}
Collections
Count
{total}
OpenNFTs
Factory
OpenNFTs
Resolver
OpenNFTsV4
Template
OpenAutoMarket
Template
{network.chainId}{network.chainName} - {#await countCollections(network.chainId)} - ... - {:then count} - {count} - {:catch} - --- - {/await} - - - {getShortAddress(factoryGetAddress(network.chainId))} - - - - {getShortAddress(resolverGetAddress(network.chainId))} - - - - {getShortAddress(getAddressOpenNFTsTemplate(network.chainId))} - - - - {getShortAddress(getAddressOpenAutoMarket(network.chainId))} - -
- - diff --git a/sveltekit/src/routes/stats/[chainId]/+page.svelte b/sveltekit/src/routes/stats/[chainId]/+page.svelte new file mode 100644 index 000000000..054a216d8 --- /dev/null +++ b/sveltekit/src/routes/stats/[chainId]/+page.svelte @@ -0,0 +1,6 @@ + + + diff --git a/sveltekit/src/routes/stats/mainnets/+page.svelte b/sveltekit/src/routes/stats/mainnets/+page.svelte deleted file mode 100644 index 7362ce956..000000000 --- a/sveltekit/src/routes/stats/mainnets/+page.svelte +++ /dev/null @@ -1,11 +0,0 @@ - - -

Stats

- -
    - {#each networks.getAllMainnets() as network} -
  • {network.chainName}
  • - {/each} -
diff --git a/sveltekit/svelte.config.js b/sveltekit/svelte.config.js index 208167b5d..a9571a5b1 100644 --- a/sveltekit/svelte.config.js +++ b/sveltekit/svelte.config.js @@ -14,6 +14,7 @@ const config = { adapter: adapter({ pages: "web/dapp", assets: "web/dapp", + fallback: "200.html", precompress: false, strict: true }) diff --git a/sveltekit/tests/mint.spec.ts b/sveltekit/tests/mint.spec.ts index 64c073c34..1679272ca 100644 --- a/sveltekit/tests/mint.spec.ts +++ b/sveltekit/tests/mint.spec.ts @@ -16,8 +16,10 @@ test.only("mint one NFT", async ({ page }) => { await page.locator('input[name="file"]').click(); await page.locator('input[name="file"]').setInputFiles("./tests/assets/klogo.png"); + // await page.pause(); await page.locator("#mintNft").click(); + await page.screenshot({ path: "./test-results/screenshot.png" }); - await page.pause(); + await metamask.confirmTransaction(); }); diff --git a/sveltekit/turbo.json b/sveltekit/turbo.json index 09ff8612c..d522e1818 100644 --- a/sveltekit/turbo.json +++ b/sveltekit/turbo.json @@ -1,18 +1,54 @@ { - "extends": ["//"], + "extends": [ + "//" + ], "pipeline": { "check": { - "dependsOn": ["format", "@kredeum/svelte#check"], - "inputs": ["src/**"] + "dependsOn": [ + "format", + "@kredeum/svelte#check" + ], + "inputs": [ + "src/**/*.ts", + "src/**/*.svelte" + ] }, "dev": { - "dependsOn": ["@kredeum/config#build", "@kredeum/gulp#build"], - "inputs": ["src/**", "../contracts/addresses.json"] + "dependsOn": [ + "@kredeum/config#build", + "@kredeum/gulp#build", + "@kredeum/skale#build" + ], + "inputs": [ + "src/**/*.ts", + "src/**/*.svelte", + "../contracts/addresses.json" + ] }, "build": { - "dependsOn": ["check", "@kredeum/gulp#build", "@kredeum/skale#build"], - "inputs": ["src/**"], - "outputs": ["web/dapp/index.html", "web/dapp/_app/**.*"] + "dependsOn": [ + "check", + "@kredeum/config#build", + "@kredeum/gulp#build", + "@kredeum/skale#build" + ], + "inputs": [ + "src/**/*.ts", + "src/**/*.svelte", + "../contracts/addresses.json" + ], + "outputs": [ + "web/dapp/index.html", + "web/dapp/_app/**" + ] + }, + "test": { + "dependsOn": [ + "build" + ], + "inputs": [ + "tests/**/*.ts" + ] } } -} +} \ No newline at end of file diff --git a/wordpress/kredeum-nfts.handlebars.php b/wordpress/kredeum-nfts.handlebars.php index 910c5cd69..227850c17 100644 --- a/wordpress/kredeum-nfts.handlebars.php +++ b/wordpress/kredeum-nfts.handlebars.php @@ -48,9 +48,9 @@ require_once KREDEUM_NFTS_PLUGIN_PATH . 'admin/media-list/actions.php'; require_once KREDEUM_NFTS_PLUGIN_PATH . 'admin/media-list/column.php'; - require_once KREDEUM_NFTS_PLUGIN_PATH . 'admin/post-list/actions.php'; - require_once KREDEUM_NFTS_PLUGIN_PATH . 'admin/post-list/column.php'; - require_once KREDEUM_NFTS_PLUGIN_PATH . 'admin/post-list/article-content.php'; + // require_once KREDEUM_NFTS_PLUGIN_PATH . 'admin/post-list/actions.php'; + // require_once KREDEUM_NFTS_PLUGIN_PATH . 'admin/post-list/column.php'; + // require_once KREDEUM_NFTS_PLUGIN_PATH . 'admin/post-list/article-content.php'; require_once KREDEUM_NFTS_PLUGIN_PATH . 'admin/settings/class-settings.php'; require_once KREDEUM_NFTS_PLUGIN_PATH . 'admin/settings/fields.php'; diff --git a/wordpress/plugins/kredeum-nfts/admin/settings/fields.php b/wordpress/plugins/kredeum-nfts/admin/settings/fields.php index c39a8e49b..d68bbb466 100644 --- a/wordpress/plugins/kredeum-nfts/admin/settings/fields.php +++ b/wordpress/plugins/kredeum-nfts/admin/settings/fields.php @@ -40,7 +40,7 @@ function fields() { 'ipfs' => __( 'IPFS', 'kredeum-nfts' ), 'swarm' => __( 'Swarm', 'kredeum-nfts' ), ), - 'helper' => __( 'Choose on witch decentralized storage you want to upload your files', 'kredeum-nfts' ), + 'helper' => __( 'Choose decentralized storage (Swarm is experimental, only on testnets)', 'kredeum-nfts' ), ), array( diff --git a/wordpress/readme.handlebars.txt b/wordpress/readme.handlebars.txt index ecf37444c..f5e6720b3 100644 --- a/wordpress/readme.handlebars.txt +++ b/wordpress/readme.handlebars.txt @@ -3,7 +3,7 @@ Contributors: yoannr35, alexr35, alain Donate link: https://www.kredeum.com/ Tags: nft, blockchain, ethereum, polygon, ipfs, swarm Requires at least: 5.0 -Tested up to: 6.2 +Tested up to: 6.5.3 Stable tag: {{version.stable}} Requires PHP: 7.3 License: GPLv3 or later @@ -71,10 +71,15 @@ You can even add your NFTs in any websites you want by using Kredeum "Buy snippe == Changelog == -= 1.2.0 (latest) = -* New feature (beta) : Add blog post PDF archiving and NFT minting - -= 1.1.4 (stable & latest) = += 1.6.0 (stable & latest) = +* New features : +* Many new deployments, mainly EVM L2s. Available mainnets: +* ethereum, arbitrum, optimism, scroll, base, mantle, mode, blast, polygon-zkevm +* linea, zora, polygon, gnosis, avalanche, fantom, bsc, skale-calypso +* and many related testnets... +* Many bug fixes and performance improvements + += 1.1.4 = * Deployment to Polygon zkEvm * Fix on legacy network diff --git a/wordpress/turbo.json b/wordpress/turbo.json index 5805b65cc..8a96da650 100644 --- a/wordpress/turbo.json +++ b/wordpress/turbo.json @@ -4,21 +4,43 @@ ], "pipeline": { "plusinstall": { - "outputs": ["vendor/**"], + "outputs": [ + "vendor/**" + ], "outputMode": "new-only" }, "format": { - "dependsOn": ["plusinstall"], - "inputs": ["plugins/kredeum-nfts/**/*"] + "dependsOn": [ + "plusinstall" + ], + "inputs": [ + "plugins/kredeum-nfts/**" + ] }, "check": { - "dependsOn": ["format"], - "inputs": ["plugins/kredeum-nfts/**/*"] + "dependsOn": [ + "format" + ], + "inputs": [ + "plugins/kredeum-nfts/**" + ] }, "build": { - "dependsOn": ["check", "@kredeum/svelte#build"], - "inputs": ["plugins/kredeum-nfts/**/*", "readme.handlebars.txt", "kredeum-nfts.handlebars.php", "!plugins/kredeum-nfts/readme.txt", "!plugins/kredeum-nfts/kredeum-nfts.php"], - "outputs": ["plugins/kredeum-nfts/readme.txt", "plugins/kredeum-nfts/kredeum-nfts.php"] + "dependsOn": [ + "check", + "@kredeum/svelte#build" + ], + "inputs": [ + "plugins/kredeum-nfts/**", + "readme.handlebars.txt", + "kredeum-nfts.handlebars.php", + "!plugins/kredeum-nfts/readme.txt", + "!plugins/kredeum-nfts/kredeum-nfts.php" + ], + "outputs": [ + "plugins/kredeum-nfts/readme.txt", + "plugins/kredeum-nfts/kredeum-nfts.php" + ] } } } \ No newline at end of file