80ae551ca9
* Simple limit order UI * Update bet schema * Restrict bet panel / bet row to only CPMMBinaryContracts (all binary DPM are resolved) * Limit orders partway implemented * Update follow leaderboard copy * Change cpmm code to take some state instead of whole contract * Write more of matching algorithm * Fill in more of placebet * Use client side contract search for emulator * More correct matching * Merge branch 'main' into limit-orders * Some cleanup * Listen for unfilled bets in bet panel. Calculate how the probability moves based on open limit orders. * Simpler switching between bet & limit bet. * Render your open bets (unfilled limit orders) * Cancel bet endpoint. * Fix build error * Rename open bets to limit bets. Tweak payout calculation * Limit probability selector to 1-99 * Deduct user balance only on each fill. Store orderAmount of bet. Timestamp of fills. * Use floating equal to check if have shares * Add limit order switcher to mobile bet dialog * Support limit orders on numeric markets * Allow CORS exception for Vercel deployments * Remove console.logs * Update user balance by new bet amount * Tweak vercel cors * Try another regexp for vercel cors * Test another vercel regex * Slight notifications refactor * Fix docs edit link (#624) * Fix docs edit link * Update github links * Small groups UX changes * Groups UX on mobile * Leaderboards => Rankings on groups * Unused vars * create: remove automatic setting of log scale * Use react-query to cache notifications (#625) * Use react-query to cache notifications * Fix imports * Cleanup * Limit unseen notifs query * Catch the bounced query * Don't use interval * Unused var * Avoid flash of page nav * Give notification question priority & 2 lines * Right justify timestamps * Rewording * Margin * Simplify error msg * Be explicit about limit for unseen notifs * Pass limit > 0 * Remove category filters * Remove category selector references * Track notification clicks * Analyze tab usage * Bold more on new group chats * Add API route for listing a bets by user (#567) * Add API route for getting a user's bets * Refactor bets API to use /bets * Update /markets to use zod validation * Update docs * Clone missing indexes from firestore * Minor notif spacing adjustments * Enable tipping on group chats w/ notif (#629) * Tweak cors regex for vercel * Your limit bets * Implement selling shares * Merge branch 'main' into limit-orders * Fix lint * Move binary search to util file * Add note that there might be closed form * Add tooltip to explain limit probability * Tweak * Cancel your limit orders if you run out of money * Don't show amount error in probability input * Require limit prob to be >= .1% and <= 99.9% * Fix focus input bug * Simplify mobile betting dialog * Move mobile limit bets list into bet dialog. * Small fixes to existing sell shares client * Lint * Refactor useSaveShares to actually read from localStorage, use less bug-prone interface. * Fix NaN error * Remove TODO * Simple bet fill notification * Tweak wording * Sort limit bets by limit prob * Padding on limit bets * Match header size Co-authored-by: Ian Philips <iansphilips@gmail.com> Co-authored-by: ahalekelly <ahalekelly@gmail.com> Co-authored-by: mantikoros <sgrugett@gmail.com> Co-authored-by: Ben Congdon <ben@congdon.dev> Co-authored-by: Austin Chen <akrolsmir@gmail.com> |
||
---|---|---|
.. | ||
src | ||
.env | ||
.eslintrc.js | ||
.gitignore | ||
package.json | ||
README.md | ||
tsconfig.json |
NOTE: Adapted from One Word's /functions doc. Fix any errors you see!
Firestore Cloud Functions
This is code that doesn't make sense on the frontend client, e.g.
- Long-running or slow operation (database)
- Tasks that need to be run every so often (syncing email list to Mailjet)
- Anything we should't trust to clients (secrets, auth)
If you want to make and test changes, you'll have to do a bit of setup...
Installing
Adapted from https://firebase.google.com/docs/functions/get-started
$ cd functions
to switch to this folder$ yarn global add firebase-tools
to install the Firebase CLI globally$ yarn
to install JS dependencies$ firebase login
to authenticate the CLI tools to Firebase$ firebase use dev
to choose the dev project
For local development
-
Install gcloud CLI
-
If you don't have java (or see the error
Error: Process java -version has exited with code 1. Please make sure Java is installed and on your system PATH.
):$ brew install java
$ sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
-
$ gcloud auth login
to authenticate the CLI tools to Google Cloud -
$ gcloud config set project <project-id>
to choose the project ($ gcloud projects list
to see options) -
$ mkdir firestore_export
to create a folder to store the exported database -
$ yarn db:update-local-from-remote
to pull the remote db from Firestore to local 0. TODO: this won't work when open source, we'll have to point to the public db
Developing locally
$ firebase use dev
if you haven't already$ yarn serve
to spin up the emulators 0. The Emulator UI is at http://localhost:4000; the functions are hosted on :5001. Note: You have to kill and restart emulators when you change code; no hot reload =($ yarn dev:emulate
in/web
to connect to emulators with the frontend 0. Note: emulated database is cleared after every shutdown
Firestore Commands
db:update-local-from-remote
- Pull the remote db from Firestore to local, also calls:db:backup-remote
- Exports the remote dev db to the backup folder on Google Cloud Storage (called on everydb:update-local-from-remote
)db:rename-remote-backup-folder
- Renames the remote backup folder (called on everydb:backup-remote
to preserve the previous db backup)
db:backup-local
- Save the local db changes to the disk (overwrites existing)
Debugging
- Find local logs directly in the shell that ran
$ yarn dev
- Find deployed logs here
Deploying
$ firebase use prod
to switch to prod$ firebase deploy --only functions
to push your changes live! (Future TODO: auto-deploy functions on Git push)
Secrets management
Secrets are strings that shouldn't be checked into Git (eg API keys, passwords). We store these using Google Secret Manager, which provides them as environment variables to functions that require them. Some useful workflows:
- Set a secret:
$ firebase functions:secrets:set stripe.test_secret="THE-API-KEY"
- Read a secret:
$ firebase functions:secrets:access STRIPE_APIKEY