diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..3be6766 --- /dev/null +++ b/.env.example @@ -0,0 +1,43 @@ +# # SQL DB Connection Colo +# SQL_HOST=117.102.231.130 +# SQL_DATABASE=piu +# SQL_USERNAME=sa +# SQL_PASSWORD=@R3M4niA. +# SQL_PORT=1433 + +SQL_HOST=203.153.114.226 +SQL_PORT=1112 +SQL_DATABASE=piu +SQL_USERNAME=sa +SQL_PASSWORD=piu123 + +# Application Port - express server listens on this port (default 9000). +PORT=9528 +ENDPOINT_WA=http://203.153.114.226:9529/send +# ENDPOINT_WA=http://localhost:9529/send +ENDPOINT_FE=http://203.153.114.226:9527 + +# JWT access secret +SECRET=secret + +# JWT refresh secret +REFRESH_SECRET=refreshsecret + +# mail server settings +# SMTP_FROM=youremail +# SMTP_USER=youremail + +# Stripe secret key - https://stripe.com/docs/keys +# STRIPE_SECRET_KEY=sk_test_4eC39HqLyjWDarjtT1zdp7dc + +# Google OAuth2.0 settings for sign in with Google - https://console.developers.google.com/ +# OAUTH_CLIENT_ID=287280guajkxxxxxxx.apps.googleusercontent.com +# OAUTH_CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxx +# OAUTH_REFRESH_TOKEN=1//XXXXXXXXXX + +# Google OAuth2.0 settings for sending emails - https://console.developers.google.com/ +# CLIENT_ID=938729280guajk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com +# CLIENT_SECRET=xxxxxxxxxxxxxxxxxxxxxxxx +# REFRESH_TOKEN=1//XXXXXXXX + +VITE_KEY_SESSION=PetekRombonganPetekMorekMorakMarek diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..1a9399c --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,20 @@ +module.exports = { + env: { + commonjs: true, + es2021: true, + node: true, + jest: true, + }, + extends: ["eslint:recommended"], + parserOptions: { + ecmaVersion: 12, + }, + parser: "babel-eslint", + plugins: ["babel", "prettier"], + rules: { + "no-console": "warn", + eqeqeq: "error", + // "object-curly-spacing": ["error", "always"], + // "arrow-spacing": ["error", { before: true, after: true }], + }, +}; diff --git a/.gitignore b/.gitignore index 1ae140b..ee0f965 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ +.env node_modules -log -tmp -/public/** -!public/.gitkeep \ No newline at end of file +.vscode +request.http +*.rest diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..f2d1f8e --- /dev/null +++ b/.prettierrc @@ -0,0 +1,8 @@ +{ + "semi": true, + "tabWidth": 2, + "printWidth": 80, + "singleQuote": false, + "trailingComma": "es5", + "endOfLine": "lf" +} diff --git a/Procfile b/Procfile new file mode 100644 index 0000000..1da0cd6 --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: node index.js diff --git a/app.js b/app.js new file mode 100644 index 0000000..8674820 --- /dev/null +++ b/app.js @@ -0,0 +1,30 @@ +const express = require("express"); +require("express-async-errors"); +const cors = require("cors"); +const morgan = require("morgan"); +const cookieParser = require("cookie-parser"); +const routes = require("./routes"); +const helmet = require("helmet"); +const compression = require("compression"); +const unknownEndpoint = require("./middleware/unKnownEndpoint"); +const { handleError } = require("./helpers/error"); + +const app = express(); + +app.set("trust proxy", 1); +app.use(cors({ credentials: true, origin: true })); +app.use(express.json()); +app.use(morgan("dev")); +app.use(compression()); +app.use(helmet()); +app.use(cookieParser()); + +app.use("/api", routes); + +app.get("/", (req, res) => + res.send("

HAHALO

") +); +app.use(unknownEndpoint); +app.use(handleError); + +module.exports = app; diff --git a/ecosystem.config.js b/ecosystem.config.js new file mode 100644 index 0000000..83bdbbf --- /dev/null +++ b/ecosystem.config.js @@ -0,0 +1,14 @@ +module.exports = { + apps: [ + { + name: "bengkel-api", + script: "./index.js", // Path to your entry file + env: { + NODE_ENV: "development", + }, + env_production: { + NODE_ENV: "production", + }, + }, + ], +}; \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 0000000..552b3a5 --- /dev/null +++ b/index.js @@ -0,0 +1,10 @@ +require("dotenv").config({ path: __dirname + "/.env" }); +const http = require("http"); +const app = require("./app"); +const { logger } = require("./utils/logger"); + +const server = http.createServer(app); + +const PORT = process.env.PORT || 9524; + +server.listen(PORT, () => logger.info(`Magic happening on port: ${PORT}`)); diff --git a/package.json b/package.json new file mode 100644 index 0000000..0645c2a --- /dev/null +++ b/package.json @@ -0,0 +1,64 @@ +{ + "name": "server", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "start": "cross-env NODE_ENV=production node index", + "dev": "cross-env NODE_ENV=development && nodemon --legacy-watch", + "test": "cross-env NODE_ENV=test jest --verbose --runInBand", + "test:watch": "cross-env NODE_ENV=test jest --verbose --runInBand --watch", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "format": "prettier --write ." + }, + "jest": { + "testEnvironment": "node", + "coveragePathIgnorePatterns": [ + "/node_modules/" + ] + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "axios": "^1.9.0", + "bcrypt": "^5.1.1", + "compression": "^1.7.4", + "cookie-parser": "^1.4.6", + "cors": "^2.8.5", + "crypto": "^1.0.1", + "crypto-js": "^4.2.0", + "dotenv": "^8.2.0", + "express": "^4.18.2", + "express-async-errors": "^3.1.1", + "google-auth-library": "^8.7.0", + "googleapis": "^112.0.0", + "helmet": "^4.4.1", + "joi": "^17.13.3", + "jsonwebtoken": "^8.5.1", + "moment": "^2.29.4", + "morgan": "^1.10.0", + "mqtt": "^5.14.0", + "mssql": "^11.0.1", + "multer": "^1.4.5-lts.2", + "nodemailer": "^6.8.0", + "pg": "^8.8.0", + "pino": "^6.11.3", + "stripe": "^8.138.0", + "svg-captcha": "^1.4.0", + "swagger-ui-express": "^4.6.0", + "uuid": "^11.1.0" + }, + "devDependencies": { + "babel-eslint": "^10.1.0", + "cross-env": "^7.0.3", + "eslint": "^7.32.0", + "eslint-plugin-babel": "^5.3.1", + "eslint-plugin-prettier": "^4.2.1", + "nodemon": "^2.0.20", + "pino-pretty": "^4.8.0", + "prettier": "^2.8.1", + "supertest": "^6.3.3" + } +} diff --git a/utils/logger.js b/utils/logger.js new file mode 100644 index 0000000..b8591e1 --- /dev/null +++ b/utils/logger.js @@ -0,0 +1,9 @@ +const pino = require("pino"); + +// Create a logging instance +const logger = pino({ + level: process.env.NODE_ENV === "production" ? "info" : "debug", + prettyPrint: process.env.NODE_ENV !== "production", +}); + +module.exports.logger = logger;