{
  "appconfig":{
    "vars":{
      "name":"thisApp",
      "env":"dev-server-live-db",
      "version":"1.0.0",
      "host":"http://localhost",
      "port":3000,
      "entry":"/"
    },
    "logger":{
      "file":[
        {"level":"error"},
        {"level":"access"},
        {"level":"info"}
      ],
      "db":[
        {
          "level":"info",
          "collection":"all_log",
          "options":{"useUnifiedTopology":true},
          "metaKey":"meta",
          "decolorize":true,
          "tryReconnect":true,
          "expreAfterSeconds":120
        }
      ],
      "dbCustom":[
        {"level":"error","collection":"api_error_log","dateStub":"mm"},
        {"level":"access","collection":"api_access_log","dateStub":"mm"},
        {"level":"info","collection":"api_info_log","dateStub":"mm"}
      ]
    },
    "db":{
      "opts":{
        "autoIndex":true,
        "maxPoolSize":10,
        "serverSelectionTimeoutMS":5000,
        "socketTimeoutMS":45000,
        "family":4
      }
    },
    "errors":{
      "notfound":{"status":404,"message":"Requested resource not found"},
      "doesNotExist":{"status":404,"message":"%s does not exist"},
      "cors":{"status":403,"message":"CORS policy violation"},
      "csrf":{"status":403,"message":"Access denied"},
      "forbidden":{"status":403,"message":"Access denied"},
      "unauthorized":{"status":401,"message":"%s not authorized"},
      "existing":{"status":422,"message":"%s already exists"},
      "invalid":{"status":400,"message":"Invalid %s"},
      "missing":{"status":400,"message":"Missing %s"},
      "mismatch":{"status":400,"message":"%s mismatch"},
      "validation":{"status":400,"message":"Action not permitted. Check data in try again"},
      "castError":{"status":400,"message":"Action not permitted. Check data in try again"},
      "someError":{"status":500,"message":"Oops, something went wrong."},
      "uploadValidation":{"status":422,"message":"Upload Request Validation Failed"},
      "uploadFail":{"status":422,"message":"Error uploading file - %s"},
      "uploadNoName":{"status":422,"message":"No msg file \"name\" in request body"},
      "uploadNoInfo":{"status":422,"message":"No msg file info in request body"},
      "uploadBadInfo":{"status":422,"message":"Invalid msg file info"},
      "uploadBadId":{
        "status":422,
        "message":"Invalid trackID in URL parameter. Must be string of 12 bytes or 24 hex characters"
      }
    },
    "middleware":{
      "common":{
        "disablePoweredBy":true,
        "compression":true,
        "useStatic":{},
        "useViews":{},
        "morgan":{"useDev":true,"useLogger":true},
        "cors":{
          "methods":["GET","PUT","POST","DELETE","OPTIONS"],
          "whitelist":[],
          "blacklist":[],
          "preflightContinue":false,
          "credentials":true,
          "allowedHeaders":[
            "XSRF-TOKEN",
            "Authorization",
            "Content-Type"
          ],
          "maxAge":86400
        },
        "cookieParser":{},
        "bodyParser":{
          "json":{"limit":"50mb"},
          "urlencoded":{"extended":true},
          "raw":{"type":"audio/wav","limit":"50mb"}
        },
        "flash":true,
        "session":{
          "resave":false,
          "saveUninitialized":false,
          "cookie":{"maxAge":2592000000},
          "store":{
            "collectionName":"api_user_sessions",
            "touchAfter":86400,
            "autoRemove":"interval",
            "autoRemoveInterval":30,
            "autoReconnect":true,
            "stringify":true
          }
        },
        "csrf":{"cookie":true}
      }
    }
  }
}