manifold/functions
Ian Philips 798253f887
Challenge Bets (#679)
* Challenge bets

* Store avatar url

* Fix before and after probs

* Check balance before creation

* Calculate winning shares

* pretty

* Change winning value

* Set shares to equal each other

* Fix share challenge link

* pretty

* remove lib refs

* Probability of bet is set to market

* Remove peer pill

* Cleanup

* Button on contract page

* don't show challenge if not binary or if resolved

* challenge button (WIP)

* fix accept challenge: don't change pool/probability

* Opengraph preview [WIP]

* elim lib

* Edit og card props

* Change challenge text

* New card gen attempt

* Get challenge on server

* challenge button styling

* Use env domain

* Remove other window ref

* Use challenge creator as avatar

* Remove user name

* Remove s from property, replace prob with outcome

* challenge form

* share text

* Add in challenge parts to template and url

* Challenge url params optional

* Add challenge params to parse request

* Parse please

* Don't remove prob

* Challenge card styling

* Challenge card styling

* Challenge card styling

* Challenge card styling

* Challenge card styling

* Challenge card styling

* Challenge card styling

* Challenge card styling

* Add to readme about how to dev og-image

* Add emojis

* button: gradient background, 2xl size

* beautify accept bet screen

* update question button

* Add separate challenge template

* Accepted challenge sharing card, fix accept bet call

* accept challenge button

* challenge winner page

* create challenge screen

* Your outcome/cost=> acceptorOutcome/cost

* New create challenge panel

* Fix main merge

* Add challenge slug to bet and filter by it

* Center title

* Add helper text

* Add FAQ section

* Lint

* Columnize the user areas in preview link too

* Absolutely position

* Spacing

* Orientation

* Restyle challenges list, cache contract name

* Make copying easy on mobile

* Link spacing

* Fix spacing

* qr codes!

* put your challenges first

* eslint

* Changes to contract buttons and create challenge modal

* Change titles around for current bet

* Add back in contract title after winning

* Cleanup

* Add challenge enabled flag

* Spacing of switch button

* Put sharing qr code  in modal

Co-authored-by: mantikoros <sgrugett@gmail.com>
2022-08-04 15:27:02 -06:00
..
src Challenge Bets (#679) 2022-08-04 15:27:02 -06:00
.env Check in .env to git 2022-07-04 16:21:59 -07:00
.eslintrc.js Fix up lint configuration, lint line endings (#615) 2022-07-05 12:25:44 -07:00
.gitignore Check in .env to git 2022-07-04 16:21:59 -07:00
.yarnrc when adding package, don't put ^ before version (#645) 2022-07-13 15:14:06 -07:00
package.json 500 mana email (#687) 2022-08-04 13:03:02 -05:00
README.md Inga/manalink bug fixes (#653) 2022-07-15 20:42:37 -05:00
tsconfig.json Typescript project references take 2 (#586) 2022-06-27 13:32:24 -07:00

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

  1. $ cd functions to switch to this folder
  2. $ yarn global add firebase-tools to install the Firebase CLI globally
  3. $ yarn to install JS dependencies
  4. $ firebase login to authenticate the CLI tools to Firebase
  5. $ firebase use dev to choose the dev project

For local development

  1. Install gcloud CLI

  2. 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.):

    1. $ brew install java
    2. $ sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
  3. $ gcloud auth login to authenticate the CLI tools to Google Cloud

  4. $ gcloud config set project <project-id> to choose the project ($ gcloud projects list to see options)

  5. $ mkdir firestore_export to create a folder to store the exported database

  6. $ 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

  1. $ firebase use dev if you haven't already
  2. $ 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 =(
  3. $ 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 every db:update-local-from-remote)
    • db:rename-remote-backup-folder - Renames the remote backup folder (called on every db: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

  1. After merging, you need to manually deploy to backend:
  2. git checkout main
  3. git pull origin main
  4. $ firebase use prod to switch to prod
  5. $ 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