@volcanicminds/backend 2.2.7 → 2.2.9

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 (125) hide show
  1. package/README.md +85 -22
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +100 -51
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/api/auth/controller/auth.d.ts +10 -0
  6. package/dist/lib/api/auth/controller/auth.d.ts.map +1 -1
  7. package/dist/lib/api/auth/controller/auth.js +26 -4
  8. package/dist/lib/api/auth/controller/auth.js.map +1 -1
  9. package/dist/lib/api/token/controller/token.d.ts +1 -1
  10. package/dist/lib/api/token/controller/token.d.ts.map +1 -1
  11. package/dist/lib/api/token/controller/token.js +7 -5
  12. package/dist/lib/api/token/controller/token.js.map +1 -1
  13. package/dist/lib/api/users/controller/user.d.ts +2 -2
  14. package/dist/lib/api/users/controller/user.d.ts.map +1 -1
  15. package/dist/lib/api/users/controller/user.js +14 -4
  16. package/dist/lib/api/users/controller/user.js.map +1 -1
  17. package/dist/lib/apollo/resolvers.d.ts +1 -1
  18. package/dist/lib/apollo/resolvers.d.ts.map +1 -1
  19. package/dist/lib/apollo/resolvers.js +1 -1
  20. package/dist/lib/apollo/resolvers.js.map +1 -1
  21. package/dist/lib/config/general.d.ts +1 -0
  22. package/dist/lib/config/general.d.ts.map +1 -1
  23. package/dist/lib/config/general.js +2 -1
  24. package/dist/lib/config/general.js.map +1 -1
  25. package/dist/lib/hooks/onError.d.ts +1 -1
  26. package/dist/lib/hooks/onError.d.ts.map +1 -1
  27. package/dist/lib/hooks/onError.js +5 -3
  28. package/dist/lib/hooks/onError.js.map +1 -1
  29. package/dist/lib/hooks/onRequest.d.ts.map +1 -1
  30. package/dist/lib/hooks/onRequest.js +18 -2
  31. package/dist/lib/hooks/onRequest.js.map +1 -1
  32. package/dist/lib/hooks/onResponse.d.ts.map +1 -1
  33. package/dist/lib/hooks/onResponse.js +9 -1
  34. package/dist/lib/hooks/onResponse.js.map +1 -1
  35. package/dist/lib/loader/general.js +4 -2
  36. package/dist/lib/loader/general.js.map +1 -1
  37. package/dist/lib/loader/hooks.d.ts.map +1 -1
  38. package/dist/lib/loader/hooks.js +8 -4
  39. package/dist/lib/loader/hooks.js.map +1 -1
  40. package/dist/lib/loader/plugins.d.ts.map +1 -1
  41. package/dist/lib/loader/plugins.js +6 -3
  42. package/dist/lib/loader/plugins.js.map +1 -1
  43. package/dist/lib/loader/roles.js +4 -2
  44. package/dist/lib/loader/roles.js.map +1 -1
  45. package/dist/lib/loader/router.d.ts.map +1 -1
  46. package/dist/lib/loader/router.js +31 -16
  47. package/dist/lib/loader/router.js.map +1 -1
  48. package/dist/lib/loader/schedules.d.ts.map +1 -1
  49. package/dist/lib/loader/schedules.js +19 -10
  50. package/dist/lib/loader/schedules.js.map +1 -1
  51. package/dist/lib/loader/schemas.d.ts.map +1 -1
  52. package/dist/lib/loader/schemas.js +18 -9
  53. package/dist/lib/loader/schemas.js.map +1 -1
  54. package/dist/lib/loader/tracking.d.ts.map +1 -1
  55. package/dist/lib/loader/tracking.js +6 -3
  56. package/dist/lib/loader/tracking.js.map +1 -1
  57. package/dist/lib/loader/translation.d.ts.map +1 -1
  58. package/dist/lib/loader/translation.js.map +1 -1
  59. package/dist/lib/middleware/isAdmin.d.ts.map +1 -1
  60. package/dist/lib/middleware/isAdmin.js +2 -1
  61. package/dist/lib/middleware/isAdmin.js.map +1 -1
  62. package/dist/lib/middleware/isAuthenticated.d.ts.map +1 -1
  63. package/dist/lib/middleware/isAuthenticated.js +3 -2
  64. package/dist/lib/middleware/isAuthenticated.js.map +1 -1
  65. package/dist/lib/middleware/preAuth.d.ts +1 -1
  66. package/dist/lib/middleware/preAuth.d.ts.map +1 -1
  67. package/dist/lib/middleware/preAuth.js +1 -1
  68. package/dist/lib/middleware/preAuth.js.map +1 -1
  69. package/dist/lib/middleware/preForgotPasswordHandler.d.ts +1 -1
  70. package/dist/lib/middleware/preForgotPasswordHandler.d.ts.map +1 -1
  71. package/dist/lib/middleware/preForgotPasswordHandler.js +1 -1
  72. package/dist/lib/middleware/preForgotPasswordHandler.js.map +1 -1
  73. package/dist/lib/schemas/auth.d.ts +3 -0
  74. package/dist/lib/schemas/auth.d.ts.map +1 -1
  75. package/dist/lib/schemas/auth.js +1 -0
  76. package/dist/lib/schemas/auth.js.map +1 -1
  77. package/dist/lib/util/common.d.ts.map +1 -1
  78. package/dist/lib/util/common.js.map +1 -1
  79. package/dist/lib/util/errors.d.ts.map +1 -1
  80. package/dist/lib/util/errors.js.map +1 -1
  81. package/dist/lib/util/logger.js +1 -1
  82. package/dist/lib/util/logger.js.map +1 -1
  83. package/dist/lib/util/mark.d.ts.map +1 -1
  84. package/dist/lib/util/mark.js +34 -17
  85. package/dist/lib/util/mark.js.map +1 -1
  86. package/dist/lib/util/regexp.d.ts.map +1 -1
  87. package/dist/lib/util/regexp.js +3 -3
  88. package/dist/lib/util/regexp.js.map +1 -1
  89. package/dist/lib/util/tracker.d.ts +2 -2
  90. package/dist/lib/util/tracker.d.ts.map +1 -1
  91. package/dist/lib/util/tracker.js +6 -4
  92. package/dist/lib/util/tracker.js.map +1 -1
  93. package/dist/lib/util/yn.d.ts.map +1 -1
  94. package/dist/lib/util/yn.js.map +1 -1
  95. package/dist/server.js.map +1 -1
  96. package/lib/api/auth/controller/auth.ts +36 -4
  97. package/lib/api/token/controller/token.ts +7 -5
  98. package/lib/api/users/controller/user.ts +17 -4
  99. package/lib/apollo/resolvers.ts +2 -1
  100. package/lib/config/general.ts +2 -1
  101. package/lib/hooks/onError.ts +4 -3
  102. package/lib/hooks/onRequest.ts +21 -14
  103. package/lib/hooks/onResponse.ts +10 -4
  104. package/lib/loader/general.ts +2 -2
  105. package/lib/loader/hooks.ts +6 -4
  106. package/lib/loader/plugins.ts +4 -3
  107. package/lib/loader/roles.ts +2 -2
  108. package/lib/loader/router.ts +21 -24
  109. package/lib/loader/schedules.ts +23 -26
  110. package/lib/loader/schemas.ts +10 -9
  111. package/lib/loader/tracking.ts +4 -3
  112. package/lib/loader/translation.ts +2 -0
  113. package/lib/middleware/isAdmin.ts +2 -1
  114. package/lib/middleware/isAuthenticated.ts +3 -2
  115. package/lib/middleware/preAuth.ts +1 -1
  116. package/lib/middleware/preForgotPasswordHandler.ts +1 -1
  117. package/lib/schemas/auth.ts +1 -0
  118. package/lib/util/common.ts +1 -0
  119. package/lib/util/errors.ts +1 -0
  120. package/lib/util/logger.ts +1 -1
  121. package/lib/util/mark.ts +18 -17
  122. package/lib/util/regexp.ts +3 -3
  123. package/lib/util/tracker.ts +6 -4
  124. package/lib/util/yn.ts +1 -0
  125. package/package.json +11 -2
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../lib/util/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE,GAAG,CAAA;gBAEG,EAAE,eAAe,EAAE,IAAS,EAAE,MAAa,EAAE,cAAqB,EAAE,MAAY,EAAE;;;;;;KAAA;CAY/F"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../lib/util/errors.ts"],"names":[],"mappings":"AACA,qBAAa,eAAgB,SAAQ,KAAK;IACxC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,eAAe,EAAE,MAAM,CAAA;IACvB,iBAAiB,EAAE,MAAM,CAAA;IACzB,IAAI,EAAE,GAAG,CAAA;gBAEG,EAAE,eAAe,EAAE,IAAS,EAAE,MAAa,EAAE,cAAqB,EAAE,MAAY,EAAE;;;;;;KAAA;CAY/F"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../lib/util/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,MAAM,CAAQ;IACd,MAAM,CAAQ;IACd,eAAe,CAAQ;IACvB,iBAAiB,CAAQ;IACzB,IAAI,CAAK;IAET,YAAY,EAAE,eAAe,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE;QAC5F,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,iBAAiB,CAAA;QACvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,IAAI,cAAc,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;QACjH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,IAAI,cAAc,IAAI,eAAe,CAAA;QAC1E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,eAAe,CAAC,CAAA;IACpE,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../lib/util/errors.ts"],"names":[],"mappings":"AACA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,MAAM,CAAQ;IACd,MAAM,CAAQ;IACd,eAAe,CAAQ;IACvB,iBAAiB,CAAQ;IACzB,IAAI,CAAK;IAET,YAAY,EAAE,eAAe,EAAE,IAAI,GAAG,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE;QAC5F,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,iBAAiB,CAAA;QACvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,iBAAiB,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,eAAe,IAAI,cAAc,EAAE,MAAM,EAAE,MAAM,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,CAAA;QACjH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,iBAAiB,IAAI,cAAc,IAAI,eAAe,CAAA;QAC1E,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAEhB,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,eAAe,CAAC,CAAA;IACpE,CAAC;CACF"}
@@ -21,7 +21,7 @@ const loggerConfig = {
21
21
  }
22
22
  }
23
23
  };
24
- let logger = pino(loggerConfig);
24
+ const logger = pino(loggerConfig);
25
25
  const logLevel = logger.levels.values[loggerConfig.level];
26
26
  const loggerExt = Object.assign(logger, {
27
27
  t: logLevel < 11,
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../lib/util/logger.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAaZ,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAEtE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAA;AAEtF,SAAS,WAAW;IAClB,MAAM,GAAG,GAAG,SAAS,EAAE,WAAW,EAAE,CAAA;IACpC,OAAO,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAI,CAAC,CAAC,CAAC,CAAC,GAAI,CAAC,CAAC,CAAC,OAAO,CAAA;AAC/D,CAAC;AAED,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;AAC1C,MAAM,YAAY,GAAG,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;AAC5C,MAAM,oBAAoB,GAAG,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAA;AAE7D,MAAM,YAAY,GAAG;IACnB,KAAK,EAAE,WAAW,EAAE;IACpB,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE;QACT,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE;YACP,aAAa,EAAE,oBAAoB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK;YACnE,QAAQ,EAAE,WAAW;SACtB;KACF;CACF,CAAA;AAED,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;AAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;AAKzD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;IACtC,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,YAAY;IAC1B,WAAW,EAAE,GAAG,EAAE;QAChB,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;IACvC,CAAC;CACF,CAAC,CAAA;AAEF,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;IAChC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;AAChC,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../lib/util/logger.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAaZ,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,SAAS,CAAA;AAExB,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;AAEtE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC,GAAG,CAAA;AAEtF,SAAS,WAAW;IAClB,MAAM,GAAG,GAAG,SAAS,EAAE,WAAW,EAAE,CAAA;IACpC,OAAO,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAI,CAAC,CAAC,CAAC,CAAC,GAAI,CAAC,CAAC,CAAC,OAAO,CAAA;AAC/D,CAAC;AAED,MAAM,WAAW,GAAG,EAAE,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;AAC1C,MAAM,YAAY,GAAG,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;AAC5C,MAAM,oBAAoB,GAAG,EAAE,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAA;AAE7D,MAAM,YAAY,GAAG;IACnB,KAAK,EAAE,WAAW,EAAE;IACpB,SAAS,EAAE,YAAY;IACvB,SAAS,EAAE;QACT,MAAM,EAAE,aAAa;QACrB,OAAO,EAAE;YACP,aAAa,EAAE,oBAAoB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,KAAK;YACnE,QAAQ,EAAE,WAAW;SACtB;KACF;CACF,CAAA;AAED,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;AACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAA;AAKzD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;IACtC,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,CAAC,EAAE,QAAQ,GAAG,EAAE;IAChB,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,YAAY;IAC1B,WAAW,EAAE,GAAG,EAAE;QAChB,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;QACrC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,QAAQ,GAAG,EAAE,CAAA;IACvC,CAAC;CACF,CAAC,CAAA;AAEF,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;IAChC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;AAChC,CAAC,CAAC,CAAA;AAEF,eAAe,SAAS,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../lib/util/mark.ts"],"names":[],"mappings":"AAOA,wBAAgB,KAAK,CAAC,IAAI,GAAE,GAAS,GAAG,IAAI,CAkB3C"}
1
+ {"version":3,"file":"mark.d.ts","sourceRoot":"","sources":["../../../lib/util/mark.ts"],"names":[],"mappings":"AAQA,wBAAgB,KAAK,CAAC,IAAI,GAAE,GAAS,GAAG,IAAI,CAkB3C"}
@@ -1,22 +1,39 @@
1
1
  import require from './require.js';
2
2
  const pkg = require('root-require')('package.json');
3
3
  export function print(logg = log) {
4
- logg.i && logg.info('Ciao');
5
- logg.i && logg.info(` ,--. ,--. `);
6
- logg.i && logg.info(`.--. ,--,---.| |,---.,--,--,--,--\\\`--',---. `);
7
- logg.i && logg.info(` \\ '' | .-. | / .--' ,-. | ,--/ .--' `);
8
- logg.i && logg.info(` \\ /' '-' | \\ \`--\\ '-' | || | \\ \`--. `);
9
- logg.i && logg.info(` \`--' \`---'\`--'\`---'\`--\`--\`--''--\`--'\`---' `);
10
- logg.i && logg.info('');
11
- logg.t && logg.trace(`Package ${pkg.name}`);
12
- logg.i && logg.info(`License ${pkg.license}`);
13
- logg.i && logg.info(`Version ${pkg.version}`);
14
- logg.i && logg.info(`Codename ${pkg.codename}`);
15
- logg.i && logg.info(`Environment ${process.env.NODE_ENV}`);
16
- logg.t && logg.trace(`Platform ${process.platform} ${process.arch}`);
17
- logg.t && logg.trace(`Root path ${process.cwd()}`);
18
- logg.t && logg.trace(`Node ${process.version}`);
19
- logg.t && logg.trace(`Release ${JSON.stringify(process.release)}`);
20
- logg.t && logg.trace(`Versions ${JSON.stringify(process.versions)}`);
4
+ if (logg.i)
5
+ logg.info('Ciao');
6
+ if (logg.i)
7
+ logg.info(` ,--. ,--. `);
8
+ if (logg.i)
9
+ logg.info(`.--. ,--,---.| |,---.,--,--,--,--\\\`--',---. `);
10
+ if (logg.i)
11
+ logg.info(` \\ '' | .-. | / .--' ,-. | ,--/ .--' `);
12
+ if (logg.i)
13
+ logg.info(` \\ /' '-' | \\ \`--\\ '-' | || | \\ \`--. `);
14
+ if (logg.i)
15
+ logg.info(` \`--' \`---'\`--'\`---'\`--\`--\`--''--\`--'\`---' `);
16
+ if (logg.i)
17
+ logg.info('');
18
+ if (logg.t)
19
+ logg.trace(`Package ${pkg.name}`);
20
+ if (logg.i)
21
+ logg.info(`License ${pkg.license}`);
22
+ if (logg.i)
23
+ logg.info(`Version ${pkg.version}`);
24
+ if (logg.i)
25
+ logg.info(`Codename ${pkg.codename}`);
26
+ if (logg.i)
27
+ logg.info(`Environment ${process.env.NODE_ENV}`);
28
+ if (logg.t)
29
+ logg.trace(`Platform ${process.platform} ${process.arch}`);
30
+ if (logg.t)
31
+ logg.trace(`Root path ${process.cwd()}`);
32
+ if (logg.t)
33
+ logg.trace(`Node ${process.version}`);
34
+ if (logg.t)
35
+ logg.trace(`Release ${JSON.stringify(process.release)}`);
36
+ if (logg.t)
37
+ logg.trace(`Versions ${JSON.stringify(process.versions)}`);
21
38
  }
22
39
  //# sourceMappingURL=mark.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mark.js","sourceRoot":"","sources":["../../../lib/util/mark.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,CAAA;AAMnD,MAAM,UAAU,KAAK,CAAC,OAAY,GAAG;IACnC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IACrE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;IACvE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IACtE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;IAC3E,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAA;IAC9E,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACvB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC3C,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7C,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC7C,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC/C,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC1D,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACpE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAClD,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/C,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAClE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AACtE,CAAC"}
1
+ {"version":3,"file":"mark.js","sourceRoot":"","sources":["../../../lib/util/mark.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,cAAc,CAAC,CAAA;AAMnD,MAAM,UAAU,KAAK,CAAC,OAAY,GAAG;IACnC,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC7B,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IACvE,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;IACzE,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IACxE,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAA;IAC7E,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAA;IAChF,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACzB,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7C,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/C,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;IAC/C,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IACjD,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;IAC5D,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,KAAK,CAAC,YAAY,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACtE,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,KAAK,CAAC,aAAa,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACpD,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;IACjD,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IACpE,IAAI,IAAI,CAAC,CAAC;QAAE,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AACxE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"regexp.d.ts","sourceRoot":"","sources":["../../../lib/util/regexp.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ,QAAmD,CAAA;AACxE,eAAO,MAAM,QAAQ,QACsI,CAAA;AAM3J,eAAO,MAAM,KAAK,QAAmD,CAAA;AASrE,eAAO,MAAM,QAAQ,QAC6G,CAAA;AAClI,eAAO,MAAM,OAAO,QAA8B,CAAA;AAClD,eAAO,MAAM,cAAc,QACmE,CAAA;AAK9F,eAAO,MAAM,cAAc,QAA2B,CAAA;AACtD,eAAO,MAAM,IAAI,QAAoE,CAAA;AACrF,eAAO,MAAM,WAAW,QAA8B,CAAA;AACtD,eAAO,MAAM,aAAa,QAAwD,CAAA;AAClF,eAAO,MAAM,aAAa,QAAuC,CAAA"}
1
+ {"version":3,"file":"regexp.d.ts","sourceRoot":"","sources":["../../../lib/util/regexp.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,QAAQ,QAAmD,CAAA;AACxE,eAAO,MAAM,QAAQ,QACoI,CAAA;AAMzJ,eAAO,MAAM,KAAK,QAAiD,CAAA;AASnE,eAAO,MAAM,QAAQ,QAC+F,CAAA;AACpH,eAAO,MAAM,OAAO,QAA8B,CAAA;AAClD,eAAO,MAAM,cAAc,QACmE,CAAA;AAK9F,eAAO,MAAM,cAAc,QAA2B,CAAA;AACtD,eAAO,MAAM,IAAI,QAAoE,CAAA;AACrF,eAAO,MAAM,WAAW,QAA8B,CAAA;AACtD,eAAO,MAAM,aAAa,QAAwD,CAAA;AAClF,eAAO,MAAM,aAAa,QAAuC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  export const username = /(?=^.{3,33}$)^[a-z][a-z0-9]*[._-]?[a-z0-9]+$/gi;
2
- export const emailAlt = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
3
- export const email = /^\w+([\.+-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
4
- export const password = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%&*()-_=+\[\]\{\}\\|;:\'",.<>?\^])[A-Za-z\d!@#$%&*()-_=+\[\]\{\}\\|;:\'",.<>?\^]{8,}$/;
2
+ export const emailAlt = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
3
+ export const email = /^\w+([.+-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$/;
4
+ export const password = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%&*()-_=+[\]{}|;:'",.<>?^])[A-Za-z\d!@#$%&*()-_=+[\]{}|;:'",.<>?^]{8,}$/;
5
5
  export const zipCode = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
6
6
  export const taxCodePersona = /^[a-zA-Z]{6}[0-9]{2}[abcdehlmprstABCDEHLMPRST]{1}[0-9]{2}([a-zA-Z]{1}[0-9]{3})[a-zA-Z]{1}$/;
7
7
  export const taxCodeCompany = /^([A-Z]{2}|)[0-9]{11}$/;
@@ -1 +1 @@
1
- {"version":3,"file":"regexp.js","sourceRoot":"","sources":["../../../lib/util/regexp.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,QAAQ,GAAG,gDAAgD,CAAA;AACxE,MAAM,CAAC,MAAM,QAAQ,GACnB,yJAAyJ,CAAA;AAM3J,MAAM,CAAC,MAAM,KAAK,GAAG,gDAAgD,CAAA;AASrE,MAAM,CAAC,MAAM,QAAQ,GACnB,gIAAgI,CAAA;AAClI,MAAM,CAAC,MAAM,OAAO,GAAG,2BAA2B,CAAA;AAClD,MAAM,CAAC,MAAM,cAAc,GACzB,4FAA4F,CAAA;AAK9F,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAA;AACtD,MAAM,CAAC,MAAM,IAAI,GAAG,iEAAiE,CAAA;AACrF,MAAM,CAAC,MAAM,WAAW,GAAG,2BAA2B,CAAA;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,qDAAqD,CAAA;AAClF,MAAM,CAAC,MAAM,aAAa,GAAG,oCAAoC,CAAA"}
1
+ {"version":3,"file":"regexp.js","sourceRoot":"","sources":["../../../lib/util/regexp.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,QAAQ,GAAG,gDAAgD,CAAA;AACxE,MAAM,CAAC,MAAM,QAAQ,GACnB,uJAAuJ,CAAA;AAMzJ,MAAM,CAAC,MAAM,KAAK,GAAG,8CAA8C,CAAA;AASnE,MAAM,CAAC,MAAM,QAAQ,GACnB,kHAAkH,CAAA;AACpH,MAAM,CAAC,MAAM,OAAO,GAAG,2BAA2B,CAAA;AAClD,MAAM,CAAC,MAAM,cAAc,GACzB,4FAA4F,CAAA;AAK9F,MAAM,CAAC,MAAM,cAAc,GAAG,wBAAwB,CAAA;AACtD,MAAM,CAAC,MAAM,IAAI,GAAG,iEAAiE,CAAA;AACrF,MAAM,CAAC,MAAM,WAAW,GAAG,2BAA2B,CAAA;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,qDAAqD,CAAA;AAClF,MAAM,CAAC,MAAM,aAAa,GAAG,oCAAoC,CAAA"}
@@ -1,4 +1,4 @@
1
1
  import type { FastifyRequest, FastifyReply } from '../../types/global.js';
2
- export declare function initialize(req: FastifyRequest, reply: FastifyReply): Promise<void>;
3
- export declare function track(req: FastifyRequest, reply: FastifyReply, payload: any): Promise<void>;
2
+ export declare function initialize(req: FastifyRequest, _reply: FastifyReply): Promise<void>;
3
+ export declare function track(req: FastifyRequest, _reply: FastifyReply, payload: any): Promise<void>;
4
4
  //# sourceMappingURL=tracker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../../lib/util/tracker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzE,wBAAsB,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,iBAkBxE;AAED,wBAAsB,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,iBAsDjF"}
1
+ {"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../../lib/util/tracker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEzE,wBAAsB,UAAU,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,iBAmBzE;AAED,wBAAsB,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,iBAsDlF"}
@@ -1,5 +1,5 @@
1
1
  import dayjs from 'dayjs';
2
- export async function initialize(req, reply) {
2
+ export async function initialize(req, _reply) {
3
3
  if (req.server['dataBaseManager'].isImplemented()) {
4
4
  const tc = getTrackingConfigIfEnabled(req);
5
5
  const allData = { ...req.parameters(), ...req.data() };
@@ -8,7 +8,8 @@ export async function initialize(req, reply) {
8
8
  if (allData && tc.entity && tc.primaryKey && tc.primaryKey in allData) {
9
9
  const key = allData[tc.primaryKey];
10
10
  req.trackingData = await req.server['dataBaseManager'].retrieveBy(tc.entity, key);
11
- log.trace(`Tracking changes: found id ${req.trackingData ? req.trackingData[tc.primaryKey] : null}`);
11
+ if (log.t)
12
+ log.trace(`Tracking changes: found id ${req.trackingData ? req.trackingData[tc.primaryKey] : null}`);
12
13
  }
13
14
  }
14
15
  catch (error) {
@@ -18,7 +19,7 @@ export async function initialize(req, reply) {
18
19
  }
19
20
  }
20
21
  }
21
- export async function track(req, reply, payload) {
22
+ export async function track(req, _reply, payload) {
22
23
  if (req.server['dataBaseManager'].isImplemented()) {
23
24
  const tc = getTrackingConfigIfEnabled(req);
24
25
  if (tc) {
@@ -56,7 +57,8 @@ export async function track(req, reply, payload) {
56
57
  });
57
58
  }
58
59
  if (addChange) {
59
- log.trace(`Tracking changes: add ${changeEntity} for ${entity}, ${id}, ${userId}, ${status}`);
60
+ if (log.t)
61
+ log.trace(`Tracking changes: add ${changeEntity} for ${entity}, ${id}, ${userId}, ${status}`);
60
62
  await req.server['dataBaseManager'].addChange(entity, id, status, userId, contents, changeEntity);
61
63
  }
62
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../lib/util/tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../../lib/util/tracker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAmB,EAAE,MAAoB;IACxE,IAAI,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QAClD,MAAM,EAAE,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAA;QAC1C,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,UAAU,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAA;QAEtD,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC;gBACH,IAAI,OAAO,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC;oBACtE,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;oBAClC,GAAG,CAAC,YAAY,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;oBACjF,IAAI,GAAG,CAAC,CAAC;wBACP,GAAG,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;gBACxG,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;gBAClD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAmB,EAAE,MAAoB,EAAE,OAAY;IACjF,IAAI,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC;QAClD,MAAM,EAAE,GAAG,0BAA0B,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,EAAE,EAAE,CAAC;YACP,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAU,EAAE,CAAA;gBAC1B,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,EAAE,CAAA;gBACnC,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAA;gBAChC,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,CAAA;gBAEhC,MAAM,MAAM,GACV,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;gBAEhH,MAAM,EAAE,GACN,EAAE,CAAC,UAAU,IAAI,OAAO,IAAI,EAAE,CAAC,UAAU,IAAI,OAAO;oBAClD,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;oBACxB,CAAC,CAAC,EAAE,CAAC,UAAU,IAAI,OAAO,IAAI,EAAE,CAAC,UAAU,IAAI,OAAO;wBACtD,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC;wBACxB,CAAC,CAAC,SAAS,CAAA;gBAEf,IAAI,CAAC,EAAE,EAAE,CAAC;oBACR,GAAG,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;oBACzD,OAAM;gBACR,CAAC;gBAED,IAAI,SAAS,GAAG,KAAK,CAAA;gBACrB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACxB,SAAS,GAAG,IAAI,CAAA;gBAClB,CAAC;qBAAM,CAAC;oBACN,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAA;oBAChE,MAAM,QAAQ,GAAa,EAAE,CAAC,MAAM,EAAE,QAAQ,IAAI,EAAE,CAAA;oBAEpD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;wBACvB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC9B,MAAM,QAAQ,GAAG,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;4BACjF,MAAM,QAAQ,GAAG,OAAO,IAAI,IAAI,IAAI,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;4BACjF,IAAI,QAAQ,KAAK,SAAS,IAAI,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;gCACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAA;gCAC3D,SAAS,GAAG,IAAI,CAAA;4BAClB,CAAC;wBACH,CAAC;oBACH,CAAC,CAAC,CAAA;gBACJ,CAAC;gBAED,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,GAAG,CAAC,CAAC;wBAAE,GAAG,CAAC,KAAK,CAAC,yBAAyB,YAAY,QAAQ,MAAM,KAAK,EAAE,KAAK,MAAM,KAAK,MAAM,EAAE,CAAC,CAAA;oBACxG,MAAM,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAA;gBACnG,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,CAAC,IAAI,EAAE,CAAC,CAAA;gBAClD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YAClB,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAG;IACrC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,CAAA;QAChH,OAAO,IAAI,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5G,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,QAAQ,EAAE,QAAQ;IACxC,IAAI,CAAC,QAAQ,YAAY,IAAI,IAAI,QAAQ,YAAY,IAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;QACxG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAA;IACjD,CAAC;IAED,IAAI,CAAC,QAAQ,YAAY,MAAM,IAAI,QAAQ,YAAY,MAAM,CAAC,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC5G,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE,UAAU,CAAA;QACpD,MAAM,KAAK,GACT,QAAQ,IAAI,IAAI,IAAI,UAAU,IAAI,QAAQ;YACxC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;YACtB,CAAC,CAAC,OAAO,QAAQ,KAAK,QAAQ;gBAC9B,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,SAAS,CAAA;QACf,MAAM,KAAK,GACT,QAAQ,IAAI,IAAI,IAAI,UAAU,IAAI,QAAQ;YACxC,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;YACtB,CAAC,CAAC,OAAO,QAAQ,KAAK,QAAQ;gBAC9B,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,SAAS,CAAA;QACf,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAA;IAC5E,CAAC;IAED,OAAO,QAAQ,IAAI,QAAQ,CAAA;AAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"yn.d.ts","sourceRoot":"","sources":["../../../lib/util/yn.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAgBrE"}
1
+ {"version":3,"file":"yn.d.ts","sourceRoot":"","sources":["../../../lib/util/yn.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,GAAG,OAAO,CAgBrE"}
@@ -1 +1 @@
1
- {"version":3,"file":"yn.js","sourceRoot":"","sources":["../../../lib/util/yn.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,MAAM,CAAC,OAAO,UAAU,EAAE,CAAC,KAAU,EAAE,YAAqB;IAC1D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;IAEhC,IAAI,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,YAAY,IAAI,KAAK,CAAA;AAC9B,CAAC"}
1
+ {"version":3,"file":"yn.js","sourceRoot":"","sources":["../../../lib/util/yn.ts"],"names":[],"mappings":"AACA,YAAY,CAAA;AAEZ,MAAM,CAAC,OAAO,UAAU,EAAE,CAAC,KAAU,EAAE,YAAqB;IAC1D,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1C,OAAO,YAAY,CAAA;IACrB,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;IAEhC,IAAI,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,yBAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,KAAK,CAAA;IACd,CAAC;IAED,OAAO,YAAY,IAAI,KAAK,CAAA;AAC9B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAGjC;AAAC,MAAc,CAAC,qBAAqB,GAAG,IAAI,CAAA;AAE7C,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAGjC;AAAC,MAAc,CAAC,qBAAqB,GAAG,IAAI,CAAA;AAE7C,KAAK,EAAE,CAAA"}
@@ -1,5 +1,7 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import { FastifyReply, FastifyRequest } from 'fastify'
2
3
  import * as regExp from '../../../util/regexp.js'
4
+ import { MfaPolicy } from '../../../../types/global.js'
3
5
 
4
6
  export async function register(req: FastifyRequest, reply: FastifyReply) {
5
7
  const { password1: password, password2, ...data } = req.data()
@@ -33,6 +35,7 @@ export async function register(req: FastifyRequest, reply: FastifyReply) {
33
35
  }
34
36
  }
35
37
 
38
+ // public is the default
36
39
  const publicRole = global.roles?.public?.code || 'public'
37
40
  data.roles = (data.requiredRoles || []).map((r) => global.roles[r]?.code).filter((r) => !!r)
38
41
  if (!data.roles.includes(publicRole)) {
@@ -208,6 +211,7 @@ export async function resetPassword(req: FastifyRequest, reply: FastifyReply) {
208
211
 
209
212
  export async function login(req: FastifyRequest, reply: FastifyReply) {
210
213
  const { email, password } = req.data()
214
+ const { mfa_policy = MfaPolicy.OPTIONAL } = global.config.options || {}
211
215
 
212
216
  if (!req.server['userManager'].isImplemented()) {
213
217
  throw new Error('Not implemented')
@@ -245,11 +249,15 @@ export async function login(req: FastifyRequest, reply: FastifyReply) {
245
249
  }
246
250
 
247
251
  // MFA Logic Interception
248
- if (user.mfaEnabled) {
252
+ const isMfaEnabled = user.mfaEnabled
253
+ const isMandatory = mfa_policy === MfaPolicy.MANDATORY
254
+
255
+ if (isMfaEnabled || isMandatory) {
249
256
  const tempToken = await reply.jwtSign({ sub: user.externalId, role: 'pre-auth-mfa' }, { expiresIn: '5m' })
250
257
  // Use 202 Accepted to bypass 200 OK strict schema filtering
251
258
  return reply.status(202).send({
252
- mfaRequired: true,
259
+ mfaRequired: isMfaEnabled, // If enabled, verify. If not enabled but mandatory, setup.
260
+ mfaSetupRequired: isMandatory && !isMfaEnabled,
253
261
  tempToken: tempToken
254
262
  })
255
263
  }
@@ -258,6 +266,7 @@ export async function login(req: FastifyRequest, reply: FastifyReply) {
258
266
  user = await req.server['userManager'].resetExternalId(user.getId())
259
267
  }
260
268
 
269
+ // https://www.iana.org/assignments/jwt/jwt.xhtml
261
270
  const token = await reply.jwtSign({ sub: user.externalId })
262
271
  const refreshToken = reply.server.jwt['refreshToken']
263
272
  ? await reply.server.jwt['refreshToken'].sign({ sub: user.externalId })
@@ -379,7 +388,25 @@ export async function mfaEnable(req: FastifyRequest, reply: FastifyReply) {
379
388
  await req.server['userManager'].saveMfaSecret(user.getId(), secret)
380
389
  await req.server['userManager'].enableMfa(user.getId())
381
390
 
382
- return { ok: true }
391
+ // IMPORTANT: Return full tokens upon enablement if user was in pending state
392
+ // BUT usually user is already logged in via temp token or full token.
393
+ // If user is setting up from "Forced Setup", they need tokens now.
394
+
395
+ const finalToken = await reply.jwtSign({ sub: user.externalId })
396
+ const refreshToken = reply.server.jwt['refreshToken']
397
+ ? await reply.server.jwt['refreshToken'].sign({ sub: user.externalId })
398
+ : undefined
399
+
400
+ return {
401
+ ok: true,
402
+ token: finalToken,
403
+ refreshToken: refreshToken,
404
+ user: {
405
+ ...user,
406
+ mfaEnabled: true,
407
+ roles: (user.roles || [global.role?.public?.code || 'public']).map((r) => r?.code || r)
408
+ }
409
+ }
383
410
  } catch (error: any) {
384
411
  req.log.error({ err: error }, 'MFA Enable failed')
385
412
  return reply.status(500).send(new Error('Failed to enable MFA'))
@@ -394,7 +421,7 @@ export async function mfaVerify(req: FastifyRequest, reply: FastifyReply) {
394
421
  let decoded: any
395
422
  try {
396
423
  decoded = req.server.jwt.verify(tokenStr)
397
- } catch (e) {
424
+ } catch (_e) {
398
425
  return reply.status(401).send(new Error('Invalid token'))
399
426
  }
400
427
 
@@ -438,6 +465,11 @@ export async function mfaDisable(req: FastifyRequest, reply: FastifyReply) {
438
465
  const user = req.user
439
466
  if (!user) return reply.status(401).send(new Error('Unauthorized'))
440
467
 
468
+ const { mfa_policy = MfaPolicy.OPTIONAL } = global.config.options || {}
469
+ if (mfa_policy === MfaPolicy.MANDATORY || mfa_policy === MfaPolicy.ONE_WAY) {
470
+ return reply.status(403).send(new Error('MFA disable is not allowed by security policy'))
471
+ }
472
+
441
473
  try {
442
474
  await req.server['userManager'].disableMfa(user.getId())
443
475
  return { ok: true }
@@ -1,6 +1,6 @@
1
1
  import { FastifyReply, FastifyRequest } from 'fastify'
2
2
 
3
- export async function count(req: FastifyRequest, reply: FastifyReply) {
3
+ export async function count(req: FastifyRequest, _reply: FastifyReply) {
4
4
  return await req.server['tokenManager'].countQuery(req.data())
5
5
  }
6
6
 
@@ -87,8 +87,9 @@ export async function block(req: FastifyRequest, reply: FastifyReply) {
87
87
  const { id: userId } = req.parameters()
88
88
  const { reason } = req.data()
89
89
 
90
- const user = await req.server['tokenManager'].blockTokenById(userId, reason)
91
- return { ok: !!user.getId() }
90
+ await req.server['tokenManager'].blockTokenById(userId, reason)
91
+ const token = await req.server['tokenManager'].retrieveTokenById(userId)
92
+ return { ok: !!token.getId() }
92
93
  }
93
94
 
94
95
  export async function unblock(req: FastifyRequest, reply: FastifyReply) {
@@ -99,6 +100,7 @@ export async function unblock(req: FastifyRequest, reply: FastifyReply) {
99
100
  }
100
101
 
101
102
  const { id: userId } = req.parameters()
102
- const user = await req.server['tokenManager'].unblockTokenById(userId)
103
- return { ok: !!user.getId() }
103
+ await req.server['tokenManager'].unblockTokenById(userId)
104
+ const token = await req.server['tokenManager'].retrieveTokenById(userId)
105
+ return { ok: !!token.getId() }
104
106
  }
@@ -1,12 +1,13 @@
1
1
  import { FastifyReply, FastifyRequest } from 'fastify'
2
2
  import type { AuthenticatedUser } from '../../../../types/global.js'
3
+ import { MfaPolicy } from '../../../../types/global.js'
3
4
 
4
- export async function getRoles(req: FastifyRequest, reply: FastifyReply) {
5
+ export async function getRoles(_req: FastifyRequest, reply: FastifyReply) {
5
6
  const allRoles = Object.keys(roles).map((key) => roles[key])
6
7
  return reply.send(allRoles)
7
8
  }
8
9
 
9
- export async function count(req: FastifyRequest, reply: FastifyReply) {
10
+ export async function count(req: FastifyRequest, _reply: FastifyReply) {
10
11
  return req.server['userManager'].countQuery(req.data())
11
12
  }
12
13
 
@@ -26,7 +27,7 @@ export async function create(req: FastifyRequest, reply: FastifyReply) {
26
27
  return reply.status(403).send(Error('Only admins can create users'))
27
28
  }
28
29
 
29
- const { id, ...data } = req.data()
30
+ const { id: _id, ...data } = req.data()
30
31
 
31
32
  if (data.roles && data.roles.includes(roles.admin)) {
32
33
  if (!config.enable || config.options?.allow_multiple_admin !== true) {
@@ -58,7 +59,19 @@ export async function remove(req: FastifyRequest, reply: FastifyReply) {
58
59
 
59
60
  export async function getCurrentUser(req: FastifyRequest, reply: FastifyReply) {
60
61
  const user: AuthenticatedUser | undefined = req.user
61
- return reply.send(user ? { ...user, roles: req.roles() } : {})
62
+ const mfaPolicy = global.config.options?.mfa_policy || MfaPolicy.OPTIONAL
63
+
64
+ return reply.send(
65
+ user
66
+ ? {
67
+ ...user,
68
+ roles: req.roles(),
69
+ securityPolicy: {
70
+ mfaPolicy
71
+ }
72
+ }
73
+ : {}
74
+ )
62
75
  }
63
76
 
64
77
  export async function updateCurrentUser(req: FastifyRequest, reply: FastifyReply) {
@@ -1,10 +1,11 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  'use strict'
2
3
 
3
4
  import { MyContext } from './context.js'
4
5
 
5
6
  const resolvers = {
6
7
  Query: {
7
- helloWorld: (parent: any, args: any, context: MyContext, info: any) => context.greeting
8
+ helloWorld: (_parent: any, _args: any, context: MyContext, _info: any) => context.greeting
8
9
  }
9
10
  }
10
11
 
@@ -5,6 +5,7 @@ export default {
5
5
  allow_multiple_admin: false,
6
6
  reset_external_id_on_login: false,
7
7
  scheduler: false,
8
- embedded_auth: true
8
+ embedded_auth: true,
9
+ mfa_policy: process.env.MFA_POLICY || 'OPTIONAL' // OPTIONAL, MANDATORY, ONE_WAY
9
10
  }
10
11
  }
@@ -1,8 +1,9 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import { FastifyRequest, FastifyReply } from 'fastify'
2
3
 
3
- export default async (req: FastifyRequest, reply: FastifyReply, error: any) => {
4
- log.e && log.error(`${error?.message || error}`)
5
- log.t && log.trace(error)
4
+ export default async (_req: FastifyRequest, reply: FastifyReply, error: any) => {
5
+ if (log.e) log.error(`${error?.message || error}`)
6
+ if (log.t) log.trace(error)
6
7
 
7
8
  if (error.statusCode && error.statusCode >= 400) {
8
9
  return reply.code(error.statusCode).send(error)
@@ -1,36 +1,32 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  import { getParams, getData } from '../util/common.js'
2
3
  import type { AuthenticatedUser, AuthenticatedToken, Role } from '../../types/global.js'
3
4
 
4
5
  const { embedded_auth = true } = global.config?.options || {}
5
6
 
7
+ const MFA_SETUP_WHITELIST = ['/auth/mfa/setup', '/auth/mfa/enable', '/auth/mfa/verify', '/auth/logout']
8
+
6
9
  const normalizeRoles = (rolesArray: any[] | undefined): string[] => {
7
10
  if (!rolesArray || rolesArray.length === 0) {
8
11
  return [roles.public.code]
9
12
  }
10
-
11
- // Check the type of the first element to determine the array's structure
12
13
  const firstElement = rolesArray[0]
13
14
  if (typeof firstElement === 'string') {
14
15
  return rolesArray as string[]
15
16
  }
16
-
17
17
  if (typeof firstElement === 'object' && firstElement !== null && 'code' in firstElement) {
18
18
  return rolesArray.map((role: Role) => role.code)
19
19
  }
20
-
21
- // Fallback for unexpected formats
22
20
  return [roles.public.code]
23
21
  }
24
22
 
25
23
  export default async (req, reply) => {
26
- log.i && (req.startedAt = new Date())
24
+ if (log.i) req.startedAt = new Date()
27
25
 
28
- // Request enrichment
29
26
  req.data = () => getData(req)
30
27
  req.parameters = () => getParams(req)
31
28
 
32
29
  if (embedded_auth) {
33
- // Initialize role helpers with a default 'public' role
34
30
  req.roles = () => [roles.public.code]
35
31
  req.hasRole = (r: Role) => req.roles().includes(r?.code)
36
32
 
@@ -41,6 +37,22 @@ export default async (req, reply) => {
41
37
  if (prefix === 'Bearer' && bearerToken != null) {
42
38
  try {
43
39
  const tokenData = reply.server.jwt.verify(bearerToken)
40
+
41
+ // --- MFA GATEKEEPER ---
42
+ if (tokenData.role === 'pre-auth-mfa') {
43
+ const currentUrl = req.routeOptions.url || req.raw.url
44
+ const isAllowed = MFA_SETUP_WHITELIST.some((url) => currentUrl.endsWith(url))
45
+
46
+ if (!isAllowed) {
47
+ if (log.w) log.warn(`Security Block: User attempted to access ${currentUrl} with pre-auth MFA token`)
48
+ return reply.status(403).send({
49
+ statusCode: 403,
50
+ code: 'MFA_REQUIRED',
51
+ message: 'MFA verification or setup required to access this resource'
52
+ })
53
+ }
54
+ }
55
+
44
56
  const subjectId = tokenData?.sub
45
57
 
46
58
  if (!subjectId) {
@@ -50,7 +62,6 @@ export default async (req, reply) => {
50
62
  let user: null | AuthenticatedUser = null
51
63
  let token: null | AuthenticatedToken = null
52
64
 
53
- // Attempt to retrieve user only if userManager is implemented
54
65
  if (req.server['userManager']?.isImplemented()) {
55
66
  user = await req.server['userManager'].retrieveUserByExternalId(subjectId)
56
67
  if (user) {
@@ -64,7 +75,6 @@ export default async (req, reply) => {
64
75
  }
65
76
  }
66
77
 
67
- // Attempt to retrieve token if user was not found and tokenManager is implemented
68
78
  if (!user && req.server['tokenManager']?.isImplemented()) {
69
79
  token = await req.server['tokenManager'].retrieveTokenByExternalId(subjectId)
70
80
  if (token) {
@@ -82,7 +92,6 @@ export default async (req, reply) => {
82
92
  return reply.status(404).send({ statusCode: 404, code: 'SUBJECT_NOT_FOUND', message: 'Subject not found' })
83
93
  }
84
94
 
85
- // Re-normalize roles now that req.user or req.token is populated
86
95
  const freshNormalizedRoles = normalizeRoles(req.user?.roles || req.token?.roles)
87
96
  req.roles = () => freshNormalizedRoles
88
97
  } catch (error) {
@@ -97,15 +106,13 @@ export default async (req, reply) => {
97
106
  }
98
107
  }
99
108
 
100
- // Role-Based Access Control (RBAC) check
101
109
  if (cfg.requiredRoles?.length > 0) {
102
110
  const { method = '', url = '', requiredRoles } = cfg
103
111
  const authorizedRoles: string[] = req.roles()
104
-
105
112
  const hasPermission = requiredRoles.some((r) => authorizedRoles.includes(r.code))
106
113
 
107
114
  if (!hasPermission) {
108
- log.w && log.warn(`Forbidden: ${req.user?.email || 'anonymous'} cannot call ${method.toUpperCase()} ${url}`)
115
+ if (log.w) log.warn(`Forbidden: ${req.user?.email || 'anonymous'} cannot call ${method.toUpperCase()} ${url}`)
109
116
  return reply.status(403).send({ statusCode: 403, code: 'FORBIDDEN', message: 'Authorization denied' })
110
117
  }
111
118
  }
@@ -1,15 +1,21 @@
1
1
  export default async (req, reply) => {
2
- let extraMessage: string = ''
2
+ let extraMessage = ''
3
3
  if (log.i && req.startedAt) {
4
4
  const elapsed: number = new Date().getTime() - req.startedAt.getTime()
5
5
  extraMessage = `(${elapsed}ms)`
6
6
  }
7
7
  if (log.t) {
8
- const reqSize: string = `req ${req.payloadSize || 0}`
9
- const replySize: string = reply.payloadSize > 0 ? ` res ${reply.payloadSize}` : ''
8
+ const reqSize = `req ${req.payloadSize || 0}`
9
+ const replySize = reply.payloadSize > 0 ? ` res ${reply.payloadSize}` : ''
10
10
  extraMessage += `[${reqSize}${replySize} bytes]`
11
11
  }
12
12
 
13
13
  const message = () => `${req.method} ${req.url} ${reply.statusCode} ${extraMessage}`.trim()
14
- reply.statusCode < 300 ? log.info(message()) : reply.statusCode < 400 ? log.warn(message()) : log.error(message())
14
+ if (reply.statusCode < 300) {
15
+ log.info(message())
16
+ } else if (reply.statusCode < 400) {
17
+ log.warn(message())
18
+ } else {
19
+ log.error(message())
20
+ }
15
21
  }
@@ -17,7 +17,7 @@ export async function load() {
17
17
  const patterns = normalizePatterns(['..', 'config', 'general.{ts,js}'], ['src', 'config', 'general.{ts,js}'])
18
18
 
19
19
  for (const pattern of patterns) {
20
- log.t && log.trace('Looking for ' + pattern)
20
+ if (log.t) log.trace('Looking for ' + pattern)
21
21
  const files = globSync(pattern, { windowsPathsNoEscape: true })
22
22
 
23
23
  for (const f of files) {
@@ -34,6 +34,6 @@ export async function load() {
34
34
  }
35
35
  }
36
36
 
37
- log.d && log.debug('General configuration loaded')
37
+ if (log.d) log.debug('General configuration loaded')
38
38
  return generalConfig
39
39
  }
@@ -1,3 +1,5 @@
1
+ /* eslint-disable @typescript-eslint/no-unsafe-function-type */
2
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
3
  import { normalizePatterns } from '../util/path.js'
2
4
  import { globSync } from 'glob'
3
5
  import path from 'path'
@@ -23,7 +25,7 @@ export async function apply(server: any): Promise<void> {
23
25
  const allHooks: any = hooks.reduce((acc, v) => ({ ...acc, [v]: [] as Function[] }), {})
24
26
 
25
27
  for (const pattern of patterns) {
26
- log.t && log.trace('Looking for ' + pattern)
28
+ if (log.t) log.trace('Looking for ' + pattern)
27
29
  const files = globSync(pattern, { windowsPathsNoEscape: true })
28
30
 
29
31
  for (const f of files) {
@@ -44,9 +46,9 @@ export async function apply(server: any): Promise<void> {
44
46
 
45
47
  hooks.map((hookName) => {
46
48
  const fns: Function[] = allHooks[hookName]
47
- log.t && log.trace(`* Add ${fns?.length || 0} hooks for ${hookName}`)
48
- fns?.length > 0 && fns.map((fn) => server.addHook(hookName, fn as Function))
49
+ if (log.t) log.trace(`* Add ${fns?.length || 0} hooks for ${hookName}`)
50
+ if (fns?.length > 0) fns.map((fn) => server.addHook(hookName, fn as Function))
49
51
  })
50
52
 
51
- log.d && log.debug(`Hooks loaded: ${hooks?.length || 0}`)
53
+ if (log.d) log.debug(`Hooks loaded: ${hooks?.length || 0}`)
52
54
  }