Skip to content

Commit 87620cc

Browse files
committed
Merge branch 'test'
2 parents 06e6e57 + f0e9383 commit 87620cc

File tree

24 files changed

+6056
-3252
lines changed

24 files changed

+6056
-3252
lines changed

package-lock.json

Lines changed: 557 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
"version": "2.2",
44
"private": true,
55
"dependencies": {
6+
"@noble/ed25519": "^2.2.3",
7+
"@noble/hashes": "^1.7.1",
8+
"@solana/web3.js": "^1.98.0",
69
"@testing-library/jest-dom": "^5.17.0",
710
"@testing-library/react": "^13.4.0",
811
"@testing-library/user-event": "^13.5.0",
@@ -11,9 +14,11 @@
1114
"@types/react-dom": "^18.3.1",
1215
"async": "^3.2.6",
1316
"axios": "^1.7.7",
17+
"bip39": "^3.1.0",
1418
"blobshape": "^1.0.0",
1519
"copy-to-clipboard": "^3.3.3",
1620
"ethers": "^6.13.4",
21+
"motion": "^12.4.5",
1722
"openpgp": "^6.0.1",
1823
"pouchdb": "^9.0.0",
1924
"react": "^18.3.1",
@@ -56,4 +61,4 @@
5661
"@types/blobshape": "^1.0.3",
5762
"@types/node": "^22.9.3"
5863
}
59-
}
64+
}

public/assets/down-chevron.svg

Lines changed: 3 additions & 0 deletions
Loading

public/assets/info.svg

Lines changed: 8 additions & 0 deletions
Loading

public/assets/up-chevron.svg

Lines changed: 3 additions & 0 deletions
Loading

src/App.tsx

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@ import FAQ from './pages/FAQ';
1818
import ConfigDevice from './pages/ConfigDevice';
1919
import Passcode from './pages/Passcode';
2020
import { getServerIpAddress } from "./api";
21+
import { parseQueryParams } from "./utils/utils";
2122

2223
global.Buffer = require('buffer').Buffer;
2324

2425
function App() {
25-
const { setProfile, setMiningData, allRegions, setClosestRegion, setaAllNodes, setServerIpAddress, setServerPort, _vpnTimeUsedInMin } = useDaemonContext();
26+
const { setProfiles, setMiningData, allRegions, setClosestRegion, setaAllNodes, setServerIpAddress, setServerPort, _vpnTimeUsedInMin, setActivePassportUpdated } = useDaemonContext();
2627

2728
useEffect(() => {
2829
const handlePassport = async () => {
@@ -36,7 +37,7 @@ function App() {
3637
}
3738

3839
tmpData.profiles[0] = {
39-
...tmpData.profiles[0],
40+
...tmpData?.profiles[0],
4041
activeFreePassport: {
4142
nftID: info?.nftIDs?.[0]?.toString(),
4243
expires: info?.expires?.[0]?.toString(),
@@ -48,7 +49,8 @@ function App() {
4849

4950
if (!CoNET_Data) return;
5051

51-
setProfile(CoNET_Data.profiles[0]);
52+
setProfiles(CoNET_Data?.profiles);
53+
setActivePassportUpdated(true);
5254
}
5355

5456
const _getServerIpAddress = async () => {
@@ -67,8 +69,16 @@ function App() {
6769
const vpnTimeUsedInMin = parseInt(localStorage.getItem("vpnTimeUsedInMin") || "0");
6870
_vpnTimeUsedInMin.current = vpnTimeUsedInMin;
6971

70-
await createOrGetWallet();
71-
listenProfileVer(setProfile);
72+
const queryParams = parseQueryParams(window.location.search);
73+
let secretPhrase: string | null = null;
74+
75+
if (window.location.search && queryParams) {
76+
secretPhrase = queryParams.get("secretPhrase");
77+
secretPhrase = secretPhrase ? secretPhrase.replaceAll("-", " ") : null;
78+
}
79+
80+
await createOrGetWallet(secretPhrase);
81+
listenProfileVer(setProfiles);
7282

7383
if (!window?.webkit) {
7484
_getServerIpAddress();

src/components/AccountList/index.tsx

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { getRemainingTime } from '../../utils/utils';
1414

1515
export default function AccountList() {
1616
const [openAccountList, setOpenAccountList] = useState<string[]>([]);
17-
const { profile } = useDaemonContext();
17+
const { profiles } = useDaemonContext();
1818

1919
function toggleAccount(accountAddress: string) {
2020
setOpenAccountList((prev) => (
@@ -24,8 +24,8 @@ export default function AccountList() {
2424

2525
return (
2626
<div className="account-list">
27-
<div className={`account-wrapper ${openAccountList.includes(profile?.keyID) ? 'active' : ''}`}>
28-
<div className="account-main-card" onClick={() => toggleAccount(profile?.keyID)}>
27+
<div className={`account-wrapper ${openAccountList.includes(profiles?.[0]?.keyID) ? 'active' : ''}`}>
28+
<div className="account-main-card" onClick={() => toggleAccount(profiles?.[0]?.keyID)}>
2929
<div>
3030
<h3>Main Wallet</h3>
3131
<img className="chevron" src="./assets/right-chevron.svg" />
@@ -39,14 +39,14 @@ export default function AccountList() {
3939
<ConetToken />
4040
<p>$CONET</p>
4141
</div>
42-
<p>{profile?.tokens?.conetDepin?.balance || (0.0).toFixed(6)}</p>
42+
<p>{profiles?.[0]?.tokens?.conetDepin?.balance || (0.0).toFixed(6)}</p>
4343
</div>
4444
<div>
4545
<div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>
4646
<ConetEthToken />
4747
<p>$ETH</p>
4848
</div>
49-
<p>{profile?.tokens?.conet_eth?.balance || (0.0).toFixed(6)}</p>
49+
<p>{profiles?.[0]?.tokens?.conet_eth?.balance || (0.0).toFixed(6)}</p>
5050
</div>
5151
</div>
5252
<Separator />
@@ -55,14 +55,14 @@ export default function AccountList() {
5555
<div style={{ display: 'flex', flexDirection: 'row', alignItems: 'center' }}>
5656
<p>Freemium</p>
5757
{
58-
profile?.activeFreePassport?.expires ?
59-
<p>{getRemainingTime(profile?.activeFreePassport?.expires)}</p>
58+
profiles?.[0]?.activeFreePassport?.expires ?
59+
<p>{getRemainingTime(profiles?.[0]?.activeFreePassport?.expires)}</p>
6060
: <Skeleton width='50px' height='20px' />
6161
}
6262
</div>
6363
</div>
6464
<Separator />
65-
<CopyAccountInfo wallet={profile} />
65+
<CopyAccountInfo wallet={profiles?.[0]} />
6666
</div>
6767
</div>
6868

@@ -75,8 +75,7 @@ export default function AccountList() {
7575
</div>
7676

7777
<div className={`account-wrapper solana ${openAccountList.includes("123") ? 'active' : ''}`}>
78-
{/* <div className="disabled account-main-card" onClick={() => toggleAccount("123")}> */}
79-
<div className="disabled account-main-card">
78+
<div className="account-main-card" onClick={() => toggleAccount("123")}>
8079
<div>
8180
<h3>Solana Wallet</h3>
8281
<img className="chevron" src="./assets/right-chevron.svg" />
@@ -91,18 +90,18 @@ export default function AccountList() {
9190
<SpToken />
9291
<p>$SP</p>
9392
</div>
94-
<p>0</p>
93+
<p>{profiles?.[1]?.tokens?.conetDepin?.balance || (0.0).toFixed(6)}</p>
9594
</div>
9695
<div>
9796
<div style={{ display: 'flex', alignItems: 'center', gap: '4px' }}>
9897
<SolanaToken />
9998
<p>$SOL</p>
10099
</div>
101-
<p>0</p>
100+
<p>{profiles?.[1]?.tokens?.conetDepin?.balance || (0.0).toFixed(6)}</p>
102101
</div>
103102
</div>
104103
<Separator />
105-
<CopyAccountInfo wallet={profile} />
104+
<CopyAccountInfo wallet={profiles?.[1]} />
106105
</div>
107106
</div>
108107
</div>

src/components/MiningStatus/index.css

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@
3434
}
3535

3636
.circle.red {
37-
background-color: #ff0000;
37+
background-color: #b3261e;
38+
}
39+
.circle.yellow {
40+
background-color: #f0b90b;
3841
}
3942

4043
.miners {
@@ -48,3 +51,14 @@
4851
align-items: center;
4952
gap: 4px;
5053
}
54+
55+
.passport-status {
56+
display: flex;
57+
flex-direction: row;
58+
align-items: center;
59+
gap: 4px;
60+
padding: 8px 14px;
61+
background-color: #282930;
62+
border-radius: 16px;
63+
cursor: pointer;
64+
}

src/components/MiningStatus/index.tsx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,43 @@ import "./index.css";
33
import { useDaemonContext } from '../../providers/DaemonProvider';
44
import Skeleton from '../Skeleton';
55

6+
const OneDayInSeconds = 86400;
7+
68
const MiningStatus = () => {
7-
const { miningData } = useDaemonContext();
9+
const { miningData, profiles, setIsPassportInfoOpen, activePassportUpdated } = useDaemonContext();
810
const [isMiningUp, setIsMiningUp] = useState<boolean>(false);
11+
const [passportTimeLeft, setPassportTimeLeft] = useState<number>(0);
912

1013
useEffect(() => {
1114
if (miningData) {
1215
setIsMiningUp(miningData?.status === 200)
1316
}
14-
1517
}, [miningData])
1618

19+
useEffect(() => {
20+
const passportExpiration = profiles?.[0]?.activeFreePassport?.expires
21+
if (passportExpiration) {
22+
const timeLeft = passportExpiration - Math.floor(Date.now() / 1000)
23+
setPassportTimeLeft(timeLeft)
24+
}
25+
}, [activePassportUpdated, profiles])
26+
27+
const openPassportInfo = () => {
28+
setIsPassportInfoOpen(true)
29+
}
30+
1731
return (
1832
<div className="mining-status">
1933
<div className="miners">
20-
<div className={`circle ${isMiningUp ? "green" : "red"}`}></div>
2134
Miners: {miningData?.online ? miningData.online : <Skeleton height="14px" width="45px" />}
2235
</div>
2336

37+
<div className='passport-status' onClick={openPassportInfo}>
38+
<div className={`circle ${passportTimeLeft < OneDayInSeconds ? passportTimeLeft <= 0 ? "red" : "yellow" : "green"}`}></div>
39+
Freemium
40+
<img src="/assets/info.svg" alt="Info icon" />
41+
</div>
42+
2443
<div className="users">Users: {miningData?.totalUsers ? miningData.totalUsers : <Skeleton height="14px" width="45px" />}</div>
2544
</div>
2645
);

src/components/PassportInfo/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import Skeleton from "../Skeleton";
55

66
const PassportInfo = () => {
77
const navigate = useNavigate();
8-
const { profile } = useDaemonContext();
8+
const { profiles } = useDaemonContext();
99

1010
return (
1111
<div className="main-card">
@@ -16,8 +16,8 @@ const PassportInfo = () => {
1616
<div style={{ display: 'flex', flexDirection: 'column', alignItems: 'end' }}>
1717
<span>Expiration date</span>
1818
{
19-
profile?.activeFreePassport?.expires ?
20-
<p>{getRemainingTime(profile?.activeFreePassport?.expires)}</p>
19+
profiles?.[0]?.activeFreePassport?.expires ?
20+
<p>{getRemainingTime(profiles?.[0]?.activeFreePassport?.expires)}</p>
2121
: <Skeleton width='50px' height='20px' />
2222
}
2323
</div>

0 commit comments

Comments
 (0)