Skip to content
Open

V2wip #314

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
8873870
add new packages
manuelsc Jun 5, 2024
161af12
merge main
manuelsc Jun 6, 2024
f8f7cbb
new packages
manuelsc Jun 7, 2024
aca0940
deprecate prater
manuelsc Jul 22, 2024
f62d65c
wip
manuelsc Jul 26, 2024
37a5e00
wip fundamentals
manuelsc Aug 1, 2024
8fa1c46
update typescript
manuelsc Aug 1, 2024
49340d2
angular 17
manuelsc Aug 1, 2024
8f043fe
more wip
manuelsc Aug 5, 2024
38d47dc
dashboard refactor, migrate summary chart to echarts, new efficiency …
manuelsc Aug 9, 2024
19a45be
updated company name and copyright
manuelsc Aug 9, 2024
907c631
premium handling, dashboard, api
manuelsc Aug 13, 2024
3332bfb
merge new-packages
manuelsc Aug 13, 2024
ac9988f
charts, refactor, timechange, rocketpool, bugfixes
manuelsc Aug 26, 2024
ba132f8
cleanup
manuelsc Aug 27, 2024
1703abb
format
manuelsc Aug 27, 2024
ae2c63b
more cleanup
manuelsc Aug 27, 2024
75bc77d
summary chart fixes and cleanup
manuelsc Aug 28, 2024
2efe166
BEDS-230 & BEDS-228 validator page, search and add
manuelsc Aug 30, 2024
a5bf4f8
BEDS-232 & BEDS-233: blocks tab
manuelsc Sep 2, 2024
2a3ced1
gitignore prod environment
manuelsc Sep 4, 2024
60fbdaa
remove prod environment
manuelsc Sep 4, 2024
1e9f0a7
local dashboard, ui, bugfixes
manuelsc Sep 6, 2024
65304d7
BEDS-247: update dependencies
manuelsc Sep 6, 2024
ef6f015
tons of UI stuff
manuelsc Sep 10, 2024
f1db678
move delete button to end
manuelsc Sep 10, 2024
44d7504
error handling and offline handling, subscription page, validator sor…
manuelsc Sep 12, 2024
55313fc
v2migrator, bugfixes and error handling
manuelsc Sep 13, 2024
0addad4
api error handling cleanup
manuelsc Sep 13, 2024
eb7bb0b
small cleanup
manuelsc Sep 13, 2024
c17c1d6
lots of types
manuelsc Sep 13, 2024
b735ee2
v1 to v2 migration, bugfixes
manuelsc Sep 16, 2024
4304bd0
BEDS-429 and widget preparations
manuelsc Sep 18, 2024
1289c0a
clients, widgets and sync cleanup, removing notifications settings
manuelsc Sep 19, 2024
e1da7fa
cleanup unused requests
manuelsc Sep 19, 2024
ed27180
reworked api response type, not always an array any more
manuelsc Sep 19, 2024
9be0d88
template typings
manuelsc Sep 20, 2024
e922619
widget android
manuelsc Sep 23, 2024
005b1c0
ios ui fixes
Sep 23, 2024
f9c0a3a
ios storage mirror changes
Sep 24, 2024
31c19d4
storage mirror
Sep 24, 2024
4f27ca2
ios bugfixes
Sep 24, 2024
0882a08
add ios v2 widget
Sep 24, 2024
a67b48f
fix storage mirror result
Sep 24, 2024
4dd09c6
fix indexof bug in updater
manuelsc Sep 25, 2024
52e65c3
fix storage mirror android
manuelsc Sep 25, 2024
0150069
slightly bolder ion item titel to get same look as before ios workaround
manuelsc Sep 25, 2024
266b370
code to reset bundle to default
manuelsc Sep 25, 2024
282237b
remove workaround for BEDS-467
manuelsc Sep 25, 2024
b55748d
forward to web for notifications BEDS-212
manuelsc Sep 25, 2024
9d0dc8a
BEDS-504 bulk add via index for premium users
manuelsc Sep 25, 2024
5687869
fix dev weird spacing
manuelsc Sep 25, 2024
03398dd
lots of ios querks and ui fixes
Sep 26, 2024
80cb200
machines
manuelsc Sep 27, 2024
0ccc814
machines and beta preparations
manuelsc Sep 30, 2024
c162258
ios machine fixes
Sep 30, 2024
76db9d8
ios merchant fixes
Oct 1, 2024
4c27d69
less blatant letter-spacing
manuelsc Oct 1, 2024
f3f935f
fix v2 migration and added noImplicitThis rule to catch this sooner
manuelsc Oct 1, 2024
f89c3e4
fix api reload bug
manuelsc Oct 1, 2024
c21eb5d
fix ios dashboard label offset to the right
Oct 1, 2024
6c80540
better group ux, better legacy dashboard ux, bugfixes
manuelsc Oct 2, 2024
0f902af
fix ios popover width
Oct 2, 2024
c8b0c85
ion search ui
manuelsc Oct 2, 2024
59b6266
formatting
manuelsc Oct 2, 2024
d5f3a8b
ionic++
manuelsc Oct 3, 2024
4d9a9a1
loading component
manuelsc Oct 3, 2024
5aa6034
create new group bugfixes, fix loading, fix select marker being to la…
manuelsc Oct 3, 2024
07338b7
fixes for ota updater
manuelsc Oct 3, 2024
00fb0bb
remove beta update channel, fix bugs associated with last dashboard r…
manuelsc Oct 7, 2024
4f8a086
all groups related fixed, popover fixes, show current selected timeframe
manuelsc Oct 7, 2024
538c691
android widget wordings
manuelsc Oct 8, 2024
1d1d43d
ios widget update, app updater check native version, popover bugfixes
Oct 8, 2024
84e5fad
bulk add by index for free
Oct 8, 2024
499385d
ios++
Oct 8, 2024
5a1a979
update widget, add mainnet
manuelsc Oct 15, 2024
d188dcc
ios++
Oct 15, 2024
4a18453
widget update
manuelsc Oct 16, 2024
99b16ed
widget update ios
Oct 16, 2024
bc2d0cb
remove sync committee tooltip details
manuelsc Oct 23, 2024
f5a1c52
BEDS-884: fix nasty empty screen bug
manuelsc Oct 28, 2024
57108f8
clear notification token on logout
manuelsc Oct 28, 2024
83402aa
fix theme utils sometimes not applying status color change (validator…
manuelsc Oct 28, 2024
afd6d5a
client updates
manuelsc Oct 28, 2024
9ce8088
use v1 block details for now
manuelsc Oct 29, 2024
5069baa
assume seconds for luck average (incoming api change)
manuelsc Oct 29, 2024
84d7e24
notification click details in app
manuelsc Nov 5, 2024
19afe47
notification history, notification click, notification details
manuelsc Nov 13, 2024
5601bd0
fix expression changed after checked, fixed repeated login/logout iss…
manuelsc Nov 13, 2024
2e7694a
minor: remove redundancy
manuelsc Nov 14, 2024
2b93df9
technical debt: clear up structuring a bit
manuelsc Nov 14, 2024
f7b18a4
feat: handle reworked search endpoint responses
manuelsc Dec 9, 2024
307b299
fix: search by index did not have a found via description
manuelsc Dec 10, 2024
4d3ac24
feat: display rocket pool infos in validator list
manuelsc Dec 11, 2024
2cbc413
feat: partial support for group switch on dashboard, finished up rock…
manuelsc Dec 18, 2024
e9da28f
fix: predictable rocket pool ordering
manuelsc Dec 18, 2024
fcced23
feat: gnosis, multi network dashboards
manuelsc Jan 10, 2025
17a4d24
fix: native multi blockchain support
manuelsc Jan 14, 2025
27e846a
feat: slotviz widget, wip slotviz page
manuelsc Jan 17, 2025
048e289
testing groundwork
manuelsc Feb 3, 2025
9f5f4e6
fix: updates pipelines to node 18
manuelsc Feb 3, 2025
e5156a9
fix: prod build pipeline use environment.ts
manuelsc Feb 3, 2025
3a61ab3
misc: prettier format
manuelsc Feb 3, 2025
3e3942f
fix: copy environments instead of renaming
manuelsc Feb 3, 2025
c91ec8a
fix: restore pipelines to their former glory
manuelsc Feb 3, 2025
75f4754
fix: eslint pipeline and update config files
manuelsc Feb 3, 2025
5cff50c
misc: remove package-lock-backup.json
manuelsc Feb 3, 2025
5639b5e
misc: clean slate for testing
manuelsc Feb 4, 2025
31cd841
feat: test pipeline and first mini tests
manuelsc Feb 4, 2025
2aa45e8
fix: sudo make me a sandwich
manuelsc Feb 4, 2025
cc4fa99
fix: sudo give me a break
manuelsc Feb 4, 2025
6170f0c
fix: sudo give me a break
manuelsc Feb 4, 2025
c973918
misc: update widget
manuelsc Feb 5, 2025
f7fbfe2
misc: use vite as bundler
manuelsc Feb 5, 2025
d47782f
feat: vite build & vitest
manuelsc Feb 6, 2025
b3c9447
fix: cordova-purchase build
manuelsc Feb 10, 2025
bdf5959
fix: infinite scroll async fetch bug and unit tests
manuelsc Feb 13, 2025
4e00428
misc: formatting
manuelsc Feb 13, 2025
acb11ee
misc: exclude storage mirror from linter
manuelsc Feb 13, 2025
9ebf920
misc: import aliases
manuelsc Feb 13, 2025
4681b6a
feat: dashboard utils tests and fixing IDE issues around tests
manuelsc Feb 17, 2025
4b5ff78
slot viz and some bug fixes
manuelsc Feb 26, 2025
007f3d3
slotviz
manuelsc Feb 26, 2025
20a2306
version
manuelsc Feb 26, 2025
31825cd
feat: slot viz polishing
manuelsc Mar 11, 2025
91d0668
misc: formatting
manuelsc Mar 11, 2025
121473d
fix: unit tests
manuelsc Mar 12, 2025
145a916
set up appium and add a few tests for the app
tanya-bitfly Mar 17, 2025
0117597
removed blank space
tanya-bitfly Mar 17, 2025
aca3aa8
Merge pull request #317 from gobitfly/appium-test-setup
manuelsc Mar 17, 2025
620dc0e
misc: remove docgen
manuelsc Mar 17, 2025
16a2286
fix: storage mirror ignore mocha
manuelsc Mar 17, 2025
82e7038
fix: readme store banners
manuelsc Mar 18, 2025
b982c59
fix: readme store banners
manuelsc Mar 18, 2025
a8b9319
remove: custom theme perk from subscription page
manuelsc Mar 24, 2025
860d4cc
misc: bitfly gmbh -> bitfly explorer gmbh
manuelsc Mar 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
13 changes: 8 additions & 5 deletions .browserslistrc
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.

# For additional information regarding the format and rule options, please see:

# https://github.com/browserslist/browserslist#queries

# For the full list of supported browsers by the Angular framework, please see:

# https://angular.io/guide/browser-support

# You can see what browsers were selected by your queries by running:
# npx browserslist

> 0.5%
last 2 versions
Firefox ESR
# npx browserslist

last 2 ChromeAndroid versions
last 2 iOS versions
last 2 Samsung versions
not dead
not IE 9-11 # For IE 9-11 support, remove 'not'.
4 changes: 0 additions & 4 deletions .eslintignore

This file was deleted.

29 changes: 0 additions & 29 deletions .eslintrc

This file was deleted.

Binary file added .github/assets/android.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added .github/assets/ios.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
51 changes: 40 additions & 11 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,54 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x]
node-version: [22.x]
steps:

- name: Check out code
uses: actions/checkout@v3

- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}

- name: Dependency install
cache: 'npm' # Enables automatic npm caching

- name: Restore npm Cache
uses: actions/cache@v3
with:
path: ~/.npm
key: npm-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
npm-${{ runner.os }}-

- name: Install Dependencies
run: |
npm install @ionic/cli@6.20.4 native-run@1.3.0
npm install

npm ci
npm install @ionic/cli@6.20.4 native-run@1.3.0

- name: Cache Build Artifacts (optional)
uses: actions/cache@v3
with:
path: |
storage-mirror/node_modules
node_modules
key: build-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
build-${{ runner.os }}-

- name: Build Storage Mirror
run: |
cd storage-mirror
npm ci
npm run build

- name: Copy environment.ts to environment.prod.ts
run: |
cp src/environments/environment.ts src/environments/environment.prod.ts

- name: Build
run: |
./node_modules/@ionic/cli/bin/ionic build --prod --release

#- name: Test
# run: ./node_modules/@angular/cli/bin/ng test
npx ionic build --prod --release

- name: Run Vitest
run: |
npx vitest --coverage --run
37 changes: 25 additions & 12 deletions .github/workflows/lint-format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,28 @@ jobs:
name: lint-format
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v3
- name: Setup Node Environment
uses: actions/setup-node@v3
with:
node-version: 16
- name: Install Dependencies
run: npm ci
- name: Check File Format
run: npm run prettier-check
- name: Lint Files
run: npm run lint
- name: Checkout Repository
uses: actions/checkout@v3

- name: Setup Node Environment
uses: actions/setup-node@v3
with:
node-version: 22
cache: 'npm' # Enables caching for npm dependencies

- name: Restore npm Cache
uses: actions/cache@v3
with:
path: ~/.npm
key: npm-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
npm-${{ runner.os }}-

- name: Install Dependencies
run: npm ci

- name: Check File Format
run: npm run prettier-check

- name: Lint Files
run: npm run lint
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,14 @@ Thumbs.db
UserInterfaceState.xcuserstate
$RECYCLE.BIN/
.angular
.env
bundle*.zip

*.log
log.txt
npm-debug.log*

/tmp
/.idea
/.ionic
/.sass-cache
Expand All @@ -30,10 +33,15 @@ npm-debug.log*
/platforms
/plugins
/www
/www-sourcemap
/android/app/src/prod/google-services.json
/android/app/src/beta/google-services.json
/ios/App/GoogleService-Info.plist
/appassets
/local_env/server.*
/android/.idea
android/.idea/jarRepositories.xml
android/.idea/misc.xml
/src/environments/environment.prod.ts
ios/GoogleService-Info.plist
test/user-auth/auth.js
2 changes: 2 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# @analogjs/platform and nx require vite 5 but we use vite 6
legacy-peer-deps=true
81 changes: 49 additions & 32 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
![[beaconchain Dashboard](https://beaconcha.in/mobile)](.github/banner.png)
[![Build](https://github.com/gobitfly/eth2-beaconchain-explorer-app/actions/workflows/build.yaml/badge.svg)](https://github.com/gobitfly/eth2-beaconchain-explorer-app/actions/workflows/build.yaml)
[![Build](https://github.com/gobitfly/eth2-beaconchain-explorer-app/actions/workflows/build.yaml/badge.svg)](https://github.com/gobitfly/eth2-beaconchain-explorer-app/actions/workflows/build.yaml)

# Beaconchain Dashboard App

Beaconchain Dashboard is an open source ethereum and gnosis validator performance tracker app for Android and iOS. It utilizes the beaconcha.in API.
Beaconchain Dashboard is an open source ethereum and gnosis validator performance tracker app for Android and iOS. It utilizes the beaconcha.in API.


[![Get it on Google Play](https://beaconcha.in/img/android.png)](https://play.google.com/store/apps/details?id=in.beaconcha.mobile)
[![Get it App Store](https://beaconcha.in/img/ios.png)](https://apps.apple.com/app/beaconchain-dashboard/id1541822121)
[![Get it on Google Play](.github/assets/android.png)](https://play.google.com/store/apps/details?id=in.beaconcha.mobile)
[![Get it App Store](.github/assets/ios.png)](https://apps.apple.com/app/beaconchain-dashboard/id1541822121)

## About

Expand All @@ -16,50 +15,66 @@ Beaconchain Dashboard is an Angular app written in Typescript, HTML & CSS. It ut
## Features

- Ethereum and Gnosis supported
- Keep track on your validators online status, balances, returns and more
- Various notification alerts for your validators
- Keep track on your validators online status, balances, returns and more
- Various notification alerts for your validators
- Execution block rewards overview
- Machine monitoring (CPU usage, network usage and more)
- Rocketpool support
- Rocket Pool support
- Customize stake share if you only partially own a validator
- Combined dashboard view
- Support for up to 280 validators
- Ethereum client update notifications
- Network warnings
- Support for multiple currencies
- Mainnet & Testnet support
- Light Theme & Dark Theme
- Combined dashboard view
- Support for up to 280 validators
- Ethereum client update notifications
- Network warnings
- Support for multiple currencies
- Mainnet & Testnet support
- Light Theme & Dark Theme

## Device support

- Android 5.1 or newer
- iOS 13 or newer

## Development

### Prerequisites

You will need the following installed on your system for local development:

1. **Docker** (for Docker Compose)
2. **OpenSSL** (to generate SSL certificates for local testing)
3. **NodeJS 22**

### Getting started

1. Clone repo
2. Install dependencies

```
npm install -g @ionic/cli native-run cordova-res
cd storage-mirror
npm i
cd ..
npm i
npm run generate-cert
```
NOTE: You need to provide your own google-services.json for Android and GoogleService-Info.plist for iOS.

NOTE: You need to provide your own google-services.json for Android and GoogleService-Info.plist for iOS.

### Browser

To run the app in your browser, simply use

`npm run-script serve`
`npm run dev`

to start a local webserver with livereload enabled.

### Android

**Prerequisites**
* NodeJS 16
* Install [Android Studio](https://developer.android.com/studio#downloads]) (2022.2.1 or newer)
* Use Android Studio to install the Android SDK: https://capacitorjs.com/docs/android

- NodeJS 22
- Install [Android Studio](https://developer.android.com/studio#downloads]) (2022.2.1 or newer)
- Use Android Studio to install the Android SDK: https://capacitorjs.com/docs/android

For Linux Users: Open capacitor.config.json (in the root of the project) and adapt the paths for the _linuxAndroidStudioPath_ variable to reflect your local setup.

Expand All @@ -73,23 +88,25 @@ Make sure port 8100 is accessible on your computer and use the following command

`ionic cap run android --livereload --external --host=192.168.1.64 --disableHostCheck --configuration=development`

Adapt the --host param to match your computers IP.
Adapt the --host param to match your computers IP.

#### Build for production

`npm run-script build-android-for-production`
`npm run build-android`

#### Install via Android Studio

To install the app on a real device, follow this guide: https://developer.android.com/studio/run/device

Or to run it in an emulator, follow up here: https://developer.android.com/studio/run/emulator


### iOS

**Prerequisites**
* NodeJS 16
* macOS with macOS Monterey 12.5 newer
* Xcode 14.1 or newer

- NodeJS 22
- macOS with macOS Monterey 12.5 newer
- Xcode 14.1 or newer

Build the the app at least once before proceeding:

Expand All @@ -101,17 +118,17 @@ Make sure port 8100 is accessible on your mac and use the following command to r

`ionic cap run ios --livereload --external --host=192.168.1.64 --disableHostCheck --configuration=development`

Adapt the --host param to match your macs IP.
Adapt the --host param to match your macs IP.

#### Build for production

`npm run-script build-ios-for-production`
`npm run build-ios`

### Best Practices

* Use components when we need it for multiple pages.
* Use pipes for currency conversion or interpreting a value
* Keep in mind that the app can be used in light and dark theme, use css vars when styling. Global theme attributes can be found in src/app/theme/variables.scss and src/app/global.scss.
- Use components when we need it for multiple pages.
- Use pipes for currency conversion or interpreting a value
- Keep in mind that the app can be used in light and dark theme, use css vars when styling. Global theme attributes can be found in src/app/theme/variables.scss and src/app/global.scss.

## License

Expand Down
4 changes: 2 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ android {
namespace "in.beaconcha.mobile"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 114
versionName "4.5.12"
versionCode 123
versionName "5.0.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
Expand Down
5 changes: 4 additions & 1 deletion android/app/capacitor.build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,11 @@ dependencies {
implementation project(':capacitor-splash-screen')
implementation project(':capacitor-status-bar')
implementation project(':capacitor-toast')
implementation project(':capawesome-capacitor-app-update')
implementation project(':capgo-capacitor-updater')
implementation project(':capacitor-navigationbarnx')
implementation "com.android.billingclient:billing:7.0.0"
implementation project(':storage-mirror')
implementation "com.android.billingclient:billing:7.1.1"
}


Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
/*
* // Copyright (C) 2020 - 2021 Bitfly GmbH
* // Manuel Caspari (manuel@bitfly.at)
* // Copyright (C) 2020 - 2024 bitfly explorer GmbH
* //
* // This file is part of Beaconchain Dashboard.
* //
Expand Down
Loading