manifold/functions
James Grugett f533d9bfcb
Verify balance of limit order "makers" (#1007)
* Fetch balance of users with open limit orders & cancel orders with insufficient balance

* Fix imports

* Fix bugs

* Fix a bug

* Remove redundant cast

* buttons overlaying content fix (#1005)

* buttons overlaying content fix

* stats: round DAU number

* made set width for portfolio/profit fields (#1006)

* tournaments: included resolved markets

* made delete red, moved button for regular posts (#1008)

* Fix localstorage saved user being overwritten on every page load

* Market page: Show no right panel while user loading

* Don't flash sign in button if user is loading

* election map coloring

* market group modal scroll fix (#1009)

* midterms: posititoning, make mobile friendly

* Un-daisy share buttons (#1010)

* Make embed and challenge buttons non-daisyui

* Allow link Buttons. Change tweet, dupe buttons.

* lint

* don't insert extra lines when upload photos

* Map fixes (#1011)

* usa map: fix sizing

* useSetIframeBackbroundColor

* preload contracts

* seo

* remove hook

* turn off sprig on dev

* Render timestamp only on client to prevent error of server not matching client

* Make sized container have default height so graph doesn't jump

* midterms: use null in static props

* Create common card component (#1012)

* Create common card component

* lint

* add key prop to pills

* redirect to /home after login

* create market: use transaction

* card: reduce border size

* Update groupContracts in db trigger

* Default sort to best

* Save comment sort per user rather than per contract

* Refactor Pinned Items into a reusable component

* Revert "create market: use transaction"

This reverts commit e1f24f24a9.

* Mark @v with a (Bot) label

* fix padding on daily movers

* fix type errors

* Wrap sprig init in check for window

* unindex date-docs from search engines

* Auto-prettification

* compute elasticity

* change dpm elasticity

* Fix google lighthouse issues (#1013)

* don't hide free response panel on open resolve

* liquidity sort

* Limit order trade log: '/' to 'of'. Remove 'of' in 'of YES'.

* Date doc: Toggle to disable creating a prediction market

* Listen for date doc changes

* Fix merge error

* Don't cancel all a users limit orders if they go negative

Co-authored-by: ingawei <46611122+ingawei@users.noreply.github.com>
Co-authored-by: mantikoros <sgrugett@gmail.com>
Co-authored-by: Sinclair Chen <abc.sinclair@gmail.com>
Co-authored-by: mantikoros <95266179+mantikoros@users.noreply.github.com>
Co-authored-by: Ian Philips <iansphilips@gmail.com>
Co-authored-by: Pico2x <pico2x@gmail.com>
Co-authored-by: Austin Chen <akrolsmir@gmail.com>
Co-authored-by: sipec <sipec@users.noreply.github.com>
2022-10-06 22:16:49 -05:00
..
src Verify balance of limit order "makers" (#1007) 2022-10-06 22:16:49 -05:00
.env Check in .env to git 2022-07-04 16:21:59 -07:00
.eslintrc.js Add eslint plugin to remove unused imports 2022-08-26 23:49:03 -05:00
.gitignore [WIP] Fully customizable notifications (#860) 2022-09-12 10:34:56 -06:00
.yarnrc when adding package, don't put ^ before version (#645) 2022-07-13 15:14:06 -07:00
package.json Generate markets for the Criticism and Red Teaming contest 2022-09-25 11:29:59 -04:00
README.md Revalidate getStaticProps after each bet 2022-09-19 14:55: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_APIKEY
    • Then, enter the secret in the prompt.
  • Read a secret: $ firebase functions:secrets:access STRIPE_APIKEY