@servicelabsco/slabs-access-manager 0.0.1 → 0.0.2

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.
Files changed (45) hide show
  1. package/dist/access/libraries/process.menu.details.d.ts +1 -1
  2. package/dist/access/libraries/process.menu.details.js.map +1 -1
  3. package/package.json +1 -1
  4. package/dist/access/services/menu.service.d.ts +0 -2
  5. package/dist/access/services/menu.service.js +0 -17
  6. package/dist/access/services/menu.service.js.map +0 -1
  7. package/dist/cli.d.ts +0 -1
  8. package/dist/cli.js +0 -21
  9. package/dist/cli.js.map +0 -1
  10. package/dist/common/adapters/index.d.ts +0 -1
  11. package/dist/common/adapters/index.js +0 -18
  12. package/dist/common/adapters/index.js.map +0 -1
  13. package/dist/common/adapters/redis.io.adapter.d.ts +0 -5
  14. package/dist/common/adapters/redis.io.adapter.js +0 -23
  15. package/dist/common/adapters/redis.io.adapter.js.map +0 -1
  16. package/dist/common/common.module.d.ts +0 -2
  17. package/dist/common/common.module.js +0 -23
  18. package/dist/common/common.module.js.map +0 -1
  19. package/dist/common/es6.classes.d.ts +0 -7
  20. package/dist/common/es6.classes.js +0 -10
  21. package/dist/common/es6.classes.js.map +0 -1
  22. package/dist/common/index.d.ts +0 -3
  23. package/dist/common/index.js +0 -20
  24. package/dist/common/index.js.map +0 -1
  25. package/dist/common/services/index.d.ts +0 -1
  26. package/dist/common/services/index.js +0 -18
  27. package/dist/common/services/index.js.map +0 -1
  28. package/dist/common/services/shutdown.service.d.ts +0 -7
  29. package/dist/common/services/shutdown.service.js +0 -30
  30. package/dist/common/services/shutdown.service.js.map +0 -1
  31. package/dist/migrations/1683181943286-CreateExpenseTcsTable.d.ts +0 -5
  32. package/dist/migrations/1683181943286-CreateExpenseTcsTable.js +0 -20
  33. package/dist/migrations/1683181943286-CreateExpenseTcsTable.js.map +0 -1
  34. package/dist/migrations/1683517649276-AddApplicationRolesDataSeederTable.d.ts +0 -5
  35. package/dist/migrations/1683517649276-AddApplicationRolesDataSeederTable.js +0 -56
  36. package/dist/migrations/1683517649276-AddApplicationRolesDataSeederTable.js.map +0 -1
  37. package/dist/newrelic.d.ts +0 -1
  38. package/dist/newrelic.js +0 -35
  39. package/dist/newrelic.js.map +0 -1
  40. package/dist/worker.d.ts +0 -1
  41. package/dist/worker.js +0 -17
  42. package/dist/worker.js.map +0 -1
  43. package/dist/worker.service.d.ts +0 -7
  44. package/dist/worker.service.js +0 -33
  45. package/dist/worker.service.js.map +0 -1
@@ -4,7 +4,7 @@ export declare class ProcessMenuDetails {
4
4
  private readonly accessManager;
5
5
  constructor(accessManager: AccessManager);
6
6
  process(menuId: number): Promise<MenuEntity>;
7
- hasAccess(menu: MenuEntity): Promise<boolean>;
7
+ private hasAccess;
8
8
  private hasChildMenuAccess;
9
9
  private userHasAccess;
10
10
  private getUiActions;
@@ -1 +1 @@
1
- {"version":3,"file":"process.menu.details.js","sourceRoot":"","sources":["../../../src/access/libraries/process.menu.details.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"process.menu.details.js","sourceRoot":"","sources":["../../../src/access/libraries/process.menu.details.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicelabsco/slabs-access-manager",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "Support for application level menus and dashboards",
5
5
  "author": "Hemant Kumar Sah <hemantanshu@gmail.com>",
6
6
  "license": "MIT",
@@ -1,2 +0,0 @@
1
- export declare class MenuService {
2
- }
@@ -1,17 +0,0 @@
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.MenuService = void 0;
10
- const common_1 = require("@nestjs/common");
11
- let MenuService = class MenuService {
12
- };
13
- MenuService = __decorate([
14
- (0, common_1.Injectable)()
15
- ], MenuService);
16
- exports.MenuService = MenuService;
17
- //# sourceMappingURL=menu.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu.service.js","sourceRoot":"","sources":["../../../src/access/services/menu.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAGrC,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,WAAW;IADvB,IAAA,mBAAU,GAAE;GACA,WAAW,CAAG;AAAd,kCAAW"}
package/dist/cli.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/dist/cli.js DELETED
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@nestjs/core");
4
- const nestjs_command_1 = require("nestjs-command");
5
- const app_module_1 = require("./app.module");
6
- async function bootstrap() {
7
- const app = await core_1.NestFactory.createApplicationContext(app_module_1.AppModule, {
8
- logger: ['log', 'warn', 'error'],
9
- });
10
- try {
11
- await app.select(nestjs_command_1.CommandModule).get(nestjs_command_1.CommandService).exec();
12
- await app.close();
13
- }
14
- catch (error) {
15
- global.console.error(error);
16
- await app.close();
17
- process.exit(1);
18
- }
19
- }
20
- bootstrap();
21
- //# sourceMappingURL=cli.js.map
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,mDAA+D;AAC/D,6CAAyC;AAEzC,KAAK,UAAU,SAAS;IACpB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,wBAAwB,CAAC,sBAAS,EAAE;QAC9D,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;KACnC,CAAC,CAAC;IAEH,IAAI;QACA,MAAM,GAAG,CAAC,MAAM,CAAC,8BAAa,CAAC,CAAC,GAAG,CAAC,+BAAc,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;KACrB;IAAC,OAAO,KAAK,EAAE;QACZ,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;AACL,CAAC;AACD,SAAS,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- export * from './redis.io.adapter';
@@ -1,18 +0,0 @@
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("./redis.io.adapter"), exports);
18
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/adapters/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC"}
@@ -1,5 +0,0 @@
1
- import { IoAdapter } from '@nestjs/platform-socket.io';
2
- import { ServerOptions } from 'socket.io';
3
- export declare class RedisIoAdapter extends IoAdapter {
4
- createIOServer(port: number, options?: ServerOptions): any;
5
- }
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RedisIoAdapter = void 0;
4
- const platform_socket_io_1 = require("@nestjs/platform-socket.io");
5
- const redis_adapter_1 = require("@socket.io/redis-adapter");
6
- const config = require("config");
7
- const redis_1 = require("redis");
8
- const redis = config.get('redis');
9
- const host = process.env.REDIS_HOST || redis.host;
10
- const redisPort = process.env.REDIS_PORT || redis.port;
11
- const prefix = process.env.REDIS_SLUG || redis.slug;
12
- const pubClient = new redis_1.RedisClient({ host, port: redisPort, prefix });
13
- const subClient = pubClient.duplicate();
14
- const redisAdapter = (0, redis_adapter_1.createAdapter)(pubClient, subClient);
15
- class RedisIoAdapter extends platform_socket_io_1.IoAdapter {
16
- createIOServer(port, options) {
17
- const server = super.createIOServer(port, options);
18
- server.adapter(redisAdapter);
19
- return server;
20
- }
21
- }
22
- exports.RedisIoAdapter = RedisIoAdapter;
23
- //# sourceMappingURL=redis.io.adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"redis.io.adapter.js","sourceRoot":"","sources":["../../../src/common/adapters/redis.io.adapter.ts"],"names":[],"mappings":";;;AAAA,mEAAuD;AACvD,4DAAyD;AACzD,iCAAiC;AACjC,iCAAoC;AAGpC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAElC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC;AACvD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,CAAC;AAEpD,MAAM,SAAS,GAAG,IAAI,mBAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;AACrE,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,EAAE,CAAC;AACxC,MAAM,YAAY,GAAG,IAAA,6BAAa,EAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAQzD,MAAa,cAAe,SAAQ,8BAAS;IAQzC,cAAc,CAAC,IAAY,EAAE,OAAuB;QAChD,MAAM,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAbD,wCAaC"}
@@ -1,2 +0,0 @@
1
- export declare class CommonModule {
2
- }
@@ -1,23 +0,0 @@
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.CommonModule = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
12
- const es6_classes_1 = require("./es6.classes");
13
- let CommonModule = class CommonModule {
14
- };
15
- CommonModule = __decorate([
16
- (0, common_1.Module)({
17
- imports: [nestjs_utility_services_1.PlatformUtilityModule],
18
- providers: [...es6_classes_1.default.services],
19
- exports: [...es6_classes_1.default.services],
20
- })
21
- ], CommonModule);
22
- exports.CommonModule = CommonModule;
23
- //# sourceMappingURL=common.module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.module.js","sourceRoot":"","sources":["../../src/common/common.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,oFAA+E;AAC/E,+CAAuC;AAOhC,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,YAAY;IALxB,IAAA,eAAM,EAAC;QACJ,OAAO,EAAE,CAAC,+CAAqB,CAAC;QAChC,SAAS,EAAE,CAAC,GAAG,qBAAU,CAAC,QAAQ,CAAC;QACnC,OAAO,EAAE,CAAC,GAAG,qBAAU,CAAC,QAAQ,CAAC;KACpC,CAAC;GACW,YAAY,CAAG;AAAf,oCAAY"}
@@ -1,7 +0,0 @@
1
- import { RedisIoAdapter } from './adapters/redis.io.adapter';
2
- import { ShutdownService } from './services/shutdown.service';
3
- declare const es6Classes: {
4
- adapters: (typeof RedisIoAdapter)[];
5
- services: (typeof ShutdownService)[];
6
- };
7
- export default es6Classes;
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const redis_io_adapter_1 = require("./adapters/redis.io.adapter");
4
- const shutdown_service_1 = require("./services/shutdown.service");
5
- const es6Classes = {
6
- adapters: [redis_io_adapter_1.RedisIoAdapter],
7
- services: [shutdown_service_1.ShutdownService],
8
- };
9
- exports.default = es6Classes;
10
- //# sourceMappingURL=es6.classes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"es6.classes.js","sourceRoot":"","sources":["../../src/common/es6.classes.ts"],"names":[],"mappings":";;AAAA,kEAA6D;AAC7D,kEAA8D;AAE9D,MAAM,UAAU,GAAG;IACf,QAAQ,EAAE,CAAC,iCAAc,CAAC;IAC1B,QAAQ,EAAE,CAAC,kCAAe,CAAC;CAC9B,CAAC;AAEF,kBAAe,UAAU,CAAC"}
@@ -1,3 +0,0 @@
1
- export * from './adapters';
2
- export * from './services';
3
- export * from './common.module';
@@ -1,20 +0,0 @@
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("./adapters"), exports);
18
- __exportStar(require("./services"), exports);
19
- __exportStar(require("./common.module"), exports);
20
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,6CAA2B;AAC3B,kDAAgC"}
@@ -1 +0,0 @@
1
- export * from './shutdown.service';
@@ -1,18 +0,0 @@
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("./shutdown.service"), exports);
18
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC"}
@@ -1,7 +0,0 @@
1
- import { OnModuleDestroy } from '@nestjs/common';
2
- export declare class ShutdownService implements OnModuleDestroy {
3
- private shutdownListener$;
4
- onModuleDestroy(): void;
5
- subscribeToShutdown(shutdownFn: () => void): void;
6
- shutdown(): void;
7
- }
@@ -1,30 +0,0 @@
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.ShutdownService = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const rxjs_1 = require("rxjs");
12
- let ShutdownService = class ShutdownService {
13
- constructor() {
14
- this.shutdownListener$ = new rxjs_1.Subject();
15
- }
16
- onModuleDestroy() {
17
- global.console.log(`Executing onDestroy Hook`);
18
- }
19
- subscribeToShutdown(shutdownFn) {
20
- this.shutdownListener$.subscribe(() => shutdownFn());
21
- }
22
- shutdown() {
23
- this.shutdownListener$.next();
24
- }
25
- };
26
- ShutdownService = __decorate([
27
- (0, common_1.Injectable)()
28
- ], ShutdownService);
29
- exports.ShutdownService = ShutdownService;
30
- //# sourceMappingURL=shutdown.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shutdown.service.js","sourceRoot":"","sources":["../../../src/common/services/shutdown.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA6D;AAC7D,+BAA+B;AAGxB,IAAM,eAAe,GAArB,MAAM,eAAe;IAArB;QAEK,sBAAiB,GAAkB,IAAI,cAAO,EAAE,CAAC;IAe7D,CAAC;IAbG,eAAe;QACX,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACnD,CAAC;IAGD,mBAAmB,CAAC,UAAsB;QACtC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;IACzD,CAAC;IAGD,QAAQ;QACJ,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;CACJ,CAAA;AAjBY,eAAe;IAD3B,IAAA,mBAAU,GAAE;GACA,eAAe,CAiB3B;AAjBY,0CAAe"}
@@ -1,5 +0,0 @@
1
- import { MigrationUtility } from '@servicelabsco/nestjs-utility-services';
2
- export declare class CreateExpenseTcsTable1683181943286 extends MigrationUtility {
3
- constructor();
4
- process(): void;
5
- }
@@ -1,20 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CreateExpenseTcsTable1683181943286 = void 0;
4
- const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
5
- class CreateExpenseTcsTable1683181943286 extends nestjs_utility_services_1.MigrationUtility {
6
- constructor() {
7
- super('exp_tcs_details');
8
- this.process();
9
- }
10
- process() {
11
- this.primary();
12
- this.foreign({ name: 'expense_id', foreignTable: 'exp_expense_details' });
13
- this.float('percentage', 5, 2);
14
- this.float('amount', 20, 3);
15
- this.json('attributes');
16
- this.whoColumns();
17
- }
18
- }
19
- exports.CreateExpenseTcsTable1683181943286 = CreateExpenseTcsTable1683181943286;
20
- //# sourceMappingURL=1683181943286-CreateExpenseTcsTable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1683181943286-CreateExpenseTcsTable.js","sourceRoot":"","sources":["../../src/migrations/1683181943286-CreateExpenseTcsTable.ts"],"names":[],"mappings":";;;AAAA,oFAA0E;AAE1E,MAAa,kCAAmC,SAAQ,0CAAgB;IACpE;QACI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,OAAO;QACH,IAAI,CAAC,OAAO,EAAE,CAAC;QAEf,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,CAAC,CAAC;QAE1E,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,EAAE,CAAC;IACtB,CAAC;CACJ;AAjBD,gFAiBC"}
@@ -1,5 +0,0 @@
1
- import { SeederUtility } from '@servicelabsco/nestjs-utility-services';
2
- export declare class AddApplicationRolesDataSeederTable1683517649276 extends SeederUtility {
3
- constructor();
4
- process(): void;
5
- }
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AddApplicationRolesDataSeederTable1683517649276 = void 0;
4
- const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
5
- class AddApplicationRolesDataSeederTable1683517649276 extends nestjs_utility_services_1.SeederUtility {
6
- constructor() {
7
- super('sys_roles');
8
- this.process();
9
- }
10
- process() {
11
- const roles = [
12
- 'Vendor Manager',
13
- 'Vendor Viewer',
14
- 'Vendor Expense Manager',
15
- 'Department Manager',
16
- 'Department Viewer',
17
- 'Designation Manager',
18
- 'Designation Viewer',
19
- 'Business Manager',
20
- 'Business Viewer',
21
- 'Employee Manager',
22
- 'Employee Viewer',
23
- 'Bank Manager',
24
- 'Bank Viewer',
25
- 'Invitation Manager',
26
- 'Payment Manager',
27
- 'Payment Viewer',
28
- 'Configuration Manager',
29
- 'Configuration Viewer',
30
- 'Expense Head Manager',
31
- 'Expense Head Viewer',
32
- 'Approval Manager',
33
- 'Approval Viewer',
34
- 'Expense Manager',
35
- 'Expense Viewer',
36
- 'Expense Payment Releaser',
37
- 'Approval Workflow Overrider',
38
- 'Expense Payment Overrider',
39
- 'Report Manager',
40
- 'User Manager',
41
- 'Employee',
42
- ];
43
- let id = 100;
44
- for (const role of roles) {
45
- const record = {
46
- id: ++id,
47
- name: role,
48
- identifier: `ua_${role.toLowerCase().replaceAll(' ', '_')}`,
49
- weight: id,
50
- };
51
- this.addRecord(record);
52
- }
53
- }
54
- }
55
- exports.AddApplicationRolesDataSeederTable1683517649276 = AddApplicationRolesDataSeederTable1683517649276;
56
- //# sourceMappingURL=1683517649276-AddApplicationRolesDataSeederTable.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"1683517649276-AddApplicationRolesDataSeederTable.js","sourceRoot":"","sources":["../../src/migrations/1683517649276-AddApplicationRolesDataSeederTable.ts"],"names":[],"mappings":";;;AAAA,oFAAuE;AAEvE,MAAa,+CAAgD,SAAQ,uCAAa;IAC9E;QACI,KAAK,CAAC,WAAW,CAAC,CAAC;QACnB,IAAI,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;IAED,OAAO;QACH,MAAM,KAAK,GAAG;YACV,gBAAgB;YAChB,eAAe;YACf,wBAAwB;YACxB,oBAAoB;YACpB,mBAAmB;YACnB,qBAAqB;YACrB,oBAAoB;YACpB,kBAAkB;YAClB,iBAAiB;YACjB,kBAAkB;YAClB,iBAAiB;YACjB,cAAc;YACd,aAAa;YACb,oBAAoB;YACpB,iBAAiB;YACjB,gBAAgB;YAChB,uBAAuB;YACvB,sBAAsB;YACtB,sBAAsB;YACtB,qBAAqB;YACrB,kBAAkB;YAClB,iBAAiB;YACjB,iBAAiB;YACjB,gBAAgB;YAChB,0BAA0B;YAC1B,6BAA6B;YAC7B,2BAA2B;YAC3B,gBAAgB;YAChB,cAAc;YACd,UAAU;SACb,CAAC;QAEF,IAAI,EAAE,GAAG,GAAG,CAAC;QACb,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,MAAM,MAAM,GAAG;gBACX,EAAE,EAAE,EAAE,EAAE;gBACR,IAAI,EAAE,IAAI;gBACV,UAAU,EAAE,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;gBAC3D,MAAM,EAAE,EAAE;aACb,CAAC;YAEF,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SAC1B;IACL,CAAC;CACJ;AApDD,0GAoDC"}
@@ -1 +0,0 @@
1
- export {};
package/dist/newrelic.js DELETED
@@ -1,35 +0,0 @@
1
- 'use strict';
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const common_1 = require("@nestjs/common");
4
- const config = require("config");
5
- const key = config.get('newrelic.key');
6
- const name = config.get('newrelic.name') || 'shopkhata api';
7
- exports.config = {
8
- app_name: [name],
9
- license_key: key,
10
- distributed_tracing: {
11
- enabled: true,
12
- },
13
- logging: {
14
- level: 'info',
15
- },
16
- allow_all_headers: true,
17
- error_collector: {
18
- ignore_status_codes: [common_1.HttpStatus.UNAUTHORIZED, common_1.HttpStatus.FORBIDDEN, common_1.HttpStatus.NOT_FOUND],
19
- },
20
- attributes: {
21
- exclude: [
22
- 'request.headers.cookie',
23
- 'request.headers.authorization',
24
- 'request.headers.proxyAuthorization',
25
- 'request.headers.setCookie*',
26
- 'request.headers.x*',
27
- 'response.headers.cookie',
28
- 'response.headers.authorization',
29
- 'response.headers.proxyAuthorization',
30
- 'response.headers.setCookie*',
31
- 'response.headers.x*',
32
- ],
33
- },
34
- };
35
- //# sourceMappingURL=newrelic.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"newrelic.js","sourceRoot":"","sources":["../src/newrelic.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,2CAA4C;AAC5C,iCAAiC;AAEjC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACvC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC;AAO5D,OAAO,CAAC,MAAM,GAAG;IAIb,QAAQ,EAAE,CAAC,IAAI,CAAC;IAIhB,WAAW,EAAE,GAAG;IAShB,mBAAmB,EAAE;QAMjB,OAAO,EAAE,IAAI;KAChB;IACD,OAAO,EAAE;QAML,KAAK,EAAE,MAAM;KAChB;IAMD,iBAAiB,EAAE,IAAI;IAKvB,eAAe,EAAE;QACb,mBAAmB,EAAE,CAAC,mBAAU,CAAC,YAAY,EAAE,mBAAU,CAAC,SAAS,EAAE,mBAAU,CAAC,SAAS,CAAC;KAC7F;IACD,UAAU,EAAE;QASR,OAAO,EAAE;YACL,wBAAwB;YACxB,+BAA+B;YAC/B,oCAAoC;YACpC,4BAA4B;YAC5B,oBAAoB;YACpB,yBAAyB;YACzB,gCAAgC;YAChC,qCAAqC;YACrC,6BAA6B;YAC7B,qBAAqB;SACxB;KACJ;CACJ,CAAC"}
package/dist/worker.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/dist/worker.js DELETED
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@nestjs/core");
4
- const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
5
- const app_module_1 = require("./app.module");
6
- require('source-map-support').install();
7
- async function bootstrap() {
8
- const app = await core_1.NestFactory.create(app_module_1.AppModule);
9
- app.get(nestjs_utility_services_1.ShutdownService).subscribeToShutdown(() => {
10
- app.close().then(() => {
11
- process.exit(1);
12
- });
13
- });
14
- app.init();
15
- }
16
- bootstrap();
17
- //# sourceMappingURL=worker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":";;AAAA,uCAA2C;AAC3C,oFAAyE;AACzE,6CAAyC;AAGzC,OAAO,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC;AAExC,KAAK,UAAU,SAAS;IACpB,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAAC,sBAAS,CAAC,CAAC;IAIhD,GAAG,CAAC,GAAG,CAAC,yCAAe,CAAC,CAAC,mBAAmB,CAAC,GAAG,EAAE;QAC9C,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,EAAE,CAAC;AACf,CAAC;AAED,SAAS,EAAE,CAAC"}
@@ -1,7 +0,0 @@
1
- import { OnModuleInit } from '@nestjs/common';
2
- import { QueueService } from '@servicelabsco/nestjs-utility-services';
3
- export declare class WorkerService implements OnModuleInit {
4
- private readonly queueService;
5
- constructor(queueService: QueueService);
6
- onModuleInit(): Promise<void>;
7
- }
@@ -1,33 +0,0 @@
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.WorkerService = void 0;
13
- const common_1 = require("@nestjs/common");
14
- const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
15
- const config = require("config");
16
- let WorkerService = class WorkerService {
17
- constructor(queueService) {
18
- this.queueService = queueService;
19
- }
20
- async onModuleInit() {
21
- const worker = process.env.QUEUE_WORKER_ENABLE || config.get('queue.worker');
22
- if (!worker) {
23
- global.console.log(`queue services are disabled for this instance`);
24
- await this.queueService.pause();
25
- }
26
- }
27
- };
28
- WorkerService = __decorate([
29
- (0, common_1.Injectable)(),
30
- __metadata("design:paramtypes", [nestjs_utility_services_1.QueueService])
31
- ], WorkerService);
32
- exports.WorkerService = WorkerService;
33
- //# sourceMappingURL=worker.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker.service.js","sourceRoot":"","sources":["../src/worker.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA0D;AAC1D,oFAAsE;AAEtE,iCAAiC;AAG1B,IAAM,aAAa,GAAnB,MAAM,aAAa;IACtB,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAE3D,KAAK,CAAC,YAAY;QACd,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;YACpE,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;SACnC;IACL,CAAC;CACJ,CAAA;AAVY,aAAa;IADzB,IAAA,mBAAU,GAAE;qCAEkC,sCAAY;GAD9C,aAAa,CAUzB;AAVY,sCAAa"}