From 426b2ed221409ae741cdeded19e95b1cac79b592 Mon Sep 17 00:00:00 2001 From: Aaron Quirk Date: Tue, 17 Oct 2023 23:56:55 -0400 Subject: [PATCH] Initial commit --- .eslintignore | 3 + .eslintrc.js | 157 + .gitignore | 190 + .prettierignore | 3 + .prettierrc | 16 + .yarnrc.yml | 3 + LICENSE | 21 + client.jest.config.ts | 38 + jest.config.ts | 33 + package.json | 61 + packages.base.tsconfig.json | 27 + packages.build.tsconfig.json | 25 + packages/config/package.json | 7 + packages/config/src/env/default.ts | 93 + packages/config/src/env/development.ts | 23 + packages/config/src/env/e2e.ts | 7 + packages/config/src/env/index.test.ts | 30 + packages/config/src/env/index.ts | 56 + packages/config/src/env/production.ts | 60 + packages/config/src/env/staging.ts | 12 + packages/config/src/env/testing.ts | 7 + packages/config/src/env/types.ts | 107 + packages/config/src/index.ts | 3 + packages/config/tsconfig.json | 9 + packages/tsconfig.json | 25 + server.jest.config.ts | 21 + server/.eslintrc.js | 128 + server/README.md | 3 + server/actions/backendActions.ts | 22 + server/actions/badgeActions.ts | 43 + server/actions/domainActions.ts | 76 + server/actions/domainProfile.ts | 154 + server/actions/featureFlagActions.ts | 41 + server/actions/identityActions.ts | 24 + server/actions/messageActions.ts | 82 + server/components/Badges/Badge.tsx | 324 + server/components/Badges/BadgePopupModal.tsx | 454 + server/components/Badges/BadgeRankings.tsx | 127 + server/components/Badges/CollectionStats.tsx | 94 + server/components/Badges/ComposeMessage.tsx | 301 + server/components/Badges/index.tsx | 150 + server/components/Chat/IncomingSnackbar.tsx | 147 + server/components/Chat/SupportBubble.tsx | 156 + .../components/Chat/UnstoppableMessaging.tsx | 934 + .../Chat/hooks/useFetchNotification.ts | 66 + .../components/Chat/hooks/useIsTabActive.ts | 25 + .../Chat/hooks/useUnstoppableMessaging.tsx | 32 + server/components/Chat/modal/ChatModal.tsx | 1035 + .../Chat/modal/LinkWarningModal.tsx | 153 + server/components/Chat/modal/Search.tsx | 133 + server/components/Chat/modal/SetupModal.tsx | 339 + .../components/Chat/modal/dm/Conversation.tsx | 473 + .../Chat/modal/dm/ConversationBubble.tsx | 189 + .../Chat/modal/dm/ConversationCompose.tsx | 310 + .../Chat/modal/dm/ConversationPreview.tsx | 168 + .../Chat/modal/dm/ConversationStart.tsx | 242 + .../components/Chat/modal/group/Community.tsx | 349 + .../Chat/modal/group/CommunityCompose.tsx | 325 + .../group/CommunityConversationBubble.tsx | 252 + .../Chat/modal/group/CommunityList.tsx | 200 + .../Chat/modal/group/CommunityPreview.tsx | 272 + .../notification/NotificationPreview.tsx | 122 + server/components/Chat/modal/styles.ts | 302 + server/components/Chat/protocol/push.ts | 187 + .../components/Chat/protocol/registration.ts | 54 + server/components/Chat/protocol/resolution.ts | 40 + server/components/Chat/protocol/upload.ts | 22 + server/components/Chat/protocol/xmtp.ts | 309 + .../provider/UnstoppableMessagingProvider.tsx | 45 + server/components/Chat/storage.ts | 61 + server/components/Chat/types.ts | 92 + server/components/CopyToClipboard.tsx | 36 + .../CryptoAddresses/CryptoAddress.tsx | 318 + server/components/CryptoAddresses/index.tsx | 161 + .../CustomBadges/CustomBadgesDialog.tsx | 451 + server/components/CustomBadges/header.png | Bin 0 -> 91664 bytes server/components/CustomBadges/index.tsx | 73 + server/components/Domain/DomainListModal.tsx | 87 + server/components/Domain/DomainPreview.tsx | 294 + .../components/Domain/DomainProfileList.tsx | 176 + server/components/Domain/FollowButton.tsx | 164 + server/components/Domain/ProfilePicture.tsx | 311 + server/components/Domain/ProfileQrCode.tsx | 75 + server/components/Domain/ShareMenu.tsx | 209 + server/components/Domain/ShowHideButton.tsx | 132 + .../components/Domain/SocialAccountCard.tsx | 416 + server/components/DropDownMenu.tsx | 125 + server/components/ForSaleOnOpenSea.tsx | 111 + server/components/Header/AccountButton.tsx | 177 + server/components/Header/LoginButton.tsx | 222 + server/components/Header/ProfileSearchBar.tsx | 281 + server/components/Image/CryptoIcon.tsx | 708 + server/components/Image/LensIcon.tsx | 21 + server/components/Image/Logo.tsx | 67 + .../components/Image/UnstoppableAnimated.tsx | 95 + server/components/LearnMoreUdBlue.tsx | 217 + server/components/Link.tsx | 110 + server/components/Modal.tsx | 110 + .../TokenGallery/NFTGalleryCarousel.tsx | 222 + server/components/TokenGallery/NftCard.tsx | 306 + .../TokenGallery/NftFilterSelect.tsx | 176 + .../TokenGallery/NftFilterSelectOption.tsx | 69 + .../NftFirstTimeGalleryContainer.tsx | 70 + .../TokenGallery/NftGalleryData.tsx | 193 + .../TokenGallery/NftGalleryManager.tsx | 389 + .../TokenGallery/NftGalleryView.tsx | 391 + server/components/TokenGallery/NftImage.tsx | 22 + server/components/TokenGallery/NftModal.tsx | 434 + .../components/TokenGallery/TokenGallery.tsx | 273 + server/components/Wallet/AccessEthereum.tsx | 144 + server/components/Wallet/AccessWallet.tsx | 194 + server/components/Wallet/ProfileManager.tsx | 193 + server/components/Wallet/WalletButton.tsx | 431 + server/hooks/useEnsDomainStatus.ts | 13 + server/hooks/usePrevious.ts | 19 + server/hooks/useTokenGallery.tsx | 28 + server/hooks/useWeb3Context.tsx | 17 + server/lib/cookie.ts | 64 + server/lib/displayCryptoAddress.ts | 35 + server/lib/domain/format.ts | 79 + server/lib/domain/getImageUrl.ts | 38 + server/lib/domain/records.ts | 43 + server/lib/error.ts | 13 + server/lib/fetchApi.ts | 41 + server/lib/formOpenseaLink.ts | 20 + server/lib/formSocialMediaLink.ts | 46 + server/lib/i18n/TranslationContext.ts | 10 + server/lib/i18n/TranslationProvider.tsx | 63 + server/lib/i18n/helpers.ts | 76 + server/lib/i18n/index.ts | 10 + server/lib/i18n/types.ts | 24 + .../resolution/unstoppableDomainsLoader.ts | 26 + server/lib/seo.ts | 45 + server/lib/types/badge.ts | 55 + server/lib/types/blockchain.ts | 196 + server/lib/types/domain.ts | 249 + server/lib/types/message.ts | 35 + server/lib/types/nfts.ts | 43 + server/lib/types/persona.ts | 19 + server/lib/types/product.ts | 21 + server/lib/types/records.ts | 19 + server/lib/types/seo.ts | 15 + server/lib/types/wallet.ts | 51 + server/lib/types/web3.ts | 6 + server/lib/types/webacy.ts | 38 + server/lib/uauth.ts | 41 + server/locales.json | 6 + server/locales/.eslintrc.js | 20 + server/locales/en.json | 496 + server/next-env.d.ts | 5 + server/next.config.js | 53 + server/package.json | 108 + server/pages/[domain].page.tsx | 1264 ++ server/pages/_app.page.tsx | 89 + server/pages/_document.page.tsx | 34 + server/pages/index.page.tsx | 22 + server/providers/TokenGalleryProvider.tsx | 40 + server/providers/Web3ContextProvider.tsx | 24 + server/scripts/i18nSort.js | 6 + .../components/badgePopupModalStyles.ts | 235 + server/styles/components/modal.styles.ts | 52 + server/styles/pages/domain.styles.ts | 429 + server/styles/pages/settings.styles.ts | 127 + server/tsconfig.json | 30 + server/yarn.lock | 13337 ++++++++++++ setenv.sh | 43 + test/.env.test | 1 + test/resolver.js | 27 + test/setupTests.ts | 5 + tsconfig.json | 30 + yarn.lock | 17319 ++++++++++++++++ 171 files changed, 54048 insertions(+) create mode 100644 .eslintignore create mode 100644 .eslintrc.js create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .yarnrc.yml create mode 100644 LICENSE create mode 100644 client.jest.config.ts create mode 100644 jest.config.ts create mode 100644 package.json create mode 100644 packages.base.tsconfig.json create mode 100644 packages.build.tsconfig.json create mode 100644 packages/config/package.json create mode 100644 packages/config/src/env/default.ts create mode 100644 packages/config/src/env/development.ts create mode 100644 packages/config/src/env/e2e.ts create mode 100644 packages/config/src/env/index.test.ts create mode 100644 packages/config/src/env/index.ts create mode 100644 packages/config/src/env/production.ts create mode 100644 packages/config/src/env/staging.ts create mode 100644 packages/config/src/env/testing.ts create mode 100644 packages/config/src/env/types.ts create mode 100644 packages/config/src/index.ts create mode 100644 packages/config/tsconfig.json create mode 100644 packages/tsconfig.json create mode 100644 server.jest.config.ts create mode 100644 server/.eslintrc.js create mode 100644 server/README.md create mode 100644 server/actions/backendActions.ts create mode 100644 server/actions/badgeActions.ts create mode 100644 server/actions/domainActions.ts create mode 100644 server/actions/domainProfile.ts create mode 100644 server/actions/featureFlagActions.ts create mode 100644 server/actions/identityActions.ts create mode 100644 server/actions/messageActions.ts create mode 100644 server/components/Badges/Badge.tsx create mode 100644 server/components/Badges/BadgePopupModal.tsx create mode 100644 server/components/Badges/BadgeRankings.tsx create mode 100644 server/components/Badges/CollectionStats.tsx create mode 100644 server/components/Badges/ComposeMessage.tsx create mode 100644 server/components/Badges/index.tsx create mode 100644 server/components/Chat/IncomingSnackbar.tsx create mode 100644 server/components/Chat/SupportBubble.tsx create mode 100644 server/components/Chat/UnstoppableMessaging.tsx create mode 100644 server/components/Chat/hooks/useFetchNotification.ts create mode 100644 server/components/Chat/hooks/useIsTabActive.ts create mode 100644 server/components/Chat/hooks/useUnstoppableMessaging.tsx create mode 100644 server/components/Chat/modal/ChatModal.tsx create mode 100644 server/components/Chat/modal/LinkWarningModal.tsx create mode 100644 server/components/Chat/modal/Search.tsx create mode 100644 server/components/Chat/modal/SetupModal.tsx create mode 100644 server/components/Chat/modal/dm/Conversation.tsx create mode 100644 server/components/Chat/modal/dm/ConversationBubble.tsx create mode 100644 server/components/Chat/modal/dm/ConversationCompose.tsx create mode 100644 server/components/Chat/modal/dm/ConversationPreview.tsx create mode 100644 server/components/Chat/modal/dm/ConversationStart.tsx create mode 100644 server/components/Chat/modal/group/Community.tsx create mode 100644 server/components/Chat/modal/group/CommunityCompose.tsx create mode 100644 server/components/Chat/modal/group/CommunityConversationBubble.tsx create mode 100644 server/components/Chat/modal/group/CommunityList.tsx create mode 100644 server/components/Chat/modal/group/CommunityPreview.tsx create mode 100644 server/components/Chat/modal/notification/NotificationPreview.tsx create mode 100644 server/components/Chat/modal/styles.ts create mode 100644 server/components/Chat/protocol/push.ts create mode 100644 server/components/Chat/protocol/registration.ts create mode 100644 server/components/Chat/protocol/resolution.ts create mode 100644 server/components/Chat/protocol/upload.ts create mode 100644 server/components/Chat/protocol/xmtp.ts create mode 100644 server/components/Chat/provider/UnstoppableMessagingProvider.tsx create mode 100644 server/components/Chat/storage.ts create mode 100644 server/components/Chat/types.ts create mode 100644 server/components/CopyToClipboard.tsx create mode 100644 server/components/CryptoAddresses/CryptoAddress.tsx create mode 100644 server/components/CryptoAddresses/index.tsx create mode 100644 server/components/CustomBadges/CustomBadgesDialog.tsx create mode 100644 server/components/CustomBadges/header.png create mode 100644 server/components/CustomBadges/index.tsx create mode 100644 server/components/Domain/DomainListModal.tsx create mode 100644 server/components/Domain/DomainPreview.tsx create mode 100644 server/components/Domain/DomainProfileList.tsx create mode 100644 server/components/Domain/FollowButton.tsx create mode 100644 server/components/Domain/ProfilePicture.tsx create mode 100644 server/components/Domain/ProfileQrCode.tsx create mode 100644 server/components/Domain/ShareMenu.tsx create mode 100644 server/components/Domain/ShowHideButton.tsx create mode 100644 server/components/Domain/SocialAccountCard.tsx create mode 100644 server/components/DropDownMenu.tsx create mode 100644 server/components/ForSaleOnOpenSea.tsx create mode 100644 server/components/Header/AccountButton.tsx create mode 100644 server/components/Header/LoginButton.tsx create mode 100644 server/components/Header/ProfileSearchBar.tsx create mode 100644 server/components/Image/CryptoIcon.tsx create mode 100644 server/components/Image/LensIcon.tsx create mode 100644 server/components/Image/Logo.tsx create mode 100644 server/components/Image/UnstoppableAnimated.tsx create mode 100644 server/components/LearnMoreUdBlue.tsx create mode 100644 server/components/Link.tsx create mode 100644 server/components/Modal.tsx create mode 100644 server/components/TokenGallery/NFTGalleryCarousel.tsx create mode 100644 server/components/TokenGallery/NftCard.tsx create mode 100644 server/components/TokenGallery/NftFilterSelect.tsx create mode 100644 server/components/TokenGallery/NftFilterSelectOption.tsx create mode 100644 server/components/TokenGallery/NftFirstTimeGalleryContainer.tsx create mode 100644 server/components/TokenGallery/NftGalleryData.tsx create mode 100644 server/components/TokenGallery/NftGalleryManager.tsx create mode 100644 server/components/TokenGallery/NftGalleryView.tsx create mode 100644 server/components/TokenGallery/NftImage.tsx create mode 100644 server/components/TokenGallery/NftModal.tsx create mode 100644 server/components/TokenGallery/TokenGallery.tsx create mode 100644 server/components/Wallet/AccessEthereum.tsx create mode 100644 server/components/Wallet/AccessWallet.tsx create mode 100644 server/components/Wallet/ProfileManager.tsx create mode 100644 server/components/Wallet/WalletButton.tsx create mode 100644 server/hooks/useEnsDomainStatus.ts create mode 100644 server/hooks/usePrevious.ts create mode 100644 server/hooks/useTokenGallery.tsx create mode 100644 server/hooks/useWeb3Context.tsx create mode 100644 server/lib/cookie.ts create mode 100644 server/lib/displayCryptoAddress.ts create mode 100644 server/lib/domain/format.ts create mode 100644 server/lib/domain/getImageUrl.ts create mode 100644 server/lib/domain/records.ts create mode 100644 server/lib/error.ts create mode 100644 server/lib/fetchApi.ts create mode 100644 server/lib/formOpenseaLink.ts create mode 100644 server/lib/formSocialMediaLink.ts create mode 100644 server/lib/i18n/TranslationContext.ts create mode 100644 server/lib/i18n/TranslationProvider.tsx create mode 100644 server/lib/i18n/helpers.ts create mode 100644 server/lib/i18n/index.ts create mode 100644 server/lib/i18n/types.ts create mode 100644 server/lib/resolution/unstoppableDomainsLoader.ts create mode 100644 server/lib/seo.ts create mode 100644 server/lib/types/badge.ts create mode 100644 server/lib/types/blockchain.ts create mode 100644 server/lib/types/domain.ts create mode 100644 server/lib/types/message.ts create mode 100644 server/lib/types/nfts.ts create mode 100644 server/lib/types/persona.ts create mode 100644 server/lib/types/product.ts create mode 100644 server/lib/types/records.ts create mode 100644 server/lib/types/seo.ts create mode 100644 server/lib/types/wallet.ts create mode 100644 server/lib/types/web3.ts create mode 100644 server/lib/types/webacy.ts create mode 100644 server/lib/uauth.ts create mode 100644 server/locales.json create mode 100644 server/locales/.eslintrc.js create mode 100644 server/locales/en.json create mode 100644 server/next-env.d.ts create mode 100644 server/next.config.js create mode 100644 server/package.json create mode 100644 server/pages/[domain].page.tsx create mode 100644 server/pages/_app.page.tsx create mode 100644 server/pages/_document.page.tsx create mode 100644 server/pages/index.page.tsx create mode 100644 server/providers/TokenGalleryProvider.tsx create mode 100644 server/providers/Web3ContextProvider.tsx create mode 100644 server/scripts/i18nSort.js create mode 100644 server/styles/components/badgePopupModalStyles.ts create mode 100644 server/styles/components/modal.styles.ts create mode 100644 server/styles/pages/domain.styles.ts create mode 100644 server/styles/pages/settings.styles.ts create mode 100644 server/tsconfig.json create mode 100644 server/yarn.lock create mode 100755 setenv.sh create mode 100644 test/.env.test create mode 100644 test/resolver.js create mode 100644 test/setupTests.ts create mode 100644 tsconfig.json create mode 100644 yarn.lock diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..939e8224 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,3 @@ +node_modules/ +build/ +dist/ diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..cbb2d967 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,157 @@ +module.exports = { + root: true, + extends: [ + 'airbnb', + 'airbnb-typescript', + 'plugin:@typescript-eslint/recommended', + 'plugin:json/recommended', + 'prettier', + 'plugin:markdown/recommended', + ], + parser: '@typescript-eslint/parser', + parserOptions: { + extraFileExtensions: ['.json', '.md'], + project: './tsconfig.json', + }, + plugins: ['@typescript-eslint', 'unused-imports', 'promise'], + ignorePatterns: ['.eslintrc.js'], + rules: { + // TODO: Rules to review with the team + '@typescript-eslint/default-param-last': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', // Obvious evil, lots of such methods in our code + '@typescript-eslint/lines-between-class-members': 'off', + '@typescript-eslint/naming-convention': 'off', + '@typescript-eslint/no-inferrable-types': 'off', // No need to write like this: `let myBool: boolean = true;` + '@typescript-eslint/no-non-null-assertion': 'off', // Suggested alternative is optional chaining and introducing an unwrap/expect function that would throw a runtime exception. `unwrap(optional: T | null | undefined): T` + '@typescript-eslint/no-redeclare': 'off', + '@typescript-eslint/no-throw-literal': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-unused-vars': 'off', // Unused variables potentially indicate a bug. Underscore where needed. + '@typescript-eslint/no-explicit-any': 2, // We use `any` for some cases, but we should be explicit about it. + '@typescript-eslint/no-useless-constructor': 'off', + '@typescript-eslint/object-curly-spacing': 'off', + '@typescript-eslint/return-await': 'off', + 'array-callback-return': 'off', + 'class-methods-use-this': 'off', + 'consistent-return': 'off', + 'default-case': 'off', + 'func-names': 'off', + 'global-require': 'off', + 'guard-for-in': 'off', // The reasoning here is good enough: https://eslint.org/docs/rules/guard-for-in + 'import/extensions': 'off', + 'import/first': 'off', + 'import/newline-after-import': 'off', + 'import/no-cycle': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/no-duplicates': 'off', + 'import/no-import-module-exports': 'off', + 'import/no-mutable-exports': 'off', + 'import/no-named-as-default': 'off', + 'import/no-named-default': 'off', + 'import/no-useless-path-segments': 'off', + 'import/order': 'off', + 'import/prefer-default-export': 'off', + 'max-classes-per-file': 'off', + 'max-len': 'off', + 'new-cap': 'off', + 'no-alert': 'off', + 'no-await-in-loop': 'off', + 'no-buffer-constructor': 'off', + 'no-cond-assign': 'off', + 'no-continue': 'off', + 'no-else-return': 'off', + 'no-lone-blocks': 'off', + 'no-lonely-if': 'off', + 'no-multi-assign': 'off', + 'no-nested-ternary': 'off', + 'no-param-reassign': 'off', + 'no-path-concat': 'off', + 'no-promise-executor-return': 'off', + 'no-plusplus': 'off', + 'no-restricted-exports': 'off', + 'no-restricted-globals': 'off', + 'no-restricted-properties': 'off', + 'no-restricted-syntax': 'off', + 'no-return-assign': 'off', + 'no-template-curly-in-string': 'off', + 'no-underscore-dangle': 'off', + 'no-unneeded-ternary': 'off', + 'no-unsafe-optional-chaining': 'off', + 'no-useless-computed-key': 'off', + 'no-useless-escape': 'off', // Review regex expressions, suspecting this rule to produce false-positives + 'no-useless-rename': 'off', + 'no-useless-return': 'off', + 'no-void': 'off', + 'operator-assignment': 'off', + 'operator-linebreak': 'off', + 'prefer-arrow-callback': 'off', + 'prefer-destructuring': 'off', + 'prefer-exponentiation-operator': 'off', + 'prefer-promise-reject-errors': 'off', + 'prefer-regex-literals': 'off', + 'prefer-template': 'off', + 'symbol-description': 'off', + yoda: 'off', + + // Disabled to accommodate ESLint version upgrade (07/2022) but should potentially + // be reenabled and problems addressed + 'no-shadow': 'off', + 'no-loop-func': 'off', + 'no-return-await': 'off', + 'lines-between-class-members': 'off', + 'import/named': 'off', + + // Approved rules that we use to match the codebase to UD code style + '@typescript-eslint/camelcase': 'off', + '@typescript-eslint/explicit-member-accessibility': [ + 'error', + { + accessibility: 'no-public', + }, + ], + '@typescript-eslint/indent': 'off', // Indentation is handled by Prettier + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-floating-promises': ['error', {ignoreVoid: true}], // Allows to explicitly discard the promise with `void` keyword + '@typescript-eslint/no-loop-func': 'off', + '@typescript-eslint/no-misused-promises': [ + 'error', + { + checksVoidReturn: false, + }, + ], + '@typescript-eslint/no-shadow': 'error', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/prefer-for-of': 'error', + '@typescript-eslint/prefer-function-type': 'error', + '@typescript-eslint/prefer-literal-enum-member': 'error', + '@typescript-eslint/prefer-optional-chain': 'error', + '@typescript-eslint/unified-signatures': 'error', + 'arrow-body-style': 'off', + curly: 'error', + 'dot-notation': 'error', + eqeqeq: ['error', 'smart'], + 'id-blacklist': ['error', 'String', 'Boolean', 'Undefined'], + 'no-bitwise': 'error', + 'no-caller': 'error', + 'no-console': 'error', + 'no-constant-condition': ['error', {checkLoops: false}], + 'no-empty': [ + 'error', + { + allowEmptyCatch: true, + }, + ], + 'no-eval': 'error', + 'no-multiple-empty-lines': 'error', + 'no-new-wrappers': 'error', + 'no-prototype-builtins': 'off', + 'no-throw-literal': 'error', + 'no-unused-expressions': 'error', + 'object-shorthand': 'error', + 'one-var': ['error', 'never'], + 'promise/prefer-await-to-then': 'error', + radix: 'error', + 'spaced-comment': 'error', + 'unused-imports/no-unused-imports': 'error', + }, +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..4a41f413 --- /dev/null +++ b/.gitignore @@ -0,0 +1,190 @@ +# ------------------------------------------------------------------------------ +# Custom Rules + +build/ +dist/ +.github-username + +# ------------------------------------------------------------------------------ +# VSCode Rules +# Taken from: https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore + +.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 + +# ------------------------------------------------------------------------------ +# Node.js Rules +# Taken from: https://github.com/github/gitignore/blob/main/Node.gitignore + +# 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 +.yarn/ + +# dotenv environment variable files +.env +!scripts/**/.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 +.cache + +# 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.* + +# General +.DS_Store +.AppleDouble +.LSOverride + +# Local redis dump +dump.rdb + +# Icon must end with two \r +Icon + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..d93463d4 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +node_modules/ +dist/ +build/ diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..2e933077 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,16 @@ +{ + "proseWrap": "always", + "singleQuote": true, + "arrowParens": "avoid", + "bracketSpacing": false, + "semi": true, + "trailingComma": "all", + "importOrder": ["", "^@unstoppabledomains/", "^[./]"], + "importOrderSeparation": true, + "importOrderSortSpecifiers": true, + "organizeImportsSkipDestructiveCodeActions": false, + "plugins": [ + "prettier-plugin-organize-imports", + "@trivago/prettier-plugin-sort-imports" + ] +} diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 00000000..08d714df --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,3 @@ +nodeLinker: node-modules + +yarnPath: .yarn/releases/yarn-3.6.4.cjs diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..a624b6ce --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Unstoppable Domains + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/client.jest.config.ts b/client.jest.config.ts new file mode 100644 index 00000000..a8fe18f0 --- /dev/null +++ b/client.jest.config.ts @@ -0,0 +1,38 @@ +import {lstatSync, readdirSync} from 'fs'; +import path from 'path'; +import type {InitialOptionsTsJest} from 'ts-jest/dist/types'; + +const sharedBasePath = path.resolve(__dirname, 'packages'); +const sharedModules = readdirSync(sharedBasePath).filter(name => { + return lstatSync(path.join(sharedBasePath, name)).isDirectory(); +}); + +const config: InitialOptionsTsJest = { + preset: 'ts-jest', + resolver: '/test/resolver.js', + setupFiles: ['/test/setupTests.ts'], + setupFilesAfterEnv: ['jest-extended/all'], + testMatch: ['/**/?(*.)+(spec|test).[jt]sx'], + transform: { + '^.+\\.(ts|tsx)$': [ + 'ts-jest', + { + tsconfig: 'tsconfig.json', + isolatedModules: false, + }, + ], + }, + testPathIgnorePatterns: ['/node_modules/', '/build/', '/e2e/'], + moduleNameMapper: { + '@xmtp/xmtp-js': '/test/mocks/xmtp/mock.js', + ...sharedModules.reduce( + (acc, name) => ({ + ...acc, + [`@unstoppabledomains/${name}(.*)$`]: `/packages/${name}/$1`, + }), + {}, + ), + }, +}; + +export default config; diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 00000000..2828e193 --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,33 @@ +import type {InitialOptionsTsJest} from 'ts-jest/dist/types'; + +const config: InitialOptionsTsJest = { + projects: [ + '/client.jest.config.ts', + '/server.jest.config.ts', + ], + coverageProvider: 'v8', + collectCoverageFrom: [ + '**/*.{js,jsx,ts,tsx}', + '!**/*.d.ts', + '!**/node_modules/**', + '!**/build/**', + ], + coveragePathIgnorePatterns: [ + '**/build', + 'e2e/', + '**/node_modules/', + 'setupTests.ts', + 'global.ts', + 'package.json', + ], + testTimeout: 60000, + reporters: ['default', 'github-actions'], + verbose: true, + // A map from regular expressions to module names that allow to stub out resources with a single module + moduleNameMapper: { + '@unstoppabledomains/(.*)': '/../packages/src/$1', + '@unstoppabledomains': '/../packages/src', + }, +}; + +export default config; diff --git a/package.json b/package.json new file mode 100644 index 00000000..88c283a0 --- /dev/null +++ b/package.json @@ -0,0 +1,61 @@ +{ + "name": "domain-profiles", + "version": "0.0.0", + "private": true, + "repository": "git@github.com:unstoppabledomains/domain-profiles.git", + "license": "MIT", + "workspaces": [ + "server", + "packages/*" + ], + "scripts": { + "build": "tsc --build packages.build.tsconfig.json", + "format": "prettier -w .", + "husky": "[ -z \"${CI:-}\" ] && husky install", + "lint": "eslint --fix .", + "test": "DOTENV_CONFIG_PATH=./.env.test jest" + }, + "devDependencies": { + "@trivago/prettier-plugin-sort-imports": "3.2.0", + "@types/classnames": "^2.2.11", + "@types/node": "^16.11.21", + "@typescript-eslint/eslint-plugin": "^5.39.0", + "@typescript-eslint/parser": "^5.39.0", + "concurrently": "^7.5.0", + "dotenv": "^16.3.1", + "es6-template-strings": "^2.0.1", + "eslint": "^8.22.0", + "eslint-config-airbnb": "19.0.4", + "eslint-config-airbnb-typescript": "^17.0.0", + "eslint-config-next": "^12.2.3", + "eslint-config-prettier": "^8.5.0", + "eslint-html-reporter": "^0.7.4", + "eslint-plugin-chai-expect": "^3.0.0", + "eslint-plugin-chai-friendly": "^0.7.2", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-json": "^3.1.0", + "eslint-plugin-jsx-a11y": "^6.6.1", + "eslint-plugin-markdown": "^3.0.0", + "eslint-plugin-mdx": "^2.2.0", + "eslint-plugin-prettier": "4.0.0", + "eslint-plugin-promise": "^6.0.0", + "eslint-plugin-react": "^7.30.1", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-sort-exports": "^0.8.0", + "eslint-plugin-tss-unused-classes": "^1.0.2", + "eslint-plugin-unused-imports": "^2.0.0", + "husky": "^8.0.2", + "jest": "^29.7.0", + "jest-extended": "^4.0.2", + "lint-staged": "^13.0.3", + "prettier": "2.6.2", + "prettier-plugin-organize-imports": "^3.2.3", + "prettier-plugin-packagejson": "2.2.18", + "prettier-plugin-sh": "0.11.0", + "ts-jest": "^29.1.1", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.1.0", + "typescript": "5.0.4" + }, + "packageManager": "yarn@3.6.4" +} diff --git a/packages.base.tsconfig.json b/packages.base.tsconfig.json new file mode 100644 index 00000000..fda38802 --- /dev/null +++ b/packages.base.tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "composite": true, + "declaration": true, + "incremental": true, + "declarationMap": true, + "sourceMap": true, + "skipLibCheck": true, + + "jsx": "react", + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + + "strict": true, + "noImplicitAny": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + } +} diff --git a/packages.build.tsconfig.json b/packages.build.tsconfig.json new file mode 100644 index 00000000..3c577f68 --- /dev/null +++ b/packages.build.tsconfig.json @@ -0,0 +1,25 @@ +{ + "include": ["packages/*/src/**/*"], + "compilerOptions": { + "noEmit": true, + "skipLibCheck": true, + + "jsx": "react", + "target": "ES5", + "module": "commonjs", + "moduleResolution": "node", + + "resolveJsonModule": true, + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + + "strict": true, + "noImplicitAny": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "references": [{"path": "packages/config"}] +} diff --git a/packages/config/package.json b/packages/config/package.json new file mode 100644 index 00000000..dcbc64dd --- /dev/null +++ b/packages/config/package.json @@ -0,0 +1,7 @@ +{ + "name": "@unstoppabledomains/config", + "version": "0.0.1", + "private": true, + "main": "build/src/index.js", + "typings": "build/src/index.d.ts" +} diff --git a/packages/config/src/env/default.ts b/packages/config/src/env/default.ts new file mode 100644 index 00000000..330ab72d --- /dev/null +++ b/packages/config/src/env/default.ts @@ -0,0 +1,93 @@ +import assert from 'assert'; + +import type {Config} from './types'; + +export default function getDefaultConfig(): Config { + assert(process.env.NEXT_PUBLIC_CLIENT_URL, 'NEXT_PUBLIC_CLIENT_URL required'); + + return { + APP_ENV: 'development', + APP_VERSION: process.env.NEXT_PUBLIC_APP_VERSION || 'unknown', + BLOCKCHAINS: { + ZIL: { + CHAIN_ID: 333, + NETWORK_NAME: 'testnet', + JSON_RPC_API_URL: 'https://dev-api.zilliqa.com', + ZILLIQA_VERSION: 21823489, + BLOCK_EXPLORER_NAME: 'viewblock', + BLOCK_EXPLORER_BASE_URL: 'https://viewblock.io', + ZNS_REGISTRY_ADDRESS: 'zil1hyj6m5w4atcn7s806s69r0uh5g4t84e8gp6nps', + DISABLE_CONTRACTS_CACHE: true, + }, + ETH: { + CHAIN_ID: 5, + NETWORK_NAME: 'goerli', // testnet + JSON_RPC_API_URL: `https://goerli.infura.io/v3/a58ebb0c76a64c149e35145f85f82382`, + BLOCK_EXPLORER_NAME: 'etherscan', + BLOCK_EXPLORER_BASE_URL: 'https://goerli.etherscan.io', + DISABLE_CONTRACTS_CACHE: true, + PROXY_READER_ADDRESS: '0xFc5f608149f4D9e2Ed0733efFe9DD57ee24BCF68', + OPEN_SEA_BASE_URL: 'https://testnets.opensea.io/assets/', + }, + MATIC: { + CHAIN_ID: 80001, + NETWORK_NAME: 'mumbai', // testnet + JSON_RPC_API_URL: + 'https://polygon-mumbai.infura.io/v3/a58ebb0c76a64c149e35145f85f82382', + BLOCK_EXPLORER_NAME: 'polygonscan', + BLOCK_EXPLORER_BASE_URL: 'https://mumbai.polygonscan.com', + DISABLE_CONTRACTS_CACHE: true, + PROXY_READER_ADDRESS: '0x332A8191905fA8E6eeA7350B5799F225B8ed30a9', + OPEN_SEA_BASE_URL: 'https://testnets.opensea.io/assets/mumbai/', + }, + }, + UD_ME_BASE_URL: 'https://ud.me', + UNSTOPPABLE_WEBSITE_URL: 'https://www.ud-staging.com', + UNSTOPPABLE_API_URL: 'https://api.ud-staging.com', + ASSETS_BUCKET_URL: + 'https://storage.googleapis.com/unstoppable-client-assets', + UNSTOPPABLE_DOMAINS: 'Unstoppable Domains', + UNSTOPPABLE_CONTRACT_ADDRESS: '0xa9a6a3626993d487d2dbda3173cf58ca1a9d9e9f', + UNSTOPPABLE_METADATA_ENDPOINT: 'https://api.ud-staging.com/metadata', + IPFS_BASE_URL: 'https://ipfs.io/ipfs', + VERIFICATION_SUPPORTED: [ + 'SOL', + 'ETH', + 'MATIC', + 'FTM', + 'AVAX', + 'ADA', + 'HBAR', + 'BTC', + ], + LOGIN_WITH_UNSTOPPABLE: { + CLIENT_ID: '115148ec-364d-4e19-b7d8-2807e8f1b525', + REDIRECT_URI: process.env.NEXT_PUBLIC_CLIENT_URL, + }, + COOKIE: { + SECURE: true, + SAME_SITE: 'lax', + }, + MESSAGING: { + EMAIL_DOMAIN: 'ud-staging.com', + HOST_URL: 'https://messaging.ud-staging.com', + }, + IDENTITY: { + HOST_URL: 'https://identity.ud-staging.com/', + }, + PROFILE: { + HOST_URL: 'https://api.ud-staging.com/profile', + }, + PUSH: { + CHANNELS: ['eip155:5:0x0389246fB9191Dc41722e1f0D558dC8f82Be3C7A'], + }, + WALLETCONNECT_PROJECT_ID: 'b99b92d76dda44021bfbed5b1a0d010a', + XMTP: { + ENVIRONMENT: 'dev', + MAX_ATTACHMENT_BYTES: 10 * 1024 * 1024, // 10 MB + SUPPORT_WALLET_ADDRESS: '0xf7Ef453121bF016e4441F0c06e0951223fdbbB01', + SUPPORT_DOMAIN_NAME: 'support.crypto', + SUPPORT_BUBBLE_SECONDS: 60, + }, + }; +} diff --git a/packages/config/src/env/development.ts b/packages/config/src/env/development.ts new file mode 100644 index 00000000..eb00d3c1 --- /dev/null +++ b/packages/config/src/env/development.ts @@ -0,0 +1,23 @@ +import type {ConfigOverride} from './types'; + +export default function getDevelopmentConfig(): ConfigOverride { + return { + APP_ENV: 'development', + UD_ME_BASE_URL: 'http://localhost:3000', + UNSTOPPABLE_WEBSITE_URL: 'http://localhost:3000', + UNSTOPPABLE_API_URL: 'http://localhost:8080', + MESSAGING: { + HOST_URL: 'http://localhost:5003', + }, + IDENTITY: { + HOST_URL: 'http://localhost:5002', + }, + LOGIN_WITH_UNSTOPPABLE: { + CLIENT_ID: '00000000-0000-0000-0000-000000000000', + REDIRECT_URI: process.env.NEXT_PUBLIC_CLIENT_URL, + }, + PROFILE: { + HOST_URL: 'http://localhost:5004/api', + }, + }; +} diff --git a/packages/config/src/env/e2e.ts b/packages/config/src/env/e2e.ts new file mode 100644 index 00000000..149c22e5 --- /dev/null +++ b/packages/config/src/env/e2e.ts @@ -0,0 +1,7 @@ +import type {ConfigOverride} from './types'; + +export default function getE2eConfig(): ConfigOverride { + return { + APP_ENV: 'e2e', + }; +} diff --git a/packages/config/src/env/index.test.ts b/packages/config/src/env/index.test.ts new file mode 100644 index 00000000..b3067cec --- /dev/null +++ b/packages/config/src/env/index.test.ts @@ -0,0 +1,30 @@ +import type {AppEnv} from './types'; + +const APP_ENVS: AppEnv[] = ['development', 'test', 'staging', 'production']; + +describe('config', () => { + const originalNextPublicAppEnv = process.env.NEXT_PUBLIC_APP_ENV; + afterEach(() => { + process.env.NEXT_PUBLIC_APP_ENV = originalNextPublicAppEnv; + }); + afterEach(() => jest.resetModules()); + + for (const appEnv of APP_ENVS) { + it(`returns ${appEnv} config if NEXT_PUBLIC_APP_ENV=${appEnv}`, async () => { + process.env.NEXT_PUBLIC_APP_ENV = appEnv; + process.env.NEXT_PUBLIC_DEPLOYMENT = + process.env.NEXT_PUBLIC_DEPLOYMENT ?? 'staging'; + const {default: config} = await import('.'); + expect(config.APP_ENV).toBe(appEnv); + }); + } + + it('returns test config if NEXT_PUBLIC_APP_ENV unset, and NODE_ENV=test', async () => { + delete process.env.NEXT_PUBLIC_APP_ENV; + delete process.env.APP_ENV; + process.env.NEXT_PUBLIC_DEPLOYMENT = + process.env.NEXT_PUBLIC_DEPLOYMENT ?? 'staging'; + const {default: config} = await import('.'); + expect(config.APP_ENV).toBe('test'); + }); +}); diff --git a/packages/config/src/env/index.ts b/packages/config/src/env/index.ts new file mode 100644 index 00000000..078fe1a3 --- /dev/null +++ b/packages/config/src/env/index.ts @@ -0,0 +1,56 @@ +import merge from 'lodash/merge'; + +import getDefaultConfig from './default'; +import getDevelopmentConfigOverrides from './development'; +import getE2eConfigOverrides from './e2e'; +import getProductionConfigOverrides from './production'; +import getStagingConfigOverrides from './staging'; +import getTestConfigOverrides from './testing'; +import type {AppEnv, ConfigOverride, ImmutableConfig} from './types'; + +function getAppEnv(): AppEnv { + // APP_ENV translated to NEXT_PUBLIC_APP_ENV in .env file for NextJS to expose to the browser. + // https://nextjs.org/docs/basic-features/environment-variables + const appEnv = process.env.NEXT_PUBLIC_APP_ENV; + if ( + appEnv === 'development' || + appEnv === 'test' || + appEnv === 'e2e' || + appEnv === 'staging' || + appEnv === 'production' + ) { + return appEnv; + } + // To support Jest plugins (e.g. for Jest VSCode extension running tests in the background) + // https://jestjs.io/docs/environment-variables + if (process.env.NODE_ENV === 'test') { + return 'test'; + } + throw new Error( + 'APP_ENV must be set to development, test, e2e, staging, or production', + ); +} + +function getEnvConfigOverrides(): ConfigOverride { + const appEnv = getAppEnv(); + switch (appEnv) { + case 'development': + return getDevelopmentConfigOverrides(); + case 'test': + return getTestConfigOverrides(); + case 'e2e': + return getE2eConfigOverrides(); + case 'staging': + return getStagingConfigOverrides(); + case 'production': + return getProductionConfigOverrides(); + default: + throw new Error(`Unexpected APP_ENV "${appEnv}"`); + } +} + +function getConfig(): ImmutableConfig { + return merge(getDefaultConfig(), getEnvConfigOverrides()); +} + +export default getConfig(); diff --git a/packages/config/src/env/production.ts b/packages/config/src/env/production.ts new file mode 100644 index 00000000..0a18bbaa --- /dev/null +++ b/packages/config/src/env/production.ts @@ -0,0 +1,60 @@ +import type {ConfigOverride} from './types'; + +export default function getProductionConfig(): ConfigOverride { + return { + APP_ENV: 'production', + UNSTOPPABLE_API_URL: 'https://api.unstoppabledomains.com', + UNSTOPPABLE_WEBSITE_URL: 'https://unstoppabledomains.com', + UNSTOPPABLE_METADATA_ENDPOINT: + 'https://api.unstoppabledomains.com/metadata', + BLOCKCHAINS: { + ZIL: { + CHAIN_ID: 1, + NETWORK_NAME: 'mainnet', + JSON_RPC_API_URL: 'https://api.zilliqa.com/', + ZILLIQA_VERSION: 65537, + ZNS_REGISTRY_ADDRESS: 'zil1jcgu2wlx6xejqk9jw3aaankw6lsjzeunx2j0jz', + }, + ETH: { + CHAIN_ID: 1, + NETWORK_NAME: 'mainnet', + JSON_RPC_API_URL: + 'https://mainnet.infura.io/v3/4458cf4d1689497b9a38b1d6bbf05e78', + BLOCK_EXPLORER_BASE_URL: 'https://etherscan.io', + PROXY_READER_ADDRESS: '0xc3C2BAB5e3e52DBF311b2aAcEf2e40344f19494E', + OPEN_SEA_BASE_URL: 'https://opensea.io/assets/', + }, + MATIC: { + CHAIN_ID: 137, + NETWORK_NAME: 'polygon-mainnet', + JSON_RPC_API_URL: + 'https://polygon-mainnet.infura.io/v3/4458cf4d1689497b9a38b1d6bbf05e78', + BLOCK_EXPLORER_BASE_URL: 'https://polygonscan.com', + PROXY_READER_ADDRESS: '0xA3f32c8cd786dc089Bd1fC175F2707223aeE5d00', + OPEN_SEA_BASE_URL: 'https://opensea.io/assets/matic/', + }, + }, + LOGIN_WITH_UNSTOPPABLE: { + CLIENT_ID: '799c7c9d-27b2-4419-bf03-97507554c301', + REDIRECT_URI: 'https://ud.me', + }, + MESSAGING: { + EMAIL_DOMAIN: 'ud.me', + HOST_URL: 'https://messaging.unstoppabledomains.com', + }, + IDENTITY: { + HOST_URL: 'https://identity.unstoppabledomains.com', + }, + PROFILE: { + HOST_URL: 'https://api.unstoppabledomains.com/profile', + }, + PUSH: { + CHANNELS: ['eip155:1:0xdbBc2Ac8cb8D02B26F165b4BC120fd4b14DA6cDA'], + }, + XMTP: { + ENVIRONMENT: 'production', + SUPPORT_WALLET_ADDRESS: '0x9B4Ed628640A73154895e369AE39a93732535924', + SUPPORT_DOMAIN_NAME: 'support.unstoppable.x', + }, + }; +} diff --git a/packages/config/src/env/staging.ts b/packages/config/src/env/staging.ts new file mode 100644 index 00000000..100ee211 --- /dev/null +++ b/packages/config/src/env/staging.ts @@ -0,0 +1,12 @@ +import type {ConfigOverride} from './types'; + +export default function getStagingConfig(): ConfigOverride { + return { + APP_ENV: 'staging', + UD_ME_BASE_URL: 'https://www.ud-staging.com/d', + LOGIN_WITH_UNSTOPPABLE: { + CLIENT_ID: '93d7efca-a5c6-409c-94b5-91adf1b33904', + REDIRECT_URI: process.env.NEXT_PUBLIC_CLIENT_URL, + }, + }; +} diff --git a/packages/config/src/env/testing.ts b/packages/config/src/env/testing.ts new file mode 100644 index 00000000..44da6347 --- /dev/null +++ b/packages/config/src/env/testing.ts @@ -0,0 +1,7 @@ +import type {ConfigOverride} from './types'; + +export default function getTestConfig(): ConfigOverride { + return { + APP_ENV: 'test', + }; +} diff --git a/packages/config/src/env/types.ts b/packages/config/src/env/types.ts new file mode 100644 index 00000000..4216bb60 --- /dev/null +++ b/packages/config/src/env/types.ts @@ -0,0 +1,107 @@ +export type AppEnv = 'development' | 'test' | 'e2e' | 'staging' | 'production'; + +export type BaseBlockchainConfig = { + CHAIN_ID: number; + NETWORK_NAME: string; + JSON_RPC_API_URL: string; + BLOCK_EXPLORER_NAME: string; + BLOCK_EXPLORER_BASE_URL: string; + DISABLE_CONTRACTS_CACHE: boolean; +}; + +export type ZilliqaBlockchainConfig = BaseBlockchainConfig & { + CHAIN_ID: 333 | 1; + NETWORK_NAME: 'testnet' | 'mainnet'; + ZILLIQA_VERSION: number; + ZNS_REGISTRY_ADDRESS: string; +}; + +export type EthereumBlockchainConfig = BaseBlockchainConfig & { + CHAIN_ID: 5 | 1 | 1337; + NETWORK_NAME: 'goerli' | 'mainnet' | 'local'; + PROXY_READER_ADDRESS: string; + OPEN_SEA_BASE_URL: + | 'https://opensea.io/assets/' + | 'https://testnets.opensea.io/assets/'; +}; + +export type MaticBlockchainConfig = BaseBlockchainConfig & { + CHAIN_ID: 80001 | 137 | 1337; + NETWORK_NAME: 'mumbai' | 'polygon-mainnet' | 'local'; + PROXY_READER_ADDRESS: string; + OPEN_SEA_BASE_URL: + | 'https://opensea.io/assets/matic/' + | 'https://testnets.opensea.io/assets/mumbai/'; +}; + +export type Config = { + APP_ENV: AppEnv; + APP_VERSION: string; + BLOCKCHAINS: { + ZIL: ZilliqaBlockchainConfig; + ETH: EthereumBlockchainConfig; + MATIC: MaticBlockchainConfig; + }; + ASSETS_BUCKET_URL: string; + UD_ME_BASE_URL: string; + UNSTOPPABLE_DOMAINS: string; + UNSTOPPABLE_WEBSITE_URL: string; + UNSTOPPABLE_API_URL: string; + UNSTOPPABLE_METADATA_ENDPOINT: string; + UNSTOPPABLE_CONTRACT_ADDRESS: string; + IPFS_BASE_URL: string; + LOGIN_WITH_UNSTOPPABLE: { + CLIENT_ID: string; + REDIRECT_URI: string; + }; + COOKIE: { + SECURE: boolean; + SAME_SITE: boolean | 'lax' | 'none' | 'strict'; + }; + MESSAGING: { + EMAIL_DOMAIN: string; + HOST_URL: string; + }; + IDENTITY: { + HOST_URL: string; + }; + PROFILE: { + HOST_URL: string; + }; + VERIFICATION_SUPPORTED: string[]; + PUSH: { + CHANNELS: string[]; + }; + WALLETCONNECT_PROJECT_ID: string; + XMTP: { + ENVIRONMENT: 'dev' | 'production'; + MAX_ATTACHMENT_BYTES: number; + SUPPORT_WALLET_ADDRESS: string; + SUPPORT_DOMAIN_NAME: string; + SUPPORT_BUBBLE_SECONDS: number; + }; +}; + +export type ConfigOverride = DeepPartial; + +export type DeepPartial = { + [P in keyof T]?: DeepPartial; +}; + +// https://github.com/microsoft/TypeScript/issues/13923 +export type Immutable = T extends ImmutablePrimitive + ? T + : T extends Array + ? ImmutableArray + : T extends Map + ? ImmutableMap + : T extends Set + ? ImmutableSet + : ImmutableObject; +export type ImmutableArray = ReadonlyArray>; +export type ImmutableConfig = Immutable; +export type ImmutableMap = ReadonlyMap, Immutable>; +export type ImmutableObject = {readonly [K in keyof T]: Immutable}; +export type ImmutablePrimitive = undefined | null | boolean | string | number; + +export type ImmutableSet = ReadonlySet>; diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts new file mode 100644 index 00000000..0d26a203 --- /dev/null +++ b/packages/config/src/index.ts @@ -0,0 +1,3 @@ +import env from './env'; + +export default env; diff --git a/packages/config/tsconfig.json b/packages/config/tsconfig.json new file mode 100644 index 00000000..d73b2084 --- /dev/null +++ b/packages/config/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../packages.base.tsconfig.json", + "compilerOptions": { + "outDir": "build" + }, + "include": ["./src/**/*"], + "exclude": ["node_modules", "**/node_modules"], + "references": [] +} diff --git a/packages/tsconfig.json b/packages/tsconfig.json new file mode 100644 index 00000000..7ec2db4a --- /dev/null +++ b/packages/tsconfig.json @@ -0,0 +1,25 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "module": "esnext", + "target": "es2018", + "lib": ["es6", "es2018"], + "moduleResolution": "node", + "rootDir": "src", + "outDir": "dist", + "composite": true, + "declaration": true, + "baseUrl": ".", + "paths": { + "*": ["*"] + } + }, + "exclude": ["../node_modules", "node_modules", ".*", "coverage", "dist"], + "include": [ + "src/**/*.d.ts", + "src/**/*.ts", + "src/**/*.js", + "src/**/*.md", + "src/**/*.json" + ] +} diff --git a/server.jest.config.ts b/server.jest.config.ts new file mode 100644 index 00000000..c9b43e10 --- /dev/null +++ b/server.jest.config.ts @@ -0,0 +1,21 @@ +import type {InitialOptionsTsJest} from 'ts-jest/dist/types'; + +const config: InitialOptionsTsJest = { + preset: 'ts-jest', + testEnvironment: 'node', + setupFiles: ['/test/setupTests.ts'], + setupFilesAfterEnv: ['jest-extended/all'], + testMatch: ['/**/?(*.)+(spec|test).[jt]s'], + transform: { + '^.+\\.(ts|tsx)$': [ + 'ts-jest', + { + tsconfig: 'tsconfig.json', + isolatedModules: false, + }, + ], + }, + testPathIgnorePatterns: ['/node_modules/', '/build/', '/e2e/'], +}; + +export default config; diff --git a/server/.eslintrc.js b/server/.eslintrc.js new file mode 100644 index 00000000..4ef86fea --- /dev/null +++ b/server/.eslintrc.js @@ -0,0 +1,128 @@ +module.exports = { + env: { + browser: true, + es6: true, + }, + settings: { + react: { + version: 'detect', + }, + }, + parserOptions: { + // Allows for the parsing of modern ECMAScript features + ecmaVersion: 2020, + ecmaFeatures: { + // allows for the parsing of JSX + jsx: true, + }, + tsconfigRootDir: __dirname, + project: ['./tsconfig.json'], + sourceType: 'module', + }, + plugins: ['react', 'tss-unused-classes'], + extends: ['airbnb/hooks', 'plugin:@next/next/recommended'], + rules: { + 'tss-unused-classes/unused-classes': 'off', + '@next/next/link-passhref': 'off', + '@next/next/no-img-element': 'off', + 'jsx-a11y/alt-text': 'off', + 'jsx-a11y/anchor-is-valid': 'off', + 'jsx-a11y/click-events-have-key-events': 'off', + 'jsx-a11y/iframe-has-title': 'off', + 'jsx-a11y/label-has-associated-control': 'off', + 'jsx-a11y/no-noninteractive-element-interactions': 'off', + 'jsx-a11y/no-noninteractive-tabindex': 'off', + 'jsx-a11y/no-static-element-interactions': 'off', + 'jsx-a11y/tabindex-no-positive': 'off', + 'no-console': 'off', + 'promise/prefer-await-to-then': 'off', + 'react/button-has-type': 'off', + 'react/destructuring-assignment': 'off', + 'react/function-component-definition': 'off', + 'react/no-invalid-html-attribute': 'off', + 'react-hooks/exhaustive-deps': 'off', + 'react-hooks/rules-of-hooks': 'off', + 'react/jsx-boolean-value': 'off', + 'react/jsx-curly-brace-presence': 'off', + 'react/jsx-fragments': 'off', + 'react/jsx-no-bind': 'off', + 'react/jsx-no-constructed-context-values': 'off', + 'react/jsx-no-duplicate-props': 'off', + 'react/jsx-no-useless-fragment': 'off', + 'react/jsx-pascal-case': 'off', + 'react/jsx-props-no-spreading': 'off', + 'react/no-array-index-key': 'off', + 'react/no-danger': 'off', + 'react/no-unstable-nested-components': 'off', + 'react/no-unused-prop-types': 'off', + 'react/require-default-props': 'off', + 'react/self-closing-comp': 'off', + 'react/state-in-constructor': 'off', + 'spaced-comment': 'off', + 'react/display-name': 'off', + 'react/prop-types': 'off', + 'import/no-duplicates': ['error'], + + '@typescript-eslint/consistent-type-imports': [ + 'error', + { + disallowTypeAnnotations: false, + }, + ], + + 'import/order': [ + 'error', + { + groups: [], + }, + ], + + 'no-restricted-imports': [ + 'error', + { + patterns: [ + { + // https://mui.com/material-ui/guides/minimizing-bundle-size#option-one-use-path-imports + group: ['@mui/*/*/*'], + message: `Please use second-level imports: '@mui/*/*'. `, + }, + ], + paths: [ + { + name: '@unstoppabledomains/ui-kit/colors', + message: `Please use '@mui/material/colors' instead. `, + }, + { + name: '@unstoppabledomains/ui-kit/icons', + message: `Please use '@mui/icons-material/*' path imports instead. `, + }, + { + name: '@mui/icons-material', + message: `Please use '@mui/icons-material/*' path imports instead. `, + }, + { + name: '@unstoppabledomains/ui-kit/lab', + message: `Please use '@mui/lab/*' path imports instead. `, + }, + { + name: '@mui/lab', + message: `Please use '@mui/lab/*' path imports instead. `, + }, + { + name: '@unstoppabledomains/ui-kit', + message: `Please use '@mui/material/*' or '@unstoppabledomains/ui-kit/components' path imports instead. `, + }, + { + name: '@mui/material', + message: `Please use '@mui/material/*' path imports instead. `, + }, + { + name: '@mui/material/Alert', + importNames: ['default', 'AlertProps', 'AlertClasses'], + message: `Please use '@unstoppabledomains/ui-kit/components' instead. `, + }, + ], + }, + ], + }, +}; diff --git a/server/README.md b/server/README.md new file mode 100644 index 00000000..aec47ff8 --- /dev/null +++ b/server/README.md @@ -0,0 +1,3 @@ +# UD.me Profile Website + +WIP diff --git a/server/actions/backendActions.ts b/server/actions/backendActions.ts new file mode 100644 index 00000000..8f46021b --- /dev/null +++ b/server/actions/backendActions.ts @@ -0,0 +1,22 @@ +import {fetchApi} from 'lib/fetchApi'; +import type {DomainNotificationConfiguration} from 'lib/types/message'; +import type {MetadataDomainsRecordsResponse} from 'lib/types/records'; +import QueryString from 'qs'; + +export const getMetadataDomainsRecords = async (query: { + domains: string[]; + key?: string; +}): Promise => { + const response = await fetchApi( + `/metadata/records?${QueryString.stringify(query)}`, + ); + return response.json(); +}; + +export const getNotificationConfigurations = async ( + domain: string, +): Promise => { + // TODO need to implement on profile API + //return fetchApi(`/user/domains/${query.domain}/notification-configurations`); + return []; +}; diff --git a/server/actions/badgeActions.ts b/server/actions/badgeActions.ts new file mode 100644 index 00000000..b08dd1ab --- /dev/null +++ b/server/actions/badgeActions.ts @@ -0,0 +1,43 @@ +import {fetchApi} from 'lib/fetchApi'; +import type {SerializedBadgeInfo} from 'lib/types/badge'; +import type {SerializedDomainRank} from 'lib/types/domain'; +import QueryString from 'qs'; + +import config from '@unstoppabledomains/config'; + +export const getBadge = async ( + badge: string, + pending?: boolean, +): Promise => { + let domainProfileUrl = `/badges/${badge}`; + const query = QueryString.stringify({pending}); + if (query) { + domainProfileUrl += `?${query}`; + } + return await fetchApi(domainProfileUrl, {host: config.PROFILE.HOST_URL}); +}; + +export const getSponsorRankings = async ( + maxCount: number, + badge?: string, +): Promise => { + return await fetchApi( + `/badges/rankings/sponsors?count=${maxCount}${ + badge ? `&badge=${badge}` : '' + }`, + { + host: config.PROFILE.HOST_URL, + }, + ); +}; + +export const getMarketplaceBadgeDetails = async (url: string) => { + const response = await fetch(`${config.PROFILE.HOST_URL}/badges/claim`, { + method: 'POST', + headers: new Headers({ + 'Content-Type': 'application/json', + }), + body: JSON.stringify({link: url}), + }); + return response; +}; diff --git a/server/actions/domainActions.ts b/server/actions/domainActions.ts new file mode 100644 index 00000000..42ff7158 --- /dev/null +++ b/server/actions/domainActions.ts @@ -0,0 +1,76 @@ +import {fetchApi} from 'lib/fetchApi'; +import type { + DomainBadgesResponse, + SerializedCryptoWalletBadge, +} from 'lib/types/badge'; +import type { + EnsDomainStatusResponse, + SerializedDomainRank, +} from 'lib/types/domain'; + +import config from '@unstoppabledomains/config'; + +export const getDomainBadges = async ( + domain: string, + {withoutPartners}: {forceRefresh?: boolean; withoutPartners?: boolean} = {}, +): Promise => { + // request a badge refresh but do not wait for the processing + // to be completed before continuing. Some badge operations + // are lengthy and would significantly impact response time. + // Calling in this way allows processing to happen in background + // and request to return immediately with the existing badges. + void fetchApi(`/domains/${domain}/sync_badges`); + + // retrieve badge data from profile API + const data = await fetchApi( + `/public/${domain}/badges?partners=${withoutPartners ? 'false' : 'true'}`, + { + host: config.PROFILE.HOST_URL, + }, + ); + const badges = data?.badges?.map((badge: SerializedCryptoWalletBadge) => { + return { + ...badge, + active: true, + expired: false, + }; + }); + return { + list: badges, + countTotal: badges.length, + countActive: badges.length, + badgesLastSyncedAt: new Date(), + }; +}; + +export const getEnsDomainStatus = async ( + domain: string, +): Promise => { + return await fetchApi(`/domain/${domain}/ens-status`, { + method: 'GET', + }); +}; + +export const getReverseResolution = async ( + address: string, +): Promise => { + const resolutionResponse = await fetchApi(`/public/resolve/${address}`, { + host: config.PROFILE.HOST_URL, + }); + return resolutionResponse?.name; +}; + +export const getDomainRankings = async ( + maxCount: number, + communityOnly?: boolean, + badge?: string, +): Promise => { + return await fetchApi( + `/badges/rankings/domains?count=${maxCount}${ + communityOnly ? '&communityOnly=true' : '' + }${badge ? `&badge=${badge}` : ''}`, + { + host: config.PROFILE.HOST_URL, + }, + ); +}; diff --git a/server/actions/domainProfile.ts b/server/actions/domainProfile.ts new file mode 100644 index 00000000..4733e271 --- /dev/null +++ b/server/actions/domainProfile.ts @@ -0,0 +1,154 @@ +import type {AddressResolution} from 'components/Chat/types'; +import {fetchApi} from 'lib/fetchApi'; +import type { + SerializedFollowerListData, + SerializedPublicDomainProfileData, +} from 'lib/types/domain'; +import QueryString from 'qs'; +import {useQuery} from 'react-query'; + +import config from '@unstoppabledomains/config'; + +const queryKey = { + followStatus: () => ['domainProfile', 'followingStatus'], +}; + +export const getProfileData = async ( + domain: string, + expiry?: number, +): Promise => { + const domainProfileUrl = `/public/${domain}${ + expiry ? `?expiry=${expiry}` : '' + }`; + return await fetchApi(domainProfileUrl, {host: config.PROFILE.HOST_URL}); +}; + +export const followDomainProfile = async ( + followerDomain: string, + followeeDomain: string, + auth: { + expires: string; + signature: string; + }, +): Promise => { + await fetchApi(`/followers/${followeeDomain}`, { + method: 'POST', + mode: 'cors', + host: config.PROFILE.HOST_URL, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'x-auth-domain': followerDomain, + 'x-auth-expires': auth.expires, + 'x-auth-signature': auth.signature, + }, + body: JSON.stringify({domain: followerDomain}), + }); +}; + +export const unfollowDomainProfile = async ( + followerDomain: string, + followeeDomain: string, + auth: { + expires: string; + signature: string; + }, +): Promise => { + await fetchApi(`/followers/${followeeDomain}`, { + method: 'DELETE', + mode: 'cors', + host: config.PROFILE.HOST_URL, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'x-auth-domain': followerDomain, + 'x-auth-expires': auth.expires, + 'x-auth-signature': auth.signature, + }, + body: JSON.stringify({domain: followerDomain}), + }); +}; + +export const checkIfFollowingDomainProfile = async ( + followerDomain: string, + followeeDomain: string, +): Promise => { + const respJson = await fetchApi( + `/followers/${followeeDomain}/follow-status/${followerDomain}`, + { + method: 'GET', + mode: 'cors', + host: config.PROFILE.HOST_URL, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + }, + ); + return respJson.isFollowing; +}; + +export const useDomainProfileFollowStatus = ( + followerDomain: string, + followeeDomain: string, +) => { + return useQuery( + queryKey.followStatus(), + async (): Promise<{ + isFollowing: boolean; + followerDomain: string; + followeeDomain: string; + }> => { + const isFollowing = await checkIfFollowingDomainProfile( + followerDomain, + followeeDomain, + ); + return {isFollowing, followerDomain, followeeDomain}; + }, + { + enabled: !!followerDomain, + }, + ); +}; + +export const searchProfiles = async (query: string): Promise => { + const data: Array<{name: string}> | undefined = await fetchApi( + `/search?name=${query}`, + { + host: config.PROFILE.HOST_URL, + }, + ); + return data ? data.map(profile => profile.name) : []; +}; + +export const getPublicDomainProfile = ( + domain: string, +): Promise => { + return fetchApi( + `/domains/${domain}/profile`, + ); +}; + +export const getProfileResolution = async ( + address: string, +): Promise => { + return await fetchApi(`/resolve/${address}`, { + host: config.PROFILE.HOST_URL, + }); +}; + +export const getFollowers = async ( + domain: string, + relationship: 'followers' | 'following' = 'followers', + cursor?: number, +): Promise => { + const domainProfileUrl = `/followers/${domain}?${QueryString.stringify( + { + relationship_type: relationship, + take: 100, + cursor, + }, + {skipNulls: true}, + )}`; + return await fetchApi(domainProfileUrl, {host: config.PROFILE.HOST_URL}); +}; diff --git a/server/actions/featureFlagActions.ts b/server/actions/featureFlagActions.ts new file mode 100644 index 00000000..07bd7243 --- /dev/null +++ b/server/actions/featureFlagActions.ts @@ -0,0 +1,41 @@ +import {fetchApi} from 'lib/fetchApi'; +import {useQuery} from 'react-query'; + +const BASE_QUERY_KEY = 'featureFlags'; +const queryKey = { + featureFlags: () => [BASE_QUERY_KEY], +}; + +export type FeatureFlags = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + variations?: Record; +}; + +export const DEFAULT_FEATURE_FLAGS = { + variations: {}, +} as FeatureFlags; + +export const fetchFeatureFlags = async ( + domainName: string = '', +): Promise => { + const queryString = domainName ? `?domainName=${domainName}` : ''; + const featureFlags = await fetchApi(`/feature-flags${queryString}`); + return {...DEFAULT_FEATURE_FLAGS, ...featureFlags}; +}; + +export const useFeatureFlags = ( + shouldRefetch = false, + domainName: string = '', +) => { + const query = useQuery( + [...queryKey.featureFlags(), domainName], + (): Promise => fetchFeatureFlags(domainName), + { + cacheTime: Infinity, + staleTime: Infinity, + refetchInterval: shouldRefetch ? 60_000 : undefined, + }, + ); + const data = query.data ?? DEFAULT_FEATURE_FLAGS; + return {...query, data}; +}; diff --git a/server/actions/identityActions.ts b/server/actions/identityActions.ts new file mode 100644 index 00000000..295fe506 --- /dev/null +++ b/server/actions/identityActions.ts @@ -0,0 +1,24 @@ +import {fetchApi} from 'lib/fetchApi'; +import type {PersonaIdentity} from 'lib/types/persona'; +import qs from 'qs'; + +import config from '@unstoppabledomains/config'; + +interface GetIdentityOptions { + name?: string; + names?: Array; +} + +interface UseIdentityQueryOptions { + names?: string; + name?: string; +} + +export const getIdentity = async ( + options: GetIdentityOptions | UseIdentityQueryOptions, +): Promise> => { + return await fetchApi>( + `/api/persona/identity/findBy?${qs.stringify(options)}`, + {host: config.IDENTITY.HOST_URL}, + ); +}; diff --git a/server/actions/messageActions.ts b/server/actions/messageActions.ts new file mode 100644 index 00000000..a5cae862 --- /dev/null +++ b/server/actions/messageActions.ts @@ -0,0 +1,82 @@ +import {signMessage} from 'components/Chat/protocol/push'; +import type {TopicRegistration} from 'components/Chat/types'; +import {fetchApi} from 'lib/fetchApi'; +import type {SerializedCryptoWalletBadge} from 'lib/types/badge'; +import type {SendMessageParams} from 'lib/types/message'; + +import config from '@unstoppabledomains/config'; + +export const sendBadgeMessage = async (params: SendMessageParams) => { + return await fetchApi(`/api/push/notification/badge`, { + method: 'POST', + mode: 'cors', + host: config.MESSAGING.HOST_URL, + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'x-auth-domain': params.domain, + 'x-auth-expires': params.expiry, + 'x-auth-signature': params.signature, + }, + body: JSON.stringify(params.body), + }); +}; + +export const isAddressSpam = async (address: string): Promise => { + const spamData = await fetchApi( + `${config.MESSAGING.HOST_URL}/api/xmtp/spam/${address}`, + {host: config.MESSAGING.HOST_URL}, + ); + return spamData.isSpam === true; +}; + +export const joinBadgeGroupChat = async ( + badgeCode: string, + userAddress: string, + pushKey: string, + leave?: boolean, +): Promise => { + const signedBadgeCode = await signMessage(badgeCode, pushKey); + const badgeData = await fetchApi( + `/api/push/group/${leave ? 'leave' : 'join'}`, + { + method: 'POST', + host: config.MESSAGING.HOST_URL, + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify({ + badgeCode, + address: userAddress, + signature: signedBadgeCode, + }), + }, + ); + if (!badgeData) { + throw new Error('Unable to join group'); + } + return badgeData; +}; + +export type queryGet = { + domain: string; +}; + +export const registerXmtpTopic = async ( + ownerAddress: string, + signedPublicKey: string, + registrations: TopicRegistration[], +): Promise => { + const responseJson = await fetchApi(`/api/xmtp/topics/register`, { + method: 'POST', + host: config.MESSAGING.HOST_URL, + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify({ + ownerAddress, + signedPublicKey, + registrations, + }), + }); + if (!responseJson) { + return 0; + } + return responseJson.success; +}; diff --git a/server/components/Badges/Badge.tsx b/server/components/Badges/Badge.tsx new file mode 100644 index 00000000..b41b2d1d --- /dev/null +++ b/server/components/Badges/Badge.tsx @@ -0,0 +1,324 @@ +import BadgeCount from '@mui/material/Badge'; +import Grid from '@mui/material/Grid'; +import type {TooltipProps} from '@mui/material/Tooltip'; +import Tooltip from '@mui/material/Tooltip'; +import Zoom from '@mui/material/Zoom'; +import type {Theme} from '@mui/material/styles'; +import {useTheme} from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import {getBadge} from 'actions/badgeActions'; +import {useFeatureFlags} from 'actions/featureFlagActions'; +import type {SerializedCryptoWalletBadge} from 'lib/types/badge'; +import type {Web3Dependencies} from 'lib/types/web3'; +import {useRouter} from 'next/router'; +import React, {useCallback, useEffect, useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import {filteredBadgeCodes} from '../Chat/modal/group/CommunityList'; +import BadgePopupModal from './BadgePopupModal'; + +export const SMALL_BADGE_SIZE = 35; +export const MOBILE_BADGE_SIZE = 56; +export const DEFAULT_BADGE_SIZE = 80; +type StyleProps = { + isMobile?: boolean; + small?: boolean; +}; +const useStyles = makeStyles()( + (theme: Theme, {isMobile, small}: StyleProps) => ({ + wrapper: { + width: small ? 'auto' : '100%', + columnGap: theme.spacing(2), + }, + badgeIconContainer: { + cursor: 'pointer', + width: small + ? SMALL_BADGE_SIZE + : isMobile + ? MOBILE_BADGE_SIZE + : DEFAULT_BADGE_SIZE, + height: small + ? SMALL_BADGE_SIZE + : isMobile + ? MOBILE_BADGE_SIZE + : DEFAULT_BADGE_SIZE, + }, + badgeTierStandard: { + border: `2px solid white`, + }, + badgeTierFeatured2: { + border: `2px solid ${theme.palette.neutralShades[500]}`, + }, + badgeTierFeatured3: { + border: `2px solid ${theme.palette.primaryShades[500]}`, + }, + badgeEmojiContainerWithCircle: { + boxShadow: theme.shadows[6], + borderRadius: '50%', + width: small + ? SMALL_BADGE_SIZE + : isMobile + ? MOBILE_BADGE_SIZE + : DEFAULT_BADGE_SIZE, + height: small + ? SMALL_BADGE_SIZE + : isMobile + ? MOBILE_BADGE_SIZE + : DEFAULT_BADGE_SIZE, + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + fontSize: + (small + ? SMALL_BADGE_SIZE + : isMobile + ? MOBILE_BADGE_SIZE + : DEFAULT_BADGE_SIZE) / 1.5, + }, + badgeIconContainerWithCircle: { + boxShadow: theme.shadows[6], + borderRadius: '50%', + width: small + ? SMALL_BADGE_SIZE + : isMobile + ? MOBILE_BADGE_SIZE + : DEFAULT_BADGE_SIZE, + height: small + ? SMALL_BADGE_SIZE + : isMobile + ? MOBILE_BADGE_SIZE + : DEFAULT_BADGE_SIZE, + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + }, + badgeTitleWrapper: { + paddingTop: theme.spacing(small ? 0 : isMobile ? 2 : 0), + overflow: 'hidden', + }, + title: { + fontSize: small + ? theme.typography.subtitle2.fontSize + : theme.typography.subtitle1.fontSize, + fontWeight: theme.typography.fontWeightMedium, + color: small ? 'inherit' : theme.palette.common.black, + textOverflow: 'ellipsis', + overflow: 'hidden', + whiteSpace: 'nowrap', + }, + hiddenTitle: { + color: theme.palette.neutralShades[400], + }, + infoIcon: { + fontSize: theme.typography.h6.fontSize, + color: theme.palette.neutralShades[600], + }, + }), +); + +enum BadgePopupModalSettings { + OpenBadgePopupModal = 'openBadgeCode', +} + +type Props = SerializedCryptoWalletBadge & { + small?: boolean; + hidden?: boolean; + usageEnabled?: boolean; + iconOnly?: boolean; + tooltipPlacement?: 'right' | 'top'; + profile?: boolean; + domain?: string; + setWeb3Deps?: (value: Web3Dependencies | undefined) => void; + authWallet?: string; + authDomain?: string; +}; + +const Badge: React.FC = ({ + small, + iconOnly, + hidden, + code, + logo, + linkUrl, + name, + description, + tooltipPlacement, + usageEnabled, + profile, + domain, + gallery, + count, + setWeb3Deps, + authWallet, + authDomain, +}) => { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down('sm')); + const {classes, cx} = useStyles({isMobile, small}); + const [isOpenModal, setIsOpenModal] = useState(false); + const [holdersRemaining, setHoldersRemaining] = useState(); + const [holdersFeatured, setHoldersFeatured] = useState([]); + const [holders, setHolders] = useState(); + const [rank, setRank] = useState(); + const [primarySponsor, setPrimarySponsor] = useState(); + const [sponsorshipAvailable, setSponsorshipAvailable] = useState(false); + const [allSponsors, setAllSponsors] = useState(); + const [authorizedAddresses, setAuthorizedAddresses] = useState([]); + const {query} = useRouter(); + const {data: featureFlags} = useFeatureFlags(false, domain); + + useEffect(() => { + //set badge modal open if query param matches badge code + if (code === query[BadgePopupModalSettings.OpenBadgePopupModal]) { + setIsOpenModal(true); + } + }, [query]); + + useEffect(() => { + const loadBadgeUsage = async () => { + // retrieve badge usage data + const badgeData = await getBadge(code); + if (!badgeData) return; + if (badgeData?.usage) { + setRank(badgeData.usage.rank); + setHoldersFeatured(badgeData.usage.featured ?? []); + const remaining = + badgeData.usage.holders - (badgeData.usage.featured?.length || 0); + if (remaining > 0) { + setHoldersRemaining(remaining); + } + setHolders(badgeData.usage.holders); + } + if (badgeData?.sponsorship?.latest) { + setPrimarySponsor(badgeData.sponsorship.latest); + } + if (badgeData?.sponsorship?.domains) { + setAllSponsors(badgeData.sponsorship.domains.map(d => d.name)); + } + if (badgeData?.sponsorship?.authorizedAddresses) { + setAuthorizedAddresses(badgeData.sponsorship.authorizedAddresses); + } + // determine whether sponsorship is available + const sponsorCount = badgeData.sponsorship?.domains + ? badgeData.sponsorship.domains + .map(d => d.count) + .reduce((t, c) => t + c, 0) + : 0; + setSponsorshipAvailable(sponsorCount < badgeData.sponsorship.max); + }; + if (usageEnabled) { + void loadBadgeUsage(); + } + }, [code, usageEnabled]); + + const handleShowModal = useCallback(async () => { + if (hidden) return; + setIsOpenModal(status => !status); + }, [small, hidden]); + + const WithTooltip = (tooltipPlacement ? Tooltip : React.Fragment) as ( + props: TooltipProps, + ) => JSX.Element; + const tooltipProps = ( + tooltipPlacement + ? { + arrow: true, + title: ( + {iconOnly ? name : description} + ), + TransitionComponent: Zoom, + placement: tooltipPlacement, + } + : {} + ) as TooltipProps; + + return ( +
+ + 1 ? count : undefined} + overlap="circular" + color="secondary" + max={999} + > + + + badge logo + + {!iconOnly && ( + +
+ {name} +
+
+ )} +
+
+
+ +
+ ); +}; + +export default Badge; diff --git a/server/components/Badges/BadgePopupModal.tsx b/server/components/Badges/BadgePopupModal.tsx new file mode 100644 index 00000000..028781e7 --- /dev/null +++ b/server/components/Badges/BadgePopupModal.tsx @@ -0,0 +1,454 @@ +import Close from '@mui/icons-material/Close'; +import ForumOutlinedIcon from '@mui/icons-material/ForumOutlined'; +import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined'; +import IosShareIcon from '@mui/icons-material/IosShare'; +import LinkIcon from '@mui/icons-material/Link'; +import SendIcon from '@mui/icons-material/Send'; +import VolunteerActivismIcon from '@mui/icons-material/VolunteerActivism'; +import Button from '@mui/material/Button'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogTitle from '@mui/material/DialogTitle'; +import Grid from '@mui/material/Grid'; +import IconButton from '@mui/material/IconButton'; +import Popover from '@mui/material/Popover'; +import type {TooltipProps} from '@mui/material/Tooltip'; +import Tooltip, {tooltipClasses} from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import {styled} from '@mui/material/styles'; +import ComposeMessage from 'components/Badges/ComposeMessage'; +import useUnstoppableMessaging from 'components/Chat/hooks/useUnstoppableMessaging'; +import CopyToClipboard from 'components/CopyToClipboard'; +import {DomainPreview} from 'components/Domain/DomainPreview'; +import Link from 'components/Link'; +import useTranslationContext from 'lib/i18n'; +import type {Web3Dependencies} from 'lib/types/web3'; +import {useRouter} from 'next/router'; +import {useSnackbar} from 'notistack'; +import numeral from 'numeral'; +import React, {useState} from 'react'; +import useStyles from 'styles/components/badgePopupModalStyles'; + +import config from '@unstoppabledomains/config'; + +const LightTooltip = styled(({className, ...props}: TooltipProps) => ( + +))(({theme}) => ({ + [`& .${tooltipClasses.tooltip}`]: { + backgroundColor: theme.palette.neutralShades[600], + boxShadow: theme.shadows[1], + }, +})); + +interface Props { + isOpenModal: boolean; + handleShowModal: () => void; + logo: string; + linkUrl?: string | null; + small?: boolean; + description: string; + name: string; + holdersRemaining?: number; + holdersFeatured?: string[]; + holders?: number; + profile?: boolean; + domain?: string; + primarySponsor?: string; + allSponsors?: string[]; + sponsorshipAvailable?: boolean; + groupChatAvailable?: boolean; + rank?: number; + badgeCode: string; + setWeb3Deps?: (value: Web3Dependencies | undefined) => void; + authWallet?: string; + authorizedAddresses?: string[]; + authDomain?: string; +} + +const BadgePopupModal = ({ + holdersFeatured, + holdersRemaining, + holders, + name, + description, + isOpenModal, + handleShowModal, + logo, + linkUrl, + profile, + domain, + primarySponsor, + allSponsors, + sponsorshipAvailable, + groupChatAvailable, + badgeCode, + rank, + setWeb3Deps, + authWallet, + authorizedAddresses, + authDomain, +}: Props) => { + const [t] = useTranslationContext(); + const {classes, cx} = useStyles(); + const {setOpenCommunity} = useUnstoppableMessaging(); + const [openPopover, setOpenPopover] = useState(false); + const [openComposeMessageModal, setOpenComposeMessageModal] = useState(false); + const [anchorEl, setAnchorEl] = React.useState( + null, + ); + const router = useRouter(); + const {enqueueSnackbar} = useSnackbar(); + const otherSponsors = allSponsors?.filter(s => s !== primarySponsor); + const openseaBadge = badgeCode.startsWith('opensea-'); + const handleClickToCopy = () => { + enqueueSnackbar(t('common.copied'), {variant: 'success'}); + }; + + const canSendMessage = + authWallet && authDomain && !!setWeb3Deps + ? authorizedAddresses?.includes(authWallet) + : false; + + const handleShareClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + setOpenPopover(true); + }; + + const handleSponsorClick = (event: React.MouseEvent) => { + window.location.href = `${config.UNSTOPPABLE_WEBSITE_URL}/badge/activate/${badgeCode}`; + }; + + const handleGroupChatClick = (event: React.MouseEvent) => { + setOpenCommunity(badgeCode); + handleShowModal(); + }; + + const handleClosePopOver = () => { + setAnchorEl(null); + setOpenPopover(false); + }; + + const handleViewBadgePageClick = () => { + void router.push(`${config.UD_ME_BASE_URL}/badge/${badgeCode}`); + }; + + const getSponsorsTooltip = (): React.ReactFragment => { + return ( +
+ + {t('badges.alsoSponsoredBy')} + + {otherSponsors?.map(s => ( + - {s} + ))} +
+ ); + }; + + const handleDescription = () => { + if (description?.length > 205) { + return ( + <> + + {description.substring(0, 205)} ... + + {' '} + {t('nftCollection.seeMore')} + + + + ); + } + return ( + <> + + {description} + + + ); + }; + + return ( + + + + +
+ + {name} + + badge logo + + {t('badges.holder')} + +
+
+ + + + + + + + {primarySponsor && ( +
+ + {t('badges.sponsoredBy')}: + {' '} + {primarySponsor.split('.').length === 2 ? ( + + + {primarySponsor} + + + ) : ( + + {primarySponsor} + + )} + {otherSponsors && otherSponsors.length > 0 && ( + + + + )} +
+ )} + + + {name} + + + + {handleDescription()} + + {(holdersRemaining || + (holdersFeatured && holdersFeatured?.length > 0)) && ( + <> + + {t('badges.holder')} + + {rank && ( + + {t('badges.rankNumber', {rank})} + + )} + + {holdersFeatured?.map(holdersDomain => ( + + ))} + {holdersRemaining && ( +
+ {holdersFeatured && holdersFeatured?.length > 0 && '+'} + {numeral(holdersRemaining).format('0a')}{' '} + {holdersFeatured && holdersFeatured?.length > 0 + ? 'other' + : 'holder'} + {holdersRemaining > 1 && 's'} +
+ )} +
+ + )} +
+ {(linkUrl || openseaBadge) && ( + + )} + {profile && ( + <> + {sponsorshipAvailable && ( + + + + + + )} + {groupChatAvailable && ( + + + + + + )} + {canSendMessage && ( + + setOpenComposeMessageModal(true)} + className={classes.iconContainer} + > + + + + )} + + + + + + +
+ + + + {t('badges.copyLink')} + + +
+
+ + )} +
+
+
+
+
+ {!!setWeb3Deps && authWallet && authDomain && ( + setOpenComposeMessageModal(false)} + fullWidth + maxWidth={'sm'} + > + setOpenComposeMessageModal(false)} + setWeb3Deps={setWeb3Deps} + authWallet={authWallet} + authDomain={authDomain} + > + + )} +
+ ); +}; + +export default BadgePopupModal; diff --git a/server/components/Badges/BadgeRankings.tsx b/server/components/Badges/BadgeRankings.tsx new file mode 100644 index 00000000..3226e1eb --- /dev/null +++ b/server/components/Badges/BadgeRankings.tsx @@ -0,0 +1,127 @@ +import HelpOutlineIcon from '@mui/icons-material/HelpOutline'; +import Button from '@mui/material/Button'; +import Grid from '@mui/material/Grid'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import {getSponsorRankings} from 'actions/badgeActions'; +import {getDomainRankings} from 'actions/domainActions'; +import {DomainListModal} from 'components/Domain/DomainListModal'; +import DomainProfileList from 'components/Domain/DomainProfileList'; +import useTranslationContext from 'lib/i18n'; +import type {SerializedDomainRank} from 'lib/types/domain'; +import React, {useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + label: { + height: '29px', + marginBottom: theme.spacing(3), + fontWeight: 700, + fontSize: '20px !important', + display: 'flex', + alignItems: 'center', + }, + helpIcon: { + marginLeft: theme.spacing(1), + color: theme.palette.neutralShades[600], + }, + contentContainer: { + minHeight: 437, + boxShadow: '0px 1px 0px #DDDDDF, 0px 0px 0px 1px #DDDDDF', + borderRadius: 8, + padding: theme.spacing(2), + }, + showMoreButton: {width: '100%', marginTop: theme.spacing(2)}, +})); + +type Props = { + domains: string[]; + type: 'holders' | 'sponsors'; + badgeCode: string; + fullWidth?: boolean; +}; + +const BadgeRankings: React.FC = ({ + domains, + type, + badgeCode, + fullWidth, +}) => { + const {classes} = useStyles(); + const [t] = useTranslationContext(); + const [showMore, setShowMore] = useState(false); + + const handleShowMoreClicked = () => { + setShowMore(true); + }; + const handleCloseShowMore = () => { + setShowMore(false); + }; + + const retrieveBadgeRankings = async (cursor?: number) => { + let rankings: SerializedDomainRank[] | undefined = []; + if (type === 'holders') { + rankings = await getDomainRankings(200, false, badgeCode); + } else { + rankings = await getSponsorRankings(200, badgeCode); + } + if (!rankings) { + return {domains: []}; + } + return {domains: rankings.map(r => r.domain)}; + }; + + return ( + <> + + + {type === 'holders' + ? t('badge.badgeHolders') + : t('badge.badgeSponsors')} + + + + +
+ + {domains.length > 5 && ( + + )} +
+
+ + + ); +}; + +export default BadgeRankings; diff --git a/server/components/Badges/CollectionStats.tsx b/server/components/Badges/CollectionStats.tsx new file mode 100644 index 00000000..10c8b0be --- /dev/null +++ b/server/components/Badges/CollectionStats.tsx @@ -0,0 +1,94 @@ +import Divider from '@mui/material/Divider'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import useTranslationContext from 'lib/i18n'; +import type {SerializedBadgeInfo} from 'lib/types/badge'; +import React from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + container: {display: 'flex', gap: theme.spacing(1)}, + item: { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-start', + width: '100%', + }, + number: { + fontWeight: 700, + fontSize: '20px !important', + }, + description: { + fontWeight: 400, + fontSize: '16px !important', + color: theme.palette.neutralShades[600], + }, + divider: {margin: theme.spacing(3, 0)}, +})); + +type Props = {badgeData: SerializedBadgeInfo}; + +const CollectionStats: React.FC = ({badgeData}) => { + const {classes} = useStyles(); + const [t] = useTranslationContext(); + + const formatVolume = (num?: number) => { + if (!num) { + return ''; + } + if (num < 1000) { + return num.toString(); + } + + const units = ['', 'K', 'M', 'B', 'T']; + const unitIndex = Math.min( + Math.floor(Math.log10(Math.abs(num)) / 3), + units.length - 1, + ); + + const scaledNum = num / 10 ** (unitIndex * 3); + const decimalDigits = + scaledNum < 10 && scaledNum !== Math.floor(scaledNum) ? 1 : 0; + + return scaledNum.toFixed(decimalDigits) + units[unitIndex]; + }; + + const marketplace = badgeData?.badge?.marketplace; + if ( + !marketplace?.volume && + (!marketplace?.floorPrice?.value || !marketplace?.floorPrice?.currency) + ) { + return null; + } + return ( + <> +
+ {marketplace.volume ? ( +
+ + {formatVolume(marketplace.volume)} + + + {t('badges.totalVolume')} + +
+ ) : null} + {marketplace.floorPrice?.value && marketplace.floorPrice?.currency ? ( +
+ + {marketplace.floorPrice.value.toFixed(3)}{' '} + {marketplace.floorPrice.currency} + + + {t('badges.floorPrice')} + +
+ ) : null} +
+ + + ); +}; + +export default CollectionStats; diff --git a/server/components/Badges/ComposeMessage.tsx b/server/components/Badges/ComposeMessage.tsx new file mode 100644 index 00000000..5e3f7ff8 --- /dev/null +++ b/server/components/Badges/ComposeMessage.tsx @@ -0,0 +1,301 @@ +import CloseIcon from '@mui/icons-material/Close'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Chip from '@mui/material/Chip'; +import CircularProgress from '@mui/material/CircularProgress'; +import Divider from '@mui/material/Divider'; +import Grid from '@mui/material/Grid'; +import IconButton from '@mui/material/IconButton'; +import InputAdornment from '@mui/material/InputAdornment'; +import Paper from '@mui/material/Paper'; +import Stack from '@mui/material/Stack'; +import TextField from '@mui/material/TextField'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import {sendBadgeMessage} from 'actions/messageActions'; +import {ProfileManager} from 'components/Wallet/ProfileManager'; +import useTranslationContext from 'lib/i18n'; +import type {Web3Dependencies} from 'lib/types/web3'; +import {useSnackbar} from 'notistack'; +import React, {useEffect, useState} from 'react'; +import {useForm} from 'react-hook-form'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +interface Props { + badge: string; + authWallet: string; + authDomain: string; + badgeCode: string; + defaultImage: string; + holders?: number; + setWeb3Deps: (value: Web3Dependencies | undefined) => void; + onClose(): void; + onSuccess?(): void; + onError?(): void; +} + +const useStyles = makeStyles()((theme: Theme) => ({ + textLimit: { + fontSize: theme.typography.subtitle2.fontSize, + float: 'right', + }, + closeButton: { + margin: theme.spacing(-1), + }, + formField: { + marginBottom: theme.spacing(4), + }, + paper: { + padding: theme.spacing(2), + borderRadius: theme.spacing(1), + border: 'none', + boxShadow: + '0px 8px 24px 0px rgba(0, 0, 0, 0.08), 0px 0px 0px 1px #DDDDDF, 0px 1px 0px 0px #DDDDDF', + }, + heading: { + color: '#62626A', + }, + divider: { + margin: `${theme.spacing(1.5)} 0`, + borderBottomStyle: 'dashed', + }, + previewImage: { + maxHeight: 'inherit', + maxWidth: theme.spacing(3), + }, +})); + +const ComposeMessage: React.FC = props => { + const { + onClose, + authWallet, + setWeb3Deps, + authDomain, + badge, + badgeCode, + holders, + defaultImage, + } = props; + const [subject, setSubject] = useState(''); + const [messageBody, setMessageBody] = useState(''); + const [ctaUrl, setCtaUrl] = useState(''); + const [imgUrl, setImgUrl] = useState(defaultImage); + const [validImgUrl, setValidImgUrl] = useState(false); + const [sendClicked, setSendClicked] = useState(false); + const [loading, setLoading] = useState(false); + const {classes} = useStyles(); + const [t] = useTranslationContext(); + const {enqueueSnackbar} = useSnackbar(); + const {handleSubmit} = useForm<{code: string}>(); + + const handleCallback = async (signature: string, expiry: string) => { + try { + const resp = await sendBadgeMessage({ + signature, + expiry, + domain: authDomain, + body: { + badgeCode, + subject, + message: messageBody, + ctaUrl, + imageUrl: imgUrl, + sender: { + domain: authDomain, + }, + }, + }); + + if (resp.status >= 400) { + enqueueSnackbar(t('common.somethingWentWrong'), { + variant: 'error', + }); + } else { + enqueueSnackbar( + t('profile.messaging.messageSent', { + numberOfHolders: holders || 0, + plural: holders && holders > 1 ? 's' : '', + }), + ); + onClose(); + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (e: any) { + enqueueSnackbar(e.message || t('profile.messaging.failedToSend'), { + variant: 'error', + }); + } finally { + setLoading(false); + } + }; + + useEffect(() => { + // If valid URL then display preview in image text field + try { + const url = new URL(imgUrl); + if (url) { + setValidImgUrl(true); + } + } catch { + setValidImgUrl(false); + } + }, [imgUrl]); + + const handleSendMessage = async () => { + setSendClicked(true); + }; + + return ( + <> +
+ + + + + {t('profile.messaging.compose')} + + + + + + + + + + + + {t('profile.messaging.from')} + + + + + + {t('profile.messaging.to')} + + + +
+ setSubject(e.target.value)} + value={subject} + placeholder={t('profile.messaging.enterSubject')} + InputLabelProps={{shrink: true}} + required + inputProps={{maxLength: 80}} + fullWidth + size="small" + /> +
{`${subject.length}/80`}
+
+
+ setMessageBody(e.target.value)} + placeholder={t('profile.messaging.enterMessage')} + required + InputLabelProps={{shrink: true}} + multiline + minRows={5} + maxRows={6} + inputProps={{maxLength: 500}} + fullWidth + size="small" + /> +
{`${messageBody.length}/500`}
+
+ + + setImgUrl(e.target.value)} + value={imgUrl} + placeholder="https://example.com/image.jpeg" + InputLabelProps={{shrink: true}} + fullWidth + helperText={t('profile.messaging.imageUrlDescription')} + size="small" + InputProps={{ + startAdornment: validImgUrl && ( + + + + ), + }} + /> + + setCtaUrl(e.target.value)} + placeholder="https://example.com" + helperText={t('profile.messaging.ctaDescription')} + InputLabelProps={{shrink: true}} + fullWidth + size="small" + /> + + + {loading && } + +
+
+
+ + + ); +}; + +export default ComposeMessage; diff --git a/server/components/Badges/index.tsx b/server/components/Badges/index.tsx new file mode 100644 index 00000000..e643b694 --- /dev/null +++ b/server/components/Badges/index.tsx @@ -0,0 +1,150 @@ +import AddIcon from '@mui/icons-material/Add'; +import Button from '@mui/material/Button'; +import Grid from '@mui/material/Grid'; +import type {Theme} from '@mui/material/styles'; +import {useTheme} from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import useTranslationContext from 'lib/i18n'; +import type {DomainBadgesResponse} from 'lib/types/badge'; +import type {Web3Dependencies} from 'lib/types/web3'; +import React, {useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import CustomBadgesDialog from '../CustomBadges/CustomBadgesDialog'; +import Badge, {DEFAULT_BADGE_SIZE, MOBILE_BADGE_SIZE} from './Badge'; + +type StyleProps = { + isMobile?: boolean; +}; +const useStyles = makeStyles()((theme: Theme, {isMobile}) => ({ + button: { + width: '100%', + marginBottom: theme.spacing(-2), + }, + badgeContainer: { + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + }, + placeHolder: { + boxShadow: theme.shadows[6], + border: `1px solid ${theme.palette.neutralShades[200]}`, + borderRadius: '50%', + width: isMobile ? MOBILE_BADGE_SIZE : DEFAULT_BADGE_SIZE, + height: isMobile ? MOBILE_BADGE_SIZE : DEFAULT_BADGE_SIZE, + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + cursor: 'pointer', + }, + placeholderIcon: { + color: theme.palette.neutralShades[200], + }, +})); + +type Props = DomainBadgesResponse & { + usageEnabled?: boolean; + profile?: boolean; + domain: string; + setWeb3Deps: (value: Web3Dependencies | undefined) => void; + authWallet?: string; + authDomain?: string; +}; + +const MAX_COUNT_FOR_FIRST_VIEW = 12; +const Badges: React.FC = ({ + list, + countActive, + usageEnabled, + profile, + domain, + setWeb3Deps, + authWallet, + authDomain, +}) => { + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down('sm')); + const {classes} = useStyles({isMobile}); + const [t] = useTranslationContext(); + const [showMore, setShowMore] = useState(false); + const [badgeModalOpen, setBadgeModalOpen] = useState(false); + + const handleShowMore = () => { + setShowMore(true); + }; + + const handleOpenBadgeModal = () => { + setBadgeModalOpen(true); + }; + + const handleCloseBadgeModal = () => { + setBadgeModalOpen(false); + }; + + const activeBadgeList = list.filter( + ({active, expired}) => active && !expired, + ); + const badges = showMore + ? activeBadgeList + : activeBadgeList.slice(0, MAX_COUNT_FOR_FIRST_VIEW); + const badgesPerRow = isMobile ? 4 : 6; + const placeholderCount = + badges.length % badgesPerRow === 0 + ? 0 + : badgesPerRow - (badges.length % badgesPerRow); + + return ( + <> + + {badges.map(badge => ( + + + + ))} + {[...Array(placeholderCount)].map(badge => ( + +
+ +
+
+ ))} + {!showMore && countActive > MAX_COUNT_FOR_FIRST_VIEW && ( + + + + )} +
+ + + ); +}; + +export default Badges; diff --git a/server/components/Chat/IncomingSnackbar.tsx b/server/components/Chat/IncomingSnackbar.tsx new file mode 100644 index 00000000..bb92e183 --- /dev/null +++ b/server/components/Chat/IncomingSnackbar.tsx @@ -0,0 +1,147 @@ +import {alpha} from '@mui/material/'; +import Avatar from '@mui/material/Avatar'; +import Paper from '@mui/material/Paper'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import useTranslationContext from 'lib/i18n'; +import {SnackbarContent} from 'notistack'; +import React, {useEffect, useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import {useIsTabActive} from './hooks/useIsTabActive'; +import {getAddressMetadata} from './protocol/resolution'; + +const useStyles = makeStyles<{variant: SnackbarVariant}>()( + (theme: Theme, {variant}) => ({ + container: { + display: 'flex', + backgroundColor: alpha( + variant === 'chat' + ? theme.palette.secondary.main + : theme.palette.primary.main, + 0.35, + ), + backdropFilter: 'blur(15px)', + padding: theme.spacing(1), + alignItems: 'center', + cursor: 'pointer', + minWidth: 300, + [theme.breakpoints.down('sm')]: { + width: '100%', + }, + }, + avatar: { + marginRight: theme.spacing(1), + color: theme.palette.primary.main, + backgroundColor: 'white', + border: '2px solid white', + width: 50, + height: 50, + }, + message: { + marginRight: theme.spacing(1), + }, + }), +); + +type SnackbarVariant = 'notification' | 'chat'; + +interface IncomingSnackbarProps { + id: string; + title?: string; + message?: string; + imageUrl?: string; + variant: SnackbarVariant; + onClick: (id?: string) => void; +} + +interface IncomingChatSnackbarProps { + id: string; + address?: string; + onClick: (id?: string) => void; +} + +export const IncomingChatSnackbar = React.forwardRef< + HTMLDivElement, + IncomingChatSnackbarProps +>((props, ref) => { + const {id, address, onClick, ...other} = props; + const [t] = useTranslationContext(); + const [avatarUrl, setAvatarUrl] = useState(); + const [domain, setDomain] = useState(); + const [senderAddress, setSenderAddress] = useState(); + + useEffect(() => { + if (!address) { + return; + } + const loadReverse = async () => { + const reverseAddress = address.replace('eip155:', ''); + try { + const addressMetadata = await getAddressMetadata(reverseAddress); + if (addressMetadata?.name) { + setDomain(addressMetadata.name); + setAvatarUrl(addressMetadata.avatarUrl); + } + } catch (e) { + console.warn('error looking up reverse resolution', String(e)); + } + setSenderAddress(reverseAddress); + }; + void loadReverse(); + }, [address]); + + return ( + + {senderAddress && ( + onClick(senderAddress)} + /> + )} + + ); +}); + +export const IncomingSnackbar = React.forwardRef< + HTMLDivElement, + IncomingSnackbarProps +>((props, ref) => { + const {id, title, imageUrl, message, variant, onClick, ...other} = props; + const {classes} = useStyles({variant}); + const isTabActive = useIsTabActive(); + + useEffect(() => { + if (isTabActive) { + return; + } + if ('Notification' in window) { + if (Notification.permission === 'granted' && title) { + const browserNotification = new Notification(title, { + body: message, + icon: imageUrl, + }); + browserNotification.onclick = () => onClick(id); + } + } + }, []); + + return ( + + onClick()}> + +
+ {title} + {message} +
+
+
+ ); +}); diff --git a/server/components/Chat/SupportBubble.tsx b/server/components/Chat/SupportBubble.tsx new file mode 100644 index 00000000..1b23e451 --- /dev/null +++ b/server/components/Chat/SupportBubble.tsx @@ -0,0 +1,156 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import CloseIcon from '@mui/icons-material/Close'; +import SupportAgentOutlinedIcon from '@mui/icons-material/SupportAgentOutlined'; +import Badge from '@mui/material/Badge'; +import Box from '@mui/material/Box'; +import IconButton from '@mui/material/IconButton'; +import Tooltip from '@mui/material/Tooltip'; +import type {Theme} from '@mui/material/styles'; +import {useFeatureFlags} from 'actions/featureFlagActions'; +import useTranslationContext from 'lib/i18n'; +import React, {useEffect, useState} from 'react'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + supportBubbleContainer: { + position: 'fixed', + bottom: '15px', + right: '10px', + margin: theme.spacing(1), + [theme.breakpoints.down('md')]: { + display: 'none', + }, + }, + supportButton: { + border: '1px solid', + boxShadow: theme.shadows[6], + borderColor: theme.palette.neutralShades[200], + backgroundColor: theme.palette.white, + '&:hover': { + backgroundColor: theme.palette.white, + }, + }, + supportIcon: { + width: 40, + height: 40, + }, + closeIcon: { + width: 11, + height: 11, + margin: theme.spacing(0), + padding: theme.spacing(0), + color: theme.palette.neutralShades[600], + }, + supportClose: { + cursor: 'pointer', + }, +})); + +const useOutsideClick = (callback: () => void) => { + const ref = React.useRef(); + + React.useEffect(() => { + const handleClick = (event: MouseEvent) => { + callback(); + }; + + document.addEventListener('click', handleClick); + + return () => { + document.removeEventListener('click', handleClick); + }; + }, []); + + return ref; +}; + +export type SupportBubbleProps = { + open: boolean; + setActiveChat: (v?: string) => void; +}; + +export const SupportBubble: React.FC = ({ + open, + setActiveChat, +}) => { + const {classes} = useStyles(); + const [t] = useTranslationContext(); + const {data: featureFlags} = useFeatureFlags(); + const [active, setActive] = useState(false); + const [clickedClose, setClickedClose] = useState(false); + const [lastClickTime, setLastClickTime] = useState(0); + + // sets a timestamp every time the page is clicked + useOutsideClick(() => setLastClickTime(Date.now())); + + // sets a countdown timer based on click inactivity to display the support + // bubble after a certain amount of time has passed + useEffect(() => { + if (!open) { + setActive(false); + return; + } + if (active || clickedClose) { + return; + } + + // start the timer since last page click + const interval = setInterval(() => { + setActive(true); + }, config.XMTP.SUPPORT_BUBBLE_SECONDS * 1000); + + // reset the timer + return () => { + clearInterval(interval); + }; + }, [open, lastClickTime]); + + // handleSupportChat opens the support chat window + const handleSupportChat = () => { + setActiveChat(config.XMTP.SUPPORT_WALLET_ADDRESS); + }; + + const handleSupportClose = () => { + setActive(false); + setClickedClose(true); + }; + + return featureFlags.variations + ?.ecommerceServiceUsersEnableChatSupportBubble && + !clickedClose && + active ? ( + + + } + id="chat-support-close" + color="secondary" + overlap="circular" + onClick={handleSupportClose} + className={classes.supportClose} + > + + + + + + + + ) : null; +}; + +export default SupportBubble; diff --git a/server/components/Chat/UnstoppableMessaging.tsx b/server/components/Chat/UnstoppableMessaging.tsx new file mode 100644 index 00000000..22fc6612 --- /dev/null +++ b/server/components/Chat/UnstoppableMessaging.tsx @@ -0,0 +1,934 @@ +import ChatOutlinedIcon from '@mui/icons-material/ChatOutlined'; +import MarkUnreadChatAltOutlinedIcon from '@mui/icons-material/MarkUnreadChatAltOutlined'; +import Button from '@mui/material/Button'; +import CircularProgress from '@mui/material/CircularProgress'; +import IconButton from '@mui/material/IconButton'; +import Tooltip from '@mui/material/Tooltip'; +import type {Theme} from '@mui/material/styles'; +import type {IMessageIPFS} from '@pushprotocol/restapi'; +import * as PushAPI from '@pushprotocol/restapi'; +import {EVENTS, createSocketConnection} from '@pushprotocol/socket'; +import {ENV} from '@pushprotocol/socket/src/lib/constants'; +import type {DecodedMessage} from '@xmtp/xmtp-js'; +import {getNotificationConfigurations} from 'actions/backendActions'; +import {getDomainBadges} from 'actions/domainActions'; +import {isAddressSpam, joinBadgeGroupChat} from 'actions/messageActions'; +import useUnstoppableMessaging from 'components/Chat/hooks/useUnstoppableMessaging'; +import {AccessWalletModal} from 'components/Wallet/AccessWallet'; +import {ethers} from 'ethers'; +import useWeb3Context from 'hooks/useWeb3Context'; +import {notifyError} from 'lib/error'; +import useTranslationContext from 'lib/i18n'; +import type {SerializedCryptoWalletBadge} from 'lib/types/badge'; +import {DomainNotificationSettingsKey} from 'lib/types/message'; +import type {Web3Dependencies} from 'lib/types/web3'; +import {useSnackbar} from 'notistack'; +import {Web3Context} from 'providers/Web3ContextProvider'; +import QueryString from 'qs'; +import React, {useContext, useEffect, useState} from 'react'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import {IncomingChatSnackbar, IncomingSnackbar} from './IncomingSnackbar'; +import SupportBubble from './SupportBubble'; +import {parsePartnerMetadata} from './hooks/useFetchNotification'; +import ChatModal from './modal/ChatModal'; +import SetupModal from './modal/SetupModal'; +import {acceptGroupInvite, getPushUser} from './protocol/push'; +import {initXmtpAccount, waitForXmtpMessages} from './protocol/xmtp'; +import {getPushLocalKey, getXmtpLocalKey, setPushLocalKey} from './storage'; +import type {InitChatOptions, PayloadData} from './types'; +import { + ChatModalQueryString, + ConfigurationState, + MessagingSignatureType, + PUSH_CHAT_APP, + TabType, + fromCaip10Address, + getCaip10Address, +} from './types'; + +const useStyles = makeStyles<{inheritStyle?: boolean}>()( + (theme: Theme, {inheritStyle}) => ({ + loadingIcon: { + color: 'white', + padding: theme.spacing(0.5), + }, + messageButton: inheritStyle + ? {} + : { + color: theme.palette.common.white, + marginRight: theme.spacing(1), + backgroundColor: 'rgba(128,128,128, 0.4)', + '&:hover': { + backgroundColor: 'rgba(128,128,128, 0.4)', + }, + }, + messageIcon: inheritStyle + ? {} + : { + fontSize: '30px', + padding: theme.spacing(0.25), + }, + messageIconForOnboarding: inheritStyle + ? { + color: theme.palette.neutralShades[400], + } + : { + fontSize: '30px', + color: theme.palette.neutralShades[400], + padding: theme.spacing(0.25), + }, + }), +); + +const tooltipProps = { + modifiers: [ + { + name: 'offset', + options: { + offset: [0, 11], + }, + }, + ], +}; + +type snackbarProps = { + senderAddress?: string; + topic?: string; + groupChatId?: string; + title?: string; + body?: string; + imageUrl?: string; +}; + +export type UnstoppableMessagingProps = { + address?: string; + domain?: string; + inheritStyle?: boolean; + large?: boolean; + label?: string; + disableSupportBubble?: boolean; + initCallback?: () => void; +}; + +export const UnstoppableMessaging: React.FC = ({ + address, + domain, + inheritStyle, + large, + label, + disableSupportBubble = true, + initCallback, +}) => { + const {classes} = useStyles({inheritStyle}); + const web3Context = useContext(Web3Context); + const { + openChat: externalChatId, + setOpenChat: setExternalChatId, + openCommunity: externalCommunityId, + setOpenCommunity: setExternalCommunityId, + setIsChatReady, + setChatUser, + } = useUnstoppableMessaging(); + const [t] = useTranslationContext(); + const {enqueueSnackbar} = useSnackbar(); + const {setWeb3Deps} = useWeb3Context(); + + // Messaging user state + const [configState, setConfigState] = useState(ConfigurationState.Initial); + const [signatureInProgress, setSignatureInProgress] = + useState(); + const [initChatOptions, setInitChatOptions] = useState(); + const [walletModalIsOpen, setWalletModalIsOpen] = useState(false); + const [messagingInitialized, setMessagingInitialized] = useState(); + const [pushUser, setPushUser] = useState(); + const [blockedTopics, setBlockedTopics] = useState([]); + const [pushKey, setPushKey] = useState(); + const [xmtpKey, setXmtpKey] = useState(); + + // Chat window state + const [chatOpen, setChatOpen] = useState(false); + const [chatWindowOpen, setChatWindowOpen] = useState(false); + const [chatIncomingMessage, setChatIncomingMessage] = + useState(); + const [pushIncomingMessage, setPushIncomingMessage] = + useState(); + const [appIncomingNotification, setAppIncomingNotification] = + useState(); + const [chatWindowUpdated, setChatWindowUpdated] = useState< + Record + >({ + chat: Date.now(), + notification: Date.now(), + communities: Date.now(), + }); + const [chatWalletConnected, setChatWalletConnected] = useState(false); + const [chatSnackbar, setChatSnackbar] = useState(); + + // Chat notification state + const [isNewMessage, setIsNewMessage] = useState(false); + const [activeChat, setActiveChat] = useState(); + const [activeCommunity, setActiveCommunity] = + useState(); + const [activeTab, setActiveTab] = useState(); + + // Configuration state + const [isNotificationEnabledP2p, setIsNotificationEnabledP2p] = + useState(true); + const [isNotificationEnabledB2c, setIsNotificationEnabledB2c] = + useState(true); + + // retrieve initial configuration settings + useEffect(() => { + if (domain) { + void fetchConfig(); + } + setChatUser(domain); + }, [domain]); + + // open chat window from URL params + useEffect(() => { + // wait for initialization + if ( + messagingInitialized === undefined || + window?.location?.search === undefined + ) { + return; + } + + //set badge modal open if query param matches badge code + const query = QueryString.parse(window.location.search.replace('?', '')); + if (messagingInitialized && query[ChatModalQueryString] !== undefined) { + setExternalChatId( + query[ChatModalQueryString] + ? (query[ChatModalQueryString] as string) + : config.XMTP.SUPPORT_DOMAIN_NAME, + ); + } + }, [messagingInitialized]); + + // open chat window on new active chat ID selected + useEffect(() => { + const openExternalChat = async (): Promise => { + if (!externalChatId) { + return; + } + await handleChatClicked(externalChatId); + setExternalChatId(undefined); + }; + void openExternalChat(); + }, [externalChatId]); + + // open community chat window + useEffect(() => { + const openExternalCommunity = async (): Promise => { + if (!externalCommunityId) { + return; + } + await handleCommunityClicked(externalCommunityId); + setExternalCommunityId(undefined); + }; + void openExternalCommunity(); + }, [externalCommunityId]); + + // message icons + const messageReadyIcon = ( + + ); + const messageUnreadIcon = ( + + ); + const messageConfigureIcon = ( + + ); + + // get optionally stored messaging state at page load time. If the user has previously + // logged into push with this domain on the current browser, the private key can + // be loaded from the browser state and avoid a signature prompt. + useEffect(() => { + if (!address) { + setMessagingInitialized(true); + return; + } + const fetchUser = async () => { + const cachedPushKey = getPushLocalKey(address); + const cachedXmtpKey = getXmtpLocalKey(address); + if (cachedXmtpKey) { + setXmtpKey(cachedXmtpKey); + setIsChatReady(true); + } + if (cachedPushKey) { + setPushKey(cachedPushKey); + setPushUser(await getPushUser(address)); + } + setMessagingInitialized(true); + }; + void fetchUser(); + }, [address]); + + // handles the notification click event, either onboarding the new user to Push or + // opening the Push app for an existing user. + useEffect(() => { + if (!chatOpen || !address) { + return; + } + void handleChatClicked(); + }, [web3Context, address]); + + // query messages once at load time and initialize a socket for new messages + useEffect(() => { + if (!address && !xmtpKey) { + return; + } + + // start socket for new messages + void listenForMessages(); + }, [address, xmtpKey]); + + // incoming message notification snackbar + useEffect(() => { + try { + if (chatWindowOpen || !chatSnackbar) { + return; + } + + // retrieve notification config if the user is signed in + void fetchConfig(); + + // process notifications + if ( + chatSnackbar.senderAddress && + chatSnackbar.topic && + !blockedTopics.includes(chatSnackbar.topic) + ) { + onNewMessage(chatSnackbar.senderAddress); + return; + } + if (chatSnackbar.senderAddress && chatSnackbar.groupChatId) { + void onNewCommunityMessage( + chatSnackbar.senderAddress, + chatSnackbar.groupChatId, + ); + } + if (chatSnackbar.title && chatSnackbar.body) { + onNewNotification( + chatSnackbar.title, + chatSnackbar.body, + chatSnackbar.imageUrl || '', + ); + return; + } + } finally { + setChatSnackbar(undefined); + } + }, [chatWindowOpen, chatSnackbar]); + + const fetchConfig = async () => { + if (!domain) { + return; + } + + // retrieve profile data and notification preferences + const notificationConfig = await getNotificationConfigurations(domain); + + // set notification options for web UI + if (notificationConfig && notificationConfig.length > 0) { + const configKeys = notificationConfig.map(a => a.settingsKey); + const isNotificationsConfigured = configKeys.includes( + DomainNotificationSettingsKey.NOTIFICATIONS, + ); + if (isNotificationsConfigured) { + const isWebEnabled = configKeys.includes( + DomainNotificationSettingsKey.WEB_NOTIFICATION, + ); + const isP2p = configKeys.includes( + DomainNotificationSettingsKey.MESSAGING_DOMAIN_OWNERS, + ); + const isB2c = configKeys.includes( + DomainNotificationSettingsKey.MESSAGING_DAPPS, + ); + setIsNotificationEnabledP2p(isWebEnabled && isP2p); + setIsNotificationEnabledB2c(isWebEnabled && isB2c); + } + } + }; + + const initChatAccounts = async (opts: InitChatOptions) => { + if (!address) { + return; + } + + // determine if XMTP registration will be performed + const xmtpLocalKey = getXmtpLocalKey(address); + const xmtpSetupRequired = !xmtpLocalKey && !opts.skipXmtp; + + // determine if Push Protocol registration will be performed + const pushLocalKey = getPushLocalKey(address); + const pushSetupRequired = !pushLocalKey && !opts.skipPush; + + // ensure at least one setup option is required before continuing + if (!xmtpSetupRequired && !pushSetupRequired) { + return; + } + + try { + // open the configuration modal + setSignatureInProgress(MessagingSignatureType.NewUser); + setInitChatOptions(opts); + if (!chatOpen) { + setChatOpen(true); + } + + // retrieve the wallet signer, which requires one or more signatures from + // the user's wallet. Show a modal in the user experience to describe the + // signatures and what they do. + if (!web3Context?.web3Deps?.signer) { + return; + } + setChatWalletConnected(true); + + // perform XMTP setup if required + if (xmtpSetupRequired) { + // create the XMTP account if necessary + if (!xmtpLocalKey) { + setConfigState(ConfigurationState.RegisterXmtp); + await initXmtpAccount(address, web3Context.web3Deps.signer); + } + setXmtpKey(getXmtpLocalKey(address)); + } + + // perform Push Protocol setup if required + if (pushSetupRequired) { + // create the Push Protocol account if necessary + let pushUserAccount = await getPushUser(address); + if (!pushUserAccount) { + setConfigState(ConfigurationState.RegisterPush); + pushUserAccount = await PushAPI.user.create({ + // need to use the signer address, with actual address casing, since the UD + // address variable is stored as lowercase. The case sensitivity needs to be + // maintained for Push Protocol. + account: await web3Context.web3Deps.signer.getAddress(), + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + signer: web3Context.web3Deps + .signer as unknown as PushAPI.SignerType, + }); + } + setPushUser(pushUserAccount); + + // retrieve the user's encryption key and store it locally on the device + if (!getPushLocalKey(address)) { + setConfigState(ConfigurationState.RegisterPush); + const decryptedPvtKey = await PushAPI.chat.decryptPGPKey({ + encryptedPGPPrivateKey: pushUserAccount.encryptedPrivateKey, + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + signer: web3Context.web3Deps + .signer as unknown as PushAPI.SignerType, + }); + + try { + // update the user name and PFP to be synced with current domain + await PushAPI.user.profile.update({ + pgpPrivateKey: decryptedPvtKey, + account: `eip155:${await web3Context.web3Deps.signer.getAddress()}`, + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + profile: { + name: domain, + picture: `${config.UNSTOPPABLE_METADATA_ENDPOINT}/image-src/${domain}?withOverlay=false`, + }, + }); + } catch (e) { + // fail gracefully, as this API fails from time to time + notifyError(e as Error); + } + + // set configuration state + setPushKey(decryptedPvtKey); + setPushLocalKey(address, decryptedPvtKey); + } + + // retrieve all of the user's current subscriptions + setConfigState(ConfigurationState.QuerySubscriptions); + const userSubscriptions = await PushAPI.user.getSubscriptions({ + user: getCaip10Address(pushUserAccount.wallets), + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + }); + + // check the status of the desired subscription + for (const desiredSub of config.PUSH.CHANNELS) { + const isSubscribed = + userSubscriptions?.filter((sub: {channel: string}) => + desiredSub.toLowerCase().includes(sub.channel.toLowerCase()), + ).length > 0; + if (!isSubscribed) { + setConfigState(ConfigurationState.RegisterPush); + await PushAPI.channels.subscribe({ + signer: web3Context.web3Deps + .signer as unknown as PushAPI.SignerType, + channelAddress: desiredSub, + userAddress: getCaip10Address(pushUserAccount.wallets), + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + onError: (e: unknown) => notifyError(e), + }); + } + } + } + + // set the chat ready flag + setIsChatReady(true); + + // optional initialization callback + setConfigState(ConfigurationState.Complete); + if (initCallback) { + initCallback(); + } else { + // show the user the setup complete dialog + return; + } + } catch (e) { + notifyError(e); + } + + // remove the modal from view + handleCloseSetup(); + }; + + const listenForMessages = async () => { + if (!address || !xmtpKey) { + notifyError(new Error('Required messaging accounts not defined')); + return; + } + + // create push protocol notification socket + const pushSocketNotifications = createSocketConnection({ + user: getCaip10Address(address), + socketType: 'notification', + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + socketOptions: {autoConnect: true, reconnectionAttempts: 3}, + }); + + // create push protocol chat socket + const pushSocketChat = createSocketConnection({ + user: ethers.utils.getAddress(address), + socketType: 'chat', + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + socketOptions: {autoConnect: true, reconnectionAttempts: 3}, + }); + + // listen on push protocol notification socket if it was created successfully + if (pushSocketNotifications && pushSocketChat) { + pushSocketChat.on(EVENTS.CHAT_RECEIVED_MESSAGE, message => { + // check for a group chat message + if (!message?.chatId) { + return; + } + + // raise notification + setChatSnackbar({ + senderAddress: fromCaip10Address(message.fromCAIP10), + groupChatId: message.chatId, + }); + + // update group chat window state + setPushIncomingMessage(message); + setChatWindowUpdated({ + communities: Date.now(), + chat: chatWindowUpdated.chat, + notification: chatWindowUpdated.notification, + }); + }); + + pushSocketNotifications.on(EVENTS.USER_FEEDS, feedItem => { + // Ignore push chat app for notification socket, since they are handled + // specifically on the chat socket. Can cause duplicate notification. + if (feedItem.payload.data.app.toLowerCase() === PUSH_CHAT_APP) { + return; + } + + // parse additional metadata if it is available + const partnerData = feedItem.payload.data.additionalMeta + ? parsePartnerMetadata(feedItem.payload.data.additionalMeta) + : undefined; + + // raise notification + setChatSnackbar({ + title: partnerData?.name || feedItem.payload.data.app, + body: + partnerData?.name && feedItem.payload.data.asub + ? feedItem.payload.data.asub + .replace(`${partnerData.name}:`, '') + .trim() + : feedItem.payload.data.asub || t('push.newNotification'), + imageUrl: + partnerData?.logoUri || + feedItem.payload.data.aimg || + feedItem.payload.data.icon, + }); + + // update notification window state + setAppIncomingNotification(feedItem.payload.data); + setChatWindowUpdated({ + notification: Date.now(), + chat: chatWindowUpdated.chat, + communities: chatWindowUpdated.communities, + }); + }); + } + + // wait for XMTP messages if initialized + void waitForXmtpMessages(address, async (data: DecodedMessage) => { + // check for spam and discard the message if necessary + if (await isAddressSpam(data.senderAddress)) { + return; + } + + // raise notification + setChatSnackbar({ + senderAddress: data.senderAddress, + topic: data.conversation.topic, + }); + setChatIncomingMessage(data); + setChatWindowUpdated({ + chat: Date.now(), + notification: chatWindowUpdated.notification, + communities: chatWindowUpdated.communities, + }); + }); + }; + + const onNewMessage = (senderAddress: string) => { + if ( + !address || + senderAddress.toLowerCase().includes(address.toLowerCase()) + ) { + // do not notify when the sender is the current user + return; + } + if (!isNotificationEnabledP2p) { + // do not notify when disabled + setIsNewMessage(true); + return; + } + setIsNewMessage(true); + setActiveTab(TabType.Chat); + setChatSnackbar(undefined); + enqueueSnackbar(t('push.incoming'), { + preventDuplicate: true, + content: (key, message) => ( + + ), + autoHideDuration: 6000, + }); + }; + + const onNewCommunityMessage = async ( + senderAddress: string, + chatId: string, + ) => { + if ( + !domain || + !address || + senderAddress.toLowerCase().includes(address.toLowerCase()) + ) { + // do not notify when the sender is the current user + return; + } + if (!isNotificationEnabledP2p) { + // do not notify when disabled + setIsNewMessage(true); + return; + } + + // check existing group chat communities + const badges = await getDomainBadges(domain, {withoutPartners: true}); + const badge = badges?.list?.find(b => b.groupChatId === chatId); + if (!badge) { + // no community matching group chat ID + return; + } + + // display community group chat notification + setIsNewMessage(true); + setActiveTab(TabType.Communities); + setChatSnackbar(undefined); + enqueueSnackbar(t('push.incoming'), { + preventDuplicate: true, + content: (key, message) => ( + { + setActiveCommunity(badge); + await handleChatClicked(); + }} + /> + ), + autoHideDuration: 6000, + }); + }; + + const onNewNotification = ( + name: string, + subject: string, + imageUrl: string, + ) => { + if (!isNotificationEnabledB2c) { + // do not notify when disabled + setIsNewMessage(true); + return; + } + setIsNewMessage(true); + setActiveTab(TabType.Notification); + setChatSnackbar(undefined); + enqueueSnackbar(subject ? subject : t('push.notification', {name}), { + preventDuplicate: true, + content: (key, message) => ( + + ), + autoHideDuration: 6000, + }); + }; + + const handleOpenChat = () => { + setIsNewMessage(false); + setChatOpen(false); + setChatWindowOpen(true); + }; + + const handleClosePush = () => { + setChatWindowOpen(false); + setActiveChat(undefined); + setActiveTab(undefined); + }; + + const handleCloseSetup = () => { + setSignatureInProgress(undefined); + setInitChatOptions(undefined); + setChatOpen(false); + setChatWalletConnected(false); + setConfigState(ConfigurationState.Initial); + }; + + const handleChatClicked = async (chatId?: string) => { + // close the push window if open and return + if (chatWindowOpen && !chatId && !initChatOptions) { + handleClosePush(); + return; + } + + // initialize the chat accounts and keys if they have not already + // been configured for this domain address + if (!domain || !address) { + setSignatureInProgress(MessagingSignatureType.NoPrimaryDomain); + } else if (!xmtpKey || initChatOptions) { + // start account setup for XMTP + void initChatAccounts(initChatOptions || {skipPush: true}); + } else { + // clear new message flag and set last read timestamp + setIsNewMessage(false); + + // set the active chat if provided + setActiveChat(chatId); + if (chatId) { + setActiveTab(undefined); + } + + // open the push chat window + setChatOpen(true); + handleOpenChat(); + } + }; + + const handleCommunityClicked = async (badgeCode: string) => { + // close the push window if open and return + if (chatWindowOpen && !badgeCode && !initChatOptions) { + handleClosePush(); + return; + } + + // initialize the chat accounts and keys if they have not already + // been configured for this domain address + if (!domain || !address) { + setSignatureInProgress(MessagingSignatureType.NoPrimaryDomain); + } else if (!pushKey || initChatOptions) { + // continue an existing setup, or start a new one for XMTP only + void initChatAccounts(initChatOptions || {skipPush: false}); + } else { + // clear new message flag and set last read timestamp + setIsNewMessage(false); + + // set the active chat if provided + const groupChatInfo = await joinBadgeGroupChat( + badgeCode, + address, + pushKey, + ); + if (groupChatInfo?.groupChatId) { + // accept the chat request for the user and change to the + // group conversation panel + await acceptGroupInvite(groupChatInfo.groupChatId, address, pushKey); + } + if (groupChatInfo) { + setActiveCommunity(groupChatInfo); + setActiveTab(TabType.Communities); + } + + // open the push chat window + setChatOpen(true); + handleOpenChat(); + } + }; + + const handleAccessWalletComplete = async ( + web3Dependencies?: Web3Dependencies, + ) => { + setWeb3Deps(web3Dependencies); + setWalletModalIsOpen(false); + }; + + return ( + <> + {label ? ( + + ) : ( + handleChatClicked()} + className={classes.messageButton} + data-testid={'header-chat-button'} + id="chat-button" + disabled={!messagingInitialized} + size={large ? 'large' : 'small'} + sx={{ + '&.Mui-disabled': inheritStyle + ? {} + : { + color: '#dddddd', + backgroundColor: 'rgba(128,128,128, 0.4)', + }, + }} + > + {!domain ? ( + + {messageConfigureIcon} + + ) : xmtpKey ? ( + + {isNewMessage ? messageUnreadIcon : messageReadyIcon} + + ) : messagingInitialized && !signatureInProgress ? ( + + {messageConfigureIcon} + + ) : ( + + {inheritStyle ? ( + messageReadyIcon + ) : ( + + )} + + )} + + )} + handleAccessWalletComplete(deps)} + open={walletModalIsOpen} + onClose={() => setWalletModalIsOpen(false)} + /> + setWalletModalIsOpen(true)} + /> + {address && xmtpKey && ( + <> + + initChatAccounts({ + skipXmtp: true, + skipPush: false, + }) + } + /> + {!disableSupportBubble && ( + + )} + + )} + + ); +}; diff --git a/server/components/Chat/hooks/useFetchNotification.ts b/server/components/Chat/hooks/useFetchNotification.ts new file mode 100644 index 00000000..04be1c64 --- /dev/null +++ b/server/components/Chat/hooks/useFetchNotification.ts @@ -0,0 +1,66 @@ +import * as PushAPI from '@pushprotocol/restapi'; +import {ENV} from '@pushprotocol/uiweb'; +import config from '@unstoppabledomains/config'; +import {useCallback, useState} from 'react'; + +import type {PushNotification} from '../types'; + +interface fetchNotification { + page: number; + limit: number; + spam?: boolean; +} + +const useFetchNotifications = (account: string) => { + const [error, setError] = useState(); + const [loading, setLoading] = useState(false); + + const fetchNotifications = useCallback( + async ({page, limit, spam = false}: fetchNotification) => { + setLoading(true); + try { + const rawData: PushNotification[] = await PushAPI.user.getFeeds({ + user: account, // user address in CAIP + raw: true, + page, + spam, + limit, + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + }); + return rawData.map(v => { + const d = v.payload.data; + if (d.additionalMeta) { + const partnerData = parsePartnerMetadata(d.additionalMeta); + d.icon = partnerData.logoUri || d.icon; + d.app = partnerData.name || d.app; + d.asub = partnerData.name + ? d.asub.replace(`${partnerData.name}:`, '').trim() + : d.asub; + } + return d; + }); + } catch (e) { + setLoading(false); + setError(String(e)); + return; + } finally { + setLoading(false); + } + }, + [account], + ); + + return {fetchNotifications, error, loading}; +}; + +export const parsePartnerMetadata = (data: string) => { + try { + const parsedMetadata = JSON.parse(data); + if (parsedMetadata?.partner) { + return parsedMetadata.partner; + } + } catch (e) {} + return undefined; +}; + +export default useFetchNotifications; diff --git a/server/components/Chat/hooks/useIsTabActive.ts b/server/components/Chat/hooks/useIsTabActive.ts new file mode 100644 index 00000000..cec8b16b --- /dev/null +++ b/server/components/Chat/hooks/useIsTabActive.ts @@ -0,0 +1,25 @@ +import {useEffect, useState} from 'react'; + +export const useIsTabActive = (documentElement = document) => { + const [documentVisible, setDocumentVisible] = useState( + documentElement.visibilityState, + ); + + useEffect(() => { + const handleVisibilityChange = () => + setDocumentVisible(documentElement.visibilityState); + + documentElement.addEventListener( + 'visibilitychange', + handleVisibilityChange, + ); + + return () => + documentElement.removeEventListener( + 'visibilitychange', + handleVisibilityChange, + ); + }, [documentElement]); + + return documentVisible === 'visible'; +}; diff --git a/server/components/Chat/hooks/useUnstoppableMessaging.tsx b/server/components/Chat/hooks/useUnstoppableMessaging.tsx new file mode 100644 index 00000000..70722db2 --- /dev/null +++ b/server/components/Chat/hooks/useUnstoppableMessaging.tsx @@ -0,0 +1,32 @@ +import {UnstoppableMessagingContext} from 'components/Chat/provider/UnstoppableMessagingProvider'; +import {useContext} from 'react'; + +const useUnstoppableMessaging = () => { + const { + openChat, + setOpenChat, + openCommunity, + setOpenCommunity, + isChatReady, + setIsChatReady, + chatUser, + setChatUser, + } = useContext(UnstoppableMessagingContext); + if (!setOpenChat || !setOpenCommunity || !setIsChatReady || !setChatUser) { + throw new Error( + 'Expected useUnstoppableMessaging to be called within ', + ); + } + return { + openChat, + setOpenChat, + openCommunity, + setOpenCommunity, + isChatReady, + setIsChatReady, + chatUser, + setChatUser, + }; +}; + +export default useUnstoppableMessaging; diff --git a/server/components/Chat/modal/ChatModal.tsx b/server/components/Chat/modal/ChatModal.tsx new file mode 100644 index 00000000..ad106245 --- /dev/null +++ b/server/components/Chat/modal/ChatModal.tsx @@ -0,0 +1,1035 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import AddCommentOutlinedIcon from '@mui/icons-material/AddCommentOutlined'; +import GroupsIcon from '@mui/icons-material/Groups'; +import KeyboardDoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown'; +import NotificationsActiveOutlinedIcon from '@mui/icons-material/NotificationsActiveOutlined'; +import SettingsOutlinedIcon from '@mui/icons-material/SettingsOutlined'; +import TabContext from '@mui/lab/TabContext'; +import TabList from '@mui/lab/TabList'; +import TabPanel from '@mui/lab/TabPanel'; +import type {BadgeProps} from '@mui/material/Badge'; +import Badge from '@mui/material/Badge'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import CardHeader from '@mui/material/CardHeader'; +import CircularProgress from '@mui/material/CircularProgress'; +import Tab from '@mui/material/Tab'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import {styled} from '@mui/material/styles'; +import type {IMessageIPFS} from '@pushprotocol/restapi'; +import type { + DecodedMessage, + Conversation as XmtpConversation, +} from '@xmtp/xmtp-js'; +import {ContentTypeText} from '@xmtp/xmtp-js'; +import {useFeatureFlags} from 'actions/featureFlagActions'; +import { + getDomainSignatureExpiryKey, + getDomainSignatureValueKey, +} from 'components/Wallet/ProfileManager'; +import useTranslationContext from 'lib/i18n'; +import type {SerializedCryptoWalletBadge} from 'lib/types/badge'; +import type {SerializedUserDomainProfileData} from 'lib/types/domain'; +import {DomainProfileKeys} from 'lib/types/domain'; +import type {Web3Dependencies} from 'lib/types/web3'; +import React, {useEffect, useState} from 'react'; +import InfiniteScroll from 'react-infinite-scroll-component'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import useFetchNotifications from '../hooks/useFetchNotification'; +import {registerClientTopics} from '../protocol/registration'; +import {getAddressMetadata} from '../protocol/resolution'; +import type {ConversationMeta} from '../protocol/xmtp'; +import {getConversation, getConversations} from '../protocol/xmtp'; +import type {AddressResolution, PayloadData} from '../types'; +import {TabType, getCaip10Address} from '../types'; +import Search from './Search'; +import Conversation from './dm/Conversation'; +import ConversationPreview from './dm/ConversationPreview'; +import ConversationStart from './dm/ConversationStart'; +import Community from './group/Community'; +import CommunityList from './group/CommunityList'; +import NotificationPreview from './notification/NotificationPreview'; + +const useStyles = makeStyles()((theme: Theme) => ({ + chatModalContainer: { + position: 'fixed', + bottom: '15px', + right: '10px', + width: '450px', + height: '600px', + margin: theme.spacing(1), + zIndex: 100, + [theme.breakpoints.down('sm')]: { + width: '100%', + height: '100%', + bottom: '0px', + right: '0px', + margin: 0, + }, + }, + chatModalContentContainer: { + padding: theme.spacing(1), + border: 'none', + }, + loadingContainer: { + display: 'flex', + flexDirection: 'column', + height: '100%', + width: '100%', + alignItems: 'center', + textAlign: 'center', + justifyContent: 'center', + marginTop: theme.spacing(10), + color: theme.palette.neutralShades[400], + }, + loadingText: { + marginTop: theme.spacing(1), + color: 'inherit', + }, + loadingSpinner: { + color: 'inherit', + }, + headerActionContainer: { + display: 'flex', + color: theme.palette.neutralShades[600], + }, + newChatIcon: { + marginRight: theme.spacing(0.7), + color: theme.palette.primary.main, + transform: 'scaleX(-1)', + }, + headerActionIcon: { + marginLeft: theme.spacing(1), + cursor: 'pointer', + }, + tabHeaderContainer: { + marginTop: theme.spacing(-3), + width: '100%', + }, + tabContentContainer: { + width: '100%', + display: 'flex', + flexDirection: 'column', + overflowY: 'auto', + overflowX: 'hidden', + overscrollBehavior: 'contain', + height: '425px', + [theme.breakpoints.down('sm')]: { + height: 'calc(100vh - 200px)', + }, + }, + tabList: { + marginRight: theme.spacing(-4), + }, + tabContentItem: { + marginLeft: theme.spacing(-3), + marginRight: theme.spacing(-3), + }, + searchContainer: { + marginTop: theme.spacing(2), + }, + infiniteScroll: { + margin: 0, + padding: 0, + }, + emptyContainer: { + display: 'flex', + flexDirection: 'column', + height: '100%', + width: '100%', + alignItems: 'center', + textAlign: 'center', + justifyContent: 'center', + marginTop: theme.spacing(5), + color: theme.palette.neutralShades[400], + }, + emptyIcon: { + width: 100, + height: 100, + }, + configureButton: { + marginTop: theme.spacing(2), + }, + viewRequestsButton: { + marginTop: theme.spacing(-1), + marginBottom: theme.spacing(3), + }, +})); + +const StyledTabBadge = styled(Badge)(({theme}) => ({ + '& .MuiBadge-badge': { + right: -1, + }, +})); + +export type ChatModalProps = { + pushAccount: string; + pushKey?: string; + xmtpAddress: string; + xmtpKey: Uint8Array; + open: boolean; + activeChat?: string; + activeCommunity?: SerializedCryptoWalletBadge; + activeTab?: TabType; + incomingGroup?: IMessageIPFS; + incomingMessage?: DecodedMessage; + incomingNotification?: PayloadData; + tabRefresh: Record; + blockedTopics: string[]; + setBlockedTopics: (v: string[]) => void; + setWeb3Deps: (value: Web3Dependencies | undefined) => void; + onClose(): void; + onInitPushAccount(): void; + setActiveChat: (v?: string) => void; + setActiveCommunity: (v?: SerializedCryptoWalletBadge) => void; +}; + +export const ChatModal: React.FC = ({ + pushAccount, + pushKey, + xmtpAddress, + xmtpKey, + open, + activeChat, + activeCommunity, + activeTab, + incomingGroup, + incomingMessage, + incomingNotification, + tabRefresh, + blockedTopics, + setBlockedTopics, + setWeb3Deps, + onClose, + onInitPushAccount, + setActiveChat, + setActiveCommunity, +}) => { + const {cx, classes} = useStyles(); + const [t] = useTranslationContext(); + const {data: featureFlags} = useFeatureFlags(); + const [loadingText, setLoadingText] = useState(); + const [lastRefresh, setLastRefresh] = useState>({ + chat: 0, + communities: 0, + notification: 0, + }); + const [tabUnreadDot, setTabUnreadDot] = useState>({ + chat: false, + communities: false, + notification: false, + }); + const [searchValue, setSearchValue] = useState(); + const [tabValue, setTabValue] = useState(TabType.Chat); + const [acceptedTopics, setAcceptedTopics] = useState([]); + const [activeChatHandled, setActiveChatHandled] = useState(false); + const [conversationSearch, setConversationSearch] = useState(false); + const [conversationPeer, setConversationPeer] = useState(); + const [conversationMetadata, setConversationMetadata] = + useState(); + const [conversations, setConversations] = useState(); + const [conversationRequestView, setConversationRequestView] = + useState(); + const [notifications, setNotifications] = useState([]); + const [notificationsAvailable, setNotificationsAvailable] = useState(true); + const [notificationsPage, setNotificationsPage] = useState(1); + const [domain, setDomain] = useState(); + const [userProfile, setUserProfile] = + useState(); + const {fetchNotifications, loading: notificationsLoading} = + useFetchNotifications(getCaip10Address(pushAccount)); + + useEffect(() => { + if (open) { + // browser settings check + void checkBrowserSettings(); + + // tab handling + if (tabValue === TabType.Chat) { + if (conversationSearch) { + return; + } + if (activeChat && activeChatHandled) { + return; + } + if (activeChat) { + setActiveChatHandled(true); + void handleOpenChatFromName(activeChat); + } else { + void loadConversations(false); + } + } else if (tabValue === TabType.Notification) { + void loadNotifications(true); + } + } else if (conversations === undefined) { + // preload conversations to improve perceived performance + void loadConversations(false); + } + }, [activeChat, activeChatHandled, open, tabValue]); + + useEffect(() => { + if (!incomingMessage) { + return; + } + void loadNewMessage(incomingMessage); + }, [incomingMessage]); + + useEffect(() => { + if (!incomingNotification) { + return; + } + void loadNewNotification(incomingNotification); + }, [incomingNotification]); + + useEffect(() => { + if (!incomingGroup) { + return; + } + void loadNewCommunityMessage(); + }, [incomingGroup]); + + useEffect(() => { + if (!activeTab) { + return; + } + setTabValue(activeTab); + setTabUnreadDot({ + ...tabUnreadDot, + [activeTab]: false, + }); + }, [activeTab]); + + useEffect(() => { + if (getRequestCount() === 0) { + setConversationRequestView(false); + } + }, [acceptedTopics, blockedTopics]); + + const checkBrowserSettings = async () => { + if ('Notification' in window) { + if (Notification.permission !== 'granted') { + const result = await Notification.requestPermission(); + } + } + }; + + const loadConversations = async (forceRefresh?: boolean) => { + if ( + xmtpAddress && + xmtpKey && + (forceRefresh || !conversations || conversations.length === 0) + ) { + const isAlreadyLoading = loadingText !== undefined; + if (!isAlreadyLoading) { + setLoadingText(t('push.loadingConversations')); + } + try { + // load blocked topics and user data from profile service + await Promise.all([loadBlockedTopics(), loadUserProfile()]); + + // load conversations from XMTP + const localConversations = await getConversations(xmtpAddress); + setConversations(localConversations); + setLastRefresh({ + chat: Date.now(), + communities: lastRefresh.communities, + notification: lastRefresh.notification, + }); + return localConversations; + } catch (e) { + console.log('error loading conversations', String(e)); + } finally { + if (!isAlreadyLoading) { + setLoadingText(undefined); + } + } + } + return; + }; + + const loadNotifications = async (checkLastRefresh: boolean) => { + if ( + checkLastRefresh && + tabRefresh[TabType.Notification] <= lastRefresh[TabType.Notification] + ) { + // skip refresh if enforcing the check + return; + } + const pageSize = 10; + const data = + (await fetchNotifications({ + page: notificationsPage, + limit: pageSize, + spam: false, + })) || []; + setNotificationsAvailable(data.length >= pageSize); + setNotificationsPage(notificationsPage + 1); + setNotifications([...notifications, ...data]); + setLastRefresh({ + notification: tabRefresh[TabType.Notification], + communities: lastRefresh.communities, + chat: lastRefresh.chat, + }); + }; + + const loadBlockedTopics = async () => { + try { + // request the domain's blocked topics from profile API + const authDomain = localStorage.getItem(DomainProfileKeys.AuthDomain); + const response = await fetch( + `${config.PROFILE.HOST_URL}/user/${authDomain}/notifications/preferences`, + ); + const responseJSON = await response.json(); + + // set blocked topics from result + if (responseJSON?.blocked_topics) { + setBlockedTopics(responseJSON.blocked_topics); + } + if (responseJSON?.accepted_topics) { + setAcceptedTopics(responseJSON.accepted_topics); + } + } catch (e) { + console.log('unable to load blocked topics', String(e)); + } + }; + + // loadUserProfile authenticates with user token to retrieve private data about the + // user such as user-specific storage API key + const loadUserProfile = async () => { + try { + // retrieve domain being used for messaging + const authDomain = localStorage.getItem(DomainProfileKeys.AuthDomain); + if (authDomain) { + setDomain(authDomain); + } + + // retrieve optional signature data + const authExpiry = localStorage.getItem( + getDomainSignatureExpiryKey(authDomain!), + ); + const authSignature = localStorage.getItem( + getDomainSignatureValueKey(authDomain!), + ); + + // request the domain's user data from profile API if signature is available + if (authDomain && authExpiry && authSignature) { + const response = await fetch( + `${config.PROFILE.HOST_URL}/user/${authDomain}?fields=profile`, + { + mode: 'cors', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'x-auth-domain': authDomain, + 'x-auth-expires': authExpiry, + 'x-auth-signature': authSignature, + }, + }, + ); + + // set user profile data from result + const responseJSON: SerializedUserDomainProfileData = + await response.json(); + if (responseJSON?.storage) { + setUserProfile(responseJSON); + } + } + } catch (e) { + console.log('unable to load user profile', String(e)); + } + }; + + const loadNewNotification = async (msg: PayloadData) => { + // load all notifications for the first time + if (notifications.length === 0) { + void loadNotifications(false); + } + // insert the new notification + else { + setNotifications([msg, ...notifications]); + setLastRefresh({ + notification: Date.now(), + communities: lastRefresh.communities, + chat: lastRefresh.chat, + }); + } + + // set notification dot if needed + if (tabValue !== TabType.Notification) { + setTabUnreadDot({ + ...tabUnreadDot, + notification: true, + }); + } + }; + + const loadNewCommunityMessage = () => { + setLastRefresh({ + notification: lastRefresh.notification, + chat: lastRefresh.chat, + communities: Date.now(), + }); + + // set notification dot if needed + if (tabValue !== TabType.Communities) { + setTabUnreadDot({ + ...tabUnreadDot, + communities: true, + }); + } + }; + + const loadNewMessage = async (msg: DecodedMessage) => { + // retrieve the existing conversations or attempt to get a fresh list + const localConversations = + conversations && conversations.length > 0 + ? conversations + : await loadConversations(); + + // find an existing conversation and update it in the timeline + const conversationIndex = localConversations?.findIndex( + item => + item.conversation.topic.toLowerCase() === + msg.conversation.topic.toLowerCase(), + ); + + // manage timeline depending on state + if ( + localConversations && + conversationIndex !== undefined && + conversationIndex >= 0 + ) { + // update the existing entry + localConversations[conversationIndex].preview = getMessagePreview(msg); + localConversations[conversationIndex].timestamp = msg.sent.getTime(); + + // resort the timeline + setConversations([ + ...localConversations.sort((a, b): number => { + return b.timestamp - a.timestamp; + }), + ]); + } + // insert a new conversation into the existing timeline + else if (localConversations) { + // create new conversation + const newConversation: ConversationMeta = { + conversation: msg.conversation, + preview: getMessagePreview(msg), + timestamp: msg.sent.getTime(), + visible: true, + }; + + // insert and resort the timeline + setConversations([ + newConversation, + ...localConversations.sort((a, b): number => { + return b.timestamp - a.timestamp; + }), + ]); + + // associate the new conversation with the wallet address + await registerClientTopics(msg.conversation.clientAddress, [ + { + topic: msg.conversation.topic, + peerAddress: msg.conversation.peerAddress, + }, + ]); + } + // initialize a new timeline + else { + // create new conversation + const newConversation: ConversationMeta = { + conversation: msg.conversation, + preview: getMessagePreview(msg), + timestamp: msg.sent.getTime(), + visible: true, + }; + + // initialize the timeline + setConversations([newConversation]); + + // associate the new conversation with the wallet address + await registerClientTopics(msg.conversation.clientAddress, [ + { + topic: msg.conversation.topic, + peerAddress: msg.conversation.peerAddress, + }, + ]); + } + + // set notification dot if needed + if (tabValue !== TabType.Chat) { + setTabUnreadDot({ + ...tabUnreadDot, + chat: true, + }); + } + }; + + const getMessagePreview = (msg: DecodedMessage): string => { + return `${ + msg.senderAddress.toLowerCase() === + msg.conversation.clientAddress.toLowerCase() + ? `${t('common.you')}: ` + : '' + }${ + msg.contentType.sameAs(ContentTypeText) + ? msg.content + : t('push.attachment') + }`; + }; + + const handleNewChat = () => { + setConversationSearch(true); + }; + + const handleSettingsClick = async () => { + window.location.href = `${config.UNSTOPPABLE_WEBSITE_URL}/manage?domain=${domain}&page=web3Messaging`; + }; + + const handleOpenChatFromName = async (name: string) => { + setLoadingText(t('push.loadingUser', {user: name})); + try { + const peer = await getAddressMetadata(name); + if (peer) { + return await handleOpenChatFromAddress(peer); + } + } catch (e) { + console.log('error opening chat for user', String(e)); + } finally { + setLoadingText(undefined); + } + }; + + const handleOpenChatFromAddress = async (peer: AddressResolution) => { + try { + // open chat from already listed conversation records + const localConversations = + conversations && conversations.length > 0 + ? conversations + : await loadConversations(); + if (localConversations) { + const matchingConversation = localConversations.filter( + c => + c.conversation.peerAddress.toLowerCase() === + peer.address.toLowerCase(), + ); + if (matchingConversation.length > 0) { + handleOpenChat(matchingConversation[0].conversation); + return; + } + } + + // open the chat using direct lookup + const conversationLower = await getConversation( + xmtpAddress, + peer.address.toLowerCase(), + ); + if (conversationLower) { + try { + const conversationNormalized = await getConversation( + xmtpAddress, + conversationLower.peerAddress, + ); + if (conversationNormalized) { + handleOpenChat(conversationNormalized); + } + } catch (e) { + handleOpenChat(conversationLower); + } + } + } catch (e) { + console.log('error opening chat from address', String(e)); + } finally { + setConversationMetadata(peer); + setLoadingText(undefined); + } + }; + + const handleOpenChat = (conversation: XmtpConversation) => { + if (tabValue !== TabType.Chat) { + setTabValue(TabType.Chat); + } + setConversationPeer(conversation); + handleCloseSearch(); + }; + + const handleCloseSearch = () => { + setSearchValue(undefined); + setConversationSearch(false); + }; + + const handleCloseChat = () => { + handleCloseSearch(); + setConversationPeer(undefined); + setConversationMetadata(undefined); + setActiveChat(undefined); + setActiveChatHandled(false); + setActiveCommunity(undefined); + }; + + const handleConversationMessage = ( + msg: DecodedMessage, + conversation?: XmtpConversation, + ) => { + if (!conversation || !conversations) return; + const conversationIndex = conversations.findIndex( + item => + item.conversation.topic.toLowerCase() === + conversation.topic.toLowerCase(), + ); + if (conversationIndex >= 0 && conversations[conversationIndex]) { + conversations[conversationIndex].preview = getMessagePreview(msg); + conversations[conversationIndex].timestamp = msg.sent.getTime(); + setConversations([ + ...conversations.sort((a, b): number => { + return b.timestamp - a.timestamp; + }), + ]); + } else { + setConversations([ + { + conversation, + preview: getMessagePreview(msg), + timestamp: msg.sent.getTime(), + visible: true, + }, + ...conversations.sort((a, b): number => { + return b.timestamp - a.timestamp; + }), + ]); + } + }; + + const handleTabChange = (event: React.SyntheticEvent, newValue: string) => { + const tv = newValue as TabType; + setTabValue(tv); + setTabUnreadDot({ + ...tabUnreadDot, + [tv]: false, + }); + }; + + const handleSearch = (v: string) => { + setSearchValue(v); + }; + + const handleSearchCallback = ( + conversation: ConversationMeta, + visible: boolean, + ) => { + // set conversation visibility + conversation.visible = visible; + + // if no conversations visible, switch to search tab + if ( + conversations?.filter( + c => acceptedTopics.includes(c.conversation.topic) && c.visible, + ).length === 0 + ) { + setConversationSearch(true); + } + }; + + const getRequestCount = () => { + return ( + conversations?.filter( + c => + !acceptedTopics.includes(c.conversation.topic) && + !blockedTopics.includes(c.conversation.topic), + ).length || 0 + ); + }; + + const PushProtocolOnboarding: React.FC = () => { + return ( + + {tabValue === TabType.Notification ? ( + + ) : ( + + )} + + {pushKey + ? tabValue === TabType.Notification + ? t('push.emptyNotifications') + : t('push.communitiesCollect') + : tabValue === TabType.Notification + ? t('push.notificationsNotReady') + : t('push.communitiesNotReady')} + + {!pushKey && ( + + )} + + ); + }; + + return ( + + {conversationSearch ? ( + + ) : conversationPeer || conversationMetadata ? ( + + handleConversationMessage(msg, conversationPeer) + } + onBack={handleCloseChat} + onClose={onClose} + /> + ) : pushAccount && pushKey && activeCommunity?.groupChatId ? ( + + ) : ( + + + + + + + + + + + + + } + /> + + + + + + {t('push.chat')} + + } + value={TabType.Chat} + /> + {featureFlags.variations + ?.ecommerceServiceUsersEnableChatCommunity && ( + + {t('push.communities')} + + } + value={TabType.Communities} + /> + )} + + {featureFlags.variations + ?.ecommerceServiceUsersEnableChatCommunity + ? t('push.notificationsShort') + : t('push.notifications')} + + } + value={TabType.Notification} + /> + + + + + + + + {loadingText ? ( + + + + {loadingText} + + + ) : ( + + {!conversationRequestView && getRequestCount() > 0 && ( + + )} + {conversationRequestView && ( + + )} + {conversations + ?.filter(c => + conversationRequestView + ? !acceptedTopics.includes(c.conversation.topic) && + !blockedTopics.includes(c.conversation.topic) + : acceptedTopics.includes(c.conversation.topic), + ) + .map(c => ( + + handleSearchCallback(c, visible) + } + searchTerm={searchValue} + acceptedTopics={acceptedTopics} + conversation={c} + /> + ))} + + )} + + + {pushAccount && pushKey && domain ? ( + + ) : ( + + )} + + + {pushKey && + notificationsLoading && + notificationsPage === 1 ? ( + + + + {t('push.loadingNotifications')} + + + ) : pushKey && notifications?.length > 0 ? ( + loadNotifications(false)} + dataLength={notifications.length} + loader={
} + scrollThreshold={0.9} + > + {notifications.map(notification => ( + + ))} +
+ ) : ( + + )} +
+
+
+
+
+ )} +
+ ); +}; + +export default ChatModal; diff --git a/server/components/Chat/modal/LinkWarningModal.tsx b/server/components/Chat/modal/LinkWarningModal.tsx new file mode 100644 index 00000000..2d0cbadb --- /dev/null +++ b/server/components/Chat/modal/LinkWarningModal.tsx @@ -0,0 +1,153 @@ +import BlockIcon from '@mui/icons-material/Block'; +import OpenInNewIcon from '@mui/icons-material/OpenInNew'; +import WarningIcon from '@mui/icons-material/Warning'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Dialog from '@mui/material/Dialog'; +import DialogContent from '@mui/material/DialogContent'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import useTranslationContext from 'lib/i18n'; +import React from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + container: { + '& .MuiPaper-root': { + minWidth: '420px', + maxWidth: '420px', + alignItems: 'center', + [theme.breakpoints.down('md')]: { + minWidth: '100%', + maxWidth: '100%', + overflowX: 'hidden', + }, + }, + '& .MuiDialogContent-root': { + padding: 0, + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + [theme.breakpoints.down('md')]: { + padding: 0, + }, + }, + }, + warningIcon: { + color: theme.palette.warning.main, + marginBottom: theme.spacing(2), + width: '85px', + height: '85px', + }, + warningText: { + marginBottom: theme.spacing(3), + color: theme.palette.neutralShades[600], + textAlign: 'center', + }, + urlText: { + color: theme.palette.primary.main, + marginBottom: theme.spacing(2), + }, + contentContainer: { + margin: theme.spacing(3), + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + }, + title: { + marginBottom: theme.spacing(3), + }, + actionButton: { + width: '100%', + marginTop: theme.spacing(2), + }, + openButton: { + color: 'black', + }, + cancelBlockButton: { + color: 'white', + }, + cancelButton: { + marginTop: theme.spacing(1), + marginBottom: theme.spacing(-1), + backgroundColor: 'transparent', + '&.MuiButtonBase-root:hover': { + backgroundColor: 'transparent', + }, + }, +})); + +export type LinkWarningModalProps = { + url?: string; + onBlockTopic: () => void; + onClose: () => void; +}; + +export const LinkWarningModal: React.FC = ({ + url, + onBlockTopic, + onClose, +}) => { + const [t] = useTranslationContext(); + const {cx, classes} = useStyles(); + + const handleOpenLink = () => { + window.open(url, '_blank'); + }; + + return ( + + + + + + {t('common.warning')} + + + {t('push.linkWarning')} + + + {url} + + + + + + + + ); +}; + +export default LinkWarningModal; diff --git a/server/components/Chat/modal/Search.tsx b/server/components/Chat/modal/Search.tsx new file mode 100644 index 00000000..1683283a --- /dev/null +++ b/server/components/Chat/modal/Search.tsx @@ -0,0 +1,133 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import SearchIcon from '@mui/icons-material/Search'; +import Box from '@mui/material/Box'; +import InputBase from '@mui/material/InputBase'; +import type {Theme} from '@mui/material/styles'; +import useTranslationContext from 'lib/i18n'; +import React, {useEffect, useRef, useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import {TabType} from '../types'; + +const useStyles = makeStyles<{searchFocus: boolean}>()( + (theme: Theme, {searchFocus}) => ({ + searchContainer: { + display: 'flex', + margin: theme.spacing(0), + width: '100%', + }, + searchBase: { + border: `1px solid ${ + searchFocus + ? theme.palette.neutralShades[500] + : theme.palette.neutralShades[100] + }`, + borderRadius: theme.shape.borderRadius, + paddingLeft: 12, + backgroundColor: theme.palette.neutralShades[100], + }, + searchInput: { + fontSize: 16, + color: theme.palette.neutralShades[500], + '&::-webkit-search-cancel-button': { + WebkitAppearance: 'none', + }, + '&::placeholder': {color: theme.palette.neutralShades[500], opacity: 1}, + '&::-webkit-input-placeholder': { + color: theme.palette.neutralShades[400], + opacity: 1, + }, + }, + searchIcon: { + color: theme.palette.neutralShades[500], + margin: theme.spacing(1), + width: 24, + height: 24, + }, + }), +); + +export type SearchProps = { + handleSearch: (searchTerm: string) => void; + initialValue?: string; + tab: TabType; +}; + +export const Search: React.FC = ({ + handleSearch, + initialValue, + tab, +}) => { + const [t] = useTranslationContext(); + const [searchTerm, setSearchTerm] = useState(initialValue); + const [searchFocus, setSearchFocus] = useState(false); + const searchBarRef = useRef(null); + const debounceTimer = useRef | null>(null); + const {classes} = useStyles({searchFocus}); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + // Check if the clicked target is outside of the search bar and results + if ( + searchBarRef.current && + !searchBarRef.current.contains(event.target as Node) + ) { + setSearchFocus(false); + } + }; + + document.addEventListener('mousedown', handleClickOutside); + + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [searchBarRef]); + + useEffect(() => { + setSearchTerm(initialValue); + handleSearch(initialValue || ''); + }, [tab]); + + const handleSearchChange: React.ChangeEventHandler< + HTMLInputElement + > = event => { + setSearchTerm(event.target.value); + if (debounceTimer.current) { + clearTimeout(debounceTimer.current); + } + debounceTimer.current = setTimeout(() => { + handleSearch(event.target.value); + }, 300); + }; + + return ( + + input?.focus()} + inputProps={{ + className: classes.searchInput, + }} + type="search" + autoComplete="off" + autoCorrect="off" + value={searchTerm} + placeholder={ + tab === TabType.Chat + ? t('push.searchChat') + : tab === TabType.Communities + ? t('push.searchCommunities') + : t('push.searchNotification') + } + onChange={handleSearchChange} + onFocus={() => setSearchFocus(true)} + endAdornment={} + /> + + ); +}; + +export default Search; diff --git a/server/components/Chat/modal/SetupModal.tsx b/server/components/Chat/modal/SetupModal.tsx new file mode 100644 index 00000000..c138f1c9 --- /dev/null +++ b/server/components/Chat/modal/SetupModal.tsx @@ -0,0 +1,339 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import CheckCircleOutlineOutlinedIcon from '@mui/icons-material/CheckCircleOutlineOutlined'; +import ForumOutlinedIcon from '@mui/icons-material/ForumOutlined'; +import LocalGasStationIcon from '@mui/icons-material/LocalGasStationOutlined'; +import LockIcon from '@mui/icons-material/LockOutlined'; +import NotificationsActiveOutlinedIcon from '@mui/icons-material/NotificationsActiveOutlined'; +import SettingsSuggestOutlinedIcon from '@mui/icons-material/SettingsSuggestOutlined'; +import SyncIcon from '@mui/icons-material/Sync'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import CircularProgress from '@mui/material/CircularProgress'; +import Dialog from '@mui/material/Dialog'; +import DialogContent from '@mui/material/DialogContent'; +import Divider from '@mui/material/Divider'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import Link from 'components/Link'; +import useTranslationContext from 'lib/i18n'; +import React from 'react'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import {ConfigurationState} from '../types'; + +const useStyles = makeStyles()((theme: Theme) => ({ + container: { + margin: 'auto', + verticalAlign: 'center', + maxWidth: '500px', + }, + link: { + fontSize: '13px', + }, + headerContainer: { + display: 'flex', + flexDirection: 'column', + alignContent: 'center', + alignItems: 'center', + width: '400px', + [theme.breakpoints.down('sm')]: { + width: '300px', + }, + }, + headerImage: { + marginBottom: theme.spacing(1), + width: '300px', + }, + contentContainer: { + height: '250px', + }, + buttonContainer: { + display: 'flex', + flexDirection: 'column', + marginTop: theme.spacing(4), + alignContent: 'center', + alignItems: 'center', + }, + loadingContainer: { + display: 'flex', + flexDirection: 'column', + marginTop: theme.spacing(-3), + justifyContent: 'center', + alignContent: 'center', + alignItems: 'center', + height: '100%', + }, + divider: { + marginTop: theme.spacing(3), + }, + infoContainer: { + display: 'flex', + verticalAlign: 'center', + alignContent: 'center', + alignItems: 'center', + marginTop: theme.spacing(3), + }, + infoTitle: { + color: theme.palette.neutralShades[800], + fontSize: '16px', + marginBottom: theme.spacing(0.25), + }, + infoBody: { + color: theme.palette.neutralShades[500], + }, + icon: { + color: theme.palette.neutralShades[800], + marginRight: theme.spacing(2), + width: '35px', + height: '35px', + }, + successText: { + textAlign: 'center', + marginBottom: theme.spacing(2), + }, + successIcon: { + color: theme.palette.success.main, + marginTop: theme.spacing(5), + marginBottom: theme.spacing(1), + width: '65px', + height: '65px', + }, + bold: { + color: theme.palette.neutralShades[600], + fontWeight: 600, + }, +})); + +export type SetupModalProps = { + open: boolean; + domain?: string; + isNewUser: boolean; + isNewNotification: boolean; + disabled: boolean; + configState: ConfigurationState; + onClose(): void; + onChat(): void; + onConfirm(): void; +}; + +export const SetupModal: React.FC = ({ + onClose, + onChat, + onConfirm, + disabled, + open, + domain, + configState, + isNewUser, + isNewNotification, +}) => { + const [t] = useTranslationContext(); + const {classes, cx} = useStyles(); + + const handleOpenChat = () => { + onClose(); + onChat(); + }; + + const onChoosePrimary = () => { + window.location.href = `${config.UNSTOPPABLE_WEBSITE_URL}/domains`; + }; + + return ( + onClose()}> + + + + + {domain} + + {t('push.setup.title')} + + + + {configState === ConfigurationState.Initial ? ( + <> + + + + + {t('push.setup.isPushSecure')} + + + {t('push.setup.isPushSecureDescription')}{' '} + + + + + + + + {t('push.setup.isGasRequired')} + + + {t('push.setup.isGasRequiredDescription')}{' '} + + + + + + + + {t('push.setup.isItPortable')} + + + {t('push.setup.isItPortableDescription')}{' '} + + + + + ) : configState === ConfigurationState.RegisterXmtp ? ( + + + + + {t('push.setup.chat')} + + + {t('push.setup.chatDescription')}{' '} + + + + ) : configState === ConfigurationState.RegisterPush ? ( + + + + + {t('push.setup.notifications')} + + + {t('push.setup.notificationsDescription')}{' '} + + + + ) : ( + configState === ConfigurationState.QuerySubscriptions && ( + + + + + {t('push.setup.subscriptions')} + + + {t('push.setup.subscriptionsDescription')}{' '} + + + + ) + )} + {disabled && configState !== ConfigurationState.Complete && ( + + + + )} + {configState === ConfigurationState.Complete && ( + + + + {t('push.setup.success')} + + + {t('push.setup.successDescription')} + + + )} + + + {configState === ConfigurationState.Complete ? ( + + ) : domain ? ( + + ) : ( + + )} + + {t('push.setup.poweredBy')}{' '} + + Push Protocol + + {' & '} + + XMTP + + + + + + ); +}; + +export default SetupModal; diff --git a/server/components/Chat/modal/dm/Conversation.tsx b/server/components/Chat/modal/dm/Conversation.tsx new file mode 100644 index 00000000..0224edaa --- /dev/null +++ b/server/components/Chat/modal/dm/Conversation.tsx @@ -0,0 +1,473 @@ +import ArrowBackOutlinedIcon from '@mui/icons-material/ArrowBackOutlined'; +import BlockIcon from '@mui/icons-material/Block'; +import BlockOutlinedIcon from '@mui/icons-material/BlockOutlined'; +import CloseOutlinedIcon from '@mui/icons-material/CloseOutlined'; +import CloudOffIcon from '@mui/icons-material/CloudOff'; +import ForumOutlinedIcon from '@mui/icons-material/ForumOutlined'; +import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined'; +import MoreVertOutlinedIcon from '@mui/icons-material/MoreVertOutlined'; +import Avatar from '@mui/material/Avatar'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import CardHeader from '@mui/material/CardHeader'; +import CircularProgress from '@mui/material/CircularProgress'; +import IconButton from '@mui/material/IconButton'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import Menu from '@mui/material/Menu'; +import MenuItem from '@mui/material/MenuItem'; +import {styled} from '@mui/material/styles'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import config from '@unstoppabledomains/config'; +import type { + Conversation as XmtpConversation, + DecodedMessage, +} from '@xmtp/xmtp-js'; +import {SortDirection} from '@xmtp/xmtp-js'; +import useTranslationContext from 'lib/i18n'; +import {DomainProfileKeys} from 'lib/types/domain'; +import type {Web3Dependencies} from 'lib/types/web3'; +import type {MouseEvent} from 'react'; +import React, {useEffect, useState} from 'react'; +import InfiniteScroll from 'react-infinite-scroll-component'; +import truncateEthAddress from 'truncate-eth-address'; + +import {registerClientTopics} from '../../protocol/registration'; +import {getAddressMetadata} from '../../protocol/resolution'; +import {waitForXmtpMessages} from '../../protocol/xmtp'; +import type {AddressResolution} from '../../types'; +import {useConversationStyles} from '../styles'; +import ConversationBubble from './ConversationBubble'; +import Compose from './ConversationCompose'; + +const CardContentNoPadding = styled(CardContent)(` + padding: 0; + &:last-child { + padding-bottom: 0; + } +`); + +export type ConversationProps = { + conversation?: XmtpConversation; + metadata?: AddressResolution; + acceptedTopics: string[]; + blockedTopics: string[]; + storageApiKey?: string; + setAcceptedTopics: (v: string[]) => void; + setBlockedTopics: (v: string[]) => void; + setWeb3Deps: (value: Web3Dependencies | undefined) => void; + onNewMessage: (msg: DecodedMessage) => void; + onBack: () => void; + onClose: () => void; +}; + +const PAGE_SIZE = 10; + +export const Conversation: React.FC = ({ + conversation, + metadata, + acceptedTopics, + blockedTopics, + storageApiKey, + setAcceptedTopics, + setBlockedTopics, + setWeb3Deps, + onNewMessage, + onBack, + onClose, +}) => { + const [t] = useTranslationContext(); + const [isLoading, setIsLoading] = useState(true); + const [anchorEl, setAnchorEl] = useState(null); + const [hasMoreMessages, setHasMoreMessages] = useState(true); + const [xmtpMessages, setXmtpMessages] = useState([]); + const [incomingMessage, setIncomingMessage] = useState(); + const [avatarLink, setAvatarLink] = useState(); + const [displayName, setDisplayName] = useState(); + const [peerAddress, setPeerAddress] = useState(); + const [authDomain, setAuthDomain] = useState(); + const [isChatRequest, setIsChatRequest] = useState(); + const {classes} = useConversationStyles({ + isChatRequest, + }); + + useEffect(() => { + if (!conversation && !metadata) { + return; + } + setAuthDomain(localStorage.getItem(DomainProfileKeys.AuthDomain)); + void loadAddressData(); + void loadConversation(); + }, [conversation, metadata]); + + useEffect(() => { + if (!incomingMessage) { + return; + } + setXmtpMessages([incomingMessage, ...xmtpMessages]); + onNewMessage(incomingMessage); + }, [incomingMessage]); + + const loadAddressData = async () => { + const address = conversation?.peerAddress || metadata?.address; + if (address) { + const addressData = + metadata?.name && metadata?.avatarUrl + ? metadata + : await getAddressMetadata(address); + if (addressData?.name) setDisplayName(addressData.name); + setPeerAddress(address); + setAvatarLink(addressData?.avatarUrl); + } + }; + + const loadPreviousPage = async () => { + if (!conversation || xmtpMessages.length === 0) { + setHasMoreMessages(false); + return; + } + try { + const previousMessages = await conversation.messages({ + limit: PAGE_SIZE, + direction: SortDirection.SORT_DIRECTION_DESCENDING, + endTime: xmtpMessages[xmtpMessages.length - 1].sent, + }); + if (previousMessages.length < PAGE_SIZE) { + setHasMoreMessages(false); + } + if (previousMessages.length > 0) { + setXmtpMessages([...xmtpMessages, ...previousMessages.slice(1)]); + } + } catch (e) { + console.error('error fetching previous conversations', String(e)); + } + }; + + const loadConversation = async () => { + try { + // render the existing messages if available + if (conversation) { + const initialMessages = await conversation.messages({ + limit: PAGE_SIZE, + direction: SortDirection.SORT_DIRECTION_DESCENDING, + }); + setHasMoreMessages(initialMessages.length >= PAGE_SIZE); + setXmtpMessages(initialMessages); + + // determine if this is a new chat + setIsChatRequest( + initialMessages.length > 0 && + !acceptedTopics.includes(conversation.topic), + ); + + // listen for new messages + void waitForXmtpMessages( + conversation.clientAddress, + (message: DecodedMessage) => setIncomingMessage(message), + conversation, + ); + } + } catch (e) { + console.log('error loading conversation', String(e)); + } finally { + // loading complete + setIsLoading(false); + } + }; + + const scrollToLatestMessage = (ref: React.RefObject) => { + ref.current?.scrollIntoView({ + behavior: 'auto', + }); + }; + + const isBlocked = () => { + return conversation?.topic + ? blockedTopics.includes(conversation.topic) + : false; + }; + + const handleSend = async (msg: DecodedMessage) => { + // callback for sent messages to make UI feel responsive + setIncomingMessage(msg); + + // add to local accepted topics list if necessary, since the user + // has engaged with the conversation + if (!acceptedTopics.includes(msg.conversation.topic)) { + const updatedAcceptedTopics = [ + ...acceptedTopics.filter(v => v !== msg.conversation.topic), + ]; + updatedAcceptedTopics.push(msg.conversation.topic); + setAcceptedTopics(updatedAcceptedTopics); + } + + // register the topic as accepted, since the user has engaged with + // the conversation + await registerClientTopics(msg.conversation.clientAddress, [ + { + topic: msg.conversation.topic, + peerAddress: msg.conversation.peerAddress, + accept: true, + block: false, + }, + ]); + }; + + const handleOpenMenu = (e: MouseEvent) => { + setAnchorEl(e.currentTarget); + }; + + const handleCloseMenu = () => { + setAnchorEl(null); + }; + + const handleOpenProfile = () => { + if (displayName) { + window.open(`${config.UD_ME_BASE_URL}/${displayName}`, '_blank'); + } + }; + + const handleBlockClicked = async (blockedValue: boolean) => { + // prepare the blocked topics + if (!authDomain || !conversation) { + return; + } + + // updated accepted topics + const updatedAcceptedTopics = [ + ...acceptedTopics.filter(v => v !== conversation.topic), + ]; + if (!blockedValue) { + updatedAcceptedTopics.push(conversation.topic); + setIsChatRequest(false); + } + + // update blocked topics + const updatedBlockedTopics = [ + ...blockedTopics.filter(v => v !== conversation.topic), + ]; + if (blockedValue) { + updatedBlockedTopics.push(conversation.topic); + } + + // update blocking preferences + await registerClientTopics(conversation.clientAddress, [ + { + topic: conversation.topic, + peerAddress: conversation.peerAddress, + block: updatedBlockedTopics.includes(conversation.topic), + accept: !updatedBlockedTopics.includes(conversation.topic), + }, + ]); + + // update the blocked topic state + setAcceptedTopics(updatedAcceptedTopics); + setBlockedTopics(updatedBlockedTopics); + if (updatedBlockedTopics.includes(conversation.topic)) { + onBack(); + } + }; + + return ( + + + + {displayName || t('common.wallet')} + + {peerAddress && ( + + + {truncateEthAddress(peerAddress)} + + + )} + + } + avatar={ + + + + + } + action={ + + {displayName && ( + + + + )} + + + + + + + { + handleCloseMenu(); + void handleBlockClicked(!isBlocked()); + }} + > + + + + + {isBlocked() ? t('manage.unblock') : t('push.blockAndReport')} + + + { + handleCloseMenu(); + onClose(); + }} + > + + + + {t('common.close')} + + + + } + /> + + {isChatRequest && } + + {isLoading ? ( + + + + {t('push.loadingConversation')} + + + ) : conversation ? ( + conversation.clientAddress.toLowerCase() === + conversation.peerAddress.toLowerCase() ? ( + + + + {t('push.chatWithSelf', { + address: truncateEthAddress(conversation.clientAddress), + })} + + + ) : xmtpMessages.length === 0 ? ( + + + + {t('push.newConversation')} + + + {t('push.chatSecure')} + + + ) : ( + + + + + } + scrollThreshold={0.9} + > + {xmtpMessages + .filter( + (message, index) => + xmtpMessages.findIndex( + item => item.id === message.id, + ) === index, + ) + .map(message => ( + handleBlockClicked(!isBlocked())} + renderCallback={ + xmtpMessages.length > 0 && + message.sent >= xmtpMessages[0].sent + ? scrollToLatestMessage + : undefined + } + /> + ))} + + {isChatRequest && ( + + + {t('push.acceptWarning')} + + + + + )} + + ) + ) : ( + + + + {t('push.chatNotReady')} + + + )} + + + {!isLoading && !isChatRequest && ( + + + + )} + + ); +}; + +export default Conversation; diff --git a/server/components/Chat/modal/dm/ConversationBubble.tsx b/server/components/Chat/modal/dm/ConversationBubble.tsx new file mode 100644 index 00000000..450a89d4 --- /dev/null +++ b/server/components/Chat/modal/dm/ConversationBubble.tsx @@ -0,0 +1,189 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import DownloadIcon from '@mui/icons-material/Download'; +import Box from '@mui/material/Box'; +import CircularProgress from '@mui/material/CircularProgress'; +import Typography from '@mui/material/Typography'; +import {ContentTypeRemoteAttachment} from '@xmtp/content-type-remote-attachment'; +import type {DecodedMessage} from '@xmtp/xmtp-js'; +import {ContentTypeText} from '@xmtp/xmtp-js'; +import useTranslationContext from 'lib/i18n'; +import React, {useEffect, useRef, useState} from 'react'; +import Emoji from 'react-emoji-render'; +import Zoom from 'react-medium-image-zoom'; +import 'react-medium-image-zoom/dist/styles.css'; + +import {formatFileSize, getRemoteAttachment} from '../../protocol/xmtp'; +import LinkWarningModal from '../LinkWarningModal'; +import {useConversationBubbleStyles} from '../styles'; + +export type ConversationBubbleProps = { + address: string; + message: DecodedMessage; + onBlockTopic: () => void; + renderCallback?: (ref: React.RefObject) => void; +}; + +export const ConversationBubble: React.FC = ({ + address, + message, + onBlockTopic, + renderCallback, +}) => { + const [t] = useTranslationContext(); + const messageRef = useRef(null); + const [isLoading, setIsLoading] = useState(false); + const [isAttachment, setIsAttachment] = useState(false); + const [renderedContent, setRenderedContent] = useState(); + const [clickedUrl, setClickedUrl] = useState(); + const {cx, classes} = useConversationBubbleStyles({isAttachment}); + + useEffect(() => { + if (renderCallback) { + renderCallback(messageRef); + } + try { + void renderContent(); + } catch (e) { + console.log('error loading message', String(e)); + setRenderedContent({t('push.errorLoadingMessage')}); + } + }, []); + + const renderContent = async () => { + // handling for text content type + if (message.contentType.sameAs(ContentTypeText)) { + setRenderedContent( + + {message.content} + , + ); + // handling for remote attachments + } else if (message.contentType.sameAs(ContentTypeRemoteAttachment)) { + // decrypt the attachment data + setIsLoading(true); + const attachment = await getRemoteAttachment(message); + if (attachment) { + // create a file reference for download + const objectURL = URL.createObjectURL( + new Blob([Buffer.from(attachment.data)], { + type: attachment.mimeType, + }), + ); + + // handling for image attachment types + if (attachment.mimeType.toLowerCase().includes('image')) { + // show the image content + setRenderedContent( + + + + + , + ); + } + // handling for non-image attachment types + else { + // show generic download icon + setRenderedContent( + + + + {attachment.filename} ( + {formatFileSize(attachment.data.byteLength)}) + + , + ); + } + + // set the attachment styling + setIsAttachment(true); + } else { + // show the fallback message if there was a problem getting attachment + setRenderedContent( + {message.contentFallback || t('push.attachment')}, + ); + } + setIsLoading(false); + } + }; + + return ( + + + + + {isLoading ? ( + + + + {t('push.loadingAttachment')} + + + ) : ( + renderedContent + )} + + + {message.sent.toLocaleTimeString()} + + + + {clickedUrl && ( + setClickedUrl(undefined)} + /> + )} + + ); +}; + +export default ConversationBubble; diff --git a/server/components/Chat/modal/dm/ConversationCompose.tsx b/server/components/Chat/modal/dm/ConversationCompose.tsx new file mode 100644 index 00000000..dd197509 --- /dev/null +++ b/server/components/Chat/modal/dm/ConversationCompose.tsx @@ -0,0 +1,310 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import AddCircleOutlineOutlinedIcon from '@mui/icons-material/AddCircleOutlineOutlined'; +import SendOutlinedIcon from '@mui/icons-material/SendOutlined'; +import Box from '@mui/material/Box'; +import CircularProgress from '@mui/material/CircularProgress'; +import IconButton from '@mui/material/IconButton'; +import InputBase from '@mui/material/InputBase'; +import Tooltip from '@mui/material/Tooltip'; +import config from '@unstoppabledomains/config'; +import type {Conversation, DecodedMessage} from '@xmtp/xmtp-js'; +import {ProfileManager} from 'components/Wallet/ProfileManager'; +import useTranslationContext from 'lib/i18n'; +import type {SerializedUserDomainProfileData} from 'lib/types/domain'; +import {DomainProfileKeys} from 'lib/types/domain'; +import type {Web3Dependencies} from 'lib/types/web3'; +import type {DragEvent} from 'react'; +import React, {useEffect, useRef, useState} from 'react'; + +import {formatFileSize, sendRemoteAttachment} from '../../protocol/xmtp'; +import {useConversationComposeStyles} from '../styles'; + +export type ComposeProps = { + conversation?: Conversation; + storageApiKey?: string; + sendCallback: (message: DecodedMessage) => void; + setWeb3Deps: (value: Web3Dependencies | undefined) => void; +}; + +export const Compose: React.FC = ({ + conversation, + storageApiKey: initialStorageApiKey, + sendCallback, + setWeb3Deps, +}) => { + const [t] = useTranslationContext(); + const [authAddress, setAuthAddress] = useState(); + const [authDomain, setAuthDomain] = useState(); + const [storageApiKey, setStorageApiKey] = useState(initialStorageApiKey); + const [uploadFile, setUploadFile] = useState(); + const [signatureClicked, setSignatureClicked] = useState(false); + const [isSending, setIsSending] = useState(false); + const [isDragging, setIsDragging] = useState(false); + const [textboxTerm, setTextboxTerm] = useState(''); + const [textboxFocus, setTextboxFocus] = useState(false); + const [errorMessage, setErrorMessage] = useState(''); + const textboxRef = useRef(null); + const {cx, classes} = useConversationComposeStyles({ + textboxFocus, + textboxDrag: isDragging, + }); + + // set the primary domain and wallet address at page load time + useEffect(() => { + setAuthDomain(localStorage.getItem(DomainProfileKeys.AuthDomain)); + setAuthAddress(conversation?.clientAddress.toLowerCase()); + }, [conversation]); + + // detect if user clicks outside the compose textbox + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + // Check if the clicked target is outside of the textbox + if ( + textboxRef.current && + !textboxRef.current.contains(event.target as Node) + ) { + setTextboxFocus(false); + } + }; + + document.addEventListener('mousedown', handleClickOutside); + if (textboxRef.current) { + textboxRef.current.addEventListener('paste', handlePaste); + } + + return () => { + document.removeEventListener('mousedown', handleClickOutside); + if (textboxRef.current) { + textboxRef.current.removeEventListener('paste', handlePaste); + } + }; + }, [textboxRef]); + + // start the file upload once a file is selected and storage key has been obtained + useEffect(() => { + if (!uploadFile || !storageApiKey) { + return; + } + void handleUploadFile(); + }, [uploadFile, storageApiKey]); + + const handleDrop = async (event: DragEvent) => { + // upload the file as an attachment + event.preventDefault(); + setIsDragging(false); + const items = Array.from(event.dataTransfer.files); + if (items && items.length > 0) { + // ensure storage key is available + setSignatureClicked(true); + + // set the file to upload + setUploadFile(items[0]); + } + }; + + const handlePaste = async (event: ClipboardEvent) => { + // check the clipboard for data that can be uploaded as an attachment + + const items = event.clipboardData?.items; + if (items && items.length > 0) { + if (items[0].type) { + const fileToUpload = items[0].getAsFile(); + if (fileToUpload) { + // ensure storage key is available + event.preventDefault(); + setSignatureClicked(true); + + // set the file to upload + setUploadFile(fileToUpload); + } + } + } + }; + + const handleSend = async () => { + if (!textboxTerm?.trim()) { + return; + } + if (conversation) { + setIsSending(true); + try { + const sentMessage = await conversation.send(textboxTerm); + sendCallback(sentMessage); + setTextboxTerm(''); + setErrorMessage(''); + } catch (e) { + console.log('error sending message', String(e)); + setErrorMessage(t('push.errorSendingMessage')); + } finally { + setIsSending(false); + } + } + }; + + // handleUploadClicked remembers the user file upload selection + const handleUploadClicked = async ( + event: React.ChangeEvent, + ) => { + const {files} = event.target; + const selectedFiles = files as FileList; + const selectedFile = selectedFiles?.[0]; + + // check attachment size + if (selectedFile.size > config.XMTP.MAX_ATTACHMENT_BYTES) { + setErrorMessage( + t('push.errorAttachmentSize', { + size: formatFileSize(config.XMTP.MAX_ATTACHMENT_BYTES), + }), + ); + return; + } + + // store reference to file + setUploadFile(selectedFile); + }; + + // handleUploadCallback fired once the ProfileManager has obtained a primary domain + // signature and expiration time from the user. The user may be prompted to sign, or + // a cached signature may be retrieved locally. ProfileManager figure it out. + const handleUploadCallback = async (signature: string, expiry: string) => { + try { + // request the domain's user data from profile API + if (authDomain && signature && expiry) { + const response = await fetch( + `${config.PROFILE.HOST_URL}/user/${authDomain}?fields=profile`, + { + mode: 'cors', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'x-auth-domain': authDomain, + 'x-auth-expires': expiry, + 'x-auth-signature': signature, + }, + }, + ); + + // set user profile data from result + const userProfile: SerializedUserDomainProfileData = + await response.json(); + if (userProfile?.storage) { + setStorageApiKey(userProfile.storage.apiKey); + } + } + } catch (e) { + console.log('unable to load user profile', String(e)); + } + }; + + // handleUploadFile transmits the selected file to remote storage + const handleUploadFile = async () => { + if (conversation && uploadFile && storageApiKey) { + try { + // retrieve the attachment from device + setIsSending(true); + + // send the attachment + const sentMessage = await sendRemoteAttachment( + conversation, + uploadFile, + storageApiKey, + ); + sendCallback(sentMessage); + setErrorMessage(''); + } catch (e) { + console.log('error uploading file', String(e)); + setErrorMessage(t('push.errorSendingAttachment')); + } finally { + setUploadFile(undefined); + setIsSending(false); + } + } + }; + + const handleKeyDown: React.KeyboardEventHandler = event => { + if (event.key === 'Enter') { + void handleSend(); + } + }; + + const handleMessageChange: React.ChangeEventHandler< + HTMLInputElement + > = event => { + setTextboxTerm(event.target.value); + }; + + return ( + setIsDragging(true)} + onDragLeave={() => setIsDragging(false)} + > + setSignatureClicked(true)} + > + + + + input?.focus()} + disabled={isSending || conversation === undefined} + value={textboxTerm} + autoComplete="off" + autoCorrect="off" + placeholder={ + isSending + ? t('push.uploading') + : isDragging + ? t('push.dropToUpload') + : t('push.typeMessage') + } + onChange={handleMessageChange} + onFocus={() => setTextboxFocus(true)} + onKeyDown={handleKeyDown} + endAdornment={ + + {isSending ? ( + + ) : ( + + + + )} + + } + /> + {authAddress && authDomain && ( + + )} + + ); +}; + +export default Compose; diff --git a/server/components/Chat/modal/dm/ConversationPreview.tsx b/server/components/Chat/modal/dm/ConversationPreview.tsx new file mode 100644 index 00000000..c8f6dd68 --- /dev/null +++ b/server/components/Chat/modal/dm/ConversationPreview.tsx @@ -0,0 +1,168 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import WarningAmberOutlinedIcon from '@mui/icons-material/WarningAmberOutlined'; +import Avatar from '@mui/material/Avatar'; +import Box from '@mui/material/Box'; +import type {Theme} from '@mui/material/styles'; +import Typography from '@mui/material/Typography'; +import type {Conversation} from '@xmtp/xmtp-js'; +import {isAddressSpam} from 'actions/messageActions'; +import useTranslationContext from 'lib/i18n'; +import moment from 'moment'; +import React, {useEffect, useState} from 'react'; +import Emoji from 'react-emoji-render'; +import truncateEthAddress from 'truncate-eth-address'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import {getAddressMetadata} from '../../protocol/resolution'; +import type {ConversationMeta} from '../../protocol/xmtp'; + +const useStyles = makeStyles()((theme: Theme) => ({ + conversationContainer: { + display: 'flex', + cursor: 'pointer', + marginBottom: theme.spacing(2), + paddingBottom: theme.spacing(2), + marginRight: theme.spacing(1), + borderBottom: '1px dashed #eeeeee', + }, + avatar: { + marginRight: theme.spacing(2), + backgroundColor: theme.palette.primary.main, + color: 'white', + }, + chatPreview: { + whiteSpace: 'nowrap', + overflow: 'hidden', + textOverflow: 'ellipsis', + width: '100%', + }, + chatHeader: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'top', + }, + chatTimestamp: { + minWidth: '65px', + textAlign: 'right', + color: theme.palette.neutralShades[600], + }, + warningContainer: { + display: 'flex', + color: theme.palette.warning.main, + textAlign: 'center', + fontWeight: 'bold', + }, + warningIcon: { + color: theme.palette.warning.main, + marginRight: theme.spacing(0.5), + width: '20px', + height: '20px', + }, +})); + +export type ConversationPreviewProps = { + conversation: ConversationMeta; + acceptedTopics: string[]; + selectedCallback: (conversation: Conversation) => void; + searchTermCallback: (visible: boolean) => void; + searchTerm?: string; +}; + +export const ConversationPreview: React.FC = ({ + conversation, + acceptedTopics, + selectedCallback, + searchTermCallback, + searchTerm, +}) => { + const {classes} = useStyles(); + const [t] = useTranslationContext(); + const [avatarLink, setAvatarLink] = useState(); + const [isVisible, setIsVisible] = useState(true); + const [isSpam, setIsSpam] = useState(false); + const [isLoaded, setIsLoaded] = useState(false); + const [displayName, setDisplayName] = useState( + truncateEthAddress(conversation.conversation.peerAddress), + ); + + useEffect(() => { + if (!conversation) { + return; + } + const loadAddressData = async () => { + // if conversation is not accepted, check spam score + if (!acceptedTopics.find(v => v === conversation.conversation.topic)) { + // check peer address spam score + if (await isAddressSpam(conversation.conversation.peerAddress)) { + setIsSpam(true); + } + } + + // request peer address metadata + setIsLoaded(true); + const addressData = await getAddressMetadata( + conversation.conversation.peerAddress, + ); + if (addressData?.name) setDisplayName(addressData.name); + setAvatarLink(addressData?.avatarUrl); + }; + void loadAddressData(); + }, [conversation]); + + useEffect(() => { + const v = isSearchTermMatch(); + setIsVisible(v); + searchTermCallback(v); + }, [searchTerm]); + + const isSearchTermMatch = (): boolean => { + if (!searchTerm) { + return true; + } + const searchParams = [ + displayName, + conversation.conversation.peerAddress, + conversation.preview, + ]; + for (const param of searchParams) { + if (param.toLowerCase().includes(searchTerm.toLowerCase())) { + return true; + } + } + return false; + }; + + return isLoaded && isVisible ? ( + selectedCallback(conversation.conversation)} + className={classes.conversationContainer} + > + + + + + + {displayName} + + + {moment(conversation.timestamp).fromNow()} + + + + + {isSpam ? ( + + + {t('push.spamWarning')} + + ) : ( + {conversation.preview} + )} + + + + ) : null; +}; + +export default ConversationPreview; diff --git a/server/components/Chat/modal/dm/ConversationStart.tsx b/server/components/Chat/modal/dm/ConversationStart.tsx new file mode 100644 index 00000000..04939f5a --- /dev/null +++ b/server/components/Chat/modal/dm/ConversationStart.tsx @@ -0,0 +1,242 @@ +import ArrowBackOutlinedIcon from '@mui/icons-material/ArrowBackOutlined'; +import CheckIcon from '@mui/icons-material/Check'; +import CloudOffIcon from '@mui/icons-material/CloudOff'; +import ForumOutlinedIcon from '@mui/icons-material/ForumOutlined'; +import KeyboardDoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown'; +import Avatar from '@mui/material/Avatar'; +import Box from '@mui/material/Box'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import CardHeader from '@mui/material/CardHeader'; +import CircularProgress from '@mui/material/CircularProgress'; +import type {Theme} from '@mui/material/styles'; +import Typography from '@mui/material/Typography'; +import useTranslationContext from 'lib/i18n'; +import React, {useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import {getAddressMetadata, isEthAddress} from '../../protocol/resolution'; +import {isXmtpUser} from '../../protocol/xmtp'; +import type {AddressResolution} from '../../types'; +import {TabType} from '../../types'; +import Search from '../Search'; + +const useStyles = makeStyles()((theme: Theme) => ({ + cardContainer: { + padding: theme.spacing(1), + border: 'none', + height: '100%', + }, + loadingContainer: { + display: 'flex', + flexDirection: 'column', + height: '100%', + width: '100%', + alignItems: 'center', + textAlign: 'center', + justifyContent: 'center', + color: theme.palette.neutralShades[400], + }, + loadingSpinner: { + color: 'inherit', + }, + emptyContainer: { + display: 'flex', + flexDirection: 'column', + height: '100%', + width: '100%', + alignItems: 'center', + textAlign: 'center', + justifyContent: 'center', + marginTop: theme.spacing(10), + color: theme.palette.neutralShades[400], + }, + emptyIcon: { + width: 100, + height: 100, + }, + searchContainer: { + display: 'flex', + width: '100%', + color: theme.palette.neutralShades[600], + alignItems: 'center', + marginBottom: theme.spacing(4), + }, + headerActionContainer: { + display: 'flex', + color: theme.palette.neutralShades[600], + alignItems: 'center', + }, + headerBackIcon: { + marginRight: theme.spacing(1), + cursor: 'pointer', + }, + headerCloseIcon: { + marginLeft: theme.spacing(1), + cursor: 'pointer', + }, + resultContainer: { + display: 'flex', + alignItems: 'center', + marginLeft: theme.spacing(4), + }, + resultStatus: { + display: 'flex', + flexDirection: 'column', + }, + chatAvailability: { + display: 'flex', + alignItems: 'center', + }, + chatAvailableIcon: { + width: 15, + height: 15, + marginRight: theme.spacing(0.5), + }, + chatReady: { + color: theme.palette.success.main, + }, + chatNotReady: { + color: theme.palette.neutralShades[400], + }, + available: { + cursor: 'pointer', + color: theme.palette.common.black, + }, + notAvailable: { + color: theme.palette.neutralShades[600], + }, + avatar: { + marginRight: theme.spacing(2), + backgroundColor: theme.palette.primary.main, + height: 50, + width: 50, + color: 'white', + }, +})); + +export type ConversationStartProps = { + address: string; + onBack: () => void; + onClose: () => void; + selectedCallback: (peerAddress: AddressResolution) => void; + initialSearch?: string; +}; + +export const ConversationStart: React.FC = ({ + address, + onBack, + onClose, + selectedCallback, + initialSearch, +}) => { + const {cx, classes} = useStyles(); + const [t] = useTranslationContext(); + const [loading, setLoading] = useState(false); + const [isAvailable, setIsAvailable] = useState(); + const [selectedPeer, setSelectedPeer] = useState(); + + const handleSearch = async (searchTerm: string) => { + // wait for a valid search term + const isValid = + searchTerm.split('.').length === 2 || isEthAddress(searchTerm); + if (isValid) { + setLoading(true); + setSelectedPeer(undefined); + const searchResult = await getAddressMetadata(searchTerm); + if (searchResult?.address) { + const networkStatus = await isXmtpUser(searchResult.address); + setIsAvailable(networkStatus); + setSelectedPeer(searchResult); + } + setLoading(false); + } + }; + + const handleSelect = () => { + if (!selectedPeer) { + return; + } + setLoading(true); + selectedCallback(selectedPeer); + }; + + return ( + + + + + } + /> + + + + + + {loading && ( + + + + )} + {selectedPeer && !loading && ( + + {selectedPeer.avatarUrl && ( + + )} + + + {selectedPeer.name || selectedPeer.address} + + + {isAvailable ? ( + + ) : ( + + )} + + {isAvailable ? t('push.chatReady') : t('push.chatNotReady')} + + + + + )} + {!selectedPeer && !loading && ( + + + {t('push.chatNew')} + + {t('push.chatNewDescription')} + + + )} + + + ); +}; + +export default ConversationStart; diff --git a/server/components/Chat/modal/group/Community.tsx b/server/components/Chat/modal/group/Community.tsx new file mode 100644 index 00000000..0cdaa1f9 --- /dev/null +++ b/server/components/Chat/modal/group/Community.tsx @@ -0,0 +1,349 @@ +import ArrowBackOutlinedIcon from '@mui/icons-material/ArrowBackOutlined'; +import CloseOutlinedIcon from '@mui/icons-material/CloseOutlined'; +import CloudOffIcon from '@mui/icons-material/CloudOff'; +import ForumOutlinedIcon from '@mui/icons-material/ForumOutlined'; +import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined'; +import LogoutIcon from '@mui/icons-material/Logout'; +import MoreVertOutlinedIcon from '@mui/icons-material/MoreVertOutlined'; +import Avatar from '@mui/material/Avatar'; +import Box from '@mui/material/Box'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import CardHeader from '@mui/material/CardHeader'; +import CircularProgress from '@mui/material/CircularProgress'; +import IconButton from '@mui/material/IconButton'; +import ListItemIcon from '@mui/material/ListItemIcon'; +import Menu from '@mui/material/Menu'; +import MenuItem from '@mui/material/MenuItem'; +import {styled} from '@mui/material/styles'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import type {IMessageIPFS} from '@pushprotocol/restapi'; +import config from '@unstoppabledomains/config'; +import {joinBadgeGroupChat} from 'actions/messageActions'; +import useTranslationContext from 'lib/i18n'; +import type {SerializedCryptoWalletBadge} from 'lib/types/badge'; +import {DomainProfileKeys} from 'lib/types/domain'; +import type {Web3Dependencies} from 'lib/types/web3'; +import type {MouseEvent} from 'react'; +import React, {useEffect, useState} from 'react'; +import InfiniteScroll from 'react-infinite-scroll-component'; + +import {decryptMessage, getMessages, PUSH_PAGE_SIZE} from '../../protocol/push'; +import {useConversationStyles} from '../styles'; +import CommunityCompose from './CommunityCompose'; +import CommunityConversationBubble from './CommunityConversationBubble'; + +const CardContentNoPadding = styled(CardContent)(` + padding: 0; + &:last-child { + padding-bottom: 0; + } +`); + +export type CommunityProps = { + address: string; + badge: SerializedCryptoWalletBadge; + pushKey: string; + incomingMessage?: IMessageIPFS; + storageApiKey?: string; + setWeb3Deps: (value: Web3Dependencies | undefined) => void; + onBack: () => void; + onClose: () => void; +}; + +export const Community: React.FC = ({ + address, + badge, + pushKey, + incomingMessage, + storageApiKey, + setWeb3Deps, + onBack, + onClose, +}) => { + const {classes} = useConversationStyles({isChatRequest: false}); + const [t] = useTranslationContext(); + const [isLoading, setIsLoading] = useState(true); + const [anchorEl, setAnchorEl] = useState(null); + const [hasMoreMessages, setHasMoreMessages] = useState(true); + const [pushMessages, setPushMessages] = useState([]); + const [sentMessage, setSentMessage] = useState(); + const [authDomain, setAuthDomain] = useState(); + + useEffect(() => { + if (!badge.groupChatId) { + return; + } + setAuthDomain(localStorage.getItem(DomainProfileKeys.AuthDomain)); + void loadConversation(); + }, [address, badge]); + + useEffect(() => { + if (!incomingMessage) { + return; + } + const processMessage = async () => { + if (incomingMessage.toDID === badge.groupChatId) { + const decryptedMsg = await decryptMessage( + address, + pushKey, + incomingMessage, + ); + if (decryptedMsg) { + setPushMessages([decryptedMsg, ...pushMessages]); + } + } + }; + void processMessage(); + }, [incomingMessage]); + + useEffect(() => { + if (!sentMessage) { + return; + } + setPushMessages([sentMessage, ...pushMessages]); + }, [sentMessage]); + + const loadPreviousPage = async () => { + // require group chat ID + if (!badge.groupChatId) { + return; + } + + // no message fetch required if empty + if (pushMessages.length === 0) { + setHasMoreMessages(false); + return; + } + + // retrieve oldest message on timeline + const oldestMsg = pushMessages[pushMessages.length - 1]; + if (!oldestMsg.link) { + setHasMoreMessages(false); + return; + } + + // fetch the next page of messages + try { + const previousMessages = await getMessages( + badge.groupChatId, + address, + pushKey, + oldestMsg.link, + ); + if (previousMessages.length < PUSH_PAGE_SIZE) { + setHasMoreMessages(false); + } + if (previousMessages.length > 0) { + setPushMessages([...pushMessages, ...previousMessages.slice(1)]); + } + } catch (e) { + console.error('error fetching previous conversations', String(e)); + } + }; + + const loadConversation = async () => { + try { + // require group chat ID + if (!badge.groupChatId) { + return; + } + + // render the existing messages if available + const initialMessages = await getMessages( + badge.groupChatId, + address, + pushKey, + ); + setHasMoreMessages(initialMessages.length >= PUSH_PAGE_SIZE); + setPushMessages(initialMessages); + } catch (e) { + console.log('error loading conversation', String(e)); + } finally { + // loading complete + setIsLoading(false); + } + }; + + const scrollToLatestMessage = (ref: React.RefObject) => { + ref.current?.scrollIntoView({ + behavior: 'auto', + }); + }; + + const handleOpenMenu = (e: MouseEvent) => { + setAnchorEl(e.currentTarget); + }; + + const handleCloseMenu = () => { + setAnchorEl(null); + }; + + const handleLeaveChat = async () => { + if (!badge.groupChatId) { + return; + } + await joinBadgeGroupChat(badge.code, address, pushKey, true); + }; + + const handleMoreInfo = () => { + window.open( + `${config.UD_ME_BASE_URL}/${authDomain}?openBadgeCode=${badge.code}`, + '_blank', + ); + }; + + return ( + + + {badge.name} + + } + avatar={ + + + + + } + action={ + + + + + + + + + + + { + await handleLeaveChat(); + handleCloseMenu(); + onBack(); + }} + > + + + + {t('push.leave')} + + { + handleCloseMenu(); + onClose(); + }} + > + + + + {t('common.close')} + + + + } + /> + + + {isLoading ? ( + + + + {t('push.loadingConversation')} + + + ) : badge.groupChatId ? ( + pushMessages.length === 0 ? ( + + + + {t('push.newConversation')} + + + {t('push.chatSecure')} + + + ) : ( + + + + } + scrollThreshold={0.9} + > + {pushMessages + .filter( + (message, index) => + pushMessages.findIndex( + item => item.timestamp === message.timestamp, + ) === index, + ) + .map(message => ( + console.log('TODO')} + renderCallback={ + pushMessages.length > 0 && + message.timestamp! >= pushMessages[0].timestamp! + ? scrollToLatestMessage + : undefined + } + /> + ))} + + ) + ) : ( + + + + {t('push.chatNotReady')} + + + )} + + + + {badge.groupChatId && ( + + )} + + + ); +}; + +export default Community; diff --git a/server/components/Chat/modal/group/CommunityCompose.tsx b/server/components/Chat/modal/group/CommunityCompose.tsx new file mode 100644 index 00000000..b9329101 --- /dev/null +++ b/server/components/Chat/modal/group/CommunityCompose.tsx @@ -0,0 +1,325 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import AddCircleOutlineOutlinedIcon from '@mui/icons-material/AddCircleOutlineOutlined'; +import SendOutlinedIcon from '@mui/icons-material/SendOutlined'; +import Box from '@mui/material/Box'; +import CircularProgress from '@mui/material/CircularProgress'; +import IconButton from '@mui/material/IconButton'; +import InputBase from '@mui/material/InputBase'; +import Tooltip from '@mui/material/Tooltip'; +import type {IMessageIPFS} from '@pushprotocol/restapi'; +import config from '@unstoppabledomains/config'; +import {useFeatureFlags} from 'actions/featureFlagActions'; +import {ProfileManager} from 'components/Wallet/ProfileManager'; +import useTranslationContext from 'lib/i18n'; +import type {SerializedUserDomainProfileData} from 'lib/types/domain'; +import {DomainProfileKeys} from 'lib/types/domain'; +import type {Web3Dependencies} from 'lib/types/web3'; +import type {DragEvent} from 'react'; +import React, {useEffect, useRef, useState} from 'react'; + +import {sendMessage, sendRemoteAttachment} from '../../protocol/push'; +import {formatFileSize} from '../../protocol/xmtp'; +import {useConversationComposeStyles} from '../styles'; + +export type CommunityComposeProps = { + address: string; + chatId: string; + pushKey: string; + storageApiKey?: string; + sendCallback: (message: IMessageIPFS) => void; + setWeb3Deps: (value: Web3Dependencies | undefined) => void; +}; + +export const CommunityCompose: React.FC = ({ + address, + chatId, + pushKey, + storageApiKey: initialStorageApiKey, + sendCallback, + setWeb3Deps, +}) => { + const [t] = useTranslationContext(); + const {data: featureFlags} = useFeatureFlags(); + const [authDomain, setAuthDomain] = useState(); + const [storageApiKey, setStorageApiKey] = useState(initialStorageApiKey); + const [uploadFile, setUploadFile] = useState(); + const [signatureClicked, setSignatureClicked] = useState(false); + const [isSending, setIsSending] = useState(false); + const [isDragging, setIsDragging] = useState(false); + const [textboxTerm, setTextboxTerm] = useState(''); + const [textboxFocus, setTextboxFocus] = useState(false); + const [errorMessage, setErrorMessage] = useState(''); + const textboxRef = useRef(null); + const {cx, classes} = useConversationComposeStyles({ + textboxFocus, + textboxDrag: isDragging, + }); + + // set the primary domain and wallet address at page load time + useEffect(() => { + setAuthDomain(localStorage.getItem(DomainProfileKeys.AuthDomain)); + }, [address]); + + // detect if user clicks outside the compose textbox + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + // Check if the clicked target is outside of the textbox + if ( + textboxRef.current && + !textboxRef.current.contains(event.target as Node) + ) { + setTextboxFocus(false); + } + }; + + document.addEventListener('mousedown', handleClickOutside); + if (textboxRef.current) { + textboxRef.current.addEventListener('paste', handlePaste); + } + + return () => { + document.removeEventListener('mousedown', handleClickOutside); + if (textboxRef.current) { + textboxRef.current.removeEventListener('paste', handlePaste); + } + }; + }, [textboxRef]); + + // start the file upload once a file is selected and storage key has been obtained + useEffect(() => { + if (!uploadFile || !storageApiKey) { + return; + } + void handleUploadFile(); + }, [uploadFile, storageApiKey]); + + const handleDrop = async (event: DragEvent) => { + // upload the file as an attachment + event.preventDefault(); + setIsDragging(false); + const items = Array.from(event.dataTransfer.files); + if (items && items.length > 0) { + // ensure storage key is available + setSignatureClicked(true); + + // set the file to upload + setUploadFile(items[0]); + } + }; + + const handlePaste = async (event: ClipboardEvent) => { + // check the clipboard for data that can be uploaded as an attachment + + const items = event.clipboardData?.items; + if (items && items.length > 0) { + if (items[0].type) { + const fileToUpload = items[0].getAsFile(); + if (fileToUpload) { + // ensure storage key is available + event.preventDefault(); + setSignatureClicked(true); + + // set the file to upload + setUploadFile(fileToUpload); + } + } + } + }; + + const handleSend = async () => { + if (!textboxTerm?.trim()) { + return; + } + setIsSending(true); + try { + sendCallback(await sendMessage(chatId, address, pushKey, textboxTerm)); + setTextboxTerm(''); + setErrorMessage(''); + } catch (e) { + console.log('error sending message', String(e)); + setErrorMessage(t('push.errorSendingMessage')); + } finally { + setIsSending(false); + } + }; + + // handleUploadClicked remembers the user file upload selection + const handleUploadClicked = async ( + event: React.ChangeEvent, + ) => { + const {files} = event.target; + const selectedFiles = files as FileList; + const selectedFile = selectedFiles?.[0]; + + // check attachment size + if (selectedFile.size > config.XMTP.MAX_ATTACHMENT_BYTES) { + setErrorMessage( + t('push.errorAttachmentSize', { + size: formatFileSize(config.XMTP.MAX_ATTACHMENT_BYTES), + }), + ); + return; + } + + // store reference to file + setUploadFile(selectedFile); + }; + + // handleUploadCallback fired once the ProfileManager has obtained a primary domain + // signature and expiration time from the user. The user may be prompted to sign, or + // a cached signature may be retrieved locally. ProfileManager figure it out. + const handleUploadCallback = async (signature: string, expiry: string) => { + try { + // request the domain's user data from profile API + if (authDomain && signature && expiry) { + const response = await fetch( + `${config.PROFILE.HOST_URL}/user/${authDomain}?fields=profile`, + { + mode: 'cors', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'x-auth-domain': authDomain, + 'x-auth-expires': expiry, + 'x-auth-signature': signature, + }, + }, + ); + + // set user profile data from result + const userProfile: SerializedUserDomainProfileData = + await response.json(); + if (userProfile?.storage) { + setStorageApiKey(userProfile.storage.apiKey); + } + } + } catch (e) { + console.log('unable to load user profile', String(e)); + } + }; + + // handleUploadFile transmits the selected file to remote storage + const handleUploadFile = async () => { + // only allow media uploads if feature flag enabled + if ( + !featureFlags.variations?.ecommerceServiceUsersEnableChatCommunityMedia + ) { + setErrorMessage(t('push.unsupportedContent')); + return; + } + + if (uploadFile && storageApiKey) { + try { + // retrieve the attachment from device + setIsSending(true); + + // send the attachment + const sentMessage = await sendRemoteAttachment( + chatId, + address, + pushKey, + storageApiKey, + uploadFile, + ); + sendCallback(sentMessage); + setErrorMessage(''); + } catch (e) { + console.log('error uploading file', String(e)); + setErrorMessage(t('push.errorSendingAttachment')); + } finally { + setUploadFile(undefined); + setIsSending(false); + } + } + }; + + const handleKeyDown: React.KeyboardEventHandler = event => { + if (event.key === 'Enter') { + void handleSend(); + } + }; + + const handleMessageChange: React.ChangeEventHandler< + HTMLInputElement + > = event => { + setTextboxTerm(event.target.value); + }; + + return ( + setIsDragging(true)} + onDragLeave={() => setIsDragging(false)} + > + {featureFlags.variations + ?.ecommerceServiceUsersEnableChatCommunityMedia && ( + setSignatureClicked(true)} + > + + + + )} + input?.focus()} + disabled={isSending || chatId === undefined} + value={textboxTerm} + autoComplete="off" + autoCorrect="off" + placeholder={ + isSending + ? t('push.uploading') + : isDragging + ? t('push.dropToUpload') + : t('push.typeMessage') + } + onChange={handleMessageChange} + onFocus={() => setTextboxFocus(true)} + onKeyDown={handleKeyDown} + endAdornment={ + + {isSending ? ( + + ) : ( + + + + )} + + } + /> + {authDomain && ( + + )} + + ); +}; + +export default CommunityCompose; diff --git a/server/components/Chat/modal/group/CommunityConversationBubble.tsx b/server/components/Chat/modal/group/CommunityConversationBubble.tsx new file mode 100644 index 00000000..3b534e18 --- /dev/null +++ b/server/components/Chat/modal/group/CommunityConversationBubble.tsx @@ -0,0 +1,252 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import DownloadIcon from '@mui/icons-material/Download'; +import Avatar from '@mui/material/Avatar'; +import Box from '@mui/material/Box'; +import CircularProgress from '@mui/material/CircularProgress'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import type {IMessageIPFS} from '@pushprotocol/restapi'; +import {useFeatureFlags} from 'actions/featureFlagActions'; +import useTranslationContext from 'lib/i18n'; +import React, {useEffect, useRef, useState} from 'react'; +import Emoji from 'react-emoji-render'; +import Zoom from 'react-medium-image-zoom'; +import 'react-medium-image-zoom/dist/styles.css'; + +import {MessageType} from '../../protocol/push'; +import {getAddressMetadata} from '../../protocol/resolution'; +import {formatFileSize} from '../../protocol/xmtp'; +import LinkWarningModal from '../LinkWarningModal'; +import {useConversationBubbleStyles} from '../styles'; + +export type CommunityConversationBubbleProps = { + address: string; + hideAvatar?: string; + message: IMessageIPFS; + onBlockTopic: () => void; + renderCallback?: (ref: React.RefObject) => void; +}; + +export const CommunityConversationBubble: React.FC< + CommunityConversationBubbleProps +> = ({address, hideAvatar, message, onBlockTopic, renderCallback}) => { + const [t] = useTranslationContext(); + const {data: featureFlags} = useFeatureFlags(); + const messageRef = useRef(null); + const [isLoading, setIsLoading] = useState(false); + const [peerAvatarLink, setPeerAvatarLink] = useState(); + const [peerDisplayName, setPeerDisplayName] = useState(); + const [isAttachment, setIsAttachment] = useState(false); + const [renderedContent, setRenderedContent] = useState(); + const [clickedUrl, setClickedUrl] = useState(); + const {cx, classes} = useConversationBubbleStyles({isAttachment}); + + useEffect(() => { + if (renderCallback) { + renderCallback(messageRef); + } + try { + void renderContent(); + } catch (e) { + console.log('error loading message', String(e)); + setRenderedContent({t('push.errorLoadingMessage')}); + } + }, []); + + const renderPeerAvatar = async () => { + const peerAddress = message.fromCAIP10.replace('eip155:', ''); + if (peerAddress.toLowerCase().includes(address.toLowerCase())) { + return; + } + const addressData = await getAddressMetadata(peerAddress); + setPeerDisplayName(addressData?.name || peerAddress); + setPeerAvatarLink(addressData?.avatarUrl); + }; + + const renderContent = async () => { + // message object required + if (!message.messageObj) { + message.messageObj = { + content: + message.messageType === 'Text' + ? message.messageContent + : t('push.unsupportedContent'), + }; + } + + // load the peer avatar + if (!hideAvatar) { + await renderPeerAvatar(); + } + + // handling for text content type + if (message.messageType === MessageType.Text) { + setRenderedContent( + + + {typeof message.messageObj === 'string' + ? message.messageObj + : message.messageObj.content} + + , + ); + // handling for remote attachments + } else if ( + message.messageType === MessageType.Media && + featureFlags.variations?.ecommerceServiceUsersEnableChatCommunityMedia + ) { + setIsLoading(true); + + // fetch the remote media + const mediaUrl = + typeof message.messageObj === 'string' + ? message.messageObj + : (message.messageObj.content as string); + const fetchResponse = await fetch(mediaUrl); + + // process the media response + if (fetchResponse) { + // create a file reference for download + const mediaBlob = await fetchResponse.blob(); + const objectURL = URL.createObjectURL(mediaBlob); + + // handling for image attachment types + if (mediaUrl.toLowerCase().includes('image/')) { + // show the image content + setRenderedContent( + + + + + , + ); + } + // handling for non-image attachment types + else { + // show generic download icon + setRenderedContent( + + + + {t('common.download')} ({formatFileSize(mediaBlob.size)}) + + , + ); + } + + // set the attachment styling + setIsAttachment(true); + } + setIsLoading(false); + } else { + setRenderedContent( + + {t('push.unsupportedContent')} + , + ); + } + }; + + return ( + + + {peerAvatarLink && peerDisplayName && ( + + + + )} + + + {peerDisplayName && ( + + {peerDisplayName} + + )} + + {isLoading ? ( + + + + {t('push.loadingAttachment')} + + + ) : ( + renderedContent + )} + + {message.timestamp && ( + + {new Date(message.timestamp).toLocaleTimeString()} + + )} + + + + {clickedUrl && ( + setClickedUrl(undefined)} + /> + )} + + ); +}; + +export default CommunityConversationBubble; diff --git a/server/components/Chat/modal/group/CommunityList.tsx b/server/components/Chat/modal/group/CommunityList.tsx new file mode 100644 index 00000000..52e77b33 --- /dev/null +++ b/server/components/Chat/modal/group/CommunityList.tsx @@ -0,0 +1,200 @@ +import EmojiEventsOutlinedIcon from '@mui/icons-material/EmojiEventsOutlined'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import CircularProgress from '@mui/material/CircularProgress'; +import type {Theme} from '@mui/material/styles'; +import Typography from '@mui/material/Typography'; +import config from '@unstoppabledomains/config'; +import {getDomainBadges} from 'actions/domainActions'; +import Bluebird from 'bluebird'; +import useTranslationContext from 'lib/i18n'; +import type {SerializedCryptoWalletBadge} from 'lib/types/badge'; +import {UD_BLUE_BADGE_CODE} from 'lib/types/domain'; +import React, {useEffect, useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import {getProfileData} from 'actions/domainProfile'; +import {getGroupInfo} from '../../protocol/push'; +import CommunityPreview from './CommunityPreview'; + +const useStyles = makeStyles()((theme: Theme) => ({ + cardContainer: { + margin: 0, + padding: 0, + }, + headerText: { + marginTop: theme.spacing(3), + marginBottom: theme.spacing(2), + }, + emptyContainer: { + display: 'flex', + flexDirection: 'column', + height: '100%', + width: '100%', + alignItems: 'center', + textAlign: 'center', + justifyContent: 'center', + marginTop: theme.spacing(5), + color: theme.palette.neutralShades[400], + }, + emptyIcon: { + width: 100, + height: 100, + }, + emptyButton: { + marginTop: theme.spacing(2), + }, + loadingContainer: { + display: 'flex', + flexDirection: 'column', + height: '100%', + width: '100%', + alignItems: 'center', + textAlign: 'center', + justifyContent: 'center', + marginTop: theme.spacing(10), + color: theme.palette.neutralShades[400], + }, + loadingText: { + marginTop: theme.spacing(1), + color: 'inherit', + }, + loadingSpinner: { + color: 'inherit', + }, +})); + +export const filteredBadgeCodes = [UD_BLUE_BADGE_CODE]; + +export type CommunityListProps = { + address: string; + domain: string; + pushKey: string; + searchTerm?: string; + setActiveCommunity: (v: SerializedCryptoWalletBadge) => void; +}; + +export const CommunityList: React.FC = ({ + address, + domain, + pushKey, + searchTerm, + setActiveCommunity, +}) => { + const {classes} = useStyles(); + const [t] = useTranslationContext(); + const [badges, setBadges] = useState(); + const [inGroupMap, setInGroupMap] = useState>({}); + const [isUdBlue, setIsUdBlue] = useState(false); + const [loadingText, setLoadingText] = useState(); + + useEffect(() => { + // only load once when domain is first defined + if (!domain || badges) { + return; + } + void loadBadges(); + }, [domain]); + + const loadBadges = async () => { + // query user badges + setLoadingText(t('push.loadingCommunities')); + const [badgeData, domainProfile] = await Promise.all([ + getDomainBadges(domain, {withoutPartners: true}), + getProfileData(domain, Date.now()), + ]); + + // determine group membership + const groups: Record = {}; + await Bluebird.map( + badgeData.list, + async b => { + if (!b.groupChatId) { + return; + } + const groupData = await getGroupInfo(b.groupChatId); + if (groupData) { + const groupWallets = groupData.members.map(m => + m.wallet.replace('eip155:', '').toLowerCase(), + ); + groups[b.groupChatId] = groupWallets.includes(address.toLowerCase()); + } + return; + }, + {concurrency: 3}, + ); + + // save user state + setInGroupMap(groups); + setBadges(badgeData.list.filter(b => !filteredBadgeCodes.includes(b.code))); + if (domainProfile?.profile?.udBlue) { + setIsUdBlue(domainProfile.profile.udBlue); + } + setLoadingText(undefined); + }; + + const inGroup = (chatId?: string) => { + if (!chatId) { + return false; + } + return inGroupMap[chatId]; + }; + + const handleGetBadge = () => { + window.location.href = `${config.UNSTOPPABLE_WEBSITE_URL}/manage?domain=${domain}`; + }; + + return loadingText ? ( + + + {loadingText} + + ) : badges && badges.length > 0 ? ( + + {badges + ?.sort((a, b) => { + return ( + Number(inGroup(b.groupChatId)) - Number(inGroup(a.groupChatId)) || + a.name.localeCompare(b.name) + ); + }) + .map((badge, i, sortedBadges) => ( + <> + {i > 0 && + inGroup(sortedBadges[i - 1].groupChatId) && + !inGroup(badge.groupChatId) && ( + + {t('push.availableCommunities')} + + )} + + + ))} + + ) : ( + + + {t('push.communitiesCollect')} + + + ); +}; + +export default CommunityList; diff --git a/server/components/Chat/modal/group/CommunityPreview.tsx b/server/components/Chat/modal/group/CommunityPreview.tsx new file mode 100644 index 00000000..e5260801 --- /dev/null +++ b/server/components/Chat/modal/group/CommunityPreview.tsx @@ -0,0 +1,272 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import CheckIcon from '@mui/icons-material/Check'; +import ErrorIcon from '@mui/icons-material/Error'; +import LaunchOutlinedIcon from '@mui/icons-material/LaunchOutlined'; +import LoadingButton from '@mui/lab/LoadingButton'; +import Avatar from '@mui/material/Avatar'; +import Box from '@mui/material/Box'; +import Card from '@mui/material/Card'; +import CardActions from '@mui/material/CardActions'; +import CardContent from '@mui/material/CardContent'; +import CardHeader from '@mui/material/CardHeader'; +import Skeleton from '@mui/material/Skeleton'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import {getBadge} from 'actions/badgeActions'; +import {joinBadgeGroupChat} from 'actions/messageActions'; +import LearnMoreUdBlue from 'components/LearnMoreUdBlue'; +import useTranslationContext from 'lib/i18n'; +import type { + SerializedBadgeInfo, + SerializedCryptoWalletBadge, +} from 'lib/types/badge'; +import numeral from 'numeral'; +import React, {useEffect, useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import {acceptGroupInvite} from '../../protocol/push'; + +const useStyles = makeStyles()((theme: Theme) => ({ + communityContainer: { + marginBottom: theme.spacing(2), + marginRight: theme.spacing(0), + }, + communityTitle: { + display: 'flex', + }, + communityIcon: { + width: '45px', + height: '45px', + }, + actionContainer: { + margin: theme.spacing(1), + }, + actionButton: { + marginRight: theme.spacing(1), + }, + contentContainer: { + display: 'flex', + flexDirection: 'column', + marginBottom: theme.spacing(-2), + marginTop: theme.spacing(-1), + }, + joinedIcon: { + width: '15px', + height: '15px', + }, + joinedText: { + color: theme.palette.success.main, + display: 'flex', + alignItems: 'center', + marginBottom: theme.spacing(2), + }, + linkIcon: { + cursor: 'pointer', + width: '20px', + height: '20px', + }, + errorIcon: { + color: theme.palette.error.main, + marginRight: theme.spacing(1), + }, + errorText: { + color: theme.palette.error.main, + }, +})); + +const maxDescriptionLength = 125; + +export type CommunityPreviewProps = { + address: string; + badge: SerializedCryptoWalletBadge; + inGroup: boolean; + isUdBlue: boolean; + pushKey: string; + searchTerm?: string; + onReload: () => Promise; + setActiveCommunity: (v: SerializedCryptoWalletBadge) => void; +}; + +export const CommunityPreview: React.FC = ({ + address, + badge, + inGroup, + isUdBlue, + pushKey, + onReload, + searchTerm, + setActiveCommunity, +}) => { + const {classes, cx} = useStyles(); + const [t] = useTranslationContext(); + const [joining, setJoining] = useState(); + const [leaving, setLeaving] = useState(); + const [errorMsg, setErrorMsg] = useState(); + const [badgeInfo, setBadgeInfo] = useState(); + const [udBlueModalOpen, setUdBlueModalOpen] = useState(false); + + useEffect(() => { + // only load once when badge is first defined + if (!badge || badgeInfo) { + return; + } + void loadBadge(); + }, [badge]); + + const loadBadge = async () => { + setBadgeInfo(await getBadge(badge.code)); + }; + + const handleChatClicked = async () => { + // check UD blue status + if (!isUdBlue) { + setUdBlueModalOpen(true); + return; + } + + // retrieve group Chat ID from messaging API + try { + setJoining(true); + setErrorMsg(undefined); + if (!inGroup) { + const groupChatInfo = await joinBadgeGroupChat( + badge.code, + address, + pushKey, + ); + if (groupChatInfo?.groupChatId) { + // accept the chat request for the user and change to the + // group conversation panel + await acceptGroupInvite(groupChatInfo.groupChatId, address, pushKey); + } + badge.groupChatId = groupChatInfo?.groupChatId; + } + setActiveCommunity(badge); + } catch (e) { + // unable to join group + console.log('error joining group', e); + setErrorMsg(t('push.joinCommunityError')); + } finally { + setJoining(false); + } + }; + + const handleLeaveClicked = async () => { + if (!badge.groupChatId) { + return; + } + setLeaving(true); + try { + await joinBadgeGroupChat(badge.code, address, pushKey, true); + await onReload(); + } catch (e) { + console.log('error leaving group', e); + setErrorMsg(t('push.leaveCommunityError')); + } finally { + setLeaving(false); + } + }; + + const isSearchTermMatch = (): boolean => { + if (!searchTerm) { + return true; + } + const searchParams = [badge.code, badge.name, badge.description]; + for (const param of searchParams) { + if (param.toLowerCase().includes(searchTerm.toLowerCase())) { + return true; + } + } + return false; + }; + + return isSearchTermMatch() ? ( + <> + + + + {badge.name} + + {badgeInfo ? ( + + {numeral(badgeInfo.usage.holders).format('0a')}{' '} + {t('badges.holder')} + + ) : ( + + )} + + } + avatar={} + action={ + badge.linkUrl && ( + window.open(badge.linkUrl!, '_blank')} + /> + ) + } + /> + + {inGroup && ( + + + {t('push.joined')} + + )} + + {badge.description.length > maxDescriptionLength + ? `${badge.description.substring(0, maxDescriptionLength)}...` + : badge.description} + + + + + + {inGroup ? t('push.chat') : t('push.join')} + + {inGroup && ( + + {t('push.leave')} + + )} + + {errorMsg && ( + <> + + + {errorMsg} + + + )} + + + {udBlueModalOpen && ( + setUdBlueModalOpen(false)} + /> + )} + + ) : null; +}; + +export default CommunityPreview; diff --git a/server/components/Chat/modal/notification/NotificationPreview.tsx b/server/components/Chat/modal/notification/NotificationPreview.tsx new file mode 100644 index 00000000..2382eca7 --- /dev/null +++ b/server/components/Chat/modal/notification/NotificationPreview.tsx @@ -0,0 +1,122 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import LaunchOutlinedIcon from '@mui/icons-material/LaunchOutlined'; +import Avatar from '@mui/material/Avatar'; +import Box from '@mui/material/Box'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import CardHeader from '@mui/material/CardHeader'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import React from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import type {PayloadData} from '../../types'; + +const useStyles = makeStyles()((theme: Theme) => ({ + notificationContainer: { + marginBottom: theme.spacing(2), + marginRight: theme.spacing(0), + }, + notificationClick: { + display: 'flex', + cursor: 'pointer', + }, + notificationIcon: { + cursor: 'pointer', + width: '20px', + height: '20px', + }, + notificationCtaImg: { + width: '75px', + height: '75px', + marginRight: theme.spacing(1), + }, +})); + +export type NotificationPreviewProps = { + notification: PayloadData; + searchTerm?: string; +}; + +export const NotificationPreview: React.FC = ({ + notification, + searchTerm, +}) => { + const {classes} = useStyles(); + + const isSearchTermMatch = (): boolean => { + if (!searchTerm) { + return true; + } + const searchParams = [ + notification.asub, + notification.amsg, + notification.app, + ]; + for (const param of searchParams) { + if (param.toLowerCase().includes(searchTerm.toLowerCase())) { + return true; + } + } + return false; + }; + + return isSearchTermMatch() ? ( + + (window.location.href = notification.url)} + variant="subtitle2" + > + {notification.app} + + } + avatar={ + (window.location.href = notification.url)} + /> + } + action={ + (window.location.href = notification.acta)} + /> + } + /> + (window.location.href = notification.acta)} + > + {notification.aimg && ( + + { + const img = e.target as HTMLImageElement; + img.style.display = 'none'; + }} + /> + + )} + + {notification.asub} + + {notification.amsg + .split('\n') + .map((item, index) => + index === 0 ? item : [
, item], + )} +
+
+
+
+ ) : null; +}; + +export default NotificationPreview; diff --git a/server/components/Chat/modal/styles.ts b/server/components/Chat/modal/styles.ts new file mode 100644 index 00000000..5792214f --- /dev/null +++ b/server/components/Chat/modal/styles.ts @@ -0,0 +1,302 @@ +import type {Theme} from '@mui/material/styles'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +export const useConversationComposeStyles = makeStyles<{ + textboxFocus: boolean; + textboxDrag: boolean; +}>()((theme: Theme, {textboxFocus, textboxDrag}) => ({ + textboxContainer: { + display: 'flex', + margin: theme.spacing(0), + }, + actionContainer: { + display: 'flex', + alignItems: 'center', + }, + textboxBase: { + border: `1px solid ${ + textboxDrag + ? theme.palette.primary.main + : textboxFocus + ? theme.palette.neutralShades[500] + : theme.palette.neutralShades[100] + }`, + borderRadius: theme.shape.borderRadius, + paddingLeft: 12, + backgroundColor: theme.palette.white, + }, + textboxInput: { + fontSize: 16, + color: theme.palette.neutralShades[500], + '&::-webkit-search-cancel-button': { + WebkitAppearance: 'none', + }, + '&::placeholder': {color: theme.palette.neutralShades[500], opacity: 1}, + '&::-webkit-input-placeholder': { + color: theme.palette.neutralShades[400], + opacity: 1, + }, + }, + icon: { + margin: theme.spacing(1, 1, 1, 0), + cursor: 'pointer', + width: 24, + height: 24, + }, + sendIcon: { + color: theme.palette.primary.main, + }, + sendIconError: { + color: 'red', + }, + attachIcon: { + color: theme.palette.neutralShades[500], + }, + sendingProgress: { + color: theme.palette.neutralShades[500], + margin: theme.spacing(1), + }, +})); + +export const useConversationBubbleStyles = makeStyles<{ + isAttachment: boolean; +}>()((theme: Theme, {isAttachment}) => ({ + avatarContainer: { + display: 'flex', + alignItems: 'flex-end', + }, + avatar: { + marginRight: theme.spacing(1), + marginBottom: theme.spacing(3.5), + backgroundColor: theme.palette.primary.main, + color: 'white', + }, + msgContainer: { + display: 'flex', + flexDirection: 'column', + marginBottom: theme.spacing(1), + }, + msg: { + overflow: 'hidden', + padding: theme.spacing(1, 2), + borderRadius: 4, + marginBottom: 4, + display: 'inline-block', + wordBreak: 'break-word', + }, + leftRow: { + display: 'inline-block', + textAlign: 'left', + }, + leftMargin: { + marginRight: theme.spacing(5), + }, + rightRow: { + display: 'inline-block', + textAlign: 'right', + }, + rightMargin: { + marginLeft: theme.spacing(5), + }, + left: { + borderTopRightRadius: theme.spacing(2.5), + borderBottomRightRadius: theme.spacing(2.5), + backgroundColor: isAttachment + ? theme.palette.common.white + : theme.palette.grey[100], + }, + right: { + borderTopLeftRadius: theme.spacing(2.5), + borderBottomLeftRadius: theme.spacing(2.5), + backgroundColor: isAttachment + ? theme.palette.common.white + : theme.palette.primary.main, + color: theme.palette.common.white, + }, + leftFirst: { + borderTopLeftRadius: theme.spacing(2.5), + }, + leftLast: { + borderBottomLeftRadius: theme.spacing(2.5), + }, + rightFirst: { + borderTopRightRadius: theme.spacing(2.5), + }, + rightLast: { + borderBottomRightRadius: theme.spacing(2.5), + }, + chatDisplayName: { + color: theme.palette.neutralShades[800], + fontSize: 10, + }, + chatTimestamp: { + color: theme.palette.neutralShades[400], + fontSize: 10, + }, + chatLink: { + display: 'inline-block', + color: 'inherit', + cursor: 'pointer', + textDecoration: 'underline', + }, + imageAttachmentRight: { + borderRadius: theme.spacing(2.5, 2.5, 0, 2.5), + margin: theme.spacing(-1, -2, 0, -2), + cursor: 'pointer', + maxWidth: '250px', + }, + imageAttachmentLeft: { + borderRadius: theme.spacing(2.5, 2.5, 2.5, 0), + margin: theme.spacing(-1, -2, 0, -2), + cursor: 'pointer', + maxWidth: '250px', + }, + genericAttachment: { + display: 'flex', + alignItems: 'center', + marginTop: theme.spacing(1), + color: theme.palette.neutralShades[600], + }, + downloadIcon: { + cursor: 'pointer', + marginRight: theme.spacing(1), + color: theme.palette.neutralShades[600], + width: 25, + height: 25, + }, + loadingContainerLeft: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + color: theme.palette.neutralShades[600], + marginTop: theme.spacing(1), + }, + loadingContainerRight: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + color: theme.palette.neutralShades[200], + marginTop: theme.spacing(1), + }, + loadingIcon: { + color: 'inherit', + }, + unsupportedMediaText: { + fontStyle: 'italic', + }, +})); + +export const useConversationStyles = makeStyles<{ + isChatRequest?: boolean; +}>()((theme: Theme, {isChatRequest}) => ({ + cardContainer: { + padding: theme.spacing(1), + border: 'none', + height: '100%', + }, + loadingContainer: { + display: 'flex', + flexDirection: 'column', + height: '100%', + width: '100%', + alignItems: 'center', + textAlign: 'center', + justifyContent: 'center', + color: theme.palette.neutralShades[400], + }, + loadingText: { + marginTop: theme.spacing(1), + color: 'inherit', + }, + loadingSpinner: { + color: 'inherit', + }, + unavailableContainer: { + display: 'flex', + flexDirection: 'column', + height: '100%', + width: '100%', + alignItems: 'center', + textAlign: 'center', + justifyContent: 'center', + color: theme.palette.neutralShades[400], + }, + unavailableIcon: { + width: 100, + height: 100, + }, + unavailableText: { + fontSize: 16, + }, + conversationContainer: { + display: 'flex', + flexDirection: 'column-reverse', + borderBottom: isChatRequest ? undefined : '1px dashed #eeeeee', + overflowY: 'auto', + overflowX: 'hidden', + overscrollBehavior: 'contain', + height: '430px', + [theme.breakpoints.down('sm')]: { + height: 'calc(100vh - 200px)', + }, + }, + composeContainer: { + marginLeft: theme.spacing(1), + marginRight: theme.spacing(1), + }, + avatar: { + backgroundColor: 'white', + color: 'white', + height: 35, + width: 35, + }, + headerActionContainer: { + display: 'flex', + color: theme.palette.neutralShades[600], + alignItems: 'center', + }, + headerTitleContainer: { + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + width: '100px', + }, + headerBackIcon: { + marginRight: theme.spacing(1), + cursor: 'pointer', + }, + headerCloseIcon: { + marginLeft: theme.spacing(1), + cursor: 'pointer', + }, + chatTimestamp: { + minWidth: '65px', + textAlign: 'right', + color: theme.palette.neutralShades[600], + }, + infiniteScroll: { + margin: 0, + padding: 0, + }, + ininiteScrollLoading: { + width: '100%', + alignItems: 'center', + textAlign: 'center', + justifyContent: 'center', + color: theme.palette.neutralShades[400], + marginBottom: theme.spacing(1), + }, + acceptContainer: { + borderTop: '1px dashed #eeeeee', + color: theme.palette.neutralShades[600], + marginTop: theme.spacing(1.5), + paddingTop: theme.spacing(1.5), + textAlign: 'center', + }, + acceptButton: { + marginTop: theme.spacing(1), + }, + acceptText: { + marginBottom: theme.spacing(2), + }, +})); diff --git a/server/components/Chat/protocol/push.ts b/server/components/Chat/protocol/push.ts new file mode 100644 index 00000000..c0b48909 --- /dev/null +++ b/server/components/Chat/protocol/push.ts @@ -0,0 +1,187 @@ +import type {IMessageIPFS} from '@pushprotocol/restapi'; +import * as PushAPI from '@pushprotocol/restapi'; +import {sign} from '@pushprotocol/restapi/src/lib/chat/helpers/pgp'; +import {ENV} from '@pushprotocol/uiweb'; +import {ethers} from 'ethers'; +import {Web3Storage} from 'web3.storage'; + +import config from '@unstoppabledomains/config'; + +import {Upload} from './upload'; +import {formatFileSize} from './xmtp'; + +export const PUSH_PAGE_SIZE = 20; + +export enum MessageType { + Text = 'Text', + Media = 'MediaEmbed', +} + +// getAddressAccount normalizes expected account format +export const getAddressAccount = (address: string) => { + return `eip155:${ethers.utils.getAddress(address)}`; +}; + +// getPushUser defined here to allow for test mock +export const getPushUser = async ( + address: string, +): Promise => { + return await PushAPI.user.get({ + account: getAddressAccount(address), + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + }); +}; + +export const getGroupInfo = async (chatId?: string) => { + if (!chatId) return; + try { + return await PushAPI.chat.getGroup({ + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + chatId, + }); + } catch (e) { + console.log('error getting group', e); + return; + } +}; + +export const acceptGroupInvite = async ( + chatId: string, + address: string, + pushKey: string, +) => { + // check for an existing group chat request + const requests = await PushAPI.chat.requests({ + account: getAddressAccount(address), + pgpPrivateKey: pushKey, + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + }); + const groupChatRequest = requests.filter(r => r.chatId === chatId); + + // accept invite request if present + if (groupChatRequest.length > 0) { + await PushAPI.chat.approve({ + account: getAddressAccount(address), + pgpPrivateKey: pushKey, + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + senderAddress: chatId, + }); + } +}; + +export const signMessage = async ( + message: string, + pushKey: string, +): Promise => { + return await sign({message, signingKey: pushKey}); +}; + +export const sendMessage = async ( + chatId: string, + address: string, + pushKey: string, + message: string, +) => { + const sentMessage = await PushAPI.chat.send({ + account: getAddressAccount(address), + pgpPrivateKey: pushKey, + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + message: { + content: message, + type: MessageType.Text, + }, + to: chatId, + }); + sentMessage.messageObj = { + content: message, + }; + return sentMessage; +}; + +export const sendRemoteAttachment = async ( + chatId: string, + address: string, + pushKey: string, + storageApiKey: string, + uploadFile: File, +) => { + // check max file size in bytes + if (uploadFile.size > config.XMTP.MAX_ATTACHMENT_BYTES) { + throw new Error( + `File must be less than ${formatFileSize( + config.XMTP.MAX_ATTACHMENT_BYTES, + )}`, + ); + } + + // upload the attachment somewhere and get a URL + const web3Storage = new Web3Storage({ + token: storageApiKey, + }); + const upload = new Upload( + `${address}-${chatId}-${uploadFile.name}`, + new Uint8Array(await uploadFile.arrayBuffer()), + ); + const cid = await web3Storage.put([upload]); + const url = `https://${cid}.ipfs.w3s.link/${upload.name}?mimeType=${uploadFile.type}`; + + // send the message as embedded media + return await PushAPI.chat.send({ + account: getAddressAccount(address), + pgpPrivateKey: pushKey, + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + message: { + content: url, + type: MessageType.Media, + }, + to: chatId, + }); +}; + +export const getMessages = async ( + chatId: string, + address: string, + pushKey: string, + threadhash?: string, +) => { + // get thread hash of the group chat + if (!threadhash) { + const hashResponse = await PushAPI.chat.conversationHash({ + account: getAddressAccount(address), + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + conversationId: chatId, + }); + threadhash = hashResponse.threadHash; + } + + // retrieve the group chat + return await PushAPI.chat.history({ + account: getAddressAccount(address), + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + threadhash, + pgpPrivateKey: pushKey, + toDecrypt: true, + limit: PUSH_PAGE_SIZE, + }); +}; + +export const decryptMessage = async ( + address: string, + pushKey: string, + msg: IMessageIPFS, +): Promise => { + const connectedUser = await getPushUser(address); + if (!connectedUser) { + return undefined; + } + const decryptedMessage = await PushAPI.chat.decryptConversation({ + env: config.APP_ENV === 'production' ? ENV.PROD : ENV.STAGING, + pgpPrivateKey: pushKey, + messages: [msg], + connectedUser, + }); + if (decryptedMessage.length > 0) { + return decryptedMessage[0]; + } + return undefined; +}; diff --git a/server/components/Chat/protocol/registration.ts b/server/components/Chat/protocol/registration.ts new file mode 100644 index 00000000..4efb3cde --- /dev/null +++ b/server/components/Chat/protocol/registration.ts @@ -0,0 +1,54 @@ +import {fetcher} from '@xmtp/proto'; +import {Signature} from '@xmtp/xmtp-js'; +import {registerXmtpTopic} from 'actions/messageActions'; +import Bluebird from 'bluebird'; + +import type {TopicRegistration} from '../types'; +import {getSignedPublicKey, signMessage} from './xmtp'; + +export interface TopicMetadata { + topic: string; + peerAddress: string; + accept?: boolean; + block?: boolean; +} + +export const registerClientTopics = async ( + address: string, + topics: TopicMetadata[], +): Promise => { + // the signed public key is common to all the signatures + const signedPublicKey = await getSignedPublicKey(address); + + // iterate topics to create a list of registrations, which must be + // serialized to base64 before being transmitted to an API endpoint. + const registrations: TopicRegistration[] = await Bluebird.map( + topics, + async topicMetadata => { + const signatureBytes = new Signature( + await signMessage(address, topicMetadata.topic), + ).toBytes(); + return { + accept: topicMetadata.accept, + block: topicMetadata.block, + peerAddress: topicMetadata.peerAddress, + topic: topicMetadata.topic, + signature: fetcher.b64Encode(signatureBytes, 0, signatureBytes.length), + }; + }, + { + concurrency: 3, + }, + ); + + // send to message service API endpoint + await registerXmtpTopic( + address, + fetcher.b64Encode( + signedPublicKey.toBytes(), + 0, + signedPublicKey.toBytes().length, + ), + registrations, + ); +}; diff --git a/server/components/Chat/protocol/resolution.ts b/server/components/Chat/protocol/resolution.ts new file mode 100644 index 00000000..3361df5c --- /dev/null +++ b/server/components/Chat/protocol/resolution.ts @@ -0,0 +1,40 @@ +import {getProfileResolution} from 'actions/domainProfile'; + +import {getCachedResolution, setCachedResolution} from '../storage'; +import type {AddressResolution} from '../types'; + +export const getAddressMetadata = async ( + addressOrDomain: string, +): Promise => { + // determine the reverse address to query + const sanitizedValue = addressOrDomain.replace('eip155:', '').toLowerCase(); + + // check cache for resolution + const cachedResolution = getCachedResolution(sanitizedValue); + if (cachedResolution) { + return cachedResolution; + } + + // attempt resolution + try { + // retrieve the reverse resolution details + const resolution = await getProfileResolution(sanitizedValue); + if (resolution?.address) { + setCachedResolution(resolution); + return resolution; + } + } catch (e) { + console.warn('error looking up reverse resolution', String(e)); + } + + // return the address metadata + if (isEthAddress(sanitizedValue)) { + return { + address: sanitizedValue, + }; + } + return; +}; + +export const isEthAddress = (address: string): boolean => + /^0x[a-fA-F0-9]{40}$/.test(address); diff --git a/server/components/Chat/protocol/upload.ts b/server/components/Chat/protocol/upload.ts new file mode 100644 index 00000000..dd03905f --- /dev/null +++ b/server/components/Chat/protocol/upload.ts @@ -0,0 +1,22 @@ +import type {Filelike} from 'web3.storage'; + +export class Upload implements Filelike { + name: string; + data: Uint8Array; + + constructor(name: string, data: Uint8Array) { + this.name = name; + this.data = data; + } + + stream(): ReadableStream { + // eslint-disable-next-line @typescript-eslint/no-this-alias + const self = this; + return new ReadableStream({ + start(controller) { + controller.enqueue(Buffer.from(self.data)); + controller.close(); + }, + }); + } +} diff --git a/server/components/Chat/protocol/xmtp.ts b/server/components/Chat/protocol/xmtp.ts new file mode 100644 index 00000000..8ad283f6 --- /dev/null +++ b/server/components/Chat/protocol/xmtp.ts @@ -0,0 +1,309 @@ +import type { + Attachment, + RemoteAttachment, +} from '@xmtp/content-type-remote-attachment'; +import { + AttachmentCodec, + ContentTypeRemoteAttachment, + RemoteAttachmentCodec, +} from '@xmtp/content-type-remote-attachment'; +import type {signature} from '@xmtp/proto'; +import {fetcher} from '@xmtp/proto'; +import type { + Conversation, + DecodedMessage, + SignedPublicKeyBundle, +} from '@xmtp/xmtp-js'; +import { + Client, + ContentTypeText, + SortDirection, + StaticKeystoreProvider, +} from '@xmtp/xmtp-js'; +import type {Signer} from 'ethers'; +import {sha256} from 'ethers/lib/utils'; +import {filesize} from 'filesize'; +import {Web3Storage} from 'web3.storage'; + +import config from '@unstoppabledomains/config'; + +import {getXmtpLocalKey, setXmtpLocalKey} from '../storage'; +import {registerClientTopics} from './registration'; +import {Upload} from './upload'; + +export interface ConversationMeta { + conversation: Conversation; + preview: string; + timestamp: number; + visible: boolean; +} + +// single reference to the XMTP client for reuse +const xmtpClients: Record = {}; +const xmtpOpts = { + env: config.XMTP.ENVIRONMENT, +}; + +export const isXmtpUser = async (address: string): Promise => { + return await Client.canMessage(address, xmtpOpts); +}; + +export const getXmtpClient = async ( + address: string, + signer?: Signer, +): Promise => { + // established local encryption keys + let xmtpKey = getXmtpLocalKey(address); + if (!xmtpKey) { + if (!signer) { + throw new Error('signer is required to create a new account'); + } + xmtpKey = await Client.getKeys(signer, xmtpOpts); + setXmtpLocalKey(address, xmtpKey); + } + + // return existing client if available + if (xmtpClients[address.toLowerCase()]) { + return xmtpClients[address.toLowerCase()]; + } + + // create client from local encryption keys + const xmtpClient = await Client.create(null, { + persistConversations: true, + privateKeyOverride: xmtpKey, + keystoreProviders: [new StaticKeystoreProvider()], + ...xmtpOpts, + }); + xmtpClient.registerCodec(new AttachmentCodec()); + xmtpClient.registerCodec(new RemoteAttachmentCodec()); + xmtpClients[address.toLowerCase()] = xmtpClient; + return xmtpClient; +}; + +export const getConversations = async ( + address: string, +): Promise => { + const xmtp = await getXmtpClient(address); + const chats: ConversationMeta[] = []; + const latestConversations = await xmtp.conversations.list(); + for (const conversation of latestConversations) { + // filter self conversations + if (conversation.peerAddress.toLowerCase() === address.toLowerCase()) { + continue; + } + + // retrieve latest message associated with conversation + const latestMessage = await conversation.messages({ + limit: 1, + direction: SortDirection.SORT_DIRECTION_DESCENDING, + }); + latestMessage.map(message => { + chats.push({ + conversation, + preview: `${ + message.senderAddress.toLowerCase() === + message.conversation.clientAddress.toLowerCase() + ? 'You: ' + : '' + }${ + message.contentType.sameAs(ContentTypeText) + ? message.content + : 'Attachment' + }`, + timestamp: message.sent.getTime(), + visible: true, + }); + }); + } + + // associate owner's conversation topics with their wallet address + await registerClientTopics( + xmtp.address, + chats.map(chat => { + return { + topic: chat.conversation.topic, + peerAddress: chat.conversation.peerAddress, + }; + }), + ); + + // sort and return conversations + return ( + chats + // sort by newest conversation first + .sort((a, b): number => { + return b.timestamp - a.timestamp; + }) + ); +}; + +export const getConversation = async ( + address: string, + peerAddress: string, +): Promise => { + const xmtp = await getXmtpClient(address); + const isAvailable = await xmtp.canMessage(peerAddress); + if (!isAvailable) { + return undefined; + } + return await xmtp.conversations.newConversation(peerAddress); +}; + +export const getSignedPublicKey = async ( + address: string, +): Promise => { + const xmtp = await getXmtpClient(address); + return xmtp.signedPublicKeyBundle; +}; + +export const getEncodedPrivateKey = (address: string): string | undefined => { + const xmtpKey = getXmtpLocalKey(address); + if (!xmtpKey) { + return; + } + return fetcher.b64Encode(xmtpKey, 0, xmtpKey.length); +}; + +export const initXmtpAccount = async (address: string, signer: Signer) => { + try { + // say hello to the GM bot + const xmtp = await getXmtpClient(address, signer); + const conversation = await xmtp.conversations.newConversation( + '0x937C0d4a6294cdfa575de17382c7076b579DC176', + ); + await conversation.send(`GM from Unstoppable Domains 👋`); + } catch (e) { + console.log('error creating xmtp user', e); + } +}; + +export const waitForXmtpMessages = async ( + address: string, + callback: (data: DecodedMessage) => void, + conversation?: Conversation, +): Promise => { + const xmtp = await getXmtpClient(address); + if (conversation) { + // stream a specific conversation + for await (const message of await conversation.streamMessages()) { + if (message.senderAddress.toLowerCase() !== xmtp.address.toLowerCase()) { + callback(message); + } + } + } else { + // stream all conversations + for await (const message of await xmtp.conversations.streamAllMessages()) { + if (message.senderAddress.toLowerCase() !== xmtp.address.toLowerCase()) { + callback(message); + } + } + } +}; + +export const signMessage = async ( + walletAddress: string, + message: string, +): Promise => { + const xmtp = await getXmtpClient(walletAddress); + return await xmtp.keystore.signDigest({ + digest: new TextEncoder().encode(sha256(new TextEncoder().encode(message))), + identityKey: undefined, + prekeyIndex: 0, + }); +}; + +export const sendRemoteAttachment = async ( + conversation: Conversation, + file: File, + apiKey: string, +): Promise => { + // check max file size in bytes + if (file.size > config.XMTP.MAX_ATTACHMENT_BYTES) { + throw new Error( + `File must be less than ${formatFileSize( + config.XMTP.MAX_ATTACHMENT_BYTES, + )}`, + ); + } + + // create an attachment object + const attachment: Attachment = { + filename: file.name, + mimeType: file.type, + data: new Uint8Array(await file.arrayBuffer()), + }; + + // encrypt the attachment + const encryptedAttachment = await RemoteAttachmentCodec.encodeEncrypted( + attachment, + new AttachmentCodec(), + ); + + // upload the attachment somewhere and get a URL + const web3Storage = new Web3Storage({ + token: apiKey, + }); + const upload = new Upload( + 'XMTPEncryptedContent', + encryptedAttachment.payload, + ); + const cid = await web3Storage.put([upload]); + const url = `https://${cid}.ipfs.w3s.link/XMTPEncryptedContent`; + + // create the remote attachment + const remoteAttachment: RemoteAttachment = { + // This is the URL string where clients can download the encrypted + // encoded content + url, + + // We hash the encrypted encoded payload and send that along with the + // remote attachment. On the recipient side, clients can verify that the + // encrypted encoded payload they've downloaded matches what was uploaded. + // This is to prevent tampering with the content once it's been uploaded. + contentDigest: encryptedAttachment.digest, + + // These are the encryption keys that will be used by the recipient to + // decrypt the remote payload + salt: encryptedAttachment.salt, + nonce: encryptedAttachment.nonce, + secret: encryptedAttachment.secret, + + // For now, all remote attachments MUST be fetchable via HTTPS GET requests. + // We're investigating IPFS here among other options. + scheme: 'https://', + + // These fields are used by clients to display some information about + // the remote attachment before it is downloaded and decrypted. + filename: attachment.filename, + contentLength: attachment.data.byteLength, + }; + + // send the attachment to the conversation + return await conversation.send(remoteAttachment, { + contentType: ContentTypeRemoteAttachment, + // TODO - this contentFallback used to be supported + //contentFallback: `Attachment: ${file.name} (${formatFileSize(file.size)})`, + }); +}; + +export const getRemoteAttachment = async ( + message: DecodedMessage, +): Promise => { + try { + const xmtp = await getXmtpClient(message.conversation.clientAddress); + const remoteAttachment: RemoteAttachment = message.content; + const attachment: Attachment = await RemoteAttachmentCodec.load( + remoteAttachment, + xmtp, + ); + return attachment; + } catch (e) { + console.error('error loading remote attachment', String(e)); + } + + return; +}; + +export const formatFileSize = (bytes: number): string => { + return filesize(bytes, {base: 2, standard: 'jedec'}) as string; +}; diff --git a/server/components/Chat/provider/UnstoppableMessagingProvider.tsx b/server/components/Chat/provider/UnstoppableMessagingProvider.tsx new file mode 100644 index 00000000..ca7bb215 --- /dev/null +++ b/server/components/Chat/provider/UnstoppableMessagingProvider.tsx @@ -0,0 +1,45 @@ +import React, {useState} from 'react'; + +type Props = { + children: React.ReactNode; +}; + +type SetString = (s?: string) => void; +type SetIsChatReady = (isReady: boolean) => void; + +export const UnstoppableMessagingContext = React.createContext<{ + setIsChatReady?: SetIsChatReady; + isChatReady?: boolean; + setOpenChat?: SetString; + openChat?: string; + setOpenCommunity?: SetString; + openCommunity?: string; + setChatUser?: SetString; + chatUser?: string; +}>({}); + +const UnstoppableMessagingProvider: React.FC = ({children}) => { + const [isChatReady, setIsChatReady] = useState(false); + const [chatUser, setChatUser] = useState(); + const [activeChatId, setActiveChatId] = useState(); + const [activeCommunityId, setActiveCommunityId] = useState(); + + const value = { + setIsChatReady, + isChatReady, + setOpenChat: setActiveChatId, + openChat: activeChatId, + setOpenCommunity: setActiveCommunityId, + openCommunity: activeCommunityId, + setChatUser, + chatUser, + }; + + return ( + + {children} + + ); +}; + +export default UnstoppableMessagingProvider; diff --git a/server/components/Chat/storage.ts b/server/components/Chat/storage.ts new file mode 100644 index 00000000..86b38c26 --- /dev/null +++ b/server/components/Chat/storage.ts @@ -0,0 +1,61 @@ +import {fetcher} from '@xmtp/proto'; +import {DomainProfileKeys} from 'lib/types/domain'; + +import type {AddressResolution} from './types'; + +export const getCacheKey = (prefix: string, address: string): string => { + return `${DomainProfileKeys.Messaging}-${prefix}-${address}`; +}; + +export const setXmtpLocalKey = (address: string, key: Uint8Array) => { + localStorage.setItem( + getCacheKey('xmtpKey', address.toLowerCase()), + fetcher.b64Encode(key, 0, key.length), + ); +}; + +export const getXmtpLocalKey = (address: string): Uint8Array | undefined => { + const cachedKey = localStorage.getItem( + getCacheKey('xmtpKey', address.toLowerCase()), + ); + if (cachedKey) { + return fetcher.b64Decode(cachedKey); + } + return; +}; + +export const setPushLocalKey = (address: string, key: string) => { + localStorage.setItem( + getCacheKey('pushKey', address.toLowerCase()), + Buffer.from(key, 'utf8').toString('base64'), + ); +}; + +export const getPushLocalKey = (address: string): string => { + const cachedKey = localStorage.getItem( + getCacheKey('pushKey', address.toLowerCase()), + ); + if (cachedKey) { + return Buffer.from(cachedKey, 'base64').toString('utf8'); + } + return ''; +}; + +export const setCachedResolution = (resolution: AddressResolution): void => { + localStorage.setItem( + getCacheKey(DomainProfileKeys.Resolution, resolution.address.toLowerCase()), + JSON.stringify(resolution), + ); +}; + +export const getCachedResolution = ( + address: string, +): AddressResolution | undefined => { + const cachedResolution = localStorage.getItem( + getCacheKey(DomainProfileKeys.Resolution, address.toLowerCase()), + ); + if (cachedResolution) { + return JSON.parse(cachedResolution); + } + return; +}; diff --git a/server/components/Chat/types.ts b/server/components/Chat/types.ts new file mode 100644 index 00000000..51bc28b7 --- /dev/null +++ b/server/components/Chat/types.ts @@ -0,0 +1,92 @@ +export const PUSH_CHAT_APP = 'push chat'; + +export enum MessagingSignatureType { + ExistingUser = 'existingUser', + MissingChannels = 'existingUserMissingChannels', + NewUser = 'newUser', + NoPrimaryDomain = 'noPrimaryDomain', +} + +export enum ConfigurationState { + Initial = 'initial', + RegisterPush = 'push', + RegisterXmtp = 'xmtp', + QuerySubscriptions = 'query', + Complete = 'complete', +} + +export enum TabType { + Chat = 'chat', + Communities = 'communities', + Notification = 'notification', +} + +export const ChatModalQueryString = 'open-chat-window'; + +export const getCaip10Address = (address: string): string => { + if (!address.startsWith('eip155')) { + address = `eip155:${address}`; + } + return address.replace('eip155:', 'eip155:1:'); +}; + +export const fromCaip10Address = (caip10?: string): string | undefined => { + const parts = caip10?.split(':'); + if (parts && parts.length > 0) { + return parts[parts.length - 1]; + } + return undefined; +}; + +export interface PushNotification { + payload_id: number; + sender: string; + epoch: string; + payload: Payload; + source: string; +} + +export interface Payload { + data: PayloadData; + recipients: string; + notification: Notification; + verificationProof: string; +} + +export interface PayloadData { + app: string; + sid: string; + url: string; + acta: string; + aimg: string; + amsg: string; + asub: string; + icon: string; + type: number; + epoch: string; + hidden: string; + silent: string; + additionalMeta: string; +} + +export interface Notification { + body: string; + title: string; +} + +export interface AddressResolution { + address: string; + name?: string; + avatarUrl?: string; +} + +export interface TopicRegistration { + topic: string; + peerAddress: string; + signature: string; +} + +export interface InitChatOptions { + skipXmtp?: boolean; + skipPush?: boolean; +} diff --git a/server/components/CopyToClipboard.tsx b/server/components/CopyToClipboard.tsx new file mode 100644 index 00000000..20ca30fc --- /dev/null +++ b/server/components/CopyToClipboard.tsx @@ -0,0 +1,36 @@ +import Box from '@mui/material/Box'; +import type {ReactChild} from 'react'; +import React from 'react'; + +type CopyModule = {default: (text: string) => Promise}; + +export const noop = () => {}; + +const CopyToClipboard = ({ + onCopy = noop, + stringToCopy, + children, +}: { + onCopy?: () => void; + stringToCopy: string; + children: ReactChild; +}) => { + return ( + { + void (import('clipboard-copy') as Promise).then( + (mod: CopyModule) => { + mod.default(stringToCopy).then(onCopy).catch(noop); + }, + ); + }} + > + {children} + + ); +}; + +export default CopyToClipboard; diff --git a/server/components/CryptoAddresses/CryptoAddress.tsx b/server/components/CryptoAddresses/CryptoAddress.tsx new file mode 100644 index 00000000..824c3787 --- /dev/null +++ b/server/components/CryptoAddresses/CryptoAddress.tsx @@ -0,0 +1,318 @@ +import InfoIcon from '@mui/icons-material/Info'; +import Button from '@mui/material/Button'; +import ClickAwayListener from '@mui/material/ClickAwayListener'; +import Menu from '@mui/material/Menu'; +import MenuItem from '@mui/material/MenuItem'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import CopyToClipboard from 'components/CopyToClipboard'; +import {CryptoIcon} from 'components/Image/CryptoIcon'; +import Link from 'components/Link'; +import {displayShortCryptoAddress} from 'lib/displayCryptoAddress'; +import useTranslationContext from 'lib/i18n'; +import type {AllCurrenciesType} from 'lib/types/blockchain'; +import type {SerializedPublicDomainProfileData} from 'lib/types/domain'; +import type {MulticoinVersions} from 'lib/types/records'; +import React, {useEffect, useState} from 'react'; + +import config from '@unstoppabledomains/config'; +import CopyContentIcon from '@unstoppabledomains/ui-kit/icons/CopyContent'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + root: { + marginRight: theme.spacing(1), + [theme.breakpoints.up('md')]: { + marginBottom: theme.spacing(1), + }, + }, + row: { + borderRadius: (theme.shape.borderRadius as number) * 25, + padding: theme.spacing(0.75, 1), + backgroundColor: theme.palette.neutralShades[100], + border: `1px solid ${theme.palette.neutralShades[100]}`, + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + cursor: 'pointer', + transition: theme.transitions.create([ + 'background-color', + 'box-shadow', + 'border-color', + ]), + '&:hover': { + backgroundColor: theme.palette.white, + boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.08)', + borderColor: theme.palette.neutralShades[200], + }, + }, + currencyIcon: { + width: 20, + height: 20, + marginRight: theme.spacing(1), + }, + contentCopyIconButton: { + marginRight: theme.spacing(1), + padding: theme.spacing(0.75), + [theme.breakpoints.up('sm')]: { + padding: theme.spacing(1), + }, + }, + sendButton: { + ...theme.typography.body1, + fontWeight: theme.typography.fontWeightBold, + }, + chain: { + textAlign: 'center', + fontSize: theme.typography.caption.fontSize, + fontWeight: theme.typography.fontWeightBold, + padding: theme.spacing(0, 0.75), + border: '1px solid', + borderColor: theme.palette.greyShades[100], + borderRadius: theme.shape.borderRadius, + userSelect: 'none', + }, + address: { + marginRight: theme.spacing(1), + fontSize: theme.typography.body2.fontSize, + fontWeight: theme.typography.fontWeightMedium, + userSelect: 'none', + }, + infoIcon: { + color: '#D18411', + }, + tooltipContainer: { + textAlign: 'center', + }, + verifyLink: { + color: '#72E6FC', + fontSize: '13px', + padding: 0, + }, + copyIcon: { + width: 16, + height: 16, + display: 'flex', + alignItems: 'center', + fill: theme.palette.neutralShades[600], + }, + menuList: { + padding: theme.spacing(1), + }, + menuItem: { + borderRadius: theme.shape.borderRadius, + padding: theme.spacing(1.25, 1), + fontWeight: theme.typography.fontWeightMedium, + transition: theme.transitions.create('background-color'), + }, + menuCopyIcon: { + marginRight: theme.spacing(1), + }, +})); + +export type Props = { + chain?: string; + versions?: MulticoinVersions; + singleAddress?: string; + showWarning?: boolean; + profileData?: SerializedPublicDomainProfileData | null; + ownerAddress?: string; + domain?: string; + isOwner?: boolean; + currency: AllCurrenciesType; + onCryptoAddressCopied: () => void; +}; + +const CryptoAddress: React.FC = ({ + currency, + versions, + singleAddress, + ownerAddress, + isOwner, + showWarning = false, + domain, + profileData, + chain, + onCryptoAddressCopied: handleCryptoAddressCopied, +}) => { + const [t] = useTranslationContext(); + const [anchorEl, setAnchorEl] = useState(null); + const {classes} = useStyles(); + + const [tooltipOpen, setTooltipOpen] = useState(false); + const filteredVersions = versions + ? Object.fromEntries( + Object.entries(versions).filter(([key, value]) => !!value), + ) + : undefined; + const address = + (filteredVersions ? Object.values(filteredVersions)[0] : singleAddress) || + ''; + const versionName = + filteredVersions && + (Object.keys(filteredVersions).length > 1 + ? ` ${t('common.multichain')}` + : ` ${Object.keys(filteredVersions)[0]}`); + const [isVerified, setIsVerified] = useState(false); + + // load existing verifications from profile data + useEffect(() => { + // wait for prerequisites to be met + if (!currency || !address || !profileData) { + return; + } + + if (address?.toLowerCase() === ownerAddress?.toLowerCase()) { + setIsVerified(true); + return; + } + // determine if address has already been verified + (profileData?.cryptoVerifications || []).forEach(verification => { + if ( + verification.symbol.toLowerCase() === currency.toLowerCase() && + verification.address.toLowerCase() === address.toLowerCase() + ) { + // set the verified address state + setIsVerified(true); + } + }); + }, [currency, address, profileData, showWarning]); + + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + const handleTooltipClose = () => { + setTooltipOpen(false); + }; + + const handleTooltipOpen = () => { + setTooltipOpen(true); + }; + + const showTooltip = showWarning && !isVerified && isSupported(currency); + const item = ( +
+ + + + {chain && {chain}} + + {displayShortCryptoAddress(address, 4, 4)} + + {showTooltip ? ( + + + + {isOwner + ? t('manage.addressNotVerified') + : t('manage.addressNotVerifiedNonOwner')} +
+ {isOwner ? ( + + {t('profile.verifyWalletAddress')} + + ) : ( + + )} +
+
+ } + > + +
+ + ) : ( + + )} + + ); + + return ( +
+ {filteredVersions && Object.values(filteredVersions).length > 1 ? ( + <> + {item} + + {Object.keys(filteredVersions).map(version => ( + + + + {version} + + + ))} + + + ) : ( + + {item} + + )} +
+ ); +}; + +const isSupported = (currency: string): boolean => { + return config.VERIFICATION_SUPPORTED.includes(currency.toUpperCase()); +}; + +export default CryptoAddress; diff --git a/server/components/CryptoAddresses/index.tsx b/server/components/CryptoAddresses/index.tsx new file mode 100644 index 00000000..b2b114af --- /dev/null +++ b/server/components/CryptoAddresses/index.tsx @@ -0,0 +1,161 @@ +import KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; +import KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp'; +import Button from '@mui/material/Button'; +import Hidden from '@mui/material/Hidden'; +import type {Theme} from '@mui/material/styles'; +import {useTheme} from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import useTranslationContext from 'lib/i18n'; +import type {AllCurrenciesType} from 'lib/types/blockchain'; +import type {SerializedPublicDomainProfileData} from 'lib/types/domain'; +import type {ParsedRecords} from 'lib/types/records'; +import React, {useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import CryptoAddress from './CryptoAddress'; + +const MAX_ADDRESSES_VISIBLE = 4; + +const useStyles = makeStyles()((theme: Theme) => ({ + container: { + position: 'relative', + marginTop: theme.spacing(3), + minHeight: 35, + }, + parentRow: { + position: 'absolute', + top: 0, + left: `-${theme.spacing(2)}`, + paddingLeft: theme.spacing(2), + display: 'flex', + overflowY: 'hidden', + overflowX: 'auto', + whiteSpace: 'nowrap', + maxWidth: `calc(100% + ${theme.spacing(4)})`, + [theme.breakpoints.up('md')]: { + position: 'relative', + flexWrap: 'wrap', + top: 'initial', + left: 'initial', + paddingLeft: 'initial', + overflow: 'initial', + }, + }, + showAllButton: { + color: theme.palette.neutralShades[600], + fontSize: theme.typography.body2.fontSize, + }, +})); + +export type Props = { + records: ParsedRecords; + profileData?: SerializedPublicDomainProfileData | null; + ownerAddress?: string; + showWarning?: boolean; + domain?: string; + isOwner?: boolean; + onCryptoAddressCopied: () => void; +}; + +const CryptoAddresses: React.FC = ({ + records, + profileData, + ownerAddress, + domain, + showWarning, + isOwner, + onCryptoAddressCopied: handleCryptoAddressCopied, +}) => { + const {classes} = useStyles(); + const theme = useTheme(); + const [t] = useTranslationContext(); + const isTabletOrMobile = useMediaQuery(theme.breakpoints.down('md')); + const {addresses = {}, multicoinAddresses = {}} = records; + const [showWholeList, setShowWholeList] = useState(false); + let addressList = Object.keys(addresses); + let multicoinAddressList = Object.keys(multicoinAddresses); + const isToggleButtonVisible = + showWholeList || + addressList.length + multicoinAddressList.length > MAX_ADDRESSES_VISIBLE; + + if (!isTabletOrMobile && !showWholeList) { + addressList = addressList.slice(0, MAX_ADDRESSES_VISIBLE); + + if (addressList.length < MAX_ADDRESSES_VISIBLE) { + multicoinAddressList = multicoinAddressList.slice( + 0, + MAX_ADDRESSES_VISIBLE - addressList.length, + ); + } else { + multicoinAddressList = []; + } + } + + const handleListCollapsing = () => { + setShowWholeList(!showWholeList); + }; + + return ( + <> +
+
+ {addressList.map(curr => { + const currency = curr as AllCurrenciesType; + + return ( + + ); + })} + {multicoinAddressList.map(curr => { + const currency = curr as AllCurrenciesType; + const versions = multicoinAddresses[currency]; + + return ( + + ); + })} +
+
+ + {isToggleButtonVisible && ( + + )} + + + ); +}; + +export default CryptoAddresses; diff --git a/server/components/CustomBadges/CustomBadgesDialog.tsx b/server/components/CustomBadges/CustomBadgesDialog.tsx new file mode 100644 index 00000000..3b6df599 --- /dev/null +++ b/server/components/CustomBadges/CustomBadgesDialog.tsx @@ -0,0 +1,451 @@ +import CloseIcon from '@mui/icons-material/Close'; +import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline'; +import Avatar from '@mui/material/Avatar'; +import Button from '@mui/material/Button'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogContentText from '@mui/material/DialogContentText'; +import DialogTitle from '@mui/material/DialogTitle'; +import FormGroup from '@mui/material/FormGroup'; +import IconButton from '@mui/material/IconButton'; +import LinearProgress from '@mui/material/LinearProgress'; +import type {Theme} from '@mui/material/styles'; +import TextField from '@mui/material/TextField'; +import Typography from '@mui/material/Typography'; +import config from '@unstoppabledomains/config'; +import useTranslationContext from 'lib/i18n'; +import React, {useEffect, useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import {getBadge, getMarketplaceBadgeDetails} from 'actions/badgeActions'; +import headerPhoto from './header.png'; + +const useStyles = makeStyles()((theme: Theme) => ({ + container: { + '& .MuiDialogContent-root': { + backgroundColor: '#fff', + width: '420px', + }, + }, + + button: { + marginTop: theme.spacing(2), + width: '100%', + }, + + icon: { + marginRight: theme.spacing(1), + fontSize: 22, + }, + + headerPhoto: { + width: '100%', + resizeImage: 'cover', + padding: 0, + }, + + content: { + display: 'flex', + justifyContent: 'center', + flexFlow: 'column', + paddingTop: 0, + }, + + title: { + textAlign: 'center', + }, + + text: { + textAlign: 'center', + color: theme.palette.neutralShades[600], + fontSize: '16px', + }, + + continue: { + marginTop: 16, + justifyContent: 'center', + }, + + textField: { + marginTop: 20, + marginBottom: 8, + }, + + badgePreviewContainer: { + marginTop: 16, + background: '#FFFFFF', + boxShadow: + '0px 1px 0px #DDDDDF, 0px 0px 0px 1px #DDDDDF, 0px 8px 24px rgba(0, 0, 0, 0.08)', + borderRadius: '8px', + width: '254px', + height: '72px', + display: 'flex', + alignSelf: 'center', + padding: 16, + }, + + badgeTitle: { + marginLeft: 16, + alignSelf: 'center', + }, + + error: { + marginTop: 8, + display: 'flex', + justifyContent: 'center', + }, + + errorIcon: { + marginRight: 4, + }, + + emptyContainer: { + width: '75%', + height: '50%', + backgroundColor: 'lightgrey', + marginLeft: 8, + borderRadius: 25, + }, + progressBarContainer: { + display: 'flex', + flex: '1', + flexFlow: 'column', + }, + + firstProgressBar: { + color: 'lightgrey', + width: '65%', + height: 16, + borderRadius: 25, + marginLeft: 14, + marginTop: 2, + }, + + secondProgressBar: { + color: 'lightgrey', + width: '45%', + height: 8, + borderRadius: 25, + marginLeft: 14, + marginTop: 8, + }, + + badgeExistsText: { + marginTop: 24, + color: '#62626A', + textAlign: 'center', + }, +})); + +interface Props { + open: boolean; + handleClose: () => void; +} + +const CustomBadgesDialog: React.FC = ({open, handleClose}) => { + const [t] = useTranslationContext(); + const {cx, classes} = useStyles(); + + const [isLoading, setLoading] = useState(false); + + const [marketplaceUrlDialogOnDisplay, setMarketplaceUrlDialogOnDisplay] = + useState(false); + + const [collectionUrl, setCollectionUrl] = useState(''); + const [error, setError] = useState({ + error: false, + message: '', + disableButton: true, + exists: false, + }); + + const [badgeDetails, setBadgeDetails] = useState({ + logo: '', + name: '', + preview: false, + code: null, + }); + + const handleContinue = () => { + handleClose(); + setMarketplaceUrlDialogOnDisplay(true); + }; + + const handleSecondDialogClose = () => { + //clear out form and previews + setMarketplaceUrlDialogOnDisplay(false); + setCollectionUrl(''); + setBadgeDetails({...badgeDetails, preview: false}); + setError({error: false, message: '', disableButton: false, exists: false}); + }; + + useEffect(() => { + void (async () => { + if (collectionUrl !== '') { + try { + setLoading(true); + const response = await getMarketplaceBadgeDetails(collectionUrl); + const resp = await response.json(); + setLoading(false); + + if (response.status === 200) { + setBadgeDetails({ + ...badgeDetails, + logo: resp.logo, + name: resp.name, + preview: true, + code: resp.code, + }); + + //clear any errors from previous searches + setError({ + error: false, + message: '', + disableButton: false, + exists: false, + }); + } + + if (response.status === 400) { + setError({ + ...error, + error: true, + message: t('badges.invalid'), + disableButton: true, + }); + setBadgeDetails({ + ...badgeDetails, + preview: false, + }); + } + + if (response.status === 404) { + setError({ + ...error, + error: true, + message: t('badges.notExist'), + disableButton: true, + }); + setBadgeDetails({ + ...badgeDetails, + preview: false, + }); + } + + if (response.status === 409) { + const existingBadgeDetails = await getBadge(resp.code, true); + if (!existingBadgeDetails) { + return; + } + setError({ + error: true, + message: t('badges.alreadyExists'), + disableButton: true, + exists: true, + }); + setBadgeDetails({ + code: resp.code, + preview: true, + logo: existingBadgeDetails.badge.logo, + name: existingBadgeDetails.badge.name, + }); + } + } catch (e) { + console.error(e); + return e; + } + } + return; + })(); + }, [collectionUrl]); + + const BadgePreview = () => { + return ( +
+ + + {badgeDetails.name} + +
+ ); + }; + + const BadgeExists = () => { + return ( +
+ + {t('badges.badgeExists', {email: 'support@unstoppabledomains.com'})} + +
+ ); + }; + + const BadgeLoading = () => { + return ( +
+ +
+ + +
+
+ ); + }; + + const InitialDialog = () => { + return ( + <> + + + {'Web3 + + + theme.palette.grey[500], + }} + > + + + + + + {' '} + {t('badges.customTitle')} + + + {t('badges.customDescription')} + + + + + + + + ); + }; + + const MarketplaceUrlDialog = () => { + return ( + <> + + + + {t('badges.createWithMarketplaceUrl')} + theme.palette.grey[500], + }} + > + + + + + {t('badges.marketplaceUrlDescription')} + + + + + {error.message} + + ) + } + onBlur={e => setCollectionUrl(e.target.value)} + error={error.error} + /> + {isLoading && } + {badgeDetails.preview && !isLoading && } + {error.exists && } + + + + + + + + ); + }; + + return ( + <> + + + + ); +}; + +export default CustomBadgesDialog; diff --git a/server/components/CustomBadges/header.png b/server/components/CustomBadges/header.png new file mode 100644 index 0000000000000000000000000000000000000000..8c712494b984f1847ba4a767b603712ac4525d6b GIT binary patch literal 91664 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 literal 0 HcmV?d00001 diff --git a/server/components/CustomBadges/index.tsx b/server/components/CustomBadges/index.tsx new file mode 100644 index 00000000..788a0ef2 --- /dev/null +++ b/server/components/CustomBadges/index.tsx @@ -0,0 +1,73 @@ +import LeaderboardIcon from '@mui/icons-material/Leaderboard'; +import VolunteerActivismIcon from '@mui/icons-material/VolunteerActivism'; +import Button from '@mui/material/Button'; +import Grid from '@mui/material/Grid'; +import type {Theme} from '@mui/material/styles'; +import config from '@unstoppabledomains/config'; +import useTranslationContext from 'lib/i18n'; +import React, {useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import CustomBadgesDialog from './CustomBadgesDialog'; + +const useStyles = makeStyles()((theme: Theme) => ({ + buttonContainer: { + marginRight: theme.spacing(1), + }, + button: { + color: theme.palette.primary.main, + fontWeight: theme.typography.fontWeightMedium, + fontSize: theme.typography.body2.fontSize, + lineHeight: 1.5, + }, + icon: { + marginRight: theme.spacing(1), + }, +})); + +const CustomBadges: React.FC = () => { + const {classes} = useStyles(); + const [open, setOpen] = useState(false); + const [t] = useTranslationContext(); + + const handleClick = () => { + setOpen(true); + }; + + const handleClose = () => { + setOpen(false); + }; + + return ( + + + + + + + + + + ); +}; + +export default CustomBadges; diff --git a/server/components/Domain/DomainListModal.tsx b/server/components/Domain/DomainListModal.tsx new file mode 100644 index 00000000..8562192e --- /dev/null +++ b/server/components/Domain/DomainListModal.tsx @@ -0,0 +1,87 @@ +import type {Theme} from '@mui/material/styles'; +import Modal from 'components/Modal'; +import type {Web3Dependencies} from 'lib/types/web3'; +import React, {useEffect, useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import DomainProfileList from './DomainProfileList'; + +const useStyles = makeStyles()((theme: Theme) => ({ + titleStyle: { + color: 'inherit', + alignSelf: 'center', + }, + contentContainer: { + marginTop: theme.spacing(2), + width: '100%', + }, +})); + +type ModalProps = { + open: boolean; + onClose: () => void; + title: string; + showNumber?: boolean; + retrieveDomains: ( + cursor?: number, + ) => Promise<{domains: string[]; cursor?: number}>; + setWeb3Deps?: (value: Web3Dependencies | undefined) => void; +}; + +export const DomainListModal = (props: ModalProps) => { + const {classes} = useStyles(); + const [domains, setDomains] = useState([]); + const [cursor, setCursor] = useState(); + const [isLoading, setIsLoading] = useState(true); + const [retrievedAll, setRetrievedAll] = useState(false); + + useEffect(() => { + if (props.open) { + // retrieve initial list of domains on open + void handleRetrieveDomains(); + } else { + // clear domain state on close + setDomains([]); + setRetrievedAll(false); + setCursor(undefined); + } + }, [props.open]); + + const handleRetrieveDomains = async () => { + if (retrievedAll) { + return; + } + setIsLoading(true); + const resp = await props.retrieveDomains(cursor); + if (resp.domains.length) { + setDomains(d => [...d, ...resp.domains]); + setCursor(resp.cursor); + if (resp.domains.length < 100) { + setRetrievedAll(true); + } + } + setIsLoading(false); + }; + + return ( + +
+ +
+
+ ); +}; diff --git a/server/components/Domain/DomainPreview.tsx b/server/components/Domain/DomainPreview.tsx new file mode 100644 index 00000000..759dddae --- /dev/null +++ b/server/components/Domain/DomainPreview.tsx @@ -0,0 +1,294 @@ +import ChatIcon from '@mui/icons-material/ChatOutlined'; +import Avatar from '@mui/material/Avatar'; +import Button from '@mui/material/Button'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import CardHeader from '@mui/material/CardHeader'; +import Grid from '@mui/material/Grid'; +import Popover from '@mui/material/Popover'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import {useFeatureFlags} from 'actions/featureFlagActions'; +import useUnstoppableMessaging from 'components/Chat/hooks/useUnstoppableMessaging'; +import {splitDomain} from 'lib/domain/format'; +import getImageUrl from 'lib/domain/getImageUrl'; +import useTranslationContext from 'lib/i18n'; +import type {SerializedPublicDomainProfileData} from 'lib/types/domain'; +import {DomainProfileKeys, DomainSuffixes} from 'lib/types/domain'; +import type {Web3Dependencies} from 'lib/types/web3'; +import React, {useEffect, useState} from 'react'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import FollowButton from './FollowButton'; + +const useStyles = makeStyles<{size: number}>()((theme: Theme, {size}) => ({ + popover: { + pointerEvents: 'none', + }, + popoverContent: { + pointerEvents: 'auto', + }, + round: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + width: `${size}px !important`, + height: `${size}px !important`, + borderRadius: '50%', + border: `1px solid ${theme.palette.neutralShades[200]}`, + backgroundColor: 'white', + [theme.breakpoints.up('sm')]: { + width: 12, + height: 12, + }, + marginRight: '2px', + }, + actionContainer: { + display: 'flex', + marginLeft: theme.spacing(-1), + marginRight: theme.spacing(-1), + marginBottom: theme.spacing(-2), + }, + actionIcon: { + marginLeft: theme.spacing(0.5), + color: theme.palette.neutralShades[600], + }, + actionButton: { + width: '100%', + color: '#7d7d7d', + borderColor: '#7d7d7d', + marginTop: theme.spacing(2), + '&:hover': { + borderColor: 'initial', + }, + }, + contentContainer: { + width: '250px', + marginTop: theme.spacing(-2.5), + }, + footerContainer: { + display: 'flex', + justifyContent: 'space-between', + }, + contentItem: { + display: 'flex', + marginBottom: theme.spacing(1), + }, + followerCount: { + color: theme.palette.neutralShades[600], + marginRight: theme.spacing(1), + }, + avatar: { + marginRight: theme.spacing(1), + color: theme.palette.primary.main, + backgroundColor: 'white', + border: '2px solid white', + cursor: 'pointer', + width: '75px', + height: '75px', + }, + domainName: { + cursor: 'pointer', + }, + greyBg: { + backgroundColor: '#F6F6F6', + }, +})); + +export type Props = { + domain: string; + size: number; + setWeb3Deps?: (value: Web3Dependencies | undefined) => void; +}; + +export const DomainPreview: React.FC = ({domain, size, setWeb3Deps}) => { + const [t] = useTranslationContext(); + const {classes} = useStyles({size}); + const [profileData, setProfileData] = + useState(); + const {chatUser, setOpenChat} = useUnstoppableMessaging(); + const {data: featureFlags} = useFeatureFlags(); + const [authAddress, setAuthAddress] = useState(); + const [authDomain, setAuthDomain] = useState(); + const [anchorEl, setAnchorEl] = React.useState(null); + const popoverId = `mouse-popover-${domain}`; + const {extension} = splitDomain(domain); + const avatarPath = + extension === DomainSuffixes.Ens + ? getImageUrl('/domains/ens-logo.svg') + : `${config.UNSTOPPABLE_METADATA_ENDPOINT}/image-src/${domain}?withOverlay=false`; + const isMouseOver = Boolean(anchorEl); + + // read from local storage on page load + useEffect(() => { + setAuthAddress( + localStorage.getItem(DomainProfileKeys.AuthAddress) || undefined, + ); + setAuthDomain( + localStorage.getItem(DomainProfileKeys.AuthDomain) || undefined, + ); + }, []); + + // fetch profile data only when popup is requested + useEffect(() => { + if (!isMouseOver) { + return; + } + const fetchData = async () => { + try { + const r = await fetch( + `${config.PROFILE.HOST_URL}/public/${domain}?fields=profile`, + ); + const profileJSON = await r.json(); + if (profileJSON) { + setProfileData(profileJSON); + } + } catch (e) { + console.warn('error fetching profile data', String(e)); + } + }; + void fetchData(); + }, [domain, isMouseOver]); + + const handlePopoverOpen = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handlePopoverClose = () => { + setAnchorEl(null); + }; + + const handleViewProfile = () => { + window.location.href = `${config.UD_ME_BASE_URL}/${domain}`; + }; + + return ( +
+ + + + + + + } + title={ + + {domain} + + } + subheader={profileData?.profile?.displayName} + /> + +
+
+ + {profileData?.profile?.description} + +
+
+
+ + {profileData?.social?.followingCount || 0}{' '} + {t('profile.following')} + + + {profileData?.social?.followerCount || 0}{' '} + {t('profile.followers')} + +
+
+
+
+ {setWeb3Deps && ( + + + {authDomain && + authAddress && + authDomain.toLowerCase() !== domain.toLowerCase() && ( +
+ +
+ )} +
+ {featureFlags?.variations + ?.ecommerceServiceUsersEnableChat && ( + + {chatUser && + authDomain && + authAddress && + authDomain.toLowerCase() !== domain.toLowerCase() && ( + + )} + + )} +
+ )} +
+
+
+
+
+ ); +}; diff --git a/server/components/Domain/DomainProfileList.tsx b/server/components/Domain/DomainProfileList.tsx new file mode 100644 index 00000000..539e27f4 --- /dev/null +++ b/server/components/Domain/DomainProfileList.tsx @@ -0,0 +1,176 @@ +import KeyboardArrowRightOutlinedIcon from '@mui/icons-material/KeyboardArrowRightOutlined'; +import CircularProgress from '@mui/material/CircularProgress'; +import Pagination from '@mui/material/Pagination'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import type {Web3Dependencies} from 'lib/types/web3'; +import React, {useState} from 'react'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import {DomainPreview} from './DomainPreview'; + +const useStyles = makeStyles()((theme: Theme) => ({ + root: { + ...theme.containers.modalContent, + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + minWidth: 'initial', + gap: theme.spacing(2), + }, + loaderContainer: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + height: '5em', + }, + titleStyle: { + color: 'inherit', + alignSelf: 'center', + }, + number: { + color: `${theme.palette.neutralShades[400]} !important`, + fontWeight: 600, + fontSize: 18, + marginRight: theme.spacing(2), + }, + row: { + display: 'flex', + justifyContent: 'space-between', + textDecoration: 'none !important', + borderBottom: `1px dashed ${theme.palette.neutralShades[100]}`, + alignItems: 'center', + cursor: 'pointer', + paddingTop: theme.spacing(1), + paddingBottom: theme.spacing(1), + color: theme.palette.neutralShades[800], + '&:visited': { + color: theme.palette.neutralShades[800], + }, + '&:hover': { + '& p': { + color: theme.palette.primary.main, + }, + '& svg': { + color: theme.palette.primary.main, + }, + }, + }, + rowFirst: { + borderTop: `0px`, + }, + + leftContent: { + display: 'flex', + alignItems: 'center', + '& img': { + width: '40px !important', + height: '40px !important', + }, + }, + domainText: { + fontWeight: 600, + marginLeft: theme.spacing(1), + fontSize: 14, + color: 'initial', + }, + arrowRightIcon: { + color: theme.palette.neutralShades[400], + }, + paginationContainer: { + display: 'flex', + justifyContent: 'center', + }, +})); + +type Props = { + domains: string[]; + isLoading: boolean; + showNumber?: boolean; + itemsPerPage?: number; + onLastPage?: () => void; + withPagination?: boolean; + setWeb3Deps?: (value: Web3Dependencies | undefined) => void; +}; + +const DomainProfileList: React.FC = ({ + domains, + isLoading, + showNumber = false, + itemsPerPage = 7, + withPagination = false, + setWeb3Deps, + onLastPage, +}) => { + const {classes, cx} = useStyles(); + const [page, setPage] = useState(1); + const totalPages = Math.ceil(domains.length / itemsPerPage); + + const handlePageChange = (e: React.ChangeEvent, newPage: number) => { + setPage(newPage); + if (onLastPage && newPage === totalPages) { + onLastPage(); + } + }; + + return ( +
+ {isLoading ? ( +
+ +
+ ) : ( + domains + .slice( + (page - 1) * itemsPerPage, + (page - 1) * itemsPerPage + itemsPerPage, + ) + .map((domain, i) => ( + <> + +
+ {showNumber && ( + + {(page - 1) * itemsPerPage + i + 1} + + )} + + + {domain} + +
+ +
+ + )) + )} +
+ {withPagination && !isLoading && domains.length / itemsPerPage > 1 && ( + + )} +
+
+ ); +}; + +export default DomainProfileList; diff --git a/server/components/Domain/FollowButton.tsx b/server/components/Domain/FollowButton.tsx new file mode 100644 index 00000000..fae7c09e --- /dev/null +++ b/server/components/Domain/FollowButton.tsx @@ -0,0 +1,164 @@ +import CheckIcon from '@mui/icons-material/Check'; +import PersonAddIcon from '@mui/icons-material/PersonAddOutlined'; +import PersonRemoveIcon from '@mui/icons-material/PersonRemoveOutlined'; +import Button from '@mui/material/Button'; +import IconButton from '@mui/material/IconButton'; +import Tooltip from '@mui/material/Tooltip'; +import type {Theme} from '@mui/material/styles'; +import { + followDomainProfile, + unfollowDomainProfile, + useDomainProfileFollowStatus, +} from 'actions/domainProfile'; +import {ProfileManager} from 'components/Wallet/ProfileManager'; +import useTranslationContext from 'lib/i18n'; +import type {Web3Dependencies} from 'lib/types/web3'; +import React, {useEffect, useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles<{color?: string}>()((theme: Theme, {color}) => ({ + followButton: { + borderColor: color || 'white', + color: color || 'white', + '&:hover': { + borderColor: 'initial', + }, + width: 'inherit', + }, + followButtonSmall: { + marginLeft: theme.spacing(0.5), + color: color || 'white', + }, + smallHidden: { + [theme.breakpoints.down('sm')]: { + display: 'none', + }, + }, +})); + +type Props = { + domain: string; + authDomain: string; + authAddress: string; + color?: string; + handleLogin?: () => void; + onFollowClick?: () => void; + onUnfollowClick?: () => void; + setWeb3Deps: (value: Web3Dependencies | undefined) => void; + small?: boolean; +}; + +const FollowButton: React.FC = ({ + authDomain, + domain, + authAddress, + color, + setWeb3Deps, + handleLogin, + onFollowClick, + onUnfollowClick, + small, +}) => { + const {classes} = useStyles({color}); + const {data: followStatus, isLoading} = useDomainProfileFollowStatus( + authDomain, + domain, + ); + const [isFollowing, setIsFollowing] = useState( + followStatus?.isFollowing ?? false, + ); + const [followClicked, setFollowClicked] = useState(false); + const [t] = useTranslationContext(); + + useEffect(() => { + // Update the isFollowing state when isLoading becomes false + if ( + !isLoading && + followStatus && + followStatus.followerDomain === authDomain && + followStatus.followeeDomain === domain + ) { + setIsFollowing(followStatus.isFollowing); + } + }, [isLoading, followStatus]); + + const handleClick = () => { + if (!authDomain || !authAddress) { + if (handleLogin) { + handleLogin(); + } + return; + } + setFollowClicked(true); + }; + + const handleCallback = async (signature: string, expires: string) => { + setIsFollowing(!isFollowing); + if (isFollowing) { + await unfollowDomainProfile(authDomain, domain, { + signature, + expires, + }); + if (onUnfollowClick) onUnfollowClick(); + } else { + await followDomainProfile(authDomain, domain, { + signature, + expires, + }); + if (onFollowClick) onFollowClick(); + } + }; + + return ( + <> + {small ? ( + + + {isFollowing ? ( + + ) : ( + + )} + + + ) : ( + + )} + + + ); +}; + +export default FollowButton; diff --git a/server/components/Domain/ProfilePicture.tsx b/server/components/Domain/ProfilePicture.tsx new file mode 100644 index 00000000..e12e45e5 --- /dev/null +++ b/server/components/Domain/ProfilePicture.tsx @@ -0,0 +1,311 @@ +import Box from '@mui/material/Box'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import {useFeatureFlags} from 'actions/featureFlagActions'; +import useTranslationContext from 'lib/i18n'; +import React, {useEffect, useState} from 'react'; + +import config from '@unstoppabledomains/config'; +import ProfilePlaceholder from '@unstoppabledomains/ui-kit/icons/ProfilePlaceholder'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import ProfileQrCode from './ProfileQrCode'; + +export const PROFILE_PICTURE_SIZE_DESKTOP = 172; +export const PROFILE_PICTURE_SIZE_MOBILE = 132; + +const useStyles = makeStyles()((theme: Theme) => ({ + round: { + zIndex: 1, + position: 'relative', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + width: PROFILE_PICTURE_SIZE_MOBILE, + height: PROFILE_PICTURE_SIZE_MOBILE, + borderRadius: '50%', + border: `6px solid ${theme.palette.common.white} !important`, + backgroundColor: theme.palette.white, + [theme.breakpoints.up('sm')]: { + width: PROFILE_PICTURE_SIZE_DESKTOP, + height: PROFILE_PICTURE_SIZE_DESKTOP, + }, + }, + mainContainer: { + position: 'relative', + width: PROFILE_PICTURE_SIZE_MOBILE, + height: PROFILE_PICTURE_SIZE_MOBILE, + [theme.breakpoints.up('sm')]: { + width: PROFILE_PICTURE_SIZE_DESKTOP, + height: PROFILE_PICTURE_SIZE_DESKTOP, + }, + }, + udBlueBadge: { + position: 'absolute', + bottom: 0, + right: 0, + zIndex: 2, + cursor: 'pointer', + img: { + width: 30, + [theme.breakpoints.up('sm')]: { + width: 40, + }, + }, + }, + udBlueTooltip: { + maxWidth: 360, + padding: theme.spacing(1, 2), + [theme.breakpoints.down('sm')]: { + display: 'none', + }, + }, + udBlueTooltipText: { + color: theme.palette.white, + fontSize: 13, + fontWeight: theme.typography.fontWeightBold, + lineHeight: 1.53, + }, + udBlueTooltipLink: { + fontSize: 13, + fontWeight: theme.typography.fontWeightBold, + lineHeight: 1.53, + color: theme.palette.neutralShades[400], + textDecorationLine: 'underline', + }, + theCard: { + width: '100%', + height: '100%', + position: 'absolute', + }, + theCardShow: { + width: '100%', + height: '100%', + position: 'absolute', + transformStyle: 'preserve-3d', + transition: 'all .2s ease', + transform: 'rotateY(180deg)', + [theme.breakpoints.up('md')]: { + position: 'relative', + width: PROFILE_PICTURE_SIZE_DESKTOP, + }, + }, + theCardHover: { + width: '100%', + height: '100%', + position: 'absolute', + transformStyle: 'preserve-3d', + transition: 'all .2s ease', + '&:hover': { + transform: 'rotateY(180deg)', + }, + [theme.breakpoints.up('md')]: { + position: 'relative', + width: PROFILE_PICTURE_SIZE_DESKTOP, + }, + }, + theFront: { + position: 'absolute', + width: '100%', + height: '100%', + backfaceVisibility: 'hidden', + display: 'flex', + justifyContent: 'center', + alignItem: 'center', + [theme.breakpoints.up('md')]: { + justifyContent: 'start', + }, + }, + theBack: { + position: 'absolute', + width: '100%', + height: '100%', + backfaceVisibility: 'hidden', + display: 'flex', + justifyContent: 'center', + alignItem: 'center', + transform: 'rotateY(180deg)', + [theme.breakpoints.up('md')]: { + justifyContent: 'start', + }, + }, + profilePlaceholderContainer: { + backgroundColor: theme.palette.primary.main, + }, + profilePlaceholder: { + fontSize: PROFILE_PICTURE_SIZE_MOBILE, + [theme.breakpoints.up('md')]: { + fontSize: `calc(${PROFILE_PICTURE_SIZE_DESKTOP}px + 4px)`, + }, + }, + nftPFPstyle: { + clipPath: + 'polygon(92.32051% 40%, 93.79385% 43.1596%, 94.69616% 46.52704%, 95% 50%, 94.69616% 53.47296%, 93.79385% 56.8404%, 92.32051% 60%, 79.82051% 81.65064%, 77.82089% 84.50639%, 75.35575% 86.97152%, 72.5% 88.97114%, 69.3404% 90.44449%, 65.97296% 91.34679%, 62.5% 91.65064%, 37.5% 91.65064%, 34.02704% 91.34679%, 30.6596% 90.44449%, 27.5% 88.97114%, 24.64425% 86.97152%, 22.17911% 84.50639%, 20.17949% 81.65064%, 7.67949% 60%, 6.20615% 56.8404%, 5.30384% 53.47296%, 5% 50%, 5.30384% 46.52704%, 6.20615% 43.1596%, 7.67949% 40%, 20.17949% 18.34936%, 22.17911% 15.49361%, 24.64425% 13.02848%, 27.5% 11.02886%, 30.6596% 9.55551%, 34.02704% 8.65321%, 37.5% 8.34936%, 62.5% 8.34936%, 65.97296% 8.65321%, 69.3404% 9.55551%, 72.5% 11.02886%, 75.35575% 13.02848%, 77.82089% 15.49361%, 79.82051% 18.34936%)', + position: 'relative', + }, + nftPFPstyleBorder: { + clipPath: + 'polygon(92.32051% 40%, 93.79385% 43.1596%, 94.69616% 46.52704%, 95% 50%, 94.69616% 53.47296%, 93.79385% 56.8404%, 92.32051% 60%, 79.82051% 81.65064%, 77.82089% 84.50639%, 75.35575% 86.97152%, 72.5% 88.97114%, 69.3404% 90.44449%, 65.97296% 91.34679%, 62.5% 91.65064%, 37.5% 91.65064%, 34.02704% 91.34679%, 30.6596% 90.44449%, 27.5% 88.97114%, 24.64425% 86.97152%, 22.17911% 84.50639%, 20.17949% 81.65064%, 7.67949% 60%, 6.20615% 56.8404%, 5.30384% 53.47296%, 5% 50%, 5.30384% 46.52704%, 6.20615% 43.1596%, 7.67949% 40%, 20.17949% 18.34936%, 22.17911% 15.49361%, 24.64425% 13.02848%, 27.5% 11.02886%, 30.6596% 9.55551%, 34.02704% 8.65321%, 37.5% 8.34936%, 62.5% 8.34936%, 65.97296% 8.65321%, 69.3404% 9.55551%, 72.5% 11.02886%, 75.35575% 13.02848%, 77.82089% 15.49361%, 79.82051% 18.34936%)', + position: 'relative', + height: `calc(${PROFILE_PICTURE_SIZE_DESKTOP}px + 12px)`, + width: `calc(${PROFILE_PICTURE_SIZE_DESKTOP}px + 12px)`, + [theme.breakpoints.down('sm')]: { + width: `calc(${PROFILE_PICTURE_SIZE_MOBILE}px + 12px)`, + height: `calc(${PROFILE_PICTURE_SIZE_MOBILE}px + 12px)`, + }, + }, +})); + +export type Props = { + src?: string | null; + domain: string; + imageType: string | undefined; + handleUploadError?: (message: string) => void; + hasUdBlueBadge?: boolean; +}; + +const ProfilePicture: React.FC = ({ + src, + domain, + imageType, + hasUdBlueBadge, +}) => { + const [t] = useTranslationContext(); + const {classes, cx} = useStyles(); + const [isNft, setIsNft] = useState(false); + const {data: featureFlags} = useFeatureFlags(false, domain); + const showQR = featureFlags.variations?.ecommerceNftQrCode; + + useEffect(() => { + setIsNft(() => imageType === 'onChain'); + }); + + const badgeTooltip = ( + <> + + {t('profile.udBlueTooltip')} + + + {t('profile.learnMore')} + + + ); + return ( +
+ {hasUdBlueBadge && ( + + + + + + )} +
+
+ {src && imageType !== 'default' ? ( + <> + {showQR && ( +
+
+ +
+
+ )} +
+
+ {t('manage.domainProfileImage')} +
+
+ + ) : ( + <> +
+
+ +
+
+ {showQR && ( +
+
+ +
+
+ )} + + )} +
+
+
+ ); +}; + +export default ProfilePicture; diff --git a/server/components/Domain/ProfileQrCode.tsx b/server/components/Domain/ProfileQrCode.tsx new file mode 100644 index 00000000..eb28febf --- /dev/null +++ b/server/components/Domain/ProfileQrCode.tsx @@ -0,0 +1,75 @@ +import type {Theme} from '@mui/material/styles'; +import React from 'react'; +import {QRCode} from 'react-qrcode-logo'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const encodedUdLogo: string = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYyIiBpZD0idWQtbG9nbyIgaGVpZ2h0PSIxNDgiIHZpZXdCb3g9IjAgMCAxNjIgMTQ4IiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBkPSJNMC4zMzMzNDQgMTI0LjU3NUwwLjM0MzQyNyAxMjQuNTY3TDAuMzYzNTk0IDEyNC41NTJMMC4zMzMzNDQgMTI0LjU3NUwwLjM5MTMyMyAxMjQuNTMyTDMwLjgxNTYgMTAxLjY0NEMzMC42NjE5IDEwMC4wMzcgMzAuNTgzMyA5OC40MDY4IDMwLjU4MzMgOTYuNzU4NlY1Ni4yOTg5TDYwLjgzMzMgMzkuNjA5MlY3OS4wNTc1TDk2LjEyNSA1Mi41MDU4VjIwLjEzOEwxMzEuNDE3IDAuNjY2Njg3VjI1Ljk1MTVMMTYxLjY2NyAzLjE5NTQyVjguMjUyODlMMTMxLjQxNyAzMC4wNjA3VjM0LjE2OTlMMTYxLjY2NyAxMy4zMTA0VjE4LjM2NzhMMTMxLjQxNyAzOC4yNzkxVjQyLjM4ODNMMTYxLjY2NyAyMy40MjUzVjI4LjQ4MjhMMTMxLjQxNyA0Ni40OTc1VjUwLjYwOTJMMTYxLjY2NyAzMy41NDAzVjM4LjU5NzdMMTMxLjQxNyA1NC43MTg0VjU4LjgyNTFMMTYxLjY2NyA0My42NTUyVjQ4LjcxMjdMMTMxLjQxNyA2Mi45MzQzVjY3LjA0MzVMMTYxLjY2NyA1My43NzAxVjU4LjgyNzZMMTMxLjQxNyA3MS4xNTI3Vjk2Ljc1ODZDMTMxLjQxNyAxMjQuNjkgMTA4Ljg0NCAxNDcuMzMzIDgxIDE0Ny4zMzNDNTguMjIyMiAxNDcuMzMzIDM4Ljk3MjQgMTMyLjE4MSAzMi43MjEyIDExMS4zNzZMMC4zNTM1MSAxMjQuNTY1TDAuMzMzMzQ0IDEyNC41NzVaTTMyLjIxNzggMTA5LjU4MUwwLjM3MzY3NyAxMjQuNTUyTDAuMzYxMDczIDEyNC41NkwzMi40NTkzIDExMC40NzRDMzIuMzc2MiAxMTAuMTc3IDMyLjI5NTcgMTA5Ljg4IDMyLjIxNzggMTA5LjU4MVpNMzEuMTM5MiAxMDQuMjk0TDAuMzkxMzIzIDEyNC41MzJMMC4zNjM1OTQgMTI0LjU1MkwzMS4yNzgyIDEwNS4xNzRDMzEuMjI5MyAxMDQuODgyIDMxLjE4MyAxMDQuNTg4IDMxLjEzOTIgMTA0LjI5NFpNMzEuNzkxMiAxMDcuODEyTDAuNDE0MDEgMTI0LjUzMkwzMS45OTU0IDEwOC42OTRDMzEuOTI0OCAxMDguNDAxIDMxLjg1NjcgMTA4LjEwNyAzMS43OTEyIDEwNy44MTJaTTMwLjkwODEgMTAyLjUzMUwwLjQyOTEzNSAxMjQuNTA2TDMxLjAxNiAxMDMuNDE0QzMwLjk3NzUgMTAzLjEyIDMwLjk0MTUgMTAyLjgyNiAzMC45MDgxIDEwMi41MzFaTTk2LjEyNSA4NS41MzYxTDYxLjA5NSA5OS44MTI3QzYyLjUzNzYgMTA4LjEzMyA2OS43NzE5IDExNC40NiA3OC40NzkyIDExNC40NkM4OC4yMjQ3IDExNC40NiA5Ni4xMjUgMTA2LjUzNSA5Ni4xMjUgOTYuNzU4NlY4NS41MzYxWk05Ni4xMjUgNzkuNTI3OEw2MC44MzMzIDk2LjEyMzlWOTYuNzU4NkM2MC44MzMzIDk3LjE3NjMgNjAuODQ3OCA5Ny41OTA3IDYwLjg3NjEgOTguMDAxMUw5Ni4xMjUgODIuNTMyVjc5LjUyNzhaTTk2LjEyNSA3My41MjcxTDYwLjgzMzMgOTIuMzMzNFY5NC4yMjc0TDk2LjEyNSA3Ni41MjYyVjczLjUyNzFaTTk2LjEyNSA2Ny41MTYzTDYwLjgzMzMgODguNTM3N1Y5MC40MzY4TDk2LjEyNSA3MC41MjNWNjcuNTE2M1pNOTYuMTI1IDYxLjUxMDZMNjAuODMzMyA4NC43NDQ2Vjg2LjY0MTJMOTYuMTI1IDY0LjUxNDdWNjEuNTEwNlpNOTYuMTI1IDU1LjUwNzRMNjAuODMzMyA4MC45NTRWODIuODQ4MUw5Ni4xMjUgNTguNTA5VjU1LjUwNzRaTTAuMzYxMDczIDEyNC41NkwwLjM1MzUxIDEyNC41NjVMMC4zNzM2NzcgMTI0LjU1MkwzMS42MDM1IDEwNi45MzFDMzEuNTQzOSAxMDYuNjM4IDMxLjQ4NjkgMTA2LjM0NSAzMS40MzI0IDEwNi4wNUwwLjM2MzU5NCAxMjQuNTUyTDAuMzUzNTEgMTI0LjU2NUwwLjM0MzQyNyAxMjQuNTY3TDAuMzYxMDczIDEyNC41NloiIGZpbGw9ImJsYWNrIi8+Cjwvc3ZnPgo='; + +interface ProfileQrCodeProps { + className?: string; + domain: string; +} + +const useStyles = makeStyles()((theme: Theme) => ({ + profileQrCodeContainer: { + display: 'flex', + justifyContent: 'center', + zIndex: 1, + position: 'relative', + pointerEvents: 'none', + overflow: 'hidden', + }, + container: { + [theme.breakpoints.down('sm')]: { + display: 'none', + }, + }, + container_mobile: { + [theme.breakpoints.up('sm')]: { + display: 'none', + }, + }, +})); + +const ProfileQrCode = ({className, domain}: ProfileQrCodeProps) => { + const {classes, cx} = useStyles(); + return ( +
+
+ +
+
+ +
+
+ ); +}; + +export default ProfileQrCode; diff --git a/server/components/Domain/ShareMenu.tsx b/server/components/Domain/ShareMenu.tsx new file mode 100644 index 00000000..1dca49f3 --- /dev/null +++ b/server/components/Domain/ShareMenu.tsx @@ -0,0 +1,209 @@ +import IosShareIcon from '@mui/icons-material/IosShare'; +import LinkIcon from '@mui/icons-material/Link'; +import QrCodeIcon from '@mui/icons-material/QrCode2'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Divider from '@mui/material/Divider'; +import Menu from '@mui/material/Menu'; +import MenuItem from '@mui/material/MenuItem'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import CopyToClipboard from 'components/CopyToClipboard'; +import Link from 'components/Link'; +import formSocialMediaLink from 'lib/formSocialMediaLink'; +import useTranslationContext from 'lib/i18n'; +import React, {useState} from 'react'; + +import config from '@unstoppabledomains/config'; +import FacebookIcon from '@unstoppabledomains/ui-kit/icons/FacebookCircle'; +import TwitterXIcon from '@unstoppabledomains/ui-kit/icons/TwitterX'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + link: { + '&:hover': { + textDecoration: 'none', + }, + }, + linkIcon: { + marginRight: theme.spacing(1), + }, + copyLinkText: { + fontWeight: theme.typography.fontWeightMedium, + color: theme.palette.common.black, + }, + twitterIcon: { + marginLeft: 2, + fill: '#000', + }, + facebookIcon: { + fill: '#1877F2', + }, + facebookMessengerIcon: { + display: 'flex', + marginRight: 10, + }, + menuList: { + padding: theme.spacing(1), + }, + menuItem: { + paddingTop: theme.spacing(1.5), + paddingBottom: theme.spacing(1.5), + borderRadius: theme.shape.borderRadius, + transition: theme.transitions.create('background-color'), + }, +})); + +export type Props = { + domain: string; + onProfileLinkCopied: () => void; + toggleQrCode: () => void; + displayQrCode: boolean; + className?: string; + isBadge?: boolean; +}; + +type ShareSocialMedia = 'twitter' | 'facebook' | 'facebook-messenger'; + +const ShareMenu: React.FC = ({ + domain, + onProfileLinkCopied: handleProfileLinkCopied, + className, + toggleQrCode, + displayQrCode, + isBadge, +}) => { + const [t] = useTranslationContext(); + const {classes, cx} = useStyles(); + const [anchorEl, setAnchorEl] = useState(null); + + const linkUrl = `${config.UD_ME_BASE_URL}/${ + isBadge ? 'badge/' : '' + }${domain}`; + const twitterText = `Sharing a ${ + isBadge ? '#Web3Badge' : '#Web3Domain profile' + } made with @UnstoppableWeb! Check it out and join the community that's building the future of web3.\n${linkUrl}`; + const facebookText = `Sharing a ${ + isBadge ? '#Web3Badge' : '#Web3Domain profile' + } made with Unstoppable Domains! Check it out and join the community that's building the future of web3.`; + + const socialMedias: { + media: ShareSocialMedia; + href: string; + label: string; + icon: React.ReactNode; + }[] = [ + { + media: 'twitter', + href: formSocialMediaLink({ + type: 'twitter', + text: twitterText, + }), + label: t('common.twitter'), + icon: ( + + ), + }, + { + media: 'facebook', + href: formSocialMediaLink({ + type: 'facebook', + url: linkUrl, + text: facebookText, + }), + label: t('common.facebook'), + icon: ( + + ), + }, + ]; + + const handleClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + const handleQrCode = () => { + toggleQrCode(); + handleClose(); + }; + + return ( + <> + + + + + + + + {t('profile.copyLink')} + + + + + + + + + {!displayQrCode + ? t('profile.showQRCode') + : t('profile.hideQRCode')} + + + + + + + {socialMedias.map(media => ( + + + + {media.icon} + + {media.label} + + + + + ))} + + + ); +}; + +export default ShareMenu; diff --git a/server/components/Domain/ShowHideButton.tsx b/server/components/Domain/ShowHideButton.tsx new file mode 100644 index 00000000..5d2f7680 --- /dev/null +++ b/server/components/Domain/ShowHideButton.tsx @@ -0,0 +1,132 @@ +import AddCircleOutlineIcon from '@mui/icons-material/AddCircleOutline'; +import RemoveCircleOutlineIcon from '@mui/icons-material/RemoveCircleOutline'; +import Stack from '@mui/material/Stack'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import {ProfileManager} from 'components/Wallet/ProfileManager'; +import useTranslationContext from 'lib/i18n'; +import type {Web3Dependencies} from 'lib/types/web3'; +import {useSnackbar} from 'notistack'; +import React, {useState} from 'react'; + +import config from '@unstoppabledomains/config'; + +export interface Props { + showDomain: boolean; + setShowDomain: (value: boolean) => void; + setWeb3Deps: (value: Web3Dependencies | undefined) => void; + recordName?: string; + ownerAddress: string; + domain: string; + showText?: string; + hideText?: string; + tooltip?: string; +} + +const ShowHideButton: React.FC = ({ + showDomain, + setShowDomain, + setWeb3Deps, + recordName = 'showDomainSuggestion', + ownerAddress, + domain, + showText, + hideText, + tooltip, +}) => { + const [t] = useTranslationContext(); + const {enqueueSnackbar} = useSnackbar(); + const [saveClicked, setSaveClicked] = useState(false); + const [record, setRecord] = useState>({}); + const handleSaveChanges = ( + savedRecords: Record, + ) => { + setShowDomain(savedRecords[recordName] as boolean); + enqueueSnackbar(t('domainSuggestion.saveSuccess'), { + variant: 'success', + }); + }; + + const handleClick = () => { + if (!saveClicked) { + setRecord({[recordName]: !showDomain}); + setSaveClicked(true); + } + }; + + const handleSaveFailed = () => { + enqueueSnackbar(t('domainSuggestion.saveFailed'), { + variant: 'error', + }); + }; + + const handleSaveProfile = async (signature: string, expiry: string) => { + const domainNftUrl = `${config.PROFILE.HOST_URL}/user/${domain}`; + await fetch(domainNftUrl, { + method: 'POST', + mode: 'cors', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'x-auth-domain': domain, + 'x-auth-expires': expiry, + 'x-auth-signature': signature, + }, + body: JSON.stringify(record), + }); + + // wait a moment before reloading + await new Promise(resolve => setTimeout(resolve, 1000)); + + // clear state values + handleSaveChanges(record); + }; + + return ( + <> + + {showDomain ? ( + + ) : ( + + )} + { + + + {showDomain + ? hideText || t('domainSuggestion.hide') + : showText || t('domainSuggestion.show')} + + + } + + + + ); +}; + +export default ShowHideButton; diff --git a/server/components/Domain/SocialAccountCard.tsx b/server/components/Domain/SocialAccountCard.tsx new file mode 100644 index 00000000..a6a5b12c --- /dev/null +++ b/server/components/Domain/SocialAccountCard.tsx @@ -0,0 +1,416 @@ +import CallMadeIcon from '@mui/icons-material/CallMade'; +import ContentCopyIcon from '@mui/icons-material/ContentCopy'; +import GitHubIcon from '@mui/icons-material/GitHub'; +import GoogleIcon from '@mui/icons-material/Google'; +import LinkedInIcon from '@mui/icons-material/LinkedIn'; +import RedditIcon from '@mui/icons-material/Reddit'; +import TelegramIcon from '@mui/icons-material/Telegram'; +import TwitterIcon from '@mui/icons-material/Twitter'; +import YouTubeIcon from '@mui/icons-material/YouTube'; +import Card from '@mui/material/Card'; +import CardContent from '@mui/material/CardContent'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import CopyToClipboard from 'components/CopyToClipboard'; +import LensIcon from 'components/Image/LensIcon'; +import Link from 'components/Link'; +import useTranslationContext from 'lib/i18n'; +import type {SocialAccountUserInfo} from 'lib/types/domain'; +import { + DomainProfileSocialMedia, + DomainProfileSocialMediaAutoPopulated, +} from 'lib/types/domain'; +import React from 'react'; + +import DiscordIcon from '@unstoppabledomains/ui-kit/icons/Discord'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()( + (theme: Theme, _params, classes) => ({ + cardContentRoot: { + width: '100%', + minHeight: 132, + display: 'flex', + flexDirection: 'column', + justifyContent: 'space-between', + padding: theme.spacing(2), + '&:last-child': { + paddingBottom: theme.spacing(2), + }, + '&:hover': { + [`& .${classes.actionIcon}`]: { + opacity: 1, + visibility: 'visible', + right: theme.spacing(2), + [theme.breakpoints.up('sm')]: { + right: theme.spacing(1.5), + }, + }, + }, + [theme.breakpoints.up('sm')]: { + minHeight: 72, + flexDirection: 'row', + alignItems: 'center', + justifyContent: 'initial', + padding: theme.spacing(1.25, 2), + '&:last-child': { + paddingBottom: theme.spacing(1.25), + }, + }, + }, + card: { + position: 'relative', + border: `1px solid ${theme.palette.neutralShades[200]}`, + boxShadow: 'none', + borderRadius: theme.shape.borderRadius, + cursor: 'pointer', + '&:hover': { + boxShadow: '0px 8px 24px rgba(0, 0, 0, 0.08)', + }, + }, + accountIconContainer: { + display: 'flex', + [theme.breakpoints.up('sm')]: { + marginRight: theme.spacing(2), + }, + }, + smallIconContainer: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + cursor: 'pointer', + backgroundColor: theme.palette.neutralShades[100], + borderRadius: '50%', + width: 50, + height: 50, + }, + divider: { + marginTop: theme.spacing(2), + marginBottom: theme.spacing(2), + }, + twitterIcon: { + fill: '#000', + }, + redditIcon: { + background: '#EC5428', + borderRadius: '50%', + padding: 4, + fill: theme.palette.common.white, + }, + youtubeIcon: { + fill: '#EB3323', + }, + googleIcon: { + fill: '#4285F4', + }, + discordIcon: { + color: '#5865F2', + }, + lensIcon: { + backgroundColor: '#282e29', + borderRadius: '50%', + }, + telegramIcon: { + fill: '#229ED9', + }, + metricValue: { + minHeight: 20, + [theme.breakpoints.up('sm')]: { + minHeight: 'initial', + }, + }, + metricValues: { + minHeight: 20, + paddingRight: 10, + width: '100%', + textOverflow: 'ellipsis', + overflow: 'hidden', + whiteSpace: 'nowrap', + + [theme.breakpoints.up('sm')]: { + minHeight: 'initial', + maxWidth: '90%', + marginBottom: 0, + }, + [theme.breakpoints.up('md')]: { + maxWidth: 140, + }, + }, + name: { + fontWeight: theme.typography.fontWeightMedium, + fontSize: '1.125rem', + textOverflow: 'ellipsis', + overflow: 'hidden', + whiteSpace: 'nowrap', + marginBottom: theme.spacing(0.5), + [theme.breakpoints.up('sm')]: { + maxWidth: '90%', + marginBottom: 0, + }, + [theme.breakpoints.up('md')]: { + maxWidth: 120, + }, + }, + actionIcon: { + position: 'absolute', + opacity: 0, + visibility: 'hidden', + transition: theme.transitions.create(['opacity', 'right']), + top: theme.spacing(2), + right: theme.spacing(1.5), + [theme.breakpoints.up('sm')]: { + right: theme.spacing(1), + }, + }, + icon: { + fontSize: 20, + }, + iconGrey: { + fill: theme.palette.neutralShades[600], + }, + iconCentered: { + [theme.breakpoints.up('sm')]: { + top: '50%', + transform: 'translateY(-50%)', + }, + }, + socialIcon: { + fontSize: 32, + }, + link: { + '&:hover': { + textDecoration: 'none', + }, + }, + socialContentWrapper: { + width: '100%', + }, + tooltipTitle: { + fontWeight: theme.typography.fontWeightBold, + }, + tooltipData: {}, + }), +); + +export type Props = { + socialInfo: SocialAccountUserInfo | null; + handleClickToCopy: () => void; + small?: boolean; +}; + +const SocialAccountCard: React.FC = ({ + socialInfo, + handleClickToCopy, + small, +}) => { + const [t] = useTranslationContext(); + const {classes, cx} = useStyles(); + + const extractUserInfo = () => { + switch (socialInfo?.kind) { + case DomainProfileSocialMedia.Twitter: { + return { + Icon: TwitterIcon, + displayName: `@${socialInfo.screenName}`, + metricValues: [ + {name: t('profile.followers'), value: socialInfo.followersCount}, + {name: t('profile.following'), value: socialInfo.followingCount}, + {name: t('profile.listed'), value: socialInfo.listedCount}, + {name: t('profile.tweets'), value: socialInfo.tweetsCount}, + ], + link: `https://www.twitter.com/${socialInfo.screenName}`, + }; + } + case DomainProfileSocialMedia.Discord: { + return { + Icon: DiscordIcon, + displayName: socialInfo.userName, + metricValue: '', + metricName: '', + }; + } + case DomainProfileSocialMedia.Telegram: { + return { + Icon: TelegramIcon, + displayName: socialInfo.userName, + metricValue: '', + metricName: '', + link: `https://www.t.me/${socialInfo.userName}`, + }; + } + case DomainProfileSocialMedia.Reddit: { + return { + Icon: RedditIcon, + displayName: `u/${socialInfo.name}`, + metricValue: socialInfo.totalKarma, + metricName: t('profile.karma'), + link: `https://www.reddit.com/u/${socialInfo.name}`, + }; + } + case DomainProfileSocialMedia.YouTube: { + return { + Icon: YouTubeIcon, + displayName: socialInfo.title, + metricValue: socialInfo.subscriberCount, + metricName: t('profile.subscribers'), + link: socialInfo.channelUrl, + }; + } + case DomainProfileSocialMedia.Github: { + return { + Icon: GitHubIcon, + displayName: socialInfo.userName, + metricValue: '', + metricName: '', + link: `https://github.com/${socialInfo.userName}`, + }; + } + case DomainProfileSocialMedia.Linkedin: { + return { + Icon: LinkedInIcon, + displayName: socialInfo.url, + metricValue: '', + metricName: '', + link: socialInfo.url, + }; + } + case DomainProfileSocialMediaAutoPopulated.Lens: { + return { + Icon: LensIcon, + displayName: socialInfo.url.replace('https://lenster.xyz/u/', ''), + metricValue: '', + metricName: '', + link: socialInfo.url, + }; + } + case DomainProfileSocialMedia.Google: { + return { + Icon: GoogleIcon, + displayName: socialInfo.userName, + metricValue: '', + metricName: '', + }; + } + default: { + throw new Error('Unknown account'); + } + } + }; + + const {Icon, displayName, metricName, metricValue, metricValues, link} = + extractUserInfo(); + + const getCondensedTooltip = () => { + const metrics = + metricValues?.map(m => + m.value ? `${m.name.toLocaleString()} ${m.value} ` : undefined, + ) || []; + return [displayName, ...metrics].map((v, i) => ( +
+ + {v} + +
+ )); + }; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const Wrapper: any = !link ? CopyToClipboard : Link; + const wrapperProps = !link + ? {stringToCopy: displayName, onCopy: handleClickToCopy} + : {className: classes.link, external: true, to: link}; + + return ( + + {small ? ( + +
+ +
+
+ ) : ( + + + {link ? ( + + ) : ( + + )} +
+ +
+
+ + {displayName} + + {metricValues && ( + `${m.name.toLocaleString()} ${m.value} `) + .join('\r\n')} + > + {metricValues + .map(m => `${m.name.toLocaleString()} ${m.value} `) + .join(',')} + + )} + {metricValue && ( + + {metricValue && + `${metricValue.toLocaleString()} ${metricName}`} + + )} +
+
+
+ )} +
+ ); +}; + +export default SocialAccountCard; diff --git a/server/components/DropDownMenu.tsx b/server/components/DropDownMenu.tsx new file mode 100644 index 00000000..0b4369d3 --- /dev/null +++ b/server/components/DropDownMenu.tsx @@ -0,0 +1,125 @@ +import AccountCircleIcon from '@mui/icons-material/AccountCircle'; +import Logout from '@mui/icons-material/Logout'; +import SecurityIcon from '@mui/icons-material/Security'; +import SettingsOutlinedIcon from '@mui/icons-material/SettingsOutlined'; +import {Card, Typography} from '@mui/material/'; +import type {Theme} from '@mui/material/styles'; +import useTranslationContext from 'lib/i18n'; +import React, {useState} from 'react'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +interface Props { + classes?: { + root?: string; + input?: string; + adornedStart?: string; + adornedEnd?: string; + }; + domain: string; + isOwner: boolean; + authDomain: string; +} + +const useStyles = makeStyles()((theme: Theme) => ({ + cardBody: { + position: 'absolute', + top: '44px', + right: '0px', + }, + container: { + display: 'flex', + fontSize: '16px', + margin: '20px', + whiteSpace: 'nowrap', + }, + settingsIcon: { + marginRight: '10px', + }, + red: { + color: '#BD1B0F', + }, + font: { + fontWeight: 600, + color: '#000', + }, +})); + +const DropDownMenu: React.FC = ({isOwner, domain, authDomain}) => { + const [isLoggingOut, setLoggingOut] = useState(false); + const [t] = useTranslationContext(); + const {classes, cx} = useStyles(); + const handleManageProfileClick = (href: string) => { + if (!isLoggingOut) { + window.location.href = href; + } + }; + const handleLogout = () => { + setLoggingOut(prev => !prev); + localStorage.clear(); + window.location.reload(); + }; + + return ( + +
+ handleManageProfileClick( + isOwner + ? `${config.UNSTOPPABLE_WEBSITE_URL}/manage?domain=${domain}` + : `${config.UD_ME_BASE_URL}/${authDomain}`, + ) + } + > + {isOwner ? ( + <> + + + {t('profile.manageDetails')} + + + ) : ( + <> + + + {t('profile.viewMyProfile')} + + + )} +
+ {isOwner && ( +
+ handleManageProfileClick( + `${config.UNSTOPPABLE_WEBSITE_URL}/manage?page=appAccess&domain=${domain}`, + ) + } + > + + + {t('profile.privacySettings')} + +
+ )} +
+ + + {t('header.signOut')} + +
+
+ ); +}; + +export default DropDownMenu; diff --git a/server/components/ForSaleOnOpenSea.tsx b/server/components/ForSaleOnOpenSea.tsx new file mode 100644 index 00000000..5de2a085 --- /dev/null +++ b/server/components/ForSaleOnOpenSea.tsx @@ -0,0 +1,111 @@ +import MailOutlineIcon from '@mui/icons-material/MailOutline'; +import NorthEastIcon from '@mui/icons-material/NorthEast'; +import Button from '@mui/material/Button'; +import Divider from '@mui/material/Divider'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import Link from 'components/Link'; +import useTranslationContext from 'lib/i18n'; +import React from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + root: { + backgroundColor: theme.palette.primaryShades[100], + border: `1px solid ${theme.palette.primaryShades[200]}`, + borderRadius: theme.shape.borderRadius, + padding: theme.spacing(2), + display: 'flex', + alignItems: 'center', + marginTop: theme.spacing(6), + [theme.breakpoints.down('sm')]: { + flexFlow: 'column', + alignItems: 'flex-start', + padding: theme.spacing(2), + marginTop: theme.spacing(0), + }, + }, + image: { + color: theme.palette.primary.main, + fontSize: 32, + [theme.breakpoints.down('sm')]: { + display: 'none', + }, + }, + content: { + margin: theme.spacing(0, 2), + flex: 1, + [theme.breakpoints.down('sm')]: { + margin: theme.spacing(0, 0, 2), + }, + }, + action: { + fontWeight: theme.typography.fontWeightBold, + }, + divider: { + margin: theme.spacing(6, 0), + }, + titleBig: { + marginBottom: theme.spacing(0.5), + }, +})); + +type Props = { + email: string; + link: string; +}; + +const ForSaleOnOpenSea: React.FC = ({email, link}) => { + const [t] = useTranslationContext(); + const {classes} = useStyles(); + + if (!link) { + return null; + } + + return ( + <> +
+ + +
+ + {t('profile.listedForSale')} + + + {email && ( + <> + {t('profile.contactSeller')}:{' '} + + {email} + + + )} + +
+ +
+ +
+
+ + + + ); +}; + +export default ForSaleOnOpenSea; diff --git a/server/components/Header/AccountButton.tsx b/server/components/Header/AccountButton.tsx new file mode 100644 index 00000000..ad985094 --- /dev/null +++ b/server/components/Header/AccountButton.tsx @@ -0,0 +1,177 @@ +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import Button from '@mui/material/Button'; +import type {Theme} from '@mui/material/styles'; +import {getMetadataDomainsRecords} from 'actions/backendActions'; +import {getProfileData} from 'actions/domainProfile'; +import DropDownMenu from 'components/DropDownMenu'; +import getImageUrl from 'lib/domain/getImageUrl'; +import type {SerializedPublicDomainProfileData} from 'lib/types/domain'; +import type {MetadataDomainRecords} from 'lib/types/records'; +import React, {useEffect, useState} from 'react'; + +import ProfilePlaceholder from '@unstoppabledomains/ui-kit/icons/ProfilePlaceholder'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + profileButtonContainer: { + position: 'absolute', + right: theme.spacing(4), + top: theme.spacing(1), + zIndex: 2, + [theme.breakpoints.down('sm')]: { + right: theme.spacing(2), + }, + }, + profileButton: { + backgroundColor: theme.palette.common.white, + color: theme.palette.common.black, + borderColor: 'rgba(255, 255, 255, 0.321569)', + '&:hover': { + backgroundColor: theme.palette.common.white, + borderColor: theme.palette.common.white, + }, + paddingRight: '11px', + paddingLeft: '20px', + }, + logoutButton: { + display: 'flex', + marginLeft: '8px', + marginRight: '-5px', + color: theme.palette.neutralShades[200], + zIndex: 3, + }, + round: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + width: '24px !important', + height: '24px !important', + borderRadius: '50%', + border: `1px solid ${theme.palette.primary.main} !important`, + backgroundColor: theme.palette.primary.main, + [theme.breakpoints.up('sm')]: { + width: 12, + height: 12, + }, + }, + profilePlaceholderContainer: { + backgroundColor: theme.palette.primary.main, + }, + profilePlaceholder: { + fontSize: `calc(${20}px + 4px)`, + }, + domainName: { + maxWidth: '300px', + overflow: 'hidden', + wordBreak: 'break-word', + [theme.breakpoints.down('sm')]: { + maxWidth: '220px', + }, + }, + expandMore: { + marginLeft: '10px', + }, +})); + +export type Props = { + domainOwner: string; + domain: string; + authAddress: string; + authDomain: string; +}; + +export const AccountButton: React.FC = ({ + domainOwner, + domain, + authAddress, + authDomain, +}) => { + const {classes, cx} = useStyles(); + const [isOwner, setIsOwner] = useState(false); + const [isDropDownShown, setDropDownShown] = useState(false); + const [authDomainAvatar, setAuthDomainAvatar] = useState(''); + + useEffect(() => { + if (!authAddress || !authDomain) { + return; + } + + const fetchData = async (domainName: string) => { + let data; + let meta; + try { + data = await getProfileData(domainName); + } catch {} + try { + const {data: metaDomainsRecords} = await getMetadataDomainsRecords({ + domains: [domainName], + key: 'social.picture.value', + }); + meta = metaDomainsRecords[0]?.records; + } catch {} + setAuthDomainAvatar( + getDomainAvatarFromProfileAndMetadata(domainName, data, meta), + ); + }; + + // set state + setIsOwner(domainOwner.toLowerCase() === authAddress.toLowerCase()); + fetchData(authDomain).catch(console.error); + }, [authAddress, authDomain]); + + const showDropDown = () => { + setDropDownShown(prev => !prev); + }; + + const getDomainAvatarFromProfileAndMetadata = ( + avatarDomain: string, + profile?: SerializedPublicDomainProfileData, + metadata?: MetadataDomainRecords, + ): string => { + const metadataImage = metadata?.['social.picture.value'] + ? `https://api.unstoppabledomains.com/metadata/image-src/${avatarDomain}?withOverlay=false` + : null; + const uploadedImagePath = profile?.profile.imagePath + ? getImageUrl(profile.profile.imagePath) + : null; + const collectibleImage = profile?.profile.collectibleImage ?? null; + + const domainAvatar = metadataImage || uploadedImagePath || collectibleImage; + return domainAvatar || ''; + }; + + return ( + + ); +}; diff --git a/server/components/Header/LoginButton.tsx b/server/components/Header/LoginButton.tsx new file mode 100644 index 00000000..2ba8fbdd --- /dev/null +++ b/server/components/Header/LoginButton.tsx @@ -0,0 +1,222 @@ +import AccountBalanceWalletOutlined from '@mui/icons-material/AccountBalanceWalletOutlined'; +import MailOutlinedIcon from '@mui/icons-material/MailOutlined'; +import type {ButtonProps} from '@mui/material/Button'; +import Button from '@mui/material/Button'; +import Skeleton from '@mui/material/Skeleton'; +import type {TextFieldProps} from '@mui/material/TextField'; +import TextField from '@mui/material/TextField'; +import type {Theme} from '@mui/material/styles'; +import useTranslationContext from 'lib/i18n'; +import type {ClassNameMap} from 'notistack'; +import React, {useState} from 'react'; + +import {LogoTheme} from '@unstoppabledomains/ui-kit/components'; +import GoogleIcon from '@unstoppabledomains/ui-kit/icons/GoogleColored'; +import TwitterXIcon from '@unstoppabledomains/ui-kit/icons/TwitterX'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import UnstoppableAnimated from '../Image/UnstoppableAnimated'; + +const useStyles = makeStyles()((theme: Theme) => ({ + button: { + padding: theme.spacing(1.25, 2), + maxHeight: 48, + marginBottom: theme.spacing(2), + }, + buttonBig: { + padding: theme.spacing(1.25, 2), + maxHeight: 56, + }, + buttonLoader: { + borderRadius: theme.shape.borderRadius, + verticalAlign: 'middle', + display: 'inline-flex', + }, + uauth: { + background: theme.palette.primary.main, + }, + uauthWhite: { + background: theme.palette.common.white, + color: theme.palette.common.black, + '&:hover': { + background: theme.palette.common.white, + color: theme.palette.common.black, + }, + }, + twitterIcon: { + fill: '#000', + }, + formField: { + marginBottom: theme.spacing(2), + }, + cancel: { + marginRight: theme.spacing(1), + }, +})); + +const getLoginMethodIcon = ( + method: LoginMethod, + classes: ClassNameMap, + isWhiteBg?: boolean, + hovering?: boolean, +) => { + switch (method) { + case LoginMethod.Google: + return ; + case LoginMethod.Wallet: + return ; + case LoginMethod.Uauth: + return ( + + ); + case LoginMethod.Twitter: + return ; + case LoginMethod.Email: + return ; + default: + return undefined; + } +}; + +type ButtonSkeletonProps = { + big?: boolean; +}; + +const ButtonSkeleton: React.FC = ({big}) => { + const {classes, cx} = useStyles(); + + return ( + + ); +}; + +export enum LoginMethod { + Email = 'email', + Google = 'google', + Wallet = 'wallet', + Twitter = 'twitter', + Uauth = 'uauth', +} + +type LoginButtonProps = ButtonProps & { + method: LoginMethod; + isWhiteBg?: boolean; + loading?: boolean; + hidden?: boolean; + big?: boolean; +}; + +export const LoginButton: React.FC = ({ + method, + loading, + hidden, + isWhiteBg, + big, + ...props +}) => { + const {classes, cx} = useStyles(); + const [t] = useTranslationContext(); + const [hovering, setHovering] = useState(false); + const isEmail = method === LoginMethod.Email; + const isUauth = method === LoginMethod.Uauth; + const isGoogle = method === LoginMethod.Google; + const isTwitter = method === LoginMethod.Twitter; + const isWallet = method === LoginMethod.Wallet; + + if (loading) { + return ; + } + + if (hidden) { + return null; + } + + return ( + + ); +}; + +export const SubmitButton: React.FC = ({children, ...props}) => { + const {classes, cx} = useStyles(); + + return ( + + ); +}; + +export const FormField: React.FC = props => { + const {classes} = useStyles(); + + return ( + + ); +}; + +export const Cancel: React.FC = props => { + const {classes, cx} = useStyles(); + const [t] = useTranslationContext(); + + return ( + + ); +}; diff --git a/server/components/Header/ProfileSearchBar.tsx b/server/components/Header/ProfileSearchBar.tsx new file mode 100644 index 00000000..287a7667 --- /dev/null +++ b/server/components/Header/ProfileSearchBar.tsx @@ -0,0 +1,281 @@ +import ChevronRightOutlinedIcon from '@mui/icons-material/ChevronRightOutlined'; +import CloseIcon from '@mui/icons-material/Close'; +import SearchIcon from '@mui/icons-material/Search'; +import Box from '@mui/material/Box'; +import IconButton from '@mui/material/IconButton'; +import InputBase from '@mui/material/InputBase'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import {searchProfiles} from 'actions/domainProfile'; +import {DomainPreview} from 'components/Domain/DomainPreview'; +import useTranslationContext from 'lib/i18n'; +import type {Web3Dependencies} from 'lib/types/web3'; +import {useRouter} from 'next/router'; +import React, {useEffect, useRef, useState} from 'react'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles<{focus: boolean}>()((theme: Theme, {focus}) => ({ + container: { + display: 'flex', + width: '100%', + height: '40px', + }, + inputBase: { + border: `1px solid ${ + focus ? 'rgba(255, 255, 255, 0.50)' : 'rgba(255, 255, 255, 0.10)' + }`, + borderRadius: theme.shape.borderRadius, + paddingLeft: 12, + backgroundColor: 'rgba(255, 255, 255, 0.20)', + }, + input: { + fontSize: 16, + color: theme.palette.common.white, + '&::-webkit-search-cancel-button': { + WebkitAppearance: 'none', + }, + '&::placeholder': {color: theme.palette.common.white, opacity: 1}, + '&::-webkit-input-placeholder': { + color: theme.palette.common.white, + opacity: 1, + }, + }, + searchButton: { + minWidth: 'initial', + transition: 'none', + padding: theme.spacing(1), + borderTopLeftRadius: 0, + borderBottomLeftRadius: 0, + }, + disabledSearchButton: { + backgroundColor: `${theme.palette.neutralShades[100]} !important`, + }, + loader: { + padding: theme.spacing(1), + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + height: '16px', + width: '16px', + }, + searchResultsContainer: { + width: '512px', + backgroundColor: theme.palette.white, + border: `1px solid ${theme.palette.neutralShades[100]}`, + display: 'flex', + flexDirection: 'column', + borderRadius: 10, + position: 'absolute', + marginTop: theme.spacing(6), + paddingTop: theme.spacing(1), + paddingBottom: theme.spacing(1), + [theme.breakpoints.down('md')]: { + width: '350px', + }, + }, + searchResultsTitle: { + fontSize: 14, + fontWeight: 600, + paddingLeft: theme.spacing(2), + paddingBottom: theme.spacing(1), + paddingTop: theme.spacing(1), + }, + searchResult: { + padding: theme.spacing(2), + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + width: '100%', + cursor: 'pointer', + '&:hover': { + backgroundColor: theme.palette.neutralShades[100], + }, + '&:not(:last-child)': { + borderBottom: `1px dashed ${theme.palette.neutralShades[100]}`, + }, + }, + searchResultText: { + fontWeight: 600, + wordBreak: 'break-all', + maxWidth: 'calc(100% - 60px)', + marginLeft: theme.spacing(2), + }, + searchResultLeft: { + display: 'flex', + width: '100%', + alignItems: 'center', + }, + closeIcon: { + color: '#FFFFFF80', + height: '16px', + width: '16px', + }, + searchIcon: { + color: theme.palette.common.white, + width: 24, + height: 24, + margin: theme.spacing(1), + }, + rightIcon: { + color: theme.palette.neutralShades[400], + }, + searchRightBox: { + display: 'flex', + height: '100%', + alignItems: 'center', + }, + searchIconContainer: { + backgroundColor: 'white', + height: '100%', + borderRadius: '0px 7px 7px 0px', + }, + searchIconDark: { + color: theme.palette.common.black, + margin: theme.spacing(1), + width: 24, + height: 24, + }, +})); + +type Props = { + setWeb3Deps?: (value: Web3Dependencies | undefined) => void; +}; + +const ProfileSearchBar: React.FC = ({setWeb3Deps}) => { + const [t] = useTranslationContext(); + const [focus, setFocus] = useState(false); + const [searchTerm, setSearchTerm] = useState(''); + const debounceTimer = useRef | null>(null); + const searchBarRef = useRef(null); + const searchResultsRef = useRef(null); + const [searchResults, setSearchResults] = useState([]); + const {classes} = useStyles({focus}); + const router = useRouter(); + + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + // Check if the clicked target is outside of the search bar and results + if ( + searchBarRef.current && + searchResultsRef.current && + !searchBarRef.current.contains(event.target as Node) && + !searchResultsRef.current.contains(event.target as Node) + ) { + setFocus(false); + } + }; + + document.addEventListener('mousedown', handleClickOutside); + + return () => { + document.removeEventListener('mousedown', handleClickOutside); + }; + }, [searchResultsRef, searchBarRef]); + + const handleSearch = async (searchValue: string) => { + if (!searchValue) { + setSearchResults([]); + return; + } + const domains = await searchProfiles(searchValue); + setSearchResults(domains.slice(0, 5)); + }; + + const handleClearText = () => { + setSearchTerm(''); + setSearchResults([]); + }; + + const handleSearchChange: React.ChangeEventHandler< + HTMLInputElement + > = event => { + setSearchTerm(event.target.value); + if (debounceTimer.current) { + clearTimeout(debounceTimer.current); + } + debounceTimer.current = setTimeout(() => { + void handleSearch(event.target.value); + }, 300); + }; + + const handleComponentOnFocus = () => { + setFocus(true); + }; + + return ( + + + ) : ( +
+ + + + + +
+ +
+
+ ) + } + /> + + {focus && searchTerm && searchResults.length ? ( +
+ + {t('search.searchResultsFor', {searchTerm})} + + {searchResults.map(domain => { + const handleClick = () => { + void router.push(`${config.UD_ME_BASE_URL}/${domain}`); + setFocus(false); + }; + return ( +
+
+ + + {domain} + +
+ +
+ ); + })} +
+ ) : null} +
+ ); +}; + +export default ProfileSearchBar; diff --git a/server/components/Image/CryptoIcon.tsx b/server/components/Image/CryptoIcon.tsx new file mode 100644 index 00000000..46c03aa4 --- /dev/null +++ b/server/components/Image/CryptoIcon.tsx @@ -0,0 +1,708 @@ +import type {SvgIconProps} from '@mui/material/SvgIcon'; +import type {AllCurrenciesType} from 'lib/types/blockchain'; +import {AllCurrencies} from 'lib/types/blockchain'; +import dynamic from 'next/dynamic'; +import React from 'react'; + +const Bitcoin = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Bitcoin'), +); +const Ethereum = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Ethereum'), +); +const Litecoin = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Litecoin'), +); +const Ripple = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Ripple'), +); +const Zilliqa = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Zilliqa'), +); +const EthereumClassic = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/EthereumClassic'), +); +const Chainlink = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Chainlink'), +); +const USDCoin = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/USDCoin'), +); +const BasicAttentionToken = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/BasicAttentionToken'), +); +const Augur = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Augur'), +); +const ZRX = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/ZRX'), +); +const Dai = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Dai'), +); +const BitcoinCash = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/BitcoinCash'), +); +const Monero = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Monero'), +); +const Dash = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Dash'), +); +const Neo = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Neo'), +); +const Doge = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Doge'), +); +const Zcash = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Zcash'), +); +const Cardano = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Cardano'), +); +const EOS = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/EOS'), +); +const StellarLumens = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/StellarLumens'), +); +const BinanceCoin = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/BinanceCoin'), +); +const BitcoinGold = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/BitcoinGold'), +); +const Nano = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Nano'), +); +const WavesTech = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/WavesTech'), +); +const Komodo = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Komodo'), +); +const Aeternity = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Aeternity'), +); +const Wanchain = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Wanchain'), +); +const Ubiq = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Ubiq'), +); +const Tezos = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Tezos'), +); +const Iota = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Iota'), +); +const VeChain = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/VeChain'), +); +const Qtum = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Qtum'), +); +const ICX = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/ICX'), +); +const DigiByte = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/DigiByte'), +); +const Zcoin = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Zcoin'), +); +const Burst = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Burst'), +); +const Decred = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Decred'), +); +const NEM = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/NEM'), +); +const Lisk = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Lisk'), +); +const Cosmos = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Cosmos'), +); +const Ontology = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Ontology'), +); +const SmartCash = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/SmartCash'), +); +const TokenPay = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/TokenPay'), +); +const GroestIcoin = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/GroestIcoin'), +); +const Gas = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Gas'), +); +const TRON = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/TRON'), +); +const VeThorToken = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/VeThorToken'), +); +const BitcoinDiamond = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/BitcoinDiamond'), +); +const BitTorrent = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/BitTorrent'), +); +const Kin = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Kin'), +); +const Ravencoin = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Ravencoin'), +); +const Ark = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Ark'), +); +const Verge = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Verge'), +); +const Algorand = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Algorand'), +); +const Neblio = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Neblio'), +); +const Bounty = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Bounty'), +); +const Harmony = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Harmony'), +); +const HuobiToken = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/HuobiToken'), +); +const EnjinCoin = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/EnjinCoin'), +); +const YearnFinance = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/YearnFinance'), +); +const Compound = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Compound'), +); +const Balancer = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Balancer'), +); +const Ampleforth = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Ampleforth'), +); +const Tether = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Tether'), +); +const Lend = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Lend'), +); +const BitcoinSV = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/BitcoinSV'), +); +const XinFin = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/XinFin'), +); +const CRO = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/CRO'), +); +const Fantom = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Fantom'), +); +const Stratis = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Stratis'), +); +const Switcheo = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Switcheo'), +); +const FuseNetwork = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/FuseNetwork'), +); +const Arweave = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Arweave'), +); +const Nimiq = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Nimiq'), +); +const Polygon = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/Polygon'), +); +const Solana = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Solana'), +); +const CompoundTether = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/CompoundTether'), +); +const Avalanche = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Avalanche'), +); +const Polkadot = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Polkadot'), +); +const BinanceUSD = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/BinanceUSD'), +); +const SHIB = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/SHIB'), +); +const Terra = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Terra'), +); +const PancakeSwap = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/PancakeSwap'), +); +const MANA = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/MANA'), +); +const Elrond = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Elrond'), +); +const SAND = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/SAND'), +); +const Hedera = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Hedera'), +); +const WAXP = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/WAXP'), +); +const ONEINCH = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/ONEINCH'), +); +const BLOCKS = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Blocks'), +); +const THETA = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/THETA'), +); +const Helium = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Helium'), +); +const SafeMoon = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/SafeMoon'), +); +const NEARProtocol = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/NEARProtocol'), +); +const Filecoin = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Filecoin'), +); +const AxieInfinity = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/AxieInfinity'), +); +const Amp = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Amp'), +); +const Celo = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Celo'), +); +const Kusama = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Kusama'), +); +const Casper = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Casper'), +); +const Uniswap = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Uniswap'), +); +const Celsius = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Celsius'), +); +const Ergo = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Ergo'), +); +const Kava = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Kava'), +); +const Loopring = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Loopring'), +); +const Polymath = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Polymath'), +); +const ThetaFuel = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/ThetaFuel'), +); +const Nexo = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Nexo'), +); +const Flow = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Flow'), +); +const InternetComputer = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/InternetComputer'), +); +const TrueUSD = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/TrueUSD'), +); +const Klever = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Klever'), +); +const YieldApp = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/YieldApp'), +); +const OKT = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/OKT'), +); +const Bit2Me = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Bit2Me'), +); +const TheDogeNFT = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/TheDogeNFT'), +); +const Gala = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Gala'), +); +const Mobix = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Mobix'), +); +const Fab = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Fabric'), +); +const Firo = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Firo'), +); +const Fet = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Fet'), +); +const Beam = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Beam'), +); +const RailgunIcon = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/RailgunIcon'), +); +const Sui = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Sui'), +); +const Moon = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/MOON'), +); +const Sweat = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Sweat'), +); +const Deso = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Deso'), +); +const FLR = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/FLR'), +); +const SGB = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/SGB'), +); +const POKT = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/PocketNetwork'), +); +const XLA = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Scala'), +); +const KAI = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/KardiaChain'), +); +const APT = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Aptos'), +); +const GTH = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Gather'), +); +const HI = dynamic(() => import('@unstoppabledomains/ui-kit/icons/crypto/HI')); +const Verse = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/Verse'), +); + +const MContent = dynamic( + () => import('@unstoppabledomains/ui-kit/icons/crypto/MContent'), +); + +type Props = { + currency: AllCurrenciesType; +} & SvgIconProps; + +export const CryptoIcon = React.forwardRef( + ({currency, ...rest}, ref) => { + switch (currency) { + case AllCurrencies.BTC: + return ; + case AllCurrencies.ETH: + return ; + case AllCurrencies.LTC: + return ; + case AllCurrencies.XRP: + return ; + case AllCurrencies.ZIL: + return ; + case AllCurrencies.ETC: + return ; + case AllCurrencies.LINK: + return ; + case AllCurrencies.USDC: + return ; + case AllCurrencies.BAT: + return ; + case AllCurrencies.REP: + return ; + case AllCurrencies.ZRX: + return ; + case AllCurrencies.DAI: + return ; + case AllCurrencies.BCH: + return ; + case AllCurrencies.XMR: + return ; + case AllCurrencies.DASH: + return ; + case AllCurrencies.NEO: + return ; + case AllCurrencies.DOGE: + return ; + case AllCurrencies.ZEC: + return ; + case AllCurrencies.ADA: + return ; + case AllCurrencies.EOS: + return ; + case AllCurrencies.XLM: + return ; + case AllCurrencies.BNB: + return ; + case AllCurrencies.BTG: + return ; + case AllCurrencies.NANO: + return ; + case AllCurrencies.WAVES: + return ; + case AllCurrencies.KMD: + return ; + case AllCurrencies.AE: + return ; + case AllCurrencies.WAN: + return ; + case AllCurrencies.UBQ: + return ; + case AllCurrencies.XTZ: + return ; + case AllCurrencies.MIOTA: + return ; + case AllCurrencies.VET: + return ; + case AllCurrencies.QTUM: + return ; + case AllCurrencies.ICX: + return ; + case AllCurrencies.DGB: + return ; + case AllCurrencies.XZC: + return ; + case AllCurrencies.BURST: + return ; + case AllCurrencies.DCR: + return ; + case AllCurrencies.XEM: + return ; + case AllCurrencies.LSK: + return ; + case AllCurrencies.ATOM: + return ; + case AllCurrencies.ONT: + return ; + case AllCurrencies.SMART: + return ; + case AllCurrencies.TPAY: + return ; + case AllCurrencies.GRS: + return ; + case AllCurrencies.GAS: + return ; + case AllCurrencies.TRX: + return ; + case AllCurrencies.VTHO: + return ; + case AllCurrencies.BCD: + return ; + case AllCurrencies.BTT: + return ; + case AllCurrencies.KIN: + return ; + case AllCurrencies.RVN: + return ; + case AllCurrencies.ARK: + return ; + case AllCurrencies.XVG: + return ; + case AllCurrencies.ALGO: + return ; + case AllCurrencies.NEBL: + return ; + case AllCurrencies.BNTY: + return ; + case AllCurrencies.ONE: + return ; + case AllCurrencies.HT: + return ; + case AllCurrencies.ENJ: + return ; + case AllCurrencies.YFI: + return ; + case AllCurrencies.COMP: + return ; + case AllCurrencies.BAL: + return ; + case AllCurrencies.AMPL: + return ; + case AllCurrencies.USDT: + return ; + case AllCurrencies.LEND: + return ; + case AllCurrencies.BSV: + return ; + case AllCurrencies.XDC: + return ; + case AllCurrencies.CRO: + return ; + case AllCurrencies.FTM: + return ; + case AllCurrencies.STRAT: + return ; + case AllCurrencies.SWTH: + return ; + case AllCurrencies.FUSE: + return ; + case AllCurrencies.AR: + return ; + case AllCurrencies.NIM: + return ; + case AllCurrencies.MATIC: + return ; + case AllCurrencies.SOL: + return ; + case AllCurrencies.CUSDT: + return ; + case AllCurrencies.AVAX: + return ; + case AllCurrencies.DOT: + return ; + case AllCurrencies.BUSD: + return ; + case AllCurrencies.SHIB: + return ; + case AllCurrencies.LUNA: + return ; + case AllCurrencies.CAKE: + return ; + case AllCurrencies.MANA: + return ; + case AllCurrencies.EGLD: + return ; + case AllCurrencies.SAND: + return ; + case AllCurrencies.HBAR: + return ; + case AllCurrencies.WAXP: + return ; + case AllCurrencies['1INCH']: + return ; + case AllCurrencies.BLOCKS: + return ; + case AllCurrencies.THETA: + return ; + case AllCurrencies.HNT: + return ; + case AllCurrencies.SAFEMOON: + return ; + case AllCurrencies.NEAR: + return ; + case AllCurrencies.FIL: + return ; + case AllCurrencies.AXS: + return ; + case AllCurrencies.AMP: + return ; + case AllCurrencies.CELO: + return ; + case AllCurrencies.KSM: + return ; + case AllCurrencies.CSPR: + return ; + case AllCurrencies.UNI: + return ; + case AllCurrencies.CEL: + return ; + case AllCurrencies.ERG: + return ; + case AllCurrencies.KAVA: + return ; + case AllCurrencies.LRC: + return ; + case AllCurrencies.POLY: + return ; + case AllCurrencies.TFUEL: + return ; + case AllCurrencies.NEXO: + return ; + case AllCurrencies.FLOW: + return ; + case AllCurrencies.ICP: + return ; + case AllCurrencies.TUSD: + return ; + case AllCurrencies.KLV: + return ; + case AllCurrencies.YLD: + return ; + case AllCurrencies.OKT: + return ; + case AllCurrencies.B2M: + return ; + case AllCurrencies.DOG: + return ; + case AllCurrencies.GALA: + return ; + case AllCurrencies.MOBX: + return ; + case AllCurrencies.FAB: + return ; + case AllCurrencies.FIRO: + return ; + case AllCurrencies.FET: + return ; + case AllCurrencies.BEAM: + return ; + case AllCurrencies['0ZK']: + return ; + case AllCurrencies.SUI: + return ; + case AllCurrencies.MOON: + return ; + case AllCurrencies.SWEAT: + return ; + case AllCurrencies.DESO: + return ; + case AllCurrencies.FLR: + return ; + case AllCurrencies.SGB: + return ; + case AllCurrencies.POKT: + return ; + case AllCurrencies.XLA: + return ; + case AllCurrencies.KAI: + return ; + case AllCurrencies.APT: + return ; + case AllCurrencies.GTH: + return ; + case AllCurrencies.HI: + return ; + case AllCurrencies.VERSE: + return ; + case AllCurrencies.MCONTENT: + return ; + default: + return null; + } + }, +); diff --git a/server/components/Image/LensIcon.tsx b/server/components/Image/LensIcon.tsx new file mode 100644 index 00000000..5608a85d --- /dev/null +++ b/server/components/Image/LensIcon.tsx @@ -0,0 +1,21 @@ +import type {SvgIconProps} from '@mui/material/SvgIcon'; +import SvgIcon from '@mui/material/SvgIcon'; +import React from 'react'; + +const LensIcon: React.FC = props => ( + + + +); + +export default LensIcon; diff --git a/server/components/Image/Logo.tsx b/server/components/Image/Logo.tsx new file mode 100644 index 00000000..5d8c52ac --- /dev/null +++ b/server/components/Image/Logo.tsx @@ -0,0 +1,67 @@ +import Hidden from '@mui/material/Hidden'; +import Link from 'components/Link'; +import React from 'react'; + +import config from '@unstoppabledomains/config'; +import { + Logo as LogoIcon, + LogoTheme, +} from '@unstoppabledomains/ui-kit/components'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()(() => ({ + logo: { + width: 42, + height: 42, + }, + homeLink: { + display: 'flex', + cursor: 'pointer', + width: '100%', + overflow: 'hidden', + alignItems: 'center', + }, +})); + +type Props = { + className?: string; + inverse?: boolean; + absoluteUrl?: boolean; +}; + +const Logo: React.FC = ({className = '', inverse, absoluteUrl}) => { + const {classes, cx} = useStyles(); + const logoIconTheme = inverse ? LogoTheme.White : LogoTheme.Primary; + + const HomeLink: React.FC = ({children}) => { + return ( + + {children} + + ); + }; + + return ( + + + + + + + + + ); +}; + +export default Logo; diff --git a/server/components/Image/UnstoppableAnimated.tsx b/server/components/Image/UnstoppableAnimated.tsx new file mode 100644 index 00000000..ee1c4d33 --- /dev/null +++ b/server/components/Image/UnstoppableAnimated.tsx @@ -0,0 +1,95 @@ +import Box from '@mui/material/Box'; +import type {Theme} from '@mui/material/styles'; +import {Logo, type LogoTheme} from '@unstoppabledomains/ui-kit/components'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; +import config from '@unstoppabledomains/config'; +import Image from 'next/image'; +import React, {useEffect, useState} from 'react'; +import {useIntervalWhen} from 'rooks'; + +type Props = { + theme: LogoTheme; + hovering: boolean; +}; + +const useStyles = makeStyles()((theme: Theme) => ({ + root: { + padding: '11px', + paddingTop: 15, + position: 'relative', + }, + logos: { + display: 'inline-flex', + position: 'absolute', + alignItems: 'center', + left: 0, + top: -5, + }, + logoVisibleFixed: { + opacity: 1, + transitionDuration: '.5s', + }, + logoNotVisibleFixed: { + opacity: 0, + position: 'absolute', + transitionDuration: '.5s', + }, + logoImage: { + width: '22px', + height: '22px', + }, +})); + +const UnstoppableAnimated: React.FC = ({theme, hovering}) => { + const {classes} = useStyles(); + const [count, setCount] = useState(0); + const logos = [ + 'images/wallet-icons/MetaMask.svg', + 'images/wallet-icons/WalletConnect.svg', + 'images/wallet-icons/phantom.svg', + 'images/wallet-icons/hashpack-white.svg', + 'images/wallet-icons/unstoppable.svg', + ]; + + useIntervalWhen( + () => setCount(prev => (prev === logos.length - 1 ? 0 : prev + 1)), + 1_000, + hovering, + false, + ); + + useEffect(() => { + if (!hovering) { + setCount(0); + } + }, [hovering]); + + if (!hovering) { + return ; + } + return ( + + + {logos.map((logo, i) => ( + + wallet + + ))} + + + ); +}; + +export default UnstoppableAnimated; diff --git a/server/components/LearnMoreUdBlue.tsx b/server/components/LearnMoreUdBlue.tsx new file mode 100644 index 00000000..cd3067b0 --- /dev/null +++ b/server/components/LearnMoreUdBlue.tsx @@ -0,0 +1,217 @@ +import AddShoppingCartIcon from '@mui/icons-material/AddShoppingCart'; +import CloseIcon from '@mui/icons-material/Close'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Dialog from '@mui/material/Dialog'; +import DialogContent from '@mui/material/DialogContent'; +import IconButton from '@mui/material/IconButton'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import {keyframes} from '@mui/system'; +import getImageUrl from 'lib/domain/getImageUrl'; +import useTranslationContext from 'lib/i18n'; +import {UdBlueBasicFeatureList} from 'lib/types/product'; +import qs from 'qs'; +import React from 'react'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +interface LearnMoreUdBlueProps { + isOpen: boolean; + handleClose: () => void; +} + +const bannerSale = keyframes` + 0% { + transform: translate3d(0, 0, 0); + } + 100% { + transform: translate3d(-50%, 0, 0); + } +`; + +const useStyles = makeStyles()((theme: Theme) => ({ + container: { + '& .MuiPaper-root': { + minWidth: '420px', + maxWidth: '420px', + alignItems: 'center', + [theme.breakpoints.down('md')]: { + minWidth: '100%', + maxWidth: '100%', + overflowX: 'hidden', + }, + }, + '& .MuiDialogContent-root': { + padding: 0, + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + [theme.breakpoints.down('md')]: { + padding: 0, + }, + }, + }, + imgContainer: { + position: 'relative', + '&::after': { + content: '""', + clear: 'both', + display: 'table', + }, + }, + img: { + display: 'block', + width: 420, + }, + featuresContainer: { + padding: theme.spacing(1), + paddingBottom: theme.spacing(2), + position: 'absolute', + bottom: 0, + left: 0, + width: '100%', + textAlign: 'center', + lineHeight: '25px', + color: 'rgba(255, 255, 255, 0.56)', + }, + featureItemText: { + whiteSpace: 'break-spaces', + padding: '0 8px', + display: 'inline', + fontWeight: theme.typography.fontWeightBold, + lineHeight: '20px', + fontSize: 14, + }, + breaker: { + padding: 0, + margin: 0, + fontWeight: theme.typography.fontWeightBold, + lineHeight: '20px', + fontSize: 14, + display: 'inline', + }, + redArea: { + height: 24, + backgroundColor: '#E72113', + maxWidth: 420, + [theme.breakpoints.down('md')]: { + minWidth: '100%', + }, + overflow: 'hidden', + }, + bannerSale: { + whiteSpace: 'nowrap', + display: 'inline-block', + animation: `${bannerSale} 15s linear infinite`, + }, + whiteText: { + fontSize: 14, + fontWeight: 700, + lineHeight: '24px', + padding: '0 8px', + color: theme.palette.white, + display: 'inline-block', + textTransform: 'uppercase', + }, + contentContainer: { + padding: theme.spacing(3), + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + }, + title: { + fontSize: 22, + fontWeight: theme.typography.fontWeightBold, + textAlign: 'center', + paddingBottom: theme.spacing(3), + }, + selectPlan: { + width: '100%', + marginBottom: theme.spacing(3), + }, + closeButton: { + position: 'absolute', + top: theme.spacing(1), + right: theme.spacing(1), + color: theme.palette.white, + }, +})); + +const LearnMoreUdBlue = ({isOpen, handleClose}: LearnMoreUdBlueProps) => { + const {classes} = useStyles(); + const [t] = useTranslationContext(); + const featuresLength = UdBlueBasicFeatureList.length; + + return ( + + + + + + + Unstoppable Blue Background + + {UdBlueBasicFeatureList.map((feature, index) => ( + + + {feature} + + {index !== featuresLength - 1 && ( + · + )} + + ))} + + + + + {Array(8) + .fill(true) + .map((_, i) => ( + + {t('upsell.udBlueSubscription.limitedTimeDeal')} + + ))} + + + + + {t('upsell.udBlueSubscription.tooltip')} + + + + + + + ); +}; + +export default LearnMoreUdBlue; diff --git a/server/components/Link.tsx b/server/components/Link.tsx new file mode 100644 index 00000000..1f577553 --- /dev/null +++ b/server/components/Link.tsx @@ -0,0 +1,110 @@ +import {sanitizeUrl} from '@braintree/sanitize-url'; +import MaterialLink from '@mui/material/Link'; +import type {Theme} from '@mui/material/styles'; +import NextLink from 'next/link'; +import React from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + link: { + ...theme.typography.body1, + color: theme.palette.primary.main, + fontWeight: theme.typography.fontWeightMedium, + textDecoration: 'none', + '&:hover': { + textDecoration: 'underline', + }, + }, + inherit: { + fontSize: 'inherit', + }, +})); + +interface NextProps { + as?: string; + href?: string; + prefetch?: boolean; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + children?: any; + className?: string; + target?: string; + rel?: string; + locale?: string; +} + +const NextComposed = React.forwardRef(function NextComposed( + props: NextProps, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ref: any, +) { + const {as, href, prefetch = false, children, locale, ...other} = props; // prefetch is set to false intentionally to avoid sending an additional chunk request on page load + return ( + + + {children} + + + ); +}); + +type LinkProps = { + to: string; + href?: string; + external?: boolean; + className?: string; + children: React.ReactNode; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + innerRef: any; + activeClassName?: string; + inherit?: boolean; +}; + +const Link: React.FunctionComponent = ({ + activeClassName = 'active', + to, + href, + className, + external, + innerRef, + children, + inherit, + ...rest +}) => { + const {classes, cx} = useStyles(); + const classList = cx(classes.link, className, { + [classes.inherit]: inherit, + }); + return external ? ( + + {children} + + ) : ( + + {children} + + ); +}; + +const RouterLink = Link; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export default React.forwardRef((props: any, ref: any) => ( + +)); diff --git a/server/components/Modal.tsx b/server/components/Modal.tsx new file mode 100644 index 00000000..1708d326 --- /dev/null +++ b/server/components/Modal.tsx @@ -0,0 +1,110 @@ +import CloseIcon from '@mui/icons-material/Close'; +import type {DialogProps} from '@mui/material/Dialog'; +import Dialog from '@mui/material/Dialog'; +import IconButton from '@mui/material/IconButton'; +import type {ModalProps as MuiModalProps} from '@mui/material/Modal'; +import Typography from '@mui/material/Typography'; +import useTranslationContext from 'lib/i18n'; +import React from 'react'; +import useStyles from 'styles/components/modal.styles'; + +export type ModalProps = { + title: string | JSX.Element; + open: boolean; + centerHeader?: boolean; + onClose: (e: unknown) => void; + children: React.ReactNode; + /** + * Disables modal backdrop and ESC clicks to close the dialog https://v4.mui.com/components/dialogs/#confirmation-dialogs + * Acts as a confirmation dialog where only a close button can hide the dialog + */ + isConfirmation?: boolean; + noContentPadding?: boolean; + titleStyle?: string; + dialogPaperStyle?: string; + includeHeaderPadding?: boolean; + noModalHeader?: boolean; + maxWidth?: DialogProps['maxWidth']; +}; + +/** + * UD Modal component which wraps MUI Dialog and unifies the design to match branding + */ +const Modal: React.FC = ({ + open, + title, + titleStyle, + dialogPaperStyle, + onClose, + children, + isConfirmation = false, + centerHeader = false, + noContentPadding = false, + includeHeaderPadding = false, + noModalHeader = false, + maxWidth = false, +}) => { + const {classes, cx} = useStyles(); + const [t] = useTranslationContext(); + + const handleCloseOnBlur: MuiModalProps['onClose'] = event => { + if (isConfirmation) { + return; + } + onClose(event); + }; + + const handleCloseButtonClick: React.MouseEventHandler< + HTMLButtonElement + > = event => { + onClose(event); + }; + + const dialogProps: DialogProps = { + open: open || false, + onClose: handleCloseOnBlur, + classes: {paper: cx(classes.dialogRoot, dialogPaperStyle)}, + maxWidth, + }; + + return ( + +
+ {!noModalHeader && ( +
+ + {title} + + + + +
+ )} +
+ {children} +
+
+
+ ); +}; + +export default Modal; diff --git a/server/components/TokenGallery/NFTGalleryCarousel.tsx b/server/components/TokenGallery/NFTGalleryCarousel.tsx new file mode 100644 index 00000000..76b869ee --- /dev/null +++ b/server/components/TokenGallery/NFTGalleryCarousel.tsx @@ -0,0 +1,222 @@ +import Grid from '@mui/material/Grid'; +import type {Theme} from '@mui/material/styles'; +import {useTheme} from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import useTranslationContext from 'lib/i18n'; +import type {SerializedCryptoWalletBadge} from 'lib/types/badge'; +import type {SerializedNftMetadata} from 'lib/types/nfts'; +import React, {useEffect, useState} from 'react'; +import SwiperCore, {Autoplay, Navigation} from 'swiper'; +import {Swiper, SwiperSlide} from 'swiper/react'; +import 'swiper/swiper-bundle.css'; +import 'swiper/swiper.min.css'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import type {Nft} from './NftCard'; +import NftCard from './NftCard'; + +const useStyles = makeStyles()((theme: Theme) => ({ + swiperContainer: { + marginLeft: '-2px', + }, + swiper: { + paddingTop: theme.spacing(2), + paddingLeft: '1px', + paddingRight: '1px', + }, + loadingContainer: { + paddingTop: theme.spacing(2), + paddingBottom: theme.spacing(2), + marginRight: '-12px', + display: 'flex', + flexDirection: 'row', + }, +})); + +interface Props { + domain: string; + nfts: Nft[]; + nftSymbolVisible: Record; + autoPlay?: boolean; + showPlaceholder?: boolean; + minNftCount?: number; + maxNftCount?: number; + badgeData?: SerializedCryptoWalletBadge; +} + +const NFTGalleryCarousel = ({ + domain, + nfts, + nftSymbolVisible, + showPlaceholder, + minNftCount = 2, + maxNftCount = 3, + autoPlay = true, + badgeData, +}: Props) => { + const {classes} = useStyles(); + const [t] = useTranslationContext(); + const [placeholders, setPlaceholders] = useState([]); + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down('sm')); + const loadingCount = isMobile ? minNftCount : maxNftCount; + const placeholderCount = showPlaceholder + ? Math.max(loadingCount - nfts.length, 0) + : 0; + + // determine the visible NFTs and placeholder lists + const visibleNfts = nfts.filter( + nft => nftSymbolVisible[nft.symbol || ''] && nft.verified && nft.public, + ); + const visiblePlaceholders = placeholders.slice(0, placeholderCount); + + // sort the listings on a page load effect, so it only happens a single time + // and removes flicker when this operations is performed directly + useEffect(() => { + setPlaceholders( + badgeData?.marketplace?.listings?.sort(() => Math.random() - 0.5) || [], + ); + }, []); + + const swiperCss = ` + .swiper-button-next::after, .swiper-button-prev::after { + font-size: var(--swiper-navigation-small); + } + + .swiper-button-prev, .swiper-button-next { + box-sizing: border-box; + width: 32px; + height: 32px; + background: rgba(255, 255, 255, 0.8); + + border: 1px solid #DDDDDF; + backdrop-filter: blur(2px); + + border-radius: 50%; + } + + .swiper-wrapper { + padding-bottom: 1rem; + } + `; + + SwiperCore.use([Autoplay, Navigation]); + + return ( +
+ {placeholderCount > 0 || visibleNfts.length > 0 ? ( + <> + + maxNftCount} + loopFillGroupWithBlank={false} + pagination={false} + navigation={nfts.length > maxNftCount} + className={classes.swiper} + autoplay={ + autoPlay + ? { + delay: 5000, + disableOnInteraction: true, + pauseOnMouseEnter: true, + } + : undefined + } + breakpoints={{ + 0: { + slidesPerView: minNftCount, + spaceBetween: 16, + }, + 320: { + slidesPerView: minNftCount, + spaceBetween: 16, + }, + // when window width is >= 600px + 600: { + slidesPerView: minNftCount, + spaceBetween: 16, + }, + // when window width is >= 640px + 768: { + slidesPerView: maxNftCount, + spaceBetween: 16, + }, + }} + > + <> + {visibleNfts.map((nft, index) => ( + + + + ))} + {visiblePlaceholders.map( + (placeholder, index) => + badgeData && ( + + + + ), + )} + + + + ) : ( + + {[...new Array(loadingCount)].map(v => ( + + + + ))} + + )} +
+ ); +}; + +export default NFTGalleryCarousel; diff --git a/server/components/TokenGallery/NftCard.tsx b/server/components/TokenGallery/NftCard.tsx new file mode 100644 index 00000000..d0b2218c --- /dev/null +++ b/server/components/TokenGallery/NftCard.tsx @@ -0,0 +1,306 @@ +import Visibility from '@mui/icons-material/Visibility'; +import VisibilityOff from '@mui/icons-material/VisibilityOff'; +import {alpha} from '@mui/material/'; +import CircularProgress from '@mui/material/CircularProgress'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import {useFeatureFlags} from 'actions/featureFlagActions'; +import {CryptoIcon} from 'components/Image/CryptoIcon'; +import useTranslationContext from 'lib/i18n'; +import type {AllCurrenciesType} from 'lib/types/blockchain'; +import type {SerializedNftMetadata} from 'lib/types/nfts'; +import React, {useEffect, useRef, useState} from 'react'; +import VisibilitySensor from 'react-visibility-sensor'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import NftImage from './NftImage'; +import NftModal from './NftModal'; + +const useStyles = makeStyles()((theme: Theme) => ({ + currencyIcon: { + width: 15, + height: 15, + marginRight: theme.spacing(1), + }, + visibilityIcon: { + width: 22, + height: 22, + borderRadius: '50%', + padding: theme.spacing(0.25), + color: theme.palette.neutralShades[700], + backgroundColor: alpha(theme.palette.neutralShades[100], 0.35), + backdropFilter: 'blur(5px)', + }, + nftImage: { + justifyContent: 'center', + verticalAlign: 'center', + textAlign: 'center', + cursor: 'pointer', + objectFit: 'fill', + position: 'absolute', + top: 0, + left: 0, + bottom: 0, + right: 0, + maxWidth: '100%', + minWidth: '100%', + }, + placeholderImg: { + filter: 'grayscale(100%)', + opacity: 0.5, + }, + placeholderTxt: { + color: theme.palette.neutralShades[600], + }, + loadingImg: { + marginTop: theme.spacing(15), + [theme.breakpoints.down('sm')]: { + marginTop: theme.spacing(10), + }, + }, +})); + +export type Nft = SerializedNftMetadata & { + toggleVisibility?: (symbol: string, mint: string, visible: boolean) => void; +}; + +interface Props { + domain: string; + nft: Nft; + placeholder?: boolean; +} + +const NftCard = ({nft, domain, placeholder}: Props) => { + const [t] = useTranslationContext(); + const videoRef = useRef(null); + const [isVisible, setIsVisible] = useState(false); + const {classes, cx} = useStyles(); + const [open, setOpen] = useState(false); + const {data: featureFlags} = useFeatureFlags(false, domain); + + const css = ` + .NFT-container { + display: flex; + flex-direction: column; + width: 100%; + background-color: white; + padding-top: 0px; + transition: all 0.3s ease 0s; + border-radius: 12px; + box-shadow: 0px 1px 0px #DDDDDF, 0px 0px 0px 1px #DDDDDF; + overflow: hidden; + } + .NFT-container:hover { + box-shadow: rgba(0, 0, 0, 0.22) 0px 5px 10px; + transform: translate3d(0px, -2px, 0px); + transition: all 0.3s ease 0s; + } + .NFT-image-container { + position: relative; + width: 100%; + overflow: hidden; + } + .NFT-image-container:before { + content: ""; + display: block; + padding-top: 100%; + } + .NFT-infoContainer { + padding: 16px; + } + .NFT-visibility { + float: right; + position: absolute; + top: 17px; + right: 17px; + cursor: pointer; + } + .NFT-name { + font-family: "Inter", sans-serif; + font-style: normal; + cursor: pointer; + overflow: hidden; + text-overflow: ellipsis; + text-align: left; + position: static; + font-weight: 600; + font-size: 1rem; + display: flex; + flex-direction: row; + white-space: nowrap; + } + .NFT-description { + font-family: "Inter", sans-serif; + font-style: normal; + font-size: 15px; + overflow: hidden; + text-overflow: ellipsis; + color: #6d6e76; + text-align: left; + min-height: 43px; + margin-top: 8px; + } + .NFT-collection { + height: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .more { + font-family: "Inter", sans-serif; + font-style: normal; + cursor: pointer; + color: black; + font-weight: 600; + margin-left: 5px; + } + `; + + const handleClose = () => setOpen(false); + + const handleClick = async () => { + //only open modal if feature flag is set + if (!nft.link) { + return; + } + if (featureFlags.variations?.ecommerceServicePublicProfileNftGallery) { + setOpen(true); + return; + } + window.open(nft.link, '_blank'); + }; + + useEffect(() => { + if (isVisible) { + if (videoRef?.current) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (videoRef.current as any).play(); + } + } else { + if (videoRef?.current) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (videoRef.current as any).pause(); + } + } + }, [isVisible]); + + const shouldRenderVideo = () => { + if (nft.video_url) { + if ( + !nft.video_url.endsWith('.gif') && + !nft.video_url.endsWith('.gltf') && + !nft.video_url.endsWith('.glb') && + !nft.video_url.endsWith('.mp3') + ) { + return true; + } + } + // For case when image_url incorrectly provides video file + if (nft.image_url?.endsWith('.mp4')) { + return true; + } + return false; + }; + + return ( + <> + +
+
+ {shouldRenderVideo() ? ( + setIsVisible(isVis)}> + + ) : nft.image_url ? ( + + ) : ( +
+ +
+ )} +
+
+
+ {nft.symbol && ( +
+ +
+ )} +
{nft.name}
+
+ + {nft?.collection} + {nft.owner && + nft.toggleVisibility && + (nft.public ? ( +
{ + nft.public = false; + nft.toggleVisibility!(nft.symbol!, nft.mint!, false); + }} + className={'NFT-visibility'} + > + + + +
+ ) : ( +
{ + nft.public = true; + nft.toggleVisibility!(nft.symbol!, nft.mint!, true); + }} + className={'NFT-visibility'} + > + + + +
+ ))} +
+
+ +
+ + ); +}; + +export default NftCard; diff --git a/server/components/TokenGallery/NftFilterSelect.tsx b/server/components/TokenGallery/NftFilterSelect.tsx new file mode 100644 index 00000000..96e11370 --- /dev/null +++ b/server/components/TokenGallery/NftFilterSelect.tsx @@ -0,0 +1,176 @@ +import ArrowDownIcon from '@mui/icons-material/KeyboardArrowDown'; +import Button from '@mui/material/Button'; +import Menu from '@mui/material/Menu'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import React, {useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import NftFilterSelectOption from './NftFilterSelectOption'; + +const useStyles = makeStyles<{ + variant: Variant; + expanded: boolean; +}>()((theme: Theme, {variant, expanded}) => ({ + root: { + flex: 'none', + [theme.breakpoints.down('sm')]: { + flex: 1, + }, + }, + selectButton: { + display: 'flex', + justifyContent: 'space-between', + alignItems: 'center', + ...(variant === 'chip' + ? { + borderWidth: 1, + borderStyle: 'solid', + borderColor: theme.palette.neutralShades[300], + borderRadius: (theme.shape.borderRadius as number) * 4, + padding: theme.spacing(1, 1.5), + '&:hover': { + backgroundColor: 'transparent', + '& .MuiTypography-root, & svg': { + color: theme.palette.primary.main, + }, + }, + '&[disabled]': { + borderColor: theme.palette.neutralShades[200], + '& .MuiTypography-root, & svg': { + color: theme.palette.neutralShades[400], + }, + }, + '& .MuiTypography-root, & svg': { + color: expanded + ? theme.palette.primary.main + : theme.palette.greyShades[900], + }, + } + : {}), + }, + label: { + color: theme.palette.grey[700], + fontWeight: theme.typography.fontWeightMedium, + textTransform: 'none', + whiteSpace: 'nowrap', + marginLeft: theme.spacing(1), + [theme.breakpoints.down('sm')]: { + marginLeft: 0, + fontWeight: theme.typography.fontWeightRegular, + }, + }, + activeValue: { + color: theme.palette.grey[700], + fontWeight: theme.typography.fontWeightMedium, + textTransform: 'none', + display: 'flex', + alignItems: 'center', + }, + dropIcon: { + fontSize: 20, // Icons require px size + color: theme.palette.grey[700], + marginLeft: theme.spacing(0.5), + }, +})); + +type Option = { + value: string; + label: string; +}; + +type Variant = 'simple' | 'chip'; + +type Props = { + id: string; + title?: string; + variant?: Variant; + onChange: (value: string) => void; + options: Option[]; + selected: string[]; + disabled: boolean; +}; + +const NftFilterSelect: React.FC = ({ + id, + title = '', + variant = 'simple', + onChange, + options, + selected, + disabled, +}) => { + const [anchorEl, setAnchorEl] = useState(null); + const {classes} = useStyles({variant, expanded: !!anchorEl}); + const selectId = `${title}${options.map(o => o.value)}`; + + const handleOpen = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleSelect = (newValue: string) => { + onChange(newValue); + handleClose(); + }; + + const handleClose = () => { + setAnchorEl(null); + }; + + return ( +
+ + + + {options + .filter(option => option.value !== '') + .map(option => ( + + ))} + +
+ ); +}; + +export default NftFilterSelect; diff --git a/server/components/TokenGallery/NftFilterSelectOption.tsx b/server/components/TokenGallery/NftFilterSelectOption.tsx new file mode 100644 index 00000000..f4b4003a --- /dev/null +++ b/server/components/TokenGallery/NftFilterSelectOption.tsx @@ -0,0 +1,69 @@ +import CheckIcon from '@mui/icons-material/Check'; +import MenuItem from '@mui/material/MenuItem'; +import type {Theme} from '@mui/material/styles'; +import type {ForwardedRef} from 'react'; +import React from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + menuItem: { + minWidth: 220, + minHeight: 40, + }, + checkIcon: { + marginRight: theme.spacing(1), + color: theme.palette.link.main, + }, + iconHolder: { + width: 36, + }, + menuItemText: { + ...theme.typography.body2, + display: 'flex', + justifyContent: 'space-between', + width: '100%', + fontWeight: theme.typography.fontWeightMedium, + }, +})); + +type Props = { + id: string; + value: string; + active: boolean; + label: string; + prefix?: string; + onSelect: (newValue: string) => void; +}; + +const NftFilterSelectOption = React.forwardRef( + (props: Props, ref: ForwardedRef) => { + const {value, active, prefix, label, onSelect} = props; + const {classes} = useStyles(); + const onClick = () => onSelect(value); + + return ( + + {active ? ( + + ) : ( +
+ )} +
+
+ {prefix} + {label} +
+
+ + ); + }, +); + +export default NftFilterSelectOption; diff --git a/server/components/TokenGallery/NftFirstTimeGalleryContainer.tsx b/server/components/TokenGallery/NftFirstTimeGalleryContainer.tsx new file mode 100644 index 00000000..63b8e4d9 --- /dev/null +++ b/server/components/TokenGallery/NftFirstTimeGalleryContainer.tsx @@ -0,0 +1,70 @@ +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import useTranslationContext from 'lib/i18n'; +import type {ReactChild} from 'react'; +import React from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +interface Props { + profileServiceUrl: string; + children: ReactChild; + className?: string; +} + +const useStyles = makeStyles()((theme: Theme) => ({ + nftGalleryFirstTimeContainer: { + background: theme.palette.neutralShades[100], + borderRadius: theme.shape.borderRadius, + display: 'flex', + flexDirection: 'column', + justifyContent: 'center', + alignItems: 'center', + verticalAlign: 'center', + textAlign: 'center', + marginTop: theme.spacing(6), + border: `${theme.palette.neutralShades[400]} 1px dashed`, + paddingTop: '24px', + }, + nftGalleryFirstTimeImg: { + maxWidth: '25%', + marginTop: theme.spacing(-2), + marginBottom: theme.spacing(-4), + }, + nftGalleryFirstTimeHeader: { + color: '#62626A', + paddingTop: theme.spacing(1), + paddingBottom: theme.spacing(1), + }, +})); + +const NftFirstTimeGalleryContainer = ({ + profileServiceUrl, + children, + className, +}: Props) => { + const [t] = useTranslationContext(); + const {classes, cx} = useStyles(); + + return ( +
+ + + {t('nftCollection.firstTimeConfigTitle')} + + + {t('nftCollection.firstTimeConfigDescription')} + + {children} +
+ ); +}; + +export default NftFirstTimeGalleryContainer; diff --git a/server/components/TokenGallery/NftGalleryData.tsx b/server/components/TokenGallery/NftGalleryData.tsx new file mode 100644 index 00000000..de7fd216 --- /dev/null +++ b/server/components/TokenGallery/NftGalleryData.tsx @@ -0,0 +1,193 @@ +import qs from 'qs'; +import {useState} from 'react'; + +import type {Nft} from './NftCard'; +import type {NftMintItem, NftResponse} from './NftGalleryManager'; + +export enum NftTag { + All = 'all', + Award = 'award', + DAO = 'dao', + Deed = 'land', + Developer = 'developer', + Domain = 'domain', + Education = 'education', + Gaming = 'gaming', + Hidden = 'hidden', + Ticket = 'ticket', + Sustainability = 'sustainability', + Wearable = 'wearable', +} + +interface Props { + domain: string; + isOwner: boolean; + nfts: Nft[]; + nftSymbolVisible: Record; + records?: Record; + profileServiceUrl: string; + itemsToUpdate: NftMintItem[]; + setIsAllNftsLoaded: (value: boolean) => void; + setNftDataLoading: (value: boolean) => void; + setItemsToUpdate: (value: NftMintItem[]) => void; + setRecords: (value: Record) => void; + setNfts: (value: Nft[]) => void; + setNftSymbolVisible: (value: Record) => void; + setTokenCount: (value: number) => void; +} + +export const getNextNftPageFn = ( + props: Props, +): ((reset?: boolean) => Promise) => { + const [nftCursors, setNftCursors] = useState< + Record + >({}); + + const handleNextNftPage = async (reset = false) => { + // reset the NFT gallery state on request + if (reset) { + props.nfts.length = 0; + props.setNfts([]); + props.setTokenCount(0); + props.itemsToUpdate.length = 0; + props.setItemsToUpdate([]); + Object.keys(props.nftSymbolVisible).forEach(key => { + delete props.nftSymbolVisible[key]; + }); + props.setNftSymbolVisible({}); + } + + const newNfts: Nft[] = []; + if (props.nfts.length === 0) { + // retrieve NFTs from all chains for the first time + const allSymbols = await getNftData(); + if (!allSymbols || Object.keys(allSymbols).length === 0) { + return; + } + props.setRecords(allSymbols); + Object.keys(allSymbols) + .sort() + .forEach(symbol => { + if (allSymbols[symbol].nfts.length === 0) { + return; + } + allSymbols[symbol].nfts.forEach(nft => { + nft.symbol = symbol; + nft.verified = allSymbols[symbol].verified; + nft.owner = props.isOwner; + nft.toggleVisibility = handleNftVisibilityToggle; + }); + newNfts.push(...allSymbols[symbol].nfts); + nftCursors[symbol] = allSymbols[symbol].cursor; + props.nftSymbolVisible[symbol] = allSymbols[symbol].verified; + }); + setNftCursors(nftCursors); + props.setNftSymbolVisible(props.nftSymbolVisible); + } else { + for (const symbol of Object.keys(nftCursors).sort()) { + const cursor = nftCursors[symbol]; + if (!cursor) { + continue; + } + const symbolNfts = await getNftData(symbol, cursor); + if (!symbolNfts || Object.keys(symbolNfts).length === 0) { + return; + } + if (symbolNfts[symbol].nfts) { + symbolNfts[symbol].nfts.forEach(nft => { + nft.symbol = symbol; + nft.verified = symbolNfts[symbol].verified; + nft.owner = props.isOwner; + nft.toggleVisibility = handleNftVisibilityToggle; + }); + newNfts.push(...symbolNfts[symbol].nfts); + } + if (symbolNfts[symbol].cursor) { + nftCursors[symbol] = symbolNfts[symbol].cursor; + } + } + } + newNfts.forEach(nft => { + if (!nft.tags) { + nft.tags = []; + } + if (nft.symbol) nft.tags.push(nft.symbol); + if (nft.public) nft.tags.push(NftTag.All); + }); + const newNftsFiltered = removeDuplicates( + newNfts + .filter( + newNft => + isImageUrl(newNft.image_url) || isImageUrl(newNft.video_url), + ) + .filter(newNft => newNft.mint) + .filter( + newNft => !props.nfts.map(nft => nft.mint).includes(newNft.mint), + ), + ); + props.setIsAllNftsLoaded(newNftsFiltered.length === 0); + props.setNfts([...props.nfts, ...newNftsFiltered]); + }; + + // handleNftVisibilityToggle toggles at items visibility value + const handleNftVisibilityToggle = ( + symbol: string, + mint: string, + visible: boolean, + ) => { + props.itemsToUpdate.push({ + symbol, + mint, + public: visible, + }); + props.setItemsToUpdate([...props.itemsToUpdate]); + }; + + // removes NFTs that already exist on the same blockchain + function removeDuplicates(allNfts: Nft[]): Nft[] { + const uniqueNfts: Nft[] = []; + allNfts.forEach(allNft => { + const existingNfts = uniqueNfts.filter( + uniqueNft => + uniqueNft.symbol === allNft.symbol && uniqueNft.name === allNft.name, + ); + if (existingNfts.length === 0) { + uniqueNfts.push(allNft); + } + }); + return uniqueNfts; + } + + const isImageUrl = (url?: string): boolean => { + try { + if (url?.toLowerCase().startsWith('https://')) { + return true; + } + } catch (e) { + console.warn('unable to parse url', url); + } + return false; + }; + + const getNftData = async ( + symbols?: string, + cursor?: string, + ): Promise | undefined> => { + try { + props.setNftDataLoading(true); + const queryStringParams = qs.stringify({ + symbols, + cursor, + }); + const domainNftUrl = `${props.profileServiceUrl}/public/${props.domain}/nfts?${queryStringParams}`; + const response = await fetch(domainNftUrl); + return await response.json(); + } catch (e) { + console.error('error retrieving NFT data', e); + } finally { + props.setNftDataLoading(false); + } + return undefined; + }; + return handleNextNftPage; +}; diff --git a/server/components/TokenGallery/NftGalleryManager.tsx b/server/components/TokenGallery/NftGalleryManager.tsx new file mode 100644 index 00000000..6df973fc --- /dev/null +++ b/server/components/TokenGallery/NftGalleryManager.tsx @@ -0,0 +1,389 @@ +import SettingsOutlined from '@mui/icons-material/SettingsOutlined'; +import VisibilityOff from '@mui/icons-material/VisibilityOff'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Checkbox from '@mui/material/Checkbox'; +import CircularProgress from '@mui/material/CircularProgress'; +import Dialog from '@mui/material/Dialog'; +import DialogActions from '@mui/material/DialogActions'; +import DialogContent from '@mui/material/DialogContent'; +import DialogTitle from '@mui/material/DialogTitle'; +import Divider from '@mui/material/Divider'; +import FormControlLabel from '@mui/material/FormControlLabel'; +import FormGroup from '@mui/material/FormGroup'; +import Link from '@mui/material/Link'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import {ProfileManager} from 'components/Wallet/ProfileManager'; +import useTranslationContext from 'lib/i18n'; +import type {Web3Dependencies} from 'lib/types/web3'; +import type {ReactElement} from 'react'; +import React, {useEffect, useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import type {Nft} from './NftCard'; + +const useStyles = makeStyles()((theme: Theme) => ({ + flexContainer: { + marginTop: '0px', + display: 'flex', + verticalAlign: 'center', + textAlign: 'center', + alignItems: 'center', + }, + symbolContainer: { + display: 'flex', + textAlign: 'left', + }, + configLink: { + color: '#62626A', + }, + buttonLink: { + marginRight: '1rem', + fontSize: theme.typography.body2.fontSize, + lineHeight: 1.5, + fontWeight: theme.typography.fontWeightMedium, + transition: theme.transitions.create('color'), + '&:hover': { + textDecoration: 'none', + color: theme.palette.primary.main, + }, + }, + symbolHeaderLabelOn: { + padding: theme.spacing(0, 0.75), + fontSize: theme.typography.body2.fontSize, + lineHeight: '1.25rem', + backgroundColor: theme.palette.successShades[700], + color: theme.palette.white, + borderRadius: theme.shape.borderRadius, + marginLeft: theme.spacing(1.5), + cursor: 'pointer', + }, + symbolHeaderLabelOff: { + padding: theme.spacing(0, 0.75), + fontSize: theme.typography.body2.fontSize, + lineHeight: '1.25rem', + backgroundColor: theme.palette.neutralShades[200], + borderRadius: theme.shape.borderRadius, + marginLeft: theme.spacing(1.5), + cursor: 'pointer', + }, + spinner: { + margin: theme.spacing(7), + textAlign: 'center', + }, +})); + +export interface NftResponse { + nfts: Nft[]; + address: string; + verified: boolean; + enabled: boolean; + cursor?: string; +} + +interface MessageResponse { + message: string; + headers: { + ['x-auth-expires']: number; + }; +} + +interface NftRequest { + symbol: string; + address: string; + public: boolean; + showAllItems: boolean; + order?: number; + items?: NftRequestItem[]; +} + +export interface NftRequestItem { + mint: string; + public: boolean; +} + +export type NftMintItem = NftRequestItem & { + symbol: string; +}; + +export type NftGalleryManagerProps = { + domain: string; + ownerAddress: string; + records?: Record; + profileServiceUrl: string; + itemsToUpdate: NftMintItem[]; + setRecords: (value: Record) => void; + getNextNftPage: (reset?: boolean) => Promise; + setWeb3Deps: (value: Web3Dependencies | undefined) => void; + hasNfts?: boolean; +}; + +export type ManagerProps = NftGalleryManagerProps & { + saveClicked: boolean; + setSaveClicked: (value: boolean) => void; + setModalOpen: (value: boolean) => void; +}; + +export const NftGalleryManager: React.FC = ({ + domain, + ownerAddress, + records, + profileServiceUrl, + itemsToUpdate, + setRecords, + setWeb3Deps, + getNextNftPage: getNextNftPage, + hasNfts, +}) => { + const [t] = useTranslationContext(); + const {classes, cx} = useStyles(); + const [saveClicked, setSaveClicked] = useState(false); + const [modalOpen, setModalOpen] = useState(false); + + const handleDialogOpen = () => { + setSaveClicked(false); + setModalOpen(true); + }; + + const handleCancelClicked = () => { + setModalOpen(false); + }; + + const handleSaveClicked = () => { + setSaveClicked(true); + }; + + return ( + <> + {itemsToUpdate.length > 0 && ( +
+ +
+ + {t('common.confirm')}{' '} + {itemsToUpdate.length > 0 && ` (${itemsToUpdate.length})`} +
+ + +
+ )} + {hasNfts ? ( + +
+ + {t('manage.configure')}{' '} +
+ + ) : ( + + )} + + {t('nftCollection.manageTitle')} + + + {t('nftCollection.manageDescription')} + + + {itemsToUpdate.length > 0 && ( +
+ + {t('nftCollection.manageVisibilityTitle')} + + + {t('nftCollection.manageVisibility', { + count: itemsToUpdate.length, + })} + +
+ )} +
+ + + + +
+ + ); +}; + +export const Manager: React.FC = ({ + domain, + ownerAddress, + records, + profileServiceUrl, + itemsToUpdate, + saveClicked, + setSaveClicked, + setRecords, + setWeb3Deps, + getNextNftPage, +}) => { + const {classes} = useStyles(); + + const [symbolToggles, setSymbolToggles] = useState(); + const [loading, setLoading] = useState(false); + + // render the symbol table + useEffect(() => { + renderSymbols(); + }, [records]); + + const handleSymbolToggle = (symbol: string) => { + if (!records) { + return; + } + records[symbol].enabled = !records[symbol].enabled; + setRecords(records); + renderSymbols(); + }; + + // send final call to save preferences to profile API + const handleSaveProfile = async (signature: string, expiry: string) => { + setLoading(true); + + // prepare the request body + if (!records) { + return; + } + + // store request body + const requestBody: NftRequest[] = []; + Object.keys(records).forEach(symbol => { + requestBody.push({ + symbol, + address: records[symbol].address, + public: records[symbol].enabled, + showAllItems: true, + items: itemsToUpdate + .filter(item => item.symbol === symbol) + .map(item => { + return { + mint: item.mint, + public: item.public, + }; + }), + }); + }); + + // make the request + const domainNftUrl = `${profileServiceUrl}/user/${domain}/nfts`; + await fetch(domainNftUrl, { + method: 'POST', + mode: 'cors', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + 'x-auth-domain': domain, + 'x-auth-expires': expiry, + 'x-auth-signature': signature, + }, + body: JSON.stringify(requestBody), + }); + + // wait a moment before reloading + await new Promise(resolve => setTimeout(resolve, 1000)); + await getNextNftPage(true); + }; + + const renderSymbols = () => { + if (!records) { + return; + } + setSymbolToggles( +
+ + {Object.keys(records!) + .sort() + .map(symbol => ( +
+ handleSymbolToggle(symbol)} + /> + } + /> +
+ ))} +
+
, + ); + }; + + return ( + + {records && ( +
+ {!loading ? ( +
{symbolToggles}
+ ) : ( +
+ +
+ )} + +
+ )} +
+ ); +}; diff --git a/server/components/TokenGallery/NftGalleryView.tsx b/server/components/TokenGallery/NftGalleryView.tsx new file mode 100644 index 00000000..1c815621 --- /dev/null +++ b/server/components/TokenGallery/NftGalleryView.tsx @@ -0,0 +1,391 @@ +import Clear from '@mui/icons-material/Clear'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Chip from '@mui/material/Chip'; +import CircularProgress from '@mui/material/CircularProgress'; +import Grid from '@mui/material/Grid'; +import Tooltip from '@mui/material/Tooltip'; +import type {Theme} from '@mui/material/styles'; +import useTranslationContext from 'lib/i18n'; +import React, {useEffect, useState} from 'react'; +import InfiniteScroll from 'react-infinite-scroll-component'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import type {Nft} from './NftCard'; +import NftCard from './NftCard'; +import NftFilterSelect from './NftFilterSelect'; +import {NftTag} from './NftGalleryData'; + +const useStyles = makeStyles()((theme: Theme) => ({ + container: { + marginLeft: '-2px', + }, + cardContainer: { + position: 'relative', + }, + infinitescroll: { + paddingRight: '1px', + paddingLeft: '1px', + paddingTop: theme.spacing(1), + paddingBottom: theme.spacing(1), + }, + filterContainer: { + border: '1px solid #DDDDDF', + borderRadius: '12px', + display: 'flex', + justifyContent: 'space-between', + flexWrap: 'wrap', + marginTop: theme.spacing(0), + marginBottom: theme.spacing(1), + padding: theme.spacing(1), + alignItems: 'center', + }, + filterChipContainer: { + display: 'flex', + justifyContent: 'flex-start', + flexWrap: 'wrap', + marginTop: theme.spacing(0), + marginBottom: theme.spacing(1), + alignItems: 'center', + }, + filterListContainer: { + display: 'flex', + flexWrap: 'nowrap', + verticalAlign: 'center', + alignItems: 'center', + }, + filterChip: { + textTransform: 'capitalize', + marginRight: theme.spacing(1), + marginBottom: theme.spacing(1), + cursor: 'pointer', + backgroundColor: '#fff', + fontWeight: 'bold', + color: theme.palette.neutralShades[500], + border: `1px solid ${theme.palette.neutralShades[500]}`, + }, + filterClearButton: { + alignItems: 'flex-start', + }, +})); + +enum FilterType { + Chain = 'chain', + Category = 'category', +} + +interface Props { + domain: string; + isOwner: boolean; + nfts: Nft[]; + nftSymbolVisible: Record; + isAllNftsLoaded: boolean; + setTokenCount: (arg0: number) => void; +} + +const NftGalleryView = ({ + domain, + nfts: allNfts, + nftSymbolVisible, + isOwner, + isAllNftsLoaded, + setTokenCount, +}: Props) => { + // state management + const imagesPerPage = 10; + const {classes} = useStyles(); + const [nfts, setNfts] = useState(allNfts); + const [lastNftIndex, setLastNftIndex] = useState(imagesPerPage); + const [t] = useTranslationContext(); + + // filter management + const defaultVisibility = { + [FilterType.Category]: { + [NftTag.All]: true, + }, + [FilterType.Chain]: { + [NftTag.All]: true, + }, + }; + const [visibleTags, setVisibleTags] = + useState>>(defaultVisibility); + const [selectedSymbol, setSelectedSymbol] = useState([]); + const [selectedCategory, setSelectedCategory] = useState([]); + + useEffect(() => { + setVisibility(FilterType.Chain, selectedSymbol); + }, [selectedSymbol]); + + useEffect(() => { + setVisibility(FilterType.Category, selectedCategory); + }, [selectedCategory]); + + useEffect(() => { + // update set of visible NFTs based on currently active filter + const visibleNfts = allNfts + // remove unverified data + .filter( + nft => isSymbolVerified(nft.symbol || '') && (isOwner || nft.public), + ) + + // remove data with hidden tag + .filter(nft => { + const isNftHidden = nft.tags?.includes(NftTag.Hidden); + return ( + !isNftHidden || + (isNftHidden && visibleTags[FilterType.Category][NftTag.Hidden]) + ); + }) + + // remove data based on selected filters + .filter(nft => { + let nftVisible = true; + for (const filterType of [FilterType.Chain, FilterType.Category]) { + let filterTypeMatch = + Object.keys(visibleTags[filterType]).length === 0 || + visibleTags[filterType][NftTag.All]; + for (const tag of Object.keys(visibleTags[filterType])) { + if (nft.tags?.includes(tag)) { + filterTypeMatch = visibleTags[filterType][tag] === true; + } + } + nftVisible = nftVisible && filterTypeMatch; + } + return nftVisible; + }); + + // set the final state of visible NFT data + setNfts(visibleNfts); + setTokenCount(visibleNfts.length); + setLastNftIndex(imagesPerPage); + }, [allNfts, visibleTags]); + + const setVisibility = (filterType: FilterType, items: string[]) => { + const newTags: Record = {}; + items.forEach(tag => (newTags[tag] = true)); + if (Object.keys(newTags).length === 0) { + newTags[NftTag.All] = true; + } + setVisibleTags({ + ...visibleTags, + [filterType]: newTags, + }); + }; + + const handleSymbolChange = async (symbol: string) => { + if (symbol === NftTag.All) { + setSelectedSymbol([]); + return; + } + if (selectedSymbol.includes(symbol)) { + setSelectedSymbol([ + ...selectedSymbol.filter(existing => existing !== symbol), + ]); + } else { + setSelectedSymbol([...selectedSymbol, symbol]); + } + }; + + const handleCategoryChange = async (category: string) => { + if (category === NftTag.All) { + setSelectedCategory([]); + return; + } + if (selectedCategory.includes(category)) { + setSelectedCategory([ + ...selectedCategory.filter(existing => existing !== category), + ]); + } else { + setSelectedCategory([...selectedCategory, category]); + } + }; + + const handleChipClick = (filterType: FilterType, tag: string) => { + switch (filterType) { + case FilterType.Category: + setSelectedCategory([ + ...selectedCategory.filter(existing => existing !== tag), + ]); + break; + case FilterType.Chain: + setSelectedSymbol([ + ...selectedSymbol.filter(existing => existing !== tag), + ]); + break; + } + }; + + const handleClearClick = () => { + setSelectedSymbol([]); + setSelectedCategory([]); + setVisibleTags(defaultVisibility); + }; + + const isSymbolVerified = (symbol: string): boolean => { + return ( + allNfts.filter(nft => nft.symbol === symbol && nft.verified).length > 0 + ); + }; + + const getFilterOption = ( + name: string, + tag: NftTag, + ): {value: string; label: string} => { + // count items belonging to filter + const tagItemCount = allNfts + .filter(nft => nft.tags?.includes(tag)) + .filter(nft => { + const isNftHidden = nft.tags?.includes(NftTag.Hidden); + return !isNftHidden || (isNftHidden && tag === NftTag.Hidden); + }).length; + + // do not show empty tags + if (!tagItemCount) { + return {value: '', label: ''}; + } + + // only show hidden tag to owner + if (tag === NftTag.Hidden && !isOwner) { + return {value: '', label: ''}; + } + + return {value: tag, label: `${name} (${tagItemCount})`}; + }; + + return ( +
+ {allNfts.length > 0 && ( +
+
+
+ {Object.keys(nftSymbolVisible).filter(symbol => + isSymbolVerified(symbol), + ).length > 1 && ( + isSymbolVerified(symbol)) + .map(symbol => { + return getFilterOption(symbol, symbol as NftTag); + }), + ]} + /> + )} + +
+
+ {!isAllNftsLoaded && ( + + + + )} +
+
+
+
+ {Object.keys(visibleTags).map(filterType => { + return Object.keys(visibleTags[filterType]) + .filter( + tag => tag !== NftTag.All && visibleTags[filterType][tag], + ) + .map(tag => { + return ( + + {tag} + +
+ } + onClick={() => + handleChipClick(filterType as FilterType, tag) + } + className={classes.filterChip} + /> + ); + }); + })} + {(selectedSymbol.length > 0 || selectedCategory.length > 0) && ( + + )} +
+
+ setLastNftIndex(lastNftIndex + imagesPerPage)} + dataLength={lastNftIndex} + loader={
} + scrollThreshold={0.7} + > + + {nfts + .slice( + 0, + lastNftIndex < nfts.length ? lastNftIndex : nfts.length, + ) + .map((nft, index) => ( + + + + + + ))} + +
+
+ )} +
+ ); +}; + +export default NftGalleryView; diff --git a/server/components/TokenGallery/NftImage.tsx b/server/components/TokenGallery/NftImage.tsx new file mode 100644 index 00000000..72869f8c --- /dev/null +++ b/server/components/TokenGallery/NftImage.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import {LazyLoadImage} from 'react-lazy-load-image-component'; + +interface Props { + src: string; + alt: string; + className: string; + onClick?: () => void; +} + +const NftImage = ({src, alt, className, onClick}: Props) => { + return ( + + ); +}; + +export default NftImage; diff --git a/server/components/TokenGallery/NftModal.tsx b/server/components/TokenGallery/NftModal.tsx new file mode 100644 index 00000000..d1170493 --- /dev/null +++ b/server/components/TokenGallery/NftModal.tsx @@ -0,0 +1,434 @@ +import Close from '@mui/icons-material/Close'; +import OpenInNew from '@mui/icons-material/OpenInNew'; +import Button from '@mui/material/Button'; +import Grid from '@mui/material/Grid'; +import IconButton from '@mui/material/IconButton'; +import Link from '@mui/material/Link'; +import Modal from '@mui/material/Modal'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import {useTheme} from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import {CryptoIcon} from 'components/Image/CryptoIcon'; +import useTranslationContext from 'lib/i18n'; +import type {AllCurrenciesType} from 'lib/types/blockchain'; +import React from 'react'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +import type {Nft} from './NftCard'; +import NftImage from './NftImage'; + +const useStyles = makeStyles()((theme: Theme) => ({ + nftModal: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + [theme.breakpoints.down('sm')]: { + '&.MuiBackdrop-root': { + backgroundColor: 'rgba(0, 0, 0, 0.7)', + filter: 'blur(0.5rem)', + }, + }, + '&::focus': {outline: 'none !important'}, + }, + + nftGrid: { + overflowY: 'scroll', + maxHeight: '100vh', + background: 'rgba(0, 0, 0, 0.8)', + backdropFilter: 'blur(50px)', + width: theme.spacing(145), + p: theme.spacing(3), + borderRadius: '1.5rem', + [theme.breakpoints.between('xs', 'sm')]: { + overflowX: 'unset', + maxHeight: '100vh', + }, + [theme.breakpoints.only('xs')]: { + p: theme.spacing(1.5), + height: 'auto', + width: 'auto', + borderRadius: 0, + }, + [theme.breakpoints.up('sm')]: { + marginLeft: '1rem', + marginRight: '1rem', + }, + }, + mobileImageIcon: { + position: 'relative', + }, + + nftImgContainer: { + width: theme.spacing(71.75), + alignItems: 'center', + height: '100%', + [theme.breakpoints.only('xs')]: { + display: 'block', + p: theme.spacing(1.5), + maxHeight: '100vh', + alignItems: 'center', + width: 'auto', + }, + [theme.breakpoints.between('sm', 'md')]: { + width: '100%', + }, + }, + + nftImg: { + width: 'inherit', + height: 'inherit', + maxWidth: 'inherit', + maxHeight: 'inherit', + objectFit: 'cover', + alignContent: 'center', + borderTopLeftRadius: '1.5rem', + borderBottomLeftRadius: '1.5rem', + [theme.breakpoints.down('sm')]: { + width: '100%', + }, + + [theme.breakpoints.only('xs')]: { + borderRadius: 0, + }, + }, + + nftInfoContainer: { + display: 'flex', + flexFlow: 'column', + maxHeight: '100vh', + overflowY: 'scroll', + height: theme.spacing(72.0625), + width: theme.spacing(71.75), + + [theme.breakpoints.between('sm', 'md')]: { + height: 'inherit', + width: 'inherit', + }, + + [theme.breakpoints.only('xs')]: { + height: 'inherit', + borderTopRightRadius: 0, + borderBottomRightRadius: 0, + width: 'inherit', + }, + + [theme.breakpoints.down('md')]: { + p: theme.spacing(4), + }, + + borderTopRightRadius: '1.5rem', + borderBottomRightRadius: '1.5rem', + padding: theme.spacing(4), + color: '#fff', + }, + currencyIcon: { + width: 15, + height: 15, + marginLeft: '0.2rem', + paddingTop: '0.3rem', + }, + description: { + paddingTop: '3rem', + }, + text: { + marginTop: '1rem', + color: 'rgba(255, 255, 255, 0.7)', + }, + details: { + display: 'flex', + flexDirection: 'column', + paddingTop: '1.5rem', + flexFlow: 'column wrap', + }, + nftDetailsSectionName: { + color: 'rgba(255, 255, 255, 0.7)', + wordBreak: 'unset', + }, + sectionName: { + fontSize: '1.125rem', + marginBottom: '1rem', + }, + button: { + marginTop: '2rem', + color: '#fff', + borderColor: 'rgba(255, 255, 255, 0.7)', + }, + newWindowIcon: { + marginRight: '0.5rem', + }, + descriptionLink: { + fontWeight: 'bold', + color: '#fff', + textDecoration: 'none', + }, + closeIconSection: { + [theme.breakpoints.up('sm')]: { + display: 'flex', + justifyContent: 'flex-end', + }, + + [theme.breakpoints.only('xs')]: { + position: 'absolute', + top: '5vw', + left: '90vw', + }, + }, + + closeIcon: { + color: '#fff', + }, + + detailsText: { + display: 'flex', + flexFlow: 'row', + }, + + detailSections: { + marginRight: '1.5rem', + [theme.breakpoints.only('sm')]: { + fontSize: '12px', + }, + }, + + contractLink: { + fontSize: '14px', + [theme.breakpoints.only('sm')]: { + fontSize: '12px', + }, + }, +})); + +export interface NftModalProps { + handleClose: () => void; + open: boolean; + nft: Nft; +} + +const NftModal: React.FC = ({ + open, + handleClose, + nft, +}: NftModalProps) => { + const {classes, cx} = useStyles(); + const [t] = useTranslationContext(); + const theme = useTheme(); + const isMobile = useMediaQuery(theme.breakpoints.down('sm')); + let udMeLink: string | undefined; + if (nft?.mint) { + const contractAddress = nft.mint.split('/')[0]; + if ( + config.UNSTOPPABLE_CONTRACT_ADDRESS.includes( + contractAddress.toLowerCase(), + ) + ) { + udMeLink = `${config.UD_ME_BASE_URL}/${nft.name}`; + } + } + + const handleContractAddress = (contract: string, index = 0) => { + const splitContract = contract?.split('/'); + const modifiedContractStr = + splitContract?.length > index ? splitContract[index] : splitContract[0]; + const displayContractStr = + modifiedContractStr.length > 5 + ? `${modifiedContractStr?.slice(0, 5)}...${modifiedContractStr?.slice( + -4, + )}` + : modifiedContractStr; + return ( + + + {displayContractStr}{' '} + + + + ); + }; + + const handleDescription = (description: string, marketplaceUrl: string) => { + if (description?.length > 205) { + return ( + <> + + {description.substring(0, 205)} ... + + + {t('nftCollection.seeMore')} + + + ); + } + return ( + <> + + {description} + + + ); + }; + + const handleTitle = (): string => { + if (!nft.collection) return nft.name; + return nft.collection; + }; + + return open ? ( + + + +
+ {isMobile ? ( +
+
+ + + +
+ +
+ ) : ( + + )} +
+
+ +
+ {!isMobile && ( +
+ + + +
+ )} +
+ + {handleTitle()} + + + {nft.name} +
+ {nft.description && ( +
+ + {t('nftCollection.description')} + + {handleDescription(nft.description, nft.link)} +
+ )} + {(nft.symbol || nft.mint) && ( +
+ + {t('nftCollection.nftDetails')} + +
+ {nft.symbol && ( +
+ + {t('nftCollection.blockchain')} + + {nft.symbol} +
+ )} + {nft.mint?.includes('/') && ( +
+ + {t('nftCollection.contract')} + + {handleContractAddress(nft?.mint || '')} +
+ )} + {nft.mint && ( +
+ + {t('nftCollection.tokenId')} + + {handleContractAddress(nft?.mint || '', 1)} +
+ )} +
+
+ )} + {nft.link && ( + + )} + {udMeLink && ( + + )} +
+
+
+
+ ) : null; +}; + +export default NftModal; diff --git a/server/components/TokenGallery/TokenGallery.tsx b/server/components/TokenGallery/TokenGallery.tsx new file mode 100644 index 00000000..7587423c --- /dev/null +++ b/server/components/TokenGallery/TokenGallery.tsx @@ -0,0 +1,273 @@ +import AutoAwesome from '@mui/icons-material/AutoAwesome'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import NFTGalleryCarousel from 'components/TokenGallery/NFTGalleryCarousel'; +import NftFirstTimeGalleryContainer from 'components/TokenGallery/NftFirstTimeGalleryContainer'; +import {getNextNftPageFn} from 'components/TokenGallery/NftGalleryData'; +import type { + NftMintItem, + NftResponse, +} from 'components/TokenGallery/NftGalleryManager'; +import {NftGalleryManager} from 'components/TokenGallery/NftGalleryManager'; +import NftGalleryView from 'components/TokenGallery/NftGalleryView'; +import useTokenGallery from 'hooks/useTokenGallery'; +import useWeb3Context from 'hooks/useWeb3Context'; +import useTranslationContext from 'lib/i18n'; +import React, {useEffect, useState} from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +export const useStyles = makeStyles()((theme: Theme) => ({ + sectionHeader: { + display: 'flex', + alignItems: 'center', + verticalAlign: 'center', + textAlign: 'center', + paddingBottom: theme.spacing(1), + fontWeight: theme.typography.fontWeightBold, + fontSize: theme.typography.h5.fontSize, + margin: theme.spacing(6, 0, 1), + lineHeight: 1.4, + }, + nftGalleryConfigureButton: { + padding: theme.spacing(1), + marginTop: theme.spacing(2), + marginBottom: theme.spacing(2), + }, + nftGalleryHeader: { + display: 'flex', + flexWrap: 'wrap', + justifyContent: 'space-between', + }, + nftEmptyGallery: { + marginBottom: '1.5rem', + }, + tokenCount: { + minWidth: '30px', + minHeight: '10px', + padding: '0px 5px', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + borderRadius: '20px', + backgroundColor: theme.palette.primaryShades[200], + color: theme.palette.primary.main, + fontSize: theme.typography.h5.fontSize, + fontWeight: theme.typography.fontWeightBold, + marginLeft: '10px', + }, + nftGalleryLinks: { + display: 'flex', + justifyContent: 'right', + verticalAlign: 'center', + fontSize: theme.typography.body2.fontSize, + }, + nftShowAll: { + color: theme.palette.primary.main, + fontSize: theme.typography.body2.fontSize, + lineHeight: 1.5, + fontWeight: theme.typography.fontWeightMedium, + transition: theme.transitions.create('color'), + '&:hover': { + textDecoration: 'none', + color: theme.palette.primary.main, + }, + cursor: 'pointer', + }, +})); + +export interface TokenGalleryProps { + domain: string; + enabled?: boolean; + isOwner?: boolean; + ownerAddress: string; + profileServiceUrl: string; +} + +const TokenGallery: React.FC = ({ + domain, + enabled, + isOwner, + ownerAddress, + profileServiceUrl, +}: TokenGalleryProps) => { + const {classes, cx} = useStyles(); + const {setWeb3Deps} = useWeb3Context(); + const { + expanded, + setExpanded, + nfts, + setNfts, + nftSymbolVisible, + setNftSymbolVisible, + } = useTokenGallery(); + const [t] = useTranslationContext(); + const [nftAddressRecords, setNftAddressRecords] = + useState>(); + const [hasNfts, setHasNfts] = useState(enabled); + const [nftDataLoading, setNftDataLoading] = useState(true); + const [itemsToUpdate, setItemsToUpdate] = useState([]); + const [isAllNftsLoaded, setIsAllNftsLoaded] = useState(false); + const [tokenCount, setTokenCount] = useState(0); + + // NFT gallery data paging method + const getNextNftPage = getNextNftPageFn({ + domain, + isOwner: isOwner || false, + nfts: nfts || [], + nftSymbolVisible: nftSymbolVisible || {}, + records: nftAddressRecords, + profileServiceUrl, + itemsToUpdate, + setIsAllNftsLoaded, + setNftDataLoading, + setItemsToUpdate, + setRecords: setNftAddressRecords, + setNfts, + setNftSymbolVisible, + setTokenCount, + }); + + // effect to load the first page of NFT data, and also to refresh the + // NFT gallery when owner login status changes. + useEffect(() => { + if (isOwner === undefined || !enabled) { + return; + } + void getNextNftPage(true); + }, [isOwner]); + + // recursively load remaining NFT gallery data pages in the background + // so they are available to the user later + useEffect(() => { + if (!enabled) { + return; + } + + if (!nftDataLoading) { + setHasNfts(nfts && nfts.length > 0); + } + + // stop loading images if all are loaded, or none available + if (isAllNftsLoaded || nftDataLoading || nfts?.length === 0) { + return; + } + + // retrieve the next page of NFT data. The method takes care of paging + // and state management internally. + void getNextNftPage(); + }, [nfts, isAllNftsLoaded, expanded]); + + // only render when enabled + if (!enabled) { + return null; + } + + return nftSymbolVisible && + Object.keys(nftSymbolVisible).length === 0 && + !hasNfts && + !nftDataLoading ? ( + isOwner ? ( + +
+ +
+
+ ) : null + ) : ( +
+
+ + {t('profile.gallery')} + {expanded && ( + + {tokenCount} + + )} + +
+ {isOwner && ( + + )} + { + setExpanded(!expanded); + return false; + }} + className={classes.nftShowAll} + > + {expanded ? ( + t('profile.collapse') + ) : ( +
+ {' '} + {t('common.expandShowcase')} +
+ )} +
+
+
+ {nfts?.filter(nft => nft.public).length === 0 && + isOwner && + !nftDataLoading && ( +
+ + {t('nftCollection.noNftsConfigured')} + +
+ )} + {expanded ? ( + + ) : ( + nft.public && nft.verified).length < 15 + ? nfts + : nfts.filter(nft => nft.public && nft.verified).slice(0, 15) + : [] + } + nftSymbolVisible={nftSymbolVisible || {}} + /> + )} +
+ ); +}; + +export default TokenGallery; diff --git a/server/components/Wallet/AccessEthereum.tsx b/server/components/Wallet/AccessEthereum.tsx new file mode 100644 index 00000000..46fa9720 --- /dev/null +++ b/server/components/Wallet/AccessEthereum.tsx @@ -0,0 +1,144 @@ +import Box from '@mui/material/Box'; +import Grid from '@mui/material/Grid'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import Link from 'components/Link'; +import WalletButton from 'components/Wallet/WalletButton'; +import type {Signer} from 'ethers'; +import type {WagmiConnectorType, WalletName} from 'lib/types/wallet'; +import {WalletOptions} from 'lib/types/wallet'; +import type {Web3Dependencies} from 'lib/types/web3'; +import React, {useEffect, useState} from 'react'; +import type {Connector} from 'wagmi'; +import {useAccount, useConnect, useDisconnect, useWalletClient} from 'wagmi'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +export const useStyles = makeStyles()((theme: Theme) => ({ + listContainer: { + outline: `2px solid ${theme.palette.white}`, + outlineOffset: -1, + }, + button: { + marginTop: theme.spacing(2), + }, +})); + +export interface AccessEthereumProps { + onComplete: (web3Deps?: Web3Dependencies) => void; + onError?: (message: string) => void; +} + +const AccessEthereum: React.FC = ({ + onComplete, + onError, +}) => { + const {classes} = useStyles(); + const [isReady, setIsReady] = useState(false); + const [selectedWallet, setSelectedWallet] = useState(); + + // wagmi hooks + const {disconnect} = useDisconnect(); + const {data: connectedSigner} = useWalletClient(); + const {address: connectedAddress, isConnected} = useAccount(); + const { + connect, + connectors, + error: wagmiError, + isLoading, + pendingConnector, + } = useConnect(); + + useEffect(() => { + if (isLoading || isReady) { + return; + } + if (isConnected) { + disconnect(); + return; + } + setIsReady(true); + }, [isLoading, isConnected]); + + useEffect(() => { + if (!isConnected || !isReady || !connectedAddress || !connectedSigner) { + return; + } + void handleConnected( + connectedAddress, + connectedSigner as unknown as Signer, + ); + }, [connectedAddress, connectedSigner, isConnected, isReady]); + + useEffect(() => { + if (!wagmiError) { + return; + } + if (onError) { + onError(wagmiError.message); + } + }, [wagmiError]); + + const handleClick = (walletName: WalletName, connector: Connector) => { + setSelectedWallet(walletName); + connect({connector}); + }; + + const handleConnected = async (address: string, signer: Signer) => { + if (onError) { + onError(''); + } + onComplete({ + address, + signer, + }); + }; + + const getConnector = (id: WagmiConnectorType) => { + return connectors.find(c => c.id === id); + }; + + return ( + <> + + + Access your Ethereum browser wallet. + + + For more information please see this{' '} + + guide. + + + + <> + + {Object.keys(WalletOptions).map(k => { + const connector = getConnector( + WalletOptions[k as WalletName].connectorType, + ); + if (!connector) { + return null; + } + return ( + + handleClick(k as WalletName, connector)} + /> + + ); + })} + + + + ); +}; + +export default AccessEthereum; diff --git a/server/components/Wallet/AccessWallet.tsx b/server/components/Wallet/AccessWallet.tsx new file mode 100644 index 00000000..11ee5928 --- /dev/null +++ b/server/components/Wallet/AccessWallet.tsx @@ -0,0 +1,194 @@ +import CloseIcon from '@mui/icons-material/Close'; +import Alert from '@mui/lab/Alert'; +import Dialog from '@mui/material/Dialog'; +import IconButton from '@mui/material/IconButton'; +import Popover from '@mui/material/Popover'; +import Typography from '@mui/material/Typography'; +import type {Theme} from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import AccessEthereum from 'components/Wallet/AccessEthereum'; +import type {Web3Dependencies} from 'lib/types/web3'; +import React, {useState} from 'react'; +import useSettingsStyles from 'styles/pages/settings.styles'; +import {WagmiConfig, configureChains, createConfig, mainnet} from 'wagmi'; +import {CoinbaseWalletConnector} from 'wagmi/connectors/coinbaseWallet'; +import {InjectedConnector} from 'wagmi/connectors/injected'; +import {MetaMaskConnector} from 'wagmi/connectors/metaMask'; +import {WalletConnectConnector} from 'wagmi/connectors/walletConnect'; +import {publicProvider} from 'wagmi/providers/public'; + +import config from '@unstoppabledomains/config'; +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + modalRoot: { + left: '0 !important', + bottom: '0 !important', + [theme.breakpoints.down('md')]: { + maxWidth: 432, + }, + }, + modalHeader: { + width: '100%', + display: 'flex', + alignItems: 'center', + justifyContent: 'space-between', + padding: theme.spacing(1.5), + paddingLeft: theme.spacing(3), + }, + modalTitle: { + fontSize: theme.typography.h6.fontSize, + fontWeight: theme.typography.fontWeightBold, + }, + modalContent: { + padding: theme.spacing(3), + paddingTop: 0, + }, +})); + +type Props = { + address?: string; + message?: React.ReactNode; + prompt?: boolean; + onComplete?: (web3Deps?: Web3Dependencies) => void; +}; + +const AccessWallet = (props: Props) => { + const {classes: settingsClasses} = useSettingsStyles(); + const [error, setError] = useState(''); + + // Set up wagmi config + const {chains, publicClient, webSocketPublicClient} = configureChains( + [mainnet], + [publicProvider()], + ); + const wagmiConfig = createConfig({ + autoConnect: false, + connectors: [ + new MetaMaskConnector({chains}), + new WalletConnectConnector({ + chains, + options: { + projectId: config.WALLETCONNECT_PROJECT_ID, + }, + }), + new CoinbaseWalletConnector({ + chains, + options: { + appName: 'wagmi', + }, + }), + new InjectedConnector({ + chains, + options: { + shimDisconnect: true, + }, + }), + ], + publicClient, + webSocketPublicClient, + }); + + const handleWalletConnected = (web3Deps?: Web3Dependencies) => { + setError(''); + if (!props.address) { + if (props.onComplete) { + props.onComplete(web3Deps); + } + return; + } + if (props.address.toLowerCase() === web3Deps?.address.toLowerCase()) { + if (props.onComplete) { + props.onComplete(web3Deps); + } + } else { + const expectedAddress = props.address; + setError( + `Accessed wallet (${web3Deps?.address.toLowerCase()}) does not match address: ${expectedAddress}`, + ); + } + }; + + return ( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + +
+
+ {error && {error}} + {props.message && ( + + {props.message} + + )} + {props.prompt && ( + + Wallet address: +
+ {props.address} +
+
+ )} +
+ +
+
+
+
+ ); +}; + +export default AccessWallet; + +type ModalProps = Props & { + open: boolean; + onClose: () => void; + requireConfirmation?: boolean; +}; + +export const AccessWalletModal = (props: ModalProps) => { + const {classes, theme} = useStyles(); + const isMobile = useMediaQuery(theme.breakpoints.down('md')); + const ConnectWalletWrapper = isMobile ? Popover : Dialog; + + return ( + +
+ {`Access Wallet`} + + + +
+
+ +
+
+ ); +}; diff --git a/server/components/Wallet/ProfileManager.tsx b/server/components/Wallet/ProfileManager.tsx new file mode 100644 index 00000000..4267ae04 --- /dev/null +++ b/server/components/Wallet/ProfileManager.tsx @@ -0,0 +1,193 @@ +import {fetcher} from '@xmtp/proto'; +import {Signature} from '@xmtp/xmtp-js'; +import {AccessWalletModal} from 'components/Wallet/AccessWallet'; +import {Base64} from 'js-base64'; +import {DomainProfileKeys} from 'lib/types/domain'; +import type {Web3Dependencies} from 'lib/types/web3'; +import {Web3Context} from 'providers/Web3ContextProvider'; +import React, {useContext, useEffect, useState} from 'react'; + +import config from '@unstoppabledomains/config'; + +import {signMessage as signPushMessage} from '../Chat/protocol/push'; +import {signMessage as signXmtpMessage} from '../Chat/protocol/xmtp'; +import {getPushLocalKey, getXmtpLocalKey} from '../Chat/storage'; + +export const ONE_WEEK = 60 * 60 * 24 * 7 * 1000; // milliseconds in a week + +export const getDomainSignatureValueKey = (domain: string): string => { + return `${DomainProfileKeys.Signature}-value-${domain}`; +}; + +export const getDomainSignatureExpiryKey = (domain: string): string => { + return `${DomainProfileKeys.Signature}-expiry-${domain}`; +}; + +export type ManagerProps = { + domain: string; + ownerAddress: string; + setWeb3Deps: (value: Web3Dependencies | undefined) => void; + saveClicked: boolean; + setSaveClicked: (value: boolean) => void; + onSignature: (signature: string, expiry: string) => void; + onFailed?: () => void; +}; + +interface MessageResponse { + message: string; + headers: { + ['x-auth-expires']: number; + }; +} + +export const ProfileManager: React.FC = ({ + domain, + ownerAddress, + setWeb3Deps, + saveClicked, + setSaveClicked, + onSignature, + onFailed, +}) => { + const web3Context = useContext(Web3Context); + const [messageResponse, setMessageResponse] = useState(); + const [signature, setSignature] = useState(); + const [expiry, setExpiry] = useState(); + const [accessWalletModalIsOpen, setAccessWalletModalIsOpen] = useState(false); + + useEffect(() => { + if (saveClicked) { + void handlePrepareSignature(); + } + }, [saveClicked]); + + useEffect(() => { + if (!web3Context.web3Deps || !messageResponse) { + return; + } + void handlePromptSignature(messageResponse.message); + }, [web3Context, messageResponse]); + + useEffect(() => { + if (!signature || !expiry) { + return; + } + + // send final call to save preferences to profile API + void onSignature(signature, expiry); + + // clear state values + setSaveClicked(false); + setSignature(undefined); + setExpiry(undefined); + + // store signature value on local device + localStorage.setItem(getDomainSignatureValueKey(domain), signature); + localStorage.setItem(getDomainSignatureExpiryKey(domain), expiry); + }, [signature, expiry]); + + // handlePrepareSignature retrieves the message that must be signed for the profile + // management request. + const handlePrepareSignature = async () => { + // check whether the domain signature is stored on local device + const localSignature = localStorage.getItem( + getDomainSignatureValueKey(domain), + ); + const localExpiry = localStorage.getItem( + getDomainSignatureExpiryKey(domain), + ); + if ( + localSignature && + localExpiry && + parseInt(localExpiry, 10) > Date.now() + ) { + setSignature(localSignature); + setExpiry(localExpiry); + return; + } + + // request a new domain signature + const domainProfileUrl = `${ + config.PROFILE.HOST_URL + }/user/${domain}/signature?device=true&expiry=${Date.now() + ONE_WEEK}`; + const response = await fetch(domainProfileUrl, { + method: 'GET', + mode: 'cors', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + }); + const responseBody: MessageResponse = await response.json(); + + // sign with locally stored XMTP key if available + const localXmtpKey = getXmtpLocalKey(ownerAddress); + if (localXmtpKey) { + const xmtpSignatureBytes = new Signature( + await signXmtpMessage(ownerAddress, responseBody.message), + ).toBytes(); + const xmtpSignature = fetcher.b64Encode( + xmtpSignatureBytes, + 0, + xmtpSignatureBytes.length, + ); + setSignature(xmtpSignature); + setExpiry(String(responseBody.headers['x-auth-expires'])); + return; + } + + // sign with a locally stored Push Protocol key if available + const localPushKey = getPushLocalKey(ownerAddress); + if (localPushKey) { + const pushSignature = await signPushMessage( + responseBody.message, + localPushKey, + ); + setSignature(Base64.encode(pushSignature)); + setExpiry(String(responseBody.headers['x-auth-expires'])); + return; + } + + // request wallet signature + setMessageResponse(responseBody); + setAccessWalletModalIsOpen(!web3Context.web3Deps); + }; + + // handlePromptSignature prompts the user to sign a message to authorize management of + // the domain profile. + const handlePromptSignature = async (messageText: string): Promise => { + try { + if (!web3Context.web3Deps) { + return; + } + + // sign a message linking the domain and secondary wallet address + setSignature(await web3Context.web3Deps.signer.signMessage(messageText)); + setExpiry(String(messageResponse?.headers['x-auth-expires'])); + } catch (signError) { + onFailed?.(); + } finally { + setSaveClicked(false); + } + }; + + // handleAccessWalletComplete callback for the wallet selection modal + const handleAccessWalletComplete = async ( + web3Dependencies?: Web3Dependencies, + ) => { + setWeb3Deps(web3Dependencies); + setAccessWalletModalIsOpen(false); + }; + + return ( +
+ handleAccessWalletComplete(deps)} + open={accessWalletModalIsOpen} + onClose={() => setAccessWalletModalIsOpen(false)} + /> +
+ ); +}; diff --git a/server/components/Wallet/WalletButton.tsx b/server/components/Wallet/WalletButton.tsx new file mode 100644 index 00000000..6e9db652 --- /dev/null +++ b/server/components/Wallet/WalletButton.tsx @@ -0,0 +1,431 @@ +import ButtonBase from '@mui/material/ButtonBase'; +import CircularProgress from '@mui/material/CircularProgress'; +import Typography from '@mui/material/Typography'; +import {useTheme} from '@mui/material/styles'; +import type {Theme} from '@mui/material/styles'; +import useMediaQuery from '@mui/material/useMediaQuery'; +import getImageUrl from 'lib/domain/getImageUrl'; +import useTranslationContext from 'lib/i18n'; +import {WalletName} from 'lib/types/wallet'; +import Image from 'next/image'; +import React from 'react'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + cardRoot: { + textAlign: 'center', + cursor: 'pointer', + padding: theme.spacing(2.5, 0), + border: `1px dashed ${theme.palette.neutralShades[100]}`, + userSelect: 'none', + transition: theme.transitions.create('background-color'), + '&:hover': { + backgroundColor: theme.palette.background.default, + }, + '&:active': { + backgroundColor: theme.palette.pressedPaper, + }, + }, + + noBorder: { + border: 'none', + padding: 0, + }, + horizontal: { + display: 'flex', + '&:hover': { + backgroundColor: 'transparent', + }, + '&:active': { + backgroundColor: 'transparent', + }, + }, + buttonRoot: { + display: 'flex', + width: '100%', + height: '64px', + justifyContent: 'flex-start', + borderRadius: theme.shape.borderRadius, + }, + cardContent: { + position: 'relative', + display: 'flex', + justifyContent: 'center', + flexDirection: 'column', + }, + buttonContent: { + position: 'relative', + minHeight: 88, + alignItems: 'flex-start', + display: 'flex', + justifyContent: 'center', + flexDirection: 'column', + }, + cardLogo: { + display: 'flex', + justifyContent: 'center', + marginBottom: theme.spacing(1.5), + }, + cardLogoBorder: { + display: 'flex', + justifyContent: 'center', + marginBottom: 0, + marginRight: theme.spacing(1.5), + border: `solid 1px ${theme.palette.neutralShades[100]}`, + borderRadius: '50%', + padding: '10px', + height: '60px', + width: '60px', + }, + buttonLogo: { + marginRight: theme.spacing(2), + marginLeft: theme.spacing(1), + width: 32, + }, + image: { + display: 'flex', + }, + cardTitle: { + fontFamily: "'Inter', sans-serif", + fontSize: theme.typography.body2.fontSize, + fontWeight: theme.typography.fontWeightBold, + color: theme.palette.neutralShades[600], + }, + cardTitleHorizontal: { + fontWeight: theme.typography.fontWeightMedium, + color: theme.palette.common.black, + }, + buttonTitle: { + fontWeight: 600, + lineHeight: '24px', + fontSize: theme.typography.body1.fontSize, + color: theme.palette.white, + }, + cardTip: { + color: theme.palette.grey[600], + fontSize: theme.typography.body2.fontSize, + }, + buttonTip: { + opacity: '72.16%', + color: theme.palette.white, + fontSize: theme.typography.body2.fontSize, + }, + highlighted: { + background: theme.palette.heroText, + fontWeight: theme.typography.fontWeightBold, + WebkitBackgroundClip: 'text', + WebkitTextFillColor: 'transparent', + marginRight: theme.spacing(1), + }, + delimiter: { + marginRight: theme.spacing(1), + fontWeight: theme.typography.fontWeightBold, + color: theme.palette.grey[600], + }, + disabled: { + pointerEvents: 'none', + opacity: 0.33, + filter: 'grayscale(1)', + }, + decor: { + position: 'absolute', + top: '50%', + right: theme.spacing(2), + transform: 'translateY(-50%)', + }, + loader: { + color: theme.palette.white, + }, + metamaskBackground: { + backgroundColor: '#25292E', + }, + walletConnectBackground: { + backgroundColor: '#3B99FC', + }, + coinbaseBackground: { + backgroundColor: '#2059EB', + }, + blockchainCom: { + fontSize: 18, + marginRight: theme.spacing(0.25), + verticalAlign: 'middle', + }, + iconText: { + verticalAlign: 'middle', + }, +})); + +type CardTemplateProps = { + onClick?: () => void; + disabled?: boolean; + title: string; + tip?: React.ReactNode; + iconUrl: string; + highlighted?: boolean; + iconOnly?: boolean; + borderless?: boolean; + horizontal?: boolean; + loading?: boolean; + size?: number; +}; + +type ButtonTemplateProps = { + onClick?: () => void; + disabled?: boolean; + title: string; + tip?: React.ReactNode; + iconUrl: string; + highlighted?: boolean; + buttonBackground?: string; + loading?: boolean; + size?: number; +}; + +const CardTemplate: React.FC = ({ + title, + tip, + highlighted, + iconUrl, + disabled, + loading, + onClick, + iconOnly, + borderless, + horizontal, + size = 40, +}) => { + const [t] = useTranslationContext(); + const {classes, cx} = useStyles(); + return ( +
+
+ {loading ? ( + + ) : ( + + )} +
+ + {!iconOnly && ( +
+
+ {title} +
+ + {highlighted && ( + <> + + {t('claimDomains.beta')} + + · + + )} + {tip} + +
+ )} +
+ ); +}; + +const ButtonTemplate: React.FC = ({ + title, + tip, + highlighted, + iconUrl, + disabled, + onClick, + buttonBackground, + loading, + size = 32, +}) => { + const [t] = useTranslationContext(); + const {classes, cx} = useStyles(); + return ( + +
+ {loading ? ( + + ) : ( + + )} +
+
+ + {title} + + + {highlighted && ( + <> + + {t('claimDomains.beta')} + + · + + )} + {tip} + +
+
+ ); +}; + +export enum Variant { + card = 'card', + button = 'button', +} + +type Props = { + name: WalletName; + disabled?: boolean; + onClick?: () => void; + variant?: Variant; + loading?: boolean; + hideTipText?: boolean; + iconOnly?: boolean; + borderless?: boolean; + horizontal?: boolean; + iconUrl?: string; + highlightedOverride?: boolean; + size?: number; +}; + +const WalletButton: React.FC = ({ + name, + onClick, + disabled = false, + variant = Variant.card, + loading = false, + hideTipText = false, + iconOnly = false, + borderless = false, + horizontal = false, + iconUrl = '', + highlightedOverride = false, + size, +}) => { + const {classes} = useStyles(); + const [t] = useTranslationContext(); + const tip: React.ReactNode = hideTipText + ? '' + : t(`claimDomains.tips.${name}`); + const props = { + disabled, + onClick, + title: String(name), + tip, + loading, + iconOnly, + highlighted: false, + highlightedOverride, + iconUrl, + buttonBackground: '', + borderless, + horizontal, + size, + }; + const theme = useTheme(); + const isDesktop = useMediaQuery(theme.breakpoints.up('md')); + + switch (name) { + case WalletName.MetaMask: + props.title = 'MetaMask'; + props.iconUrl = '/wallet-button/metamask.svg'; + if (variant === Variant.button) { + props.buttonBackground = classes.metamaskBackground; + } + break; + case WalletName.WalletConnect: + props.title = 'WalletConnect'; + props.iconUrl = '/wallet-button/wallet-connect.svg'; + if (variant === Variant.button) { + props.buttonBackground = classes.walletConnectBackground; + props.iconUrl = '/wallet-button/wallet-connect-white.svg'; + props.tip = 'Trust Wallet, Rainbow, etc.'; + } + break; + case WalletName.CoinbaseWallet: + props.title = 'Coinbase'; + props.iconUrl = '/wallet-button/coinbase.svg'; + props.tip = ''; + if (variant === Variant.button) { + props.buttonBackground = classes.coinbaseBackground; + props.iconUrl = '/wallet-button/coinbase-white.svg'; + props.tip = ''; + if (!isDesktop) { + props.title = 'Open in Coinbase Wallet'; + } + } + break; + case WalletName.Brave: + props.iconUrl = '/wallet-button/brave.svg'; + props.title = 'Brave'; + break; + case WalletName.BlockchainCom: + props.iconUrl = '/wallet-button/blockchain.com.svg'; + props.title = 'Blockchain.com'; + props.tip = ''; + break; + case WalletName.CryptoCom: + props.iconUrl = '/wallet-button/crypto.com.svg'; + props.title = 'Crypto.com'; + break; + case WalletName.TrustWallet: + props.iconUrl = '/wallet-button/trust-wallet.svg'; + props.title = 'Trust'; + break; + case WalletName.Phantom: + props.iconUrl = '/wallet-button/phantom.svg'; + props.title = 'Phantom'; + break; + case WalletName.Kresus: + props.iconUrl = '/wallet-button/kresus.svg'; + props.title = 'Kresus'; + break; + default: + break; + } + if (variant === Variant.button) { + return ; + } + return ; +}; + +export default WalletButton; diff --git a/server/hooks/useEnsDomainStatus.ts b/server/hooks/useEnsDomainStatus.ts new file mode 100644 index 00000000..68650b43 --- /dev/null +++ b/server/hooks/useEnsDomainStatus.ts @@ -0,0 +1,13 @@ +import {getEnsDomainStatus} from 'actions/domainActions'; +import {useQuery} from 'react-query'; + +export const useEnsDomainStatus = ( + domain: string, + enabled: boolean = false, +) => { + return useQuery( + ['ens-domain-status', domain], + () => getEnsDomainStatus(domain), + {enabled}, + ); +}; diff --git a/server/hooks/usePrevious.ts b/server/hooks/usePrevious.ts new file mode 100644 index 00000000..736da49d --- /dev/null +++ b/server/hooks/usePrevious.ts @@ -0,0 +1,19 @@ +import {useEffect, useRef} from 'react'; + +/** + * A hook to get the previous props or state. + * Extracted from https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state. + * The only difference is the `isUndefinedFirst` option. + * + * isUndefinedFirst: + * If true, the value of the initial render will be the same as the value + * provided to the hook. Else, the initial value will be undefined. Defaults to true. + */ +const usePrevious = (value: T, isUndefinedFirst = true) => { + const ref = useRef(isUndefinedFirst ? undefined : value); + useEffect(() => { + ref.current = value; + }); + return ref.current as T; +}; +export default usePrevious; diff --git a/server/hooks/useTokenGallery.tsx b/server/hooks/useTokenGallery.tsx new file mode 100644 index 00000000..43f266e0 --- /dev/null +++ b/server/hooks/useTokenGallery.tsx @@ -0,0 +1,28 @@ +import {TokenGalleryContext} from 'providers/TokenGalleryProvider'; +import {useContext} from 'react'; + +const useTokenGallery = () => { + const { + expanded, + nfts, + nftSymbolVisible, + setExpanded, + setNfts, + setNftSymbolVisible, + } = useContext(TokenGalleryContext); + if (!setExpanded || !setNfts || !setNftSymbolVisible) { + throw new Error( + 'Expected useTokenGallery to be called within ', + ); + } + return { + expanded, + nfts, + nftSymbolVisible, + setExpanded, + setNfts, + setNftSymbolVisible, + }; +}; + +export default useTokenGallery; diff --git a/server/hooks/useWeb3Context.tsx b/server/hooks/useWeb3Context.tsx new file mode 100644 index 00000000..c620db0e --- /dev/null +++ b/server/hooks/useWeb3Context.tsx @@ -0,0 +1,17 @@ +import {Web3Context} from 'providers/Web3ContextProvider'; +import {useContext} from 'react'; + +const useWeb3Context = () => { + const {web3Deps, setWeb3Deps} = useContext(Web3Context); + if (!setWeb3Deps) { + throw new Error( + 'Expected useWeb3Context to be called within ', + ); + } + return { + web3Deps, + setWeb3Deps, + }; +}; + +export default useWeb3Context; diff --git a/server/lib/cookie.ts b/server/lib/cookie.ts new file mode 100644 index 00000000..cf0b4f8d --- /dev/null +++ b/server/lib/cookie.ts @@ -0,0 +1,64 @@ +import cookie from 'react-cookies'; + +import config from '@unstoppabledomains/config'; + +export type CookieName = 'NEXT_LOCALE' | 'cookie-consent'; + +export type CookieCategory = 'marketing' | 'analytics' | 'essential'; + +type CookieOptions = { + maxAge?: number; + signed?: boolean; + expires?: Date; + httpOnly?: boolean; + path?: string; + domain?: string; + secure?: boolean; + sameSite?: boolean | 'lax' | 'strict' | 'none'; +}; + +export const baseOptions: { + path: CookieOptions['path']; + sameSite?: CookieOptions['sameSite']; + secure: CookieOptions['secure']; +} = { + path: '/', + sameSite: config.COOKIE.SAME_SITE, + secure: config.COOKIE.SECURE, +}; + +export const getCookie = (name: CookieName) => { + return cookie.load(name); +}; + +export const setCookie = ({ + name, + value, + options, + category, +}: { + name: CookieName; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + value: any; + options?: CookieOptions; + category: CookieCategory; +}): void => { + // react-cookies uses cookie@0.3.1 which does not support SameSite=none in + // cookies. This support was added to the cookie package in version 0.4.x. + // In the meantime removing the sameSite option is the same thing as + // sameSite=none. This only affects the staging environment which has the + // sameSite app config set to "none". Long term I see us move away from + // react-cookies which doesn't seem to be receiving updates and has no + // available github repo. + if (baseOptions.sameSite === 'none') { + delete baseOptions.sameSite; + } + const userConsentType = getCookie('cookie-consent'); + + if (userConsentType === 'all' || category === 'essential') { + cookie.save(name, value, { + ...baseOptions, + ...options, + }); + } +}; diff --git a/server/lib/displayCryptoAddress.ts b/server/lib/displayCryptoAddress.ts new file mode 100644 index 00000000..4a74df0d --- /dev/null +++ b/server/lib/displayCryptoAddress.ts @@ -0,0 +1,35 @@ +/** + * Trims long crypto addresses and adds triple dots 3 characters before the end + * Example: + * - input: 0x2aec9D5A54976F7d1F2Dc177F5C28F0c95660680 + * - output: 0x2aec9D5A54976F7d1F2Dc177F5C...680 + */ +export default function displayCryptoAddress({ + address, + compact = false, +}: { + address: string; + compact?: boolean; +}) { + const threshold = compact ? 20 : 35; + const charactersToKeepAtTheEnd = 3; + + return address.length > threshold + ? address.slice( + 0, + // -3 for '...' + Math.min( + threshold - charactersToKeepAtTheEnd - 3, + address.length - charactersToKeepAtTheEnd, + ), + ) + + '...' + + address.slice(-charactersToKeepAtTheEnd) + : address; +} + +export const displayShortCryptoAddress = ( + address: string, + start = 6, + end = 4, +) => `${address.slice(0, start)}...${address.slice(-end)}`; diff --git a/server/lib/domain/format.ts b/server/lib/domain/format.ts new file mode 100644 index 00000000..0f631724 --- /dev/null +++ b/server/lib/domain/format.ts @@ -0,0 +1,79 @@ +import type {DomainDescription, DomainSuffixes} from 'lib/types/domain'; +import { + EXTERNAL_DOMAIN_SUFFIXES, + MANAGEABLE_DOMAIN_LABEL, +} from 'lib/types/domain'; + +export const isExternalDomainValidForManagement = (domain: string): boolean => { + return isExternalDomainValid(domain, MANAGEABLE_DOMAIN_LABEL, true); +}; + +export const isExternalDomainSuffixValid = (extension: string): boolean => { + return EXTERNAL_DOMAIN_SUFFIXES.includes(extension); +}; + +const isExternalDomainValid = ( + domain: string, + labelValidationRegex: RegExp, + allowIdn: boolean, +): boolean => { + if (!isDomainFormatValid(domain, labelValidationRegex, allowIdn)) { + return false; + } + + const {label, extension} = splitDomain(domain); + return Boolean(label) && isExternalDomainSuffixValid(extension); +}; + +export const splitDomain = (domain: string): DomainDescription => { + const splitted = domain.split('.'); + const extension = splitted.pop()!; + const label = splitted.shift()!; + return { + name: domain, + label, + extension: extension as DomainSuffixes, + sld: splitted.length ? splitted.join('.') : null, + }; +}; + +const isDomainFormatValid = ( + domain: string, + labelValidationRegex: RegExp, + allowIdn: boolean, +): boolean => { + if (!domain) { + return false; + } + let parts: string[] = [domain]; + if (domain.includes('.')) { + parts = domain.split('.'); + } + + return parts.every((part, idx) => { + if (idx === 0) { + // left-most: label + return isDomainLabelValid(part, labelValidationRegex, allowIdn); + } else { + return isDomainLabelValid(part, MANAGEABLE_DOMAIN_LABEL, allowIdn); + } + }); +}; + +const isDomainLabelValid = ( + label: string, + labelValidationRegex: RegExp, + allowIdn: boolean = false, +): boolean => { + if (!allowIdn && isInternationalDomainLabel(label)) { + return false; + } + + return new RegExp(labelValidationRegex).test(label); +}; + +/** + * IDN (Internationalized domain name) labels are not supported yet + */ +export const isInternationalDomainLabel = (label: string): boolean => + label.startsWith('xn--'); diff --git a/server/lib/domain/getImageUrl.ts b/server/lib/domain/getImageUrl.ts new file mode 100644 index 00000000..da0ee7eb --- /dev/null +++ b/server/lib/domain/getImageUrl.ts @@ -0,0 +1,38 @@ +import config from '@unstoppabledomains/config'; + +export const CDN_PREFIX = 'images'; + +const normalizeImagePath = (path: string): string => { + if (!path) { + return ''; + } + if (path.startsWith(`${CDN_PREFIX}/`)) { + return path; + } else { + return `${CDN_PREFIX}${path}`; + } +}; + +export const isDataUri = (src: string = ''): boolean => { + return src.startsWith('data:'); +}; + +export const isUrl = (src: string = ''): boolean => { + return src.startsWith('https://'); +}; + +export const getUnoptimizedImageUrl = (path: string): string => { + if (isDataUri(path)) { + return path; + } + return `${config.ASSETS_BUCKET_URL}/${normalizeImagePath(path)}`; +}; + +const getImageUrl = (path: string) => { + if (isDataUri(path) || isUrl(path)) { + return path; + } + return getUnoptimizedImageUrl(path); +}; + +export default getImageUrl; diff --git a/server/lib/domain/records.ts b/server/lib/domain/records.ts new file mode 100644 index 00000000..875d6354 --- /dev/null +++ b/server/lib/domain/records.ts @@ -0,0 +1,43 @@ +import type { + MulticoinAddresses, + MulticoinVersions, + ParsedRecords, +} from 'lib/types/records'; +import {ADDRESS_REGEX, MULTI_CHAIN_ADDRESS_REGEX} from 'lib/types/records'; +import mapKeys from 'lodash/mapKeys'; +import pickBy from 'lodash/pickBy'; +import reduce from 'lodash/reduce'; + +export const mapMultiCoinAddresses = ( + records: Record | null, +): MulticoinAddresses => { + if (!records) { + return {}; + } + return reduce( + records, + (r, address, key) => { + if (key.match(MULTI_CHAIN_ADDRESS_REGEX) && Boolean(address)) { + const [_crypto, ticker, _namespace, version] = key.split('.'); + r[ticker] = r[ticker] ?? ({} as MulticoinVersions); + r[ticker][version] = address; + } + return r; + }, + {} as MulticoinAddresses, + ); +}; + +export const parseRecords = ( + records: Record, +): ParsedRecords => { + const addresses = mapKeys( + pickBy(records, (v, k) => Boolean(v) && k.match(ADDRESS_REGEX)), + (_v, k) => k.split('.')[1], + ); + + return { + addresses, + multicoinAddresses: mapMultiCoinAddresses(records), + }; +}; diff --git a/server/lib/error.ts b/server/lib/error.ts new file mode 100644 index 00000000..3dc37465 --- /dev/null +++ b/server/lib/error.ts @@ -0,0 +1,13 @@ +export type Severity = 'info' | 'warning' | 'error'; + +export const notifyError = ( + error: unknown, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + additionalMetaData?: Record, + // default severity for bugsnag if not set it warning for handled exceptions and error for unhandled + severity?: Severity, +) => { + // TODO handle error processing + // eslint-disable-next-line no-console + console.error(error, severity, additionalMetaData); +}; diff --git a/server/lib/fetchApi.ts b/server/lib/fetchApi.ts new file mode 100644 index 00000000..ef29f96d --- /dev/null +++ b/server/lib/fetchApi.ts @@ -0,0 +1,41 @@ +import {notifyError} from 'lib/error'; + +import config from '@unstoppabledomains/config'; + +export interface FetchOptions extends RequestInit { + host?: string; + forceRefresh?: boolean; +} + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const fetchApi = async ( + path: string, + options: FetchOptions = {}, +): Promise => { + // prepare the request URL + const normalizedPath = path.startsWith('/') ? path.slice(1) : path; + const url = options.host + ? `${options.host}/${normalizedPath}` + : `${config.UNSTOPPABLE_API_URL}/api/${normalizedPath}`; + + // force refresh forces to retrieve a fresh version from the server + if (options.forceRefresh) { + if (!options.headers) { + options.headers = new Headers(); + } + (options.headers as Headers).append('X-Fastly-Force-Refresh', 'true'); + } + + // make the request + return fetch(url, options).then(async (res: Response) => { + if (!res.ok) { + notifyError(new Error(`error fetching API`), {res, url, options}); + return undefined; + } + try { + return await res.json(); + } catch (e) { + return undefined; + } + }); +}; diff --git a/server/lib/formOpenseaLink.ts b/server/lib/formOpenseaLink.ts new file mode 100644 index 00000000..09fa8519 --- /dev/null +++ b/server/lib/formOpenseaLink.ts @@ -0,0 +1,20 @@ +import config from '@unstoppabledomains/config'; + +import type {EvmBlockchain, Meta} from './types/blockchain'; +import {Blockchain} from './types/blockchain'; + +export const formOpenSeaLink = (domainMeta: Meta) => { + let url: null | string = null; + + const registryAddress = domainMeta.registryAddress; + const blockchain = domainMeta.blockchain; + + if (!blockchain || blockchain === Blockchain.ZIL) { + return url; + } else if (domainMeta.tokenId && registryAddress) { + url = `${ + config.BLOCKCHAINS[blockchain as EvmBlockchain].OPEN_SEA_BASE_URL + }${registryAddress}/${domainMeta.tokenId}`; + } + return url; +}; diff --git a/server/lib/formSocialMediaLink.ts b/server/lib/formSocialMediaLink.ts new file mode 100644 index 00000000..3b280e37 --- /dev/null +++ b/server/lib/formSocialMediaLink.ts @@ -0,0 +1,46 @@ +export type ShareSocialMedia = 'twitter' | 'facebook' | 'facebook-messenger'; + +const formSocialMediaLink = ({ + type, + text, + url, +}: { + type: ShareSocialMedia; + text?: string; + url?: string; +}) => { + switch (type) { + case 'facebook': { + if (!text || !url) { + throw new Error('Missing required input for formSocialMediaLink'); + } + + return `https://www.facebook.com/sharer/sharer.php?display=popup&u=${encodeURIComponent( + url, + )}"e=${encodeURIComponent(text)}`; + } + case 'facebook-messenger': { + if (!url) { + throw new Error('Missing required input for formSocialMediaLink'); + } + + return `https://www.facebook.com/dialog/send?app_id=1790432161129014&link=${encodeURIComponent( + url, + )}&redirect_uri=${encodeURIComponent(url)}`; + } + case 'twitter': { + if (!text) { + throw new Error('Missing required input for formSocialMediaLink'); + } + + return `https://twitter.com/intent/tweet?text=${encodeURIComponent( + text, + )}`; + } + default: { + throw new Error('Type not recognized'); + } + } +}; + +export default formSocialMediaLink; diff --git a/server/lib/i18n/TranslationContext.ts b/server/lib/i18n/TranslationContext.ts new file mode 100644 index 00000000..9b5e608a --- /dev/null +++ b/server/lib/i18n/TranslationContext.ts @@ -0,0 +1,10 @@ +import {createContext} from 'react'; + +import type {AvailableLocales, T} from './types'; +import {DEFAULT_LOCALE} from './types'; + +const TranslationContext = createContext< + [T, (locale: AvailableLocales) => void, AvailableLocales] +>([() => '', () => DEFAULT_LOCALE, DEFAULT_LOCALE]); + +export default TranslationContext; diff --git a/server/lib/i18n/TranslationProvider.tsx b/server/lib/i18n/TranslationProvider.tsx new file mode 100644 index 00000000..1dd5d813 --- /dev/null +++ b/server/lib/i18n/TranslationProvider.tsx @@ -0,0 +1,63 @@ +import usePrevious from 'hooks/usePrevious'; +import {setCookie} from 'lib/cookie'; +import {useRouter} from 'next/router'; +import type {ReactNode} from 'react'; +import React, {useEffect, useState} from 'react'; + +import TranslationContext from './TranslationContext'; +import {i18nTranslate, loadLocale, localesLoaded} from './helpers'; +import type {T} from './index'; +import type {AvailableLocales} from './types'; +import {DEFAULT_LOCALE} from './types'; + +type Props = { + children: ReactNode; +}; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const TranslationProvider: any = (props: Props) => { + const {children} = props; + const router = useRouter(); + const [ready, setReady] = useState(true); + const [locale, setLocale] = useState( + (router.locale?.toLowerCase() as AvailableLocales) || DEFAULT_LOCALE, + ); + const prevLocale = usePrevious(locale, false); + const t: T = (key, interpolate = {}, _locale, isLowerCase) => { + return i18nTranslate(key, interpolate, locale, isLowerCase); + }; + + useEffect(() => { + if (prevLocale !== locale) { + setCookie({ + name: 'NEXT_LOCALE', + value: locale, + options: { + // 1 year + maxAge: 60 * 60 * 24 * 365, + }, + category: 'essential', + }); + } + }, [locale, prevLocale, router.pathname, router.asPath]); + + // make sure preferred locale is loaded + useEffect(() => { + void (async () => { + if (!localesLoaded[locale]) { + setReady(false); + await loadLocale(locale); + } + + setReady(true); + })(); + }, [locale, localesLoaded]); + + return ( + + {ready ? children : null} + + ); +}; + +export default TranslationProvider; diff --git a/server/lib/i18n/helpers.ts b/server/lib/i18n/helpers.ts new file mode 100644 index 00000000..a982b4dc --- /dev/null +++ b/server/lib/i18n/helpers.ts @@ -0,0 +1,76 @@ +import type {DeepPartial} from 'config/env/types'; +import localesConfig from 'locales.json'; +import en_us from 'locales/en.json'; +import {clone} from 'ramda'; + +import type {AvailableLocales} from './types'; +import {DEFAULT_LOCALE} from './types'; + +type LocaleTranslation = typeof en_us; +type LocalesLoaded = Record< + AvailableLocales, + DeepPartial | null +>; + +export const localesLoaded: LocalesLoaded = { + 'en-us': en_us, +}; + +export const loadLocale = async ( + locale: AvailableLocales = DEFAULT_LOCALE, +): Promise => { + const lowerCaseLocale = locale.toLowerCase(); + + // no need to import locale if it's already in memory + if (localesLoaded[lowerCaseLocale]) { + return; + } + + const file = + localesConfig.locales.find(l => l.code === lowerCaseLocale)?.file ?? null; + + if (file) { + localesLoaded[lowerCaseLocale] = await import(`locales/${file}`); + } +}; + +export const i18nTranslate = ( + key: string, + interpolate = {}, + locale: AvailableLocales = DEFAULT_LOCALE, + isLowerCase?: boolean, +): string => { + const mapping = localesLoaded[locale] || localesLoaded[DEFAULT_LOCALE]; + const elements = key.split('.'); + // we start from the mapping object then iteratively reduce it until we end up with the translated string + // eslint-disable-next-line @typescript-eslint/no-explicit-any + let result = clone(mapping) as any; + + for (const elem of elements) { + if (typeof result === 'string' || !(elem in result)) { + result = ''; + break; + } + result = result[elem]; + } + + const keysToInterpolate = Object.keys(interpolate); + + // If both the text and interpolations exist, iterate over them + // and replace {{int}} with passed int interpolation values + if (keysToInterpolate.length && result) { + result = keysToInterpolate.reduce((acc, curr) => { + const re = new RegExp(`{{${curr}}}`, 'g'); + return acc.replace(re, interpolate[curr]); + }, result); + } + + // Fallback locale + if (locale !== DEFAULT_LOCALE && !result) { + result = i18nTranslate(key, interpolate, DEFAULT_LOCALE, isLowerCase); + } + + return typeof result === 'string' && isLowerCase + ? result.toLowerCase() + : result; +}; diff --git a/server/lib/i18n/index.ts b/server/lib/i18n/index.ts new file mode 100644 index 00000000..1ddc4a3f --- /dev/null +++ b/server/lib/i18n/index.ts @@ -0,0 +1,10 @@ +import {useContext} from 'react'; + +import TranslationContext from './TranslationContext'; +import TranslationProvider from './TranslationProvider'; + +const useTranslationContext = () => useContext(TranslationContext); + +export * from './types'; +export {TranslationProvider}; +export default useTranslationContext; diff --git a/server/lib/i18n/types.ts b/server/lib/i18n/types.ts new file mode 100644 index 00000000..1abc0a40 --- /dev/null +++ b/server/lib/i18n/types.ts @@ -0,0 +1,24 @@ +export type AvailableLocales = 'en-us'; + +export type I18nInterpolations = Record; + +export type T = ( + key: string, + interpolate?: I18nInterpolations, + locale?: AvailableLocales, + toLowerCase?: boolean, +) => string; + +export type Locale = { + code: AvailableLocales; + name: string; +}; + +// before changing this type make sure it won't break the config in next.config.js +// which is not using static typing +export type Locales = { + locales: Locale[]; + defaultLocale: 'en-us'; +}; + +export const DEFAULT_LOCALE: AvailableLocales = 'en-us'; diff --git a/server/lib/resolution/unstoppableDomainsLoader.ts b/server/lib/resolution/unstoppableDomainsLoader.ts new file mode 100644 index 00000000..3e805ca3 --- /dev/null +++ b/server/lib/resolution/unstoppableDomainsLoader.ts @@ -0,0 +1,26 @@ +import config from '@unstoppabledomains/config'; +import type {SourceConfig} from '@unstoppabledomains/resolution'; + +export async function loadUnstoppableDomainsResolution(): Promise { + return { + uns: { + locations: { + Layer1: { + network: config.BLOCKCHAINS.ETH.NETWORK_NAME, + proxyReaderAddress: config.BLOCKCHAINS.ETH.PROXY_READER_ADDRESS, + url: config.BLOCKCHAINS.ETH.JSON_RPC_API_URL, + }, + Layer2: { + network: config.BLOCKCHAINS.MATIC.NETWORK_NAME, + proxyReaderAddress: config.BLOCKCHAINS.MATIC.PROXY_READER_ADDRESS, + url: config.BLOCKCHAINS.MATIC.JSON_RPC_API_URL, + }, + }, + }, + zns: { + network: config.BLOCKCHAINS.ZIL.NETWORK_NAME, + registryAddress: config.BLOCKCHAINS.ZIL.ZNS_REGISTRY_ADDRESS, + url: config.BLOCKCHAINS.ZIL.JSON_RPC_API_URL, + }, + }; +} diff --git a/server/lib/seo.ts b/server/lib/seo.ts new file mode 100644 index 00000000..0fa2f07f --- /dev/null +++ b/server/lib/seo.ts @@ -0,0 +1,45 @@ +import getImageUrl from 'lib/domain/getImageUrl'; +import {DomainProfileSocialMedia} from 'lib/types/domain'; +import type {GetSeoTagsProps} from 'lib/types/seo'; +import {DEFAULT_SEO_DESCRIPTION, UD_TWITTER_HANDLE} from 'lib/types/seo'; +import type {NextSeoProps} from 'next-seo'; + +import config from '@unstoppabledomains/config'; + +export const getSeoTags = (props: GetSeoTagsProps): NextSeoProps => { + const title = `${props.domain} | ${config.UNSTOPPABLE_DOMAINS}`; + + if (!props.profileData) { + return { + title, + description: DEFAULT_SEO_DESCRIPTION, + }; + } + + const seoTags: NextSeoProps = { + title, + description: + props.profileData.profile.description ?? DEFAULT_SEO_DESCRIPTION, + }; + + seoTags.openGraph = { + url: `${config.UD_ME_BASE_URL}/${props.domain}`, + }; + + const imageUrl = + // onChain image types do not render properly in Twitter Preview Cards + props.domainAvatar && props.profileData.profile.imageType === 'offChain' + ? props.domainAvatar + : getImageUrl('/unstoppable-logos/unstoppable-logo-1200x1200.png'); + + seoTags.openGraph.images = [{url: imageUrl}]; + seoTags.twitter = {cardType: 'summary'}; + if (props.socialsInfo[DomainProfileSocialMedia.Twitter]?.screenName) { + seoTags.twitter.site = `@${UD_TWITTER_HANDLE}`; + seoTags.twitter.handle = `@${ + props.socialsInfo[DomainProfileSocialMedia.Twitter]?.screenName + }`; + } + + return seoTags; +}; diff --git a/server/lib/types/badge.ts b/server/lib/types/badge.ts new file mode 100644 index 00000000..8c7fbcea --- /dev/null +++ b/server/lib/types/badge.ts @@ -0,0 +1,55 @@ +import type {SerializedMarketplaceData} from './nfts'; + +export type SerializedCryptoWalletBadge = { + active: boolean; + name: string; + description: string; + logo: string; + linkUrl?: string | null; + configId: number; + code: string; + type: string; + videoUrl?: string; + coverImage?: string; + count?: number; + expired?: boolean; + status?: string; + symbols?: string[]; + contracts?: string[]; + marketplace?: SerializedMarketplaceData; + groupChatId?: string; + gallery?: { + enabled: boolean; + tier: number; + }; +}; + +export type DomainBadgesResponse = { + list: SerializedCryptoWalletBadge[]; + countActive: number; + countTotal: number; + badgesLastSyncedAt: Date | null; +}; + +export interface SerializedBadgeInfo { + badge: SerializedCryptoWalletBadge; + sponsorship: SerializedBadgeSponsorship; + usage: SerializedBadgeUsage; +} + +export interface SerializedBadgeSponsorship { + max: number; + count: number; + latest?: string; + domains?: Array<{ + name: string; + count: number; + }>; + authorizedAddresses?: string[]; +} + +export interface SerializedBadgeUsage { + holders: number; + featured?: string[]; + rank?: number; +} diff --git a/server/lib/types/blockchain.ts b/server/lib/types/blockchain.ts new file mode 100644 index 00000000..d51b907d --- /dev/null +++ b/server/lib/types/blockchain.ts @@ -0,0 +1,196 @@ +export enum Blockchain { + ETH = 'ETH', + ZIL = 'ZIL', + MATIC = 'MATIC', +} + +export enum Registry { + CNS = 'CNS', + UNS = 'UNS', + ENS = 'ENS', +} + +export enum Mirror { + UNS = 'UNS', + ENS = 'ENS', + ZNS = 'ZNS', +} + +export type MulticoinVersions = Record; + +export type EvmBlockchain = Blockchain.ETH | Blockchain.MATIC; + +export type Meta = { + logicalOwnerAddress: string | null; + blockchain: Blockchain | null; + type: Registry; + ttl: number; + tokenId?: string; + domain: string; + namehash: string; + registryAddress: string | null; + resolver: string | null; + reverse: boolean; +}; + +export enum InitialCurrenciesEnum { + BTC = 'BTC', + ETH = 'ETH', + ADA = 'ADA', + SOL = 'SOL', + HBAR = 'HBAR', +} + +export enum AdditionalCurrenciesEnum { + ZIL = 'ZIL', + LTC = 'LTC', + XRP = 'XRP', + ETC = 'ETC', + EQL = 'EQL', + LINK = 'LINK', + USDC = 'USDC', + BAT = 'BAT', + REP = 'REP', + ZRX = 'ZRX', + DAI = 'DAI', + BCH = 'BCH', + XMR = 'XMR', + DASH = 'DASH', + NEO = 'NEO', + DOGE = 'DOGE', + ZEC = 'ZEC', + EOS = 'EOS', + XLM = 'XLM', + BNB = 'BNB', + BTG = 'BTG', + NANO = 'NANO', + WAVES = 'WAVES', + KMD = 'KMD', + AE = 'AE', + RSK = 'RSK', + WAN = 'WAN', + STRAT = 'STRAT', + UBQ = 'UBQ', + XTZ = 'XTZ', + MIOTA = 'MIOTA', + VET = 'VET', + QTUM = 'QTUM', + ICX = 'ICX', + DGB = 'DGB', + XZC = 'XZC', + BURST = 'BURST', + DCR = 'DCR', + XEM = 'XEM', + LSK = 'LSK', + ATOM = 'ATOM', + ONG = 'ONG', + ONT = 'ONT', + SMART = 'SMART', + TPAY = 'TPAY', + GRS = 'GRS', + BSV = 'BSV', + GAS = 'GAS', + TRX = 'TRX', + VTHO = 'VTHO', + BCD = 'BCD', + BTT = 'BTT', + KIN = 'KIN', + RVN = 'RVN', + ARK = 'ARK', + XVG = 'XVG', + ALGO = 'ALGO', + NEBL = 'NEBL', + BNTY = 'BNTY', + ONE = 'ONE', + SWTH = 'SWTH', + CRO = 'CRO', + TWT = 'TWT', + SIERRA = 'SIERRA', + VSYS = 'VSYS', + HIVE = 'HIVE', + HT = 'HT', + ENJ = 'ENJ', + YFI = 'YFI', + MTA = 'MTA', + COMP = 'COMP', + BAL = 'BAL', + AMPL = 'AMPL', + LEND = 'AAVE', + USDT = 'USDT', + FTM = 'FTM', + FUSE = 'FUSE', + TLOS = 'TLOS', + XDC = 'XDC', + AR = 'AR', + NIM = 'NIM', + MATIC = 'MATIC', + CUSDT = 'CUSDT', + AVAX = 'AVAX', + DOT = 'DOT', + BUSD = 'BUSD', + SHIB = 'SHIB', + LUNA = 'LUNA', + CAKE = 'CAKE', + MANA = 'MANA', + EGLD = 'EGLD', + SAND = 'SAND', + WAXP = 'WAXP', + '1INCH' = '1INCH', + THETA = 'THETA', + HNT = 'HNT', + SAFEMOON = 'SAFEMOON', + NEAR = 'NEAR', + FIL = 'FIL', + AXS = 'AXS', + AMP = 'AMP', + CELO = 'CELO', + KSM = 'KSM', + CSPR = 'CSPR', + UNI = 'UNI', + CEL = 'CEL', + ERG = 'ERG', + KAVA = 'KAVA', + LRC = 'LRC', + POLY = 'POLY', + TFUEL = 'TFUEL', + NEXO = 'NEXO', + FLOW = 'FLOW', + ICP = 'ICP', + TUSD = 'TUSD', + KLV = 'KLV', + BLOCKS = 'BLOCKS', + YLD = 'YLD', + OKT = 'OKT', + B2M = 'B2M', + DOG = 'DOG', + GALA = 'GALA', + MOBX = 'MOBX', + FAB = 'FAB', + FIRO = 'FIRO', + FET = 'FET', + BEAM = 'BEAM', + '0ZK' = '0ZK', + SUI = 'SUI', + MOON = 'MOON', + SWEAT = 'SWEAT', + DESO = 'DESO', + FLR = 'FLR', + SGB = 'SGB', + POKT = 'POKT', + XLA = 'XLA', + KAI = 'KAI', + APT = 'APT', + GTH = 'GTH', + HI = 'HI', + MCONTENT = 'MCONTENT', + VERSE = 'VERSE', +} + +export const AllCurrencies = { + ...InitialCurrenciesEnum, + ...AdditionalCurrenciesEnum, +}; + +export type AllCurrenciesType = + | InitialCurrenciesEnum + | AdditionalCurrenciesEnum; diff --git a/server/lib/types/domain.ts b/server/lib/types/domain.ts new file mode 100644 index 00000000..dd1bcba6 --- /dev/null +++ b/server/lib/types/domain.ts @@ -0,0 +1,249 @@ +import type {WebacyRiskScore} from './webacy'; + +export enum DomainProfileKeys { + AuthAddress = 'authAddress', + AuthDomain = 'authDomain', + Messaging = 'web3-messaging', + Signature = 'domain-sig', + Resolution = 'reverse-resolution', +} + +export enum AffiliateTier { + EarlyAdopter = 'early-adopter', + FirstOrder25 = 'first-order-25', + FlatForty = 'flat-forty', + FlatFortyFive = 'flat-forty-five', + FlatFifty = 'flat-fifty', + LastClick10 = 'last-click-10', + LastClick20 = 'last-click-20', + LastClick25 = 'last-click-25', + LastClick30 = 'last-click-30', + LastClick35 = 'last-click-35', + LastClick40 = 'last-click-40', + LastClick50 = 'last-click-50', + MetaAffiliate = 'meta-affiliate', + ReferAFriend = 'refer-a-friend', + StandardJuly2019 = 'standard-july-2019', + ThirtyJuly2019 = 'thirty-july-2019', + TwentyFiveJuly2019 = 'twenty-five-july-2019', + ThirtyFiveApril2022 = 'thirty-five-april-2022', + ThirtyFebruary2022 = 'thirty-february-2022', +} + +export enum DomainProfileSocialMedia { + Twitter = 'twitter', + Discord = 'discord', + YouTube = 'youtube', + Reddit = 'reddit', + Telegram = 'telegram', + Github = 'github', + Linkedin = 'linkedin', + Google = 'google', +} + +// social media not configured by user but is displayed if exists +export enum DomainProfileSocialMediaAutoPopulated { + Lens = 'lens', +} + +export interface SerializedDomainRank { + domain: string; + count: number; + rank: number; +} + +export type SerializedDomainCryptoVerification = { + id: number; + symbol: string; + address: string; + plaintextMessage: string; + signedMessage: string; +}; + +export type SerializedDomainProfileAttributes = { + displayName?: string; + description?: string; + location?: string; + imagePath?: string; + imageType?: 'default' | 'onChain' | 'offChain'; + coverPath?: string; + web2Url?: string; + phoneNumber?: string; + domainPurchased?: boolean; + collectibleImage?: string; + emailOnPublicDomainProfile?: boolean; + tokenGalleryEnabled?: boolean; + showDomainSuggestion?: boolean; + showFeaturedCommunity?: boolean; + showFeaturedPartner?: boolean; + udBlue?: boolean; +}; + +export type SerializedDomainSocialAccount = { + location: string; + verified: boolean; + public: boolean; +}; + +export type SerializedFollowerListData = { + data: Array<{ + domain: string; + }>; + meta: { + total_count: number; + pagination: { + cursor: number; + take: number; + }; + }; + relationship_type: 'following' | 'followers'; + domain: string; +}; + +export type SerializedPublicDomainProfileData = { + profile: SerializedDomainProfileAttributes; + social: SerializedSocialAttributes; + socialAccounts: Record< + DomainProfileSocialMedia | DomainProfileSocialMediaAutoPopulated, + SerializedDomainSocialAccount + >; + cryptoVerifications?: SerializedDomainCryptoVerification[]; + records?: Record; + metadata?: Record; + referralCode?: string; + referralTier?: AffiliateTier; + webacy?: WebacyRiskScore; +}; + +export type SerializedUserDomainProfileData = + SerializedPublicDomainProfileData & { + storage?: { + apiKey: string; + type: string; + }; + }; + +export type SerializedSocialAttributes = { + followingCount?: number; + followerCount?: number; +}; + +export type SerializedDomainProfileSocialAccountsUserInfo = { + [DomainProfileSocialMedia.Twitter]?: TwitterUserInfo; + [DomainProfileSocialMedia.Reddit]?: RedditUserInfo; + [DomainProfileSocialMedia.YouTube]?: YoutubeUserInfo; + [DomainProfileSocialMedia.Discord]?: DiscordUserInfo; + [DomainProfileSocialMedia.Telegram]?: TelegramUserInfo; + [DomainProfileSocialMedia.Google]?: GoogleUserInfo; + [DomainProfileSocialMedia.Github]?: GithubUserInfo; + [DomainProfileSocialMedia.Linkedin]?: LinkedinUserInfo; + [DomainProfileSocialMediaAutoPopulated.Lens]?: LensUserInfo; +}; + +export type TwitterUserInfo = { + kind: DomainProfileSocialMedia.Twitter; + screenName: string; + followersCount: number; + followingCount: number; + listedCount: number; + tweetsCount: number; +} | null; + +export type RedditUserInfo = { + kind: DomainProfileSocialMedia.Reddit; + name: string; + totalKarma: number; +} | null; + +export type YoutubeUserInfo = { + kind: DomainProfileSocialMedia.YouTube; + title: string; + channelId: string; + channelUrl: string; + subscriberCount: number; +} | null; + +export type DiscordUserInfo = { + kind: DomainProfileSocialMedia.Discord; + userName: string; +} | null; + +export type TelegramUserInfo = { + kind: DomainProfileSocialMedia.Telegram; + userName: string; +} | null; + +export type GoogleUserInfo = { + kind: DomainProfileSocialMedia.Google; + userName: string; +} | null; + +export type LensUserInfo = { + kind: DomainProfileSocialMediaAutoPopulated.Lens; + userName: string; + url: string; +} | null; + +export type GithubUserInfo = { + kind: DomainProfileSocialMedia.Github; + userName: string; +} | null; + +export type LinkedinUserInfo = { + kind: DomainProfileSocialMedia.Linkedin; + url: string; +} | null; + +export type SocialAccountUserInfo = + | TwitterUserInfo + | RedditUserInfo + | YoutubeUserInfo + | DiscordUserInfo + | TelegramUserInfo + | GithubUserInfo + | LinkedinUserInfo + | LensUserInfo + | GoogleUserInfo; + +export enum DomainSuffixes { + Crypto = 'crypto', + Wallet = 'wallet', + Blockchain = 'blockchain', + Hi = 'hi', + Klever = 'klever', + Bitcoin = 'bitcoin', + X = 'x', + Number888 = '888', + Nft = 'nft', + Dao = 'dao', + Polygon = 'polygon', + Kresus = 'kresus', + Anime = 'anime', + Manga = 'manga', + Binanceus = 'binanceus', + Go = 'go', + Zil = 'zil', + Ens = 'eth', + EnsReverse = 'reverse', +} + +export type DomainDescription = { + name: string; + label: string; + extension: DomainSuffixes; + sld: string | null; +}; + +export type EnsDomainExpiryResponse = { + expiresAt?: string | null; + isAvailable?: boolean; +}; + +export type EnsDomainStatusResponse = EnsDomainExpiryResponse & { + rentPrice?: number; + registrationFees?: number; +}; + +export const EXTERNAL_DOMAIN_SUFFIXES = ['eth']; +export const MANAGEABLE_DOMAIN_LABEL = /^[a-z\d-]{1,253}$/; +export const UD_BLUE_BADGE_CODE = 'UdBlue'; diff --git a/server/lib/types/message.ts b/server/lib/types/message.ts new file mode 100644 index 00000000..cff8b1ca --- /dev/null +++ b/server/lib/types/message.ts @@ -0,0 +1,35 @@ +export type MessageParams = { + badgeCode: string; + subject: string; + message: string; + ctaUrl?: string; + imageUrl?: string; + sender: { + domain: string; + }; +}; + +export type SendMessageParams = { + body: MessageParams; + signature: string; + expiry: string; + domain: string; +}; + +export type DomainNotificationConfiguration = { + settingsKey: string; +}; + +export enum DomainNotificationSettingsKey { + NOTIFICATIONS = 'NOTIFICATIONS', + NEWSLETTER = 'NEWSLETTER', + MARKETING = 'MARKETING', + SECURITY_ALERTS = 'SECURITY_ALERTS', + AWARENESS = 'AWARENESS', + MESSAGING_DOMAIN_OWNERS = 'MESSAGING_DOMAIN_OWNERS', + MESSAGING_DAPPS = 'MESSAGING_DAPPS', + MOBILE_PUSH_NOTIFICATION = 'MOBILE_PUSH_NOTIFICATION', + TEXT_NOTIFICATION = 'TEXT_NOTIFICATION', + WEB_NOTIFICATION = 'WEB_NOTIFICATION', + PARTNER = 'PARTNER', +} diff --git a/server/lib/types/nfts.ts b/server/lib/types/nfts.ts new file mode 100644 index 00000000..d6946aa2 --- /dev/null +++ b/server/lib/types/nfts.ts @@ -0,0 +1,43 @@ +export interface SerializedMarketplaceData { + listings?: SerializedNftMetadata[]; + floorPrice?: SerializedPrice; + avgPrice?: SerializedPrice; + supply?: number; + holders?: number; + sales?: number; + volume?: number; +} + +export type SerializedNftMetadata = { + link: string; + name: string; + image_url: string; + description: string; + video_url: string; + collection: string; + tags?: string[]; + owner?: boolean; + public?: boolean; + mint?: string; + symbol?: string; + chainId?: Network; + verified?: boolean; + contractType?: string; + ownerAddress?: string; + price?: SerializedPrice; +}; + +export type SerializedPrice = { + currency: string; + value: number; +}; + +export enum Network { + Mainnet = '1', + Goerli = '5', + Polygon = '137', + Mumbai = '80001', + Binance = '56', + Avalanche = '43114', + Fantom = '250', +} diff --git a/server/lib/types/persona.ts b/server/lib/types/persona.ts new file mode 100644 index 00000000..0bd17317 --- /dev/null +++ b/server/lib/types/persona.ts @@ -0,0 +1,19 @@ +export interface PersonaIdentity { + id: string; + createdAt: number; + name: string; + status: PersonaInquiryStatus; +} + +export enum PersonaInquiryStatus { + NONE = 'NONE', + CREATED = 'CREATED', + PENDING = 'PENDING', + COMPLETED = 'COMPLETED', + FAILED = 'FAILED', + EXPIRED = 'EXPIRED', + NEEDS_REVIEW = 'NEEDS_REVIEW', + APPROVED = 'APPROVED', + DECLINED = 'DECLINED', + UNKNOWN = 'UNKNOWN', +} diff --git a/server/lib/types/product.ts b/server/lib/types/product.ts new file mode 100644 index 00000000..59a3b276 --- /dev/null +++ b/server/lib/types/product.ts @@ -0,0 +1,21 @@ +export enum UdBlueFeatureEnum { + AI_AVATAR = 'AI Avatar', + REWARDS_MULTIPLIER = 'Rewards Multiplier', + UD_BLUE_BADGE = 'Unstoppable Blue badge', + BULK_TRANSFER = 'Bulk transfer', + WEBSITE_BUILDER = 'Website builder', + REVENUE_SHARE = 'Revenue share for ud.me domain suggestions', + LOGIN_FOR_PARKED_DOMAINS = 'Login for parked domains', + FOR_SALE_BY_OWNER_IN_SEARCH = 'For sale by owner in search', +} + +export const UdBlueBasicFeatureList: UdBlueFeatureEnum[] = [ + UdBlueFeatureEnum.AI_AVATAR, + UdBlueFeatureEnum.REWARDS_MULTIPLIER, + UdBlueFeatureEnum.UD_BLUE_BADGE, + UdBlueFeatureEnum.BULK_TRANSFER, + UdBlueFeatureEnum.WEBSITE_BUILDER, + UdBlueFeatureEnum.REVENUE_SHARE, + UdBlueFeatureEnum.LOGIN_FOR_PARKED_DOMAINS, + UdBlueFeatureEnum.FOR_SALE_BY_OWNER_IN_SEARCH, +]; diff --git a/server/lib/types/records.ts b/server/lib/types/records.ts new file mode 100644 index 00000000..092d7565 --- /dev/null +++ b/server/lib/types/records.ts @@ -0,0 +1,19 @@ +export type MulticoinVersions = Record; +export type Addresses = Record; +export type MulticoinAddresses = Record; +export type ParsedRecords = { + addresses: Addresses; + multicoinAddresses: MulticoinAddresses; +}; + +const TICKER_REGEX = '[0-9A-Za-z*$-+]+'; +export const ADDRESS_REGEX = new RegExp(`crypto\\.${TICKER_REGEX}\\.address`); +export const MULTI_CHAIN_ADDRESS_REGEX = new RegExp( + `crypto\\.${TICKER_REGEX}\\.version\\.${TICKER_REGEX}\\.address`, +); + +export type MetadataDomainRecords = Record; + +export type MetadataDomainsRecordsResponse = { + data: {domain: string; records: MetadataDomainRecords}[]; +}; diff --git a/server/lib/types/seo.ts b/server/lib/types/seo.ts new file mode 100644 index 00000000..72986509 --- /dev/null +++ b/server/lib/types/seo.ts @@ -0,0 +1,15 @@ +import type { + SerializedDomainProfileSocialAccountsUserInfo, + SerializedPublicDomainProfileData, +} from './domain'; + +export const UD_TWITTER_HANDLE = 'unstoppableweb'; +export const DEFAULT_SEO_DESCRIPTION = + 'Domain profiles give holders a way to associate extra pieces of metadata with their domains.'; + +export type GetSeoTagsProps = { + domain: string; + profileData: SerializedPublicDomainProfileData | null | undefined; + socialsInfo: SerializedDomainProfileSocialAccountsUserInfo; + domainAvatar?: string | null; +}; diff --git a/server/lib/types/wallet.ts b/server/lib/types/wallet.ts new file mode 100644 index 00000000..f94f2877 --- /dev/null +++ b/server/lib/types/wallet.ts @@ -0,0 +1,51 @@ +export type WagmiConnectorType = + | 'injected' + | 'metaMask' + | 'walletConnect' + | 'coinbaseWallet'; + +export enum WalletName { + MetaMask = 'MetaMask', + WalletConnect = 'WalletConnect', + TrustWallet = 'TrustWallet', + BlockchainCom = 'BlockchainCom', + CoinbaseWallet = 'CoinbaseWallet', + CryptoCom = 'CryptoCom', + Brave = 'Brave', + Phantom = 'Phantom', + Kresus = 'Kresus', +} + +interface walletProps { + connectorType: WagmiConnectorType; +} + +export const WalletOptions: Record = { + [WalletName.MetaMask]: { + connectorType: 'metaMask', + }, + [WalletName.WalletConnect]: { + connectorType: 'walletConnect', + }, + [WalletName.TrustWallet]: { + connectorType: 'walletConnect', + }, + [WalletName.BlockchainCom]: { + connectorType: 'walletConnect', + }, + [WalletName.CoinbaseWallet]: { + connectorType: 'coinbaseWallet', + }, + [WalletName.CryptoCom]: { + connectorType: 'metaMask', + }, + [WalletName.Brave]: { + connectorType: 'metaMask', + }, + [WalletName.Phantom]: { + connectorType: 'metaMask', + }, + [WalletName.Kresus]: { + connectorType: 'walletConnect', + }, +}; diff --git a/server/lib/types/web3.ts b/server/lib/types/web3.ts new file mode 100644 index 00000000..6eb2f707 --- /dev/null +++ b/server/lib/types/web3.ts @@ -0,0 +1,6 @@ +import type {Signer} from 'ethers'; + +export interface Web3Dependencies { + address: string; + signer: Signer; +} diff --git a/server/lib/types/webacy.ts b/server/lib/types/webacy.ts new file mode 100644 index 00000000..32e195b2 --- /dev/null +++ b/server/lib/types/webacy.ts @@ -0,0 +1,38 @@ +export interface WebacyCategories { + wallet_characteristics: WebacyWalletCharacteristics; +} + +export interface WebacyIssue { + score: number; + tags: WebacyTag[]; + categories: WebacyCategories; +} + +export interface WebacyRiskScore { + count: number; + medium: number; + high: number; + overallRisk: number; + issues: WebacyIssue[]; +} + +export interface WebacyTag { + name: string; + description: string; + type: string; + severity: number; + key: string; +} + +export interface WebacyTags { + insufficient_wallet_age: boolean; + insufficient_wallet_balance: boolean; + insufficient_wallet_transactions: boolean; +} + +export interface WebacyWalletCharacteristics { + key: string; + name: string; + description: string; + tags: WebacyTags; +} diff --git a/server/lib/uauth.ts b/server/lib/uauth.ts new file mode 100644 index 00000000..fd17442c --- /dev/null +++ b/server/lib/uauth.ts @@ -0,0 +1,41 @@ +import type UAuth from '@uauth/js'; +import config from '@unstoppabledomains/config'; + +import Resolution from '@unstoppabledomains/resolution'; + +import {loadUnstoppableDomainsResolution} from './resolution/unstoppableDomainsLoader'; + +interface GetUAuthOptions { + clientId?: string; + redirectUri?: string; + humanityCheck?: boolean; +} + +let uauth: UAuth | null; +export async function getUAuth({ + clientId, + redirectUri, + humanityCheck, +}: GetUAuthOptions = {}): Promise { + if (!uauth) { + const UAuth = (await import('@uauth/js')).default; + const sourceConfig = await loadUnstoppableDomainsResolution(); + let fallbackIssuer = + config.APP_ENV !== 'production' + ? 'https://auth.ud-staging.com' + : undefined; + if (config.APP_ENV === 'development') { + fallbackIssuer = 'https://localhost:4444'; + } + + uauth = new UAuth({ + clientID: clientId || config.LOGIN_WITH_UNSTOPPABLE.CLIENT_ID, + redirectUri: redirectUri || config.LOGIN_WITH_UNSTOPPABLE.REDIRECT_URI, + scope: humanityCheck ? 'openid humanity_check' : 'openid wallet', + fallbackIssuer, + resolution: new Resolution({sourceConfig}), + }); + } + + return uauth; +} diff --git a/server/locales.json b/server/locales.json new file mode 100644 index 00000000..533f50b5 --- /dev/null +++ b/server/locales.json @@ -0,0 +1,6 @@ +{ + "locales": [ + {"name": "English", "code": "en-us", "file": "en.json"} + ], + "defaultLocale": "en-us" +} diff --git a/server/locales/.eslintrc.js b/server/locales/.eslintrc.js new file mode 100644 index 00000000..64cad275 --- /dev/null +++ b/server/locales/.eslintrc.js @@ -0,0 +1,20 @@ +const path = require('path'); + +module.exports = { + extends: ['plugin:i18n-json/recommended'], + rules: { + 'no-irregular-whitespace': 0, + 'i18n-json/valid-message-syntax': 0, + 'i18n-json/sorted-keys': [ + 2, + { + sortFunctionPath: path.resolve( + __dirname, + '..', + 'scripts', + 'i18nSort.js', + ), + }, + ], + }, +}; diff --git a/server/locales/en.json b/server/locales/en.json new file mode 100644 index 00000000..c67672ff --- /dev/null +++ b/server/locales/en.json @@ -0,0 +1,496 @@ +{ + "apps": { + "clearAll": "Clear all", + "featured": "Featured" + }, + "badge": { + "badge": "Badge", + "badgeHolders": "Badge Holders", + "badgeHoldersTooltip": "Top holders of this badge", + "badgeSponsors": "Badge Sponsors", + "badgeSponsorsTooltip": "Top sponsors of this badge", + "becomeABadgeSponsor": "Become a badge sponsor", + "becomeABadgeSponsorDescription": "Get noticed! Become a badge sponsor and put your brand or personal profile on the prime badge page. Reach a bigger audience and show off your achievements. Join the exclusive badge sponsor club now!", + "becomeBadgeSponsor": "Become badge sponsor", + "getBadge": "Get badge", + "showMore": "Show more", + "unlockSponsorsLeaderboard": "Unlock leaderboards: {{sponsorsLeft}} sponsors left!", + "wantABadge": "Want a {{badge}} Badge? See NFTs for sale" + }, + "badgeClaimPurchase": { + "addAnotherSponsorship": "Add another sponsorship for this community", + "sponsorThisCommunity": "Sponsor this community" + }, + "badges": { + "alreadyExists": "A badge for this collection already exists", + "alsoSponsoredBy": "Also sponsored by", + "badgeExists": "Is this badge yours? Email us at {{email}} and we'll help you claim it.", + "badgeInReview": "In Review", + "badgePendingApproval": "Pending Approval", + "badges": "Badges", + "badgeSponsorship": "Badge sponsorship", + "collectors": "Collectors", + "community": "community", + "continue": "Continue", + "copyLink": "Copy Link", + "count": "Count", + "create": "Sponsor", + "createWithMarketplaceUrl": "Enter your NFT collection URL", + "customDescription": "Sponsor a custom badge to show off your NFT collection and community", + "customTitle": "Sponsored Badges", + "details": "Details", + "featuredCommunities": "Featured Communities", + "featuredCommunityInquiry": "Badges are automatically added to this area after reaching their sponsorship goal", + "featuredContentHidden": "Featured {{type}} content is hidden on your public profile. Click to enable.", + "featuredPartnerInquiry": "Want to see your community featured in this area? Contact us:", + "featuredPartners": "Featured Partners", + "floorPrice": "Floor price", + "hide": "Hide on public profile", + "holder": "Holders", + "invalid": "Either this url is invalid, or this token isn't supported. Please try again", + "leaderboard": "Leaderboard", + "marketplaceUrlDescription": "OpenSea, MagicEden", + "name": "Name", + "notExist": "This collection doesn't exist", + "partner": "partner", + "purchaseItems": "Purchase Items", + "rank": "Rank", + "rankingByDomainCaption": "Top Unstoppable users with the most Web3 badges", + "rankingByDomainTitle": "Badges", + "rankingBySponsorCaption": "Top Unstoppable users sponsoring the most Web3 badges", + "rankingBySponsorTitle": "Sponsorships", + "rankingCaptionAll": "Top Web3 badge communities with the most Unstoppable users", + "rankingCaptionSponsored": "Top sponsored Web3 badge communities with the most Unstoppable users", + "rankings": "Leaderboards", + "rankingTitleAll": "All badges", + "rankingTitleSponsored": "Sponsored badges", + "rankNumber": "Rank #{{rank}} on leaderboard", + "show": "Show on public profile", + "sponsoredBadge": "Sponsored Badge", + "sponsoredBy": "Sponsored By", + "sponsors": "Sponsors", + "totalVolume": "Total volume", + "viewLeaderboard": "More Details & Stats" + }, + "cards": { + "available": "Available" + }, + "claimDomains": { + "beta": "Beta" + }, + "common": { + "account": "Account", + "addDomainCue": "Add a Web3 domain to start your journey on the decentralized web.", + "and": "and", + "appStore": "App Store", + "avatars": "avatars", + "back": "Back", + "backTo": "Back to", + "blockchain": "Blockchain", + "cancel": "Cancel", + "cart": "Cart", + "claim": "Claim", + "clearSearch": "Clear search", + "close": "Close", + "comingSoon": "Coming soon", + "confirm": "Confirm", + "continue": "Continue", + "copied": "Copied", + "copy": "Copy", + "copyLink": "Сopy Link", + "create": "Create", + "delete": "Delete", + "details": "Details", + "domain": "Domain", + "domains": "Domains", + "done": "Done", + "download": "Download", + "downloadAll": "Download All", + "edit": "Edit", + "email": "Email", + "enterValidEmail": "Enter a valid email address", + "enterYourEmail": "Enter your email address", + "error": "Error", + "examples": "Examples", + "expandShowcase": "Expand showcase", + "facebook": "Facebook", + "fillOutAllRequiredFields": "Fill out all required fields and submit again", + "filter": "Filter", + "getStarted": "Get started", + "go": "Go", + "goBack": "Go Back", + "googlePlay": "Google Play", + "here": "here", + "howItWorks": "How it works", + "images": "images", + "important": "Important", + "including": "including", + "inProgress": "In Progress", + "integrations": "Integrations", + "it": "it", + "learnMore": "Learn More", + "loading": "Loading", + "loadMore": "Load more", + "merch": "Merch", + "messenger": "Messenger", + "mint": "Mint", + "more": "More", + "multichain": "multichain", + "needHelp": "Need help?", + "next": "Next", + "no": "No", + "ok": "OK", + "or": "OR", + "pageDisabled": "We are currently experiencing issues on the website due to high volume of users. This page is temporarily disabled until the issues are resolved. Thank you for your patience!", + "partners": "Partners", + "pay": "Pay", + "pfp": "PFP", + "poweredBy": "Powered by", + "recommended": "Recommended", + "refresh": "Refresh", + "reload": "Reload", + "remove": "Remove", + "required": "Required", + "restart": "Restart", + "save": "Save", + "search": "Search", + "searchFieldPlaceholder": "Search for your new {{extension}}domain", + "searchForDomain": "Search for domain", + "searchNewDomain": "Search for a new domain", + "send": "Send", + "showAll": "Show all", + "showLess": "Show less", + "smartContract": "Smart contract", + "somethingWentWrong": "Something went wrong", + "status": "Status", + "subscribe": "Subscribe", + "tab": "tab", + "text": "Text", + "them": "them", + "twitter": "Twitter (X)", + "unstoppableMarketplace": "Unstoppable Marketplace", + "view": "View", + "visit": "Visit", + "waitingForPayment": "Waiting for Payment", + "wallet": "Wallet", + "warning": "Warning", + "year": "year", + "yes": "Yes", + "you": "You" + }, + "domainSuggestion": { + "hide": "Hide", + "show": "Show", + "saveFailed": "Unable to update your preference, Please try later", + "saveSuccess": "Your preference updated successfully" + }, + "header": { + "signOut": "Sign Out" + }, + "manage": { + "addressNotVerified": "Please verify the ownership of this address. NFTs associated with this address will not be displayed on your public profile.", + "addressNotVerifiedNonOwner": "Ownership of this address has not been verified.", + "configure": "Configure", + "domainProfileImage": "Domain profile image", + "enable": "Enable", + "unblock": "Unblock" + }, + "nftCollection": { + "addressWhereDomainIsStored": "Address where {{domain}} is stored:", + "addToCollection": "{{value}} {{currency}}", + "allClaimMethods": "All minting methods", + "approved": "approved", + "blockchain": "Blockchain", + "buyNewDomain": "buy new domain", + "cancel": "Cancel", + "checking": "Checking", + "chooseSigningMethod": "Choose signing method", + "cloudflareDns": "Cloudflare DNS", + "confirm": "Confirm", + "confirmDwebOverwrite": "Your currently hosted Dweb site will overwrite. Do you confirm?", + "congratulationsYourDeadheadGalleryIsOnItsWay": "Congratulations! Your Deadhead gallery is on its way", + "congratulationsYourNFTGalleryIsOnItsWay": "Congratulations! Your NFT gallery is on its way", + "contract": "Collection ID", + "createdBy": "Created by", + "createYourGallery": "Create your Gallery", + "description": "Description", + "domain": "domain", + "domain2": "Domain", + "domainOwnershipConfirmed": "Domain ownership confirmed", + "dontHaveYourDomainYet": "Don't have your domain yet?", + "dontHaveYourWeb3DomainYet": "Don't have your Web3 domain yet?", + "enterYour": "Enter your", + "eth": "ETH", + "filterByCategory": "Filter by: Category", + "filterByChain": "Filter by: Chain", + "find": "Find", + "firstTimeConfigDescription": "Create a Token gallery for your domain's connected wallets", + "firstTimeConfigTitle": "Showcase your Domain", + "forYourDeadheadGallery": "for your Deadhead Gallery.", + "forYourNftGallery": "for your NFT Gallery.", + "getHelp": "Get help", + "getThisDomain": "Get this domain", + "getYourDomain": "Get your domain", + "getYourWeb3Domain": "Get your Web3 domain", + "hereIsAPreviewOfHowItWillWork": "Here's a preview of how it will look", + "hidden": "Hidden: Click to show in public gallery", + "howToView": "How to view", + "ifYouWantToKeepYourHostedSite": "If you want to keep your currently hosted site you can", + "incorrectWallet": "Incorrect wallet", + "invalidNetwork": "Invalid network", + "iWillPayTheBlockchainFee": "I will pay the blockchain fee", + "launchingGallery": "Launching Gallery", + "letsCreateYourPersonalNft": "Let's create your personal NFT gallery", + "loading": "Loading token gallery data", + "makeSureYouAreConnectedToMainnet": "Please make sure you are connected to the mainnet", + "manageDescription": "Choose the blockchains to include in your domain's public gallery. Your wallet address must be verified for others to see your assets.", + "manageTitle": "Manage your Web3 Gallery", + "manageVisibility": "Pending changes for {{count}} NFT(s)", + "manageVisibilityTitle": "Visibility Settings", + "mayBeAvailableAtALaterTime": "may be available at a later time", + "metamask": "Metamask", + "more": "more", + "nftDetails": "Details", + "noNftsConfigured": "No NFTs are on display. Configure your gallery.", + "onceYourTransactionCompletesYoullBeAbleToAccessYourGalleryAt": "Once your transaction completes you'll be able to access your gallery at:", + "operaBrowser": "Opera Browser", + "pageDescription": "Create a personal art gallery for your NFT collection.", + "pageTitle": "My NFT Gallery", + "pleaseAcceptTheTransactionToConfigureResolver": "Please accept the transaction to configure your resolver", + "pleaseAcceptTheTransactionToCreateGallery": "Please accept the transaction to create your gallery", + "pleaseConnectToTheWalletWithAddress": "Please connect to the wallet with address:", + "pleaseMakeSureYouAlreadyHaveABrowserWallet": "Please make sure you already have a browser wallet installed such as", + "previewMyGallery": "Preview my gallery", + "resolverIsBeingDeployed": "Resolver is being deployed", + "reviewPayment": "Review Payment", + "seeMore": "See More", + "seeTransactionDetails": "See Transaction Details", + "sites": "sites", + "temporaryMirrorOfYourGallery": "temporary mirror of your gallery", + "thisDomainIsAvailableFor": "This Domain is Available for ${{price}}", + "thisDomainIsUnavailable": "This Domain is Unavailable", + "toBuy": "to buy", + "tokenId": "Token ID", + "unableToDetectABrowserWallet": "Unable to detect a browser wallet", + "unstoppableDomains": "Unstoppable Domains", + "untilThenYouCanSeeA": "Until then, you can see a", + "useAnotherDomain": "Use Another Domain", + "verifyYouOwnThisDomainByAcceptingTheSignature": "Verify you own this domain by accepting the signature request from your browser Wallet", + "viewInMarketplace": "View In Marketplace", + "viewUdMeProfile": "View UD.me Profile", + "visible": "Visible: Click to hide from public gallery", + "visit": "Visit", + "web3": "Web3", + "web3NftGalleryCreatedWith": "Web3 NFT gallery created with", + "weWillSearchTheWallet": "We will search the wallet where your domain is stored for any NFTs", + "yourNftGalleryIsReadyToLaunch": "Your NFT gallery is ready to launch" + }, + "profile": { + "addressNotVerifiedMessageOwner": "Your {{symbol}} NFTs are not currently visible to other users. Verify your {{symbol}} address to unlock the NFT gallery.", + "addressNotVerifiedMessagePublic": "NFTs displayed in the {{symbol}} gallery may not belong to the owner of this domain. Proceed with caution.", + "addressNotVerifiedTitle": "{{symbol}} Address not Verified", + "badge": "badge", + "badges": "Badges", + "badgesAreSyncedFromDomainOwnerWallet": "Badges are synced from domain owner wallet: {{address}}", + "clickToSeeAllApplications": "Click to see all applications", + "collapse": "Collapse", + "collectingYourBadges": "Collecting your badges...", + "configured": "Configured", + "configuredTokensFromGallery": "You have {{cryptoAddresses}} configured in your gallery.", + "contactSeller": "Contact seller", + "copyAddress": "Copy Address", + "copyDomainName": "Copy domain name", + "copyLink": "Copy Link", + "copyTheAddress": "Copy the address", + "displayed": "Displayed", + "dontWorry": "You can re-sync badges later to see if you earned new badges.", + "editBadges": "Edit badges", + "editProfile": "Edit Profile", + "emptyMinted": "The domain is minted, but the owner did not add any records yet.", + "emptyNotMinted": "The domain is purchased but isn't minted yet.", + "ethPlaceholder": "We're working hard to provide you with the best experience of interacting with other .eth domain owners like {{ethDomainName}}. Please check back soon.", + "follow": "Follow", + "followedBy": "Followed by {{followers}} and {{othersCount}} others", + "followers": "Followers", + "following": "Following", + "gallery": "Token Gallery", + "gotIt": "Got it", + "hidden": "Hidden", + "hideQRCode": "Hide QR Code", + "humanityVerified": "Humanity verified", + "itShouldNotGenerallyTakeMoreThanAMinute": "It should not generally take more than a minute.", + "karma": "Karma", + "learnMore": "Learn More", + "listed": "Listed", + "listedForSale": "This domain is listed for sale", + "looksLikeWeDidntFindBadgesForYou": "Looks like we didn't find badges for you", + "manageDetails": "Profile details", + "manageMyProfile": "Manage my profile", + "messaging": { + "compose": "Compose Message", + "ctaUrl": "CTA URL", + "ctaDescription": "This will show your audience a clickable button to the url link you will provide", + "enterMessage": "Enter a message", + "enterSubject": "Enter a subject", + "failedToSend": "Message failed to send.", + "from": "From", + "holders": "Holders", + "imageUrl": "Image URL", + "imageUrlDescription": "This image appears beside your message, the default is the badge", + "message": "Message", + "messageSent": "Message sent to {{numberOfHolders}} holder{{plural}}!", + "sendMessage": "Send message", + "subject": "Subject", + "to": "To" + }, + "moreInformation": "More information", + "openSea": "OpenSea", + "privacySettings": "Privacy settings", + "refreshBadges": "Refresh badges", + "sendMessage": "Send Message to Holders", + "setUpToken": "Setup Token Gallery", + "share": "Share", + "showAll": "Show All", + "showMore": "Show more", + "showNfts": "View NFTs", + "showQRCode": "Show QR Code", + "socials": "Socials", + "subscribers": "Subscribers", + "successWeFound": "Success! We found {{count}} {{badges}} for you", + "telegramScriptCouldNotBeLoaded": "Telegram script could not be loaded. Refresh the page.", + "thisDomainExpires": "This domain {{action}} on {{date}}", + "thisShouldOnlyTakeAMinute": "This should only take a minute.", + "tweets": "Tweets", + "udBlueTooltip": "This account is subscribed to Unstoppable Blue.", + "unfollow": "Unfollow", + "unverified": "Unverified", + "useYourDomainToLoginToApplications": "Use your domain to login to applications and become eligible for verified user-exclusive incentives and rewards.", + "verifiedThroughAccountLinking": "Verified through account linking on the UD website", + "verifiedTokenDescription": "Tokens are pulled in from your verified crypto addresses", + "verifiedWithUd": "Verified with UD", + "verifyAddress": "Verify {{symbol}} address", + "verifyWalletAddress": "Verify your wallet address", + "viewMyProfile": "View my profile", + "viewProfile": "View Profile", + "website": "Website" + }, + "push": { + "accept": "Accept chat request", + "acceptWarning": "Use caution when accepting new chat requests. Scammers may send you fraudulent content, which can result in the loss of your crypto assets. Do not accept this request unless you are sure it is from a safe source.", + "attachment": "Attachment", + "availableCommunities": "Available Communities", + "backToInbox": "Back to inbox", + "blockAndReport": "Block & report spam", + "chat": "Chat", + "chatNew": "Start a new chat", + "chatNewDescription": "Start by searching for a domain or wallet address", + "chatNotReady": "Messaging not yet enabled", + "chatReady": "Messaging enabled", + "chatSecure": "Your messages are end-to-end encrypted", + "chatSupport": "Chat with support", + "chatWithSelf": "Cannot message your own wallet {{address}}", + "communities": "Communities", + "communitiesNotReady": "Communities are not yet enabled", + "communitiesCollect": "Collect a badge with your domain to join a community", + "configure": "Enable Unstoppable Messaging on this device for {{domain}}", + "dropToUpload": "Drop file to upload...", + "emptyNotifications": "No App Notifications", + "errorAttachmentSize": "Attachment must be < {{size}}", + "errorLoadingMessage": "Unable to load message", + "errorSendingAttachment": "Unable to upload attachment", + "errorSendingMessage": "Unable to send message", + "hide": "Hide messages for {{domain}}", + "incoming": "Received a new message", + "incomingDomain": "Received a new message from {{domain}}", + "join": "Join group chat", + "joinCommunity": "Join a Community", + "joinCommunityError": "Unable to join community", + "joined": "Joined group", + "leave": "Leave group", + "leaveCommunityError": "Error leaving community", + "linkCancelBlock": "Cancel & block user", + "linkCancel": "Cancel", + "linkOpen": "Open link", + "linkWarning": "Opening links can result in the loss of your crypto assets. Do not open this link unless you are sure it is from a safe source.", + "loading": "Initializing Unstoppable Messaging for {{domain}}", + "loadingAttachment": "Loading attachment...", + "loadingCommunities": "Loading communities...", + "loadingConversation": "Loading messages...", + "loadingConversations": "Loading conversations...", + "loadingNotifications": "Loading notifications...", + "loadingUser": "Finding {{user}}...", + "messages": "Messages", + "messagingAvailable": "Unstoppable Messaging available for setup", + "messagingEnabled": "Unstoppable Messaging enabled", + "moreInfo": "More info", + "newConversation": "New conversation", + "newMessage": "New message", + "newNotification": "New notification", + "noPrimaryDomain": "Select a domain and setup reverse resolution to enable Unstoppable Messaging", + "notifications": "App Notifications", + "notificationsShort": "Apps", + "notificationsNotReady": "App notifications not yet enabled", + "open": "Show messages for {{domain}}", + "showRequests": "View chat requests ({{count}})", + "searchChat": "Search wallets or domains", + "searchCommunities": "Search communities", + "searchNotification": "Search notifications", + "settings": "Settings", + "setup": { + "chat": "Configuring Web3 chat...", + "chatDescription": "Sign the messages with your wallet to enable this device for Web3 messaging.", + "choosePrimaryDomain": "Choose Primary Domain", + "existingUserDescription": "We found an existing messaging account for {{domain}}. A wallet signature is required to decrypt your messages on this device.", + "existingUserNeedsNotifications": "We found an existing messaging account for {{domain}}. You'll be prompted for a wallet signature required to decrypt your messages on this device, along with an optional signature to subscribe to notifications.", + "isGasRequired": "No transaction fees", + "isGasRequiredDescription": "Enjoy the freedom of secure messages without the overhead of gas fees.", + "isItPortable": "Designed for mobility", + "isItPortableDescription": "Use our mobile app for messaging on the go. Your on-chain identity syncs your chat history.", + "isPushSecure": "Ensuring your privacy and security", + "isPushSecureDescription": "End-to-end encryption means only you and the intended recipients can view a conversation.", + "newUserDescription": "We need to request a few wallet signatures to enable Unstoppable Messaging for {{domain}}. You'll be able to send end-to-end encrypted messages to other domains and receive decentralized notifications.", + "notifications": "Configuration Web3 notifications...", + "notificationsDescription": "Sign the messages with your wallet to enable this device for Web3 notifications.", + "openMessaging": "View Messages", + "poweredBy": "Powered by", + "signAndEnable": "Enable on this Device", + "subscriptions": "Confirming account configuration...", + "subscriptionsDescription": "Checking your account to make sure it's ready for the best messaging experience.", + "success": "Success", + "successDescription": "Your device is ready for Unstoppable Messaging!", + "support": "We'd love to hear from you.", + "supportDescription": "Send a message to **{{supportHandle}}** for help, feedback or just to say hello.", + "title": "Unstoppable Messaging" + }, + "spamWarning": "Others have reported this sender as spam", + "typeMessage": "Type your message...", + "unsupportedContent": "Unsupported content type", + "uploading": "Uploading file..." + }, + "search": { + "clear": "Clear", + "searchProfiles": "Search profiles", + "searchResultsFor": "Search results for \"{{searchTerm}}\"" + }, + "upsell": { + "udBlueSubscription": { + "addToCart": "Add to cart · {{price}}/year", + "alreadySubscribed": "You are already subscribed to Unstoppable Blue", + "description": "Join Unstoppable Blue for exclusive benefits!", + "learnMore": "Learn more", + "limitedTimeDeal": "Limited Time Deal", + "subTitle": "{{price}} per year.", + "title": "Unstoppable Blue", + "tooltip": "Join Unstoppable Blue for Exclusive Benefits!" + } + }, + "webacy": { + "riskScore": "Risk score", + "riskScoreDescription": "Webacy analysis indicates a {{risk}} risk when interacting with the account owning this domain.", + "high": "High", + "low": "Low", + "medium": "Medium", + "share": "Share your Webacy risk score on X", + "shareMessage": "Check out my Web3 Risk Score powered by @unstoppableweb and @mywebacy. What's your score?" + } +} diff --git a/server/next-env.d.ts b/server/next-env.d.ts new file mode 100644 index 00000000..4f11a03d --- /dev/null +++ b/server/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/server/next.config.js b/server/next.config.js new file mode 100644 index 00000000..9a061cfd --- /dev/null +++ b/server/next.config.js @@ -0,0 +1,53 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const path = require('path'); +const locales = require('./locales.json'); + +// transpile any required modules +const withNtm = require('next-transpile-modules')([ + '@pushprotocol/uiweb', +]); + +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + pageExtensions: ['page.tsx', 'api.ts'], + typescript: { + ignoreBuildErrors: true, + }, + poweredByHeader: false, + webpack: (config, options) => { + config.plugins = config.plugins || []; + config.module.rules.push({ + test: /\.test\.tsx?$/, + loader: 'ignore-loader', + }); + config.module.noParse = /gun\.js|gun\/sea\.js/; + config.output.chunkLoadingGlobal = 'wpJsonpUD'; + config.resolve.extensions.push('.d.ts', '.ts', '.tsx'); + config.resolve.modules.push(path.resolve('./')); + config.resolve.fallback = { + ...config.resolve.fallback, + fs: false, + }; + return config; + }, + i18n: { + locales: locales.locales.map(({code}) => code), + defaultLocale: locales.defaultLocale, + }, + async rewrites() { + return [ + { + source: '/favicon.ico', + destination: + 'https://storage.googleapis.com/unstoppable-client-assets/images/favicon/favicon.ico', + }, + { + source: '/robots.txt', + destination: '/api/robots', + }, + ]; + }, +} + +module.exports = withNtm(nextConfig); diff --git a/server/package.json b/server/package.json new file mode 100644 index 00000000..79d63b9e --- /dev/null +++ b/server/package.json @@ -0,0 +1,108 @@ +{ + "name": "server", + "version": "0.0.1", + "private": true, + "scripts": { + "build": "next build", + "build:development": "../setenv.sh development yarn build", + "build:e2e": "../setenv.sh e2e yarn build", + "build:production": "../setenv.sh production yarn build", + "build:staging": "../setenv.sh staging yarn build", + "build:test": "../setenv.sh test yarn build", + "dev": "../setenv.sh development next dev -p 3000", + "format": "prettier -w .", + "lint": "next lint", + "start": "next start" + }, + "resolutions": { + "@types/react": "17.0.2", + "@types/react-dom": "17.0.2" + }, + "dependencies": { + "@braintree/sanitize-url": "^6.0.4", + "@emotion/react": "^11.11.1", + "@emotion/server": "^11.4.0", + "@emotion/styled": "^11.11.0", + "@mui/icons-material": "^5.14.13", + "@mui/material": "^5.14.13", + "@pushprotocol/restapi": "^1.4.15", + "@pushprotocol/socket": "^0.5.1", + "@pushprotocol/uiweb": "^1.1.13", + "@reduxjs/toolkit": "^1.6.2", + "@types/bluebird": "3.5.34", + "@types/jest": "^29.5.5", + "@types/lodash": "^4.14.199", + "@types/lodash.merge": "^4.6.7", + "@types/node": "17.0.24", + "@types/numeral": "^2.0.2", + "@types/qs": "^6.9.8", + "@types/ramda": "^0.29.6", + "@types/react": "17.0.2", + "@types/react-cookies": "^0.1.1", + "@types/react-dom": "^17.0.2", + "@types/react-lazy-load-image-component": "^1.6.0", + "@types/react-redux": "^7.1.24", + "@uauth/js": "^2.8.0", + "@unstoppabledomains/resolution": "^8.5.0", + "@unstoppabledomains/ui-kit": "^0.3.15", + "@web3-react/core": "^8.2.2", + "@xmtp/content-type-remote-attachment": "^1.0.7", + "@xmtp/proto": "^3.27.0", + "@xmtp/xmtp-js": "^11.1.1", + "bluebird": "^3.7.2", + "clipboard-copy": "^4.0.1", + "date-fns": "^2.16.1", + "filesize": "^10.0.8", + "font-awesome": "^4.7.0", + "hash.js": "^1.1.7", + "jest": "^29.1.0", + "js-base64": "^3.7.5", + "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", + "next": "^12.3.4", + "next-redux-wrapper": "^6.0.2", + "next-seo": "^6.1.0", + "next-transpile-modules": "^10.0.0", + "notistack": "^2.0.5", + "numeral": "^2.0.6", + "prettier": "^3.0.3", + "prettier-plugin-organize-imports": "^3.2.3", + "qs": "^6.11.2", + "ramda": "^0.27.1", + "react": "17.0.2", + "react-cookies": "^0.1.1", + "react-dom": "^17.0.2", + "react-emoji-render": "^2.0.1", + "react-hook-form": "^7.42.1", + "react-infinite-scroll-component": "^6.1.0", + "react-is-mounted-hook": "^1.1.2", + "react-lazy-load-image-component": "^1.6.0", + "react-medium-image-zoom": "^5.1.6", + "react-qrcode-logo": "^2.8.0", + "react-query": "^3.39.3", + "react-redux": "^7.2.5", + "react-visibility-sensor": "^5.1.1", + "redux": "^4.1.1", + "redux-devtools-extension": "^2.13.9", + "redux-thunk": "^2.3.0", + "rooks": "^5.7.0", + "styled-components": "^5.3.5", + "swiper": "6.8.4", + "title-case": "^3.0.3", + "truncate-eth-address": "^1.0.2", + "tss-react": "^4.0.0", + "typescript": "5.0.4", + "wagmi": "^1.4.4", + "web3.storage": "^4.5.5" + }, + "devDependencies": { + "@jedmao/redux-mock-store": "^3.0.5", + "@testing-library/react": "^12.1.2", + "@testing-library/react-hooks": "^7.0.2", + "eslint-plugin-i18n-json": "^3.1.0" + }, + "engines": { + "node": "16.x.x", + "yarn": "1.22.x" + } +} diff --git a/server/pages/[domain].page.tsx b/server/pages/[domain].page.tsx new file mode 100644 index 00000000..5cc0a27a --- /dev/null +++ b/server/pages/[domain].page.tsx @@ -0,0 +1,1264 @@ +import AutoAwesomeOutlinedIcon from '@mui/icons-material/AutoAwesomeOutlined'; +import ChatIcon from '@mui/icons-material/Chat'; +import CheckCircleOutlinedIcon from '@mui/icons-material/CheckCircleOutlined'; +import FmdGoodOutlinedIcon from '@mui/icons-material/FmdGoodOutlined'; +import HowToRegOutlinedIcon from '@mui/icons-material/HowToRegOutlined'; +import InfoOutlinedIcon from '@mui/icons-material/InfoOutlined'; +import IosShareIcon from '@mui/icons-material/IosShare'; +import LanguageIcon from '@mui/icons-material/Language'; +import OutlinedFlagIcon from '@mui/icons-material/OutlinedFlag'; +import WarningOutlinedIcon from '@mui/icons-material/WarningOutlined'; +import Avatar from '@mui/material/Avatar'; +import Box from '@mui/material/Box'; +import Button from '@mui/material/Button'; +import Chip from '@mui/material/Chip'; +import CircularProgress from '@mui/material/CircularProgress'; +import Divider from '@mui/material/Divider'; +import Grid from '@mui/material/Grid'; +import IconButton from '@mui/material/IconButton'; +import List from '@mui/material/List'; +import ListItem from '@mui/material/ListItem'; +import Tooltip from '@mui/material/Tooltip'; +import Typography from '@mui/material/Typography'; +import {getDomainBadges, getReverseResolution} from 'actions/domainActions'; +import {getFollowers, getProfileData} from 'actions/domainProfile'; +import {useFeatureFlags} from 'actions/featureFlagActions'; +import {getIdentity} from 'actions/identityActions'; +import Badges from 'components/Badges'; +import Badge from 'components/Badges/Badge'; +import {UnstoppableMessaging} from 'components/Chat/UnstoppableMessaging'; +import useUnstoppableMessaging from 'components/Chat/hooks/useUnstoppableMessaging'; +import CopyToClipboard from 'components/CopyToClipboard'; +import CryptoAddresses from 'components/CryptoAddresses'; +import CustomBadges from 'components/CustomBadges'; +import {DomainListModal} from 'components/Domain/DomainListModal'; +import {DomainPreview} from 'components/Domain/DomainPreview'; +import FollowButton from 'components/Domain/FollowButton'; +import ProfilePicture from 'components/Domain/ProfilePicture'; +import ShareMenu from 'components/Domain/ShareMenu'; +import ShowHideButton from 'components/Domain/ShowHideButton'; +import SocialAccountCard from 'components/Domain/SocialAccountCard'; +import ForSaleOnOpenSea from 'components/ForSaleOnOpenSea'; +import {AccountButton} from 'components/Header/AccountButton'; +import {LoginButton, LoginMethod} from 'components/Header/LoginButton'; +import ProfileSearchBar from 'components/Header/ProfileSearchBar'; +import Logo from 'components/Image/Logo'; +import Link from 'components/Link'; +import NFTGalleryCarousel from 'components/TokenGallery/NFTGalleryCarousel'; +import TokenGallery from 'components/TokenGallery/TokenGallery'; +import {format, isPast} from 'date-fns'; +import {useEnsDomainStatus} from 'hooks/useEnsDomainStatus'; +import useTokenGallery from 'hooks/useTokenGallery'; +import useWeb3Context from 'hooks/useWeb3Context'; +import { + isExternalDomainValidForManagement, + splitDomain, +} from 'lib/domain/format'; +import getImageUrl from 'lib/domain/getImageUrl'; +import {parseRecords} from 'lib/domain/records'; +import {formOpenSeaLink} from 'lib/formOpenseaLink'; +import useTranslationContext from 'lib/i18n'; +import {getSeoTags} from 'lib/seo'; +import type {DomainBadgesResponse} from 'lib/types/badge'; +import type {Blockchain} from 'lib/types/blockchain'; +import {Registry} from 'lib/types/blockchain'; +import type { + SerializedDomainProfileSocialAccountsUserInfo, + SerializedPublicDomainProfileData, +} from 'lib/types/domain'; +import {DomainProfileKeys, UD_BLUE_BADGE_CODE} from 'lib/types/domain'; +import type {PersonaIdentity} from 'lib/types/persona'; +import {getUAuth} from 'lib/uauth'; +import type {GetServerSideProps} from 'next'; +import {NextSeo} from 'next-seo'; +import {useSnackbar} from 'notistack'; +import QueryString from 'qs'; +import React, {useEffect, useState} from 'react'; +import useIsMounted from 'react-is-mounted-hook'; +import {useStyles} from 'styles/pages/domain.styles'; +import {titleCase} from 'title-case'; + +import config from '@unstoppabledomains/config'; +import {Logo as UnstoppableLogo} from '@unstoppabledomains/ui-kit/components'; +import CopyContentIcon from '@unstoppabledomains/ui-kit/icons/CopyContent'; + +type DomainProfileServerSideProps = GetServerSideProps & { + params: { + domain: string; + }; +}; + +export type DomainProfilePageProps = { + domain: string; + profileData?: SerializedPublicDomainProfileData | null; + records: Record; + metadata: Record; + identity?: PersonaIdentity; +}; + +const DomainProfile = ({ + domain, + profileData, + records, + metadata, + identity, +}: DomainProfilePageProps) => { + // hooks + const [t] = useTranslationContext(); + const {classes, cx} = useStyles(); + const isMounted = useIsMounted(); + const [imagePath, setImagePath] = useState(); + const {enqueueSnackbar} = useSnackbar(); + const {chatUser, setOpenChat} = useUnstoppableMessaging(); + const {nfts, nftSymbolVisible, expanded: nftShowAll} = useTokenGallery(); + const {setWeb3Deps} = useWeb3Context(); + + // state management + const [authAddress, setAuthAddress] = useState(''); + const [authDomain, setAuthDomain] = useState(''); + const [displayQrCode, setDisplayQrCode] = useState(false); + const [isOwner, setIsOwner] = useState(); + const [someSocialsPublic, setIsSomeSocialsPublic] = useState(false); + const [badgeTypes, setBadgeTypes] = useState([]); + const [badges, setBadges] = useState(); + const [badgesDisabled, setBadgesDisabled] = useState(true); + const [showFeaturedCommunity, setShowFeaturedCommunity] = useState( + profileData?.profile.showFeaturedCommunity ?? false, + ); + const [showFeaturedPartner, setShowFeaturedPartner] = useState( + profileData?.profile.showFeaturedPartner ?? false, + ); + const { + data: featureFlags, + isSuccess: isFeatureFlagSuccess, + isFetched: isFeatureFlagFetched, + } = useFeatureFlags(false, domain); + + const [followers, setFollowers] = useState([]); + const [isViewFollowModalOpen, setIsViewFollowModalOpen] = useState(false); + const [viewFollowerRelationship, setViewFollowerRelationship] = useState( + 'followers' as 'following' | 'followers', + ); + const [optimisticFollowCount, setOptimisticFollowCount] = useState(0); + + const isExternalDomain = isExternalDomainValidForManagement(domain); + const isDisabledEthPage = + isExternalDomain && + !featureFlags?.variations?.ecommerceServiceFreshDomainPublicProfileEnable; + + const {data: ethDomainStatus} = useEnsDomainStatus(domain, isExternalDomain); + + // format social platform data + const socialsInfo: SerializedDomainProfileSocialAccountsUserInfo = {}; + const allSocials = profileData?.socialAccounts + ? Object.keys(profileData.socialAccounts) + : []; + const verifiedSocials = allSocials.filter(socialType => + Boolean( + (profileData?.socialAccounts && + profileData?.socialAccounts[socialType]?.verified) || + true, + ), + ); + verifiedSocials.forEach(socialType => { + const socialUser = profileData?.socialAccounts[socialType]?.location; + socialsInfo[socialType] = { + kind: socialType, + userName: socialUser, + screenName: socialUser, + name: socialUser, + url: socialUser, + title: socialUser, + }; + }); + + // humanity check status + const humanityVerified = ['APPROVED', 'COMPLETED'].includes( + identity?.status ?? 'NONE', + ); + + // retrieve on-chain record data + const addressRecords = parseRecords(records || {}); + const isForSale = + (records['whois.for_sale.value'] ?? '').toLowerCase() === 'true'; + const ipfsHash = records['ipfs.html.value']; + const ownerAddress = metadata.owner || ''; + const ownerEmail = records['whois.email.value']; + const {blockchain} = metadata; + const {tokenId} = metadata; + const openSeaLink = formOpenSeaLink({ + logicalOwnerAddress: ownerAddress, + blockchain: blockchain as Blockchain, + type: Registry.UNS, + ttl: 0, + tokenId, + domain, + namehash: metadata.namehash, + registryAddress: metadata.registry, + resolver: metadata.resolver, + reverse: Boolean(metadata.reverse), + }); + const needLeftSideDivider = + Boolean(profileData?.profile.location) || + verifiedSocials.length > 0 || + humanityVerified || + ipfsHash || + profileData?.profile.web2Url; + + const hasAddresses = Boolean( + Object.keys(addressRecords.addresses ?? {}).length || + Object.keys(addressRecords.multicoinAddresses ?? {}).length, + ); + const uploadedImagePath = profileData?.profile.imagePath + ? getImageUrl(profileData.profile.imagePath) + : null; + + const domainCover = profileData?.profile.coverPath + ? getImageUrl(profileData?.profile.coverPath) + : null; + const {label, sld, extension} = splitDomain(domain); + const seoTags = getSeoTags({ + domain, + profileData, + socialsInfo, + domainAvatar: uploadedImagePath, + }); + + const toggleQrCode = () => { + setDisplayQrCode(!displayQrCode); + }; + + const handleClickToCopy = () => { + enqueueSnackbar(t('common.copied'), {variant: 'success'}); + }; + + const handleViewFollowingClick = () => { + setViewFollowerRelationship('following'); + setIsViewFollowModalOpen(true); + }; + + const handleFollowClick = () => { + setOptimisticFollowCount(currentValue => currentValue + 1); + }; + + const handleUnfollowClick = () => { + setOptimisticFollowCount(currentValue => currentValue - 1); + }; + + const handleViewFollowersClick = () => { + setViewFollowerRelationship('followers'); + setIsViewFollowModalOpen(true); + }; + + const handleViewFollowModalClose = () => { + setIsViewFollowModalOpen(false); + }; + + const handleShareRiskScore = () => { + window.open( + `https://twitter.com/intent/tweet?text=${encodeURI( + t('webacy.shareMessage'), + )}&url=${encodeURI(`${config.UD_ME_BASE_URL}/${domain}`)}`, + '_blank', + ); + }; + + const handleLoginClicked = async (): Promise => { + try { + if (authDomain) { + return; + } + + // complete the login with UD flow + const uauth = await getUAuth({ + clientId: config.LOGIN_WITH_UNSTOPPABLE.CLIENT_ID, + redirectUri: config.LOGIN_WITH_UNSTOPPABLE.REDIRECT_URI, + }); + const authorization = await uauth.loginWithPopup(); + if (!authorization.idToken.wallet_address) { + throw new Error('wallet address not provided in claims'); + } + + // determine the user's primary domain (if available) + const authOwnerAddress = authorization.idToken.wallet_address; + const authPrimaryDomain = await getReverseResolution(authOwnerAddress); + + // store the domain to be displayed in the UX, defaulting to the + // user's primary domain if available and falling back to the one + // provided at login time if not available + localStorage.setItem( + DomainProfileKeys.AuthDomain, + authPrimaryDomain || authorization.idToken.sub, + ); + setAuthDomain(authPrimaryDomain || authorization.idToken.sub); + + // store the wallet address that was authenticated + localStorage.setItem(DomainProfileKeys.AuthAddress, authOwnerAddress); + setAuthAddress(authOwnerAddress); + + // set ownership flag + setIsOwner(ownerAddress.toLowerCase() === authOwnerAddress.toLowerCase()); + } catch (loginError) { + console.error('login error', loginError); + } + }; + + const hasBadges = + !badgesDisabled && + !!badges && + !!badges.badgesLastSyncedAt && + badges.countActive > 0 && + badges.list.filter(b => !b.expired).length > 0; + + const hasContent = + Boolean(verifiedSocials.length) || + ipfsHash || + hasAddresses || + isForSale || + hasBadges; + + useEffect(() => { + // wait until mounted + if (!isMounted() || !isFeatureFlagSuccess) { + return; + } + + // disable badge rendering if owner address is on the list of wallet + // addresses specified by launch darkly targeting + setBadgesDisabled( + featureFlags?.variations?.ecommerceServiceWalletsDisableBadges + .map((v: string) => v.toLowerCase()) + .includes(ownerAddress.toLowerCase()), + ); + + // set state from local storage + const localAuthAddress = + localStorage.getItem(DomainProfileKeys.AuthAddress) || ''; + const localAuthDomain = + localStorage.getItem(DomainProfileKeys.AuthDomain) || ''; + let isAuthorized = false; + if (localAuthAddress && localAuthDomain) { + setAuthAddress(localAuthAddress); + setAuthDomain(localAuthDomain); + isAuthorized = + ownerAddress.toLowerCase() === localAuthAddress.toLowerCase(); + } + setIsOwner(isAuthorized); + + // load initial set of followers + void loadFollowers(); + }, [isMounted, isFeatureFlagSuccess, featureFlags, ownerAddress]); + + // Check for Social Account Visibility Status + useEffect(() => { + // determine social account status + if (profileData?.socialAccounts) { + setIsSomeSocialsPublic( + Object.values(profileData?.socialAccounts).some( + social => social.public, + ), + ); + } + // retrieve badges + const loadBadges = async () => { + const badgeData = await getDomainBadges(domain); + setBadges(badgeData); + setBadgeTypes([ + ...new Set( + badgeData?.list + ?.filter(b => b.active) + .map(b => b.type) + .sort(), + ), + ]); + }; + void loadBadges(); + }, []); + + useEffect(() => { + if (profileData?.profile.imagePath) { + setImagePath(profileData?.profile.imagePath); + } + }, [profileData]); + + if (isExternalDomain && !isFeatureFlagFetched) { + return ( +
+ +
+ ); + } + + if (isFeatureFlagFetched && isDisabledEthPage) { + return ( +
+ + {t('common.comingSoon')} + + {t('profile.ethPlaceholder', { + ethDomainName: domain, + })} + +
+ ); + } + + // getNftsForContract retrieves NFTs matching one of the specified smart + // contract addresses + const getNftsForContract = (contracts: string[]) => { + return nfts + ? nfts.filter( + nft => + contracts && + contracts.filter(contract => + nft.mint?.toLowerCase().includes(contract.toLowerCase()), + ).length > 0, + ) + : []; + }; + + // featured community list + const featuredCommunities = badges?.list?.filter( + badge => + badge.gallery && + badge.gallery.tier === 2 && + badge.contracts && + getNftsForContract(badge.contracts).length > 0, + ); + + // featured partner list + const featuredPartners = badges?.list?.filter( + badge => badge.gallery && badge.gallery.tier > 2, + ); + + const loadFollowers = async () => { + if ( + profileData?.social?.followerCount && + profileData.social.followerCount > 0 + ) { + const loadedFollowers = await retrieveFollowers(); + if (loadedFollowers?.domains && loadedFollowers.domains.length > 0) { + setFollowers([...loadedFollowers.domains]); + } + } + }; + + const retrieveFollowers = async (cursor?: number) => { + const retData: {domains: string[]; cursor?: number} = { + domains: [], + cursor: undefined, + }; + try { + const followersData = await getFollowers( + domain, + viewFollowerRelationship, + cursor, + ); + if (followersData) { + retData.domains = followersData.data.map(f => f.domain); + retData.cursor = followersData.meta.pagination.cursor; + } + } catch (e) { + console.error('error retrieving followers', e); + } + return retData; + }; + + const hasUdBlueBadge = + featureFlags.variations?.ecommerceServiceUdBlueSubscriptionEnabled && + badges?.list?.some(badge => badge.code === UD_BLUE_BADGE_CODE); + + return ( + + +
+ +
+
+ + {chatUser && chatUser.toLowerCase() !== domain.toLowerCase() && ( + + )} + {domain !== authDomain && ( + + )} +
+
+
+ +
+ {featureFlags?.variations + ?.ecommerceServiceUsersPublicProfileLoginButton && ( +
+ {authDomain ? ( + <> + {featureFlags?.variations + ?.ecommerceServiceUsersEnableChat && ( +
+ +
+ )} + + + ) : ( +
+ )} +
+
+
+ + + +
+
+ +
+ {profileData?.profile.displayName && ( +
+ + + {profileData?.profile.displayName + ? profileData?.profile.displayName + : ''} + + + + + {sld ? `${label}.${sld}` : label} +
+ .{extension} + + + + + +
+
+
+
+ )} + {profileData?.profile && ( +
+ + + + + {followers && followers.length > 2 && ( +
+ + {t('profile.followedBy', { + followers: followers.slice(0, 2).join(', '), + othersCount: + (profileData.social.followerCount || 0) - 3, + })} + +
+ {followers.slice(0, 3).map(follower => ( + + ))} +
+
+ )} +
+ )} + {profileData?.profile.description ? ( + + + {profileData?.profile.description + ? profileData?.profile.description + : ''} + + + ) : null} + {profileData?.webacy && + featureFlags.variations?.ecommerceServiceEnableWebacyScore && ( + + window.open('https://webacy.com', '_blank')} + /> + + {t('webacy.riskScore')}: + + 0 ? ( + profileData.webacy.issues.map(issue => ( + <> + + { + issue.categories.wallet_characteristics + .description + } + + + {issue.tags.map(tag => ( + + + {tag.name} + + + ))} + + + )) + ) : ( + + {t('webacy.riskScoreDescription', { + risk: profileData.webacy.high + ? t('webacy.high').toLowerCase() + : profileData.webacy.medium + ? t('webacy.medium').toLowerCase() + : t('webacy.low').toLowerCase(), + })} + + ) + } + > + + ) : profileData.webacy.medium ? ( + + ) : ( + + ) + } + label={ + profileData.webacy.high + ? t('webacy.high') + : profileData.webacy.medium + ? t('webacy.medium') + : t('webacy.low') + } + /> + + {isOwner && + !profileData.webacy.high && + !profileData.webacy.medium && ( + + {t('webacy.share')} + + } + > + + + + + )} + + )} + {hasAddresses && ( + + )} + {needLeftSideDivider && ( + + + + )} + {Boolean(verifiedSocials.length) && someSocialsPublic && ( +
+ + {verifiedSocials.map(account => { + return ( + + + + ); + })} + + {needLeftSideDivider && ( + + + + )} +
+ )} + {humanityVerified && ( + + {t('profile.useYourDomainToLoginToApplications')} + + {t('profile.clickToSeeAllApplications')} + +
+ } + arrow + > +
+ + + {t('profile.humanityVerified')} + +
+ + )} + {ipfsHash ? ( + + + + {`${domain} (${ipfsHash.slice(0, 10)}...${ipfsHash.slice( + -4, + )})`} + + + ) : null} + {profileData?.profile.web2Url ? ( + + + + {profileData?.profile.web2Url.replace( + /^https?:\/\/|\/$/g, + '', + )} + + + ) : null} + {profileData?.profile.location ? ( + + + + {profileData?.profile.location} + + + ) : null} + {needLeftSideDivider && ( + + + + )} + +
+ + + + {isForSale && !nftShowAll && openSeaLink && ( + + )} + {hasBadges && !nftShowAll && ( + <> + {badgeTypes.map((badgeType, index) => { + const badgeList = badges.list?.filter( + b => + b.type === badgeType && + (b.code !== UD_BLUE_BADGE_CODE || + featureFlags.variations + ?.ecommerceServiceUdBlueSubscriptionEnabled), + ); + return ( + <> +
+ + {titleCase(badgeType)} + + {index === 0 && ( +
+
+ +
+
+ )} +
+ b.type === badgeType && b.active, + ).length + } + countTotal={badgeList.length} + badgesLastSyncedAt={badges.badgesLastSyncedAt} + usageEnabled + setWeb3Deps={setWeb3Deps} + authWallet={authAddress} + authDomain={authDomain} + /> + + ); + })} + + {featureFlags.variations + ?.ecommerceServiceEnablePartnerTokenGallery && + (isOwner || showFeaturedPartner) && + featuredPartners && + featuredPartners.length > 0 && ( + <> +
+ + {t('badges.featuredPartners')} + + {t('badges.featuredPartnerInquiry')}{' '} + + bd@unstoppabledomains.com + +
+ } + placement="top" + arrow + > + + + + {isOwner && ( +
+ + + +
+ )} + + {showFeaturedPartner ? ( + + {featuredPartners.map(badge => ( + + + + + ))} + + ) : ( + + {t('badges.featuredContentHidden', { + type: t('badges.partner'), + })} + + )} + + )} + {featureFlags.variations + ?.ecommerceServiceEnablePartnerTokenGallery && + (isOwner || showFeaturedCommunity) && + featuredCommunities && + featuredCommunities.length > 0 && + nfts && + nfts.length > 0 && ( + <> +
+ + {t('badges.featuredCommunities')} + + + + + {isOwner && ( +
+ + + +
+ )} +
+ {showFeaturedCommunity ? ( + + {featuredCommunities.map(badge => ( + + + + + ))} + + ) : ( + + {t('badges.featuredContentHidden', { + type: t('badges.community'), + })} + + )} + + )} + + )} + {!hasContent && !nftShowAll && ( +
+ + + {blockchain + ? t('profile.emptyMinted') + : t('profile.emptyNotMinted')} +
+ )} + {isExternalDomain && ethDomainStatus?.expiresAt && ( +
+ {t('profile.thisDomainExpires', { + action: isPast(new Date(ethDomainStatus.expiresAt)) + ? 'expired' + : 'is set to expire', + date: format( + new Date(ethDomainStatus.expiresAt), + 'MMM d, yyyy', + ), + })} +
+ )} +
+
+ {profileData && ( + + )} +
+ ); +}; + +export async function getServerSideProps(props: DomainProfileServerSideProps) { + const {params} = props; + const profileServiceUrl = config.PROFILE.HOST_URL; + const domain = params.domain.toLowerCase(); + const redirectToSearch = { + redirect: { + destination: `${ + config.UNSTOPPABLE_WEBSITE_URL + }/search?${QueryString.stringify({ + searchTerm: domain, + searchRef: 'domainprofile', + })}`, + permanent: false, + }, + }; + + let profileData: SerializedPublicDomainProfileData | undefined; + let records: Record = {}; + let metadata: Record = {}; + let identity = null; + try { + const [profileDataObj, identityObj] = await Promise.allSettled([ + getProfileData(domain), + getIdentity({name: domain}), + ]); + profileData = + profileDataObj.status === 'fulfilled' ? profileDataObj.value : undefined; + records = profileData?.records ? profileData.records : {}; + metadata = profileData?.metadata ? profileData.metadata : {}; + identity = + identityObj.status === 'fulfilled' && identityObj.value + ? identityObj.value + : null; + } catch (e) { + console.error(`error loading domain profile for ${domain}`, String(e)); + } + + // Redirecting to /search if the domain isn't purchased yet, trying to increase conversion + if (!profileData?.profile?.domainPurchased) { + return redirectToSearch; + } + + // set display name to domain if not already set + if (profileData?.profile && !profileData.profile.displayName) { + profileData.profile.displayName = domain; + } + + return { + props: { + profileServiceUrl, + domain, + profileData, + records, + metadata, + identity, + }, + }; +} + +export default DomainProfile; diff --git a/server/pages/_app.page.tsx b/server/pages/_app.page.tsx new file mode 100644 index 00000000..c105eab1 --- /dev/null +++ b/server/pages/_app.page.tsx @@ -0,0 +1,89 @@ +import CssBaseline from '@mui/material/CssBaseline'; +import {ThemeProvider} from '@mui/material/styles'; +import UnstoppableMessagingProvider from 'components/Chat/provider/UnstoppableMessagingProvider'; +import {TranslationProvider} from 'lib/i18n'; +import type {NextPage} from 'next'; +import type {AppProps} from 'next/app'; +import Head from 'next/head'; +import {SnackbarProvider} from 'notistack'; +import TokenGalleryProvider from 'providers/TokenGalleryProvider'; +import Web3ContextProvider from 'providers/Web3ContextProvider'; +import React from 'react'; +import {QueryClient, QueryClientProvider} from 'react-query'; +import {createEmotionSsrAdvancedApproach} from 'tss-react/nextJs'; + +import {darkTheme, lightTheme} from '@unstoppabledomains/ui-kit/styles'; + +// setup query client +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + // We want cacheTime to be a balance - long enough to improve load speed for frequently used + // queries, while short enough to avoid using too much memory for long browsing sessions. While + // it makes sense for react-query to have an aggressive 5 minute default, 24 hours seems more + // appropriate for our app. For comparison, the `swr` module never clears cache keys. + cacheTime: 1000 * 60 * 60 * 24, // 24 hours + }, + }, +}); + +// setup emotion cache for MUI +const {EmotionCacheProvider, withEmotionCache} = + createEmotionSsrAdvancedApproach({key: 'css'}); +export {withEmotionCache}; + +// setup wrapped app props +export type NextPageWithLayout = NextPage & { + themeMode?: 'light' | 'dark'; +}; +export type WrappedAppProps = AppProps & { + Component: NextPageWithLayout; +}; + +const WrappedApp = (props: WrappedAppProps) => { + const {Component, pageProps} = props; + const pageTheme = Component.themeMode === 'dark' ? darkTheme : lightTheme; + + return ( + <> + + {/* MUI - Setup */} + {/* */} + {/* Use minimum-scale=1 to enable GPU rasterization */} + {/* Use maximum-scale=1, user-scalable=0 so that page won't be zoomed by an accident on mobile devices + when touching input field or rotating the screen */} + + + + + + + {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */} + + + + + + + + + + + + + + + + + ); +}; + +export default WrappedApp; diff --git a/server/pages/_document.page.tsx b/server/pages/_document.page.tsx new file mode 100644 index 00000000..dd2ac9b4 --- /dev/null +++ b/server/pages/_document.page.tsx @@ -0,0 +1,34 @@ +import getImageUrl from 'lib/domain/getImageUrl'; +import Document, {Head, Html, Main, NextScript} from 'next/document'; +import {withEmotionCache} from 'pages/_app.page'; +import React from 'react'; + +import theme from '@unstoppabledomains/ui-kit/styles'; + +class MyDocument extends Document { + render() { + const shortcutIcon = getImageUrl('/favicon/favicon-v3.ico'); + const svgFavicon = getImageUrl('/favicon/icon.svg'); + const appleTouchIcon = getImageUrl('/favicon/apple-touch-icon.png'); + return ( + + + {/* Legacy favicon without transparent pixels, to fix transparency issues */} + + {/* Responsive, future-proof SVG favicon, supports dark/light themes */} + + {/* 3072x3072 iOS friendly icon */} + + + + + +
+ + + + ); + } +} + +export default withEmotionCache(MyDocument); diff --git a/server/pages/index.page.tsx b/server/pages/index.page.tsx new file mode 100644 index 00000000..a46dc9fc --- /dev/null +++ b/server/pages/index.page.tsx @@ -0,0 +1,22 @@ +import type {GetServerSideProps, NextPage} from 'next'; +import React from 'react'; + +export interface HomePageProps { + domain: string; +} + +const HomePage: NextPage = ({domain}) => { + return
Hello {domain}!
; +}; + +export const getServerSideProps: GetServerSideProps< + HomePageProps +> = async () => { + return { + props: { + domain: 'world', + }, + }; +}; + +export default HomePage; diff --git a/server/providers/TokenGalleryProvider.tsx b/server/providers/TokenGalleryProvider.tsx new file mode 100644 index 00000000..82016e10 --- /dev/null +++ b/server/providers/TokenGalleryProvider.tsx @@ -0,0 +1,40 @@ +import type {Nft} from 'components/TokenGallery/NftCard'; +import React, {useState} from 'react'; + +type Props = { + children: React.ReactNode; +}; + +export const TokenGalleryContext = React.createContext<{ + nfts?: Nft[]; + setNfts?: (v: Nft[]) => void; + nftSymbolVisible?: Record; + setNftSymbolVisible?: (v: Record) => void; + expanded?: boolean; + setExpanded?: (v: boolean) => void; +}>({}); + +const TokenGalleryProvider: React.FC = ({children}) => { + const [expanded, setExpanded] = useState(false); + const [nfts, setNfts] = useState([] as Nft[]); + const [nftSymbolVisible, setNftSymbolVisible] = useState< + Record + >({}); + + const value = { + nfts, + setNfts, + expanded, + setExpanded, + nftSymbolVisible, + setNftSymbolVisible, + }; + + return ( + + {children} + + ); +}; + +export default TokenGalleryProvider; diff --git a/server/providers/Web3ContextProvider.tsx b/server/providers/Web3ContextProvider.tsx new file mode 100644 index 00000000..0ace3b3a --- /dev/null +++ b/server/providers/Web3ContextProvider.tsx @@ -0,0 +1,24 @@ +import type {Web3Dependencies} from 'lib/types/web3'; +import React, {useState} from 'react'; + +type Props = { + children: React.ReactNode; +}; + +export const Web3Context = React.createContext<{ + web3Deps?: Web3Dependencies; + setWeb3Deps?: (v: Web3Dependencies | undefined) => void; +}>({}); + +const Web3ContextProvider: React.FC = ({children}) => { + const [web3Deps, setWeb3Deps] = useState(); + + const value = { + web3Deps, + setWeb3Deps, + }; + + return {children}; +}; + +export default Web3ContextProvider; diff --git a/server/scripts/i18nSort.js b/server/scripts/i18nSort.js new file mode 100644 index 00000000..a8dbe080 --- /dev/null +++ b/server/scripts/i18nSort.js @@ -0,0 +1,6 @@ +// Ascending sort, case insensitive +module.exports = translations => { + return Object.keys(translations).sort((keyA, keyB) => { + return keyA.localeCompare(keyB, undefined, {sensitivity: 'base'}); + }); +}; diff --git a/server/styles/components/badgePopupModalStyles.ts b/server/styles/components/badgePopupModalStyles.ts new file mode 100644 index 00000000..386d9e7d --- /dev/null +++ b/server/styles/components/badgePopupModalStyles.ts @@ -0,0 +1,235 @@ +import type {Theme} from '@mui/material/styles'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + dialogContainer: { + backgroundColor: 'black', + width: '961px', + display: 'flex', + alignItems: 'flex-start', + padding: '40px', + overflowY: 'unset', + [theme.breakpoints.down('sm')]: { + flexDirection: 'column', + maxHeight: '100%', + maxWidth: '100%', + alignItems: 'center', + }, + }, + modalIcon: { + padding: '24px 80px', + gap: '10px', + width: '360px', + height: '376px', + fontSize: 64, + '& > svg': { + fontSize: 64, + }, + background: ' rgba(255, 255, 255, 0.08)', + borderRadius: '16px', + display: 'flex', + justifyContent: 'center', + flexDirection: 'column', + alignItems: 'center', + [theme.breakpoints.between('sm', 'md')]: { + maxWidth: '300px', + }, + [theme.breakpoints.down('sm')]: { + maxWidth: 'inherit', + }, + }, + modalDescription: { + color: '#fff', + fontWeight: 600, + whiteSpace: 'nowrap', + }, + modalIconWithCircle: { + height: 'auto', + maxWidth: '100%', + border: `1px solid ${theme.palette.neutralShades[200]}`, + borderRadius: '50%', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + margin: theme.spacing(1), + }, + pointer: { + cursor: 'pointer', + }, + hoverHighlight: { + '&:hover': { + color: theme.palette.primaryShades[500], + }, + }, + closeIconSection: { + padding: 0, + [theme.breakpoints.up('sm')]: { + display: 'flex', + justifyContent: 'flex-end', + }, + + [theme.breakpoints.only('xs')]: { + position: 'absolute', + top: '5vw', + left: '80vw', + }, + }, + + closeIcon: { + margin: 0, + color: '#fff', + }, + + closeButton: { + padding: 0, + margin: 0, + }, + modalTitle: { + color: '#fff', + }, + title: { + paddingLeft: 0, + paddingTop: 0, + }, + infoSection: { + display: 'flex', + flexDirection: 'column', + justifyContent: 'flex-start', + [theme.breakpoints.down('sm')]: { + maxWidth: '100%', + padding: '20px', + }, + }, + modalSubTitle: { + fontSize: theme.typography.subtitle1.fontSize, + color: 'rgba(255, 255, 255, 0.72)', + fontWeight: theme.typography.fontWeightRegular, + margin: theme.spacing(2, 0, 2), + textAlign: 'start', + [theme.breakpoints.down('sm')]: { + fontSize: '16px', + }, + }, + holderTitle: { + marginTop: '8px', + marginBottom: '8px', + color: '#fff', + fontWeight: '700', + fontSize: '18px', + lineHeight: '24px', + }, + + modalUsageText: { + display: 'flex', + fontSize: theme.typography.caption.fontSize, + color: theme.palette.neutralShades[600], + fontWeight: theme.typography.fontWeightLight, + textAlign: 'center', + alignItems: 'center', + verticalAlign: 'center', + marginBottom: theme.spacing(2), + }, + modalRankText: { + display: 'flex', + fontSize: theme.typography.caption.fontSize, + color: theme.palette.neutralShades[600], + fontWeight: theme.typography.fontWeightLight, + textAlign: 'center', + alignItems: 'center', + verticalAlign: 'center', + marginBottom: theme.spacing(1), + marginTop: theme.spacing(-1), + }, + remainingHolders: { + marginLeft: theme.spacing(0.5), + fontWeight: '600', + color: '#fff', + }, + descriptionLink: { + fontWeight: 'bold', + color: '#fff', + textDecoration: 'none', + }, + + buttonsSection: { + display: 'flex', + flexDirection: 'row', + justifyContent: 'left', + height: '40px', + }, + learnMoreButton: { + color: '#fff', + borderColor: '#fff', + '&:hover': { + borderColor: '#fff', + }, + marginRight: theme.spacing(1), + }, + iconContainer: { + marginLeft: theme.spacing(-1), + }, + icons: { + color: '#fff', + borderRadius: '50px', + border: '1px solid white', + width: '40px', + height: '40px', + padding: theme.spacing(1), + paddingBottom: theme.spacing(1), + }, + '&.MuiPopover-root': { + width: '275px', + height: '100px', + }, + popOverContainer: { + padding: '8px', + borderRadius: '8px', + display: 'flex', + flexDirection: 'column', + '&:hover': { + textDecoration: 'unset', + color: theme.palette.primary.main, + }, + }, + popOver: { + width: '275px', + padding: '8px', + '&:hover': { + cursor: 'pointer', + }, + }, + + linkIcon: { + marginRight: '14px', + textDecoration: 'unset', + color: '#000', + }, + copyLink: { + display: 'flex', + alignContent: 'center', + marginLeft: '14px', + color: '#000', + fontWeight: '600', + }, + sponsorSection: { + display: 'flex', + flexDirection: 'row', + alignItems: 'center', + }, + sponsor: { + fontSize: '16px', + color: theme.palette.neutralShades[400], + marginRight: '6px', + }, + sponsorInfoIcon: { + color: theme.palette.neutralShades[400], + marginLeft: theme.spacing(1), + }, + sponsorName: { + color: '#fff', + fontWeight: '600', + }, +})); + +export default useStyles; diff --git a/server/styles/components/modal.styles.ts b/server/styles/components/modal.styles.ts new file mode 100644 index 00000000..9a0aaf0a --- /dev/null +++ b/server/styles/components/modal.styles.ts @@ -0,0 +1,52 @@ +import type {Theme} from '@mui/material/styles'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + dialogRoot: { + margin: 0, + [theme.breakpoints.down('sm')]: { + margin: theme.spacing(1), + }, + }, + modalContent: { + backgroundColor: 'rgba(17, 51, 83, 0.02)', + padding: theme.spacing(2), + display: 'flex', + flexDirection: 'column', + minWidth: 420, + [theme.breakpoints.down('sm')]: { + minWidth: 300, + padding: theme.spacing(1.5), + }, + }, + contentContainerNoPadding: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + }, + contentContainer: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + padding: theme.spacing(2), + }, + modalHeader: { + width: '100%', + display: 'flex', + alignItems: 'flex-start', + justifyContent: 'space-between', + }, + modalHeaderPadding: { + paddingLeft: theme.spacing(2), + }, + centerHeader: { + alignItems: 'center !important', + }, + bold: { + fontWeight: 'bold', + textAlign: 'center', + }, +})); +// TODO jss-to-tss-react codemod: usages of this hook outside of this file will not be converted. +export default useStyles; diff --git a/server/styles/pages/domain.styles.ts b/server/styles/pages/domain.styles.ts new file mode 100644 index 00000000..a0640c2b --- /dev/null +++ b/server/styles/pages/domain.styles.ts @@ -0,0 +1,429 @@ +import type {Theme} from '@mui/material/styles'; +import { + PROFILE_PICTURE_SIZE_DESKTOP, + PROFILE_PICTURE_SIZE_MOBILE, +} from 'components/Domain/ProfilePicture'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +export const useStyles = makeStyles()((theme: Theme) => ({ + container: { + background: theme.palette.common.white, + display: 'flex', + flexDirection: 'column', + flex: '1 1 auto', + paddingBottom: theme.spacing(16), + }, + content: { + ...theme.containers.main, + paddingLeft: theme.spacing(2), + paddingRight: theme.spacing(2), + [theme.breakpoints.down('md')]: { + marginTop: 0, + }, + }, + item: { + [theme.breakpoints.down('sm')]: { + paddingTop: theme.spacing(2), + }, + '&:first-of-type': { + paddingRight: theme.spacing(4), + [theme.breakpoints.down('md')]: { + paddingRight: 0, + }, + }, + }, + headWrapper: { + position: 'relative', + backgroundColor: '#192B55', + height: 148, + [theme.breakpoints.up('md')]: { + height: 200, + }, + }, + head: { + ...theme.containers.main, + backgroundColor: 'initial', + position: 'relative', + height: '100%', + zIndex: 101, + [theme.breakpoints.down('md')]: { + marginTop: 0, + }, + }, + headWrapperWithCover: { + backgroundSize: 'cover', + backgroundPosition: 'center', + '&::after': { + content: '""', + position: 'absolute', + top: 0, + left: 0, + width: '100%', + height: '100%', + background: theme.palette.greyShades[900], + opacity: 0.24, + }, + }, + logo: { + position: 'absolute', + left: theme.spacing(4), + top: theme.spacing(1), + zIndex: 102, + [theme.breakpoints.down('sm')]: { + left: theme.spacing(2), + }, + }, + profilePicture: { + display: 'flex', + justifyContent: 'center', + zIndex: 100, + height: PROFILE_PICTURE_SIZE_MOBILE, + [theme.breakpoints.up('sm')]: { + height: PROFILE_PICTURE_SIZE_DESKTOP, + }, + [theme.breakpoints.up('md')]: { + justifyContent: 'flex-start', + }, + }, + leftPanel: { + marginTop: -(PROFILE_PICTURE_SIZE_MOBILE / 2 + 16), + textAlign: 'center', + [theme.breakpoints.up('sm')]: { + marginTop: -(PROFILE_PICTURE_SIZE_MOBILE / 2), + }, + [theme.breakpoints.up('md')]: { + marginTop: -(PROFILE_PICTURE_SIZE_DESKTOP / 2), + textAlign: 'initial', + }, + }, + sectionHeaderContainer: { + display: 'flex', + flexWrap: 'wrap', + justifyContent: 'space-between', + }, + sectionHeader: { + display: 'flex', + alignItems: 'center', + verticalAlign: 'center', + textAlign: 'center', + paddingBottom: theme.spacing(1), + fontWeight: theme.typography.fontWeightBold, + fontSize: theme.typography.h5.fontSize, + margin: theme.spacing(6, 0, 1), + lineHeight: 1.4, + }, + sectionHeaderLinks: { + display: 'flex', + justifyContent: 'right', + verticalAlign: 'center', + fontSize: theme.typography.body2.fontSize, + }, + sectionHeaderLink: { + color: theme.palette.primary.main, + fontSize: theme.typography.body2.fontSize, + lineHeight: 1.5, + fontWeight: theme.typography.fontWeightMedium, + transition: theme.transitions.create('color'), + '&:hover': { + textDecoration: 'none', + color: theme.palette.primary.main, + }, + cursor: 'pointer', + }, + badgeHeader: { + margin: theme.spacing(6, 0, 2), + }, + sectionHeaderLabel: { + padding: theme.spacing(0, 0.75), + fontSize: theme.typography.body2.fontSize, + lineHeight: '1.25rem', + backgroundColor: theme.palette.neutralShades[200], + borderRadius: theme.shape.borderRadius, + marginLeft: theme.spacing(1.5), + }, + copyIconButton: { + width: 32, + height: 32, + }, + copyIcon: { + fontSize: 20, + }, + infoIcon: { + marginLeft: theme.spacing(1), + color: theme.palette.neutralShades[200], + }, + domainName: { + justifyContent: 'center', + fontSize: '1.75rem', + lineHeight: 1.4, + color: theme.palette.primary.main, + }, + domainExtension: { + wordBreak: 'normal', + display: 'inline', + whiteSpace: 'nowrap', + }, + displayName: { + wordBreak: 'break-word', + fontSize: '2rem', + lineHeight: 1.25, + }, + sidebarIcon: { + marginRight: theme.spacing(1.5), + fill: theme.palette.greyShades[900], + }, + riskScoreContainer: { + display: 'flex', + marginTop: theme.spacing(3), + alignItems: 'center', + [theme.breakpoints.down('md')]: { + justifyContent: 'center', + marginLeft: 0, + marginRight: 0, + }, + }, + riskScoreLogo: { + width: '25px', + height: '25px', + marginRight: theme.spacing(1.5), + cursor: 'pointer', + }, + riskScoreIcon: { + width: '15px', + height: '15px', + }, + riskScoreShareIcon: { + width: '18px', + height: '18px', + }, + riskScoreShareButton: { + marginLeft: theme.spacing(0.25), + }, + emailAndLocation: { + fontSize: theme.typography.body1.fontSize, + lineHeight: 1.5, + fontWeight: theme.typography.fontWeightMedium, + marginRight: theme.spacing(1), + }, + verifyButton: { + fontWeight: theme.typography.fontWeightLight, + color: 'red', + }, + websiteLink: { + fontSize: theme.typography.body1.fontSize, + lineHeight: 1.5, + fontWeight: theme.typography.fontWeightMedium, + color: theme.palette.greyShades[900], + transition: theme.transitions.create('color'), + '&:hover': { + textDecoration: 'none', + color: theme.palette.primary.main, + }, + }, + domainNameBox: { + justifyContent: 'center', + alignItems: 'center', + [theme.breakpoints.up('md')]: { + justifyContent: 'initial', + }, + }, + emailAndLocationSecondDivider: { + [theme.breakpoints.up('md')]: { + display: 'none', + }, + }, + loginContainer: { + display: 'flex', + }, + searchContainer: { + display: 'flex', + zIndex: 102, + flexDirection: 'column', + maxWidth: '512px', + width: '100%', + marginRight: '2em', + [theme.breakpoints.down('md')]: { + maxWidth: '20em', + }, + [theme.breakpoints.down('sm')]: { + display: 'none', + }, + }, + topHeaderContainer: { + position: 'absolute', + right: theme.spacing(2), + top: theme.spacing(1), + display: 'flex', + zIndex: 102, + [theme.breakpoints.up('sm')]: { + width: 'calc(100% - 347px)', + }, + justifyContent: 'space-between', + }, + chatContainer: { + marginRight: theme.spacing(0), + }, + menuButtonContainer: { + position: 'absolute', + right: theme.spacing(1), + bottom: theme.spacing(1), + color: theme.palette.common.white, + marginRight: theme.spacing(1), + }, + shareMenu: { + marginRight: theme.spacing(2), + color: theme.palette.common.white, + }, + smallHidden: { + [theme.breakpoints.down('sm')]: {display: 'none'}, + }, + followingContainer: { + display: 'flex', + marginLeft: `-${theme.spacing(1)}`, + [theme.breakpoints.down('md')]: { + justifyContent: 'center', + marginLeft: 0, + }, + }, + followCount: { + color: theme.palette.neutralShades[600], + fontWeight: 600, + fontSize: 16, + }, + description: { + fontSize: theme.typography.body1.fontSize, + lineHeight: 1.5, + }, + empty: { + padding: theme.spacing(15, 0), + textAlign: 'center', + color: theme.palette.neutralShades[600], + fontSize: theme.typography.h5.fontSize, + fontWeight: theme.typography.fontWeightBold, + display: 'flex', + alignItems: 'center', + flexFlow: 'column', + maxWidth: 300, + margin: '0 auto', + }, + emptyIcon: { + marginBottom: theme.spacing(2), + fontSize: 48, + }, + humanityVerifiedLink: { + color: theme.palette.successShades[700], + fontSize: theme.typography.body1.fontSize, + lineHeight: 1.5, + fontWeight: theme.typography.fontWeightMedium, + marginBottom: theme.spacing(2), + display: 'flex', + '&:hover': { + textDecoration: 'none', + }, + [theme.breakpoints.up('md')]: { + justifyContent: 'initial', + }, + }, + humanityVerifiedIcon: { + marginRight: theme.spacing(1.5), + }, + humanityVerifiedTooltipContent: { + textAlign: 'center', + fontSize: theme.typography.caption.fontSize, + maxWidth: 220, + }, + featuredTooltipLink: { + fontSize: 'inherit', + color: theme.palette.greyShades[200], + }, + featuredContentHidden: { + color: theme.palette.greyShades[400], + }, + humanityVerifiedTooltipLink: { + display: 'block', + fontSize: 'inherit', + color: theme.palette.greyShades[200], + transition: theme.transitions.create('color'), + '&:hover': { + textDecoration: 'none', + color: theme.palette.white, + }, + }, + followersPreviewContainer: { + display: 'flex', + width: '100%', + marginTop: theme.spacing(2), + marginBottom: theme.spacing(2), + [theme.breakpoints.down('md')]: { + justifyContent: 'center', + flexDirection: 'row-reverse', + }, + }, + followersPreview: { + display: 'flex', + position: 'relative', + width: '5em', + '& > div': { + position: 'absolute', + }, + '& img': { + border: `2px solid ${theme.palette.neutralShades[200]} !important`, + width: '30px !important', + height: '30px !important', + }, + '& div:nth-of-type(1)': { + zIndex: 103, + }, + '& div:nth-of-type(2)': { + zIndex: 102, + marginLeft: '20px', + }, + '& div:nth-of-type(3)': { + zIndex: 101, + marginLeft: '40px', + }, + }, + followersPreviewTyp: { + color: theme.palette.neutralShades[600], + fontWeight: 400, + fontSize: 14, + maxWidth: 252, + marginRight: theme.spacing(1), + width: '100%', + [theme.breakpoints.down('md')]: { + marginRight: 0, + textAlign: 'initial', + }, + }, + footer: { + ...theme.containers.main, + maxWidth: 1256, + padding: theme.spacing(0, 2.5), + [theme.breakpoints.down('md')]: { + margin: 0, + }, + }, + hidden: { + display: 'none', + }, + disabledPageWrapper: { + width: '100%', + height: '80vh', + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + flexDirection: 'column', + }, + unstoppableLogo: { + fontSize: 64, + marginBottom: theme.spacing(3), + }, + disabledPageDescription: { + fontSize: theme.typography.h6.fontSize, + lineHeight: 1.5, + textAlign: 'center', + fontWeight: theme.typography.fontWeightRegular, + margin: theme.spacing(2, 4, 0), + }, +})); diff --git a/server/styles/pages/settings.styles.ts b/server/styles/pages/settings.styles.ts new file mode 100644 index 00000000..bd77905b --- /dev/null +++ b/server/styles/pages/settings.styles.ts @@ -0,0 +1,127 @@ +import type {Theme} from '@mui/material/styles'; + +import {makeStyles} from '@unstoppabledomains/ui-kit/styles'; + +const useStyles = makeStyles()((theme: Theme) => ({ + container: { + ...theme.containers.main, + marginTop: theme.spacing(3), + marginBottom: theme.spacing(2), + }, + title: { + fontWeight: theme.typography.fontWeightBold, + }, + bold: { + fontWeight: theme.typography.fontWeightBold, + }, + primaryContainer: { + ...theme.containers.panel, + width: '100%', + margin: theme.spacing(4, 0), + padding: theme.spacing(2), + [theme.breakpoints.down('sm')]: { + marginTop: 0, + }, + }, + walletsHeader: { + display: 'flex', + alignItem: 'center', + justifyContent: 'space-between', + marginBottom: theme.spacing(2), + [theme.breakpoints.down('sm')]: { + flexWrap: 'wrap', + }, + }, + linkWalletButton: { + width: 'fit-content', + [theme.breakpoints.down('sm')]: { + marginTop: theme.spacing(1), + width: '100%', + }, + }, + methodsContainer: { + display: 'flex', + height: 192, + alignItems: 'center', + flexDirection: 'column', + justifyContent: 'space-around', + }, + flexColumn: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + flexDirection: 'column', + width: '100%', + }, + backButtonContainer: { + height: 48, + marginTop: theme.spacing(2), + width: '100%', + }, + DivStyle: { + display: 'flex', + justifyContent: 'center', + }, + accessWalletContainer: { + display: 'flex', + flexDirection: 'column', + alignItems: 'center', + justifyContent: 'center', + maxWidth: '30em', + width: '100%', + }, + confirmButtonContainer: { + marginTop: theme.spacing(2), + textAlign: 'center', + }, + fullWidth: { + width: '100%', + maxWidth: '100%', + }, + walletsLoadingContainer: { + height: '7em', + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + }, + marginTop: { + marginTop: '1em', + }, + gridItem: { + minHeight: '19em', + }, + extra: { + marginTop: theme.spacing(2), + }, + // AccessWallet + root: { + ...theme.containers.modalContent, + display: 'flex', + justifyContent: 'center', + }, + column: { + display: 'flex', + justifyContent: 'center', + alignItems: 'center', + flexDirection: 'column', + width: '100%', + }, + prompt: { + overflowWrap: 'break-word', + width: '100%', + margin: '1em', + }, + error: { + marginTop: theme.spacing(2), + overflowWrap: 'break-word', + textAlign: 'center', + fontWeight: theme.typography.fontWeightBold, + }, + ethWalletAddress: { + fontWeight: 'bold', + wordBreak: 'break-word', + }, +})); + +// TODO jss-to-tss-react codemod: usages of this hook outside of this file will not be converted. +export default useStyles; diff --git a/server/tsconfig.json b/server/tsconfig.json new file mode 100644 index 00000000..9de7b28e --- /dev/null +++ b/server/tsconfig.json @@ -0,0 +1,30 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "target": "es2019", + "lib": ["es6", "dom", "es2019"], + "module": "esnext", + "isolatedModules": true, + "skipLibCheck": true, + "jsx": "preserve", + "baseUrl": ".", + "noEmit": true, + "moduleResolution": "node", + "allowSyntheticDefaultImports": true, + "ignoreDeprecations": "5.0", + "rootDirs": ["./", "../packages"] + }, + "paths": { + // After adding paths here, don't forget to sync them with jest.config.js. + "@unstoppabledomains/*": ["../packages/src/*"], + "@unstoppabledomains": ["../packages/src"], + "*": ["*"] + }, + "references": [ + { + "path": "../packages" + } + ], + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules", "**/node_modules"] +} diff --git a/server/yarn.lock b/server/yarn.lock new file mode 100644 index 00000000..68321d49 --- /dev/null +++ b/server/yarn.lock @@ -0,0 +1,13337 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@adraffy/ens-normalize@npm:1.9.4": + version: 1.9.4 + resolution: "@adraffy/ens-normalize@npm:1.9.4" + checksum: 7d7fff58ebe2c4961f7e5e61dad123aa6a63fec0df5c84af1fa41079dc05d398599690be4427b3a94d2baa94084544bcfdf2d51cbed7504b9b0583b0960ad550 + languageName: node + linkType: hard + +"@ambire/signature-validator@npm:^1.3.1": + version: 1.3.1 + resolution: "@ambire/signature-validator@npm:1.3.1" + dependencies: + ethers: ^5.6.5 + tap-spec: ^5.0.0 + tape: ^5.5.3 + checksum: 44c4796f4cbb4624cfd64033523d3491afa899067026e9615322dc6efaca71b16358cbc1661f2fce62d9dedcf424c92d44fe3b2ab8c6f171a59c0c21dc17b2e2 + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.1 + resolution: "@ampproject/remapping@npm:2.2.1" + dependencies: + "@jridgewell/gen-mapping": ^0.3.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 03c04fd526acc64a1f4df22651186f3e5ef0a9d6d6530ce4482ec9841269cf7a11dbb8af79237c282d721c5312024ff17529cd72cc4768c11e999b58e2302079 + languageName: node + linkType: hard + +"@assemblyscript/loader@npm:^0.9.4": + version: 0.9.4 + resolution: "@assemblyscript/loader@npm:0.9.4" + checksum: 2af3d1eec181c1817e3fb95b8d900cf1e7f19933a02315569d3d4f2f3d6514673acb784b2a1a8a148436fb8a983b580bfb993c1d520c55a8fd84678b200b2ec6 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13": + version: 7.22.13 + resolution: "@babel/code-frame@npm:7.22.13" + dependencies: + "@babel/highlight": ^7.22.13 + chalk: ^2.4.2 + checksum: 22e342c8077c8b77eeb11f554ecca2ba14153f707b85294fcf6070b6f6150aae88a7b7436dd88d8c9289970585f3fe5b9b941c5aa3aa26a6d5a8ef3f292da058 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/compat-data@npm:7.22.20" + checksum: efedd1d18878c10fde95e4d82b1236a9aba41395ef798cbb651f58dbf5632dbff475736c507b8d13d4c8f44809d41c0eb2ef0d694283af9ba5dd8339b6dab451 + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": + version: 7.23.0 + resolution: "@babel/core@npm:7.23.0" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helpers": ^7.23.0 + "@babel/parser": ^7.23.0 + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: cebd9b48dbc970a7548522f207f245c69567e5ea17ebb1a4e4de563823cf20a01177fe8d2fe19b6e1461361f92fa169fd0b29f8ee9d44eeec84842be1feee5f2 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2": + version: 7.23.0 + resolution: "@babel/generator@npm:7.23.0" + dependencies: + "@babel/types": ^7.23.0 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: 8efe24adad34300f1f8ea2add420b28171a646edc70f2a1b3e1683842f23b8b7ffa7e35ef0119294e1901f45bfea5b3dc70abe1f10a1917ccdfb41bed69be5f1 + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-compilation-targets@npm:7.22.15" + dependencies: + "@babel/compat-data": ^7.22.9 + "@babel/helper-validator-option": ^7.22.15 + browserslist: ^4.21.9 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: ce85196769e091ae54dd39e4a80c2a9df1793da8588e335c383d536d54f06baf648d0a08fc873044f226398c4ded15c4ae9120ee18e7dfd7c639a68e3cdc9980 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" + dependencies: + "@babel/template": ^7.22.15 + "@babel/types": ^7.23.0 + checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/helper-module-imports@npm:7.22.15" + dependencies: + "@babel/types": ^7.22.15 + checksum: ecd7e457df0a46f889228f943ef9b4a47d485d82e030676767e6a2fdcbdaa63594d8124d4b55fd160b41c201025aec01fc27580352b1c87a37c9c6f33d116702 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-module-transforms@npm:7.23.0" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-validator-identifier": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 6e2afffb058cf3f8ce92f5116f710dda4341c81cfcd872f9a0197ea594f7ce0ab3cb940b0590af2fe99e60d2e5448bfba6bca8156ed70a2ed4be2adc8586c891 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.22.5 + resolution: "@babel/helper-plugin-utils@npm:7.22.5" + checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" + dependencies: + "@babel/types": ^7.22.5 + checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-validator-option@npm:7.22.15" + checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.23.0": + version: 7.23.1 + resolution: "@babel/helpers@npm:7.23.1" + dependencies: + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 + checksum: acfc345102045c24ea2a4d60e00dcf8220e215af3add4520e2167700661338e6a80bd56baf44bb764af05ec6621101c9afc315dc107e18c61fa6da8acbdbb893 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.22.13": + version: 7.22.20 + resolution: "@babel/highlight@npm:7.22.20" + dependencies: + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + checksum: 84bd034dca309a5e680083cd827a766780ca63cef37308404f17653d32366ea76262bd2364b2d38776232f2d01b649f26721417d507e8b4b6da3e4e739f6d134 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/parser@npm:7.23.0" + bin: + parser: ./bin/babel-parser.js + checksum: 453fdf8b9e2c2b7d7b02139e0ce003d1af21947bbc03eb350fb248ee335c9b85e4ab41697ddbdd97079698de825a265e45a0846bb2ed47a2c7c1df833f42a354 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.8.3": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.22.5, @babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.23.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.23.2 + resolution: "@babel/runtime@npm:7.23.2" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 6c4df4839ec75ca10175f636d6362f91df8a3137f86b38f6cd3a4c90668a0fe8e9281d320958f4fbd43b394988958585a17c3aab2a4ea6bf7316b22916a371fb + languageName: node + linkType: hard + +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/parser": ^7.22.15 + "@babel/types": ^7.22.15 + checksum: 1f3e7dcd6c44f5904c184b3f7fe280394b191f2fed819919ffa1e529c259d5b197da8981b6ca491c235aee8dbad4a50b7e31304aa531271cb823a4a24a0dd8fd + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/traverse@npm:7.23.0" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.23.0 + "@babel/types": ^7.23.0 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 0b17fae53269e1af2cd3edba00892bc2975ad5df9eea7b84815dab07dfec2928c451066d51bc65b4be61d8499e77db7e547ce69ef2a7b0eca3f96269cb43a0b0 + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.4.5": + version: 7.23.2 + resolution: "@babel/traverse@npm:7.23.2" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.23.0 + "@babel/types": ^7.23.0 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 26a1eea0dde41ab99dde8b9773a013a0dc50324e5110a049f5d634e721ff08afffd54940b3974a20308d7952085ac769689369e9127dea655f868c0f6e1ab35d + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": + version: 7.23.0 + resolution: "@babel/types@npm:7.23.0" + dependencies: + "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 + to-fast-properties: ^2.0.0 + checksum: 215fe04bd7feef79eeb4d33374b39909ce9cad1611c4135a4f7fdf41fe3280594105af6d7094354751514625ea92d0875aba355f53e86a92600f290e77b0e604 + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 + languageName: node + linkType: hard + +"@braintree/sanitize-url@npm:^6.0.4": + version: 6.0.4 + resolution: "@braintree/sanitize-url@npm:6.0.4" + checksum: f5ec6048973722ea1c46ae555d2e9eb848d7fa258994f8ea7d6db9514ee754ea3ef344ef71b3696d486776bcb839f3124e79f67c6b5b2814ed2da220b340627c + languageName: node + linkType: hard + +"@coinbase/wallet-sdk@npm:^3.6.6": + version: 3.7.2 + resolution: "@coinbase/wallet-sdk@npm:3.7.2" + dependencies: + "@metamask/safe-event-emitter": 2.0.0 + "@solana/web3.js": ^1.70.1 + bind-decorator: ^1.0.11 + bn.js: ^5.1.1 + buffer: ^6.0.3 + clsx: ^1.1.0 + eth-block-tracker: 6.1.0 + eth-json-rpc-filters: 5.1.0 + eth-rpc-errors: 4.0.2 + json-rpc-engine: 6.1.0 + keccak: ^3.0.1 + preact: ^10.5.9 + qs: ^6.10.3 + rxjs: ^6.6.3 + sha.js: ^2.4.11 + stream-browserify: ^3.0.0 + util: ^0.12.4 + checksum: d42a7b7e443942f657f636eede671979024308c6713af68f774309c04c0e1974cdbfe83514adebf4c0bcdb84adce6a026e5a92b5cff35e08eb1fb0772b1ec7e5 + languageName: node + linkType: hard + +"@emotion/babel-plugin@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/babel-plugin@npm:11.11.0" + dependencies: + "@babel/helper-module-imports": ^7.16.7 + "@babel/runtime": ^7.18.3 + "@emotion/hash": ^0.9.1 + "@emotion/memoize": ^0.8.1 + "@emotion/serialize": ^1.1.2 + babel-plugin-macros: ^3.1.0 + convert-source-map: ^1.5.0 + escape-string-regexp: ^4.0.0 + find-root: ^1.1.0 + source-map: ^0.5.7 + stylis: 4.2.0 + checksum: 6b363edccc10290f7a23242c06f88e451b5feb2ab94152b18bb8883033db5934fb0e421e2d67d09907c13837c21218a3ac28c51707778a54d6cd3706c0c2f3f9 + languageName: node + linkType: hard + +"@emotion/cache@npm:*, @emotion/cache@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/cache@npm:11.11.0" + dependencies: + "@emotion/memoize": ^0.8.1 + "@emotion/sheet": ^1.2.2 + "@emotion/utils": ^1.2.1 + "@emotion/weak-memoize": ^0.3.1 + stylis: 4.2.0 + checksum: 8eb1dc22beaa20c21a2e04c284d5a2630a018a9d51fb190e52de348c8d27f4e8ca4bbab003d68b4f6cd9cc1c569ca747a997797e0f76d6c734a660dc29decf08 + languageName: node + linkType: hard + +"@emotion/hash@npm:^0.9.1": + version: 0.9.1 + resolution: "@emotion/hash@npm:0.9.1" + checksum: 716e17e48bf9047bf9383982c071de49f2615310fb4e986738931776f5a823bc1f29c84501abe0d3df91a3803c80122d24e28b57351bca9e01356ebb33d89876 + languageName: node + linkType: hard + +"@emotion/is-prop-valid@npm:^1.1.0, @emotion/is-prop-valid@npm:^1.2.1": + version: 1.2.1 + resolution: "@emotion/is-prop-valid@npm:1.2.1" + dependencies: + "@emotion/memoize": ^0.8.1 + checksum: 8f42dc573a3fad79b021479becb639b8fe3b60bdd1081a775d32388bca418ee53074c7602a4c845c5f75fa6831eb1cbdc4d208cc0299f57014ed3a02abcad16a + languageName: node + linkType: hard + +"@emotion/memoize@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/memoize@npm:0.8.1" + checksum: a19cc01a29fcc97514948eaab4dc34d8272e934466ed87c07f157887406bc318000c69ae6f813a9001c6a225364df04249842a50e692ef7a9873335fbcc141b0 + languageName: node + linkType: hard + +"@emotion/react@npm:^11.0.0, @emotion/react@npm:^11.11.1": + version: 11.11.1 + resolution: "@emotion/react@npm:11.11.1" + dependencies: + "@babel/runtime": ^7.18.3 + "@emotion/babel-plugin": ^11.11.0 + "@emotion/cache": ^11.11.0 + "@emotion/serialize": ^1.1.2 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 + "@emotion/utils": ^1.2.1 + "@emotion/weak-memoize": ^0.3.1 + hoist-non-react-statics: ^3.3.1 + peerDependencies: + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: aec3c36650f5f0d3d4445ff44d73dd88712b1609645b6af3e6d08049cfbc51f1785fe13dea1a1d4ab1b0800d68f2339ab11e459687180362b1ef98863155aae5 + languageName: node + linkType: hard + +"@emotion/serialize@npm:*, @emotion/serialize@npm:^1.1.2": + version: 1.1.2 + resolution: "@emotion/serialize@npm:1.1.2" + dependencies: + "@emotion/hash": ^0.9.1 + "@emotion/memoize": ^0.8.1 + "@emotion/unitless": ^0.8.1 + "@emotion/utils": ^1.2.1 + csstype: ^3.0.2 + checksum: 413c352e657f1b5e27ea6437b3ef7dcc3860669b7ae17fd5c18bfbd44e033af1acc56b64d252284a813ca4f3b3e1b0841c42d3fb08e02d2df56fd3cd63d72986 + languageName: node + linkType: hard + +"@emotion/server@npm:^11.4.0": + version: 11.11.0 + resolution: "@emotion/server@npm:11.11.0" + dependencies: + "@emotion/utils": ^1.2.1 + html-tokenize: ^2.0.0 + multipipe: ^1.0.2 + through: ^2.3.8 + peerDependencies: + "@emotion/css": ^11.0.0-rc.0 + peerDependenciesMeta: + "@emotion/css": + optional: true + checksum: 2130b51390a6ba4375ec3223c9e4fb476ba30973910ec5196a048d1f832ba2ad23e51eee261058fbd7c3c78938fc3d83b01c3a951e8b6fa83d40f2ac4047c317 + languageName: node + linkType: hard + +"@emotion/sheet@npm:^1.2.2": + version: 1.2.2 + resolution: "@emotion/sheet@npm:1.2.2" + checksum: d973273c9c15f1c291ca2269728bf044bd3e92a67bca87943fa9ec6c3cd2b034f9a6bfe95ef1b5d983351d128c75b547b43ff196a00a3875f7e1d269793cecfe + languageName: node + linkType: hard + +"@emotion/styled@npm:^11.0.0, @emotion/styled@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/styled@npm:11.11.0" + dependencies: + "@babel/runtime": ^7.18.3 + "@emotion/babel-plugin": ^11.11.0 + "@emotion/is-prop-valid": ^1.2.1 + "@emotion/serialize": ^1.1.2 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 + "@emotion/utils": ^1.2.1 + peerDependencies: + "@emotion/react": ^11.0.0-rc.0 + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 904f641aad3892c65d7d6c0808b036dae1e6d6dad4861c1c7dc0baa59977047c6cad220691206eba7b4059f1a1c6e6c1ef4ebb8c829089e280fa0f2164a01e6b + languageName: node + linkType: hard + +"@emotion/stylis@npm:^0.8.4": + version: 0.8.5 + resolution: "@emotion/stylis@npm:0.8.5" + checksum: 67ff5958449b2374b329fb96e83cb9025775ffe1e79153b499537c6c8b2eb64b77f32d7b5d004d646973662356ceb646afd9269001b97c54439fceea3203ce65 + languageName: node + linkType: hard + +"@emotion/unitless@npm:^0.7.4": + version: 0.7.5 + resolution: "@emotion/unitless@npm:0.7.5" + checksum: f976e5345b53fae9414a7b2e7a949aa6b52f8bdbcc84458b1ddc0729e77ba1d1dfdff9960e0da60183877873d3a631fa24d9695dd714ed94bcd3ba5196586a6b + languageName: node + linkType: hard + +"@emotion/unitless@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/unitless@npm:0.8.1" + checksum: 385e21d184d27853bb350999471f00e1429fa4e83182f46cd2c164985999d9b46d558dc8b9cc89975cb337831ce50c31ac2f33b15502e85c299892e67e7b4a88 + languageName: node + linkType: hard + +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1": + version: 1.0.1 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" + peerDependencies: + react: ">=16.8.0" + checksum: 700b6e5bbb37a9231f203bb3af11295eed01d73b2293abece0bc2a2237015e944d7b5114d4887ad9a79776504aa51ed2a8b0ddbc117c54495dd01a6b22f93786 + languageName: node + linkType: hard + +"@emotion/utils@npm:*, @emotion/utils@npm:^1.2.1": + version: 1.2.1 + resolution: "@emotion/utils@npm:1.2.1" + checksum: e0b44be0705b56b079c55faff93952150be69e79b660ae70ddd5b6e09fc40eb1319654315a9f34bb479d7f4ec94be6068c061abbb9e18b9778ae180ad5d97c73 + languageName: node + linkType: hard + +"@emotion/weak-memoize@npm:^0.3.1": + version: 0.3.1 + resolution: "@emotion/weak-memoize@npm:0.3.1" + checksum: b2be47caa24a8122622ea18cd2d650dbb4f8ad37b636dc41ed420c2e082f7f1e564ecdea68122b546df7f305b159bf5ab9ffee872abd0f052e687428459af594 + languageName: node + linkType: hard + +"@ethereumjs/rlp@npm:^4.0.1": + version: 4.0.1 + resolution: "@ethereumjs/rlp@npm:4.0.1" + bin: + rlp: bin/rlp + checksum: 30db19c78faa2b6ff27275ab767646929207bb207f903f09eb3e4c273ce2738b45f3c82169ddacd67468b4f063d8d96035f2bf36f02b6b7e4d928eefe2e3ecbc + languageName: node + linkType: hard + +"@ethereumjs/util@npm:^8.0.6": + version: 8.1.0 + resolution: "@ethereumjs/util@npm:8.1.0" + dependencies: + "@ethereumjs/rlp": ^4.0.1 + ethereum-cryptography: ^2.0.0 + micro-ftch: ^0.3.1 + checksum: 9ae5dee8f12b0faf81cd83f06a41560e79b0ba96a48262771d897a510ecae605eb6d84f687da001ab8ccffd50f612ae50f988ef76e6312c752897f462f3ac08d + languageName: node + linkType: hard + +"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.1, @ethersproject/abi@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abi@npm:5.7.0" + dependencies: + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: bc6962bb6cb854e4d2a4d65b2c49c716477675b131b1363312234bdbb7e19badb7d9ce66f4ca2a70ae2ea84f7123dbc4e300a1bfe5d58864a7eafabc1466627e + languageName: node + linkType: hard + +"@ethersproject/abstract-provider@npm:5.7.0, @ethersproject/abstract-provider@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-provider@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/networks": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/web": ^5.7.0 + checksum: 74cf4696245cf03bb7cc5b6cbf7b4b89dd9a79a1c4688126d214153a938126d4972d42c93182198653ce1de35f2a2cad68be40337d4774b3698a39b28f0228a8 + languageName: node + linkType: hard + +"@ethersproject/abstract-signer@npm:5.7.0, @ethersproject/abstract-signer@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-signer@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + checksum: a823dac9cfb761e009851050ebebd5b229d1b1cc4a75b125c2da130ff37e8218208f7f9d1386f77407705b889b23d4a230ad67185f8872f083143e0073cbfbe3 + languageName: node + linkType: hard + +"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5, @ethersproject/address@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/address@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + checksum: 64ea5ebea9cc0e845c413e6cb1e54e157dd9fc0dffb98e239d3a3efc8177f2ff798cd4e3206cf3660ee8faeb7bef1a47dc0ebef0d7b132c32e61e550c7d4c843 + languageName: node + linkType: hard + +"@ethersproject/base64@npm:5.7.0, @ethersproject/base64@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/base64@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + checksum: 7dd5d734d623582f08f665434f53685041a3d3b334a0e96c0c8afa8bbcaab934d50e5b6b980e826a8fde8d353e0b18f11e61faf17468177274b8e7c69cd9742b + languageName: node + linkType: hard + +"@ethersproject/basex@npm:5.7.0, @ethersproject/basex@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/basex@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + checksum: 326087b7e1f3787b5fe6cd1cf2b4b5abfafbc355a45e88e22e5e9d6c845b613ffc5301d629b28d5c4d5e2bfe9ec424e6782c804956dff79be05f0098cb5817de + languageName: node + linkType: hard + +"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bignumber@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + bn.js: ^5.2.1 + checksum: 8c9a134b76f3feb4ec26a5a27379efb4e156b8fb2de0678a67788a91c7f4e30abe9d948638458e4b20f2e42380da0adacc7c9389d05fce070692edc6ae9b4904 + languageName: node + linkType: hard + +"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bytes@npm:5.7.0" + dependencies: + "@ethersproject/logger": ^5.7.0 + checksum: 66ad365ceaab5da1b23b72225c71dce472cf37737af5118181fa8ab7447d696bea15ca22e3a0e8836fdd8cfac161afe321a7c67d0dde96f9f645ddd759676621 + languageName: node + linkType: hard + +"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/constants@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + checksum: 6d4b1355747cce837b3e76ec3bde70e4732736f23b04f196f706ebfa5d4d9c2be50904a390d4d40ce77803b98d03d16a9b6898418e04ba63491933ce08c4ba8a + languageName: node + linkType: hard + +"@ethersproject/contracts@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/contracts@npm:5.7.0" + dependencies: + "@ethersproject/abi": ^5.7.0 + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + checksum: 6ccf1121cba01b31e02f8c507cb971ab6bfed85706484a9ec09878ef1594a62215f43c4fdef8f4a4875b99c4a800bc95e3be69b1803f8ce479e07634b5a740c0 + languageName: node + linkType: hard + +"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hash@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 6e9fa8d14eb08171cd32f17f98cc108ec2aeca74a427655f0d689c550fee0b22a83b3b400fad7fb3f41cf14d4111f87f170aa7905bcbcd1173a55f21b06262ef + languageName: node + linkType: hard + +"@ethersproject/hdnode@npm:5.7.0, @ethersproject/hdnode@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hdnode@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/basex": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/pbkdf2": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wordlists": ^5.7.0 + checksum: bfe5ca2d89a42de73655f853170ef4766b933c5f481cddad709b3aca18823275b096e572f92d1602a052f80b426edde44ad6b9d028799775a7dad4a5bbed2133 + languageName: node + linkType: hard + +"@ethersproject/json-wallets@npm:5.7.0, @ethersproject/json-wallets@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/json-wallets@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hdnode": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/pbkdf2": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + checksum: f583458d22db62efaaf94d38dd243482776a45bf90f9f3882fbad5aa0b8fd288b41eb7c1ff8ec0b99c9b751088e43d6173530db64dd33c59f9d8daa8d7ad5aa2 + languageName: node + linkType: hard + +"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/keccak256@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + js-sha3: 0.8.0 + checksum: ff70950d82203aab29ccda2553422cbac2e7a0c15c986bd20a69b13606ed8bb6e4fdd7b67b8d3b27d4f841e8222cbaccd33ed34be29f866fec7308f96ed244c6 + languageName: node + linkType: hard + +"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/logger@npm:5.7.0" + checksum: 075ab2f605f1fd0813f2e39c3308f77b44a67732b36e712d9bc085f22a84aac4da4f71b39bee50fe78da3e1c812673fadc41180c9970fe5e486e91ea17befe0d + languageName: node + linkType: hard + +"@ethersproject/networks@npm:5.7.1, @ethersproject/networks@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/networks@npm:5.7.1" + dependencies: + "@ethersproject/logger": ^5.7.0 + checksum: 0339f312304c17d9a0adce550edb825d4d2c8c9468c1634c44172c67a9ed256f594da62c4cda5c3837a0f28b7fabc03aca9b492f68ff1fdad337ee861b27bd5d + languageName: node + linkType: hard + +"@ethersproject/pbkdf2@npm:5.7.0, @ethersproject/pbkdf2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/pbkdf2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + checksum: b895adb9e35a8a127e794f7aadc31a2424ef355a70e51cde10d457e3e888bb8102373199a540cf61f2d6b9a32e47358f9c65b47d559f42bf8e596b5fd67901e9 + languageName: node + linkType: hard + +"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/properties@npm:5.7.0" + dependencies: + "@ethersproject/logger": ^5.7.0 + checksum: 6ab0ccf0c3aadc9221e0cdc5306ce6cd0df7f89f77d77bccdd1277182c9ead0202cd7521329ba3acde130820bf8af299e17cf567d0d497c736ee918207bbf59f + languageName: node + linkType: hard + +"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5": + version: 5.7.2 + resolution: "@ethersproject/providers@npm:5.7.2" + dependencies: + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/basex": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/networks": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/web": ^5.7.0 + bech32: 1.1.4 + ws: 7.4.6 + checksum: 1754c731a5ca6782ae9677f4a9cd8b6246c4ef21a966c9a01b133750f3c578431ec43ec254e699969c4a0f87e84463ded50f96b415600aabd37d2056aee58c19 + languageName: node + linkType: hard + +"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/random@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 017829c91cff6c76470852855108115b0b52c611b6be817ed1948d56ba42d6677803ec2012aa5ae298a7660024156a64c11fcf544e235e239ab3f89f0fff7345 + languageName: node + linkType: hard + +"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/rlp@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: bce165b0f7e68e4d091c9d3cf47b247cac33252df77a095ca4281d32d5eeaaa3695d9bc06b2b057c5015353a68df89f13a4a54a72e888e4beeabbe56b15dda6e + languageName: node + linkType: hard + +"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/sha2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + hash.js: 1.1.7 + checksum: 09321057c022effbff4cc2d9b9558228690b5dd916329d75c4b1ffe32ba3d24b480a367a7cc92d0f0c0b1c896814d03351ae4630e2f1f7160be2bcfbde435dbc + languageName: node + linkType: hard + +"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/signing-key@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + bn.js: ^5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + checksum: 8f8de09b0aac709683bbb49339bc0a4cd2f95598f3546436c65d6f3c3a847ffa98e06d35e9ed2b17d8030bd2f02db9b7bd2e11c5cf8a71aad4537487ab4cf03a + languageName: node + linkType: hard + +"@ethersproject/solidity@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/solidity@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 9a02f37f801c96068c3e7721f83719d060175bc4e80439fe060e92bd7acfcb6ac1330c7e71c49f4c2535ca1308f2acdcb01e00133129aac00581724c2d6293f3 + languageName: node + linkType: hard + +"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/strings@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 5ff78693ae3fdf3cf23e1f6dc047a61e44c8197d2408c42719fef8cb7b7b3613a4eec88ac0ed1f9f5558c74fe0de7ae3195a29ca91a239c74b9f444d8e8b50df + languageName: node + linkType: hard + +"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/transactions@npm:5.7.0" + dependencies: + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + checksum: a31b71996d2b283f68486241bff0d3ea3f1ba0e8f1322a8fffc239ccc4f4a7eb2ea9994b8fd2f093283fd75f87bae68171e01b6265261f821369aca319884a79 + languageName: node + linkType: hard + +"@ethersproject/units@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/units@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 304714f848cd32e57df31bf545f7ad35c2a72adae957198b28cbc62166daa929322a07bff6e9c9ac4577ab6aa0de0546b065ed1b2d20b19e25748b7d475cb0fc + languageName: node + linkType: hard + +"@ethersproject/wallet@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wallet@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/hdnode": ^5.7.0 + "@ethersproject/json-wallets": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wordlists": ^5.7.0 + checksum: a4009bf7331eddab38e3015b5e9101ef92de7f705b00a6196b997db0e5635b6d83561674d46c90c6f77b87c0500fe4a6b0183ba13749efc22db59c99deb82fbd + languageName: node + linkType: hard + +"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/web@npm:5.7.1" + dependencies: + "@ethersproject/base64": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 7028c47103f82fd2e2c197ce0eecfacaa9180ffeec7de7845b1f4f9b19d84081b7a48227aaddde05a4aaa526af574a9a0ce01cc0fc75e3e371f84b38b5b16b2b + languageName: node + linkType: hard + +"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wordlists@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 30eb6eb0731f9ef5faa44bf9c0c6e950bcaaef61e4d2d9ce0ae6d341f4e2d6d1f4ab4f8880bfce03b7aac4b862fb740e1421170cfbf8e2aafc359277d49e6e97 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.0.0 + resolution: "@fastify/busboy@npm:2.0.0" + checksum: 41879937ce1dee6421ef9cd4da53239830617e1f0bb7a0e843940772cd72827205d05e518af6adabe6e1ea19301285fff432b9d11bad01a531e698bea95c781b + languageName: node + linkType: hard + +"@floating-ui/core@npm:^1.4.2": + version: 1.5.0 + resolution: "@floating-ui/core@npm:1.5.0" + dependencies: + "@floating-ui/utils": ^0.1.3 + checksum: 54b4fe26b3c228746ac5589f97303abf158b80aa5f8b99027259decd68d1c2030c4c637648ebd33dfe78a4212699453bc2bd7537fd5a594d3bd3e63d362f666f + languageName: node + linkType: hard + +"@floating-ui/dom@npm:^1.5.1": + version: 1.5.3 + resolution: "@floating-ui/dom@npm:1.5.3" + dependencies: + "@floating-ui/core": ^1.4.2 + "@floating-ui/utils": ^0.1.3 + checksum: 00053742064aac70957f0bd5c1542caafb3bfe9716588bfe1d409fef72a67ed5e60450d08eb492a77f78c22ed1ce4f7955873cc72bf9f9caf2b0f43ae3561c21 + languageName: node + linkType: hard + +"@floating-ui/react-dom@npm:^2.0.0, @floating-ui/react-dom@npm:^2.0.2": + version: 2.0.2 + resolution: "@floating-ui/react-dom@npm:2.0.2" + dependencies: + "@floating-ui/dom": ^1.5.1 + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: 4797e1f7a19c1e531ed0d578ccdcbe58970743e5a480ba30424857fc953063f36d481f8c5d69248a8f1d521b739e94bf5e1ffb35506400dea3d914f166ed2f7f + languageName: node + linkType: hard + +"@floating-ui/utils@npm:^0.1.3": + version: 0.1.6 + resolution: "@floating-ui/utils@npm:0.1.6" + checksum: b34d4b5470869727f52e312e08272edef985ba5a450a76de0917ba0a9c6f5df2bdbeb99448e2c60f39b177fb8981c772ff1831424e75123471a27ebd5b52c1eb + languageName: node + linkType: hard + +"@formatjs/ecma402-abstract@npm:1.4.0": + version: 1.4.0 + resolution: "@formatjs/ecma402-abstract@npm:1.4.0" + dependencies: + tslib: ^2.0.1 + checksum: b5fad8934cacbaa8cdfa071d124b5320358ff173d0b47607fca9d2945a5fa81f7cfaa037d463662b17b471160c5677c77728ab2b71789e81c8fa0e6f2aaeca58 + languageName: node + linkType: hard + +"@formatjs/intl-numberformat@npm:^5.5.2": + version: 5.7.6 + resolution: "@formatjs/intl-numberformat@npm:5.7.6" + dependencies: + "@formatjs/ecma402-abstract": 1.4.0 + tslib: ^2.0.1 + checksum: 00f2b30ef196bb253c3cb396c3e43f22ae78cd27cd2f0b8d1efbbe75aa7d7dbf540e31808517c79595d50d648b105a6f2e022fd30983a4fee7c86e9b3b028396 + languageName: node + linkType: hard + +"@hapi/hoek@npm:^9.0.0": + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 + languageName: node + linkType: hard + +"@hapi/topo@npm:^5.0.0": + version: 5.1.0 + resolution: "@hapi/topo@npm:5.1.0" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014 + languageName: node + linkType: hard + +"@ipld/car@npm:^3.0.1, @ipld/car@npm:^3.1.4, @ipld/car@npm:^3.2.3": + version: 3.2.4 + resolution: "@ipld/car@npm:3.2.4" + dependencies: + "@ipld/dag-cbor": ^7.0.0 + multiformats: ^9.5.4 + varint: ^6.0.0 + checksum: f47ccf4c0bc21f7887eaafb58d6d9200b44bc0a3b847a452df5c5d1c07b79f3ea4e3aead7f7fca793cb5fea81e287d464c93bba9dd7e451e9f6ce692290b61b6 + languageName: node + linkType: hard + +"@ipld/dag-cbor@npm:^6.0.3": + version: 6.0.15 + resolution: "@ipld/dag-cbor@npm:6.0.15" + dependencies: + cborg: ^1.5.4 + multiformats: ^9.5.4 + checksum: c4ac8d7d271b9dd093c43495b1f24c3cdb7f10487aac529c2010c53a3320439ac9b17f53f02177e022735a1aae3d921f359c7020f765b72f94799ec3ff8e7207 + languageName: node + linkType: hard + +"@ipld/dag-cbor@npm:^7.0.0, @ipld/dag-cbor@npm:^7.0.2": + version: 7.0.3 + resolution: "@ipld/dag-cbor@npm:7.0.3" + dependencies: + cborg: ^1.6.0 + multiformats: ^9.5.4 + checksum: c0c59907ab6146a214c1ecb2341cc02904bc952255e15544554990690f7841380a87636d5937aaa23e9004b1c141e90238277d088ed6932b5b0e6d2e6ee1fe02 + languageName: node + linkType: hard + +"@ipld/dag-pb@npm:^2.0.2": + version: 2.1.18 + resolution: "@ipld/dag-pb@npm:2.1.18" + dependencies: + multiformats: ^9.5.4 + checksum: 46b9a7dabf6e87698fc268f88d94b710ba3988e26ab7918bcdf10c4356e15eb32393b6ab56eaf0d8936b369cb77456e491495f1025f78b099f1bd26cc5ccda06 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + dependencies: + camelcase: ^5.3.1 + find-up: ^4.1.0 + get-package-type: ^0.1.0 + js-yaml: ^3.13.1 + resolve-from: ^5.0.0 + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + +"@jedmao/redux-mock-store@npm:^3.0.5": + version: 3.0.5 + resolution: "@jedmao/redux-mock-store@npm:3.0.5" + peerDependencies: + redux: ^4 + checksum: 5146480ca8088fb7623af45a4d2a8f330b159da86fdc4f2c2be03654ac4ee77c6b3f7b4a8af947c638794d9ad785f2714e5af9c3a79c363e1b6cf096f21bdfd7 + languageName: node + linkType: hard + +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + slash: ^3.0.0 + checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 + languageName: node + linkType: hard + +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/reporters": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + ci-info: ^3.2.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-changed-files: ^29.7.0 + jest-config: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-resolve-dependencies: ^29.7.0 + jest-runner: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + jest-watcher: ^29.7.0 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d + languageName: node + linkType: hard + +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: ^29.6.3 + checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed + languageName: node + linkType: hard + +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" + dependencies: + expect: ^29.7.0 + jest-snapshot: ^29.7.0 + checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 + languageName: node + linkType: hard + +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/types": ^29.6.3 + jest-mock: ^29.7.0 + checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + "@types/node": "*" + chalk: ^4.0.0 + collect-v8-coverage: ^1.0.0 + exit: ^0.1.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + istanbul-lib-coverage: ^3.0.0 + istanbul-lib-instrument: ^6.0.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" + dependencies: + "@jridgewell/trace-mapping": ^0.3.18 + callsites: ^3.0.0 + graceful-fs: ^4.2.9 + checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" + dependencies: + "@jest/test-result": ^29.7.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + slash: ^3.0.0 + checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd + languageName: node + linkType: hard + +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 4a74944bd31f22354fc01c3da32e83c19e519e3bbadafa114f6da4522ea77dd0c2842607e923a591d60a76699d819a2fbb6f3552e277efdb9b58b081390b60ab + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.19 + resolution: "@jridgewell/trace-mapping@npm:0.3.19" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 956a6f0f6fec060fb48c6bf1f5ec2064e13cd38c8be3873877d4b92b4a27ba58289a34071752671262a3e3c202abcc3fa2aac64d8447b4b0fa1ba3c9047f1c20 + languageName: node + linkType: hard + +"@ledgerhq/connect-kit-loader@npm:^1.1.0": + version: 1.1.2 + resolution: "@ledgerhq/connect-kit-loader@npm:1.1.2" + checksum: 614fdd9ac2363da60af667adcfe4721f863d8ea06ee45a08192a162c28e806dc07491bee4833d14def74de673eac1f1450eaf67e783c8c28da4e0cd095b4474a + languageName: node + linkType: hard + +"@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0": + version: 1.1.2 + resolution: "@lit-labs/ssr-dom-shim@npm:1.1.2" + checksum: 73fd787893851d4ec4aaa5c775405ed2aae4ca0891b2dd3c973b32c2f4bf70ada5481dd0224e52b786d037aa8a00052186ad1623c44551affd66f6409cca8da6 + languageName: node + linkType: hard + +"@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0": + version: 1.6.3 + resolution: "@lit/reactive-element@npm:1.6.3" + dependencies: + "@lit-labs/ssr-dom-shim": ^1.0.0 + checksum: 79b58631c38effeabad090070324431da8a22cf0ff665f5e4de35e4d791f984742b3d340c9c7fce996d1124a8da95febc582471b4c237236c770b1300b56ef6e + languageName: node + linkType: hard + +"@livepeer/core-react@npm:^1.9.1": + version: 1.9.1 + resolution: "@livepeer/core-react@npm:1.9.1" + dependencies: + "@livepeer/core": ^1.9.1 + "@tanstack/query-async-storage-persister": 4.29.23 + "@tanstack/query-core": 4.29.23 + "@tanstack/react-query": 4.29.23 + "@tanstack/react-query-persist-client": 4.29.23 + use-sync-external-store: ^1.2.0 + zustand: ^4.3.9 + peerDependencies: + react: ">=17.0.0" + checksum: efa31b038480286d9fa7265c5083145659836380d2bd2f69061f8ca79b3bf2e9adb11f8f85c2c6e835aaa0cf0725d10e26adb3d63477127197b72b40f90da081 + languageName: node + linkType: hard + +"@livepeer/core@npm:^1.9.1": + version: 1.9.1 + resolution: "@livepeer/core@npm:1.9.1" + dependencies: + cross-fetch: ^4.0.0 + ms: ^3.0.0-canary.1 + multiformats: 9.9.0 + tus-js-client: ^3.1.0 + zustand: ^4.3.9 + peerDependencies: + react: ">=17.0.0" + peerDependenciesMeta: + react: + optional: true + checksum: f1606f13a14f937d8f79c6f3231dab5842f12ba19f342f06f6d7924016ab5402ac23af0483ac2d506978ae96400c727907e78ae3fe52acb8f0d02db4e6dd878e + languageName: node + linkType: hard + +"@livepeer/react@npm:^2.6.0": + version: 2.9.1 + resolution: "@livepeer/react@npm:2.9.1" + dependencies: + "@livepeer/core-react": ^1.9.1 + "@radix-ui/react-dialog": ^1.0.4 + "@radix-ui/react-popover": ^1.0.6 + "@radix-ui/react-select": ^1.2.2 + "@stitches/react": ^1.2.8 + core-js: ^3.31.1 + livepeer: 2.9.1 + zustand: ^4.3.9 + peerDependencies: + react: ">=17.0.0" + react-dom: ">=17.0.0" + peerDependenciesMeta: + react-dom: + optional: true + checksum: 2c1b54a3bc5a92fe5d2346a14020797e69c2fe6c8e01ccbccb2fa8442b7c4b97cc0be5994500c5b70d06bf4dd6a2e57b24ffbd273e04262962d0afe0c562dd4f + languageName: node + linkType: hard + +"@ljharb/resumer@npm:^0.0.1": + version: 0.0.1 + resolution: "@ljharb/resumer@npm:0.0.1" + dependencies: + "@ljharb/through": ^2.3.9 + checksum: 1cff0a485cb857933d2921cb05a349f8fe894fa2bb6b31a347010ecccc4a2b369e43ebe5383a32a60ee6c9572d2c83fcab383eb01727e1507bf29c59f312dae6 + languageName: node + linkType: hard + +"@ljharb/through@npm:^2.3.11, @ljharb/through@npm:^2.3.9": + version: 2.3.11 + resolution: "@ljharb/through@npm:2.3.11" + dependencies: + call-bind: ^1.0.2 + checksum: 10502726028b8a4e0b270a2213e546821c04ed8d7fe411009a8e47497e4ae99c57eeb9ff3d13620ebdefd7c856b16fc873f27c433cad60465dc132fb4b997233 + languageName: node + linkType: hard + +"@metamask/eth-sig-util@npm:^5.0.2": + version: 5.1.0 + resolution: "@metamask/eth-sig-util@npm:5.1.0" + dependencies: + "@ethereumjs/util": ^8.0.6 + bn.js: ^4.12.0 + ethereum-cryptography: ^2.0.0 + ethjs-util: ^0.1.6 + tweetnacl: ^1.0.3 + tweetnacl-util: ^0.15.1 + checksum: c639e3bf91625faeb0230a6314f0b2d05e8f5e2989542d3e0eed1d21b7b286e1860f68629870fd7e568c1a599b3993c4210403fb4c84a625fb1e75ef676eab4f + languageName: node + linkType: hard + +"@metamask/safe-event-emitter@npm:2.0.0, @metamask/safe-event-emitter@npm:^2.0.0": + version: 2.0.0 + resolution: "@metamask/safe-event-emitter@npm:2.0.0" + checksum: 8b717ac5d53df0027c05509f03d0534700b5898dd1c3a53fb2dc4c0499ca5971b14aae67f522d09eb9f509e77f50afa95fdb3eda1afbff8b071c18a3d2905e93 + languageName: node + linkType: hard + +"@metamask/utils@npm:^3.0.1": + version: 3.6.0 + resolution: "@metamask/utils@npm:3.6.0" + dependencies: + "@types/debug": ^4.1.7 + debug: ^4.3.4 + semver: ^7.3.8 + superstruct: ^1.0.3 + checksum: 1ebc6677bb017e4d09d4af143621fe27194d8ed815234cfd76469c3c734dc1db2ea7b577c01a2096c21c04d8c9c4d721d3035b5353fe2ded3b4737f326755e43 + languageName: node + linkType: hard + +"@motionone/animation@npm:^10.15.1, @motionone/animation@npm:^10.16.3": + version: 10.16.3 + resolution: "@motionone/animation@npm:10.16.3" + dependencies: + "@motionone/easing": ^10.16.3 + "@motionone/types": ^10.16.3 + "@motionone/utils": ^10.16.3 + tslib: ^2.3.1 + checksum: 797cacea335e6f892af27579eff51450dcf18c5bbc5c0ca44a000929b21857f4afb974ffb411c4935bfbd01ef2ddb3ef542ba3313ae66e1e5392b5d314df6ad3 + languageName: node + linkType: hard + +"@motionone/dom@npm:^10.16.2, @motionone/dom@npm:^10.16.4": + version: 10.16.4 + resolution: "@motionone/dom@npm:10.16.4" + dependencies: + "@motionone/animation": ^10.16.3 + "@motionone/generators": ^10.16.4 + "@motionone/types": ^10.16.3 + "@motionone/utils": ^10.16.3 + hey-listen: ^1.0.8 + tslib: ^2.3.1 + checksum: 8307864351d1c0108492c2f414ab564f59f4bb797180382948696df44e7389339560e642c7d0fbdbe63c1755515b2ace8264b5f8827ba2590636e11d474dd226 + languageName: node + linkType: hard + +"@motionone/easing@npm:^10.16.3": + version: 10.16.3 + resolution: "@motionone/easing@npm:10.16.3" + dependencies: + "@motionone/utils": ^10.16.3 + tslib: ^2.3.1 + checksum: 03e2460cdd35ee4967a86ce28ffbaaaca589263f659f652801cf6bd667baba9b3d5ce6d134df6b64413b60b34dd21d7c38b0cd8a4c3e1ed789789cdb971905b2 + languageName: node + linkType: hard + +"@motionone/generators@npm:^10.16.4": + version: 10.16.4 + resolution: "@motionone/generators@npm:10.16.4" + dependencies: + "@motionone/types": ^10.16.3 + "@motionone/utils": ^10.16.3 + tslib: ^2.3.1 + checksum: 185091c5cfbe67c38e84bf3920d1b5862e5d7eb624136494a7e4779b2f9d06855ebe3e633d95dcc5a1735d92d59d1ae28a0724c2f9d8bddd60fc9bc3603fab48 + languageName: node + linkType: hard + +"@motionone/svelte@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/svelte@npm:10.16.4" + dependencies: + "@motionone/dom": ^10.16.4 + tslib: ^2.3.1 + checksum: 699e20955ea832bcf32d410ae9f88edf61a5c2cf2b56527119ab1df6fecbf2632b62d541743d0f6d278fd700a15a20b9eb7c8aa5266e7aed5e113b8f8f75b863 + languageName: node + linkType: hard + +"@motionone/types@npm:^10.15.1, @motionone/types@npm:^10.16.3": + version: 10.16.3 + resolution: "@motionone/types@npm:10.16.3" + checksum: ff38982f5aff2c0abbc3051c843d186d6f954c971e97dd6fced97a4ef50ee04f6e49607541ebb80e14dd143cf63553c388392110e270d04eca23f6b529f7f321 + languageName: node + linkType: hard + +"@motionone/utils@npm:^10.15.1, @motionone/utils@npm:^10.16.3": + version: 10.16.3 + resolution: "@motionone/utils@npm:10.16.3" + dependencies: + "@motionone/types": ^10.16.3 + hey-listen: ^1.0.8 + tslib: ^2.3.1 + checksum: d06025911c54c2217c98026cd38d4d681268a2b9b2830ac7342820881ba6be09721dd03626f52547749ead0543d5e2f2a69c9270ffdeaabc0949f7afb3233817 + languageName: node + linkType: hard + +"@motionone/vue@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/vue@npm:10.16.4" + dependencies: + "@motionone/dom": ^10.16.4 + tslib: ^2.3.1 + checksum: 746e38d0ee831829bfac2ce471f3d98a9e37bd8cbdf2706fa3becce69c17f51180a1ee47582d97758d68aafdfc9a187ab47ff216c77254ac994287dabcf266c1 + languageName: node + linkType: hard + +"@mui/base@npm:5.0.0-beta.19": + version: 5.0.0-beta.19 + resolution: "@mui/base@npm:5.0.0-beta.19" + dependencies: + "@babel/runtime": ^7.23.1 + "@floating-ui/react-dom": ^2.0.2 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 + "@popperjs/core": ^2.11.8 + clsx: ^2.0.0 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7503d5609ba242e270cbcaea69f6c7d4935763a34a8ce8de2695078eae12ffcc1d7a57b5d735200de08f2314b2482aa7279631ffd92af240af24f6c31b633d8f + languageName: node + linkType: hard + +"@mui/core-downloads-tracker@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/core-downloads-tracker@npm:5.14.13" + checksum: 3094f8c289d53eb2189ce3f9e4c71e735f91cfefeadda4cf37b0f3c3de47d9261fdbd49485f74267e2fe93d8c0cb289d38e9c802a404489017e9f1cee9e56488 + languageName: node + linkType: hard + +"@mui/icons-material@npm:^5.14.13, @mui/icons-material@npm:^5.8.4": + version: 5.14.13 + resolution: "@mui/icons-material@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + peerDependencies: + "@mui/material": ^5.0.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: a25db309d02654d1f2d51887986e11b26fc7aea864a398fdc55ca2f4ffd80bbc7402e7686f6a0aeab04a440993e0733aa52f752db50e083dae03e04c558f7bfd + languageName: node + linkType: hard + +"@mui/lab@npm:^5.0.0-alpha.66": + version: 5.0.0-alpha.148 + resolution: "@mui/lab@npm:5.0.0-alpha.148" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/base": 5.0.0-beta.19 + "@mui/system": ^5.14.13 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 + "@mui/x-tree-view": 6.0.0-alpha.1 + clsx: ^2.0.0 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@mui/material": ^5.0.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 4a6c03295e2cc502d687fc5b59e50ab16848724362287416c2f993316b7398ab7c81b9cf4c49582d08ce78e3d99d8ec79a1f50856a39982886852f28b9d81e2a + languageName: node + linkType: hard + +"@mui/material@npm:^5.14.13, @mui/material@npm:^5.3.1": + version: 5.14.13 + resolution: "@mui/material@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/base": 5.0.0-beta.19 + "@mui/core-downloads-tracker": ^5.14.13 + "@mui/system": ^5.14.13 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 + "@types/react-transition-group": ^4.4.7 + clsx: ^2.0.0 + csstype: ^3.1.2 + prop-types: ^15.8.1 + react-is: ^18.2.0 + react-transition-group: ^4.4.5 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 07d73cb5f770743e080494684fd087770893232415c681a25bff2e791414b702d76d02100996a850e89ced81f986c1dc378cc6fb35fcd0724d19b3b0a4a34bed + languageName: node + linkType: hard + +"@mui/private-theming@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/private-theming@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/utils": ^5.14.13 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: fb2f3644c332a454897f83b98b6fda7344ce30f9382715194442b7d954fdff4e0b96ef017a631259b2f0e44706737eecda7c5306d4833bf5bd834d59b059a6f9 + languageName: node + linkType: hard + +"@mui/styled-engine@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/styled-engine@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + "@emotion/cache": ^11.11.0 + csstype: ^3.1.2 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/styled": ^11.3.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + checksum: b927fffbfb3a2c8d09f10b3770da610c94826312c2aa3e17791bd0355ef64056a842ede32f9d22225b952e3055aa2364c06f17620ae5203a0d4bb782ec90388f + languageName: node + linkType: hard + +"@mui/system@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/system@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/private-theming": ^5.14.13 + "@mui/styled-engine": ^5.14.13 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 + clsx: ^2.0.0 + csstype: ^3.1.2 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 1dfcd19737792d36e87b83623f1bf836f1e1282faf44646f9788cec9e5fb6502e6082872ab839dcebd0ae3d72c5771aa12bad9d3ee4b7e039582970acda13a8d + languageName: node + linkType: hard + +"@mui/types@npm:^7.2.6": + version: 7.2.6 + resolution: "@mui/types@npm:7.2.6" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: eb92f9c2fa5df048bcf182a611131bee2799ce1de64acfca12855f349d0b69f5f92c953b7e6c4e341e1df48f0e86f1329ed0251be4835ed194f53342827bd576 + languageName: node + linkType: hard + +"@mui/utils@npm:^5.14.13, @mui/utils@npm:^5.14.3": + version: 5.14.13 + resolution: "@mui/utils@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + "@types/prop-types": ^15.7.7 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 5f04382d7761d35c5f53bcc0ce91c29aba0b3c0afb731f01d2ff078b05afe8098dee412538d846ab3a4b00eec934d46d730f9ef2ef493c3db885e2672480b6f0 + languageName: node + linkType: hard + +"@mui/x-tree-view@npm:6.0.0-alpha.1": + version: 6.0.0-alpha.1 + resolution: "@mui/x-tree-view@npm:6.0.0-alpha.1" + dependencies: + "@babel/runtime": ^7.22.6 + "@mui/utils": ^5.14.3 + "@types/react-transition-group": ^4.4.6 + clsx: ^2.0.0 + prop-types: ^15.8.1 + react-transition-group: ^4.4.5 + peerDependencies: + "@emotion/react": ^11.9.0 + "@emotion/styled": ^11.8.1 + "@mui/base": ^5.0.0-alpha.87 + "@mui/material": ^5.8.6 + "@mui/system": ^5.8.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + checksum: 87e659401c81ba4b1ed7eccb9e3167b4d22f27630c26bb436ff6eb4f79aa2fc0f3c50afda4625c9df898bcd1710c4de47813ee8f5bba51d0d9c85fb678a53658 + languageName: node + linkType: hard + +"@multiformats/murmur3@npm:^1.0.3": + version: 1.1.3 + resolution: "@multiformats/murmur3@npm:1.1.3" + dependencies: + multiformats: ^9.5.4 + murmurhash3js-revisited: ^3.0.0 + checksum: e3b07547da4a75348e2e103c6750db33b0caecd33b30751496cc2ca89cb7c654408c17300ca8f9fea79792f900f577b25aba49852feffe52894c79c177e40152 + languageName: node + linkType: hard + +"@next/env@npm:12.3.4": + version: 12.3.4 + resolution: "@next/env@npm:12.3.4" + checksum: daa3fc11efd1344c503eab41311a0e503ba7fd08607eeb3dc571036a6211eb37959cc4ed48b71dcc411cc214e7623ffd02411080aad3e09dc6a1192d5b256e60 + languageName: node + linkType: hard + +"@next/swc-android-arm-eabi@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-android-arm-eabi@npm:12.3.4" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@next/swc-android-arm64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-android-arm64@npm:12.3.4" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@next/swc-darwin-arm64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-darwin-arm64@npm:12.3.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@next/swc-darwin-x64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-darwin-x64@npm:12.3.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@next/swc-freebsd-x64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-freebsd-x64@npm:12.3.4" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@next/swc-linux-arm-gnueabihf@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm-gnueabihf@npm:12.3.4" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@next/swc-linux-arm64-gnu@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm64-gnu@npm:12.3.4" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@next/swc-linux-arm64-musl@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm64-musl@npm:12.3.4" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@next/swc-linux-x64-gnu@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-x64-gnu@npm:12.3.4" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@next/swc-linux-x64-musl@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-x64-musl@npm:12.3.4" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@next/swc-win32-arm64-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-arm64-msvc@npm:12.3.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@next/swc-win32-ia32-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-ia32-msvc@npm:12.3.4" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@next/swc-win32-x64-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-x64-msvc@npm:12.3.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@noble/curves@npm:1.1.0, @noble/curves@npm:~1.1.0": + version: 1.1.0 + resolution: "@noble/curves@npm:1.1.0" + dependencies: + "@noble/hashes": 1.3.1 + checksum: 2658cdd3f84f71079b4e3516c47559d22cf4b55c23ac8ee9d2b1f8e5b72916d9689e59820e0f9d9cb4a46a8423af5b56dc6bb7782405c88be06a015180508db5 + languageName: node + linkType: hard + +"@noble/curves@npm:1.2.0, @noble/curves@npm:^1.2.0, @noble/curves@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": 1.3.2 + checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 + languageName: node + linkType: hard + +"@noble/ed25519@npm:^1.5.1": + version: 1.7.3 + resolution: "@noble/ed25519@npm:1.7.3" + checksum: 45169927d51de513e47bbeebff3a603433c4ac7579e1b8c5034c380a0afedbe85e6959be3d69584a7a5ed6828d638f8f28879003b9bb2fb5f22d8aa2d88fd5fe + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.1": + version: 1.3.1 + resolution: "@noble/hashes@npm:1.3.1" + checksum: 7fdefc0f7a0c1ec27acc6ff88841793e3f93ec4ce6b8a6a12bfc0dd70ae6b7c4c82fe305fdfeda1735d5ad4a9eebe761e6693b3d355689c559e91242f4bc95b1 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1, @noble/hashes@npm:~1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 + languageName: node + linkType: hard + +"@noble/secp256k1@npm:^1.3.0, @noble/secp256k1@npm:^1.5.2, @noble/secp256k1@npm:^1.7.1": + version: 1.7.1 + resolution: "@noble/secp256k1@npm:1.7.1" + checksum: d2301f1f7690368d8409a3152450458f27e54df47e3f917292de3de82c298770890c2de7c967d237eff9c95b70af485389a9695f73eb05a43e2bd562d18b18cb + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@popperjs/core@npm:^2.11.8": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: e5c69fdebf52a4012f6a1f14817ca8e9599cb1be73dd1387e1785e2ed5e5f0862ff817f420a87c7fc532add1f88a12e25aeb010ffcbdc98eace3d55ce2139cf0 + languageName: node + linkType: hard + +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 011fe7ef0826b0fd1a95935a033a3c0fd08483903e1aa8f8b4e0704e3233406abb9ee25350ec0c20bbecb2aad8da0dcea58b392bbd77d6690736f02c143865d2 + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 67173ac34de1e242c55da52c2f5bdc65505d82453893f9b51dc74af9fe4c065cf4a657a4538e91b0d4a1a1e0a0642215e31894c31650ff6e3831471061e1ee9e + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 59240c850b1d3d0b56d8f8098dd04787dcaec5c5bd8de186fa548de86b86076e1c50e80144b90335e705a044edf5bc8b0998548474c2a10a98c7e004a1547e4b + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 0369163a3d226851682f855f81413cbf166cd98f131edb94a0f67f79e75342d86e89df9d7a1df08ac28be2bc77e0a7f0200526bb6c2a407abbfee1f0262d5fd7 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": ^1.1.1 + "@protobufjs/inquire": ^1.1.0 + checksum: 3fce7e09eb3f1171dd55a192066450f65324fd5f7cc01a431df01bb00d0a895e6bfb5b0c5561ce157ee1d886349c90703d10a4e11a1a256418ff591b969b3477 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 5781e1241270b8bd1591d324ca9e3a3128d2f768077a446187a049e36505e91bc4156ed5ac3159c3ce3d2ba3743dbc757b051b2d723eea9cd367bfd54ab29b2f + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: ca06f02eaf65ca36fb7498fc3492b7fc087bfcc85c702bac5b86fad34b692bdce4990e0ef444c1e2aea8c034227bd1f0484be02810d5d7e931c55445555646f4 + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 856eeb532b16a7aac071cacde5c5620df800db4c80cee6dbc56380524736205aae21e5ae47739114bf669ab5e8ba0e767a282ad894f3b5e124197cb9224445ee + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: d6a34fbbd24f729e2a10ee915b74e1d77d52214de626b921b2d77288bd8f2386808da2315080f2905761527cceffe7ec34c7647bd21a5ae41a25e8212ff79451 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: f9bf3163d13aaa3b6f5e6fbf37a116e094ea021c0e1f2a7ccd0e12a29e2ce08dafba4e8b36e13f8ed7397e1591610ce880ed1289af4d66cf4ace8a36a9557278 + languageName: node + linkType: hard + +"@pushprotocol/restapi@npm:^1.4.15": + version: 1.4.24 + resolution: "@pushprotocol/restapi@npm:1.4.24" + dependencies: + "@ambire/signature-validator": ^1.3.1 + "@metamask/eth-sig-util": ^5.0.2 + "@pushprotocol/socket": ^0.5.2 + axios: ^0.27.2 + buffer: ^6.0.3 + crypto-js: ^4.1.1 + immer: ^10.0.2 + joi: ^17.9.2 + livepeer: ^2.5.8 + openpgp: ^5.5.0 + simple-peer: ^9.11.1 + socket.io-client: ^4.5.2 + tslib: ^2.3.0 + unique-names-generator: ^4.7.1 + uuid: ^9.0.0 + video-stream-merger: ^4.0.1 + viem: ^1.3.0 + peerDependencies: + ethers: ^5.6.8 + checksum: 79921942883b87e90f363763a1a0e7e5dd51421802d21511cb04a5113e901eba2c7afe32793d233b00a84a9694908a1dbe8c3875c2dfb201b647e704844c4f42 + languageName: node + linkType: hard + +"@pushprotocol/socket@npm:^0.5.0, @pushprotocol/socket@npm:^0.5.1, @pushprotocol/socket@npm:^0.5.2": + version: 0.5.2 + resolution: "@pushprotocol/socket@npm:0.5.2" + dependencies: + socket.io-client: ^4.5.2 + tslib: ^2.3.0 + peerDependencies: + ethers: ^5.6.8 + checksum: 14a438269eae87979e10377e5b8a38953e190593648ce64f148def553b66467cf52ec29ce2b70956342c23f42b67ae179f54a1aab6f22d1495a3806ba0146bbc + languageName: node + linkType: hard + +"@pushprotocol/uiweb@npm:^1.1.13": + version: 1.1.14 + resolution: "@pushprotocol/uiweb@npm:1.1.14" + dependencies: + "@livepeer/react": ^2.6.0 + "@pushprotocol/socket": ^0.5.0 + "@unstoppabledomains/resolution": ^8.5.0 + "@web3-react/injected-connector": ^6.0.7 + date-fns: ^2.28.0 + emoji-picker-react: ^4.4.9 + font-awesome: ^4.7.0 + gif-picker-react: ^1.1.0 + html-react-parser: ^1.4.13 + moment: ^2.29.4 + react-icons: ^4.10.1 + react-toastify: ^9.1.3 + react-twitter-embed: ^4.0.4 + peerDependencies: + "@pushprotocol/restapi": ^1.2.15 + "@pushprotocol/socket": ^0.5.0 + ethers: ^5.7.1 + react: ">=16.8.0" + styled-components: ^5.3.5 + checksum: c06f684851892d3c71e4c8f38210a4b04e8e1f039d82a2bda728f3cc1414d059989c6ef91a5f6bf07e945ad61fd84a630c6e2ac72cba9493f138387396eda421 + languageName: node + linkType: hard + +"@radix-ui/number@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/number@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + checksum: 621ea8b7d4195d1a65a9c0aee918e8335e7f198088eec91577512c89c2ba3a3bab4a767cfb872a2b9c3092a78ff41cad9a924845a939f6bb87fe9356241ea0ea + languageName: node + linkType: hard + +"@radix-ui/primitive@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/primitive@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + checksum: 2b93e161d3fdabe9a64919def7fa3ceaecf2848341e9211520c401181c9eaebb8451c630b066fad2256e5c639c95edc41de0ba59c40eff37e799918d019822d1 + languageName: node + linkType: hard + +"@radix-ui/react-arrow@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-arrow@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-primitive": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 8cca086f0dbb33360e3c0142adf72f99fc96352d7086d6c2356dbb2ea5944cfb720a87d526fc48087741c602cd8162ca02b0af5e6fdf5f56d20fddb44db8b4c3 + languageName: node + linkType: hard + +"@radix-ui/react-collection@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-collection@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-slot": 1.0.2 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: acfbc9b0b2c553d343c22f02c9f098bc5cfa99e6e48df91c0d671855013f8b877ade9c657b7420a7aa523b5aceadea32a60dd72c23b1291f415684fb45d00cff + languageName: node + linkType: hard + +"@radix-ui/react-compose-refs@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-compose-refs@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 2b9a613b6db5bff8865588b6bf4065f73021b3d16c0a90b2d4c23deceeb63612f1f15de188227ebdc5f88222cab031be617a9dd025874c0487b303be3e5cc2a8 + languageName: node + linkType: hard + +"@radix-ui/react-context@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-context@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 60e9b81d364f40c91a6213ec953f7c64fcd9d75721205a494a5815b3e5ae0719193429b62ee6c7002cd6aaf70f8c0e2f08bdbaba9ffcc233044d32b56d2127d1 + languageName: node + linkType: hard + +"@radix-ui/react-dialog@npm:^1.0.4": + version: 1.0.5 + resolution: "@radix-ui/react-dialog@npm:1.0.5" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-dismissable-layer": 1.0.5 + "@radix-ui/react-focus-guards": 1.0.1 + "@radix-ui/react-focus-scope": 1.0.4 + "@radix-ui/react-id": 1.0.1 + "@radix-ui/react-portal": 1.0.4 + "@radix-ui/react-presence": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-slot": 1.0.2 + "@radix-ui/react-use-controllable-state": 1.0.1 + aria-hidden: ^1.1.1 + react-remove-scroll: 2.5.5 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 3d11ca31afb794a6dd286005ab7894cb0ce7bc2de5481de98900470b11d495256401306763de030f5e35aa545ff90d34632ffd54a1b29bf55afba813be4bb84a + languageName: node + linkType: hard + +"@radix-ui/react-direction@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-direction@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 5336a8b0d4f1cde585d5c2b4448af7b3d948bb63a1aadb37c77771b0e5902dc6266e409cf35fd0edaca7f33e26424be19e64fb8f9d7f7be2d6f1714ea2764210 + languageName: node + linkType: hard + +"@radix-ui/react-dismissable-layer@npm:1.0.4": + version: 1.0.4 + resolution: "@radix-ui/react-dismissable-layer@npm:1.0.4" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + "@radix-ui/react-use-escape-keydown": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: ea86004ed56a10609dd84eef39dc1e57b400d687a35be41bb4aaa06dc7ad6dbd0a8da281e08c8c077fdbd523122e4d860cb7438a60c664f024f77c8b41299ec6 + languageName: node + linkType: hard + +"@radix-ui/react-dismissable-layer@npm:1.0.5": + version: 1.0.5 + resolution: "@radix-ui/react-dismissable-layer@npm:1.0.5" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + "@radix-ui/react-use-escape-keydown": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: e73cf4bd3763f4d55b1bea7486a9700384d7d94dc00b1d5a75e222b2f1e4f32bc667a206ca4ed3baaaf7424dce7a239afd0ba59a6f0d89c3462c4e6e8d029a04 + languageName: node + linkType: hard + +"@radix-ui/react-focus-guards@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-focus-guards@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 1f8ca8f83b884b3612788d0742f3f054e327856d90a39841a47897dbed95e114ee512362ae314177de226d05310047cabbf66b686ae86ad1b65b6b295be24ef7 + languageName: node + linkType: hard + +"@radix-ui/react-focus-scope@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-focus-scope@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: e5b1a089071fbe77aca11124a4ad9623fc2bcaf4c019759b0cd044bf0878ecc924131ee09c6a22d38a3f094684ef68ed18fa65c8d891918412e0afc685a464e0 + languageName: node + linkType: hard + +"@radix-ui/react-focus-scope@npm:1.0.4": + version: 1.0.4 + resolution: "@radix-ui/react-focus-scope@npm:1.0.4" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 3481db1a641513a572734f0bcb0e47fefeba7bccd6ec8dde19f520719c783ef0b05a55ef0d5292078ed051cc5eda46b698d5d768da02e26e836022f46b376fd1 + languageName: node + linkType: hard + +"@radix-ui/react-id@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-id@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-use-layout-effect": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 446a453d799cc790dd2a1583ff8328da88271bff64530b5a17c102fa7fb35eece3cf8985359d416f65e330cd81aa7b8fe984ea125fc4f4eaf4b3801d698e49fe + languageName: node + linkType: hard + +"@radix-ui/react-popover@npm:^1.0.6": + version: 1.0.7 + resolution: "@radix-ui/react-popover@npm:1.0.7" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-dismissable-layer": 1.0.5 + "@radix-ui/react-focus-guards": 1.0.1 + "@radix-ui/react-focus-scope": 1.0.4 + "@radix-ui/react-id": 1.0.1 + "@radix-ui/react-popper": 1.1.3 + "@radix-ui/react-portal": 1.0.4 + "@radix-ui/react-presence": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-slot": 1.0.2 + "@radix-ui/react-use-controllable-state": 1.0.1 + aria-hidden: ^1.1.1 + react-remove-scroll: 2.5.5 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 3ec15c0923ea457f586aa34f77e17fabffa02dffeab622951560ec21c38df2f43718ff088d24bf9fd1d9cd0db62436fc19cae5b122d90f72de4945a1f508dc59 + languageName: node + linkType: hard + +"@radix-ui/react-popper@npm:1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-popper@npm:1.1.2" + dependencies: + "@babel/runtime": ^7.13.10 + "@floating-ui/react-dom": ^2.0.0 + "@radix-ui/react-arrow": 1.0.3 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + "@radix-ui/react-use-layout-effect": 1.0.1 + "@radix-ui/react-use-rect": 1.0.1 + "@radix-ui/react-use-size": 1.0.1 + "@radix-ui/rect": 1.0.1 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 4929daa0d1cccada3cff50de0e00c0d186ffea97a5f28545c77fa85ff9bc5c105a54dddac400c2e2dcac631f0f7ea88e59f2e5ad0f80bb2cb7b62cc7cd30400f + languageName: node + linkType: hard + +"@radix-ui/react-popper@npm:1.1.3": + version: 1.1.3 + resolution: "@radix-ui/react-popper@npm:1.1.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@floating-ui/react-dom": ^2.0.0 + "@radix-ui/react-arrow": 1.0.3 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + "@radix-ui/react-use-layout-effect": 1.0.1 + "@radix-ui/react-use-rect": 1.0.1 + "@radix-ui/react-use-size": 1.0.1 + "@radix-ui/rect": 1.0.1 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: b18a15958623f9222b6ed3e24b9fbcc2ba67b8df5a5272412f261de1592b3f05002af1c8b94c065830c3c74267ce00cf6c1d70d4d507ec92ba639501f98aa348 + languageName: node + linkType: hard + +"@radix-ui/react-portal@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-portal@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-primitive": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: d352bcd6ad65eb43c9e0d72d0755c2aae85e03fb287770866262be3a2d5302b2885aee3cd99f2bbf62ecd14fcb1460703f1dcdc40351f77ad887b931c6f0012a + languageName: node + linkType: hard + +"@radix-ui/react-portal@npm:1.0.4": + version: 1.0.4 + resolution: "@radix-ui/react-portal@npm:1.0.4" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-primitive": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: c4cf35e2f26a89703189d0eef3ceeeb706ae0832e98e558730a5e929ca7c72c7cb510413a24eca94c7732f8d659a1e81942bec7b90540cb73ce9e4885d040b64 + languageName: node + linkType: hard + +"@radix-ui/react-presence@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-presence@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-use-layout-effect": 1.0.1 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: ed2ff9faf9e4257a4065034d3771459e5a91c2d840b2fcec94661761704dbcb65bcdd927d28177a2a129b3dab5664eb90a9b88309afe0257a9f8ba99338c0d95 + languageName: node + linkType: hard + +"@radix-ui/react-primitive@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-primitive@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-slot": 1.0.2 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 9402bc22923c8e5c479051974a721c301535c36521c0237b83e5fa213d013174e77f3ad7905e6d60ef07e14f88ec7f4ea69891dc7a2b39047f8d3640e8f8d713 + languageName: node + linkType: hard + +"@radix-ui/react-select@npm:^1.2.2": + version: 1.2.2 + resolution: "@radix-ui/react-select@npm:1.2.2" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/number": 1.0.1 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-collection": 1.0.3 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-direction": 1.0.1 + "@radix-ui/react-dismissable-layer": 1.0.4 + "@radix-ui/react-focus-guards": 1.0.1 + "@radix-ui/react-focus-scope": 1.0.3 + "@radix-ui/react-id": 1.0.1 + "@radix-ui/react-popper": 1.1.2 + "@radix-ui/react-portal": 1.0.3 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-slot": 1.0.2 + "@radix-ui/react-use-callback-ref": 1.0.1 + "@radix-ui/react-use-controllable-state": 1.0.1 + "@radix-ui/react-use-layout-effect": 1.0.1 + "@radix-ui/react-use-previous": 1.0.1 + "@radix-ui/react-visually-hidden": 1.0.3 + aria-hidden: ^1.1.1 + react-remove-scroll: 2.5.5 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: af7b63cc9e2c6006ec08163392d244941e9e03534e7add1b7c5a86059d0eb8a0398d4f3e80d43ff22126874a02b985e44f1722d1de9218922f7aa653d09412e3 + languageName: node + linkType: hard + +"@radix-ui/react-slot@npm:1.0.2": + version: 1.0.2 + resolution: "@radix-ui/react-slot@npm:1.0.2" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: edf5edf435ff594bea7e198bf16d46caf81b6fb559493acad4fa8c308218896136acb16f9b7238c788fd13e94a904f2fd0b6d834e530e4cae94522cdb8f77ce9 + languageName: node + linkType: hard + +"@radix-ui/react-use-callback-ref@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-callback-ref@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: b9fd39911c3644bbda14a84e4fca080682bef84212b8d8931fcaa2d2814465de242c4cfd8d7afb3020646bead9c5e539d478cea0a7031bee8a8a3bb164f3bc4c + languageName: node + linkType: hard + +"@radix-ui/react-use-controllable-state@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-controllable-state@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-use-callback-ref": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: dee2be1937d293c3a492cb6d279fc11495a8f19dc595cdbfe24b434e917302f9ac91db24e8cc5af9a065f3f209c3423115b5442e65a5be9fd1e9091338972be9 + languageName: node + linkType: hard + +"@radix-ui/react-use-escape-keydown@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-use-callback-ref": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: c6ed0d9ce780f67f924980eb305af1f6cce2a8acbaf043a58abe0aa3cc551d9aa76ccee14531df89bbee302ead7ecc7fce330886f82d4672c5eda52f357ef9b8 + languageName: node + linkType: hard + +"@radix-ui/react-use-layout-effect@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-layout-effect@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: bed9c7e8de243a5ec3b93bb6a5860950b0dba359b6680c84d57c7a655e123dec9b5891c5dfe81ab970652e7779fe2ad102a23177c7896dde95f7340817d47ae5 + languageName: node + linkType: hard + +"@radix-ui/react-use-previous@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-previous@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 66b4312e857c58b75f3bf62a2048ef090b79a159e9da06c19a468c93e62336969c33dbef60ff16969f00b20386cc25d138f6a353f1658b35baac0a6eff4761b9 + languageName: node + linkType: hard + +"@radix-ui/react-use-rect@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-rect@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/rect": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 433f07e61e04eb222349825bb05f3591fca131313a1d03709565d6226d8660bd1d0423635553f95ee4fcc25c8f2050972d848808d753c388e2a9ae191ebf17f3 + languageName: node + linkType: hard + +"@radix-ui/react-use-size@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-size@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-use-layout-effect": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 6cc150ad1e9fa85019c225c5a5d50a0af6cdc4653dad0c21b4b40cd2121f36ee076db326c43e6bc91a69766ccff5a84e917d27970176b592577deea3c85a3e26 + languageName: node + linkType: hard + +"@radix-ui/react-visually-hidden@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-visually-hidden@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-primitive": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 2e9d0c8253f97e7d6ffb2e52a5cfd40ba719f813b39c3e2e42c496d54408abd09ef66b5aec4af9b8ab0553215e32452a5d0934597a49c51dd90dc39181ed0d57 + languageName: node + linkType: hard + +"@radix-ui/rect@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/rect@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + checksum: aeec13b234a946052512d05239067d2d63422f9ec70bf2fe7acfd6b9196693fc33fbaf43c2667c167f777d90a095c6604eb487e0bce79e230b6df0f6cacd6a55 + languageName: node + linkType: hard + +"@reduxjs/toolkit@npm:^1.6.2": + version: 1.9.7 + resolution: "@reduxjs/toolkit@npm:1.9.7" + dependencies: + immer: ^9.0.21 + redux: ^4.2.1 + redux-thunk: ^2.4.2 + reselect: ^4.1.8 + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 + react-redux: ^7.2.1 || ^8.0.2 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + checksum: ac25dec73a5d2df9fc7fbe98c14ccc73919e5ee1d6f251db0d2ec8f90273f92ef39c26716704bf56b5a40189f72d94b4526dc3a8c7ac3986f5daf44442bcc364 + languageName: node + linkType: hard + +"@safe-global/safe-apps-provider@npm:^0.17.1": + version: 0.17.1 + resolution: "@safe-global/safe-apps-provider@npm:0.17.1" + dependencies: + "@safe-global/safe-apps-sdk": 8.0.0 + events: ^3.3.0 + checksum: 02f0415a4bb77b82e55f0055be045af715d9c0ea0fa7daa4e0604f40cc2189051d111b8ead67ddab0e99b1e423b444753c11d69bb213d51e459f706d2b430e34 + languageName: node + linkType: hard + +"@safe-global/safe-apps-sdk@npm:8.0.0": + version: 8.0.0 + resolution: "@safe-global/safe-apps-sdk@npm:8.0.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": ^3.5.3 + viem: ^1.0.0 + checksum: 07295c44afa4d85fbc9419b4baac56b4fb493816d4438d6956842261e0689fdcea639ab86b39ee693c456fddace17b6c556c77a637892634a57de96f6b00b0c3 + languageName: node + linkType: hard + +"@safe-global/safe-apps-sdk@npm:^8.0.0": + version: 8.1.0 + resolution: "@safe-global/safe-apps-sdk@npm:8.1.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": ^3.5.3 + viem: ^1.0.0 + checksum: e9d31ed6d9cd2cd9ed71ef5a0e1f6ecfca9f0c62acb9b86a0ddb1b65a609090f2297c4304591ac0518b266a1bcc88d1dad31b0d05e50c7732accccb65adab754 + languageName: node + linkType: hard + +"@safe-global/safe-gateway-typescript-sdk@npm:^3.5.3": + version: 3.12.0 + resolution: "@safe-global/safe-gateway-typescript-sdk@npm:3.12.0" + checksum: 4f563449d0af5a032037039e34d87f1c4a6a83d105871958df5aaf97d12b25bd7bce4c59108f1997e1e9cd087108c31e7f80bd2ba204690e9a766b6e475c21be + languageName: node + linkType: hard + +"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": + version: 1.1.3 + resolution: "@scure/base@npm:1.1.3" + checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.1": + version: 1.3.1 + resolution: "@scure/bip32@npm:1.3.1" + dependencies: + "@noble/curves": ~1.1.0 + "@noble/hashes": ~1.3.1 + "@scure/base": ~1.1.0 + checksum: 394d65f77a40651eba21a5096da0f4233c3b50d422864751d373fcf142eeedb94a1149f9ab1dbb078086dab2d0bc27e2b1afec8321bf22d4403c7df2fea5bfe2 + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.2": + version: 1.3.2 + resolution: "@scure/bip32@npm:1.3.2" + dependencies: + "@noble/curves": ~1.2.0 + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.2 + checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 + languageName: node + linkType: hard + +"@scure/bip39@npm:1.2.1": + version: 1.2.1 + resolution: "@scure/bip39@npm:1.2.1" + dependencies: + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa + languageName: node + linkType: hard + +"@sideway/address@npm:^4.1.3": + version: 4.1.4 + resolution: "@sideway/address@npm:4.1.4" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: b9fca2a93ac2c975ba12e0a6d97853832fb1f4fb02393015e012b47fa916a75ca95102d77214b2a29a2784740df2407951af8c5dde054824c65577fd293c4cdb + languageName: node + linkType: hard + +"@sideway/formula@npm:^3.0.1": + version: 3.0.1 + resolution: "@sideway/formula@npm:3.0.1" + checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a + languageName: node + linkType: hard + +"@sideway/pinpoint@npm:^2.0.0": + version: 2.0.0 + resolution: "@sideway/pinpoint@npm:2.0.0" + checksum: 0f4491e5897fcf5bf02c46f5c359c56a314e90ba243f42f0c100437935daa2488f20482f0f77186bd6bf43345095a95d8143ecf8b1f4d876a7bc0806aba9c3d2 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.0 + resolution: "@sinonjs/commons@npm:3.0.0" + dependencies: + type-detect: 4.0.8 + checksum: b4b5b73d4df4560fb8c0c7b38c7ad4aeabedd362f3373859d804c988c725889cde33550e4bcc7cd316a30f5152a2d1d43db71b6d0c38f5feef71fd8d016763f8 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 + languageName: node + linkType: hard + +"@socket.io/component-emitter@npm:~3.1.0": + version: 3.1.0 + resolution: "@socket.io/component-emitter@npm:3.1.0" + checksum: db069d95425b419de1514dffe945cc439795f6a8ef5b9465715acf5b8b50798e2c91b8719cbf5434b3fe7de179d6cdcd503c277b7871cb3dd03febb69bdd50fa + languageName: node + linkType: hard + +"@solana/buffer-layout@npm:^4.0.0": + version: 4.0.1 + resolution: "@solana/buffer-layout@npm:4.0.1" + dependencies: + buffer: ~6.0.3 + checksum: bf846888e813187243d4008a7a9f58b49d16cbd995b9d7f1b72898aa510ed77b1ce5e8468e7b2fd26dd81e557a4e74a666e21fccb95f123c1f740d41138bbacd + languageName: node + linkType: hard + +"@solana/web3.js@npm:^1.70.1": + version: 1.87.1 + resolution: "@solana/web3.js@npm:1.87.1" + dependencies: + "@babel/runtime": ^7.22.6 + "@noble/curves": ^1.2.0 + "@noble/hashes": ^1.3.1 + "@solana/buffer-layout": ^4.0.0 + agentkeepalive: ^4.3.0 + bigint-buffer: ^1.1.5 + bn.js: ^5.2.1 + borsh: ^0.7.0 + bs58: ^4.0.1 + buffer: 6.0.3 + fast-stable-stringify: ^1.0.0 + jayson: ^4.1.0 + node-fetch: ^2.6.12 + rpc-websockets: ^7.5.1 + superstruct: ^0.14.2 + checksum: 7e8ae7775f0df82d7d796befd1f2f95482e5935e6879dba7aa6c65093cb7a09158b965e3aba15e218c2652efaa7ec77c2287c01f343e4ec08afd1a298c16a039 + languageName: node + linkType: hard + +"@stablelib/aead@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/aead@npm:1.0.1" + checksum: 1a6f68d138f105d17dd65349751515bd252ab0498c77255b8555478d28415600dde493f909eb718245047a993f838dfae546071e1687566ffb7b8c3e10c918d9 + languageName: node + linkType: hard + +"@stablelib/binary@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/binary@npm:1.0.1" + dependencies: + "@stablelib/int": ^1.0.1 + checksum: dca9b98eb1f56a4002b5b9e7351fbc49f3d8616af87007c01e833bd763ac89214eb5f3b7e18673c91ce59d4a0e4856a2eb661ace33d39f17fb1ad267271fccd8 + languageName: node + linkType: hard + +"@stablelib/bytes@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/bytes@npm:1.0.1" + checksum: 456267e08c3384abcb71d3ad3e97a6f99185ad754bac016f501ebea4e4886f37900589143b57e33bdbbf513a92fc89368c15dd4517e0540d0bdc79ecdf9dd087 + languageName: node + linkType: hard + +"@stablelib/chacha20poly1305@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha20poly1305@npm:1.0.1" + dependencies: + "@stablelib/aead": ^1.0.1 + "@stablelib/binary": ^1.0.1 + "@stablelib/chacha": ^1.0.1 + "@stablelib/constant-time": ^1.0.1 + "@stablelib/poly1305": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 81f1a32330838d31e4dc3144d76eba7244b56d9ea38c1f604f2c34d93ed8e67e9a6167d2cfd72254c13cc46dfc1f5ce5157b37939a575295d69d9144abb4e4fb + languageName: node + linkType: hard + +"@stablelib/chacha@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: f061f36c4ca4bf177dd7cac11e7c65ced164f141b6065885141ae5a55f32e16ba0209aefcdcc966aef013f1da616ce901a3a80653b4b6f833cf7e3397ae2d6bd + languageName: node + linkType: hard + +"@stablelib/constant-time@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/constant-time@npm:1.0.1" + checksum: dba4f4bf508de2ff15f7f0cbd875e70391aa3ba3698290fe1ed2feb151c243ba08a90fc6fb390ec2230e30fcc622318c591a7c0e35dcb8150afb50c797eac3d7 + languageName: node + linkType: hard + +"@stablelib/ed25519@npm:^1.0.2": + version: 1.0.3 + resolution: "@stablelib/ed25519@npm:1.0.3" + dependencies: + "@stablelib/random": ^1.0.2 + "@stablelib/sha512": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e18279de078edac67396ba07dbb862dce0fe89efa8141c21a5b04108a29914bd51636019522323ca5097ec596a90b3028ed64e88ee009b0ac7de7c1ab6499ccb + languageName: node + linkType: hard + +"@stablelib/hash@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hash@npm:1.0.1" + checksum: 3ff1f12d1a4082aaf4b6cdf40c2010aabe5c4209d3b40b97b5bbb0d9abc0ee94abdc545e57de0614afaea807ca0212ac870e247ec8f66cdce91ec39ce82948cf + languageName: node + linkType: hard + +"@stablelib/hkdf@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/hkdf@npm:1.0.1" + dependencies: + "@stablelib/hash": ^1.0.1 + "@stablelib/hmac": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 9d45e303715a1835c8612b78e6c1b9d2b7463699b484241d8681fb5c17e0f2bbde5ce211c882134b64616a402e09177baeba80426995ff227b3654a155ab225d + languageName: node + linkType: hard + +"@stablelib/hmac@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hmac@npm:1.0.1" + dependencies: + "@stablelib/constant-time": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e3b93f7144a5846a6e30213278f7570de6d3f9d09131b95ce76d5c5c8bf37bf5d1830f2ee8d847555707271dbfd6e2461221719fd4d8b27ff06b9dd689c0ec21 + languageName: node + linkType: hard + +"@stablelib/int@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/int@npm:1.0.1" + checksum: 65bfbf50a382eea70c68e05366bf379cfceff8fbc076f1c267ef2f2411d7aed64fd140c415cb6c29f19a3910d3b8b7805d4b32ad5721a5007a8e744a808c7ae3 + languageName: node + linkType: hard + +"@stablelib/keyagreement@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/keyagreement@npm:1.0.1" + dependencies: + "@stablelib/bytes": ^1.0.1 + checksum: 3c8ec904dd50f72f3162f5447a0fa8f1d9ca6e24cd272d3dbe84971267f3b47f9bd5dc4e4eeedf3fbac2fe01f2d9277053e57c8e60db8c5544bfb35c62d290dd + languageName: node + linkType: hard + +"@stablelib/poly1305@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/poly1305@npm:1.0.1" + dependencies: + "@stablelib/constant-time": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 70b845bb0481c66b7ba3f3865d01e4c67a4dffc9616fc6de1d23efc5e828ec09de25f8e3be4e1f15a23b8e87e3036ee3d949c2fd4785047e6f7028bbec0ead18 + languageName: node + linkType: hard + +"@stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": + version: 1.0.2 + resolution: "@stablelib/random@npm:1.0.2" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: f5ace0a588dc4c21f01cb85837892d4c872e994ae77a58a8eb7dd61aa0b26fb1e9b46b0445e71af57d963ef7d9f5965c64258fc0d04df7b2947bc48f2d3560c5 + languageName: node + linkType: hard + +"@stablelib/sha256@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha256@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 38669871e1bda72eb537629ebceac1c72da8890273a9fbe088f81f6d14c1ec04e78be8c5b455380a06c67f8e62b2508e11e9063fcc257dbaa1b5c27ac756ba77 + languageName: node + linkType: hard + +"@stablelib/sha512@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha512@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: b7c82f7608a35948a2147a534c0c9afc80deab3fd5f72a2e27b2454e7c0c6944d39381be3abcb1b7fac5b824ba030ae3e98209d517a579c143d8ed63930b042f + languageName: node + linkType: hard + +"@stablelib/wipe@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/wipe@npm:1.0.1" + checksum: 287802eb146810a46ba72af70b82022caf83a8aeebde23605f5ee0decf64fe2b97a60c856e43b6617b5801287c30cfa863cfb0469e7fcde6f02d143cf0c6cbf4 + languageName: node + linkType: hard + +"@stablelib/x25519@npm:^1.0.3": + version: 1.0.3 + resolution: "@stablelib/x25519@npm:1.0.3" + dependencies: + "@stablelib/keyagreement": ^1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/wipe": ^1.0.1 + checksum: f8537066b542b6770c1b5b2ae5ad0688d1b986e4bf818067c152c123a5471531987bbf024224f75f387f481ccc5b628e391e49e92102b8b1a3e2d449d6105402 + languageName: node + linkType: hard + +"@stitches/core@npm:^1.2.8": + version: 1.2.8 + resolution: "@stitches/core@npm:1.2.8" + checksum: 3a76a697b1d71ffb212e8b166f923c8f66ef99de93689dd417571f90fbba5692abb9a92220acd102baf5298896f0fdfeaa721da2d61adee1247531a26f67a15f + languageName: node + linkType: hard + +"@stitches/react@npm:^1.2.8": + version: 1.2.8 + resolution: "@stitches/react@npm:1.2.8" + peerDependencies: + react: ">= 16.3.0" + checksum: 029795323cdedb5599ec0636526fc233b2cf41fa9c1f4a704b1f7f457c6170053384a7430afed45e25f73e348d7c391cf1379bc079943cd9cad44302234a5244 + languageName: node + linkType: hard + +"@swc/helpers@npm:0.4.11": + version: 0.4.11 + resolution: "@swc/helpers@npm:0.4.11" + dependencies: + tslib: ^2.4.0 + checksum: 736857d524b41a8a4db81094e9b027f554004e0fa3e86325d85bdb38f7e6459ce022db079edb6c61ba0f46fe8583b3e663e95f7acbd13e51b8da6c34e45bba2e + languageName: node + linkType: hard + +"@tanstack/query-async-storage-persister@npm:4.29.23": + version: 4.29.23 + resolution: "@tanstack/query-async-storage-persister@npm:4.29.23" + dependencies: + "@tanstack/query-persist-client-core": 4.29.23 + checksum: 5a5845f8fc0563f9844272a140f28bb50ea064c4b3fdf5aa3512cd1e0e082156a94de7d5ee4cbc72dd302473c47045e73cc46118bb24752dd4b09940f8771ec4 + languageName: node + linkType: hard + +"@tanstack/query-core@npm:4.29.23": + version: 4.29.23 + resolution: "@tanstack/query-core@npm:4.29.23" + checksum: bd752e419619c415076816446f06904eba88a9600a9fc6544634afe929d24d40059a57809bf653c6581ae92b564942bed3988f3585ac59b0a60e8331b4ad8acb + languageName: node + linkType: hard + +"@tanstack/query-core@npm:4.36.1": + version: 4.36.1 + resolution: "@tanstack/query-core@npm:4.36.1" + checksum: 47672094da20d89402d9fe03bb7b0462be73a76ff9ca715169738bc600a719d064d106d083a8eedae22a2c22de22f87d5eb5d31ef447aba771d9190f2117ed10 + languageName: node + linkType: hard + +"@tanstack/query-persist-client-core@npm:4.29.23": + version: 4.29.23 + resolution: "@tanstack/query-persist-client-core@npm:4.29.23" + dependencies: + "@tanstack/query-core": 4.29.23 + checksum: 93b8d30450bda9037d3849fa43264f2e4e5157124760e1dcfd6e6361dedd172d1c67949f35d3875efdef395c0f3bec5917bcde636bb1039afa45d4923bfc4d52 + languageName: node + linkType: hard + +"@tanstack/query-persist-client-core@npm:4.36.1": + version: 4.36.1 + resolution: "@tanstack/query-persist-client-core@npm:4.36.1" + dependencies: + "@tanstack/query-core": 4.36.1 + checksum: f67eab79cb6d9581716d1532c490d00452d8e2c5438874599fdd2d8d930445137ed9afa8199a569452bf3d5ec581c223750d5777b63b65cbc1baf5bdf6fe3322 + languageName: node + linkType: hard + +"@tanstack/query-sync-storage-persister@npm:^4.27.1": + version: 4.36.1 + resolution: "@tanstack/query-sync-storage-persister@npm:4.36.1" + dependencies: + "@tanstack/query-persist-client-core": 4.36.1 + checksum: 461467ab13b0434dd4647c1ea8969ed06db6dabf77e3a68d978bbeb78d3d491b242fb7cd13bd37512f787e6ef891113ce208fad6355fa7eb49987c6942ca196b + languageName: node + linkType: hard + +"@tanstack/react-query-persist-client@npm:4.29.23": + version: 4.29.23 + resolution: "@tanstack/react-query-persist-client@npm:4.29.23" + dependencies: + "@tanstack/query-persist-client-core": 4.29.23 + peerDependencies: + "@tanstack/react-query": 4.29.23 + checksum: c3f846055a664e46953433ac7271bde3cfddc06ce0faef182ac8547532c9d8d0011f5e2ca087fc06764f26527d9b27c5f92ced0395e96a038349390afa791967 + languageName: node + linkType: hard + +"@tanstack/react-query-persist-client@npm:^4.28.0": + version: 4.36.1 + resolution: "@tanstack/react-query-persist-client@npm:4.36.1" + dependencies: + "@tanstack/query-persist-client-core": 4.36.1 + peerDependencies: + "@tanstack/react-query": ^4.36.1 + checksum: d938449bd8395da0c6ff69c83218c7efe63832f4e588b75f4f0c4f4db8c20194cb1507a1d5d8dd76b193545df3d3c0d5a409c117cc5306847fc02df3d2d16d45 + languageName: node + linkType: hard + +"@tanstack/react-query@npm:4.29.23": + version: 4.29.23 + resolution: "@tanstack/react-query@npm:4.29.23" + dependencies: + "@tanstack/query-core": 4.29.23 + use-sync-external-store: ^1.2.0 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: "*" + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 2d0e0b7c4362c0b7b37c754d2f335f61da2245c25141bd444fef93a53ae3b5d6af5a5cdcea096a981ab6eaeffd25d15fde7d9cb36a5006afe4c2ab3907a82a91 + languageName: node + linkType: hard + +"@tanstack/react-query@npm:^4.28.0": + version: 4.36.1 + resolution: "@tanstack/react-query@npm:4.36.1" + dependencies: + "@tanstack/query-core": 4.36.1 + use-sync-external-store: ^1.2.0 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: "*" + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 1aff0a476859386f8d32253fa0d0bde7b81769a6d4d4d9cbd78778f0f955459a3bdb7ee27a0d2ee7373090f12998b45df80db0b5b313bd0a7a39d36c6e8e51c5 + languageName: node + linkType: hard + +"@testing-library/dom@npm:^8.0.0": + version: 8.20.1 + resolution: "@testing-library/dom@npm:8.20.1" + dependencies: + "@babel/code-frame": ^7.10.4 + "@babel/runtime": ^7.12.5 + "@types/aria-query": ^5.0.1 + aria-query: 5.1.3 + chalk: ^4.1.0 + dom-accessibility-api: ^0.5.9 + lz-string: ^1.5.0 + pretty-format: ^27.0.2 + checksum: 06fc8dc67849aadb726cbbad0e7546afdf8923bd39acb64c576d706249bd7d0d05f08e08a31913fb621162e3b9c2bd0dce15964437f030f9fa4476326fdd3007 + languageName: node + linkType: hard + +"@testing-library/react-hooks@npm:^7.0.2": + version: 7.0.2 + resolution: "@testing-library/react-hooks@npm:7.0.2" + dependencies: + "@babel/runtime": ^7.12.5 + "@types/react": ">=16.9.0" + "@types/react-dom": ">=16.9.0" + "@types/react-test-renderer": ">=16.9.0" + react-error-boundary: ^3.1.0 + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + react-test-renderer: ">=16.9.0" + peerDependenciesMeta: + react-dom: + optional: true + react-test-renderer: + optional: true + checksum: 27c6169b5c9832bd02dcea232e6a0a3cd8d4504e13ecb49d57eb5ab6bea5e2f1bff65f3102068b7e57eec3cbd671326dc0b277335014b0edfbdedf11a1fe6db5 + languageName: node + linkType: hard + +"@testing-library/react@npm:^12.1.2": + version: 12.1.5 + resolution: "@testing-library/react@npm:12.1.5" + dependencies: + "@babel/runtime": ^7.12.5 + "@testing-library/dom": ^8.0.0 + "@types/react-dom": <18.0.0 + peerDependencies: + react: <18.0.0 + react-dom: <18.0.0 + checksum: 4abd0490405e709a7df584a0db604e508a4612398bb1326e8fa32dd9393b15badc826dcf6d2f7525437886d507871f719f127b9860ed69ddd204d1fa834f576a + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@types/aria-query@npm:^5.0.1": + version: 5.0.2 + resolution: "@types/aria-query@npm:5.0.2" + checksum: 19394fea016e72da39dd5ef1cf1643e3252b7ee99d8f0b3a8740d3b72f874443fc1e00a41935b36fdfaf92cd735d4ae10dc5d6ab8f1192527d4c0471bb8ff8e4 + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.20.2 + resolution: "@types/babel__core@npm:7.20.2" + dependencies: + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: 564fbaa8ff1305d50807ada0ec227c3e7528bebb2f8fe6b2ed88db0735a31511a74ad18729679c43eeed8025ed29d408f53059289719e95ab1352ed559a100bd + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.5 + resolution: "@types/babel__generator@npm:7.6.5" + dependencies: + "@babel/types": ^7.0.0 + checksum: c7459f5025c4c800eaf58f4db3b24e9d736331fe7df40961d9bc49f31b46e2a3be83dc9276e8688f10a5ed752ae153ad5f1bdd45e2245bac95273730b9115ec2 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.2 + resolution: "@types/babel__template@npm:7.4.2" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + checksum: 0fe977b45a3269336c77f3ae4641a6c48abf0fa35ab1a23fb571690786af02d6cec08255a43499b0b25c5633800f7ae882ace450cce905e3060fa9e6995047ae + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.20.2 + resolution: "@types/babel__traverse@npm:7.20.2" + dependencies: + "@babel/types": ^7.20.7 + checksum: 981340286479524436348d32373eaa3bf993c635cbf70307b4b69463eee83406a959ac4844f683911e0db8ab8d9f0025ab630dc7a8c170fee9ee74144c2a528f + languageName: node + linkType: hard + +"@types/bluebird@npm:3.5.34": + version: 3.5.34 + resolution: "@types/bluebird@npm:3.5.34" + checksum: e1c3889aea3309ebd986681ddffc3202bcaefb448d3e2c08e6578adc49e4e80795d8eb7d109dd78262b60bb4005b64929ff9e5bd30350d17780fe9110e47b24e + languageName: node + linkType: hard + +"@types/body-parser@npm:*": + version: 1.19.3 + resolution: "@types/body-parser@npm:1.19.3" + dependencies: + "@types/connect": "*" + "@types/node": "*" + checksum: 932fa71437c275023799123680ef26ffd90efd37f51a1abe405e6ae6e5b4ad9511b7a3a8f5a12877ed1444a02b6286c0a137a98e914b3c61932390c83643cc2c + languageName: node + linkType: hard + +"@types/connect@npm:*, @types/connect@npm:^3.4.33": + version: 3.4.36 + resolution: "@types/connect@npm:3.4.36" + dependencies: + "@types/node": "*" + checksum: 4dee3d966fb527b98f0cbbdcf6977c9193fc3204ed539b7522fe5e64dfa45f9017bdda4ffb1f760062262fce7701a0ee1c2f6ce2e50af36c74d4e37052303172 + languageName: node + linkType: hard + +"@types/cookie@npm:*": + version: 0.5.2 + resolution: "@types/cookie@npm:0.5.2" + checksum: 4a1e46379d877f5a3cc687a9799dd72e5f7e68c4764d45cb469789dec92b4b4a7a5bb8b10a08c90be15939fa7b9b402f87ed339dfac0cabf43699c5189880e88 + languageName: node + linkType: hard + +"@types/debug@npm:^4.1.7": + version: 4.1.9 + resolution: "@types/debug@npm:4.1.9" + dependencies: + "@types/ms": "*" + checksum: e88ee8b19d106f33eb0d3bc58bacff9702e98d821fd1ebd1de8942e6b97419e19a1ccf39370f1764a1dc66f79fd4619f3412e1be6eeb9f0b76412f5ffe4ead93 + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:^4.17.33": + version: 4.17.37 + resolution: "@types/express-serve-static-core@npm:4.17.37" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: 2dab1380e45eb44e56ecc1be1c42c4b897364d2f2a08e03ca28fbcb1e6866e390217385435813711c046f9acd684424d088855dc32825d5cbecf72c60ecd037f + languageName: node + linkType: hard + +"@types/express@npm:*": + version: 4.17.19 + resolution: "@types/express@npm:4.17.19" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^4.17.33 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: 3d39d0655eb0825d96fec100985a38737767ddd6da2dbda1e330a3adf36c98a9b7cd8d9539db32876d1fbb47a09343cad7b38c30c8dd7c291271fcb9b85cb21b + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.7 + resolution: "@types/graceful-fs@npm:4.1.7" + dependencies: + "@types/node": "*" + checksum: 8b97e208f85c9efd02a6003a582c77646dd87be0af13aec9419a720771560a8a87a979eaca73ae193d7c73127f34d0a958403a9b5d6246e450289fd8c79adf09 + languageName: node + linkType: hard + +"@types/hoist-non-react-statics@npm:^3.3.0": + version: 3.3.3 + resolution: "@types/hoist-non-react-statics@npm:3.3.3" + dependencies: + "@types/react": "*" + hoist-non-react-statics: ^3.3.0 + checksum: 107ac20ab36acdc83fb6bfca901e6f4f11307a0a307099c31ecf2a9875f8abffd731a2e1ee793162307e8aaee48fe9fd8d4e034fce88d5da480bc4178a3fc8d7 + languageName: node + linkType: hard + +"@types/http-errors@npm:*": + version: 2.0.2 + resolution: "@types/http-errors@npm:2.0.2" + checksum: d7f14045240ac4b563725130942b8e5c8080bfabc724c8ff3f166ea928ff7ae02c5194763bc8f6aaf21897e8a44049b0492493b9de3e058247e58fdfe0f86692 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.4 + resolution: "@types/istanbul-lib-coverage@npm:2.0.4" + checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.1 + resolution: "@types/istanbul-lib-report@npm:3.0.1" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: cfc66de48577bb7b2636a6afded7056483693c3ea70916276518cdfaa0d4b51bf564ded88fb13e75716665c3af3d4d54e9c2de042c0219dcabad7e81c398688b + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.2 + resolution: "@types/istanbul-reports@npm:3.0.2" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: f52028d6fe4d28f0085dd7ed66ccfa6af632579e9a4091b90928ffef93d4dbec0bacd49e9caf1b939d05df9eafc5ac1f5939413cdf8ac59fbe4b29602d4d0939 + languageName: node + linkType: hard + +"@types/jest@npm:^29.5.5": + version: 29.5.5 + resolution: "@types/jest@npm:29.5.5" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 56e55cde9949bcc0ee2fa34ce5b7c32c2bfb20e53424aa4ff3a210859eeaaa3fdf6f42f81a3f655238039cdaaaf108b054b7a8602f394e6c52b903659338d8c6 + languageName: node + linkType: hard + +"@types/lodash.merge@npm:^4.6.7": + version: 4.6.7 + resolution: "@types/lodash.merge@npm:4.6.7" + dependencies: + "@types/lodash": "*" + checksum: 94cd6fb8e606756a28f45d63c658aacfbce11a151f7fa322c4a3e87aa50d8bf26e0ae8cba0250070a7c5a6792fc51f79abf4c648bbb1850692be386cd76cd0ca + languageName: node + linkType: hard + +"@types/lodash@npm:*, @types/lodash@npm:^4.14.199": + version: 4.14.199 + resolution: "@types/lodash@npm:4.14.199" + checksum: e68d1fcbbfce953ed87b296a628573f62939227bcda0c934954e862b421e8a34c5e71cad6fea27b9980567909e6a4698f09025692958e36d64ea9ed99ec6fb2e + languageName: node + linkType: hard + +"@types/long@npm:^4.0.1": + version: 4.0.2 + resolution: "@types/long@npm:4.0.2" + checksum: d16cde7240d834cf44ba1eaec49e78ae3180e724cd667052b194a372f350d024cba8dd3f37b0864931683dab09ca935d52f0c4c1687178af5ada9fc85b0635f4 + languageName: node + linkType: hard + +"@types/mime@npm:*": + version: 3.0.2 + resolution: "@types/mime@npm:3.0.2" + checksum: 09cf74f6377d1b27f4a24512cb689ad30af59880ac473ed6f7bc5285ecde88bbe8fe500789340ad57810da9d6fe1704f86e8bfe147b9ea76d58925204a60b906 + languageName: node + linkType: hard + +"@types/mime@npm:^1": + version: 1.3.3 + resolution: "@types/mime@npm:1.3.3" + checksum: 7e27dede6517c1d604821a8a5412d6b7131decc8397ad4bac9216fc90dea26c9571426623ebeea2a9b89dbfb89ad98f7370a3c62cd2be8896c6e897333b117c9 + languageName: node + linkType: hard + +"@types/minimatch@npm:^3.0.4": + version: 3.0.5 + resolution: "@types/minimatch@npm:3.0.5" + checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.0": + version: 1.2.3 + resolution: "@types/minimist@npm:1.2.3" + checksum: 666ea4f8c39dcbdfbc3171fe6b3902157c845cc9cb8cee33c10deb706cda5e0cc80f98ace2d6d29f6774b0dc21180c96cd73c592a1cbefe04777247c7ba0e84b + languageName: node + linkType: hard + +"@types/ms@npm:*": + version: 0.7.32 + resolution: "@types/ms@npm:0.7.32" + checksum: 610744605c5924aa2657c8a62d307052af4f0e38e2aa015f154ef03391fabb4fd903f9c9baacb41f6e5798b8697e898463c351e5faf638738603ed29137b5254 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.8.4 + resolution: "@types/node@npm:20.8.4" + dependencies: + undici-types: ~5.25.1 + checksum: 2106b9ef9750297cac68249428d7067c4d22c26908854165b70a164e34e900f4c34bb9bf3887c9391206b500d3e87171d03b1846e25788925236a0354390d278 + languageName: node + linkType: hard + +"@types/node@npm:17.0.24": + version: 17.0.24 + resolution: "@types/node@npm:17.0.24" + checksum: 9e7c4f863601b2430b4c2429a89935f22eba692956f5013c90a4c7fb0e1401ed8add8c4307453c5d6b8b985384500f8c3f644427ab88632640cc396159af479a + languageName: node + linkType: hard + +"@types/node@npm:>=13.7.0": + version: 20.8.5 + resolution: "@types/node@npm:20.8.5" + dependencies: + undici-types: ~5.25.1 + checksum: 4bca4e4f6307a6f5dc78812015eca9c5a998b35fcf3ba4058c9851d3dde2b22c914fa25a85b804eab5af2ab95375d15943dce8e9ba5e01d15f4bf516ca0d2816 + languageName: node + linkType: hard + +"@types/node@npm:^12.12.54": + version: 12.20.55 + resolution: "@types/node@npm:12.20.55" + checksum: e4f86785f4092706e0d3b0edff8dca5a13b45627e4b36700acd8dfe6ad53db71928c8dee914d4276c7fd3b6ccd829aa919811c9eb708a2c8e4c6eb3701178c37 + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.2 + resolution: "@types/normalize-package-data@npm:2.4.2" + checksum: 2132e4054711e6118de967ae3a34f8c564e58d71fbcab678ec2c34c14659f638a86c35a0fd45237ea35a4a03079cf0a485e3f97736ffba5ed647bfb5da086b03 + languageName: node + linkType: hard + +"@types/numeral@npm:^2.0.2": + version: 2.0.3 + resolution: "@types/numeral@npm:2.0.3" + checksum: 460b0ac645519b3eea7ae52df631393246f9526d5772999bc3daa7fc8c63751591a24c9b0cde767bbbc137d918af5efd7676db4c1c062b675848bdb689c40642 + languageName: node + linkType: hard + +"@types/parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "@types/parse-json@npm:4.0.0" + checksum: fd6bce2b674b6efc3db4c7c3d336bd70c90838e8439de639b909ce22f3720d21344f52427f1d9e57b265fcb7f6c018699b99e5e0c208a1a4823014269a6bf35b + languageName: node + linkType: hard + +"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.7": + version: 15.7.8 + resolution: "@types/prop-types@npm:15.7.8" + checksum: 61dfad79da8b1081c450bab83b77935df487ae1cdd4660ec7df6be8e74725c15fa45cf486ce057addc956ca4ae78300b97091e2a25061133d1b9a1440bc896ae + languageName: node + linkType: hard + +"@types/qs@npm:*, @types/qs@npm:^6.9.8": + version: 6.9.8 + resolution: "@types/qs@npm:6.9.8" + checksum: c28e07d00d07970e5134c6eed184a0189b8a4649e28fdf36d9117fe671c067a44820890de6bdecef18217647a95e9c6aebdaaae69f5fe4b0bec9345db885f77e + languageName: node + linkType: hard + +"@types/ramda@npm:^0.29.6": + version: 0.29.6 + resolution: "@types/ramda@npm:0.29.6" + dependencies: + types-ramda: ^0.29.5 + checksum: b8198f90295e40b0f2aa6dc18c60535a88ecd6e2afdb421e0616398b9cbed03f2a760e9d712258ab8fdebe7da9e21ecf31d2bc9cae6d31406b0095ce8c4c8591 + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.5 + resolution: "@types/range-parser@npm:1.2.5" + checksum: db9aaa04a02d019395a9a4346475669a2864a32a6477ad0fc457bd2ef39a167cabe742f55a8a3fa8bc90abac795b716c22b37348bc3e19313ebe6c9310815233 + languageName: node + linkType: hard + +"@types/react-cookies@npm:^0.1.1": + version: 0.1.1 + resolution: "@types/react-cookies@npm:0.1.1" + dependencies: + "@types/cookie": "*" + "@types/express": "*" + checksum: 1b9d43dea6823ac42acb328ccafa37d6382c110cf20251d21bc2a10816e31b975f12dd6b22dcddd5a8af212864165531d8e70f4f77532b3da83dc6f69145d99f + languageName: node + linkType: hard + +"@types/react-dom@npm:17.0.2": + version: 17.0.2 + resolution: "@types/react-dom@npm:17.0.2" + dependencies: + "@types/react": "*" + checksum: 1725928a1c3a0026044e6401e6b53729e1a88849034fc67138d7784ec44a5132fe2e9056a19b741ccb462ff0ec0d8c2c01ef316bda19be0e31f2ead9346f600b + languageName: node + linkType: hard + +"@types/react-lazy-load-image-component@npm:^1.6.0": + version: 1.6.1 + resolution: "@types/react-lazy-load-image-component@npm:1.6.1" + dependencies: + "@types/react": "*" + csstype: ^3.0.2 + checksum: b49ffadc4fd9e900ad02bf7d181075e8896ead6c33c25d99bf597ea35efd6c0944a1f1fadae11ae14a30181e9ce88e17a69c9fa2448e967ba63b778acaf2e552 + languageName: node + linkType: hard + +"@types/react-redux@npm:^7.1.20, @types/react-redux@npm:^7.1.24": + version: 7.1.27 + resolution: "@types/react-redux@npm:7.1.27" + dependencies: + "@types/hoist-non-react-statics": ^3.3.0 + "@types/react": "*" + hoist-non-react-statics: ^3.3.0 + redux: ^4.0.0 + checksum: 38fcc56f013e81e9a3125fd75acdacb4cdb5f9fe49402330b4783923f236d2d12ccdd2240ffa42e5bbb75900acd55393c00e0ca5dd6cab91a7b7e39e74ac62b4 + languageName: node + linkType: hard + +"@types/react-test-renderer@npm:>=16.9.0": + version: 18.0.3 + resolution: "@types/react-test-renderer@npm:18.0.3" + dependencies: + "@types/react": "*" + checksum: 6834c7c998d9e699b7b9aca31ce0f550a29a63526a9ab15f62764eeade28fcce634030e5cfd223a8417e8c53234e01bfb961906b35fd9a72dd513aba549181f0 + languageName: node + linkType: hard + +"@types/react-transition-group@npm:^4.4.6, @types/react-transition-group@npm:^4.4.7": + version: 4.4.7 + resolution: "@types/react-transition-group@npm:4.4.7" + dependencies: + "@types/react": "*" + checksum: 3b91486e7aa777a3787e773efce79a0fa9be4ec9e02d51ccda8c7532c5c5d84fbcefe248dacb4007293d85bf0794ac51603bb9cec360db81cf3657d2b7123fb9 + languageName: node + linkType: hard + +"@types/react@npm:17.0.2": + version: 17.0.2 + resolution: "@types/react@npm:17.0.2" + dependencies: + "@types/prop-types": "*" + csstype: ^3.0.2 + checksum: a5198857165feddcbfc7d33e3322460ac62b8894d702414496a825b0c82272911ec33a42ef7c9d623a59308070eef4dfee6ff834b0674aa3f87eeb644196ee3b + languageName: node + linkType: hard + +"@types/retry@npm:0.12.0": + version: 0.12.0 + resolution: "@types/retry@npm:0.12.0" + checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 + languageName: node + linkType: hard + +"@types/send@npm:*": + version: 0.17.2 + resolution: "@types/send@npm:0.17.2" + dependencies: + "@types/mime": ^1 + "@types/node": "*" + checksum: 1ff5b1bd6a4f6fdc6402c7024781ff5dbd0e1f51a43c69529fb67c710943c7416d2f0d77c57c70fccf6616f25f838f32f960284526e408d4edae2e91e1fce95a + languageName: node + linkType: hard + +"@types/serve-static@npm:*": + version: 1.15.3 + resolution: "@types/serve-static@npm:1.15.3" + dependencies: + "@types/http-errors": "*" + "@types/mime": "*" + "@types/node": "*" + checksum: afa52252f0ba94cdb5391e80f23e17fd629bdf2a31be8876e2c4490312ed6b0570822dd7de7cea04c9002049e207709563568b7f4ee10bb9f456321db1e83e40 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.1 + resolution: "@types/stack-utils@npm:2.0.1" + checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 + languageName: node + linkType: hard + +"@types/trusted-types@npm:^2.0.2": + version: 2.0.4 + resolution: "@types/trusted-types@npm:2.0.4" + checksum: 5256c4576cd1c90d33ddd9cc9cbd4f202b39c98cbe8b7f74963298f9eb2159c285ea5c25a6181b4c594d8d75641765bff85d72c2d251ad076e6529ce0eeedd1c + languageName: node + linkType: hard + +"@types/ws@npm:^7.4.4": + version: 7.4.7 + resolution: "@types/ws@npm:7.4.7" + dependencies: + "@types/node": "*" + checksum: b4c9b8ad209620c9b21e78314ce4ff07515c0cadab9af101c1651e7bfb992d7fd933bd8b9c99d110738fd6db523ed15f82f29f50b45510288da72e964dedb1a3 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.1 + resolution: "@types/yargs-parser@npm:21.0.1" + checksum: 64e6316c2045e2d460c4fb79572f872f9d2f98fddc6d9d3949c71f0b6ad0ef8a2706cf49db26dfb02a9cb81433abb8f340f015e1d20a9692279abe9477b72c8e + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.28 + resolution: "@types/yargs@npm:17.0.28" + dependencies: + "@types/yargs-parser": "*" + checksum: f78c5e5c29903933c0557b4ffcd1d0b8564d66859c8ca4aa51da3714e49109ed7c2644334a1918d033df19028f4cecc91fd2e502651bb8e8451f246c371da847 + languageName: node + linkType: hard + +"@uauth/common@npm:2.3.0": + version: 2.3.0 + resolution: "@uauth/common@npm:2.3.0" + peerDependencies: + "@unstoppabledomains/resolution": ^8.0 + checksum: 13b49d6a300022e09370cc83851034be244b07e90822082e0452c13c1e5748cfaaa74c5ca8bba3e8e98de8d0b1a39a89ca5ed7aef32813a32ac82c5fc6ed0fe5 + languageName: node + linkType: hard + +"@uauth/js@npm:^2.8.0": + version: 2.8.0 + resolution: "@uauth/js@npm:2.8.0" + dependencies: + "@uauth/common": 2.3.0 + "@unstoppabledomains/resolution": ^8.0 + global: ^4.4.0 + jose: ^4.5.0 + checksum: a25d89667732508ad997986f2c0523665592ecb94b2ca5943d6c6de0a93749007e39c9da7dcee9ebd4235b6f3b63ea26d9b74865888a2d0dd4f4773aa65ab88c + languageName: node + linkType: hard + +"@unstoppabledomains/resolution@npm:^8.0, @unstoppabledomains/resolution@npm:^8.5.0": + version: 8.5.0 + resolution: "@unstoppabledomains/resolution@npm:8.5.0" + dependencies: + "@ethersproject/abi": ^5.0.1 + bn.js: ^4.4.0 + cross-fetch: ^3.1.4 + crypto-js: ^4.1.1 + elliptic: ^6.5.4 + checksum: 3deaae15c0ff9699a30306a5c2a4ff09a5fc9bd9f2c4e9ab22621e85bad7109cff5bfe8bebe2f334cf7b76e602e25b9af659a4d5f5dab44738b41a0b60d8d608 + languageName: node + linkType: hard + +"@unstoppabledomains/ui-kit@npm:^0.3.15": + version: 0.3.15 + resolution: "@unstoppabledomains/ui-kit@npm:0.3.15" + dependencies: + "@emotion/react": ^11.0.0 + "@emotion/styled": ^11.0.0 + "@mui/icons-material": ^5.8.4 + "@mui/lab": ^5.0.0-alpha.66 + "@mui/material": ^5.3.1 + tss-react: ^4.0.0 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + "@types/react-dom": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 810ce9f91e3763bbb6b2cda0da3892adaafff2dc73ece8ca52d4a69e57f4e714593373c5bc11ea6416ca310bd935932a038e0d5d324678bc59f07bccc79d32b9 + languageName: node + linkType: hard + +"@wagmi/connectors@npm:3.1.2": + version: 3.1.2 + resolution: "@wagmi/connectors@npm:3.1.2" + dependencies: + "@coinbase/wallet-sdk": ^3.6.6 + "@ledgerhq/connect-kit-loader": ^1.1.0 + "@safe-global/safe-apps-provider": ^0.17.1 + "@safe-global/safe-apps-sdk": ^8.0.0 + "@walletconnect/ethereum-provider": 2.10.1 + "@walletconnect/legacy-provider": ^2.0.0 + "@walletconnect/modal": 2.6.2 + "@walletconnect/utils": 2.10.1 + abitype: 0.8.7 + eventemitter3: ^4.0.7 + peerDependencies: + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: 9e00708bafbd2735dafcadb40360fbbf8a90850f19d79172e7549bb4f9655dcdea20159638e1f0ed20c92beb6beb4fd0168cd946ef1c3fa271a1ed92f4265d5c + languageName: node + linkType: hard + +"@wagmi/core@npm:1.4.4": + version: 1.4.4 + resolution: "@wagmi/core@npm:1.4.4" + dependencies: + "@wagmi/connectors": 3.1.2 + abitype: 0.8.7 + eventemitter3: ^4.0.7 + zustand: ^4.3.1 + peerDependencies: + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: ee4946a6ebdc9526024898e10d472b64eba673f7d9075f56aa564541a4a3c394c5e285a64f297f1a315471a8b7b7649e688ddd2cd82c9b38c77d036d2278b86f + languageName: node + linkType: hard + +"@walletconnect/core@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/core@npm:2.10.1" + dependencies: + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/jsonrpc-ws-connection": 1.0.13 + "@walletconnect/keyvaluestorage": ^1.0.2 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/relay-auth": ^1.0.4 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.10.1 + "@walletconnect/utils": 2.10.1 + events: ^3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: ^3.1.0 + checksum: d58ae15c53efe1792da8c7aa1b7ba47efb49807cfe0c73f225d59c5cd847a0e50979ce6965b94915812412deba3e5aa2dca13a02bd41c087e85575e99afad223 + languageName: node + linkType: hard + +"@walletconnect/crypto@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/crypto@npm:1.0.3" + dependencies: + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/environment": ^1.0.1 + "@walletconnect/randombytes": ^1.0.3 + aes-js: ^3.1.2 + hash.js: ^1.1.7 + tslib: 1.14.1 + checksum: 056c80451178d74be6237f24e53eb96951379ad2f556642b4f07231a9cac53512af182dfb58ee359d1d6803231030de747eb17b35a9a25577e20de3ef2d8fdec + languageName: node + linkType: hard + +"@walletconnect/encoding@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/encoding@npm:1.0.2" + dependencies: + is-typedarray: 1.0.0 + tslib: 1.14.1 + typedarray-to-buffer: 3.1.5 + checksum: 648029d6a04e0e3675e1220b87c982e5d69764873e30a45a7c57f18223cd7c13e6758138d4644fd05d8fa03bd438fafb0a0ebc6ae168ed6f4a9bf1f93de1b82f + languageName: node + linkType: hard + +"@walletconnect/environment@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/environment@npm:1.0.1" + dependencies: + tslib: 1.14.1 + checksum: a18731d857bdca73910147e59992cef3c6e292c37ab3d3013307bd706f06cb216aa804f0f48b25a78df6493ad8127e633629f4b50acb4f69d3765d6ac0524f68 + languageName: node + linkType: hard + +"@walletconnect/ethereum-provider@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/ethereum-provider@npm:2.10.1" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.7 + "@walletconnect/jsonrpc-provider": ^1.0.13 + "@walletconnect/jsonrpc-types": ^1.0.3 + "@walletconnect/jsonrpc-utils": ^1.0.8 + "@walletconnect/sign-client": 2.10.1 + "@walletconnect/types": 2.10.1 + "@walletconnect/universal-provider": 2.10.1 + "@walletconnect/utils": 2.10.1 + events: ^3.3.0 + peerDependencies: + "@walletconnect/modal": ">=2" + peerDependenciesMeta: + "@walletconnect/modal": + optional: true + checksum: ec3d88ba101a5d8f193262b5b1e770cccad6457ec56fa1f3d17fa531de4e07e8cf03a1341669122c61956f0d5c3a6eca57d3f12f524e046acddb401cdb76fe7c + languageName: node + linkType: hard + +"@walletconnect/events@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/events@npm:1.0.1" + dependencies: + keyvaluestorage-interface: ^1.0.0 + tslib: 1.14.1 + checksum: d28aa4dcc981bdaf38f0aeed979731ca793cead7e7a4ee730a9146d99d89db09a86c8e3192ed860638283276961c0723ba00cf3b8776f0692b36ec7df6c01be4 + languageName: node + linkType: hard + +"@walletconnect/heartbeat@npm:1.2.1": + version: 1.2.1 + resolution: "@walletconnect/heartbeat@npm:1.2.1" + dependencies: + "@walletconnect/events": ^1.0.1 + "@walletconnect/time": ^1.0.2 + tslib: 1.14.1 + checksum: df4d492a2d336283f834bc205c09b795f85cd507a61b14745dc2124e510a250fefbd83d51216f93df2e0aa0cf8120134db2679de8019eddd63877e9928997952 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-http-connection@npm:^1.0.4, @walletconnect/jsonrpc-http-connection@npm:^1.0.7": + version: 1.0.7 + resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.7" + dependencies: + "@walletconnect/jsonrpc-utils": ^1.0.6 + "@walletconnect/safe-json": ^1.0.1 + cross-fetch: ^3.1.4 + tslib: 1.14.1 + checksum: c4efcd46d4b344727ca6879badca2c2f855499ac76c8dace5d118f4423167adce34e41a99f3dcab0febb945ce51c6ef0ac8556567d5e38d8dad864b131eb5b00 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-provider@npm:1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.6": + version: 1.0.13 + resolution: "@walletconnect/jsonrpc-provider@npm:1.0.13" + dependencies: + "@walletconnect/jsonrpc-utils": ^1.0.8 + "@walletconnect/safe-json": ^1.0.2 + tslib: 1.14.1 + checksum: 497dfdd9f988432f171bc98336f3583c679059f0a166f95d6e51c8e1937c17abd9a5fd3aadfcebf6964bae14edd1e05fb0453e370d6e3bbc7ff4919fcad7c478 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-types@npm:1.0.3, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/jsonrpc-types@npm:1.0.3" + dependencies: + keyvaluestorage-interface: ^1.0.0 + tslib: 1.14.1 + checksum: 26e6f1d8f4207328d3df465c36d0d67844772863dc8e9e78e6cfec417cfc359300eab049d99ea558982b3f0948f4ca26b75253bdf635ffd82ffe30a5276b790c + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.4, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.7, @walletconnect/jsonrpc-utils@npm:^1.0.8": + version: 1.0.8 + resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" + dependencies: + "@walletconnect/environment": ^1.0.1 + "@walletconnect/jsonrpc-types": ^1.0.3 + tslib: 1.14.1 + checksum: f43a85dfce8150c3e3d1f009e8d8241ab8e10b026ea435f0918edf4db6b3a17586ba9d9c54a93cc61e4d3c685611e5bd5954fc377a581af503acd38e6d84c2ef + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-ws-connection@npm:1.0.13": + version: 1.0.13 + resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.13" + dependencies: + "@walletconnect/jsonrpc-utils": ^1.0.6 + "@walletconnect/safe-json": ^1.0.2 + events: ^3.3.0 + tslib: 1.14.1 + ws: ^7.5.1 + checksum: f2253b17564f7622e69b1252830f05efdf7f4d58b120adb3a3e950c2087845171c912307c39948d0b869aa8610688b83f54f54de4657091f7431aea95a59f8b9 + languageName: node + linkType: hard + +"@walletconnect/keyvaluestorage@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/keyvaluestorage@npm:1.0.2" + dependencies: + safe-json-utils: ^1.1.1 + tslib: 1.14.1 + peerDependencies: + "@react-native-async-storage/async-storage": 1.x + lokijs: 1.x + peerDependenciesMeta: + "@react-native-async-storage/async-storage": + optional: true + lokijs: + optional: true + checksum: d695c2efcfa013a43cfaa20c85281df7d364a4452d11a4312a695298bd0e50d04b0e21c828f33f46fb020ea9796e60a6b23041a85f29bd10beeba7d0da24539f + languageName: node + linkType: hard + +"@walletconnect/legacy-client@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-client@npm:2.0.0" + dependencies: + "@walletconnect/crypto": ^1.0.3 + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.4 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: ^5.3.0 + query-string: ^6.13.5 + checksum: 57de9e373b24766e937734989080eb6d476e40d5406d4f817c989b278f25a09aa8636dfbe34a33f4de80ef90aea9641fdb7841007ecdba8e5ad47cd11614ee94 + languageName: node + linkType: hard + +"@walletconnect/legacy-modal@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-modal@npm:2.0.0" + dependencies: + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + copy-to-clipboard: ^3.3.3 + preact: ^10.12.0 + qrcode: ^1.5.1 + checksum: 897a02c9f4129a8f0b8e37832bf49a408e7e6f2828e78bea90c3718471cb57558f5522dd69c19456b5cc54a4aa04a4f7942f262ad9b031d318a5498ca0ca4078 + languageName: node + linkType: hard + +"@walletconnect/legacy-provider@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-provider@npm:2.0.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.4 + "@walletconnect/jsonrpc-provider": ^1.0.6 + "@walletconnect/legacy-client": ^2.0.0 + "@walletconnect/legacy-modal": ^2.0.0 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + checksum: 48adf2d938d3580be1dbaa4c7005cdf715896a56d3f4ab500c301cd5b442343c7df11bfccbc8e32bf9a7ba4b9a379208846ad848d79b1b6b511c1c4121fc83cf + languageName: node + linkType: hard + +"@walletconnect/legacy-types@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-types@npm:2.0.0" + dependencies: + "@walletconnect/jsonrpc-types": ^1.0.2 + checksum: 358d789f8a50e689edcfd8eb668fcdf8e1f03ab08757b12fad0e658ce7ef62268f8022502b476bce69e5165aa4454c4ad1ea41f17244ab8d0fcd9026bd94707c + languageName: node + linkType: hard + +"@walletconnect/legacy-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-utils@npm:2.0.0" + dependencies: + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.4 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: ^5.3.0 + query-string: ^6.13.5 + checksum: ea90e98c2f2f0a7f1d8801f7284bae909952979413b5d8e339004948199a2777af025195442a3c78a27aa3c16bb546ef54bf9c592e5622e1f003bef6d4b355ca + languageName: node + linkType: hard + +"@walletconnect/logger@npm:^2.0.1": + version: 2.0.1 + resolution: "@walletconnect/logger@npm:2.0.1" + dependencies: + pino: 7.11.0 + tslib: 1.14.1 + checksum: b686679d176d5d22a3441d93e71be2652e6c447682a6d6f014baf7c2d9dcd23b93e2f434d4410e33cc532d068333f6b3c1d899aeb0d6f60cc296ed17f57b0c2c + languageName: node + linkType: hard + +"@walletconnect/modal-core@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal-core@npm:2.6.2" + dependencies: + valtio: 1.11.2 + checksum: 94daceba50c323b06ecbeac2968d9f0972f327359c6118887c6526cd64006249b12f64322d71bc6c4a2b928436ecc89cf3d3af706511fcdc264c1f4b34a2dd5d + languageName: node + linkType: hard + +"@walletconnect/modal-ui@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal-ui@npm:2.6.2" + dependencies: + "@walletconnect/modal-core": 2.6.2 + lit: 2.8.0 + motion: 10.16.2 + qrcode: 1.5.3 + checksum: cd1ec0205eb491e529670599d3dd26f6782d7c5a99d5594bf6949a8c760c1c5f4eb6ed72b8662450774fe4e2dd47678f2c05145c8f2494bd7153446ddf4bd7ed + languageName: node + linkType: hard + +"@walletconnect/modal@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal@npm:2.6.2" + dependencies: + "@walletconnect/modal-core": 2.6.2 + "@walletconnect/modal-ui": 2.6.2 + checksum: 68b354d49960b96d22de0e47a3801df27c01a3e96ec5fbde3ca6df1344ca2b20668b0c4d58fe1803f5670ac7b7b4c6f5b7b405e354f5f9eaff5cca147c13de9c + languageName: node + linkType: hard + +"@walletconnect/randombytes@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/randombytes@npm:1.0.3" + dependencies: + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/environment": ^1.0.1 + randombytes: ^2.1.0 + tslib: 1.14.1 + checksum: 3ba1d5906299256c64affcd03348ec1397e2fadb1e60baaa13d4f46ba0267580fc354e67839d3fa4faa8abb375723f7ab96334b4e842f5814ce2080ed15f3578 + languageName: node + linkType: hard + +"@walletconnect/relay-api@npm:^1.0.9": + version: 1.0.9 + resolution: "@walletconnect/relay-api@npm:1.0.9" + dependencies: + "@walletconnect/jsonrpc-types": ^1.0.2 + tslib: 1.14.1 + checksum: 5870579b6552f1ce7351878f1acb8386b0c11288c64d39133c7cee5040feeb7ccf9114228d97a59749d60366ad107b097d656407d534567c24f5d3878ea6e246 + languageName: node + linkType: hard + +"@walletconnect/relay-auth@npm:^1.0.4": + version: 1.0.4 + resolution: "@walletconnect/relay-auth@npm:1.0.4" + dependencies: + "@stablelib/ed25519": ^1.0.2 + "@stablelib/random": ^1.0.1 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/time": ^1.0.2 + tslib: 1.14.1 + uint8arrays: ^3.0.0 + checksum: 35b3229d7b57e74fdb8fe6827d8dd8291dc60bacda880a57b2acb47a34d38f12be46c971c9eff361eb4073e896648b550de7a7a3852ef3752f9619c08dfba891 + languageName: node + linkType: hard + +"@walletconnect/safe-json@npm:^1.0.1, @walletconnect/safe-json@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/safe-json@npm:1.0.2" + dependencies: + tslib: 1.14.1 + checksum: fee03fcc70adb5635ab9419ea6ec6555aa2467bef650ad3b9526451c3a5cf247836db0f3ae3bb435d2e585d99e50c2ebe7dc9c429cfa3df900cf3fe4bd06d37f + languageName: node + linkType: hard + +"@walletconnect/sign-client@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/sign-client@npm:2.10.1" + dependencies: + "@walletconnect/core": 2.10.1 + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.10.1 + "@walletconnect/utils": 2.10.1 + events: ^3.3.0 + checksum: dbdced8dece73b20ae73df9c0cf0d9e3eee753f6c81e264c87583ca60d1d13d4f7d61944e4b22d1f70c5f32424fd842a7de778838aa7d0ae27195976a86e102f + languageName: node + linkType: hard + +"@walletconnect/time@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/time@npm:1.0.2" + dependencies: + tslib: 1.14.1 + checksum: e3fc0113ca9e7ecedfc65f9e1517196682d5ffcda60750f51073b8d704719a17fea75da8b242c804bfa5b994707723043892a2db3cc86988b190b7b8711fe3c0 + languageName: node + linkType: hard + +"@walletconnect/types@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/types@npm:2.10.1" + dependencies: + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/keyvaluestorage": ^1.0.2 + "@walletconnect/logger": ^2.0.1 + events: ^3.3.0 + checksum: b663a236404bb423d3cc5cde656794ce42132f09193da5a51dac815d844f78eebb29c7275ebe10f6134492db21386ffd81b66ce42992332847b72c9128f74990 + languageName: node + linkType: hard + +"@walletconnect/universal-provider@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/universal-provider@npm:2.10.1" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.7 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.7 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/sign-client": 2.10.1 + "@walletconnect/types": 2.10.1 + "@walletconnect/utils": 2.10.1 + events: ^3.3.0 + checksum: a33ad597a7601157cd96bceb7637c3463a5df981e5548c5343ab84f92c542bd7cae577fb2884d549164c9ad8262b097dc5fc0bc7fd9a515ee7c3f30b271cb034 + languageName: node + linkType: hard + +"@walletconnect/utils@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/utils@npm:2.10.1" + dependencies: + "@stablelib/chacha20poly1305": 1.0.1 + "@stablelib/hkdf": 1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/sha256": 1.0.1 + "@stablelib/x25519": ^1.0.3 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.10.1 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: ^3.1.0 + checksum: 150d1a3c75ce0736ffc8ed8a844e3dc63476e556f7f308154ee6bc9d99e08907bc11a504b7ce3889951293b48d9eef4e32b84de1c7f27b7a84e6731a7bb65189 + languageName: node + linkType: hard + +"@walletconnect/window-getters@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-getters@npm:1.0.1" + dependencies: + tslib: 1.14.1 + checksum: fae312c4e1be5574d97f071de58e6aa0d0296869761499caf9d4a9a5fd2643458af32233a2120521b00873a599ff88457d405bd82ced5fb5bd6dc3191c07a3e5 + languageName: node + linkType: hard + +"@walletconnect/window-metadata@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-metadata@npm:1.0.1" + dependencies: + "@walletconnect/window-getters": ^1.0.1 + tslib: 1.14.1 + checksum: e82aea7195c6fe95c00e87bb38051c5549838c2e8302da94f1afa48206f79f0b620166c9820f847494505d282d1568e2086a1561b0493d2d0a1fa115f9106aef + languageName: node + linkType: hard + +"@web-std/blob@npm:^3.0.1, @web-std/blob@npm:^3.0.3, @web-std/blob@npm:^3.0.4": + version: 3.0.5 + resolution: "@web-std/blob@npm:3.0.5" + dependencies: + "@web-std/stream": 1.0.0 + web-encoding: 1.1.5 + checksum: 898b92285b96aae959546a49b9a0a308f4d4745eb1b7d740ae08955bbd2e32879abc9a68762d918d688c4d8a6e8dc34bebeb996b3bd7942dacf6a11d1f877435 + languageName: node + linkType: hard + +"@web-std/fetch@npm:^4.1.0, @web-std/fetch@npm:^4.1.2": + version: 4.2.1 + resolution: "@web-std/fetch@npm:4.2.1" + dependencies: + "@web-std/blob": ^3.0.3 + "@web-std/file": ^3.0.2 + "@web-std/form-data": ^3.0.2 + "@web-std/stream": ^1.0.1 + "@web3-storage/multipart-parser": ^1.0.0 + abort-controller: ^3.0.0 + data-uri-to-buffer: ^3.0.1 + mrmime: ^1.0.0 + checksum: e926301432d051ae7a23b241855119a0685478eb4ec830b7c9ae6d07db4dcc16da088992fc18da68268187a911fc6f0c5314d6c2ad9aa5f6c2564cf1f4e15ed5 + languageName: node + linkType: hard + +"@web-std/file@npm:^3.0.2": + version: 3.0.3 + resolution: "@web-std/file@npm:3.0.3" + dependencies: + "@web-std/blob": ^3.0.3 + checksum: 0f9e86288c34cb1771f291075dee8e57cded07c55694c0b94ac1e0fadca87a7db7974b1ae1fe86caaefa03e703d3e86722ac654e60925215a5a69e1a0c987d97 + languageName: node + linkType: hard + +"@web-std/form-data@npm:^3.0.2": + version: 3.1.0 + resolution: "@web-std/form-data@npm:3.1.0" + dependencies: + web-encoding: 1.1.5 + checksum: c52e18159be74c93b463238a2551947954697d0b32c4a3feeb9d570635574ceaea242fe138f42a49885e426ea398b0e3ad7cd1300ef58a74bd9515ad83bf4868 + languageName: node + linkType: hard + +"@web-std/stream@npm:1.0.0": + version: 1.0.0 + resolution: "@web-std/stream@npm:1.0.0" + dependencies: + web-streams-polyfill: ^3.1.1 + checksum: 247cc704b5dc18c3e7dac70c02efbbca83357fc237a0b8b2011814a246e6710a0dd403770b756d763ef545c7a118524e405b76cb7c7ac00afea0250171fdd68c + languageName: node + linkType: hard + +"@web-std/stream@npm:^1.0.1": + version: 1.0.3 + resolution: "@web-std/stream@npm:1.0.3" + dependencies: + web-streams-polyfill: ^3.1.1 + checksum: 480ef4373c7da42247fd7b58f5da17db230a397ca8d78f365076db2383104169b55407732a384334b8327cd541e532f619a31b3a9a807a5b3851e1e5fa6707a5 + languageName: node + linkType: hard + +"@web3-react/abstract-connector@npm:^6.0.7": + version: 6.0.7 + resolution: "@web3-react/abstract-connector@npm:6.0.7" + dependencies: + "@web3-react/types": ^6.0.7 + checksum: fa8b0ea3586e248da84756979dd5c5f6ddc2d1657a1698de63a6d0e38035c4b122841bd0e6b00f1a6f1825614b22f6552a584cafec3470ca6fbc2e127ab30b2a + languageName: node + linkType: hard + +"@web3-react/core@npm:^8.2.2": + version: 8.2.3 + resolution: "@web3-react/core@npm:8.2.3" + dependencies: + "@ethersproject/providers": ^5 + "@web3-react/store": ^8.2.3 + "@web3-react/types": ^8.2.3 + zustand: 4.4.0 + peerDependencies: + react: ">=16.8" + dependenciesMeta: + "@ethersproject/providers": + optional: true + checksum: 23aff5864c580c1799f75dea3edbeef7270a553fed5f8569cca42687f51e9b55b6d46c87104f5c66f49b66caffba3ea581726ecab2b39807319b192d0e0909c4 + languageName: node + linkType: hard + +"@web3-react/injected-connector@npm:^6.0.7": + version: 6.0.7 + resolution: "@web3-react/injected-connector@npm:6.0.7" + dependencies: + "@web3-react/abstract-connector": ^6.0.7 + "@web3-react/types": ^6.0.7 + tiny-warning: ^1.0.3 + checksum: 867a634a12326f33d10eead26f557fe505942ec42f5586d0756eb864fa345187b255a7d9b78bd555eb2395f962e9615731bcfefe6cf07ef9971a7fca151377f8 + languageName: node + linkType: hard + +"@web3-react/store@npm:^8.2.3": + version: 8.2.3 + resolution: "@web3-react/store@npm:8.2.3" + dependencies: + "@ethersproject/address": ^5 + "@web3-react/types": ^8.2.3 + zustand: 4.4.0 + checksum: 97f8984f82b597e5a0bd012b416d2935c4d92cb2d11398e4b6194c338b796e9c0af94cef5414689cb7ed08f670021c87159c3bdb49aa8c7810480fffc804bf6c + languageName: node + linkType: hard + +"@web3-react/types@npm:^6.0.7": + version: 6.0.7 + resolution: "@web3-react/types@npm:6.0.7" + checksum: 29ae264ae4a126e520a64a4b466ea712ee09b934f3fe13b957e09269249ffc882712cf11fff12c1c19dd66e38503075b4adf5e9d5f588ea0dd31bbedf6fa9a42 + languageName: node + linkType: hard + +"@web3-react/types@npm:^8.2.3": + version: 8.2.3 + resolution: "@web3-react/types@npm:8.2.3" + dependencies: + zustand: 4.4.0 + checksum: 30c1d3c98a36f5cdde8deb949ae71bc55afbfc3609d75bf7c5ec9f89a11d69c58a41ce5fc5aea5c73ed7abcc8b90bf5a9cdb5dba8cb778a9ea41921bf73cb3e9 + languageName: node + linkType: hard + +"@web3-storage/multipart-parser@npm:^1.0.0": + version: 1.0.0 + resolution: "@web3-storage/multipart-parser@npm:1.0.0" + checksum: d8bbb5b9b0a5c07b4119c33c64ef4b7cc8d74ca4de2dd783f608f2653f81ef298bf04136b7cdb7ce97306d5fe2217572b5655236b70e1b625ed18d4a21a81913 + languageName: node + linkType: hard + +"@web3-storage/parse-link-header@npm:^3.1.0": + version: 3.1.0 + resolution: "@web3-storage/parse-link-header@npm:3.1.0" + checksum: e91ce3ad25162ca84ecb8d607f54afc166ab91700c507a9cc81dac4ac6231d51cd307efdf1752f227046ef2cf255ada5e8fb6269703080f95a49b07ec90834a5 + languageName: node + linkType: hard + +"@xmtp/content-type-remote-attachment@npm:^1.0.7": + version: 1.1.2 + resolution: "@xmtp/content-type-remote-attachment@npm:1.1.2" + dependencies: + "@noble/secp256k1": ^1.7.1 + "@xmtp/proto": ^3.27.0 + "@xmtp/xmtp-js": ^11.1.1 + peerDependencies: + "@xmtp/xmtp-js": ^11.1.1 + checksum: 7d20edf0252caaaecac1aa2fdc811e494a86d7788b90f423e2487e0164669f3174dca12869cfde46112662a400e6feed454a63bbdaef427ed50e31fad7b4307e + languageName: node + linkType: hard + +"@xmtp/proto@npm:^3.27.0": + version: 3.27.0 + resolution: "@xmtp/proto@npm:3.27.0" + dependencies: + long: ^5.2.0 + protobufjs: ^7.0.0 + rxjs: ^7.8.0 + undici: ^5.8.1 + checksum: 99d2c2cc90de4cb1d125a88bbd9434ab3a7db6b0709687ffc7d9665a2a2acd1f7c88b05b24281f75e2a11ae36b89350f51fb466cac6c30547a3201bc229dfb1a + languageName: node + linkType: hard + +"@xmtp/proto@npm:^3.28.0-beta.1": + version: 3.28.0-beta.1 + resolution: "@xmtp/proto@npm:3.28.0-beta.1" + dependencies: + long: ^5.2.0 + protobufjs: ^7.0.0 + rxjs: ^7.8.0 + undici: ^5.8.1 + checksum: d222356318e72359bf54aea0fb967c3beeac94c82649c2e9c8cdb0a5a01ecf5c1264af1f1a4d2eeffb0d8b05561f0e3ee9b1ee44fa5742edfb0e1b288af8b96d + languageName: node + linkType: hard + +"@xmtp/xmtp-js@npm:^11.1.1": + version: 11.1.1 + resolution: "@xmtp/xmtp-js@npm:11.1.1" + dependencies: + "@noble/secp256k1": ^1.5.2 + "@xmtp/proto": ^3.28.0-beta.1 + async-mutex: ^0.4.0 + elliptic: ^6.5.4 + ethers: ^5.5.3 + long: ^5.2.0 + checksum: 208c5606c1d207d8141867067708b872a495cad27ca3327f0797479ac76f3e6c5d2c163bf6c2416cf7b06a33bcb3e00ee51077d902236339e4387bc2113bfa90 + languageName: node + linkType: hard + +"@zxing/text-encoding@npm:0.9.0": + version: 0.9.0 + resolution: "@zxing/text-encoding@npm:0.9.0" + checksum: c23b12aee7639382e4949961304a1294776afaffa40f579e09ffecd0e5e68cf26ef3edd75009de46da8a536e571448755ca68b3e2ea707d53793c0edb2e2c34a + languageName: node + linkType: hard + +"JSONStream@npm:^1.3.5": + version: 1.3.5 + resolution: "JSONStream@npm:1.3.5" + dependencies: + jsonparse: ^1.2.0 + through: ">=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: 2605fa124260c61bad38bb65eba30d2f72216a78e94d0ab19b11b4e0327d572b8d530c0c9cc3b0764f727ad26d39e00bf7ebad57781ca6368394d73169c59e46 + languageName: node + linkType: hard + +"JSV@npm:^4.0.x": + version: 4.0.2 + resolution: "JSV@npm:4.0.2" + checksum: 9e2e070b2149d4ffed6c135dedb5f8cebb870dc63c0ca6d3cb647067248c7ca15d1a934ee46e9d2ac0e468436d0f70bc1b63cd5f93e705ee9aa0669430e6e66f + languageName: node + linkType: hard + +"abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"abitype@npm:0.8.7": + version: 0.8.7 + resolution: "abitype@npm:0.8.7" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + checksum: 4351466808969bcc73e5c535c3d96bb687ee2be0bccd48eba024c47e6cc248f0c8bd368f9e42dab35d39923e63b1349ade470f72812de27127968caf1a1426c9 + languageName: node + linkType: hard + +"abitype@npm:0.9.8": + version: 0.9.8 + resolution: "abitype@npm:0.9.8" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6 + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: ^5.0.0 + checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 + languageName: node + linkType: hard + +"aes-js@npm:3.0.0": + version: 3.0.0 + resolution: "aes-js@npm:3.0.0" + checksum: 251e26d533cd1a915b44896b17d5ed68c24a02484cfdd2e74ec700a309267db96651ea4eb657bf20aac32a3baa61f6e34edf8e2fec2de440a655da9942d334b8 + languageName: node + linkType: hard + +"aes-js@npm:^3.1.2": + version: 3.1.2 + resolution: "aes-js@npm:3.1.2" + checksum: 062154d50b1e433cc8c3b8ca7879f3a6375d5e79c2a507b2b6c4ec920b4cd851bf2afa7f65c98761a9da89c0ab618cbe6529e8e9a1c71f93290b53128fb8f712 + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1, agentkeepalive@npm:^4.3.0": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: ^1.2.1 + checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 + languageName: node + linkType: hard + +"ansi-regex@npm:^2.0.0": + version: 2.1.1 + resolution: "ansi-regex@npm:2.1.1" + checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 + languageName: node + linkType: hard + +"ansi-regex@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-regex@npm:3.0.1" + checksum: 09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^2.2.1": + version: 2.2.1 + resolution: "ansi-styles@npm:2.2.1" + checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"ansi-styles@npm:~1.0.0": + version: 1.0.0 + resolution: "ansi-styles@npm:1.0.0" + checksum: 6dd47dccb268b4cc1fd0dd6617067a7acd34ad2761f0438800fdd55c0d45f50a90787acd82806009c2bf467f4e2920166be03e19b23529038c1c4527d80f598b + languageName: node + linkType: hard + +"any-signal@npm:^2.1.2": + version: 2.1.2 + resolution: "any-signal@npm:2.1.2" + dependencies: + abort-controller: ^3.0.0 + native-abort-controller: ^1.0.3 + checksum: 498603e30357f82e438ddc972086b3180ddbaf5ea9772f535d103b754711eb13d4c24577e497d5a1146e571ee38f167c316ace7dc1a03b62a8a8c7677e9d660f + languageName: node + linkType: hard + +"any-signal@npm:^3.0.0": + version: 3.0.1 + resolution: "any-signal@npm:3.0.1" + checksum: 073eb14c365b7552f9f16fbf36cd76171e4a0fe156a8faa865fe1d5ac4ed2f5c5ab6e3faad0ac0d4c69511b5892971c5573baa8a1cbf85fe250d0c54ff0734ff + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"aria-hidden@npm:^1.1.1": + version: 1.2.3 + resolution: "aria-hidden@npm:1.2.3" + dependencies: + tslib: ^2.0.0 + checksum: 7d7d211629eef315e94ed3b064c6823d13617e609d3f9afab1c2ed86399bb8e90405f9bdd358a85506802766f3ecb468af985c67c846045a34b973bcc0289db9 + languageName: node + linkType: hard + +"aria-query@npm:5.1.3": + version: 5.1.3 + resolution: "aria-query@npm:5.1.3" + dependencies: + deep-equal: ^2.0.5 + checksum: 929ff95f02857b650fb4cbcd2f41072eee2f46159a6605ea03bf63aa572e35ffdff43d69e815ddc462e16e07de8faba3978afc2813650b4448ee18c9895d982b + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "array-buffer-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + is-array-buffer: ^3.0.1 + checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + languageName: node + linkType: hard + +"array.prototype.every@npm:^1.1.5": + version: 1.1.5 + resolution: "array.prototype.every@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + is-string: ^1.0.7 + checksum: 9974435604e135fc8c359a76c89bfe0672c1a80974a76dc61c673e5ea5068f78a31b7a168634ed7691501130ed61d3c788dd1d48ec1265c6cdf3910897b1eba4 + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.2": + version: 1.0.2 + resolution: "arraybuffer.prototype.slice@npm:1.0.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + is-array-buffer: ^3.0.2 + is-shared-array-buffer: ^1.0.2 + checksum: c200faf437786f5b2c80d4564ff5481c886a16dee642ef02abdc7306c7edd523d1f01d1dd12b769c7eb42ac9bc53874510db19a92a2c035c0f6696172aafa5d3 + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 + languageName: node + linkType: hard + +"asn1.js@npm:^5.0.0": + version: 5.4.1 + resolution: "asn1.js@npm:5.4.1" + dependencies: + bn.js: ^4.0.0 + inherits: ^2.0.1 + minimalistic-assert: ^1.0.0 + safer-buffer: ^2.1.0 + checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a + languageName: node + linkType: hard + +"async-mutex@npm:^0.2.6": + version: 0.2.6 + resolution: "async-mutex@npm:0.2.6" + dependencies: + tslib: ^2.0.0 + checksum: f50102e0c57f6a958528cff7dff13da070897f17107b42274417a7248905b927b6e51c3387f8aed1f5cd6005b0e692d64a83a0789be602e4e7e7da4afe08b889 + languageName: node + linkType: hard + +"async-mutex@npm:^0.4.0": + version: 0.4.0 + resolution: "async-mutex@npm:0.4.0" + dependencies: + tslib: ^2.4.0 + checksum: 813a71728b35a4fbfd64dba719f04726d9133c67b577fcd951b7028c4a675a13ee34e69beb82d621f87bf81f5d4f135c4c44be0448550c7db728547244ef71fc + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36 + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.5": + version: 1.0.5 + resolution: "available-typed-arrays@npm:1.0.5" + checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a + languageName: node + linkType: hard + +"axios@npm:^0.27.2": + version: 0.27.2 + resolution: "axios@npm:0.27.2" + dependencies: + follow-redirects: ^1.14.9 + form-data: ^4.0.0 + checksum: 38cb7540465fe8c4102850c4368053c21683af85c5fdf0ea619f9628abbcb59415d1e22ebc8a6390d2bbc9b58a9806c874f139767389c862ec9b772235f06854 + languageName: node + linkType: hard + +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" + dependencies: + "@jest/transform": ^29.7.0 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.6.3 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@istanbuljs/load-nyc-config": ^1.0.0 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-instrument: ^5.0.4 + test-exclude: ^6.0.0 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 + languageName: node + linkType: hard + +"babel-plugin-macros@npm:^3.1.0": + version: 3.1.0 + resolution: "babel-plugin-macros@npm:3.1.0" + dependencies: + "@babel/runtime": ^7.12.5 + cosmiconfig: ^7.0.0 + resolve: ^1.19.0 + checksum: 765de4abebd3e4688ebdfbff8571ddc8cd8061f839bb6c3e550b0344a4027b04c60491f843296ce3f3379fb356cc873d57a9ee6694262547eb822c14a25be9a6 + languageName: node + linkType: hard + +"babel-plugin-styled-components@npm:>= 1.12.0": + version: 2.1.4 + resolution: "babel-plugin-styled-components@npm:2.1.4" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-module-imports": ^7.22.5 + "@babel/plugin-syntax-jsx": ^7.22.5 + lodash: ^4.17.21 + picomatch: ^2.3.1 + peerDependencies: + styled-components: ">= 2" + checksum: d791aed68d975dae4f73055f86cd47afa99cb402b8113acdaf5678c8b6fba2cbc15543f2debe8ed09becb198aae8be2adfe268ad41f4bca917288e073a622bf8 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + dependencies: + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-bigint": ^7.8.3 + "@babel/plugin-syntax-class-properties": ^7.8.3 + "@babel/plugin-syntax-import-meta": ^7.8.3 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.8.3 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-top-level-await": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" + dependencies: + babel-plugin-jest-hoist: ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base-x@npm:^3.0.2": + version: 3.0.9 + resolution: "base-x@npm:3.0.9" + dependencies: + safe-buffer: ^5.0.1 + checksum: 957101d6fd09e1903e846fd8f69fd7e5e3e50254383e61ab667c725866bec54e5ece5ba49ce385128ae48f9ec93a26567d1d5ebb91f4d56ef4a9cc0d5a5481e8 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"bech32@npm:1.1.4": + version: 1.1.4 + resolution: "bech32@npm:1.1.4" + checksum: 0e98db619191548390d6f09ff68b0253ba7ae6a55db93dfdbb070ba234c1fd3308c0606fbcc95fad50437227b10011e2698b89f0181f6e7f845c499bd14d0f4b + languageName: node + linkType: hard + +"big-integer@npm:^1.6.16": + version: 1.6.51 + resolution: "big-integer@npm:1.6.51" + checksum: 3d444173d1b2e20747e2c175568bedeebd8315b0637ea95d75fd27830d3b8e8ba36c6af40374f36bdaea7b5de376dcada1b07587cb2a79a928fccdb6e6e3c518 + languageName: node + linkType: hard + +"bigint-buffer@npm:^1.1.5": + version: 1.1.5 + resolution: "bigint-buffer@npm:1.1.5" + dependencies: + bindings: ^1.3.0 + node-gyp: latest + checksum: d010c9f57758bcdaccb435d88b483ffcc95fe8bbc6e7fb3a44fb5221f29c894ffaf4a3c5a4a530e0e7d6608203c2cde9b79ee4f2386cd6d4462d1070bc8c9f4e + languageName: node + linkType: hard + +"bind-decorator@npm:^1.0.11": + version: 1.0.11 + resolution: "bind-decorator@npm:1.0.11" + checksum: 41b6c69af51ee7e6e01ea6f2939df94c9c760383f89f5befda0890951657baedbf499a0b96a789fd85cb77252465134f4e6184aae6639ed60cf59549ef15353d + languageName: node + linkType: hard + +"bindings@npm:^1.3.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: 1.0.0 + checksum: 65b6b48095717c2e6105a021a7da4ea435aa8d3d3cd085cb9e85bcb6e5773cf318c4745c3f7c504412855940b585bdf9b918236612a1c7a7942491de176f1ae7 + languageName: node + linkType: hard + +"bl@npm:^5.0.0": + version: 5.1.0 + resolution: "bl@npm:5.1.0" + dependencies: + buffer: ^6.0.3 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: a7a438ee0bc540e80b8eb68cc1ad759a9c87df06874a99411d701d01cc0b36f30cd20050512ac3e77090138890960e07bfee724f3ee6619bb39a569f5cc3b1bc + languageName: node + linkType: hard + +"blob-to-it@npm:^1.0.1": + version: 1.0.4 + resolution: "blob-to-it@npm:1.0.4" + dependencies: + browser-readablestream-to-it: ^1.0.3 + checksum: e7fbebe5bd7b8187a4a88203639777456596a0cc68372e7b2dbcfbae6dea2b80e2a89522140039b538140bc3e3a6b1e90d1778e725eb8899070f799e61591751 + languageName: node + linkType: hard + +"blockstore-core@npm:^1.0.2": + version: 1.0.5 + resolution: "blockstore-core@npm:1.0.5" + dependencies: + err-code: ^3.0.1 + interface-blockstore: ^2.0.2 + interface-store: ^2.0.1 + it-all: ^1.0.4 + it-drain: ^1.0.4 + it-filter: ^1.0.2 + it-take: ^1.0.1 + multiformats: ^9.4.7 + checksum: 164e067c132a7e29e665794a84a1e71d7b959898c7b247ae4446fdbc6a23b08eca35c560a667ff5a53bf034b07acae5b9c0f90c872a22cb2f41729cb4a67fad7 + languageName: node + linkType: hard + +"bluebird@npm:^3.7.2": + version: 3.7.2 + resolution: "bluebird@npm:3.7.2" + checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef + languageName: node + linkType: hard + +"bn.js@npm:^4.0.0, bn.js@npm:^4.11.9, bn.js@npm:^4.12.0, bn.js@npm:^4.4.0": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 + languageName: node + linkType: hard + +"bn.js@npm:^5.1.1, bn.js@npm:^5.2.0, bn.js@npm:^5.2.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 + languageName: node + linkType: hard + +"borsh@npm:^0.7.0": + version: 0.7.0 + resolution: "borsh@npm:0.7.0" + dependencies: + bn.js: ^5.2.0 + bs58: ^4.0.0 + text-encoding-utf-8: ^1.0.2 + checksum: e98bfb5f7cfb820819c2870b884dac58dd4b4ce6a86c286c8fbf5c9ca582e73a8c6094df67e81a28c418ff07a309c6b118b2e27fdfea83fd92b8100c741da0b5 + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"broadcast-channel@npm:^3.4.1": + version: 3.7.0 + resolution: "broadcast-channel@npm:3.7.0" + dependencies: + "@babel/runtime": ^7.7.2 + detect-node: ^2.1.0 + js-sha3: 0.8.0 + microseconds: 0.2.0 + nano-time: 1.0.0 + oblivious-set: 1.0.0 + rimraf: 3.0.2 + unload: 2.2.0 + checksum: 803794c48dcce7f03aca69797430bd8b1c4cfd70b7de22079cd89567eeffaa126a1db98c7c2d86af8131d9bb41ed367c0fef96dfb446151c927b831572c621fc + languageName: node + linkType: hard + +"brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be + languageName: node + linkType: hard + +"browser-readablestream-to-it@npm:^1.0.0, browser-readablestream-to-it@npm:^1.0.1, browser-readablestream-to-it@npm:^1.0.2, browser-readablestream-to-it@npm:^1.0.3": + version: 1.0.3 + resolution: "browser-readablestream-to-it@npm:1.0.3" + checksum: 07895bbc54cdeea62c8e9b7e32d374ec5c340ed1d0bc0c6cd6f1e0561ad931b160a3988426c763672ddf38ac1f75e45b9d8ae267b43f387183edafcad625f30a + languageName: node + linkType: hard + +"browserslist@npm:^4.21.9": + version: 4.22.1 + resolution: "browserslist@npm:4.22.1" + dependencies: + caniuse-lite: ^1.0.30001541 + electron-to-chromium: ^1.4.535 + node-releases: ^2.0.13 + update-browserslist-db: ^1.0.13 + bin: + browserslist: cli.js + checksum: 7e6b10c53f7dd5d83fd2b95b00518889096382539fed6403829d447e05df4744088de46a571071afb447046abc3c66ad06fbc790e70234ec2517452e32ffd862 + languageName: node + linkType: hard + +"bs58@npm:^4.0.0, bs58@npm:^4.0.1": + version: 4.0.1 + resolution: "bs58@npm:4.0.1" + dependencies: + base-x: ^3.0.2 + checksum: b3c5365bb9e0c561e1a82f1a2d809a1a692059fae016be233a6127ad2f50a6b986467c3a50669ce4c18929dcccb297c5909314dd347a25a68c21b68eb3e95ac2 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0, buffer-from@npm:^1.1.2": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer-from@npm:~0.1.1": + version: 0.1.2 + resolution: "buffer-from@npm:0.1.2" + checksum: 50a1fa5da97d2081b7d945483c8967d3b89a096fa585eb55000bb2100e827c647c9370280ec9bd057da8f9fa5abc1d3b764228851a31fa8a67f659f70c0052d8 + languageName: node + linkType: hard + +"buffer-shims@npm:~1.0.0": + version: 1.0.0 + resolution: "buffer-shims@npm:1.0.0" + checksum: 4defd1ffc9b270708ea39c17cac75c91c520c8e2f1d28a4d0ec74dc77445cbf8fc162003f0530fd1f81340347e9a26863d5aa27cd3cc351ec1d0361777d15ace + languageName: node + linkType: hard + +"buffer@npm:6.0.3, buffer@npm:^6.0.1, buffer@npm:^6.0.3, buffer@npm:~6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.2.1 + checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 + languageName: node + linkType: hard + +"bufferutil@npm:^4.0.1": + version: 4.0.8 + resolution: "bufferutil@npm:4.0.8" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 7e9a46f1867dca72fda350966eb468eca77f4d623407b0650913fadf73d5750d883147d6e5e21c56f9d3b0bdc35d5474e80a600b9f31ec781315b4d2469ef087 + languageName: node + linkType: hard + +"cacache@npm:^17.0.0": + version: 17.1.4 + resolution: "cacache@npm:17.1.4" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^7.7.1 + minipass: ^7.0.3 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind@npm:1.0.2" + dependencies: + function-bind: ^1.1.1 + get-intrinsic: ^1.0.2 + checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camelcase-keys@npm:^6.2.2": + version: 6.2.2 + resolution: "camelcase-keys@npm:6.2.2" + dependencies: + camelcase: ^5.3.1 + map-obj: ^4.0.0 + quick-lru: ^4.0.1 + checksum: 43c9af1adf840471e54c68ab3e5fe8a62719a6b7dbf4e2e86886b7b0ff96112c945736342b837bd2529ec9d1c7d1934e5653318478d98e0cf22c475c04658e2a + languageName: node + linkType: hard + +"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"camelize@npm:^1.0.0": + version: 1.0.1 + resolution: "camelize@npm:1.0.1" + checksum: 91d8611d09af725e422a23993890d22b2b72b4cabf7239651856950c76b4bf53fe0d0da7c5e4db05180e898e4e647220e78c9fbc976113bd96d603d1fcbfcb99 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001406": + version: 1.0.30001549 + resolution: "caniuse-lite@npm:1.0.30001549" + checksum: 7f2abeedc8cf8b92cc0613855d71b995ce436068c0bcdd798c5af7d297ccf9f52496b00181beda42d82d25079dd4b6e389c67486156d40d8854e5707a25cb054 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001541": + version: 1.0.30001547 + resolution: "caniuse-lite@npm:1.0.30001547" + checksum: ec0fc2b46721887f6f4aca1f3902f03d9a1a07416d16a86b7cd4bfba60e7b6b03ab3969659d3ea0158cc2f298972c80215c06c9457eb15c649d7780e8f5e91a7 + languageName: node + linkType: hard + +"carbites@npm:^1.0.6": + version: 1.0.6 + resolution: "carbites@npm:1.0.6" + dependencies: + "@ipld/car": ^3.0.1 + "@ipld/dag-cbor": ^6.0.3 + "@ipld/dag-pb": ^2.0.2 + multiformats: ^9.0.4 + checksum: f8631c97a177f6efbb8fc70684b117cd2900e9f3cf830718ed7babeae2fa3a06b6768484b9852a85c7d454f19117fd3bf7a8c92adaa318d9a4c8b975b65a231c + languageName: node + linkType: hard + +"cborg@npm:^1.3.3, cborg@npm:^1.5.4, cborg@npm:^1.6.0, cborg@npm:^1.8.0, cborg@npm:^1.9.4": + version: 1.10.2 + resolution: "cborg@npm:1.10.2" + bin: + cborg: cli.js + checksum: 7743a8f125046ac27fb371c4ea18af54fbe853f7210f1ffacc6504a79566480c39d52ac4fbc1a5b5155e27b13c3b58955dc29db1bf20c4d651549d55fec2fa7f + languageName: node + linkType: hard + +"chalk@npm:^1.0.0": + version: 1.1.3 + resolution: "chalk@npm:1.1.3" + dependencies: + ansi-styles: ^2.2.1 + escape-string-regexp: ^1.0.2 + has-ansi: ^2.0.0 + strip-ansi: ^3.0.0 + supports-color: ^2.0.0 + checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd + languageName: node + linkType: hard + +"chalk@npm:^2.0.1, chalk@npm:^2.3.2, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"chalk@npm:~0.4.0": + version: 0.4.0 + resolution: "chalk@npm:0.4.0" + dependencies: + ansi-styles: ~1.0.0 + has-color: ~0.1.0 + strip-ansi: ~0.1.0 + checksum: e8f04f387b9fbf746fdce4b61a633f8a0d28224d8b022603db0f2d137471a18c5bc0bc33b243df09c361688f12bd3ab8a9dd1f8b4450d5a361bfe83aadbde739 + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.3 + resolution: "cjs-module-lexer@npm:1.2.3" + checksum: 5ea3cb867a9bb609b6d476cd86590d105f3cfd6514db38ff71f63992ab40939c2feb68967faa15a6d2b1f90daa6416b79ea2de486e9e2485a6f8b66a21b4fb0a + languageName: node + linkType: hard + +"class-is@npm:^1.1.0": + version: 1.1.0 + resolution: "class-is@npm:1.1.0" + checksum: 49024de3b264fc501a38dd59d8668f1a2b4973fa6fcef6b83d80fe6fe99a2000a8fbea5b50d4607169c65014843c9f6b41a4f8473df806c1b4787b4d47521880 + languageName: node + linkType: hard + +"classnames@npm:^2.2.5": + version: 2.3.2 + resolution: "classnames@npm:2.3.2" + checksum: 2c62199789618d95545c872787137262e741f9db13328e216b093eea91c85ef2bfb152c1f9e63027204e2559a006a92eb74147d46c800a9f96297ae1d9f96f4e + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"clipboard-copy@npm:^4.0.1": + version: 4.0.1 + resolution: "clipboard-copy@npm:4.0.1" + checksum: 530a09de80dfd0536793fdefb6559a2dfb6c2706b027c41c672a0f18debafd420e69111224f3265555afcd73f9cd97517dcaf494aa25996a58a8f550a3426080 + languageName: node + linkType: hard + +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^6.2.0 + checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"clsx@npm:^1.1.0, clsx@npm:^1.1.1, clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 + languageName: node + linkType: hard + +"clsx@npm:^2.0.0": + version: 2.0.0 + resolution: "clsx@npm:2.0.0" + checksum: a2cfb2351b254611acf92faa0daf15220f4cd648bdf96ce369d729813b85336993871a4bf6978ddea2b81b5a130478339c20d9d0b5c6fc287e5147f0c059276e + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"combine-errors@npm:^3.0.3": + version: 3.0.3 + resolution: "combine-errors@npm:3.0.3" + dependencies: + custom-error-instance: 2.1.1 + lodash.uniqby: 4.5.0 + checksum: bd0b0d2a4020f9976b8fe8eb7d5aa855b43ecacdcb61ee1fc5664d73ff8c1d7d0bbe4dd948bea7ba1870518bfc5688b89941de7a4967659418b4664cdb02884f + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"commander@npm:^2.20.3": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"convert-source-map@npm:^1.5.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + +"cookie@npm:^0.3.1": + version: 0.3.1 + resolution: "cookie@npm:0.3.1" + checksum: 5309937344947a049283573861c24bed054fac3334ce5a0fa74b9bc6bf39bd387d3a0fca7f3ed6f4a09f112de82c00b541a0e7d6ce7a8de0f5d1301eec799730 + languageName: node + linkType: hard + +"copy-to-clipboard@npm:^3.3.3": + version: 3.3.3 + resolution: "copy-to-clipboard@npm:3.3.3" + dependencies: + toggle-selection: ^1.0.6 + checksum: e0a325e39b7615108e6c1c8ac110ae7b829cdc4ee3278b1df6a0e4228c490442cc86444cd643e2da344fbc424b3aab8909e2fec82f8bc75e7e5b190b7c24eecf + languageName: node + linkType: hard + +"core-js@npm:^3.31.1": + version: 3.33.0 + resolution: "core-js@npm:3.33.0" + checksum: dd62217935ac281faf6f833bb306fb891162919fcf9c1f0c975b1b91e82ac09a940f5deb5950bbb582739ceef716e8bd7e4f9eab8328932fb029d3bc2ecb2881 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cosmiconfig@npm:^7.0.0": + version: 7.1.0 + resolution: "cosmiconfig@npm:7.1.0" + dependencies: + "@types/parse-json": ^4.0.0 + import-fresh: ^3.2.1 + parse-json: ^5.0.0 + path-type: ^4.0.0 + yaml: ^1.10.0 + checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f + languageName: node + linkType: hard + +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + prompts: ^2.0.1 + bin: + create-jest: bin/create-jest.js + checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 + languageName: node + linkType: hard + +"cross-fetch@npm:^3.1.4": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" + dependencies: + node-fetch: ^2.6.12 + checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 + languageName: node + linkType: hard + +"cross-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "cross-fetch@npm:4.0.0" + dependencies: + node-fetch: ^2.6.12 + checksum: ecca4f37ffa0e8283e7a8a590926b66713a7ef7892757aa36c2d20ffa27b0ac5c60dcf453119c809abe5923fc0bae3702a4d896bfb406ef1077b0d0018213e24 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"crypto-js@npm:^4.1.1": + version: 4.1.1 + resolution: "crypto-js@npm:4.1.1" + checksum: b3747c12ee3a7632fab3b3e171ea50f78b182545f0714f6d3e7e2858385f0f4101a15f2517e033802ce9d12ba50a391575ff4638c9de3dd9b2c4bc47768d5425 + languageName: node + linkType: hard + +"css-color-keywords@npm:^1.0.0": + version: 1.0.0 + resolution: "css-color-keywords@npm:1.0.0" + checksum: 8f125e3ad477bd03c77b533044bd9e8a6f7c0da52d49bbc0bbe38327b3829d6ba04d368ca49dd9ff3b667d2fc8f1698d891c198bbf8feade1a5501bf5a296408 + languageName: node + linkType: hard + +"css-to-react-native@npm:^3.0.0": + version: 3.2.0 + resolution: "css-to-react-native@npm:3.2.0" + dependencies: + camelize: ^1.0.0 + css-color-keywords: ^1.0.0 + postcss-value-parser: ^4.0.2 + checksum: 263be65e805aef02c3f20c064665c998a8c35293e1505dbe6e3054fb186b01a9897ac6cf121f9840e5a9dfe3fb3994f6fcd0af84a865f1df78ba5bf89e77adce + languageName: node + linkType: hard + +"csstype@npm:^3.0.2, csstype@npm:^3.1.2": + version: 3.1.2 + resolution: "csstype@npm:3.1.2" + checksum: e1a52e6c25c1314d6beef5168da704ab29c5186b877c07d822bd0806717d9a265e8493a2e35ca7e68d0f5d472d43fac1cdce70fd79fd0853dff81f3028d857b5 + languageName: node + linkType: hard + +"custom-error-instance@npm:2.1.1": + version: 2.1.1 + resolution: "custom-error-instance@npm:2.1.1" + checksum: db01483864c9f4356b720b443a1f9b374758745a75199187a0ccc12505cf822bc801a0d8e3f96d727559880024f40e09667d5c08e5de0bff243c6b5ae0bd303c + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^3.0.1": + version: 3.0.1 + resolution: "data-uri-to-buffer@npm:3.0.1" + checksum: c59c3009686a78c071806b72f4810856ec28222f0f4e252aa495ec027ed9732298ceea99c50328cf59b151dd34cbc3ad6150bbb43e41fc56fa19f48c99e9fc30 + languageName: node + linkType: hard + +"date-fns@npm:^2.16.1, date-fns@npm:^2.28.0": + version: 2.30.0 + resolution: "date-fns@npm:2.30.0" + dependencies: + "@babel/runtime": ^7.21.0 + checksum: f7be01523282e9bb06c0cd2693d34f245247a29098527d4420628966a2d9aad154bd0e90a6b1cf66d37adcb769cd108cf8a7bd49d76db0fb119af5cdd13644f4 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.2.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:~4.3.1, debug@npm:~4.3.2": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: ^1.1.0 + map-obj: ^1.0.0 + checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"decode-uri-component@npm:^0.2.0, decode-uri-component@npm:^0.2.2": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 + languageName: node + linkType: hard + +"dedent@npm:^1.0.0": + version: 1.5.1 + resolution: "dedent@npm:1.5.1" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: c3c300a14edf1bdf5a873f9e4b22e839d62490bc5c8d6169c1f15858a1a76733d06a9a56930e963d677a2ceeca4b6b0894cc5ea2f501aa382ca5b92af3413c2a + languageName: node + linkType: hard + +"deep-equal@npm:^2.0.5, deep-equal@npm:^2.2.2": + version: 2.2.2 + resolution: "deep-equal@npm:2.2.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + call-bind: ^1.0.2 + es-get-iterator: ^1.1.3 + get-intrinsic: ^1.2.1 + is-arguments: ^1.1.1 + is-array-buffer: ^3.0.2 + is-date-object: ^1.0.5 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + isarray: ^2.0.5 + object-is: ^1.1.5 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.0 + side-channel: ^1.0.4 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.1 + which-typed-array: ^1.1.9 + checksum: eb61c35157b6ecb96a5359b507b083fbff8ddb4c86a78a781ee38485f77a667465e45d63ee2ebd8a00e86d94c80e499906900cd82c2debb400237e1662cd5397 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1": + version: 1.1.0 + resolution: "define-data-property@npm:1.1.0" + dependencies: + get-intrinsic: ^1.2.1 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + checksum: 7ad4ee84cca8ad427a4831f5693526804b62ce9dfd4efac77214e95a4382aed930072251d4075dc8dc9fc949a353ed51f19f5285a84a788ba9216cc51472a093 + languageName: node + linkType: hard + +"define-data-property@npm:^1.1.0": + version: 1.1.1 + resolution: "define-data-property@npm:1.1.1" + dependencies: + get-intrinsic: ^1.2.1 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + checksum: a29855ad3f0630ea82e3c5012c812efa6ca3078d5c2aa8df06b5f597c1cde6f7254692df41945851d903e05a1668607b6d34e778f402b9ff9ffb38111f1a3f0d + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: ^1.0.1 + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 + languageName: node + linkType: hard + +"defined@npm:^1.0.1": + version: 1.0.1 + resolution: "defined@npm:1.0.1" + checksum: b1a852300bdb57f297289b55eafdd0c517afaa3ec8190e78fce91b9d8d0c0369d4505ecbdacfd3d98372e664f4a267d9bd793938d4a8c76209c9d9516fbe2101 + languageName: node + linkType: hard + +"delay@npm:^5.0.0": + version: 5.0.0 + resolution: "delay@npm:5.0.0" + checksum: 62f151151ecfde0d9afbb8a6be37a6d103c4cb24f35a20ef3fe56f920b0d0d0bb02bc9c0a3084d0179ef669ca332b91155f2ee4d9854622cd2cdba5fc95285f9 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"detect-browser@npm:5.3.0, detect-browser@npm:^5.3.0": + version: 5.3.0 + resolution: "detect-browser@npm:5.3.0" + checksum: dd6e08d55da1d9e0f22510ac79872078ae03d9dfa13c5e66c96baedc1c86567345a88f96949161f6be8f3e0fafa93bf179bdb1cd311b14f5f163112fcc70ab49 + languageName: node + linkType: hard + +"detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 + languageName: node + linkType: hard + +"detect-node-es@npm:^1.1.0": + version: 1.1.0 + resolution: "detect-node-es@npm:1.1.0" + checksum: e46307d7264644975b71c104b9f028ed1d3d34b83a15b8a22373640ce5ea630e5640b1078b8ea15f202b54641da71e4aa7597093bd4b91f113db520a26a37449 + languageName: node + linkType: hard + +"detect-node@npm:^2.0.4, detect-node@npm:^2.1.0": + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e + languageName: node + linkType: hard + +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa + languageName: node + linkType: hard + +"diff@npm:^3.2.0": + version: 3.5.0 + resolution: "diff@npm:3.5.0" + checksum: 00842950a6551e26ce495bdbce11047e31667deea546527902661f25cc2e73358967ebc78cf86b1a9736ec3e14286433225f9970678155753a6291c3bca5227b + languageName: node + linkType: hard + +"dijkstrajs@npm:^1.0.1": + version: 1.0.3 + resolution: "dijkstrajs@npm:1.0.3" + checksum: 82ff2c6633f235dd5e6bed04ec62cdfb1f327b4d7534557bd52f18991313f864ee50654543072fff4384a92b643ada4d5452f006b7098dbdfad6c8744a8c9e08 + languageName: node + linkType: hard + +"dns-over-http-resolver@npm:^1.2.3": + version: 1.2.3 + resolution: "dns-over-http-resolver@npm:1.2.3" + dependencies: + debug: ^4.3.1 + native-fetch: ^3.0.0 + receptacle: ^1.3.2 + checksum: 3cc1a1d77fc43e7a8a12453da987b80860ac96dc1031386c5eb1a39154775a87cfa1d50c0eaa5ea5e397e898791654608f6e2acf03f750f4098ab8822bb7d928 + languageName: node + linkType: hard + +"dom-accessibility-api@npm:^0.5.9": + version: 0.5.16 + resolution: "dom-accessibility-api@npm:0.5.16" + checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 + languageName: node + linkType: hard + +"dom-helpers@npm:^5.0.1": + version: 5.2.1 + resolution: "dom-helpers@npm:5.2.1" + dependencies: + "@babel/runtime": ^7.8.7 + csstype: ^3.0.2 + checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.2.0 + entities: ^2.0.0 + checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 + languageName: node + linkType: hard + +"dom-walk@npm:^0.1.0": + version: 0.1.2 + resolution: "dom-walk@npm:0.1.2" + checksum: 19eb0ce9c6de39d5e231530685248545d9cd2bd97b2cb3486e0bfc0f2a393a9addddfd5557463a932b52fdfcf68ad2a619020cd2c74a5fe46fbecaa8e80872f3 + languageName: node + linkType: hard + +"dom7@npm:^3.0.0": + version: 3.0.0 + resolution: "dom7@npm:3.0.0" + dependencies: + ssr-window: ^3.0.0-alpha.1 + checksum: 5a1b8979ed35afb9cc6714ff048ce4599a24fd8a11069bb52a61ccae1bdc0716c2bd6b07c4338856d5664d984c0bee9f6b7616a01ffa09daaebfe02fee016e66 + languageName: node + linkType: hard + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + languageName: node + linkType: hard + +"domhandler@npm:4.3.1, domhandler@npm:^4.2.0, domhandler@npm:^4.2.2": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: ^2.2.0 + checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa + languageName: node + linkType: hard + +"domutils@npm:^2.8.0": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: ^1.0.1 + domelementtype: ^2.2.0 + domhandler: ^4.2.0 + checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 + languageName: node + linkType: hard + +"dotignore@npm:^0.1.2": + version: 0.1.2 + resolution: "dotignore@npm:0.1.2" + dependencies: + minimatch: ^3.0.4 + bin: + ignored: bin/ignored + checksum: 06bab15e2a2400c6f823a0edbcd73661180f6245a4041a3fe3b9fde4b22ae74b896604df4520a877093f05c656bd080087376c9f605bccdea847664c59910f37 + languageName: node + linkType: hard + +"duplexer2@npm:^0.1.2": + version: 0.1.4 + resolution: "duplexer2@npm:0.1.4" + dependencies: + readable-stream: ^2.0.2 + checksum: 744961f03c7f54313f90555ac20284a3fb7bf22fdff6538f041a86c22499560eb6eac9d30ab5768054137cb40e6b18b40f621094e0261d7d8c35a37b7a5ad241 + languageName: node + linkType: hard + +"duplexer@npm:^0.1.1": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + languageName: node + linkType: hard + +"duplexify@npm:^4.1.2": + version: 4.1.2 + resolution: "duplexify@npm:4.1.2" + dependencies: + end-of-stream: ^1.4.1 + inherits: ^2.0.3 + readable-stream: ^3.1.1 + stream-shift: ^1.0.0 + checksum: 964376c61c0e92f6ed0694b3ba97c84f199413dc40ab8dfdaef80b7a7f4982fcabf796214e28ed614a5bc1ec45488a29b81e7d46fa3f5ddf65bcb118c20145ad + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"electron-fetch@npm:^1.7.2": + version: 1.9.1 + resolution: "electron-fetch@npm:1.9.1" + dependencies: + encoding: ^0.1.13 + checksum: 33b5d363b9a234288e847237ef34536bd415f31cba3b1c69b2ae4679a2bae66fb7ded2b576b90a0b7cd240e3df71cf16f2b961d4ab82864df02b6b53cf49f05c + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.535": + version: 1.4.549 + resolution: "electron-to-chromium@npm:1.4.549" + checksum: 6aa2a71fa359642e8cc77c0bbf4ded752ff769405173fdb91f790ae3b29cc076eb98579622a87fda86d087ef6f18ca13fa05d229083756c546761b1258c3dd48 + languageName: node + linkType: hard + +"elliptic@npm:6.5.4, elliptic@npm:^6.5.4": + version: 6.5.4 + resolution: "elliptic@npm:6.5.4" + 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 + checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4 + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 + languageName: node + linkType: hard + +"emoji-picker-react@npm:^4.4.9": + version: 4.5.2 + resolution: "emoji-picker-react@npm:4.5.2" + dependencies: + clsx: ^1.2.1 + peerDependencies: + react: ">=16" + checksum: b0f8aa3347cf804abcc209b5a707319d405f90bfc2a27a3b98900f2f8233b1a967328cca034b930d388d4a9480d7c12b2ded795976a554d9962eadaa607aaa06 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encode-utf8@npm:^1.0.3": + version: 1.0.3 + resolution: "encode-utf8@npm:1.0.3" + checksum: 550224bf2a104b1d355458c8a82e9b4ea07f9fc78387bc3a49c151b940ad26473de8dc9e121eefc4e84561cb0b46de1e4cd2bc766f72ee145e9ea9541482817f + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"engine.io-client@npm:~6.5.2": + version: 6.5.2 + resolution: "engine.io-client@npm:6.5.2" + dependencies: + "@socket.io/component-emitter": ~3.1.0 + debug: ~4.3.1 + engine.io-parser: ~5.2.1 + ws: ~8.11.0 + xmlhttprequest-ssl: ~2.0.0 + checksum: f93e09b842535a3f3e31b708cd30085b9e08a7a7ebf28f453e50e79e3fccf3f019474a46b41f7dc9164e3b8342c0b5d5a50a45299c1e2465d708c65140d05c92 + languageName: node + linkType: hard + +"engine.io-parser@npm:~5.2.1": + version: 5.2.1 + resolution: "engine.io-parser@npm:5.2.1" + checksum: 55b0e8e18500f50c1573675c53597c5552554ead08d3f30ff19fde6409e48f882a8e01f84e9772cd155c18a1d653d06f6bf57b4e1f8b834c63c9eaf3b657b88e + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.10.0": + version: 5.15.0 + resolution: "enhanced-resolve@npm:5.15.0" + dependencies: + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: fbd8cdc9263be71cc737aa8a7d6c57b43d6aa38f6cc75dde6fcd3598a130cc465f979d2f4d01bb3bf475acb43817749c79f8eef9be048683602ca91ab52e4f11 + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 + languageName: node + linkType: hard + +"entities@npm:^3.0.1": + version: 3.0.1 + resolution: "entities@npm:3.0.1" + checksum: aaf7f12033f0939be91f5161593f853f2da55866db55ccbf72f45430b8977e2b79dbd58c53d0fdd2d00bd7d313b75b0968d09f038df88e308aa97e39f9456572 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"err-code@npm:^3.0.1": + version: 3.0.1 + resolution: "err-code@npm:3.0.1" + checksum: aede1f1d5ebe6d6b30b5e3175e3cc13e67de2e2e1ad99ce4917e957d7b59e8451ed10ee37dbc6493521920a47082c479b9097e5c39438d4aff4cc84438568a5a + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"es-abstract@npm:^1.22.1": + version: 1.22.2 + resolution: "es-abstract@npm:1.22.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + arraybuffer.prototype.slice: ^1.0.2 + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + es-set-tostringtag: ^2.0.1 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.6 + get-intrinsic: ^1.2.1 + get-symbol-description: ^1.0.0 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.5 + is-array-buffer: ^3.0.2 + is-callable: ^1.2.7 + is-negative-zero: ^2.0.2 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + is-string: ^1.0.7 + is-typed-array: ^1.1.12 + is-weakref: ^1.0.2 + object-inspect: ^1.12.3 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.1 + safe-array-concat: ^1.0.1 + safe-regex-test: ^1.0.0 + string.prototype.trim: ^1.2.8 + string.prototype.trimend: ^1.0.7 + string.prototype.trimstart: ^1.0.7 + typed-array-buffer: ^1.0.0 + typed-array-byte-length: ^1.0.0 + typed-array-byte-offset: ^1.0.0 + typed-array-length: ^1.0.4 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.11 + checksum: cc70e592d360d7d729859013dee7a610c6b27ed8630df0547c16b0d16d9fe6505a70ee14d1af08d970fdd132b3f88c9ca7815ce72c9011608abf8ab0e55fc515 + languageName: node + linkType: hard + +"es-get-iterator@npm:^1.1.3": + version: 1.1.3 + resolution: "es-get-iterator@npm:1.1.3" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + has-symbols: ^1.0.3 + is-arguments: ^1.1.1 + is-map: ^2.0.2 + is-set: ^2.0.2 + is-string: ^1.0.7 + isarray: ^2.0.5 + stop-iteration-iterator: ^1.0.0 + checksum: 8fa118da42667a01a7c7529f8a8cca514feeff243feec1ce0bb73baaa3514560bd09d2b3438873cf8a5aaec5d52da248131de153b28e2638a061b6e4df13267d + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.1": + version: 2.0.1 + resolution: "es-set-tostringtag@npm:2.0.1" + dependencies: + get-intrinsic: ^1.1.3 + has: ^1.0.3 + has-tostringtag: ^1.0.0 + checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: ^1.1.4 + is-date-object: ^1.0.1 + is-symbol: ^1.0.2 + checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed + languageName: node + linkType: hard + +"es6-promise@npm:^4.0.3": + version: 4.2.8 + resolution: "es6-promise@npm:4.2.8" + checksum: 95614a88873611cb9165a85d36afa7268af5c03a378b35ca7bda9508e1d4f1f6f19a788d4bc755b3fd37c8ebba40782018e02034564ff24c9d6fa37e959ad57d + languageName: node + linkType: hard + +"es6-promisify@npm:^5.0.0": + version: 5.0.0 + resolution: "es6-promisify@npm:5.0.0" + dependencies: + es6-promise: ^4.0.3 + checksum: fbed9d791598831413be84a5374eca8c24800ec71a16c1c528c43a98e2dadfb99331483d83ae6094ddb9b87e6f799a15d1553cebf756047e0865c753bc346b92 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"eslint-plugin-i18n-json@npm:^3.1.0": + version: 3.1.0 + resolution: "eslint-plugin-i18n-json@npm:3.1.0" + dependencies: + chalk: ^2.3.2 + indent-string: ^3.2.0 + intl-messageformat-parser: ^5.4.0 + jest-diff: ^22.0.3 + jsonlint: ^1.6.2 + lodash.get: ^4.4.2 + lodash.isequal: ^4.5.0 + lodash.isplainobject: ^4.0.6 + lodash.set: ^4.3.2 + log-symbols: ^2.2.0 + plur: ^2.1.2 + pretty-format: ^22.0.3 + peerDependencies: + eslint: ">=4.0.0" + checksum: 863772fe5ee42518b8fab1590d010eee832e38a83e3b4d793ae8804889fdbe22bce67741d06bee9433ad99b87fd096ba9021d5d03683c6a2e1768ec190d153db + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"eth-block-tracker@npm:6.1.0": + version: 6.1.0 + resolution: "eth-block-tracker@npm:6.1.0" + dependencies: + "@metamask/safe-event-emitter": ^2.0.0 + "@metamask/utils": ^3.0.1 + json-rpc-random-id: ^1.0.1 + pify: ^3.0.0 + checksum: 33ee6375a26822649d1e9ac24a3c39d70338eb505715f72b9102fb82e40d7a48902b4a7dd4a33bb4f121b79707c5ab045777507a2881cfcdb385c8ccbb3ac2a0 + languageName: node + linkType: hard + +"eth-json-rpc-filters@npm:5.1.0": + version: 5.1.0 + resolution: "eth-json-rpc-filters@npm:5.1.0" + dependencies: + "@metamask/safe-event-emitter": ^2.0.0 + async-mutex: ^0.2.6 + eth-query: ^2.1.2 + json-rpc-engine: ^6.1.0 + pify: ^5.0.0 + checksum: 864092e96277953c399a139df66572b864bd41247c5c1d18e6529973804d4fd8962658d8b10571152554802fa8daaa1003588aee79ffce754e0bc57c39b771d5 + languageName: node + linkType: hard + +"eth-query@npm:^2.1.2": + version: 2.1.2 + resolution: "eth-query@npm:2.1.2" + dependencies: + json-rpc-random-id: ^1.0.0 + xtend: ^4.0.1 + checksum: 83daa0e28452c54722aec78cd24d036bad5b6e7c08035d98e10d4bea11f71662f12cab63ebd8a848d4df46ad316503d54ecccb41c9244d2ea8b29364b0a20201 + languageName: node + linkType: hard + +"eth-rpc-errors@npm:4.0.2": + version: 4.0.2 + resolution: "eth-rpc-errors@npm:4.0.2" + dependencies: + fast-safe-stringify: ^2.0.6 + checksum: 1dbdee8f416090f1d318e17bdee2251d174d73c8faa4286fa364bc51ae9105672045f2d078ec23ca6a2b4b92af7cfbe7fa1ba17ad49e591fc653a363bf8cbab2 + languageName: node + linkType: hard + +"eth-rpc-errors@npm:^4.0.2": + version: 4.0.3 + resolution: "eth-rpc-errors@npm:4.0.3" + dependencies: + fast-safe-stringify: ^2.0.6 + checksum: 5fa31d1a10fdb340733b9a55e38e7687222c501052ca20743cef4d0c911a9bbcc0cad54aa6bf3e4b428604c071ff519803060e1cbc79ddb7c9257c11d407d32a + languageName: node + linkType: hard + +"ethereum-cryptography@npm:^2.0.0": + version: 2.1.2 + resolution: "ethereum-cryptography@npm:2.1.2" + dependencies: + "@noble/curves": 1.1.0 + "@noble/hashes": 1.3.1 + "@scure/bip32": 1.3.1 + "@scure/bip39": 1.2.1 + checksum: 2e8f7b8cc90232ae838ab6a8167708e8362621404d26e79b5d9e762c7b53d699f7520aff358d9254de658fcd54d2d0af168ff909943259ed27dc4cef2736410c + languageName: node + linkType: hard + +"ethers@npm:^5.5.3, ethers@npm:^5.6.5": + version: 5.7.2 + resolution: "ethers@npm:5.7.2" + dependencies: + "@ethersproject/abi": 5.7.0 + "@ethersproject/abstract-provider": 5.7.0 + "@ethersproject/abstract-signer": 5.7.0 + "@ethersproject/address": 5.7.0 + "@ethersproject/base64": 5.7.0 + "@ethersproject/basex": 5.7.0 + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/constants": 5.7.0 + "@ethersproject/contracts": 5.7.0 + "@ethersproject/hash": 5.7.0 + "@ethersproject/hdnode": 5.7.0 + "@ethersproject/json-wallets": 5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/networks": 5.7.1 + "@ethersproject/pbkdf2": 5.7.0 + "@ethersproject/properties": 5.7.0 + "@ethersproject/providers": 5.7.2 + "@ethersproject/random": 5.7.0 + "@ethersproject/rlp": 5.7.0 + "@ethersproject/sha2": 5.7.0 + "@ethersproject/signing-key": 5.7.0 + "@ethersproject/solidity": 5.7.0 + "@ethersproject/strings": 5.7.0 + "@ethersproject/transactions": 5.7.0 + "@ethersproject/units": 5.7.0 + "@ethersproject/wallet": 5.7.0 + "@ethersproject/web": 5.7.1 + "@ethersproject/wordlists": 5.7.0 + checksum: b7c08cf3e257185a7946117dbbf764433b7ba0e77c27298dec6088b3bc871aff711462b0621930c56880ff0a7ceb8b1d3a361ffa259f93377b48e34107f62553 + languageName: node + linkType: hard + +"ethjs-util@npm:^0.1.6": + version: 0.1.6 + resolution: "ethjs-util@npm:0.1.6" + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + checksum: 1f42959e78ec6f49889c49c8a98639e06f52a15966387dd39faf2930db48663d026efb7db2702dcffe7f2a99c4a0144b7ce784efdbf733f4077aae95de76d65f + languageName: node + linkType: hard + +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.7": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + languageName: node + linkType: hard + +"events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + +"execa@npm:^5.0.0": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + 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 + checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 + languageName: node + linkType: hard + +"expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"eyes@npm:^0.1.8": + version: 0.1.8 + resolution: "eyes@npm:0.1.8" + checksum: c31703a92bf36ba75ee8d379ee7985c24ee6149f3a6175f44cec7a05b178c38bce9836d3ca48c9acb0329a960ac2c4b2ead4e60cdd4fe6e8c92cad7cd6913687 + languageName: node + linkType: hard + +"fast-fifo@npm:^1.0.0": + version: 1.3.2 + resolution: "fast-fifo@npm:1.3.2" + checksum: 6bfcba3e4df5af7be3332703b69a7898a8ed7020837ec4395bb341bd96cc3a6d86c3f6071dd98da289618cf2234c70d84b2a6f09a33dd6f988b1ff60d8e54275 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-redact@npm:^3.0.0": + version: 3.3.0 + resolution: "fast-redact@npm:3.3.0" + checksum: 3f7becc70a5a2662a9cbfdc52a4291594f62ae998806ee00315af307f32d9559dbf512146259a22739ee34401950ef47598c1f4777d33b0ed5027203d67f549c + languageName: node + linkType: hard + +"fast-safe-stringify@npm:^2.0.6": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: a851cbddc451745662f8f00ddb622d6766f9bd97642dabfd9a405fb0d646d69fc0b9a1243cbf67f5f18a39f40f6fa821737651ff1bceeba06c9992ca2dc5bd3d + languageName: node + linkType: hard + +"fast-stable-stringify@npm:^1.0.0": + version: 1.0.0 + resolution: "fast-stable-stringify@npm:1.0.0" + checksum: ef1203d246a7e8ac15e2bfbda0a89fa375947bccf9f7910be0ea759856dbe8ea5024a0d8cc2cceabe18a9cb67e95927b78bb6173a3ae37ec55a518cf36e5244b + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"figures@npm:^1.4.0": + version: 1.7.0 + resolution: "figures@npm:1.7.0" + dependencies: + escape-string-regexp: ^1.0.5 + object-assign: ^4.1.0 + checksum: d77206deba991a7977f864b8c8edf9b8b43b441be005482db04b0526e36263adbdb22c1c6d2df15a1ad78d12029bd1aa41ccebcb5d425e1f2cf629c6daaa8e10 + languageName: node + linkType: hard + +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 + languageName: node + linkType: hard + +"files-from-path@npm:^0.2.4": + version: 0.2.6 + resolution: "files-from-path@npm:0.2.6" + dependencies: + err-code: ^3.0.1 + graceful-fs: ^4.2.9 + ipfs-unixfs: ^6.0.5 + it-glob: ^0.0.13 + checksum: 661c379fb55223a84bdc8c9f237aeb569590ab896e64136e6f9df7bd3f8304f838825d528ea5deb6f1a9fb76a9ee928f4536e42f248581d5e421cf544df62f93 + languageName: node + linkType: hard + +"filesize@npm:^10.0.8": + version: 10.1.0 + resolution: "filesize@npm:10.1.0" + checksum: 8dd35fe85ebc56e9ee99b6814a854f5d5ee12d09a05cf38ebc1865b5efca128a2bb7480d3c2e841a3d20d45c756fc669efecbf65b6842afd75b7f20648306654 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"filter-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "filter-obj@npm:1.1.0" + checksum: cf2104a7c45ff48e7f505b78a3991c8f7f30f28bd8106ef582721f321f1c6277f7751aacd5d83026cb079d9d5091082f588d14a72e7c5d720ece79118fa61e10 + languageName: node + linkType: hard + +"find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "find-root@npm:1.1.0" + checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.14.9": + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" + peerDependenciesMeta: + debug: + optional: true + checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231 + languageName: node + linkType: hard + +"font-awesome@npm:^4.7.0": + version: 4.7.0 + resolution: "font-awesome@npm:4.7.0" + checksum: fa223f6e3b27e97d2d09cdbf0c1363e2ad18d2a685fc045f54e86394db59f7c113482a819de3b6489f42a630a8ec5911b8e65718e45f7cace1c0a1b05d7fce08 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 2b0ff4ce708d99715ad14a6d1f894e2a83242e4a52ccfcefaee5e40050562e5f6dafc1adbb4ce2d4ab47279a45dc736ab91ea5042d843c3c092820dfe032efb1 + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"get-browser-rtc@npm:^1.1.0": + version: 1.1.0 + resolution: "get-browser-rtc@npm:1.1.0" + checksum: 90dd17ca3ba2a61aaa57b7497efea49afa718b5d048cac155a7f84ac850c921006946893e6a5d981c66c5ca69d19f6aadc5c773ffdf2e860896781a8e7e0a2e0 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1": + version: 1.2.1 + resolution: "get-intrinsic@npm:1.2.1" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f + languageName: node + linkType: hard + +"get-iterator@npm:^1.0.2": + version: 1.0.2 + resolution: "get-iterator@npm:1.0.2" + checksum: 4a819aa91ecb61f4fd507bd62e3468d55f642f06011f944c381a739a21f685c36a37feb9324c8971e7c0fc70ca172066c45874fa2d1dcdf4b4fb8e43f16058c2 + languageName: node + linkType: hard + +"get-nonce@npm:^1.0.0": + version: 1.0.1 + resolution: "get-nonce@npm:1.0.1" + checksum: e2614e43b4694c78277bb61b0f04583d45786881289285c73770b07ded246a98be7e1f78b940c80cbe6f2b07f55f0b724e6db6fd6f1bcbd1e8bdac16521074ed + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.0.0": + version: 1.0.0 + resolution: "get-symbol-description@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 + languageName: node + linkType: hard + +"gif-picker-react@npm:^1.1.0": + version: 1.3.0 + resolution: "gif-picker-react@npm:1.3.0" + peerDependencies: + react: ">=17" + react-dom: ">=17" + checksum: ccc1d275ebb597f5e109d6500677d365fe736db6a40e86970529dc596fc2929a16d2a18dd97513b408eb230ad1e5e7d28c7d3a00a2a193ff98f7975a44b24718 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.3": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + 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 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"global@npm:^4.4.0": + version: 4.4.0 + resolution: "global@npm:4.4.0" + dependencies: + min-document: ^2.19.0 + process: ^0.11.10 + checksum: 9c057557c8f5a5bcfbeb9378ba4fe2255d04679452be504608dd5f13b54edf79f7be1db1031ea06a4ec6edd3b9f5f17d2d172fb47e6c69dae57fd84b7e72b77f + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" + dependencies: + define-properties: ^1.1.3 + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"hamt-sharding@npm:^2.0.0": + version: 2.0.1 + resolution: "hamt-sharding@npm:2.0.1" + dependencies: + sparse-array: ^1.3.1 + uint8arrays: ^3.0.0 + checksum: c3032fc1447abbda9ef5eda52edfb2df542a74eabcc01b1a38a05f5185c6847163311f383c64602dc4e8d086c5e545a40767b4cfc6e7d4de2a3e58bb85e5c8e5 + languageName: node + linkType: hard + +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc + languageName: node + linkType: hard + +"has-ansi@npm:^2.0.0": + version: 2.0.0 + resolution: "has-ansi@npm:2.0.0" + dependencies: + ansi-regex: ^2.0.0 + checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b + languageName: node + linkType: hard + +"has-color@npm:~0.1.0": + version: 0.1.7 + resolution: "has-color@npm:0.1.7" + checksum: 5753d76b1330bc1f5a07171f222ed0718f5ec2d64d5677800e434f183a99f7042f5cda43c9625a2d0f0204063aa03499a66f1c15283d789773b3544f18f93f58 + languageName: node + linkType: hard + +"has-dynamic-import@npm:^2.0.1": + version: 2.0.1 + resolution: "has-dynamic-import@npm:2.0.1" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 1cb60255cdd354a5f53997dd4c8ae0f821706ced3d1047bb810cb74400f28988b08d4d986318cb6610b79e6b9993a6592e678b6cef3ef0b71ab553eaa99b9c4d + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0": + version: 1.0.0 + resolution: "has-property-descriptors@npm:1.0.0" + dependencies: + get-intrinsic: ^1.1.1 + checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0": + version: 1.0.0 + resolution: "has-tostringtag@npm:1.0.0" + dependencies: + has-symbols: ^1.0.2 + checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.4 + resolution: "has@npm:1.0.4" + checksum: 8a11ba062e0627c9578a1d08285401e39f1d071a9692ddf793199070edb5648b21c774dd733e2a181edd635bf6862731885f476f4ccf67c998d7a5ff7cef2550 + languageName: node + linkType: hard + +"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: ^2.0.3 + minimalistic-assert: ^1.0.1 + checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f + languageName: node + linkType: hard + +"hey-listen@npm:^1.0.8": + version: 1.0.8 + resolution: "hey-listen@npm:1.0.8" + checksum: 6bad60b367688f5348e25e7ca3276a74b59ac5a09b0455e6ff8ab7d4a9e38cd2116c708a7dcd8a954d27253ce1d8717ec891d175723ea739885b828cf44e4072 + languageName: node + linkType: hard + +"hls.js@npm:^1.4.12": + version: 1.4.12 + resolution: "hls.js@npm:1.4.12" + checksum: a30c055ea1fc9ee9f4eee1b8b17f7ed7900ebe25e790de4f3097a03afb841cf138d51b67ef27e09700672395e305302d1d68b3b9f6c0bce3c1c6692fad86008c + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: ^1.0.3 + minimalistic-assert: ^1.0.0 + minimalistic-crypto-utils: ^1.0.1 + checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 + languageName: node + linkType: hard + +"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: ^16.7.0 + checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + languageName: node + linkType: hard + +"hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" + dependencies: + lru-cache: ^6.0.0 + checksum: c3f87b3c2f7eb8c2748c8f49c0c2517c9a95f35d26f4bf54b2a8cba05d2e668f3753548b6ea366b18ec8dadb4e12066e19fa382a01496b0ffa0497eb23cbe461 + languageName: node + linkType: hard + +"html-dom-parser@npm:1.2.0": + version: 1.2.0 + resolution: "html-dom-parser@npm:1.2.0" + dependencies: + domhandler: 4.3.1 + htmlparser2: 7.2.0 + checksum: d5e72baba7e1a9da334f023f3b3669247c5cebaf51b23011764202c11b3850339aa0fef9f26e00c2b0510e75fe6183453fcba33304a006f9fcde3d037bf60f3d + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + languageName: node + linkType: hard + +"html-react-parser@npm:^1.4.13": + version: 1.4.14 + resolution: "html-react-parser@npm:1.4.14" + dependencies: + domhandler: 4.3.1 + html-dom-parser: 1.2.0 + react-property: 2.0.0 + style-to-js: 1.1.1 + peerDependencies: + react: 0.14 || 15 || 16 || 17 || 18 + checksum: 14745d2949da38c31d9812ed0f7d77bbbffcf5a6db441d3c703d57ca884ebe705fc2dbc312f47353c349f11f5e61f4735b6610ed905cb4d06da56d475ecc2892 + languageName: node + linkType: hard + +"html-tokenize@npm:^2.0.0": + version: 2.0.1 + resolution: "html-tokenize@npm:2.0.1" + dependencies: + buffer-from: ~0.1.1 + inherits: ~2.0.1 + minimist: ~1.2.5 + readable-stream: ~1.0.27-1 + through2: ~0.4.1 + bin: + html-tokenize: bin/cmd.js + checksum: 4e04078fd22cf274fc1fa430490af3feda1c3bc4dd2fc88880caf6c2e816992d508bc44a7b16721b713a6b98d880f43e10ea4b169529056134cd488403adc8fc + languageName: node + linkType: hard + +"htmlparser2@npm:7.2.0": + version: 7.2.0 + resolution: "htmlparser2@npm:7.2.0" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.2.2 + domutils: ^2.8.0 + entities: ^3.0.1 + checksum: 96563d9965729cfcb3f5f19c26d013c6831b4cb38d79d8c185e9cd669ea6a9ffe8fb9ccc74d29a068c9078aa0e2767053ed6b19aa32723c41550340d0094bea0 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"idb-keyval@npm:^6.0.3": + version: 6.2.1 + resolution: "idb-keyval@npm:6.2.1" + checksum: 7c0836f832096086e99258167740181132a71dd2694c8b8454a4f5ec69114ba6d70983115153306f0b6de1c8d3bad04f67eed3dff8f50c96815b9985d6d78470 + languageName: node + linkType: hard + +"ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"immer@npm:^10.0.2": + version: 10.0.3 + resolution: "immer@npm:10.0.3" + checksum: 76acabe6f40e752028313762ba477a5d901e57b669f3b8fb406b87b9bb9b14e663a6fbbf5a6d1ab323737dd38f4b2494a4e28002045b88948da8dbf482309f28 + languageName: node + linkType: hard + +"immer@npm:^9.0.21": + version: 9.0.21 + resolution: "immer@npm:9.0.21" + checksum: 70e3c274165995352f6936695f0ef4723c52c92c92dd0e9afdfe008175af39fa28e76aafb3a2ca9d57d1fb8f796efc4dd1e1cc36f18d33fa5b74f3dfb0375432 + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: ^4.2.0 + resolve-cwd: ^3.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^3.2.0": + version: 3.2.0 + resolution: "indent-string@npm:3.2.0" + checksum: a0b72603bba6c985d367fda3a25aad16423d2056b22a7e83ee2dd9ce0ce3d03d1e078644b679087aa7edf1cfb457f0d96d9eeadc0b12f38582088cc00e995d2f + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3, inherits@npm:~2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"inline-style-parser@npm:0.1.1": + version: 0.1.1 + resolution: "inline-style-parser@npm:0.1.1" + checksum: 5d545056a3e1f2bf864c928a886a0e1656a3517127d36917b973de581bd54adc91b4bf1febcb0da054f204b4934763f1a4e09308b4d55002327cf1d48ac5d966 + languageName: node + linkType: hard + +"interface-blockstore@npm:^2.0.2, interface-blockstore@npm:^2.0.3": + version: 2.0.3 + resolution: "interface-blockstore@npm:2.0.3" + dependencies: + interface-store: ^2.0.2 + multiformats: ^9.0.4 + checksum: 01248c06fd88ba2cf3c264868dd1363e20266b914c51a0b52ad2303f7c00cc9a52ce1d1830b073cc7293edf195110e4d84ac5d34781bdab5f763f91eeba10898 + languageName: node + linkType: hard + +"interface-datastore@npm:^6.0.2": + version: 6.1.1 + resolution: "interface-datastore@npm:6.1.1" + dependencies: + interface-store: ^2.0.2 + nanoid: ^3.0.2 + uint8arrays: ^3.0.0 + checksum: a0388adabf029be229bbfce326bbe64fd3353373512e7e6ed4283e06710bfa141db118e3536f8535a65016a0abeec631b888d42790b00637879d6ae56cf728cd + languageName: node + linkType: hard + +"interface-store@npm:^2.0.1, interface-store@npm:^2.0.2": + version: 2.0.2 + resolution: "interface-store@npm:2.0.2" + checksum: 0e80adb1de9ff57687cfa1b08499702b72cacf33a7e0320ac7781989f3685d73f2a84996358f540250229afa19c7acebf03085087762f718035622ea6a1a5b8a + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": + version: 1.0.5 + resolution: "internal-slot@npm:1.0.5" + dependencies: + get-intrinsic: ^1.2.0 + has: ^1.0.3 + side-channel: ^1.0.4 + checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a + languageName: node + linkType: hard + +"intl-messageformat-parser@npm:^5.4.0": + version: 5.5.1 + resolution: "intl-messageformat-parser@npm:5.5.1" + dependencies: + "@formatjs/intl-numberformat": ^5.5.2 + checksum: 31cd86f6dbbbf58bac316f7a59d9c47d4ae0dfee5f6093165121416f6b044d95fe051f1794f2824ce453be8bb8a696da45c20a9bfc64f8dd059dfb04a32c6437 + languageName: node + linkType: hard + +"invariant@npm:^2.2.1, invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: ^1.0.0 + checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + languageName: node + linkType: hard + +"ip-regex@npm:^4.0.0": + version: 4.3.0 + resolution: "ip-regex@npm:4.3.0" + checksum: 7ff904b891221b1847f3fdf3dbb3e6a8660dc39bc283f79eb7ed88f5338e1a3d1104b779bc83759159be266249c59c2160e779ee39446d79d4ed0890dfd06f08 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"ipfs-car@npm:^0.7.0": + version: 0.7.0 + resolution: "ipfs-car@npm:0.7.0" + dependencies: + "@ipld/car": ^3.2.3 + "@web-std/blob": ^3.0.1 + bl: ^5.0.0 + blockstore-core: ^1.0.2 + browser-readablestream-to-it: ^1.0.2 + idb-keyval: ^6.0.3 + interface-blockstore: ^2.0.2 + ipfs-core-types: ^0.8.3 + ipfs-core-utils: ^0.12.1 + ipfs-unixfs-exporter: ^7.0.4 + ipfs-unixfs-importer: ^9.0.4 + ipfs-utils: ^9.0.2 + it-all: ^1.0.5 + it-last: ^1.0.5 + it-pipe: ^1.1.0 + meow: ^9.0.0 + move-file: ^2.1.0 + multiformats: ^9.6.3 + stream-to-it: ^0.2.3 + streaming-iterables: ^6.0.0 + uint8arrays: ^3.0.0 + bin: + ipfs-car: dist/cjs/cli/cli.js + 🚘: dist/cjs/cli/cli.js + checksum: 52c0a9c68048a92f2d5088556439d47d76ff951cf6077282d6426c24492c0965b65792fa415bf2b119122f71e327583b2c39aee21592cc490572d5daa1356eff + languageName: node + linkType: hard + +"ipfs-core-types@npm:^0.8.3, ipfs-core-types@npm:^0.8.4": + version: 0.8.4 + resolution: "ipfs-core-types@npm:0.8.4" + dependencies: + interface-datastore: ^6.0.2 + multiaddr: ^10.0.0 + multiformats: ^9.4.13 + checksum: 0bf10eb1a469404b4af302356d16c8fb517fb7df15a4d02d3a3930b8fd7d78133220aaf3357b6066e6961187270af611f00483762c4383d24f91884c412c2099 + languageName: node + linkType: hard + +"ipfs-core-utils@npm:^0.12.1": + version: 0.12.2 + resolution: "ipfs-core-utils@npm:0.12.2" + dependencies: + any-signal: ^2.1.2 + blob-to-it: ^1.0.1 + browser-readablestream-to-it: ^1.0.1 + debug: ^4.1.1 + err-code: ^3.0.1 + ipfs-core-types: ^0.8.4 + ipfs-unixfs: ^6.0.3 + ipfs-utils: ^9.0.2 + it-all: ^1.0.4 + it-map: ^1.0.4 + it-peekable: ^1.0.2 + it-to-stream: ^1.0.0 + merge-options: ^3.0.4 + multiaddr: ^10.0.0 + multiaddr-to-uri: ^8.0.0 + multiformats: ^9.4.13 + nanoid: ^3.1.23 + parse-duration: ^1.0.0 + timeout-abort-controller: ^1.1.1 + uint8arrays: ^3.0.0 + checksum: 27aca8bd75f2c89580cd458cc791e2fa6d6f6ee51a0a491c24fa9c50b9bbee4f9eb0c080466cdc8683bfb51935661a7858768bbd656618dc51eb22deafa9f270 + languageName: node + linkType: hard + +"ipfs-unixfs-exporter@npm:^7.0.4": + version: 7.0.11 + resolution: "ipfs-unixfs-exporter@npm:7.0.11" + dependencies: + "@ipld/dag-cbor": ^7.0.2 + "@ipld/dag-pb": ^2.0.2 + "@multiformats/murmur3": ^1.0.3 + err-code: ^3.0.1 + hamt-sharding: ^2.0.0 + interface-blockstore: ^2.0.3 + ipfs-unixfs: ^6.0.0 + it-last: ^1.0.5 + multiformats: ^9.4.2 + uint8arrays: ^3.0.0 + checksum: b419addc600e61bf5952615f7749f866689922a5bb1a083e90b68c95bf227bf1ab0398acb326e868cb828df30589eacec91035470955bb3cdcfb10df2f6d8a1f + languageName: node + linkType: hard + +"ipfs-unixfs-importer@npm:^9.0.4": + version: 9.0.10 + resolution: "ipfs-unixfs-importer@npm:9.0.10" + dependencies: + "@ipld/dag-pb": ^2.0.2 + "@multiformats/murmur3": ^1.0.3 + bl: ^5.0.0 + err-code: ^3.0.1 + hamt-sharding: ^2.0.0 + interface-blockstore: ^2.0.3 + ipfs-unixfs: ^6.0.0 + it-all: ^1.0.5 + it-batch: ^1.0.8 + it-first: ^1.0.6 + it-parallel-batch: ^1.0.9 + merge-options: ^3.0.4 + multiformats: ^9.4.2 + rabin-wasm: ^0.1.4 + uint8arrays: ^3.0.0 + checksum: 062e0a7d6f21fc3020959ae33947531cec652e058bd94e418f7bccb56884ac8f997f929c6ca044a1b2c21bb5f3842d37ae69ed118e3495c2af68d06d6df4a8f9 + languageName: node + linkType: hard + +"ipfs-unixfs@npm:^6.0.0, ipfs-unixfs@npm:^6.0.3, ipfs-unixfs@npm:^6.0.5": + version: 6.0.9 + resolution: "ipfs-unixfs@npm:6.0.9" + dependencies: + err-code: ^3.0.1 + protobufjs: ^6.10.2 + checksum: 025d852c3cfb09b813b35f7a4f7a06bd0ff904f88b35cdf54c6ea1eb021f1597ab9c2739adabbae9cfe645a2323598bd7974ff4a8898701bc4ba92842bf21736 + languageName: node + linkType: hard + +"ipfs-utils@npm:^9.0.2": + version: 9.0.14 + resolution: "ipfs-utils@npm:9.0.14" + dependencies: + any-signal: ^3.0.0 + browser-readablestream-to-it: ^1.0.0 + buffer: ^6.0.1 + electron-fetch: ^1.7.2 + err-code: ^3.0.1 + is-electron: ^2.2.0 + iso-url: ^1.1.5 + it-all: ^1.0.4 + it-glob: ^1.0.1 + it-to-stream: ^1.0.0 + merge-options: ^3.0.4 + nanoid: ^3.1.20 + native-fetch: ^3.0.0 + node-fetch: ^2.6.8 + react-native-fetch-api: ^3.0.0 + stream-to-it: ^0.2.2 + checksum: 08108e03ea7b90e0fa11b76a4e24bd29d7e027c603494b53c1cc37b367fb559eaeea7b0f10b2e83ee419d50cdcb4d8105febdf185cab75c7e55afd4c8ed51aba + languageName: node + linkType: hard + +"ipns@npm:^0.16.0": + version: 0.16.0 + resolution: "ipns@npm:0.16.0" + dependencies: + cborg: ^1.3.3 + debug: ^4.2.0 + err-code: ^3.0.1 + interface-datastore: ^6.0.2 + libp2p-crypto: ^0.21.0 + long: ^4.0.0 + multiformats: ^9.4.5 + peer-id: ^0.16.0 + protobufjs: ^6.10.2 + timestamp-nano: ^1.0.0 + uint8arrays: ^3.0.0 + checksum: ef7be2c2afc7474c8ea9126ebe45598bba48675a3d613ab58fe988d566fdb19174f429ae035ccfd45e50ad9836db4f00e803bde154002479027214394e0fe1ad + languageName: node + linkType: hard + +"irregular-plurals@npm:^1.0.0": + version: 1.4.0 + resolution: "irregular-plurals@npm:1.4.0" + checksum: 43f98bef68101bfc1bbd23d1a6ec2c8175f40707639880f7c007784bf3e8352794418039c29d0fd668c3516ee5f5156d765b5266e239bf5a5e1705d72fb4e61e + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": + version: 1.1.1 + resolution: "is-arguments@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": + version: 3.0.2 + resolution: "is-array-buffer@npm:3.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.0 + is-typed-array: ^1.1.10 + checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: ^1.0.1 + checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0": + version: 2.13.0 + resolution: "is-core-module@npm:2.13.0" + dependencies: + has: ^1.0.3 + checksum: 053ab101fb390bfeb2333360fd131387bed54e476b26860dc7f5a700bbf34a0ec4454f7c8c4d43e8a0030957e4b3db6e16d35e1890ea6fb654c833095e040355 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: ^1.0.0 + checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + languageName: node + linkType: hard + +"is-electron@npm:^2.2.0": + version: 2.2.2 + resolution: "is-electron@npm:2.2.2" + checksum: de5aa8bd8d72c96675b8d0f93fab4cc21f62be5440f65bc05c61338ca27bd851a64200f31f1bf9facbaa01b3dbfed7997b2186741d84b93b63e0aff1db6a9494 + languageName: node + linkType: hard + +"is-finite@npm:^1.0.1": + version: 1.1.0 + resolution: "is-finite@npm:1.1.0" + checksum: 532b97ed3d03e04c6bd203984d9e4ba3c0c390efee492bad5d1d1cd1802a68ab27adbd3ef6382f6312bed6c8bb1bd3e325ea79a8dc8fe080ed7a06f5f97b93e7 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.7": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + languageName: node + linkType: hard + +"is-hex-prefixed@npm:1.0.0": + version: 1.0.0 + resolution: "is-hex-prefixed@npm:1.0.0" + checksum: 5ac58e6e528fb029cc43140f6eeb380fad23d0041cc23154b87f7c9a1b728bcf05909974e47248fd0b7fcc11ba33cf7e58d64804883056fabd23e2b898be41de + languageName: node + linkType: hard + +"is-ip@npm:^3.1.0": + version: 3.1.0 + resolution: "is-ip@npm:3.1.0" + dependencies: + ip-regex: ^4.0.0 + checksum: da2c2b282407194adf2320bade0bad94be9c9d0bdab85ff45b1b62d8185f31c65dff3884519d57bf270277e5ea2046c7916a6e5a6db22fe4b7ddcdd3760f23eb + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-map@npm:^2.0.1, is-map@npm:^2.0.2": + version: 2.0.2 + resolution: "is-map@npm:2.0.2" + checksum: ace3d0ecd667bbdefdb1852de601268f67f2db725624b1958f279316e13fecb8fa7df91fd60f690d7417b4ec180712f5a7ee967008e27c65cfd475cc84337728 + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.2": + version: 2.0.2 + resolution: "is-negative-zero@npm:2.0.2" + checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + +"is-plain-obj@npm:^2.1.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + languageName: node + linkType: hard + +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 + languageName: node + linkType: hard + +"is-set@npm:^2.0.1, is-set@npm:^2.0.2": + version: 2.0.2 + resolution: "is-set@npm:2.0.2" + checksum: b64343faf45e9387b97a6fd32be632ee7b269bd8183701f3b3f5b71a7cf00d04450ed8669d0bd08753e08b968beda96fca73a10fd0ff56a32603f64deba55a57 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "is-shared-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: ^1.0.2 + checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": + version: 1.1.12 + resolution: "is-typed-array@npm:1.1.12" + dependencies: + which-typed-array: ^1.1.11 + checksum: 4c89c4a3be07186caddadf92197b17fda663a9d259ea0d44a85f171558270d36059d1c386d34a12cba22dfade5aba497ce22778e866adc9406098c8fc4771796 + languageName: node + linkType: hard + +"is-typedarray@npm:1.0.0, is-typedarray@npm:^1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 + languageName: node + linkType: hard + +"is-weakmap@npm:^2.0.1": + version: 2.0.1 + resolution: "is-weakmap@npm:2.0.1" + checksum: 1222bb7e90c32bdb949226e66d26cb7bce12e1e28e3e1b40bfa6b390ba3e08192a8664a703dff2a00a84825f4e022f9cd58c4599ff9981ab72b1d69479f4f7f6 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.1": + version: 2.0.2 + resolution: "is-weakset@npm:2.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 5d8698d1fa599a0635d7ca85be9c26d547b317ed8fd83fc75f03efbe75d50001b5eececb1e9971de85fcde84f69ae6f8346bc92d20d55d46201d328e4c74a367 + languageName: node + linkType: hard + +"isarray@npm:0.0.1": + version: 0.0.1 + resolution: "isarray@npm:0.0.1" + checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"iso-random-stream@npm:^2.0.0": + version: 2.0.2 + resolution: "iso-random-stream@npm:2.0.2" + dependencies: + events: ^3.3.0 + readable-stream: ^3.4.0 + checksum: 53d44061cc7a000df4a35aa544fe04c7d0c903238ee8bb903b5eb280edaa6862512f7f7804cc4e35598e20accf9effc1131bdd6c8f5554ccf96e731ce969d77b + languageName: node + linkType: hard + +"iso-url@npm:^1.1.5": + version: 1.2.1 + resolution: "iso-url@npm:1.2.1" + checksum: 1af98c4ed6a39598407fd8c3c13e997c978985f477af2be3390d2aa3e422b4b5992ffbb0dac68656b165c71850fff748ac1309d29d4f2a728707d76bf0f98557 + languageName: node + linkType: hard + +"isomorphic-ws@npm:^4.0.1": + version: 4.0.1 + resolution: "isomorphic-ws@npm:4.0.1" + peerDependencies: + ws: "*" + checksum: d7190eadefdc28bdb93d67b5f0c603385aaf87724fa2974abb382ac1ec9756ed2cfb27065cbe76122879c2d452e2982bc4314317f3d6c737ddda6c047328771a + languageName: node + linkType: hard + +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^6.3.0 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.1 + resolution: "istanbul-lib-instrument@npm:6.0.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^7.5.4 + checksum: fb23472e739cfc9b027cefcd7d551d5e7ca7ff2817ae5150fab99fe42786a7f7b56a29a2aa8309c37092e18297b8003f9c274f50ca4360949094d17fbac81472 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^4.0.0 + supports-color: ^7.1.0 + checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + source-map: ^0.6.1 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.6 + resolution: "istanbul-reports@npm:3.1.6" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 44c4c0582f287f02341e9720997f9e82c071627e1e862895745d5f52ec72c9b9f38e1d12370015d2a71dcead794f34c7732aaef3fab80a24bc617a21c3d911d6 + languageName: node + linkType: hard + +"it-all@npm:^1.0.4, it-all@npm:^1.0.5": + version: 1.0.6 + resolution: "it-all@npm:1.0.6" + checksum: 7ca9a528c08ebe2fc8a3c93a41409219d18325ed31fedb9834ebac2822f0b2a96d7abcb6cbfa092114ab4d5f08951e694c7a2c3929ce4b5300769e710ae665db + languageName: node + linkType: hard + +"it-batch@npm:^1.0.8, it-batch@npm:^1.0.9": + version: 1.0.9 + resolution: "it-batch@npm:1.0.9" + checksum: b1db82fa51db579bd880f84ad48eba8b4dfca5aec38a5779faa58849aec6b83a2f8b6514bccb6ce9fd49782953b1b399d7b568f35cfb6df54f8a376801d5106e + languageName: node + linkType: hard + +"it-drain@npm:^1.0.4": + version: 1.0.5 + resolution: "it-drain@npm:1.0.5" + checksum: 568a07e54302e2f933f61260e8e43b0d14f753470dd03d26e87e568cdde0ba6a7fd939cc10f223142e8007bb7c6b668c9207c64bd1c9b07105f06cb61fc8673e + languageName: node + linkType: hard + +"it-filter@npm:^1.0.2": + version: 1.0.3 + resolution: "it-filter@npm:1.0.3" + checksum: 4eb39fdc9e3a09eb030a0a0e7eb295eb0dbc261a428da9c8062f565c158b1ea2939ffd92c0b13ec48055278f93f1d7b719174b9f067f0ceefbf8fd58bd4e937d + languageName: node + linkType: hard + +"it-first@npm:^1.0.6": + version: 1.0.7 + resolution: "it-first@npm:1.0.7" + checksum: 0c9106d29120f02e68a08118de328437fb44c966385635d672684d4f0321ee22ca470a30f390132bdb454da0d4d3abb82c796dad8e391a827f1a3446711c7685 + languageName: node + linkType: hard + +"it-glob@npm:^0.0.13": + version: 0.0.13 + resolution: "it-glob@npm:0.0.13" + dependencies: + "@types/minimatch": ^3.0.4 + minimatch: ^3.0.4 + checksum: 8903bd0b2a2e6b13a09b2d4bafe6d02845ec405da27ee0916dbe799f8f23e5ef57854596b04d3fc2353ffac918fac3388d0b37e8b18a5aaad1b925655948015c + languageName: node + linkType: hard + +"it-glob@npm:^1.0.1": + version: 1.0.2 + resolution: "it-glob@npm:1.0.2" + dependencies: + "@types/minimatch": ^3.0.4 + minimatch: ^3.0.4 + checksum: 629e7b66510006041df98882acfd73ac785836d51fc3ffa5c83c7099f931b3287a64c5a3772e7c1e46b63f1d511a9222f5b637c50f1c738222b46d104ff2e91c + languageName: node + linkType: hard + +"it-last@npm:^1.0.5": + version: 1.0.6 + resolution: "it-last@npm:1.0.6" + checksum: bc7b68ddd6cae902f0095d0c7ccb0078abdfa41fbf55862a9df9e30ae74be08282b5b3d21f40e6103af0d202144974e216d3c44f3e8f93c2c3f890322b02fcfa + languageName: node + linkType: hard + +"it-map@npm:^1.0.4": + version: 1.0.6 + resolution: "it-map@npm:1.0.6" + checksum: 5eb9da69e5d58624c79cea13dd8eeffe8a1ab6a28a527ac4d0301304279ffbe8da94faf50aa269e2a1630c94dc30a6bfe7a135bfb0c7e887216efad7c41a9f52 + languageName: node + linkType: hard + +"it-parallel-batch@npm:^1.0.9": + version: 1.0.11 + resolution: "it-parallel-batch@npm:1.0.11" + dependencies: + it-batch: ^1.0.9 + checksum: 4c4ad170e95f584c70a83ed39b582d1c574c24830242afbbcc948c151b6a0a7c9cff7067680b8b850662a2b52850c40e3b3ed765cf2027f92e01ce3e0f15bce3 + languageName: node + linkType: hard + +"it-peekable@npm:^1.0.2": + version: 1.0.3 + resolution: "it-peekable@npm:1.0.3" + checksum: 6e9d68cbf582e301f191b8ad2660957c12c8100804a298fd5732ee35f2dd466a6af64d88d91343f2614675b4d4fb546618335303e9356659a9a0868c08b1ca54 + languageName: node + linkType: hard + +"it-pipe@npm:^1.1.0": + version: 1.1.0 + resolution: "it-pipe@npm:1.1.0" + checksum: d653078f1543851f55070e38426dbbebad1303e9adde5238e4192b8b38ac7e4a1dcc149ccf3e4269759d1cbdd00be98b346fc8db81117c81017f09577f050e8e + languageName: node + linkType: hard + +"it-take@npm:^1.0.1": + version: 1.0.2 + resolution: "it-take@npm:1.0.2" + checksum: f669358761eea8ed295976aab50374ae6cf0fa0a31b3fe98bfcef17c80fbe23bb36e3b53b9bf6ca08cb90380203e49a8f5965593636255ca8e4a9bbd8026f43c + languageName: node + linkType: hard + +"it-to-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "it-to-stream@npm:1.0.0" + dependencies: + buffer: ^6.0.3 + fast-fifo: ^1.0.0 + get-iterator: ^1.0.2 + p-defer: ^3.0.0 + p-fifo: ^1.0.0 + readable-stream: ^3.6.0 + checksum: e0c5a3f3c90d4bc52686217865b8fa202f64bd3af493dec0fdacd58b4237166fb68935ff2823ed0a16414ba5becb9a5fb8c98f3ec99584789776d7277c1d129f + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"jayson@npm:^4.1.0": + version: 4.1.0 + resolution: "jayson@npm:4.1.0" + dependencies: + "@types/connect": ^3.4.33 + "@types/node": ^12.12.54 + "@types/ws": ^7.4.4 + JSONStream: ^1.3.5 + commander: ^2.20.3 + delay: ^5.0.0 + es6-promisify: ^5.0.0 + eyes: ^0.1.8 + isomorphic-ws: ^4.0.1 + json-stringify-safe: ^5.0.1 + uuid: ^8.3.2 + ws: ^7.4.5 + bin: + jayson: bin/jayson.js + checksum: 86464322fbdc6db65d2bb4fc278cb6c86fad5c2a506065490d39459f09ba0d30f2b4fb740b33828a1424791419b6c8bd295dc54d361a4ad959bf70cc62b1ca7e + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" + dependencies: + execa: ^5.0.0 + jest-util: ^29.7.0 + p-limit: ^3.1.0 + checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 + languageName: node + linkType: hard + +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^1.0.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.7.0 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + p-limit: ^3.1.0 + pretty-format: ^29.7.0 + pure-rand: ^6.0.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 + languageName: node + linkType: hard + +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" + dependencies: + "@jest/core": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + create-jest: ^29.7.0 + exit: ^0.1.2 + import-local: ^3.0.2 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 + languageName: node + linkType: hard + +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.7.0 + "@jest/types": ^29.6.3 + babel-jest: ^29.7.0 + chalk: ^4.0.0 + ci-info: ^3.2.0 + deepmerge: ^4.2.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-get-type: ^29.6.3 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-runner: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.7.0 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff + languageName: node + linkType: hard + +"jest-diff@npm:^22.0.3": + version: 22.4.3 + resolution: "jest-diff@npm:22.4.3" + dependencies: + chalk: ^2.0.1 + diff: ^3.2.0 + jest-get-type: ^22.4.3 + pretty-format: ^22.4.3 + checksum: 1396d1f064570cd2dec35a235022017a338d4370180a492e1afce05b174fdced971b51c9771a5ff94f22b1ed6dd005d9dc53d2f049704d6285bfe4820217a7c8 + languageName: node + linkType: hard + +"jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.6.3 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" + dependencies: + detect-newline: ^3.0.0 + checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 + languageName: node + linkType: hard + +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + jest-util: ^29.7.0 + pretty-format: ^29.7.0 + checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 + languageName: node + linkType: hard + +"jest-get-type@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-get-type@npm:22.4.3" + checksum: f2daab7cb762457cdcd5500e3b0222cc96856649b685c40a621fe7395147ee67bbb594a2285b28c0b3cb9d80819eca4f99dd450df1bcac8a7cffa8a2dbaeec31 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" + dependencies: + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.6.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" + dependencies: + jest-regex-util: ^29.6.3 + jest-snapshot: ^29.7.0 + checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 + languageName: node + linkType: hard + +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-pnp-resolver: ^1.2.2 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + resolve: ^1.20.0 + resolve.exports: ^2.0.0 + slash: ^3.0.0 + checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 + languageName: node + linkType: hard + +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/environment": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-leak-detector: ^29.7.0 + jest-message-util: ^29.7.0 + jest-resolve: ^29.7.0 + jest-runtime: ^29.7.0 + jest-util: ^29.7.0 + jest-watcher: ^29.7.0 + jest-worker: ^29.7.0 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb + languageName: node + linkType: hard + +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/globals": ^29.7.0 + "@jest/source-map": ^29.6.3 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + cjs-module-lexer: ^1.0.0 + collect-v8-coverage: ^1.0.0 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e + languageName: node + linkType: hard + +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^29.7.0 + graceful-fs: ^4.2.9 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + natural-compare: ^1.4.0 + pretty-format: ^29.7.0 + semver: ^7.5.3 + checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad + languageName: node + linkType: hard + +"jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca + languageName: node + linkType: hard + +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + leven: ^3.1.0 + pretty-format: ^29.7.0 + checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae + languageName: node + linkType: hard + +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" + dependencies: + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.13.1 + jest-util: ^29.7.0 + string-length: ^4.0.1 + checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f + languageName: node + linkType: hard + +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" + dependencies: + "@types/node": "*" + jest-util: ^29.7.0 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 + languageName: node + linkType: hard + +"jest@npm:^29.1.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" + dependencies: + "@jest/core": ^29.7.0 + "@jest/types": ^29.6.3 + import-local: ^3.0.2 + jest-cli: ^29.7.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b + languageName: node + linkType: hard + +"joi@npm:^17.9.2": + version: 17.11.0 + resolution: "joi@npm:17.11.0" + dependencies: + "@hapi/hoek": ^9.0.0 + "@hapi/topo": ^5.0.0 + "@sideway/address": ^4.1.3 + "@sideway/formula": ^3.0.1 + "@sideway/pinpoint": ^2.0.0 + checksum: 3a4e9ecba345cdafe585e7ed8270a44b39718e11dff3749aa27e0001a63d578b75100c062be28e6f48f960b594864034e7a13833f33fbd7ad56d5ce6b617f9bf + languageName: node + linkType: hard + +"jose@npm:^4.5.0": + version: 4.15.3 + resolution: "jose@npm:4.15.3" + checksum: b76eeccc1d40d0eaf26dfaadc0f88fc15802c9105ab66a24ee223bd84369f7cb217f4a2cb852f5080ff6996170b3a73db2b2d26878b8905d99c36ca432628134 + languageName: node + linkType: hard + +"js-base64@npm:^3.7.2, js-base64@npm:^3.7.5": + version: 3.7.5 + resolution: "js-base64@npm:3.7.5" + checksum: 67a78c8b1c47b73f1c6fba1957e9fe6fd9dc78ac93ac46cc2e43472dcb9cf150d126fb0e593192e88e0497354fa634d17d255add7cc6ee3c7b4d29870faa8e18 + languageName: node + linkType: hard + +"js-sha3@npm:0.8.0": + version: 0.8.0 + resolution: "js-sha3@npm:0.8.0" + checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f + languageName: node + linkType: hard + +"json-rpc-engine@npm:6.1.0, json-rpc-engine@npm:^6.1.0": + version: 6.1.0 + resolution: "json-rpc-engine@npm:6.1.0" + dependencies: + "@metamask/safe-event-emitter": ^2.0.0 + eth-rpc-errors: ^4.0.2 + checksum: 33b6c9bbd81abf8e323a0281ee05871713203c40d34a4d0bda27706cd0a0935c7b51845238ba89b73027e44ebc8034bbd82db9f962e6c578eb922d9b95acc8bd + languageName: node + linkType: hard + +"json-rpc-random-id@npm:^1.0.0, json-rpc-random-id@npm:^1.0.1": + version: 1.0.1 + resolution: "json-rpc-random-id@npm:1.0.1" + checksum: fcd2e884193a129ace4002bd65a86e9cdb206733b4693baea77bd8b372cf8de3043fbea27716a2c9a716581a908ca8d978d9dfec4847eb2cf77edb4cf4b2252c + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee + languageName: node + linkType: hard + +"json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonlint@npm:^1.6.2": + version: 1.6.3 + resolution: "jsonlint@npm:1.6.3" + dependencies: + JSV: ^4.0.x + nomnom: ^1.5.x + bin: + jsonlint: lib/cli.js + checksum: be0972cf552ff1ec589db5d7b20ff31064561fbe4605708f5a260e2dcc18e26acd5bf842ba10dd157706232aca6d6c9116d21005cb3e8fb5ec9d9b01c8869677 + languageName: node + linkType: hard + +"jsonparse@npm:^1.2.0": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 6514a7be4674ebf407afca0eda3ba284b69b07f9958a8d3113ef1005f7ec610860c312be067e450c569aab8b89635e332cee3696789c750692bb60daba627f4d + languageName: node + linkType: hard + +"keccak@npm:^3.0.1": + version: 3.0.4 + resolution: "keccak@npm:3.0.4" + dependencies: + node-addon-api: ^2.0.0 + node-gyp: latest + node-gyp-build: ^4.2.0 + readable-stream: ^3.6.0 + checksum: 2bf27b97b2f24225b1b44027de62be547f5c7326d87d249605665abd0c8c599d774671c35504c62c9b922cae02758504c6f76a73a84234d23af8a2211afaaa11 + languageName: node + linkType: hard + +"keyvaluestorage-interface@npm:^1.0.0": + version: 1.0.0 + resolution: "keyvaluestorage-interface@npm:1.0.0" + checksum: e20530e71b738dc094ad170a91a98d4b9bdc772dd9044b23cdaaa102aafa8997b1ac867550a1e66ba1d64fcaa949214df31aed18413b4bac31e5fe1f2c76c9de + languageName: node + linkType: hard + +"kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + +"libp2p-crypto@npm:^0.21.0, libp2p-crypto@npm:^0.21.2": + version: 0.21.2 + resolution: "libp2p-crypto@npm:0.21.2" + dependencies: + "@noble/ed25519": ^1.5.1 + "@noble/secp256k1": ^1.3.0 + err-code: ^3.0.1 + iso-random-stream: ^2.0.0 + multiformats: ^9.4.5 + node-forge: ^1.2.1 + protobufjs: ^6.11.2 + uint8arrays: ^3.0.0 + checksum: e03f8398db3a2913374b6a4b13560aec0c8e2d244c80fa0b2f119600789c445b235be01987580262a91d63e590f0f1a185728ea4b8697e5d4dfc9ec6da5266d6 + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"lit-element@npm:^3.3.0": + version: 3.3.3 + resolution: "lit-element@npm:3.3.3" + dependencies: + "@lit-labs/ssr-dom-shim": ^1.1.0 + "@lit/reactive-element": ^1.3.0 + lit-html: ^2.8.0 + checksum: 29a596fa556e231cce7246ca3e5687ad238f299b0cb374a0934d5e6fe9adf1436e031d4fbd21b280aabfc0e21a66e6c4b52da558a908df2566d09d960f3ca93d + languageName: node + linkType: hard + +"lit-html@npm:^2.8.0": + version: 2.8.0 + resolution: "lit-html@npm:2.8.0" + dependencies: + "@types/trusted-types": ^2.0.2 + checksum: 2d70df07248bcb2f502a3afb1e91d260735024fa669669ffb1417575aa39c3092779725ac1b90f5f39e4ce78c63f431f51176bc67f532389f0285a6991573255 + languageName: node + linkType: hard + +"lit@npm:2.8.0": + version: 2.8.0 + resolution: "lit@npm:2.8.0" + dependencies: + "@lit/reactive-element": ^1.6.0 + lit-element: ^3.3.0 + lit-html: ^2.8.0 + checksum: 2480e733f7d022d3ecba91abc58a20968f0ca8f5fa30b3341ecf4bcf4845e674ad27b721a5ae53529cafc6ca603c015b80d0979ceb7a711e268ef20bb6bc7527 + languageName: node + linkType: hard + +"livepeer@npm:2.9.1, livepeer@npm:^2.5.8": + version: 2.9.1 + resolution: "livepeer@npm:2.9.1" + dependencies: + "@livepeer/core": ^1.9.1 + "@stitches/core": ^1.2.8 + core-js: ^3.31.1 + cross-fetch: ^4.0.0 + hls.js: ^1.4.12 + ms: ^3.0.0-canary.1 + tus-js-client: ^3.1.0 + zustand: ^4.3.9 + peerDependencies: + react: ">=17.0.0" + peerDependenciesMeta: + react: + optional: true + checksum: 6884b557037b50cbe83980aff34acf1be4e94e95e93763d478136b16717f96ff81c533fc46e98296e75919ca7347f07a1568c4df9981bc137c5f7ae822297b7d + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"lodash._baseiteratee@npm:~4.7.0": + version: 4.7.0 + resolution: "lodash._baseiteratee@npm:4.7.0" + dependencies: + lodash._stringtopath: ~4.8.0 + checksum: 814a7125b9e2fa7e436c4402eae842a200189e2839b56bd6cde7cd0a3628b60842f5d39a9f5dceaf8766669b2e4a17a36ce2a213d1d6a891c1bef8a6bda36ea9 + languageName: node + linkType: hard + +"lodash._basetostring@npm:~4.12.0": + version: 4.12.0 + resolution: "lodash._basetostring@npm:4.12.0" + checksum: ccaf83827f86be5c9daeb7b939f761d6a43f0de0781bc3b6772fcb8568fbcbfa1e1082c66e5e12dd23e00ac40a18349c5a793a6a552e3574cbbcb3e1545fcb4c + languageName: node + linkType: hard + +"lodash._baseuniq@npm:~4.6.0": + version: 4.6.0 + resolution: "lodash._baseuniq@npm:4.6.0" + dependencies: + lodash._createset: ~4.0.0 + lodash._root: ~3.0.0 + checksum: 8c16fe2e80716b18c2f28bbcc902768141d432b0b98e03b30a2fba6a097377fabdc8753da232568375d2aa9502dc6b3a390200aa1467d2f685a582a46a271936 + languageName: node + linkType: hard + +"lodash._createset@npm:~4.0.0": + version: 4.0.3 + resolution: "lodash._createset@npm:4.0.3" + checksum: fb4450fbf4846aa7b420837ee44400b88664e28499388b7e04b4db38adca1305915f68a245fb2a87e031e7f440b997de4f360de6dea2712952520e97c7898de1 + languageName: node + linkType: hard + +"lodash._root@npm:~3.0.0": + version: 3.0.1 + resolution: "lodash._root@npm:3.0.1" + checksum: 3e12c6f409ae13164a8db358f44a691f1e038dad4e25463802980d0ed641ed118c147b65657501c51778c885422b913264dfbe33ec0c5d676443dd630a7e685a + languageName: node + linkType: hard + +"lodash._stringtopath@npm:~4.8.0": + version: 4.8.0 + resolution: "lodash._stringtopath@npm:4.8.0" + dependencies: + lodash._basetostring: ~4.12.0 + checksum: 00663b317796333e6315ebb4e8b590e68845de10d5d25c7585751fd9d28adf3e60e1ce85a6fbb6a0d440447c841465b91877e761239e358231eed2f52f0a5472 + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 + languageName: node + linkType: hard + +"lodash.flatten@npm:^4.2.0, lodash.flatten@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.flatten@npm:4.4.0" + checksum: 0ac34a393d4b795d4b7421153d27c13ae67e08786c9cbb60ff5b732210d46f833598eee3fb3844bb10070e8488efe390ea53bb567377e0cb47e9e630bf0811cb + languageName: node + linkType: hard + +"lodash.get@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: e403047ddb03181c9d0e92df9556570e2b67e0f0a930fcbbbd779370972368f5568e914f913e93f3b08f6d492abc71e14d4e9b7a18916c31fa04bd2306efe545 + languageName: node + linkType: hard + +"lodash.isequal@npm:4.5.0, lodash.isequal@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 + languageName: node + linkType: hard + +"lodash.isplainobject@npm:^4.0.6": + version: 4.0.6 + resolution: "lodash.isplainobject@npm:4.0.6" + checksum: 29c6351f281e0d9a1d58f1a4c8f4400924b4c79f18dfc4613624d7d54784df07efaff97c1ff2659f3e085ecf4fff493300adc4837553104cef2634110b0d5337 + languageName: node + linkType: hard + +"lodash.isstring@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.isstring@npm:4.0.1" + checksum: eaac87ae9636848af08021083d796e2eea3d02e80082ab8a9955309569cb3a463ce97fd281d7dc119e402b2e7d8c54a23914b15d2fc7fff56461511dc8937ba0 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lodash.set@npm:^4.3.2": + version: 4.3.2 + resolution: "lodash.set@npm:4.3.2" + checksum: a9122f49eef9f2d0fc9061a33d87f8e5b8c6b23d46e8b9e9ce1529d3588d79741bd1145a3abdfa3b13082703e65af27ff18d8a07bfc22b9be32f3fc36f763f70 + languageName: node + linkType: hard + +"lodash.throttle@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.throttle@npm:4.1.1" + checksum: 129c0a28cee48b348aef146f638ef8a8b197944d4e9ec26c1890c19d9bf5a5690fe11b655c77a4551268819b32d27f4206343e30c78961f60b561b8608c8c805 + languageName: node + linkType: hard + +"lodash.uniqby@npm:4.5.0": + version: 4.5.0 + resolution: "lodash.uniqby@npm:4.5.0" + dependencies: + lodash._baseiteratee: ~4.7.0 + lodash._baseuniq: ~4.6.0 + checksum: 40a4fdd4c31323fcb6db91ec3124020333212ca1f13e75cc9939decdd33e8b176d204fb277be36a51a855c2c90e14d67932b3b130b2f0eedc729e4cb9cdcaed1 + languageName: node + linkType: hard + +"lodash@npm:^4.17.10, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:^2.2.0": + version: 2.2.0 + resolution: "log-symbols@npm:2.2.0" + dependencies: + chalk: ^2.0.1 + checksum: 4c95e3b65f0352dbe91dc4989c10baf7a44e2ef5b0db7e6721e1476268e2b6f7090c3aa880d4f833a05c5c3ff18f4ec5215a09bd0099986d64a8186cfeb48ac8 + languageName: node + linkType: hard + +"long@npm:^4.0.0": + version: 4.0.0 + resolution: "long@npm:4.0.0" + checksum: 16afbe8f749c7c849db1f4de4e2e6a31ac6e617cead3bdc4f9605cb703cd20e1e9fc1a7baba674ffcca57d660a6e5b53a9e236d7b25a295d3855cca79cc06744 + languageName: node + linkType: hard + +"long@npm:^5.0.0, long@npm:^5.2.0": + version: 5.2.3 + resolution: "long@npm:5.2.3" + checksum: 885ede7c3de4facccbd2cacc6168bae3a02c3e836159ea4252c87b6e34d40af819824b2d4edce330bfb5c4d6e8ce3ec5864bdcf9473fa1f53a4f8225860e5897 + languageName: node + linkType: hard + +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.1 + resolution: "lru-cache@npm:10.0.1" + checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 + languageName: node + linkType: hard + +"lz-string@npm:^1.5.0": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" + bin: + lz-string: bin/bin.js + checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d + languageName: node + linkType: hard + +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: ^7.5.3 + checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^17.0.0 + http-cache-semantics: ^4.1.1 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^10.0.0 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed + languageName: node + linkType: hard + +"map-obj@npm:^4.0.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e + languageName: node + linkType: hard + +"match-sorter@npm:^6.0.2": + version: 6.3.1 + resolution: "match-sorter@npm:6.3.1" + dependencies: + "@babel/runtime": ^7.12.5 + remove-accents: 0.4.2 + checksum: a4b02b676ac4ce64a89a091539ee4a70a802684713bcf06f2b70787927f510fe8a2adc849f9288857a90906083ad303467e530e8723b4a9756df9994fc164550 + languageName: node + linkType: hard + +"meow@npm:^9.0.0": + version: 9.0.0 + resolution: "meow@npm:9.0.0" + dependencies: + "@types/minimist": ^1.2.0 + camelcase-keys: ^6.2.2 + decamelize: ^1.2.0 + decamelize-keys: ^1.1.0 + hard-rejection: ^2.1.0 + minimist-options: 4.1.0 + normalize-package-data: ^3.0.0 + read-pkg-up: ^7.0.1 + redent: ^3.0.0 + trim-newlines: ^3.0.0 + type-fest: ^0.18.0 + yargs-parser: ^20.2.3 + checksum: 99799c47247f4daeee178e3124f6ef6f84bde2ba3f37652865d5d8f8b8adcf9eedfc551dd043e2455cd8206545fd848e269c0c5ab6b594680a0ad4d3617c9639 + languageName: node + linkType: hard + +"merge-options@npm:^3.0.4": + version: 3.0.4 + resolution: "merge-options@npm:3.0.4" + dependencies: + is-plain-obj: ^2.1.0 + checksum: d86ddb3dd6e85d558dbf25dc944f3527b6bacb944db3fdda6e84a3f59c4e4b85231095f58b835758b9a57708342dee0f8de0dffa352974a48221487fe9f4584f + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"micro-ftch@npm:^0.3.1": + version: 0.3.1 + resolution: "micro-ftch@npm:0.3.1" + checksum: 0e496547253a36e98a83fb00c628c53c3fb540fa5aaeaf718438873785afd193244988c09d219bb1802984ff227d04938d9571ef90fe82b48bd282262586aaff + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"microseconds@npm:0.2.0": + version: 0.2.0 + resolution: "microseconds@npm:0.2.0" + checksum: 22bfa8553f92c7d95afff6de0aeb2aecf750680d41b8c72b02098ccc5bbbb0a384380ff539292dbd3788f5dfc298682f9d38a2b4c101f5ee2c9471d53934c5fa + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"min-document@npm:^2.19.0": + version: 2.19.0 + resolution: "min-document@npm:2.19.0" + dependencies: + dom-walk: ^0.1.0 + checksum: da6437562ea2228041542a2384528e74e22d1daa1a4ec439c165abf0b9d8a63e17e3b8a6dc6e0c731845e85301198730426932a0e813d23f932ca668340c9623 + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.1.1": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: ^1.0.1 + is-plain-obj: ^1.1.0 + kind-of: ^6.0.3 + checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e + languageName: node + linkType: hard + +"minimist@npm:^1.2.5, minimist@npm:^1.2.8, minimist@npm:~1.2.5": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"mock-property@npm:^1.0.0": + version: 1.0.2 + resolution: "mock-property@npm:1.0.2" + dependencies: + define-data-property: ^1.1.0 + functions-have-names: ^1.2.3 + gopd: ^1.0.1 + has: ^1.0.3 + has-property-descriptors: ^1.0.0 + isarray: ^2.0.5 + checksum: 5aeef15b9eceebdf08299f89590ad51b95c16f275f9b83eb5b0ddb84c20d09845aaf09adc7fed12810533dd7d15d53aabadbd6df91a1d48a84a9bb751c2b6a45 + languageName: node + linkType: hard + +"moment@npm:^2.29.4": + version: 2.29.4 + resolution: "moment@npm:2.29.4" + checksum: 0ec3f9c2bcba38dc2451b1daed5daded747f17610b92427bebe1d08d48d8b7bdd8d9197500b072d14e326dd0ccf3e326b9e3d07c5895d3d49e39b6803b76e80e + languageName: node + linkType: hard + +"motion@npm:10.16.2": + version: 10.16.2 + resolution: "motion@npm:10.16.2" + dependencies: + "@motionone/animation": ^10.15.1 + "@motionone/dom": ^10.16.2 + "@motionone/svelte": ^10.16.2 + "@motionone/types": ^10.15.1 + "@motionone/utils": ^10.15.1 + "@motionone/vue": ^10.16.2 + checksum: 0b91256808c2374d8b7f4ac5e7ed513f2ca8df2b7d1be4fbc00ec5baece5162ada648aedaa5bc1d60be9ad2e6c9bc1d3bb160333051c20ab79e241b8e02e3c92 + languageName: node + linkType: hard + +"move-file@npm:^2.1.0": + version: 2.1.0 + resolution: "move-file@npm:2.1.0" + dependencies: + path-exists: ^4.0.0 + checksum: 2b92bbe047a302b593fcb2c0bf1131bb090ec80b3264569fc80d782c8ff829eecc13573943fa4d804c9747dec612ef2d1e84a5cfcf29cbc64a69ffcbb7ea09b3 + languageName: node + linkType: hard + +"mrmime@npm:^1.0.0": + version: 1.0.1 + resolution: "mrmime@npm:1.0.1" + checksum: cc979da44bbbffebaa8eaf7a45117e851f2d4cb46a3ada6ceb78130466a04c15a0de9a9ce1c8b8ba6f6e1b8618866b1352992bf1757d241c0ddca558b9f28a77 + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:^2.0.0, ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"ms@npm:^3.0.0-canary.1": + version: 3.0.0-canary.1 + resolution: "ms@npm:3.0.0-canary.1" + checksum: 5ec76c0932cf83ac3e7f70f1a4c0d4db4dbc91de6ea5f7d336c67b48f513c8cb4c0fce3a07e3d84ee931dbdc9a48f33ed1c485e834279fff8906d385e86684ae + languageName: node + linkType: hard + +"multiaddr-to-uri@npm:^8.0.0": + version: 8.0.0 + resolution: "multiaddr-to-uri@npm:8.0.0" + dependencies: + multiaddr: ^10.0.0 + checksum: c70d1f4d98d4eee6f7e47e4bd5b3aeae8394339c455bed3cccfc38a11aa7f61681b5cdfa02f338687d2181526318f66d00c370dca6bf633955be6bfd87cb833d + languageName: node + linkType: hard + +"multiaddr@npm:^10.0.0": + version: 10.0.1 + resolution: "multiaddr@npm:10.0.1" + dependencies: + dns-over-http-resolver: ^1.2.3 + err-code: ^3.0.1 + is-ip: ^3.1.0 + multiformats: ^9.4.5 + uint8arrays: ^3.0.0 + varint: ^6.0.0 + checksum: d53aaf7efd52ee5e6413ef36ececd29239ceb5c1f048c1fa9b820442226dc232067312d25e509a2571a14047465fb934dd35029c7f3166f4d02d13e3c501925d + languageName: node + linkType: hard + +"multiformats@npm:9.9.0, multiformats@npm:^9.0.4, multiformats@npm:^9.4.13, multiformats@npm:^9.4.2, multiformats@npm:^9.4.5, multiformats@npm:^9.4.7, multiformats@npm:^9.5.4, multiformats@npm:^9.6.3": + version: 9.9.0 + resolution: "multiformats@npm:9.9.0" + checksum: d3e8c1be400c09a014f557ea02251a2710dbc9fca5aa32cc702ff29f636c5471e17979f30bdcb0a9cbb556f162a8591dc2e1219c24fc21394a56115b820bb84e + languageName: node + linkType: hard + +"multipipe@npm:^1.0.2": + version: 1.0.2 + resolution: "multipipe@npm:1.0.2" + dependencies: + duplexer2: ^0.1.2 + object-assign: ^4.1.0 + checksum: 99cf8934714da7f9ce03e1f0a99621a41443217d80849c62e22b31b6ac356b9acd22f41e555fd7a759f1c7c9d3273e7abff2fb82dff8285f00a6a1022727e4ab + languageName: node + linkType: hard + +"murmurhash3js-revisited@npm:^3.0.0": + version: 3.0.0 + resolution: "murmurhash3js-revisited@npm:3.0.0" + checksum: 24b60657ce296b1d3cf358af70688c8ed777e93c4ee263967f066a4adb0ade0d689863a1a51adc74ab134d61a877f41a06e2b73842ac3fc924799cc96b249a40 + languageName: node + linkType: hard + +"nano-time@npm:1.0.0": + version: 1.0.0 + resolution: "nano-time@npm:1.0.0" + dependencies: + big-integer: ^1.6.16 + checksum: eef8548546cc1020625f8e44751a7263e9eddf0412a6a1a6c80a8d2be2ea7973622804a977cdfe796807b85b20ff6c8ba340e8dd20effcc7078193ed5edbb5d4 + languageName: node + linkType: hard + +"nanoid@npm:^3.0.2, nanoid@npm:^3.1.20, nanoid@npm:^3.1.23, nanoid@npm:^3.3.4": + version: 3.3.6 + resolution: "nanoid@npm:3.3.6" + bin: + nanoid: bin/nanoid.cjs + checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 + languageName: node + linkType: hard + +"native-abort-controller@npm:^1.0.3": + version: 1.0.4 + resolution: "native-abort-controller@npm:1.0.4" + peerDependencies: + abort-controller: "*" + checksum: 7c98800304155300344f586721a12ac4207c9d660c7bc121549f6afb3db9175fe8200cfb3017ea3ea2664a9601b01fdd92f200783b2ce8792d64a4c50bd4030a + languageName: node + linkType: hard + +"native-fetch@npm:^3.0.0": + version: 3.0.0 + resolution: "native-fetch@npm:3.0.0" + peerDependencies: + node-fetch: "*" + checksum: eec8cc78d6da4d0f3f56055e3e557473ac86dd35fd40053ea268d644af7b20babc891d2b53ef821b77ed2428265f60b85e49d754c555de89bfa071a743b853bb + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"next-redux-wrapper@npm:^6.0.2": + version: 6.0.2 + resolution: "next-redux-wrapper@npm:6.0.2" + peerDependencies: + next: ">=9.0.0" + react: "*" + react-redux: "*" + checksum: 4de366bb862e8e4e96739b830f3299ef26b03b53548ffa39c38b8967541a0ef31ede65976451252c7340385a6050193cee113fb5a138dff719d8c6d9f865db5b + languageName: node + linkType: hard + +"next-seo@npm:^6.1.0": + version: 6.1.0 + resolution: "next-seo@npm:6.1.0" + peerDependencies: + next: ^8.1.1-canary.54 || >=9.0.0 + react: ">=16.0.0" + react-dom: ">=16.0.0" + checksum: 5909d34d12dd8ac641d7fa96b6fe562470e1539f582c0a3f2b5e35f16b9b0e402d9f909a84393f80989bd96c034118712a5aecb520e5a45662e02fa23db7b656 + languageName: node + linkType: hard + +"next-transpile-modules@npm:^10.0.0": + version: 10.0.1 + resolution: "next-transpile-modules@npm:10.0.1" + dependencies: + enhanced-resolve: ^5.10.0 + checksum: 6cfffd165769a04b153e60f49f4f3896d16aa688304616f66c7b94299e2229b04db368217e6a7300d3110fe988a6c6e68025bb2cbda3edf49e9b29109ff671bd + languageName: node + linkType: hard + +"next@npm:^12.3.4": + version: 12.3.4 + resolution: "next@npm:12.3.4" + dependencies: + "@next/env": 12.3.4 + "@next/swc-android-arm-eabi": 12.3.4 + "@next/swc-android-arm64": 12.3.4 + "@next/swc-darwin-arm64": 12.3.4 + "@next/swc-darwin-x64": 12.3.4 + "@next/swc-freebsd-x64": 12.3.4 + "@next/swc-linux-arm-gnueabihf": 12.3.4 + "@next/swc-linux-arm64-gnu": 12.3.4 + "@next/swc-linux-arm64-musl": 12.3.4 + "@next/swc-linux-x64-gnu": 12.3.4 + "@next/swc-linux-x64-musl": 12.3.4 + "@next/swc-win32-arm64-msvc": 12.3.4 + "@next/swc-win32-ia32-msvc": 12.3.4 + "@next/swc-win32-x64-msvc": 12.3.4 + "@swc/helpers": 0.4.11 + caniuse-lite: ^1.0.30001406 + postcss: 8.4.14 + styled-jsx: 5.0.7 + use-sync-external-store: 1.2.0 + peerDependencies: + fibers: ">= 3.1.0" + node-sass: ^6.0.0 || ^7.0.0 + react: ^17.0.2 || ^18.0.0-0 + react-dom: ^17.0.2 || ^18.0.0-0 + sass: ^1.3.0 + dependenciesMeta: + "@next/swc-android-arm-eabi": + optional: true + "@next/swc-android-arm64": + optional: true + "@next/swc-darwin-arm64": + optional: true + "@next/swc-darwin-x64": + optional: true + "@next/swc-freebsd-x64": + optional: true + "@next/swc-linux-arm-gnueabihf": + optional: true + "@next/swc-linux-arm64-gnu": + optional: true + "@next/swc-linux-arm64-musl": + optional: true + "@next/swc-linux-x64-gnu": + optional: true + "@next/swc-linux-x64-musl": + optional: true + "@next/swc-win32-arm64-msvc": + optional: true + "@next/swc-win32-ia32-msvc": + optional: true + "@next/swc-win32-x64-msvc": + optional: true + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + bin: + next: dist/bin/next + checksum: d96fc4f5bcd5a630d74111519f4820dcbd75dddf16c6d00d2167bd3cb8d74965d46d83c8e5ec301bf999013c7d96f1bfff9424f0221317d68b594c4d01f5825e + languageName: node + linkType: hard + +"node-addon-api@npm:^2.0.0": + version: 2.0.2 + resolution: "node-addon-api@npm:2.0.2" + dependencies: + node-gyp: latest + checksum: 31fb22d674648204f8dd94167eb5aac896c841b84a9210d614bf5d97c74ef059cc6326389cf0c54d2086e35312938401d4cc82e5fcd679202503eb8ac84814f8 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.8": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + +"node-forge@npm:^1.2.1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": + version: 4.6.1 + resolution: "node-gyp-build@npm:4.6.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: c3676d337b36803bc7792e35bf7fdcda7cdcb7e289b8f9855a5535702a82498eb976842fefcf487258c58005ca32ce3d537fbed91280b04409161dcd7232a882 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^11.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + +"node-releases@npm:^2.0.13": + version: 2.0.13 + resolution: "node-releases@npm:2.0.13" + checksum: 17ec8f315dba62710cae71a8dad3cd0288ba943d2ece43504b3b1aa8625bf138637798ab470b1d9035b0545996f63000a8a926e0f6d35d0996424f8b6d36dda3 + languageName: node + linkType: hard + +"nomnom@npm:^1.5.x": + version: 1.8.1 + resolution: "nomnom@npm:1.8.1" + dependencies: + chalk: ~0.4.0 + underscore: ~1.6.0 + checksum: cc6f538062741e8914b65352499c444a754d18a95f8c4b336b9183367c44335f00a9d3beb54648f6a76d5434702a3d71bf37c23ef4c960d39595ed72d376c6fd + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: ^2.1.4 + resolve: ^1.10.0 + semver: 2 || 3 || 4 || 5 + validate-npm-package-license: ^3.0.1 + checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 + languageName: node + linkType: hard + +"normalize-package-data@npm:^3.0.0": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: ^4.0.1 + is-core-module: ^2.5.0 + semver: ^7.3.4 + validate-npm-package-license: ^3.0.1 + checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"notistack@npm:^2.0.5": + version: 2.0.8 + resolution: "notistack@npm:2.0.8" + dependencies: + clsx: ^1.1.0 + hoist-non-react-statics: ^3.3.0 + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/styled": ^11.3.0 + "@mui/material": ^5.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + checksum: f95952ea7209840f6f05a65e74f0fb4e7a1bb321753b2955ae6052f2205d47a6a3c50a42b72db11eac2fc491c4105b4687bed89e79287399530973fa133a5380 + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: ^3.0.0 + checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"numeral@npm:^2.0.6": + version: 2.0.6 + resolution: "numeral@npm:2.0.6" + checksum: 89f011116539692bf53fde380adeb0579623d00f782703c71c0062d4a8686770c404a041ff4eef454de53925a9f75bba1fa52726057b13d40473f707730b07c2 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": + version: 1.12.3 + resolution: "object-inspect@npm:1.12.3" + checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db + languageName: node + linkType: hard + +"object-is@npm:^1.1.5": + version: 1.1.5 + resolution: "object-is@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a + languageName: node + linkType: hard + +"object-keys@npm:~0.4.0": + version: 0.4.0 + resolution: "object-keys@npm:0.4.0" + checksum: 1be3ebe9b48c0d5eda8e4a30657d887a748cb42435e0e2eaf49faf557bdd602cd2b7558b8ce90a4eb2b8592d16b875a1900bce859cbb0f35b21c67e11a45313c + languageName: node + linkType: hard + +"object.assign@npm:^4.1.4": + version: 4.1.4 + resolution: "object.assign@npm:4.1.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 + languageName: node + linkType: hard + +"oblivious-set@npm:1.0.0": + version: 1.0.0 + resolution: "oblivious-set@npm:1.0.0" + checksum: f31740ea9c3a8242ad2324e4ebb9a35359fbc2e6e7131731a0fc1c8b7b1238eb07e4c8c631a38535243a7b8e3042b7e89f7dc2a95d2989afd6f80bd5793b0aab + languageName: node + linkType: hard + +"on-exit-leak-free@npm:^0.2.0": + version: 0.2.0 + resolution: "on-exit-leak-free@npm:0.2.0" + checksum: d22b0f0538069110626b578db6e68b6ee0e85b1ee9cc5ef9b4de1bba431431d6a8da91a61e09d2ad46f22a96f968e5237833cb9d0b69bc4d294f7ec82f609b05 + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"openpgp@npm:^5.5.0": + version: 5.10.2 + resolution: "openpgp@npm:5.10.2" + dependencies: + asn1.js: ^5.0.0 + checksum: ff772a146d61cf3d07631287b8b464312e85d6a62fd896540760ce3471f0a02a07437c5f02c06e721273527219f5f6b00f7d91fcfbbd1bca0b0599b336fe1d06 + languageName: node + linkType: hard + +"p-defer@npm:^3.0.0": + version: 3.0.0 + resolution: "p-defer@npm:3.0.0" + checksum: ac3b0976a1c76b67cca1a34e00f7299b0cc230891f820749686aa84f8947326bbe0f8e3b7d9ca511578ee06f0c1a6e0ff68c8e9c325eac455f09d99f91697161 + languageName: node + linkType: hard + +"p-fifo@npm:^1.0.0": + version: 1.0.0 + resolution: "p-fifo@npm:1.0.0" + dependencies: + fast-fifo: ^1.0.0 + p-defer: ^3.0.0 + checksum: 4cdce44ff8266351014a460705a804c02760e5b721a018dbef6fae7d25caf83af2e343be58810297473383c1783bb7048388cb5c22938b3f904818531bc44ee7 + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-retry@npm:^4.5.0": + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" + dependencies: + "@types/retry": 0.12.0 + retry: ^0.13.1 + checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parse-duration@npm:^1.0.0": + version: 1.1.0 + resolution: "parse-duration@npm:1.1.0" + checksum: 3cfc10aa61b3a06373a347289e1704de47d5d845c79330bbab20b54c02567f3710ba84544a3a44a986c3381c68670d89542fe9de607fb0814e52f78b34893cd9 + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": ^7.0.0 + error-ex: ^1.3.1 + json-parse-even-better-errors: ^2.3.0 + lines-and-columns: ^1.1.6 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + +"parse-ms@npm:^1.0.0": + version: 1.0.1 + resolution: "parse-ms@npm:1.0.1" + checksum: 93fa7921554fe16bc73272a94bf812d1db6a144964fb57692f6de4fccf14bd771a232e8dcdcd4bbaa4aa477796cd3f35374d65596cca12323f2664bc023b4b4c + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"peer-id@npm:^0.16.0": + version: 0.16.0 + resolution: "peer-id@npm:0.16.0" + dependencies: + class-is: ^1.1.0 + libp2p-crypto: ^0.21.0 + multiformats: ^9.4.5 + protobufjs: ^6.10.2 + uint8arrays: ^3.0.0 + checksum: 35dfb887c6f00789702214488e1f97dd1713ed77909b7f9be13b20003aed64cc444bf15e6bd845c01d47f424856acca7fa1f0501b785f5cb6e6707e3f05b9f41 + languageName: node + linkType: hard + +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde + languageName: node + linkType: hard + +"pify@npm:^5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb + languageName: node + linkType: hard + +"pino-abstract-transport@npm:v0.5.0": + version: 0.5.0 + resolution: "pino-abstract-transport@npm:0.5.0" + dependencies: + duplexify: ^4.1.2 + split2: ^4.0.0 + checksum: c503f867de3189f8217ab9cf794e8a631dddd0029a829f0f985f5511308152ebd53e363764fbc5570b3d1c715b341e3923456ce16ad84cd41be2b9a074ada234 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^4.0.0": + version: 4.0.0 + resolution: "pino-std-serializers@npm:4.0.0" + checksum: 89d487729b58c9d3273a0ee851ead068d6d2e2ccc1af8e1c1d28f1b3442423679bec7ec04d9a2aba36f94f335e82be9f4de19dc4fbc161e71c136aaa15b85ad3 + languageName: node + linkType: hard + +"pino@npm:7.11.0": + version: 7.11.0 + resolution: "pino@npm:7.11.0" + dependencies: + atomic-sleep: ^1.0.0 + fast-redact: ^3.0.0 + on-exit-leak-free: ^0.2.0 + pino-abstract-transport: v0.5.0 + pino-std-serializers: ^4.0.0 + process-warning: ^1.0.0 + quick-format-unescaped: ^4.0.3 + real-require: ^0.1.0 + safe-stable-stringify: ^2.1.0 + sonic-boom: ^2.2.1 + thread-stream: ^0.15.1 + bin: + pino: bin.js + checksum: b919e7dbe41de978bb050dcef94fd687c012eb78d344a18f75f04ce180d5810fc162be1f136722d70cd005ed05832c4023a38b9acbc1076ae63c9f5ec5ca515c + languageName: node + linkType: hard + +"pirates@npm:^4.0.4": + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + +"plur@npm:^1.0.0": + version: 1.0.0 + resolution: "plur@npm:1.0.0" + checksum: bd8725178b2db5a708293c072631c84a33299dece6e5041835f874064e51c515d201905408c780e48df54d960d32bc0ac2e9e4cfe6d756ec4fff29ba5adfbf6c + languageName: node + linkType: hard + +"plur@npm:^2.1.2": + version: 2.1.2 + resolution: "plur@npm:2.1.2" + dependencies: + irregular-plurals: ^1.0.0 + checksum: d77a2f4766c622cfe5d34fe8c3503cc4925015d0875678fbda3a852b14016d30d47aa82f63a454409219061b0c0d7fc2138e7d71d94dec453624580ee3578769 + languageName: node + linkType: hard + +"pngjs@npm:^5.0.0": + version: 5.0.0 + resolution: "pngjs@npm:5.0.0" + checksum: 04e912cc45fb9601564e2284efaf0c5d20d131d9b596244f8a6789fc6cdb6b18d2975a6bbf7a001858d7e159d5c5c5dd7b11592e97629b7137f7f5cef05904c8 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.0.2": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f + languageName: node + linkType: hard + +"postcss@npm:8.4.14": + version: 8.4.14 + resolution: "postcss@npm:8.4.14" + dependencies: + nanoid: ^3.3.4 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: fe58766ff32e4becf65a7d57678995cfd239df6deed2fe0557f038b47c94e4132e7e5f68b5aa820c13adfec32e523b693efaeb65798efb995ce49ccd83953816 + languageName: node + linkType: hard + +"preact@npm:^10.12.0, preact@npm:^10.5.9": + version: 10.18.1 + resolution: "preact@npm:10.18.1" + checksum: 691030149fdbd026cac7c07147756f48c6cb8cdea6a8af8c0f383e4c31f5bce48cdc751e4bccf8826560a0d2db77ada401c0308f2bcae2961d16972c26c95607 + languageName: node + linkType: hard + +"prettier-plugin-organize-imports@npm:^3.2.3": + version: 3.2.3 + resolution: "prettier-plugin-organize-imports@npm:3.2.3" + peerDependencies: + "@volar/vue-language-plugin-pug": ^1.0.4 + "@volar/vue-typescript": ^1.0.4 + prettier: ">=2.0" + typescript: ">=2.9" + peerDependenciesMeta: + "@volar/vue-language-plugin-pug": + optional: true + "@volar/vue-typescript": + optional: true + checksum: e97dd707ce88960885df9598c2c0b8187169ff4664e7a5083a8603eabfb457aa0a0eafdf5cb60877a1085e2da5f9cb19fa441061227aa23524e5fe1709bae0cf + languageName: node + linkType: hard + +"prettier@npm:^3.0.3": + version: 3.0.3 + resolution: "prettier@npm:3.0.3" + bin: + prettier: bin/prettier.cjs + checksum: e10b9af02b281f6c617362ebd2571b1d7fc9fb8a3bd17e371754428cda992e5e8d8b7a046e8f7d3e2da1dcd21aa001e2e3c797402ebb6111b5cd19609dd228e0 + languageName: node + linkType: hard + +"pretty-format@npm:^22.0.3, pretty-format@npm:^22.4.3": + version: 22.4.3 + resolution: "pretty-format@npm:22.4.3" + dependencies: + ansi-regex: ^3.0.0 + ansi-styles: ^3.2.0 + checksum: 300f4fcf32b6d49cd4e6ed81ee20e4e5484ffb55d3791f1ffe7a5f410d0ed14027134fc04e0032bc09b4a44e548472ead12663384c44bc5813eb5f61fe244830 + languageName: node + linkType: hard + +"pretty-format@npm:^27.0.2": + version: 27.5.1 + resolution: "pretty-format@npm:27.5.1" + dependencies: + ansi-regex: ^5.0.1 + ansi-styles: ^5.0.0 + react-is: ^17.0.1 + checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": ^29.6.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + languageName: node + linkType: hard + +"pretty-ms@npm:^2.1.0": + version: 2.1.0 + resolution: "pretty-ms@npm:2.1.0" + dependencies: + is-finite: ^1.0.1 + parse-ms: ^1.0.0 + plur: ^1.0.0 + checksum: a6a3df561f761902080df23407fc549cc3042fd685d8d2906e6cc2bd5024a814fb2bd4bd061e24879a8540c3aa48faba366421d5b49c268fbfb3501493835c2a + languageName: node + linkType: hard + +"process-nextick-args@npm:~1.0.6": + version: 1.0.7 + resolution: "process-nextick-args@npm:1.0.7" + checksum: 41224fbc803ac6c96907461d4dfc20942efa3ca75f2d521bcf7cf0e89f8dec127fb3fb5d76746b8fb468a232ea02d84824fae08e027aec185fd29049c66d49f8 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"process-warning@npm:^1.0.0": + version: 1.0.0 + resolution: "process-warning@npm:1.0.0" + checksum: c708a03241deec3cabaeee39c4f9ee8c4d71f1c5ef9b746c8252cdb952a6059068cfcdaf348399775244cbc441b6ae5e26a9c87ed371f88335d84f26d19180f9 + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"prompts@npm:^2.0.1": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + languageName: node + linkType: hard + +"prop-types@npm:^15.5.8, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + languageName: node + linkType: hard + +"proper-lockfile@npm:^4.1.2": + version: 4.1.2 + resolution: "proper-lockfile@npm:4.1.2" + dependencies: + graceful-fs: ^4.2.4 + retry: ^0.12.0 + signal-exit: ^3.0.2 + checksum: 00078ee6a61c216a56a6140c7d2a98c6c733b3678503002dc073ab8beca5d50ca271de4c85fca13b9b8ee2ff546c36674d1850509b84a04a5d0363bcb8638939 + languageName: node + linkType: hard + +"protobufjs@npm:^6.10.2, protobufjs@npm:^6.11.2": + version: 6.11.4 + resolution: "protobufjs@npm:6.11.4" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/long": ^4.0.1 + "@types/node": ">=13.7.0" + long: ^4.0.0 + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: b2fc6a01897b016c2a7e43a854ab4a3c57080f61be41e552235436e7a730711b8e89e47cb4ae52f0f065b5ab5d5989fc932f390337ce3a8ccf07203415700850 + languageName: node + linkType: hard + +"protobufjs@npm:^7.0.0": + version: 7.2.5 + resolution: "protobufjs@npm:7.2.5" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/node": ">=13.7.0" + long: ^5.0.0 + checksum: 3770a072114061faebbb17cfd135bc4e187b66bc6f40cd8bac624368b0270871ec0cfb43a02b9fb4f029c8335808a840f1afba3c2e7ede7063b98ae6b98a703f + languageName: node + linkType: hard + +"proxy-compare@npm:2.5.1": + version: 2.5.1 + resolution: "proxy-compare@npm:2.5.1" + checksum: c7cc151ac255150bcb24becde6495b3e399416c31991af377ce082255b51f07eaeb5d861bf8bf482703e92f88b90a5892ad57d3153ea29450d03ef921683d9fa + languageName: node + linkType: hard + +"pure-rand@npm:^6.0.0": + version: 6.0.4 + resolution: "pure-rand@npm:6.0.4" + checksum: e1c4e69f8bf7303e5252756d67c3c7551385cd34d94a1f511fe099727ccbab74c898c03a06d4c4a24a89b51858781057b83ebbfe740d984240cdc04fead36068 + languageName: node + linkType: hard + +"qrcode-generator@npm:^1.4.1": + version: 1.4.4 + resolution: "qrcode-generator@npm:1.4.4" + checksum: 860cfdd2a7a608d34e92cab99774cc08182e1911432f30ed36d16f8a5cdabd7fdf40239caed91fa2691cfe66c8d95c1340a2fc9cc439eed07a9f2eb328c6f527 + languageName: node + linkType: hard + +"qrcode@npm:1.5.3, qrcode@npm:^1.5.1": + version: 1.5.3 + resolution: "qrcode@npm:1.5.3" + dependencies: + dijkstrajs: ^1.0.1 + encode-utf8: ^1.0.3 + pngjs: ^5.0.0 + yargs: ^15.3.1 + bin: + qrcode: bin/qrcode + checksum: 9a8a20a0a9cb1d15de8e7b3ffa214e8b6d2a8b07655f25bd1b1d77f4681488f84d7bae569870c0652872d829d5f8ac4922c27a6bd14c13f0e197bf07b28dead7 + languageName: node + linkType: hard + +"qs@npm:^6.10.3, qs@npm:^6.11.2": + version: 6.11.2 + resolution: "qs@npm:6.11.2" + dependencies: + side-channel: ^1.0.4 + checksum: e812f3c590b2262548647d62f1637b6989cc56656dc960b893fe2098d96e1bd633f36576f4cd7564dfbff9db42e17775884db96d846bebe4f37420d073ecdc0b + languageName: node + linkType: hard + +"query-string@npm:7.1.3": + version: 7.1.3 + resolution: "query-string@npm:7.1.3" + dependencies: + decode-uri-component: ^0.2.2 + filter-obj: ^1.1.0 + split-on-first: ^1.0.0 + strict-uri-encode: ^2.0.0 + checksum: 91af02dcd9cc9227a052841d5c2eecb80a0d6489d05625df506a097ef1c59037cfb5e907f39b84643cbfd535c955abec3e553d0130a7b510120c37d06e0f4346 + languageName: node + linkType: hard + +"query-string@npm:^6.13.5": + version: 6.14.1 + resolution: "query-string@npm:6.14.1" + dependencies: + decode-uri-component: ^0.2.0 + filter-obj: ^1.1.0 + split-on-first: ^1.0.0 + strict-uri-encode: ^2.0.0 + checksum: f2c7347578fa0f3fd4eaace506470cb4e9dc52d409a7ddbd613f614b9a594d750877e193b5d5e843c7477b3b295b857ec328903c943957adc41a3efb6c929449 + languageName: node + linkType: hard + +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.3": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: 7bc32b99354a1aa46c089d2a82b63489961002bb1d654cee3e6d2d8778197b68c2d854fd23d8422436ee1fdfd0abaddc4d4da120afe700ade68bd357815b26fd + languageName: node + linkType: hard + +"quick-lru@npm:^4.0.1": + version: 4.0.1 + resolution: "quick-lru@npm:4.0.1" + checksum: bea46e1abfaa07023e047d3cf1716a06172c4947886c053ede5c50321893711577cb6119360f810cc3ffcd70c4d7db4069c3cee876b358ceff8596e062bd1154 + languageName: node + linkType: hard + +"rabin-wasm@npm:^0.1.4": + version: 0.1.5 + resolution: "rabin-wasm@npm:0.1.5" + dependencies: + "@assemblyscript/loader": ^0.9.4 + bl: ^5.0.0 + debug: ^4.3.1 + minimist: ^1.2.5 + node-fetch: ^2.6.1 + readable-stream: ^3.6.0 + bin: + rabin-wasm: cli/bin.js + checksum: e6892830c0cae57560d4630e480b624792706183898500cf0c3415a19f7e774d99169a968a73471e5c448f9d3ebc9dbf09a9d36344d7779ececf7928ebb0d7f0 + languageName: node + linkType: hard + +"raf@npm:^3.4.1": + version: 3.4.1 + resolution: "raf@npm:3.4.1" + dependencies: + performance-now: ^2.1.0 + checksum: 50ba284e481c8185dbcf45fc4618ba3aec580bb50c9121385d5698cb6012fe516d2015b1df6dd407a7b7c58d44be8086108236affbce1861edd6b44637c8cd52 + languageName: node + linkType: hard + +"ramda@npm:^0.27.1": + version: 0.27.2 + resolution: "ramda@npm:0.27.2" + checksum: 28d6735dd1eea1a796c56cf6111f3673c6105bbd736e521cdd7826c46a18eeff337c2dba4668f6eed990d539b9961fd6db19aa46ccc1530ba67a396c0a9f580d + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 + languageName: node + linkType: hard + +"re-emitter@npm:1.1.3": + version: 1.1.3 + resolution: "re-emitter@npm:1.1.3" + checksum: 3234850c26c4e51622ad7e54172396134cd510c2511da680275ab1e663e5d12c8b81e3e6f4ec025527ed241ad53dae9d1478c0148569840d2fec96a37d155431 + languageName: node + linkType: hard + +"react-cookies@npm:^0.1.1": + version: 0.1.1 + resolution: "react-cookies@npm:0.1.1" + dependencies: + cookie: ^0.3.1 + object-assign: ^4.1.1 + checksum: a31a7f5e43cdbcf7a86dcbac152e9009668fd216926bcb3f6d0fd8e3df09f6b3f3061021fb61deb2d81db1139069a5df2205565659deca6083c71aae952bfc17 + languageName: node + linkType: hard + +"react-dom@npm:^17.0.2": + version: 17.0.2 + resolution: "react-dom@npm:17.0.2" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + scheduler: ^0.20.2 + peerDependencies: + react: 17.0.2 + checksum: 1c1eaa3bca7c7228d24b70932e3d7c99e70d1d04e13bb0843bbf321582bc25d7961d6b8a6978a58a598af2af496d1cedcfb1bf65f6b0960a0a8161cb8dab743c + languageName: node + linkType: hard + +"react-emoji-render@npm:^2.0.1": + version: 2.0.1 + resolution: "react-emoji-render@npm:2.0.1" + dependencies: + classnames: ^2.2.5 + emoji-regex: ^8.0.0 + lodash.flatten: ^4.4.0 + prop-types: ^15.5.8 + string-replace-to-array: ^1.0.1 + peerDependencies: + react: ">=0.14.0" + react-dom: ">=0.14.0" + checksum: 317864740b74eaf6576671dd7d72f41a56a396abeea6a47373149a8ecfb8275f3a890a5af48f42fee1c4c0ec72bd66de9edcbbb7fd6b2dd7eeee0d85efee7618 + languageName: node + linkType: hard + +"react-error-boundary@npm:^3.1.0": + version: 3.1.4 + resolution: "react-error-boundary@npm:3.1.4" + dependencies: + "@babel/runtime": ^7.12.5 + peerDependencies: + react: ">=16.13.1" + checksum: f36270a5d775a25c8920f854c0d91649ceea417b15b5bc51e270a959b0476647bb79abb4da3be7dd9a4597b029214e8fe43ea914a7f16fa7543c91f784977f1b + languageName: node + linkType: hard + +"react-hook-form@npm:^7.42.1": + version: 7.47.0 + resolution: "react-hook-form@npm:7.47.0" + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + checksum: dec192fec9c54e436f9e47008635dd7849b6b119ed477a9b0cd491367a0b2ced3427cd937febfb245e1cb7578c863917181d903eff4519c2787bf713ec7d3426 + languageName: node + linkType: hard + +"react-icons@npm:^4.10.1": + version: 4.11.0 + resolution: "react-icons@npm:4.11.0" + peerDependencies: + react: "*" + checksum: 7b8b80bbe2dabcc54b6c2129b7761a04b19caebe24389adc7683478ef41212b9ca0b53c63abcc06b3c01b94c84855ec5142b4c357e19c4aaaad9a4db23a3c485 + languageName: node + linkType: hard + +"react-infinite-scroll-component@npm:^6.1.0": + version: 6.1.0 + resolution: "react-infinite-scroll-component@npm:6.1.0" + dependencies: + throttle-debounce: ^2.1.0 + peerDependencies: + react: ">=16.0.0" + checksum: 3708398934366df907dbad215247ebc1033221957ce7e32289ea31750cce70aa16513e2d03743e06c8b868ac7c542d12d5dbb6c830fd408433a4762f3cb5ecfb + languageName: node + linkType: hard + +"react-is-mounted-hook@npm:^1.1.2": + version: 1.1.2 + resolution: "react-is-mounted-hook@npm:1.1.2" + peerDependencies: + react: ^16.8.6 || ^17 + react-dom: ^16.8.6 || ^17 + checksum: 297e28bc6fe77f1ba13536246a1747c1478e1896fe7ade7b0801baf902774116cd2ec38ad91a08eb9b9706e03fbf63ca4534bdbc9b7a0ce9e4a15d9295712f13 + languageName: node + linkType: hard + +"react-is@npm:^16.13.1, react-is@npm:^16.7.0": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^17.0.1, react-is@npm:^17.0.2": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 + languageName: node + linkType: hard + +"react-is@npm:^18.0.0, react-is@npm:^18.2.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + +"react-lazy-load-image-component@npm:^1.6.0": + version: 1.6.0 + resolution: "react-lazy-load-image-component@npm:1.6.0" + dependencies: + lodash.debounce: ^4.0.8 + lodash.throttle: ^4.1.1 + peerDependencies: + react: ^15.x.x || ^16.x.x || ^17.x.x || ^18.x.x + react-dom: ^15.x.x || ^16.x.x || ^17.x.x || ^18.x.x + checksum: ab6db459c81a311e621ceb8be184472108ad5cff85cd5b80a52c0c16be808f8084a5fca756695eb0c84f543af6715a3bb1b50e702dd2485cb9162b30bcce3e35 + languageName: node + linkType: hard + +"react-medium-image-zoom@npm:^5.1.6": + version: 5.1.8 + resolution: "react-medium-image-zoom@npm:5.1.8" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 8c880673b3709fdfc4de0807245c61e727451930495478e8bda589d0f006a2aab046e84d02d2fdf94f57bf6d5fc2331f804fec2b64f23e495ebf290983699c31 + languageName: node + linkType: hard + +"react-native-fetch-api@npm:^3.0.0": + version: 3.0.0 + resolution: "react-native-fetch-api@npm:3.0.0" + dependencies: + p-defer: ^3.0.0 + checksum: f10f435060551c470711ba0b3663e3d49c7701aae84ea645d66992d756b13e923fb5762b324d3583d85c1c0def4138b9cc3f686bab1c1bc10d3ad82dc7175c99 + languageName: node + linkType: hard + +"react-property@npm:2.0.0": + version: 2.0.0 + resolution: "react-property@npm:2.0.0" + checksum: 8a444df30ef0937689c7968dae2501a0ca523777169f450e1f7ef5beeb855d6509bd058bf612f6ed8f459aa35468335d356e50264492e1938586e59fdb988262 + languageName: node + linkType: hard + +"react-qrcode-logo@npm:^2.8.0": + version: 2.9.0 + resolution: "react-qrcode-logo@npm:2.9.0" + dependencies: + lodash.isequal: ^4.5.0 + qrcode-generator: ^1.4.1 + peerDependencies: + react: ">=16.4.1" + react-dom: ">=16.4.1" + checksum: 24dbabb24091c13062981da8336e92f1ed2bf576b1eee1fcc8945dc6e4bde94fdec887da8380cbe49fe10bfdeb06eda393f135a15a4ecf13c45472bdfd2510a5 + languageName: node + linkType: hard + +"react-query@npm:^3.39.3": + version: 3.39.3 + resolution: "react-query@npm:3.39.3" + dependencies: + "@babel/runtime": ^7.5.5 + broadcast-channel: ^3.4.1 + match-sorter: ^6.0.2 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: d2de6a0992dbf039ff2de564de1ae6361f8ac7310159dae42ec16f833b79c05caedced187235c42373ac331cc5f2fe9e2b31b14ae75a815e86d86e30ca9887ad + languageName: node + linkType: hard + +"react-redux@npm:^7.2.5": + version: 7.2.9 + resolution: "react-redux@npm:7.2.9" + dependencies: + "@babel/runtime": ^7.15.4 + "@types/react-redux": ^7.1.20 + hoist-non-react-statics: ^3.3.2 + loose-envify: ^1.4.0 + prop-types: ^15.7.2 + react-is: ^17.0.2 + peerDependencies: + react: ^16.8.3 || ^17 || ^18 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 369a2bdcf87915659af9e5c55abfd9f52a84e43e0d12dcc108ed17dbe6933558b7b7fc12caa9c10c1a10a8be7df89454b6c96989d8573fedec1a772c94a1f145 + languageName: node + linkType: hard + +"react-remove-scroll-bar@npm:^2.3.3": + version: 2.3.4 + resolution: "react-remove-scroll-bar@npm:2.3.4" + dependencies: + react-style-singleton: ^2.2.1 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: b5ce5f2f98d65c97a3e975823ae4043a4ba2a3b63b5ba284b887e7853f051b5cd6afb74abde6d57b421931c52f2e1fdbb625dc858b1cb5a32c27c14ab85649d4 + languageName: node + linkType: hard + +"react-remove-scroll@npm:2.5.5": + version: 2.5.5 + resolution: "react-remove-scroll@npm:2.5.5" + dependencies: + react-remove-scroll-bar: ^2.3.3 + react-style-singleton: ^2.2.1 + tslib: ^2.1.0 + use-callback-ref: ^1.3.0 + use-sidecar: ^1.1.2 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 2c7fe9cbd766f5e54beb4bec2e2efb2de3583037b23fef8fa511ab426ed7f1ae992382db5acd8ab5bfb030a4b93a06a2ebca41377d6eeaf0e6791bb0a59616a4 + languageName: node + linkType: hard + +"react-style-singleton@npm:^2.2.1": + version: 2.2.1 + resolution: "react-style-singleton@npm:2.2.1" + dependencies: + get-nonce: ^1.0.0 + invariant: ^2.2.4 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7ee8ef3aab74c7ae1d70ff34a27643d11ba1a8d62d072c767827d9ff9a520905223e567002e0bf6c772929d8ea1c781a3ba0cc4a563e92b1e3dc2eaa817ecbe8 + languageName: node + linkType: hard + +"react-toastify@npm:^9.1.3": + version: 9.1.3 + resolution: "react-toastify@npm:9.1.3" + dependencies: + clsx: ^1.1.1 + peerDependencies: + react: ">=16" + react-dom: ">=16" + checksum: e8bd92c5cbf831b43a042644ab9bc69abe6ceb3ce91ba71f5cd2d8b6a2c9885ca52770e1f1ba64c5632607f6df962db344a26c7fba57606faf5aa0e7bfc8535f + languageName: node + linkType: hard + +"react-transition-group@npm:^4.4.5": + version: 4.4.5 + resolution: "react-transition-group@npm:4.4.5" + dependencies: + "@babel/runtime": ^7.5.5 + dom-helpers: ^5.0.1 + loose-envify: ^1.4.0 + prop-types: ^15.6.2 + peerDependencies: + react: ">=16.6.0" + react-dom: ">=16.6.0" + checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 + languageName: node + linkType: hard + +"react-twitter-embed@npm:^4.0.4": + version: 4.0.4 + resolution: "react-twitter-embed@npm:4.0.4" + dependencies: + scriptjs: ^2.5.9 + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: cdb3c5bd04c4da0efa767476be47c0a3865fb6335f2a1b9e242170167b51615c38164223278cef60c77143c4bac27ba582cbea054d0af3f138104fa5ec537c4c + languageName: node + linkType: hard + +"react-visibility-sensor@npm:^5.1.1": + version: 5.1.1 + resolution: "react-visibility-sensor@npm:5.1.1" + dependencies: + prop-types: ^15.7.2 + peerDependencies: + react: ">=16.0.0" + react-dom: ">=16.0.0" + checksum: ebce7bc743071930a2dd333a041c4a99aac24d5059c47a52eff25a8d81ab9307fadc87b8a6655ebb3154f5c1ceafcc309ae04ee07a7d5fad2949a6903d15acd5 + languageName: node + linkType: hard + +"react@npm:17.0.2": + version: 17.0.2 + resolution: "react@npm:17.0.2" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + checksum: b254cc17ce3011788330f7bbf383ab653c6848902d7936a87b09d835d091e3f295f7e9dd1597c6daac5dc80f90e778c8230218ba8ad599f74adcc11e33b9d61b + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: ^4.1.0 + read-pkg: ^5.2.0 + type-fest: ^0.8.1 + checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": ^2.4.0 + normalize-package-data: ^2.5.0 + parse-json: ^5.0.0 + type-fest: ^0.6.0 + checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 + languageName: node + linkType: hard + +"readable-stream@npm:2.2.9": + version: 2.2.9 + resolution: "readable-stream@npm:2.2.9" + dependencies: + buffer-shims: ~1.0.0 + core-util-is: ~1.0.0 + inherits: ~2.0.1 + isarray: ~1.0.0 + process-nextick-args: ~1.0.6 + string_decoder: ~1.0.0 + util-deprecate: ~1.0.1 + checksum: d186b7051c4a25b769fa158d1025da83dfb0052f8b0889df40e8e942d05b4d0d37470c49cfd73cce886db66d1a8cd5ec5e2ce97857894587d8158da5ed93baa7 + languageName: node + linkType: hard + +"readable-stream@npm:^2.0.2, readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + 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 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"readable-stream@npm:~1.0.17, readable-stream@npm:~1.0.27-1": + version: 1.0.34 + resolution: "readable-stream@npm:1.0.34" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.1 + isarray: 0.0.1 + string_decoder: ~0.10.x + checksum: 85042c537e4f067daa1448a7e257a201070bfec3dd2706abdbd8ebc7f3418eb4d3ed4b8e5af63e2544d69f88ab09c28d5da3c0b77dc76185fddd189a59863b60 + languageName: node + linkType: hard + +"real-require@npm:^0.1.0": + version: 0.1.0 + resolution: "real-require@npm:0.1.0" + checksum: 96745583ed4f82cd5c6a6af012fd1d3c6fc2f13ae1bcff1a3c4f8094696013a1a07c82c5aa66a403d7d4f84949fc2203bc927c7ad120caad125941ca2d7e5e8e + languageName: node + linkType: hard + +"receptacle@npm:^1.3.2": + version: 1.3.2 + resolution: "receptacle@npm:1.3.2" + dependencies: + ms: ^2.1.1 + checksum: 7c5011f19e6ddcb759c1e6756877cee3c9eb78fbd1278eca4572d75f74993f0ccdc1e5f7761de6e682dff5344ee94f7a69bc492e2e8eb81d8777774a2399ce9c + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: ^4.0.0 + strip-indent: ^3.0.0 + checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b + languageName: node + linkType: hard + +"redux-devtools-extension@npm:^2.13.9": + version: 2.13.9 + resolution: "redux-devtools-extension@npm:2.13.9" + peerDependencies: + redux: ^3.1.0 || ^4.0.0 + checksum: 603d48fd6acf3922ef373b251ab3fdbb990035e90284191047b29d25b06ea18122bc4ef01e0704ccae495acb27ab5e47b560937e98213605dd88299470025db9 + languageName: node + linkType: hard + +"redux-thunk@npm:^2.3.0, redux-thunk@npm:^2.4.2": + version: 2.4.2 + resolution: "redux-thunk@npm:2.4.2" + peerDependencies: + redux: ^4 + checksum: c7f757f6c383b8ec26152c113e20087818d18ed3edf438aaad43539e9a6b77b427ade755c9595c4a163b6ad3063adf3497e5fe6a36c68884eb1f1cfb6f049a5c + languageName: node + linkType: hard + +"redux@npm:^4.0.0, redux@npm:^4.1.1, redux@npm:^4.2.1": + version: 4.2.1 + resolution: "redux@npm:4.2.1" + dependencies: + "@babel/runtime": ^7.9.2 + checksum: f63b9060c3a1d930ae775252bb6e579b42415aee7a23c4114e21a0b4ba7ec12f0ec76936c00f546893f06e139819f0e2855e0d55ebfce34ca9c026241a6950dd + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.0 + resolution: "regenerator-runtime@npm:0.14.0" + checksum: 1c977ad82a82a4412e4f639d65d22be376d3ebdd30da2c003eeafdaaacd03fc00c2320f18120007ee700900979284fc78a9f00da7fb593f6e6eeebc673fba9a3 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.0, regexp.prototype.flags@npm:^1.5.1": + version: 1.5.1 + resolution: "regexp.prototype.flags@npm:1.5.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + set-function-name: ^2.0.0 + checksum: 869edff00288442f8d7fa4c9327f91d85f3b3acf8cbbef9ea7a220345cf23e9241b6def9263d2c1ebcf3a316b0aa52ad26a43a84aa02baca3381717b3e307f47 + languageName: node + linkType: hard + +"remove-accents@npm:0.4.2": + version: 0.4.2 + resolution: "remove-accents@npm:0.4.2" + checksum: 84a6988555dea24115e2d1954db99509588d43fe55a1590f0b5894802776f7b488b3151c37ceb9e4f4b646f26b80b7325dcea2fae58bc3865df146e1fa606711 + languageName: node + linkType: hard + +"repeat-string@npm:^1.5.2": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + +"reselect@npm:^4.1.8": + version: 4.1.8 + resolution: "reselect@npm:4.1.8" + checksum: a4ac87cedab198769a29be92bc221c32da76cfdad6911eda67b4d3e7136dca86208c3b210e31632eae31ebd2cded18596f0dd230d3ccc9e978df22f233b5583e + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: ^5.0.0 + checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c + languageName: node + linkType: hard + +"resolve@npm:^2.0.0-next.5": + version: 2.0.0-next.5 + resolution: "resolve@npm:2.0.0-next.5" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: a73ac69a1c4bd34c56b213d91f5b17ce390688fdb4a1a96ed3025cc7e08e7bfb90b3a06fcce461780cb0b589c958afcb0080ab802c71c01a7ecc8c64feafc89f + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 + languageName: node + linkType: hard + +"resolve@patch:resolve@^2.0.0-next.5#~builtin": + version: 2.0.0-next.5 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin::version=2.0.0-next.5&hash=c3c19d" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 064d09c1808d0c51b3d90b5d27e198e6d0c5dad0eb57065fd40803d6a20553e5398b07f76739d69cbabc12547058bec6b32106ea66622375fb0d7e8fca6a846c + languageName: node + linkType: hard + +"retimer@npm:^2.0.0": + version: 2.0.0 + resolution: "retimer@npm:2.0.0" + checksum: a59c837e1b364c4ef85c19250a94c09a49c55076ec3c5c51fafa335ee89d2ac2b91b7623548c8edb1345d7515b054986e904f8429e6caefa0595c2c70be8923d + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"retry@npm:^0.13.1": + version: 0.13.1 + resolution: "retry@npm:0.13.1" + checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b + languageName: node + linkType: hard + +"rimraf@npm:3.0.2, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"rooks@npm:^5.7.0": + version: 5.14.1 + resolution: "rooks@npm:5.14.1" + dependencies: + lodash.debounce: ^4.0.8 + raf: ^3.4.1 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 2a06382d9f674d5701e0400e04702e98ad8425ecb8f5236906b1cf87de6d77efcb446328128c92208e6357e237b3ca3e55cb717a60f097ee115cc73b1b446450 + languageName: node + linkType: hard + +"rpc-websockets@npm:^7.5.1": + version: 7.6.0 + resolution: "rpc-websockets@npm:7.6.0" + dependencies: + "@babel/runtime": ^7.17.2 + bufferutil: ^4.0.1 + eventemitter3: ^4.0.7 + utf-8-validate: ^5.0.2 + uuid: ^8.3.2 + ws: ^8.5.0 + dependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: af2b254f65985610bd354e8e13de07b5a36010b94672b0b5a9d226b9bb1b8b17d01c63221cad97263845888f3610e55867a32e4c0017dfb92fddf89417c4cb6c + languageName: node + linkType: hard + +"rxjs@npm:^6.6.3": + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" + dependencies: + tslib: ^1.9.0 + checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b + languageName: node + linkType: hard + +"rxjs@npm:^7.8.0": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: ^2.1.0 + checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.0.1": + version: 1.0.1 + resolution: "safe-array-concat@npm:1.0.1" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: 001ecf1d8af398251cbfabaf30ed66e3855127fbceee178179524b24160b49d15442f94ed6c0db0b2e796da76bb05b73bf3cc241490ec9c2b741b41d33058581 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-json-utils@npm:^1.1.1": + version: 1.1.1 + resolution: "safe-json-utils@npm:1.1.1" + checksum: f82a5833b7f6f25583c46520b3e158da3864d4f6f85b7cd68ec956ae7023395872e834d75f7f6216c109c546d10b6ee15c066d849f75ac2a7b86b8a041b4f01f + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-regex-test@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + is-regex: ^1.1.4 + checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + languageName: node + linkType: hard + +"safe-stable-stringify@npm:^2.1.0": + version: 2.4.3 + resolution: "safe-stable-stringify@npm:2.4.3" + checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.1.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"scheduler@npm:^0.20.2": + version: 0.20.2 + resolution: "scheduler@npm:0.20.2" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + checksum: c4b35cf967c8f0d3e65753252d0f260271f81a81e427241295c5a7b783abf4ea9e905f22f815ab66676f5313be0a25f47be582254db8f9241b259213e999b8fc + languageName: node + linkType: hard + +"scriptjs@npm:^2.5.9": + version: 2.5.9 + resolution: "scriptjs@npm:2.5.9" + checksum: fc84cb6b60b6fb9aa6f1b3bc59fc94b233bd5241ed3a04233579014382b5eb60640269c87d8657902acc09f9b785ee33230c218627cea00e653564bda8f5acb6 + languageName: node + linkType: hard + +"scrypt-js@npm:3.0.1": + version: 3.0.1 + resolution: "scrypt-js@npm:3.0.1" + checksum: b7c7d1a68d6ca946f2fbb0778e0c4ec63c65501b54023b2af7d7e9f48fdb6c6580d6f7675cd53bda5944c5ebc057560d5a6365079752546865defb3b79dea454 + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 + languageName: node + linkType: hard + +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + +"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"server@workspace:.": + version: 0.0.0-use.local + resolution: "server@workspace:." + dependencies: + "@braintree/sanitize-url": ^6.0.4 + "@emotion/react": ^11.11.1 + "@emotion/server": ^11.4.0 + "@emotion/styled": ^11.11.0 + "@jedmao/redux-mock-store": ^3.0.5 + "@mui/icons-material": ^5.14.13 + "@mui/material": ^5.14.13 + "@pushprotocol/restapi": ^1.4.15 + "@pushprotocol/socket": ^0.5.1 + "@pushprotocol/uiweb": ^1.1.13 + "@reduxjs/toolkit": ^1.6.2 + "@testing-library/react": ^12.1.2 + "@testing-library/react-hooks": ^7.0.2 + "@types/bluebird": 3.5.34 + "@types/jest": ^29.5.5 + "@types/lodash": ^4.14.199 + "@types/lodash.merge": ^4.6.7 + "@types/node": 17.0.24 + "@types/numeral": ^2.0.2 + "@types/qs": ^6.9.8 + "@types/ramda": ^0.29.6 + "@types/react": 17.0.2 + "@types/react-cookies": ^0.1.1 + "@types/react-dom": ^17.0.2 + "@types/react-lazy-load-image-component": ^1.6.0 + "@types/react-redux": ^7.1.24 + "@uauth/js": ^2.8.0 + "@unstoppabledomains/resolution": ^8.5.0 + "@unstoppabledomains/ui-kit": ^0.3.15 + "@web3-react/core": ^8.2.2 + "@xmtp/content-type-remote-attachment": ^1.0.7 + "@xmtp/proto": ^3.27.0 + "@xmtp/xmtp-js": ^11.1.1 + bluebird: ^3.7.2 + clipboard-copy: ^4.0.1 + date-fns: ^2.16.1 + eslint-plugin-i18n-json: ^3.1.0 + filesize: ^10.0.8 + font-awesome: ^4.7.0 + hash.js: ^1.1.7 + jest: ^29.1.0 + js-base64: ^3.7.5 + lodash: ^4.17.21 + lodash.merge: ^4.6.2 + next: ^12.3.4 + next-redux-wrapper: ^6.0.2 + next-seo: ^6.1.0 + next-transpile-modules: ^10.0.0 + notistack: ^2.0.5 + numeral: ^2.0.6 + prettier: ^3.0.3 + prettier-plugin-organize-imports: ^3.2.3 + qs: ^6.11.2 + ramda: ^0.27.1 + react: 17.0.2 + react-cookies: ^0.1.1 + react-dom: ^17.0.2 + react-emoji-render: ^2.0.1 + react-hook-form: ^7.42.1 + react-infinite-scroll-component: ^6.1.0 + react-is-mounted-hook: ^1.1.2 + react-lazy-load-image-component: ^1.6.0 + react-medium-image-zoom: ^5.1.6 + react-qrcode-logo: ^2.8.0 + react-query: ^3.39.3 + react-redux: ^7.2.5 + react-visibility-sensor: ^5.1.1 + redux: ^4.1.1 + redux-devtools-extension: ^2.13.9 + redux-thunk: ^2.3.0 + rooks: ^5.7.0 + styled-components: ^5.3.5 + swiper: 6.8.4 + title-case: ^3.0.3 + truncate-eth-address: ^1.0.2 + tss-react: ^4.0.0 + typescript: 5.0.4 + wagmi: ^1.4.4 + web3.storage: ^4.5.5 + languageName: unknown + linkType: soft + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.0": + version: 2.0.1 + resolution: "set-function-name@npm:2.0.1" + dependencies: + define-data-property: ^1.0.1 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.0 + checksum: 4975d17d90c40168eee2c7c9c59d023429f0a1690a89d75656306481ece0c3c1fb1ebcc0150ea546d1913e35fbd037bace91372c69e543e51fc5d1f31a9fa126 + languageName: node + linkType: hard + +"sha.js@npm:^2.4.11": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + bin: + sha.js: ./bin.js + checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 + languageName: node + linkType: hard + +"shallowequal@npm:^1.1.0": + version: 1.1.0 + resolution: "shallowequal@npm:1.1.0" + checksum: f4c1de0837f106d2dbbfd5d0720a5d059d1c66b42b580965c8f06bb1db684be8783538b684092648c981294bf817869f743a066538771dbecb293df78f765e00 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.4 + resolution: "side-channel@npm:1.0.4" + dependencies: + call-bind: ^1.0.0 + get-intrinsic: ^1.0.2 + object-inspect: ^1.9.0 + checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"simple-peer@npm:^9.11.1": + version: 9.11.1 + resolution: "simple-peer@npm:9.11.1" + dependencies: + buffer: ^6.0.3 + debug: ^4.3.2 + err-code: ^3.0.1 + get-browser-rtc: ^1.1.0 + queue-microtask: ^1.2.3 + randombytes: ^2.1.0 + readable-stream: ^3.6.0 + checksum: 1d9950851f86ff827cfd6646620503143b840c751eb6bfffffbee6e69ebc065dd5b7cfa629010f9a3e1a98312549a6411ef15ce3652a523c8cc042052192fa55 + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socket.io-client@npm:^4.5.2": + version: 4.7.2 + resolution: "socket.io-client@npm:4.7.2" + dependencies: + "@socket.io/component-emitter": ~3.1.0 + debug: ~4.3.2 + engine.io-client: ~6.5.2 + socket.io-parser: ~4.2.4 + checksum: 8f0ab6b623e014d889bae0cd847ef7826658e8f131bd9367ee5ae4404bb52a6d7b1755b8fbe8e68799b60e92149370a732b381f913b155e40094facb135cd088 + languageName: node + linkType: hard + +"socket.io-parser@npm:~4.2.4": + version: 4.2.4 + resolution: "socket.io-parser@npm:4.2.4" + dependencies: + "@socket.io/component-emitter": ~3.1.0 + debug: ~4.3.1 + checksum: 61540ef99af33e6a562b9effe0fad769bcb7ec6a301aba5a64b3a8bccb611a0abdbe25f469933ab80072582006a78ca136bf0ad8adff9c77c9953581285e2263 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"sonic-boom@npm:^2.2.1": + version: 2.8.0 + resolution: "sonic-boom@npm:2.8.0" + dependencies: + atomic-sleep: ^1.0.0 + checksum: c7f9c89f931d7f60f8e0741551a729f0d81e6dc407a99420fc847a9a4c25af048a615b1188ab3c4f1fb3708fe4904973ddab6ebcc8ed5b78b50ab81a99045910 + languageName: node + linkType: hard + +"source-map-js@npm:^1.0.2": + version: 1.0.2 + resolution: "source-map-js@npm:1.0.2" + checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 + languageName: node + linkType: hard + +"source-map@npm:^0.5.7": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"sparse-array@npm:^1.3.1": + version: 1.3.2 + resolution: "sparse-array@npm:1.3.2" + checksum: 3b41741cfc29c568b09cbc0205fc613c16daebde358d9356b80d53d63e739012617e7e038be3c77a493ec007927784b9e0a0531cb76cf91d4f8cc7029391039b + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.3.0 + resolution: "spdx-exceptions@npm:2.3.0" + checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.16 + resolution: "spdx-license-ids@npm:3.0.16" + checksum: 5cdaa85aaa24bd02f9353a2e357b4df0a4f205cb35655f3fd0a5674a4fb77081f28ffd425379214bc3be2c2b7593ce1215df6bcc75884aeee0a9811207feabe2 + languageName: node + linkType: hard + +"split-on-first@npm:^1.0.0": + version: 1.1.0 + resolution: "split-on-first@npm:1.1.0" + checksum: 16ff85b54ddcf17f9147210a4022529b343edbcbea4ce977c8f30e38408b8d6e0f25f92cd35b86a524d4797f455e29ab89eb8db787f3c10708e0b47ebf528d30 + languageName: node + linkType: hard + +"split2@npm:^4.0.0": + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: 05d54102546549fe4d2455900699056580cca006c0275c334611420f854da30ac999230857a85fdd9914dc2109ae50f80fda43d2a445f2aa86eccdc1dfce779d + languageName: node + linkType: hard + +"split@npm:1.0.0": + version: 1.0.0 + resolution: "split@npm:1.0.0" + dependencies: + through: 2 + checksum: 84837fa659662fab703efb41f5e3b3c4ae7de605555b6ce53c4fadb2a30b7cc7c8c005f905e6cb16e527ebb4117b6c2da1fe09c1caa150bdaf24df0dff8bf5d3 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"ssr-window@npm:^3.0.0, ssr-window@npm:^3.0.0-alpha.1": + version: 3.0.0 + resolution: "ssr-window@npm:3.0.0" + checksum: e619db7437874c89d2f4cea94ca8cbdfb4eed9f20d86fa193c29a17829c26d7ceefae344ac1699cc24ebb8d397fd0937a1043b5177a140c2504c9fda58bb5652 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"stop-iteration-iterator@npm:^1.0.0": + version: 1.0.0 + resolution: "stop-iteration-iterator@npm:1.0.0" + dependencies: + internal-slot: ^1.0.4 + checksum: d04173690b2efa40e24ab70e5e51a3ff31d56d699550cfad084104ab3381390daccb36652b25755e420245f3b0737de66c1879eaa2a8d4fc0a78f9bf892fcb42 + languageName: node + linkType: hard + +"stream-browserify@npm:^3.0.0": + version: 3.0.0 + resolution: "stream-browserify@npm:3.0.0" + dependencies: + inherits: ~2.0.4 + readable-stream: ^3.5.0 + checksum: 4c47ef64d6f03815a9ca3874e2319805e8e8a85f3550776c47ce523b6f4c6cd57f40e46ec6a9ab8ad260fde61863c2718f250d3bedb3fe9052444eb9abfd9921 + languageName: node + linkType: hard + +"stream-shift@npm:^1.0.0": + version: 1.0.1 + resolution: "stream-shift@npm:1.0.1" + checksum: 59b82b44b29ec3699b5519a49b3cedcc6db58c72fb40c04e005525dfdcab1c75c4e0c180b923c380f204bed78211b9bad8faecc7b93dece4d004c3f6ec75737b + languageName: node + linkType: hard + +"stream-to-it@npm:^0.2.2, stream-to-it@npm:^0.2.3": + version: 0.2.4 + resolution: "stream-to-it@npm:0.2.4" + dependencies: + get-iterator: ^1.0.2 + checksum: 0725dd8ddb889829cab70b81a883d5a09cd34272ccd44fad195de9fb900a8588fbf801490b6418ae5e234c128743ad829c50cfcd6686fab3b50bb6e76d59238c + languageName: node + linkType: hard + +"streaming-iterables@npm:^6.0.0, streaming-iterables@npm:^6.2.0": + version: 6.2.0 + resolution: "streaming-iterables@npm:6.2.0" + checksum: 1fb3c6833cbb028bf60f0de9b43e54d5940e4702868ad0016567cac7ecf9675572e05af86c723f5e172b57a2c913fea0289be6f44bea7747b71e4a398b7174da + languageName: node + linkType: hard + +"strict-uri-encode@npm:^2.0.0": + version: 2.0.0 + resolution: "strict-uri-encode@npm:2.0.0" + checksum: eaac4cf978b6fbd480f1092cab8b233c9b949bcabfc9b598dd79a758f7243c28765ef7639c876fa72940dac687181b35486ea01ff7df3e65ce3848c64822c581 + languageName: node + linkType: hard + +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: ^1.0.2 + strip-ansi: ^6.0.0 + checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + languageName: node + linkType: hard + +"string-replace-to-array@npm:^1.0.1": + version: 1.0.3 + resolution: "string-replace-to-array@npm:1.0.3" + dependencies: + invariant: ^2.2.1 + lodash.flatten: ^4.2.0 + lodash.isstring: ^4.0.1 + checksum: f0da1bf239934739471166cd34d5003b386f660db40cc1c6842eae4f250656b80ffc5983bdef344f934fc897d1df4ae6efff9ce43a663a6ab450d53b618a83c6 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.8": + version: 1.2.8 + resolution: "string.prototype.trim@npm:1.2.8" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 49eb1a862a53aba73c3fb6c2a53f5463173cb1f4512374b623bcd6b43ad49dd559a06fb5789bdec771a40fc4d2a564411c0a75d35fb27e76bbe738c211ecff07 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.7": + version: 1.0.7 + resolution: "string.prototype.trimend@npm:1.0.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 2375516272fd1ba75992f4c4aa88a7b5f3c7a9ca308d963bcd5645adf689eba6f8a04ebab80c33e30ec0aefc6554181a3a8416015c38da0aa118e60ec896310c + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.7": + version: 1.0.7 + resolution: "string.prototype.trimstart@npm:1.0.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 13d0c2cb0d5ff9e926fa0bec559158b062eed2b68cd5be777ffba782c96b2b492944e47057274e064549b94dd27cf81f48b27a31fee8af5b574cff253e7eb613 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"string_decoder@npm:~0.10.x": + version: 0.10.31 + resolution: "string_decoder@npm:0.10.31" + checksum: fe00f8e303647e5db919948ccb5ce0da7dea209ab54702894dd0c664edd98e5d4df4b80d6fabf7b9e92b237359d21136c95bf068b2f7760b772ca974ba970202 + languageName: node + linkType: hard + +"string_decoder@npm:~1.0.0": + version: 1.0.3 + resolution: "string_decoder@npm:1.0.3" + dependencies: + safe-buffer: ~5.1.0 + checksum: 57ef02a148fd1ff2f20fe1accd944505ed3703e78bb28d302d940b2ad3dfb469508f79dcd0275ba1960d9675aa206452f76b2416059a6d0b0200bd7e9f552cdb + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^3.0.0": + version: 3.0.1 + resolution: "strip-ansi@npm:3.0.1" + dependencies: + ansi-regex: ^2.0.0 + checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-ansi@npm:~0.1.0": + version: 0.1.1 + resolution: "strip-ansi@npm:0.1.1" + bin: + strip-ansi: cli.js + checksum: 31f1d4d3b86e6d968aa568bf47d712626dd748aff7d576a98ba2ed378dd60dfb1475898254b62479779231e50a38f0b7ea0b66d3b22d14cde38b769c1c747d33 + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + languageName: node + linkType: hard + +"strip-hex-prefix@npm:1.0.0": + version: 1.0.0 + resolution: "strip-hex-prefix@npm:1.0.0" + dependencies: + is-hex-prefixed: 1.0.0 + checksum: 4cafe7caee1d281d3694d14920fd5d3c11adf09371cef7e2ccedd5b83efd9e9bd2219b5d6ce6e809df6e0f437dc9d30db1192116580875698aad164a6d6b285b + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: ^1.0.0 + checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"style-to-js@npm:1.1.1": + version: 1.1.1 + resolution: "style-to-js@npm:1.1.1" + dependencies: + style-to-object: 0.3.0 + checksum: 91b9742af9fc389118e5c3f39a95cbebe1a456b65530aba7595e789783d015aab4bbbf4bc3e0998c41ce7c46661f1244aeffd9e7c407ad8ac928e2ba2be37aa0 + languageName: node + linkType: hard + +"style-to-object@npm:0.3.0": + version: 0.3.0 + resolution: "style-to-object@npm:0.3.0" + dependencies: + inline-style-parser: 0.1.1 + checksum: 4d7084015207f2a606dfc10c29cb5ba569f2fe8005551df7396110dd694d6ff650f2debafa95bd5d147dfb4ca50f57868e2a7f91bf5d11ef734fe7ccbd7abf59 + languageName: node + linkType: hard + +"styled-components@npm:^5.3.5": + version: 5.3.11 + resolution: "styled-components@npm:5.3.11" + dependencies: + "@babel/helper-module-imports": ^7.0.0 + "@babel/traverse": ^7.4.5 + "@emotion/is-prop-valid": ^1.1.0 + "@emotion/stylis": ^0.8.4 + "@emotion/unitless": ^0.7.4 + babel-plugin-styled-components: ">= 1.12.0" + css-to-react-native: ^3.0.0 + hoist-non-react-statics: ^3.0.0 + shallowequal: ^1.1.0 + supports-color: ^5.5.0 + peerDependencies: + react: ">= 16.8.0" + react-dom: ">= 16.8.0" + react-is: ">= 16.8.0" + checksum: 10edd4dae3b0231ec02d86bdd09c88e894eedfa7e9d4f8e562b09fb69c67a27d586cbcf35c785002d59b3bf11e6c0940b0efce40d13ae9ed148b26b1dc8f3284 + languageName: node + linkType: hard + +"styled-jsx@npm:5.0.7": + version: 5.0.7 + resolution: "styled-jsx@npm:5.0.7" + peerDependencies: + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0" + peerDependenciesMeta: + "@babel/core": + optional: true + babel-plugin-macros: + optional: true + checksum: 61959993915f4b1662a682dbbefb3512de9399cf6901969bcadd26ba5441d2b5ca5c1021b233bbd573da2541b41efb45d56c6f618dbc8d88a381ebc62461fefe + languageName: node + linkType: hard + +"stylis@npm:4.2.0": + version: 4.2.0 + resolution: "stylis@npm:4.2.0" + checksum: 0eb6cc1b866dc17a6037d0a82ac7fa877eba6a757443e79e7c4f35bacedbf6421fadcab4363b39667b43355cbaaa570a3cde850f776498e5450f32ed2f9b7584 + languageName: node + linkType: hard + +"superstruct@npm:^0.14.2": + version: 0.14.2 + resolution: "superstruct@npm:0.14.2" + checksum: c5c4840f432da82125b923ec45faca5113217e83ae416e314d80eae012b8bb603d2e745025d173450758d116348820bc7028157f8c9a72b6beae879f94b837c0 + languageName: node + linkType: hard + +"superstruct@npm:^1.0.3": + version: 1.0.3 + resolution: "superstruct@npm:1.0.3" + checksum: 761790bb111e6e21ddd608299c252f3be35df543263a7ebbc004e840d01fcf8046794c274bcb351bdf3eae4600f79d317d085cdbb19ca05803a4361840cc9bb1 + languageName: node + linkType: hard + +"supports-color@npm:^2.0.0": + version: 2.0.0 + resolution: "supports-color@npm:2.0.0" + checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"swiper@npm:6.8.4": + version: 6.8.4 + resolution: "swiper@npm:6.8.4" + dependencies: + dom7: ^3.0.0 + ssr-window: ^3.0.0 + checksum: 613239e71135b48378453a74abed9a33d56f147e704e3803f5ea960dbf9833a93e557ef0b75e7c2849328eb1b48fafab54f7ac5b88e8c3727283536c7740b13f + languageName: node + linkType: hard + +"tap-out@npm:^2.1.0": + version: 2.1.0 + resolution: "tap-out@npm:2.1.0" + dependencies: + re-emitter: 1.1.3 + readable-stream: 2.2.9 + split: 1.0.0 + trim: 0.0.1 + bin: + tap-out: bin/cmd.js + checksum: b837d8adf646bf06f73a9306a9796a3201c55598c2c70045a2908d044fc2cc9466d52d27a7705c92a2c6ea37d560a84d135f4112bd377346f34d381ed836088b + languageName: node + linkType: hard + +"tap-spec@npm:^5.0.0": + version: 5.0.0 + resolution: "tap-spec@npm:5.0.0" + dependencies: + chalk: ^1.0.0 + duplexer: ^0.1.1 + figures: ^1.4.0 + lodash: ^4.17.10 + pretty-ms: ^2.1.0 + repeat-string: ^1.5.2 + tap-out: ^2.1.0 + through2: ^2.0.0 + bin: + tap-spec: bin/cmd.js + tspec: bin/cmd.js + checksum: 4413acc3ed4b8662b64439ad5be65a4d42edb2f3c5dc273b8ee563f9e7bfdde347e53c92de628a04ab640dda3cd8aea8aeb3ee7aa86bde8118d0584ffd76b788 + languageName: node + linkType: hard + +"tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 + languageName: node + linkType: hard + +"tape@npm:^5.5.3": + version: 5.7.1 + resolution: "tape@npm:5.7.1" + dependencies: + "@ljharb/resumer": ^0.0.1 + "@ljharb/through": ^2.3.11 + array.prototype.every: ^1.1.5 + call-bind: ^1.0.2 + deep-equal: ^2.2.2 + defined: ^1.0.1 + dotignore: ^0.1.2 + for-each: ^0.3.3 + get-package-type: ^0.1.0 + glob: ^7.2.3 + has: ^1.0.3 + has-dynamic-import: ^2.0.1 + inherits: ^2.0.4 + is-regex: ^1.1.4 + minimist: ^1.2.8 + mock-property: ^1.0.0 + object-inspect: ^1.12.3 + object-is: ^1.1.5 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + resolve: ^2.0.0-next.5 + string.prototype.trim: ^1.2.8 + bin: + tape: bin/tape + checksum: abba6c5d83d6cba58ab5e0233dc8d68a9414a6d750401a8124da1622cb797cb96b5d68edc3d166984c6926affec33a4aa4782da7c64665f3d531e605769ad72f + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^7.1.4 + minimatch: ^3.0.4 + checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 + languageName: node + linkType: hard + +"text-encoding-utf-8@npm:^1.0.2": + version: 1.0.2 + resolution: "text-encoding-utf-8@npm:1.0.2" + checksum: ec4c15d50e738c5dba7327ad432ebf0725ec75d4d69c0bd55609254c5a3bc5341272d7003691084a0a73d60d981c8eb0e87603676fdb6f3fed60f4c9192309f9 + languageName: node + linkType: hard + +"thread-stream@npm:^0.15.1": + version: 0.15.2 + resolution: "thread-stream@npm:0.15.2" + dependencies: + real-require: ^0.1.0 + checksum: 0547795a8f357ba1ac0dba29c71f965182e29e21752951a04a7167515ee37524bfba6c410f31e65a01a8d3e5b93400b812889aa09523e38ce4d744c894ffa6c0 + languageName: node + linkType: hard + +"throttle-debounce@npm:^2.1.0": + version: 2.3.0 + resolution: "throttle-debounce@npm:2.3.0" + checksum: 6d90aa2ddb294f8dad13d854a1cfcd88fdb757469669a096a7da10f515ee466857ac1e750649cb9da931165c6f36feb448318e7cb92570f0a3679d20e860a925 + languageName: node + linkType: hard + +"throttled-queue@npm:^2.1.2, throttled-queue@npm:^2.1.4": + version: 2.1.4 + resolution: "throttled-queue@npm:2.1.4" + checksum: 99571cb816e1c2d3df678d6fdb0a73eca9ba1f8aa9026daf89855d4c9444491d70e3aecaaad6c77b1202ab773f78e03b9a91b1e89c4983f17835b783137266c7 + languageName: node + linkType: hard + +"through2@npm:^2.0.0": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: ~2.3.6 + xtend: ~4.0.1 + checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 + languageName: node + linkType: hard + +"through2@npm:~0.4.1": + version: 0.4.2 + resolution: "through2@npm:0.4.2" + dependencies: + readable-stream: ~1.0.17 + xtend: ~2.1.1 + checksum: 50e41d272db4a74b10a62b7e92eeeb8d30e426a7a8a772cd85fac0f8e21d92c6e5cb5012d7db5f7a20f6e147e1f14f87062058c77b05bc9d463ae4d8b3eb1e42 + languageName: node + linkType: hard + +"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.8": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"timeout-abort-controller@npm:^1.1.1": + version: 1.1.1 + resolution: "timeout-abort-controller@npm:1.1.1" + dependencies: + abort-controller: ^3.0.0 + retimer: ^2.0.0 + checksum: 070c220be4cac532f8cfbffccba3497baf3abe97d4bfc62344dba832b55a2eef1f0e60f33d862a1662e14852c9ef8ae952d1d93f5626d39b6592f29d7d00bd45 + languageName: node + linkType: hard + +"timestamp-nano@npm:^1.0.0": + version: 1.0.1 + resolution: "timestamp-nano@npm:1.0.1" + checksum: cba7d5a6d805692f9a8df1a98056e5e742236bd2baccb469f8be1c64d53223326c74da29a7111718520c8b7a424394665882078cd9452725fffbf1f109fc3d6f + languageName: node + linkType: hard + +"tiny-warning@npm:^1.0.3": + version: 1.0.3 + resolution: "tiny-warning@npm:1.0.3" + checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71 + languageName: node + linkType: hard + +"title-case@npm:^3.0.3": + version: 3.0.3 + resolution: "title-case@npm:3.0.3" + dependencies: + tslib: ^2.0.3 + checksum: e8b7ea006b53cf3208d278455d9f1e22c409459d7f9878da324fa3b18cc0aef8560924c19c744e870394a5d9cddfdbe029ebae9875909ee7f4fc562e7cbfc53e + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"toggle-selection@npm:^1.0.6": + version: 1.0.6 + resolution: "toggle-selection@npm:1.0.6" + checksum: a90dc80ed1e7b18db8f4e16e86a5574f87632dc729cfc07d9ea3ced50021ad42bb4e08f22c0913e0b98e3837b0b717e0a51613c65f30418e21eb99da6556a74c + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"trim-newlines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-newlines@npm:3.0.1" + checksum: b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206 + languageName: node + linkType: hard + +"trim@npm:0.0.1": + version: 0.0.1 + resolution: "trim@npm:0.0.1" + checksum: 2b4646dff99a222e8e1526edd4e3a43bbd925af0b8e837c340455d250157e7deefaa4da49bb891ab841e5c27b1afc5e9e32d4b57afb875d2dfcabf4e319b8f7f + languageName: node + linkType: hard + +"truncate-eth-address@npm:^1.0.2": + version: 1.0.2 + resolution: "truncate-eth-address@npm:1.0.2" + checksum: c56406753f5071e008ef67269e86f6b5c598e9a673930715b6175ad5a2708a4b39a32571ccc49b1dbd143e774a19a0a38b0bf2a5ae6e857560eae8c84140e95b + languageName: node + linkType: hard + +"ts-toolbelt@npm:^9.6.0": + version: 9.6.0 + resolution: "ts-toolbelt@npm:9.6.0" + checksum: 9f35fd95d895a5d32ea9fd2e532a695b0bae6cbff6832b77292efa188a0ed1ed6e54f63f74a8920390f3d909a7a3adb20a144686372a8e78b420246a9bd3d58a + languageName: node + linkType: hard + +"tslib@npm:1.14.1, tslib@npm:^1.9.0": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad + languageName: node + linkType: hard + +"tss-react@npm:^4.0.0": + version: 4.9.2 + resolution: "tss-react@npm:4.9.2" + dependencies: + "@emotion/cache": "*" + "@emotion/serialize": "*" + "@emotion/utils": "*" + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/server": ^11.4.0 + "@mui/material": ^5.0.0 + react: ^16.8.0 || ^17.0.2 || ^18.0.0 + peerDependenciesMeta: + "@emotion/server": + optional: true + "@mui/material": + optional: true + checksum: e998ba9e458601dc540e91c4cae424f2533b6edc013831a6ade8b35281cf7798e1ad1d9358a094fd57904f858f01fb80313437acc5377c914701c6ce75f3abac + languageName: node + linkType: hard + +"tus-js-client@npm:^3.1.0": + version: 3.1.1 + resolution: "tus-js-client@npm:3.1.1" + dependencies: + buffer-from: ^1.1.2 + combine-errors: ^3.0.3 + is-stream: ^2.0.0 + js-base64: ^3.7.2 + lodash.throttle: ^4.1.1 + proper-lockfile: ^4.1.2 + url-parse: ^1.5.7 + checksum: 7cb227b8d94e1f48a172f52c0cf8f0d58a7866211157788c6a8c9d7512550d21ef5ed13d074b8ffadbecc7e730273eca9f346d0ea4c89d9da60f351162a68d02 + languageName: node + linkType: hard + +"tweetnacl-util@npm:^0.15.1": + version: 0.15.1 + resolution: "tweetnacl-util@npm:0.15.1" + checksum: ae6aa8a52cdd21a95103a4cc10657d6a2040b36c7a6da7b9d3ab811c6750a2d5db77e8c36969e75fdee11f511aa2b91c552496c6e8e989b6e490e54aca2864fc + languageName: node + linkType: hard + +"tweetnacl@npm:^1.0.3": + version: 1.0.3 + resolution: "tweetnacl@npm:1.0.3" + checksum: e4a57cac188f0c53f24c7a33279e223618a2bfb5fea426231991652a13247bea06b081fd745d71291fcae0f4428d29beba1b984b1f1ce6f66b06a6d1ab90645c + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.18.0": + version: 0.18.1 + resolution: "type-fest@npm:0.18.1" + checksum: e96dcee18abe50ec82dab6cbc4751b3a82046da54c52e3b2d035b3c519732c0b3dd7a2fa9df24efd1a38d953d8d4813c50985f215f1957ee5e4f26b0fe0da395 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f + languageName: node + linkType: hard + +"type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-buffer@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + is-typed-array: ^1.1.10 + checksum: 3e0281c79b2a40cd97fe715db803884301993f4e8c18e8d79d75fd18f796e8cd203310fec8c7fdb5e6c09bedf0af4f6ab8b75eb3d3a85da69328f28a80456bd3 + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + has-proto: ^1.0.1 + is-typed-array: ^1.1.10 + checksum: b03db16458322b263d87a702ff25388293f1356326c8a678d7515767ef563ef80e1e67ce648b821ec13178dd628eb2afdc19f97001ceae7a31acf674c849af94 + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-byte-offset@npm:1.0.0" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + has-proto: ^1.0.1 + is-typed-array: ^1.1.10 + checksum: 04f6f02d0e9a948a95fbfe0d5a70b002191fae0b8fe0fe3130a9b2336f043daf7a3dda56a31333c35a067a97e13f539949ab261ca0f3692c41603a46a94e960b + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-length@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + is-typed-array: ^1.1.9 + checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 + languageName: node + linkType: hard + +"typedarray-to-buffer@npm:3.1.5": + version: 3.1.5 + resolution: "typedarray-to-buffer@npm:3.1.5" + dependencies: + is-typedarray: ^1.0.0 + checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 + languageName: node + linkType: hard + +"types-ramda@npm:^0.29.5": + version: 0.29.5 + resolution: "types-ramda@npm:0.29.5" + dependencies: + ts-toolbelt: ^9.6.0 + checksum: 0013eec508b74ed98a3de25f9617c2f246ed387dbda084ae37d9f10c5ccac0bb0243a966e861262c918feef8322347616852abf30440a252335e50d9592590e9 + languageName: node + linkType: hard + +"typescript@npm:5.0.4": + version: 5.0.4 + resolution: "typescript@npm:5.0.4" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 + languageName: node + linkType: hard + +"typescript@patch:typescript@5.0.4#~builtin": + version: 5.0.4 + resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=b5f058" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: d26b6ba97b6d163c55dbdffd9bbb4c211667ebebc743accfeb2c8c0154aace7afd097b51165a72a5bad2cf65a4612259344ff60f8e642362aa1695c760d303ac + languageName: node + linkType: hard + +"uint8arrays@npm:^3.0.0, uint8arrays@npm:^3.1.0": + version: 3.1.1 + resolution: "uint8arrays@npm:3.1.1" + dependencies: + multiformats: ^9.4.2 + checksum: b93b6c3f0a526b116799f3a3409bd4b5d5553eb3e73e485998ece7974742254fbc0d2f7988dd21ac86c4b974552f45d9ae9cf9cba9647e529f8eb1fdd2ed84d0 + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 + which-boxed-primitive: ^1.0.2 + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + languageName: node + linkType: hard + +"underscore@npm:~1.6.0": + version: 1.6.0 + resolution: "underscore@npm:1.6.0" + checksum: bfb837d95164077bd2751247dd9797546287c060d86c3a730f590948dbc132b426238e37df7bea28f39d3e3abf571de5b974809ee3c32d309280fed851588ef9 + languageName: node + linkType: hard + +"undici-types@npm:~5.25.1": + version: 5.25.3 + resolution: "undici-types@npm:5.25.3" + checksum: ec9d2cc36520cbd9fbe3b3b6c682a87fe5be214699e1f57d1e3d9a2cb5be422e62735f06e0067dc325fd3dd7404c697e4d479f9147dc8a804e049e29f357f2ff + languageName: node + linkType: hard + +"undici@npm:^5.8.1": + version: 5.26.3 + resolution: "undici@npm:5.26.3" + dependencies: + "@fastify/busboy": ^2.0.0 + checksum: aaa9aadb712cf80e1a9cea2377e4842670105e00abbc184a21770ea5a8b77e4e2eadc200eac62442e74a1cd3b16a840c6f73b112b9e886bd3c1a125eb22e4f21 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-names-generator@npm:^4.7.1": + version: 4.7.1 + resolution: "unique-names-generator@npm:4.7.1" + checksum: 81b58efee72458fd0c84f54a89d731b2570305d331ce62c4156273e54ece77b6488fc6c607169f4b8f6644fa48b42aef8689dbe7e310ae2c4bafbd5c0a625354 + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"unload@npm:2.2.0": + version: 2.2.0 + resolution: "unload@npm:2.2.0" + dependencies: + "@babel/runtime": ^7.6.2 + detect-node: ^2.0.4 + checksum: 88ba950c5ff83ab4f9bbd8f63bbf19ba09687ed3c434efd43b7338cc595bc574df8f9b155ee6eee7a435de3d3a4a226726988428977a68ba4907045f1fac5d41 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322 + languageName: node + linkType: hard + +"url-parse@npm:^1.5.7": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + +"use-callback-ref@npm:^1.3.0": + version: 1.3.0 + resolution: "use-callback-ref@npm:1.3.0" + dependencies: + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7913df383a5a6fcb399212eedefaac2e0c6f843555202d4e3010bac3848afe38ecaa3d0d6500ad1d936fbeffd637e6c517e68edb024af5e6beca7f27f3ce7b21 + languageName: node + linkType: hard + +"use-sidecar@npm:^1.1.2": + version: 1.1.2 + resolution: "use-sidecar@npm:1.1.2" + dependencies: + detect-node-es: ^1.1.0 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 925d1922f9853e516eaad526b6fed1be38008073067274f0ecc3f56b17bb8ab63480140dd7c271f94150027c996cea4efe83d3e3525e8f3eda22055f6a39220b + languageName: node + linkType: hard + +"use-sync-external-store@npm:1.2.0, use-sync-external-store@npm:^1.2.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a + languageName: node + linkType: hard + +"utf-8-validate@npm:^5.0.2": + version: 5.0.10 + resolution: "utf-8-validate@npm:5.0.10" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 5579350a023c66a2326752b6c8804cc7b39dcd251bb088241da38db994b8d78352e388dcc24ad398ab98385ba3c5ffcadb6b5b14b2637e43f767869055e46ba6 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"util@npm:^0.12.3, util@npm:^0.12.4": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: ^2.0.3 + is-arguments: ^1.0.4 + is-generator-function: ^1.0.7 + is-typed-array: ^1.1.3 + which-typed-array: ^1.1.2 + checksum: 705e51f0de5b446f4edec10739752ac25856541e0254ea1e7e45e5b9f9b0cb105bc4bd415736a6210edc68245a7f903bf085ffb08dd7deb8a0e847f60538a38a + languageName: node + linkType: hard + +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"uuid@npm:^9.0.0": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 39931f6da74e307f51c0fb463dc2462807531dc80760a9bff1e35af4316131b4fc3203d16da60ae33f07fdca5b56f3f1dd662da0c99fea9aaeab2004780cc5f4 + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.1.3 + resolution: "v8-to-istanbul@npm:9.1.3" + dependencies: + "@jridgewell/trace-mapping": ^0.3.12 + "@types/istanbul-lib-coverage": ^2.0.1 + convert-source-map: ^2.0.0 + checksum: 5d592ab3d186b386065dace8e01c543a922a904b3cfac39667de172455a6b3d0e8e1401574fecb8a12092ad0809b5a8fd15f1cc14d0666139a1bb77cd6ac2cf8 + languageName: node + linkType: hard + +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + +"valtio@npm:1.11.2": + version: 1.11.2 + resolution: "valtio@npm:1.11.2" + dependencies: + proxy-compare: 2.5.1 + use-sync-external-store: 1.2.0 + peerDependencies: + "@types/react": ">=16.8" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + checksum: cce2d9212aac9fc4bdeba2d381188cc831cfe8d2d03039024cfcd58ba1801f2a5b14d01c2bb21a2c9f12046d2ede64f1dd887175185f39bee553677a35592c30 + languageName: node + linkType: hard + +"varint@npm:^6.0.0": + version: 6.0.0 + resolution: "varint@npm:6.0.0" + checksum: 7684113c9d497c01e40396e50169c502eb2176203219b96e1c5ac965a3e15b4892bd22b7e48d87148e10fffe638130516b6dbeedd0efde2b2d0395aa1772eea7 + languageName: node + linkType: hard + +"video-stream-merger@npm:^4.0.1": + version: 4.0.1 + resolution: "video-stream-merger@npm:4.0.1" + checksum: 0f7513995dd8c42e1d97cfe8afe9876371e8bd6a456fa12b7186b41fdca7b5fac74e2260df3bf6f910fb093c8180f7a677326b9408df38cc52b233796d8ecf53 + languageName: node + linkType: hard + +"viem@npm:^1.0.0": + version: 1.16.6 + resolution: "viem@npm:1.16.6" + dependencies: + "@adraffy/ens-normalize": 1.9.4 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@scure/bip32": 1.3.2 + "@scure/bip39": 1.2.1 + abitype: 0.9.8 + isows: 1.0.3 + ws: 8.13.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 2f116cad184cfc7a9584073451549edfb23c3847b1784f092b80a279b848fe011a054bc4141c923b5bcce1d8493db98284db65416ce72e8ba522225d02786a9a + languageName: node + linkType: hard + +"viem@npm:^1.3.0": + version: 1.16.5 + resolution: "viem@npm:1.16.5" + dependencies: + "@adraffy/ens-normalize": 1.9.4 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@scure/bip32": 1.3.2 + "@scure/bip39": 1.2.1 + abitype: 0.9.8 + isows: 1.0.3 + ws: 8.13.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: cc07bbc8ebf616c2cc6e14f08eea59d1b34df294d1dcba72090bf10e224e87c17014db593bcff223fe6c7c30999448d786d67d9e18691906f51900db940af821 + languageName: node + linkType: hard + +"w3name@npm:^1.0.6": + version: 1.0.8 + resolution: "w3name@npm:1.0.8" + dependencies: + "@web-std/fetch": ^4.1.0 + cborg: ^1.9.4 + ipns: ^0.16.0 + libp2p-crypto: ^0.21.2 + throttled-queue: ^2.1.4 + uint8arrays: ^3.0.0 + checksum: 02dc258667a31955d323589d9ff147b1688c9f09cb0197e86adeae7dbe31ff3664e004810eeb7551df7abbbb7cd6e75db88ec1ced84cdfadd1a63d494749da5e + languageName: node + linkType: hard + +"wagmi@npm:^1.4.4": + version: 1.4.4 + resolution: "wagmi@npm:1.4.4" + dependencies: + "@tanstack/query-sync-storage-persister": ^4.27.1 + "@tanstack/react-query": ^4.28.0 + "@tanstack/react-query-persist-client": ^4.28.0 + "@wagmi/core": 1.4.4 + abitype: 0.8.7 + use-sync-external-store: ^1.2.0 + peerDependencies: + react: ">=17.0.0" + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: 4cf7ce978400d21e27d25871a4c8bc6b05fabd61d6d3d6e705c120a1c1dd4ba260d6ddfb2bb28b5e18591ba825c89839d0f3c874c55dfa255a9cde96d0785202 + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"web-encoding@npm:1.1.5": + version: 1.1.5 + resolution: "web-encoding@npm:1.1.5" + dependencies: + "@zxing/text-encoding": 0.9.0 + util: ^0.12.3 + dependenciesMeta: + "@zxing/text-encoding": + optional: true + checksum: 2234a2b122f41006ce07859b3c0bf2e18f46144fda2907d5db0b571b76aa5c26977c646100ad9c00d2f8a4f6f2b848bc02147845d8c447ab365ec4eff376338d + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.1.1": + version: 3.2.1 + resolution: "web-streams-polyfill@npm:3.2.1" + checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 + languageName: node + linkType: hard + +"web3.storage@npm:^4.5.5": + version: 4.5.5 + resolution: "web3.storage@npm:4.5.5" + dependencies: + "@ipld/car": ^3.1.4 + "@web-std/blob": ^3.0.4 + "@web-std/fetch": ^4.1.2 + "@web-std/file": ^3.0.2 + "@web3-storage/parse-link-header": ^3.1.0 + browser-readablestream-to-it: ^1.0.3 + carbites: ^1.0.6 + cborg: ^1.8.0 + files-from-path: ^0.2.4 + ipfs-car: ^0.7.0 + libp2p-crypto: ^0.21.0 + p-retry: ^4.5.0 + streaming-iterables: ^6.2.0 + throttled-queue: ^2.1.2 + uint8arrays: ^3.0.0 + w3name: ^1.0.6 + checksum: 2478c0fa61a8613d5face3ae7ecb12ed6f46b7e2e767ab4eb92b1dfe06a7c195fb6aa627d63b0c12346a92808434134925023efc95f6692d8b98584fa54aaef6 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: ^1.0.1 + is-boolean-object: ^1.1.0 + is-number-object: ^1.0.4 + is-string: ^1.0.5 + is-symbol: ^1.0.3 + checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e + languageName: node + linkType: hard + +"which-collection@npm:^1.0.1": + version: 1.0.1 + resolution: "which-collection@npm:1.0.1" + dependencies: + is-map: ^2.0.1 + is-set: ^2.0.1 + is-weakmap: ^2.0.1 + is-weakset: ^2.0.1 + checksum: c815bbd163107ef9cb84f135e6f34453eaf4cca994e7ba85ddb0d27cea724c623fae2a473ceccfd5549c53cc65a5d82692de418166df3f858e1e5dc60818581c + languageName: node + linkType: hard + +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": + version: 1.1.11 + resolution: "which-typed-array@npm:1.1.11" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + checksum: 711ffc8ef891ca6597b19539075ec3e08bb9b4c2ca1f78887e3c07a977ab91ac1421940505a197758fb5939aa9524976d0a5bbcac34d07ed6faa75cedbb17206 + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + +"ws@npm:7.4.6": + version: 7.4.6 + resolution: "ws@npm:7.4.6" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 3a990b32ed08c72070d5e8913e14dfcd831919205be52a3ff0b4cdd998c8d554f167c9df3841605cde8b11d607768cacab3e823c58c96a5c08c987e093eb767a + languageName: node + linkType: hard + +"ws@npm:8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + +"ws@npm:^7.4.5, ws@npm:^7.5.1": + version: 7.5.9 + resolution: "ws@npm:7.5.9" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 + languageName: node + linkType: hard + +"ws@npm:^8.5.0": + version: 8.14.2 + resolution: "ws@npm:8.14.2" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 3ca0dad26e8cc6515ff392b622a1467430814c463b3368b0258e33696b1d4bed7510bc7030f7b72838b9fdeb8dbd8839cbf808367d6aae2e1d668ce741d4308b + languageName: node + linkType: hard + +"ws@npm:~8.11.0": + version: 8.11.0 + resolution: "ws@npm:8.11.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 + languageName: node + linkType: hard + +"xmlhttprequest-ssl@npm:~2.0.0": + version: 2.0.0 + resolution: "xmlhttprequest-ssl@npm:2.0.0" + checksum: 1e98df67f004fec15754392a131343ea92e6ab5ac4d77e842378c5c4e4fd5b6a9134b169d96842cc19422d77b1606b8df84a5685562b3b698cb68441636f827e + languageName: node + linkType: hard + +"xtend@npm:^4.0.1, xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"xtend@npm:~2.1.1": + version: 2.1.2 + resolution: "xtend@npm:2.1.2" + dependencies: + object-keys: ~0.4.0 + checksum: a8b79f31502c163205984eaa2b196051cd2fab0882b49758e30f2f9018255bc6c462e32a090bf3385d1bda04755ad8cc0052a09e049b0038f49eb9b950d9c447 + languageName: node + linkType: hard + +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f + languageName: node + linkType: hard + +"yargs-parser@npm:^18.1.2": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: ^5.0.0 + decamelize: ^1.2.0 + checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.3": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs@npm:^15.3.1": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" + dependencies: + cliui: ^6.0.0 + decamelize: ^1.2.0 + find-up: ^4.1.0 + get-caller-file: ^2.0.1 + require-directory: ^2.1.1 + require-main-filename: ^2.0.0 + set-blocking: ^2.0.0 + string-width: ^4.2.0 + which-module: ^2.0.0 + y18n: ^4.0.0 + yargs-parser: ^18.1.2 + checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 + languageName: node + linkType: hard + +"yargs@npm:^17.3.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + 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 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard + +"zustand@npm:4.4.0": + version: 4.4.0 + resolution: "zustand@npm:4.4.0" + dependencies: + use-sync-external-store: 1.2.0 + peerDependencies: + "@types/react": ">=16.8" + immer: ">=9.0" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + checksum: 37e69eec1b56677a93712e5aa6d0048b55997379919dc0f78f61181f8a58994a6cae064f816f8101f5b1039008d3c1c9d136432a62e0edeb796807cc84cf45ef + languageName: node + linkType: hard + +"zustand@npm:^4.3.1, zustand@npm:^4.3.9": + version: 4.4.3 + resolution: "zustand@npm:4.4.3" + dependencies: + use-sync-external-store: 1.2.0 + peerDependencies: + "@types/react": ">=16.8" + immer: ">=9.0" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + checksum: 3ed16457a3a4b9fe6523f52d397af37db8fab5687dd21a23ede25f657346b25df374490baea27f10d416faae5e96acf7b4065c86044746d775881d266d1500f0 + languageName: node + linkType: hard diff --git a/setenv.sh b/setenv.sh new file mode 100755 index 00000000..4534b9f4 --- /dev/null +++ b/setenv.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +setenv() { + if [ "$1" = "development" ] || [ "$1" = "test" ] || [ "$1" = "e2e" ]; then + APP_ENV="$1" + DEPLOYMENT="staging" + API_BASE_URL="http://localhost:8080" + CLIENT_URL="http://localhost:3000" + fi + + if [ "$1" = "staging" ]; then + APP_ENV="$1" + DEPLOYMENT="staging" + API_BASE_URL="https://api.ud-staging.com" + CLIENT_URL="https://www.ud-staging.com" + fi + + if [ "$1" = "production" ]; then + APP_ENV="production" + DEPLOYMENT="production" + API_BASE_URL="https://unstoppabledomains.com" + CLIENT_URL="https://unstoppabledomains.com" + fi + + GIT_SHA="$(git rev-parse HEAD)" + TZ="UTC" + + export TZ="${TZ}" + if [ "$1" = "test" ]; then + TS_CONFIG_PATHS="true" + export TS_CONFIG_PATHS="${TS_CONFIG_PATHS}" + fi + + export NODE_OPTIONS="--max_old_space_size=6144" + export API_BASE_URL="${API_BASE_URL}" + export APP_ENV="${APP_ENV}" + export CLIENT_URL="${CLIENT_URL}" + export COMMIT_SHA="${GIT_SHA}" + export DEPLOYMENT="${DEPLOYMENT}" + "${@:2}" 2>&1 +} + +setenv "$@" diff --git a/test/.env.test b/test/.env.test new file mode 100644 index 00000000..79ec725a --- /dev/null +++ b/test/.env.test @@ -0,0 +1 @@ +NEXT_PUBLIC_CLIENT_URL=http://localhost:3000 diff --git a/test/resolver.js b/test/resolver.js new file mode 100644 index 00000000..88e11719 --- /dev/null +++ b/test/resolver.js @@ -0,0 +1,27 @@ +/* eslint-disable no-param-reassign */ +/* eslint-disable no-undef */ +module.exports = (path, options) => { + return options.defaultResolver(path, { + ...options, // Use packageFilter to process parsed `package.json` before the resolution (see https://www.npmjs.com/package/resolve#resolveid-opts-cb) + packageFilter: pkg => { + // This is a workaround for https://github.com/uuidjs/uuid/pull/616 + // + // jest-environment-jsdom 28+ tries to use browser exports instead of default exports, + // but uuid only offers an ESM browser export and not a CommonJS one. Jest does not yet + // support ESM modules natively, so this causes a Jest error related to trying to parse + // "export" syntax. + // + // This workaround prevents Jest from considering uuid's module-based exports at all; + // it falls back to uuid's CommonJS+node "main" property. + if (pkg.name === 'uuid') { + delete pkg.exports; + delete pkg.module; + } + if (pkg.name === 'nanoid') { + delete pkg.exports; + delete pkg.module; + } + return pkg; + }, + }); +}; diff --git a/test/setupTests.ts b/test/setupTests.ts new file mode 100644 index 00000000..f3a9fcec --- /dev/null +++ b/test/setupTests.ts @@ -0,0 +1,5 @@ +import dotenv from 'dotenv'; + +dotenv.config({ + path: __dirname + '/.env.test', +}); diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..7797a874 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,30 @@ +{ + "compilerOptions": { + "allowJs": false, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noImplicitAny": true, + "importHelpers": true, + "strictNullChecks": true, + "esModuleInterop": true, + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": false, + "jsx": "react", + "incremental": true, + "downlevelIteration": true, + "allowSyntheticDefaultImports": true, + "allowUnreachableCode": true, + "noFallthroughCasesInSwitch": false, + "suppressImplicitAnyIndexErrors": true, + "ignoreDeprecations": "5.0", + "module": "CommonJS", + "target": "ESNext" + }, + "include": ["**/*.d.ts", "**/*.ts", "**/*.tsx"], + "exclude": ["node_modules", "**/node_modules", "test", "**/test"] +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..c90c0ebc --- /dev/null +++ b/yarn.lock @@ -0,0 +1,17319 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + +"@adraffy/ens-normalize@npm:1.9.4": + version: 1.9.4 + resolution: "@adraffy/ens-normalize@npm:1.9.4" + checksum: 7d7fff58ebe2c4961f7e5e61dad123aa6a63fec0df5c84af1fa41079dc05d398599690be4427b3a94d2baa94084544bcfdf2d51cbed7504b9b0583b0960ad550 + languageName: node + linkType: hard + +"@ambire/signature-validator@npm:^1.3.1": + version: 1.3.1 + resolution: "@ambire/signature-validator@npm:1.3.1" + dependencies: + ethers: ^5.6.5 + tap-spec: ^5.0.0 + tape: ^5.5.3 + checksum: 44c4796f4cbb4624cfd64033523d3491afa899067026e9615322dc6efaca71b16358cbc1661f2fce62d9dedcf424c92d44fe3b2ab8c6f171a59c0c21dc17b2e2 + languageName: node + linkType: hard + +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.1 + resolution: "@ampproject/remapping@npm:2.2.1" + dependencies: + "@jridgewell/gen-mapping": ^0.3.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 03c04fd526acc64a1f4df22651186f3e5ef0a9d6d6530ce4482ec9841269cf7a11dbb8af79237c282d721c5312024ff17529cd72cc4768c11e999b58e2302079 + languageName: node + linkType: hard + +"@assemblyscript/loader@npm:^0.9.4": + version: 0.9.4 + resolution: "@assemblyscript/loader@npm:0.9.4" + checksum: 2af3d1eec181c1817e3fb95b8d900cf1e7f19933a02315569d3d4f2f3d6514673acb784b2a1a8a148436fb8a983b580bfb993c1d520c55a8fd84678b200b2ec6 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.22.13": + version: 7.22.13 + resolution: "@babel/code-frame@npm:7.22.13" + dependencies: + "@babel/highlight": ^7.22.13 + chalk: ^2.4.2 + checksum: 22e342c8077c8b77eeb11f554ecca2ba14153f707b85294fcf6070b6f6150aae88a7b7436dd88d8c9289970585f3fe5b9b941c5aa3aa26a6d5a8ef3f292da058 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/compat-data@npm:7.22.20" + checksum: efedd1d18878c10fde95e4d82b1236a9aba41395ef798cbb651f58dbf5632dbff475736c507b8d13d4c8f44809d41c0eb2ef0d694283af9ba5dd8339b6dab451 + languageName: node + linkType: hard + +"@babel/core@npm:7.13.10": + version: 7.13.10 + resolution: "@babel/core@npm:7.13.10" + dependencies: + "@babel/code-frame": ^7.12.13 + "@babel/generator": ^7.13.9 + "@babel/helper-compilation-targets": ^7.13.10 + "@babel/helper-module-transforms": ^7.13.0 + "@babel/helpers": ^7.13.10 + "@babel/parser": ^7.13.10 + "@babel/template": ^7.12.13 + "@babel/traverse": ^7.13.0 + "@babel/types": ^7.13.0 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.1.2 + lodash: ^4.17.19 + semver: ^6.3.0 + source-map: ^0.5.0 + checksum: 9b3362fd02e6a4f3ad642893312ec3d22713c4eeb2571c994d49c31f38d24893a6a18f4b49abb8d56b510e116278608eaddde2ca72ccb39ab29350efa5af39de + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3": + version: 7.23.0 + resolution: "@babel/core@npm:7.23.0" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-compilation-targets": ^7.22.15 + "@babel/helper-module-transforms": ^7.23.0 + "@babel/helpers": ^7.23.0 + "@babel/parser": ^7.23.0 + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: cebd9b48dbc970a7548522f207f245c69567e5ea17ebb1a4e4de563823cf20a01177fe8d2fe19b6e1461361f92fa169fd0b29f8ee9d44eeec84842be1feee5f2 + languageName: node + linkType: hard + +"@babel/generator@npm:7.13.9": + version: 7.13.9 + resolution: "@babel/generator@npm:7.13.9" + dependencies: + "@babel/types": ^7.13.0 + jsesc: ^2.5.1 + source-map: ^0.5.0 + checksum: 1b0e9fa1b5ea6656f0abeeedc99ff7bffa455d7bf118f4d17a75d80c439206b4ba3e1071c104b486b7447689512969286cbde505e6169ab38cf437e13ca54225 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.13.0, @babel/generator@npm:^7.13.9, @babel/generator@npm:^7.23.0, @babel/generator@npm:^7.7.2": + version: 7.23.0 + resolution: "@babel/generator@npm:7.23.0" + dependencies: + "@babel/types": ^7.23.0 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: 8efe24adad34300f1f8ea2add420b28171a646edc70f2a1b3e1683842f23b8b7ffa7e35ef0119294e1901f45bfea5b3dc70abe1f10a1917ccdfb41bed69be5f1 + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-annotate-as-pure@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 53da330f1835c46f26b7bf4da31f7a496dee9fd8696cca12366b94ba19d97421ce519a74a837f687749318f94d1a37f8d1abcbf35e8ed22c32d16373b2f6198d + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.13.10, @babel/helper-compilation-targets@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-compilation-targets@npm:7.22.15" + dependencies: + "@babel/compat-data": ^7.22.9 + "@babel/helper-validator-option": ^7.22.15 + browserslist: ^4.21.9 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: ce85196769e091ae54dd39e4a80c2a9df1793da8588e335c383d536d54f06baf648d0a08fc873044f226398c4ded15c4ae9120ee18e7dfd7c639a68e3cdc9980 + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.12.13, @babel/helper-function-name@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-function-name@npm:7.23.0" + dependencies: + "@babel/template": ^7.22.15 + "@babel/types": ^7.23.0 + checksum: e44542257b2d4634a1f979244eb2a4ad8e6d75eb6761b4cfceb56b562f7db150d134bc538c8e6adca3783e3bc31be949071527aa8e3aab7867d1ad2d84a26e10 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-hoist-variables@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: 394ca191b4ac908a76e7c50ab52102669efe3a1c277033e49467913c7ed6f7c64d7eacbeabf3bed39ea1f41731e22993f763b1edce0f74ff8563fd1f380d92cc + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.22.15, @babel/helper-module-imports@npm:^7.22.5": + version: 7.22.15 + resolution: "@babel/helper-module-imports@npm:7.22.15" + dependencies: + "@babel/types": ^7.22.15 + checksum: ecd7e457df0a46f889228f943ef9b4a47d485d82e030676767e6a2fdcbdaa63594d8124d4b55fd160b41c201025aec01fc27580352b1c87a37c9c6f33d116702 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.13.0, @babel/helper-module-transforms@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/helper-module-transforms@npm:7.23.0" + dependencies: + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-module-imports": ^7.22.15 + "@babel/helper-simple-access": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/helper-validator-identifier": ^7.22.20 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 6e2afffb058cf3f8ce92f5116f710dda4341c81cfcd872f9a0197ea594f7ce0ab3cb940b0590af2fe99e60d2e5448bfba6bca8156ed70a2ed4be2adc8586c891 + languageName: node + linkType: hard + +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0": + version: 7.22.5 + resolution: "@babel/helper-plugin-utils@npm:7.22.5" + checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-simple-access@npm:7.22.5" + dependencies: + "@babel/types": ^7.22.5 + checksum: fe9686714caf7d70aedb46c3cce090f8b915b206e09225f1e4dbc416786c2fdbbee40b38b23c268b7ccef749dd2db35f255338fb4f2444429874d900dede5ad2 + languageName: node + linkType: hard + +"@babel/helper-split-export-declaration@npm:^7.12.13, @babel/helper-split-export-declaration@npm:^7.22.6": + version: 7.22.6 + resolution: "@babel/helper-split-export-declaration@npm:7.22.6" + dependencies: + "@babel/types": ^7.22.5 + checksum: e141cace583b19d9195f9c2b8e17a3ae913b7ee9b8120246d0f9ca349ca6f03cb2c001fd5ec57488c544347c0bb584afec66c936511e447fd20a360e591ac921 + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/helper-string-parser@npm:7.22.5" + checksum: 836851ca5ec813077bbb303acc992d75a360267aa3b5de7134d220411c852a6f17de7c0d0b8c8dcc0f567f67874c00f4528672b2a4f1bc978a3ada64c8c78467 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.12.11, @babel/helper-validator-identifier@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.22.15": + version: 7.22.15 + resolution: "@babel/helper-validator-option@npm:7.22.15" + checksum: 68da52b1e10002a543161494c4bc0f4d0398c8fdf361d5f7f4272e95c45d5b32d974896d44f6a0ea7378c9204988879d73613ca683e13bd1304e46d25ff67a8d + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.13.10": + version: 7.23.2 + resolution: "@babel/helpers@npm:7.23.2" + dependencies: + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.2 + "@babel/types": ^7.23.0 + checksum: aaf4828df75ec460eaa70e5c9f66e6dadc28dae3728ddb7f6c13187dbf38030e142194b83d81aa8a31bbc35a5529a5d7d3f3cf59d5d0b595f5dd7f9d8f1ced8e + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.23.0": + version: 7.23.1 + resolution: "@babel/helpers@npm:7.23.1" + dependencies: + "@babel/template": ^7.22.15 + "@babel/traverse": ^7.23.0 + "@babel/types": ^7.23.0 + checksum: acfc345102045c24ea2a4d60e00dcf8220e215af3add4520e2167700661338e6a80bd56baf44bb764af05ec6621101c9afc315dc107e18c61fa6da8acbdbb893 + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.22.13": + version: 7.22.20 + resolution: "@babel/highlight@npm:7.22.20" + dependencies: + "@babel/helper-validator-identifier": ^7.22.20 + chalk: ^2.4.2 + js-tokens: ^4.0.0 + checksum: 84bd034dca309a5e680083cd827a766780ca63cef37308404f17653d32366ea76262bd2364b2d38776232f2d01b649f26721417d507e8b4b6da3e4e739f6d134 + languageName: node + linkType: hard + +"@babel/parser@npm:7.14.6": + version: 7.14.6 + resolution: "@babel/parser@npm:7.14.6" + bin: + parser: ./bin/babel-parser.js + checksum: 104482e07971a78a3d68a0c329b1303981a272f55a510d39c93dac3c293f207ec863329046abc5d8bb86db58c49670cc607654793470a87ccd386544c2ccf298 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.0, @babel/parser@npm:^7.13.10, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/parser@npm:7.23.0" + bin: + parser: ./bin/babel-parser.js + checksum: 453fdf8b9e2c2b7d7b02139e0ce003d1af21947bbc03eb350fb248ee335c9b85e4ab41697ddbdd97079698de825a265e45a0846bb2ed47a2c7c1df833f42a354 + languageName: node + linkType: hard + +"@babel/plugin-syntax-async-generators@npm:^7.8.4": + version: 7.8.4 + resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 + languageName: node + linkType: hard + +"@babel/plugin-syntax-bigint@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-bigint@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3a10849d83e47aec50f367a9e56a6b22d662ddce643334b087f9828f4c3dd73bdc5909aaeabe123fed78515767f9ca43498a0e621c438d1cd2802d7fae3c9648 + languageName: node + linkType: hard + +"@babel/plugin-syntax-class-properties@npm:^7.8.3": + version: 7.12.13 + resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" + dependencies: + "@babel/helper-plugin-utils": ^7.12.13 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-meta@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 166ac1125d10b9c0c430e4156249a13858c0366d38844883d75d27389621ebe651115cb2ceb6dc011534d5055719fa1727b59f39e1ab3ca97820eef3dcab5b9b + languageName: node + linkType: hard + +"@babel/plugin-syntax-json-strings@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.22.5, @babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/plugin-syntax-jsx@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8829d30c2617ab31393d99cec2978e41f014f4ac6f01a1cecf4c4dd8320c3ec12fdc3ce121126b2d8d32f6887e99ca1a0bad53dedb1e6ad165640b92b24980ce + languageName: node + linkType: hard + +"@babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 + languageName: node + linkType: hard + +"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-numeric-separator@npm:^7.8.3": + version: 7.10.4 + resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" + dependencies: + "@babel/helper-plugin-utils": ^7.10.4 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 + languageName: node + linkType: hard + +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 + languageName: node + linkType: hard + +"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": + version: 7.8.3 + resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" + dependencies: + "@babel/helper-plugin-utils": ^7.8.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 + languageName: node + linkType: hard + +"@babel/plugin-syntax-top-level-await@npm:^7.8.3": + version: 7.14.5 + resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" + dependencies: + "@babel/helper-plugin-utils": ^7.14.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.22.5 + resolution: "@babel/plugin-syntax-typescript@npm:7.22.5" + dependencies: + "@babel/helper-plugin-utils": ^7.22.5 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 8ab7718fbb026d64da93681a57797d60326097fd7cb930380c8bffd9eb101689e90142c760a14b51e8e69c88a73ba3da956cb4520a3b0c65743aee5c71ef360a + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.17.2, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.22.6, @babel/runtime@npm:^7.23.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.2, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.23.2 + resolution: "@babel/runtime@npm:7.23.2" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 6c4df4839ec75ca10175f636d6362f91df8a3137f86b38f6cd3a4c90668a0fe8e9281d320958f4fbd43b394988958585a17c3aab2a4ea6bf7316b22916a371fb + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0": + version: 7.23.1 + resolution: "@babel/runtime@npm:7.23.1" + dependencies: + regenerator-runtime: ^0.14.0 + checksum: 0cd0d43e6e7dc7f9152fda8c8312b08321cda2f56ef53d6c22ebdd773abdc6f5d0a69008de90aa41908d00e2c1facb24715ff121274e689305c858355ff02c70 + languageName: node + linkType: hard + +"@babel/template@npm:^7.12.13, @babel/template@npm:^7.22.15, @babel/template@npm:^7.3.3": + version: 7.22.15 + resolution: "@babel/template@npm:7.22.15" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/parser": ^7.22.15 + "@babel/types": ^7.22.15 + checksum: 1f3e7dcd6c44f5904c184b3f7fe280394b191f2fed819919ffa1e529c259d5b197da8981b6ca491c235aee8dbad4a50b7e31304aa531271cb823a4a24a0dd8fd + languageName: node + linkType: hard + +"@babel/traverse@npm:7.13.0": + version: 7.13.0 + resolution: "@babel/traverse@npm:7.13.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@babel/generator": ^7.13.0 + "@babel/helper-function-name": ^7.12.13 + "@babel/helper-split-export-declaration": ^7.12.13 + "@babel/parser": ^7.13.0 + "@babel/types": ^7.13.0 + debug: ^4.1.0 + globals: ^11.1.0 + lodash: ^4.17.19 + checksum: 7d584b5541396b02f6973ba8ec8a067f2a6c2fd2e894c663dfae36e86e65a004a6865fbffbfc89ca040c894f9c12134bb971d31f09e7ec32c28e9b18bf737f2a + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.4.5": + version: 7.23.2 + resolution: "@babel/traverse@npm:7.23.2" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.23.0 + "@babel/types": ^7.23.0 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 26a1eea0dde41ab99dde8b9773a013a0dc50324e5110a049f5d634e721ff08afffd54940b3974a20308d7952085ac769689369e9127dea655f868c0f6e1ab35d + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.23.0": + version: 7.23.0 + resolution: "@babel/traverse@npm:7.23.0" + dependencies: + "@babel/code-frame": ^7.22.13 + "@babel/generator": ^7.23.0 + "@babel/helper-environment-visitor": ^7.22.20 + "@babel/helper-function-name": ^7.23.0 + "@babel/helper-hoist-variables": ^7.22.5 + "@babel/helper-split-export-declaration": ^7.22.6 + "@babel/parser": ^7.23.0 + "@babel/types": ^7.23.0 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 0b17fae53269e1af2cd3edba00892bc2975ad5df9eea7b84815dab07dfec2928c451066d51bc65b4be61d8499e77db7e547ce69ef2a7b0eca3f96269cb43a0b0 + languageName: node + linkType: hard + +"@babel/types@npm:7.13.0": + version: 7.13.0 + resolution: "@babel/types@npm:7.13.0" + dependencies: + "@babel/helper-validator-identifier": ^7.12.11 + lodash: ^4.17.19 + to-fast-properties: ^2.0.0 + checksum: 3dbb08add345325a49e1deebefa8d3774a8ab055c4be675c339a389358f4b3443652ded4bfdb230b342c6af12593a6fd3fb95156564e7ec84081018815896821 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.13.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": + version: 7.23.0 + resolution: "@babel/types@npm:7.23.0" + dependencies: + "@babel/helper-string-parser": ^7.22.5 + "@babel/helper-validator-identifier": ^7.22.20 + to-fast-properties: ^2.0.0 + checksum: 215fe04bd7feef79eeb4d33374b39909ce9cad1611c4135a4f7fdf41fe3280594105af6d7094354751514625ea92d0875aba355f53e86a92600f290e77b0e604 + languageName: node + linkType: hard + +"@bcoe/v8-coverage@npm:^0.2.3": + version: 0.2.3 + resolution: "@bcoe/v8-coverage@npm:0.2.3" + checksum: 850f9305536d0f2bd13e9e0881cb5f02e4f93fad1189f7b2d4bebf694e3206924eadee1068130d43c11b750efcc9405f88a8e42ef098b6d75239c0f047de1a27 + languageName: node + linkType: hard + +"@braintree/sanitize-url@npm:^6.0.4": + version: 6.0.4 + resolution: "@braintree/sanitize-url@npm:6.0.4" + checksum: f5ec6048973722ea1c46ae555d2e9eb848d7fa258994f8ea7d6db9514ee754ea3ef344ef71b3696d486776bcb839f3124e79f67c6b5b2814ed2da220b340627c + languageName: node + linkType: hard + +"@coinbase/wallet-sdk@npm:^3.6.6": + version: 3.7.2 + resolution: "@coinbase/wallet-sdk@npm:3.7.2" + dependencies: + "@metamask/safe-event-emitter": 2.0.0 + "@solana/web3.js": ^1.70.1 + bind-decorator: ^1.0.11 + bn.js: ^5.1.1 + buffer: ^6.0.3 + clsx: ^1.1.0 + eth-block-tracker: 6.1.0 + eth-json-rpc-filters: 5.1.0 + eth-rpc-errors: 4.0.2 + json-rpc-engine: 6.1.0 + keccak: ^3.0.1 + preact: ^10.5.9 + qs: ^6.10.3 + rxjs: ^6.6.3 + sha.js: ^2.4.11 + stream-browserify: ^3.0.0 + util: ^0.12.4 + checksum: d42a7b7e443942f657f636eede671979024308c6713af68f774309c04c0e1974cdbfe83514adebf4c0bcdb84adce6a026e5a92b5cff35e08eb1fb0772b1ec7e5 + languageName: node + linkType: hard + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@emotion/babel-plugin@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/babel-plugin@npm:11.11.0" + dependencies: + "@babel/helper-module-imports": ^7.16.7 + "@babel/runtime": ^7.18.3 + "@emotion/hash": ^0.9.1 + "@emotion/memoize": ^0.8.1 + "@emotion/serialize": ^1.1.2 + babel-plugin-macros: ^3.1.0 + convert-source-map: ^1.5.0 + escape-string-regexp: ^4.0.0 + find-root: ^1.1.0 + source-map: ^0.5.7 + stylis: 4.2.0 + checksum: 6b363edccc10290f7a23242c06f88e451b5feb2ab94152b18bb8883033db5934fb0e421e2d67d09907c13837c21218a3ac28c51707778a54d6cd3706c0c2f3f9 + languageName: node + linkType: hard + +"@emotion/cache@npm:*, @emotion/cache@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/cache@npm:11.11.0" + dependencies: + "@emotion/memoize": ^0.8.1 + "@emotion/sheet": ^1.2.2 + "@emotion/utils": ^1.2.1 + "@emotion/weak-memoize": ^0.3.1 + stylis: 4.2.0 + checksum: 8eb1dc22beaa20c21a2e04c284d5a2630a018a9d51fb190e52de348c8d27f4e8ca4bbab003d68b4f6cd9cc1c569ca747a997797e0f76d6c734a660dc29decf08 + languageName: node + linkType: hard + +"@emotion/hash@npm:^0.9.1": + version: 0.9.1 + resolution: "@emotion/hash@npm:0.9.1" + checksum: 716e17e48bf9047bf9383982c071de49f2615310fb4e986738931776f5a823bc1f29c84501abe0d3df91a3803c80122d24e28b57351bca9e01356ebb33d89876 + languageName: node + linkType: hard + +"@emotion/is-prop-valid@npm:^1.1.0, @emotion/is-prop-valid@npm:^1.2.1": + version: 1.2.1 + resolution: "@emotion/is-prop-valid@npm:1.2.1" + dependencies: + "@emotion/memoize": ^0.8.1 + checksum: 8f42dc573a3fad79b021479becb639b8fe3b60bdd1081a775d32388bca418ee53074c7602a4c845c5f75fa6831eb1cbdc4d208cc0299f57014ed3a02abcad16a + languageName: node + linkType: hard + +"@emotion/memoize@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/memoize@npm:0.8.1" + checksum: a19cc01a29fcc97514948eaab4dc34d8272e934466ed87c07f157887406bc318000c69ae6f813a9001c6a225364df04249842a50e692ef7a9873335fbcc141b0 + languageName: node + linkType: hard + +"@emotion/react@npm:^11.0.0, @emotion/react@npm:^11.11.1": + version: 11.11.1 + resolution: "@emotion/react@npm:11.11.1" + dependencies: + "@babel/runtime": ^7.18.3 + "@emotion/babel-plugin": ^11.11.0 + "@emotion/cache": ^11.11.0 + "@emotion/serialize": ^1.1.2 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 + "@emotion/utils": ^1.2.1 + "@emotion/weak-memoize": ^0.3.1 + hoist-non-react-statics: ^3.3.1 + peerDependencies: + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: aec3c36650f5f0d3d4445ff44d73dd88712b1609645b6af3e6d08049cfbc51f1785fe13dea1a1d4ab1b0800d68f2339ab11e459687180362b1ef98863155aae5 + languageName: node + linkType: hard + +"@emotion/serialize@npm:*, @emotion/serialize@npm:^1.1.2": + version: 1.1.2 + resolution: "@emotion/serialize@npm:1.1.2" + dependencies: + "@emotion/hash": ^0.9.1 + "@emotion/memoize": ^0.8.1 + "@emotion/unitless": ^0.8.1 + "@emotion/utils": ^1.2.1 + csstype: ^3.0.2 + checksum: 413c352e657f1b5e27ea6437b3ef7dcc3860669b7ae17fd5c18bfbd44e033af1acc56b64d252284a813ca4f3b3e1b0841c42d3fb08e02d2df56fd3cd63d72986 + languageName: node + linkType: hard + +"@emotion/server@npm:^11.4.0": + version: 11.11.0 + resolution: "@emotion/server@npm:11.11.0" + dependencies: + "@emotion/utils": ^1.2.1 + html-tokenize: ^2.0.0 + multipipe: ^1.0.2 + through: ^2.3.8 + peerDependencies: + "@emotion/css": ^11.0.0-rc.0 + peerDependenciesMeta: + "@emotion/css": + optional: true + checksum: 2130b51390a6ba4375ec3223c9e4fb476ba30973910ec5196a048d1f832ba2ad23e51eee261058fbd7c3c78938fc3d83b01c3a951e8b6fa83d40f2ac4047c317 + languageName: node + linkType: hard + +"@emotion/sheet@npm:^1.2.2": + version: 1.2.2 + resolution: "@emotion/sheet@npm:1.2.2" + checksum: d973273c9c15f1c291ca2269728bf044bd3e92a67bca87943fa9ec6c3cd2b034f9a6bfe95ef1b5d983351d128c75b547b43ff196a00a3875f7e1d269793cecfe + languageName: node + linkType: hard + +"@emotion/styled@npm:^11.0.0, @emotion/styled@npm:^11.11.0": + version: 11.11.0 + resolution: "@emotion/styled@npm:11.11.0" + dependencies: + "@babel/runtime": ^7.18.3 + "@emotion/babel-plugin": ^11.11.0 + "@emotion/is-prop-valid": ^1.2.1 + "@emotion/serialize": ^1.1.2 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.1 + "@emotion/utils": ^1.2.1 + peerDependencies: + "@emotion/react": ^11.0.0-rc.0 + react: ">=16.8.0" + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 904f641aad3892c65d7d6c0808b036dae1e6d6dad4861c1c7dc0baa59977047c6cad220691206eba7b4059f1a1c6e6c1ef4ebb8c829089e280fa0f2164a01e6b + languageName: node + linkType: hard + +"@emotion/stylis@npm:^0.8.4": + version: 0.8.5 + resolution: "@emotion/stylis@npm:0.8.5" + checksum: 67ff5958449b2374b329fb96e83cb9025775ffe1e79153b499537c6c8b2eb64b77f32d7b5d004d646973662356ceb646afd9269001b97c54439fceea3203ce65 + languageName: node + linkType: hard + +"@emotion/unitless@npm:^0.7.4": + version: 0.7.5 + resolution: "@emotion/unitless@npm:0.7.5" + checksum: f976e5345b53fae9414a7b2e7a949aa6b52f8bdbcc84458b1ddc0729e77ba1d1dfdff9960e0da60183877873d3a631fa24d9695dd714ed94bcd3ba5196586a6b + languageName: node + linkType: hard + +"@emotion/unitless@npm:^0.8.1": + version: 0.8.1 + resolution: "@emotion/unitless@npm:0.8.1" + checksum: 385e21d184d27853bb350999471f00e1429fa4e83182f46cd2c164985999d9b46d558dc8b9cc89975cb337831ce50c31ac2f33b15502e85c299892e67e7b4a88 + languageName: node + linkType: hard + +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1": + version: 1.0.1 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" + peerDependencies: + react: ">=16.8.0" + checksum: 700b6e5bbb37a9231f203bb3af11295eed01d73b2293abece0bc2a2237015e944d7b5114d4887ad9a79776504aa51ed2a8b0ddbc117c54495dd01a6b22f93786 + languageName: node + linkType: hard + +"@emotion/utils@npm:*, @emotion/utils@npm:^1.2.1": + version: 1.2.1 + resolution: "@emotion/utils@npm:1.2.1" + checksum: e0b44be0705b56b079c55faff93952150be69e79b660ae70ddd5b6e09fc40eb1319654315a9f34bb479d7f4ec94be6068c061abbb9e18b9778ae180ad5d97c73 + languageName: node + linkType: hard + +"@emotion/weak-memoize@npm:^0.3.1": + version: 0.3.1 + resolution: "@emotion/weak-memoize@npm:0.3.1" + checksum: b2be47caa24a8122622ea18cd2d650dbb4f8ad37b636dc41ed420c2e082f7f1e564ecdea68122b546df7f305b159bf5ab9ffee872abd0f052e687428459af594 + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.0 + resolution: "@eslint-community/eslint-utils@npm:4.4.0" + dependencies: + eslint-visitor-keys: ^3.3.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: cdfe3ae42b4f572cbfb46d20edafe6f36fc5fb52bf2d90875c58aefe226892b9677fef60820e2832caf864a326fe4fc225714c46e8389ccca04d5f9288aabd22 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.4.0, @eslint-community/regexpp@npm:^4.6.1": + version: 4.9.1 + resolution: "@eslint-community/regexpp@npm:4.9.1" + checksum: 06fb839e9c756f6375cc545c2f2e05a0a64576bd6370e8e3c07983fd29a3d6e164ef4aa48a361f7d27e6713ab79c83053ff6a2ccb78748bc955e344279c4a3b6 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.2": + version: 2.1.2 + resolution: "@eslint/eslintrc@npm:2.1.2" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^9.6.0 + globals: ^13.19.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: bc742a1e3b361f06fedb4afb6bf32cbd27171292ef7924f61c62f2aed73048367bcc7ac68f98c06d4245cd3fabc43270f844e3c1699936d4734b3ac5398814a7 + languageName: node + linkType: hard + +"@eslint/js@npm:8.51.0": + version: 8.51.0 + resolution: "@eslint/js@npm:8.51.0" + checksum: 0228bf1e1e0414843e56d9ff362a2a72d579c078f93174666f29315690e9e30a8633ad72c923297f7fd7182381b5a476805ff04dac8debe638953eb1ded3ac73 + languageName: node + linkType: hard + +"@ethereumjs/rlp@npm:^4.0.1": + version: 4.0.1 + resolution: "@ethereumjs/rlp@npm:4.0.1" + bin: + rlp: bin/rlp + checksum: 30db19c78faa2b6ff27275ab767646929207bb207f903f09eb3e4c273ce2738b45f3c82169ddacd67468b4f063d8d96035f2bf36f02b6b7e4d928eefe2e3ecbc + languageName: node + linkType: hard + +"@ethereumjs/util@npm:^8.0.6": + version: 8.1.0 + resolution: "@ethereumjs/util@npm:8.1.0" + dependencies: + "@ethereumjs/rlp": ^4.0.1 + ethereum-cryptography: ^2.0.0 + micro-ftch: ^0.3.1 + checksum: 9ae5dee8f12b0faf81cd83f06a41560e79b0ba96a48262771d897a510ecae605eb6d84f687da001ab8ccffd50f612ae50f988ef76e6312c752897f462f3ac08d + languageName: node + linkType: hard + +"@ethersproject/abi@npm:5.7.0, @ethersproject/abi@npm:^5.0.1, @ethersproject/abi@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abi@npm:5.7.0" + dependencies: + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: bc6962bb6cb854e4d2a4d65b2c49c716477675b131b1363312234bdbb7e19badb7d9ce66f4ca2a70ae2ea84f7123dbc4e300a1bfe5d58864a7eafabc1466627e + languageName: node + linkType: hard + +"@ethersproject/abstract-provider@npm:5.7.0, @ethersproject/abstract-provider@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-provider@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/networks": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/web": ^5.7.0 + checksum: 74cf4696245cf03bb7cc5b6cbf7b4b89dd9a79a1c4688126d214153a938126d4972d42c93182198653ce1de35f2a2cad68be40337d4774b3698a39b28f0228a8 + languageName: node + linkType: hard + +"@ethersproject/abstract-signer@npm:5.7.0, @ethersproject/abstract-signer@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/abstract-signer@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + checksum: a823dac9cfb761e009851050ebebd5b229d1b1cc4a75b125c2da130ff37e8218208f7f9d1386f77407705b889b23d4a230ad67185f8872f083143e0073cbfbe3 + languageName: node + linkType: hard + +"@ethersproject/address@npm:5.7.0, @ethersproject/address@npm:^5, @ethersproject/address@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/address@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + checksum: 64ea5ebea9cc0e845c413e6cb1e54e157dd9fc0dffb98e239d3a3efc8177f2ff798cd4e3206cf3660ee8faeb7bef1a47dc0ebef0d7b132c32e61e550c7d4c843 + languageName: node + linkType: hard + +"@ethersproject/base64@npm:5.7.0, @ethersproject/base64@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/base64@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + checksum: 7dd5d734d623582f08f665434f53685041a3d3b334a0e96c0c8afa8bbcaab934d50e5b6b980e826a8fde8d353e0b18f11e61faf17468177274b8e7c69cd9742b + languageName: node + linkType: hard + +"@ethersproject/basex@npm:5.7.0, @ethersproject/basex@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/basex@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + checksum: 326087b7e1f3787b5fe6cd1cf2b4b5abfafbc355a45e88e22e5e9d6c845b613ffc5301d629b28d5c4d5e2bfe9ec424e6782c804956dff79be05f0098cb5817de + languageName: node + linkType: hard + +"@ethersproject/bignumber@npm:5.7.0, @ethersproject/bignumber@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bignumber@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + bn.js: ^5.2.1 + checksum: 8c9a134b76f3feb4ec26a5a27379efb4e156b8fb2de0678a67788a91c7f4e30abe9d948638458e4b20f2e42380da0adacc7c9389d05fce070692edc6ae9b4904 + languageName: node + linkType: hard + +"@ethersproject/bytes@npm:5.7.0, @ethersproject/bytes@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/bytes@npm:5.7.0" + dependencies: + "@ethersproject/logger": ^5.7.0 + checksum: 66ad365ceaab5da1b23b72225c71dce472cf37737af5118181fa8ab7447d696bea15ca22e3a0e8836fdd8cfac161afe321a7c67d0dde96f9f645ddd759676621 + languageName: node + linkType: hard + +"@ethersproject/constants@npm:5.7.0, @ethersproject/constants@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/constants@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + checksum: 6d4b1355747cce837b3e76ec3bde70e4732736f23b04f196f706ebfa5d4d9c2be50904a390d4d40ce77803b98d03d16a9b6898418e04ba63491933ce08c4ba8a + languageName: node + linkType: hard + +"@ethersproject/contracts@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/contracts@npm:5.7.0" + dependencies: + "@ethersproject/abi": ^5.7.0 + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + checksum: 6ccf1121cba01b31e02f8c507cb971ab6bfed85706484a9ec09878ef1594a62215f43c4fdef8f4a4875b99c4a800bc95e3be69b1803f8ce479e07634b5a740c0 + languageName: node + linkType: hard + +"@ethersproject/hash@npm:5.7.0, @ethersproject/hash@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hash@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 6e9fa8d14eb08171cd32f17f98cc108ec2aeca74a427655f0d689c550fee0b22a83b3b400fad7fb3f41cf14d4111f87f170aa7905bcbcd1173a55f21b06262ef + languageName: node + linkType: hard + +"@ethersproject/hdnode@npm:5.7.0, @ethersproject/hdnode@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/hdnode@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/basex": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/pbkdf2": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wordlists": ^5.7.0 + checksum: bfe5ca2d89a42de73655f853170ef4766b933c5f481cddad709b3aca18823275b096e572f92d1602a052f80b426edde44ad6b9d028799775a7dad4a5bbed2133 + languageName: node + linkType: hard + +"@ethersproject/json-wallets@npm:5.7.0, @ethersproject/json-wallets@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/json-wallets@npm:5.7.0" + dependencies: + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hdnode": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/pbkdf2": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + checksum: f583458d22db62efaaf94d38dd243482776a45bf90f9f3882fbad5aa0b8fd288b41eb7c1ff8ec0b99c9b751088e43d6173530db64dd33c59f9d8daa8d7ad5aa2 + languageName: node + linkType: hard + +"@ethersproject/keccak256@npm:5.7.0, @ethersproject/keccak256@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/keccak256@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + js-sha3: 0.8.0 + checksum: ff70950d82203aab29ccda2553422cbac2e7a0c15c986bd20a69b13606ed8bb6e4fdd7b67b8d3b27d4f841e8222cbaccd33ed34be29f866fec7308f96ed244c6 + languageName: node + linkType: hard + +"@ethersproject/logger@npm:5.7.0, @ethersproject/logger@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/logger@npm:5.7.0" + checksum: 075ab2f605f1fd0813f2e39c3308f77b44a67732b36e712d9bc085f22a84aac4da4f71b39bee50fe78da3e1c812673fadc41180c9970fe5e486e91ea17befe0d + languageName: node + linkType: hard + +"@ethersproject/networks@npm:5.7.1, @ethersproject/networks@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/networks@npm:5.7.1" + dependencies: + "@ethersproject/logger": ^5.7.0 + checksum: 0339f312304c17d9a0adce550edb825d4d2c8c9468c1634c44172c67a9ed256f594da62c4cda5c3837a0f28b7fabc03aca9b492f68ff1fdad337ee861b27bd5d + languageName: node + linkType: hard + +"@ethersproject/pbkdf2@npm:5.7.0, @ethersproject/pbkdf2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/pbkdf2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + checksum: b895adb9e35a8a127e794f7aadc31a2424ef355a70e51cde10d457e3e888bb8102373199a540cf61f2d6b9a32e47358f9c65b47d559f42bf8e596b5fd67901e9 + languageName: node + linkType: hard + +"@ethersproject/properties@npm:5.7.0, @ethersproject/properties@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/properties@npm:5.7.0" + dependencies: + "@ethersproject/logger": ^5.7.0 + checksum: 6ab0ccf0c3aadc9221e0cdc5306ce6cd0df7f89f77d77bccdd1277182c9ead0202cd7521329ba3acde130820bf8af299e17cf567d0d497c736ee918207bbf59f + languageName: node + linkType: hard + +"@ethersproject/providers@npm:5.7.2, @ethersproject/providers@npm:^5": + version: 5.7.2 + resolution: "@ethersproject/providers@npm:5.7.2" + dependencies: + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/base64": ^5.7.0 + "@ethersproject/basex": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/networks": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/web": ^5.7.0 + bech32: 1.1.4 + ws: 7.4.6 + checksum: 1754c731a5ca6782ae9677f4a9cd8b6246c4ef21a966c9a01b133750f3c578431ec43ec254e699969c4a0f87e84463ded50f96b415600aabd37d2056aee58c19 + languageName: node + linkType: hard + +"@ethersproject/random@npm:5.7.0, @ethersproject/random@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/random@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 017829c91cff6c76470852855108115b0b52c611b6be817ed1948d56ba42d6677803ec2012aa5ae298a7660024156a64c11fcf544e235e239ab3f89f0fff7345 + languageName: node + linkType: hard + +"@ethersproject/rlp@npm:5.7.0, @ethersproject/rlp@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/rlp@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: bce165b0f7e68e4d091c9d3cf47b247cac33252df77a095ca4281d32d5eeaaa3695d9bc06b2b057c5015353a68df89f13a4a54a72e888e4beeabbe56b15dda6e + languageName: node + linkType: hard + +"@ethersproject/sha2@npm:5.7.0, @ethersproject/sha2@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/sha2@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + hash.js: 1.1.7 + checksum: 09321057c022effbff4cc2d9b9558228690b5dd916329d75c4b1ffe32ba3d24b480a367a7cc92d0f0c0b1c896814d03351ae4630e2f1f7160be2bcfbde435dbc + languageName: node + linkType: hard + +"@ethersproject/signing-key@npm:5.7.0, @ethersproject/signing-key@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/signing-key@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + bn.js: ^5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + checksum: 8f8de09b0aac709683bbb49339bc0a4cd2f95598f3546436c65d6f3c3a847ffa98e06d35e9ed2b17d8030bd2f02db9b7bd2e11c5cf8a71aad4537487ab4cf03a + languageName: node + linkType: hard + +"@ethersproject/solidity@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/solidity@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/sha2": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 9a02f37f801c96068c3e7721f83719d060175bc4e80439fe060e92bd7acfcb6ac1330c7e71c49f4c2535ca1308f2acdcb01e00133129aac00581724c2d6293f3 + languageName: node + linkType: hard + +"@ethersproject/strings@npm:5.7.0, @ethersproject/strings@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/strings@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 5ff78693ae3fdf3cf23e1f6dc047a61e44c8197d2408c42719fef8cb7b7b3613a4eec88ac0ed1f9f5558c74fe0de7ae3195a29ca91a239c74b9f444d8e8b50df + languageName: node + linkType: hard + +"@ethersproject/transactions@npm:5.7.0, @ethersproject/transactions@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/transactions@npm:5.7.0" + dependencies: + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/rlp": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + checksum: a31b71996d2b283f68486241bff0d3ea3f1ba0e8f1322a8fffc239ccc4f4a7eb2ea9994b8fd2f093283fd75f87bae68171e01b6265261f821369aca319884a79 + languageName: node + linkType: hard + +"@ethersproject/units@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/units@npm:5.7.0" + dependencies: + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/constants": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + checksum: 304714f848cd32e57df31bf545f7ad35c2a72adae957198b28cbc62166daa929322a07bff6e9c9ac4577ab6aa0de0546b065ed1b2d20b19e25748b7d475cb0fc + languageName: node + linkType: hard + +"@ethersproject/wallet@npm:5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wallet@npm:5.7.0" + dependencies: + "@ethersproject/abstract-provider": ^5.7.0 + "@ethersproject/abstract-signer": ^5.7.0 + "@ethersproject/address": ^5.7.0 + "@ethersproject/bignumber": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/hdnode": ^5.7.0 + "@ethersproject/json-wallets": ^5.7.0 + "@ethersproject/keccak256": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/random": ^5.7.0 + "@ethersproject/signing-key": ^5.7.0 + "@ethersproject/transactions": ^5.7.0 + "@ethersproject/wordlists": ^5.7.0 + checksum: a4009bf7331eddab38e3015b5e9101ef92de7f705b00a6196b997db0e5635b6d83561674d46c90c6f77b87c0500fe4a6b0183ba13749efc22db59c99deb82fbd + languageName: node + linkType: hard + +"@ethersproject/web@npm:5.7.1, @ethersproject/web@npm:^5.7.0": + version: 5.7.1 + resolution: "@ethersproject/web@npm:5.7.1" + dependencies: + "@ethersproject/base64": ^5.7.0 + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 7028c47103f82fd2e2c197ce0eecfacaa9180ffeec7de7845b1f4f9b19d84081b7a48227aaddde05a4aaa526af574a9a0ce01cc0fc75e3e371f84b38b5b16b2b + languageName: node + linkType: hard + +"@ethersproject/wordlists@npm:5.7.0, @ethersproject/wordlists@npm:^5.7.0": + version: 5.7.0 + resolution: "@ethersproject/wordlists@npm:5.7.0" + dependencies: + "@ethersproject/bytes": ^5.7.0 + "@ethersproject/hash": ^5.7.0 + "@ethersproject/logger": ^5.7.0 + "@ethersproject/properties": ^5.7.0 + "@ethersproject/strings": ^5.7.0 + checksum: 30eb6eb0731f9ef5faa44bf9c0c6e950bcaaef61e4d2d9ce0ae6d341f4e2d6d1f4ab4f8880bfce03b7aac4b862fb740e1421170cfbf8e2aafc359277d49e6e97 + languageName: node + linkType: hard + +"@fastify/busboy@npm:^2.0.0": + version: 2.0.0 + resolution: "@fastify/busboy@npm:2.0.0" + checksum: 41879937ce1dee6421ef9cd4da53239830617e1f0bb7a0e843940772cd72827205d05e518af6adabe6e1ea19301285fff432b9d11bad01a531e698bea95c781b + languageName: node + linkType: hard + +"@floating-ui/core@npm:^1.4.2": + version: 1.5.0 + resolution: "@floating-ui/core@npm:1.5.0" + dependencies: + "@floating-ui/utils": ^0.1.3 + checksum: 54b4fe26b3c228746ac5589f97303abf158b80aa5f8b99027259decd68d1c2030c4c637648ebd33dfe78a4212699453bc2bd7537fd5a594d3bd3e63d362f666f + languageName: node + linkType: hard + +"@floating-ui/dom@npm:^1.5.1": + version: 1.5.3 + resolution: "@floating-ui/dom@npm:1.5.3" + dependencies: + "@floating-ui/core": ^1.4.2 + "@floating-ui/utils": ^0.1.3 + checksum: 00053742064aac70957f0bd5c1542caafb3bfe9716588bfe1d409fef72a67ed5e60450d08eb492a77f78c22ed1ce4f7955873cc72bf9f9caf2b0f43ae3561c21 + languageName: node + linkType: hard + +"@floating-ui/react-dom@npm:^2.0.0, @floating-ui/react-dom@npm:^2.0.2": + version: 2.0.2 + resolution: "@floating-ui/react-dom@npm:2.0.2" + dependencies: + "@floating-ui/dom": ^1.5.1 + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: 4797e1f7a19c1e531ed0d578ccdcbe58970743e5a480ba30424857fc953063f36d481f8c5d69248a8f1d521b739e94bf5e1ffb35506400dea3d914f166ed2f7f + languageName: node + linkType: hard + +"@floating-ui/utils@npm:^0.1.3": + version: 0.1.6 + resolution: "@floating-ui/utils@npm:0.1.6" + checksum: b34d4b5470869727f52e312e08272edef985ba5a450a76de0917ba0a9c6f5df2bdbeb99448e2c60f39b177fb8981c772ff1831424e75123471a27ebd5b52c1eb + languageName: node + linkType: hard + +"@formatjs/ecma402-abstract@npm:1.4.0": + version: 1.4.0 + resolution: "@formatjs/ecma402-abstract@npm:1.4.0" + dependencies: + tslib: ^2.0.1 + checksum: b5fad8934cacbaa8cdfa071d124b5320358ff173d0b47607fca9d2945a5fa81f7cfaa037d463662b17b471160c5677c77728ab2b71789e81c8fa0e6f2aaeca58 + languageName: node + linkType: hard + +"@formatjs/intl-numberformat@npm:^5.5.2": + version: 5.7.6 + resolution: "@formatjs/intl-numberformat@npm:5.7.6" + dependencies: + "@formatjs/ecma402-abstract": 1.4.0 + tslib: ^2.0.1 + checksum: 00f2b30ef196bb253c3cb396c3e43f22ae78cd27cd2f0b8d1efbbe75aa7d7dbf540e31808517c79595d50d648b105a6f2e022fd30983a4fee7c86e9b3b028396 + languageName: node + linkType: hard + +"@hapi/hoek@npm:^9.0.0": + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 + languageName: node + linkType: hard + +"@hapi/topo@npm:^5.0.0": + version: 5.1.0 + resolution: "@hapi/topo@npm:5.1.0" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014 + languageName: node + linkType: hard + +"@humanwhocodes/config-array@npm:^0.11.11": + version: 0.11.11 + resolution: "@humanwhocodes/config-array@npm:0.11.11" + dependencies: + "@humanwhocodes/object-schema": ^1.2.1 + debug: ^4.1.1 + minimatch: ^3.0.5 + checksum: db84507375ab77b8ffdd24f498a5b49ad6b64391d30dd2ac56885501d03964d29637e05b1ed5aefa09d57ac667e28028bc22d2da872bfcd619652fbdb5f4ca19 + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^1.2.1": + version: 1.2.1 + resolution: "@humanwhocodes/object-schema@npm:1.2.1" + checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 + languageName: node + linkType: hard + +"@ipld/car@npm:^3.0.1, @ipld/car@npm:^3.1.4, @ipld/car@npm:^3.2.3": + version: 3.2.4 + resolution: "@ipld/car@npm:3.2.4" + dependencies: + "@ipld/dag-cbor": ^7.0.0 + multiformats: ^9.5.4 + varint: ^6.0.0 + checksum: f47ccf4c0bc21f7887eaafb58d6d9200b44bc0a3b847a452df5c5d1c07b79f3ea4e3aead7f7fca793cb5fea81e287d464c93bba9dd7e451e9f6ce692290b61b6 + languageName: node + linkType: hard + +"@ipld/dag-cbor@npm:^6.0.3": + version: 6.0.15 + resolution: "@ipld/dag-cbor@npm:6.0.15" + dependencies: + cborg: ^1.5.4 + multiformats: ^9.5.4 + checksum: c4ac8d7d271b9dd093c43495b1f24c3cdb7f10487aac529c2010c53a3320439ac9b17f53f02177e022735a1aae3d921f359c7020f765b72f94799ec3ff8e7207 + languageName: node + linkType: hard + +"@ipld/dag-cbor@npm:^7.0.0, @ipld/dag-cbor@npm:^7.0.2": + version: 7.0.3 + resolution: "@ipld/dag-cbor@npm:7.0.3" + dependencies: + cborg: ^1.6.0 + multiformats: ^9.5.4 + checksum: c0c59907ab6146a214c1ecb2341cc02904bc952255e15544554990690f7841380a87636d5937aaa23e9004b1c141e90238277d088ed6932b5b0e6d2e6ee1fe02 + languageName: node + linkType: hard + +"@ipld/dag-pb@npm:^2.0.2": + version: 2.1.18 + resolution: "@ipld/dag-pb@npm:2.1.18" + dependencies: + multiformats: ^9.5.4 + checksum: 46b9a7dabf6e87698fc268f88d94b710ba3988e26ab7918bcdf10c4356e15eb32393b6ab56eaf0d8936b369cb77456e491495f1025f78b099f1bd26cc5ccda06 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + +"@istanbuljs/load-nyc-config@npm:^1.0.0": + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + dependencies: + camelcase: ^5.3.1 + find-up: ^4.1.0 + get-package-type: ^0.1.0 + js-yaml: ^3.13.1 + resolve-from: ^5.0.0 + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + languageName: node + linkType: hard + +"@istanbuljs/schema@npm:^0.1.2": + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + languageName: node + linkType: hard + +"@jedmao/redux-mock-store@npm:^3.0.5": + version: 3.0.5 + resolution: "@jedmao/redux-mock-store@npm:3.0.5" + peerDependencies: + redux: ^4 + checksum: 5146480ca8088fb7623af45a4d2a8f330b159da86fdc4f2c2be03654ac4ee77c6b3f7b4a8af947c638794d9ad785f2714e5af9c3a79c363e1b6cf096f21bdfd7 + languageName: node + linkType: hard + +"@jest/console@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/console@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + slash: ^3.0.0 + checksum: 0e3624e32c5a8e7361e889db70b170876401b7d70f509a2538c31d5cd50deb0c1ae4b92dc63fe18a0902e0a48c590c21d53787a0df41a52b34fa7cab96c384d6 + languageName: node + linkType: hard + +"@jest/core@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/core@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/reporters": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + ci-info: ^3.2.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-changed-files: ^29.7.0 + jest-config: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-resolve-dependencies: ^29.7.0 + jest-runner: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + jest-watcher: ^29.7.0 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: af759c9781cfc914553320446ce4e47775ae42779e73621c438feb1e4231a5d4862f84b1d8565926f2d1aab29b3ec3dcfdc84db28608bdf5f29867124ebcfc0d + languageName: node + linkType: hard + +"@jest/environment@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/environment@npm:29.7.0" + dependencies: + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + checksum: 6fb398143b2543d4b9b8d1c6dbce83fa5247f84f550330604be744e24c2bd2178bb893657d62d1b97cf2f24baf85c450223f8237cccb71192c36a38ea2272934 + languageName: node + linkType: hard + +"@jest/expect-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect-utils@npm:29.7.0" + dependencies: + jest-get-type: ^29.6.3 + checksum: 75eb177f3d00b6331bcaa057e07c0ccb0733a1d0a1943e1d8db346779039cb7f103789f16e502f888a3096fb58c2300c38d1f3748b36a7fa762eb6f6d1b160ed + languageName: node + linkType: hard + +"@jest/expect@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/expect@npm:29.7.0" + dependencies: + expect: ^29.7.0 + jest-snapshot: ^29.7.0 + checksum: a01cb85fd9401bab3370618f4b9013b90c93536562222d920e702a0b575d239d74cecfe98010aaec7ad464f67cf534a353d92d181646a4b792acaa7e912ae55e + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/fake-timers@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: caf2bbd11f71c9241b458d1b5a66cbe95debc5a15d96442444b5d5c7ba774f523c76627c6931cca5e10e76f0d08761f6f1f01a608898f4751a0eee54fc3d8d00 + languageName: node + linkType: hard + +"@jest/globals@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/globals@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/types": ^29.6.3 + jest-mock: ^29.7.0 + checksum: 97dbb9459135693ad3a422e65ca1c250f03d82b2a77f6207e7fa0edd2c9d2015fbe4346f3dc9ebff1678b9d8da74754d4d440b7837497f8927059c0642a22123 + languageName: node + linkType: hard + +"@jest/reporters@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/reporters@npm:29.7.0" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + "@types/node": "*" + chalk: ^4.0.0 + collect-v8-coverage: ^1.0.0 + exit: ^0.1.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + istanbul-lib-coverage: ^3.0.0 + istanbul-lib-instrument: ^6.0.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 7eadabd62cc344f629024b8a268ecc8367dba756152b761bdcb7b7e570a3864fc51b2a9810cd310d85e0a0173ef002ba4528d5ea0329fbf66ee2a3ada9c40455 + languageName: node + linkType: hard + +"@jest/schemas@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/schemas@npm:29.6.3" + dependencies: + "@sinclair/typebox": ^0.27.8 + checksum: 910040425f0fc93cd13e68c750b7885590b8839066dfa0cd78e7def07bbb708ad869381f725945d66f2284de5663bbecf63e8fdd856e2ae6e261ba30b1687e93 + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/source-map@npm:29.6.3" + dependencies: + "@jridgewell/trace-mapping": ^0.3.18 + callsites: ^3.0.0 + graceful-fs: ^4.2.9 + checksum: bcc5a8697d471396c0003b0bfa09722c3cd879ad697eb9c431e6164e2ea7008238a01a07193dfe3cbb48b1d258eb7251f6efcea36f64e1ebc464ea3c03ae2deb + languageName: node + linkType: hard + +"@jest/test-result@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-result@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: 67b6317d526e335212e5da0e768e3b8ab8a53df110361b80761353ad23b6aea4432b7c5665bdeb87658ea373b90fb1afe02ed3611ef6c858c7fba377505057fa + languageName: node + linkType: hard + +"@jest/test-sequencer@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/test-sequencer@npm:29.7.0" + dependencies: + "@jest/test-result": ^29.7.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + slash: ^3.0.0 + checksum: 73f43599017946be85c0b6357993b038f875b796e2f0950487a82f4ebcb115fa12131932dd9904026b4ad8be131fe6e28bd8d0aa93b1563705185f9804bff8bd + languageName: node + linkType: hard + +"@jest/transform@npm:^29.7.0": + version: 29.7.0 + resolution: "@jest/transform@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.6.3 + "@jridgewell/trace-mapping": ^0.3.18 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: 0f8ac9f413903b3cb6d240102db848f2a354f63971ab885833799a9964999dd51c388162106a807f810071f864302cdd8e3f0c241c29ce02d85a36f18f3f40ab + languageName: node + linkType: hard + +"@jest/types@npm:^29.6.3": + version: 29.6.3 + resolution: "@jest/types@npm:29.6.3" + dependencies: + "@jest/schemas": ^29.6.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: a0bcf15dbb0eca6bdd8ce61a3fb055349d40268622a7670a3b2eb3c3dbafe9eb26af59938366d520b86907b9505b0f9b29b85cec11579a9e580694b87cd90fcc + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": + version: 0.3.3 + resolution: "@jridgewell/gen-mapping@npm:0.3.3" + dependencies: + "@jridgewell/set-array": ^1.0.1 + "@jridgewell/sourcemap-codec": ^1.4.10 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 4a74944bd31f22354fc01c3da32e83c19e519e3bbadafa114f6da4522ea77dd0c2842607e923a591d60a76699d819a2fbb6f3552e277efdb9b58b081390b60ab + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3, @jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.0.1": + version: 1.1.2 + resolution: "@jridgewell/set-array@npm:1.1.2" + checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.19 + resolution: "@jridgewell/trace-mapping@npm:0.3.19" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: 956a6f0f6fec060fb48c6bf1f5ec2064e13cd38c8be3873877d4b92b4a27ba58289a34071752671262a3e3c202abcc3fa2aac64d8447b4b0fa1ba3c9047f1c20 + languageName: node + linkType: hard + +"@ledgerhq/connect-kit-loader@npm:^1.1.0": + version: 1.1.2 + resolution: "@ledgerhq/connect-kit-loader@npm:1.1.2" + checksum: 614fdd9ac2363da60af667adcfe4721f863d8ea06ee45a08192a162c28e806dc07491bee4833d14def74de673eac1f1450eaf67e783c8c28da4e0cd095b4474a + languageName: node + linkType: hard + +"@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0": + version: 1.1.2 + resolution: "@lit-labs/ssr-dom-shim@npm:1.1.2" + checksum: 73fd787893851d4ec4aaa5c775405ed2aae4ca0891b2dd3c973b32c2f4bf70ada5481dd0224e52b786d037aa8a00052186ad1623c44551affd66f6409cca8da6 + languageName: node + linkType: hard + +"@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0": + version: 1.6.3 + resolution: "@lit/reactive-element@npm:1.6.3" + dependencies: + "@lit-labs/ssr-dom-shim": ^1.0.0 + checksum: 79b58631c38effeabad090070324431da8a22cf0ff665f5e4de35e4d791f984742b3d340c9c7fce996d1124a8da95febc582471b4c237236c770b1300b56ef6e + languageName: node + linkType: hard + +"@livepeer/core-react@npm:^1.9.1": + version: 1.9.1 + resolution: "@livepeer/core-react@npm:1.9.1" + dependencies: + "@livepeer/core": ^1.9.1 + "@tanstack/query-async-storage-persister": 4.29.23 + "@tanstack/query-core": 4.29.23 + "@tanstack/react-query": 4.29.23 + "@tanstack/react-query-persist-client": 4.29.23 + use-sync-external-store: ^1.2.0 + zustand: ^4.3.9 + peerDependencies: + react: ">=17.0.0" + checksum: efa31b038480286d9fa7265c5083145659836380d2bd2f69061f8ca79b3bf2e9adb11f8f85c2c6e835aaa0cf0725d10e26adb3d63477127197b72b40f90da081 + languageName: node + linkType: hard + +"@livepeer/core@npm:^1.9.1": + version: 1.9.1 + resolution: "@livepeer/core@npm:1.9.1" + dependencies: + cross-fetch: ^4.0.0 + ms: ^3.0.0-canary.1 + multiformats: 9.9.0 + tus-js-client: ^3.1.0 + zustand: ^4.3.9 + peerDependencies: + react: ">=17.0.0" + peerDependenciesMeta: + react: + optional: true + checksum: f1606f13a14f937d8f79c6f3231dab5842f12ba19f342f06f6d7924016ab5402ac23af0483ac2d506978ae96400c727907e78ae3fe52acb8f0d02db4e6dd878e + languageName: node + linkType: hard + +"@livepeer/react@npm:^2.6.0": + version: 2.9.1 + resolution: "@livepeer/react@npm:2.9.1" + dependencies: + "@livepeer/core-react": ^1.9.1 + "@radix-ui/react-dialog": ^1.0.4 + "@radix-ui/react-popover": ^1.0.6 + "@radix-ui/react-select": ^1.2.2 + "@stitches/react": ^1.2.8 + core-js: ^3.31.1 + livepeer: 2.9.1 + zustand: ^4.3.9 + peerDependencies: + react: ">=17.0.0" + react-dom: ">=17.0.0" + peerDependenciesMeta: + react-dom: + optional: true + checksum: 2c1b54a3bc5a92fe5d2346a14020797e69c2fe6c8e01ccbccb2fa8442b7c4b97cc0be5994500c5b70d06bf4dd6a2e57b24ffbd273e04262962d0afe0c562dd4f + languageName: node + linkType: hard + +"@ljharb/resumer@npm:^0.0.1": + version: 0.0.1 + resolution: "@ljharb/resumer@npm:0.0.1" + dependencies: + "@ljharb/through": ^2.3.9 + checksum: 1cff0a485cb857933d2921cb05a349f8fe894fa2bb6b31a347010ecccc4a2b369e43ebe5383a32a60ee6c9572d2c83fcab383eb01727e1507bf29c59f312dae6 + languageName: node + linkType: hard + +"@ljharb/through@npm:^2.3.11, @ljharb/through@npm:^2.3.9": + version: 2.3.11 + resolution: "@ljharb/through@npm:2.3.11" + dependencies: + call-bind: ^1.0.2 + checksum: 10502726028b8a4e0b270a2213e546821c04ed8d7fe411009a8e47497e4ae99c57eeb9ff3d13620ebdefd7c856b16fc873f27c433cad60465dc132fb4b997233 + languageName: node + linkType: hard + +"@metamask/eth-sig-util@npm:^5.0.2": + version: 5.1.0 + resolution: "@metamask/eth-sig-util@npm:5.1.0" + dependencies: + "@ethereumjs/util": ^8.0.6 + bn.js: ^4.12.0 + ethereum-cryptography: ^2.0.0 + ethjs-util: ^0.1.6 + tweetnacl: ^1.0.3 + tweetnacl-util: ^0.15.1 + checksum: c639e3bf91625faeb0230a6314f0b2d05e8f5e2989542d3e0eed1d21b7b286e1860f68629870fd7e568c1a599b3993c4210403fb4c84a625fb1e75ef676eab4f + languageName: node + linkType: hard + +"@metamask/safe-event-emitter@npm:2.0.0, @metamask/safe-event-emitter@npm:^2.0.0": + version: 2.0.0 + resolution: "@metamask/safe-event-emitter@npm:2.0.0" + checksum: 8b717ac5d53df0027c05509f03d0534700b5898dd1c3a53fb2dc4c0499ca5971b14aae67f522d09eb9f509e77f50afa95fdb3eda1afbff8b071c18a3d2905e93 + languageName: node + linkType: hard + +"@metamask/utils@npm:^3.0.1": + version: 3.6.0 + resolution: "@metamask/utils@npm:3.6.0" + dependencies: + "@types/debug": ^4.1.7 + debug: ^4.3.4 + semver: ^7.3.8 + superstruct: ^1.0.3 + checksum: 1ebc6677bb017e4d09d4af143621fe27194d8ed815234cfd76469c3c734dc1db2ea7b577c01a2096c21c04d8c9c4d721d3035b5353fe2ded3b4737f326755e43 + languageName: node + linkType: hard + +"@motionone/animation@npm:^10.15.1, @motionone/animation@npm:^10.16.3": + version: 10.16.3 + resolution: "@motionone/animation@npm:10.16.3" + dependencies: + "@motionone/easing": ^10.16.3 + "@motionone/types": ^10.16.3 + "@motionone/utils": ^10.16.3 + tslib: ^2.3.1 + checksum: 797cacea335e6f892af27579eff51450dcf18c5bbc5c0ca44a000929b21857f4afb974ffb411c4935bfbd01ef2ddb3ef542ba3313ae66e1e5392b5d314df6ad3 + languageName: node + linkType: hard + +"@motionone/dom@npm:^10.16.2, @motionone/dom@npm:^10.16.4": + version: 10.16.4 + resolution: "@motionone/dom@npm:10.16.4" + dependencies: + "@motionone/animation": ^10.16.3 + "@motionone/generators": ^10.16.4 + "@motionone/types": ^10.16.3 + "@motionone/utils": ^10.16.3 + hey-listen: ^1.0.8 + tslib: ^2.3.1 + checksum: 8307864351d1c0108492c2f414ab564f59f4bb797180382948696df44e7389339560e642c7d0fbdbe63c1755515b2ace8264b5f8827ba2590636e11d474dd226 + languageName: node + linkType: hard + +"@motionone/easing@npm:^10.16.3": + version: 10.16.3 + resolution: "@motionone/easing@npm:10.16.3" + dependencies: + "@motionone/utils": ^10.16.3 + tslib: ^2.3.1 + checksum: 03e2460cdd35ee4967a86ce28ffbaaaca589263f659f652801cf6bd667baba9b3d5ce6d134df6b64413b60b34dd21d7c38b0cd8a4c3e1ed789789cdb971905b2 + languageName: node + linkType: hard + +"@motionone/generators@npm:^10.16.4": + version: 10.16.4 + resolution: "@motionone/generators@npm:10.16.4" + dependencies: + "@motionone/types": ^10.16.3 + "@motionone/utils": ^10.16.3 + tslib: ^2.3.1 + checksum: 185091c5cfbe67c38e84bf3920d1b5862e5d7eb624136494a7e4779b2f9d06855ebe3e633d95dcc5a1735d92d59d1ae28a0724c2f9d8bddd60fc9bc3603fab48 + languageName: node + linkType: hard + +"@motionone/svelte@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/svelte@npm:10.16.4" + dependencies: + "@motionone/dom": ^10.16.4 + tslib: ^2.3.1 + checksum: 699e20955ea832bcf32d410ae9f88edf61a5c2cf2b56527119ab1df6fecbf2632b62d541743d0f6d278fd700a15a20b9eb7c8aa5266e7aed5e113b8f8f75b863 + languageName: node + linkType: hard + +"@motionone/types@npm:^10.15.1, @motionone/types@npm:^10.16.3": + version: 10.16.3 + resolution: "@motionone/types@npm:10.16.3" + checksum: ff38982f5aff2c0abbc3051c843d186d6f954c971e97dd6fced97a4ef50ee04f6e49607541ebb80e14dd143cf63553c388392110e270d04eca23f6b529f7f321 + languageName: node + linkType: hard + +"@motionone/utils@npm:^10.15.1, @motionone/utils@npm:^10.16.3": + version: 10.16.3 + resolution: "@motionone/utils@npm:10.16.3" + dependencies: + "@motionone/types": ^10.16.3 + hey-listen: ^1.0.8 + tslib: ^2.3.1 + checksum: d06025911c54c2217c98026cd38d4d681268a2b9b2830ac7342820881ba6be09721dd03626f52547749ead0543d5e2f2a69c9270ffdeaabc0949f7afb3233817 + languageName: node + linkType: hard + +"@motionone/vue@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/vue@npm:10.16.4" + dependencies: + "@motionone/dom": ^10.16.4 + tslib: ^2.3.1 + checksum: 746e38d0ee831829bfac2ce471f3d98a9e37bd8cbdf2706fa3becce69c17f51180a1ee47582d97758d68aafdfc9a187ab47ff216c77254ac994287dabcf266c1 + languageName: node + linkType: hard + +"@mui/base@npm:5.0.0-beta.19": + version: 5.0.0-beta.19 + resolution: "@mui/base@npm:5.0.0-beta.19" + dependencies: + "@babel/runtime": ^7.23.1 + "@floating-ui/react-dom": ^2.0.2 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 + "@popperjs/core": ^2.11.8 + clsx: ^2.0.0 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7503d5609ba242e270cbcaea69f6c7d4935763a34a8ce8de2695078eae12ffcc1d7a57b5d735200de08f2314b2482aa7279631ffd92af240af24f6c31b633d8f + languageName: node + linkType: hard + +"@mui/core-downloads-tracker@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/core-downloads-tracker@npm:5.14.13" + checksum: 3094f8c289d53eb2189ce3f9e4c71e735f91cfefeadda4cf37b0f3c3de47d9261fdbd49485f74267e2fe93d8c0cb289d38e9c802a404489017e9f1cee9e56488 + languageName: node + linkType: hard + +"@mui/icons-material@npm:^5.14.13, @mui/icons-material@npm:^5.8.4": + version: 5.14.13 + resolution: "@mui/icons-material@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + peerDependencies: + "@mui/material": ^5.0.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: a25db309d02654d1f2d51887986e11b26fc7aea864a398fdc55ca2f4ffd80bbc7402e7686f6a0aeab04a440993e0733aa52f752db50e083dae03e04c558f7bfd + languageName: node + linkType: hard + +"@mui/lab@npm:^5.0.0-alpha.66": + version: 5.0.0-alpha.148 + resolution: "@mui/lab@npm:5.0.0-alpha.148" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/base": 5.0.0-beta.19 + "@mui/system": ^5.14.13 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 + "@mui/x-tree-view": 6.0.0-alpha.1 + clsx: ^2.0.0 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@mui/material": ^5.0.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 4a6c03295e2cc502d687fc5b59e50ab16848724362287416c2f993316b7398ab7c81b9cf4c49582d08ce78e3d99d8ec79a1f50856a39982886852f28b9d81e2a + languageName: node + linkType: hard + +"@mui/material@npm:^5.14.13, @mui/material@npm:^5.3.1": + version: 5.14.13 + resolution: "@mui/material@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/base": 5.0.0-beta.19 + "@mui/core-downloads-tracker": ^5.14.13 + "@mui/system": ^5.14.13 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 + "@types/react-transition-group": ^4.4.7 + clsx: ^2.0.0 + csstype: ^3.1.2 + prop-types: ^15.8.1 + react-is: ^18.2.0 + react-transition-group: ^4.4.5 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 07d73cb5f770743e080494684fd087770893232415c681a25bff2e791414b702d76d02100996a850e89ced81f986c1dc378cc6fb35fcd0724d19b3b0a4a34bed + languageName: node + linkType: hard + +"@mui/private-theming@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/private-theming@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/utils": ^5.14.13 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: fb2f3644c332a454897f83b98b6fda7344ce30f9382715194442b7d954fdff4e0b96ef017a631259b2f0e44706737eecda7c5306d4833bf5bd834d59b059a6f9 + languageName: node + linkType: hard + +"@mui/styled-engine@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/styled-engine@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + "@emotion/cache": ^11.11.0 + csstype: ^3.1.2 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/styled": ^11.3.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + checksum: b927fffbfb3a2c8d09f10b3770da610c94826312c2aa3e17791bd0355ef64056a842ede32f9d22225b952e3055aa2364c06f17620ae5203a0d4bb782ec90388f + languageName: node + linkType: hard + +"@mui/system@npm:^5.14.13": + version: 5.14.13 + resolution: "@mui/system@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + "@mui/private-theming": ^5.14.13 + "@mui/styled-engine": ^5.14.13 + "@mui/types": ^7.2.6 + "@mui/utils": ^5.14.13 + clsx: ^2.0.0 + csstype: ^3.1.2 + prop-types: ^15.8.1 + peerDependencies: + "@emotion/react": ^11.5.0 + "@emotion/styled": ^11.3.0 + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + "@types/react": + optional: true + checksum: 1dfcd19737792d36e87b83623f1bf836f1e1282faf44646f9788cec9e5fb6502e6082872ab839dcebd0ae3d72c5771aa12bad9d3ee4b7e039582970acda13a8d + languageName: node + linkType: hard + +"@mui/types@npm:^7.2.6": + version: 7.2.6 + resolution: "@mui/types@npm:7.2.6" + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: eb92f9c2fa5df048bcf182a611131bee2799ce1de64acfca12855f349d0b69f5f92c953b7e6c4e341e1df48f0e86f1329ed0251be4835ed194f53342827bd576 + languageName: node + linkType: hard + +"@mui/utils@npm:^5.14.13, @mui/utils@npm:^5.14.3": + version: 5.14.13 + resolution: "@mui/utils@npm:5.14.13" + dependencies: + "@babel/runtime": ^7.23.1 + "@types/prop-types": ^15.7.7 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 5f04382d7761d35c5f53bcc0ce91c29aba0b3c0afb731f01d2ff078b05afe8098dee412538d846ab3a4b00eec934d46d730f9ef2ef493c3db885e2672480b6f0 + languageName: node + linkType: hard + +"@mui/x-tree-view@npm:6.0.0-alpha.1": + version: 6.0.0-alpha.1 + resolution: "@mui/x-tree-view@npm:6.0.0-alpha.1" + dependencies: + "@babel/runtime": ^7.22.6 + "@mui/utils": ^5.14.3 + "@types/react-transition-group": ^4.4.6 + clsx: ^2.0.0 + prop-types: ^15.8.1 + react-transition-group: ^4.4.5 + peerDependencies: + "@emotion/react": ^11.9.0 + "@emotion/styled": ^11.8.1 + "@mui/base": ^5.0.0-alpha.87 + "@mui/material": ^5.8.6 + "@mui/system": ^5.8.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + checksum: 87e659401c81ba4b1ed7eccb9e3167b4d22f27630c26bb436ff6eb4f79aa2fc0f3c50afda4625c9df898bcd1710c4de47813ee8f5bba51d0d9c85fb678a53658 + languageName: node + linkType: hard + +"@multiformats/murmur3@npm:^1.0.3": + version: 1.1.3 + resolution: "@multiformats/murmur3@npm:1.1.3" + dependencies: + multiformats: ^9.5.4 + murmurhash3js-revisited: ^3.0.0 + checksum: e3b07547da4a75348e2e103c6750db33b0caecd33b30751496cc2ca89cb7c654408c17300ca8f9fea79792f900f577b25aba49852feffe52894c79c177e40152 + languageName: node + linkType: hard + +"@next/env@npm:12.3.4": + version: 12.3.4 + resolution: "@next/env@npm:12.3.4" + checksum: daa3fc11efd1344c503eab41311a0e503ba7fd08607eeb3dc571036a6211eb37959cc4ed48b71dcc411cc214e7623ffd02411080aad3e09dc6a1192d5b256e60 + languageName: node + linkType: hard + +"@next/eslint-plugin-next@npm:12.3.4": + version: 12.3.4 + resolution: "@next/eslint-plugin-next@npm:12.3.4" + dependencies: + glob: 7.1.7 + checksum: e4ae97062f3efe8f70904cf0da296ab501a2924423273352d01b18d8ffff1eb2e9a65c47dd6f9cfa0d696eada272486a3f519b2786918d0a9ab735b93f5ce4b3 + languageName: node + linkType: hard + +"@next/swc-android-arm-eabi@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-android-arm-eabi@npm:12.3.4" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@next/swc-android-arm64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-android-arm64@npm:12.3.4" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@next/swc-darwin-arm64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-darwin-arm64@npm:12.3.4" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@next/swc-darwin-x64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-darwin-x64@npm:12.3.4" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@next/swc-freebsd-x64@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-freebsd-x64@npm:12.3.4" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@next/swc-linux-arm-gnueabihf@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm-gnueabihf@npm:12.3.4" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@next/swc-linux-arm64-gnu@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm64-gnu@npm:12.3.4" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@next/swc-linux-arm64-musl@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-arm64-musl@npm:12.3.4" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@next/swc-linux-x64-gnu@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-x64-gnu@npm:12.3.4" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@next/swc-linux-x64-musl@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-linux-x64-musl@npm:12.3.4" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@next/swc-win32-arm64-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-arm64-msvc@npm:12.3.4" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@next/swc-win32-ia32-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-ia32-msvc@npm:12.3.4" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@next/swc-win32-x64-msvc@npm:12.3.4": + version: 12.3.4 + resolution: "@next/swc-win32-x64-msvc@npm:12.3.4" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@noble/curves@npm:1.1.0, @noble/curves@npm:~1.1.0": + version: 1.1.0 + resolution: "@noble/curves@npm:1.1.0" + dependencies: + "@noble/hashes": 1.3.1 + checksum: 2658cdd3f84f71079b4e3516c47559d22cf4b55c23ac8ee9d2b1f8e5b72916d9689e59820e0f9d9cb4a46a8423af5b56dc6bb7782405c88be06a015180508db5 + languageName: node + linkType: hard + +"@noble/curves@npm:1.2.0, @noble/curves@npm:^1.2.0, @noble/curves@npm:~1.2.0": + version: 1.2.0 + resolution: "@noble/curves@npm:1.2.0" + dependencies: + "@noble/hashes": 1.3.2 + checksum: bb798d7a66d8e43789e93bc3c2ddff91a1e19fdb79a99b86cd98f1e5eff0ee2024a2672902c2576ef3577b6f282f3b5c778bebd55761ddbb30e36bf275e83dd0 + languageName: node + linkType: hard + +"@noble/ed25519@npm:^1.5.1": + version: 1.7.3 + resolution: "@noble/ed25519@npm:1.7.3" + checksum: 45169927d51de513e47bbeebff3a603433c4ac7579e1b8c5034c380a0afedbe85e6959be3d69584a7a5ed6828d638f8f28879003b9bb2fb5f22d8aa2d88fd5fe + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.1": + version: 1.3.1 + resolution: "@noble/hashes@npm:1.3.1" + checksum: 7fdefc0f7a0c1ec27acc6ff88841793e3f93ec4ce6b8a6a12bfc0dd70ae6b7c4c82fe305fdfeda1735d5ad4a9eebe761e6693b3d355689c559e91242f4bc95b1 + languageName: node + linkType: hard + +"@noble/hashes@npm:1.3.2, @noble/hashes@npm:^1.3.1, @noble/hashes@npm:~1.3.0, @noble/hashes@npm:~1.3.1, @noble/hashes@npm:~1.3.2": + version: 1.3.2 + resolution: "@noble/hashes@npm:1.3.2" + checksum: fe23536b436539d13f90e4b9be843cc63b1b17666a07634a2b1259dded6f490be3d050249e6af98076ea8f2ea0d56f578773c2197f2aa0eeaa5fba5bc18ba474 + languageName: node + linkType: hard + +"@noble/secp256k1@npm:^1.3.0, @noble/secp256k1@npm:^1.5.2, @noble/secp256k1@npm:^1.7.1": + version: 1.7.1 + resolution: "@noble/secp256k1@npm:1.7.1" + checksum: d2301f1f7690368d8409a3152450458f27e54df47e3f917292de3de82c298770890c2de7c967d237eff9c95b70af485389a9695f73eb05a43e2bd562d18b18cb + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": 2.0.5 + run-parallel: ^1.1.9 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": 2.1.5 + fastq: ^1.6.0 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + languageName: node + linkType: hard + +"@npmcli/config@npm:^6.0.0": + version: 6.4.0 + resolution: "@npmcli/config@npm:6.4.0" + dependencies: + "@npmcli/map-workspaces": ^3.0.2 + ci-info: ^3.8.0 + ini: ^4.1.0 + nopt: ^7.0.0 + proc-log: ^3.0.0 + read-package-json-fast: ^3.0.2 + semver: ^7.3.5 + walk-up-path: ^3.0.1 + checksum: c17c24b6bba18025f1d061c06a30eb80204568ae56600c21a47683a63280914062635d0e219362675ddab61cbc19bd07da05d30b9b83130f7674e773816e8dd6 + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^3.0.2": + version: 3.0.4 + resolution: "@npmcli/map-workspaces@npm:3.0.4" + dependencies: + "@npmcli/name-from-folder": ^2.0.0 + glob: ^10.2.2 + minimatch: ^9.0.0 + read-package-json-fast: ^3.0.0 + checksum: 99607dbc502b16d0ce7a47a81ccc496b3f5ed10df4e61e61a505929de12c356092996044174ae0cfd6d8cc177ef3b597eef4987b674fc0c5a306d3a8cc1fe91a + languageName: node + linkType: hard + +"@npmcli/name-from-folder@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/name-from-folder@npm:2.0.0" + checksum: fb3ef891aa57315fb6171866847f298577c8bda98a028e93e458048477133e142b4eb45ce9f3b80454f7c257612cb01754ee782d608507698dd712164436f5bd + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + +"@pkgr/utils@npm:^2.3.1": + version: 2.4.2 + resolution: "@pkgr/utils@npm:2.4.2" + dependencies: + cross-spawn: ^7.0.3 + fast-glob: ^3.3.0 + is-glob: ^4.0.3 + open: ^9.1.0 + picocolors: ^1.0.0 + tslib: ^2.6.0 + checksum: 24e04c121269317d259614cd32beea3af38277151c4002df5883c4be920b8e3490bb897748e844f9d46bf68230f86dabd4e8f093773130e7e60529a769a132fc + languageName: node + linkType: hard + +"@popperjs/core@npm:^2.11.8": + version: 2.11.8 + resolution: "@popperjs/core@npm:2.11.8" + checksum: e5c69fdebf52a4012f6a1f14817ca8e9599cb1be73dd1387e1785e2ed5e5f0862ff817f420a87c7fc532add1f88a12e25aeb010ffcbdc98eace3d55ce2139cf0 + languageName: node + linkType: hard + +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 011fe7ef0826b0fd1a95935a033a3c0fd08483903e1aa8f8b4e0704e3233406abb9ee25350ec0c20bbecb2aad8da0dcea58b392bbd77d6690736f02c143865d2 + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 67173ac34de1e242c55da52c2f5bdc65505d82453893f9b51dc74af9fe4c065cf4a657a4538e91b0d4a1a1e0a0642215e31894c31650ff6e3831471061e1ee9e + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 59240c850b1d3d0b56d8f8098dd04787dcaec5c5bd8de186fa548de86b86076e1c50e80144b90335e705a044edf5bc8b0998548474c2a10a98c7e004a1547e4b + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 0369163a3d226851682f855f81413cbf166cd98f131edb94a0f67f79e75342d86e89df9d7a1df08ac28be2bc77e0a7f0200526bb6c2a407abbfee1f0262d5fd7 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": ^1.1.1 + "@protobufjs/inquire": ^1.1.0 + checksum: 3fce7e09eb3f1171dd55a192066450f65324fd5f7cc01a431df01bb00d0a895e6bfb5b0c5561ce157ee1d886349c90703d10a4e11a1a256418ff591b969b3477 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 5781e1241270b8bd1591d324ca9e3a3128d2f768077a446187a049e36505e91bc4156ed5ac3159c3ce3d2ba3743dbc757b051b2d723eea9cd367bfd54ab29b2f + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: ca06f02eaf65ca36fb7498fc3492b7fc087bfcc85c702bac5b86fad34b692bdce4990e0ef444c1e2aea8c034227bd1f0484be02810d5d7e931c55445555646f4 + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 856eeb532b16a7aac071cacde5c5620df800db4c80cee6dbc56380524736205aae21e5ae47739114bf669ab5e8ba0e767a282ad894f3b5e124197cb9224445ee + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: d6a34fbbd24f729e2a10ee915b74e1d77d52214de626b921b2d77288bd8f2386808da2315080f2905761527cceffe7ec34c7647bd21a5ae41a25e8212ff79451 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: f9bf3163d13aaa3b6f5e6fbf37a116e094ea021c0e1f2a7ccd0e12a29e2ce08dafba4e8b36e13f8ed7397e1591610ce880ed1289af4d66cf4ace8a36a9557278 + languageName: node + linkType: hard + +"@pushprotocol/restapi@npm:^1.4.15": + version: 1.4.24 + resolution: "@pushprotocol/restapi@npm:1.4.24" + dependencies: + "@ambire/signature-validator": ^1.3.1 + "@metamask/eth-sig-util": ^5.0.2 + "@pushprotocol/socket": ^0.5.2 + axios: ^0.27.2 + buffer: ^6.0.3 + crypto-js: ^4.1.1 + immer: ^10.0.2 + joi: ^17.9.2 + livepeer: ^2.5.8 + openpgp: ^5.5.0 + simple-peer: ^9.11.1 + socket.io-client: ^4.5.2 + tslib: ^2.3.0 + unique-names-generator: ^4.7.1 + uuid: ^9.0.0 + video-stream-merger: ^4.0.1 + viem: ^1.3.0 + peerDependencies: + ethers: ^5.6.8 + checksum: 79921942883b87e90f363763a1a0e7e5dd51421802d21511cb04a5113e901eba2c7afe32793d233b00a84a9694908a1dbe8c3875c2dfb201b647e704844c4f42 + languageName: node + linkType: hard + +"@pushprotocol/socket@npm:^0.5.0, @pushprotocol/socket@npm:^0.5.1, @pushprotocol/socket@npm:^0.5.2": + version: 0.5.2 + resolution: "@pushprotocol/socket@npm:0.5.2" + dependencies: + socket.io-client: ^4.5.2 + tslib: ^2.3.0 + peerDependencies: + ethers: ^5.6.8 + checksum: 14a438269eae87979e10377e5b8a38953e190593648ce64f148def553b66467cf52ec29ce2b70956342c23f42b67ae179f54a1aab6f22d1495a3806ba0146bbc + languageName: node + linkType: hard + +"@pushprotocol/uiweb@npm:^1.1.13": + version: 1.1.14 + resolution: "@pushprotocol/uiweb@npm:1.1.14" + dependencies: + "@livepeer/react": ^2.6.0 + "@pushprotocol/socket": ^0.5.0 + "@unstoppabledomains/resolution": ^8.5.0 + "@web3-react/injected-connector": ^6.0.7 + date-fns: ^2.28.0 + emoji-picker-react: ^4.4.9 + font-awesome: ^4.7.0 + gif-picker-react: ^1.1.0 + html-react-parser: ^1.4.13 + moment: ^2.29.4 + react-icons: ^4.10.1 + react-toastify: ^9.1.3 + react-twitter-embed: ^4.0.4 + peerDependencies: + "@pushprotocol/restapi": ^1.2.15 + "@pushprotocol/socket": ^0.5.0 + ethers: ^5.7.1 + react: ">=16.8.0" + styled-components: ^5.3.5 + checksum: c06f684851892d3c71e4c8f38210a4b04e8e1f039d82a2bda728f3cc1414d059989c6ef91a5f6bf07e945ad61fd84a630c6e2ac72cba9493f138387396eda421 + languageName: node + linkType: hard + +"@radix-ui/number@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/number@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + checksum: 621ea8b7d4195d1a65a9c0aee918e8335e7f198088eec91577512c89c2ba3a3bab4a767cfb872a2b9c3092a78ff41cad9a924845a939f6bb87fe9356241ea0ea + languageName: node + linkType: hard + +"@radix-ui/primitive@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/primitive@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + checksum: 2b93e161d3fdabe9a64919def7fa3ceaecf2848341e9211520c401181c9eaebb8451c630b066fad2256e5c639c95edc41de0ba59c40eff37e799918d019822d1 + languageName: node + linkType: hard + +"@radix-ui/react-arrow@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-arrow@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-primitive": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 8cca086f0dbb33360e3c0142adf72f99fc96352d7086d6c2356dbb2ea5944cfb720a87d526fc48087741c602cd8162ca02b0af5e6fdf5f56d20fddb44db8b4c3 + languageName: node + linkType: hard + +"@radix-ui/react-collection@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-collection@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-slot": 1.0.2 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: acfbc9b0b2c553d343c22f02c9f098bc5cfa99e6e48df91c0d671855013f8b877ade9c657b7420a7aa523b5aceadea32a60dd72c23b1291f415684fb45d00cff + languageName: node + linkType: hard + +"@radix-ui/react-compose-refs@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-compose-refs@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 2b9a613b6db5bff8865588b6bf4065f73021b3d16c0a90b2d4c23deceeb63612f1f15de188227ebdc5f88222cab031be617a9dd025874c0487b303be3e5cc2a8 + languageName: node + linkType: hard + +"@radix-ui/react-context@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-context@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 60e9b81d364f40c91a6213ec953f7c64fcd9d75721205a494a5815b3e5ae0719193429b62ee6c7002cd6aaf70f8c0e2f08bdbaba9ffcc233044d32b56d2127d1 + languageName: node + linkType: hard + +"@radix-ui/react-dialog@npm:^1.0.4": + version: 1.0.5 + resolution: "@radix-ui/react-dialog@npm:1.0.5" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-dismissable-layer": 1.0.5 + "@radix-ui/react-focus-guards": 1.0.1 + "@radix-ui/react-focus-scope": 1.0.4 + "@radix-ui/react-id": 1.0.1 + "@radix-ui/react-portal": 1.0.4 + "@radix-ui/react-presence": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-slot": 1.0.2 + "@radix-ui/react-use-controllable-state": 1.0.1 + aria-hidden: ^1.1.1 + react-remove-scroll: 2.5.5 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 3d11ca31afb794a6dd286005ab7894cb0ce7bc2de5481de98900470b11d495256401306763de030f5e35aa545ff90d34632ffd54a1b29bf55afba813be4bb84a + languageName: node + linkType: hard + +"@radix-ui/react-direction@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-direction@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 5336a8b0d4f1cde585d5c2b4448af7b3d948bb63a1aadb37c77771b0e5902dc6266e409cf35fd0edaca7f33e26424be19e64fb8f9d7f7be2d6f1714ea2764210 + languageName: node + linkType: hard + +"@radix-ui/react-dismissable-layer@npm:1.0.4": + version: 1.0.4 + resolution: "@radix-ui/react-dismissable-layer@npm:1.0.4" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + "@radix-ui/react-use-escape-keydown": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: ea86004ed56a10609dd84eef39dc1e57b400d687a35be41bb4aaa06dc7ad6dbd0a8da281e08c8c077fdbd523122e4d860cb7438a60c664f024f77c8b41299ec6 + languageName: node + linkType: hard + +"@radix-ui/react-dismissable-layer@npm:1.0.5": + version: 1.0.5 + resolution: "@radix-ui/react-dismissable-layer@npm:1.0.5" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + "@radix-ui/react-use-escape-keydown": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: e73cf4bd3763f4d55b1bea7486a9700384d7d94dc00b1d5a75e222b2f1e4f32bc667a206ca4ed3baaaf7424dce7a239afd0ba59a6f0d89c3462c4e6e8d029a04 + languageName: node + linkType: hard + +"@radix-ui/react-focus-guards@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-focus-guards@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 1f8ca8f83b884b3612788d0742f3f054e327856d90a39841a47897dbed95e114ee512362ae314177de226d05310047cabbf66b686ae86ad1b65b6b295be24ef7 + languageName: node + linkType: hard + +"@radix-ui/react-focus-scope@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-focus-scope@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: e5b1a089071fbe77aca11124a4ad9623fc2bcaf4c019759b0cd044bf0878ecc924131ee09c6a22d38a3f094684ef68ed18fa65c8d891918412e0afc685a464e0 + languageName: node + linkType: hard + +"@radix-ui/react-focus-scope@npm:1.0.4": + version: 1.0.4 + resolution: "@radix-ui/react-focus-scope@npm:1.0.4" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 3481db1a641513a572734f0bcb0e47fefeba7bccd6ec8dde19f520719c783ef0b05a55ef0d5292078ed051cc5eda46b698d5d768da02e26e836022f46b376fd1 + languageName: node + linkType: hard + +"@radix-ui/react-id@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-id@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-use-layout-effect": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 446a453d799cc790dd2a1583ff8328da88271bff64530b5a17c102fa7fb35eece3cf8985359d416f65e330cd81aa7b8fe984ea125fc4f4eaf4b3801d698e49fe + languageName: node + linkType: hard + +"@radix-ui/react-popover@npm:^1.0.6": + version: 1.0.7 + resolution: "@radix-ui/react-popover@npm:1.0.7" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-dismissable-layer": 1.0.5 + "@radix-ui/react-focus-guards": 1.0.1 + "@radix-ui/react-focus-scope": 1.0.4 + "@radix-ui/react-id": 1.0.1 + "@radix-ui/react-popper": 1.1.3 + "@radix-ui/react-portal": 1.0.4 + "@radix-ui/react-presence": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-slot": 1.0.2 + "@radix-ui/react-use-controllable-state": 1.0.1 + aria-hidden: ^1.1.1 + react-remove-scroll: 2.5.5 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 3ec15c0923ea457f586aa34f77e17fabffa02dffeab622951560ec21c38df2f43718ff088d24bf9fd1d9cd0db62436fc19cae5b122d90f72de4945a1f508dc59 + languageName: node + linkType: hard + +"@radix-ui/react-popper@npm:1.1.2": + version: 1.1.2 + resolution: "@radix-ui/react-popper@npm:1.1.2" + dependencies: + "@babel/runtime": ^7.13.10 + "@floating-ui/react-dom": ^2.0.0 + "@radix-ui/react-arrow": 1.0.3 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + "@radix-ui/react-use-layout-effect": 1.0.1 + "@radix-ui/react-use-rect": 1.0.1 + "@radix-ui/react-use-size": 1.0.1 + "@radix-ui/rect": 1.0.1 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 4929daa0d1cccada3cff50de0e00c0d186ffea97a5f28545c77fa85ff9bc5c105a54dddac400c2e2dcac631f0f7ea88e59f2e5ad0f80bb2cb7b62cc7cd30400f + languageName: node + linkType: hard + +"@radix-ui/react-popper@npm:1.1.3": + version: 1.1.3 + resolution: "@radix-ui/react-popper@npm:1.1.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@floating-ui/react-dom": ^2.0.0 + "@radix-ui/react-arrow": 1.0.3 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-use-callback-ref": 1.0.1 + "@radix-ui/react-use-layout-effect": 1.0.1 + "@radix-ui/react-use-rect": 1.0.1 + "@radix-ui/react-use-size": 1.0.1 + "@radix-ui/rect": 1.0.1 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: b18a15958623f9222b6ed3e24b9fbcc2ba67b8df5a5272412f261de1592b3f05002af1c8b94c065830c3c74267ce00cf6c1d70d4d507ec92ba639501f98aa348 + languageName: node + linkType: hard + +"@radix-ui/react-portal@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-portal@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-primitive": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: d352bcd6ad65eb43c9e0d72d0755c2aae85e03fb287770866262be3a2d5302b2885aee3cd99f2bbf62ecd14fcb1460703f1dcdc40351f77ad887b931c6f0012a + languageName: node + linkType: hard + +"@radix-ui/react-portal@npm:1.0.4": + version: 1.0.4 + resolution: "@radix-ui/react-portal@npm:1.0.4" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-primitive": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: c4cf35e2f26a89703189d0eef3ceeeb706ae0832e98e558730a5e929ca7c72c7cb510413a24eca94c7732f8d659a1e81942bec7b90540cb73ce9e4885d040b64 + languageName: node + linkType: hard + +"@radix-ui/react-presence@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-presence@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-use-layout-effect": 1.0.1 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: ed2ff9faf9e4257a4065034d3771459e5a91c2d840b2fcec94661761704dbcb65bcdd927d28177a2a129b3dab5664eb90a9b88309afe0257a9f8ba99338c0d95 + languageName: node + linkType: hard + +"@radix-ui/react-primitive@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-primitive@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-slot": 1.0.2 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 9402bc22923c8e5c479051974a721c301535c36521c0237b83e5fa213d013174e77f3ad7905e6d60ef07e14f88ec7f4ea69891dc7a2b39047f8d3640e8f8d713 + languageName: node + linkType: hard + +"@radix-ui/react-select@npm:^1.2.2": + version: 1.2.2 + resolution: "@radix-ui/react-select@npm:1.2.2" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/number": 1.0.1 + "@radix-ui/primitive": 1.0.1 + "@radix-ui/react-collection": 1.0.3 + "@radix-ui/react-compose-refs": 1.0.1 + "@radix-ui/react-context": 1.0.1 + "@radix-ui/react-direction": 1.0.1 + "@radix-ui/react-dismissable-layer": 1.0.4 + "@radix-ui/react-focus-guards": 1.0.1 + "@radix-ui/react-focus-scope": 1.0.3 + "@radix-ui/react-id": 1.0.1 + "@radix-ui/react-popper": 1.1.2 + "@radix-ui/react-portal": 1.0.3 + "@radix-ui/react-primitive": 1.0.3 + "@radix-ui/react-slot": 1.0.2 + "@radix-ui/react-use-callback-ref": 1.0.1 + "@radix-ui/react-use-controllable-state": 1.0.1 + "@radix-ui/react-use-layout-effect": 1.0.1 + "@radix-ui/react-use-previous": 1.0.1 + "@radix-ui/react-visually-hidden": 1.0.3 + aria-hidden: ^1.1.1 + react-remove-scroll: 2.5.5 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: af7b63cc9e2c6006ec08163392d244941e9e03534e7add1b7c5a86059d0eb8a0398d4f3e80d43ff22126874a02b985e44f1722d1de9218922f7aa653d09412e3 + languageName: node + linkType: hard + +"@radix-ui/react-slot@npm:1.0.2": + version: 1.0.2 + resolution: "@radix-ui/react-slot@npm:1.0.2" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-compose-refs": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: edf5edf435ff594bea7e198bf16d46caf81b6fb559493acad4fa8c308218896136acb16f9b7238c788fd13e94a904f2fd0b6d834e530e4cae94522cdb8f77ce9 + languageName: node + linkType: hard + +"@radix-ui/react-use-callback-ref@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-callback-ref@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: b9fd39911c3644bbda14a84e4fca080682bef84212b8d8931fcaa2d2814465de242c4cfd8d7afb3020646bead9c5e539d478cea0a7031bee8a8a3bb164f3bc4c + languageName: node + linkType: hard + +"@radix-ui/react-use-controllable-state@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-controllable-state@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-use-callback-ref": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: dee2be1937d293c3a492cb6d279fc11495a8f19dc595cdbfe24b434e917302f9ac91db24e8cc5af9a065f3f209c3423115b5442e65a5be9fd1e9091338972be9 + languageName: node + linkType: hard + +"@radix-ui/react-use-escape-keydown@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-use-escape-keydown@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-use-callback-ref": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: c6ed0d9ce780f67f924980eb305af1f6cce2a8acbaf043a58abe0aa3cc551d9aa76ccee14531df89bbee302ead7ecc7fce330886f82d4672c5eda52f357ef9b8 + languageName: node + linkType: hard + +"@radix-ui/react-use-layout-effect@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-layout-effect@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: bed9c7e8de243a5ec3b93bb6a5860950b0dba359b6680c84d57c7a655e123dec9b5891c5dfe81ab970652e7779fe2ad102a23177c7896dde95f7340817d47ae5 + languageName: node + linkType: hard + +"@radix-ui/react-use-previous@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-previous@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 66b4312e857c58b75f3bf62a2048ef090b79a159e9da06c19a468c93e62336969c33dbef60ff16969f00b20386cc25d138f6a353f1658b35baac0a6eff4761b9 + languageName: node + linkType: hard + +"@radix-ui/react-use-rect@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-rect@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/rect": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 433f07e61e04eb222349825bb05f3591fca131313a1d03709565d6226d8660bd1d0423635553f95ee4fcc25c8f2050972d848808d753c388e2a9ae191ebf17f3 + languageName: node + linkType: hard + +"@radix-ui/react-use-size@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/react-use-size@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-use-layout-effect": 1.0.1 + peerDependencies: + "@types/react": "*" + react: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 6cc150ad1e9fa85019c225c5a5d50a0af6cdc4653dad0c21b4b40cd2121f36ee076db326c43e6bc91a69766ccff5a84e917d27970176b592577deea3c85a3e26 + languageName: node + linkType: hard + +"@radix-ui/react-visually-hidden@npm:1.0.3": + version: 1.0.3 + resolution: "@radix-ui/react-visually-hidden@npm:1.0.3" + dependencies: + "@babel/runtime": ^7.13.10 + "@radix-ui/react-primitive": 1.0.3 + peerDependencies: + "@types/react": "*" + "@types/react-dom": "*" + react: ^16.8 || ^17.0 || ^18.0 + react-dom: ^16.8 || ^17.0 || ^18.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 2e9d0c8253f97e7d6ffb2e52a5cfd40ba719f813b39c3e2e42c496d54408abd09ef66b5aec4af9b8ab0553215e32452a5d0934597a49c51dd90dc39181ed0d57 + languageName: node + linkType: hard + +"@radix-ui/rect@npm:1.0.1": + version: 1.0.1 + resolution: "@radix-ui/rect@npm:1.0.1" + dependencies: + "@babel/runtime": ^7.13.10 + checksum: aeec13b234a946052512d05239067d2d63422f9ec70bf2fe7acfd6b9196693fc33fbaf43c2667c167f777d90a095c6604eb487e0bce79e230b6df0f6cacd6a55 + languageName: node + linkType: hard + +"@reduxjs/toolkit@npm:^1.6.2": + version: 1.9.7 + resolution: "@reduxjs/toolkit@npm:1.9.7" + dependencies: + immer: ^9.0.21 + redux: ^4.2.1 + redux-thunk: ^2.4.2 + reselect: ^4.1.8 + peerDependencies: + react: ^16.9.0 || ^17.0.0 || ^18 + react-redux: ^7.2.1 || ^8.0.2 + peerDependenciesMeta: + react: + optional: true + react-redux: + optional: true + checksum: ac25dec73a5d2df9fc7fbe98c14ccc73919e5ee1d6f251db0d2ec8f90273f92ef39c26716704bf56b5a40189f72d94b4526dc3a8c7ac3986f5daf44442bcc364 + languageName: node + linkType: hard + +"@rushstack/eslint-patch@npm:^1.1.3": + version: 1.5.1 + resolution: "@rushstack/eslint-patch@npm:1.5.1" + checksum: e4c25322312dbaa29e835a7ab4fbac53c8731dd0da65e46646e38945e296429e7fb91c2ef3da5af5d5938d44b0cde1d5290438ebb3dcb015e02b80b5e2530d24 + languageName: node + linkType: hard + +"@safe-global/safe-apps-provider@npm:^0.17.1": + version: 0.17.1 + resolution: "@safe-global/safe-apps-provider@npm:0.17.1" + dependencies: + "@safe-global/safe-apps-sdk": 8.0.0 + events: ^3.3.0 + checksum: 02f0415a4bb77b82e55f0055be045af715d9c0ea0fa7daa4e0604f40cc2189051d111b8ead67ddab0e99b1e423b444753c11d69bb213d51e459f706d2b430e34 + languageName: node + linkType: hard + +"@safe-global/safe-apps-sdk@npm:8.0.0": + version: 8.0.0 + resolution: "@safe-global/safe-apps-sdk@npm:8.0.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": ^3.5.3 + viem: ^1.0.0 + checksum: 07295c44afa4d85fbc9419b4baac56b4fb493816d4438d6956842261e0689fdcea639ab86b39ee693c456fddace17b6c556c77a637892634a57de96f6b00b0c3 + languageName: node + linkType: hard + +"@safe-global/safe-apps-sdk@npm:^8.0.0": + version: 8.1.0 + resolution: "@safe-global/safe-apps-sdk@npm:8.1.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": ^3.5.3 + viem: ^1.0.0 + checksum: e9d31ed6d9cd2cd9ed71ef5a0e1f6ecfca9f0c62acb9b86a0ddb1b65a609090f2297c4304591ac0518b266a1bcc88d1dad31b0d05e50c7732accccb65adab754 + languageName: node + linkType: hard + +"@safe-global/safe-gateway-typescript-sdk@npm:^3.5.3": + version: 3.12.0 + resolution: "@safe-global/safe-gateway-typescript-sdk@npm:3.12.0" + checksum: 4f563449d0af5a032037039e34d87f1c4a6a83d105871958df5aaf97d12b25bd7bce4c59108f1997e1e9cd087108c31e7f80bd2ba204690e9a766b6e475c21be + languageName: node + linkType: hard + +"@scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2": + version: 1.1.3 + resolution: "@scure/base@npm:1.1.3" + checksum: 1606ab8a4db898cb3a1ada16c15437c3bce4e25854fadc8eb03ae93cbbbac1ed90655af4b0be3da37e12056fef11c0374499f69b9e658c9e5b7b3e06353c630c + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.1": + version: 1.3.1 + resolution: "@scure/bip32@npm:1.3.1" + dependencies: + "@noble/curves": ~1.1.0 + "@noble/hashes": ~1.3.1 + "@scure/base": ~1.1.0 + checksum: 394d65f77a40651eba21a5096da0f4233c3b50d422864751d373fcf142eeedb94a1149f9ab1dbb078086dab2d0bc27e2b1afec8321bf22d4403c7df2fea5bfe2 + languageName: node + linkType: hard + +"@scure/bip32@npm:1.3.2": + version: 1.3.2 + resolution: "@scure/bip32@npm:1.3.2" + dependencies: + "@noble/curves": ~1.2.0 + "@noble/hashes": ~1.3.2 + "@scure/base": ~1.1.2 + checksum: c5ae84fae43490853693b481531132b89e056d45c945fc8b92b9d032577f753dfd79c5a7bbcbf0a7f035951006ff0311b6cf7a389e26c9ec6335e42b20c53157 + languageName: node + linkType: hard + +"@scure/bip39@npm:1.2.1": + version: 1.2.1 + resolution: "@scure/bip39@npm:1.2.1" + dependencies: + "@noble/hashes": ~1.3.0 + "@scure/base": ~1.1.0 + checksum: c5bd6f1328fdbeae2dcdd891825b1610225310e5e62a4942714db51066866e4f7bef242c7b06a1b9dcc8043a4a13412cf5c5df76d3b10aa9e36b82e9b6e3eeaa + languageName: node + linkType: hard + +"@sideway/address@npm:^4.1.3": + version: 4.1.4 + resolution: "@sideway/address@npm:4.1.4" + dependencies: + "@hapi/hoek": ^9.0.0 + checksum: b9fca2a93ac2c975ba12e0a6d97853832fb1f4fb02393015e012b47fa916a75ca95102d77214b2a29a2784740df2407951af8c5dde054824c65577fd293c4cdb + languageName: node + linkType: hard + +"@sideway/formula@npm:^3.0.1": + version: 3.0.1 + resolution: "@sideway/formula@npm:3.0.1" + checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a + languageName: node + linkType: hard + +"@sideway/pinpoint@npm:^2.0.0": + version: 2.0.0 + resolution: "@sideway/pinpoint@npm:2.0.0" + checksum: 0f4491e5897fcf5bf02c46f5c359c56a314e90ba243f42f0c100437935daa2488f20482f0f77186bd6bf43345095a95d8143ecf8b1f4d876a7bc0806aba9c3d2 + languageName: node + linkType: hard + +"@sinclair/typebox@npm:^0.27.8": + version: 0.27.8 + resolution: "@sinclair/typebox@npm:0.27.8" + checksum: 00bd7362a3439021aa1ea51b0e0d0a0e8ca1351a3d54c606b115fdcc49b51b16db6e5f43b4fe7a28c38688523e22a94d49dd31168868b655f0d4d50f032d07a1 + languageName: node + linkType: hard + +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.0 + resolution: "@sinonjs/commons@npm:3.0.0" + dependencies: + type-detect: 4.0.8 + checksum: b4b5b73d4df4560fb8c0c7b38c7ad4aeabedd362f3373859d804c988c725889cde33550e4bcc7cd316a30f5152a2d1d43db71b6d0c38f5feef71fd8d016763f8 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.3.0 + resolution: "@sinonjs/fake-timers@npm:10.3.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 614d30cb4d5201550c940945d44c9e0b6d64a888ff2cd5b357f95ad6721070d6b8839cd10e15b76bf5e14af0bcc1d8f9ec00d49a46318f1f669a4bec1d7f3148 + languageName: node + linkType: hard + +"@socket.io/component-emitter@npm:~3.1.0": + version: 3.1.0 + resolution: "@socket.io/component-emitter@npm:3.1.0" + checksum: db069d95425b419de1514dffe945cc439795f6a8ef5b9465715acf5b8b50798e2c91b8719cbf5434b3fe7de179d6cdcd503c277b7871cb3dd03febb69bdd50fa + languageName: node + linkType: hard + +"@solana/buffer-layout@npm:^4.0.0": + version: 4.0.1 + resolution: "@solana/buffer-layout@npm:4.0.1" + dependencies: + buffer: ~6.0.3 + checksum: bf846888e813187243d4008a7a9f58b49d16cbd995b9d7f1b72898aa510ed77b1ce5e8468e7b2fd26dd81e557a4e74a666e21fccb95f123c1f740d41138bbacd + languageName: node + linkType: hard + +"@solana/web3.js@npm:^1.70.1": + version: 1.87.1 + resolution: "@solana/web3.js@npm:1.87.1" + dependencies: + "@babel/runtime": ^7.22.6 + "@noble/curves": ^1.2.0 + "@noble/hashes": ^1.3.1 + "@solana/buffer-layout": ^4.0.0 + agentkeepalive: ^4.3.0 + bigint-buffer: ^1.1.5 + bn.js: ^5.2.1 + borsh: ^0.7.0 + bs58: ^4.0.1 + buffer: 6.0.3 + fast-stable-stringify: ^1.0.0 + jayson: ^4.1.0 + node-fetch: ^2.6.12 + rpc-websockets: ^7.5.1 + superstruct: ^0.14.2 + checksum: 7e8ae7775f0df82d7d796befd1f2f95482e5935e6879dba7aa6c65093cb7a09158b965e3aba15e218c2652efaa7ec77c2287c01f343e4ec08afd1a298c16a039 + languageName: node + linkType: hard + +"@stablelib/aead@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/aead@npm:1.0.1" + checksum: 1a6f68d138f105d17dd65349751515bd252ab0498c77255b8555478d28415600dde493f909eb718245047a993f838dfae546071e1687566ffb7b8c3e10c918d9 + languageName: node + linkType: hard + +"@stablelib/binary@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/binary@npm:1.0.1" + dependencies: + "@stablelib/int": ^1.0.1 + checksum: dca9b98eb1f56a4002b5b9e7351fbc49f3d8616af87007c01e833bd763ac89214eb5f3b7e18673c91ce59d4a0e4856a2eb661ace33d39f17fb1ad267271fccd8 + languageName: node + linkType: hard + +"@stablelib/bytes@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/bytes@npm:1.0.1" + checksum: 456267e08c3384abcb71d3ad3e97a6f99185ad754bac016f501ebea4e4886f37900589143b57e33bdbbf513a92fc89368c15dd4517e0540d0bdc79ecdf9dd087 + languageName: node + linkType: hard + +"@stablelib/chacha20poly1305@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha20poly1305@npm:1.0.1" + dependencies: + "@stablelib/aead": ^1.0.1 + "@stablelib/binary": ^1.0.1 + "@stablelib/chacha": ^1.0.1 + "@stablelib/constant-time": ^1.0.1 + "@stablelib/poly1305": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 81f1a32330838d31e4dc3144d76eba7244b56d9ea38c1f604f2c34d93ed8e67e9a6167d2cfd72254c13cc46dfc1f5ce5157b37939a575295d69d9144abb4e4fb + languageName: node + linkType: hard + +"@stablelib/chacha@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: f061f36c4ca4bf177dd7cac11e7c65ced164f141b6065885141ae5a55f32e16ba0209aefcdcc966aef013f1da616ce901a3a80653b4b6f833cf7e3397ae2d6bd + languageName: node + linkType: hard + +"@stablelib/constant-time@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/constant-time@npm:1.0.1" + checksum: dba4f4bf508de2ff15f7f0cbd875e70391aa3ba3698290fe1ed2feb151c243ba08a90fc6fb390ec2230e30fcc622318c591a7c0e35dcb8150afb50c797eac3d7 + languageName: node + linkType: hard + +"@stablelib/ed25519@npm:^1.0.2": + version: 1.0.3 + resolution: "@stablelib/ed25519@npm:1.0.3" + dependencies: + "@stablelib/random": ^1.0.2 + "@stablelib/sha512": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e18279de078edac67396ba07dbb862dce0fe89efa8141c21a5b04108a29914bd51636019522323ca5097ec596a90b3028ed64e88ee009b0ac7de7c1ab6499ccb + languageName: node + linkType: hard + +"@stablelib/hash@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hash@npm:1.0.1" + checksum: 3ff1f12d1a4082aaf4b6cdf40c2010aabe5c4209d3b40b97b5bbb0d9abc0ee94abdc545e57de0614afaea807ca0212ac870e247ec8f66cdce91ec39ce82948cf + languageName: node + linkType: hard + +"@stablelib/hkdf@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/hkdf@npm:1.0.1" + dependencies: + "@stablelib/hash": ^1.0.1 + "@stablelib/hmac": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 9d45e303715a1835c8612b78e6c1b9d2b7463699b484241d8681fb5c17e0f2bbde5ce211c882134b64616a402e09177baeba80426995ff227b3654a155ab225d + languageName: node + linkType: hard + +"@stablelib/hmac@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hmac@npm:1.0.1" + dependencies: + "@stablelib/constant-time": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: e3b93f7144a5846a6e30213278f7570de6d3f9d09131b95ce76d5c5c8bf37bf5d1830f2ee8d847555707271dbfd6e2461221719fd4d8b27ff06b9dd689c0ec21 + languageName: node + linkType: hard + +"@stablelib/int@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/int@npm:1.0.1" + checksum: 65bfbf50a382eea70c68e05366bf379cfceff8fbc076f1c267ef2f2411d7aed64fd140c415cb6c29f19a3910d3b8b7805d4b32ad5721a5007a8e744a808c7ae3 + languageName: node + linkType: hard + +"@stablelib/keyagreement@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/keyagreement@npm:1.0.1" + dependencies: + "@stablelib/bytes": ^1.0.1 + checksum: 3c8ec904dd50f72f3162f5447a0fa8f1d9ca6e24cd272d3dbe84971267f3b47f9bd5dc4e4eeedf3fbac2fe01f2d9277053e57c8e60db8c5544bfb35c62d290dd + languageName: node + linkType: hard + +"@stablelib/poly1305@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/poly1305@npm:1.0.1" + dependencies: + "@stablelib/constant-time": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 70b845bb0481c66b7ba3f3865d01e4c67a4dffc9616fc6de1d23efc5e828ec09de25f8e3be4e1f15a23b8e87e3036ee3d949c2fd4785047e6f7028bbec0ead18 + languageName: node + linkType: hard + +"@stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": + version: 1.0.2 + resolution: "@stablelib/random@npm:1.0.2" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: f5ace0a588dc4c21f01cb85837892d4c872e994ae77a58a8eb7dd61aa0b26fb1e9b46b0445e71af57d963ef7d9f5965c64258fc0d04df7b2947bc48f2d3560c5 + languageName: node + linkType: hard + +"@stablelib/sha256@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha256@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: 38669871e1bda72eb537629ebceac1c72da8890273a9fbe088f81f6d14c1ec04e78be8c5b455380a06c67f8e62b2508e11e9063fcc257dbaa1b5c27ac756ba77 + languageName: node + linkType: hard + +"@stablelib/sha512@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha512@npm:1.0.1" + dependencies: + "@stablelib/binary": ^1.0.1 + "@stablelib/hash": ^1.0.1 + "@stablelib/wipe": ^1.0.1 + checksum: b7c82f7608a35948a2147a534c0c9afc80deab3fd5f72a2e27b2454e7c0c6944d39381be3abcb1b7fac5b824ba030ae3e98209d517a579c143d8ed63930b042f + languageName: node + linkType: hard + +"@stablelib/wipe@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/wipe@npm:1.0.1" + checksum: 287802eb146810a46ba72af70b82022caf83a8aeebde23605f5ee0decf64fe2b97a60c856e43b6617b5801287c30cfa863cfb0469e7fcde6f02d143cf0c6cbf4 + languageName: node + linkType: hard + +"@stablelib/x25519@npm:^1.0.3": + version: 1.0.3 + resolution: "@stablelib/x25519@npm:1.0.3" + dependencies: + "@stablelib/keyagreement": ^1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/wipe": ^1.0.1 + checksum: f8537066b542b6770c1b5b2ae5ad0688d1b986e4bf818067c152c123a5471531987bbf024224f75f387f481ccc5b628e391e49e92102b8b1a3e2d449d6105402 + languageName: node + linkType: hard + +"@stitches/core@npm:^1.2.8": + version: 1.2.8 + resolution: "@stitches/core@npm:1.2.8" + checksum: 3a76a697b1d71ffb212e8b166f923c8f66ef99de93689dd417571f90fbba5692abb9a92220acd102baf5298896f0fdfeaa721da2d61adee1247531a26f67a15f + languageName: node + linkType: hard + +"@stitches/react@npm:^1.2.8": + version: 1.2.8 + resolution: "@stitches/react@npm:1.2.8" + peerDependencies: + react: ">= 16.3.0" + checksum: 029795323cdedb5599ec0636526fc233b2cf41fa9c1f4a704b1f7f457c6170053384a7430afed45e25f73e348d7c391cf1379bc079943cd9cad44302234a5244 + languageName: node + linkType: hard + +"@swc/helpers@npm:0.4.11": + version: 0.4.11 + resolution: "@swc/helpers@npm:0.4.11" + dependencies: + tslib: ^2.4.0 + checksum: 736857d524b41a8a4db81094e9b027f554004e0fa3e86325d85bdb38f7e6459ce022db079edb6c61ba0f46fe8583b3e663e95f7acbd13e51b8da6c34e45bba2e + languageName: node + linkType: hard + +"@tanstack/query-async-storage-persister@npm:4.29.23": + version: 4.29.23 + resolution: "@tanstack/query-async-storage-persister@npm:4.29.23" + dependencies: + "@tanstack/query-persist-client-core": 4.29.23 + checksum: 5a5845f8fc0563f9844272a140f28bb50ea064c4b3fdf5aa3512cd1e0e082156a94de7d5ee4cbc72dd302473c47045e73cc46118bb24752dd4b09940f8771ec4 + languageName: node + linkType: hard + +"@tanstack/query-core@npm:4.29.23": + version: 4.29.23 + resolution: "@tanstack/query-core@npm:4.29.23" + checksum: bd752e419619c415076816446f06904eba88a9600a9fc6544634afe929d24d40059a57809bf653c6581ae92b564942bed3988f3585ac59b0a60e8331b4ad8acb + languageName: node + linkType: hard + +"@tanstack/query-core@npm:4.36.1": + version: 4.36.1 + resolution: "@tanstack/query-core@npm:4.36.1" + checksum: 47672094da20d89402d9fe03bb7b0462be73a76ff9ca715169738bc600a719d064d106d083a8eedae22a2c22de22f87d5eb5d31ef447aba771d9190f2117ed10 + languageName: node + linkType: hard + +"@tanstack/query-persist-client-core@npm:4.29.23": + version: 4.29.23 + resolution: "@tanstack/query-persist-client-core@npm:4.29.23" + dependencies: + "@tanstack/query-core": 4.29.23 + checksum: 93b8d30450bda9037d3849fa43264f2e4e5157124760e1dcfd6e6361dedd172d1c67949f35d3875efdef395c0f3bec5917bcde636bb1039afa45d4923bfc4d52 + languageName: node + linkType: hard + +"@tanstack/query-persist-client-core@npm:4.36.1": + version: 4.36.1 + resolution: "@tanstack/query-persist-client-core@npm:4.36.1" + dependencies: + "@tanstack/query-core": 4.36.1 + checksum: f67eab79cb6d9581716d1532c490d00452d8e2c5438874599fdd2d8d930445137ed9afa8199a569452bf3d5ec581c223750d5777b63b65cbc1baf5bdf6fe3322 + languageName: node + linkType: hard + +"@tanstack/query-sync-storage-persister@npm:^4.27.1": + version: 4.36.1 + resolution: "@tanstack/query-sync-storage-persister@npm:4.36.1" + dependencies: + "@tanstack/query-persist-client-core": 4.36.1 + checksum: 461467ab13b0434dd4647c1ea8969ed06db6dabf77e3a68d978bbeb78d3d491b242fb7cd13bd37512f787e6ef891113ce208fad6355fa7eb49987c6942ca196b + languageName: node + linkType: hard + +"@tanstack/react-query-persist-client@npm:4.29.23": + version: 4.29.23 + resolution: "@tanstack/react-query-persist-client@npm:4.29.23" + dependencies: + "@tanstack/query-persist-client-core": 4.29.23 + peerDependencies: + "@tanstack/react-query": 4.29.23 + checksum: c3f846055a664e46953433ac7271bde3cfddc06ce0faef182ac8547532c9d8d0011f5e2ca087fc06764f26527d9b27c5f92ced0395e96a038349390afa791967 + languageName: node + linkType: hard + +"@tanstack/react-query-persist-client@npm:^4.28.0": + version: 4.36.1 + resolution: "@tanstack/react-query-persist-client@npm:4.36.1" + dependencies: + "@tanstack/query-persist-client-core": 4.36.1 + peerDependencies: + "@tanstack/react-query": ^4.36.1 + checksum: d938449bd8395da0c6ff69c83218c7efe63832f4e588b75f4f0c4f4db8c20194cb1507a1d5d8dd76b193545df3d3c0d5a409c117cc5306847fc02df3d2d16d45 + languageName: node + linkType: hard + +"@tanstack/react-query@npm:4.29.23": + version: 4.29.23 + resolution: "@tanstack/react-query@npm:4.29.23" + dependencies: + "@tanstack/query-core": 4.29.23 + use-sync-external-store: ^1.2.0 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: "*" + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 2d0e0b7c4362c0b7b37c754d2f335f61da2245c25141bd444fef93a53ae3b5d6af5a5cdcea096a981ab6eaeffd25d15fde7d9cb36a5006afe4c2ab3907a82a91 + languageName: node + linkType: hard + +"@tanstack/react-query@npm:^4.28.0": + version: 4.36.1 + resolution: "@tanstack/react-query@npm:4.36.1" + dependencies: + "@tanstack/query-core": 4.36.1 + use-sync-external-store: ^1.2.0 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: "*" + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 1aff0a476859386f8d32253fa0d0bde7b81769a6d4d4d9cbd78778f0f955459a3bdb7ee27a0d2ee7373090f12998b45df80db0b5b313bd0a7a39d36c6e8e51c5 + languageName: node + linkType: hard + +"@testing-library/dom@npm:^8.0.0": + version: 8.20.1 + resolution: "@testing-library/dom@npm:8.20.1" + dependencies: + "@babel/code-frame": ^7.10.4 + "@babel/runtime": ^7.12.5 + "@types/aria-query": ^5.0.1 + aria-query: 5.1.3 + chalk: ^4.1.0 + dom-accessibility-api: ^0.5.9 + lz-string: ^1.5.0 + pretty-format: ^27.0.2 + checksum: 06fc8dc67849aadb726cbbad0e7546afdf8923bd39acb64c576d706249bd7d0d05f08e08a31913fb621162e3b9c2bd0dce15964437f030f9fa4476326fdd3007 + languageName: node + linkType: hard + +"@testing-library/react-hooks@npm:^7.0.2": + version: 7.0.2 + resolution: "@testing-library/react-hooks@npm:7.0.2" + dependencies: + "@babel/runtime": ^7.12.5 + "@types/react": ">=16.9.0" + "@types/react-dom": ">=16.9.0" + "@types/react-test-renderer": ">=16.9.0" + react-error-boundary: ^3.1.0 + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + react-test-renderer: ">=16.9.0" + peerDependenciesMeta: + react-dom: + optional: true + react-test-renderer: + optional: true + checksum: 27c6169b5c9832bd02dcea232e6a0a3cd8d4504e13ecb49d57eb5ab6bea5e2f1bff65f3102068b7e57eec3cbd671326dc0b277335014b0edfbdedf11a1fe6db5 + languageName: node + linkType: hard + +"@testing-library/react@npm:^12.1.2": + version: 12.1.5 + resolution: "@testing-library/react@npm:12.1.5" + dependencies: + "@babel/runtime": ^7.12.5 + "@testing-library/dom": ^8.0.0 + "@types/react-dom": <18.0.0 + peerDependencies: + react: <18.0.0 + react-dom: <18.0.0 + checksum: 4abd0490405e709a7df584a0db604e508a4612398bb1326e8fa32dd9393b15badc826dcf6d2f7525437886d507871f719f127b9860ed69ddd204d1fa834f576a + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@trivago/prettier-plugin-sort-imports@npm:3.2.0": + version: 3.2.0 + resolution: "@trivago/prettier-plugin-sort-imports@npm:3.2.0" + dependencies: + "@babel/core": 7.13.10 + "@babel/generator": 7.13.9 + "@babel/parser": 7.14.6 + "@babel/traverse": 7.13.0 + "@babel/types": 7.13.0 + javascript-natural-sort: 0.7.1 + lodash: 4.17.21 + peerDependencies: + prettier: 2.x + checksum: 22461433fa0dc82621713cdfb88f8f527c6c41729e9859bb7f0106ef23c35b0da591ee7fed63516be7e8df5604dc8055f0c7e200fed1ef97f44000c9fe25a890 + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + +"@types/acorn@npm:^4.0.0": + version: 4.0.6 + resolution: "@types/acorn@npm:4.0.6" + dependencies: + "@types/estree": "*" + checksum: 60e1fd28af18d6cb54a93a7231c7c18774a9a8739c9b179e9e8750dca631e10cbef2d82b02830ea3f557b1d121e6406441e9e1250bd492dc81d4b3456e76e4d4 + languageName: node + linkType: hard + +"@types/aria-query@npm:^5.0.1": + version: 5.0.2 + resolution: "@types/aria-query@npm:5.0.2" + checksum: 19394fea016e72da39dd5ef1cf1643e3252b7ee99d8f0b3a8740d3b72f874443fc1e00a41935b36fdfaf92cd735d4ae10dc5d6ab8f1192527d4c0471bb8ff8e4 + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.20.2 + resolution: "@types/babel__core@npm:7.20.2" + dependencies: + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: 564fbaa8ff1305d50807ada0ec227c3e7528bebb2f8fe6b2ed88db0735a31511a74ad18729679c43eeed8025ed29d408f53059289719e95ab1352ed559a100bd + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.5 + resolution: "@types/babel__generator@npm:7.6.5" + dependencies: + "@babel/types": ^7.0.0 + checksum: c7459f5025c4c800eaf58f4db3b24e9d736331fe7df40961d9bc49f31b46e2a3be83dc9276e8688f10a5ed752ae153ad5f1bdd45e2245bac95273730b9115ec2 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.2 + resolution: "@types/babel__template@npm:7.4.2" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + checksum: 0fe977b45a3269336c77f3ae4641a6c48abf0fa35ab1a23fb571690786af02d6cec08255a43499b0b25c5633800f7ae882ace450cce905e3060fa9e6995047ae + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": + version: 7.20.2 + resolution: "@types/babel__traverse@npm:7.20.2" + dependencies: + "@babel/types": ^7.20.7 + checksum: 981340286479524436348d32373eaa3bf993c635cbf70307b4b69463eee83406a959ac4844f683911e0db8ab8d9f0025ab630dc7a8c170fee9ee74144c2a528f + languageName: node + linkType: hard + +"@types/bluebird@npm:3.5.34": + version: 3.5.34 + resolution: "@types/bluebird@npm:3.5.34" + checksum: e1c3889aea3309ebd986681ddffc3202bcaefb448d3e2c08e6578adc49e4e80795d8eb7d109dd78262b60bb4005b64929ff9e5bd30350d17780fe9110e47b24e + languageName: node + linkType: hard + +"@types/body-parser@npm:*": + version: 1.19.3 + resolution: "@types/body-parser@npm:1.19.3" + dependencies: + "@types/connect": "*" + "@types/node": "*" + checksum: 932fa71437c275023799123680ef26ffd90efd37f51a1abe405e6ae6e5b4ad9511b7a3a8f5a12877ed1444a02b6286c0a137a98e914b3c61932390c83643cc2c + languageName: node + linkType: hard + +"@types/classnames@npm:^2.2.11": + version: 2.3.1 + resolution: "@types/classnames@npm:2.3.1" + dependencies: + classnames: "*" + checksum: 09a17ea08fcb83380921efdfdac94cfa162f87025cae0bf6f4ba508c2fa5f436459ce7612905a3f968fdddb68c03b8e6ff08e762ed2d0c110c5c4fceb244dc55 + languageName: node + linkType: hard + +"@types/concat-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "@types/concat-stream@npm:2.0.0" + dependencies: + "@types/node": "*" + checksum: d82ace5cb92f9fc91660ae1a101fa0a6b6159da59b0351c28627b24c317670267bc527f24ef4fa2c08d00404b49882ca66bf5c75d47d2b5f48d2fd85f9c2ea4d + languageName: node + linkType: hard + +"@types/connect@npm:*, @types/connect@npm:^3.4.33": + version: 3.4.36 + resolution: "@types/connect@npm:3.4.36" + dependencies: + "@types/node": "*" + checksum: 4dee3d966fb527b98f0cbbdcf6977c9193fc3204ed539b7522fe5e64dfa45f9017bdda4ffb1f760062262fce7701a0ee1c2f6ce2e50af36c74d4e37052303172 + languageName: node + linkType: hard + +"@types/cookie@npm:*": + version: 0.5.2 + resolution: "@types/cookie@npm:0.5.2" + checksum: 4a1e46379d877f5a3cc687a9799dd72e5f7e68c4764d45cb469789dec92b4b4a7a5bb8b10a08c90be15939fa7b9b402f87ed339dfac0cabf43699c5189880e88 + languageName: node + linkType: hard + +"@types/debug@npm:^4.0.0, @types/debug@npm:^4.1.7": + version: 4.1.9 + resolution: "@types/debug@npm:4.1.9" + dependencies: + "@types/ms": "*" + checksum: e88ee8b19d106f33eb0d3bc58bacff9702e98d821fd1ebd1de8942e6b97419e19a1ccf39370f1764a1dc66f79fd4619f3412e1be6eeb9f0b76412f5ffe4ead93 + languageName: node + linkType: hard + +"@types/estree-jsx@npm:^1.0.0": + version: 1.0.1 + resolution: "@types/estree-jsx@npm:1.0.1" + dependencies: + "@types/estree": "*" + checksum: c2eb9fd8868df238ae11b91f47644261ce017295a1cddaeb0bad50dc13efa9913c164b8717d458ec40f47835c98ee142755cde155d1ec24b446da78f81da73ac + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.0": + version: 1.0.2 + resolution: "@types/estree@npm:1.0.2" + checksum: aeedb1b2fe20cbe06f44b99b562bf9703e360bfcdf5bb3d61d248182ee1dd63500f2474e12f098ffe1f5ac3202b43b3e18ec99902d9328d5374f5512fa077e45 + languageName: node + linkType: hard + +"@types/express-serve-static-core@npm:^4.17.33": + version: 4.17.37 + resolution: "@types/express-serve-static-core@npm:4.17.37" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + "@types/send": "*" + checksum: 2dab1380e45eb44e56ecc1be1c42c4b897364d2f2a08e03ca28fbcb1e6866e390217385435813711c046f9acd684424d088855dc32825d5cbecf72c60ecd037f + languageName: node + linkType: hard + +"@types/express@npm:*": + version: 4.17.19 + resolution: "@types/express@npm:4.17.19" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^4.17.33 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: 3d39d0655eb0825d96fec100985a38737767ddd6da2dbda1e330a3adf36c98a9b7cd8d9539db32876d1fbb47a09343cad7b38c30c8dd7c291271fcb9b85cb21b + languageName: node + linkType: hard + +"@types/glob@npm:^7.1.1": + version: 7.2.0 + resolution: "@types/glob@npm:7.2.0" + dependencies: + "@types/minimatch": "*" + "@types/node": "*" + checksum: 6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 + languageName: node + linkType: hard + +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.7 + resolution: "@types/graceful-fs@npm:4.1.7" + dependencies: + "@types/node": "*" + checksum: 8b97e208f85c9efd02a6003a582c77646dd87be0af13aec9419a720771560a8a87a979eaca73ae193d7c73127f34d0a958403a9b5d6246e450289fd8c79adf09 + languageName: node + linkType: hard + +"@types/hast@npm:^2.0.0": + version: 2.3.6 + resolution: "@types/hast@npm:2.3.6" + dependencies: + "@types/unist": ^2 + checksum: c004372f6ab919ec92a2de43e4380707e27b76fe371c7d06ab26547c1e851dfba2a7c740c544218df8c7e0a94443458793c43730ad563a39e3fdc1a48904d7f5 + languageName: node + linkType: hard + +"@types/hoist-non-react-statics@npm:^3.3.0": + version: 3.3.3 + resolution: "@types/hoist-non-react-statics@npm:3.3.3" + dependencies: + "@types/react": "*" + hoist-non-react-statics: ^3.3.0 + checksum: 107ac20ab36acdc83fb6bfca901e6f4f11307a0a307099c31ecf2a9875f8abffd731a2e1ee793162307e8aaee48fe9fd8d4e034fce88d5da480bc4178a3fc8d7 + languageName: node + linkType: hard + +"@types/http-errors@npm:*": + version: 2.0.2 + resolution: "@types/http-errors@npm:2.0.2" + checksum: d7f14045240ac4b563725130942b8e5c8080bfabc724c8ff3f166ea928ff7ae02c5194763bc8f6aaf21897e8a44049b0492493b9de3e058247e58fdfe0f86692 + languageName: node + linkType: hard + +"@types/is-empty@npm:^1.0.0": + version: 1.2.1 + resolution: "@types/is-empty@npm:1.2.1" + checksum: 7fe50427bfe8e4bef75e448a20bb542a57ab69ed0a4e191fd41f7f4417f6bd7cccd5f395fd88a579befbcb2c93ee9ba082749730e052493ea988351691069465 + languageName: node + linkType: hard + +"@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": + version: 2.0.4 + resolution: "@types/istanbul-lib-coverage@npm:2.0.4" + checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 + languageName: node + linkType: hard + +"@types/istanbul-lib-report@npm:*": + version: 3.0.1 + resolution: "@types/istanbul-lib-report@npm:3.0.1" + dependencies: + "@types/istanbul-lib-coverage": "*" + checksum: cfc66de48577bb7b2636a6afded7056483693c3ea70916276518cdfaa0d4b51bf564ded88fb13e75716665c3af3d4d54e9c2de042c0219dcabad7e81c398688b + languageName: node + linkType: hard + +"@types/istanbul-reports@npm:^3.0.0": + version: 3.0.2 + resolution: "@types/istanbul-reports@npm:3.0.2" + dependencies: + "@types/istanbul-lib-report": "*" + checksum: f52028d6fe4d28f0085dd7ed66ccfa6af632579e9a4091b90928ffef93d4dbec0bacd49e9caf1b939d05df9eafc5ac1f5939413cdf8ac59fbe4b29602d4d0939 + languageName: node + linkType: hard + +"@types/jest@npm:^29.5.5": + version: 29.5.5 + resolution: "@types/jest@npm:29.5.5" + dependencies: + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 56e55cde9949bcc0ee2fa34ce5b7c32c2bfb20e53424aa4ff3a210859eeaaa3fdf6f42f81a3f655238039cdaaaf108b054b7a8602f394e6c52b903659338d8c6 + languageName: node + linkType: hard + +"@types/json-schema@npm:^7.0.9": + version: 7.0.13 + resolution: "@types/json-schema@npm:7.0.13" + checksum: 345df21a678fa72fb389f35f33de77833d09d4a142bb2bcb27c18690efa4cf70fc2876e43843cefb3fbdb9fcb12cd3e970a90936df30f53bbee899865ff605ab + languageName: node + linkType: hard + +"@types/json5@npm:^0.0.29": + version: 0.0.29 + resolution: "@types/json5@npm:0.0.29" + checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac + languageName: node + linkType: hard + +"@types/lodash.merge@npm:^4.6.7": + version: 4.6.7 + resolution: "@types/lodash.merge@npm:4.6.7" + dependencies: + "@types/lodash": "*" + checksum: 94cd6fb8e606756a28f45d63c658aacfbce11a151f7fa322c4a3e87aa50d8bf26e0ae8cba0250070a7c5a6792fc51f79abf4c648bbb1850692be386cd76cd0ca + languageName: node + linkType: hard + +"@types/lodash@npm:*, @types/lodash@npm:^4.14.199": + version: 4.14.199 + resolution: "@types/lodash@npm:4.14.199" + checksum: e68d1fcbbfce953ed87b296a628573f62939227bcda0c934954e862b421e8a34c5e71cad6fea27b9980567909e6a4698f09025692958e36d64ea9ed99ec6fb2e + languageName: node + linkType: hard + +"@types/long@npm:^4.0.1": + version: 4.0.2 + resolution: "@types/long@npm:4.0.2" + checksum: d16cde7240d834cf44ba1eaec49e78ae3180e724cd667052b194a372f350d024cba8dd3f37b0864931683dab09ca935d52f0c4c1687178af5ada9fc85b0635f4 + languageName: node + linkType: hard + +"@types/mdast@npm:^3.0.0": + version: 3.0.13 + resolution: "@types/mdast@npm:3.0.13" + dependencies: + "@types/unist": ^2 + checksum: f13fa17a2931ed1492a2f0012a3abd6de3a2d1128145981321909e03fedba80162668f284a4af92aca3732b27e933c5f4772336d96b9ae660bfde696d07abbe6 + languageName: node + linkType: hard + +"@types/mime@npm:*": + version: 3.0.2 + resolution: "@types/mime@npm:3.0.2" + checksum: 09cf74f6377d1b27f4a24512cb689ad30af59880ac473ed6f7bc5285ecde88bbe8fe500789340ad57810da9d6fe1704f86e8bfe147b9ea76d58925204a60b906 + languageName: node + linkType: hard + +"@types/mime@npm:^1": + version: 1.3.3 + resolution: "@types/mime@npm:1.3.3" + checksum: 7e27dede6517c1d604821a8a5412d6b7131decc8397ad4bac9216fc90dea26c9571426623ebeea2a9b89dbfb89ad98f7370a3c62cd2be8896c6e897333b117c9 + languageName: node + linkType: hard + +"@types/minimatch@npm:*": + version: 5.1.2 + resolution: "@types/minimatch@npm:5.1.2" + checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 + languageName: node + linkType: hard + +"@types/minimatch@npm:^3.0.4": + version: 3.0.5 + resolution: "@types/minimatch@npm:3.0.5" + checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 + languageName: node + linkType: hard + +"@types/minimist@npm:^1.2.0": + version: 1.2.3 + resolution: "@types/minimist@npm:1.2.3" + checksum: 666ea4f8c39dcbdfbc3171fe6b3902157c845cc9cb8cee33c10deb706cda5e0cc80f98ace2d6d29f6774b0dc21180c96cd73c592a1cbefe04777247c7ba0e84b + languageName: node + linkType: hard + +"@types/ms@npm:*": + version: 0.7.32 + resolution: "@types/ms@npm:0.7.32" + checksum: 610744605c5924aa2657c8a62d307052af4f0e38e2aa015f154ef03391fabb4fd903f9c9baacb41f6e5798b8697e898463c351e5faf638738603ed29137b5254 + languageName: node + linkType: hard + +"@types/node@npm:*": + version: 20.8.4 + resolution: "@types/node@npm:20.8.4" + dependencies: + undici-types: ~5.25.1 + checksum: 2106b9ef9750297cac68249428d7067c4d22c26908854165b70a164e34e900f4c34bb9bf3887c9391206b500d3e87171d03b1846e25788925236a0354390d278 + languageName: node + linkType: hard + +"@types/node@npm:17.0.24": + version: 17.0.24 + resolution: "@types/node@npm:17.0.24" + checksum: 9e7c4f863601b2430b4c2429a89935f22eba692956f5013c90a4c7fb0e1401ed8add8c4307453c5d6b8b985384500f8c3f644427ab88632640cc396159af479a + languageName: node + linkType: hard + +"@types/node@npm:>=13.7.0": + version: 20.8.6 + resolution: "@types/node@npm:20.8.6" + dependencies: + undici-types: ~5.25.1 + checksum: ccfb7ac482c5a96edeb239893c5c099f5257fcc2ed9ae62fefdfbc782b79e16dbc2af9a85b379665237bf759904b44ca2be68e75d239e0297882aad42f61905c + languageName: node + linkType: hard + +"@types/node@npm:^12.12.54": + version: 12.20.55 + resolution: "@types/node@npm:12.20.55" + checksum: e4f86785f4092706e0d3b0edff8dca5a13b45627e4b36700acd8dfe6ad53db71928c8dee914d4276c7fd3b6ccd829aa919811c9eb708a2c8e4c6eb3701178c37 + languageName: node + linkType: hard + +"@types/node@npm:^16.11.21": + version: 16.18.58 + resolution: "@types/node@npm:16.18.58" + checksum: 6d8404abc6c97bacd220f606441727adea923f3bd010d07d869f0dc6c4c6dc016430880af1f270edf1b84ae637a7fa5339e6adb3abba210a4820ac5e28f34067 + languageName: node + linkType: hard + +"@types/node@npm:^18.0.0": + version: 18.18.4 + resolution: "@types/node@npm:18.18.4" + checksum: 4901e91c4cc479bb58acbcd79236a97a0ad6db4a53cb1f4ba4cf32af15324c61b16faa6e31c1b09bf538a20feb5f5274239157ce5237f5741db0b9ab71e69c52 + languageName: node + linkType: hard + +"@types/normalize-package-data@npm:^2.4.0": + version: 2.4.2 + resolution: "@types/normalize-package-data@npm:2.4.2" + checksum: 2132e4054711e6118de967ae3a34f8c564e58d71fbcab678ec2c34c14659f638a86c35a0fd45237ea35a4a03079cf0a485e3f97736ffba5ed647bfb5da086b03 + languageName: node + linkType: hard + +"@types/numeral@npm:^2.0.2": + version: 2.0.3 + resolution: "@types/numeral@npm:2.0.3" + checksum: 460b0ac645519b3eea7ae52df631393246f9526d5772999bc3daa7fc8c63751591a24c9b0cde767bbbc137d918af5efd7676db4c1c062b675848bdb689c40642 + languageName: node + linkType: hard + +"@types/parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "@types/parse-json@npm:4.0.0" + checksum: fd6bce2b674b6efc3db4c7c3d336bd70c90838e8439de639b909ce22f3720d21344f52427f1d9e57b265fcb7f6c018699b99e5e0c208a1a4823014269a6bf35b + languageName: node + linkType: hard + +"@types/prop-types@npm:*, @types/prop-types@npm:^15.7.7": + version: 15.7.8 + resolution: "@types/prop-types@npm:15.7.8" + checksum: 61dfad79da8b1081c450bab83b77935df487ae1cdd4660ec7df6be8e74725c15fa45cf486ce057addc956ca4ae78300b97091e2a25061133d1b9a1440bc896ae + languageName: node + linkType: hard + +"@types/qs@npm:*, @types/qs@npm:^6.9.8": + version: 6.9.8 + resolution: "@types/qs@npm:6.9.8" + checksum: c28e07d00d07970e5134c6eed184a0189b8a4649e28fdf36d9117fe671c067a44820890de6bdecef18217647a95e9c6aebdaaae69f5fe4b0bec9345db885f77e + languageName: node + linkType: hard + +"@types/ramda@npm:^0.29.6": + version: 0.29.6 + resolution: "@types/ramda@npm:0.29.6" + dependencies: + types-ramda: ^0.29.5 + checksum: b8198f90295e40b0f2aa6dc18c60535a88ecd6e2afdb421e0616398b9cbed03f2a760e9d712258ab8fdebe7da9e21ecf31d2bc9cae6d31406b0095ce8c4c8591 + languageName: node + linkType: hard + +"@types/range-parser@npm:*": + version: 1.2.5 + resolution: "@types/range-parser@npm:1.2.5" + checksum: db9aaa04a02d019395a9a4346475669a2864a32a6477ad0fc457bd2ef39a167cabe742f55a8a3fa8bc90abac795b716c22b37348bc3e19313ebe6c9310815233 + languageName: node + linkType: hard + +"@types/react-cookies@npm:^0.1.1": + version: 0.1.1 + resolution: "@types/react-cookies@npm:0.1.1" + dependencies: + "@types/cookie": "*" + "@types/express": "*" + checksum: 1b9d43dea6823ac42acb328ccafa37d6382c110cf20251d21bc2a10816e31b975f12dd6b22dcddd5a8af212864165531d8e70f4f77532b3da83dc6f69145d99f + languageName: node + linkType: hard + +"@types/react-dom@npm:<18.0.0, @types/react-dom@npm:^17.0.2": + version: 17.0.21 + resolution: "@types/react-dom@npm:17.0.21" + dependencies: + "@types/react": ^17 + checksum: a2e3f068c1374601856b63bc57f3f436cf6270c1ba5c5cef0776def6de296c8bdd31c39b5be9e9e77f4652e923bef1e71ae377a2b038f4a81bfd0fec8d10d0d0 + languageName: node + linkType: hard + +"@types/react-dom@npm:>=16.9.0": + version: 18.2.13 + resolution: "@types/react-dom@npm:18.2.13" + dependencies: + "@types/react": "*" + checksum: 22ba066b141dca5a5a9227fae0afc7c94b470fff8e8a38ade72649da57a8ea04d0cb2ba3e22005e7d8e772d49bddd28855b1dd98e6defd033bba6afb6edff883 + languageName: node + linkType: hard + +"@types/react-lazy-load-image-component@npm:^1.6.0": + version: 1.6.1 + resolution: "@types/react-lazy-load-image-component@npm:1.6.1" + dependencies: + "@types/react": "*" + csstype: ^3.0.2 + checksum: b49ffadc4fd9e900ad02bf7d181075e8896ead6c33c25d99bf597ea35efd6c0944a1f1fadae11ae14a30181e9ce88e17a69c9fa2448e967ba63b778acaf2e552 + languageName: node + linkType: hard + +"@types/react-redux@npm:^7.1.20, @types/react-redux@npm:^7.1.24": + version: 7.1.27 + resolution: "@types/react-redux@npm:7.1.27" + dependencies: + "@types/hoist-non-react-statics": ^3.3.0 + "@types/react": "*" + hoist-non-react-statics: ^3.3.0 + redux: ^4.0.0 + checksum: 38fcc56f013e81e9a3125fd75acdacb4cdb5f9fe49402330b4783923f236d2d12ccdd2240ffa42e5bbb75900acd55393c00e0ca5dd6cab91a7b7e39e74ac62b4 + languageName: node + linkType: hard + +"@types/react-test-renderer@npm:>=16.9.0": + version: 18.0.3 + resolution: "@types/react-test-renderer@npm:18.0.3" + dependencies: + "@types/react": "*" + checksum: 6834c7c998d9e699b7b9aca31ce0f550a29a63526a9ab15f62764eeade28fcce634030e5cfd223a8417e8c53234e01bfb961906b35fd9a72dd513aba549181f0 + languageName: node + linkType: hard + +"@types/react-transition-group@npm:^4.4.6, @types/react-transition-group@npm:^4.4.7": + version: 4.4.7 + resolution: "@types/react-transition-group@npm:4.4.7" + dependencies: + "@types/react": "*" + checksum: 3b91486e7aa777a3787e773efce79a0fa9be4ec9e02d51ccda8c7532c5c5d84fbcefe248dacb4007293d85bf0794ac51603bb9cec360db81cf3657d2b7123fb9 + languageName: node + linkType: hard + +"@types/react@npm:*, @types/react@npm:>=16.9.0": + version: 18.2.28 + resolution: "@types/react@npm:18.2.28" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: 81381bedeba83278f4c9febb0b83e0bd3f42a25897a50b9cb36ef53651d34b3d50f87ebf11211ea57ea575131f85d31e93e496ce46478a00b0f9bf7b26b5917a + languageName: node + linkType: hard + +"@types/react@npm:17.0.2": + version: 17.0.2 + resolution: "@types/react@npm:17.0.2" + dependencies: + "@types/prop-types": "*" + csstype: ^3.0.2 + checksum: a5198857165feddcbfc7d33e3322460ac62b8894d702414496a825b0c82272911ec33a42ef7c9d623a59308070eef4dfee6ff834b0674aa3f87eeb644196ee3b + languageName: node + linkType: hard + +"@types/react@npm:^17": + version: 17.0.68 + resolution: "@types/react@npm:17.0.68" + dependencies: + "@types/prop-types": "*" + "@types/scheduler": "*" + csstype: ^3.0.2 + checksum: c6ca4415b53b1abe91162b29af541a1797a56a6f462ef796e8ebda3eaa4d0609205f4f17b3fce8d9a12235d4ffd8a67c47b5e018ed85c2f3bee0fba8f54638c1 + languageName: node + linkType: hard + +"@types/retry@npm:0.12.0": + version: 0.12.0 + resolution: "@types/retry@npm:0.12.0" + checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 + languageName: node + linkType: hard + +"@types/scheduler@npm:*": + version: 0.16.4 + resolution: "@types/scheduler@npm:0.16.4" + checksum: a57b0f10da1b021e6bd5eeef8a1917dd3b08a8715bd8029e2ded2096d8f091bb1bb1fef2d66e139588a983c4bfbad29b59e48011141725fa83c76e986e1257d7 + languageName: node + linkType: hard + +"@types/semver@npm:^7.3.12": + version: 7.5.3 + resolution: "@types/semver@npm:7.5.3" + checksum: 349fdd1ab6c213bac5c991bac766bd07b8b12e63762462bb058740dcd2eb09c8193d068bb226f134661275f2022976214c0e727a4e5eb83ec1b131127c980d3e + languageName: node + linkType: hard + +"@types/send@npm:*": + version: 0.17.2 + resolution: "@types/send@npm:0.17.2" + dependencies: + "@types/mime": ^1 + "@types/node": "*" + checksum: 1ff5b1bd6a4f6fdc6402c7024781ff5dbd0e1f51a43c69529fb67c710943c7416d2f0d77c57c70fccf6616f25f838f32f960284526e408d4edae2e91e1fce95a + languageName: node + linkType: hard + +"@types/serve-static@npm:*": + version: 1.15.3 + resolution: "@types/serve-static@npm:1.15.3" + dependencies: + "@types/http-errors": "*" + "@types/mime": "*" + "@types/node": "*" + checksum: afa52252f0ba94cdb5391e80f23e17fd629bdf2a31be8876e2c4490312ed6b0570822dd7de7cea04c9002049e207709563568b7f4ee10bb9f456321db1e83e40 + languageName: node + linkType: hard + +"@types/stack-utils@npm:^2.0.0": + version: 2.0.1 + resolution: "@types/stack-utils@npm:2.0.1" + checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 + languageName: node + linkType: hard + +"@types/supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "@types/supports-color@npm:8.1.1" + checksum: 6f35588fc423bf6b511167b4aaa0348638567f7a74de24d77dfb930d2053757585e1799d9c903f3db7a23a9ef2518878de9427b20d2f4476899aaf923e98de11 + languageName: node + linkType: hard + +"@types/trusted-types@npm:^2.0.2": + version: 2.0.4 + resolution: "@types/trusted-types@npm:2.0.4" + checksum: 5256c4576cd1c90d33ddd9cc9cbd4f202b39c98cbe8b7f74963298f9eb2159c285ea5c25a6181b4c594d8d75641765bff85d72c2d251ad076e6529ce0eeedd1c + languageName: node + linkType: hard + +"@types/unist@npm:^2, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2": + version: 2.0.8 + resolution: "@types/unist@npm:2.0.8" + checksum: f4852d10a6752dc70df363917ef74453e5d2fd42824c0f6d09d19d530618e1402193977b1207366af4415aaec81d4e262c64d00345402020c4ca179216e553c7 + languageName: node + linkType: hard + +"@types/ws@npm:^7.4.4": + version: 7.4.7 + resolution: "@types/ws@npm:7.4.7" + dependencies: + "@types/node": "*" + checksum: b4c9b8ad209620c9b21e78314ce4ff07515c0cadab9af101c1651e7bfb992d7fd933bd8b9c99d110738fd6db523ed15f82f29f50b45510288da72e964dedb1a3 + languageName: node + linkType: hard + +"@types/yargs-parser@npm:*": + version: 21.0.1 + resolution: "@types/yargs-parser@npm:21.0.1" + checksum: 64e6316c2045e2d460c4fb79572f872f9d2f98fddc6d9d3949c71f0b6ad0ef8a2706cf49db26dfb02a9cb81433abb8f340f015e1d20a9692279abe9477b72c8e + languageName: node + linkType: hard + +"@types/yargs@npm:^17.0.8": + version: 17.0.28 + resolution: "@types/yargs@npm:17.0.28" + dependencies: + "@types/yargs-parser": "*" + checksum: f78c5e5c29903933c0557b4ffcd1d0b8564d66859c8ca4aa51da3714e49109ed7c2644334a1918d033df19028f4cecc91fd2e502651bb8e8451f246c371da847 + languageName: node + linkType: hard + +"@typescript-eslint/eslint-plugin@npm:^5.39.0": + version: 5.62.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.62.0" + dependencies: + "@eslint-community/regexpp": ^4.4.0 + "@typescript-eslint/scope-manager": 5.62.0 + "@typescript-eslint/type-utils": 5.62.0 + "@typescript-eslint/utils": 5.62.0 + debug: ^4.3.4 + graphemer: ^1.4.0 + ignore: ^5.2.0 + natural-compare-lite: ^1.4.0 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependencies: + "@typescript-eslint/parser": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: fc104b389c768f9fa7d45a48c86d5c1ad522c1d0512943e782a56b1e3096b2cbcc1eea3fcc590647bf0658eef61aac35120a9c6daf979bf629ad2956deb516a1 + languageName: node + linkType: hard + +"@typescript-eslint/parser@npm:^5.21.0, @typescript-eslint/parser@npm:^5.39.0": + version: 5.62.0 + resolution: "@typescript-eslint/parser@npm:5.62.0" + dependencies: + "@typescript-eslint/scope-manager": 5.62.0 + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/typescript-estree": 5.62.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: d168f4c7f21a7a63f47002e2d319bcbb6173597af5c60c1cf2de046b46c76b4930a093619e69faf2d30214c29ab27b54dcf1efc7046a6a6bd6f37f59a990e752 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/scope-manager@npm:5.62.0" + dependencies: + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/visitor-keys": 5.62.0 + checksum: 6062d6b797fe1ce4d275bb0d17204c827494af59b5eaf09d8a78cdd39dadddb31074dded4297aaf5d0f839016d601032857698b0e4516c86a41207de606e9573 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/type-utils@npm:5.62.0" + dependencies: + "@typescript-eslint/typescript-estree": 5.62.0 + "@typescript-eslint/utils": 5.62.0 + debug: ^4.3.4 + tsutils: ^3.21.0 + peerDependencies: + eslint: "*" + peerDependenciesMeta: + typescript: + optional: true + checksum: fc41eece5f315dfda14320be0da78d3a971d650ea41300be7196934b9715f3fe1120a80207551eb71d39568275dbbcf359bde540d1ca1439d8be15e9885d2739 + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/types@npm:5.62.0" + checksum: 48c87117383d1864766486f24de34086155532b070f6264e09d0e6139449270f8a9559cfef3c56d16e3bcfb52d83d42105d61b36743626399c7c2b5e0ac3b670 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" + dependencies: + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/visitor-keys": 5.62.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 3624520abb5807ed8f57b1197e61c7b1ed770c56dfcaca66372d584ff50175225798bccb701f7ef129d62c5989070e1ee3a0aa2d84e56d9524dcf011a2bb1a52 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/utils@npm:5.62.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@types/json-schema": ^7.0.9 + "@types/semver": ^7.3.12 + "@typescript-eslint/scope-manager": 5.62.0 + "@typescript-eslint/types": 5.62.0 + "@typescript-eslint/typescript-estree": 5.62.0 + eslint-scope: ^5.1.1 + semver: ^7.3.7 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: ee9398c8c5db6d1da09463ca7bf36ed134361e20131ea354b2da16a5fdb6df9ba70c62a388d19f6eebb421af1786dbbd79ba95ddd6ab287324fc171c3e28d931 + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.62.0": + version: 5.62.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" + dependencies: + "@typescript-eslint/types": 5.62.0 + eslint-visitor-keys: ^3.3.0 + checksum: 976b05d103fe8335bef5c93ad3f76d781e3ce50329c0243ee0f00c0fcfb186c81df50e64bfdd34970148113f8ade90887f53e3c4938183afba830b4ba8e30a35 + languageName: node + linkType: hard + +"@uauth/common@npm:2.3.0": + version: 2.3.0 + resolution: "@uauth/common@npm:2.3.0" + peerDependencies: + "@unstoppabledomains/resolution": ^8.0 + checksum: 13b49d6a300022e09370cc83851034be244b07e90822082e0452c13c1e5748cfaaa74c5ca8bba3e8e98de8d0b1a39a89ca5ed7aef32813a32ac82c5fc6ed0fe5 + languageName: node + linkType: hard + +"@uauth/js@npm:^2.8.0": + version: 2.8.0 + resolution: "@uauth/js@npm:2.8.0" + dependencies: + "@uauth/common": 2.3.0 + "@unstoppabledomains/resolution": ^8.0 + global: ^4.4.0 + jose: ^4.5.0 + checksum: a25d89667732508ad997986f2c0523665592ecb94b2ca5943d6c6de0a93749007e39c9da7dcee9ebd4235b6f3b63ea26d9b74865888a2d0dd4f4773aa65ab88c + languageName: node + linkType: hard + +"@unstoppabledomains/config@workspace:packages/config": + version: 0.0.0-use.local + resolution: "@unstoppabledomains/config@workspace:packages/config" + languageName: unknown + linkType: soft + +"@unstoppabledomains/resolution@npm:^8.0, @unstoppabledomains/resolution@npm:^8.5.0": + version: 8.5.0 + resolution: "@unstoppabledomains/resolution@npm:8.5.0" + dependencies: + "@ethersproject/abi": ^5.0.1 + bn.js: ^4.4.0 + cross-fetch: ^3.1.4 + crypto-js: ^4.1.1 + elliptic: ^6.5.4 + checksum: 3deaae15c0ff9699a30306a5c2a4ff09a5fc9bd9f2c4e9ab22621e85bad7109cff5bfe8bebe2f334cf7b76e602e25b9af659a4d5f5dab44738b41a0b60d8d608 + languageName: node + linkType: hard + +"@unstoppabledomains/ui-kit@npm:^0.3.15": + version: 0.3.15 + resolution: "@unstoppabledomains/ui-kit@npm:0.3.15" + dependencies: + "@emotion/react": ^11.0.0 + "@emotion/styled": ^11.0.0 + "@mui/icons-material": ^5.8.4 + "@mui/lab": ^5.0.0-alpha.66 + "@mui/material": ^5.3.1 + tss-react: ^4.0.0 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + "@types/react-dom": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + "@types/react-dom": + optional: true + checksum: 810ce9f91e3763bbb6b2cda0da3892adaafff2dc73ece8ca52d4a69e57f4e714593373c5bc11ea6416ca310bd935932a038e0d5d324678bc59f07bccc79d32b9 + languageName: node + linkType: hard + +"@wagmi/connectors@npm:3.1.2": + version: 3.1.2 + resolution: "@wagmi/connectors@npm:3.1.2" + dependencies: + "@coinbase/wallet-sdk": ^3.6.6 + "@ledgerhq/connect-kit-loader": ^1.1.0 + "@safe-global/safe-apps-provider": ^0.17.1 + "@safe-global/safe-apps-sdk": ^8.0.0 + "@walletconnect/ethereum-provider": 2.10.1 + "@walletconnect/legacy-provider": ^2.0.0 + "@walletconnect/modal": 2.6.2 + "@walletconnect/utils": 2.10.1 + abitype: 0.8.7 + eventemitter3: ^4.0.7 + peerDependencies: + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: 9e00708bafbd2735dafcadb40360fbbf8a90850f19d79172e7549bb4f9655dcdea20159638e1f0ed20c92beb6beb4fd0168cd946ef1c3fa271a1ed92f4265d5c + languageName: node + linkType: hard + +"@wagmi/core@npm:1.4.4": + version: 1.4.4 + resolution: "@wagmi/core@npm:1.4.4" + dependencies: + "@wagmi/connectors": 3.1.2 + abitype: 0.8.7 + eventemitter3: ^4.0.7 + zustand: ^4.3.1 + peerDependencies: + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: ee4946a6ebdc9526024898e10d472b64eba673f7d9075f56aa564541a4a3c394c5e285a64f297f1a315471a8b7b7649e688ddd2cd82c9b38c77d036d2278b86f + languageName: node + linkType: hard + +"@walletconnect/core@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/core@npm:2.10.1" + dependencies: + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/jsonrpc-ws-connection": 1.0.13 + "@walletconnect/keyvaluestorage": ^1.0.2 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/relay-auth": ^1.0.4 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.10.1 + "@walletconnect/utils": 2.10.1 + events: ^3.3.0 + lodash.isequal: 4.5.0 + uint8arrays: ^3.1.0 + checksum: d58ae15c53efe1792da8c7aa1b7ba47efb49807cfe0c73f225d59c5cd847a0e50979ce6965b94915812412deba3e5aa2dca13a02bd41c087e85575e99afad223 + languageName: node + linkType: hard + +"@walletconnect/crypto@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/crypto@npm:1.0.3" + dependencies: + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/environment": ^1.0.1 + "@walletconnect/randombytes": ^1.0.3 + aes-js: ^3.1.2 + hash.js: ^1.1.7 + tslib: 1.14.1 + checksum: 056c80451178d74be6237f24e53eb96951379ad2f556642b4f07231a9cac53512af182dfb58ee359d1d6803231030de747eb17b35a9a25577e20de3ef2d8fdec + languageName: node + linkType: hard + +"@walletconnect/encoding@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/encoding@npm:1.0.2" + dependencies: + is-typedarray: 1.0.0 + tslib: 1.14.1 + typedarray-to-buffer: 3.1.5 + checksum: 648029d6a04e0e3675e1220b87c982e5d69764873e30a45a7c57f18223cd7c13e6758138d4644fd05d8fa03bd438fafb0a0ebc6ae168ed6f4a9bf1f93de1b82f + languageName: node + linkType: hard + +"@walletconnect/environment@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/environment@npm:1.0.1" + dependencies: + tslib: 1.14.1 + checksum: a18731d857bdca73910147e59992cef3c6e292c37ab3d3013307bd706f06cb216aa804f0f48b25a78df6493ad8127e633629f4b50acb4f69d3765d6ac0524f68 + languageName: node + linkType: hard + +"@walletconnect/ethereum-provider@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/ethereum-provider@npm:2.10.1" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.7 + "@walletconnect/jsonrpc-provider": ^1.0.13 + "@walletconnect/jsonrpc-types": ^1.0.3 + "@walletconnect/jsonrpc-utils": ^1.0.8 + "@walletconnect/sign-client": 2.10.1 + "@walletconnect/types": 2.10.1 + "@walletconnect/universal-provider": 2.10.1 + "@walletconnect/utils": 2.10.1 + events: ^3.3.0 + peerDependencies: + "@walletconnect/modal": ">=2" + peerDependenciesMeta: + "@walletconnect/modal": + optional: true + checksum: ec3d88ba101a5d8f193262b5b1e770cccad6457ec56fa1f3d17fa531de4e07e8cf03a1341669122c61956f0d5c3a6eca57d3f12f524e046acddb401cdb76fe7c + languageName: node + linkType: hard + +"@walletconnect/events@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/events@npm:1.0.1" + dependencies: + keyvaluestorage-interface: ^1.0.0 + tslib: 1.14.1 + checksum: d28aa4dcc981bdaf38f0aeed979731ca793cead7e7a4ee730a9146d99d89db09a86c8e3192ed860638283276961c0723ba00cf3b8776f0692b36ec7df6c01be4 + languageName: node + linkType: hard + +"@walletconnect/heartbeat@npm:1.2.1": + version: 1.2.1 + resolution: "@walletconnect/heartbeat@npm:1.2.1" + dependencies: + "@walletconnect/events": ^1.0.1 + "@walletconnect/time": ^1.0.2 + tslib: 1.14.1 + checksum: df4d492a2d336283f834bc205c09b795f85cd507a61b14745dc2124e510a250fefbd83d51216f93df2e0aa0cf8120134db2679de8019eddd63877e9928997952 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-http-connection@npm:^1.0.4, @walletconnect/jsonrpc-http-connection@npm:^1.0.7": + version: 1.0.7 + resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.7" + dependencies: + "@walletconnect/jsonrpc-utils": ^1.0.6 + "@walletconnect/safe-json": ^1.0.1 + cross-fetch: ^3.1.4 + tslib: 1.14.1 + checksum: c4efcd46d4b344727ca6879badca2c2f855499ac76c8dace5d118f4423167adce34e41a99f3dcab0febb945ce51c6ef0ac8556567d5e38d8dad864b131eb5b00 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-provider@npm:1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.13, @walletconnect/jsonrpc-provider@npm:^1.0.6": + version: 1.0.13 + resolution: "@walletconnect/jsonrpc-provider@npm:1.0.13" + dependencies: + "@walletconnect/jsonrpc-utils": ^1.0.8 + "@walletconnect/safe-json": ^1.0.2 + tslib: 1.14.1 + checksum: 497dfdd9f988432f171bc98336f3583c679059f0a166f95d6e51c8e1937c17abd9a5fd3aadfcebf6964bae14edd1e05fb0453e370d6e3bbc7ff4919fcad7c478 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-types@npm:1.0.3, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/jsonrpc-types@npm:1.0.3" + dependencies: + keyvaluestorage-interface: ^1.0.0 + tslib: 1.14.1 + checksum: 26e6f1d8f4207328d3df465c36d0d67844772863dc8e9e78e6cfec417cfc359300eab049d99ea558982b3f0948f4ca26b75253bdf635ffd82ffe30a5276b790c + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.4, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.7, @walletconnect/jsonrpc-utils@npm:^1.0.8": + version: 1.0.8 + resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" + dependencies: + "@walletconnect/environment": ^1.0.1 + "@walletconnect/jsonrpc-types": ^1.0.3 + tslib: 1.14.1 + checksum: f43a85dfce8150c3e3d1f009e8d8241ab8e10b026ea435f0918edf4db6b3a17586ba9d9c54a93cc61e4d3c685611e5bd5954fc377a581af503acd38e6d84c2ef + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-ws-connection@npm:1.0.13": + version: 1.0.13 + resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.13" + dependencies: + "@walletconnect/jsonrpc-utils": ^1.0.6 + "@walletconnect/safe-json": ^1.0.2 + events: ^3.3.0 + tslib: 1.14.1 + ws: ^7.5.1 + checksum: f2253b17564f7622e69b1252830f05efdf7f4d58b120adb3a3e950c2087845171c912307c39948d0b869aa8610688b83f54f54de4657091f7431aea95a59f8b9 + languageName: node + linkType: hard + +"@walletconnect/keyvaluestorage@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/keyvaluestorage@npm:1.0.2" + dependencies: + safe-json-utils: ^1.1.1 + tslib: 1.14.1 + peerDependencies: + "@react-native-async-storage/async-storage": 1.x + lokijs: 1.x + peerDependenciesMeta: + "@react-native-async-storage/async-storage": + optional: true + lokijs: + optional: true + checksum: d695c2efcfa013a43cfaa20c85281df7d364a4452d11a4312a695298bd0e50d04b0e21c828f33f46fb020ea9796e60a6b23041a85f29bd10beeba7d0da24539f + languageName: node + linkType: hard + +"@walletconnect/legacy-client@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-client@npm:2.0.0" + dependencies: + "@walletconnect/crypto": ^1.0.3 + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.4 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: ^5.3.0 + query-string: ^6.13.5 + checksum: 57de9e373b24766e937734989080eb6d476e40d5406d4f817c989b278f25a09aa8636dfbe34a33f4de80ef90aea9641fdb7841007ecdba8e5ad47cd11614ee94 + languageName: node + linkType: hard + +"@walletconnect/legacy-modal@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-modal@npm:2.0.0" + dependencies: + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + copy-to-clipboard: ^3.3.3 + preact: ^10.12.0 + qrcode: ^1.5.1 + checksum: 897a02c9f4129a8f0b8e37832bf49a408e7e6f2828e78bea90c3718471cb57558f5522dd69c19456b5cc54a4aa04a4f7942f262ad9b031d318a5498ca0ca4078 + languageName: node + linkType: hard + +"@walletconnect/legacy-provider@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-provider@npm:2.0.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.4 + "@walletconnect/jsonrpc-provider": ^1.0.6 + "@walletconnect/legacy-client": ^2.0.0 + "@walletconnect/legacy-modal": ^2.0.0 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/legacy-utils": ^2.0.0 + checksum: 48adf2d938d3580be1dbaa4c7005cdf715896a56d3f4ab500c301cd5b442343c7df11bfccbc8e32bf9a7ba4b9a379208846ad848d79b1b6b511c1c4121fc83cf + languageName: node + linkType: hard + +"@walletconnect/legacy-types@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-types@npm:2.0.0" + dependencies: + "@walletconnect/jsonrpc-types": ^1.0.2 + checksum: 358d789f8a50e689edcfd8eb668fcdf8e1f03ab08757b12fad0e658ce7ef62268f8022502b476bce69e5165aa4454c4ad1ea41f17244ab8d0fcd9026bd94707c + languageName: node + linkType: hard + +"@walletconnect/legacy-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "@walletconnect/legacy-utils@npm:2.0.0" + dependencies: + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.4 + "@walletconnect/legacy-types": ^2.0.0 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: ^5.3.0 + query-string: ^6.13.5 + checksum: ea90e98c2f2f0a7f1d8801f7284bae909952979413b5d8e339004948199a2777af025195442a3c78a27aa3c16bb546ef54bf9c592e5622e1f003bef6d4b355ca + languageName: node + linkType: hard + +"@walletconnect/logger@npm:^2.0.1": + version: 2.0.1 + resolution: "@walletconnect/logger@npm:2.0.1" + dependencies: + pino: 7.11.0 + tslib: 1.14.1 + checksum: b686679d176d5d22a3441d93e71be2652e6c447682a6d6f014baf7c2d9dcd23b93e2f434d4410e33cc532d068333f6b3c1d899aeb0d6f60cc296ed17f57b0c2c + languageName: node + linkType: hard + +"@walletconnect/modal-core@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal-core@npm:2.6.2" + dependencies: + valtio: 1.11.2 + checksum: 94daceba50c323b06ecbeac2968d9f0972f327359c6118887c6526cd64006249b12f64322d71bc6c4a2b928436ecc89cf3d3af706511fcdc264c1f4b34a2dd5d + languageName: node + linkType: hard + +"@walletconnect/modal-ui@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal-ui@npm:2.6.2" + dependencies: + "@walletconnect/modal-core": 2.6.2 + lit: 2.8.0 + motion: 10.16.2 + qrcode: 1.5.3 + checksum: cd1ec0205eb491e529670599d3dd26f6782d7c5a99d5594bf6949a8c760c1c5f4eb6ed72b8662450774fe4e2dd47678f2c05145c8f2494bd7153446ddf4bd7ed + languageName: node + linkType: hard + +"@walletconnect/modal@npm:2.6.2": + version: 2.6.2 + resolution: "@walletconnect/modal@npm:2.6.2" + dependencies: + "@walletconnect/modal-core": 2.6.2 + "@walletconnect/modal-ui": 2.6.2 + checksum: 68b354d49960b96d22de0e47a3801df27c01a3e96ec5fbde3ca6df1344ca2b20668b0c4d58fe1803f5670ac7b7b4c6f5b7b405e354f5f9eaff5cca147c13de9c + languageName: node + linkType: hard + +"@walletconnect/randombytes@npm:^1.0.3": + version: 1.0.3 + resolution: "@walletconnect/randombytes@npm:1.0.3" + dependencies: + "@walletconnect/encoding": ^1.0.2 + "@walletconnect/environment": ^1.0.1 + randombytes: ^2.1.0 + tslib: 1.14.1 + checksum: 3ba1d5906299256c64affcd03348ec1397e2fadb1e60baaa13d4f46ba0267580fc354e67839d3fa4faa8abb375723f7ab96334b4e842f5814ce2080ed15f3578 + languageName: node + linkType: hard + +"@walletconnect/relay-api@npm:^1.0.9": + version: 1.0.9 + resolution: "@walletconnect/relay-api@npm:1.0.9" + dependencies: + "@walletconnect/jsonrpc-types": ^1.0.2 + tslib: 1.14.1 + checksum: 5870579b6552f1ce7351878f1acb8386b0c11288c64d39133c7cee5040feeb7ccf9114228d97a59749d60366ad107b097d656407d534567c24f5d3878ea6e246 + languageName: node + linkType: hard + +"@walletconnect/relay-auth@npm:^1.0.4": + version: 1.0.4 + resolution: "@walletconnect/relay-auth@npm:1.0.4" + dependencies: + "@stablelib/ed25519": ^1.0.2 + "@stablelib/random": ^1.0.1 + "@walletconnect/safe-json": ^1.0.1 + "@walletconnect/time": ^1.0.2 + tslib: 1.14.1 + uint8arrays: ^3.0.0 + checksum: 35b3229d7b57e74fdb8fe6827d8dd8291dc60bacda880a57b2acb47a34d38f12be46c971c9eff361eb4073e896648b550de7a7a3852ef3752f9619c08dfba891 + languageName: node + linkType: hard + +"@walletconnect/safe-json@npm:^1.0.1, @walletconnect/safe-json@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/safe-json@npm:1.0.2" + dependencies: + tslib: 1.14.1 + checksum: fee03fcc70adb5635ab9419ea6ec6555aa2467bef650ad3b9526451c3a5cf247836db0f3ae3bb435d2e585d99e50c2ebe7dc9c429cfa3df900cf3fe4bd06d37f + languageName: node + linkType: hard + +"@walletconnect/sign-client@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/sign-client@npm:2.10.1" + dependencies: + "@walletconnect/core": 2.10.1 + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-utils": 1.0.8 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.10.1 + "@walletconnect/utils": 2.10.1 + events: ^3.3.0 + checksum: dbdced8dece73b20ae73df9c0cf0d9e3eee753f6c81e264c87583ca60d1d13d4f7d61944e4b22d1f70c5f32424fd842a7de778838aa7d0ae27195976a86e102f + languageName: node + linkType: hard + +"@walletconnect/time@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/time@npm:1.0.2" + dependencies: + tslib: 1.14.1 + checksum: e3fc0113ca9e7ecedfc65f9e1517196682d5ffcda60750f51073b8d704719a17fea75da8b242c804bfa5b994707723043892a2db3cc86988b190b7b8711fe3c0 + languageName: node + linkType: hard + +"@walletconnect/types@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/types@npm:2.10.1" + dependencies: + "@walletconnect/events": ^1.0.1 + "@walletconnect/heartbeat": 1.2.1 + "@walletconnect/jsonrpc-types": 1.0.3 + "@walletconnect/keyvaluestorage": ^1.0.2 + "@walletconnect/logger": ^2.0.1 + events: ^3.3.0 + checksum: b663a236404bb423d3cc5cde656794ce42132f09193da5a51dac815d844f78eebb29c7275ebe10f6134492db21386ffd81b66ce42992332847b72c9128f74990 + languageName: node + linkType: hard + +"@walletconnect/universal-provider@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/universal-provider@npm:2.10.1" + dependencies: + "@walletconnect/jsonrpc-http-connection": ^1.0.7 + "@walletconnect/jsonrpc-provider": 1.0.13 + "@walletconnect/jsonrpc-types": ^1.0.2 + "@walletconnect/jsonrpc-utils": ^1.0.7 + "@walletconnect/logger": ^2.0.1 + "@walletconnect/sign-client": 2.10.1 + "@walletconnect/types": 2.10.1 + "@walletconnect/utils": 2.10.1 + events: ^3.3.0 + checksum: a33ad597a7601157cd96bceb7637c3463a5df981e5548c5343ab84f92c542bd7cae577fb2884d549164c9ad8262b097dc5fc0bc7fd9a515ee7c3f30b271cb034 + languageName: node + linkType: hard + +"@walletconnect/utils@npm:2.10.1": + version: 2.10.1 + resolution: "@walletconnect/utils@npm:2.10.1" + dependencies: + "@stablelib/chacha20poly1305": 1.0.1 + "@stablelib/hkdf": 1.0.1 + "@stablelib/random": ^1.0.2 + "@stablelib/sha256": 1.0.1 + "@stablelib/x25519": ^1.0.3 + "@walletconnect/relay-api": ^1.0.9 + "@walletconnect/safe-json": ^1.0.2 + "@walletconnect/time": ^1.0.2 + "@walletconnect/types": 2.10.1 + "@walletconnect/window-getters": ^1.0.1 + "@walletconnect/window-metadata": ^1.0.1 + detect-browser: 5.3.0 + query-string: 7.1.3 + uint8arrays: ^3.1.0 + checksum: 150d1a3c75ce0736ffc8ed8a844e3dc63476e556f7f308154ee6bc9d99e08907bc11a504b7ce3889951293b48d9eef4e32b84de1c7f27b7a84e6731a7bb65189 + languageName: node + linkType: hard + +"@walletconnect/window-getters@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-getters@npm:1.0.1" + dependencies: + tslib: 1.14.1 + checksum: fae312c4e1be5574d97f071de58e6aa0d0296869761499caf9d4a9a5fd2643458af32233a2120521b00873a599ff88457d405bd82ced5fb5bd6dc3191c07a3e5 + languageName: node + linkType: hard + +"@walletconnect/window-metadata@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-metadata@npm:1.0.1" + dependencies: + "@walletconnect/window-getters": ^1.0.1 + tslib: 1.14.1 + checksum: e82aea7195c6fe95c00e87bb38051c5549838c2e8302da94f1afa48206f79f0b620166c9820f847494505d282d1568e2086a1561b0493d2d0a1fa115f9106aef + languageName: node + linkType: hard + +"@web-std/blob@npm:^3.0.1, @web-std/blob@npm:^3.0.3, @web-std/blob@npm:^3.0.4": + version: 3.0.5 + resolution: "@web-std/blob@npm:3.0.5" + dependencies: + "@web-std/stream": 1.0.0 + web-encoding: 1.1.5 + checksum: 898b92285b96aae959546a49b9a0a308f4d4745eb1b7d740ae08955bbd2e32879abc9a68762d918d688c4d8a6e8dc34bebeb996b3bd7942dacf6a11d1f877435 + languageName: node + linkType: hard + +"@web-std/fetch@npm:^4.1.0, @web-std/fetch@npm:^4.1.2": + version: 4.2.1 + resolution: "@web-std/fetch@npm:4.2.1" + dependencies: + "@web-std/blob": ^3.0.3 + "@web-std/file": ^3.0.2 + "@web-std/form-data": ^3.0.2 + "@web-std/stream": ^1.0.1 + "@web3-storage/multipart-parser": ^1.0.0 + abort-controller: ^3.0.0 + data-uri-to-buffer: ^3.0.1 + mrmime: ^1.0.0 + checksum: e926301432d051ae7a23b241855119a0685478eb4ec830b7c9ae6d07db4dcc16da088992fc18da68268187a911fc6f0c5314d6c2ad9aa5f6c2564cf1f4e15ed5 + languageName: node + linkType: hard + +"@web-std/file@npm:^3.0.2": + version: 3.0.3 + resolution: "@web-std/file@npm:3.0.3" + dependencies: + "@web-std/blob": ^3.0.3 + checksum: 0f9e86288c34cb1771f291075dee8e57cded07c55694c0b94ac1e0fadca87a7db7974b1ae1fe86caaefa03e703d3e86722ac654e60925215a5a69e1a0c987d97 + languageName: node + linkType: hard + +"@web-std/form-data@npm:^3.0.2": + version: 3.1.0 + resolution: "@web-std/form-data@npm:3.1.0" + dependencies: + web-encoding: 1.1.5 + checksum: c52e18159be74c93b463238a2551947954697d0b32c4a3feeb9d570635574ceaea242fe138f42a49885e426ea398b0e3ad7cd1300ef58a74bd9515ad83bf4868 + languageName: node + linkType: hard + +"@web-std/stream@npm:1.0.0": + version: 1.0.0 + resolution: "@web-std/stream@npm:1.0.0" + dependencies: + web-streams-polyfill: ^3.1.1 + checksum: 247cc704b5dc18c3e7dac70c02efbbca83357fc237a0b8b2011814a246e6710a0dd403770b756d763ef545c7a118524e405b76cb7c7ac00afea0250171fdd68c + languageName: node + linkType: hard + +"@web-std/stream@npm:^1.0.1": + version: 1.0.3 + resolution: "@web-std/stream@npm:1.0.3" + dependencies: + web-streams-polyfill: ^3.1.1 + checksum: 480ef4373c7da42247fd7b58f5da17db230a397ca8d78f365076db2383104169b55407732a384334b8327cd541e532f619a31b3a9a807a5b3851e1e5fa6707a5 + languageName: node + linkType: hard + +"@web3-react/abstract-connector@npm:^6.0.7": + version: 6.0.7 + resolution: "@web3-react/abstract-connector@npm:6.0.7" + dependencies: + "@web3-react/types": ^6.0.7 + checksum: fa8b0ea3586e248da84756979dd5c5f6ddc2d1657a1698de63a6d0e38035c4b122841bd0e6b00f1a6f1825614b22f6552a584cafec3470ca6fbc2e127ab30b2a + languageName: node + linkType: hard + +"@web3-react/core@npm:^8.2.2": + version: 8.2.3 + resolution: "@web3-react/core@npm:8.2.3" + dependencies: + "@ethersproject/providers": ^5 + "@web3-react/store": ^8.2.3 + "@web3-react/types": ^8.2.3 + zustand: 4.4.0 + peerDependencies: + react: ">=16.8" + dependenciesMeta: + "@ethersproject/providers": + optional: true + checksum: 23aff5864c580c1799f75dea3edbeef7270a553fed5f8569cca42687f51e9b55b6d46c87104f5c66f49b66caffba3ea581726ecab2b39807319b192d0e0909c4 + languageName: node + linkType: hard + +"@web3-react/injected-connector@npm:^6.0.7": + version: 6.0.7 + resolution: "@web3-react/injected-connector@npm:6.0.7" + dependencies: + "@web3-react/abstract-connector": ^6.0.7 + "@web3-react/types": ^6.0.7 + tiny-warning: ^1.0.3 + checksum: 867a634a12326f33d10eead26f557fe505942ec42f5586d0756eb864fa345187b255a7d9b78bd555eb2395f962e9615731bcfefe6cf07ef9971a7fca151377f8 + languageName: node + linkType: hard + +"@web3-react/store@npm:^8.2.3": + version: 8.2.3 + resolution: "@web3-react/store@npm:8.2.3" + dependencies: + "@ethersproject/address": ^5 + "@web3-react/types": ^8.2.3 + zustand: 4.4.0 + checksum: 97f8984f82b597e5a0bd012b416d2935c4d92cb2d11398e4b6194c338b796e9c0af94cef5414689cb7ed08f670021c87159c3bdb49aa8c7810480fffc804bf6c + languageName: node + linkType: hard + +"@web3-react/types@npm:^6.0.7": + version: 6.0.7 + resolution: "@web3-react/types@npm:6.0.7" + checksum: 29ae264ae4a126e520a64a4b466ea712ee09b934f3fe13b957e09269249ffc882712cf11fff12c1c19dd66e38503075b4adf5e9d5f588ea0dd31bbedf6fa9a42 + languageName: node + linkType: hard + +"@web3-react/types@npm:^8.2.3": + version: 8.2.3 + resolution: "@web3-react/types@npm:8.2.3" + dependencies: + zustand: 4.4.0 + checksum: 30c1d3c98a36f5cdde8deb949ae71bc55afbfc3609d75bf7c5ec9f89a11d69c58a41ce5fc5aea5c73ed7abcc8b90bf5a9cdb5dba8cb778a9ea41921bf73cb3e9 + languageName: node + linkType: hard + +"@web3-storage/multipart-parser@npm:^1.0.0": + version: 1.0.0 + resolution: "@web3-storage/multipart-parser@npm:1.0.0" + checksum: d8bbb5b9b0a5c07b4119c33c64ef4b7cc8d74ca4de2dd783f608f2653f81ef298bf04136b7cdb7ce97306d5fe2217572b5655236b70e1b625ed18d4a21a81913 + languageName: node + linkType: hard + +"@web3-storage/parse-link-header@npm:^3.1.0": + version: 3.1.0 + resolution: "@web3-storage/parse-link-header@npm:3.1.0" + checksum: e91ce3ad25162ca84ecb8d607f54afc166ab91700c507a9cc81dac4ac6231d51cd307efdf1752f227046ef2cf255ada5e8fb6269703080f95a49b07ec90834a5 + languageName: node + linkType: hard + +"@xmtp/content-type-remote-attachment@npm:^1.0.7": + version: 1.1.2 + resolution: "@xmtp/content-type-remote-attachment@npm:1.1.2" + dependencies: + "@noble/secp256k1": ^1.7.1 + "@xmtp/proto": ^3.27.0 + "@xmtp/xmtp-js": ^11.1.1 + peerDependencies: + "@xmtp/xmtp-js": ^11.1.1 + checksum: 7d20edf0252caaaecac1aa2fdc811e494a86d7788b90f423e2487e0164669f3174dca12869cfde46112662a400e6feed454a63bbdaef427ed50e31fad7b4307e + languageName: node + linkType: hard + +"@xmtp/proto@npm:^3.27.0, @xmtp/proto@npm:^3.28.0-beta.1": + version: 3.28.0 + resolution: "@xmtp/proto@npm:3.28.0" + dependencies: + long: ^5.2.0 + protobufjs: ^7.0.0 + rxjs: ^7.8.0 + undici: ^5.8.1 + checksum: 517016070568082ac8d6bfb1ebd51980b4119c2d05700b00b71b7af7be642cf798aa74e94a234ae692ff857ccd1505270685a7d826e5ee6b1fbb83e8167864d1 + languageName: node + linkType: hard + +"@xmtp/xmtp-js@npm:^11.1.1": + version: 11.1.1 + resolution: "@xmtp/xmtp-js@npm:11.1.1" + dependencies: + "@noble/secp256k1": ^1.5.2 + "@xmtp/proto": ^3.28.0-beta.1 + async-mutex: ^0.4.0 + elliptic: ^6.5.4 + ethers: ^5.5.3 + long: ^5.2.0 + checksum: 208c5606c1d207d8141867067708b872a495cad27ca3327f0797479ac76f3e6c5d2c163bf6c2416cf7b06a33bcb3e00ee51077d902236339e4387bc2113bfa90 + languageName: node + linkType: hard + +"@zxing/text-encoding@npm:0.9.0": + version: 0.9.0 + resolution: "@zxing/text-encoding@npm:0.9.0" + checksum: c23b12aee7639382e4949961304a1294776afaffa40f579e09ffecd0e5e68cf26ef3edd75009de46da8a536e571448755ca68b3e2ea707d53793c0edb2e2c34a + languageName: node + linkType: hard + +"JSONStream@npm:^1.3.5": + version: 1.3.5 + resolution: "JSONStream@npm:1.3.5" + dependencies: + jsonparse: ^1.2.0 + through: ">=2.2.7 <3" + bin: + JSONStream: ./bin.js + checksum: 2605fa124260c61bad38bb65eba30d2f72216a78e94d0ab19b11b4e0327d572b8d530c0c9cc3b0764f727ad26d39e00bf7ebad57781ca6368394d73169c59e46 + languageName: node + linkType: hard + +"JSV@npm:^4.0.x": + version: 4.0.2 + resolution: "JSV@npm:4.0.2" + checksum: 9e2e070b2149d4ffed6c135dedb5f8cebb870dc63c0ca6d3cb647067248c7ca15d1a934ee46e9d2ac0e468436d0f70bc1b63cd5f93e705ee9aa0669430e6e66f + languageName: node + linkType: hard + +"abbrev@npm:^1.0.0": + version: 1.1.1 + resolution: "abbrev@npm:1.1.1" + checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 0e994ad2aa6575f94670d8a2149afe94465de9cedaaaac364e7fb43a40c3691c980ff74899f682f4ca58fa96b4cbd7421a015d3a6defe43a442117d7821a2f36 + languageName: node + linkType: hard + +"abitype@npm:0.8.7": + version: 0.8.7 + resolution: "abitype@npm:0.8.7" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + checksum: 4351466808969bcc73e5c535c3d96bb687ee2be0bccd48eba024c47e6cc248f0c8bd368f9e42dab35d39923e63b1349ade470f72812de27127968caf1a1426c9 + languageName: node + linkType: hard + +"abitype@npm:0.9.8": + version: 0.9.8 + resolution: "abitype@npm:0.9.8" + peerDependencies: + typescript: ">=5.0.4" + zod: ^3 >=3.19.1 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + checksum: d7d887f29d6821e3f7a400de9620511b80ead3f85c5c87308aaec97965d3493e6687ed816e88722b4f512249bd66dee9e69231b49af0e1db8f69400a62c87cf6 + languageName: node + linkType: hard + +"abort-controller@npm:^3.0.0": + version: 3.0.0 + resolution: "abort-controller@npm:3.0.0" + dependencies: + event-target-shim: ^5.0.0 + checksum: 170bdba9b47b7e65906a28c8ce4f38a7a369d78e2271706f020849c1bfe0ee2067d4261df8bbb66eb84f79208fd5b710df759d64191db58cfba7ce8ef9c54b75 + languageName: node + linkType: hard + +"acorn-jsx@npm:^5.0.0, acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1": + version: 8.2.0 + resolution: "acorn-walk@npm:8.2.0" + checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 + languageName: node + linkType: hard + +"acorn@npm:^8.0.0, acorn@npm:^8.10.0, acorn@npm:^8.4.1, acorn@npm:^8.9.0": + version: 8.10.0 + resolution: "acorn@npm:8.10.0" + bin: + acorn: bin/acorn + checksum: 538ba38af0cc9e5ef983aee196c4b8b4d87c0c94532334fa7e065b2c8a1f85863467bb774231aae91613fcda5e68740c15d97b1967ae3394d20faddddd8af61d + languageName: node + linkType: hard + +"aes-js@npm:3.0.0": + version: 3.0.0 + resolution: "aes-js@npm:3.0.0" + checksum: 251e26d533cd1a915b44896b17d5ed68c24a02484cfdd2e74ec700a309267db96651ea4eb657bf20aac32a3baa61f6e34edf8e2fec2de440a655da9942d334b8 + languageName: node + linkType: hard + +"aes-js@npm:^3.1.2": + version: 3.1.2 + resolution: "aes-js@npm:3.1.2" + checksum: 062154d50b1e433cc8c3b8ca7879f3a6375d5e79c2a507b2b6c4ec920b4cd851bf2afa7f65c98761a9da89c0ab618cbe6529e8e9a1c71f93290b53128fb8f712 + languageName: node + linkType: hard + +"agent-base@npm:6, agent-base@npm:^6.0.2": + version: 6.0.2 + resolution: "agent-base@npm:6.0.2" + dependencies: + debug: 4 + checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1, agentkeepalive@npm:^4.3.0": + version: 4.5.0 + resolution: "agentkeepalive@npm:4.5.0" + dependencies: + humanize-ms: ^1.2.1 + checksum: 13278cd5b125e51eddd5079f04d6fe0914ac1b8b91c1f3db2c1822f99ac1a7457869068997784342fe455d59daaff22e14fb7b8c3da4e741896e7e31faf92481 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: ^2.0.0 + indent-string: ^4.0.0 + checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 + languageName: node + linkType: hard + +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: ^3.1.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.2 + checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 + languageName: node + linkType: hard + +"ansi-escapes@npm:^4.2.1": + version: 4.3.2 + resolution: "ansi-escapes@npm:4.3.2" + dependencies: + type-fest: ^0.21.3 + checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 + languageName: node + linkType: hard + +"ansi-escapes@npm:^5.0.0": + version: 5.0.0 + resolution: "ansi-escapes@npm:5.0.0" + dependencies: + type-fest: ^1.0.2 + checksum: d4b5eb8207df38367945f5dd2ef41e08c28edc192dc766ef18af6b53736682f49d8bfcfa4e4d6ecbc2e2f97c258fda084fb29a9e43b69170b71090f771afccac + languageName: node + linkType: hard + +"ansi-regex@npm:^2.0.0": + version: 2.1.1 + resolution: "ansi-regex@npm:2.1.1" + checksum: 190abd03e4ff86794f338a31795d262c1dfe8c91f7e01d04f13f646f1dcb16c5800818f886047876f1272f065570ab86b24b99089f8b68a0e11ff19aed4ca8f1 + languageName: node + linkType: hard + +"ansi-regex@npm:^3.0.0": + version: 3.0.1 + resolution: "ansi-regex@npm:3.0.1" + checksum: 09daf180c5f59af9850c7ac1bd7fda85ba596cc8cbeb210826e90755f06c818af86d9fa1e6e8322fab2c3b9e9b03f56c537b42241139f824dd75066a1e7257cc + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.0.1 + resolution: "ansi-regex@npm:6.0.1" + checksum: 1ff8b7667cded1de4fa2c9ae283e979fc87036864317da86a2e546725f96406746411d0d85e87a2d12fa5abd715d90006de7fa4fa0477c92321ad3b4c7d4e169 + languageName: node + linkType: hard + +"ansi-styles@npm:^2.2.1": + version: 2.2.1 + resolution: "ansi-styles@npm:2.2.1" + checksum: ebc0e00381f2a29000d1dac8466a640ce11943cef3bda3cd0020dc042e31e1058ab59bf6169cd794a54c3a7338a61ebc404b7c91e004092dd20e028c432c9c2c + languageName: node + linkType: hard + +"ansi-styles@npm:^3.2.0, ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: ^1.9.0 + checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: ^2.0.1 + checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 + languageName: node + linkType: hard + +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 + languageName: node + linkType: hard + +"ansi-styles@npm:~1.0.0": + version: 1.0.0 + resolution: "ansi-styles@npm:1.0.0" + checksum: 6dd47dccb268b4cc1fd0dd6617067a7acd34ad2761f0438800fdd55c0d45f50a90787acd82806009c2bf467f4e2920166be03e19b23529038c1c4527d80f598b + languageName: node + linkType: hard + +"any-signal@npm:^2.1.2": + version: 2.1.2 + resolution: "any-signal@npm:2.1.2" + dependencies: + abort-controller: ^3.0.0 + native-abort-controller: ^1.0.3 + checksum: 498603e30357f82e438ddc972086b3180ddbaf5ea9772f535d103b754711eb13d4c24577e497d5a1146e571ee38f167c316ace7dc1a03b62a8a8c7677e9d660f + languageName: node + linkType: hard + +"any-signal@npm:^3.0.0": + version: 3.0.1 + resolution: "any-signal@npm:3.0.1" + checksum: 073eb14c365b7552f9f16fbf36cd76171e4a0fe156a8faa865fe1d5ac4ed2f5c5ab6e3faad0ac0d4c69511b5892971c5573baa8a1cbf85fe250d0c54ff0734ff + languageName: node + linkType: hard + +"anymatch@npm:^3.0.3": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: ^3.0.0 + picomatch: ^2.0.4 + checksum: 3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + +"aproba@npm:^1.0.3 || ^2.0.0": + version: 2.0.0 + resolution: "aproba@npm:2.0.0" + checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 + languageName: node + linkType: hard + +"are-we-there-yet@npm:^3.0.0": + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" + dependencies: + delegates: ^1.0.0 + readable-stream: ^3.6.0 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: ~1.0.2 + checksum: 7ca6e45583a28de7258e39e13d81e925cfa25d7d4aacbf806a382d3c02fcb13403a07fb8aeef949f10a7cfe4a62da0e2e807b348a5980554cc28ee573ef95945 + languageName: node + linkType: hard + +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced + languageName: node + linkType: hard + +"aria-hidden@npm:^1.1.1": + version: 1.2.3 + resolution: "aria-hidden@npm:1.2.3" + dependencies: + tslib: ^2.0.0 + checksum: 7d7d211629eef315e94ed3b064c6823d13617e609d3f9afab1c2ed86399bb8e90405f9bdd358a85506802766f3ecb468af985c67c846045a34b973bcc0289db9 + languageName: node + linkType: hard + +"aria-query@npm:5.1.3": + version: 5.1.3 + resolution: "aria-query@npm:5.1.3" + dependencies: + deep-equal: ^2.0.5 + checksum: 929ff95f02857b650fb4cbcd2f41072eee2f46159a6605ea03bf63aa572e35ffdff43d69e815ddc462e16e07de8faba3978afc2813650b4448ee18c9895d982b + languageName: node + linkType: hard + +"aria-query@npm:^5.1.3": + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" + dependencies: + dequal: ^2.0.3 + checksum: 305bd73c76756117b59aba121d08f413c7ff5e80fa1b98e217a3443fcddb9a232ee790e24e432b59ae7625aebcf4c47cb01c2cac872994f0b426f5bdfcd96ba9 + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "array-buffer-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + is-array-buffer: ^3.0.1 + checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + languageName: node + linkType: hard + +"array-includes@npm:^3.1.6": + version: 3.1.7 + resolution: "array-includes@npm:3.1.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + is-string: ^1.0.7 + checksum: 06f9e4598fac12a919f7c59a3f04f010ea07f0b7f0585465ed12ef528a60e45f374e79d1bddbb34cdd4338357d00023ddbd0ac18b0be36964f5e726e8965d7fc + languageName: node + linkType: hard + +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d + languageName: node + linkType: hard + +"array.prototype.every@npm:^1.1.5": + version: 1.1.5 + resolution: "array.prototype.every@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + is-string: ^1.0.7 + checksum: 9974435604e135fc8c359a76c89bfe0672c1a80974a76dc61c673e5ea5068f78a31b7a168634ed7691501130ed61d3c788dd1d48ec1265c6cdf3910897b1eba4 + languageName: node + linkType: hard + +"array.prototype.findlastindex@npm:^1.2.2": + version: 1.2.3 + resolution: "array.prototype.findlastindex@npm:1.2.3" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.2.1 + checksum: 31f35d7b370c84db56484618132041a9af401b338f51899c2e78ef7690fbba5909ee7ca3c59a7192085b328cc0c68c6fd1f6d1553db01a689a589ae510f3966e + languageName: node + linkType: hard + +"array.prototype.flat@npm:^1.3.1": + version: 1.3.2 + resolution: "array.prototype.flat@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: 5d6b4bf102065fb3f43764bfff6feb3295d372ce89591e6005df3d0ce388527a9f03c909af6f2a973969a4d178ab232ffc9236654149173e0e187ec3a1a6b87b + languageName: node + linkType: hard + +"array.prototype.flatmap@npm:^1.3.1": + version: 1.3.2 + resolution: "array.prototype.flatmap@npm:1.3.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + checksum: ce09fe21dc0bcd4f30271f8144083aa8c13d4639074d6c8dc82054b847c7fc9a0c97f857491f4da19d4003e507172a78f4bcd12903098adac8b9cd374f734be3 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.1": + version: 1.1.2 + resolution: "array.prototype.tosorted@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.2.1 + checksum: 3607a7d6b117f0ffa6f4012457b7af0d47d38cf05e01d50e09682fd2fb782a66093a5e5fbbdbad77c8c824794a9d892a51844041641f719ad41e3a974f0764de + languageName: node + linkType: hard + +"arraybuffer.prototype.slice@npm:^1.0.2": + version: 1.0.2 + resolution: "arraybuffer.prototype.slice@npm:1.0.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + is-array-buffer: ^3.0.2 + is-shared-array-buffer: ^1.0.2 + checksum: c200faf437786f5b2c80d4564ff5481c886a16dee642ef02abdc7306c7edd523d1f01d1dd12b769c7eb42ac9bc53874510db19a92a2c035c0f6696172aafa5d3 + languageName: node + linkType: hard + +"arrify@npm:^1.0.1": + version: 1.0.1 + resolution: "arrify@npm:1.0.1" + checksum: 745075dd4a4624ff0225c331dacb99be501a515d39bcb7c84d24660314a6ec28e68131b137e6f7e16318170842ce97538cd298fc4cd6b2cc798e0b957f2747e7 + languageName: node + linkType: hard + +"asn1.js@npm:^5.0.0": + version: 5.4.1 + resolution: "asn1.js@npm:5.4.1" + dependencies: + bn.js: ^4.0.0 + inherits: ^2.0.1 + minimalistic-assert: ^1.0.0 + safer-buffer: ^2.1.0 + checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a + languageName: node + linkType: hard + +"ast-types-flow@npm:^0.0.7": + version: 0.0.7 + resolution: "ast-types-flow@npm:0.0.7" + checksum: a26dcc2182ffee111cad7c471759b0bda22d3b7ebacf27c348b22c55f16896b18ab0a4d03b85b4020dce7f3e634b8f00b593888f622915096ea1927fa51866c4 + languageName: node + linkType: hard + +"async-mutex@npm:^0.2.6": + version: 0.2.6 + resolution: "async-mutex@npm:0.2.6" + dependencies: + tslib: ^2.0.0 + checksum: f50102e0c57f6a958528cff7dff13da070897f17107b42274417a7248905b927b6e51c3387f8aed1f5cd6005b0e692d64a83a0789be602e4e7e7da4afe08b889 + languageName: node + linkType: hard + +"async-mutex@npm:^0.4.0": + version: 0.4.0 + resolution: "async-mutex@npm:0.4.0" + dependencies: + tslib: ^2.4.0 + checksum: 813a71728b35a4fbfd64dba719f04726d9133c67b577fcd951b7028c4a675a13ee34e69beb82d621f87bf81f5d4f135c4c44be0448550c7db728547244ef71fc + languageName: node + linkType: hard + +"asynciterator.prototype@npm:^1.0.0": + version: 1.0.0 + resolution: "asynciterator.prototype@npm:1.0.0" + dependencies: + has-symbols: ^1.0.3 + checksum: e8ebfd9493ac651cf9b4165e9d64030b3da1d17181bb1963627b59e240cdaf021d9b59d44b827dc1dde4e22387ec04c2d0f8720cf58a1c282e34e40cc12721b3 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: b95275afb2f80732f22f43a60178430c468906a415a7ff18bcd0feeebc8eec3930b51250aeda91a476062a90e07132b43a1794e8d8ffcf9b650e8139be75fa36 + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.5": + version: 1.0.5 + resolution: "available-typed-arrays@npm:1.0.5" + checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a + languageName: node + linkType: hard + +"axe-core@npm:^4.6.2": + version: 4.8.2 + resolution: "axe-core@npm:4.8.2" + checksum: 8c19f507dabfcb8514e4280c7fc66e85143be303ddb57ec9f119338021228dc9b80560993938003837bda415fde7c07bba3a96560008ffa5f4145a248ed8f5fe + languageName: node + linkType: hard + +"axios@npm:^0.27.2": + version: 0.27.2 + resolution: "axios@npm:0.27.2" + dependencies: + follow-redirects: ^1.14.9 + form-data: ^4.0.0 + checksum: 38cb7540465fe8c4102850c4368053c21683af85c5fdf0ea619f9628abbcb59415d1e22ebc8a6390d2bbc9b58a9806c874f139767389c862ec9b772235f06854 + languageName: node + linkType: hard + +"axobject-query@npm:^3.1.1": + version: 3.2.1 + resolution: "axobject-query@npm:3.2.1" + dependencies: + dequal: ^2.0.3 + checksum: a94047e702b57c91680e6a952ec4a1aaa2cfd0d80ead76bc8c954202980d8c51968a6ea18b4d8010e8e2cf95676533d8022a8ebba9abc1dfe25686721df26fd2 + languageName: node + linkType: hard + +"babel-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "babel-jest@npm:29.7.0" + dependencies: + "@jest/transform": ^29.7.0 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.6.3 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: ee6f8e0495afee07cac5e4ee167be705c711a8cc8a737e05a587a131fdae2b3c8f9aa55dfd4d9c03009ac2d27f2de63d8ba96d3e8460da4d00e8af19ef9a83f7 + languageName: node + linkType: hard + +"babel-plugin-istanbul@npm:^6.1.1": + version: 6.1.1 + resolution: "babel-plugin-istanbul@npm:6.1.1" + dependencies: + "@babel/helper-plugin-utils": ^7.0.0 + "@istanbuljs/load-nyc-config": ^1.0.0 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-instrument: ^5.0.4 + test-exclude: ^6.0.0 + checksum: cb4fd95738219f232f0aece1116628cccff16db891713c4ccb501cddbbf9272951a5df81f2f2658dfdf4b3e7b236a9d5cbcf04d5d8c07dd5077297339598061a + languageName: node + linkType: hard + +"babel-plugin-jest-hoist@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-plugin-jest-hoist@npm:29.6.3" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 51250f22815a7318f17214a9d44650ba89551e6d4f47a2dc259128428324b52f5a73979d010cefd921fd5a720d8c1d55ad74ff601cd94c7bd44d5f6292fde2d1 + languageName: node + linkType: hard + +"babel-plugin-macros@npm:^3.1.0": + version: 3.1.0 + resolution: "babel-plugin-macros@npm:3.1.0" + dependencies: + "@babel/runtime": ^7.12.5 + cosmiconfig: ^7.0.0 + resolve: ^1.19.0 + checksum: 765de4abebd3e4688ebdfbff8571ddc8cd8061f839bb6c3e550b0344a4027b04c60491f843296ce3f3379fb356cc873d57a9ee6694262547eb822c14a25be9a6 + languageName: node + linkType: hard + +"babel-plugin-styled-components@npm:>= 1.12.0": + version: 2.1.4 + resolution: "babel-plugin-styled-components@npm:2.1.4" + dependencies: + "@babel/helper-annotate-as-pure": ^7.22.5 + "@babel/helper-module-imports": ^7.22.5 + "@babel/plugin-syntax-jsx": ^7.22.5 + lodash: ^4.17.21 + picomatch: ^2.3.1 + peerDependencies: + styled-components: ">= 2" + checksum: d791aed68d975dae4f73055f86cd47afa99cb402b8113acdaf5678c8b6fba2cbc15543f2debe8ed09becb198aae8be2adfe268ad41f4bca917288e073a622bf8 + languageName: node + linkType: hard + +"babel-preset-current-node-syntax@npm:^1.0.0": + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" + dependencies: + "@babel/plugin-syntax-async-generators": ^7.8.4 + "@babel/plugin-syntax-bigint": ^7.8.3 + "@babel/plugin-syntax-class-properties": ^7.8.3 + "@babel/plugin-syntax-import-meta": ^7.8.3 + "@babel/plugin-syntax-json-strings": ^7.8.3 + "@babel/plugin-syntax-logical-assignment-operators": ^7.8.3 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + "@babel/plugin-syntax-numeric-separator": ^7.8.3 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + "@babel/plugin-syntax-top-level-await": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + languageName: node + linkType: hard + +"babel-preset-jest@npm:^29.6.3": + version: 29.6.3 + resolution: "babel-preset-jest@npm:29.6.3" + dependencies: + babel-plugin-jest-hoist: ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: aa4ff2a8a728d9d698ed521e3461a109a1e66202b13d3494e41eea30729a5e7cc03b3a2d56c594423a135429c37bf63a9fa8b0b9ce275298be3095a88c69f6fb + languageName: node + linkType: hard + +"bail@npm:^2.0.0": + version: 2.0.2 + resolution: "bail@npm:2.0.2" + checksum: aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 + languageName: node + linkType: hard + +"base-x@npm:^3.0.2": + version: 3.0.9 + resolution: "base-x@npm:3.0.9" + dependencies: + safe-buffer: ^5.0.1 + checksum: 957101d6fd09e1903e846fd8f69fd7e5e3e50254383e61ab667c725866bec54e5ece5ba49ce385128ae48f9ec93a26567d1d5ebb91f4d56ef4a9cc0d5a5481e8 + languageName: node + linkType: hard + +"base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 + languageName: node + linkType: hard + +"bech32@npm:1.1.4": + version: 1.1.4 + resolution: "bech32@npm:1.1.4" + checksum: 0e98db619191548390d6f09ff68b0253ba7ae6a55db93dfdbb070ba234c1fd3308c0606fbcc95fad50437227b10011e2698b89f0181f6e7f845c499bd14d0f4b + languageName: node + linkType: hard + +"big-integer@npm:^1.6.16, big-integer@npm:^1.6.44": + version: 1.6.51 + resolution: "big-integer@npm:1.6.51" + checksum: 3d444173d1b2e20747e2c175568bedeebd8315b0637ea95d75fd27830d3b8e8ba36c6af40374f36bdaea7b5de376dcada1b07587cb2a79a928fccdb6e6e3c518 + languageName: node + linkType: hard + +"bigint-buffer@npm:^1.1.5": + version: 1.1.5 + resolution: "bigint-buffer@npm:1.1.5" + dependencies: + bindings: ^1.3.0 + node-gyp: latest + checksum: d010c9f57758bcdaccb435d88b483ffcc95fe8bbc6e7fb3a44fb5221f29c894ffaf4a3c5a4a530e0e7d6608203c2cde9b79ee4f2386cd6d4462d1070bc8c9f4e + languageName: node + linkType: hard + +"bind-decorator@npm:^1.0.11": + version: 1.0.11 + resolution: "bind-decorator@npm:1.0.11" + checksum: 41b6c69af51ee7e6e01ea6f2939df94c9c760383f89f5befda0890951657baedbf499a0b96a789fd85cb77252465134f4e6184aae6639ed60cf59549ef15353d + languageName: node + linkType: hard + +"bindings@npm:^1.3.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: 1.0.0 + checksum: 65b6b48095717c2e6105a021a7da4ea435aa8d3d3cd085cb9e85bcb6e5773cf318c4745c3f7c504412855940b585bdf9b918236612a1c7a7942491de176f1ae7 + languageName: node + linkType: hard + +"bl@npm:^5.0.0": + version: 5.1.0 + resolution: "bl@npm:5.1.0" + dependencies: + buffer: ^6.0.3 + inherits: ^2.0.4 + readable-stream: ^3.4.0 + checksum: a7a438ee0bc540e80b8eb68cc1ad759a9c87df06874a99411d701d01cc0b36f30cd20050512ac3e77090138890960e07bfee724f3ee6619bb39a569f5cc3b1bc + languageName: node + linkType: hard + +"blob-to-it@npm:^1.0.1": + version: 1.0.4 + resolution: "blob-to-it@npm:1.0.4" + dependencies: + browser-readablestream-to-it: ^1.0.3 + checksum: e7fbebe5bd7b8187a4a88203639777456596a0cc68372e7b2dbcfbae6dea2b80e2a89522140039b538140bc3e3a6b1e90d1778e725eb8899070f799e61591751 + languageName: node + linkType: hard + +"blockstore-core@npm:^1.0.2": + version: 1.0.5 + resolution: "blockstore-core@npm:1.0.5" + dependencies: + err-code: ^3.0.1 + interface-blockstore: ^2.0.2 + interface-store: ^2.0.1 + it-all: ^1.0.4 + it-drain: ^1.0.4 + it-filter: ^1.0.2 + it-take: ^1.0.1 + multiformats: ^9.4.7 + checksum: 164e067c132a7e29e665794a84a1e71d7b959898c7b247ae4446fdbc6a23b08eca35c560a667ff5a53bf034b07acae5b9c0f90c872a22cb2f41729cb4a67fad7 + languageName: node + linkType: hard + +"bluebird@npm:^3.7.2": + version: 3.7.2 + resolution: "bluebird@npm:3.7.2" + checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef + languageName: node + linkType: hard + +"bn.js@npm:^4.0.0, bn.js@npm:^4.11.9, bn.js@npm:^4.12.0, bn.js@npm:^4.4.0": + version: 4.12.0 + resolution: "bn.js@npm:4.12.0" + checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 + languageName: node + linkType: hard + +"bn.js@npm:^5.1.1, bn.js@npm:^5.2.0, bn.js@npm:^5.2.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 + languageName: node + linkType: hard + +"borsh@npm:^0.7.0": + version: 0.7.0 + resolution: "borsh@npm:0.7.0" + dependencies: + bn.js: ^5.2.0 + bs58: ^4.0.0 + text-encoding-utf-8: ^1.0.2 + checksum: e98bfb5f7cfb820819c2870b884dac58dd4b4ce6a86c286c8fbf5c9ca582e73a8c6094df67e81a28c418ff07a309c6b118b2e27fdfea83fd92b8100c741da0b5 + languageName: node + linkType: hard + +"bplist-parser@npm:^0.2.0": + version: 0.2.0 + resolution: "bplist-parser@npm:0.2.0" + dependencies: + big-integer: ^1.6.44 + checksum: d5339dd16afc51de6c88f88f58a45b72ed6a06aa31f5557d09877575f220b7c1d3fbe375da0b62e6a10d4b8ed80523567e351f24014f5bc886ad523758142cdd + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: ^1.0.0 + concat-map: 0.0.1 + checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: ^1.0.0 + checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 + languageName: node + linkType: hard + +"braces@npm:^3.0.2": + version: 3.0.2 + resolution: "braces@npm:3.0.2" + dependencies: + fill-range: ^7.0.1 + checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + languageName: node + linkType: hard + +"broadcast-channel@npm:^3.4.1": + version: 3.7.0 + resolution: "broadcast-channel@npm:3.7.0" + dependencies: + "@babel/runtime": ^7.7.2 + detect-node: ^2.1.0 + js-sha3: 0.8.0 + microseconds: 0.2.0 + nano-time: 1.0.0 + oblivious-set: 1.0.0 + rimraf: 3.0.2 + unload: 2.2.0 + checksum: 803794c48dcce7f03aca69797430bd8b1c4cfd70b7de22079cd89567eeffaa126a1db98c7c2d86af8131d9bb41ed367c0fef96dfb446151c927b831572c621fc + languageName: node + linkType: hard + +"brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 8a05c9f3c4b46572dec6ef71012b1946db6cae8c7bb60ccd4b7dd5a84655db49fe043ecc6272e7ef1f69dc53d6730b9e2a3a03a8310509a3d797a618cbee52be + languageName: node + linkType: hard + +"browser-readablestream-to-it@npm:^1.0.0, browser-readablestream-to-it@npm:^1.0.1, browser-readablestream-to-it@npm:^1.0.2, browser-readablestream-to-it@npm:^1.0.3": + version: 1.0.3 + resolution: "browser-readablestream-to-it@npm:1.0.3" + checksum: 07895bbc54cdeea62c8e9b7e32d374ec5c340ed1d0bc0c6cd6f1e0561ad931b160a3988426c763672ddf38ac1f75e45b9d8ae267b43f387183edafcad625f30a + languageName: node + linkType: hard + +"browserslist@npm:^4.21.9": + version: 4.22.1 + resolution: "browserslist@npm:4.22.1" + dependencies: + caniuse-lite: ^1.0.30001541 + electron-to-chromium: ^1.4.535 + node-releases: ^2.0.13 + update-browserslist-db: ^1.0.13 + bin: + browserslist: cli.js + checksum: 7e6b10c53f7dd5d83fd2b95b00518889096382539fed6403829d447e05df4744088de46a571071afb447046abc3c66ad06fbc790e70234ec2517452e32ffd862 + languageName: node + linkType: hard + +"bs-logger@npm:0.x": + version: 0.2.6 + resolution: "bs-logger@npm:0.2.6" + dependencies: + fast-json-stable-stringify: 2.x + checksum: d34bdaf68c64bd099ab97c3ea608c9ae7d3f5faa1178b3f3f345acd94e852e608b2d4f9103fb2e503f5e69780e98293df41691b84be909b41cf5045374d54606 + languageName: node + linkType: hard + +"bs58@npm:^4.0.0, bs58@npm:^4.0.1": + version: 4.0.1 + resolution: "bs58@npm:4.0.1" + dependencies: + base-x: ^3.0.2 + checksum: b3c5365bb9e0c561e1a82f1a2d809a1a692059fae016be233a6127ad2f50a6b986467c3a50669ce4c18929dcccb297c5909314dd347a25a68c21b68eb3e95ac2 + languageName: node + linkType: hard + +"bser@npm:2.1.1": + version: 2.1.1 + resolution: "bser@npm:2.1.1" + dependencies: + node-int64: ^0.4.0 + checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 + languageName: node + linkType: hard + +"buffer-from@npm:^1.0.0, buffer-from@npm:^1.1.2": + version: 1.1.2 + resolution: "buffer-from@npm:1.1.2" + checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb + languageName: node + linkType: hard + +"buffer-from@npm:~0.1.1": + version: 0.1.2 + resolution: "buffer-from@npm:0.1.2" + checksum: 50a1fa5da97d2081b7d945483c8967d3b89a096fa585eb55000bb2100e827c647c9370280ec9bd057da8f9fa5abc1d3b764228851a31fa8a67f659f70c0052d8 + languageName: node + linkType: hard + +"buffer-shims@npm:~1.0.0": + version: 1.0.0 + resolution: "buffer-shims@npm:1.0.0" + checksum: 4defd1ffc9b270708ea39c17cac75c91c520c8e2f1d28a4d0ec74dc77445cbf8fc162003f0530fd1f81340347e9a26863d5aa27cd3cc351ec1d0361777d15ace + languageName: node + linkType: hard + +"buffer@npm:6.0.3, buffer@npm:^6.0.1, buffer@npm:^6.0.3, buffer@npm:~6.0.3": + version: 6.0.3 + resolution: "buffer@npm:6.0.3" + dependencies: + base64-js: ^1.3.1 + ieee754: ^1.2.1 + checksum: 5ad23293d9a731e4318e420025800b42bf0d264004c0286c8cc010af7a270c7a0f6522e84f54b9ad65cbd6db20b8badbfd8d2ebf4f80fa03dab093b89e68c3f9 + languageName: node + linkType: hard + +"bufferutil@npm:^4.0.1": + version: 4.0.8 + resolution: "bufferutil@npm:4.0.8" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 7e9a46f1867dca72fda350966eb468eca77f4d623407b0650913fadf73d5750d883147d6e5e21c56f9d3b0bdc35d5474e80a600b9f31ec781315b4d2469ef087 + languageName: node + linkType: hard + +"bundle-name@npm:^3.0.0": + version: 3.0.0 + resolution: "bundle-name@npm:3.0.0" + dependencies: + run-applescript: ^5.0.0 + checksum: edf2b1fbe6096ed32e7566947ace2ea937ee427391744d7510a2880c4b9a5b3543d3f6c551236a29e5c87d3195f8e2912516290e638c15bcbede7b37cc375615 + languageName: node + linkType: hard + +"cacache@npm:^17.0.0": + version: 17.1.4 + resolution: "cacache@npm:17.1.4" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^7.7.1 + minipass: ^7.0.3 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: b7751df756656954a51201335addced8f63fc53266fa56392c9f5ae83c8d27debffb4458ac2d168a744a4517ec3f2163af05c20097f93d17bdc2dc8a385e14a6 + languageName: node + linkType: hard + +"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": + version: 1.0.2 + resolution: "call-bind@npm:1.0.2" + dependencies: + function-bind: ^1.1.1 + get-intrinsic: ^1.0.2 + checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 + languageName: node + linkType: hard + +"camelcase-keys@npm:^6.2.2": + version: 6.2.2 + resolution: "camelcase-keys@npm:6.2.2" + dependencies: + camelcase: ^5.3.1 + map-obj: ^4.0.0 + quick-lru: ^4.0.1 + checksum: 43c9af1adf840471e54c68ab3e5fe8a62719a6b7dbf4e2e86886b7b0ff96112c945736342b837bd2529ec9d1c7d1934e5653318478d98e0cf22c475c04658e2a + languageName: node + linkType: hard + +"camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + +"camelcase@npm:^6.2.0": + version: 6.3.0 + resolution: "camelcase@npm:6.3.0" + checksum: 8c96818a9076434998511251dcb2761a94817ea17dbdc37f47ac080bd088fc62c7369429a19e2178b993497132c8cbcf5cc1f44ba963e76782ba469c0474938d + languageName: node + linkType: hard + +"camelize@npm:^1.0.0": + version: 1.0.1 + resolution: "camelize@npm:1.0.1" + checksum: 91d8611d09af725e422a23993890d22b2b72b4cabf7239651856950c76b4bf53fe0d0da7c5e4db05180e898e4e647220e78c9fbc976113bd96d603d1fcbfcb99 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001406": + version: 1.0.30001549 + resolution: "caniuse-lite@npm:1.0.30001549" + checksum: 7f2abeedc8cf8b92cc0613855d71b995ce436068c0bcdd798c5af7d297ccf9f52496b00181beda42d82d25079dd4b6e389c67486156d40d8854e5707a25cb054 + languageName: node + linkType: hard + +"caniuse-lite@npm:^1.0.30001541": + version: 1.0.30001547 + resolution: "caniuse-lite@npm:1.0.30001547" + checksum: ec0fc2b46721887f6f4aca1f3902f03d9a1a07416d16a86b7cd4bfba60e7b6b03ab3969659d3ea0158cc2f298972c80215c06c9457eb15c649d7780e8f5e91a7 + languageName: node + linkType: hard + +"carbites@npm:^1.0.6": + version: 1.0.6 + resolution: "carbites@npm:1.0.6" + dependencies: + "@ipld/car": ^3.0.1 + "@ipld/dag-cbor": ^6.0.3 + "@ipld/dag-pb": ^2.0.2 + multiformats: ^9.0.4 + checksum: f8631c97a177f6efbb8fc70684b117cd2900e9f3cf830718ed7babeae2fa3a06b6768484b9852a85c7d454f19117fd3bf7a8c92adaa318d9a4c8b975b65a231c + languageName: node + linkType: hard + +"cborg@npm:^1.3.3, cborg@npm:^1.5.4, cborg@npm:^1.6.0, cborg@npm:^1.8.0, cborg@npm:^1.9.4": + version: 1.10.2 + resolution: "cborg@npm:1.10.2" + bin: + cborg: cli.js + checksum: 7743a8f125046ac27fb371c4ea18af54fbe853f7210f1ffacc6504a79566480c39d52ac4fbc1a5b5155e27b13c3b58955dc29db1bf20c4d651549d55fec2fa7f + languageName: node + linkType: hard + +"ccount@npm:^2.0.0": + version: 2.0.1 + resolution: "ccount@npm:2.0.1" + checksum: 48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4 + languageName: node + linkType: hard + +"chalk@npm:5.3.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 623922e077b7d1e9dedaea6f8b9e9352921f8ae3afe739132e0e00c275971bdd331268183b2628cf4ab1727c45ea1f28d7e24ac23ce1db1eb653c414ca8a5a80 + languageName: node + linkType: hard + +"chalk@npm:^1.0.0": + version: 1.1.3 + resolution: "chalk@npm:1.1.3" + dependencies: + ansi-styles: ^2.2.1 + escape-string-regexp: ^1.0.2 + has-ansi: ^2.0.0 + strip-ansi: ^3.0.0 + supports-color: ^2.0.0 + checksum: 9d2ea6b98fc2b7878829eec223abcf404622db6c48396a9b9257f6d0ead2acf18231ae368d6a664a83f272b0679158da12e97b5229f794939e555cc574478acd + languageName: node + linkType: hard + +"chalk@npm:^2.0.1, chalk@npm:^2.3.2, chalk@npm:^2.4.2": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: ^3.2.1 + escape-string-regexp: ^1.0.5 + supports-color: ^5.3.0 + checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: ^4.1.0 + supports-color: ^7.1.0 + checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc + languageName: node + linkType: hard + +"chalk@npm:~0.4.0": + version: 0.4.0 + resolution: "chalk@npm:0.4.0" + dependencies: + ansi-styles: ~1.0.0 + has-color: ~0.1.0 + strip-ansi: ~0.1.0 + checksum: e8f04f387b9fbf746fdce4b61a633f8a0d28224d8b022603db0f2d137471a18c5bc0bc33b243df09c361688f12bd3ab8a9dd1f8b4450d5a361bfe83aadbde739 + languageName: node + linkType: hard + +"char-regex@npm:^1.0.2": + version: 1.0.2 + resolution: "char-regex@npm:1.0.2" + checksum: b563e4b6039b15213114626621e7a3d12f31008bdce20f9c741d69987f62aeaace7ec30f6018890ad77b2e9b4d95324c9f5acfca58a9441e3b1dcdd1e2525d17 + languageName: node + linkType: hard + +"character-entities-html4@npm:^2.0.0": + version: 2.1.0 + resolution: "character-entities-html4@npm:2.1.0" + checksum: 7034aa7c7fa90309667f6dd50499c8a760c3d3a6fb159adb4e0bada0107d194551cdbad0714302f62d06ce4ed68565c8c2e15fdef2e8f8764eb63fa92b34b11d + languageName: node + linkType: hard + +"character-entities-legacy@npm:^1.0.0": + version: 1.1.4 + resolution: "character-entities-legacy@npm:1.1.4" + checksum: fe03a82c154414da3a0c8ab3188e4237ec68006cbcd681cf23c7cfb9502a0e76cd30ab69a2e50857ca10d984d57de3b307680fff5328ccd427f400e559c3a811 + languageName: node + linkType: hard + +"character-entities-legacy@npm:^3.0.0": + version: 3.0.0 + resolution: "character-entities-legacy@npm:3.0.0" + checksum: 7582af055cb488b626d364b7d7a4e46b06abd526fb63c0e4eb35bcb9c9799cc4f76b39f34fdccef2d1174ac95e53e9ab355aae83227c1a2505877893fce77731 + languageName: node + linkType: hard + +"character-entities@npm:^1.0.0": + version: 1.2.4 + resolution: "character-entities@npm:1.2.4" + checksum: e1545716571ead57beac008433c1ff69517cd8ca5b336889321c5b8ff4a99c29b65589a701e9c086cda8a5e346a67295e2684f6c7ea96819fe85cbf49bf8686d + languageName: node + linkType: hard + +"character-entities@npm:^2.0.0": + version: 2.0.2 + resolution: "character-entities@npm:2.0.2" + checksum: cf1643814023697f725e47328fcec17923b8f1799102a8a79c1514e894815651794a2bffd84bb1b3a4b124b050154e4529ed6e81f7c8068a734aecf07a6d3def + languageName: node + linkType: hard + +"character-reference-invalid@npm:^1.0.0": + version: 1.1.4 + resolution: "character-reference-invalid@npm:1.1.4" + checksum: 20274574c70e05e2f81135f3b93285536bc8ff70f37f0809b0d17791a832838f1e49938382899ed4cb444e5bbd4314ca1415231344ba29f4222ce2ccf24fea0b + languageName: node + linkType: hard + +"character-reference-invalid@npm:^2.0.0": + version: 2.0.1 + resolution: "character-reference-invalid@npm:2.0.1" + checksum: 98d3b1a52ae510b7329e6ee7f6210df14f1e318c5415975d4c9e7ee0ef4c07875d47c6e74230c64551f12f556b4a8ccc24d9f3691a2aa197019e72a95e9297ee + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f + languageName: node + linkType: hard + +"ci-info@npm:^3.2.0, ci-info@npm:^3.8.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 6b19dc9b2966d1f8c2041a838217299718f15d6c4b63ae36e4674edd2bee48f780e94761286a56aa59eb305a85fbea4ddffb7630ec063e7ec7e7e5ad42549a87 + languageName: node + linkType: hard + +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.3 + resolution: "cjs-module-lexer@npm:1.2.3" + checksum: 5ea3cb867a9bb609b6d476cd86590d105f3cfd6514db38ff71f63992ab40939c2feb68967faa15a6d2b1f90daa6416b79ea2de486e9e2485a6f8b66a21b4fb0a + languageName: node + linkType: hard + +"class-is@npm:^1.1.0": + version: 1.1.0 + resolution: "class-is@npm:1.1.0" + checksum: 49024de3b264fc501a38dd59d8668f1a2b4973fa6fcef6b83d80fe6fe99a2000a8fbea5b50d4607169c65014843c9f6b41a4f8473df806c1b4787b4d47521880 + languageName: node + linkType: hard + +"classnames@npm:*, classnames@npm:^2.2.5": + version: 2.3.2 + resolution: "classnames@npm:2.3.2" + checksum: 2c62199789618d95545c872787137262e741f9db13328e216b093eea91c85ef2bfb152c1f9e63027204e2559a006a92eb74147d46c800a9f96297ae1d9f96f4e + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 + languageName: node + linkType: hard + +"cli-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "cli-cursor@npm:4.0.0" + dependencies: + restore-cursor: ^4.0.0 + checksum: ab3f3ea2076e2176a1da29f9d64f72ec3efad51c0960898b56c8a17671365c26e67b735920530eaf7328d61f8bd41c27f46b9cf6e4e10fe2fa44b5e8c0e392cc + languageName: node + linkType: hard + +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: ^5.0.0 + string-width: ^5.0.0 + checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a + languageName: node + linkType: hard + +"clipboard-copy@npm:^4.0.1": + version: 4.0.1 + resolution: "clipboard-copy@npm:4.0.1" + checksum: 530a09de80dfd0536793fdefb6559a2dfb6c2706b027c41c672a0f18debafd420e69111224f3265555afcd73f9cd97517dcaf494aa25996a58a8f550a3426080 + languageName: node + linkType: hard + +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^6.2.0 + checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.1 + wrap-ansi: ^7.0.0 + checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 + languageName: node + linkType: hard + +"clsx@npm:^1.1.0, clsx@npm:^1.1.1, clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 + languageName: node + linkType: hard + +"clsx@npm:^2.0.0": + version: 2.0.0 + resolution: "clsx@npm:2.0.0" + checksum: a2cfb2351b254611acf92faa0daf15220f4cd648bdf96ce369d729813b85336993871a4bf6978ddea2b81b5a130478339c20d9d0b5c6fc287e5147f0c059276e + languageName: node + linkType: hard + +"co@npm:^4.6.0": + version: 4.6.0 + resolution: "co@npm:4.6.0" + checksum: 5210d9223010eb95b29df06a91116f2cf7c8e0748a9013ed853b53f362ea0e822f1e5bb054fb3cefc645239a4cf966af1f6133a3b43f40d591f3b68ed6cf0510 + languageName: node + linkType: hard + +"collect-v8-coverage@npm:^1.0.0": + version: 1.0.2 + resolution: "collect-v8-coverage@npm:1.0.2" + checksum: c10f41c39ab84629d16f9f6137bc8a63d332244383fc368caf2d2052b5e04c20cd1fd70f66fcf4e2422b84c8226598b776d39d5f2d2a51867cc1ed5d1982b4da + languageName: node + linkType: hard + +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: 1.1.3 + checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: ~1.1.4 + checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 + languageName: node + linkType: hard + +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 + languageName: node + linkType: hard + +"color-support@npm:^1.1.3": + version: 1.1.3 + resolution: "color-support@npm:1.1.3" + bin: + color-support: bin.js + checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b + languageName: node + linkType: hard + +"colorette@npm:^2.0.20": + version: 2.0.20 + resolution: "colorette@npm:2.0.20" + checksum: 0c016fea2b91b733eb9f4bcdb580018f52c0bc0979443dad930e5037a968237ac53d9beb98e218d2e9235834f8eebce7f8e080422d6194e957454255bde71d3d + languageName: node + linkType: hard + +"combine-errors@npm:^3.0.3": + version: 3.0.3 + resolution: "combine-errors@npm:3.0.3" + dependencies: + custom-error-instance: 2.1.1 + lodash.uniqby: 4.5.0 + checksum: bd0b0d2a4020f9976b8fe8eb7d5aa855b43ecacdcb61ee1fc5664d73ff8c1d7d0bbe4dd948bea7ba1870518bfc5688b89941de7a4967659418b4664cdb02884f + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"commander@npm:11.0.0": + version: 11.0.0 + resolution: "commander@npm:11.0.0" + checksum: 6621954e1e1d078b4991c1f5bbd9439ad37aa7768d6ab4842de1dbd4d222c8a27e1b8e62108b3a92988614af45031d5bb2a2aaa92951f4d0c934d1a1ac564bb4 + languageName: node + linkType: hard + +"commander@npm:^2.20.3": + version: 2.20.3 + resolution: "commander@npm:2.20.3" + checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af + languageName: node + linkType: hard + +"concat-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "concat-stream@npm:2.0.0" + dependencies: + buffer-from: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^3.0.2 + typedarray: ^0.0.6 + checksum: d7f75d48f0ecd356c1545d87e22f57b488172811b1181d96021c7c4b14ab8855f5313280263dca44bb06e5222f274d047da3e290a38841ef87b59719bde967c7 + languageName: node + linkType: hard + +"concurrently@npm:^7.5.0": + version: 7.6.0 + resolution: "concurrently@npm:7.6.0" + dependencies: + chalk: ^4.1.0 + date-fns: ^2.29.1 + lodash: ^4.17.21 + rxjs: ^7.0.0 + shell-quote: ^1.7.3 + spawn-command: ^0.0.2-1 + supports-color: ^8.1.0 + tree-kill: ^1.2.2 + yargs: ^17.3.1 + bin: + conc: dist/bin/concurrently.js + concurrently: dist/bin/concurrently.js + checksum: f705c9a7960f1b16559ca64958043faeeef6385c0bf30a03d1375e15ab2d96dba4f8166f1bbbb1c85e8da35ca0ce3c353875d71dff2aa132b2357bb533b3332e + languageName: node + linkType: hard + +"confusing-browser-globals@npm:^1.0.10": + version: 1.0.11 + resolution: "confusing-browser-globals@npm:1.0.11" + checksum: 3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef + languageName: node + linkType: hard + +"console-control-strings@npm:^1.1.0": + version: 1.1.0 + resolution: "console-control-strings@npm:1.1.0" + checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed + languageName: node + linkType: hard + +"convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.7.0": + version: 1.9.0 + resolution: "convert-source-map@npm:1.9.0" + checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 + languageName: node + linkType: hard + +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + +"cookie@npm:^0.3.1": + version: 0.3.1 + resolution: "cookie@npm:0.3.1" + checksum: 5309937344947a049283573861c24bed054fac3334ce5a0fa74b9bc6bf39bd387d3a0fca7f3ed6f4a09f112de82c00b541a0e7d6ce7a8de0f5d1301eec799730 + languageName: node + linkType: hard + +"copy-to-clipboard@npm:^3.3.3": + version: 3.3.3 + resolution: "copy-to-clipboard@npm:3.3.3" + dependencies: + toggle-selection: ^1.0.6 + checksum: e0a325e39b7615108e6c1c8ac110ae7b829cdc4ee3278b1df6a0e4228c490442cc86444cd643e2da344fbc424b3aab8909e2fec82f8bc75e7e5b190b7c24eecf + languageName: node + linkType: hard + +"core-js@npm:^3.31.1": + version: 3.33.0 + resolution: "core-js@npm:3.33.0" + checksum: dd62217935ac281faf6f833bb306fb891162919fcf9c1f0c975b1b91e82ac09a940f5deb5950bbb582739ceef716e8bd7e4f9eab8328932fb029d3bc2ecb2881 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"cosmiconfig@npm:^7.0.0": + version: 7.1.0 + resolution: "cosmiconfig@npm:7.1.0" + dependencies: + "@types/parse-json": ^4.0.0 + import-fresh: ^3.2.1 + parse-json: ^5.0.0 + path-type: ^4.0.0 + yaml: ^1.10.0 + checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f + languageName: node + linkType: hard + +"create-jest@npm:^29.7.0": + version: 29.7.0 + resolution: "create-jest@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + prompts: ^2.0.1 + bin: + create-jest: bin/create-jest.js + checksum: 1427d49458adcd88547ef6fa39041e1fe9033a661293aa8d2c3aa1b4967cb5bf4f0c00436c7a61816558f28ba2ba81a94d5c962e8022ea9a883978fc8e1f2945 + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"cross-fetch@npm:^3.1.4": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" + dependencies: + node-fetch: ^2.6.12 + checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 + languageName: node + linkType: hard + +"cross-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "cross-fetch@npm:4.0.0" + dependencies: + node-fetch: ^2.6.12 + checksum: ecca4f37ffa0e8283e7a8a590926b66713a7ef7892757aa36c2d20ffa27b0ac5c60dcf453119c809abe5923fc0bae3702a4d896bfb406ef1077b0d0018213e24 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 + languageName: node + linkType: hard + +"crypto-js@npm:^4.1.1": + version: 4.1.1 + resolution: "crypto-js@npm:4.1.1" + checksum: b3747c12ee3a7632fab3b3e171ea50f78b182545f0714f6d3e7e2858385f0f4101a15f2517e033802ce9d12ba50a391575ff4638c9de3dd9b2c4bc47768d5425 + languageName: node + linkType: hard + +"css-color-keywords@npm:^1.0.0": + version: 1.0.0 + resolution: "css-color-keywords@npm:1.0.0" + checksum: 8f125e3ad477bd03c77b533044bd9e8a6f7c0da52d49bbc0bbe38327b3829d6ba04d368ca49dd9ff3b667d2fc8f1698d891c198bbf8feade1a5501bf5a296408 + languageName: node + linkType: hard + +"css-to-react-native@npm:^3.0.0": + version: 3.2.0 + resolution: "css-to-react-native@npm:3.2.0" + dependencies: + camelize: ^1.0.0 + css-color-keywords: ^1.0.0 + postcss-value-parser: ^4.0.2 + checksum: 263be65e805aef02c3f20c064665c998a8c35293e1505dbe6e3054fb186b01a9897ac6cf121f9840e5a9dfe3fb3994f6fcd0af84a865f1df78ba5bf89e77adce + languageName: node + linkType: hard + +"csstype@npm:^3.0.2, csstype@npm:^3.1.2": + version: 3.1.2 + resolution: "csstype@npm:3.1.2" + checksum: e1a52e6c25c1314d6beef5168da704ab29c5186b877c07d822bd0806717d9a265e8493a2e35ca7e68d0f5d472d43fac1cdce70fd79fd0853dff81f3028d857b5 + languageName: node + linkType: hard + +"custom-error-instance@npm:2.1.1": + version: 2.1.1 + resolution: "custom-error-instance@npm:2.1.1" + checksum: db01483864c9f4356b720b443a1f9b374758745a75199187a0ccc12505cf822bc801a0d8e3f96d727559880024f40e09667d5c08e5de0bff243c6b5ae0bd303c + languageName: node + linkType: hard + +"d@npm:1, d@npm:^1.0.1": + version: 1.0.1 + resolution: "d@npm:1.0.1" + dependencies: + es5-ext: ^0.10.50 + type: ^1.0.1 + checksum: 49ca0639c7b822db670de93d4fbce44b4aa072cd848c76292c9978a8cd0fff1028763020ff4b0f147bd77bfe29b4c7f82e0f71ade76b2a06100543cdfd948d19 + languageName: node + linkType: hard + +"damerau-levenshtein@npm:^1.0.8": + version: 1.0.8 + resolution: "damerau-levenshtein@npm:1.0.8" + checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de + languageName: node + linkType: hard + +"data-uri-to-buffer@npm:^3.0.1": + version: 3.0.1 + resolution: "data-uri-to-buffer@npm:3.0.1" + checksum: c59c3009686a78c071806b72f4810856ec28222f0f4e252aa495ec027ed9732298ceea99c50328cf59b151dd34cbc3ad6150bbb43e41fc56fa19f48c99e9fc30 + languageName: node + linkType: hard + +"date-fns@npm:^2.16.1, date-fns@npm:^2.28.0, date-fns@npm:^2.29.1": + version: 2.30.0 + resolution: "date-fns@npm:2.30.0" + dependencies: + "@babel/runtime": ^7.21.0 + checksum: f7be01523282e9bb06c0cd2693d34f245247a29098527d4420628966a2d9aad154bd0e90a6b1cf66d37adcb769cd108cf8a7bd49d76db0fb119af5cdd13644f4 + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.2.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:~4.3.1, debug@npm:~4.3.2": + version: 4.3.4 + resolution: "debug@npm:4.3.4" + dependencies: + ms: 2.1.2 + peerDependenciesMeta: + supports-color: + optional: true + checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 + languageName: node + linkType: hard + +"debug@npm:^3.2.7": + version: 3.2.7 + resolution: "debug@npm:3.2.7" + dependencies: + ms: ^2.1.1 + checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c + languageName: node + linkType: hard + +"decamelize-keys@npm:^1.1.0": + version: 1.1.1 + resolution: "decamelize-keys@npm:1.1.1" + dependencies: + decamelize: ^1.1.0 + map-obj: ^1.0.0 + checksum: fc645fe20b7bda2680bbf9481a3477257a7f9304b1691036092b97ab04c0ab53e3bf9fcc2d2ae382536568e402ec41fb11e1d4c3836a9abe2d813dd9ef4311e0 + languageName: node + linkType: hard + +"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"decode-named-character-reference@npm:^1.0.0": + version: 1.0.2 + resolution: "decode-named-character-reference@npm:1.0.2" + dependencies: + character-entities: ^2.0.0 + checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 + languageName: node + linkType: hard + +"decode-uri-component@npm:^0.2.0, decode-uri-component@npm:^0.2.2": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 95476a7d28f267292ce745eac3524a9079058bbb35767b76e3ee87d42e34cd0275d2eb19d9d08c3e167f97556e8a2872747f5e65cbebcac8b0c98d83e285f139 + languageName: node + linkType: hard + +"dedent@npm:^1.0.0": + version: 1.5.1 + resolution: "dedent@npm:1.5.1" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: c3c300a14edf1bdf5a873f9e4b22e839d62490bc5c8d6169c1f15858a1a76733d06a9a56930e963d677a2ceeca4b6b0894cc5ea2f501aa382ca5b92af3413c2a + languageName: node + linkType: hard + +"deep-equal@npm:^2.0.5, deep-equal@npm:^2.2.2": + version: 2.2.2 + resolution: "deep-equal@npm:2.2.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + call-bind: ^1.0.2 + es-get-iterator: ^1.1.3 + get-intrinsic: ^1.2.1 + is-arguments: ^1.1.1 + is-array-buffer: ^3.0.2 + is-date-object: ^1.0.5 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + isarray: ^2.0.5 + object-is: ^1.1.5 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.0 + side-channel: ^1.0.4 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.1 + which-typed-array: ^1.1.9 + checksum: eb61c35157b6ecb96a5359b507b083fbff8ddb4c86a78a781ee38485f77a667465e45d63ee2ebd8a00e86d94c80e499906900cd82c2debb400237e1662cd5397 + languageName: node + linkType: hard + +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 2024c6a980a1b7128084170c4cf56b0fd58a63f2da1660dcfe977415f27b17dbe5888668b59d0b063753f3220719d5e400b7f113609489c90160bb9a5518d052 + languageName: node + linkType: hard + +"default-browser-id@npm:^3.0.0": + version: 3.0.0 + resolution: "default-browser-id@npm:3.0.0" + dependencies: + bplist-parser: ^0.2.0 + untildify: ^4.0.0 + checksum: 279c7ad492542e5556336b6c254a4eaf31b2c63a5433265655ae6e47301197b6cfb15c595a6fdc6463b2ff8e1a1a1ed3cba56038a60e1527ba4ab1628c6b9941 + languageName: node + linkType: hard + +"default-browser@npm:^4.0.0": + version: 4.0.0 + resolution: "default-browser@npm:4.0.0" + dependencies: + bundle-name: ^3.0.0 + default-browser-id: ^3.0.0 + execa: ^7.1.1 + titleize: ^3.0.0 + checksum: 40c5af984799042b140300be5639c9742599bda76dc9eba5ac9ad5943c83dd36cebc4471eafcfddf8e0ec817166d5ba89d56f08e66a126c7c7908a179cead1a7 + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1": + version: 1.1.0 + resolution: "define-data-property@npm:1.1.0" + dependencies: + get-intrinsic: ^1.2.1 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + checksum: 7ad4ee84cca8ad427a4831f5693526804b62ce9dfd4efac77214e95a4382aed930072251d4075dc8dc9fc949a353ed51f19f5285a84a788ba9216cc51472a093 + languageName: node + linkType: hard + +"define-data-property@npm:^1.1.0": + version: 1.1.1 + resolution: "define-data-property@npm:1.1.1" + dependencies: + get-intrinsic: ^1.2.1 + gopd: ^1.0.1 + has-property-descriptors: ^1.0.0 + checksum: a29855ad3f0630ea82e3c5012c812efa6ca3078d5c2aa8df06b5f597c1cde6f7254692df41945851d903e05a1668607b6d34e778f402b9ff9ffb38111f1a3f0d + languageName: node + linkType: hard + +"define-lazy-prop@npm:^3.0.0": + version: 3.0.0 + resolution: "define-lazy-prop@npm:3.0.0" + checksum: 54884f94caac0791bf6395a3ec530ce901cf71c47b0196b8754f3fd17edb6c0e80149c1214429d851873bb0d689dbe08dcedbb2306dc45c8534a5934723851b6 + languageName: node + linkType: hard + +"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: ^1.0.1 + has-property-descriptors: ^1.0.0 + object-keys: ^1.1.1 + checksum: b4ccd00597dd46cb2d4a379398f5b19fca84a16f3374e2249201992f36b30f6835949a9429669ee6b41b6e837205a163eadd745e472069e70dfc10f03e5fcc12 + languageName: node + linkType: hard + +"defined@npm:^1.0.1": + version: 1.0.1 + resolution: "defined@npm:1.0.1" + checksum: b1a852300bdb57f297289b55eafdd0c517afaa3ec8190e78fce91b9d8d0c0369d4505ecbdacfd3d98372e664f4a267d9bd793938d4a8c76209c9d9516fbe2101 + languageName: node + linkType: hard + +"delay@npm:^5.0.0": + version: 5.0.0 + resolution: "delay@npm:5.0.0" + checksum: 62f151151ecfde0d9afbb8a6be37a6d103c4cb24f35a20ef3fe56f920b0d0d0bb02bc9c0a3084d0179ef669ca332b91155f2ee4d9854622cd2cdba5fc95285f9 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + +"delegates@npm:^1.0.0": + version: 1.0.0 + resolution: "delegates@npm:1.0.0" + checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd + languageName: node + linkType: hard + +"dequal@npm:^2.0.0, dequal@npm:^2.0.3": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 + languageName: node + linkType: hard + +"detect-browser@npm:5.3.0, detect-browser@npm:^5.3.0": + version: 5.3.0 + resolution: "detect-browser@npm:5.3.0" + checksum: dd6e08d55da1d9e0f22510ac79872078ae03d9dfa13c5e66c96baedc1c86567345a88f96949161f6be8f3e0fafa93bf179bdb1cd311b14f5f163112fcc70ab49 + languageName: node + linkType: hard + +"detect-indent@npm:^6.0.0": + version: 6.1.0 + resolution: "detect-indent@npm:6.1.0" + checksum: ab953a73c72dbd4e8fc68e4ed4bfd92c97eb6c43734af3900add963fd3a9316f3bc0578b018b24198d4c31a358571eff5f0656e81a1f3b9ad5c547d58b2d093d + languageName: node + linkType: hard + +"detect-newline@npm:3.1.0, detect-newline@npm:^3.0.0": + version: 3.1.0 + resolution: "detect-newline@npm:3.1.0" + checksum: ae6cd429c41ad01b164c59ea36f264a2c479598e61cba7c99da24175a7ab80ddf066420f2bec9a1c57a6bead411b4655ff15ad7d281c000a89791f48cbe939e7 + languageName: node + linkType: hard + +"detect-node-es@npm:^1.1.0": + version: 1.1.0 + resolution: "detect-node-es@npm:1.1.0" + checksum: e46307d7264644975b71c104b9f028ed1d3d34b83a15b8a22373640ce5ea630e5640b1078b8ea15f202b54641da71e4aa7597093bd4b91f113db520a26a37449 + languageName: node + linkType: hard + +"detect-node@npm:^2.0.4, detect-node@npm:^2.1.0": + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e + languageName: node + linkType: hard + +"diff-sequences@npm:^29.6.3": + version: 29.6.3 + resolution: "diff-sequences@npm:29.6.3" + checksum: f4914158e1f2276343d98ff5b31fc004e7304f5470bf0f1adb2ac6955d85a531a6458d33e87667f98f6ae52ebd3891bb47d420bb48a5bd8b7a27ee25b20e33aa + languageName: node + linkType: hard + +"diff@npm:^3.2.0": + version: 3.5.0 + resolution: "diff@npm:3.5.0" + checksum: 00842950a6551e26ce495bdbce11047e31667deea546527902661f25cc2e73358967ebc78cf86b1a9736ec3e14286433225f9970678155753a6291c3bca5227b + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"diff@npm:^5.0.0": + version: 5.1.0 + resolution: "diff@npm:5.1.0" + checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 + languageName: node + linkType: hard + +"dijkstrajs@npm:^1.0.1": + version: 1.0.3 + resolution: "dijkstrajs@npm:1.0.3" + checksum: 82ff2c6633f235dd5e6bed04ec62cdfb1f327b4d7534557bd52f18991313f864ee50654543072fff4384a92b643ada4d5452f006b7098dbdfad6c8744a8c9e08 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: ^4.0.0 + checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 + languageName: node + linkType: hard + +"dns-over-http-resolver@npm:^1.2.3": + version: 1.2.3 + resolution: "dns-over-http-resolver@npm:1.2.3" + dependencies: + debug: ^4.3.1 + native-fetch: ^3.0.0 + receptacle: ^1.3.2 + checksum: 3cc1a1d77fc43e7a8a12453da987b80860ac96dc1031386c5eb1a39154775a87cfa1d50c0eaa5ea5e397e898791654608f6e2acf03f750f4098ab8822bb7d928 + languageName: node + linkType: hard + +"doctrine@npm:^2.1.0": + version: 2.1.0 + resolution: "doctrine@npm:2.1.0" + dependencies: + esutils: ^2.0.2 + checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 + languageName: node + linkType: hard + +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: ^2.0.2 + checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce + languageName: node + linkType: hard + +"dom-accessibility-api@npm:^0.5.9": + version: 0.5.16 + resolution: "dom-accessibility-api@npm:0.5.16" + checksum: 005eb283caef57fc1adec4d5df4dd49189b628f2f575af45decb210e04d634459e3f1ee64f18b41e2dcf200c844bc1d9279d80807e686a30d69a4756151ad248 + languageName: node + linkType: hard + +"dom-helpers@npm:^5.0.1": + version: 5.2.1 + resolution: "dom-helpers@npm:5.2.1" + dependencies: + "@babel/runtime": ^7.8.7 + csstype: ^3.0.2 + checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c + languageName: node + linkType: hard + +"dom-serializer@npm:^1.0.1": + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.2.0 + entities: ^2.0.0 + checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 + languageName: node + linkType: hard + +"dom-walk@npm:^0.1.0": + version: 0.1.2 + resolution: "dom-walk@npm:0.1.2" + checksum: 19eb0ce9c6de39d5e231530685248545d9cd2bd97b2cb3486e0bfc0f2a393a9addddfd5557463a932b52fdfcf68ad2a619020cd2c74a5fe46fbecaa8e80872f3 + languageName: node + linkType: hard + +"dom7@npm:^3.0.0": + version: 3.0.0 + resolution: "dom7@npm:3.0.0" + dependencies: + ssr-window: ^3.0.0-alpha.1 + checksum: 5a1b8979ed35afb9cc6714ff048ce4599a24fd8a11069bb52a61ccae1bdc0716c2bd6b07c4338856d5664d984c0bee9f6b7616a01ffa09daaebfe02fee016e66 + languageName: node + linkType: hard + +"domain-profiles@workspace:.": + version: 0.0.0-use.local + resolution: "domain-profiles@workspace:." + dependencies: + "@trivago/prettier-plugin-sort-imports": 3.2.0 + "@types/classnames": ^2.2.11 + "@types/node": ^16.11.21 + "@typescript-eslint/eslint-plugin": ^5.39.0 + "@typescript-eslint/parser": ^5.39.0 + concurrently: ^7.5.0 + dotenv: ^16.3.1 + es6-template-strings: ^2.0.1 + eslint: ^8.22.0 + eslint-config-airbnb: 19.0.4 + eslint-config-airbnb-typescript: ^17.0.0 + eslint-config-next: ^12.2.3 + eslint-config-prettier: ^8.5.0 + eslint-html-reporter: ^0.7.4 + eslint-plugin-chai-expect: ^3.0.0 + eslint-plugin-chai-friendly: ^0.7.2 + eslint-plugin-import: ^2.26.0 + eslint-plugin-json: ^3.1.0 + eslint-plugin-jsx-a11y: ^6.6.1 + eslint-plugin-markdown: ^3.0.0 + eslint-plugin-mdx: ^2.2.0 + eslint-plugin-prettier: 4.0.0 + eslint-plugin-promise: ^6.0.0 + eslint-plugin-react: ^7.30.1 + eslint-plugin-react-hooks: ^4.6.0 + eslint-plugin-sort-exports: ^0.8.0 + eslint-plugin-tss-unused-classes: ^1.0.2 + eslint-plugin-unused-imports: ^2.0.0 + husky: ^8.0.2 + jest: ^29.7.0 + jest-extended: ^4.0.2 + lint-staged: ^13.0.3 + prettier: 2.6.2 + prettier-plugin-organize-imports: ^3.2.3 + prettier-plugin-packagejson: 2.2.18 + prettier-plugin-sh: 0.11.0 + ts-jest: ^29.1.1 + ts-node: ^10.9.1 + tsconfig-paths: ^4.1.0 + typescript: 5.0.4 + languageName: unknown + linkType: soft + +"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + languageName: node + linkType: hard + +"domhandler@npm:4.3.1, domhandler@npm:^4.2.0, domhandler@npm:^4.2.2": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" + dependencies: + domelementtype: ^2.2.0 + checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa + languageName: node + linkType: hard + +"domutils@npm:^2.8.0": + version: 2.8.0 + resolution: "domutils@npm:2.8.0" + dependencies: + dom-serializer: ^1.0.1 + domelementtype: ^2.2.0 + domhandler: ^4.2.0 + checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 + languageName: node + linkType: hard + +"dotenv@npm:^16.3.1": + version: 16.3.1 + resolution: "dotenv@npm:16.3.1" + checksum: 15d75e7279018f4bafd0ee9706593dd14455ddb71b3bcba9c52574460b7ccaf67d5cf8b2c08a5af1a9da6db36c956a04a1192b101ee102a3e0cf8817bbcf3dfd + languageName: node + linkType: hard + +"dotignore@npm:^0.1.2": + version: 0.1.2 + resolution: "dotignore@npm:0.1.2" + dependencies: + minimatch: ^3.0.4 + bin: + ignored: bin/ignored + checksum: 06bab15e2a2400c6f823a0edbcd73661180f6245a4041a3fe3b9fde4b22ae74b896604df4520a877093f05c656bd080087376c9f605bccdea847664c59910f37 + languageName: node + linkType: hard + +"duplexer2@npm:^0.1.2": + version: 0.1.4 + resolution: "duplexer2@npm:0.1.4" + dependencies: + readable-stream: ^2.0.2 + checksum: 744961f03c7f54313f90555ac20284a3fb7bf22fdff6538f041a86c22499560eb6eac9d30ab5768054137cb40e6b18b40f621094e0261d7d8c35a37b7a5ad241 + languageName: node + linkType: hard + +"duplexer@npm:^0.1.1": + version: 0.1.2 + resolution: "duplexer@npm:0.1.2" + checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 + languageName: node + linkType: hard + +"duplexify@npm:^4.1.2": + version: 4.1.2 + resolution: "duplexify@npm:4.1.2" + dependencies: + end-of-stream: ^1.4.1 + inherits: ^2.0.3 + readable-stream: ^3.1.1 + stream-shift: ^1.0.0 + checksum: 964376c61c0e92f6ed0694b3ba97c84f199413dc40ab8dfdaef80b7a7f4982fcabf796214e28ed614a5bc1ec45488a29b81e7d46fa3f5ddf65bcb118c20145ad + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 7d00d7cd8e49b9afa762a813faac332dee781932d6f2c848dc348939c4253f1d4564341b7af1d041853bc3f32c2ef141b58e0a4d9862c17a7f08f68df1e0f1ed + languageName: node + linkType: hard + +"electron-fetch@npm:^1.7.2": + version: 1.9.1 + resolution: "electron-fetch@npm:1.9.1" + dependencies: + encoding: ^0.1.13 + checksum: 33b5d363b9a234288e847237ef34536bd415f31cba3b1c69b2ae4679a2bae66fb7ded2b576b90a0b7cd240e3df71cf16f2b961d4ab82864df02b6b53cf49f05c + languageName: node + linkType: hard + +"electron-to-chromium@npm:^1.4.535": + version: 1.4.550 + resolution: "electron-to-chromium@npm:1.4.550" + checksum: facf2b568b60ad2a86eb7d2daf289afc10b4d4b5ae7739c2a4e6950836422428d5ea7c16f8902359d79e9638cdc9c304bf3c04d746ea9adec6dfb60f0c65d4d0 + languageName: node + linkType: hard + +"elliptic@npm:6.5.4, elliptic@npm:^6.5.4": + version: 6.5.4 + resolution: "elliptic@npm:6.5.4" + 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 + checksum: d56d21fd04e97869f7ffcc92e18903b9f67f2d4637a23c860492fbbff5a3155fd9ca0184ce0c865dd6eb2487d234ce9551335c021c376cd2d3b7cb749c7d10f4 + languageName: node + linkType: hard + +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 + languageName: node + linkType: hard + +"emoji-picker-react@npm:^4.4.9": + version: 4.5.2 + resolution: "emoji-picker-react@npm:4.5.2" + dependencies: + clsx: ^1.2.1 + peerDependencies: + react: ">=16" + checksum: b0f8aa3347cf804abcc209b5a707319d405f90bfc2a27a3b98900f2f8233b1a967328cca034b930d388d4a9480d7c12b2ded795976a554d9962eadaa607aaa06 + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 + languageName: node + linkType: hard + +"encode-utf8@npm:^1.0.3": + version: 1.0.3 + resolution: "encode-utf8@npm:1.0.3" + checksum: 550224bf2a104b1d355458c8a82e9b4ea07f9fc78387bc3a49c151b940ad26473de8dc9e121eefc4e84561cb0b46de1e4cd2bc766f72ee145e9ea9541482817f + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: ^0.6.2 + checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f + languageName: node + linkType: hard + +"end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: ^1.4.0 + checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"engine.io-client@npm:~6.5.2": + version: 6.5.2 + resolution: "engine.io-client@npm:6.5.2" + dependencies: + "@socket.io/component-emitter": ~3.1.0 + debug: ~4.3.1 + engine.io-parser: ~5.2.1 + ws: ~8.11.0 + xmlhttprequest-ssl: ~2.0.0 + checksum: f93e09b842535a3f3e31b708cd30085b9e08a7a7ebf28f453e50e79e3fccf3f019474a46b41f7dc9164e3b8342c0b5d5a50a45299c1e2465d708c65140d05c92 + languageName: node + linkType: hard + +"engine.io-parser@npm:~5.2.1": + version: 5.2.1 + resolution: "engine.io-parser@npm:5.2.1" + checksum: 55b0e8e18500f50c1573675c53597c5552554ead08d3f30ff19fde6409e48f882a8e01f84e9772cd155c18a1d653d06f6bf57b4e1f8b834c63c9eaf3b657b88e + languageName: node + linkType: hard + +"enhanced-resolve@npm:^5.10.0": + version: 5.15.0 + resolution: "enhanced-resolve@npm:5.15.0" + dependencies: + graceful-fs: ^4.2.4 + tapable: ^2.2.0 + checksum: fbd8cdc9263be71cc737aa8a7d6c57b43d6aa38f6cc75dde6fcd3598a130cc465f979d2f4d01bb3bf475acb43817749c79f8eef9be048683602ca91ab52e4f11 + languageName: node + linkType: hard + +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 + languageName: node + linkType: hard + +"entities@npm:^3.0.1": + version: 3.0.1 + resolution: "entities@npm:3.0.1" + checksum: aaf7f12033f0939be91f5161593f853f2da55866db55ccbf72f45430b8977e2b79dbd58c53d0fdd2d00bd7d313b75b0968d09f038df88e308aa97e39f9456572 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 + languageName: node + linkType: hard + +"err-code@npm:^3.0.1": + version: 3.0.1 + resolution: "err-code@npm:3.0.1" + checksum: aede1f1d5ebe6d6b30b5e3175e3cc13e67de2e2e1ad99ce4917e957d7b59e8451ed10ee37dbc6493521920a47082c479b9097e5c39438d4aff4cc84438568a5a + languageName: node + linkType: hard + +"error-ex@npm:^1.3.1, error-ex@npm:^1.3.2": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: ^0.2.1 + checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 + languageName: node + linkType: hard + +"es-abstract@npm:^1.22.1": + version: 1.22.2 + resolution: "es-abstract@npm:1.22.2" + dependencies: + array-buffer-byte-length: ^1.0.0 + arraybuffer.prototype.slice: ^1.0.2 + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + es-set-tostringtag: ^2.0.1 + es-to-primitive: ^1.2.1 + function.prototype.name: ^1.1.6 + get-intrinsic: ^1.2.1 + get-symbol-description: ^1.0.0 + globalthis: ^1.0.3 + gopd: ^1.0.1 + has: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.5 + is-array-buffer: ^3.0.2 + is-callable: ^1.2.7 + is-negative-zero: ^2.0.2 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + is-string: ^1.0.7 + is-typed-array: ^1.1.12 + is-weakref: ^1.0.2 + object-inspect: ^1.12.3 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.1 + safe-array-concat: ^1.0.1 + safe-regex-test: ^1.0.0 + string.prototype.trim: ^1.2.8 + string.prototype.trimend: ^1.0.7 + string.prototype.trimstart: ^1.0.7 + typed-array-buffer: ^1.0.0 + typed-array-byte-length: ^1.0.0 + typed-array-byte-offset: ^1.0.0 + typed-array-length: ^1.0.4 + unbox-primitive: ^1.0.2 + which-typed-array: ^1.1.11 + checksum: cc70e592d360d7d729859013dee7a610c6b27ed8630df0547c16b0d16d9fe6505a70ee14d1af08d970fdd132b3f88c9ca7815ce72c9011608abf8ab0e55fc515 + languageName: node + linkType: hard + +"es-get-iterator@npm:^1.1.3": + version: 1.1.3 + resolution: "es-get-iterator@npm:1.1.3" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + has-symbols: ^1.0.3 + is-arguments: ^1.1.1 + is-map: ^2.0.2 + is-set: ^2.0.2 + is-string: ^1.0.7 + isarray: ^2.0.5 + stop-iteration-iterator: ^1.0.0 + checksum: 8fa118da42667a01a7c7529f8a8cca514feeff243feec1ce0bb73baaa3514560bd09d2b3438873cf8a5aaec5d52da248131de153b28e2638a061b6e4df13267d + languageName: node + linkType: hard + +"es-iterator-helpers@npm:^1.0.12": + version: 1.0.15 + resolution: "es-iterator-helpers@npm:1.0.15" + dependencies: + asynciterator.prototype: ^1.0.0 + call-bind: ^1.0.2 + define-properties: ^1.2.1 + es-abstract: ^1.22.1 + es-set-tostringtag: ^2.0.1 + function-bind: ^1.1.1 + get-intrinsic: ^1.2.1 + globalthis: ^1.0.3 + has-property-descriptors: ^1.0.0 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.5 + iterator.prototype: ^1.1.2 + safe-array-concat: ^1.0.1 + checksum: 50081ae5c549efe62e5c1d244df0194b40b075f7897fc2116b7e1aa437eb3c41f946d2afda18c33f9b31266ec544765932542765af839f76fa6d7b7855d1e0e1 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.1": + version: 2.0.1 + resolution: "es-set-tostringtag@npm:2.0.1" + dependencies: + get-intrinsic: ^1.1.3 + has: ^1.0.3 + has-tostringtag: ^1.0.0 + checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 + languageName: node + linkType: hard + +"es-shim-unscopables@npm:^1.0.0": + version: 1.0.0 + resolution: "es-shim-unscopables@npm:1.0.0" + dependencies: + has: ^1.0.3 + checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: ^1.1.4 + is-date-object: ^1.0.1 + is-symbol: ^1.0.2 + checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed + languageName: node + linkType: hard + +"es5-ext@npm:^0.10.12, es5-ext@npm:^0.10.35, es5-ext@npm:^0.10.50": + version: 0.10.62 + resolution: "es5-ext@npm:0.10.62" + dependencies: + es6-iterator: ^2.0.3 + es6-symbol: ^3.1.3 + next-tick: ^1.1.0 + checksum: 25f42f6068cfc6e393cf670bc5bba249132c5f5ec2dd0ed6e200e6274aca2fed8e9aec8a31c76031744c78ca283c57f0b41c7e737804c6328c7b8d3fbcba7983 + languageName: node + linkType: hard + +"es6-iterator@npm:^2.0.3": + version: 2.0.3 + resolution: "es6-iterator@npm:2.0.3" + dependencies: + d: 1 + es5-ext: ^0.10.35 + es6-symbol: ^3.1.1 + checksum: 6e48b1c2d962c21dee604b3d9f0bc3889f11ed5a8b33689155a2065d20e3107e2a69cc63a71bd125aeee3a589182f8bbcb5c8a05b6a8f38fa4205671b6d09697 + languageName: node + linkType: hard + +"es6-promise@npm:^4.0.3": + version: 4.2.8 + resolution: "es6-promise@npm:4.2.8" + checksum: 95614a88873611cb9165a85d36afa7268af5c03a378b35ca7bda9508e1d4f1f6f19a788d4bc755b3fd37c8ebba40782018e02034564ff24c9d6fa37e959ad57d + languageName: node + linkType: hard + +"es6-promisify@npm:^5.0.0": + version: 5.0.0 + resolution: "es6-promisify@npm:5.0.0" + dependencies: + es6-promise: ^4.0.3 + checksum: fbed9d791598831413be84a5374eca8c24800ec71a16c1c528c43a98e2dadfb99331483d83ae6094ddb9b87e6f799a15d1553cebf756047e0865c753bc346b92 + languageName: node + linkType: hard + +"es6-symbol@npm:^3.1.1, es6-symbol@npm:^3.1.3": + version: 3.1.3 + resolution: "es6-symbol@npm:3.1.3" + dependencies: + d: ^1.0.1 + ext: ^1.1.2 + checksum: cd49722c2a70f011eb02143ef1c8c70658d2660dead6641e160b94619f408b9cf66425515787ffe338affdf0285ad54f4eae30ea5bd510e33f8659ec53bcaa70 + languageName: node + linkType: hard + +"es6-template-strings@npm:^2.0.1": + version: 2.0.1 + resolution: "es6-template-strings@npm:2.0.1" + dependencies: + es5-ext: ^0.10.12 + esniff: ^1.1 + checksum: 320ab4e8588edad5a0302554eb159dc2339903df2f62a787680b828c19c3019551020f1557d015ec5afeffa967cb7c3aca32483e8069f8f1ec57dd29173a64aa + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.1.1 + resolution: "escalade@npm:3.1.1" + checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^1.0.2, escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + +"eslint-config-airbnb-base@npm:^15.0.0": + version: 15.0.0 + resolution: "eslint-config-airbnb-base@npm:15.0.0" + dependencies: + confusing-browser-globals: ^1.0.10 + object.assign: ^4.1.2 + object.entries: ^1.1.5 + semver: ^6.3.0 + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.2 + checksum: 38626bad2ce2859fccac86b30cd2b86c9b7d8d71d458331860861dc05290a5b198bded2f4fb89efcb9046ec48f8ab4c4fb00365ba8916f27b172671da28b93ea + languageName: node + linkType: hard + +"eslint-config-airbnb-typescript@npm:^17.0.0": + version: 17.1.0 + resolution: "eslint-config-airbnb-typescript@npm:17.1.0" + dependencies: + eslint-config-airbnb-base: ^15.0.0 + peerDependencies: + "@typescript-eslint/eslint-plugin": ^5.13.0 || ^6.0.0 + "@typescript-eslint/parser": ^5.0.0 || ^6.0.0 + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 + checksum: cfd26a2782e322ebfdfbf9a64262332c7653f297c4a32d7b951079eb18bb9502a83d67b3f7ef2cc1c5374ae06098eb454ed010784b3416e7274839083022a08c + languageName: node + linkType: hard + +"eslint-config-airbnb@npm:19.0.4": + version: 19.0.4 + resolution: "eslint-config-airbnb@npm:19.0.4" + dependencies: + eslint-config-airbnb-base: ^15.0.0 + object.assign: ^4.1.2 + object.entries: ^1.1.5 + peerDependencies: + eslint: ^7.32.0 || ^8.2.0 + eslint-plugin-import: ^2.25.3 + eslint-plugin-jsx-a11y: ^6.5.1 + eslint-plugin-react: ^7.28.0 + eslint-plugin-react-hooks: ^4.3.0 + checksum: 253178689c3c80eef2567e3aaf0612e18973bc9cf51d9be36074b5dd58210e8b6942200a424bcccbb81ac884e41303479ab09f251a2a97addc2de61efdc9576c + languageName: node + linkType: hard + +"eslint-config-next@npm:^12.2.3": + version: 12.3.4 + resolution: "eslint-config-next@npm:12.3.4" + dependencies: + "@next/eslint-plugin-next": 12.3.4 + "@rushstack/eslint-patch": ^1.1.3 + "@typescript-eslint/parser": ^5.21.0 + eslint-import-resolver-node: ^0.3.6 + eslint-import-resolver-typescript: ^2.7.1 + eslint-plugin-import: ^2.26.0 + eslint-plugin-jsx-a11y: ^6.5.1 + eslint-plugin-react: ^7.31.7 + eslint-plugin-react-hooks: ^4.5.0 + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: ">=3.3.1" + peerDependenciesMeta: + typescript: + optional: true + checksum: 53cd24d7b764fe382812a5e76571083fe59e892ac88ac5ccddf171e261f5a3ea36cb1c34283f97569c97a4bae51ece5252d5aa71fd130d31ada94310dc4147ee + languageName: node + linkType: hard + +"eslint-config-prettier@npm:^8.5.0": + version: 8.10.0 + resolution: "eslint-config-prettier@npm:8.10.0" + peerDependencies: + eslint: ">=7.0.0" + bin: + eslint-config-prettier: bin/cli.js + checksum: 153266badd477e49b0759816246b2132f1dbdb6c7f313ca60a9af5822fd1071c2bc5684a3720d78b725452bbac04bb130878b2513aea5e72b1b792de5a69fec8 + languageName: node + linkType: hard + +"eslint-html-reporter@npm:^0.7.4": + version: 0.7.4 + resolution: "eslint-html-reporter@npm:0.7.4" + dependencies: + hairballs: ^0.3.2 + handlebars: ^4.3.1 + checksum: 22c8d0514f51020d08f1fe22b7a711220f1248fec9ff1bb03be8a21646879c400c25159be4e04114c7d8af1f0df062984b321fb78a6b233d50f606a0e1739373 + languageName: node + linkType: hard + +"eslint-import-resolver-node@npm:^0.3.6, eslint-import-resolver-node@npm:^0.3.7": + version: 0.3.9 + resolution: "eslint-import-resolver-node@npm:0.3.9" + dependencies: + debug: ^3.2.7 + is-core-module: ^2.13.0 + resolve: ^1.22.4 + checksum: 439b91271236b452d478d0522a44482e8c8540bf9df9bd744062ebb89ab45727a3acd03366a6ba2bdbcde8f9f718bab7fe8db64688aca75acf37e04eafd25e22 + languageName: node + linkType: hard + +"eslint-import-resolver-typescript@npm:^2.7.1": + version: 2.7.1 + resolution: "eslint-import-resolver-typescript@npm:2.7.1" + dependencies: + debug: ^4.3.4 + glob: ^7.2.0 + is-glob: ^4.0.3 + resolve: ^1.22.0 + tsconfig-paths: ^3.14.1 + peerDependencies: + eslint: "*" + eslint-plugin-import: "*" + checksum: 1d81b657b1f73bf95b8f0b745c0305574b91630c1db340318f3ca8918e206fce20a933b95e7c419338cc4452cb80bb2b2d92acaf01b6aa315c78a332d832545c + languageName: node + linkType: hard + +"eslint-mdx@npm:^2.2.0": + version: 2.2.0 + resolution: "eslint-mdx@npm:2.2.0" + dependencies: + acorn: ^8.10.0 + acorn-jsx: ^5.3.2 + espree: ^9.6.1 + estree-util-visit: ^1.2.1 + remark-mdx: ^2.3.0 + remark-parse: ^10.0.2 + remark-stringify: ^10.0.3 + synckit: ^0.8.5 + tslib: ^2.6.1 + unified: ^10.1.2 + unified-engine: ^10.1.0 + unist-util-visit: ^4.1.2 + uvu: ^0.5.6 + vfile: ^5.3.7 + peerDependencies: + eslint: ">=8.0.0" + checksum: cd284f42a1edd0e9f1a5d8b740281cc26a1e675496f3a708da87796797681fda15b850e165dba153cca0ce6b18e308bc83e485f10bc706e032627d3f2e1789b1 + languageName: node + linkType: hard + +"eslint-module-utils@npm:^2.8.0": + version: 2.8.0 + resolution: "eslint-module-utils@npm:2.8.0" + dependencies: + debug: ^3.2.7 + peerDependenciesMeta: + eslint: + optional: true + checksum: 74c6dfea7641ebcfe174be61168541a11a14aa8d72e515f5f09af55cd0d0862686104b0524aa4b8e0ce66418a44aa38a94d2588743db5fd07a6b49ffd16921d2 + languageName: node + linkType: hard + +"eslint-plugin-chai-expect@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-plugin-chai-expect@npm:3.0.0" + peerDependencies: + eslint: ">=2.0.0 <= 8.x" + checksum: 54a5a1d981635db0b8cf0b75ba8ec74f218a2cd7f731af7eca422da0f0247f50c6fff8ff03820436d6d3e640bbbeccd61f00c338ce4d3281fd98cc55d196d649 + languageName: node + linkType: hard + +"eslint-plugin-chai-friendly@npm:^0.7.2": + version: 0.7.2 + resolution: "eslint-plugin-chai-friendly@npm:0.7.2" + peerDependencies: + eslint: ">=3.0.0" + checksum: a9c70da37361b54d9cdd4f7c26a3d83caed106a239d21268b8fdaa6b30c0a097dab6ff76a320e40325fd6d27f395eb5cf914c56f5aaf5215d5614f515bbfc975 + languageName: node + linkType: hard + +"eslint-plugin-i18n-json@npm:^3.1.0": + version: 3.1.0 + resolution: "eslint-plugin-i18n-json@npm:3.1.0" + dependencies: + chalk: ^2.3.2 + indent-string: ^3.2.0 + intl-messageformat-parser: ^5.4.0 + jest-diff: ^22.0.3 + jsonlint: ^1.6.2 + lodash.get: ^4.4.2 + lodash.isequal: ^4.5.0 + lodash.isplainobject: ^4.0.6 + lodash.set: ^4.3.2 + log-symbols: ^2.2.0 + plur: ^2.1.2 + pretty-format: ^22.0.3 + peerDependencies: + eslint: ">=4.0.0" + checksum: 863772fe5ee42518b8fab1590d010eee832e38a83e3b4d793ae8804889fdbe22bce67741d06bee9433ad99b87fd096ba9021d5d03683c6a2e1768ec190d153db + languageName: node + linkType: hard + +"eslint-plugin-import@npm:^2.26.0": + version: 2.28.1 + resolution: "eslint-plugin-import@npm:2.28.1" + dependencies: + array-includes: ^3.1.6 + array.prototype.findlastindex: ^1.2.2 + array.prototype.flat: ^1.3.1 + array.prototype.flatmap: ^1.3.1 + debug: ^3.2.7 + doctrine: ^2.1.0 + eslint-import-resolver-node: ^0.3.7 + eslint-module-utils: ^2.8.0 + has: ^1.0.3 + is-core-module: ^2.13.0 + is-glob: ^4.0.3 + minimatch: ^3.1.2 + object.fromentries: ^2.0.6 + object.groupby: ^1.0.0 + object.values: ^1.1.6 + semver: ^6.3.1 + tsconfig-paths: ^3.14.2 + peerDependencies: + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + checksum: e8ae6dd8f06d8adf685f9c1cfd46ac9e053e344a05c4090767e83b63a85c8421ada389807a39e73c643b9bff156715c122e89778169110ed68d6428e12607edf + languageName: node + linkType: hard + +"eslint-plugin-json@npm:^3.1.0": + version: 3.1.0 + resolution: "eslint-plugin-json@npm:3.1.0" + dependencies: + lodash: ^4.17.21 + vscode-json-languageservice: ^4.1.6 + checksum: bc7fa4c2e1fdac4365e499bd24ecdf6cddeb6bb647ea9543f214fd811559345a3c1a944b78ff1d3e4b6a49980bcea592f0d58b26a41e05e451e222bb43322cac + languageName: node + linkType: hard + +"eslint-plugin-jsx-a11y@npm:^6.5.1, eslint-plugin-jsx-a11y@npm:^6.6.1": + version: 6.7.1 + resolution: "eslint-plugin-jsx-a11y@npm:6.7.1" + dependencies: + "@babel/runtime": ^7.20.7 + aria-query: ^5.1.3 + array-includes: ^3.1.6 + array.prototype.flatmap: ^1.3.1 + ast-types-flow: ^0.0.7 + axe-core: ^4.6.2 + axobject-query: ^3.1.1 + damerau-levenshtein: ^1.0.8 + emoji-regex: ^9.2.2 + has: ^1.0.3 + jsx-ast-utils: ^3.3.3 + language-tags: =1.0.5 + minimatch: ^3.1.2 + object.entries: ^1.1.6 + object.fromentries: ^2.0.6 + semver: ^6.3.0 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: f166dd5fe7257c7b891c6692e6a3ede6f237a14043ae3d97581daf318fc5833ddc6b4871aa34ab7656187430170500f6d806895747ea17ecdf8231a666c3c2fd + languageName: node + linkType: hard + +"eslint-plugin-markdown@npm:^3.0.0, eslint-plugin-markdown@npm:^3.0.1": + version: 3.0.1 + resolution: "eslint-plugin-markdown@npm:3.0.1" + dependencies: + mdast-util-from-markdown: ^0.8.5 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 91233d35777517a290377233eecbdbbe17d583f40b11b9adf371d051a98012ad6b540967aae59c2786fb8b66aa7c1abb27108947034b1f0f3e0df1c8aae9f2e7 + languageName: node + linkType: hard + +"eslint-plugin-mdx@npm:^2.2.0": + version: 2.2.0 + resolution: "eslint-plugin-mdx@npm:2.2.0" + dependencies: + eslint-mdx: ^2.2.0 + eslint-plugin-markdown: ^3.0.1 + remark-mdx: ^2.3.0 + remark-parse: ^10.0.2 + remark-stringify: ^10.0.3 + tslib: ^2.6.1 + unified: ^10.1.2 + vfile: ^5.3.7 + peerDependencies: + eslint: ">=8.0.0" + checksum: a210a45dcee6046231cf3a959e6e0be8c3787f56f30479393f5ead633868e915f4c32d6a68d3cb4a4f276cf9802e9cc3bc541cff28ab06daa13b867000b574fd + languageName: node + linkType: hard + +"eslint-plugin-prettier@npm:4.0.0": + version: 4.0.0 + resolution: "eslint-plugin-prettier@npm:4.0.0" + dependencies: + prettier-linter-helpers: ^1.0.0 + peerDependencies: + eslint: ">=7.28.0" + prettier: ">=2.0.0" + peerDependenciesMeta: + eslint-config-prettier: + optional: true + checksum: 03d69177a3c21fa2229c7e427ce604429f0b20ab7f411e2e824912f572a207c7f5a41fd1f0a95b9b8afe121e291c1b1f1dc1d44c7aad4b0837487f9c19f5210d + languageName: node + linkType: hard + +"eslint-plugin-promise@npm:^6.0.0": + version: 6.1.1 + resolution: "eslint-plugin-promise@npm:6.1.1" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 46b9a4f79dae5539987922afc27cc17cbccdecf4f0ba19c0ccbf911b0e31853e9f39d9959eefb9637461b52772afa1a482f1f87ff16c1ba38bdb6fcf21897e9a + languageName: node + linkType: hard + +"eslint-plugin-react-hooks@npm:^4.5.0, eslint-plugin-react-hooks@npm:^4.6.0": + version: 4.6.0 + resolution: "eslint-plugin-react-hooks@npm:4.6.0" + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3 + languageName: node + linkType: hard + +"eslint-plugin-react@npm:^7.30.1, eslint-plugin-react@npm:^7.31.7": + version: 7.33.2 + resolution: "eslint-plugin-react@npm:7.33.2" + dependencies: + array-includes: ^3.1.6 + array.prototype.flatmap: ^1.3.1 + array.prototype.tosorted: ^1.1.1 + doctrine: ^2.1.0 + es-iterator-helpers: ^1.0.12 + estraverse: ^5.3.0 + jsx-ast-utils: ^2.4.1 || ^3.0.0 + minimatch: ^3.1.2 + object.entries: ^1.1.6 + object.fromentries: ^2.0.6 + object.hasown: ^1.1.2 + object.values: ^1.1.6 + prop-types: ^15.8.1 + resolve: ^2.0.0-next.4 + semver: ^6.3.1 + string.prototype.matchall: ^4.0.8 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: b4c3d76390b0ae6b6f9fed78170604cc2c04b48e6778a637db339e8e3911ec9ef22510b0ae77c429698151d0f1b245f282177f384105b6830e7b29b9c9b26610 + languageName: node + linkType: hard + +"eslint-plugin-sort-exports@npm:^0.8.0": + version: 0.8.0 + resolution: "eslint-plugin-sort-exports@npm:0.8.0" + peerDependencies: + eslint: ">=5.0.0" + checksum: f3cf350d36feeae72e0f6fc8ca0121a301db70eeb3cc60b90b8adcf1aa161d9446f67281faea7f2c7da0185c298c79b60a99a35367760fb4e41d7fd792c2ab5c + languageName: node + linkType: hard + +"eslint-plugin-tss-unused-classes@npm:^1.0.2": + version: 1.0.2 + resolution: "eslint-plugin-tss-unused-classes@npm:1.0.2" + peerDependencies: + eslint: ^7.14.0 || ^8.0.0 + checksum: 2984c7bd81904fae0e41bba30e7cc753e3a10354530eb985df5a61dbf06b5f96c6cf3225c5a33db0301971777008eaffc1c92f0a852142092f342feba812fa2c + languageName: node + linkType: hard + +"eslint-plugin-unused-imports@npm:^2.0.0": + version: 2.0.0 + resolution: "eslint-plugin-unused-imports@npm:2.0.0" + dependencies: + eslint-rule-composer: ^0.3.0 + peerDependencies: + "@typescript-eslint/eslint-plugin": ^5.0.0 + eslint: ^8.0.0 + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + checksum: 8aa1e03e75da2a62a354065e0cb8fe370118c6f8d9720a32fe8c1da937de6adb81a4fed7d0d391d115ac9453b49029fb19f970d180a2cf3dba451fd4c20f0dc4 + languageName: node + linkType: hard + +"eslint-rule-composer@npm:^0.3.0": + version: 0.3.0 + resolution: "eslint-rule-composer@npm:0.3.0" + checksum: c2f57cded8d1c8f82483e0ce28861214347e24fd79fd4144667974cd334d718f4ba05080aaef2399e3bbe36f7d6632865110227e6b176ed6daa2d676df9281b1 + languageName: node + linkType: hard + +"eslint-scope@npm:^5.1.1": + version: 5.1.1 + resolution: "eslint-scope@npm:5.1.1" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^4.1.1 + checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: ec97dbf5fb04b94e8f4c5a91a7f0a6dd3c55e46bfc7bbcd0e3138c3a76977570e02ed89a1810c778dcd72072ff0e9621ba1379b4babe53921d71e2e4486fda3e + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 36e9ef87fca698b6fd7ca5ca35d7b2b6eeaaf106572e2f7fd31c12d3bfdaccdb587bba6d3621067e5aece31c8c3a348b93922ab8f7b2cbc6aaab5e1d89040c60 + languageName: node + linkType: hard + +"eslint@npm:^8.22.0": + version: 8.51.0 + resolution: "eslint@npm:8.51.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.6.1 + "@eslint/eslintrc": ^2.1.2 + "@eslint/js": 8.51.0 + "@humanwhocodes/config-array": ^0.11.11 + "@humanwhocodes/module-importer": ^1.0.1 + "@nodelib/fs.walk": ^1.2.8 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.2 + debug: ^4.3.2 + doctrine: ^3.0.0 + escape-string-regexp: ^4.0.0 + eslint-scope: ^7.2.2 + eslint-visitor-keys: ^3.4.3 + espree: ^9.6.1 + esquery: ^1.4.2 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^6.0.1 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + globals: ^13.19.0 + graphemer: ^1.4.0 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + is-path-inside: ^3.0.3 + js-yaml: ^4.1.0 + json-stable-stringify-without-jsonify: ^1.0.1 + levn: ^0.4.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + strip-ansi: ^6.0.1 + text-table: ^0.2.0 + bin: + eslint: bin/eslint.js + checksum: 214fa5d1fcb67af1b8992ce9584ccd85e1aa7a482f8b8ea5b96edc28fa838a18a3b69456db45fc1ed3ef95f1e9efa9714f737292dc681e572d471d02fda9649c + languageName: node + linkType: hard + +"esniff@npm:^1.1": + version: 1.1.0 + resolution: "esniff@npm:1.1.0" + dependencies: + d: 1 + es5-ext: ^0.10.12 + checksum: a386aa3a4e2339ca7aa5bf65732b0b28dd57fb11a8d5b7230eff791d396f2f3f7cc85c8ee5f5be0ed9f2ef5597fba8d30b3b0e317ba9dd834959d3d7f7ed6725 + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: ^8.9.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^3.4.1 + checksum: eb8c149c7a2a77b3f33a5af80c10875c3abd65450f60b8af6db1bfcfa8f101e21c1e56a561c6dc13b848e18148d43469e7cd208506238554fb5395a9ea5a1ab9 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: b45bc805a613dbea2835278c306b91aff6173c8d034223fa81498c77dcbce3b2931bf6006db816f62eacd9fd4ea975dfd85a5b7f3c6402cfd050d4ca3c13a628 + languageName: node + linkType: hard + +"esquery@npm:^1.4.2": + version: 1.5.0 + resolution: "esquery@npm:1.5.0" + dependencies: + estraverse: ^5.1.0 + checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: ^5.2.0 + checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 + languageName: node + linkType: hard + +"estraverse@npm:^4.1.1": + version: 4.3.0 + resolution: "estraverse@npm:4.3.0" + checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b + languageName: node + linkType: hard + +"estree-util-is-identifier-name@npm:^2.0.0": + version: 2.1.0 + resolution: "estree-util-is-identifier-name@npm:2.1.0" + checksum: cab317a071fafb99cf83b57df7924bccd2e6ab4e252688739e49f00b16cefd168e279c171442b0557c80a1c80ffaa927d670dadea65bb3c9b151efb8e772e89d + languageName: node + linkType: hard + +"estree-util-visit@npm:^1.0.0, estree-util-visit@npm:^1.2.1": + version: 1.2.1 + resolution: "estree-util-visit@npm:1.2.1" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/unist": ^2.0.0 + checksum: 6feea4fdc43b0ba0f79faf1d57cf32373007e146d4810c7c09c13f5a9c1b8600c1ac57a8d949967cedd2a9a91dddd246e19b59bacfc01e417168b4ebf220f691 + languageName: node + linkType: hard + +"esutils@npm:^2.0.2": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 + languageName: node + linkType: hard + +"eth-block-tracker@npm:6.1.0": + version: 6.1.0 + resolution: "eth-block-tracker@npm:6.1.0" + dependencies: + "@metamask/safe-event-emitter": ^2.0.0 + "@metamask/utils": ^3.0.1 + json-rpc-random-id: ^1.0.1 + pify: ^3.0.0 + checksum: 33ee6375a26822649d1e9ac24a3c39d70338eb505715f72b9102fb82e40d7a48902b4a7dd4a33bb4f121b79707c5ab045777507a2881cfcdb385c8ccbb3ac2a0 + languageName: node + linkType: hard + +"eth-json-rpc-filters@npm:5.1.0": + version: 5.1.0 + resolution: "eth-json-rpc-filters@npm:5.1.0" + dependencies: + "@metamask/safe-event-emitter": ^2.0.0 + async-mutex: ^0.2.6 + eth-query: ^2.1.2 + json-rpc-engine: ^6.1.0 + pify: ^5.0.0 + checksum: 864092e96277953c399a139df66572b864bd41247c5c1d18e6529973804d4fd8962658d8b10571152554802fa8daaa1003588aee79ffce754e0bc57c39b771d5 + languageName: node + linkType: hard + +"eth-query@npm:^2.1.2": + version: 2.1.2 + resolution: "eth-query@npm:2.1.2" + dependencies: + json-rpc-random-id: ^1.0.0 + xtend: ^4.0.1 + checksum: 83daa0e28452c54722aec78cd24d036bad5b6e7c08035d98e10d4bea11f71662f12cab63ebd8a848d4df46ad316503d54ecccb41c9244d2ea8b29364b0a20201 + languageName: node + linkType: hard + +"eth-rpc-errors@npm:4.0.2": + version: 4.0.2 + resolution: "eth-rpc-errors@npm:4.0.2" + dependencies: + fast-safe-stringify: ^2.0.6 + checksum: 1dbdee8f416090f1d318e17bdee2251d174d73c8faa4286fa364bc51ae9105672045f2d078ec23ca6a2b4b92af7cfbe7fa1ba17ad49e591fc653a363bf8cbab2 + languageName: node + linkType: hard + +"eth-rpc-errors@npm:^4.0.2": + version: 4.0.3 + resolution: "eth-rpc-errors@npm:4.0.3" + dependencies: + fast-safe-stringify: ^2.0.6 + checksum: 5fa31d1a10fdb340733b9a55e38e7687222c501052ca20743cef4d0c911a9bbcc0cad54aa6bf3e4b428604c071ff519803060e1cbc79ddb7c9257c11d407d32a + languageName: node + linkType: hard + +"ethereum-cryptography@npm:^2.0.0": + version: 2.1.2 + resolution: "ethereum-cryptography@npm:2.1.2" + dependencies: + "@noble/curves": 1.1.0 + "@noble/hashes": 1.3.1 + "@scure/bip32": 1.3.1 + "@scure/bip39": 1.2.1 + checksum: 2e8f7b8cc90232ae838ab6a8167708e8362621404d26e79b5d9e762c7b53d699f7520aff358d9254de658fcd54d2d0af168ff909943259ed27dc4cef2736410c + languageName: node + linkType: hard + +"ethers@npm:^5.5.3, ethers@npm:^5.6.5": + version: 5.7.2 + resolution: "ethers@npm:5.7.2" + dependencies: + "@ethersproject/abi": 5.7.0 + "@ethersproject/abstract-provider": 5.7.0 + "@ethersproject/abstract-signer": 5.7.0 + "@ethersproject/address": 5.7.0 + "@ethersproject/base64": 5.7.0 + "@ethersproject/basex": 5.7.0 + "@ethersproject/bignumber": 5.7.0 + "@ethersproject/bytes": 5.7.0 + "@ethersproject/constants": 5.7.0 + "@ethersproject/contracts": 5.7.0 + "@ethersproject/hash": 5.7.0 + "@ethersproject/hdnode": 5.7.0 + "@ethersproject/json-wallets": 5.7.0 + "@ethersproject/keccak256": 5.7.0 + "@ethersproject/logger": 5.7.0 + "@ethersproject/networks": 5.7.1 + "@ethersproject/pbkdf2": 5.7.0 + "@ethersproject/properties": 5.7.0 + "@ethersproject/providers": 5.7.2 + "@ethersproject/random": 5.7.0 + "@ethersproject/rlp": 5.7.0 + "@ethersproject/sha2": 5.7.0 + "@ethersproject/signing-key": 5.7.0 + "@ethersproject/solidity": 5.7.0 + "@ethersproject/strings": 5.7.0 + "@ethersproject/transactions": 5.7.0 + "@ethersproject/units": 5.7.0 + "@ethersproject/wallet": 5.7.0 + "@ethersproject/web": 5.7.1 + "@ethersproject/wordlists": 5.7.0 + checksum: b7c08cf3e257185a7946117dbbf764433b7ba0e77c27298dec6088b3bc871aff711462b0621930c56880ff0a7ceb8b1d3a361ffa259f93377b48e34107f62553 + languageName: node + linkType: hard + +"ethjs-util@npm:^0.1.6": + version: 0.1.6 + resolution: "ethjs-util@npm:0.1.6" + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + checksum: 1f42959e78ec6f49889c49c8a98639e06f52a15966387dd39faf2930db48663d026efb7db2702dcffe7f2a99c4a0144b7ce784efdbf733f4077aae95de76d65f + languageName: node + linkType: hard + +"event-target-shim@npm:^5.0.0": + version: 5.0.1 + resolution: "event-target-shim@npm:5.0.1" + checksum: 1ffe3bb22a6d51bdeb6bf6f7cf97d2ff4a74b017ad12284cc9e6a279e727dc30a5de6bb613e5596ff4dc3e517841339ad09a7eec44266eccb1aa201a30448166 + languageName: node + linkType: hard + +"eventemitter3@npm:^4.0.7": + version: 4.0.7 + resolution: "eventemitter3@npm:4.0.7" + checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 + languageName: node + linkType: hard + +"eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 543d6c858ab699303c3c32e0f0f47fc64d360bf73c3daf0ac0b5079710e340d6fe9f15487f94e66c629f5f82cd1a8678d692f3dbb6f6fcd1190e1b97fcad36f8 + languageName: node + linkType: hard + +"events@npm:^3.3.0": + version: 3.3.0 + resolution: "events@npm:3.3.0" + checksum: f6f487ad2198aa41d878fa31452f1a3c00958f46e9019286ff4787c84aac329332ab45c9cdc8c445928fc6d7ded294b9e005a7fce9426488518017831b272780 + languageName: node + linkType: hard + +"execa@npm:7.2.0, execa@npm:^7.1.1": + version: 7.2.0 + resolution: "execa@npm:7.2.0" + dependencies: + cross-spawn: ^7.0.3 + get-stream: ^6.0.1 + human-signals: ^4.3.0 + is-stream: ^3.0.0 + merge-stream: ^2.0.0 + npm-run-path: ^5.1.0 + onetime: ^6.0.0 + signal-exit: ^3.0.7 + strip-final-newline: ^3.0.0 + checksum: 14fd17ba0ca8c87b277584d93b1d9fc24f2a65e5152b31d5eb159a3b814854283eaae5f51efa9525e304447e2f757c691877f7adff8fde5746aae67eb1edd1cc + languageName: node + linkType: hard + +"execa@npm:^5.0.0": + version: 5.1.1 + resolution: "execa@npm:5.1.1" + 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 + checksum: fba9022c8c8c15ed862847e94c252b3d946036d7547af310e344a527e59021fd8b6bb0723883ea87044dc4f0201f949046993124a42ccb0855cae5bf8c786343 + languageName: node + linkType: hard + +"exit@npm:^0.1.2": + version: 0.1.2 + resolution: "exit@npm:0.1.2" + checksum: abc407f07a875c3961e4781dfcb743b58d6c93de9ab263f4f8c9d23bb6da5f9b7764fc773f86b43dd88030444d5ab8abcb611cb680fba8ca075362b77114bba3 + languageName: node + linkType: hard + +"expect@npm:^29.0.0, expect@npm:^29.7.0": + version: 29.7.0 + resolution: "expect@npm:29.7.0" + dependencies: + "@jest/expect-utils": ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + checksum: 9257f10288e149b81254a0fda8ffe8d54a7061cd61d7515779998b012579d2b8c22354b0eb901daf0145f347403da582f75f359f4810c007182ad3fb318b5c0c + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"ext@npm:^1.1.2": + version: 1.7.0 + resolution: "ext@npm:1.7.0" + dependencies: + type: ^2.7.2 + checksum: ef481f9ef45434d8c867cfd09d0393b60945b7c8a1798bedc4514cb35aac342ccb8d8ecb66a513e6a2b4ec1e294a338e3124c49b29736f8e7c735721af352c31 + languageName: node + linkType: hard + +"extend@npm:^3.0.0": + version: 3.0.2 + resolution: "extend@npm:3.0.2" + checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 + languageName: node + linkType: hard + +"eyes@npm:^0.1.8": + version: 0.1.8 + resolution: "eyes@npm:0.1.8" + checksum: c31703a92bf36ba75ee8d379ee7985c24ee6149f3a6175f44cec7a05b178c38bce9836d3ca48c9acb0329a960ac2c4b2ead4e60cdd4fe6e8c92cad7cd6913687 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d + languageName: node + linkType: hard + +"fast-diff@npm:^1.1.2": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: d22d371b994fdc8cce9ff510d7b8dc4da70ac327bcba20df607dd5b9cae9f908f4d1028f5fe467650f058d1e7270235ae0b8230809a262b4df587a3b3aa216c3 + languageName: node + linkType: hard + +"fast-fifo@npm:^1.0.0": + version: 1.3.2 + resolution: "fast-fifo@npm:1.3.2" + checksum: 6bfcba3e4df5af7be3332703b69a7898a8ed7020837ec4395bb341bd96cc3a6d86c3f6071dd98da289618cf2234c70d84b2a6f09a33dd6f988b1ff60d8e54275 + languageName: node + linkType: hard + +"fast-glob@npm:^3.0.3, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0": + version: 3.3.1 + resolution: "fast-glob@npm:3.3.1" + 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 + checksum: b6f3add6403e02cf3a798bfbb1183d0f6da2afd368f27456010c0bc1f9640aea308243d4cb2c0ab142f618276e65ecb8be1661d7c62a7b4e5ba774b9ce5432e5 + languageName: node + linkType: hard + +"fast-json-stable-stringify@npm:2.x, fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c + languageName: node + linkType: hard + +"fast-redact@npm:^3.0.0": + version: 3.3.0 + resolution: "fast-redact@npm:3.3.0" + checksum: 3f7becc70a5a2662a9cbfdc52a4291594f62ae998806ee00315af307f32d9559dbf512146259a22739ee34401950ef47598c1f4777d33b0ed5027203d67f549c + languageName: node + linkType: hard + +"fast-safe-stringify@npm:^2.0.6": + version: 2.1.1 + resolution: "fast-safe-stringify@npm:2.1.1" + checksum: a851cbddc451745662f8f00ddb622d6766f9bd97642dabfd9a405fb0d646d69fc0b9a1243cbf67f5f18a39f40f6fa821737651ff1bceeba06c9992ca2dc5bd3d + languageName: node + linkType: hard + +"fast-stable-stringify@npm:^1.0.0": + version: 1.0.0 + resolution: "fast-stable-stringify@npm:1.0.0" + checksum: ef1203d246a7e8ac15e2bfbda0a89fa375947bccf9f7910be0ea759856dbe8ea5024a0d8cc2cceabe18a9cb67e95927b78bb6173a3ae37ec55a518cf36e5244b + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.15.0 + resolution: "fastq@npm:1.15.0" + dependencies: + reusify: ^1.0.4 + checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a + languageName: node + linkType: hard + +"fault@npm:^2.0.0": + version: 2.0.1 + resolution: "fault@npm:2.0.1" + dependencies: + format: ^0.2.0 + checksum: c9b30f47d95769177130a9409976a899ed31eb598450fbad5b0d39f2f5f56d5f4a9ff9257e0bee8407cb0fc3ce37165657888c6aa6d78472e403893104329b72 + languageName: node + linkType: hard + +"fb-watchman@npm:^2.0.0": + version: 2.0.2 + resolution: "fb-watchman@npm:2.0.2" + dependencies: + bser: 2.1.1 + checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 + languageName: node + linkType: hard + +"figures@npm:^1.4.0": + version: 1.7.0 + resolution: "figures@npm:1.7.0" + dependencies: + escape-string-regexp: ^1.0.5 + object-assign: ^4.1.0 + checksum: d77206deba991a7977f864b8c8edf9b8b43b441be005482db04b0526e36263adbdb22c1c6d2df15a1ad78d12029bd1aa41ccebcb5d425e1f2cf629c6daaa8e10 + languageName: node + linkType: hard + +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: ^3.0.4 + checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 + languageName: node + linkType: hard + +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: b648580bdd893a008c92c7ecc96c3ee57a5e7b6c4c18a9a09b44fb5d36d79146f8e442578bc0e173dc027adf3987e254ba1dfd6e3ec998b7c282873010502144 + languageName: node + linkType: hard + +"files-from-path@npm:^0.2.4": + version: 0.2.6 + resolution: "files-from-path@npm:0.2.6" + dependencies: + err-code: ^3.0.1 + graceful-fs: ^4.2.9 + ipfs-unixfs: ^6.0.5 + it-glob: ^0.0.13 + checksum: 661c379fb55223a84bdc8c9f237aeb569590ab896e64136e6f9df7bd3f8304f838825d528ea5deb6f1a9fb76a9ee928f4536e42f248581d5e421cf544df62f93 + languageName: node + linkType: hard + +"filesize@npm:^10.0.8": + version: 10.1.0 + resolution: "filesize@npm:10.1.0" + checksum: 8dd35fe85ebc56e9ee99b6814a854f5d5ee12d09a05cf38ebc1865b5efca128a2bb7480d3c2e841a3d20d45c756fc669efecbf65b6842afd75b7f20648306654 + languageName: node + linkType: hard + +"fill-range@npm:^7.0.1": + version: 7.0.1 + resolution: "fill-range@npm:7.0.1" + dependencies: + to-regex-range: ^5.0.1 + checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + languageName: node + linkType: hard + +"filter-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "filter-obj@npm:1.1.0" + checksum: cf2104a7c45ff48e7f505b78a3991c8f7f30f28bd8106ef582721f321f1c6277f7751aacd5d83026cb079d9d5091082f588d14a72e7c5d720ece79118fa61e10 + languageName: node + linkType: hard + +"find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "find-root@npm:1.1.0" + checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf + languageName: node + linkType: hard + +"find-up@npm:^4.0.0, find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: ^5.0.0 + path-exists: ^4.0.0 + checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 + languageName: node + linkType: hard + +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.1.1 + resolution: "flat-cache@npm:3.1.1" + dependencies: + flatted: ^3.2.9 + keyv: ^4.5.3 + rimraf: ^3.0.2 + checksum: 4958cfe0f46acf84953d4e16676ef5f0d38eab3a92d532a1e8d5f88f11eea8b36d5d598070ff2aeae15f1fde18f8d7d089eefaf9db10b5a587cc1c9072325c7a + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.2.9 + resolution: "flatted@npm:3.2.9" + checksum: f14167fbe26a9d20f6fca8d998e8f1f41df72c8e81f9f2c9d61ed2bea058248f5e1cbd05e7f88c0e5087a6a0b822a1e5e2b446e879f3cfbe0b07ba2d7f80b026 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.14.9": + version: 1.15.3 + resolution: "follow-redirects@npm:1.15.3" + peerDependenciesMeta: + debug: + optional: true + checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231 + languageName: node + linkType: hard + +"font-awesome@npm:^4.7.0": + version: 4.7.0 + resolution: "font-awesome@npm:4.7.0" + checksum: fa223f6e3b27e97d2d09cdbf0c1363e2ad18d2a685fc045f54e86394db59f7c113482a819de3b6489f42a630a8ec5911b8e65718e45f7cace1c0a1b05d7fce08 + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + +"format@npm:^0.2.0": + version: 0.2.2 + resolution: "format@npm:0.2.2" + checksum: 646a60e1336250d802509cf24fb801e43bd4a70a07510c816fa133aa42cdbc9c21e66e9cc0801bb183c5b031c9d68be62e7fbb6877756e52357850f92aa28799 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: ^3.0.0 + checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: ^7.0.3 + checksum: 8722a41109130851d979222d3ec88aabaceeaaf8f57b2a8f744ef8bd2d1ce95453b04a61daa0078822bc5cd21e008814f06fe6586f56fef511e71b8d2394d802 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 + languageName: node + linkType: hard + +"fsevents@npm:^2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: latest + checksum: 11e6ea6fea15e42461fc55b4b0e4a0a3c654faa567f1877dbd353f39156f69def97a69936d1746619d656c4b93de2238bf731f6085a03a50cabf287c9d024317 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@^2.3.2#~builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: latest + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.1": + version: 1.1.1 + resolution: "function-bind@npm:1.1.1" + checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.5, function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + functions-have-names: ^1.2.3 + checksum: 7a3f9bd98adab09a07f6e1f03da03d3f7c26abbdeaeee15223f6c04a9fb5674792bdf5e689dac19b97ac71de6aad2027ba3048a9b883aa1b3173eed6ab07f479 + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 + languageName: node + linkType: hard + +"gauge@npm:^4.0.3": + version: 4.0.4 + resolution: "gauge@npm:4.0.4" + dependencies: + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.3 + console-control-strings: ^1.1.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.7 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.5 + checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d + languageName: node + linkType: hard + +"gensync@npm:^1.0.0-beta.2": + version: 1.0.0-beta.2 + resolution: "gensync@npm:1.0.0-beta.2" + checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec + languageName: node + linkType: hard + +"get-browser-rtc@npm:^1.1.0": + version: 1.1.0 + resolution: "get-browser-rtc@npm:1.1.0" + checksum: 90dd17ca3ba2a61aaa57b7497efea49afa718b5d048cac155a7f84ac850c921006946893e6a5d981c66c5ca69d19f6aadc5c773ffdf2e860896781a8e7e0a2e0 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1": + version: 1.2.1 + resolution: "get-intrinsic@npm:1.2.1" + dependencies: + function-bind: ^1.1.1 + has: ^1.0.3 + has-proto: ^1.0.1 + has-symbols: ^1.0.3 + checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f + languageName: node + linkType: hard + +"get-iterator@npm:^1.0.2": + version: 1.0.2 + resolution: "get-iterator@npm:1.0.2" + checksum: 4a819aa91ecb61f4fd507bd62e3468d55f642f06011f944c381a739a21f685c36a37feb9324c8971e7c0fc70ca172066c45874fa2d1dcdf4b4fb8e43f16058c2 + languageName: node + linkType: hard + +"get-nonce@npm:^1.0.0": + version: 1.0.1 + resolution: "get-nonce@npm:1.0.1" + checksum: e2614e43b4694c78277bb61b0f04583d45786881289285c73770b07ded246a98be7e1f78b940c80cbe6f2b07f55f0b724e6db6fd6f1bcbd1e8bdac16521074ed + languageName: node + linkType: hard + +"get-package-type@npm:^0.1.0": + version: 0.1.0 + resolution: "get-package-type@npm:0.1.0" + checksum: bba0811116d11e56d702682ddef7c73ba3481f114590e705fc549f4d868972263896af313c57a25c076e3c0d567e11d919a64ba1b30c879be985fc9d44f96148 + languageName: node + linkType: hard + +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": + version: 6.0.1 + resolution: "get-stream@npm:6.0.1" + checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad + languageName: node + linkType: hard + +"get-symbol-description@npm:^1.0.0": + version: 1.0.0 + resolution: "get-symbol-description@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 + languageName: node + linkType: hard + +"gif-picker-react@npm:^1.1.0": + version: 1.3.0 + resolution: "gif-picker-react@npm:1.3.0" + peerDependencies: + react: ">=17" + react-dom: ">=17" + checksum: ccc1d275ebb597f5e109d6500677d365fe736db6a40e86970529dc596fc2929a16d2a18dd97513b408eb230ad1e5e7d28c7d3a00a2a193ff98f7975a44b24718 + languageName: node + linkType: hard + +"git-hooks-list@npm:1.0.3": + version: 1.0.3 + resolution: "git-hooks-list@npm:1.0.3" + checksum: a1dd03d39c1d727ba08a35dbdbdcc6e96de8c4170c942dc95bf787ca6e34998d39fb5295a00242b58a3d265de0b69a0686d0cf583baa6b7830f268542c4576b9 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: ^4.0.1 + checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e + languageName: node + linkType: hard + +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: ^4.0.3 + checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 + languageName: node + linkType: hard + +"glob@npm:7.1.7": + version: 7.1.7 + resolution: "glob@npm:7.1.7" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.3.5 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + path-scurry: ^1.10.1 + bin: + glob: dist/esm/bin.mjs + checksum: 4f2fe2511e157b5a3f525a54092169a5f92405f24d2aed3142f4411df328baca13059f4182f1db1bf933e2c69c0bd89e57ae87edd8950cba8c7ccbe84f721cf3 + languageName: node + linkType: hard + +"glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0, glob@npm:^7.2.3": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + 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 + checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 + languageName: node + linkType: hard + +"glob@npm:^8.0.0": + version: 8.1.0 + resolution: "glob@npm:8.1.0" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^5.0.1 + once: ^1.3.0 + checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 + languageName: node + linkType: hard + +"global@npm:^4.4.0": + version: 4.4.0 + resolution: "global@npm:4.4.0" + dependencies: + min-document: ^2.19.0 + process: ^0.11.10 + checksum: 9c057557c8f5a5bcfbeb9378ba4fe2255d04679452be504608dd5f13b54edf79f7be1db1031ea06a4ec6edd3b9f5f17d2d172fb47e6c69dae57fd84b7e72b77f + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.23.0 + resolution: "globals@npm:13.23.0" + dependencies: + type-fest: ^0.20.2 + checksum: 194c97cf8d1ef6ba59417234c2386549c4103b6e5f24b1ff1952de61a4753e5d2069435ba629de711a6480b1b1d114a98e2ab27f85e966d5a10c319c3bbd3dc3 + languageName: node + linkType: hard + +"globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" + dependencies: + define-properties: ^1.1.3 + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + languageName: node + linkType: hard + +"globby@npm:10.0.0": + version: 10.0.0 + resolution: "globby@npm:10.0.0" + dependencies: + "@types/glob": ^7.1.1 + array-union: ^2.1.0 + dir-glob: ^3.0.1 + fast-glob: ^3.0.3 + glob: ^7.1.3 + ignore: ^5.1.1 + merge2: ^1.2.3 + slash: ^3.0.0 + checksum: fbff58d2fcaedd9207901f6e3b5341ff885b6d499c3a095f7befde0fd03ec1ea634452a82f81e894e46f6a5d704da44b842ba93066f90dced52adf84d4b8d1cc + languageName: node + linkType: hard + +"globby@npm:^11.1.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + 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 + checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: ac85f94da92d8eb6b7f5a8b20ce65e43d66761c55ce85ac96df6865308390da45a8d3f0296dd3a663de65d30ba497bd46c696cc1e248c72b13d6d567138a4fc7 + languageName: node + linkType: hard + +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: bab8f0be9b568857c7bec9fda95a89f87b783546d02951c40c33f84d05bb7da3fd10f863a9beb901463669b6583173a8c8cc6d6b306ea2b9b9d5d3d943c3a673 + languageName: node + linkType: hard + +"hairballs@npm:^0.3.2": + version: 0.3.3 + resolution: "hairballs@npm:0.3.3" + dependencies: + handlebars: ^4.5.1 + checksum: a9613da592a795c85ed828528cb90eb34922f144d57686b7a662256149551ad440e19e0999536d6b5bf42a199aa627ee094f209a26731a529e1fc6b6f5549e36 + languageName: node + linkType: hard + +"hamt-sharding@npm:^2.0.0": + version: 2.0.1 + resolution: "hamt-sharding@npm:2.0.1" + dependencies: + sparse-array: ^1.3.1 + uint8arrays: ^3.0.0 + checksum: c3032fc1447abbda9ef5eda52edfb2df542a74eabcc01b1a38a05f5185c6847163311f383c64602dc4e8d086c5e545a40767b4cfc6e7d4de2a3e58bb85e5c8e5 + languageName: node + linkType: hard + +"handlebars@npm:^4.3.1, handlebars@npm:^4.5.1": + version: 4.7.8 + resolution: "handlebars@npm:4.7.8" + dependencies: + minimist: ^1.2.5 + neo-async: ^2.6.2 + source-map: ^0.6.1 + uglify-js: ^3.1.4 + wordwrap: ^1.0.0 + dependenciesMeta: + uglify-js: + optional: true + bin: + handlebars: bin/handlebars + checksum: 00e68bb5c183fd7b8b63322e6234b5ac8fbb960d712cb3f25587d559c2951d9642df83c04a1172c918c41bcfc81bfbd7a7718bbce93b893e0135fc99edea93ff + languageName: node + linkType: hard + +"hard-rejection@npm:^2.1.0": + version: 2.1.0 + resolution: "hard-rejection@npm:2.1.0" + checksum: 7baaf80a0c7fff4ca79687b4060113f1529589852152fa935e6787a2bc96211e784ad4588fb3048136ff8ffc9dfcf3ae385314a5b24db32de20bea0d1597f9dc + languageName: node + linkType: hard + +"has-ansi@npm:^2.0.0": + version: 2.0.0 + resolution: "has-ansi@npm:2.0.0" + dependencies: + ansi-regex: ^2.0.0 + checksum: 1b51daa0214440db171ff359d0a2d17bc20061164c57e76234f614c91dbd2a79ddd68dfc8ee73629366f7be45a6df5f2ea9de83f52e1ca24433f2cc78c35d8ec + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b + languageName: node + linkType: hard + +"has-color@npm:~0.1.0": + version: 0.1.7 + resolution: "has-color@npm:0.1.7" + checksum: 5753d76b1330bc1f5a07171f222ed0718f5ec2d64d5677800e434f183a99f7042f5cda43c9625a2d0f0204063aa03499a66f1c15283d789773b3544f18f93f58 + languageName: node + linkType: hard + +"has-dynamic-import@npm:^2.0.1": + version: 2.0.1 + resolution: "has-dynamic-import@npm:2.0.1" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 1cb60255cdd354a5f53997dd4c8ae0f821706ced3d1047bb810cb74400f28988b08d4d986318cb6610b79e6b9993a6592e678b6cef3ef0b71ab553eaa99b9c4d + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0": + version: 1.0.0 + resolution: "has-property-descriptors@npm:1.0.0" + dependencies: + get-intrinsic: ^1.1.1 + checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0": + version: 1.0.0 + resolution: "has-tostringtag@npm:1.0.0" + dependencies: + has-symbols: ^1.0.2 + checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c + languageName: node + linkType: hard + +"has-unicode@npm:^2.0.1": + version: 2.0.1 + resolution: "has-unicode@npm:2.0.1" + checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 + languageName: node + linkType: hard + +"has@npm:^1.0.3": + version: 1.0.4 + resolution: "has@npm:1.0.4" + checksum: 8a11ba062e0627c9578a1d08285401e39f1d071a9692ddf793199070edb5648b21c774dd733e2a181edd635bf6862731885f476f4ccf67c998d7a5ff7cef2550 + languageName: node + linkType: hard + +"hash.js@npm:1.1.7, hash.js@npm:^1.0.0, hash.js@npm:^1.0.3, hash.js@npm:^1.1.7": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: ^2.0.3 + minimalistic-assert: ^1.0.1 + checksum: e350096e659c62422b85fa508e4b3669017311aa4c49b74f19f8e1bc7f3a54a584fdfd45326d4964d6011f2b2d882e38bea775a96046f2a61b7779a979629d8f + languageName: node + linkType: hard + +"hey-listen@npm:^1.0.8": + version: 1.0.8 + resolution: "hey-listen@npm:1.0.8" + checksum: 6bad60b367688f5348e25e7ca3276a74b59ac5a09b0455e6ff8ab7d4a9e38cd2116c708a7dcd8a954d27253ce1d8717ec891d175723ea739885b828cf44e4072 + languageName: node + linkType: hard + +"hls.js@npm:^1.4.12": + version: 1.4.12 + resolution: "hls.js@npm:1.4.12" + checksum: a30c055ea1fc9ee9f4eee1b8b17f7ed7900ebe25e790de4f3097a03afb841cf138d51b67ef27e09700672395e305302d1d68b3b9f6c0bce3c1c6692fad86008c + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: ^1.0.3 + minimalistic-assert: ^1.0.0 + minimalistic-crypto-utils: ^1.0.1 + checksum: bd30b6a68d7f22d63f10e1888aee497d7c2c5c0bb469e66bbdac99f143904d1dfe95f8131f95b3e86c86dd239963c9d972fcbe147e7cffa00e55d18585c43fe0 + languageName: node + linkType: hard + +"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": + version: 3.3.2 + resolution: "hoist-non-react-statics@npm:3.3.2" + dependencies: + react-is: ^16.7.0 + checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: c955394bdab888a1e9bb10eb33029e0f7ce5a2ac7b3f158099dc8c486c99e73809dca609f5694b223920ca2174db33d32b12f9a2a47141dc59607c29da5a62dd + languageName: node + linkType: hard + +"hosted-git-info@npm:^4.0.1": + version: 4.1.0 + resolution: "hosted-git-info@npm:4.1.0" + dependencies: + lru-cache: ^6.0.0 + checksum: c3f87b3c2f7eb8c2748c8f49c0c2517c9a95f35d26f4bf54b2a8cba05d2e668f3753548b6ea366b18ec8dadb4e12066e19fa382a01496b0ffa0497eb23cbe461 + languageName: node + linkType: hard + +"html-dom-parser@npm:1.2.0": + version: 1.2.0 + resolution: "html-dom-parser@npm:1.2.0" + dependencies: + domhandler: 4.3.1 + htmlparser2: 7.2.0 + checksum: d5e72baba7e1a9da334f023f3b3669247c5cebaf51b23011764202c11b3850339aa0fef9f26e00c2b0510e75fe6183453fcba33304a006f9fcde3d037bf60f3d + languageName: node + linkType: hard + +"html-escaper@npm:^2.0.0": + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + languageName: node + linkType: hard + +"html-react-parser@npm:^1.4.13": + version: 1.4.14 + resolution: "html-react-parser@npm:1.4.14" + dependencies: + domhandler: 4.3.1 + html-dom-parser: 1.2.0 + react-property: 2.0.0 + style-to-js: 1.1.1 + peerDependencies: + react: 0.14 || 15 || 16 || 17 || 18 + checksum: 14745d2949da38c31d9812ed0f7d77bbbffcf5a6db441d3c703d57ca884ebe705fc2dbc312f47353c349f11f5e61f4735b6610ed905cb4d06da56d475ecc2892 + languageName: node + linkType: hard + +"html-tokenize@npm:^2.0.0": + version: 2.0.1 + resolution: "html-tokenize@npm:2.0.1" + dependencies: + buffer-from: ~0.1.1 + inherits: ~2.0.1 + minimist: ~1.2.5 + readable-stream: ~1.0.27-1 + through2: ~0.4.1 + bin: + html-tokenize: bin/cmd.js + checksum: 4e04078fd22cf274fc1fa430490af3feda1c3bc4dd2fc88880caf6c2e816992d508bc44a7b16721b713a6b98d880f43e10ea4b169529056134cd488403adc8fc + languageName: node + linkType: hard + +"htmlparser2@npm:7.2.0": + version: 7.2.0 + resolution: "htmlparser2@npm:7.2.0" + dependencies: + domelementtype: ^2.0.1 + domhandler: ^4.2.2 + domutils: ^2.8.0 + entities: ^3.0.1 + checksum: 96563d9965729cfcb3f5f19c26d013c6831b4cb38d79d8c185e9cd669ea6a9ffe8fb9ccc74d29a068c9078aa0e2767053ed6b19aa32723c41550340d0094bea0 + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 + languageName: node + linkType: hard + +"http-proxy-agent@npm:^5.0.0": + version: 5.0.0 + resolution: "http-proxy-agent@npm:5.0.0" + dependencies: + "@tootallnate/once": 2 + agent-base: 6 + debug: 4 + checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^5.0.0": + version: 5.0.1 + resolution: "https-proxy-agent@npm:5.0.1" + dependencies: + agent-base: 6 + debug: 4 + checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 + languageName: node + linkType: hard + +"human-signals@npm:^2.1.0": + version: 2.1.0 + resolution: "human-signals@npm:2.1.0" + checksum: b87fd89fce72391625271454e70f67fe405277415b48bcc0117ca73d31fa23a4241787afdc8d67f5a116cf37258c052f59ea82daffa72364d61351423848e3b8 + languageName: node + linkType: hard + +"human-signals@npm:^4.3.0": + version: 4.3.1 + resolution: "human-signals@npm:4.3.1" + checksum: 6f12958df3f21b6fdaf02d90896c271df00636a31e2bbea05bddf817a35c66b38a6fdac5863e2df85bd52f34958997f1f50350ff97249e1dff8452865d5235d1 + languageName: node + linkType: hard + +"humanize-ms@npm:^1.2.1": + version: 1.2.1 + resolution: "humanize-ms@npm:1.2.1" + dependencies: + ms: ^2.0.0 + checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 + languageName: node + linkType: hard + +"husky@npm:^8.0.2": + version: 8.0.3 + resolution: "husky@npm:8.0.3" + bin: + husky: lib/bin.js + checksum: 837bc7e4413e58c1f2946d38fb050f5d7324c6f16b0fd66411ffce5703b294bd21429e8ba58711cd331951ee86ed529c5be4f76805959ff668a337dbfa82a1b0 + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: ">= 2.1.2 < 3.0.0" + checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf + languageName: node + linkType: hard + +"idb-keyval@npm:^6.0.3": + version: 6.2.1 + resolution: "idb-keyval@npm:6.2.1" + checksum: 7c0836f832096086e99258167740181132a71dd2694c8b8454a4f5ec69114ba6d70983115153306f0b6de1c8d3bad04f67eed3dff8f50c96815b9985d6d78470 + languageName: node + linkType: hard + +"ieee754@npm:^1.2.1": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e + languageName: node + linkType: hard + +"ignore@npm:^5.0.0, ignore@npm:^5.1.1, ignore@npm:^5.2.0": + version: 5.2.4 + resolution: "ignore@npm:5.2.4" + checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef + languageName: node + linkType: hard + +"immer@npm:^10.0.2": + version: 10.0.3 + resolution: "immer@npm:10.0.3" + checksum: 76acabe6f40e752028313762ba477a5d901e57b669f3b8fb406b87b9bb9b14e663a6fbbf5a6d1ab323737dd38f4b2494a4e28002045b88948da8dbf482309f28 + languageName: node + linkType: hard + +"immer@npm:^9.0.21": + version: 9.0.21 + resolution: "immer@npm:9.0.21" + checksum: 70e3c274165995352f6936695f0ef4723c52c92c92dd0e9afdfe008175af39fa28e76aafb3a2ca9d57d1fb8f796efc4dd1e1cc36f18d33fa5b74f3dfb0375432 + languageName: node + linkType: hard + +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: ^1.0.0 + resolve-from: ^4.0.0 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + languageName: node + linkType: hard + +"import-local@npm:^3.0.2": + version: 3.1.0 + resolution: "import-local@npm:3.1.0" + dependencies: + pkg-dir: ^4.2.0 + resolve-cwd: ^3.0.0 + bin: + import-local-fixture: fixtures/cli.js + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + languageName: node + linkType: hard + +"import-meta-resolve@npm:^2.0.0": + version: 2.2.2 + resolution: "import-meta-resolve@npm:2.2.2" + checksum: 3a5910a6f914b5f06b307d7d1c25710bc56f12e21e923d5b2180dd0d53c6c2d51e7b55df26f168b63f5670babcaca9422b7a9429e877bbb8c1997d79bd65882b + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 + languageName: node + linkType: hard + +"indent-string@npm:^3.2.0": + version: 3.2.0 + resolution: "indent-string@npm:3.2.0" + checksum: a0b72603bba6c985d367fda3a25aad16423d2056b22a7e83ee2dd9ce0ce3d03d1e078644b679087aa7edf1cfb457f0d96d9eeadc0b12f38582088cc00e995d2f + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: ^1.3.0 + wrappy: 1 + checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.1, inherits@npm:~2.0.3, inherits@npm:~2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 + languageName: node + linkType: hard + +"ini@npm:^4.1.0": + version: 4.1.1 + resolution: "ini@npm:4.1.1" + checksum: 0e5909554074fbc31824fa5415b0f604de4a665514c96a897a77bf77353a7ad4743927321270e9d0610a9d510ccd1f3cd77422f7cc80d8f4542dbce75476fb6d + languageName: node + linkType: hard + +"inline-style-parser@npm:0.1.1": + version: 0.1.1 + resolution: "inline-style-parser@npm:0.1.1" + checksum: 5d545056a3e1f2bf864c928a886a0e1656a3517127d36917b973de581bd54adc91b4bf1febcb0da054f204b4934763f1a4e09308b4d55002327cf1d48ac5d966 + languageName: node + linkType: hard + +"interface-blockstore@npm:^2.0.2, interface-blockstore@npm:^2.0.3": + version: 2.0.3 + resolution: "interface-blockstore@npm:2.0.3" + dependencies: + interface-store: ^2.0.2 + multiformats: ^9.0.4 + checksum: 01248c06fd88ba2cf3c264868dd1363e20266b914c51a0b52ad2303f7c00cc9a52ce1d1830b073cc7293edf195110e4d84ac5d34781bdab5f763f91eeba10898 + languageName: node + linkType: hard + +"interface-datastore@npm:^6.0.2": + version: 6.1.1 + resolution: "interface-datastore@npm:6.1.1" + dependencies: + interface-store: ^2.0.2 + nanoid: ^3.0.2 + uint8arrays: ^3.0.0 + checksum: a0388adabf029be229bbfce326bbe64fd3353373512e7e6ed4283e06710bfa141db118e3536f8535a65016a0abeec631b888d42790b00637879d6ae56cf728cd + languageName: node + linkType: hard + +"interface-store@npm:^2.0.1, interface-store@npm:^2.0.2": + version: 2.0.2 + resolution: "interface-store@npm:2.0.2" + checksum: 0e80adb1de9ff57687cfa1b08499702b72cacf33a7e0320ac7781989f3685d73f2a84996358f540250229afa19c7acebf03085087762f718035622ea6a1a5b8a + languageName: node + linkType: hard + +"internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": + version: 1.0.5 + resolution: "internal-slot@npm:1.0.5" + dependencies: + get-intrinsic: ^1.2.0 + has: ^1.0.3 + side-channel: ^1.0.4 + checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a + languageName: node + linkType: hard + +"intl-messageformat-parser@npm:^5.4.0": + version: 5.5.1 + resolution: "intl-messageformat-parser@npm:5.5.1" + dependencies: + "@formatjs/intl-numberformat": ^5.5.2 + checksum: 31cd86f6dbbbf58bac316f7a59d9c47d4ae0dfee5f6093165121416f6b044d95fe051f1794f2824ce453be8bb8a696da45c20a9bfc64f8dd059dfb04a32c6437 + languageName: node + linkType: hard + +"invariant@npm:^2.2.1, invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: ^1.0.0 + checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + languageName: node + linkType: hard + +"ip-regex@npm:^4.0.0": + version: 4.3.0 + resolution: "ip-regex@npm:4.3.0" + checksum: 7ff904b891221b1847f3fdf3dbb3e6a8660dc39bc283f79eb7ed88f5338e1a3d1104b779bc83759159be266249c59c2160e779ee39446d79d4ed0890dfd06f08 + languageName: node + linkType: hard + +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 + languageName: node + linkType: hard + +"ipfs-car@npm:^0.7.0": + version: 0.7.0 + resolution: "ipfs-car@npm:0.7.0" + dependencies: + "@ipld/car": ^3.2.3 + "@web-std/blob": ^3.0.1 + bl: ^5.0.0 + blockstore-core: ^1.0.2 + browser-readablestream-to-it: ^1.0.2 + idb-keyval: ^6.0.3 + interface-blockstore: ^2.0.2 + ipfs-core-types: ^0.8.3 + ipfs-core-utils: ^0.12.1 + ipfs-unixfs-exporter: ^7.0.4 + ipfs-unixfs-importer: ^9.0.4 + ipfs-utils: ^9.0.2 + it-all: ^1.0.5 + it-last: ^1.0.5 + it-pipe: ^1.1.0 + meow: ^9.0.0 + move-file: ^2.1.0 + multiformats: ^9.6.3 + stream-to-it: ^0.2.3 + streaming-iterables: ^6.0.0 + uint8arrays: ^3.0.0 + bin: + ipfs-car: dist/cjs/cli/cli.js + 🚘: dist/cjs/cli/cli.js + checksum: 52c0a9c68048a92f2d5088556439d47d76ff951cf6077282d6426c24492c0965b65792fa415bf2b119122f71e327583b2c39aee21592cc490572d5daa1356eff + languageName: node + linkType: hard + +"ipfs-core-types@npm:^0.8.3, ipfs-core-types@npm:^0.8.4": + version: 0.8.4 + resolution: "ipfs-core-types@npm:0.8.4" + dependencies: + interface-datastore: ^6.0.2 + multiaddr: ^10.0.0 + multiformats: ^9.4.13 + checksum: 0bf10eb1a469404b4af302356d16c8fb517fb7df15a4d02d3a3930b8fd7d78133220aaf3357b6066e6961187270af611f00483762c4383d24f91884c412c2099 + languageName: node + linkType: hard + +"ipfs-core-utils@npm:^0.12.1": + version: 0.12.2 + resolution: "ipfs-core-utils@npm:0.12.2" + dependencies: + any-signal: ^2.1.2 + blob-to-it: ^1.0.1 + browser-readablestream-to-it: ^1.0.1 + debug: ^4.1.1 + err-code: ^3.0.1 + ipfs-core-types: ^0.8.4 + ipfs-unixfs: ^6.0.3 + ipfs-utils: ^9.0.2 + it-all: ^1.0.4 + it-map: ^1.0.4 + it-peekable: ^1.0.2 + it-to-stream: ^1.0.0 + merge-options: ^3.0.4 + multiaddr: ^10.0.0 + multiaddr-to-uri: ^8.0.0 + multiformats: ^9.4.13 + nanoid: ^3.1.23 + parse-duration: ^1.0.0 + timeout-abort-controller: ^1.1.1 + uint8arrays: ^3.0.0 + checksum: 27aca8bd75f2c89580cd458cc791e2fa6d6f6ee51a0a491c24fa9c50b9bbee4f9eb0c080466cdc8683bfb51935661a7858768bbd656618dc51eb22deafa9f270 + languageName: node + linkType: hard + +"ipfs-unixfs-exporter@npm:^7.0.4": + version: 7.0.11 + resolution: "ipfs-unixfs-exporter@npm:7.0.11" + dependencies: + "@ipld/dag-cbor": ^7.0.2 + "@ipld/dag-pb": ^2.0.2 + "@multiformats/murmur3": ^1.0.3 + err-code: ^3.0.1 + hamt-sharding: ^2.0.0 + interface-blockstore: ^2.0.3 + ipfs-unixfs: ^6.0.0 + it-last: ^1.0.5 + multiformats: ^9.4.2 + uint8arrays: ^3.0.0 + checksum: b419addc600e61bf5952615f7749f866689922a5bb1a083e90b68c95bf227bf1ab0398acb326e868cb828df30589eacec91035470955bb3cdcfb10df2f6d8a1f + languageName: node + linkType: hard + +"ipfs-unixfs-importer@npm:^9.0.4": + version: 9.0.10 + resolution: "ipfs-unixfs-importer@npm:9.0.10" + dependencies: + "@ipld/dag-pb": ^2.0.2 + "@multiformats/murmur3": ^1.0.3 + bl: ^5.0.0 + err-code: ^3.0.1 + hamt-sharding: ^2.0.0 + interface-blockstore: ^2.0.3 + ipfs-unixfs: ^6.0.0 + it-all: ^1.0.5 + it-batch: ^1.0.8 + it-first: ^1.0.6 + it-parallel-batch: ^1.0.9 + merge-options: ^3.0.4 + multiformats: ^9.4.2 + rabin-wasm: ^0.1.4 + uint8arrays: ^3.0.0 + checksum: 062e0a7d6f21fc3020959ae33947531cec652e058bd94e418f7bccb56884ac8f997f929c6ca044a1b2c21bb5f3842d37ae69ed118e3495c2af68d06d6df4a8f9 + languageName: node + linkType: hard + +"ipfs-unixfs@npm:^6.0.0, ipfs-unixfs@npm:^6.0.3, ipfs-unixfs@npm:^6.0.5": + version: 6.0.9 + resolution: "ipfs-unixfs@npm:6.0.9" + dependencies: + err-code: ^3.0.1 + protobufjs: ^6.10.2 + checksum: 025d852c3cfb09b813b35f7a4f7a06bd0ff904f88b35cdf54c6ea1eb021f1597ab9c2739adabbae9cfe645a2323598bd7974ff4a8898701bc4ba92842bf21736 + languageName: node + linkType: hard + +"ipfs-utils@npm:^9.0.2": + version: 9.0.14 + resolution: "ipfs-utils@npm:9.0.14" + dependencies: + any-signal: ^3.0.0 + browser-readablestream-to-it: ^1.0.0 + buffer: ^6.0.1 + electron-fetch: ^1.7.2 + err-code: ^3.0.1 + is-electron: ^2.2.0 + iso-url: ^1.1.5 + it-all: ^1.0.4 + it-glob: ^1.0.1 + it-to-stream: ^1.0.0 + merge-options: ^3.0.4 + nanoid: ^3.1.20 + native-fetch: ^3.0.0 + node-fetch: ^2.6.8 + react-native-fetch-api: ^3.0.0 + stream-to-it: ^0.2.2 + checksum: 08108e03ea7b90e0fa11b76a4e24bd29d7e027c603494b53c1cc37b367fb559eaeea7b0f10b2e83ee419d50cdcb4d8105febdf185cab75c7e55afd4c8ed51aba + languageName: node + linkType: hard + +"ipns@npm:^0.16.0": + version: 0.16.0 + resolution: "ipns@npm:0.16.0" + dependencies: + cborg: ^1.3.3 + debug: ^4.2.0 + err-code: ^3.0.1 + interface-datastore: ^6.0.2 + libp2p-crypto: ^0.21.0 + long: ^4.0.0 + multiformats: ^9.4.5 + peer-id: ^0.16.0 + protobufjs: ^6.10.2 + timestamp-nano: ^1.0.0 + uint8arrays: ^3.0.0 + checksum: ef7be2c2afc7474c8ea9126ebe45598bba48675a3d613ab58fe988d566fdb19174f429ae035ccfd45e50ad9836db4f00e803bde154002479027214394e0fe1ad + languageName: node + linkType: hard + +"irregular-plurals@npm:^1.0.0": + version: 1.4.0 + resolution: "irregular-plurals@npm:1.4.0" + checksum: 43f98bef68101bfc1bbd23d1a6ec2c8175f40707639880f7c007784bf3e8352794418039c29d0fd668c3516ee5f5156d765b5266e239bf5a5e1705d72fb4e61e + languageName: node + linkType: hard + +"is-alphabetical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphabetical@npm:1.0.4" + checksum: 6508cce44fd348f06705d377b260974f4ce68c74000e7da4045f0d919e568226dc3ce9685c5a2af272195384df6930f748ce9213fc9f399b5d31b362c66312cb + languageName: node + linkType: hard + +"is-alphabetical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphabetical@npm:2.0.1" + checksum: 56207db8d9de0850f0cd30f4966bf731eb82cedfe496cbc2e97e7c3bacaf66fc54a972d2d08c0d93bb679cb84976a05d24c5ad63de56fabbfc60aadae312edaa + languageName: node + linkType: hard + +"is-alphanumerical@npm:^1.0.0": + version: 1.0.4 + resolution: "is-alphanumerical@npm:1.0.4" + dependencies: + is-alphabetical: ^1.0.0 + is-decimal: ^1.0.0 + checksum: e2e491acc16fcf5b363f7c726f666a9538dba0a043665740feb45bba1652457a73441e7c5179c6768a638ed396db3437e9905f403644ec7c468fb41f4813d03f + languageName: node + linkType: hard + +"is-alphanumerical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphanumerical@npm:2.0.1" + dependencies: + is-alphabetical: ^2.0.0 + is-decimal: ^2.0.0 + checksum: 87acc068008d4c9c4e9f5bd5e251041d42e7a50995c77b1499cf6ed248f971aadeddb11f239cabf09f7975ee58cac7a48ffc170b7890076d8d227b24a68663c9 + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.1": + version: 1.1.1 + resolution: "is-arguments@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": + version: 3.0.2 + resolution: "is-array-buffer@npm:3.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.0 + is-typed-array: ^1.1.10 + checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f + languageName: node + linkType: hard + +"is-async-function@npm:^2.0.0": + version: 2.0.0 + resolution: "is-async-function@npm:2.0.0" + dependencies: + has-tostringtag: ^1.0.0 + checksum: e3471d95e6c014bf37cad8a93f2f4b6aac962178e0a5041e8903147166964fdc1c5c1d2ef87e86d77322c370ca18f2ea004fa7420581fa747bcaf7c223069dbd + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: ^1.0.1 + checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 + languageName: node + linkType: hard + +"is-buffer@npm:^2.0.0": + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0, is-core-module@npm:^2.5.0": + version: 2.13.0 + resolution: "is-core-module@npm:2.13.0" + dependencies: + has: ^1.0.3 + checksum: 053ab101fb390bfeb2333360fd131387bed54e476b26860dc7f5a700bbf34a0ec4454f7c8c4d43e8a0030957e4b3db6e16d35e1890ea6fb654c833095e040355 + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: ^1.0.0 + checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc + languageName: node + linkType: hard + +"is-decimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-decimal@npm:1.0.4" + checksum: ed483a387517856dc395c68403a10201fddcc1b63dc56513fbe2fe86ab38766120090ecdbfed89223d84ca8b1cd28b0641b93cb6597b6e8f4c097a7c24e3fb96 + languageName: node + linkType: hard + +"is-decimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-decimal@npm:2.0.1" + checksum: 97132de7acdce77caa7b797632970a2ecd649a88e715db0e4dbc00ab0708b5e7574ba5903962c860cd4894a14fd12b100c0c4ac8aed445cf6f55c6cf747a4158 + languageName: node + linkType: hard + +"is-docker@npm:^2.0.0": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 + languageName: node + linkType: hard + +"is-electron@npm:^2.2.0": + version: 2.2.2 + resolution: "is-electron@npm:2.2.2" + checksum: de5aa8bd8d72c96675b8d0f93fab4cc21f62be5440f65bc05c61338ca27bd851a64200f31f1bf9facbaa01b3dbfed7997b2186741d84b93b63e0aff1db6a9494 + languageName: node + linkType: hard + +"is-empty@npm:^1.0.0": + version: 1.2.0 + resolution: "is-empty@npm:1.2.0" + checksum: dc80e0a8ad5439d98d128d126fe69e5dcd6b474e29753107bcfe82fc7d628c9da618d48bb24878a7891f231696405ad0a854dfe3cfc955c23d24e80d9e252e62 + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 + languageName: node + linkType: hard + +"is-finalizationregistry@npm:^1.0.2": + version: 1.0.2 + resolution: "is-finalizationregistry@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 4f243a8e06228cd45bdab8608d2cb7abfc20f6f0189c8ac21ea8d603f1f196eabd531ce0bb8e08cbab047e9845ef2c191a3761c9a17ad5cabf8b35499c4ad35d + languageName: node + linkType: hard + +"is-finite@npm:^1.0.1": + version: 1.1.0 + resolution: "is-finite@npm:1.1.0" + checksum: 532b97ed3d03e04c6bd203984d9e4ba3c0c390efee492bad5d1d1cd1802a68ab27adbd3ef6382f6312bed6c8bb1bd3e325ea79a8dc8fe080ed7a06f5f97b93e7 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 8ae89bf5057bdf4f57b346fb6c55e9c3dd2549983d54191d722d5c739397a903012cc41a04ee3403fd872e811243ef91a7c5196da7b5841dc6b6aae31a264a8d + languageName: node + linkType: hard + +"is-generator-fn@npm:^2.0.0": + version: 2.1.0 + resolution: "is-generator-fn@npm:2.1.0" + checksum: a6ad5492cf9d1746f73b6744e0c43c0020510b59d56ddcb78a91cbc173f09b5e6beff53d75c9c5a29feb618bfef2bf458e025ecf3a57ad2268e2fb2569f56215 + languageName: node + linkType: hard + +"is-generator-function@npm:^1.0.10, is-generator-function@npm:^1.0.7": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: ^2.1.1 + checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 + languageName: node + linkType: hard + +"is-hex-prefixed@npm:1.0.0": + version: 1.0.0 + resolution: "is-hex-prefixed@npm:1.0.0" + checksum: 5ac58e6e528fb029cc43140f6eeb380fad23d0041cc23154b87f7c9a1b728bcf05909974e47248fd0b7fcc11ba33cf7e58d64804883056fabd23e2b898be41de + languageName: node + linkType: hard + +"is-hexadecimal@npm:^1.0.0": + version: 1.0.4 + resolution: "is-hexadecimal@npm:1.0.4" + checksum: a452e047587b6069332d83130f54d30da4faf2f2ebaa2ce6d073c27b5703d030d58ed9e0b729c8e4e5b52c6f1dab26781bb77b7bc6c7805f14f320e328ff8cd5 + languageName: node + linkType: hard + +"is-hexadecimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-hexadecimal@npm:2.0.1" + checksum: 66a2ea85994c622858f063f23eda506db29d92b52580709eb6f4c19550552d4dcf3fb81952e52f7cf972097237959e00adc7bb8c9400cd12886e15bf06145321 + languageName: node + linkType: hard + +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" + dependencies: + is-docker: ^3.0.0 + bin: + is-inside-container: cli.js + checksum: c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 + languageName: node + linkType: hard + +"is-ip@npm:^3.1.0": + version: 3.1.0 + resolution: "is-ip@npm:3.1.0" + dependencies: + ip-regex: ^4.0.0 + checksum: da2c2b282407194adf2320bade0bad94be9c9d0bdab85ff45b1b62d8185f31c65dff3884519d57bf270277e5ea2046c7916a6e5a6db22fe4b7ddcdd3760f23eb + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 + languageName: node + linkType: hard + +"is-map@npm:^2.0.1, is-map@npm:^2.0.2": + version: 2.0.2 + resolution: "is-map@npm:2.0.2" + checksum: ace3d0ecd667bbdefdb1852de601268f67f2db725624b1958f279316e13fecb8fa7df91fd60f690d7417b4ec180712f5a7ee967008e27c65cfd475cc84337728 + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.2": + version: 2.0.2 + resolution: "is-negative-zero@npm:2.0.2" + checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a + languageName: node + linkType: hard + +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 + languageName: node + linkType: hard + +"is-plain-obj@npm:2.1.0, is-plain-obj@npm:^2.1.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + languageName: node + linkType: hard + +"is-plain-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "is-plain-obj@npm:1.1.0" + checksum: 0ee04807797aad50859652a7467481816cbb57e5cc97d813a7dcd8915da8195dc68c436010bf39d195226cde6a2d352f4b815f16f26b7bf486a5754290629931 + languageName: node + linkType: hard + +"is-plain-obj@npm:^4.0.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce + languageName: node + linkType: hard + +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 + languageName: node + linkType: hard + +"is-set@npm:^2.0.1, is-set@npm:^2.0.2": + version: 2.0.2 + resolution: "is-set@npm:2.0.2" + checksum: b64343faf45e9387b97a6fd32be632ee7b269bd8183701f3b3f5b71a7cf00d04450ed8669d0bd08753e08b968beda96fca73a10fd0ff56a32603f64deba55a57 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "is-shared-array-buffer@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a + languageName: node + linkType: hard + +"is-stream@npm:^2.0.0": + version: 2.0.1 + resolution: "is-stream@npm:2.0.1" + checksum: b8e05ccdf96ac330ea83c12450304d4a591f9958c11fd17bed240af8d5ffe08aedafa4c0f4cfccd4d28dc9d4d129daca1023633d5c11601a6cbc77521f6fae66 + languageName: node + linkType: hard + +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 + languageName: node + linkType: hard + +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: ^1.0.0 + checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: ^1.0.2 + checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.12, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": + version: 1.1.12 + resolution: "is-typed-array@npm:1.1.12" + dependencies: + which-typed-array: ^1.1.11 + checksum: 4c89c4a3be07186caddadf92197b17fda663a9d259ea0d44a85f171558270d36059d1c386d34a12cba22dfade5aba497ce22778e866adc9406098c8fc4771796 + languageName: node + linkType: hard + +"is-typedarray@npm:1.0.0, is-typedarray@npm:^1.0.0": + version: 1.0.0 + resolution: "is-typedarray@npm:1.0.0" + checksum: 3508c6cd0a9ee2e0df2fa2e9baabcdc89e911c7bd5cf64604586697212feec525aa21050e48affb5ffc3df20f0f5d2e2cf79b08caa64e1ccc9578e251763aef7 + languageName: node + linkType: hard + +"is-weakmap@npm:^2.0.1": + version: 2.0.1 + resolution: "is-weakmap@npm:2.0.1" + checksum: 1222bb7e90c32bdb949226e66d26cb7bce12e1e28e3e1b40bfa6b390ba3e08192a8664a703dff2a00a84825f4e022f9cd58c4599ff9981ab72b1d69479f4f7f6 + languageName: node + linkType: hard + +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de + languageName: node + linkType: hard + +"is-weakset@npm:^2.0.1": + version: 2.0.2 + resolution: "is-weakset@npm:2.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 5d8698d1fa599a0635d7ca85be9c26d547b317ed8fd83fc75f03efbe75d50001b5eececb1e9971de85fcde84f69ae6f8346bc92d20d55d46201d328e4c74a367 + languageName: node + linkType: hard + +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: ^2.0.0 + checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"isarray@npm:0.0.1": + version: 0.0.1 + resolution: "isarray@npm:0.0.1" + checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 + languageName: node + linkType: hard + +"iso-random-stream@npm:^2.0.0": + version: 2.0.2 + resolution: "iso-random-stream@npm:2.0.2" + dependencies: + events: ^3.3.0 + readable-stream: ^3.4.0 + checksum: 53d44061cc7a000df4a35aa544fe04c7d0c903238ee8bb903b5eb280edaa6862512f7f7804cc4e35598e20accf9effc1131bdd6c8f5554ccf96e731ce969d77b + languageName: node + linkType: hard + +"iso-url@npm:^1.1.5": + version: 1.2.1 + resolution: "iso-url@npm:1.2.1" + checksum: 1af98c4ed6a39598407fd8c3c13e997c978985f477af2be3390d2aa3e422b4b5992ffbb0dac68656b165c71850fff748ac1309d29d4f2a728707d76bf0f98557 + languageName: node + linkType: hard + +"isomorphic-ws@npm:^4.0.1": + version: 4.0.1 + resolution: "isomorphic-ws@npm:4.0.1" + peerDependencies: + ws: "*" + checksum: d7190eadefdc28bdb93d67b5f0c603385aaf87724fa2974abb382ac1ec9756ed2cfb27065cbe76122879c2d452e2982bc4314317f3d6c737ddda6c047328771a + languageName: node + linkType: hard + +"isows@npm:1.0.3": + version: 1.0.3 + resolution: "isows@npm:1.0.3" + peerDependencies: + ws: "*" + checksum: 9cacd5cf59f67deb51e825580cd445ab1725ecb05a67c704050383fb772856f3cd5e7da8ad08f5a3bd2823680d77d099459d0c6a7037972a74d6429af61af440 + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": + version: 3.2.0 + resolution: "istanbul-lib-coverage@npm:3.2.0" + checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^5.0.4": + version: 5.2.1 + resolution: "istanbul-lib-instrument@npm:5.2.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^6.3.0 + checksum: bf16f1803ba5e51b28bbd49ed955a736488381e09375d830e42ddeb403855b2006f850711d95ad726f2ba3f1ae8e7366de7e51d2b9ac67dc4d80191ef7ddf272 + languageName: node + linkType: hard + +"istanbul-lib-instrument@npm:^6.0.0": + version: 6.0.1 + resolution: "istanbul-lib-instrument@npm:6.0.1" + dependencies: + "@babel/core": ^7.12.3 + "@babel/parser": ^7.14.7 + "@istanbuljs/schema": ^0.1.2 + istanbul-lib-coverage: ^3.2.0 + semver: ^7.5.4 + checksum: fb23472e739cfc9b027cefcd7d551d5e7ca7ff2817ae5150fab99fe42786a7f7b56a29a2aa8309c37092e18297b8003f9c274f50ca4360949094d17fbac81472 + languageName: node + linkType: hard + +"istanbul-lib-report@npm:^3.0.0": + version: 3.0.1 + resolution: "istanbul-lib-report@npm:3.0.1" + dependencies: + istanbul-lib-coverage: ^3.0.0 + make-dir: ^4.0.0 + supports-color: ^7.1.0 + checksum: fd17a1b879e7faf9bb1dc8f80b2a16e9f5b7b8498fe6ed580a618c34df0bfe53d2abd35bf8a0a00e628fb7405462576427c7df20bbe4148d19c14b431c974b21 + languageName: node + linkType: hard + +"istanbul-lib-source-maps@npm:^4.0.0": + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" + dependencies: + debug: ^4.1.1 + istanbul-lib-coverage: ^3.0.0 + source-map: ^0.6.1 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + languageName: node + linkType: hard + +"istanbul-reports@npm:^3.1.3": + version: 3.1.6 + resolution: "istanbul-reports@npm:3.1.6" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 44c4c0582f287f02341e9720997f9e82c071627e1e862895745d5f52ec72c9b9f38e1d12370015d2a71dcead794f34c7732aaef3fab80a24bc617a21c3d911d6 + languageName: node + linkType: hard + +"it-all@npm:^1.0.4, it-all@npm:^1.0.5": + version: 1.0.6 + resolution: "it-all@npm:1.0.6" + checksum: 7ca9a528c08ebe2fc8a3c93a41409219d18325ed31fedb9834ebac2822f0b2a96d7abcb6cbfa092114ab4d5f08951e694c7a2c3929ce4b5300769e710ae665db + languageName: node + linkType: hard + +"it-batch@npm:^1.0.8, it-batch@npm:^1.0.9": + version: 1.0.9 + resolution: "it-batch@npm:1.0.9" + checksum: b1db82fa51db579bd880f84ad48eba8b4dfca5aec38a5779faa58849aec6b83a2f8b6514bccb6ce9fd49782953b1b399d7b568f35cfb6df54f8a376801d5106e + languageName: node + linkType: hard + +"it-drain@npm:^1.0.4": + version: 1.0.5 + resolution: "it-drain@npm:1.0.5" + checksum: 568a07e54302e2f933f61260e8e43b0d14f753470dd03d26e87e568cdde0ba6a7fd939cc10f223142e8007bb7c6b668c9207c64bd1c9b07105f06cb61fc8673e + languageName: node + linkType: hard + +"it-filter@npm:^1.0.2": + version: 1.0.3 + resolution: "it-filter@npm:1.0.3" + checksum: 4eb39fdc9e3a09eb030a0a0e7eb295eb0dbc261a428da9c8062f565c158b1ea2939ffd92c0b13ec48055278f93f1d7b719174b9f067f0ceefbf8fd58bd4e937d + languageName: node + linkType: hard + +"it-first@npm:^1.0.6": + version: 1.0.7 + resolution: "it-first@npm:1.0.7" + checksum: 0c9106d29120f02e68a08118de328437fb44c966385635d672684d4f0321ee22ca470a30f390132bdb454da0d4d3abb82c796dad8e391a827f1a3446711c7685 + languageName: node + linkType: hard + +"it-glob@npm:^0.0.13": + version: 0.0.13 + resolution: "it-glob@npm:0.0.13" + dependencies: + "@types/minimatch": ^3.0.4 + minimatch: ^3.0.4 + checksum: 8903bd0b2a2e6b13a09b2d4bafe6d02845ec405da27ee0916dbe799f8f23e5ef57854596b04d3fc2353ffac918fac3388d0b37e8b18a5aaad1b925655948015c + languageName: node + linkType: hard + +"it-glob@npm:^1.0.1": + version: 1.0.2 + resolution: "it-glob@npm:1.0.2" + dependencies: + "@types/minimatch": ^3.0.4 + minimatch: ^3.0.4 + checksum: 629e7b66510006041df98882acfd73ac785836d51fc3ffa5c83c7099f931b3287a64c5a3772e7c1e46b63f1d511a9222f5b637c50f1c738222b46d104ff2e91c + languageName: node + linkType: hard + +"it-last@npm:^1.0.5": + version: 1.0.6 + resolution: "it-last@npm:1.0.6" + checksum: bc7b68ddd6cae902f0095d0c7ccb0078abdfa41fbf55862a9df9e30ae74be08282b5b3d21f40e6103af0d202144974e216d3c44f3e8f93c2c3f890322b02fcfa + languageName: node + linkType: hard + +"it-map@npm:^1.0.4": + version: 1.0.6 + resolution: "it-map@npm:1.0.6" + checksum: 5eb9da69e5d58624c79cea13dd8eeffe8a1ab6a28a527ac4d0301304279ffbe8da94faf50aa269e2a1630c94dc30a6bfe7a135bfb0c7e887216efad7c41a9f52 + languageName: node + linkType: hard + +"it-parallel-batch@npm:^1.0.9": + version: 1.0.11 + resolution: "it-parallel-batch@npm:1.0.11" + dependencies: + it-batch: ^1.0.9 + checksum: 4c4ad170e95f584c70a83ed39b582d1c574c24830242afbbcc948c151b6a0a7c9cff7067680b8b850662a2b52850c40e3b3ed765cf2027f92e01ce3e0f15bce3 + languageName: node + linkType: hard + +"it-peekable@npm:^1.0.2": + version: 1.0.3 + resolution: "it-peekable@npm:1.0.3" + checksum: 6e9d68cbf582e301f191b8ad2660957c12c8100804a298fd5732ee35f2dd466a6af64d88d91343f2614675b4d4fb546618335303e9356659a9a0868c08b1ca54 + languageName: node + linkType: hard + +"it-pipe@npm:^1.1.0": + version: 1.1.0 + resolution: "it-pipe@npm:1.1.0" + checksum: d653078f1543851f55070e38426dbbebad1303e9adde5238e4192b8b38ac7e4a1dcc149ccf3e4269759d1cbdd00be98b346fc8db81117c81017f09577f050e8e + languageName: node + linkType: hard + +"it-take@npm:^1.0.1": + version: 1.0.2 + resolution: "it-take@npm:1.0.2" + checksum: f669358761eea8ed295976aab50374ae6cf0fa0a31b3fe98bfcef17c80fbe23bb36e3b53b9bf6ca08cb90380203e49a8f5965593636255ca8e4a9bbd8026f43c + languageName: node + linkType: hard + +"it-to-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "it-to-stream@npm:1.0.0" + dependencies: + buffer: ^6.0.3 + fast-fifo: ^1.0.0 + get-iterator: ^1.0.2 + p-defer: ^3.0.0 + p-fifo: ^1.0.0 + readable-stream: ^3.6.0 + checksum: e0c5a3f3c90d4bc52686217865b8fa202f64bd3af493dec0fdacd58b4237166fb68935ff2823ed0a16414ba5becb9a5fb8c98f3ec99584789776d7277c1d129f + languageName: node + linkType: hard + +"iterator.prototype@npm:^1.1.2": + version: 1.1.2 + resolution: "iterator.prototype@npm:1.1.2" + dependencies: + define-properties: ^1.2.1 + get-intrinsic: ^1.2.1 + has-symbols: ^1.0.3 + reflect.getprototypeof: ^1.0.4 + set-function-name: ^2.0.1 + checksum: d8a507e2ccdc2ce762e8a1d3f4438c5669160ac72b88b648e59a688eec6bc4e64b22338e74000518418d9e693faf2a092d2af21b9ec7dbf7763b037a54701168 + languageName: node + linkType: hard + +"jackspeak@npm:^2.3.5": + version: 2.3.6 + resolution: "jackspeak@npm:2.3.6" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 57d43ad11eadc98cdfe7496612f6bbb5255ea69fe51ea431162db302c2a11011642f50cfad57288bd0aea78384a0612b16e131944ad8ecd09d619041c8531b54 + languageName: node + linkType: hard + +"javascript-natural-sort@npm:0.7.1": + version: 0.7.1 + resolution: "javascript-natural-sort@npm:0.7.1" + checksum: 161e2c512cc7884bc055a582c6645d9032cab88497a76123d73cb23bfb03d97a04cf7772ecdb8bd3366fc07192c2f996366f479f725c23ef073fffe03d6a586a + languageName: node + linkType: hard + +"jayson@npm:^4.1.0": + version: 4.1.0 + resolution: "jayson@npm:4.1.0" + dependencies: + "@types/connect": ^3.4.33 + "@types/node": ^12.12.54 + "@types/ws": ^7.4.4 + JSONStream: ^1.3.5 + commander: ^2.20.3 + delay: ^5.0.0 + es6-promisify: ^5.0.0 + eyes: ^0.1.8 + isomorphic-ws: ^4.0.1 + json-stringify-safe: ^5.0.1 + uuid: ^8.3.2 + ws: ^7.4.5 + bin: + jayson: bin/jayson.js + checksum: 86464322fbdc6db65d2bb4fc278cb6c86fad5c2a506065490d39459f09ba0d30f2b4fb740b33828a1424791419b6c8bd295dc54d361a4ad959bf70cc62b1ca7e + languageName: node + linkType: hard + +"jest-changed-files@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-changed-files@npm:29.7.0" + dependencies: + execa: ^5.0.0 + jest-util: ^29.7.0 + p-limit: ^3.1.0 + checksum: 963e203893c396c5dfc75e00a49426688efea7361b0f0e040035809cecd2d46b3c01c02be2d9e8d38b1138357d2de7719ea5b5be21f66c10f2e9685a5a73bb99 + languageName: node + linkType: hard + +"jest-circus@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-circus@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/expect": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^1.0.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.7.0 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-runtime: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + p-limit: ^3.1.0 + pretty-format: ^29.7.0 + pure-rand: ^6.0.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 349437148924a5a109c9b8aad6d393a9591b4dac1918fc97d81b7fc515bc905af9918495055071404af1fab4e48e4b04ac3593477b1d5dcf48c4e71b527c70a7 + languageName: node + linkType: hard + +"jest-cli@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-cli@npm:29.7.0" + dependencies: + "@jest/core": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + create-jest: ^29.7.0 + exit: ^0.1.2 + import-local: ^3.0.2 + jest-config: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 664901277a3f5007ea4870632ed6e7889db9da35b2434e7cb488443e6bf5513889b344b7fddf15112135495b9875892b156faeb2d7391ddb9e2a849dcb7b6c36 + languageName: node + linkType: hard + +"jest-config@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-config@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.7.0 + "@jest/types": ^29.6.3 + babel-jest: ^29.7.0 + chalk: ^4.0.0 + ci-info: ^3.2.0 + deepmerge: ^4.2.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-get-type: ^29.6.3 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-runner: ^29.7.0 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.7.0 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: 4cabf8f894c180cac80b7df1038912a3fc88f96f2622de33832f4b3314f83e22b08fb751da570c0ab2b7988f21604bdabade95e3c0c041068ac578c085cf7dff + languageName: node + linkType: hard + +"jest-diff@npm:^22.0.3": + version: 22.4.3 + resolution: "jest-diff@npm:22.4.3" + dependencies: + chalk: ^2.0.1 + diff: ^3.2.0 + jest-get-type: ^22.4.3 + pretty-format: ^22.4.3 + checksum: 1396d1f064570cd2dec35a235022017a338d4370180a492e1afce05b174fdced971b51c9771a5ff94f22b1ed6dd005d9dc53d2f049704d6285bfe4820217a7c8 + languageName: node + linkType: hard + +"jest-diff@npm:^29.0.0, jest-diff@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-diff@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.6.3 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: 08e24a9dd43bfba1ef07a6374e5af138f53137b79ec3d5cc71a2303515335898888fa5409959172e1e05de966c9e714368d15e8994b0af7441f0721ee8e1bb77 + languageName: node + linkType: hard + +"jest-docblock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-docblock@npm:29.7.0" + dependencies: + detect-newline: ^3.0.0 + checksum: 66390c3e9451f8d96c5da62f577a1dad701180cfa9b071c5025acab2f94d7a3efc2515cfa1654ebe707213241541ce9c5530232cdc8017c91ed64eea1bd3b192 + languageName: node + linkType: hard + +"jest-each@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-each@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + jest-util: ^29.7.0 + pretty-format: ^29.7.0 + checksum: e88f99f0184000fc8813f2a0aa79e29deeb63700a3b9b7928b8a418d7d93cd24933608591dbbdea732b473eb2021c72991b5cc51a17966842841c6e28e6f691c + languageName: node + linkType: hard + +"jest-environment-node@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-environment-node@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-mock: ^29.7.0 + jest-util: ^29.7.0 + checksum: 501a9966292cbe0ca3f40057a37587cb6def25e1e0c5e39ac6c650fe78d3c70a2428304341d084ac0cced5041483acef41c477abac47e9a290d5545fd2f15646 + languageName: node + linkType: hard + +"jest-extended@npm:^4.0.2": + version: 4.0.2 + resolution: "jest-extended@npm:4.0.2" + dependencies: + jest-diff: ^29.0.0 + jest-get-type: ^29.0.0 + peerDependencies: + jest: ">=27.2.5" + peerDependenciesMeta: + jest: + optional: true + checksum: afdc255eec7caa173f9e805e94562273d8b8aa4c7ab9b396668f018c18ea5236270a6ac499ca84b8c60e90ccbe9ccb4aebf998daef13aec9542c426df1df6079 + languageName: node + linkType: hard + +"jest-get-type@npm:^22.4.3": + version: 22.4.3 + resolution: "jest-get-type@npm:22.4.3" + checksum: f2daab7cb762457cdcd5500e3b0222cc96856649b685c40a621fe7395147ee67bbb594a2285b28c0b3cb9d80819eca4f99dd450df1bcac8a7cffa8a2dbaeec31 + languageName: node + linkType: hard + +"jest-get-type@npm:^29.0.0, jest-get-type@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-get-type@npm:29.6.3" + checksum: 88ac9102d4679d768accae29f1e75f592b760b44277df288ad76ce5bf038c3f5ce3719dea8aa0f035dac30e9eb034b848ce716b9183ad7cc222d029f03e92205 + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-haste-map@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.6.3 + jest-util: ^29.7.0 + jest-worker: ^29.7.0 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: c2c8f2d3e792a963940fbdfa563ce14ef9e14d4d86da645b96d3cd346b8d35c5ce0b992ee08593939b5f718cf0a1f5a90011a056548a1dbf58397d4356786f01 + languageName: node + linkType: hard + +"jest-leak-detector@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-leak-detector@npm:29.7.0" + dependencies: + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: e3950e3ddd71e1d0c22924c51a300a1c2db6cf69ec1e51f95ccf424bcc070f78664813bef7aed4b16b96dfbdeea53fe358f8aeaaea84346ae15c3735758f1605 + languageName: node + linkType: hard + +"jest-matcher-utils@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-matcher-utils@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + pretty-format: ^29.7.0 + checksum: d7259e5f995d915e8a37a8fd494cb7d6af24cd2a287b200f831717ba0d015190375f9f5dc35393b8ba2aae9b2ebd60984635269c7f8cff7d85b077543b7744cd + languageName: node + linkType: hard + +"jest-message-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-message-util@npm:29.7.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.6.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.7.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: a9d025b1c6726a2ff17d54cc694de088b0489456c69106be6b615db7a51b7beb66788bea7a59991a019d924fbf20f67d085a445aedb9a4d6760363f4d7d09930 + languageName: node + linkType: hard + +"jest-mock@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-mock@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + jest-util: ^29.7.0 + checksum: 81ba9b68689a60be1482212878973700347cb72833c5e5af09895882b9eb5c4e02843a1bbdf23f94c52d42708bab53a30c45a3482952c9eec173d1eaac5b86c5 + languageName: node + linkType: hard + +"jest-pnp-resolver@npm:^1.2.2": + version: 1.2.3 + resolution: "jest-pnp-resolver@npm:1.2.3" + peerDependencies: + jest-resolve: "*" + peerDependenciesMeta: + jest-resolve: + optional: true + checksum: db1a8ab2cb97ca19c01b1cfa9a9c8c69a143fde833c14df1fab0766f411b1148ff0df878adea09007ac6a2085ec116ba9a996a6ad104b1e58c20adbf88eed9b2 + languageName: node + linkType: hard + +"jest-regex-util@npm:^29.6.3": + version: 29.6.3 + resolution: "jest-regex-util@npm:29.6.3" + checksum: 0518beeb9bf1228261695e54f0feaad3606df26a19764bc19541e0fc6e2a3737191904607fb72f3f2ce85d9c16b28df79b7b1ec9443aa08c3ef0e9efda6f8f2a + languageName: node + linkType: hard + +"jest-resolve-dependencies@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve-dependencies@npm:29.7.0" + dependencies: + jest-regex-util: ^29.6.3 + jest-snapshot: ^29.7.0 + checksum: aeb75d8150aaae60ca2bb345a0d198f23496494677cd6aefa26fc005faf354061f073982175daaf32b4b9d86b26ca928586344516e3e6969aa614cb13b883984 + languageName: node + linkType: hard + +"jest-resolve@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-resolve@npm:29.7.0" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-pnp-resolver: ^1.2.2 + jest-util: ^29.7.0 + jest-validate: ^29.7.0 + resolve: ^1.20.0 + resolve.exports: ^2.0.0 + slash: ^3.0.0 + checksum: 0ca218e10731aa17920526ec39deaec59ab9b966237905ffc4545444481112cd422f01581230eceb7e82d86f44a543d520a71391ec66e1b4ef1a578bd5c73487 + languageName: node + linkType: hard + +"jest-runner@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runner@npm:29.7.0" + dependencies: + "@jest/console": ^29.7.0 + "@jest/environment": ^29.7.0 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.7.0 + jest-environment-node: ^29.7.0 + jest-haste-map: ^29.7.0 + jest-leak-detector: ^29.7.0 + jest-message-util: ^29.7.0 + jest-resolve: ^29.7.0 + jest-runtime: ^29.7.0 + jest-util: ^29.7.0 + jest-watcher: ^29.7.0 + jest-worker: ^29.7.0 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: f0405778ea64812bf9b5c50b598850d94ccf95d7ba21f090c64827b41decd680ee19fcbb494007cdd7f5d0d8906bfc9eceddd8fa583e753e736ecd462d4682fb + languageName: node + linkType: hard + +"jest-runtime@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-runtime@npm:29.7.0" + dependencies: + "@jest/environment": ^29.7.0 + "@jest/fake-timers": ^29.7.0 + "@jest/globals": ^29.7.0 + "@jest/source-map": ^29.6.3 + "@jest/test-result": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + cjs-module-lexer: ^1.0.0 + collect-v8-coverage: ^1.0.0 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.7.0 + jest-message-util: ^29.7.0 + jest-mock: ^29.7.0 + jest-regex-util: ^29.6.3 + jest-resolve: ^29.7.0 + jest-snapshot: ^29.7.0 + jest-util: ^29.7.0 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: d19f113d013e80691e07047f68e1e3448ef024ff2c6b586ce4f90cd7d4c62a2cd1d460110491019719f3c59bfebe16f0e201ed005ef9f80e2cf798c374eed54e + languageName: node + linkType: hard + +"jest-snapshot@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-snapshot@npm:29.7.0" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.7.0 + "@jest/transform": ^29.7.0 + "@jest/types": ^29.6.3 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^29.7.0 + graceful-fs: ^4.2.9 + jest-diff: ^29.7.0 + jest-get-type: ^29.6.3 + jest-matcher-utils: ^29.7.0 + jest-message-util: ^29.7.0 + jest-util: ^29.7.0 + natural-compare: ^1.4.0 + pretty-format: ^29.7.0 + semver: ^7.5.3 + checksum: 86821c3ad0b6899521ce75ee1ae7b01b17e6dfeff9166f2cf17f012e0c5d8c798f30f9e4f8f7f5bed01ea7b55a6bc159f5eda778311162cbfa48785447c237ad + languageName: node + linkType: hard + +"jest-util@npm:^29.0.0, jest-util@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-util@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 042ab4980f4ccd4d50226e01e5c7376a8556b472442ca6091a8f102488c0f22e6e8b89ea874111d2328a2080083bf3225c86f3788c52af0bd0345a00eb57a3ca + languageName: node + linkType: hard + +"jest-validate@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-validate@npm:29.7.0" + dependencies: + "@jest/types": ^29.6.3 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.6.3 + leven: ^3.1.0 + pretty-format: ^29.7.0 + checksum: 191fcdc980f8a0de4dbdd879fa276435d00eb157a48683af7b3b1b98b0f7d9de7ffe12689b617779097ff1ed77601b9f7126b0871bba4f776e222c40f62e9dae + languageName: node + linkType: hard + +"jest-watcher@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-watcher@npm:29.7.0" + dependencies: + "@jest/test-result": ^29.7.0 + "@jest/types": ^29.6.3 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.13.1 + jest-util: ^29.7.0 + string-length: ^4.0.1 + checksum: 67e6e7fe695416deff96b93a14a561a6db69389a0667e9489f24485bb85e5b54e12f3b2ba511ec0b777eca1e727235b073e3ebcdd473d68888650489f88df92f + languageName: node + linkType: hard + +"jest-worker@npm:^29.7.0": + version: 29.7.0 + resolution: "jest-worker@npm:29.7.0" + dependencies: + "@types/node": "*" + jest-util: ^29.7.0 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 30fff60af49675273644d408b650fc2eb4b5dcafc5a0a455f238322a8f9d8a98d847baca9d51ff197b6747f54c7901daa2287799230b856a0f48287d131f8c13 + languageName: node + linkType: hard + +"jest@npm:^29.1.0, jest@npm:^29.7.0": + version: 29.7.0 + resolution: "jest@npm:29.7.0" + dependencies: + "@jest/core": ^29.7.0 + "@jest/types": ^29.6.3 + import-local: ^3.0.2 + jest-cli: ^29.7.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 17ca8d67504a7dbb1998cf3c3077ec9031ba3eb512da8d71cb91bcabb2b8995c4e4b292b740cb9bf1cbff5ce3e110b3f7c777b0cefb6f41ab05445f248d0ee0b + languageName: node + linkType: hard + +"joi@npm:^17.9.2": + version: 17.11.0 + resolution: "joi@npm:17.11.0" + dependencies: + "@hapi/hoek": ^9.0.0 + "@hapi/topo": ^5.0.0 + "@sideway/address": ^4.1.3 + "@sideway/formula": ^3.0.1 + "@sideway/pinpoint": ^2.0.0 + checksum: 3a4e9ecba345cdafe585e7ed8270a44b39718e11dff3749aa27e0001a63d578b75100c062be28e6f48f960b594864034e7a13833f33fbd7ad56d5ce6b617f9bf + languageName: node + linkType: hard + +"jose@npm:^4.5.0": + version: 4.15.3 + resolution: "jose@npm:4.15.3" + checksum: b76eeccc1d40d0eaf26dfaadc0f88fc15802c9105ab66a24ee223bd84369f7cb217f4a2cb852f5080ff6996170b3a73db2b2d26878b8905d99c36ca432628134 + languageName: node + linkType: hard + +"js-base64@npm:^3.7.2, js-base64@npm:^3.7.5": + version: 3.7.5 + resolution: "js-base64@npm:3.7.5" + checksum: 67a78c8b1c47b73f1c6fba1957e9fe6fd9dc78ac93ac46cc2e43472dcb9cf150d126fb0e593192e88e0497354fa634d17d255add7cc6ee3c7b4d29870faa8e18 + languageName: node + linkType: hard + +"js-sha3@npm:0.8.0": + version: 0.8.0 + resolution: "js-sha3@npm:0.8.0" + checksum: 75df77c1fc266973f06cce8309ce010e9e9f07ec35ab12022ed29b7f0d9c8757f5a73e1b35aa24840dced0dea7059085aa143d817aea9e188e2a80d569d9adce + languageName: node + linkType: hard + +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 + languageName: node + linkType: hard + +"js-yaml@npm:^3.13.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: ^1.0.7 + esprima: ^4.0.0 + bin: + js-yaml: bin/js-yaml.js + checksum: bef146085f472d44dee30ec34e5cf36bf89164f5d585435a3d3da89e52622dff0b188a580e4ad091c3341889e14cb88cac6e4deb16dc5b1e9623bb0601fc255c + languageName: node + linkType: hard + +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^2.3.0, json-parse-even-better-errors@npm:^2.3.1": + version: 2.3.1 + resolution: "json-parse-even-better-errors@npm:2.3.1" + checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f + languageName: node + linkType: hard + +"json-parse-even-better-errors@npm:^3.0.0": + version: 3.0.0 + resolution: "json-parse-even-better-errors@npm:3.0.0" + checksum: f1970b5220c7fa23d888565510752c3d5e863f93668a202fcaa719739fa41485dfc6a1db212f702ebd3c873851cc067aebc2917e3f79763cae2fdb95046f38f3 + languageName: node + linkType: hard + +"json-rpc-engine@npm:6.1.0, json-rpc-engine@npm:^6.1.0": + version: 6.1.0 + resolution: "json-rpc-engine@npm:6.1.0" + dependencies: + "@metamask/safe-event-emitter": ^2.0.0 + eth-rpc-errors: ^4.0.2 + checksum: 33b6c9bbd81abf8e323a0281ee05871713203c40d34a4d0bda27706cd0a0935c7b51845238ba89b73027e44ebc8034bbd82db9f962e6c578eb922d9b95acc8bd + languageName: node + linkType: hard + +"json-rpc-random-id@npm:^1.0.0, json-rpc-random-id@npm:^1.0.1": + version: 1.0.1 + resolution: "json-rpc-random-id@npm:1.0.1" + checksum: fcd2e884193a129ace4002bd65a86e9cdb206733b4693baea77bd8b372cf8de3043fbea27716a2c9a716581a908ca8d978d9dfec4847eb2cf77edb4cf4b2252c + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 + languageName: node + linkType: hard + +"json-stringify-safe@npm:^5.0.1": + version: 5.0.1 + resolution: "json-stringify-safe@npm:5.0.1" + checksum: 48ec0adad5280b8a96bb93f4563aa1667fd7a36334f79149abd42446d0989f2ddc58274b479f4819f1f00617957e6344c886c55d05a4e15ebb4ab931e4a6a8ee + languageName: node + linkType: hard + +"json5@npm:^1.0.2": + version: 1.0.2 + resolution: "json5@npm:1.0.2" + dependencies: + minimist: ^1.2.0 + bin: + json5: lib/cli.js + checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 + languageName: node + linkType: hard + +"json5@npm:^2.1.2, json5@npm:^2.2.2, json5@npm:^2.2.3": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + +"jsonc-parser@npm:^3.0.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 + languageName: node + linkType: hard + +"jsonlint@npm:^1.6.2": + version: 1.6.3 + resolution: "jsonlint@npm:1.6.3" + dependencies: + JSV: ^4.0.x + nomnom: ^1.5.x + bin: + jsonlint: lib/cli.js + checksum: be0972cf552ff1ec589db5d7b20ff31064561fbe4605708f5a260e2dcc18e26acd5bf842ba10dd157706232aca6d6c9116d21005cb3e8fb5ec9d9b01c8869677 + languageName: node + linkType: hard + +"jsonparse@npm:^1.2.0": + version: 1.3.1 + resolution: "jsonparse@npm:1.3.1" + checksum: 6514a7be4674ebf407afca0eda3ba284b69b07f9958a8d3113ef1005f7ec610860c312be067e450c569aab8b89635e332cee3696789c750692bb60daba627f4d + languageName: node + linkType: hard + +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.3": + version: 3.3.5 + resolution: "jsx-ast-utils@npm:3.3.5" + dependencies: + array-includes: ^3.1.6 + array.prototype.flat: ^1.3.1 + object.assign: ^4.1.4 + object.values: ^1.1.6 + checksum: f4b05fa4d7b5234230c905cfa88d36dc8a58a6666975a3891429b1a8cdc8a140bca76c297225cb7a499fad25a2c052ac93934449a2c31a44fc9edd06c773780a + languageName: node + linkType: hard + +"keccak@npm:^3.0.1": + version: 3.0.4 + resolution: "keccak@npm:3.0.4" + dependencies: + node-addon-api: ^2.0.0 + node-gyp: latest + node-gyp-build: ^4.2.0 + readable-stream: ^3.6.0 + checksum: 2bf27b97b2f24225b1b44027de62be547f5c7326d87d249605665abd0c8c599d774671c35504c62c9b922cae02758504c6f76a73a84234d23af8a2211afaaa11 + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: 3.0.1 + checksum: 74a24395b1c34bd44ad5cb2b49140d087553e170625240b86755a6604cd65aa16efdbdeae5cdb17ba1284a0fbb25ad06263755dbc71b8d8b06f74232ce3cdd72 + languageName: node + linkType: hard + +"keyvaluestorage-interface@npm:^1.0.0": + version: 1.0.0 + resolution: "keyvaluestorage-interface@npm:1.0.0" + checksum: e20530e71b738dc094ad170a91a98d4b9bdc772dd9044b23cdaaa102aafa8997b1ac867550a1e66ba1d64fcaa949214df31aed18413b4bac31e5fe1f2c76c9de + languageName: node + linkType: hard + +"kind-of@npm:^6.0.3": + version: 6.0.3 + resolution: "kind-of@npm:6.0.3" + checksum: 3ab01e7b1d440b22fe4c31f23d8d38b4d9b91d9f291df683476576493d5dfd2e03848a8b05813dd0c3f0e835bc63f433007ddeceb71f05cb25c45ae1b19c6d3b + languageName: node + linkType: hard + +"kleur@npm:^3.0.3": + version: 3.0.3 + resolution: "kleur@npm:3.0.3" + checksum: df82cd1e172f957bae9c536286265a5cdbd5eeca487cb0a3b2a7b41ef959fc61f8e7c0e9aeea9c114ccf2c166b6a8dd45a46fd619c1c569d210ecd2765ad5169 + languageName: node + linkType: hard + +"kleur@npm:^4.0.3": + version: 4.1.5 + resolution: "kleur@npm:4.1.5" + checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 + languageName: node + linkType: hard + +"language-subtag-registry@npm:~0.3.2": + version: 0.3.22 + resolution: "language-subtag-registry@npm:0.3.22" + checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a + languageName: node + linkType: hard + +"language-tags@npm:=1.0.5": + version: 1.0.5 + resolution: "language-tags@npm:1.0.5" + dependencies: + language-subtag-registry: ~0.3.2 + checksum: c81b5d8b9f5f9cfd06ee71ada6ddfe1cf83044dd5eeefcd1e420ad491944da8957688db4a0a9bc562df4afdc2783425cbbdfd152c01d93179cf86888903123cf + languageName: node + linkType: hard + +"leven@npm:^3.1.0": + version: 3.1.0 + resolution: "leven@npm:3.1.0" + checksum: 638401d534585261b6003db9d99afd244dfe82d75ddb6db5c0df412842d5ab30b2ef18de471aaec70fe69a46f17b4ae3c7f01d8a4e6580ef7adb9f4273ad1e55 + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: ^1.2.1 + type-check: ~0.4.0 + checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 + languageName: node + linkType: hard + +"libp2p-crypto@npm:^0.21.0, libp2p-crypto@npm:^0.21.2": + version: 0.21.2 + resolution: "libp2p-crypto@npm:0.21.2" + dependencies: + "@noble/ed25519": ^1.5.1 + "@noble/secp256k1": ^1.3.0 + err-code: ^3.0.1 + iso-random-stream: ^2.0.0 + multiformats: ^9.4.5 + node-forge: ^1.2.1 + protobufjs: ^6.11.2 + uint8arrays: ^3.0.0 + checksum: e03f8398db3a2913374b6a4b13560aec0c8e2d244c80fa0b2f119600789c445b235be01987580262a91d63e590f0f1a185728ea4b8697e5d4dfc9ec6da5266d6 + languageName: node + linkType: hard + +"lilconfig@npm:2.1.0": + version: 2.1.0 + resolution: "lilconfig@npm:2.1.0" + checksum: 8549bb352b8192375fed4a74694cd61ad293904eee33f9d4866c2192865c44c4eb35d10782966242634e0cbc1e91fe62b1247f148dc5514918e3a966da7ea117 + languageName: node + linkType: hard + +"lines-and-columns@npm:^1.1.6": + version: 1.2.4 + resolution: "lines-and-columns@npm:1.2.4" + checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 + languageName: node + linkType: hard + +"lines-and-columns@npm:^2.0.2": + version: 2.0.3 + resolution: "lines-and-columns@npm:2.0.3" + checksum: 5955363dfd7d3d7c476d002eb47944dbe0310d57959e2112dce004c0dc76cecfd479cf8c098fd479ff344acdf04ee0e82b455462a26492231ac152f6c48d17a1 + languageName: node + linkType: hard + +"lint-staged@npm:^13.0.3": + version: 13.3.0 + resolution: "lint-staged@npm:13.3.0" + dependencies: + chalk: 5.3.0 + commander: 11.0.0 + debug: 4.3.4 + execa: 7.2.0 + lilconfig: 2.1.0 + listr2: 6.6.1 + micromatch: 4.0.5 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.3.1 + bin: + lint-staged: bin/lint-staged.js + checksum: f7c146cc2849c9ce4f1d2808d990fcbdef5e0bb79e6e79cc895f53c91f5ac4dcefdb8c3465156b38a015dcb051f2795c6bda4f20a1e2f2fa654c7ba521b2d2e0 + languageName: node + linkType: hard + +"listr2@npm:6.6.1": + version: 6.6.1 + resolution: "listr2@npm:6.6.1" + dependencies: + cli-truncate: ^3.1.0 + colorette: ^2.0.20 + eventemitter3: ^5.0.1 + log-update: ^5.0.1 + rfdc: ^1.3.0 + wrap-ansi: ^8.1.0 + peerDependencies: + enquirer: ">= 2.3.0 < 3" + peerDependenciesMeta: + enquirer: + optional: true + checksum: 99600e8a51f838f7208bce7e16d6b3d91d361f13881e6aa91d0b561a9a093ddcf63b7bc2a7b47aec7fdbff9d0e8c9f68cb66e6dfe2d857e5b1df8ab045c26ce8 + languageName: node + linkType: hard + +"lit-element@npm:^3.3.0": + version: 3.3.3 + resolution: "lit-element@npm:3.3.3" + dependencies: + "@lit-labs/ssr-dom-shim": ^1.1.0 + "@lit/reactive-element": ^1.3.0 + lit-html: ^2.8.0 + checksum: 29a596fa556e231cce7246ca3e5687ad238f299b0cb374a0934d5e6fe9adf1436e031d4fbd21b280aabfc0e21a66e6c4b52da558a908df2566d09d960f3ca93d + languageName: node + linkType: hard + +"lit-html@npm:^2.8.0": + version: 2.8.0 + resolution: "lit-html@npm:2.8.0" + dependencies: + "@types/trusted-types": ^2.0.2 + checksum: 2d70df07248bcb2f502a3afb1e91d260735024fa669669ffb1417575aa39c3092779725ac1b90f5f39e4ce78c63f431f51176bc67f532389f0285a6991573255 + languageName: node + linkType: hard + +"lit@npm:2.8.0": + version: 2.8.0 + resolution: "lit@npm:2.8.0" + dependencies: + "@lit/reactive-element": ^1.6.0 + lit-element: ^3.3.0 + lit-html: ^2.8.0 + checksum: 2480e733f7d022d3ecba91abc58a20968f0ca8f5fa30b3341ecf4bcf4845e674ad27b721a5ae53529cafc6ca603c015b80d0979ceb7a711e268ef20bb6bc7527 + languageName: node + linkType: hard + +"livepeer@npm:2.9.1, livepeer@npm:^2.5.8": + version: 2.9.1 + resolution: "livepeer@npm:2.9.1" + dependencies: + "@livepeer/core": ^1.9.1 + "@stitches/core": ^1.2.8 + core-js: ^3.31.1 + cross-fetch: ^4.0.0 + hls.js: ^1.4.12 + ms: ^3.0.0-canary.1 + tus-js-client: ^3.1.0 + zustand: ^4.3.9 + peerDependencies: + react: ">=17.0.0" + peerDependenciesMeta: + react: + optional: true + checksum: 6884b557037b50cbe83980aff34acf1be4e94e95e93763d478136b16717f96ff81c533fc46e98296e75919ca7347f07a1568c4df9981bc137c5f7ae822297b7d + languageName: node + linkType: hard + +"load-plugin@npm:^5.0.0": + version: 5.1.0 + resolution: "load-plugin@npm:5.1.0" + dependencies: + "@npmcli/config": ^6.0.0 + import-meta-resolve: ^2.0.0 + checksum: d450c9a0838cec7f7581abcb8ff9170a5c6e1bc1ca816e4288e4a014bc0e819c4ca16163fd78b7e1fb6c1dffedf6ac881f9893d5a025b69f369a157d9a2aacf6 + languageName: node + linkType: hard + +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: ^4.1.0 + checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 + languageName: node + linkType: hard + +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + +"lodash._baseiteratee@npm:~4.7.0": + version: 4.7.0 + resolution: "lodash._baseiteratee@npm:4.7.0" + dependencies: + lodash._stringtopath: ~4.8.0 + checksum: 814a7125b9e2fa7e436c4402eae842a200189e2839b56bd6cde7cd0a3628b60842f5d39a9f5dceaf8766669b2e4a17a36ce2a213d1d6a891c1bef8a6bda36ea9 + languageName: node + linkType: hard + +"lodash._basetostring@npm:~4.12.0": + version: 4.12.0 + resolution: "lodash._basetostring@npm:4.12.0" + checksum: ccaf83827f86be5c9daeb7b939f761d6a43f0de0781bc3b6772fcb8568fbcbfa1e1082c66e5e12dd23e00ac40a18349c5a793a6a552e3574cbbcb3e1545fcb4c + languageName: node + linkType: hard + +"lodash._baseuniq@npm:~4.6.0": + version: 4.6.0 + resolution: "lodash._baseuniq@npm:4.6.0" + dependencies: + lodash._createset: ~4.0.0 + lodash._root: ~3.0.0 + checksum: 8c16fe2e80716b18c2f28bbcc902768141d432b0b98e03b30a2fba6a097377fabdc8753da232568375d2aa9502dc6b3a390200aa1467d2f685a582a46a271936 + languageName: node + linkType: hard + +"lodash._createset@npm:~4.0.0": + version: 4.0.3 + resolution: "lodash._createset@npm:4.0.3" + checksum: fb4450fbf4846aa7b420837ee44400b88664e28499388b7e04b4db38adca1305915f68a245fb2a87e031e7f440b997de4f360de6dea2712952520e97c7898de1 + languageName: node + linkType: hard + +"lodash._root@npm:~3.0.0": + version: 3.0.1 + resolution: "lodash._root@npm:3.0.1" + checksum: 3e12c6f409ae13164a8db358f44a691f1e038dad4e25463802980d0ed641ed118c147b65657501c51778c885422b913264dfbe33ec0c5d676443dd630a7e685a + languageName: node + linkType: hard + +"lodash._stringtopath@npm:~4.8.0": + version: 4.8.0 + resolution: "lodash._stringtopath@npm:4.8.0" + dependencies: + lodash._basetostring: ~4.12.0 + checksum: 00663b317796333e6315ebb4e8b590e68845de10d5d25c7585751fd9d28adf3e60e1ce85a6fbb6a0d440447c841465b91877e761239e358231eed2f52f0a5472 + languageName: node + linkType: hard + +"lodash.debounce@npm:^4.0.8": + version: 4.0.8 + resolution: "lodash.debounce@npm:4.0.8" + checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 + languageName: node + linkType: hard + +"lodash.flatten@npm:^4.2.0, lodash.flatten@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.flatten@npm:4.4.0" + checksum: 0ac34a393d4b795d4b7421153d27c13ae67e08786c9cbb60ff5b732210d46f833598eee3fb3844bb10070e8488efe390ea53bb567377e0cb47e9e630bf0811cb + languageName: node + linkType: hard + +"lodash.get@npm:^4.4.2": + version: 4.4.2 + resolution: "lodash.get@npm:4.4.2" + checksum: e403047ddb03181c9d0e92df9556570e2b67e0f0a930fcbbbd779370972368f5568e914f913e93f3b08f6d492abc71e14d4e9b7a18916c31fa04bd2306efe545 + languageName: node + linkType: hard + +"lodash.isequal@npm:4.5.0, lodash.isequal@npm:^4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: da27515dc5230eb1140ba65ff8de3613649620e8656b19a6270afe4866b7bd461d9ba2ac8a48dcc57f7adac4ee80e1de9f965d89d4d81a0ad52bb3eec2609644 + languageName: node + linkType: hard + +"lodash.isplainobject@npm:^4.0.6": + version: 4.0.6 + resolution: "lodash.isplainobject@npm:4.0.6" + checksum: 29c6351f281e0d9a1d58f1a4c8f4400924b4c79f18dfc4613624d7d54784df07efaff97c1ff2659f3e085ecf4fff493300adc4837553104cef2634110b0d5337 + languageName: node + linkType: hard + +"lodash.isstring@npm:^4.0.1": + version: 4.0.1 + resolution: "lodash.isstring@npm:4.0.1" + checksum: eaac87ae9636848af08021083d796e2eea3d02e80082ab8a9955309569cb3a463ce97fd281d7dc119e402b2e7d8c54a23914b15d2fc7fff56461511dc8937ba0 + languageName: node + linkType: hard + +"lodash.memoize@npm:4.x": + version: 4.1.2 + resolution: "lodash.memoize@npm:4.1.2" + checksum: 9ff3942feeccffa4f1fafa88d32f0d24fdc62fd15ded5a74a5f950ff5f0c6f61916157246744c620173dddf38d37095a92327d5fd3861e2063e736a5c207d089 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 + languageName: node + linkType: hard + +"lodash.set@npm:^4.3.2": + version: 4.3.2 + resolution: "lodash.set@npm:4.3.2" + checksum: a9122f49eef9f2d0fc9061a33d87f8e5b8c6b23d46e8b9e9ce1529d3588d79741bd1145a3abdfa3b13082703e65af27ff18d8a07bfc22b9be32f3fc36f763f70 + languageName: node + linkType: hard + +"lodash.throttle@npm:^4.1.1": + version: 4.1.1 + resolution: "lodash.throttle@npm:4.1.1" + checksum: 129c0a28cee48b348aef146f638ef8a8b197944d4e9ec26c1890c19d9bf5a5690fe11b655c77a4551268819b32d27f4206343e30c78961f60b561b8608c8c805 + languageName: node + linkType: hard + +"lodash.uniqby@npm:4.5.0": + version: 4.5.0 + resolution: "lodash.uniqby@npm:4.5.0" + dependencies: + lodash._baseiteratee: ~4.7.0 + lodash._baseuniq: ~4.6.0 + checksum: 40a4fdd4c31323fcb6db91ec3124020333212ca1f13e75cc9939decdd33e8b176d204fb277be36a51a855c2c90e14d67932b3b130b2f0eedc729e4cb9cdcaed1 + languageName: node + linkType: hard + +"lodash@npm:4.17.21, lodash@npm:^4.17.10, lodash@npm:^4.17.19, lodash@npm:^4.17.21": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 + languageName: node + linkType: hard + +"log-symbols@npm:^2.2.0": + version: 2.2.0 + resolution: "log-symbols@npm:2.2.0" + dependencies: + chalk: ^2.0.1 + checksum: 4c95e3b65f0352dbe91dc4989c10baf7a44e2ef5b0db7e6721e1476268e2b6f7090c3aa880d4f833a05c5c3ff18f4ec5215a09bd0099986d64a8186cfeb48ac8 + languageName: node + linkType: hard + +"log-update@npm:^5.0.1": + version: 5.0.1 + resolution: "log-update@npm:5.0.1" + dependencies: + ansi-escapes: ^5.0.0 + cli-cursor: ^4.0.0 + slice-ansi: ^5.0.0 + strip-ansi: ^7.0.1 + wrap-ansi: ^8.0.1 + checksum: 2c6b47dcce6f9233df6d232a37d9834cb3657a0749ef6398f1706118de74c55f158587d4128c225297ea66803f35c5ac3db4f3f617046d817233c45eedc32ef1 + languageName: node + linkType: hard + +"long@npm:^4.0.0": + version: 4.0.0 + resolution: "long@npm:4.0.0" + checksum: 16afbe8f749c7c849db1f4de4e2e6a31ac6e617cead3bdc4f9605cb703cd20e1e9fc1a7baba674ffcca57d660a6e5b53a9e236d7b25a295d3855cca79cc06744 + languageName: node + linkType: hard + +"long@npm:^5.0.0, long@npm:^5.2.0": + version: 5.2.3 + resolution: "long@npm:5.2.3" + checksum: 885ede7c3de4facccbd2cacc6168bae3a02c3e836159ea4252c87b6e34d40af819824b2d4edce330bfb5c4d6e8ce3ec5864bdcf9473fa1f53a4f8225860e5897 + languageName: node + linkType: hard + +"longest-streak@npm:^3.0.0": + version: 3.1.0 + resolution: "longest-streak@npm:3.1.0" + checksum: d7f952ed004cbdb5c8bcfc4f7f5c3d65449e6c5a9e9be4505a656e3df5a57ee125f284286b4bf8ecea0c21a7b3bf2b8f9001ad506c319b9815ad6a63a47d0fd0 + languageName: node + linkType: hard + +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: ^3.0.0 || ^4.0.0 + bin: + loose-envify: cli.js + checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb + languageName: node + linkType: hard + +"lru-cache@npm:^6.0.0": + version: 6.0.0 + resolution: "lru-cache@npm:6.0.0" + dependencies: + yallist: ^4.0.0 + checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 + languageName: node + linkType: hard + +"lru-cache@npm:^7.7.1": + version: 7.18.3 + resolution: "lru-cache@npm:7.18.3" + checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 + languageName: node + linkType: hard + +"lru-cache@npm:^9.1.1 || ^10.0.0": + version: 10.0.1 + resolution: "lru-cache@npm:10.0.1" + checksum: 06f8d0e1ceabd76bb6f644a26dbb0b4c471b79c7b514c13c6856113879b3bf369eb7b497dad4ff2b7e2636db202412394865b33c332100876d838ad1372f0181 + languageName: node + linkType: hard + +"lz-string@npm:^1.5.0": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" + bin: + lz-string: bin/bin.js + checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d + languageName: node + linkType: hard + +"make-dir@npm:^4.0.0": + version: 4.0.0 + resolution: "make-dir@npm:4.0.0" + dependencies: + semver: ^7.5.3 + checksum: bf0731a2dd3aab4db6f3de1585cea0b746bb73eb5a02e3d8d72757e376e64e6ada190b1eddcde5b2f24a81b688a9897efd5018737d05e02e2a671dda9cff8a8a + languageName: node + linkType: hard + +"make-error@npm:1.x, make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^17.0.0 + http-cache-semantics: ^4.1.1 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^10.0.0 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 + languageName: node + linkType: hard + +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" + dependencies: + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + languageName: node + linkType: hard + +"map-obj@npm:^1.0.0": + version: 1.0.1 + resolution: "map-obj@npm:1.0.1" + checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed + languageName: node + linkType: hard + +"map-obj@npm:^4.0.0": + version: 4.3.0 + resolution: "map-obj@npm:4.3.0" + checksum: fbc554934d1a27a1910e842bc87b177b1a556609dd803747c85ece420692380827c6ae94a95cce4407c054fa0964be3bf8226f7f2cb2e9eeee432c7c1985684e + languageName: node + linkType: hard + +"match-sorter@npm:^6.0.2": + version: 6.3.1 + resolution: "match-sorter@npm:6.3.1" + dependencies: + "@babel/runtime": ^7.12.5 + remove-accents: 0.4.2 + checksum: a4b02b676ac4ce64a89a091539ee4a70a802684713bcf06f2b70787927f510fe8a2adc849f9288857a90906083ad303467e530e8723b4a9756df9994fc164550 + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^0.8.5": + version: 0.8.5 + resolution: "mdast-util-from-markdown@npm:0.8.5" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-to-string: ^2.0.0 + micromark: ~2.11.0 + parse-entities: ^2.0.0 + unist-util-stringify-position: ^2.0.0 + checksum: 5a9d0d753a42db763761e874c22365d0c7c9934a5a18b5ff76a0643610108a208a041ffdb2f3d3dd1863d3d915225a4020a0aade282af0facfd0df110601eee6 + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^1.0.0, mdast-util-from-markdown@npm:^1.1.0": + version: 1.3.1 + resolution: "mdast-util-from-markdown@npm:1.3.1" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + decode-named-character-reference: ^1.0.0 + mdast-util-to-string: ^3.1.0 + micromark: ^3.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-decode-string: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-stringify-position: ^3.0.0 + uvu: ^0.5.0 + checksum: c2fac225167e248d394332a4ea39596e04cbde07d8cdb3889e91e48972c4c3462a02b39fda3855345d90231eb17a90ac6e082fb4f012a77c1d0ddfb9c7446940 + languageName: node + linkType: hard + +"mdast-util-mdx-expression@npm:^1.0.0": + version: 1.3.2 + resolution: "mdast-util-mdx-expression@npm:1.3.2" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: e4c90f26deaa5eb6217b0a9af559a80de41da02ab3bcd864c56bed3304b056ae703896e9876bc6ded500f4aff59f4de5cbf6a4b109a5ba408f2342805fe6dc05 + languageName: node + linkType: hard + +"mdast-util-mdx-jsx@npm:^2.0.0": + version: 2.1.4 + resolution: "mdast-util-mdx-jsx@npm:2.1.4" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + ccount: ^2.0.0 + mdast-util-from-markdown: ^1.1.0 + mdast-util-to-markdown: ^1.3.0 + parse-entities: ^4.0.0 + stringify-entities: ^4.0.0 + unist-util-remove-position: ^4.0.0 + unist-util-stringify-position: ^3.0.0 + vfile-message: ^3.0.0 + checksum: add3ff2dd1faf2419b506abb630a471da42edc99e16fdcff95f405d27f881cb4890a94b2a7a38de9592f37170bee1c135bc156699a0f74af4b69610f0b5fcf1d + languageName: node + linkType: hard + +"mdast-util-mdx@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-mdx@npm:2.0.1" + dependencies: + mdast-util-from-markdown: ^1.0.0 + mdast-util-mdx-expression: ^1.0.0 + mdast-util-mdx-jsx: ^2.0.0 + mdast-util-mdxjs-esm: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: 7303149230a26e524e319833b782bffca94e49cdab012996618701259bd056e014ca22a35d25ffa8880ba9064ee126a2a002f01e5c90a31ca726339ed775875e + languageName: node + linkType: hard + +"mdast-util-mdxjs-esm@npm:^1.0.0": + version: 1.3.1 + resolution: "mdast-util-mdxjs-esm@npm:1.3.1" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: ee78a4f58adfec38723cbc920f05481201ebb001eff3982f2d0e5f5ce5c75685e732e9d361ad4a1be8b936b4e5de0f2599cb96b92ad4bd92698ac0c4a09bbec3 + languageName: node + linkType: hard + +"mdast-util-phrasing@npm:^3.0.0": + version: 3.0.1 + resolution: "mdast-util-phrasing@npm:3.0.1" + dependencies: + "@types/mdast": ^3.0.0 + unist-util-is: ^5.0.0 + checksum: c5b616d9b1eb76a6b351d195d94318494722525a12a89d9c8a3b091af7db3dd1fc55d294f9d29266d8159a8267b0df4a7a133bda8a3909d5331c383e1e1ff328 + languageName: node + linkType: hard + +"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0": + version: 1.5.0 + resolution: "mdast-util-to-markdown@npm:1.5.0" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + longest-streak: ^3.0.0 + mdast-util-phrasing: ^3.0.0 + mdast-util-to-string: ^3.0.0 + micromark-util-decode-string: ^1.0.0 + unist-util-visit: ^4.0.0 + zwitch: ^2.0.0 + checksum: 64338eb33e49bb0aea417591fd986f72fdd39205052563bb7ce9eb9ecc160824509bfacd740086a05af355c6d5c36353aafe95cab9e6927d674478757cee6259 + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-to-string@npm:2.0.0" + checksum: 0b2113ada10e002fbccb014170506dabe2f2ddacaacbe4bc1045c33f986652c5a162732a2c057c5335cdb58419e2ad23e368e5be226855d4d4e280b81c4e9ec2 + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0": + version: 3.2.0 + resolution: "mdast-util-to-string@npm:3.2.0" + dependencies: + "@types/mdast": ^3.0.0 + checksum: dc40b544d54339878ae2c9f2b3198c029e1e07291d2126bd00ca28272ee6616d0d2194eb1c9828a7c34d412a79a7e73b26512a734698d891c710a1e73db1e848 + languageName: node + linkType: hard + +"meow@npm:^9.0.0": + version: 9.0.0 + resolution: "meow@npm:9.0.0" + dependencies: + "@types/minimist": ^1.2.0 + camelcase-keys: ^6.2.2 + decamelize: ^1.2.0 + decamelize-keys: ^1.1.0 + hard-rejection: ^2.1.0 + minimist-options: 4.1.0 + normalize-package-data: ^3.0.0 + read-pkg-up: ^7.0.1 + redent: ^3.0.0 + trim-newlines: ^3.0.0 + type-fest: ^0.18.0 + yargs-parser: ^20.2.3 + checksum: 99799c47247f4daeee178e3124f6ef6f84bde2ba3f37652865d5d8f8b8adcf9eedfc551dd043e2455cd8206545fd848e269c0c5ab6b594680a0ad4d3617c9639 + languageName: node + linkType: hard + +"merge-options@npm:^3.0.4": + version: 3.0.4 + resolution: "merge-options@npm:3.0.4" + dependencies: + is-plain-obj: ^2.1.0 + checksum: d86ddb3dd6e85d558dbf25dc944f3527b6bacb944db3fdda6e84a3f59c4e4b85231095f58b835758b9a57708342dee0f8de0dffa352974a48221487fe9f4584f + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + +"merge2@npm:^1.2.3, merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 + languageName: node + linkType: hard + +"micro-ftch@npm:^0.3.1": + version: 0.3.1 + resolution: "micro-ftch@npm:0.3.1" + checksum: 0e496547253a36e98a83fb00c628c53c3fb540fa5aaeaf718438873785afd193244988c09d219bb1802984ff227d04938d9571ef90fe82b48bd282262586aaff + languageName: node + linkType: hard + +"micromark-core-commonmark@npm:^1.0.0, micromark-core-commonmark@npm:^1.0.1": + version: 1.1.0 + resolution: "micromark-core-commonmark@npm:1.1.0" + dependencies: + decode-named-character-reference: ^1.0.0 + micromark-factory-destination: ^1.0.0 + micromark-factory-label: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-factory-title: ^1.0.0 + micromark-factory-whitespace: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-chunked: ^1.0.0 + micromark-util-classify-character: ^1.0.0 + micromark-util-html-tag-name: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-resolve-all: ^1.0.0 + micromark-util-subtokenize: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.1 + uvu: ^0.5.0 + checksum: c6dfedc95889cc73411cb222fc2330b9eda6d849c09c9fd9eb3cd3398af246167e9d3cdb0ae3ce9ae59dd34a14624c8330e380255d41279ad7350cf6c6be6c5b + languageName: node + linkType: hard + +"micromark-extension-mdx-expression@npm:^1.0.0": + version: 1.0.8 + resolution: "micromark-extension-mdx-expression@npm:1.0.8" + dependencies: + "@types/estree": ^1.0.0 + micromark-factory-mdx-expression: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 49750d10c1664904a5eb61b8dae2a4ff31eef56176d02ff30de4ee4b5db7ca4598b6f044963c26771f53e2a5a517a9ff7223d87fc0b6e159332d77e4f3486cc3 + languageName: node + linkType: hard + +"micromark-extension-mdx-jsx@npm:^1.0.0": + version: 1.0.5 + resolution: "micromark-extension-mdx-jsx@npm:1.0.5" + dependencies: + "@types/acorn": ^4.0.0 + "@types/estree": ^1.0.0 + estree-util-is-identifier-name: ^2.0.0 + micromark-factory-mdx-expression: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: 0ddb7b71c2c5f51f1232546d316b6c126ad245d57690b1af7877dd7b678b8b700d85a78587d56525b26a04082a4e833c6c9199c2db2a3379adf014be796123fb + languageName: node + linkType: hard + +"micromark-extension-mdx-md@npm:^1.0.0": + version: 1.0.1 + resolution: "micromark-extension-mdx-md@npm:1.0.1" + dependencies: + micromark-util-types: ^1.0.0 + checksum: fdeaf8f4f973ec8ebefb74bb4cc1c25d2c3190e3ce4f8197e4cbc1ac325b39ac4dc2723a9f4ec8ff5b179d380e8ba37467acafa13c36dec8d312cd9822a5ab29 + languageName: node + linkType: hard + +"micromark-extension-mdxjs-esm@npm:^1.0.0": + version: 1.0.5 + resolution: "micromark-extension-mdxjs-esm@npm:1.0.5" + dependencies: + "@types/estree": ^1.0.0 + micromark-core-commonmark: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-position-from-estree: ^1.1.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: 7006cfa963d63a56c2744a9b03021aeba99a24b0a4f769165a13446439c8df529448a63db5f3ae604d1a4f616bbebde8efd1f495d7be32acb064491878e38fbe + languageName: node + linkType: hard + +"micromark-extension-mdxjs@npm:^1.0.0": + version: 1.0.1 + resolution: "micromark-extension-mdxjs@npm:1.0.1" + dependencies: + acorn: ^8.0.0 + acorn-jsx: ^5.0.0 + micromark-extension-mdx-expression: ^1.0.0 + micromark-extension-mdx-jsx: ^1.0.0 + micromark-extension-mdx-md: ^1.0.0 + micromark-extension-mdxjs-esm: ^1.0.0 + micromark-util-combine-extensions: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 1e6bf3df765071dbfb80b20f1ca298f6789cf759dfd19d13301c91e33794940363989107b675afeedb78af446e4af590e0f0cf8c1ed63a70682a494c015eba52 + languageName: node + linkType: hard + +"micromark-factory-destination@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-destination@npm:1.1.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 9e2b5fb5fedbf622b687e20d51eb3d56ae90c0e7ecc19b37bd5285ec392c1e56f6e21aa7cfcb3c01eda88df88fe528f3acb91a5f57d7f4cba310bc3cd7f824fa + languageName: node + linkType: hard + +"micromark-factory-label@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-label@npm:1.1.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: fcda48f1287d9b148c562c627418a2ab759cdeae9c8e017910a0cba94bb759a96611e1fc6df33182e97d28fbf191475237298983bb89ef07d5b02464b1ad28d5 + languageName: node + linkType: hard + +"micromark-factory-mdx-expression@npm:^1.0.0": + version: 1.0.9 + resolution: "micromark-factory-mdx-expression@npm:1.0.9" + dependencies: + "@types/estree": ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-position-from-estree: ^1.0.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: 7359bf3290bf95c647aff1208d88a58288acdcd15190fe3da8bc56a683615f158a7f0593ace7ae459581079d7a9f7420a68d31ce8f0f1637cadacfb52e7782f0 + languageName: node + linkType: hard + +"micromark-factory-space@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-space@npm:1.1.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: b58435076b998a7e244259a4694eb83c78915581206b6e7fc07b34c6abd36a1726ade63df8972fbf6c8fa38eecb9074f4e17be8d53f942e3b3d23d1a0ecaa941 + languageName: node + linkType: hard + +"micromark-factory-title@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-title@npm:1.1.0" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 4432d3dbc828c81f483c5901b0c6591a85d65a9e33f7d96ba7c3ae821617a0b3237ff5faf53a9152d00aaf9afb3a9f185b205590f40ed754f1d9232e0e9157b1 + languageName: node + linkType: hard + +"micromark-factory-whitespace@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-factory-whitespace@npm:1.1.0" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: ef0fa682c7d593d85a514ee329809dee27d10bc2a2b65217d8ef81173e33b8e83c549049764b1ad851adfe0a204dec5450d9d20a4ca8598f6c94533a73f73fcd + languageName: node + linkType: hard + +"micromark-util-character@npm:^1.0.0": + version: 1.2.0 + resolution: "micromark-util-character@npm:1.2.0" + dependencies: + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 089e79162a19b4a28731736246579ab7e9482ac93cd681c2bfca9983dcff659212ef158a66a5957e9d4b1dba957d1b87b565d85418a5b009f0294f1f07f2aaac + languageName: node + linkType: hard + +"micromark-util-chunked@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-chunked@npm:1.1.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: c435bde9110cb595e3c61b7f54c2dc28ee03e6a57fa0fc1e67e498ad8bac61ee5a7457a2b6a73022ddc585676ede4b912d28dcf57eb3bd6951e54015e14dc20b + languageName: node + linkType: hard + +"micromark-util-classify-character@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-classify-character@npm:1.1.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 8499cb0bb1f7fb946f5896285fcca65cd742f66cd3e79ba7744792bd413ec46834f932a286de650349914d02e822946df3b55d03e6a8e1d245d1ddbd5102e5b0 + languageName: node + linkType: hard + +"micromark-util-combine-extensions@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-combine-extensions@npm:1.1.0" + dependencies: + micromark-util-chunked: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: ee78464f5d4b61ccb437850cd2d7da4d690b260bca4ca7a79c4bb70291b84f83988159e373b167181b6716cb197e309bc6e6c96a68cc3ba9d50c13652774aba9 + languageName: node + linkType: hard + +"micromark-util-decode-numeric-character-reference@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-decode-numeric-character-reference@npm:1.1.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: 4733fe75146e37611243f055fc6847137b66f0cde74d080e33bd26d0408c1d6f44cabc984063eee5968b133cb46855e729d555b9ff8d744652262b7b51feec73 + languageName: node + linkType: hard + +"micromark-util-decode-string@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-decode-string@npm:1.1.0" + dependencies: + decode-named-character-reference: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-symbol: ^1.0.0 + checksum: f1625155db452f15aa472918499689ba086b9c49d1322a08b22bfbcabe918c61b230a3002c8bc3ea9b1f52ca7a9bb1c3dd43ccb548c7f5f8b16c24a1ae77a813 + languageName: node + linkType: hard + +"micromark-util-encode@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-encode@npm:1.1.0" + checksum: 4ef29d02b12336918cea6782fa87c8c578c67463925221d4e42183a706bde07f4b8b5f9a5e1c7ce8c73bb5a98b261acd3238fecd152e6dd1cdfa2d1ae11b60a0 + languageName: node + linkType: hard + +"micromark-util-events-to-acorn@npm:^1.0.0": + version: 1.2.3 + resolution: "micromark-util-events-to-acorn@npm:1.2.3" + dependencies: + "@types/acorn": ^4.0.0 + "@types/estree": ^1.0.0 + "@types/unist": ^2.0.0 + estree-util-visit: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: aba0dadb8689a70fab6223386b843f3084c21db0f96b412ebd7be91d2392bb8571af899c60e13eeb373a5f851d6dcd690b584ed1e09833904ac72ddd0a88a7ab + languageName: node + linkType: hard + +"micromark-util-html-tag-name@npm:^1.0.0": + version: 1.2.0 + resolution: "micromark-util-html-tag-name@npm:1.2.0" + checksum: ccf0fa99b5c58676dc5192c74665a3bfd1b536fafaf94723bd7f31f96979d589992df6fcf2862eba290ef18e6a8efb30ec8e1e910d9f3fc74f208871e9f84750 + languageName: node + linkType: hard + +"micromark-util-normalize-identifier@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-normalize-identifier@npm:1.1.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: 8655bea41ffa4333e03fc22462cb42d631bbef9c3c07b625fd852b7eb442a110f9d2e5902a42e65188d85498279569502bf92f3434a1180fc06f7c37edfbaee2 + languageName: node + linkType: hard + +"micromark-util-resolve-all@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-resolve-all@npm:1.1.0" + dependencies: + micromark-util-types: ^1.0.0 + checksum: 1ce6c0237cd3ca061e76fae6602cf95014e764a91be1b9f10d36cb0f21ca88f9a07de8d49ab8101efd0b140a4fbfda6a1efb72027ab3f4d5b54c9543271dc52c + languageName: node + linkType: hard + +"micromark-util-sanitize-uri@npm:^1.0.0": + version: 1.2.0 + resolution: "micromark-util-sanitize-uri@npm:1.2.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-encode: ^1.0.0 + micromark-util-symbol: ^1.0.0 + checksum: 6663f365c4fe3961d622a580f4a61e34867450697f6806f027f21cf63c92989494895fcebe2345d52e249fe58a35be56e223a9776d084c9287818b40c779acc1 + languageName: node + linkType: hard + +"micromark-util-subtokenize@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-subtokenize@npm:1.1.0" + dependencies: + micromark-util-chunked: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 4a9d780c4d62910e196ea4fd886dc4079d8e424e5d625c0820016da0ed399a281daff39c50f9288045cc4bcd90ab47647e5396aba500f0853105d70dc8b1fc45 + languageName: node + linkType: hard + +"micromark-util-symbol@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-symbol@npm:1.1.0" + checksum: 02414a753b79f67ff3276b517eeac87913aea6c028f3e668a19ea0fc09d98aea9f93d6222a76ca783d20299af9e4b8e7c797fe516b766185dcc6e93290f11f88 + languageName: node + linkType: hard + +"micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": + version: 1.1.0 + resolution: "micromark-util-types@npm:1.1.0" + checksum: b0ef2b4b9589f15aec2666690477a6a185536927ceb7aa55a0f46475852e012d75a1ab945187e5c7841969a842892164b15d58ff8316b8e0d6cc920cabd5ede7 + languageName: node + linkType: hard + +"micromark@npm:^3.0.0": + version: 3.2.0 + resolution: "micromark@npm:3.2.0" + dependencies: + "@types/debug": ^4.0.0 + debug: ^4.0.0 + decode-named-character-reference: ^1.0.0 + micromark-core-commonmark: ^1.0.1 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-chunked: ^1.0.0 + micromark-util-combine-extensions: ^1.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-encode: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-resolve-all: ^1.0.0 + micromark-util-sanitize-uri: ^1.0.0 + micromark-util-subtokenize: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.1 + uvu: ^0.5.0 + checksum: 56c15851ad3eb8301aede65603473443e50c92a54849cac1dadd57e4ec33ab03a0a77f3df03de47133e6e8f695dae83b759b514586193269e98c0bf319ecd5e4 + languageName: node + linkType: hard + +"micromark@npm:~2.11.0": + version: 2.11.4 + resolution: "micromark@npm:2.11.4" + dependencies: + debug: ^4.0.0 + parse-entities: ^2.0.0 + checksum: f8a5477d394908a5d770227aea71657a76423d420227c67ea0699e659a5f62eb39d504c1f7d69ec525a6af5aaeb6a7bffcdba95614968c03d41d3851edecb0d6 + languageName: node + linkType: hard + +"micromatch@npm:4.0.5, micromatch@npm:^4.0.4": + version: 4.0.5 + resolution: "micromatch@npm:4.0.5" + dependencies: + braces: ^3.0.2 + picomatch: ^2.3.1 + checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc + languageName: node + linkType: hard + +"microseconds@npm:0.2.0": + version: 0.2.0 + resolution: "microseconds@npm:0.2.0" + checksum: 22bfa8553f92c7d95afff6de0aeb2aecf750680d41b8c72b02098ccc5bbbb0a384380ff539292dbd3788f5dfc298682f9d38a2b4c101f5ee2c9471d53934c5fa + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: 1.52.0 + checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 + languageName: node + linkType: hard + +"mimic-fn@npm:^2.1.0": + version: 2.1.0 + resolution: "mimic-fn@npm:2.1.0" + checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 + languageName: node + linkType: hard + +"min-document@npm:^2.19.0": + version: 2.19.0 + resolution: "min-document@npm:2.19.0" + dependencies: + dom-walk: ^0.1.0 + checksum: da6437562ea2228041542a2384528e74e22d1daa1a4ec439c165abf0b9d8a63e17e3b8a6dc6e0c731845e85301198730426932a0e813d23f932ca668340c9623 + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: cc7974a9268fbf130fb055aff76700d7e2d8be5f761fb5c60318d0ed010d839ab3661a533ad29a5d37653133385204c503bfac995aaa4236f4e847461ea32ba7 + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 6e8a0422b30039406efd4c440829ea8f988845db02a3299f372fceba56ffa94994a9c0f2fd70c17f9969eedfbd72f34b5070ead9656a34d3f71c0bd72583a0ed + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: ^1.1.7 + checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a + languageName: node + linkType: hard + +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: ^2.0.1 + checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.0, minimatch@npm:^9.0.1": + version: 9.0.3 + resolution: "minimatch@npm:9.0.3" + dependencies: + brace-expansion: ^2.0.1 + checksum: 253487976bf485b612f16bf57463520a14f512662e592e95c571afdab1442a6a6864b6c88f248ce6fc4ff0b6de04ac7aa6c8bb51e868e99d1d65eb0658a708b5 + languageName: node + linkType: hard + +"minimist-options@npm:4.1.0": + version: 4.1.0 + resolution: "minimist-options@npm:4.1.0" + dependencies: + arrify: ^1.0.1 + is-plain-obj: ^1.1.0 + kind-of: ^6.0.3 + checksum: 8c040b3068811e79de1140ca2b708d3e203c8003eb9a414c1ab3cd467fc5f17c9ca02a5aef23bedc51a7f8bfbe77f87e9a7e31ec81fba304cda675b019496f4e + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:^1.2.8, minimist@npm:~1.2.5": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 + languageName: node + linkType: hard + +"minipass-collect@npm:^1.0.2": + version: 1.0.2 + resolution: "minipass-collect@npm:1.0.2" + dependencies: + minipass: ^3.0.0 + checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.4 + resolution: "minipass-fetch@npm:3.0.4" + dependencies: + encoding: ^0.1.13 + minipass: ^7.0.3 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af7aad15d5c128ab1ebe52e043bdf7d62c3c6f0cecb9285b40d7b395e1375b45dcdfd40e63e93d26a0e8249c9efd5c325c65575aceee192883970ff8cb11364a + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: ^3.0.0 + checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: ^3.0.0 + checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: ^3.0.0 + checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: ^4.0.0 + checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 425dab288738853fded43da3314a0b5c035844d6f3097a8e3b5b29b328da8f3c1af6fc70618b32c29ff906284cf6406b6841376f21caaadd0793c1d5a6a620ea + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.3": + version: 7.0.4 + resolution: "minipass@npm:7.0.4" + checksum: 87585e258b9488caf2e7acea242fd7856bbe9a2c84a7807643513a338d66f368c7d518200ad7b70a508664d408aa000517647b2930c259a8b1f9f0984f344a21 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: ^3.0.0 + yallist: ^4.0.0 + checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f + languageName: node + linkType: hard + +"mock-property@npm:^1.0.0": + version: 1.0.2 + resolution: "mock-property@npm:1.0.2" + dependencies: + define-data-property: ^1.1.0 + functions-have-names: ^1.2.3 + gopd: ^1.0.1 + has: ^1.0.3 + has-property-descriptors: ^1.0.0 + isarray: ^2.0.5 + checksum: 5aeef15b9eceebdf08299f89590ad51b95c16f275f9b83eb5b0ddb84c20d09845aaf09adc7fed12810533dd7d15d53aabadbd6df91a1d48a84a9bb751c2b6a45 + languageName: node + linkType: hard + +"moment@npm:^2.29.4": + version: 2.29.4 + resolution: "moment@npm:2.29.4" + checksum: 0ec3f9c2bcba38dc2451b1daed5daded747f17610b92427bebe1d08d48d8b7bdd8d9197500b072d14e326dd0ccf3e326b9e3d07c5895d3d49e39b6803b76e80e + languageName: node + linkType: hard + +"motion@npm:10.16.2": + version: 10.16.2 + resolution: "motion@npm:10.16.2" + dependencies: + "@motionone/animation": ^10.15.1 + "@motionone/dom": ^10.16.2 + "@motionone/svelte": ^10.16.2 + "@motionone/types": ^10.15.1 + "@motionone/utils": ^10.15.1 + "@motionone/vue": ^10.16.2 + checksum: 0b91256808c2374d8b7f4ac5e7ed513f2ca8df2b7d1be4fbc00ec5baece5162ada648aedaa5bc1d60be9ad2e6c9bc1d3bb160333051c20ab79e241b8e02e3c92 + languageName: node + linkType: hard + +"move-file@npm:^2.1.0": + version: 2.1.0 + resolution: "move-file@npm:2.1.0" + dependencies: + path-exists: ^4.0.0 + checksum: 2b92bbe047a302b593fcb2c0bf1131bb090ec80b3264569fc80d782c8ff829eecc13573943fa4d804c9747dec612ef2d1e84a5cfcf29cbc64a69ffcbb7ea09b3 + languageName: node + linkType: hard + +"mri@npm:^1.1.0": + version: 1.2.0 + resolution: "mri@npm:1.2.0" + checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 + languageName: node + linkType: hard + +"mrmime@npm:^1.0.0": + version: 1.0.1 + resolution: "mrmime@npm:1.0.1" + checksum: cc979da44bbbffebaa8eaf7a45117e851f2d4cb46a3ada6ceb78130466a04c15a0de9a9ce1c8b8ba6f6e1b8618866b1352992bf1757d241c0ddca558b9f28a77 + languageName: node + linkType: hard + +"ms@npm:2.1.2": + version: 2.1.2 + resolution: "ms@npm:2.1.2" + checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f + languageName: node + linkType: hard + +"ms@npm:^2.0.0, ms@npm:^2.1.1": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d + languageName: node + linkType: hard + +"ms@npm:^3.0.0-canary.1": + version: 3.0.0-canary.1 + resolution: "ms@npm:3.0.0-canary.1" + checksum: 5ec76c0932cf83ac3e7f70f1a4c0d4db4dbc91de6ea5f7d336c67b48f513c8cb4c0fce3a07e3d84ee931dbdc9a48f33ed1c485e834279fff8906d385e86684ae + languageName: node + linkType: hard + +"multiaddr-to-uri@npm:^8.0.0": + version: 8.0.0 + resolution: "multiaddr-to-uri@npm:8.0.0" + dependencies: + multiaddr: ^10.0.0 + checksum: c70d1f4d98d4eee6f7e47e4bd5b3aeae8394339c455bed3cccfc38a11aa7f61681b5cdfa02f338687d2181526318f66d00c370dca6bf633955be6bfd87cb833d + languageName: node + linkType: hard + +"multiaddr@npm:^10.0.0": + version: 10.0.1 + resolution: "multiaddr@npm:10.0.1" + dependencies: + dns-over-http-resolver: ^1.2.3 + err-code: ^3.0.1 + is-ip: ^3.1.0 + multiformats: ^9.4.5 + uint8arrays: ^3.0.0 + varint: ^6.0.0 + checksum: d53aaf7efd52ee5e6413ef36ececd29239ceb5c1f048c1fa9b820442226dc232067312d25e509a2571a14047465fb934dd35029c7f3166f4d02d13e3c501925d + languageName: node + linkType: hard + +"multiformats@npm:9.9.0, multiformats@npm:^9.0.4, multiformats@npm:^9.4.13, multiformats@npm:^9.4.2, multiformats@npm:^9.4.5, multiformats@npm:^9.4.7, multiformats@npm:^9.5.4, multiformats@npm:^9.6.3": + version: 9.9.0 + resolution: "multiformats@npm:9.9.0" + checksum: d3e8c1be400c09a014f557ea02251a2710dbc9fca5aa32cc702ff29f636c5471e17979f30bdcb0a9cbb556f162a8591dc2e1219c24fc21394a56115b820bb84e + languageName: node + linkType: hard + +"multipipe@npm:^1.0.2": + version: 1.0.2 + resolution: "multipipe@npm:1.0.2" + dependencies: + duplexer2: ^0.1.2 + object-assign: ^4.1.0 + checksum: 99cf8934714da7f9ce03e1f0a99621a41443217d80849c62e22b31b6ac356b9acd22f41e555fd7a759f1c7c9d3273e7abff2fb82dff8285f00a6a1022727e4ab + languageName: node + linkType: hard + +"murmurhash3js-revisited@npm:^3.0.0": + version: 3.0.0 + resolution: "murmurhash3js-revisited@npm:3.0.0" + checksum: 24b60657ce296b1d3cf358af70688c8ed777e93c4ee263967f066a4adb0ade0d689863a1a51adc74ab134d61a877f41a06e2b73842ac3fc924799cc96b249a40 + languageName: node + linkType: hard + +"mvdan-sh@npm:^0.10.1": + version: 0.10.1 + resolution: "mvdan-sh@npm:0.10.1" + checksum: 32ac3ad9adb3370a2b98256f1cb80572e7a8bd27958d20c1856e0bf7c339ef3ab232a1547b7615aa670ee8e557702abfc04d7dd362f15cd86ce01bab65172b47 + languageName: node + linkType: hard + +"nano-time@npm:1.0.0": + version: 1.0.0 + resolution: "nano-time@npm:1.0.0" + dependencies: + big-integer: ^1.6.16 + checksum: eef8548546cc1020625f8e44751a7263e9eddf0412a6a1a6c80a8d2be2ea7973622804a977cdfe796807b85b20ff6c8ba340e8dd20effcc7078193ed5edbb5d4 + languageName: node + linkType: hard + +"nanoid@npm:^3.0.2, nanoid@npm:^3.1.20, nanoid@npm:^3.1.23, nanoid@npm:^3.3.4": + version: 3.3.6 + resolution: "nanoid@npm:3.3.6" + bin: + nanoid: bin/nanoid.cjs + checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 + languageName: node + linkType: hard + +"native-abort-controller@npm:^1.0.3": + version: 1.0.4 + resolution: "native-abort-controller@npm:1.0.4" + peerDependencies: + abort-controller: "*" + checksum: 7c98800304155300344f586721a12ac4207c9d660c7bc121549f6afb3db9175fe8200cfb3017ea3ea2664a9601b01fdd92f200783b2ce8792d64a4c50bd4030a + languageName: node + linkType: hard + +"native-fetch@npm:^3.0.0": + version: 3.0.0 + resolution: "native-fetch@npm:3.0.0" + peerDependencies: + node-fetch: "*" + checksum: eec8cc78d6da4d0f3f56055e3e557473ac86dd35fd40053ea268d644af7b20babc891d2b53ef821b77ed2428265f60b85e49d754c555de89bfa071a743b853bb + languageName: node + linkType: hard + +"natural-compare-lite@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare-lite@npm:1.4.0" + checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 + languageName: node + linkType: hard + +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 + languageName: node + linkType: hard + +"neo-async@npm:^2.6.2": + version: 2.6.2 + resolution: "neo-async@npm:2.6.2" + checksum: deac9f8d00eda7b2e5cd1b2549e26e10a0faa70adaa6fdadca701cc55f49ee9018e427f424bac0c790b7c7e2d3068db97f3093f1093975f2acb8f8818b936ed9 + languageName: node + linkType: hard + +"next-redux-wrapper@npm:^6.0.2": + version: 6.0.2 + resolution: "next-redux-wrapper@npm:6.0.2" + peerDependencies: + next: ">=9.0.0" + react: "*" + react-redux: "*" + checksum: 4de366bb862e8e4e96739b830f3299ef26b03b53548ffa39c38b8967541a0ef31ede65976451252c7340385a6050193cee113fb5a138dff719d8c6d9f865db5b + languageName: node + linkType: hard + +"next-seo@npm:^6.1.0": + version: 6.1.0 + resolution: "next-seo@npm:6.1.0" + peerDependencies: + next: ^8.1.1-canary.54 || >=9.0.0 + react: ">=16.0.0" + react-dom: ">=16.0.0" + checksum: 5909d34d12dd8ac641d7fa96b6fe562470e1539f582c0a3f2b5e35f16b9b0e402d9f909a84393f80989bd96c034118712a5aecb520e5a45662e02fa23db7b656 + languageName: node + linkType: hard + +"next-tick@npm:^1.1.0": + version: 1.1.0 + resolution: "next-tick@npm:1.1.0" + checksum: 83b5cf36027a53ee6d8b7f9c0782f2ba87f4858d977342bfc3c20c21629290a2111f8374d13a81221179603ffc4364f38374b5655d17b6a8f8a8c77bdea4fe8b + languageName: node + linkType: hard + +"next-transpile-modules@npm:^10.0.0": + version: 10.0.1 + resolution: "next-transpile-modules@npm:10.0.1" + dependencies: + enhanced-resolve: ^5.10.0 + checksum: 6cfffd165769a04b153e60f49f4f3896d16aa688304616f66c7b94299e2229b04db368217e6a7300d3110fe988a6c6e68025bb2cbda3edf49e9b29109ff671bd + languageName: node + linkType: hard + +"next@npm:^12.3.4": + version: 12.3.4 + resolution: "next@npm:12.3.4" + dependencies: + "@next/env": 12.3.4 + "@next/swc-android-arm-eabi": 12.3.4 + "@next/swc-android-arm64": 12.3.4 + "@next/swc-darwin-arm64": 12.3.4 + "@next/swc-darwin-x64": 12.3.4 + "@next/swc-freebsd-x64": 12.3.4 + "@next/swc-linux-arm-gnueabihf": 12.3.4 + "@next/swc-linux-arm64-gnu": 12.3.4 + "@next/swc-linux-arm64-musl": 12.3.4 + "@next/swc-linux-x64-gnu": 12.3.4 + "@next/swc-linux-x64-musl": 12.3.4 + "@next/swc-win32-arm64-msvc": 12.3.4 + "@next/swc-win32-ia32-msvc": 12.3.4 + "@next/swc-win32-x64-msvc": 12.3.4 + "@swc/helpers": 0.4.11 + caniuse-lite: ^1.0.30001406 + postcss: 8.4.14 + styled-jsx: 5.0.7 + use-sync-external-store: 1.2.0 + peerDependencies: + fibers: ">= 3.1.0" + node-sass: ^6.0.0 || ^7.0.0 + react: ^17.0.2 || ^18.0.0-0 + react-dom: ^17.0.2 || ^18.0.0-0 + sass: ^1.3.0 + dependenciesMeta: + "@next/swc-android-arm-eabi": + optional: true + "@next/swc-android-arm64": + optional: true + "@next/swc-darwin-arm64": + optional: true + "@next/swc-darwin-x64": + optional: true + "@next/swc-freebsd-x64": + optional: true + "@next/swc-linux-arm-gnueabihf": + optional: true + "@next/swc-linux-arm64-gnu": + optional: true + "@next/swc-linux-arm64-musl": + optional: true + "@next/swc-linux-x64-gnu": + optional: true + "@next/swc-linux-x64-musl": + optional: true + "@next/swc-win32-arm64-msvc": + optional: true + "@next/swc-win32-ia32-msvc": + optional: true + "@next/swc-win32-x64-msvc": + optional: true + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + bin: + next: dist/bin/next + checksum: d96fc4f5bcd5a630d74111519f4820dcbd75dddf16c6d00d2167bd3cb8d74965d46d83c8e5ec301bf999013c7d96f1bfff9424f0221317d68b594c4d01f5825e + languageName: node + linkType: hard + +"node-addon-api@npm:^2.0.0": + version: 2.0.2 + resolution: "node-addon-api@npm:2.0.2" + dependencies: + node-gyp: latest + checksum: 31fb22d674648204f8dd94167eb5aac896c841b84a9210d614bf5d97c74ef059cc6326389cf0c54d2086e35312938401d4cc82e5fcd679202503eb8ac84814f8 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.8": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: d76d2f5edb451a3f05b15115ec89fc6be39de37c6089f1b6368df03b91e1633fd379a7e01b7ab05089a25034b2023d959b47e59759cb38d88341b2459e89d6e5 + languageName: node + linkType: hard + +"node-forge@npm:^1.2.1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 08fb072d3d670599c89a1704b3e9c649ff1b998256737f0e06fbd1a5bf41cae4457ccaee32d95052d80bbafd9ffe01284e078c8071f0267dc9744e51c5ed42a9 + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": + version: 4.6.1 + resolution: "node-gyp-build@npm:4.6.1" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: c3676d337b36803bc7792e35bf7fdcda7cdcb7e289b8f9855a5535702a82498eb976842fefcf487258c58005ca32ce3d537fbed91280b04409161dcd7232a882 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^7.1.4 + graceful-fs: ^4.2.6 + make-fetch-happen: ^11.0.3 + nopt: ^6.0.0 + npmlog: ^6.0.0 + rimraf: ^3.0.2 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^2.0.2 + bin: + node-gyp: bin/node-gyp.js + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 + languageName: node + linkType: hard + +"node-int64@npm:^0.4.0": + version: 0.4.0 + resolution: "node-int64@npm:0.4.0" + checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e + languageName: node + linkType: hard + +"node-releases@npm:^2.0.13": + version: 2.0.13 + resolution: "node-releases@npm:2.0.13" + checksum: 17ec8f315dba62710cae71a8dad3cd0288ba943d2ece43504b3b1aa8625bf138637798ab470b1d9035b0545996f63000a8a926e0f6d35d0996424f8b6d36dda3 + languageName: node + linkType: hard + +"nomnom@npm:^1.5.x": + version: 1.8.1 + resolution: "nomnom@npm:1.8.1" + dependencies: + chalk: ~0.4.0 + underscore: ~1.6.0 + checksum: cc6f538062741e8914b65352499c444a754d18a95f8c4b336b9183367c44335f00a9d3beb54648f6a76d5434702a3d71bf37c23ef4c960d39595ed72d376c6fd + languageName: node + linkType: hard + +"nopt@npm:^6.0.0": + version: 6.0.0 + resolution: "nopt@npm:6.0.0" + dependencies: + abbrev: ^1.0.0 + bin: + nopt: bin/nopt.js + checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.0 + resolution: "nopt@npm:7.2.0" + dependencies: + abbrev: ^2.0.0 + bin: + nopt: bin/nopt.js + checksum: a9c0f57fb8cb9cc82ae47192ca2b7ef00e199b9480eed202482c962d61b59a7fbe7541920b2a5839a97b42ee39e288c0aed770e38057a608d7f579389dfde410 + languageName: node + linkType: hard + +"normalize-package-data@npm:^2.5.0": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: ^2.1.4 + resolve: ^1.10.0 + semver: 2 || 3 || 4 || 5 + validate-npm-package-license: ^3.0.1 + checksum: 7999112efc35a6259bc22db460540cae06564aa65d0271e3bdfa86876d08b0e578b7b5b0028ee61b23f1cae9fc0e7847e4edc0948d3068a39a2a82853efc8499 + languageName: node + linkType: hard + +"normalize-package-data@npm:^3.0.0": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" + dependencies: + hosted-git-info: ^4.0.1 + is-core-module: ^2.5.0 + semver: ^7.3.4 + validate-npm-package-license: ^3.0.1 + checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"notistack@npm:^2.0.5": + version: 2.0.8 + resolution: "notistack@npm:2.0.8" + dependencies: + clsx: ^1.1.0 + hoist-non-react-statics: ^3.3.0 + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/styled": ^11.3.0 + "@mui/material": ^5.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@emotion/react": + optional: true + "@emotion/styled": + optional: true + checksum: f95952ea7209840f6f05a65e74f0fb4e7a1bb321753b2955ae6052f2205d47a6a3c50a42b72db11eac2fc491c4105b4687bed89e79287399530973fa133a5380 + languageName: node + linkType: hard + +"npm-normalize-package-bin@npm:^3.0.0": + version: 3.0.1 + resolution: "npm-normalize-package-bin@npm:3.0.1" + checksum: de416d720ab22137a36292ff8a333af499ea0933ef2320a8c6f56a73b0f0448227fec4db5c890d702e26d21d04f271415eab6580b5546456861cc0c19498a4bf + languageName: node + linkType: hard + +"npm-run-path@npm:^4.0.1": + version: 4.0.1 + resolution: "npm-run-path@npm:4.0.1" + dependencies: + path-key: ^3.0.0 + checksum: 5374c0cea4b0bbfdfae62da7bbdf1e1558d338335f4cacf2515c282ff358ff27b2ecb91ffa5330a8b14390ac66a1e146e10700440c1ab868208430f56b5f4d23 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.1.0": + version: 5.1.0 + resolution: "npm-run-path@npm:5.1.0" + dependencies: + path-key: ^4.0.0 + checksum: dc184eb5ec239d6a2b990b43236845332ef12f4e0beaa9701de724aa797fe40b6bbd0157fb7639d24d3ab13f5d5cf22d223a19c6300846b8126f335f788bee66 + languageName: node + linkType: hard + +"npmlog@npm:^6.0.0": + version: 6.0.2 + resolution: "npmlog@npm:6.0.2" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.3 + set-blocking: ^2.0.0 + checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a + languageName: node + linkType: hard + +"numeral@npm:^2.0.6": + version: 2.0.6 + resolution: "numeral@npm:2.0.6" + checksum: 89f011116539692bf53fde380adeb0579623d00f782703c71c0062d4a8686770c404a041ff4eef454de53925a9f75bba1fa52726057b13d40473f707730b07c2 + languageName: node + linkType: hard + +"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": + version: 4.1.1 + resolution: "object-assign@npm:4.1.1" + checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f + languageName: node + linkType: hard + +"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": + version: 1.12.3 + resolution: "object-inspect@npm:1.12.3" + checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db + languageName: node + linkType: hard + +"object-is@npm:^1.1.5": + version: 1.1.5 + resolution: "object-is@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a + languageName: node + linkType: hard + +"object-keys@npm:~0.4.0": + version: 0.4.0 + resolution: "object-keys@npm:0.4.0" + checksum: 1be3ebe9b48c0d5eda8e4a30657d887a748cb42435e0e2eaf49faf557bdd602cd2b7558b8ce90a4eb2b8592d16b875a1900bce859cbb0f35b21c67e11a45313c + languageName: node + linkType: hard + +"object.assign@npm:^4.1.2, object.assign@npm:^4.1.4": + version: 4.1.4 + resolution: "object.assign@npm:4.1.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + has-symbols: ^1.0.3 + object-keys: ^1.1.1 + checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 + languageName: node + linkType: hard + +"object.entries@npm:^1.1.5, object.entries@npm:^1.1.6": + version: 1.1.7 + resolution: "object.entries@npm:1.1.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: da287d434e7e32989586cd734382364ba826a2527f2bc82e6acbf9f9bfafa35d51018b66ec02543ffdfa2a5ba4af2b6f1ca6e588c65030cb4fd9c67d6ced594c + languageName: node + linkType: hard + +"object.fromentries@npm:^2.0.6": + version: 2.0.7 + resolution: "object.fromentries@npm:2.0.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 7341ce246e248b39a431b87a9ddd331ff52a454deb79afebc95609f94b1f8238966cf21f52188f2a353f0fdf83294f32f1ebf1f7826aae915ebad21fd0678065 + languageName: node + linkType: hard + +"object.groupby@npm:^1.0.0": + version: 1.0.1 + resolution: "object.groupby@npm:1.0.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + checksum: d7959d6eaaba358b1608066fc67ac97f23ce6f573dc8fc661f68c52be165266fcb02937076aedb0e42722fdda0bdc0bbf74778196ac04868178888e9fd3b78b5 + languageName: node + linkType: hard + +"object.hasown@npm:^1.1.2": + version: 1.1.3 + resolution: "object.hasown@npm:1.1.3" + dependencies: + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 76bc17356f6124542fb47e5d0e78d531eafa4bba3fc2d6fc4b1a8ce8b6878912366c0d99f37ce5c84ada8fd79df7aa6ea1214fddf721f43e093ad2df51f27da1 + languageName: node + linkType: hard + +"object.values@npm:^1.1.6": + version: 1.1.7 + resolution: "object.values@npm:1.1.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: f3e4ae4f21eb1cc7cebb6ce036d4c67b36e1c750428d7b7623c56a0db90edced63d08af8a316d81dfb7c41a3a5fa81b05b7cc9426e98d7da986b1682460f0777 + languageName: node + linkType: hard + +"oblivious-set@npm:1.0.0": + version: 1.0.0 + resolution: "oblivious-set@npm:1.0.0" + checksum: f31740ea9c3a8242ad2324e4ebb9a35359fbc2e6e7131731a0fc1c8b7b1238eb07e4c8c631a38535243a7b8e3042b7e89f7dc2a95d2989afd6f80bd5793b0aab + languageName: node + linkType: hard + +"on-exit-leak-free@npm:^0.2.0": + version: 0.2.0 + resolution: "on-exit-leak-free@npm:0.2.0" + checksum: d22b0f0538069110626b578db6e68b6ee0e85b1ee9cc5ef9b4de1bba431431d6a8da91a61e09d2ad46f22a96f968e5237833cb9d0b69bc4d294f7ec82f609b05 + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: 1 + checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 + languageName: node + linkType: hard + +"onetime@npm:^5.1.0, onetime@npm:^5.1.2": + version: 5.1.2 + resolution: "onetime@npm:5.1.2" + dependencies: + mimic-fn: ^2.1.0 + checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 + languageName: node + linkType: hard + +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: ^4.0.0 + checksum: 0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 + languageName: node + linkType: hard + +"open@npm:^9.1.0": + version: 9.1.0 + resolution: "open@npm:9.1.0" + dependencies: + default-browser: ^4.0.0 + define-lazy-prop: ^3.0.0 + is-inside-container: ^1.0.0 + is-wsl: ^2.2.0 + checksum: 3993c0f61d51fed8ac290e99c9c3cf45d3b6cfb3e2aa2b74cafd312c3486c22fd81df16ac8f3ab91dd8a4e3e729a16fc2480cfc406c4833416cf908acf1ae7c9 + languageName: node + linkType: hard + +"openpgp@npm:^5.5.0": + version: 5.10.2 + resolution: "openpgp@npm:5.10.2" + dependencies: + asn1.js: ^5.0.0 + checksum: ff772a146d61cf3d07631287b8b464312e85d6a62fd896540760ce3471f0a02a07437c5f02c06e721273527219f5f6b00f7d91fcfbbd1bca0b0599b336fe1d06 + languageName: node + linkType: hard + +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" + dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 + deep-is: ^0.1.3 + fast-levenshtein: ^2.0.6 + levn: ^0.4.1 + prelude-ls: ^1.2.1 + type-check: ^0.4.0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a + languageName: node + linkType: hard + +"p-defer@npm:^3.0.0": + version: 3.0.0 + resolution: "p-defer@npm:3.0.0" + checksum: ac3b0976a1c76b67cca1a34e00f7299b0cc230891f820749686aa84f8947326bbe0f8e3b7d9ca511578ee06f0c1a6e0ff68c8e9c325eac455f09d99f91697161 + languageName: node + linkType: hard + +"p-fifo@npm:^1.0.0": + version: 1.0.0 + resolution: "p-fifo@npm:1.0.0" + dependencies: + fast-fifo: ^1.0.0 + p-defer: ^3.0.0 + checksum: 4cdce44ff8266351014a460705a804c02760e5b721a018dbef6fae7d25caf83af2e343be58810297473383c1783bb7048388cb5c22938b3f904818531bc44ee7 + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: ^2.0.0 + checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 + languageName: node + linkType: hard + +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: ^0.1.0 + checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: ^2.2.0 + checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: ^3.0.0 + checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c + languageName: node + linkType: hard + +"p-retry@npm:^4.5.0": + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" + dependencies: + "@types/retry": 0.12.0 + retry: ^0.13.1 + checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e + languageName: node + linkType: hard + +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae + languageName: node + linkType: hard + +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: ^3.0.0 + checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff + languageName: node + linkType: hard + +"parse-duration@npm:^1.0.0": + version: 1.1.0 + resolution: "parse-duration@npm:1.1.0" + checksum: 3cfc10aa61b3a06373a347289e1704de47d5d845c79330bbab20b54c02567f3710ba84544a3a44a986c3381c68670d89542fe9de607fb0814e52f78b34893cd9 + languageName: node + linkType: hard + +"parse-entities@npm:^2.0.0": + version: 2.0.0 + resolution: "parse-entities@npm:2.0.0" + dependencies: + character-entities: ^1.0.0 + character-entities-legacy: ^1.0.0 + character-reference-invalid: ^1.0.0 + is-alphanumerical: ^1.0.0 + is-decimal: ^1.0.0 + is-hexadecimal: ^1.0.0 + checksum: 7addfd3e7d747521afac33c8121a5f23043c6973809756920d37e806639b4898385d386fcf4b3c8e2ecf1bc28aac5ae97df0b112d5042034efbe80f44081ebce + languageName: node + linkType: hard + +"parse-entities@npm:^4.0.0": + version: 4.0.1 + resolution: "parse-entities@npm:4.0.1" + dependencies: + "@types/unist": ^2.0.0 + character-entities: ^2.0.0 + character-entities-legacy: ^3.0.0 + character-reference-invalid: ^2.0.0 + decode-named-character-reference: ^1.0.0 + is-alphanumerical: ^2.0.0 + is-decimal: ^2.0.0 + is-hexadecimal: ^2.0.0 + checksum: 32a6ff5b9acb9d2c4d71537308521fd265e685b9215691df73feedd9edfe041bb6da9f89bd0c35c4a2bc7d58e3e76e399bb6078c2fd7d2a343ff1dd46edbf1bd + languageName: node + linkType: hard + +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": + version: 5.2.0 + resolution: "parse-json@npm:5.2.0" + dependencies: + "@babel/code-frame": ^7.0.0 + error-ex: ^1.3.1 + json-parse-even-better-errors: ^2.3.0 + lines-and-columns: ^1.1.6 + checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 + languageName: node + linkType: hard + +"parse-json@npm:^6.0.0": + version: 6.0.2 + resolution: "parse-json@npm:6.0.2" + dependencies: + "@babel/code-frame": ^7.16.0 + error-ex: ^1.3.2 + json-parse-even-better-errors: ^2.3.1 + lines-and-columns: ^2.0.2 + checksum: b33d93abf869f3102804896b9a1f8c04bf371e3c55d7afafaf18fca2813a20b2e14a1ae5c6823feea3b4fabc63f35984dc272fa057c4767531ffe1b46d52fa79 + languageName: node + linkType: hard + +"parse-ms@npm:^1.0.0": + version: 1.0.1 + resolution: "parse-ms@npm:1.0.1" + checksum: 93fa7921554fe16bc73272a94bf812d1db6a144964fb57692f6de4fccf14bd771a232e8dcdcd4bbaa4aa477796cd3f35374d65596cca12323f2664bc023b4b4c + languageName: node + linkType: hard + +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 + languageName: node + linkType: hard + +"path-key@npm:^3.0.0, path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a + languageName: node + linkType: hard + +"path-scurry@npm:^1.10.1": + version: 1.10.1 + resolution: "path-scurry@npm:1.10.1" + dependencies: + lru-cache: ^9.1.1 || ^10.0.0 + minipass: ^5.0.0 || ^6.0.2 || ^7.0.0 + checksum: e2557cff3a8fb8bc07afdd6ab163a92587884f9969b05bbbaf6fe7379348bfb09af9ed292af12ed32398b15fb443e81692047b786d1eeb6d898a51eb17ed7d90 + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 + languageName: node + linkType: hard + +"peer-id@npm:^0.16.0": + version: 0.16.0 + resolution: "peer-id@npm:0.16.0" + dependencies: + class-is: ^1.1.0 + libp2p-crypto: ^0.21.0 + multiformats: ^9.4.5 + protobufjs: ^6.10.2 + uint8arrays: ^3.0.0 + checksum: 35dfb887c6f00789702214488e1f97dd1713ed77909b7f9be13b20003aed64cc444bf15e6bd845c01d47f424856acca7fa1f0501b785f5cb6e6707e3f05b9f41 + languageName: node + linkType: hard + +"performance-now@npm:^2.1.0": + version: 2.1.0 + resolution: "performance-now@npm:2.1.0" + checksum: 534e641aa8f7cba160f0afec0599b6cecefbb516a2e837b512be0adbe6c1da5550e89c78059c7fabc5c9ffdf6627edabe23eb7c518c4500067a898fa65c2b550 + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.0.0 + resolution: "picocolors@npm:1.0.0" + checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.3, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf + languageName: node + linkType: hard + +"pidtree@npm:0.6.0": + version: 0.6.0 + resolution: "pidtree@npm:0.6.0" + bin: + pidtree: bin/pidtree.js + checksum: 8fbc073ede9209dd15e80d616e65eb674986c93be49f42d9ddde8dbbd141bb53d628a7ca4e58ab5c370bb00383f67d75df59a9a226dede8fa801267a7030c27a + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 6cdcbc3567d5c412450c53261a3f10991665d660961e06605decf4544a61a97a54fefe70a68d5c37080ff9d6f4cf51444c90198d1ba9f9309a6c0d6e9f5c4fde + languageName: node + linkType: hard + +"pify@npm:^5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb + languageName: node + linkType: hard + +"pino-abstract-transport@npm:v0.5.0": + version: 0.5.0 + resolution: "pino-abstract-transport@npm:0.5.0" + dependencies: + duplexify: ^4.1.2 + split2: ^4.0.0 + checksum: c503f867de3189f8217ab9cf794e8a631dddd0029a829f0f985f5511308152ebd53e363764fbc5570b3d1c715b341e3923456ce16ad84cd41be2b9a074ada234 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^4.0.0": + version: 4.0.0 + resolution: "pino-std-serializers@npm:4.0.0" + checksum: 89d487729b58c9d3273a0ee851ead068d6d2e2ccc1af8e1c1d28f1b3442423679bec7ec04d9a2aba36f94f335e82be9f4de19dc4fbc161e71c136aaa15b85ad3 + languageName: node + linkType: hard + +"pino@npm:7.11.0": + version: 7.11.0 + resolution: "pino@npm:7.11.0" + dependencies: + atomic-sleep: ^1.0.0 + fast-redact: ^3.0.0 + on-exit-leak-free: ^0.2.0 + pino-abstract-transport: v0.5.0 + pino-std-serializers: ^4.0.0 + process-warning: ^1.0.0 + quick-format-unescaped: ^4.0.3 + real-require: ^0.1.0 + safe-stable-stringify: ^2.1.0 + sonic-boom: ^2.2.1 + thread-stream: ^0.15.1 + bin: + pino: bin.js + checksum: b919e7dbe41de978bb050dcef94fd687c012eb78d344a18f75f04ce180d5810fc162be1f136722d70cd005ed05832c4023a38b9acbc1076ae63c9f5ec5ca515c + languageName: node + linkType: hard + +"pirates@npm:^4.0.4": + version: 4.0.6 + resolution: "pirates@npm:4.0.6" + checksum: 46a65fefaf19c6f57460388a5af9ab81e3d7fd0e7bc44ca59d753cb5c4d0df97c6c6e583674869762101836d68675f027d60f841c105d72734df9dfca97cbcc6 + languageName: node + linkType: hard + +"pkg-dir@npm:^4.2.0": + version: 4.2.0 + resolution: "pkg-dir@npm:4.2.0" + dependencies: + find-up: ^4.0.0 + checksum: 9863e3f35132bf99ae1636d31ff1e1e3501251d480336edb1c211133c8d58906bed80f154a1d723652df1fda91e01c7442c2eeaf9dc83157c7ae89087e43c8d6 + languageName: node + linkType: hard + +"plur@npm:^1.0.0": + version: 1.0.0 + resolution: "plur@npm:1.0.0" + checksum: bd8725178b2db5a708293c072631c84a33299dece6e5041835f874064e51c515d201905408c780e48df54d960d32bc0ac2e9e4cfe6d756ec4fff29ba5adfbf6c + languageName: node + linkType: hard + +"plur@npm:^2.1.2": + version: 2.1.2 + resolution: "plur@npm:2.1.2" + dependencies: + irregular-plurals: ^1.0.0 + checksum: d77a2f4766c622cfe5d34fe8c3503cc4925015d0875678fbda3a852b14016d30d47aa82f63a454409219061b0c0d7fc2138e7d71d94dec453624580ee3578769 + languageName: node + linkType: hard + +"pngjs@npm:^5.0.0": + version: 5.0.0 + resolution: "pngjs@npm:5.0.0" + checksum: 04e912cc45fb9601564e2284efaf0c5d20d131d9b596244f8a6789fc6cdb6b18d2975a6bbf7a001858d7e159d5c5c5dd7b11592e97629b7137f7f5cef05904c8 + languageName: node + linkType: hard + +"postcss-value-parser@npm:^4.0.2": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f + languageName: node + linkType: hard + +"postcss@npm:8.4.14": + version: 8.4.14 + resolution: "postcss@npm:8.4.14" + dependencies: + nanoid: ^3.3.4 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: fe58766ff32e4becf65a7d57678995cfd239df6deed2fe0557f038b47c94e4132e7e5f68b5aa820c13adfec32e523b693efaeb65798efb995ce49ccd83953816 + languageName: node + linkType: hard + +"preact@npm:^10.12.0, preact@npm:^10.5.9": + version: 10.18.1 + resolution: "preact@npm:10.18.1" + checksum: 691030149fdbd026cac7c07147756f48c6cb8cdea6a8af8c0f383e4c31f5bce48cdc751e4bccf8826560a0d2db77ada401c0308f2bcae2961d16972c26c95607 + languageName: node + linkType: hard + +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a + languageName: node + linkType: hard + +"prettier-linter-helpers@npm:^1.0.0": + version: 1.0.0 + resolution: "prettier-linter-helpers@npm:1.0.0" + dependencies: + fast-diff: ^1.1.2 + checksum: 00ce8011cf6430158d27f9c92cfea0a7699405633f7f1d4a45f07e21bf78e99895911cbcdc3853db3a824201a7c745bd49bfea8abd5fb9883e765a90f74f8392 + languageName: node + linkType: hard + +"prettier-plugin-organize-imports@npm:^3.2.3": + version: 3.2.3 + resolution: "prettier-plugin-organize-imports@npm:3.2.3" + peerDependencies: + "@volar/vue-language-plugin-pug": ^1.0.4 + "@volar/vue-typescript": ^1.0.4 + prettier: ">=2.0" + typescript: ">=2.9" + peerDependenciesMeta: + "@volar/vue-language-plugin-pug": + optional: true + "@volar/vue-typescript": + optional: true + checksum: e97dd707ce88960885df9598c2c0b8187169ff4664e7a5083a8603eabfb457aa0a0eafdf5cb60877a1085e2da5f9cb19fa441061227aa23524e5fe1709bae0cf + languageName: node + linkType: hard + +"prettier-plugin-packagejson@npm:2.2.18": + version: 2.2.18 + resolution: "prettier-plugin-packagejson@npm:2.2.18" + dependencies: + sort-package-json: 1.57.0 + peerDependencies: + prettier: ">= 1.16.0" + checksum: aee11632b4a75d357cad0e25e537491580e0d4bd9ee54a1ad68f3363e0e4e0204450fcd405368737ce92edfde568e5ac80108ab5e6a4e415bebc6af816fcf06b + languageName: node + linkType: hard + +"prettier-plugin-sh@npm:0.11.0": + version: 0.11.0 + resolution: "prettier-plugin-sh@npm:0.11.0" + dependencies: + mvdan-sh: ^0.10.1 + peerDependencies: + prettier: ^2.0.0 + checksum: c7821082507c849f4a7d915cb9ec4ad1e25ac787d3aae3937901cd4d4b8faf00a6b2f2ccbc7e91ca92c2f32bbb00be9d324ca01002bbb843da684ba9a95540b5 + languageName: node + linkType: hard + +"prettier@npm:2.6.2": + version: 2.6.2 + resolution: "prettier@npm:2.6.2" + bin: + prettier: bin-prettier.js + checksum: 48d08dde8e9fb1f5bccdd205baa7f192e9fc8bc98f86e1b97d919de804e28c806b0e6cc685e4a88211aa7987fa9668f30baae19580d87ced3ed0f2ec6572106f + languageName: node + linkType: hard + +"prettier@npm:^3.0.3": + version: 3.0.3 + resolution: "prettier@npm:3.0.3" + bin: + prettier: bin/prettier.cjs + checksum: e10b9af02b281f6c617362ebd2571b1d7fc9fb8a3bd17e371754428cda992e5e8d8b7a046e8f7d3e2da1dcd21aa001e2e3c797402ebb6111b5cd19609dd228e0 + languageName: node + linkType: hard + +"pretty-format@npm:^22.0.3, pretty-format@npm:^22.4.3": + version: 22.4.3 + resolution: "pretty-format@npm:22.4.3" + dependencies: + ansi-regex: ^3.0.0 + ansi-styles: ^3.2.0 + checksum: 300f4fcf32b6d49cd4e6ed81ee20e4e5484ffb55d3791f1ffe7a5f410d0ed14027134fc04e0032bc09b4a44e548472ead12663384c44bc5813eb5f61fe244830 + languageName: node + linkType: hard + +"pretty-format@npm:^27.0.2": + version: 27.5.1 + resolution: "pretty-format@npm:27.5.1" + dependencies: + ansi-regex: ^5.0.1 + ansi-styles: ^5.0.0 + react-is: ^17.0.1 + checksum: cf610cffcb793885d16f184a62162f2dd0df31642d9a18edf4ca298e909a8fe80bdbf556d5c9573992c102ce8bf948691da91bf9739bee0ffb6e79c8a8a6e088 + languageName: node + linkType: hard + +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0": + version: 29.7.0 + resolution: "pretty-format@npm:29.7.0" + dependencies: + "@jest/schemas": ^29.6.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 032c1602383e71e9c0c02a01bbd25d6759d60e9c7cf21937dde8357aa753da348fcec5def5d1002c9678a8524d5fe099ad98861286550ef44de8808cc61e43b6 + languageName: node + linkType: hard + +"pretty-ms@npm:^2.1.0": + version: 2.1.0 + resolution: "pretty-ms@npm:2.1.0" + dependencies: + is-finite: ^1.0.1 + parse-ms: ^1.0.0 + plur: ^1.0.0 + checksum: a6a3df561f761902080df23407fc549cc3042fd685d8d2906e6cc2bd5024a814fb2bd4bd061e24879a8540c3aa48faba366421d5b49c268fbfb3501493835c2a + languageName: node + linkType: hard + +"proc-log@npm:^3.0.0": + version: 3.0.0 + resolution: "proc-log@npm:3.0.0" + checksum: 02b64e1b3919e63df06f836b98d3af002b5cd92655cab18b5746e37374bfb73e03b84fe305454614b34c25b485cc687a9eebdccf0242cda8fda2475dd2c97e02 + languageName: node + linkType: hard + +"process-nextick-args@npm:~1.0.6": + version: 1.0.7 + resolution: "process-nextick-args@npm:1.0.7" + checksum: 41224fbc803ac6c96907461d4dfc20942efa3ca75f2d521bcf7cf0e89f8dec127fb3fb5d76746b8fb468a232ea02d84824fae08e027aec185fd29049c66d49f8 + languageName: node + linkType: hard + +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"process-warning@npm:^1.0.0": + version: 1.0.0 + resolution: "process-warning@npm:1.0.0" + checksum: c708a03241deec3cabaeee39c4f9ee8c4d71f1c5ef9b746c8252cdb952a6059068cfcdaf348399775244cbc441b6ae5e26a9c87ed371f88335d84f26d19180f9 + languageName: node + linkType: hard + +"process@npm:^0.11.10": + version: 0.11.10 + resolution: "process@npm:0.11.10" + checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: ^2.0.2 + retry: ^0.12.0 + checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 + languageName: node + linkType: hard + +"prompts@npm:^2.0.1": + version: 2.4.2 + resolution: "prompts@npm:2.4.2" + dependencies: + kleur: ^3.0.3 + sisteransi: ^1.0.5 + checksum: d8fd1fe63820be2412c13bfc5d0a01909acc1f0367e32396962e737cb2fc52d004f3302475d5ce7d18a1e8a79985f93ff04ee03007d091029c3f9104bffc007d + languageName: node + linkType: hard + +"prop-types@npm:^15.5.8, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": + version: 15.8.1 + resolution: "prop-types@npm:15.8.1" + dependencies: + loose-envify: ^1.4.0 + object-assign: ^4.1.1 + react-is: ^16.13.1 + checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 + languageName: node + linkType: hard + +"proper-lockfile@npm:^4.1.2": + version: 4.1.2 + resolution: "proper-lockfile@npm:4.1.2" + dependencies: + graceful-fs: ^4.2.4 + retry: ^0.12.0 + signal-exit: ^3.0.2 + checksum: 00078ee6a61c216a56a6140c7d2a98c6c733b3678503002dc073ab8beca5d50ca271de4c85fca13b9b8ee2ff546c36674d1850509b84a04a5d0363bcb8638939 + languageName: node + linkType: hard + +"protobufjs@npm:^6.10.2, protobufjs@npm:^6.11.2": + version: 6.11.4 + resolution: "protobufjs@npm:6.11.4" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/long": ^4.0.1 + "@types/node": ">=13.7.0" + long: ^4.0.0 + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: b2fc6a01897b016c2a7e43a854ab4a3c57080f61be41e552235436e7a730711b8e89e47cb4ae52f0f065b5ab5d5989fc932f390337ce3a8ccf07203415700850 + languageName: node + linkType: hard + +"protobufjs@npm:^7.0.0": + version: 7.2.5 + resolution: "protobufjs@npm:7.2.5" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/node": ">=13.7.0" + long: ^5.0.0 + checksum: 3770a072114061faebbb17cfd135bc4e187b66bc6f40cd8bac624368b0270871ec0cfb43a02b9fb4f029c8335808a840f1afba3c2e7ede7063b98ae6b98a703f + languageName: node + linkType: hard + +"proxy-compare@npm:2.5.1": + version: 2.5.1 + resolution: "proxy-compare@npm:2.5.1" + checksum: c7cc151ac255150bcb24becde6495b3e399416c31991af377ce082255b51f07eaeb5d861bf8bf482703e92f88b90a5892ad57d3153ea29450d03ef921683d9fa + languageName: node + linkType: hard + +"punycode@npm:^2.1.0": + version: 2.3.0 + resolution: "punycode@npm:2.3.0" + checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 + languageName: node + linkType: hard + +"pure-rand@npm:^6.0.0": + version: 6.0.4 + resolution: "pure-rand@npm:6.0.4" + checksum: e1c4e69f8bf7303e5252756d67c3c7551385cd34d94a1f511fe099727ccbab74c898c03a06d4c4a24a89b51858781057b83ebbfe740d984240cdc04fead36068 + languageName: node + linkType: hard + +"qrcode-generator@npm:^1.4.1": + version: 1.4.4 + resolution: "qrcode-generator@npm:1.4.4" + checksum: 860cfdd2a7a608d34e92cab99774cc08182e1911432f30ed36d16f8a5cdabd7fdf40239caed91fa2691cfe66c8d95c1340a2fc9cc439eed07a9f2eb328c6f527 + languageName: node + linkType: hard + +"qrcode@npm:1.5.3, qrcode@npm:^1.5.1": + version: 1.5.3 + resolution: "qrcode@npm:1.5.3" + dependencies: + dijkstrajs: ^1.0.1 + encode-utf8: ^1.0.3 + pngjs: ^5.0.0 + yargs: ^15.3.1 + bin: + qrcode: bin/qrcode + checksum: 9a8a20a0a9cb1d15de8e7b3ffa214e8b6d2a8b07655f25bd1b1d77f4681488f84d7bae569870c0652872d829d5f8ac4922c27a6bd14c13f0e197bf07b28dead7 + languageName: node + linkType: hard + +"qs@npm:^6.10.3, qs@npm:^6.11.2": + version: 6.11.2 + resolution: "qs@npm:6.11.2" + dependencies: + side-channel: ^1.0.4 + checksum: e812f3c590b2262548647d62f1637b6989cc56656dc960b893fe2098d96e1bd633f36576f4cd7564dfbff9db42e17775884db96d846bebe4f37420d073ecdc0b + languageName: node + linkType: hard + +"query-string@npm:7.1.3": + version: 7.1.3 + resolution: "query-string@npm:7.1.3" + dependencies: + decode-uri-component: ^0.2.2 + filter-obj: ^1.1.0 + split-on-first: ^1.0.0 + strict-uri-encode: ^2.0.0 + checksum: 91af02dcd9cc9227a052841d5c2eecb80a0d6489d05625df506a097ef1c59037cfb5e907f39b84643cbfd535c955abec3e553d0130a7b510120c37d06e0f4346 + languageName: node + linkType: hard + +"query-string@npm:^6.13.5": + version: 6.14.1 + resolution: "query-string@npm:6.14.1" + dependencies: + decode-uri-component: ^0.2.0 + filter-obj: ^1.1.0 + split-on-first: ^1.0.0 + strict-uri-encode: ^2.0.0 + checksum: f2c7347578fa0f3fd4eaace506470cb4e9dc52d409a7ddbd613f614b9a594d750877e193b5d5e843c7477b3b295b857ec328903c943957adc41a3efb6c929449 + languageName: node + linkType: hard + +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 5641ea231bad7ef6d64d9998faca95611ed4b11c2591a8cae741e178a974f6a8e0ebde008475259abe1621cb15e692404e6b6626e927f7b849d5c09392604b15 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2, queue-microtask@npm:^1.2.3": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: 7bc32b99354a1aa46c089d2a82b63489961002bb1d654cee3e6d2d8778197b68c2d854fd23d8422436ee1fdfd0abaddc4d4da120afe700ade68bd357815b26fd + languageName: node + linkType: hard + +"quick-lru@npm:^4.0.1": + version: 4.0.1 + resolution: "quick-lru@npm:4.0.1" + checksum: bea46e1abfaa07023e047d3cf1716a06172c4947886c053ede5c50321893711577cb6119360f810cc3ffcd70c4d7db4069c3cee876b358ceff8596e062bd1154 + languageName: node + linkType: hard + +"rabin-wasm@npm:^0.1.4": + version: 0.1.5 + resolution: "rabin-wasm@npm:0.1.5" + dependencies: + "@assemblyscript/loader": ^0.9.4 + bl: ^5.0.0 + debug: ^4.3.1 + minimist: ^1.2.5 + node-fetch: ^2.6.1 + readable-stream: ^3.6.0 + bin: + rabin-wasm: cli/bin.js + checksum: e6892830c0cae57560d4630e480b624792706183898500cf0c3415a19f7e774d99169a968a73471e5c448f9d3ebc9dbf09a9d36344d7779ececf7928ebb0d7f0 + languageName: node + linkType: hard + +"raf@npm:^3.4.1": + version: 3.4.1 + resolution: "raf@npm:3.4.1" + dependencies: + performance-now: ^2.1.0 + checksum: 50ba284e481c8185dbcf45fc4618ba3aec580bb50c9121385d5698cb6012fe516d2015b1df6dd407a7b7c58d44be8086108236affbce1861edd6b44637c8cd52 + languageName: node + linkType: hard + +"ramda@npm:^0.27.1": + version: 0.27.2 + resolution: "ramda@npm:0.27.2" + checksum: 28d6735dd1eea1a796c56cf6111f3673c6105bbd736e521cdd7826c46a18eeff337c2dba4668f6eed990d539b9961fd6db19aa46ccc1530ba67a396c0a9f580d + languageName: node + linkType: hard + +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: ^5.1.0 + checksum: d779499376bd4cbb435ef3ab9a957006c8682f343f14089ed5f27764e4645114196e75b7f6abf1cbd84fd247c0cb0651698444df8c9bf30e62120fbbc52269d6 + languageName: node + linkType: hard + +"re-emitter@npm:1.1.3": + version: 1.1.3 + resolution: "re-emitter@npm:1.1.3" + checksum: 3234850c26c4e51622ad7e54172396134cd510c2511da680275ab1e663e5d12c8b81e3e6f4ec025527ed241ad53dae9d1478c0148569840d2fec96a37d155431 + languageName: node + linkType: hard + +"react-cookies@npm:^0.1.1": + version: 0.1.1 + resolution: "react-cookies@npm:0.1.1" + dependencies: + cookie: ^0.3.1 + object-assign: ^4.1.1 + checksum: a31a7f5e43cdbcf7a86dcbac152e9009668fd216926bcb3f6d0fd8e3df09f6b3f3061021fb61deb2d81db1139069a5df2205565659deca6083c71aae952bfc17 + languageName: node + linkType: hard + +"react-dom@npm:^17.0.2": + version: 17.0.2 + resolution: "react-dom@npm:17.0.2" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + scheduler: ^0.20.2 + peerDependencies: + react: 17.0.2 + checksum: 1c1eaa3bca7c7228d24b70932e3d7c99e70d1d04e13bb0843bbf321582bc25d7961d6b8a6978a58a598af2af496d1cedcfb1bf65f6b0960a0a8161cb8dab743c + languageName: node + linkType: hard + +"react-emoji-render@npm:^2.0.1": + version: 2.0.1 + resolution: "react-emoji-render@npm:2.0.1" + dependencies: + classnames: ^2.2.5 + emoji-regex: ^8.0.0 + lodash.flatten: ^4.4.0 + prop-types: ^15.5.8 + string-replace-to-array: ^1.0.1 + peerDependencies: + react: ">=0.14.0" + react-dom: ">=0.14.0" + checksum: 317864740b74eaf6576671dd7d72f41a56a396abeea6a47373149a8ecfb8275f3a890a5af48f42fee1c4c0ec72bd66de9edcbbb7fd6b2dd7eeee0d85efee7618 + languageName: node + linkType: hard + +"react-error-boundary@npm:^3.1.0": + version: 3.1.4 + resolution: "react-error-boundary@npm:3.1.4" + dependencies: + "@babel/runtime": ^7.12.5 + peerDependencies: + react: ">=16.13.1" + checksum: f36270a5d775a25c8920f854c0d91649ceea417b15b5bc51e270a959b0476647bb79abb4da3be7dd9a4597b029214e8fe43ea914a7f16fa7543c91f784977f1b + languageName: node + linkType: hard + +"react-hook-form@npm:^7.42.1": + version: 7.47.0 + resolution: "react-hook-form@npm:7.47.0" + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + checksum: dec192fec9c54e436f9e47008635dd7849b6b119ed477a9b0cd491367a0b2ced3427cd937febfb245e1cb7578c863917181d903eff4519c2787bf713ec7d3426 + languageName: node + linkType: hard + +"react-icons@npm:^4.10.1": + version: 4.11.0 + resolution: "react-icons@npm:4.11.0" + peerDependencies: + react: "*" + checksum: 7b8b80bbe2dabcc54b6c2129b7761a04b19caebe24389adc7683478ef41212b9ca0b53c63abcc06b3c01b94c84855ec5142b4c357e19c4aaaad9a4db23a3c485 + languageName: node + linkType: hard + +"react-infinite-scroll-component@npm:^6.1.0": + version: 6.1.0 + resolution: "react-infinite-scroll-component@npm:6.1.0" + dependencies: + throttle-debounce: ^2.1.0 + peerDependencies: + react: ">=16.0.0" + checksum: 3708398934366df907dbad215247ebc1033221957ce7e32289ea31750cce70aa16513e2d03743e06c8b868ac7c542d12d5dbb6c830fd408433a4762f3cb5ecfb + languageName: node + linkType: hard + +"react-is-mounted-hook@npm:^1.1.2": + version: 1.1.2 + resolution: "react-is-mounted-hook@npm:1.1.2" + peerDependencies: + react: ^16.8.6 || ^17 + react-dom: ^16.8.6 || ^17 + checksum: 297e28bc6fe77f1ba13536246a1747c1478e1896fe7ade7b0801baf902774116cd2ec38ad91a08eb9b9706e03fbf63ca4534bdbc9b7a0ce9e4a15d9295712f13 + languageName: node + linkType: hard + +"react-is@npm:^16.13.1, react-is@npm:^16.7.0": + version: 16.13.1 + resolution: "react-is@npm:16.13.1" + checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f + languageName: node + linkType: hard + +"react-is@npm:^17.0.1, react-is@npm:^17.0.2": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 + languageName: node + linkType: hard + +"react-is@npm:^18.0.0, react-is@npm:^18.2.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + +"react-lazy-load-image-component@npm:^1.6.0": + version: 1.6.0 + resolution: "react-lazy-load-image-component@npm:1.6.0" + dependencies: + lodash.debounce: ^4.0.8 + lodash.throttle: ^4.1.1 + peerDependencies: + react: ^15.x.x || ^16.x.x || ^17.x.x || ^18.x.x + react-dom: ^15.x.x || ^16.x.x || ^17.x.x || ^18.x.x + checksum: ab6db459c81a311e621ceb8be184472108ad5cff85cd5b80a52c0c16be808f8084a5fca756695eb0c84f543af6715a3bb1b50e702dd2485cb9162b30bcce3e35 + languageName: node + linkType: hard + +"react-medium-image-zoom@npm:^5.1.6": + version: 5.1.8 + resolution: "react-medium-image-zoom@npm:5.1.8" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 8c880673b3709fdfc4de0807245c61e727451930495478e8bda589d0f006a2aab046e84d02d2fdf94f57bf6d5fc2331f804fec2b64f23e495ebf290983699c31 + languageName: node + linkType: hard + +"react-native-fetch-api@npm:^3.0.0": + version: 3.0.0 + resolution: "react-native-fetch-api@npm:3.0.0" + dependencies: + p-defer: ^3.0.0 + checksum: f10f435060551c470711ba0b3663e3d49c7701aae84ea645d66992d756b13e923fb5762b324d3583d85c1c0def4138b9cc3f686bab1c1bc10d3ad82dc7175c99 + languageName: node + linkType: hard + +"react-property@npm:2.0.0": + version: 2.0.0 + resolution: "react-property@npm:2.0.0" + checksum: 8a444df30ef0937689c7968dae2501a0ca523777169f450e1f7ef5beeb855d6509bd058bf612f6ed8f459aa35468335d356e50264492e1938586e59fdb988262 + languageName: node + linkType: hard + +"react-qrcode-logo@npm:^2.8.0": + version: 2.9.0 + resolution: "react-qrcode-logo@npm:2.9.0" + dependencies: + lodash.isequal: ^4.5.0 + qrcode-generator: ^1.4.1 + peerDependencies: + react: ">=16.4.1" + react-dom: ">=16.4.1" + checksum: 24dbabb24091c13062981da8336e92f1ed2bf576b1eee1fcc8945dc6e4bde94fdec887da8380cbe49fe10bfdeb06eda393f135a15a4ecf13c45472bdfd2510a5 + languageName: node + linkType: hard + +"react-query@npm:^3.39.3": + version: 3.39.3 + resolution: "react-query@npm:3.39.3" + dependencies: + "@babel/runtime": ^7.5.5 + broadcast-channel: ^3.4.1 + match-sorter: ^6.0.2 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: d2de6a0992dbf039ff2de564de1ae6361f8ac7310159dae42ec16f833b79c05caedced187235c42373ac331cc5f2fe9e2b31b14ae75a815e86d86e30ca9887ad + languageName: node + linkType: hard + +"react-redux@npm:^7.2.5": + version: 7.2.9 + resolution: "react-redux@npm:7.2.9" + dependencies: + "@babel/runtime": ^7.15.4 + "@types/react-redux": ^7.1.20 + hoist-non-react-statics: ^3.3.2 + loose-envify: ^1.4.0 + prop-types: ^15.7.2 + react-is: ^17.0.2 + peerDependencies: + react: ^16.8.3 || ^17 || ^18 + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + checksum: 369a2bdcf87915659af9e5c55abfd9f52a84e43e0d12dcc108ed17dbe6933558b7b7fc12caa9c10c1a10a8be7df89454b6c96989d8573fedec1a772c94a1f145 + languageName: node + linkType: hard + +"react-remove-scroll-bar@npm:^2.3.3": + version: 2.3.4 + resolution: "react-remove-scroll-bar@npm:2.3.4" + dependencies: + react-style-singleton: ^2.2.1 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: b5ce5f2f98d65c97a3e975823ae4043a4ba2a3b63b5ba284b887e7853f051b5cd6afb74abde6d57b421931c52f2e1fdbb625dc858b1cb5a32c27c14ab85649d4 + languageName: node + linkType: hard + +"react-remove-scroll@npm:2.5.5": + version: 2.5.5 + resolution: "react-remove-scroll@npm:2.5.5" + dependencies: + react-remove-scroll-bar: ^2.3.3 + react-style-singleton: ^2.2.1 + tslib: ^2.1.0 + use-callback-ref: ^1.3.0 + use-sidecar: ^1.1.2 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 2c7fe9cbd766f5e54beb4bec2e2efb2de3583037b23fef8fa511ab426ed7f1ae992382db5acd8ab5bfb030a4b93a06a2ebca41377d6eeaf0e6791bb0a59616a4 + languageName: node + linkType: hard + +"react-style-singleton@npm:^2.2.1": + version: 2.2.1 + resolution: "react-style-singleton@npm:2.2.1" + dependencies: + get-nonce: ^1.0.0 + invariant: ^2.2.4 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7ee8ef3aab74c7ae1d70ff34a27643d11ba1a8d62d072c767827d9ff9a520905223e567002e0bf6c772929d8ea1c781a3ba0cc4a563e92b1e3dc2eaa817ecbe8 + languageName: node + linkType: hard + +"react-toastify@npm:^9.1.3": + version: 9.1.3 + resolution: "react-toastify@npm:9.1.3" + dependencies: + clsx: ^1.1.1 + peerDependencies: + react: ">=16" + react-dom: ">=16" + checksum: e8bd92c5cbf831b43a042644ab9bc69abe6ceb3ce91ba71f5cd2d8b6a2c9885ca52770e1f1ba64c5632607f6df962db344a26c7fba57606faf5aa0e7bfc8535f + languageName: node + linkType: hard + +"react-transition-group@npm:^4.4.5": + version: 4.4.5 + resolution: "react-transition-group@npm:4.4.5" + dependencies: + "@babel/runtime": ^7.5.5 + dom-helpers: ^5.0.1 + loose-envify: ^1.4.0 + prop-types: ^15.6.2 + peerDependencies: + react: ">=16.6.0" + react-dom: ">=16.6.0" + checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 + languageName: node + linkType: hard + +"react-twitter-embed@npm:^4.0.4": + version: 4.0.4 + resolution: "react-twitter-embed@npm:4.0.4" + dependencies: + scriptjs: ^2.5.9 + peerDependencies: + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: cdb3c5bd04c4da0efa767476be47c0a3865fb6335f2a1b9e242170167b51615c38164223278cef60c77143c4bac27ba582cbea054d0af3f138104fa5ec537c4c + languageName: node + linkType: hard + +"react-visibility-sensor@npm:^5.1.1": + version: 5.1.1 + resolution: "react-visibility-sensor@npm:5.1.1" + dependencies: + prop-types: ^15.7.2 + peerDependencies: + react: ">=16.0.0" + react-dom: ">=16.0.0" + checksum: ebce7bc743071930a2dd333a041c4a99aac24d5059c47a52eff25a8d81ab9307fadc87b8a6655ebb3154f5c1ceafcc309ae04ee07a7d5fad2949a6903d15acd5 + languageName: node + linkType: hard + +"react@npm:17.0.2": + version: 17.0.2 + resolution: "react@npm:17.0.2" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + checksum: b254cc17ce3011788330f7bbf383ab653c6848902d7936a87b09d835d091e3f295f7e9dd1597c6daac5dc80f90e778c8230218ba8ad599f74adcc11e33b9d61b + languageName: node + linkType: hard + +"read-package-json-fast@npm:^3.0.0, read-package-json-fast@npm:^3.0.2": + version: 3.0.2 + resolution: "read-package-json-fast@npm:3.0.2" + dependencies: + json-parse-even-better-errors: ^3.0.0 + npm-normalize-package-bin: ^3.0.0 + checksum: 8d406869f045f1d76e2a99865a8fd1c1af9c1dc06200b94d2b07eef87ed734b22703a8d72e1cd36ea36cc48e22020bdd187f88243c7dd0563f72114d38c17072 + languageName: node + linkType: hard + +"read-pkg-up@npm:^7.0.1": + version: 7.0.1 + resolution: "read-pkg-up@npm:7.0.1" + dependencies: + find-up: ^4.1.0 + read-pkg: ^5.2.0 + type-fest: ^0.8.1 + checksum: e4e93ce70e5905b490ca8f883eb9e48b5d3cebc6cd4527c25a0d8f3ae2903bd4121c5ab9c5a3e217ada0141098eeb661313c86fa008524b089b8ed0b7f165e44 + languageName: node + linkType: hard + +"read-pkg@npm:^5.2.0": + version: 5.2.0 + resolution: "read-pkg@npm:5.2.0" + dependencies: + "@types/normalize-package-data": ^2.4.0 + normalize-package-data: ^2.5.0 + parse-json: ^5.0.0 + type-fest: ^0.6.0 + checksum: eb696e60528b29aebe10e499ba93f44991908c57d70f2d26f369e46b8b9afc208ef11b4ba64f67630f31df8b6872129e0a8933c8c53b7b4daf0eace536901222 + languageName: node + linkType: hard + +"readable-stream@npm:2.2.9": + version: 2.2.9 + resolution: "readable-stream@npm:2.2.9" + dependencies: + buffer-shims: ~1.0.0 + core-util-is: ~1.0.0 + inherits: ~2.0.1 + isarray: ~1.0.0 + process-nextick-args: ~1.0.6 + string_decoder: ~1.0.0 + util-deprecate: ~1.0.1 + checksum: d186b7051c4a25b769fa158d1025da83dfb0052f8b0889df40e8e942d05b4d0d37470c49cfd73cce886db66d1a8cd5ec5e2ce97857894587d8158da5ed93baa7 + languageName: node + linkType: hard + +"readable-stream@npm:^2.0.2, readable-stream@npm:~2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + 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 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 + languageName: node + linkType: hard + +"readable-stream@npm:^3.0.2, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.5.0, readable-stream@npm:^3.6.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d + languageName: node + linkType: hard + +"readable-stream@npm:~1.0.17, readable-stream@npm:~1.0.27-1": + version: 1.0.34 + resolution: "readable-stream@npm:1.0.34" + dependencies: + core-util-is: ~1.0.0 + inherits: ~2.0.1 + isarray: 0.0.1 + string_decoder: ~0.10.x + checksum: 85042c537e4f067daa1448a7e257a201070bfec3dd2706abdbd8ebc7f3418eb4d3ed4b8e5af63e2544d69f88ab09c28d5da3c0b77dc76185fddd189a59863b60 + languageName: node + linkType: hard + +"real-require@npm:^0.1.0": + version: 0.1.0 + resolution: "real-require@npm:0.1.0" + checksum: 96745583ed4f82cd5c6a6af012fd1d3c6fc2f13ae1bcff1a3c4f8094696013a1a07c82c5aa66a403d7d4f84949fc2203bc927c7ad120caad125941ca2d7e5e8e + languageName: node + linkType: hard + +"receptacle@npm:^1.3.2": + version: 1.3.2 + resolution: "receptacle@npm:1.3.2" + dependencies: + ms: ^2.1.1 + checksum: 7c5011f19e6ddcb759c1e6756877cee3c9eb78fbd1278eca4572d75f74993f0ccdc1e5f7761de6e682dff5344ee94f7a69bc492e2e8eb81d8777774a2399ce9c + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: ^4.0.0 + strip-indent: ^3.0.0 + checksum: fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b + languageName: node + linkType: hard + +"redux-devtools-extension@npm:^2.13.9": + version: 2.13.9 + resolution: "redux-devtools-extension@npm:2.13.9" + peerDependencies: + redux: ^3.1.0 || ^4.0.0 + checksum: 603d48fd6acf3922ef373b251ab3fdbb990035e90284191047b29d25b06ea18122bc4ef01e0704ccae495acb27ab5e47b560937e98213605dd88299470025db9 + languageName: node + linkType: hard + +"redux-thunk@npm:^2.3.0, redux-thunk@npm:^2.4.2": + version: 2.4.2 + resolution: "redux-thunk@npm:2.4.2" + peerDependencies: + redux: ^4 + checksum: c7f757f6c383b8ec26152c113e20087818d18ed3edf438aaad43539e9a6b77b427ade755c9595c4a163b6ad3063adf3497e5fe6a36c68884eb1f1cfb6f049a5c + languageName: node + linkType: hard + +"redux@npm:^4.0.0, redux@npm:^4.1.1, redux@npm:^4.2.1": + version: 4.2.1 + resolution: "redux@npm:4.2.1" + dependencies: + "@babel/runtime": ^7.9.2 + checksum: f63b9060c3a1d930ae775252bb6e579b42415aee7a23c4114e21a0b4ba7ec12f0ec76936c00f546893f06e139819f0e2855e0d55ebfce34ca9c026241a6950dd + languageName: node + linkType: hard + +"reflect.getprototypeof@npm:^1.0.4": + version: 1.0.4 + resolution: "reflect.getprototypeof@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + globalthis: ^1.0.3 + which-builtin-type: ^1.1.3 + checksum: 16e2361988dbdd23274b53fb2b1b9cefeab876c3941a2543b4cadac6f989e3db3957b07a44aac46cfceb3e06e2871785ec2aac992d824f76292f3b5ee87f66f2 + languageName: node + linkType: hard + +"regenerator-runtime@npm:^0.14.0": + version: 0.14.0 + resolution: "regenerator-runtime@npm:0.14.0" + checksum: 1c977ad82a82a4412e4f639d65d22be376d3ebdd30da2c003eeafdaaacd03fc00c2320f18120007ee700900979284fc78a9f00da7fb593f6e6eeebc673fba9a3 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.0, regexp.prototype.flags@npm:^1.5.1": + version: 1.5.1 + resolution: "regexp.prototype.flags@npm:1.5.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + set-function-name: ^2.0.0 + checksum: 869edff00288442f8d7fa4c9327f91d85f3b3acf8cbbef9ea7a220345cf23e9241b6def9263d2c1ebcf3a316b0aa52ad26a43a84aa02baca3381717b3e307f47 + languageName: node + linkType: hard + +"remark-mdx@npm:^2.3.0": + version: 2.3.0 + resolution: "remark-mdx@npm:2.3.0" + dependencies: + mdast-util-mdx: ^2.0.0 + micromark-extension-mdxjs: ^1.0.0 + checksum: 98486986c5b6f6a8321eb2f3b13c70fcd5644821428c77b7bfeb5ee5d4605b9761b322b2f6b531e83883cd2d5bc7bc4623427149aee00e1eba012f538b3d5627 + languageName: node + linkType: hard + +"remark-parse@npm:^10.0.2": + version: 10.0.2 + resolution: "remark-parse@npm:10.0.2" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + unified: ^10.0.0 + checksum: 5041b4b44725f377e69986e02f8f072ae2222db5e7d3b6c80829756b842e811343ffc2069cae1f958a96bfa36104ab91a57d7d7e2f0cef521e210ab8c614d5c7 + languageName: node + linkType: hard + +"remark-stringify@npm:^10.0.3": + version: 10.0.3 + resolution: "remark-stringify@npm:10.0.3" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.0.0 + unified: ^10.0.0 + checksum: 6004e204fba672ee322c3cf0bef090e95802feedf7ef875f88b120c5e6208f1eb09c014486d5ca42a1e199c0a17ce0ed165fb248c66608458afed4bdca51dd3a + languageName: node + linkType: hard + +"remove-accents@npm:0.4.2": + version: 0.4.2 + resolution: "remove-accents@npm:0.4.2" + checksum: 84a6988555dea24115e2d1954db99509588d43fe55a1590f0b5894802776f7b488b3151c37ceb9e4f4b646f26b80b7325dcea2fae58bc3865df146e1fa606711 + languageName: node + linkType: hard + +"repeat-string@npm:^1.5.2": + version: 1.6.1 + resolution: "repeat-string@npm:1.6.1" + checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 + languageName: node + linkType: hard + +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: eee0e303adffb69be55d1a214e415cf42b7441ae858c76dfc5353148644f6fd6e698926fc4643f510d5c126d12a705e7c8ed7e38061113bdf37547ab356797ff + languageName: node + linkType: hard + +"reselect@npm:^4.1.8": + version: 4.1.8 + resolution: "reselect@npm:4.1.8" + checksum: a4ac87cedab198769a29be92bc221c32da76cfdad6911eda67b4d3e7136dca86208c3b210e31632eae31ebd2cded18596f0dd230d3ccc9e978df22f233b5583e + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: ^5.0.0 + checksum: 546e0816012d65778e580ad62b29e975a642989108d9a3c5beabfb2304192fa3c9f9146fbdfe213563c6ff51975ae41bac1d3c6e047dd9572c94863a057b4d81 + languageName: node + linkType: hard + +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf + languageName: node + linkType: hard + +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 + languageName: node + linkType: hard + +"resolve@npm:^1.10.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.22.4": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: f8a26958aa572c9b064562750b52131a37c29d072478ea32e129063e2da7f83e31f7f11e7087a18225a8561cfe8d2f0df9dbea7c9d331a897571c0a2527dbb4c + languageName: node + linkType: hard + +"resolve@npm:^2.0.0-next.4, resolve@npm:^2.0.0-next.5": + version: 2.0.0-next.5 + resolution: "resolve@npm:2.0.0-next.5" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: a73ac69a1c4bd34c56b213d91f5b17ce390688fdb4a1a96ed3025cc7e08e7bfb90b3a06fcce461780cb0b589c958afcb0080ab802c71c01a7ecc8c64feafc89f + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.22.4#~builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#~builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 5479b7d431cacd5185f8db64bfcb7286ae5e31eb299f4c4f404ad8aa6098b77599563ac4257cb2c37a42f59dfc06a1bec2bcf283bb448f319e37f0feb9a09847 + languageName: node + linkType: hard + +"resolve@patch:resolve@^2.0.0-next.4#~builtin, resolve@patch:resolve@^2.0.0-next.5#~builtin": + version: 2.0.0-next.5 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.5#~builtin::version=2.0.0-next.5&hash=c3c19d" + dependencies: + is-core-module: ^2.13.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: 064d09c1808d0c51b3d90b5d27e198e6d0c5dad0eb57065fd40803d6a20553e5398b07f76739d69cbabc12547058bec6b32106ea66622375fb0d7e8fca6a846c + languageName: node + linkType: hard + +"restore-cursor@npm:^4.0.0": + version: 4.0.0 + resolution: "restore-cursor@npm:4.0.0" + dependencies: + onetime: ^5.1.0 + signal-exit: ^3.0.2 + checksum: 5b675c5a59763bf26e604289eab35711525f11388d77f409453904e1e69c0d37ae5889295706b2c81d23bd780165084d040f9b68fffc32cc921519031c4fa4af + languageName: node + linkType: hard + +"retimer@npm:^2.0.0": + version: 2.0.0 + resolution: "retimer@npm:2.0.0" + checksum: a59c837e1b364c4ef85c19250a94c09a49c55076ec3c5c51fafa335ee89d2ac2b91b7623548c8edb1345d7515b054986e904f8429e6caefa0595c2c70be8923d + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c + languageName: node + linkType: hard + +"retry@npm:^0.13.1": + version: 0.13.1 + resolution: "retry@npm:0.13.1" + checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc + languageName: node + linkType: hard + +"rfdc@npm:^1.3.0": + version: 1.3.0 + resolution: "rfdc@npm:1.3.0" + checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32 + languageName: node + linkType: hard + +"rimraf@npm:3.0.2, rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: ^7.1.3 + bin: + rimraf: bin.js + checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 + languageName: node + linkType: hard + +"rooks@npm:^5.7.0": + version: 5.14.1 + resolution: "rooks@npm:5.14.1" + dependencies: + lodash.debounce: ^4.0.8 + raf: ^3.4.1 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 2a06382d9f674d5701e0400e04702e98ad8425ecb8f5236906b1cf87de6d77efcb446328128c92208e6357e237b3ca3e55cb717a60f097ee115cc73b1b446450 + languageName: node + linkType: hard + +"rpc-websockets@npm:^7.5.1": + version: 7.6.0 + resolution: "rpc-websockets@npm:7.6.0" + dependencies: + "@babel/runtime": ^7.17.2 + bufferutil: ^4.0.1 + eventemitter3: ^4.0.7 + utf-8-validate: ^5.0.2 + uuid: ^8.3.2 + ws: ^8.5.0 + dependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: af2b254f65985610bd354e8e13de07b5a36010b94672b0b5a9d226b9bb1b8b17d01c63221cad97263845888f3610e55867a32e4c0017dfb92fddf89417c4cb6c + languageName: node + linkType: hard + +"run-applescript@npm:^5.0.0": + version: 5.0.0 + resolution: "run-applescript@npm:5.0.0" + dependencies: + execa: ^5.0.0 + checksum: d00c2dbfa5b2d774de7451194b8b125f40f65fc183de7d9dcae97f57f59433586d3c39b9001e111c38bfa24c3436c99df1bb4066a2a0c90d39a8c4cd6889af77 + languageName: node + linkType: hard + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + languageName: node + linkType: hard + +"rxjs@npm:^6.6.3": + version: 6.6.7 + resolution: "rxjs@npm:6.6.7" + dependencies: + tslib: ^1.9.0 + checksum: bc334edef1bb8bbf56590b0b25734ba0deaf8825b703256a93714308ea36dff8a11d25533671adf8e104e5e8f256aa6fdfe39b2e248cdbd7a5f90c260acbbd1b + languageName: node + linkType: hard + +"rxjs@npm:^7.0.0, rxjs@npm:^7.8.0": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" + dependencies: + tslib: ^2.1.0 + checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 + languageName: node + linkType: hard + +"sade@npm:^1.7.3": + version: 1.8.1 + resolution: "sade@npm:1.8.1" + dependencies: + mri: ^1.1.0 + checksum: 0756e5b04c51ccdc8221ebffd1548d0ce5a783a44a0fa9017a026659b97d632913e78f7dca59f2496aa996a0be0b0c322afd87ca72ccd909406f49dbffa0f45d + languageName: node + linkType: hard + +"safe-array-concat@npm:^1.0.1": + version: 1.0.1 + resolution: "safe-array-concat@npm:1.0.1" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + has-symbols: ^1.0.3 + isarray: ^2.0.5 + checksum: 001ecf1d8af398251cbfabaf30ed66e3855127fbceee178179524b24160b49d15442f94ed6c0db0b2e796da76bb05b73bf3cc241490ec9c2b741b41d33058581 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 + languageName: node + linkType: hard + +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": + version: 5.1.2 + resolution: "safe-buffer@npm:5.1.2" + checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c + languageName: node + linkType: hard + +"safe-json-utils@npm:^1.1.1": + version: 1.1.1 + resolution: "safe-json-utils@npm:1.1.1" + checksum: f82a5833b7f6f25583c46520b3e158da3864d4f6f85b7cd68ec956ae7023395872e834d75f7f6216c109c546d10b6ee15c066d849f75ac2a7b86b8a041b4f01f + languageName: node + linkType: hard + +"safe-regex-test@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-regex-test@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + is-regex: ^1.1.4 + checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + languageName: node + linkType: hard + +"safe-stable-stringify@npm:^2.1.0": + version: 2.4.3 + resolution: "safe-stable-stringify@npm:2.4.3" + checksum: 3aeb64449706ee1f5ad2459fc99648b131d48e7a1fbb608d7c628020177512dc9d94108a5cb61bbc953985d313d0afea6566d243237743e02870490afef04b43 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.1.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 + languageName: node + linkType: hard + +"scheduler@npm:^0.20.2": + version: 0.20.2 + resolution: "scheduler@npm:0.20.2" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + checksum: c4b35cf967c8f0d3e65753252d0f260271f81a81e427241295c5a7b783abf4ea9e905f22f815ab66676f5313be0a25f47be582254db8f9241b259213e999b8fc + languageName: node + linkType: hard + +"scriptjs@npm:^2.5.9": + version: 2.5.9 + resolution: "scriptjs@npm:2.5.9" + checksum: fc84cb6b60b6fb9aa6f1b3bc59fc94b233bd5241ed3a04233579014382b5eb60640269c87d8657902acc09f9b785ee33230c218627cea00e653564bda8f5acb6 + languageName: node + linkType: hard + +"scrypt-js@npm:3.0.1": + version: 3.0.1 + resolution: "scrypt-js@npm:3.0.1" + checksum: b7c7d1a68d6ca946f2fbb0778e0c4ec63c65501b54023b2af7d7e9f48fdb6c6580d6f7675cd53bda5944c5ebc057560d5a6365079752546865defb3b79dea454 + languageName: node + linkType: hard + +"semver@npm:2 || 3 || 4 || 5": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 + languageName: node + linkType: hard + +"semver@npm:^6.3.0, semver@npm:^6.3.1": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 + languageName: node + linkType: hard + +"semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"server@workspace:server": + version: 0.0.0-use.local + resolution: "server@workspace:server" + dependencies: + "@braintree/sanitize-url": ^6.0.4 + "@emotion/react": ^11.11.1 + "@emotion/server": ^11.4.0 + "@emotion/styled": ^11.11.0 + "@jedmao/redux-mock-store": ^3.0.5 + "@mui/icons-material": ^5.14.13 + "@mui/material": ^5.14.13 + "@pushprotocol/restapi": ^1.4.15 + "@pushprotocol/socket": ^0.5.1 + "@pushprotocol/uiweb": ^1.1.13 + "@reduxjs/toolkit": ^1.6.2 + "@testing-library/react": ^12.1.2 + "@testing-library/react-hooks": ^7.0.2 + "@types/bluebird": 3.5.34 + "@types/jest": ^29.5.5 + "@types/lodash": ^4.14.199 + "@types/lodash.merge": ^4.6.7 + "@types/node": 17.0.24 + "@types/numeral": ^2.0.2 + "@types/qs": ^6.9.8 + "@types/ramda": ^0.29.6 + "@types/react": 17.0.2 + "@types/react-cookies": ^0.1.1 + "@types/react-dom": ^17.0.2 + "@types/react-lazy-load-image-component": ^1.6.0 + "@types/react-redux": ^7.1.24 + "@uauth/js": ^2.8.0 + "@unstoppabledomains/resolution": ^8.5.0 + "@unstoppabledomains/ui-kit": ^0.3.15 + "@web3-react/core": ^8.2.2 + "@xmtp/content-type-remote-attachment": ^1.0.7 + "@xmtp/proto": ^3.27.0 + "@xmtp/xmtp-js": ^11.1.1 + bluebird: ^3.7.2 + clipboard-copy: ^4.0.1 + date-fns: ^2.16.1 + eslint-plugin-i18n-json: ^3.1.0 + filesize: ^10.0.8 + font-awesome: ^4.7.0 + hash.js: ^1.1.7 + jest: ^29.1.0 + js-base64: ^3.7.5 + lodash: ^4.17.21 + lodash.merge: ^4.6.2 + next: ^12.3.4 + next-redux-wrapper: ^6.0.2 + next-seo: ^6.1.0 + next-transpile-modules: ^10.0.0 + notistack: ^2.0.5 + numeral: ^2.0.6 + prettier: ^3.0.3 + prettier-plugin-organize-imports: ^3.2.3 + qs: ^6.11.2 + ramda: ^0.27.1 + react: 17.0.2 + react-cookies: ^0.1.1 + react-dom: ^17.0.2 + react-emoji-render: ^2.0.1 + react-hook-form: ^7.42.1 + react-infinite-scroll-component: ^6.1.0 + react-is-mounted-hook: ^1.1.2 + react-lazy-load-image-component: ^1.6.0 + react-medium-image-zoom: ^5.1.6 + react-qrcode-logo: ^2.8.0 + react-query: ^3.39.3 + react-redux: ^7.2.5 + react-visibility-sensor: ^5.1.1 + redux: ^4.1.1 + redux-devtools-extension: ^2.13.9 + redux-thunk: ^2.3.0 + rooks: ^5.7.0 + styled-components: ^5.3.5 + swiper: 6.8.4 + title-case: ^3.0.3 + truncate-eth-address: ^1.0.2 + tss-react: ^4.0.0 + typescript: 5.0.4 + wagmi: ^1.4.4 + web3.storage: ^4.5.5 + languageName: unknown + linkType: soft + +"set-blocking@npm:^2.0.0": + version: 2.0.0 + resolution: "set-blocking@npm:2.0.0" + checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.0, set-function-name@npm:^2.0.1": + version: 2.0.1 + resolution: "set-function-name@npm:2.0.1" + dependencies: + define-data-property: ^1.0.1 + functions-have-names: ^1.2.3 + has-property-descriptors: ^1.0.0 + checksum: 4975d17d90c40168eee2c7c9c59d023429f0a1690a89d75656306481ece0c3c1fb1ebcc0150ea546d1913e35fbd037bace91372c69e543e51fc5d1f31a9fa126 + languageName: node + linkType: hard + +"sha.js@npm:^2.4.11": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + bin: + sha.js: ./bin.js + checksum: ebd3f59d4b799000699097dadb831c8e3da3eb579144fd7eb7a19484cbcbb7aca3c68ba2bb362242eb09e33217de3b4ea56e4678184c334323eca24a58e3ad07 + languageName: node + linkType: hard + +"shallowequal@npm:^1.1.0": + version: 1.1.0 + resolution: "shallowequal@npm:1.1.0" + checksum: f4c1de0837f106d2dbbfd5d0720a5d059d1c66b42b580965c8f06bb1db684be8783538b684092648c981294bf817869f743a066538771dbecb293df78f765e00 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: ^3.0.0 + checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 + languageName: node + linkType: hard + +"shell-quote@npm:^1.7.3": + version: 1.8.1 + resolution: "shell-quote@npm:1.8.1" + checksum: 5f01201f4ef504d4c6a9d0d283fa17075f6770bfbe4c5850b074974c68062f37929ca61700d95ad2ac8822e14e8c4b990ca0e6e9272e64befd74ce5e19f0736b + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.4 + resolution: "side-channel@npm:1.0.4" + dependencies: + call-bind: ^1.0.0 + get-intrinsic: ^1.0.2 + object-inspect: ^1.9.0 + checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 + languageName: node + linkType: hard + +"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": + version: 3.0.7 + resolution: "signal-exit@npm:3.0.7" + checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 + languageName: node + linkType: hard + +"simple-peer@npm:^9.11.1": + version: 9.11.1 + resolution: "simple-peer@npm:9.11.1" + dependencies: + buffer: ^6.0.3 + debug: ^4.3.2 + err-code: ^3.0.1 + get-browser-rtc: ^1.1.0 + queue-microtask: ^1.2.3 + randombytes: ^2.1.0 + readable-stream: ^3.6.0 + checksum: 1d9950851f86ff827cfd6646620503143b840c751eb6bfffffbee6e69ebc065dd5b7cfa629010f9a3e1a98312549a6411ef15ce3652a523c8cc042052192fa55 + languageName: node + linkType: hard + +"sisteransi@npm:^1.0.5": + version: 1.0.5 + resolution: "sisteransi@npm:1.0.5" + checksum: aba6438f46d2bfcef94cf112c835ab395172c75f67453fe05c340c770d3c402363018ae1ab4172a1026a90c47eaccf3af7b6ff6fa749a680c2929bd7fa2b37a4 + languageName: node + linkType: hard + +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c + languageName: node + linkType: hard + +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: ^6.0.0 + is-fullwidth-code-point: ^4.0.0 + checksum: 7e600a2a55e333a21ef5214b987c8358fe28bfb03c2867ff2cbf919d62143d1812ac27b4297a077fdaf27a03da3678e49551c93e35f9498a3d90221908a1180e + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b + languageName: node + linkType: hard + +"socket.io-client@npm:^4.5.2": + version: 4.7.2 + resolution: "socket.io-client@npm:4.7.2" + dependencies: + "@socket.io/component-emitter": ~3.1.0 + debug: ~4.3.2 + engine.io-client: ~6.5.2 + socket.io-parser: ~4.2.4 + checksum: 8f0ab6b623e014d889bae0cd847ef7826658e8f131bd9367ee5ae4404bb52a6d7b1755b8fbe8e68799b60e92149370a732b381f913b155e40094facb135cd088 + languageName: node + linkType: hard + +"socket.io-parser@npm:~4.2.4": + version: 4.2.4 + resolution: "socket.io-parser@npm:4.2.4" + dependencies: + "@socket.io/component-emitter": ~3.1.0 + debug: ~4.3.1 + checksum: 61540ef99af33e6a562b9effe0fad769bcb7ec6a301aba5a64b3a8bccb611a0abdbe25f469933ab80072582006a78ca136bf0ad8adff9c77c9953581285e2263 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^7.0.0": + version: 7.0.0 + resolution: "socks-proxy-agent@npm:7.0.0" + dependencies: + agent-base: ^6.0.2 + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 + languageName: node + linkType: hard + +"socks@npm:^2.6.2": + version: 2.7.1 + resolution: "socks@npm:2.7.1" + dependencies: + ip: ^2.0.0 + smart-buffer: ^4.2.0 + checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 + languageName: node + linkType: hard + +"sonic-boom@npm:^2.2.1": + version: 2.8.0 + resolution: "sonic-boom@npm:2.8.0" + dependencies: + atomic-sleep: ^1.0.0 + checksum: c7f9c89f931d7f60f8e0741551a729f0d81e6dc407a99420fc847a9a4c25af048a615b1188ab3c4f1fb3708fe4904973ddab6ebcc8ed5b78b50ab81a99045910 + languageName: node + linkType: hard + +"sort-object-keys@npm:^1.1.3": + version: 1.1.3 + resolution: "sort-object-keys@npm:1.1.3" + checksum: abea944d6722a1710a1aa6e4f9509da085d93d5fc0db23947cb411eedc7731f80022ce8fa68ed83a53dd2ac7441fcf72a3f38c09b3d9bbc4ff80546aa2e151ad + languageName: node + linkType: hard + +"sort-package-json@npm:1.57.0": + version: 1.57.0 + resolution: "sort-package-json@npm:1.57.0" + dependencies: + detect-indent: ^6.0.0 + detect-newline: 3.1.0 + git-hooks-list: 1.0.3 + globby: 10.0.0 + is-plain-obj: 2.1.0 + sort-object-keys: ^1.1.3 + bin: + sort-package-json: cli.js + checksum: 15758ba6b1033ae136863eabd4b8c8a28e79dd68b71327f6803c2ea740dc149dc9ad708b006d07ee9de56b6dc7cadb7c697801ad50c01348aa91022c6ff6e21d + languageName: node + linkType: hard + +"source-map-js@npm:^1.0.2": + version: 1.0.2 + resolution: "source-map-js@npm:1.0.2" + checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c + languageName: node + linkType: hard + +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 + languageName: node + linkType: hard + +"source-map@npm:^0.5.0, source-map@npm:^0.5.7": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d + languageName: node + linkType: hard + +"source-map@npm:^0.6.0, source-map@npm:^0.6.1": + version: 0.6.1 + resolution: "source-map@npm:0.6.1" + checksum: 59ce8640cf3f3124f64ac289012c2b8bd377c238e316fb323ea22fbfe83da07d81e000071d7242cad7a23cd91c7de98e4df8830ec3f133cb6133a5f6e9f67bc2 + languageName: node + linkType: hard + +"sparse-array@npm:^1.3.1": + version: 1.3.2 + resolution: "sparse-array@npm:1.3.2" + checksum: 3b41741cfc29c568b09cbc0205fc613c16daebde358d9356b80d53d63e739012617e7e038be3c77a493ec007927784b9e0a0531cb76cf91d4f8cc7029391039b + languageName: node + linkType: hard + +"spawn-command@npm:^0.0.2-1": + version: 0.0.2-1 + resolution: "spawn-command@npm:0.0.2-1" + checksum: 2cac8519332193d1ed37d57298c4a1f73095e9edd20440fbab4aa47f531da83831734f2b51c44bb42b2747bf3485dec3fa2b0a1003f74c67561f2636622e328b + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: ^3.0.0 + spdx-license-ids: ^3.0.0 + checksum: e9ae98d22f69c88e7aff5b8778dc01c361ef635580e82d29e5c60a6533cc8f4d820803e67d7432581af0cc4fb49973125076ee3b90df191d153e223c004193b2 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.3.0 + resolution: "spdx-exceptions@npm:2.3.0" + checksum: cb69a26fa3b46305637123cd37c85f75610e8c477b6476fa7354eb67c08128d159f1d36715f19be6f9daf4b680337deb8c65acdcae7f2608ba51931540687ac0 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: ^2.1.0 + spdx-license-ids: ^3.0.0 + checksum: a1c6e104a2cbada7a593eaa9f430bd5e148ef5290d4c0409899855ce8b1c39652bcc88a725259491a82601159d6dc790bedefc9016c7472f7de8de7361f8ccde + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.16 + resolution: "spdx-license-ids@npm:3.0.16" + checksum: 5cdaa85aaa24bd02f9353a2e357b4df0a4f205cb35655f3fd0a5674a4fb77081f28ffd425379214bc3be2c2b7593ce1215df6bcc75884aeee0a9811207feabe2 + languageName: node + linkType: hard + +"split-on-first@npm:^1.0.0": + version: 1.1.0 + resolution: "split-on-first@npm:1.1.0" + checksum: 16ff85b54ddcf17f9147210a4022529b343edbcbea4ce977c8f30e38408b8d6e0f25f92cd35b86a524d4797f455e29ab89eb8db787f3c10708e0b47ebf528d30 + languageName: node + linkType: hard + +"split2@npm:^4.0.0": + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: 05d54102546549fe4d2455900699056580cca006c0275c334611420f854da30ac999230857a85fdd9914dc2109ae50f80fda43d2a445f2aa86eccdc1dfce779d + languageName: node + linkType: hard + +"split@npm:1.0.0": + version: 1.0.0 + resolution: "split@npm:1.0.0" + dependencies: + through: 2 + checksum: 84837fa659662fab703efb41f5e3b3c4ae7de605555b6ce53c4fadb2a30b7cc7c8c005f905e6cb16e527ebb4117b6c2da1fe09c1caa150bdaf24df0dff8bf5d3 + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 19d79aec211f09b99ec3099b5b2ae2f6e9cdefe50bc91ac4c69144b6d3928a640bb6ae5b3def70c2e85a2c3d9f5ec2719921e3a59d3ca3ef4b2fd1a4656a0df3 + languageName: node + linkType: hard + +"ssr-window@npm:^3.0.0, ssr-window@npm:^3.0.0-alpha.1": + version: 3.0.0 + resolution: "ssr-window@npm:3.0.0" + checksum: e619db7437874c89d2f4cea94ca8cbdfb4eed9f20d86fa193c29a17829c26d7ceefae344ac1699cc24ebb8d397fd0937a1043b5177a140c2504c9fda58bb5652 + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.5 + resolution: "ssri@npm:10.0.5" + dependencies: + minipass: ^7.0.3 + checksum: 0a31b65f21872dea1ed3f7c200d7bc1c1b91c15e419deca14f282508ba917cbb342c08a6814c7f68ca4ca4116dd1a85da2bbf39227480e50125a1ceffeecb750 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.3": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: ^2.0.0 + checksum: 052bf4d25bbf5f78e06c1d5e67de2e088b06871fa04107ca8d3f0e9d9263326e2942c8bedee3545795fc77d787d443a538345eef74db2f8e35db3558c6f91ff7 + languageName: node + linkType: hard + +"stop-iteration-iterator@npm:^1.0.0": + version: 1.0.0 + resolution: "stop-iteration-iterator@npm:1.0.0" + dependencies: + internal-slot: ^1.0.4 + checksum: d04173690b2efa40e24ab70e5e51a3ff31d56d699550cfad084104ab3381390daccb36652b25755e420245f3b0737de66c1879eaa2a8d4fc0a78f9bf892fcb42 + languageName: node + linkType: hard + +"stream-browserify@npm:^3.0.0": + version: 3.0.0 + resolution: "stream-browserify@npm:3.0.0" + dependencies: + inherits: ~2.0.4 + readable-stream: ^3.5.0 + checksum: 4c47ef64d6f03815a9ca3874e2319805e8e8a85f3550776c47ce523b6f4c6cd57f40e46ec6a9ab8ad260fde61863c2718f250d3bedb3fe9052444eb9abfd9921 + languageName: node + linkType: hard + +"stream-shift@npm:^1.0.0": + version: 1.0.1 + resolution: "stream-shift@npm:1.0.1" + checksum: 59b82b44b29ec3699b5519a49b3cedcc6db58c72fb40c04e005525dfdcab1c75c4e0c180b923c380f204bed78211b9bad8faecc7b93dece4d004c3f6ec75737b + languageName: node + linkType: hard + +"stream-to-it@npm:^0.2.2, stream-to-it@npm:^0.2.3": + version: 0.2.4 + resolution: "stream-to-it@npm:0.2.4" + dependencies: + get-iterator: ^1.0.2 + checksum: 0725dd8ddb889829cab70b81a883d5a09cd34272ccd44fad195de9fb900a8588fbf801490b6418ae5e234c128743ad829c50cfcd6686fab3b50bb6e76d59238c + languageName: node + linkType: hard + +"streaming-iterables@npm:^6.0.0, streaming-iterables@npm:^6.2.0": + version: 6.2.0 + resolution: "streaming-iterables@npm:6.2.0" + checksum: 1fb3c6833cbb028bf60f0de9b43e54d5940e4702868ad0016567cac7ecf9675572e05af86c723f5e172b57a2c913fea0289be6f44bea7747b71e4a398b7174da + languageName: node + linkType: hard + +"strict-uri-encode@npm:^2.0.0": + version: 2.0.0 + resolution: "strict-uri-encode@npm:2.0.0" + checksum: eaac4cf978b6fbd480f1092cab8b233c9b949bcabfc9b598dd79a758f7243c28765ef7639c876fa72940dac687181b35486ea01ff7df3e65ce3848c64822c581 + languageName: node + linkType: hard + +"string-argv@npm:0.3.2": + version: 0.3.2 + resolution: "string-argv@npm:0.3.2" + checksum: 8703ad3f3db0b2641ed2adbb15cf24d3945070d9a751f9e74a924966db9f325ac755169007233e8985a39a6a292f14d4fee20482989b89b96e473c4221508a0f + languageName: node + linkType: hard + +"string-length@npm:^4.0.1": + version: 4.0.2 + resolution: "string-length@npm:4.0.2" + dependencies: + char-regex: ^1.0.2 + strip-ansi: ^6.0.0 + checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + languageName: node + linkType: hard + +"string-replace-to-array@npm:^1.0.1": + version: 1.0.3 + resolution: "string-replace-to-array@npm:1.0.3" + dependencies: + invariant: ^2.2.1 + lodash.flatten: ^4.2.0 + lodash.isstring: ^4.0.1 + checksum: f0da1bf239934739471166cd34d5003b386f660db40cc1c6842eae4f250656b80ffc5983bdef344f934fc897d1df4ae6efff9ce43a663a6ab450d53b618a83c6 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + +"string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: ^0.2.0 + emoji-regex: ^9.2.2 + strip-ansi: ^7.0.1 + checksum: 7369deaa29f21dda9a438686154b62c2c5f661f8dda60449088f9f980196f7908fc39fdd1803e3e01541970287cf5deae336798337e9319a7055af89dafa7193 + languageName: node + linkType: hard + +"string.prototype.matchall@npm:^4.0.8": + version: 4.0.10 + resolution: "string.prototype.matchall@npm:4.0.10" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + get-intrinsic: ^1.2.1 + has-symbols: ^1.0.3 + internal-slot: ^1.0.5 + regexp.prototype.flags: ^1.5.0 + set-function-name: ^2.0.0 + side-channel: ^1.0.4 + checksum: 3c78bdeff39360c8e435d7c4c6ea19f454aa7a63eda95fa6fadc3a5b984446a2f9f2c02d5c94171ce22268a573524263fbd0c8edbe3ce2e9890d7cc036cdc3ed + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.8": + version: 1.2.8 + resolution: "string.prototype.trim@npm:1.2.8" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 49eb1a862a53aba73c3fb6c2a53f5463173cb1f4512374b623bcd6b43ad49dd559a06fb5789bdec771a40fc4d2a564411c0a75d35fb27e76bbe738c211ecff07 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.7": + version: 1.0.7 + resolution: "string.prototype.trimend@npm:1.0.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 2375516272fd1ba75992f4c4aa88a7b5f3c7a9ca308d963bcd5645adf689eba6f8a04ebab80c33e30ec0aefc6554181a3a8416015c38da0aa118e60ec896310c + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.7": + version: 1.0.7 + resolution: "string.prototype.trimstart@npm:1.0.7" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.2.0 + es-abstract: ^1.22.1 + checksum: 13d0c2cb0d5ff9e926fa0bec559158b062eed2b68cd5be777ffba782c96b2b492944e47057274e064549b94dd27cf81f48b27a31fee8af5b574cff253e7eb613 + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: ~5.2.0 + checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 + languageName: node + linkType: hard + +"string_decoder@npm:~0.10.x": + version: 0.10.31 + resolution: "string_decoder@npm:0.10.31" + checksum: fe00f8e303647e5db919948ccb5ce0da7dea209ab54702894dd0c664edd98e5d4df4b80d6fabf7b9e92b237359d21136c95bf068b2f7760b772ca974ba970202 + languageName: node + linkType: hard + +"string_decoder@npm:~1.0.0": + version: 1.0.3 + resolution: "string_decoder@npm:1.0.3" + dependencies: + safe-buffer: ~5.1.0 + checksum: 57ef02a148fd1ff2f20fe1accd944505ed3703e78bb28d302d940b2ad3dfb469508f79dcd0275ba1960d9675aa206452f76b2416059a6d0b0200bd7e9f552cdb + languageName: node + linkType: hard + +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: ~5.1.0 + checksum: 9ab7e56f9d60a28f2be697419917c50cac19f3e8e6c28ef26ed5f4852289fe0de5d6997d29becf59028556f2c62983790c1d9ba1e2a3cc401768ca12d5183a5b + languageName: node + linkType: hard + +"stringify-entities@npm:^4.0.0": + version: 4.0.3 + resolution: "stringify-entities@npm:4.0.3" + dependencies: + character-entities-html4: ^2.0.0 + character-entities-legacy: ^3.0.0 + checksum: 59e8f523b403bf7d415690e72ae52982decd6ea5426bd8b3f5c66225ddde73e766c0c0d91627df082d0794e30b19dd907ffb5864cef3602e4098d6777d7ca3c2 + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + +"strip-ansi@npm:^3.0.0": + version: 3.0.1 + resolution: "strip-ansi@npm:3.0.1" + dependencies: + ansi-regex: ^2.0.0 + checksum: 9b974de611ce5075c70629c00fa98c46144043db92ae17748fb780f706f7a789e9989fd10597b7c2053ae8d1513fd707816a91f1879b2f71e6ac0b6a863db465 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: ^6.0.1 + checksum: 859c73fcf27869c22a4e4d8c6acfe690064659e84bef9458aa6d13719d09ca88dcfd40cbf31fd0be63518ea1a643fe070b4827d353e09533a5b0b9fd4553d64d + languageName: node + linkType: hard + +"strip-ansi@npm:~0.1.0": + version: 0.1.1 + resolution: "strip-ansi@npm:0.1.1" + bin: + strip-ansi: cli.js + checksum: 31f1d4d3b86e6d968aa568bf47d712626dd748aff7d576a98ba2ed378dd60dfb1475898254b62479779231e50a38f0b7ea0b66d3b22d14cde38b769c1c747d33 + languageName: node + linkType: hard + +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + languageName: node + linkType: hard + +"strip-bom@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-bom@npm:4.0.0" + checksum: 9dbcfbaf503c57c06af15fe2c8176fb1bf3af5ff65003851a102749f875a6dbe0ab3b30115eccf6e805e9d756830d3e40ec508b62b3f1ddf3761a20ebe29d3f3 + languageName: node + linkType: hard + +"strip-final-newline@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-final-newline@npm:2.0.0" + checksum: 69412b5e25731e1938184b5d489c32e340605bb611d6140344abc3421b7f3c6f9984b21dff296dfcf056681b82caa3bb4cc996a965ce37bcfad663e92eae9c64 + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 + languageName: node + linkType: hard + +"strip-hex-prefix@npm:1.0.0": + version: 1.0.0 + resolution: "strip-hex-prefix@npm:1.0.0" + dependencies: + is-hex-prefixed: 1.0.0 + checksum: 4cafe7caee1d281d3694d14920fd5d3c11adf09371cef7e2ccedd5b83efd9e9bd2219b5d6ce6e809df6e0f437dc9d30db1192116580875698aad164a6d6b285b + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: ^1.0.0 + checksum: 18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 + languageName: node + linkType: hard + +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + +"style-to-js@npm:1.1.1": + version: 1.1.1 + resolution: "style-to-js@npm:1.1.1" + dependencies: + style-to-object: 0.3.0 + checksum: 91b9742af9fc389118e5c3f39a95cbebe1a456b65530aba7595e789783d015aab4bbbf4bc3e0998c41ce7c46661f1244aeffd9e7c407ad8ac928e2ba2be37aa0 + languageName: node + linkType: hard + +"style-to-object@npm:0.3.0": + version: 0.3.0 + resolution: "style-to-object@npm:0.3.0" + dependencies: + inline-style-parser: 0.1.1 + checksum: 4d7084015207f2a606dfc10c29cb5ba569f2fe8005551df7396110dd694d6ff650f2debafa95bd5d147dfb4ca50f57868e2a7f91bf5d11ef734fe7ccbd7abf59 + languageName: node + linkType: hard + +"styled-components@npm:^5.3.5": + version: 5.3.11 + resolution: "styled-components@npm:5.3.11" + dependencies: + "@babel/helper-module-imports": ^7.0.0 + "@babel/traverse": ^7.4.5 + "@emotion/is-prop-valid": ^1.1.0 + "@emotion/stylis": ^0.8.4 + "@emotion/unitless": ^0.7.4 + babel-plugin-styled-components: ">= 1.12.0" + css-to-react-native: ^3.0.0 + hoist-non-react-statics: ^3.0.0 + shallowequal: ^1.1.0 + supports-color: ^5.5.0 + peerDependencies: + react: ">= 16.8.0" + react-dom: ">= 16.8.0" + react-is: ">= 16.8.0" + checksum: 10edd4dae3b0231ec02d86bdd09c88e894eedfa7e9d4f8e562b09fb69c67a27d586cbcf35c785002d59b3bf11e6c0940b0efce40d13ae9ed148b26b1dc8f3284 + languageName: node + linkType: hard + +"styled-jsx@npm:5.0.7": + version: 5.0.7 + resolution: "styled-jsx@npm:5.0.7" + peerDependencies: + react: ">= 16.8.0 || 17.x.x || ^18.0.0-0" + peerDependenciesMeta: + "@babel/core": + optional: true + babel-plugin-macros: + optional: true + checksum: 61959993915f4b1662a682dbbefb3512de9399cf6901969bcadd26ba5441d2b5ca5c1021b233bbd573da2541b41efb45d56c6f618dbc8d88a381ebc62461fefe + languageName: node + linkType: hard + +"stylis@npm:4.2.0": + version: 4.2.0 + resolution: "stylis@npm:4.2.0" + checksum: 0eb6cc1b866dc17a6037d0a82ac7fa877eba6a757443e79e7c4f35bacedbf6421fadcab4363b39667b43355cbaaa570a3cde850f776498e5450f32ed2f9b7584 + languageName: node + linkType: hard + +"superstruct@npm:^0.14.2": + version: 0.14.2 + resolution: "superstruct@npm:0.14.2" + checksum: c5c4840f432da82125b923ec45faca5113217e83ae416e314d80eae012b8bb603d2e745025d173450758d116348820bc7028157f8c9a72b6beae879f94b837c0 + languageName: node + linkType: hard + +"superstruct@npm:^1.0.3": + version: 1.0.3 + resolution: "superstruct@npm:1.0.3" + checksum: 761790bb111e6e21ddd608299c252f3be35df543263a7ebbc004e840d01fcf8046794c274bcb351bdf3eae4600f79d317d085cdbb19ca05803a4361840cc9bb1 + languageName: node + linkType: hard + +"supports-color@npm:^2.0.0": + version: 2.0.0 + resolution: "supports-color@npm:2.0.0" + checksum: 602538c5812b9006404370b5a4b885d3e2a1f6567d314f8b4a41974ffe7d08e525bf92ae0f9c7030e3b4c78e4e34ace55d6a67a74f1571bc205959f5972f88f0 + languageName: node + linkType: hard + +"supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: ^3.0.0 + checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: ^4.0.0 + checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a + languageName: node + linkType: hard + +"supports-color@npm:^8.0.0, supports-color@npm:^8.1.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + +"supports-color@npm:^9.0.0": + version: 9.4.0 + resolution: "supports-color@npm:9.4.0" + checksum: cb8ff8daeaf1db642156f69a9aa545b6c01dd9c4def4f90a49f46cbf24be0c245d392fcf37acd119cd1819b99dad2cc9b7e3260813f64bcfd7f5b18b5a1eefb8 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae + languageName: node + linkType: hard + +"swiper@npm:6.8.4": + version: 6.8.4 + resolution: "swiper@npm:6.8.4" + dependencies: + dom7: ^3.0.0 + ssr-window: ^3.0.0 + checksum: 613239e71135b48378453a74abed9a33d56f147e704e3803f5ea960dbf9833a93e557ef0b75e7c2849328eb1b48fafab54f7ac5b88e8c3727283536c7740b13f + languageName: node + linkType: hard + +"synckit@npm:^0.8.5": + version: 0.8.5 + resolution: "synckit@npm:0.8.5" + dependencies: + "@pkgr/utils": ^2.3.1 + tslib: ^2.5.0 + checksum: 8a9560e5d8f3d94dc3cf5f7b9c83490ffa30d320093560a37b88f59483040771fd1750e76b9939abfbb1b5a23fd6dfbae77f6b338abffe7cae7329cd9b9bb86b + languageName: node + linkType: hard + +"tap-out@npm:^2.1.0": + version: 2.1.0 + resolution: "tap-out@npm:2.1.0" + dependencies: + re-emitter: 1.1.3 + readable-stream: 2.2.9 + split: 1.0.0 + trim: 0.0.1 + bin: + tap-out: bin/cmd.js + checksum: b837d8adf646bf06f73a9306a9796a3201c55598c2c70045a2908d044fc2cc9466d52d27a7705c92a2c6ea37d560a84d135f4112bd377346f34d381ed836088b + languageName: node + linkType: hard + +"tap-spec@npm:^5.0.0": + version: 5.0.0 + resolution: "tap-spec@npm:5.0.0" + dependencies: + chalk: ^1.0.0 + duplexer: ^0.1.1 + figures: ^1.4.0 + lodash: ^4.17.10 + pretty-ms: ^2.1.0 + repeat-string: ^1.5.2 + tap-out: ^2.1.0 + through2: ^2.0.0 + bin: + tap-spec: bin/cmd.js + tspec: bin/cmd.js + checksum: 4413acc3ed4b8662b64439ad5be65a4d42edb2f3c5dc273b8ee563f9e7bfdde347e53c92de628a04ab640dda3cd8aea8aeb3ee7aa86bde8118d0584ffd76b788 + languageName: node + linkType: hard + +"tapable@npm:^2.2.0": + version: 2.2.1 + resolution: "tapable@npm:2.2.1" + checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 + languageName: node + linkType: hard + +"tape@npm:^5.5.3": + version: 5.7.1 + resolution: "tape@npm:5.7.1" + dependencies: + "@ljharb/resumer": ^0.0.1 + "@ljharb/through": ^2.3.11 + array.prototype.every: ^1.1.5 + call-bind: ^1.0.2 + deep-equal: ^2.2.2 + defined: ^1.0.1 + dotignore: ^0.1.2 + for-each: ^0.3.3 + get-package-type: ^0.1.0 + glob: ^7.2.3 + has: ^1.0.3 + has-dynamic-import: ^2.0.1 + inherits: ^2.0.4 + is-regex: ^1.1.4 + minimist: ^1.2.8 + mock-property: ^1.0.0 + object-inspect: ^1.12.3 + object-is: ^1.1.5 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + resolve: ^2.0.0-next.5 + string.prototype.trim: ^1.2.8 + bin: + tape: bin/tape + checksum: abba6c5d83d6cba58ab5e0233dc8d68a9414a6d750401a8124da1622cb797cb96b5d68edc3d166984c6926affec33a4aa4782da7c64665f3d531e605769ad72f + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.1.2": + version: 6.2.0 + resolution: "tar@npm:6.2.0" + dependencies: + chownr: ^2.0.0 + fs-minipass: ^2.0.0 + minipass: ^5.0.0 + minizlib: ^2.1.1 + mkdirp: ^1.0.3 + yallist: ^4.0.0 + checksum: db4d9fe74a2082c3a5016630092c54c8375ff3b280186938cfd104f2e089c4fd9bad58688ef6be9cf186a889671bf355c7cda38f09bbf60604b281715ca57f5c + languageName: node + linkType: hard + +"test-exclude@npm:^6.0.0": + version: 6.0.0 + resolution: "test-exclude@npm:6.0.0" + dependencies: + "@istanbuljs/schema": ^0.1.2 + glob: ^7.1.4 + minimatch: ^3.0.4 + checksum: 3b34a3d77165a2cb82b34014b3aba93b1c4637a5011807557dc2f3da826c59975a5ccad765721c4648b39817e3472789f9b0fa98fc854c5c1c7a1e632aacdc28 + languageName: node + linkType: hard + +"text-encoding-utf-8@npm:^1.0.2": + version: 1.0.2 + resolution: "text-encoding-utf-8@npm:1.0.2" + checksum: ec4c15d50e738c5dba7327ad432ebf0725ec75d4d69c0bd55609254c5a3bc5341272d7003691084a0a73d60d981c8eb0e87603676fdb6f3fed60f4c9192309f9 + languageName: node + linkType: hard + +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a + languageName: node + linkType: hard + +"thread-stream@npm:^0.15.1": + version: 0.15.2 + resolution: "thread-stream@npm:0.15.2" + dependencies: + real-require: ^0.1.0 + checksum: 0547795a8f357ba1ac0dba29c71f965182e29e21752951a04a7167515ee37524bfba6c410f31e65a01a8d3e5b93400b812889aa09523e38ce4d744c894ffa6c0 + languageName: node + linkType: hard + +"throttle-debounce@npm:^2.1.0": + version: 2.3.0 + resolution: "throttle-debounce@npm:2.3.0" + checksum: 6d90aa2ddb294f8dad13d854a1cfcd88fdb757469669a096a7da10f515ee466857ac1e750649cb9da931165c6f36feb448318e7cb92570f0a3679d20e860a925 + languageName: node + linkType: hard + +"throttled-queue@npm:^2.1.2, throttled-queue@npm:^2.1.4": + version: 2.1.4 + resolution: "throttled-queue@npm:2.1.4" + checksum: 99571cb816e1c2d3df678d6fdb0a73eca9ba1f8aa9026daf89855d4c9444491d70e3aecaaad6c77b1202ab773f78e03b9a91b1e89c4983f17835b783137266c7 + languageName: node + linkType: hard + +"through2@npm:^2.0.0": + version: 2.0.5 + resolution: "through2@npm:2.0.5" + dependencies: + readable-stream: ~2.3.6 + xtend: ~4.0.1 + checksum: beb0f338aa2931e5660ec7bf3ad949e6d2e068c31f4737b9525e5201b824ac40cac6a337224856b56bd1ddd866334bbfb92a9f57cd6f66bc3f18d3d86fc0fe50 + languageName: node + linkType: hard + +"through2@npm:~0.4.1": + version: 0.4.2 + resolution: "through2@npm:0.4.2" + dependencies: + readable-stream: ~1.0.17 + xtend: ~2.1.1 + checksum: 50e41d272db4a74b10a62b7e92eeeb8d30e426a7a8a772cd85fac0f8e21d92c6e5cb5012d7db5f7a20f6e147e1f14f87062058c77b05bc9d463ae4d8b3eb1e42 + languageName: node + linkType: hard + +"through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.8": + version: 2.3.8 + resolution: "through@npm:2.3.8" + checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd + languageName: node + linkType: hard + +"timeout-abort-controller@npm:^1.1.1": + version: 1.1.1 + resolution: "timeout-abort-controller@npm:1.1.1" + dependencies: + abort-controller: ^3.0.0 + retimer: ^2.0.0 + checksum: 070c220be4cac532f8cfbffccba3497baf3abe97d4bfc62344dba832b55a2eef1f0e60f33d862a1662e14852c9ef8ae952d1d93f5626d39b6592f29d7d00bd45 + languageName: node + linkType: hard + +"timestamp-nano@npm:^1.0.0": + version: 1.0.1 + resolution: "timestamp-nano@npm:1.0.1" + checksum: cba7d5a6d805692f9a8df1a98056e5e742236bd2baccb469f8be1c64d53223326c74da29a7111718520c8b7a424394665882078cd9452725fffbf1f109fc3d6f + languageName: node + linkType: hard + +"tiny-warning@npm:^1.0.3": + version: 1.0.3 + resolution: "tiny-warning@npm:1.0.3" + checksum: da62c4acac565902f0624b123eed6dd3509bc9a8d30c06e017104bedcf5d35810da8ff72864400ad19c5c7806fc0a8323c68baf3e326af7cb7d969f846100d71 + languageName: node + linkType: hard + +"title-case@npm:^3.0.3": + version: 3.0.3 + resolution: "title-case@npm:3.0.3" + dependencies: + tslib: ^2.0.3 + checksum: e8b7ea006b53cf3208d278455d9f1e22c409459d7f9878da324fa3b18cc0aef8560924c19c744e870394a5d9cddfdbe029ebae9875909ee7f4fc562e7cbfc53e + languageName: node + linkType: hard + +"titleize@npm:^3.0.0": + version: 3.0.0 + resolution: "titleize@npm:3.0.0" + checksum: 71fbbeabbfb36ccd840559f67f21e356e1d03da2915b32d2ae1a60ddcc13a124be2739f696d2feb884983441d159a18649e8d956648d591bdad35c430a6b6d28 + languageName: node + linkType: hard + +"tmpl@npm:1.0.5": + version: 1.0.5 + resolution: "tmpl@npm:1.0.5" + checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 + languageName: node + linkType: hard + +"to-fast-properties@npm:^2.0.0": + version: 2.0.0 + resolution: "to-fast-properties@npm:2.0.0" + checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: ^7.0.0 + checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed + languageName: node + linkType: hard + +"to-vfile@npm:^7.0.0": + version: 7.2.4 + resolution: "to-vfile@npm:7.2.4" + dependencies: + is-buffer: ^2.0.0 + vfile: ^5.1.0 + checksum: 5fa9bd6c3b0dae6abc65a882bef4d899940305237449740ee803c5ef87c1df56425290009abde7d215884f481c3254d78d19120f38109217c6c066676f2e7609 + languageName: node + linkType: hard + +"toggle-selection@npm:^1.0.6": + version: 1.0.6 + resolution: "toggle-selection@npm:1.0.6" + checksum: a90dc80ed1e7b18db8f4e16e86a5574f87632dc729cfc07d9ea3ced50021ad42bb4e08f22c0913e0b98e3837b0b717e0a51613c65f30418e21eb99da6556a74c + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 + languageName: node + linkType: hard + +"tree-kill@npm:^1.2.2": + version: 1.2.2 + resolution: "tree-kill@npm:1.2.2" + bin: + tree-kill: cli.js + checksum: 49117f5f410d19c84b0464d29afb9642c863bc5ba40fcb9a245d474c6d5cc64d1b177a6e6713129eb346b40aebb9d4631d967517f9fbe8251c35b21b13cd96c7 + languageName: node + linkType: hard + +"trim-newlines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-newlines@npm:3.0.1" + checksum: b530f3fadf78e570cf3c761fb74fef655beff6b0f84b29209bac6c9622db75ad1417f4a7b5d54c96605dcd72734ad44526fef9f396807b90839449eb543c6206 + languageName: node + linkType: hard + +"trim@npm:0.0.1": + version: 0.0.1 + resolution: "trim@npm:0.0.1" + checksum: 2b4646dff99a222e8e1526edd4e3a43bbd925af0b8e837c340455d250157e7deefaa4da49bb891ab841e5c27b1afc5e9e32d4b57afb875d2dfcabf4e319b8f7f + languageName: node + linkType: hard + +"trough@npm:^2.0.0": + version: 2.1.0 + resolution: "trough@npm:2.1.0" + checksum: a577bb561c2b401cc0e1d9e188fcfcdf63b09b151ff56a668da12197fe97cac15e3d77d5b51f426ccfd94255744a9118e9e9935afe81a3644fa1be9783c82886 + languageName: node + linkType: hard + +"truncate-eth-address@npm:^1.0.2": + version: 1.0.2 + resolution: "truncate-eth-address@npm:1.0.2" + checksum: c56406753f5071e008ef67269e86f6b5c598e9a673930715b6175ad5a2708a4b39a32571ccc49b1dbd143e774a19a0a38b0bf2a5ae6e857560eae8c84140e95b + languageName: node + linkType: hard + +"ts-jest@npm:^29.1.1": + version: 29.1.1 + resolution: "ts-jest@npm:29.1.1" + dependencies: + bs-logger: 0.x + fast-json-stable-stringify: 2.x + jest-util: ^29.0.0 + json5: ^2.2.3 + lodash.memoize: 4.x + make-error: 1.x + semver: ^7.5.3 + yargs-parser: ^21.0.1 + peerDependencies: + "@babel/core": ">=7.0.0-beta.0 <8" + "@jest/types": ^29.0.0 + babel-jest: ^29.0.0 + jest: ^29.0.0 + typescript: ">=4.3 <6" + peerDependenciesMeta: + "@babel/core": + optional: true + "@jest/types": + optional: true + babel-jest: + optional: true + esbuild: + optional: true + bin: + ts-jest: cli.js + checksum: a8c9e284ed4f819526749f6e4dc6421ec666f20ab44d31b0f02b4ed979975f7580b18aea4813172d43e39b29464a71899f8893dd29b06b4a351a3af8ba47b402 + languageName: node + linkType: hard + +"ts-node@npm:^10.9.1": + version: 10.9.1 + resolution: "ts-node@npm:10.9.1" + 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 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 090adff1302ab20bd3486e6b4799e90f97726ed39e02b39e566f8ab674fd5bd5f727f43615debbfc580d33c6d9d1c6b1b3ce7d8e3cca3e20530a145ffa232c35 + languageName: node + linkType: hard + +"ts-toolbelt@npm:^9.6.0": + version: 9.6.0 + resolution: "ts-toolbelt@npm:9.6.0" + checksum: 9f35fd95d895a5d32ea9fd2e532a695b0bae6cbff6832b77292efa188a0ed1ed6e54f63f74a8920390f3d909a7a3adb20a144686372a8e78b420246a9bd3d58a + languageName: node + linkType: hard + +"tsconfig-paths@npm:^3.14.1, tsconfig-paths@npm:^3.14.2": + version: 3.14.2 + resolution: "tsconfig-paths@npm:3.14.2" + dependencies: + "@types/json5": ^0.0.29 + json5: ^1.0.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 + languageName: node + linkType: hard + +"tsconfig-paths@npm:^4.1.0": + version: 4.2.0 + resolution: "tsconfig-paths@npm:4.2.0" + dependencies: + json5: ^2.2.2 + minimist: ^1.2.6 + strip-bom: ^3.0.0 + checksum: 28c5f7bbbcabc9dabd4117e8fdc61483f6872a1c6b02a4b1c4d68c5b79d06896c3cc9547610c4c3ba64658531caa2de13ead1ea1bf321c7b53e969c4752b98c7 + languageName: node + linkType: hard + +"tslib@npm:1.14.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd + languageName: node + linkType: hard + +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:^2.6.0, tslib@npm:^2.6.1": + version: 2.6.2 + resolution: "tslib@npm:2.6.2" + checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad + languageName: node + linkType: hard + +"tss-react@npm:^4.0.0": + version: 4.9.2 + resolution: "tss-react@npm:4.9.2" + dependencies: + "@emotion/cache": "*" + "@emotion/serialize": "*" + "@emotion/utils": "*" + peerDependencies: + "@emotion/react": ^11.4.1 + "@emotion/server": ^11.4.0 + "@mui/material": ^5.0.0 + react: ^16.8.0 || ^17.0.2 || ^18.0.0 + peerDependenciesMeta: + "@emotion/server": + optional: true + "@mui/material": + optional: true + checksum: e998ba9e458601dc540e91c4cae424f2533b6edc013831a6ade8b35281cf7798e1ad1d9358a094fd57904f858f01fb80313437acc5377c914701c6ce75f3abac + languageName: node + linkType: hard + +"tsutils@npm:^3.21.0": + version: 3.21.0 + resolution: "tsutils@npm:3.21.0" + dependencies: + tslib: ^1.8.1 + peerDependencies: + typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 + languageName: node + linkType: hard + +"tus-js-client@npm:^3.1.0": + version: 3.1.1 + resolution: "tus-js-client@npm:3.1.1" + dependencies: + buffer-from: ^1.1.2 + combine-errors: ^3.0.3 + is-stream: ^2.0.0 + js-base64: ^3.7.2 + lodash.throttle: ^4.1.1 + proper-lockfile: ^4.1.2 + url-parse: ^1.5.7 + checksum: 7cb227b8d94e1f48a172f52c0cf8f0d58a7866211157788c6a8c9d7512550d21ef5ed13d074b8ffadbecc7e730273eca9f346d0ea4c89d9da60f351162a68d02 + languageName: node + linkType: hard + +"tweetnacl-util@npm:^0.15.1": + version: 0.15.1 + resolution: "tweetnacl-util@npm:0.15.1" + checksum: ae6aa8a52cdd21a95103a4cc10657d6a2040b36c7a6da7b9d3ab811c6750a2d5db77e8c36969e75fdee11f511aa2b91c552496c6e8e989b6e490e54aca2864fc + languageName: node + linkType: hard + +"tweetnacl@npm:^1.0.3": + version: 1.0.3 + resolution: "tweetnacl@npm:1.0.3" + checksum: e4a57cac188f0c53f24c7a33279e223618a2bfb5fea426231991652a13247bea06b081fd745d71291fcae0f4428d29beba1b984b1f1ce6f66b06a6d1ab90645c + languageName: node + linkType: hard + +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: ^1.2.1 + checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a + languageName: node + linkType: hard + +"type-detect@npm:4.0.8": + version: 4.0.8 + resolution: "type-detect@npm:4.0.8" + checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 + languageName: node + linkType: hard + +"type-fest@npm:^0.18.0": + version: 0.18.1 + resolution: "type-fest@npm:0.18.1" + checksum: e96dcee18abe50ec82dab6cbc4751b3a82046da54c52e3b2d035b3c519732c0b3dd7a2fa9df24efd1a38d953d8d4813c50985f215f1957ee5e4f26b0fe0da395 + languageName: node + linkType: hard + +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 + languageName: node + linkType: hard + +"type-fest@npm:^0.21.3": + version: 0.21.3 + resolution: "type-fest@npm:0.21.3" + checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 + languageName: node + linkType: hard + +"type-fest@npm:^0.6.0": + version: 0.6.0 + resolution: "type-fest@npm:0.6.0" + checksum: b2188e6e4b21557f6e92960ec496d28a51d68658018cba8b597bd3ef757721d1db309f120ae987abeeda874511d14b776157ff809f23c6d1ce8f83b9b2b7d60f + languageName: node + linkType: hard + +"type-fest@npm:^0.8.1": + version: 0.8.1 + resolution: "type-fest@npm:0.8.1" + checksum: d61c4b2eba24009033ae4500d7d818a94fd6d1b481a8111612ee141400d5f1db46f199c014766b9fa9b31a6a7374d96fc748c6d688a78a3ce5a33123839becb7 + languageName: node + linkType: hard + +"type-fest@npm:^1.0.2": + version: 1.4.0 + resolution: "type-fest@npm:1.4.0" + checksum: b011c3388665b097ae6a109a437a04d6f61d81b7357f74cbcb02246f2f5bd72b888ae33631b99871388122ba0a87f4ff1c94078e7119ff22c70e52c0ff828201 + languageName: node + linkType: hard + +"type@npm:^1.0.1": + version: 1.2.0 + resolution: "type@npm:1.2.0" + checksum: dae8c64f82c648b985caf321e9dd6e8b7f4f2e2d4f846fc6fd2c8e9dc7769382d8a52369ddbaccd59aeeceb0df7f52fb339c465be5f2e543e81e810e413451ee + languageName: node + linkType: hard + +"type@npm:^2.7.2": + version: 2.7.2 + resolution: "type@npm:2.7.2" + checksum: 0f42379a8adb67fe529add238a3e3d16699d95b42d01adfe7b9a7c5da297f5c1ba93de39265ba30ffeb37dfd0afb3fb66ae09f58d6515da442219c086219f6f4 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-buffer@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.1 + is-typed-array: ^1.1.10 + checksum: 3e0281c79b2a40cd97fe715db803884301993f4e8c18e8d79d75fd18f796e8cd203310fec8c7fdb5e6c09bedf0af4f6ab8b75eb3d3a85da69328f28a80456bd3 + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + has-proto: ^1.0.1 + is-typed-array: ^1.1.10 + checksum: b03db16458322b263d87a702ff25388293f1356326c8a678d7515767ef563ef80e1e67ce648b821ec13178dd628eb2afdc19f97001ceae7a31acf674c849af94 + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "typed-array-byte-offset@npm:1.0.0" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + has-proto: ^1.0.1 + is-typed-array: ^1.1.10 + checksum: 04f6f02d0e9a948a95fbfe0d5a70b002191fae0b8fe0fe3130a9b2336f043daf7a3dda56a31333c35a067a97e13f539949ab261ca0f3692c41603a46a94e960b + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.4": + version: 1.0.4 + resolution: "typed-array-length@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + for-each: ^0.3.3 + is-typed-array: ^1.1.9 + checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 + languageName: node + linkType: hard + +"typedarray-to-buffer@npm:3.1.5": + version: 3.1.5 + resolution: "typedarray-to-buffer@npm:3.1.5" + dependencies: + is-typedarray: ^1.0.0 + checksum: 99c11aaa8f45189fcfba6b8a4825fd684a321caa9bd7a76a27cf0c7732c174d198b99f449c52c3818107430b5f41c0ccbbfb75cb2ee3ca4a9451710986d61a60 + languageName: node + linkType: hard + +"typedarray@npm:^0.0.6": + version: 0.0.6 + resolution: "typedarray@npm:0.0.6" + checksum: 33b39f3d0e8463985eeaeeacc3cb2e28bc3dfaf2a5ed219628c0b629d5d7b810b0eb2165f9f607c34871d5daa92ba1dc69f49051cf7d578b4cbd26c340b9d1b1 + languageName: node + linkType: hard + +"types-ramda@npm:^0.29.5": + version: 0.29.5 + resolution: "types-ramda@npm:0.29.5" + dependencies: + ts-toolbelt: ^9.6.0 + checksum: 0013eec508b74ed98a3de25f9617c2f246ed387dbda084ae37d9f10c5ccac0bb0243a966e861262c918feef8322347616852abf30440a252335e50d9592590e9 + languageName: node + linkType: hard + +"typescript@npm:5.0.4": + version: 5.0.4 + resolution: "typescript@npm:5.0.4" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 + languageName: node + linkType: hard + +"typescript@patch:typescript@5.0.4#~builtin": + version: 5.0.4 + resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=b5f058" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: d26b6ba97b6d163c55dbdffd9bbb4c211667ebebc743accfeb2c8c0154aace7afd097b51165a72a5bad2cf65a4612259344ff60f8e642362aa1695c760d303ac + languageName: node + linkType: hard + +"uglify-js@npm:^3.1.4": + version: 3.17.4 + resolution: "uglify-js@npm:3.17.4" + bin: + uglifyjs: bin/uglifyjs + checksum: 7b3897df38b6fc7d7d9f4dcd658599d81aa2b1fb0d074829dd4e5290f7318dbca1f4af2f45acb833b95b1fe0ed4698662ab61b87e94328eb4c0a0d3435baf924 + languageName: node + linkType: hard + +"uint8arrays@npm:^3.0.0, uint8arrays@npm:^3.1.0": + version: 3.1.1 + resolution: "uint8arrays@npm:3.1.1" + dependencies: + multiformats: ^9.4.2 + checksum: b93b6c3f0a526b116799f3a3409bd4b5d5553eb3e73e485998ece7974742254fbc0d2f7988dd21ac86c4b974552f45d9ae9cf9cba9647e529f8eb1fdd2ed84d0 + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: ^1.0.2 + has-bigints: ^1.0.2 + has-symbols: ^1.0.3 + which-boxed-primitive: ^1.0.2 + checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 + languageName: node + linkType: hard + +"underscore@npm:~1.6.0": + version: 1.6.0 + resolution: "underscore@npm:1.6.0" + checksum: bfb837d95164077bd2751247dd9797546287c060d86c3a730f590948dbc132b426238e37df7bea28f39d3e3abf571de5b974809ee3c32d309280fed851588ef9 + languageName: node + linkType: hard + +"undici-types@npm:~5.25.1": + version: 5.25.3 + resolution: "undici-types@npm:5.25.3" + checksum: ec9d2cc36520cbd9fbe3b3b6c682a87fe5be214699e1f57d1e3d9a2cb5be422e62735f06e0067dc325fd3dd7404c697e4d479f9147dc8a804e049e29f357f2ff + languageName: node + linkType: hard + +"undici@npm:^5.8.1": + version: 5.26.3 + resolution: "undici@npm:5.26.3" + dependencies: + "@fastify/busboy": ^2.0.0 + checksum: aaa9aadb712cf80e1a9cea2377e4842670105e00abbc184a21770ea5a8b77e4e2eadc200eac62442e74a1cd3b16a840c6f73b112b9e886bd3c1a125eb22e4f21 + languageName: node + linkType: hard + +"unified-engine@npm:^10.1.0": + version: 10.1.0 + resolution: "unified-engine@npm:10.1.0" + dependencies: + "@types/concat-stream": ^2.0.0 + "@types/debug": ^4.0.0 + "@types/is-empty": ^1.0.0 + "@types/node": ^18.0.0 + "@types/unist": ^2.0.0 + concat-stream: ^2.0.0 + debug: ^4.0.0 + fault: ^2.0.0 + glob: ^8.0.0 + ignore: ^5.0.0 + is-buffer: ^2.0.0 + is-empty: ^1.0.0 + is-plain-obj: ^4.0.0 + load-plugin: ^5.0.0 + parse-json: ^6.0.0 + to-vfile: ^7.0.0 + trough: ^2.0.0 + unist-util-inspect: ^7.0.0 + vfile-message: ^3.0.0 + vfile-reporter: ^7.0.0 + vfile-statistics: ^2.0.0 + yaml: ^2.0.0 + checksum: 27f4e5cd05c70a0f8a0ffa011f20257d97d62dc1b7ced0fa3c70516f23a4e8e9b676496e94a04726c85da2783153412f526724e512ec1dddcf5af82ce39b2fd2 + languageName: node + linkType: hard + +"unified@npm:^10.0.0, unified@npm:^10.1.2": + version: 10.1.2 + resolution: "unified@npm:10.1.2" + dependencies: + "@types/unist": ^2.0.0 + bail: ^2.0.0 + extend: ^3.0.0 + is-buffer: ^2.0.0 + is-plain-obj: ^4.0.0 + trough: ^2.0.0 + vfile: ^5.0.0 + checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + +"unique-names-generator@npm:^4.7.1": + version: 4.7.1 + resolution: "unique-names-generator@npm:4.7.1" + checksum: 81b58efee72458fd0c84f54a89d731b2570305d331ce62c4156273e54ece77b6488fc6c607169f4b8f6644fa48b42aef8689dbe7e310ae2c4bafbd5c0a625354 + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + +"unist-util-inspect@npm:^7.0.0": + version: 7.0.2 + resolution: "unist-util-inspect@npm:7.0.2" + dependencies: + "@types/unist": ^2.0.0 + checksum: e8f2a3836516e5ac973d56914832fad83c2391686143008a40fa8c852eb452f04bd5a42c30ce716c52217b202328ca2f365c7f0f13e67f838603d659c39b9720 + languageName: node + linkType: hard + +"unist-util-is@npm:^5.0.0": + version: 5.2.1 + resolution: "unist-util-is@npm:5.2.1" + dependencies: + "@types/unist": ^2.0.0 + checksum: ae76fdc3d35352cd92f1bedc3a0d407c3b9c42599a52ab9141fe89bdd786b51f0ec5a2ab68b93fb532e239457cae62f7e39eaa80229e1cb94875da2eafcbe5c4 + languageName: node + linkType: hard + +"unist-util-position-from-estree@npm:^1.0.0, unist-util-position-from-estree@npm:^1.1.0": + version: 1.1.2 + resolution: "unist-util-position-from-estree@npm:1.1.2" + dependencies: + "@types/unist": ^2.0.0 + checksum: e3f4060e2a9e894c6ed63489c5a7cb58ff282e5dae9497cbc2073033ca74d6e412af4d4d342c97aea08d997c908b8bce2fe43a2062aafc2bb3f266533016588b + languageName: node + linkType: hard + +"unist-util-remove-position@npm:^4.0.0": + version: 4.0.2 + resolution: "unist-util-remove-position@npm:4.0.2" + dependencies: + "@types/unist": ^2.0.0 + unist-util-visit: ^4.0.0 + checksum: 989831da913d09a82a99ed9b47b78471b6409bde95942cde47e09da54b7736516f17e3c7e026af468684c1efcec5fb52df363381b2f9dc7fd96ce791c5a2fa4a + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^2.0.0": + version: 2.0.3 + resolution: "unist-util-stringify-position@npm:2.0.3" + dependencies: + "@types/unist": ^2.0.2 + checksum: f755cadc959f9074fe999578a1a242761296705a7fe87f333a37c00044de74ab4b184b3812989a57d4cd12211f0b14ad397b327c3a594c7af84361b1c25a7f09 + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^3.0.0": + version: 3.0.3 + resolution: "unist-util-stringify-position@npm:3.0.3" + dependencies: + "@types/unist": ^2.0.0 + checksum: dbd66c15183607ca942a2b1b7a9f6a5996f91c0d30cf8966fb88955a02349d9eefd3974e9010ee67e71175d784c5a9fea915b0aa0b0df99dcb921b95c4c9e124 + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^5.1.1": + version: 5.1.3 + resolution: "unist-util-visit-parents@npm:5.1.3" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + checksum: 8ecada5978994f846b64658cf13b4092cd78dea39e1ba2f5090a5de842ba4852712c02351a8ae95250c64f864635e7b02aedf3b4a093552bb30cf1bd160efbaa + languageName: node + linkType: hard + +"unist-util-visit@npm:^4.0.0, unist-util-visit@npm:^4.1.2": + version: 4.1.2 + resolution: "unist-util-visit@npm:4.1.2" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + unist-util-visit-parents: ^5.1.1 + checksum: 95a34e3f7b5b2d4b68fd722b6229972099eb97b6df18913eda44a5c11df8b1e27efe7206dd7b88c4ed244a48c474a5b2e2629ab79558ff9eb936840295549cee + languageName: node + linkType: hard + +"unload@npm:2.2.0": + version: 2.2.0 + resolution: "unload@npm:2.2.0" + dependencies: + "@babel/runtime": ^7.6.2 + detect-node: ^2.0.4 + checksum: 88ba950c5ff83ab4f9bbd8f63bbf19ba09687ed3c434efd43b7338cc595bc574df8f9b155ee6eee7a435de3d3a4a226726988428977a68ba4907045f1fac5d41 + languageName: node + linkType: hard + +"untildify@npm:^4.0.0": + version: 4.0.0 + resolution: "untildify@npm:4.0.0" + checksum: 39ced9c418a74f73f0a56e1ba4634b4d959422dff61f4c72a8e39f60b99380c1b45ed776fbaa0a4101b157e4310d873ad7d114e8534ca02609b4916bb4187fb9 + languageName: node + linkType: hard + +"update-browserslist-db@npm:^1.0.13": + version: 1.0.13 + resolution: "update-browserslist-db@npm:1.0.13" + dependencies: + escalade: ^3.1.1 + picocolors: ^1.0.0 + peerDependencies: + browserslist: ">= 4.21.0" + bin: + update-browserslist-db: cli.js + checksum: 1e47d80182ab6e4ad35396ad8b61008ae2a1330221175d0abd37689658bdb61af9b705bfc41057fd16682474d79944fb2d86767c5ed5ae34b6276b9bed353322 + languageName: node + linkType: hard + +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: ^2.1.0 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + languageName: node + linkType: hard + +"url-parse@npm:^1.5.7": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: ^2.1.1 + requires-port: ^1.0.0 + checksum: fbdba6b1d83336aca2216bbdc38ba658d9cfb8fc7f665eb8b17852de638ff7d1a162c198a8e4ed66001ddbf6c9888d41e4798912c62b4fd777a31657989f7bdf + languageName: node + linkType: hard + +"use-callback-ref@npm:^1.3.0": + version: 1.3.0 + resolution: "use-callback-ref@npm:1.3.0" + dependencies: + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 7913df383a5a6fcb399212eedefaac2e0c6f843555202d4e3010bac3848afe38ecaa3d0d6500ad1d936fbeffd637e6c517e68edb024af5e6beca7f27f3ce7b21 + languageName: node + linkType: hard + +"use-sidecar@npm:^1.1.2": + version: 1.1.2 + resolution: "use-sidecar@npm:1.1.2" + dependencies: + detect-node-es: ^1.1.0 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 925d1922f9853e516eaad526b6fed1be38008073067274f0ecc3f56b17bb8ab63480140dd7c271f94150027c996cea4efe83d3e3525e8f3eda22055f6a39220b + languageName: node + linkType: hard + +"use-sync-external-store@npm:1.2.0, use-sync-external-store@npm:^1.2.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 5c639e0f8da3521d605f59ce5be9e094ca772bd44a4ce7322b055a6f58eeed8dda3c94cabd90c7a41fb6fa852210092008afe48f7038792fd47501f33299116a + languageName: node + linkType: hard + +"utf-8-validate@npm:^5.0.2": + version: 5.0.10 + resolution: "utf-8-validate@npm:5.0.10" + dependencies: + node-gyp: latest + node-gyp-build: ^4.3.0 + checksum: 5579350a023c66a2326752b6c8804cc7b39dcd251bb088241da38db994b8d78352e388dcc24ad398ab98385ba3c5ffcadb6b5b14b2637e43f767869055e46ba6 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 + languageName: node + linkType: hard + +"util@npm:^0.12.3, util@npm:^0.12.4": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: ^2.0.3 + is-arguments: ^1.0.4 + is-generator-function: ^1.0.7 + is-typed-array: ^1.1.3 + which-typed-array: ^1.1.2 + checksum: 705e51f0de5b446f4edec10739752ac25856541e0254ea1e7e45e5b9f9b0cb105bc4bd415736a6210edc68245a7f903bf085ffb08dd7deb8a0e847f60538a38a + languageName: node + linkType: hard + +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 5575a8a75c13120e2f10e6ddc801b2c7ed7d8f3c8ac22c7ed0c7b2ba6383ec0abda88c905085d630e251719e0777045ae3236f04c812184b7c765f63a70e58df + languageName: node + linkType: hard + +"uuid@npm:^9.0.0": + version: 9.0.1 + resolution: "uuid@npm:9.0.1" + bin: + uuid: dist/bin/uuid + checksum: 39931f6da74e307f51c0fb463dc2462807531dc80760a9bff1e35af4316131b4fc3203d16da60ae33f07fdca5b56f3f1dd662da0c99fea9aaeab2004780cc5f4 + languageName: node + linkType: hard + +"uvu@npm:^0.5.0, uvu@npm:^0.5.6": + version: 0.5.6 + resolution: "uvu@npm:0.5.6" + dependencies: + dequal: ^2.0.0 + diff: ^5.0.0 + kleur: ^4.0.3 + sade: ^1.7.3 + bin: + uvu: bin.js + checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 + languageName: node + linkType: hard + +"v8-to-istanbul@npm:^9.0.1": + version: 9.1.3 + resolution: "v8-to-istanbul@npm:9.1.3" + dependencies: + "@jridgewell/trace-mapping": ^0.3.12 + "@types/istanbul-lib-coverage": ^2.0.1 + convert-source-map: ^2.0.0 + checksum: 5d592ab3d186b386065dace8e01c543a922a904b3cfac39667de172455a6b3d0e8e1401574fecb8a12092ad0809b5a8fd15f1cc14d0666139a1bb77cd6ac2cf8 + languageName: node + linkType: hard + +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: ^3.0.0 + spdx-expression-parse: ^3.0.0 + checksum: 35703ac889d419cf2aceef63daeadbe4e77227c39ab6287eeb6c1b36a746b364f50ba22e88591f5d017bc54685d8137bc2d328d0a896e4d3fd22093c0f32a9ad + languageName: node + linkType: hard + +"valtio@npm:1.11.2": + version: 1.11.2 + resolution: "valtio@npm:1.11.2" + dependencies: + proxy-compare: 2.5.1 + use-sync-external-store: 1.2.0 + peerDependencies: + "@types/react": ">=16.8" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + checksum: cce2d9212aac9fc4bdeba2d381188cc831cfe8d2d03039024cfcd58ba1801f2a5b14d01c2bb21a2c9f12046d2ede64f1dd887175185f39bee553677a35592c30 + languageName: node + linkType: hard + +"varint@npm:^6.0.0": + version: 6.0.0 + resolution: "varint@npm:6.0.0" + checksum: 7684113c9d497c01e40396e50169c502eb2176203219b96e1c5ac965a3e15b4892bd22b7e48d87148e10fffe638130516b6dbeedd0efde2b2d0395aa1772eea7 + languageName: node + linkType: hard + +"vfile-message@npm:^3.0.0": + version: 3.1.4 + resolution: "vfile-message@npm:3.1.4" + dependencies: + "@types/unist": ^2.0.0 + unist-util-stringify-position: ^3.0.0 + checksum: d0ee7da1973ad76513c274e7912adbed4d08d180eaa34e6bd40bc82459f4b7bc50fcaff41556135e3339995575eac5f6f709aba9332b80f775618ea4880a1367 + languageName: node + linkType: hard + +"vfile-reporter@npm:^7.0.0": + version: 7.0.5 + resolution: "vfile-reporter@npm:7.0.5" + dependencies: + "@types/supports-color": ^8.0.0 + string-width: ^5.0.0 + supports-color: ^9.0.0 + unist-util-stringify-position: ^3.0.0 + vfile: ^5.0.0 + vfile-message: ^3.0.0 + vfile-sort: ^3.0.0 + vfile-statistics: ^2.0.0 + checksum: 0d66370c6c821fbc850c898bfc48c73f19fb320792c532a3af0456bd0f3d395590b365009e60ca4c08ab09a0dabdd43311297bb5c6fbd0abb90bb5abce98264e + languageName: node + linkType: hard + +"vfile-sort@npm:^3.0.0": + version: 3.0.1 + resolution: "vfile-sort@npm:3.0.1" + dependencies: + vfile: ^5.0.0 + vfile-message: ^3.0.0 + checksum: 6a29e0513c03b3468c628cc27d1511e2f955c3095cd65eeddcb8f601b0972c0cb1f2dc008a7c760e217cf97a44e04e0331b00929b83adc6661b46043b03b5a24 + languageName: node + linkType: hard + +"vfile-statistics@npm:^2.0.0": + version: 2.0.1 + resolution: "vfile-statistics@npm:2.0.1" + dependencies: + vfile: ^5.0.0 + vfile-message: ^3.0.0 + checksum: e3f731bcf992c61c1231a0793785b1288e0a004be9e18ff147e3ead901ae2d21723358609bfe0565881ffe202af68cb171b49753fc8b4bd7a30337aaef256266 + languageName: node + linkType: hard + +"vfile@npm:^5.0.0, vfile@npm:^5.1.0, vfile@npm:^5.3.7": + version: 5.3.7 + resolution: "vfile@npm:5.3.7" + dependencies: + "@types/unist": ^2.0.0 + is-buffer: ^2.0.0 + unist-util-stringify-position: ^3.0.0 + vfile-message: ^3.0.0 + checksum: 642cce703afc186dbe7cabf698dc954c70146e853491086f5da39e1ce850676fc96b169fcf7898aa3ff245e9313aeec40da93acd1e1fcc0c146dc4f6308b4ef9 + languageName: node + linkType: hard + +"video-stream-merger@npm:^4.0.1": + version: 4.0.1 + resolution: "video-stream-merger@npm:4.0.1" + checksum: 0f7513995dd8c42e1d97cfe8afe9876371e8bd6a456fa12b7186b41fdca7b5fac74e2260df3bf6f910fb093c8180f7a677326b9408df38cc52b233796d8ecf53 + languageName: node + linkType: hard + +"viem@npm:^1.0.0": + version: 1.16.6 + resolution: "viem@npm:1.16.6" + dependencies: + "@adraffy/ens-normalize": 1.9.4 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@scure/bip32": 1.3.2 + "@scure/bip39": 1.2.1 + abitype: 0.9.8 + isows: 1.0.3 + ws: 8.13.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 2f116cad184cfc7a9584073451549edfb23c3847b1784f092b80a279b848fe011a054bc4141c923b5bcce1d8493db98284db65416ce72e8ba522225d02786a9a + languageName: node + linkType: hard + +"viem@npm:^1.3.0": + version: 1.16.5 + resolution: "viem@npm:1.16.5" + dependencies: + "@adraffy/ens-normalize": 1.9.4 + "@noble/curves": 1.2.0 + "@noble/hashes": 1.3.2 + "@scure/bip32": 1.3.2 + "@scure/bip39": 1.2.1 + abitype: 0.9.8 + isows: 1.0.3 + ws: 8.13.0 + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: cc07bbc8ebf616c2cc6e14f08eea59d1b34df294d1dcba72090bf10e224e87c17014db593bcff223fe6c7c30999448d786d67d9e18691906f51900db940af821 + languageName: node + linkType: hard + +"vscode-json-languageservice@npm:^4.1.6": + version: 4.2.1 + resolution: "vscode-json-languageservice@npm:4.2.1" + dependencies: + jsonc-parser: ^3.0.0 + vscode-languageserver-textdocument: ^1.0.3 + vscode-languageserver-types: ^3.16.0 + vscode-nls: ^5.0.0 + vscode-uri: ^3.0.3 + checksum: 46b7f17d81e750bde854eb2dffb8d6effb6ab3765ce6482828b033a52800c5bd33e23b14634229227d1c42976c3ebbdb4cfa57e95da84b28e2d861008e541d07 + languageName: node + linkType: hard + +"vscode-languageserver-textdocument@npm:^1.0.3": + version: 1.0.11 + resolution: "vscode-languageserver-textdocument@npm:1.0.11" + checksum: ea7cdc9d4ffaae5952071fa11d17d714215a76444e6936c9359f94b9ba3222a52a55edb5bd5928bd3e9712b900a9f175bb3565ec1c8923234fe3bd327584bafb + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:^3.16.0": + version: 3.17.5 + resolution: "vscode-languageserver-types@npm:3.17.5" + checksum: 79b420e7576398d396579ca3a461c9ed70e78db4403cd28bbdf4d3ed2b66a2b4114031172e51fad49f0baa60a2180132d7cb2ea35aa3157d7af3c325528210ac + languageName: node + linkType: hard + +"vscode-nls@npm:^5.0.0": + version: 5.2.0 + resolution: "vscode-nls@npm:5.2.0" + checksum: c9f43c0f85000b3008fc4a3a8fc122e580f4f0402a77186c6c0f3219ca8ac258f4893c7a563d66f097a6da09951d7f5a7e6295d3e21dcbaec707937c9089b5a8 + languageName: node + linkType: hard + +"vscode-uri@npm:^3.0.3": + version: 3.0.8 + resolution: "vscode-uri@npm:3.0.8" + checksum: 514249126850c0a41a7d8c3c2836cab35983b9dc1938b903cfa253b9e33974c1416d62a00111385adcfa2b98df456437ab704f709a2ecca76a90134ef5eb4832 + languageName: node + linkType: hard + +"w3name@npm:^1.0.6": + version: 1.0.8 + resolution: "w3name@npm:1.0.8" + dependencies: + "@web-std/fetch": ^4.1.0 + cborg: ^1.9.4 + ipns: ^0.16.0 + libp2p-crypto: ^0.21.2 + throttled-queue: ^2.1.4 + uint8arrays: ^3.0.0 + checksum: 02dc258667a31955d323589d9ff147b1688c9f09cb0197e86adeae7dbe31ff3664e004810eeb7551df7abbbb7cd6e75db88ec1ced84cdfadd1a63d494749da5e + languageName: node + linkType: hard + +"wagmi@npm:^1.4.4": + version: 1.4.4 + resolution: "wagmi@npm:1.4.4" + dependencies: + "@tanstack/query-sync-storage-persister": ^4.27.1 + "@tanstack/react-query": ^4.28.0 + "@tanstack/react-query-persist-client": ^4.28.0 + "@wagmi/core": 1.4.4 + abitype: 0.8.7 + use-sync-external-store: ^1.2.0 + peerDependencies: + react: ">=17.0.0" + typescript: ">=5.0.4" + viem: ">=0.3.35" + peerDependenciesMeta: + typescript: + optional: true + checksum: 4cf7ce978400d21e27d25871a4c8bc6b05fabd61d6d3d6e705c120a1c1dd4ba260d6ddfb2bb28b5e18591ba825c89839d0f3c874c55dfa255a9cde96d0785202 + languageName: node + linkType: hard + +"walk-up-path@npm:^3.0.1": + version: 3.0.1 + resolution: "walk-up-path@npm:3.0.1" + checksum: 9ffca02fe30fb65f6db531260582988c5e766f4c739cf86a6109380a7f791236b5d0b92b1dce37a6f73e22dca6bc9d93bf3700413e16251b2bd6bbd1ca2be316 + languageName: node + linkType: hard + +"walker@npm:^1.0.8": + version: 1.0.8 + resolution: "walker@npm:1.0.8" + dependencies: + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + languageName: node + linkType: hard + +"web-encoding@npm:1.1.5": + version: 1.1.5 + resolution: "web-encoding@npm:1.1.5" + dependencies: + "@zxing/text-encoding": 0.9.0 + util: ^0.12.3 + dependenciesMeta: + "@zxing/text-encoding": + optional: true + checksum: 2234a2b122f41006ce07859b3c0bf2e18f46144fda2907d5db0b571b76aa5c26977c646100ad9c00d2f8a4f6f2b848bc02147845d8c447ab365ec4eff376338d + languageName: node + linkType: hard + +"web-streams-polyfill@npm:^3.1.1": + version: 3.2.1 + resolution: "web-streams-polyfill@npm:3.2.1" + checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 + languageName: node + linkType: hard + +"web3.storage@npm:^4.5.5": + version: 4.5.5 + resolution: "web3.storage@npm:4.5.5" + dependencies: + "@ipld/car": ^3.1.4 + "@web-std/blob": ^3.0.4 + "@web-std/fetch": ^4.1.2 + "@web-std/file": ^3.0.2 + "@web3-storage/parse-link-header": ^3.1.0 + browser-readablestream-to-it: ^1.0.3 + carbites: ^1.0.6 + cborg: ^1.8.0 + files-from-path: ^0.2.4 + ipfs-car: ^0.7.0 + libp2p-crypto: ^0.21.0 + p-retry: ^4.5.0 + streaming-iterables: ^6.2.0 + throttled-queue: ^2.1.2 + uint8arrays: ^3.0.0 + w3name: ^1.0.6 + checksum: 2478c0fa61a8613d5face3ae7ecb12ed6f46b7e2e767ab4eb92b1dfe06a7c195fb6aa627d63b0c12346a92808434134925023efc95f6692d8b98584fa54aaef6 + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c + languageName: node + linkType: hard + +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: ~0.0.3 + webidl-conversions: ^3.0.0 + checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c + languageName: node + linkType: hard + +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: ^1.0.1 + is-boolean-object: ^1.1.0 + is-number-object: ^1.0.4 + is-string: ^1.0.5 + is-symbol: ^1.0.3 + checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e + languageName: node + linkType: hard + +"which-builtin-type@npm:^1.1.3": + version: 1.1.3 + resolution: "which-builtin-type@npm:1.1.3" + dependencies: + function.prototype.name: ^1.1.5 + has-tostringtag: ^1.0.0 + is-async-function: ^2.0.0 + is-date-object: ^1.0.5 + is-finalizationregistry: ^1.0.2 + is-generator-function: ^1.0.10 + is-regex: ^1.1.4 + is-weakref: ^1.0.2 + isarray: ^2.0.5 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.1 + which-typed-array: ^1.1.9 + checksum: 43730f7d8660ff9e33d1d3f9f9451c4784265ee7bf222babc35e61674a11a08e1c2925019d6c03154fcaaca4541df43abe35d2720843b9b4cbcebdcc31408f36 + languageName: node + linkType: hard + +"which-collection@npm:^1.0.1": + version: 1.0.1 + resolution: "which-collection@npm:1.0.1" + dependencies: + is-map: ^2.0.1 + is-set: ^2.0.1 + is-weakmap: ^2.0.1 + is-weakset: ^2.0.1 + checksum: c815bbd163107ef9cb84f135e6f34453eaf4cca994e7ba85ddb0d27cea724c623fae2a473ceccfd5549c53cc65a5d82692de418166df3f858e1e5dc60818581c + languageName: node + linkType: hard + +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.11, which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": + version: 1.1.11 + resolution: "which-typed-array@npm:1.1.11" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + checksum: 711ffc8ef891ca6597b19539075ec3e08bb9b4c2ca1f78887e3c07a977ab91ac1421940505a197758fb5939aa9524976d0a5bbcac34d07ed6faa75cedbb17206 + languageName: node + linkType: hard + +"which@npm:^2.0.1, which@npm:^2.0.2": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: ^2.0.0 + bin: + node-which: ./bin/node-which + checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 + languageName: node + linkType: hard + +"wide-align@npm:^1.1.5": + version: 1.1.5 + resolution: "wide-align@npm:1.1.5" + dependencies: + string-width: ^1.0.2 || 2 || 3 || 4 + checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 + languageName: node + linkType: hard + +"wordwrap@npm:^1.0.0": + version: 1.0.0 + resolution: "wordwrap@npm:1.0.0" + checksum: 2a44b2788165d0a3de71fd517d4880a8e20ea3a82c080ce46e294f0b68b69a2e49cff5f99c600e275c698a90d12c5ea32aff06c311f0db2eb3f1201f3e7b2a04 + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + languageName: node + linkType: hard + +"wrap-ansi@npm:^6.2.0": + version: 6.2.0 + resolution: "wrap-ansi@npm:6.2.0" + dependencies: + ansi-styles: ^4.0.0 + string-width: ^4.1.0 + strip-ansi: ^6.0.0 + checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.0.1, wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 + languageName: node + linkType: hard + +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + +"ws@npm:7.4.6": + version: 7.4.6 + resolution: "ws@npm:7.4.6" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 3a990b32ed08c72070d5e8913e14dfcd831919205be52a3ff0b4cdd998c8d554f167c9df3841605cde8b11d607768cacab3e823c58c96a5c08c987e093eb767a + languageName: node + linkType: hard + +"ws@npm:8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c + languageName: node + linkType: hard + +"ws@npm:^7.4.5, ws@npm:^7.5.1": + version: 7.5.9 + resolution: "ws@npm:7.5.9" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: c3c100a181b731f40b7f2fddf004aa023f79d64f489706a28bc23ff88e87f6a64b3c6651fbec3a84a53960b75159574d7a7385709847a62ddb7ad6af76f49138 + languageName: node + linkType: hard + +"ws@npm:^8.5.0": + version: 8.14.2 + resolution: "ws@npm:8.14.2" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ">=5.0.2" + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 3ca0dad26e8cc6515ff392b622a1467430814c463b3368b0258e33696b1d4bed7510bc7030f7b72838b9fdeb8dbd8839cbf808367d6aae2e1d668ce741d4308b + languageName: node + linkType: hard + +"ws@npm:~8.11.0": + version: 8.11.0 + resolution: "ws@npm:8.11.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 + languageName: node + linkType: hard + +"xmlhttprequest-ssl@npm:~2.0.0": + version: 2.0.0 + resolution: "xmlhttprequest-ssl@npm:2.0.0" + checksum: 1e98df67f004fec15754392a131343ea92e6ab5ac4d77e842378c5c4e4fd5b6a9134b169d96842cc19422d77b1606b8df84a5685562b3b698cb68441636f827e + languageName: node + linkType: hard + +"xtend@npm:^4.0.1, xtend@npm:~4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"xtend@npm:~2.1.1": + version: 2.1.2 + resolution: "xtend@npm:2.1.2" + dependencies: + object-keys: ~0.4.0 + checksum: a8b79f31502c163205984eaa2b196051cd2fab0882b49758e30f2f9018255bc6c462e32a090bf3385d1bda04755ad8cc0052a09e049b0038f49eb9b950d9c447 + languageName: node + linkType: hard + +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 + languageName: node + linkType: hard + +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 + languageName: node + linkType: hard + +"yaml@npm:2.3.1": + version: 2.3.1 + resolution: "yaml@npm:2.3.1" + checksum: 2c7bc9a7cd4c9f40d3b0b0a98e370781b68b8b7c4515720869aced2b00d92f5da1762b4ffa947f9e795d6cd6b19f410bd4d15fdd38aca7bd96df59bd9486fb54 + languageName: node + linkType: hard + +"yaml@npm:^1.10.0": + version: 1.10.2 + resolution: "yaml@npm:1.10.2" + checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f + languageName: node + linkType: hard + +"yaml@npm:^2.0.0": + version: 2.3.2 + resolution: "yaml@npm:2.3.2" + checksum: acd80cc24df12c808c6dec8a0176d404ef9e6f08ad8786f746ecc9d8974968c53c6e8a67fdfabcc5f99f3dc59b6bb0994b95646ff03d18e9b1dcd59eccc02146 + languageName: node + linkType: hard + +"yargs-parser@npm:^18.1.2": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: ^5.0.0 + decamelize: ^1.2.0 + checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 + languageName: node + linkType: hard + +"yargs-parser@npm:^20.2.3": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + +"yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c + languageName: node + linkType: hard + +"yargs@npm:^15.3.1": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" + dependencies: + cliui: ^6.0.0 + decamelize: ^1.2.0 + find-up: ^4.1.0 + get-caller-file: ^2.0.1 + require-directory: ^2.1.1 + require-main-filename: ^2.0.0 + set-blocking: ^2.0.0 + string-width: ^4.2.0 + which-module: ^2.0.0 + y18n: ^4.0.0 + yargs-parser: ^18.1.2 + checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 + languageName: node + linkType: hard + +"yargs@npm:^17.3.1": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + 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 + checksum: 73b572e863aa4a8cbef323dd911d79d193b772defd5a51aab0aca2d446655216f5002c42c5306033968193bdbf892a7a4c110b0d77954a7fdf563e653967b56a + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard + +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 + languageName: node + linkType: hard + +"zustand@npm:4.4.0": + version: 4.4.0 + resolution: "zustand@npm:4.4.0" + dependencies: + use-sync-external-store: 1.2.0 + peerDependencies: + "@types/react": ">=16.8" + immer: ">=9.0" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + checksum: 37e69eec1b56677a93712e5aa6d0048b55997379919dc0f78f61181f8a58994a6cae064f816f8101f5b1039008d3c1c9d136432a62e0edeb796807cc84cf45ef + languageName: node + linkType: hard + +"zustand@npm:^4.3.1, zustand@npm:^4.3.9": + version: 4.4.3 + resolution: "zustand@npm:4.4.3" + dependencies: + use-sync-external-store: 1.2.0 + peerDependencies: + "@types/react": ">=16.8" + immer: ">=9.0" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + checksum: 3ed16457a3a4b9fe6523f52d397af37db8fab5687dd21a23ede25f657346b25df374490baea27f10d416faae5e96acf7b4065c86044746d775881d266d1500f0 + languageName: node + linkType: hard + +"zwitch@npm:^2.0.0": + version: 2.0.4 + resolution: "zwitch@npm:2.0.4" + checksum: f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6 + languageName: node + linkType: hard