@opengis/fcore 0.0.1-beta.26 → 0.0.1-beta.27

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 (139) hide show
  1. package/LICENSE +3 -3
  2. package/README.md +71 -71
  3. package/dist/config.js +1 -1
  4. package/dist/context.js +1 -1
  5. package/dist/errors.js +1 -1
  6. package/dist/fastify.js +1 -1
  7. package/dist/fcore.js +1 -1
  8. package/dist/migrations/cli.js +1 -1
  9. package/dist/migrations/runner.js +1 -1
  10. package/dist/modules/auth/adduser-cli.js +1 -1
  11. package/dist/modules/auth/passwd-cli.js +1 -1
  12. package/dist/modules/auth/permission-cli.js +1 -1
  13. package/dist/modules/auth/route.js +1 -1
  14. package/dist/modules/auth/schema.js +1 -1
  15. package/dist/modules/auth/services/change-password.js +1 -1
  16. package/dist/modules/auth/services/get-current-user.js +1 -1
  17. package/dist/modules/auth/services/registration.js +1 -1
  18. package/dist/modules/auth/services/verify-two-factor.js +1 -1
  19. package/dist/modules/file/mime.js +1 -1
  20. package/dist/modules/file/route.js +1 -1
  21. package/dist/modules/file/schema.js +1 -1
  22. package/dist/modules/file/services/get-file.js +1 -1
  23. package/dist/modules/file/services/resize-file.js +1 -1
  24. package/dist/modules/file/services/upload-file.js +1 -1
  25. package/dist/modules/resource/route.d.ts.map +1 -1
  26. package/dist/modules/resource/route.js +1 -1
  27. package/dist/modules/resource/schema.d.ts +13 -0
  28. package/dist/modules/resource/schema.d.ts.map +1 -1
  29. package/dist/modules/resource/schema.js +1 -1
  30. package/dist/modules/resource/services/add-note.js +1 -1
  31. package/dist/modules/resource/services/add-resource-file.js +1 -1
  32. package/dist/modules/resource/services/create-resource-relation.js +1 -1
  33. package/dist/modules/resource/services/create-resource.js +1 -1
  34. package/dist/modules/resource/services/delete-resource-relation.js +1 -1
  35. package/dist/modules/resource/services/delete-resource.js +1 -1
  36. package/dist/modules/resource/services/export-resource.js +1 -1
  37. package/dist/modules/resource/services/generate-resource-code.d.ts +16 -0
  38. package/dist/modules/resource/services/generate-resource-code.d.ts.map +1 -0
  39. package/dist/modules/resource/services/generate-resource-code.js +1 -0
  40. package/dist/modules/resource/services/get-resource-schema.d.ts +6 -0
  41. package/dist/modules/resource/services/get-resource-schema.d.ts.map +1 -0
  42. package/dist/modules/resource/services/get-resource-schema.js +1 -0
  43. package/dist/modules/resource/services/get-resource.js +1 -1
  44. package/dist/modules/resource/services/list-resource-as-user.d.ts +8 -0
  45. package/dist/modules/resource/services/list-resource-as-user.d.ts.map +1 -0
  46. package/dist/modules/resource/services/list-resource-as-user.js +1 -0
  47. package/dist/modules/resource/services/list-resource-list.d.ts +20 -0
  48. package/dist/modules/resource/services/list-resource-list.d.ts.map +1 -0
  49. package/dist/modules/resource/services/list-resource-list.js +1 -0
  50. package/dist/modules/resource/services/list-resource-relation.js +1 -1
  51. package/dist/modules/resource/services/list-resources.d.ts.map +1 -1
  52. package/dist/modules/resource/services/list-resources.js +1 -1
  53. package/dist/modules/resource/services/search-resource.js +1 -1
  54. package/dist/modules/resource/services/suggest-resource.js +1 -1
  55. package/dist/modules/resource/services/update-resource-relation.js +1 -1
  56. package/dist/modules/resource/services/update-resource.js +1 -1
  57. package/dist/modules/resource/services/upload-resource-file.js +1 -1
  58. package/dist/modules/system/route.d.ts.map +1 -1
  59. package/dist/modules/system/route.js +1 -1
  60. package/dist/modules/system/schema.d.ts +22 -0
  61. package/dist/modules/system/schema.d.ts.map +1 -1
  62. package/dist/modules/system/schema.js +1 -1
  63. package/dist/modules/system/services/check-system.js +1 -1
  64. package/dist/modules/system/services/get-access.js +1 -1
  65. package/dist/modules/system/services/get-api-list.js +1 -1
  66. package/dist/modules/system/services/get-audit-log.js +1 -1
  67. package/dist/modules/system/services/get-dictionary.js +1 -1
  68. package/dist/modules/system/services/get-resource-access.d.ts +23 -0
  69. package/dist/modules/system/services/get-resource-access.d.ts.map +1 -0
  70. package/dist/modules/system/services/get-resource-access.js +1 -0
  71. package/dist/modules/system/services/get-resource-scopes.d.ts +16 -0
  72. package/dist/modules/system/services/get-resource-scopes.d.ts.map +1 -0
  73. package/dist/modules/system/services/get-resource-scopes.js +1 -0
  74. package/dist/modules/system/services/get-system-log.js +1 -1
  75. package/dist/modules/system/services/get-system-settings.js +1 -1
  76. package/dist/modules/system/services/list-dictionaries.js +1 -1
  77. package/dist/modules/system/services/set-access.d.ts +1 -0
  78. package/dist/modules/system/services/set-access.d.ts.map +1 -1
  79. package/dist/modules/system/services/set-access.js +1 -1
  80. package/dist/modules/system/services/set-resource-access.d.ts +18 -0
  81. package/dist/modules/system/services/set-resource-access.d.ts.map +1 -0
  82. package/dist/modules/system/services/set-resource-access.js +1 -0
  83. package/dist/modules/system/services/set-resource-scopes.d.ts +10 -0
  84. package/dist/modules/system/services/set-resource-scopes.d.ts.map +1 -0
  85. package/dist/modules/system/services/set-resource-scopes.js +1 -0
  86. package/dist/modules/system/services/update-dictionary.js +1 -1
  87. package/dist/modules/system/services/update-system-settings.js +1 -1
  88. package/dist/modules/utils/require-admin.js +1 -1
  89. package/dist/modules/utils/safe-user.js +1 -1
  90. package/dist/modules/utils/unsupported.js +1 -1
  91. package/dist/plugins/audit/audit.js +1 -1
  92. package/dist/plugins/audit/services/write-audit.js +1 -1
  93. package/dist/plugins/auth/get-user-permissions.js +1 -1
  94. package/dist/plugins/auth/index.js +1 -1
  95. package/dist/plugins/auth/verifyUser.js +1 -1
  96. package/dist/plugins/dictionary.js +1 -1
  97. package/dist/plugins/file.js +1 -1
  98. package/dist/plugins/jwt.js +1 -1
  99. package/dist/plugins/logger/index.js +1 -1
  100. package/dist/plugins/logger/transport.js +1 -1
  101. package/dist/plugins/pg.js +1 -1
  102. package/dist/plugins/redis.js +1 -1
  103. package/dist/plugins/resource/resource.js +1 -1
  104. package/dist/plugins/resource/resource.registry.js +1 -1
  105. package/dist/plugins/resource/resource.types.d.ts +18 -0
  106. package/dist/plugins/resource/resource.types.d.ts.map +1 -1
  107. package/dist/plugins/resource/services/add-dictionary-lookup-data.js +1 -1
  108. package/dist/plugins/resource/services/add-file-token.js +1 -1
  109. package/dist/plugins/resource/services/add-table-lookup-data.js +1 -1
  110. package/dist/plugins/resource/services/create-relation.js +1 -1
  111. package/dist/plugins/resource/services/create.js +1 -1
  112. package/dist/plugins/resource/services/delete-relation.js +1 -1
  113. package/dist/plugins/resource/services/delete.js +1 -1
  114. package/dist/plugins/resource/services/find-one.d.ts.map +1 -1
  115. package/dist/plugins/resource/services/find-one.js +1 -1
  116. package/dist/plugins/resource/services/find-relation.js +1 -1
  117. package/dist/plugins/resource/services/find.d.ts.map +1 -1
  118. package/dist/plugins/resource/services/find.js +1 -1
  119. package/dist/plugins/resource/services/get-table-columns.js +1 -1
  120. package/dist/plugins/resource/services/update-relation.js +1 -1
  121. package/dist/plugins/resource/services/update.js +1 -1
  122. package/dist/plugins/resource/utils/auto-index.js +1 -1
  123. package/dist/plugins/resource/utils/fields.js +1 -1
  124. package/dist/plugins/resource/utils/filters.js +1 -1
  125. package/dist/plugins/resource/utils/permissions.js +1 -1
  126. package/dist/plugins/resource/utils/scope.d.ts +10 -0
  127. package/dist/plugins/resource/utils/scope.d.ts.map +1 -0
  128. package/dist/plugins/resource/utils/scope.js +1 -0
  129. package/dist/plugins/resource/utils/sort.js +1 -1
  130. package/dist/plugins/resource/utils/sql.js +1 -1
  131. package/dist/plugins/resource/utils/summary.d.ts +5 -1
  132. package/dist/plugins/resource/utils/summary.d.ts.map +1 -1
  133. package/dist/plugins/resource/utils/summary.js +1 -1
  134. package/dist/shared/getIP.js +1 -1
  135. package/migrations/20260903130000_move_notes_files_to_admin.sql +17 -17
  136. package/migrations/20260903140000_settings_nulls_not_distinct.sql +18 -18
  137. package/migrations/20260929120000_allow_user_only_role_scopes.sql +2 -0
  138. package/migrations/20260929_role_scope.sql +32 -0
  139. package/package.json +92 -92
@@ -0,0 +1,16 @@
1
+ import type { AppContext } from "../../../context.js";
2
+ export declare function getResourceScopes(params: {
3
+ resource: string;
4
+ }, ctx: AppContext): Promise<{
5
+ resource: string;
6
+ users: Array<{
7
+ user_id: string;
8
+ role_id: string | null;
9
+ scopes: Record<string, unknown>;
10
+ }>;
11
+ roles: Array<{
12
+ role_id: string;
13
+ scopes: Record<string, unknown>;
14
+ }>;
15
+ }>;
16
+ //# sourceMappingURL=get-resource-scopes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-resource-scopes.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-resource-scopes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAStD,wBAAsB,iBAAiB,CACrC,MAAM,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAC5B,GAAG,EAAE,UAAU,GACd,OAAO,CAAC;IACT,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;IAC3F,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CACpE,CAAC,CAoCD"}
@@ -0,0 +1 @@
1
+ export async function getResourceScopes(h,n){const P=k,{rows:B}=await n['pg'][P(0x17d)](P(0x17e),[h['resource']]),G=new Map(),f=new Map();for(const j of B){if(j['user_id']!==null){const Z=j[P(0x17f)]+':'+(j['role_id']??''),e=G[P(0x180)](Z)??{'user_id':j['user_id'],'role_id':j['role_id'],'scopes':{}};e['scopes'][j['scope']]=j[P(0x181)],G['set'](Z,e);continue;}if(j['role_id']!==null){const b=f[P(0x180)](j['role_id'])??{'role_id':j['role_id'],'scopes':{}};b[P(0x182)][j['scope']]=j['value'],f['set'](j['role_id'],b);}}return{'resource':h['resource'],'users':[...G['values']()],'roles':[...f['values']()]};}function k(h,n){h=h-0x17d;const B=Q();let G=B[h];return G;}function Q(){const u=['query','SELECT\x20user_id,\x20role_id,\x20scope,\x20value\x0a\x20\x20\x20\x20\x20FROM\x20admin.role_access_scope\x0a\x20\x20\x20\x20\x20WHERE\x20resource\x20=\x20$1\x20AND\x20enabled\x20=\x20TRUE\x0a\x20\x20\x20\x20\x20ORDER\x20BY\x20role_id,\x20user_id\x20NULLS\x20FIRST,\x20scope','user_id','get','value','scopes'];Q=function(){return u;};return Q();}
@@ -1 +1 @@
1
- function z(){const C=['logs','path','sep','Invalid\x20log\x20path','stat','catch','isDirectory','readdir','all','map','join','name','size','sort','localeCompare','unshift','directory','type','<li><a\x20href=\x22','<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>','\x0a</ul>\x0a</body>\x0a</html>','replace','&amp;','split','open','alloc','toString','slice','reverse'];z=function(){return C;};return z();}function G(w,h){w=w-0x161;const S=z();let X=S[w];return X;}const O=G;import w from'node:fs/promises';import h from'node:path';import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=h['resolve'](process['cwd'](),O(0x161)),TAIL_LINES=0x64;export async function getSystemLog(S,X){const H=O,Y=normalizePath(S[H(0x162)]),v=h['resolve'](LOGS_ROOT,Y);if(v!==LOGS_ROOT&&!v['startsWith'](LOGS_ROOT+h[H(0x163)]))throw new ValidationError(H(0x164));const D=await w[H(0x165)](v)[H(0x166)](()=>null);if(!D)throw new NotFoundError('Log\x20path\x20not\x20found');if(D[H(0x167)]()){const q=await w[H(0x168)](v,{'withFileTypes':!![]}),e=await Promise[H(0x169)](q[H(0x16a)](async Z=>{const R=H,K=await w[R(0x165)](h[R(0x16b)](v,Z['name']));return{'name':Z[R(0x16c)],'path':Y?Y+'/'+Z['name']:Z['name'],'type':Z[R(0x167)]()?'directory':'file','size':Z['isDirectory']()?undefined:K[R(0x16d)],'modified':K['mtime']['toISOString']()};}));e[H(0x16e)]((Z,K)=>Z['name'][H(0x16f)](K['name']));if(Y){const Z=Y['split']('/')['slice'](0x0,-0x1)[H(0x16b)]('/');e[H(0x170)]({'name':'..','path':Z,'type':H(0x171)});}return{'contentType':'text/html;\x20charset=utf-8','body':renderDirectory(Y,e)};}const o=await tailFile(v,TAIL_LINES);return{'contentType':'text/plain;\x20charset=utf-8','body':o[H(0x16b)]('\x0a')};}function renderDirectory(S,X){const Q=O,Y=X[Q(0x16a)](D=>{const P=Q,o='?path='+encodeURIComponent(D['path']),q=D[P(0x172)]==='directory'?D[P(0x16c)]+'/':D['name'];return P(0x173)+o+'\x22>'+escapeHtml(q)+'</a></li>';})['join']('\x0a'),v=escapeHtml('logs/'+S);return Q(0x174)+v+'</title></head>\x0a<body>\x0a<h1>'+v+'</h1>\x0a<ul>\x0a'+Y+Q(0x175);}function escapeHtml(S){const x=O;return S[x(0x176)](/&/g,x(0x177))[x(0x176)](/</g,'&lt;')['replace'](/>/g,'&gt;')['replace'](/"/g,'&quot;');}function normalizePath(S){const c=O,X=(S??'')['replace'](/\\/g,'/')['replace'](/^\/+|\/+$/g,'');if(X[c(0x178)]('/')['some'](Y=>Y==='..'))throw new ValidationError('Invalid\x20log\x20path');return X;}async function tailFile(S,X){const d=O,Y=await w[d(0x179)](S,'r');try{const {size:v}=await Y['stat'](),D=0x40*0x400;let o=v,q=Buffer[d(0x17a)](0x0),e=0x0;while(o>0x0&&e<=X){const K=Math['min'](D,o);o-=K;const y=Buffer['alloc'](K);await Y['read'](y,0x0,K,o),q=Buffer['concat']([y,q]),e+=countNewlines(y);}const Z=q[d(0x17b)]('utf8')['split']('\x0a')['filter'](V=>V['length']>0x0);return Z[d(0x17c)](-X)[d(0x17d)]();}finally{await Y['close']();}}function countNewlines(S){let X=0x0;for(const Y of S){if(Y===0xa)X++;}return X;}
1
+ const p=k;import h from'node:fs/promises';import n from'node:path';function Q(){const O=['resolve','startsWith','stat','isDirectory','join','name','directory','file','size','toISOString','localeCompare','split','slice','unshift','text/plain;\x20charset=utf-8','type','</a></li>','replace','open','alloc','read','close'];Q=function(){return O;};return Q();}import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=n[p(0xc6)](process['cwd'](),'logs'),TAIL_LINES=0x64;export async function getSystemLog(B,G){const z=p,f=normalizePath(B['path']),j=n['resolve'](LOGS_ROOT,f);if(j!==LOGS_ROOT&&!j[z(0xc7)](LOGS_ROOT+n['sep']))throw new ValidationError('Invalid\x20log\x20path');const Z=await h[z(0xc8)](j)['catch'](()=>null);if(!Z)throw new NotFoundError('Log\x20path\x20not\x20found');if(Z[z(0xc9)]()){const b=await h['readdir'](j,{'withFileTypes':!![]}),P=await Promise['all'](b['map'](async u=>{const t=z,X=await h['stat'](n[t(0xca)](j,u['name']));return{'name':u['name'],'path':f?f+'/'+u['name']:u[t(0xcb)],'type':u[t(0xc9)]()?t(0xcc):t(0xcd),'size':u['isDirectory']()?undefined:X[t(0xce)],'modified':X['mtime'][t(0xcf)]()};}));P['sort']((u,X)=>u['name'][z(0xd0)](X['name']));if(f){const u=f[z(0xd1)]('/')[z(0xd2)](0x0,-0x1)['join']('/');P[z(0xd3)]({'name':'..','path':u,'type':z(0xcc)});}return{'contentType':'text/html;\x20charset=utf-8','body':renderDirectory(f,P)};}const e=await tailFile(j,TAIL_LINES);return{'contentType':z(0xd4),'body':e['join']('\x0a')};}function renderDirectory(B,G){const f=G['map'](Z=>{const m=k,e='?path='+encodeURIComponent(Z['path']),b=Z[m(0xd5)]==='directory'?Z[m(0xcb)]+'/':Z[m(0xcb)];return'<li><a\x20href=\x22'+e+'\x22>'+escapeHtml(b)+m(0xd6);})['join']('\x0a'),j=escapeHtml('logs/'+B);return'<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>'+j+'</title></head>\x0a<body>\x0a<h1>'+j+'</h1>\x0a<ul>\x0a'+f+'\x0a</ul>\x0a</body>\x0a</html>';}function escapeHtml(B){const A=p;return B['replace'](/&/g,'&amp;')[A(0xd7)](/</g,'&lt;')['replace'](/>/g,'&gt;')[A(0xd7)](/"/g,'&quot;');}function normalizePath(B){const G=(B??'')['replace'](/\\/g,'/')['replace'](/^\/+|\/+$/g,'');if(G['split']('/')['some'](f=>f==='..'))throw new ValidationError('Invalid\x20log\x20path');return G;}function k(h,n){h=h-0xc6;const B=Q();let G=B[h];return G;}async function tailFile(B,G){const U=p,f=await h[U(0xd8)](B,'r');try{const {size:j}=await f[U(0xc8)](),Z=0x40*0x400;let e=j,b=Buffer['alloc'](0x0),P=0x0;while(e>0x0&&P<=G){const X=Math['min'](Z,e);e-=X;const H=Buffer[U(0xd9)](X);await f[U(0xda)](H,0x0,X,e),b=Buffer['concat']([H,b]),P+=countNewlines(H);}const u=b['toString']('utf8')['split']('\x0a')['filter'](i=>i['length']>0x0);return u[U(0xd2)](-G)['reverse']();}finally{await f[U(0xdb)]();}}function countNewlines(B){let G=0x0;for(const f of B){if(f===0xa)G++;}return G;}
@@ -1 +1 @@
1
- function G(w,h){w=w-0xd2;const S=z();let X=S[w];return X;}export async function getSystemSettings(w,h){const q=G,S=await h['pg'][q(0xd2)]('\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 S['rows'][q(0xd3)]((X,Y)=>{const e=q,v=String(Y[e(0xd4)])[e(0xd5)]('.');let D=X;for(const o of v['slice'](0x0,-0x1)){D[o]??={},D=D[o];}return D[v['at'](-0x1)]=Y['value'],X;},{});}function z(){const Z=['query','reduce','key','split'];z=function(){return Z;};return z();}
1
+ function k(h,n){h=h-0xb9;const B=Q();let G=B[h];return G;}export async function getSystemSettings(h,n){const b=k,B=await n['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 B['rows'][b(0xb9)]((G,f)=>{const P=b,j=String(f['key'])[P(0xba)]('.');let Z=G;for(const e of j['slice'](0x0,-0x1)){Z[e]??={},Z=Z[e];}return Z[j['at'](-0x1)]=f[P(0xbb)],G;},{});}function Q(){const u=['reduce','split','value'];Q=function(){return u;};return Q();}
@@ -1 +1 @@
1
- function z(){var X=['dictionary','list'];z=function(){return X;};return z();}function G(w,h){w=w-0x1ed;var S=z();var X=S[w];return X;}export async function listDictionaries(w,h){var S=G;return h[S(0x1ed)][S(0x1ee)]();}
1
+ function Q(){var G=['dictionary'];Q=function(){return G;};return Q();}function k(h,n){h=h-0x86;var B=Q();var G=B[h];return G;}export async function listDictionaries(h,n){var B=k;return n[B(0x86)]['list']();}
@@ -9,6 +9,7 @@ export declare function setAccess(params: {
9
9
  id: string;
10
10
  access?: AccessInput[];
11
11
  permissions?: string[];
12
+ roles?: string[];
12
13
  user: User;
13
14
  }, ctx: AppContext): Promise<{
14
15
  access: AccessRecord[];
@@ -1 +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;AAC5D,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;AAoBF,wBAAsB,SAAS,CAC3B,MAAM,EAAE;IACJ,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC;CACd,EACD,GAAG,EAAE,UAAU,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAiDrC"}
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;AAC5D,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;AAoBF,wBAAsB,SAAS,CAC3B,MAAM,EAAE;IACJ,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACd,EACD,GAAG,EAAE,UAAU,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAiErC"}
@@ -1 +1 @@
1
- function z(){const V=['read','create','set','user','permissions','type','resource','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)','actions'];z=function(){return V;};return z();}function G(w,h){w=w-0xd9;const S=z();let X=S[w];return X;}const Z=G;import{getAccess}from'./get-access.js';const CRUD_ACTIONS=[Z(0xd9),'update',Z(0xda),'delete'];function permissionsToAccess(w){const K=Z,h=new Map();for(const S of w){const [X,Y]=S['split'](':');if(!X)continue;const v=Y==='edit'?'update':Y,D=h['get'](X)??new Set();for(const o of v?[v]:CRUD_ACTIONS)D['add'](o);h[K(0xdb)](X,D);}return[...h]['map'](([q,e])=>({'resource':q,'actions':[...e]}));}export async function setAccess(w,h){const y=Z,S=await h['pg']['connect']();try{await S['query']('BEGIN');w['type']===y(0xdc)?await S['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL',[w['id']]):await S['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL',[w['id']]);const X=w[y(0xdd)]?permissionsToAccess(w[y(0xdd)]):w['access']??[];for(const Y of X){w[y(0xde)]===y(0xdc)?await S['query']('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)',[Y[y(0xdf)],Y['actions'],w['id'],w[y(0xdc)]['id'],w['user']['id']]):await S[y(0xe0)](y(0xe1),[Y['resource'],Y[y(0xe2)],w['id'],w['user']['id'],w['user']['id']]);}await S['query']('COMMIT');}catch(v){await S['query']('ROLLBACK');throw v;}finally{S['release']();}return getAccess(w,h);}
1
+ function Q(){const H=['update','add','map','BEGIN','DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL','query','INSERT\x20INTO\x20admin.user_roles\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(user_uid,\x20role_id,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)','user','resource','actions','release'];Q=function(){return H;};return Q();}function k(h,n){h=h-0x11b;const B=Q();let G=B[h];return G;}import{getAccess}from'./get-access.js';const CRUD_ACTIONS=['read','update','create','delete'];function permissionsToAccess(h){const u=k,n=new Map();for(const B of h){const [G,f]=B['split'](':');if(!G)continue;const j=f==='edit'?u(0x11b):f,Z=n['get'](G)??new Set();for(const e of j?[j]:CRUD_ACTIONS)Z[u(0x11c)](e);n['set'](G,Z);}return[...n][u(0x11d)](([b,P])=>({'resource':b,'actions':[...P]}));}export async function setAccess(h,n){const X=k,B=await n['pg']['connect']();try{await B['query'](X(0x11e));if(h['type']==='user'){await B['query'](X(0x11f),[h['id']]);if(h['roles']!==undefined){await B['query']('DELETE\x20FROM\x20admin.user_roles\x20WHERE\x20user_uid\x20=\x20$1',[h['id']]);for(const f of h['roles']){await B[X(0x120)](X(0x121),[h['id'],f,h[X(0x122)]['id'],h['user']['id']]);}}}else await B[X(0x120)]('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL',[h['id']]);const G=h['permissions']?permissionsToAccess(h['permissions']):h['access']??[];for(const j of G){h['type']==='user'?await B[X(0x120)]('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)',[j[X(0x123)],j[X(0x124)],h['id'],h['user']['id'],h['user']['id']]):await B['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)',[j['resource'],j['actions'],h['id'],h[X(0x122)]['id'],h['user']['id']]);}await B['query']('COMMIT');}catch(Z){await B['query']('ROLLBACK');throw Z;}finally{B[X(0x125)]();}return getAccess(h,n);}
@@ -0,0 +1,18 @@
1
+ import type { AppContext, User } from "../../../context.js";
2
+ import { getResourceAccess } from "./get-resource-access.js";
3
+ interface UserAccessInput {
4
+ uid: string;
5
+ actions: string[];
6
+ }
7
+ interface RoleAccessInput {
8
+ role_id: string;
9
+ actions: string[];
10
+ }
11
+ export declare function setResourceAccess(params: {
12
+ resource: string;
13
+ users?: UserAccessInput[];
14
+ roles?: RoleAccessInput[];
15
+ user: User;
16
+ }, ctx: AppContext): ReturnType<typeof getResourceAccess>;
17
+ export {};
18
+ //# sourceMappingURL=set-resource-access.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-resource-access.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/set-resource-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,UAAU,eAAe;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE;IACN,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,IAAI,EAAE,IAAI,CAAC;CACZ,EACD,GAAG,EAAE,UAAU,GACd,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAsEtC"}
@@ -0,0 +1 @@
1
+ import{ValidationError}from'../../../errors.js';import{getResourceAccess}from'./get-resource-access.js';export async function setResourceAccess(h,n){const u=k;if(h[u(0x19e)]===undefined&&h['roles']===undefined)throw new ValidationError(u(0x19f));const B=new Set();for(const j of h['users']??[]){if(B[u(0x1a0)](j['uid']))throw new ValidationError('Duplicate\x20user\x20in\x20access\x20list:\x20'+j['uid']);B['add'](j['uid']);}const G=new Set();for(const Z of h[u(0x1a1)]??[]){if(G['has'](Z[u(0x1a2)]))throw new ValidationError('Duplicate\x20role\x20in\x20access\x20list:\x20'+Z['role_id']);G['add'](Z['role_id']);}const f=await n['pg'][u(0x1a3)]();try{await f['query'](u(0x1a4));if(h['users']!==undefined){await f['query'](u(0x1a5),[h[u(0x1a6)]]);for(const e of h['users']){if(e['actions'][u(0x1a7)]===0x0)continue;await f['query']('INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(resource,\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$4)',[h['resource'],e['actions'],e['uid'],h[u(0x1a8)]['id']]);}}if(h['roles']!==undefined){await f['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20resource\x20=\x20$1\x20AND\x20role_id\x20IS\x20NOT\x20NULL\x20AND\x20user_uid\x20IS\x20NULL',[h['resource']]);for(const b of h['roles']){if(b[u(0x1a9)]['length']===0x0)continue;await f['query']('INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(resource,\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$4)',[h['resource'],b['actions'],b['role_id'],h[u(0x1a8)]['id']]);}}await f[u(0x1aa)](u(0x1ab));}catch(P){await f[u(0x1aa)]('ROLLBACK');throw P;}finally{f['release']();}return getResourceAccess({'resource':h['resource']},n);}function k(h,n){h=h-0x19e;const B=Q();let G=B[h];return G;}function Q(){const X=['users','At\x20least\x20one\x20of\x20users\x20or\x20roles\x20must\x20be\x20provided','has','roles','role_id','connect','BEGIN','DELETE\x20FROM\x20admin.role_access\x20WHERE\x20resource\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NOT\x20NULL\x20AND\x20role_id\x20IS\x20NULL','resource','length','user','actions','query','COMMIT'];Q=function(){return X;};return Q();}
@@ -0,0 +1,10 @@
1
+ import type { AppContext, User } from "../../../context.js";
2
+ import { getResourceScopes } from "./get-resource-scopes.js";
3
+ export declare function setResourceScopes(params: {
4
+ resource: string;
5
+ user_id?: string;
6
+ role_id?: string;
7
+ scopes: Record<string, unknown>;
8
+ user: User;
9
+ }, ctx: AppContext): ReturnType<typeof getResourceScopes>;
10
+ //# sourceMappingURL=set-resource-scopes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-resource-scopes.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/set-resource-scopes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,wBAAsB,iBAAiB,CACrC,MAAM,EAAE;IACN,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,IAAI,EAAE,IAAI,CAAC;CACZ,EACD,GAAG,EAAE,UAAU,GACd,UAAU,CAAC,OAAO,iBAAiB,CAAC,CA6CtC"}
@@ -0,0 +1 @@
1
+ import{ValidationError}from'../../../errors.js';function k(h,n){h=h-0x108;const B=Q();let G=B[h];return G;}import{clearResourceScopeCache}from'../../../plugins/resource/utils/scope.js';import{getResourceScopes}from'./get-resource-scopes.js';export async function setResourceScopes(h,n){const Z=k;if(Boolean(h[Z(0x108)])===Boolean(h[Z(0x109)]))throw new ValidationError('Provide\x20exactly\x20one\x20of\x20user_id\x20or\x20role_id');if(Object['keys'](h['scopes'])[Z(0x10a)]===0x0)throw new ValidationError(Z(0x10b));const B=await n['pg'][Z(0x10c)]();try{await B['query'](Z(0x10d)),await B['query']('DELETE\x20FROM\x20admin.role_access_scope\x0a\x20\x20\x20\x20\x20\x20\x20WHERE\x20resource\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20role_id\x20IS\x20NOT\x20DISTINCT\x20FROM\x20$2\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20user_id\x20IS\x20NOT\x20DISTINCT\x20FROM\x20$3',[h['resource'],h['role_id']??null,h[Z(0x108)]??null]);for(const [G,f]of Object['entries'](h['scopes'])){await B[Z(0x10e)]('INSERT\x20INTO\x20admin.role_access_scope\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(resource,\x20role_id,\x20user_id,\x20scope,\x20value,\x20enabled,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5::jsonb,\x20TRUE,\x20$6,\x20$6)',[h['resource'],h[Z(0x109)]??null,h[Z(0x108)]??null,G,JSON['stringify'](f),h['user']['id']]);}await B['query']('COMMIT');}catch(j){await B['query']('ROLLBACK');throw j;}finally{B['release']();}return clearResourceScopeCache(),getResourceScopes({'resource':h['resource']},n);}function Q(){const e=['user_id','role_id','length','At\x20least\x20one\x20scope\x20must\x20be\x20provided','connect','BEGIN','query'];Q=function(){return e;};return Q();}
@@ -1 +1 @@
1
- function G(w,h){w=w-0x9a;var S=z();var X=S[w];return X;}export async function updateDictionary(w,h){var S=G;return await h['dictionary']['put'](w['name'],w[S(0x9a)]),{'success':!![]};}function z(){var X=['items'];z=function(){return X;};return z();}
1
+ export async function updateDictionary(h,n){var B=k;return await n['dictionary'][B(0x156)](h[B(0x157)],h[B(0x158)]),{'success':!![]};}function k(h,n){h=h-0x156;var B=Q();var G=B[h];return G;}function Q(){var G=['put','name','items'];Q=function(){return G;};return Q();}
@@ -1 +1 @@
1
- function z(){const v=['entries'];z=function(){return v;};return z();}function G(w,h){w=w-0xc6;const S=z();let X=S[w];return X;}import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(w,h){const Y=G;if(!Object['keys'](w['patch'])['length'])throw new ValidationError('Settings\x20patch\x20is\x20empty');for(const [S,X]of Object[Y(0xc6)](w['patch'])){if(!S['trim']()||S['includes']('..'))throw new ValidationError('Invalid\x20setting\x20key:\x20'+S);await h['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',[S,JSON['stringify'](X),w['user']['id']]);}return{'success':!![]};}
1
+ import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(h,n){const f=k;if(!Object['keys'](h[f(0x1bb)])[f(0x1bc)])throw new ValidationError('Settings\x20patch\x20is\x20empty');for(const [B,G]of Object['entries'](h['patch'])){if(!B['trim']()||B['includes']('..'))throw new ValidationError(f(0x1bd)+B);await n['pg'][f(0x1be)]('\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',[B,JSON['stringify'](G),h['user']['id']]);}return{'success':!![]};}function k(h,n){h=h-0x1bb;const B=Q();let G=B[h];return G;}function Q(){const j=['patch','length','Invalid\x20setting\x20key:\x20','query'];Q=function(){return j;};return Q();}
@@ -1 +1 @@
1
- import{ForbiddenError}from'../../errors.js';function G(w,h){w=w-0x16a;var S=z();var X=S[w];return X;}function z(){var X=['type','Admin\x20access\x20required','permissions'];z=function(){return X;};return z();}export function requireAdmin(w,h){var S=G;if(!w)throw new ForbiddenError('User\x20required');if(w[S(0x16a)]!=='admin')throw new ForbiddenError(S(0x16b));if(w['type']!=='admin'&&h&&!w[S(0x16c)]?.['includes'](h))throw new ForbiddenError('Missing\x20permission:\x20'+h);}
1
+ import{ForbiddenError}from'../../errors.js';function Q(){var G=['User\x20required','admin','permissions','includes'];Q=function(){return G;};return Q();}function k(h,n){h=h-0x10b;var B=Q();var G=B[h];return G;}export function requireAdmin(h,n){var B=k;if(!h)throw new ForbiddenError(B(0x10b));if(h['type']!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(h['type']!==B(0x10c)&&n&&!h[B(0x10d)]?.[B(0x10e)](n))throw new ForbiddenError('Missing\x20permission:\x20'+n);}
@@ -1 +1 @@
1
- function G(w,h){w=w-0x69;const S=z();let X=S[w];return X;}export const safeUser=w=>{const Y=G,h=['password','salt',Y(0x69),'credentials'];return Object[Y(0x6a)](Object[Y(0x6b)](w)[Y(0x6c)](([S])=>!h[Y(0x6d)](X=>S['toLowerCase']()['includes'](X))));};function z(){const v=['secret','fromEntries','entries','filter','some'];z=function(){return v;};return z();}
1
+ export const safeUser=h=>{const f=k,n=['password','salt','secret',f(0x1c2)];return Object[f(0x1c3)](Object['entries'](h)['filter'](([B])=>!n[f(0x1c4)](G=>B[f(0x1c5)]()['includes'](G))));};function k(h,n){h=h-0x1c2;const B=Q();let G=B[h];return G;}function Q(){const j=['credentials','fromEntries','some','toLowerCase'];Q=function(){return j;};return Q();}
@@ -1 +1 @@
1
- import{UnsupportedError}from'../../errors.js';export function unsupported(w){throw new UnsupportedError(w+'\x20requires\x20a\x20project/provider\x20implementation');}
1
+ import{UnsupportedError}from'../../errors.js';export function unsupported(h){throw new UnsupportedError(h+'\x20requires\x20a\x20project/provider\x20implementation');}
@@ -1 +1 @@
1
- import{writeAudit}from'./services/write-audit.js';export function createAudit(w){const h=writeAudit(w);return{'write':h};}
1
+ import{writeAudit}from'./services/write-audit.js';export function createAudit(h){const n=writeAudit(h);return{'write':n};}
@@ -1 +1 @@
1
- const secretPattern=/password|token|secret|credential|salt/i;function z(){const V=['isArray','fromEntries','query','map','warn','admin.audit_log','newValue','\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','resource','fields','test','field'];z=function(){return V;};return z();}function G(w,h){w=w-0x1a2;const S=z();let X=S[w];return X;}function clean(w){const e=G;if(Array[e(0x1a2)](w))return w['map'](clean);if(w&&typeof w==='object')return Object[e(0x1a3)](Object['entries'](w)['map'](([h,S])=>[h,secretPattern['test'](h)?'[REDACTED]':clean(S)]));return w;}export function writeAudit(w){let h,S;async function X(){const Z=G;if(!w['pg'])return![];if(h!==undefined)return h;return S??=w['pg'][Z(0x1a4)]('\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'](Y=>{const K=Z,v=new Set(Y['rows'][K(0x1a5)](D=>D['table_name']));return h=v['has']('audit_log')&&v['has']('audit_log_data'),!h&&w['logger'][K(0x1a6)]({'expectedTables':[K(0x1a7),'admin.audit_log_data'],'foundTables':[...v]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),h;})['catch'](Y=>{return h=![],w['logger']['warn']({'err':Y},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),S;}return async function Y(v){const y=G;if(!await X())return w['logger']['info']({'auditFallback':!![],'event':clean({...v,'changes':v['changes']?.['map'](q=>({...q,'oldValue':clean(q['oldValue']),'newValue':clean(q[y(0x1a8)])}))})},'audit'),0x0;if(!w['pg'])throw new Error('empty\x20pg');const D=await w['pg'][y(0x1a4)](y(0x1a9),[v['userId']??null,v['module'],v[y(0x1aa)],v['resourceId']==null?null:String(v['resourceId']),v[y(0x1ab)]??null,v['action'],v['requestId']??null,v['ipAddress']??null,clean(v['metadata']??{})]),o=D['rows'][0x0]['id'];for(const q of v['changes']??[]){if(secretPattern[y(0x1ac)](q['field']))continue;await w['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',[o,q[y(0x1ad)],JSON['stringify'](clean(q['oldValue'])),JSON['stringify'](clean(q['newValue']))]);}return o;};}
1
+ function k(h,n){h=h-0xfb;const B=Q();let G=B[h];return G;}function Q(){const p=['isArray','entries','[REDACTED]','query','then','rows','admin.audit_log','admin.audit_log_data','Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled','changes','map','oldValue','newValue','resource','fields','metadata','test','field'];Q=function(){return p;};return Q();}const secretPattern=/password|token|secret|credential|salt/i;function clean(h){const P=k;if(Array[P(0xfb)](h))return h['map'](clean);if(h&&typeof h==='object')return Object['fromEntries'](Object[P(0xfc)](h)['map'](([n,B])=>[n,secretPattern['test'](n)?P(0xfd):clean(B)]));return h;}export function writeAudit(h){let n,B;async function G(){const u=k;if(!h['pg'])return![];if(n!==undefined)return n;return B??=h['pg'][u(0xfe)]('\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')[u(0xff)](f=>{const X=u,j=new Set(f[X(0x100)]['map'](Z=>Z['table_name']));return n=j['has']('audit_log')&&j['has']('audit_log_data'),!n&&h['logger']['warn']({'expectedTables':[X(0x101),X(0x102)],'foundTables':[...j]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),n;})['catch'](f=>{const H=u;return n=![],h['logger']['warn']({'err':f},H(0x103)),![];}),B;}return async function f(j){const i=k;if(!await G())return h['logger']['info']({'auditFallback':!![],'event':clean({...j,'changes':j[i(0x104)]?.[i(0x105)](b=>({...b,'oldValue':clean(b[i(0x106)]),'newValue':clean(b[i(0x107)])}))})},'audit'),0x0;if(!h['pg'])throw new Error('empty\x20pg');const Z=await h['pg']['query']('\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',[j['userId']??null,j['module'],j[i(0x108)],j['resourceId']==null?null:String(j['resourceId']),j[i(0x109)]??null,j['action'],j['requestId']??null,j['ipAddress']??null,clean(j[i(0x10a)]??{})]),e=Z['rows'][0x0]['id'];for(const b of j['changes']??[]){if(secretPattern[i(0x10b)](b['field']))continue;await h['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',[e,b[i(0x10c)],JSON['stringify'](clean(b['oldValue'])),JSON['stringify'](clean(b['newValue']))]);}return e;};}
@@ -1 +1 @@
1
- function z(){const v=['query'];z=function(){return v;};return z();}function G(w,h){w=w-0x1e7;const S=z();let X=S[w];return X;}export async function getUserPermissions(w,h){const Y=G,S=await h['pg'][Y(0x1e7)]('\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',[w]);return S['rows']['map'](X=>X['permission']);}
1
+ function Q(){const j=['rows'];Q=function(){return j;};return Q();}function k(h,n){h=h-0x17c;const B=Q();let G=B[h];return G;}export async function getUserPermissions(h,n){const f=k,B=await n['pg']['query']('\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',[h]);return B[f(0x17c)]['map'](G=>G['permission']);}
@@ -1 +1 @@
1
- export*from'./auth.types.js';import{randomBytes,scrypt as w,timingSafeEqual}from'node:crypto';function G(w,h){w=w-0x1f3;const S=z();let X=S[w];return X;}import{mkdir,readFile,unlink,writeFile}from'node:fs/promises';import{join,resolve}from'node:path';function z(){const Q=['path','.json','code','scrypt$','toString','hex','from','warn','register','cookieOptions','database','storagePath','./storage','sessions','secret','registerUserDeserializer'];z=function(){return Q;};return z();}import{promisify}from'node:util';const scrypt=promisify(w);import h from'@fastify/cookie';import S from'@fastify/session';import{Authenticator}from'@fastify/passport';import X from'fastify-session-redis-store';import{getUserPermissions}from'./get-user-permissions.js';const fastifyPassport=new Authenticator();class FileSessionStore{['path'];constructor(Y){this['path']=Y,void mkdir(this['path'],{'recursive':!![]});}['fileFor'](Y){const y=G;return join(this[y(0x1f3)],Y+y(0x1f4));}async['get'](Y,v){try{const D=await readFile(this['fileFor'](Y),'utf8');v(null,JSON['parse'](D));}catch(o){const q=o;if(q['code']==='ENOENT'){v(null,undefined);return;}v(q,undefined);}}async['set'](Y,v,D){try{await mkdir(this['path'],{'recursive':!![]}),await writeFile(this['fileFor'](Y),JSON['stringify'](v),'utf8'),D();}catch(o){D(o);}}async['destroy'](Y,v){try{await unlink(this['fileFor'](Y))['catch'](D=>{const V=G;if(D[V(0x1f5)]!=='ENOENT')throw D;}),v();}catch(D){v(D);}}}export*from'./verifyUser.js';export*from'./get-user-permissions.js';export async function hashPassword(Y){const O=G,v=randomBytes(0x10),D=await scrypt(Y,v,0x40);return O(0x1f6)+v[O(0x1f7)]('hex')+'$'+D[O(0x1f7)](O(0x1f8));}export async function verifyPassword(Y,v){const H=G,[D,o,q]=v?.['split']('$')||[];if(D!=='scrypt'||!o||!q)return![];const e=Buffer['from'](o,'hex'),Z=Buffer[H(0x1f9)](q,'hex'),K=await scrypt(Y,e,Z['length']);return timingSafeEqual(K,Z);}export async function createSessionStore(Y,v){const R=G,{config:D,redis:o}=v;if(!D){console[R(0x1fa)]('Missing\x20config\x20-\x20skipping\x20session\x20store\x20creation');return;}if(process.env.NODE_ENV==='test'||process.env.VITEST)return;await Y[R(0x1fb)](h,{'parseOptions':D['auth'][R(0x1fc)]});const q=D['redis']['host']?new X({'prefix':D['auth']['cookieName']+':'+(D['pg']?.[R(0x1fd)]||'db')+':','client':o}):new FileSessionStore(resolve(D[R(0x1fe)]??R(0x1ff),R(0x200)));await Y[R(0x1fb)](S,{'secret':D['auth'][R(0x201)],'cookieName':D['auth']['cookieName'],'cookie':D['auth'][R(0x1fc)],'store':q}),await Y['register'](fastifyPassport['initialize']()),await Y['register'](fastifyPassport['secureSession']()),fastifyPassport['registerUserSerializer'](async e=>({'user':e})),fastifyPassport[R(0x202)](async e=>{const Z=e?.['user']||e;return Z?.['id']&&(Z['permissions']=await getUserPermissions(Z['id'],v)),Z;});}
1
+ const H=k;export*from'./auth.types.js';import{randomBytes,scrypt as h,timingSafeEqual}from'node:crypto';import{mkdir,readFile,unlink,writeFile}from'node:fs/promises';function Q(){const U=['get','code','set','stringify','destroy','catch','toString','hex','from','test','redis','host','database','./storage','register','secureSession','registerUserDeserializer'];Q=function(){return U;};return Q();}import{join,resolve}from'node:path';import{promisify}from'node:util';const scrypt=promisify(h);function k(h,n){h=h-0x102;const B=Q();let G=B[h];return G;}import n from'@fastify/cookie';import B from'@fastify/session';import{Authenticator}from'@fastify/passport';import G from'fastify-session-redis-store';import{getUserPermissions}from'./get-user-permissions.js';const fastifyPassport=new Authenticator();class FileSessionStore{['path'];constructor(f){this['path']=f,void mkdir(this['path'],{'recursive':!![]});}['fileFor'](f){return join(this['path'],f+'.json');}async[H(0x102)](f,j){const i=H;try{const Z=await readFile(this['fileFor'](f),'utf8');j(null,JSON['parse'](Z));}catch(e){const b=e;if(b[i(0x103)]==='ENOENT'){j(null,undefined);return;}j(b,undefined);}}async[H(0x104)](f,j,Z){const p=H;try{await mkdir(this['path'],{'recursive':!![]}),await writeFile(this['fileFor'](f),JSON[p(0x105)](j),'utf8'),Z();}catch(e){Z(e);}}async[H(0x106)](f,j){const z=H;try{await unlink(this['fileFor'](f))[z(0x107)](Z=>{if(Z['code']!=='ENOENT')throw Z;}),j();}catch(Z){j(Z);}}}export*from'./verifyUser.js';export*from'./get-user-permissions.js';export async function hashPassword(f){const t=H,j=randomBytes(0x10),Z=await scrypt(f,j,0x40);return'scrypt$'+j[t(0x108)](t(0x109))+'$'+Z['toString']('hex');}export async function verifyPassword(f,j){const m=H,[Z,e,b]=j?.['split']('$')||[];if(Z!=='scrypt'||!e||!b)return![];const P=Buffer[m(0x10a)](e,'hex'),u=Buffer[m(0x10a)](b,'hex'),X=await scrypt(f,P,u['length']);return timingSafeEqual(X,u);}export async function createSessionStore(f,j){const A=H,{config:Z,redis:e}=j;if(!Z){console['warn']('Missing\x20config\x20-\x20skipping\x20session\x20store\x20creation');return;}if(process.env.NODE_ENV===A(0x10b)||process.env.VITEST)return;await f['register'](n,{'parseOptions':Z['auth']['cookieOptions']});const b=Z[A(0x10c)][A(0x10d)]?new G({'prefix':Z['auth']['cookieName']+':'+(Z['pg']?.[A(0x10e)]||'db')+':','client':e}):new FileSessionStore(resolve(Z['storagePath']??A(0x10f),'sessions'));await f['register'](B,{'secret':Z['auth']['secret'],'cookieName':Z['auth']['cookieName'],'cookie':Z['auth']['cookieOptions'],'store':b}),await f['register'](fastifyPassport['initialize']()),await f[A(0x110)](fastifyPassport[A(0x111)]()),fastifyPassport['registerUserSerializer'](async P=>({'user':P})),fastifyPassport[A(0x112)](async P=>{const u=P?.['user']||P;return u?.['id']&&(u['permissions']=await getUserPermissions(u['id'],j)),u;});}
@@ -1 +1 @@
1
- function z(){const K=['not\x20enough\x20params:\x20user','user\x20not\x20found','Wrong\x20password'];z=function(){return K;};return z();}function G(w,h){w=w-0x19c;const S=z();let X=S[w];return X;}import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';export async function verifyUser({user:w,password:h,ip:S},{pg:X,logger:Y}){const Z=G;if(!w||w==='')throw new BadRequestError(Z(0x19c));if(!h||h==='')throw new BadRequestError('not\x20enough\x20params:\x20password');Y['metrics']('user.login');const v='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',D=await X['query'](v,[w])['then'](q=>q['rows']?.[0x0]);if(!D){const q=Z(0x19d);Y['info']({'file':'auth/warn','error':q,'user':w,'ip':S});throw new BadRequestError(q);}const o=await verifyPassword(h,D['password_hash']);if(!o){const e=Z(0x19e);Y['info']({'file':'auth/warn','error':e,'user':w,'ip':S});throw new BadRequestError(e);}return delete D['password_hash'],D;}
1
+ import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';function Q(){const X=['metrics','rows','info'];Q=function(){return X;};return Q();}function k(h,n){h=h-0xe6;const B=Q();let G=B[h];return G;}export async function verifyUser({user:h,password:n,ip:B},{pg:G,logger:f}){const u=k;if(!h||h==='')throw new BadRequestError('not\x20enough\x20params:\x20user');if(!n||n==='')throw new BadRequestError('not\x20enough\x20params:\x20password');f[u(0xe6)]('user.login');const j='select\x20uid\x20as\x20id,\x20user_type\x20as\x20type,\x20password_hash,\x20twofa,\x20first_name,\x20middle_name,last_name,email,phone,avatar,last_activity_date\x20from\x20admin.users\x20where\x20$1\x20in\x20(login,email,phone)\x20and\x20enabled\x20limit\x201',Z=await G['query'](j,[h])['then'](b=>b[u(0xe7)]?.[0x0]);if(!Z){const b='user\x20not\x20found';f[u(0xe8)]({'file':'auth/warn','error':b,'user':h,'ip':B});throw new BadRequestError(b);}const e=await verifyPassword(n,Z['password_hash']);if(!e){const P='Wrong\x20password';f['info']({'file':'auth/warn','error':P,'user':h,'ip':B});throw new BadRequestError(P);}return G['query']('update\x20admin.users\x20set\x20last_activity_date\x20=\x20now()\x20where\x20uid\x20=\x20$1',[Z['id']]),delete Z['password_hash'],Z;}
@@ -1 +1 @@
1
- import{ConflictError,NotFoundError,ValidationError}from'../errors.js';const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;export function createDictionary({pg:w,dictionaries:dictionaries=[]}){const h=new Map(),S=new Map();let X,Y;async function v(){const C=G;if(X!==undefined)return X;if(!w)throw new Error(C(0x18e));return Y??=w['query'](C(0x18f))['then'](O=>{const H=O['rows'][0x0]?.['table_name'];X=H==='dictionaries'?H:null;}),await Y,X;}function D(O){const A=G;if(!dictionaryName['test'](O))throw new ValidationError(A(0x190)+O);}function o(O){const L=G;for(const H of Array[L(0x191)](O)?O:[O]){D(H['code']);if(!Array['isArray'](H['items']))throw new ValidationError(L(0x192)+H[L(0x193)]);if(h['has'](H['code']))throw new ConflictError(L(0x194)+H['code']);h[L(0x195)](H[L(0x193)],{...H,'source':'static'});}}function q(O){const F=G;return h[F(0x196)](O);}async function e(O){const j=G;D(O);const H=h['get'](O);if(H&&H[j(0x197)])return H[j(0x198)];const R=await v();if(!R)throw new NotFoundError('Dictionary\x20table\x20not\x20found');const Q=await w?.['query'](j(0x199),[O]);if(Q?.['rows']?.[j(0x19a)]){const P=Q?.['rows'];return h['set'](O,{'code':O,'name':O,'items':P,'source':j(0x19b),'checked':!![]}),P;}if(!H?.[j(0x198)])throw new NotFoundError('Dictionary\x20not\x20found:\x20'+O);return H['checked']=!![],H[j(0x198)];}async function Z(O,H){const u=G;D(O);if(!Array['isArray'](H))throw new ValidationError(u(0x19c));const R=await v();if(!R)throw new NotFoundError('Dictionary\x20table\x20not\x20found');if(!w)throw new Error('empty\x20pg');const Q=await w['connect']();try{await Q[u(0x19d)]('BEGIN');const P=await Q['query'](u(0x19e),[O,O,'fcore','custom',!![]]),x=P[u(0x19f)][0x0]['id'];await Q['query'](u(0x1a0),[x]);for(const c of H){await Q[u(0x19d)]('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.dictionary_items\x20(dictionary_id,\x20code,\x20name,\x20parent_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\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\x20\x20\x20\x20\x20\x20\x20\x20',[x,c['code'],c['name'],c['parentId']??null]);}await Q[u(0x19d)](u(0x1a1));}catch(d){await Q['query']('ROLLBACK');throw d;}finally{Q[u(0x1a2)]();}h['set'](O,{'items':H,'code':O,'source':'static','checked':!![]}),S['set'](O,(S['get'](O)??0x0)+0x1);}function K(O){const t=G;return D(O),S[t(0x195)](O,(S[t(0x1a3)](O)??0x0)+0x1),h[t(0x1a4)](O);}function y(O){return S['get'](O)??0x0;}async function V(){const O=[...h['values']()]['map'](({code:Q,name:P,source:x})=>({'code':Q,'name':P??Q,'source':x})),H=await v();if(!H)return O;if(!w)throw new Error('empty\x20pg');const R=await w['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20code,\x20name,\x20\x27database\x27\x20AS\x20source\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.dictionaries\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20');for(const Q of R['rows']){!h['has'](Q['code'])&&O['push'](Q);}return O;}return o(dictionaries),{'register':o,'get':e,'put':Z,'clear':K,'revision':y,'list':V,'has':q};}function G(w,h){w=w-0x18e;const S=z();let X=S[w];return X;}function z(){const s=['empty\x20pg','\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\x20=\x20\x27dictionaries\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20LIMIT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20','Invalid\x20dictionary\x20name:\x20','isArray','Invalid\x20dictionary\x20items:\x20','code','Dictionary\x20already\x20registered:\x20','set','has','checked','items','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20di.code,\x20di.name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.dictionary_items\x20di\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20JOIN\x20admin.dictionaries\x20d\x20ON\x20d.id\x20=\x20di.dictionary_id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20d.code\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20di.name\x0a\x20\x20\x20\x20\x20\x20\x20\x20','length','database','Dictionary\x20items\x20must\x20be\x20an\x20array','query','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.dictionaries\x20(code,\x20name,\x20module,\x20source,\x20editable)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT\x20(code)\x20DO\x20UPDATE\x20SET\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20name\x20=\x20EXCLUDED.name,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module\x20=\x20EXCLUDED.module,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20source\x20=\x20EXCLUDED.source,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20editable\x20=\x20EXCLUDED.editable,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated_at\x20=\x20now()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','rows','DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1','COMMIT','release','get','delete'];z=function(){return s;};return z();}
1
+ import{ConflictError,NotFoundError,ValidationError}from'../errors.js';function k(h,n){h=h-0x12f;const B=Q();let G=B[h];return G;}const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;function Q(){const r=['\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\x20=\x20\x27dictionaries\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20LIMIT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20','test','isArray','code','set','static','checked','rows','items','Dictionary\x20items\x20must\x20be\x20an\x20array','empty\x20pg','query','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.dictionaries\x20(code,\x20name,\x20module,\x20source,\x20editable)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT\x20(code)\x20DO\x20UPDATE\x20SET\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20name\x20=\x20EXCLUDED.name,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module\x20=\x20EXCLUDED.module,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20source\x20=\x20EXCLUDED.source,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20editable\x20=\x20EXCLUDED.editable,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated_at\x20=\x20now()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','fcore','DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1','name'];Q=function(){return r;};return Q();}export function createDictionary({pg:h,dictionaries:dictionaries=[]}){const n=new Map(),B=new Map();let G,f;async function j(){const d=k;if(G!==undefined)return G;if(!h)throw new Error('empty\x20pg');return f??=h['query'](d(0x12f))['then'](p=>{const z=p['rows'][0x0]?.['table_name'];G=z==='dictionaries'?z:null;}),await f,G;}function Z(p){const W=k;if(!dictionaryName[W(0x130)](p))throw new ValidationError('Invalid\x20dictionary\x20name:\x20'+p);}function e(p){const V=k;for(const z of Array[V(0x131)](p)?p:[p]){Z(z[V(0x132)]);if(!Array[V(0x131)](z['items']))throw new ValidationError('Invalid\x20dictionary\x20items:\x20'+z['code']);if(n['has'](z[V(0x132)]))throw new ConflictError('Dictionary\x20already\x20registered:\x20'+z['code']);n[V(0x133)](z[V(0x132)],{...z,'source':V(0x134)});}}function b(p){return n['has'](p);}async function P(p){const q=k;Z(p);const z=n['get'](p);if(z&&z[q(0x135)])return z['items'];const t=await j();if(!t)throw new NotFoundError('Dictionary\x20table\x20not\x20found');const m=await h?.['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20di.code,\x20di.name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.dictionary_items\x20di\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20JOIN\x20admin.dictionaries\x20d\x20ON\x20d.id\x20=\x20di.dictionary_id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20d.code\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20di.name\x0a\x20\x20\x20\x20\x20\x20\x20\x20',[p]);if(m?.[q(0x136)]?.['length']){const A=m?.['rows'];return n['set'](p,{'code':p,'name':p,'items':A,'source':'database','checked':!![]}),A;}if(!z?.[q(0x137)])throw new NotFoundError('Dictionary\x20not\x20found:\x20'+p);return z[q(0x135)]=!![],z[q(0x137)];}async function u(p,z){const y=k;Z(p);if(!Array['isArray'](z))throw new ValidationError(y(0x138));const t=await j();if(!t)throw new NotFoundError('Dictionary\x20table\x20not\x20found');if(!h)throw new Error(y(0x139));const m=await h['connect']();try{await m[y(0x13a)]('BEGIN');const A=await m['query'](y(0x13b),[p,p,y(0x13c),'custom',!![]]),U=A['rows'][0x0]['id'];await m['query'](y(0x13d),[U]);for(const O of z){await m['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.dictionary_items\x20(dictionary_id,\x20code,\x20name,\x20parent_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\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\x20\x20\x20\x20\x20\x20\x20\x20',[U,O['code'],O[y(0x13e)],O['parentId']??null]);}await m[y(0x13a)]('COMMIT');}catch(T){await m[y(0x13a)]('ROLLBACK');throw T;}finally{m['release']();}n[y(0x133)](p,{'items':z,'code':p,'source':y(0x134),'checked':!![]}),B['set'](p,(B['get'](p)??0x0)+0x1);}function X(p){return Z(p),B['set'](p,(B['get'](p)??0x0)+0x1),n['delete'](p);}function H(p){return B['get'](p)??0x0;}async function i(){const Y=k,p=[...n['values']()]['map'](({code:m,name:A,source:U})=>({'code':m,'name':A??m,'source':U})),z=await j();if(!z)return p;if(!h)throw new Error(Y(0x139));const t=await h[Y(0x13a)]('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20code,\x20name,\x20\x27database\x27\x20AS\x20source\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.dictionaries\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20');for(const m of t['rows']){!n['has'](m[Y(0x132)])&&p['push'](m);}return p;}return e(dictionaries),{'register':e,'get':P,'put':u,'clear':X,'revision':H,'list':i,'has':b};}
@@ -1 +1 @@
1
- import w from'node:fs/promises';import h from'node:path';function z(){const N=['startsWith','includes','replace','alloc','push','concat','./storage','join','removed','tokenSecret','randomBytes','files','resolve','relative','writeFile','access','mkdir','dirname','ENOENT','toString','base64url','split','sha256','from','length','hex','region','accessKey','secretAccessKey','secretKey','send','bucket','httpStatusCode','update','createHmac','Invalid\x20file\x20token'];z=function(){return N;};return z();}import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';import S from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function G(w,h){w=w-0x97;const S=z();let X=S[w];return X;}function normalizeRelativePath(X){const R=G;if(!X||X[R(0x97)]('/')||X[R(0x98)]('..'))throw new ValidationError('Invalid\x20file\x20path');return X['replace'](/\\/g,'/')[R(0x99)](/^\/+/,'');}function keyFor(X,Y){const Q=G;return''+((X??'')['replace'](/^\/+|\/+$/g,'')?(X??'')[Q(0x99)](/^\/+|\/+$/g,'')+'/':'')+normalizeRelativePath(Y);}async function bodyToBuffer(X){const P=G;if(!X)return Buffer[P(0x9a)](0x0);const Y=X;if(typeof Y['transformToByteArray']==='function')return Buffer['from'](await Y['transformToByteArray']());const v=[];for await(const D of X){v[P(0x9b)](Buffer['from'](D));}return Buffer[P(0x9c)](v);}export function createFileLocal(X){const x=G,Y=h['resolve'](X['storagePath']||x(0x9d)),v=h[x(0x9e)](Y,x(0x9f)),D=X[x(0xa0)]??process.env.FILE_TOKEN_SECRET??S[x(0xa1)](0x20)['toString']('hex'),o=Z=>{const c=x,K=normalizeRelativePath(Z),y=(X['folder']??c(0xa2))[c(0x99)](/^\/+|\/+$/g,'');return y?h[c(0x9e)](y,K):K;},q=Z=>{const d=x,K=o(Z),y=h[d(0xa3)](Y,K),V=h['relative'](Y,y);if(V['startsWith']('..')||h['isAbsolute'](V))throw new ValidationError('Invalid\x20file\x20path');return y;},e=Z=>{const C=x,K=o(Z),y=h['resolve'](v,K),V=h[C(0xa4)](v,y);if(V['startsWith']('..')||h['isAbsolute'](V))throw new ValidationError('Invalid\x20file\x20path');return y;};return{async 'put'(Z,K){const A=x,y=q(Z);await w['mkdir'](h['dirname'](y),{'recursive':!![]}),await w[A(0xa5)](y,K instanceof Buffer?K:await bodyToBuffer(K));},async 'get'(Z){return w['readFile'](q(Z));},async 'exists'(Z){const L=x;try{return await w[L(0xa6)](q(Z)),!![];}catch{return![];}},async 'delete'(Z){const F=x,K=q(Z),y=e(Z);try{await w[F(0xa7)](h[F(0xa8)](y),{'recursive':!![]}),await w['rename'](K,y);}catch(V){const O=V;if(O['code']!==F(0xa9))throw V;}},'create'(Z,K=X['tokenTtl']??0xe10){const j=x,y=Buffer['from'](Z)[j(0xaa)](j(0xab)),V=S['createHmac']('sha256',D)['update'](y)['digest']('base64url');return y+'.'+V;},'verify'(Z){const u=x,[K,y]=Z[u(0xac)]('.');if(!K||!y)throw new UnauthorizedError('Invalid\x20file\x20token');const V=S['createHmac'](u(0xad),D)['update'](K)['digest'](),O=Buffer[u(0xae)](y,'base64url');if(V[u(0xaf)]!==O['length']||!S['timingSafeEqual'](V,O))throw new UnauthorizedError('Invalid\x20file\x20token');const H=Buffer['from'](K,'base64url')['toString']('utf8');return H;}};}export function createFileS3(X){const t=G,Y=X['tokenSecret']??process.env.FILE_TOKEN_SECRET??S['randomBytes'](0x20)['toString'](t(0xb0)),v=new S3Client({'endpoint':X['endpoint'],'region':X[t(0xb1)]??'us-east-1','forcePathStyle':X['forcePathStyle']??!![],'credentials':X['accessKeyId']||X[t(0xb2)]?{'accessKeyId':X['accessKeyId']??X['accessKey'],'secretAccessKey':X[t(0xb3)]??X[t(0xb4)]}:undefined}),D=o=>keyFor(X['folder'],o);return{async 'put'(o,q){const s=t;await v[s(0xb5)](new PutObjectCommand({'Bucket':X[s(0xb6)],'Key':D(o),'Body':q}));},async 'get'(o){const b=t,q=await v[b(0xb5)](new GetObjectCommand({'Bucket':X['bucket'],'Key':D(o)}));return bodyToBuffer(q['Body']);},async 'exists'(o){const f=t;try{return await v['send'](new HeadObjectCommand({'Bucket':X['bucket'],'Key':D(o)})),!![];}catch(q){const e=q;if(e['$metadata']?.[f(0xb7)]===0x194||e['name']==='NotFound')return![];throw q;}},async 'delete'(o){const i=t;await v[i(0xb5)](new DeleteObjectCommand({'Bucket':X['bucket'],'Key':D(o)}));},'create'(o,q=X['tokenTtl']??0xe10){const I=t,e=Buffer['from'](o)['toString']('base64url'),Z=S['createHmac'](I(0xad),Y)[I(0xb8)](e)['digest']('base64url');return e+'.'+Z;},'verify'(o){const p=t,[q,e]=o['split']('.');if(!q||!e)throw new UnauthorizedError('Invalid\x20file\x20token');const Z=S[p(0xb9)]('sha256',Y)['update'](q)['digest'](),K=Buffer[p(0xae)](e,'base64url');if(Z[p(0xaf)]!==K[p(0xaf)]||!S['timingSafeEqual'](Z,K))throw new UnauthorizedError(p(0xba));const y=Buffer['from'](q,'base64url')['toString']('utf8');return y;}};}
1
+ import h from'node:fs/promises';import n from'node:path';import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';import B from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function normalizeRelativePath(G){const t=k;if(!G||G['startsWith']('/')||G[t(0x7b)]('..'))throw new ValidationError('Invalid\x20file\x20path');return G[t(0x7c)](/\\/g,'/')[t(0x7c)](/^\/+/,'');}function Q(){const R=['includes','replace','storagePath','join','toString','relative','Invalid\x20file\x20path','readFile','mkdir','rename','tokenTtl','from','base64url','sha256','update','digest','length','timingSafeEqual','tokenSecret','region','us-east-1','forcePathStyle','secretKey','bucket','send','httpStatusCode','Invalid\x20file\x20token'];Q=function(){return R;};return Q();}function keyFor(G,f){const m=k;return''+((G??'')[m(0x7c)](/^\/+|\/+$/g,'')?(G??'')[m(0x7c)](/^\/+|\/+$/g,'')+'/':'')+normalizeRelativePath(f);}async function bodyToBuffer(G){if(!G)return Buffer['alloc'](0x0);const f=G;if(typeof f['transformToByteArray']==='function')return Buffer['from'](await f['transformToByteArray']());const j=[];for await(const Z of G){j['push'](Buffer['from'](Z));}return Buffer['concat'](j);}function k(h,n){h=h-0x7b;const B=Q();let G=B[h];return G;}export function createFileLocal(G){const A=k,f=n['resolve'](G[A(0x7d)]||'./storage'),j=n[A(0x7e)](f,'removed'),Z=G['tokenSecret']??process.env.FILE_TOKEN_SECRET??B['randomBytes'](0x20)[A(0x7f)]('hex'),e=u=>{const X=normalizeRelativePath(u),H=(G['folder']??'files')['replace'](/^\/+|\/+$/g,'');return H?n['join'](H,X):X;},b=u=>{const X=e(u),H=n['resolve'](f,X),i=n['relative'](f,H);if(i['startsWith']('..')||n['isAbsolute'](i))throw new ValidationError('Invalid\x20file\x20path');return H;},P=u=>{const U=A,X=e(u),H=n['resolve'](j,X),i=n[U(0x80)](j,H);if(i['startsWith']('..')||n['isAbsolute'](i))throw new ValidationError(U(0x81));return H;};return{async 'put'(u,X){const H=b(u);await h['mkdir'](n['dirname'](H),{'recursive':!![]}),await h['writeFile'](H,X instanceof Buffer?X:await bodyToBuffer(X));},async 'get'(u){const O=A;return h[O(0x82)](b(u));},async 'exists'(u){try{return await h['access'](b(u)),!![];}catch{return![];}},async 'delete'(u){const T=A,X=b(u),H=P(u);try{await h[T(0x83)](n['dirname'](H),{'recursive':!![]}),await h[T(0x84)](X,H);}catch(i){const p=i;if(p['code']!=='ENOENT')throw i;}},'create'(u,X=G[A(0x85)]??0xe10){const d=A,H=Buffer[d(0x86)](u)['toString'](d(0x87)),i=B['createHmac'](d(0x88),Z)[d(0x89)](H)[d(0x8a)]('base64url');return H+'.'+i;},'verify'(u){const W=A,[X,H]=u['split']('.');if(!X||!H)throw new UnauthorizedError('Invalid\x20file\x20token');const i=B['createHmac'](W(0x88),Z)['update'](X)['digest'](),p=Buffer['from'](H,W(0x87));if(i[W(0x8b)]!==p['length']||!B[W(0x8c)](i,p))throw new UnauthorizedError('Invalid\x20file\x20token');const z=Buffer[W(0x86)](X,W(0x87))['toString']('utf8');return z;}};}export function createFileS3(G){const V=k,f=G[V(0x8d)]??process.env.FILE_TOKEN_SECRET??B['randomBytes'](0x20)['toString']('hex'),j=new S3Client({'endpoint':G['endpoint'],'region':G[V(0x8e)]??V(0x8f),'forcePathStyle':G[V(0x90)]??!![],'credentials':G['accessKeyId']||G['accessKey']?{'accessKeyId':G['accessKeyId']??G['accessKey'],'secretAccessKey':G['secretAccessKey']??G[V(0x91)]}:undefined}),Z=e=>keyFor(G['folder'],e);return{async 'put'(e,b){const q=V;await j['send'](new PutObjectCommand({'Bucket':G[q(0x92)],'Key':Z(e),'Body':b}));},async 'get'(e){const y=V,b=await j[y(0x93)](new GetObjectCommand({'Bucket':G[y(0x92)],'Key':Z(e)}));return bodyToBuffer(b['Body']);},async 'exists'(e){const Y=V;try{return await j['send'](new HeadObjectCommand({'Bucket':G[Y(0x92)],'Key':Z(e)})),!![];}catch(b){const P=b;if(P['$metadata']?.[Y(0x94)]===0x194||P['name']==='NotFound')return![];throw b;}},async 'delete'(e){await j['send'](new DeleteObjectCommand({'Bucket':G['bucket'],'Key':Z(e)}));},'create'(e,b=G['tokenTtl']??0xe10){const r=V,P=Buffer[r(0x86)](e)['toString']('base64url'),u=B['createHmac'](r(0x88),f)['update'](P)['digest']('base64url');return P+'.'+u;},'verify'(e){const v=V,[b,P]=e['split']('.');if(!b||!P)throw new UnauthorizedError('Invalid\x20file\x20token');const u=B['createHmac']('sha256',f)[v(0x89)](b)['digest'](),X=Buffer['from'](P,'base64url');if(u['length']!==X['length']||!B['timingSafeEqual'](u,X))throw new UnauthorizedError(v(0x95));const H=Buffer['from'](b,v(0x87))['toString']('utf8');return H;}};}
@@ -1 +1 @@
1
- function z(){const o=['setIssuedAt','sign','message'];z=function(){return o;};return z();}function G(w,h){w=w-0xff;const S=z();let X=S[w];return X;}import{SignJWT,jwtVerify}from'jose';const secret=new TextEncoder()['encode'](process.env.AUTH_JWT_SECRET);export async function jwtSignToken(w){const v=G;if(!process.env.AUTH_JWT_SECRET)return;const {id:h,type:S,permissions:X}=w,Y=await new SignJWT({'id':h,'type':S,'permissions':X})['setProtectedHeader']({'alg':'HS256'})[v(0xff)]()['setExpirationTime']('1h')[v(0x100)](secret);return Y;}export async function jwtVerifyToken(w){const h=await jwtVerify(w,secret,{'algorithms':['HS256']})['catch'](S=>{const D=G;console['log'](S[D(0x101)]);});return h?.['payload'];}
1
+ import{SignJWT,jwtVerify}from'jose';function k(h,n){h=h-0x120;const B=Q();let G=B[h];return G;}const secret=new TextEncoder()['encode'](process.env.AUTH_JWT_SECRET);function Q(){const e=['catch','log','message','payload'];Q=function(){return e;};return Q();}export async function jwtSignToken(h){if(!process.env.AUTH_JWT_SECRET)return;const {id:n,type:B,permissions:G}=h,f=await new SignJWT({'id':n,'type':B,'permissions':G})['setProtectedHeader']({'alg':'HS256'})['setIssuedAt']()['setExpirationTime']('1h')['sign'](secret);return f;}export async function jwtVerifyToken(h){const j=k,n=await jwtVerify(h,secret,{'algorithms':['HS256']})[j(0x120)](B=>{const Z=j;console[Z(0x121)](B[Z(0x122)]);});return n?.[j(0x123)];}
@@ -1 +1 @@
1
- function z(){const q=['transport','info','accessToken'];z=function(){return q;};return z();}function G(w,h){w=w-0x1b5;const S=z();let X=S[w];return X;}import w from'pino';export function createLogger(){const o=G,h=w[o(0x1b5)]({'target':'./transport.js'}),S=w({'level':o(0x1b6),'timestamp':w['stdTimeFunctions']['isoTime'],'base':{'service':'app'},'redact':{'paths':['req.headers.authorization','password','token',o(0x1b7),'refreshToken'],'censor':'[REDACTED]'}},h),X={};function Y(v,D){if(v===undefined)return{...X};X[v]=(X[v]??0x0)+(D??0x1);}return Object['assign'](S,{'close':async()=>h['end'](),'metrics':Y,'file':()=>S['info']['bind'](S)});}
1
+ import h from'pino';export function createLogger(){const e=k,n=h['transport']({'target':'./transport.js'}),B=h({'level':'info','timestamp':h[e(0x1ef)][e(0x1f0)],'base':{'service':'app'},'redact':{'paths':['req.headers.authorization',e(0x1f1),'token','accessToken',e(0x1f2)],'censor':'[REDACTED]'}},n),G={};function f(j,Z){if(j===undefined)return{...G};G[j]=(G[j]??0x0)+(Z??0x1);}return Object[e(0x1f3)](B,{'close':async()=>n[e(0x1f4)](),'metrics':f,'file':()=>B[e(0x1f5)]['bind'](B)});}function k(h,n){h=h-0x1ef;const B=Q();let G=B[h];return G;}function Q(){const b=['stdTimeFunctions','isoTime','password','refreshToken','assign','end','info'];Q=function(){return b;};return Q();}
@@ -1 +1 @@
1
- const o=G;import w from'node:fs';import h from'node:path';import S from'pino-abstract-transport';const LEVELS={0x1e:'info',0x28:'warn',0x32:o(0xa1),0x3c:'error'},streams=new Map();function G(w,h){w=w-0xa1;const S=z();let X=S[w];return X;}function getDate(){const q=o;return new Date()[q(0xa2)]()['slice'](0x0,0xa);}function createStream(X,Y){const e=o,v=h[e(0xa3)]('logs',X);return w['mkdirSync'](v,{'recursive':!![]}),w[e(0xa4)](h['join'](v,Y+e(0xa5)),{'flags':'a'});}function getStream(X){const Z=o,Y=getDate(),v=streams[Z(0xa6)](X);if(v&&v['date']===Y)return v['stream'];v?.['stream'][Z(0xa7)]();const D=createStream(X,Y);return streams['set'](X,{'date':Y,'stream':D}),D;}function z(){const V=['error','toISOString','resolve','createWriteStream','.log','get','end','level'];z=function(){return V;};return z();}function closeStreams(){const K=o;for(const {stream:X}of streams['values']()){X[K(0xa7)]();}streams['clear']();}export default async function loggerTransport(){return S(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(X){const y=o;for await(const Y of X){const v=LEVELS[Y[y(0xa8)]];if(!v)continue;const D=getStream(Y['file']||v);delete Y['file'],D['write'](JSON['stringify'](Y)+'\x0a');}}
1
+ const e=k;import h from'node:fs';import n from'node:path';import B from'pino-abstract-transport';function Q(){const X=['info','warn','error','slice','createWriteStream','set'];Q=function(){return X;};return Q();}const LEVELS={0x1e:e(0x16a),0x28:e(0x16b),0x32:e(0x16c),0x3c:'error'},streams=new Map();function getDate(){const b=e;return new Date()['toISOString']()[b(0x16d)](0x0,0xa);}function createStream(G,f){const P=e,j=n['resolve']('logs',G);return h['mkdirSync'](j,{'recursive':!![]}),h[P(0x16e)](n['join'](j,f+'.log'),{'flags':'a'});}function getStream(G){const u=e,f=getDate(),j=streams['get'](G);if(j&&j['date']===f)return j['stream'];j?.['stream']['end']();const Z=createStream(G,f);return streams[u(0x16f)](G,{'date':f,'stream':Z}),Z;}function k(h,n){h=h-0x16a;const B=Q();let G=B[h];return G;}function closeStreams(){for(const {stream:G}of streams['values']()){G['end']();}streams['clear']();}export default async function loggerTransport(){return B(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(G){for await(const f of G){const j=LEVELS[f['level']];if(!j)continue;const Z=getStream(f['file']||j);delete f['file'],Z['write'](JSON['stringify'](f)+'\x0a');}}
@@ -1 +1 @@
1
- import w from'pg';function z(){const V=['callerStack','stack','captureStackTrace','BEGIN','COMMIT','ROLLBACK'];z=function(){return V;};return z();}function G(w,h){w=w-0x1e7;const S=z();let X=S[w];return X;}const {Pool}=w;export function createDatabase(h){const S=new Pool(h),X=S['query']['bind'](S);function Y(v,D){const o=new Error();return Error['captureStackTrace']?.(o,Y),X(v,D)['catch'](q=>{const K=G,e=q;e['sql']=v,e[K(0x1e7)]=o[K(0x1e8)];throw e;});}return S['query']=Y,S['transaction']=async function(v){const y=G,D=new Error();Error[y(0x1e9)]?.(D,S['transaction']);const o=await S['connect']();try{await o['query'](y(0x1ea));const q=await v(o);return await o['query'](y(0x1eb)),q;}catch(e){await o['query'](y(0x1ec));const Z=e;Z['callerStack']=D['stack'];throw Z;}finally{o['release']();}},S;}
1
+ import h from'pg';function k(h,n){h=h-0x8b;const B=Q();let G=B[h];return G;}const {Pool}=h;export function createDatabase(n){const H=k,B=new Pool(n),G=B['query']['bind'](B);function f(j,Z){const X=k,e=new Error();return Error['captureStackTrace']?.(e,f),G(j,Z)[X(0x8b)](b=>{const P=b;P['sql']=j,P['callerStack']=e['stack'];throw P;});}return B['query']=f,B[H(0x8c)]=async function(j){const i=H,Z=new Error();Error[i(0x8d)]?.(Z,B[i(0x8c)]);const e=await B[i(0x8e)]();try{await e['query']('BEGIN');const b=await j(e);return await e['query']('COMMIT'),b;}catch(P){await e['query'](i(0x8f));const u=P;u[i(0x90)]=Z['stack'];throw u;}finally{e[i(0x91)]();}},B;}function Q(){const p=['catch','transaction','captureStackTrace','connect','ROLLBACK','callerStack','release'];Q=function(){return p;};return Q();}
@@ -1 +1 @@
1
- import{Redis}from'ioredis';function z(){const o=['Creating\x20Redis\x20client\x20with\x20config:','get','incrby'];z=function(){return o;};return z();}function G(w,h){w=w-0x1c6;const S=z();let X=S[w];return X;}export function createRedis(w){const D=G;console['log'](D(0x1c6),w);const h=new Redis(w);return{'get':S=>h[D(0x1c7)](S),'set':(S,X,Y,v)=>{if(v)return h['set'](S,X,'EX',v);if(typeof Y==='number')return h['set'](S,X,'EX',Y);return h['set'](S,X);},'del':S=>h['del'](S),'delete':S=>h['del'](S),'close':()=>h['quit'](),'ping':()=>h['ping'](),'hincrby':(S,X,Y)=>h['hincrby'](S,X,Y),'incrby':(S,X)=>h[D(0x1c8)](S,X)};}
1
+ import{Redis}from'ioredis';export function createRedis(h){const Z=k;console[Z(0xcd)](Z(0xce),h);const n=new Redis(h);return{'get':B=>n[Z(0xcf)](B),'set':(B,G,f,j)=>{if(j)return n['set'](B,G,'EX',j);if(typeof f==='number')return n['set'](B,G,'EX',f);return n['set'](B,G);},'del':B=>n['del'](B),'delete':B=>n[Z(0xd0)](B),'close':()=>n['quit'](),'ping':()=>n['ping'](),'hincrby':(B,G,f)=>n['hincrby'](B,G,f),'incrby':(B,G)=>n['incrby'](B,G)};}function k(h,n){h=h-0xcd;const B=Q();let G=B[h];return G;}function Q(){const e=['log','Creating\x20Redis\x20client\x20with\x20config:','get','del'];Q=function(){return e;};return Q();}
@@ -1 +1 @@
1
- import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';import{createFindOne}from'./services/find-one.js';function z(){const y=['has','bind','list'];z=function(){return y;};return z();}import{createCreate}from'./services/create.js';import{createUpdate}from'./services/update.js';import{createRemove}from'./services/delete.js';import{createFindRelation}from'./services/find-relation.js';function G(w,h){w=w-0xee;const S=z();let X=S[w];return X;}import{createCreateRelation}from'./services/create-relation.js';import{createDeleteRelation}from'./services/delete-relation.js';import{createUpdateRelation}from'./services/update-relation.js';export function createResource(w){const K=G,h=new ResourceRegistry(),S=createFind(w,h),X=createFindOne(w,h),Y=createCreate(w,h),v=createUpdate(w,h),D=createRemove(w,h),o=createFindRelation(w,h),q=createCreateRelation(w,h),e=createUpdateRelation(w,h),Z=createDeleteRelation(w,h);return{'register':h['register']['bind'](h),'unregister':h['unregister']['bind'](h),'has':h[K(0xee)]['bind'](h),'get':h['get'][K(0xef)](h),'list':h[K(0xf0)]['bind'](h),'find':S,'findOne':X,'create':Y,'update':v,'delete':D,'findRelation':o,'createRelation':q,'updateRelation':e,'deleteRelation':Z};}
1
+ import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';function Q(){const H=['bind','has','get'];Q=function(){return H;};return Q();}import{createFindOne}from'./services/find-one.js';function k(h,n){h=h-0x1a5;const B=Q();let G=B[h];return G;}import{createCreate}from'./services/create.js';import{createUpdate}from'./services/update.js';import{createRemove}from'./services/delete.js';import{createFindRelation}from'./services/find-relation.js';import{createCreateRelation}from'./services/create-relation.js';import{createDeleteRelation}from'./services/delete-relation.js';import{createUpdateRelation}from'./services/update-relation.js';export function createResource(h){const X=k,n=new ResourceRegistry(),B=createFind(h,n),G=createFindOne(h,n),f=createCreate(h,n),j=createUpdate(h,n),Z=createRemove(h,n),e=createFindRelation(h,n),b=createCreateRelation(h,n),P=createUpdateRelation(h,n),u=createDeleteRelation(h,n);return{'register':n['register']['bind'](n),'unregister':n['unregister'][X(0x1a5)](n),'has':n[X(0x1a6)][X(0x1a5)](n),'get':n[X(0x1a7)][X(0x1a5)](n),'list':n['list']['bind'](n),'find':B,'findOne':G,'create':f,'update':j,'delete':Z,'findRelation':e,'createRelation':b,'updateRelation':P,'deleteRelation':u};}
@@ -1 +1 @@
1
- function G(w,h){w=w-0x165;const S=z();let X=S[w];return X;}import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function z(){const e=['length','name','resources','set','has','values','Invalid\x20resource\x20contract:\x20','test'];z=function(){return e;};return z();}function validQualified(w){const X=G;return w['split']('.')[X(0x165)]<=0x2&&w['split']('.')['every'](h=>ident['test'](h));}export class ResourceRegistry{['resources']=new Map();['unregister'](w){this['resources']['delete'](w);}['register'](w,h=![]){const Y=G;for(const S of Array['isArray'](w)?w:[w]){this['validate'](S);if(this['resources']['has'](S[Y(0x166)])&&!h)throw new ConflictError('Resource\x20already\x20registered:\x20'+S[Y(0x166)]);this[Y(0x167)][Y(0x168)](S['name'],S);}}['has'](w){const v=G;return this['resources'][v(0x169)](w);}['get'](w){const D=G,h=this[D(0x167)]['get'](w);if(!h)throw new NotFoundError('Resource\x20not\x20registered:\x20'+w);return h;}['list'](){const o=G;return[...this['resources'][o(0x16a)]()];}['validate'](w){const q=G;if(w['version']!==0x1||!ident['test'](w['name'])||!validQualified(w['table'])||!ident['test'](w['key']))throw new ValidationError(q(0x16b)+w['name']);for(const [h,S]of Object['entries'](w['fields'])){if(!ident[q(0x16c)](h)||!ident['test'](S['column']??h))throw new ValidationError('Invalid\x20resource\x20field:\x20'+h);}}}
1
+ function k(h,n){h=h-0x111;const B=Q();let G=B[h];return G;}function Q(){const u=['split','test','resources','register','name','set','get','values','table'];Q=function(){return u;};return Q();}const f=k;import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function validQualified(h){const G=k;return h[G(0x111)]('.')['length']<=0x2&&h['split']('.')['every'](n=>ident[G(0x112)](n));}export class ResourceRegistry{[f(0x113)]=new Map();['unregister'](h){const j=f;this[j(0x113)]['delete'](h);}[f(0x114)](h,n=![]){const Z=f;for(const B of Array['isArray'](h)?h:[h]){this['validate'](B);if(this['resources']['has'](B[Z(0x115)])&&!n)throw new ConflictError('Resource\x20already\x20registered:\x20'+B['name']);this['resources'][Z(0x116)](B[Z(0x115)],B);}}['has'](h){return this['resources']['has'](h);}['get'](h){const e=f,n=this[e(0x113)][e(0x117)](h);if(!n)throw new NotFoundError('Resource\x20not\x20registered:\x20'+h);return n;}['list'](){const b=f;return[...this['resources'][b(0x118)]()];}['validate'](h){const P=f;if(h['version']!==0x1||!ident['test'](h['name'])||!validQualified(h[P(0x119)])||!ident['test'](h['key']))throw new ValidationError('Invalid\x20resource\x20contract:\x20'+h['name']);for(const [n,B]of Object['entries'](h['fields'])){if(!ident['test'](n)||!ident['test'](B['column']??n))throw new ValidationError('Invalid\x20resource\x20field:\x20'+n);}}}
@@ -38,6 +38,7 @@ export interface ResourceFieldContract {
38
38
  readable?: boolean;
39
39
  writable?: boolean;
40
40
  required?: boolean;
41
+ code_template?: string;
41
42
  nullable?: boolean;
42
43
  filterable?: boolean;
43
44
  searchable?: boolean;
@@ -58,7 +59,9 @@ export interface ResourceFieldContract {
58
59
  maximum?: number;
59
60
  pattern?: string;
60
61
  }
62
+ export type ResourceRelationType = 'one' | 'many';
61
63
  export interface ResourceRelationContract {
64
+ type?: ResourceRelationType;
62
65
  resource?: string;
63
66
  table?: string;
64
67
  where?: string;
@@ -79,6 +82,7 @@ export interface ResourceContract {
79
82
  table: string;
80
83
  where?: string;
81
84
  key: string;
85
+ display?: string[] | string;
82
86
  operations: ResourceOperation[];
83
87
  searchable?: string[];
84
88
  capabilities?: string[];
@@ -90,6 +94,19 @@ export interface ResourceContract {
90
94
  summary?: Record<string, ResourceSummaryItem>;
91
95
  scopes?: Record<string, string | ResourceScope>;
92
96
  }
97
+ export interface ResourceVariableDto {
98
+ key: string;
99
+ path: string;
100
+ title?: string;
101
+ type: "string" | "number" | "boolean" | "object" | "array";
102
+ resource?: string;
103
+ variables?: ResourceVariableDto[];
104
+ }
105
+ export interface ResourceSchemaDto {
106
+ resource: string;
107
+ title?: string;
108
+ variables: ResourceVariableDto[];
109
+ }
93
110
  export interface ResourceQuery {
94
111
  filter?: Record<string, unknown>;
95
112
  include?: string | string[];
@@ -105,6 +122,7 @@ export interface ResourceListResult<T = Record<string, unknown>> {
105
122
  summary: Record<string, unknown>;
106
123
  limit: number;
107
124
  time: number;
125
+ fields?: Record<string, ResourceFieldContract>;
108
126
  count: number | null;
109
127
  total: number | null;
110
128
  offset: number;
@@ -1 +1 @@
1
- {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(w,h){const K=G,S=dictionaryIndexesCache['get'](h)??new Map(),X=dictionaryRevisionsCache['get'](h)??new Map();dictionaryIndexesCache['set'](h,S),dictionaryRevisionsCache['set'](h,X);const Y=w['filter'](D=>X[K(0x16b)](D)!==h['revision'](D));if(Y['length']===0x0)return S;const v=await Promise['all'](Y['map'](async D=>{const y=K;if(!h[y(0x16c)](D))return[D,new Map()];const o=await h[y(0x16b)](D),q=new Map();for(const e of o){const Z=e['code']??e['id'];if(Z==null)continue;q[y(0x16d)](String(Z),{'id':Z,'text':e[y(0x16e)]??e['text'],...e['color']!==undefined?{'color':e['color']}:{},...e['icon']!==undefined?{'icon':e['icon']}:{}});}return[D,q];}));for(const [D,o]of v){S['set'](D,o),X['set'](D,h['revision'](D));}return S;}function z(){const H=['get','has','set','name','length','dictionary','_data'];z=function(){return H;};return z();}function G(w,h){w=w-0x16b;const S=z();let X=S[w];return X;}export async function addDictionaryLookupData(w,h,S){const V=G;if(!S||w[V(0x16f)]===0x0)return w;const X=Object['entries'](h)['flatMap'](([v,D])=>{const O=V,o=D[O(0x170)];return o?[{'field':v,'dictionaryName':o}]:[];});if(X[V(0x16f)]===0x0)return w;const Y=await getDictionaryIndexes([...new Set(X['map'](({dictionaryName:v})=>v))],S);for(const v of w){for(const {field:D,dictionaryName:o}of X){const q=v[D];v[D+V(0x171)]=q==null?null:Y[V(0x16b)](o)?.['get'](String(q))??null;}}return w;}
1
+ function Q(){const p=['get','set','length','all','code','color','icon','revision','map','_data'];Q=function(){return p;};return Q();}const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();function k(h,n){h=h-0x103;const B=Q();let G=B[h];return G;}async function getDictionaryIndexes(h,n){const X=k,B=dictionaryIndexesCache[X(0x103)](n)??new Map(),G=dictionaryRevisionsCache[X(0x103)](n)??new Map();dictionaryIndexesCache['set'](n,B),dictionaryRevisionsCache[X(0x104)](n,G);const f=h['filter'](Z=>G['get'](Z)!==n['revision'](Z));if(f[X(0x105)]===0x0)return B;const j=await Promise[X(0x106)](f['map'](async Z=>{const H=X;if(!n['has'](Z))return[Z,new Map()];const e=await n['get'](Z),b=new Map();for(const P of e){const u=P[H(0x107)]??P['id'];if(u==null)continue;b['set'](String(u),{'id':u,'text':P['name']??P['text'],...P['color']!==undefined?{'color':P[H(0x108)]}:{},...P['icon']!==undefined?{'icon':P[H(0x109)]}:{}});}return[Z,b];}));for(const [Z,e]of j){B['set'](Z,e),G['set'](Z,n[X(0x10a)](Z));}return B;}export async function addDictionaryLookupData(h,n,B){const i=k;if(!B||h[i(0x105)]===0x0)return h;const G=Object['entries'](n)['flatMap'](([j,Z])=>{const e=Z['dictionary'];return e?[{'field':j,'dictionaryName':e}]:[];});if(G['length']===0x0)return h;const f=await getDictionaryIndexes([...new Set(G[i(0x10b)](({dictionaryName:j})=>j))],B);for(const j of h){for(const {field:Z,dictionaryName:e}of G){const b=j[Z];j[Z+i(0x10c)]=b==null?null:f['get'](e)?.['get'](String(b))??null;}}return h;}