@triproject/nestjs-core 1.0.6 → 1.0.13
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.
- package/.swcrc +24 -0
- package/dist/bootstrap.js +1 -43
- package/dist/config.js +1 -50
- package/dist/controllers/controller.js +1 -56
- package/dist/drivers/cache/cache.d.ts +1 -1
- package/dist/drivers/cache/cache.driver.js +1 -22
- package/dist/drivers/cache/cache.js +1 -92
- package/dist/drivers/cache/index.js +1 -19
- package/dist/drivers/cache/redis.js +1 -52
- package/dist/drivers/db/db.helper.js +1 -217
- package/dist/drivers/db/db.module.js +1 -44
- package/dist/drivers/db/db.service.js +1 -49
- package/dist/drivers/db/index.js +1 -21
- package/dist/drivers/db/migration.d.ts +133 -5
- package/dist/drivers/db/migration.js +1 -81
- package/dist/drivers/db/repository.js +1 -255
- package/dist/drivers/encryptions/encryption.js +1 -50
- package/dist/drivers/encryptions/encryption.module.js +1 -24
- package/dist/drivers/encryptions/index.js +1 -19
- package/dist/drivers/encryptions/jwt.js +1 -46
- package/dist/drivers/encryptions/password-hash.js +1 -38
- package/dist/drivers/encryptions/snap.signature.js +1 -110
- package/dist/drivers/logger/app.logger.js +2 -183
- package/dist/drivers/logger/cloudwatch.d.ts +18 -0
- package/dist/drivers/logger/cloudwatch.js +1 -0
- package/dist/drivers/logger/cloudwatch.logger.d.ts +1 -0
- package/dist/drivers/logger/cloudwatch.logger.js +1 -0
- package/dist/drivers/logger/index.js +1 -18
- package/dist/drivers/logger/slack.logger.js +1 -24
- package/dist/drivers/mail/index.js +1 -22
- package/dist/drivers/mail/mail-template.js +8 -41
- package/dist/drivers/mail/mail.config.js +1 -4
- package/dist/drivers/mail/mail.js +13 -73
- package/dist/drivers/mail/mail.module.js +1 -26
- package/dist/drivers/mail/mail.queue.js +1 -37
- package/dist/drivers/mail/mailer.js +1 -62
- package/dist/drivers/notifications/index.js +1 -21
- package/dist/drivers/notifications/notification.config.js +1 -4
- package/dist/drivers/notifications/notification.module.js +1 -25
- package/dist/drivers/notifications/notification.queue.js +1 -37
- package/dist/drivers/notifications/push-notification.js +1 -75
- package/dist/drivers/notifications/slack.js +1 -95
- package/dist/drivers/queues/app.queue.js +1 -66
- package/dist/drivers/queues/index.js +1 -18
- package/dist/drivers/queues/queue.module.js +1 -41
- package/dist/helpers/exception.helper.js +1 -71
- package/dist/helpers/http.helper.js +1 -134
- package/dist/helpers/swagger.helper.js +1 -287
- package/dist/helpers/totp.helper.js +1 -30
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -24
- package/dist/middlewares/log.middleware.js +1 -59
- package/dist/types.d.js +1 -0
- package/package.json +27 -14
|
@@ -1,30 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.totp = void 0;
|
|
4
|
-
const common_1 = require("@nestjs/common");
|
|
5
|
-
const qrcode_1 = require("qrcode");
|
|
6
|
-
const speakeasy_1 = require("speakeasy");
|
|
7
|
-
class Totp {
|
|
8
|
-
encoding = 'base32';
|
|
9
|
-
async generateSecret(params) {
|
|
10
|
-
const issuer = params?.issuer;
|
|
11
|
-
const secret = (0, speakeasy_1.generateSecret)({ name: `${issuer}:${params?.email}`, issuer });
|
|
12
|
-
if (!secret?.otpauth_url)
|
|
13
|
-
throw new common_1.UnprocessableEntityException('Failed to generate secret');
|
|
14
|
-
const qrCodeBase64 = await (0, qrcode_1.toDataURL)(secret.otpauth_url, {
|
|
15
|
-
type: 'image/png',
|
|
16
|
-
width: 256,
|
|
17
|
-
margin: 2,
|
|
18
|
-
color: { dark: '#000000', light: '#FFFFFF' },
|
|
19
|
-
});
|
|
20
|
-
return {
|
|
21
|
-
secret: secret.base32,
|
|
22
|
-
url: secret.otpauth_url,
|
|
23
|
-
qrCodeBase64,
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
verify(secret, otp) {
|
|
27
|
-
return speakeasy_1.totp.verify({ secret: secret, encoding: this.encoding, token: otp, window: 1 });
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
exports.totp = new Totp();
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"totp",{enumerable:!0,get:function(){return totp}});let _common=require("@nestjs/common"),_qrcode=require("qrcode"),_speakeasy=require("speakeasy"),totp=new class{encoding="base32";async generateSecret(params){let issuer=params?.issuer,secret=(0,_speakeasy.generateSecret)({name:`${issuer}:${params?.email}`,issuer});if(!secret?.otpauth_url)throw new _common.UnprocessableEntityException("Failed to generate secret");let qrCodeBase64=await (0,_qrcode.toDataURL)(secret.otpauth_url,{type:"image/png",width:256,margin:2,color:{dark:"#000000",light:"#FFFFFF"}});return{secret:secret.base32,url:secret.otpauth_url,qrCodeBase64}}verify(secret,otp){return _speakeasy.totp.verify({secret:secret,encoding:this.encoding,token:otp,window:1})}};
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,24 +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 __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("./config"), exports);
|
|
18
|
-
__exportStar(require("./helpers/exception.helper"), exports);
|
|
19
|
-
__exportStar(require("./helpers/http.helper"), exports);
|
|
20
|
-
__exportStar(require("./helpers/swagger.helper"), exports);
|
|
21
|
-
__exportStar(require("./helpers/totp.helper"), exports);
|
|
22
|
-
__exportStar(require("./controllers/controller"), exports);
|
|
23
|
-
__exportStar(require("./middlewares/log.middleware"), exports);
|
|
24
|
-
__exportStar(require("./bootstrap"), exports);
|
|
1
|
+
"use strict";function _export_star(from,to){return Object.keys(from).forEach(function(k){"default"===k||Object.prototype.hasOwnProperty.call(to,k)||Object.defineProperty(to,k,{enumerable:!0,get:function(){return from[k]}})}),from}Object.defineProperty(exports,"__esModule",{value:!0}),_export_star(require("./config"),exports),_export_star(require("./helpers/exception.helper"),exports),_export_star(require("./helpers/http.helper"),exports),_export_star(require("./helpers/swagger.helper"),exports),_export_star(require("./helpers/totp.helper"),exports),_export_star(require("./controllers/controller"),exports),_export_star(require("./middlewares/log.middleware"),exports),_export_star(require("./bootstrap"),exports);
|
|
@@ -1,59 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.LogResponseMiddleware = exports.LogMiddleware = void 0;
|
|
10
|
-
const common_1 = require("@nestjs/common");
|
|
11
|
-
const helpers_1 = require("@triproject/helpers");
|
|
12
|
-
const app_logger_1 = require("../drivers/logger/app.logger");
|
|
13
|
-
let LogMiddleware = class LogMiddleware {
|
|
14
|
-
async use(req, res, next) {
|
|
15
|
-
req.requestId = (0, helpers_1.generateId)();
|
|
16
|
-
req.requestStartAt = new Date().getTime();
|
|
17
|
-
next();
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
exports.LogMiddleware = LogMiddleware;
|
|
21
|
-
exports.LogMiddleware = LogMiddleware = __decorate([
|
|
22
|
-
(0, common_1.Injectable)()
|
|
23
|
-
], LogMiddleware);
|
|
24
|
-
let LogResponseMiddleware = class LogResponseMiddleware {
|
|
25
|
-
log = new app_logger_1.AppLogger('Log Request');
|
|
26
|
-
async use(req, res, next) {
|
|
27
|
-
try {
|
|
28
|
-
const time = Date.now() - req.requestStartAt;
|
|
29
|
-
const timeString = time < 1000 ? `${time}ms` : `${(time / 1000).toFixed(2)}s`;
|
|
30
|
-
const logs = [
|
|
31
|
-
'Request' + ` ${req.requestId} completed in ${timeString}`,
|
|
32
|
-
(0, helpers_1.removeEmptyValues)({
|
|
33
|
-
method: req.method,
|
|
34
|
-
url: req.protocol + '://' + req.hostname + req.originalUrl,
|
|
35
|
-
origin: req.get('origin'),
|
|
36
|
-
ipAddress: req.ip,
|
|
37
|
-
body: Object.keys(req?.body).length ? req?.body : undefined,
|
|
38
|
-
}),
|
|
39
|
-
];
|
|
40
|
-
// @ts-ignore
|
|
41
|
-
if (req?.user)
|
|
42
|
-
logs.push(req.user);
|
|
43
|
-
if (req?.errorMessage)
|
|
44
|
-
logs.push(req.errorMessage);
|
|
45
|
-
this.log.log(...logs);
|
|
46
|
-
}
|
|
47
|
-
catch (error) {
|
|
48
|
-
this.log.error('Error logging response', error);
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
if (next)
|
|
52
|
-
next();
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
exports.LogResponseMiddleware = LogResponseMiddleware;
|
|
57
|
-
exports.LogResponseMiddleware = LogResponseMiddleware = __decorate([
|
|
58
|
-
(0, common_1.Injectable)()
|
|
59
|
-
], LogResponseMiddleware);
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var target=exports,all={get LogMiddleware(){return LogMiddleware},get LogResponseMiddleware(){return LogResponseMiddleware}};for(var name in all)Object.defineProperty(target,name,{enumerable:!0,get:Object.getOwnPropertyDescriptor(all,name).get});let _common=require("@nestjs/common"),_helpers=require("@triproject/helpers"),_uaparserjs=require("ua-parser-js"),_applogger=require("../drivers/logger/app.logger");function _ts_decorate(decorators,target,key,desc){var d,c=arguments.length,r=c<3?target:null===desc?desc=Object.getOwnPropertyDescriptor(target,key):desc;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(decorators,target,key,desc);else for(var i=decorators.length-1;i>=0;i--)(d=decorators[i])&&(r=(c<3?d(r):c>3?d(target,key,r):d(target,key))||r);return c>3&&r&&Object.defineProperty(target,key,r),r}let LogMiddleware=class LogMiddleware{async use(req,res,next){req.requestId=(0,_helpers.generateId)(),req.requestStartAt=new Date().getTime();let userAgentString=req.get("user-agent")??"",ua=new _uaparserjs.UAParser(userAgentString).getResult();req.userAgent=[ua.browser.name+" "+ua.browser.version,ua.os.name+" "+ua.os.version].join(", "),next()}};LogMiddleware=_ts_decorate([(0,_common.Injectable)()],LogMiddleware);let LogResponseMiddleware=class LogResponseMiddleware{log=new _applogger.AppLogger("Log Request");async use(req,res,next){try{let time=Date.now()-req.requestStartAt,timeString=time<1e3?`${time}ms`:`${(time/1e3).toFixed(2)}s`,logs=[`Request ${req.requestId} completed in ${timeString}`,(0,_helpers.removeEmptyValues)({method:req.method,url:req.protocol+"://"+req.hostname+req.baseUrl+req.path,request:(0,_helpers.removeEmptyValues)({body:Object.keys(req?.body).length?req?.body:void 0,query:Object.keys(req?.query).length?req?.query:void 0}),origin:req.get("origin"),ipAddress:req?.ip,userAgent:req?.userAgent,user:req?.user})];req?.errorMessage&&logs.push(req.errorMessage),this.log.log(...logs)}catch(error){this.log.error("Error logging response",error)}finally{next&&next()}}};LogResponseMiddleware=_ts_decorate([(0,_common.Injectable)()],LogResponseMiddleware);
|
package/dist/types.d.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),require("express");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@triproject/nestjs-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.13",
|
|
4
4
|
"author": "",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"description": "A collection of NestJS modules and utilities to speed up development.",
|
|
@@ -36,6 +36,10 @@
|
|
|
36
36
|
"types": "./dist/drivers/logger/index.d.ts",
|
|
37
37
|
"require": "./dist/drivers/logger/index.js"
|
|
38
38
|
},
|
|
39
|
+
"./logger/cloudwatch": {
|
|
40
|
+
"types": "./dist/drivers/logger/cloudwatch.logger.d.ts",
|
|
41
|
+
"require": "./dist/drivers/logger/cloudwatch.logger.js"
|
|
42
|
+
},
|
|
39
43
|
"./mail": {
|
|
40
44
|
"types": "./dist/drivers/mail/index.d.ts",
|
|
41
45
|
"require": "./dist/drivers/mail/index.js"
|
|
@@ -50,16 +54,18 @@
|
|
|
50
54
|
}
|
|
51
55
|
},
|
|
52
56
|
"scripts": {
|
|
53
|
-
"build": "rm -rf dist && tsc",
|
|
57
|
+
"build": "rm -rf dist && swc src -d dist --strip-leading-paths && tsc --emitDeclarationOnly",
|
|
54
58
|
"test": "vitest run"
|
|
55
59
|
},
|
|
56
60
|
"peerDependencies": {
|
|
61
|
+
"@aws-sdk/client-cloudwatch-logs": "^3.0.0",
|
|
57
62
|
"@nestjs/bull": "^11.0.0",
|
|
58
63
|
"@nestjs/bullmq": "^11.0.0",
|
|
59
64
|
"@nestjs/common": "^11.0.0",
|
|
60
65
|
"@nestjs/core": "^11.0.0",
|
|
61
66
|
"@nestjs/sequelize": "^11.0.0",
|
|
62
67
|
"@nestjs/swagger": "^11.0.0",
|
|
68
|
+
"@triproject/helpers": "^1.0.14",
|
|
63
69
|
"axios": "^1.0.0",
|
|
64
70
|
"bull": "^4.0.0",
|
|
65
71
|
"bullmq": "^5.0.0",
|
|
@@ -75,9 +81,12 @@
|
|
|
75
81
|
"sequelize": "^6.0.0",
|
|
76
82
|
"sequelize-typescript": "^2.0.0",
|
|
77
83
|
"speakeasy": "^2.0.0",
|
|
78
|
-
"
|
|
84
|
+
"ua-parser-js": "^2.0.7"
|
|
79
85
|
},
|
|
80
86
|
"peerDependenciesMeta": {
|
|
87
|
+
"@aws-sdk/client-cloudwatch-logs": {
|
|
88
|
+
"optional": true
|
|
89
|
+
},
|
|
81
90
|
"@nestjs/bull": {
|
|
82
91
|
"optional": true
|
|
83
92
|
},
|
|
@@ -110,31 +119,35 @@
|
|
|
110
119
|
}
|
|
111
120
|
},
|
|
112
121
|
"devDependencies": {
|
|
122
|
+
"@aws-sdk/client-cloudwatch-logs": "^3.0.0",
|
|
113
123
|
"@nestjs/bull": "^11.0.4",
|
|
114
124
|
"@nestjs/bullmq": "^11.0.4",
|
|
115
|
-
"@nestjs/common": "^11.1.
|
|
116
|
-
"@nestjs/core": "^11.1.
|
|
125
|
+
"@nestjs/common": "^11.1.9",
|
|
126
|
+
"@nestjs/core": "^11.1.9",
|
|
117
127
|
"@nestjs/sequelize": "^11.0.1",
|
|
118
128
|
"@nestjs/swagger": "^11.2.3",
|
|
129
|
+
"@swc/cli": "^0.7.9",
|
|
130
|
+
"@swc/core": "^1.15.7",
|
|
131
|
+
"@triproject/helpers": "^1.0.14",
|
|
119
132
|
"@types/cookie-parser": "^1.4.10",
|
|
120
|
-
"@types/express": "^5.0.
|
|
133
|
+
"@types/express": "^5.0.6",
|
|
121
134
|
"@types/jsonwebtoken": "^9.0.10",
|
|
122
|
-
"@types/node": "^24.10.
|
|
123
|
-
"@types/nodemailer": "^7.0.
|
|
135
|
+
"@types/node": "^24.10.4",
|
|
136
|
+
"@types/nodemailer": "^7.0.4",
|
|
124
137
|
"@types/qrcode": "^1.5.6",
|
|
125
138
|
"@types/speakeasy": "^2.0.10",
|
|
126
139
|
"axios": "^1.13.2",
|
|
127
140
|
"bull": "^4.16.5",
|
|
128
|
-
"bullmq": "^5.
|
|
129
|
-
"class-validator": "^0.14.
|
|
141
|
+
"bullmq": "^5.66.2",
|
|
142
|
+
"class-validator": "^0.14.3",
|
|
130
143
|
"cookie-parser": "^1.4.7",
|
|
131
144
|
"dotenv": "^17.2.3",
|
|
132
|
-
"express": "^5.1
|
|
145
|
+
"express": "^5.2.1",
|
|
133
146
|
"helmet": "^8.1.0",
|
|
134
|
-
"jsonwebtoken": "^9.0.
|
|
135
|
-
"nodemailer": "^7.0.
|
|
147
|
+
"jsonwebtoken": "^9.0.3",
|
|
148
|
+
"nodemailer": "^7.0.11",
|
|
136
149
|
"qrcode": "^1.5.4",
|
|
137
|
-
"redis": "^5.
|
|
150
|
+
"redis": "^5.10.0",
|
|
138
151
|
"sequelize": "^6.37.7",
|
|
139
152
|
"sequelize-typescript": "^2.1.6",
|
|
140
153
|
"speakeasy": "^2.0.0",
|