[DOCs/operators] QUIC deployment script & docs (#6098)
* add quic_bridge_deployment.sh * create a snippet with quick install steps * add quic deployment to changelog * add quic deployment to node config page * add version compatibility callout * last edits and scraped stats update * correct name of QUIC snippet * fix naming * fix naming * re-run python-prebuild.sh aka time-now updated * attempt to fix vercel build the hard way * rerun npm * build with pnpm * restore lock file and rebuild w pnpm * chore: update pnpm lockfile * attempt to fix build * attempt to fix runtime builds * update ci-docs run OS
This commit is contained in:
committed by
Jędrzej Stuczyński
parent
90aaa3572d
commit
f67bc0ead5
@@ -11,6 +11,7 @@ import { Alert, AlertTitle } from '@mui/material';
|
||||
import { Wallet } from '@cosmos-kit/core';
|
||||
import { CosmosKitLedger } from './ledger';
|
||||
import { CosmosKitSign } from './sign';
|
||||
import type { SignerOptions } from '@cosmos-kit/core';
|
||||
|
||||
const CosmosKitSetup: FC<{ children: React.ReactNode }> = ({ children }) => {
|
||||
const assetsFixedUp = React.useMemo(() => {
|
||||
@@ -40,14 +41,16 @@ const CosmosKitSetup: FC<{ children: React.ReactNode }> = ({ children }) => {
|
||||
return chains;
|
||||
}, [chains]);
|
||||
|
||||
|
||||
// components/cosmos-kit/index.tsx
|
||||
|
||||
return (
|
||||
<ChainProvider
|
||||
chains={chainsFixedUp}
|
||||
assetLists={assetsFixedUp}
|
||||
wallets={[...ledger, ...keplr]}
|
||||
signerOptions={{
|
||||
preferredSignType: () => 'amino',
|
||||
}}
|
||||
signerOptions={{ preferredSignType: () => 'amino' }}
|
||||
throwErrors={false}
|
||||
>
|
||||
{children}
|
||||
</ChainProvider>
|
||||
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
import { Steps } from 'nextra/components';
|
||||
import { Callout } from 'nextra/components';
|
||||
import { AccordionTemplate } from 'components/accordion-template.tsx';
|
||||
|
||||
<Callout type="info" emoji="ℹ️">
|
||||
**QUIC bridge is a requirement for all nodes which enable Wireguard functionality. Note that it this feature is compatible with nodes from `v1.18.0` (platform release [`v2025.17-isabirra`](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2025.17-isabirra)) and newer!**
|
||||
</ Callout>
|
||||
|
||||
Nym Network uses various [transport bridges](https://github.com/nymtech/nym-bridges/blob/main/README.md) for routing the packets. Right now operators need to configure [our implementation](https://github.com/nymtech/nym-bridges/tree/main/nym-bridge) of general-purpose transport layer network protocol called [QUIC](https://en.wikipedia.org/wiki/QUIC).
|
||||
|
||||
Operators can use [Nym Bridge Configuration Tool](https://github.com/nymtech/nym-bridges/tree/main/bridge-cfg) and compile the [Bridge Runner binary](https://github.com/nymtech/nym-bridges/tree/main/nym-bridge) themselves.
|
||||
|
||||
**We recommend a more convenient QUIC bridge deployment using a script [`quic_bridge_deployment.sh`](https://github.com/nymtech/nym/blob/develop/scripts/nym-node-setup/quic_bridge_deployment.sh), following the steps below.**
|
||||
|
||||
<Steps>
|
||||
###### 1. Download [`quic_bridge_deployment.sh`](https://github.com/nymtech/nym/blob/develop/scripts/nym-node-setup/quic_bridge_deployment.sh) script
|
||||
- SSH to your server
|
||||
- Download the script and make executable
|
||||
```sh
|
||||
wget https://raw.githubusercontent.com/nymtech/nym/refs/heads/develop/scripts/nym-node-setup/quic_bridge_deployment.sh && \
|
||||
chmod +x quic_bridge_deployment.sh
|
||||
```
|
||||
|
||||
|
||||
###### 2. Run the script with `full_bridge_setup` command
|
||||
- Optional: open `tmux` in case you will need to run another commands on the VPS
|
||||
- Run the script with a command `full_bridge_setup`
|
||||
```sh
|
||||
./nym-node-setup/quic_bridge_deployment.sh full_bridge_setup
|
||||
```
|
||||
|
||||
###### 3. Follow the interactive prompts
|
||||
- When you are asked for bridge binary URL, look here for one to match your system: [builds.ci.nymte.ch/QUIC](https://builds.ci.nymte.ch/QUIC/)
|
||||
- When you are asked to enter forward address, it's your IPv4 used for bonding the node, alongside port `:51822` (an example: `172.232.238.161:51822`)
|
||||
- To find out your IP address you can always run:
|
||||
- IPv4: `curl -4 https://ifconfig.co/ip`
|
||||
- IPv6: `curl -6 https://ifconfig.co/ip`
|
||||
- **For all prompts with default options, we highly recommend to stick to default (press enter)**
|
||||
|
||||
###### 4. Restart the node service
|
||||
- When done with the deployment, please restart your node systemd service
|
||||
```sh
|
||||
service nym-node restart && journalctl -u nym-node.service -f --all
|
||||
```
|
||||
</Steps>
|
||||
|
||||
Congratulation, you deployed QUIC transport bridge! The script offers a standalone tweaks and checks, you can always run it without any argument to see all the options:
|
||||
```sh
|
||||
./quic_bridge_deployment.sh
|
||||
```
|
||||
<br/>
|
||||
<AccordionTemplate name="Command output">
|
||||
```shell
|
||||
root@localhost:~# ./quic_bridge_deployment.sh
|
||||
iptables-persistent is already installed.
|
||||
Usage: ./quic_bridge_deployment.sh [command] [options]
|
||||
|
||||
Nym QUIC Bridge Deployment Helper Script
|
||||
|
||||
Bridge Installation & Configuration:
|
||||
check_bridge_installation - Check bridge installation status
|
||||
show_bridge_config - Display bridge configuration files
|
||||
show_bridge_keys - Display bridge key information
|
||||
show_bridge_info - Show comprehensive bridge information
|
||||
verify_bridge_prerequisites - Verify all prerequisites are met
|
||||
|
||||
Bridge Setup Commands:
|
||||
install_bridge_binary - Download and install nym-bridge binary
|
||||
generate_bridge_keys - Generate ED25519 bridge identity keys
|
||||
create_client_params - Create client_bridge_params.json
|
||||
create_bridge_config - Create bridges.toml configuration
|
||||
create_bridge_service - Create systemd service file
|
||||
full_bridge_setup - Interactive full bridge setup wizard
|
||||
|
||||
Network Configuration Commands:
|
||||
adjust_ip_forwarding - Enable IPv4 and IPv6 forwarding
|
||||
apply_bridge_iptables_rules - Apply iptables rules for QUIC bridge (nymwg)
|
||||
configure_dns_and_icmp - Allow ICMP ping tests and configure DNS
|
||||
remove_duplicate_bridge_rules - Remove duplicate iptables rules for nymwg
|
||||
|
||||
Network Inspection Commands:
|
||||
fetch_and_display_ipv6 - Show IPv6 on default network device
|
||||
fetch_wg_ipv6_address - Fetch IPv6 for nymwg interface
|
||||
check_bridge_iptables - Check iptables rules for nymwg
|
||||
check_ipv6_ipv4_forwarding - Check IPv4 and IPv6 forwarding status
|
||||
check_ip_routing - Display IP routing tables
|
||||
|
||||
Testing Commands:
|
||||
perform_pings - Test IPv4 and IPv6 connectivity
|
||||
test_bridge_connectivity - Comprehensive bridge connectivity test
|
||||
|
||||
Service Management Commands:
|
||||
check_bridge_service_status - Check nym-bridge and nym-node service status
|
||||
show_bridge_logs [lines] - Show recent nym-bridge logs (default: 50 lines)
|
||||
|
||||
Quick Start:
|
||||
1. Run 'verify_bridge_prerequisites' to check prerequisites
|
||||
2. Run 'check_bridge_installation' to verify installation
|
||||
3. Run 'test_bridge_connectivity' to test connectivity
|
||||
```
|
||||
</AccordionTemplate>
|
||||
@@ -1 +1 @@
|
||||
Sunday, October 5th 2025, 09:29:02 UTC
|
||||
Friday, October 10th 2025, 12:39:08 UTC
|
||||
|
||||
@@ -11,7 +11,7 @@ options:
|
||||
--no_routing_history Display node stats without routing history
|
||||
--no_verloc_metrics Display node stats without verloc metrics
|
||||
-m, --markdown Display results in markdown format
|
||||
-o, --output [OUTPUT]
|
||||
-o [OUTPUT], --output [OUTPUT]
|
||||
Save results to file (in current dir or supply with
|
||||
path without filename)
|
||||
```
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
"@cosmjs/encoding": "^0.32.2",
|
||||
"@cosmjs/proto-signing": "^0.32.2",
|
||||
"@cosmjs/stargate": "^0.32.2",
|
||||
"@cosmos-kit/core": "^2.8.9",
|
||||
"@cosmos-kit/core": "^2.16.3",
|
||||
"@cosmos-kit/keplr": "^2.6.9",
|
||||
"@cosmos-kit/keplr-extension": "^2.7.9",
|
||||
"@cosmos-kit/ledger": "^2.6.9",
|
||||
"@cosmos-kit/react": "^2.10.11",
|
||||
"@cosmos-kit/react": "^2.22.3",
|
||||
"@emotion/react": "^11.11.1",
|
||||
"@emotion/styled": "^11.11.0",
|
||||
"@interchain-ui/react": "^1.8.0",
|
||||
@@ -54,12 +54,15 @@
|
||||
"uuid": "^9.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@next/swc-linux-x64-gnu": "15.5.0",
|
||||
"@types/node": "18.11.10",
|
||||
"@types/react": "^18.3.26",
|
||||
"@types/react-dom": "^18.3.7",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"eslint": "8.46.0",
|
||||
"eslint-config-next": "13.4.13",
|
||||
"raw-loader": "^4.0.2",
|
||||
"typescript": "^4.9.3"
|
||||
"typescript": "^5.9.3"
|
||||
},
|
||||
"private": false
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import { AccordionTemplate } from 'components/accordion-template.tsx';
|
||||
import { Steps } from 'nextra/components';
|
||||
import AbuseResponse from 'components/operators/templates/dmca_response.md';
|
||||
import OperatorIntroduction from 'components/operators/templates/provider_introduction.md';
|
||||
import QuicDeploymentSteps from 'components/operators/snippets/quic-bridge-deployment-script-setup.mdx';
|
||||
|
||||
|
||||
export const TestingSteps = () => (
|
||||
@@ -48,6 +49,10 @@ This page displays a full list of all the changes during our release cycle from
|
||||
|
||||
<VarInfo />
|
||||
|
||||
## QUIC Transport Bridge Deployment
|
||||
|
||||
<QuicDeploymentSteps />
|
||||
|
||||
## `v2025.17-isabirra`
|
||||
|
||||
- [Release Binaries](https://github.com/nymtech/nym/releases/tag/nym-binaries-v2025.17-isabirra)
|
||||
|
||||
@@ -8,6 +8,7 @@ import ExitPolicyStatusOutput from 'components/operators/snippets/wg-exit-policy
|
||||
import ExitPolicyTestOutput from 'components/operators/snippets/wg-exit-policy-test-output.mdx';
|
||||
import ExitPolicyTestServer from 'components/operators/snippets/wg-exit-policy-testing-from-server.mdx';
|
||||
import ExitPolicyTestOutside from 'components/operators/snippets/wg-exit-policy-testing-from-outside.mdx';
|
||||
import QuicDeploymentSteps from 'components/operators/snippets/quic-bridge-deployment-script-setup.mdx';
|
||||
|
||||
|
||||
export const ManagerIPOutput = () => (
|
||||
@@ -534,6 +535,9 @@ You can validate the application of the IP tables routes on your `nym-node` by c
|
||||
|
||||
Your node has successfully implemented wireguard exit policy with the same routing permissions like [Nym exit policy](https://nymtech.net/.wellknown/network-requester/exit-policy.txt) used on 5-hop (Mixnet).
|
||||
|
||||
## QUIC Transport Bridge Deployment
|
||||
|
||||
<QuicDeploymentSteps />
|
||||
|
||||
## Running `nym-node` as a non-root
|
||||
|
||||
|
||||
Generated
+208
-152
@@ -36,11 +36,11 @@ importers:
|
||||
specifier: ^0.32.2
|
||||
version: 0.32.4
|
||||
'@cosmos-kit/core':
|
||||
specifier: ^2.8.9
|
||||
specifier: ^2.16.3
|
||||
version: 2.16.3
|
||||
'@cosmos-kit/keplr':
|
||||
specifier: ^2.6.9
|
||||
version: 2.15.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@walletconnect/sign-client@2.21.8(typescript@4.9.5)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)(typescript@4.9.5)(zod@3.25.76)
|
||||
version: 2.15.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@walletconnect/sign-client@2.21.8(typescript@5.9.3)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)(typescript@5.9.3)(zod@3.25.76)
|
||||
'@cosmos-kit/keplr-extension':
|
||||
specifier: ^2.7.9
|
||||
version: 2.15.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(starknet@7.6.4)
|
||||
@@ -48,38 +48,41 @@ importers:
|
||||
specifier: ^2.6.9
|
||||
version: 2.14.3(@cosmjs/amino@0.32.4)(@cosmjs/crypto@0.32.4)(@cosmjs/encoding@0.32.4)(@cosmjs/proto-signing@0.32.4)
|
||||
'@cosmos-kit/react':
|
||||
specifier: ^2.10.11
|
||||
version: 2.22.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@interchain-ui/react@1.26.3(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
specifier: ^2.22.3
|
||||
version: 2.22.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@interchain-ui/react@1.26.3(@types/react@18.3.26)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@emotion/react':
|
||||
specifier: ^11.11.1
|
||||
version: 11.14.0(react@18.3.1)
|
||||
version: 11.14.0(@types/react@18.3.26)(react@18.3.1)
|
||||
'@emotion/styled':
|
||||
specifier: ^11.11.0
|
||||
version: 11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1)
|
||||
version: 11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1)
|
||||
'@interchain-ui/react':
|
||||
specifier: ^1.8.0
|
||||
version: 1.26.3(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
version: 1.26.3(@types/react@18.3.26)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@mui/icons-material':
|
||||
specifier: ^5.14.9
|
||||
version: 5.18.0(@mui/material@5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
|
||||
version: 5.18.0(@mui/material@5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.26)(react@18.3.1)
|
||||
'@mui/lab':
|
||||
specifier: ^5.0.0-alpha.145
|
||||
version: 5.0.0-alpha.177(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(@mui/material@5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
version: 5.0.0-alpha.177(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@mui/material@5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@mui/material':
|
||||
specifier: ^5.14.8
|
||||
version: 5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
version: 5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/accordion':
|
||||
specifier: ^2.0.40
|
||||
version: 2.2.7(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/react':
|
||||
specifier: ^2.4.8
|
||||
version: 2.6.11(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@4.1.12)
|
||||
version: 2.6.11(@types/react@18.3.26)(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@4.1.12)
|
||||
'@nymproject/contract-clients':
|
||||
specifier: '>=1.2.4-rc.2 || ^1'
|
||||
version: 1.4.1
|
||||
'@nymproject/mix-fetch-full-fat':
|
||||
specifier: file:../../dist/wasm/mix-fetch
|
||||
version: '@nymproject/mix-fetch-wasm@file:../../dist/wasm/mix-fetch'
|
||||
specifier: '>=1.2.4-rc.2 || ^1'
|
||||
version: 1.2.3
|
||||
'@nymproject/sdk-full-fat':
|
||||
specifier: file:../../dist/wasm/client
|
||||
version: '@nymproject/nym-client-wasm@file:../../dist/wasm/client'
|
||||
specifier: '>=1.2.4-rc.2 || ^1'
|
||||
version: 1.2.3
|
||||
'@redocly/cli':
|
||||
specifier: ^1.25.15
|
||||
version: 1.34.5(ajv@8.17.1)
|
||||
@@ -117,9 +120,18 @@ importers:
|
||||
specifier: ^9.0.0
|
||||
version: 9.0.1
|
||||
devDependencies:
|
||||
'@next/swc-linux-x64-gnu':
|
||||
specifier: 15.5.0
|
||||
version: 15.5.0
|
||||
'@types/node':
|
||||
specifier: 18.11.10
|
||||
version: 18.11.10
|
||||
'@types/react':
|
||||
specifier: ^18.3.26
|
||||
version: 18.3.26
|
||||
'@types/react-dom':
|
||||
specifier: ^18.3.7
|
||||
version: 18.3.7(@types/react@18.3.26)
|
||||
copy-webpack-plugin:
|
||||
specifier: ^11.0.0
|
||||
version: 11.0.0(webpack@5.101.3)
|
||||
@@ -128,13 +140,13 @@ importers:
|
||||
version: 8.46.0
|
||||
eslint-config-next:
|
||||
specifier: 13.4.13
|
||||
version: 13.4.13(eslint@8.46.0)(typescript@4.9.5)
|
||||
version: 13.4.13(eslint@8.46.0)(typescript@5.9.3)
|
||||
raw-loader:
|
||||
specifier: ^4.0.2
|
||||
version: 4.0.2(webpack@5.101.3)
|
||||
typescript:
|
||||
specifier: ^4.9.3
|
||||
version: 4.9.5
|
||||
specifier: ^5.9.3
|
||||
version: 5.9.3
|
||||
|
||||
packages:
|
||||
|
||||
@@ -1664,11 +1676,14 @@ packages:
|
||||
resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
|
||||
engines: {node: '>=12.4.0'}
|
||||
|
||||
'@nymproject/mix-fetch-wasm@file:../../dist/wasm/mix-fetch':
|
||||
resolution: {directory: ../../dist/wasm/mix-fetch, type: directory}
|
||||
'@nymproject/contract-clients@1.4.1':
|
||||
resolution: {integrity: sha512-HuJZ4Hv+Rl6ZZEtCHKgurNLJapM+QQRJlGkevFH2a4UdqUqF9omUkUi3AVes4679dPoSFgvA7plyVSDBdbgV6w==}
|
||||
|
||||
'@nymproject/nym-client-wasm@file:../../dist/wasm/client':
|
||||
resolution: {directory: ../../dist/wasm/client, type: directory}
|
||||
'@nymproject/mix-fetch-full-fat@1.2.3':
|
||||
resolution: {integrity: sha512-5yAQhw33LC0cNsyV0Rj+LIa2kvJY+8jsfgOSr1aeKNfQ7dG4fngWkKnGUbPGzhUTJjqgXPTwNVeJSd6hwGim+g==}
|
||||
|
||||
'@nymproject/sdk-full-fat@1.2.3':
|
||||
resolution: {integrity: sha512-lheA1Zk020o2t95FPVZfdUR0aSI52aD0aJQs074fjH16QkoNNEMotzhJGAnsnnczVg3bpddKghNpCLyDOWvg9A==}
|
||||
|
||||
'@opentelemetry/api-logs@0.53.0':
|
||||
resolution: {integrity: sha512-8HArjKx+RaAI8uEIgcORbZIPklyh1YLjPSBus8hjRmvLi6DeFzgOcdZ7KwPabKj8mXF8dX0hyfAyGfycz0DbFw==}
|
||||
@@ -2844,13 +2859,18 @@ packages:
|
||||
'@types/prop-types@15.7.15':
|
||||
resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==}
|
||||
|
||||
'@types/react-dom@18.3.7':
|
||||
resolution: {integrity: sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==}
|
||||
peerDependencies:
|
||||
'@types/react': ^18.0.0
|
||||
|
||||
'@types/react-transition-group@4.4.12':
|
||||
resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==}
|
||||
peerDependencies:
|
||||
'@types/react': '*'
|
||||
|
||||
'@types/react@19.1.10':
|
||||
resolution: {integrity: sha512-EhBeSYX0Y6ye8pNebpKrwFJq7BoQ8J5SO6NlvNwwHjSj6adXJViPQrKlsyPw7hLBLvckEMO1yxeGdR82YBBlDg==}
|
||||
'@types/react@18.3.26':
|
||||
resolution: {integrity: sha512-RFA/bURkcKzx/X9oumPG9Vp3D3JUgus/d0b67KB0t5S/raciymilkOa66olh78MUI92QLbEJevO7rvqU/kjwKA==}
|
||||
|
||||
'@types/stylis@4.2.5':
|
||||
resolution: {integrity: sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==}
|
||||
@@ -6386,9 +6406,9 @@ packages:
|
||||
typeforce@1.18.0:
|
||||
resolution: {integrity: sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g==}
|
||||
|
||||
typescript@4.9.5:
|
||||
resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
|
||||
engines: {node: '>=4.2.0'}
|
||||
typescript@5.9.3:
|
||||
resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
|
||||
engines: {node: '>=14.17'}
|
||||
hasBin: true
|
||||
|
||||
ufo@1.6.1:
|
||||
@@ -7159,16 +7179,16 @@ snapshots:
|
||||
- uploadthing
|
||||
- utf-8-validate
|
||||
|
||||
'@cosmos-kit/keplr-mobile@2.15.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@walletconnect/sign-client@2.21.8(typescript@4.9.5)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)(typescript@4.9.5)(zod@3.25.76)':
|
||||
'@cosmos-kit/keplr-mobile@2.15.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@walletconnect/sign-client@2.21.8(typescript@5.9.3)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)(typescript@5.9.3)(zod@3.25.76)':
|
||||
dependencies:
|
||||
'@chain-registry/keplr': 1.74.313
|
||||
'@cosmjs/amino': 0.32.4
|
||||
'@cosmjs/proto-signing': 0.32.4
|
||||
'@cosmos-kit/core': 2.16.3
|
||||
'@cosmos-kit/keplr-extension': 2.15.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(starknet@7.6.4)
|
||||
'@cosmos-kit/walletconnect': 2.13.3(@cosmjs/amino@0.32.4)(@walletconnect/types@2.21.8)(typescript@4.9.5)(zod@3.25.76)
|
||||
'@cosmos-kit/walletconnect': 2.13.3(@cosmjs/amino@0.32.4)(@walletconnect/types@2.21.8)(typescript@5.9.3)(zod@3.25.76)
|
||||
'@keplr-wallet/provider-extension': 0.12.264(starknet@7.6.4)
|
||||
'@keplr-wallet/wc-client': 0.12.264(@walletconnect/sign-client@2.21.8(typescript@4.9.5)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)
|
||||
'@keplr-wallet/wc-client': 0.12.264(@walletconnect/sign-client@2.21.8(typescript@5.9.3)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)
|
||||
transitivePeerDependencies:
|
||||
- '@azure/app-configuration'
|
||||
- '@azure/cosmos'
|
||||
@@ -7199,10 +7219,10 @@ snapshots:
|
||||
- utf-8-validate
|
||||
- zod
|
||||
|
||||
'@cosmos-kit/keplr@2.15.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@walletconnect/sign-client@2.21.8(typescript@4.9.5)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)(typescript@4.9.5)(zod@3.25.76)':
|
||||
'@cosmos-kit/keplr@2.15.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@walletconnect/sign-client@2.21.8(typescript@5.9.3)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)(typescript@5.9.3)(zod@3.25.76)':
|
||||
dependencies:
|
||||
'@cosmos-kit/keplr-extension': 2.15.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(starknet@7.6.4)
|
||||
'@cosmos-kit/keplr-mobile': 2.15.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@walletconnect/sign-client@2.21.8(typescript@4.9.5)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)(typescript@4.9.5)(zod@3.25.76)
|
||||
'@cosmos-kit/keplr-mobile': 2.15.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@walletconnect/sign-client@2.21.8(typescript@5.9.3)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)(typescript@5.9.3)(zod@3.25.76)
|
||||
transitivePeerDependencies:
|
||||
- '@azure/app-configuration'
|
||||
- '@azure/cosmos'
|
||||
@@ -7270,11 +7290,13 @@ snapshots:
|
||||
- uploadthing
|
||||
- utf-8-validate
|
||||
|
||||
'@cosmos-kit/react-lite@2.16.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@cosmos-kit/react-lite@2.16.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@chain-registry/types': 0.46.15
|
||||
'@cosmos-kit/core': 2.16.3
|
||||
'@dao-dao/cosmiframe': 1.0.0(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)
|
||||
'@types/react': 18.3.26
|
||||
'@types/react-dom': 18.3.7(@types/react@18.3.26)
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
transitivePeerDependencies:
|
||||
@@ -7304,13 +7326,15 @@ snapshots:
|
||||
- uploadthing
|
||||
- utf-8-validate
|
||||
|
||||
'@cosmos-kit/react@2.22.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@interchain-ui/react@1.26.3(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@cosmos-kit/react@2.22.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@interchain-ui/react@1.26.3(@types/react@18.3.26)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@chain-registry/types': 0.46.15
|
||||
'@cosmos-kit/core': 2.16.3
|
||||
'@cosmos-kit/react-lite': 2.16.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@interchain-ui/react': 1.26.3(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@cosmos-kit/react-lite': 2.16.3(@cosmjs/amino@0.32.4)(@cosmjs/proto-signing@0.32.4)(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@interchain-ui/react': 1.26.3(@types/react@18.3.26)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@react-icons/all-files': 4.1.0(react@18.3.1)
|
||||
'@types/react': 18.3.26
|
||||
'@types/react-dom': 18.3.7(@types/react@18.3.26)
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
transitivePeerDependencies:
|
||||
@@ -7340,14 +7364,14 @@ snapshots:
|
||||
- uploadthing
|
||||
- utf-8-validate
|
||||
|
||||
'@cosmos-kit/walletconnect@2.13.3(@cosmjs/amino@0.32.4)(@walletconnect/types@2.21.8)(typescript@4.9.5)(zod@3.25.76)':
|
||||
'@cosmos-kit/walletconnect@2.13.3(@cosmjs/amino@0.32.4)(@walletconnect/types@2.21.8)(typescript@5.9.3)(zod@3.25.76)':
|
||||
dependencies:
|
||||
'@cosmjs/amino': 0.32.4
|
||||
'@cosmjs/proto-signing': 0.32.4
|
||||
'@cosmos-kit/core': 2.16.3
|
||||
'@walletconnect/sign-client': 2.21.8(typescript@4.9.5)(zod@3.25.76)
|
||||
'@walletconnect/sign-client': 2.21.8(typescript@5.9.3)(zod@3.25.76)
|
||||
'@walletconnect/types': 2.21.8
|
||||
'@walletconnect/utils': 2.21.8(typescript@4.9.5)(zod@3.25.76)
|
||||
'@walletconnect/utils': 2.21.8(typescript@5.9.3)(zod@3.25.76)
|
||||
events: 3.3.0
|
||||
transitivePeerDependencies:
|
||||
- '@azure/app-configuration'
|
||||
@@ -7436,7 +7460,7 @@ snapshots:
|
||||
|
||||
'@emotion/memoize@0.9.0': {}
|
||||
|
||||
'@emotion/react@11.14.0(react@18.3.1)':
|
||||
'@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@emotion/babel-plugin': 11.13.5
|
||||
@@ -7447,6 +7471,8 @@ snapshots:
|
||||
'@emotion/weak-memoize': 0.4.0
|
||||
hoist-non-react-statics: 3.3.2
|
||||
react: 18.3.1
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.26
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -7460,16 +7486,18 @@ snapshots:
|
||||
|
||||
'@emotion/sheet@1.4.0': {}
|
||||
|
||||
'@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1)':
|
||||
'@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@emotion/babel-plugin': 11.13.5
|
||||
'@emotion/is-prop-valid': 1.3.1
|
||||
'@emotion/react': 11.14.0(react@18.3.1)
|
||||
'@emotion/react': 11.14.0(@types/react@18.3.26)(react@18.3.1)
|
||||
'@emotion/serialize': 1.3.3
|
||||
'@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1)
|
||||
'@emotion/utils': 1.4.2
|
||||
react: 18.3.1
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.26
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -7702,7 +7730,7 @@ snapshots:
|
||||
'@img/sharp-win32-x64@0.34.3':
|
||||
optional: true
|
||||
|
||||
'@interchain-ui/react@1.26.3(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@interchain-ui/react@1.26.3(@types/react@18.3.26)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@floating-ui/core': 1.7.3
|
||||
'@floating-ui/dom': 1.7.3
|
||||
@@ -7731,7 +7759,7 @@ snapshots:
|
||||
react-aria: 3.42.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
react-stately: 3.40.0(react@18.3.1)
|
||||
zustand: 4.5.7(immer@10.1.1)(react@18.3.1)
|
||||
zustand: 4.5.7(@types/react@18.3.26)(immer@10.1.1)(react@18.3.1)
|
||||
transitivePeerDependencies:
|
||||
- '@types/react'
|
||||
- babel-plugin-macros
|
||||
@@ -7864,11 +7892,11 @@ snapshots:
|
||||
big-integer: 1.6.52
|
||||
utility-types: 3.11.0
|
||||
|
||||
'@keplr-wallet/wc-client@0.12.264(@walletconnect/sign-client@2.21.8(typescript@4.9.5)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)':
|
||||
'@keplr-wallet/wc-client@0.12.264(@walletconnect/sign-client@2.21.8(typescript@5.9.3)(zod@3.25.76))(@walletconnect/types@2.21.8)(starknet@7.6.4)':
|
||||
dependencies:
|
||||
'@keplr-wallet/provider': 0.12.264(starknet@7.6.4)
|
||||
'@keplr-wallet/types': 0.12.264(starknet@7.6.4)
|
||||
'@walletconnect/sign-client': 2.21.8(typescript@4.9.5)(zod@3.25.76)
|
||||
'@walletconnect/sign-client': 2.21.8(typescript@5.9.3)(zod@3.25.76)
|
||||
'@walletconnect/types': 2.21.8
|
||||
buffer: 6.0.3
|
||||
deepmerge: 4.3.1
|
||||
@@ -7938,56 +7966,61 @@ snapshots:
|
||||
'@mdx-js/react@2.3.0(react@18.3.1)':
|
||||
dependencies:
|
||||
'@types/mdx': 2.0.13
|
||||
'@types/react': 19.1.10
|
||||
'@types/react': 18.3.26
|
||||
react: 18.3.1
|
||||
|
||||
'@msgpack/msgpack@3.1.2': {}
|
||||
|
||||
'@mui/base@5.0.0-beta.40-1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@mui/base@5.0.0-beta.40-1(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@floating-ui/react-dom': 2.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@mui/types': 7.2.24
|
||||
'@mui/utils': 5.17.1(react@18.3.1)
|
||||
'@mui/types': 7.2.24(@types/react@18.3.26)
|
||||
'@mui/utils': 5.17.1(@types/react@18.3.26)(react@18.3.1)
|
||||
'@popperjs/core': 2.11.8
|
||||
clsx: 2.1.1
|
||||
prop-types: 15.8.1
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
|
||||
'@mui/core-downloads-tracker@5.18.0': {}
|
||||
|
||||
'@mui/icons-material@5.18.0(@mui/material@5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@mui/material': 5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
react: 18.3.1
|
||||
|
||||
'@mui/lab@5.0.0-alpha.177(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(@mui/material@5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@mui/base': 5.0.0-beta.40-1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@mui/material': 5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@mui/system': 5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react@18.3.1)
|
||||
'@mui/types': 7.2.24
|
||||
'@mui/utils': 5.17.1(react@18.3.1)
|
||||
clsx: 2.1.1
|
||||
prop-types: 15.8.1
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
optionalDependencies:
|
||||
'@emotion/react': 11.14.0(react@18.3.1)
|
||||
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1)
|
||||
'@types/react': 18.3.26
|
||||
|
||||
'@mui/material@5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@mui/core-downloads-tracker@5.18.0': {}
|
||||
|
||||
'@mui/icons-material@5.18.0(@mui/material@5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.26)(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@mui/material': 5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
react: 18.3.1
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.26
|
||||
|
||||
'@mui/lab@5.0.0-alpha.177(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@mui/material@5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@mui/base': 5.0.0-beta.40-1(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@mui/material': 5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@mui/system': 5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1)
|
||||
'@mui/types': 7.2.24(@types/react@18.3.26)
|
||||
'@mui/utils': 5.17.1(@types/react@18.3.26)(react@18.3.1)
|
||||
clsx: 2.1.1
|
||||
prop-types: 15.8.1
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
optionalDependencies:
|
||||
'@emotion/react': 11.14.0(@types/react@18.3.26)(react@18.3.1)
|
||||
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1)
|
||||
'@types/react': 18.3.26
|
||||
|
||||
'@mui/material@5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@mui/core-downloads-tracker': 5.18.0
|
||||
'@mui/system': 5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react@18.3.1)
|
||||
'@mui/types': 7.2.24
|
||||
'@mui/utils': 5.17.1(react@18.3.1)
|
||||
'@mui/system': 5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1)
|
||||
'@mui/types': 7.2.24(@types/react@18.3.26)
|
||||
'@mui/utils': 5.17.1(@types/react@18.3.26)(react@18.3.1)
|
||||
'@popperjs/core': 2.11.8
|
||||
'@types/react-transition-group': 4.4.12
|
||||
'@types/react-transition-group': 4.4.12(@types/react@18.3.26)
|
||||
clsx: 2.1.1
|
||||
csstype: 3.1.3
|
||||
prop-types: 15.8.1
|
||||
@@ -7996,17 +8029,20 @@ snapshots:
|
||||
react-is: 19.1.1
|
||||
react-transition-group: 4.4.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
optionalDependencies:
|
||||
'@emotion/react': 11.14.0(react@18.3.1)
|
||||
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1)
|
||||
'@emotion/react': 11.14.0(@types/react@18.3.26)(react@18.3.1)
|
||||
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1)
|
||||
'@types/react': 18.3.26
|
||||
|
||||
'@mui/private-theming@5.17.1(react@18.3.1)':
|
||||
'@mui/private-theming@5.17.1(@types/react@18.3.26)(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@mui/utils': 5.17.1(react@18.3.1)
|
||||
'@mui/utils': 5.17.1(@types/react@18.3.26)(react@18.3.1)
|
||||
prop-types: 15.8.1
|
||||
react: 18.3.1
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.26
|
||||
|
||||
'@mui/styled-engine@5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react@18.3.1)':
|
||||
'@mui/styled-engine@5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@emotion/cache': 11.14.0
|
||||
@@ -8015,35 +8051,40 @@ snapshots:
|
||||
prop-types: 15.8.1
|
||||
react: 18.3.1
|
||||
optionalDependencies:
|
||||
'@emotion/react': 11.14.0(react@18.3.1)
|
||||
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1)
|
||||
'@emotion/react': 11.14.0(@types/react@18.3.26)(react@18.3.1)
|
||||
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1)
|
||||
|
||||
'@mui/system@5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react@18.3.1)':
|
||||
'@mui/system@5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@mui/private-theming': 5.17.1(react@18.3.1)
|
||||
'@mui/styled-engine': 5.18.0(@emotion/react@11.14.0(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1))(react@18.3.1)
|
||||
'@mui/types': 7.2.24
|
||||
'@mui/utils': 5.17.1(react@18.3.1)
|
||||
'@mui/private-theming': 5.17.1(@types/react@18.3.26)(react@18.3.1)
|
||||
'@mui/styled-engine': 5.18.0(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@emotion/styled@11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)
|
||||
'@mui/types': 7.2.24(@types/react@18.3.26)
|
||||
'@mui/utils': 5.17.1(@types/react@18.3.26)(react@18.3.1)
|
||||
clsx: 2.1.1
|
||||
csstype: 3.1.3
|
||||
prop-types: 15.8.1
|
||||
react: 18.3.1
|
||||
optionalDependencies:
|
||||
'@emotion/react': 11.14.0(react@18.3.1)
|
||||
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(react@18.3.1))(react@18.3.1)
|
||||
'@emotion/react': 11.14.0(@types/react@18.3.26)(react@18.3.1)
|
||||
'@emotion/styled': 11.14.1(@emotion/react@11.14.0(@types/react@18.3.26)(react@18.3.1))(@types/react@18.3.26)(react@18.3.1)
|
||||
'@types/react': 18.3.26
|
||||
|
||||
'@mui/types@7.2.24': {}
|
||||
'@mui/types@7.2.24(@types/react@18.3.26)':
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.26
|
||||
|
||||
'@mui/utils@5.17.1(react@18.3.1)':
|
||||
'@mui/utils@5.17.1(@types/react@18.3.26)(react@18.3.1)':
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
'@mui/types': 7.2.24
|
||||
'@mui/types': 7.2.24(@types/react@18.3.26)
|
||||
'@types/prop-types': 15.7.15
|
||||
clsx: 2.1.1
|
||||
prop-types: 15.8.1
|
||||
react: 18.3.1
|
||||
react-is: 19.1.1
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.26
|
||||
|
||||
'@napi-rs/simple-git-android-arm-eabi@0.1.22':
|
||||
optional: true
|
||||
@@ -8133,8 +8174,7 @@ snapshots:
|
||||
'@next/swc-linux-arm64-musl@15.5.0':
|
||||
optional: true
|
||||
|
||||
'@next/swc-linux-x64-gnu@15.5.0':
|
||||
optional: true
|
||||
'@next/swc-linux-x64-gnu@15.5.0': {}
|
||||
|
||||
'@next/swc-linux-x64-musl@15.5.0':
|
||||
optional: true
|
||||
@@ -8199,12 +8239,12 @@ snapshots:
|
||||
- '@nextui-org/theme'
|
||||
- framer-motion
|
||||
|
||||
'@nextui-org/autocomplete@2.3.9(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@nextui-org/autocomplete@2.3.9(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(@types/react@18.3.26)(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@nextui-org/aria-utils': 2.2.7(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/button': 2.2.9(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/form': 2.1.8(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/input': 2.4.8(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/input': 2.4.8(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/listbox': 2.3.9(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/popover': 2.3.9(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/react-utils': 2.1.3(react@18.3.1)
|
||||
@@ -8516,7 +8556,7 @@ snapshots:
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
|
||||
'@nextui-org/input@2.4.8(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
'@nextui-org/input@2.4.8(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
|
||||
dependencies:
|
||||
'@nextui-org/form': 2.1.8(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/react-utils': 2.1.3(react@18.3.1)
|
||||
@@ -8534,7 +8574,7 @@ snapshots:
|
||||
'@react-types/textfield': 3.10.0(react@18.3.1)
|
||||
react: 18.3.1
|
||||
react-dom: 18.3.1(react@18.3.1)
|
||||
react-textarea-autosize: 8.5.9(react@18.3.1)
|
||||
react-textarea-autosize: 8.5.9(@types/react@18.3.26)(react@18.3.1)
|
||||
transitivePeerDependencies:
|
||||
- '@types/react'
|
||||
|
||||
@@ -8734,11 +8774,11 @@ snapshots:
|
||||
'@nextui-org/shared-utils': 2.1.2
|
||||
react: 18.3.1
|
||||
|
||||
'@nextui-org/react@2.6.11(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@4.1.12)':
|
||||
'@nextui-org/react@2.6.11(@types/react@18.3.26)(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(tailwindcss@4.1.12)':
|
||||
dependencies:
|
||||
'@nextui-org/accordion': 2.2.7(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/alert': 2.2.9(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/autocomplete': 2.3.9(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/autocomplete': 2.3.9(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(@types/react@18.3.26)(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/avatar': 2.2.6(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/badge': 2.2.5(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/breadcrumbs': 2.2.6(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
@@ -8756,7 +8796,7 @@ snapshots:
|
||||
'@nextui-org/form': 2.1.8(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/framer-utils': 2.1.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/image': 2.2.5(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/input': 2.4.8(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/input': 2.4.8(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/input-otp': 2.1.8(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/kbd': 2.2.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
'@nextui-org/link': 2.2.7(@nextui-org/system@2.4.6(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(framer-motion@12.23.12(@emotion/is-prop-valid@1.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@nextui-org/theme@2.4.5(tailwindcss@4.1.12))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
|
||||
@@ -9205,9 +9245,11 @@ snapshots:
|
||||
|
||||
'@nolyfill/is-core-module@1.0.39': {}
|
||||
|
||||
'@nymproject/mix-fetch-wasm@file:../../dist/wasm/mix-fetch': {}
|
||||
'@nymproject/contract-clients@1.4.1': {}
|
||||
|
||||
'@nymproject/nym-client-wasm@file:../../dist/wasm/client': {}
|
||||
'@nymproject/mix-fetch-full-fat@1.2.3': {}
|
||||
|
||||
'@nymproject/sdk-full-fat@1.2.3': {}
|
||||
|
||||
'@opentelemetry/api-logs@0.53.0':
|
||||
dependencies:
|
||||
@@ -11169,10 +11211,17 @@ snapshots:
|
||||
|
||||
'@types/prop-types@15.7.15': {}
|
||||
|
||||
'@types/react-transition-group@4.4.12': {}
|
||||
|
||||
'@types/react@19.1.10':
|
||||
'@types/react-dom@18.3.7(@types/react@18.3.26)':
|
||||
dependencies:
|
||||
'@types/react': 18.3.26
|
||||
|
||||
'@types/react-transition-group@4.4.12(@types/react@18.3.26)':
|
||||
dependencies:
|
||||
'@types/react': 18.3.26
|
||||
|
||||
'@types/react@18.3.26':
|
||||
dependencies:
|
||||
'@types/prop-types': 15.7.15
|
||||
csstype: 3.1.3
|
||||
|
||||
'@types/stylis@4.2.5': {}
|
||||
@@ -11184,16 +11233,16 @@ snapshots:
|
||||
|
||||
'@types/unist@3.0.3': {}
|
||||
|
||||
'@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@4.9.5)':
|
||||
'@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/scope-manager': 6.21.0
|
||||
'@typescript-eslint/types': 6.21.0
|
||||
'@typescript-eslint/typescript-estree': 6.21.0(typescript@4.9.5)
|
||||
'@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3)
|
||||
'@typescript-eslint/visitor-keys': 6.21.0
|
||||
debug: 4.4.1
|
||||
eslint: 8.46.0
|
||||
optionalDependencies:
|
||||
typescript: 4.9.5
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -11204,7 +11253,7 @@ snapshots:
|
||||
|
||||
'@typescript-eslint/types@6.21.0': {}
|
||||
|
||||
'@typescript-eslint/typescript-estree@6.21.0(typescript@4.9.5)':
|
||||
'@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.3)':
|
||||
dependencies:
|
||||
'@typescript-eslint/types': 6.21.0
|
||||
'@typescript-eslint/visitor-keys': 6.21.0
|
||||
@@ -11213,9 +11262,9 @@ snapshots:
|
||||
is-glob: 4.0.3
|
||||
minimatch: 9.0.3
|
||||
semver: 7.7.2
|
||||
ts-api-utils: 1.4.3(typescript@4.9.5)
|
||||
ts-api-utils: 1.4.3(typescript@5.9.3)
|
||||
optionalDependencies:
|
||||
typescript: 4.9.5
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@@ -11314,7 +11363,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@vanilla-extract/css': 1.17.4(babel-plugin-macros@3.1.0)
|
||||
|
||||
'@walletconnect/core@2.21.8(typescript@4.9.5)(zod@3.25.76)':
|
||||
'@walletconnect/core@2.21.8(typescript@5.9.3)(zod@3.25.76)':
|
||||
dependencies:
|
||||
'@walletconnect/heartbeat': 1.2.2
|
||||
'@walletconnect/jsonrpc-provider': 1.0.14
|
||||
@@ -11328,7 +11377,7 @@ snapshots:
|
||||
'@walletconnect/safe-json': 1.0.2
|
||||
'@walletconnect/time': 1.0.2
|
||||
'@walletconnect/types': 2.21.8
|
||||
'@walletconnect/utils': 2.21.8(typescript@4.9.5)(zod@3.25.76)
|
||||
'@walletconnect/utils': 2.21.8(typescript@5.9.3)(zod@3.25.76)
|
||||
'@walletconnect/window-getters': 1.0.1
|
||||
es-toolkit: 1.39.3
|
||||
events: 3.3.0
|
||||
@@ -11455,16 +11504,16 @@ snapshots:
|
||||
dependencies:
|
||||
tslib: 1.14.1
|
||||
|
||||
'@walletconnect/sign-client@2.21.8(typescript@4.9.5)(zod@3.25.76)':
|
||||
'@walletconnect/sign-client@2.21.8(typescript@5.9.3)(zod@3.25.76)':
|
||||
dependencies:
|
||||
'@walletconnect/core': 2.21.8(typescript@4.9.5)(zod@3.25.76)
|
||||
'@walletconnect/core': 2.21.8(typescript@5.9.3)(zod@3.25.76)
|
||||
'@walletconnect/events': 1.0.1
|
||||
'@walletconnect/heartbeat': 1.2.2
|
||||
'@walletconnect/jsonrpc-utils': 1.0.8
|
||||
'@walletconnect/logger': 2.1.2
|
||||
'@walletconnect/time': 1.0.2
|
||||
'@walletconnect/types': 2.21.8
|
||||
'@walletconnect/utils': 2.21.8(typescript@4.9.5)(zod@3.25.76)
|
||||
'@walletconnect/utils': 2.21.8(typescript@5.9.3)(zod@3.25.76)
|
||||
events: 3.3.0
|
||||
transitivePeerDependencies:
|
||||
- '@azure/app-configuration'
|
||||
@@ -11550,7 +11599,7 @@ snapshots:
|
||||
- ioredis
|
||||
- uploadthing
|
||||
|
||||
'@walletconnect/utils@2.21.8(typescript@4.9.5)(zod@3.25.76)':
|
||||
'@walletconnect/utils@2.21.8(typescript@5.9.3)(zod@3.25.76)':
|
||||
dependencies:
|
||||
'@msgpack/msgpack': 3.1.2
|
||||
'@noble/ciphers': 1.3.0
|
||||
@@ -11571,7 +11620,7 @@ snapshots:
|
||||
detect-browser: 5.3.0
|
||||
query-string: 7.1.3
|
||||
uint8arrays: 3.1.1
|
||||
viem: 2.31.0(typescript@4.9.5)(zod@3.25.76)
|
||||
viem: 2.31.0(typescript@5.9.3)(zod@3.25.76)
|
||||
transitivePeerDependencies:
|
||||
- '@azure/app-configuration'
|
||||
- '@azure/cosmos'
|
||||
@@ -11692,9 +11741,9 @@ snapshots:
|
||||
fs-extra: 10.1.0
|
||||
yargs: 17.7.2
|
||||
|
||||
abitype@1.0.8(typescript@4.9.5)(zod@3.25.76):
|
||||
abitype@1.0.8(typescript@5.9.3)(zod@3.25.76):
|
||||
optionalDependencies:
|
||||
typescript: 4.9.5
|
||||
typescript: 5.9.3
|
||||
zod: 3.25.76
|
||||
|
||||
abort-controller@3.0.0:
|
||||
@@ -12710,20 +12759,20 @@ snapshots:
|
||||
|
||||
escape-string-regexp@5.0.0: {}
|
||||
|
||||
eslint-config-next@13.4.13(eslint@8.46.0)(typescript@4.9.5):
|
||||
eslint-config-next@13.4.13(eslint@8.46.0)(typescript@5.9.3):
|
||||
dependencies:
|
||||
'@next/eslint-plugin-next': 13.4.13
|
||||
'@rushstack/eslint-patch': 1.12.0
|
||||
'@typescript-eslint/parser': 6.21.0(eslint@8.46.0)(typescript@4.9.5)
|
||||
'@typescript-eslint/parser': 6.21.0(eslint@8.46.0)(typescript@5.9.3)
|
||||
eslint: 8.46.0
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(eslint@8.46.0))(eslint@8.46.0)
|
||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1)(eslint@8.46.0)
|
||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@8.46.0))(eslint@8.46.0))(eslint@8.46.0)
|
||||
eslint-plugin-jsx-a11y: 6.10.2(eslint@8.46.0)
|
||||
eslint-plugin-react: 7.37.5(eslint@8.46.0)
|
||||
eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.46.0)
|
||||
optionalDependencies:
|
||||
typescript: 4.9.5
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- eslint-import-resolver-webpack
|
||||
- eslint-plugin-import-x
|
||||
@@ -12748,22 +12797,22 @@ snapshots:
|
||||
tinyglobby: 0.2.14
|
||||
unrs-resolver: 1.11.1
|
||||
optionalDependencies:
|
||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1)(eslint@8.46.0)
|
||||
eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@8.46.0))(eslint@8.46.0))(eslint@8.46.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@8.46.0))(eslint@8.46.0))(eslint@8.46.0):
|
||||
eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@8.46.0))(eslint@8.46.0))(eslint@8.46.0):
|
||||
dependencies:
|
||||
debug: 3.2.7
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/parser': 6.21.0(eslint@8.46.0)(typescript@4.9.5)
|
||||
'@typescript-eslint/parser': 6.21.0(eslint@8.46.0)(typescript@5.9.3)
|
||||
eslint: 8.46.0
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(eslint@8.46.0))(eslint@8.46.0)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1)(eslint@8.46.0):
|
||||
eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@8.46.0))(eslint@8.46.0))(eslint@8.46.0):
|
||||
dependencies:
|
||||
'@rtsao/scc': 1.1.0
|
||||
array-includes: 3.1.9
|
||||
@@ -12774,7 +12823,7 @@ snapshots:
|
||||
doctrine: 2.1.0
|
||||
eslint: 8.46.0
|
||||
eslint-import-resolver-node: 0.3.9
|
||||
eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@8.46.0))(eslint@8.46.0))(eslint@8.46.0)
|
||||
eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.46.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(eslint@8.46.0))(eslint@8.46.0))(eslint@8.46.0)
|
||||
hasown: 2.0.2
|
||||
is-core-module: 2.16.1
|
||||
is-glob: 4.0.3
|
||||
@@ -12786,7 +12835,7 @@ snapshots:
|
||||
string.prototype.trimend: 1.0.9
|
||||
tsconfig-paths: 3.15.0
|
||||
optionalDependencies:
|
||||
'@typescript-eslint/parser': 6.21.0(eslint@8.46.0)(typescript@4.9.5)
|
||||
'@typescript-eslint/parser': 6.21.0(eslint@8.46.0)(typescript@5.9.3)
|
||||
transitivePeerDependencies:
|
||||
- eslint-import-resolver-typescript
|
||||
- eslint-import-resolver-webpack
|
||||
@@ -14655,7 +14704,7 @@ snapshots:
|
||||
object-keys: 1.1.1
|
||||
safe-push-apply: 1.0.0
|
||||
|
||||
ox@0.7.1(typescript@4.9.5)(zod@3.25.76):
|
||||
ox@0.7.1(typescript@5.9.3)(zod@3.25.76):
|
||||
dependencies:
|
||||
'@adraffy/ens-normalize': 1.11.0
|
||||
'@noble/ciphers': 1.3.0
|
||||
@@ -14663,10 +14712,10 @@ snapshots:
|
||||
'@noble/hashes': 1.8.0
|
||||
'@scure/bip32': 1.7.0
|
||||
'@scure/bip39': 1.6.0
|
||||
abitype: 1.0.8(typescript@4.9.5)(zod@3.25.76)
|
||||
abitype: 1.0.8(typescript@5.9.3)(zod@3.25.76)
|
||||
eventemitter3: 5.0.1
|
||||
optionalDependencies:
|
||||
typescript: 4.9.5
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- zod
|
||||
|
||||
@@ -14978,12 +15027,12 @@ snapshots:
|
||||
prop-types: 15.8.1
|
||||
react: 18.3.1
|
||||
|
||||
react-textarea-autosize@8.5.9(react@18.3.1):
|
||||
react-textarea-autosize@8.5.9(@types/react@18.3.26)(react@18.3.1):
|
||||
dependencies:
|
||||
'@babel/runtime': 7.28.3
|
||||
react: 18.3.1
|
||||
use-composed-ref: 1.4.0(react@18.3.1)
|
||||
use-latest: 1.3.0(react@18.3.1)
|
||||
use-composed-ref: 1.4.0(@types/react@18.3.26)(react@18.3.1)
|
||||
use-latest: 1.3.0(@types/react@18.3.26)(react@18.3.1)
|
||||
transitivePeerDependencies:
|
||||
- '@types/react'
|
||||
|
||||
@@ -15710,9 +15759,9 @@ snapshots:
|
||||
|
||||
trough@2.2.0: {}
|
||||
|
||||
ts-api-utils@1.4.3(typescript@4.9.5):
|
||||
ts-api-utils@1.4.3(typescript@5.9.3):
|
||||
dependencies:
|
||||
typescript: 4.9.5
|
||||
typescript: 5.9.3
|
||||
|
||||
ts-dedent@2.2.0: {}
|
||||
|
||||
@@ -15776,7 +15825,7 @@ snapshots:
|
||||
|
||||
typeforce@1.18.0: {}
|
||||
|
||||
typescript@4.9.5: {}
|
||||
typescript@5.9.3: {}
|
||||
|
||||
ufo@1.6.1: {}
|
||||
|
||||
@@ -15945,18 +15994,24 @@ snapshots:
|
||||
|
||||
url-template@2.0.8: {}
|
||||
|
||||
use-composed-ref@1.4.0(react@18.3.1):
|
||||
use-composed-ref@1.4.0(@types/react@18.3.26)(react@18.3.1):
|
||||
dependencies:
|
||||
react: 18.3.1
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.26
|
||||
|
||||
use-isomorphic-layout-effect@1.2.1(react@18.3.1):
|
||||
use-isomorphic-layout-effect@1.2.1(@types/react@18.3.26)(react@18.3.1):
|
||||
dependencies:
|
||||
react: 18.3.1
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.26
|
||||
|
||||
use-latest@1.3.0(react@18.3.1):
|
||||
use-latest@1.3.0(@types/react@18.3.26)(react@18.3.1):
|
||||
dependencies:
|
||||
react: 18.3.1
|
||||
use-isomorphic-layout-effect: 1.2.1(react@18.3.1)
|
||||
use-isomorphic-layout-effect: 1.2.1(@types/react@18.3.26)(react@18.3.1)
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.26
|
||||
|
||||
use-sync-external-store@1.5.0(react@18.3.1):
|
||||
dependencies:
|
||||
@@ -16010,18 +16065,18 @@ snapshots:
|
||||
'@types/unist': 3.0.3
|
||||
vfile-message: 4.0.3
|
||||
|
||||
viem@2.31.0(typescript@4.9.5)(zod@3.25.76):
|
||||
viem@2.31.0(typescript@5.9.3)(zod@3.25.76):
|
||||
dependencies:
|
||||
'@noble/curves': 1.9.1
|
||||
'@noble/hashes': 1.8.0
|
||||
'@scure/bip32': 1.7.0
|
||||
'@scure/bip39': 1.6.0
|
||||
abitype: 1.0.8(typescript@4.9.5)(zod@3.25.76)
|
||||
abitype: 1.0.8(typescript@5.9.3)(zod@3.25.76)
|
||||
isows: 1.0.7(ws@8.18.2)
|
||||
ox: 0.7.1(typescript@4.9.5)(zod@3.25.76)
|
||||
ox: 0.7.1(typescript@5.9.3)(zod@3.25.76)
|
||||
ws: 8.18.2
|
||||
optionalDependencies:
|
||||
typescript: 4.9.5
|
||||
typescript: 5.9.3
|
||||
transitivePeerDependencies:
|
||||
- bufferutil
|
||||
- utf-8-validate
|
||||
@@ -16195,10 +16250,11 @@ snapshots:
|
||||
|
||||
zod@3.25.76: {}
|
||||
|
||||
zustand@4.5.7(immer@10.1.1)(react@18.3.1):
|
||||
zustand@4.5.7(@types/react@18.3.26)(immer@10.1.1)(react@18.3.1):
|
||||
dependencies:
|
||||
use-sync-external-store: 1.5.0(react@18.3.1)
|
||||
optionalDependencies:
|
||||
'@types/react': 18.3.26
|
||||
immer: 10.1.1
|
||||
react: 18.3.1
|
||||
|
||||
|
||||
@@ -0,0 +1,941 @@
|
||||
#!/bin/bash
|
||||
# Nym QUIC Bridge Deployment Helper Script
|
||||
# This script provides network configuration and troubleshooting tools for Nym QUIC bridges
|
||||
|
||||
network_device=$(ip route show default | awk '/default/ {print $5}')
|
||||
wg_tunnel_interface="nymwg"
|
||||
|
||||
BRIDGE_CONFIG_DIR="/opt/nym-bridge"
|
||||
BRIDGE_KEYS_DIR="$BRIDGE_CONFIG_DIR/keys"
|
||||
BRIDGE_CONFIG="$BRIDGE_CONFIG_DIR/bridges.toml"
|
||||
CLIENT_PARAMS="$BRIDGE_CONFIG_DIR/client_bridge_params.json"
|
||||
BRIDGE_BINARY="/usr/local/bin/nym-bridge"
|
||||
|
||||
|
||||
if ! dpkg -s iptables-persistent >/dev/null 2>&1; then
|
||||
echo "Installing iptables-persistent..."
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y iptables-persistent
|
||||
else
|
||||
echo "iptables-persistent is already installed."
|
||||
fi
|
||||
|
||||
fetch_and_display_ipv6() {
|
||||
ipv6_address=$(ip -6 addr show "$network_device" scope global | grep inet6 | awk '{print $2}')
|
||||
if [[ -z "$ipv6_address" ]]; then
|
||||
echo "No global IPv6 address found on $network_device."
|
||||
else
|
||||
echo "IPv6 address on $network_device: $ipv6_address"
|
||||
fi
|
||||
}
|
||||
|
||||
fetch_wg_ipv6_address() {
|
||||
ipv6_global_address=$(ip -6 addr show "$wg_tunnel_interface" scope global | grep inet6 | awk '{print $2}' | head -n 1)
|
||||
|
||||
if [[ -z "$ipv6_global_address" ]]; then
|
||||
echo "No globally routable IPv6 address found on $wg_tunnel_interface. Please configure IPv6 or check your network settings."
|
||||
exit 1
|
||||
else
|
||||
echo "Using IPv6 address: $ipv6_global_address"
|
||||
fi
|
||||
}
|
||||
|
||||
adjust_ip_forwarding() {
|
||||
ipv6_forwarding_setting="net.ipv6.conf.all.forwarding=1"
|
||||
ipv4_forwarding_setting="net.ipv4.ip_forward=1"
|
||||
|
||||
# Remove duplicate entries for these settings from the file
|
||||
sudo sed -i "/^net.ipv6.conf.all.forwarding=/d" /etc/sysctl.conf
|
||||
sudo sed -i "/^net.ipv4.ip_forward=/d" /etc/sysctl.conf
|
||||
|
||||
echo "$ipv6_forwarding_setting" | sudo tee -a /etc/sysctl.conf
|
||||
echo "$ipv4_forwarding_setting" | sudo tee -a /etc/sysctl.conf
|
||||
|
||||
sudo sysctl -p /etc/sysctl.conf
|
||||
|
||||
echo "IP forwarding enabled for IPv4 and IPv6."
|
||||
}
|
||||
|
||||
apply_bridge_iptables_rules() {
|
||||
echo "Applying iptables rules for QUIC bridge ($wg_tunnel_interface)..."
|
||||
sleep 1
|
||||
|
||||
# INPUT rules - allow incoming connections TO the bridge from WireGuard clients
|
||||
# CRITICAL: This allows mobile clients to reach the bandwidth controller at 10.1.0.1:51830
|
||||
sudo iptables -I INPUT -i "$wg_tunnel_interface" -j ACCEPT
|
||||
sudo ip6tables -I INPUT -i "$wg_tunnel_interface" -j ACCEPT
|
||||
|
||||
# NAT rules - for outbound traffic masquerading
|
||||
sudo iptables -t nat -A POSTROUTING -o "$network_device" -j MASQUERADE
|
||||
sudo ip6tables -t nat -A POSTROUTING -o "$network_device" -j MASQUERADE
|
||||
|
||||
# FORWARD rules - allow traffic through the bridge
|
||||
sudo iptables -A FORWARD -i "$wg_tunnel_interface" -o "$network_device" -j ACCEPT
|
||||
sudo iptables -A FORWARD -i "$network_device" -o "$wg_tunnel_interface" -m state --state RELATED,ESTABLISHED -j ACCEPT
|
||||
sudo ip6tables -A FORWARD -i "$wg_tunnel_interface" -o "$network_device" -j ACCEPT
|
||||
sudo ip6tables -A FORWARD -i "$network_device" -o "$wg_tunnel_interface" -m state --state RELATED,ESTABLISHED -j ACCEPT
|
||||
|
||||
# Save rules
|
||||
sudo iptables-save | sudo tee /etc/iptables/rules.v4
|
||||
sudo ip6tables-save | sudo tee /etc/iptables/rules.v6
|
||||
|
||||
echo "Iptables rules applied successfully for QUIC bridge (including INPUT rules for bandwidth controller)."
|
||||
}
|
||||
|
||||
check_bridge_iptables() {
|
||||
echo "Inspecting iptables rules for QUIC bridge ($wg_tunnel_interface)..."
|
||||
echo "---------------------------------------"
|
||||
echo "IPv4 INPUT rules (for bandwidth controller):"
|
||||
iptables -L INPUT -v -n | grep -E "$wg_tunnel_interface|Chain INPUT" | head -20
|
||||
echo "---------------------------------------"
|
||||
echo "IPv4 FORWARD rules:"
|
||||
iptables -L FORWARD -v -n | awk -v dev="$wg_tunnel_interface" '/^Chain FORWARD/ || $0 ~ dev || $0 ~ "ufw-reject-forward"'
|
||||
echo "---------------------------------------"
|
||||
echo "IPv6 INPUT rules (for bandwidth controller):"
|
||||
ip6tables -L INPUT -v -n | grep -E "$wg_tunnel_interface|Chain INPUT" | head -20
|
||||
echo "---------------------------------------"
|
||||
echo "IPv6 FORWARD rules:"
|
||||
ip6tables -L FORWARD -v -n | awk -v dev="$wg_tunnel_interface" '/^Chain FORWARD/ || $0 ~ dev || $0 ~ "ufw6-reject-forward"'
|
||||
}
|
||||
|
||||
remove_duplicate_bridge_rules() {
|
||||
local script_name=$(basename "$0")
|
||||
|
||||
echo "Removing duplicate iptables rules for $wg_tunnel_interface..."
|
||||
|
||||
iptables-save | grep "$wg_tunnel_interface" | while read -r line; do
|
||||
sudo iptables -D ${line#-A } 2>/dev/null || echo "Failed to delete rule: $line"
|
||||
done
|
||||
|
||||
ip6tables-save | grep "$wg_tunnel_interface" | while read -r line; do
|
||||
sudo ip6tables -D ${line#-A } 2>/dev/null || echo "Failed to delete rule: $line"
|
||||
done
|
||||
|
||||
echo "Duplicates removed for $wg_tunnel_interface."
|
||||
echo "!!IMPORTANT!! You need to now reapply the iptables rules."
|
||||
echo "Run: ./$script_name apply_bridge_iptables_rules"
|
||||
}
|
||||
|
||||
configure_dns_and_icmp() {
|
||||
echo "Allowing ICMP (ping)..."
|
||||
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
|
||||
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
|
||||
sudo ip6tables -A INPUT -p ipv6-icmp -j ACCEPT
|
||||
sudo ip6tables -A OUTPUT -p ipv6-icmp -j ACCEPT
|
||||
|
||||
echo "Allowing DNS over UDP (port 53)..."
|
||||
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
|
||||
sudo ip6tables -A INPUT -p udp --dport 53 -j ACCEPT
|
||||
|
||||
echo "Allowing DNS over TCP (port 53)..."
|
||||
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT
|
||||
sudo ip6tables -A INPUT -p tcp --dport 53 -j ACCEPT
|
||||
|
||||
echo "Saving iptables rules..."
|
||||
sudo iptables-save | sudo tee /etc/iptables/rules.v4
|
||||
sudo ip6tables-save | sudo tee /etc/iptables/rules.v6
|
||||
|
||||
echo "DNS and ICMP configuration completed."
|
||||
}
|
||||
|
||||
check_ipv6_ipv4_forwarding() {
|
||||
result_ipv4=$(cat /proc/sys/net/ipv4/ip_forward)
|
||||
result_ipv6=$(cat /proc/sys/net/ipv6/conf/all/forwarding)
|
||||
echo "IPv4 forwarding is $([ "$result_ipv4" == "1" ] && echo "enabled" || echo "not enabled")."
|
||||
echo "IPv6 forwarding is $([ "$result_ipv6" == "1" ] && echo "enabled" || echo "not enabled")."
|
||||
}
|
||||
|
||||
check_ip_routing() {
|
||||
echo "IPv4 routing table:"
|
||||
ip route
|
||||
echo "---------------------------------------"
|
||||
echo "IPv6 routing table:"
|
||||
ip -6 route
|
||||
}
|
||||
|
||||
perform_pings() {
|
||||
echo "Performing IPv4 ping to google.com..."
|
||||
ping -c 4 google.com
|
||||
echo "---------------------------------------"
|
||||
echo "Performing IPv6 ping to google.com..."
|
||||
ping6 -c 4 google.com
|
||||
}
|
||||
|
||||
test_bridge_connectivity() {
|
||||
local green="\033[0;32m"
|
||||
local reset="\033[0m"
|
||||
local red="\033[0;31m"
|
||||
local yellow="\033[0;33m"
|
||||
|
||||
sleep 1
|
||||
echo
|
||||
echo -e "${yellow}Testing QUIC bridge connectivity on $wg_tunnel_interface...${reset}"
|
||||
echo -e "${yellow}If these tests succeed, it confirms the bridge can reach the outside world via IPv4 and IPv6.${reset}"
|
||||
echo -e "${yellow}However, external clients may experience different connectivity to your bridge.${reset}"
|
||||
|
||||
ipv4_address=$(ip addr show "$wg_tunnel_interface" | awk '/inet / {print $2}' | cut -d'/' -f1)
|
||||
ipv6_address=$(ip addr show "$wg_tunnel_interface" | awk '/inet6 / && $2 !~ /^fe80/ {print $2}' | cut -d'/' -f1)
|
||||
|
||||
if [[ -z "$ipv4_address" && -z "$ipv6_address" ]]; then
|
||||
echo -e "${red}No IP address found on $wg_tunnel_interface. Unable to test connectivity.${reset}"
|
||||
echo -e "${red}Please verify your bridge configuration and ensure the interface is up.${reset}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [[ -n "$ipv4_address" ]]; then
|
||||
echo
|
||||
echo -e "------------------------------------"
|
||||
echo -e "Detected IPv4 address: $ipv4_address"
|
||||
echo -e "Testing IPv4 connectivity..."
|
||||
echo
|
||||
|
||||
if ping -c 1 -I "$ipv4_address" google.com >/dev/null 2>&1; then
|
||||
echo -e "${green}IPv4 connectivity is working. Fetching test data...${reset}"
|
||||
joke=$(curl -s -H "Accept: application/json" --interface "$ipv4_address" https://icanhazdadjoke.com/ | jq -r .joke)
|
||||
[[ -n "$joke" && "$joke" != "null" ]] && echo -e "${green}IPv4 test joke: $joke${reset}" || echo -e "${red}Failed to fetch test data via IPv4.${reset}"
|
||||
else
|
||||
echo -e "${red}IPv4 connectivity is not working for $wg_tunnel_interface. Verify your routing and NAT settings.${reset}"
|
||||
fi
|
||||
else
|
||||
echo -e "${yellow}No IPv4 address found on $wg_tunnel_interface. Skipping IPv4 test.${reset}"
|
||||
fi
|
||||
|
||||
if [[ -n "$ipv6_address" ]]; then
|
||||
echo
|
||||
echo -e "------------------------------------"
|
||||
echo -e "Detected IPv6 address: $ipv6_address"
|
||||
echo -e "Testing IPv6 connectivity..."
|
||||
echo
|
||||
|
||||
if ping6 -c 1 -I "$ipv6_address" google.com >/dev/null 2>&1; then
|
||||
echo -e "${green}IPv6 connectivity is working. Fetching test data...${reset}"
|
||||
joke=$(curl -s -H "Accept: application/json" --interface "$ipv6_address" https://icanhazdadjoke.com/ | jq -r .joke)
|
||||
[[ -n "$joke" && "$joke" != "null" ]] && echo -e "${green}IPv6 test joke: $joke${reset}" || echo -e "${red}Failed to fetch test data via IPv6.${reset}"
|
||||
else
|
||||
echo -e "${red}IPv6 connectivity is not working for $wg_tunnel_interface. Verify your routing and NAT settings.${reset}"
|
||||
fi
|
||||
else
|
||||
echo -e "${yellow}No IPv6 address found on $wg_tunnel_interface. Skipping IPv6 test.${reset}"
|
||||
fi
|
||||
|
||||
echo -e "${green}Connectivity testing completed for $wg_tunnel_interface.${reset}"
|
||||
echo -e "------------------------------------"
|
||||
|
||||
sleep 2
|
||||
echo
|
||||
echo
|
||||
echo -e "${yellow}### Bridge Connectivity Testing Recommendations ###${reset}"
|
||||
echo -e "${yellow}- Test UDP connectivity on port 51822 (used for Nym QUIC/WireGuard)${reset}"
|
||||
echo -e "${yellow} From another machine: echo 'test message' | nc -u <your-ip-address> 51822${reset}"
|
||||
echo -e "${yellow}- Test bandwidth controller access on port 51830:${reset}"
|
||||
echo -e "${yellow} From inside the WireGuard tunnel: curl http://10.1.0.1:51830${reset}"
|
||||
echo -e "${yellow}- If connectivity issues persist, check port forwarding and firewall rules${reset}"
|
||||
echo
|
||||
}
|
||||
|
||||
check_bridge_service_status() {
|
||||
echo "Checking nym-bridge service status..."
|
||||
systemctl status nym-bridge.service --no-pager
|
||||
echo "---------------------------------------"
|
||||
echo "Checking nym-node service status..."
|
||||
systemctl status nym-node.service --no-pager
|
||||
}
|
||||
|
||||
show_bridge_logs() {
|
||||
local lines=${1:-50}
|
||||
echo "Showing last $lines lines of nym-bridge logs..."
|
||||
journalctl -u nym-bridge.service -n "$lines" --no-pager
|
||||
}
|
||||
|
||||
check_bridge_installation() {
|
||||
local green="\033[0;32m"
|
||||
local reset="\033[0m"
|
||||
local red="\033[0;31m"
|
||||
local yellow="\033[0;33m"
|
||||
|
||||
echo -e "${yellow}=== Nym QUIC Bridge Installation Status ===${reset}"
|
||||
echo ""
|
||||
|
||||
# Check binary
|
||||
if [[ -f "$BRIDGE_BINARY" ]]; then
|
||||
echo -e "${green}✓ Bridge binary found: $BRIDGE_BINARY${reset}"
|
||||
bridge_version=$($BRIDGE_BINARY --version 2>/dev/null | head -1 || echo "Unable to determine version")
|
||||
echo " Version: $bridge_version"
|
||||
else
|
||||
echo -e "${red}✗ Bridge binary not found at $BRIDGE_BINARY${reset}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Check configuration directory
|
||||
if [[ -d "$BRIDGE_CONFIG_DIR" ]]; then
|
||||
echo -e "${green}✓ Configuration directory exists: $BRIDGE_CONFIG_DIR${reset}"
|
||||
else
|
||||
echo -e "${red}✗ Configuration directory not found: $BRIDGE_CONFIG_DIR${reset}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Check keys directory
|
||||
if [[ -d "$BRIDGE_KEYS_DIR" ]]; then
|
||||
echo -e "${green}✓ Keys directory exists: $BRIDGE_KEYS_DIR${reset}"
|
||||
key_count=$(ls -1 "$BRIDGE_KEYS_DIR"/*.pem 2>/dev/null | wc -l)
|
||||
echo " Keys found: $key_count"
|
||||
else
|
||||
echo -e "${red}✗ Keys directory not found: $BRIDGE_KEYS_DIR${reset}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Check configuration files
|
||||
if [[ -f "$BRIDGE_CONFIG" ]]; then
|
||||
echo -e "${green}✓ Bridge config found: $BRIDGE_CONFIG${reset}"
|
||||
else
|
||||
echo -e "${red}✗ Bridge config not found: $BRIDGE_CONFIG${reset}"
|
||||
fi
|
||||
|
||||
if [[ -f "$CLIENT_PARAMS" ]]; then
|
||||
echo -e "${green}✓ Client params found: $CLIENT_PARAMS${reset}"
|
||||
else
|
||||
echo -e "${red}✗ Client params not found: $CLIENT_PARAMS${reset}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Check services
|
||||
echo -e "${yellow}Service Status:${reset}"
|
||||
if systemctl is-active --quiet nym-bridge.service; then
|
||||
echo -e "${green}✓ nym-bridge service is running${reset}"
|
||||
else
|
||||
echo -e "${red}✗ nym-bridge service is not running${reset}"
|
||||
fi
|
||||
|
||||
if systemctl is-active --quiet nym-node.service; then
|
||||
echo -e "${green}✓ nym-node service is running${reset}"
|
||||
else
|
||||
echo -e "${red}✗ nym-node service is not running${reset}"
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
|
||||
show_bridge_config() {
|
||||
echo "=== Bridge Configuration ==="
|
||||
echo ""
|
||||
|
||||
if [[ -f "$BRIDGE_CONFIG" ]]; then
|
||||
echo "Bridge config ($BRIDGE_CONFIG):"
|
||||
echo "---------------------------------------"
|
||||
cat "$BRIDGE_CONFIG"
|
||||
echo ""
|
||||
else
|
||||
echo "Bridge config not found at $BRIDGE_CONFIG"
|
||||
fi
|
||||
|
||||
if [[ -f "$CLIENT_PARAMS" ]]; then
|
||||
echo "Client parameters ($CLIENT_PARAMS):"
|
||||
echo "---------------------------------------"
|
||||
cat "$CLIENT_PARAMS"
|
||||
echo ""
|
||||
else
|
||||
echo "Client parameters not found at $CLIENT_PARAMS"
|
||||
fi
|
||||
}
|
||||
|
||||
show_bridge_keys() {
|
||||
local green="\033[0;32m"
|
||||
local reset="\033[0m"
|
||||
local red="\033[0;31m"
|
||||
local yellow="\033[0;33m"
|
||||
|
||||
echo -e "${yellow}=== Bridge Keys Information ===${reset}"
|
||||
echo ""
|
||||
|
||||
if [[ ! -d "$BRIDGE_KEYS_DIR" ]]; then
|
||||
echo -e "${red}Keys directory not found: $BRIDGE_KEYS_DIR${reset}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Keys directory: $BRIDGE_KEYS_DIR"
|
||||
echo "---------------------------------------"
|
||||
|
||||
# List all key files
|
||||
if ls -1 "$BRIDGE_KEYS_DIR"/*.pem >/dev/null 2>&1; then
|
||||
for key_file in "$BRIDGE_KEYS_DIR"/*.pem; do
|
||||
key_name=$(basename "$key_file")
|
||||
echo -e "${green}Key file: $key_name${reset}"
|
||||
|
||||
# If it's a public key, show the content
|
||||
if [[ "$key_name" == *"_bridge_identity.pem" ]]; then
|
||||
echo " Type: ED25519 Bridge Identity (Private)"
|
||||
echo " Path: $key_file"
|
||||
|
||||
# Extract and show public key
|
||||
if command -v openssl >/dev/null 2>&1; then
|
||||
echo -e "${yellow} Public key (base64):${reset}"
|
||||
openssl pkey -in "$key_file" -pubout 2>/dev/null | grep -v "\---" | base64 -d | tail -c 32 | base64
|
||||
fi
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
else
|
||||
echo -e "${red}No key files found in $BRIDGE_KEYS_DIR${reset}"
|
||||
fi
|
||||
}
|
||||
|
||||
show_bridge_info() {
|
||||
local green="\033[0;32m"
|
||||
local reset="\033[0m"
|
||||
local yellow="\033[0;33m"
|
||||
|
||||
echo -e "${yellow}=== Nym QUIC Bridge Information ===${reset}"
|
||||
echo ""
|
||||
|
||||
# Network interfaces
|
||||
echo -e "${yellow}Network Configuration:${reset}"
|
||||
echo "Primary network device: $network_device"
|
||||
echo "WireGuard interface: $wg_tunnel_interface"
|
||||
|
||||
# Show IP addresses
|
||||
echo ""
|
||||
echo "IPv4 addresses:"
|
||||
ip -4 addr show | grep inet | awk '{print " " $2 " on " $NF}'
|
||||
|
||||
echo ""
|
||||
echo "IPv6 addresses:"
|
||||
ip -6 addr show scope global | grep inet6 | awk '{print " " $2 " on " $NF}'
|
||||
|
||||
echo ""
|
||||
echo -e "${yellow}Bridge Paths:${reset}"
|
||||
echo "Configuration: $BRIDGE_CONFIG_DIR"
|
||||
echo "Keys: $BRIDGE_KEYS_DIR"
|
||||
echo "Binary: $BRIDGE_BINARY"
|
||||
|
||||
echo ""
|
||||
echo -e "${yellow}Important Commands:${reset}"
|
||||
echo " Check bridge status: systemctl status nym-bridge"
|
||||
echo " Check nym-node status: systemctl status nym-node"
|
||||
echo " View bridge logs: journalctl -u nym-bridge -f"
|
||||
echo " View nym-node logs: journalctl -u nym-node -f"
|
||||
echo ""
|
||||
}
|
||||
|
||||
verify_bridge_prerequisites() {
|
||||
local green="\033[0;32m"
|
||||
local reset="\033[0m"
|
||||
local red="\033[0;31m"
|
||||
local yellow="\033[0;33m"
|
||||
|
||||
echo -e "${yellow}=== Verifying Bridge Prerequisites ===${reset}"
|
||||
echo ""
|
||||
|
||||
local all_good=true
|
||||
|
||||
# Check IP forwarding
|
||||
ipv4_forward=$(cat /proc/sys/net/ipv4/ip_forward)
|
||||
ipv6_forward=$(cat /proc/sys/net/ipv6/conf/all/forwarding)
|
||||
|
||||
if [[ "$ipv4_forward" == "1" ]]; then
|
||||
echo -e "${green}✓ IPv4 forwarding enabled${reset}"
|
||||
else
|
||||
echo -e "${red}✗ IPv4 forwarding disabled${reset}"
|
||||
echo " Fix: Run 'nym-bridge-helper adjust_ip_forwarding'"
|
||||
all_good=false
|
||||
fi
|
||||
|
||||
if [[ "$ipv6_forward" == "1" ]]; then
|
||||
echo -e "${green}✓ IPv6 forwarding enabled${reset}"
|
||||
else
|
||||
echo -e "${red}✗ IPv6 forwarding disabled${reset}"
|
||||
echo " Fix: Run 'nym-bridge-helper adjust_ip_forwarding'"
|
||||
all_good=false
|
||||
fi
|
||||
|
||||
# Check iptables-persistent
|
||||
if dpkg -s iptables-persistent >/dev/null 2>&1; then
|
||||
echo -e "${green}✓ iptables-persistent installed${reset}"
|
||||
else
|
||||
echo -e "${red}✗ iptables-persistent not installed${reset}"
|
||||
echo " Fix: This script will auto-install on first run"
|
||||
all_good=false
|
||||
fi
|
||||
|
||||
# Check required packages
|
||||
for pkg in openssl jq curl wg; do
|
||||
if command -v "$pkg" >/dev/null 2>&1; then
|
||||
echo -e "${green}✓ $pkg installed${reset}"
|
||||
else
|
||||
echo -e "${red}✗ $pkg not installed${reset}"
|
||||
if [[ "$pkg" == "wg" ]]; then
|
||||
echo " Install: sudo apt install wireguard-tools"
|
||||
fi
|
||||
all_good=false
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
if [[ "$all_good" == true ]]; then
|
||||
echo -e "${green}All prerequisites satisfied!${reset}"
|
||||
else
|
||||
echo -e "${yellow}Some prerequisites need attention. See above for fixes.${reset}"
|
||||
fi
|
||||
echo ""
|
||||
}
|
||||
|
||||
generate_bridge_keys() {
|
||||
local green="\033[0;32m"
|
||||
local reset="\033[0m"
|
||||
local red="\033[0;31m"
|
||||
local yellow="\033[0;33m"
|
||||
|
||||
echo -e "${yellow}=== Generating Bridge Keys ===${reset}"
|
||||
echo ""
|
||||
|
||||
# Create directories
|
||||
sudo mkdir -p "$BRIDGE_CONFIG_DIR"
|
||||
sudo mkdir -p "$BRIDGE_KEYS_DIR"
|
||||
sudo chmod 700 "$BRIDGE_KEYS_DIR"
|
||||
|
||||
# Generate ED25519 private key
|
||||
local key_file="$BRIDGE_KEYS_DIR/ed25519_bridge_identity.pem"
|
||||
|
||||
if [[ -f "$key_file" ]]; then
|
||||
echo -e "${yellow}Warning: Key file already exists at $key_file${reset}"
|
||||
read -p "Overwrite existing key? (yes/no): " confirm
|
||||
if [[ "$confirm" != "yes" ]]; then
|
||||
echo "Aborted. Keeping existing key."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Generating ED25519 key..."
|
||||
sudo openssl genpkey -algorithm ED25519 -out "$key_file"
|
||||
sudo chmod 600 "$key_file"
|
||||
|
||||
echo -e "${green}✓ Bridge key generated at $key_file${reset}"
|
||||
|
||||
# Extract and display public key
|
||||
echo ""
|
||||
echo "Extracting public key..."
|
||||
pubkey=$(sudo openssl pkey -in "$key_file" -pubout 2>/dev/null | grep -v "\---" | base64 -d | tail -c 32 | base64)
|
||||
echo -e "${green}Public key (base64): $pubkey${reset}"
|
||||
|
||||
echo ""
|
||||
echo -e "${yellow}Next steps:${reset}"
|
||||
echo "1. Run 'nym-bridge-helper create_client_params' to generate client parameters"
|
||||
echo "2. Run 'nym-bridge-helper create_bridge_config' to create bridge configuration"
|
||||
}
|
||||
|
||||
create_client_params() {
|
||||
local green="\033[0;32m"
|
||||
local reset="\033[0m"
|
||||
local red="\033[0;31m"
|
||||
local yellow="\033[0;33m"
|
||||
|
||||
echo -e "${yellow}=== Creating Client Bridge Parameters ===${reset}"
|
||||
echo ""
|
||||
|
||||
# Check if key exists
|
||||
local key_file="$BRIDGE_KEYS_DIR/ed25519_bridge_identity.pem"
|
||||
if [[ ! -f "$key_file" ]]; then
|
||||
echo -e "${red}Error: Bridge key not found at $key_file${reset}"
|
||||
echo "Run 'nym-bridge-helper generate_bridge_keys' first"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Get forward address
|
||||
read -p "Enter forward address (e.g., <IPv4>:51822, can be found by running 'curl -6 https://ifconfig.co/ip'): " forward_addr
|
||||
if [[ -z "$forward_addr" ]]; then
|
||||
echo -e "${red}Error: Forward address is required${reset}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Extract public key
|
||||
echo "Extracting public key..."
|
||||
pubkey=$(sudo openssl pkey -in "$key_file" -pubout 2>/dev/null | grep -v "\---" | base64 -d | tail -c 32 | base64)
|
||||
|
||||
# Create client params JSON
|
||||
echo "Creating client parameters file..."
|
||||
sudo tee "$CLIENT_PARAMS" > /dev/null <<EOF
|
||||
{
|
||||
"ed25519_bridge_identity": "$pubkey",
|
||||
"forward_address": "$forward_addr",
|
||||
"endpoint": {
|
||||
"Quic": {
|
||||
"host": "$forward_addr"
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
sudo chmod 644 "$CLIENT_PARAMS"
|
||||
|
||||
echo -e "${green}✓ Client parameters created at $CLIENT_PARAMS${reset}"
|
||||
echo ""
|
||||
echo "Content:"
|
||||
cat "$CLIENT_PARAMS"
|
||||
}
|
||||
|
||||
create_bridge_config() {
|
||||
local green="\033[0;32m"
|
||||
local reset="\033[0m"
|
||||
local red="\033[0;31m"
|
||||
local yellow="\033[0;33m"
|
||||
|
||||
echo -e "${yellow}=== Creating Bridge Configuration ===${reset}"
|
||||
echo ""
|
||||
|
||||
# Get configuration parameters
|
||||
read -p "Enter listening address (press enter for default: 0.0.0.0): " listen_addr
|
||||
listen_addr=${listen_addr:-0.0.0.0}
|
||||
|
||||
read -p "Enter listening port (press enter for default: 51822): " listen_port
|
||||
listen_port=${listen_port:-51822}
|
||||
|
||||
read -p "Enter tunnel device name (press enter for default: nymwg): " tunnel_dev
|
||||
tunnel_dev=${tunnel_dev:-nymwg}
|
||||
|
||||
read -p "Enter tunnel IPv4 address (press enter for default: 10.1.0.1/24): " tunnel_ipv4
|
||||
tunnel_ipv4=${tunnel_ipv4:-10.1.0.1/24}
|
||||
|
||||
read -p "Enter tunnel IPv6 address (optional, can be found by running 'curl -6 https://ifconfig.co/ip', press enter to skip): " tunnel_ipv6
|
||||
|
||||
read -p "Enter WireGuard private key (or press enter to generate): " wg_privkey
|
||||
if [[ -z "$wg_privkey" ]]; then
|
||||
echo "Generating WireGuard private key..."
|
||||
wg_privkey=$(wg genkey)
|
||||
wg_pubkey=$(echo "$wg_privkey" | wg pubkey)
|
||||
echo -e "${green}Generated WireGuard public key: $wg_pubkey${reset}"
|
||||
fi
|
||||
|
||||
# Create bridges.toml
|
||||
echo "Creating bridge configuration..."
|
||||
sudo tee "$BRIDGE_CONFIG" > /dev/null <<EOF
|
||||
# Nym QUIC Bridge Configuration
|
||||
|
||||
[[bridges]]
|
||||
# Listening address and port for the bridge
|
||||
listening_address = "$listen_addr:$listen_port"
|
||||
|
||||
# WireGuard tunnel configuration
|
||||
tunnel_device_name = "$tunnel_dev"
|
||||
tunnel_device_address = "$tunnel_ipv4"
|
||||
EOF
|
||||
|
||||
if [[ -n "$tunnel_ipv6" ]]; then
|
||||
echo "tunnel_device_ipv6_address = \"$tunnel_ipv6\"" | sudo tee -a "$BRIDGE_CONFIG" > /dev/null
|
||||
fi
|
||||
|
||||
sudo tee -a "$BRIDGE_CONFIG" > /dev/null <<EOF
|
||||
|
||||
# Bridge identity key
|
||||
bridge_identity_private_key_file = "$BRIDGE_KEYS_DIR/ed25519_bridge_identity.pem"
|
||||
|
||||
# WireGuard private key
|
||||
wireguard_private_key = "$wg_privkey"
|
||||
|
||||
# Additional settings
|
||||
bandwidth_controller_port = 51830
|
||||
EOF
|
||||
|
||||
sudo chmod 644 "$BRIDGE_CONFIG"
|
||||
|
||||
echo -e "${green}✓ Bridge configuration created at $BRIDGE_CONFIG${reset}"
|
||||
echo ""
|
||||
echo "Configuration preview:"
|
||||
cat "$BRIDGE_CONFIG"
|
||||
}
|
||||
|
||||
create_bridge_service() {
|
||||
local green="\033[0;32m"
|
||||
local reset="\033[0m"
|
||||
local red="\033[0;31m"
|
||||
local yellow="\033[0;33m"
|
||||
|
||||
echo -e "${yellow}=== Creating nym-bridge systemd Service ===${reset}"
|
||||
echo ""
|
||||
|
||||
# Check if bridge binary exists
|
||||
if [[ ! -f "$BRIDGE_BINARY" ]]; then
|
||||
echo -e "${red}Error: Bridge binary not found at $BRIDGE_BINARY${reset}"
|
||||
echo "Please install the nym-bridge binary first"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Check if config exists
|
||||
if [[ ! -f "$BRIDGE_CONFIG" ]]; then
|
||||
echo -e "${red}Error: Bridge config not found at $BRIDGE_CONFIG${reset}"
|
||||
echo "Run 'nym-bridge-helper create_bridge_config' first"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Create systemd service file
|
||||
local service_file="/etc/systemd/system/nym-bridge.service"
|
||||
|
||||
echo "Creating systemd service file..."
|
||||
sudo tee "$service_file" > /dev/null <<EOF
|
||||
[Unit]
|
||||
Description=Nym QUIC Bridge
|
||||
After=network.target nym-node.service
|
||||
Wants=nym-node.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
ExecStart=$BRIDGE_BINARY --config $BRIDGE_CONFIG
|
||||
Restart=on-failure
|
||||
RestartSec=10
|
||||
StandardOutput=journal
|
||||
StandardError=journal
|
||||
SyslogIdentifier=nym-bridge
|
||||
|
||||
# Security settings
|
||||
NoNewPrivileges=false
|
||||
PrivateTmp=true
|
||||
ProtectSystem=strict
|
||||
ProtectHome=true
|
||||
ReadWritePaths=$BRIDGE_CONFIG_DIR
|
||||
|
||||
# Network capabilities
|
||||
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
|
||||
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
echo -e "${green}✓ Systemd service file created at $service_file${reset}"
|
||||
|
||||
# Reload systemd
|
||||
echo "Reloading systemd daemon..."
|
||||
sudo systemctl daemon-reload
|
||||
|
||||
echo ""
|
||||
echo -e "${green}Service created successfully!${reset}"
|
||||
echo ""
|
||||
echo "To enable and start the service:"
|
||||
echo " sudo systemctl enable nym-bridge"
|
||||
echo " sudo systemctl start nym-bridge"
|
||||
echo ""
|
||||
echo "To check status:"
|
||||
echo " sudo systemctl status nym-bridge"
|
||||
}
|
||||
|
||||
install_bridge_binary() {
|
||||
local green="\033[0;32m"
|
||||
local reset="\033[0m"
|
||||
local red="\033[0;31m"
|
||||
local yellow="\033[0;33m"
|
||||
|
||||
echo -e "${yellow}=== Installing nym-bridge Binary ===${reset}"
|
||||
echo ""
|
||||
|
||||
read -p "Enter bridge binary URL for your system from here https://builds.ci.nymte.ch/QUIC/: " binary_url
|
||||
if [[ -z "$binary_url" ]]; then
|
||||
echo -e "${red}Error: Binary URL is required${reset}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "Downloading nym-bridge binary..."
|
||||
if sudo curl -L "$binary_url" -o "$BRIDGE_BINARY"; then
|
||||
sudo chmod 755 "$BRIDGE_BINARY"
|
||||
echo -e "${green}✓ Bridge binary installed at $BRIDGE_BINARY${reset}"
|
||||
|
||||
# Show version
|
||||
echo ""
|
||||
echo "Binary version:"
|
||||
$BRIDGE_BINARY --version || echo "Unable to determine version"
|
||||
else
|
||||
echo -e "${red}✗ Failed to download bridge binary${reset}"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
full_bridge_setup() {
|
||||
local green="\033[0;32m"
|
||||
local reset="\033[0m"
|
||||
local yellow="\033[0;33m"
|
||||
|
||||
echo -e "${yellow}========================================${reset}"
|
||||
echo -e "${yellow} Nym QUIC Bridge - Full Setup${reset}"
|
||||
echo -e "${yellow}========================================${reset}"
|
||||
echo ""
|
||||
|
||||
echo "This will guide you through complete bridge setup"
|
||||
echo ""
|
||||
|
||||
# Step 1: Prerequisites
|
||||
echo "Step 1/7: Checking prerequisites..."
|
||||
verify_bridge_prerequisites
|
||||
read -p "Press Enter to continue..."
|
||||
|
||||
# Step 2: Install binary
|
||||
echo ""
|
||||
echo "Step 2/7: Installing bridge binary..."
|
||||
install_bridge_binary
|
||||
read -p "Press Enter to continue..."
|
||||
|
||||
# Step 3: Generate keys
|
||||
echo ""
|
||||
echo "Step 3/7: Generating bridge keys..."
|
||||
generate_bridge_keys
|
||||
read -p "Press Enter to continue..."
|
||||
|
||||
# Step 4: Create client params
|
||||
echo ""
|
||||
echo "Step 4/7: Creating client parameters..."
|
||||
create_client_params
|
||||
read -p "Press Enter to continue..."
|
||||
|
||||
# Step 5: Create bridge config
|
||||
echo ""
|
||||
echo "Step 5/7: Creating bridge configuration..."
|
||||
create_bridge_config
|
||||
read -p "Press Enter to continue..."
|
||||
|
||||
# Step 6: Create service
|
||||
echo ""
|
||||
echo "Step 6/7: Creating systemd service..."
|
||||
create_bridge_service
|
||||
read -p "Press Enter to continue..."
|
||||
|
||||
# Step 7: Network setup
|
||||
echo ""
|
||||
echo "Step 7/7: Configuring network..."
|
||||
adjust_ip_forwarding
|
||||
apply_bridge_iptables_rules
|
||||
configure_dns_and_icmp
|
||||
|
||||
echo ""
|
||||
echo -e "${green}========================================${reset}"
|
||||
echo -e "${green} Bridge Setup Complete!${reset}"
|
||||
echo -e "${green}========================================${reset}"
|
||||
echo ""
|
||||
echo "To start the bridge:"
|
||||
echo " sudo systemctl enable nym-bridge"
|
||||
echo " sudo systemctl start nym-bridge"
|
||||
echo ""
|
||||
echo "To check status:"
|
||||
echo " nym-bridge-helper check_bridge_service_status"
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
fetch_and_display_ipv6)
|
||||
fetch_and_display_ipv6
|
||||
;;
|
||||
fetch_wg_ipv6_address)
|
||||
fetch_wg_ipv6_address
|
||||
;;
|
||||
apply_bridge_iptables_rules)
|
||||
apply_bridge_iptables_rules
|
||||
;;
|
||||
check_bridge_iptables)
|
||||
check_bridge_iptables
|
||||
;;
|
||||
remove_duplicate_bridge_rules)
|
||||
remove_duplicate_bridge_rules
|
||||
;;
|
||||
configure_dns_and_icmp)
|
||||
configure_dns_and_icmp
|
||||
;;
|
||||
adjust_ip_forwarding)
|
||||
adjust_ip_forwarding
|
||||
;;
|
||||
check_ipv6_ipv4_forwarding)
|
||||
check_ipv6_ipv4_forwarding
|
||||
;;
|
||||
check_ip_routing)
|
||||
check_ip_routing
|
||||
;;
|
||||
perform_pings)
|
||||
perform_pings
|
||||
;;
|
||||
test_bridge_connectivity)
|
||||
test_bridge_connectivity
|
||||
;;
|
||||
check_bridge_service_status)
|
||||
check_bridge_service_status
|
||||
;;
|
||||
show_bridge_logs)
|
||||
show_bridge_logs "$2"
|
||||
;;
|
||||
check_bridge_installation)
|
||||
check_bridge_installation
|
||||
;;
|
||||
show_bridge_config)
|
||||
show_bridge_config
|
||||
;;
|
||||
show_bridge_keys)
|
||||
show_bridge_keys
|
||||
;;
|
||||
show_bridge_info)
|
||||
show_bridge_info
|
||||
;;
|
||||
verify_bridge_prerequisites)
|
||||
verify_bridge_prerequisites
|
||||
;;
|
||||
generate_bridge_keys)
|
||||
generate_bridge_keys
|
||||
;;
|
||||
create_client_params)
|
||||
create_client_params
|
||||
;;
|
||||
create_bridge_config)
|
||||
create_bridge_config
|
||||
;;
|
||||
create_bridge_service)
|
||||
create_bridge_service
|
||||
;;
|
||||
install_bridge_binary)
|
||||
install_bridge_binary
|
||||
;;
|
||||
full_bridge_setup)
|
||||
full_bridge_setup
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 [command] [options]"
|
||||
echo ""
|
||||
echo "Nym QUIC Bridge Deployment Helper Script"
|
||||
echo ""
|
||||
echo "Bridge Installation & Configuration:"
|
||||
echo " check_bridge_installation - Check bridge installation status"
|
||||
echo " show_bridge_config - Display bridge configuration files"
|
||||
echo " show_bridge_keys - Display bridge key information"
|
||||
echo " show_bridge_info - Show comprehensive bridge information"
|
||||
echo " verify_bridge_prerequisites - Verify all prerequisites are met"
|
||||
echo ""
|
||||
echo "Bridge Setup Commands:"
|
||||
echo " install_bridge_binary - Download and install nym-bridge binary"
|
||||
echo " generate_bridge_keys - Generate ED25519 bridge identity keys"
|
||||
echo " create_client_params - Create client_bridge_params.json"
|
||||
echo " create_bridge_config - Create bridges.toml configuration"
|
||||
echo " create_bridge_service - Create systemd service file"
|
||||
echo " full_bridge_setup - Interactive full bridge setup wizard"
|
||||
echo ""
|
||||
echo "Network Configuration Commands:"
|
||||
echo " adjust_ip_forwarding - Enable IPv4 and IPv6 forwarding"
|
||||
echo " apply_bridge_iptables_rules - Apply iptables rules for QUIC bridge (nymwg)"
|
||||
echo " configure_dns_and_icmp - Allow ICMP ping tests and configure DNS"
|
||||
echo " remove_duplicate_bridge_rules - Remove duplicate iptables rules for nymwg"
|
||||
echo ""
|
||||
echo "Network Inspection Commands:"
|
||||
echo " fetch_and_display_ipv6 - Show IPv6 on default network device"
|
||||
echo " fetch_wg_ipv6_address - Fetch IPv6 for nymwg interface"
|
||||
echo " check_bridge_iptables - Check iptables rules for nymwg"
|
||||
echo " check_ipv6_ipv4_forwarding - Check IPv4 and IPv6 forwarding status"
|
||||
echo " check_ip_routing - Display IP routing tables"
|
||||
echo ""
|
||||
echo "Testing Commands:"
|
||||
echo " perform_pings - Test IPv4 and IPv6 connectivity"
|
||||
echo " test_bridge_connectivity - Comprehensive bridge connectivity test"
|
||||
echo ""
|
||||
echo "Service Management Commands:"
|
||||
echo " check_bridge_service_status - Check nym-bridge and nym-node service status"
|
||||
echo " show_bridge_logs [lines] - Show recent nym-bridge logs (default: 50 lines)"
|
||||
echo ""
|
||||
echo "Quick Start:"
|
||||
echo " 1. Run 'verify_bridge_prerequisites' to check prerequisites"
|
||||
echo " 2. Run 'check_bridge_installation' to verify installation"
|
||||
echo " 3. Run 'test_bridge_connectivity' to test connectivity"
|
||||
echo ""
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "Operation '$1' completed successfully."
|
||||
|
||||
Reference in New Issue
Block a user