An explorer for the DeArrow database as a web application. Inspired by Lartza's SBbrowser.
Public instance available at dearrow.minibomba.pro.
This repository is split into 4 main crates:
- dearrow-parser - definitions of structures in source .csv files, reading & merging those into a single structure per detail
- dearrow-browser-server - the backend, keeps the database loaded in memory, provides data for the backend
- dearrow-browser-api - definitions of API structures
- dearrow-browser-frontend - the frontend, uses Yew, functions as a single page application
and 1 utility crate:
- error_handling - basically the core of anyhow, written from scratch to make errors cloneable
DeArrow Browser can emulate a limited set of SponsorBlockServer endpoints, specifically used by the DeArrow extension, allowing it to be used as an API mirror.
Emulation must be enabled in config.toml
by setting enable_sbserver_emulation
to true
.
Emulated endpoints live under the /sbserver
path. You can use them in the extension by setting the API URL to https://<your dab domain>/sbserver
(https://dearrow.minibomba.pro/sbserver
for the main instance)
Voting/Submission endpoints are not and will not be supported! - support for redirecting these needs to be added in the extension itself, sending votes/submissions to mirrors leaks your private ID.
Supported endpoints:
GET /api/branding
andGET /api/branding/:sha256HashPrefix
randomTime
andvideoDuration
fields appear to be different on videos with segments without video duration info- appears to work on new videos tho
GET /api/userInfo
userID
param (lookup by private id) not supportedvalue(s)
params ignored completely- endpoint will always return
userID
,userName
,vip
,titleSubmissionCount
,thumbnailSubmissionCount
,warnings
,warningReason
anddeArrowWarningReason
fields.
- endpoint will always return
Unsupported endpoints:
POST /api/branding
- will not be supported, needs a solution in the extension
- sending votes/submissions to mirrors leaks your private ID
To run a local development server without docker, you'll need:
- cargo
- trunk (cargo install trunk)
- Grab a copy of the DeArrow database from a mirror of choice. Required files:
thumbnails.csv
thumbnailTimestamps.csv
thumbnailVotes.csv
titles.csv
titleVotes.csv
userNames.csv
vipUsers.csv
sponsorTimes.csv
warnings.csv
- Build the frontend:
trunk build
in thedearrow-browser-frontend
directory to make a one-time buildtrunk watch
in thedearrow-browser-frontend
directory to rebuild every time source files are updated
- Build & start the server
cargo run --bin dearrow-browser-server
in the root project dir, orcargo run
in thedearrow-browser-server
directory- optionally use something like
cargo-watch
to rebuild on source file changes
The main Dockerfile
requires a custom "builder base" image defined in builder_base.Dockerfile
.
This helps cache some layers in the builder stage that are less commonly changed, even when the image prune
command is issued after building.
To build the main image:
- Build the helper "builder base" image and tag it as
dearrow-browser:builder-base
docker build -f builder_base.Dockerfile -t dearrow-browser:builder-base .
- Build the main image
docker build -t dearrow-browser .
- Build the image (see above)
- Create a config.toml file. Static content (frontend) is available at /static in the container.
- Run the container
docker run -h dearrow-browser --name dearrow-browser -v <path to mirror>:/mirror -v <path to config.toml>:/config.toml:ro -p 9292 dearrow-browser
If you've got a proper mirror set up (instead of manually sourced .csv files), make it make a POST request to /api/reload
with the auth secret as the auth
URL parameter to reload the database.
DeArrow Browser should remain usable while the database is reloaded. (assuming we don't run out of RAM)
The API provided by dearrow-browser-server
and used by dearrow-browser-frontend
is considered to be internal.
While API structures are publicly defined in the dearrow-browser-api
crate (which can be used in other projects), breaking changes may be made to the API at any time with no backwards compatibility and without a major version number change.
The dearrow-browser-api
crate provides sync
(threadsafe, Arc<>
based), unsync
(not threadsafe, Rc<>
based), boxed
(Box<>
based) and string
(String
based) implementations of the API structures.
These implementations can be enabled or disabled using respective features and are available in separate modules.
The sync
implementation is enabled by default.
Any errors from the API will be returned as human-readable plaintext unless the client had explicitly requested application/json
as one of the accepted formats.
If a client explicitly requests application/json
by including it in the Accept
request header (*/*
does not count), any errors will be sent as json-encoded SerializableError
from the error_handling
crate.
All endpoints will always return json on success, even if the client requests a different format.
The DeArrow Browser logo is a combination of the DeArrow logo (which is based on Twemoji) and the magnifying glass emoji from Twemoji and is licensed under the CC-BY 4.0 license.
Images located in the /dearrow-browser-frontend/icon/
directory are either based on or directly copied icons from Twemoji and are licensed under the CC-BY 4.0 license.
The DeArrow Browser source code is licensed under the GNU Affero General Public License version 3.
© mini_bomba & contributors 2023-2024