rapidrestify
Version:
Create a robust Node.js backend REST API boilerplate integrated seamlessly with MongoDB. This package offers a comprehensive foundation for swiftly developing RESTful APIs. It includes a collection of pre-configured components, aiding in rapid setup and d
189 lines • 239 kB
JSON
{
"name": "exsp4",
"type": "folder",
"children": [
{
"type": "file",
"name": ".gitignore",
"content": "# Logs\r\n*.log\r\n\r\n# Enviornment variables\r\n.env\r\n\r\n# Dependency directories\r\n/node_modules\r\n\r\n# Optional npm cache directory\r\n.npm\r\ntemp\r\n\r\n# Optional REPL history\r\n.node_repl_history\r\n*.sql\r\n.idea\r\n.vscode\r\nlogs/*\r\ncache\r\n*.txt\r\n*.aof\r\ndata",
"children": []
},
{
"type": "file",
"name": "app.js",
"content": "require(\"dotenv\").config();\r\nconst express = require(\"express\");\r\nconst cors = require(\"cors\");\r\nconst compression = require(\"compression\");\r\nconst cookieParser = require(\"cookie-parser\");\r\nconst morgan = require(\"morgan\");\r\nconst path = require(\"path\");\r\nconst helmet = require(\"helmet\");\r\nconst passport = require(\"passport\");\r\nconst cookieSession = require(\"cookie-session\");\r\n\r\n// imports\r\nconst { logger } = require(\"./src/utils\");\r\nconst indexRoutes = require(\"./src/routes\");\r\nconst { HELPER } = require(\"./src/helpers\");\r\n\r\n// dbConnection\r\nrequire(\"./src/database\");\r\n\r\n// express servers\r\nconst app = express();\r\n\r\napp.use(\r\n cookieSession({\r\n name: \"test-auth\",\r\n keys: [\"key1\", \"key2\"],\r\n })\r\n);\r\n\r\napp.use(passport.initialize());\r\napp.use(passport.session());\r\n\r\n// mongoose connection\r\n\r\napp.use(express.json());\r\napp.use(express.urlencoded({ extended: true, parameterLimit: 1000000 }));\r\napp.use(compression());\r\napp.use(cookieParser());\r\n\r\napp.use(\r\n cors({\r\n origin: \"*\",\r\n methods: \"GET,HEAD,PUT,PATCH,POST,DELETE\",\r\n credentials: true,\r\n optionsSuccessStatus: 204,\r\n })\r\n);\r\n\r\napp.use(helmet());\r\napp.use(\r\n morgan(\r\n \"[:date[web]] :method :url :status :response-time ms - :res[content-length]\"\r\n )\r\n);\r\n\r\n// Enabled CORS\r\napp.use((req, res, next) => {\r\n res.setHeader(\"Access-Control-Allow-Origin\", \"*\");\r\n res.header(\"Access-Control-Allow-Methods\", \"GET,PUT,POST,PATCH,DELETE\");\r\n res.header(\"Access-Control-Allow-Headers\", \"Content-Type, Authorization\");\r\n\r\n // intercept OPTIONS method\r\n if (req.method === \"OPTIONS\") {\r\n res.send(200);\r\n } else {\r\n next();\r\n }\r\n});\r\n\r\n// Public Path\r\nconst publicPath = path.join(__dirname, \"src/public\");\r\napp.use(express.static(publicPath));\r\n\r\n// api Routes\r\napp.use(\"/api/v1\", indexRoutes);\r\n\r\n// errorHandler\r\napp.use(HELPER.errorHandler);\r\n\r\n// routesHandler\r\napp.use(HELPER.routeHandler);\r\n\r\n// handle exceptions\r\nprocess.on(\"uncaughtException\", function (err) {\r\n logger.error(err);\r\n});\r\n\r\n// dev server\r\n\r\n// handle rejection\r\nprocess.on(\"unhandledRejection\", function (err) {\r\n logger.error(err);\r\n});\r\n\r\nmodule.exports = app;\r\n",
"children": []
},
{
"type": "file",
"name": "package.json",
"content": "{\r\n \"name\": \"exsp\",\r\n \"version\": \"1.0.0\",\r\n \"description\": \"\",\r\n \"main\": \"bin/www\",\r\n \"scripts\": {\r\n \"start\": \"node bin/www\",\r\n \"dev\": \"nodemon bin/www\"\r\n },\r\n \"keywords\": [],\r\n \"author\": \"\",\r\n \"license\": \"ISC\",\r\n \"dependencies\": {\r\n \"aws-sdk\": \"^2.1541.0\",\r\n \"bcrypt\": \"^5.1.1\",\r\n \"bree\": \"^9.2.2\",\r\n \"compression\": \"^1.7.4\",\r\n \"cookie-parser\": \"^1.4.6\",\r\n \"cookie-session\": \"^2.0.0\",\r\n \"cors\": \"^2.8.5\",\r\n \"debug\": \"^4.3.4\",\r\n \"dotenv\": \"^16.3.1\",\r\n \"express\": \"^4.18.2\",\r\n \"express-session\": \"^1.17.3\",\r\n \"helmet\": \"^7.1.0\",\r\n \"joi\": \"^17.11.0\",\r\n \"jsonwebtoken\": \"^9.0.2\",\r\n \"mongoose\": \"^8.0.3\",\r\n \"morgan\": \"^1.10.0\",\r\n \"multer\": \"^1.4.4\",\r\n \"multer-s3\": \"^2.10.0\",\r\n \"passport\": \"^0.5.2\",\r\n \"pgsn\": \"^1.1.3\",\r\n \"pino\": \"^8.17.2\",\r\n \"pino-pretty\": \"^10.3.1\",\r\n \"validator\": \"^13.11.0\"\r\n },\r\n \"devDependencies\": {\r\n \"nodemon\": \"^3.0.2\"\r\n }\r\n}\r\n",
"children": []
},
{
"name": "src",
"type": "folder",
"children": [
{
"name": "config",
"type": "folder",
"children": [
{
"type": "file",
"name": "constants.js",
"content": "module.exports = {\r\n APP: {\r\n port: process.env.PORT,\r\n env: process.env.NODE_ENV,\r\n },\r\n USER: {\r\n ROLES: {\r\n ADMIN: \"ADMIN\",\r\n USER: \"USER\",\r\n },\r\n STATUS: {\r\n VERIFIED: \"verified\",\r\n UNVERIFIED: \"unverified\",\r\n },\r\n PASSWORD: {\r\n DEFAULT: \"adroit1234\",\r\n },\r\n },\r\n FREQS: {\r\n SUNDAY: \"sunday\",\r\n MONDAY: \"monday\",\r\n TUESDAY: \"tuesday\",\r\n WEDNESDAY: \"wednesday\",\r\n THURSDAY: \"thursday\",\r\n FRIDAY: \"friday\",\r\n SUTRADAY: \"sutraday\",\r\n },\r\n POINTSAWARD: {\r\n STREAK: 1,\r\n POINT: 1,\r\n BADGE: 1,\r\n },\r\n CONTENT_TYPE: {\r\n ARTICLE: \"article\",\r\n VIDEO: \"video\",\r\n PODCAST: \"podcast\",\r\n INTERVIEW: \"interview\",\r\n },\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "httpCodes.js",
"content": "module.exports = {\r\n OK: 200,\r\n CREATED: 201,\r\n ACCEPTED: 202,\r\n NO_CONTENT: 204,\r\n BAD_REQUEST: 400,\r\n UNAUTHORIZED: 401,\r\n FORBIDDEN: 403,\r\n NOT_FOUND: 404,\r\n PRECONDITION_FAILED: 412,\r\n UNPROCESSABLE_ENTITY: 422,\r\n FAILED_DEPENDENCY: 424,\r\n TOO_MANY_REQUESTS: 429,\r\n INTERNAL_SERVER_ERROR: 500,\r\n BAD_GATEWAY: 502,\r\n SERVICE_UNAVAILABLE: 503,\r\n UNSUPPORTED_MEDIA: 415,\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "index.js",
"content": "const constants = require(\"./constants\");\r\nconst messages = require(\"./messages\");\r\nconst httpCodes = require(\"./httpCodes\");\r\n\r\nmodule.exports = {\r\n CONSTANTS: constants,\r\n MESSAGES: messages, /// (statusCode) => messages[statusCode] || \"Unknown Status Code\",\r\n HTTP_CODES: httpCodes,\r\n S3_KEYS: {\r\n S3_ENDPOINT: process.env.S3_ENDPOINT & \"region.host.com\",\r\n BUCKET_NAME: process.env.BUCKET_NAME || \"test\",\r\n FOLDER_NAME: process.env.FOLDER_NAME || \"test\",\r\n },\r\n JWT: {\r\n ACCESS_TOKEN_SECRET: process.env.ACCESS_TOKEN_SECRET || \"secret_key\",\r\n REFRESH_TOKEN_SECRET: process.env.REFRESH_TOKEN_SECRET || \"secret_key\",\r\n ACCESS_TOKEN_TIME: process.env.ACCESS_TOKEN_TIME || \"1d\",\r\n REFRESH_TOKEN_TIME: process.env.REFRESH_TOKEN_TIME || \"7d\",\r\n },\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "messages.js",
"content": "module.exports = {\r\n LOGIN_SUCCESS: \"Login successful\",\r\n LOGIN_FAILED: \"Login failed\",\r\n WRONG_PASSWORD: \"Incorrect password\",\r\n CREATED: \"Successfully created\",\r\n TOGGLE_TRACKER: \"Toggle Successfully Tracked\",\r\n FILE_UPLOAD: \"Successfully File Upload.\",\r\n REGISTER_USER: \"You are successfully registered.\",\r\n SEND_OTP: \"Otp has been sent your register number.\",\r\n SEND_OTP_EMAIL: \"Otp has been sent your register email.\",\r\n SUCCESS_OTP: \"Otp Verified\",\r\n FAILED_OTP: \"Invalid Otp.\",\r\n INVALID_USERNAME: \"Invalid username.\",\r\n CREATE_FAILED: \"Failed to create record\",\r\n GET_RECORD_SUCCESS: \"Retrieved records successfully\",\r\n GET_SINGLE_RECORD: \"Retrieved single record successfully\",\r\n UPDATE_SUCCESS: \"Record updated successfully\",\r\n PASSWORD_CHANGES: \"Password has been changed.\",\r\n DELETE_SUCCESS: \"Record deleted successfully\",\r\n NOT_FOUND: \"Record Not Found.\",\r\n NOT_FOUND_FUN: (message) => `${message} does not exist.`,\r\n ROUTE_NOT_FOUND: \"Route Not Found!\",\r\n EMAIL_NOT_VERIFIED: \"Email must be verified\",\r\n EMAIL_ALREADY_TAKEN: \"Email Already taken\",\r\n BAD_REQUEST: \"Bad request\",\r\n BAD_ROUTINE_ID: \"Invalid routine id\",\r\n BAD_PILLAR_ID: \"Invalid pillar id\",\r\n UNAUTHORIZED: \"Unauthorized access\",\r\n FORBIDDEN: \"Access forbidden\",\r\n PRECONDITION_FAILED: \"Precondition failed\",\r\n TOO_MANY_REQUESTS: \"Too many requests\",\r\n SERVICE_UNAVAILABLE: \"Service unavailable\",\r\n INTERNAL_SERVER_ERROR: \"Internal server error\",\r\n AUTH_ERRORS: {\r\n TOKEN_HEADER: \"Token header not found\",\r\n TOKEN: \"Token not found\",\r\n UNAUTHORIZED: \"Oops! Unauthorised access\",\r\n BLOCKED: \"Oops! You are block. Contact to admin.\",\r\n },\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "s3.intance.js",
"content": "require(\"dotenv\").config();\r\nconst AWS = require(\"aws-sdk\");\r\n\r\nAWS.config.apiVersions = { s3: \"2012-10-17\" };\r\n\r\nAWS.config.update({\r\n accessKeyId: process.env.AWS_ACCESS_KEY_ID,\r\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,\r\n region: process.env.S3_REGION,\r\n});\r\nmodule.exports = { s3: new AWS.S3() };\r\n",
"children": []
}
]
},
{
"name": "middlewares",
"type": "folder",
"children": [
{
"type": "file",
"name": "authorisation.js",
"content": "const { MESSAGES } = require(\"../config\");\r\nconst { UserModel } = require(\"../database/models/users.model\");\r\nconst { UnauthorizedException } = require(\"../helpers/errorResponse\");\r\nconst { jwt } = require(\"../utils\");\r\n\r\nmodule.exports = {\r\n validateAccessToken:\r\n (allowedRoles = []) =>\r\n async (req, res, next) => {\r\n try {\r\n if (!req.headers.authorization)\r\n throw new UnauthorizedException(MESSAGES.AUTH_ERRORS.TOKEN_HEADER);\r\n\r\n const token = req.headers.authorization.split(\" \")[1]; // Extracting Bearer token from header.\r\n\r\n if (!token) throw new UnauthorizedException(MESSAGES.AUTH_ERRORS.TOKEN);\r\n\r\n const decoded = await jwt.verifyAccessToken(token);\r\n\r\n const user = await UserModel.findOne({\r\n _id: decoded.id,\r\n deletedAt: null,\r\n });\r\n\r\n if (!user) {\r\n throw new UnauthorizedException(MESSAGES.AUTH_ERRORS.UNAUTHORIZED);\r\n }\r\n\r\n if (user.isBlock) {\r\n throw new UnauthorizedException(MESSAGES.AUTH_ERRORS.BLOCKED);\r\n }\r\n\r\n if (allowedRoles.includes(decoded.role)) {\r\n req.user = decoded;\r\n next();\r\n } else {\r\n throw new UnauthorizedException(MESSAGES.AUTH_ERRORS.UNAUTHORIZED);\r\n }\r\n } catch (error) {\r\n next(error);\r\n }\r\n },\r\n validateRefreshToken:\r\n (allowedRoles = []) =>\r\n async (req, res, next) => {\r\n try {\r\n if (!req.headers.authorization)\r\n throw new UnauthorizedException(MESSAGES.AUTH_ERRORS.TOKEN_HEADER);\r\n\r\n const token = req.headers.authorization.split(\" \")[1]; // Extracting Bearer token from header.s\r\n if (!token) throw new UnauthorizedException(MESSAGES.AUTH_ERRORS.TOKEN);\r\n const decoded = await jwt.verifyRefreshToken(token);\r\n\r\n if (allowedRoles.includes(decoded.role)) {\r\n req.user = decoded;\r\n next();\r\n } else {\r\n throw new UnauthorizedException(MESSAGES.AUTH_ERRORS.UNAUTHORIZED);\r\n }\r\n } catch (error) {\r\n next(error);\r\n }\r\n },\r\n\r\n isAuthenticated: (req, res, next) => {\r\n if (req.user) {\r\n next();\r\n } else {\r\n throw new UnauthorizedException(MESSAGES.AUTH_ERRORS.UNAUTHORIZED);\r\n }\r\n\r\n // if (!req.isAuthenticated()) {\r\n // throw new UnauthorizedException(\"Oops! Unauthorised access\");\r\n // }\r\n // next();\r\n },\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "index.js",
"content": "const validation = require(\"./validation\");\r\nexports.MDWR = {\r\n ...require(\"./authorisation\"),\r\n ...require(\"./upload.files\"),\r\n validationMiddleware: validation,\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "upload.files.js",
"content": "const multer = require(\"multer\");\r\nconst fileFilter = (req, file, cb) => {\r\n cb(null, true);\r\n};\r\nmodule.exports = {\r\n uploadFile: multer({ storage: multer.memoryStorage(), fileFilter }).single(\r\n \"file\"\r\n ),\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "validation.js",
"content": "const {\r\n UnHandledException,\r\n PreconditionException,\r\n} = require(\"../helpers/errorResponse\");\r\n\r\nconst options = {\r\n basic: {\r\n abortEarly: false,\r\n convert: true,\r\n },\r\n array: {\r\n abortEarly: false,\r\n convert: true,\r\n },\r\n};\r\n\r\nmodule.exports = (schema) => (req, res, next) => {\r\n Object.keys(schema).forEach((key) => {\r\n const { error } = schema[key].validate(req[key], options);\r\n console.log(error);\r\n if (error) {\r\n console.log(error);\r\n const message = error.details[0].message || \"Invalid Inputs\";\r\n throw new PreconditionException(message);\r\n }\r\n });\r\n next();\r\n};\r\n",
"children": []
}
]
},
{
"name": "routes",
"type": "folder",
"children": [
{
"type": "file",
"name": "index.js",
"content": "const express = require(\"express\");\r\nconst { usersRoutes } = require(\"../modules/users\");\r\nconst router = express.Router();\r\n\r\nrouter.use(\"/users\", usersRoutes);\r\n\r\nmodule.exports = router;\r\n",
"children": []
}
]
},
{
"name": "utils",
"type": "folder",
"children": [
{
"type": "file",
"name": "bucket.js",
"content": "const { s3 } = require(\"../config/s3.intance\");\r\nconst { UnHandledException } = require(\"../helpers/errorResponse\");\r\nconst path = require(\"path\");\r\nconst logger = require(\"./logger\");\r\n\r\nexports.putObject = async (file) => {\r\n try {\r\n const params = {\r\n Bucket: process.env.BUCKET_NAME,\r\n Key: `${process.env.FOLDER_NAME}/__${Date.now()}${path.extname(\r\n file.originalname\r\n )}`,\r\n Body: file.buffer,\r\n ContentType: file.mimetype,\r\n };\r\n return await s3.upload(params).promise();\r\n } catch (error) {\r\n logger.error(error);\r\n return null;\r\n }\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "data.js",
"content": "const contryData = {\r\n \"Andaman and Nicobar Islands\": [\"Port Blair\"],\r\n Haryana: [\r\n \"Faridabad\",\r\n \"Gurgaon\",\r\n \"Hisar\",\r\n \"Rohtak\",\r\n \"Panipat\",\r\n \"Karnal\",\r\n \"Sonipat\",\r\n \"Yamunanagar\",\r\n \"Panchkula\",\r\n \"Bhiwani\",\r\n \"Bahadurgarh\",\r\n \"Jind\",\r\n \"Sirsa\",\r\n \"Thanesar\",\r\n \"Kaithal\",\r\n \"Palwal\",\r\n \"Rewari\",\r\n \"Hansi\",\r\n \"Narnaul\",\r\n \"Fatehabad\",\r\n \"Gohana\",\r\n \"Tohana\",\r\n \"Narwana\",\r\n \"Mandi Dabwali\",\r\n \"Charkhi Dadri\",\r\n \"Shahbad\",\r\n \"Pehowa\",\r\n \"Samalkha\",\r\n \"Pinjore\",\r\n \"Ladwa\",\r\n \"Sohna\",\r\n \"Safidon\",\r\n \"Taraori\",\r\n \"Mahendragarh\",\r\n \"Ratia\",\r\n \"Rania\",\r\n \"Sarsod\",\r\n ],\r\n \"Tamil Nadu\": [\r\n \"Chennai\",\r\n \"Coimbatore\",\r\n \"Madurai\",\r\n \"Tiruchirappalli\",\r\n \"Salem\",\r\n \"Tirunelveli\",\r\n \"Tiruppur\",\r\n \"Ranipet\",\r\n \"Nagercoil\",\r\n \"Thanjavur\",\r\n \"Vellore\",\r\n \"Kancheepuram\",\r\n \"Erode\",\r\n \"Tiruvannamalai\",\r\n \"Pollachi\",\r\n \"Rajapalayam\",\r\n \"Sivakasi\",\r\n \"Pudukkottai\",\r\n \"Neyveli (TS)\",\r\n \"Nagapattinam\",\r\n \"Viluppuram\",\r\n \"Tiruchengode\",\r\n \"Vaniyambadi\",\r\n \"Theni Allinagaram\",\r\n \"Udhagamandalam\",\r\n \"Aruppukkottai\",\r\n \"Paramakudi\",\r\n \"Arakkonam\",\r\n \"Virudhachalam\",\r\n \"Srivilliputhur\",\r\n \"Tindivanam\",\r\n \"Virudhunagar\",\r\n \"Karur\",\r\n \"Valparai\",\r\n \"Sankarankovil\",\r\n \"Tenkasi\",\r\n \"Palani\",\r\n \"Pattukkottai\",\r\n \"Tirupathur\",\r\n \"Ramanathapuram\",\r\n \"Udumalaipettai\",\r\n \"Gobichettipalayam\",\r\n \"Thiruvarur\",\r\n \"Thiruvallur\",\r\n \"Panruti\",\r\n \"Namakkal\",\r\n \"Thirumangalam\",\r\n \"Vikramasingapuram\",\r\n \"Nellikuppam\",\r\n \"Rasipuram\",\r\n \"Tiruttani\",\r\n \"Nandivaram-Guduvancheri\",\r\n \"Periyakulam\",\r\n \"Pernampattu\",\r\n \"Vellakoil\",\r\n \"Sivaganga\",\r\n \"Vadalur\",\r\n \"Rameshwaram\",\r\n \"Tiruvethipuram\",\r\n \"Perambalur\",\r\n \"Usilampatti\",\r\n \"Vedaranyam\",\r\n \"Sathyamangalam\",\r\n \"Puliyankudi\",\r\n \"Nanjikottai\",\r\n \"Thuraiyur\",\r\n \"Sirkali\",\r\n \"Tiruchendur\",\r\n \"Periyasemur\",\r\n \"Sattur\",\r\n \"Vandavasi\",\r\n \"Tharamangalam\",\r\n \"Tirukkoyilur\",\r\n \"Oddanchatram\",\r\n \"Palladam\",\r\n \"Vadakkuvalliyur\",\r\n \"Tirukalukundram\",\r\n \"Uthamapalayam\",\r\n \"Surandai\",\r\n \"Sankari\",\r\n \"Shenkottai\",\r\n \"Vadipatti\",\r\n \"Sholingur\",\r\n \"Tirupathur\",\r\n \"Manachanallur\",\r\n \"Viswanatham\",\r\n \"Polur\",\r\n \"Panagudi\",\r\n \"Uthiramerur\",\r\n \"Thiruthuraipoondi\",\r\n \"Pallapatti\",\r\n \"Ponneri\",\r\n \"Lalgudi\",\r\n \"Natham\",\r\n \"Unnamalaikadai\",\r\n \"P.N.Patti\",\r\n \"Tharangambadi\",\r\n \"Tittakudi\",\r\n \"Pacode\",\r\n \"O' Valley\",\r\n \"Suriyampalayam\",\r\n \"Sholavandan\",\r\n \"Thammampatti\",\r\n \"Namagiripettai\",\r\n \"Peravurani\",\r\n \"Parangipettai\",\r\n \"Pudupattinam\",\r\n \"Pallikonda\",\r\n \"Sivagiri\",\r\n \"Punjaipugalur\",\r\n \"Padmanabhapuram\",\r\n \"Thirupuvanam\",\r\n ],\r\n \"Madhya Pradesh\": [\r\n \"Indore\",\r\n \"Bhopal\",\r\n \"Jabalpur\",\r\n \"Gwalior\",\r\n \"Ujjain\",\r\n \"Sagar\",\r\n \"Ratlam\",\r\n \"Satna\",\r\n \"Murwara (Katni)\",\r\n \"Morena\",\r\n \"Singrauli\",\r\n \"Rewa\",\r\n \"Vidisha\",\r\n \"Ganjbasoda\",\r\n \"Shivpuri\",\r\n \"Mandsaur\",\r\n \"Neemuch\",\r\n \"Nagda\",\r\n \"Itarsi\",\r\n \"Sarni\",\r\n \"Sehore\",\r\n \"Mhow Cantonment\",\r\n \"Seoni\",\r\n \"Balaghat\",\r\n \"Ashok Nagar\",\r\n \"Tikamgarh\",\r\n \"Shahdol\",\r\n \"Pithampur\",\r\n \"Alirajpur\",\r\n \"Mandla\",\r\n \"Sheopur\",\r\n \"Shajapur\",\r\n \"Panna\",\r\n \"Raghogarh-Vijaypur\",\r\n \"Sendhwa\",\r\n \"Sidhi\",\r\n \"Pipariya\",\r\n \"Shujalpur\",\r\n \"Sironj\",\r\n \"Pandhurna\",\r\n \"Nowgong\",\r\n \"Mandideep\",\r\n \"Sihora\",\r\n \"Raisen\",\r\n \"Lahar\",\r\n \"Maihar\",\r\n \"Sanawad\",\r\n \"Sabalgarh\",\r\n \"Umaria\",\r\n \"Porsa\",\r\n \"Narsinghgarh\",\r\n \"Malaj Khand\",\r\n \"Sarangpur\",\r\n \"Mundi\",\r\n \"Nepanagar\",\r\n \"Pasan\",\r\n \"Mahidpur\",\r\n \"Seoni-Malwa\",\r\n \"Rehli\",\r\n \"Manawar\",\r\n \"Rahatgarh\",\r\n \"Panagar\",\r\n \"Wara Seoni\",\r\n \"Tarana\",\r\n \"Sausar\",\r\n \"Rajgarh\",\r\n \"Niwari\",\r\n \"Mauganj\",\r\n \"Manasa\",\r\n \"Nainpur\",\r\n \"Prithvipur\",\r\n \"Sohagpur\",\r\n \"Nowrozabad (Khodargama)\",\r\n \"Shamgarh\",\r\n \"Maharajpur\",\r\n \"Multai\",\r\n \"Pali\",\r\n \"Pachore\",\r\n \"Rau\",\r\n \"Mhowgaon\",\r\n \"Vijaypur\",\r\n \"Narsinghgarh\",\r\n ],\r\n Jharkhand: [\r\n \"Dhanbad\",\r\n \"Ranchi\",\r\n \"Jamshedpur\",\r\n \"Bokaro Steel City\",\r\n \"Deoghar\",\r\n \"Phusro\",\r\n \"Adityapur\",\r\n \"Hazaribag\",\r\n \"Giridih\",\r\n \"Ramgarh\",\r\n \"Jhumri Tilaiya\",\r\n \"Saunda\",\r\n \"Sahibganj\",\r\n \"Medininagar (Daltonganj)\",\r\n \"Chaibasa\",\r\n \"Chatra\",\r\n \"Gumia\",\r\n \"Dumka\",\r\n \"Madhupur\",\r\n \"Chirkunda\",\r\n \"Pakaur\",\r\n \"Simdega\",\r\n \"Musabani\",\r\n \"Mihijam\",\r\n \"Patratu\",\r\n \"Lohardaga\",\r\n \"Tenu dam-cum-Kathhara\",\r\n ],\r\n Mizoram: [\"Aizawl\", \"Lunglei\", \"Saiha\"],\r\n Nagaland: [\r\n \"Dimapur\",\r\n \"Kohima\",\r\n \"Zunheboto\",\r\n \"Tuensang\",\r\n \"Wokha\",\r\n \"Mokokchung\",\r\n ],\r\n \"Himachal Pradesh\": [\r\n \"Shimla\",\r\n \"Mandi\",\r\n \"Solan\",\r\n \"Nahan\",\r\n \"Sundarnagar\",\r\n \"Palampur\",\r\n \"Kullu\",\r\n ],\r\n Tripura: [\r\n \"Agartala\",\r\n \"Udaipur\",\r\n \"Dharmanagar\",\r\n \"Pratapgarh\",\r\n \"Kailasahar\",\r\n \"Belonia\",\r\n \"Khowai\",\r\n ],\r\n \"Andhra Pradesh\": [\r\n \"Visakhapatnam\",\r\n \"Vijayawada\",\r\n \"Guntur\",\r\n \"Nellore\",\r\n \"Kurnool\",\r\n \"Rajahmundry\",\r\n \"Kakinada\",\r\n \"Tirupati\",\r\n \"Anantapur\",\r\n \"Kadapa\",\r\n \"Vizianagaram\",\r\n \"Eluru\",\r\n \"Ongole\",\r\n \"Nandyal\",\r\n \"Machilipatnam\",\r\n \"Adoni\",\r\n \"Tenali\",\r\n \"Chittoor\",\r\n \"Hindupur\",\r\n \"Proddatur\",\r\n \"Bhimavaram\",\r\n \"Madanapalle\",\r\n \"Guntakal\",\r\n \"Dharmavaram\",\r\n \"Gudivada\",\r\n \"Srikakulam\",\r\n \"Narasaraopet\",\r\n \"Rajampet\",\r\n \"Tadpatri\",\r\n \"Tadepalligudem\",\r\n \"Chilakaluripet\",\r\n \"Yemmiganur\",\r\n \"Kadiri\",\r\n \"Chirala\",\r\n \"Anakapalle\",\r\n \"Kavali\",\r\n \"Palacole\",\r\n \"Sullurpeta\",\r\n \"Tanuku\",\r\n \"Rayachoti\",\r\n \"Srikalahasti\",\r\n \"Bapatla\",\r\n \"Naidupet\",\r\n \"Nagari\",\r\n \"Gudur\",\r\n \"Vinukonda\",\r\n \"Narasapuram\",\r\n \"Nuzvid\",\r\n \"Markapur\",\r\n \"Ponnur\",\r\n \"Kandukur\",\r\n \"Bobbili\",\r\n \"Rayadurg\",\r\n \"Samalkot\",\r\n \"Jaggaiahpet\",\r\n \"Tuni\",\r\n \"Amalapuram\",\r\n \"Bheemunipatnam\",\r\n \"Venkatagiri\",\r\n \"Sattenapalle\",\r\n \"Pithapuram\",\r\n \"Palasa Kasibugga\",\r\n \"Parvathipuram\",\r\n \"Macherla\",\r\n \"Gooty\",\r\n \"Salur\",\r\n \"Mandapeta\",\r\n \"Jammalamadugu\",\r\n \"Peddapuram\",\r\n \"Punganur\",\r\n \"Nidadavole\",\r\n \"Repalle\",\r\n \"Ramachandrapuram\",\r\n \"Kovvur\",\r\n \"Tiruvuru\",\r\n \"Uravakonda\",\r\n \"Narsipatnam\",\r\n \"Yerraguntla\",\r\n \"Pedana\",\r\n \"Puttur\",\r\n \"Renigunta\",\r\n \"Rajam\",\r\n \"Srisailam Project (Right Flank Colony) Township\",\r\n ],\r\n Punjab: [\r\n \"Ludhiana\",\r\n \"Patiala\",\r\n \"Amritsar\",\r\n \"Jalandhar\",\r\n \"Bathinda\",\r\n \"Pathankot\",\r\n \"Hoshiarpur\",\r\n \"Batala\",\r\n \"Moga\",\r\n \"Malerkotla\",\r\n \"Khanna\",\r\n \"Mohali\",\r\n \"Barnala\",\r\n \"Firozpur\",\r\n \"Phagwara\",\r\n \"Kapurthala\",\r\n \"Zirakpur\",\r\n \"Kot Kapura\",\r\n \"Faridkot\",\r\n \"Muktsar\",\r\n \"Rajpura\",\r\n \"Sangrur\",\r\n \"Fazilka\",\r\n \"Gurdaspur\",\r\n \"Kharar\",\r\n \"Gobindgarh\",\r\n \"Mansa\",\r\n \"Malout\",\r\n \"Nabha\",\r\n \"Tarn Taran\",\r\n \"Jagraon\",\r\n \"Sunam\",\r\n \"Dhuri\",\r\n \"Firozpur Cantt.\",\r\n \"Sirhind Fatehgarh Sahib\",\r\n \"Rupnagar\",\r\n \"Jalandhar Cantt.\",\r\n \"Samana\",\r\n \"Nawanshahr\",\r\n \"Rampura Phul\",\r\n \"Nangal\",\r\n \"Nakodar\",\r\n \"Zira\",\r\n \"Patti\",\r\n \"Raikot\",\r\n \"Longowal\",\r\n \"Urmar Tanda\",\r\n \"Morinda, India\",\r\n \"Phillaur\",\r\n \"Pattran\",\r\n \"Qadian\",\r\n \"Sujanpur\",\r\n \"Mukerian\",\r\n \"Talwara\",\r\n ],\r\n Chandigarh: [\"Chandigarh\"],\r\n Rajasthan: [\r\n \"Jaipur\",\r\n \"Jodhpur\",\r\n \"Bikaner\",\r\n \"Udaipur\",\r\n \"Ajmer\",\r\n \"Bhilwara\",\r\n \"Alwar\",\r\n \"Bharatpur\",\r\n \"Pali\",\r\n \"Barmer\",\r\n \"Sikar\",\r\n \"Tonk\",\r\n \"Sadulpur\",\r\n \"Sawai Madhopur\",\r\n \"Nagaur\",\r\n \"Makrana\",\r\n \"Sujangarh\",\r\n \"Sardarshahar\",\r\n \"Ladnu\",\r\n \"Ratangarh\",\r\n \"Nokha\",\r\n \"Nimbahera\",\r\n \"Suratgarh\",\r\n \"Rajsamand\",\r\n \"Lachhmangarh\",\r\n \"Rajgarh (Churu)\",\r\n \"Nasirabad\",\r\n \"Nohar\",\r\n \"Phalodi\",\r\n \"Nathdwara\",\r\n \"Pilani\",\r\n \"Merta City\",\r\n \"Sojat\",\r\n \"Neem-Ka-Thana\",\r\n \"Sirohi\",\r\n \"Pratapgarh\",\r\n \"Rawatbhata\",\r\n \"Sangaria\",\r\n \"Lalsot\",\r\n \"Pilibanga\",\r\n \"Pipar City\",\r\n \"Taranagar\",\r\n \"Vijainagar, Ajmer\",\r\n \"Sumerpur\",\r\n \"Sagwara\",\r\n \"Ramganj Mandi\",\r\n \"Lakheri\",\r\n \"Udaipurwati\",\r\n \"Losal\",\r\n \"Sri Madhopur\",\r\n \"Ramngarh\",\r\n \"Rawatsar\",\r\n \"Rajakhera\",\r\n \"Shahpura\",\r\n \"Shahpura\",\r\n \"Raisinghnagar\",\r\n \"Malpura\",\r\n \"Nadbai\",\r\n \"Sanchore\",\r\n \"Nagar\",\r\n \"Rajgarh (Alwar)\",\r\n \"Sheoganj\",\r\n \"Sadri\",\r\n \"Todaraisingh\",\r\n \"Todabhim\",\r\n \"Reengus\",\r\n \"Rajaldesar\",\r\n \"Sadulshahar\",\r\n \"Sambhar\",\r\n \"Prantij\",\r\n \"Mount Abu\",\r\n \"Mangrol\",\r\n \"Phulera\",\r\n \"Mandawa\",\r\n \"Pindwara\",\r\n \"Mandalgarh\",\r\n \"Takhatgarh\",\r\n ],\r\n Assam: [\r\n \"Guwahati\",\r\n \"Silchar\",\r\n \"Dibrugarh\",\r\n \"Nagaon\",\r\n \"Tinsukia\",\r\n \"Jorhat\",\r\n \"Bongaigaon City\",\r\n \"Dhubri\",\r\n \"Diphu\",\r\n \"North Lakhimpur\",\r\n \"Tezpur\",\r\n \"Karimganj\",\r\n \"Sibsagar\",\r\n \"Goalpara\",\r\n \"Barpeta\",\r\n \"Lanka\",\r\n \"Lumding\",\r\n \"Mankachar\",\r\n \"Nalbari\",\r\n \"Rangia\",\r\n \"Margherita\",\r\n \"Mangaldoi\",\r\n \"Silapathar\",\r\n \"Mariani\",\r\n \"Marigaon\",\r\n ],\r\n Odisha: [\r\n \"Bhubaneswar\",\r\n \"Cuttack\",\r\n \"Raurkela\",\r\n \"Brahmapur\",\r\n \"Sambalpur\",\r\n \"Puri\",\r\n \"Baleshwar Town\",\r\n \"Baripada Town\",\r\n \"Bhadrak\",\r\n \"Balangir\",\r\n \"Jharsuguda\",\r\n \"Bargarh\",\r\n \"Paradip\",\r\n \"Bhawanipatna\",\r\n \"Dhenkanal\",\r\n \"Barbil\",\r\n \"Kendujhar\",\r\n \"Sunabeda\",\r\n \"Rayagada\",\r\n \"Jatani\",\r\n \"Byasanagar\",\r\n \"Kendrapara\",\r\n \"Rajagangapur\",\r\n \"Parlakhemundi\",\r\n \"Talcher\",\r\n \"Sundargarh\",\r\n \"Phulabani\",\r\n \"Pattamundai\",\r\n \"Titlagarh\",\r\n \"Nabarangapur\",\r\n \"Soro\",\r\n \"Malkangiri\",\r\n \"Rairangpur\",\r\n \"Tarbha\",\r\n ],\r\n Chhattisgarh: [\r\n \"Raipur\",\r\n \"Bhilai Nagar\",\r\n \"Korba\",\r\n \"Bilaspur\",\r\n \"Durg\",\r\n \"Rajnandgaon\",\r\n \"Jagdalpur\",\r\n \"Raigarh\",\r\n \"Ambikapur\",\r\n \"Mahasamund\",\r\n \"Dhamtari\",\r\n \"Chirmiri\",\r\n \"Bhatapara\",\r\n \"Dalli-Rajhara\",\r\n \"Naila Janjgir\",\r\n \"Tilda Newra\",\r\n \"Mungeli\",\r\n \"Manendragarh\",\r\n \"Sakti\",\r\n ],\r\n \"Jammu and Kashmir\": [\r\n \"Srinagar\",\r\n \"Jammu\",\r\n \"Baramula\",\r\n \"Anantnag\",\r\n \"Sopore\",\r\n \"KathUrban Agglomeration\",\r\n \"Rajauri\",\r\n \"Punch\",\r\n \"Udhampur\",\r\n ],\r\n Karnataka: [\r\n \"Bengaluru\",\r\n \"Hubli-Dharwad\",\r\n \"Belagavi\",\r\n \"Mangaluru\",\r\n \"Davanagere\",\r\n \"Ballari\",\r\n \"Mysore\",\r\n \"Tumkur\",\r\n \"Shivamogga\",\r\n \"Raayachuru\",\r\n \"Robertson Pet\",\r\n \"Kolar\",\r\n \"Mandya\",\r\n \"Udupi\",\r\n \"Chikkamagaluru\",\r\n \"Karwar\",\r\n \"Ranebennuru\",\r\n \"Ranibennur\",\r\n \"Ramanagaram\",\r\n \"Gokak\",\r\n \"Yadgir\",\r\n \"Rabkavi Banhatti\",\r\n \"Shahabad\",\r\n \"Sirsi\",\r\n \"Sindhnur\",\r\n \"Tiptur\",\r\n \"Arsikere\",\r\n \"Nanjangud\",\r\n \"Sagara\",\r\n \"Sira\",\r\n \"Puttur\",\r\n \"Athni\",\r\n \"Mulbagal\",\r\n \"Surapura\",\r\n \"Siruguppa\",\r\n \"Mudhol\",\r\n \"Sidlaghatta\",\r\n \"Shahpur\",\r\n \"Saundatti-Yellamma\",\r\n \"Wadi\",\r\n \"Manvi\",\r\n \"Nelamangala\",\r\n \"Lakshmeshwar\",\r\n \"Ramdurg\",\r\n \"Nargund\",\r\n \"Tarikere\",\r\n \"Malavalli\",\r\n \"Savanur\",\r\n \"Lingsugur\",\r\n \"Vijayapura\",\r\n \"Sankeshwara\",\r\n \"Madikeri\",\r\n \"Talikota\",\r\n \"Sedam\",\r\n \"Shikaripur\",\r\n \"Mahalingapura\",\r\n \"Mudalagi\",\r\n \"Muddebihal\",\r\n \"Pavagada\",\r\n \"Malur\",\r\n \"Sindhagi\",\r\n \"Sanduru\",\r\n \"Afzalpur\",\r\n \"Maddur\",\r\n \"Madhugiri\",\r\n \"Tekkalakote\",\r\n \"Terdal\",\r\n \"Mudabidri\",\r\n \"Magadi\",\r\n \"Navalgund\",\r\n \"Shiggaon\",\r\n \"Shrirangapattana\",\r\n \"Sindagi\",\r\n \"Sakaleshapura\",\r\n \"Srinivaspur\",\r\n \"Ron\",\r\n \"Mundargi\",\r\n \"Sadalagi\",\r\n \"Piriyapatna\",\r\n \"Adyar\",\r\n ],\r\n Manipur: [\"Imphal\", \"Thoubal\", \"Lilong\", \"Mayang Imphal\"],\r\n Kerala: [\r\n \"Thiruvananthapuram\",\r\n \"Kochi\",\r\n \"Kozhikode\",\r\n \"Kollam\",\r\n \"Thrissur\",\r\n \"Palakkad\",\r\n \"Alappuzha\",\r\n \"Malappuram\",\r\n \"Ponnani\",\r\n \"Vatakara\",\r\n \"Kanhangad\",\r\n \"Taliparamba\",\r\n \"Koyilandy\",\r\n \"Neyyattinkara\",\r\n \"Kayamkulam\",\r\n \"Nedumangad\",\r\n \"Kannur\",\r\n \"Tirur\",\r\n \"Kottayam\",\r\n \"Kasaragod\",\r\n \"Kunnamkulam\",\r\n \"Ottappalam\",\r\n \"Thiruvalla\",\r\n \"Thodupuzha\",\r\n \"Chalakudy\",\r\n \"Changanassery\",\r\n \"Punalur\",\r\n \"Nilambur\",\r\n \"Cherthala\",\r\n \"Perinthalmanna\",\r\n \"Mattannur\",\r\n \"Shoranur\",\r\n \"Varkala\",\r\n \"Paravoor\",\r\n \"Pathanamthitta\",\r\n \"Peringathur\",\r\n \"Attingal\",\r\n \"Kodungallur\",\r\n \"Pappinisseri\",\r\n \"Chittur-Thathamangalam\",\r\n \"Muvattupuzha\",\r\n \"Adoor\",\r\n \"Mavelikkara\",\r\n \"Mavoor\",\r\n \"Perumbavoor\",\r\n \"Vaikom\",\r\n \"Palai\",\r\n \"Panniyannur\",\r\n \"Guruvayoor\",\r\n \"Puthuppally\",\r\n \"Panamattom\",\r\n ],\r\n Delhi: [\"Delhi\", \"New Delhi\"],\r\n \"Dadra and Nagar Haveli\": [\"Silvassa\"],\r\n Puducherry: [\"Pondicherry\", \"Karaikal\", \"Yanam\", \"Mahe\"],\r\n Uttarakhand: [\r\n \"Dehradun\",\r\n \"Hardwar\",\r\n \"Haldwani-cum-Kathgodam\",\r\n \"Srinagar\",\r\n \"Kashipur\",\r\n \"Roorkee\",\r\n \"Rudrapur\",\r\n \"Rishikesh\",\r\n \"Ramnagar\",\r\n \"Pithoragarh\",\r\n \"Manglaur\",\r\n \"Nainital\",\r\n \"Mussoorie\",\r\n \"Tehri\",\r\n \"Pauri\",\r\n \"Nagla\",\r\n \"Sitarganj\",\r\n \"Bageshwar\",\r\n ],\r\n \"Uttar Pradesh\": [\r\n \"Lucknow\",\r\n \"Kanpur\",\r\n \"Firozabad\",\r\n \"Agra\",\r\n \"Meerut\",\r\n \"Varanasi\",\r\n \"Allahabad\",\r\n \"Amroha\",\r\n \"Moradabad\",\r\n \"Aligarh\",\r\n \"Saharanpur\",\r\n \"Noida\",\r\n \"Loni\",\r\n \"Jhansi\",\r\n \"Shahjahanpur\",\r\n \"Rampur\",\r\n \"Modinagar\",\r\n \"Hapur\",\r\n \"Etawah\",\r\n \"Sambhal\",\r\n \"Orai\",\r\n \"Bahraich\",\r\n \"Unnao\",\r\n \"Rae Bareli\",\r\n \"Lakhimpur\",\r\n \"Sitapur\",\r\n \"Lalitpur\",\r\n \"Pilibhit\",\r\n \"Chandausi\",\r\n \"Hardoi \",\r\n \"Azamgarh\",\r\n \"Khair\",\r\n \"Sultanpur\",\r\n \"Tanda\",\r\n \"Nagina\",\r\n \"Shamli\",\r\n \"Najibabad\",\r\n \"Shikohabad\",\r\n \"Sikandrabad\",\r\n \"Shahabad, Hardoi\",\r\n \"Pilkhuwa\",\r\n \"Renukoot\",\r\n \"Vrindavan\",\r\n \"Ujhani\",\r\n \"Laharpur\",\r\n \"Tilhar\",\r\n \"Sahaswan\",\r\n \"Rath\",\r\n \"Sherkot\",\r\n \"Kalpi\",\r\n \"Tundla\",\r\n \"Sandila\",\r\n \"Nanpara\",\r\n \"Sardhana\",\r\n \"Nehtaur\",\r\n \"Seohara\",\r\n \"Padrauna\",\r\n \"Mathura\",\r\n \"Thakurdwara\",\r\n \"Nawabganj\",\r\n \"Siana\",\r\n \"Noorpur\",\r\n \"Sikandra Rao\",\r\n \"Puranpur\",\r\n \"Rudauli\",\r\n \"Thana Bhawan\",\r\n \"Palia Kalan\",\r\n \"Zaidpur\",\r\n \"Nautanwa\",\r\n \"Zamania\",\r\n \"Shikarpur, Bulandshahr\",\r\n \"Naugawan Sadat\",\r\n \"Fatehpur Sikri\",\r\n \"Shahabad, Rampur\",\r\n \"Robertsganj\",\r\n \"Utraula\",\r\n \"Sadabad\",\r\n \"Rasra\",\r\n \"Lar\",\r\n \"Lal Gopalganj Nindaura\",\r\n \"Sirsaganj\",\r\n \"Pihani\",\r\n \"Shamsabad, Agra\",\r\n \"Rudrapur\",\r\n \"Soron\",\r\n \"SUrban Agglomerationr\",\r\n \"Samdhan\",\r\n \"Sahjanwa\",\r\n \"Rampur Maniharan\",\r\n \"Sumerpur\",\r\n \"Shahganj\",\r\n \"Tulsipur\",\r\n \"Tirwaganj\",\r\n \"PurqUrban Agglomerationzi\",\r\n \"Shamsabad, Farrukhabad\",\r\n \"Warhapur\",\r\n \"Powayan\",\r\n \"Sandi\",\r\n \"Achhnera\",\r\n \"Naraura\",\r\n \"Nakur\",\r\n \"Sahaspur\",\r\n \"Safipur\",\r\n \"Reoti\",\r\n \"Sikanderpur\",\r\n \"Saidpur\",\r\n \"Sirsi\",\r\n \"Purwa\",\r\n \"Parasi\",\r\n \"Lalganj\",\r\n \"Phulpur\",\r\n \"Shishgarh\",\r\n \"Sahawar\",\r\n \"Samthar\",\r\n \"Pukhrayan\",\r\n \"Obra\",\r\n \"Niwai\",\r\n \"Mirzapur\",\r\n ],\r\n Bihar: [\r\n \"Patna\",\r\n \"Gaya\",\r\n \"Bhagalpur\",\r\n \"Muzaffarpur\",\r\n \"Darbhanga\",\r\n \"Arrah\",\r\n \"Begusarai\",\r\n \"Chhapra\",\r\n \"Katihar\",\r\n \"Munger\",\r\n \"Purnia\",\r\n \"Saharsa\",\r\n \"Sasaram\",\r\n \"Hajipur\",\r\n \"Dehri-on-Sone\",\r\n \"Bettiah\",\r\n \"Motihari\",\r\n \"Bagaha\",\r\n \"Siwan\",\r\n \"Kishanganj\",\r\n \"Jamalpur\",\r\n \"Buxar\",\r\n \"Jehanabad\",\r\n \"Aurangabad\",\r\n \"Lakhisarai\",\r\n \"Nawada\",\r\n \"Jamui\",\r\n \"Sitamarhi\",\r\n \"Araria\",\r\n \"Gopalganj\",\r\n \"Madhubani\",\r\n \"Masaurhi\",\r\n \"Samastipur\",\r\n \"Mokameh\",\r\n \"Supaul\",\r\n \"Dumraon\",\r\n \"Arwal\",\r\n \"Forbesganj\",\r\n \"BhabUrban Agglomeration\",\r\n \"Narkatiaganj\",\r\n \"Naugachhia\",\r\n \"Madhepura\",\r\n \"Sheikhpura\",\r\n \"Sultanganj\",\r\n \"Raxaul Bazar\",\r\n \"Ramnagar\",\r\n \"Mahnar Bazar\",\r\n \"Warisaliganj\",\r\n \"Revelganj\",\r\n \"Rajgir\",\r\n \"Sonepur\",\r\n \"Sherghati\",\r\n \"Sugauli\",\r\n \"Makhdumpur\",\r\n \"Maner\",\r\n \"Rosera\",\r\n \"Nokha\",\r\n \"Piro\",\r\n \"Rafiganj\",\r\n \"Marhaura\",\r\n \"Mirganj\",\r\n \"Lalganj\",\r\n \"Murliganj\",\r\n \"Motipur\",\r\n \"Manihari\",\r\n \"Sheohar\",\r\n \"Maharajganj\",\r\n \"Silao\",\r\n \"Barh\",\r\n \"Asarganj\",\r\n ],\r\n Gujarat: [\r\n \"Ahmedabad\",\r\n \"Surat\",\r\n \"Vadodara\",\r\n \"Rajkot\",\r\n \"Bhavnagar\",\r\n \"Jamnagar\",\r\n \"Nadiad\",\r\n \"Porbandar\",\r\n \"Anand\",\r\n \"Morvi\",\r\n \"Mahesana\",\r\n \"Bharuch\",\r\n \"Vapi\",\r\n \"Navsari\",\r\n \"Veraval\",\r\n \"Bhuj\",\r\n \"Godhra\",\r\n \"Palanpur\",\r\n \"Valsad\",\r\n \"Patan\",\r\n \"Deesa\",\r\n \"Amreli\",\r\n \"Anjar\",\r\n \"Dhoraji\",\r\n \"Khambhat\",\r\n \"Mahuva\",\r\n \"Keshod\",\r\n \"Wadhwan\",\r\n \"Ankleshwar\",\r\n \"Savarkundla\",\r\n \"Kadi\",\r\n \"Visnagar\",\r\n \"Upleta\",\r\n \"Una\",\r\n \"Sidhpur\",\r\n \"Unjha\",\r\n \"Mangrol\",\r\n \"Viramgam\",\r\n \"Modasa\",\r\n \"Palitana\",\r\n \"Petlad\",\r\n \"Kapadvanj\",\r\n \"Sihor\",\r\n \"Wankaner\",\r\n \"Limbdi\",\r\n \"Mandvi\",\r\n \"Thangadh\",\r\n \"Vyara\",\r\n \"Padra\",\r\n \"Lunawada\",\r\n \"Rajpipla\",\r\n \"Vapi\",\r\n \"Umreth\",\r\n \"Sanand\",\r\n \"Rajula\",\r\n \"Radhanpur\",\r\n \"Mahemdabad\",\r\n \"Ranavav\",\r\n \"Tharad\",\r\n \"Mansa\",\r\n \"Umbergaon\",\r\n \"Talaja\",\r\n \"Vadnagar\",\r\n \"Manavadar\",\r\n \"Salaya\",\r\n \"Vijapur\",\r\n \"Pardi\",\r\n \"Rapar\",\r\n \"Songadh\",\r\n \"Lathi\",\r\n \"Adalaj\",\r\n \"Chhapra\",\r\n \"Gandhinagar\",\r\n ],\r\n Telangana: [\r\n \"Hyderabad\",\r\n \"Warangal\",\r\n \"Nizamabad\",\r\n \"Karimnagar\",\r\n \"Ramagundam\",\r\n \"Khammam\",\r\n \"Mahbubnagar\",\r\n \"Mancherial\",\r\n \"Adilabad\",\r\n \"Suryapet\",\r\n \"Jagtial\",\r\n \"Miryalaguda\",\r\n \"Nirmal\",\r\n \"Kamareddy\",\r\n \"Kothagudem\",\r\n \"Bodhan\",\r\n \"Palwancha\",\r\n \"Mandamarri\",\r\n \"Koratla\",\r\n \"Sircilla\",\r\n \"Tandur\",\r\n \"Siddipet\",\r\n \"Wanaparthy\",\r\n \"Kagaznagar\",\r\n \"Gadwal\",\r\n \"Sangareddy\",\r\n \"Bellampalle\",\r\n \"Bhongir\",\r\n \"Vikarabad\",\r\n \"Jangaon\",\r\n \"Bhadrachalam\",\r\n \"Bhainsa\",\r\n \"Farooqnagar\",\r\n \"Medak\",\r\n \"Narayanpet\",\r\n \"Sadasivpet\",\r\n \"Yellandu\",\r\n \"Manuguru\",\r\n \"Kyathampalle\",\r\n \"Nagarkurnool\",\r\n ],\r\n Meghalaya: [\"Shillong\", \"Tura\", \"Nongstoin\"],\r\n \"Himachal Praddesh\": [\"Manali\"],\r\n \"Arunachal Pradesh\": [\"Naharlagun\", \"Pasighat\"],\r\n Maharashtra: [\r\n \"Mumbai\",\r\n \"Pune\",\r\n \"Nagpur\",\r\n \"Thane\",\r\n \"Nashik\",\r\n \"Kalyan-Dombivali\",\r\n \"Vasai-Virar\",\r\n \"Solapur\",\r\n \"Mira-Bhayandar\",\r\n \"Bhiwandi\",\r\n \"Amravati\",\r\n \"Nanded-Waghala\",\r\n \"Sangli\",\r\n \"Malegaon\",\r\n \"Akola\",\r\n \"Latur\",\r\n \"Dhule\",\r\n \"Ahmednagar\",\r\n \"Ichalkaranji\",\r\n \"Parbhani\",\r\n \"Panvel\",\r\n \"Yavatmal\",\r\n \"Achalpur\",\r\n \"Osmanabad\",\r\n \"Nandurbar\",\r\n \"Satara\",\r\n \"Wardha\",\r\n \"Udgir\",\r\n \"Aurangabad\",\r\n \"Amalner\",\r\n \"Akot\",\r\n \"Pandharpur\",\r\n \"Shrirampur\",\r\n \"Parli\",\r\n \"Washim\",\r\n \"Ambejogai\",\r\n \"Manmad\",\r\n \"Ratnagiri\",\r\n \"Uran Islampur\",\r\n \"Pusad\",\r\n \"Sangamner\",\r\n \"Shirpur-Warwade\",\r\n \"Malkapur\",\r\n \"Wani\",\r\n \"Lonavla\",\r\n \"Talegaon Dabhade\",\r\n \"Anjangaon\",\r\n \"Umred\",\r\n \"Palghar\",\r\n \"Shegaon\",\r\n \"Ozar\",\r\n \"Phaltan\",\r\n \"Yevla\",\r\n \"Shahade\",\r\n \"Vita\",\r\n \"Umarkhed\",\r\n \"Warora\",\r\n \"Pachora\",\r\n \"Tumsar\",\r\n \"Manjlegaon\",\r\n \"Sillod\",\r\n \"Arvi\",\r\n \"Nandura\",\r\n \"Vaijapur\",\r\n \"Wadgaon Road\",\r\n \"Sailu\",\r\n \"Murtijapur\",\r\n \"Tasgaon\",\r\n \"Mehkar\",\r\n \"Yawal\",\r\n \"Pulgaon\",\r\n \"Nilanga\",\r\n \"Wai\",\r\n \"Umarga\",\r\n \"Paithan\",\r\n \"Rahuri\",\r\n \"Nawapur\",\r\n \"Tuljapur\",\r\n \"Morshi\",\r\n \"Purna\",\r\n \"Satana\",\r\n \"Pathri\",\r\n \"Sinnar\",\r\n \"Uchgaon\",\r\n \"Uran\",\r\n \"Pen\",\r\n \"Karjat\",\r\n \"Manwath\",\r\n \"Partur\",\r\n \"Sangole\",\r\n \"Mangrulpir\",\r\n \"Risod\",\r\n \"Shirur\",\r\n \"Savner\",\r\n \"Sasvad\",\r\n \"Pandharkaoda\",\r\n \"Talode\",\r\n \"Shrigonda\",\r\n \"Shirdi\",\r\n \"Raver\",\r\n \"Mukhed\",\r\n \"Rajura\",\r\n \"Vadgaon Kasba\",\r\n \"Tirora\",\r\n \"Mahad\",\r\n \"Lonar\",\r\n \"Sawantwadi\",\r\n \"Pathardi\",\r\n \"Pauni\",\r\n \"Ramtek\",\r\n \"Mul\",\r\n \"Soyagaon\",\r\n \"Mangalvedhe\",\r\n \"Narkhed\",\r\n \"Shendurjana\",\r\n \"Patur\",\r\n \"Mhaswad\",\r\n \"Loha\",\r\n \"Nandgaon\",\r\n \"Warud\",\r\n ],\r\n Goa: [\"Marmagao\", \"Panaji\", \"Margao\", \"Mapusa\"],\r\n \"West Bengal\": [\r\n \"Kolkata\",\r\n \"Siliguri\",\r\n \"Asansol\",\r\n \"Raghunathganj\",\r\n \"Kharagpur\",\r\n \"Naihati\",\r\n \"English Bazar\",\r\n \"Baharampur\",\r\n \"Hugli-Chinsurah\",\r\n \"Raiganj\",\r\n \"Jalpaiguri\",\r\n \"Santipur\",\r\n \"Balurghat\",\r\n \"Medinipur\",\r\n \"Habra\",\r\n \"Ranaghat\",\r\n \"Bankura\",\r\n \"Nabadwip\",\r\n \"Darjiling\",\r\n \"Purulia\",\r\n \"Arambagh\",\r\n \"Tamluk\",\r\n \"AlipurdUrban Agglomerationr\",\r\n \"Suri\",\r\n \"Jhargram\",\r\n \"Gangarampur\",\r\n \"Rampurhat\",\r\n \"Kalimpong\",\r\n \"Sainthia\",\r\n \"Taki\",\r\n \"Murshidabad\",\r\n \"Memari\",\r\n \"Paschim Punropara\",\r\n \"Tarakeswar\",\r\n \"Sonamukhi\",\r\n \"PandUrban Agglomeration\",\r\n \"Mainaguri\",\r\n \"Malda\",\r\n \"Panchla\",\r\n \"Raghunathpur\",\r\n \"Mathabhanga\",\r\n \"Monoharpur\",\r\n \"Srirampore\",\r\n \"Adra\",\r\n ],\r\n};\r\n\r\nexports.getPayloadCountries = () => {\r\n const data = new Map();\r\n for (let key in contryData) {\r\n if (!data.has(key)) {\r\n data.set(key, { state: key, city: contryData[key] });\r\n }\r\n }\r\n return Array.from(data.values());\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "date.utils.js",
"content": "exports.isCurrentTimeInRange = () => {\r\n const currentDate = new Date();\r\n const currentHours = currentDate.getHours();\r\n const currentMinutes = currentDate.getMinutes();\r\n // Convert the current time to minutes for easier comparison\r\n const currentTimeInMinutes = currentHours * 60 + currentMinutes;\r\n // Define the time range: 11:45 PM to 11:59 PM\r\n const startTimeInMinutes = 11 * 60 + 10;\r\n const endTimeInMinutes = 11 * 60 + 59;\r\n\r\n // Check if the current time is within the specified range\r\n return (\r\n currentTimeInMinutes >= startTimeInMinutes &&\r\n currentTimeInMinutes <= endTimeInMinutes\r\n );\r\n};\r\n\r\nexports.isToday = (d) => {\r\n const today = new Date();\r\n const date = new Date(d);\r\n console.log(date.getDate(), date.getMonth(), date.getFullYear());\r\n console.log(today.getDate(), today.getMonth(), today.getFullYear());\r\n const isTrue =\r\n date.getDate() === today.getDate() &&\r\n date.getMonth() === today.getMonth() &&\r\n date.getFullYear() === today.getFullYear();\r\n return isTrue;\r\n};\r\n\r\nexports.calculateTime = (hour, minute, iteration) => {\r\n let totalMinutes = hour * 60 + minute; // Convert time to total minutes\r\n totalMinutes += iteration;\r\n\r\n totalMinutes = totalMinutes % (24 * 60);\r\n let newHour = Math.floor(totalMinutes / 60);\r\n let newMinute = totalMinutes % 60;\r\n return { hour: newHour, minute: newMinute };\r\n};\r\n\r\nexports.getNumberOfDays = (pastDate) => {\r\n const pastTime = new Date(pastDate).getTime();\r\n const today = new Date();\r\n const difference = today.getTime() - pastTime;\r\n const numberOfDays = Math.floor(difference / (1000 * 3600 * 24));\r\n return numberOfDays + 1;\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "generate.utils.js",
"content": "exports.generateOTP = () => 112233; // Math.floor(Math.random() * 900000) + 100000;\r\n",
"children": []
},
{
"type": "file",
"name": "index.js",
"content": "const logger = require(\"./logger\");\r\nconst jwt = require(\"./jwt\");\r\nconst GENERATE = require(\"./generate.utils\");\r\nconst PGSN = require(\"./pagination\");\r\nconst DATE = require(\"./date.utils\");\r\nconst MEDIA = require(\"./media\");\r\nmodule.exports = { jwt, logger, GENERATE, PGSN, DATE, MEDIA };\r\n",
"children": []
},
{
"type": "file",
"name": "jwt.js",
"content": "const { BadRequestException } = require(\"../helpers/errorResponse\");\r\nconst jwt = require(\"jsonwebtoken\");\r\nconst { JWT } = require(\"../config\");\r\n\r\nexports.verifyAccessToken = (token) => {\r\n // eslint-disable-next-line no-unused-vars\r\n return new Promise((resolve, reject) => {\r\n jwt.verify(token, JWT.ACCESS_TOKEN_SECRET, (err, decoded) => {\r\n if (err) throw new BadRequestException(\"Invalid Token\");\r\n resolve(decoded);\r\n });\r\n });\r\n};\r\n\r\nexports.verifyRefreshToken = (token) => {\r\n // eslint-disable-next-line no-unused-vars\r\n return new Promise((resolve, reject) => {\r\n jwt.verify(token, JWT.REFRESH_TOKEN_SECRET, (err, decoded) => {\r\n if (err) throw new BadRequestException(\"Invalid Token\");\r\n resolve(decoded);\r\n });\r\n });\r\n};\r\n\r\nexports.generateAccessToken = (payload) => {\r\n return jwt.sign({ ...payload }, JWT.ACCESS_TOKEN_SECRET, {\r\n expiresIn: JWT.ACCESS_TOKEN_TIME,\r\n });\r\n};\r\n\r\nexports.generateRefreshToken = (payload) => {\r\n return jwt.sign({ ...payload }, JWT.REFRESH_TOKEN_SECRET, {\r\n expiresIn: JWT.REFRESH_TOKEN_TIME,\r\n });\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "logger.js",
"content": "const pino = require(\"pino\");\r\n\r\nconst logger = pino({\r\n transport: {\r\n target: \"pino-pretty\",\r\n options: {\r\n colorize: true,\r\n translateTime: \"yyyy-dd-mm, h:MM:ss TT\",\r\n }\r\n }\r\n})\r\n\r\nmodule.exports = logger",
"children": []
},
{
"type": "file",
"name": "media.js",
"content": "const { Buffer } = require(\"buffer\");\r\n\r\nexports.calculateTextSizeInMB = (text) => {\r\n const buffer = Buffer.from(text, \"utf-8\");\r\n const sizeInBytes = buffer.length;\r\n const sizeInMB = sizeInBytes / (1024 * 1024);\r\n return parseFloat(sizeInMB.toFixed(4));\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "pagination.js",
"content": "const { PGSN } = require(\"pgsn\");\r\nexports.getPagingData = (data, page, limit) => {\r\n const { count: totalItems, rows } = data;\r\n return PGSN.getPagingData({ rows: rows, totalItems, page, limit });\r\n};\r\n",
"children": []
},
{
"type": "file",
"name": "test.js",
"content": "",
"children": []
}
]
},
{
"name": "database",
"type": "folder",
"children": [
{
"type": "file",
"name": "index.js",
"content": "require(\"dotenv\").config();\r\nconst mongoose = require(\"mongoose\");\r\nconst { logger } = require(\"../utils\");\r\n\r\nconst CONNECTION_STRING =\r\n process.env.CONNECTION_STRING || \"mongodb://127.0.0.1:27017\";\r\nconst DB_NAME = process.env.DB_NAME || \"test\";\r\n\r\nmodule.exports = (() => {\r\n mongoose\r\n .connect(CONNECTION_STRING, {\r\n dbName: DB_NAME,\r\n })\r\n .then(() => {\r\n logger.info(\"mongodb connected...\");\r\n })\r\n .catch((err) => logger.error(err.message));\r\n\r\n mongoose.connection.on(\"connected\", () => {\r\n logger.info(\"Mongoose connected to db...\");\r\n });\r\n\r\n mongoose.connection.on(\"error\", (err) => {\r\n logger.error(err.message);\r\n });\r\n\r\n mongoose.connection.on(\"disconnected\", (err) => {\r\n logger.info(\"Mongoose connection is disconnected...\");\r\n });\r\n\r\n process.on(\"SIGINT\", () => {\r\n mongoose.connection.close();\r\n process.exit(1);\r\n });\r\n})();\r\n",
"children": []
},
{
"name": "models",
"type": "folder",
"children": [
{
"type": "file",
"name": "files.model.js",
"content": "const mongoose = require(\"mongoose\");\r\nconst Schema = mongoose.Schema;\r\n\r\nconst filesSchema = new Schema(\r\n {\r\n userId: { type: Schema.Types.ObjectId, ref: \"User\", default: null },\r\n fileName: { type: String },\r\n dirName: { type: String },\r\n fileSize: { type: Number },\r\n mimetype: { type: String },\r\n bucket: { type: String },\r\n url: { type: String },\r\n status: { type: String, enum: [\"active\", \"inactive\"], default: \"active\" },\r\n deletedAt: { type: Date, default: null },\r\n },\r\n { timestamps: true }\r\n);\r\n\r\nconst FileModel = mongoose.model(\"File\", filesSchema);\r\n\r\nmodule.exports = { FileModel };\r\n",
"chi