require('dotenv').config(); const express = require('express'); const cors = require('cors'); const { Pool, types } = require('pg'); // Return bigint (oid 20) and numeric (oid 1700) as JS numbers instead of strings, // so apache-arrow's tableFromJSON infers Int/Float64 rather than Dictionary. types.setTypeParser(20, v => v === null ? null : Number(v)); types.setTypeParser(1700, v => v === null ? null : Number(v)); const app = express(); app.use(cors()); app.use(express.json()); app.use(express.static('public/app')); const pool = new Pool({ host: process.env.DB_HOST, port: parseInt(process.env.DB_PORT) || 5432, database: process.env.DB_NAME, user: process.env.DB_USER, password: process.env.DB_PASSWORD, ssl: false }); pool.on('error', (err) => { console.error('pg pool error', err); }); app.use('/api', require('./routes/tables')(pool)); app.use('/api', require('./routes/sources')(pool)); app.use('/api', require('./routes/versions')(pool)); app.use('/api', require('./routes/operations')(pool)); app.use('/api', require('./routes/log')(pool)); const port = process.env.PORT || 3010; app.listen(port, '0.0.0.0', () => console.log(`pf_app started on port ${port}`));