@opengis/fcore 0.0.1-beta.1 → 0.0.1-beta.11

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 (248) hide show
  1. package/LICENSE +3 -3
  2. package/README.md +71 -71
  3. package/dist/config.d.ts +2 -10
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +1 -1
  6. package/dist/context.js +1 -1
  7. package/dist/errors.js +1 -1
  8. package/dist/fastify.d.ts +5 -5
  9. package/dist/fastify.d.ts.map +1 -1
  10. package/dist/fastify.js +1 -1
  11. package/dist/fcore.js +1 -1
  12. package/dist/index.d.ts +1 -0
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/migrations/cli.js +1 -1
  16. package/dist/migrations/runner.js +1 -1
  17. package/dist/modules/auth/adduser-cli.d.ts +3 -0
  18. package/dist/modules/auth/adduser-cli.d.ts.map +1 -0
  19. package/dist/modules/auth/adduser-cli.js +2 -0
  20. package/dist/modules/auth/passwd-cli.d.ts +3 -0
  21. package/dist/modules/auth/passwd-cli.d.ts.map +1 -0
  22. package/dist/modules/auth/passwd-cli.js +2 -0
  23. package/dist/modules/auth/permission-cli.d.ts +3 -0
  24. package/dist/modules/auth/permission-cli.d.ts.map +1 -0
  25. package/dist/modules/auth/permission-cli.js +2 -0
  26. package/dist/modules/auth/route.d.ts.map +1 -1
  27. package/dist/modules/auth/route.js +1 -1
  28. package/dist/modules/auth/schema.d.ts +10 -1
  29. package/dist/modules/auth/schema.d.ts.map +1 -1
  30. package/dist/modules/auth/schema.js +1 -1
  31. package/dist/modules/auth/services/change-password.d.ts +9 -0
  32. package/dist/modules/auth/services/change-password.d.ts.map +1 -0
  33. package/dist/modules/auth/services/change-password.js +1 -0
  34. package/dist/modules/auth/services/get-current-user.d.ts +1 -0
  35. package/dist/modules/auth/services/get-current-user.d.ts.map +1 -1
  36. package/dist/modules/auth/services/get-current-user.js +1 -1
  37. package/dist/modules/auth/services/registration.d.ts +14 -0
  38. package/dist/modules/auth/services/registration.d.ts.map +1 -0
  39. package/dist/modules/auth/services/registration.js +1 -0
  40. package/dist/modules/auth/services/verify-two-factor.js +1 -1
  41. package/dist/modules/file/mime.d.ts +3 -0
  42. package/dist/modules/file/mime.d.ts.map +1 -0
  43. package/dist/modules/file/mime.js +1 -0
  44. package/dist/modules/file/route.d.ts.map +1 -1
  45. package/dist/modules/file/route.js +1 -1
  46. package/dist/modules/file/schema.d.ts +3 -0
  47. package/dist/modules/file/schema.d.ts.map +1 -1
  48. package/dist/modules/file/schema.js +1 -1
  49. package/dist/modules/file/services/get-file.js +1 -1
  50. package/dist/modules/file/services/resize-file.d.ts.map +1 -1
  51. package/dist/modules/file/services/resize-file.js +1 -1
  52. package/dist/modules/file/services/upload-file.d.ts +4 -6
  53. package/dist/modules/file/services/upload-file.d.ts.map +1 -1
  54. package/dist/modules/file/services/upload-file.js +1 -1
  55. package/dist/modules/resource/route.d.ts +0 -3
  56. package/dist/modules/resource/route.d.ts.map +1 -1
  57. package/dist/modules/resource/route.js +1 -1
  58. package/dist/modules/resource/schema.d.ts +3 -0
  59. package/dist/modules/resource/schema.d.ts.map +1 -1
  60. package/dist/modules/resource/schema.js +1 -1
  61. package/dist/modules/resource/services/add-note.js +1 -1
  62. package/dist/modules/resource/services/add-resource-file.js +1 -1
  63. package/dist/modules/resource/services/create-resource-relation.d.ts +8 -2
  64. package/dist/modules/resource/services/create-resource-relation.d.ts.map +1 -1
  65. package/dist/modules/resource/services/create-resource-relation.js +1 -1
  66. package/dist/modules/resource/services/create-resource.js +1 -1
  67. package/dist/modules/resource/services/delete-resource-relation.d.ts +8 -1
  68. package/dist/modules/resource/services/delete-resource-relation.d.ts.map +1 -1
  69. package/dist/modules/resource/services/delete-resource-relation.js +1 -1
  70. package/dist/modules/resource/services/delete-resource.js +1 -1
  71. package/dist/modules/resource/services/export-resource.d.ts.map +1 -1
  72. package/dist/modules/resource/services/export-resource.js +1 -1
  73. package/dist/modules/resource/services/get-resource.d.ts.map +1 -1
  74. package/dist/modules/resource/services/get-resource.js +1 -1
  75. package/dist/modules/resource/services/list-resource-relation.d.ts +9 -2
  76. package/dist/modules/resource/services/list-resource-relation.d.ts.map +1 -1
  77. package/dist/modules/resource/services/list-resource-relation.js +1 -1
  78. package/dist/modules/resource/services/list-resources.d.ts.map +1 -1
  79. package/dist/modules/resource/services/list-resources.js +1 -1
  80. package/dist/modules/resource/services/search-resource.d.ts.map +1 -1
  81. package/dist/modules/resource/services/search-resource.js +1 -1
  82. package/dist/modules/resource/services/suggest-resource.d.ts +10 -4
  83. package/dist/modules/resource/services/suggest-resource.d.ts.map +1 -1
  84. package/dist/modules/resource/services/suggest-resource.js +1 -1
  85. package/dist/modules/resource/services/update-resource-relation.d.ts +10 -0
  86. package/dist/modules/resource/services/update-resource-relation.d.ts.map +1 -0
  87. package/dist/modules/resource/services/update-resource-relation.js +1 -0
  88. package/dist/modules/resource/services/update-resource.js +1 -1
  89. package/dist/modules/resource/services/upload-resource-file.js +1 -1
  90. package/dist/modules/system/route.d.ts +2 -1
  91. package/dist/modules/system/route.d.ts.map +1 -1
  92. package/dist/modules/system/route.js +1 -1
  93. package/dist/modules/system/schema.d.ts +22 -1
  94. package/dist/modules/system/schema.d.ts.map +1 -1
  95. package/dist/modules/system/schema.js +1 -1
  96. package/dist/modules/system/services/check-system.d.ts.map +1 -1
  97. package/dist/modules/system/services/check-system.js +1 -1
  98. package/dist/modules/system/services/get-access.d.ts +14 -0
  99. package/dist/modules/system/services/get-access.d.ts.map +1 -0
  100. package/dist/modules/system/services/get-access.js +1 -0
  101. package/dist/modules/system/services/get-api-list.d.ts +4 -1
  102. package/dist/modules/system/services/get-api-list.d.ts.map +1 -1
  103. package/dist/modules/system/services/get-api-list.js +1 -1
  104. package/dist/modules/system/services/get-audit-log.d.ts.map +1 -1
  105. package/dist/modules/system/services/get-audit-log.js +1 -1
  106. package/dist/modules/system/services/get-dictionary.js +1 -1
  107. package/dist/modules/system/services/get-system-log.d.ts +9 -5
  108. package/dist/modules/system/services/get-system-log.d.ts.map +1 -1
  109. package/dist/modules/system/services/get-system-log.js +1 -1
  110. package/dist/modules/system/services/get-system-settings.d.ts.map +1 -1
  111. package/dist/modules/system/services/get-system-settings.js +1 -1
  112. package/dist/modules/system/services/list-dictionaries.js +1 -1
  113. package/dist/modules/system/services/set-access.d.ts +16 -0
  114. package/dist/modules/system/services/set-access.d.ts.map +1 -0
  115. package/dist/modules/system/services/set-access.js +1 -0
  116. package/dist/modules/system/services/update-dictionary.d.ts +13 -0
  117. package/dist/modules/system/services/update-dictionary.d.ts.map +1 -0
  118. package/dist/modules/system/services/update-dictionary.js +1 -0
  119. package/dist/modules/system/services/update-system-settings.d.ts.map +1 -1
  120. package/dist/modules/system/services/update-system-settings.js +1 -1
  121. package/dist/modules/utils/require-admin.js +1 -1
  122. package/dist/modules/utils/safe-user.js +1 -1
  123. package/dist/modules/utils/unsupported.js +1 -1
  124. package/dist/plugins/audit/audit.js +1 -1
  125. package/dist/plugins/audit/index.js +1 -1
  126. package/dist/plugins/audit/services/write-audit.js +1 -1
  127. package/dist/plugins/auth/get-user-permissions.d.ts +3 -0
  128. package/dist/plugins/auth/get-user-permissions.d.ts.map +1 -0
  129. package/dist/plugins/auth/get-user-permissions.js +1 -0
  130. package/dist/plugins/auth/index.d.ts +4 -0
  131. package/dist/plugins/auth/index.d.ts.map +1 -1
  132. package/dist/plugins/auth/index.js +1 -1
  133. package/dist/plugins/auth/verifyUser.d.ts +9 -0
  134. package/dist/plugins/auth/verifyUser.d.ts.map +1 -0
  135. package/dist/plugins/auth/verifyUser.js +1 -0
  136. package/dist/plugins/dictionary.d.ts +3 -0
  137. package/dist/plugins/dictionary.d.ts.map +1 -1
  138. package/dist/plugins/dictionary.js +1 -1
  139. package/dist/plugins/file.d.ts +3 -6
  140. package/dist/plugins/file.d.ts.map +1 -1
  141. package/dist/plugins/file.js +1 -1
  142. package/dist/plugins/index.d.ts +2 -0
  143. package/dist/plugins/index.d.ts.map +1 -1
  144. package/dist/plugins/index.js +1 -1
  145. package/dist/plugins/jwt.d.ts +4 -0
  146. package/dist/plugins/jwt.d.ts.map +1 -0
  147. package/dist/plugins/jwt.js +1 -0
  148. package/dist/plugins/logger/index.js +1 -1
  149. package/dist/plugins/logger/transport.d.ts +3 -0
  150. package/dist/plugins/logger/transport.d.ts.map +1 -0
  151. package/dist/plugins/logger/transport.js +1 -0
  152. package/dist/plugins/pg.d.ts +4 -2
  153. package/dist/plugins/pg.d.ts.map +1 -1
  154. package/dist/plugins/pg.js +1 -1
  155. package/dist/plugins/redis.js +1 -1
  156. package/dist/plugins/resource/index.js +1 -1
  157. package/dist/plugins/resource/resource.d.ts.map +1 -1
  158. package/dist/plugins/resource/resource.js +1 -1
  159. package/dist/plugins/resource/resource.registry.js +1 -1
  160. package/dist/plugins/resource/resource.types.d.ts +65 -8
  161. package/dist/plugins/resource/resource.types.d.ts.map +1 -1
  162. package/dist/plugins/resource/services/add-dictionary-lookup-data.d.ts +3 -0
  163. package/dist/plugins/resource/services/add-dictionary-lookup-data.d.ts.map +1 -0
  164. package/dist/plugins/resource/services/add-dictionary-lookup-data.js +1 -0
  165. package/dist/plugins/resource/services/add-file-token.d.ts +3 -0
  166. package/dist/plugins/resource/services/add-file-token.d.ts.map +1 -0
  167. package/dist/plugins/resource/services/add-file-token.js +1 -0
  168. package/dist/plugins/resource/services/add-table-lookup-data.d.ts +4 -0
  169. package/dist/plugins/resource/services/add-table-lookup-data.d.ts.map +1 -0
  170. package/dist/plugins/resource/services/add-table-lookup-data.js +1 -0
  171. package/dist/plugins/resource/services/create-relation.d.ts +16 -0
  172. package/dist/plugins/resource/services/create-relation.d.ts.map +1 -0
  173. package/dist/plugins/resource/services/create-relation.js +1 -0
  174. package/dist/plugins/resource/services/create.d.ts +5 -2
  175. package/dist/plugins/resource/services/create.d.ts.map +1 -1
  176. package/dist/plugins/resource/services/create.js +1 -1
  177. package/dist/plugins/resource/services/delete-relation.d.ts +18 -0
  178. package/dist/plugins/resource/services/delete-relation.d.ts.map +1 -0
  179. package/dist/plugins/resource/services/delete-relation.js +1 -0
  180. package/dist/plugins/resource/services/delete.d.ts +9 -2
  181. package/dist/plugins/resource/services/delete.d.ts.map +1 -1
  182. package/dist/plugins/resource/services/delete.js +1 -1
  183. package/dist/plugins/resource/services/find-one.d.ts +3 -2
  184. package/dist/plugins/resource/services/find-one.d.ts.map +1 -1
  185. package/dist/plugins/resource/services/find-one.js +1 -1
  186. package/dist/plugins/resource/services/find-relation.d.ts +13 -0
  187. package/dist/plugins/resource/services/find-relation.d.ts.map +1 -0
  188. package/dist/plugins/resource/services/find-relation.js +1 -0
  189. package/dist/plugins/resource/services/find.d.ts.map +1 -1
  190. package/dist/plugins/resource/services/find.js +1 -1
  191. package/dist/plugins/resource/services/update-relation.d.ts +14 -0
  192. package/dist/plugins/resource/services/update-relation.d.ts.map +1 -0
  193. package/dist/plugins/resource/services/update-relation.js +1 -0
  194. package/dist/plugins/resource/services/update.d.ts +9 -2
  195. package/dist/plugins/resource/services/update.d.ts.map +1 -1
  196. package/dist/plugins/resource/services/update.js +1 -1
  197. package/dist/plugins/resource/utils/auto-index.d.ts +4 -0
  198. package/dist/plugins/resource/utils/auto-index.d.ts.map +1 -0
  199. package/dist/plugins/resource/utils/auto-index.js +1 -0
  200. package/dist/plugins/resource/utils/fields.d.ts +8 -1
  201. package/dist/plugins/resource/utils/fields.d.ts.map +1 -1
  202. package/dist/plugins/resource/utils/fields.js +1 -1
  203. package/dist/plugins/resource/utils/filters.d.ts +3 -2
  204. package/dist/plugins/resource/utils/filters.d.ts.map +1 -1
  205. package/dist/plugins/resource/utils/filters.js +1 -1
  206. package/dist/plugins/resource/utils/permissions.d.ts.map +1 -1
  207. package/dist/plugins/resource/utils/permissions.js +1 -1
  208. package/dist/plugins/resource/utils/sort.d.ts.map +1 -1
  209. package/dist/plugins/resource/utils/sort.js +1 -1
  210. package/dist/plugins/resource/utils/sql.js +1 -1
  211. package/dist/shared/getIP.js +1 -1
  212. package/dist/type.d.ts +37 -0
  213. package/dist/type.d.ts.map +1 -0
  214. package/dist/type.js +1 -0
  215. package/migrations/20260903120000_core_schema.sql +27 -21
  216. package/migrations/20260903130000_move_notes_files_to_admin.sql +17 -17
  217. package/migrations/20260903130001_add_file_fields.sql +5 -0
  218. package/migrations/20260903140000_settings_nulls_not_distinct.sql +18 -18
  219. package/migrations/20260905120000_add_user_foreign_keys.sql +43 -0
  220. package/migrations/20260907090000_core_schema.sql +32 -0
  221. package/package.json +12 -7
  222. package/dist/modules/auth/index.d.ts +0 -9
  223. package/dist/modules/auth/index.d.ts.map +0 -1
  224. package/dist/modules/auth/index.js +0 -1
  225. package/dist/modules/auth/services/login.d.ts +0 -10
  226. package/dist/modules/auth/services/login.d.ts.map +0 -1
  227. package/dist/modules/auth/services/login.js +0 -1
  228. package/dist/modules/auth/services/logout.d.ts +0 -9
  229. package/dist/modules/auth/services/logout.d.ts.map +0 -1
  230. package/dist/modules/auth/services/logout.js +0 -1
  231. package/dist/modules/auth/services/verifyPassword.d.ts +0 -11
  232. package/dist/modules/auth/services/verifyPassword.d.ts.map +0 -1
  233. package/dist/modules/auth/services/verifyPassword.js +0 -1
  234. package/dist/modules/file/index.d.ts +0 -8
  235. package/dist/modules/file/index.d.ts.map +0 -1
  236. package/dist/modules/file/index.js +0 -1
  237. package/dist/modules/resource/index.d.ts +0 -20
  238. package/dist/modules/resource/index.d.ts.map +0 -1
  239. package/dist/modules/resource/index.js +0 -1
  240. package/dist/modules/resource/services/list-children.d.ts +0 -6
  241. package/dist/modules/resource/services/list-children.d.ts.map +0 -1
  242. package/dist/modules/resource/services/list-children.js +0 -1
  243. package/dist/modules/system/index.d.ts +0 -13
  244. package/dist/modules/system/index.d.ts.map +0 -1
  245. package/dist/modules/system/index.js +0 -1
  246. package/dist/modules/utils/get-user-permissions.d.ts +0 -3
  247. package/dist/modules/utils/get-user-permissions.d.ts.map +0 -1
  248. package/dist/modules/utils/get-user-permissions.js +0 -1
@@ -0,0 +1 @@
1
+ export async function updateResourceRelation(R,t){const {resource:X,id:g,relation:m,relationId:Z,data:z,user:l}=R;return t['resource']['updateRelation']({'name':X,'id':g,'relation':m,'relationId':Z,'data':z,'user':l});}
@@ -1 +1 @@
1
- (function(D,L){var R=p,s=D();while(!![]){try{var X=parseInt(R(0xf3))/0x1*(parseInt(R(0xf0))/0x2)+parseInt(R(0xf1))/0x3*(-parseInt(R(0xf8))/0x4)+parseInt(R(0xfe))/0x5+-parseInt(R(0xf7))/0x6+parseInt(R(0xf2))/0x7*(parseInt(R(0xf4))/0x8)+-parseInt(R(0x101))/0x9*(-parseInt(R(0xfc))/0xa)+parseInt(R(0xff))/0xb*(-parseInt(R(0x100))/0xc);if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0x6a377));export async function updateResource(L,s){var B=p,X={};return X[B(0xfb)]=L[B(0xfa)],X['id']=L['id'],X[B(0xf5)]=L[B(0xfd)],X[B(0xf6)]=L[B(0xf6)],s[B(0xfa)][B(0xf9)](X);}function p(D,L){D=D-0xf0;var s=m();var X=s[D];return X;}function m(){var O=['77cRUPrh','131EAmPuy','460536RCCqyI','data','user','2201778dsVeGS','8rMwqQO','update','resource','name','4323010zmlArp','patch','2865475TBLRif','11igtcDb','5532432HnzXwc','9UHfmQM','1266jtfDNZ','687741GhigbB'];m=function(){return O;};return m();}
1
+ export async function updateResource(R,t){var X=q;return t['resource']['update']({'name':R[X(0x159)],'id':R['id'],'data':R[X(0x15a)],'user':R['user']});}function q(R,t){R=R-0x159;var X=G();var g=X[R];return g;}function G(){var g=['resource','patch'];G=function(){return g;};return G();}
@@ -1 +1 @@
1
- (function(D,L){const q=p,s=D();while(!![]){try{const X=-parseInt(q(0x18e))/0x1*(parseInt(q(0x189))/0x2)+-parseInt(q(0x1a7))/0x3*(parseInt(q(0x187))/0x4)+-parseInt(q(0x183))/0x5*(parseInt(q(0x1a6))/0x6)+parseInt(q(0x17d))/0x7*(-parseInt(q(0x19f))/0x8)+-parseInt(q(0x1a5))/0x9+parseInt(q(0x18d))/0xa+-parseInt(q(0x185))/0xb*(-parseInt(q(0x184))/0xc);if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0x9b3e0));function m(){const B=['\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.files\x20(resource,\x20resource_id,\x20file_path,\x20size)\x0a\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20','fileName','query','wzZYl','files/','put','File\x20name\x20is\x20required','length','file','exists','Uploaded\x20file\x20not\x20found','name','Missing\x20permission:\x20','includes','2776IzfJEe','permissions','POOxR','isBuffer','File\x20is\x20required','LZDeQ','2742318VpBMab','456ldNBAR','3AngFiV','yQnKf','UnjSY','QiVnt',':update','rows','HeUQz','ZUGfJ','resource','access','pVBEh','Ilhcc','20727IcaFGK','ZfsRL','user','type','wxKWF','replace','535SGIIiC','29981868bUgTXb','11ZmHaJD','WpwPs','3252056eDfcFT','admin','11748QiwKTO','oXUQJ','permission','Admin\x20access\x20required','4140520cVUkhl','21NVaroi','get','xnWYP'];m=function(){return B;};return m();}function p(D,L){D=D-0x179;const s=m();let X=s[D];return X;}import{ForbiddenError,NotFoundError,ValidationError}from'../../../errors.js';export async function uploadResourceFile(D,L){const R=p,s={'POOxR':R(0x18c),'QiVnt':R(0x197),'HeUQz':R(0x188),'UnjSY':function(r,i){return r!==i;},'oXUQJ':function(r,i){return r===i;},'wxKWF':R(0x1a8),'ZUGfJ':R(0x1a3),'wzZYl':R(0x1a4),'pVBEh':R(0x186),'xnWYP':function(r,i){return r(i);},'Ilhcc':R(0x19b),'ZfsRL':function(r,i){return r(i);}},X=L[R(0x179)][R(0x18f)](D[R(0x179)]);if(X[R(0x17a)]===s[R(0x1ad)]&&s[R(0x1a9)](D[R(0x17f)]?.[R(0x180)],R(0x188))){if(s[R(0x18a)](s[R(0x181)],R(0x1a8)))throw new ForbiddenError(s[R(0x1a1)]);else throw new L(s[R(0x1a1)]);}if(s[R(0x1a9)](D[R(0x17f)]?.[R(0x180)],s[R(0x1ad)])&&!D[R(0x17f)]?.[R(0x1a0)]?.[R(0x19e)]((X[R(0x18b)]??X[R(0x19c)])+R(0x1ab)))throw new ForbiddenError(R(0x19d)+(X[R(0x18b)]??X[R(0x19c)])+R(0x1ab));if(!Buffer[R(0x1a2)](D[R(0x199)])||D[R(0x199)][R(0x198)]===0x0)throw new ValidationError(s[R(0x1ae)]);const M=D[R(0x192)][R(0x182)](/[^A-Za-z0-9._-]/g,'_');if(!M){if(s[R(0x1a9)](s[R(0x194)],s[R(0x17b)]))throw new ValidationError(R(0x197));else throw new L(s[R(0x1aa)]);}const u=R(0x195)+D[R(0x179)]+'/'+s[R(0x190)](String,D['id'])+'/'+M;await L[R(0x199)][R(0x196)](u,D[R(0x199)]);if(!await L[R(0x199)][R(0x19a)](u))throw new NotFoundError(s[R(0x17c)]);const o=await L['pg'][R(0x193)](R(0x191),[D[R(0x179)],s[R(0x17e)](String,D['id']),u,D[R(0x199)][R(0x198)]]);return o[R(0x1ac)][0x0];}
1
+ function G(){const l=['get','resource','admin','type','user','permission',':update','length','fileName','File\x20name\x20is\x20required','put','query'];G=function(){return l;};return G();}function q(R,t){R=R-0xc3;const X=G();let g=X[R];return g;}import{ForbiddenError,NotFoundError,ValidationError}from'../../../errors.js';export async function uploadResourceFile(R,t){const z=q,X=t['resource'][z(0xc3)](R[z(0xc4)]);if(X['access']===z(0xc5)&&R['user']?.[z(0xc6)]!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(R['user']?.['type']!=='admin'&&!R[z(0xc7)]?.['permissions']?.['includes']((X[z(0xc8)]??X['name'])+z(0xc9)))throw new ForbiddenError('Missing\x20permission:\x20'+(X[z(0xc8)]??X['name'])+z(0xc9));if(!Buffer['isBuffer'](R['file'])||R['file'][z(0xca)]===0x0)throw new ValidationError('File\x20is\x20required');const g=R[z(0xcb)]['replace'](/[^A-Za-z0-9._-]/g,'_');if(!g)throw new ValidationError(z(0xcc));const m='files/'+R['resource']+'/'+String(R['id'])+'/'+g;await t['file'][z(0xcd)](m,R['file']);if(!await t['file']['exists'](m))throw new NotFoundError('Uploaded\x20file\x20not\x20found');const Z=await t['pg'][z(0xce)]('\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.files\x20(resource,\x20resource_id,\x20file_path,\x20size)\x0a\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*\x0a\x20\x20\x20\x20',[R['resource'],String(R['id']),m,R['file']['length']]);return Z['rows'][0x0];}
@@ -3,5 +3,6 @@
3
3
  */
4
4
  import type { FastifyPluginAsync } from "fastify";
5
5
  import type { AppContext } from "../../context.js";
6
- export declare function systemRoutes(ctx: AppContext): FastifyPluginAsync;
6
+ import type { ApiRoute } from "../../type.js";
7
+ export declare function systemRoutes(ctx: AppContext, apiRoutes?: ReadonlyMap<string, ApiRoute>): FastifyPluginAsync;
7
8
  //# sourceMappingURL=route.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/modules/system/route.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAYnD,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,kBAAkB,CAkHhE"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../src/modules/system/route.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAanD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAG9C,wBAAgB,YAAY,CAC1B,GAAG,EAAE,UAAU,EACf,SAAS,GAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAa,GACnD,kBAAkB,CA8JpB"}
@@ -1 +1 @@
1
- function m(){const mw=['params','Returns\x20the\x20system\x20audit\x20log\x20entries.','Returns\x20system\x20logger\x20entries\x20for\x20the\x20requested\x20path.','/api/system/settings','PTFnO','tags','Update\x20system\x20settings','kCeMi','Get\x20platform\x20dictionary','1fvijOh','summary','/api/system/audit/','wlCYQ','/api/dictionaries','180gkorFL','Returns\x20all\x20available\x20dictionaries\x20registered\x20by\x20the\x20platform.','admin','Checks\x20the\x20availability\x20of\x20system\x20dependencies.','system:logs:read','/api/system/logger/*','JHqyK','Check\x20system\x20health','schema','ohEBr','Get\x20system\x20log','4149aJPeYs','whIAW','tQonW','system:api:read','access','2846637OhCIsw','jiChH','1688235QjZMPF','settings','Updates\x20system\x20settings\x20using\x20flat\x20dot-notation\x20keys.','get','post','UpkWj','49dzuwrf','mTFOP','RqrNf','description','Get\x20audit\x20log','523762uvDcWS','/api/system/api-list','XmcOG','DVGsR','2|6|0|3|1|4|7|5','LCZeX','List\x20APIs','GTjtj','KQVGf','List\x20platform\x20dictionaries','dictionaryName','Returns\x20system\x20settings\x20as\x20nested\x20JSON.','Returns\x20a\x20registered\x20platform\x20dictionary\x20by\x20name.','user','system:settings:read','sgcQo','xuaSW','query','body','Get\x20system\x20settings','MZOot','permissions','fcore','kpWbq','/api/dictionaries/:name','1679682WJwHPd','Returns\x20the\x20list\x20of\x20registered\x20platform\x20APIs.','split','cjRZy','audit:read','logger','system:check','system:settings:update','467536LUggGi','rPlAH','wGVCq','626820jOpaoc','system','/api/system/check'];m=function(){return mw;};return m();}const mV=p;(function(D,L){const mA=p,s=D();while(!![]){try{const X=-parseInt(mA(0x19f))/0x1*(parseInt(mA(0x1c1))/0x2)+parseInt(mA(0x1af))/0x3*(parseInt(mA(0x1a4))/0x4)+parseInt(mA(0x1b6))/0x5+parseInt(mA(0x188))/0x6+-parseInt(mA(0x1bc))/0x7*(-parseInt(mA(0x190))/0x8)+-parseInt(mA(0x1b4))/0x9+-parseInt(mA(0x193))/0xa;if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0x6d643));import{getSystemSettings}from'./services/get-system-settings.js';import{updateSystemSettings}from'./services/update-system-settings.js';import{getAuditLog}from'./services/get-audit-log.js';import{checkSystem}from'./services/check-system.js';import{getApiList}from'./services/get-api-list.js';import{getSystemLog}from'./services/get-system-log.js';import{listDictionaries}from'./services/list-dictionaries.js';import{getDictionary}from'./services/get-dictionary.js';function p(D,L){D=D-0x170;const s=m();let X=s[D];return X;}import{systemSchemas}from'./schema.js';const u=D=>D[mV(0x17c)];export function systemRoutes(L){const ma=mV,s={};s[ma(0x1bb)]=ma(0x173),s[ma(0x1bd)]=ma(0x185),s[ma(0x174)]=ma(0x194),s[ma(0x1a2)]=ma(0x182),s[ma(0x171)]=ma(0x17a),s[ma(0x17e)]=ma(0x1a6),s[ma(0x172)]=ma(0x17d),s[ma(0x19a)]=ma(0x1a9),s[ma(0x18b)]=ma(0x1ae),s[ma(0x192)]=ma(0x1a8),s[ma(0x1b1)]=ma(0x1a5),s[ma(0x186)]=ma(0x199),s[ma(0x1aa)]=ma(0x19c),s[ma(0x17f)]=ma(0x1b8),s[ma(0x1b0)]=ma(0x1a1),s[ma(0x19d)]=ma(0x1c0),s[ma(0x191)]=ma(0x197),s[ma(0x183)]=ma(0x170),s[ma(0x1b5)]=ma(0x189),s[ma(0x176)]=ma(0x1b2),s[ma(0x1be)]=ma(0x187),s[ma(0x1ad)]=ma(0x195),s[ma(0x177)]=ma(0x18e);const X=s;return async o=>{const mF=ma,r=X[mF(0x1bb)][mF(0x18a)]('|');let i=0x0;while(!![]){switch(r[i++]){case'0':const q={};q[mF(0x19b)]=[X[mF(0x1bd)],X[mF(0x174)]],q[mF(0x1a0)]=X[mF(0x1a2)],q[mF(0x1bf)]=X[mF(0x171)],q[mF(0x1b3)]=X[mF(0x17e)],q[mF(0x184)]=[X[mF(0x172)]];const R={};R[mF(0x1ac)]=q,o[mF(0x1b9)](mF(0x199),R,async h=>getSystemSettings({...h[mF(0x196)],'user':u(h)},L));continue;case'1':o[mF(0x1b9)](X[mF(0x19a)],{'schema':{'tags':[X[mF(0x1bd)],mF(0x194)],'summary':X[mF(0x18b)],'description':mF(0x198),'access':X[mF(0x17e)],'permissions':[X[mF(0x192)]],'params':systemSchemas[mF(0x18d)]}},async h=>getSystemLog({...h[mF(0x180)],...h[mF(0x196)],'user':u(h)},L));continue;case'2':const B={};B[mF(0x19b)]=[X[mF(0x1bd)],mF(0x194)],B[mF(0x1a0)]=mF(0x178),B[mF(0x1bf)]=X[mF(0x1b1)],B[mF(0x1b3)]=X[mF(0x17e)],B[mF(0x184)]=[];const O={};O[mF(0x1ac)]=B,o[mF(0x1b9)](mF(0x1a3),O,async h=>listDictionaries({'user':u(h)},L));continue;case'3':o[mF(0x1ba)](X[mF(0x186)],{'schema':{'tags':[X[mF(0x1bd)],X[mF(0x174)]],'summary':X[mF(0x1aa)],'description':X[mF(0x17f)],'access':mF(0x1a6),'permissions':[mF(0x18f)],'body':systemSchemas[mF(0x1b7)]}},async h=>updateSystemSettings({...h[mF(0x196)],'patch':h[mF(0x181)],'user':u(h)},L));continue;case'4':o[mF(0x1b9)](X[mF(0x1b0)],{'schema':{'tags':[mF(0x185),mF(0x194)],'summary':X[mF(0x19d)],'description':X[mF(0x191)],'access':X[mF(0x17e)],'permissions':[mF(0x18c)]}},async h=>getAuditLog({...h[mF(0x180)],'user':u(h)},L));continue;case'5':o[mF(0x1b9)](X[mF(0x183)],{'schema':{'tags':[X[mF(0x1bd)],X[mF(0x174)]],'summary':mF(0x175),'description':X[mF(0x1b5)],'access':X[mF(0x17e)],'permissions':[X[mF(0x176)]]}},async h=>getApiList({'user':u(h)},L));continue;case'6':o[mF(0x1b9)](X[mF(0x1be)],{'schema':{'tags':[X[mF(0x1bd)],mF(0x194)],'summary':mF(0x19e),'description':mF(0x17b),'access':X[mF(0x17e)],'permissions':[],'params':systemSchemas[mF(0x179)]}},async h=>getDictionary({...h[mF(0x196)],'user':u(h)},L));continue;case'7':o[mF(0x1b9)](X[mF(0x1ad)],{'schema':{'tags':[X[mF(0x1bd)],X[mF(0x174)]],'summary':mF(0x1ab),'description':mF(0x1a7),'access':X[mF(0x17e)],'permissions':[X[mF(0x177)]]}},async h=>checkSystem({'user':u(h)},L));continue;}break;}};}
1
+ import{getSystemSettings}from'./services/get-system-settings.js';import{updateSystemSettings}from'./services/update-system-settings.js';function q(R,t){R=R-0x97;const X=G();let g=X[R];return g;}import{getAuditLog}from'./services/get-audit-log.js';import{checkSystem}from'./services/check-system.js';import{getApiList}from'./services/get-api-list.js';import{getSystemLog}from'./services/get-system-log.js';function G(){const P=['get','dictionaryName','Replaces\x20the\x20items\x20of\x20a\x20registered\x20platform\x20dictionary.','system:dictionaries','dictionaryItems','params','fcore','system:access','system','system:settings','/api/system/settings','body','user','type','send','/api/system/audit','/api/system/list','List\x20APIs','admin'];G=function(){return P;};return G();}import{getDictionary}from'./services/get-dictionary.js';import{updateDictionary}from'./services/update-dictionary.js';import{getAccess}from'./services/get-access.js';import{setAccess}from'./services/set-access.js';import{systemSchemas}from'./schema.js';const u=R=>R['user'];export function systemRoutes(R,t=new Map()){return async X=>{const y=q;X[y(0x97)]('/api/dictionary/:name',{'schema':{'tags':['fcore','system'],'summary':'Get\x20platform\x20dictionary','description':'Returns\x20a\x20registered\x20platform\x20dictionary\x20by\x20name.','access':'user','permissions':['system:dictionaries'],'params':systemSchemas[y(0x98)]}},async m=>({'items':await getDictionary({...m['params'],'user':u(m)},R)})),X['post']('/api/dictionary/:name',{'schema':{'tags':['fcore','system'],'summary':'Update\x20platform\x20dictionary','description':y(0x99),'access':'user','permissions':[y(0x9a)],'params':systemSchemas['dictionaryName'],'body':systemSchemas[y(0x9b)]}},async m=>updateDictionary({...m[y(0x9c)],...m['body'],'user':u(m)},R));const g=async m=>getAccess({...m['params'],'user':u(m)},R);X['get']('/api/access/:type/:id',{'schema':{'tags':[y(0x9d),'system'],'summary':'Get\x20access\x20rules','description':'Returns\x20direct\x20and\x20role-based\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','access':'admin','permissions':['system:access'],'params':systemSchemas['accessTarget']}},g),X['post']('/api/access/:type/:id',{'schema':{'tags':['fcore','system'],'summary':'Set\x20access\x20rules','description':'Replaces\x20direct\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','access':'admin','permissions':[y(0x9e)],'params':systemSchemas['accessTarget'],'body':systemSchemas['access']}},async m=>setAccess({...m[y(0x9c)],...m['body'],'user':u(m)},R)),X[y(0x97)]('/api/system/settings',{'schema':{'tags':[y(0x9d),y(0x9f)],'summary':'Get\x20system\x20settings','description':'Returns\x20system\x20settings\x20as\x20nested\x20JSON.','access':'admin','permissions':[y(0xa0)]}},async m=>getSystemSettings({...m[y(0x9c)],'user':u(m)},R)),X['post'](y(0xa1),{'schema':{'tags':[y(0x9d),'system'],'summary':'Update\x20system\x20settings','description':'Updates\x20system\x20settings\x20using\x20flat\x20dot-notation\x20keys.','access':'admin','permissions':['system:settings'],'body':systemSchemas['settings']}},async m=>updateSystemSettings({...m[y(0x9c)],'patch':m[y(0xa2)],'user':u(m)},R)),X['get']('/api/system/logger',{'schema':{'tags':['fcore','system'],'summary':'Get\x20system\x20log','description':'Returns\x20system\x20logger\x20entries\x20for\x20the\x20requested\x20path.','access':y(0xa3),'permissions':['system:logs'],'querystring':systemSchemas['logger']}},async(m,Z)=>{const h=y,{contentType:z,body:l}=await getSystemLog({...m['query'],'user':u(m)},R);return Z[h(0xa4)](z)[h(0xa5)](l);}),X[y(0x97)](y(0xa6),{'schema':{'tags':['fcore',y(0x9f)],'summary':'Get\x20audit\x20log','description':'Returns\x20the\x20system\x20audit\x20log\x20entries.','access':'user','permissions':['system:audit']}},async m=>getAuditLog({...m['query'],'user':u(m)},R)),X[y(0x97)]('/api/system/check',{'schema':{'tags':['fcore','system'],'summary':'Check\x20system\x20health','description':'Checks\x20the\x20availability\x20of\x20system\x20dependencies.','access':y(0xa3),'permissions':['system:check']}},async m=>checkSystem({'user':u(m)},R)),X['get'](y(0xa7),{'schema':{'tags':['fcore','system'],'summary':y(0xa8),'description':'Returns\x20the\x20list\x20of\x20registered\x20platform\x20APIs.','access':y(0xa9),'permissions':[],'querystring':systemSchemas['apiListQuery']}},async m=>getApiList({'user':u(m),'apiRoutes':t,...m['query']},R));};}
@@ -3,12 +3,33 @@ export declare const systemSchemas: {
3
3
  dictionaryName: import("@sinclair/typebox").TObject<{
4
4
  name: import("@sinclair/typebox").TString;
5
5
  }>;
6
+ dictionaryItems: import("@sinclair/typebox").TObject<{
7
+ items: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
8
+ id: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNumber]>>;
9
+ code: import("@sinclair/typebox").TString;
10
+ name: import("@sinclair/typebox").TString;
11
+ parentId: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TString, import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TNull]>>;
12
+ }>>;
13
+ }>;
14
+ accessTarget: import("@sinclair/typebox").TObject<{
15
+ type: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"user">, import("@sinclair/typebox").TLiteral<"role">]>;
16
+ id: import("@sinclair/typebox").TString;
17
+ }>;
18
+ access: import("@sinclair/typebox").TObject<{
19
+ access: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
20
+ resource: import("@sinclair/typebox").TString;
21
+ actions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
22
+ }>>;
23
+ }>;
24
+ apiListQuery: import("@sinclair/typebox").TObject<{
25
+ format: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"short">, import("@sinclair/typebox").TLiteral<"extended">]>>;
26
+ }>;
6
27
  settingsEntity: import("@sinclair/typebox").TObject<{
7
28
  entity: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
8
29
  }>;
9
30
  settings: import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TString, import("@sinclair/typebox").TUnknown>;
10
31
  logger: import("@sinclair/typebox").TObject<{
11
- "*": import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
32
+ path: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
12
33
  }>;
13
34
  };
14
35
  //# sourceMappingURL=schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/modules/system/schema.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU,qCAIrB,CAAC;AAEH,eAAO,MAAM,aAAa;IACxB,cAAc;;;IAGd,cAAc;;;IACd,QAAQ;IACR,MAAM;;;CACP,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/modules/system/schema.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU,qCAIrB,CAAC;AAEH,eAAO,MAAM,aAAa;IACxB,cAAc;;;IAGd,eAAe;;;;;;;;IAef,YAAY;;;;IAIZ,MAAM;;;;;;IAQN,YAAY;;;IAGZ,cAAc;;;IACd,QAAQ;IACR,MAAM;;;CAKP,CAAC"}
@@ -1 +1 @@
1
- const R=p;(function(M,u){const q=p,o=M();while(!![]){try{const r=parseInt(q(0xfa))/0x1*(parseInt(q(0xef))/0x2)+-parseInt(q(0xf5))/0x3+-parseInt(q(0xf7))/0x4*(-parseInt(q(0xfc))/0x5)+parseInt(q(0xfb))/0x6*(parseInt(q(0xf0))/0x7)+parseInt(q(0xf1))/0x8+parseInt(q(0xf9))/0x9+-parseInt(q(0xf2))/0xa;if(r===u)break;else o['push'](o['shift']());}catch(i){o['push'](o['shift']());}}}(m,0xf3355));import{Type}from'@sinclair/typebox';const D={};D[R(0x100)]=0x1,D[R(0xf4)]=0x80,D[R(0xee)]=R(0xfd);export const identifier=Type[R(0xf3)](D);const L={};L[R(0xf6)]=identifier;function m(){const B=['245ReWIFw','10012792WxShgn','44799170BeoCAi','String','maxLength','2667543LsbgLi','name','52616raNfyV','Record','17576208JviwiB','433lCaKBL','212124vrdKFM','475SLGoGr','^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$','Unknown','Object','minLength','Optional','pattern','3112wKhEnw'];m=function(){return B;};return m();}const s={};s[R(0x100)]=0x1;const X={};function p(D,L){D=D-0xee;const s=m();let X=s[D];return X;}X[R(0x100)]=0x1;export const systemSchemas={'dictionaryName':Type[R(0xff)](L),'settingsEntity':Type[R(0xff)]({'entity':Type[R(0x101)](identifier)}),'settings':Type[R(0xf8)](Type[R(0xf3)](s),Type[R(0xfe)]()),'logger':Type[R(0xff)]({'*':Type[R(0x101)](Type[R(0xf3)](X))})};
1
+ const R=q;import{Type}from'@sinclair/typebox';function G(){const t=['Object','Optional','Literal','user','Array','String','Record'];G=function(){return t;};return G();}function q(R,t){R=R-0x196;const X=G();let g=X[R];return g;}export const identifier=Type['String']({'minLength':0x1,'maxLength':0x80,'pattern':'^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$'});export const systemSchemas={'dictionaryName':Type[R(0x196)]({'name':identifier}),'dictionaryItems':Type['Object']({'items':Type['Array'](Type['Object']({'id':Type['Optional'](Type['Union']([Type['String'](),Type['Number']()])),'code':Type['String']({'minLength':0x1}),'name':Type['String']({'minLength':0x1}),'parentId':Type[R(0x197)](Type['Union']([Type['String'](),Type['Number'](),Type['Null']()]))},{'additionalProperties':!![]}))}),'accessTarget':Type['Object']({'type':Type['Union']([Type[R(0x198)](R(0x199)),Type['Literal']('role')]),'id':identifier}),'access':Type['Object']({'access':Type['Array'](Type['Object']({'resource':Type['String']({'minLength':0x1,'maxLength':0x80}),'actions':Type[R(0x19a)](Type[R(0x19b)]({'minLength':0x1,'maxLength':0x80}),{'minItems':0x1})}))}),'apiListQuery':Type['Object']({'format':Type['Optional'](Type['Union']([Type['Literal']('short'),Type[R(0x198)]('extended')]))}),'settingsEntity':Type['Object']({'entity':Type['Optional'](identifier)}),'settings':Type[R(0x19c)](Type['String']({'minLength':0x1}),Type['Unknown']()),'logger':Type['Object']({'path':Type[R(0x197)](Type[R(0x19b)]({'maxLength':0x100,'pattern':'^[A-Za-z0-9_.\x5c-/]*$'}))})};
@@ -1 +1 @@
1
- {"version":3,"file":"check-system.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/check-system.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAsB,WAAW,CAC/B,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;CACZ,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,CAiBd"}
1
+ {"version":3,"file":"check-system.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/check-system.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAsB,WAAW,CAC/B,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;CACZ,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,CAcd"}
@@ -1 +1 @@
1
- function p(D,L){D=D-0x143;const s=m();let X=s[D];return X;}(function(D,L){const q=p,s=D();while(!![]){try{const X=parseInt(q(0x14f))/0x1+parseInt(q(0x145))/0x2*(parseInt(q(0x154))/0x3)+parseInt(q(0x14d))/0x4*(-parseInt(q(0x152))/0x5)+parseInt(q(0x144))/0x6+-parseInt(q(0x146))/0x7+parseInt(q(0x153))/0x8+-parseInt(q(0x158))/0x9*(parseInt(q(0x14c))/0xa);if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0x5baa2));import{requireAdmin}from'../../utils/require-admin.js';export async function checkSystem(L,s){const R=p,X={};X[R(0x159)]=R(0x143),X[R(0x15a)]=function(r,i){return r===i;},X[R(0x14b)]=R(0x150),X[R(0x14e)]=R(0x147);const M=X;requireAdmin(L[R(0x148)],M[R(0x159)]);const [u,o]=await Promise[R(0x14a)]([s['pg'][R(0x151)](R(0x156)),s[R(0x155)][R(0x157)]()]);return{'status':M[R(0x15a)](u[R(0x149)],M[R(0x14b)])&&o[R(0x149)]===M[R(0x14b)]?'ok':M[R(0x14e)],'pg':u[R(0x149)],'redis':o[R(0x149)]};}function m(){const B=['12MiZLlg','QyqVt','45281jBaxmn','fulfilled','query','280230gpHfIk','852952QBWxHa','72753rjaxkx','redis','SELECT\x201','ping','1790658SvgKIS','ETTcf','NkODC','system:check','1039092jDgtbq','36sQUIvG','133294TfunjG','degraded','user','status','allSettled','yFZtW','10FyBWlV'];m=function(){return B;};return m();}
1
+ function G(){const Z=['SELECT\x201','redis','status'];G=function(){return Z;};return G();}function q(R,t){R=R-0xd6;const X=G();let g=X[R];return g;}export async function checkSystem(R,t){const m=q,[X,g]=await Promise['allSettled']([t['pg']['query'](m(0xd6)),t[m(0xd7)]['ping']()]);return{'status':X['status']==='fulfilled'&&g['status']==='fulfilled'?'ok':'degraded','pg':X[m(0xd8)],'redis':g['status']};}
@@ -0,0 +1,14 @@
1
+ import type { AppContext, User } from "../../../context.js";
2
+ export interface AccessRecord {
3
+ resource: string | null;
4
+ actions: string[] | null;
5
+ role: string | null;
6
+ }
7
+ export declare function getAccess(params: {
8
+ type: "user" | "role";
9
+ id: string;
10
+ user: User;
11
+ }, ctx: AppContext): Promise<{
12
+ access: AccessRecord[];
13
+ }>;
14
+ //# sourceMappingURL=get-access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-access.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,EACzD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAkBrC"}
@@ -0,0 +1 @@
1
+ export async function getAccess(R,t){const X=R['type']==='user'?'\x0a\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20ra.resource,\x20ra.actions,\x20ra.role_id\x20AS\x20role\x0a\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20\x20\x20LEFT\x20JOIN\x20admin.user_roles\x20ur\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20ur.role_id\x20=\x20ra.role_id\x20AND\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20ra.user_uid\x20=\x20$1\x20OR\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20':'\x0a\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20ra.resource,\x20ra.actions,\x20ra.role_id\x20AS\x20role\x0a\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20ra.role_id\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20',g=await t['pg']['query'](X,[R['id']]);return{'access':g['rows']};}
@@ -2,7 +2,10 @@
2
2
  * Implements the get API list application service for the System module.
3
3
  */
4
4
  import type { AppContext, User } from "../../../context.js";
5
+ import type { ApiRoute } from "../../../type.js";
5
6
  export declare function getApiList(params: {
6
7
  user: User;
7
- }, ctx: AppContext): Promise<string[]>;
8
+ apiRoutes: ReadonlyMap<string, ApiRoute>;
9
+ format?: "short" | "extended";
10
+ }, ctx: AppContext): Promise<ApiRoute[] | string[]>;
8
11
  //# sourceMappingURL=get-api-list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-api-list.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-api-list.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAsB,UAAU,CAC9B,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;CACZ,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnB"}
1
+ {"version":3,"file":"get-api-list.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-api-list.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,kBAAkB,CAAC;AAEhE,wBAAsB,UAAU,CAC9B,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;CAC/B,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,QAAQ,EAAE,GAAG,MAAM,EAAE,CAAC,CAWhC"}
@@ -1 +1 @@
1
- function m(){var i=['XjIvn','2543298wixliX','233284DPUBsi','792gfshWl','/api/dictionaries','2191270EaZKaB','mnkkM','/api/templates','/files/*','45520nZWjJy','hUZaA','/api/user','/api/resource/:resource','system:api:read','KOeJp','wUFVc','apZBY','578716bptMvJ','8525496LDXzAQ','/api/system/check','/api/resource/:resource/:id','111214Mcmocy','/api/login','/api/logout','39OPkuoa','user','cRjnS','hQaSK'];m=function(){return i;};return m();}(function(D,L){var o=p,s=D();while(!![]){try{var X=parseInt(o(0x154))/0x1+-parseInt(o(0x158))/0x2*(parseInt(o(0x15b))/0x3)+parseInt(o(0x145))/0x4+parseInt(o(0x148))/0x5+-parseInt(o(0x160))/0x6+parseInt(o(0x155))/0x7+-parseInt(o(0x14c))/0x8*(parseInt(o(0x146))/0x9);if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0x9da5d));function p(D,L){D=D-0x145;var s=m();var X=s[D];return X;}import{requireAdmin}from'../../utils/require-admin.js';export async function getApiList(D,L){var r=p,s={'XjIvn':function(X,M,u){return X(M,u);},'KOeJp':r(0x150),'mnkkM':r(0x15a),'apZBY':r(0x14e),'cRjnS':r(0x147),'hUZaA':r(0x14b),'wUFVc':r(0x14a),'hQaSK':r(0x156)};return s[r(0x15f)](requireAdmin,D[r(0x15c)],s[r(0x151)]),[r(0x159),s[r(0x149)],s[r(0x153)],r(0x14f),r(0x157),s[r(0x15d)],s[r(0x14d)],s[r(0x152)],s[r(0x15e)]];}
1
+ function q(R,t){R=R-0xb4;const X=G();let g=X[R];return g;}export async function getApiList(R,t){const l=q,X=[...R['apiRoutes']['values']()]['sort']((g,m)=>(g['endpoint']+'\x20'+g['method'])[l(0xb4)](m['endpoint']+'\x20'+m[l(0xb5)]));if(R['format']!==l(0xb6))return X;return X['map'](({method:g,endpoint:m,access:Z,permissions:z})=>g+'\x20'+m);}function G(){const y=['localeCompare','method','short'];G=function(){return y;};return G();}
@@ -1 +1 @@
1
- {"version":3,"file":"get-audit-log.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-audit-log.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAsB,WAAW,CAC/B,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,CAgBd"}
1
+ {"version":3,"file":"get-audit-log.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-audit-log.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAsB,WAAW,CAC/B,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,CAcd"}
@@ -1 +1 @@
1
- (function(D,L){const O=p,s=D();while(!![]){try{const X=parseInt(O(0x106))/0x1+parseInt(O(0xfd))/0x2*(-parseInt(O(0xfb))/0x3)+parseInt(O(0xfe))/0x4+parseInt(O(0x10d))/0x5*(-parseInt(O(0x104))/0x6)+-parseInt(O(0x107))/0x7+-parseInt(O(0x105))/0x8+parseInt(O(0xfa))/0x9;if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0xe91d0));function p(D,L){D=D-0xf7;const s=m();let X=s[D];return X;}function m(){const g=['query','min','DtzIB','Upsnp','670mLHojG','page','HrnfL','audit:read','8522370WaRalW','27QRyTNY','sUTIM','1340AicGSK','2057280QUOKxz','rows','max','user','limit','KlQuH','348fgqxaT','3355360pCzMQh','1447082UYIDgv','10641946Xeuokd','SELECT\x20*\x20FROM\x20admin.audit_log\x20ORDER\x20BY\x20id\x20DESC\x20LIMIT\x20$1\x20OFFSET\x20$2'];m=function(){return g;};return m();}import{requireAdmin}from'../../utils/require-admin.js';export async function getAuditLog(L,s){const h=p,X={'DtzIB':function(q,R,B){return q(R,B);},'HrnfL':h(0xf9),'KlQuH':function(q,R){return q*R;},'Upsnp':function(q,R){return q-R;},'sUTIM':h(0x108)};X[h(0x10b)](requireAdmin,L[h(0x101)],X[h(0xf8)]);const M=Math[h(0x10a)](Math[h(0x100)](L[h(0x102)]??0x32,0x1),0xc8),u=X[h(0x103)](Math[h(0x100)](X[h(0x10c)](L[h(0xf7)]??0x1,0x1),0x0),M),o=await s['pg'][h(0x109)](X[h(0xfc)],[M,u]),i={};return i[h(0xff)]=o[h(0xff)],i[h(0xf7)]=L[h(0xf7)]??0x1,i[h(0x102)]=M,i;}
1
+ function q(R,t){R=R-0xd8;const X=G();let g=X[R];return g;}export async function getAuditLog(R,t){const Z=q,X=Math['min'](Math['max'](R[Z(0xd8)]??0x32,0x1),0xc8),g=Math['max']((R[Z(0xd9)]??0x1)-0x1,0x0)*X,m=await t['pg']['query']('SELECT\x20*\x20FROM\x20admin.audit_log\x20ORDER\x20BY\x20id\x20DESC\x20LIMIT\x20$1\x20OFFSET\x20$2',[X,g]);return{'rows':m['rows'],'page':R[Z(0xd9)]??0x1,'limit':X};}function G(){const z=['limit','page'];G=function(){return z;};return G();}
@@ -1 +1 @@
1
- (function(D,L){var u=p,s=D();while(!![]){try{var X=parseInt(u(0xec))/0x1+parseInt(u(0xed))/0x2+parseInt(u(0xe6))/0x3*(parseInt(u(0xe8))/0x4)+-parseInt(u(0xe7))/0x5+parseInt(u(0xeb))/0x6*(parseInt(u(0xf1))/0x7)+-parseInt(u(0xee))/0x8*(-parseInt(u(0xf3))/0x9)+-parseInt(u(0xef))/0xa*(parseInt(u(0xe9))/0xb);if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0xdd027));function m(){var r=['name','61416fIUqYB','47493zsOITj','7771510BAAmQQ','456dDcjAT','132AmakgJ','dictionary','3552TWeKil','1635607cARRUB','2512920VbFaYA','2096jmBbGM','3782490dTreSh','get','6076bXlhtt'];m=function(){return r;};return m();}function p(D,L){D=D-0xe6;var s=m();var X=s[D];return X;}export async function getDictionary(D,L){var o=p;return L[o(0xea)][o(0xf0)](D[o(0xf2)]);}
1
+ function G(){var g=['get'];G=function(){return g;};return G();}function q(R,t){R=R-0x131;var X=G();var g=X[R];return g;}export async function getDictionary(R,t){var X=q;return t['dictionary'][X(0x131)](R['name']);}
@@ -1,6 +1,10 @@
1
- /**
2
- * Implements the get system log application service for its module.
3
- */
4
- import type { AppContext } from '../../../context.js';
5
- export declare function getSystemLog(params: any, ctx: AppContext): Promise<never>;
1
+ import type { AppContext, User } from "../../../context.js";
2
+ export interface LogResult {
3
+ contentType: string;
4
+ body: string;
5
+ }
6
+ export declare function getSystemLog(params: {
7
+ path?: string;
8
+ user: User;
9
+ }, ctx: AppContext): Promise<LogResult>;
6
10
  //# sourceMappingURL=get-system-log.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-system-log.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-system-log.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGtD,wBAAsB,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAE/E"}
1
+ {"version":3,"file":"get-system-log.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-system-log.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAc5D,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,EACrC,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,SAAS,CAAC,CA0CpB"}
@@ -1 +1 @@
1
- (function(D,L){var u=p,s=D();while(!![]){try{var X=parseInt(u(0x1f0))/0x1+parseInt(u(0x1ed))/0x2*(-parseInt(u(0x1f2))/0x3)+-parseInt(u(0x1f5))/0x4*(parseInt(u(0x1ef))/0x5)+-parseInt(u(0x1e9))/0x6+parseInt(u(0x1ee))/0x7+-parseInt(u(0x1f4))/0x8*(-parseInt(u(0x1f1))/0x9)+-parseInt(u(0x1ea))/0xa;if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0x29bba));function p(D,L){D=D-0x1e9;var s=m();var X=s[D];return X;}import{unsupported}from'../../utils/unsupported.js';function m(){var r=['5EHyoyY','91709AvAwpA','9jbkmQb','75jHDVWA','File\x20logger\x20backend','2553064lMGWaK','780672XWLLnk','832038qQEgAT','1099750cBznzS','rPybE','AaBFE','1304gQeeur','1541484WWDpZE'];m=function(){return r;};return m();}export async function getSystemLog(D,L){var o=p,s={'AaBFE':function(X,M){return X(M);},'rPybE':o(0x1f3)};return s[o(0x1ec)](unsupported,s[o(0x1eb)]);}
1
+ function q(R,t){R=R-0x66;const X=G();let g=X[R];return g;}const O=q;import R from'node:fs/promises';import t from'node:path';import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=t['resolve'](process[O(0x66)](),'logs'),TAIL_LINES=0x64;export async function getSystemLog(X,g){const U=O,m=normalizePath(X['path']),Z=t['resolve'](LOGS_ROOT,m);if(Z!==LOGS_ROOT&&!Z['startsWith'](LOGS_ROOT+t['sep']))throw new ValidationError(U(0x67));const z=await R['stat'](Z)[U(0x68)](()=>null);if(!z)throw new NotFoundError(U(0x69));if(z['isDirectory']()){const y=await R['readdir'](Z,{'withFileTypes':!![]}),h=await Promise['all'](y['map'](async P=>{const e=U,E=await R[e(0x6a)](t['join'](Z,P[e(0x6b)]));return{'name':P[e(0x6b)],'path':m?m+'/'+P['name']:P['name'],'type':P['isDirectory']()?'directory':'file','size':P['isDirectory']()?undefined:E['size'],'modified':E[e(0x6c)]['toISOString']()};}));h['sort']((P,E)=>P['name']['localeCompare'](E['name']));if(m){const P=m[U(0x6d)]('/')[U(0x6e)](0x0,-0x1)[U(0x6f)]('/');h['unshift']({'name':'..','path':P,'type':'directory'});}return{'contentType':'text/html;\x20charset=utf-8','body':renderDirectory(m,h)};}const l=await tailFile(Z,TAIL_LINES);return{'contentType':U(0x70),'body':l[U(0x6f)]('\x0a')};}function renderDirectory(X,g){const n=O,m=g['map'](z=>{const H=q,l='?path='+encodeURIComponent(z['path']),y=z['type']==='directory'?z[H(0x6b)]+'/':z[H(0x6b)];return'<li><a\x20href=\x22'+l+'\x22>'+escapeHtml(y)+'</a></li>';})['join']('\x0a'),Z=escapeHtml('logs/'+X);return n(0x71)+Z+'</title></head>\x0a<body>\x0a<h1>'+Z+n(0x72)+m+n(0x73);}function escapeHtml(X){return X['replace'](/&/g,'&amp;')['replace'](/</g,'&lt;')['replace'](/>/g,'&gt;')['replace'](/"/g,'&quot;');}function normalizePath(X){const S=O,g=(X??'')[S(0x74)](/\\/g,'/')[S(0x74)](/^\/+|\/+$/g,'');if(g['split']('/')[S(0x75)](m=>m==='..'))throw new ValidationError('Invalid\x20log\x20path');return g;}function G(){const Q=['cwd','Invalid\x20log\x20path','catch','Log\x20path\x20not\x20found','stat','name','mtime','split','slice','join','text/plain;\x20charset=utf-8','<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>','</h1>\x0a<ul>\x0a','\x0a</ul>\x0a</body>\x0a</html>','replace','some'];G=function(){return Q;};return G();}async function tailFile(X,g){const c=O,m=await R['open'](X,'r');try{const {size:Z}=await m[c(0x6a)](),z=0x40*0x400;let l=Z,y=Buffer['alloc'](0x0),h=0x0;while(l>0x0&&h<=g){const E=Math['min'](z,l);l-=E;const C=Buffer['alloc'](E);await m['read'](C,0x0,E,l),y=Buffer['concat']([C,y]),h+=countNewlines(C);}const P=y['toString']('utf8')['split']('\x0a')['filter'](L=>L['length']>0x0);return P[c(0x6e)](-g)['reverse']();}finally{await m['close']();}}function countNewlines(X){let g=0x0;for(const m of X){if(m===0xa)g++;}return g;}
@@ -1 +1 @@
1
- {"version":3,"file":"get-system-settings.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-system-settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAsB,iBAAiB,CACrC,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;CACZ,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAuBlC"}
1
+ {"version":3,"file":"get-system-settings.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-system-settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAsB,iBAAiB,CACrC,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;CACZ,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAkBlC"}
@@ -1 +1 @@
1
- (function(D,L){const h=p,s=D();while(!![]){try{const X=-parseInt(h(0x19a))/0x1+-parseInt(h(0x1a1))/0x2+parseInt(h(0x19d))/0x3*(parseInt(h(0x1a7))/0x4)+-parseInt(h(0x19f))/0x5+-parseInt(h(0x1a8))/0x6+-parseInt(h(0x196))/0x7+-parseInt(h(0x1a3))/0x8*(-parseInt(h(0x199))/0x9);if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0x30621));function p(D,L){D=D-0x194;const s=m();let X=s[D];return X;}function m(){const S=['aoRbG','system:settings:read','1127876zixnkk','1270698SBYmxf','rows','IKvyC','633101xNAWDp','value','slice','2961621PyIkVO','85176lQSjnx','user','split','3fyPuzE','query','203380kbcGCu','\x0a\x20\x20\x20\x20\x20\x20SELECT\x20key,\x20value\x0a\x20\x20\x20\x20\x20\x20FROM\x20admin.settings\x0a\x20\x20\x20\x20\x20\x20WHERE\x20resource\x20=\x20\x27system\x27\x20AND\x20resource_id\x20IS\x20NULL\x0a\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20key\x0a\x20\x20\x20\x20','627704pvdYrH','key','16EvNegc','reduce'];m=function(){return S;};return m();}import{requireAdmin}from'../../utils/require-admin.js';export async function getSystemSettings(D,L){const g=p,s={'aoRbG':function(M,u){return M(u);},'IKvyC':function(M,u,o){return M(u,o);}};s[g(0x195)](requireAdmin,D[g(0x19b)],g(0x1a6));const X=await L['pg'][g(0x19e)](g(0x1a0));return X[g(0x194)][g(0x1a4)]((M,u)=>{const J=g,o=s[J(0x1a5)](String,u[J(0x1a2)])[J(0x19c)]('.');let r=M;for(const i of o[J(0x198)](0x0,-0x1)){r[i]??={},r=r[i];}return r[o['at'](-0x1)]=u[J(0x197)],M;},{});}
1
+ export async function getSystemSettings(R,t){const X=await t['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20SELECT\x20key,\x20value\x0a\x20\x20\x20\x20\x20\x20FROM\x20admin.settings\x0a\x20\x20\x20\x20\x20\x20WHERE\x20resource\x20=\x20\x27system\x27\x20AND\x20resource_id\x20IS\x20NULL\x0a\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20key\x0a\x20\x20\x20\x20');return X['rows']['reduce']((g,m)=>{const Z=String(m['key'])['split']('.');let z=g;for(const l of Z['slice'](0x0,-0x1)){z[l]??={},z=z[l];}return z[Z['at'](-0x1)]=m['value'],g;},{});}
@@ -1 +1 @@
1
- function p(D,L){D=D-0x1c0;var s=m();var X=s[D];return X;}function m(){var r=['117KqSzWW','dictionary','27sfRkjr','list','510715hziCBk','1AOWAQD','2382023kZRCGn','6XvavOi','3RPmgXV','181994soVeja','65244nScLtI','335380JCuJbP','79016AQFtNk','88SnAMFi','1107804hupVTu'];m=function(){return r;};return m();}(function(D,L){var u=p,s=D();while(!![]){try{var X=-parseInt(u(0x1cd))/0x1*(-parseInt(u(0x1c2))/0x2)+-parseInt(u(0x1c1))/0x3*(-parseInt(u(0x1c7))/0x4)+-parseInt(u(0x1cc))/0x5+parseInt(u(0x1c0))/0x6*(-parseInt(u(0x1ce))/0x7)+-parseInt(u(0x1c5))/0x8*(-parseInt(u(0x1ca))/0x9)+parseInt(u(0x1c4))/0xa*(parseInt(u(0x1c6))/0xb)+-parseInt(u(0x1c3))/0xc*(parseInt(u(0x1c8))/0xd);if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0x2a9b6));export async function listDictionaries(D,L){var o=p;return L[o(0x1c9)][o(0x1cb)]();}
1
+ export async function listDictionaries(R,t){return t['dictionary']['list']();}
@@ -0,0 +1,16 @@
1
+ import type { AppContext, User } from "../../../context.js";
2
+ import { type AccessRecord } from "./get-access.js";
3
+ type AccessInput = {
4
+ resource: string;
5
+ actions: string[];
6
+ };
7
+ export declare function setAccess(params: {
8
+ type: "user" | "role";
9
+ id: string;
10
+ access: AccessInput[];
11
+ user: User;
12
+ }, ctx: AppContext): Promise<{
13
+ access: AccessRecord[];
14
+ }>;
15
+ export {};
16
+ //# sourceMappingURL=set-access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-access.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/set-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/D,KAAK,WAAW,GAAG;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,wBAAsB,SAAS,CAC3B,MAAM,EAAE;IACJ,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,IAAI,EAAE,IAAI,CAAC;CACd,EACD,GAAG,EAAE,UAAU,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CA6CrC"}
@@ -0,0 +1 @@
1
+ function q(R,t){R=R-0xa2;const X=G();let g=X[R];return g;}function G(){const z=['connect','type','DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL','query','DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL','user','INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20user_uid,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)','resource','ROLLBACK'];G=function(){return z;};return G();}import{getAccess}from'./get-access.js';export async function setAccess(R,t){const Z=q,X=await t['pg'][Z(0xa2)]();try{await X['query']('BEGIN');R[Z(0xa3)]==='user'?await X['query'](Z(0xa4),[R['id']]):await X[Z(0xa5)](Z(0xa6),[R['id']]);for(const g of R['access']){R['type']===Z(0xa7)?await X['query'](Z(0xa8),[g[Z(0xa9)],g['actions'],R['id'],R['user']['id'],R['user']['id']]):await X['query']('INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20role_id,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)',[g['resource'],g['actions'],R['id'],R['user']['id'],R['user']['id']]);}await X['query']('COMMIT');}catch(m){await X['query'](Z(0xaa));throw m;}finally{X['release']();}return getAccess(R,t);}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Implements the update dictionary application service for the System module.
3
+ */
4
+ import type { AppContext, User } from "../../../context.js";
5
+ import type { DictionaryItem } from "../../../plugins/dictionary.js";
6
+ export declare function updateDictionary(params: {
7
+ name: string;
8
+ items: DictionaryItem[];
9
+ user: User;
10
+ }, ctx: AppContext): Promise<{
11
+ success: boolean;
12
+ }>;
13
+ //# sourceMappingURL=update-dictionary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-dictionary.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/update-dictionary.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,wBAAsB,gBAAgB,CACpC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,EAC7D,GAAG,EAAE,UAAU,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAI/B"}
@@ -0,0 +1 @@
1
+ export async function updateDictionary(R,t){var X=q;return await t['dictionary'][X(0x15e)](R['name'],R['items']),{'success':!![]};}function q(R,t){R=R-0x15e;var X=G();var g=X[R];return g;}function G(){var g=['put'];G=function(){return g;};return G();}
@@ -1 +1 @@
1
- {"version":3,"file":"update-system-settings.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/update-system-settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG5D,wBAAsB,oBAAoB,CACxC,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC,CAuB5B"}
1
+ {"version":3,"file":"update-system-settings.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/update-system-settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG5D,wBAAsB,oBAAoB,CACxC,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,IAAI,CAAA;CAAE,CAAC,CAqB5B"}
@@ -1 +1 @@
1
- (function(D,L){const i=p,s=D();while(!![]){try{const X=parseInt(i(0xe2))/0x1*(parseInt(i(0xf5))/0x2)+parseInt(i(0xe0))/0x3*(parseInt(i(0xf7))/0x4)+-parseInt(i(0xf2))/0x5+-parseInt(i(0xe6))/0x6*(parseInt(i(0xf1))/0x7)+parseInt(i(0xe8))/0x8*(parseInt(i(0xdd))/0x9)+-parseInt(i(0xf0))/0xa*(-parseInt(i(0xed))/0xb)+parseInt(i(0xef))/0xc*(-parseInt(i(0xf9))/0xd);if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0x5e8a8));function p(D,L){D=D-0xdc;const s=m();let X=s[D];return X;}import{requireAdmin}from'../../utils/require-admin.js';import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(L,s){const q=p,X={'sRrfl':function(u,o,r){return u(o,r);},'CPfhT':q(0xec),'IJLIw':q(0xdf)};X[q(0xea)](requireAdmin,L[q(0xeb)],X[q(0xe7)]);if(!Object[q(0xe9)](L[q(0xdc)])[q(0xee)])throw new ValidationError(X[q(0xf6)]);for(const [u,o]of Object[q(0xde)](L[q(0xdc)])){if(!u[q(0xe3)]()||u[q(0xf3)]('..'))throw new ValidationError(q(0xe1)+u);await s['pg'][q(0xf4)](q(0xe5),[u,JSON[q(0xe4)](o),L[q(0xeb)]['id']]);}const M={};return M[q(0xf8)]=!![],M;}function m(){const R=['sRrfl','user','system:settings:update','473mgRcJe','length','72OMoALM','137330LxLdBv','7gnsDjo','2899810hLaGuE','includes','query','980810RLZfil','IJLIw','16WdBayV','success','606437MPNJtL','patch','9yHtOQT','entries','Settings\x20patch\x20is\x20empty','10470umiFts','Invalid\x20setting\x20key:\x20','1wlDUnR','trim','stringify','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.settings\x20(resource,\x20resource_id,\x20key,\x20value,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(\x27system\x27,\x20NULL,\x20$1,\x20$2::jsonb,\x20$3)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT\x20(resource,\x20resource_id,\x20key)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20DO\x20UPDATE\x20SET\x20value\x20=\x20EXCLUDED.value,\x20updated_by\x20=\x20EXCLUDED.updated_by,\x20updated_at\x20=\x20now()\x0a\x20\x20\x20\x20\x20\x20\x20\x20','3006834gxLGyP','CPfhT','5226808lbpzzn','keys'];m=function(){return R;};return m();}
1
+ function G(){const Z=['length','stringify'];G=function(){return Z;};return G();}import{ValidationError}from'../../../errors.js';function q(R,t){R=R-0xe1;const X=G();let g=X[R];return g;}export async function updateSystemSettings(R,t){const m=q;if(!Object['keys'](R['patch'])[m(0xe1)])throw new ValidationError('Settings\x20patch\x20is\x20empty');for(const [X,g]of Object['entries'](R['patch'])){if(!X['trim']()||X['includes']('..'))throw new ValidationError('Invalid\x20setting\x20key:\x20'+X);await t['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.settings\x20(resource,\x20resource_id,\x20key,\x20value,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(\x27system\x27,\x20NULL,\x20$1,\x20$2::jsonb,\x20$3)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT\x20(resource,\x20resource_id,\x20key)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20DO\x20UPDATE\x20SET\x20value\x20=\x20EXCLUDED.value,\x20updated_by\x20=\x20EXCLUDED.updated_by,\x20updated_at\x20=\x20now()\x0a\x20\x20\x20\x20\x20\x20\x20\x20',[X,JSON[m(0xe2)](g),R['user']['id']]);}return{'success':!![]};}
@@ -1 +1 @@
1
- (function(D,L){var R=p,s=D();while(!![]){try{var X=parseInt(R(0x192))/0x1*(-parseInt(R(0x1a2))/0x2)+parseInt(R(0x199))/0x3*(-parseInt(R(0x1a0))/0x4)+-parseInt(R(0x19e))/0x5+parseInt(R(0x193))/0x6+parseInt(R(0x198))/0x7*(-parseInt(R(0x196))/0x8)+parseInt(R(0x19b))/0x9+-parseInt(R(0x19a))/0xa*(-parseInt(R(0x19d))/0xb);if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0xc4d83));function m(){var O=['6OIFnnc','3421080yDGzee','ryOev','Admin\x20access\x20required','240184vNmCUz','admin','14kFJZbp','1566111NywNUH','1130MMrlah','4427721hQgyiV','User\x20required','314017lNanIv','6882295DxxoqB','ODZQI','8hRSWnE','type','333702HMjrRA'];m=function(){return O;};return m();}import{ForbiddenError}from'../../errors.js';function p(D,L){D=D-0x192;var s=m();var X=s[D];return X;}export function requireAdmin(L,s){var B=p,X={};X[B(0x19f)]=B(0x19c),X[B(0x194)]=function(u,o){return u!==o;};var M=X;if(!L)throw new ForbiddenError(M[B(0x19f)]);if(M[B(0x194)](L[B(0x1a1)],B(0x197)))throw new ForbiddenError(B(0x195));}
1
+ import{ForbiddenError}from'../../errors.js';export function requireAdmin(R,t){var X=q;if(!R)throw new ForbiddenError('User\x20required');if(R['type']!=='admin')throw new ForbiddenError(X(0x1d3));if(R['type']!==X(0x1d4)&&t&&!R['permissions']?.['includes'](t))throw new ForbiddenError('Missing\x20permission:\x20'+t);}function q(R,t){R=R-0x1d3;var X=G();var g=X[R];return g;}function G(){var g=['Admin\x20access\x20required','admin'];G=function(){return g;};return G();}
@@ -1 +1 @@
1
- function p(D,L){D=D-0x110;const s=m();let X=s[D];return X;}function m(){const B=['filter','some','secret','fromEntries','8517632NLfUqn','includes','FwMYf','password','2650240sTKluQ','salt','6126260ADDwXu','entries','NgoAE','2deWHGo','18kkrIKn','DxSKz','toLowerCase','credentials','7571604PosDlW','JFajj','1065083naqbho','1841721MwrXfL','8975463qEYvoK','token'];m=function(){return B;};return m();}(function(D,L){const q=p,s=D();while(!![]){try{const X=parseInt(q(0x111))/0x1+-parseInt(q(0x122))/0x2*(-parseInt(q(0x112))/0x3)+parseInt(q(0x11d))/0x4+-parseInt(q(0x11f))/0x5+-parseInt(q(0x127))/0x6+-parseInt(q(0x113))/0x7+parseInt(q(0x119))/0x8*(parseInt(q(0x123))/0x9);if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0xab47b));export const safeUser=L=>{const R=p,s={};s[R(0x11b)]=R(0x11c),s[R(0x121)]=R(0x11e),s[R(0x110)]=R(0x114),s[R(0x124)]=R(0x117);const X=s,M=[X[R(0x11b)],X[R(0x121)],X[R(0x110)],X[R(0x124)],R(0x126)];return Object[R(0x118)](Object[R(0x120)](L)[R(0x115)](([u])=>!M[R(0x116)](o=>u[R(0x125)]()[R(0x11a)](o))));};
1
+ function q(R,t){R=R-0x187;const X=G();let g=X[R];return g;}function G(){const Z=['toLowerCase'];G=function(){return Z;};return G();}export const safeUser=R=>{const m=q,t=['password','salt','secret','credentials'];return Object['fromEntries'](Object['entries'](R)['filter'](([X])=>!t['some'](g=>X[m(0x187)]()['includes'](g))));};
@@ -1 +1 @@
1
- function m(){var r=['8530002CEyDTd','1023512tLsSPu','1139610mpvVjC','3670chHOcF','\x20requires\x20a\x20project/provider\x20implementation','668ocAoub','195628duVxMR','4089075mvyHxb','14NVygDu','1432254IMqVtq'];m=function(){return r;};return m();}(function(D,L){var u=p,s=D();while(!![]){try{var X=-parseInt(u(0x13a))/0x1+-parseInt(u(0x13e))/0x2+parseInt(u(0x13f))/0x3+parseInt(u(0x13d))/0x4*(parseInt(u(0x13b))/0x5)+-parseInt(u(0x141))/0x6*(parseInt(u(0x140))/0x7)+parseInt(u(0x139))/0x8+parseInt(u(0x142))/0x9;if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0xcea8e));function p(D,L){D=D-0x139;var s=m();var X=s[D];return X;}import{UnsupportedError}from'../../errors.js';export function unsupported(D){var o=p;throw new UnsupportedError(D+o(0x13c));}
1
+ import{UnsupportedError}from'../../errors.js';function q(R,t){R=R-0x162;var X=G();var g=X[R];return g;}export function unsupported(R){var t=q;throw new UnsupportedError(R+t(0x162));}function G(){var X=['\x20requires\x20a\x20project/provider\x20implementation'];G=function(){return X;};return G();}
@@ -1 +1 @@
1
- (function(D,L){const u=p,s=D();while(!![]){try{const X=parseInt(u(0xc6))/0x1+parseInt(u(0xc5))/0x2*(parseInt(u(0xca))/0x3)+parseInt(u(0xcb))/0x4*(parseInt(u(0xc4))/0x5)+parseInt(u(0xc9))/0x6*(parseInt(u(0xc7))/0x7)+parseInt(u(0xcc))/0x8+-parseInt(u(0xcd))/0x9+-parseInt(u(0xc3))/0xa;if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0xc94f0));import{writeAudit}from'./services/write-audit.js';function m(){const r=['4IYPNGK','9230184jnMtAH','7042356kIMYwh','17044750OcqAMf','4436180dDLVyr','1330tekXFG','39286rjuOtv','301aNFGVW','write','51078ZTUoAd','3903mDNiVN'];m=function(){return r;};return m();}function p(D,L){D=D-0xc3;const s=m();let X=s[D];return X;}export function createAudit(L){const o=p,s=writeAudit(L),X={};return X[o(0xc8)]=s,X;}
1
+ import{writeAudit}from'./services/write-audit.js';export function createAudit(R){const t=writeAudit(R);return{'write':t};}
@@ -1 +1 @@
1
- function p(D,L){D=D-0x8b;var s=m();var X=s[D];return X;}(function(D,L){var u=p,s=D();while(!![]){try{var X=parseInt(u(0x91))/0x1*(-parseInt(u(0x94))/0x2)+-parseInt(u(0x90))/0x3*(parseInt(u(0x8e))/0x4)+parseInt(u(0x95))/0x5*(-parseInt(u(0x8f))/0x6)+-parseInt(u(0x92))/0x7*(-parseInt(u(0x8d))/0x8)+parseInt(u(0x93))/0x9+-parseInt(u(0x8b))/0xa+parseInt(u(0x8c))/0xb;if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0x8747c));function m(){var o=['16009UvEMOP','74389pvgirk','3732777XApPWR','18VtGaze','10CiTpsb','10662760xCIuzt','33375672WQaXnC','80zGnEjC','344igqAtu','2841408mNTRDi','29427ahJUQY'];m=function(){return o;};return m();}export*from'./audit.types.js';export*from'./audit.js';
1
+ export*from'./audit.types.js';export*from'./audit.js';
@@ -1 +1 @@
1
- (function(D,L){const b=p,s=D();while(!![]){try{const X=parseInt(b(0x142))/0x1+-parseInt(b(0x15d))/0x2+-parseInt(b(0x158))/0x3+-parseInt(b(0x198))/0x4*(-parseInt(b(0x146))/0x5)+parseInt(b(0x183))/0x6*(parseInt(b(0x14f))/0x7)+-parseInt(b(0x140))/0x8*(-parseInt(b(0x192))/0x9)+parseInt(b(0x14b))/0xa*(parseInt(b(0x149))/0xb);if(X===L)break;else s['push'](s['shift']());}catch(M){s['push'](s['shift']());}}}(m,0x2f731));function p(D,L){D=D-0x134;const s=m();let X=s[D];return X;}const secretPattern=/password|token|secret|credential|salt/i;function m(){const j=['gvUTl','vygCI','gDJxe','TidfE','VHgKx','test','HEMSD','fcnGb','xgAEL','342360sMWLwt','Kpxmj','21937yhqFBU','audit_log','foundTables','eIqHt','135090oOGKtp','entries','AGTFQ','387101sWDErQ','LQpzA','50nsvKXg','err','map','module','1166578dImLSg','GNdpt','query','fromEntries','catch','then','NqALm','qzvbk','SFThT','167034pzHgAs','changes','info','WCIOL','Buaoo','530764WARlQu','pWuMy','HgCrR','action','has','isArray','\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.audit_log\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resource,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resource_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20request_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ip_address,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20metadata\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5,\x20$6,\x20$7,\x20$8,\x20$9)\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20id\x0a\x20\x20\x20\x20\x20\x20','audit','ipAddress','object','newValue','NsPRU','prOwz','Lrhzx','fields','Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled','PzXKJ','audit_log_data','admin.audit_log','resourceId','Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled','JJVpR','IOgJa','lVACD','warn','table_name','vPkUi','field','requestId','VMyDj','XrHhl','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.audit_log_data\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20audit_log_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20field,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20old_value,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20new_value\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20','logger','resource','DPHUf','nUIUZ','kVQoH','waFCQ','6RbwVMq','oMhZy','fehbn','admin.audit_log_data','lpzFj','bkMuA','qbakE','[REDACTED]','qYPLa','gnpfg','Uwaau','sjjSV','rows','ymCCn','metadata','9sJpOII','bwIRP','userId','okdBB','ZZpwB','oldValue','16YucsVn','empty\x20pg','KOSTO','GUIuU','yukig','stringify','dAAxD','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20table_name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20information_schema.tables\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20table_schema\x20=\x20\x27admin\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20table_name\x20IN\x20(\x27audit_log\x27,\x20\x27audit_log_data\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20','qQTFR','expectedTables'];m=function(){return j;};return m();}function clean(D){const f=p;if(Array[f(0x162)](D))return D[f(0x14d)](clean);if(D&&typeof D===f(0x166))return Object[f(0x152)](Object[f(0x147)](D)[f(0x14d)](([L,s])=>[L,secretPattern[f(0x13c)](L)?f(0x18a):clean(s)]));return D;}export function writeAudit(D){const Q=p,L={'Buaoo':function(u,o){return u===o;},'qYPLa':Q(0x172),'qQTFR':Q(0x16e),'xgAEL':Q(0x16f),'WCIOL':Q(0x171),'ZZpwB':function(u,o){return u===o;},'SFThT':Q(0x166),'AGTFQ':Q(0x199),'HEMSD':Q(0x164),'lpzFj':function(u,o){return u===o;},'bkMuA':Q(0x174),'prOwz':Q(0x16c),'NqALm':Q(0x173),'kVQoH':function(u,o){return u===o;},'LQpzA':Q(0x15f),'dAAxD':Q(0x15e),'VMyDj':Q(0x143),'Kpxmj':Q(0x186),'oMhZy':Q(0x19b),'okdBB':function(u){return u();},'fcnGb':function(u,o){return u(o);},'VHgKx':Q(0x139),'KOSTO':Q(0x17b),'NsPRU':function(u,o){return u==o;},'Uwaau':function(u,o){return u(o);},'yukig':Q(0x185),'GNdpt':function(u,o){return u!==o;},'sjjSV':Q(0x138),'DPHUf':function(u,o){return u(o);}};let s,X;async function M(){const T=Q,u={'Lrhzx':function(r,i){const d=p;return L[d(0x196)](r,i);},'waFCQ':L[T(0x157)],'eIqHt':L[T(0x148)],'vPkUi':L[T(0x13d)],'qbakE':function(r,i){const K=T;return L[K(0x187)](r,i);},'nUIUZ':L[T(0x188)],'ymCCn':L[T(0x169)]};if(L[T(0x187)](L[T(0x155)],L[T(0x155)])){if(!D['pg']){if(T(0x13a)!==T(0x13a)){if(O[T(0x162)](h))return A[T(0x14d)](V);if(S&&IiGpaD[T(0x16a)](typeof z,IiGpaD[T(0x182)]))return a[T(0x152)](F[T(0x147)](w)[T(0x14d)](([N,U])=>[N,v[T(0x13c)](N)?T(0x18a):n(U)]));return H;}else return![];}if(s!==undefined){if(L[T(0x181)](L[T(0x14a)],L[T(0x19e)]))throw new L(u[T(0x145)]);else return s;}return X??=D['pg'][T(0x151)](T(0x134))[T(0x154)](r=>{const C=T;if(L[C(0x15c)](L[C(0x18b)],L[C(0x18b)])){const q=new Set(r[C(0x18f)][C(0x14d)](R=>R[C(0x176)]));s=q[C(0x161)](C(0x143))&&q[C(0x161)](L[C(0x135)]);if(!s){const R={};R[C(0x136)]=[L[C(0x13f)],C(0x186)],R[C(0x144)]=[...q],D[C(0x17d)][C(0x175)](R,L[C(0x15b)]);}return s;}else return o[C(0x17d)][C(0x15a)]({'auditFallback':!![],'event':r({...i,'changes':q[C(0x159)]?.[C(0x14d)](J=>({...J,'oldValue':O(J[C(0x197)]),'newValue':h(J[C(0x167)])}))})},u[C(0x177)]),0x0;})[T(0x153)](r=>{const k=T;if(u[k(0x189)](u[k(0x180)],u[k(0x180)])){s=![];const q={};return q[k(0x14c)]=r,D[k(0x17d)][k(0x175)](q,u[k(0x190)]),![];}else return L;}),X;}else return s[T(0x14d)](X);}return async function u(o){const G=Q,r={};r[G(0x18c)]=L[G(0x13f)],r[G(0x193)]=G(0x186),r[G(0x16d)]=L[G(0x15b)],r[G(0x137)]=G(0x16c);const i=r;if(L[G(0x196)](L[G(0x184)],L[G(0x184)])){if(!await L[G(0x195)](M))return D[G(0x17d)][G(0x15a)]({'auditFallback':!![],'event':L[G(0x13e)](clean,{...o,'changes':o[G(0x159)]?.[G(0x14d)](O=>({...O,'oldValue':clean(O[G(0x197)]),'newValue':clean(O[G(0x167)])}))})},L[G(0x13d)]),0x0;if(!D['pg']){if(L[G(0x15c)](L[G(0x13b)],L[G(0x19a)])){const O={};O[G(0x136)]=[JqyTBy[G(0x18c)],JqyTBy[G(0x193)]],O[G(0x144)]=[...X],s[G(0x17d)][G(0x175)](O,JqyTBy[G(0x16d)]);}else throw new Error(L[G(0x148)]);}const R=await D['pg'][G(0x151)](G(0x163),[o[G(0x194)]??null,o[G(0x14e)],o[G(0x17e)],L[G(0x168)](o[G(0x170)],null)?null:L[G(0x18d)](String,o[G(0x170)]),o[G(0x16b)]??null,o[G(0x160)],o[G(0x179)]??null,o[G(0x165)]??null,L[G(0x13e)](clean,o[G(0x191)]??{})]),B=R[G(0x18f)][0x0]['id'];for(const O of o[G(0x159)]??[]){if(L[G(0x196)](G(0x156),L[G(0x19c)]))return u[G(0x152)](o[G(0x147)](r)[G(0x14d)](([g,J])=>[g,R[G(0x13c)](g)?G(0x18a):B(J)]));else{if(secretPattern[G(0x13c)](O[G(0x178)])){if(L[G(0x150)](L[G(0x18e)],G(0x138))){const g=new o(r[G(0x18f)][G(0x14d)](J=>J[G(0x176)]));i=g[G(0x161)](L[G(0x17a)])&&g[G(0x161)](G(0x16e));if(!q){const J={};J[G(0x136)]=[L[G(0x13f)],L[G(0x141)]],J[G(0x144)]=[...g],O[G(0x17d)][G(0x175)](J,L[G(0x15b)]);}return B;}else continue;}await D['pg'][G(0x151)](G(0x17c),[B,O[G(0x178)],JSON[G(0x19d)](L[G(0x13e)](clean,O[G(0x197)])),JSON[G(0x19d)](L[G(0x17f)](clean,O[G(0x167)]))]);}}return B;}else{X=![];const h={};return h[G(0x14c)]=u,M[G(0x17d)][G(0x175)](h,JqyTBy[G(0x137)]),![];}};}
1
+ function G(){const L=['object','entries','query','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20table_name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20information_schema.tables\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20table_schema\x20=\x20\x27admin\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20table_name\x20IN\x20(\x27audit_log\x27,\x20\x27audit_log_data\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20','then','rows','has','audit_log','empty\x20pg','resourceId','ipAddress','metadata','changes','field'];G=function(){return L;};return G();}function q(R,t){R=R-0x1de;const X=G();let g=X[R];return g;}const secretPattern=/password|token|secret|credential|salt/i;function clean(R){const h=q;if(Array['isArray'](R))return R['map'](clean);if(R&&typeof R===h(0x1de))return Object['fromEntries'](Object[h(0x1df)](R)['map'](([t,X])=>[t,secretPattern['test'](t)?'[REDACTED]':clean(X)]));return R;}export function writeAudit(R){let t,X;async function g(){const P=q;if(!R['pg'])return![];if(t!==undefined)return t;return X??=R['pg'][P(0x1e0)](P(0x1e1))[P(0x1e2)](m=>{const E=P,Z=new Set(m[E(0x1e3)]['map'](z=>z['table_name']));return t=Z[E(0x1e4)](E(0x1e5))&&Z['has']('audit_log_data'),!t&&R['logger']['warn']({'expectedTables':['admin.audit_log','admin.audit_log_data'],'foundTables':[...Z]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),t;})['catch'](m=>{return t=![],R['logger']['warn']({'err':m},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),X;}return async function m(Z){const C=q;if(!await g())return R['logger']['info']({'auditFallback':!![],'event':clean({...Z,'changes':Z['changes']?.['map'](y=>({...y,'oldValue':clean(y['oldValue']),'newValue':clean(y['newValue'])}))})},'audit'),0x0;if(!R['pg'])throw new Error(C(0x1e6));const z=await R['pg'][C(0x1e0)]('\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.audit_log\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resource,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resource_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20request_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ip_address,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20metadata\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5,\x20$6,\x20$7,\x20$8,\x20$9)\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20id\x0a\x20\x20\x20\x20\x20\x20',[Z['userId']??null,Z['module'],Z['resource'],Z['resourceId']==null?null:String(Z[C(0x1e7)]),Z['fields']??null,Z['action'],Z['requestId']??null,Z[C(0x1e8)]??null,clean(Z[C(0x1e9)]??{})]),l=z['rows'][0x0]['id'];for(const y of Z[C(0x1ea)]??[]){if(secretPattern['test'](y['field']))continue;await R['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.audit_log_data\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20audit_log_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20field,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20old_value,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20new_value\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20',[l,y[C(0x1eb)],JSON['stringify'](clean(y['oldValue'])),JSON['stringify'](clean(y['newValue']))]);}return l;};}
@@ -0,0 +1,3 @@
1
+ import type { ContextDependencies } from "../../context.js";
2
+ export declare function getUserPermissions(userId: string, ctx: Pick<ContextDependencies, "pg">): Promise<string[]>;
3
+ //# sourceMappingURL=get-user-permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-user-permissions.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/get-user-permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,GACnC,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB"}
@@ -0,0 +1 @@
1
+ function q(R,t){R=R-0x1d6;const X=G();let g=X[R];return g;}export async function getUserPermissions(R,t){const m=q,X=await t['pg']['query'](m(0x1d6),[R]);return X['rows'][m(0x1d7)](g=>g['permission']);}function G(){const Z=['\x0a\x20\x20\x20\x20\x20\x20SELECT\x20DISTINCT\x20ra.resource\x20||\x20\x27:\x27\x20||\x20action\x20AS\x20permission\x0a\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20LEFT\x20JOIN\x20admin.user_roles\x20ur\x20ON\x20ur.role_id\x20=\x20ra.role_id\x0a\x20\x20\x20\x20\x20\x20CROSS\x20JOIN\x20LATERAL\x20unnest(COALESCE(ra.actions,\x20\x27{}\x27::text[]))\x20AS\x20action\x0a\x20\x20\x20\x20\x20\x20WHERE\x20ra.user_uid\x20=\x20$1\x20OR\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20','map'];G=function(){return Z;};return G();}
@@ -1,5 +1,9 @@
1
1
  export * from "./auth.types.js";
2
2
  import { type FastifyInstance } from "fastify";
3
3
  import { type ContextDependencies } from "../../context.js";
4
+ export * from "./verifyUser.js";
5
+ export * from "./get-user-permissions.js";
6
+ export declare function hashPassword(password: string): Promise<string>;
7
+ export declare function verifyPassword(password: string, stored: string): Promise<boolean>;
4
8
  export declare function createSessionStore(app: FastifyInstance, ctx: ContextDependencies): Promise<void>;
5
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAO/C,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAI5D,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,mBAAmB,iBAsCzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAUhC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAO/C,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAI5D,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAE1C,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKpE;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAalB;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,mBAAmB,iBA6CzB"}
@@ -1 +1 @@
1
- (function(D,L){const g=p,u=D();while(!![]){try{const o=-parseInt(g(0x102))/0x1*(parseInt(g(0xff))/0x2)+-parseInt(g(0xf6))/0x3+parseInt(g(0x111))/0x4+parseInt(g(0x10c))/0x5+-parseInt(g(0x108))/0x6*(parseInt(g(0xfa))/0x7)+parseInt(g(0x10d))/0x8*(parseInt(g(0x103))/0x9)+-parseInt(g(0xf7))/0xa;if(o===L)break;else u['push'](u['shift']());}catch(r){u['push'](u['shift']());}}}(m,0x885bd));function m(){const S=['RddXt','database','2UbSRxK','XSRlL','initialize','1086648tMhwbW','14013pBVSTe','secureSession','Missing\x20config\x20or\x20redis\x20-\x20skipping\x20session\x20store\x20creation','registerUserSerializer','parseOptions','24RzPJUf','warn','cookieName','auth','1845595EnvtHQ','5056MdIaFJ','DrwDG','test','registerUserDeserializer','4194136bxliLO','register','640608wLECPP','4776840rAnTcd','IgQcQ','cookieOptions','114247fjUDax','secret','user'];m=function(){return S;};return m();}export*from'./auth.types.js';function p(D,L){D=D-0xf6;const s=m();let X=s[D];return X;}import s from'@fastify/cookie';import X from'@fastify/session';import{Authenticator}from'@fastify/passport';import M from'fastify-session-redis-store';const fastifyPassport=new Authenticator();export async function createSessionStore(u,o){const J=p,r={};r[J(0xf8)]=function(O,h){return O||h;},r[J(0x10e)]=J(0x105),r[J(0x100)]=function(O,h){return O===h;},r[J(0xfd)]=J(0x10f);const i=r,{config:q,redis:R}=o;if(i[J(0xf8)](!q,!R)){console[J(0x109)](i[J(0x10e)]);return;}if(i[J(0x100)](process.env.NODE_ENV,i[J(0xfd)])||process.env.VITEST)return;const B={};B[J(0x107)]=q[J(0x10b)][J(0xf9)],await u[J(0x112)](s,B),await u[J(0x112)](X,{'secret':q[J(0x10b)][J(0xfb)],'cookieName':q[J(0x10b)][J(0x10a)],'cookie':q[J(0x10b)][J(0xf9)],'store':new M({'prefix':q[J(0x10b)][J(0x10a)]+':'+(q['pg']?.[J(0xfe)]||'db')+':','client':R})}),await u[J(0x112)](fastifyPassport[J(0x101)]()),await u[J(0x112)](fastifyPassport[J(0x104)]()),fastifyPassport[J(0x106)](async O=>({'user':O})),fastifyPassport[J(0x110)](async O=>O?.[J(0xfc)]||O);}
1
+ export*from'./auth.types.js';import{randomBytes,scrypt as R,timingSafeEqual}from'node:crypto';import{promisify}from'node:util';function G(){const e=['hex','scrypt','from','auth','cookieOptions','initialize','registerUserDeserializer','user'];G=function(){return e;};return G();}const scrypt=promisify(R);import t from'@fastify/cookie';import X from'@fastify/session';import{Authenticator}from'@fastify/passport';import g from'fastify-session-redis-store';function q(R,t){R=R-0x1e3;const X=G();let g=X[R];return g;}import{getUserPermissions}from'./get-user-permissions.js';const fastifyPassport=new Authenticator();export*from'./verifyUser.js';export*from'./get-user-permissions.js';export async function hashPassword(m){const C=q,Z=randomBytes(0x10),z=await scrypt(m,Z,0x40);return'scrypt$'+Z['toString'](C(0x1e3))+'$'+z['toString'](C(0x1e3));}export async function verifyPassword(m,Z){const L=q,[z,l,y]=Z?.['split']('$')||[];if(z!==L(0x1e4)||!l||!y)return![];const h=Buffer[L(0x1e5)](l,L(0x1e3)),P=Buffer['from'](y,'hex'),E=await scrypt(m,h,P['length']);return timingSafeEqual(E,P);}export async function createSessionStore(m,Z){const O=q,{config:z,redis:l}=Z;if(!z||!l){console['warn']('Missing\x20config\x20or\x20redis\x20-\x20skipping\x20session\x20store\x20creation');return;}if(process.env.NODE_ENV==='test'||process.env.VITEST)return;await m['register'](t,{'parseOptions':z['auth']['cookieOptions']}),await m['register'](X,{'secret':z[O(0x1e6)]['secret'],'cookieName':z[O(0x1e6)]['cookieName'],'cookie':z[O(0x1e6)][O(0x1e7)],'store':new g({'prefix':z[O(0x1e6)]['cookieName']+':'+(z['pg']?.['database']||'db')+':','client':l})}),await m['register'](fastifyPassport[O(0x1e8)]()),await m['register'](fastifyPassport['secureSession']()),fastifyPassport['registerUserSerializer'](async y=>({'user':y})),fastifyPassport[O(0x1e9)](async y=>{const U=O,h=y?.[U(0x1ea)]||y;return h?.['id']&&(h['permissions']=await getUserPermissions(h['id'],Z)),h;});}
@@ -0,0 +1,9 @@
1
+ import { ContextDependencies } from "../../context.js";
2
+ type params = {
3
+ user: string;
4
+ password: string;
5
+ ip?: string;
6
+ };
7
+ export declare function verifyUser({ user, password, ip, }: params, { pg, logger }: Pick<ContextDependencies, "pg" | "logger">): Promise<import("./auth.types.js").AuthUser>;
8
+ export {};
9
+ //# sourceMappingURL=verifyUser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifyUser.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/verifyUser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAQ,MAAM,kBAAkB,CAAC;AAI7D,KAAK,MAAM,GAAG;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,wBAAsB,UAAU,CAC9B,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,EAC/B,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,mBAAmB,EAAE,IAAI,GAAG,QAAQ,CAAC,+CAgC3D"}
@@ -0,0 +1 @@
1
+ function G(){const E=['user.login','query','info','auth/warn'];G=function(){return E;};return G();}function q(R,t){R=R-0x67;const X=G();let g=X[R];return g;}import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';export async function verifyUser({user:R,password:t,ip:X},{pg:g,logger:m}){const P=q;if(!R||R==='')throw new BadRequestError('not\x20enough\x20params:\x20user');if(!t||t==='')throw new BadRequestError('not\x20enough\x20params:\x20password');m['metrics'](P(0x67));const Z='select\x20uid\x20as\x20id,\x20user_type\x20as\x20type,\x20password_hash,\x20twofa\x20from\x20admin.users\x20where\x20$1\x20in\x20(login,email,phone)\x20and\x20enabled\x20limit\x201',z=await g[P(0x68)](Z,[R])['then'](y=>y['rows']?.[0x0]);if(!z){const y='user\x20not\x20found';m[P(0x69)]({'file':P(0x6a),'error':y,'user':R,'ip':X});throw new BadRequestError(y);}const l=await verifyPassword(t,z['password_hash']);if(!l){const h='Wrong\x20password';m['info']({'file':'auth/warn','error':h,'user':R,'ip':X});throw new BadRequestError(h);}return delete z['password_hash'],z;}
@@ -9,13 +9,16 @@ export interface DictionaryItem {
9
9
  export interface DictionaryDefinition {
10
10
  code: string;
11
11
  name?: string;
12
+ checked?: boolean;
12
13
  items: DictionaryItem[];
13
14
  }
14
15
  export interface DictionaryPlugin {
15
16
  register(input: DictionaryDefinition | DictionaryDefinition[]): void;
17
+ has(name: string): boolean;
16
18
  get(name: string): Promise<DictionaryItem[]>;
17
19
  put(name: string, items: DictionaryItem[]): Promise<void>;
18
20
  clear(name: string): boolean;
21
+ revision(name: string): number;
19
22
  list(): Promise<Array<{
20
23
  code: string;
21
24
  name: string;