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,224 @@
1
+ # ⚡ Quick Deploy to Heroku
2
+
3
+ ## 🚀 Deploy in 3 Commands
4
+
5
+ ```bash
6
+ cd /Users/adamdahan/Developer/iheartsolana/solana-programs/dubs-server
7
+
8
+ # 1. Setup keeper wallet (one-time only)
9
+ ./setup-heroku-keeper.sh
10
+
11
+ # 2. Commit and deploy
12
+ git add .
13
+ git commit -m "Fix keeper for Heroku deployment"
14
+ git push heroku-dev main
15
+
16
+ # 3. Scale up keeper
17
+ heroku ps:scale jackpot-keeper=1 -a dubs-server-dev
18
+
19
+ # 4. Watch it work!
20
+ heroku logs --tail --ps jackpot-keeper -a dubs-server-dev
21
+ ```
22
+
23
+ ---
24
+
25
+ ## ✅ What You Should See
26
+
27
+ ### Step 1: Setup Keeper
28
+ ```
29
+ 🔐 Setting up Jackpot Keeper on Heroku
30
+ ======================================
31
+
32
+ ✅ Found oracle wallet
33
+
34
+ 📤 Setting KEEPER_PRIVATE_KEY on Heroku...
35
+ Setting KEEPER_PRIVATE_KEY and restarting ⬢ dubs-server-dev... done
36
+
37
+ ✅ Keeper wallet configured!
38
+ ```
39
+
40
+ ### Step 2: Deploy
41
+ ```
42
+ Enumerating objects: 5, done.
43
+ Counting objects: 100% (5/5), done.
44
+ ...
45
+ remote: Verifying deploy... done.
46
+ ```
47
+
48
+ ### Step 3: Scale Up
49
+ ```
50
+ Scaling dynos... done, now running jackpot-keeper at 1:Free
51
+ ```
52
+
53
+ ### Step 4: Logs
54
+ ```
55
+ 📂 Using wallet from KEEPER_PRIVATE_KEY environment variable
56
+ 🤖 Complete Jackpot Keeper Bot
57
+ Wallet: FWUJCthDfPcgmTvdQWM5uofxxiYjqJFMMwiLYvS7LBFa
58
+
59
+ 🚀 Keeper bot started!
60
+ ```
61
+
62
+ ---
63
+
64
+ ## 🔍 Verify It's Working
65
+
66
+ ```bash
67
+ # Check process status
68
+ heroku ps -a dubs-server-dev
69
+
70
+ # Should show:
71
+ # jackpot-keeper.1: up 2024/11/16 15:00:00 -0500 (~ 1m ago)
72
+
73
+ # Check the API
74
+ curl https://dubs-server-dev.herokuapp.com/jackpot/round/current | jq .
75
+
76
+ # Should show an active round with countdown
77
+ ```
78
+
79
+ ---
80
+
81
+ ## 🐛 If Something Goes Wrong
82
+
83
+ ### Keeper crashes immediately
84
+
85
+ **Check logs:**
86
+ ```bash
87
+ heroku logs --tail --ps jackpot-keeper -a dubs-server-dev
88
+ ```
89
+
90
+ **Common issues:**
91
+
92
+ 1. **"No wallet found"** → Run `./setup-heroku-keeper.sh` again
93
+ 2. **"Invalid private key"** → Check that env var is set correctly
94
+ 3. **"No active round"** → Config account needs SOL (see below)
95
+
96
+ ### No active round
97
+
98
+ The config account may need funding:
99
+
100
+ ```bash
101
+ # Check balance
102
+ solana account CwNvZq6GuKvsEr3WDyQWhzDaTYccmsRVibdXK85FnwoW --url devnet
103
+
104
+ # If low, fund it
105
+ solana transfer CwNvZq6GuKvsEr3WDyQWhzDaTYccmsRVibdXK85FnwoW 0.5 --url devnet
106
+ ```
107
+
108
+ ### Keeper keeps restarting
109
+
110
+ ```bash
111
+ # Check if env var is set
112
+ heroku config:get KEEPER_PRIVATE_KEY -a dubs-server-dev
113
+
114
+ # If empty or wrong, reset it
115
+ ./setup-heroku-keeper.sh
116
+ ```
117
+
118
+ ---
119
+
120
+ ## 📊 Monitor Your Keeper
121
+
122
+ ```bash
123
+ # Live logs
124
+ heroku logs --tail --ps jackpot-keeper -a dubs-server-dev
125
+
126
+ # Recent logs
127
+ heroku logs --ps jackpot-keeper -a dubs-server-dev
128
+
129
+ # All logs
130
+ heroku logs --tail -a dubs-server-dev
131
+
132
+ # Process status
133
+ heroku ps -a dubs-server-dev
134
+
135
+ # Restart keeper
136
+ heroku ps:restart jackpot-keeper -a dubs-server-dev
137
+ ```
138
+
139
+ ---
140
+
141
+ ## 🎮 Test the System
142
+
143
+ Once deployed:
144
+
145
+ 1. Visit: https://dubs-server-dev.herokuapp.com/jackpot/health
146
+ 2. Check round: https://dubs-server-dev.herokuapp.com/jackpot/round/current
147
+ 3. Should see an active round with countdown
148
+ 4. Keeper should automatically manage rounds every ~1 minute
149
+
150
+ ---
151
+
152
+ ## 💡 Pro Tips
153
+
154
+ ### Check Wallet Balance
155
+
156
+ ```bash
157
+ # Keeper wallet
158
+ solana balance FWUJCthDfPcgmTvdQWM5uofxxiYjqJFMMwiLYvS7LBFa --url devnet
159
+
160
+ # If low, airdrop more (devnet only)
161
+ solana airdrop 2 FWUJCthDfPcgmTvdQWM5uofxxiYjqJFMMwiLYvS7LBFa --url devnet
162
+ ```
163
+
164
+ ### View All Config
165
+
166
+ ```bash
167
+ heroku config -a dubs-server-dev
168
+ ```
169
+
170
+ ### Scale Down (to save dyno hours)
171
+
172
+ ```bash
173
+ # Turn off keeper
174
+ heroku ps:scale jackpot-keeper=0 -a dubs-server-dev
175
+
176
+ # Turn back on
177
+ heroku ps:scale jackpot-keeper=1 -a dubs-server-dev
178
+ ```
179
+
180
+ ---
181
+
182
+ ## 📋 Full Command Reference
183
+
184
+ ```bash
185
+ # Setup
186
+ ./setup-heroku-keeper.sh # Setup wallet (one-time)
187
+ heroku config -a dubs-server-dev # View all config
188
+
189
+ # Deploy
190
+ git add . # Stage changes
191
+ git commit -m "Your message" # Commit
192
+ git push heroku-dev main # Deploy
193
+
194
+ # Manage
195
+ heroku ps -a dubs-server-dev # Process status
196
+ heroku ps:scale jackpot-keeper=1 -a dubs-server-dev # Start keeper
197
+ heroku ps:scale jackpot-keeper=0 -a dubs-server-dev # Stop keeper
198
+ heroku ps:restart jackpot-keeper -a dubs-server-dev # Restart keeper
199
+
200
+ # Monitor
201
+ heroku logs --tail -a dubs-server-dev # All logs
202
+ heroku logs --tail --ps jackpot-keeper -a dubs-server-dev # Keeper only
203
+ curl https://dubs-server-dev.herokuapp.com/jackpot/round/current | jq .
204
+
205
+ # Debug
206
+ heroku run bash -a dubs-server-dev # Open shell on Heroku
207
+ heroku config:get KEEPER_PRIVATE_KEY -a dubs-server-dev # Check env var
208
+ ```
209
+
210
+ ---
211
+
212
+ ## ✅ Success Checklist
213
+
214
+ - [ ] Keeper wallet configured (`./setup-heroku-keeper.sh`)
215
+ - [ ] Code deployed (`git push heroku-dev main`)
216
+ - [ ] Keeper scaled up (`heroku ps:scale jackpot-keeper=1`)
217
+ - [ ] Logs show "Keeper bot started"
218
+ - [ ] API returns active round
219
+ - [ ] Rounds cycling every ~1 minute
220
+
221
+ ---
222
+
223
+ **You're ready! The keeper bot should now be managing jackpot rounds automatically on Heroku.** 🚀🎰
224
+
@@ -0,0 +1,114 @@
1
+ # 🚨 Quick Fix Guide - Round Stuck Again
2
+
3
+ ## What Happened
4
+
5
+ Round 52 got stuck because **the API server was still running the old buggy code**. Even though we fixed the code in `services/jackpotService.js`, the server needed to be restarted to load the new code.
6
+
7
+ ## Immediate Actions (RIGHT NOW)
8
+
9
+ ### Option 1: Use the Restart Script (Easiest)
10
+ ```bash
11
+ cd /Users/adamdahan/Developer/iheartsolana/solana-programs/dubs-server
12
+ ./RESTART_EVERYTHING.sh
13
+ ```
14
+
15
+ This will:
16
+ - Stop all processes
17
+ - Start API server with fixed code
18
+ - Start keeper bot
19
+ - Verify everything is working
20
+
21
+ ### Option 2: Manual Restart
22
+ ```bash
23
+ # 1. Stop everything
24
+ pkill -f "jackpot-keeper"
25
+ pkill -f "server.js"
26
+
27
+ # 2. Start API server
28
+ cd /Users/adamdahan/Developer/iheartsolana/solana-programs/dubs-server
29
+ SOLANA_NETWORK=https://api.devnet.solana.com node server.js &
30
+
31
+ # 3. Start keeper bot
32
+ node scripts/jackpot-keeper.js &
33
+ ```
34
+
35
+ ### Option 3: PM2 (Best for Production)
36
+ ```bash
37
+ # Install PM2 if not installed
38
+ npm install -g pm2
39
+
40
+ # Start everything
41
+ cd /Users/adamdahan/Developer/iheartsolana/solana-programs/dubs-server
42
+ pm2 start ecosystem.config.js
43
+
44
+ # Check status
45
+ pm2 status
46
+
47
+ # View logs
48
+ pm2 logs
49
+ ```
50
+
51
+ ## If Round is Currently Stuck
52
+
53
+ If you have a stuck round right now:
54
+
55
+ ```bash
56
+ cd /Users/adamdahan/Developer/iheartsolana/solana-programs/dubs-server
57
+
58
+ # This will resolve it with the fixed code
59
+ node scripts/resolve-direct.js
60
+ ```
61
+
62
+ ## Verify Everything Works
63
+
64
+ ```bash
65
+ # Check API health
66
+ curl http://localhost:3001/jackpot/health
67
+
68
+ # Check current round
69
+ curl http://localhost:3001/jackpot/round/current | python3 -m json.tool
70
+
71
+ # Should see:
72
+ # - Round status: "Open" (accepting entries)
73
+ # - No errors in response
74
+ ```
75
+
76
+ ## Why This Keeps Happening
77
+
78
+ **Root Cause:** Node.js doesn't automatically reload code when files change. You must restart the server after making code changes.
79
+
80
+ **Solutions:**
81
+ 1. **Development:** Use `nodemon` (auto-restarts on file changes)
82
+ 2. **Production:** Use `PM2` (process manager with auto-restart)
83
+ 3. **Quick fixes:** Use `./RESTART_EVERYTHING.sh`
84
+
85
+ ## Prevention Checklist
86
+
87
+ After fixing any bug:
88
+ - [ ] Restart API server
89
+ - [ ] Restart keeper bot
90
+ - [ ] Verify with health check
91
+ - [ ] Watch next few rounds to confirm fix works
92
+
93
+ ## Monitoring
94
+
95
+ Add this to your terminal startup (`.bashrc` or `.zshrc`):
96
+
97
+ ```bash
98
+ alias dubs-status='curl -s http://localhost:3001/jackpot/round/current | python3 -m json.tool'
99
+ alias dubs-health='curl -s http://localhost:3001/jackpot/health | python3 -m json.tool'
100
+ alias dubs-restart='cd /Users/adamdahan/Developer/iheartsolana/solana-programs/dubs-server && ./RESTART_EVERYTHING.sh'
101
+ ```
102
+
103
+ Then you can just type:
104
+ - `dubs-status` - Check current round
105
+ - `dubs-health` - Check if server is up
106
+ - `dubs-restart` - Restart everything
107
+
108
+ ## Questions?
109
+
110
+ Check these files:
111
+ - `documentation/PREVENTING_LOCKUP_ERRORS.md` - Complete prevention guide
112
+ - `ecosystem.config.js` - PM2 configuration
113
+ - `scripts/verify-account-layout.js` - Verify offsets are correct
114
+
@@ -0,0 +1,152 @@
1
+ # 🚀 DUBS Server - Quick Start Guide
2
+
3
+ Get up and running in under 1 minute!
4
+
5
+ ## 🎯 First Time Setup
6
+
7
+ ```bash
8
+ # 1. Install dependencies
9
+ npm install
10
+
11
+ # 2. Setup database (automated - just say yes!)
12
+ ./scripts/setup-database-fresh.sh
13
+
14
+ # 3. Start server
15
+ npm start
16
+ ```
17
+
18
+ That's it! Server running at http://localhost:3001 🎉
19
+
20
+ ## 📋 Common Commands
21
+
22
+ ### Start Server
23
+ ```bash
24
+ npm start
25
+ ```
26
+
27
+ ### Reset Everything (Fresh Start)
28
+ ```bash
29
+ # Drops database, recreates, and sets up schema
30
+ ./scripts/setup-database-fresh.sh
31
+ # Answer 'y' when prompted
32
+ ```
33
+
34
+ ### Clear All Data (Keep Structure)
35
+ ```bash
36
+ # Removes all data, keeps tables intact
37
+ ./scripts/purge-all-data.sh
38
+ # Requires double confirmation for safety
39
+ ```
40
+
41
+ ### Update Schema Only
42
+ ```bash
43
+ # Updates tables without deleting data
44
+ psql -d dubs_db -f scripts/setup-complete-database.sql
45
+ ```
46
+
47
+ ### Check Database Status
48
+ ```bash
49
+ # List all tables
50
+ psql -d dubs_db -c "\dt"
51
+
52
+ # Check PostgreSQL status
53
+ pg_isready
54
+
55
+ # Start PostgreSQL if needed
56
+ brew services start postgresql@14
57
+ ```
58
+
59
+ ## 🎮 Test Endpoints
60
+
61
+ Once the server is running:
62
+
63
+ ```bash
64
+ # Health check
65
+ curl http://localhost:3001/jackpot/health
66
+
67
+ # Get jackpot config
68
+ curl http://localhost:3001/jackpot/config
69
+
70
+ # Request auth nonce (replace with your wallet)
71
+ curl http://localhost:3001/api/v1/auth/nonce/YOUR_WALLET_ADDRESS
72
+ ```
73
+
74
+ ## 🛠️ Troubleshooting
75
+
76
+ ### PostgreSQL Not Running?
77
+ ```bash
78
+ brew services start postgresql@14
79
+ ```
80
+
81
+ ### Database Issues?
82
+ ```bash
83
+ # Nuclear option - full reset
84
+ ./scripts/setup-database-fresh.sh
85
+ # Answer 'y' to drop and recreate
86
+ ```
87
+
88
+ ### Can't Connect?
89
+ Check your `.env` file has:
90
+ ```
91
+ DATABASE_URL=postgresql://username@localhost:5432/dubs_db
92
+ ```
93
+
94
+ ### Need Fresh Data?
95
+ ```bash
96
+ # Clear all data, keep structure
97
+ ./scripts/purge-all-data.sh
98
+ ```
99
+
100
+ ## 📖 Full Documentation
101
+
102
+ - **Database Setup:** `documentation/DATABASE_SETUP_GUIDE.md`
103
+ - **Script Reference:** `scripts/README.md`
104
+ - **Complete Summary:** `DATABASE_SETUP_SUMMARY.md`
105
+
106
+ ## 🎯 Development Workflow
107
+
108
+ ```bash
109
+ # Morning routine
110
+ brew services start postgresql@14
111
+ npm start
112
+
113
+ # Testing something? Clear data:
114
+ ./scripts/purge-all-data.sh
115
+
116
+ # Messed up schema? Reset:
117
+ ./scripts/setup-database-fresh.sh
118
+
119
+ # End of day
120
+ # PostgreSQL keeps running (that's fine)
121
+ ```
122
+
123
+ ## 💡 Pro Tips
124
+
125
+ 1. **Bookmark `setup-database-fresh.sh`** - You'll use it often
126
+ 2. **Never commit `.env`** - Already in `.gitignore`
127
+ 3. **Use `purge-all-data.sh` for testing** - Keeps structure, removes data
128
+ 4. **Full reset = setup-database-fresh.sh** - Rebuilds everything
129
+
130
+ ## ⚡ Super Quick Reference
131
+
132
+ | Task | Command |
133
+ |------|---------|
134
+ | First setup | `./scripts/setup-database-fresh.sh` |
135
+ | Start server | `npm start` |
136
+ | Clear data | `./scripts/purge-all-data.sh` |
137
+ | Full reset | `./scripts/setup-database-fresh.sh` (say yes) |
138
+ | Check tables | `psql -d dubs_db -c "\dt"` |
139
+ | Start PostgreSQL | `brew services start postgresql@14` |
140
+
141
+ ---
142
+
143
+ **Need more help?** See `DATABASE_SETUP_GUIDE.md` for comprehensive troubleshooting!
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+
152
+