Test lab
TSI dev checks against …. Sign in with Dynamic (ZeroDev wallet) and the legacy Supabase user model; the BFF stores the main-api bearer JWT in an httpOnly cookie.
Login
Same flow as legacy co2trust storefront: Dynamic widget → validate JWT (server) → upsert users / users_to_dynamic in Supabase → POST /co2trust-services/v1/users/auth with backend secret → httpOnly co2t_console_jwt.
Loading Dynamic login…
Direct messages (chat lab)
sign in required — mirrors co2trust-site /api/chat/direct-messages/* flow.
Supabase & messaging tests
Server-side BFF routes use SUPABASE_SERVICE_ROLE_API_KEY only on the server. Requires Dynamic login (BFF JWT cookie). Test messages are tagged tsi-console-test-* for wipe cleanup.
sign in required — Supabase pings and messaging writes need an active session.
Connectivity
Messaging smoke
Sends a tagged DM to Supabase user tsi-console-test@co2t.earth (must exist in legacy users table). Sign in as a different account than the test receiver.
Test data
Uses deploy-console BACKEND_SECRET_KEY server-side (admin JWT optional). Seeds tagged rows: user tsi-console-test-user, supplier tsi-console-test-supplier, product SKU prefix. Wipe only deletes tsi-console-test-* ids.
Platform data explorer
Fetch real DB entities via the BFF proxy. Sign in on Test lab first for JWT-backed routes. Look for pokepocket supplier, products with source=pricecharting or storefront=pokepocket metadata, and the seeded Mankey smoke card (PC-grghtowpqs7m4dzqwrwh57hdhu). Raw JSON is shown below each run.
Pick a quick link to load live API JSON.
Parity checks
Mirrors test:admin-smoke GETs; uses JWT cookie when set.
Backend capability explorer
Every main-api capability, grouped by router. Each request goes through the BFF proxy (/api/tools/proxy) using the signed-in JWT cookie. Edit the path (ids, query) or JSON body before running. Items marked needs backend depend on the RabbitMQ/sync/payments services being healthy.
System & docs
Public health and OpenAPI surface (no auth required).
- GETHealth probe
- GETOpenAPI schema
- GETSwagger /docs (HTML)
Pokepocket (reference storefront)
Supplier-scoped entities for the pokepocket proof point on TSI Postgres.
- GETPokepocket supplier
- GETPokepocket products
- GETPokepocket supplier orders
- GETMankey product by id
Smoke card id — compare with Platform ops Mankey row.
- GETCatalog page (find Mankey SKU)
Filter client-side for sku PC-grghtowpqs7m4dzqwrwh57hdhu (same as pokepocket BFF).
- GETMy orders (signed-in)
Requires JWT — mirrors pokepocket /account/orders BFF.
- GETMy purchased orders
Requires JWT — purchase history for account pages.
- GETProduct orders (checkout)
Stripe checkout path — requires signed-in user.
Products
- GETList products
- GETGet product by id
- GETDropdown products (DELIVERY|CREDIT)
Suppliers & traders
- GETList suppliers
- GETSupplier ids
- GETGet seeded supplier
- GETDropdown suppliers
- GETList traders
- GETGet trader by id
Orders
- GETList orders (active)
- GETBundleable orders
- GETMy orders
- GETMy purchased orders
- GETGet order by id
- GETOrders by supplier
- GETOrder by nft id
- POSTCreate order
Body schema in /openapi.json (OrderCreate).
Product orders & bundles
- GETList product orders
- GETMy product orders
- GETGet product order by id
- POSTCreate product order
- GETList bundle orders
- GETGet bundle order by id
- POSTCreate bundle order
NFTs
- GETList nfts
- GETMintable nfts
- GETMy nfts
- GETGet nft by id
- GETGet nft by token id
Mailing list
- GETList subscribers
- GETGet subscriber by email
- POSTSubscribe
- DELETEUnsubscribe
Config upsert
Generic create/update for config models (see /openapi.json for model names).
- POSTCreate model row
- PUTUpdate model row
Payments & bank
- GETPayment stats (all)
- GETPayment stats (global)
- GETPayment stats (quarterly)
- GETPayment transactions
- GETMy payment transactions
- GETBank accounts
- GETMy transfers
- GETGet transfer by id
- POSTCreate transferneeds backend
Bank/payment writes depend on the healthy backend + payment services.
Puro / subgraph
Credit types, methodologies, retirements and inventory (subgraph-synced).
- GETCredit types
- GETMethodologies
- GETRetirementsneeds backend
Populated by subgraph sync.
- GETRetirement transactionsneeds backend
Populated by subgraph sync.
- GETInventoryneeds backend
Populated by subgraph sync.
Sync triggers (RabbitMQ)
Enqueue subgraph/orders sync jobs. Require RabbitMQ healthy on main-api.
- POSTSync order by hashneeds backend
- POSTSync counter by user addressneeds backend
- POSTSync balances by addressneeds backend
- POSTSync nft by token idneeds backend
Console URL: · env: dev