b2501d8145
* Answer datatype and MULTI outcome type for Contract
* Create free answer contract
* Automatically sort Tailwind classes with Prettier (#45)
* Add Prettier Tailwind plugin
* Autoformat Tailwind classes with Prettier
* Allow for non-binary contracts in contract page and related components
* logo with white inside, transparent bg
* Create answer
* Some UI for showing answers
* Answer bet panel
* Convert rest of calcuate file to generic multi contracts
* Working betting with ante'd NONE answer
* Numbered answers. Layout & calculation tweaks
* Can bet. More layout tweaks!
* Resolve answer UI
* Resolve multi market
* Resolved market UI
* Fix feed and cards for multi contracts
* Sell bets. Various fixes
* Tweaks for trades page
* Always dev mode
* Create answer bet has isAnte: true
* Fix card showing 0% for multi contracts
* Fix grouped bets feed for multi outcomes
* None option converted to none of the above label at bottom of list. Button to resolve none.
* Tweaks to no answers yet, resolve button layout
* Show ante bets on new answers in the feed
* Update placeholder text for description
* Consolidate firestore rules for subcollections
* Remove Contract and Bet type params. Use string type for outcomes.
* Increase char limit to 10k for answers. Preserve line breaks.
* Don't show resolve options after answer chosen
* Fix type error in script
* Remove NONE resolution option
* Change outcomeType to include 'MULTI' and 'FREE_RESPONSE'
* Show bet probability change and payout when creating answer
* User info change: also change answers
* Append answers to contract field 'answers'
* sort trades by resolved
* Don't include trailing !:,.; in links
* Stop flooring inputs into formatMoney
* Revert "Stop flooring inputs into formatMoney"
This reverts commit
|
||
---|---|---|
.. | ||
src | ||
.gitignore | ||
package.json | ||
README.md | ||
tsconfig.json | ||
yarn.lock |
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 functions:config:get > .runtimeconfig.json
to cache secrets for local dev (TODO: maybe not for Manifold)$ firebase use dev
to choose the dev project
Developing locally
$ firebase login
if you aren't logged into Firebase via commandline yet.$ yarn dev
to spin up the emulators 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 =(- Connect to emulators by enabling
functions.useEmulator('localhost', 5001)
Debugging
- Find local logs directly in the shell that ran
$ yarn dev
- Find deployed logs here
Deploying
$ firebase use prod
to switch to prod$ yarn deploy
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 environment config on Firebase Functions. Some useful workflows:
- Set a secret:
$ firebase functions:config:set stripe.test_secret="THE-API-KEY"
- Preview all secrets:
$ firebase functions:config:get
- Cache for local dev:
$ firebase functions:config:get > .runtimeconfig.json