egame-shared-lib 1.0.0
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/README.md +45 -0
- package/dist/constants/error-codes.d.ts +94 -0
- package/dist/constants/error-codes.js +97 -0
- package/dist/constants/error-codes.js.map +1 -0
- package/dist/constants/error-messages.d.ts +124 -0
- package/dist/constants/error-messages.js +133 -0
- package/dist/constants/error-messages.js.map +1 -0
- package/dist/constants/index.d.ts +3 -0
- package/dist/constants/index.js +20 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/constants/message-patterns.d.ts +50 -0
- package/dist/constants/message-patterns.js +54 -0
- package/dist/constants/message-patterns.js.map +1 -0
- package/dist/database/auth-database.module.d.ts +2 -0
- package/dist/database/auth-database.module.js +33 -0
- package/dist/database/auth-database.module.js.map +1 -0
- package/dist/database/database.module.d.ts +2 -0
- package/dist/database/database.module.js +32 -0
- package/dist/database/database.module.js.map +1 -0
- package/dist/database/index.d.ts +2 -0
- package/dist/database/index.js +19 -0
- package/dist/database/index.js.map +1 -0
- package/dist/decorators/current-user.decorator.d.ts +1 -0
- package/dist/decorators/current-user.decorator.js +10 -0
- package/dist/decorators/current-user.decorator.js.map +1 -0
- package/dist/decorators/index.d.ts +3 -0
- package/dist/decorators/index.js +20 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/public.decorator.d.ts +1 -0
- package/dist/decorators/public.decorator.js +7 -0
- package/dist/decorators/public.decorator.js.map +1 -0
- package/dist/decorators/roles.decorator.d.ts +2 -0
- package/dist/decorators/roles.decorator.js +7 -0
- package/dist/decorators/roles.decorator.js.map +1 -0
- package/dist/discovery/index.d.ts +4 -0
- package/dist/discovery/index.js +21 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/service-discovery-client.d.ts +30 -0
- package/dist/discovery/service-discovery-client.js +84 -0
- package/dist/discovery/service-discovery-client.js.map +1 -0
- package/dist/discovery/service-discovery.module.d.ts +2 -0
- package/dist/discovery/service-discovery.module.js +26 -0
- package/dist/discovery/service-discovery.module.js.map +1 -0
- package/dist/discovery/service-registration.d.ts +16 -0
- package/dist/discovery/service-registration.js +95 -0
- package/dist/discovery/service-registration.js.map +1 -0
- package/dist/discovery/service-registry.d.ts +38 -0
- package/dist/discovery/service-registry.js +124 -0
- package/dist/discovery/service-registry.js.map +1 -0
- package/dist/dto/auth.dto.d.ts +37 -0
- package/dist/dto/auth.dto.js +156 -0
- package/dist/dto/auth.dto.js.map +1 -0
- package/dist/dto/game.dto.d.ts +17 -0
- package/dist/dto/game.dto.js +66 -0
- package/dist/dto/game.dto.js.map +1 -0
- package/dist/dto/index.d.ts +4 -0
- package/dist/dto/index.js +21 -0
- package/dist/dto/index.js.map +1 -0
- package/dist/dto/payment.dto.d.ts +19 -0
- package/dist/dto/payment.dto.js +83 -0
- package/dist/dto/payment.dto.js.map +1 -0
- package/dist/dto/user.dto.d.ts +16 -0
- package/dist/dto/user.dto.js +75 -0
- package/dist/dto/user.dto.js.map +1 -0
- package/dist/exceptions/base-exception.d.ts +12 -0
- package/dist/exceptions/base-exception.js +19 -0
- package/dist/exceptions/base-exception.js.map +1 -0
- package/dist/exceptions/custom-exception.d.ts +10 -0
- package/dist/exceptions/custom-exception.js +40 -0
- package/dist/exceptions/custom-exception.js.map +1 -0
- package/dist/exceptions/index.d.ts +2 -0
- package/dist/exceptions/index.js +19 -0
- package/dist/exceptions/index.js.map +1 -0
- package/dist/filters/global-exception.filter.d.ts +15 -0
- package/dist/filters/global-exception.filter.js +99 -0
- package/dist/filters/global-exception.filter.js.map +1 -0
- package/dist/filters/index.d.ts +1 -0
- package/dist/filters/index.js +18 -0
- package/dist/filters/index.js.map +1 -0
- package/dist/guards/jwt-auth.guard.d.ts +8 -0
- package/dist/guards/jwt-auth.guard.js +45 -0
- package/dist/guards/jwt-auth.guard.js.map +1 -0
- package/dist/guards/roles.guard.d.ts +7 -0
- package/dist/guards/roles.guard.js +44 -0
- package/dist/guards/roles.guard.js.map +1 -0
- package/dist/health/health.controller.d.ts +17 -0
- package/dist/health/health.controller.js +55 -0
- package/dist/health/health.controller.js.map +1 -0
- package/dist/health/health.module.d.ts +2 -0
- package/dist/health/health.module.js +20 -0
- package/dist/health/health.module.js.map +1 -0
- package/dist/health/index.d.ts +2 -0
- package/dist/health/index.js +19 -0
- package/dist/health/index.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/index.d.ts +105 -0
- package/dist/interfaces/index.js +31 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/rmq/rmq.module.d.ts +8 -0
- package/dist/rmq/rmq.module.js +54 -0
- package/dist/rmq/rmq.module.js.map +1 -0
- package/dist/rmq/rmq.service.d.ts +7 -0
- package/dist/rmq/rmq.service.js +40 -0
- package/dist/rmq/rmq.service.js.map +1 -0
- package/dist/services/email.module.d.ts +2 -0
- package/dist/services/email.module.js +23 -0
- package/dist/services/email.module.js.map +1 -0
- package/dist/services/email.service.d.ts +17 -0
- package/dist/services/email.service.js +200 -0
- package/dist/services/email.service.js.map +1 -0
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +19 -0
- package/dist/services/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
export interface IBaseResponse<T = any> {
|
|
2
|
+
success: boolean;
|
|
3
|
+
message: string;
|
|
4
|
+
data?: T;
|
|
5
|
+
error?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface IAuthToken {
|
|
8
|
+
accessToken: string;
|
|
9
|
+
refreshToken: string;
|
|
10
|
+
expiresIn: number;
|
|
11
|
+
}
|
|
12
|
+
export interface IAuthUser {
|
|
13
|
+
id: string;
|
|
14
|
+
email: string;
|
|
15
|
+
role: UserRole;
|
|
16
|
+
nickname?: string;
|
|
17
|
+
fullName?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare enum UserRole {
|
|
20
|
+
USER = "USER",
|
|
21
|
+
ADMIN = "ADMIN",
|
|
22
|
+
SUPER_ADMIN = "SUPER_ADMIN"
|
|
23
|
+
}
|
|
24
|
+
export interface IOtpRecord {
|
|
25
|
+
email: string;
|
|
26
|
+
otp: string;
|
|
27
|
+
expiresAt: Date;
|
|
28
|
+
attempts: number;
|
|
29
|
+
}
|
|
30
|
+
export interface IUser {
|
|
31
|
+
id: string;
|
|
32
|
+
email: string;
|
|
33
|
+
username: string;
|
|
34
|
+
firstName?: string;
|
|
35
|
+
lastName?: string;
|
|
36
|
+
createdAt: Date;
|
|
37
|
+
updatedAt: Date;
|
|
38
|
+
}
|
|
39
|
+
export interface IUserService {
|
|
40
|
+
createUser(data: any): Promise<IBaseResponse<IUser>>;
|
|
41
|
+
getUser(id: string): Promise<IBaseResponse<IUser>>;
|
|
42
|
+
updateUser(id: string, data: any): Promise<IBaseResponse<IUser>>;
|
|
43
|
+
deleteUser(id: string): Promise<IBaseResponse<boolean>>;
|
|
44
|
+
authenticateUser(credentials: any): Promise<IBaseResponse<any>>;
|
|
45
|
+
}
|
|
46
|
+
export interface IGame {
|
|
47
|
+
id: string;
|
|
48
|
+
name: string;
|
|
49
|
+
type: string;
|
|
50
|
+
status: GameStatus;
|
|
51
|
+
playerId: string;
|
|
52
|
+
startTime?: Date;
|
|
53
|
+
endTime?: Date;
|
|
54
|
+
result?: any;
|
|
55
|
+
createdAt: Date;
|
|
56
|
+
updatedAt: Date;
|
|
57
|
+
}
|
|
58
|
+
export declare enum GameStatus {
|
|
59
|
+
PENDING = "PENDING",
|
|
60
|
+
IN_PROGRESS = "IN_PROGRESS",
|
|
61
|
+
COMPLETED = "COMPLETED",
|
|
62
|
+
CANCELLED = "CANCELLED"
|
|
63
|
+
}
|
|
64
|
+
export interface IGameService {
|
|
65
|
+
createGame(data: any): Promise<IBaseResponse<IGame>>;
|
|
66
|
+
getGame(id: string): Promise<IBaseResponse<IGame>>;
|
|
67
|
+
startGame(id: string): Promise<IBaseResponse<IGame>>;
|
|
68
|
+
endGame(id: string, result: any): Promise<IBaseResponse<IGame>>;
|
|
69
|
+
}
|
|
70
|
+
export interface IWallet {
|
|
71
|
+
id: string;
|
|
72
|
+
userId: string;
|
|
73
|
+
balance: number;
|
|
74
|
+
currency: string;
|
|
75
|
+
createdAt: Date;
|
|
76
|
+
updatedAt: Date;
|
|
77
|
+
}
|
|
78
|
+
export interface ITransaction {
|
|
79
|
+
id: string;
|
|
80
|
+
walletId: string;
|
|
81
|
+
type: TransactionType;
|
|
82
|
+
amount: number;
|
|
83
|
+
status: TransactionStatus;
|
|
84
|
+
description?: string;
|
|
85
|
+
createdAt: Date;
|
|
86
|
+
}
|
|
87
|
+
export declare enum TransactionType {
|
|
88
|
+
DEPOSIT = "DEPOSIT",
|
|
89
|
+
WITHDRAWAL = "WITHDRAWAL",
|
|
90
|
+
GAME_WIN = "GAME_WIN",
|
|
91
|
+
GAME_LOSS = "GAME_LOSS"
|
|
92
|
+
}
|
|
93
|
+
export declare enum TransactionStatus {
|
|
94
|
+
PENDING = "PENDING",
|
|
95
|
+
COMPLETED = "COMPLETED",
|
|
96
|
+
FAILED = "FAILED",
|
|
97
|
+
CANCELLED = "CANCELLED"
|
|
98
|
+
}
|
|
99
|
+
export interface IPaymentService {
|
|
100
|
+
createWallet(userId: string): Promise<IBaseResponse<IWallet>>;
|
|
101
|
+
getWallet(userId: string): Promise<IBaseResponse<IWallet>>;
|
|
102
|
+
addFunds(walletId: string, amount: number): Promise<IBaseResponse<IWallet>>;
|
|
103
|
+
withdrawFunds(walletId: string, amount: number): Promise<IBaseResponse<IWallet>>;
|
|
104
|
+
processPayment(data: any): Promise<IBaseResponse<ITransaction>>;
|
|
105
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TransactionStatus = exports.TransactionType = exports.GameStatus = exports.UserRole = void 0;
|
|
4
|
+
var UserRole;
|
|
5
|
+
(function (UserRole) {
|
|
6
|
+
UserRole["USER"] = "USER";
|
|
7
|
+
UserRole["ADMIN"] = "ADMIN";
|
|
8
|
+
UserRole["SUPER_ADMIN"] = "SUPER_ADMIN";
|
|
9
|
+
})(UserRole || (exports.UserRole = UserRole = {}));
|
|
10
|
+
var GameStatus;
|
|
11
|
+
(function (GameStatus) {
|
|
12
|
+
GameStatus["PENDING"] = "PENDING";
|
|
13
|
+
GameStatus["IN_PROGRESS"] = "IN_PROGRESS";
|
|
14
|
+
GameStatus["COMPLETED"] = "COMPLETED";
|
|
15
|
+
GameStatus["CANCELLED"] = "CANCELLED";
|
|
16
|
+
})(GameStatus || (exports.GameStatus = GameStatus = {}));
|
|
17
|
+
var TransactionType;
|
|
18
|
+
(function (TransactionType) {
|
|
19
|
+
TransactionType["DEPOSIT"] = "DEPOSIT";
|
|
20
|
+
TransactionType["WITHDRAWAL"] = "WITHDRAWAL";
|
|
21
|
+
TransactionType["GAME_WIN"] = "GAME_WIN";
|
|
22
|
+
TransactionType["GAME_LOSS"] = "GAME_LOSS";
|
|
23
|
+
})(TransactionType || (exports.TransactionType = TransactionType = {}));
|
|
24
|
+
var TransactionStatus;
|
|
25
|
+
(function (TransactionStatus) {
|
|
26
|
+
TransactionStatus["PENDING"] = "PENDING";
|
|
27
|
+
TransactionStatus["COMPLETED"] = "COMPLETED";
|
|
28
|
+
TransactionStatus["FAILED"] = "FAILED";
|
|
29
|
+
TransactionStatus["CANCELLED"] = "CANCELLED";
|
|
30
|
+
})(TransactionStatus || (exports.TransactionStatus = TransactionStatus = {}));
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":";;;AAuBA,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,yBAAa,CAAA;IACb,2BAAe,CAAA;IACf,uCAA2B,CAAA;AAC7B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AA0CD,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,yCAA2B,CAAA;IAC3B,qCAAuB,CAAA;IACvB,qCAAuB,CAAA;AACzB,CAAC,EALW,UAAU,0BAAV,UAAU,QAKrB;AA6BD,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,4CAAyB,CAAA;IACzB,wCAAqB,CAAA;IACrB,0CAAuB,CAAA;AACzB,CAAC,EALW,eAAe,+BAAf,eAAe,QAK1B;AAED,IAAY,iBAKX;AALD,WAAY,iBAAiB;IAC3B,wCAAmB,CAAA;IACnB,4CAAuB,CAAA;IACvB,sCAAiB,CAAA;IACjB,4CAAuB,CAAA;AACzB,CAAC,EALW,iBAAiB,iCAAjB,iBAAiB,QAK5B"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
var RmqModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.RmqModule = void 0;
|
|
11
|
+
const common_1 = require("@nestjs/common");
|
|
12
|
+
const microservices_1 = require("@nestjs/microservices");
|
|
13
|
+
const rmq_service_1 = require("./rmq.service");
|
|
14
|
+
const config_1 = require("@nestjs/config");
|
|
15
|
+
let RmqModule = RmqModule_1 = class RmqModule {
|
|
16
|
+
static register({ name }) {
|
|
17
|
+
return {
|
|
18
|
+
module: RmqModule_1,
|
|
19
|
+
imports: [
|
|
20
|
+
config_1.ConfigModule.forRoot({
|
|
21
|
+
isGlobal: true,
|
|
22
|
+
envFilePath: '.env',
|
|
23
|
+
}),
|
|
24
|
+
microservices_1.ClientsModule.registerAsync([
|
|
25
|
+
{
|
|
26
|
+
name,
|
|
27
|
+
imports: [config_1.ConfigModule],
|
|
28
|
+
useFactory: (configService) => ({
|
|
29
|
+
transport: microservices_1.Transport.RMQ,
|
|
30
|
+
options: {
|
|
31
|
+
urls: [configService.get('RABBITMQ_URL')],
|
|
32
|
+
queue: configService.get(`RABBITMQ_${name}_QUEUE`),
|
|
33
|
+
queueOptions: {
|
|
34
|
+
durable: true,
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
}),
|
|
38
|
+
inject: [config_1.ConfigService],
|
|
39
|
+
},
|
|
40
|
+
]),
|
|
41
|
+
],
|
|
42
|
+
exports: [microservices_1.ClientsModule],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
exports.RmqModule = RmqModule;
|
|
47
|
+
exports.RmqModule = RmqModule = RmqModule_1 = __decorate([
|
|
48
|
+
(0, common_1.Module)({
|
|
49
|
+
imports: [config_1.ConfigModule],
|
|
50
|
+
providers: [rmq_service_1.RmqService],
|
|
51
|
+
exports: [rmq_service_1.RmqService],
|
|
52
|
+
})
|
|
53
|
+
], RmqModule);
|
|
54
|
+
//# sourceMappingURL=rmq.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rmq.module.js","sourceRoot":"","sources":["../../src/rmq/rmq.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,yDAAiE;AACjE,+CAA2C;AAC3C,2CAA6D;AAWtD,IAAM,SAAS,iBAAf,MAAM,SAAS;IACpB,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAoB;QACxC,OAAO;YACL,MAAM,EAAE,WAAS;YACjB,OAAO,EAAE;gBACP,qBAAY,CAAC,OAAO,CAAC;oBACnB,QAAQ,EAAE,IAAI;oBACd,WAAW,EAAE,MAAM;iBACpB,CAAC;gBACF,6BAAa,CAAC,aAAa,CAAC;oBAC1B;wBACE,IAAI;wBACJ,OAAO,EAAE,CAAC,qBAAY,CAAC;wBACvB,UAAU,EAAE,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC;4BAC7C,SAAS,EAAE,yBAAS,CAAC,GAAG;4BACxB,OAAO,EAAE;gCACP,IAAI,EAAE,CAAC,aAAa,CAAC,GAAG,CAAS,cAAc,CAAC,CAAC;gCACjD,KAAK,EAAE,aAAa,CAAC,GAAG,CAAS,YAAY,IAAI,QAAQ,CAAC;gCAC1D,YAAY,EAAE;oCACZ,OAAO,EAAE,IAAI;iCACd;6BACF;yBACF,CAAC;wBACF,MAAM,EAAE,CAAC,sBAAa,CAAC;qBACxB;iBACF,CAAC;aACH;YACD,OAAO,EAAE,CAAC,6BAAa,CAAC;SACzB,CAAC;IACJ,CAAC;CACF,CAAA;AA9BY,8BAAS;oBAAT,SAAS;IALrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,CAAC;QACvB,SAAS,EAAE,CAAC,wBAAU,CAAC;QACvB,OAAO,EAAE,CAAC,wBAAU,CAAC;KACtB,CAAC;GACW,SAAS,CA8BrB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ConfigService } from '@nestjs/config';
|
|
2
|
+
import { RmqOptions } from '@nestjs/microservices';
|
|
3
|
+
export declare class RmqService {
|
|
4
|
+
private readonly configService;
|
|
5
|
+
constructor(configService: ConfigService);
|
|
6
|
+
getOptions(queue: string, noAck?: boolean): RmqOptions;
|
|
7
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RmqService = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const config_1 = require("@nestjs/config");
|
|
15
|
+
const microservices_1 = require("@nestjs/microservices");
|
|
16
|
+
let RmqService = class RmqService {
|
|
17
|
+
constructor(configService) {
|
|
18
|
+
this.configService = configService;
|
|
19
|
+
}
|
|
20
|
+
getOptions(queue, noAck = false) {
|
|
21
|
+
return {
|
|
22
|
+
transport: microservices_1.Transport.RMQ,
|
|
23
|
+
options: {
|
|
24
|
+
urls: [this.configService.get('RABBITMQ_URL')],
|
|
25
|
+
queue: this.configService.get(`RABBITMQ_${queue}_QUEUE`),
|
|
26
|
+
noAck,
|
|
27
|
+
persistent: true,
|
|
28
|
+
queueOptions: {
|
|
29
|
+
durable: true,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.RmqService = RmqService;
|
|
36
|
+
exports.RmqService = RmqService = __decorate([
|
|
37
|
+
(0, common_1.Injectable)(),
|
|
38
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
39
|
+
], RmqService);
|
|
40
|
+
//# sourceMappingURL=rmq.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rmq.service.js","sourceRoot":"","sources":["../../src/rmq/rmq.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA+C;AAC/C,yDAA8D;AAGvD,IAAM,UAAU,GAAhB,MAAM,UAAU;IACrB,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAE7D,UAAU,CAAC,KAAa,EAAE,KAAK,GAAG,KAAK;QACrC,OAAO;YACL,SAAS,EAAE,yBAAS,CAAC,GAAG;YACxB,OAAO,EAAE;gBACP,IAAI,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,cAAc,CAAC,CAAC;gBACtD,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAS,YAAY,KAAK,QAAQ,CAAC;gBAChE,KAAK;gBACL,UAAU,EAAE,IAAI;gBAChB,YAAY,EAAE;oBACZ,OAAO,EAAE,IAAI;iBACd;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAjBY,gCAAU;qBAAV,UAAU;IADtB,IAAA,mBAAU,GAAE;qCAEiC,sBAAa;GAD9C,UAAU,CAiBtB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
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.EmailModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const config_1 = require("@nestjs/config");
|
|
12
|
+
const email_service_1 = require("./email.service");
|
|
13
|
+
let EmailModule = class EmailModule {
|
|
14
|
+
};
|
|
15
|
+
exports.EmailModule = EmailModule;
|
|
16
|
+
exports.EmailModule = EmailModule = __decorate([
|
|
17
|
+
(0, common_1.Module)({
|
|
18
|
+
imports: [config_1.ConfigModule],
|
|
19
|
+
providers: [email_service_1.EmailService],
|
|
20
|
+
exports: [email_service_1.EmailService],
|
|
21
|
+
})
|
|
22
|
+
], EmailModule);
|
|
23
|
+
//# sourceMappingURL=email.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.module.js","sourceRoot":"","sources":["../../src/services/email.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,mDAA+C;AAOxC,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IALvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,qBAAY,CAAC;QACvB,SAAS,EAAE,CAAC,4BAAY,CAAC;QACzB,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { ConfigService } from '@nestjs/config';
|
|
2
|
+
export interface EmailOptions {
|
|
3
|
+
to: string;
|
|
4
|
+
subject: string;
|
|
5
|
+
html: string;
|
|
6
|
+
from?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class EmailService {
|
|
9
|
+
private configService;
|
|
10
|
+
private transporter;
|
|
11
|
+
constructor(configService: ConfigService);
|
|
12
|
+
sendEmail(options: EmailOptions): Promise<void>;
|
|
13
|
+
sendOTP(email: string, otp: string, purpose: string): Promise<void>;
|
|
14
|
+
sendWelcomeEmail(email: string, nickname: string): Promise<void>;
|
|
15
|
+
sendPasswordResetEmail(email: string, resetToken: string): Promise<void>;
|
|
16
|
+
sendPasswordChangedNotification(email: string): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
+
exports.EmailService = void 0;
|
|
46
|
+
const common_1 = require("@nestjs/common");
|
|
47
|
+
const config_1 = require("@nestjs/config");
|
|
48
|
+
const nodemailer = __importStar(require("nodemailer"));
|
|
49
|
+
let EmailService = class EmailService {
|
|
50
|
+
constructor(configService) {
|
|
51
|
+
this.configService = configService;
|
|
52
|
+
this.transporter = nodemailer.createTransport({
|
|
53
|
+
host: this.configService.get('EMAIL_HOST') || 'smtp.sendgrid.net',
|
|
54
|
+
port: parseInt(this.configService.get('EMAIL_PORT')) || 587,
|
|
55
|
+
secure: false,
|
|
56
|
+
auth: {
|
|
57
|
+
user: this.configService.get('EMAIL_USER'),
|
|
58
|
+
pass: this.configService.get('EMAIL_PASSWORD'),
|
|
59
|
+
},
|
|
60
|
+
tls: {
|
|
61
|
+
ciphers: 'SSLv3',
|
|
62
|
+
rejectUnauthorized: false,
|
|
63
|
+
},
|
|
64
|
+
connectionTimeout: 10000,
|
|
65
|
+
greetingTimeout: 10000,
|
|
66
|
+
socketTimeout: 10000,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
async sendEmail(options) {
|
|
70
|
+
try {
|
|
71
|
+
console.log('📧 [EmailService] Attempting to send email...');
|
|
72
|
+
console.log(' To:', options.to);
|
|
73
|
+
console.log(' Subject:', options.subject);
|
|
74
|
+
console.log(' From:', options.from || this.configService.get('EMAIL_FROM') || 'noreply@mervcryptofortune.com');
|
|
75
|
+
const result = await this.transporter.sendMail({
|
|
76
|
+
from: options.from || this.configService.get('EMAIL_FROM') || 'noreply@mervcryptofortune.com',
|
|
77
|
+
to: options.to,
|
|
78
|
+
subject: options.subject,
|
|
79
|
+
html: options.html,
|
|
80
|
+
});
|
|
81
|
+
console.log('✅ [EmailService] Email sent successfully!');
|
|
82
|
+
console.log(' Message ID:', result.messageId);
|
|
83
|
+
console.log(' Response:', result.response);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.error('❌ [EmailService] Failed to send email:');
|
|
87
|
+
console.error(' Error:', error.message);
|
|
88
|
+
console.error(' Stack:', error.stack);
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async sendOTP(email, otp, purpose) {
|
|
93
|
+
const subject = purpose === 'SIGNUP' ? 'Welcome - Verify Your Email' : 'Login OTP';
|
|
94
|
+
const html = `
|
|
95
|
+
<div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
|
|
96
|
+
<h2>E-Game Cash</h2>
|
|
97
|
+
<p>Your OTP for ${purpose.toLowerCase()} is:</p>
|
|
98
|
+
<h1 style="color: #4CAF50; font-size: 32px; letter-spacing: 5px;">${otp}</h1>
|
|
99
|
+
<p>This OTP will expire in ${this.configService.get('OTP_EXPIRATION_MINUTES') || '5'} minutes.</p>
|
|
100
|
+
<p>If you didn't request this OTP, please ignore this email.</p>
|
|
101
|
+
<hr>
|
|
102
|
+
<p style="color: #666; font-size: 12px;">This is an automated email. Please do not reply.</p>
|
|
103
|
+
</div>
|
|
104
|
+
`;
|
|
105
|
+
await this.sendEmail({ to: email, subject, html });
|
|
106
|
+
}
|
|
107
|
+
async sendWelcomeEmail(email, nickname) {
|
|
108
|
+
const html = `
|
|
109
|
+
<div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
|
|
110
|
+
<h2>Welcome to E-Game Cash, ${nickname}!</h2>
|
|
111
|
+
<p>Your account has been successfully created.</p>
|
|
112
|
+
<p>You can now start playing games and earning cash rewards.</p>
|
|
113
|
+
<p>Thank you for joining us!</p>
|
|
114
|
+
<hr>
|
|
115
|
+
<p style="color: #666; font-size: 12px;">This is an automated email. Please do not reply.</p>
|
|
116
|
+
</div>
|
|
117
|
+
`;
|
|
118
|
+
await this.sendEmail({
|
|
119
|
+
to: email,
|
|
120
|
+
subject: 'Welcome to E-Game Cash!',
|
|
121
|
+
html,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
async sendPasswordResetEmail(email, resetToken) {
|
|
125
|
+
const resetUrl = `${this.configService.get('FRONTEND_URL') || 'http://localhost:3000'}/reset-password?token=${resetToken}`;
|
|
126
|
+
const html = `
|
|
127
|
+
<div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; background-color: #f9f9f9; padding: 20px;">
|
|
128
|
+
<div style="background-color: white; padding: 30px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1);">
|
|
129
|
+
<div style="text-align: center; margin-bottom: 30px;">
|
|
130
|
+
<h1 style="color: #4CAF50; margin: 0;">🔐 E-Game Cash</h1>
|
|
131
|
+
</div>
|
|
132
|
+
|
|
133
|
+
<h2 style="color: #333; margin-bottom: 20px;">Reset Your Password</h2>
|
|
134
|
+
|
|
135
|
+
<p style="color: #666; line-height: 1.6; margin-bottom: 20px;">
|
|
136
|
+
We received a request to reset your password. Click the button below to create a new password:
|
|
137
|
+
</p>
|
|
138
|
+
|
|
139
|
+
<div style="text-align: center; margin: 30px 0;">
|
|
140
|
+
<a href="${resetUrl}"
|
|
141
|
+
style="display: inline-block; padding: 14px 32px; background-color: #4CAF50; color: white; text-decoration: none; border-radius: 6px; font-weight: bold; font-size: 16px; box-shadow: 0 2px 4px rgba(76, 175, 80, 0.4);">
|
|
142
|
+
Reset My Password
|
|
143
|
+
</a>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
<p style="color: #666; line-height: 1.6; margin-bottom: 15px;">
|
|
147
|
+
Or copy and paste this link into your browser:
|
|
148
|
+
</p>
|
|
149
|
+
<div style="background-color: #f5f5f5; padding: 12px; border-radius: 4px; border-left: 3px solid #4CAF50; margin-bottom: 20px;">
|
|
150
|
+
<p style="color: #666; word-break: break-all; margin: 0; font-size: 14px;">${resetUrl}</p>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<div style="background-color: #fff3cd; border-left: 4px solid #ffc107; padding: 12px; margin: 20px 0;">
|
|
154
|
+
<p style="color: #856404; margin: 0; font-size: 14px;">
|
|
155
|
+
⚠️ <strong>Security Note:</strong> This link will expire in <strong>1 hour</strong> for your security.
|
|
156
|
+
</p>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<p style="color: #999; font-size: 14px; line-height: 1.6; margin-top: 30px;">
|
|
160
|
+
If you didn't request this password reset, please ignore this email or contact support if you have concerns. Your password will remain unchanged.
|
|
161
|
+
</p>
|
|
162
|
+
|
|
163
|
+
<hr style="border: none; border-top: 1px solid #eee; margin: 30px 0;">
|
|
164
|
+
|
|
165
|
+
<div style="text-align: center;">
|
|
166
|
+
<p style="color: #999; font-size: 12px; margin: 0;">E-Game Cash - Secure Gaming Platform</p>
|
|
167
|
+
<p style="color: #999; font-size: 12px; margin: 5px 0 0 0;">This is an automated email. Please do not reply.</p>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
`;
|
|
172
|
+
await this.sendEmail({
|
|
173
|
+
to: email,
|
|
174
|
+
subject: '🔐 Reset Your E-Game Cash Password',
|
|
175
|
+
html,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
async sendPasswordChangedNotification(email) {
|
|
179
|
+
const html = `
|
|
180
|
+
<div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
|
|
181
|
+
<h2>Password Changed Successfully</h2>
|
|
182
|
+
<p>Your password has been changed successfully.</p>
|
|
183
|
+
<p>If you didn't make this change, please contact support immediately.</p>
|
|
184
|
+
<hr>
|
|
185
|
+
<p style="color: #666; font-size: 12px;">This is an automated email. Please do not reply.</p>
|
|
186
|
+
</div>
|
|
187
|
+
`;
|
|
188
|
+
await this.sendEmail({
|
|
189
|
+
to: email,
|
|
190
|
+
subject: 'Password Changed',
|
|
191
|
+
html,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
exports.EmailService = EmailService;
|
|
196
|
+
exports.EmailService = EmailService = __decorate([
|
|
197
|
+
(0, common_1.Injectable)(),
|
|
198
|
+
__metadata("design:paramtypes", [config_1.ConfigService])
|
|
199
|
+
], EmailService);
|
|
200
|
+
//# sourceMappingURL=email.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.service.js","sourceRoot":"","sources":["../../src/services/email.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,2CAA+C;AAC/C,uDAAyC;AAUlC,IAAM,YAAY,GAAlB,MAAM,YAAY;IAGvB,YAAoB,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;QAC9C,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,eAAe,CAAC;YAC5C,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,mBAAmB;YACjE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,GAAG;YAC3D,MAAM,EAAE,KAAK;YACb,IAAI,EAAE;gBACJ,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC;gBAC1C,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,CAAC;aAC/C;YACD,GAAG,EAAE;gBACH,OAAO,EAAE,OAAO;gBAChB,kBAAkB,EAAE,KAAK;aAC1B;YACD,iBAAiB,EAAE,KAAK;YACxB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAMD,KAAK,CAAC,SAAS,CAAC,OAAqB;QACnC,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,+BAA+B,CAAC,CAAC;YAEjH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAC7C,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,+BAA+B;gBAC7F,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,OAAO,CAAC,KAAa,EAAE,GAAW,EAAE,OAAe;QACvD,MAAM,OAAO,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,WAAW,CAAC;QACnF,MAAM,IAAI,GAAG;;;0BAGS,OAAO,CAAC,WAAW,EAAE;4EAC6B,GAAG;qCAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,GAAG;;;;;KAKvF,CAAC;QAEF,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IAKD,KAAK,CAAC,gBAAgB,CAAC,KAAa,EAAE,QAAgB;QACpD,MAAM,IAAI,GAAG;;sCAEqB,QAAQ;;;;;;;KAOzC,CAAC;QAEF,MAAM,IAAI,CAAC,SAAS,CAAC;YACnB,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,yBAAyB;YAClC,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAKD,KAAK,CAAC,sBAAsB,CAAC,KAAa,EAAE,UAAkB;QAC5D,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,uBAAuB,yBAAyB,UAAU,EAAE,CAAC;QAC3H,MAAM,IAAI,GAAG;;;;;;;;;;;;;;uBAcM,QAAQ;;;;;;;;;;yFAU0D,QAAQ;;;;;;;;;;;;;;;;;;;;;KAqB5F,CAAC;QAEF,MAAM,IAAI,CAAC,SAAS,CAAC;YACnB,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,oCAAoC;YAC7C,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAKD,KAAK,CAAC,+BAA+B,CAAC,KAAa;QACjD,MAAM,IAAI,GAAG;;;;;;;;KAQZ,CAAC;QAEF,MAAM,IAAI,CAAC,SAAS,CAAC;YACnB,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,kBAAkB;YAC3B,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA5KY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAIwB,sBAAa;GAHrC,YAAY,CA4KxB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
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("./email.service"), exports);
|
|
18
|
+
__exportStar(require("./email.module"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAAgC;AAChC,iDAA+B"}
|