manifold/functions
James Grugett ed5f69db7a
Sell shares panel (#69)
* Split BuyAmountInput out of AmountInput

* Buy and sell tabs. Compute some sell info

* In progress

* BuyPanel & SellPanel with banner above that shows current shares and toggle button

* Remove "Remaining balance"

* Bring back 'Place a trade'. Tweaks

* Sell shares cloud function.

* Sell all shares by default. Switch back to buy if sell all your shares.

* Cache your shares in local storage so sell banner doesn't flicker.

* Compute sale value of shares with binary search to keep k constant.

* Update bets table to show BUY or SELL

* Fixes from Stephen's review

* Don't allow selling more than max shares in cloud function

* Use modal for sell shares on desktop.

* Handle floating point precision in max shares you can sell.
2022-03-29 14:56:56 -05:00
..
src Sell shares panel (#69) 2022-03-29 14:56:56 -05:00
.gitignore Reapply Manifold for Teams config changes (#54) 2022-02-26 23:29:33 -08: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