Bitget Launchpool Pipeline
Overview
Для Bitget PoolX используется browser scraping через Playwright. Прямой HTTP-клиент без браузерного контекста часто блокируется Cloudflare.
Текущая реализация:
- ScrapeBitgetLaunchpoolWorkflow — получает структурированный список PoolX проектов/подпулов.
- SyncBitgetLaunchpoolWorkflow — запускает scraping и ingests snapshots в Timescale через SQL function.
Код:
- internal/worker/activities/scrape_bitget_launchpool.go
- internal/worker/activities/sync_bitget_launchpool.go
- internal/db/migrations/00013_bitget_launchpool_snapshot_schema.sql
- internal/db/migrations/00014_bitget_launchpool_aggregates_policies.sql
Web Endpoints (UI)
Primary:
- https://www.bitget.com/events/poolx
- https://www.bitget.com/events/poolx/<product_id>
Captured Data Sources
Внутри browser session используются:
- POST /v1/finance/poolx/product/page/list/new — overview list (status: waitStart/running/over);
- POST /v1/finance/poolx/product/count — счетчики по статусам;
- window.__NEXT_DATA__.props.pageProps.productInfo на detail page — SSR snapshot detail для активных/upcoming проектов.
Статусы источника (Bitget):
- 0 = WAIT_ONLINE
- 1 = WAIT_FOR_START
- 2 = Subscribing
- 3 = Mining
- 4 = End
Маппинг в внутренний статус:
- 0,1 -> Upcoming
- 2,3 -> Active
- 4 -> Ended
- иначе Unknown
Storage Contract
SQL ingestion entrypoint:
- ingest_bitget_launchpool_snapshot($1::jsonb)
Payload source:
- request path: /playwright/bitget/launchpool
- source marker: playwright
- projects payload: []models.BitgetLaunchpoolProject
Target tables:
- fct_bitget_launchpool_snapshot
- fct_bitget_launchpool_subpool_snapshot
- fct_bitget_launchpool_response_snapshot
- fct_bitget_launchpool_quarantine
- fct_bitget_launchpool_5min
- fct_bitget_launchpool_daily
Manual Runs
Scraping only:
docker compose exec -T temporal temporal workflow start \
--address temporal:7233 --namespace default --task-queue default \
--type ScrapeBitgetLaunchpoolWorkflow \
--workflow-id scrape-bitget-launchpool-manual-$(date +%s) \
--input '{"include_details":true}'
Scraping + ingestion:
docker compose exec -T temporal temporal workflow start \
--address temporal:7233 --namespace default --task-queue default \
--type SyncBitgetLaunchpoolWorkflow \
--workflow-id sync-bitget-launchpool-manual-$(date +%s) \
--input '{"include_details":true}'
Diagnostics Artifacts
- Request/response samples:
docs/api/bitget-launchpool-requests.json