Outward-facing product API and operator console for wallet-native alerting on Sui.
Sui Alert Ops turns a bundle of lower-level platform capabilities into one product surface that a buyer, design partner, or grant reviewer can open today. From one console, teams can sign in with Google or a Sui wallet, inspect readiness, review alerts, issue API keys, configure webhooks, and replay incidents.
- buyers want a product, not a list of backend services
- grant reviewers want proof that the product can be opened and verified quickly
- operators need one flow for auth, alert review, webhook setup, and incident replay
- platform capabilities still exist underneath, but this repo packages them into one sellable service
- Google-ready operator login surface and real Sui wallet signature login
- persistent monitors, webhook destinations, delivery history, and API keys
GET /v1/alert-ops/readinessfor demo / pilot / production status checks- real webhook signing and test delivery flows
- replayable alert evidence and operator console walkthrough
- public deployment artifacts with Docker, Caddy, and systemd examples
- GitHub Actions CI for backend validation, smoke checks, and browser E2E
- Sui protocol teams that need treasury, risk, or whale monitoring
- market-making or operations teams that need webhook-based alert routing
- ecosystem projects that want a buyer-facing or grant-facing demo quickly
- internal operators who need Google access first and wallet-native actions second
- Product go-live guide:
docs/go-live.md - Design partner pilot plan:
docs/design-partner-pilot.md - Grant package outline:
docs/grant-package.md - Google login launch:
docs/google-login-launch.md - Domain and DNS setup:
docs/domain-dns-setup.md - Public deployment plan:
docs/plans/2026-03-09-public-deployment.md
bash scripts/run-local.shDefault local URLs:
- console:
http://127.0.0.1:8088/console - health:
http://127.0.0.1:8088/health - readiness:
http://127.0.0.1:8088/v1/alert-ops/readiness
Notes:
- default port is
PRODUCT_API_PORT=8088 - wallet signature login uses a bundled Node verifier at runtime, so
nodemust be available on the host - local state persists to
data/product-api-state.json, so created monitors, webhook destinations, deliveries, and API keys survive restarts
The fastest way to get a shareable buyer-facing or grant-facing URL is the included Docker + Caddy stack.
./scripts/init-production-env.sh alertops.example.com example.com
./scripts/check-production-env.sh
./scripts/deploy-public.sh
./scripts/verify-public-demo.sh https://alertops.example.comDeployment assets included in this repo:
Dockerfiledeploy/docker-compose.public.ymldeploy/Caddyfiledeploy/sui-alert-ops.service.env.production.example
Manual alternative:
cp .env.production.example .env.production
cd deploy
docker compose --env-file ../.env.production -f docker-compose.public.yml up -d --buildOpen /console and walk through:
- sign in with Google, wallet, or demo fallback
- show
Go-Live Readiness - load overview and live alerts
- create a monitor from a template
- create a webhook destination
- send a signed test webhook
- open replay evidence for one alert
- issue one API key and validate it
This gives reviewers a complete story: access, readiness, monitoring, delivery, and investigation.
Overview: workspace, usage, and product summaryAlerts: alert feed and investigation entry pointMonitor Builder: rule-template-based monitor creationDestinations: webhook configuration and signed test deliveryReplay: evidence replay for incident investigationAuth + Access: Google login, Sui wallet login, session auth, and API key validation
Internal supporting capabilities such as execution reads, risk checks, tenant plumbing, and indexer-backed data remain available behind this service, but they are no longer the primary outward-facing story.
Real sign-in paths:
- Google popup login backed by a verified Google ID token
- Sui wallet signature login backed by a server-issued nonce and signature verification
Compatibility path:
POST /v1/auth/loginremains available as a fast demo fallback and still requires a valid Sui wallet address
Access model:
- product endpoints under
/v1/*require either an authenticated session or a validatedX-API-Key, except for auth routes - wallet login remains the required path for wallet-bound actions such as API key generation and webhook provisioning
- Google login is the best first step for buyers or grant reviewers who should inspect the product before connecting a wallet
product-api now ships its execution, alerting, tenant, replay, API key, and webhook capabilities in-process.
Session and identity configuration:
PRODUCT_API_SESSION_SECRETPRODUCT_API_SESSION_TTLPRODUCT_API_SESSION_COOKIE_SECUREPRODUCT_API_WALLET_CHALLENGE_TTLPRODUCT_API_PUBLIC_ORIGINPRODUCT_API_SUI_NETWORKPRODUCT_API_GOOGLE_CLIENT_IDPRODUCT_API_GOOGLE_HOSTED_DOMAINPRODUCT_API_DATA_FILE
No other backend service is required for the current product surface. Public rollout now depends on auth, persistence, and deployment posture rather than separate backing services.
Primary product routes:
GET /healthGET /consoleGET /v1/alert-ops/manifestGET /v1/alert-ops/readinessGET /v1/alert-ops/overviewGET /v1/alert-ops/alertsGET /v1/alert-ops/destinationsPOST /v1/alert-ops/destinationsPOST /v1/alert-ops/destinations/testGET /v1/alert-ops/deliveriesPOST /v1/alert-ops/deliveries/:deliveryId/retryGET /v1/alert-ops/replays/:evidenceId
Auth routes:
GET /v1/auth/providersPOST /v1/auth/google/verifyPOST /v1/auth/wallet/noncePOST /v1/auth/wallet/verifyPOST /v1/auth/loginPOST /v1/auth/api-key/validateGET /v1/auth/sessionPOST /v1/auth/logout
Compatibility and internal capability routes:
POST /v1/risk/checkGET /v1/replays/:evidenceIdGET /v1/execution/summariesGET /v1/alertsPOST /v1/alerts/destinationsPOST /v1/alerts/destinations/testGET /v1/projects/meGET /v1/projects/me/usageGET /v1/projects/me/api-keysPOST /v1/projects/me/api-keys
go test ./... -count=1
PRODUCT_API_SMOKE_RUN_SERVER=true bash scripts/smoke.sh
npm run test:e2eWhat verification covers:
- health and auth provider exposure
- readiness status
- demo fallback login
- real Sui wallet nonce, sign, and verify flow
- API key create, list, and validate
- destination create, signed test delivery, history, and retry path
- risk and replay happy path
- browser-based console walkthrough and logout relock flow
If Playwright browser downloads are blocked in your network, local E2E uses the installed Google Chrome channel by default. CI installs Playwright Chromium automatically.
npm install
npm run build:wallet-authIf you want to keep placeholders and wire real values later:
cp .env.example .env.local
PRODUCT_API_ENV_FILE=.env.local bash scripts/run-local.sh