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.
Files changed (304) hide show
  1. package/.claude/settings.local.json +280 -0
  2. package/CLAUDE.md +46 -0
  3. package/CONNECT4_PRODUCTION_DEPLOY.md +155 -0
  4. package/CURRENT_SESSION.md +171 -0
  5. package/CURRENT_SESSION_DRAW.md +516 -0
  6. package/MARCH_MADNESS_SURVIVOR.md +254 -0
  7. package/PANDA.md +166 -0
  8. package/Procfile +4 -0
  9. package/README.md +476 -0
  10. package/controllers/livescoresController.js +376 -0
  11. package/controllers/pickemController.js +554 -0
  12. package/controllers/survivorAdminController.js +887 -0
  13. package/controllers/survivorController.js +623 -0
  14. package/cron/oracleMonitor.js +77 -0
  15. package/cron/pickemOracleMonitor.js +73 -0
  16. package/data/jackpot-history.json +952 -0
  17. package/data/ncaaTeams.js +406 -0
  18. package/documentation/API_SECURITY_GUIDE.md +327 -0
  19. package/documentation/ARCADE_API.md +593 -0
  20. package/documentation/ARCADE_IMPLEMENTATION_SUMMARY.md +399 -0
  21. package/documentation/ARCADE_QUICKSTART.md +242 -0
  22. package/documentation/AUTOMATIC_MODE_ORACLE.md +321 -0
  23. package/documentation/BUG_FIX_COHORT_DATE_DISPLAY.md +171 -0
  24. package/documentation/CLAIM_MIGRATION_INSTRUCTIONS.md +52 -0
  25. package/documentation/CLAIM_STATUS_FIX.md +67 -0
  26. package/documentation/CLI_TOOL_GUIDE.md +372 -0
  27. package/documentation/COHORT_RETENTION_ANALYSIS.md +295 -0
  28. package/documentation/COHORT_RETENTION_IMPLEMENTATION_COMPLETE.md +461 -0
  29. package/documentation/COHORT_RETENTION_SUMMARY.md +204 -0
  30. package/documentation/COMPLETE_PROJECT_SUMMARY.md +490 -0
  31. package/documentation/DATABASE_QUERIES.md +269 -0
  32. package/documentation/DATABASE_RETENTION_POLICY.md +390 -0
  33. package/documentation/DATABASE_SETUP_GUIDE.md +361 -0
  34. package/documentation/DATABASE_SETUP_SUMMARY.md +247 -0
  35. package/documentation/DEMO_API_CURL_COMMANDS.md +656 -0
  36. package/documentation/DEPLOYMENT_SUMMARY.txt +100 -0
  37. package/documentation/DUPLICATE_NOTIFICATIONS_FIXED.md +201 -0
  38. package/documentation/EXCHANGE_RATES_INTEGRATION.md +371 -0
  39. package/documentation/FINAL_API_PROTECTION_TABLE.md +175 -0
  40. package/documentation/GAME_START_NOTIFICATIONS_DEPLOYMENT.md +256 -0
  41. package/documentation/GAME_START_NOTIFICATIONS_INTEGRATION.md +275 -0
  42. package/documentation/HEROKU_DEPLOYMENT.md +134 -0
  43. package/documentation/HEROKU_SCHEDULER_SETUP.md +271 -0
  44. package/documentation/JACKPOT_API.md +521 -0
  45. package/documentation/JACKPOT_DEPLOYMENT_GUIDE.md +362 -0
  46. package/documentation/JWT_IMPLEMENTATION_SUMMARY.md +373 -0
  47. package/documentation/JWT_QUICK_SETUP.md +268 -0
  48. package/documentation/JWT_TESTING_GUIDE.md +404 -0
  49. package/documentation/KEEPER_RECOVERY_GUIDE.md +381 -0
  50. package/documentation/KEEPER_SETUP.md +206 -0
  51. package/documentation/KEEPER_STATE_MACHINE.md +423 -0
  52. package/documentation/LATEST_PRODUCTION_SETUP.md +387 -0
  53. package/documentation/LOCAL_VOTING_TEST.md +279 -0
  54. package/documentation/ORACLE_FIXES_SUMMARY.md +188 -0
  55. package/documentation/ORACLE_POSTGRESQL_UPDATE.md +202 -0
  56. package/documentation/PAYMENT_DEPLOYMENT.md +209 -0
  57. package/documentation/PNL_TRACKING_SETUP.md +189 -0
  58. package/documentation/PREVENTING_LOCKUP_ERRORS.md +472 -0
  59. package/documentation/PRODUCTION_READY_SUMMARY.md +227 -0
  60. package/documentation/PUBLIC_VS_PRIVATE_ENDPOINTS.md +278 -0
  61. package/documentation/QUICK_AUTH_SETUP.md +99 -0
  62. package/documentation/QUICK_DEPLOY.md +224 -0
  63. package/documentation/QUICK_FIX.md +114 -0
  64. package/documentation/QUICK_START.md +152 -0
  65. package/documentation/REFEREE_MODE_GUIDE.md +392 -0
  66. package/documentation/RETENTION_CORE_ACTION_UPDATE.md +313 -0
  67. package/documentation/RETENTION_UPDATE_SUMMARY.md +108 -0
  68. package/documentation/RUN_MIGRATION_NOW.md +39 -0
  69. package/documentation/SCRIPTS_UPDATE_SUMMARY.md +251 -0
  70. package/documentation/SETUP_GUIDE.md +184 -0
  71. package/documentation/STATE_MACHINE_IMPLEMENTATION.md +250 -0
  72. package/documentation/TELEGRAM_NOTIFICATIONS_DIAGNOSIS.md +361 -0
  73. package/documentation/UNIFIED_ARCHITECTURE.md +231 -0
  74. package/documentation/VOTING_DEPLOYMENT_SUMMARY.md +392 -0
  75. package/documentation/WEBSOCKET_ARCHITECTURE.md +881 -0
  76. package/documentation/WHAT_WE_BUILT_TODAY.md +369 -0
  77. package/documentation/latest/LATEST_PRODUCTION_SETUP.md +865 -0
  78. package/ecosystem.config.js +65 -0
  79. package/env.template +125 -0
  80. package/middleware/apiKeyAuth.js +136 -0
  81. package/middleware/authenticate.js +214 -0
  82. package/middleware/developerUserAuth.js +76 -0
  83. package/middleware/socketAuth.js +69 -0
  84. package/package.json +49 -0
  85. package/postman/Dubs-API-v1-With-Voting.postman_collection.json +555 -0
  86. package/postman/Dubs-API-v1.postman_collection.json +205 -0
  87. package/postman/Dubs_Developer_API.postman_collection.json +662 -0
  88. package/postman/QUICKSTART.md +118 -0
  89. package/postman/QUICK_REFERENCE.md +246 -0
  90. package/postman/README.md +71 -0
  91. package/postman/VOTING_API_GUIDE.md +426 -0
  92. package/refactor/Animations.md +148 -0
  93. package/refactor/Chat.md +252 -0
  94. package/routes/actionsRoutes.js +699 -0
  95. package/routes/adminRoutes.js +370 -0
  96. package/routes/analyticsRoutes.js +1262 -0
  97. package/routes/arcadeRoutes.js +557 -0
  98. package/routes/authRoutes.js +2310 -0
  99. package/routes/avatarRoutes.js +85 -0
  100. package/routes/botRoutes.js +211 -0
  101. package/routes/chatRoutes.js +377 -0
  102. package/routes/cryptoPriceRoutes.js +105 -0
  103. package/routes/developerRoutes.js +4201 -0
  104. package/routes/deviceRoutes.js +214 -0
  105. package/routes/dmRoutes.js +167 -0
  106. package/routes/esportsRoutes.js +806 -0
  107. package/routes/exchangeRateRoutes.js +233 -0
  108. package/routes/gamesRoutes.js +3028 -0
  109. package/routes/jackpotRoutes.js +754 -0
  110. package/routes/keeperMonitoringRoutes.js +156 -0
  111. package/routes/keeperWebhookRoutes.js +466 -0
  112. package/routes/livescoresRoutes.js +31 -0
  113. package/routes/pickemAdminRoutes.js +199 -0
  114. package/routes/pickemRoutes.js +231 -0
  115. package/routes/playerStatsRoutes.js +147 -0
  116. package/routes/portfolioRoutes.js +217 -0
  117. package/routes/promoRoutes.js +418 -0
  118. package/routes/referralEarningsRoutes.js +392 -0
  119. package/routes/socialRoutes.js +459 -0
  120. package/routes/sportsRoutes.js +1271 -0
  121. package/routes/survivorAdminRoutes.js +345 -0
  122. package/routes/survivorRoutes.js +756 -0
  123. package/routes/uploadRoutes.js +256 -0
  124. package/routes/userProfileRoutes.js +244 -0
  125. package/routes/whatsNewRoutes.js +331 -0
  126. package/scripts/.claude/settings.local.json +15 -0
  127. package/scripts/README.md +170 -0
  128. package/scripts/RESTART_EVERYTHING.sh +104 -0
  129. package/scripts/add-claim-columns.sql +48 -0
  130. package/scripts/add-crypto-prices-cache.sql +27 -0
  131. package/scripts/add-exchange-rates-cache.sql +40 -0
  132. package/scripts/add-game-invite-column.sql +23 -0
  133. package/scripts/add-game-invite-notification.sql +33 -0
  134. package/scripts/add-game-invite-telegram-pref.sql +16 -0
  135. package/scripts/add-game-joined-notification.sql +16 -0
  136. package/scripts/add-game-joined-pref.js +40 -0
  137. package/scripts/add-game-joined-preference.sql +6 -0
  138. package/scripts/add-game-start-notifications.sql +41 -0
  139. package/scripts/add-notification-flags-to-games.sql +55 -0
  140. package/scripts/add-pending-game-dismissals.sql +19 -0
  141. package/scripts/add-preferred-currency.sql +34 -0
  142. package/scripts/add-winner-columns.js +61 -0
  143. package/scripts/add_mention_system.sql +53 -0
  144. package/scripts/add_payment_system.sql +96 -0
  145. package/scripts/add_sports_event_id_column.sql +22 -0
  146. package/scripts/analyze-cohort-data-heroku.js +276 -0
  147. package/scripts/analyze-cohort-data.js +295 -0
  148. package/scripts/analyze-prod-cohorts.sh +10 -0
  149. package/scripts/backfill-matchup-images.js +245 -0
  150. package/scripts/backfill-missing-signatures.js +175 -0
  151. package/scripts/backfill-referral-earnings.js +202 -0
  152. package/scripts/check-chat-schema.js +130 -0
  153. package/scripts/check-db.sh +14 -0
  154. package/scripts/check_oracle_in_game.js +54 -0
  155. package/scripts/cleanup-database.js +193 -0
  156. package/scripts/clear-notification-cache.js +85 -0
  157. package/scripts/convert-mnemonic.js +50 -0
  158. package/scripts/create-users-table.sql +44 -0
  159. package/scripts/debug-cohort-counts.js +248 -0
  160. package/scripts/debug-winner-calc.js +84 -0
  161. package/scripts/deploy-payment-system.sh +118 -0
  162. package/scripts/deploy-to-heroku.sh +63 -0
  163. package/scripts/diagnose-locked-round.js +143 -0
  164. package/scripts/dubs-cli.js +720 -0
  165. package/scripts/dump-account.js +65 -0
  166. package/scripts/find-vrf-offset.js +48 -0
  167. package/scripts/fix-chat-notifications-constraint.sql +122 -0
  168. package/scripts/fix-claim-columns.js +124 -0
  169. package/scripts/fix-constraint-now.js +44 -0
  170. package/scripts/fix-lock-timestamps.js +96 -0
  171. package/scripts/fix-locked-round.sh +126 -0
  172. package/scripts/fix-missing-badges.sql +91 -0
  173. package/scripts/fix-payment-notifications.sql +41 -0
  174. package/scripts/force-new-round.js +55 -0
  175. package/scripts/force-resolve-and-claim.js +278 -0
  176. package/scripts/important/README.md +115 -0
  177. package/scripts/important/authority-force-lock.js +197 -0
  178. package/scripts/important/authority-resolve-game.js +267 -0
  179. package/scripts/important/check-game-status.js +373 -0
  180. package/scripts/important/list-pending-games-by-version.js +270 -0
  181. package/scripts/important/reconcile-v1-v2-payouts.js +270 -0
  182. package/scripts/initialize-jackpot.js +111 -0
  183. package/scripts/jackpot/.claude/settings.local.json +10 -0
  184. package/scripts/jackpot/force-reset.js +84 -0
  185. package/scripts/jackpot/initialize-mainnet.js +100 -0
  186. package/scripts/jackpot/keeper.js +742 -0
  187. package/scripts/jackpot/status.js +107 -0
  188. package/scripts/jackpot/update-round-duration.js +143 -0
  189. package/scripts/keeper-bot.js +112 -0
  190. package/scripts/list-pending-games.js +131 -0
  191. package/scripts/migrate-chat-v2.js +127 -0
  192. package/scripts/migrate-chat-winners.js +84 -0
  193. package/scripts/migrate-chat.sh +17 -0
  194. package/scripts/migrate-game-invite.js +83 -0
  195. package/scripts/migrate-heroku-game-notifications.sh +159 -0
  196. package/scripts/migrations/001_analytics_tables.sql +422 -0
  197. package/scripts/migrations/002_add_matchup_image_url.sql +14 -0
  198. package/scripts/migrations/003_referral_earnings.sql +208 -0
  199. package/scripts/migrations/004_add_whats_new_notification_type.sql +62 -0
  200. package/scripts/migrations/005_add_connect4_your_turn_notification.sql +61 -0
  201. package/scripts/migrations/005_push_notifications.sql +55 -0
  202. package/scripts/migrations/006_add_draw_team_players.sql +28 -0
  203. package/scripts/migrations/006_add_game_cancelled_notification.sql +62 -0
  204. package/scripts/migrations/007_add_gif_url.sql +8 -0
  205. package/scripts/migrations/008_add_connect4_columns.sql +139 -0
  206. package/scripts/migrations/008_add_pool_tracking.sql +22 -0
  207. package/scripts/migrations/009_create_survivor_pool_tables.sql +174 -0
  208. package/scripts/migrations/010_add_survivor_pool_outcome.sql +28 -0
  209. package/scripts/migrations/011_create_developer_tables.sql +67 -0
  210. package/scripts/migrations/011_fix_keeper_tables.sql +85 -0
  211. package/scripts/migrations/012_create_developer_webhooks.sql +31 -0
  212. package/scripts/migrations/013_add_network_mode.sql +18 -0
  213. package/scripts/migrations/014_create_developer_app_users.sql +19 -0
  214. package/scripts/migrations/015_add_ui_config.sql +4 -0
  215. package/scripts/migrations/016_add_resolution_secret.sql +4 -0
  216. package/scripts/migrations/017_add_external_game_id.sql +3 -0
  217. package/scripts/migrations/018_create_pickem_tables.sql +115 -0
  218. package/scripts/migrations/019_expo_push_tokens.sql +19 -0
  219. package/scripts/migrations/create_whats_new_tables.sql +88 -0
  220. package/scripts/migrations/drop_live_games_tables.sql +34 -0
  221. package/scripts/open-jackpot-round.js +85 -0
  222. package/scripts/purge-all-data.sh +329 -0
  223. package/scripts/purge-all-data.sql +142 -0
  224. package/scripts/purge-heroku-data.sh +149 -0
  225. package/scripts/purge-heroku-data.sql +62 -0
  226. package/scripts/rebuild-heroku-database.sh +113 -0
  227. package/scripts/recover-funds.js +357 -0
  228. package/scripts/regenerate-epl-images.js +278 -0
  229. package/scripts/resize-s3-matchup-images.js +374 -0
  230. package/scripts/resolve-direct.js +88 -0
  231. package/scripts/resolve-mock-game.js +124 -0
  232. package/scripts/resolve-pickem-game.js +55 -0
  233. package/scripts/resolve-round-manual.js +83 -0
  234. package/scripts/resolve-stuck-game.js +382 -0
  235. package/scripts/resolve-stuck-round.js +42 -0
  236. package/scripts/run-connect4-migration.sh +16 -0
  237. package/scripts/run-mention-migration.sh +32 -0
  238. package/scripts/run-payment-migration.sh +51 -0
  239. package/scripts/run-preferred-currency-migration.sh +31 -0
  240. package/scripts/run-referral-earnings-migration.sh +32 -0
  241. package/scripts/run-survivor-outcome-migration.sh +16 -0
  242. package/scripts/seed-test-users.js +346 -0
  243. package/scripts/setup-auth-tables.js +78 -0
  244. package/scripts/setup-complete-database.sql +992 -0
  245. package/scripts/setup-database-fresh.sh +359 -0
  246. package/scripts/setup-heroku-keeper.sh +48 -0
  247. package/scripts/setup-keeper-database.js +83 -0
  248. package/scripts/setup-keeper-state-db.sql +110 -0
  249. package/scripts/setup-oracle.sh +39 -0
  250. package/scripts/setup-pnl-tracking.js +111 -0
  251. package/scripts/start-devnet.sh +14 -0
  252. package/scripts/test-arcade-devnet.sh +160 -0
  253. package/scripts/test-arcade-match.sh +109 -0
  254. package/scripts/test-automatic-mode.sh +239 -0
  255. package/scripts/test-connect4-cancel-claim.js +370 -0
  256. package/scripts/test-connect4-e2e.js +369 -0
  257. package/scripts/test-connect4-resolve.js +369 -0
  258. package/scripts/test-game-state-endpoint.js +136 -0
  259. package/scripts/test-invite-notification.js +86 -0
  260. package/scripts/test-jackpot-api.sh +71 -0
  261. package/scripts/test-poll-confirmation.js +267 -0
  262. package/scripts/test-resolve-game.js +271 -0
  263. package/scripts/test-resolve-signature.js +223 -0
  264. package/scripts/test-signature-preservation.js +124 -0
  265. package/scripts/test-state-machine.js +291 -0
  266. package/scripts/test-webhook-receiver.js +60 -0
  267. package/scripts/update-notification-constraint.js +52 -0
  268. package/scripts/verify-account-layout.js +145 -0
  269. package/scripts/verify-winner-algorithm.js +278 -0
  270. package/server.js +5259 -0
  271. package/services/arcadeMatchService.js +763 -0
  272. package/services/automaticGameOracle.js +1596 -0
  273. package/services/chatService.js +1612 -0
  274. package/services/connect4GameService.js +1049 -0
  275. package/services/connect4NotificationService.js +374 -0
  276. package/services/cryptoPriceService.js +223 -0
  277. package/services/customGameResolver.js +260 -0
  278. package/services/db.js +79 -0
  279. package/services/directMessageService.js +389 -0
  280. package/services/discordNotifications.js +160 -0
  281. package/services/exchangeRateService.js +289 -0
  282. package/services/expoPushService.js +314 -0
  283. package/services/gamesCacheService.js +539 -0
  284. package/services/jackpotHistory.js +331 -0
  285. package/services/jackpotService.js +856 -0
  286. package/services/keeperStateService.js +355 -0
  287. package/services/matchupImageService.js +591 -0
  288. package/services/notificationCacheService.js +407 -0
  289. package/services/pickemOracle.js +440 -0
  290. package/services/playerStatsService.js +389 -0
  291. package/services/portfolioService.js +555 -0
  292. package/services/promoService.js +757 -0
  293. package/services/promoTreasuryService.js +239 -0
  294. package/services/pushNotifications.js +353 -0
  295. package/services/redisService.js +422 -0
  296. package/services/referralEarningsService.js +728 -0
  297. package/services/s3Service.js +396 -0
  298. package/services/socialService.js +1202 -0
  299. package/services/survivorOracle.js +469 -0
  300. package/services/survivorSimulator.js +475 -0
  301. package/services/telegramNotifications.js +461 -0
  302. package/services/userProfileStatsService.js +1185 -0
  303. package/services/whatsNewService.js +388 -0
  304. 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
+