@flink-app/management-api-plugin 2.0.0-alpha.55 → 2.0.0-alpha.57

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 (107) hide show
  1. package/.flink/generatedAgents.ts +1 -1
  2. package/.flink/generatedHandlers.ts +2 -2
  3. package/.flink/generatedJobs.ts +1 -1
  4. package/.flink/generatedRepos.ts +1 -1
  5. package/.flink/generatedTools.ts +1 -1
  6. package/.flink/schema-cache.json +347 -0
  7. package/.flink/schemas/schemas.json +293 -113
  8. package/.flink/start.ts +1 -1
  9. package/CHANGELOG.md +25 -0
  10. package/dist/.flink/generatedAgents.js +13 -6
  11. package/dist/.flink/generatedAgents.js.map +1 -0
  12. package/dist/.flink/generatedHandlers.js +83 -32
  13. package/dist/.flink/generatedHandlers.js.map +1 -0
  14. package/dist/.flink/generatedJobs.js +13 -6
  15. package/dist/.flink/generatedJobs.js.map +1 -0
  16. package/dist/.flink/generatedRepos.js +25 -10
  17. package/dist/.flink/generatedRepos.js.map +1 -0
  18. package/dist/.flink/generatedTools.js +13 -6
  19. package/dist/.flink/generatedTools.js.map +1 -0
  20. package/dist/.flink/schema-manifest.json +297 -0
  21. package/dist/.flink/schemas/schemas.d.ts +10 -10
  22. package/dist/.flink/schemas/schemas.json +293 -113
  23. package/dist/.flink/start.js +12 -3
  24. package/dist/.flink/start.js.map +1 -0
  25. package/dist/.tsbuildinfo +1 -0
  26. package/dist/src/Ctx.js +3 -1
  27. package/dist/src/Ctx.js.map +1 -0
  28. package/dist/src/handlers/Management/GetManagement.d.ts +1 -1
  29. package/dist/src/handlers/Management/GetManagement.js +14 -47
  30. package/dist/src/handlers/Management/GetManagement.js.map +1 -0
  31. package/dist/src/handlers/User/DeleteByUserid.d.ts +1 -2
  32. package/dist/src/handlers/User/DeleteByUserid.js +29 -60
  33. package/dist/src/handlers/User/DeleteByUserid.js.map +1 -0
  34. package/dist/src/handlers/User/GetByUserid.d.ts +1 -2
  35. package/dist/src/handlers/User/GetByUserid.js +30 -61
  36. package/dist/src/handlers/User/GetByUserid.js.map +1 -0
  37. package/dist/src/handlers/User/GetList.d.ts +1 -1
  38. package/dist/src/handlers/User/GetList.js +19 -58
  39. package/dist/src/handlers/User/GetList.js.map +1 -0
  40. package/dist/src/handlers/User/GetMe.d.ts +1 -1
  41. package/dist/src/handlers/User/GetMe.js +67 -74
  42. package/dist/src/handlers/User/GetMe.js.map +1 -0
  43. package/dist/src/handlers/User/Post.d.ts +1 -2
  44. package/dist/src/handlers/User/Post.js +43 -79
  45. package/dist/src/handlers/User/Post.js.map +1 -0
  46. package/dist/src/handlers/User/PostLogin.d.ts +1 -2
  47. package/dist/src/handlers/User/PostLogin.js +47 -78
  48. package/dist/src/handlers/User/PostLogin.js.map +1 -0
  49. package/dist/src/handlers/User/PutByUserid.d.ts +1 -2
  50. package/dist/src/handlers/User/PutByUserid.js +47 -86
  51. package/dist/src/handlers/User/PutByUserid.js.map +1 -0
  52. package/dist/src/index.js +185 -117
  53. package/dist/src/index.js.map +1 -0
  54. package/dist/src/managementApiContext.js +3 -1
  55. package/dist/src/managementApiContext.js.map +1 -0
  56. package/dist/src/models/ManagementApi.js +12 -5
  57. package/dist/src/models/ManagementApi.js.map +1 -0
  58. package/dist/src/repos/ManagementUserRepo.js +12 -24
  59. package/dist/src/repos/ManagementUserRepo.js.map +1 -0
  60. package/dist/src/schemas/Management/GetReq.js +3 -1
  61. package/dist/src/schemas/Management/GetReq.js.map +1 -0
  62. package/dist/src/schemas/Management/GetRes.js +3 -1
  63. package/dist/src/schemas/Management/GetRes.js.map +1 -0
  64. package/dist/src/schemas/ManagementUser.js +3 -1
  65. package/dist/src/schemas/ManagementUser.js.map +1 -0
  66. package/dist/src/schemas/ManagementUserViewModel.js +49 -15
  67. package/dist/src/schemas/ManagementUserViewModel.js.map +1 -0
  68. package/dist/src/schemas/ModuleList.js +3 -1
  69. package/dist/src/schemas/ModuleList.js.map +1 -0
  70. package/dist/src/schemas/User/DeleteByUseridReq.js +3 -1
  71. package/dist/src/schemas/User/DeleteByUseridReq.js.map +1 -0
  72. package/dist/src/schemas/User/DeleteByUseridRes.js +3 -1
  73. package/dist/src/schemas/User/DeleteByUseridRes.js.map +1 -0
  74. package/dist/src/schemas/User/GetByUseridReq.js +3 -1
  75. package/dist/src/schemas/User/GetByUseridReq.js.map +1 -0
  76. package/dist/src/schemas/User/GetByUseridRes.js +3 -1
  77. package/dist/src/schemas/User/GetByUseridRes.js.map +1 -0
  78. package/dist/src/schemas/User/GetListReq.js +3 -1
  79. package/dist/src/schemas/User/GetListReq.js.map +1 -0
  80. package/dist/src/schemas/User/GetListRes.js +3 -1
  81. package/dist/src/schemas/User/GetListRes.js.map +1 -0
  82. package/dist/src/schemas/User/GetMeReq.js +3 -1
  83. package/dist/src/schemas/User/GetMeReq.js.map +1 -0
  84. package/dist/src/schemas/User/GetMeRes.js +3 -1
  85. package/dist/src/schemas/User/GetMeRes.js.map +1 -0
  86. package/dist/src/schemas/User/PostLoginReq.js +3 -1
  87. package/dist/src/schemas/User/PostLoginReq.js.map +1 -0
  88. package/dist/src/schemas/User/PostLoginRes.js +3 -1
  89. package/dist/src/schemas/User/PostLoginRes.js.map +1 -0
  90. package/dist/src/schemas/User/PostReq.js +3 -1
  91. package/dist/src/schemas/User/PostReq.js.map +1 -0
  92. package/dist/src/schemas/User/PostRes.js +3 -1
  93. package/dist/src/schemas/User/PostRes.js.map +1 -0
  94. package/dist/src/schemas/User/PutByUseridReq.js +3 -1
  95. package/dist/src/schemas/User/PutByUseridReq.js.map +1 -0
  96. package/dist/src/schemas/User/PutByUseridRes.js +3 -1
  97. package/dist/src/schemas/User/PutByUseridRes.js.map +1 -0
  98. package/dist/src/utils/bcrypt.js +30 -17
  99. package/dist/src/utils/bcrypt.js.map +1 -0
  100. package/package.json +3 -3
  101. package/src/handlers/User/DeleteByUserid.ts +11 -17
  102. package/src/handlers/User/GetByUserid.ts +7 -8
  103. package/src/handlers/User/GetMe.ts +15 -21
  104. package/src/handlers/User/PostLogin.ts +14 -24
  105. package/src/handlers/User/PutByUserid.ts +20 -30
  106. package/src/index.ts +26 -4
  107. package/.flink/schemas/schemas.ts +0 -31
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,2 +1,4 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":""}
@@ -1,26 +1,39 @@
1
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.encrypt = encrypt;
7
- exports.genSalt = genSalt;
8
- var bcrypt_1 = __importDefault(require("bcrypt"));
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get encrypt () {
13
+ return encrypt;
14
+ },
15
+ get genSalt () {
16
+ return genSalt;
17
+ }
18
+ });
19
+ const _bcrypt = /*#__PURE__*/ _interop_require_default(require("bcrypt"));
20
+ function _interop_require_default(obj) {
21
+ return obj && obj.__esModule ? obj : {
22
+ default: obj
23
+ };
24
+ }
9
25
  function encrypt(password, salt) {
10
- return new Promise(function (resolve, reject) {
11
- bcrypt_1.default.hash(password, salt, function (err, hash) {
12
- if (err)
13
- reject(err);
26
+ return new Promise((resolve, reject)=>{
27
+ _bcrypt.default.hash(password, salt, (err, hash)=>{
28
+ if (err) reject(err);
14
29
  resolve(hash);
15
30
  });
16
31
  });
17
32
  }
18
- function genSalt(rounds) {
19
- if (rounds === void 0) { rounds = 10; }
20
- return new Promise(function (resolve, reject) {
21
- bcrypt_1.default.genSalt(rounds, function (err, salt) {
22
- if (err)
23
- reject(err);
33
+ function genSalt(rounds = 10) {
34
+ return new Promise((resolve, reject)=>{
35
+ _bcrypt.default.genSalt(rounds, (err, salt)=>{
36
+ if (err) reject(err);
24
37
  resolve(salt);
25
38
  });
26
39
  });
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/joel/projects/flink/flink-framework/packages/management-api-plugin/src/utils/bcrypt.ts"],"sourcesContent":["import bcrypt from \"bcrypt\";\n\nexport function encrypt(password: string, salt: string) {\n return new Promise<string>((resolve, reject) => {\n bcrypt.hash(password, salt, (err, hash) => {\n if (err) reject(err);\n resolve(hash);\n });\n });\n}\n\nexport function genSalt(rounds = 10) {\n return new Promise<string>((resolve, reject) => {\n bcrypt.genSalt(rounds, (err, salt) => {\n if (err) reject(err);\n resolve(salt);\n });\n });\n}\n"],"names":["encrypt","genSalt","password","salt","Promise","resolve","reject","bcrypt","hash","err","rounds"],"mappings":";;;;;;;;;;;QAEgBA;eAAAA;;QASAC;eAAAA;;;+DAXG;;;;;;AAEZ,SAASD,QAAQE,QAAgB,EAAEC,IAAY;IACpD,OAAO,IAAIC,QAAgB,CAACC,SAASC;QACnCC,eAAM,CAACC,IAAI,CAACN,UAAUC,MAAM,CAACM,KAAKD;YAChC,IAAIC,KAAKH,OAAOG;YAChBJ,QAAQG;QACV;IACF;AACF;AAEO,SAASP,QAAQS,SAAS,EAAE;IACjC,OAAO,IAAIN,QAAgB,CAACC,SAASC;QACnCC,eAAM,CAACN,OAAO,CAACS,QAAQ,CAACD,KAAKN;YAC3B,IAAIM,KAAKH,OAAOG;YAChBJ,QAAQF;QACV;IACF;AACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flink-app/management-api-plugin",
3
- "version": "2.0.0-alpha.55",
3
+ "version": "2.0.0-alpha.57",
4
4
  "description": "Flink plugin that makes it possible to expose management api:s for other plugins",
5
5
  "author": "johan@frost.se",
6
6
  "publishConfig": {
@@ -12,7 +12,7 @@
12
12
  "dependencies": {
13
13
  "bcrypt": "^5.0.1",
14
14
  "jsonwebtoken": "^8.5.1",
15
- "@flink-app/flink": "2.0.0-alpha.55"
15
+ "@flink-app/flink": "2.0.0-alpha.57"
16
16
  },
17
17
  "devDependencies": {
18
18
  "@types/bcrypt": "^5.0.0",
@@ -23,7 +23,7 @@
23
23
  },
24
24
  "gitHead": "4243e3b3cd6d4e1ca001a61baa8436bf2bbe4113",
25
25
  "peerDependencies": {
26
- "@flink-app/flink": ">=2.0.0-alpha.55"
26
+ "@flink-app/flink": ">=2.0.0-alpha.57"
27
27
  },
28
28
  "scripts": {
29
29
  "test": "echo \"Error: no test specified\"",
@@ -4,28 +4,22 @@ import { DeleteUserByUseridReq } from "../../schemas/User/DeleteByUseridReq";
4
4
  import { DeleteUserByUseridRes } from "../../schemas/User/DeleteByUseridRes";
5
5
 
6
6
  export const Route: RouteProps = {
7
- path: "/user/:userid",
8
- method: HttpMethod.delete,
7
+ path: "/user/:userid",
8
+ method: HttpMethod.delete,
9
9
  };
10
10
 
11
11
  // type Params = {
12
12
  // userid: string;
13
13
  // };
14
14
 
15
- const DeleteUserByUserid: Handler<
16
- Ctx,
17
- DeleteUserByUseridReq,
18
- DeleteUserByUseridRes
19
- > = async ({ ctx, req }) => {
20
- const count = await ctx.repos.managementuserRepo.deleteById(
21
- req.params.userid
22
- );
23
- if (count == 0) {
24
- return notFound();
25
- }
26
- return {
27
- data: {},
28
- status: 200,
29
- };
15
+ const DeleteUserByUserid: Handler<Ctx, DeleteUserByUseridReq, DeleteUserByUseridRes> = async ({ ctx, req }) => {
16
+ const count = await ctx.repos.managementuserRepo.deleteById(req.params.userid);
17
+ if (count == 0) {
18
+ return notFound();
19
+ }
20
+ return {
21
+ data: {},
22
+ status: 200,
23
+ };
30
24
  };
31
25
  export default DeleteUserByUserid;
@@ -4,23 +4,22 @@ import { GetUserByUseridRes } from "../../schemas/User/GetByUseridRes";
4
4
  import { Ctx } from "../../Ctx";
5
5
  import { GetManagementUserViewModel } from "../../schemas/ManagementUserViewModel";
6
6
  export const Route: RouteProps = {
7
- path: "/user/:userid",
8
- method: HttpMethod.get,
7
+ path: "/user/:userid",
8
+ method: HttpMethod.get,
9
9
  };
10
10
 
11
11
  // type Params = {
12
12
  // userid: string;
13
13
  // };
14
14
 
15
- const GetUserByUserid: Handler<Ctx, GetUserByUseridReq, GetUserByUseridRes> =
16
- async ({ ctx, req }) => {
15
+ const GetUserByUserid: Handler<Ctx, GetUserByUseridReq, GetUserByUseridRes> = async ({ ctx, req }) => {
17
16
  const user = await ctx.repos.managementuserRepo.getById(req.params.userid);
18
17
  if (user == null) {
19
- return notFound();
18
+ return notFound();
20
19
  }
21
20
  return {
22
- data: GetManagementUserViewModel(user),
23
- status: 200,
21
+ data: GetManagementUserViewModel(user),
22
+ status: 200,
24
23
  };
25
- };
24
+ };
26
25
  export default GetUserByUserid;
@@ -6,24 +6,18 @@ import jsonwebtoken from "jsonwebtoken";
6
6
  import { ManagementUserViewModel } from "../../schemas/ManagementUserViewModel";
7
7
 
8
8
  const GetUserMe: Handler<Ctx, GetUserMeReq, GetUserMeRes> = async ({ ctx, req }) => {
9
-
10
- try{
11
- const user = jsonwebtoken.verify(<string>req.headers["management-token"], ctx.plugins.managementApi.jwtSecret) as any;
12
- const { iat, ...rest } = user;
13
- return {
14
- data: {
15
- token : <string>req.headers["management-token"],
16
- user : rest
17
- },
18
- status : 200
19
- };
20
- }catch(ex){
21
- return unauthorized();
22
- }
23
-
24
-
25
-
26
-
27
-
28
- }
29
- export default GetUserMe;
9
+ try {
10
+ const user = jsonwebtoken.verify(<string>req.headers["management-token"], ctx.plugins.managementApi.jwtSecret) as any;
11
+ const { iat, ...rest } = user;
12
+ return {
13
+ data: {
14
+ token: <string>req.headers["management-token"],
15
+ user: rest,
16
+ },
17
+ status: 200,
18
+ };
19
+ } catch (ex) {
20
+ return unauthorized();
21
+ }
22
+ };
23
+ export default GetUserMe;
@@ -1,9 +1,4 @@
1
- import {
2
- Handler,
3
- HttpMethod,
4
- RouteProps,
5
- unauthorized,
6
- } from "@flink-app/flink";
1
+ import { Handler, HttpMethod, RouteProps, unauthorized } from "@flink-app/flink";
7
2
  import jsonwebtoken from "jsonwebtoken";
8
3
  import { Ctx } from "../../Ctx";
9
4
  import { GetManagementUserViewModel } from "../../schemas/ManagementUserViewModel";
@@ -12,40 +7,35 @@ import { PostUserLoginRes } from "../../schemas/User/PostLoginRes";
12
7
  import { encrypt } from "../../utils/bcrypt";
13
8
 
14
9
  export const Route: RouteProps = {
15
- path: "/user/login",
16
- method: HttpMethod.post,
10
+ path: "/user/login",
11
+ method: HttpMethod.post,
17
12
  };
18
13
 
19
14
  type Params = {};
20
15
 
21
- const PostUserLogin: Handler<Ctx, PostUserLoginReq, PostUserLoginRes, Params> =
22
- async ({ ctx, req }) => {
23
-
16
+ const PostUserLogin: Handler<Ctx, PostUserLoginReq, PostUserLoginRes, Params> = async ({ ctx, req }) => {
24
17
  const user = await ctx.repos.managementuserRepo.getOne({
25
- username: req.body.username,
18
+ username: req.body.username,
26
19
  });
27
20
  if (user == null) {
28
- return unauthorized("Username or password invalid");
21
+ return unauthorized("Username or password invalid");
29
22
  }
30
23
 
31
24
  const hashCandidate = await encrypt(req.body.password, user.salt);
32
25
  if (hashCandidate !== user.password) {
33
- return unauthorized("Username or password invalid");
26
+ return unauthorized("Username or password invalid");
34
27
  }
35
28
 
36
29
  const viewUser = GetManagementUserViewModel(user);
37
30
 
38
- const token = jsonwebtoken.sign(
39
- viewUser,
40
- ctx.plugins.managementApi.jwtSecret
41
- );
31
+ const token = jsonwebtoken.sign(viewUser, ctx.plugins.managementApi.jwtSecret);
42
32
 
43
33
  return {
44
- data: {
45
- user: viewUser,
46
- token,
47
- },
48
- status: 200,
34
+ data: {
35
+ user: viewUser,
36
+ token,
37
+ },
38
+ status: 200,
49
39
  };
50
- };
40
+ };
51
41
  export default PostUserLogin;
@@ -1,10 +1,4 @@
1
- import {
2
- conflict,
3
- Handler,
4
- HttpMethod,
5
- notFound,
6
- RouteProps,
7
- } from "@flink-app/flink";
1
+ import { conflict, Handler, HttpMethod, notFound, RouteProps } from "@flink-app/flink";
8
2
  import { Ctx } from "../../Ctx";
9
3
  import { ManagementUser } from "../../schemas/ManagementUser";
10
4
  import { GetManagementUserViewModel } from "../../schemas/ManagementUserViewModel";
@@ -13,47 +7,43 @@ import { PutUserByUseridRes } from "../../schemas/User/PutByUseridRes";
13
7
  import { encrypt, genSalt } from "../../utils/bcrypt";
14
8
 
15
9
  export const Route: RouteProps = {
16
- path: "/user/:userid",
17
- method: HttpMethod.put,
10
+ path: "/user/:userid",
11
+ method: HttpMethod.put,
18
12
  };
19
13
 
20
14
  // type Params = {
21
15
  // userid: string;
22
16
  // };
23
17
 
24
- const PutUserByUserid: Handler<Ctx, PutUserByUseridReq, PutUserByUseridRes> =
25
- async ({ ctx, req }) => {
18
+ const PutUserByUserid: Handler<Ctx, PutUserByUseridReq, PutUserByUseridRes> = async ({ ctx, req }) => {
26
19
  var model: Partial<ManagementUser> = req.body;
27
20
 
28
21
  if (model.username != null) {
29
- const existingUser = await ctx.repos.managementuserRepo.getOne({
30
- username: model.username,
31
- });
32
- if (existingUser != null) {
33
- if (existingUser._id != req.params.userid) {
34
- return conflict("Username already taken");
22
+ const existingUser = await ctx.repos.managementuserRepo.getOne({
23
+ username: model.username,
24
+ });
25
+ if (existingUser != null) {
26
+ if (existingUser._id != req.params.userid) {
27
+ return conflict("Username already taken");
28
+ }
35
29
  }
36
- }
37
30
  }
38
31
 
39
32
  if (model.password != null) {
40
- const salt = await genSalt(10);
41
- const hash = await encrypt(model.password, salt);
33
+ const salt = await genSalt(10);
34
+ const hash = await encrypt(model.password, salt);
42
35
 
43
- model.password = hash;
44
- model.salt = salt;
36
+ model.password = hash;
37
+ model.salt = salt;
45
38
  }
46
39
 
47
- const updated = await ctx.repos.managementuserRepo.updateOne(
48
- req.params.userid,
49
- model
50
- );
40
+ const updated = await ctx.repos.managementuserRepo.updateOne(req.params.userid, model);
51
41
  if (updated == null) {
52
- return notFound();
42
+ return notFound();
53
43
  }
54
44
  return {
55
- data: GetManagementUserViewModel(updated),
56
- status: 200,
45
+ data: GetManagementUserViewModel(updated),
46
+ status: 200,
57
47
  };
58
- };
48
+ };
59
49
  export default PutUserByUserid;
package/src/index.ts CHANGED
@@ -3,6 +3,7 @@ import {
3
3
  FlinkPlugin,
4
4
  HttpMethod,
5
5
  unauthorized,
6
+ loadPluginSchemas,
6
7
  } from "@flink-app/flink";
7
8
  import jsonwebtoken from "jsonwebtoken";
8
9
  import * as GetManagement from "./handlers/Management/GetManagement";
@@ -23,9 +24,14 @@ import { Module, ModuleList } from "./schemas/ModuleList";
23
24
 
24
25
  export * from "./models/ManagementApi";
25
26
 
27
+ const PLUGIN_ID = "managementApi";
28
+
26
29
  export const managementApiPlugin = (
27
30
  options: ManagementApiOptions
28
31
  ): FlinkPlugin => {
32
+ const pluginSchemas = loadPluginSchemas("@flink-app/management-api-plugin");
33
+ const schemas = (filePath: string) => pluginSchemas.getHandlerSchemas(PLUGIN_ID, filePath);
34
+
29
35
  let managementApiModule: ManagementApiModule = {
30
36
  id: "managementapiuser",
31
37
  type: ManagementApiType.managementUser,
@@ -45,6 +51,7 @@ export const managementApiPlugin = (
45
51
  method: HttpMethod.get,
46
52
  path: "",
47
53
  docs: "List all management users",
54
+ ...schemas("src/handlers/User/GetList.ts"),
48
55
  },
49
56
  });
50
57
 
@@ -54,6 +61,7 @@ export const managementApiPlugin = (
54
61
  method: HttpMethod.get,
55
62
  path: "/me",
56
63
  docs: "Get current user information",
64
+ ...schemas("src/handlers/User/GetMe.ts"),
57
65
  },
58
66
  });
59
67
 
@@ -63,6 +71,7 @@ export const managementApiPlugin = (
63
71
  method: HttpMethod.get,
64
72
  path: "/:userid",
65
73
  docs: "Get one management user by id",
74
+ ...schemas("src/handlers/User/GetByUserid.ts"),
66
75
  },
67
76
  });
68
77
 
@@ -73,6 +82,7 @@ export const managementApiPlugin = (
73
82
  method: HttpMethod.post,
74
83
  path: "",
75
84
  docs: "Create a new management user",
85
+ ...schemas("src/handlers/User/Post.ts"),
76
86
  },
77
87
  });
78
88
 
@@ -83,6 +93,7 @@ export const managementApiPlugin = (
83
93
  method: HttpMethod.delete,
84
94
  path: "/:userid",
85
95
  docs: "Deletes a management user",
96
+ ...schemas("src/handlers/User/DeleteByUserid.ts"),
86
97
  },
87
98
  });
88
99
 
@@ -92,6 +103,7 @@ export const managementApiPlugin = (
92
103
  method: HttpMethod.put,
93
104
  path: "/:userid",
94
105
  docs: "Updates a management user",
106
+ ...schemas("src/handlers/User/PutByUserid.ts"),
95
107
  },
96
108
  });
97
109
 
@@ -101,6 +113,7 @@ export const managementApiPlugin = (
101
113
  method: HttpMethod.post,
102
114
  path: "/login",
103
115
  docs: "Authenticates a management user",
116
+ ...schemas("src/handlers/User/PostLogin.ts"),
104
117
  },
105
118
  });
106
119
 
@@ -124,7 +137,7 @@ export const managementApiPlugin = (
124
137
  // let url = options.baseUrl || "/managementapi";
125
138
  // url += "/" + m.id + e.routeProps.path;
126
139
  // // module.endpoints.push({
127
- // // method : e.config.routeProps.method?.toString() || "get",
140
+ // // method : e.config.routeProps.method?.toString() || "get",
128
141
  // // url : url
129
142
  // // });
130
143
  // });
@@ -132,8 +145,8 @@ export const managementApiPlugin = (
132
145
  });
133
146
 
134
147
  return {
135
- id: "managementApi",
136
- init: (app) => init(app, options),
148
+ id: PLUGIN_ID,
149
+ init: (app) => init(app, options, pluginSchemas),
137
150
  ctx: {
138
151
  jwtSecret: options.jwtSecret,
139
152
  moduleList,
@@ -141,7 +154,7 @@ export const managementApiPlugin = (
141
154
  };
142
155
  };
143
156
 
144
- function init(app: FlinkApp<any>, options: ManagementApiOptions) {
157
+ function init(app: FlinkApp<any>, options: ManagementApiOptions, pluginSchemas: ReturnType<typeof loadPluginSchemas>) {
145
158
  let baseUrl = options.baseUrl || "/managementapi";
146
159
  if (!baseUrl.startsWith("/")) baseUrl = "/" + baseUrl;
147
160
 
@@ -151,6 +164,12 @@ function init(app: FlinkApp<any>, options: ManagementApiOptions) {
151
164
  throw new Error("Express app not initialized");
152
165
  }
153
166
 
167
+ // Register all plugin schemas for $ref resolution
168
+ const allSchemas = pluginSchemas.getAllSchemas(PLUGIN_ID);
169
+ if (Object.keys(allSchemas).length > 0) {
170
+ app.registerSchemas(PLUGIN_ID, allSchemas);
171
+ }
172
+
154
173
  expressApp.use(baseUrl + "/*", (req: any, res: any, next: any) => {
155
174
  //Allow unauthenticated login requests
156
175
  if (req.baseUrl.startsWith(baseUrl + "/managementapiuser/login")) {
@@ -173,10 +192,13 @@ function init(app: FlinkApp<any>, options: ManagementApiOptions) {
173
192
  }
174
193
  });
175
194
 
195
+ const schemas = (filePath: string) => pluginSchemas.getHandlerSchemas(PLUGIN_ID, filePath);
196
+
176
197
  app.addHandler(GetManagement, {
177
198
  path: baseUrl,
178
199
  method: HttpMethod.get,
179
200
  docs: "Gets information about configured management api",
201
+ ...schemas("src/handlers/Management/GetManagement.ts"),
180
202
  });
181
203
 
182
204
  if (app.db != null) {
@@ -1,31 +0,0 @@
1
- import { DeleteUserByUseridReq } from "../../src/schemas/User/DeleteByUseridReq";
2
- import { DeleteUserByUseridRes } from "../../src/schemas/User/DeleteByUseridRes";
3
- import { GetUserByUseridReq } from "../../src/schemas/User/GetByUseridReq";
4
- import { GetUserByUseridRes } from "../../src/schemas/User/GetByUseridRes";
5
- import { PostUserReq } from "../../src/schemas/User/PostReq";
6
- import { PostUserRes } from "../../src/schemas/User/PostRes";
7
- import { PostUserLoginReq } from "../../src/schemas/User/PostLoginReq";
8
- import { PostUserLoginRes } from "../../src/schemas/User/PostLoginRes";
9
- import { PutUserByUseridReq } from "../../src/schemas/User/PutByUseridReq";
10
- import { PutUserByUseridRes } from "../../src/schemas/User/PutByUseridRes";
11
-
12
- // Generated Sat Feb 14 2026 15:43:04 GMT+0100 (Central European Standard Time)
13
- export interface DeleteByUserid_15_ReqSchema extends DeleteUserByUseridReq {}
14
-
15
- export interface DeleteByUserid_15_ResSchema extends DeleteUserByUseridRes {}
16
-
17
- export interface GetByUserid_15_ReqSchema extends GetUserByUseridReq {}
18
-
19
- export interface GetByUserid_15_ResSchema extends GetUserByUseridRes {}
20
-
21
- export interface Post_14_ReqSchema extends PostUserReq {}
22
-
23
- export interface Post_14_ResSchema extends PostUserRes {}
24
-
25
- export interface PostLogin_21_ReqSchema extends PostUserLoginReq {}
26
-
27
- export interface PostLogin_21_ResSchema extends PostUserLoginRes {}
28
-
29
- export interface PutByUserid_24_ReqSchema extends PutUserByUseridReq {}
30
-
31
- export interface PutByUserid_24_ResSchema extends PutUserByUseridRes {}