diff --git a/package.json b/package.json index dc51ac8..e9252eb 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,10 @@ { "name": "@quest-chains/subgraph", - "version": "0.1.0", + "version": "0.2.2", "license": "GPL-3.0", "devDependencies": { - "@graphprotocol/graph-cli": "0.71.1", - "@graphprotocol/graph-ts": "0.35.1", + "@graphprotocol/graph-cli": "^0.91.1", + "@graphprotocol/graph-ts": "^0.36.0", "husky": "^9.0.11", "lint-staged": "^15.2.2", "mustache": "^4.2.0", @@ -43,5 +43,6 @@ "*.{json,yml,yaml,md,ts}": [ "prettier --write" ] - } + }, + "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e" } diff --git a/src/mappings/helpers/index.ts b/src/mappings/helpers/index.ts index 07507a4..d136621 100644 --- a/src/mappings/helpers/index.ts +++ b/src/mappings/helpers/index.ts @@ -1,5 +1,5 @@ export * from './constants'; -export * from './ipfs'; +export { Metadata } from './ipfs'; export * from './network'; export * from './strings'; export * from './schema'; diff --git a/src/mappings/helpers/ipfs.ts b/src/mappings/helpers/ipfs.ts index 7a21bc1..eeb1ae0 100644 --- a/src/mappings/helpers/ipfs.ts +++ b/src/mappings/helpers/ipfs.ts @@ -1,75 +1,68 @@ -import { ipfs, json, log } from '@graphprotocol/graph-ts'; +import { ipfs, json, JSONValue, log, TypedMap } from '@graphprotocol/graph-ts'; -class Metadata { - name: string | null; - description: string | null; - imageUrl: string | null; - animationUrl: string | null; - externalUrl: string | null; - mimeType: string | null; - slug: string | null; - categories: string[] | null; +export class Metadata { + name: string | null = null; + description: string | null = null; + imageUrl: string | null = null; + animationUrl: string | null = null; + externalUrl: string | null = null; + mimeType: string | null = null; + slug: string | null = null; + categories: string[] | null = null; - constructor() { - this.name = null; - this.description = null; - this.imageUrl = null; - this.animationUrl = null; - this.externalUrl = null; - this.mimeType = null; - this.slug = null; + static from(detailsURL: string): Metadata { + const metadata = new Metadata(); + const path = stripProtocol(detailsURL); + if (path != null) { + const data = fetchIPFSData(path); + if (data != null) { + metadata.name = getString(data, 'name'); + metadata.description = getString(data, 'description'); + metadata.imageUrl = getString(data, 'image_url'); + metadata.animationUrl = getString(data, 'animation_url'); + metadata.externalUrl = getString(data, 'external_url'); + metadata.mimeType = getString(data, 'mime_type'); + metadata.slug = getString(data, 'slug'); + metadata.categories = getArray(data, 'categories'); + } + } + return metadata; } } - -function fetchHash(details: string): string { - let parts = details.split('/'); - return parts.length > 0 ? parts[parts.length - 1] : ''; +function stripProtocol(details: string): string { + if (details.toLowerCase().startsWith('ipfs://')) { + details = details.slice(7); + } + return details; } -function fetchIpfsData(hash: string) { - let ipfsData = ipfs.cat(hash); - if (ipfsData) { - log.info('IPFS details from hash {}, data {}', [hash, ipfsData.toString()]); - return json.fromBytes(ipfsData).toObject(); - } else { - log.warning('could not get IPFS details from hash {}', [hash]); - return null; +function fetchIPFSData(path: string): TypedMap | null { + const raw = ipfs.cat(path); + if (raw) { + log.info('Details from "{}": {}', [path, raw.toString()]); + return json.fromBytes(raw).toObject(); } + log.warning('Couldn’t get details from "{}"', [path]); + return null; } -function assignMetadataValue(data: any, key: string): string | null { - let value = data.get(key); +function getString( + data: TypedMap, + key: string, +): string | null { + const value = data.get(key); return value != null && !value.isNull() ? value.toString() : null; } -function assignMetadataCategories(data: any): string[] | null { - let categories = data.get('categories'); - if (categories != null && !categories.isNull()) { - let categoryArray = categories.toArray(); - return categoryArray.map(category => category.toString()); +function getArray( + data: TypedMap, + key: string, +): string[] | null { + const value = data.get(key); + if (value != null && !value.isNull()) { + const array = value.toArray(); + return array.map((elem: JSONValue) => elem.toString()); } return null; } - -export function fetchMetadata(details: string): Metadata { - let metadata = new Metadata(); - if (details == '') return metadata; - - let hash = fetchHash(details); - if (hash != '') { - let data = fetchIpfsData(hash); - if (data) { - metadata.name = assignMetadataValue(data, 'name'); - metadata.description = assignMetadataValue(data, 'description'); - metadata.imageUrl = assignMetadataValue(data, 'image_url'); - metadata.animationUrl = assignMetadataValue(data, 'animation_url'); - metadata.externalUrl = assignMetadataValue(data, 'external_url'); - metadata.mimeType = assignMetadataValue(data, 'mime_type'); - metadata.slug = assignMetadataValue(data, 'slug'); - metadata.categories = assignMetadataCategories(data); - } - } - - return metadata; -} diff --git a/src/mappings/helpers/network.ts b/src/mappings/helpers/network.ts index ebe368a..828f082 100644 --- a/src/mappings/helpers/network.ts +++ b/src/mappings/helpers/network.ts @@ -2,26 +2,23 @@ import { dataSource } from '@graphprotocol/graph-ts'; export function getNetwork(): string { const network = dataSource.network(); - const networkMap: { [key: string]: string } = { - 'mainnet': '0x1', - 'kovan': '0x2a', - 'rinkeby': '0x4', - 'ropsten': '0x3', - 'goerli': '0x5', - 'poa-core': '0x63', - 'poa-sokol': '0x4d', - 'gnosis': '0x64', - 'matic': '0x89', - 'mumbai': '0x13881', - 'arbitrum-one': '0xa4b1', - 'arbitrum-goerli': '0x66eed', - 'optimism': '0xa', - 'optimism-kovan': '0x45', - 'aurora': '0x4e454152', - 'aurora-testnet': '0x4e454153', - 'sepolia': '0xaa36a7', - 'holesky': '0x4268' - }; - - return networkMap[network] || 'unknown'; + if (network === 'mainnet') return '0x1'; + if (network === 'kovan') return '0x2a'; + if (network === 'rinkeby') return '0x4'; + if (network === 'ropsten') return '0x3'; + if (network === 'goerli') return '0x5'; + if (network === 'poa-core') return '0x63'; + if (network === 'poa-sokol') return '0x4d'; + if (network === 'gnosis') return '0x64'; + if (network === 'matic') return '0x89'; + if (network === 'mumbai') return '0x13881'; + if (network === 'arbitrum-one') return '0xa4b1'; + if (network === 'arbitrum-goerli') return '0x66eed'; + if (network === 'optimism') return '0xa'; + if (network === 'optimism-kovan') return '0x45'; + if (network === 'aurora') return '0x4e454152'; + if (network === 'aurora-testnet') return '0x4e454153'; + if (network === 'sepolia') return '0xaa36a7'; + if (network === 'holesky') return '0x4268'; + return 'unknown'; } diff --git a/src/mappings/helpers/schema.ts b/src/mappings/helpers/schema.ts index 03749e0..f6342eb 100644 --- a/src/mappings/helpers/schema.ts +++ b/src/mappings/helpers/schema.ts @@ -10,7 +10,7 @@ import { import { getNetwork } from './network'; import { ADDRESS_ZERO } from './constants'; import { createSearchString } from './strings'; -import { fetchMetadata } from './ipfs'; +import { Metadata } from './ipfs'; export function getUser(address: Address): User { let user = User.load(address.toHexString()); @@ -101,7 +101,7 @@ export function createQuest( ): Quest { let quest = getQuest(address, questIndex); - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); quest.details = details; quest.name = metadata.name; quest.description = metadata.description; diff --git a/src/mappings/helpers/status.ts b/src/mappings/helpers/status.ts index faa13e0..cb87cc0 100644 --- a/src/mappings/helpers/status.ts +++ b/src/mappings/helpers/status.ts @@ -10,7 +10,7 @@ function questChainCompletedByUser( let atLeastOnePassed = false; - for (let questIdx of Array.from({ length: questCount }, (_, i) => i)) { + for (let questIdx = 0; questIdx < questCount; questIdx++) { let questId = chainId .concat('-') .concat(BigInt.fromI32(questIdx).toHexString()); @@ -37,8 +37,9 @@ export function updateQuestChainCompletions( ): QuestChain { let completed = new TypedMap(); - for (let questerId of questChain.questers) { - let hasCompleted = questChainCompletedByUser( + for (let i = 0; i < questChain.questers.length; i++) { + const questerId = questChain.questers[i]; + const hasCompleted = questChainCompletedByUser( questChain.id, questChain.totalQuestCount, questerId, @@ -49,7 +50,9 @@ export function updateQuestChainCompletions( let completedQuesters = new Array(); - for (let entry of completed.entries) { + const completedEntries = completed.entries; + for (let i = 0; i < completedEntries.length; i++) { + const entry = completedEntries[i]; if (entry.value) { let questerId = entry.key; completedQuesters.push(questerId); diff --git a/src/mappings/v0/questChain.ts b/src/mappings/v0/questChain.ts index 42106cb..1b7442d 100644 --- a/src/mappings/v0/questChain.ts +++ b/src/mappings/v0/questChain.ts @@ -25,7 +25,7 @@ import { } from '../../types/templates/QuestChainV0/QuestChainV0'; import { createSearchString, - fetchMetadata, + Metadata, getUser, removeFromArray, updateQuestChainCompletions, @@ -38,7 +38,7 @@ export function handleChainCreated(event: QuestChainCreatedEvent): void { log.info('handleChainCreated {}', [event.address.toHexString()]); let details = event.params.details; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); questChain.details = details; questChain.name = metadata.name; questChain.description = metadata.description; @@ -83,7 +83,7 @@ export function handleChainEdited(event: QuestChainEditedEvent): void { questChainEdit.save(); let details = event.params.details; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); questChain.paused = false; questChain.details = details; questChain.name = metadata.name; @@ -193,7 +193,7 @@ export function handleQuestCreated(event: QuestCreatedEvent): void { quest.questId = event.params.questId; let details = event.params.details; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); quest.optional = false; quest.skipReview = false; quest.paused = false; @@ -307,7 +307,7 @@ export function handleQuestEdited(event: QuestEditedEvent): void { questEdit.save(); let details = event.params.details; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); quest.details = details; quest.name = metadata.name; quest.description = metadata.description; @@ -399,7 +399,7 @@ export function handleQuestProofSubmitted( .concat(event.logIndex.toHexString()); let proof = new ProofSubmission(proofId); let details = event.params.proof; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); proof.details = details; proof.name = metadata.name; proof.description = metadata.description; @@ -514,7 +514,7 @@ export function handleQuestProofReviewed(event: QuestProofReviewedEvent): void { .concat(event.logIndex.toHexString()); let review = new ReviewSubmission(reviewId); let details = event.params.details; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); review.details = details; review.name = metadata.name; review.description = metadata.description; diff --git a/src/mappings/v0/token.ts b/src/mappings/v0/token.ts index f2cfb95..c360b0e 100644 --- a/src/mappings/v0/token.ts +++ b/src/mappings/v0/token.ts @@ -5,12 +5,7 @@ import { TransferSingle as TransferSingleEvent, URI as URIEvent, } from '../../types/templates/QuestChainTokenV0/QuestChainTokenV0'; -import { - ADDRESS_ZERO, - removeFromArray, - fetchMetadata, - getUser, -} from '../helpers'; +import { ADDRESS_ZERO, removeFromArray, Metadata, getUser } from '../helpers'; export function handleTransferSingle(event: TransferSingleEvent): void { let tokenId = event.address @@ -52,7 +47,7 @@ export function handleURIUpdated(event: URIEvent): void { token.tokenAddress = event.address; let details = event.params.value; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); token.details = details; token.name = metadata.name; token.description = metadata.description; diff --git a/src/mappings/v1/questChain.ts b/src/mappings/v1/questChain.ts index 92457d4..c31d061 100644 --- a/src/mappings/v1/questChain.ts +++ b/src/mappings/v1/questChain.ts @@ -24,7 +24,7 @@ import { import { createQuest, createSearchString, - fetchMetadata, + Metadata, getQuest, getQuestChain, getUser, @@ -37,7 +37,7 @@ export function handleChainInit(event: QuestChainInitEvent): void { let questChain = getQuestChain(event.address); let details = event.params.details; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); questChain.details = details; questChain.name = metadata.name; questChain.description = metadata.description; @@ -100,7 +100,7 @@ export function handleChainEdited(event: QuestChainEditedEvent): void { questChainEdit.save(); let details = event.params.details; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); questChain.details = details; questChain.name = metadata.name; questChain.description = metadata.description; @@ -279,7 +279,7 @@ export function handleQuestsEdited(event: QuestsEditedEvent): void { questEdit.editor = user.id; questEdit.save(); - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); quest.details = details; quest.name = metadata.name; quest.description = metadata.description; @@ -368,7 +368,7 @@ export function handleQuestProofsSubmitted( .concat('-') .concat(event.logIndex.toHexString()); let proof = new ProofSubmission(proofId); - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); proof.details = details; proof.name = metadata.name; proof.description = metadata.description; @@ -485,7 +485,7 @@ export function handleQuestProofsReviewed( .concat('-') .concat(event.logIndex.toHexString()); let review = new ReviewSubmission(reviewId); - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); review.details = details; review.name = metadata.name; review.description = metadata.description; diff --git a/src/mappings/v1/token.ts b/src/mappings/v1/token.ts index 3404a31..9fda9b6 100644 --- a/src/mappings/v1/token.ts +++ b/src/mappings/v1/token.ts @@ -5,12 +5,7 @@ import { TransferSingle as TransferSingleEvent, URI as URIEvent, } from '../../types/templates/QuestChainTokenV1/QuestChainTokenV1'; -import { - ADDRESS_ZERO, - removeFromArray, - fetchMetadata, - getUser, -} from '../helpers'; +import { ADDRESS_ZERO, removeFromArray, Metadata, getUser } from '../helpers'; export function handleTransferSingle(event: TransferSingleEvent): void { let tokenId = event.address @@ -52,7 +47,7 @@ export function handleURIUpdated(event: URIEvent): void { token.tokenAddress = event.address; let details = event.params.value; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); token.details = details; token.name = metadata.name; token.description = metadata.description; diff --git a/src/mappings/v2/questChain.ts b/src/mappings/v2/questChain.ts index 7c01bbd..2e558fd 100644 --- a/src/mappings/v2/questChain.ts +++ b/src/mappings/v2/questChain.ts @@ -24,7 +24,7 @@ import { import { createQuest, createSearchString, - fetchMetadata, + Metadata, getQuest, getQuestChain, getUser, @@ -37,7 +37,7 @@ export function handleChainInit(event: QuestChainInitEvent): void { let questChain = getQuestChain(event.address); let details = event.params.details; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); questChain.details = details; questChain.name = metadata.name; questChain.description = metadata.description; @@ -100,7 +100,7 @@ export function handleChainEdited(event: QuestChainEditedEvent): void { questChainEdit.save(); let details = event.params.details; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); questChain.details = details; questChain.name = metadata.name; questChain.description = metadata.description; @@ -283,7 +283,7 @@ export function handleQuestsEdited(event: QuestsEditedEvent): void { questEdit.editor = user.id; questEdit.save(); - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); quest.details = details; quest.name = metadata.name; quest.description = metadata.description; @@ -388,7 +388,7 @@ export function handleQuestProofsSubmitted( .concat('-') .concat(event.logIndex.toHexString()); let proof = new ProofSubmission(proofId); - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); proof.details = details; proof.name = metadata.name; proof.description = metadata.description; @@ -516,7 +516,7 @@ export function handleQuestProofsReviewed( .concat('-') .concat(event.logIndex.toHexString()); let review = new ReviewSubmission(reviewId); - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); review.details = details; review.name = metadata.name; review.description = metadata.description; diff --git a/src/mappings/v2/token.ts b/src/mappings/v2/token.ts index 98b7237..523f392 100644 --- a/src/mappings/v2/token.ts +++ b/src/mappings/v2/token.ts @@ -5,12 +5,7 @@ import { TransferSingle as TransferSingleEvent, URI as URIEvent, } from '../../types/templates/QuestChainTokenV2/QuestChainTokenV2'; -import { - ADDRESS_ZERO, - removeFromArray, - fetchMetadata, - getUser, -} from '../helpers'; +import { ADDRESS_ZERO, removeFromArray, Metadata, getUser } from '../helpers'; export function handleTransferSingle(event: TransferSingleEvent): void { let tokenId = event.address @@ -52,7 +47,7 @@ export function handleURIUpdated(event: URIEvent): void { token.tokenAddress = event.address; let details = event.params.value; - let metadata = fetchMetadata(details); + const metadata = Metadata.from(details); token.details = details; token.name = metadata.name; token.description = metadata.description; diff --git a/yarn.lock b/yarn.lock index da2bb33..0127b6c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -216,15 +216,16 @@ graphql-import-node "^0.0.5" js-yaml "^4.1.0" -"@graphprotocol/graph-cli@0.71.1": - version "0.71.1" - resolved "https://registry.yarnpkg.com/@graphprotocol/graph-cli/-/graph-cli-0.71.1.tgz#9fac346c1d7d12554467c5c789e70c5dea86de12" - integrity sha512-1QctcyrVGGiJMp+5znt92tU1N+EZMP/i8XLNbCmF9Sts8Coh8JGkzxNq8fhhDqHfdWC6bWrRaNNHK9Zz2rnOrg== +"@graphprotocol/graph-cli@^0.91.1": + version "0.91.1" + resolved "https://registry.yarnpkg.com/@graphprotocol/graph-cli/-/graph-cli-0.91.1.tgz#72484c7827e9b4dab7ab24693b71394450695de9" + integrity sha512-T7DgFgtvqjMf4W+jGTAXfnWyNnyQTPmJSTH/qNPE9Swf1WY0r5/uiXhyzrtDql6COeuN1iTKRLgCq/OXD+b0YA== dependencies: "@float-capital/float-subgraph-uncrashable" "^0.0.0-alpha.4" "@oclif/core" "2.8.6" "@oclif/plugin-autocomplete" "^2.3.6" "@oclif/plugin-not-found" "^2.4.0" + "@oclif/plugin-warn-if-update-available" "^3.1.20" "@whatwg-node/fetch" "^0.8.4" assemblyscript "0.19.23" binary-install-raw "0.0.13" @@ -241,6 +242,7 @@ ipfs-http-client "55.0.0" jayson "4.0.0" js-yaml "3.14.1" + open "8.4.2" prettier "3.0.3" semver "7.4.0" sync-request "6.1.0" @@ -249,10 +251,10 @@ which "2.0.2" yaml "1.10.2" -"@graphprotocol/graph-ts@0.35.1": - version "0.35.1" - resolved "https://registry.yarnpkg.com/@graphprotocol/graph-ts/-/graph-ts-0.35.1.tgz#1e1ecc36d8f7a727ef3a6f1fed4c5ce16de378c2" - integrity sha512-74CfuQmf7JI76/XCC34FTkMMKeaf+3Pn0FIV3m9KNeaOJ+OI3CvjMIVRhOZdKcJxsFCBGaCCl0eQjh47xTjxKA== +"@graphprotocol/graph-ts@^0.36.0": + version "0.36.0" + resolved "https://registry.yarnpkg.com/@graphprotocol/graph-ts/-/graph-ts-0.36.0.tgz#68ed937806bc7b2f8fe0ae2e15447255144f6a41" + integrity sha512-yJNQK5YZWEThuawSboQQ+U4Fb2C78KBjmaoeOK7Nn0CFoChmHc+woRvW3yj+IKVSPc7JNHt4JSUHxVDJfUZbTA== dependencies: assemblyscript "0.19.10" @@ -387,6 +389,30 @@ wordwrap "^1.0.0" wrap-ansi "^7.0.0" +"@oclif/core@^4": + version "4.0.36" + resolved "https://registry.yarnpkg.com/@oclif/core/-/core-4.0.36.tgz#d8c90a8522f5ba3e46c2d6eb7f8b45ba893f2fce" + integrity sha512-Dk0bK2Abl/AJ3Fn6ountX037lbXGJY/xcTnBJs2SKDqex9wMcgkbnkKd6xXC/zJnRlfA+jE+niC3FnbxgTRcHg== + dependencies: + ansi-escapes "^4.3.2" + ansis "^3.3.2" + clean-stack "^3.0.1" + cli-spinners "^2.9.2" + debug "^4.4.0" + ejs "^3.1.10" + get-package-type "^0.1.0" + globby "^11.1.0" + indent-string "^4.0.0" + is-wsl "^2.2.0" + lilconfig "^3.1.3" + minimatch "^9.0.5" + semver "^7.6.3" + string-width "^4.2.3" + supports-color "^8" + widest-line "^3.1.0" + wordwrap "^1.0.0" + wrap-ansi "^7.0.0" + "@oclif/plugin-autocomplete@^2.3.6": version "2.3.10" resolved "https://registry.yarnpkg.com/@oclif/plugin-autocomplete/-/plugin-autocomplete-2.3.10.tgz#787f6208cdfe10ffc68ad89e9e7f1a7ad0e8987f" @@ -405,6 +431,18 @@ chalk "^4" fast-levenshtein "^3.0.0" +"@oclif/plugin-warn-if-update-available@^3.1.20": + version "3.1.26" + resolved "https://registry.yarnpkg.com/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.26.tgz#54cb84e16d4808e8f7d914f211410db2e2fd3e33" + integrity sha512-tG96vi0GvZ/azDPQ9NUnwRFhD5YQ4Z+9FpH329vTnNg2Z+WMy5sijPbaiTuEMuYMyUZyv2IKpFyGLV9BnNjaTQ== + dependencies: + "@oclif/core" "^4" + ansis "^3.3.1" + debug "^4.4.0" + http-call "^5.2.2" + lodash "^4.17.21" + registry-auth-token "^5.0.3" + "@peculiar/asn1-schema@^2.3.8": version "2.3.8" resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz#04b38832a814e25731232dd5be883460a156da3b" @@ -432,6 +470,27 @@ tslib "^2.6.2" webcrypto-core "^1.7.9" +"@pnpm/config.env-replace@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== + +"@pnpm/network.ca-file@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^2.1.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz#bb375a571a0bd63ab0a23bece33033c683e9b6b0" + integrity sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw== + dependencies: + "@pnpm/config.env-replace" "^1.1.0" + "@pnpm/network.ca-file" "^1.0.1" + config-chain "^1.1.11" + "@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" @@ -734,6 +793,11 @@ ansicolors@~0.3.2: resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" integrity sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg== +ansis@^3.3.1, ansis@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/ansis/-/ansis-3.3.2.tgz#15adc36fea112da95c74d309706e593618accac3" + integrity sha512-cFthbBlt+Oi0i9Pv/j6YdVWJh54CtjGACaMPCIrEV4Ha7HWsIjXDwseYV79TIL0B4+KfSwD5S70PeQDkPUd1rA== + any-signal@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-2.1.2.tgz#8d48270de0605f8b218cf9abe8e9c6a0e7418102" @@ -1153,6 +1217,11 @@ cli-spinners@^2.2.0: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== +cli-spinners@^2.9.2: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + cli-table3@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" @@ -1242,6 +1311,19 @@ concat-stream@^1.6.0, concat-stream@^1.6.2, concat-stream@~1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +content-type@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" @@ -1309,6 +1391,13 @@ debug@^3.2.6: dependencies: ms "^2.1.1" +debug@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -1316,6 +1405,11 @@ defaults@^1.0.3: dependencies: clone "^1.0.2" +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + delay@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" @@ -1380,7 +1474,7 @@ ejs@3.1.8: dependencies: jake "^10.8.5" -ejs@^3.1.8: +ejs@^3.1.10, ejs@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== @@ -1820,7 +1914,7 @@ gluegun@5.1.6: which "2.0.2" yargs-parser "^21.0.0" -graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@4.2.10, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -1898,6 +1992,18 @@ http-basic@^8.1.1: http-response-object "^3.0.1" parse-cache-control "^1.0.1" +http-call@^5.2.2: + version "5.3.0" + resolved "https://registry.yarnpkg.com/http-call/-/http-call-5.3.0.tgz#4ded815b13f423de176eb0942d69c43b25b148db" + integrity sha512-ahwimsC23ICE4kPl9xTBjKB4inbRaeLyZeRunC/1Jy/Z6X8tv22MEAjK+KBOMSVLaqXPTTmd8638waVIKLGx2w== + dependencies: + content-type "^1.0.4" + debug "^4.1.1" + is-retry-allowed "^1.1.0" + is-stream "^2.0.0" + parse-json "^4.0.0" + tunnel-agent "^0.6.0" + http-response-object@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" @@ -1973,6 +2079,11 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + interface-datastore@^6.0.2: version "6.1.1" resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-6.1.1.tgz#5150a00de2e7513eaadba58bcafd059cb50004c1" @@ -2094,7 +2205,7 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-docker@^2.0.0: +is-docker@^2.0.0, is-docker@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== @@ -2160,6 +2271,11 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== +is-retry-allowed@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" @@ -2300,6 +2416,11 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json-parse-even-better-errors@^2.3.0: version "2.3.1" resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" @@ -2338,6 +2459,11 @@ lilconfig@3.0.0: resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== +lilconfig@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + lines-and-columns@^1.1.6: version "1.2.4" resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" @@ -2446,6 +2572,11 @@ lodash.upperfirst@^4.3.1: resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + log-symbols@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" @@ -2578,6 +2709,13 @@ minimatch@^8.0.2: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.5: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.6: version "1.2.6" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" @@ -2625,7 +2763,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: +ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -2759,6 +2897,15 @@ onetime@^6.0.0: dependencies: mimic-fn "^4.0.0" +open@8.4.2: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + ora@4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.2.tgz#0e1e68fd45b135d28648b27cf08081fa6e8a297d" @@ -2802,6 +2949,14 @@ parse-duration@^1.0.0: resolved "https://registry.yarnpkg.com/parse-duration/-/parse-duration-1.1.0.tgz#5192084c5d8f2a3fd676d04a451dbd2e05a1819c" integrity sha512-z6t9dvSJYaPoQq7quMzdEagSFtpGu+utzHqqxmpVWNNZRIXnvqyCvn9XsTdh7c/w0Bqmdz3RB3YnRaKtpRtEXQ== +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-json@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -2896,6 +3051,11 @@ promise@^8.0.0: dependencies: asap "~2.0.6" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + protobufjs@^6.10.2: version "6.11.4" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.4.tgz#29a412c38bf70d89e537b6d02d904a6f448173aa" @@ -3019,6 +3179,13 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" +registry-auth-token@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.3.tgz#417d758c8164569de8cf5cabff16cc937902dcc6" + integrity sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA== + dependencies: + "@pnpm/npm-conf" "^2.1.0" + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -3141,6 +3308,11 @@ semver@^7.3.7: dependencies: lru-cache "^6.0.0" +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -3344,7 +3516,7 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -supports-color@^8.1.1: +supports-color@^8, supports-color@^8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== @@ -3496,6 +3668,13 @@ tslib@^2.0.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6 resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + type-fest@^0.21.3: version "0.21.3" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"