diff --git a/apps/abstraxion-dashboard/.env.example b/apps/abstraxion-dashboard/.env.example deleted file mode 100644 index 67c4d946..00000000 --- a/apps/abstraxion-dashboard/.env.example +++ /dev/null @@ -1,7 +0,0 @@ -# DEFAULTS -NEXT_PUBLIC_DEPLOYMENT_ENV="mainnet" -NEXT_PUBLIC_DEFAULT_API_URL="https://aa.xion-testnet-1.burnt.com" -NEXT_PUBLIC_DEFAULT_INDEXER_URL="https://api.subquery.network/sq/burnt-labs/xion-indexer" -NEXT_PUBLIC_DEFAULT_STYTCH_PUBLIC_TOKEN="public-token-live-87901ec3-ef19-48ca-b3f4-842be750181b" -NEXT_PUBLIC_DEFAULT_CHAIN_INFO="{"rpc":"https://testnet-rpc.xion-api.com:443","rest":"https://testnet-api.xion-api.com:443","chainId":"xion-testnet-1","chainName":"Xion Testnet","bip44":{"coinType":118},"bech32Config":{"bech32PrefixAccAddr":"xion","bech32PrefixValAddr":"xionvaloper","bech32PrefixValPub":"xionvaloperpub","bech32PrefixAccPub":"xionpub","bech32PrefixConsAddr":"xionvalcons","bech32PrefixConsPub":"xionvalconspub"},"stakeCurrency":{"coinDenom":"XION","coinMinimalDenom":"uxion","coinDecimals":6,"gasPriceStep":{"low":0.01,"average":0.025,"high":0.03}},"currencies":[{"coinDenom":"XION","coinMinimalDenom":"uxion","coinDecimals":6,"gasPriceStep":{"low":0.01,"average":0.025,"high":0.03}}],"feeCurrencies":[{"coinDenom":"XION","coinMinimalDenom":"uxion","coinDecimals":6,"gasPriceStep":{"low":0.01,"average":0.025,"high":0.03}}],"features":["cosmwasm"]}" -NEXT_PUBLIC_OKX_FLAG="false" \ No newline at end of file diff --git a/apps/abstraxion-dashboard/.eslintrc.json b/apps/abstraxion-dashboard/.eslintrc.json deleted file mode 100644 index bffb357a..00000000 --- a/apps/abstraxion-dashboard/.eslintrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "next/core-web-vitals" -} diff --git a/apps/abstraxion-dashboard/.gitignore b/apps/abstraxion-dashboard/.gitignore deleted file mode 100644 index 2de1f470..00000000 --- a/apps/abstraxion-dashboard/.gitignore +++ /dev/null @@ -1,40 +0,0 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. - -# dependencies -/node_modules -/.pnp -.pnp.js -.yarn/install-state.gz - -# testing -/coverage - -# next.js -/.next/ -/out/ - -# production -/build - -# misc -.DS_Store -*.pem - -# debug -npm-debug.log* -yarn-debug.log* -yarn-error.log* - -# local env files -.env -.env*.local - -# vercel -.vercel - -# typescript -*.tsbuildinfo -next-env.d.ts - -# Sentry Config File -.sentryclirc diff --git a/apps/abstraxion-dashboard/CHANGELOG.md b/apps/abstraxion-dashboard/CHANGELOG.md deleted file mode 100644 index 4f8f5051..00000000 --- a/apps/abstraxion-dashboard/CHANGELOG.md +++ /dev/null @@ -1,423 +0,0 @@ -# abstraxion-dashboard - -## 0.2.0-alpha.28 - -### Minor Changes - -- [#198](https://github.com/burnt-labs/xion.js/pull/198) [`e9dd176`](https://github.com/burnt-labs/xion.js/commit/e9dd1766dbfe4994948e028b51c07eb6dd52cced) Thanks [@BurntVal](https://github.com/BurntVal)! - Update chainInfo vars across monorepo. Please view the abstraxion package readme for more info on opting into mainnet - -### Patch Changes - -- Updated dependencies [[`e9dd176`](https://github.com/burnt-labs/xion.js/commit/e9dd1766dbfe4994948e028b51c07eb6dd52cced)]: - - @burnt-labs/abstraxion@1.0.0-alpha.47 - - @burnt-labs/constants@0.1.0-alpha.10 - -## 0.2.0-alpha.27 - -### Minor Changes - -- [#183](https://github.com/burnt-labs/xion.js/pull/183) [`750803b`](https://github.com/burnt-labs/xion.js/commit/750803b1a4235334322262d1e932f81d3ea13060) Thanks [@BurntVal](https://github.com/BurntVal)! - General cleanup and build optimization - -- [#185](https://github.com/burnt-labs/xion.js/pull/185) [`b1a90e9`](https://github.com/burnt-labs/xion.js/commit/b1a90e956180d3262c69122dacd3cdfee55d5afb) Thanks [@BurntVal](https://github.com/BurntVal)! - revert to explicit flow for creating initial meta account - -- [#189](https://github.com/burnt-labs/xion.js/pull/189) [`7556cda`](https://github.com/burnt-labs/xion.js/commit/7556cda956eddf2e37d154ffb10c4ec6165c79ed) Thanks [@justinbarry](https://github.com/justinbarry)! - Disable sentry replays and performance tracing for dashboard - -- [#181](https://github.com/burnt-labs/xion.js/pull/181) [`b618cc8`](https://github.com/burnt-labs/xion.js/commit/b618cc8edc57463925e3e8945dd2c5ee55d87879) Thanks [@BurntVal](https://github.com/BurntVal)! - usdc iteration for sending tokens - -- [#178](https://github.com/burnt-labs/xion.js/pull/178) [`a0b5031`](https://github.com/burnt-labs/xion.js/commit/a0b5031f8766369b00562387b692450f396a9d7f) Thanks [@BurntVal](https://github.com/BurntVal)! - Implement ability to remove authenticators - -### Patch Changes - -- Updated dependencies [[`bcc35c9`](https://github.com/burnt-labs/xion.js/commit/bcc35c9ed8faf2edb6f1e19f06e8b8ced9530067), [`750803b`](https://github.com/burnt-labs/xion.js/commit/750803b1a4235334322262d1e932f81d3ea13060), [`33493c5`](https://github.com/burnt-labs/xion.js/commit/33493c5a33224d59e517ddd84aec3e35d1f5c291), [`b618cc8`](https://github.com/burnt-labs/xion.js/commit/b618cc8edc57463925e3e8945dd2c5ee55d87879), [`a0b5031`](https://github.com/burnt-labs/xion.js/commit/a0b5031f8766369b00562387b692450f396a9d7f)]: - - @burnt-labs/abstraxion@1.0.0-alpha.46 - - @burnt-labs/constants@0.1.0-alpha.9 - - @burnt-labs/signers@0.1.0-alpha.11 - - @burnt-labs/ui@0.1.0-alpha.13 - -## 0.2.0-alpha.26 - -### Minor Changes - -- [#176](https://github.com/burnt-labs/xion.js/pull/176) [`a80ed9c`](https://github.com/burnt-labs/xion.js/commit/a80ed9c32f0c5c91a8ec7aacfba5bddddfc43f84) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Added UI Fixes and new button style - -### Patch Changes - -- Updated dependencies [[`a80ed9c`](https://github.com/burnt-labs/xion.js/commit/a80ed9c32f0c5c91a8ec7aacfba5bddddfc43f84), [`b3ecf24`](https://github.com/burnt-labs/xion.js/commit/b3ecf24cf8c240c2b0c721ed803decca9f6a91a4)]: - - @burnt-labs/ui@0.1.0-alpha.12 - - @burnt-labs/abstraxion@1.0.0-alpha.45 - -## 0.2.0-alpha.25 - -### Minor Changes - -- [#165](https://github.com/burnt-labs/xion.js/pull/165) [`e53a5bd`](https://github.com/burnt-labs/xion.js/commit/e53a5bd382481001f1968d3314c858de0fe2b5ea) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Added prop for more direct access to input styles - -- [#167](https://github.com/burnt-labs/xion.js/pull/167) [`1cddf5b`](https://github.com/burnt-labs/xion.js/commit/1cddf5bd9c91393b93e177d8f625ab00d3d284c5) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Added mobile UI fixes for dashboard - -### Patch Changes - -- Updated dependencies [[`2edf674`](https://github.com/burnt-labs/xion.js/commit/2edf674428695388127a24c93cd28e815db43425), [`210bac1`](https://github.com/burnt-labs/xion.js/commit/210bac17b576cba3b470084aed6b07c991a91453), [`e53a5bd`](https://github.com/burnt-labs/xion.js/commit/e53a5bd382481001f1968d3314c858de0fe2b5ea), [`1cddf5b`](https://github.com/burnt-labs/xion.js/commit/1cddf5bd9c91393b93e177d8f625ab00d3d284c5), [`f018dc1`](https://github.com/burnt-labs/xion.js/commit/f018dc124615bbf467abbea35cb656852233593d)]: - - @burnt-labs/abstraxion@1.0.0-alpha.44 - - @burnt-labs/ui@0.1.0-alpha.11 - -## 0.2.0-alpha.24 - -### Patch Changes - -- Updated dependencies [[`aa57bfd`](https://github.com/burnt-labs/xion.js/commit/aa57bfdd0ed1651b652b2a9a39a2eeb54ab25d11)]: - - @burnt-labs/abstraxion@1.0.0-alpha.43 - -## 0.2.0-alpha.23 - -### Minor Changes - -- [#147](https://github.com/burnt-labs/xion.js/pull/147) [`bed091d`](https://github.com/burnt-labs/xion.js/commit/bed091d74557457efb681734a27b46d97cdefbbe) Thanks [@BurntVal](https://github.com/BurntVal)! - Implementation of OKX wallet (cosmos provider) - -- [#161](https://github.com/burnt-labs/xion.js/pull/161) [`deb1a8d`](https://github.com/burnt-labs/xion.js/commit/deb1a8dae04fe878a56e9e17d090b94c56069f44) Thanks [@justinbarry](https://github.com/justinbarry)! - Update the url used to check for grants to include the granter to avoid the rest node having to do a table scan. - -### Patch Changes - -- Updated dependencies [[`bed091d`](https://github.com/burnt-labs/xion.js/commit/bed091d74557457efb681734a27b46d97cdefbbe), [`deb1a8d`](https://github.com/burnt-labs/xion.js/commit/deb1a8dae04fe878a56e9e17d090b94c56069f44)]: - - @burnt-labs/signers@0.1.0-alpha.10 - - @burnt-labs/ui@0.1.0-alpha.10 - - @burnt-labs/abstraxion@1.0.0-alpha.42 - -## 0.2.0-alpha.22 - -### Minor Changes - -- [#151](https://github.com/burnt-labs/xion.js/pull/151) [`958f66a`](https://github.com/burnt-labs/xion.js/commit/958f66ab7b82bdbb8a591d16b2cc399859e8508b) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Broke out grant flow to unique app. - -- [#134](https://github.com/burnt-labs/xion.js/pull/134) [`4c230d8`](https://github.com/burnt-labs/xion.js/commit/4c230d82f20b934acd77ea102e45a29ad3e148ae) Thanks [@BurntVal](https://github.com/BurntVal)! - Add Authenticator Modal & Fresh User Dashboard Flow - -- [#139](https://github.com/burnt-labs/xion.js/pull/139) [`f09cc0b`](https://github.com/burnt-labs/xion.js/commit/f09cc0b7167e41673f7aeb0ce317896e2e4b5582) Thanks [@BurntVal](https://github.com/BurntVal)! - Extend abstraxion-core to allow for framework agnostic implementations - -- [#148](https://github.com/burnt-labs/xion.js/pull/148) [`e46656b`](https://github.com/burnt-labs/xion.js/commit/e46656ba2880e7fe80e8425f4f49047d54b665e5) Thanks [@justinbarry](https://github.com/justinbarry)! - No longer auto select first account after first login - -### Patch Changes - -- [#140](https://github.com/burnt-labs/xion.js/pull/140) [`e21e824`](https://github.com/burnt-labs/xion.js/commit/e21e8244923a764acada81197da821949aaa2ff2) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Added unit test for dashboard send and receive functionality - -- Updated dependencies [[`958f66a`](https://github.com/burnt-labs/xion.js/commit/958f66ab7b82bdbb8a591d16b2cc399859e8508b), [`c1ed608`](https://github.com/burnt-labs/xion.js/commit/c1ed60803731b13b831169ed675049e7a257aeeb), [`4c230d8`](https://github.com/burnt-labs/xion.js/commit/4c230d82f20b934acd77ea102e45a29ad3e148ae), [`f09cc0b`](https://github.com/burnt-labs/xion.js/commit/f09cc0b7167e41673f7aeb0ce317896e2e4b5582), [`8ec1c5b`](https://github.com/burnt-labs/xion.js/commit/8ec1c5b752f8136c9e6ba7fcfec16e85542d7c21)]: - - @burnt-labs/constants@0.1.0-alpha.8 - - @burnt-labs/ui@0.1.0-alpha.9 - - @burnt-labs/abstraxion@1.0.0-alpha.41 - -## 0.2.0-alpha.21 - -### Minor Changes - -- [#131](https://github.com/burnt-labs/xion.js/pull/131) [`d6673bf`](https://github.com/burnt-labs/xion.js/commit/d6673bfa9d9a72472f4336758976aa3dd3a78785) Thanks [@BurntVal](https://github.com/BurntVal)! - Implement wallet send functionality - -- [#127](https://github.com/burnt-labs/xion.js/pull/127) [`00167f0`](https://github.com/burnt-labs/xion.js/commit/00167f0304a065d1d244c73b5ba02edc88f85460) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Updated UI for mainnet release - -- [#138](https://github.com/burnt-labs/xion.js/pull/138) [`1f006dd`](https://github.com/burnt-labs/xion.js/commit/1f006dd5ea7bfa67eb46d01057838b0d5287d466) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Adapted dashboard for better mobile UI - -- [#135](https://github.com/burnt-labs/xion.js/pull/135) [`6ea54fc`](https://github.com/burnt-labs/xion.js/commit/6ea54fc6fbca0de8434e09cb43b563e26643d7fc) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Added receive functionality to dashboard - -### Patch Changes - -- [#137](https://github.com/burnt-labs/xion.js/pull/137) [`8de24aa`](https://github.com/burnt-labs/xion.js/commit/8de24aa187e9316c9cf9a1f431f08e4ae629842e) Thanks [@justinbarry](https://github.com/justinbarry)! - Update casing of "XION" from across multiple components - -- Updated dependencies [[`d6673bf`](https://github.com/burnt-labs/xion.js/commit/d6673bfa9d9a72472f4336758976aa3dd3a78785), [`1f006dd`](https://github.com/burnt-labs/xion.js/commit/1f006dd5ea7bfa67eb46d01057838b0d5287d466), [`8de24aa`](https://github.com/burnt-labs/xion.js/commit/8de24aa187e9316c9cf9a1f431f08e4ae629842e), [`12b995f`](https://github.com/burnt-labs/xion.js/commit/12b995f5c3216bad7537d4232ea2bbd2340ced32)]: - - @burnt-labs/ui@0.1.0-alpha.8 - - @burnt-labs/constants@0.1.0-alpha.7 - - @burnt-labs/abstraxion@1.0.0-alpha.40 - -## 0.2.0-alpha.20 - -### Minor Changes - -- [#122](https://github.com/burnt-labs/xion.js/pull/122) [`f15f5a8`](https://github.com/burnt-labs/xion.js/commit/f15f5a837511d03dae21f16c5a229ddb17f0e565) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Added visual differences for net type to sign in modal - -- [#120](https://github.com/burnt-labs/xion.js/pull/120) [`0831c9a`](https://github.com/burnt-labs/xion.js/commit/0831c9a9a5685c1b591f96a46a98371711a00e3d) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Added visual elements to dashboard to distinguish between net type. - -### Patch Changes - -- [#123](https://github.com/burnt-labs/xion.js/pull/123) [`e4aa3f0`](https://github.com/burnt-labs/xion.js/commit/e4aa3f096cff27e6672393300532622040b0f781) Thanks [@icfor](https://github.com/icfor)! - Add staking grant for cancelling unbondings (MsgCancelUnbondingDelegation) - -- [#117](https://github.com/burnt-labs/xion.js/pull/117) [`6978612`](https://github.com/burnt-labs/xion.js/commit/697861259eff1199d143f79c7d8c0666eec4760b) Thanks [@BurntVal](https://github.com/BurntVal)! - Add configurability to allow for mainnet/testnet deployments - - For devs utilizing the `buildAddJWTAuthenticatorMsg` found in the @burnt-labs/signers package, please note that you will now need to pass in an aud string. Contact the team for details. - -- [#69](https://github.com/burnt-labs/xion.js/pull/69) [`989dab6`](https://github.com/burnt-labs/xion.js/commit/989dab66608481b47a745cb2a84d80903b5c93ec) Thanks [@lastly001](https://github.com/lastly001)! - chore: remove unused line - -- Updated dependencies [[`6978612`](https://github.com/burnt-labs/xion.js/commit/697861259eff1199d143f79c7d8c0666eec4760b)]: - - @burnt-labs/signers@0.1.0-alpha.9 - - @burnt-labs/abstraxion@1.0.0-alpha.39 - -## 0.2.0-alpha.19 - -### Patch Changes - -- Updated dependencies []: - - @burnt-labs/abstraxion@1.0.0-alpha.38 - -## 0.2.0-alpha.18 - -### Minor Changes - -- [#116](https://github.com/burnt-labs/xion.js/pull/116) [`774562b`](https://github.com/burnt-labs/xion.js/commit/774562b9b02fe82ab98d694d6a3b10c30f89c33e) Thanks [@justinbarry](https://github.com/justinbarry)! - Disable "Allow and Continue" on grant screen until the client is ready - -### Patch Changes - -- Updated dependencies [[`d7abb7a`](https://github.com/burnt-labs/xion.js/commit/d7abb7ab9f8f09dca90496f5cf42e97d6635304c)]: - - @burnt-labs/abstraxion@1.0.0-alpha.37 - -## 0.2.0-alpha.17 - -### Minor Changes - -- [#112](https://github.com/burnt-labs/xion.js/pull/112) [`04f02b1`](https://github.com/burnt-labs/xion.js/commit/04f02b1dc2f689b318c642628f32bb22f536ec4e) Thanks [@justinbarry](https://github.com/justinbarry)! - Fix window.keplr error on startup when keplr is not installed - -- [#111](https://github.com/burnt-labs/xion.js/pull/111) [`97685ba`](https://github.com/burnt-labs/xion.js/commit/97685bab1c531937a817c53bc314b079fe60cde8) Thanks [@icfor](https://github.com/icfor)! - Allow extra messages in the fee grant - -- [#109](https://github.com/burnt-labs/xion.js/pull/109) [`4594b46`](https://github.com/burnt-labs/xion.js/commit/4594b46fa3c668e02c5ccade8d3b7aae2e7c0d77) Thanks [@BurntVal](https://github.com/BurntVal)! - Impl Ethereum authenticator and signer - -### Patch Changes - -- [#109](https://github.com/burnt-labs/xion.js/pull/109) [`4594b46`](https://github.com/burnt-labs/xion.js/commit/4594b46fa3c668e02c5ccade8d3b7aae2e7c0d77) Thanks [@BurntVal](https://github.com/BurntVal)! - Move Keplr/Metamask signin buttons into an "advanced" dropdown panel. - -- Updated dependencies [[`4594b46`](https://github.com/burnt-labs/xion.js/commit/4594b46fa3c668e02c5ccade8d3b7aae2e7c0d77), [`6ea5c28`](https://github.com/burnt-labs/xion.js/commit/6ea5c282a9cd4ca15068052a4b615cd902f6113d)]: - - @burnt-labs/abstraxion@1.0.0-alpha.36 - - @burnt-labs/signers@0.1.0-alpha.8 - - @burnt-labs/ui@0.1.0-alpha.7 - -## 0.2.0-alpha.16 - -### Minor Changes - -- [#78](https://github.com/burnt-labs/xion.js/pull/78) [`6de3996`](https://github.com/burnt-labs/xion.js/commit/6de39966e4a308c740ab8e66eb00a4c1f2d479b4) Thanks [@BurntVal](https://github.com/BurntVal)! - introduce the ability to add a secp256k1 authenticator (via Keplr) and use it as a signer for transactions - -- # [#107](https://github.com/burnt-labs/xion.js/pull/107) [`2c33c31`](https://github.com/burnt-labs/xion.js/commit/2c33c3136280558ec505b401911244310432ebd3) Thanks [@justinbarry](https://github.com/justinbarry)! - - -# Staking Grants - -Add the ability for dapps to request staking grants be give via the dashboard. To request a grant, the dapp will need to set the `stake` prop to `true` in the config of the `abstraxion` provider. - -```jsx - - {children} - -``` - -This will grant `StakeAuthorization` to delegate, undelegate, redelegate and a GenericAuthorization to exec a MsgWithdrawDelegatorReward msg along with a feegrant for these message to cover the fees. - -# Bank Send Grants - -Add the ability for dapps to request bank send grants be give via the dashboard. To request a grant, the dapp will need to set pass the requested `denom` and `amount` to the config of the `abstraxion` provider. - -```jsx - - {children} - -``` - -### Patch Changes - -- Updated dependencies [[`6de3996`](https://github.com/burnt-labs/xion.js/commit/6de39966e4a308c740ab8e66eb00a4c1f2d479b4), [`2c33c31`](https://github.com/burnt-labs/xion.js/commit/2c33c3136280558ec505b401911244310432ebd3)]: - - @burnt-labs/signers@0.1.0-alpha.7 - - @burnt-labs/ui@0.1.0-alpha.6 - - @burnt-labs/abstraxion@1.0.0-alpha.35 - -## 0.2.0-alpha.15 - -### Patch Changes - -- Updated dependencies [[`0236eea`](https://github.com/burnt-labs/xion.js/commit/0236eea22a4c5a9b0b9b413cac4a8b62038a4456)]: - - @burnt-labs/abstraxion@1.0.0-alpha.34 - -## 0.2.0-alpha.14 - -### Minor Changes - -- [#94](https://github.com/burnt-labs/xion.js/pull/94) [`c695fbf`](https://github.com/burnt-labs/xion.js/commit/c695fbfa636dd149a2f7305cd87298c6cc84d67e) Thanks [@justinbarry](https://github.com/justinbarry)! - Update the following packages to the latest version: - - | Package | Version | - | ------------------------- | ------- | - | @cosmjs/cosmwasm-stargate | ^0.32.2 | - | @cosmjs/proto-signing | ^0.32.2 | - | @cosmjs/stargate | ^0.32.2 | - | @cosmjs/tendermint-rpc | ^0.32.2 | - | cosmjs-types | ^0.9.0 | - -### Patch Changes - -- Updated dependencies [[`c695fbf`](https://github.com/burnt-labs/xion.js/commit/c695fbfa636dd149a2f7305cd87298c6cc84d67e)]: - - @burnt-labs/abstraxion@1.0.0-alpha.33 - - @burnt-labs/signers@0.1.0-alpha.6 - -## 0.2.0-alpha.13 - -### Minor Changes - -- [#97](https://github.com/burnt-labs/xion.js/pull/97) [`9ff23cb`](https://github.com/burnt-labs/xion.js/commit/9ff23cb244c271fb7438f2caef2b18ce4fa0afb8) Thanks [@justinbarry](https://github.com/justinbarry)! - Update default RPC/Rest Urls and allow for dapps to pass in rest url via the AbstraxionProvider. - - ```typescript - - {children} - - - ``` - -### Patch Changes - -- Updated dependencies [[`9ff23cb`](https://github.com/burnt-labs/xion.js/commit/9ff23cb244c271fb7438f2caef2b18ce4fa0afb8)]: - - @burnt-labs/abstraxion@1.0.0-alpha.32 - - @burnt-labs/constants@0.1.0-alpha.6 - -## 0.2.0-alpha.12 - -### Minor Changes - -- [#95](https://github.com/burnt-labs/xion.js/pull/95) [`e6f0696`](https://github.com/burnt-labs/xion.js/commit/e6f06961f7368447a18fbd76bf3500cab8a686a2) Thanks [@justinbarry](https://github.com/justinbarry)! - Allow setting of the dashboard RPC via NEXT_PUBLIC_RPC_URL env var - -### Patch Changes - -- Updated dependencies [[`415f15a`](https://github.com/burnt-labs/xion.js/commit/415f15a50a85b55271e8ecf220801f67c4b3f7d1)]: - - @burnt-labs/abstraxion@1.0.0-alpha.31 - -## 0.2.0-alpha.11 - -### Patch Changes - -- Updated dependencies [[`a9a882a`](https://github.com/burnt-labs/xion.js/commit/a9a882a23ff3227591287e7dc28438f7644a7bfa)]: - - @burnt-labs/abstraxion@1.0.0-alpha.30 - -## 0.2.0-alpha.10 - -### Patch Changes - -- Updated dependencies [[`874ef2b`](https://github.com/burnt-labs/xion.js/commit/874ef2b6e0096285beff6752c7e2dc1e1c276ba4)]: - - @burnt-labs/constants@0.1.0-alpha.5 - - @burnt-labs/abstraxion@1.0.0-alpha.29 - -## 0.2.0-alpha.9 - -### Patch Changes - -- Updated dependencies [[`e60fb47`](https://github.com/burnt-labs/xion.js/commit/e60fb4714b8cdf90ad2cfbba5c77b8b78a11542b), [`f46fa86`](https://github.com/burnt-labs/xion.js/commit/f46fa8672ccf38d66b9bde244eecef573ee86ded)]: - - @burnt-labs/constants@0.1.0-alpha.4 - - @burnt-labs/abstraxion@1.0.0-alpha.28 - -## 0.2.0-alpha.8 - -### Minor Changes - -- [#80](https://github.com/burnt-labs/xion.js/pull/80) [`00dbb89`](https://github.com/burnt-labs/xion.js/commit/00dbb89f13028ec5251c744b1130e82b86afb8d6) Thanks [@justinbarry](https://github.com/justinbarry)! - Add sentry.io error tracking - -- [#83](https://github.com/burnt-labs/xion.js/pull/83) [`7dd82fe`](https://github.com/burnt-labs/xion.js/commit/7dd82fe902ca1d0f64f91a1dd185be965beb6331) Thanks [@justinbarry](https://github.com/justinbarry)! - Add ability for a DAPP to request a token budget alongside contract exec privileges - -### Patch Changes - -- [#77](https://github.com/burnt-labs/xion.js/pull/77) [`cc24142`](https://github.com/burnt-labs/xion.js/commit/cc24142ce8ea3f62c83f35b528c5739427208d25) Thanks [@justinbarry](https://github.com/justinbarry)! - Enable vercel analytics on dashboard - -- [#81](https://github.com/burnt-labs/xion.js/pull/81) [`6afb4dd`](https://github.com/burnt-labs/xion.js/commit/6afb4dd96af14bae2bd0a06632b37613e69faafb) Thanks [@justinbarry](https://github.com/justinbarry)! - Add error tracking for chain errors - -- [#75](https://github.com/burnt-labs/xion.js/pull/75) [`2da222b`](https://github.com/burnt-labs/xion.js/commit/2da222bd97540a0eb5aefb3efd2c93e1fafe3ce7) Thanks [@justinbarry](https://github.com/justinbarry)! - Remove passkey biometrics button, remove white avatar and update copy - -- Updated dependencies [[`7dd82fe`](https://github.com/burnt-labs/xion.js/commit/7dd82fe902ca1d0f64f91a1dd185be965beb6331)]: - - @burnt-labs/abstraxion@1.0.0-alpha.27 - -## 0.2.0-alpha.7 - -### Patch Changes - -- Updated dependencies [[`4a281fc`](https://github.com/burnt-labs/xion.js/commit/4a281fcfa7ead6cb91f935e853b0a1bf7b98dcc9)]: - - @burnt-labs/constants@0.0.1-alpha.3 - - @burnt-labs/signers@0.1.0-alpha.5 - - @burnt-labs/abstraxion@1.0.0-alpha.26 - -## 0.2.0-alpha.6 - -### Minor Changes - -- [#57](https://github.com/burnt-labs/xion.js/pull/57) [`5e0d06f`](https://github.com/burnt-labs/xion.js/commit/5e0d06fd329422c7e0c7bcf63cc5929a8617502c) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Moved display logic to internal "useModal" hook. Consumers will need to change their strategy from a custom piece of state within their app to utilizing this new hook. The login flow will now be a single tab experience. - -- [#57](https://github.com/burnt-labs/xion.js/pull/57) [`5e0d06f`](https://github.com/burnt-labs/xion.js/commit/5e0d06fd329422c7e0c7bcf63cc5929a8617502c) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Added font files and small ui tweaks - -### Patch Changes - -- Updated dependencies [[`5e0d06f`](https://github.com/burnt-labs/xion.js/commit/5e0d06fd329422c7e0c7bcf63cc5929a8617502c), [`5e0d06f`](https://github.com/burnt-labs/xion.js/commit/5e0d06fd329422c7e0c7bcf63cc5929a8617502c), [`39fabfe`](https://github.com/burnt-labs/xion.js/commit/39fabfe78b029e55aa417ec9751696d861a905b0)]: - - @burnt-labs/abstraxion@1.0.0-alpha.25 - - @burnt-labs/ui@0.1.0-alpha.5 - -## 0.2.0-alpha.5 - -### Minor Changes - -- [#61](https://github.com/burnt-labs/xion.js/pull/61) [`105279a`](https://github.com/burnt-labs/xion.js/commit/105279afb824940e744a4366be25b83fb8fb74e0) Thanks [@justinbarry](https://github.com/justinbarry)! - Fix vite issue with graz package deep imports - -### Patch Changes - -- Updated dependencies [[`105279a`](https://github.com/burnt-labs/xion.js/commit/105279afb824940e744a4366be25b83fb8fb74e0)]: - - @burnt-labs/abstraxion@0.1.0-alpha.24 - -## 0.2.0-alpha.4 - -### Patch Changes - -- Updated dependencies [[`2257a1f`](https://github.com/burnt-labs/xion.js/commit/2257a1f5249a1efaa6f7d15522ee330981ae8952)]: - - @burnt-labs/abstraxion@0.1.0-alpha.23 - - @burnt-labs/signers@0.1.0-alpha.4 - -## 0.2.0-alpha.3 - -### Patch Changes - -- Updated dependencies [[`6a6fdd2`](https://github.com/burnt-labs/xion.js/commit/6a6fdd253a1dc81873d271d2ac5e87100ef18ff1), [`dd8680f`](https://github.com/burnt-labs/xion.js/commit/dd8680f6bc18e15a531993be048e9db83d79b488)]: - - @burnt-labs/abstraxion@0.1.0-alpha.22 - - @burnt-labs/ui@0.1.0-alpha.4 - -## 0.2.0-alpha.2 - -### Minor Changes - -- [#41](https://github.com/burnt-labs/xion.js/pull/41) [`a269cdf`](https://github.com/burnt-labs/xion.js/commit/a269cdf88722408e91b643d12ce4181ce26296f3) Thanks [@BurntVal](https://github.com/BurntVal)! - abstraxion dynamic url for grant creation on dashboard - -- [#33](https://github.com/burnt-labs/xion.js/pull/33) [`e7e582b`](https://github.com/burnt-labs/xion.js/commit/e7e582be198bca6b3bd0cf42ad68d8f7428132cb) Thanks [@BurntVal](https://github.com/BurntVal)! - Wrap contract grant message inside a `ContractExecutionAuthorization` message - -### Patch Changes - -- Updated dependencies [[`a269cdf`](https://github.com/burnt-labs/xion.js/commit/a269cdf88722408e91b643d12ce4181ce26296f3), [`e7e582b`](https://github.com/burnt-labs/xion.js/commit/e7e582be198bca6b3bd0cf42ad68d8f7428132cb), [`56b9f87`](https://github.com/burnt-labs/xion.js/commit/56b9f87482a7210072eaa279960d1ff01ad5b4e0)]: - - @burnt-labs/abstraxion@0.1.0-alpha.21 - - @burnt-labs/tailwind-config@0.0.1-alpha.2 - - @burnt-labs/ui@0.0.1-alpha.3 - -## 0.2.0-alpha.1 - -### Minor Changes - -- [#37](https://github.com/burnt-labs/xion.js/pull/37) [`30b8913`](https://github.com/burnt-labs/xion.js/commit/30b891389890bb85486d2e5d1d49ca2c9a16f8b8) Thanks [@justinbarry](https://github.com/justinbarry)! - Change API endpoints to the 'live' infrastructure and the live stytch project id - -### Patch Changes - -- Updated dependencies [[`30b8913`](https://github.com/burnt-labs/xion.js/commit/30b891389890bb85486d2e5d1d49ca2c9a16f8b8)]: - - @burnt-labs/abstraxion@0.1.0-alpha.20 - - @burnt-labs/signers@0.1.0-alpha.3 - -## 0.1.1-alpha.0 - -### Patch Changes - -- [#32](https://github.com/burnt-labs/xion.js/pull/32) [`f6e5618`](https://github.com/burnt-labs/xion.js/commit/f6e5618f36ff15e6f642efad209f88151b395b7a) Thanks [@justinbarry](https://github.com/justinbarry)! - Initial commit of dashbaord - -- Updated dependencies [[`7f498ee`](https://github.com/burnt-labs/xion.js/commit/7f498ee6c58a897f0a6cda76ecb60b52dd495846), [`5a17b99`](https://github.com/burnt-labs/xion.js/commit/5a17b99b56e62535297bd2b5a1086df68ee82ee1)]: - - @burnt-labs/abstraxion@0.1.0-alpha.19 diff --git a/apps/abstraxion-dashboard/README.md b/apps/abstraxion-dashboard/README.md deleted file mode 100644 index c4033664..00000000 --- a/apps/abstraxion-dashboard/README.md +++ /dev/null @@ -1,36 +0,0 @@ -This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). - -## Getting Started - -First, run the development server: - -```bash -npm run dev -# or -yarn dev -# or -pnpm dev -# or -bun dev -``` - -Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. - -You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. - -This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font. - -## Learn More - -To learn more about Next.js, take a look at the following resources: - -- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. -- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. - -You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! - -## Deploy on Vercel - -The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. - -Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. diff --git a/apps/abstraxion-dashboard/abstraxion-types.d.ts b/apps/abstraxion-dashboard/abstraxion-types.d.ts deleted file mode 100644 index b3804b70..00000000 --- a/apps/abstraxion-dashboard/abstraxion-types.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -interface Window { - ethereum: any; - keplr: any; -} diff --git a/apps/abstraxion-dashboard/app/globals.css b/apps/abstraxion-dashboard/app/globals.css deleted file mode 100644 index ba086186..00000000 --- a/apps/abstraxion-dashboard/app/globals.css +++ /dev/null @@ -1,8 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; -@layer utilities { - .flex-2 { - flex: 2; - } -} diff --git a/apps/abstraxion-dashboard/app/icon.svg b/apps/abstraxion-dashboard/app/icon.svg deleted file mode 100644 index d96f9957..00000000 --- a/apps/abstraxion-dashboard/app/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/apps/abstraxion-dashboard/app/layout.tsx b/apps/abstraxion-dashboard/app/layout.tsx deleted file mode 100644 index 0dc78d2d..00000000 --- a/apps/abstraxion-dashboard/app/layout.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import type { Metadata } from "next"; -import localFont from "next/font/local"; -import { Providers } from "./providers"; -import "./globals.css"; -import "@burnt-labs/ui/dist/index.css"; -import { Analytics } from "@vercel/analytics/react"; - -const akkuratLL = localFont({ - src: [ - { - path: "../public/fonts/AkkuratLLWeb-Thin.woff2", - weight: "100", - }, - { - path: "../public/fonts/AkkuratLLWeb-Light.woff2", - weight: "200 300", - }, - { - path: "../public/fonts/AkkuratLLWeb-Regular.woff2", - weight: "400", - }, - { - path: "../public/fonts/AkkuratLLWeb-Bold.woff2", - weight: "500 700", - }, - { - path: "../public/fonts/AkkuratLLWeb-Black.woff2", - weight: "800 900", - }, - ], - variable: "--font-akkuratLL", -}); - -export const metadata: Metadata = { - title: "XION Account Dashboard", - description: "A dashboard for managing XION accounts.", -}; - -export default function RootLayout({ - children, -}: { - children: React.ReactNode; -}) { - return ( - - - {children} - - - - ); -} diff --git a/apps/abstraxion-dashboard/app/page.tsx b/apps/abstraxion-dashboard/app/page.tsx deleted file mode 100644 index 53adba9f..00000000 --- a/apps/abstraxion-dashboard/app/page.tsx +++ /dev/null @@ -1,87 +0,0 @@ -"use client"; -import { useContext, useState } from "react"; -import { useSearchParams } from "next/navigation"; -import { AccountInfo } from "@/components/AccountInfo"; -import { AbstraxionContext } from "@/components/AbstraxionContext"; -import { Overview } from "@/components/Overview"; -import { Sidebar } from "@/components/Sidebar"; -import { Abstraxion } from "@/components/Abstraxion"; -import { useAbstraxionAccount } from "../hooks"; -import Image from "next/image"; -import type { AbstraxionAccount } from "@/types"; - -export default function Home() { - const searchParams = useSearchParams(); - const { data: account } = useAbstraxionAccount(); - - const contracts = searchParams.get("contracts"); - const stake = Boolean(searchParams.get("stake")); - const bank = searchParams.get("bank"); - const grantee = searchParams.get("grantee"); - const { isOpen, setIsOpen, isMainnet } = useContext(AbstraxionContext); - - const [showMobileSiderbar, setShowMobileSiderbar] = useState(false); - - return ( - <> - {!account?.id || (grantee && (contracts || stake || bank)) ? ( -
- null} isOpen={true} /> -
- ) : ( -
- {showMobileSiderbar ? ( -
- setShowMobileSiderbar(false)} /> -
- ) : null} -
- -
- -
-
-
- XION Logo -
- {isMainnet ? "MAINNET" : "TESTNET"} -
-
-
setShowMobileSiderbar(true)}> -
-
-
-
-
-
- setIsOpen(false)} isOpen={isOpen} /> - {/* Tiles */} -
- {/* Left Tiles */} -
-

- Overview -

- -

- Account Info -

- -
- {/* Right Tiles */} -
-
-
-
-
-
- )} - - ); -} diff --git a/apps/abstraxion-dashboard/app/providers.tsx b/apps/abstraxion-dashboard/app/providers.tsx deleted file mode 100644 index 66ca654f..00000000 --- a/apps/abstraxion-dashboard/app/providers.tsx +++ /dev/null @@ -1,14 +0,0 @@ -"use client"; - -import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; -import { AbstraxionProvider } from "../components/Abstraxion"; - -const queryClient = new QueryClient(); - -export function Providers({ children }: { children: React.ReactNode }) { - return ( - - {children} - - ); -} diff --git a/apps/abstraxion-dashboard/components/Abstraxion/index.tsx b/apps/abstraxion-dashboard/components/Abstraxion/index.tsx deleted file mode 100644 index 3fe4a26d..00000000 --- a/apps/abstraxion-dashboard/components/Abstraxion/index.tsx +++ /dev/null @@ -1,145 +0,0 @@ -import { useContext, useEffect } from "react"; -import { GrazProvider } from "graz"; -import { StytchProvider } from "@stytch/nextjs"; -import { ApolloProvider } from "@apollo/client"; -import { - AbstraxionContext, - AbstraxionContextProps, - AbstraxionContextProvider, -} from "@/components/AbstraxionContext"; -import { apolloClient, stytchClient } from "@/lib"; -import { Dialog, DialogContent } from "@burnt-labs/ui"; -import { AbstraxionSignin } from "@/components/AbstraxionSignin"; -import { useAbstraxionAccount } from "@/hooks"; -import { AbstraxionWallets } from "@/components/AbstraxionWallets"; -import { ErrorDisplay } from "@/components/ErrorDisplay"; -import { useSearchParams } from "next/navigation"; -import { AbstraxionGrant } from "../AbstraxionGrant"; -import Image from "next/image"; - -export interface ModalProps { - onClose: VoidFunction; - isOpen: boolean; -} - -export const Abstraxion = ({ isOpen, onClose }: ModalProps) => { - const searchParams = useSearchParams(); - - const { abstraxionError, isMainnet } = useContext( - AbstraxionContext, - ) as AbstraxionContextProps; - - const { isConnected, data: account } = useAbstraxionAccount(); - - const contracts = searchParams.get("contracts"); - const stake = Boolean(searchParams.get("stake")); - const bank = searchParams.get("bank"); - - let bankArray; - try { - bankArray = JSON.parse(bank || ""); - } catch (e) { - // If the bank is not a valid JSON, we split it by comma. Dapp using old version of the library. - bankArray = []; - } - - let contractsArray; - try { - contractsArray = JSON.parse(contracts || ""); - } catch (e) { - // If the contracts are not a valid JSON, we split them by comma. Dapp using old version of the library. - contractsArray = contracts?.split(",") || []; - } - - const grantee = searchParams.get("grantee"); - useEffect(() => { - const closeOnEscKey = (e: any) => (e.key === "Escape" ? onClose() : null); - document.addEventListener("keydown", closeOnEscKey); - return () => { - document.removeEventListener("keydown", closeOnEscKey); - }; - }, [onClose]); - - if (!isOpen) return null; - - return ( - <> - - - {abstraxionError ? ( - - ) : account?.id && - grantee && - // We support granting any combunation of - (contractsArray.length > 0 || stake || bankArray.length > 0) ? ( - - ) : isConnected ? ( - - ) : ( - - )} - - - {/* TOS Footer */} - {!isConnected && ( -
-
- - By continuing, you agree to and acknowledge that you have read and - understand the - - - Disclaimer - - . -
-
-

- Powered by -

-
-
- {isMainnet ? "MAINNET" : "TESTNET"} -
- - XION Logo - -
-
-
- )} - - ); -}; - -export const AbstraxionProvider = ({ - children, -}: { - children: React.ReactNode; -}) => { - return ( - - - - {children} - - - - ); -}; diff --git a/apps/abstraxion-dashboard/components/AbstraxionContext/index.tsx b/apps/abstraxion-dashboard/components/AbstraxionContext/index.tsx deleted file mode 100644 index 65ae5fa9..00000000 --- a/apps/abstraxion-dashboard/components/AbstraxionContext/index.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { ReactNode, createContext, useState } from "react"; -import { getEnvStringOrThrow } from "@/utils"; -import { ChainInfo } from "@burnt-labs/constants"; - -type ConnectionType = "stytch" | "graz" | "metamask" | "okx" | "none"; - -export interface AbstraxionContextProps { - connectionType: ConnectionType; - setConnectionType: React.Dispatch>; - abstractAccount: any; // TODO: Properly define interface here - setAbstractAccount: React.Dispatch; - abstraxionError: string; - setAbstraxionError: React.Dispatch>; - apiUrl: string; - chainInfo: ChainInfo; - isMainnet: boolean; - isOpen: boolean; - setIsOpen: React.Dispatch>; -} - -export const AbstraxionContext = createContext( - {} as AbstraxionContextProps, -); - -export const AbstraxionContextProvider = ({ - children, -}: { - children: ReactNode; -}) => { - const [connectionType, setConnectionType] = useState("none"); - const [abstractAccount, setAbstractAccount] = useState( - undefined, - ); - const [abstraxionError, setAbstraxionError] = useState(""); - const [isOpen, setIsOpen] = useState(false); - - const serializedChainInfo = getEnvStringOrThrow( - "NEXT_PUBLIC_DEFAULT_CHAIN_INFO", - process.env.NEXT_PUBLIC_DEFAULT_CHAIN_INFO, - ); - const chainInfo = JSON.parse(serializedChainInfo); - const apiUrl = getEnvStringOrThrow( - "NEXT_PUBLIC_DEFAULT_API_URL", - process.env.NEXT_PUBLIC_DEFAULT_API_URL, - ); - const isMainnet = - getEnvStringOrThrow( - "NEXT_PUBLIC_DEPLOYMENT_ENV", - process.env.NEXT_PUBLIC_DEPLOYMENT_ENV, - ) === "mainnet" - ? true - : false; - - return ( - - {children} - - ); -}; diff --git a/apps/abstraxion-dashboard/components/AbstraxionGrant/generateBankGrant.tsx b/apps/abstraxion-dashboard/components/AbstraxionGrant/generateBankGrant.tsx deleted file mode 100644 index 566547b0..00000000 --- a/apps/abstraxion-dashboard/components/AbstraxionGrant/generateBankGrant.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { MsgGrant } from "cosmjs-types/cosmos/authz/v1beta1/tx"; -import { SendAuthorization } from "cosmjs-types/cosmos/bank/v1beta1/authz"; - -export const generateBankGrant = ( - expiration: bigint, - grantee: string, - granter: string, - bank: { denom: string; amount: string }[], -) => { - return { - typeUrl: MsgGrant.typeUrl, - value: MsgGrant.fromPartial({ - grant: { - authorization: { - typeUrl: SendAuthorization.typeUrl, - value: SendAuthorization.encode( - SendAuthorization.fromPartial({ - spendLimit: bank, - }), - ).finish(), - }, - expiration: { - seconds: expiration, - }, - }, - grantee, - granter, - }), - }; -}; diff --git a/apps/abstraxion-dashboard/components/AbstraxionGrant/generateContractGrant.tsx b/apps/abstraxion-dashboard/components/AbstraxionGrant/generateContractGrant.tsx deleted file mode 100644 index 85d97bc7..00000000 --- a/apps/abstraxion-dashboard/components/AbstraxionGrant/generateContractGrant.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import type { ContractGrantDescription } from "@burnt-labs/abstraxion"; -import { - AllowAllMessagesFilter, - CombinedLimit, - ContractExecutionAuthorization, - MaxCallsLimit, -} from "cosmjs-types/cosmwasm/wasm/v1/authz"; -import { MsgGrant } from "cosmjs-types/cosmos/authz/v1beta1/tx"; - -export const generateContractGrant = ( - expiration: bigint, - grantee: string, - granter: string, - contracts: ContractGrantDescription[], -) => { - const contractExecutionAuthorizationValue = - ContractExecutionAuthorization.encode( - ContractExecutionAuthorization.fromPartial({ - grants: contracts.map((contractGrantDescription) => { - if (typeof contractGrantDescription === "string") { - const contract = contractGrantDescription; - return { - contract, - limit: { - typeUrl: MaxCallsLimit.typeUrl, - value: MaxCallsLimit.encode( - MaxCallsLimit.fromPartial({ - remaining: BigInt("255"), - }), - ).finish(), - }, - filter: { - typeUrl: AllowAllMessagesFilter.typeUrl, - }, - }; - } - - const { address, amounts } = contractGrantDescription; - return { - contract: address, - limit: { - typeUrl: "/cosmwasm.wasm.v1.CombinedLimit", - value: CombinedLimit.encode( - CombinedLimit.fromPartial({ - callsRemaining: BigInt("255"), - amounts, - }), - ).finish(), - }, - filter: { - typeUrl: AllowAllMessagesFilter.typeUrl, - }, - }; - }), - }), - ).finish(); - const grantValue = MsgGrant.fromPartial({ - grant: { - authorization: { - typeUrl: ContractExecutionAuthorization.typeUrl, - value: contractExecutionAuthorizationValue, - }, - expiration: { - seconds: expiration, - }, - }, - grantee, - granter, - }); - - return { - typeUrl: MsgGrant.typeUrl, - value: grantValue, - }; -}; diff --git a/apps/abstraxion-dashboard/components/AbstraxionGrant/generateStakeGrant.tsx b/apps/abstraxion-dashboard/components/AbstraxionGrant/generateStakeGrant.tsx deleted file mode 100644 index 13cc9c7d..00000000 --- a/apps/abstraxion-dashboard/components/AbstraxionGrant/generateStakeGrant.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import { MsgGrant, MsgExec } from "cosmjs-types/cosmos/authz/v1beta1/tx"; -import { GenericAuthorization } from "cosmjs-types/cosmos/authz/v1beta1/authz"; -import { MsgWithdrawDelegatorReward } from "cosmjs-types/cosmos/distribution/v1beta1/tx"; -import { - AuthorizationType, - StakeAuthorization, -} from "cosmjs-types/cosmos/staking/v1beta1/authz"; -import { - MsgCancelUnbondingDelegation, - MsgDelegate, - MsgUndelegate, -} from "cosmjs-types/cosmos/staking/v1beta1/tx"; -import { - AllowedMsgAllowance, - BasicAllowance, -} from "cosmjs-types/cosmos/feegrant/v1beta1/feegrant"; -import { MsgGrantAllowance } from "cosmjs-types/cosmos/feegrant/v1beta1/tx"; - -export const generateStakeGrant = ( - expiration: bigint, - grantee: string, - granter: string, -): Array<{ - typeUrl: string; - value: MsgGrant | MsgGrantAllowance; -}> => { - const feeGrant = { - typeUrl: MsgGrantAllowance.typeUrl, - value: MsgGrantAllowance.fromPartial({ - allowance: { - typeUrl: AllowedMsgAllowance.typeUrl, - value: AllowedMsgAllowance.encode( - AllowedMsgAllowance.fromPartial({ - allowance: { - typeUrl: BasicAllowance.typeUrl, - value: BasicAllowance.encode( - BasicAllowance.fromPartial({ - spendLimit: [], - expiration: { - seconds: expiration, - }, - }), - ).finish(), - }, - allowedMessages: [ - MsgWithdrawDelegatorReward.typeUrl, - MsgDelegate.typeUrl, - MsgUndelegate.typeUrl, - MsgExec.typeUrl, - MsgCancelUnbondingDelegation.typeUrl, - ], - }), - ).finish(), - }, - grantee, - granter, - }), - }; - - // Need to grant MsgWithdrawDelegatorReward and MsgCancelUnbondingDelegation - const genericMsgGrants = [ - MsgWithdrawDelegatorReward.typeUrl, - MsgCancelUnbondingDelegation.typeUrl, - ].map((msg) => ({ - typeUrl: MsgGrant.typeUrl, - value: MsgGrant.fromPartial({ - grant: { - authorization: { - typeUrl: GenericAuthorization.typeUrl, - value: GenericAuthorization.encode( - GenericAuthorization.fromPartial({ - msg, - }), - ).finish(), - }, - expiration: { - seconds: expiration, - }, - }, - grantee, - granter, - }), - })); - - const grants = [ - AuthorizationType.AUTHORIZATION_TYPE_DELEGATE, - AuthorizationType.AUTHORIZATION_TYPE_UNDELEGATE, - AuthorizationType.AUTHORIZATION_TYPE_REDELEGATE, - ].map((authorizationType) => ({ - typeUrl: MsgGrant.typeUrl, - value: MsgGrant.fromPartial({ - grant: { - authorization: { - typeUrl: StakeAuthorization.typeUrl, - value: StakeAuthorization.encode( - StakeAuthorization.fromPartial({ - authorizationType, - }), - ).finish(), - }, - expiration: { - seconds: expiration, - }, - }, - grantee, - granter, - }), - })); - - return [...grants, ...genericMsgGrants, feeGrant]; -}; diff --git a/apps/abstraxion-dashboard/components/AbstraxionGrant/index.tsx b/apps/abstraxion-dashboard/components/AbstraxionGrant/index.tsx deleted file mode 100644 index fc04ce27..00000000 --- a/apps/abstraxion-dashboard/components/AbstraxionGrant/index.tsx +++ /dev/null @@ -1,189 +0,0 @@ -"use client"; -import { useEffect, useState } from "react"; -import Image from "next/image"; -import { Button, Spinner } from "@burnt-labs/ui"; -import { useAbstraxionAccount, useAbstraxionSigningClient } from "@/hooks"; -import burntAvatar from "@/public/burntAvatarCircle.png"; -import { CheckIcon } from "../Icons"; -import { EncodeObject } from "@cosmjs/proto-signing"; -import { useSearchParams } from "next/navigation"; -import * as Sentry from "@sentry/nextjs"; -import type { ContractGrantDescription } from "@burnt-labs/abstraxion"; -import { assertIsDeliverTxSuccess } from "@cosmjs/stargate/build/stargateclient"; -import { generateBankGrant } from "@/components/AbstraxionGrant/generateBankGrant.tsx"; -import { generateContractGrant } from "@/components/AbstraxionGrant/generateContractGrant.tsx"; -import { generateStakeGrant } from "@/components/AbstraxionGrant/generateStakeGrant.tsx"; - -interface AbstraxionGrantProps { - contracts: ContractGrantDescription[]; - grantee: string; - stake: boolean; - bank: { denom: string; amount: string }[]; -} - -export const AbstraxionGrant = ({ - contracts, - grantee, - stake, - bank, -}: AbstraxionGrantProps) => { - const { client } = useAbstraxionSigningClient(); - const { data: account } = useAbstraxionAccount(); - const searchParams = useSearchParams(); - - const [inProgress, setInProgress] = useState(false); - const [showSuccess, setShowSuccess] = useState(false); - - useEffect(function redirectToDapp() { - if (showSuccess && searchParams.get("redirect_uri")) { - let redirectUri = new URLSearchParams(window.location.search).get( - "redirect_uri", - ); - let url: URL | null = null; - if (redirectUri) { - url = new URL(redirectUri); - let params = new URLSearchParams(url.search); - params.append("granted", "true"); - params.append("granter", account.id); - url.search = params.toString(); - redirectUri = url.toString(); - window.location.href = redirectUri; - } - } - }); - - const grant = async () => { - setInProgress(true); - if (!client) { - throw new Error("no client"); - } - - if (!account) { - throw new Error("no account"); - } - - const granter = account.id; - const timestampThreeMonthsFromNow = BigInt( - Math.floor( - new Date(new Date().setMonth(new Date().getMonth() + 3)).getTime() / - 1000, - ), - ); - - const msgs: EncodeObject[] = []; - - if (contracts.length > 0) { - msgs.push( - generateContractGrant( - timestampThreeMonthsFromNow, - grantee, - granter, - contracts, - ), - ); - } - - if (stake) { - msgs.push( - ...generateStakeGrant(timestampThreeMonthsFromNow, grantee, granter), - ); - } - - if (bank.length > 0) { - msgs.push( - generateBankGrant(timestampThreeMonthsFromNow, grantee, granter, bank), - ); - } - - try { - if (msgs.length === 0) { - throw new Error("No grants to send"); - } - - const deliverTxResponse = await client?.signAndBroadcast( - account.id, - msgs, - { - amount: [{ amount: "0", denom: "uxion" }], - gas: "500000", - }, - ); - - assertIsDeliverTxSuccess({ - ...deliverTxResponse, - gasUsed: BigInt(deliverTxResponse.gasUsed), - gasWanted: BigInt(deliverTxResponse.gasWanted), - }); - - setShowSuccess(true); - setInProgress(false); - } catch (error) { - setInProgress(false); - console.log("something went wrong: ", error); - Sentry.captureException(error); - } - }; - - if (inProgress) { - return ( -
- -
- ); - } - - return ( -
- {showSuccess ? ( - <> -

- Your sign-in
- was Successful! -

-

- Please switch back to the previous window to continue your - experience. -

- - ) : ( - <> -
- Burnt Avatar -
-
-

- A 3rd party would like to: -

-
-
    -
  • - - - - Have access to your account -
  • -
  • - - - - Log you in to their app -
  • -
-
-
- - -
-
- - )} -
- ); -}; diff --git a/apps/abstraxion-dashboard/components/AbstraxionSignin/index.tsx b/apps/abstraxion-dashboard/components/AbstraxionSignin/index.tsx deleted file mode 100644 index 8e12a567..00000000 --- a/apps/abstraxion-dashboard/components/AbstraxionSignin/index.tsx +++ /dev/null @@ -1,231 +0,0 @@ -"use client"; -import { useContext, useEffect, useState } from "react"; -import Image from "next/image"; -import { useStytch } from "@stytch/nextjs"; -import { Button, Input, ModalSection } from "@burnt-labs/ui"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "../AbstraxionContext"; -import { getHumanReadablePubkey } from "@/utils"; - -const okxFlag = process.env.NEXT_PUBLIC_OKX_FLAG === "true"; -const deploymentEnv = process.env.NEXT_PUBLIC_DEPLOYMENT_ENV; - -// Variable to be true if deploymentEnv is "testnet", otherwise check okxFlag for "mainnet" -const shouldEnableFeature = - deploymentEnv === "testnet" || (deploymentEnv === "mainnet" && okxFlag); - -export const AbstraxionSignin = () => { - const stytchClient = useStytch(); - - const [email, setEmail] = useState(""); - const [methodId, setMethodId] = useState(""); - const [emailError, setEmailError] = useState(""); - const [isOnOtpStep, setIsOnOtpStep] = useState(false); - const [otp, setOtp] = useState(""); - const [otpError, setOtpError] = useState(""); - const [timeLeft, setTimeLeft] = useState(null); - const [showAdvanced, setShowAdvanced] = useState(false); - - const { setConnectionType, setAbstraxionError, chainInfo } = useContext( - AbstraxionContext, - ) as AbstraxionContextProps; - - const handleEmailChange = (e: React.ChangeEvent) => { - setEmailError(""); - setEmail(e.target.value.toLowerCase()); - }; - - const handleOtpChange = (e: React.ChangeEvent) => { - setOtpError(""); - setOtp(e.target.value); - }; - - const EMAIL_REGEX = /\S+@\S+\.\S+/; - const validateEmail = () => { - if (EMAIL_REGEX.test(email) || email === "") { - setEmailError(""); - } else { - setEmailError("Invalid Email Format"); - } - }; - - const handleEmail = async (event: any) => { - event.preventDefault(); - - if (!email) { - setEmailError("Please enter your email"); - return; - } - - try { - setConnectionType("stytch"); - const emailRes = await stytchClient.otps.email.loginOrCreate(email); - setMethodId(emailRes.method_id); - setIsOnOtpStep(true); - setTimeLeft(60); - } catch (error) { - setEmailError("Error sending email"); - setConnectionType("none"); - } - }; - - const handleOtp = async (event: any) => { - event.preventDefault(); - - try { - await stytchClient.otps.authenticate(otp, methodId, { - session_duration_minutes: 60, - }); - localStorage.setItem("loginType", "stytch"); - } catch (error) { - setOtpError("Error verifying otp"); - } - }; - - async function handleOkx() { - if (!window.okxwallet) { - alert("Please install the OKX wallet extension"); - return; - } - try { - await window.okxwallet.keplr.enable(chainInfo.chainId); - const okxAccount = await window.okxwallet.keplr.getKey(chainInfo.chainId); - const authenticator = getHumanReadablePubkey(okxAccount.pubKey); - setConnectionType("okx"); - localStorage.setItem("loginType", "okx"); - localStorage.setItem("loginAuthenticator", authenticator); - localStorage.setItem("okxXionAddress", okxAccount.bech32Address); - localStorage.setItem("okxWalletName", okxAccount.name); - } catch (error) { - setAbstraxionError("OKX wallet connect error"); - } - } - - // For the "resend otp" countdown - useEffect(() => { - if (timeLeft === 0) { - setTimeLeft(null); - } - if (!timeLeft) return; - const intervalId = setInterval(() => { - setTimeLeft(timeLeft - 1); - }, 1000); - return () => clearInterval(intervalId); - }, [timeLeft]); - - return ( - - {isOnOtpStep ? ( - <> -
-

- Input 6 digit code -

-

- Please check your email for the verification code -

-
- e.key === "Enter" && handleOtp(e)} - /> -
- - - {timeLeft ? ( -
- RESEND {`IN ${timeLeft}S`} -
- ) : ( - - )} -
- - ) : ( - <> -
-

- Welcome -

-

- Log in or sign up with your email -

-
- e.key === "Enter" && handleEmail(e)} - /> - - {shouldEnableFeature ? ( -
- - {showAdvanced ? ( -
-

- Log into your existing XION Meta account with a crypto - wallet -

- -
- ) : null} -
- ) : null} - - )} -
- ); -}; diff --git a/apps/abstraxion-dashboard/components/AbstraxionWallets/index.tsx b/apps/abstraxion-dashboard/components/AbstraxionWallets/index.tsx deleted file mode 100644 index 022c1a4d..00000000 --- a/apps/abstraxion-dashboard/components/AbstraxionWallets/index.tsx +++ /dev/null @@ -1,222 +0,0 @@ -import { useCallback, useContext, useEffect, useState } from "react"; -import { useDisconnect } from "graz"; -import { useStytch, useStytchUser } from "@stytch/nextjs"; -import { useQuery } from "@apollo/client"; -import { Button, Spinner } from "@burnt-labs/ui"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "../AbstraxionContext"; -import { AllSmartWalletQuery } from "@/utils/queries"; -import { truncateAddress } from "@/utils"; -import { useAbstraxionAccount } from "@/hooks"; -import { Loading } from "../Loading"; -import { WalletIcon } from "../Icons"; - -export const AbstraxionWallets = () => { - const { - connectionType, - setConnectionType, - abstractAccount, - setAbstractAccount, - setAbstraxionError, - apiUrl, - } = useContext(AbstraxionContext) as AbstraxionContextProps; - - const { user } = useStytchUser(); - const stytchClient = useStytch(); - const session_jwt = stytchClient.session.getTokens()?.session_jwt; - const session_token = stytchClient.session.getTokens()?.session_token; - - const { loginAuthenticator } = useAbstraxionAccount(); - - const { disconnect } = useDisconnect(); - - const { loading, error, data, startPolling, stopPolling, previousData } = - useQuery(AllSmartWalletQuery, { - variables: { - authenticator: loginAuthenticator, - }, - fetchPolicy: "network-only", - notifyOnNetworkStatusChange: true, - }); - - const [isGeneratingNewWallet, setIsGeneratingNewWallet] = useState(false); - const [fetchingNewWallets, setFetchingNewWallets] = useState(false); - - const handleDisconnect = async () => { - if (connectionType === "stytch") { - await stytchClient.session.revoke(); - } - disconnect(); - setConnectionType("none"); - setAbstractAccount(undefined); - localStorage.removeItem("loginType"); - localStorage.removeItem("loginAuthenticator"); - localStorage.removeItem("okxXionAddress"); - localStorage.removeItem("okxWalletName"); - }; - - const handleJwtAALoginOrCreate = useCallback(async () => { - try { - setIsGeneratingNewWallet(true); - const res = await fetch(`${apiUrl}/api/v1/jwt-accounts/create`, { - method: "POST", - headers: { - "content-type": "application/json", - }, - body: JSON.stringify({ - salt: Date.now().toString(), - session_jwt, - session_token, - }), - }); - const body = await res.json(); - if (!res.ok) { - throw new Error(body.error); - } - startPolling(3000); - setFetchingNewWallets(true); - } catch (error) { - console.log(error); - setAbstraxionError("Error creating abstract account."); - } finally { - setIsGeneratingNewWallet(false); - } - }, [ - apiUrl, - session_jwt, - session_token, - setIsGeneratingNewWallet, - startPolling, - setFetchingNewWallets, - setAbstraxionError, - ]); - - useEffect(() => { - if (previousData && data !== previousData) { - stopPolling(); - setFetchingNewWallets(false); - } - }, [data, previousData, stopPolling]); - - useEffect(() => { - if (abstractAccount && previousData && data !== previousData) { - // Updating abstract account in context on poll - const node = data?.smartAccounts?.nodes.find( - (smartAccount) => smartAccount.id === abstractAccount.id, - ); - setAbstractAccount({ - ...node, - userId: user?.user_id, - currentAuthenticatorIndex: node.authenticators.nodes.find( - (authenticator) => authenticator.authenticator === loginAuthenticator, - ).authenticatorIndex, - }); - } - }, [ - data, - previousData, - abstractAccount, - loginAuthenticator, - setAbstractAccount, - user?.user_id, - ]); - - if (error) { - setAbstraxionError("Failed to fetch accounts"); - return null; - } - - return ( - <> - {isGeneratingNewWallet ? ( - - ) : ( -
-
-

- Welcome -

-

- Choose an account to continue -

-
-
-
- Accounts -
-
- {loading || fetchingNewWallets ? ( - - ) : data?.smartAccounts?.nodes.length >= 1 ? ( - data?.smartAccounts?.nodes?.map((node: any, i: number) => ( -
{ - setAbstractAccount({ - ...node, - userId: user?.user_id, - currentAuthenticatorIndex: - node.authenticators.nodes.find( - (authenticator) => - authenticator.authenticator === - loginAuthenticator, - ).authenticatorIndex, - }); - }} - > - -
-

- Personal Account {i + 1} -

-

- {truncateAddress(node.id)} -

-
-
- )) - ) : ( - <> -

No Accounts Found.

- {connectionType !== "stytch" ? ( -

- This authenticator can only be used as a backup right now. - Please log in with email to create an account. -

- ) : null} - - )} -
-
-
- {!fetchingNewWallets && - data?.smartAccounts?.nodes.length < 1 && - connectionType === "stytch" ? ( - - ) : null} - -
-
- )} - - ); -}; diff --git a/apps/abstraxion-dashboard/components/AccountInfo.tsx b/apps/abstraxion-dashboard/components/AccountInfo.tsx deleted file mode 100644 index 2ff04176..00000000 --- a/apps/abstraxion-dashboard/components/AccountInfo.tsx +++ /dev/null @@ -1,169 +0,0 @@ -import { Dispatch, SetStateAction, useState } from "react"; -import dynamic from "next/dynamic"; -import Image from "next/image"; -import { - Button, - EmailIcon, - AccountWalletLogo, - EthereumLogo, - TrashIcon, - Popover, - PopoverTrigger, - PopoverContent, -} from "@burnt-labs/ui"; -import { CopyIcon } from "@/components/Icons"; -import { truncateAddress } from "@/utils"; -import RemoveAuthenticatorModal from "./ModalViews/RemoveAuthenticator/RemoveAuthenticatorModal"; -import type { - AbstraxionAccount, - AuthenticatorNodes, - authenticatorTypes, -} from "@/types"; - -const AddAuthenticatorsModal = dynamic<{ - isOpen: boolean; - setIsOpen: Dispatch>; -}>( - () => - import("@/components/ModalViews/AddAuthenticators/AddAuthenticatorsModal"), - { - ssr: false, - loading: () => ( - - ), - }, -); - -export const AccountInfo = ({ account }: { account?: AbstraxionAccount }) => { - const [isAddModalOpen, setIsAddModalOpen] = useState(false); - const [isRemoveModalOpen, setIsRemoveModalOpen] = useState(false); - const [authenticatorToRemove, setAuthenticatorToRemove] = useState< - AuthenticatorNodes | undefined - >(); - - const copyXIONAddress = () => { - if (account?.id) { - navigator.clipboard.writeText(account?.id); - } - }; - - const handleAuthenticatorLabels = (type: authenticatorTypes) => { - switch (type) { - case "SECP256K1": - return "OKX WALLET"; - case "ETHWALLET": - return "EVM WALLET"; - case "JWT": - return "EMAIL"; - default: - return ""; - } - }; - - const handleAuthenticatorLogos = (type: authenticatorTypes) => { - switch (type) { - case "SECP256K1": - return ( - OKX Logo - ); - case "ETHWALLET": - return ; - case "JWT": - return ; - default: - return ; - } - }; - - const renderAuthenticators = () => { - return account?.authenticators?.nodes.map((authenticator) => { - return ( -
-
- {handleAuthenticatorLogos( - authenticator.type.toUpperCase() as authenticatorTypes, - )} -
-
-

- {handleAuthenticatorLabels( - authenticator.type.toUpperCase() as authenticatorTypes, - )} -

-
- -
- ); - }); - }; - return ( -
-

- XION Address -

-
-

- {truncateAddress(account?.id)} -

- - - - - -

Copied!

-
-
-
-
-
-
-

- Your Logins -

- - -
- {renderAuthenticators()} -
- {/* TODO: Add history components */} - {/*
*/} -
- -
- ); -}; diff --git a/apps/abstraxion-dashboard/components/ErrorDisplay/index.tsx b/apps/abstraxion-dashboard/components/ErrorDisplay/index.tsx deleted file mode 100644 index 26f2d8de..00000000 --- a/apps/abstraxion-dashboard/components/ErrorDisplay/index.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { useContext } from "react"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "../AbstraxionContext"; -import { Button } from "@burnt-labs/ui"; - -export const ErrorDisplay = ({ - title = "OOPS! Something went wrong...", - message = "Please try again later.", - onClose, -}: { - title?: string; - message?: string; - onClose: VoidFunction; -}) => { - const { setAbstraxionError } = useContext( - AbstraxionContext, - ) as AbstraxionContextProps; - - return ( -
-

- {title} -

-

{message}

- -
- ); -}; diff --git a/apps/abstraxion-dashboard/components/Icons/Avatar.tsx b/apps/abstraxion-dashboard/components/Icons/Avatar.tsx deleted file mode 100644 index 8cdfdbe8..00000000 --- a/apps/abstraxion-dashboard/components/Icons/Avatar.tsx +++ /dev/null @@ -1,17 +0,0 @@ -export const AvatarIcon = ({ - color, - backgroundColor, -}: { - color: string; - backgroundColor: string; -}) => ( - - - - - - -); diff --git a/apps/abstraxion-dashboard/components/Icons/Check.tsx b/apps/abstraxion-dashboard/components/Icons/Check.tsx deleted file mode 100644 index 14718eef..00000000 --- a/apps/abstraxion-dashboard/components/Icons/Check.tsx +++ /dev/null @@ -1,16 +0,0 @@ -export const CheckIcon = ({ color = "black" }: { color?: string }) => ( - - - -); diff --git a/apps/abstraxion-dashboard/components/Icons/ChevronDown.tsx b/apps/abstraxion-dashboard/components/Icons/ChevronDown.tsx deleted file mode 100644 index df3f16ea..00000000 --- a/apps/abstraxion-dashboard/components/Icons/ChevronDown.tsx +++ /dev/null @@ -1,15 +0,0 @@ -export const ChevronDownIcon = ({ color = "black" }: { color?: string }) => ( - - - -); diff --git a/apps/abstraxion-dashboard/components/Icons/Close.tsx b/apps/abstraxion-dashboard/components/Icons/Close.tsx deleted file mode 100644 index 3d28da26..00000000 --- a/apps/abstraxion-dashboard/components/Icons/Close.tsx +++ /dev/null @@ -1,23 +0,0 @@ -export const CloseIcon = ({ - color = "black", - onClick, -}: { - color?: string; - onClick: VoidFunction; -}) => ( - - - -); diff --git a/apps/abstraxion-dashboard/components/Icons/Copy.tsx b/apps/abstraxion-dashboard/components/Icons/Copy.tsx deleted file mode 100644 index e3100160..00000000 --- a/apps/abstraxion-dashboard/components/Icons/Copy.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export const CopyIcon = ({ color }: { color: string }) => ( - - - - - - -); diff --git a/apps/abstraxion-dashboard/components/Icons/RightArrow.tsx b/apps/abstraxion-dashboard/components/Icons/RightArrow.tsx deleted file mode 100644 index c17787c8..00000000 --- a/apps/abstraxion-dashboard/components/Icons/RightArrow.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export const RightArrowIcon = ({ color }: { color: string }) => ( - - - -); diff --git a/apps/abstraxion-dashboard/components/Icons/Scan.tsx b/apps/abstraxion-dashboard/components/Icons/Scan.tsx deleted file mode 100644 index f0b4ca7e..00000000 --- a/apps/abstraxion-dashboard/components/Icons/Scan.tsx +++ /dev/null @@ -1,13 +0,0 @@ -export const ScanIcon = ({ color }: { color: string }) => ( - - - - -); diff --git a/apps/abstraxion-dashboard/components/Icons/USDC.tsx b/apps/abstraxion-dashboard/components/Icons/USDC.tsx deleted file mode 100644 index 86570678..00000000 --- a/apps/abstraxion-dashboard/components/Icons/USDC.tsx +++ /dev/null @@ -1,27 +0,0 @@ -export const USDCIcon = ({ color }: { color: string }) => ( - - - - - - - - - -); diff --git a/apps/abstraxion-dashboard/components/Icons/Wallet.tsx b/apps/abstraxion-dashboard/components/Icons/Wallet.tsx deleted file mode 100644 index 5b7ef5ba..00000000 --- a/apps/abstraxion-dashboard/components/Icons/Wallet.tsx +++ /dev/null @@ -1,32 +0,0 @@ -export const WalletIcon = ({ - color, - backgroundColor, - outlineColor, -}: { - color: string; - backgroundColor: string; - outlineColor?: string; -}) => ( - - - - - -); diff --git a/apps/abstraxion-dashboard/components/Icons/Xion.tsx b/apps/abstraxion-dashboard/components/Icons/Xion.tsx deleted file mode 100644 index f955dbc5..00000000 --- a/apps/abstraxion-dashboard/components/Icons/Xion.tsx +++ /dev/null @@ -1,24 +0,0 @@ -export const XionIcon = () => ( - - - - - -); diff --git a/apps/abstraxion-dashboard/components/Icons/index.ts b/apps/abstraxion-dashboard/components/Icons/index.ts deleted file mode 100644 index 3d07db74..00000000 --- a/apps/abstraxion-dashboard/components/Icons/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Re-export the other files in this directory -export { ScanIcon } from "./Scan"; -export { RightArrowIcon } from "./RightArrow"; -export { CheckIcon } from "./Check"; -export { CopyIcon } from "./Copy"; -export { AvatarIcon } from "./Avatar"; -export { ChevronDownIcon } from "./ChevronDown"; -export { WalletIcon } from "./Wallet"; -export { CloseIcon } from "./Close"; -export { XionIcon } from "./Xion"; diff --git a/apps/abstraxion-dashboard/components/Landing/index.tsx b/apps/abstraxion-dashboard/components/Landing/index.tsx deleted file mode 100644 index 90c7a744..00000000 --- a/apps/abstraxion-dashboard/components/Landing/index.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { Abstraxion, useModal } from "@burnt-labs/abstraxion"; -import { Button } from "@burnt-labs/ui"; -import Image from "next/image"; -import React from "react"; - -export function Landing() { - const [showModal, setShowModal] = useModal(); - return ( -
-
- XION Logo -
-
-

- Introducing -

-

- ABSTRAXION -

-
- -
-
-
- ); -} diff --git a/apps/abstraxion-dashboard/components/Loading/index.tsx b/apps/abstraxion-dashboard/components/Loading/index.tsx deleted file mode 100644 index caf7363e..00000000 --- a/apps/abstraxion-dashboard/components/Loading/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { ModalSection, Spinner } from "@burnt-labs/ui"; - -export const Loading = () => { - return ( - -
-

- Let's Go -

-

Starting your journey

-
-
- -
-
- ); -}; diff --git a/apps/abstraxion-dashboard/components/ModalViews/AddAuthenticators/AddAuthenticatorsForm.tsx b/apps/abstraxion-dashboard/components/ModalViews/AddAuthenticators/AddAuthenticatorsForm.tsx deleted file mode 100644 index af9aa9d3..00000000 --- a/apps/abstraxion-dashboard/components/ModalViews/AddAuthenticators/AddAuthenticatorsForm.tsx +++ /dev/null @@ -1,391 +0,0 @@ -import { - Dispatch, - SetStateAction, - useContext, - useEffect, - useState, -} from "react"; -import Image from "next/image"; -import { WalletType, useAccount, useSuggestChainAndConnect } from "graz"; -import { useQuery } from "@apollo/client"; -import { useStytchUser } from "@stytch/nextjs"; -import { - Button, - KeplrLogo, - MetamaskLogo, - PasskeyIcon, - Spinner, -} from "@burnt-labs/ui"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "@/components/AbstraxionContext"; -import { useAbstraxionAccount, useAbstraxionSigningClient } from "@/hooks"; -import { encodeHex } from "@/utils"; -import { AllSmartWalletQuery } from "@/utils/queries"; - -const okxFlag = process.env.NEXT_PUBLIC_OKX_FLAG === "true"; -const deploymentEnv = process.env.NEXT_PUBLIC_DEPLOYMENT_ENV; - -// Variable to be true if deploymentEnv is "testnet", otherwise check okxFlag for "mainnet" -const shouldEnableFeature = - deploymentEnv === "testnet" || (deploymentEnv === "mainnet" && okxFlag); - -// TODO: Add webauthn to this and remove "disable" prop from button when implemented -type AuthenticatorStates = "none" | "keplr" | "metamask" | "okx"; - -export function AddAuthenticatorsForm({ - setIsOpen, -}: { - setIsOpen: Dispatch>; -}) { - // Component specific state - const [selectedAuthenticator, setSelectedAuthenticator] = - useState("none"); - - // General UI state - const [errorMessage, setErrorMessage] = useState(""); - const [isLoading, setIsLoading] = useState(false); - const [isSuccess, setIsSuccess] = useState(false); - - // Context state - const { abstractAccount, setAbstractAccount, chainInfo } = useContext( - AbstraxionContext, - ) as AbstraxionContextProps; - - // Hooks - const { loginAuthenticator } = useAbstraxionAccount(); - const { client } = useAbstraxionSigningClient(); - const { data: grazAccount } = useAccount(); - const { user } = useStytchUser(); - const { suggestAndConnect } = useSuggestChainAndConnect({ - onSuccess: async () => await addKeplrAuthenticator(), - onError: () => setIsLoading(false), - onLoading: () => setIsLoading(true), - }); - - const { data, previousData, startPolling, stopPolling } = useQuery( - AllSmartWalletQuery, - { - variables: { - authenticator: loginAuthenticator, - }, - fetchPolicy: "network-only", - notifyOnNetworkStatusChange: true, - }, - ); - - // Stop polling upon new data and update context - useEffect(() => { - if (previousData && data !== previousData) { - stopPolling(); - setIsLoading(false); - setIsSuccess(true); - const node = data?.smartAccounts?.nodes.find( - (smartAccount) => smartAccount.id === abstractAccount.id, - ); - setAbstractAccount({ - ...node, - userId: user?.user_id, - currentAuthenticatorIndex: node.authenticators.nodes.find( - (authenticator) => authenticator.authenticator === loginAuthenticator, - ).authenticatorIndex, - }); - } - }, [ - data, - previousData, - abstractAccount.id, - loginAuthenticator, - setAbstractAccount, - stopPolling, - user?.user_id, - ]); - - // Functions - function handleSwitch(authenticator: AuthenticatorStates) { - setErrorMessage(""); - setSelectedAuthenticator(authenticator); - } - - async function handleSelection() { - setErrorMessage(""); - switch (selectedAuthenticator) { - case "none": - break; - case "keplr": - suggestAndConnect({ - chainInfo: chainInfo, - walletType: WalletType.KEPLR, - }); - break; - case "metamask": - await addEthAuthenticator(); - break; - case "okx": - await addOkxAuthenticator(); - break; - default: - break; - } - } - - function postAddFunction() { - setIsLoading(true); - startPolling(3000); - } - - async function addKeplrAuthenticator() { - try { - setIsLoading(true); - - if (!client) { - throw new Error("No client found."); - } - - const encoder = new TextEncoder(); - const signArbMessage = Buffer.from(encoder.encode(abstractAccount?.id)); - // @ts-ignore - function exists in keplr extension - const signArbRes = await keplr.signArbitrary( - chainInfo.chainId, - grazAccount?.bech32Address, - signArbMessage, - ); - - const accountIndex = abstractAccount?.authenticators.nodes.length; // TODO: Be careful here, if indexer returns wrong number this can overwrite accounts - - const msg = { - add_auth_method: { - add_authenticator: { - Secp256K1: { - id: accountIndex, - pubkey: signArbRes.pub_key.value, - signature: signArbRes.signature, - }, - }, - }, - }; - const res = await client.addAbstractAccountAuthenticator(msg, "", { - amount: [{ amount: "0", denom: "uxion" }], - gas: "500000", - }); - - if (res.rawLog?.includes("failed")) { - throw new Error(res.rawLog); - } - - postAddFunction(); - return res; - } catch (error) { - setErrorMessage( - "Something went wrong trying to add Keplr wallet as authenticator", - ); - setIsLoading(false); - } - } - - async function addOkxAuthenticator() { - try { - if (!window.okxwallet) { - alert("Install OKX Wallet"); - return; - } - setIsLoading(true); - - if (!client) { - throw new Error("No client found."); - } - - const encoder = new TextEncoder(); - const signArbMessage = Buffer.from(encoder.encode(abstractAccount?.id)); - - await window.okxwallet.keplr.enable(chainInfo.chainId); - const okxAccount = await window.okxwallet.keplr.getKey(chainInfo.chainId); - const signArbRes = await window.okxwallet.keplr.signArbitrary( - chainInfo.chainId, - okxAccount.bech32Address, - signArbMessage, - ); - - const accountIndex = abstractAccount?.authenticators.nodes.length; // TODO: Be careful here, if indexer returns wrong number this can overwrite accounts - - const msg = { - add_auth_method: { - add_authenticator: { - Secp256K1: { - id: accountIndex, - pubkey: signArbRes.pub_key.value, - signature: signArbRes.signature, - }, - }, - }, - }; - const res = await client.addAbstractAccountAuthenticator(msg, "", { - amount: [{ amount: "0", denom: "uxion" }], - gas: "500000", - }); - - if (res.rawLog?.includes("failed")) { - throw new Error(res.rawLog); - } - - postAddFunction(); - return res; - } catch (error) { - console.log(error); - setErrorMessage( - "Something went wrong trying to add OKX wallet as authenticator", - ); - setIsLoading(false); - } - } - - async function addEthAuthenticator() { - if (!window.ethereum) { - alert("Please install wallet extension"); - return; - } - try { - setIsLoading(true); - if (!client) { - throw new Error("No client found."); - } - - const accounts = await window.ethereum.request({ - method: "eth_requestAccounts", - }); - const primaryAccount = accounts[0]; - - const encoder = new TextEncoder(); - const ten = encodeHex(Buffer.from(encoder.encode(abstractAccount?.id))); - - const ethSignature = await window.ethereum.request({ - method: "personal_sign", - params: [ten, primaryAccount], - }); - - const byteArray = new Uint8Array( - ethSignature.match(/[\da-f]{2}/gi).map((hex) => parseInt(hex, 16)), - ); - const base64String = btoa(String.fromCharCode.apply(null, byteArray)); - - const accountIndex = abstractAccount?.authenticators.nodes.length; // TODO: Be careful here, if indexer returns wrong number this can overwrite accounts - - const msg = { - add_auth_method: { - add_authenticator: { - EthWallet: { - id: accountIndex, - address: primaryAccount, - signature: base64String, - }, - }, - }, - }; - - const res = await client.addAbstractAccountAuthenticator(msg, "", { - amount: [{ amount: "0", denom: "uxion" }], - gas: "500000", - }); - - if (res?.rawLog?.includes("failed")) { - throw new Error("Transaction failed"); - } - - postAddFunction(); - return res; - } catch (error) { - setErrorMessage( - "Something went wrong trying to add Ethereum wallet as authenticator", - ); - setIsLoading(false); - } - } - - return ( -
-
-

- ADD AUTHENTICATORS -

- {isSuccess ? ( -

- Successfully added authenticator to account. Please click continue - to navigate back to home page. -

- ) : errorMessage ? ( -

- {errorMessage} -

- ) : ( -

- Enhance your account's security by adding authenticators. - Select from the following options. -

- )} -
- {!isSuccess ? ( - <> - {/* */} -
- {/* - */} - - {/* */} -
- - ) : null} - {isSuccess ? ( - - ) : ( - - )} -
- ); -} diff --git a/apps/abstraxion-dashboard/components/ModalViews/AddAuthenticators/AddAuthenticatorsModal.tsx b/apps/abstraxion-dashboard/components/ModalViews/AddAuthenticators/AddAuthenticatorsModal.tsx deleted file mode 100644 index 00ec3d38..00000000 --- a/apps/abstraxion-dashboard/components/ModalViews/AddAuthenticators/AddAuthenticatorsModal.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Dispatch, SetStateAction } from "react"; -import { CloseIcon, Dialog, DialogClose, DialogContent } from "@burnt-labs/ui"; -import { AddAuthenticatorsForm } from "./AddAuthenticatorsForm"; - -export default function AddAuthenticatorsModal({ - isOpen, - setIsOpen, -}: { - isOpen: boolean; - setIsOpen: Dispatch>; -}) { - return ( - - e.preventDefault()} - > - - - - - - - ); -} diff --git a/apps/abstraxion-dashboard/components/ModalViews/RemoveAuthenticator/RemoveAuthenticatorForm.tsx b/apps/abstraxion-dashboard/components/ModalViews/RemoveAuthenticator/RemoveAuthenticatorForm.tsx deleted file mode 100644 index de454758..00000000 --- a/apps/abstraxion-dashboard/components/ModalViews/RemoveAuthenticator/RemoveAuthenticatorForm.tsx +++ /dev/null @@ -1,208 +0,0 @@ -import { - Dispatch, - SetStateAction, - useContext, - useEffect, - useState, -} from "react"; -import { useQuery } from "@apollo/client"; -import { - AccountWalletLogo, - Button, - EmailIcon, - EthereumLogo, - Spinner, -} from "@burnt-labs/ui"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "@/components/AbstraxionContext"; -import { useAbstraxionAccount, useAbstraxionSigningClient } from "@/hooks"; -import { AllSmartWalletQuery } from "@/utils/queries"; -import type { AuthenticatorNodes, authenticatorTypes } from "@/types"; - -export function RemoveAuthenticatorForm({ - authenticator, - setIsOpen, -}: { - authenticator?: AuthenticatorNodes; - setIsOpen: Dispatch>; -}) { - // General UI state - const [errorMessage, setErrorMessage] = useState(""); - const [isLoading, setIsLoading] = useState(false); - - // Context state - const { abstractAccount, setAbstractAccount } = useContext( - AbstraxionContext, - ) as AbstraxionContextProps; - - // Hooks - const { loginAuthenticator } = useAbstraxionAccount(); - const { client } = useAbstraxionSigningClient(); - - const { data, previousData, startPolling, stopPolling } = useQuery( - AllSmartWalletQuery, - { - variables: { - authenticator: loginAuthenticator, - }, - fetchPolicy: "network-only", - notifyOnNetworkStatusChange: true, - }, - ); - - // Stop polling upon new data and update context - useEffect(() => { - if (previousData && data !== previousData) { - stopPolling(); - setIsLoading(false); - setAbstractAccount(undefined); // set account to undefined to throw users back to account select screen - } - }, [data, previousData]); - - const handleAuthenticatorLabels = (type: authenticatorTypes) => { - switch (type) { - case "SECP256K1": - return "OKX WALLET"; - case "ETHWALLET": - return "EVM WALLET"; - case "JWT": - return "EMAIL"; - default: - return ""; - } - }; - - const handleAuthenticatorLogos = (type: authenticatorTypes) => { - switch (type) { - case "SECP256K1": - return ( - OKX Logo - ); - case "ETHWALLET": - return ; - case "JWT": - return ; - default: - return ; - } - }; - - const renderAuthenticator = () => { - if (!authenticator) { - return ( -
- No authenticator found. -
- ); - } - return ( -
-
- {handleAuthenticatorLogos( - authenticator.type.toUpperCase() as authenticatorTypes, - )} -
-
-

- {handleAuthenticatorLabels( - authenticator.type.toUpperCase() as authenticatorTypes, - )} -

-
-
- ); - }; - - async function removeAuthenticator() { - try { - setIsLoading(true); - - if (!authenticator) { - throw new Error("No authenticator found."); - } - - if (!client) { - throw new Error("No client found."); - } - - if (!abstractAccount) { - throw new Error("No account found."); - } - - if (abstractAccount.authenticators.nodes.length <= 1) { - throw new Error( - "You are trying to remove the only authenticator on the account and will lose all access. We cannot allow this operation.", - ); - } - - const msg = { - remove_auth_method: { - id: authenticator.authenticatorIndex, - }, - }; - - const res = await client.removeAbstractAccountAuthenticator(msg, "", { - amount: [{ amount: "0", denom: "uxion" }], - gas: "500000", - }); - - if (res?.rawLog?.includes("failed")) { - throw new Error("Transaction failed"); - } - - startPolling(3000); - return res; - } catch (error) { - console.warn(error); - setErrorMessage("Something went wrong trying to remove authenticator"); - setIsLoading(false); - } - } - - return ( -
-
-

- ARE YOU SURE? -

- {errorMessage ? ( -

- {errorMessage} -

- ) : ( - <> -
-

- You are about to delete the authenticator below. -

-

- Please click the confirm button to proceed. -

-
- {renderAuthenticator()} - - )} -
- {errorMessage ? ( - - ) : ( - - )} -
- ); -} diff --git a/apps/abstraxion-dashboard/components/ModalViews/RemoveAuthenticator/RemoveAuthenticatorModal.tsx b/apps/abstraxion-dashboard/components/ModalViews/RemoveAuthenticator/RemoveAuthenticatorModal.tsx deleted file mode 100644 index 822fc950..00000000 --- a/apps/abstraxion-dashboard/components/ModalViews/RemoveAuthenticator/RemoveAuthenticatorModal.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import { Dispatch, SetStateAction } from "react"; -import { CloseIcon, Dialog, DialogClose, DialogContent } from "@burnt-labs/ui"; -import { RemoveAuthenticatorForm } from "./RemoveAuthenticatorForm"; -import type { AuthenticatorNodes } from "@/types"; - -export default function RemoveAuthenticatorModal({ - isOpen, - setIsOpen, - authenticator, -}: { - isOpen: boolean; - setIsOpen: Dispatch>; - authenticator?: AuthenticatorNodes; -}) { - return ( - - e.preventDefault()} - > - - - - - - - ); -} diff --git a/apps/abstraxion-dashboard/components/Overview.tsx b/apps/abstraxion-dashboard/components/Overview.tsx deleted file mode 100644 index 16810545..00000000 --- a/apps/abstraxion-dashboard/components/Overview.tsx +++ /dev/null @@ -1,107 +0,0 @@ -import { formatBalance, getCommaSeperatedNumber } from "@/utils"; -import { usdcSearchDenom, useAccountBalance } from "@/hooks/useAccountBalance"; -import { RightArrowIcon, ScanIcon } from "./Icons"; -import { WalletSend } from "./WalletSend/WalletSend"; -import { WalletReceive } from "./WalletReceive"; -import type { AbstraxionAccount } from "@/types"; - -export const XION_TO_USDC_CONVERSION = 50; - -export const Overview = ({ account }: { account?: AbstraxionAccount }) => { - const { balanceInfo: accountBalance, sendTokens } = useAccountBalance(); - - const xionBalance = accountBalance?.balances.find( - (balance) => balance.denom === "uxion", - ); - const usdcBalance = accountBalance.balances.find( - (coin) => coin.denom === usdcSearchDenom, - ); - - return ( -
-
-

- Personal Account -

- {/* */} -
-

- Current Balance -

-
- {accountBalance && ( -

- ${/* TODO: Change once we support multiple currencies */} - {formatBalance(accountBalance.total)} -

- )} - {/* Hidden until functionality is in place. */} -
- {/*
- -
*/} - {account?.id && ( - - -
- } - /> - )} - - -
- } - /> -
-
- {/* Divider */} -
- {xionBalance && ( -
-

- XION -

-
-

- {getCommaSeperatedNumber(Number(xionBalance.amount))} XION -

-

- $ - {formatBalance( - Number(xionBalance.amount) * XION_TO_USDC_CONVERSION, - )}{" "} - USD -

-
-
- )} - {usdcBalance && ( -
-

- USDC -

-
-

- {getCommaSeperatedNumber(Number(usdcBalance.amount))} USDC -

-

- ${formatBalance(Number(usdcBalance.amount))} USD -

-
-
- )} -
- ); -}; diff --git a/apps/abstraxion-dashboard/components/Sidebar.tsx b/apps/abstraxion-dashboard/components/Sidebar.tsx deleted file mode 100644 index a62b16db..00000000 --- a/apps/abstraxion-dashboard/components/Sidebar.tsx +++ /dev/null @@ -1,123 +0,0 @@ -"use client"; - -import Link from "next/link"; -import { usePathname } from "next/navigation"; -import Image from "next/image"; -import { useContext } from "react"; -import { AbstraxionContext, AbstraxionContextProps } from "./AbstraxionContext"; -import { CloseIcon, WalletIcon } from "./Icons"; - -const NAV_OPTIONS = [{ text: "home", path: "/" }]; - -interface SidebarProps { - onClose?: VoidFunction; -} - -export function Sidebar({ onClose }: SidebarProps) { - const pathname = usePathname(); - const { isMainnet, setIsOpen } = useContext( - AbstraxionContext, - ) as AbstraxionContextProps; - - const renderNavOptions = () => { - return NAV_OPTIONS.map((option) => { - if (option.text === "home") { - return ( -
- - {option.text} - -
-
- ); - } - return ( - - {option.text} - - ); - }); - }; - - return ( -
-
- XION Logo - {!onClose ? ( -
- {isMainnet ? "MAINNET" : "TESTNET"} -
- ) : ( - - )} -
- -
- {renderNavOptions()} - - History - -
-
-
-
- -
-

- Personal Account -

-
- -
setIsOpen(true)} - className="ui-flex ui-items-center ui-ml-2 ui-justify-center ui-border-white/40 ui-border-[1px] ui-rounded-full ui-h-8 ui-w-8 ui-cursor-pointer" - > -
-
-
-
-
-
-
- {/* TODO: Display User Info */} - {/*
-
-

User@burnt.com

- -
-
*/} -
- ); -} diff --git a/apps/abstraxion-dashboard/components/Typography.tsx b/apps/abstraxion-dashboard/components/Typography.tsx deleted file mode 100644 index 5e3751fb..00000000 --- a/apps/abstraxion-dashboard/components/Typography.tsx +++ /dev/null @@ -1,14 +0,0 @@ -const CONFIG = { - body: "font-akkuratLL text-base font-normal", - navigation: - "font-akkuratLL text-xs leading-3 uppercase font-bold tracking-widest", -}; - -interface TypographyProps { - children: React.ReactNode; - variant: keyof typeof CONFIG; -} - -export function Typography({ children, variant }: TypographyProps) { - return {children}; -} diff --git a/apps/abstraxion-dashboard/components/WalletReceive/WalletReceive.test.tsx b/apps/abstraxion-dashboard/components/WalletReceive/WalletReceive.test.tsx deleted file mode 100644 index 2e688301..00000000 --- a/apps/abstraxion-dashboard/components/WalletReceive/WalletReceive.test.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { render, screen, act } from "@testing-library/react"; -import { WalletReceive } from "."; - -describe("WalletReceive", () => { - it("should render the WalletReceive modal when the trigger is clicked", async () => { - render( - Trigger
} xionAddress="xionAddress" />, - ); - const button = screen.getByText("Trigger"); - await act(async () => { - await button.click(); - }); - - const walletReceive = screen.getByText("RECEIVE"); - expect(walletReceive).toBeInTheDocument(); - }); - - it("should format and render the xion address", async () => { - render( - Trigger
} - xionAddress="mockXionAddress" - />, - ); - const button = screen.getByText("Trigger"); - await act(async () => { - await button.click(); - }); - - const truncatedXionAddress = screen.getByText("mockXion...ress"); - expect(truncatedXionAddress).toBeInTheDocument(); - }); -}); diff --git a/apps/abstraxion-dashboard/components/WalletReceive/index.tsx b/apps/abstraxion-dashboard/components/WalletReceive/index.tsx deleted file mode 100644 index e9f840f0..00000000 --- a/apps/abstraxion-dashboard/components/WalletReceive/index.tsx +++ /dev/null @@ -1,64 +0,0 @@ -import { ReactElement, useState } from "react"; -import { Button, Dialog, DialogContent, DialogTrigger } from "@burnt-labs/ui"; -import { DialogClose } from "@burnt-labs/ui"; -import { CloseIcon } from "@burnt-labs/ui"; -import { truncateAddress } from "@/utils"; -import { CopyIcon } from "../Icons"; -import { QRCodeSVG } from "qrcode.react"; - -export function WalletReceive({ - trigger, - xionAddress, -}: { - trigger: ReactElement; - xionAddress: string; -}) { - const [isOpen, setIsOpen] = useState(false); - - const copyXionAddress = () => { - if (xionAddress) { - navigator.clipboard.writeText(xionAddress); - } - }; - - return ( - - {trigger} - e.preventDefault()} - > - - - -
-

- RECEIVE -

-

- XION Address -

-
-

- {truncateAddress(xionAddress)} -

- -
-
- -
- -
-
-
- ); -} diff --git a/apps/abstraxion-dashboard/components/WalletSend/WalletSend.test.tsx b/apps/abstraxion-dashboard/components/WalletSend/WalletSend.test.tsx deleted file mode 100644 index af3d2372..00000000 --- a/apps/abstraxion-dashboard/components/WalletSend/WalletSend.test.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import { - render, - screen, - fireEvent, - act, - waitFor, -} from "@testing-library/react"; -import { WalletSendForm } from "./WalletSendForm"; - -// Dependencies -jest.mock("@/hooks", () => ({ - useAbstraxionAccount: () => ({ data: { id: "mock-account-id" } }), -})); -jest.mock("@/utils", () => ({ - formatBalance: (balance: number) => `Formatted ${balance}`, - isValidWalletAddress: (address: string) => address === "valid-address", -})); -jest.mock("@/components/Overview", () => ({ - XION_TO_USDC_CONVERSION: 0.1, -})); - -const mockSendTokens = jest.fn(); - -const setup = () => - render( - , - ); - -describe("WalletSendForm", () => { - beforeEach(() => { - jest.clearAllMocks(); - }); - - it("renders without crashing", () => { - setup(); - expect(screen.getByText("SEND")).toBeInTheDocument(); - }); - - it("updates input fields correctly", async () => { - setup(); - const amountInput = screen.getByPlaceholderText("Amount"); - const recipientInput = screen.getByTestId("recipient-input"); - const memoInput = screen.getByTestId("memo-input"); - - fireEvent.change(amountInput, { target: { value: "100" } }); - fireEvent.change(recipientInput, { target: { value: "valid-address" } }); - fireEvent.change(memoInput, { target: { value: "Test Memo" } }); - - expect(amountInput).toHaveValue(100); - expect(recipientInput).toHaveValue("valid-address"); - expect(memoInput).toHaveValue("Test Memo"); - }); - - it("handles sending tokens correctly", async () => { - setup(); - const amountInput = screen.getByPlaceholderText("Amount"); - const recipientInput = screen.getByTestId("recipient-input"); - const memoInput = screen.getByTestId("memo-input"); - const reviewButton = screen.getByText("REVIEW"); - - fireEvent.change(amountInput, { target: { value: "100" } }); - fireEvent.change(recipientInput, { target: { value: "valid-address" } }); - fireEvent.change(memoInput, { target: { value: "Test Memo" } }); - - await act(async () => { - await fireEvent.click(reviewButton); - }); - - const confirmButton = screen.getByText("CONFIRM"); - await act(async () => { - await fireEvent.click(confirmButton); - }); - - await waitFor(() => { - expect(mockSendTokens).toHaveBeenCalledWith( - "valid-address", - 100, - "Test Memo", - ); - }); - }); -}); diff --git a/apps/abstraxion-dashboard/components/WalletSend/WalletSend.tsx b/apps/abstraxion-dashboard/components/WalletSend/WalletSend.tsx deleted file mode 100644 index 673b2ec7..00000000 --- a/apps/abstraxion-dashboard/components/WalletSend/WalletSend.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { ReactElement, useState } from "react"; -import { Dialog, DialogContent, DialogTrigger } from "@burnt-labs/ui"; -import { DeliverTxResponse } from "@cosmjs/stargate"; -import { DialogClose } from "@burnt-labs/ui"; -import { CloseIcon } from "@burnt-labs/ui"; -import { WalletSendForm } from "./WalletSendForm"; - -export function WalletSend({ - trigger, - sendTokens, - balanceInfo, -}: { - trigger: ReactElement; - sendTokens: ( - senderAddress: string, - sendAmount: number, - denom: string, - memo: string, - ) => Promise; - balanceInfo: BalanceInfo; -}) { - const [isOpen, setIsOpen] = useState(false); - - return ( - - {trigger} - e.preventDefault()} - > - - - - - - - ); -} diff --git a/apps/abstraxion-dashboard/components/WalletSend/WalletSendForm.tsx b/apps/abstraxion-dashboard/components/WalletSend/WalletSendForm.tsx deleted file mode 100644 index 145c71ae..00000000 --- a/apps/abstraxion-dashboard/components/WalletSend/WalletSendForm.tsx +++ /dev/null @@ -1,431 +0,0 @@ -import { ChangeEvent, useState } from "react"; -import { DeliverTxResponse } from "@cosmjs/stargate"; -import { Button, Input, ChevronDown } from "@burnt-labs/ui"; -import { XION_TO_USDC_CONVERSION } from "@/components/Overview"; -import { ErrorDisplay } from "@/components/ErrorDisplay"; -import { useAbstraxionAccount } from "@/hooks"; -import { formatBalance, isValidWalletAddress } from "@/utils"; -import { USDCIcon } from "../Icons/USDC"; -import { XionIcon } from "../Icons/Xion"; -import { usdcSearchDenom } from "@/hooks/useAccountBalance"; - -interface SelectedCurrency { - type: "usdc" | "xion"; - balance?: Coin; - denom: typeof usdcSearchDenom | "uxion"; -} - -export function WalletSendForm({ - sendTokens, - balanceInfo, - setIsOpen, -}: { - sendTokens: ( - senderAddress: string, - sendAmount: number, - denom: string, - memo: string, - ) => Promise; - balanceInfo: BalanceInfo; - setIsOpen: any; -}) { - const { data: account } = useAbstraxionAccount(); - - const xionBalance = balanceInfo.balances.find( - (coin) => coin.denom === "uxion", - ); - const usdcBalance = balanceInfo.balances.find( - (coin) => coin.denom === usdcSearchDenom, - ); - - const [selectedCurrency, setSelectedCurrency] = useState({ - type: "usdc", - balance: usdcBalance, - denom: usdcSearchDenom, - }); - - const [sendAmount, setSendAmount] = useState("0"); - const [amountError, setAmountError] = useState(""); - const [recipientAddress, setRecipientAddress] = useState(""); - const [recipientAddressError, setRecipientAddressError] = useState(""); - const [userMemo, setUserMemo] = useState(""); - - const [isOnReviewStep, setIsOnReviewStep] = useState(false); - const [isLoading, setIsLoading] = useState(false); - const [isSuccess, setIsSuccess] = useState(false); - const [sendTokensError, setSendTokensError] = useState(false); - - const [showDropdown, setShowDropdown] = useState(false); - - function handleAmountChange(event: ChangeEvent) { - setAmountError(""); - if (sendAmount === "0" && event.target.value === "00") return; - if (!event.target.value) { - setSendAmount("0"); - return; - } - setSendAmount(event.target.value.replace(/^0+/, "")); - } - - function handleStart() { - if (!sendAmount || sendAmount === "0") { - setAmountError("No amount entered"); - return; - } - - if (selectedCurrency.type === "xion") { - if (Number(xionBalance?.amount) < Number(sendAmount) * 1000000) { - setAmountError("Input is greater than your current balance"); - return; - } - } - - if (selectedCurrency.type === "usdc") { - if (Number(usdcBalance?.amount) < Number(sendAmount) * 1000000) { - setAmountError("Input is greater than your current balance"); - return; - } - } - - if (!isValidWalletAddress(recipientAddress)) { - setRecipientAddressError("Invalid wallet address"); - return; - } - - setIsOnReviewStep(true); - } - - async function triggerSend() { - try { - setIsLoading(true); - - await sendTokens( - recipientAddress, - Number(sendAmount), - selectedCurrency.denom, - userMemo, - ); - setIsSuccess(true); - } catch (error) { - console.log(error); - setSendTokensError(true); - } finally { - setIsLoading(false); - } - } - - function switchSelectedCurrency(type: typeof selectedCurrency.type) { - switch (type) { - case "xion": - setSelectedCurrency({ - type: "xion", - balance: xionBalance, - denom: "uxion", - }); - break; - case "usdc": - setSelectedCurrency({ - type: "usdc", - balance: usdcBalance, - denom: usdcSearchDenom, - }); - break; - } - setShowDropdown(false); - return; - } - - const currencyDropdown = () => { - return ( -
-
setShowDropdown(!showDropdown)} - > -
-
- {selectedCurrency.type === "usdc" ? ( - - ) : ( - - )} -
- -
-

- {selectedCurrency.type.toUpperCase()} -

-

- Balance:{" "} - {formatBalance(Number(selectedCurrency.balance?.amount))}{" "} - {selectedCurrency.type.toUpperCase()}{" "} - - $ - {formatBalance( - Number(selectedCurrency.balance?.amount) * - (selectedCurrency.type === "xion" - ? XION_TO_USDC_CONVERSION - : 1), - )}{" "} - USD - -

-
-
- -
- -
-
switchSelectedCurrency("xion")} - > -
- -
- -
-

XION

-

- Balance: {formatBalance(Number(xionBalance?.amount))} XION{" "} - - $ - {formatBalance( - Number(xionBalance?.amount) * XION_TO_USDC_CONVERSION, - )}{" "} - USD - -

-
-
- -
switchSelectedCurrency("usdc")} - > -
- -
- -
-

USDC

-

- Balance: {formatBalance(Number(usdcBalance?.amount))} USDC{" "} - - ${formatBalance(Number(usdcBalance?.amount))} USD - -

-
-
-
-
- ); - }; - - return ( - <> - {sendTokensError ? ( - setIsOpen(false)} - /> - ) : isSuccess ? ( - <> -
-

- SUCCESS! -

-

- You have initiated the transaction below. -

-
-

- Transfer Amount -

-

- {sendAmount}{" "} - - {selectedCurrency.type.toUpperCase()} - -

-

- $ - {formatBalance( - Number(sendAmount) * - 1000000 * - (selectedCurrency.type === "xion" - ? XION_TO_USDC_CONVERSION - : 1), - )}{" "} - USD -

-

- {userMemo} -

-
-
-

- From -

-

- {account.id} -

-
-
-

- To -

-

- {recipientAddress} -

-
- -
- - ) : isOnReviewStep ? ( - <> -
-

- REVIEW -

-

- You are about to make the transaction below. -

-
-

- Transfer Amount -

-

- {sendAmount}{" "} - - {selectedCurrency.type.toUpperCase()} - -

-

- $ - {formatBalance( - Number(sendAmount) * - 1000000 * - (selectedCurrency.type === "xion" - ? XION_TO_USDC_CONVERSION - : 1), - )}{" "} - USD -

-

- {userMemo} -

-
-
-

- From -

-

- {account.id} -

-
-
-

- To -

-

- {recipientAddress} -

-
- - -
- - ) : ( - <> -
-

- SEND -

-
- {currencyDropdown()} -
-

Amount

-

- =$ - {formatBalance( - Number(sendAmount) * - 1000000 * - (selectedCurrency.type === "xion" - ? XION_TO_USDC_CONVERSION - : 1), - )}{" "} - USD -

-
-
- -

- {selectedCurrency.type.toUpperCase()} -

-
- {amountError ? ( -

{amountError}

- ) : null} -
-
- -

- {account.id} -

-
- { - setRecipientAddressError(""); - setRecipientAddress(e.target.value); - }} - placeholder="Recipient Address" - value={recipientAddress} - /> - setUserMemo(e.target.value)} - placeholder="Memo (Optional)" - value={userMemo} - /> - -
- - )} - - ); -} diff --git a/apps/abstraxion-dashboard/global.d.ts b/apps/abstraxion-dashboard/global.d.ts deleted file mode 100644 index a8542b3a..00000000 --- a/apps/abstraxion-dashboard/global.d.ts +++ /dev/null @@ -1,18 +0,0 @@ -interface Coin { - readonly denom: string; - readonly amount: string; -} - -interface BalanceInfo { - // In USDC - total: number; - balances: Coin[]; -} - -interface Authenticators { - nodes: { type: string; id: string }[]; -} - -interface Window { - okxwallet: any; // TODO: Properly define -} diff --git a/apps/abstraxion-dashboard/hooks/index.ts b/apps/abstraxion-dashboard/hooks/index.ts deleted file mode 100644 index 87d5dfda..00000000 --- a/apps/abstraxion-dashboard/hooks/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { useAbstraxionAccount } from "./useAbstraxionAccount"; -export { useAbstraxionSigningClient } from "./useAbstraxionSigningClient"; diff --git a/apps/abstraxion-dashboard/hooks/useAbstraxionAccount.ts b/apps/abstraxion-dashboard/hooks/useAbstraxionAccount.ts deleted file mode 100644 index 3483313b..00000000 --- a/apps/abstraxion-dashboard/hooks/useAbstraxionAccount.ts +++ /dev/null @@ -1,146 +0,0 @@ -import { useContext, useEffect, useRef, useState } from "react"; -import { useAccount } from "graz"; -import { useStytch, useStytchSession } from "@stytch/nextjs"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "@/components/AbstraxionContext"; -import { decodeJwt } from "jose"; -import { getHumanReadablePubkey } from "@/utils"; -import type { AbstraxionAccount } from "@/types"; - -export const useAbstraxionAccount = () => { - const { session } = useStytchSession(); - - const { - connectionType, - setConnectionType, - abstractAccount, - setAbstractAccount, - } = useContext(AbstraxionContext) as AbstraxionContextProps; - - const loginType = localStorage.getItem("loginType"); - const [loginAuthenticator, setLoginAuthenticator] = useState( - localStorage.getItem("loginAuthenticator"), - ); - - const { data: grazAccount, isConnected } = useAccount(); - const stytchClient = useStytch(); - const session_jwt = stytchClient.session.getTokens()?.session_jwt; - - function getAuthenticator() { - let authenticator = ""; - switch (connectionType) { - case "stytch": - const { aud, sub } = session_jwt - ? decodeJwt(session_jwt) - : { aud: undefined, sub: undefined }; - authenticator = `${Array.isArray(aud) ? aud[0] : aud}.${sub}`; - break; - case "graz": - authenticator = getHumanReadablePubkey(grazAccount?.pubKey); - break; - case "metamask": - authenticator = loginAuthenticator || ""; - break; - case "okx": - authenticator = loginAuthenticator || ""; - break; - case "none": - authenticator = ""; - break; - } - - return authenticator; - } - - useEffect(() => { - const refreshConnectionType = () => { - setConnectionType((loginType as any) || "none"); - }; - - if (connectionType === "none") { - refreshConnectionType(); - } - }, [session, isConnected, grazAccount]); - - // Metamask & OKX account detection - useEffect(() => { - const handleAccountsChanged = (accounts: string[]) => { - if (connectionType === "metamask") { - localStorage.setItem("loginAuthenticator", accounts[0]); - setLoginAuthenticator(accounts[0]); - setAbstractAccount(undefined); - } - }; - - window.ethereum?.on("accountsChanged", handleAccountsChanged); - - return () => { - window.ethereum?.off("accountsChanged", handleAccountsChanged); - }; - }, []); - - // OKX account detection - useEffect(() => { - const handleAccountsChanged = async (accounts: any) => { - if (connectionType === "okx") { - const okxXionAddress = localStorage.getItem("okxXionAddress"); - const okxWalletName = localStorage.getItem("okxWalletName"); - - // If user switches account via extension, log user out. - // No good way to handle account switch via the OKX keplr event system - if ( - okxXionAddress !== accounts.account.XION_TEST || - okxWalletName !== accounts.name - ) { - // Basically log out - setConnectionType("none"); - setAbstractAccount(undefined); - localStorage.removeItem("loginType"); - localStorage.removeItem("loginAuthenticator"); - localStorage.removeItem("okxXionAddress"); - localStorage.removeItem("okxWalletName"); - } - } - }; - - if (window.okxwallet) { - window.okxwallet?.keplr.on("connect", handleAccountsChanged); - } - - return () => { - window.okxwallet?.keplr.on("connect", handleAccountsChanged); - }; - }, []); - - // Keplr account detection - useEffect(() => { - const handleAccountsChanged = () => { - if (connectionType === "graz") { - setAbstractAccount(undefined); - } - }; - - window.addEventListener("keplr_keystorechange", handleAccountsChanged); - return () => { - window.removeEventListener("keplr_keystorechange", handleAccountsChanged); - }; - }, []); - - return { - data: (abstractAccount as AbstraxionAccount) || undefined, - connectionType, - loginAuthenticator: getAuthenticator(), - isConnected: - connectionType === "stytch" - ? !!session - : connectionType === "graz" - ? isConnected - : connectionType === "metamask" - ? window.ethereum.isConnected() - : connectionType === "okx" - ? localStorage.getItem("loginAuthenticator") - : false, - }; -}; diff --git a/apps/abstraxion-dashboard/hooks/useAbstraxionSigningClient.ts b/apps/abstraxion-dashboard/hooks/useAbstraxionSigningClient.ts deleted file mode 100644 index 284b1f49..00000000 --- a/apps/abstraxion-dashboard/hooks/useAbstraxionSigningClient.ts +++ /dev/null @@ -1,161 +0,0 @@ -import { useCallback, useContext, useEffect, useMemo, useState } from "react"; -import { useStytch } from "@stytch/nextjs"; -import { - AAClient, - AADirectSigner, - AbstractAccountJWTSigner, - GasPrice, -} from "@burnt-labs/signers"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "@/components/AbstraxionContext"; -import { getKeplr, useOfflineSigners } from "graz"; -import { testnetChainInfo } from "@burnt-labs/constants"; -import { AAEthSigner } from "@burnt-labs/signers"; -import { getEnvStringOrThrow } from "@/utils"; - -export const useAbstraxionSigningClient = () => { - const { connectionType, abstractAccount, chainInfo } = useContext( - AbstraxionContext, - ) as AbstraxionContextProps; - - const stytch = useStytch(); - const sessionToken = stytch.session.getTokens()?.session_token; - - const { data } = useOfflineSigners(); - const keplr = window.keplr ? getKeplr() : undefined; - - const [abstractClient, setAbstractClient] = useState( - undefined, - ); - - async function okxSignArb( - chainId: string, - account: string, - signBytes: Uint8Array, - ) { - if (!window.okxwallet) { - alert("Please install the OKX wallet extension"); - return; - } - await window.okxwallet.keplr.enable(chainInfo.chainId); - const signDataNew = Uint8Array.from(Object.values(signBytes)); - return window.okxwallet.keplr.signArbitrary(chainId, account, signDataNew); - } - - async function ethSigningFn(msg: any) { - const accounts = await window.ethereum?.request({ - method: "eth_requestAccounts", - }); - return window.ethereum?.request({ - method: "personal_sign", - params: [msg, accounts[0]], - }); - } - - const getSigner = useCallback(async () => { - let signer: - | AbstractAccountJWTSigner - | AADirectSigner - | AAEthSigner - | undefined = undefined; - - switch (connectionType) { - case "stytch": - signer = new AbstractAccountJWTSigner( - abstractAccount.id, - abstractAccount.currentAuthenticatorIndex, - sessionToken, - getEnvStringOrThrow( - "NEXT_PUBLIC_DEFAULT_INDEXER_URL", - process.env.NEXT_PUBLIC_DEFAULT_INDEXER_URL, - ), - getEnvStringOrThrow( - "NEXT_PUBLIC_DEFAULT_API_URL", - process.env.NEXT_PUBLIC_DEFAULT_API_URL, - ), - ); - break; - case "graz": - if (keplr) { - const offlineSigner = window.keplr.getOfflineSigner( - chainInfo.chainId, - ); - signer = new AADirectSigner( - offlineSigner, - abstractAccount.id, - abstractAccount.currentAuthenticatorIndex, - // @ts-ignore - signArbitrary function exists on Keplr although it doesn't show - keplr.signArbitrary, - getEnvStringOrThrow( - "NEXT_PUBLIC_DEFAULT_INDEXER_URL", - process.env.NEXT_PUBLIC_DEFAULT_INDEXER_URL, - ), - ); - } - break; - case "okx": - if (window.okxwallet) { - const okxOfflineSigner = - await window.okxwallet.keplr.getOfflineSigner(chainInfo.chainId); - signer = new AADirectSigner( - okxOfflineSigner, - abstractAccount.id, - abstractAccount.currentAuthenticatorIndex, - okxSignArb, - getEnvStringOrThrow( - "NEXT_PUBLIC_DEFAULT_INDEXER_URL", - process.env.NEXT_PUBLIC_DEFAULT_INDEXER_URL, - ), - ); - } - break; - case "metamask": - if (window.ethereum) { - signer = new AAEthSigner( - abstractAccount.id, - abstractAccount.currentAuthenticatorIndex, - ethSigningFn, - getEnvStringOrThrow( - "NEXT_PUBLIC_DEFAULT_INDEXER_URL", - process.env.NEXT_PUBLIC_DEFAULT_INDEXER_URL, - ), - ); - } - break; - case "none": - signer = undefined; - break; - } - - if (!signer) { - console.warn("No signer found"); - return; - } - - const abstractClient = await AAClient.connectWithSigner( - // Should be set in the context but defaulting here just in case. - chainInfo.rpc || testnetChainInfo.rpc, - signer, - { - gasPrice: GasPrice.fromString("0uxion"), - }, - ); - - setAbstractClient(abstractClient); - }, [sessionToken, abstractAccount, connectionType, data, keplr]); - - useEffect(() => { - if (abstractAccount) { - getSigner(); - } - }, [abstractAccount]); - - const memoizedClient = useMemo( - () => ({ client: abstractClient }), - [abstractClient], - ); - - return memoizedClient; -}; diff --git a/apps/abstraxion-dashboard/hooks/useAccountBalance.ts b/apps/abstraxion-dashboard/hooks/useAccountBalance.ts deleted file mode 100644 index 380c1642..00000000 --- a/apps/abstraxion-dashboard/hooks/useAccountBalance.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { useEffect, useMemo, useState } from "react"; -import { useAbstraxionAccount, useAbstraxionSigningClient } from "@/hooks"; -import { XION_TO_USDC_CONVERSION } from "@/components/Overview"; - -export const usdcSearchDenom = - "ibc/57097251ED81A232CE3C9D899E7C8096D6D87EF84BA203E12E424AA4C9B57A64"; - -export function useAccountBalance() { - const { data: account } = useAbstraxionAccount(); - const { client } = useAbstraxionSigningClient(); - const [balanceInfo, setBalanceInfo] = useState({ - total: 0, - balances: [], - }); - - async function fetchBalances() { - try { - if (!account) { - throw new Error("No account"); - } - - if (!client) { - throw new Error("No signing client"); - } - // TODO: Can we optimize balance fetching - const uxionBalance = await client.getBalance(account.id, "uxion"); - const usdcBalance = await client.getBalance(account.id, usdcSearchDenom); - - const uxionToUsd = Number(uxionBalance.amount) * XION_TO_USDC_CONVERSION; - - setBalanceInfo({ - total: uxionToUsd + Number(usdcBalance.amount), - balances: [uxionBalance, usdcBalance], - }); - } catch (error) { - console.error("Error fetching balances:", error); - } - } - - useEffect(() => { - if (account && client) { - fetchBalances(); - } - }, [account, client]); - - async function sendTokens( - senderAddress: string, - sendAmount: number, - denom: string, - memo: string, - ) { - try { - if (!account) { - throw new Error("No account"); - } - - if (!client) { - throw new Error("No signing client"); - } - - const convertedSendAmount = String(sendAmount * 1000000); - - const res = await client.sendTokens( - account.id, - senderAddress, - [{ denom, amount: convertedSendAmount }], - { - amount: [{ denom: "uxion", amount: "0" }], - gas: "200000", // TODO: Dynamic? - }, - memo, - ); - - if (res.rawLog?.includes("failed")) { - throw new Error(res.rawLog); - } - - fetchBalances(); // Update balances after successful token send - return res; - } catch (error) { - throw error; - } - } - - const memoizedBalanceInfo = useMemo(() => balanceInfo, [balanceInfo]); - - return { balanceInfo: memoizedBalanceInfo, sendTokens }; -} diff --git a/apps/abstraxion-dashboard/hooks/useUser.ts b/apps/abstraxion-dashboard/hooks/useUser.ts deleted file mode 100644 index e701762e..00000000 --- a/apps/abstraxion-dashboard/hooks/useUser.ts +++ /dev/null @@ -1,26 +0,0 @@ -"use client"; - -import { useQuery } from "@tanstack/react-query"; -import { useSearchParams } from "next/navigation"; - -export const useUser = () => { - const searchParams = useSearchParams(); - const userId = searchParams.get("id") as string; - - const fetchUser = async (id: string) => { - return { - name: "John Doe", - email: "john.doe@gmail.com", - }; - }; - - const { - data: user, - isLoading, - isError, - } = useQuery(["user", userId], () => fetchUser(userId), { - enabled: !!userId, // Only run query if userId is available - }); - - return { user, isLoading, isError }; -}; diff --git a/apps/abstraxion-dashboard/jest.config.ts b/apps/abstraxion-dashboard/jest.config.ts deleted file mode 100644 index 66005e16..00000000 --- a/apps/abstraxion-dashboard/jest.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { Config } from "jest"; -import nextJest from "next/jest.js"; - -const createJestConfig = nextJest({ - dir: "./", -}); - -const config: Config = { - coverageProvider: "v8", - testEnvironment: "jsdom", - setupFilesAfterEnv: ["/jest.setup.ts"], - preset: "ts-jest", - moduleNameMapper: { - "@/hooks": "/hooks", - "@/utils": "/utils", - "@/components/(.*)": "/components/$1", - }, -}; - -export default createJestConfig(config); diff --git a/apps/abstraxion-dashboard/jest.setup.ts b/apps/abstraxion-dashboard/jest.setup.ts deleted file mode 100644 index d0de870d..00000000 --- a/apps/abstraxion-dashboard/jest.setup.ts +++ /dev/null @@ -1 +0,0 @@ -import "@testing-library/jest-dom"; diff --git a/apps/abstraxion-dashboard/lib.ts b/apps/abstraxion-dashboard/lib.ts deleted file mode 100644 index 78efee00..00000000 --- a/apps/abstraxion-dashboard/lib.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { ApolloClient, InMemoryCache } from "@apollo/client"; -import { createStytchHeadlessClient } from "@stytch/nextjs/headless"; -import { StytchHeadlessClient } from "@stytch/vanilla-js/dist/index.headless"; -import { getEnvStringOrThrow } from "./utils"; - -export const stytchClient: StytchHeadlessClient = createStytchHeadlessClient( - getEnvStringOrThrow( - "NEXT_PUBLIC_DEFAULT_STYTCH_PUBLIC_TOKEN", - process.env.NEXT_PUBLIC_DEFAULT_STYTCH_PUBLIC_TOKEN, - ), -); - -// TODO: Refactor to be dynamic. Local dev uri must be device IP. -export const apolloClient = new ApolloClient({ - uri: getEnvStringOrThrow( - "NEXT_PUBLIC_DEFAULT_INDEXER_URL", - process.env.NEXT_PUBLIC_DEFAULT_INDEXER_URL, - ), - cache: new InMemoryCache(), - assumeImmutableResults: true, -}); diff --git a/apps/abstraxion-dashboard/next.config.js b/apps/abstraxion-dashboard/next.config.js deleted file mode 100644 index ab0ddd6a..00000000 --- a/apps/abstraxion-dashboard/next.config.js +++ /dev/null @@ -1,85 +0,0 @@ -/** @type {import('next').NextConfig} */ -module.exports = { - webpack(config) { - // Grab the existing rule that handles SVG imports - const fileLoaderRule = config.module.rules.find((rule) => - rule.test?.test?.(".svg"), - ); - - config.module.rules.push( - // Reapply the existing rule, but only for svg imports ending in ?url - { - ...fileLoaderRule, - test: /\.svg$/i, - resourceQuery: /url/, // *.svg?url - }, - // Convert all other *.svg imports to React components - { - test: /\.svg$/i, - issuer: fileLoaderRule.issuer, - resourceQuery: { not: [...fileLoaderRule.resourceQuery.not, /url/] }, // exclude if *.svg?url - use: ["@svgr/webpack"], - }, - ); - - // Modify the file loader rule to ignore *.svg, since we have it handled now. - fileLoaderRule.exclude = /\.svg$/i; - - // Resolve " Module not found: Can't resolve 'pino-pretty' in " warning coming from wallet-connect - config.externals.push("pino-pretty", "lokijs", "encoding"); - - return config; - }, - images: { - remotePatterns: [ - { - protocol: "https", - hostname: "www.okx.com", - port: "", - pathname: "/cdn/assets/imgs/239/*", - }, - ], - }, -}; - -// Injected content via Sentry wizard below - -const { withSentryConfig } = require("@sentry/nextjs"); - -module.exports = withSentryConfig( - module.exports, - { - // For all available options, see: - // https://github.com/getsentry/sentry-webpack-plugin#options - - // Suppresses source map uploading logs during build - silent: true, - org: "thames-brook-associates-llc", - project: "abstract-accounts-dashboard", - }, - { - // For all available options, see: - // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/ - - // Upload a larger set of source maps for prettier stack traces (increases build time) - widenClientFileUpload: true, - - // Transpiles SDK to be compatible with IE11 (increases bundle size) - transpileClientSDK: true, - - // Routes browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers (increases server load) - tunnelRoute: "/monitoring", - - // Hides source maps from generated client bundles - hideSourceMaps: true, - - // Automatically tree-shake Sentry logger statements to reduce bundle size - disableLogger: true, - - // Enables automatic instrumentation of Vercel Cron Monitors. - // See the following for more information: - // https://docs.sentry.io/product/crons/ - // https://vercel.com/docs/cron-jobs - automaticVercelMonitors: true, - }, -); diff --git a/apps/abstraxion-dashboard/package.json b/apps/abstraxion-dashboard/package.json deleted file mode 100644 index 3103b5bb..00000000 --- a/apps/abstraxion-dashboard/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "abstraxion-dashboard", - "version": "0.2.0-alpha.28", - "private": true, - "scripts": { - "dev": "next dev --port 3000", - "build": "next build", - "start": "next start", - "lint": "next lint", - "test": "jest", - "test:watch": "jest --watch" - }, - "dependencies": { - "@apollo/client": "^3.8.8", - "@burnt-labs/abstraxion": "workspace:*", - "@burnt-labs/constants": "workspace:*", - "@burnt-labs/signers": "workspace:*", - "@burnt-labs/tailwind-config": "workspace:*", - "@burnt-labs/ui": "workspace:*", - "@cosmjs/crypto": "^0.32.2", - "@cosmjs/proto-signing": "^0.32.2", - "@cosmjs/stargate": "^0.32.2", - "@sentry/nextjs": "^7.100.1", - "@stytch/nextjs": "^14.0.0", - "@stytch/vanilla-js": "^3.2.1", - "@tanstack/react-query": "^4.36.1", - "@vercel/analytics": "^1.1.3", - "cosmjs-types": "^0.9.0", - "graz": "^0.0.51", - "jose": "^5.1.3", - "next": "^14.0.3", - "qrcode.react": "^3.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@burnt-labs/tsconfig": "workspace:*", - "@svgr/webpack": "^8.1.0", - "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "^14.2.1", - "@types/jest": "^29.5.12", - "@types/node": "^20", - "@types/react": "^18.2.47", - "@types/react-dom": "^18.2.18", - "autoprefixer": "^10.4.13", - "eslint": "^8.48.0", - "eslint-config-next": "14.0.4", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", - "postcss": "^8.4.20", - "tailwindcss": "^3.2.4", - "ts-jest": "^29.1.2", - "ts-node": "^10.9.2", - "typescript": "^5.2.2" - } -} \ No newline at end of file diff --git a/apps/abstraxion-dashboard/postcss.config.js b/apps/abstraxion-dashboard/postcss.config.js deleted file mode 100644 index 33ad091d..00000000 --- a/apps/abstraxion-dashboard/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -} diff --git a/apps/abstraxion-dashboard/public/burntAvatarCircle.png b/apps/abstraxion-dashboard/public/burntAvatarCircle.png deleted file mode 100644 index 5b1f34c1..00000000 Binary files a/apps/abstraxion-dashboard/public/burntAvatarCircle.png and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/burntCircle.svg b/apps/abstraxion-dashboard/public/burntCircle.svg deleted file mode 100644 index 2d278ef4..00000000 --- a/apps/abstraxion-dashboard/public/burntCircle.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Black.woff b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Black.woff deleted file mode 100644 index 0d002311..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Black.woff and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Black.woff2 b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Black.woff2 deleted file mode 100644 index a261853d..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Black.woff2 and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BlackItalic.woff b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BlackItalic.woff deleted file mode 100644 index af9a67fe..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BlackItalic.woff and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BlackItalic.woff2 b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BlackItalic.woff2 deleted file mode 100644 index 9e55f640..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BlackItalic.woff2 and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Bold.woff b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Bold.woff deleted file mode 100644 index 47dcd6d0..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Bold.woff and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Bold.woff2 b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Bold.woff2 deleted file mode 100644 index d81fdd60..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Bold.woff2 and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BoldItalic.woff b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BoldItalic.woff deleted file mode 100644 index bd9d5835..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BoldItalic.woff and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BoldItalic.woff2 b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BoldItalic.woff2 deleted file mode 100644 index af942c50..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-BoldItalic.woff2 and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Italic.woff b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Italic.woff deleted file mode 100644 index f16ee04e..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Italic.woff and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Italic.woff2 b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Italic.woff2 deleted file mode 100644 index eef7c973..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Italic.woff2 and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Light.woff b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Light.woff deleted file mode 100644 index e6d128aa..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Light.woff and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Light.woff2 b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Light.woff2 deleted file mode 100644 index f96503e0..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Light.woff2 and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-LightItalic.woff b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-LightItalic.woff deleted file mode 100644 index e57ff531..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-LightItalic.woff and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-LightItalic.woff2 b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-LightItalic.woff2 deleted file mode 100644 index 6615c0e1..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-LightItalic.woff2 and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Regular.woff b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Regular.woff deleted file mode 100644 index 46351efb..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Regular.woff and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Regular.woff2 b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Regular.woff2 deleted file mode 100644 index 1830321d..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Regular.woff2 and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Thin.woff b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Thin.woff deleted file mode 100644 index 20f18bc5..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Thin.woff and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Thin.woff2 b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Thin.woff2 deleted file mode 100644 index 8ae41429..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-Thin.woff2 and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-ThinItalic.woff b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-ThinItalic.woff deleted file mode 100644 index c0022db9..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-ThinItalic.woff and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-ThinItalic.woff2 b/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-ThinItalic.woff2 deleted file mode 100644 index 783da3de..00000000 Binary files a/apps/abstraxion-dashboard/public/fonts/AkkuratLLWeb-ThinItalic.woff2 and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/landingBackground.png b/apps/abstraxion-dashboard/public/landingBackground.png deleted file mode 100644 index 37cf4dbd..00000000 Binary files a/apps/abstraxion-dashboard/public/landingBackground.png and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/logo.png b/apps/abstraxion-dashboard/public/logo.png deleted file mode 100644 index 5518dfe8..00000000 Binary files a/apps/abstraxion-dashboard/public/logo.png and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/next.svg b/apps/abstraxion-dashboard/public/next.svg deleted file mode 100644 index 5174b28c..00000000 --- a/apps/abstraxion-dashboard/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/abstraxion-dashboard/public/okx-logo.png b/apps/abstraxion-dashboard/public/okx-logo.png deleted file mode 100644 index 41bdb766..00000000 Binary files a/apps/abstraxion-dashboard/public/okx-logo.png and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/okxWallet.png b/apps/abstraxion-dashboard/public/okxWallet.png deleted file mode 100644 index 9650a0c8..00000000 Binary files a/apps/abstraxion-dashboard/public/okxWallet.png and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/overviewBackground.png b/apps/abstraxion-dashboard/public/overviewBackground.png deleted file mode 100644 index d024d70a..00000000 Binary files a/apps/abstraxion-dashboard/public/overviewBackground.png and /dev/null differ diff --git a/apps/abstraxion-dashboard/public/vercel.svg b/apps/abstraxion-dashboard/public/vercel.svg deleted file mode 100644 index d2f84222..00000000 --- a/apps/abstraxion-dashboard/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/apps/abstraxion-dashboard/sentry.client.config.ts b/apps/abstraxion-dashboard/sentry.client.config.ts deleted file mode 100644 index 21ce5eee..00000000 --- a/apps/abstraxion-dashboard/sentry.client.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -// This file configures the initialization of Sentry on the client. -// The config you add here will be used whenever a users loads a page in their browser. -// https://docs.sentry.io/platforms/javascript/guides/nextjs/ - -import * as Sentry from "@sentry/nextjs"; - -Sentry.init({ - dsn: "https://e6affd573a77066f0aed8f3226887a1a@o4505325459210240.ingest.sentry.io/4506712120623104", - - enableTracing: false, - - // Setting this option to true will print useful information to the console while you're setting up Sentry. - debug: false, -}); diff --git a/apps/abstraxion-dashboard/sentry.edge.config.ts b/apps/abstraxion-dashboard/sentry.edge.config.ts deleted file mode 100644 index b44a139e..00000000 --- a/apps/abstraxion-dashboard/sentry.edge.config.ts +++ /dev/null @@ -1,15 +0,0 @@ -// This file configures the initialization of Sentry for edge features (middleware, edge routes, and so on). -// The config you add here will be used whenever one of the edge features is loaded. -// Note that this config is unrelated to the Vercel Edge Runtime and is also required when running locally. -// https://docs.sentry.io/platforms/javascript/guides/nextjs/ - -import * as Sentry from "@sentry/nextjs"; - -Sentry.init({ - dsn: "https://e6affd573a77066f0aed8f3226887a1a@o4505325459210240.ingest.sentry.io/4506712120623104", - - enableTracing: false, - - // Setting this option to true will print useful information to the console while you're setting up Sentry. - debug: false, -}); diff --git a/apps/abstraxion-dashboard/sentry.server.config.ts b/apps/abstraxion-dashboard/sentry.server.config.ts deleted file mode 100644 index 96c792ec..00000000 --- a/apps/abstraxion-dashboard/sentry.server.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -// This file configures the initialization of Sentry on the server. -// The config you add here will be used whenever the server handles a request. -// https://docs.sentry.io/platforms/javascript/guides/nextjs/ - -import * as Sentry from "@sentry/nextjs"; - -Sentry.init({ - dsn: "https://e6affd573a77066f0aed8f3226887a1a@o4505325459210240.ingest.sentry.io/4506712120623104", - - enableTracing: false, - - // Setting this option to true will print useful information to the console while you're setting up Sentry. - debug: false, -}); diff --git a/apps/abstraxion-dashboard/tailwind.config.ts b/apps/abstraxion-dashboard/tailwind.config.ts deleted file mode 100644 index bbd6763d..00000000 --- a/apps/abstraxion-dashboard/tailwind.config.ts +++ /dev/null @@ -1,44 +0,0 @@ -import type { Config } from "tailwindcss"; -import sharedConfig from "@burnt-labs/tailwind-config/tailwind.config.ts"; - -const config: Config = { - content: ["./components/**/*.{js,ts,jsx,tsx,mdx}", "./app/page.tsx"], - theme: { - extend: { - backgroundImage: { - "overview-bg": - "url('/apps/abstraxion-dashboard/public/overviewBackground.png')", - }, - colors: { - primary: "#000", - mainnet: "#CAF033", - "mainnet-bg": "rgba(4, 199, 0, 0.2)", - testnet: "#FFAA4A", - "testnet-bg": "rgba(255, 170, 74, 0.2)", - inactive: "#BDBDBD", - }, - flexGrow: { - "2": "2", - }, - fontFamily: { - akkuratLL: ["var(--font-akkuratLL)"], - }, - typography: { - navigation: { - css: { - fontFamily: "akkuratLL", - fontSize: "1.2rem", - fontWeight: "400", - lineHeight: "1.4rem", - letterSpacing: "0.1rem", - textTransform: "uppercase", - }, - }, - }, - }, - }, - plugins: [], - prefix: "ui-", - presets: [sharedConfig], -}; -export default config; diff --git a/apps/abstraxion-dashboard/tsconfig.json b/apps/abstraxion-dashboard/tsconfig.json deleted file mode 100644 index 4202bb3a..00000000 --- a/apps/abstraxion-dashboard/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "@burnt-labs/tsconfig/nextjs.json", - "compilerOptions": { - "plugins": [{ "name": "next" }], - "paths": { - "@/*": [ - "./*" - ] - } - }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} diff --git a/apps/abstraxion-dashboard/types/index.ts b/apps/abstraxion-dashboard/types/index.ts deleted file mode 100644 index 90bc9faf..00000000 --- a/apps/abstraxion-dashboard/types/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -export type authenticatorTypes = "SECP256K1" | "ETHWALLET" | "JWT"; - -export interface AuthenticatorNodes { - __typename: string; - id: string; - type: string; - authenticator: string; - authenticatorIndex: number; - version: string; -} - -export interface AccountAuthenticators { - __typename: string; - nodes: AuthenticatorNodes[]; -} - -export interface AbstraxionAccount { - __typename: string; - id: string; // bech32Address - authenticators: AccountAuthenticators; - currentAuthenticatorIndex: number; -} - -export interface useAbstraxionAccountProps { - data?: AbstraxionAccount; - isConnected: boolean; - isConnecting?: boolean; - isReconnecting?: boolean; -} diff --git a/apps/abstraxion-dashboard/utils/index.ts b/apps/abstraxion-dashboard/utils/index.ts deleted file mode 100644 index 2354b68b..00000000 --- a/apps/abstraxion-dashboard/utils/index.ts +++ /dev/null @@ -1,90 +0,0 @@ -export function truncateAddress(address: string | undefined) { - if (!address) { - return ""; - } - return ( - address.slice(0, 8) + - "..." + - address.slice(address.length - 4, address.length) - ); -} - -export function getHumanReadablePubkey(pubkey: Uint8Array | undefined) { - if (!pubkey) { - return ""; - } - const pubUint8Array = new Uint8Array(Object.values(pubkey)); - const pubBase64 = btoa(String.fromCharCode.apply(null, pubUint8Array)); - return pubBase64; -} - -export function encodeHex(bytes: any) { - return [...bytes].map((byte) => byte.toString(16).padStart(2, "0")).join(""); -} - -export function getEnvNumberOrThrow(key: string, value?: string): number { - const val = Number(value); - if (isNaN(val)) { - throw new Error(`Environment variable ${key} must be defined`); - } - - return val; -} - -export function getEnvStringOrThrow(key: string, value?: string): string { - if (!value) { - throw new Error(`Environment variable ${key} must be defined`); - } - - return value; -} - -export function removeTrailingDigits(number: number) { - return number / 1000000; -} - -export function getCommaSeperatedNumber(number: number) { - const millionthPart = removeTrailingDigits(number); - return millionthPart.toLocaleString("en-US", { - minimumFractionDigits: Math.max( - 0, - Math.ceil( - Math.abs(millionthPart) < 1 ? Math.log10(Math.abs(millionthPart)) : 0, - ), - ), - maximumFractionDigits: 6, - }); -} - -export function formatBalance( - number: number, - locale: string = "en-US", - currency: string = "USD", -) { - const millionthPart = removeTrailingDigits(number); - return new Intl.NumberFormat(locale, { - style: "currency", - currency, - currencyDisplay: "code", - }) - .format(millionthPart) - .replace(currency, "") - .trim(); -} - -export function isValidWalletAddress(address: string) { - if (address.length !== 43 && address.length !== 63) { - return false; - } - - const validCharacters = /^[0-9a-zA-Z]+$/; - if (!validCharacters.test(address)) { - return false; - } - - if (!address.startsWith("xion")) { - return false; - } - - return true; -} diff --git a/apps/abstraxion-dashboard/utils/queries.ts b/apps/abstraxion-dashboard/utils/queries.ts deleted file mode 100644 index a5a42b20..00000000 --- a/apps/abstraxion-dashboard/utils/queries.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { gql } from "@apollo/client"; - -export const SMART_ACCOUNT_FRAGMENT = gql` - fragment SmartAccountFragment on SmartAccountAuthenticator { - id - type - authenticator - authenticatorIndex - version - } -`; - -export const AllSmartWalletQuery = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($authenticator: String!) { - smartAccounts( - filter: { - authenticators: { some: { authenticator: { equalTo: $authenticator } } } - } - ) { - nodes { - id - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } - } -`; - -export const SingleSmartWalletQuery = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($id: String!) { - smartAccount(id: $id) { - id - latestAuthenticatorId - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } -`; - -export const AllSmartWalletQueryByAccountId = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($id: String!) { - smartAccounts(filter: { id: { equalTo: $id } }) { - nodes { - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } - } -`; - -export const AllSmartWalletQueryByIdAndAuthenticator = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($id: String!, $authenticator: String!) { - smartAccounts( - filter: { - id: { equalTo: $id } - authenticators: { some: { authenticator: { equalTo: $authenticator } } } - } - ) { - nodes { - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } - } -`; - -export const AllSmartWalletQueryByIdAndType = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($id: String!, $type: String!) { - smartAccounts( - filter: { - id: { equalTo: $id } - authenticators: { some: { type: { equalTo: $type } } } - } - ) { - nodes { - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } - } -`; - -export const AllSmartWalletQueryByIdAndTypeAndAuthenticator = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($id: String!, $type: String!, $authenticator: String!) { - smartAccounts( - filter: { - id: { equalTo: $id } - authenticators: { - some: { - authenticator: { equalTo: $authenticator } - type: { equalTo: $type } - } - } - } - ) { - nodes { - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } - } -`; diff --git a/apps/abstraxion-settings/.env b/apps/abstraxion-settings/.env deleted file mode 100644 index 3fa96570..00000000 --- a/apps/abstraxion-settings/.env +++ /dev/null @@ -1,7 +0,0 @@ -# DEFAULTS -VITE_DEPLOYMENT_ENV="testnet" -VITE_DEFAULT_API_URL="https://aa.xion-testnet-1.burnt.com" -VITE_DEFAULT_INDEXER_URL="https://api.subquery.network/sq/burnt-labs/xion-indexer" -VITE_DEFAULT_STYTCH_PUBLIC_TOKEN="public-token-live-87901ec3-ef19-48ca-b3f4-842be750181b" -VITE_DEFAULT_CHAIN_INFO="{"rpc":"https://testnet-rpc.xion-api.com:443","rest":"https://testnet-api.xion-api.com:443","chainId":"xion-testnet-1","chainName":"Xion Testnet","bip44":{"coinType":118},"bech32Config":{"bech32PrefixAccAddr":"xion","bech32PrefixValAddr":"xionvaloper","bech32PrefixValPub":"xionvaloperpub","bech32PrefixAccPub":"xionpub","bech32PrefixConsAddr":"xionvalcons","bech32PrefixConsPub":"xionvalconspub"},"stakeCurrency":{"coinDenom":"XION","coinMinimalDenom":"uxion","coinDecimals":6,"gasPriceStep":{"low":0.01,"average":0.025,"high":0.03}},"currencies":[{"coinDenom":"XION","coinMinimalDenom":"uxion","coinDecimals":6,"gasPriceStep":{"low":0.01,"average":0.025,"high":0.03}}],"feeCurrencies":[{"coinDenom":"XION","coinMinimalDenom":"uxion","coinDecimals":6,"gasPriceStep":{"low":0.01,"average":0.025,"high":0.03}}],"features":["cosmwasm"]}" -VITE_OKX_FLAG="false" \ No newline at end of file diff --git a/apps/abstraxion-settings/.gitignore b/apps/abstraxion-settings/.gitignore deleted file mode 100644 index a547bf36..00000000 --- a/apps/abstraxion-settings/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/apps/abstraxion-settings/CHANGELOG.md b/apps/abstraxion-settings/CHANGELOG.md deleted file mode 100644 index b1f8daff..00000000 --- a/apps/abstraxion-settings/CHANGELOG.md +++ /dev/null @@ -1,78 +0,0 @@ -# abstraxion-settings - -## 1.1.0-alpha.6 - -### Minor Changes - -- [#198](https://github.com/burnt-labs/xion.js/pull/198) [`e9dd176`](https://github.com/burnt-labs/xion.js/commit/e9dd1766dbfe4994948e028b51c07eb6dd52cced) Thanks [@BurntVal](https://github.com/BurntVal)! - Update chainInfo vars across monorepo. Please view the abstraxion package readme for more info on opting into mainnet - -### Patch Changes - -- Updated dependencies [[`e9dd176`](https://github.com/burnt-labs/xion.js/commit/e9dd1766dbfe4994948e028b51c07eb6dd52cced)]: - - @burnt-labs/abstraxion@1.0.0-alpha.47 - - @burnt-labs/constants@0.1.0-alpha.10 - -## 1.1.0-alpha.5 - -### Minor Changes - -- [#183](https://github.com/burnt-labs/xion.js/pull/183) [`750803b`](https://github.com/burnt-labs/xion.js/commit/750803b1a4235334322262d1e932f81d3ea13060) Thanks [@BurntVal](https://github.com/BurntVal)! - General cleanup and build optimization - -- [#185](https://github.com/burnt-labs/xion.js/pull/185) [`b1a90e9`](https://github.com/burnt-labs/xion.js/commit/b1a90e956180d3262c69122dacd3cdfee55d5afb) Thanks [@BurntVal](https://github.com/BurntVal)! - revert to explicit flow for creating initial meta account - -### Patch Changes - -- Updated dependencies [[`bcc35c9`](https://github.com/burnt-labs/xion.js/commit/bcc35c9ed8faf2edb6f1e19f06e8b8ced9530067), [`750803b`](https://github.com/burnt-labs/xion.js/commit/750803b1a4235334322262d1e932f81d3ea13060), [`33493c5`](https://github.com/burnt-labs/xion.js/commit/33493c5a33224d59e517ddd84aec3e35d1f5c291), [`b618cc8`](https://github.com/burnt-labs/xion.js/commit/b618cc8edc57463925e3e8945dd2c5ee55d87879), [`a0b5031`](https://github.com/burnt-labs/xion.js/commit/a0b5031f8766369b00562387b692450f396a9d7f)]: - - @burnt-labs/abstraxion@1.0.0-alpha.46 - - @burnt-labs/constants@0.1.0-alpha.9 - - @burnt-labs/signers@0.1.0-alpha.11 - - @burnt-labs/ui@0.1.0-alpha.13 - -## 1.1.0-alpha.4 - -### Patch Changes - -- Updated dependencies [[`a80ed9c`](https://github.com/burnt-labs/xion.js/commit/a80ed9c32f0c5c91a8ec7aacfba5bddddfc43f84), [`b3ecf24`](https://github.com/burnt-labs/xion.js/commit/b3ecf24cf8c240c2b0c721ed803decca9f6a91a4)]: - - @burnt-labs/ui@0.1.0-alpha.12 - - @burnt-labs/abstraxion@1.0.0-alpha.45 - -## 1.1.0-alpha.3 - -### Minor Changes - -- [#167](https://github.com/burnt-labs/xion.js/pull/167) [`1cddf5b`](https://github.com/burnt-labs/xion.js/commit/1cddf5bd9c91393b93e177d8f625ab00d3d284c5) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Added mobile UI fixes for dashboard - -### Patch Changes - -- Updated dependencies [[`2edf674`](https://github.com/burnt-labs/xion.js/commit/2edf674428695388127a24c93cd28e815db43425), [`210bac1`](https://github.com/burnt-labs/xion.js/commit/210bac17b576cba3b470084aed6b07c991a91453), [`e53a5bd`](https://github.com/burnt-labs/xion.js/commit/e53a5bd382481001f1968d3314c858de0fe2b5ea), [`1cddf5b`](https://github.com/burnt-labs/xion.js/commit/1cddf5bd9c91393b93e177d8f625ab00d3d284c5), [`f018dc1`](https://github.com/burnt-labs/xion.js/commit/f018dc124615bbf467abbea35cb656852233593d)]: - - @burnt-labs/abstraxion@1.0.0-alpha.44 - - @burnt-labs/ui@0.1.0-alpha.11 - -## 1.1.0-alpha.2 - -### Patch Changes - -- Updated dependencies [[`aa57bfd`](https://github.com/burnt-labs/xion.js/commit/aa57bfdd0ed1651b652b2a9a39a2eeb54ab25d11)]: - - @burnt-labs/abstraxion@1.0.0-alpha.43 - -## 1.1.0-alpha.1 - -### Patch Changes - -- Updated dependencies [[`bed091d`](https://github.com/burnt-labs/xion.js/commit/bed091d74557457efb681734a27b46d97cdefbbe), [`deb1a8d`](https://github.com/burnt-labs/xion.js/commit/deb1a8dae04fe878a56e9e17d090b94c56069f44)]: - - @burnt-labs/signers@0.1.0-alpha.10 - - @burnt-labs/ui@0.1.0-alpha.10 - - @burnt-labs/abstraxion@1.0.0-alpha.42 - -## 1.1.0-alpha.0 - -### Minor Changes - -- [#151](https://github.com/burnt-labs/xion.js/pull/151) [`958f66a`](https://github.com/burnt-labs/xion.js/commit/958f66ab7b82bdbb8a591d16b2cc399859e8508b) Thanks [@BurntNerve](https://github.com/BurntNerve)! - Broke out grant flow to unique app. - -### Patch Changes - -- Updated dependencies [[`958f66a`](https://github.com/burnt-labs/xion.js/commit/958f66ab7b82bdbb8a591d16b2cc399859e8508b), [`c1ed608`](https://github.com/burnt-labs/xion.js/commit/c1ed60803731b13b831169ed675049e7a257aeeb), [`4c230d8`](https://github.com/burnt-labs/xion.js/commit/4c230d82f20b934acd77ea102e45a29ad3e148ae), [`f09cc0b`](https://github.com/burnt-labs/xion.js/commit/f09cc0b7167e41673f7aeb0ce317896e2e4b5582), [`8ec1c5b`](https://github.com/burnt-labs/xion.js/commit/8ec1c5b752f8136c9e6ba7fcfec16e85542d7c21)]: - - @burnt-labs/constants@0.1.0-alpha.8 - - @burnt-labs/ui@0.1.0-alpha.9 - - @burnt-labs/abstraxion@1.0.0-alpha.41 diff --git a/apps/abstraxion-settings/index.html b/apps/abstraxion-settings/index.html deleted file mode 100644 index f9fa5bcd..00000000 --- a/apps/abstraxion-settings/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - Abstraxion Settings - - -
- - - diff --git a/apps/abstraxion-settings/package-lock.json b/apps/abstraxion-settings/package-lock.json deleted file mode 100644 index 6d04f4a0..00000000 --- a/apps/abstraxion-settings/package-lock.json +++ /dev/null @@ -1,4833 +0,0 @@ -{ - "name": "abstraxion-settings", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "dependencies": { - "preact": "^10.13.1" - }, - "devDependencies": { - "@preact/preset-vite": "^2.5.0", - "eslint": "^8.57.0", - "eslint-config-preact": "^1.3.0", - "typescript": "^5.4.3", - "vite": "^4.3.2" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", - "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.24.2", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.4.tgz", - "integrity": "sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.4.tgz", - "integrity": "sha512-MBVlMXP+kkl5394RBLSxxk/iLTeVGuXTV3cIDXavPpMMqnSnt6apKgan/U8O3USWZCWZT/TbgfEpKa4uMgN4Dg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.2", - "@babel/generator": "^7.24.4", - "@babel/helper-compilation-targets": "^7.23.6", - "@babel/helper-module-transforms": "^7.23.3", - "@babel/helpers": "^7.24.4", - "@babel/parser": "^7.24.4", - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.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" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/eslint-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.24.1.tgz", - "integrity": "sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==", - "dev": true, - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@babel/generator": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.4.tgz", - "integrity": "sha512-Xd6+v6SnjWVx/nus+y0l1sxMOTOMBkyL4+BIdbALyatQnAe/SRVjANeDPSCYaX+i1iJmuGSKf3Z+E+V/va1Hvw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.0", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", - "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.5", - "@babel/helper-validator-option": "^7.23.5", - "browserslist": "^4.22.2", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.24.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", - "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", - "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", - "dev": true, - "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" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", - "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", - "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", - "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.4.tgz", - "integrity": "sha512-FewdlZbSiwaVGlgT1DPANDuCHaDMiOo+D/IDYRFYjHOuv66xMSJ7fQwwODwRNAPkADIO/z1EoF/l2BCWlWABDw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.24.0", - "@babel/traverse": "^7.24.1", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.2", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", - "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.4.tgz", - "integrity": "sha512-zTvEBcghmeBma9QIGunWevvBAp4/Qu9Bdq+2k0Ot4fVMD6v3dsC9WOcRSKk7tRRyBM/53yKMJko9xOatGQAwSg==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.1.tgz", - "integrity": "sha512-05RJdO/cCrtVWuAaSn1tS3bH8jbsJa/Y1uD186u6J4C/1mnHFxseeuWpsqr9anvo7TUulev7tm7GDwRV+VuhDw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", - "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", - "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", - "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.24.0", - "@babel/types": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", - "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.1", - "@babel/generator": "^7.24.1", - "@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.24.1", - "@babel/types": "^7.24.0", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.24.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", - "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.23.4", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "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" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@mdn/browser-compat-data": { - "version": "5.5.19", - "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.5.19.tgz", - "integrity": "sha512-ntKBZtwWCy4XvJosdTJKqIMdmzgbxjopfoiMxgpzsml3dXqA7MIHCE/amidfQc06a6KvmMrpiVuYHIBt2feDog==", - "dev": true - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz", - "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==", - "dev": true, - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@preact/preset-vite": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.8.2.tgz", - "integrity": "sha512-m3tl+M8IO8jgiHnk+7LSTFl8axdPXloewi7iGVLdmCwf34XOzEUur0bZVewW4DUbUipFjTS2CXu27+5f/oexBA==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.15", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@prefresh/vite": "^2.4.1", - "@rollup/pluginutils": "^4.1.1", - "babel-plugin-transform-hook-names": "^1.0.2", - "debug": "^4.3.4", - "kolorist": "^1.8.0", - "magic-string": "0.30.5", - "node-html-parser": "^6.1.10", - "resolve": "^1.22.8", - "source-map": "^0.7.4", - "stack-trace": "^1.0.0-pre2" - }, - "peerDependencies": { - "@babel/core": "7.x", - "vite": "2.x || 3.x || 4.x || 5.x" - } - }, - "node_modules/@prefresh/babel-plugin": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.1.tgz", - "integrity": "sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==", - "dev": true - }, - "node_modules/@prefresh/core": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.2.tgz", - "integrity": "sha512-A/08vkaM1FogrCII5PZKCrygxSsc11obExBScm3JF1CryK2uDS3ZXeni7FeKCx1nYdUkj4UcJxzPzc1WliMzZA==", - "dev": true, - "peerDependencies": { - "preact": "^10.0.0" - } - }, - "node_modules/@prefresh/utils": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.0.tgz", - "integrity": "sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==", - "dev": true - }, - "node_modules/@prefresh/vite": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.5.tgz", - "integrity": "sha512-iForDVJ2M8gQYnm5pHumvTEJjGGc7YNYC0GVKnHFL+GvFfKHfH9Rpq67nUAzNbjuLEpqEOUuQVQajMazWu2ZNQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.22.1", - "@prefresh/babel-plugin": "0.5.1", - "@prefresh/core": "^1.5.1", - "@prefresh/utils": "^1.2.0", - "@rollup/pluginutils": "^4.2.1" - }, - "peerDependencies": { - "preact": "^10.4.0", - "vite": ">=2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "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" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "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" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", - "es-shim-unscopables": "^1.0.2" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/ast-metadata-inferer": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ast-metadata-inferer/-/ast-metadata-inferer-0.8.0.tgz", - "integrity": "sha512-jOMKcHht9LxYIEQu+RVd22vtgrPaVCtDRQ/16IGmurdzxvYbDd5ynxjnyrzLnieG96eTcAyaoj/wN/4/1FyyeA==", - "dev": true, - "dependencies": { - "@mdn/browser-compat-data": "^5.2.34" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-plugin-transform-hook-names": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-hook-names/-/babel-plugin-transform-hook-names-1.0.2.tgz", - "integrity": "sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.12.10" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001605", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001605.tgz", - "integrity": "sha512-nXwGlFWo34uliI9z3n6Qc0wZaf7zaZWA1CPZ169La5mV3I/gem7bst0vr5XQH5TJXZIMfDeZyOrZnSlVzKxxHQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.726", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.726.tgz", - "integrity": "sha512-xtjfBXn53RORwkbyKvDfTajtnTp0OJoPOIBzXvkNbb7+YYvCHJflba3L7Txyx/6Fov3ov2bGPr/n5MTixmPhdQ==", - "dev": true - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "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" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-preact": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-preact/-/eslint-config-preact-1.3.0.tgz", - "integrity": "sha512-yHYXg5qNzEJd3D/30AmsIW0W8MuY858KpApXp7xxBF08IYUljSKCOqMx+dVucXHQnAm7+11wOnMkgVHIBAechw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/eslint-parser": "^7.13.14", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-decorators": "^7.12.13", - "@babel/plugin-syntax-jsx": "^7.12.13", - "eslint-plugin-compat": "^4.0.0", - "eslint-plugin-jest": "^25.2.4", - "eslint-plugin-react": "^7.27.0", - "eslint-plugin-react-hooks": "^4.3.0" - }, - "peerDependencies": { - "eslint": "6.x || 7.x || 8.x" - } - }, - "node_modules/eslint-plugin-compat": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-4.2.0.tgz", - "integrity": "sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==", - "dev": true, - "dependencies": { - "@mdn/browser-compat-data": "^5.3.13", - "ast-metadata-inferer": "^0.8.0", - "browserslist": "^4.21.10", - "caniuse-lite": "^1.0.30001524", - "find-up": "^5.0.0", - "lodash.memoize": "^4.1.2", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=14.x" - }, - "peerDependencies": { - "eslint": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-compat/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-compat/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-compat/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dev": true, - "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" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "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" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", - "dev": true, - "dependencies": { - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", - "dev": true, - "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" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", - "dev": true - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-html-parser": { - "version": "6.1.13", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", - "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", - "dev": true, - "dependencies": { - "css-select": "^5.1.0", - "he": "1.2.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.4.tgz", - "integrity": "sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==", - "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/preact": { - "version": "10.20.1", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.20.1.tgz", - "integrity": "sha512-JIFjgFg9B2qnOoGiYMVBtrcFxHqn+dNXbq76bVmcaHYJFYR4lW67AOcXgAYQQTDYXDOg/kTZrKPNCdRgJ2UJmw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dev": true, - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stack-trace": { - "version": "1.0.0-pre2", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0-pre2.tgz", - "integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", - "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "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" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", - "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/vite": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", - "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", - "dev": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "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" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", - "dev": true, - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/apps/abstraxion-settings/package.json b/apps/abstraxion-settings/package.json deleted file mode 100644 index 51b8445d..00000000 --- a/apps/abstraxion-settings/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "abstraxion-settings", - "version": "1.1.0-alpha.6", - "private": true, - "type": "module", - "scripts": { - "dev": "vite --port 3002", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "@apollo/client": "^3.8.8", - "@burnt-labs/abstraxion": "workspace:*", - "@burnt-labs/constants": "workspace:*", - "@burnt-labs/signers": "workspace:*", - "@burnt-labs/ui": "workspace:*", - "@cosmjs/proto-signing": "^0.32.2", - "@cosmjs/stargate": "^0.32.2", - "@stytch/react": "^16.0.0", - "@stytch/vanilla-js": "^4.7.0", - "cosmjs-types": "^0.9.0", - "graz": "^0.0.51", - "jose": "^5.1.3", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@burnt-labs/tailwind-config": "workspace:*", - "@types/node": "^20", - "@vitejs/plugin-react": "^4.2.1", - "autoprefixer": "^10.4.13", - "buffer": "^6.0.3", - "crypto-browserify": "^3.12.0", - "postcss": "^8.4.20", - "stream-browserify": "^3.0.0", - "tailwindcss": "^3.2.4", - "typescript": "^5.2.2", - "vite": "^4.3.2", - "vite-plugin-node-polyfills": "^0.17.0", - "vm-browserify": "^1.1.2" - } -} diff --git a/apps/abstraxion-settings/postcss.config.js b/apps/abstraxion-settings/postcss.config.js deleted file mode 100644 index 2aa7205d..00000000 --- a/apps/abstraxion-settings/postcss.config.js +++ /dev/null @@ -1,6 +0,0 @@ -export default { - plugins: { - tailwindcss: {}, - autoprefixer: {}, - }, -}; diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Black.woff b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Black.woff deleted file mode 100644 index 0d002311..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Black.woff and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Black.woff2 b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Black.woff2 deleted file mode 100644 index a261853d..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Black.woff2 and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BlackItalic.woff b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BlackItalic.woff deleted file mode 100644 index af9a67fe..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BlackItalic.woff and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BlackItalic.woff2 b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BlackItalic.woff2 deleted file mode 100644 index 9e55f640..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BlackItalic.woff2 and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Bold.woff b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Bold.woff deleted file mode 100644 index 47dcd6d0..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Bold.woff and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Bold.woff2 b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Bold.woff2 deleted file mode 100644 index d81fdd60..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Bold.woff2 and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BoldItalic.woff b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BoldItalic.woff deleted file mode 100644 index bd9d5835..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BoldItalic.woff and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BoldItalic.woff2 b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BoldItalic.woff2 deleted file mode 100644 index af942c50..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-BoldItalic.woff2 and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Italic.woff b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Italic.woff deleted file mode 100644 index f16ee04e..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Italic.woff and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Italic.woff2 b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Italic.woff2 deleted file mode 100644 index eef7c973..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Italic.woff2 and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Light.woff b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Light.woff deleted file mode 100644 index e6d128aa..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Light.woff and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Light.woff2 b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Light.woff2 deleted file mode 100644 index f96503e0..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Light.woff2 and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-LightItalic.woff b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-LightItalic.woff deleted file mode 100644 index e57ff531..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-LightItalic.woff and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-LightItalic.woff2 b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-LightItalic.woff2 deleted file mode 100644 index 6615c0e1..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-LightItalic.woff2 and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Regular.woff b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Regular.woff deleted file mode 100644 index 46351efb..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Regular.woff and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Regular.woff2 b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Regular.woff2 deleted file mode 100644 index 1830321d..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Regular.woff2 and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Thin.woff b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Thin.woff deleted file mode 100644 index 20f18bc5..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Thin.woff and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Thin.woff2 b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Thin.woff2 deleted file mode 100644 index 8ae41429..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-Thin.woff2 and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-ThinItalic.woff b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-ThinItalic.woff deleted file mode 100644 index c0022db9..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-ThinItalic.woff and /dev/null differ diff --git a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-ThinItalic.woff2 b/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-ThinItalic.woff2 deleted file mode 100644 index 783da3de..00000000 Binary files a/apps/abstraxion-settings/public/fonts/AkkuratLLWeb-ThinItalic.woff2 and /dev/null differ diff --git a/apps/abstraxion-settings/public/icon.svg b/apps/abstraxion-settings/public/icon.svg deleted file mode 100644 index d96f9957..00000000 --- a/apps/abstraxion-settings/public/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/apps/abstraxion-settings/src/abstraxion-types.d.ts b/apps/abstraxion-settings/src/abstraxion-types.d.ts deleted file mode 100644 index 17f6253b..00000000 --- a/apps/abstraxion-settings/src/abstraxion-types.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -interface Window { - ethereum: any; - keplr: any; - okxwallet: any; -} diff --git a/apps/abstraxion-settings/src/assets/burntAvatarCircle.png b/apps/abstraxion-settings/src/assets/burntAvatarCircle.png deleted file mode 100644 index 5b1f34c1..00000000 Binary files a/apps/abstraxion-settings/src/assets/burntAvatarCircle.png and /dev/null differ diff --git a/apps/abstraxion-settings/src/assets/logo.png b/apps/abstraxion-settings/src/assets/logo.png deleted file mode 100644 index 5518dfe8..00000000 Binary files a/apps/abstraxion-settings/src/assets/logo.png and /dev/null differ diff --git a/apps/abstraxion-settings/src/assets/okx-logo.png b/apps/abstraxion-settings/src/assets/okx-logo.png deleted file mode 100644 index 41bdb766..00000000 Binary files a/apps/abstraxion-settings/src/assets/okx-logo.png and /dev/null differ diff --git a/apps/abstraxion-settings/src/assets/xion-bg-blur.png b/apps/abstraxion-settings/src/assets/xion-bg-blur.png deleted file mode 100644 index 8f817d55..00000000 Binary files a/apps/abstraxion-settings/src/assets/xion-bg-blur.png and /dev/null differ diff --git a/apps/abstraxion-settings/src/components/Abstraxion/index.tsx b/apps/abstraxion-settings/src/components/Abstraxion/index.tsx deleted file mode 100644 index 17374c69..00000000 --- a/apps/abstraxion-settings/src/components/Abstraxion/index.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import { useContext, useEffect } from "react"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "../AbstraxionContext"; -import { Dialog, DialogContent } from "@burnt-labs/ui"; -import { AbstraxionSignin } from "../AbstraxionSignin"; -import { useAbstraxionAccount } from "../../hooks/useAbstraxionAccount"; -import { AbstraxionWallets } from "../AbstraxionWallets"; -import { ErrorDisplay } from "../ErrorDisplay"; -import { AbstraxionGrant } from "../AbstraxionGrant"; -import { useQueryParams } from "../../hooks/useQueryParams"; -import xionLogo from "../../assets/logo.png"; - -export interface ModalProps { - onClose: VoidFunction; - isOpen: boolean; -} - -export const Abstraxion = ({ isOpen, onClose }: ModalProps) => { - const { contracts, stake, bank, grantee } = useQueryParams([ - "contracts", - "stake", - "bank", - "grantee", - ]); - - const { abstraxionError, isMainnet } = useContext( - AbstraxionContext, - ) as AbstraxionContextProps; - - const { isConnected, data: account } = useAbstraxionAccount(); - - let bankArray; - try { - bankArray = JSON.parse(bank || ""); - } catch (e) { - // If the bank is not a valid JSON, we split it by comma. Dapp using old version of the library. - bankArray = []; - } - - let contractsArray; - try { - contractsArray = JSON.parse(contracts || ""); - } catch (e) { - // If the contracts are not a valid JSON, we split them by comma. Dapp using old version of the library. - contractsArray = contracts?.split(",") || []; - } - - useEffect(() => { - const closeOnEscKey = (e: any) => (e.key === "Escape" ? onClose() : null); - document.addEventListener("keydown", closeOnEscKey); - return () => { - document.removeEventListener("keydown", closeOnEscKey); - }; - }, [onClose]); - - if (!isOpen) return null; - - return ( - <> - - - {abstraxionError ? ( - - ) : account?.id && - grantee && - // We support granting any combination of - (contractsArray.length > 0 || stake || bankArray.length > 0) ? ( - - ) : isConnected ? ( - - ) : ( - - )} - - - {/* TOS Footer */} - {!isConnected && ( -
-
- - By continuing, you agree to and acknowledge that you have read and - understand the - - - Disclaimer - - . -
-
-

- Powered by -

-
-
- {isMainnet ? "MAINNET" : "TESTNET"} -
- - XION Logo - -
-
-
- )} - - ); -}; - -export const AbstraxionProvider = ({ - children, -}: { - children: React.ReactNode; -}) => { - return { children }; -}; diff --git a/apps/abstraxion-settings/src/components/AbstraxionContext/index.tsx b/apps/abstraxion-settings/src/components/AbstraxionContext/index.tsx deleted file mode 100644 index 7ba0a06b..00000000 --- a/apps/abstraxion-settings/src/components/AbstraxionContext/index.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import { createContext, useState } from "react"; -import { ChainInfo } from "@burnt-labs/constants"; - -import { getEnvStringOrThrow } from "../../utils"; - -type ConnectionType = "stytch" | "graz" | "metamask" | "okx" | "none"; -type Dispatch = (value: A) => void; -type SetStateAction = S | ((prevState: S) => S); - -export interface AbstraxionContextProps { - connectionType: ConnectionType; - setConnectionType: Dispatch>; - abstractAccount: any; // TODO: Properly define interface here - setAbstractAccount: Dispatch; - abstraxionError: string; - setAbstraxionError: Dispatch>; - apiUrl: string; - chainInfo: ChainInfo; - isMainnet: boolean; - isOpen: boolean; - setIsOpen: Dispatch>; -} - -export const AbstraxionContext = createContext( - {} as AbstraxionContextProps, -); - -export const AbstraxionContextProvider = ({ - children, -}: { - children: React.ReactNode; -}) => { - const [connectionType, setConnectionType] = useState("none"); - const [abstractAccount, setAbstractAccount] = useState( - undefined, - ); - const [abstraxionError, setAbstraxionError] = useState(""); - const [isOpen, setIsOpen] = useState(false); - - const serializedChainInfo = getEnvStringOrThrow( - "VITE_DEFAULT_CHAIN_INFO", - import.meta.env.VITE_DEFAULT_CHAIN_INFO, - ); - const chainInfo = JSON.parse(serializedChainInfo); - const apiUrl = getEnvStringOrThrow( - "VITE_DEFAULT_API_URL", - import.meta.env.VITE_DEFAULT_API_URL, - ); - const isMainnet = - getEnvStringOrThrow( - "VITE_DEPLOYMENT_ENV", - import.meta.env.VITE_DEPLOYMENT_ENV, - ) === "mainnet" - ? true - : false; - - return ( - - {children} - - ); -}; diff --git a/apps/abstraxion-settings/src/components/AbstraxionGrant/generateBankGrant.tsx b/apps/abstraxion-settings/src/components/AbstraxionGrant/generateBankGrant.tsx deleted file mode 100644 index 566547b0..00000000 --- a/apps/abstraxion-settings/src/components/AbstraxionGrant/generateBankGrant.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import { MsgGrant } from "cosmjs-types/cosmos/authz/v1beta1/tx"; -import { SendAuthorization } from "cosmjs-types/cosmos/bank/v1beta1/authz"; - -export const generateBankGrant = ( - expiration: bigint, - grantee: string, - granter: string, - bank: { denom: string; amount: string }[], -) => { - return { - typeUrl: MsgGrant.typeUrl, - value: MsgGrant.fromPartial({ - grant: { - authorization: { - typeUrl: SendAuthorization.typeUrl, - value: SendAuthorization.encode( - SendAuthorization.fromPartial({ - spendLimit: bank, - }), - ).finish(), - }, - expiration: { - seconds: expiration, - }, - }, - grantee, - granter, - }), - }; -}; diff --git a/apps/abstraxion-settings/src/components/AbstraxionGrant/generateContractGrant.tsx b/apps/abstraxion-settings/src/components/AbstraxionGrant/generateContractGrant.tsx deleted file mode 100644 index 85d97bc7..00000000 --- a/apps/abstraxion-settings/src/components/AbstraxionGrant/generateContractGrant.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import type { ContractGrantDescription } from "@burnt-labs/abstraxion"; -import { - AllowAllMessagesFilter, - CombinedLimit, - ContractExecutionAuthorization, - MaxCallsLimit, -} from "cosmjs-types/cosmwasm/wasm/v1/authz"; -import { MsgGrant } from "cosmjs-types/cosmos/authz/v1beta1/tx"; - -export const generateContractGrant = ( - expiration: bigint, - grantee: string, - granter: string, - contracts: ContractGrantDescription[], -) => { - const contractExecutionAuthorizationValue = - ContractExecutionAuthorization.encode( - ContractExecutionAuthorization.fromPartial({ - grants: contracts.map((contractGrantDescription) => { - if (typeof contractGrantDescription === "string") { - const contract = contractGrantDescription; - return { - contract, - limit: { - typeUrl: MaxCallsLimit.typeUrl, - value: MaxCallsLimit.encode( - MaxCallsLimit.fromPartial({ - remaining: BigInt("255"), - }), - ).finish(), - }, - filter: { - typeUrl: AllowAllMessagesFilter.typeUrl, - }, - }; - } - - const { address, amounts } = contractGrantDescription; - return { - contract: address, - limit: { - typeUrl: "/cosmwasm.wasm.v1.CombinedLimit", - value: CombinedLimit.encode( - CombinedLimit.fromPartial({ - callsRemaining: BigInt("255"), - amounts, - }), - ).finish(), - }, - filter: { - typeUrl: AllowAllMessagesFilter.typeUrl, - }, - }; - }), - }), - ).finish(); - const grantValue = MsgGrant.fromPartial({ - grant: { - authorization: { - typeUrl: ContractExecutionAuthorization.typeUrl, - value: contractExecutionAuthorizationValue, - }, - expiration: { - seconds: expiration, - }, - }, - grantee, - granter, - }); - - return { - typeUrl: MsgGrant.typeUrl, - value: grantValue, - }; -}; diff --git a/apps/abstraxion-settings/src/components/AbstraxionGrant/generateStakeGrant.tsx b/apps/abstraxion-settings/src/components/AbstraxionGrant/generateStakeGrant.tsx deleted file mode 100644 index 13cc9c7d..00000000 --- a/apps/abstraxion-settings/src/components/AbstraxionGrant/generateStakeGrant.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import { MsgGrant, MsgExec } from "cosmjs-types/cosmos/authz/v1beta1/tx"; -import { GenericAuthorization } from "cosmjs-types/cosmos/authz/v1beta1/authz"; -import { MsgWithdrawDelegatorReward } from "cosmjs-types/cosmos/distribution/v1beta1/tx"; -import { - AuthorizationType, - StakeAuthorization, -} from "cosmjs-types/cosmos/staking/v1beta1/authz"; -import { - MsgCancelUnbondingDelegation, - MsgDelegate, - MsgUndelegate, -} from "cosmjs-types/cosmos/staking/v1beta1/tx"; -import { - AllowedMsgAllowance, - BasicAllowance, -} from "cosmjs-types/cosmos/feegrant/v1beta1/feegrant"; -import { MsgGrantAllowance } from "cosmjs-types/cosmos/feegrant/v1beta1/tx"; - -export const generateStakeGrant = ( - expiration: bigint, - grantee: string, - granter: string, -): Array<{ - typeUrl: string; - value: MsgGrant | MsgGrantAllowance; -}> => { - const feeGrant = { - typeUrl: MsgGrantAllowance.typeUrl, - value: MsgGrantAllowance.fromPartial({ - allowance: { - typeUrl: AllowedMsgAllowance.typeUrl, - value: AllowedMsgAllowance.encode( - AllowedMsgAllowance.fromPartial({ - allowance: { - typeUrl: BasicAllowance.typeUrl, - value: BasicAllowance.encode( - BasicAllowance.fromPartial({ - spendLimit: [], - expiration: { - seconds: expiration, - }, - }), - ).finish(), - }, - allowedMessages: [ - MsgWithdrawDelegatorReward.typeUrl, - MsgDelegate.typeUrl, - MsgUndelegate.typeUrl, - MsgExec.typeUrl, - MsgCancelUnbondingDelegation.typeUrl, - ], - }), - ).finish(), - }, - grantee, - granter, - }), - }; - - // Need to grant MsgWithdrawDelegatorReward and MsgCancelUnbondingDelegation - const genericMsgGrants = [ - MsgWithdrawDelegatorReward.typeUrl, - MsgCancelUnbondingDelegation.typeUrl, - ].map((msg) => ({ - typeUrl: MsgGrant.typeUrl, - value: MsgGrant.fromPartial({ - grant: { - authorization: { - typeUrl: GenericAuthorization.typeUrl, - value: GenericAuthorization.encode( - GenericAuthorization.fromPartial({ - msg, - }), - ).finish(), - }, - expiration: { - seconds: expiration, - }, - }, - grantee, - granter, - }), - })); - - const grants = [ - AuthorizationType.AUTHORIZATION_TYPE_DELEGATE, - AuthorizationType.AUTHORIZATION_TYPE_UNDELEGATE, - AuthorizationType.AUTHORIZATION_TYPE_REDELEGATE, - ].map((authorizationType) => ({ - typeUrl: MsgGrant.typeUrl, - value: MsgGrant.fromPartial({ - grant: { - authorization: { - typeUrl: StakeAuthorization.typeUrl, - value: StakeAuthorization.encode( - StakeAuthorization.fromPartial({ - authorizationType, - }), - ).finish(), - }, - expiration: { - seconds: expiration, - }, - }, - grantee, - granter, - }), - })); - - return [...grants, ...genericMsgGrants, feeGrant]; -}; diff --git a/apps/abstraxion-settings/src/components/AbstraxionGrant/index.tsx b/apps/abstraxion-settings/src/components/AbstraxionGrant/index.tsx deleted file mode 100644 index cb7927f8..00000000 --- a/apps/abstraxion-settings/src/components/AbstraxionGrant/index.tsx +++ /dev/null @@ -1,225 +0,0 @@ -import { useEffect, useState } from "react"; -import { Button, Spinner } from "@burnt-labs/ui"; -import { useAbstraxionAccount, useAbstraxionSigningClient } from "../../hooks"; -import burntAvatar from "../../assets/burntAvatarCircle.png"; -import { CheckIcon } from "../Icons"; -import { EncodeObject } from "@cosmjs/proto-signing"; -import type { ContractGrantDescription } from "@burnt-labs/abstraxion"; -import { assertIsDeliverTxSuccess } from "@cosmjs/stargate/build/stargateclient"; -import { generateBankGrant } from "./generateBankGrant"; -import { generateContractGrant } from "./generateContractGrant"; -import { generateStakeGrant } from "./generateStakeGrant"; -import { useQueryParams } from "../../hooks/useQueryParams"; -import { ErrorDisplay } from "../ErrorDisplay"; - -interface AbstraxionGrantProps { - contracts: ContractGrantDescription[]; - grantee: string; - stake: boolean; - bank: { denom: string; amount: string }[]; -} - -export const AbstraxionGrant = ({ - contracts, - grantee, - stake, - bank, -}: AbstraxionGrantProps) => { - const { client } = useAbstraxionSigningClient(); - const { data: account } = useAbstraxionAccount(); - const { redirect_uri } = useQueryParams(["redirect_uri"]); - - const [inProgress, setInProgress] = useState(false); - const [showSuccess, setShowSuccess] = useState(false); - const [failed, setFailed] = useState(false); - const [accessDenied, setAccessDenied] = useState(false); - - function redirectToDapp() { - let redirectUri = new URLSearchParams(window.location.search).get( - "redirect_uri", - ); - let url: URL | null = null; - if (redirectUri) { - url = new URL(redirectUri); - let params = new URLSearchParams(url.search); - params.append("granted", "true"); - params.append("granter", account.id); - url.search = params.toString(); - redirectUri = url.toString(); - window.location.href = redirectUri; - } - } - - useEffect(() => { - if (showSuccess && redirect_uri) { - redirectToDapp(); - } - }); - - const denyAccess = () => { - let redirectUri = new URLSearchParams(window.location.search).get( - "redirect_uri", - ); - setAccessDenied(true); - // Wait 3 seconds before redirecting to dapp - if (redirect_uri) { - setTimeout(() => { - window.location.href = redirectUri; - }, 3000); - } - }; - - const grant = async () => { - setInProgress(true); - if (!client) { - throw new Error("no client"); - } - - if (!account) { - throw new Error("no account"); - } - - const granter = account.id; - const timestampThreeMonthsFromNow = BigInt( - Math.floor( - new Date(new Date().setMonth(new Date().getMonth() + 3)).getTime() / - 1000, - ), - ); - - const msgs: EncodeObject[] = []; - - if (contracts.length > 0) { - msgs.push( - generateContractGrant( - timestampThreeMonthsFromNow, - grantee, - granter, - contracts, - ), - ); - } - - if (stake) { - msgs.push( - ...generateStakeGrant(timestampThreeMonthsFromNow, grantee, granter), - ); - } - - if (bank.length > 0) { - msgs.push( - generateBankGrant(timestampThreeMonthsFromNow, grantee, granter, bank), - ); - } - - try { - if (msgs.length === 0) { - throw new Error("No grants to send"); - } - - const deliverTxResponse = await client?.signAndBroadcast( - account.id, - msgs, - { - amount: [{ amount: "0", denom: "uxion" }], - gas: "500000", - }, - ); - assertIsDeliverTxSuccess({ - ...deliverTxResponse, - gasUsed: BigInt(deliverTxResponse.gasUsed), - gasWanted: BigInt(deliverTxResponse.gasWanted), - }); - - setShowSuccess(true); - setInProgress(false); - } catch (error) { - setInProgress(false); - console.log("something went wrong: ", error); - setFailed(true); - } - }; - - if (inProgress) { - return ( -
- -
- ); - } - - if (accessDenied) { - return ( -
-

- ACCESS DENIED -

-

- This tab will close automatically in a few moments. Please switch back - to the previous window to continue your experience. -

-
- ); - } - - if (failed) { - return ; - } - - return ( -
- {showSuccess ? ( - <> -

- Your sign-in
- was Successful! -

-

- Please switch back to the previous window to continue your - experience. -

- - ) : ( - <> -
- Burnt Avatar -
-
-

- A 3rd party would like to: -

-
-
    -
  • - - - - Have access to your account -
  • -
  • - - - - Log you in to their app -
  • -
-
-
- - -
-
- - )} -
- ); -}; diff --git a/apps/abstraxion-settings/src/components/AbstraxionSignin/index.tsx b/apps/abstraxion-settings/src/components/AbstraxionSignin/index.tsx deleted file mode 100644 index 7c21f59c..00000000 --- a/apps/abstraxion-settings/src/components/AbstraxionSignin/index.tsx +++ /dev/null @@ -1,227 +0,0 @@ -import { useContext, useEffect, useState } from "react"; -import { useStytch } from "@stytch/react"; -import { Button, Input, ModalSection } from "@burnt-labs/ui"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "../AbstraxionContext"; -import { getHumanReadablePubkey } from "../../utils"; - -import okxLogo from "../../assets/okx-logo.png"; - -const okxFlag = process.env.NEXT_PUBLIC_OKX_FLAG === "true"; -const deploymentEnv = process.env.NEXT_PUBLIC_DEPLOYMENT_ENV; - -// Variable to be true if deploymentEnv is "testnet", otherwise check okxFlag for "mainnet" -const shouldEnableFeature = - deploymentEnv === "testnet" || (deploymentEnv === "mainnet" && okxFlag); - -export const AbstraxionSignin = () => { - const stytchClient = useStytch(); - - const [email, setEmail] = useState(""); - const [methodId, setMethodId] = useState(""); - const [emailError, setEmailError] = useState(""); - const [isOnOtpStep, setIsOnOtpStep] = useState(false); - const [otp, setOtp] = useState(""); - const [otpError, setOtpError] = useState(""); - const [timeLeft, setTimeLeft] = useState(null); - const [showAdvanced, setShowAdvanced] = useState(false); - - const { setConnectionType, setAbstraxionError, chainInfo } = useContext( - AbstraxionContext, - ) as AbstraxionContextProps; - - const handleEmailChange = (e: React.ChangeEvent) => { - setEmailError(""); - setEmail(e.currentTarget.value.toLowerCase()); - }; - - const handleOtpChange = (e: React.ChangeEvent) => { - setOtpError(""); - setOtp(e.currentTarget.value); - }; - - const EMAIL_REGEX = /\S+@\S+\.\S+/; - const validateEmail = () => { - if (EMAIL_REGEX.test(email) || email === "") { - setEmailError(""); - } else { - setEmailError("Invalid Email Format"); - } - }; - - const handleEmail = async (event: any) => { - event.preventDefault(); - - if (!email) { - setEmailError("Please enter your email"); - return; - } - - try { - setConnectionType("stytch"); - const emailRes = await stytchClient.otps.email.loginOrCreate(email); - setMethodId(emailRes.method_id); - setIsOnOtpStep(true); - setTimeLeft(60); - } catch (error) { - setEmailError("Error sending email"); - setConnectionType("none"); - } - }; - - const handleOtp = async (event: any) => { - event.preventDefault(); - - try { - await stytchClient.otps.authenticate(otp, methodId, { - session_duration_minutes: 60, - }); - localStorage.setItem("loginType", "stytch"); - } catch (error) { - setOtpError("Error verifying otp"); - } - }; - - async function handleOkx() { - if (!window.okxwallet) { - alert("Please install the OKX wallet extension"); - return; - } - try { - await window.okxwallet.keplr.enable(chainInfo.chainId); - const okxAccount = await window.okxwallet.keplr.getKey(chainInfo.chainId); - const authenticator = getHumanReadablePubkey(okxAccount.pubKey); - setConnectionType("okx"); - localStorage.setItem("loginType", "okx"); - localStorage.setItem("loginAuthenticator", authenticator); - localStorage.setItem("okxXionAddress", okxAccount.bech32Address); - localStorage.setItem("okxWalletName", okxAccount.name); - } catch (error) { - setAbstraxionError("OKX wallet connect error"); - } - } - - // For the "resend otp" countdown - useEffect(() => { - if (timeLeft === 0) { - setTimeLeft(null); - } - if (!timeLeft) return; - const intervalId = setInterval(() => { - setTimeLeft(timeLeft - 1); - }, 1000); - return () => clearInterval(intervalId); - }, [timeLeft]); - - return ( - - {isOnOtpStep ? ( - <> -
-

- Input 6 digit code -

-

- Please check your email for the verification code -

-
- e.key === "Enter" && handleOtp(e)} - /> -
- - - {timeLeft ? ( -
- RESEND {`IN ${timeLeft}S`} -
- ) : ( - - )} -
- - ) : ( - <> -
-

- Welcome -

-

- Log in or sign up with your email -

-
- e.key === "Enter" && handleEmail(e)} - /> - - {shouldEnableFeature ? ( -
- - {showAdvanced ? ( -
-

- Log into your existing XION Meta account with a crypto - wallet -

- -
- ) : null} -
- ) : null} - - )} -
- ); -}; diff --git a/apps/abstraxion-settings/src/components/AbstraxionWallets/index.tsx b/apps/abstraxion-settings/src/components/AbstraxionWallets/index.tsx deleted file mode 100644 index 27ee87fb..00000000 --- a/apps/abstraxion-settings/src/components/AbstraxionWallets/index.tsx +++ /dev/null @@ -1,222 +0,0 @@ -import { useContext, useEffect, useState, useCallback } from "react"; -import { useDisconnect } from "graz"; -import { useStytch, useStytchUser } from "@stytch/react"; -import { useQuery } from "@apollo/client"; -import { Button, Spinner } from "@burnt-labs/ui"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "../AbstraxionContext"; -import { AllSmartWalletQuery } from "../../utils/queries"; -import { truncateAddress } from "../../utils"; -import { useAbstraxionAccount } from "../../hooks"; -import { Loading } from "../Loading"; -import { WalletIcon } from "../Icons"; - -export const AbstraxionWallets = () => { - const { - connectionType, - setConnectionType, - abstractAccount, - setAbstractAccount, - setAbstraxionError, - apiUrl, - } = useContext(AbstraxionContext) as AbstraxionContextProps; - - const { user } = useStytchUser(); - const stytchClient = useStytch(); - const session_jwt = stytchClient.session.getTokens()?.session_jwt; - const session_token = stytchClient.session.getTokens()?.session_token; - - const { loginAuthenticator } = useAbstraxionAccount(); - - const { disconnect } = useDisconnect(); - - const { loading, error, data, startPolling, stopPolling, previousData } = - useQuery(AllSmartWalletQuery, { - variables: { - authenticator: loginAuthenticator, - }, - fetchPolicy: "network-only", - notifyOnNetworkStatusChange: true, - }); - - const [isGeneratingNewWallet, setIsGeneratingNewWallet] = useState(false); - const [fetchingNewWallets, setFetchingNewWallets] = useState(false); - - const handleDisconnect = async () => { - if (connectionType === "stytch") { - await stytchClient.session.revoke(); - } - disconnect(); - setConnectionType("none"); - setAbstractAccount(undefined); - localStorage.removeItem("loginType"); - localStorage.removeItem("loginAuthenticator"); - localStorage.removeItem("okxXionAddress"); - localStorage.removeItem("okxWalletName"); - }; - - const handleJwtAALoginOrCreate = useCallback(async () => { - try { - setIsGeneratingNewWallet(true); - const res = await fetch(`${apiUrl}/api/v1/jwt-accounts/create`, { - method: "POST", - headers: { - "content-type": "application/json", - }, - body: JSON.stringify({ - salt: Date.now().toString(), - session_jwt, - session_token, - }), - }); - const body = await res.json(); - if (!res.ok) { - throw new Error(body.error); - } - startPolling(3000); - setFetchingNewWallets(true); - } catch (error) { - console.log(error); - setAbstraxionError("Error creating abstract account."); - } finally { - setIsGeneratingNewWallet(false); - } - }, [ - apiUrl, - session_jwt, - session_token, - setIsGeneratingNewWallet, - startPolling, - setFetchingNewWallets, - setAbstraxionError, - ]); - - useEffect(() => { - if (previousData && data !== previousData) { - stopPolling(); - setFetchingNewWallets(false); - } - }, [data, previousData, stopPolling]); - - useEffect(() => { - if (abstractAccount && previousData && data !== previousData) { - // Updating abstract account in context on poll - const node = data?.smartAccounts?.nodes.find( - (smartAccount) => smartAccount.id === abstractAccount.id, - ); - setAbstractAccount({ - ...node, - userId: user?.user_id, - currentAuthenticatorIndex: node.authenticators.nodes.find( - (authenticator) => authenticator.authenticator === loginAuthenticator, - ).authenticatorIndex, - }); - } - }, [ - data, - previousData, - abstractAccount, - loginAuthenticator, - setAbstractAccount, - user?.user_id, - ]); - - if (error) { - setAbstraxionError("Failed to fetch accounts"); - return null; - } - - return ( - <> - {isGeneratingNewWallet ? ( - - ) : ( -
-
-

- Welcome -

-

- Choose an account to continue -

-
-
-
- Accounts -
-
- {loading || fetchingNewWallets ? ( - - ) : data?.smartAccounts?.nodes.length >= 1 ? ( - data?.smartAccounts?.nodes?.map((node: any, i: number) => ( -
{ - setAbstractAccount({ - ...node, - userId: user?.user_id, - currentAuthenticatorIndex: - node.authenticators.nodes.find( - (authenticator) => - authenticator.authenticator === - loginAuthenticator, - ).authenticatorIndex, - }); - }} - > - -
-

- Personal Account {i + 1} -

-

- {truncateAddress(node.id)} -

-
-
- )) - ) : ( - <> -

No Accounts Found.

- {connectionType !== "stytch" ? ( -

- This authenticator can only be used as a backup right now. - Please log in with email to create an account. -

- ) : null} - - )} -
-
-
- {!fetchingNewWallets && - data?.smartAccounts?.nodes.length < 1 && - connectionType === "stytch" ? ( - - ) : null} - -
-
- )} - - ); -}; diff --git a/apps/abstraxion-settings/src/components/App.tsx b/apps/abstraxion-settings/src/components/App.tsx deleted file mode 100644 index 39b23cc5..00000000 --- a/apps/abstraxion-settings/src/components/App.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { Dialog, DialogContent } from "@burnt-labs/ui"; -import { useQueryParams } from "../hooks/useQueryParams"; -import { Abstraxion } from "./Abstraxion"; -import { ErrorDisplay } from "./ErrorDisplay"; - -export function App() { - const { contracts, stake, bank, grantee } = useQueryParams([ - "contracts", - "stake", - "bank", - "grantee", - ]); - - return grantee && (contracts || stake || bank) ? ( -
- null} isOpen={true} /> -
- ) : ( - - - - - - ); -} diff --git a/apps/abstraxion-settings/src/components/ErrorDisplay/index.tsx b/apps/abstraxion-settings/src/components/ErrorDisplay/index.tsx deleted file mode 100644 index 0d971c8d..00000000 --- a/apps/abstraxion-settings/src/components/ErrorDisplay/index.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { useContext } from "react"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "../AbstraxionContext"; -import { Button } from "@burnt-labs/ui"; - -export const ErrorDisplay = ({ - title = "OOPS! Something went wrong...", - message = "Please try refreshing the page. If the problem continues, check your internet connection or try again later.", - buttonTitle = "Refresh the Page", - onClick, -}: { - title?: string; - message?: string; - onClick?: VoidFunction; - buttonTitle?: string; -}) => { - const { setAbstraxionError } = useContext( - AbstraxionContext, - ) as AbstraxionContextProps; - - const refreshPage = () => window.location.reload(); - - return ( -
-

- {title} -

-

- {message} -

- -
- ); -}; diff --git a/apps/abstraxion-settings/src/components/Icons/Avatar.tsx b/apps/abstraxion-settings/src/components/Icons/Avatar.tsx deleted file mode 100644 index 8cdfdbe8..00000000 --- a/apps/abstraxion-settings/src/components/Icons/Avatar.tsx +++ /dev/null @@ -1,17 +0,0 @@ -export const AvatarIcon = ({ - color, - backgroundColor, -}: { - color: string; - backgroundColor: string; -}) => ( - - - - - - -); diff --git a/apps/abstraxion-settings/src/components/Icons/Check.tsx b/apps/abstraxion-settings/src/components/Icons/Check.tsx deleted file mode 100644 index 14718eef..00000000 --- a/apps/abstraxion-settings/src/components/Icons/Check.tsx +++ /dev/null @@ -1,16 +0,0 @@ -export const CheckIcon = ({ color = "black" }: { color?: string }) => ( - - - -); diff --git a/apps/abstraxion-settings/src/components/Icons/ChevronDown.tsx b/apps/abstraxion-settings/src/components/Icons/ChevronDown.tsx deleted file mode 100644 index df3f16ea..00000000 --- a/apps/abstraxion-settings/src/components/Icons/ChevronDown.tsx +++ /dev/null @@ -1,15 +0,0 @@ -export const ChevronDownIcon = ({ color = "black" }: { color?: string }) => ( - - - -); diff --git a/apps/abstraxion-settings/src/components/Icons/Close.tsx b/apps/abstraxion-settings/src/components/Icons/Close.tsx deleted file mode 100644 index 3d28da26..00000000 --- a/apps/abstraxion-settings/src/components/Icons/Close.tsx +++ /dev/null @@ -1,23 +0,0 @@ -export const CloseIcon = ({ - color = "black", - onClick, -}: { - color?: string; - onClick: VoidFunction; -}) => ( - - - -); diff --git a/apps/abstraxion-settings/src/components/Icons/Copy.tsx b/apps/abstraxion-settings/src/components/Icons/Copy.tsx deleted file mode 100644 index e3100160..00000000 --- a/apps/abstraxion-settings/src/components/Icons/Copy.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export const CopyIcon = ({ color }: { color: string }) => ( - - - - - - -); diff --git a/apps/abstraxion-settings/src/components/Icons/RightArrow.tsx b/apps/abstraxion-settings/src/components/Icons/RightArrow.tsx deleted file mode 100644 index c17787c8..00000000 --- a/apps/abstraxion-settings/src/components/Icons/RightArrow.tsx +++ /dev/null @@ -1,8 +0,0 @@ -export const RightArrowIcon = ({ color }: { color: string }) => ( - - - -); diff --git a/apps/abstraxion-settings/src/components/Icons/Scan.tsx b/apps/abstraxion-settings/src/components/Icons/Scan.tsx deleted file mode 100644 index f0b4ca7e..00000000 --- a/apps/abstraxion-settings/src/components/Icons/Scan.tsx +++ /dev/null @@ -1,13 +0,0 @@ -export const ScanIcon = ({ color }: { color: string }) => ( - - - - -); diff --git a/apps/abstraxion-settings/src/components/Icons/USDC.tsx b/apps/abstraxion-settings/src/components/Icons/USDC.tsx deleted file mode 100644 index 86570678..00000000 --- a/apps/abstraxion-settings/src/components/Icons/USDC.tsx +++ /dev/null @@ -1,27 +0,0 @@ -export const USDCIcon = ({ color }: { color: string }) => ( - - - - - - - - - -); diff --git a/apps/abstraxion-settings/src/components/Icons/Wallet.tsx b/apps/abstraxion-settings/src/components/Icons/Wallet.tsx deleted file mode 100644 index 5b7ef5ba..00000000 --- a/apps/abstraxion-settings/src/components/Icons/Wallet.tsx +++ /dev/null @@ -1,32 +0,0 @@ -export const WalletIcon = ({ - color, - backgroundColor, - outlineColor, -}: { - color: string; - backgroundColor: string; - outlineColor?: string; -}) => ( - - - - - -); diff --git a/apps/abstraxion-settings/src/components/Icons/Xion.tsx b/apps/abstraxion-settings/src/components/Icons/Xion.tsx deleted file mode 100644 index 9390664f..00000000 --- a/apps/abstraxion-settings/src/components/Icons/Xion.tsx +++ /dev/null @@ -1,24 +0,0 @@ -export const XionIcon = () => ( - - - - - -); diff --git a/apps/abstraxion-settings/src/components/Icons/index.ts b/apps/abstraxion-settings/src/components/Icons/index.ts deleted file mode 100644 index 3d07db74..00000000 --- a/apps/abstraxion-settings/src/components/Icons/index.ts +++ /dev/null @@ -1,10 +0,0 @@ -// Re-export the other files in this directory -export { ScanIcon } from "./Scan"; -export { RightArrowIcon } from "./RightArrow"; -export { CheckIcon } from "./Check"; -export { CopyIcon } from "./Copy"; -export { AvatarIcon } from "./Avatar"; -export { ChevronDownIcon } from "./ChevronDown"; -export { WalletIcon } from "./Wallet"; -export { CloseIcon } from "./Close"; -export { XionIcon } from "./Xion"; diff --git a/apps/abstraxion-settings/src/components/Loading/index.tsx b/apps/abstraxion-settings/src/components/Loading/index.tsx deleted file mode 100644 index caf7363e..00000000 --- a/apps/abstraxion-settings/src/components/Loading/index.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { ModalSection, Spinner } from "@burnt-labs/ui"; - -export const Loading = () => { - return ( - -
-

- Let's Go -

-

Starting your journey

-
-
- -
-
- ); -}; diff --git a/apps/abstraxion-settings/src/hooks/index.ts b/apps/abstraxion-settings/src/hooks/index.ts deleted file mode 100644 index 62ae03ee..00000000 --- a/apps/abstraxion-settings/src/hooks/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { - useAbstraxionAccount, - type AbstraxionAccount, -} from "./useAbstraxionAccount"; -export { useAbstraxionSigningClient } from "./useAbstraxionSigningClient"; diff --git a/apps/abstraxion-settings/src/hooks/useAbstraxionAccount.ts b/apps/abstraxion-settings/src/hooks/useAbstraxionAccount.ts deleted file mode 100644 index 92ecd805..00000000 --- a/apps/abstraxion-settings/src/hooks/useAbstraxionAccount.ts +++ /dev/null @@ -1,173 +0,0 @@ -import { useContext, useEffect, useRef, useState } from "react"; -import { useAccount } from "graz"; -import { useStytch, useStytchSession } from "@stytch/react"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "../components/AbstraxionContext"; -import { decodeJwt } from "jose"; -import { getHumanReadablePubkey } from "../utils"; - -export interface AuthenticatorNodes { - __typename: string; - id: string; - type: string; - authenticator: string; - authenticatorIndex: number; - version: string; -} - -export interface AccountAuthenticators { - __typename: string; - nodes: AuthenticatorNodes[]; -} - -export interface AbstraxionAccount { - __typename: string; - id: string; // bech32Address - authenticators: AccountAuthenticators; - currentAuthenticatorIndex: number; -} - -export interface useAbstraxionAccountProps { - data?: AbstraxionAccount; - isConnected: boolean; - isConnecting?: boolean; - isReconnecting?: boolean; -} - -export const useAbstraxionAccount = () => { - const { session } = useStytchSession(); - - const { - connectionType, - setConnectionType, - abstractAccount, - setAbstractAccount, - } = useContext(AbstraxionContext) as AbstraxionContextProps; - - const loginType = localStorage.getItem("loginType"); - const [loginAuthenticator, setLoginAuthenticator] = useState( - localStorage.getItem("loginAuthenticator"), - ); - - const { data: grazAccount, isConnected } = useAccount(); - const stytchClient = useStytch(); - const session_jwt = stytchClient.session.getTokens()?.session_jwt; - - function getAuthenticator() { - let authenticator = ""; - switch (connectionType) { - case "stytch": - const { aud, sub } = session_jwt - ? decodeJwt(session_jwt) - : { aud: undefined, sub: undefined }; - authenticator = `${Array.isArray(aud) ? aud[0] : aud}.${sub}`; - break; - case "graz": - authenticator = getHumanReadablePubkey(grazAccount?.pubKey); - break; - case "metamask": - authenticator = loginAuthenticator || ""; - break; - case "okx": - authenticator = loginAuthenticator || ""; - break; - case "none": - authenticator = ""; - break; - } - - return authenticator; - } - - useEffect(() => { - const refreshConnectionType = () => { - setConnectionType((loginType as any) || "none"); - }; - - if (connectionType === "none") { - refreshConnectionType(); - } - }, [session, isConnected, grazAccount]); - - // Metamask & OKX account detection - useEffect(() => { - const handleAccountsChanged = (accounts: string[]) => { - if (connectionType === "metamask") { - localStorage.setItem("loginAuthenticator", accounts[0]); - setLoginAuthenticator(accounts[0]); - setAbstractAccount(undefined); - } - }; - - window.ethereum?.on("accountsChanged", handleAccountsChanged); - - return () => { - window.ethereum?.off("accountsChanged", handleAccountsChanged); - }; - }, []); - - // OKX account detection - useEffect(() => { - const handleAccountsChanged = async (accounts: any) => { - if (connectionType === "okx") { - const okxXionAddress = localStorage.getItem("okxXionAddress"); - const okxWalletName = localStorage.getItem("okxWalletName"); - - // If user switches account via extension, log user out. - // No good way to handle account switch via the OKX keplr event system - if ( - okxXionAddress !== accounts.account.XION_TEST || - okxWalletName !== accounts.name - ) { - // Basically log out - setConnectionType("none"); - setAbstractAccount(undefined); - localStorage.removeItem("loginType"); - localStorage.removeItem("loginAuthenticator"); - localStorage.removeItem("okxXionAddress"); - localStorage.removeItem("okxWalletName"); - } - } - }; - - if (window.okxwallet) { - window.okxwallet?.keplr.on("connect", handleAccountsChanged); - } - - return () => { - window.okxwallet?.keplr.on("connect", handleAccountsChanged); - }; - }, []); - - // Keplr account detection - useEffect(() => { - const handleAccountsChanged = () => { - if (connectionType === "graz") { - setAbstractAccount(undefined); - } - }; - - window.addEventListener("keplr_keystorechange", handleAccountsChanged); - return () => { - window.removeEventListener("keplr_keystorechange", handleAccountsChanged); - }; - }, []); - - return { - data: (abstractAccount as AbstraxionAccount) || undefined, - connectionType, - loginAuthenticator: getAuthenticator(), - isConnected: - connectionType === "stytch" - ? !!session - : connectionType === "graz" - ? isConnected - : connectionType === "metamask" - ? window.ethereum.isConnected() - : connectionType === "okx" - ? localStorage.getItem("loginAuthenticator") - : false, - }; -}; diff --git a/apps/abstraxion-settings/src/hooks/useAbstraxionSigningClient.ts b/apps/abstraxion-settings/src/hooks/useAbstraxionSigningClient.ts deleted file mode 100644 index 0a448cfb..00000000 --- a/apps/abstraxion-settings/src/hooks/useAbstraxionSigningClient.ts +++ /dev/null @@ -1,157 +0,0 @@ -import { useCallback, useContext, useEffect, useMemo, useState } from "react"; -import { useStytch } from "@stytch/react"; -import { - AAClient, - AADirectSigner, - AbstractAccountJWTSigner, - GasPrice, -} from "@burnt-labs/signers"; -import { - AbstraxionContext, - AbstraxionContextProps, -} from "../components/AbstraxionContext"; -import { getKeplr, useOfflineSigners } from "graz"; -import { testnetChainInfo } from "@burnt-labs/constants"; -import { AAEthSigner } from "@burnt-labs/signers"; -import { getEnvStringOrThrow } from "../utils"; - -export const useAbstraxionSigningClient = () => { - const { connectionType, abstractAccount, chainInfo } = useContext( - AbstraxionContext, - ) as AbstraxionContextProps; - - const stytch = useStytch(); - const sessionToken = stytch.session.getTokens()?.session_token; - - const { data } = useOfflineSigners(); - const keplr = window.keplr ? getKeplr() : undefined; - - const [abstractClient, setAbstractClient] = useState( - undefined, - ); - - async function okxSignArb( - chainId: string, - account: string, - signBytes: Uint8Array, - ) { - if (!window.okxwallet) { - alert("Please install the OKX wallet extension"); - return; - } - await window.okxwallet.keplr.enable(chainInfo.chainId); - const signDataNew = Uint8Array.from(Object.values(signBytes)); - return window.okxwallet.keplr.signArbitrary(chainId, account, signDataNew); - } - - async function ethSigningFn(msg: any) { - const accounts = await window.ethereum?.request({ - method: "eth_requestAccounts", - }); - return window.ethereum?.request({ - method: "personal_sign", - params: [msg, accounts[0]], - }); - } - - const getSigner = useCallback(async () => { - let signer: - | AbstractAccountJWTSigner - | AADirectSigner - | AAEthSigner - | undefined = undefined; - - switch (connectionType) { - case "stytch": - signer = new AbstractAccountJWTSigner( - abstractAccount.id, - abstractAccount.currentAuthenticatorIndex, - sessionToken, - getEnvStringOrThrow( - "VITE_DEFAULT_INDEXER_URL", - import.meta.env.VITE_DEFAULT_INDEXER_URL, - ), - getEnvStringOrThrow( - "VITE_DEFAULT_API_URL", - import.meta.env.VITE_DEFAULT_API_URL, - ), - ); - break; - case "graz": - if (data && data.offlineSigner && keplr) { - signer = new AADirectSigner( - data?.offlineSigner as any, // Temp solution. TS doesn't like this - abstractAccount.id, - abstractAccount.currentAuthenticatorIndex, - // @ts-ignore - signArbitrary function exists on Keplr although it doesn't show - keplr.signArbitrary, - getEnvStringOrThrow( - "VITE_DEFAULT_INDEXER_URL", - import.meta.env.VITE_DEFAULT_INDEXER_URL, - ), - ); - break; - } - case "okx": - if (window.okxwallet) { - const okxOfflineSigner = - await window.okxwallet.keplr.getOfflineSigner(chainInfo.chainId); - signer = new AADirectSigner( - okxOfflineSigner, - abstractAccount.id, - abstractAccount.currentAuthenticatorIndex, - okxSignArb, - getEnvStringOrThrow( - "VITE_DEFAULT_INDEXER_URL", - import.meta.env.VITE_DEFAULT_INDEXER_URL, - ), - ); - break; - } - case "metamask": - if (window.ethereum) { - signer = new AAEthSigner( - abstractAccount.id, - abstractAccount.currentAuthenticatorIndex, - ethSigningFn, - getEnvStringOrThrow( - "VITE_DEFAULT_INDEXER_URL", - import.meta.env.VITE_DEFAULT_INDEXER_URL, - ), - ); - } - break; - case "none": - signer = undefined; - break; - } - - if (!signer) { - console.warn("No signer found"); - return; - } - - const abstractClient = await AAClient.connectWithSigner( - // Should be set in the context but defaulting here just in case. - chainInfo.rpc || testnetChainInfo.rpc, - signer, - { - gasPrice: GasPrice.fromString("0uxion"), - }, - ); - setAbstractClient(abstractClient); - }, [sessionToken, abstractAccount, connectionType, data, keplr]); - - useEffect(() => { - if (abstractAccount) { - getSigner(); - } - }, [abstractAccount]); - - const memoizedClient = useMemo( - () => ({ client: abstractClient }), - [abstractClient], - ); - - return memoizedClient; -}; diff --git a/apps/abstraxion-settings/src/hooks/useQueryParams.ts b/apps/abstraxion-settings/src/hooks/useQueryParams.ts deleted file mode 100644 index d34fef5b..00000000 --- a/apps/abstraxion-settings/src/hooks/useQueryParams.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { useEffect, useState } from "react"; - -type QueryParams = { - [K in T]?: string | null; -}; - -export const useQueryParams = ( - paramsList: T[], -): QueryParams => { - const [queryParams, setQueryParams] = useState>({}); - - useEffect(() => { - const getQueryParams = (): QueryParams => { - const searchParams = new URLSearchParams(window.location.search); - const params: Partial> = {}; - - paramsList.forEach((param) => { - const value = searchParams.get(param); - params[param] = value; - }); - - return params as QueryParams; - }; - - const handleLocationChange = () => { - setQueryParams(getQueryParams()); - }; - - handleLocationChange(); - window.addEventListener("popstate", handleLocationChange); - return () => window.removeEventListener("popstate", handleLocationChange); - }, [paramsList.join(",")]); // Dependency on a string representation of paramsList - - return queryParams; -}; diff --git a/apps/abstraxion-settings/src/index.css b/apps/abstraxion-settings/src/index.css deleted file mode 100644 index 113f4cbd..00000000 --- a/apps/abstraxion-settings/src/index.css +++ /dev/null @@ -1,40 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@font-face { - font-family: 'AkkuratLL'; - src: url('/fonts/AkkuratLLWeb-Thin.woff2') format('woff2'); - font-weight: 100; - font-style: normal; - } - - @font-face { - font-family: 'AkkuratLL'; - src: url('/fonts/AkkuratLLWeb-Light.woff2') format('woff2'); - font-weight: 200; - font-style: normal; - } - - @font-face { - font-family: 'AkkuratLL'; - src: url('/fonts/AkkuratLLWeb-Regular.woff2') format('woff2'); - font-weight: 400; - font-style: normal; - } - - @font-face { - font-family: 'AkkuratLL'; - src: url('/fonts/AkkuratLLWeb-Bold.woff2') format('woff2'); - font-weight: 700; - font-style: normal; - } - - @font-face { - font-family: 'AkkuratLL'; - src: url('/fonts/AkkuratLLWeb-Black.woff2') format('woff2'); - font-weight: 900; - font-style: normal; - } - - diff --git a/apps/abstraxion-settings/src/lib.ts b/apps/abstraxion-settings/src/lib.ts deleted file mode 100644 index e2c7c828..00000000 --- a/apps/abstraxion-settings/src/lib.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { ApolloClient, InMemoryCache } from "@apollo/client"; -import { StytchHeadlessClient } from "@stytch/vanilla-js/headless"; -import { getEnvStringOrThrow } from "./utils"; - -export const stytchClient = new StytchHeadlessClient( - getEnvStringOrThrow( - "VITE_DEFAULT_STYTCH_PUBLIC_TOKEN", - import.meta.env.VITE_DEFAULT_STYTCH_PUBLIC_TOKEN, - ), -); - -// TODO: Refactor to be dynamic. Local dev uri must be device IP. -export const apolloClient = new ApolloClient({ - uri: getEnvStringOrThrow( - "VITE_DEFAULT_INDEXER_URL", - import.meta.env.VITE_DEFAULT_INDEXER_URL, - ), - cache: new InMemoryCache(), - assumeImmutableResults: true, -}); diff --git a/apps/abstraxion-settings/src/main.tsx b/apps/abstraxion-settings/src/main.tsx deleted file mode 100644 index 0229729d..00000000 --- a/apps/abstraxion-settings/src/main.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import React from "react"; -import ReactDOM from "react-dom/client"; -import { StytchProvider } from "@stytch/react"; -import { ApolloProvider } from "@apollo/client"; -import { GrazProvider } from "graz"; -import { apolloClient, stytchClient } from "./lib"; -import { AbstraxionContextProvider } from "./components/AbstraxionContext"; -import { App } from "./components/App"; - -import "./index.css"; -import "@burnt-labs/ui/dist/index.css"; - -ReactDOM.createRoot(document.getElementById("root")!).render( - - - - - - - - - - - , -); diff --git a/apps/abstraxion-settings/src/utils/index.ts b/apps/abstraxion-settings/src/utils/index.ts deleted file mode 100644 index 2354b68b..00000000 --- a/apps/abstraxion-settings/src/utils/index.ts +++ /dev/null @@ -1,90 +0,0 @@ -export function truncateAddress(address: string | undefined) { - if (!address) { - return ""; - } - return ( - address.slice(0, 8) + - "..." + - address.slice(address.length - 4, address.length) - ); -} - -export function getHumanReadablePubkey(pubkey: Uint8Array | undefined) { - if (!pubkey) { - return ""; - } - const pubUint8Array = new Uint8Array(Object.values(pubkey)); - const pubBase64 = btoa(String.fromCharCode.apply(null, pubUint8Array)); - return pubBase64; -} - -export function encodeHex(bytes: any) { - return [...bytes].map((byte) => byte.toString(16).padStart(2, "0")).join(""); -} - -export function getEnvNumberOrThrow(key: string, value?: string): number { - const val = Number(value); - if (isNaN(val)) { - throw new Error(`Environment variable ${key} must be defined`); - } - - return val; -} - -export function getEnvStringOrThrow(key: string, value?: string): string { - if (!value) { - throw new Error(`Environment variable ${key} must be defined`); - } - - return value; -} - -export function removeTrailingDigits(number: number) { - return number / 1000000; -} - -export function getCommaSeperatedNumber(number: number) { - const millionthPart = removeTrailingDigits(number); - return millionthPart.toLocaleString("en-US", { - minimumFractionDigits: Math.max( - 0, - Math.ceil( - Math.abs(millionthPart) < 1 ? Math.log10(Math.abs(millionthPart)) : 0, - ), - ), - maximumFractionDigits: 6, - }); -} - -export function formatBalance( - number: number, - locale: string = "en-US", - currency: string = "USD", -) { - const millionthPart = removeTrailingDigits(number); - return new Intl.NumberFormat(locale, { - style: "currency", - currency, - currencyDisplay: "code", - }) - .format(millionthPart) - .replace(currency, "") - .trim(); -} - -export function isValidWalletAddress(address: string) { - if (address.length !== 43 && address.length !== 63) { - return false; - } - - const validCharacters = /^[0-9a-zA-Z]+$/; - if (!validCharacters.test(address)) { - return false; - } - - if (!address.startsWith("xion")) { - return false; - } - - return true; -} diff --git a/apps/abstraxion-settings/src/utils/queries.ts b/apps/abstraxion-settings/src/utils/queries.ts deleted file mode 100644 index a5a42b20..00000000 --- a/apps/abstraxion-settings/src/utils/queries.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { gql } from "@apollo/client"; - -export const SMART_ACCOUNT_FRAGMENT = gql` - fragment SmartAccountFragment on SmartAccountAuthenticator { - id - type - authenticator - authenticatorIndex - version - } -`; - -export const AllSmartWalletQuery = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($authenticator: String!) { - smartAccounts( - filter: { - authenticators: { some: { authenticator: { equalTo: $authenticator } } } - } - ) { - nodes { - id - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } - } -`; - -export const SingleSmartWalletQuery = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($id: String!) { - smartAccount(id: $id) { - id - latestAuthenticatorId - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } -`; - -export const AllSmartWalletQueryByAccountId = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($id: String!) { - smartAccounts(filter: { id: { equalTo: $id } }) { - nodes { - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } - } -`; - -export const AllSmartWalletQueryByIdAndAuthenticator = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($id: String!, $authenticator: String!) { - smartAccounts( - filter: { - id: { equalTo: $id } - authenticators: { some: { authenticator: { equalTo: $authenticator } } } - } - ) { - nodes { - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } - } -`; - -export const AllSmartWalletQueryByIdAndType = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($id: String!, $type: String!) { - smartAccounts( - filter: { - id: { equalTo: $id } - authenticators: { some: { type: { equalTo: $type } } } - } - ) { - nodes { - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } - } -`; - -export const AllSmartWalletQueryByIdAndTypeAndAuthenticator = gql` - ${SMART_ACCOUNT_FRAGMENT} - query ($id: String!, $type: String!, $authenticator: String!) { - smartAccounts( - filter: { - id: { equalTo: $id } - authenticators: { - some: { - authenticator: { equalTo: $authenticator } - type: { equalTo: $type } - } - } - } - ) { - nodes { - authenticators { - nodes { - ...SmartAccountFragment - } - } - } - } - } -`; diff --git a/apps/abstraxion-settings/tailwind.config.ts b/apps/abstraxion-settings/tailwind.config.ts deleted file mode 100644 index eac0c3fd..00000000 --- a/apps/abstraxion-settings/tailwind.config.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { Config } from "tailwindcss"; -import sharedConfig from "@burnt-labs/tailwind-config/tailwind.config"; -const config: Config = { - prefix: "ui-", - content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], - theme: { - extend: { - fontFamily: { - akkuratLL: ["AkkuratLL"], - }, - colors: { - primary: "#000", - mainnet: "#CAF033", - "mainnet-bg": "rgba(4, 199, 0, 0.2)", - testnet: "#FFAA4A", - "testnet-bg": "rgba(255, 170, 74, 0.2)", - inactive: "#BDBDBD", - }, - flexGrow: { - "2": "2", - }, - }, - }, - plugins: [], - presets: [sharedConfig], -}; - -export default config; diff --git a/apps/abstraxion-settings/tsconfig.json b/apps/abstraxion-settings/tsconfig.json deleted file mode 100644 index de088052..00000000 --- a/apps/abstraxion-settings/tsconfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "ESNext", - "moduleResolution": "bundler", - "noEmit": true, - "jsx": "react-jsx", - "skipLibCheck": true, - "types": ["vite/client"], - }, - "include": ["**/*"] -} diff --git a/apps/abstraxion-settings/vite.config.ts b/apps/abstraxion-settings/vite.config.ts deleted file mode 100644 index e7d63513..00000000 --- a/apps/abstraxion-settings/vite.config.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { defineConfig } from "vite"; -import react from "@vitejs/plugin-react"; -import { nodePolyfills } from "vite-plugin-node-polyfills"; - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [ - react(), - nodePolyfills({ - include: ["buffer", "util", "stream", "crypto", "vm"], - }), - ], - optimizeDeps: { - esbuildOptions: { - // Node.js global to browser globalThis - define: { - global: "globalThis", - }, - }, - }, - resolve: { - alias: { - crypto: "crypto-browserify", - stream: "stream-browserify", - buffer: "buffer", - vm: "vm-browserify", - }, - }, - build: { - rollupOptions: { - plugins: [nodePolyfills()], - }, - }, -});