diff --git a/CHANGELOG.md b/CHANGELOG.md index 58efefbbc..4181941a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,25 @@ changes. - +## [v1.0.23](https://github.com/IntersectMBO/govtool/releases/tag/v1.0.23) 2024-10-29 + +### Added + +- Add searching for DRep and Proposal metadatas [Issue 1893](https://github.com/IntersectMBO/govtool/issues/1783) + +### Fixed + +- Fix validating metadata against the CIP standard [Issue 2233](https://github.com/IntersectMBO/govtool/issues/2233) +- Fix counting the CC votes [Issue 2247](https://github.com/IntersectMBO/govtool/issues/2247) + +### Changed + +- + +### Removed + +- + ## [v1.0.22](https://github.com/IntersectMBO/govtool/releases/tag/v1.0.22) 2024-10-24 ### Added @@ -43,6 +62,7 @@ changes. ### Changed - Bump to use Cardano Node `10.0.0-pre` +- Changed copy for no DRep found via search ### Removed diff --git a/govtool/backend/Dockerfile b/govtool/backend/Dockerfile index 3958d667c..8ea278247 100644 --- a/govtool/backend/Dockerfile +++ b/govtool/backend/Dockerfile @@ -4,4 +4,4 @@ FROM $BASE_IMAGE_REPO:$BASE_IMAGE_TAG WORKDIR /src COPY . . RUN cabal build -RUN cp dist-newstyle/build/x86_64-linux/ghc-9.2.7/vva-be-1.0.22/x/vva-be/build/vva-be/vva-be /usr/local/bin +RUN cp dist-newstyle/build/x86_64-linux/ghc-9.2.7/vva-be-1.0.23/x/vva-be/build/vva-be/vva-be /usr/local/bin diff --git a/govtool/backend/Dockerfile.qovery b/govtool/backend/Dockerfile.qovery index f569e7320..5d4b35a4d 100644 --- a/govtool/backend/Dockerfile.qovery +++ b/govtool/backend/Dockerfile.qovery @@ -4,7 +4,7 @@ FROM $BASE_IMAGE_REPO:$BASE_IMAGE_TAG WORKDIR /src COPY . . RUN cabal build -RUN cp dist-newstyle/build/x86_64-linux/ghc-9.2.7/vva-be-1.0.22/x/vva-be/build/vva-be/vva-be /usr/local/bin +RUN cp dist-newstyle/build/x86_64-linux/ghc-9.2.7/vva-be-1.0.23/x/vva-be/build/vva-be/vva-be /usr/local/bin # Expose the necessary port EXPOSE 9876 diff --git a/govtool/backend/sql/list-dreps.sql b/govtool/backend/sql/list-dreps.sql index 000a0c440..ea6414145 100644 --- a/govtool/backend/sql/list-dreps.sql +++ b/govtool/backend/sql/list-dreps.sql @@ -134,6 +134,12 @@ FROM AND dr_first_register.rn = 1 LEFT JOIN tx AS tx_first_register ON tx_first_register.id = dr_first_register.tx_id LEFT JOIN block AS block_first_register ON block_first_register.id = tx_first_register.block_id +WHERE + ( + COALESCE(?, '') = '' OR + dh.view ILIKE ? OR + off_chain_vote_drep_data.given_name ILIKE ? + ) GROUP BY dh.raw, second_to_newest_drep_registration.voting_anchor_id, diff --git a/govtool/backend/sql/list-proposals.sql b/govtool/backend/sql/list-proposals.sql index bbe19be2c..4f717872c 100644 --- a/govtool/backend/sql/list-proposals.sql +++ b/govtool/backend/sql/list-proposals.sql @@ -129,20 +129,30 @@ FROM SUM(CASE WHEN vote = 'No' THEN 1 ELSE 0 END) AS ccNoVotes, SUM(CASE WHEN vote = 'Abstain' THEN 1 ELSE 0 END) AS ccAbstainVotes FROM - voting_procedure + voting_procedure AS vp WHERE - committee_voter IS NOT NULL + vp.committee_voter IS NOT NULL + AND (vp.tx_id, vp.committee_voter, vp.gov_action_proposal_id) IN ( + SELECT MAX(tx_id), committee_voter, gov_action_proposal_id + FROM voting_procedure + WHERE committee_voter IS NOT NULL + GROUP BY committee_voter, gov_action_proposal_id + ) GROUP BY gov_action_proposal_id ) vp_by_cc ON gov_action_proposal.id = vp_by_cc.gov_action_proposal_id - LEFT JOIN LatestDrepDistr ldd_cc ON ldd_cc.hash_id = voting_procedure.committee_voter AND ldd_cc.rn = 1 LEFT JOIN gov_action_proposal AS prev_gov_action ON gov_action_proposal.prev_gov_action_proposal = prev_gov_action.id LEFT JOIN tx AS prev_gov_action_tx ON prev_gov_action.tx_id = prev_gov_action_tx.id -WHERE (NOT ? - OR (concat(encode(creator_tx.hash, 'hex'), '#', gov_action_proposal.index) IN ?)) +WHERE + (COALESCE(?, '') = '' OR + off_chain_vote_gov_action_data.title ILIKE ? OR + off_chain_vote_gov_action_data.abstract ILIKE ? OR + off_chain_vote_gov_action_data.motivation ILIKE ? OR + off_chain_vote_gov_action_data.rationale ILIKE ? OR + concat(encode(creator_tx.hash, 'hex'), '#', gov_action_proposal.index) ILIKE ?) AND gov_action_proposal.expiration >( SELECT Max(NO) diff --git a/govtool/backend/src/VVA/API.hs b/govtool/backend/src/VVA/API.hs index c975b5183..104b903b8 100644 --- a/govtool/backend/src/VVA/API.hs +++ b/govtool/backend/src/VVA/API.hs @@ -140,7 +140,7 @@ delegationToResponse Types.Delegation {..} = drepList :: App m => Maybe Text -> [DRepStatus] -> Maybe DRepSortMode -> Maybe Natural -> Maybe Natural -> m ListDRepsResponse drepList mSearchQuery statuses mSortMode mPage mPageSize = do CacheEnv {dRepListCache} <- asks vvaCache - dreps <- cacheRequest dRepListCache () DRep.listDReps + dreps <- cacheRequest dRepListCache () (DRep.listDReps mSearchQuery) let filterDRepsByQuery = case mSearchQuery of Nothing -> filter $ \Types.DRepRegistration {..} -> dRepRegistrationType == Types.DRep @@ -357,20 +357,20 @@ listProposals selectedTypes sortMode mPage mPageSize mDrepRaw mSearchQuery = do map (voteParamsProposalId . voteResponseVote) <$> getVotes drepId [] Nothing Nothing - CacheEnv {proposalListCache} <- asks vvaCache - mappedAndSortedProposals <- do - proposals <- cacheRequest proposalListCache () Proposal.listProposals - mappedSortedAndFilteredProposals <- mapSortAndFilterProposals selectedTypes sortMode proposals - return $ filter - ( \p@ProposalResponse {proposalResponseId} -> - proposalResponseId `notElem` proposalsToRemove - && isProposalSearchedFor mSearchQuery p - ) mappedSortedAndFilteredProposals - - let total = length mappedAndSortedProposals :: Int - - let elements = take pageSize $ drop (page * pageSize) mappedAndSortedProposals + + proposals <- cacheRequest proposalListCache () (Proposal.listProposals mSearchQuery) + + mappedSortedAndFilteredProposals <- mapSortAndFilterProposals selectedTypes sortMode proposals + let filteredProposals = filter + ( \p@ProposalResponse {proposalResponseId} -> + proposalResponseId `notElem` proposalsToRemove + && isProposalSearchedFor mSearchQuery p + ) mappedSortedAndFilteredProposals + + let total = length filteredProposals :: Int + + let elements = take pageSize $ drop (page * pageSize) filteredProposals return $ ListProposalsResponse { listProposalsResponsePage = fromIntegral page diff --git a/govtool/backend/src/VVA/AdaHolder.hs b/govtool/backend/src/VVA/AdaHolder.hs index 2678717ac..6a2ac3c33 100644 --- a/govtool/backend/src/VVA/AdaHolder.hs +++ b/govtool/backend/src/VVA/AdaHolder.hs @@ -29,9 +29,6 @@ import VVA.Types sqlFrom :: ByteString -> SQL.Query sqlFrom bs = fromString $ unpack $ Text.decodeUtf8 bs -listDRepsSql :: SQL.Query -listDRepsSql = sqlFrom $(embedFile "sql/list-dreps.sql") - getCurrentDelegationSql :: SQL.Query getCurrentDelegationSql = sqlFrom $(embedFile "sql/get-current-delegation.sql") diff --git a/govtool/backend/src/VVA/DRep.hs b/govtool/backend/src/VVA/DRep.hs index 1cb35ffbe..730814e4f 100644 --- a/govtool/backend/src/VVA/DRep.hs +++ b/govtool/backend/src/VVA/DRep.hs @@ -26,7 +26,6 @@ import qualified Data.Text.Encoding as Text import Data.Time import qualified Database.PostgreSQL.Simple as SQL - import VVA.Config import VVA.Pool (ConnectionPool, withPool) import qualified VVA.Proposal as Proposal @@ -36,29 +35,19 @@ import VVA.Types (AppError, DRepInfo (..), DRepRegist sqlFrom :: ByteString -> SQL.Query sqlFrom bs = fromString $ unpack $ Text.decodeUtf8 bs -getVotingPowerSql :: SQL.Query -getVotingPowerSql = sqlFrom $(embedFile "sql/get-voting-power.sql") - -getVotingPower :: - (Has ConnectionPool r, Has VVAConfig r, MonadReader r m, MonadIO m, MonadFail m) => - Text -> - m Integer -getVotingPower drepId = withPool $ \conn -> do - result <- - liftIO - (SQL.query @_ @(SQL.Only Scientific) conn getVotingPowerSql $ SQL.Only drepId) - case result of - [SQL.Only votingPower] -> return $ floor votingPower - [] -> return 0 - listDRepsSql :: SQL.Query listDRepsSql = sqlFrom $(embedFile "sql/list-dreps.sql") listDReps :: (Has ConnectionPool r, Has VVAConfig r, MonadReader r m, MonadIO m) => - m [DRepRegistration] -listDReps = withPool $ \conn -> do - results <- liftIO $ SQL.query_ conn listDRepsSql + Maybe Text -> m [DRepRegistration] +listDReps mSearchQuery = withPool $ \conn -> do + let searchParam = fromMaybe "" mSearchQuery + results <- liftIO $ SQL.query conn listDRepsSql + ( searchParam + , "%" <> searchParam <> "%" + , "%" <> searchParam <> "%" + ) timeZone <- liftIO getCurrentTimeZone return [ DRepRegistration drepHash drepView isScriptBased url dataHash (floor @Scientific deposit) votingPower status drepType txHash (localTimeToUTC timeZone date) metadataError paymentAddress givenName objectives motivations qualifications imageUrl imageHash @@ -95,6 +84,19 @@ listDReps = withPool $ \conn -> do | Data.Maybe.isJust url = DRep ] +getVotingPowerSql :: SQL.Query +getVotingPowerSql = sqlFrom $(embedFile "sql/get-voting-power.sql") + +getVotingPower :: + (Has ConnectionPool r, Has VVAConfig r, MonadReader r m, MonadIO m, MonadFail m) => + Text -> + m Integer +getVotingPower drepId = withPool $ \conn -> do + result <- liftIO (SQL.query @_ @(SQL.Only Scientific) conn getVotingPowerSql $ SQL.Only drepId) + case result of + [SQL.Only votingPower] -> return $ floor votingPower + [] -> return 0 + getVotesSql :: SQL.Query getVotesSql = sqlFrom $(embedFile "sql/get-votes.sql") @@ -105,17 +107,23 @@ getVotes :: m ([Vote], [Proposal]) getVotes drepId selectedProposals = withPool $ \conn -> do results <- liftIO $ SQL.query conn getVotesSql (SQL.Only drepId) - let proposalsToSelect = if null selectedProposals - then [ govActionId | (_, govActionId, _, _, _, _, _, _, _) <- results] - else selectedProposals - proposals <- Proposal.getProposals (Just proposalsToSelect) - let proposalMap = M.fromList $ map (\x -> (proposalId x, x)) proposals - timeZone <- liftIO getCurrentTimeZone - return - ([ Vote proposalId' drepId' vote' url' docHash' epochNo' (localTimeToUTC timeZone date') voteTxHash' - | (proposalId', govActionId', drepId', vote', url', docHash', epochNo', date', voteTxHash') <- results - , govActionId' `elem` proposalsToSelect - ], proposals) + + if null results + then return ([], []) + else do + let proposalsToSelect = if null selectedProposals + then [ govActionId | (_, govActionId, _, _, _, _, _, _, _) <- results] + else selectedProposals + proposals <- if null proposalsToSelect + then return [] + else Proposal.getProposals (Just proposalsToSelect) + let proposalMap = M.fromList $ map (\x -> (proposalId x, x)) proposals + timeZone <- liftIO getCurrentTimeZone + let votes = [ Vote proposalId' drepId' vote' url' docHash' epochNo' (localTimeToUTC timeZone date') voteTxHash' + | (proposalId', govActionId', drepId', vote', url', docHash', epochNo', date', voteTxHash') <- results + , govActionId' `elem` proposalsToSelect + ] + return (votes, proposals) getDRepInfoSql :: SQL.Query getDRepInfoSql = sqlFrom $(embedFile "sql/get-drep-info.sql") diff --git a/govtool/backend/src/VVA/Proposal.hs b/govtool/backend/src/VVA/Proposal.hs index bc9fb6a2d..328b091eb 100644 --- a/govtool/backend/src/VVA/Proposal.hs +++ b/govtool/backend/src/VVA/Proposal.hs @@ -28,10 +28,9 @@ import qualified Data.Text.IO as Text import Data.Time import qualified Database.PostgreSQL.Simple as SQL - -import qualified GHC.Generics as SQL - -import Text.Read (readMaybe) +import qualified Database.PostgreSQL.Simple.Types as PG +import Database.PostgreSQL.Simple.ToField (ToField(..)) +import Database.PostgreSQL.Simple.ToRow (ToRow(..)) import VVA.Config import VVA.Pool (ConnectionPool, withPool) @@ -43,10 +42,15 @@ sqlFrom bs = fromString $ unpack $ Text.decodeUtf8 bs listProposalsSql :: SQL.Query listProposalsSql = sqlFrom $(embedFile "sql/list-proposals.sql") +newtype TextArray = TextArray [Text] + +instance ToRow TextArray where + toRow (TextArray texts) = map toField texts + listProposals :: (Has ConnectionPool r, Has VVAConfig r, MonadReader r m, MonadIO m, MonadFail m, MonadError AppError m) => - m [Proposal] -listProposals = getProposals Nothing + Maybe Text -> m [Proposal] +listProposals mSearch = getProposals (fmap (:[]) mSearch) getProposal :: (Has ConnectionPool r, Has VVAConfig r, MonadReader r m, MonadIO m, MonadFail m, MonadError AppError m) => @@ -54,17 +58,23 @@ getProposal :: Integer -> m Proposal getProposal txHash index = do - result <- getProposals (Just [txHash <> "#" <> pack (show index)]) + let proposalId = txHash <> "#" <> pack (show index) + result <- getProposals (Just [proposalId]) case result of - [] -> throwError $ NotFoundError ("Proposal with id: " <> txHash <> "#" <> pack (show index) <> " not found") + [] -> throwError $ NotFoundError ("Proposal with id: " <> proposalId <> " not found") [a] -> return a - _ -> throwError $ CriticalError ("Multiple proposal found for id: " <> txHash <> "#" <> pack (show index) <> ". This should never happen") + _ -> throwError $ CriticalError ("Multiple proposals found for id: " <> proposalId <> ". This should never happen") getProposals :: (Has ConnectionPool r, Has VVAConfig r, MonadReader r m, MonadIO m, MonadFail m, MonadError AppError m) => - Maybe [Text] -> - m [Proposal] -getProposals mProposalIds = withPool $ \conn -> - liftIO $ case mProposalIds of - Nothing -> SQL.query @(Bool, SQL.In [Text]) conn listProposalsSql (False, SQL.In []) - Just proposalIds -> SQL.query conn listProposalsSql (True, SQL.In proposalIds) + Maybe [Text] -> m [Proposal] +getProposals mSearchTerms = withPool $ \conn -> do + let searchParam = maybe "" head mSearchTerms + liftIO $ SQL.query conn listProposalsSql + ( searchParam + , "%" <> searchParam <> "%" + , "%" <> searchParam <> "%" + , "%" <> searchParam <> "%" + , "%" <> searchParam <> "%" + , "%" <> searchParam <> "%" + ) diff --git a/govtool/backend/vva-be.cabal b/govtool/backend/vva-be.cabal index 29cd2f744..8b750a2b3 100644 --- a/govtool/backend/vva-be.cabal +++ b/govtool/backend/vva-be.cabal @@ -1,6 +1,6 @@ cabal-version: 3.6 name: vva-be -version: 1.0.22 +version: 1.0.23 -- A short (one-line) description of the package. -- synopsis: diff --git a/govtool/frontend/package-lock.json b/govtool/frontend/package-lock.json index 819751b51..bdd0af72b 100644 --- a/govtool/frontend/package-lock.json +++ b/govtool/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "@govtool/frontend", - "version": "1.0.22", + "version": "1.0.23", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@govtool/frontend", - "version": "1.0.22", + "version": "1.0.23", "hasInstallScript": true, "dependencies": { "@emotion/react": "^11.11.1", diff --git a/govtool/frontend/package.json b/govtool/frontend/package.json index f5042b79f..d1892bfe9 100644 --- a/govtool/frontend/package.json +++ b/govtool/frontend/package.json @@ -1,7 +1,7 @@ { "name": "@govtool/frontend", "private": true, - "version": "1.0.22", + "version": "1.0.23", "type": "module", "scripts": { "build": "vite build", @@ -109,5 +109,5 @@ "typescript": "^5.0.2" }, "readme": "ERROR: No README data found!", - "_id": "govtool@1.0.22" + "_id": "govtool@1.0.23" } diff --git a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx index 89b802254..c70ede09a 100644 --- a/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx +++ b/govtool/frontend/src/components/molecules/GovernanceActionCard.tsx @@ -87,14 +87,16 @@ export const GovernanceActionCard: FC = ({ ...props }) => { title={title} isDataMissing={metadataStatus} /> - + {!metadataStatus && ( + + )} = { status?: MetadataValidationStatus; valid: boolean; @@ -15,6 +20,7 @@ export type ValidateMetadataResult = { export type MetadataValidationDTO = { url: string; hash: string; + standard?: MetadataStandard; }; export type DRepMetadata = { diff --git a/govtool/frontend/src/utils/mapDtoToDrep.ts b/govtool/frontend/src/utils/mapDtoToDrep.ts index 923acf546..419973c14 100644 --- a/govtool/frontend/src/utils/mapDtoToDrep.ts +++ b/govtool/frontend/src/utils/mapDtoToDrep.ts @@ -1,4 +1,9 @@ -import { DRepData, DRepMetadata, DrepDataDTO } from "@/models"; +import { + DRepData, + DRepMetadata, + DrepDataDTO, + MetadataStandard, +} from "@/models"; import { postValidate } from "@/services"; import { fixViewForScriptBasedDRep } from "./dRep"; @@ -23,6 +28,7 @@ export const mapDtoToDrep = async (dto: DrepDataDTO): Promise => { const validationResponse = await postValidate({ url: dto.url, hash: dto.metadataHash, + standard: MetadataStandard.CIP119, }); return { ...dto, diff --git a/govtool/frontend/src/utils/mapDtoToProposal.ts b/govtool/frontend/src/utils/mapDtoToProposal.ts index 4c118c294..5324eb342 100644 --- a/govtool/frontend/src/utils/mapDtoToProposal.ts +++ b/govtool/frontend/src/utils/mapDtoToProposal.ts @@ -1,4 +1,9 @@ -import { ProposalData, ProposalDataDTO, ProposalMetadata } from "@/models"; +import { + MetadataStandard, + ProposalData, + ProposalDataDTO, + ProposalMetadata, +} from "@/models"; import { postValidate } from "@/services"; export const mapDtoToProposal = async ( @@ -8,15 +13,18 @@ export const mapDtoToProposal = async ( const validationResponse = await postValidate({ url: dto.url, hash: dto.metadataHash, + standard: MetadataStandard.CIP108, }); return { ...dto, - title: validationResponse.metadata?.title, - abstract: validationResponse.metadata?.abstract, - motivation: validationResponse.metadata?.motivation, - rationale: validationResponse.metadata?.rationale, - references: validationResponse.metadata?.references?.map(({ uri }) => uri), + title: dto.title || validationResponse.metadata?.title, + abstract: dto.abstract || validationResponse.metadata?.abstract, + motivation: dto.motivation || validationResponse.metadata?.motivation, + rationale: dto.rationale || validationResponse.metadata?.rationale, + references: validationResponse.metadata?.references?.map( + ({ uri }) => uri, + ), metadataStatus: validationResponse.status || null, metadataValid: validationResponse.valid, }; diff --git a/govtool/metadata-validation/package-lock.json b/govtool/metadata-validation/package-lock.json index 56f1d2455..a1dbcdbf8 100644 --- a/govtool/metadata-validation/package-lock.json +++ b/govtool/metadata-validation/package-lock.json @@ -1,12 +1,12 @@ { "name": "@govtool/metadata-validation", - "version": "1.0.22", + "version": "1.0.23", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@govtool/metadata-validation", - "version": "1.0.22", + "version": "1.0.23", "license": "UNLICENSED", "dependencies": { "@nestjs/axios": "^3.0.2", diff --git a/govtool/metadata-validation/package.json b/govtool/metadata-validation/package.json index 0a29cf148..4b2624b55 100644 --- a/govtool/metadata-validation/package.json +++ b/govtool/metadata-validation/package.json @@ -1,6 +1,6 @@ { "name": "@govtool/metadata-validation", - "version": "1.0.22", + "version": "1.0.23", "description": "", "author": "", "private": true, diff --git a/govtool/metadata-validation/src/app.service.ts b/govtool/metadata-validation/src/app.service.ts index 1ce809d1b..a948ef173 100644 --- a/govtool/metadata-validation/src/app.service.ts +++ b/govtool/metadata-validation/src/app.service.ts @@ -16,9 +16,11 @@ export class AppService { async validateMetadata({ hash, url, + standard: paramStandard, }: ValidateMetadataDTO): Promise { let status: MetadataValidationStatus; let metadata: Record; + let standard = paramStandard; try { const { data: rawData } = await firstValueFrom( @@ -42,7 +44,9 @@ export class AppService { throw MetadataValidationStatus.INCORRECT_FORMAT; } - const standard = getStandard(parsedData); + if (!standard) { + standard = getStandard(parsedData); + } if (standard) { await validateMetadataStandard(parsedData.body, standard); diff --git a/govtool/metadata-validation/src/dto/validateMetadata.dto.ts b/govtool/metadata-validation/src/dto/validateMetadata.dto.ts index c962d5679..edf5bf55a 100644 --- a/govtool/metadata-validation/src/dto/validateMetadata.dto.ts +++ b/govtool/metadata-validation/src/dto/validateMetadata.dto.ts @@ -1,5 +1,9 @@ +import { MetadataStandard } from '@/types'; + export class ValidateMetadataDTO { hash: string; url: string; + + standard?: MetadataStandard; } diff --git a/govtool/metadata-validation/src/main.ts b/govtool/metadata-validation/src/main.ts index 8183e2676..52cc325b0 100644 --- a/govtool/metadata-validation/src/main.ts +++ b/govtool/metadata-validation/src/main.ts @@ -13,7 +13,7 @@ async function bootstrap() { const config = new DocumentBuilder() .setTitle('Metadata Validation Tool') .setDescription('The Metadata Validation Tool API description') - .setVersion('1.0.22') + .setVersion('1.0.23') .build(); const document = SwaggerModule.createDocument(app, config); diff --git a/tests/govtool-frontend/.gitignore b/tests/govtool-frontend/.gitignore deleted file mode 100644 index 250e6b539..000000000 --- a/tests/govtool-frontend/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -videos -node_modules -screenshots -cypress/fixtures/ diff --git a/tests/govtool-frontend/README.md b/tests/govtool-frontend/README.md deleted file mode 100644 index 32b5389f5..000000000 --- a/tests/govtool-frontend/README.md +++ /dev/null @@ -1,18 +0,0 @@ -GovTool frontend Integration Test -============================= - -## Run tests - -```bash -# install dependencies -yarn - -# run cypress tests -yarn cypress run -``` - -## Run tests in dev environment - -``` -yarn cypress run --env baseUrl=http://localhost:5173,apiUrl=https://govtool.dev.byron.network -``` diff --git a/tests/govtool-frontend/currents.config.js b/tests/govtool-frontend/currents.config.js deleted file mode 100644 index 4ce504e77..000000000 --- a/tests/govtool-frontend/currents.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - projectId: "govtool-frontend", - recordKey: "2a3f6b8c-7d4e-5f1a-9b0c-6d2e3f4a5b6c", - // Sorry Cypress users - set the director service URL - cloudServiceUrl: "https://cypress-director.cardanoapi.io", -}; diff --git a/tests/govtool-frontend/cypress.config.ts b/tests/govtool-frontend/cypress.config.ts deleted file mode 100644 index 9d6301054..000000000 --- a/tests/govtool-frontend/cypress.config.ts +++ /dev/null @@ -1,32 +0,0 @@ -//import { cloudPlugin } from "cypress-cloud/plugin"; - -module.exports = { - projectId: "wg4iq9", - chromeWebSecurity: false, - // experimentalModifyObstructiveThirdPartyCode: true, - env: { - baseUrl: "https://govtool-sanchonet.cardanoapi.io", - apiUrl: "http://govtool-sanchonet.cardanoapi.io/api", - disableSecurityTest: false, // set to true for github-ci - networkId: "testnet", - mobileViewportWidthBreakpoint: 414, - sanchoNet: true, - faucetApiUrl: "https://faucet.sanchonet.world.dev.cardano.org", - blockfrostUrl: "https://cardano-sanchonet.blockfrost.io/api/v0", - blockfrostApiKey: "xxxxxxxxxxxxxxxxxxxx", - kuberApiUrl: "https://sanchonet.kuber.cardanoapi.io", - kuberApiKey: "xxxxxxxxxxxxxx", - }, - e2e: { - supportFile: "./cypress/support/e2e.ts", - setupNodeEvents(on, config) { - on("before:browser:launch", (browser, launchOptions) => { - if (browser.name == "chrome") { - launchOptions.args.push("--disable-gpu"); - } - return launchOptions; - }); - //return cloudPlugin(on, config); - }, - }, -}; diff --git a/tests/govtool-frontend/cypress/constants/governanceActions.ts b/tests/govtool-frontend/cypress/constants/governanceActions.ts deleted file mode 100644 index c0f8e78b8..000000000 --- a/tests/govtool-frontend/cypress/constants/governanceActions.ts +++ /dev/null @@ -1,25 +0,0 @@ -export const governanceActions = [ - "Protocol Parameter Changes", - "New Constitutional Committee or Quorum Size", - "Hard Fork", - "No Confidence", - "Info Action", - "Treasury Withdrawals", - "Update to the Constitution", -]; - -export const governanceSorts = [ - "Soon to Expire", - "Newest First", - "Highest amount of 'Yes' votes", -]; - -export const govActionEnums = { - NewConstitution: "Update to the Constitution", - TreasuryWithdrawals: "Treasury Withdrawals", - HardForkInitiation: "Hard Fork", - ParameterChange: "Protocol Parameter Changes", - InfoAction: "Info Action", - NewCommittee: "New Constitutional Committee or Quorum Size", - NoConfidence: "No Confidence", -}; diff --git a/tests/govtool-frontend/cypress/constants/wallet.ts b/tests/govtool-frontend/cypress/constants/wallet.ts deleted file mode 100644 index 41541bfa4..000000000 --- a/tests/govtool-frontend/cypress/constants/wallet.ts +++ /dev/null @@ -1,187 +0,0 @@ -// Active test wallets - -import { StaticWallet } from "../lib/wallet/types"; - -interface DRepWallets { - dRep1: StaticWallet; - dRep2: StaticWallet; - votedDRep: StaticWallet; -} - -interface AdaHolderWallets { - adaHolder1: StaticWallet; - adaHolder2: StaticWallet; -} - -interface ReferenceWallets { - dRep1: StaticWallet; - dRep2: StaticWallet; -} -export const bootstrapWallet = { - type: "bootstrap", - payment: { - pkh: "b5187cdefbc5b49ddc17b423c079f0717721a03882a3b265bd4c12e0", - private: "11abec096ef0ea7edbeeee01a1a3f0e9f24a7225c2ee99687fb328146fe85ba6", - public: "b6a42d4ccc4d26adaec67e8578bf31f13b1b7e640527356248f2ec547f9de6e4", - }, - stake: { - pkh: "80f326af300273d19d5a541d45baa42ebc04265816735b026b5f34a4", - private: "283fd7625ef596f04f21b50ee14a9f4b49f8b1a6f17773cd2e1e69841a111bc1", - public: "86b08ee3d86cb72d026197a5a710e248d66f28fcff21b4467b75f876b4e6d050", - }, - dRepId: "drep1zg6zq3ku422ppvfm835rnvzf9ckxtzmy3ayjwylck6s4q9zr5ve", - address: - "addr_test1qz63slx7l0zmf8wuz76z8sre7pchwgdq8zp28vn9h4xp9cyq7vn27vqzw0ge6kj5r4zm4fpwhszzvkqkwddsy66lxjjqxnc9zk", -}; - -export const dRepWallets: DRepWallets = { - dRep1: { - type: "dRep", - payment: { - private: - "4f9e979cb0d2c089e319bf81926219957b227d30c5ec7388c2fd14965bdf02c6", - public: - "d06c0c27c1221e83dfe8e31b0f5c01b0d0a3522d6f25711fc02c2b82d4b49ecb", - pkh: "38be1948e77426eaca9f967becc5455b11d3d40fb06b99dd3a817d5e", - }, - stake: { - private: - "b1993b67216233b1a7e4bfccdc5f6677423e923a723d5982f493bc54adad8308", - public: - "cfd1df259612825c55803c6eb8f7ab9189eb9cb16e62f3ed6c238ed1cddfd246", - pkh: "75c7a5e1120727f24236cfb5981ec30fd50a2684a5aca866a123a136", - }, - dRepId: "drep1whr6tcgjqunlys3ke76es8krpl2s5f5y5kk2se4pywsnvnq50c2", - address: - "addr_test1qqutux2gua6zd6k2n7t8hmx9g4d3r575p7cxhxwa82qh6hn4c7j7zys8yleyydk0kkvpasc0659zdp994j5xdgfr5ymqyne2p2", - }, - dRep2: { - type: "dRep", - payment: { - private: - "fdab65ff51d676b549841c3547bbc4d3f692a369d5b7956e66fe93a9468c8475", - public: - "4be92e72827caaa2238954136ff36f8006b170206dde71c228c237916bcf2e63", - pkh: "bb17dbac8d4a3452dbb6d0c664e804deb14a0b95ded5274007189c36", - }, - stake: { - private: - "f0f1afbb745320ac2bbba1c0be816b4156e43c6568c48cc027e2aab4249320fc", - public: - "919d9725e9c97c555bafaf7370a49b0ba45a791cefe728908ed2398ceb47e7ab", - pkh: "41868c2b4e5289022a3a1f6f47f86823bc605c609d2c47a2db58e04a", - }, - dRepId: "", - address: - "addr_test1qza30kav349rg5kmkmgvve8gqn0tzjstjh0d2f6qquvfcdjps6xzknjj3ypz5wsldarls6prh3s9ccya93r69k6cup9qkdtk5x", - }, - votedDRep: { - // voted DRep - type: "dRep", - payment: { - private: - "d64e2f706e416d55fb541081a8852dfcbc7593261cf1526eea357e36772a2e9e", - public: - "f1804c8e90e2931d076ce184e16427f18a379b9da5200d91be862af0a9a3173a", - pkh: "f8e61d5f13ab575771af475ac599ad88c7116339f82d2ea969b0e601", - }, - stake: { - private: - "d24b92d38ad455cd952296ae37fe0d0d0e6458107d65d1b5862a87ccf4da880c", - public: - "17382aab5a8c9f97bf2fa666dadef945f55f81505a58b4199b0f578311dcbd85", - pkh: "d6d84c6a5b05cb8f89d24e9d46926975fa1dc08a58b3c26e96c06df7", - }, - dRepId: "drep16mvyc6jmqh9clzwjf6w5dynfwhapmsy2tzeuym5kcpklwp9myhm", - address: - "addr_test1qruwv82lzw44w4m34ar443ve4kyvwytr88uz6t4fdxcwvqwkmpxx5kc9ew8cn5jwn4rfy6t4lgwupzjck0pxa9kqdhmsunzc7p", - }, -}; - -export const adaHolderWallets: AdaHolderWallets = { - adaHolder1: { - type: "adaHolder", - payment: { - private: - "e21d70800240b9bb1b70c96ef909e96ecb46b83686b9c207e8e45f390daca28a", - public: - "ebddceb301df8a494855cb7e803e6ed95e078d815f4857c8b6d1a15efbd7386d", - pkh: "693e466f25213254e061fdc95f8a5f07bf6ef0de0478adbf89a3308f", - }, - stake: { - private: - "a7bdc3b90734a857bae808a479f88fdf93042ae11eec40e34d672b992ec08bbe", - public: - "d1a955aed30de26f800653beb3bc83a7de578d9c69edde45a35b15a5629e65f2", - pkh: "7c4641296645e557c0a6426e140a09d4ba423d158aba1eae06aba797", - }, - dRepId: "drep103ryz2txghj40s9xgfhpgzsf6jayy0g432apatsx4wnewwgg3qs", - address: - "addr_test1qp5nu3n0y5sny48qv87ujhu2turm7mhsmcz83tdl3x3nprmugeqjjej9u4tupfjzdc2q5zw5hfpr69v2hg02up4t57tstdrzh5", - }, - - adaHolder2: { - type: "adaHolder", - payment: { - private: - "e64d0e806cadd56771d0ec08c8c693212e27d890331462a5520ccb3a0d6b82ee", - public: - "728ce39e7e13d64d84c513d83a280ea03cad27e7fbc30fad4cd9c06ec9725460", - pkh: "d93170064d82eab9dea2b3141bc88503ec80e93c8691fb6b223fe310", - }, - stake: { - private: - "3eb78339bb813aa01ff7b0aaff39a273c5e684ff1fa9def96914d5342b25be76", - public: - "18d08f3178c0b467bd64c4be0509d97e640ac9035ad506e2cadf91b4170527d1", - pkh: "877c17de5bd978526e288334114fada629f699c4e799394aa45c2aad", - }, - dRepId: "drep1gxrgc26w22ysy236rah507rgyw7xqhrqn5ky0gkmtrsy5mn7tul", - address: - "addr_test1qrvnzuqxfkpw4ww752e3gx7gs5p7eq8f8jrfr7mtygl7xyy80stauk7e0pfxu2yrxsg5ltdx98mfn388nyu54fzu92ksmdwpzc", - }, -}; - -// Reference data DRep wallets -export const referenceWallets: ReferenceWallets = { - dRep1: { - type: "dRep", - payment: { - private: - "2aa400c17606fa58df1307e265a070ede1c15df9d8e59683bcd256aefbe689a9", - public: - "de337d365e7cec4f01ec7a9af4c37dd65afca0aaf0fa5c828da6898ca68f1968", - pkh: "93ab1cf6cececd048265573176355a322b7732299bbd624f655af2f6", - }, - stake: { - private: - "7a5eb1dfc051822039b54a782674c527dff8e72f18b44741daa34c13c0440fd0", - public: - "902f3e7c43a26dfcb743d9947fcef3a2c8eb355e6d4a3ca40f299821909644ae", - pkh: "74984fae4ca1715fa1f8759f9d871015ac87f449a85dea6cf9956da1", - }, - dRepId: "drep1wjvyltjv59c4lg0cwk0empcszkkg0azf4pw75m8ej4k6zuqfvt5", - address: - "addr_test1qzf6k88kem8v6pyzv4tnza34tgezkaej9xdm6cj0v4d09an5np86un9pw906r7r4n7wcwyq44jrlgjdgth4xe7v4dkssf9rvq7", - }, - dRep2: { - type: "dRep", - payment: { - private: - "36d51e55069121db833aea2c4564a39a8ef95a5d351b4534bc166eb9789f58ee", - public: - "20b2147d6e596e8d60bbee91c63854afda49b172c0a210181aa7caeb27663fa9", - pkh: "bc032a8614a84f5d9ee772f2788954e9d664b4264226cd36d0c4ddae", - }, - stake: { - private: - "b522fc1a4ca31d1ab3a42f3334fd7eef8faf1e67658da7e45e550a1ff73dfb57", - public: - "1e1f37ff6091ce4cb87905c05e813ca106dd5a6a34b985ff6bc1fedc60a736b1", - pkh: "aa22f3a63400c1d96ad118b5cdd300cd039e83ae1957a35b76488194", - }, - dRepId: "drep14g308f35qrqaj6k3rz6um5cqe5peaqawr9t6xkmkfzqegq53t5z", - address: - "addr_test1qz7qx25xzj5y7hv7uae0y7yf2n5ave95yepzdnfk6rzdmt42yte6vdqqc8vk45gckhxaxqxdqw0g8tse2734kajgsx2qmrj65n", - }, -}; diff --git a/tests/govtool-frontend/cypress/e2e/0_bootstrap.cy.ts b/tests/govtool-frontend/cypress/e2e/0_bootstrap.cy.ts deleted file mode 100644 index 14a6b5796..000000000 --- a/tests/govtool-frontend/cypress/e2e/0_bootstrap.cy.ts +++ /dev/null @@ -1,182 +0,0 @@ -import { - adaHolderWallets, - bootstrapWallet, - dRepWallets, - referenceWallets, -} from "../constants/wallet"; -import { ShelleyWallet } from "../lib/wallet/crypto"; -import { - generateWallets, - registerStake, - setupWallets, -} from "../lib/wallet/setupWallet"; -import { StaticWallet } from "../lib/wallet/types"; -import { pollTx, pollTxWithKuber } from "../services/apiService"; -import kuberService from "../services/kuberService"; -import { loadAmountFromFaucet } from "../services/faucetService"; -import { IFaucetResponse } from "../services/types"; -import { IProposal, IVotedProposal } from "../state/type"; -import { getDRepIDHash, getTxHash, saveWallets } from "../support/utils"; -import { loadAmountFromBootStrapWallet } from "./actions/commonActions"; - -const staticWallets = [ - ...Object.values(dRepWallets), - ...Object.values(adaHolderWallets), - ...Object.values(referenceWallets), -]; - -const bootstrapConfig = { - onTimeWalletSetup: Cypress.env("runOneTimeWalletSetup") || false, - enableStakeRegistrationForStaticWallets: - Cypress.env("enableStakeRegistrationForStaticWallets") || true, -}; -// NOTE This is not for tests. -describe("Bootstrap", () => { - it("Setup mock wallets", () => { - if (!bootstrapConfig.onTimeWalletSetup) return; - - const generateAndRegisterWallets = async () => { - const wallets = await generateWallets(50); - await setupWallets(wallets); - saveWallets(wallets); - }; - cy.wrap(0).then({ timeout: 2 * 60 * 10000 }, async () => - generateAndRegisterWallets() - ); - }); - - it("Load faucet into bootstrap wallet", () => { - cy.wrap(loadAmountFromFaucet(bootstrapWallet.address)).then( - { timeout: 2 * 60 * 1000 }, - async (res: IFaucetResponse) => { - await pollTxWithKuber(res.txid); - } - ); - }); - - it("Load amounts into static wallets", () => { - const staticWalletAddressList = Object.values(staticWallets).map( - (wallet) => wallet.address - ); - cy.wrap(loadAmountFromBootStrapWallet(staticWalletAddressList)).then( - { timeout: 2 * 60 * 1000 }, - async (tx: any) => { - await pollTxWithKuber(tx.txId); - } - ); - }); - - Object.values(staticWallets).forEach((walletJson) => { - it(`Register stake of the static wallet: ${walletJson.type}`, () => { - cy.on("fail", (err) => { - console.log(err); - if (err.message === "Stake already registered") { - return false; - } - }); - cy.wrap(registerStake(ShelleyWallet.fromJson(walletJson)), { - timeout: 2 * 60 * 1000, - }); - }); - }); - - Object.values(referenceWallets).forEach((walletJson: StaticWallet) => { - it(`Clean up reference wallet: ${walletJson.type}`, () => { - cy.on("fail", (err) => { - return false; - }); - cy.wrap( - kuberService.dRepRegistration( - walletJson.address, - walletJson.payment.private, - walletJson.stake.pkh - ) - ).then({ timeout: 2 * 60 * 1000 }, async (tx: any) => { - await pollTxWithKuber(tx.txId); - }); - }); - }); - - it("Setup proposals for voting ", () => { - let notVotedProposals: IProposal[] = []; - let votedProposals: IVotedProposal[] = []; - - const today = new Date(); - const tomorrow = new Date(today); - today.setDate(today.getDate() + 1); - // Creating proposals - cy.log("Creating not voted proposal"); - cy.wrap(0).then({ timeout: 2 * 60 * 1000 }, async () => { - const res = await kuberService.createGovAction(1); - const txHash = getTxHash(res.cborHex); - await pollTxWithKuber(txHash); - notVotedProposals.push({ - id: "1", - txHash: txHash, - index: 0, - type: "Info", - details: "Info", - createdDate: today.toISOString(), - expiryDate: tomorrow.toISOString(), - abstainVotes: 0, - noVote: 0, - metadataHash: - "1111111111111111111111111111111111111111111111111111111111111111", - url: "https://bit.ly/3zCH2HL", - yesVotes: 0, - }); - }); - - cy.log("Creating voted proposal"); - cy.wrap(0).then({ timeout: 2 * 60 * 1000 }, async () => { - const res = await kuberService.createGovAction(1); - const txHash = getTxHash(res.cborHex); - await pollTxWithKuber(txHash); - votedProposals.push({ - proposal: { - id: "1", - txHash: txHash, - index: 0, - type: "Info", - details: "Info", - createdDate: today.toISOString(), - expiryDate: tomorrow.toISOString(), - abstainVotes: 0, - noVote: 0, - metadataHash: - "1111111111111111111111111111111111111111111111111111111111111111", - url: "https://bit.ly/3zCH2HL", - yesVotes: 1, - }, - vote: { - drepId: getDRepIDHash(dRepWallets.votedDRep.dRepId), - metadataHash: - "1111111111111111111111111111111111111111111111111111111111111111", - url: "https://bit.ly/3zCH2HL", - proposalId: "1", - vote: "Yes", - }, - }); - }); - // vote - cy.log("Voting proposal"); - cy.wrap(0).then({ timeout: 2 * 60 * 1000 }, async () => { - const votedDRepWallet = dRepWallets.votedDRep; - const votedProposal = votedProposals[0]; - const res = await kuberService.voteOnProposal( - votedDRepWallet.address, - votedDRepWallet.payment.private, - getDRepIDHash(votedDRepWallet.dRepId), - votedDRepWallet.stake.private, - `${votedProposal.proposal.txHash}#${votedProposal.proposal.index}` - ); - await pollTxWithKuber(res.txId); - }); - cy.writeFile("cypress/fixtures/notVotedProposals.json", notVotedProposals, { - flag: "w", - }); - cy.writeFile("cypress/fixtures/votedProposals.json", votedProposals, { - flag: "w", - }); - }); -}); diff --git a/tests/govtool-frontend/cypress/e2e/1_user_story_wallet_connect.cy.ts b/tests/govtool-frontend/cypress/e2e/1_user_story_wallet_connect.cy.ts deleted file mode 100644 index d0c7d96dd..000000000 --- a/tests/govtool-frontend/cypress/e2e/1_user_story_wallet_connect.cy.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { Logger } from "../lib/logger/logger"; -import { ShelleyWallet } from "../lib/wallet/crypto"; -import { - convertUint8ArrayToHex, - getWebAppNetworkId, - isMobile, -} from "../support/utils"; -import { connectWallet, openMobileDrawer } from "./actions/commonActions"; - -describe("Wallet Connection", () => { - beforeEach(() => { - cy.visit(Cypress.env("baseUrl")); - }); - - it("1A. Should connect wallet and choose stake-key to use", () => { - cy.wrap(0).then(async () => { - const shellyWallet1 = await ShelleyWallet.generate(); - const shellyWallet2 = await ShelleyWallet.generate(); - connectWallet({ - getRegisteredPubStakeKeys: [ - convertUint8ArrayToHex(shellyWallet1.stakeKey.public), - convertUint8ArrayToHex(shellyWallet2.stakeKey.public), - ], - getRewardAddresses: [ - convertUint8ArrayToHex(shellyWallet1.rewardAddressRawBytes(0)), - convertUint8ArrayToHex(shellyWallet2.rewardAddressRawBytes(0)), - ], - }); - }); - }); - - it("1B. Should connect wallet with single stake key", () => { - connectWallet({}); - }); - - it("1C. Should disconnect Wallet When connected ", () => { - connectWallet({}); - - if (isMobile()) { - openMobileDrawer(); - } - cy.getBySel("disconnect-button").click(); - cy.getBySel("disconnect-button").should("not.exist"); - }); - - it("1D. Should check correct network (Testnet/Mainnet) on connection", () => { - const networkId = getWebAppNetworkId(); - const wrongNetwork = networkId == 0 ? 1 : 0; - cy.on("uncaught:exception", (err, runnable) => { - Logger.success("Network mismatch error caught"); - return false; - }); - cy.on("fail", (err, runnable) => { - Logger.success("Assertion error caught"); - return false; - }); - connectWallet({ getNetworkId: wrongNetwork }); - }); -}); diff --git a/tests/govtool-frontend/cypress/e2e/2_user_story_delegate_to_drep.cy.ts b/tests/govtool-frontend/cypress/e2e/2_user_story_delegate_to_drep.cy.ts deleted file mode 100644 index 7cc3c5795..000000000 --- a/tests/govtool-frontend/cypress/e2e/2_user_story_delegate_to_drep.cy.ts +++ /dev/null @@ -1,138 +0,0 @@ -import { generateDRep, getDRepIDHash, isMobile } from "../support/utils"; -import { - connectWallet, - disconnectAndReconnectWallet, - loadWallet, - openMobileDrawer, - viewProposalDetails, -} from "./actions/commonActions"; -import { - checkForDelegationConfirmation, - clickDelegateButton, - delegateToDRepId, - delegateToMyself, -} from "./actions/delegateActions"; -import { - adaHolderWallets, - dRepWallets, - referenceWallets, -} from "../constants/wallet"; -import { retireDRep } from "./actions/dRepActions"; - -describe("Delegation to DRep", () => { - beforeEach(() => { - cy.visit(Cypress.env("baseUrl")); - }); - - it("2A. Should show delegated DRepId on dashboard after delegating", () => { - loadWallet(adaHolderWallets.adaHolder1, { withStakeSigning: true }); - clickDelegateButton(); - delegateToDRepId(referenceWallets.dRep1.dRepId); - checkForDelegationConfirmation(referenceWallets.dRep1.dRepId); - }); - - // Given that I'm an Ada-Holder - it("2B. Should access delegation to dRep page", () => { - connectWallet(); - cy.getBySel("delegate-button").click(); - cy.contains("Delegate to dRep", { matchCase: false }); - }); - - // Given that I'm not connected to the wallet - // User visits the DRep delegation page - it("2C. Verify DRep Behavior in Disconnected State", () => { - cy.getBySel("delegate-connect-wallet-button").click(); - cy.getBySel("connect-your-wallet-modal").should("be.visible"); - }); - - // Given that I'm connected to the wallet as ADA-Holder - // User visits the DRep delegation page - // All delegation actions should be accessible - it("2D. Verify DRep Behavior in Connected State", () => { - loadWallet(referenceWallets.dRep1); - clickDelegateButton(); - - // Verifying Delegation options card - cy.getBySel("delegate-to-drep-card").should("be.visible"); - cy.getBySel("delegate-to-myself-card").should("be.visible"); - cy.contains("Other options").click(); - cy.getBySel("signal-no-confidence-card").should("be.visible"); - cy.getBySel("vote-abstain-card").should("be.visible"); - - // Verifying dRepId delegation - cy.getBySel("delegate-to-drep-card").click(); - cy.getBySel("next-step-button").click(); - cy.getBySel("dRep-id-input").should("be.visible"); - cy.getBySel("delegate-button").should("be.visible"); - }); - - it("2E. Should delegate to myself", () => { - loadWallet(dRepWallets.dRep1, { withStakeSigning: true }); - clickDelegateButton(); - delegateToMyself(); - checkForDelegationConfirmation(dRepWallets.dRep1.dRepId); - }); - - // Given that ADA-Holder has already delegated to a DRep - it("2F. Should change delegated DRep", () => { - loadWallet(adaHolderWallets.adaHolder2, { withStakeSigning: true }); - // delegate - clickDelegateButton(); - delegateToDRepId(referenceWallets.dRep1.dRepId); - checkForDelegationConfirmation(referenceWallets.dRep1.dRepId); - // change delegation - clickDelegateButton(); - delegateToDRepId(referenceWallets.dRep2.dRepId); - checkForDelegationConfirmation(referenceWallets.dRep2.dRepId); - }); - - // Given I'm already registered as DRep - // When pressing retire as dRep button, wallet asks to sign the tx - it("2G. Should verify retire as a DRep", () => { - loadWallet(dRepWallets.dRep1, { withStakeSigning: true }); - cy.getBySel("retire-button").should("be.enabled"); - cy.getBySel("retire-button").click(); - cy.intercept("**/tx/submit").as("submitTx"); - cy.wait("@submitTx").then((res) => { - expect( - res.response.statusCode, - `[Submit Tx error]: ${res.response.body.message}` - ).eq(200); - }); - }); - - // Given that the I'm connected to the wallet with the registered dRep account - it("2H. Verify DRep behavior in Retired State", () => { - loadWallet(dRepWallets.dRep2, { withStakeSigning: true }); - retireDRep(); - disconnectAndReconnectWallet(null, null, { withStakeSigning: true }); - if (isMobile()) { - openMobileDrawer(); - } - cy.getBySel("governance-actions-link").click(); - viewProposalDetails(); - cy.getBySel("vote-button").should("not.exist"); - }); - - // Given that I'm an Ada-Holder - it("2I. Should check validity of DRep Id", () => { - connectWallet(); - const dRep = generateDRep(); - - cy.getBySel("delegate-button").click(); - // not registered dRep id - cy.getBySel("delegate-to-drep-card").click(); - cy.getBySel("next-step-button").click(); - cy.getBySel("dRep-id-input").type(getDRepIDHash(dRep.id)); - cy.getBySel("delegate-button").click(); - cy.contains("DrepId not found", { matchCase: false }).should("exist"); - cy.getBySel("confirm-modal-button").first().click({ force: true }); - cy.getBySel("dRep-id-input").clear(); - // registered dRep id - cy.getBySel("dRep-id-input").type( - getDRepIDHash(referenceWallets.dRep1.dRepId) - ); - cy.getBySel("delegate-button").click(); - cy.contains("DrepId not found", { matchCase: false }).should("not.exist"); - }); -}); diff --git a/tests/govtool-frontend/cypress/e2e/3_user_story_drep_registration.cy.ts b/tests/govtool-frontend/cypress/e2e/3_user_story_drep_registration.cy.ts deleted file mode 100644 index 9730e1af8..000000000 --- a/tests/govtool-frontend/cypress/e2e/3_user_story_drep_registration.cy.ts +++ /dev/null @@ -1,123 +0,0 @@ -import * as crypto from "crypto"; -import { random32BytesHex } from "../support/utils"; -import { - connectWallet, - loadWallet, - waitForTxToComplete, -} from "./actions/commonActions"; -import { - checkForDRepRegistrationConfirmation, - registerAsDRep, -} from "./actions/dRepActions"; -import { - validateDRepMetaHashInput, - validateDRepURLInput, -} from "../support/validations"; -import { - adaHolderWallets, - dRepWallets, - referenceWallets, -} from "../constants/wallet"; - -describe("DRep registration", () => { - beforeEach(() => { - cy.visit(Cypress.env("baseUrl")); - }); - - it("3A. Should show dRepId on dashboard after connecting registered dRep Wallet", () => { - loadWallet(referenceWallets.dRep1); - checkForDRepRegistrationConfirmation(referenceWallets.dRep1.dRepId); - }); - - it("3B. Should access dRep registration page", () => { - connectWallet(); - cy.getBySel("register-button").click(); - cy.contains("Add information", { matchCase: false }); - }); - - it("3C. Should open wallet connection popup, when Register as DRep from wallet unconnected state", () => { - cy.getBySel("register-connect-wallet-button").click(); - cy.getBySel("connect-your-wallet-modal").should("be.visible"); - }); - - // Given that I'm connected to the wallet - // User visits the DRep Registration page - // DRep registration actions should be accessible - it("3D.Should access DRep registration page in Wallet Connected State", () => { - connectWallet(); - cy.getBySel("register-button").click(); - cy.getBySel("url-input").should("be.visible"); - cy.getBySel("hash-input").should("be.visible"); - cy.getBySel("skip-button").should("be.visible"); - }); - - it("3E. Should reject invalid data and accept valid data", () => { - connectWallet(); - cy.getBySel("register-button").click(); - // invalid datas - const longUrl = - "https://ipfs.io/ipfs/" + crypto.randomBytes(32).toString("hex"); - validateDRepURLInput(longUrl); - - const invalidUrl = "abcd"; - validateDRepURLInput(invalidUrl); - - const emptyUrl = " "; - validateDRepURLInput(emptyUrl); - - const invalidHash = "ipfs://" + crypto.randomBytes(32).toString("hex"); - validateDRepMetaHashInput(invalidHash); - - // too short text should be invalid - const tooShortHash = "abcd"; - validateDRepMetaHashInput(tooShortHash); - // empty should be valid - validateDRepMetaHashInput(" "); - - // valid datas - const validUrl = "ipfs://" + crypto.randomBytes(28).toString("hex"); - const validHash = crypto.randomBytes(32).toString("hex"); - cy.getBySel("url-input").type(validUrl); - cy.getBySel("hash-input").type(validHash); - cy.getBySel("confirm-button").should("be.enabled"); - }); - - // Given that I'm an ADA-Holder - // When registering for DRep, wallet asks to sign the tx - it("3F. Should create proper DRep registration request, when registered with data", () => { - cy.intercept("**/utxo?**").as("getUtxos"); - connectWallet(); - cy.getBySel("register-button").click(); - cy.getBySel("url-input").type("https://google.com"); - cy.getBySel("hash-input").type(random32BytesHex()); - cy.getBySel("confirm-button").click(); - cy.getBySel("register-button").click(); - cy.wait("@getUtxos").then((interception) => { - expect(interception.response.body.length).to.equal(0); - }); - }); - - it("3G: Should show confirmation message with link to view transaction, when DRep registration txn is submitted", () => { - loadWallet(adaHolderWallets.adaHolder2); - cy.getBySel("register-button").click(); - cy.getBySel("url-input").type( - "ipfs://" + crypto.randomBytes(28).toString("hex") - ); - cy.getBySel("hash-input").type(random32BytesHex()); - cy.getBySel("confirm-button").click(); - cy.getBySel("register-button").click(); - cy.getBySel("registration-transaction-submitted-modal").should( - "be.visible" - ); - waitForTxToComplete(); - cy.contains("this link"); - }); - - it("3H. Should be able to update metadata.", () => { - loadWallet(dRepWallets.dRep1); - cy.getBySel("change-metadata-button").click(); - cy.getBySel("url-input").type("https://google.com"); - cy.getBySel("hash-input").should("be.visible").type(random32BytesHex()); - cy.getBySel("confirm-button").should("be.enabled"); - }); -}); diff --git a/tests/govtool-frontend/cypress/e2e/4_user_story_governance_action_visibility.cy.ts b/tests/govtool-frontend/cypress/e2e/4_user_story_governance_action_visibility.cy.ts deleted file mode 100644 index b0fbfa29f..000000000 --- a/tests/govtool-frontend/cypress/e2e/4_user_story_governance_action_visibility.cy.ts +++ /dev/null @@ -1,114 +0,0 @@ -import { groupElements } from "../support/utils"; -import { - checkGovernanceActionsVisibility, - visitGovernanceActionsPage, -} from "./actions/governanceActions"; -import { - governanceActions, - governanceSorts, -} from "../constants/governanceActions"; -import { - connectWallet, - filterGovActions, - sortElementByText, - viewProposalDetails, -} from "./actions/commonActions"; -import { validateSort } from "../support/validations"; -import { dRepWallets } from "../constants/wallet"; - -describe("Governance Actions visibility", () => { - beforeEach(() => { - cy.visit(Cypress.env("baseUrl")); - cy.intercept("**/proposal/list").as("getAllProposal"); - }); - - it("4A: Should access Governance Actions page with/without connecting wallet", () => { - // without wallet connection - cy.getBySel("move-to-governance-actions-button").click(); - cy.wait("@getAllProposal", { timeout: 50000 }); - checkGovernanceActionsVisibility(); - - // with wallet connection - cy.visit(Cypress.env("baseUrl")); - connectWallet(); - visitGovernanceActionsPage(); - checkGovernanceActionsVisibility(); - }); - - it("4B: Should restrict voting for users who are not registered as DReps", () => { - cy.getBySel("move-to-governance-actions-button").click(); - viewProposalDetails(); - cy.getBySel("vote-button").should("not.exist"); - }); - - it("4C.1: Should filter Governance Action Type on governance actions page", () => { - cy.intercept(`**/proposal/list?type=*`).as("getFilteredProposals"); - connectWallet(); - visitGovernanceActionsPage(); - cy.getBySel("filters-button").click(); - // single filter - governanceActions.forEach((govAction) => { - filterGovActions([govAction], () => { - cy.wait("@getFilteredProposals"); - }); - }); - - // multiple filters - for (let i = 2; i <= governanceActions.length; i++) { - filterGovActions(governanceActions.slice(0, i), () => { - cy.wait("@getFilteredProposals"); - }); - } - }); - - it("4C.2: Should sort Governance Action Type on governance actions page", () => { - cy.intercept({ method: "GET", url: "**/proposal/list?sort=*" }).as( - "getSortedProposals" - ); - connectWallet(); - visitGovernanceActionsPage(); - cy.getBySel("sort-button").click(); - governanceSorts.forEach((sort) => { - sortElementByText(sort); - cy.wait("@getSortedProposals").then((responseData: any) => { - if (responseData) { - const sortedData = groupElements(responseData.response.body); - validateSort(sortedData); - } - }); - }); - }); - - it("4C.3: Should filter and sort Governance Action Type on governance actions page", () => { - cy.intercept(`**/proposal/list?type=*`).as("getFilteredProposals"); - cy.intercept({ method: "GET", url: "**/proposal/list?type=*sort=*" }).as( - "getFilteredAndSortedProposals" - ); - connectWallet(); - visitGovernanceActionsPage(); - cy.getBySel("filters-button").click(); - // single filter - governanceActions.forEach((govAction) => { - filterGovActions([govAction], () => { - cy.wait("@getFilteredProposals"); - cy.getBySel("sort-button").click(); - governanceSorts.forEach((sort) => { - sortElementByText(sort); - cy.wait("@getFilteredAndSortedProposals").then( - (responseData: any) => { - if (responseData) { - const sortedData = groupElements(responseData.response.body); - validateSort(sortedData); - } - } - ); - }); - cy.getBySel("filters-button").click(); - }); - }); - }); - // Not implemented in FE yet. - it.skip( - "4.D Should only view the proposals that are accepted by the Constitutional Committee." - ); -}); diff --git a/tests/govtool-frontend/cypress/e2e/5_user_story_governance_action_functionality.cy.ts b/tests/govtool-frontend/cypress/e2e/5_user_story_governance_action_functionality.cy.ts deleted file mode 100644 index 2100fbdf4..000000000 --- a/tests/govtool-frontend/cypress/e2e/5_user_story_governance_action_functionality.cy.ts +++ /dev/null @@ -1,177 +0,0 @@ -import { getDRepIDHash, injectOpen } from "../support/utils"; -import { randomBytes } from "crypto"; -import { - castVote, - visitGovernanceActionsPage, -} from "./actions/governanceActions"; -import { - validateDRepMetaHashInput, - validateDRepURLInput, -} from "../support/validations"; -import { - connectWallet, - loadWallet, - viewProposalDetails, -} from "./actions/commonActions"; -import { IProposal } from "../state/type"; -import { dRepWallets } from "../constants/wallet"; - -describe("Governance Action Functionality", () => { - beforeEach(() => { - cy.visit(Cypress.env("baseUrl")); - // stubbing responses - cy.intercept("**/proposal/list", { fixture: "notVotedProposals.json" }); - cy.intercept( - `**/drep/getVotes/${getDRepIDHash(dRepWallets.votedDRep.dRepId)}`, - { fixture: "votedProposals.json" } - ).as("getVotes"); - }); - - it("5A: Should show relevant details about governance action as dRep.", () => { - loadWallet(dRepWallets.dRep1); - visitGovernanceActionsPage(); - - viewProposalDetails(); - cy.contains("Expiry").should("exist"); - cy.contains("Governance Action Type").should("exist"); - cy.get("p:contains(View other details)").should("exist"); - cy.getBySel("vote-button").should("exist"); - cy.getBySel("yes-radio").should("exist"); - cy.getBySel("no-radio").should("exist"); - cy.getBySel("abstain-radio").should("exist"); - }); - - it('5B: Should view "Vote" button on governance action item on registered as DRep', () => { - loadWallet(dRepWallets.dRep1); - visitGovernanceActionsPage(); - - viewProposalDetails(); - cy.getBySel("vote-button").should("exist"); - }); - - it("5C: Should show required field in proposal voting on registered as DRep", () => { - loadWallet(dRepWallets.dRep1); - visitGovernanceActionsPage(); - - viewProposalDetails(); - cy.getBySel("yes-radio").should("exist"); - cy.getBySel("no-radio").should("exist"); - cy.getBySel("abstain-radio").should("exist"); - cy.getBySel("context-button").click(); - cy.getBySel("url-input").should("be.visible"); - cy.getBySel("hash-input").should("be.visible"); - cy.getBySel("yes-radio").click(); - cy.getBySel("vote-button").should("be.enabled"); - }); - - it("5D: Should validate proposal voting", () => { - const invalidURLs = ["testdotcom", "https://testdotcom", "https://test.c"]; - const validURLs = ["https://test.com"]; - loadWallet(dRepWallets.dRep1); - visitGovernanceActionsPage(); - - viewProposalDetails(); - cy.getBySel("context-button").click(); - invalidURLs.forEach((url) => { - validateDRepURLInput(url); - }); - - validURLs.forEach((url) => { - validateDRepURLInput(url, false); - }); - - // invalid hash - const hash20Bytes = randomBytes(20).toString("hex"); - validateDRepMetaHashInput(hash20Bytes); - - const hash32BytesString = randomBytes(32).toString(); - validateDRepMetaHashInput(hash32BytesString); - - // valid hash - const hash32Bytes = randomBytes(32).toString("hex"); - validateDRepMetaHashInput(hash32Bytes, false); - }); - - // The proposals should include following criteria - // The proposals must be already voted by (VotedDRep) - // As a dRep which has already voted - it("5E: Should re-vote with new data on a already voted governance action.", () => { - cy.fixture("votedProposals.json").then((proposals) => { - cy.intercept("**/proposal/list").as("getAllProposal"); - console.log({ proposals }); - const votedProposal: IProposal = proposals[0].proposal; - const proposalID = `${votedProposal.txHash}#${votedProposal.index}`; - loadWallet(dRepWallets.votedDRep, { withStakeSigning: true }); - visitGovernanceActionsPage(); - cy.getBySel("voted-tab").click(); - cy.wait("@getVotes"); - cy.contains("Yes", { matchCase: false }); - cy.getBySel(`govaction-${proposalID}-change-your-vote`).click(); - cy.getBySel("no-radio").click(); - cy.getBySel("context-button").click(); - cy.getBySel("url-input").clear().type("https://test.com"); - cy.getBySel("hash-input").clear().type(randomBytes(32).toString("hex")); - castVote("changeVote"); - cy.getBySel("voted-tab").click(); - cy.wait("@getAllProposal"); - cy.contains("No", { matchCase: false }); - }); - }); - - it("5F: Should show notification of casted vote after vote", () => { - cy.fixture("notVotedProposals.json").then((proposals) => { - const proposalToVote: IProposal = proposals[0]; - const proposalID = `${proposalToVote.txHash}#${proposalToVote.index}`; - loadWallet(dRepWallets.dRep1, { withStakeSigning: true }); - visitGovernanceActionsPage(); - cy.getBySel(`govaction-${proposalID}-view-detail`).click(); - cy.getBySel("context-button").click(); - cy.getBySel("yes-radio").click(); - cy.getBySel("url-input").clear().type("https://test.com"); - cy.getBySel("hash-input").clear().type(randomBytes(32).toString("hex")); - castVote(); - }); - }); - - it.skip( - "5G: Given governance action headline is clicked, JSON metadata url is opened in new tab" - ); - - it.skip( - "5H: Given governance action headline is clicked, warn user to validate the metadata hash themselves" - ); - - it("5I: Should show warning to the users to visit the site at their own risk, when external url is opened", () => { - connectWallet(); - visitGovernanceActionsPage(); - - viewProposalDetails(); - cy.getBySel("view-other-details-button").click(); - cy.getBySel("external-link-modal").should("be.visible"); - }); - - it("5J: Should open a new tab, when external URL is opened", () => { - connectWallet(); - visitGovernanceActionsPage(); - - viewProposalDetails(); - cy.getBySel("view-other-details-button").click(); - cy.getBySel("external-link-modal").should("be.visible"); - let res = injectOpen(); - cy.getBySel("continue-modal-button").click(); - cy.wait(100).then(() => { - expect(res.args[0]).to.exist; - expect(res.args[1]).to.equal("_blank"); - }); - }); - - // Given that I am logged into the app as a dRep - // When I view governance actions I can see which ones I have personally voted on and how I voted - it("5K: Should view the vote details,when viewing governance action already voted by the DRep", () => { - loadWallet(dRepWallets.votedDRep); - visitGovernanceActionsPage(); - - cy.getBySel("voted-tab").click(); - cy.contains("Yes", { matchCase: false }); - }); -}); diff --git a/tests/govtool-frontend/cypress/e2e/6_user_story_miscellaneous.cy.ts b/tests/govtool-frontend/cypress/e2e/6_user_story_miscellaneous.cy.ts deleted file mode 100644 index a74614cf7..000000000 --- a/tests/govtool-frontend/cypress/e2e/6_user_story_miscellaneous.cy.ts +++ /dev/null @@ -1,69 +0,0 @@ -import { injectOpen, isMobile, random32BytesHex } from "../support/utils"; -import * as mockWallet from "../lib/wallet/mockWallet"; -import { - checkInvalidityOfDRepId, - connectWallet, - openMobileDrawer, -} from "./actions/commonActions"; - -describe("Miscellaneous", () => { - beforeEach(() => { - cy.visit(Cypress.env("baseUrl")); - }); - // All testes can be tested for mobile - it.skip("6A: Should be accessible from mobile", () => {}); - - it("6B. Provides error for invalid format", () => { - connectWallet(); - - // invalid dRep id - checkInvalidityOfDRepId("Random values"); - cy.getBySel("confirm-modal-button").first().click({ force: true }); - cy.go(-2); - // invalid dRep registration - cy.getBySel("register-button").click(); - cy.getBySel("url-input").type("abc"); - cy.getBySel("invalid-url-format-error").should("be.visible"); - - cy.getBySel("hash-input").type("abc"); - cy.getBySel("hash-must-be-exactly-64-characters-long-error").should( - "be.visible" - ); - }); - - it("6C. Navigation within the dApp ", () => { - if (isMobile()) { - openMobileDrawer(); - } - cy.getBySel("governance-actions-link").click(); - cy.url().should("include", "/governance_actions"); - if (isMobile()) { - openMobileDrawer(); - } - const res = injectOpen(); - cy.getBySel("guides-link").click(); - cy.wait(100).then(() => { - expect(res.args[1]).to.equal("_blank"); - }); - if (isMobile()) { - openMobileDrawer(); - } - cy.getBySel("faqs-link").click(); - cy.wait(100).then(() => { - expect(res.args[1]).to.equal("_blank"); - }); - if (isMobile()) { - openMobileDrawer(); - } - cy.getBySel("home-link").click(); - cy.url().should("include", "/"); - }); - - it("6D. Proper label and recognition of the testnet network", () => { - connectWallet(); - cy.contains("testnet"); - }); - - //Skipped: Mainnet cannot be connected from testnet - it.skip("6E. Proper label and recognition of the mainnet network"); -}); diff --git a/tests/govtool-frontend/cypress/e2e/actions/cleanUpActions.ts b/tests/govtool-frontend/cypress/e2e/actions/cleanUpActions.ts deleted file mode 100644 index bc0db74d8..000000000 --- a/tests/govtool-frontend/cypress/e2e/actions/cleanUpActions.ts +++ /dev/null @@ -1,94 +0,0 @@ -import { ShelleyWallet } from "../../lib/wallet/crypto"; -import { - CipMethodOverride, - StaticWallet, - WalletParams, -} from "../../lib/wallet/types"; -import { convertUint8ArrayToHex } from "../../support/utils"; -import { disconnectAndReconnectWallet } from "./commonActions"; -import kuberService from "../../services/kuberService"; -import { pollTxWithKuber } from "../../services/apiService"; - -export function cleanUpStaticWallet( - walletJson: StaticWallet, - overrides?: CipMethodOverride, - walletParams?: WalletParams -) { - cy.log(`Check for ${walletJson.type} cleanup.....`); - if (walletJson.type == "dRep") { - cy.get("body").then((bodyElement) => { - const generatedWallet = ShelleyWallet.fromJson(walletJson); - if (bodyElement.find('[data-testid="dRep-id-display"]').length == 0) { - cy.log("DRep clean up process (DRep registration)....."); - registerDRepAndReconnect(generatedWallet, overrides, walletParams); - } - if (bodyElement.find('[data-testid="delegated-to-drep-id"]').length > 0) { - cy.log("AdaHolder clean up process (Abstain delegation)....."); - abstainDelegationAndReconnect(generatedWallet, overrides, walletParams); - } else if ( - bodyElement.find(":contains('ABSTAIN')").length === 0 && - bodyElement.find('[data-testid="change-dRep-button"]').length > 0 - ) { - cy.log("AdaHolder clean up process (Abstain delegation)....."); - abstainDelegationAndReconnect(generatedWallet, overrides, walletParams); - } - }); - } else if (walletJson.type == "adaHolder") { - cy.get("body").then({ timeout: 2 * 60 * 1000 }, (bodyElement) => { - const generatedWallet = ShelleyWallet.fromJson(walletJson); - if (bodyElement.find('[data-testid="dRep-id-display"]').length > 0) { - cy.log("AdaHolder clean up process (DRep de-registration)....."); - deRegisterDRepAndReconnect(generatedWallet, overrides, walletParams); - } - if (bodyElement.find('[data-testid="delegated-to-drep-id"]').length > 0) { - cy.log("AdaHolder clean up process (Abstain delegation)....."); - abstainDelegationAndReconnect(generatedWallet, overrides, walletParams); - } - }); - } -} - -function deRegisterDRepAndReconnect(wallet, overrides, walletParams) { - cy.wrap( - kuberService.dRepDeRegistration( - wallet.addressBech32(0), - convertUint8ArrayToHex(wallet.paymentKey.private), - convertUint8ArrayToHex(wallet.stakeKey.private), - convertUint8ArrayToHex(wallet.stakeKey.pkh) - ) - ).then({ timeout: 5 * 60 * 1000 }, async (tx: any) => { - await pollTxWithKuber(tx.txId); - cy.wait(5000); // Wait for db sync - disconnectAndReconnectWallet(null, overrides, walletParams); - }); -} - -function registerDRepAndReconnect(wallet, overrides, walletParams) { - cy.wrap( - kuberService.dRepRegistration( - wallet.addressBech32(0), - convertUint8ArrayToHex(wallet.paymentKey.private), - convertUint8ArrayToHex(wallet.stakeKey.pkh) - ) - ).then({ timeout: 5 * 60 * 1000 }, async (tx: any) => { - await pollTxWithKuber(tx.txId); - cy.wait(5000); // Wait for db sync - disconnectAndReconnectWallet(null, overrides, walletParams); - }); -} - -function abstainDelegationAndReconnect(wallet, overrides, walletParams) { - cy.wrap( - kuberService.stakeDelegation( - wallet.addressBech32(0), - convertUint8ArrayToHex(wallet.paymentKey.private), - convertUint8ArrayToHex(wallet.stakeKey.private), - convertUint8ArrayToHex(wallet.stakeKey.pkh), - "abstain" - ) - ).then({ timeout: 5 * 60 * 1000 }, async (tx: any) => { - await pollTxWithKuber(tx.txId); - cy.wait(5000); // Wait for db sync - disconnectAndReconnectWallet(null, overrides, walletParams); - }); -} diff --git a/tests/govtool-frontend/cypress/e2e/actions/commonActions.ts b/tests/govtool-frontend/cypress/e2e/actions/commonActions.ts deleted file mode 100644 index bb47fff32..000000000 --- a/tests/govtool-frontend/cypress/e2e/actions/commonActions.ts +++ /dev/null @@ -1,216 +0,0 @@ -import { mkWallet } from "../../lib/wallet/mockWallet"; -import { - CIP30Provider, - CipMethodOverride, - StaticWallet, - WalletParams, -} from "../../lib/wallet/types"; -import { validateFilter } from "../../support/validations"; -import { ShelleyWallet, ShelleyWalletAddress } from "../../lib/wallet/crypto"; -import { mkCardanoWalletExtension } from "../../lib/wallet/cardanoWallet"; -import walletState from "../../state/walletState"; -import { destructWalletArgs, isMobile } from "../../support/utils"; - -import { cleanUpStaticWallet } from "./cleanUpActions"; -import { pollTxWithKuber } from "../../services/apiService"; -import kuberService from "../../services/kuberService"; -import { bootstrapWallet } from "../../constants/wallet"; - -export function injectWallet(wallet: CIP30Provider) { - cy.window().then((w: any) => { - w.cardano = { - demos: wallet || mkWallet(), - }; - }); -} - -export function injectCardanoWallet(wallet: Promise) { - cy.window().then(async (w: any) => { - w.cardano = { - demos: await wallet, - }; - }); -} - -export async function initiateWalletConnection( - overrides?: CipMethodOverride, - walletParams?: WalletParams -): Promise { - const walletToInjected = mkCardanoWalletExtension(overrides, walletParams); - injectCardanoWallet(walletToInjected); - return await walletToInjected; -} - -export async function initializeWallet( - wallet: ShelleyWallet, - overrides?: CipMethodOverride, - walletParams?: WalletParams -): Promise { - return await mkCardanoWalletExtension(overrides, walletParams, wallet); -} - -export function loadAndInjectWallet( - wallet: ShelleyWallet, - overrides?: CipMethodOverride, - walletParams?: WalletParams -) { - injectCardanoWallet(initializeWallet(wallet, overrides, walletParams)); -} - -export function filterGovActions( - govActions: string[], - onFilterCallback?: () => void, - element = "div" -) { - for (const govAction of govActions) { - cy.get(element) - .contains(govAction, { matchCase: false }) - .parent() - .within(() => { - cy.get("input").click(); - // cy.getBySel(`${govAction.replace(/ /g, "")}-checkbox`).click(); - }); - } - onFilterCallback(); - for (const govAction of govActions) { - validateFilter(govAction); - } - // Uncheck the filter after it's completed - for (const govAction of govActions) { - cy.get(element) - .contains(govAction, { matchCase: false }) - .parent() - .within(() => { - cy.getBySel(`${govAction.replace(/ /g, "")}-checkbox`).uncheck(); - }); - } -} - -export function sortElementByText(text: string, element = "span") { - cy.get(element) - .contains(text, { matchCase: false }) - .parent() - .within(() => { - cy.get("input").check(); - }); -} - -export function openMobileDrawer() { - cy.getBySel("open-drawer-button").click({ force: true }); -} - -export function checkInvalidityOfDRepId(invalidDRepId: string) { - cy.getBySel("delegate-button").click(); - cy.getBySel("delegate-to-drep-card").click(); - cy.getBySel("next-step-button").click(); - cy.get("input").type(invalidDRepId); - cy.getBySel("delegate-button").click(); - cy.getBySel("delegation-transaction-error-modal").should("exist"); -} - -export function viewProposalDetails() { - cy.get('[data-testid^="govaction-"][data-testid$="-view-detail"]') - .first() - .click(); -} - -export function disconnectAndReconnectWallet( - walletToInject?: ShelleyWallet, - overrides?: CipMethodOverride, - walletParams?: WalletParams -) { - if (isMobile()) { - openMobileDrawer(); - } - cy.getBySel("disconnect-button").click(); - cy.wrap( - loadAndInjectWallet( - walletToInject || walletState.getWallet(), - overrides, - walletParams - ) - ); - cy.clearCookie(Cypress.env("baseUrl")); - cy.clearLocalStorage(); - cy.getBySel("connect-wallet-button").wait(100).first().click(); - cy.getBySel("demos-wallet-button").eq(1).click({ force: true }); - cy.getBySel("confirm-modal-button").first().click({ force: true }); // accept the info about sancho net}; - cy.wait(6000); // Waiting for wallet initialization -} -export function waitForTxToComplete() { - cy.wrap(0).then({ timeout: 5 * 60 * 1000 }, async () => { - console.log("Waiting for Tx to complete"); - const txHash = walletState.getTxHash(); - if (txHash === undefined) return; - - console.debug("Waiting for tx: " + txHash); - await pollTxWithKuber(txHash); - }); -} - -export function connectWallet(args?: CipMethodOverride & WalletParams) { - const { overrides, walletParams } = destructWalletArgs(args); - cy.wrap(initiateWalletConnection(overrides, walletParams)).then( - { timeout: 5 * 60 * 1000 }, - async (injectedWallet: CIP30Provider) => { - cy.getBySel("connect-wallet-button").wait(100).first().click(); - cy.getBySel("demos-wallet-button").eq(1).click({ force: true }); - // cy.getBySel("demos-wallet-button").click(); - cy.getBySel("confirm-modal-button").first().click({ force: true }); // accept the info about sancho net - const walletInstance = await injectedWallet.enable(); - - // load amount from faucet - if (args && walletParams.loadFundsAndRegister) { - console.debug("Loading faucet..."); - const shellyWalletAddress = ShelleyWalletAddress.fromRawBytes( - await walletInstance.getChangeAddress() - ); - const { txId } = await loadAmountFromBootStrapWallet([ - shellyWalletAddress.toBech32(), - ]); - await pollTxWithKuber(txId); - // await pollTx(txId); - } - // Handle multiple stake keys - if ("cip95" in walletInstance) { - const stakeKeys = - await walletInstance.cip95.getRegisteredPubStakeKeys(); - const rewardAddress = await walletInstance.getRewardAddresses(); - if (stakeKeys.length > 1) { - console.log("Stake Keys:", stakeKeys); - console.log("Reward address:", rewardAddress); - cy.getBySel(`${rewardAddress[0]}-radio`); - cy.contains("Voting power").click(); - cy.getBySel("select-button").click(); - } - } - cy.getBySel("alert-success", { timeout: 6000 }).should("be.visible"); - cy.wait(6000); // Waiting for wallet initialization - } - ); -} - -export const loadWallet = ( - walletJson: StaticWallet, - args?: CipMethodOverride & WalletParams -) => { - cy.log(`Loading ${walletJson.type} wallet`); - const { overrides, walletParams } = destructWalletArgs(args); - const wallet = ShelleyWallet.fromJson(walletJson); - cy.wrap(loadAndInjectWallet(wallet, overrides, walletParams)); - cy.log("Wallet injected"); - cy.getBySel("connect-wallet-button").wait(100).first().click(); - cy.getBySel("demos-wallet-button").eq(1).click({ force: true }); - cy.getBySel("confirm-modal-button").first().click({ force: true }); // accept the info about sancho net}; - cy.getBySel("alert-success", { timeout: 6000 }).should("be.visible"); - cy.wait(6000); // Waiting for wallet initialization - cleanUpStaticWallet(walletJson, overrides, walletParams); -}; - -export async function loadAmountFromBootStrapWallet(addressList: string[]) { - return await kuberService.transferADA( - bootstrapWallet.address, - addressList, - bootstrapWallet.payment.private - ); -} diff --git a/tests/govtool-frontend/cypress/e2e/actions/dRepActions.ts b/tests/govtool-frontend/cypress/e2e/actions/dRepActions.ts deleted file mode 100644 index 5c0e5f0a8..000000000 --- a/tests/govtool-frontend/cypress/e2e/actions/dRepActions.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { waitForTxToComplete } from "./commonActions"; - -export function registerAsDRep() { - cy.getBySel("register-button").click(); - cy.getBySel("skip-button").click(); - cy.getBySel("register-button").click(); - cy.getBySel("registration-transaction-submitted-modal").should("be.visible"); - cy.getBySel("confirm-modal-button").first().click({ force: true }); - waitForTxToComplete(); -} - -export function retireDRep() { - cy.getBySel("retire-button").click(); - cy.intercept("**/tx/submit").as("submitTx"); - cy.wait("@submitTx").then((res) => { - expect( - res.response.statusCode, - `[Submit Tx error]: ${res.response.body.message}` - ).eq(200); - }); - cy.getBySel("retirement-transaction-submitted-modal").should("be.visible"); - cy.getBySel("confirm-modal-button").first().click({ force: true }); - waitForTxToComplete(); - cy.contains("in progress", { timeout: 30 * 1000, matchCase: false }).should( - "not.exist" - ); -} - -export function checkForDRepRegistrationConfirmation(expectedDRepId: string) { - cy.getBySel("dRep-id-display", { timeout: 30 * 1000 }).then(($dRepIdEl) => { - cy.wrap($dRepIdEl).should("contain", expectedDRepId); - }); -} - -export function verifyVoteOnProposal() { - cy.contains("button", "View proposal details", { matchCase: false }).click(); - cy.getBySel("abstain-radio").click(); - cy.getBySel("yes-radio").click(); - cy.getBySel("no-radio").click(); - cy.getBySel("vote-button").should("be.visible"); -} diff --git a/tests/govtool-frontend/cypress/e2e/actions/delegateActions.ts b/tests/govtool-frontend/cypress/e2e/actions/delegateActions.ts deleted file mode 100644 index 6ce50f596..000000000 --- a/tests/govtool-frontend/cypress/e2e/actions/delegateActions.ts +++ /dev/null @@ -1,59 +0,0 @@ -import { waitForTxToComplete } from "./commonActions"; -import { getDRepIDHash } from "../../support/utils"; - -const enum DelegationOptions { - delegateTodRep = "delegate-to-drep-card", - delegateToMyself = "delegate-to-myself", -} - -export function changeDRepDelegation( - dRepId: string, - option: DelegationOptions = DelegationOptions.delegateTodRep -) { - cy.getBySel("change-dRep-button").click(); - delegate(dRepId, option); - waitForTxToComplete(); -} - -export function delegateToDRepId(dRepId: string, convertToHash = true) { - delegate(dRepId, DelegationOptions.delegateTodRep, convertToHash); -} - -export function delegateToMyself() { - delegate("", DelegationOptions.delegateToMyself); -} -function delegate( - dRepId: string, - option: DelegationOptions = DelegationOptions.delegateTodRep, - convertToHash = true -) { - const hashedDRepId = - convertToHash && dRepId !== "" ? getDRepIDHash(dRepId) : dRepId; - - if (option === DelegationOptions.delegateTodRep) { - cy.getBySel("delegate-to-drep-card").click(); - cy.getBySel("next-step-button").click(); - cy.getBySel("dRep-id-input").type(hashedDRepId); - } else if (option === DelegationOptions.delegateToMyself) { - cy.getBySel("delegate-to-myself-card").click(); - } - cy.getBySel("delegate-button").click(); - cy.getBySel("delegation-transaction-submitted-modal").should("be.visible"); - cy.getBySel("confirm-modal-button").first().click({ force: true }); - waitForTxToComplete(); -} - -export function checkForDelegationConfirmation(dRepId: string) { - cy.getBySel("change-dRep-button", { timeout: 30 * 1000 }).should("exist"); - cy.contains(dRepId).should("exist"); -} - -export function clickDelegateButton() { - cy.get("body").then((bodyElement) => { - if (bodyElement.find('[data-testid="delegate-button"]').length > 0) { - cy.getBySel("delegate-button").click(); - } else { - cy.getBySel("change-dRep-button").click(); - } - }); -} diff --git a/tests/govtool-frontend/cypress/e2e/actions/governanceActions.ts b/tests/govtool-frontend/cypress/e2e/actions/governanceActions.ts deleted file mode 100644 index 5ab3810ea..000000000 --- a/tests/govtool-frontend/cypress/e2e/actions/governanceActions.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { governanceActions } from "../../constants/governanceActions"; -import { isMobile } from "../../support/utils"; -import { openMobileDrawer, waitForTxToComplete } from "./commonActions"; - -export function visitGovernanceActionsPage() { - cy.intercept("**/proposal/list").as("getAllProposal"); - if (isMobile()) { - openMobileDrawer(); - } - cy.getBySel("governance-actions-link").click(); - cy.url().should("include", "/governance_actions"); - // Waits for proposals to be loaded for further governance actions functionality - cy.wait("@getAllProposal", { timeout: 5000 }); -} - -function isViewProposalDetailsButtonMissing($slider: any) { - return !( - $slider.find('[data-testid^="govaction-"][data-testid$="-view-detail"]') - .length > 0 - ); -} - -function isExpectedProposalTypeMissing($slide: any) { - for (const type of governanceActions) { - if ($slide.find(`p:contains(${type})`).length > 0) { - return false; - } - } - - return true; -} - -export const checkGovernanceActionsVisibility = () => { - cy.get(".keen-slider") - .find(".keen-slider__slide") - .each(($slide) => { - if ($slide.find("p:contains(Governance Action Type)").length > 0) { - if (isExpectedProposalTypeMissing($slide)) { - throw new Error("Expected proposals are missing"); - } - if (isViewProposalDetailsButtonMissing($slide)) { - throw new Error("View proposal button missing"); - } - } - }); -}; - -export const castVote = (castOption: "newVote" | "changeVote" = "newVote") => { - if (castOption === "changeVote") { - cy.getBySel("change-vote").click(); - } else { - cy.getBySel("vote-button").click(); - } - cy.intercept("**/tx/submit").as("submitTx"); - cy.wait("@submitTx"); - cy.getBySel("alert-success").should("be.visible"); - waitForTxToComplete(); -}; diff --git a/tests/govtool-frontend/cypress/e2e/security/7.1_security_overflow_data_headers.cy.ts b/tests/govtool-frontend/cypress/e2e/security/7.1_security_overflow_data_headers.cy.ts deleted file mode 100644 index 5c8ccb723..000000000 --- a/tests/govtool-frontend/cypress/e2e/security/7.1_security_overflow_data_headers.cy.ts +++ /dev/null @@ -1,143 +0,0 @@ -import { governanceActions } from "../../constants/governanceActions"; -import { - validateDRepMetaHashInput, - validateDRepURLInput, -} from "../../support/validations"; -import { - connectWallet, - disconnectAndReconnectWallet, - viewProposalDetails, -} from "../actions/commonActions"; -import * as crypto from "crypto"; -import { visitGovernanceActionsPage } from "../actions/governanceActions"; -import { ShelleyWallet } from "../../lib/wallet/crypto"; -import { referenceWallets } from "../../constants/wallet"; - -describe("Test for Overflows, Valid/Invalid data and Headers", () => { - if (Cypress.env("disableSecurityTest")) return; - beforeEach(() => { - cy.visit(Cypress.env("baseUrl")); - }); - - // Input Size Testing - it("7.1.1: Should reject excessively long inputs", () => { - // DRep registration - connectWallet(); - cy.getBySel("register-button").click(); - const longInput = "a".repeat(1500); - cy.getBySel("url-input").type(longInput).blur(); - cy.getBySel("hash-input").type(longInput).blur(); - cy.go("back"); - // Search input (Governance actions) - visitGovernanceActionsPage(); - cy.getBySel("search-input").type(longInput).clear().blur(); - - // Vote on Proposal form - disconnectAndReconnectWallet( - ShelleyWallet.fromJson(referenceWallets.dRep1) - ); - visitGovernanceActionsPage(); - viewProposalDetails(); - cy.getBySel("context-button").click(); - cy.getBySel("url-input").type(longInput).blur(); - cy.getBySel("hash-input").type(longInput).blur(); - }); - - // Valid/Invalid Data Testing - it("7.1.2: Should accept valid data and reject the invalid data", () => { - // DRep registration - connectWallet(); - cy.getBySel("register-button").click(); - dRepFormValidation(); - - // Search input (Governance actions) - cy.go("back"); - // Positive data - visitGovernanceActionsPage(); - governanceActions.forEach((action) => { - cy.getBySel("search-input").type(action).blur(); - cy.contains(action); - cy.getBySel("search-input").clear(); - }); - - // Negative data - cy.getBySel("search-input").type("nono").blur(); - cy.contains("There're any Governance Actions yet.").should("be.visible"); - cy.getBySel("search-input").clear(); - - // Vote on Proposal form - viewProposalDetails(); - dRepFormValidation(); - }); - - it("7.1.3.a: Should contain CSP header", () => { - const urlsToTest = ["", "governance_actions"]; - urlsToTest.map((url) => { - cy.request({ - method: "GET", - url: Cypress.env("baseUrl") + url, - }).then((response) => { - expect(response.headers).to.have.property("content-security-policy"); - }); - }); - }); - - it("7.1.3.b: Should handle CORS request properly", () => { - cy.request({ - method: "GET", - url: Cypress.env("apiUrl") + "/proposal/list", - headers: { - Origin: "https://another-origin.com", - }, - }).then((response) => { - expect(response.headers).to.have.property("access-control-allow-origin"); - expect(response.headers).to.not.have.property( - "access-control-allow-origin", - "*" - ); - }); - }); - - it("7.1.3.c: Should match the actual content", () => { - cy.visit(Cypress.env("baseUrl")); - const endPointsContentTypes = [ - { endpoint: "/proposal/list", contentType: "application/json" }, - { endpoint: "/drep/list", contentType: "application/json" }, - ]; - endPointsContentTypes.forEach((endpoint) => { - cy.request(Cypress.env("apiUrl") + endpoint.endpoint).then((response) => { - expect(response.headers).to.have.property("content-type"); - - const contentTypeHeader = response.headers["content-type"]; - expect(contentTypeHeader).to.include(endpoint.contentType); - }); - }); - }); -}); - -const dRepFormValidation = () => { - const invalidUrls = [ - "https://ipfs.io/ipfs/" + crypto.randomBytes(32).toString("hex"), - "abcd", - " ", - ]; - const invalidHashs = [ - "ipfs://" + crypto.randomBytes(32).toString("hex"), - "abcd", - " ", - ]; - const validHash = crypto.randomBytes(32).toString("hex"); - const validUrl = "ipfs://QmXqBdW3t6jFwz3L4pRy7zmZGKEzj7qHpA7ZyG6Zr45nsw"; - - // Negative Tests - invalidUrls.forEach((url) => { - validateDRepURLInput(url); - }); - invalidHashs.forEach((url) => { - validateDRepMetaHashInput(url); - }); - - // Positive Tests - validateDRepURLInput(validUrl, false); - validateDRepMetaHashInput(validHash, false); -}; diff --git a/tests/govtool-frontend/cypress/e2e/security/7.3_security_xss.cy.ts b/tests/govtool-frontend/cypress/e2e/security/7.3_security_xss.cy.ts deleted file mode 100644 index 62798db6b..000000000 --- a/tests/govtool-frontend/cypress/e2e/security/7.3_security_xss.cy.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { referenceWallets } from "../../constants/wallet"; -import { ShelleyWallet } from "../../lib/wallet/crypto"; -import { - connectWallet, - disconnectAndReconnectWallet, - viewProposalDetails, -} from "../actions/commonActions"; -import { visitGovernanceActionsPage } from "../actions/governanceActions"; - -describe("Cross Site Scripting", () => { - if (Cypress.env("disableSecurityTest")) return; - beforeEach(() => { - cy.visit(Cypress.env("baseUrl")); - }); - - // Input Fields Testing - it("7.3.1: Should prevent script from injection in input fields", () => { - connectWallet(); - const script = ""; - // DRep Registration page - cy.getBySel("register-button").click(); - dRepFormXSS(script); - - cy.go("back"); - disconnectAndReconnectWallet( - ShelleyWallet.fromJson(referenceWallets.dRep1) - ); - // Positive data - visitGovernanceActionsPage(); - cy.getBySel("search-input").type(script).blur(); - listenXSSAlert(); - - cy.getBySel("search-input").clear(); - - // Vote on Proposal form - viewProposalDetails(); - cy.getBySel("context-button").click(); - dRepFormXSS(script); - }); - - // Output Rendering Testing - it("7.3.2: Should properly encode or escape user generated content", () => { - const maliciousContent = - "
User-generated content with a
"; - cy.intercept("**/proposal/list", (req) => { - req.continue((res) => { - res.body = [...res.body, { ...res.body[0], type: maliciousContent }]; - }); - }); - - cy.intercept("**/drep/get-voting-power/*", (req) => { - req.continue((res) => { - res.body = maliciousContent; - }); - }); - connectWallet(); - visitGovernanceActionsPage(); - listenXSSAlert(); - }); -}); - -const dRepFormXSS = (script: string) => { - cy.getBySel("url-input").type(script).blur(); - cy.getBySel("hash-input").type("").blur(); - listenXSSAlert(); -}; - -const listenXSSAlert = () => { - cy.on("window:alert", (alertText) => { - throw new Error(`Unexpected alert: ${alertText}`); - }); -}; diff --git a/tests/govtool-frontend/cypress/e2e/security/7.4_sql_injection.cy.ts b/tests/govtool-frontend/cypress/e2e/security/7.4_sql_injection.cy.ts deleted file mode 100644 index 812117913..000000000 --- a/tests/govtool-frontend/cypress/e2e/security/7.4_sql_injection.cy.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { referenceWallets } from "../../constants/wallet"; -import { ShelleyWallet } from "../../lib/wallet/crypto"; -import { - validateDRepMetaHashInput, - validateDRepURLInput, -} from "../../support/validations"; -import { - connectWallet, - disconnectAndReconnectWallet, - viewProposalDetails, -} from "../actions/commonActions"; -import { visitGovernanceActionsPage } from "../actions/governanceActions"; - -const sqlVulnerable = "' OR '1'='1"; -const hexEncodedSqlVulnerable = Buffer.from(sqlVulnerable, "utf-8").toString( - "hex" -); - -describe("SQL Injection", () => { - if (Cypress.env("disableSecurityTest")) return; - beforeEach(() => { - cy.visit(Cypress.env("baseUrl")); - }); - - it("7.4.1: Should prevent SQL Injection in input fields", () => { - connectWallet(); - // DRep registration - cy.getBySel("register-button").click(); - validateDRepURLInput(sqlVulnerable); - validateDRepMetaHashInput(sqlVulnerable); - - cy.go("back"); - - disconnectAndReconnectWallet( - ShelleyWallet.fromJson(referenceWallets.dRep1) - ); - - // Proposal form - visitGovernanceActionsPage(); - viewProposalDetails(); - cy.getBySel("context-button").click(); - cy.getBySel("url-input").type(sqlVulnerable).blur(); - cy.getBySel("hash-input").type(sqlVulnerable).blur(); - }); - - it("7.4.2: Should prevent SQL Injection in query and path parameters", () => { - // Sql injection in proposals query (Governance actions) - checkForSqlVulnerable(`/proposal/list?type=${sqlVulnerable}`); - // Sql injection in sort query (Governance actions) - checkForSqlVulnerable(`/proposal/list?sort=${sqlVulnerable}`); - // Sql injection in get-current-delegation path - checkForSqlVulnerable( - `/ada-holder/get-current-delegation/${hexEncodedSqlVulnerable}` - ); - // Sql injection in adaHolder get-voting-power path - checkForSqlVulnerable( - `/ada-holder/get-voting-delegation/${hexEncodedSqlVulnerable}` - ); - // Sql injection in dRep get-voting-power path - checkForSqlVulnerable( - `/dRep/get-voting-delegation/${hexEncodedSqlVulnerable}` - ); - // Sql injection in dRep get-votes path - checkForSqlVulnerable(`/dRep/getVotes/${hexEncodedSqlVulnerable}`); - }); - - it("7.4.3: Should prevent error based injection", () => { - const sqlInjectionTests = [ - "'", - "' '", - '"', - "“ ”", - "\\", - "\\\\", - "' OR '1", - "' OR 1 -- -", - '" OR "" = "', - '" OR 1 = 1 -- -', - "'='", - "'LIKE'", - "'=0 -- +", - ]; - sqlInjectionTests.forEach((test) => { - // Sql injection in proposals query (Governance actions) - checkForSqlVulnerable(`/proposal/list?type=${test}`); - // Sql injection in sort query (Governance actions) - checkForSqlVulnerable(`/proposal/list?sort=${test}`); - // Sql injection in get-current-delegation path - checkForSqlVulnerable(`/ada-holder/get-current-delegation/${test}`); - // Sql injection injection in adaHolder get-voting-power path - checkForSqlVulnerable(`/ada-holder/get-voting-delegation/${test}`); - // Sql injection injection in dRep get-voting-power path - checkForSqlVulnerable(`/dRep/get-voting-delegation/${test}`); - // Sql injection injection in dRep get-votes path - checkForSqlVulnerable(`/dRep/getVotes/${test}`); - }); - }); -}); - -function checkForSqlVulnerable(path: string) { - cy.request({ - url: Cypress.env("apiUrl") + path, - failOnStatusCode: false, - }).then((resp) => { - console.log(resp); - expect(resp.status).to.eq( - 400, - `[SQL injection] URL:${Cypress.env("apiUrl")}${path}` - ); - }); -} diff --git a/tests/govtool-frontend/cypress/lib/logger/logger.ts b/tests/govtool-frontend/cypress/lib/logger/logger.ts deleted file mode 100644 index 282544bb5..000000000 --- a/tests/govtool-frontend/cypress/lib/logger/logger.ts +++ /dev/null @@ -1,13 +0,0 @@ -export class Logger { - static success(msg: string) { - console.debug(`\x1b[32m✔ ${msg}\x1b[0m`); // Green color - } - - static fail(msg) { - console.debug(`\x1b[33m✖ ${msg}\x1b[0m`); // Orange color - } - - static info(msg: string) { - console.debug(`\x1b[36mℹ ${msg}\x1b[0m`); // Cyan color - } -} diff --git a/tests/govtool-frontend/cypress/lib/wallet/blockfrost.ts b/tests/govtool-frontend/cypress/lib/wallet/blockfrost.ts deleted file mode 100644 index e3ae38d0e..000000000 --- a/tests/govtool-frontend/cypress/lib/wallet/blockfrost.ts +++ /dev/null @@ -1,104 +0,0 @@ -const config = { - apiUrl: "https://cardano-sanchonet.blockfrost.io/api/v0", - apiKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", -}; -export const blockfrost = { - async addresses(addr: string) { - return await getBlockfrost("/addresses/" + addr).catch((e) => { - if (e.status == 404) { - return "00"; - } else { - throw e; - } - }); - }, - async addressesUtxos(addr: string) { - return await getBlockfrost("/addresses/" + addr + "/utxos?order=desc").catch((e) => { - if (e.status == 404) { - return []; - } else { - throw e; - } - }); - }, - async submitTransaction(tx:string){ - return await submitTransaction(Buffer.from(tx,'hex')) - } -}; - -function getAssetDetail(asset: string) { - return getBlockfrost("/assets/" + asset); -} - -function getDatum(hash: string) { - return getBlockfrost("/scripts/datum/" + hash); -} -function getTransactionDetails(txHash: any) { - return getBlockfrost("/txs/" + txHash); -} -function getTransactionUtxos(txHash: any) { - return getBlockfrost("/txs/" + txHash + "/utxos"); -} - -function getTransactions(addr: any) { - return getBlockfrost("/addresses/" + addr + "/utxos"); -} - - -function submitTransaction(txData: any) { - const path = '/tx/submit'; - const method = 'POST'; - const contentType = 'application/cbor'; - - return getBlockfrost(path, method, txData, contentType); - -} - - -async function getBlockfrost(path: any, method: 'GET' | 'POST' = 'GET', body?: BodyInit,contentType?:string) { - const url = config.apiUrl + path; - - const headers: Record = { - project_id: config.apiKey, - }; - if(contentType){ - headers['content-type']=contentType - } - - const options: RequestInit = { - method, - headers, - }; - - if (method === 'POST' ) { - if(body) - options.body = body; - } - - return fetch(url, options).then(async (res) => { - if (res.status === 200) { - return res.json(); - } else { - return res.text().then((txt) => { - let err; - let json: any; - try { - json = JSON.parse(txt); - if (json) { - err = Error( - `BlockfrostApi [Status ${res.status}] : ${ - json.message ? json.message : txt - }` - ); - } else { - err = Error(`BlockfrostApi [Status ${res.status}] : ${txt}`); - } - } catch (e) { - err = Error(`BlockfrostApi [Status ${res.status}] : ${txt}`); - } - err.status = res.status; - throw err; - }); - } - }); -} diff --git a/tests/govtool-frontend/cypress/lib/wallet/cardanoWallet.ts b/tests/govtool-frontend/cypress/lib/wallet/cardanoWallet.ts deleted file mode 100644 index a763850ef..000000000 --- a/tests/govtool-frontend/cypress/lib/wallet/cardanoWallet.ts +++ /dev/null @@ -1,329 +0,0 @@ -import * as blake from "blakejs"; -import { - CIP30Provider, - Cip95Instance, - CipMethodOverride, - WalletParams, -} from "./types"; -import { encode, Decoder, Encoder, addExtension } from "cbor-x"; -import { ShelleyWallet } from "./crypto"; -import walletState from "../../state/walletState"; -import { - cborxDecoder, - cborxEncoder, - getPubDRepIds, - getTxHash, -} from "../../support/utils"; -import { Logger } from "../logger/logger"; -import kuberService, * as kuber from "../../services/kuberService"; -import { KuberValue } from "../../models/types"; -import blockfrostService from "../../services/blockfrostService"; - -class AuxData { - value: any; - constructor(value: any) { - this.value = value; - } -} -// this is required to override default beehaviour of AuxData -addExtension({ - Class: AuxData, - tag: 259, // register our own extension code for 259 tag - encode(instance, encode) { - return encode(instance.value); - }, - decode(data: any) { - return new AuxData(data); - }, -}); - -/** - * Creates a CIP-30 and CIP-95 compliant wallet instance. - * - * @param {ShelleyWallet=} wallet_ - The Shelley wallet to use. If not provided, a new wallet will be generated. - * @param {number=} networkId - The network ID for the wallet (0 for testnet, 1 for mainnet ). - * @param {boolean=} withStakeSigning When set to true, when signing transactions, signature of stakeKey will also be added - * @returns {Promise} A promise that resolves when the CIP-95 wallet is created. - */ - -export async function mkCip95Wallet( - wallet_?: ShelleyWallet, - networkId: number = 0, - withStakeSigning = false, - onSignTxCallback?: any, - onWalletInitialized?: any -) { - const wallet = wallet_ || (await ShelleyWallet.generate()); - const walletAddress = wallet.addressBech32(networkId); - // Setting wallet state for further use - onWalletInitialized && - onWalletInitialized({ - wallet, - stakePkh: Buffer.from(wallet.stakeKey.pkh).toString("hex"), - signingKey: Buffer.from(wallet.paymentKey.private).toString("hex"), - address: walletAddress, - }); - console.debug("Wallet address:" + walletAddress); - const walletAddressRaw = Buffer.from(wallet.addressRawBytes(networkId)); - const walletAddressHex = walletAddressRaw.toString("hex"); - - const rewardAddr = Buffer.from( - wallet.rewardAddressRawBytes(networkId) - ).toString("hex"); - const stakePublicKey = Buffer.from(wallet.stakeKey.public).toString("hex"); - const dRepDetails = getPubDRepIds(stakePublicKey); - console.debug("Injected Wallet DRepIds: " + JSON.stringify(dRepDetails)); - const walletInstance: Cip95Instance & { - experimental: Record; - } = { - getBalance: async () => { - const apiResponse = await blockfrostService.addresses(walletAddress); - return Buffer.from(encode(amountToObject(apiResponse.amount))).toString( - "hex" - ); - }, - - submitTx: async (tx) => { - console.debug("[CardanoWallet] SubmittingTx: ", tx); - return await kuberService.submitTransaction(tx).then(async (res) => { - expect(res.status).eq(200); - return getTxHash(tx); - // if (res.status <= 200 || res.status <= 299) { - // await blockfrost.submitTransaction(tx).catch(e=>{ - // console.log("Ignoring transaction submission error on blockfrost") - // }); - // } - }); - }, - getUtxos: (p1, p2) => - getUtxosKuber(walletAddress, walletAddressRaw, p1, p2), - getUsedAddresses: async () => [walletAddressHex], - getUnusedAddresses: async () => [walletAddressHex], - getChangeAddress: async () => walletAddressHex, - getRewardAddresses: async () => [rewardAddr], - getNetworkId: async () => networkId, - experimental: { - on: (eventName, callback) => { - return; - }, - off: (eventName, callback) => { - return; - }, - getCollateral: () => { - return ""; - }, - }, - cip95: { - getPubDRepKey: async () => stakePublicKey, - getUnregisteredPubStakeKeys: async () => [stakePublicKey], - getRegisteredPubStakeKeys: async () => [stakePublicKey], - }, - // CIP-95 ----------------------------- - getActivePubStakeKeys: async () => [rewardAddr], - - signTx: async (tx, partialSign) => { - // decode transaction body and calculate hash - let decodedTx = cborxDecoder.decode(Buffer.from(tx, "hex")); - const reEncodedTx = Buffer.from(cborxEncoder.encode(decodedTx)).toString( - "hex" - ); - - if (tx != reEncodedTx) { - console.warn("[CardanoWallet] Re-encoded tx is not same"); - console.warn("[CardanoWallet] Starting Tx", tx); - console.warn("[CardanoWallet] Re-Encoded Tx", reEncodedTx); - } - - const txbody = Uint8Array.from(cborxEncoder.encode(decodedTx[0])); - const txHash = blake.blake2b(txbody, undefined, 32); - Logger.success( - "[CardanoWallet] Signing Tx hash=" + Buffer.from(txHash).toString("hex") - ); - - // sign the transaction hash with payment key - const paymentKeySig = await wallet.paymentKey.signRaw(txHash); - - // create witness set object - const witness = new Map(); - const vkeyWitnesses = [[wallet.paymentKey.public, paymentKeySig]]; - - // encode witness set to cbor hex and return - if (withStakeSigning) { - Logger.success("Signing stake key..."); - const stakeKeySig = await wallet.stakeKey.signRaw(txHash); - vkeyWitnesses.push([wallet.stakeKey.public, stakeKeySig]); - } - - witness.set(0, vkeyWitnesses); - - if (onSignTxCallback) { - onSignTxCallback(Buffer.from(txHash).toString("hex")); - } - return Buffer.from(cborxEncoder.encode(witness)).toString("hex"); - }, - - signData: async (address, payload) => { - return ""; - }, - getExtensions: () => [{ cip: 95 }], - }; - return walletInstance; -} - -/** - * Creates a Cardano Wallet Extension with CIP-95 compliance and optional overrides. - * the returned object can be injected to `window.cardano.demos` for testing wallet extension feature. - * - * @param {CipMethodOverride=} overrides - Optional overrides for CIP-20 and cip95 overrides. - * @param {ShelleyWallet=} shellyWallet - Optional Shelley wallet to use in the extension. - * @param {boolean=} withStakeSigning When set to true, when signing transactions, signature of stakeKey will also be added - * @returns {Promise} A promise that resolves with the created CIP-30 provider. - */ - -export async function mkCardanoWalletExtension( - overrides?: CipMethodOverride, - walletParams?: WalletParams, - shellyWallet?: ShelleyWallet -): Promise { - let extension = await mkCip95Wallet( - shellyWallet, - 0, - walletParams?.withStakeSigning, - walletParams?.onTxSign, - walletParams?.onWalletInitialized - ); - - let result = { ...extension }; - - if (overrides) { - Object.keys(overrides).forEach((k) => { - if (result[k]) { - console.debug( - "[CardanoWallet] Overriding", - k, - "to", - typeof overrides[k], - overrides[k] - ); - result[k] = async () => overrides[k]; - } - if (result.cip95 && result.cip95[k]) { - result.cip95[k] = async () => overrides[k]; - } - }); - } - let enabled = false; - - return { - apiVersion: "1.3.1", - icon: "data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3Csvg viewBox='0 0 500 500' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='309.36' y='12.441' width='121.115' height='472.347' style='fill: rgb(128 177 211)%3B'/%3E%3Cellipse style='fill: rgb(128 177 211)%3B' cx='231.272' cy='320.966' rx='171.791' ry='137.051'/%3E%3C/svg%3E", - - enable: async function () { - console.debug("[Cardano Wallet] Enable called"); - enabled = true; - return result; - }, - - isEnabled: async function () { - return enabled; - }, - - name: "Demos", - - supportedExtensions: [ - { - cip: 95, - }, - ], - }; -} - -// convert MultiAsset Value from blockfrost for cbor encoding as per the ledger cddl -function amountToObject( - amount -): [BigInt, Map>] | BigInt { - let lovelace: BigInt; - let assets: Map> = new Map(); - amount.forEach((a) => { - if (a.unit == "lovelace") { - lovelace = BigInt(a.quantity); - } else { - let policy = a.unit.substring(0, 56); - let tokenName = a.unit.substring(56, a.unit.length); - if (assets.has(policy)) { - assets.get(policy).set(tokenName, BigInt(a.quantity)); - } else { - let quantityMap = new Map(); - quantityMap.set(tokenName, BigInt(a.quantity)); - assets.set(policy, quantityMap); - } - } - }); - if (assets.size > 0) { - return [lovelace, assets]; - } else { - return lovelace; - } -} - -const getUtxosBlockfrost = async ( - walletAddress, - walletAddressRaw, - amount, - paginate -) => { - const apiResponse = await blockfrostService.addressesUtxos(walletAddress); - - return apiResponse.map((utxo, idx) => { - return Buffer.from( - cborxEncoder.encode([ - [Buffer.from(utxo.tx_hash, "hex"), utxo.output_index], - [walletAddressRaw, amountToObject(utxo.amount)], - ]) - ).toString("hex"); - }); -}; - -const getUtxosKuber = async ( - walletAddress, - walletAddressRaw, - amount, - paginate -) => { - function kuberValuetoObject( - value: KuberValue - ): [bigint, Map>] | bigint { - const lovelace = BigInt(value.lovelace as bigint | number | string); - let assets: Map> = new Map(); - for (let policy in value) { - const assetMap = value[policy] as Record; - for (let tokenName in assetMap) { - if (assets.has(policy)) { - assets.get(policy).set(tokenName, BigInt(assetMap[tokenName])); - } else { - let quantityMap = new Map(); - quantityMap.set(tokenName, BigInt(assetMap[tokenName])); - assets.set(policy, quantityMap); - } - } - } - - if (assets.size > 0) { - return [lovelace, assets]; - } else { - return lovelace; - } - } - - const apiResponse = await kuberService.queryUtxos(walletAddress); - let result = []; - return apiResponse.map((utxo) => { - const txin = utxo.txin.split("#"); - return Buffer.from( - cborxEncoder.encode([ - [Buffer.from(txin[0], "hex"), BigInt(txin[1])], - [walletAddressRaw, kuberValuetoObject(utxo.value)], - ]) - ).toString("hex"); - }); -}; diff --git a/tests/govtool-frontend/cypress/lib/wallet/crypto.ts b/tests/govtool-frontend/cypress/lib/wallet/crypto.ts deleted file mode 100644 index 08db7de1e..000000000 --- a/tests/govtool-frontend/cypress/lib/wallet/crypto.ts +++ /dev/null @@ -1,253 +0,0 @@ -import * as ed from "@noble/ed25519"; -import { bech32 } from "bech32"; -import * as blake from "blakejs"; - -const KEYHASH_LENGTH = 28; -const ADDR_LENGTH = KEYHASH_LENGTH * 2 + 1; - -// Stores ed25519 KeyPair and hash of publicKey -export class Ed25519Key { - private: Uint8Array; - public: Uint8Array; - pkh: Uint8Array; - - private constructor(priv: Uint8Array, pub: Uint8Array, pkh: Uint8Array) { - this.private = priv; - this.public = pub; - this.pkh = pkh; - } - public static async generate() { - const privKey = ed.utils.randomPrivateKey(); // Secure random private key - return await Ed25519Key.fromPrivateKey(privKey); - } - - public static async fromPrivateKey(privKey: Uint8Array) { - const pubKey = await ed.getPublicKeyAsync(privKey); - const pkh = blake.blake2b(pubKey, undefined, KEYHASH_LENGTH); - const key = new Ed25519Key(privKey, pubKey, pkh); - console.log("loaded", "Ed25519Key", key.json()); - return key; - } - public static async fromPrivateKeyHex(privKey) { - return await Ed25519Key.fromPrivateKey( - Uint8Array.from(Buffer.from(privKey, "hex")) - ); - } - - public bech32Pkh(prefix: string = "stake"): string { - return bech32.encode(prefix, bech32.toWords(this.pkh)); - } - public bech32PublicKey(prefix: string = "vk_"): string { - return bech32.encode(prefix, bech32.toWords(this.public)); - } - public bech32PrivateKey(prefix: string = "sk_"): string { - return bech32.encode(prefix, bech32.toWords(this.private)); - } - public async signRaw(message: Uint8Array) { - return await ed.signAsync(message, this.private); - } - public async verify(message, signature) { - return await ed.verifyAsync(signature, message, this.public); - } - - public json() { - return { - private: Buffer.from(this.private).toString("hex"), - public: Buffer.from(this.public).toString("hex"), - pkh: Buffer.from(this.pkh).toString("hex"), - }; - } - public static fromJson(json: any): Ed25519Key { - if (!json || typeof json !== "object") { - throw new Error( - "Invalid JSON format for Ed25519Key: Input must be a non-null object." - ); - } - - if (!json.private || !json.public || !json.pkh) { - throw new Error( - "Invalid JSON format for Ed25519Key: Missing required fields (private, public, or pkh)." - ); - } - - return new Ed25519Key( - Uint8Array.from(Buffer.from(json.private, "hex")), - Uint8Array.from(Buffer.from(json.public, "hex")), - Uint8Array.from(Buffer.from(json.pkh, "hex")) - ); - } -} - -// Shelley Wallet has 2 ed25519 key pair -// - one for payment purpose -// - one for staking/governance purpose -export class ShelleyWallet { - paymentKey: Ed25519Key; - stakeKey: Ed25519Key; - - public constructor(payment, stake) { - this.paymentKey = payment; - this.stakeKey = stake; - } - - public static async generate() { - const wallet = new ShelleyWallet( - await Ed25519Key.generate(), - await Ed25519Key.generate() - ); - console.log("generated", "Ed25519Key", wallet); - return wallet; - } - - addressBech32(networkId: number): string { - const prefix = networkId == 0 ? "addr_test" : "addr"; - return bech32.encode( - prefix, - bech32.toWords(Buffer.from(this.addressRawBytes(networkId))), - 200 - ); - } - - addressRawBytes(networkId) { - const concatenatedArray1 = new Uint8Array(ADDR_LENGTH); - concatenatedArray1[0] = networkId; - concatenatedArray1.set(this.paymentKey.pkh, 1); - concatenatedArray1.set(this.stakeKey.pkh, KEYHASH_LENGTH + 1); - return concatenatedArray1; - } - rewardAddressRawBytes(network: number) { - const rewardAccountPrefix = 0xe0; - const header = network | rewardAccountPrefix; - const result = new Uint8Array(KEYHASH_LENGTH + 1); - result[0] = header; - result.set(this.stakeKey.pkh, 1); - return result; - } - - rewardAddressBech32(networkId: number): string { - const prefix = networkId == 0 ? "stake_test" : "stake"; - return bech32.encode( - prefix, - bech32.toWords(Buffer.from(this.rewardAddressRawBytes(networkId))), - 200 - ); - } - public json() { - return { - payment: this.paymentKey.json(), - stake: this.stakeKey.json(), - }; - } - - public static fromJson(obj: { - payment: object; - stake: object; - }): ShelleyWallet { - if (!obj || typeof obj !== "object") { - throw new Error("ShelleyWallet.fromJson: The input must be an object."); - } - - const paymentKey = obj.payment; - const stakeKey = obj.stake; - - if (!paymentKey || typeof paymentKey !== "object") { - throw new Error( - "ShelleyWallet.fromJson : Invalid payment key: It must be an object." - ); - } - - if (!stakeKey || typeof stakeKey !== "object") { - throw new Error( - "ShelleyWallet.fromJson : Invalid stake key: It must be an object." - ); - } - return new ShelleyWallet( - Ed25519Key.fromJson(paymentKey), - Ed25519Key.fromJson(stakeKey) - ); - } - - public static dummy(): ShelleyWallet { - return ShelleyWallet.fromJson({ - payment: { - pkh: "595ac9bbf256bae584f56a4b671baa4b14a18c8098b8e571834bc12c", - private: - "5a1380cd79ecaee48d66c14f7d92ddfc866490a3b59d44520e60f16309c8a17d", - public: - "8d2f4d49118eb1156048b66dd6372cdb1f82da0f8e208d9f8ea4b388c79c09ad", - }, - stake: { - pkh: "6706efab75778c2f08b9a5321ead8bfc982a5c08b51a0b2a713cac52", - private: - "24e8c012c7bef2f5823baef1c06dac253da860a43f0d1f43fc3c8349a4f719a1", - public: - "f7a1eaea2691ee80b6c0d6f27482145d7037055829b1b26224a5d8f0c2243f16", - }, - }); - } -} - -export interface Address { - toBech32(): string; - toRawBytes(): Uint8Array; - toRawBytesHex(): string; -} -export class ShelleyWalletAddress implements Address { - paymentKeyHash: Uint8Array; - stakeKeyHash: Uint8Array; - network: number; - - private constructor( - network: number | "mainnet" | "testnet", - pkh: Uint8Array, - skh: Uint8Array - ) { - this.network = - network == "mainnet" ? 1 : network == "testnet" ? 0 : network; - this.paymentKeyHash = pkh; - this.stakeKeyHash = skh; - } - public static fromRawBytes(bytea: Uint8Array | string | Buffer) { - let bytebuffer: Buffer; - if (bytea.length == ADDR_LENGTH * 2 && typeof bytea == "string") { - bytebuffer = Buffer.from(bytea, "hex"); - } else { - if (bytea.length !== ADDR_LENGTH) { - throw Error( - "ShelleyAddress.fromRawBytes: Invalid byte array length. expected: " + - ADDR_LENGTH + - " got: " + - bytea.length - ); - } - bytebuffer = Buffer.from(bytea); - } - - let paymentKeyHash = bytebuffer.subarray(1, 29); - let stakeKeyHash = bytebuffer.subarray(29, ADDR_LENGTH); - - return new ShelleyWalletAddress( - bytebuffer.at(0), - paymentKeyHash, - stakeKeyHash - ); - } - toBech32(): string { - const prefix = this.network == 0 ? "addr_test" : "addr"; - return bech32.encode( - prefix, - bech32.toWords(Buffer.from(this.toRawBytes())), - 200 - ); - } - toRawBytes(): Uint8Array { - const rawBytes = new Uint8Array(ADDR_LENGTH); - rawBytes[0] = this.network; - rawBytes.set(this.paymentKeyHash, 1); - rawBytes.set(this.stakeKeyHash, KEYHASH_LENGTH + 1); - return rawBytes; - } - toRawBytesHex(): string { - return Buffer.from(this.toRawBytes()).toString("hex"); - } -} diff --git a/tests/govtool-frontend/cypress/lib/wallet/mockWallet.ts b/tests/govtool-frontend/cypress/lib/wallet/mockWallet.ts deleted file mode 100644 index 7398399ac..000000000 --- a/tests/govtool-frontend/cypress/lib/wallet/mockWallet.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { randomBytes } from "crypto"; -import { CIP30Provider, Cip95Instance, CipMethodOverride } from "./types"; - -export const mockUserStakeKeys = [ - "012f5dc3125b8a07981e6e50f5a671e2c6fbb26c3ffde1cd1dcaf40a7fe8f160", - "012f5dc3115b8a07981e6e50f5a671e2c6fbb26c3ffde1cd1dcaf40a7fe8f160", -]; -export const mockUserDrepKey = randomBytes(32).toString("hex"); -export const mockUserAddress = - "000fdc780023d8be7c9ff3a6bdc0d8d3b263bd0cc12448c40948efbf42e557890352095f1cf6fd2b7d1a28e3c3cb029f48cf34ff890a28d176"; -export let networkId: number = Cypress.env("networkId"); -networkId = - (networkId as unknown as string).toLowerCase() == "testnet" || networkId == 0 - ? 0 - : 1; - -const walletInstance: Cip95Instance & { - experimental: Record; -} = { - getBalance: async () => { - return "10000000"; - }, - submitTx: async (tx) => { - return; - }, - getUtxos: async (amount, paginate) => { - return [ - "8282582018BC892DF1A4CF0D1B388A684D287304A500D7EEDB4D35D5CAB7C8922503A6E0008258390036E0CF1E52E05EF92E52C7BC2A04493D6BAE481B8ACBAB12EC4300D7F9C9E87246D2F0373885896AD2804B7229673204CAC9208345C1EA5B1B00000002540BE400", - ]; - }, - getUsedAddresses: async () => [mockUserAddress], - getUnusedAddresses: async () => [], - getChangeAddress: async () => - "000fdc780023d8be7c9ff3a6bdc0d8d3b263bd0cc12448c40948efbf42e557890352095f1cf6fd2b7d1a28e3c3cb029f48cf34ff890a28d176", - getRewardAddresses: async () => [ - "e0e557890352095f1cf6fd2b7d1a28e3c3cb029f48cf34ff890a28d176", - ], - getNetworkId: async () => networkId, - experimental: { - on: (eventName, callback) => { - return; - }, - off: (eventName, callback) => { - return; - }, - getCollateral: () => { - return ""; - }, - }, - // CIP-95 ----------------------------- - cip95: { - getPubDRepKey: async () => mockUserDrepKey, - getRegisteredPubStakeKeys: async () => mockUserStakeKeys, - getUnregisteredPubStakeKeys: async () => mockUserStakeKeys, - }, - getActivePubStakeKeys: async () => mockUserStakeKeys, - // getUnregisteredPubStakeKeys: async () => mockUserStakeKeys, - signTx: async (tx, partialSign) => { - return "a10081825820b004cba76275ee90b44de0bee3edf2f69b77a3936c59879536bd0d3fcbc25e635840ae41c154e42fe3ad56ecc040f51e7488c5851b129194362a7d35c08f8c4ca86f7b8e1a4ba53ee59d6d4ee0a0b90816702f7af3877235e281fee122c4d21c7e04"; - }, - signData: async (address, payload) => { - return ""; - }, - getExtensions: () => [{ cip: 95 }], -}; -export function mkSingleStakeKeyWallet() { - return mkWallet({ getUnregisteredPubStakeKeys: [mockUserStakeKeys[0]] }); -} - -export function mkWallet(overrides?: CipMethodOverride): CIP30Provider { - let result = { ...walletInstance }; - if (overrides) { - Object.keys(overrides).forEach((k) => { - if (result[k]) { - // console.log("Overriding", k, "to", typeof overrides[k], overrides[k]); - result[k] = async () => overrides[k]; - } - if (result.cip95 && result.cip95[k]) { - result.cip95[k] = async () => overrides[k]; - } - }); - } - let enabled = false; - return { - apiVersion: "1.3.1", - icon: "data:image/svg+xml,%3C%3Fxml version='1.0' encoding='utf-8'%3F%3E%3Csvg viewBox='0 0 500 500' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='309.36' y='12.441' width='121.115' height='472.347' style='fill: rgb(128 177 211)%3B'/%3E%3Cellipse style='fill: rgb(128 177 211)%3B' cx='231.272' cy='320.966' rx='171.791' ry='137.051'/%3E%3C/svg%3E", - - enable: async function () { - enabled = true; - return result; - }, - isEnabled: async function () { - return enabled; - }, - name: "Demos", - supportedExtensions: [ - { - cip: 95, - }, - ], - }; -} diff --git a/tests/govtool-frontend/cypress/lib/wallet/setupWallet.ts b/tests/govtool-frontend/cypress/lib/wallet/setupWallet.ts deleted file mode 100644 index cc731e466..000000000 --- a/tests/govtool-frontend/cypress/lib/wallet/setupWallet.ts +++ /dev/null @@ -1,67 +0,0 @@ -import { bootstrapWallet } from "../../constants/wallet"; -import { pollTxWithKuber } from "../../services/apiService"; -import kuberService from "../../services/kuberService"; -import { Logger } from "../logger/logger"; -import { ShelleyWallet } from "./crypto"; - -export async function generateWallets( - numWallets: number = 100 -): Promise { - const wallets: ShelleyWallet[] = []; - - for (let i = 0; i < numWallets; i++) { - const wallet = await ShelleyWallet.generate(); - wallets.push(wallet); - } - - return wallets; -} -// check if the stake is registered - -export async function setupWallets(wallets: ShelleyWallet[]) { - if (wallets.length === 0) { - throw new Error("No wallets to load balance"); - } - - const signingKey = bootstrapWallet.payment.private; - await kuberService.initializeMultipleWallets( - bootstrapWallet.address, - signingKey, - wallets - ); - Logger.success(`[Setup Wallet] Successfully setup ${wallets.length} wallets`); -} - -export async function registerStake(wallet: ShelleyWallet) { - const { stakeKey, paymentKey } = wallet; - const hexPaymentObj = { - pkh: Buffer.from(paymentKey.pkh).toString("hex"), - private: Buffer.from(paymentKey.private).toString("hex"), - public: Buffer.from(paymentKey.public).toString("hex"), - }; - const hexStakeObj = { - pkh: Buffer.from(stakeKey.pkh).toString("hex"), - private: Buffer.from(stakeKey.private).toString("hex"), - public: Buffer.from(stakeKey.public).toString("hex"), - }; - const address = wallet.addressBech32(0); - - try { - const { cbor, txId } = await kuberService - .registerStake( - hexStakeObj.private, - hexStakeObj.pkh, - hexPaymentObj.private, - address - ) - .catch((err) => { - if (err.status === 400) { - throw new Error("Stake already registered"); - } - throw new Error(err); - }); - await pollTxWithKuber(txId); - } catch (err) { - throw new Error(err); - } -} diff --git a/tests/govtool-frontend/cypress/lib/wallet/types.ts b/tests/govtool-frontend/cypress/lib/wallet/types.ts deleted file mode 100644 index 283141529..000000000 --- a/tests/govtool-frontend/cypress/lib/wallet/types.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { ShelleyWallet } from "./crypto"; - -export type HexString = string; -export type StaticWallet = { - type: string; - payment: { - private: string; - public: string; - pkh: string; - }; - stake: { - private: string; - public: string; - pkh: string; - }; - dRepId: string; - address: string; -}; - -export interface CIP30Provider { - apiVersion: string; - enable: () => Promise; - icon: string; - isEnabled: () => Promise; - name: string; - supportedExtensions: Record[]; -} - -export enum Network { - Mainnet = 0, - Testnet = 1, -} - -export interface CIP30Instance { - submitTx: (tx: string) => Promise; - signTx: (tx: string, partial?: Boolean) => Promise; - getChangeAddress: () => Promise; - getNetworkId: () => Promise; - getRewardAddresses: () => Promise; - getUnusedAddresses: () => Promise; - getUsedAddresses: () => Promise>; - getUtxos: (amount?: object, paginate?: any) => Promise>; - getCollateral?: () => Promise>; - signData: (address: string, payload: HexString) => Promise; - getBalance: () => Promise; -} -export interface Cip95Instance extends CIP30Instance { - cip95: { - getPubDRepKey: () => Promise; - getUnregisteredPubStakeKeys: () => Promise; - getRegisteredPubStakeKeys: () => Promise; - }; - getActivePubStakeKeys: () => Promise; - getExtensions: () => Record[]; -} - -export interface CipMethodOverride { - submitTx?: HexString; - signTx?: HexString; - getChangeAddress?: HexString; - getNetworkId?: number; - getRewardAddresses?: HexString[]; - getUnusedAddresses?: HexString[]; - getUsedAddresses?: HexString[]; - getUtxos?: HexString[]; - getCollateral?: HexString[]; - signData?: HexString; - getBalance?: string; - getPubDRepKey?: HexString; - // getUnregisteredPubStakeKeys?: HexString[]; - getExtensions?: Record[]; - getRegisteredPubStakeKeys?: HexString[]; - getUnregisteredPubStakeKeys?: HexString[]; -} - -export interface WalletParams { - loadFundsAndRegister?: boolean; - onTxSign?: (txId: string) => void; - testTx?: any; - withStakeSigning?: boolean; - onWalletInitialized?: ({ - wallet, - stakePkh, - signingKey, - address, - }: { - wallet?: ShelleyWallet; - stakePkh: string; - signingKey: string; - address: string; - }) => void; -} diff --git a/tests/govtool-frontend/cypress/models/types.ts b/tests/govtool-frontend/cypress/models/types.ts deleted file mode 100644 index cf641989f..000000000 --- a/tests/govtool-frontend/cypress/models/types.ts +++ /dev/null @@ -1,14 +0,0 @@ -export interface IDRepIdentity { - id: string; - key: string; -} - -export interface KuberValue { - [policyId: string]: Record | BigInt | number; -} - -export interface KuberBalanceResponse { - address: string; - txin: string; - value: KuberValue; -} diff --git a/tests/govtool-frontend/cypress/services/apiService.ts b/tests/govtool-frontend/cypress/services/apiService.ts deleted file mode 100644 index 2d63eda6b..000000000 --- a/tests/govtool-frontend/cypress/services/apiService.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { randomBytes } from "crypto"; -import { Logger } from "../lib/logger/logger"; -import blockfrostService from "./blockfrostService"; -import kuberService from "./kuberService"; - -const apiUrl = (function () { - let url: string = Cypress.env("apiUrl"); - return url.endsWith("/") ? url.substring(0, url.length - 1) : url; -})(); - -function getApi(url: string): Cypress.Chainable> { - const normalizedUrl = url.startsWith("/") ? url : "/" + url; - return cy.request(apiUrl + normalizedUrl); -} -function postApi( - url: string, - body?: Cypress.RequestBody -): Cypress.Chainable> { - const normalizedUrl = url.startsWith("/") ? url : "/" + url; - return cy.request("POST", apiUrl + normalizedUrl, body); -} - -export const pollTxWithKuber = async ( - txHash: string, - maxRetries = 32 -): Promise => { - const MAX_RETRIES = maxRetries; - const RETRY_INTERVAL = 5000; - - if (txHash === undefined) return; - - function retry(tries, cb) { - if (tries) { - setTimeout(() => checkTransaction(tries - 1, cb), RETRY_INTERVAL); - } else { - cb( - new Error( - "[Kuber Tx] Wait timeout for tx:" + - txHash + - ", waited for " + - (MAX_RETRIES * RETRY_INTERVAL) / 1000 + - "secs" - ) - ); - } - } - - function checkTransaction(tries, cb) { - return kuberService - .getTransactionDetails(txHash) - .then(async (res) => { - if ((await res.json()).length > 0) { - console.debug("[Kuber Poll Tx] Successful", res); - cb(); - } else if (res.status === 500) { - throw cb(new Error("Internal Server Error")); - } else { - Logger.fail( - "[Kuber Poll Tx] Tx unsuccessful waiting for another " + - RETRY_INTERVAL / 1000 + - "secs..." - ); - - retry(tries, cb); - } - }) - .catch((e) => { - if (e.status == 404) { - retry(tries, cb); - } else { - throw cb( - new Error( - "[Kuber Poll Tx] Timeout for tx:" + - txHash + - ", waited for " + - (MAX_RETRIES * RETRY_INTERVAL) / 1000 + - "secs" - ) - ); - } - }); - } - - return new Promise((resolve, reject) => { - setTimeout(() => { - checkTransaction(MAX_RETRIES, (err) => { - if (err) { - reject(err); - } else { - resolve(); - } - }); - }); - RETRY_INTERVAL; - }); -}; - -export const pollTx = async (txHash: string): Promise => { - const MAX_RETRIES = 20; - const RETRY_INTERVAL = 5000; - - function checkTransaction(tries, cb) { - return blockfrostService - .getTransactionDetails(txHash) - .then((res) => { - console.debug("[Blockfrost Poll Tx] successful", res); - cb(); - }) - .catch((e) => { - Logger.fail( - "[Blockfrost Poll Tx] Unsuccessful waiting for another " + - RETRY_INTERVAL / 1000 + - "secs..." - ); - - if (e.status == 404) { - if (tries) { - setTimeout(() => checkTransaction(tries - 1, cb), RETRY_INTERVAL); - } else { - cb( - new Error( - "[Blockfrost Poll Tx] Timeout for tx:" + - txHash + - ", waited for " + - (MAX_RETRIES * RETRY_INTERVAL) / 1000 + - "secs" - ) - ); - } - } else { - cy.then(async () => { - expect(e.status).to.closeTo(200, 299); - }); - throw cb(e); - } - }); - } - - return new Promise((resolve, reject) => { - setTimeout(() => { - checkTransaction(MAX_RETRIES, (err) => { - if (err) { - reject(err); - } else { - resolve(); - } - }); - }), - RETRY_INTERVAL; - }); -}; diff --git a/tests/govtool-frontend/cypress/services/blockfrostService.ts b/tests/govtool-frontend/cypress/services/blockfrostService.ts deleted file mode 100644 index bc9148d9c..000000000 --- a/tests/govtool-frontend/cypress/services/blockfrostService.ts +++ /dev/null @@ -1,106 +0,0 @@ -const config = { - apiUrl: Cypress.env("blockfrostUrl"), - apiKey: Cypress.env("blockfrostApiKey"), -}; - -const blockfrostService = { - async addresses(addr: string) { - return await callBlockfrost("/addresses/" + addr).catch((e) => { - if (e.status == 404) { - return "00"; - } else { - throw e; - } - }); - }, - async addressesUtxos(addr: string) { - return await callBlockfrost( - "/addresses/" + addr + "/utxos?order=desc" - ).catch((e) => { - if (e.status == 404) { - return []; - } else { - throw e; - } - }); - }, - async submitTransaction(tx: string) { - return await callBlockfrost( - "/tx/submit", - "POST", - Buffer.from(tx, "hex"), - "application/cbor" - ); - }, - async getAssetDetail(asset: string) { - return await callBlockfrost("/assets/" + asset); - }, - - async getDatum(hash: string) { - return await callBlockfrost("/scripts/datum/" + hash); - }, - async getTransactionDetails(txHash: any) { - return await callBlockfrost("/txs/" + txHash); - }, - async getTransactionUtxos(txHash: any) { - return await callBlockfrost("/txs/" + txHash + "/utxos"); - }, - - async getTransactions(addr: any) { - return await callBlockfrost("/addresses/" + addr + "/utxos"); - }, -}; - -async function callBlockfrost( - path: any, - method: "GET" | "POST" = "GET", - body?: BodyInit, - contentType?: string -) { - const url = config.apiUrl + path; - - const headers: Record = { - project_id: config.apiKey, - }; - if (contentType) { - headers["content-type"] = contentType; - } - - const options: RequestInit = { - method, - headers, - }; - - if (method === "POST") { - if (body) options.body = body; - } - - return fetch(url, options).then(async (res) => { - if (res.status === 200) { - return res.json(); - } else { - return res.text().then((txt) => { - let err; - let json: any; - try { - json = JSON.parse(txt); - if (json) { - err = Error( - `BlockfrostApi [Status ${res.status}] : ${ - json.message ? json.message : txt - }` - ); - } else { - err = Error(`BlockfrostApi [Status ${res.status}] : ${txt}`); - } - } catch (e) { - err = Error(`BlockfrostApi [Status ${res.status}] : ${txt}`); - } - err.status = res.status; - throw err; - }); - } - }); -} - -export default blockfrostService; diff --git a/tests/govtool-frontend/cypress/services/faucetService.ts b/tests/govtool-frontend/cypress/services/faucetService.ts deleted file mode 100644 index 2a09c9fd6..000000000 --- a/tests/govtool-frontend/cypress/services/faucetService.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { IFaucetResponse } from "./types"; - -const faucetApiKey = Cypress.env("faucetApiKey"); -const faucetApiUrl = Cypress.env("faucetApiUrl"); - -const fetchClient = (url: string) => { - return fetch(faucetApiUrl + url); -}; - -export const loadAmountFromFaucet = async ( - walletAddress: string -): Promise => { - try { - const res = await fetchClient( - `/send-money?type=default&action=funds&address=${walletAddress}&poolid=undefined&api_key=${faucetApiKey}` - ); - const responseBody = await res.json(); - console.debug(`faucet response: ${JSON.stringify(responseBody)}`); - - if (responseBody.error) { - throw new Error("Error in loadAmountFaucet:" + responseBody.error.tag); - } - return responseBody; - } catch (error) { - console.error("Error in loadAmountFromFaucet:", error); - throw error; - } -}; diff --git a/tests/govtool-frontend/cypress/services/kuberService.ts b/tests/govtool-frontend/cypress/services/kuberService.ts deleted file mode 100644 index b6073b88a..000000000 --- a/tests/govtool-frontend/cypress/services/kuberService.ts +++ /dev/null @@ -1,347 +0,0 @@ -import { Logger } from "../lib/logger/logger"; -import { ShelleyWallet } from "../lib/wallet/crypto"; -import { - cborxDecoder, - cborxEncoder, - convertUint8ArrayToHex, -} from "../support/utils"; -import * as blake from "blakejs"; -import { KuberBalanceResponse } from "../models/types"; -import { bootstrapWallet } from "../constants/wallet"; - -type CertificateType = "registerstake" | "registerdrep" | "deregisterdrep"; -const config = { - apiUrl: Cypress.env("kuberApiUrl"), - apiKey: Cypress.env("kuberApiKey"), -}; -class Kuber { - walletAddr: string; - signingKey: string; - version: string; - - constructor(walletAddr: string, signingKey: string, version = "v1") { - this.walletAddr = walletAddr; - this.signingKey = signingKey; - this.version = version; - } - static generateCert(type: CertificateType, key: string) { - if (type === "registerstake" || type === "deregisterdrep") { - return { - type: type, - key: key, - }; - } else if (type === "registerdrep") { - return { - type: "registerdrep", - key: key, - anchor: { - url: "https://bit.ly/3zCH2HL", - dataHash: - "1111111111111111111111111111111111111111111111111111111111111111", - }, - }; - } - } - signTx(tx: any) { - return { - ...tx, - selections: [ - ...(tx.selections || []), - { - type: "PaymentSigningKeyShelley_ed25519", - description: "Payment Signing Key", - cborHex: "5820" + this.signingKey, - }, - this.walletAddr, - ], - changeAddress: this.walletAddr, - }; - } - - async signAndSubmitTx(tx: any) { - const signedTx = this.signTx(tx); - const res = await callKuber( - `/api/${this.version}/tx?submit=true`, - "POST", - JSON.stringify(signedTx) - ); - Logger.success("[Kuber] Tx: " + JSON.stringify(res)); - let decodedTx = cborxDecoder.decode(Buffer.from(res.cborHex, "hex")); - const submittedTxBody = Uint8Array.from(cborxEncoder.encode(decodedTx[0])); - const submittedTxHash = Buffer.from( - blake.blake2b(submittedTxBody, undefined, 32) - ).toString("hex"); - return { cbor: res.cborHex, txId: submittedTxHash }; - } -} - -const kuberService = { - initializeMultipleWallets: ( - senderAddress: string, - signingKey: string, - wallets: ShelleyWallet[] - ) => { - const kuber = new Kuber(senderAddress, signingKey); - const outputs = []; - const stakes = []; - const certificates = []; - for (let i = 0; i < wallets.length; i++) { - const wallet = wallets[i]; - const address = wallet.addressBech32(0); - outputs.push({ - address: address, - value: 0, - }); - stakes.push({ - type: "PaymentSigningKeyShelley_ed25519", - description: "Payment Signing Key", - cborHex: "5820" + convertUint8ArrayToHex(wallet.stakeKey.private), - }); - certificates.push( - Kuber.generateCert( - "registerstake", - convertUint8ArrayToHex(wallet.stakeKey.pkh) - ) - ); - } - return kuber.signAndSubmitTx({ - selections: [...stakes], - outputs, - certificates, - }); - }, - - submitTransaction(tx: any) { - return fetch(config.apiUrl + "/api/v1/tx/submit", { - method: "POST", - headers: { - "Content-Type": "application/json", - "api-key": config.apiKey, - }, - - body: JSON.stringify({ - tx: { - description: "", - type: "Tx ConwayEra", - cborHex: tx, - }, - }), - redirect: "follow", - }); - }, - transferADA: ( - senderAddress: string, - receiverAddressList: string[], - signingKey?: string, // private payment key - ADA = 100 - ) => { - const kuber = new Kuber(senderAddress, signingKey); - const req = { - outputs: receiverAddressList.map((addr) => { - return { - address: addr, - value: `${ADA}A`, - }; - }), - }; - return kuber.signAndSubmitTx(req); - }, - dRepRegistration: (addr: string, signingKey: string, pkh: string) => { - const kuber = new Kuber(addr, signingKey); - const req = { - certificates: [Kuber.generateCert("registerdrep", pkh)], - }; - return kuber.signAndSubmitTx(req); - }, - - // NOTE This is not supported yet - dRepDeRegistration: ( - addr: string, - signingKey: string, - stakePrivateKey: string, - pkh: string - ) => { - const kuber = new Kuber(addr, signingKey); - const selections = [ - { - type: "PaymentSigningKeyShelley_ed25519", - description: "Payment Signing Key", - cborHex: "5820" + stakePrivateKey, - }, - ]; - const req = { - selections, - inputs: addr, - certificates: [Kuber.generateCert("deregisterdrep", pkh)], - }; - return kuber.signAndSubmitTx(req); - }, - stakeDelegation: ( - addr: string, - signingKey: string, - stakePrivateKey: string, - pkh: string, - dRep: string | "abstain" | "noconfidence" - ) => { - const kuber = new Kuber(addr, signingKey); - const selections = [ - { - type: "PaymentSigningKeyShelley_ed25519", - description: "Payment Signing Key", - cborHex: "5820" + stakePrivateKey, - }, - ]; - const req = { - selections, - certificates: [ - { - type: "delegate", - key: pkh, - drep: dRep, - }, - ], - }; - return kuber.signAndSubmitTx(req); - }, - registerStake: ( - stakePrivateKey: string, - pkh: string, - signingKey: string, - addr: string - ) => { - const kuber = new Kuber(addr, signingKey); - const selections = [ - { - type: "PaymentSigningKeyShelley_ed25519", - description: "Payment Signing Key", - cborHex: "5820" + stakePrivateKey, - }, - ]; - const req = { - selections, - certificates: [Kuber.generateCert("registerstake", pkh)], - }; - return kuber.signAndSubmitTx(req); - }, - createGovAction(proposalsCount = 2) { - const kuber = new Kuber( - bootstrapWallet.address, - bootstrapWallet.payment.private - ); - const infoProposal = { - deposit: 1000000000, - refundAccount: { - network: "Testnet", - credential: { - "key hash": - "db1bc3c3f99ce68977ceaf27ab4dd917123ef9e73f85c304236eab23", - }, - }, - anchor: { - url: "https://bit.ly/3zCH2HL", - dataHash: - "1111111111111111111111111111111111111111111111111111111111111111", - }, - }; - const req = kuber.signTx({ - proposals: Array.from({ length: proposalsCount }, (_, i) => infoProposal), - }); - return callKuber("/api/v1/tx?submit=true", "POST", JSON.stringify(req)); - }, - - getTransactionDetails(txHash: string) { - return fetch(config.apiUrl + "/api/v3/utxo?txin=" + txHash + "%230", { - method: "GET", - headers: { - "Content-Type": "application/json", - "api-key": config.apiKey, - }, - }); - }, - queryUtxos(address: string): Promise<[KuberBalanceResponse]> { - return callKuber("/api/v3/utxo?address=" + address); - }, - voteOnProposal( - addr: string, - signingKey: string, - voter: string, // dRepHash - dRepStakePrivKey: string, - proposal: string - ) { - const kuber = new Kuber(addr, signingKey); - const req = { - selections: [ - { - type: "PaymentSigningKeyShelley_ed25519", - description: "Payment Signing Key", - cborHex: "5820" + dRepStakePrivKey, - }, - ], - vote: { - voter, - role: "drep", - proposal, - vote: true, - anchor: { - url: "https://bit.ly/3zCH2HL", - dataHash: - "1111111111111111111111111111111111111111111111111111111111111111", - }, - }, - }; - return kuber.signAndSubmitTx(req); - }, -}; -async function callKuber( - path: any, - method: "GET" | "POST" = "GET", - body?: BodyInit, - contentType = "application/json" -) { - const url = config.apiUrl + path; - - const headers: Record = { - "api-key": config.apiKey, - }; - if (contentType) { - headers["content-type"] = contentType; - } - - const options: RequestInit = { - method, - headers, - }; - - if (method === "POST") { - if (body) options.body = body; - } - - return fetch(url, options).then(async (res) => { - if (res.status === 200) { - return res.json(); - } else { - return res.text().then((txt) => { - let err; - let json: any; - try { - json = JSON.parse(txt); - if (json) { - err = Error( - `KuberApi [Status ${res.status}] : ${ - json.message ? json.message : txt - }` - ); - } else { - err = Error(`KuberApi [Status ${res.status}] : ${txt}`); - } - } catch (e) { - err = Error(`KuberApi [Status ${res.status}] : ${txt}`); - } - err.status = res.status; - throw err; - }); - } - }); -} - -export default kuberService; diff --git a/tests/govtool-frontend/cypress/services/types.ts b/tests/govtool-frontend/cypress/services/types.ts deleted file mode 100644 index e7ff594e6..000000000 --- a/tests/govtool-frontend/cypress/services/types.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface IFaucetResponse { - amount: { - lovelace: number; - }; - txid: string; - txin: string; -} diff --git a/tests/govtool-frontend/cypress/state/store.ts b/tests/govtool-frontend/cypress/state/store.ts deleted file mode 100644 index 091d73772..000000000 --- a/tests/govtool-frontend/cypress/state/store.ts +++ /dev/null @@ -1 +0,0 @@ -export const store = new Map(); diff --git a/tests/govtool-frontend/cypress/state/type.ts b/tests/govtool-frontend/cypress/state/type.ts deleted file mode 100644 index 69f4805f1..000000000 --- a/tests/govtool-frontend/cypress/state/type.ts +++ /dev/null @@ -1,25 +0,0 @@ -export interface IProposal { - id: string; - txHash: string; - index: number; - type: string; - details: string; - expiryDate: string; - createdDate: string; - url: string; - metadataHash: string; - yesVotes: number; - noVote: number; - abstainVotes: number; -} - -export interface IVotedProposal { - proposal: IProposal; - vote: { - proposalId: string; - drepId: string; - vote: string; - url: string | null; - metadataHash: string | null; - }; -} diff --git a/tests/govtool-frontend/cypress/state/walletState.ts b/tests/govtool-frontend/cypress/state/walletState.ts deleted file mode 100644 index 12d418601..000000000 --- a/tests/govtool-frontend/cypress/state/walletState.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { Logger } from "../lib/logger/logger"; -import { ShelleyWallet } from "../lib/wallet/crypto"; -import { store } from "./store"; - -const walletState = { - setTxHash: (txHash: string) => { - store.set("txHash", txHash); - Logger.info(`[Wallet State] Tx Hash Saved: ${txHash}.`); - }, - setWallet: (wallet?: ShelleyWallet) => { - store.set("wallet", wallet); - }, - setStakePkh: (pkh: string) => { - store.set("stakePkh", pkh); - }, - setSigningKey: (key: string) => { - store.set("signingKey", key); - }, - setAddress: (addr: string) => { - store.set("address", addr); - }, - getWallet: (): ShelleyWallet => store.get("wallet"), - getAddress: () => store.get("address"), - getSigningKey: () => store.get("signingKey"), - getStakePkh: () => store.get("stakePkh"), - getTxHash: () => { - const txHash = store.get("txHash"); - Logger.info(`[Wallet State] Getting txHash: ${txHash}.`); - return txHash; - }, -}; - -export default walletState; diff --git a/tests/govtool-frontend/cypress/support/command.d.ts b/tests/govtool-frontend/cypress/support/command.d.ts deleted file mode 100644 index 45c4e2b78..000000000 --- a/tests/govtool-frontend/cypress/support/command.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -declare namespace Cypress { - interface Chainable { - getBySel( - selector: string, - options?: Partial< - Cypress.Loggable & - Cypress.Timeoutable & - Cypress.Withinable & - Cypress.Shadow - > - ): Chainable; - runOneTimeWalletSetup(): any; - getInputByPlaceholder(placeholder: string): Chainable; - getButtonByText(text: string): Chainable; - setGlobalState(key: string, value: any); - getGlobalState(key: string): any; - } -} diff --git a/tests/govtool-frontend/cypress/support/commands.ts b/tests/govtool-frontend/cypress/support/commands.ts deleted file mode 100644 index 67d02f140..000000000 --- a/tests/govtool-frontend/cypress/support/commands.ts +++ /dev/null @@ -1,28 +0,0 @@ -import * as addCommands from "cypress-browser-extension-plugin/commands"; - -Cypress.Commands.add("getBySel", (selector, ...args): void | any => { - return cy.get(`[data-testid="${selector}"]`, ...args); -}); - -Cypress.Commands.add("getInputByPlaceholder", (placeholder): void | any => { - return cy.get(`input[placeholder*="${placeholder}"]`); -}); - -Cypress.Commands.add("getButtonByText", (text): void | any => { - return cy.get("button").filter(`:contains("${text}")`); -}); - -Cypress.Commands.add("setGlobalState", (key, value) => { - cy.window().then((w: any) => { - w.myGlobalState = w.myGlobalState || {}; - w.myGlobalState[key] = value; - }); -}); - -Cypress.Commands.add("getGlobalState", (key) => { - return cy.window().then((w: any) => { - return w.myGlobalState && w.myGlobalState[key]; - }); -}); - -addCommands(Cypress); diff --git a/tests/govtool-frontend/cypress/support/e2e.ts b/tests/govtool-frontend/cypress/support/e2e.ts deleted file mode 100644 index 2078b3716..000000000 --- a/tests/govtool-frontend/cypress/support/e2e.ts +++ /dev/null @@ -1,21 +0,0 @@ -// *********************************************************** -// This example support/e2e.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import "cypress-cloud/support"; -import "./commands"; - -// Alternatively you can use CommonJS syntax: -// require('./commands') diff --git a/tests/govtool-frontend/cypress/support/utils.ts b/tests/govtool-frontend/cypress/support/utils.ts deleted file mode 100644 index 277b893f8..000000000 --- a/tests/govtool-frontend/cypress/support/utils.ts +++ /dev/null @@ -1,164 +0,0 @@ -import { blake2b, blake2bHex } from "blakejs"; -import { randomBytes } from "crypto"; -import { bech32 } from "bech32"; -import { Ed25519Key, ShelleyWallet } from "../lib/wallet/crypto"; -import { Logger } from "../lib/logger/logger"; -import { CipMethodOverride, WalletParams } from "../lib/wallet/types"; -import { Decoder, Encoder } from "cbor-x"; -import walletState from "../state/walletState"; - -export const cborxEncoder = new Encoder({ - mapsAsObjects: false, - useRecords: false, -}); -export const cborxDecoder = new Decoder({ mapsAsObjects: false }); - -export function injectOpen() { - let a = { args: [] }; - cy.window().then((w: any) => { - w.open = (...args) => { - a.args = args; - }; - }); - return a; -} - -export function convertUint8ArrayToHex(buffer: Uint8Array) { - return Buffer.from(buffer).toString("hex"); -} -export function random32BytesHex() { - return randomBytes(32).toString("hex"); -} - -export function generateDRep() { - const dRepKey = randomBytes(32); - return loadDRepFromKey(dRepKey); -} - -export function loadDRepFromKey(dRepKey?: any) { - const dRepKeyHash = blake2b(dRepKey, undefined, 28); - return { - id: bech32.encode("drep", bech32.toWords(dRepKeyHash)), - key: dRepKey.toString("hex"), - }; -} - -export function getWebAppNetworkId(): number { - const networkId: string = Cypress.env("networkId"); - //@ts-ignore - return networkId.toLowerCase() == "testnet" || networkId == 0 ? 0 : 1; -} - -export const isMobile = () => { - return ( - Cypress.config("viewportWidth") < - Cypress.env("mobileViewportWidthBreakpoint") - ); -}; - -export const removeWhiteSpaces = (str: string) => str.replace(/\s+/g, ""); - -export const groupElements = (elements: any[], key?: string) => { - const groupedElements = {}; - - elements.forEach((element) => { - const elementType = key ? element[`${key}`] : element.type; - - if (!groupedElements[elementType]) { - groupedElements[elementType] = []; - } - groupedElements[elementType].push({ - ...element, - txHash: element.txHash, - }); - }); - - return groupedElements; -}; - -// export const loadDRep = async (type: "dRep" | "adaHolder") => { -// const stakePrivKeyHex = -// type === "dRep" -// ? dRepWalletDetails.stake.private -// : adaHolderWalletDetails.stake.private; -// const stakeKey = await Ed25519Key.fromPrivateKeyHex(stakePrivKeyHex); -// const dRepKey = Buffer.from(stakeKey.pkh).toString("hex"); -// return loadDRepFromKey(dRepKey); -// }; - -export const getDRepIDHash = (dRepIdBech32: string) => { - const decodedDRepId = bech32.decode(dRepIdBech32); - const dRepIDHex = Buffer.from(bech32.fromWords(decodedDRepId.words)).toString( - "hex" - ); - Logger.success("Decoded DRepId Hex: " + dRepIDHex); - return dRepIDHex; -}; - -export const getPubDRepIds = (dRepKey: string) => { - const dRepKeyBytes = Buffer.from(dRepKey, "hex"); - const dRepID = blake2bHex(dRepKeyBytes, undefined, 28); - const words = bech32.toWords(Buffer.from(dRepID, "hex")); - const dRepIdBech32 = bech32.encode("drep", words); - return { dRepID, dRepIdBech32 }; -}; - -export function destructWalletArgs(args: CipMethodOverride & WalletParams) { - args = { - ...args, - onTxSign: (txId) => { - walletState.setTxHash(txId); - }, - onWalletInitialized: ({ wallet, stakePkh, signingKey, address }) => { - walletState.setWallet(wallet); - walletState.setStakePkh(stakePkh); - walletState.setSigningKey(signingKey); - walletState.setAddress(address); - - Logger.success("[Wallet State] Wallet state saved."); - }, - }; - const overrides: CipMethodOverride = {}; - const walletParams: WalletParams = { - loadFundsAndRegister: null, - onTxSign: null, - withStakeSigning: false, - onWalletInitialized: null, - }; - - args && - Object.keys(args).forEach((key) => { - if (key in walletParams) { - walletParams[key] = args[key]; - } else { - overrides[key] = args[key]; - } - }); - console.log("overrides: " + JSON.stringify(overrides)); - console.log("walletParams: " + JSON.stringify(walletParams)); - return { overrides, walletParams }; -} - -export function saveWallets(wallets: ShelleyWallet[]) { - const jsonWallets = []; - for (let i = 0; i < wallets.length; i++) { - jsonWallets.push({ - ...wallets[i].json(), - address: wallets[i].addressBech32(0), - }); - } - cy.writeFile("cypress/fixtures/wallets.json", jsonWallets, { flag: "a" }); -} - -export function getTxHash(tx: string) { - let decodedTx = cborxDecoder.decode(Buffer.from(tx, "hex")); - const txbody = Uint8Array.from(cborxEncoder.encode(decodedTx[0])); - return blake2bHex(txbody, undefined, 32); -} - -export const getShortenedGovActionId = (txHash: string, index: number) => { - const firstPart = txHash.slice(0, 4); - const lastPart = txHash.slice(-4); - - return `${firstPart}...${lastPart}#${index}`; -}; diff --git a/tests/govtool-frontend/cypress/support/validations.ts b/tests/govtool-frontend/cypress/support/validations.ts deleted file mode 100644 index 2dd36f9ec..000000000 --- a/tests/govtool-frontend/cypress/support/validations.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { govActionEnums } from "../constants/governanceActions"; -import { getShortenedGovActionId } from "./utils"; - -// Validates that the rendered data on the frontend matches the expected filtered data. -export const validateFilter = (filterText: string) => { - cy.getBySel(`govaction-${filterText.replace(/ /g, "")}-card`).each( - ($slide) => { - cy.wrap($slide).should("contain", filterText); - } - ); -}; - -// Validates that the rendered data on the frontend matches the expected sorted order. -export const validateSort = (sortedData: any) => { - Object.keys(sortedData).forEach((type: string, type_index: number) => { - cy.wrap(type_index).then(() => { - cy.getBySel( - `govaction-${govActionEnums[type].replace(/ /g, "")}-card` - ).each(($slide, idx) => { - if (idx > 5) return; - - cy.wrap({ idx, type }).then((context) => { - cy.wrap($slide) - .find( - `[data-testid="${sortedData[context.type][context.idx].txHash}#${ - sortedData[context.type][context.idx].index - }-id"]` - ) - .should("have.length.greaterThan", 0); - }); - }); - }); - }); - cy.contains("Clear", { matchCase: false }).click(); -}; - -export const validateDRepURLInput = (value: string, invalid = true) => { - cy.getBySel("url-input").type(value).blur(); - if (invalid) { - cy.getBySel("invalid-url-format-error").should("be.visible"); - } else { - cy.getBySel("invalid-url-format-error").should("not.exist"); - } - - cy.getBySel("url-input").clear(); -}; - -export const validateDRepMetaHashInput = (value: string, invalid = true) => { - cy.getBySel("hash-input").type(value).blur(); - if (invalid) { - cy.getBySel("hash-must-be-exactly-64-characters-long-error").should( - "be.visible" - ); - } else { - cy.getBySel("hash-must-be-exactly-64-characters-long-error").should( - "not.exist" - ); - } - - cy.getBySel("hash-input").clear(); -}; diff --git a/tests/govtool-frontend/package.json b/tests/govtool-frontend/package.json deleted file mode 100644 index c1e720a49..000000000 --- a/tests/govtool-frontend/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "govtool-frontend-test", - "version": "1.0.0", - "main": "index.js", - "license": "MIT", - "scripts": { - "cypress": "cypress", - "cypress-cloud": "cypress-cloud", - "cypress:run:mobile": "cypress run --config viewportWidth=375,viewportHeight=667", - "cypress:open:mobile": "cypress open --config viewportWidth=375,viewportHeight=667", - "cypress-cloud:run:mobile": "cypress run --config viewportWidth=375,viewportHeight=667", - "test": "ts-node test.ts" - }, - "dependencies": { - "@noble/ed25519": "^2.0.0", - "@types/node": "^22.7.9", - "add": "^2.0.6", - "axios": "^1.4.0", - "bech32": "^2.0.0", - "blakejs": "^1.2.1", - "cbor-x": "^1.5.4", - "cypress": "^13.6.0", - "cypress-browser-extension-plugin": "^0.1.0", - "cypress-cloud": "^1.9.3", - "typescript": "^5.1.6" - } -} diff --git a/tests/govtool-frontend/playwright/lib/_mock/index.ts b/tests/govtool-frontend/playwright/lib/_mock/index.ts index cbd20a9c8..234f772d1 100644 --- a/tests/govtool-frontend/playwright/lib/_mock/index.ts +++ b/tests/govtool-frontend/playwright/lib/_mock/index.ts @@ -2,20 +2,27 @@ import { faker } from "@faker-js/faker"; import { generateExactLengthText } from "@helpers/string"; export const invalid = { - url: () => { - const invalidSchemes = ["ftp", "unsupported", "unknown-scheme"]; - const invalidCharacters = "<>@!#$%^&*()"; - const invalidTlds = [".invalid", ".example", ".test"]; - - const scheme = - invalidSchemes[Math.floor(Math.random() * invalidSchemes.length)]; - const invalidChar = - invalidCharacters[Math.floor(Math.random() * invalidCharacters.length)]; - const invalidTld = - invalidTlds[Math.floor(Math.random() * invalidTlds.length)]; - - const randomDomain = `example${invalidChar}domain${invalidTld}`; - return `${scheme}://${randomDomain}`; + url: (isSupportedGreaterThan128Words = true) => { + const choice = isSupportedGreaterThan128Words + ? 1 + : faker.number.int({ min: 1, max: 2 }); + if (choice === 1) { + const invalidSchemes = ["ftp", "unsupported", "unknown-scheme"]; + const invalidCharacters = "<>@!#$%^&*()"; + const invalidTlds = [".invalid", ".example", ".test"]; + + const scheme = + invalidSchemes[Math.floor(Math.random() * invalidSchemes.length)]; + const invalidChar = + invalidCharacters[Math.floor(Math.random() * invalidCharacters.length)]; + const invalidTld = + invalidTlds[Math.floor(Math.random() * invalidTlds.length)]; + + const randomDomain = `example${invalidChar}domain${invalidTld}`; + return `${scheme}://${randomDomain}`; + } + // max 128 words invalid + return faker.internet.url() + faker.lorem.paragraphs(2).replace(/\s+/g, ""); }, name: () => { diff --git a/tests/govtool-frontend/playwright/lib/forms/dRepForm.ts b/tests/govtool-frontend/playwright/lib/forms/dRepForm.ts index cc578b217..3985e96d3 100644 --- a/tests/govtool-frontend/playwright/lib/forms/dRepForm.ts +++ b/tests/govtool-frontend/playwright/lib/forms/dRepForm.ts @@ -12,7 +12,14 @@ const formErrors = { ], linkDescription: "max-80-characters-error", email: "invalid-email-address-error", - link: "invalid-url-error", + links: { + url:"link-reference-description-1-error", + description: "link-reference-description-1-error", + }, + identity: { + url: "identity-reference-url-1-error", + description: "identity-reference-description-1-error", + }, paymentAddress: "invalid-payment-address-error", }; @@ -165,7 +172,8 @@ export default class DRepForm { dRepInfo.qualifications ); - await expect(this.form.getByTestId(formErrors.link)).toBeHidden(); + await expect(this.form.getByTestId(formErrors.links.url)).toBeHidden(); + await expect(this.form.getByTestId(formErrors.identity.url)).toBeHidden(); await expect(this.form.getByTestId(formErrors.paymentAddress)).toBeHidden(); await expect(this.continueBtn).toBeEnabled(); } @@ -190,7 +198,7 @@ export default class DRepForm { }) .all(); - expect(nameErrors.length).toBeGreaterThanOrEqual(1); // BUG duplicate test ids + expect(nameErrors.length).toBeGreaterThanOrEqual(1); await expect( this.form.getByTestId(formErrors.paymentAddress) @@ -206,14 +214,14 @@ export default class DRepForm { dRepInfo.qualifications ); - await expect(this.form.getByTestId(formErrors.link).first()).toBeVisible(); // BUG duplicate test ids + await expect(this.form.getByTestId(formErrors.links.url)).toBeVisible(); await expect( - this.form.getByTestId(formErrors.linkDescription).first() - ).toBeVisible(); // BUG duplicate test ids - await expect(this.form.getByTestId(formErrors.link).last()).toBeVisible(); // BUG duplicate test ids + this.form.getByTestId(formErrors.links.description) + ).toBeVisible(); + await expect(this.form.getByTestId(formErrors.identity.url)).toBeVisible(); await expect( - this.form.getByTestId(formErrors.linkDescription).last() - ).toBeVisible(); // BUG duplicate test ids + this.form.getByTestId(formErrors.identity.description) + ).toBeVisible(); await expect(this.continueBtn).toBeDisabled(); } diff --git a/tests/govtool-frontend/playwright/lib/pages/governanceActionDetailsPage.ts b/tests/govtool-frontend/playwright/lib/pages/governanceActionDetailsPage.ts index 3508c39e9..600d8818f 100644 --- a/tests/govtool-frontend/playwright/lib/pages/governanceActionDetailsPage.ts +++ b/tests/govtool-frontend/playwright/lib/pages/governanceActionDetailsPage.ts @@ -21,6 +21,9 @@ export default class GovernanceActionDetailsPage { readonly governanceActionId = this.page.getByText("Governance Action ID:"); readonly contextBtn = this.page.getByTestId("provide-context-button"); + readonly metadataDownloadBtn = this.page.getByTestId( + "metadata-download-button" + ); readonly viewOtherDetailsLink = this.page.getByTestId( "view-other-details-button" ); @@ -31,6 +34,7 @@ export default class GovernanceActionDetailsPage { readonly externalLinkModal = this.page.getByTestId("external-link-modal"); readonly contextInput = this.page.getByTestId("provide-context-input"); + readonly metadataUrlInput = this.page.getByTestId("metadata-url-input"); readonly cancelModalBtn = this.page.getByTestId("cancel-modal-button"); readonly dRepYesVotes = this.page.getByTestId("submitted-votes-dReps-yes"); @@ -78,16 +82,14 @@ export default class GovernanceActionDetailsPage { await this.page.getByRole("checkbox").click(); await this.confirmModalBtn.click(); - this.page - .getByRole("button", { name: "download Vote_Context.jsonld" }) - .click(); // BUG missing test id + this.metadataDownloadBtn.click(); const voteMetadata = await this.downloadVoteMetadata(); const url = await metadataBucketService.uploadMetadata( voteMetadata.name, voteMetadata.data ); - await this.page.getByPlaceholder("URL").fill(url); // Bug showing data-testid="undefinedinput" on url + await this.metadataUrlInput.fill(url); await this.confirmModalBtn.click(); await this.page.getByTestId("go-to-vote-modal-button").click(); } diff --git a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts index a3da2b512..21afc8703 100644 --- a/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/3-drep-registration/dRepRegistration.loggedin.spec.ts @@ -156,8 +156,16 @@ test.describe("Validation of dRep Registration Form", () => { await dRepRegistrationPage.registerBtn.click(); for (let i = 0; i < 100; i++) { - await dRepRegistrationPage.metadataUrlInput.fill(mockInvalid.url()); - await expect(page.getByTestId("invalid-url-error")).toBeVisible(); + const invalidUrl = mockInvalid.url(false); + + await dRepRegistrationPage.metadataUrlInput.fill(invalidUrl); + if (invalidUrl.length <= 128) { + await expect(page.getByTestId("invalid-url-error")).toBeVisible(); + } else { + await expect( + page.getByTestId("url-must-be-less-than-128-bytes-error") + ).toBeVisible(); + } } const sentenceWithoutSpace = faker.lorem diff --git a/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts b/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts index a2500d29b..95a90f0e9 100644 --- a/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts +++ b/tests/govtool-frontend/playwright/tests/3-drep-registration/editDRep.dRep.spec.ts @@ -127,8 +127,15 @@ test.describe("Validation of edit dRep Form", () => { await editDRepPage.registerBtn.click(); for (let i = 0; i < 100; i++) { - await editDRepPage.metadataUrlInput.fill(mockInvalid.url()); - await expect(page.getByTestId("invalid-url-error")).toBeVisible(); + const invalidUrl = mockInvalid.url(false); + await editDRepPage.metadataUrlInput.fill(invalidUrl); + if (invalidUrl.length <= 128) { + await expect(page.getByTestId("invalid-url-error")).toBeVisible(); + } else { + await expect( + page.getByTestId("url-must-be-less-than-128-bytes-error") + ).toBeVisible(); + } } const sentenceWithoutSpace = faker.lorem diff --git a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.dRep.spec.ts b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.dRep.spec.ts index 210e5de18..6ac7a810b 100644 --- a/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.dRep.spec.ts +++ b/tests/govtool-frontend/playwright/tests/4-proposal-visibility/proposalVisibility.dRep.spec.ts @@ -12,12 +12,14 @@ import { import { createNewPageWithWallet } from "@helpers/page"; import GovernanceActionsPage from "@pages/governanceActionsPage"; import { Page, expect } from "@playwright/test"; +import { invalid as mockInvalid, valid as mockValid } from "@mock/index"; import { BootstrapGovernanceActionType, GrovernanceActionType, IProposal, } from "@types"; import walletManager from "lib/walletManager"; +import GovernanceActionDetailsPage from "@pages/governanceActionDetailsPage"; test.beforeEach(async () => { await setAllureEpic("4. Proposal visibility"); @@ -41,6 +43,51 @@ test.describe("Logged in DRep", () => { `₳ ${lovelaceToAda(votingPower)}` ); }); + + test.describe("vote context metadata anchor validation", () => { + let govActionDetailsPage: GovernanceActionDetailsPage; + test.beforeEach(async ({ page }) => { + const govActionsPage = new GovernanceActionsPage(page); + await govActionsPage.goto(); + + govActionDetailsPage = (await isBootStrapingPhase()) + ? await govActionsPage.viewFirstProposalByGovernanceAction( + GrovernanceActionType.InfoAction + ) + : await govActionsPage.viewFirstProposal(); + + await govActionDetailsPage.contextBtn.click(); + await govActionDetailsPage.contextInput.fill(faker.lorem.sentence(200)); + await govActionDetailsPage.confirmModalBtn.click(); + await page.getByRole("checkbox").click(); + await govActionDetailsPage.confirmModalBtn.click(); + }); + + test("4N. Should accept valid metadata anchor on vote context", async ({ + page, + }) => { + for (let i = 0; i < 100; i++) { + await govActionDetailsPage.metadataUrlInput.fill(mockValid.url()); + await expect(page.getByTestId("invalid-url-error")).toBeHidden(); + } + }); + + test("4O. Should reject invalid metadata anchor on vote context", async ({ + page, + }) => { + for (let i = 0; i < 100; i++) { + const invalidUrl = mockInvalid.url(false); + await govActionDetailsPage.metadataUrlInput.fill(invalidUrl); + if (invalidUrl.length <= 128) { + await expect(page.getByTestId("invalid-url-error")).toBeVisible(); + } else { + await expect( + page.getByTestId("url-must-be-less-than-128-bytes-error") + ).toBeVisible(); + } + } + }); + }); }); test.describe("Temporary DReps", async () => { diff --git a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts index 1c4999a26..b96e5e2dc 100644 --- a/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts +++ b/tests/govtool-frontend/playwright/tests/7-proposal-submission/proposalSubmission.loggedin.spec.ts @@ -261,7 +261,7 @@ test.describe("Proposal created logged state", () => { }) => { test.slow(); // Brute-force testing with 100 random data for (let i = 0; i < 50; i++) { - await proposalSubmissionPage.metadataUrlInput.fill(invalid.url()); + await proposalSubmissionPage.metadataUrlInput.fill(invalid.url(false)); await expect(page.getByTestId("url-input-error-text")).toBeVisible(); } diff --git a/tests/govtool-frontend/tsconfig.json b/tests/govtool-frontend/tsconfig.json deleted file mode 100644 index d9bd1f9bf..000000000 --- a/tests/govtool-frontend/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["es5", "dom"], - "types": ["cypress", "node"] - }, - "include": ["**/*.ts", "**/*.d.ts"] -} diff --git a/tests/govtool-frontend/yarn.lock b/tests/govtool-frontend/yarn.lock deleted file mode 100644 index c8b81cb33..000000000 --- a/tests/govtool-frontend/yarn.lock +++ /dev/null @@ -1,3695 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/runtime@^7.15.4": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.9.tgz#65884fd6dc255a775402cc1d9811082918f4bf00" - integrity sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg== - dependencies: - regenerator-runtime "^0.14.0" - -"@cbor-extract/cbor-extract-darwin-arm64@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.2.0.tgz#8d65cb861a99622e1b4a268e2d522d2ec6137338" - integrity sha512-P7swiOAdF7aSi0H+tHtHtr6zrpF3aAq/W9FXx5HektRvLTM2O89xCyXF3pk7pLc7QpaY7AoaE8UowVf9QBdh3w== - -"@cbor-extract/cbor-extract-darwin-x64@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-darwin-x64/-/cbor-extract-darwin-x64-2.2.0.tgz#9fbec199c888c5ec485a1839f4fad0485ab6c40a" - integrity sha512-1liF6fgowph0JxBbYnAS7ZlqNYLf000Qnj4KjqPNW4GViKrEql2MgZnAsExhY9LSy8dnvA4C0qHEBgPrll0z0w== - -"@cbor-extract/cbor-extract-linux-arm64@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-linux-arm64/-/cbor-extract-linux-arm64-2.2.0.tgz#bf77e0db4a1d2200a5aa072e02210d5043e953ae" - integrity sha512-rQvhNmDuhjTVXSPFLolmQ47/ydGOFXtbR7+wgkSY0bdOxCFept1hvg59uiLPT2fVDuJFuEy16EImo5tE2x3RsQ== - -"@cbor-extract/cbor-extract-linux-arm@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-linux-arm/-/cbor-extract-linux-arm-2.2.0.tgz#491335037eb8533ed8e21b139c59f6df04e39709" - integrity sha512-QeBcBXk964zOytiedMPQNZr7sg0TNavZeuUCD6ON4vEOU/25+pLhNN6EDIKJ9VLTKaZ7K7EaAriyYQ1NQ05s/Q== - -"@cbor-extract/cbor-extract-linux-x64@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-linux-x64/-/cbor-extract-linux-x64-2.2.0.tgz#672574485ccd24759bf8fb8eab9dbca517d35b97" - integrity sha512-cWLAWtT3kNLHSvP4RKDzSTX9o0wvQEEAj4SKvhWuOVZxiDAeQazr9A+PSiRILK1VYMLeDml89ohxCnUNQNQNCw== - -"@cbor-extract/cbor-extract-win32-x64@2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@cbor-extract/cbor-extract-win32-x64/-/cbor-extract-win32-x64-2.2.0.tgz#4b3f07af047f984c082de34b116e765cb9af975f" - integrity sha512-l2M+Z8DO2vbvADOBNLbbh9y5ST1RY5sqkWOg/58GkUPBYou/cuNZ68SGQ644f1CvZ8kcOxyZtw06+dxWHIoN/w== - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@currents/commit-info@1.0.1-beta.0": - version "1.0.1-beta.0" - resolved "https://registry.yarnpkg.com/@currents/commit-info/-/commit-info-1.0.1-beta.0.tgz#c33112685c27896bba29064234fd2341ec9134e6" - integrity sha512-gkn8E3UC+F4/fCla7QAGMGgGPzxZUL9bU9+4I+KZf9PtCU3DdQCdy7a+er2eg4ewfUzZ2Ic1HcfnHuPkuLPKIw== - dependencies: - bluebird "3.5.5" - check-more-types "2.24.0" - debug "4.3.4" - execa "1.0.0" - lazy-ass "1.6.0" - ramda "0.26.1" - -"@cypress/request@^3.0.4": - version "3.0.5" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.5.tgz#d893a6e68ce2636c085fcd8d7283c3186499ba63" - integrity sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~4.0.0" - http-signature "~1.4.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - performance-now "^2.1.0" - qs "6.13.0" - safe-buffer "^5.1.2" - tough-cookie "^4.1.3" - tunnel-agent "^0.6.0" - uuid "^8.3.2" - -"@cypress/xvfb@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" - integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== - dependencies: - debug "^3.1.0" - lodash.once "^4.1.1" - -"@noble/ed25519@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-2.1.0.tgz#4bf661de9ee0ad775d41fcacbfc9aeec491f459c" - integrity sha512-KM4qTyXPinyCgMzeYJH/UudpdL+paJXtY3CHtHYZQtBkS8MZoPr4rOikZllIutJe0d06QDQKisyn02gxZ8TcQA== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@types/node@*", "@types/node@^22.7.9": - version "22.7.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.9.tgz#2bf2797b5e84702d8262ea2cf843c3c3c880d0e9" - integrity sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg== - dependencies: - undici-types "~6.19.2" - -"@types/sinonjs__fake-timers@8.1.1": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" - integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== - -"@types/sizzle@^2.3.2": - version "2.3.9" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.9.tgz#d4597dbd4618264c414d7429363e3f50acb66ea2" - integrity sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w== - -"@types/yauzl@^2.9.1": - version "2.10.3" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" - integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== - dependencies: - "@types/node" "*" - -JSONStream@^1.0.3: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.8.2: - version "1.8.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" - integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - dependencies: - acorn "^7.0.0" - acorn-walk "^7.0.0" - xtend "^4.0.2" - -acorn-walk@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.0.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.8.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.13.0.tgz#2a30d670818ad16ddd6a35d3842dacec9e5d7ca3" - integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== - -add@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235" - integrity sha512-j5QzrmsokwWWp6kUcJQySpbG+xfOBqqKnup3OIk1pz+kB/80SLorZ9V8zHFLO92Lcd+hbvq8bT+zOGoPkmBV0Q== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^8.0.1: - version "8.17.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== - dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -arch@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== - -asn1.js@^4.10.1: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -assert@^1.4.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.1.tgz#038ab248e4ff078e7bc2485ba6e6388466c78f76" - integrity sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A== - dependencies: - object.assign "^4.1.4" - util "^0.10.4" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-each@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" - integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== - -async@^3.2.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" - integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.13.2" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" - integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== - -axios-retry@^3.4.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.9.1.tgz#c8924a8781c8e0a2c5244abf773deb7566b3830d" - integrity sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w== - dependencies: - "@babel/runtime" "^7.15.4" - is-retry-allowed "^2.2.0" - -axios@^1.2.0, axios@^1.4.0: - version "1.7.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.7.tgz#2f554296f9892a72ac8d8e4c5b79c14a91d0a47f" - integrity sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.0.2, base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bech32@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" - integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -blakejs@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -blob-util@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" - integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== - -bluebird@3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== - -bluebird@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -brorand@^1.0.1, brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-pack@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" - integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== - dependencies: - JSONStream "^1.0.3" - combine-source-map "~0.8.0" - defined "^1.0.0" - safe-buffer "^5.1.1" - through2 "^2.0.0" - umd "^3.0.0" - -browser-resolve@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" - integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== - dependencies: - resolve "^1.17.0" - -browserify-aes@^1.0.4, browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0, browserify-rsa@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.1.tgz#06e530907fe2949dc21fc3c2e2302e10b1437238" - integrity sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ== - dependencies: - bn.js "^5.2.1" - randombytes "^2.1.0" - safe-buffer "^5.2.1" - -browserify-sign@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.3.tgz#7afe4c01ec7ee59a89a558a4b75bd85ae62d4208" - integrity sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw== - dependencies: - bn.js "^5.2.1" - browserify-rsa "^4.1.0" - create-hash "^1.2.0" - create-hmac "^1.1.7" - elliptic "^6.5.5" - hash-base "~3.0" - inherits "^2.0.4" - parse-asn1 "^5.1.7" - readable-stream "^2.3.8" - safe-buffer "^5.2.1" - -browserify-versionify@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/browserify-versionify/-/browserify-versionify-1.0.6.tgz#ab2dc61d6a119e627bec487598d1983b7fdb275e" - integrity sha512-DhYuu4atLBdEZcJdEcoMTo0iKvW8B8nOlATEZMZhk/m4GJ67lHtwbjXuEsdz4cdBjngjLA+ftVY0VTGiZM1Fhw== - dependencies: - find-root "^0.1.1" - through2 "0.6.3" - -browserify-zlib@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserify@^16.2.0: - version "16.5.2" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.5.2.tgz#d926835e9280fa5fd57f5bc301f2ef24a972ddfe" - integrity sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g== - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^2.0.0" - browserify-zlib "~0.2.0" - buffer "~5.2.1" - cached-path-relative "^1.0.0" - concat-stream "^1.6.0" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "^1.2.0" - duplexer2 "~0.1.2" - events "^2.0.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "^1.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - mkdirp-classic "^0.5.2" - module-deps "^6.2.3" - os-browserify "~0.3.0" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^3.0.0" - string_decoder "^1.1.1" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "0.0.1" - url "~0.11.0" - util "~0.10.1" - vm-browserify "^1.0.0" - xtend "^4.0.0" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -buffer@~5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" - integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.1.0.tgz#865576dfef39c0d6a7defde794d078f5308e3ef3" - integrity sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA== - -cachedir@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" - integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== - -call-bind@^1.0.5, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -cbor-extract@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cbor-extract/-/cbor-extract-2.2.0.tgz#cee78e630cbeae3918d1e2e58e0cebaf3a3be840" - integrity sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA== - dependencies: - node-gyp-build-optional-packages "5.1.1" - optionalDependencies: - "@cbor-extract/cbor-extract-darwin-arm64" "2.2.0" - "@cbor-extract/cbor-extract-darwin-x64" "2.2.0" - "@cbor-extract/cbor-extract-linux-arm" "2.2.0" - "@cbor-extract/cbor-extract-linux-arm64" "2.2.0" - "@cbor-extract/cbor-extract-linux-x64" "2.2.0" - "@cbor-extract/cbor-extract-win32-x64" "2.2.0" - -cbor-x@^1.5.4: - version "1.6.0" - resolved "https://registry.yarnpkg.com/cbor-x/-/cbor-x-1.6.0.tgz#89c35d2d805efc30e09a28349425cc05d57aacd7" - integrity sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg== - optionalDependencies: - cbor-extract "^2.2.0" - -chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -check-more-types@2.24.0, check-more-types@^2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" - integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== - -chokidar@^2.0.3: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -ci-info@^3.2.0: - version "3.9.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" - integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-table3@~0.6.1: - version "0.6.5" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" - integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^2.0.16: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combine-source-map@^0.8.0, combine-source-map@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" - integrity sha512-UlxQ9Vw0b/Bt/KYwCFqdEwsQ1eL8d1gibiFb7lxQJFdvTgc2hIZi6ugsg+kyhzhPV+QEpUiEIwInIAIrgoEkrg== - dependencies: - convert-source-map "~1.1.0" - inline-source-map "~0.6.0" - lodash.memoize "~3.0.3" - source-map "~0.5.3" - -combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.9.0: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - -component-emitter@^1.2.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" - integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -constants-browserify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ== - -convert-source-map@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" - integrity sha512-Y8L5rp6jo+g9VEPgvqNfEopjTR4OTYct8lXlS8iVQdmnjDvbdbzYe9rjtFCB9egC86JoNCU61WRY+ScjkZpnIg== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -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" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -create-ecdh@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" - integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== - dependencies: - bn.js "^4.1.0" - elliptic "^6.5.3" - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-spawn@^6.0.0: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.0, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.0.0: - version "3.12.1" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.1.tgz#bb8921bec9acc81633379aa8f52d69b0b69e0dac" - integrity sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ== - dependencies: - browserify-cipher "^1.0.1" - browserify-sign "^4.2.3" - create-ecdh "^4.0.4" - create-hash "^1.2.0" - create-hmac "^1.1.7" - diffie-hellman "^5.0.3" - hash-base "~3.0.4" - inherits "^2.0.4" - pbkdf2 "^3.1.2" - public-encrypt "^4.0.3" - randombytes "^2.1.0" - randomfill "^1.0.4" - -cy2@^3.4.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/cy2/-/cy2-3.4.3.tgz#c61665a953256e22399804f69067bb407ca922da" - integrity sha512-I1yfJWJTRy2ROti1TlLM5Qk86WSeKMrtZbY/G6VD2tjm3VKTu6pDkpcV56C2HhN+txK5p6MMsmzKXJM2W9JlxA== - dependencies: - acorn "^8.8.0" - debug "^4.3.2" - escodegen "^2.0.0" - estraverse "^5.3.0" - js-yaml "^4.1.0" - npm-which "^3.0.1" - slash "3.0.0" - -cypress-browser-extension-plugin@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/cypress-browser-extension-plugin/-/cypress-browser-extension-plugin-0.1.0.tgz#c7cfddfac62cf563be55f0db98199902e7b22870" - integrity sha512-YbF5SneqoMrAN9XEz2I+okmCzK2RJPnl9+yBV5d2r/ayEia+bRTI0X+H+cOwlIgZ3XVQTOHeRX5s2sg1XPdTUw== - dependencies: - browserify "^16.2.0" - browserify-versionify "^1.0.6" - chokidar "^2.0.3" - fs-extra "^5.0.0" - nanoid "^1.0.2" - unzip-crx "^0.2.0" - -cypress-cloud@^1.9.3: - version "1.11.0" - resolved "https://registry.yarnpkg.com/cypress-cloud/-/cypress-cloud-1.11.0.tgz#7776f7e4f718dbc14a2e69391272403cfe73e263" - integrity sha512-dWRsHe78Uhru7nVpQ1Kt9P5qSPFTjCxorgNAxau02y3oLCeKmrBu3AVTBtiBJqalYvg67po2HffzG3cj+izTOg== - dependencies: - "@currents/commit-info" "1.0.1-beta.0" - axios "^1.2.0" - axios-retry "^3.4.0" - bluebird "^3.7.2" - chalk "^4.1.2" - commander "^10.0.0" - common-path-prefix "^3.0.0" - cy2 "^3.4.2" - debug "^4.3.4" - execa "^5.1.1" - getos "^3.2.1" - globby "^11.1.0" - is-absolute "^1.0.0" - lil-http-terminator "^1.2.3" - lodash "^4.17.21" - nanoid "^3.3.4" - plur "^4.0.0" - pretty-ms "^7.0.1" - source-map-support "^0.5.21" - table "^6.8.1" - tmp-promise "^3.0.3" - ts-pattern "^4.3.0" - ws "^8.13.0" - -cypress@^13.6.0: - version "13.15.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.15.0.tgz#5eca5387ef34b2e611cfa291967c69c2cd39381d" - integrity sha512-53aO7PwOfi604qzOkCSzNlWquCynLlKE/rmmpSPcziRH6LNfaDUAklQT6WJIsD8ywxlIy+uVZsnTMCCQVd2kTw== - dependencies: - "@cypress/request" "^3.0.4" - "@cypress/xvfb" "^1.2.4" - "@types/sinonjs__fake-timers" "8.1.1" - "@types/sizzle" "^2.3.2" - arch "^2.2.0" - blob-util "^2.0.2" - bluebird "^3.7.2" - buffer "^5.7.1" - cachedir "^2.3.0" - chalk "^4.1.0" - check-more-types "^2.24.0" - cli-cursor "^3.1.0" - cli-table3 "~0.6.1" - commander "^6.2.1" - common-tags "^1.8.0" - dayjs "^1.10.4" - debug "^4.3.4" - enquirer "^2.3.6" - eventemitter2 "6.4.7" - execa "4.1.0" - executable "^4.1.1" - extract-zip "2.0.1" - figures "^3.2.0" - fs-extra "^9.1.0" - getos "^3.2.1" - is-ci "^3.0.1" - is-installed-globally "~0.4.0" - lazy-ass "^1.6.0" - listr2 "^3.8.3" - lodash "^4.17.21" - log-symbols "^4.0.0" - minimist "^1.2.8" - ospath "^1.2.2" - pretty-bytes "^5.6.0" - process "^0.11.10" - proxy-from-env "1.0.0" - request-progress "^3.0.0" - semver "^7.5.3" - supports-color "^8.1.1" - tmp "~0.2.3" - untildify "^4.0.0" - yauzl "^2.10.0" - -dash-ast@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" - integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -dayjs@^1.10.4: - version "1.11.13" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" - integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== - -debug@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -define-data-property@^1.0.1, define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" - integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -deps-sort@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" - integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw== - dependencies: - JSONStream "^1.0.3" - shasum-object "^1.0.0" - subarg "^1.0.0" - through2 "^2.0.0" - -des.js@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.1.0.tgz#1d37f5766f3bbff4ee9638e871a8768c173b81da" - integrity sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -detect-libc@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== - -detective@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.1.tgz#6af01eeda11015acb0e73f933242b70f24f91034" - integrity sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw== - dependencies: - acorn-node "^1.8.2" - defined "^1.0.0" - minimist "^1.2.6" - -diffie-hellman@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -domain-browser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA== - dependencies: - readable-stream "^2.0.2" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -elliptic@^6.5.3, elliptic@^6.5.5: - version "6.5.7" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.7.tgz#8ec4da2cb2939926a1b9a73619d768207e647c8b" - integrity sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enquirer@^2.3.6: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -estraverse@^5.2.0, estraverse@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -eventemitter2@6.4.7: - version "6.4.7" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" - integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== - -events@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" - integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execa@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -execa@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -executable@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" - integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== - dependencies: - pify "^2.2.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-zip@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fast-safe-stringify@^2.0.7: - version "2.1.1" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" - integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== - -fast-uri@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" - integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -find-root@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/find-root/-/find-root-0.1.2.tgz#98d2267cff1916ccaf2743b3a0eea81d79d7dcd1" - integrity sha512-GyDxVgA61TZcrgDJPqOqGBpi80Uf2yIstubgizi7AjC9yPdRrqBR+Y0MvK4kXnYlaoz3d+SGxDHMYVkwI/yd2w== - -follow-redirects@^1.15.6: - version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@^4.0.0, form-data@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.1.tgz#ba1076daaaa5bfd7e99c1a6cb02aa0a5cff90d48" - integrity sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== - dependencies: - map-cache "^0.2.2" - -fs-extra@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" - integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@^1.2.7: - version "1.2.13" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" - integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -get-assigned-identifiers@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" - integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-stream@^5.0.0, get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== - -getos@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" - integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== - dependencies: - async "^3.2.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.1.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" - integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== - dependencies: - ini "2.0.0" - -globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6" - integrity sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ== - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash-base@~3.0, hash-base@~3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0, hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -htmlescape@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" - integrity sha512-eVcrzgbR4tim7c7soKQKtxa/kQM4TzjnlU83rcZ9bHU6t31ehfV7SktN6McWgwPWg+JYMA/O3qpGxBvFq1z2Jg== - -http-signature@~1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" - integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.18.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg== - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -ieee754@^1.1.13, ieee754@^1.1.4: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.3.2" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== - -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -inline-source-map@~0.6.0: - version "0.6.3" - resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.3.tgz#db9d553037fa74bf95dfbff186375fcf5c563cdd" - integrity sha512-1aVsPEsJWMJq/pdMU61CDlm1URcW702MTB4w9/zUjMus6H/Py8o7g68Pr9D4I6QluWGt/KdmswuRhaA05xVR1w== - dependencies: - source-map "~0.5.3" - -insert-module-globals@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.1.tgz#d5e33185181a4e1f33b15f7bf100ee91890d5cb3" - integrity sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg== - dependencies: - JSONStream "^1.0.3" - acorn-node "^1.5.2" - combine-source-map "^0.8.0" - concat-stream "^1.6.1" - is-buffer "^1.1.0" - path-is-absolute "^1.0.1" - process "~0.11.0" - through2 "^2.0.0" - undeclared-identifiers "^1.1.2" - xtend "^4.0.0" - -irregular-plurals@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.5.0.tgz#0835e6639aa8425bdc8b0d33d0dc4e89d9c01d2b" - integrity sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ== - -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - -is-accessor-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" - integrity sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA== - dependencies: - hasown "^2.0.0" - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== - dependencies: - binary-extensions "^1.0.0" - -is-buffer@^1.1.0, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-ci@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-core-module@^2.13.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.15.1.tgz#a7363a25bee942fefab0de13bf6aa372c82dcc37" - integrity sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ== - dependencies: - hasown "^2.0.2" - -is-data-descriptor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" - integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== - dependencies: - hasown "^2.0.0" - -is-descriptor@^0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.7.tgz#2727eb61fd789dcd5bdf0ed4569f551d2fe3be33" - integrity sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.3.tgz#92d27cb3cd311c4977a4db47df457234a13cb306" - integrity sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw== - dependencies: - is-accessor-descriptor "^1.0.1" - is-data-descriptor "^1.0.1" - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-installed-globally@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - -is-retry-allowed@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d" - integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg== - -is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" - integrity sha512-nKtD/Qxm7tWdZqJoldEC7fF0S41v0mWbeaXG3637stOWfyGxTgWTYE2wtfKmjzpvxv2MA2xzxsXOIiwUpkX6Qw== - dependencies: - jsonify "~0.0.0" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" - integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== - -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -jszip@^3.1.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" - integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - setimmediate "^1.0.5" - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== - dependencies: - is-buffer "^1.1.5" - -kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -labeled-stream-splicer@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" - integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw== - dependencies: - inherits "^2.0.1" - stream-splicer "^2.0.0" - -lazy-ass@1.6.0, lazy-ass@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - -lil-http-terminator@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/lil-http-terminator/-/lil-http-terminator-1.2.3.tgz#594ef0f3c2b2f7d43a8f2989b2b3de611bf507eb" - integrity sha512-vQcHSwAFq/kTR2cG6peOVS7SjgksGgSPeH0G2lkw+buue33thE/FCHdn10wJXXshc5RswFy0Iaz48qA2Busw5Q== - -listr2@^3.8.3: - version "3.14.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" - integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.1" - through "^2.3.8" - wrap-ansi "^7.0.0" - -lodash.memoize@~3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" - integrity sha512-eDn9kqrAmVUC1wmZvlQ6Uhde44n+tXpqPrN8olQJbttgh0oKclk+SF54P47VEGE9CEiMeRwAP8BaM7UHvBkz2A== - -lodash.once@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -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@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== - dependencies: - object-visit "^1.0.0" - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^3.1.10, micromatch@^3.1.4: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -micromatch@^4.0.4: - version "4.0.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.1.0, minimist@^1.2.6, minimist@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-classic@^0.5.2: - version "0.5.3" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" - integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== - -mkdirp@^0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -module-deps@^6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.3.tgz#15490bc02af4b56cf62299c7c17cba32d71a96ee" - integrity sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA== - dependencies: - JSONStream "^1.0.3" - browser-resolve "^2.0.0" - cached-path-relative "^1.0.2" - concat-stream "~1.6.0" - defined "^1.0.0" - detective "^5.2.0" - duplexer2 "^0.1.2" - inherits "^2.0.1" - parents "^1.0.0" - readable-stream "^2.0.2" - resolve "^1.4.0" - stream-combiner2 "^1.1.1" - subarg "^1.0.0" - through2 "^2.0.0" - xtend "^4.0.0" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "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.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nan@^2.12.1: - version "2.22.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.22.0.tgz#31bc433fc33213c97bad36404bb68063de604de3" - integrity sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw== - -nanoid@^1.0.2: - version "1.3.4" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-1.3.4.tgz#ad89f62c9d1f4fd69710d4a90953d2893d2d31f4" - integrity sha512-4ug4BsuHxiVHoRUe1ud6rUFT3WUMmjXt1W0quL0CviZQANdan7D8kqN5/maw53hmAApY/jfzMRkC57BNNs60ZQ== - -nanoid@^3.3.4: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-gyp-build-optional-packages@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz#52b143b9dd77b7669073cbfe39e3f4118bfc603c" - integrity sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw== - dependencies: - detect-libc "^2.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - integrity sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw== - dependencies: - which "^1.2.10" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== - dependencies: - path-key "^2.0.0" - -npm-run-path@^4.0.0, npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - integrity sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A== - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== - dependencies: - isobject "^3.0.0" - -object.assign@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== - dependencies: - isobject "^3.0.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -os-browserify@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A== - -ospath@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" - integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -pako@~1.0.2, pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parents@^1.0.0, parents@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" - integrity sha512-mXKF3xkoUt5td2DoxpLmtOmZvko9VfFpwRwkKDHSNvgmpLAeBo18YDhcPbBzJq+QLCHMbGOfzia2cX4U+0v9Mg== - dependencies: - path-platform "~0.11.15" - -parse-asn1@^5.0.0, parse-asn1@^5.1.7: - version "5.1.7" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.7.tgz#73cdaaa822125f9647165625eb45f8a051d2df06" - integrity sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg== - dependencies: - asn1.js "^4.10.1" - browserify-aes "^1.2.0" - evp_bytestokey "^1.0.3" - hash-base "~3.0" - pbkdf2 "^3.1.2" - safe-buffer "^5.2.1" - -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== - -path-browserify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-platform@~0.11.15: - version "0.11.15" - resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" - integrity sha512-Y30dB6rab1A/nfEKsZxmr01nUotHX0c/ZiIAsCTatEe1CmS5Pm5He7fZ195bPT7RdquoaL8lLxFCMQi/bS7IJg== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pbkdf2@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -plur@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/plur/-/plur-4.0.0.tgz#729aedb08f452645fe8c58ef115bf16b0a73ef84" - integrity sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg== - dependencies: - irregular-plurals "^3.2.0" - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== - -pretty-bytes@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -pretty-ms@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" - integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== - dependencies: - parse-ms "^2.1.0" - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10, process@~0.11.0: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -proxy-from-env@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -public-encrypt@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" - integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^1.3.2, punycode@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== - -punycode@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -qs@6.13.0, qs@^6.12.3: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" - -querystring-es3@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA== - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -ramda@0.26.1: - version "0.26.1" - resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" - integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -read-only-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" - integrity sha512-3ALe0bjBVZtkdWKIcThYpQCLbBMd/+Tbh2CDSrAIDO3UsZ4Xs+tnyjv2MjCOMMgBG+AsUOeuP1cgtY1INISc8w== - dependencies: - readable-stream "^2.0.2" - -"readable-stream@>=1.0.33-1 <1.1.0-0": - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.8, readable-stream@~2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== - -repeat-element@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" - integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== - -repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== - -request-progress@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" - integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== - dependencies: - throttleit "^1.0.0" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== - -resolve@^1.1.4, resolve@^1.17.0, resolve@^1.4.0: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== - dependencies: - ret "~0.1.10" - -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver@^5.5.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^7.5.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shasum-object@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" - integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg== - dependencies: - fast-safe-stringify "^2.0.7" - -shasum@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" - integrity sha512-UTzHm/+AzKfO9RgPgRpDIuMSNie1ubXRaljjlhFMNGYoG7z+rm9AHLPMf70R7887xboDH9Q+5YQbWKObFHEAtw== - dependencies: - json-stable-stringify "~0.0.0" - sha.js "~2.4.4" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.6.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -slash@3.0.0, slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.21: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" - integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== - -source-map@^0.5.6, source-map@~0.5.3: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== - -source-map@^0.6.0, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sshpk@^1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" - integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -stream-browserify@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-combiner2@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw== - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-http@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5" - integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.4" - readable-stream "^3.6.0" - xtend "^4.0.2" - -stream-splicer@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd" - integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.2" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -subarg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - integrity sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg== - dependencies: - minimist "^1.1.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -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== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -syntax-error@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" - integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== - dependencies: - acorn-node "^1.2.0" - -table@^6.8.1: - version "6.8.2" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" - integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -throttleit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" - integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== - -through2@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.3.tgz#795292fde9f254c2a368b38f9cc5d1bd4663afb6" - integrity sha512-6UXIsO0fTTYMgxeQ9pisMOIqF/uL6Ebva+4HxihtLLR2gscWEu+OTMwar/0TYZaeDSNS1msIJAXJRis+GojL8g== - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - -through2@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -"through@>=2.2.7 <3", through@^2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -timers-browserify@^1.0.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - integrity sha512-PIxwAupJZiYU4JmVZYwXp9FKsHMXb5h0ZEFyuXTAn8WLHOlcij+FEcbrvDsom1o5dr1YggEtFbECvGCW2sT53Q== - dependencies: - process "~0.11.0" - -tmp-promise@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-3.0.3.tgz#60a1a1cc98c988674fcbfd23b6e3367bdeac4ce7" - integrity sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ== - dependencies: - tmp "^0.2.0" - -tmp@^0.2.0, tmp@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" - integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -tough-cookie@^4.1.3: - version "4.1.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" - integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -ts-pattern@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ts-pattern/-/ts-pattern-4.3.0.tgz#7a995b39342f1b00d1507c2d2f3b90ea16e178a6" - integrity sha512-pefrkcd4lmIVR0LA49Imjf9DYLK8vtWhqBPA3Ya1ir8xCW0O2yjL9dsCVvI7pCodLC5q7smNpEtDR2yVulQxOg== - -tslib@^2.1.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" - integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== - -tty-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" - integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== - -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" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript@^5.1.6: - version "5.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" - integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== - -umd@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" - integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== - -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== - -undeclared-identifiers@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" - integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw== - dependencies: - acorn-node "^1.3.0" - dash-ast "^1.0.0" - get-assigned-identifiers "^1.2.0" - simple-concat "^1.0.0" - xtend "^4.0.1" - -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - -unzip-crx@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/unzip-crx/-/unzip-crx-0.2.0.tgz#4c0baa8bdac756256754beca7843c13d7b858c18" - integrity sha512-6LGdnpdnX5mkTdjdsZVuKRC63ht8pgOUGYYYK/wsDtgw81+W7WUBXLHzhhAcc/lxUvK7ByqZAzlwaa9U6CMSCQ== - dependencies: - jszip "^3.1.0" - mkdirp "^0.5.1" - yaku "^0.16.6" - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== - -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url@~0.11.0: - version "0.11.4" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.4.tgz#adca77b3562d56b72746e76b330b7f27b6721f3c" - integrity sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg== - dependencies: - punycode "^1.4.1" - qs "^6.12.3" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.10.4, util@~0.10.1: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - dependencies: - inherits "2.0.3" - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vm-browserify@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -which@^1.2.10, which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^8.13.0: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== - -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -yaku@^0.16.6: - version "0.16.7" - resolved "https://registry.yarnpkg.com/yaku/-/yaku-0.16.7.tgz#1d195c78aa9b5bf8479c895b9504fd4f0847984e" - integrity sha512-Syu3IB3rZvKvYk7yTiyl1bo/jiEFaaStrgv1V2TIJTqYPStSMQVO8EQjg/z+DRzLq/4LIIharNT3iH1hylEIRw== - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" diff --git a/tests/test-metrics-api/.env.example b/tests/test-metrics-api/.env.example deleted file mode 100644 index ab6a5e93d..000000000 --- a/tests/test-metrics-api/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -PGHOST='office.sireto.dev' -PGPORT=8080 -PGDATABASE='govtool' -PGUSER='postgres' -PGPASSWORD='your password' -API_SECRET_TOKEN='some-token' diff --git a/tests/test-metrics-api/.gitignore b/tests/test-metrics-api/.gitignore deleted file mode 100644 index e75fc9993..000000000 --- a/tests/test-metrics-api/.gitignore +++ /dev/null @@ -1,159 +0,0 @@ -run/ -### Node ### -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* - -### Node Patch ### -# Serverless Webpack directories -.webpack/ - -# Optional stylelint cache - -# SvelteKit build / generate output -.svelte-kit - -### VisualStudioCode ### -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -!.vscode/*.code-snippets - -# Local History for Visual Studio Code -.history/ - -# Built Visual Studio Code Extensions -*.vsix - -### VisualStudioCode Patch ### -# Ignore all local history of files -.history -.ionide diff --git a/tests/test-metrics-api/.prettierrc.yaml b/tests/test-metrics-api/.prettierrc.yaml deleted file mode 100644 index a3f5bb1c7..000000000 --- a/tests/test-metrics-api/.prettierrc.yaml +++ /dev/null @@ -1,6 +0,0 @@ -# .prettierrc or .prettierrc.yaml -trailingComma: 'es5' -tabWidth: 2 -printWidth: 130 -semi: false -singleQuote: true diff --git a/tests/test-metrics-api/Dockerfile b/tests/test-metrics-api/Dockerfile deleted file mode 100644 index fd39b64e9..000000000 --- a/tests/test-metrics-api/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -FROM node:19 as prod -USER node -WORKDIR /home/node -COPY --chown=node:node package.json yarn.lock ./ -RUN yarn install --prod --frozen-lockfile - -FROM prod as builder -RUN yarn install --frozen-lockfile -COPY ./src ./src -COPY ./tsconfig.json . -RUN yarn build - -FROM prod -COPY --from=builder /home/node/dist/ ./ -ENV PGHOST=postgres \ - PGPORT=5432 \ - PGUSER=postgres \ - NODE_OPTIONS="--max-old-space-size=2048" \ - PORT=8080 \ - NODE_ENV=production -EXPOSE 8080 -CMD node index.js diff --git a/tests/test-metrics-api/README.md b/tests/test-metrics-api/README.md deleted file mode 100644 index 5526d0adb..000000000 --- a/tests/test-metrics-api/README.md +++ /dev/null @@ -1,161 +0,0 @@ -# Test Metrics API - -This api is intended to be called by Github Action whenever a new commit to GovTool app has been made and new metrics are obtained. The api expects a POST request with a JSON file of the metrics which will then update the database with the new metrics. - -## Prerequisite - -- **PostgresSql** Database - -### Table Structure - -Database tables are automatically created upon startup - -#### `test_metrics` Table - -| Column Name | Data Type | Constraints | -| ----------- | --------- | ----------- | -| id | SERIAL | PRIMARY KEY | -| outcome | TEXT | NOT NULL | -| start_date | BIGINT | NOT NULL | -| end_date | BIGINT | NOT NULL | -| build_id | TEXT | NOT NULL | -| test_name | TEXT | NOT NULL | -| commit_hash | TEXT | NOT NULL | - -#### `endpoint_metrics` Table - -| Column Name | Data Type | Constraints | -| ------------- | --------- | ----------- | -| id | SERIAL | PRIMARY KEY | -| build_id | TEXT | NOT NULL | -| method | TEXT | NOT NULL | -| endpoint | TEXT | NOT NULL | -| path_param | TEXT | | -| json | text | | -| status_code | INTEGER | NOT NULL | -| response_json | text | | -| response_time | BIGINT | NOT NULL | -| start_date | BIGINT | NOT NULL | - -### How to run - -To run it in develop mode, you can use `npm run make` command in the terminal -To compile it, you can use `npm run build` command in the terminal -To run the compiled version, you can use `npm run start` command in the terminal - -| Environment Variable | Description | -| -------------------- | ---------------------------------------------------------------------------------- | -| API_SECRET_TOKEN | A secret token that must be provided in each API call in the header `secret-token` | -| PGHOST | Hostname for the database server | -| PGPORT | Port number for the database server | -| PGDATABASE | Database name | -| PGUSER | Database username | -| PGPASSWORD | Database password | -| PORT | Port number for the API | - -### Posting metrics to the server - -``` -curl -X POST http://localhost:8080 \ - -d "@metrics.json" \ - -H "commitHash: abc" \ - -H "secret-token: token" - -H 'Content-Type: application/json' -``` - -# Metrics API Reference - -## Authentication - -Each API request must include a secret token in the request headers for authentication. - -- Headers: - - `secret-token`: The secret token used to authenticate requests. - -If the provided `secret-token` is missing or invalid, the server will return a `403 Forbidden` status code, and the request will not be processed further. - ---- - -# Metrics API Reference - -## Test Result Metrics - -### **POST** `/metrics/test-results` - -Stores test execution results into the database. - -#### Request - -- Headers: - - - `secret-token`: The secret token used to authenticate requests. - -- Body (application/json): - - ```json - { - "outcome": "passed", - "start_date": 1625072400000, - "end_date": 1625076000000, - "build_id": "build-12345", - "test_name": "Unit Tests", - "commit_hash": "abc123def456" - } - ``` - - - `TestMetricsJson` object structure. - -#### Response - -- **200 OK**: Metrics have been successfully uploaded. -- **400 Bad Request**: Metrics upload not successful. -- **403 Forbidden**: Secret Token missing or invalid. - ---- - -## API Endpoint Metrics - -### **POST** `/metrics/api-endpoints` - -Stores metrics related to API endpoint performance into the database. - -#### Request - -- Headers: - - - `secret-token`: The secret token used to authenticate requests. - -- Body (application/json): - - ```json - { - "build_id": "build-67890", - "method": "GET", - "endpoint": "/users/{userId}", - "path_param": "userId", - "json": {}, - "status_code": 200, - "response_json": { "name": "John Doe" }, - "response_time": 120, - "start_date": 1625079600000 - } - ``` - - - Replace any placeholder `{userId}` in the endpoint with actual path parameters. - - The `json` key should contain the JSON payload sent to the server or empty object if none. - - `EndpointMetricsJson` object structure. - -#### Response - -- **200 OK**: Metrics have been successfully uploaded. -- **400 Bad Request**: Metrics upload not successful. -- **403 Forbidden**: Secret Token missing or invalid. - ---- - - -## Packaging -Project used Docker for packaging. Build docker image with -``` -docker build -t voltaire-era/test-metrics-api . -``` diff --git a/tests/test-metrics-api/package.json b/tests/test-metrics-api/package.json deleted file mode 100644 index eea1827d7..000000000 --- a/tests/test-metrics-api/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "metrics-api", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "build": "npx tsc", - "start": "node dist/index.js", - "dev": "concurrently \"npx tsc --watch\" \"nodemon -q dist/index.js\"", - "make": "ts-node ./src/index.ts", - "format": "prettier . --write" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "dotenv": "^16.3.1", - "express": "^4.18.2", - "pg": "^8.11.1", - "typescript": "^5.1.6" - }, - "devDependencies": { - "prettier": "^3.1.0", - "@types/express": "^4.17.17", - "@types/multer": "^1.4.7", - "@types/node": "^20.4.5", - "@types/pg": "^8.10.2", - "concurrently": "^8.2.0", - "nodemon": "^3.0.1", - "ts-node": "^10.9.1" - } -} diff --git a/tests/test-metrics-api/src/config.ts b/tests/test-metrics-api/src/config.ts deleted file mode 100644 index 3d4f8d520..000000000 --- a/tests/test-metrics-api/src/config.ts +++ /dev/null @@ -1,42 +0,0 @@ -import * as dotenv from 'dotenv' -import * as fs from 'fs' -import * as path from 'path' - -dotenv.config() - -interface Config { - PGPASSWORD: string | undefined - PGUSER: string | undefined - API_SECRET_TOKEN: string | undefined - PGPORT: string | undefined - PGDATABASE: string | undefined - PGHOST: string | undefined -} - -const readSecretFromFile = (envVar: string): string | undefined => { - if (process.env[envVar]) { - return process.env[envVar] - } - const filePath = process.env[envVar + '_FILE'] || '/run/secrets/' + envVar.toLowerCase() - - try { - return fs.readFileSync(filePath, 'utf8').trim() - } catch (error) { - console.error(`Error reading secret from file ${filePath}:`, error) - process.exit(1) - } -} -const readFromEnv = (envVar: string, defaultVal: string): string => { - return process.env[envVar] || defaultVal -} - -const config: Config = { - PGPASSWORD: readSecretFromFile('PGPASSWORD'), - PGUSER: readSecretFromFile('PGUSER'), - API_SECRET_TOKEN: readSecretFromFile('API_SECRET_TOKEN'), - PGPORT: readFromEnv('PGPORT', '5432'), - PGDATABASE: readSecretFromFile('PGDATABASE'), - PGHOST: readFromEnv('PGHOST', '/run/secrets/host'), -} - -export default config diff --git a/tests/test-metrics-api/src/db.ts b/tests/test-metrics-api/src/db.ts deleted file mode 100644 index 2ab7ff6fe..000000000 --- a/tests/test-metrics-api/src/db.ts +++ /dev/null @@ -1,64 +0,0 @@ -import pg from 'pg' -import config from './config' -import { EndpointMetricsJson, LighthouseMetricsJson, TestMetricsJson } from './types' - -export const pool = new pg.Pool({ - host: config.PGHOST, - port: parseInt(config.PGPORT as string), - database: config.PGDATABASE, - user: config.PGUSER, - password: config.PGPASSWORD, -}) - -export async function migrate() { - let createTableQuery = ` - CREATE TABLE IF NOT EXISTS test_metrics ( - id SERIAL PRIMARY KEY, - outcome TEXT NOT NULL, - start_date BIGINT NOT NULL, - end_date BIGINT NOT NULL, - build_id TEXT NOT NULL, - test_name TEXT NOT NULL, - commit_hash TEXT NOT NULL - - )` - await pool.query(createTableQuery) - createTableQuery = ` - CREATE TABLE IF NOT EXISTS endpoint_metrics ( - id SERIAL PRIMARY KEY, - build_id TEXT NOT NULL, - method TEXT NOT NULL, - endpoint TEXT NOT NULL, - path_param TEXT, - json TEXT, - status_code INTEGER NOT NULL, - response_json TEXT , - response_time BIGINT NOT NULL, - start_date BIGINT NOT NULL - )` - await pool.query(createTableQuery) -} - -export async function testMetricsToDb(json: TestMetricsJson) { - const insertQuery = ` - INSERT INTO test_metrics (outcome, start_date, end_date, build_id, test_name, commit_hash) - VALUES ($1, $2, $3, $4, $5, $6)` - await pool.query(insertQuery, [json.outcome, json.start_date, json.end_date, json.build_id, json.test_name, json.commit_hash]) -} - -export async function endpointMetricsToDb(json: EndpointMetricsJson) { - const insertQuery = ` - INSERT INTO endpoint_metrics (build_id, method, endpoint, path_param, json, status_code, response_json, response_time, start_date) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)` - await pool.query(insertQuery, [ - json.build_id, - json.method, - json.endpoint, - json.path_param, - json.json, - json.status_code, - json.response_json, - json.response_time, - json.start_date, - ]) -} diff --git a/tests/test-metrics-api/src/index.ts b/tests/test-metrics-api/src/index.ts deleted file mode 100644 index f7ed04fce..000000000 --- a/tests/test-metrics-api/src/index.ts +++ /dev/null @@ -1,49 +0,0 @@ -import express, { Express, NextFunction, Request, Response } from 'express' -import config from './config' -import { endpointMetricsToDb, migrate, pool, testMetricsToDb } from './db' - -const app: Express = express() -const port = process.env.server_PORT || 8080 -app.use(express.json({ limit: '200mb' })) -app.use(express.urlencoded({ extended: true })) -migrate() - -const checkSecretToken = (req: Request, res: Response, next: NextFunction) => { - const key = req.get('secret-token') - - if (key !== config.API_SECRET_TOKEN) { - res.status(403).json({ message: 'Secret Token missing or invalid' }) - return - } - next() // Call next to proceed to the next middleware or route handler -} - -app.use(checkSecretToken) - - -async function uploadMetrics(req: Request, res: Response, uploadFunction: (file: any) => Promise) { - try { - const file = req.body - if (!file) { - throw 'File not uploaded' - } - await uploadFunction(file) - res.send('Metrics have been successfully uploaded to database') - } catch (e) { - console.log('Error: ', e) - res.status(400).send('Metrics upload not successful') - } -} - -app.post('/metrics/test-results', async (req: Request, res: Response) => { - uploadMetrics(req, res, testMetricsToDb) -}) - -app.post('/metrics/api-endpoints', async (req: Request, res: Response) => { - uploadMetrics(req, res, endpointMetricsToDb) -}) -pool.connect().then(() => - app.listen(port, () => { - console.log(`⚡️[server]: Server is running at http://localhost:${port}`) - }) -) diff --git a/tests/test-metrics-api/src/types.ts b/tests/test-metrics-api/src/types.ts deleted file mode 100644 index 8eab9e6e8..000000000 --- a/tests/test-metrics-api/src/types.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Define TypeScript types for the various JSON structures -export interface TestMetricsJson { - outcome: string - start_date: number - end_date: number - build_id: string - test_name: string - commit_hash: string -} - -export interface EndpointMetricsJson { - build_id: string - method: string - endpoint: string - path_param?: string - json?: any // Replace 'any' with a more specific type if possible - status_code: number - response_json?: any // Replace 'any' with a more specific type if possible - response_time: number - start_date: number -} - -export interface LighthouseAuditMetric { - numericValue: number - numericUnit: 'ms' | 's' -} - -// Complete Lighthouse Metrics JSON Type -export interface LighthouseMetricsJson { - audits: { - interactive: LighthouseAuditMetric - 'first-contentful-paint': LighthouseAuditMetric - 'speed-index': LighthouseAuditMetric - 'total-blocking-time': LighthouseAuditMetric - 'largest-contentful-paint': LighthouseAuditMetric - 'cumulative-layout-shift': LighthouseAuditMetric - [auditName: string]: LighthouseAuditMetric // In case there are more metrics that follow the same pattern - } - fetchTime: string -} diff --git a/tests/test-metrics-api/tsconfig.json b/tests/test-metrics-api/tsconfig.json deleted file mode 100644 index c4dab6be2..000000000 --- a/tests/test-metrics-api/tsconfig.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "compilerOptions": { - /* Visit https://aka.ms/tsconfig to read more about this file */ - - /* Projects */ - // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ - // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ - // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ - // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ - // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ - // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ - - /* Language and Environment */ - "target": "es2016" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, - // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ - // "jsx": "preserve", /* Specify what JSX code is generated. */ - // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ - // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ - // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ - // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ - // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ - // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ - // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ - // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ - // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ - - /* Modules */ - "module": "commonjs" /* Specify what module code is generated. */, - // "rootDir": "./", /* Specify the root folder within your source files. */ - // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ - // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ - // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ - // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ - // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ - // "types": [], /* Specify type package names to be included without being referenced in a source file. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ - // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ - // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ - // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ - // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ - // "resolveJsonModule": true, /* Enable importing .json files. */ - // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ - // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ - - /* JavaScript Support */ - // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ - // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ - // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ - - /* Emit */ - // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ - // "declarationMap": true, /* Create sourcemaps for d.ts files. */ - // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ - // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ - // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ - // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ - // "outDir": "./", /* Specify an output folder for all emitted files. */ - // "removeComments": true, /* Disable emitting comments. */ - // "noEmit": true, /* Disable emitting files from a compilation. */ - // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ - // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ - // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ - // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ - // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ - // "newLine": "crlf", /* Set the newline character for emitting files. */ - // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ - // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ - // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ - // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ - // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ - // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ - - /* Interop Constraints */ - // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ - // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ - // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ - "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, - // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ - "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, - - "outDir": "./dist", - /* Type Checking */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ - // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ - // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ - // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ - // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ - // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ - // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ - // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ - // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ - // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ - // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ - // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ - // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ - // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ - // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ - // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ - // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ - - /* Completeness */ - // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ - "skipLibCheck": true /* Skip type checking all .d.ts files. */ - } -} diff --git a/tests/test-metrics-api/yarn.lock b/tests/test-metrics-api/yarn.lock deleted file mode 100644 index 723440550..000000000 --- a/tests/test-metrics-api/yarn.lock +++ /dev/null @@ -1,1247 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/runtime@^7.21.0": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.9.tgz#65884fd6dc255a775402cc1d9811082918f4bf00" - integrity sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg== - dependencies: - regenerator-runtime "^0.14.0" - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" - integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@tsconfig/node10@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" - integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/express-serve-static-core@^4.17.33": - version "4.19.6" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" - integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express-serve-static-core@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz#91f06cda1049e8f17eeab364798ed79c97488a1c" - integrity sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@*": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.0.tgz#13a7d1f75295e90d19ed6e74cab3678488eaa96c" - integrity sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^5.0.0" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/express@^4.17.17": - version "4.17.21" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.21.tgz#c26d4a151e60efe0084b23dc3369ebc631ed192d" - integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.33" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/multer@^1.4.7": - version "1.4.12" - resolved "https://registry.yarnpkg.com/@types/multer/-/multer-1.4.12.tgz#da67bd0c809f3a63fe097c458c0d4af1fea50ab7" - integrity sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg== - dependencies: - "@types/express" "*" - -"@types/node@*": - version "22.7.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.9.tgz#2bf2797b5e84702d8262ea2cf843c3c3c880d0e9" - integrity sha512-jrTfRC7FM6nChvU7X2KqcrgquofrWLFDeYC1hKfwNWomVvrn7JIksqf344WN2X/y8xrgqBd2dJATZV4GbatBfg== - dependencies: - undici-types "~6.19.2" - -"@types/node@^20.4.5": - version "20.16.15" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.16.15.tgz#826f97ca53a213d190124ca6a972206f06a88b69" - integrity sha512-DV58qQz9dBMqVVn+qnKwGa51QzCD4YM/tQM16qLKxdf5tqz5W4QwtrMzjSTbabN1cFTSuyxVYBy+QWHjWW8X/g== - dependencies: - undici-types "~6.19.2" - -"@types/pg@^8.10.2": - version "8.11.10" - resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.11.10.tgz#b8fb2b2b759d452fe3ec182beadd382563b63291" - integrity sha512-LczQUW4dbOQzsH2RQ5qoeJ6qJPdrcM/DcMLoqWQkMLMsq83J5lAX3LXjdkWdpscFy67JSOWDnh7Ny/sPFykmkg== - dependencies: - "@types/node" "*" - pg-protocol "*" - pg-types "^4.0.1" - -"@types/qs@*": - version "6.9.16" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.16.tgz#52bba125a07c0482d26747d5d4947a64daf8f794" - integrity sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.7" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.7.tgz#22174bbd74fb97fe303109738e9b5c2f3064f714" - integrity sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw== - dependencies: - "@types/http-errors" "*" - "@types/node" "*" - "@types/send" "*" - -accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-walk@^8.1.1: - version "8.3.4" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" - integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== - dependencies: - acorn "^8.11.0" - -acorn@^8.11.0, acorn@^8.4.1: - version "8.13.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.13.0.tgz#2a30d670818ad16ddd6a35d3842dacec9e5d7ca3" - integrity sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -body-parser@1.20.3: - version "1.20.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" - integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.13.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@~3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^3.5.2: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concurrently@^8.2.0: - version "8.2.2" - resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-8.2.2.tgz#353141985c198cfa5e4a3ef90082c336b5851784" - integrity sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg== - dependencies: - chalk "^4.1.2" - date-fns "^2.30.0" - lodash "^4.17.21" - rxjs "^7.8.1" - shell-quote "^1.8.1" - spawn-command "0.0.2" - supports-color "^8.1.1" - tree-kill "^1.2.2" - yargs "^17.7.2" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" - integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -date-fns@^2.30.0: - version "2.30.0" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" - integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== - dependencies: - "@babel/runtime" "^7.21.0" - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^4: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - -define-data-property@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dotenv@^16.3.1: - version "16.4.5" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" - integrity sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg== - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -escalade@^3.1.1: - version "3.2.0" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -express@^4.18.2: - version "4.21.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.21.1.tgz#9dae5dda832f16b4eec941a4e44aa89ec481b281" - integrity sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.3" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.7.1" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~2.0.0" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.3.1" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.3" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.10" - proxy-addr "~2.0.7" - qs "6.13.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.19.0" - serve-static "1.16.2" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" - integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== - dependencies: - debug "2.6.9" - encodeurl "~2.0.0" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== - -has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -hasown@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ignore-by-default@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" - integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== - -inherits@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -merge-descriptors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" - integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.3, 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== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -nodemon@^3.0.1: - version "3.1.7" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.7.tgz#07cb1f455f8bece6a499e0d72b5e029485521a54" - integrity sha512-hLj7fuMow6f0lbB0cD14Lz2xNjwsyruH251Pk4t/yIitCFJbmY1myuLlHm/q06aST4jg6EgAh74PIBBrRqpVAQ== - dependencies: - chokidar "^3.5.2" - debug "^4" - ignore-by-default "^1.0.1" - minimatch "^3.1.2" - pstree.remy "^1.1.8" - semver "^7.5.3" - simple-update-notifier "^2.0.0" - supports-color "^5.5.0" - touch "^3.1.0" - undefsafe "^2.0.5" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== - -obuf@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" - integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -path-to-regexp@0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" - integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== - -pg-cloudflare@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" - integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== - -pg-connection-string@^2.7.0: - version "2.7.0" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.7.0.tgz#f1d3489e427c62ece022dba98d5262efcb168b37" - integrity sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA== - -pg-int8@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" - integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw== - -pg-numeric@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pg-numeric/-/pg-numeric-1.0.2.tgz#816d9a44026086ae8ae74839acd6a09b0636aa3a" - integrity sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw== - -pg-pool@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.7.0.tgz#d4d3c7ad640f8c6a2245adc369bafde4ebb8cbec" - integrity sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g== - -pg-protocol@*, pg-protocol@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.7.0.tgz#ec037c87c20515372692edac8b63cf4405448a93" - integrity sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ== - -pg-types@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3" - integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA== - dependencies: - pg-int8 "1.0.1" - postgres-array "~2.0.0" - postgres-bytea "~1.0.0" - postgres-date "~1.0.4" - postgres-interval "^1.1.0" - -pg-types@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-4.0.2.tgz#399209a57c326f162461faa870145bb0f918b76d" - integrity sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng== - dependencies: - pg-int8 "1.0.1" - pg-numeric "1.0.2" - postgres-array "~3.0.1" - postgres-bytea "~3.0.0" - postgres-date "~2.1.0" - postgres-interval "^3.0.0" - postgres-range "^1.1.1" - -pg@^8.11.1: - version "8.13.0" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.13.0.tgz#e3d245342eb0158112553fcc1890a60720ae2a3d" - integrity sha512-34wkUTh3SxTClfoHB3pQ7bIMvw9dpFU1audQQeZG837fmHfHpr14n/AELVDoOYVDW2h5RDWU78tFjkD+erSBsw== - dependencies: - pg-connection-string "^2.7.0" - pg-pool "^3.7.0" - pg-protocol "^1.7.0" - pg-types "^2.1.0" - pgpass "1.x" - optionalDependencies: - pg-cloudflare "^1.1.1" - -pgpass@1.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d" - integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug== - dependencies: - split2 "^4.1.0" - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -postgres-array@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e" - integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA== - -postgres-array@~3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-3.0.2.tgz#68d6182cb0f7f152a7e60dc6a6889ed74b0a5f98" - integrity sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog== - -postgres-bytea@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35" - integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w== - -postgres-bytea@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-3.0.0.tgz#9048dc461ac7ba70a6a42d109221619ecd1cb089" - integrity sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw== - dependencies: - obuf "~1.1.2" - -postgres-date@~1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" - integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== - -postgres-date@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-2.1.0.tgz#b85d3c1fb6fb3c6c8db1e9942a13a3bf625189d0" - integrity sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA== - -postgres-interval@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" - integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ== - dependencies: - xtend "^4.0.0" - -postgres-interval@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-3.0.0.tgz#baf7a8b3ebab19b7f38f07566c7aab0962f0c86a" - integrity sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw== - -postgres-range@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/postgres-range/-/postgres-range-1.1.4.tgz#a59c5f9520909bcec5e63e8cf913a92e4c952863" - integrity sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w== - -prettier@^3.1.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" - integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -pstree.remy@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" - integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== - -qs@6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" - integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== - dependencies: - side-channel "^1.0.6" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-buffer@5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -"safer-buffer@>= 2.1.2 < 3": - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -semver@^7.5.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== - -send@0.19.0: - version "0.19.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" - integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -serve-static@1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" - integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== - dependencies: - encodeurl "~2.0.0" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.19.0" - -set-function-length@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - dependencies: - define-data-property "^1.1.4" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shell-quote@^1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== - -side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== - dependencies: - call-bind "^1.0.7" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -simple-update-notifier@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" - integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== - dependencies: - semver "^7.5.3" - -spawn-command@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" - integrity sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ== - -split2@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" - integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -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== - dependencies: - has-flag "^4.0.0" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -touch@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" - integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -ts-node@^10.9.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tslib@^2.1.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.0.tgz#d124c86c3c05a40a91e6fdea4021bd31d377971b" - integrity sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typescript@^5.1.6: - version "5.6.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" - integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== - -undefsafe@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" - integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== - -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -xtend@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==