manifold/functions
James Grugett b2501d8145
Free response (#47)
* 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 2f7ab18429.

* Consistently floor user.balance

* Expand create panel on focus

From Richard Hanania's feedback

* welcome email: include link to manifold

* Fix home page in dev on branches that are not free-response

* Close emails (#50)

* script init for stephen dev

* market close emails

* order of operations

* template email

* sendMarketCloseEmail: handle unsubscribe

* remove debugging

* marketCloseEmails: every hour

* sendMarketCloseEmails: check undefined

* marketCloseEmails: "every hour" => "every 1 hours"

* Set up a read API using Vercel serverless functions (#49)

* Set up read API using Vercel serverless functions

Featuring:
/api/v0/markets
/api/v0/market/[contractId]
/api/v0/slug/[contractSlug]

* Include tags in API

* Tweaks. Remove filter for only binary contract

* Fix bet probability change for NO bets

* Put back isProd calculation

Co-authored-by: Austin Chen <akrolsmir@gmail.com>
Co-authored-by: mantikoros <sgrugett@gmail.com>
Co-authored-by: mantikoros <95266179+mantikoros@users.noreply.github.com>
2022-02-17 17:00:19 -06:00
..
src Free response (#47) 2022-02-17 17:00:19 -06:00
.gitignore initial commit 2021-12-10 12:10:30 -06:00
package.json Yarn workspaces (#42) 2022-02-01 15:25:51 -06:00
README.md DX: Cloud Functions tooling 2022-01-16 01:59:05 -05:00
tsconfig.json Folds (#34) 2022-01-21 17:21:46 -06:00
yarn.lock Stripe (#22) 2022-01-07 16:56:14 -06: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 functions:config:get > .runtimeconfig.json to cache secrets for local dev (TODO: maybe not for Manifold)
  5. $ firebase use dev to choose the dev project

Developing locally

  1. $ firebase login if you aren't logged into Firebase via commandline yet.
  2. $ 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 =(
  3. 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

  1. $ firebase use prod to switch to prod
  2. $ 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