global warming: warm up all cloud functions on client
This commit is contained in:
parent
5eaf50612d
commit
0b8ad76b0f
|
@ -29,6 +29,9 @@ export const createContract = functions
|
||||||
|
|
||||||
const { question, description, initialProb, ante, closeTime } = data
|
const { question, description, initialProb, ante, closeTime } = data
|
||||||
|
|
||||||
|
if (!question || !initialProb)
|
||||||
|
return { status: 'error', message: 'Missing contract attributes' }
|
||||||
|
|
||||||
if (ante !== undefined && (ante < 0 || ante > creator.balance))
|
if (ante !== undefined && (ante < 0 || ante > creator.balance))
|
||||||
return { status: 'error', message: 'Invalid ante' }
|
return { status: 'error', message: 'Invalid ante' }
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { getFunctions, httpsCallable } from 'firebase/functions'
|
import { getFunctions, httpsCallable } from 'firebase/functions'
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import React, { useState } from 'react'
|
import React, { useEffect, useState } from 'react'
|
||||||
|
|
||||||
import { useUser } from '../hooks/use-user'
|
import { useUser } from '../hooks/use-user'
|
||||||
import { Contract } from '../lib/firebase/contracts'
|
import { Contract } from '../lib/firebase/contracts'
|
||||||
|
@ -24,8 +24,14 @@ import { firebaseLogin } from '../lib/firebase/users'
|
||||||
import { OutcomeLabel } from './outcome-label'
|
import { OutcomeLabel } from './outcome-label'
|
||||||
import { AdvancedPanel } from './advanced-panel'
|
import { AdvancedPanel } from './advanced-panel'
|
||||||
import { Bet } from '../lib/firebase/bets'
|
import { Bet } from '../lib/firebase/bets'
|
||||||
|
import { placeBet } from '../lib/firebase/api-call'
|
||||||
|
|
||||||
export function BetPanel(props: { contract: Contract; className?: string }) {
|
export function BetPanel(props: { contract: Contract; className?: string }) {
|
||||||
|
useEffect(() => {
|
||||||
|
// warm up cloud function
|
||||||
|
placeBet({}).catch()
|
||||||
|
}, [])
|
||||||
|
|
||||||
const { contract, className } = props
|
const { contract, className } = props
|
||||||
|
|
||||||
const user = useUser()
|
const user = useUser()
|
||||||
|
@ -212,6 +218,3 @@ export function BetPanel(props: { contract: Contract; className?: string }) {
|
||||||
</Col>
|
</Col>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const functions = getFunctions()
|
|
||||||
export const placeBet = httpsCallable(functions, 'placeBet')
|
|
||||||
|
|
|
@ -2,6 +2,8 @@ import Link from 'next/link'
|
||||||
import _ from 'lodash'
|
import _ from 'lodash'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
|
import clsx from 'clsx'
|
||||||
|
|
||||||
import { useUserBets } from '../hooks/use-user-bets'
|
import { useUserBets } from '../hooks/use-user-bets'
|
||||||
import { Bet } from '../lib/firebase/bets'
|
import { Bet } from '../lib/firebase/bets'
|
||||||
import { User } from '../lib/firebase/users'
|
import { User } from '../lib/firebase/users'
|
||||||
|
@ -20,8 +22,7 @@ import {
|
||||||
calculateSaleAmount,
|
calculateSaleAmount,
|
||||||
resolvedPayout,
|
resolvedPayout,
|
||||||
} from '../lib/calculate'
|
} from '../lib/calculate'
|
||||||
import clsx from 'clsx'
|
import { sellBet } from '../lib/firebase/api-call'
|
||||||
import { cloudFunction } from '../lib/firebase/api-call'
|
|
||||||
import { ConfirmationButton } from './confirmation-button'
|
import { ConfirmationButton } from './confirmation-button'
|
||||||
import { OutcomeLabel, YesLabel, NoLabel, MarketLabel } from './outcome-label'
|
import { OutcomeLabel, YesLabel, NoLabel, MarketLabel } from './outcome-label'
|
||||||
|
|
||||||
|
@ -341,9 +342,12 @@ function BetRow(props: { bet: Bet; contract: Contract; sale?: Bet }) {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const sellBet = cloudFunction('sellBet')
|
|
||||||
|
|
||||||
function SellButton(props: { contract: Contract; bet: Bet }) {
|
function SellButton(props: { contract: Contract; bet: Bet }) {
|
||||||
|
useEffect(() => {
|
||||||
|
// warm up cloud function
|
||||||
|
sellBet({}).catch()
|
||||||
|
}, [])
|
||||||
|
|
||||||
const { contract, bet } = props
|
const { contract, bet } = props
|
||||||
const [isSubmitting, setIsSubmitting] = useState(false)
|
const [isSubmitting, setIsSubmitting] = useState(false)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import React, { useState } from 'react'
|
import React, { useEffect, useState } from 'react'
|
||||||
import { getFunctions, httpsCallable } from 'firebase/functions'
|
|
||||||
|
|
||||||
import { Contract } from '../lib/firebase/contracts'
|
import { Contract } from '../lib/firebase/contracts'
|
||||||
import { Col } from './layout/col'
|
import { Col } from './layout/col'
|
||||||
|
@ -9,15 +8,18 @@ import { User } from '../lib/firebase/users'
|
||||||
import { YesNoCancelSelector } from './yes-no-selector'
|
import { YesNoCancelSelector } from './yes-no-selector'
|
||||||
import { Spacer } from './layout/spacer'
|
import { Spacer } from './layout/spacer'
|
||||||
import { ConfirmationButton as ConfirmationButton } from './confirmation-button'
|
import { ConfirmationButton as ConfirmationButton } from './confirmation-button'
|
||||||
|
import { resolveMarket } from '../lib/firebase/api-call'
|
||||||
const functions = getFunctions()
|
|
||||||
export const resolveMarket = httpsCallable(functions, 'resolveMarket')
|
|
||||||
|
|
||||||
export function ResolutionPanel(props: {
|
export function ResolutionPanel(props: {
|
||||||
creator: User
|
creator: User
|
||||||
contract: Contract
|
contract: Contract
|
||||||
className?: string
|
className?: string
|
||||||
}) {
|
}) {
|
||||||
|
useEffect(() => {
|
||||||
|
// warm up cloud function
|
||||||
|
resolveMarket({}).catch()
|
||||||
|
}, [])
|
||||||
|
|
||||||
const { contract, className } = props
|
const { contract, className } = props
|
||||||
|
|
||||||
const [outcome, setOutcome] = useState<
|
const [outcome, setOutcome] = useState<
|
||||||
|
|
|
@ -4,3 +4,10 @@ const functions = getFunctions()
|
||||||
|
|
||||||
export const cloudFunction = (name: string) => httpsCallable(functions, name)
|
export const cloudFunction = (name: string) => httpsCallable(functions, name)
|
||||||
|
|
||||||
|
export const createContract = cloudFunction('createContract')
|
||||||
|
|
||||||
|
export const placeBet = cloudFunction('placeBet')
|
||||||
|
|
||||||
|
export const resolveMarket = cloudFunction('resolveMarket')
|
||||||
|
|
||||||
|
export const sellBet = cloudFunction('sellBet')
|
||||||
|
|
|
@ -2,7 +2,6 @@ import router from 'next/router'
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useState } from 'react'
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { getFunctions, httpsCallable } from 'firebase/functions'
|
|
||||||
|
|
||||||
import { CreatorContractsList } from '../components/contracts-list'
|
import { CreatorContractsList } from '../components/contracts-list'
|
||||||
import { Spacer } from '../components/layout/spacer'
|
import { Spacer } from '../components/layout/spacer'
|
||||||
|
@ -12,6 +11,7 @@ import { Contract, path } from '../lib/firebase/contracts'
|
||||||
import { Page } from '../components/page'
|
import { Page } from '../components/page'
|
||||||
import { formatMoney } from '../lib/util/format'
|
import { formatMoney } from '../lib/util/format'
|
||||||
import { AdvancedPanel } from '../components/advanced-panel'
|
import { AdvancedPanel } from '../components/advanced-panel'
|
||||||
|
import { createContract } from '../lib/firebase/api-call'
|
||||||
|
|
||||||
// Allow user to create a new contract
|
// Allow user to create a new contract
|
||||||
export default function NewContract() {
|
export default function NewContract() {
|
||||||
|
@ -19,7 +19,12 @@ export default function NewContract() {
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (creator === null) router.push('/')
|
if (creator === null) router.push('/')
|
||||||
})
|
}, [creator])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// warm up function
|
||||||
|
createContract({}).catch()
|
||||||
|
}, [])
|
||||||
|
|
||||||
const [initialProb, setInitialProb] = useState(50)
|
const [initialProb, setInitialProb] = useState(50)
|
||||||
const [question, setQuestion] = useState('')
|
const [question, setQuestion] = useState('')
|
||||||
|
@ -225,9 +230,6 @@ export default function NewContract() {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
const functions = getFunctions()
|
|
||||||
export const createContract = httpsCallable(functions, 'createContract')
|
|
||||||
|
|
||||||
// Given a date string like '2022-04-02',
|
// Given a date string like '2022-04-02',
|
||||||
// return the time just before midnight on that date (in the user's local time), as millis since epoch
|
// return the time just before midnight on that date (in the user's local time), as millis since epoch
|
||||||
function dateToMillis(date: string) {
|
function dateToMillis(date: string) {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import clsx from 'clsx'
|
import clsx from 'clsx'
|
||||||
import { getFunctions, httpsCallable } from 'firebase/functions'
|
|
||||||
import Link from 'next/link'
|
import Link from 'next/link'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
|
|
||||||
import { Col } from '../components/layout/col'
|
import { Col } from '../components/layout/col'
|
||||||
import { Row } from '../components/layout/row'
|
import { Row } from '../components/layout/row'
|
||||||
import { Spacer } from '../components/layout/spacer'
|
import { Spacer } from '../components/layout/spacer'
|
||||||
|
@ -9,11 +9,9 @@ import { Linkify } from '../components/linkify'
|
||||||
import { Page } from '../components/page'
|
import { Page } from '../components/page'
|
||||||
import { Title } from '../components/title'
|
import { Title } from '../components/title'
|
||||||
import { useUser } from '../hooks/use-user'
|
import { useUser } from '../hooks/use-user'
|
||||||
|
import { createContract } from '../lib/firebase/api-call'
|
||||||
import { compute, Contract, path } from '../lib/firebase/contracts'
|
import { compute, Contract, path } from '../lib/firebase/contracts'
|
||||||
|
|
||||||
const functions = getFunctions()
|
|
||||||
export const createContract = httpsCallable(functions, 'createContract')
|
|
||||||
|
|
||||||
type Prediction = {
|
type Prediction = {
|
||||||
question: string
|
question: string
|
||||||
description: string
|
description: string
|
||||||
|
|
Loading…
Reference in New Issue
Block a user