@venturialstd/slack 0.1.25 → 0.1.26
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/dist/core/src/auth/auth.module.d.ts +2 -0
- package/dist/core/src/auth/auth.module.js +26 -0
- package/dist/core/src/auth/auth.module.js.map +1 -0
- package/dist/core/src/auth/constants/role.constant.d.ts +5 -0
- package/dist/core/src/auth/constants/role.constant.js +10 -0
- package/dist/core/src/auth/constants/role.constant.js.map +1 -0
- package/dist/core/src/auth/constants/strategy.constant.d.ts +5 -0
- package/dist/core/src/auth/constants/strategy.constant.js +9 -0
- package/dist/core/src/auth/constants/strategy.constant.js.map +1 -0
- package/dist/core/src/auth/controllers/auth.controller.d.ts +5 -0
- package/dist/core/src/auth/controllers/auth.controller.js +40 -0
- package/dist/core/src/auth/controllers/auth.controller.js.map +1 -0
- package/dist/core/src/auth/decorators/role.decorator.d.ts +4 -0
- package/dist/core/src/auth/decorators/role.decorator.js +8 -0
- package/dist/core/src/auth/decorators/role.decorator.js.map +1 -0
- package/dist/core/src/auth/dtos/auth-login-input.dto.d.ts +4 -0
- package/dist/core/src/auth/dtos/auth-login-input.dto.js +33 -0
- package/dist/core/src/auth/dtos/auth-login-input.dto.js.map +1 -0
- package/dist/core/src/auth/dtos/auth-refresh-token-input.dto.d.ts +3 -0
- package/dist/core/src/auth/dtos/auth-refresh-token-input.dto.js +24 -0
- package/dist/core/src/auth/dtos/auth-refresh-token-input.dto.js.map +1 -0
- package/dist/core/src/auth/dtos/auth-register-input.dto.d.ts +9 -0
- package/dist/core/src/auth/dtos/auth-register-input.dto.js +54 -0
- package/dist/core/src/auth/dtos/auth-register-input.dto.js.map +1 -0
- package/dist/core/src/auth/dtos/auth-register-output.dto.d.ts +11 -0
- package/dist/core/src/auth/dtos/auth-register-output.dto.js +67 -0
- package/dist/core/src/auth/dtos/auth-register-output.dto.js.map +1 -0
- package/dist/core/src/auth/dtos/auth-token-output.dto.d.ts +13 -0
- package/dist/core/src/auth/dtos/auth-token-output.dto.js +52 -0
- package/dist/core/src/auth/dtos/auth-token-output.dto.js.map +1 -0
- package/dist/core/src/auth/guards/auth0.guard.d.ts +8 -0
- package/dist/core/src/auth/guards/auth0.guard.js +28 -0
- package/dist/core/src/auth/guards/auth0.guard.js.map +1 -0
- package/dist/core/src/auth/guards/firebase.guard.d.ts +8 -0
- package/dist/core/src/auth/guards/firebase.guard.js +28 -0
- package/dist/core/src/auth/guards/firebase.guard.js.map +1 -0
- package/dist/core/src/auth/guards/jwt-auth.guard.d.ts +8 -0
- package/dist/core/src/auth/guards/jwt-auth.guard.js +28 -0
- package/dist/core/src/auth/guards/jwt-auth.guard.js.map +1 -0
- package/dist/core/src/auth/guards/jwt-refresh.guard.d.ts +8 -0
- package/dist/core/src/auth/guards/jwt-refresh.guard.js +28 -0
- package/dist/core/src/auth/guards/jwt-refresh.guard.js.map +1 -0
- package/dist/core/src/auth/guards/jwt.guard.d.ts +8 -0
- package/dist/core/src/auth/guards/jwt.guard.js +28 -0
- package/dist/core/src/auth/guards/jwt.guard.js.map +1 -0
- package/dist/core/src/auth/guards/local-auth.guard.d.ts +4 -0
- package/dist/core/src/auth/guards/local-auth.guard.js +19 -0
- package/dist/core/src/auth/guards/local-auth.guard.js.map +1 -0
- package/dist/core/src/auth/guards/roles.guard.d.ts +7 -0
- package/dist/core/src/auth/guards/roles.guard.js +41 -0
- package/dist/core/src/auth/guards/roles.guard.js.map +1 -0
- package/dist/core/src/auth/services/auth.service.d.ts +7 -0
- package/dist/core/src/auth/services/auth.service.js +32 -0
- package/dist/core/src/auth/services/auth.service.js.map +1 -0
- package/dist/core/src/auth/types/auth.type.d.ts +4 -0
- package/dist/core/src/auth/types/auth.type.js +3 -0
- package/dist/core/src/auth/types/auth.type.js.map +1 -0
- package/dist/core/src/index.d.ts +44 -0
- package/dist/core/src/index.js +61 -0
- package/dist/core/src/index.js.map +1 -0
- package/dist/core/src/settings/constants/settings.constant.d.ts +11 -0
- package/dist/core/src/settings/constants/settings.constant.js +16 -0
- package/dist/core/src/settings/constants/settings.constant.js.map +1 -0
- package/dist/core/src/settings/controllers/admin/settings.admin.controller.d.ts +11 -0
- package/dist/core/src/settings/controllers/admin/settings.admin.controller.js +74 -0
- package/dist/core/src/settings/controllers/admin/settings.admin.controller.js.map +1 -0
- package/dist/core/src/settings/entities/settings.entity.d.ts +16 -0
- package/dist/core/src/settings/entities/settings.entity.js +116 -0
- package/dist/core/src/settings/entities/settings.entity.js.map +1 -0
- package/dist/core/src/settings/services/settings.service.d.ts +12 -0
- package/dist/core/src/settings/services/settings.service.js +150 -0
- package/dist/core/src/settings/services/settings.service.js.map +1 -0
- package/dist/core/src/settings/settings.module.d.ts +2 -0
- package/dist/core/src/settings/settings.module.js +26 -0
- package/dist/core/src/settings/settings.module.js.map +1 -0
- package/dist/core/src/shared/acl/action.constant.d.ts +8 -0
- package/dist/core/src/shared/acl/action.constant.js +13 -0
- package/dist/core/src/shared/acl/action.constant.js.map +1 -0
- package/dist/core/src/shared/acl/actor.constant.d.ts +4 -0
- package/dist/core/src/shared/acl/actor.constant.js +3 -0
- package/dist/core/src/shared/acl/actor.constant.js.map +1 -0
- package/dist/core/src/shared/configs/configuration.d.ts +2 -0
- package/dist/core/src/shared/configs/configuration.js +23 -0
- package/dist/core/src/shared/configs/configuration.js.map +1 -0
- package/dist/core/src/shared/configs/module-options.d.ts +2 -0
- package/dist/core/src/shared/configs/module-options.js +65 -0
- package/dist/core/src/shared/configs/module-options.js.map +1 -0
- package/dist/core/src/shared/constants/cache.d.ts +6 -0
- package/dist/core/src/shared/constants/cache.js +11 -0
- package/dist/core/src/shared/constants/cache.js.map +1 -0
- package/dist/core/src/shared/constants/common.d.ts +6 -0
- package/dist/core/src/shared/constants/common.js +7 -0
- package/dist/core/src/shared/constants/common.js.map +1 -0
- package/dist/core/src/shared/constants/crud.d.ts +82 -0
- package/dist/core/src/shared/constants/crud.js +132 -0
- package/dist/core/src/shared/constants/crud.js.map +1 -0
- package/dist/core/src/shared/constants/index.d.ts +3 -0
- package/dist/core/src/shared/constants/index.js +20 -0
- package/dist/core/src/shared/constants/index.js.map +1 -0
- package/dist/core/src/shared/dtos/base-api-response.dto.d.ts +21 -0
- package/dist/core/src/shared/dtos/base-api-response.dto.js +88 -0
- package/dist/core/src/shared/dtos/base-api-response.dto.js.map +1 -0
- package/dist/core/src/shared/dtos/empty.dto.d.ts +3 -0
- package/dist/core/src/shared/dtos/empty.dto.js +25 -0
- package/dist/core/src/shared/dtos/empty.dto.js.map +1 -0
- package/dist/core/src/shared/dtos/pagination-params.dto.d.ts +6 -0
- package/dist/core/src/shared/dtos/pagination-params.dto.js +61 -0
- package/dist/core/src/shared/dtos/pagination-params.dto.js.map +1 -0
- package/dist/core/src/shared/exceptions/base-api.exception.d.ts +6 -0
- package/dist/core/src/shared/exceptions/base-api.exception.js +16 -0
- package/dist/core/src/shared/exceptions/base-api.exception.js.map +1 -0
- package/dist/core/src/shared/filters/all-exceptions.filter.d.ts +9 -0
- package/dist/core/src/shared/filters/all-exceptions.filter.js +91 -0
- package/dist/core/src/shared/filters/all-exceptions.filter.js.map +1 -0
- package/dist/core/src/shared/interceptors/logging.interceptor.d.ts +8 -0
- package/dist/core/src/shared/interceptors/logging.interceptor.js +52 -0
- package/dist/core/src/shared/interceptors/logging.interceptor.js.map +1 -0
- package/dist/core/src/shared/logger/logger.module.d.ts +2 -0
- package/dist/core/src/shared/logger/logger.module.js +22 -0
- package/dist/core/src/shared/logger/logger.module.js.map +1 -0
- package/dist/core/src/shared/logger/logger.service.d.ts +12 -0
- package/dist/core/src/shared/logger/logger.service.js +77 -0
- package/dist/core/src/shared/logger/logger.service.js.map +1 -0
- package/dist/core/src/shared/middlewares/request-id/request-id.middleware.d.ts +2 -0
- package/dist/core/src/shared/middlewares/request-id/request-id.middleware.js +15 -0
- package/dist/core/src/shared/middlewares/request-id/request-id.middleware.js.map +1 -0
- package/dist/core/src/shared/request-context/req-context.decorator.d.ts +1 -0
- package/dist/core/src/shared/request-context/req-context.decorator.js +10 -0
- package/dist/core/src/shared/request-context/req-context.decorator.js.map +1 -0
- package/dist/core/src/shared/request-context/request-context.dto.d.ts +12 -0
- package/dist/core/src/shared/request-context/request-context.dto.js +14 -0
- package/dist/core/src/shared/request-context/request-context.dto.js.map +1 -0
- package/dist/core/src/shared/request-context/util/index.d.ts +3 -0
- package/dist/core/src/shared/request-context/util/index.js +16 -0
- package/dist/core/src/shared/request-context/util/index.js.map +1 -0
- package/dist/core/src/shared/services/cache.service.d.ts +12 -0
- package/dist/core/src/shared/services/cache.service.js +64 -0
- package/dist/core/src/shared/services/cache.service.js.map +1 -0
- package/dist/core/src/shared/shared.module.d.ts +8 -0
- package/dist/core/src/shared/shared.module.js +81 -0
- package/dist/core/src/shared/shared.module.js.map +1 -0
- package/dist/core/src/shared/utils/phone.util.d.ts +5 -0
- package/dist/core/src/shared/utils/phone.util.js +17 -0
- package/dist/core/src/shared/utils/phone.util.js.map +1 -0
- package/dist/core/src/shared/utils/user.util.d.ts +4 -0
- package/dist/core/src/shared/utils/user.util.js +11 -0
- package/dist/core/src/shared/utils/user.util.js.map +1 -0
- package/dist/slack/clients/slack.client.d.ts +3 -3
- package/dist/slack/clients/slack.client.js +8 -10
- package/dist/slack/clients/slack.client.js.map +1 -1
- package/dist/slack/constants/slack.constants.d.ts +3 -0
- package/dist/slack/constants/slack.constants.js +7 -0
- package/dist/slack/constants/slack.constants.js.map +1 -0
- package/dist/slack/controllers/slack.webhook.controller.d.ts +2 -2
- package/dist/slack/controllers/slack.webhook.controller.js +3 -3
- package/dist/slack/controllers/slack.webhook.controller.js.map +1 -1
- package/dist/slack/services/slack-channel.service.d.ts +2 -2
- package/dist/slack/services/slack-channel.service.js +3 -5
- package/dist/slack/services/slack-channel.service.js.map +1 -1
- package/dist/slack/services/slack-message.service.d.ts +2 -3
- package/dist/slack/services/slack-message.service.js +3 -20
- package/dist/slack/services/slack-message.service.js.map +1 -1
- package/dist/slack/slack.module.d.ts +0 -3
- package/dist/slack/slack.module.js +9 -25
- package/dist/slack/slack.module.js.map +1 -1
- package/dist/slack/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequestIdMiddleware = void 0;
|
|
4
|
+
const uuid_1 = require("uuid");
|
|
5
|
+
const constants_1 = require("../../constants");
|
|
6
|
+
const RequestIdMiddleware = (req, res, next) => {
|
|
7
|
+
const requestIdToken = req.header(constants_1.REQUEST_ID_TOKEN_HEADER) || '';
|
|
8
|
+
if (!requestIdToken || !(0, uuid_1.validate)(requestIdToken)) {
|
|
9
|
+
req.headers[constants_1.REQUEST_ID_TOKEN_HEADER] = (0, uuid_1.v4)();
|
|
10
|
+
}
|
|
11
|
+
res.set(constants_1.REQUEST_ID_TOKEN_HEADER, req.headers[constants_1.REQUEST_ID_TOKEN_HEADER]);
|
|
12
|
+
next();
|
|
13
|
+
};
|
|
14
|
+
exports.RequestIdMiddleware = RequestIdMiddleware;
|
|
15
|
+
//# sourceMappingURL=request-id.middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-id.middleware.js","sourceRoot":"","sources":["../../../../../../../core/src/shared/middlewares/request-id/request-id.middleware.ts"],"names":[],"mappings":";;;AACA,+BAA8C;AAE9C,+CAA0D;AAEnD,MAAM,mBAAmB,GAAG,CAAC,GAAY,EAAE,GAAa,EAAE,IAAgB,EAAQ,EAAE;IAEzF,MAAM,cAAc,GAAG,GAAG,CAAC,MAAM,CAAC,mCAAuB,CAAC,IAAI,EAAE,CAAC;IAEjE,IAAI,CAAC,cAAc,IAAI,CAAC,IAAA,eAAQ,EAAC,cAAc,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,OAAO,CAAC,mCAAuB,CAAC,GAAG,IAAA,SAAM,GAAE,CAAC;IAClD,CAAC;IAGD,GAAG,CAAC,GAAG,CAAC,mCAAuB,EAAE,GAAG,CAAC,OAAO,CAAC,mCAAuB,CAAC,CAAC,CAAC;IACvE,IAAI,EAAE,CAAC;AACT,CAAC,CAAC;AAXW,QAAA,mBAAmB,uBAW9B","sourcesContent":["import { Request, Response } from 'express';\r\nimport { v4 as uuidv4, validate } from 'uuid';\r\n\r\nimport { REQUEST_ID_TOKEN_HEADER } from '../../constants';\r\n\r\nexport const RequestIdMiddleware = (req: Request, res: Response, next: () => void): void => {\r\n /** set request id, if not being set yet */\r\n const requestIdToken = req.header(REQUEST_ID_TOKEN_HEADER) || '';\r\n\r\n if (!requestIdToken || !validate(requestIdToken)) {\r\n req.headers[REQUEST_ID_TOKEN_HEADER] = uuidv4();\r\n }\r\n\r\n /** set res id in response from req */\r\n res.set(REQUEST_ID_TOKEN_HEADER, req.headers[REQUEST_ID_TOKEN_HEADER]);\r\n next();\r\n};\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ReqContext: (...dataOrPipes: unknown[]) => ParameterDecorator;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReqContext = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const util_1 = require("./util");
|
|
6
|
+
exports.ReqContext = (0, common_1.createParamDecorator)((data, ctx) => {
|
|
7
|
+
const request = ctx.switchToHttp().getRequest();
|
|
8
|
+
return (0, util_1.createRequestContext)(request);
|
|
9
|
+
});
|
|
10
|
+
//# sourceMappingURL=req-context.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"req-context.decorator.js","sourceRoot":"","sources":["../../../../../../core/src/shared/request-context/req-context.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAAwE;AAGxE,iCAA8C;AAEjC,QAAA,UAAU,GAAG,IAAA,6BAAoB,EAC5C,CAAC,IAAa,EAAE,GAAqB,EAAkB,EAAE;IACvD,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;IAEhD,OAAO,IAAA,2BAAoB,EAAC,OAAO,CAAC,CAAC;AACvC,CAAC,CACF,CAAC","sourcesContent":["import { createParamDecorator, ExecutionContext } from '@nestjs/common';\r\n\r\nimport { RequestContext } from './request-context.dto';\r\nimport { createRequestContext } from './util';\r\n\r\nexport const ReqContext = createParamDecorator(\r\n (data: unknown, ctx: ExecutionContext): RequestContext => {\r\n const request = ctx.switchToHttp().getRequest();\r\n\r\n return createRequestContext(request);\r\n },\r\n);\r\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CrudRequest, CrudRequestOptions } from '@dataui/crud';
|
|
2
|
+
import { ParsedRequestParams } from '@dataui/crud-request';
|
|
3
|
+
import { UserAccessTokenClaims } from '../../auth/dtos/auth-token-output.dto';
|
|
4
|
+
export declare class RequestContext implements CrudRequest {
|
|
5
|
+
parsed: ParsedRequestParams<object>;
|
|
6
|
+
options: CrudRequestOptions;
|
|
7
|
+
auth?: object | undefined;
|
|
8
|
+
requestID: string | undefined;
|
|
9
|
+
url: string;
|
|
10
|
+
ip: string | undefined;
|
|
11
|
+
user: UserAccessTokenClaims | null;
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RequestContext = void 0;
|
|
4
|
+
class RequestContext {
|
|
5
|
+
parsed;
|
|
6
|
+
options;
|
|
7
|
+
auth;
|
|
8
|
+
requestID;
|
|
9
|
+
url;
|
|
10
|
+
ip;
|
|
11
|
+
user;
|
|
12
|
+
}
|
|
13
|
+
exports.RequestContext = RequestContext;
|
|
14
|
+
//# sourceMappingURL=request-context.dto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-context.dto.js","sourceRoot":"","sources":["../../../../../../core/src/shared/request-context/request-context.dto.ts"],"names":[],"mappings":";;;AAKA,MAAa,cAAc;IACzB,MAAM,CAA8B;IACpC,OAAO,CAAqB;IAC5B,IAAI,CAAsB;IACnB,SAAS,CAAqB;IAE9B,GAAG,CAAS;IAEZ,EAAE,CAAqB;IAEvB,IAAI,CAA+B;CAC3C;AAXD,wCAWC","sourcesContent":["import { CrudRequest, CrudRequestOptions } from '@dataui/crud';\r\nimport { ParsedRequestParams } from '@dataui/crud-request';\r\n\r\nimport { UserAccessTokenClaims } from '../../auth/dtos/auth-token-output.dto';\r\n\r\nexport class RequestContext implements CrudRequest {\r\n parsed: ParsedRequestParams<object>;\r\n options: CrudRequestOptions;\r\n auth?: object | undefined;\r\n public requestID: string | undefined;\r\n\r\n public url: string;\r\n\r\n public ip: string | undefined;\r\n\r\n public user: UserAccessTokenClaims | null;\r\n}\r\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createRequestContext = createRequestContext;
|
|
4
|
+
const constants_1 = require("../../constants");
|
|
5
|
+
const request_context_dto_1 = require("../request-context.dto");
|
|
6
|
+
function createRequestContext(request) {
|
|
7
|
+
const ctx = new request_context_dto_1.RequestContext();
|
|
8
|
+
ctx.requestID = request.header(constants_1.REQUEST_ID_TOKEN_HEADER);
|
|
9
|
+
ctx.url = request.url;
|
|
10
|
+
ctx.ip = request.header(constants_1.FORWARDED_FOR_TOKEN_HEADER)
|
|
11
|
+
? request.header(constants_1.FORWARDED_FOR_TOKEN_HEADER)
|
|
12
|
+
: request.ip;
|
|
13
|
+
ctx.user = request.user ? request.user : null;
|
|
14
|
+
return ctx;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../core/src/shared/request-context/util/index.ts"],"names":[],"mappings":";;AAOA,oDAYC;AAhBD,+CAAsF;AACtF,gEAAwD;AAGxD,SAAgB,oBAAoB,CAAC,OAAgB;IACnD,MAAM,GAAG,GAAG,IAAI,oCAAc,EAAE,CAAC;IACjC,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,mCAAuB,CAAC,CAAC;IACxD,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IACtB,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,sCAA0B,CAAC;QACjD,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,sCAA0B,CAAC;QAC5C,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAGf,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAE,OAAO,CAAC,IAA8B,CAAC,CAAC,CAAC,IAAI,CAAC;IAEzE,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { Request } from 'express';\r\n\r\nimport { UserAccessTokenClaims } from '../../../auth/dtos/auth-token-output.dto';\r\nimport { FORWARDED_FOR_TOKEN_HEADER, REQUEST_ID_TOKEN_HEADER } from '../../constants';\r\nimport { RequestContext } from '../request-context.dto';\r\n\r\n// Creates a RequestContext object from Request\r\nexport function createRequestContext(request: Request): RequestContext {\r\n const ctx = new RequestContext();\r\n ctx.requestID = request.header(REQUEST_ID_TOKEN_HEADER);\r\n ctx.url = request.url;\r\n ctx.ip = request.header(FORWARDED_FOR_TOKEN_HEADER)\r\n ? request.header(FORWARDED_FOR_TOKEN_HEADER)\r\n : request.ip;\r\n\r\n // If request.user does not exist, we explicitly set it to null.\r\n ctx.user = request.user ? (request.user as UserAccessTokenClaims) : null;\r\n\r\n return ctx;\r\n}\r\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Cache } from '@nestjs/cache-manager';
|
|
2
|
+
import { CACHE_KEY } from '../constants/cache';
|
|
3
|
+
export declare class CacheService {
|
|
4
|
+
private cacheManager;
|
|
5
|
+
private readonly DEFAULT_TTL;
|
|
6
|
+
constructor(cacheManager: Cache);
|
|
7
|
+
private replaceKeyInjection;
|
|
8
|
+
get<T>(key: CACHE_KEY, keyInject?: Record<string, string>): Promise<T | null>;
|
|
9
|
+
set(key: CACHE_KEY, value: unknown, keyInject?: Record<string, string>, ttl?: number): Promise<unknown>;
|
|
10
|
+
getOrSet(key: CACHE_KEY, fn: () => Promise<any>, keyInject?: Record<string, string>, ttl?: number): Promise<any>;
|
|
11
|
+
del(key: CACHE_KEY, keyInject?: Record<string, string>): Promise<null>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
15
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
16
|
+
};
|
|
17
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
|
+
exports.CacheService = void 0;
|
|
19
|
+
const cache_manager_1 = require("@nestjs/cache-manager");
|
|
20
|
+
const common_1 = require("@nestjs/common");
|
|
21
|
+
const lodash_1 = __importDefault(require("lodash"));
|
|
22
|
+
let CacheService = class CacheService {
|
|
23
|
+
cacheManager;
|
|
24
|
+
DEFAULT_TTL = 60 * 60 * 1000;
|
|
25
|
+
constructor(cacheManager) {
|
|
26
|
+
this.cacheManager = cacheManager;
|
|
27
|
+
}
|
|
28
|
+
replaceKeyInjection(key, keyInject) {
|
|
29
|
+
let localkey = key;
|
|
30
|
+
if (keyInject) {
|
|
31
|
+
localkey = localkey.replace(/\*(\w+)/g, (match, p1) => keyInject[p1]);
|
|
32
|
+
}
|
|
33
|
+
return localkey;
|
|
34
|
+
}
|
|
35
|
+
async get(key, keyInject) {
|
|
36
|
+
const localKey = this.replaceKeyInjection(key, keyInject);
|
|
37
|
+
return this.cacheManager.get(localKey);
|
|
38
|
+
}
|
|
39
|
+
async set(key, value, keyInject, ttl = this.DEFAULT_TTL) {
|
|
40
|
+
const localKey = this.replaceKeyInjection(key, keyInject);
|
|
41
|
+
return this.cacheManager.set(localKey, value, { ttl });
|
|
42
|
+
}
|
|
43
|
+
async getOrSet(key, fn, keyInject, ttl = this.DEFAULT_TTL) {
|
|
44
|
+
const localKey = this.replaceKeyInjection(key, keyInject);
|
|
45
|
+
const value = await this.cacheManager.get(localKey);
|
|
46
|
+
if (value)
|
|
47
|
+
return value;
|
|
48
|
+
const data = await fn();
|
|
49
|
+
if (!lodash_1.default.isEmpty(data))
|
|
50
|
+
await this.cacheManager.set(localKey, data, ttl);
|
|
51
|
+
return data;
|
|
52
|
+
}
|
|
53
|
+
async del(key, keyInject) {
|
|
54
|
+
const localKey = this.replaceKeyInjection(key, keyInject);
|
|
55
|
+
return this.cacheManager.set(localKey, null, { ttl: 1 });
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
exports.CacheService = CacheService;
|
|
59
|
+
exports.CacheService = CacheService = __decorate([
|
|
60
|
+
(0, common_1.Injectable)(),
|
|
61
|
+
__param(0, (0, common_1.Inject)(cache_manager_1.CACHE_MANAGER)),
|
|
62
|
+
__metadata("design:paramtypes", [cache_manager_1.Cache])
|
|
63
|
+
], CacheService);
|
|
64
|
+
//# sourceMappingURL=cache.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../../../../../core/src/shared/services/cache.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,yDAA6D;AAC7D,2CAAoD;AACpD,oDAAuB;AAKhB,IAAM,YAAY,GAAlB,MAAM,YAAY;IAGoB;IAF1B,WAAW,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAE9C,YAA2C,YAAmB;QAAnB,iBAAY,GAAZ,YAAY,CAAO;IAAG,CAAC;IAE1D,mBAAmB,CAAC,GAAc,EAAE,SAAkC;QAC5E,IAAI,QAAQ,GAAW,GAAG,CAAC;QAC3B,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,GAAG,CAAI,GAAc,EAAE,SAAkC;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAI,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,GAAG,CACP,GAAc,EACd,KAAc,EACd,SAAkC,EAClC,GAAG,GAAG,IAAI,CAAC,WAAW;QAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAG1D,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,GAAG,EAAS,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,GAAc,EAEd,EAAsB,EACtB,SAAkC,EAClC,GAAG,GAAG,IAAI,CAAC,WAAW;QAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAE1D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEpD,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QAExB,MAAM,IAAI,GAAG,MAAM,EAAE,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAC,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QAEvE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,GAAc,EAAE,SAAkC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAG1D,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,EAAS,CAAC,CAAC;IAClE,CAAC;CACF,CAAA;AAzDY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;IAIE,WAAA,IAAA,eAAM,EAAC,6BAAa,CAAC,CAAA;qCAAuB,qBAAK;GAHnD,YAAY,CAyDxB","sourcesContent":["import { Cache, CACHE_MANAGER } from '@nestjs/cache-manager';\r\nimport { Inject, Injectable } from '@nestjs/common';\r\nimport _ from 'lodash';\r\n\r\nimport { CACHE_KEY } from '../constants/cache';\r\n\r\n@Injectable()\r\nexport class CacheService {\r\n private readonly DEFAULT_TTL = 60 * 60 * 1000; // 1 hour in milliseconds\r\n\r\n constructor(@Inject(CACHE_MANAGER) private cacheManager: Cache) {}\r\n\r\n private replaceKeyInjection(key: CACHE_KEY, keyInject?: Record<string, string>) {\r\n let localkey: string = key;\r\n if (keyInject) {\r\n localkey = localkey.replace(/\\*(\\w+)/g, (match, p1) => keyInject[p1]);\r\n }\r\n\r\n return localkey;\r\n }\r\n\r\n async get<T>(key: CACHE_KEY, keyInject?: Record<string, string>): Promise<T | null> {\r\n const localKey = this.replaceKeyInjection(key, keyInject);\r\n\r\n return this.cacheManager.get<T>(localKey);\r\n }\r\n\r\n async set(\r\n key: CACHE_KEY,\r\n value: unknown,\r\n keyInject?: Record<string, string>,\r\n ttl = this.DEFAULT_TTL,\r\n ) {\r\n const localKey = this.replaceKeyInjection(key, keyInject);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return this.cacheManager.set(localKey, value, { ttl } as any);\r\n }\r\n\r\n async getOrSet(\r\n key: CACHE_KEY,\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n fn: () => Promise<any>,\r\n keyInject?: Record<string, string>,\r\n ttl = this.DEFAULT_TTL,\r\n ) {\r\n const localKey = this.replaceKeyInjection(key, keyInject);\r\n\r\n const value = await this.cacheManager.get(localKey);\r\n\r\n if (value) return value;\r\n\r\n const data = await fn();\r\n if (!_.isEmpty(data)) await this.cacheManager.set(localKey, data, ttl);\r\n\r\n return data;\r\n }\r\n\r\n async del(key: CACHE_KEY, keyInject?: Record<string, string>) {\r\n const localKey = this.replaceKeyInjection(key, keyInject);\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n return this.cacheManager.set(localKey, null, { ttl: 1 } as any);\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DynamicModule } from '@nestjs/common';
|
|
2
|
+
import { EntitySchema } from 'typeorm';
|
|
3
|
+
export interface SharedModuleOptions {
|
|
4
|
+
entities?: Array<string | Function | EntitySchema>;
|
|
5
|
+
}
|
|
6
|
+
export declare class SharedModule {
|
|
7
|
+
static forRoot(options?: SharedModuleOptions): DynamicModule;
|
|
8
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
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 SharedModule_1;
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.SharedModule = void 0;
|
|
11
|
+
const redis_1 = require("@keyv/redis");
|
|
12
|
+
const cache_manager_1 = require("@nestjs/cache-manager");
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const config_1 = require("@nestjs/config");
|
|
15
|
+
const core_1 = require("@nestjs/core");
|
|
16
|
+
const typeorm_1 = require("@nestjs/typeorm");
|
|
17
|
+
const settings_entity_1 = require("../settings/entities/settings.entity");
|
|
18
|
+
const settings_module_1 = require("../settings/settings.module");
|
|
19
|
+
const module_options_1 = require("./configs/module-options");
|
|
20
|
+
const all_exceptions_filter_1 = require("./filters/all-exceptions.filter");
|
|
21
|
+
const logging_interceptor_1 = require("./interceptors/logging.interceptor");
|
|
22
|
+
const logger_module_1 = require("./logger/logger.module");
|
|
23
|
+
const cache_service_1 = require("./services/cache.service");
|
|
24
|
+
let SharedModule = SharedModule_1 = class SharedModule {
|
|
25
|
+
static forRoot(options = {}) {
|
|
26
|
+
const coreEntities = [settings_entity_1.Settings];
|
|
27
|
+
const parentEntities = options.entities || [];
|
|
28
|
+
const allEntities = [...coreEntities, ...parentEntities];
|
|
29
|
+
return {
|
|
30
|
+
module: SharedModule_1,
|
|
31
|
+
imports: [
|
|
32
|
+
cache_manager_1.CacheModule.registerAsync({
|
|
33
|
+
isGlobal: true,
|
|
34
|
+
imports: [config_1.ConfigModule],
|
|
35
|
+
useFactory: async (configService) => ({
|
|
36
|
+
stores: [
|
|
37
|
+
(0, redis_1.createKeyv)({
|
|
38
|
+
url: configService.get('redis.url'),
|
|
39
|
+
password: configService.get('redis.password'),
|
|
40
|
+
}),
|
|
41
|
+
],
|
|
42
|
+
}),
|
|
43
|
+
inject: [config_1.ConfigService],
|
|
44
|
+
}),
|
|
45
|
+
config_1.ConfigModule.forRoot(module_options_1.configModuleOptions),
|
|
46
|
+
typeorm_1.TypeOrmModule.forRootAsync({
|
|
47
|
+
imports: [config_1.ConfigModule],
|
|
48
|
+
inject: [config_1.ConfigService],
|
|
49
|
+
useFactory: async (configService) => ({
|
|
50
|
+
type: 'postgres',
|
|
51
|
+
host: configService.get('database.host'),
|
|
52
|
+
port: configService.get('database.port'),
|
|
53
|
+
database: configService.get('database.name'),
|
|
54
|
+
username: configService.get('database.user'),
|
|
55
|
+
password: configService.get('database.pass'),
|
|
56
|
+
entities: allEntities,
|
|
57
|
+
timezone: 'Z',
|
|
58
|
+
synchronize: false,
|
|
59
|
+
debug: true,
|
|
60
|
+
}),
|
|
61
|
+
}),
|
|
62
|
+
logger_module_1.AppLoggerModule,
|
|
63
|
+
settings_module_1.SettingsModule,
|
|
64
|
+
],
|
|
65
|
+
exports: [logger_module_1.AppLoggerModule, config_1.ConfigModule, cache_service_1.CacheService, settings_module_1.SettingsModule],
|
|
66
|
+
providers: [
|
|
67
|
+
{ provide: core_1.APP_INTERCEPTOR, useClass: logging_interceptor_1.LoggingInterceptor },
|
|
68
|
+
{
|
|
69
|
+
provide: core_1.APP_FILTER,
|
|
70
|
+
useClass: all_exceptions_filter_1.AllExceptionsFilter,
|
|
71
|
+
},
|
|
72
|
+
cache_service_1.CacheService,
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
exports.SharedModule = SharedModule;
|
|
78
|
+
exports.SharedModule = SharedModule = SharedModule_1 = __decorate([
|
|
79
|
+
(0, common_1.Module)({})
|
|
80
|
+
], SharedModule);
|
|
81
|
+
//# sourceMappingURL=shared.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.module.js","sourceRoot":"","sources":["../../../../../core/src/shared/shared.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,uCAAyC;AACzC,yDAAoD;AACpD,2CAAuD;AACvD,2CAA6D;AAC7D,uCAA2D;AAC3D,6CAAgD;AAGhD,0EAAgE;AAChE,iEAA6D;AAC7D,6DAA+D;AAC/D,2EAAsE;AACtE,4EAAwE;AACxE,0DAAyD;AACzD,4DAAwD;AAQjD,IAAM,YAAY,oBAAlB,MAAM,YAAY;IACvB,MAAM,CAAC,OAAO,CAAC,UAA+B,EAAE;QAE9C,MAAM,YAAY,GAAG,CAAC,0BAAQ,CAAC,CAAC;QAGhC,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;QAG9C,MAAM,WAAW,GAAG,CAAC,GAAG,YAAY,EAAE,GAAG,cAAc,CAAC,CAAC;QAEzD,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,OAAO,EAAE;gBACP,2BAAW,CAAC,aAAa,CAAC;oBACxB,QAAQ,EAAE,IAAI;oBACd,OAAO,EAAE,CAAC,qBAAY,CAAC;oBACvB,UAAU,EAAE,KAAK,EAAE,aAA4B,EAAE,EAAE,CAAC,CAAC;wBACnD,MAAM,EAAE;4BACN,IAAA,kBAAU,EAAC;gCACT,GAAG,EAAE,aAAa,CAAC,GAAG,CAAS,WAAW,CAAC;gCAC3C,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAS,gBAAgB,CAAC;6BACtD,CAAC;yBACH;qBACF,CAAC;oBACF,MAAM,EAAE,CAAC,sBAAa,CAAC;iBACxB,CAAC;gBACF,qBAAY,CAAC,OAAO,CAAC,oCAAmB,CAAC;gBACzC,uBAAa,CAAC,YAAY,CAAC;oBACzB,OAAO,EAAE,CAAC,qBAAY,CAAC;oBACvB,MAAM,EAAE,CAAC,sBAAa,CAAC;oBACvB,UAAU,EAAE,KAAK,EAAE,aAA4B,EAAE,EAAE,CAAC,CAAC;wBACnD,IAAI,EAAE,UAAU;wBAChB,IAAI,EAAE,aAAa,CAAC,GAAG,CAAS,eAAe,CAAC;wBAChD,IAAI,EAAE,aAAa,CAAC,GAAG,CAAqB,eAAe,CAAC;wBAC5D,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAS,eAAe,CAAC;wBACpD,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAS,eAAe,CAAC;wBACpD,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAS,eAAe,CAAC;wBACpD,QAAQ,EAAE,WAAW;wBAGrB,QAAQ,EAAE,GAAG;wBACb,WAAW,EAAE,KAAK;wBAClB,KAAK,EAAE,IAAI;qBACZ,CAAC;iBACH,CAAC;gBACF,+BAAe;gBACf,gCAAc;aACf;YACD,OAAO,EAAE,CAAC,+BAAe,EAAE,qBAAY,EAAE,4BAAY,EAAE,gCAAc,CAAC;YACtE,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,sBAAe,EAAE,QAAQ,EAAE,wCAAkB,EAAE;gBAC1D;oBACE,OAAO,EAAE,iBAAU;oBACnB,QAAQ,EAAE,2CAAmB;iBAC9B;gBACD,4BAAY;aACb;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AA5DY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,YAAY,CA4DxB","sourcesContent":["import { createKeyv } from '@keyv/redis';\r\nimport { CacheModule } from '@nestjs/cache-manager';\r\nimport { DynamicModule, Module } from '@nestjs/common';\r\nimport { ConfigModule, ConfigService } from '@nestjs/config';\r\nimport { APP_FILTER, APP_INTERCEPTOR } from '@nestjs/core';\r\nimport { TypeOrmModule } from '@nestjs/typeorm';\r\nimport { EntitySchema, ObjectType } from 'typeorm';\r\n\r\nimport { Settings } from '../settings/entities/settings.entity';\r\nimport { SettingsModule } from '../settings/settings.module';\r\nimport { configModuleOptions } from './configs/module-options';\r\nimport { AllExceptionsFilter } from './filters/all-exceptions.filter';\r\nimport { LoggingInterceptor } from './interceptors/logging.interceptor';\r\nimport { AppLoggerModule } from './logger/logger.module';\r\nimport { CacheService } from './services/cache.service';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\r\nexport interface SharedModuleOptions {\r\n entities?: Array<string | Function | EntitySchema>; // Entity classes or glob patterns\r\n}\r\n\r\n@Module({})\r\nexport class SharedModule {\r\n static forRoot(options: SharedModuleOptions = {}): DynamicModule {\r\n // Core package entities (always included)\r\n const coreEntities = [Settings];\r\n\r\n // Parent app entities (can be classes or glob patterns)\r\n const parentEntities = options.entities || [];\r\n\r\n // Combine both\r\n const allEntities = [...coreEntities, ...parentEntities];\r\n\r\n return {\r\n module: SharedModule,\r\n imports: [\r\n CacheModule.registerAsync({\r\n isGlobal: true,\r\n imports: [ConfigModule],\r\n useFactory: async (configService: ConfigService) => ({\r\n stores: [\r\n createKeyv({\r\n url: configService.get<string>('redis.url'),\r\n password: configService.get<string>('redis.password'),\r\n }),\r\n ],\r\n }),\r\n inject: [ConfigService],\r\n }),\r\n ConfigModule.forRoot(configModuleOptions),\r\n TypeOrmModule.forRootAsync({\r\n imports: [ConfigModule],\r\n inject: [ConfigService],\r\n useFactory: async (configService: ConfigService) => ({\r\n type: 'postgres',\r\n host: configService.get<string>('database.host'),\r\n port: configService.get<number | undefined>('database.port'),\r\n database: configService.get<string>('database.name'),\r\n username: configService.get<string>('database.user'),\r\n password: configService.get<string>('database.pass'),\r\n entities: allEntities,\r\n // Timezone configured on the Postgres server.\r\n // This is used to typecast server date/time values to JavaScript Date object and vice versa.\r\n timezone: 'Z',\r\n synchronize: false,\r\n debug: true,\r\n }),\r\n }),\r\n AppLoggerModule,\r\n SettingsModule,\r\n ],\r\n exports: [AppLoggerModule, ConfigModule, CacheService, SettingsModule],\r\n providers: [\r\n { provide: APP_INTERCEPTOR, useClass: LoggingInterceptor },\r\n {\r\n provide: APP_FILTER,\r\n useClass: AllExceptionsFilter,\r\n },\r\n CacheService,\r\n ],\r\n };\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parsePhoneNumber = void 0;
|
|
4
|
+
const parsePhoneNumber = (input) => {
|
|
5
|
+
const cleaned = input.replace(/[^\d+]/g, '');
|
|
6
|
+
const match = cleaned.match(/^(\+\d{1,3})(\d+)$/);
|
|
7
|
+
if (!match) {
|
|
8
|
+
return { code: '', phone: cleaned, full: cleaned };
|
|
9
|
+
}
|
|
10
|
+
return {
|
|
11
|
+
code: match[1],
|
|
12
|
+
phone: match[2],
|
|
13
|
+
full: cleaned,
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
exports.parsePhoneNumber = parsePhoneNumber;
|
|
17
|
+
//# sourceMappingURL=phone.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phone.util.js","sourceRoot":"","sources":["../../../../../../core/src/shared/utils/phone.util.ts"],"names":[],"mappings":";;;AAAO,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAiD,EAAE;IAE/F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAG7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IACrD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACd,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QACf,IAAI,EAAE,OAAO;KACd,CAAC;AACJ,CAAC,CAAC;AAfW,QAAA,gBAAgB,oBAe3B","sourcesContent":["export const parsePhoneNumber = (input: string): { code: string; phone: string; full: string } => {\r\n // Remove all non-digit and plus characters\r\n const cleaned = input.replace(/[^\\d+]/g, '');\r\n\r\n // Match country code (starts with +, followed by 1-3 digits)\r\n const match = cleaned.match(/^(\\+\\d{1,3})(\\d+)$/);\r\n if (!match) {\r\n return { code: '', phone: cleaned, full: cleaned };\r\n }\r\n\r\n return {\r\n code: match[1],\r\n phone: match[2],\r\n full: cleaned,\r\n };\r\n};\r\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.splitName = void 0;
|
|
4
|
+
const splitName = (name) => {
|
|
5
|
+
const nameParts = name.split(' ');
|
|
6
|
+
const firstname = nameParts[0];
|
|
7
|
+
const lastname = nameParts.slice(1).join(' ');
|
|
8
|
+
return { firstname, lastname };
|
|
9
|
+
};
|
|
10
|
+
exports.splitName = splitName;
|
|
11
|
+
//# sourceMappingURL=user.util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.util.js","sourceRoot":"","sources":["../../../../../../core/src/shared/utils/user.util.ts"],"names":[],"mappings":";;;AAAO,MAAM,SAAS,GAAG,CAAC,IAAY,EAA2C,EAAE;IACjF,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE9C,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACjC,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB","sourcesContent":["export const splitName = (name: string): { firstname: string; lastname: string } => {\r\n const nameParts = name.split(' ');\r\n const firstname = nameParts[0];\r\n const lastname = nameParts.slice(1).join(' ');\r\n\r\n return { firstname, lastname };\r\n};\r\n"]}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AppLogger, SettingsService } from 'src/core/src';
|
|
2
2
|
export declare class SlackClient {
|
|
3
3
|
private logger;
|
|
4
|
-
private
|
|
5
|
-
constructor(logger:
|
|
4
|
+
private settingsService;
|
|
5
|
+
constructor(logger: AppLogger, settingsService: SettingsService);
|
|
6
6
|
private initializeClient;
|
|
7
7
|
listChannels(): Promise<import("@slack/web-api").ConversationsListResponse>;
|
|
8
8
|
postMessage(channelId: string, text: string): Promise<import("@slack/web-api").ChatPostMessageResponse>;
|
|
@@ -8,25 +8,24 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
11
|
var SlackClient_1;
|
|
15
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
13
|
exports.SlackClient = void 0;
|
|
17
14
|
const common_1 = require("@nestjs/common");
|
|
18
15
|
const web_api_1 = require("@slack/web-api");
|
|
16
|
+
const src_1 = require("src/core/src");
|
|
17
|
+
const slack_constants_1 = require("../constants/slack.constants");
|
|
19
18
|
let SlackClient = SlackClient_1 = class SlackClient {
|
|
20
19
|
logger;
|
|
21
|
-
|
|
22
|
-
constructor(logger,
|
|
20
|
+
settingsService;
|
|
21
|
+
constructor(logger, settingsService) {
|
|
23
22
|
this.logger = logger;
|
|
24
|
-
this.
|
|
23
|
+
this.settingsService = settingsService;
|
|
25
24
|
this.logger.setContext(SlackClient_1.name);
|
|
26
25
|
}
|
|
27
26
|
async initializeClient() {
|
|
28
27
|
try {
|
|
29
|
-
const token = this.
|
|
28
|
+
const token = await this.settingsService.get(slack_constants_1.SLACK_SETTING_KEYS.CREDENTIALS_BOT_TOKEN);
|
|
30
29
|
if (!token) {
|
|
31
30
|
throw new Error('Slack bot token not configured');
|
|
32
31
|
}
|
|
@@ -87,8 +86,7 @@ let SlackClient = SlackClient_1 = class SlackClient {
|
|
|
87
86
|
exports.SlackClient = SlackClient;
|
|
88
87
|
exports.SlackClient = SlackClient = SlackClient_1 = __decorate([
|
|
89
88
|
(0, common_1.Injectable)(),
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
__metadata("design:paramtypes", [Object, String])
|
|
89
|
+
__metadata("design:paramtypes", [src_1.AppLogger,
|
|
90
|
+
src_1.SettingsService])
|
|
93
91
|
], SlackClient);
|
|
94
92
|
//# sourceMappingURL=slack.client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.client.js","sourceRoot":"","sources":["../../../clients/slack.client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slack.client.js","sourceRoot":"","sources":["../../../clients/slack.client.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,4CAA2C;AAC3C,sCAA0D;AAE1D,kEAAkE;AAG3D,IAAM,WAAW,mBAAjB,MAAM,WAAW;IAEZ;IACA;IAFV,YACU,MAAiB,EACjB,eAAgC;QADhC,WAAM,GAAN,MAAM,CAAW;QACjB,oBAAe,GAAf,eAAe,CAAiB;QAExC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,aAAW,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,oCAAkB,CAAC,qBAAqB,CAAC,CAAC;YAEvF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,mBAAS,CAAC,KAAK,CAAC,CAAC;YAEpC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAEhE,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAc,CAAC,CAAC;YAC5D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC7C,OAAO,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;YACrC,KAAK,EAAE,gCAAgC;SACxC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,IAAY;QAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC7C,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YACnC,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,IAAI;SACX,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAiB,EAAE,QAAgB,EAAE,IAAY;QACnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC7C,OAAO,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YACnC,OAAO,EAAE,SAAS;YAClB,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,QAAQ;SACpB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,SAAiB,EAAE,QAAgB;QACtE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC7C,OAAO,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;YAChC,OAAO,EAAE,SAAS;YAClB,SAAS,EAAE,SAAS;YACpB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,QAAgB,EAAE;QAC3D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC7C,OAAO,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;YACxC,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,SAAiB,EAAE,QAAgB;QACxD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC7C,OAAO,MAAM,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;YACxC,OAAO,EAAE,SAAS;YAClB,EAAE,EAAE,QAAQ;SACb,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AA3EY,kCAAW;sBAAX,WAAW;IADvB,IAAA,mBAAU,GAAE;qCAGO,eAAS;QACA,qBAAe;GAH/B,WAAW,CA2EvB","sourcesContent":["import { Injectable } from '@nestjs/common';\r\nimport { WebClient } from '@slack/web-api';\r\nimport { AppLogger, SettingsService } from 'src/core/src';\r\n\r\nimport { SLACK_SETTING_KEYS } from '../constants/slack.constants';\r\n\r\n@Injectable()\r\nexport class SlackClient {\r\n constructor(\r\n private logger: AppLogger,\r\n private settingsService: SettingsService,\r\n ) {\r\n this.logger.setContext(SlackClient.name);\r\n }\r\n\r\n private async initializeClient(): Promise<WebClient> {\r\n try {\r\n const token = await this.settingsService.get(SLACK_SETTING_KEYS.CREDENTIALS_BOT_TOKEN);\r\n\r\n if (!token) {\r\n throw new Error('Slack bot token not configured');\r\n }\r\n const client = new WebClient(token);\r\n\r\n const auth = await client.auth.test();\r\n this.logger.log(`Slack connected: ${auth.user} (${auth.team})`);\r\n\r\n return client;\r\n } catch (error) {\r\n this.logger.error('Error connecting slack', error as Error);\r\n throw error;\r\n }\r\n }\r\n\r\n async listChannels() {\r\n const client = await this.initializeClient();\r\n return await client.conversations.list({\r\n types: 'public_channel,private_channel',\r\n });\r\n }\r\n\r\n async postMessage(channelId: string, text: string) {\r\n const client = await this.initializeClient();\r\n return await client.chat.postMessage({\r\n channel: channelId,\r\n text: text,\r\n });\r\n }\r\n\r\n async replyToThread(channelId: string, threadTs: string, text: string) {\r\n const client = await this.initializeClient();\r\n return await client.chat.postMessage({\r\n channel: channelId,\r\n text: text,\r\n thread_ts: threadTs,\r\n });\r\n }\r\n\r\n async addReaction(channelId: string, timestamp: string, reaction: string) {\r\n const client = await this.initializeClient();\r\n return await client.reactions.add({\r\n channel: channelId,\r\n timestamp: timestamp,\r\n name: reaction,\r\n });\r\n }\r\n\r\n async getChannelHistory(channelId: string, limit: number = 10) {\r\n const client = await this.initializeClient();\r\n return await client.conversations.history({\r\n channel: channelId,\r\n limit: limit,\r\n });\r\n }\r\n\r\n async getThreadReplies(channelId: string, threadTs: string) {\r\n const client = await this.initializeClient();\r\n return await client.conversations.replies({\r\n channel: channelId,\r\n ts: threadTs,\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack.constants.js","sourceRoot":"","sources":["../../../constants/slack.constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,kBAAkB,GAAG;IAChC,qBAAqB,EAAE,gCAAgC;CACxD,CAAC","sourcesContent":["export const SLACK_SETTING_KEYS = {\r\n CREDENTIALS_BOT_TOKEN: 'GLOBAL:SLACK:GENERAL:BOT_TOKEN',\r\n};\r\n"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { EventEmitter2 } from '@nestjs/event-emitter';
|
|
2
|
+
import { AppLogger } from 'src/core/src';
|
|
2
3
|
import { SlackWebhookEventDto } from '../dtos/slack-webhook-event.dto';
|
|
3
|
-
import { AppLoggerConfig } from '../interfaces/slack-interface';
|
|
4
4
|
import { SlackChallengeResponse, SlackOkResponse } from '../types/slack.event.type';
|
|
5
5
|
type SlackWebhookResponse = SlackChallengeResponse | SlackOkResponse;
|
|
6
6
|
export declare class SlackWebhookController {
|
|
7
7
|
private readonly eventEmitter;
|
|
8
8
|
private logger;
|
|
9
|
-
constructor(eventEmitter: EventEmitter2, logger:
|
|
9
|
+
constructor(eventEmitter: EventEmitter2, logger: AppLogger);
|
|
10
10
|
handleWebhook(data: SlackWebhookEventDto): Promise<SlackWebhookResponse>;
|
|
11
11
|
}
|
|
12
12
|
export {};
|
|
@@ -17,6 +17,7 @@ exports.SlackWebhookController = void 0;
|
|
|
17
17
|
const common_1 = require("@nestjs/common");
|
|
18
18
|
const event_emitter_1 = require("@nestjs/event-emitter");
|
|
19
19
|
const swagger_1 = require("@nestjs/swagger");
|
|
20
|
+
const src_1 = require("src/core/src");
|
|
20
21
|
const slack_event_constant_1 = require("../constants/slack.event.constant");
|
|
21
22
|
const slack_webhook_event_dto_1 = require("../dtos/slack-webhook-event.dto");
|
|
22
23
|
let SlackWebhookController = SlackWebhookController_1 = class SlackWebhookController {
|
|
@@ -29,7 +30,6 @@ let SlackWebhookController = SlackWebhookController_1 = class SlackWebhookContro
|
|
|
29
30
|
}
|
|
30
31
|
async handleWebhook(data) {
|
|
31
32
|
this.logger.log(`Webhook ${data.type}`);
|
|
32
|
-
console.log('DATA', data);
|
|
33
33
|
if (data.type === slack_event_constant_1.SLACK_EVENTS.URL_VERIFICATION) {
|
|
34
34
|
this.logger.log(`Webhook ${data.type}`);
|
|
35
35
|
return { challenge: data.challenge };
|
|
@@ -57,7 +57,7 @@ __decorate([
|
|
|
57
57
|
exports.SlackWebhookController = SlackWebhookController = SlackWebhookController_1 = __decorate([
|
|
58
58
|
(0, swagger_1.ApiTags)('general/slack/webhook'),
|
|
59
59
|
(0, common_1.Controller)('general/slack/webhook'),
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
__metadata("design:paramtypes", [event_emitter_1.EventEmitter2,
|
|
61
|
+
src_1.AppLogger])
|
|
62
62
|
], SlackWebhookController);
|
|
63
63
|
//# sourceMappingURL=slack.webhook.controller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.webhook.controller.js","sourceRoot":"","sources":["../../../controllers/slack.webhook.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"slack.webhook.controller.js","sourceRoot":"","sources":["../../../controllers/slack.webhook.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAkE;AAClE,yDAAsD;AACtD,6CAAwD;AACxD,sCAAyC;AAEzC,4EAA6F;AAC7F,6EAAuE;AAMhE,IAAM,sBAAsB,8BAA5B,MAAM,sBAAsB;IAEd;IACT;IAFV,YACmB,YAA2B,EACpC,MAAiB;QADR,iBAAY,GAAZ,YAAY,CAAe;QACpC,WAAM,GAAN,MAAM,CAAW;QAEzB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAsB,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAKK,AAAN,KAAK,CAAC,aAAa,CAAS,IAA0B;QACpD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAExC,IAAI,IAAI,CAAC,IAAI,KAAK,mCAAY,CAAC,gBAAgB,EAAE,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACxC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAU,EAAE,CAAC;QACxC,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,mCAAY,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,mBAAmB,SAAS,cAAc,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YAE7E,IAAI,CAAC,YAAY,CAAC,IAAI,CACpB,iDAA0B,CAAC,wBAAwB,EACnD,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,EACpB,EAAE,KAAK,EAAE,IAAI,EAAE,CAChB,CAAC;YAEF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mCAAmC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;CACF,CAAA;AAnCY,wDAAsB;AAW3B;IAHL,IAAA,aAAI,GAAE;IACN,IAAA,iBAAQ,EAAC,GAAG,CAAC;IACb,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC;IACpC,WAAA,IAAA,aAAI,GAAE,CAAA;;qCAAO,8CAAoB;;2DAuBrD;iCAlCU,sBAAsB;IAFlC,IAAA,iBAAO,EAAC,uBAAuB,CAAC;IAChC,IAAA,mBAAU,EAAC,uBAAuB,CAAC;qCAGD,6BAAa;QAC5B,eAAS;GAHhB,sBAAsB,CAmClC","sourcesContent":["import { Body, Controller, HttpCode, Post } from '@nestjs/common';\r\nimport { EventEmitter2 } from '@nestjs/event-emitter';\r\nimport { ApiOperation, ApiTags } from '@nestjs/swagger';\r\nimport { AppLogger } from 'src/core/src';\r\n\r\nimport { EVENT_EMITTER_SLACK_EVENTS, SLACK_EVENTS } from '../constants/slack.event.constant';\r\nimport { SlackWebhookEventDto } from '../dtos/slack-webhook-event.dto';\r\nimport { SlackChallengeResponse, SlackOkResponse } from '../types/slack.event.type';\r\n\r\ntype SlackWebhookResponse = SlackChallengeResponse | SlackOkResponse;\r\n@ApiTags('general/slack/webhook')\r\n@Controller('general/slack/webhook')\r\nexport class SlackWebhookController {\r\n constructor(\r\n private readonly eventEmitter: EventEmitter2,\r\n private logger: AppLogger,\r\n ) {\r\n this.logger.setContext(SlackWebhookController.name);\r\n }\r\n\r\n @Post()\r\n @HttpCode(200)\r\n @ApiOperation({ summary: 'Receive webhooks from Slack' })\r\n async handleWebhook(@Body() data: SlackWebhookEventDto): Promise<SlackWebhookResponse> {\r\n this.logger.log(`Webhook ${data.type}`);\r\n\r\n if (data.type === SLACK_EVENTS.URL_VERIFICATION) {\r\n this.logger.log(`Webhook ${data.type}`);\r\n return { challenge: data.challenge! };\r\n }\r\n\r\n if (data.type === SLACK_EVENTS.EVENT_CALLBACK && data.event) {\r\n const eventType = data.event.type;\r\n this.logger.log(`Event received: ${eventType} from user ${data.event.user}`);\r\n\r\n this.eventEmitter.emit(\r\n EVENT_EMITTER_SLACK_EVENTS.WEBHOOK_INCOMING_MESSAGE,\r\n { data: data.event },\r\n { async: true },\r\n );\r\n\r\n return { ok: true };\r\n }\r\n\r\n this.logger.warn(`Type of event is not supported: ${data.type}`);\r\n return { ok: true };\r\n }\r\n}\r\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { AppLogger } from 'src/core/src';
|
|
1
2
|
import { SlackClient } from '../clients/slack.client';
|
|
2
|
-
import { AppLoggerConfig } from '../interfaces/slack-interface';
|
|
3
3
|
export declare class SlackChannelService {
|
|
4
4
|
private readonly slackClient;
|
|
5
5
|
private logger;
|
|
6
|
-
constructor(slackClient: SlackClient, logger:
|
|
6
|
+
constructor(slackClient: SlackClient, logger: AppLogger);
|
|
7
7
|
listChannels(): Promise<import("@slack/web-api").ConversationsListResponse>;
|
|
8
8
|
getChannelHistory(channelId: string, limit?: number): Promise<import("@slack/web-api").ConversationsHistoryResponse>;
|
|
9
9
|
getThreadReplies(channelId: string, threadTs: string): Promise<import("@slack/web-api").ConversationsRepliesResponse>;
|
|
@@ -8,13 +8,11 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
-
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
-
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
-
};
|
|
14
11
|
var SlackChannelService_1;
|
|
15
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
13
|
exports.SlackChannelService = void 0;
|
|
17
14
|
const common_1 = require("@nestjs/common");
|
|
15
|
+
const src_1 = require("src/core/src");
|
|
18
16
|
const slack_client_1 = require("../clients/slack.client");
|
|
19
17
|
let SlackChannelService = SlackChannelService_1 = class SlackChannelService {
|
|
20
18
|
slackClient;
|
|
@@ -55,7 +53,7 @@ let SlackChannelService = SlackChannelService_1 = class SlackChannelService {
|
|
|
55
53
|
exports.SlackChannelService = SlackChannelService;
|
|
56
54
|
exports.SlackChannelService = SlackChannelService = SlackChannelService_1 = __decorate([
|
|
57
55
|
(0, common_1.Injectable)(),
|
|
58
|
-
|
|
59
|
-
|
|
56
|
+
__metadata("design:paramtypes", [slack_client_1.SlackClient,
|
|
57
|
+
src_1.AppLogger])
|
|
60
58
|
], SlackChannelService);
|
|
61
59
|
//# sourceMappingURL=slack-channel.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack-channel.service.js","sourceRoot":"","sources":["../../../services/slack-channel.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slack-channel.service.js","sourceRoot":"","sources":["../../../services/slack-channel.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,sCAAyC;AAEzC,0DAAsD;AAG/C,IAAM,mBAAmB,2BAAzB,MAAM,mBAAmB;IAEX;IACT;IAFV,YACmB,WAAwB,EACjC,MAAiB;QADR,gBAAW,GAAX,WAAW,CAAa;QACjC,WAAM,GAAN,MAAM,CAAW;QAEzB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAmB,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAc,CAAC,CAAC;YAClE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,QAAgB,EAAE;QAC3D,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAc,CAAC,CAAC;YACzE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,SAAiB,EAAE,QAAgB;QACxD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAc,CAAC,CAAC;YACxE,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAA;AAjCY,kDAAmB;8BAAnB,mBAAmB;IAD/B,IAAA,mBAAU,GAAE;qCAGqB,0BAAW;QACzB,eAAS;GAHhB,mBAAmB,CAiC/B","sourcesContent":["import { Injectable } from '@nestjs/common';\r\nimport { AppLogger } from 'src/core/src';\r\n\r\nimport { SlackClient } from '../clients/slack.client';\r\n\r\n@Injectable()\r\nexport class SlackChannelService {\r\n constructor(\r\n private readonly slackClient: SlackClient,\r\n private logger: AppLogger,\r\n ) {\r\n this.logger.setContext(SlackChannelService.name);\r\n }\r\n\r\n async listChannels() {\r\n try {\r\n return await this.slackClient.listChannels();\r\n } catch (error) {\r\n this.logger.error('Error listing Slack channels', error as Error);\r\n throw error;\r\n }\r\n }\r\n async getChannelHistory(channelId: string, limit: number = 10) {\r\n try {\r\n return await this.slackClient.getChannelHistory(channelId, limit);\r\n } catch (error) {\r\n this.logger.error('Error getting Slack channel history', error as Error);\r\n throw error;\r\n }\r\n }\r\n\r\n async getThreadReplies(channelId: string, threadTs: string) {\r\n try {\r\n return await this.slackClient.getThreadReplies(channelId, threadTs);\r\n } catch (error) {\r\n this.logger.error('Error getting Slack thread replies', error as Error);\r\n throw error;\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
+
import { AppLogger } from 'src/core/src';
|
|
1
2
|
import { SlackClient } from '../clients/slack.client';
|
|
2
|
-
import { AppLoggerConfig } from '../interfaces/slack-interface';
|
|
3
3
|
export declare class SlackMessageService {
|
|
4
4
|
private readonly slackClient;
|
|
5
5
|
private logger;
|
|
6
|
-
constructor(slackClient: SlackClient, logger:
|
|
6
|
+
constructor(slackClient: SlackClient, logger: AppLogger);
|
|
7
7
|
sendMessage(channelId: string, text: string): Promise<import("@slack/web-api").ChatPostMessageResponse>;
|
|
8
8
|
replyToThread(channelId: string, threadTs: string, text: string): Promise<import("@slack/web-api").ChatPostMessageResponse>;
|
|
9
|
-
handleIncomingMessage(payload: any): Promise<void>;
|
|
10
9
|
}
|