Merge branch 'main' into dependabot/npm_and_yarn/frontend/date-fns-3.0.6
@ -108,7 +108,7 @@ MAX_PUBLIC_ORDERS = 100
|
||||
# Minimum order size (must be bigger than DB constrain in /robosats/settings.py MIN_TRADE, currently 20_000 Sats)
|
||||
MIN_ORDER_SIZE = 20000
|
||||
# Minimum order size (must be smaller than DB constrain in /robosats/settings.py MAX_TRADE, currently 5_000_000 Sats)
|
||||
MAX_ORDER_SIZE = 5000000
|
||||
MAX_ORDER_SIZE = 500000
|
||||
|
||||
# For CLTV_expiry calculation
|
||||
# Assume 8 min/block assumed
|
||||
|
28
.github/workflows/frontend-build.yml
vendored
@ -53,22 +53,30 @@ jobs:
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: web-main-js
|
||||
path: frontend/static/frontend/main.js
|
||||
- name: 'Archive Web Basic SelfhostedBuild Results'
|
||||
path: |
|
||||
frontend/static/frontend/*main.js
|
||||
frontend/static/frontend/*.wasm
|
||||
- name: 'Archive Web Basic Selfhosted Build Results'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: web-basic-selfhosted-js
|
||||
path: frontend/static/frontend/basic.selfhosted.js
|
||||
path: |
|
||||
frontend/static/frontend/*basic.selfhosted.js
|
||||
frontend/static/frontend/*.wasm
|
||||
- name: 'Archive Web PRO Build Results'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: web-pro-js
|
||||
path: frontend/static/frontend/pro.js
|
||||
path: |
|
||||
frontend/static/frontend/*pro.js
|
||||
frontend/static/frontend/*.wasm
|
||||
- name: 'Archive Web PRO SelhostedBuild Results'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: web-pro-selfhosted-js
|
||||
path: frontend/static/frontend/pro.selfhosted.js
|
||||
path: |
|
||||
frontend/static/frontend/*pro.selfhosted.js
|
||||
frontend/static/frontend/*.wasm
|
||||
- name: 'Archive Mobile Build Results'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
@ -83,9 +91,15 @@ jobs:
|
||||
with:
|
||||
workflow: 'Docker: Coordinator'
|
||||
token: ${{ secrets.PERSONAL_TOKEN }}
|
||||
- name: 'Invoke Client App Build CI/CD workflow'
|
||||
- name: 'Invoke Selfhosted Client App Build CI/CD workflow'
|
||||
if: inputs.semver == ''
|
||||
uses: benc-uk/workflow-dispatch@v121
|
||||
with:
|
||||
workflow: 'Docker: Client'
|
||||
workflow: 'Docker: Selfhosted Client'
|
||||
token: ${{ secrets.PERSONAL_TOKEN }}
|
||||
- name: 'Invoke Web Client App Build CI/CD workflow'
|
||||
if: inputs.semver == ''
|
||||
uses: benc-uk/workflow-dispatch@v121
|
||||
with:
|
||||
workflow: 'Docker: Web Client'
|
||||
token: ${{ secrets.PERSONAL_TOKEN }}
|
10
.github/workflows/integration-tests.yml
vendored
@ -20,9 +20,9 @@ jobs:
|
||||
strategy:
|
||||
max-parallel: 2
|
||||
matrix:
|
||||
python-tag: ['3.11.6-slim-bookworm', '3.12-slim-bookworm']
|
||||
lnd-version: ['v0.17.0-beta', 'v0.17.2-beta.rc1']
|
||||
cln-version: ['v23.08.1']
|
||||
python-tag: ['3.11.6-slim-bookworm', '3.12.1-slim-bookworm']
|
||||
lnd-version: ['v0.17.3-beta']
|
||||
cln-version: ['v23.11.2']
|
||||
ln-vendor: ['LND'] #, 'CLN']
|
||||
|
||||
steps:
|
||||
@ -37,7 +37,7 @@ jobs:
|
||||
- uses: satackey/action-docker-layer-caching@v0.0.11
|
||||
continue-on-error: true
|
||||
with:
|
||||
key: coordinator-docker-cache-${{ hashFiles('Dockerfile', 'requirements.txt', 'requirements_dev.txt') }}
|
||||
key: coordinator-docker-cache-${{ hashFiles('Dockerfile', 'requirements.txt', 'requirements_dev.txt') }}-${{ matrix.ln-vendor }}
|
||||
restore-keys: |
|
||||
coordinator-docker-cache-
|
||||
|
||||
@ -79,5 +79,5 @@ jobs:
|
||||
- name: 'Upload coverage report'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: coverage-report-${{ matrix.python-tag }}-${{ matrix.ln-vendor }}
|
||||
name: coverage-report-${{ matrix.python-tag }}-${{ matrix.ln-vendor }}-${{ github.run_id }}
|
||||
path: htmlcov/
|
8
.github/workflows/js-linter.yml
vendored
@ -8,7 +8,7 @@ on:
|
||||
- main
|
||||
paths:
|
||||
- frontend
|
||||
pull_request:
|
||||
pull_request_target:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
@ -41,7 +41,5 @@ jobs:
|
||||
with:
|
||||
prettier: true
|
||||
prettier_dir: frontend
|
||||
|
||||
## Disabled due to error
|
||||
# eslint: true
|
||||
# eslint_dir: frontend
|
||||
eslint: true
|
||||
eslint_dir: frontend
|
15
.github/workflows/py-linter.yml
vendored
@ -26,16 +26,5 @@ jobs:
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: pip
|
||||
- run: pip install -r requirements_dev.txt
|
||||
- name: Run linters
|
||||
uses: wearerequired/lint-action@v2
|
||||
with:
|
||||
auto_fix: true
|
||||
git_name: "Python Lint Action"
|
||||
commit_message: "Fix code style issues with ${linter}"
|
||||
commit: false
|
||||
neutral_check_on_warning: true
|
||||
black: true
|
||||
flake8: true
|
||||
# Flake8 doesn't support auto-fixing
|
||||
flake8_auto_fix: false
|
||||
- name: Ruff
|
||||
uses: chartboost/ruff-action@v1
|
||||
|
11
.github/workflows/release.yml
vendored
@ -55,8 +55,15 @@ jobs:
|
||||
with:
|
||||
semver: ${{ needs.check-versions.outputs.semver }}
|
||||
|
||||
client-image:
|
||||
uses: RoboSats/robosats/.github/workflows/client-image.yml@main
|
||||
selfhosted-client-image:
|
||||
uses: RoboSats/robosats/.github/workflows/selfhosted-client-image.yml@main
|
||||
needs: frontend-build
|
||||
secrets: inherit
|
||||
with:
|
||||
semver: ${{ needs.check-versions.outputs.semver }}
|
||||
|
||||
web-client-image:
|
||||
uses: RoboSats/robosats/.github/workflows/web-client-image.yml@main
|
||||
needs: frontend-build
|
||||
secrets: inherit
|
||||
with:
|
||||
|
@ -1,4 +1,4 @@
|
||||
name: "Docker: Client"
|
||||
name: 'Docker: Selfhosted Client'
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
94
.github/workflows/web-client-image.yml
vendored
Normal file
@ -0,0 +1,94 @@
|
||||
name: 'Docker: Web Client'
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
workflow_call:
|
||||
inputs:
|
||||
semver:
|
||||
required: true
|
||||
type: string
|
||||
push:
|
||||
branches: [ "main" ]
|
||||
paths: ["frontend", "web"]
|
||||
pull_request:
|
||||
branches: [ "main" ]
|
||||
paths: ["frontend", "web"]
|
||||
|
||||
jobs:
|
||||
push_to_registry:
|
||||
name: 'Push Docker image to Docker Hub'
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: 'Copy Static' # Needed since Github actions does not support symlinks
|
||||
run: cp -r frontend/static web/static
|
||||
|
||||
- name: 'Download main.js Artifact'
|
||||
if: inputs.semver == '' # Only if workflow fired from frontend-build.yml
|
||||
uses: dawidd6/action-download-artifact@v3
|
||||
with:
|
||||
workflow: frontend-build.yml
|
||||
workflow_conclusion: success
|
||||
name: web-main-js
|
||||
path: web/static/frontend/
|
||||
|
||||
- name: 'Download main.js Artifact for a release'
|
||||
if: inputs.semver != '' # Only if fired as job in release.yml
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: web-main-js
|
||||
path: web/static/frontend/
|
||||
|
||||
- name: 'Download pro.js Artifact'
|
||||
if: inputs.semver == '' # Only if workflow fired from frontend-build.yml
|
||||
uses: dawidd6/action-download-artifact@v3
|
||||
with:
|
||||
workflow: frontend-build.yml
|
||||
workflow_conclusion: success
|
||||
name: web-pro-js
|
||||
path: web/static/frontend/
|
||||
|
||||
- name: 'Download pro.js Artifact for a release'
|
||||
if: inputs.semver != '' # Only if fired as job in release.yml
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: web-pro-js
|
||||
path: web/static/frontend/
|
||||
|
||||
- name: 'Log in to Docker Hub'
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_USERNAME }}
|
||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
||||
|
||||
- name: 'Extract metadata (tags, labels) for Docker'
|
||||
id: meta
|
||||
uses: docker/metadata-action@v5
|
||||
with:
|
||||
images: recksato/robosats-web
|
||||
tags: |
|
||||
type=ref,event=pr
|
||||
type=ref,event=tag
|
||||
type=semver,pattern={{major}}.{{minor}}
|
||||
type=sha,enable=true,priority=100,prefix=,suffix=,format=short
|
||||
type=raw,value=latest
|
||||
|
||||
- name: 'Get Commit Hash'
|
||||
id: commit
|
||||
uses: pr-mpt/actions-commit-hash@v3
|
||||
|
||||
- name: 'Set up QEMU'
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: 'Set up Docker Buildx'
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: 'Build and push Docker image'
|
||||
uses: docker/build-push-action@v5
|
||||
with:
|
||||
context: ./web
|
||||
platforms: linux/amd64,linux/arm64
|
||||
push: true
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
@ -1,6 +1,3 @@
|
||||
# TODO
|
||||
# add a hook which automatically generates the OpenApi schema on API changes
|
||||
# and places them in an appropriate location
|
||||
exclude: '(api|chat|control)/migrations/.*'
|
||||
repos:
|
||||
- repo: 'https://github.com/pre-commit/pre-commit-hooks'
|
||||
@ -50,27 +47,20 @@ repos:
|
||||
files: ^mobile/
|
||||
types_or: [javascript, jsx, ts, tsx, css, markdown, json] # uses https://github.com/pre-commit/identify
|
||||
entry: bash -c 'cd mobile && npm run format'
|
||||
- id: isort
|
||||
name: isort
|
||||
stages:
|
||||
- commit
|
||||
- merge-commit
|
||||
language: system
|
||||
types: [python]
|
||||
entry: isort
|
||||
- id: black
|
||||
name: black
|
||||
stages:
|
||||
- commit
|
||||
- merge-commit
|
||||
language: system
|
||||
types: [python]
|
||||
entry: black
|
||||
- id: flake8
|
||||
name: flake8
|
||||
stages:
|
||||
- commit
|
||||
- merge-commit
|
||||
language: system
|
||||
types: [python]
|
||||
entry: flake8
|
||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||
rev: v0.1.13
|
||||
hooks:
|
||||
- id: ruff
|
||||
stages:
|
||||
- commit
|
||||
- merge-commit
|
||||
language: system
|
||||
args: [ --fix ]
|
||||
types: [python]
|
||||
- id: ruff-format
|
||||
stages:
|
||||
- commit
|
||||
- merge-commit
|
||||
language: system
|
||||
types: [python]
|
||||
|
||||
|
@ -9,7 +9,7 @@ from django.utils import timezone
|
||||
from api.lightning.node import LNNode
|
||||
from api.models import Currency, LNPayment, MarketTick, OnchainPayment, Order
|
||||
from api.tasks import send_devfund_donation, send_notification
|
||||
from api.utils import validate_onchain_address
|
||||
from api.utils import get_minning_fee, validate_onchain_address
|
||||
from chat.models import Message
|
||||
|
||||
FEE = float(config("FEE"))
|
||||
@ -19,7 +19,7 @@ ESCROW_USERNAME = config("ESCROW_USERNAME")
|
||||
PENALTY_TIMEOUT = int(config("PENALTY_TIMEOUT"))
|
||||
|
||||
MIN_ORDER_SIZE = config("MIN_ORDER_SIZE", cast=int, default=20_000)
|
||||
MAX_ORDER_SIZE = config("MAX_ORDER_SIZE", cast=int, default=5_000_000)
|
||||
MAX_ORDER_SIZE = config("MAX_ORDER_SIZE", cast=int, default=500_000)
|
||||
|
||||
EXP_MAKER_BOND_INVOICE = int(config("EXP_MAKER_BOND_INVOICE"))
|
||||
EXP_TAKER_BOND_INVOICE = int(config("EXP_TAKER_BOND_INVOICE"))
|
||||
@ -640,10 +640,7 @@ class Logics:
|
||||
): # Not enough onchain balance to commit for this swap.
|
||||
return False
|
||||
|
||||
suggested_mining_fee_rate = LNNode.estimate_fee(
|
||||
amount_sats=preliminary_amount,
|
||||
target_conf=config("SUGGESTED_TARGET_CONF", cast=int, default=2),
|
||||
)["mining_fee_rate"]
|
||||
suggested_mining_fee_rate = get_minning_fee("suggested", preliminary_amount)
|
||||
|
||||
# Hardcap mining fee suggested at 1000 sats/vbyte
|
||||
if suggested_mining_fee_rate > 1000:
|
||||
@ -795,10 +792,7 @@ class Logics:
|
||||
num_satoshis = cls.payout_amount(order, user)[1]["invoice_amount"]
|
||||
if mining_fee_rate:
|
||||
# not a valid mining fee
|
||||
min_mining_fee_rate = LNNode.estimate_fee(
|
||||
amount_sats=num_satoshis,
|
||||
target_conf=config("MINIMUM_TARGET_CONF", cast=int, default=24),
|
||||
)["mining_fee_rate"]
|
||||
min_mining_fee_rate = get_minning_fee("minimum", num_satoshis)
|
||||
|
||||
min_mining_fee_rate = max(2, min_mining_fee_rate)
|
||||
|
||||
|
@ -11,7 +11,6 @@ from api.utils import get_session
|
||||
|
||||
|
||||
class Command(BaseCommand):
|
||||
|
||||
help = "Polls telegram /getUpdates method"
|
||||
rest = 3 # seconds between consecutive polls
|
||||
|
||||
|
@ -6,7 +6,6 @@ from django.utils import timezone
|
||||
|
||||
|
||||
class Currency(models.Model):
|
||||
|
||||
with open("frontend/static/assets/currencies.json") as f:
|
||||
currency_dict = json.load(f)
|
||||
currency_choices = [(int(val), label) for val, label in list(currency_dict.items())]
|
||||
|
10
api/tasks.py
@ -98,15 +98,9 @@ def send_devfund_donation(order_id, proceeds, reason):
|
||||
|
||||
from api.lightning.node import LNNode
|
||||
from api.models import LNPayment, Order
|
||||
from api.utils import get_devfund_pubkey
|
||||
|
||||
if config("NETWORK", cast=str) == "testnet":
|
||||
target_pubkey = (
|
||||
"03ecb271b3e2e36f2b91c92c65bab665e5165f8cdfdada1b5f46cfdd3248c87fd6"
|
||||
)
|
||||
else:
|
||||
target_pubkey = (
|
||||
"02187352cc4b1856b9604e0a79e1bc9b301be7e0c14acbbb8c29f7051d507127d7"
|
||||
)
|
||||
target_pubkey = get_devfund_pubkey(config("NETWORK", cast=str))
|
||||
|
||||
order = Order.objects.get(id=order_id)
|
||||
coordinator_alias = config("COORDINATOR_ALIAS", cast=str, default="NoAlias")
|
||||
|
91
api/utils.py
@ -70,6 +70,94 @@ def validate_onchain_address(address):
|
||||
return True, None
|
||||
|
||||
|
||||
mining_fee = {}
|
||||
|
||||
|
||||
@ring.dict(mining_fee, expire=60) # keeps in cache for 60 seconds
|
||||
def get_minning_fee(priority: str, preliminary_amount: int) -> int:
|
||||
"""
|
||||
priority: (str) 'suggested' | 'minimum'
|
||||
Fetches suggested and minimum mining fee rates from mempool.space
|
||||
uses LND/CLN fee estimator as fallback.
|
||||
|
||||
mempool.space response object:
|
||||
{
|
||||
fastestFee: 1,
|
||||
halfHourFee: 1,
|
||||
hourFee: 1,
|
||||
economyFee: 1,
|
||||
minimumFee: 1
|
||||
}
|
||||
Where 'suggested' is 'fastestFee' and 'minimum' is 'economyFee'
|
||||
"""
|
||||
|
||||
from api.lightning.node import LNNode
|
||||
|
||||
session = get_session()
|
||||
mempool_url = "https://mempool.space"
|
||||
api_path = "/api/v1/fees/recommended"
|
||||
|
||||
try:
|
||||
response = session.get(mempool_url + api_path)
|
||||
response.raise_for_status() # Raises stored HTTPError, if one occurred
|
||||
data = response.json()
|
||||
|
||||
if priority == "suggested":
|
||||
value = data.get("fastestFee")
|
||||
elif priority == "minimum":
|
||||
value = data.get("economyFee")
|
||||
else:
|
||||
raise Exception(
|
||||
"an error occurred",
|
||||
"unexpected value for mining fee priority",
|
||||
priority,
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
print(e)
|
||||
# Fetch mining fee from LND/CLN instance
|
||||
if priority == "suggested":
|
||||
target_conf = config("SUGGESTED_TARGET_CONF", cast=int, default=2)
|
||||
if priority == "minimum":
|
||||
target_conf = config("MINIMUM_TARGET_CONF", cast=int, default=24)
|
||||
|
||||
value = LNNode.estimate_fee(
|
||||
amount_sats=preliminary_amount,
|
||||
target_conf=target_conf,
|
||||
)["mining_fee_rate"]
|
||||
|
||||
return value
|
||||
|
||||
|
||||
devfund_pubkey = {}
|
||||
|
||||
|
||||
@ring.dict(devfund_pubkey, expire=3600) # keeps in cache for 3600 seconds
|
||||
def get_devfund_pubkey(network: str) -> str:
|
||||
"""
|
||||
network: (str) "mainnet" | "testnet";
|
||||
Fetches devfund pubkey from `main` branch in the repository
|
||||
fallback to hardcoded pubkey
|
||||
"""
|
||||
|
||||
session = get_session()
|
||||
url = "https://raw.githubusercontent.com/RoboSats/robosats/main/devfund_pubey.json"
|
||||
|
||||
try:
|
||||
response = session.get(url)
|
||||
response.raise_for_status() # Raises stored HTTPError, if one occurred
|
||||
value = response.json().get(network)
|
||||
if len(value) != 66:
|
||||
raise Exception()
|
||||
except Exception as e:
|
||||
print(e)
|
||||
with open("devfund_pubkey.json", "r") as f:
|
||||
data = json.load(f)
|
||||
value = data.get(network)
|
||||
|
||||
return value
|
||||
|
||||
|
||||
market_cache = {}
|
||||
|
||||
|
||||
@ -100,7 +188,8 @@ def get_exchange_rates(currencies):
|
||||
blockchain_rates.append(
|
||||
float(blockchain_prices[currency]["last"])
|
||||
)
|
||||
except Exception:
|
||||
except Exception as e:
|
||||
print(e)
|
||||
blockchain_rates.append(np.nan)
|
||||
api_rates.append(blockchain_rates)
|
||||
|
||||
|
@ -913,7 +913,7 @@ class LimitView(ListAPIView):
|
||||
def get(self, request):
|
||||
# Trade limits as BTC
|
||||
min_trade = config("MIN_ORDER_SIZE", cast=int, default=20_000) / 100_000_000
|
||||
max_trade = config("MAX_ORDER_SIZE", cast=int, default=5_000_000) / 100_000_000
|
||||
max_trade = config("MAX_ORDER_SIZE", cast=int, default=500_000) / 100_000_000
|
||||
|
||||
payload = {}
|
||||
queryset = Currency.objects.all().order_by("currency")
|
||||
|
@ -8,7 +8,6 @@ from control.models import AccountingDay, BalanceLog
|
||||
|
||||
@admin.register(AccountingDay)
|
||||
class AccountingDayAdmin(ImportExportModelAdmin):
|
||||
|
||||
list_display = (
|
||||
"day",
|
||||
"contracted",
|
||||
@ -34,7 +33,6 @@ class AccountingDayAdmin(ImportExportModelAdmin):
|
||||
|
||||
@admin.register(BalanceLog)
|
||||
class BalanceLogAdmin(ImportExportModelAdmin):
|
||||
|
||||
list_display = (
|
||||
"time",
|
||||
"total",
|
||||
|
4
devfund_pubkey.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"mainnet": "02187352cc4b1856b9604e0a79e1bc9b301be7e0c14acbbb8c29f7051d507127d7",
|
||||
"testnet": "03ecb271b3e2e36f2b91c92c65bab665e5165f8cdfdada1b5f46cfdd3248c87fd6"
|
||||
}
|
@ -30,11 +30,11 @@ masthead_title : # overrides the website title displayed in the masthe
|
||||
# breadcrumbs : false # true, false (default)
|
||||
words_per_minute :
|
||||
robosats:
|
||||
node_id : 02187352cc4b1856b9604e0a79e1bc9b301be7e0c14acbbb8c29f7051d507127d7
|
||||
node_id : 0282eb467bc073833a039940392592bf10cf338a830ba4e392c1667d7697654c7e
|
||||
maker_fee : 0.025 # In percent (%)
|
||||
taker_fee : 0.175 # In percent (%)
|
||||
total_fee : 0.2 # In percent (%)
|
||||
max_trade_limit : "5,000,000" # In Satoshis
|
||||
max_trade_limit : "4,000,000" # In Satoshis
|
||||
min_trade_limit : "20,000" # In Satoshis
|
||||
hours_public_default : 24 # In hours
|
||||
hours_fiat_exchange : 24 # In hours
|
||||
@ -128,9 +128,6 @@ author:
|
||||
- label: "Twitter"
|
||||
icon: "fab fa-fw fa-twitter-square"
|
||||
url: "https://twitter.com/recksato"
|
||||
- label: "Telegram"
|
||||
icon: "fa-brands fa-telegram"
|
||||
url: "https://t.me/Reckless_Satoshi"
|
||||
- label: "GitHub"
|
||||
icon: "fab fa-fw fa-github"
|
||||
url: "https://github.com/RoboSats"
|
||||
|
@ -6,24 +6,28 @@ date: 2023-12-31 01:01:01 -0500
|
||||
categories: robosats update
|
||||
---
|
||||
|
||||
**Note** Note this is a very early release, so expect to find bugs! If you find a bug that is stopping you from continuing your order, recover your robot in a v0.5.3 client and continue as usual.
|
||||
**Note** this is a very early release, so expect to find bugs! If you find a bug that is stopping you from continuing your order, recover your robot in the v0.5.3 client of your coordinator and continue the trade as usual. We keep a [list of known bugs here](https://github.com/RoboSats/robosats/issues/1069), please report if you find a new one :D
|
||||
{: .notice--primary}
|
||||
|
||||
We are thrilled to announce the launch for testing the new version of RoboSats v0.6.0. This is the biggest ever upgrade to RoboSats. We have, figuratively, lifted the house and built a basement below it :)
|
||||
We are thrilled to announce the launch for testing of the new version of RoboSats v0.6.0. This is the biggest ever upgrade to RoboSats. We have, figuratively, lifted the house and built a basement below it :)
|
||||
|
||||
This new version introduces a significant enhancement known as the **RoboSats Federation**, that effectively fully decentralizes RoboSats into many independent and fully redundant coordinators that will compete to host your orders.
|
||||
|
||||
**Caution, READ!** Prior to hosting your order with a new coordinator, ensure you trust the RoboSats coordinator you select. A malicious p2p coordinator can potentially steal from you!
|
||||
{: .notice--secondary}
|
||||
|
||||
## How to test the pre-release?
|
||||
The new federated client will now be permanently available in http://robodexarjwtfryec556cjdz3dfa7u47saek6lkftnkgshvgg2kcumqd.onion
|
||||
(visit with Tor Browser) and http://dex.robosats.com (with extremely limited functionality). Once stable, it will be released as version v0.6.0 and you will be able to install it as usual on your node (e.g., [Umbrel](https://apps.umbrel.com/app/robosats), [StartOS](https://github.com/RoboSats/robosats-startos/releases), etc).
|
||||
|
||||
## What is RoboSats Federation?
|
||||
|
||||
The RoboSats Federation is a set of rules that allows multiple RoboSats instances to work together under a unified client app. This federated client app enables users to seamlessly interact with any coordinator, track the coordinator reputation, verify transparently devFund donations, and more. The aim is to improve RoboSats robustness while keeping complexity down and providing robots a experience as close as possible to the app they are used to.
|
||||
The RoboSats Federation is a set of rules that allows multiple RoboSats instances to work together under a unified client app. This federated client app enables users to seamlessly interact with any coordinator, track the coordinator reputation, verify transparently devFund donations, and more. The aim is to improve RoboSats robustness while keeping complexity down for the user, providing robots a experience as close as possible to the app they are used to.
|
||||
|
||||
## Key Features of the New Version
|
||||
### Multiple Coordinators
|
||||
|
||||
With the new version, RoboSats introduces the concept of coordinators or hosts. Coordinators will now compete to provide users with the best fees, support, uptime and reliability and overall user experience. Lightning node runners can become RoboSats coordinator in the federation, given they gain the trust of the users. The coordinators host the full infrastructure needed for the p2p trades, they route the lightning payments, they solve the disputes, and much more. Therefore **is important to pick always a coordinator you trust** when creating or taking a RoboSats order, given that, there are ways a coordinator could potentially steal from you (this is true for any p2p platform, not only RoboSats, regardless of escrow system, coordinators must always be trusted).
|
||||
With the new version, RoboSats introduces the concept of coordinators or hosts. Coordinators will now compete to provide users with the best fees, support, uptime and reliability and overall user experience. Lightning node runners can become RoboSats coordinator in the federation, given they gain the trust of the users. The coordinators host the full infrastructure needed for the p2p trades, they route the lightning payments, they solve the disputes, and much more. Therefore **is important to pick always a coordinator you trust** when creating or taking a RoboSats order, given that, there are ways a coordinator could potentially steal from you (this is true for any p2p btc/fiat on-off ramp, not only RoboSats, regardless of escrow system, coordinators must always be trusted).
|
||||
|
||||
If you operate a lightning node and are interested in becoming a coordinator yourself, refer to the [RoboSats Federation basis](https://github.com/RoboSats/robosats/blob/main/federation.md)
|
||||
|
||||
@ -45,14 +49,14 @@ There is currently 4 registered coordinators:
|
||||
- [Satstralia](https://satstralia.com)
|
||||
- TheBigLake
|
||||
|
||||
If you want to help testing the new client without experimenting with novel coordinators you should pick the "Experimental" coordinator. Experimental is the same infrastructure you have been using so far in the non-decentralized client.
|
||||
If you want to help testing the new client without experimenting with novel coordinators you should pick the "Experimental" coordinator. Experimental is the same coordinator infrastructure you have been using so far in the non-decentralized client.
|
||||
|
||||
**They are also learning,** just like you. The RoboSats federation is new for everyone, so keep in mind some coordinators do not yet have much experience hosting trades. It is a learning experience for everyone.
|
||||
{: .notice--primary}
|
||||
|
||||
### DevFund Revenue
|
||||
|
||||
One of the challenges with decentralized instances is the detachment of operations and code development. Maintaining and implementing new features into the codebase is only be supported by donations. The RoboSats Federation addresses this issue by allowing coordinators to voluntarily stream Sats to the RoboSats Development fund, ensuring continued development and maintenance. Coordinators can freely opt to not donate Sats for development. Coordinators that donate part of their revenue for development have some advantages such as, their orders are better positioned in the Order book and better support from the developers in case help is needed.
|
||||
Maintaining and implementing new features into the codebase is only supported by donations. The RoboSats Federation addresses this issue by allowing coordinators to voluntarily stream Sats to the RoboSats Development fund, ensuring continued development and maintenance. Coordinators can freely opt to not donate Sats for development. Coordinators that donate part of their revenue for development have some advantages such as, their orders are better positioned in the Order book and better support from the developers in case help is needed.
|
||||
|
||||
### Other improvements
|
||||
|
||||
@ -62,6 +66,6 @@ Many other small improvements come in v0.6.0. For example, your Robot identity i
|
||||
|
||||
Please note trust in a coordinator is paramount, a malicious or rogue p2p coordinators can always find ways to steal from the users. Always exercise caution and make sure to understand the potential risks before engaging with any coordinator. Research them by: exploring their coordinator profile in the RoboSats app, reading about them in their website and social media, asking other users about their experience, etc.
|
||||
|
||||
## Acknoledgements
|
||||
## Acknowledgements
|
||||
|
||||
The big push needed to get the Federation Client working would not have been possible without the contributions of KoalaSat and Reckless-Satoshi.
|
418
frontend/package-lock.json
generated
@ -19,7 +19,7 @@
|
||||
"@mui/material": "^5.15.3",
|
||||
"@mui/system": "^5.15.3",
|
||||
"@mui/x-data-grid": "^6.17.0",
|
||||
"@mui/x-date-pickers": "^6.17.0",
|
||||
"@mui/x-date-pickers": "^6.19.0",
|
||||
"@nivo/core": "^0.84.0",
|
||||
"@nivo/line": "^0.84.0",
|
||||
"base-ex": "^0.8.1",
|
||||
@ -33,7 +33,7 @@
|
||||
"js-sha256": "^0.10.1",
|
||||
"leaflet": "^1.9.4",
|
||||
"light-bolt11-decoder": "^3.0.0",
|
||||
"npm": "^10.2.5",
|
||||
"npm": "^10.3.0",
|
||||
"openpgp": "^5.11.0",
|
||||
"react": "^18.2.0",
|
||||
"react-countdown": "^2.3.5",
|
||||
@ -43,7 +43,7 @@
|
||||
"react-image": "^4.1.0",
|
||||
"react-leaflet": "^4.2.1",
|
||||
"react-qr-code": "^2.0.11",
|
||||
"react-router-dom": "^6.21.1",
|
||||
"react-router-dom": "^6.21.2",
|
||||
"react-smooth-image": "^1.1.0",
|
||||
"react-world-flags": "^1.6.0",
|
||||
"reconnecting-websocket": "^4.4.0",
|
||||
@ -66,19 +66,19 @@
|
||||
"@typescript-eslint/eslint-plugin": "^5.35.1",
|
||||
"@typescript-eslint/parser": "^5.35.1",
|
||||
"babel-loader": "^9.1.3",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"copy-webpack-plugin": "^12.0.2",
|
||||
"eslint": "^8.45.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-config-standard-with-typescript": "^36.1.0",
|
||||
"eslint-import-resolver-typescript": "^3.6.0",
|
||||
"eslint-plugin-import": "^2.27.5",
|
||||
"eslint-plugin-n": "^16.6.1",
|
||||
"eslint-plugin-prettier": "^5.1.2",
|
||||
"eslint-plugin-n": "^16.6.2",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-react": "^7.32.2",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"jest": "^29.6.1",
|
||||
"prettier": "^3.1.1",
|
||||
"prettier": "^3.2.4",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.3.3",
|
||||
"webpack": "^5.89.0",
|
||||
@ -1879,9 +1879,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@babel/runtime": {
|
||||
"version": "7.23.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.6.tgz",
|
||||
"integrity": "sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==",
|
||||
"version": "7.23.8",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.8.tgz",
|
||||
"integrity": "sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==",
|
||||
"dependencies": {
|
||||
"regenerator-runtime": "^0.14.0"
|
||||
},
|
||||
@ -2206,28 +2206,28 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/core": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz",
|
||||
"integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==",
|
||||
"version": "1.5.3",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.3.tgz",
|
||||
"integrity": "sha512-O0WKDOo0yhJuugCx6trZQj5jVJ9yR0ystG2JaNAemYUWce+pmM6WUEFIibnWyEJKdrDxhm75NoSRME35FNaM/Q==",
|
||||
"dependencies": {
|
||||
"@floating-ui/utils": "^0.1.3"
|
||||
"@floating-ui/utils": "^0.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/dom": {
|
||||
"version": "1.5.3",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz",
|
||||
"integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==",
|
||||
"version": "1.5.4",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.4.tgz",
|
||||
"integrity": "sha512-jByEsHIY+eEdCjnTVu+E3ephzTOzkQ8hgUfGwos+bg7NlH33Zc5uO+QHz1mrQUOgIKKDD1RtS201P9NvAfq3XQ==",
|
||||
"dependencies": {
|
||||
"@floating-ui/core": "^1.4.2",
|
||||
"@floating-ui/utils": "^0.1.3"
|
||||
"@floating-ui/core": "^1.5.3",
|
||||
"@floating-ui/utils": "^0.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/react-dom": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz",
|
||||
"integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==",
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.6.tgz",
|
||||
"integrity": "sha512-IB8aCRFxr8nFkdYZgH+Otd9EVQPJoynxeFRGTB8voPoZMRWo8XjYuCRgpI1btvuKY69XMiLnW+ym7zoBHM90Rw==",
|
||||
"dependencies": {
|
||||
"@floating-ui/dom": "^1.5.1"
|
||||
"@floating-ui/dom": "^1.5.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">=16.8.0",
|
||||
@ -2235,9 +2235,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@floating-ui/utils": {
|
||||
"version": "0.1.6",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz",
|
||||
"integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
|
||||
"version": "0.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz",
|
||||
"integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q=="
|
||||
},
|
||||
"node_modules/@humanwhocodes/config-array": {
|
||||
"version": "0.11.10",
|
||||
@ -3367,9 +3367,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/types": {
|
||||
"version": "7.2.12",
|
||||
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.12.tgz",
|
||||
"integrity": "sha512-3kaHiNm9khCAo0pVe0RenketDSFoZGAlVZ4zDjB/QNZV0XiCj+sh1zkX0VVhQPgYJDlBEzAag+MHJ1tU3vf0Zw==",
|
||||
"version": "7.2.13",
|
||||
"resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.13.tgz",
|
||||
"integrity": "sha512-qP9OgacN62s+l8rdDhSFRe05HWtLLJ5TGclC9I1+tQngbssu0m2dmFZs+Px53AcOs9fD7TbYd4gc9AXzVqO/+g==",
|
||||
"peerDependencies": {
|
||||
"@types/react": "^17.0.0 || ^18.0.0"
|
||||
},
|
||||
@ -3380,11 +3380,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/utils": {
|
||||
"version": "5.15.3",
|
||||
"resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.3.tgz",
|
||||
"integrity": "sha512-mT3LiSt9tZWCdx1pl7q4Q5tNo6gdZbvJel286ZHGuj6LQQXjWNAh8qiF9d+LogvNUI+D7eLkTnj605d1zoazfg==",
|
||||
"version": "5.15.5",
|
||||
"resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.15.5.tgz",
|
||||
"integrity": "sha512-jEywgaMGZWPSlVFO7ZZAyXxNeLmq5XBp5At9Ne/sGohRJdesUcdxvyi8TP3odJxwQuL5L6PJV+JQ4DyIDM849A==",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.23.6",
|
||||
"@babel/runtime": "^7.23.8",
|
||||
"@types/prop-types": "^15.7.11",
|
||||
"prop-types": "^15.8.1",
|
||||
"react-is": "^18.2.0"
|
||||
@ -3440,13 +3440,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/x-date-pickers": {
|
||||
"version": "6.17.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.17.0.tgz",
|
||||
"integrity": "sha512-rBKiw6GL1bTJpfSuD0KnOgxrERhoSip7eyqXzHbh0GODmp9f5bonE9gRZ74XmlyMQT7tcSzXdzk0c1X0HhmP1A==",
|
||||
"version": "6.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@mui/x-date-pickers/-/x-date-pickers-6.19.0.tgz",
|
||||
"integrity": "sha512-/GccT+iFJTKjI6b9b0MWojyRKnizL/VYYAfPnR1q0wSVVXjYv7a1NK0uQlan4JbnovqoQCNVeTOCy/0bUJyD2Q==",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.23.2",
|
||||
"@mui/base": "^5.0.0-beta.20",
|
||||
"@mui/utils": "^5.14.14",
|
||||
"@mui/base": "^5.0.0-beta.22",
|
||||
"@mui/utils": "^5.14.16",
|
||||
"@types/react-transition-group": "^4.4.8",
|
||||
"clsx": "^2.0.0",
|
||||
"prop-types": "^15.8.1",
|
||||
@ -3464,7 +3464,7 @@
|
||||
"@emotion/styled": "^11.8.1",
|
||||
"@mui/material": "^5.8.6",
|
||||
"@mui/system": "^5.8.0",
|
||||
"date-fns": "^2.25.0",
|
||||
"date-fns": "^2.25.0 || ^3.2.0",
|
||||
"date-fns-jalali": "^2.13.0-0",
|
||||
"dayjs": "^1.10.7",
|
||||
"luxon": "^3.0.2",
|
||||
@ -3505,16 +3505,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/x-date-pickers/node_modules/@mui/base": {
|
||||
"version": "5.0.0-beta.21",
|
||||
"resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.21.tgz",
|
||||
"integrity": "sha512-eTKWx3WV/nwmRUK4z4K1MzlMyWCsi3WJ3RtV4DiXZeRh4qd4JCyp1Zzzi8Wv9xM4dEBmqQntFoei716PzwmFfA==",
|
||||
"version": "5.0.0-beta.32",
|
||||
"resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.32.tgz",
|
||||
"integrity": "sha512-4VptvYeLUYMJhZapWBkD50GmKfOc0XT381KJcTK3ncZYIl8MdBhpR6l8jOyeP5cixUPBJhstjrnmQEAHjCLriw==",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.23.2",
|
||||
"@floating-ui/react-dom": "^2.0.2",
|
||||
"@mui/types": "^7.2.7",
|
||||
"@mui/utils": "^5.14.15",
|
||||
"@babel/runtime": "^7.23.8",
|
||||
"@floating-ui/react-dom": "^2.0.5",
|
||||
"@mui/types": "^7.2.13",
|
||||
"@mui/utils": "^5.15.5",
|
||||
"@popperjs/core": "^2.11.8",
|
||||
"clsx": "^2.0.0",
|
||||
"clsx": "^2.1.0",
|
||||
"prop-types": "^15.8.1"
|
||||
},
|
||||
"engines": {
|
||||
@ -3522,7 +3522,7 @@
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/mui"
|
||||
"url": "https://opencollective.com/mui-org"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@types/react": "^17.0.0 || ^18.0.0",
|
||||
@ -3536,9 +3536,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@mui/x-date-pickers/node_modules/clsx": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
|
||||
"integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz",
|
||||
"integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
@ -3878,9 +3878,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@remix-run/router": {
|
||||
"version": "1.14.1",
|
||||
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.1.tgz",
|
||||
"integrity": "sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow==",
|
||||
"version": "1.14.2",
|
||||
"resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.2.tgz",
|
||||
"integrity": "sha512-ACXpdMM9hmKZww21yEqWwiLws/UPLhNKvimN8RrYSqPSvB3ov7sLvAcfvaxePeLvccTQKGdkDIhLYApZVDFuKg==",
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
}
|
||||
@ -3902,6 +3902,18 @@
|
||||
"integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@sindresorhus/merge-streams": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-1.0.0.tgz",
|
||||
"integrity": "sha512-rUV5WyJrJLoloD4NDN1V1+LDMDWOa4OTsT4yYJwQNpTU6FWxkxHpL7eu4w+DmiH8x/EAM1otkPE1+LaspIbplw==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/@sinonjs/commons": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
|
||||
@ -5702,20 +5714,20 @@
|
||||
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="
|
||||
},
|
||||
"node_modules/copy-webpack-plugin": {
|
||||
"version": "11.0.0",
|
||||
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz",
|
||||
"integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==",
|
||||
"version": "12.0.2",
|
||||
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz",
|
||||
"integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"fast-glob": "^3.2.11",
|
||||
"fast-glob": "^3.3.2",
|
||||
"glob-parent": "^6.0.1",
|
||||
"globby": "^13.1.1",
|
||||
"globby": "^14.0.0",
|
||||
"normalize-path": "^3.0.0",
|
||||
"schema-utils": "^4.0.0",
|
||||
"serialize-javascript": "^6.0.0"
|
||||
"schema-utils": "^4.2.0",
|
||||
"serialize-javascript": "^6.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14.15.0"
|
||||
"node": ">= 18.12.0"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
@ -5726,31 +5738,44 @@
|
||||
}
|
||||
},
|
||||
"node_modules/copy-webpack-plugin/node_modules/globby": {
|
||||
"version": "13.2.2",
|
||||
"resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz",
|
||||
"integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==",
|
||||
"version": "14.0.0",
|
||||
"resolved": "https://registry.npmjs.org/globby/-/globby-14.0.0.tgz",
|
||||
"integrity": "sha512-/1WM/LNHRAOH9lZta77uGbq0dAEQM+XjNesWwhlERDVenqothRbnzTrL3/LrIoEPPjeUHC3vrS6TwoyxeHs7MQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"dir-glob": "^3.0.1",
|
||||
"fast-glob": "^3.3.0",
|
||||
"@sindresorhus/merge-streams": "^1.0.0",
|
||||
"fast-glob": "^3.3.2",
|
||||
"ignore": "^5.2.4",
|
||||
"merge2": "^1.4.1",
|
||||
"slash": "^4.0.0"
|
||||
"path-type": "^5.0.0",
|
||||
"slash": "^5.1.0",
|
||||
"unicorn-magic": "^0.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/copy-webpack-plugin/node_modules/path-type": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz",
|
||||
"integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/copy-webpack-plugin/node_modules/slash": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
|
||||
"integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
|
||||
"integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
"node": ">=14.16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
@ -6672,9 +6697,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-plugin-n": {
|
||||
"version": "16.6.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.1.tgz",
|
||||
"integrity": "sha512-M1kE5bVQRLBMDYRZwDhWzlzbp370SRRRC1MHqq4I3L2Tatey+9/2csc5mwLDPlmhJaDvkojbrNUME5/llpRyDg==",
|
||||
"version": "16.6.2",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz",
|
||||
"integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.4.0",
|
||||
@ -6760,9 +6785,9 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/eslint-plugin-prettier": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.2.tgz",
|
||||
"integrity": "sha512-dhlpWc9vOwohcWmClFcA+HjlvUpuyynYs0Rf+L/P6/0iQE6vlHW9l5bkfzN62/Stm9fbq8ku46qzde76T1xlSg==",
|
||||
"version": "5.1.3",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
|
||||
"integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"prettier-linter-helpers": "^1.0.0",
|
||||
@ -7178,9 +7203,9 @@
|
||||
"integrity": "sha512-G3BSX9cfKttjr+2o1O22tYMLq0DPluZnYtq1rXumE1SpL/F/SLIfHx08WYQoWSIpeMYf8sRbJ8++71+v6Pnxfg=="
|
||||
},
|
||||
"node_modules/fast-glob": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
|
||||
"integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
|
||||
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@nodelib/fs.stat": "^2.0.2",
|
||||
@ -10328,9 +10353,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm": {
|
||||
"version": "10.2.5",
|
||||
"resolved": "https://registry.npmjs.org/npm/-/npm-10.2.5.tgz",
|
||||
"integrity": "sha512-lXdZ7titEN8CH5YJk9C/aYRU9JeDxQ4d8rwIIDsvH3SMjLjHTukB2CFstMiB30zXs4vCrPN2WH6cDq1yHBeJAw==",
|
||||
"version": "10.3.0",
|
||||
"resolved": "https://registry.npmjs.org/npm/-/npm-10.3.0.tgz",
|
||||
"integrity": "sha512-9u5GFc1UqI2DLlGI7QdjkpIaBs3UhTtY8KoCqYJK24gV/j/tByaI4BA4R7RkOc+ASqZMzFPKt4Pj2Z8JcGo//A==",
|
||||
"bundleDependencies": [
|
||||
"@isaacs/string-locale-compare",
|
||||
"@npmcli/arborist",
|
||||
@ -10411,12 +10436,12 @@
|
||||
"@npmcli/fs": "^3.1.0",
|
||||
"@npmcli/map-workspaces": "^3.0.4",
|
||||
"@npmcli/package-json": "^5.0.0",
|
||||
"@npmcli/promise-spawn": "^7.0.0",
|
||||
"@npmcli/run-script": "^7.0.2",
|
||||
"@npmcli/promise-spawn": "^7.0.1",
|
||||
"@npmcli/run-script": "^7.0.3",
|
||||
"@sigstore/tuf": "^2.2.0",
|
||||
"abbrev": "^2.0.0",
|
||||
"archy": "~1.0.0",
|
||||
"cacache": "^18.0.1",
|
||||
"cacache": "^18.0.2",
|
||||
"chalk": "^5.3.0",
|
||||
"ci-info": "^4.0.0",
|
||||
"cli-columns": "^4.0.0",
|
||||
@ -10564,7 +10589,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@npmcli/arborist": {
|
||||
"version": "7.2.2",
|
||||
"version": "7.3.0",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -10610,7 +10635,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@npmcli/config": {
|
||||
"version": "8.0.3",
|
||||
"version": "8.1.0",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -10664,7 +10689,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@npmcli/git": {
|
||||
"version": "5.0.3",
|
||||
"version": "5.0.4",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -10758,7 +10783,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@npmcli/promise-spawn": {
|
||||
"version": "7.0.0",
|
||||
"version": "7.0.1",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -10780,7 +10805,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@npmcli/run-script": {
|
||||
"version": "7.0.2",
|
||||
"version": "7.0.3",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -10875,17 +10900,6 @@
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/abort-controller": {
|
||||
"version": "3.0.0",
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"event-target-shim": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.5"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/agent-base": {
|
||||
"version": "7.1.0",
|
||||
"inBundle": true,
|
||||
@ -10942,13 +10956,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/npm/node_modules/are-we-there-yet": {
|
||||
"version": "4.0.1",
|
||||
"version": "4.0.2",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"delegates": "^1.0.0",
|
||||
"readable-stream": "^4.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||
}
|
||||
@ -10958,25 +10968,6 @@
|
||||
"inBundle": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/npm/node_modules/base64-js": {
|
||||
"version": "1.5.1",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"inBundle": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/npm/node_modules/bin-links": {
|
||||
"version": "4.0.3",
|
||||
"inBundle": true,
|
||||
@ -11007,29 +10998,6 @@
|
||||
"balanced-match": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/buffer": {
|
||||
"version": "6.0.3",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"base64-js": "^1.3.1",
|
||||
"ieee754": "^1.2.1"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/builtins": {
|
||||
"version": "5.0.1",
|
||||
"inBundle": true,
|
||||
@ -11039,7 +11007,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/cacache": {
|
||||
"version": "18.0.1",
|
||||
"version": "18.0.2",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -11308,11 +11276,6 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/delegates": {
|
||||
"version": "1.0.0",
|
||||
"inBundle": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/npm/node_modules/diff": {
|
||||
"version": "5.1.0",
|
||||
"inBundle": true,
|
||||
@ -11353,22 +11316,6 @@
|
||||
"inBundle": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/npm/node_modules/event-target-shim": {
|
||||
"version": "5.0.1",
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/events": {
|
||||
"version": "3.3.0",
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.8.x"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/exponential-backoff": {
|
||||
"version": "3.1.1",
|
||||
"inBundle": true,
|
||||
@ -11547,25 +11494,6 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/ieee754": {
|
||||
"version": "1.2.1",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"inBundle": true,
|
||||
"license": "BSD-3-Clause"
|
||||
},
|
||||
"node_modules/npm/node_modules/ignore-walk": {
|
||||
"version": "6.0.4",
|
||||
"inBundle": true,
|
||||
@ -11738,7 +11666,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/libnpmdiff": {
|
||||
"version": "6.0.4",
|
||||
"version": "6.0.5",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -11757,7 +11685,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/libnpmexec": {
|
||||
"version": "7.0.5",
|
||||
"version": "7.0.6",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -11778,7 +11706,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/libnpmfund": {
|
||||
"version": "5.0.2",
|
||||
"version": "5.0.3",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -11813,7 +11741,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/libnpmpack": {
|
||||
"version": "6.0.4",
|
||||
"version": "6.0.5",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -12205,7 +12133,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/npm-packlist": {
|
||||
"version": "8.0.1",
|
||||
"version": "8.0.2",
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
@ -12362,7 +12290,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/postcss-selector-parser": {
|
||||
"version": "6.0.13",
|
||||
"version": "6.0.15",
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@ -12381,14 +12309,6 @@
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/process": {
|
||||
"version": "0.11.10",
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">= 0.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/promise-all-reject-late": {
|
||||
"version": "1.0.1",
|
||||
"inBundle": true,
|
||||
@ -12485,21 +12405,6 @@
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/readable-stream": {
|
||||
"version": "4.4.2",
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"abort-controller": "^3.0.0",
|
||||
"buffer": "^6.0.3",
|
||||
"events": "^3.3.0",
|
||||
"process": "^0.11.10",
|
||||
"string_decoder": "^1.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/retry": {
|
||||
"version": "0.12.0",
|
||||
"inBundle": true,
|
||||
@ -12508,25 +12413,6 @@
|
||||
"node": ">= 4"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/safe-buffer": {
|
||||
"version": "5.2.1",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"inBundle": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/npm/node_modules/safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
"inBundle": true,
|
||||
@ -12681,14 +12567,6 @@
|
||||
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/string_decoder": {
|
||||
"version": "1.3.0",
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"safe-buffer": "~5.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/string-width": {
|
||||
"version": "4.2.3",
|
||||
"inBundle": true,
|
||||
@ -13527,9 +13405,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/prettier": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz",
|
||||
"integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==",
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.4.tgz",
|
||||
"integrity": "sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"prettier": "bin/prettier.cjs"
|
||||
@ -13823,11 +13701,11 @@
|
||||
}
|
||||
},
|
||||
"node_modules/react-router": {
|
||||
"version": "6.21.1",
|
||||
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.1.tgz",
|
||||
"integrity": "sha512-W0l13YlMTm1YrpVIOpjCADJqEUpz1vm+CMo47RuFX4Ftegwm6KOYsL5G3eiE52jnJpKvzm6uB/vTKTPKM8dmkA==",
|
||||
"version": "6.21.2",
|
||||
"resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.2.tgz",
|
||||
"integrity": "sha512-jJcgiwDsnaHIeC+IN7atO0XiSRCrOsQAHHbChtJxmgqG2IaYQXSnhqGb5vk2CU/wBQA12Zt+TkbuJjIn65gzbA==",
|
||||
"dependencies": {
|
||||
"@remix-run/router": "1.14.1"
|
||||
"@remix-run/router": "1.14.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
@ -13837,12 +13715,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/react-router-dom": {
|
||||
"version": "6.21.1",
|
||||
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.1.tgz",
|
||||
"integrity": "sha512-QCNrtjtDPwHDO+AO21MJd7yIcr41UetYt5jzaB9Y1UYaPTCnVuJq6S748g1dE11OQlCFIQg+RtAA1SEZIyiBeA==",
|
||||
"version": "6.21.2",
|
||||
"resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.2.tgz",
|
||||
"integrity": "sha512-tE13UukgUOh2/sqYr6jPzZTzmzc70aGRP4pAjG2if0IP3aUT+sBtAKUJh0qMh0zylJHGLmzS+XWVaON4UklHeg==",
|
||||
"dependencies": {
|
||||
"@remix-run/router": "1.14.1",
|
||||
"react-router": "6.21.1"
|
||||
"@remix-run/router": "1.14.2",
|
||||
"react-router": "6.21.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.0.0"
|
||||
@ -14261,9 +14139,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/serialize-javascript": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
|
||||
"integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
|
||||
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"randombytes": "^2.1.0"
|
||||
@ -15096,6 +14974,18 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/unicorn-magic": {
|
||||
"version": "0.1.0",
|
||||
"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz",
|
||||
"integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/update-browserslist-db": {
|
||||
"version": "1.0.11",
|
||||
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
|
||||
|
@ -29,19 +29,19 @@
|
||||
"@typescript-eslint/eslint-plugin": "^5.35.1",
|
||||
"@typescript-eslint/parser": "^5.35.1",
|
||||
"babel-loader": "^9.1.3",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"copy-webpack-plugin": "^12.0.2",
|
||||
"eslint": "^8.45.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-config-standard-with-typescript": "^36.1.0",
|
||||
"eslint-import-resolver-typescript": "^3.6.0",
|
||||
"eslint-plugin-import": "^2.27.5",
|
||||
"eslint-plugin-n": "^16.6.1",
|
||||
"eslint-plugin-prettier": "^5.1.2",
|
||||
"eslint-plugin-n": "^16.6.2",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-react": "^7.32.2",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"jest": "^29.6.1",
|
||||
"prettier": "^3.1.1",
|
||||
"prettier": "^3.2.4",
|
||||
"ts-node": "^10.9.2",
|
||||
"typescript": "^5.3.3",
|
||||
"webpack": "^5.89.0",
|
||||
@ -58,7 +58,7 @@
|
||||
"@mui/material": "^5.15.3",
|
||||
"@mui/system": "^5.15.3",
|
||||
"@mui/x-data-grid": "^6.17.0",
|
||||
"@mui/x-date-pickers": "^6.17.0",
|
||||
"@mui/x-date-pickers": "^6.19.0",
|
||||
"@nivo/core": "^0.84.0",
|
||||
"@nivo/line": "^0.84.0",
|
||||
"base-ex": "^0.8.1",
|
||||
@ -72,7 +72,7 @@
|
||||
"js-sha256": "^0.10.1",
|
||||
"leaflet": "^1.9.4",
|
||||
"light-bolt11-decoder": "^3.0.0",
|
||||
"npm": "^10.2.5",
|
||||
"npm": "^10.3.0",
|
||||
"openpgp": "^5.11.0",
|
||||
"react": "^18.2.0",
|
||||
"react-countdown": "^2.3.5",
|
||||
@ -82,7 +82,7 @@
|
||||
"react-image": "^4.1.0",
|
||||
"react-leaflet": "^4.2.1",
|
||||
"react-qr-code": "^2.0.11",
|
||||
"react-router-dom": "^6.21.1",
|
||||
"react-router-dom": "^6.21.2",
|
||||
"react-smooth-image": "^1.1.0",
|
||||
"react-world-flags": "^1.6.0",
|
||||
"reconnecting-websocket": "^4.4.0",
|
||||
|
@ -343,8 +343,8 @@ const DepthChart: React.FC<DepthChartProps> = ({
|
||||
? 2.7 * em
|
||||
: 1.78 * em
|
||||
: width < 25
|
||||
? 2.7 * em
|
||||
: 1.78 * em,
|
||||
? 2.7 * em
|
||||
: 1.78 * em,
|
||||
top: 0.714 * em,
|
||||
}}
|
||||
xFormat={(value) => Number(value).toFixed(0)}
|
||||
|
@ -56,8 +56,8 @@ const InputWrapper = styled('div')(
|
||||
? '#f44336'
|
||||
: sx.hoverBorderColor
|
||||
: error
|
||||
? '#dd0000'
|
||||
: '#2f2f2f'
|
||||
? '#dd0000'
|
||||
: '#2f2f2f'
|
||||
};
|
||||
}
|
||||
|
||||
@ -68,8 +68,8 @@ const InputWrapper = styled('div')(
|
||||
? '#f44336'
|
||||
: '#90caf9'
|
||||
: error
|
||||
? '#dd0000'
|
||||
: '#1976d2'
|
||||
? '#dd0000'
|
||||
: '#1976d2'
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -495,12 +495,12 @@ const MakerForm = ({
|
||||
? t('Order for ')
|
||||
: t('Swap of ')
|
||||
: fav.type == 1
|
||||
? fav.mode === 'fiat'
|
||||
? t('Buy BTC for ')
|
||||
: t('Swap into LN ')
|
||||
: fav.mode === 'fiat'
|
||||
? t('Sell BTC for ')
|
||||
: t('Swap out of LN ')}
|
||||
? fav.mode === 'fiat'
|
||||
? t('Buy BTC for ')
|
||||
: t('Swap into LN ')
|
||||
: fav.mode === 'fiat'
|
||||
? t('Sell BTC for ')
|
||||
: t('Swap out of LN ')}
|
||||
{fav.mode === 'fiat'
|
||||
? amountToString(maker.amount, makerHasAmountRange, maker.minAmount, maker.maxAmount)
|
||||
: amountToString(
|
||||
@ -513,12 +513,12 @@ const MakerForm = ({
|
||||
{maker.isExplicit
|
||||
? t(' of {{satoshis}} Satoshis', { satoshis: pn(maker.satoshis) })
|
||||
: maker.premium == 0
|
||||
? fav.mode === 'fiat'
|
||||
? t(' at market price')
|
||||
: ''
|
||||
: maker.premium > 0
|
||||
? t(' at a {{premium}}% premium', { premium: maker.premium })
|
||||
: t(' at a {{discount}}% discount', { discount: -maker.premium })}
|
||||
? fav.mode === 'fiat'
|
||||
? t(' at market price')
|
||||
: ''
|
||||
: maker.premium > 0
|
||||
? t(' at a {{premium}}% premium', { premium: maker.premium })
|
||||
: t(' at a {{discount}}% discount', { discount: -maker.premium })}
|
||||
</Typography>
|
||||
);
|
||||
};
|
||||
@ -739,10 +739,10 @@ const MakerForm = ({
|
||||
minAmount: pn(parseFloat(amountLimits[0].toPrecision(2))),
|
||||
})
|
||||
: maker.amount > amountLimits[1] && maker.amount != ''
|
||||
? t('Must be less than {{maxAmount}}', {
|
||||
maxAmount: pn(parseFloat(amountLimits[1].toPrecision(2))),
|
||||
})
|
||||
: null
|
||||
? t('Must be less than {{maxAmount}}', {
|
||||
maxAmount: pn(parseFloat(amountLimits[1].toPrecision(2))),
|
||||
})
|
||||
: null
|
||||
}
|
||||
label={amountLabel.label}
|
||||
required={true}
|
||||
|
@ -383,8 +383,8 @@ export const useAppStore = () => {
|
||||
data.active_order_id
|
||||
? data.active_order_id
|
||||
: data.last_order_id
|
||||
? data.last_order_id
|
||||
: null,
|
||||
? data.last_order_id
|
||||
: null,
|
||||
);
|
||||
}
|
||||
setRobot(newRobot);
|
||||
|
@ -29,8 +29,8 @@ class BaseSettings {
|
||||
modeCookie !== ''
|
||||
? modeCookie
|
||||
: window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
|
||||
? 'dark'
|
||||
: 'light';
|
||||
? 'dark'
|
||||
: 'light';
|
||||
|
||||
this.lightQRs = systemClient.getItem('settings_light_qr') === 'true';
|
||||
|
||||
@ -39,8 +39,8 @@ class BaseSettings {
|
||||
languageCookie !== ''
|
||||
? languageCookie
|
||||
: i18n.resolvedLanguage == null
|
||||
? 'en'
|
||||
: i18n.resolvedLanguage.substring(0, 2);
|
||||
? 'en'
|
||||
: i18n.resolvedLanguage.substring(0, 2);
|
||||
|
||||
const networkCookie = systemClient.getItem('settings_network');
|
||||
this.network = networkCookie !== '' ? networkCookie : 'mainnet';
|
||||
|
@ -1,23 +1,197 @@
|
||||
[
|
||||
{
|
||||
"alias": "Inception",
|
||||
"enabled": "true",
|
||||
"description": "RoboSats original and experimental coordinator",
|
||||
"coverLetter": "N/A",
|
||||
{
|
||||
"exp": {
|
||||
"longAlias": "Experimental",
|
||||
"shortAlias": "exp",
|
||||
"description": "RoboSats node for development and experimentation. This is the original RoboSats coordinator operated by the RoboSats devs since 2022.",
|
||||
"motto": "Original Robohost. P2P FTW!",
|
||||
"color": "#1976d2",
|
||||
"contact": {
|
||||
"email": "robosats@protonmail.com",
|
||||
"telegram": "@robosats",
|
||||
"twitter": "@robosats",
|
||||
"telegram": "robosats",
|
||||
"twitter": "robosats",
|
||||
"reddit": "r/robosats",
|
||||
"matrix": "#robosats:matrix.org",
|
||||
"website": "learn.robosats.com"
|
||||
"website": "https://learn.robosats.com",
|
||||
"nostr": "npub1p2psats79rypr8lpnl9t5qdekfp700x660qsgw284xvq4s09lqrqqk3m82",
|
||||
"pgp": "/static/federation/pgp/B4AB5F19113D4125DDF217739C4585B561315571.asc",
|
||||
"fingerprint": "B4AB5F19113D4125DDF217739C4585B561315571"
|
||||
},
|
||||
"badges": {
|
||||
"isFounder": true,
|
||||
"donatesToDevFund": 20,
|
||||
"hasGoodOpSec": true,
|
||||
"robotsLove": true,
|
||||
"hasLargeLimits": true
|
||||
},
|
||||
"policies": {
|
||||
"Policy Name 1": "Experimental coordinator used for development. Use at your own risk.",
|
||||
"Privacy Policy": "...",
|
||||
"Data Policy": "..."
|
||||
},
|
||||
"mainnet": {
|
||||
"onion": "http://robosats6tkf3eva7x2voqso3a5wcorsnw34jveyxfqi2fu7oyheasid.onion",
|
||||
"clearnet": "https://unsafe.robosats.com",
|
||||
"i2p": "http://r7r4sckft6ptmk4r2jajiuqbowqyxiwsle4iyg4fijtoordc6z7a.b32.i2p"
|
||||
},
|
||||
"testnet": {
|
||||
"onion": "http://robotestagw3dcxmd66r4rgksb4nmmr43fh77bzn2ia2eucduyeafnyd.onion",
|
||||
"clearnet": "https://unsafe.testnet.robosats.com",
|
||||
"i2p": ""
|
||||
},
|
||||
"color": "#9C27B0",
|
||||
"mainnetOnion": "robosats6tkf3eva7x2voqso3a5wcorsnw34jveyxfqi2fu7oyheasid.onion",
|
||||
"mainnetClearnet": "unsafe.robosats.com",
|
||||
"testnetOnion": "robotestagw3dcxmd66r4rgksb4nmmr43fh77bzn2ia2eucduyeafnyd.onion",
|
||||
"testnetClearnet": "unsafe.testnet.robosats.com",
|
||||
"mainnetNodesPubkeys": ["0282eb467bc073833a039940392592bf10cf338a830ba4e392c1667d7697654c7e"],
|
||||
"testnetNodesPubkeys": ["03ecb271b3e2e36f2b91c92c65bab665e5165f8cdfdada1b5f46cfdd3248c87fd6"],
|
||||
"logo": "/static/federation/inception.svg"
|
||||
"testnetNodesPubkeys": ["03ecb271b3e2e36f2b91c92c65bab665e5165f8cdfdada1b5f46cfdd3248c87fd6"]
|
||||
},
|
||||
"temple": {
|
||||
"longAlias": "Temple of Sats",
|
||||
"shortAlias": "temple",
|
||||
"description": "I am passionate about joining Robosats as a coordinator because I believe that peer-to-peer, non-KYC Bitcoin transactions are vital for the community's empowerment and autonomy. I aim to champion users' privacy, and provide a seamless experience for genuine Bitcoin enthusiasts.",
|
||||
"motto": "Privacy and Integrity: Temple of Sats, where Bitcoin's essence thrives.",
|
||||
"color": "#000",
|
||||
"contact": {
|
||||
"email": "cosmos178ftmm4edlahqzj376gwgqzd9re5x0x9h0tfsc@keplr.xyz",
|
||||
"telegram": "@venividivici_fr",
|
||||
"simplex": "https://simplex.chat/contact/#/?v=1-4&smp=smp%3A%2F%2Fh--vW7ZSkXPeOUpfxlFGgauQmXNFOzGoizak7Ult7cw%3D%40smp15.simplex.im%2FTBkVW6au17zMxuwDvlhIpkMojh7PpZgN%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA2iXIDN6Su6zYqKWcgsdd8BA7HhIHYIEWHE-MUyJhSw4%253D%26srv%3Doauu4bgijybyhczbnxtlggo6hiubahmeutaqineuyy23aojpih3dajad.onion",
|
||||
"matrix": "@venividivici13:matrix.org",
|
||||
"nostr": "npub1wsqpvgpfwq6a4fs5whqxn7gtd9gqsll2p5qnfdu4ltr43s6wwxgsgk4xtl",
|
||||
"pgp": "/static/federation/pgp/25791752E9661C1DE118A8C6F78CD3D6471B6789.asc",
|
||||
"fingerprint": "25791752E9661C1DE118A8C6F78CD3D6471B6789"
|
||||
},
|
||||
"badges": {
|
||||
"isFounder": true,
|
||||
"donatesToDevFund": 30,
|
||||
"hasGoodOpSec": true,
|
||||
"robotsLove": false,
|
||||
"hasLargeLimits": false
|
||||
},
|
||||
"policies": {
|
||||
"Evidence in Disputes": "In the event of a dispute, users will be asked to provide transaction-related evidence. This could include transaction IDs, screenshots of payment confirmations, or other pertinent transaction records. Personal information or unrelated transaction details should be redacted to maintain privacy.",
|
||||
"Short-term Storage": "Sensitive information related to disputes will be stored only for the duration necessary to resolve the issue. Once resolved, the data will be permanently deleted. For ease of use e-mail communications are permitted, but E2EE and decentralized platforms such as NOSTR, SIMPLEX and MATRIX are advised.",
|
||||
"No Third-Party Sharing": "Under no circumstances will user information be shared with third parties.",
|
||||
"Short-term storage": "Any log needed to operate the coordinator will be cleared after 7 days, unless strictly needed to process disputes. To ensure utmost privacy, the coordinator will be accessible only through TOR.",
|
||||
"Rule 1:": "Do not share personal information through the chat, unless strictly needed for completing the trade.",
|
||||
"Rule 2:": "Keep stacking Sats and Enjoy your journey in the Temple of Sats!"
|
||||
},
|
||||
"mainnet": {
|
||||
"onion": "http://ngdk7ocdzmz5kzsysa3om6du7ycj2evxp2f2olfkyq37htx3gllwp2yd.onion",
|
||||
"clearnet": "",
|
||||
"i2p": ""
|
||||
},
|
||||
"testnet": {
|
||||
"onion": "http://jpp3w5tpxtyg6lifonisdszpriiapszzem4wod2zsdweyfenlsxeoxid.onion",
|
||||
"clearnet": "",
|
||||
"i2p": ""
|
||||
},
|
||||
"mainnetNodesPubkeys": ["030a425f5c69a29db30f6740d4e7df8f5612ef9955078ef4497490015464733dc8"],
|
||||
"testnetNodesPubkeys": ["028e7a019180a664b84edf77ba656e96f2eb84f67f56d93020341caf4109e0dbc7"]
|
||||
},
|
||||
"satstralia": {
|
||||
"longAlias": "Satstralia",
|
||||
"shortAlias": "satstralia",
|
||||
"description": "I'm happy to be part of Robosats in so many ways!",
|
||||
"motto": "btc = ɔʇq",
|
||||
"color": "#329239",
|
||||
"contact": {
|
||||
"email": "info@satstralia.com",
|
||||
"telegram": "@satstralia",
|
||||
"simplex": "https://simplex.chat/contact/#/?v=1-4&smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2Fq0pIyShcBl0EP8le0D0xy2OfSrP1mQWg%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAcwmsC9GQwQEt40UNpYp4vKPhU_UnWXsXcVl-OJ57lC4%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22vNcyZH9C3eE6MHzRNpR3xA%3D%3D%22%7D",
|
||||
"matrix": "#satstralia:matrix.org",
|
||||
"pgp": "/static/federation/pgp/D1894C9862A9D02D47D96C84AE30B6904210DA14.asc",
|
||||
"nostr": "npub1z94lxjf7m5snda0qc6s3kmpy6r4nfw74h78da9j6j4y8ym08zrrs459wpr",
|
||||
"website": "https://satstralia.com",
|
||||
"fingerprint": "D1894C9862A9D02D47D96C84AE30B6904210DA14"
|
||||
},
|
||||
"badges": {
|
||||
"isFounder": true,
|
||||
"donatesToDevFund": 33,
|
||||
"hasGoodOpSec": true,
|
||||
"robotsLove": false,
|
||||
"hasLargeLimits": false
|
||||
},
|
||||
"policies": {
|
||||
"Privacy Policy 1": "Evidence in Disputes: In the event of a dispute, users will be asked to provide transaction-related evidence. This could include transaction IDs, screenshots of payment confirmations, or other pertinent transaction records. Personal information or unrelated transaction details should be redacted to maintain privacy.",
|
||||
"Privacy Policy 2": "Short-term Storage: Sensitive information related to disputes will be stored only for the duration necessary to resolve the issue. Once resolved, the data will be permanently deleted. For ease of use e-mail communications are permitted, but E2EE and decentralized platforms such as NOSTR, SIMPLEX and MATRIX are advised.",
|
||||
"Data Policy 1": "No Third-Party Sharing: Under no circumstances will user information be shared with third parties.",
|
||||
"Data Policy 2": "Short-term Storage: Any log needed to operate the coordinator will be cleared after 7 days, unless strictly needed to process disputes. To ensure utmost privacy, the coordinator will be accessible only through TOR.",
|
||||
"Rule 1:": "Do not share personal information through the chat, unless strictly needed for completing the trade.",
|
||||
"Rule 2:": "Any dispute can be fist address through our public chats in the different social networks but never will be started using private chats."
|
||||
},
|
||||
"mainnet": {
|
||||
"onion": "http://satstraoq35jffvkgpfoqld32nzw2siuvowanruindbfojowpwsjdgad.onion",
|
||||
"clearnet": "https://unsafe.satstralia.com",
|
||||
"i2p": ""
|
||||
},
|
||||
"testnet": {
|
||||
"onion": "http://testraliar7xkhos2gipv2k65obykofb4jqzl5l4danfryacifi4t7qd.onion",
|
||||
"clearnet": "https://test.unsafe.satstralia.com",
|
||||
"i2p": ""
|
||||
},
|
||||
"mainnetNodesPubkeys": ["029c5b14214ca7c1f5334db539dbab266088ba43a40563551efb9458756a94cd94"],
|
||||
"testnetNodesPubkeys": ["03607900c00c5fcc3f9d32da4ad687c73d95df4faa065e5320e77b41c5d76ef381"]
|
||||
},
|
||||
"lake": {
|
||||
"longAlias": "TheBigLake",
|
||||
"shortAlias": "lake",
|
||||
"description": "Becoming a RoboSats coordinator represents boosting intrinsic values of decentralization and economic freedom. RoboSats solves the problem of KYC and loss of privacy that big Exchanges are forced to comply with. I believe that decentralizing the lightning nodes will enhance the robustness of the tool, allowing more users to join. I am excited to be part of this new phase of growth.",
|
||||
"motto": "TheBigLake: The Lake of Economic Freedom.",
|
||||
"color": "#000D28",
|
||||
"contact": {
|
||||
"email": "gabbygator184@proton.me",
|
||||
"telegram": "@gabbygator184",
|
||||
"simplex": "https://simplex.chat/contact#/?v=1-4&smp=smp%3A%2F%2FZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M%3D%40smp17.simplex.im%2FLsFHfMGI9rm3kUDz1jwXZf3uAYPUuhli%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAJ8hrCl81w79Wx2qfae6cGR9rZpeHVoevAObBqNgzqGU%253D%26srv%3Dogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion",
|
||||
"matrix": "@gabbygator184:matrix.org",
|
||||
"pgp": "/static/federation/pgp/EC4F94F629AA28242B54265F1ABE1CA3582A031A.asc",
|
||||
"nostr": "npub17t2g2h0nnf7mvxtxvm5ydxs85ycumhqgmj48gj35gdplln655yxq68wj6f",
|
||||
"fingerprint": "EC4F94F629AA28242B54265F1ABE1CA3582A031A"
|
||||
},
|
||||
"badges": {
|
||||
"isFounder": true,
|
||||
"donatesToDevFund": 30,
|
||||
"hasGoodOpSec": true,
|
||||
"robotsLove": false,
|
||||
"hasLargeLimits": false
|
||||
},
|
||||
"policies": {
|
||||
"Privacy Policy 1": "Evidence in Disputes: In the event of a dispute, users will be asked to provide transaction-related evidence. This could include transaction IDs, screenshots of payment confirmations, or other pertinent transaction records. Personal information or unrelated transaction details should be redacted to maintain privacy.",
|
||||
"Privacy Policy 2": "Short-term Storage: Sensitive information related to disputes will be stored only for the duration necessary to resolve the issue. Once resolved, the data will be permanently deleted. For ease of use e-mail communications are permitted, but E2EE and decentralized platforms such as NOSTR, SIMPLEX and MATRIX are advised.",
|
||||
"Data Policy 1": "No Third-Party Sharing: Under no circumstances will user information be shared with third parties.",
|
||||
"Data Policy 2": "Short-term Storage: Any log needed to operate the coordinator will be cleared after 7 days, unless strictly needed to process disputes. To ensure utmost privacy, the coordinator will be accessible only through TOR.",
|
||||
"Rule 1:": "Do not share personal information through the chat, unless strictly needed for completing the trade.",
|
||||
"Rule 2:": "Any dispute can be fist address through our public chats in the different social networks but never will be started using private chats."
|
||||
},
|
||||
"mainnet": {
|
||||
"onion": "http://4t4jxmivv6uqej6xzx2jx3fxh75gtt65v3szjoqmc4ugdlhipzdat6yd.onion",
|
||||
"clearnet": "",
|
||||
"i2p": ""
|
||||
},
|
||||
"testnet": {
|
||||
"onion": "http://ghbtv7lhoyhomyir4xvxaeyqgx4ylxksia343jaat3njqqlkqpdjqcyd.onion",
|
||||
"clearnet": "",
|
||||
"i2p": ""
|
||||
},
|
||||
"mainnetNodesPubkeys": ["0385262f7e9e2eeeba1e7d6182a0efec98e79d01154b76189f3e0b88bcee279dd0"],
|
||||
"testnetNodesPubkeys": ["0355f8604df9ec4bee20a284f045f94e26cdd1fc5e15dee0716a5a5dfc7cd33b7c"]
|
||||
},
|
||||
"local": {
|
||||
"longAlias": "Local Dev",
|
||||
"shortAlias": "local",
|
||||
"description": "This coordinator will only be available if you run a RoboSats coordinator on your own machine.",
|
||||
"motto": "Buidl",
|
||||
"color": "#000000",
|
||||
"testnet": {
|
||||
"onion": "",
|
||||
"clearnet": "http://localhost:8000"
|
||||
},
|
||||
"badges": {
|
||||
"donatesToDevFund": 0
|
||||
},
|
||||
"mainnet": {
|
||||
"onion": "",
|
||||
"clearnet": ""
|
||||
},
|
||||
"policies": {
|
||||
"Development Policy": "Don't look around, just buidl"
|
||||
},
|
||||
"mainnetNodesPubkeys": ["..."],
|
||||
"testnetNodesPubkeys": ["..."]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
BIN
frontend/static/federation/avatars/exp.small.webp
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
frontend/static/federation/avatars/exp.webp
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
frontend/static/federation/avatars/lake.small.webp
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
frontend/static/federation/avatars/lake.webp
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
frontend/static/federation/avatars/local.small.webp
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
frontend/static/federation/avatars/local.webp
Normal file
After Width: | Height: | Size: 5.3 KiB |
BIN
frontend/static/federation/avatars/satstralia.small.webp
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
frontend/static/federation/avatars/satstralia.webp
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
frontend/static/federation/avatars/temple.small.webp
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
frontend/static/federation/avatars/temple.webp
Normal file
After Width: | Height: | Size: 8.4 KiB |
@ -0,0 +1,43 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Comment: 2579 1752 E966 1C1D E118 A8C6 F78C D3D6 471B 6789
|
||||
Comment: cosmos178ftmm4edlahqzj376gwgqzd9re5x0x9h0tfsc@keplr.xyz
|
||||
|
||||
xsDNBGU6nIsBDAD2W4dAgUOo57rKZrzItB7zvBD6B19scgKeoGmIoCdTxGvvfVSH
|
||||
CSJszVGa7TKmlXbjaNzi3WeCJBSYTL8OwaX8jymUXw/kgM+FBfEu/1hxKetYIe6p
|
||||
uhBZBfExpNUD56tb6NY+qlP0HpLdWHGWBQn0JXe/R1A0aEBLhkVkscAFfGDyG/Kf
|
||||
sKQE+8pO4z+7R2dHZ5xvQ1wJwbksSL4oXgV/qOuQzkvl/bJlR+9ZLlyaH1sl6Hba
|
||||
5a1aW2Mpacqp5hFfFa8towv0mgqtwy7qQW1UmzyjxzvxFOgXdavzobxX5JpFMoGR
|
||||
nqAii1vi8okjSK3QL2Q0hGFSUGDk4Gcd+5gl7pgIvByROZmHZj1Jlbf1zvGsNEpV
|
||||
mgvGiqsxv5DXeVst0U+yKn8v8fQ3BpfJUfuCXdymMsXIYtuEPKRyvcTFrwadSa9R
|
||||
boR3giH68RkKM6eFohlq0Y/N6PWDklA5xgdvrUod9kRfgdJV/iSKW3wkcsyBj2mu
|
||||
i62Tnmn+nNXOqXkAEQEAAc03Y29zbW9zMTc4ZnRtbTRlZGxhaHF6ajM3Nmd3Z3F6
|
||||
ZDlyZTV4MHg5aDB0ZnNjQGtlcGxyLnh5esLBDgQTAQgAOBYhBCV5F1LpZhwd4Rio
|
||||
xveM09ZHG2eJBQJlOp2zAhsDBQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEPeM
|
||||
09ZHG2eJ794L/0PSKfncyGhC3CL6+MoCwip3guRiuJxaPq/ggTbJ9JPu8BhfeDpg
|
||||
PuCeXV0G/e6+jVF60SyhIEW0y2ep90CjDYFMGYUdawALg2OQJpkb9nIQBxCKxXUD
|
||||
RN5Y3bMC/Etq2lnkSS4wQyBZR7xv5tl4crIAOxYtPCMzm1PL10wMYnKh0oWseV6E
|
||||
xt4Kukt1VQ3N+9Vpbu46V5eD2mStfTAauw0WPlUchuTV36NkT59j7nwI3INuqEB2
|
||||
b0KignkuFpHdF+/1K9Ec7M+1v2s73QVPmdBH0/BrQ8OK2M4u1x9typUZvuQ/PGyh
|
||||
8K1+HamLeE5Nb0tX7PXjFPjAkb8HwP/uhXB2vZwHLlgnHiqDw+6lT82Ozmdci9Q2
|
||||
oENB3jAmRahB6PXlqGzsbi9Sd34/XJK/RAh3Ca86P+IFTvVAtwbEVrT2mvM4IouL
|
||||
m/N7hqRrge/RCgna73lIRY3Z7hbBWZC3+TbV08Wok1qlLKY3lNlkT/mR0harGcjE
|
||||
57IuO792pcUnm87AzQRlOpyLAQwA71NCHCFCBVwb3e48nI5phjdmqX4zHk7ykcfO
|
||||
u435Xnalxz9bXkO4u060R3U31wQAzRgycGy3BrYJtA/V8AnMMfa1OBruogWzgScp
|
||||
wYqdx/l31ElNd+fJM3owIZh6au8/Gmq2WvmB6I7T24HMXGebcYO/aTAT5YdGvjKL
|
||||
pW0A71tAmI8SvJOtBsyd2XXl7OqIPceOhS9UMpMQiqVxvUf0ONNcWk6Abaysolz1
|
||||
cupLiYBeizGqfPIhTDczsr+EjTLqlDjQ9TFXZ99vShrK9/MwsHtqE+8SDuf3Ko0N
|
||||
quoWmRxheHcbKIKH5jaAdSaWkVxVT8Tl1aEhA8BHAvrm4YtAM67fcikl6T+s5q44
|
||||
FAFSYFnrmSzrDaXE5NUQN+7Of5Zyag2rnsZSjM/UhxNbwNTQ4Ea7HL6XiHhgnBI6
|
||||
DgGmSNmhbRNM6Pb2cSiY1thIseSXdrnbn643ZmABtsWnpxf4kS8PEMhEGd+KA1fJ
|
||||
iiM4KQ+Y81BiCeVwmcT+JDaeWSQxABEBAAHCwPYEGAEIACAWIQQleRdS6WYcHeEY
|
||||
qMb3jNPWRxtniQUCZTqciwIbDAAKCRD3jNPWRxtniVZDDADy5sT6wwZvxcVu0MgH
|
||||
jrQbCP08eE/K2zeJ6ERgXaGyrNAnPYp+V2bD15W7FciwO1yXqPdTFwfdUSs66Wsk
|
||||
Z2DJuzEm+rdzw761mLhBrm0jadiADDl7RW9hGe8ZOO3c6uQx6IhxSupChn04AV8v
|
||||
I0EoIkWOzbf4hr08iz+mnrsKoplgRULAuhsctjWGSo6ev6ZY6Xz39sVJra0SH4du
|
||||
YLECfk5I5e9v2N15m3NBC0qhRNcwEc6wMCtHFuaxE1ulN9LOylEnfwm7dnsSs0wa
|
||||
tldZct7mhCoB1QWd/qRESq/reFKvxrfVU3f55uVHN4vkO//dJ6w/MY9RCId713RX
|
||||
Df5anNax6bBcTrqQsRN30rUpWIOqitCJxleYH/Ks9MGduk6MS5kb+NKTDUlSMLHO
|
||||
fN/kZ2k9ODBrAT+WXT2JKUHj6fU6Hf1w8ml0n8/z4ehcsW7Yk06+zUEemknvmNR+
|
||||
5iK7rIhhZFNGWy7KAcHh7c7wkOXeplqGA1M2nvi0rn5pTNs=
|
||||
=0i79
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
@ -0,0 +1,63 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Comment: B4AB 5F19 113D 4125 DDF2 1773 9C45 85B5 6131 5571
|
||||
Comment: Reckless_Satoshi <reckless.satoshi@protonmail.com>
|
||||
|
||||
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
|
||||
=WLFQ
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
@ -0,0 +1,43 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Comment: D189 4C98 62A9 D02D 47D9 6C84 AE30 B690 4210 DA14
|
||||
Comment: Satstralia (http://satstralia.com) <info@satstralia.com
|
||||
|
||||
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
|
||||
=scGt
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
@ -0,0 +1,43 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Comment: EC4F 94F6 29AA 2824 2B54 265F 1ABE 1CA3 582A 031A
|
||||
Comment: gabbygator184 <gabbygator184@proton.me>
|
||||
|
||||
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
|
||||
iexNUI0gb/kJUazdBgFbIF1usQ==
|
||||
=nST/
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
16
mobile/package-lock.json
generated
@ -32,13 +32,13 @@
|
||||
"eslint-import-resolver-typescript": "^3.6.0",
|
||||
"eslint-plugin-import": "^2.27.5",
|
||||
"eslint-plugin-n": "^15.7.0",
|
||||
"eslint-plugin-prettier": "^5.1.2",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-react": "^7.32.2",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"jest": "^29.5.0",
|
||||
"metro-react-native-babel-preset": "^0.75.1",
|
||||
"prettier": "^3.1.1",
|
||||
"prettier": "^3.2.1",
|
||||
"react-test-renderer": "18.2.0",
|
||||
"typescript": "^5.3.3"
|
||||
}
|
||||
@ -6778,9 +6778,9 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/eslint-plugin-prettier": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.2.tgz",
|
||||
"integrity": "sha512-dhlpWc9vOwohcWmClFcA+HjlvUpuyynYs0Rf+L/P6/0iQE6vlHW9l5bkfzN62/Stm9fbq8ku46qzde76T1xlSg==",
|
||||
"version": "5.1.3",
|
||||
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz",
|
||||
"integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"prettier-linter-helpers": "^1.0.0",
|
||||
@ -12369,9 +12369,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/prettier": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz",
|
||||
"integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==",
|
||||
"version": "3.2.1",
|
||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.1.tgz",
|
||||
"integrity": "sha512-qSUWshj1IobVbKc226Gw2pync27t0Kf0EdufZa9j7uBSJay1CC+B3K5lAAZoqgX3ASiKuWsk6OmzKRetXNObWg==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"prettier": "bin/prettier.cjs"
|
||||
|
@ -36,13 +36,13 @@
|
||||
"eslint-import-resolver-typescript": "^3.6.0",
|
||||
"eslint-plugin-import": "^2.27.5",
|
||||
"eslint-plugin-n": "^15.7.0",
|
||||
"eslint-plugin-prettier": "^5.1.2",
|
||||
"eslint-plugin-prettier": "^5.1.3",
|
||||
"eslint-plugin-promise": "^6.1.1",
|
||||
"eslint-plugin-react": "^7.32.2",
|
||||
"eslint-plugin-react-hooks": "^4.6.0",
|
||||
"jest": "^29.5.0",
|
||||
"metro-react-native-babel-preset": "^0.75.1",
|
||||
"prettier": "^3.1.1",
|
||||
"prettier": "^3.2.1",
|
||||
"react-test-renderer": "18.2.0",
|
||||
"typescript": "^5.3.3"
|
||||
},
|
||||
|
@ -1,5 +1,9 @@
|
||||
[tool.isort]
|
||||
profile = "black"
|
||||
[tool.ruff]
|
||||
# Exclude a variety of commonly ignored directories.
|
||||
exclude = [
|
||||
"*migrations/*",
|
||||
"api/nick_generator/nick_generator.py",
|
||||
]
|
||||
|
||||
[tool.coverage.run]
|
||||
omit = [
|
||||
|
@ -1,4 +1,4 @@
|
||||
django==4.2.7
|
||||
django==4.2.9
|
||||
django-admin-relation-links==0.2.5
|
||||
django-celery-beat==2.5.0
|
||||
django-celery-results==2.5.1
|
||||
@ -6,7 +6,7 @@ django-model-utils==4.3.1
|
||||
django-redis==5.4.0
|
||||
djangorestframework==3.14.0
|
||||
channels==4.0.0
|
||||
channels-redis==4.1.0
|
||||
channels-redis==4.2.0
|
||||
celery==5.3.6
|
||||
grpcio==1.60.0
|
||||
googleapis-common-protos==1.62.0
|
||||
@ -20,11 +20,11 @@ git+https://github.com/RoboSats/Robohash.git
|
||||
gunicorn==21.2.0
|
||||
psycopg2==2.9.9
|
||||
SQLAlchemy==2.0.16
|
||||
django-import-export==3.3.5
|
||||
django-import-export==3.3.6
|
||||
requests[socks]
|
||||
python-gnupg==0.5.2
|
||||
daphne==4.0.0
|
||||
drf-spectacular==0.27.0
|
||||
drf-spectacular-sidecar==2023.5.1
|
||||
drf-spectacular-sidecar==2024.1.1
|
||||
django-cors-headers==4.3.1
|
||||
base91==1.0.1
|
||||
|
@ -1,7 +1,4 @@
|
||||
coverage==7.4.0
|
||||
black==23.3.0
|
||||
isort==5.13.2
|
||||
flake8==6.1.0
|
||||
pyflakes==3.1.0
|
||||
ruff==0.1.13
|
||||
drf-openapi-tester==2.3.3
|
||||
pre-commit==3.6.0
|
24
web/Dockerfile
Normal file
@ -0,0 +1,24 @@
|
||||
FROM alpine:3.18.0
|
||||
|
||||
LABEL maintainer="Reckless_Satoshi https://github.com/reckless-satoshi"
|
||||
|
||||
# Needs a copy or symlink of /frontend/static in /nodeapp/static
|
||||
# Github client release workflow copies /frontend/static here
|
||||
|
||||
RUN mkdir -p /usr/src/robosats
|
||||
WORKDIR /usr/src/robosats
|
||||
|
||||
RUN set -x \
|
||||
&& addgroup -g 101 -S nginx \
|
||||
&& adduser -S -D -H -u 101 -h /var/cache/nginx -s /sbin/nologin -G nginx -g nginx nginx
|
||||
|
||||
COPY . .
|
||||
COPY ./nginx.conf /etc/nginx/nginx.conf
|
||||
|
||||
RUN apk -U --no-cache upgrade \
|
||||
&& apk --no-cache add nginx
|
||||
|
||||
EXPOSE 80
|
||||
HEALTHCHECK CMD curl --fail http://localhost:80 || exit 1
|
||||
|
||||
CMD ["sh", "run.sh"]
|
60
web/basic.html
Normal file
@ -0,0 +1,60 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<link rel="shortcut icon" href="/static/assets/images/favicon-96x96.png" />
|
||||
<link rel="icon" type="image/png" href="/static/assets/images/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/static/assets/images/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="/static/assets/images/favicon-192x192.png" sizes="192x192">
|
||||
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="description" content="A simple and private way to exchange bitcoin for national currencies. Robosats simplifies the peer-to-peer user experience and uses lightning hold invoices to minimize custody and trust requirements. No user registration required.">
|
||||
|
||||
<title>RoboSats - Simple and Private Bitcoin Exchange</title>
|
||||
|
||||
<link rel="stylesheet" href="/static/css/fonts.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/loader.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/index.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/leaflet.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<div>
|
||||
This site requires JavaScript. This message is only visible if you have it disabled. <br/><br/>
|
||||
If you are using TOR browser set the "Security Level" to "Standard". If you keep seeing this message clear cache and storage of TOR browser app and retry.<br/><br/>
|
||||
If the problem persists, ask for support in the RoboSats telegram group<a href="https://t.me/robosats"> (t.me/robosats)</a>
|
||||
</div>
|
||||
</noscript>
|
||||
<div id="main">
|
||||
<div id="app">
|
||||
<div class="loaderCenter">
|
||||
<div class="loaderSpinner"></div>
|
||||
<div class="content-slider">
|
||||
<div class="slider">
|
||||
<div class="mask">
|
||||
<ul>
|
||||
<li class="anim1">
|
||||
<div class="quote">Looking for robot parts ...</div>
|
||||
</li>
|
||||
<li class="anim2">
|
||||
<div class="quote">Adding layers to the onion ...</div>
|
||||
</li>
|
||||
<li class="anim3">
|
||||
<div class="quote">Winning at game theory ...</div>
|
||||
</li>
|
||||
<li class="anim4">
|
||||
<div class="quote">Moving Sats at light speed ...</div>
|
||||
</li>
|
||||
<li class="anim5">
|
||||
<div class="quote">Hiding in 2^256 bits of entropy...</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/static/frontend/main.js"></script>
|
||||
</body>
|
||||
</html>
|
59
web/nginx.conf
Normal file
@ -0,0 +1,59 @@
|
||||
daemon off;
|
||||
|
||||
user nginx;
|
||||
worker_processes auto;
|
||||
|
||||
error_log /var/log/nginx/error.log notice;
|
||||
pid /var/run/nginx.pid;
|
||||
|
||||
events {
|
||||
worker_connections 1024;
|
||||
}
|
||||
|
||||
http {
|
||||
|
||||
include /etc/nginx/mime.types;
|
||||
default_type application/octet-stream;
|
||||
large_client_header_buffers 4 64K;
|
||||
|
||||
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
|
||||
'$status $body_bytes_sent "$http_referer" '
|
||||
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||
|
||||
access_log /dev/stdout main;
|
||||
error_log /dev/stderr warn;
|
||||
|
||||
sendfile on;
|
||||
keepalive_timeout 65;
|
||||
|
||||
server {
|
||||
|
||||
listen 80;
|
||||
server_name robosats_web_client;
|
||||
|
||||
location / {
|
||||
root /usr/src/robosats;
|
||||
try_files $uri $uri/ /basic.html;
|
||||
index basic.html;
|
||||
}
|
||||
|
||||
location /pro {
|
||||
root /usr/src/robosats;
|
||||
try_files $uri $uri/ /pro.html;
|
||||
index pro.html;
|
||||
}
|
||||
|
||||
location /static/ {
|
||||
alias /usr/src/robosats/static/;
|
||||
autoindex on;
|
||||
}
|
||||
|
||||
location /clearnetonion_verify {
|
||||
alias /serve_misc/;
|
||||
}
|
||||
|
||||
location = /favicon.ico {
|
||||
alias /usr/src/robosats/static/assets/images/favicon-96x96.png;
|
||||
}
|
||||
}
|
||||
}
|
62
web/pro.html
Normal file
@ -0,0 +1,62 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
|
||||
<link rel="shortcut icon" href="/static/assets/images/favicon-96x96.png" />
|
||||
<link rel="icon" type="image/png" href="/static/assets/images/favicon-32x32.png" sizes="32x32">
|
||||
<link rel="icon" type="image/png" href="/static/assets/images/favicon-96x96.png" sizes="96x96">
|
||||
<link rel="icon" type="image/png" href="/static/assets/images/favicon-192x192.png" sizes="192x192">
|
||||
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="description" content="A simple and private way to exchange bitcoin for national currencies. Robosats simplifies the peer-to-peer user experience and uses lightning hold invoices to minimize custody and trust requirements. No user registration required.">
|
||||
|
||||
<title>RoboSats PRO - Simple and Private Bitcoin Exchange</title>
|
||||
|
||||
<link rel="stylesheet" href="/static/css_pro/fonts.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/loader.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/index.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/static/css/leaflet.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/css_pro/react-grid-layout.css"/>
|
||||
<link rel="stylesheet" type="text/css" href="/css_pro/react-resizable.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
<div>
|
||||
This site requires JavaScript. This message is only visible if you have it disabled. <br/><br/>
|
||||
If you are using TOR browser set the "Security Level" to "Standard". If you keep seeing this message clear cache and storage of TOR browser app and retry.<br/><br/>
|
||||
If the problem persists, ask for support in the RoboSats telegram group<a href="https://t.me/robosats"> (t.me/robosats)</a>
|
||||
</div>
|
||||
</noscript>
|
||||
<div id="main">
|
||||
<div id="app">
|
||||
<div class="loaderCenter">
|
||||
<div class="loaderSpinner"></div>
|
||||
<div class="content-slider">
|
||||
<div class="slider">
|
||||
<div class="mask">
|
||||
<ul>
|
||||
<li class="anim1">
|
||||
<div class="quote">Looking for robot parts ...</div>
|
||||
</li>
|
||||
<li class="anim2">
|
||||
<div class="quote">Adding layers to the onion ...</div>
|
||||
</li>
|
||||
<li class="anim3">
|
||||
<div class="quote">Winning at game theory ...</div>
|
||||
</li>
|
||||
<li class="anim4">
|
||||
<div class="quote">Moving Sats at light speed ...</div>
|
||||
</li>
|
||||
<li class="anim5">
|
||||
<div class="quote">Hiding in 2^256 bits of entropy...</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="/static/frontend/pro.js"></script>
|
||||
</body>
|
||||
</html>
|
5
web/readme.md
Normal file
@ -0,0 +1,5 @@
|
||||
# Host a RoboSat web client
|
||||
|
||||
This docker app is intended for hosting a web client for public use.
|
||||
|
||||
Similar to `/nodeapp`, but does not use the selfhosted flags nor torify connections to coordinators. The browser itself must support Tor.
|
2
web/run.sh
Normal file
@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
nginx
|