manifold/functions
TrueMilli a3663d03e8
Automated market resolution (#404)
* Added radio buttons to market creation (non functional)

* Ignoring vs code files

Should this be done in the repo or should everyone using VS Code do that himself globally on his machine(s)?

* Removed 'automatic' resolution

* added union type for resolution

* revert: resolution could be anything here (non binary markets)

* Expanded ChoicesToggleGroup for string choices

* Added combined resolution and required buttons to market creation

* restricted automatic resolution to binary markets

* added automatic resolution to contract

* added automatic resolution to contract overview

* string or number array to mixed array

* created const for resolutions

* Added comments for leading semicolons

* configuration of auto resolution on market creation

* v1.22.19

* v1.0.0

* v0.0.0

* v1.0.0

* v1.22.19

* Mock display automatic resolution

* Revert changes to market creation

* Revert "v1.22.19"

This reverts commit 22f59adc9c.

* Removed resolutiontype from contract creation

* Added auto resolution time to contract

* Auto resolution date editable

* refactoring

* Editable interface for auto resolution

* New edit interface for auto resolution

* Setting of auto resolve date when changing close date

* prohibited changing other peoples markets

* removed unnecessary export

* refactoring

(cherry picked from commit 4de86d5b08)

* Added comments for leading semicolons

(cherry picked from commit 60739c7853)

* Ignoring vs code files

Should this be done in the repo or should everyone using VS Code do that himself globally on his machine(s)?

(cherry picked from commit 944de9398a)

* removed unused imports and variables

* added type for binary resolution

* Prettier

* const for binary resolutions

* using the type "resolution"

* Prettier

* Re-added comment

* Update functions/src/create-contract.ts

* Revert "Ignoring vs code files"

This reverts commit 09aea5c207.

* launch config for debugging with vs code WIP

* "Launch Chrome" does not work since login via google is not possible in debugger-chrome
* Breakpoints are unbound when attached to chrome

* Revert "Added comments for leading semicolons"

* prettier

* linebreak crlf

* vscode settings

* correct linebreaks
* search exclusion
* automatic prettifier

* vscode settings

* correct linebreaks
* search exclusion
* automatic prettifier

* Working debugger config

* fix merge

* Removed comments, default resolution MKT

* removed vscode from gitignore

* refactoring description update

* Added auto resolution to LiteMarket

* fix date, setDate mutates object

* fixed firestore.rules

* script to add auto resolution to all markets

* regularely auto resolve markets

* fix description error

* moved calculate ts for access in firebase

* Revert "moved calculate ts for access in firebase"

This reverts commit 8380bf4f72.

* fix reference to calculate for firebase

* fixed references to time

* renamed function

* added description

* added auto resolution to description

* direct bool check instead of != null

* direct bool check instead of != undefined

* remove explicit type

* Fix free response markets

* removed contract from functionname

* interval set to 1h

* query instead of filter

* folds ~> contracts

* query instead of filter

* promise.all instead of foreach

* removed contractDoc from function header

* removed autoResolution from function header

* batchedWaitAll instead of promise.all

* removed unused parameter

* replaced auto resolution with constant

* suggestions from PR

* fix comment

* removed unused imports

* added scripts to add close dates on prod

* optimization

* removed test script

* security: only auto resolve markets which are closed

* consistency checks

* re-added type check for binary markets
* moved check of probability into switch case block

* removed unused import

* auto resolution every minute

* auto resolution time optional

* pr fixes
2022-06-14 15:01:32 -05:00
..
src Automated market resolution (#404) 2022-06-14 15:01:32 -05:00
.eslintrc.js Ratchet up linting for functions package a little bit (#431) 2022-06-05 22:50:27 -07:00
.gitignore Separate free response answers & comments (#100) 2022-04-26 07:24:57 -06:00
package.json Following and follower list (#456) 2022-06-07 22:24:18 -05:00
README.md Switch to Google Secret Manager for function secrets (#418) 2022-06-04 14:39:25 -07:00
tsconfig.json More absolute imports (#156) 2022-05-09 09:04:36 -04: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.): 0. $ brew install java
    1. $ 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. $ 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 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