@scefira/dfw 1.2.1 → 1.2.3

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 (126) hide show
  1. package/dist/index.d.ts +4 -2
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +7 -4
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/APIListener.d.ts +70 -0
  6. package/dist/lib/APIListener.d.ts.map +1 -0
  7. package/dist/lib/APIListener.js +16 -0
  8. package/dist/lib/APIListener.js.map +1 -0
  9. package/dist/lib/APIManager.d.ts +2 -3
  10. package/dist/lib/APIManager.d.ts.map +1 -1
  11. package/dist/lib/APIManager.js +54 -46
  12. package/dist/lib/APIManager.js.map +1 -1
  13. package/dist/lib/DFWCore.d.ts +9 -9
  14. package/dist/lib/DFWCore.d.ts.map +1 -1
  15. package/dist/lib/DFWCore.js +21 -44
  16. package/dist/lib/DFWCore.js.map +1 -1
  17. package/dist/lib/{DFWRepository.d.ts → DFWModule.d.ts} +10 -3
  18. package/dist/lib/DFWModule.d.ts.map +1 -0
  19. package/dist/lib/{DFWRepository.js → DFWModule.js} +13 -10
  20. package/dist/lib/DFWModule.js.map +1 -0
  21. package/dist/lib/DFWService.d.ts +17 -0
  22. package/dist/lib/DFWService.d.ts.map +1 -0
  23. package/dist/lib/DFWService.js +22 -0
  24. package/dist/lib/DFWService.js.map +1 -0
  25. package/dist/lib/DFWSessionStore.d.ts.map +1 -1
  26. package/dist/lib/DFWSessionStore.js +12 -6
  27. package/dist/lib/DFWSessionStore.js.map +1 -1
  28. package/dist/lib/DFWUtils.d.ts +4 -3
  29. package/dist/lib/DFWUtils.d.ts.map +1 -1
  30. package/dist/lib/DFWUtils.js +5 -4
  31. package/dist/lib/DFWUtils.js.map +1 -1
  32. package/dist/listeners/DELETEListener.d.ts +6 -2
  33. package/dist/listeners/DELETEListener.d.ts.map +1 -1
  34. package/dist/listeners/DELETEListener.js +4 -6
  35. package/dist/listeners/DELETEListener.js.map +1 -1
  36. package/dist/listeners/GETListener.d.ts +6 -2
  37. package/dist/listeners/GETListener.d.ts.map +1 -1
  38. package/dist/listeners/GETListener.js +4 -6
  39. package/dist/listeners/GETListener.js.map +1 -1
  40. package/dist/listeners/PATCHListener.d.ts +6 -2
  41. package/dist/listeners/PATCHListener.d.ts.map +1 -1
  42. package/dist/listeners/PATCHListener.js +4 -6
  43. package/dist/listeners/PATCHListener.js.map +1 -1
  44. package/dist/listeners/POSTListener.d.ts +6 -2
  45. package/dist/listeners/POSTListener.d.ts.map +1 -1
  46. package/dist/listeners/POSTListener.js +4 -6
  47. package/dist/listeners/POSTListener.js.map +1 -1
  48. package/dist/listeners/PUTListener.d.ts +6 -2
  49. package/dist/listeners/PUTListener.d.ts.map +1 -1
  50. package/dist/listeners/PUTListener.js +4 -6
  51. package/dist/listeners/PUTListener.js.map +1 -1
  52. package/dist/listeners/RawListener.d.ts +1 -1
  53. package/dist/listeners/RawListener.d.ts.map +1 -1
  54. package/dist/listeners/RawListener.js +2 -5
  55. package/dist/listeners/RawListener.js.map +1 -1
  56. package/dist/listeners/StaticPathListener.d.ts +3 -3
  57. package/dist/listeners/StaticPathListener.d.ts.map +1 -1
  58. package/dist/listeners/StaticPathListener.js +17 -7
  59. package/dist/listeners/StaticPathListener.js.map +1 -1
  60. package/dist/listeners/auth/DFWAuthListener.d.ts +2 -2
  61. package/dist/listeners/auth/DFWAuthListener.d.ts.map +1 -1
  62. package/dist/listeners/auth/DFWAuthListener.js +9 -14
  63. package/dist/listeners/auth/DFWAuthListener.js.map +1 -1
  64. package/dist/listeners/index.d.ts.map +1 -1
  65. package/dist/listeners/index.js.map +1 -1
  66. package/dist/{repositories/file.repository.d.ts → modules/DFWFileModule.d.ts} +5 -5
  67. package/dist/modules/DFWFileModule.d.ts.map +1 -0
  68. package/dist/{repositories/file.repository.js → modules/DFWFileModule.js} +4 -4
  69. package/dist/modules/DFWFileModule.js.map +1 -0
  70. package/dist/modules/DFWSecurityModule.d.ts +35 -0
  71. package/dist/modules/DFWSecurityModule.d.ts.map +1 -0
  72. package/dist/{repositories/security.repository.js → modules/DFWSecurityModule.js} +25 -4
  73. package/dist/modules/DFWSecurityModule.js.map +1 -0
  74. package/dist/modules/SessionModule.d.ts +11 -0
  75. package/dist/modules/SessionModule.d.ts.map +1 -0
  76. package/dist/{repositories/session.repository.js → modules/SessionModule.js} +19 -6
  77. package/dist/modules/SessionModule.js.map +1 -0
  78. package/dist/modules/UserModule.d.ts +24 -0
  79. package/dist/modules/UserModule.d.ts.map +1 -0
  80. package/dist/{repositories/user.repository.js → modules/UserModule.js} +10 -10
  81. package/dist/modules/UserModule.js.map +1 -0
  82. package/dist/modules/index.d.ts +5 -0
  83. package/dist/modules/index.d.ts.map +1 -0
  84. package/dist/modules/index.js +15 -0
  85. package/dist/modules/index.js.map +1 -0
  86. package/dist/strategies/DFWPassportStrategy.d.ts.map +1 -0
  87. package/dist/{lib/strategies → strategies}/DFWPassportStrategy.js +4 -4
  88. package/dist/strategies/DFWPassportStrategy.js.map +1 -0
  89. package/dist/test.d.ts +22 -1
  90. package/dist/test.d.ts.map +1 -1
  91. package/dist/test.js +175 -82
  92. package/dist/test.js.map +1 -1
  93. package/dist/types/DFWConfig.d.ts +3 -5
  94. package/dist/types/DFWConfig.d.ts.map +1 -1
  95. package/dist/types/DFWRequest.d.ts +14 -15
  96. package/dist/types/DFWRequest.d.ts.map +1 -1
  97. package/dist/types/index.d.ts +0 -1
  98. package/dist/types/index.d.ts.map +1 -1
  99. package/dist/types/index.js +0 -1
  100. package/dist/types/index.js.map +1 -1
  101. package/package.json +4 -3
  102. package/prisma/schema/dfw.prisma +6 -6
  103. package/dist/lib/DFWRepository.d.ts.map +0 -1
  104. package/dist/lib/DFWRepository.js.map +0 -1
  105. package/dist/lib/strategies/DFWPassportStrategy.d.ts.map +0 -1
  106. package/dist/lib/strategies/DFWPassportStrategy.js.map +0 -1
  107. package/dist/repositories/file.repository.d.ts.map +0 -1
  108. package/dist/repositories/file.repository.js.map +0 -1
  109. package/dist/repositories/index.d.ts +0 -5
  110. package/dist/repositories/index.d.ts.map +0 -1
  111. package/dist/repositories/index.js +0 -15
  112. package/dist/repositories/index.js.map +0 -1
  113. package/dist/repositories/security.repository.d.ts +0 -26
  114. package/dist/repositories/security.repository.d.ts.map +0 -1
  115. package/dist/repositories/security.repository.js.map +0 -1
  116. package/dist/repositories/session.repository.d.ts +0 -8
  117. package/dist/repositories/session.repository.d.ts.map +0 -1
  118. package/dist/repositories/session.repository.js.map +0 -1
  119. package/dist/repositories/user.repository.d.ts +0 -22
  120. package/dist/repositories/user.repository.d.ts.map +0 -1
  121. package/dist/repositories/user.repository.js.map +0 -1
  122. package/dist/types/APIListener.d.ts +0 -56
  123. package/dist/types/APIListener.d.ts.map +0 -1
  124. package/dist/types/APIListener.js +0 -3
  125. package/dist/types/APIListener.js.map +0 -1
  126. /package/dist/{lib/strategies → strategies}/DFWPassportStrategy.d.ts +0 -0
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- const DFWRepository_1 = __importDefault(require("../lib/DFWRepository"));
15
+ const DFWModule_1 = __importDefault(require("../lib/DFWModule"));
16
16
  const util_1 = require("util");
17
17
  const client_1 = require("@prisma/client");
18
18
  const luxon_1 = require("luxon");
@@ -20,7 +20,7 @@ const path_1 = __importDefault(require("path"));
20
20
  const DFWUtils_1 = __importDefault(require("../lib/DFWUtils"));
21
21
  const fs_1 = __importDefault(require("fs"));
22
22
  const __1 = require("..");
23
- class DFWFileRepository extends DFWRepository_1.default {
23
+ class DFWFileModule extends DFWModule_1.default {
24
24
  saveUploadedFileAsync(file_1, _a) {
25
25
  return __awaiter(this, arguments, void 0, function* (file, { name, expire, idParent, variant, makeUrl }) {
26
26
  const filePath = luxon_1.DateTime.now().toFormat("yyyy/MM");
@@ -51,5 +51,5 @@ class DFWFileRepository extends DFWRepository_1.default {
51
51
  return path_1.default.join(this.DFW.tmpDir, `${DFWUtils_1.default.uuid()}${posfix !== null && posfix !== void 0 ? posfix : ""}`);
52
52
  }
53
53
  }
54
- exports.default = DFWFileRepository;
55
- //# sourceMappingURL=file.repository.js.map
54
+ exports.default = DFWFileModule;
55
+ //# sourceMappingURL=DFWFileModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DFWFileModule.js","sourceRoot":"","sources":["../../src/modules/DFWFileModule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,iEAAyC;AACzC,+BAAiC;AAEjC,2CAAkD;AAClD,iCAAiC;AACjC,gDAAwB;AACxB,+DAAuC;AACvC,4CAAoB;AACpB,0BAA6B;AAU7B,MAAM,aAAc,SAAQ,mBAAS;IAE3B,qBAAqB;6DAAC,IAAkB,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAmB;YACzG,MAAM,QAAQ,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;YACnD,MAAM,QAAQ,GAAG,kBAAQ,CAAC,IAAI,EAAE,CAAA;YAChC,MAAM,GAAG,GAAG,cAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnC,MAAM,SAAS,GAAG,GAAG,WAAO,CAAC,cAAc,IAAI,QAAQ,EAAE,CAAA;YACzD,MAAM,aAAa,GAAG,GAAG,SAAS,IAAI,QAAQ,GAAG,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,EAAE,EAAE,CAAA;YAC5D,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAEpC,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAE5C,MAAM,SAAS,CAAC,aAAa,CAAC,CAAA;YAE9B,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC3B,IAAI,EAAE;oBACF,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,IAAI,CAAC,IAAI;oBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,QAAQ,EAAE,IAAI,CAAC,GAAG;oBAClB,GAAG,EAAE,OAAO,CAAC,GAAG,QAAQ,IAAI,QAAQ,GAAG,GAAG,aAAH,GAAG,cAAH,GAAG,GAAI,EAAE,EAAE,CAAC;oBACnD,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,yBAAgB,CAAC,KAAK;oBAC/B,MAAM;oBACN,QAAQ;oBACR,OAAO;iBACV;aACJ,CAAC,CAAA;QACN,CAAC;KAAA;IAED,oBAAoB,CAAC,MAAe;QAChC,OAAO,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,kBAAQ,CAAC,IAAI,EAAE,GAAG,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;CACJ;AAED,kBAAe,aAAa,CAAA"}
@@ -0,0 +1,35 @@
1
+ import { dfw_credential, dfw_user } from "@prisma/client";
2
+ import DFWModule from "../lib/DFWModule";
3
+ declare class DFWSecurityModule extends DFWModule {
4
+ createCredentiaAsync(name: string, description?: string): Promise<{
5
+ name: string;
6
+ description: string | null;
7
+ createdAt: Date;
8
+ updatedAt: Date;
9
+ }>;
10
+ createAccessAsync(name: string, description?: string): Promise<{
11
+ name: string;
12
+ description: string | null;
13
+ createdAt: Date;
14
+ updatedAt: Date;
15
+ }>;
16
+ attachUserToCredentialAsync(user: string | {
17
+ id: string;
18
+ }, credential: dfw_credential | string | (dfw_credential | string)[]): any;
19
+ attachAccessToCredentialAsync(access: string | {
20
+ name: string;
21
+ }, credential: {
22
+ name: string;
23
+ } | string): Promise<{
24
+ name: string;
25
+ description: string | null;
26
+ createdAt: Date;
27
+ updatedAt: Date;
28
+ } | never[]>;
29
+ userHasCredentialAsync(userSource: string | {
30
+ id: string;
31
+ }, credential: string): Promise<boolean>;
32
+ userHasAccessAsync(userSource: string | Partial<dfw_user>, access: string): Promise<boolean>;
33
+ }
34
+ export default DFWSecurityModule;
35
+ //# sourceMappingURL=DFWSecurityModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DFWSecurityModule.d.ts","sourceRoot":"","sources":["../../src/modules/DFWSecurityModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,cAAc,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,SAAS,MAAM,kBAAkB,CAAC;AAEzC,cAAM,iBAAkB,SAAQ,SAAS;IAE/B,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;;;;;;IAIvD,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;;;;;;IAIpD,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,EAAE,cAAc,GAAG,MAAM,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,EAAE;IAgC5H,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;;;;;;IAoBtG,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,EAAE,MAAM;IAoB9E,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM;CAqBlF;AAED,eAAe,iBAAiB,CAAA"}
@@ -12,8 +12,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- const DFWRepository_1 = __importDefault(require("../lib/DFWRepository"));
16
- class DFWSecurityRepository extends DFWRepository_1.default {
15
+ const DFWModule_1 = __importDefault(require("../lib/DFWModule"));
16
+ class DFWSecurityModule extends DFWModule_1.default {
17
17
  createCredentiaAsync(name, description) {
18
18
  return __awaiter(this, void 0, void 0, function* () {
19
19
  return this.db.dfw_credential.create({ data: { name, description } });
@@ -99,6 +99,27 @@ class DFWSecurityRepository extends DFWRepository_1.default {
99
99
  return !!user;
100
100
  });
101
101
  }
102
+ userHasAccessAsync(userSource, access) {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ const idUser = typeof userSource === 'object' ? userSource.id : userSource;
105
+ const user = yield this.db.dfw_user.findUnique({
106
+ select: { id: true },
107
+ where: {
108
+ id: idUser,
109
+ credentials: {
110
+ some: {
111
+ access: {
112
+ some: {
113
+ name: access
114
+ }
115
+ }
116
+ }
117
+ }
118
+ }
119
+ });
120
+ return !!user;
121
+ });
122
+ }
102
123
  }
103
- exports.default = DFWSecurityRepository;
104
- //# sourceMappingURL=security.repository.js.map
124
+ exports.default = DFWSecurityModule;
125
+ //# sourceMappingURL=DFWSecurityModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DFWSecurityModule.js","sourceRoot":"","sources":["../../src/modules/DFWSecurityModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { DFWRequest } from "../types/DFWRequest";
2
+ import DFWModule from "../lib/DFWModule";
3
+ declare class DFWSessionModule extends DFWModule {
4
+ updateSessionAgentAsync({ dfw, sessionID, ip, socket, headers }: DFWRequest): Promise<void | import(".prisma/client").Prisma.BatchPayload>;
5
+ loginAsync(req: DFWRequest, user: {
6
+ id: string;
7
+ }): Promise<void>;
8
+ logoutAsync(req: DFWRequest): Promise<void>;
9
+ }
10
+ export default DFWSessionModule;
11
+ //# sourceMappingURL=SessionModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionModule.d.ts","sourceRoot":"","sources":["../../src/modules/SessionModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,SAAS,MAAM,kBAAkB,CAAC;AAEzC,cAAM,gBAAiB,SAAQ,SAAS;IAE9B,uBAAuB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,UAAU;IAc3E,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;IAWhD,WAAW,CAAC,GAAG,EAAE,UAAU;CAUpC;AAED,eAAe,gBAAgB,CAAA"}
@@ -12,8 +12,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- const DFWRepository_1 = __importDefault(require("../lib/DFWRepository"));
16
- class DFWSessionRepository extends DFWRepository_1.default {
15
+ const DFWModule_1 = __importDefault(require("../lib/DFWModule"));
16
+ class DFWSessionModule extends DFWModule_1.default {
17
17
  updateSessionAgentAsync(_a) {
18
18
  return __awaiter(this, arguments, void 0, function* ({ dfw, sessionID, ip, socket, headers }) {
19
19
  var _b;
@@ -30,13 +30,26 @@ class DFWSessionRepository extends DFWRepository_1.default {
30
30
  }
31
31
  });
32
32
  }
33
+ loginAsync(req, user) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ return new Promise((resolve, reject) => {
36
+ req.login(user, (err) => {
37
+ if (err)
38
+ return reject(err);
39
+ req.session['passport'] = { user: user.id };
40
+ req.user = { id: user.id };
41
+ resolve();
42
+ });
43
+ });
44
+ });
45
+ }
33
46
  logoutAsync(req) {
34
47
  return __awaiter(this, void 0, void 0, function* () {
35
48
  return new Promise((resolve) => {
36
49
  req.logout((err) => {
37
- console.log('passport logout', err);
38
50
  req.session.destroy((err) => {
39
- console.log('session destroyed', err);
51
+ if (process.env.NODE_ENV === 'development')
52
+ console.log('session destroyed', err);
40
53
  resolve();
41
54
  });
42
55
  });
@@ -44,5 +57,5 @@ class DFWSessionRepository extends DFWRepository_1.default {
44
57
  });
45
58
  }
46
59
  }
47
- exports.default = DFWSessionRepository;
48
- //# sourceMappingURL=session.repository.js.map
60
+ exports.default = DFWSessionModule;
61
+ //# sourceMappingURL=SessionModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionModule.js","sourceRoot":"","sources":["../../src/modules/SessionModule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,iEAAyC;AAEzC,MAAM,gBAAiB,SAAQ,mBAAS;IAE9B,uBAAuB;6DAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAc;;YAC7E,IAAI,SAAS,EAAE,CAAC;gBACZ,OAAO,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;oBACjC,IAAI,EAAE;wBACF,EAAE,EAAE,EAAE,aAAF,EAAE,cAAF,EAAE,GAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,aAAa;wBAC/B,KAAK,EAAE,MAAA,OAAO,CAAC,YAAY,CAAC,mCAAI,IAAI;qBACvC;oBACD,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE;iBAC3B,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBAClB,CAAC,CAAC,CAAA;YACN,CAAC;QACL,CAAC;KAAA;IAEK,UAAU,CAAC,GAAe,EAAE,IAAoB;;YAClD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACzC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACpB,IAAI,GAAG;wBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAA;oBAC3B,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;oBAC3C,GAAG,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAA;oBAC1B,OAAO,EAAE,CAAA;gBACb,CAAC,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;QACN,CAAC;KAAA;IAEK,WAAW,CAAC,GAAe;;YAC7B,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACjC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;oBACf,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;wBACxB,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;4BAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAA;wBACjF,OAAO,EAAE,CAAA;oBACb,CAAC,CAAC,CAAA;gBACN,CAAC,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;QACN,CAAC;KAAA;CACJ;AAED,kBAAe,gBAAgB,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { dfw_credential } from "@prisma/client";
2
+ import DFWModule from "../lib/DFWModule";
3
+ declare class DFWUserModule extends DFWModule {
4
+ verifyPasswordAsync(identifier: string, password: any): Promise<string | false | null>;
5
+ createUserAsync({ password, ...params }: {
6
+ [key: string]: any;
7
+ name?: string;
8
+ email?: string;
9
+ password: string;
10
+ }): Promise<{
11
+ name: string | null;
12
+ id: string;
13
+ email: string | null;
14
+ displayName: string | null;
15
+ encodedKey: string | null;
16
+ createdAt: Date;
17
+ updatedAt: Date;
18
+ }>;
19
+ assignCredentialAsync(user: string | {
20
+ id: string;
21
+ }, credential: dfw_credential | string | (dfw_credential | string)[]): Promise<dfw_credential[]>;
22
+ }
23
+ export default DFWUserModule;
24
+ //# sourceMappingURL=UserModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserModule.d.ts","sourceRoot":"","sources":["../../src/modules/UserModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAY,MAAM,gBAAgB,CAAC;AAE1D,OAAO,SAAS,MAAM,kBAAkB,CAAC;AAGzC,cAAM,aAAc,SAAQ,SAAS;IAE3B,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG;IAyBrD,eAAe,CAAC,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;;;;;;;;;IAShH,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,EAAE,cAAc,GAAG,MAAM,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAI3J;AAED,eAAe,aAAa,CAAA"}
@@ -24,10 +24,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
26
  const DFWUtils_1 = __importDefault(require("../lib/DFWUtils"));
27
- const DFWRepository_1 = __importDefault(require("../lib/DFWRepository"));
28
- const security_repository_1 = __importDefault(require("./security.repository"));
29
- class DFWUserRepository extends DFWRepository_1.default {
30
- validateUserPasswordAsync(identifier, password) {
27
+ const DFWModule_1 = __importDefault(require("../lib/DFWModule"));
28
+ const DFWSecurityModule_1 = __importDefault(require("./DFWSecurityModule"));
29
+ class DFWUserModule extends DFWModule_1.default {
30
+ verifyPasswordAsync(identifier, password) {
31
31
  return __awaiter(this, void 0, void 0, function* () {
32
32
  const isEmail = DFWUtils_1.default.isEmail(identifier);
33
33
  const name = isEmail ? undefined : identifier;
@@ -44,7 +44,7 @@ class DFWUserRepository extends DFWRepository_1.default {
44
44
  });
45
45
  if (!user || !user.encodedKey)
46
46
  return null;
47
- const check = yield DFWUtils_1.default.verifyPassword(user.encodedKey, password);
47
+ const check = yield DFWUtils_1.default.verifyPasswordAsync(user.encodedKey, password);
48
48
  if (!check)
49
49
  return false;
50
50
  return user.id;
@@ -54,16 +54,16 @@ class DFWUserRepository extends DFWRepository_1.default {
54
54
  return __awaiter(this, void 0, void 0, function* () {
55
55
  var { password } = _a, params = __rest(_a, ["password"]);
56
56
  return this.db.dfw_user.create({
57
- data: Object.assign(Object.assign({}, params), { encodedKey: password ? yield DFWUtils_1.default.encryptPassword(password) : undefined })
57
+ data: Object.assign(Object.assign({}, params), { encodedKey: password ? yield DFWUtils_1.default.encryptPasswordAsync(password) : undefined })
58
58
  });
59
59
  });
60
60
  }
61
61
  assignCredentialAsync(user, credential) {
62
62
  return __awaiter(this, void 0, void 0, function* () {
63
- const SecurityControl = new security_repository_1.default().use(this.db);
64
- return SecurityControl.attachUserToCredentialAsync(user, credential);
63
+ const { attachUserToCredentialAsync } = new DFWSecurityModule_1.default(this.db);
64
+ return attachUserToCredentialAsync(user, credential);
65
65
  });
66
66
  }
67
67
  }
68
- exports.default = DFWUserRepository;
69
- //# sourceMappingURL=user.repository.js.map
68
+ exports.default = DFWUserModule;
69
+ //# sourceMappingURL=UserModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserModule.js","sourceRoot":"","sources":["../../src/modules/UserModule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA,+DAAuC;AACvC,iEAAyC;AACzC,4EAAoD;AAEpD,MAAM,aAAc,SAAQ,mBAAS;IAE3B,mBAAmB,CAAC,UAAkB,EAAE,QAAa;;YACvD,MAAM,OAAO,GAAG,kBAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;YAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAA;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAA;YAE9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAC3C,MAAM,EAAE;oBACJ,EAAE,EAAE,IAAI;oBACR,UAAU,EAAE,IAAI;iBACnB;gBACD,KAAK,EAAE;oBACH,IAAI;oBACJ,KAAK;iBACR;aACJ,CAAC,CAAA;YAEF,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAA;YAE1C,MAAM,KAAK,GAAG,MAAM,kBAAQ,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;YAE3E,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAA;YAExB,OAAO,IAAI,CAAC,EAAE,CAAA;QAClB,CAAC;KAAA;IAEK,eAAe,CAAC,EAAgG;;gBAAhG,EAAE,QAAQ,OAAsF,EAAjF,MAAM,cAArB,YAAuB,CAAF;YACvC,OAAO,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC3B,IAAI,kCACG,MAAM,KACT,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,kBAAQ,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,GACnF;aACJ,CAAC,CAAA;QACN,CAAC;KAAA;IAEK,qBAAqB,CAAC,IAA6B,EAAE,UAAiE;;YACxH,MAAM,EAAE,2BAA2B,EAAE,GAAG,IAAI,2BAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACtE,OAAO,2BAA2B,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;QACzD,CAAC;KAAA;CACJ;AAED,kBAAe,aAAa,CAAA"}
@@ -0,0 +1,5 @@
1
+ export { default as DFWSecurityModule } from './DFWSecurityModule';
2
+ export { default as DFWSessionModule } from './SessionModule';
3
+ export { default as DFWUserModule } from './UserModule';
4
+ export { default as DFWFileModule } from './DFWFileModule';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DFWFileModule = exports.DFWUserModule = exports.DFWSessionModule = exports.DFWSecurityModule = void 0;
7
+ var DFWSecurityModule_1 = require("./DFWSecurityModule");
8
+ Object.defineProperty(exports, "DFWSecurityModule", { enumerable: true, get: function () { return __importDefault(DFWSecurityModule_1).default; } });
9
+ var SessionModule_1 = require("./SessionModule");
10
+ Object.defineProperty(exports, "DFWSessionModule", { enumerable: true, get: function () { return __importDefault(SessionModule_1).default; } });
11
+ var UserModule_1 = require("./UserModule");
12
+ Object.defineProperty(exports, "DFWUserModule", { enumerable: true, get: function () { return __importDefault(UserModule_1).default; } });
13
+ var DFWFileModule_1 = require("./DFWFileModule");
14
+ Object.defineProperty(exports, "DFWFileModule", { enumerable: true, get: function () { return __importDefault(DFWFileModule_1).default; } });
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/modules/index.ts"],"names":[],"mappings":";;;;;;AAAA,yDAAkE;AAAzD,uIAAA,OAAO,OAAqB;AACrC,iDAA6D;AAApD,kIAAA,OAAO,OAAoB;AACpC,2CAAuD;AAA9C,4HAAA,OAAO,OAAiB;AACjC,iDAA0D;AAAjD,+HAAA,OAAO,OAAiB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DFWPassportStrategy.d.ts","sourceRoot":"","sources":["../../src/strategies/DFWPassportStrategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAIzC,QAAA,MAAM,mBAAmB,UAevB,CAAA;AAEF,eAAe,mBAAmB,CAAA"}
@@ -13,12 +13,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const passport_local_1 = require("passport-local");
16
- const user_repository_1 = __importDefault(require("../../repositories/user.repository"));
17
- const DFWUtils_1 = __importDefault(require("../DFWUtils"));
16
+ const UserModule_1 = __importDefault(require("../modules/UserModule"));
17
+ const DFWUtils_1 = __importDefault(require("../lib/DFWUtils"));
18
18
  const DFWPassportStrategy = new passport_local_1.Strategy((identifier, password, done) => __awaiter(void 0, void 0, void 0, function* () {
19
19
  try {
20
- const UserControl = new user_repository_1.default();
21
- const id = yield UserControl.validateUserPasswordAsync(identifier, password);
20
+ const UserControl = new UserModule_1.default();
21
+ const id = yield UserControl.verifyPasswordAsync(identifier, password);
22
22
  if (id) {
23
23
  return done(null, { id });
24
24
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DFWPassportStrategy.js","sourceRoot":"","sources":["../../src/strategies/DFWPassportStrategy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,mDAAyC;AACzC,uEAAiD;AACjD,+DAAsC;AAEtC,MAAM,mBAAmB,GAAG,IAAI,yBAAQ,CAAC,CAAO,UAAkB,EAAE,QAAa,EAAE,IAAI,EAAE,EAAE;IACvF,IAAI,CAAC;QACD,MAAM,WAAW,GAAG,IAAI,oBAAa,EAAE,CAAA;QACvC,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;QAEtE,IAAI,EAAE,EAAE,CAAC;YACL,OAAO,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;QAC7B,CAAC;aAAM,CAAC;YACJ,MAAM,kBAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;YAC/B,OAAO,IAAI,CAAC,eAAe,CAAC,CAAA;QAChC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACT,MAAM,kBAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAC/B,OAAO,IAAI,CAAC,CAAC,CAAC,CAAA;IAClB,CAAC;AACL,CAAC,CAAA,CAAC,CAAA;AAEF,kBAAe,mBAAmB,CAAA"}
package/dist/test.d.ts CHANGED
@@ -1,2 +1,23 @@
1
- export {};
1
+ import { DFWService } from ".";
2
+ import z from "zod";
3
+ export declare class DFWSessionService extends DFWService {
4
+ readonly namespace: "session";
5
+ test(userDto: any): Promise<{
6
+ name: string | null;
7
+ id: string;
8
+ email: string | null;
9
+ displayName: string | null;
10
+ encodedKey: string | null;
11
+ createdAt: Date;
12
+ updatedAt: Date;
13
+ }>;
14
+ trans: (userDto: any) => Promise<any>;
15
+ }
16
+ export declare const emailSchema: z.ZodObject<{
17
+ email: z.ZodString;
18
+ }, "strip", z.ZodTypeAny, {
19
+ email: string;
20
+ }, {
21
+ email: string;
22
+ }>;
2
23
  //# sourceMappingURL=test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,UAAU,EAIb,MAAM,GAAG,CAAC;AACX,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,qBAAa,iBAAkB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,SAAS,EAAG,SAAS,CAAU;IAExC,IAAI,CAAC,OAAO,EAAE,GAAG;;;;;;;;;IAOjB,KAAK,YAAa,GAAG,kBAGnB;CAEL;AASD,eAAO,MAAM,WAAW;;;;;;EAKtB,CAAC"}