@vasrefil/api-toolkit 1.0.21 → 1.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,27 +1,3 @@
1
- /// <reference types="mongoose/types/aggregate" />
2
- /// <reference types="mongoose/types/callback" />
3
- /// <reference types="mongoose/types/collection" />
4
- /// <reference types="mongoose/types/connection" />
5
- /// <reference types="mongoose/types/cursor" />
6
- /// <reference types="mongoose/types/document" />
7
- /// <reference types="mongoose/types/error" />
8
- /// <reference types="mongoose/types/expressions" />
9
- /// <reference types="mongoose/types/helpers" />
10
- /// <reference types="mongoose/types/middlewares" />
11
- /// <reference types="mongoose/types/indexes" />
12
- /// <reference types="mongoose/types/models" />
13
- /// <reference types="mongoose/types/mongooseoptions" />
14
- /// <reference types="mongoose/types/pipelinestage" />
15
- /// <reference types="mongoose/types/populate" />
16
- /// <reference types="mongoose/types/query" />
17
- /// <reference types="mongoose/types/schemaoptions" />
18
- /// <reference types="mongoose/types/schematypes" />
19
- /// <reference types="mongoose/types/session" />
20
- /// <reference types="mongoose/types/types" />
21
- /// <reference types="mongoose/types/utility" />
22
- /// <reference types="mongoose/types/validation" />
23
- /// <reference types="mongoose/types/virtuals" />
24
- /// <reference types="mongoose/types/inferschematype" />
25
1
  import { Model } from 'mongoose';
26
2
  import { FetchAllQuery, FetchWithPaginationDataI, ModelPopulateI, NestedRecordQueryOptionsI } from '../interfaces/root-controller.interface';
27
3
  export declare class RootController {
package/dist/env.d.ts CHANGED
@@ -6,10 +6,15 @@ declare enum NODE_ENVS {
6
6
  declare const env: {
7
7
  NODE_ENV: NODE_ENVS;
8
8
  MONGODB_URI: string;
9
+ API_KEY: string | undefined;
9
10
  VASREFIL: {
10
11
  BASEURL: string;
11
12
  API_KEY: string | undefined;
12
13
  };
14
+ LOG: {
15
+ BASEURL: string;
16
+ API_KEY: string | undefined;
17
+ };
13
18
  AIRBRAKE: {
14
19
  PROJECT_ID: string | undefined;
15
20
  PROJECT_KEY: string | undefined;
package/dist/env.js CHANGED
@@ -12,10 +12,15 @@ let NODE_ENV = process.env.NODE_ENV;
12
12
  const env = {
13
13
  NODE_ENV,
14
14
  MONGODB_URI: '',
15
+ API_KEY: process.env.API_KEY,
15
16
  VASREFIL: {
16
17
  BASEURL: NODE_ENV === NODE_ENVS.PROD ? 'https://api.vasrefil.com' : 'https://api-v2-test.vasrefil.com',
17
18
  API_KEY: process.env.VASREFIL_API_KEY
18
19
  },
20
+ LOG: {
21
+ BASEURL: process.env.NODE_ENV === NODE_ENVS.PROD ? 'https://log-api.vasrefil.com' : 'https://log-api-dev.vasrefil.com',
22
+ API_KEY: process.env.VASREFIL_LOG_API_KEY
23
+ },
19
24
  AIRBRAKE: {
20
25
  PROJECT_ID: process.env.AIRBRAKE_PROJECT_ID,
21
26
  PROJECT_KEY: process.env.AIRBRAKE_PROJECT_KEY
@@ -0,0 +1,10 @@
1
+ import { Request } from 'express';
2
+ export interface AdminI {
3
+ _id: string;
4
+ first_name: string;
5
+ last_name: string;
6
+ email: string;
7
+ }
8
+ export interface AdminRequestI extends Request {
9
+ admin?: AdminI;
10
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,5 +1,6 @@
1
1
  import { Status } from "./status.interface";
2
- import { Request, Response } from 'express';
2
+ import { Response } from 'express';
3
+ import { UserRequestI } from "./user.interface";
3
4
  export interface SampleI {
4
5
  _id: string;
5
6
  name: string;
@@ -7,15 +8,16 @@ export interface SampleI {
7
8
  createdAt: number;
8
9
  }
9
10
  export interface ServiceRespI {
10
- req: Request;
11
+ req: UserRequestI;
12
+ request?: UserRequestI;
11
13
  res: Response;
12
14
  status: Status;
13
- request?: Request;
14
15
  actionType: string;
15
16
  data?: any;
16
17
  message?: string;
17
18
  error?: any;
18
- admin_message?: string;
19
+ NODE_ENV?: string;
20
+ code?: string;
19
21
  }
20
22
  export interface FiltersQueryI {
21
23
  filterSet: {
@@ -1,3 +1,4 @@
1
+ import { Request } from 'express';
1
2
  export interface UserI {
2
3
  _id: string;
3
4
  first_name: string;
@@ -62,3 +63,6 @@ export interface CheckUserWalletBalanceRespI {
62
63
  amount: number;
63
64
  user: UserI;
64
65
  }
66
+ export interface UserRequestI extends Request {
67
+ user?: UserI;
68
+ }
@@ -0,0 +1,9 @@
1
+ import { Response, NextFunction } from 'express';
2
+ import { RootService } from '../services/_root.service';
3
+ import { AdminRequestI } from 'src/interfaces/admin.interface';
4
+ declare class AdminAuthMidWare_ extends RootService {
5
+ auth: (req: AdminRequestI, res: Response, next: NextFunction) => Promise<any>;
6
+ private get_admin;
7
+ }
8
+ declare const AdminAuthMidWare: AdminAuthMidWare_;
9
+ export { AdminAuthMidWare };
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AdminAuthMidWare = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const user_response_1 = require("../api-response/user.response");
9
+ const _root_service_1 = require("../services/_root.service");
10
+ const env_1 = __importDefault(require("../env"));
11
+ const request_helper_1 = require("../helpers/request.helper");
12
+ class AdminAuthMidWare_ extends _root_service_1.RootService {
13
+ constructor() {
14
+ super(...arguments);
15
+ this.auth = async (req, res, next) => {
16
+ const actionType = 'AUTH_MIDWARE';
17
+ try {
18
+ const apiKey = req.headers['api-key'];
19
+ if (apiKey) {
20
+ if (apiKey !== env_1.default.VASREFIL.API_KEY)
21
+ throw user_response_1.UserApiResp.NOT_AUTHORIZED;
22
+ }
23
+ else {
24
+ const { admin_user } = await this.get_admin(req);
25
+ req.admin = admin_user;
26
+ }
27
+ next();
28
+ }
29
+ catch (error) {
30
+ const { status, message, data } = this.get_error(error);
31
+ return this.sendResponse({ req, res, status, actionType, message, data, error });
32
+ }
33
+ };
34
+ this.get_admin = async (req) => {
35
+ try {
36
+ const baseurl = env_1.default.VASREFIL.BASEURL;
37
+ delete req.headers['host'];
38
+ delete req.headers['content-length'];
39
+ const headers = {
40
+ Authorization: req.headers.authorization,
41
+ };
42
+ const { data } = await axios_1.default.get(`${baseurl}/admin-users/details`, { headers });
43
+ return { admin_user: data.data.user };
44
+ }
45
+ catch (error) {
46
+ const err = request_helper_1.RequestHelper.get_error(error);
47
+ throw err;
48
+ }
49
+ };
50
+ }
51
+ }
52
+ const AdminAuthMidWare = new AdminAuthMidWare_;
53
+ exports.AdminAuthMidWare = AdminAuthMidWare;
@@ -0,0 +1,2 @@
1
+ export * from './admin-auth.midware';
2
+ export * from './user-auth.midware';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./admin-auth.midware"), exports);
18
+ __exportStar(require("./user-auth.midware"), exports);
@@ -0,0 +1,9 @@
1
+ import { NextFunction, Response } from 'express';
2
+ import { RootService } from '../services/_root.service';
3
+ import { UserRequestI } from '../interfaces/user.interface';
4
+ declare class UserAuthMidWare_ extends RootService {
5
+ auth: (req: UserRequestI, res: Response, next: NextFunction) => Promise<any>;
6
+ private get_user;
7
+ }
8
+ declare const UserAuthMidWare: UserAuthMidWare_;
9
+ export { UserAuthMidWare };
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.UserAuthMidWare = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const env_1 = __importDefault(require("../env"));
9
+ const _root_service_1 = require("../services/_root.service");
10
+ const request_helper_1 = require("../helpers/request.helper");
11
+ class UserAuthMidWare_ extends _root_service_1.RootService {
12
+ constructor() {
13
+ super(...arguments);
14
+ this.auth = async (req, res, next) => {
15
+ const actionType = 'USER_AUTH_MIDWARE';
16
+ try {
17
+ const { user } = await this.get_user(req);
18
+ req.user = user;
19
+ next();
20
+ }
21
+ catch (error) {
22
+ const { status, message, data } = this.get_error(error);
23
+ return this.sendResponse({ req, res, status, actionType, message, data, error });
24
+ }
25
+ };
26
+ this.get_user = async (req) => {
27
+ try {
28
+ const baseurl = env_1.default.VASREFIL.BASEURL;
29
+ const headers = {
30
+ Authorization: req.headers.authorization,
31
+ 'pin-token': req.headers['pin-token']
32
+ };
33
+ const { data } = await axios_1.default.get(`${baseurl}/users/details`, { headers });
34
+ return { user: data.data.user };
35
+ }
36
+ catch (error) {
37
+ const err = request_helper_1.RequestHelper.get_error(error);
38
+ throw err;
39
+ }
40
+ };
41
+ }
42
+ }
43
+ const UserAuthMidWare = new UserAuthMidWare_;
44
+ exports.UserAuthMidWare = UserAuthMidWare;
@@ -1,27 +1,3 @@
1
- /// <reference types="mongoose/types/aggregate" />
2
- /// <reference types="mongoose/types/callback" />
3
- /// <reference types="mongoose/types/collection" />
4
- /// <reference types="mongoose/types/connection" />
5
- /// <reference types="mongoose/types/cursor" />
6
- /// <reference types="mongoose/types/document" />
7
- /// <reference types="mongoose/types/error" />
8
- /// <reference types="mongoose/types/expressions" />
9
- /// <reference types="mongoose/types/helpers" />
10
- /// <reference types="mongoose/types/middlewares" />
11
- /// <reference types="mongoose/types/indexes" />
12
- /// <reference types="mongoose/types/models" />
13
- /// <reference types="mongoose/types/mongooseoptions" />
14
- /// <reference types="mongoose/types/pipelinestage" />
15
- /// <reference types="mongoose/types/populate" />
16
- /// <reference types="mongoose/types/query" />
17
- /// <reference types="mongoose/types/schemaoptions" />
18
- /// <reference types="mongoose/types/schematypes" />
19
- /// <reference types="mongoose/types/session" />
20
- /// <reference types="mongoose/types/types" />
21
- /// <reference types="mongoose/types/utility" />
22
- /// <reference types="mongoose/types/validation" />
23
- /// <reference types="mongoose/types/virtuals" />
24
- /// <reference types="mongoose/types/inferschematype" />
25
1
  import { Document, Model } from "mongoose";
26
2
  export interface ISample extends Document {
27
3
  name: string;
@@ -3,3 +3,5 @@ export * from './helpers';
3
3
  export * from './utilities';
4
4
  export * from './app-middlewares';
5
5
  export * from './interfaces';
6
+ export * from './middlewares';
7
+ export * from './services';
@@ -19,3 +19,5 @@ __exportStar(require("./helpers"), exports);
19
19
  __exportStar(require("./utilities"), exports);
20
20
  __exportStar(require("./app-middlewares"), exports);
21
21
  __exportStar(require("./interfaces"), exports);
22
+ __exportStar(require("./middlewares"), exports);
23
+ __exportStar(require("./services"), exports);
@@ -1,4 +1,4 @@
1
- import * as express from "express";
1
+ import { Application } from "express";
2
2
  /**
3
3
  * Create and return Router.
4
4
  *
@@ -6,4 +6,4 @@ import * as express from "express";
6
6
  * @method config
7
7
  * @return void
8
8
  */
9
- export declare const routes: (app: express.Application) => void;
9
+ export declare const routes: (app: Application) => void;
@@ -1,33 +1,10 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
28
5
  Object.defineProperty(exports, "__esModule", { value: true });
29
6
  exports.routes = void 0;
30
- const express = __importStar(require("express"));
7
+ const express_1 = require("express");
31
8
  const chalk = require("chalk");
32
9
  const env_1 = __importDefault(require("../env"));
33
10
  const sample_route_1 = __importDefault(require("./sample.route"));
@@ -40,15 +17,17 @@ const sample_route_1 = __importDefault(require("./sample.route"));
40
17
  */
41
18
  const routes = (app) => {
42
19
  let router;
43
- router = express.Router();
20
+ router = (0, express_1.Router)();
44
21
  console.log(chalk.yellow.bgBlack.bold("Loading sample routes"));
45
22
  sample_route_1.default.loadRoutes('/samples', router);
46
- router.get('/', (req, res) => res.send(`Welcome to Node-Template-TS-2 - ${env_1.default.NODE_ENV}`));
23
+ router.get('/', (req, res) => {
24
+ res.send(`Welcome to API-Toolkit - ${env_1.default.NODE_ENV}`);
25
+ });
47
26
  //use router middleware
48
27
  app.use(router);
49
28
  app.all('*', (req, res) => {
50
29
  console.log(req.url);
51
- return res.status(404).json({ status: 404, error: 'not found' });
30
+ res.status(404).json({ status: 404, error: 'not found' });
52
31
  });
53
32
  };
54
33
  exports.routes = routes;
@@ -1,12 +1,14 @@
1
1
  import { Status } from '../interfaces/status.interface';
2
2
  import { ServiceRespI } from "../interfaces/interface";
3
3
  export declare class RootService {
4
+ SUCCESS: Status;
4
5
  sendResponse: (serviceResponse: ServiceRespI) => any;
5
6
  get_error(error: any): {
6
7
  status: Status;
7
8
  message: string;
8
9
  data: any;
9
10
  };
11
+ private sanitize_service_resp;
12
+ private get_response;
10
13
  private getHttpStatus;
11
- private get_error_;
12
14
  }
@@ -1,42 +1,111 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
2
38
  Object.defineProperty(exports, "__esModule", { value: true });
3
39
  exports.RootService = void 0;
4
40
  const logger_util_1 = require("../utilities/logger.util");
5
41
  const status_interface_1 = require("../interfaces/status.interface");
42
+ const airbrake_1 = require("../app-middlewares/airbrake");
43
+ const log_util_1 = require("../utilities/log.util");
44
+ const env_1 = __importDefault(require("../env"));
45
+ const mongoose = __importStar(require("mongoose"));
6
46
  class RootService {
7
47
  constructor() {
48
+ this.SUCCESS = status_interface_1.Status.SUCCESS;
8
49
  this.sendResponse = (serviceResponse) => {
9
- let { res, status, data, message, actionType, error } = serviceResponse;
50
+ let { res, data, actionType } = serviceResponse;
10
51
  try {
11
- status = status || status_interface_1.Status.ERROR;
12
- const code = error && error.code ? error.code : null;
13
- const response = { status, data, message, code };
14
- if (error) {
15
- response.error = this.get_error_(error);
16
- }
17
- const status_code = this.getHttpStatus(status);
52
+ const log_service_resp = this.sanitize_service_resp(serviceResponse);
53
+ const { response, status_code } = this.get_response(serviceResponse);
18
54
  res.status(status_code).json(response);
19
55
  if (status_code >= 400) {
20
56
  const dataErr = data ? JSON.stringify(data) : data;
21
57
  const error = `[${actionType || 'App Error'}] ${response.message} ${dataErr}`;
22
58
  logger_util_1.winston.error(error);
23
59
  }
60
+ log_util_1.LogUtil.user_event({ serviceResponse: log_service_resp });
24
61
  }
25
62
  catch (error) {
26
- res.status(500).json({ status: 'ERROR', data: error, message: error.message });
63
+ logger_util_1.winston.error(error);
64
+ (0, airbrake_1.airbrake_request_logger)({ serviceResponse });
65
+ res.status(500).json({ status: 'ERROR', data: error, message: error?.message });
66
+ }
67
+ };
68
+ this.sanitize_service_resp = (serviceResponse) => {
69
+ const { user } = serviceResponse.req;
70
+ let user_;
71
+ if (user) {
72
+ user_ = {
73
+ email: user.email,
74
+ user_name: user.user_name,
75
+ };
27
76
  }
77
+ const request_data = log_util_1.LogUtil.get_request(serviceResponse.req);
78
+ const request = { ...request_data, user: user_, };
79
+ serviceResponse.request = request;
80
+ serviceResponse.NODE_ENV = env_1.default.NODE_ENV;
81
+ return serviceResponse;
28
82
  };
29
- this.get_error_ = (err) => {
30
- const error = err && err.error ? err.error : err;
31
- const { req, message, status, code, ...err_rest } = error;
32
- return err_rest;
83
+ this.get_response = (serviceResponse) => {
84
+ try {
85
+ let { status, data, message, error, code: code_ } = serviceResponse;
86
+ status = status || status_interface_1.Status.ERROR;
87
+ const code = error && error.code ? error.code : (code_ || null);
88
+ const status_code = this.getHttpStatus(status);
89
+ let response = { status, code, message, data };
90
+ return { response, status_code };
91
+ }
92
+ catch (error) {
93
+ logger_util_1.winston.error(error);
94
+ (0, airbrake_1.airbrake_request_logger)({ serviceResponse });
95
+ throw {
96
+ message: 'Error occured try again later',
97
+ error
98
+ };
99
+ }
33
100
  };
34
101
  }
35
102
  get_error(error) {
36
103
  let response = { status: status_interface_1.Status.ERROR, message: 'Request failed', data: null };
37
104
  const { status, message, data } = error;
38
105
  response.status = status ? status : response.status;
39
- response.message = message ? message : response.message;
106
+ if (!(error instanceof mongoose.Error)) {
107
+ response.message = message ? message : response.message;
108
+ }
40
109
  response.data = data ? data : response.data;
41
110
  return response;
42
111
  }
@@ -0,0 +1 @@
1
+ export * from './_root.service';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./_root.service"), exports);
@@ -6,4 +6,5 @@ interface ApiRequestPayloadI {
6
6
  params?: any;
7
7
  }
8
8
  export declare const VasrefilApiRequest: (request: ApiRequestPayloadI) => Promise<any>;
9
+ export declare const LogApiRequest: (request: ApiRequestPayloadI) => Promise<any>;
9
10
  export {};
@@ -3,16 +3,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.VasrefilApiRequest = void 0;
6
+ exports.LogApiRequest = exports.VasrefilApiRequest = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
8
  const env_1 = __importDefault(require("../env"));
9
9
  const helpers_1 = require("../helpers");
10
- const API_KEY = env_1.default.VASREFIL.API_KEY;
11
- const BASEURL = env_1.default.VASREFIL.BASEURL;
12
- const VasrefilApiRequest = async (request) => {
10
+ const ApiRequest = async (request, option) => {
13
11
  try {
14
- let baseurl = request.baseurl || BASEURL;
15
- const headers = { 'api-key': API_KEY };
12
+ const baseurl = request.baseurl || option.BASEURL;
13
+ const headers = { 'api-key': option.API_KEY };
16
14
  const { data } = await axios_1.default.request({
17
15
  method: request.method,
18
16
  url: `${baseurl}/${request.endpoint}`,
@@ -22,6 +20,17 @@ const VasrefilApiRequest = async (request) => {
22
20
  });
23
21
  return data;
24
22
  }
23
+ catch (error) {
24
+ throw error;
25
+ }
26
+ };
27
+ const VasrefilApiRequest = async (request) => {
28
+ try {
29
+ const API_KEY = env_1.default.VASREFIL.API_KEY;
30
+ const BASEURL = env_1.default.VASREFIL.BASEURL;
31
+ const data = await ApiRequest(request, { BASEURL, API_KEY });
32
+ return data;
33
+ }
25
34
  catch (error) {
26
35
  throw {
27
36
  error: helpers_1.RequestHelper.get_error(error),
@@ -30,3 +39,18 @@ const VasrefilApiRequest = async (request) => {
30
39
  }
31
40
  };
32
41
  exports.VasrefilApiRequest = VasrefilApiRequest;
42
+ const LogApiRequest = async (request) => {
43
+ try {
44
+ const API_KEY = env_1.default.LOG.API_KEY;
45
+ const BASEURL = env_1.default.LOG.BASEURL;
46
+ const data = await ApiRequest(request, { BASEURL, API_KEY });
47
+ return data;
48
+ }
49
+ catch (error) {
50
+ throw {
51
+ error: helpers_1.RequestHelper.get_error(error),
52
+ admin_message: 'Vasrefil-Log-API: send api request failed'
53
+ };
54
+ }
55
+ };
56
+ exports.LogApiRequest = LogApiRequest;
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  Object.defineProperty(exports, "__esModule", { value: true });
26
36
  exports.DateUtil = void 0;
27
37
  const dateFns = __importStar(require("date-fns"));
@@ -1,3 +1,4 @@
1
1
  export * from './api-request.util';
2
2
  export * from './date.util';
3
3
  export * from './logger.util';
4
+ export * from './log.util';
@@ -17,3 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./api-request.util"), exports);
18
18
  __exportStar(require("./date.util"), exports);
19
19
  __exportStar(require("./logger.util"), exports);
20
+ __exportStar(require("./log.util"), exports);
@@ -0,0 +1,85 @@
1
+ import { ServiceRespI } from '../interfaces/interface';
2
+ import { UserRequestI } from '../interfaces/user.interface';
3
+ declare class LogUtil_ {
4
+ user_event: (dto: {
5
+ serviceResponse: ServiceRespI;
6
+ }) => Promise<void>;
7
+ get_request: (req: UserRequestI) => {
8
+ params: import("express-serve-static-core").ParamsDictionary;
9
+ query: import("qs").ParsedQs;
10
+ headers: {
11
+ [key: string]: string | string[] | undefined;
12
+ accept?: string | undefined;
13
+ "accept-language"?: string | undefined;
14
+ "accept-patch"?: string | undefined;
15
+ "accept-ranges"?: string | undefined;
16
+ "access-control-allow-credentials"?: string | undefined;
17
+ "access-control-allow-headers"?: string | undefined;
18
+ "access-control-allow-methods"?: string | undefined;
19
+ "access-control-allow-origin"?: string | undefined;
20
+ "access-control-expose-headers"?: string | undefined;
21
+ "access-control-max-age"?: string | undefined;
22
+ "access-control-request-headers"?: string | undefined;
23
+ "access-control-request-method"?: string | undefined;
24
+ age?: string | undefined;
25
+ allow?: string | undefined;
26
+ "alt-svc"?: string | undefined;
27
+ "cache-control"?: string | undefined;
28
+ connection?: string | undefined;
29
+ "content-disposition"?: string | undefined;
30
+ "content-encoding"?: string | undefined;
31
+ "content-language"?: string | undefined;
32
+ "content-length"?: string | undefined;
33
+ "content-location"?: string | undefined;
34
+ "content-range"?: string | undefined;
35
+ "content-type"?: string | undefined;
36
+ cookie?: string | undefined;
37
+ date?: string | undefined;
38
+ etag?: string | undefined;
39
+ expect?: string | undefined;
40
+ expires?: string | undefined;
41
+ forwarded?: string | undefined;
42
+ from?: string | undefined;
43
+ host?: string | undefined;
44
+ "if-match"?: string | undefined;
45
+ "if-modified-since"?: string | undefined;
46
+ "if-none-match"?: string | undefined;
47
+ "if-unmodified-since"?: string | undefined;
48
+ "last-modified"?: string | undefined;
49
+ location?: string | undefined;
50
+ origin?: string | undefined;
51
+ pragma?: string | undefined;
52
+ "proxy-authenticate"?: string | undefined;
53
+ "proxy-authorization"?: string | undefined;
54
+ "public-key-pins"?: string | undefined;
55
+ range?: string | undefined;
56
+ referer?: string | undefined;
57
+ "retry-after"?: string | undefined;
58
+ "sec-websocket-accept"?: string | undefined;
59
+ "sec-websocket-extensions"?: string | undefined;
60
+ "sec-websocket-key"?: string | undefined;
61
+ "sec-websocket-protocol"?: string | undefined;
62
+ "sec-websocket-version"?: string | undefined;
63
+ "set-cookie"?: string[] | undefined;
64
+ "strict-transport-security"?: string | undefined;
65
+ tk?: string | undefined;
66
+ trailer?: string | undefined;
67
+ "transfer-encoding"?: string | undefined;
68
+ upgrade?: string | undefined;
69
+ "user-agent"?: string | undefined;
70
+ vary?: string | undefined;
71
+ via?: string | undefined;
72
+ warning?: string | undefined;
73
+ "www-authenticate"?: string | undefined;
74
+ };
75
+ method: string;
76
+ url: string;
77
+ statusCode: number | undefined;
78
+ body: any;
79
+ };
80
+ private get_user_event_response;
81
+ private get_user;
82
+ private create_activity_log;
83
+ }
84
+ declare const LogUtil: LogUtil_;
85
+ export { LogUtil };
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LogUtil = void 0;
4
+ const airbrake_1 = require("../app-middlewares/airbrake");
5
+ const api_request_util_1 = require("./api-request.util");
6
+ const json_stringify_safe = require('json-stringify-safe');
7
+ class LogUtil_ {
8
+ constructor() {
9
+ this.user_event = async (dto) => {
10
+ const { request, actionType, status } = dto.serviceResponse;
11
+ try {
12
+ const statuses = ['SUCCESS', 'CREATED', 'PROCESSING'];
13
+ if (!statuses.includes(status)) {
14
+ const user = this.get_user(dto.serviceResponse);
15
+ const response = this.get_user_event_response(dto.serviceResponse);
16
+ const payload = {
17
+ distinct_id: user.distinct_id,
18
+ request: JSON.stringify(request),
19
+ response: JSON.stringify(response),
20
+ request_url: request?.url,
21
+ event: actionType,
22
+ type: 'USER_EVENT',
23
+ response_status: status,
24
+ };
25
+ await this.create_activity_log(payload);
26
+ }
27
+ }
28
+ catch (error) {
29
+ airbrake_1.airbrake.notify({
30
+ error: JSON.stringify(error),
31
+ context: { component: 'USER_EVENT' },
32
+ params: { actionType, status, request },
33
+ });
34
+ }
35
+ };
36
+ this.get_request = (req) => {
37
+ const { authorization, pin_token, ...headers_ } = req.headers;
38
+ const { password, pin, old_pin, new_pin, bvn, nin, file, ...body_ } = req.body;
39
+ const { params, query, method, url, statusCode } = req;
40
+ delete headers_['pin-token'];
41
+ const request = {
42
+ params, query, headers: headers_, method, url, statusCode,
43
+ body: body_,
44
+ };
45
+ return request;
46
+ };
47
+ this.get_user_event_response = (serviceResponse) => {
48
+ const { data, message, error } = serviceResponse;
49
+ let response = {};
50
+ if (data || message || error) {
51
+ if (error) {
52
+ delete error.req;
53
+ }
54
+ const data_ = data ? json_stringify_safe(data) : null;
55
+ const error_ = error ? json_stringify_safe(error, null) : null;
56
+ const message_ = message ? message : null;
57
+ response = {
58
+ message: message_, error: error_
59
+ };
60
+ }
61
+ return response;
62
+ };
63
+ this.get_user = (serviceResponse) => {
64
+ const { req, actionType } = serviceResponse;
65
+ let distinct_id = req.user ? req.user.email : (req.body.email || '--');
66
+ // if(this.cronjobs_events.includes(actionType)) {
67
+ // distinct_id = 'cron-job.org';
68
+ // }
69
+ if (actionType.toLowerCase().includes('webhook')) {
70
+ distinct_id = actionType.toLowerCase();
71
+ }
72
+ if (req.admin_user) {
73
+ distinct_id = req.admin_user.email;
74
+ }
75
+ return { distinct_id };
76
+ };
77
+ this.create_activity_log = async (body) => {
78
+ try {
79
+ const resp = await (0, api_request_util_1.LogApiRequest)({
80
+ method: 'POST',
81
+ endpoint: 'activities',
82
+ body
83
+ });
84
+ return resp;
85
+ }
86
+ catch (error) {
87
+ throw error;
88
+ }
89
+ };
90
+ }
91
+ }
92
+ const LogUtil = new LogUtil_;
93
+ exports.LogUtil = LogUtil;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" />
2
- declare const morgan: (req: import("http").IncomingMessage, res: import("http").ServerResponse, callback: (err?: Error | undefined) => void) => void;
1
+ declare const morgan: (req: import("http").IncomingMessage, res: import("http").ServerResponse, callback: (err?: Error) => void) => void;
3
2
  declare const winston: import("winston").Logger;
4
3
  export { morgan, winston };
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  Object.defineProperty(exports, "__esModule", { value: true });
26
36
  const joi = __importStar(require("joi"));
27
37
  class SampleValidator {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vasrefil/api-toolkit",
3
3
  "description": "This is Vasrefil API toolkit",
4
- "version": "1.0.21",
4
+ "version": "1.0.23",
5
5
  "author": "Sodiq Alabi",
6
6
  "main": "dist/public-api.js",
7
7
  "types": "dist/public-api.d.ts",
@@ -20,10 +20,7 @@
20
20
  "dependencies": {
21
21
  "@airbrake/node": "^2.1.8",
22
22
  "@types/jsonwebtoken": "^8.5.0",
23
- "@vasrefil/api-toolkit": "^1.0.20",
24
23
  "axios": "^1.7.8",
25
- "bcrypt": "^5.0.1",
26
- "bcrypt-nodejs": "0.0.3",
27
24
  "chalk": "^4.1.0",
28
25
  "cors": "^2.8.5",
29
26
  "date-fns": "^2.29.3",
@@ -31,14 +28,10 @@
31
28
  "errorhandler": "^1.5.1",
32
29
  "express": "^4.18.3",
33
30
  "helmet": "^4.2.0",
34
- "ioredis": "^5.3.2",
35
31
  "joi": "^17.3.0",
36
32
  "json-stringify-safe": "^5.0.1",
37
- "jsonwebtoken": "^8.5.1",
38
33
  "mongoose": "^6.0.14",
39
34
  "morgan": "^1.10.0",
40
- "rate-limiter-flexible": "^2.4.2",
41
- "swagger-ui-express": "^4.1.4",
42
35
  "winston": "^3.3.3"
43
36
  },
44
37
  "devDependencies": {