UNPKG

stock-nse-india

Version:

This package will help us to get equity/index details and historical data from National Stock Exchange of India.

112 lines 5.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _a; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable no-console */ require("dotenv/config"); const express_1 = __importDefault(require("express")); const http_1 = __importDefault(require("http")); const https_1 = __importDefault(require("https")); const fs_1 = __importDefault(require("fs")); const swagger_ui_express_1 = __importDefault(require("swagger-ui-express")); const apollo_server_express_1 = require("apollo-server-express"); const apollo_server_core_1 = require("apollo-server-core"); const graphql_1 = require("graphql"); const load_1 = require("@graphql-tools/load"); const load_files_1 = require("@graphql-tools/load-files"); const merge_1 = require("@graphql-tools/merge"); const graphql_file_loader_1 = require("@graphql-tools/graphql-file-loader"); const swaggerDocOptions_1 = require("./swaggerDocOptions"); const path_1 = __importDefault(require("path")); const routes_1 = require("./routes"); const cors_1 = __importDefault(require("cors")); const app = (0, express_1.default)(); const port = process.env.PORT || 3000; const isHttpsEnabled = process.env.HTTPS_ENABLED === 'true'; const protocol = isHttpsEnabled ? 'https' : 'http'; const configuredHostUrl = (_a = process.env.HOST_URL) === null || _a === void 0 ? void 0 : _a.trim(); const hostUrl = configuredHostUrl ? configuredHostUrl.replace(/^https?:\/\//, `${protocol}://`) : `${protocol}://localhost:${port}`; // CORS Configuration from environment variables // CORS_ORIGINS: Comma-separated list of allowed origins // CORS_METHODS: Comma-separated list of allowed HTTP methods // CORS_HEADERS: Comma-separated list of allowed headers // CORS_CREDENTIALS: Enable/disable credentials (default: true) // Enable CORS for all routes const corsOrigins = process.env.CORS_ORIGINS ? process.env.CORS_ORIGINS.split(',').map(origin => origin.trim()) : []; const corsMethods = process.env.CORS_METHODS ? process.env.CORS_METHODS.split(',').map(method => method.trim()) : ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS']; const corsHeaders = process.env.CORS_HEADERS ? process.env.CORS_HEADERS.split(',').map(header => header.trim()) : ['Content-Type', 'Authorization']; app.use((0, cors_1.default)({ origin: [ ...corsOrigins, /^https:\/\/studio\.apollographql\.com$/, /^http:\/\/localhost:\d+$/, /^https:\/\/localhost:\d+$/, /^http:\/\/127\.0\.0\.1:\d+$/, /^https:\/\/127\.0\.0\.1:\d+$/ // Allow any 127.0.0.1 HTTPS port ], methods: corsMethods, allowedHeaders: corsHeaders, credentials: process.env.CORS_CREDENTIALS !== 'false' })); // Add JSON body parsing middleware app.use(express_1.default.json()); app.use(express_1.default.urlencoded({ extended: true })); app.use(routes_1.mainRouter); app.use('/api-docs', swagger_ui_express_1.default.serve); app.use('/api-docs', swagger_ui_express_1.default.setup(swaggerDocOptions_1.openapiSpecification)); const loadedTypeDefs = (0, load_1.loadSchemaSync)(path_1.default.join(__dirname, './**/*.graphql'), { loaders: [new graphql_file_loader_1.GraphQLFileLoader()] }); const loadedResolvers = (0, load_files_1.loadFilesSync)(path_1.default.join(__dirname, './**/*.resolver.{ts,js}')); const typeDefs = (0, merge_1.mergeTypeDefs)(loadedTypeDefs); if (process.env.NODE_ENV === 'development') { console.log('\n=== GraphQL Schema Start ===\n'); const printedTypeDefs = (0, graphql_1.print)(typeDefs); console.log(printedTypeDefs); console.log('\n=== GraphQL Schema End ===\n'); } const resolvers = (0, merge_1.mergeResolvers)(loadedResolvers); const sslKeyPath = process.env.SSL_KEY_PATH || path_1.default.resolve(process.cwd(), 'certs/localhost-key.pem'); const sslCertPath = process.env.SSL_CERT_PATH || path_1.default.resolve(process.cwd(), 'certs/localhost.pem'); const networkServer = isHttpsEnabled ? (() => { if (!fs_1.default.existsSync(sslKeyPath) || !fs_1.default.existsSync(sslCertPath)) { throw new Error(`HTTPS cert files not found. Checked key: ${sslKeyPath}, cert: ${sslCertPath}`); } return https_1.default.createServer({ key: fs_1.default.readFileSync(sslKeyPath), cert: fs_1.default.readFileSync(sslCertPath), }, app); })() : http_1.default.createServer(app); const server = new apollo_server_express_1.ApolloServer({ typeDefs, resolvers, plugins: [(0, apollo_server_core_1.ApolloServerPluginDrainHttpServer)({ httpServer: networkServer })] }); server.start().then(() => { server.applyMiddleware({ app }); networkServer.listen(port, () => { console.log(`NseIndia App started in port ${port}`); console.log(`For API docs: ${hostUrl}/api-docs`); console.log(`Open ${hostUrl} in browser.`); console.log(`For graphql: ${hostUrl}${server.graphqlPath}`); console.log(`Server mode: ${isHttpsEnabled ? 'HTTPS' : 'HTTP'}`); // Log CORS configuration if (corsOrigins.length > 0) { console.log(`CORS Origins: ${corsOrigins.join(', ')}`); } console.log(`CORS Methods: ${corsMethods.join(', ')}`); console.log(`CORS Headers: ${corsHeaders.join(', ')}`); console.log(`CORS Credentials: ${process.env.CORS_CREDENTIALS !== 'false'}`); }); }); //# sourceMappingURL=server.js.map