dubs-server 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +280 -0
- package/CLAUDE.md +46 -0
- package/CONNECT4_PRODUCTION_DEPLOY.md +155 -0
- package/CURRENT_SESSION.md +171 -0
- package/CURRENT_SESSION_DRAW.md +516 -0
- package/MARCH_MADNESS_SURVIVOR.md +254 -0
- package/PANDA.md +166 -0
- package/Procfile +4 -0
- package/README.md +476 -0
- package/controllers/livescoresController.js +376 -0
- package/controllers/pickemController.js +554 -0
- package/controllers/survivorAdminController.js +887 -0
- package/controllers/survivorController.js +623 -0
- package/cron/oracleMonitor.js +77 -0
- package/cron/pickemOracleMonitor.js +73 -0
- package/data/jackpot-history.json +952 -0
- package/data/ncaaTeams.js +406 -0
- package/documentation/API_SECURITY_GUIDE.md +327 -0
- package/documentation/ARCADE_API.md +593 -0
- package/documentation/ARCADE_IMPLEMENTATION_SUMMARY.md +399 -0
- package/documentation/ARCADE_QUICKSTART.md +242 -0
- package/documentation/AUTOMATIC_MODE_ORACLE.md +321 -0
- package/documentation/BUG_FIX_COHORT_DATE_DISPLAY.md +171 -0
- package/documentation/CLAIM_MIGRATION_INSTRUCTIONS.md +52 -0
- package/documentation/CLAIM_STATUS_FIX.md +67 -0
- package/documentation/CLI_TOOL_GUIDE.md +372 -0
- package/documentation/COHORT_RETENTION_ANALYSIS.md +295 -0
- package/documentation/COHORT_RETENTION_IMPLEMENTATION_COMPLETE.md +461 -0
- package/documentation/COHORT_RETENTION_SUMMARY.md +204 -0
- package/documentation/COMPLETE_PROJECT_SUMMARY.md +490 -0
- package/documentation/DATABASE_QUERIES.md +269 -0
- package/documentation/DATABASE_RETENTION_POLICY.md +390 -0
- package/documentation/DATABASE_SETUP_GUIDE.md +361 -0
- package/documentation/DATABASE_SETUP_SUMMARY.md +247 -0
- package/documentation/DEMO_API_CURL_COMMANDS.md +656 -0
- package/documentation/DEPLOYMENT_SUMMARY.txt +100 -0
- package/documentation/DUPLICATE_NOTIFICATIONS_FIXED.md +201 -0
- package/documentation/EXCHANGE_RATES_INTEGRATION.md +371 -0
- package/documentation/FINAL_API_PROTECTION_TABLE.md +175 -0
- package/documentation/GAME_START_NOTIFICATIONS_DEPLOYMENT.md +256 -0
- package/documentation/GAME_START_NOTIFICATIONS_INTEGRATION.md +275 -0
- package/documentation/HEROKU_DEPLOYMENT.md +134 -0
- package/documentation/HEROKU_SCHEDULER_SETUP.md +271 -0
- package/documentation/JACKPOT_API.md +521 -0
- package/documentation/JACKPOT_DEPLOYMENT_GUIDE.md +362 -0
- package/documentation/JWT_IMPLEMENTATION_SUMMARY.md +373 -0
- package/documentation/JWT_QUICK_SETUP.md +268 -0
- package/documentation/JWT_TESTING_GUIDE.md +404 -0
- package/documentation/KEEPER_RECOVERY_GUIDE.md +381 -0
- package/documentation/KEEPER_SETUP.md +206 -0
- package/documentation/KEEPER_STATE_MACHINE.md +423 -0
- package/documentation/LATEST_PRODUCTION_SETUP.md +387 -0
- package/documentation/LOCAL_VOTING_TEST.md +279 -0
- package/documentation/ORACLE_FIXES_SUMMARY.md +188 -0
- package/documentation/ORACLE_POSTGRESQL_UPDATE.md +202 -0
- package/documentation/PAYMENT_DEPLOYMENT.md +209 -0
- package/documentation/PNL_TRACKING_SETUP.md +189 -0
- package/documentation/PREVENTING_LOCKUP_ERRORS.md +472 -0
- package/documentation/PRODUCTION_READY_SUMMARY.md +227 -0
- package/documentation/PUBLIC_VS_PRIVATE_ENDPOINTS.md +278 -0
- package/documentation/QUICK_AUTH_SETUP.md +99 -0
- package/documentation/QUICK_DEPLOY.md +224 -0
- package/documentation/QUICK_FIX.md +114 -0
- package/documentation/QUICK_START.md +152 -0
- package/documentation/REFEREE_MODE_GUIDE.md +392 -0
- package/documentation/RETENTION_CORE_ACTION_UPDATE.md +313 -0
- package/documentation/RETENTION_UPDATE_SUMMARY.md +108 -0
- package/documentation/RUN_MIGRATION_NOW.md +39 -0
- package/documentation/SCRIPTS_UPDATE_SUMMARY.md +251 -0
- package/documentation/SETUP_GUIDE.md +184 -0
- package/documentation/STATE_MACHINE_IMPLEMENTATION.md +250 -0
- package/documentation/TELEGRAM_NOTIFICATIONS_DIAGNOSIS.md +361 -0
- package/documentation/UNIFIED_ARCHITECTURE.md +231 -0
- package/documentation/VOTING_DEPLOYMENT_SUMMARY.md +392 -0
- package/documentation/WEBSOCKET_ARCHITECTURE.md +881 -0
- package/documentation/WHAT_WE_BUILT_TODAY.md +369 -0
- package/documentation/latest/LATEST_PRODUCTION_SETUP.md +865 -0
- package/ecosystem.config.js +65 -0
- package/env.template +125 -0
- package/middleware/apiKeyAuth.js +136 -0
- package/middleware/authenticate.js +214 -0
- package/middleware/developerUserAuth.js +76 -0
- package/middleware/socketAuth.js +69 -0
- package/package.json +49 -0
- package/postman/Dubs-API-v1-With-Voting.postman_collection.json +555 -0
- package/postman/Dubs-API-v1.postman_collection.json +205 -0
- package/postman/Dubs_Developer_API.postman_collection.json +662 -0
- package/postman/QUICKSTART.md +118 -0
- package/postman/QUICK_REFERENCE.md +246 -0
- package/postman/README.md +71 -0
- package/postman/VOTING_API_GUIDE.md +426 -0
- package/refactor/Animations.md +148 -0
- package/refactor/Chat.md +252 -0
- package/routes/actionsRoutes.js +699 -0
- package/routes/adminRoutes.js +370 -0
- package/routes/analyticsRoutes.js +1262 -0
- package/routes/arcadeRoutes.js +557 -0
- package/routes/authRoutes.js +2310 -0
- package/routes/avatarRoutes.js +85 -0
- package/routes/botRoutes.js +211 -0
- package/routes/chatRoutes.js +377 -0
- package/routes/cryptoPriceRoutes.js +105 -0
- package/routes/developerRoutes.js +4201 -0
- package/routes/deviceRoutes.js +214 -0
- package/routes/dmRoutes.js +167 -0
- package/routes/esportsRoutes.js +806 -0
- package/routes/exchangeRateRoutes.js +233 -0
- package/routes/gamesRoutes.js +3028 -0
- package/routes/jackpotRoutes.js +754 -0
- package/routes/keeperMonitoringRoutes.js +156 -0
- package/routes/keeperWebhookRoutes.js +466 -0
- package/routes/livescoresRoutes.js +31 -0
- package/routes/pickemAdminRoutes.js +199 -0
- package/routes/pickemRoutes.js +231 -0
- package/routes/playerStatsRoutes.js +147 -0
- package/routes/portfolioRoutes.js +217 -0
- package/routes/promoRoutes.js +418 -0
- package/routes/referralEarningsRoutes.js +392 -0
- package/routes/socialRoutes.js +459 -0
- package/routes/sportsRoutes.js +1271 -0
- package/routes/survivorAdminRoutes.js +345 -0
- package/routes/survivorRoutes.js +756 -0
- package/routes/uploadRoutes.js +256 -0
- package/routes/userProfileRoutes.js +244 -0
- package/routes/whatsNewRoutes.js +331 -0
- package/scripts/.claude/settings.local.json +15 -0
- package/scripts/README.md +170 -0
- package/scripts/RESTART_EVERYTHING.sh +104 -0
- package/scripts/add-claim-columns.sql +48 -0
- package/scripts/add-crypto-prices-cache.sql +27 -0
- package/scripts/add-exchange-rates-cache.sql +40 -0
- package/scripts/add-game-invite-column.sql +23 -0
- package/scripts/add-game-invite-notification.sql +33 -0
- package/scripts/add-game-invite-telegram-pref.sql +16 -0
- package/scripts/add-game-joined-notification.sql +16 -0
- package/scripts/add-game-joined-pref.js +40 -0
- package/scripts/add-game-joined-preference.sql +6 -0
- package/scripts/add-game-start-notifications.sql +41 -0
- package/scripts/add-notification-flags-to-games.sql +55 -0
- package/scripts/add-pending-game-dismissals.sql +19 -0
- package/scripts/add-preferred-currency.sql +34 -0
- package/scripts/add-winner-columns.js +61 -0
- package/scripts/add_mention_system.sql +53 -0
- package/scripts/add_payment_system.sql +96 -0
- package/scripts/add_sports_event_id_column.sql +22 -0
- package/scripts/analyze-cohort-data-heroku.js +276 -0
- package/scripts/analyze-cohort-data.js +295 -0
- package/scripts/analyze-prod-cohorts.sh +10 -0
- package/scripts/backfill-matchup-images.js +245 -0
- package/scripts/backfill-missing-signatures.js +175 -0
- package/scripts/backfill-referral-earnings.js +202 -0
- package/scripts/check-chat-schema.js +130 -0
- package/scripts/check-db.sh +14 -0
- package/scripts/check_oracle_in_game.js +54 -0
- package/scripts/cleanup-database.js +193 -0
- package/scripts/clear-notification-cache.js +85 -0
- package/scripts/convert-mnemonic.js +50 -0
- package/scripts/create-users-table.sql +44 -0
- package/scripts/debug-cohort-counts.js +248 -0
- package/scripts/debug-winner-calc.js +84 -0
- package/scripts/deploy-payment-system.sh +118 -0
- package/scripts/deploy-to-heroku.sh +63 -0
- package/scripts/diagnose-locked-round.js +143 -0
- package/scripts/dubs-cli.js +720 -0
- package/scripts/dump-account.js +65 -0
- package/scripts/find-vrf-offset.js +48 -0
- package/scripts/fix-chat-notifications-constraint.sql +122 -0
- package/scripts/fix-claim-columns.js +124 -0
- package/scripts/fix-constraint-now.js +44 -0
- package/scripts/fix-lock-timestamps.js +96 -0
- package/scripts/fix-locked-round.sh +126 -0
- package/scripts/fix-missing-badges.sql +91 -0
- package/scripts/fix-payment-notifications.sql +41 -0
- package/scripts/force-new-round.js +55 -0
- package/scripts/force-resolve-and-claim.js +278 -0
- package/scripts/important/README.md +115 -0
- package/scripts/important/authority-force-lock.js +197 -0
- package/scripts/important/authority-resolve-game.js +267 -0
- package/scripts/important/check-game-status.js +373 -0
- package/scripts/important/list-pending-games-by-version.js +270 -0
- package/scripts/important/reconcile-v1-v2-payouts.js +270 -0
- package/scripts/initialize-jackpot.js +111 -0
- package/scripts/jackpot/.claude/settings.local.json +10 -0
- package/scripts/jackpot/force-reset.js +84 -0
- package/scripts/jackpot/initialize-mainnet.js +100 -0
- package/scripts/jackpot/keeper.js +742 -0
- package/scripts/jackpot/status.js +107 -0
- package/scripts/jackpot/update-round-duration.js +143 -0
- package/scripts/keeper-bot.js +112 -0
- package/scripts/list-pending-games.js +131 -0
- package/scripts/migrate-chat-v2.js +127 -0
- package/scripts/migrate-chat-winners.js +84 -0
- package/scripts/migrate-chat.sh +17 -0
- package/scripts/migrate-game-invite.js +83 -0
- package/scripts/migrate-heroku-game-notifications.sh +159 -0
- package/scripts/migrations/001_analytics_tables.sql +422 -0
- package/scripts/migrations/002_add_matchup_image_url.sql +14 -0
- package/scripts/migrations/003_referral_earnings.sql +208 -0
- package/scripts/migrations/004_add_whats_new_notification_type.sql +62 -0
- package/scripts/migrations/005_add_connect4_your_turn_notification.sql +61 -0
- package/scripts/migrations/005_push_notifications.sql +55 -0
- package/scripts/migrations/006_add_draw_team_players.sql +28 -0
- package/scripts/migrations/006_add_game_cancelled_notification.sql +62 -0
- package/scripts/migrations/007_add_gif_url.sql +8 -0
- package/scripts/migrations/008_add_connect4_columns.sql +139 -0
- package/scripts/migrations/008_add_pool_tracking.sql +22 -0
- package/scripts/migrations/009_create_survivor_pool_tables.sql +174 -0
- package/scripts/migrations/010_add_survivor_pool_outcome.sql +28 -0
- package/scripts/migrations/011_create_developer_tables.sql +67 -0
- package/scripts/migrations/011_fix_keeper_tables.sql +85 -0
- package/scripts/migrations/012_create_developer_webhooks.sql +31 -0
- package/scripts/migrations/013_add_network_mode.sql +18 -0
- package/scripts/migrations/014_create_developer_app_users.sql +19 -0
- package/scripts/migrations/015_add_ui_config.sql +4 -0
- package/scripts/migrations/016_add_resolution_secret.sql +4 -0
- package/scripts/migrations/017_add_external_game_id.sql +3 -0
- package/scripts/migrations/018_create_pickem_tables.sql +115 -0
- package/scripts/migrations/019_expo_push_tokens.sql +19 -0
- package/scripts/migrations/create_whats_new_tables.sql +88 -0
- package/scripts/migrations/drop_live_games_tables.sql +34 -0
- package/scripts/open-jackpot-round.js +85 -0
- package/scripts/purge-all-data.sh +329 -0
- package/scripts/purge-all-data.sql +142 -0
- package/scripts/purge-heroku-data.sh +149 -0
- package/scripts/purge-heroku-data.sql +62 -0
- package/scripts/rebuild-heroku-database.sh +113 -0
- package/scripts/recover-funds.js +357 -0
- package/scripts/regenerate-epl-images.js +278 -0
- package/scripts/resize-s3-matchup-images.js +374 -0
- package/scripts/resolve-direct.js +88 -0
- package/scripts/resolve-mock-game.js +124 -0
- package/scripts/resolve-pickem-game.js +55 -0
- package/scripts/resolve-round-manual.js +83 -0
- package/scripts/resolve-stuck-game.js +382 -0
- package/scripts/resolve-stuck-round.js +42 -0
- package/scripts/run-connect4-migration.sh +16 -0
- package/scripts/run-mention-migration.sh +32 -0
- package/scripts/run-payment-migration.sh +51 -0
- package/scripts/run-preferred-currency-migration.sh +31 -0
- package/scripts/run-referral-earnings-migration.sh +32 -0
- package/scripts/run-survivor-outcome-migration.sh +16 -0
- package/scripts/seed-test-users.js +346 -0
- package/scripts/setup-auth-tables.js +78 -0
- package/scripts/setup-complete-database.sql +992 -0
- package/scripts/setup-database-fresh.sh +359 -0
- package/scripts/setup-heroku-keeper.sh +48 -0
- package/scripts/setup-keeper-database.js +83 -0
- package/scripts/setup-keeper-state-db.sql +110 -0
- package/scripts/setup-oracle.sh +39 -0
- package/scripts/setup-pnl-tracking.js +111 -0
- package/scripts/start-devnet.sh +14 -0
- package/scripts/test-arcade-devnet.sh +160 -0
- package/scripts/test-arcade-match.sh +109 -0
- package/scripts/test-automatic-mode.sh +239 -0
- package/scripts/test-connect4-cancel-claim.js +370 -0
- package/scripts/test-connect4-e2e.js +369 -0
- package/scripts/test-connect4-resolve.js +369 -0
- package/scripts/test-game-state-endpoint.js +136 -0
- package/scripts/test-invite-notification.js +86 -0
- package/scripts/test-jackpot-api.sh +71 -0
- package/scripts/test-poll-confirmation.js +267 -0
- package/scripts/test-resolve-game.js +271 -0
- package/scripts/test-resolve-signature.js +223 -0
- package/scripts/test-signature-preservation.js +124 -0
- package/scripts/test-state-machine.js +291 -0
- package/scripts/test-webhook-receiver.js +60 -0
- package/scripts/update-notification-constraint.js +52 -0
- package/scripts/verify-account-layout.js +145 -0
- package/scripts/verify-winner-algorithm.js +278 -0
- package/server.js +5259 -0
- package/services/arcadeMatchService.js +763 -0
- package/services/automaticGameOracle.js +1596 -0
- package/services/chatService.js +1612 -0
- package/services/connect4GameService.js +1049 -0
- package/services/connect4NotificationService.js +374 -0
- package/services/cryptoPriceService.js +223 -0
- package/services/customGameResolver.js +260 -0
- package/services/db.js +79 -0
- package/services/directMessageService.js +389 -0
- package/services/discordNotifications.js +160 -0
- package/services/exchangeRateService.js +289 -0
- package/services/expoPushService.js +314 -0
- package/services/gamesCacheService.js +539 -0
- package/services/jackpotHistory.js +331 -0
- package/services/jackpotService.js +856 -0
- package/services/keeperStateService.js +355 -0
- package/services/matchupImageService.js +591 -0
- package/services/notificationCacheService.js +407 -0
- package/services/pickemOracle.js +440 -0
- package/services/playerStatsService.js +389 -0
- package/services/portfolioService.js +555 -0
- package/services/promoService.js +757 -0
- package/services/promoTreasuryService.js +239 -0
- package/services/pushNotifications.js +353 -0
- package/services/redisService.js +422 -0
- package/services/referralEarningsService.js +728 -0
- package/services/s3Service.js +396 -0
- package/services/socialService.js +1202 -0
- package/services/survivorOracle.js +469 -0
- package/services/survivorSimulator.js +475 -0
- package/services/telegramNotifications.js +461 -0
- package/services/userProfileStatsService.js +1185 -0
- package/services/whatsNewService.js +388 -0
- package/utils/urlHelper.js +95 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# 🎮 Dubs API - Quick Start
|
|
2
|
+
|
|
3
|
+
## What Changed (Production-Ready Now!)
|
|
4
|
+
|
|
5
|
+
✅ **UUIDs instead of integers** - Professional game IDs
|
|
6
|
+
✅ **Address-based winners only** - No more confusing indices
|
|
7
|
+
✅ **Multi-game support** - Run unlimited games simultaneously
|
|
8
|
+
✅ **Production endpoints** - Real wallet signing support
|
|
9
|
+
✅ **Demo endpoints** - Easy testing with server-managed wallets
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Import Postman Collection
|
|
14
|
+
|
|
15
|
+
File: `Dubs-API.postman_collection.json`
|
|
16
|
+
|
|
17
|
+
You'll see **3 folders**:
|
|
18
|
+
1. **Demo Mode** - Server signs (for testing)
|
|
19
|
+
2. **Production Mode** - Client signs (for real users)
|
|
20
|
+
3. **Utilities** - Helper endpoints
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Demo Mode Workflow (Testing)
|
|
25
|
+
|
|
26
|
+
### Step 1: Create Game
|
|
27
|
+
Request: **"3. Create Game"**
|
|
28
|
+
|
|
29
|
+
Leave gameId blank - it auto-generates a UUID!
|
|
30
|
+
|
|
31
|
+
**Response:**
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"success": true,
|
|
35
|
+
"gameId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", ← Save this!
|
|
36
|
+
"message": "Game created, operator: jelli",
|
|
37
|
+
"gameAddress": "..."
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Step 2: Copy the UUID
|
|
42
|
+
|
|
43
|
+
**IMPORTANT:** Copy that UUID! You'll use it for everything else.
|
|
44
|
+
|
|
45
|
+
### Step 3: View Game
|
|
46
|
+
|
|
47
|
+
Request: **"4. View Game"**
|
|
48
|
+
|
|
49
|
+
Replace `PASTE_GAME_UUID_HERE` in URL with your UUID.
|
|
50
|
+
|
|
51
|
+
**Response shows player addresses:**
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"game": {
|
|
55
|
+
"players": [
|
|
56
|
+
"GvE3wSwh2HDpER7x3WXmipqH8Q9zDmHiAc8Qc8U8jTTc", ← Alice
|
|
57
|
+
"AuskVDhGKzZ9xWJaY5RKWzBZzeGuEYZ6mZXCDeTQCJcw" ← Bob
|
|
58
|
+
]
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Step 4: Alice & Bob Join
|
|
64
|
+
|
|
65
|
+
Requests: **"5. Alice Joins"** and **"6. Bob Joins"**
|
|
66
|
+
|
|
67
|
+
Replace `PASTE_GAME_UUID_HERE` with your UUID in both.
|
|
68
|
+
|
|
69
|
+
### Step 5: Distribute Using Addresses
|
|
70
|
+
|
|
71
|
+
Request: **"7. Distribute - Using Addresses"**
|
|
72
|
+
|
|
73
|
+
1. Replace `PASTE_GAME_UUID_HERE` with your UUID
|
|
74
|
+
2. Copy Alice & Bob's addresses from Step 3
|
|
75
|
+
3. Paste into `winners` array
|
|
76
|
+
|
|
77
|
+
**Result:**
|
|
78
|
+
- Jelli gets 10% operator fee 💰
|
|
79
|
+
- Alice & Bob split the rest 50/50
|
|
80
|
+
|
|
81
|
+
### Step 6: Verify Jelli Got Paid
|
|
82
|
+
|
|
83
|
+
Request: **"8. Check Jelli Got Paid"**
|
|
84
|
+
|
|
85
|
+
See Jelli's balance increased!
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## Production Mode (Real Wallets)
|
|
90
|
+
|
|
91
|
+
For integrating with Phantom/Solflare wallets:
|
|
92
|
+
|
|
93
|
+
1. **Build Transaction** - Server creates unsigned transaction
|
|
94
|
+
2. **Sign in Wallet** - User signs with Phantom
|
|
95
|
+
3. **Submit** - Send signed transaction to server
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Key Differences
|
|
100
|
+
|
|
101
|
+
| Feature | Demo Mode | Production Mode |
|
|
102
|
+
|---------|-----------|-----------------|
|
|
103
|
+
| Game ID | UUID (auto) | UUID (specify) |
|
|
104
|
+
| Wallets | Server-managed | User's wallet |
|
|
105
|
+
| Signing | Server signs | User signs |
|
|
106
|
+
| Winners | Addresses | Addresses |
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Try It Now!
|
|
111
|
+
|
|
112
|
+
1. Run requests 1-8 in **Demo Mode** folder
|
|
113
|
+
2. Use actual UUIDs (copy/paste from responses)
|
|
114
|
+
3. Use actual addresses for winners
|
|
115
|
+
4. Watch it work perfectly! 🎉
|
|
116
|
+
|
|
117
|
+
**No more technical debt!** Clean, professional API! 🚀
|
|
118
|
+
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# 🎮 Dubs API - Quick Reference
|
|
2
|
+
|
|
3
|
+
## 🌐 **Base URL (Devnet)**
|
|
4
|
+
```
|
|
5
|
+
https://dubs-server-dev-55d1fba09a97.herokuapp.com
|
|
6
|
+
```
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 📋 **All Endpoints**
|
|
11
|
+
|
|
12
|
+
### **Game Info**
|
|
13
|
+
```
|
|
14
|
+
GET /api/v1/prod/game/:gameId
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### **Create Game**
|
|
18
|
+
```
|
|
19
|
+
POST /api/v1/prod/transaction/build/create
|
|
20
|
+
|
|
21
|
+
Body:
|
|
22
|
+
{
|
|
23
|
+
"creatorAddress": "string",
|
|
24
|
+
"buyIn": number (SOL),
|
|
25
|
+
"maxPlayers": number (2-20),
|
|
26
|
+
"operatorFee": number (0-100),
|
|
27
|
+
"votingEnabled": boolean,
|
|
28
|
+
"gameMode": number (0=Manual, 1=Democratic, 2=Referee), ← NEW!
|
|
29
|
+
"refereeAddress": string (optional, required for Referee mode), ← NEW!
|
|
30
|
+
"refereeCommission": number (0-100, typical 10-20%) ← NEW!
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
Game Modes:
|
|
34
|
+
0 = Manual (Creator chooses winner)
|
|
35
|
+
1 = Democratic (Players vote, majority rules)
|
|
36
|
+
2 = Referee (Expert judge decides, earns commission)
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### **Join Game**
|
|
40
|
+
```
|
|
41
|
+
POST /api/v1/prod/transaction/build/join
|
|
42
|
+
|
|
43
|
+
Body:
|
|
44
|
+
{
|
|
45
|
+
"playerAddress": "string",
|
|
46
|
+
"gameId": "uuid"
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### **Cast Vote** 🗳️ NEW!
|
|
51
|
+
```
|
|
52
|
+
POST /api/v1/prod/transaction/build/cast-vote
|
|
53
|
+
|
|
54
|
+
Body:
|
|
55
|
+
{
|
|
56
|
+
"voterAddress": "string",
|
|
57
|
+
"gameId": "uuid",
|
|
58
|
+
"votedFor": "string" (player address)
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### **Distribute by Vote** 🗳️ NEW!
|
|
63
|
+
```
|
|
64
|
+
POST /api/v1/prod/transaction/build/distribute-by-vote
|
|
65
|
+
|
|
66
|
+
Body:
|
|
67
|
+
{
|
|
68
|
+
"creatorAddress": "string",
|
|
69
|
+
"gameId": "uuid"
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
{
|
|
74
|
+
"transaction": "base64",
|
|
75
|
+
"winners": ["address1", "address2"],
|
|
76
|
+
"voteCounts": {
|
|
77
|
+
"address1": 2,
|
|
78
|
+
"address2": 1
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### **Distribute Manually**
|
|
84
|
+
```
|
|
85
|
+
POST /api/v1/prod/transaction/build/distribute
|
|
86
|
+
|
|
87
|
+
Body:
|
|
88
|
+
{
|
|
89
|
+
"creatorAddress": "string",
|
|
90
|
+
"gameId": "uuid",
|
|
91
|
+
"winners": ["address1", "address2"]
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### **Submit Transaction**
|
|
96
|
+
```
|
|
97
|
+
POST /api/v1/prod/transaction/submit
|
|
98
|
+
|
|
99
|
+
Body:
|
|
100
|
+
{
|
|
101
|
+
"signedTransaction": "base64"
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
## 🎯 **Response Format**
|
|
108
|
+
|
|
109
|
+
### **Game Info Response:**
|
|
110
|
+
```json
|
|
111
|
+
{
|
|
112
|
+
"exists": true,
|
|
113
|
+
"game": {
|
|
114
|
+
"gameId": 12345,
|
|
115
|
+
"authority": "CreatorAddr",
|
|
116
|
+
"buyIn": 0.5,
|
|
117
|
+
"maxPlayers": 3,
|
|
118
|
+
"players": ["P1", "P2", "P3"],
|
|
119
|
+
"totalPot": 1.5,
|
|
120
|
+
"isActive": true,
|
|
121
|
+
"votes": [
|
|
122
|
+
{"voter": "P1", "votedFor": "P2"},
|
|
123
|
+
{"voter": "P2", "votedFor": "P2"}
|
|
124
|
+
],
|
|
125
|
+
"votingEnabled": true
|
|
126
|
+
},
|
|
127
|
+
"calculated": {
|
|
128
|
+
"operatorFeeAmount": "0.1500",
|
|
129
|
+
"prizePool": "1.3500"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 🗳️ **Voting Cheat Sheet**
|
|
137
|
+
|
|
138
|
+
### **Majority Formula:**
|
|
139
|
+
```
|
|
140
|
+
Needed Votes = (Total Players / 2) + 1
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### **Examples:**
|
|
144
|
+
```
|
|
145
|
+
2 players → Need 2 votes
|
|
146
|
+
3 players → Need 2 votes
|
|
147
|
+
4 players → Need 3 votes
|
|
148
|
+
5 players → Need 3 votes
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### **Voting States:**
|
|
152
|
+
```
|
|
153
|
+
0 votes → "Not started"
|
|
154
|
+
< majority → "In progress"
|
|
155
|
+
≥ majority → "Can distribute!"
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## ⚡ **Quick Tests**
|
|
161
|
+
|
|
162
|
+
### **Test 1: Create & Join**
|
|
163
|
+
```bash
|
|
164
|
+
curl -X POST {{baseUrl}}/api/v1/prod/transaction/build/create \
|
|
165
|
+
-H "Content-Type: application/json" \
|
|
166
|
+
-d '{"creatorAddress":"YOUR_ADDRESS","buyIn":0.5,"maxPlayers":2,"operatorFee":10,"votingEnabled":true}'
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### **Test 2: Cast Vote**
|
|
170
|
+
```bash
|
|
171
|
+
curl -X POST {{baseUrl}}/api/v1/prod/transaction/build/cast-vote \
|
|
172
|
+
-H "Content-Type: application/json" \
|
|
173
|
+
-d '{"voterAddress":"YOUR_ADDRESS","gameId":"GAME_UUID","votedFor":"PLAYER_ADDRESS"}'
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### **Test 3: Check Game**
|
|
177
|
+
```bash
|
|
178
|
+
curl {{baseUrl}}/api/v1/prod/game/GAME_UUID
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 🎮 **Postman Collections**
|
|
184
|
+
|
|
185
|
+
### **Latest (With Voting):**
|
|
186
|
+
```
|
|
187
|
+
postman/Dubs-API-v1-With-Voting.postman_collection.json
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**Includes:**
|
|
191
|
+
- ✅ All production endpoints
|
|
192
|
+
- ✅ Democratic voting workflow
|
|
193
|
+
- ✅ Manual distribution workflow
|
|
194
|
+
- ✅ Demo/test endpoints
|
|
195
|
+
- ✅ Auto-save game IDs
|
|
196
|
+
- ✅ Example responses
|
|
197
|
+
|
|
198
|
+
### **Guide:**
|
|
199
|
+
```
|
|
200
|
+
postman/VOTING_API_GUIDE.md
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
## 📊 **Status Codes**
|
|
206
|
+
|
|
207
|
+
```
|
|
208
|
+
200 - Success
|
|
209
|
+
400 - Bad Request (invalid parameters)
|
|
210
|
+
404 - Game Not Found
|
|
211
|
+
500 - Server Error (check Heroku logs)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## 🔧 **Environment Setup**
|
|
217
|
+
|
|
218
|
+
### **Postman Variables:**
|
|
219
|
+
```
|
|
220
|
+
baseUrl: https://dubs-server-dev-55d1fba09a97.herokuapp.com
|
|
221
|
+
walletAddress: YOUR_SOLANA_ADDRESS
|
|
222
|
+
gameId: (auto-saved from create response)
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## 🚀 **Live Testing**
|
|
228
|
+
|
|
229
|
+
1. Import Postman collection
|
|
230
|
+
2. Set `walletAddress` variable
|
|
231
|
+
3. Run "Democratic Game Flow" folder
|
|
232
|
+
4. Sign transactions with Phantom
|
|
233
|
+
5. Submit via `/transaction/submit`
|
|
234
|
+
6. Watch democracy in action! 🗳️
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
**Need Help?**
|
|
239
|
+
- Full docs: `README.md`
|
|
240
|
+
- Voting guide: `postman/VOTING_API_GUIDE.md`
|
|
241
|
+
- Heroku logs: `heroku logs --tail -a dubs-server-dev`
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
**Built with ❤️ on Solana** 🎮🗳️⛓️
|
|
246
|
+
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# 🎮 Dubs API - Postman Collection
|
|
2
|
+
|
|
3
|
+
## Import
|
|
4
|
+
|
|
5
|
+
1. Open Postman
|
|
6
|
+
2. Click **Import**
|
|
7
|
+
3. Select: `Dubs-API.postman_collection.json`
|
|
8
|
+
|
|
9
|
+
## Run in Order
|
|
10
|
+
|
|
11
|
+
### Quick Test Flow:
|
|
12
|
+
|
|
13
|
+
1. **Health Check** - Verify server
|
|
14
|
+
2. **Create Game #1** - Jelli as operator
|
|
15
|
+
3. **Alice Joins Game #1**
|
|
16
|
+
4. **Bob Joins Game #1**
|
|
17
|
+
5. **Get Game Info** - See the pot!
|
|
18
|
+
6. **Distribute - Two Winners** - Alice & Bob split, Jelli gets fee!
|
|
19
|
+
7. **List All Players** - See Jelli got paid! 💰
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Multiple Games Example:
|
|
24
|
+
|
|
25
|
+
You can run multiple games at once!
|
|
26
|
+
|
|
27
|
+
1. **Create Game #1** - Mario Kart (gameId: 1)
|
|
28
|
+
2. **Create Game #2** - Golf (gameId: 2)
|
|
29
|
+
3. **Alice joins Game #1**
|
|
30
|
+
4. **Bob joins Game #2**
|
|
31
|
+
5. Both games run independently!
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Key Parameters:
|
|
36
|
+
|
|
37
|
+
### Create Game:
|
|
38
|
+
```json
|
|
39
|
+
{
|
|
40
|
+
"gameId": 1, // Unique ID (or leave blank for auto)
|
|
41
|
+
"player": "creator", // Who creates
|
|
42
|
+
"buyIn": 0.5, // SOL amount
|
|
43
|
+
"maxPlayers": 4, // Max players
|
|
44
|
+
"operatorFee": 10, // Percentage (0-100)
|
|
45
|
+
"operatorPlayer": "jelli" // Who gets fees
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Join Game:
|
|
50
|
+
```json
|
|
51
|
+
{
|
|
52
|
+
"player": "alice", // Who joins
|
|
53
|
+
"gameId": 1 // Which game
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Distribute:
|
|
58
|
+
```json
|
|
59
|
+
{
|
|
60
|
+
"gameId": 1,
|
|
61
|
+
"player": "creator",
|
|
62
|
+
"winners": [0, 1] // Player indices (0=first, 1=second, etc.)
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## That's It!
|
|
69
|
+
|
|
70
|
+
Just click through the requests! ✨
|
|
71
|
+
|