| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | const stringify = require('@stringify')const html = require('@html')const cache = require('@cache')const dns = require('@dns')const postgres = require('@pg')const http = require('@http')const socket = require('@socket')const util = require('util.js')const config = require('tfb.config.js')const { getIPAddress } = dnsconst { createSocket } = socketconst { createServer, responses } = httpconst { SimpleCache } = cacheconst { sprayer, sortByMessage, spawn, getUpdateQuery, Clock } = utilconst { sjs, attr } = stringifyconst {   db, fortunes, worlds, templates,  maxQuery, maxRows, message, json,  extra } = configasync function main () {  const spray = sprayer(maxQuery)  const getRandom = () => Math.ceil(Math.random() * maxRows)  const getCount = (qs = { q: 1 }) => {    return Math.min(parseInt((qs.q) || 1, 10), maxQuery) || 1  }  const sJSON = sjs({ message: attr('string') })  const wJSON = sjs({ id: attr('number'), randomnumber: attr('number') })    const clock = new Clock()  const sock = createSocket()  const ip = await getIPAddress(db.hostname)  await sock.connect(ip, db.port)  const pg = await postgres.createSocket(sock, db)  sock.noDelay = false  const getWorldById = await pg.compile(worlds)  const getFortunes = await pg.compile(fortunes)  const worldCache = new SimpleCache(id => getWorldById(id))  const template = html.load(templates.fortunes, templates.settings)  const getRandomWorld = () => getWorldById(getRandom())  const getCachedWorld = () => worldCache.get(getRandom())  const server = createServer()    .get('/plaintext', res => res.text(message))    .get('/json', res => res.utf8(sJSON(json), responses.json))    .get('/db', async res => {      res.utf8(wJSON(await getRandomWorld()), responses.json)    })    .get('/fortunes', async res => {      res.html(template.call(sortByMessage([extra, ...await getFortunes()])))    })    .get('/cached-world', async (res, req) => {      res.json(await Promise.all(spray(getCount(req.query), getCachedWorld)))    })    .get('/query', async (res, req) => {      res.json(await Promise.all(spray(getCount(req.query), getRandomWorld)))    })    .get('/update', async (res, req) => {      const count = getCount(req.query)      const worlds = await Promise.all(spray(count, getRandomWorld))      const updateWorlds = await getUpdateQuery(count, pg)      await updateWorlds(...worlds.map(w => {        w.randomnumber = getRandom()        return [w.id, w.randomnumber]      }).flat())      res.json(worlds)    })    .listen('0.0.0.0', 8080)  clock.set(() => {    worldCache.tick()    server.update()  })}spawn(main).catch(err => just.error(err.stack))
 |