import CONFIG from './config' import { loggerPlugin } from './plugins/apolloLogger' import createProxy from './proxy' import createServer from './server' async function main() { const { httpServer } = await createServer({ plugins: [loggerPlugin], }) const url = new URL(CONFIG.GRAPHQL_URI) httpServer.listen({ port: url.port }, () => { /* eslint-disable-next-line no-console */ console.log(`🚀 Server ready at http://localhost:${url.port}/`) /* eslint-disable-next-line no-console */ console.log(`🚀 Subscriptions ready at ws://localhost:${url.port}/`) }) if (CONFIG.PROXY_S3) { /* In a Docker environment, the `AWS_ENDPOINT` of the backend container would be `http://minio:9000` but this domain is not reachable from the Docker host. Therefore, we forward the local port 9000 to "http://minio:9000." The backend can upload files to its own proxy `http://localhost:9000` and the returned file location is going to be accessible from the web frontend. This behavior is only required in local development, not in production. Therefore, we put it behind a `CONFIG.PROXY_S3` feature flag. */ const target = new URL(CONFIG.PROXY_S3) const proxy = createProxy(target) const forwardedPort = target.port // target port and forwarded port must be the same proxy.listen(forwardedPort, () => { /* eslint-disable-next-line no-console */ console.log(`Simple HTTP proxy listening on port ${forwardedPort}`) /* eslint-disable-next-line no-console */ console.log(`Proxying requests to ${target}`) }) } } // eslint-disable-next-line promise/prefer-await-to-callbacks, @typescript-eslint/use-unknown-in-catch-callback-variable main().catch((err) => { /* eslint-disable-next-line no-console */ console.error('Failed to start server:', err) process.exit(1) })