* Change authed endpoints to not look up users unnecessarily
* Parallelize some extremely parallelizable DB requests
* Clean up overcomplicated sellshares logic
* Create following button that opens follow list in modal.
* Move react query deps to web package.json
* UseFollowers hook
* Following and followers button, dialog with tabs.
* Fix line endings
* Remove carriage return from default vscode eol
* Add placeholder message if no users followed / no followers
* Tweak spacing
* Migrate sellBet to v2
* Kill sellBet warmup requests
* Point client at new v2 sellbet function
* Clean up `getSellBetInfo`
* Fix up functions index.ts
* Revert "Revert "Notifications ux fixes - wip (#383)""
This reverts commit 699b03eb42.
* Group & provide more control over notification display
* UI/UX improvements
* Remove unused text key
* Refactor
* Refactor
* Show answer resolution in notification
* Disable eslint on single linefor exhaustive deps
* Handle arbritrary notifications
* Refactor
* Remove unused vars
* Add follow user
* Various UX improvements, add follow notif
* Various small ui changes
* Show notification settings breakdown
* Improve notification status lines
* Upgrade firebase-functions 3.16.0 -> 3.21.2
* Use Secret Manager instead of config
* Small refactoring on new stripe/mailgun initialization
* Teach README about new secrets workflow
* refactoring
(cherry picked from commit 4de86d5b08)
* removed unused imports and variables
* added type for binary resolution
* Prettier
* const for binary resolutions
* using the type "resolution"
* Prettier
* Update functions/src/create-contract.ts
* launch config for debugging with vs code
* "Launch Chrome" does not work since login via google is not possible in debugger-chrome
* Breakpoints are unbound when attached to chrome
* Notifications generating on comment,answer,contract update
* Notifications MVP
* Submitted an answer => answered
* Listen for unseen notifications
* Fix userlink formatting, move page
* Fix links
* Remove redundant code
* Cleanup
* Cleanup
* Refactor name
* Comments
* Cleanup & update notif only after data retrieval
* Find initial new notifs on user change
* Enforce auth rules in db
* eslint update
* Code review changes
* Refactor reason
* Add todos
* Show question in notifiation title
* Allow larger width on md
* Condense on mobile
* Decrease padding, hide title on mobile
* Line clamp notifications
* Shrink text
* Add tsconfig.json for common
* Prefer `const` over `let` over `var`
* Kill dead code
* Fix some trivial Typescript issues
* Turn on Typescript linting in common except for no-explicit-any
* Correctly specify tsconfig dir name in functions eslintrc
* Give react children explicit types
* Add explicit types to removeUndefinedProps
* Create StripeSession type
* Give event in Dropdown an explicit type
* Revert "Give event in Dropdown an explicit type"
This reverts commit 80604310f2.
* Give bids in NewBidTable an explicit type
* Cast results of removeUndefinedProps when neccessary
* Fix type of JoinSpans
* Revert "Cast results of removeUndefinedProps when neccessary"
This reverts commit 5541617bc8.
* Revert "Add explicit types to removeUndefinedProps"
This reverts commit ccf8ffb0b5.
* Give React children types everywhere
* Give event a type
* Give event correct type
* Lint
* Standardize React import
Co-authored-by: Marshall Polaris <marshall@pol.rs>
* Add the great Zod as a dependency to help us
* Tweak eslint
* Rewrite a ton of stuff in createContract and placeBet
* Clean up error reporting in API
* Make sure the UI is enforcing validated limits on lengths
* Remove unnecessary Math.abs
* Better type on `BetInfo`
* Kill `manaLimitPerUser`
* Clean up hacky parameters on bet info functions
* Validate `closeTime` as a valid timestamp in the future
* Add tsconfig.json for common
* Prefer `const` over `let` over `var`
* Kill dead code
* Fix some trivial Typescript issues
* Turn on Typescript linting in common except for no-explicit-any
* Correctly specify tsconfig dir name in functions eslintrc
This is a hacky patch for a problem that runs more deeply: the use of
floating-point for Mana calculations, along with the associated rounding
errors.
Consider the following example:
```typescript
const balance = 1000
const bet = 5.6e-14
const newBalance = balance - bet
if (newBalance == balance) {
alert(`I placed a bet of ${bet} without changing my balance.`)
}
```
This will actually print a message, because floating-point numbers can
only represent so many digits, and thus we get 1000.0 rather than
999.99999999999994.
This is a purely theoretical attack at this point; nobody could create
enough pico-bets to actually affect their balance using this technique.
However, I believe is worth ensuring a minimum bet amount, and might
prevent other problems such as the UI showing messages like "User Foo
bought M0 of YES", which could confuse users.
For a more definite solution, we would probably need to change some
computation to integers, where addition is always commutative and
value-preserving. This is similar to what most financial software does
(e.g., Bitcoin uses 1 Satoshi = 0.00000001 BTC as their unit).