// Catches all uncaught errors so process never dies process.on('uncaughtException', err => { console.log('Caught exception: ', err); }); import dotenv from 'dotenv' dotenv.config() import bodyParser from 'body-parser' import express from 'express' import cors from 'cors' import http from 'http' const app = express() const server = http.createServer(app); app.use(bodyParser.json()) const port = process.env.PORT import axios from 'axios' import pug from 'pug' import { DateTime } from 'luxon' import bcrypt from 'bcrypt' const saltRounds = 10 import { get } from 'lodash-es' import { default as s } from 'smarts' const smarts = s() import thingtime from 'thingtime' import { Server } from 'socket.io'; const io = new Server(server, { cors: { origin: '*', methods: ['GET', 'POST'], }, }) import { v4 as uuidv4 } from 'uuid' (async () => { await thingtime.init() // Express middleware app.use(cors({ origin: '*', })) app.get('/', (req, res) => { res.status(200).send('Hello ThingTime World!') }) app.get('/v1/thing', async (req, res) => { // console.log('req', req.query) const { request } = req.query if (request === 'get') { const { uuid } = req.query const thing = await thingtime.get(uuid) res.status(200).send({ thing: smarts.serialize(thing), }) } else { let { thing } = req.query thing = smarts.parse(thing, { noFunctions: true }) if (!thing) { res.status(400).send('No thing provided') return } await thingtime.save(thing) res.status(200).send() } }) // socket config io.on('connection', socket => { console.log('Something with socket id', socket.id, 'connected') socket.on('registerListener', msg => { console.log('Message from socket with id', socket.id) thingtime.registerListener(socket, msg.uuid) }) socket.on('disconnect', () => { console.log('Something with socket id', socket.id, 'disconnected') }) }); app.get('/privacy-policy', async (req, res) => res.status(200).send(pug.compile(` .privacy-policy( style="max-width: 600px margin: 0 auto padding-top: 100px" ) h1.title.text-white( style='fontSize: 48px fontWeight: bold' ) | Privacy Policy p.subtitle | The friendly ThingTime API Privacy Policy p.answer .pt-12 This API uses YouTube API Services .pt-12 ThingTime API does not use any analytics tools to store any data, nor does it store any user data of any kind. .pt-12 We do not allow any 3rd parties to serve Ads on ThingTime API .pt-12 You can contact ThingTime API at a(href='emailto:subberAPI@alopu.com', style="padding-left: 6px") subberAPI@alopu.com .pt-12 a.underline(href='https://www.youtube.com/t/terms') YouTube Terms of Service .pt-12 a.underline(href='https://policies.google.com/privacy') Google Privacy Policy style(type="text/css"). .pt-12 { padding-top: 12px } `)())) server.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`) }) })()