mirror of
https://github.com/Such-Software/smirk-backend-core.git
synced 2026-10-17 07:21:32 +02:00
- New docs/operations/CONSOLE.md: reaching /admin, NIP-98 login, the defaults->env->DB precedence model, per-section runtime-safe vs restart-required table, expected_versions concurrency, restart_apply_mode (with the systemd Restart=always requirement for auto), clearing a DB override. Linked from README + OPERATOR_SETUP. - All six example recipes gained an explicit chain-enablement block (FEATURE_XMR/WOW on, BTC/LTC/GRIN off) so they no longer hard-fail Config::validate in production (default-on chains with empty sources). - Documented all 16 previously-undocumented env vars in .env.example (RESTART_APPLY_MODE, TOR_ADMIN_ONION, DEPLOYMENT_MODE, TIP_SHARE_BASE_URL, ...); RELAY.md gained the premium-post policy + RELAY_WRITE_ALLOWLIST_NPUBS; ADMIN_PUBKEYS noted as reserved/inert.
75 lines
2.9 KiB
Bash
75 lines
2.9 KiB
Bash
# ── Recipe: paid-access ──────────────────────────────────────────────────────
|
|
# A paid hosted wallet backend: a one-time fee gates NEW wallet creation (existing
|
|
# wallets and self-hosters bypass it). Non-custodial and pull-model — the backend
|
|
# only READS invoice status; funds go straight to your own wallet.
|
|
#
|
|
# ⚠️ Charging a fee has operational + legal implications — see ../LEGAL_AND_OPS.md.
|
|
#
|
|
# Start from ../../.env.example and apply the lines below. openssl rand -hex 32
|
|
# for each secret.
|
|
# ─────────────────────────────────────────────────────────────────────────────
|
|
|
|
SERVER_HOST=127.0.0.1
|
|
SERVER_PORT=8080
|
|
# REQUIRED: replace with YOUR real https domain. The your-domain.example placeholder
|
|
# is rejected at boot in production (Nostr identity is on by default).
|
|
PUBLIC_API_URL=https://api.your-domain.example/api/v1
|
|
ENVIRONMENT=production
|
|
|
|
DATABASE_URL=postgresql:///smirk?host=/var/run/postgresql
|
|
|
|
JWT_SECRET=
|
|
SEED_FINGERPRINT_PEPPER=
|
|
REFRESH_TOKEN_PEPPER=
|
|
IP_SALT=
|
|
ALTCHA_HMAC_KEY=
|
|
ADMIN_KEY_INTEGRITY_SECRET=
|
|
|
|
# Pay-to-register: a settled invoice is required to create a new wallet. Compose
|
|
# with PoW if you like (FEATURE_POW is the master switch; POW_REQUIRED alone is
|
|
# inert). Returning wallets never pay again.
|
|
FEATURE_POW=true
|
|
POW_REQUIRED=true
|
|
REGISTRATION_REQUIRE_INVITE=false
|
|
REGISTRATION_REQUIRE_PAYMENT=true
|
|
|
|
# Processor (BTCPay-compatible; also served by xmrcheckout / wowcheckout). Price
|
|
# is fiat-denominated here (payable in any coin the processor offers).
|
|
PAYMENT_PROVIDER=btcpay
|
|
PAYMENT_PROVIDER_URL=https://pay.your-domain.example
|
|
PAYMENT_STORE_ID=
|
|
PAYMENT_API_KEY=
|
|
PAYMENT_AMOUNT=5
|
|
PAYMENT_CURRENCY=USD
|
|
PAYMENT_CONFIRMATIONS=1
|
|
PAYMENT_EXPIRES_MINUTES=60
|
|
|
|
WALLET_RESTORE_POLICY=bounded
|
|
WALLET_MAX_RESTORE_DEPTH_DAYS=365
|
|
FEATURE_PRICES=true
|
|
FEATURE_TIPS=false
|
|
RELAY_ENABLED=false
|
|
|
|
# ── Chains: enable ONLY what this recipe wires up ────────────────────────────
|
|
# FAIL-CLOSED RULE: in production, an ENABLED chain with no source configured makes
|
|
# the server REFUSE TO BOOT. Every FEATURE_* chain defaults to true, so this recipe
|
|
# turns off the chains it does not wire up. It wires up Monero + Wownero (the
|
|
# XMR_/WOW_ blocks below); fill their *_LWS_ADMIN_KEY and it boots. To add BTC/LTC
|
|
# (electrum URL) or GRIN (GRIN_OWNER_API_SECRET + wiring), configure the source
|
|
# first, THEN flip its flag to true.
|
|
FEATURE_XMR=true
|
|
FEATURE_WOW=true
|
|
FEATURE_BTC=false
|
|
FEATURE_LTC=false
|
|
FEATURE_GRIN=false
|
|
|
|
# Chain endpoints — see ../../.env.example.
|
|
XMR_LWS_URL=
|
|
XMR_LWS_ADMIN_URL=
|
|
XMR_LWS_ADMIN_KEY=
|
|
XMR_DAEMON_URL=
|
|
WOW_LWS_URL=
|
|
WOW_LWS_ADMIN_URL=
|
|
WOW_LWS_ADMIN_KEY=
|
|
WOW_DAEMON_URL=
|