@opengis/fcore 0.0.28 → 0.0.30

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 (127) hide show
  1. package/LICENSE +3 -3
  2. package/README.md +71 -71
  3. package/dist/config.js +1 -1
  4. package/dist/context.d.ts +2 -0
  5. package/dist/context.d.ts.map +1 -1
  6. package/dist/context.js +1 -1
  7. package/dist/errors.js +1 -1
  8. package/dist/fastify.js +1 -1
  9. package/dist/fcore.d.ts +2 -0
  10. package/dist/fcore.d.ts.map +1 -1
  11. package/dist/fcore.js +1 -1
  12. package/dist/migrations/cli.js +1 -1
  13. package/dist/migrations/runner.js +1 -1
  14. package/dist/modules/auth/adduser-cli.js +1 -1
  15. package/dist/modules/auth/passwd-cli.js +1 -1
  16. package/dist/modules/auth/permission-cli.js +1 -1
  17. package/dist/modules/auth/route.d.ts.map +1 -1
  18. package/dist/modules/auth/route.js +1 -1
  19. package/dist/modules/auth/schema.js +1 -1
  20. package/dist/modules/auth/services/change-password.js +1 -1
  21. package/dist/modules/auth/services/get-current-user.d.ts +2 -2
  22. package/dist/modules/auth/services/get-current-user.d.ts.map +1 -1
  23. package/dist/modules/auth/services/get-current-user.js +1 -1
  24. package/dist/modules/auth/services/registration.js +1 -1
  25. package/dist/modules/auth/services/verify-two-factor.js +1 -1
  26. package/dist/modules/file/mime.js +1 -1
  27. package/dist/modules/file/route.js +1 -1
  28. package/dist/modules/file/schema.js +1 -1
  29. package/dist/modules/file/services/get-file.js +1 -1
  30. package/dist/modules/file/services/resize-file.js +1 -1
  31. package/dist/modules/file/services/upload-file.js +1 -1
  32. package/dist/modules/resource/route.js +1 -1
  33. package/dist/modules/resource/schema.d.ts +3 -2
  34. package/dist/modules/resource/schema.d.ts.map +1 -1
  35. package/dist/modules/resource/schema.js +1 -1
  36. package/dist/modules/resource/services/add-note.js +1 -1
  37. package/dist/modules/resource/services/add-resource-file.js +1 -1
  38. package/dist/modules/resource/services/create-resource-relation.js +1 -1
  39. package/dist/modules/resource/services/create-resource.js +1 -1
  40. package/dist/modules/resource/services/delete-resource-relation.js +1 -1
  41. package/dist/modules/resource/services/delete-resource.js +1 -1
  42. package/dist/modules/resource/services/export-resource.js +1 -1
  43. package/dist/modules/resource/services/generate-resource-code.js +1 -1
  44. package/dist/modules/resource/services/get-resource-schema.js +1 -1
  45. package/dist/modules/resource/services/get-resource.d.ts +1 -1
  46. package/dist/modules/resource/services/get-resource.js +1 -1
  47. package/dist/modules/resource/services/list-resource-as-user.js +1 -1
  48. package/dist/modules/resource/services/list-resource-list.js +1 -1
  49. package/dist/modules/resource/services/list-resource-relation.js +1 -1
  50. package/dist/modules/resource/services/list-resources.js +1 -1
  51. package/dist/modules/resource/services/search-resource.js +1 -1
  52. package/dist/modules/resource/services/suggest-resource.d.ts.map +1 -1
  53. package/dist/modules/resource/services/suggest-resource.js +1 -1
  54. package/dist/modules/resource/services/update-resource-relation.js +1 -1
  55. package/dist/modules/resource/services/update-resource.js +1 -1
  56. package/dist/modules/resource/services/upload-resource-file.js +1 -1
  57. package/dist/modules/system/route.js +1 -1
  58. package/dist/modules/system/schema.js +1 -1
  59. package/dist/modules/system/services/check-system.js +1 -1
  60. package/dist/modules/system/services/get-access.js +1 -1
  61. package/dist/modules/system/services/get-api-list.js +1 -1
  62. package/dist/modules/system/services/get-audit-log.js +1 -1
  63. package/dist/modules/system/services/get-dictionary.js +1 -1
  64. package/dist/modules/system/services/get-resource-access.js +1 -1
  65. package/dist/modules/system/services/get-resource-scopes.js +1 -1
  66. package/dist/modules/system/services/get-system-log.js +1 -1
  67. package/dist/modules/system/services/get-system-settings.js +1 -1
  68. package/dist/modules/system/services/list-dictionaries.js +1 -1
  69. package/dist/modules/system/services/set-access.js +1 -1
  70. package/dist/modules/system/services/set-resource-access.js +1 -1
  71. package/dist/modules/system/services/set-resource-scopes.js +1 -1
  72. package/dist/modules/system/services/update-dictionary.js +1 -1
  73. package/dist/modules/system/services/update-system-settings.js +1 -1
  74. package/dist/modules/utils/require-admin.js +1 -1
  75. package/dist/modules/utils/safe-user.js +1 -1
  76. package/dist/modules/utils/unsupported.js +1 -1
  77. package/dist/plugins/audit/audit.js +1 -1
  78. package/dist/plugins/audit/services/write-audit.js +1 -1
  79. package/dist/plugins/auth/get-user-permissions.js +1 -1
  80. package/dist/plugins/auth/index.d.ts.map +1 -1
  81. package/dist/plugins/auth/index.js +1 -1
  82. package/dist/plugins/auth/verifyUser.js +1 -1
  83. package/dist/plugins/dictionary.js +1 -1
  84. package/dist/plugins/file.js +1 -1
  85. package/dist/plugins/hooks.d.ts +14 -0
  86. package/dist/plugins/hooks.d.ts.map +1 -0
  87. package/dist/plugins/hooks.js +1 -0
  88. package/dist/plugins/index.d.ts +1 -0
  89. package/dist/plugins/index.d.ts.map +1 -1
  90. package/dist/plugins/index.js +1 -1
  91. package/dist/plugins/jwt.js +1 -1
  92. package/dist/plugins/logger/index.js +1 -1
  93. package/dist/plugins/logger/transport.js +1 -1
  94. package/dist/plugins/pg.js +1 -1
  95. package/dist/plugins/redis.js +1 -1
  96. package/dist/plugins/resource/resource.js +1 -1
  97. package/dist/plugins/resource/resource.registry.js +1 -1
  98. package/dist/plugins/resource/resource.types.d.ts +1 -0
  99. package/dist/plugins/resource/resource.types.d.ts.map +1 -1
  100. package/dist/plugins/resource/services/add-dictionary-lookup-data.js +1 -1
  101. package/dist/plugins/resource/services/add-file-token.js +1 -1
  102. package/dist/plugins/resource/services/add-table-lookup-data.js +1 -1
  103. package/dist/plugins/resource/services/create-relation.js +1 -1
  104. package/dist/plugins/resource/services/create.js +1 -1
  105. package/dist/plugins/resource/services/delete-relation.js +1 -1
  106. package/dist/plugins/resource/services/delete.js +1 -1
  107. package/dist/plugins/resource/services/find-one.d.ts.map +1 -1
  108. package/dist/plugins/resource/services/find-one.js +1 -1
  109. package/dist/plugins/resource/services/find-relation.js +1 -1
  110. package/dist/plugins/resource/services/find.js +1 -1
  111. package/dist/plugins/resource/services/get-table-columns.js +1 -1
  112. package/dist/plugins/resource/services/update-relation.js +1 -1
  113. package/dist/plugins/resource/services/update.js +1 -1
  114. package/dist/plugins/resource/utils/auto-index.js +1 -1
  115. package/dist/plugins/resource/utils/fields.js +1 -1
  116. package/dist/plugins/resource/utils/filters.js +1 -1
  117. package/dist/plugins/resource/utils/permissions.js +1 -1
  118. package/dist/plugins/resource/utils/scope.js +1 -1
  119. package/dist/plugins/resource/utils/sort.js +1 -1
  120. package/dist/plugins/resource/utils/sql.js +1 -1
  121. package/dist/plugins/resource/utils/summary.js +1 -1
  122. package/dist/shared/getIP.js +1 -1
  123. package/migrations/20260903130000_move_notes_files_to_admin.sql +17 -17
  124. package/migrations/20260903140000_settings_nulls_not_distinct.sql +1 -1
  125. package/migrations/20260905120000_add_user_foreign_keys.sql +15 -0
  126. package/migrations/20260929120000_allow_user_only_role_scopes.sql +1 -1
  127. package/package.json +92 -92
@@ -1 +1 @@
1
- function f(p,Z){p=p-0x1d1;const A=s();let I=A[p];return I;}import p from'node:fs/promises';import Z from'node:path';import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=Z['resolve'](process['cwd'](),'logs'),TAIL_LINES=0x64;export async function getSystemLog(A,I){const E=f,j=normalizePath(A['path']),D=Z['resolve'](LOGS_ROOT,j);if(D!==LOGS_ROOT&&!D['startsWith'](LOGS_ROOT+Z[E(0x1d1)]))throw new ValidationError('Invalid\x20log\x20path');const o=await p['stat'](D)['catch'](()=>null);if(!o)throw new NotFoundError('Log\x20path\x20not\x20found');if(o[E(0x1d2)]()){const B=await p['readdir'](D,{'withFileTypes':!![]}),H=await Promise['all'](B['map'](async e=>{const a=E,g=await p['stat'](Z['join'](D,e['name']));return{'name':e['name'],'path':j?j+'/'+e['name']:e['name'],'type':e['isDirectory']()?'directory':'file','size':e['isDirectory']()?undefined:g['size'],'modified':g[a(0x1d3)]['toISOString']()};}));H['sort']((e,g)=>e['name'][E(0x1d4)](g['name']));if(j){const e=j['split']('/')['slice'](0x0,-0x1)[E(0x1d5)]('/');H['unshift']({'name':'..','path':e,'type':'directory'});}return{'contentType':E(0x1d6),'body':renderDirectory(j,H)};}const R=await tailFile(D,TAIL_LINES);return{'contentType':E(0x1d7),'body':R[E(0x1d5)]('\x0a')};}function renderDirectory(A,I){const K=f,j=I['map'](o=>{const X=f,R=X(0x1d8)+encodeURIComponent(o['path']),B=o['type']==='directory'?o[X(0x1d9)]+'/':o['name'];return'<li><a\x20href=\x22'+R+'\x22>'+escapeHtml(B)+'</a></li>';})[K(0x1d5)]('\x0a'),D=escapeHtml('logs/'+A);return'<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>'+D+K(0x1da)+D+K(0x1db)+j+'\x0a</ul>\x0a</body>\x0a</html>';}function escapeHtml(A){const Q=f;return A['replace'](/&/g,'&amp;')[Q(0x1dc)](/</g,Q(0x1dd))['replace'](/>/g,Q(0x1de))[Q(0x1dc)](/"/g,Q(0x1df));}function normalizePath(A){const G=f,I=(A??'')[G(0x1dc)](/\\/g,'/')['replace'](/^\/+|\/+$/g,'');if(I['split']('/')['some'](j=>j==='..'))throw new ValidationError('Invalid\x20log\x20path');return I;}async function tailFile(A,I){const V=f,j=await p[V(0x1e0)](A,'r');try{const {size:D}=await j['stat'](),o=0x40*0x400;let R=D,B=Buffer['alloc'](0x0),H=0x0;while(R>0x0&&H<=I){const g=Math['min'](o,R);R-=g;const N=Buffer['alloc'](g);await j['read'](N,0x0,g,R),B=Buffer['concat']([N,B]),H+=countNewlines(N);}const e=B['toString']('utf8')['split']('\x0a')['filter'](h=>h['length']>0x0);return e[V(0x1e1)](-I)['reverse']();}finally{await j['close']();}}function countNewlines(A){let I=0x0;for(const j of A){if(j===0xa)I++;}return I;}function s(){const O=['sep','isDirectory','mtime','localeCompare','join','text/html;\x20charset=utf-8','text/plain;\x20charset=utf-8','?path=','name','</title></head>\x0a<body>\x0a<h1>','</h1>\x0a<ul>\x0a','replace','&lt;','&gt;','&quot;','open','slice'];s=function(){return O;};return s();}
1
+ import i from'node:fs/promises';import E from'node:path';function T(){const Y=['path','stat','readdir','name','directory','file','isDirectory','sort','localeCompare','slice','unshift','map','type','join','logs/','replace','&amp;','&lt;','some','concat','filter','reverse'];T=function(){return Y;};return T();}import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=E['resolve'](process['cwd'](),'logs'),TAIL_LINES=0x64;export async function getSystemLog(W,M){const y=g,m=normalizePath(W[y(0x144)]),P=E['resolve'](LOGS_ROOT,m);if(P!==LOGS_ROOT&&!P['startsWith'](LOGS_ROOT+E['sep']))throw new ValidationError('Invalid\x20log\x20path');const D=await i[y(0x145)](P)['catch'](()=>null);if(!D)throw new NotFoundError('Log\x20path\x20not\x20found');if(D['isDirectory']()){const Z=await i[y(0x146)](P,{'withFileTypes':!![]}),f=await Promise['all'](Z['map'](async b=>{const s=y,K=await i['stat'](E['join'](P,b[s(0x147)]));return{'name':b['name'],'path':m?m+'/'+b['name']:b[s(0x147)],'type':b['isDirectory']()?s(0x148):s(0x149),'size':b[s(0x14a)]()?undefined:K['size'],'modified':K['mtime']['toISOString']()};}));f[y(0x14b)]((K,J)=>K['name'][y(0x14c)](J[y(0x147)]));if(m){const b=m['split']('/')[y(0x14d)](0x0,-0x1)['join']('/');f[y(0x14e)]({'name':'..','path':b,'type':'directory'});}return{'contentType':'text/html;\x20charset=utf-8','body':renderDirectory(m,f)};}const x=await tailFile(P,TAIL_LINES);return{'contentType':'text/plain;\x20charset=utf-8','body':x['join']('\x0a')};}function renderDirectory(W,M){const o=g,m=M[o(0x14f)](D=>{const r=o,x='?path='+encodeURIComponent(D['path']),Z=D[r(0x150)]==='directory'?D['name']+'/':D['name'];return'<li><a\x20href=\x22'+x+'\x22>'+escapeHtml(Z)+'</a></li>';})[o(0x151)]('\x0a'),P=escapeHtml(o(0x152)+W);return'<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>'+P+'</title></head>\x0a<body>\x0a<h1>'+P+'</h1>\x0a<ul>\x0a'+m+'\x0a</ul>\x0a</body>\x0a</html>';}function escapeHtml(W){const G=g;return W[G(0x153)](/&/g,G(0x154))[G(0x153)](/</g,G(0x155))['replace'](/>/g,'&gt;')[G(0x153)](/"/g,'&quot;');}function normalizePath(W){const S=g,M=(W??'')['replace'](/\\/g,'/')[S(0x153)](/^\/+|\/+$/g,'');if(M['split']('/')[S(0x156)](m=>m==='..'))throw new ValidationError('Invalid\x20log\x20path');return M;}async function tailFile(W,M){const p=g,m=await i['open'](W,'r');try{const {size:P}=await m['stat'](),D=0x40*0x400;let x=P,Z=Buffer['alloc'](0x0),f=0x0;while(x>0x0&&f<=M){const K=Math['min'](D,x);x-=K;const J=Buffer['alloc'](K);await m['read'](J,0x0,K,x),Z=Buffer[p(0x157)]([J,Z]),f+=countNewlines(J);}const b=Z['toString']('utf8')['split']('\x0a')[p(0x158)](Q=>Q['length']>0x0);return b['slice'](-M)[p(0x159)]();}finally{await m['close']();}}function g(i,E){i=i-0x144;const W=T();let M=W[i];return M;}function countNewlines(W){let M=0x0;for(const m of W){if(m===0xa)M++;}return M;}
@@ -1 +1 @@
1
- export async function getSystemSettings(p,Z){const B=f,A=await Z['pg'][B(0xfe)]('\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 A['rows']['reduce']((I,j)=>{const D=String(j['key'])['split']('.');let o=I;for(const R of D['slice'](0x0,-0x1)){o[R]??={},o=o[R];}return o[D['at'](-0x1)]=j['value'],I;},{});}function f(p,Z){p=p-0xfe;const A=s();let I=A[p];return I;}function s(){const H=['query'];s=function(){return H;};return s();}
1
+ function g(i,E){i=i-0xac;const W=T();let M=W[i];return M;}export async function getSystemSettings(i,E){const W=await E['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 W['rows']['reduce']((M,m)=>{const Z=g,P=String(m[Z(0xac)])['split']('.');let D=M;for(const x of P['slice'](0x0,-0x1)){D[x]??={},D=D[x];}return D[P['at'](-0x1)]=m[Z(0xad)],M;},{});}function T(){const f=['key','value'];T=function(){return f;};return T();}
@@ -1 +1 @@
1
- export async function listDictionaries(p,Z){return Z['dictionary']['list']();}
1
+ export async function listDictionaries(i,E){var W=g;return E[W(0x149)]['list']();}function g(i,E){i=i-0x149;var W=T();var M=W[i];return M;}function T(){var M=['dictionary'];T=function(){return M;};return T();}
@@ -1 +1 @@
1
- function f(p,Z){p=p-0xf9;const A=s();let I=A[p];return I;}const e=f;import{getAccess}from'./get-access.js';function s(){const h=['read','update','create','split','map','BEGIN','user','roles','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)','resource','actions'];s=function(){return h;};return s();}const CRUD_ACTIONS=[e(0xf9),e(0xfa),e(0xfb),'delete'];function permissionsToAccess(p){const g=e,Z=new Map();for(const A of p){const [I,j]=A[g(0xfc)](':');if(!I)continue;const D=j==='edit'?'update':j,o=Z['get'](I)??new Set();for(const R of D?[D]:CRUD_ACTIONS)o['add'](R);Z['set'](I,o);}return[...Z][g(0xfd)](([B,H])=>({'resource':B,'actions':[...H]}));}export async function setAccess(p,Z){const N=e,A=await Z['pg']['connect']();try{await A['query'](N(0xfe));if(p['type']===N(0xff)){await A['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL',[p['id']]);if(p[N(0x100)]!==undefined){await A['query']('DELETE\x20FROM\x20admin.user_roles\x20WHERE\x20user_uid\x20=\x20$1',[p['id']]);for(const j of p[N(0x100)]){await A[N(0x101)]('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)',[p['id'],j,p[N(0xff)]['id'],p['user']['id']]);}}}else await A['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL',[p['id']]);const I=p['permissions']?permissionsToAccess(p['permissions']):p['access']??[];for(const D of I){p['type']==='user'?await A['query'](N(0x102),[D[N(0x103)],D['actions'],p['id'],p['user']['id'],p[N(0xff)]['id']]):await A['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)',[D[N(0x103)],D[N(0x104)],p['id'],p['user']['id'],p['user']['id']]);}await A[N(0x101)]('COMMIT');}catch(o){await A['query']('ROLLBACK');throw o;}finally{A['release']();}return getAccess(p,Z);}
1
+ const b=g;import{getAccess}from'./get-access.js';function g(i,E){i=i-0x15a;const W=T();let M=W[i];return M;}const CRUD_ACTIONS=['read',b(0x15a),b(0x15b),'delete'];function T(){const Q=['update','create','split','edit','get','add','type','user','DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL','query','DELETE\x20FROM\x20admin.user_roles\x20WHERE\x20user_uid\x20=\x20$1','permissions','INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20user_uid,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)','resource','actions','ROLLBACK'];T=function(){return Q;};return T();}function permissionsToAccess(i){const K=b,E=new Map();for(const W of i){const [M,m]=W[K(0x15c)](':');if(!M)continue;const P=m===K(0x15d)?'update':m,D=E[K(0x15e)](M)??new Set();for(const x of P?[P]:CRUD_ACTIONS)D[K(0x15f)](x);E['set'](M,D);}return[...E]['map'](([Z,f])=>({'resource':Z,'actions':[...f]}));}export async function setAccess(i,E){const J=b,W=await E['pg']['connect']();try{await W['query']('BEGIN');if(i[J(0x160)]===J(0x161)){await W['query'](J(0x162),[i['id']]);if(i['roles']!==undefined){await W[J(0x163)](J(0x164),[i['id']]);for(const m of i['roles']){await W['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)',[i['id'],m,i['user']['id'],i['user']['id']]);}}}else await W['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL',[i['id']]);const M=i['permissions']?permissionsToAccess(i[J(0x165)]):i['access']??[];for(const P of M){i['type']==='user'?await W['query'](J(0x166),[P[J(0x167)],P['actions'],i['id'],i['user']['id'],i[J(0x161)]['id']]):await W['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)',[P[J(0x167)],P[J(0x168)],i['id'],i['user']['id'],i['user']['id']]);}await W[J(0x163)]('COMMIT');}catch(D){await W['query'](J(0x169));throw D;}finally{W['release']();}return getAccess(i,E);}
@@ -1 +1 @@
1
- import{ValidationError}from'../../../errors.js';function f(p,Z){p=p-0x6d;const A=s();let I=A[p];return I;}function s(){const g=['roles','uid','has','role_id','query','length','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)','actions','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)','resource'];s=function(){return g;};return s();}import{getResourceAccess}from'./get-resource-access.js';export async function setResourceAccess(p,Z){const e=f;if(p['users']===undefined&&p[e(0x6d)]===undefined)throw new ValidationError('At\x20least\x20one\x20of\x20users\x20or\x20roles\x20must\x20be\x20provided');const A=new Set();for(const D of p['users']??[]){if(A['has'](D['uid']))throw new ValidationError('Duplicate\x20user\x20in\x20access\x20list:\x20'+D['uid']);A['add'](D[e(0x6e)]);}const I=new Set();for(const o of p[e(0x6d)]??[]){if(I[e(0x6f)](o['role_id']))throw new ValidationError('Duplicate\x20role\x20in\x20access\x20list:\x20'+o['role_id']);I['add'](o[e(0x70)]);}const j=await Z['pg']['connect']();try{await j[e(0x71)]('BEGIN');if(p['users']!==undefined){await j['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20resource\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NOT\x20NULL\x20AND\x20role_id\x20IS\x20NULL',[p['resource']]);for(const R of p['users']){if(R['actions'][e(0x72)]===0x0)continue;await j['query'](e(0x73),[p['resource'],R['actions'],R['uid'],p['user']['id']]);}}if(p['roles']!==undefined){await j['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20resource\x20=\x20$1\x20AND\x20role_id\x20IS\x20NOT\x20NULL\x20AND\x20user_uid\x20IS\x20NULL',[p['resource']]);for(const B of p['roles']){if(B[e(0x74)]['length']===0x0)continue;await j[e(0x71)](e(0x75),[p[e(0x76)],B['actions'],B['role_id'],p['user']['id']]);}}await j[e(0x71)]('COMMIT');}catch(H){await j['query']('ROLLBACK');throw H;}finally{j['release']();}return getResourceAccess({'resource':p['resource']},Z);}
1
+ function T(){const K=['uid','add','query','length','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)','actions','user','DELETE\x20FROM\x20admin.role_access\x20WHERE\x20resource\x20=\x20$1\x20AND\x20role_id\x20IS\x20NOT\x20NULL\x20AND\x20user_uid\x20IS\x20NULL','resource','COMMIT','release'];T=function(){return K;};return T();}import{ValidationError}from'../../../errors.js';import{getResourceAccess}from'./get-resource-access.js';function g(i,E){i=i-0x85;const W=T();let M=W[i];return M;}export async function setResourceAccess(i,E){const b=g;if(i['users']===undefined&&i['roles']===undefined)throw new ValidationError('At\x20least\x20one\x20of\x20users\x20or\x20roles\x20must\x20be\x20provided');const W=new Set();for(const P of i['users']??[]){if(W['has'](P[b(0x85)]))throw new ValidationError('Duplicate\x20user\x20in\x20access\x20list:\x20'+P['uid']);W['add'](P[b(0x85)]);}const M=new Set();for(const D of i['roles']??[]){if(M['has'](D['role_id']))throw new ValidationError('Duplicate\x20role\x20in\x20access\x20list:\x20'+D['role_id']);M[b(0x86)](D['role_id']);}const m=await E['pg']['connect']();try{await m['query']('BEGIN');if(i['users']!==undefined){await m[b(0x87)]('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20resource\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NOT\x20NULL\x20AND\x20role_id\x20IS\x20NULL',[i['resource']]);for(const x of i['users']){if(x['actions'][b(0x88)]===0x0)continue;await m['query'](b(0x89),[i['resource'],x[b(0x8a)],x['uid'],i[b(0x8b)]['id']]);}}if(i['roles']!==undefined){await m['query'](b(0x8c),[i[b(0x8d)]]);for(const Z of i['roles']){if(Z['actions'][b(0x88)]===0x0)continue;await m[b(0x87)]('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)',[i['resource'],Z[b(0x8a)],Z['role_id'],i['user']['id']]);}}await m['query'](b(0x8e));}catch(f){await m['query']('ROLLBACK');throw f;}finally{m[b(0x8f)]();}return getResourceAccess({'resource':i['resource']},E);}
@@ -1 +1 @@
1
- import{ValidationError}from'../../../errors.js';function s(){const R=['Provide\x20exactly\x20one\x20of\x20user_id\x20or\x20role_id','keys','BEGIN','query','COMMIT','ROLLBACK','release'];s=function(){return R;};return s();}import{clearResourceScopeCache}from'../../../plugins/resource/utils/scope.js';function f(p,Z){p=p-0x16d;const A=s();let I=A[p];return I;}import{getResourceScopes}from'./get-resource-scopes.js';export async function setResourceScopes(p,Z){const o=f;if(Boolean(p['user_id'])===Boolean(p['role_id']))throw new ValidationError(o(0x16d));if(Object[o(0x16e)](p['scopes'])['length']===0x0)throw new ValidationError('At\x20least\x20one\x20scope\x20must\x20be\x20provided');const A=await Z['pg']['connect']();try{await A['query'](o(0x16f)),await A['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',[p['resource'],p['role_id']??null,p['user_id']??null]);for(const [I,j]of Object['entries'](p['scopes'])){await A[o(0x170)]('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)',[p['resource'],p['role_id']??null,p['user_id']??null,I,JSON['stringify'](j),p['user']['id']]);}await A['query'](o(0x171));}catch(D){await A['query'](o(0x172));throw D;}finally{A[o(0x173)]();}return clearResourceScopeCache(),getResourceScopes({'resource':p['resource']},Z);}
1
+ function g(i,E){i=i-0x175;const W=T();let M=W[i];return M;}import{ValidationError}from'../../../errors.js';function T(){const x=['role_id','keys','query','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)','resource'];T=function(){return x;};return T();}import{clearResourceScopeCache}from'../../../plugins/resource/utils/scope.js';import{getResourceScopes}from'./get-resource-scopes.js';export async function setResourceScopes(i,E){const D=g;if(Boolean(i['user_id'])===Boolean(i[D(0x175)]))throw new ValidationError('Provide\x20exactly\x20one\x20of\x20user_id\x20or\x20role_id');if(Object[D(0x176)](i['scopes'])['length']===0x0)throw new ValidationError('At\x20least\x20one\x20scope\x20must\x20be\x20provided');const W=await E['pg']['connect']();try{await W[D(0x177)]('BEGIN'),await W['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',[i['resource'],i['role_id']??null,i['user_id']??null]);for(const [M,m]of Object['entries'](i['scopes'])){await W['query'](D(0x178),[i[D(0x179)],i[D(0x175)]??null,i['user_id']??null,M,JSON['stringify'](m),i['user']['id']]);}await W[D(0x177)]('COMMIT');}catch(P){await W['query']('ROLLBACK');throw P;}finally{W['release']();}return clearResourceScopeCache(),getResourceScopes({'resource':i['resource']},E);}
@@ -1 +1 @@
1
- function s(){var I=['dictionary','items'];s=function(){return I;};return s();}function f(p,Z){p=p-0xc7;var A=s();var I=A[p];return I;}export async function updateDictionary(p,Z){var A=f;return await Z[A(0xc7)]['put'](p['name'],p[A(0xc8)]),{'success':!![]};}
1
+ export async function updateDictionary(i,E){return await E['dictionary']['put'](i['name'],i['items']),{'success':!![]};}
@@ -1 +1 @@
1
- import{ValidationError}from'../../../errors.js';function s(){const D=['patch','length','entries','user'];s=function(){return D;};return s();}function f(p,Z){p=p-0x135;const A=s();let I=A[p];return I;}export async function updateSystemSettings(p,Z){const j=f;if(!Object['keys'](p[j(0x135)])[j(0x136)])throw new ValidationError('Settings\x20patch\x20is\x20empty');for(const [A,I]of Object[j(0x137)](p['patch'])){if(!A['trim']()||A['includes']('..'))throw new ValidationError('Invalid\x20setting\x20key:\x20'+A);await Z['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',[A,JSON['stringify'](I),p[j(0x138)]['id']]);}return{'success':!![]};}
1
+ import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(i,E){const m=g;if(!Object[m(0x1a0)](i[m(0x1a1)])['length'])throw new ValidationError('Settings\x20patch\x20is\x20empty');for(const [W,M]of Object['entries'](i[m(0x1a1)])){if(!W['trim']()||W['includes']('..'))throw new ValidationError('Invalid\x20setting\x20key:\x20'+W);await E['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',[W,JSON[m(0x1a2)](M),i['user']['id']]);}return{'success':!![]};}function g(i,E){i=i-0x1a0;const W=T();let M=W[i];return M;}function T(){const P=['keys','patch','stringify'];T=function(){return P;};return T();}
@@ -1 +1 @@
1
- import{ForbiddenError}from'../../errors.js';function s(){var I=['permissions','Missing\x20permission:\x20'];s=function(){return I;};return s();}function f(p,Z){p=p-0x19c;var A=s();var I=A[p];return I;}export function requireAdmin(p,Z){var A=f;if(!p)throw new ForbiddenError('User\x20required');if(p['type']!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(p['type']!=='admin'&&Z&&!p[A(0x19c)]?.['includes'](Z))throw new ForbiddenError(A(0x19d)+Z);}
1
+ function g(i,E){i=i-0x1ad;var W=T();var M=W[i];return M;}function T(){var M=['Admin\x20access\x20required','admin','permissions'];T=function(){return M;};return T();}import{ForbiddenError}from'../../errors.js';export function requireAdmin(i,E){var W=g;if(!i)throw new ForbiddenError('User\x20required');if(i['type']!=='admin')throw new ForbiddenError(W(0x1ad));if(i['type']!==W(0x1ae)&&E&&!i[W(0x1af)]?.['includes'](E))throw new ForbiddenError('Missing\x20permission:\x20'+E);}
@@ -1 +1 @@
1
- function s(){const D=['salt','entries','some','toLowerCase'];s=function(){return D;};return s();}function f(p,Z){p=p-0x154;const A=s();let I=A[p];return I;}export const safeUser=p=>{const j=f,Z=['password',j(0x154),'secret','credentials'];return Object['fromEntries'](Object[j(0x155)](p)['filter'](([A])=>!Z[j(0x156)](I=>A[j(0x157)]()['includes'](I))));};
1
+ function g(i,E){i=i-0x1a4;const W=T();let M=W[i];return M;}export const safeUser=i=>{const m=g,E=['password','salt','secret','credentials'];return Object['fromEntries'](Object['entries'](i)['filter'](([W])=>!E[m(0x1a4)](M=>W['toLowerCase']()['includes'](M))));};function T(){const P=['some'];T=function(){return P;};return T();}
@@ -1 +1 @@
1
- import{UnsupportedError}from'../../errors.js';export function unsupported(p){throw new UnsupportedError(p+'\x20requires\x20a\x20project/provider\x20implementation');}
1
+ import{UnsupportedError}from'../../errors.js';export function unsupported(i){throw new UnsupportedError(i+'\x20requires\x20a\x20project/provider\x20implementation');}
@@ -1 +1 @@
1
- import{writeAudit}from'./services/write-audit.js';export function createAudit(p){const Z=writeAudit(p);return{'write':Z};}
1
+ import{writeAudit}from'./services/write-audit.js';export function createAudit(i){const E=writeAudit(i);return{'write':E};}
@@ -1 +1 @@
1
- const secretPattern=/password|token|secret|credential|salt/i;function f(p,Z){p=p-0x84;const A=s();let I=A[p];return I;}function clean(p){const H=f;if(Array['isArray'](p))return p[H(0x84)](clean);if(p&&typeof p==='object')return Object['fromEntries'](Object['entries'](p)[H(0x84)](([Z,A])=>[Z,secretPattern['test'](Z)?'[REDACTED]':clean(A)]));return p;}function s(){const E=['map','\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','audit_log','audit_log_data','logger','query','userId','resourceId','ipAddress','changes','field','stringify','newValue'];s=function(){return E;};return s();}export function writeAudit(p){let Z,A;async function I(){const e=f;if(!p['pg'])return![];if(Z!==undefined)return Z;return A??=p['pg']['query'](e(0x85))['then'](j=>{const g=e,D=new Set(j['rows']['map'](o=>o['table_name']));return Z=D['has'](g(0x86))&&D['has'](g(0x87)),!Z&&p[g(0x88)]['warn']({'expectedTables':['admin.audit_log','admin.audit_log_data'],'foundTables':[...D]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),Z;})['catch'](j=>{const N=e;return Z=![],p[N(0x88)]['warn']({'err':j},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),A;}return async function j(D){const h=f;if(!await I())return p[h(0x88)]['info']({'auditFallback':!![],'event':clean({...D,'changes':D['changes']?.['map'](B=>({...B,'oldValue':clean(B['oldValue']),'newValue':clean(B['newValue'])}))})},'audit'),0x0;if(!p['pg'])throw new Error('empty\x20pg');const o=await p['pg'][h(0x89)]('\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',[D[h(0x8a)]??null,D['module'],D['resource'],D['resourceId']==null?null:String(D[h(0x8b)]),D['fields']??null,D['action'],D['requestId']??null,D[h(0x8c)]??null,clean(D['metadata']??{})]),R=o['rows'][0x0]['id'];for(const B of D[h(0x8d)]??[]){if(secretPattern['test'](B['field']))continue;await p['pg'][h(0x89)]('\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',[R,B[h(0x8e)],JSON[h(0x8f)](clean(B['oldValue'])),JSON['stringify'](clean(B[h(0x90)]))]);}return R;};}
1
+ function g(i,E){i=i-0x10d;const W=T();let M=W[i];return M;}const secretPattern=/password|token|secret|credential|salt/i;function clean(i){const f=g;if(Array['isArray'](i))return i['map'](clean);if(i&&typeof i==='object')return Object[f(0x10d)](Object[f(0x10e)](i)['map'](([E,W])=>[E,secretPattern['test'](E)?'[REDACTED]':clean(W)]));return i;}export function writeAudit(i){let E,W;async function M(){const b=g;if(!i['pg'])return![];if(E!==undefined)return E;return W??=i['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20table_name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20information_schema.tables\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20table_schema\x20=\x20\x27admin\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20table_name\x20IN\x20(\x27audit_log\x27,\x20\x27audit_log_data\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20')[b(0x10f)](m=>{const K=b,P=new Set(m['rows']['map'](D=>D['table_name']));return E=P[K(0x110)]('audit_log')&&P['has'](K(0x111)),!E&&i[K(0x112)]['warn']({'expectedTables':['admin.audit_log','admin.audit_log_data'],'foundTables':[...P]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),E;})['catch'](m=>{return E=![],i['logger']['warn']({'err':m},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),W;}return async function m(P){const J=g;if(!await M())return i['logger']['info']({'auditFallback':!![],'event':clean({...P,'changes':P['changes']?.[J(0x113)](Z=>({...Z,'oldValue':clean(Z['oldValue']),'newValue':clean(Z['newValue'])}))})},'audit'),0x0;if(!i['pg'])throw new Error('empty\x20pg');const D=await i['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',[P['userId']??null,P[J(0x114)],P['resource'],P['resourceId']==null?null:String(P['resourceId']),P[J(0x115)]??null,P['action'],P['requestId']??null,P['ipAddress']??null,clean(P['metadata']??{})]),x=D['rows'][0x0]['id'];for(const Z of P['changes']??[]){if(secretPattern[J(0x116)](Z['field']))continue;await i['pg']['query'](J(0x117),[x,Z['field'],JSON[J(0x118)](clean(Z['oldValue'])),JSON[J(0x118)](clean(Z['newValue']))]);}return x;};}function T(){const Q=['fromEntries','entries','then','has','audit_log_data','logger','map','module','fields','test','\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','stringify'];T=function(){return Q;};return T();}
@@ -1 +1 @@
1
- function f(p,Z){p=p-0x10d;const A=s();let I=A[p];return I;}export async function getUserPermissions(p,Z){const j=f,A=await Z['pg'][j(0x10d)]('\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',[p]);return A['rows']['map'](I=>I[j(0x10e)]);}function s(){const D=['query','permission'];s=function(){return D;};return s();}
1
+ function T(){const P=['\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'];T=function(){return P;};return T();}function g(i,E){i=i-0x16a;const W=T();let M=W[i];return M;}export async function getUserPermissions(i,E){const m=g,W=await E['pg']['query'](m(0x16a),[i]);return W['rows']['map'](M=>M['permission']);}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAYhC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAO/C,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAwD5D,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAE1C,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKpE;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAalB;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,mBAAmB,iBAmDzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/auth/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAYhC,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,SAAS,CAAC;AAO/C,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAyD5D,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAE1C,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKpE;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAalB;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,mBAAmB,iBAoDzB"}
@@ -1 +1 @@
1
- export*from'./auth.types.js';import{randomBytes,scrypt as p,timingSafeEqual}from'node:crypto';import{mkdir,readFile,unlink,writeFile}from'node:fs/promises';import{join,resolve}from'node:path';import{promisify}from'node:util';function s(){const G=['path','.json','fileFor','stringify','utf8','toString','hex','scrypt','from','warn','register','redis','host','auth','database','./storage','sessions','cookieName','secureSession','permissions'];s=function(){return G;};return s();}const scrypt=promisify(p);import Z from'@fastify/cookie';import A from'@fastify/session';import{Authenticator}from'@fastify/passport';function f(p,Z){p=p-0xc7;const A=s();let I=A[p];return I;}import I from'fastify-session-redis-store';import{getUserPermissions}from'./get-user-permissions.js';const fastifyPassport=new Authenticator();class FileSessionStore{['path'];constructor(j){this['path']=j,void mkdir(this['path'],{'recursive':!![]});}['fileFor'](j){const N=f;return join(this[N(0xc7)],j+N(0xc8));}async['get'](j,D){try{const o=await readFile(this['fileFor'](j),'utf8');D(null,JSON['parse'](o));}catch(R){const B=R;if(B['code']==='ENOENT'){D(null,undefined);return;}D(B,undefined);}}async['set'](j,D,o){const h=f;try{await mkdir(this[h(0xc7)],{'recursive':!![]}),await writeFile(this[h(0xc9)](j),JSON[h(0xca)](D),h(0xcb)),o();}catch(R){o(R);}}async['destroy'](j,D){const E=f;try{await unlink(this[E(0xc9)](j))['catch'](o=>{if(o['code']!=='ENOENT')throw o;}),D();}catch(o){D(o);}}}export*from'./verifyUser.js';export*from'./get-user-permissions.js';export async function hashPassword(j){const a=f,D=randomBytes(0x10),o=await scrypt(j,D,0x40);return'scrypt$'+D[a(0xcc)]('hex')+'$'+o['toString'](a(0xcd));}export async function verifyPassword(j,D){const X=f,[o,R,B]=D?.['split']('$')||[];if(o!==X(0xce)||!R||!B)return![];const H=Buffer['from'](R,X(0xcd)),e=Buffer[X(0xcf)](B,X(0xcd)),g=await scrypt(j,H,e['length']);return timingSafeEqual(g,e);}export async function createSessionStore(j,D){const K=f,{config:o,redis:R}=D;if(!o){console[K(0xd0)]('Missing\x20config\x20-\x20skipping\x20session\x20store\x20creation');return;}if(process.env.NODE_ENV==='test'||process.env.VITEST)return;await j[K(0xd1)](Z,{'parseOptions':o['auth']['cookieOptions']});const B=o[K(0xd2)][K(0xd3)]?new I({'prefix':o[K(0xd4)]['cookieName']+':'+(o['pg']?.[K(0xd5)]||'db')+':','client':R}):new FileSessionStore(resolve(o['storagePath']??K(0xd6),K(0xd7)));await j[K(0xd1)](A,{'secret':o[K(0xd4)]['secret'],'cookieName':o['auth'][K(0xd8)],'cookie':o['auth']['cookieOptions'],'store':B}),await j[K(0xd1)](fastifyPassport['initialize']()),await j['register'](fastifyPassport[K(0xd9)]()),fastifyPassport['registerUserSerializer'](async H=>({'user':H})),fastifyPassport['registerUserDeserializer'](async H=>{const Q=K,e=H?.['user']||H;return e?.['id']&&(e[Q(0xda)]=await getUserPermissions(e['id'],D)),e;});}
1
+ const J=g;export*from'./auth.types.js';import{randomBytes,scrypt as i,timingSafeEqual}from'node:crypto';import{mkdir,readFile,unlink,writeFile}from'node:fs/promises';import{join,resolve}from'node:path';import{promisify}from'node:util';const scrypt=promisify(i);import E from'@fastify/cookie';import W from'@fastify/session';import{Authenticator}from'@fastify/passport';import M from'fastify-session-redis-store';import{applyAfterUser}from'../hooks.js';import{getUserPermissions}from'./get-user-permissions.js';const fastifyPassport=new Authenticator();class FileSessionStore{[J(0x1a0)];constructor(m){const Q=J;this[Q(0x1a0)]=m,void mkdir(this['path'],{'recursive':!![]});}['fileFor'](m){return join(this['path'],m+'.json');}async['get'](m,P){const y=J;try{const D=await readFile(this[y(0x1a1)](m),'utf8');P(null,JSON['parse'](D));}catch(x){const Z=x;if(Z[y(0x1a2)]==='ENOENT'){P(null,undefined);return;}P(Z,undefined);}}async[J(0x1a3)](m,P,D){try{await mkdir(this['path'],{'recursive':!![]}),await writeFile(this['fileFor'](m),JSON['stringify'](P),'utf8'),D();}catch(x){D(x);}}async['destroy'](m,P){const s=J;try{await unlink(this[s(0x1a1)](m))['catch'](D=>{if(D['code']!=='ENOENT')throw D;}),P();}catch(D){P(D);}}}export*from'./verifyUser.js';function g(i,E){i=i-0x1a0;const W=T();let M=W[i];return M;}export*from'./get-user-permissions.js';export async function hashPassword(m){const o=J,P=randomBytes(0x10),D=await scrypt(m,P,0x40);return'scrypt$'+P['toString'](o(0x1a4))+'$'+D['toString']('hex');}export async function verifyPassword(m,P){const r=J,[D,x,Z]=P?.['split']('$')||[];if(D!=='scrypt'||!x||!Z)return![];const f=Buffer['from'](x,'hex'),b=Buffer['from'](Z,r(0x1a4)),K=await scrypt(m,f,b[r(0x1a5)]);return timingSafeEqual(K,b);}function T(){const S=['path','fileFor','code','set','hex','length','register','auth','database','./storage','initialize','secureSession','registerUserDeserializer'];T=function(){return S;};return T();}export async function createSessionStore(m,P){const G=J,{config:D,redis:x}=P;if(!D){console['warn']('Missing\x20config\x20-\x20skipping\x20session\x20store\x20creation');return;}if(process.env.NODE_ENV==='test'||process.env.VITEST)return;await m[G(0x1a6)](E,{'parseOptions':D[G(0x1a7)]['cookieOptions']});const Z=D['redis']['host']?new M({'prefix':D['auth']['cookieName']+':'+(D['pg']?.[G(0x1a8)]||'db')+':','client':x}):new FileSessionStore(resolve(D['storagePath']??G(0x1a9),'sessions'));await m['register'](W,{'secret':D['auth']['secret'],'cookieName':D['auth']['cookieName'],'cookie':D['auth']['cookieOptions'],'store':Z}),await m['register'](fastifyPassport[G(0x1aa)]()),await m['register'](fastifyPassport[G(0x1ab)]()),fastifyPassport['registerUserSerializer'](async f=>({'user':f})),fastifyPassport[G(0x1ac)](async f=>{const b=f?.['user']||f;if(b?.['id'])return b['permissions']=await getUserPermissions(b['id'],P),applyAfterUser(b,P);return b;});}
@@ -1 +1 @@
1
- import{BadRequestError}from'../../errors.js';function f(p,Z){p=p-0xd8;const A=s();let I=A[p];return I;}function s(){const g=['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','then','auth/warn','update\x20admin.users\x20set\x20last_activity_date\x20=\x20now()\x20where\x20uid\x20=\x20$1','password_hash'];s=function(){return g;};return s();}import{verifyPassword}from'./index.js';export async function verifyUser({user:p,password:Z,ip:A},{pg:I,logger:j}){const e=f;if(!p||p==='')throw new BadRequestError('not\x20enough\x20params:\x20user');if(!Z||Z==='')throw new BadRequestError('not\x20enough\x20params:\x20password');j['metrics']('user.login');const D=e(0xd8),o=await I['query'](D,[p])[e(0xd9)](B=>B['rows']?.[0x0]);if(!o){const B='user\x20not\x20found';j['info']({'file':e(0xda),'error':B,'user':p,'ip':A});throw new BadRequestError(B);}const R=await verifyPassword(Z,o['password_hash']);if(!R){const H='Wrong\x20password';j['info']({'file':'auth/warn','error':H,'user':p,'ip':A});throw new BadRequestError(H);}return I['query'](e(0xdb),[o['id']]),delete o[e(0xdc)],o;}
1
+ function T(){const K=['not\x20enough\x20params:\x20user','user.login','then','password_hash','Wrong\x20password','update\x20admin.users\x20set\x20last_activity_date\x20=\x20now()\x20where\x20uid\x20=\x20$1'];T=function(){return K;};return T();}import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';function g(i,E){i=i-0xf3;const W=T();let M=W[i];return M;}export async function verifyUser({user:i,password:E,ip:W},{pg:M,logger:m}){const b=g;if(!i||i==='')throw new BadRequestError(b(0xf3));if(!E||E==='')throw new BadRequestError('not\x20enough\x20params:\x20password');m['metrics'](b(0xf4));const P='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',D=await M['query'](P,[i])[b(0xf5)](Z=>Z['rows']?.[0x0]);if(!D){const Z='user\x20not\x20found';m['info']({'file':'auth/warn','error':Z,'user':i,'ip':W});throw new BadRequestError(Z);}const x=await verifyPassword(E,D[b(0xf6)]);if(!x){const f=b(0xf7);m['info']({'file':'auth/warn','error':f,'user':i,'ip':W});throw new BadRequestError(f);}return M['query'](b(0xf8),[D['id']]),delete D['password_hash'],D;}
@@ -1 +1 @@
1
- import{ConflictError,NotFoundError,ValidationError}from'../errors.js';const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;function f(p,Z){p=p-0x1a3;const A=s();let I=A[p];return I;}function s(){const m=['\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','then','rows','table_name','isArray','code','Dictionary\x20already\x20registered:\x20','get','set','empty\x20pg','query','custom','DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1','name','parentId','COMMIT','ROLLBACK','values','push'];s=function(){return m;};return s();}export function createDictionary({pg:p,dictionaries:dictionaries=[]}){const Z=new Map(),A=new Map();let I,j;async function D(){const F=f;if(I!==undefined)return I;if(!p)throw new Error('empty\x20pg');return j??=p['query'](F(0x1a3))[F(0x1a4)](E=>{const T=F,a=E[T(0x1a5)][0x0]?.[T(0x1a6)];I=a==='dictionaries'?a:null;}),await j,I;}function o(E){if(!dictionaryName['test'](E))throw new ValidationError('Invalid\x20dictionary\x20name:\x20'+E);}function R(E){const L=f;for(const a of Array[L(0x1a7)](E)?E:[E]){o(a[L(0x1a8)]);if(!Array['isArray'](a['items']))throw new ValidationError('Invalid\x20dictionary\x20items:\x20'+a['code']);if(Z['has'](a['code']))throw new ConflictError(L(0x1a9)+a[L(0x1a8)]);Z['set'](a['code'],{...a,'source':'static'});}}function B(E){return Z['has'](E);}async function H(E){const y=f;o(E);const a=Z[y(0x1aa)](E);if(a&&a['checked'])return a['items'];const X=await D();if(!X)throw new NotFoundError('Dictionary\x20table\x20not\x20found');const K=await p?.['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',[E]);if(K?.[y(0x1a5)]?.['length']){const Q=K?.[y(0x1a5)];return Z[y(0x1ab)](E,{'code':E,'name':E,'items':Q,'source':'database','checked':!![]}),Q;}if(!a?.['items'])throw new NotFoundError('Dictionary\x20not\x20found:\x20'+E);return a['checked']=!![],a['items'];}async function e(E,a){const z=f;o(E);if(!Array[z(0x1a7)](a))throw new ValidationError('Dictionary\x20items\x20must\x20be\x20an\x20array');const X=await D();if(!X)throw new NotFoundError('Dictionary\x20table\x20not\x20found');if(!p)throw new Error(z(0x1ac));const K=await p['connect']();try{await K[z(0x1ad)]('BEGIN');const Q=await K['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',[E,E,'fcore',z(0x1ae),!![]]),G=Q[z(0x1a5)][0x0]['id'];await K['query'](z(0x1af),[G]);for(const V of a){await K['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',[G,V['code'],V[z(0x1b0)],V[z(0x1b1)]??null]);}await K[z(0x1ad)](z(0x1b2));}catch(O){await K['query'](z(0x1b3));throw O;}finally{K['release']();}Z['set'](E,{'items':a,'code':E,'source':'static','checked':!![]}),A['set'](E,(A['get'](E)??0x0)+0x1);}function g(E){return o(E),A['set'](E,(A['get'](E)??0x0)+0x1),Z['delete'](E);}function N(E){return A['get'](E)??0x0;}async function h(){const t=f,E=[...Z[t(0x1b4)]()]['map'](({code:K,name:Q,source:G})=>({'code':K,'name':Q??K,'source':G})),a=await D();if(!a)return E;if(!p)throw new Error('empty\x20pg');const X=await p['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 K of X['rows']){!Z['has'](K['code'])&&E[t(0x1b5)](K);}return E;}return R(dictionaries),{'register':R,'get':H,'put':e,'clear':g,'revision':N,'list':h,'has':B};}
1
+ function g(i,E){i=i-0xc8;const W=T();let M=W[i];return M;}function T(){const q=['Invalid\x20dictionary\x20name:\x20','has','Dictionary\x20already\x20registered:\x20','code','Dictionary\x20table\x20not\x20found','\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','rows','items','connect','query','fcore','COMMIT','ROLLBACK','set','delete','get','empty\x20pg'];T=function(){return q;};return T();}import{ConflictError,NotFoundError,ValidationError}from'../errors.js';const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;export function createDictionary({pg:i,dictionaries:dictionaries=[]}){const E=new Map(),W=new Map();let M,m;async function P(){if(M!==undefined)return M;if(!i)throw new Error('empty\x20pg');return m??=i['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20table_name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20information_schema.tables\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20table_schema\x20=\x20\x27admin\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20table_name\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')['then'](y=>{const s=y['rows'][0x0]?.['table_name'];M=s==='dictionaries'?s:null;}),await m,M;}function D(y){const d=g;if(!dictionaryName['test'](y))throw new ValidationError(d(0xc8)+y);}function x(y){const X=g;for(const s of Array['isArray'](y)?y:[y]){D(s['code']);if(!Array['isArray'](s['items']))throw new ValidationError('Invalid\x20dictionary\x20items:\x20'+s['code']);if(E[X(0xc9)](s['code']))throw new ConflictError(X(0xca)+s[X(0xcb)]);E['set'](s['code'],{...s,'source':'static'});}}function Z(y){return E['has'](y);}async function f(y){const U=g;D(y);const s=E['get'](y);if(s&&s['checked'])return s['items'];const o=await P();if(!o)throw new NotFoundError(U(0xcc));const r=await i?.['query'](U(0xcd),[y]);if(r?.[U(0xce)]?.['length']){const G=r?.['rows'];return E['set'](y,{'code':y,'name':y,'items':G,'source':'database','checked':!![]}),G;}if(!s?.[U(0xcf)])throw new NotFoundError('Dictionary\x20not\x20found:\x20'+y);return s['checked']=!![],s['items'];}async function b(y,s){const t=g;D(y);if(!Array['isArray'](s))throw new ValidationError('Dictionary\x20items\x20must\x20be\x20an\x20array');const o=await P();if(!o)throw new NotFoundError('Dictionary\x20table\x20not\x20found');if(!i)throw new Error('empty\x20pg');const r=await i[t(0xd0)]();try{await r[t(0xd1)]('BEGIN');const G=await r['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',[y,y,t(0xd2),'custom',!![]]),S=G['rows'][0x0]['id'];await r['query']('DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1',[S]);for(const p of s){await r['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',[S,p['code'],p['name'],p['parentId']??null]);}await r[t(0xd1)](t(0xd3));}catch(Y){await r[t(0xd1)](t(0xd4));throw Y;}finally{r['release']();}E[t(0xd5)](y,{'items':s,'code':y,'source':'static','checked':!![]}),W[t(0xd5)](y,(W['get'](y)??0x0)+0x1);}function K(y){const I=g;return D(y),W[I(0xd5)](y,(W['get'](y)??0x0)+0x1),E[I(0xd6)](y);}function J(y){const H=g;return W[H(0xd7)](y)??0x0;}async function Q(){const O=g,y=[...E['values']()]['map'](({code:r,name:G,source:S})=>({'code':r,'name':G??r,'source':S})),s=await P();if(!s)return y;if(!i)throw new Error(O(0xd8));const o=await i['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 r of o['rows']){!E['has'](r['code'])&&y['push'](r);}return y;}return x(dictionaries),{'register':x,'get':f,'put':b,'clear':K,'revision':J,'list':Q,'has':Z};}
@@ -1 +1 @@
1
- function s(){const b=['alloc','transformToByteArray','resolve','tokenSecret','join','startsWith','dirname','access','code','ENOENT','toString','createHmac','Invalid\x20file\x20token','length','from','base64url','randomBytes','us-east-1','accessKeyId','bucket','tokenTtl','sha256','digest','split','utf8'];s=function(){return b;};return s();}import p from'node:fs/promises';import Z from'node:path';import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';function f(p,Z){p=p-0x1a8;const A=s();let I=A[p];return I;}import A from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function normalizeRelativePath(I){if(!I||I['startsWith']('/')||I['includes']('..'))throw new ValidationError('Invalid\x20file\x20path');return I['replace'](/\\/g,'/')['replace'](/^\/+/,'');}function keyFor(I,j){return''+((I??'')['replace'](/^\/+|\/+$/g,'')?(I??'')['replace'](/^\/+|\/+$/g,'')+'/':'')+normalizeRelativePath(j);}async function bodyToBuffer(I){const X=f;if(!I)return Buffer[X(0x1a8)](0x0);const j=I;if(typeof j[X(0x1a9)]==='function')return Buffer['from'](await j['transformToByteArray']());const D=[];for await(const o of I){D['push'](Buffer['from'](o));}return Buffer['concat'](D);}export function createFileLocal(I){const K=f,j=Z[K(0x1aa)](I['storagePath']||'./storage'),D=Z['join'](j,'removed'),o=I[K(0x1ab)]??process.env.FILE_TOKEN_SECRET??A['randomBytes'](0x20)['toString']('hex'),R=e=>{const Q=K,g=normalizeRelativePath(e),N=(I['folder']??'files')['replace'](/^\/+|\/+$/g,'');return N?Z[Q(0x1ac)](N,g):g;},B=e=>{const G=K,g=R(e),N=Z['resolve'](j,g),h=Z['relative'](j,N);if(h[G(0x1ad)]('..')||Z['isAbsolute'](h))throw new ValidationError('Invalid\x20file\x20path');return N;},H=e=>{const V=K,g=R(e),N=Z['resolve'](D,g),h=Z['relative'](D,N);if(h[V(0x1ad)]('..')||Z['isAbsolute'](h))throw new ValidationError('Invalid\x20file\x20path');return N;};return{async 'put'(e,g){const O=K,N=B(e);await p['mkdir'](Z[O(0x1ae)](N),{'recursive':!![]}),await p['writeFile'](N,g instanceof Buffer?g:await bodyToBuffer(g));},async 'get'(e){return p['readFile'](B(e));},async 'exists'(e){const F=K;try{return await p[F(0x1af)](B(e)),!![];}catch{return![];}},async 'delete'(e){const T=K,g=B(e),N=H(e);try{await p['mkdir'](Z['dirname'](N),{'recursive':!![]}),await p['rename'](g,N);}catch(h){const E=h;if(E[T(0x1b0)]!==T(0x1b1))throw h;}},'create'(e,g=I['tokenTtl']??0xe10){const L=K,N=Buffer['from'](e)[L(0x1b2)]('base64url'),h=A[L(0x1b3)]('sha256',o)['update'](N)['digest']('base64url');return N+'.'+h;},'verify'(e){const y=K,[g,N]=e['split']('.');if(!g||!N)throw new UnauthorizedError(y(0x1b4));const h=A['createHmac']('sha256',o)['update'](g)['digest'](),E=Buffer['from'](N,'base64url');if(h[y(0x1b5)]!==E['length']||!A['timingSafeEqual'](h,E))throw new UnauthorizedError(y(0x1b4));const a=Buffer[y(0x1b6)](g,y(0x1b7))[y(0x1b2)]('utf8');return a;}};}export function createFileS3(I){const z=f,j=I['tokenSecret']??process.env.FILE_TOKEN_SECRET??A[z(0x1b8)](0x20)[z(0x1b2)]('hex'),D=new S3Client({'endpoint':I['endpoint'],'region':I['region']??z(0x1b9),'forcePathStyle':I['forcePathStyle']??!![],'credentials':I['accessKeyId']||I['accessKey']?{'accessKeyId':I[z(0x1ba)]??I['accessKey'],'secretAccessKey':I['secretAccessKey']??I['secretKey']}:undefined}),o=R=>keyFor(I['folder'],R);return{async 'put'(R,B){await D['send'](new PutObjectCommand({'Bucket':I['bucket'],'Key':o(R),'Body':B}));},async 'get'(R){const B=await D['send'](new GetObjectCommand({'Bucket':I['bucket'],'Key':o(R)}));return bodyToBuffer(B['Body']);},async 'exists'(R){try{return await D['send'](new HeadObjectCommand({'Bucket':I['bucket'],'Key':o(R)})),!![];}catch(B){const H=B;if(H['$metadata']?.['httpStatusCode']===0x194||H['name']==='NotFound')return![];throw B;}},async 'delete'(R){const t=z;await D['send'](new DeleteObjectCommand({'Bucket':I[t(0x1bb)],'Key':o(R)}));},'create'(R,B=I[z(0x1bc)]??0xe10){const m=z,H=Buffer[m(0x1b6)](R)['toString']('base64url'),e=A['createHmac'](m(0x1bd),j)['update'](H)[m(0x1be)](m(0x1b7));return H+'.'+e;},'verify'(R){const r=z,[B,H]=R[r(0x1bf)]('.');if(!B||!H)throw new UnauthorizedError('Invalid\x20file\x20token');const e=A['createHmac']('sha256',j)['update'](B)['digest'](),g=Buffer['from'](H,r(0x1b7));if(e[r(0x1b5)]!==g['length']||!A['timingSafeEqual'](e,g))throw new UnauthorizedError(r(0x1b4));const N=Buffer[r(0x1b6)](B,'base64url')['toString'](r(0x1c0));return N;}};}
1
+ function g(i,E){i=i-0x1ec;const W=T();let M=W[i];return M;}function T(){const w=['startsWith','transformToByteArray','function','storagePath','./storage','toString','folder','join','resolve','isAbsolute','relative','mkdir','writeFile','from','sha256','update','digest','split','base64url','Invalid\x20file\x20token','randomBytes','hex','endpoint','accessKeyId','secretAccessKey','bucket','Body','send','tokenTtl','timingSafeEqual'];T=function(){return w;};return T();}import i from'node:fs/promises';import E from'node:path';import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';import W from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function normalizeRelativePath(M){const o=g;if(!M||M[o(0x1ec)]('/')||M['includes']('..'))throw new ValidationError('Invalid\x20file\x20path');return M['replace'](/\\/g,'/')['replace'](/^\/+/,'');}function keyFor(M,m){return''+((M??'')['replace'](/^\/+|\/+$/g,'')?(M??'')['replace'](/^\/+|\/+$/g,'')+'/':'')+normalizeRelativePath(m);}async function bodyToBuffer(M){const r=g;if(!M)return Buffer['alloc'](0x0);const m=M;if(typeof m[r(0x1ed)]===r(0x1ee))return Buffer['from'](await m['transformToByteArray']());const P=[];for await(const D of M){P['push'](Buffer['from'](D));}return Buffer['concat'](P);}export function createFileLocal(M){const G=g,m=E['resolve'](M[G(0x1ef)]||G(0x1f0)),P=E['join'](m,'removed'),D=M['tokenSecret']??process.env.FILE_TOKEN_SECRET??W['randomBytes'](0x20)[G(0x1f1)]('hex'),x=b=>{const S=G,K=normalizeRelativePath(b),J=(M[S(0x1f2)]??'files')['replace'](/^\/+|\/+$/g,'');return J?E[S(0x1f3)](J,K):K;},Z=b=>{const p=G,K=x(b),J=E[p(0x1f4)](m,K),Q=E['relative'](m,J);if(Q['startsWith']('..')||E[p(0x1f5)](Q))throw new ValidationError('Invalid\x20file\x20path');return J;},f=b=>{const Y=G,K=x(b),J=E['resolve'](P,K),Q=E[Y(0x1f6)](P,J);if(Q['startsWith']('..')||E['isAbsolute'](Q))throw new ValidationError('Invalid\x20file\x20path');return J;};return{async 'put'(b,K){const d=G,J=Z(b);await i[d(0x1f7)](E['dirname'](J),{'recursive':!![]}),await i[d(0x1f8)](J,K instanceof Buffer?K:await bodyToBuffer(K));},async 'get'(b){return i['readFile'](Z(b));},async 'exists'(b){try{return await i['access'](Z(b)),!![];}catch{return![];}},async 'delete'(b){const K=Z(b),J=f(b);try{await i['mkdir'](E['dirname'](J),{'recursive':!![]}),await i['rename'](K,J);}catch(Q){const y=Q;if(y['code']!=='ENOENT')throw Q;}},'create'(b,K=M['tokenTtl']??0xe10){const X=G,J=Buffer[X(0x1f9)](b)[X(0x1f1)]('base64url'),Q=W['createHmac'](X(0x1fa),D)[X(0x1fb)](J)[X(0x1fc)]('base64url');return J+'.'+Q;},'verify'(b){const U=G,[K,J]=b[U(0x1fd)]('.');if(!K||!J)throw new UnauthorizedError('Invalid\x20file\x20token');const Q=W['createHmac']('sha256',D)['update'](K)[U(0x1fc)](),y=Buffer['from'](J,U(0x1fe));if(Q['length']!==y['length']||!W['timingSafeEqual'](Q,y))throw new UnauthorizedError(U(0x1ff));const s=Buffer['from'](K,U(0x1fe))['toString']('utf8');return s;}};}export function createFileS3(M){const t=g,m=M['tokenSecret']??process.env.FILE_TOKEN_SECRET??W[t(0x200)](0x20)['toString'](t(0x201)),P=new S3Client({'endpoint':M[t(0x202)],'region':M['region']??'us-east-1','forcePathStyle':M['forcePathStyle']??!![],'credentials':M['accessKeyId']||M['accessKey']?{'accessKeyId':M[t(0x203)]??M['accessKey'],'secretAccessKey':M[t(0x204)]??M['secretKey']}:undefined}),D=x=>keyFor(M['folder'],x);return{async 'put'(x,Z){await P['send'](new PutObjectCommand({'Bucket':M['bucket'],'Key':D(x),'Body':Z}));},async 'get'(x){const I=t,Z=await P['send'](new GetObjectCommand({'Bucket':M[I(0x205)],'Key':D(x)}));return bodyToBuffer(Z[I(0x206)]);},async 'exists'(x){const H=t;try{return await P[H(0x207)](new HeadObjectCommand({'Bucket':M['bucket'],'Key':D(x)})),!![];}catch(Z){const f=Z;if(f['$metadata']?.['httpStatusCode']===0x194||f['name']==='NotFound')return![];throw Z;}},async 'delete'(x){const O=t;await P['send'](new DeleteObjectCommand({'Bucket':M[O(0x205)],'Key':D(x)}));},'create'(x,Z=M[t(0x208)]??0xe10){const q=t,f=Buffer['from'](x)[q(0x1f1)](q(0x1fe)),b=W['createHmac']('sha256',m)['update'](f)[q(0x1fc)]('base64url');return f+'.'+b;},'verify'(x){const k=t,[Z,f]=x['split']('.');if(!Z||!f)throw new UnauthorizedError('Invalid\x20file\x20token');const b=W['createHmac']('sha256',m)['update'](Z)[k(0x1fc)](),K=Buffer['from'](f,'base64url');if(b['length']!==K['length']||!W[k(0x209)](b,K))throw new UnauthorizedError('Invalid\x20file\x20token');const J=Buffer['from'](Z,'base64url')['toString']('utf8');return J;}};}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Application-level hooks that consumer apps register through createFCore().
3
+ */
4
+ import type { AppContext, User } from "../context.js";
5
+ export type AfterUserHook = (user: User, ctx: AppContext) => Promise<Record<string, unknown> | void> | Record<string, unknown> | void;
6
+ export interface FCoreHooks {
7
+ /**
8
+ * Enrich the authenticated user payload for GET /api/auth/user
9
+ * and the request session user (e.g. add employee_id).
10
+ */
11
+ afterUser?: AfterUserHook;
12
+ }
13
+ export declare function applyAfterUser(user: User, ctx: Pick<AppContext, "hooks" | "logger"> & Partial<AppContext>): Promise<User>;
14
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/plugins/hooks.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,MAAM,aAAa,GAAG,CAC1B,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,UAAU,KAEb,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,IAAI,CAAC;AAET,MAAM,WAAW,UAAU;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,GAC9D,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -0,0 +1 @@
1
+ function T(){const D=['hooks'];T=function(){return D;};return T();}function g(i,E){i=i-0x183;const W=T();let M=W[i];return M;}export async function applyAfterUser(i,E){const P=g,W=E[P(0x183)]?.['afterUser'];if(!W)return i;try{const M=await W(i,E);if(M&&typeof M==='object')return{...i,...M};}catch(m){E['logger']?.['warn']?.({'file':'hooks/afterUser','error':m instanceof Error?m['message']:String(m),'userId':i['id']});}return i;}
@@ -10,4 +10,5 @@ export * from "./dictionary.js";
10
10
  export * from "./audit/index.js";
11
11
  export * from "./resource/index.js";
12
12
  export * from './jwt.js';
13
+ export * from "./hooks.js";
13
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/plugins/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
@@ -1 +1 @@
1
- export*from'./logger/index.js';export*from'./redis.js';export*from'./pg.js';export*from'./auth/index.js';export*from'./file.js';export*from'./dictionary.js';export*from'./audit/index.js';export*from'./resource/index.js';export*from'./jwt.js';
1
+ export*from'./logger/index.js';export*from'./redis.js';export*from'./pg.js';export*from'./auth/index.js';export*from'./file.js';export*from'./dictionary.js';export*from'./audit/index.js';export*from'./resource/index.js';export*from'./jwt.js';export*from'./hooks.js';
@@ -1 +1 @@
1
- import{SignJWT,jwtVerify}from'jose';function f(p,Z){p=p-0x7f;const A=s();let I=A[p];return I;}const secret=new TextEncoder()['encode'](process.env.AUTH_JWT_SECRET);export async function jwtSignToken(p){const D=f;if(!process.env.AUTH_JWT_SECRET)return;const {id:Z,type:A,permissions:I}=p,j=await new SignJWT({'id':Z,'type':A,'permissions':I})[D(0x7f)]({'alg':'HS256'})[D(0x80)]()[D(0x81)]('1h')['sign'](secret);return j;}export async function jwtVerifyToken(p){const o=f,Z=await jwtVerify(p,secret,{'algorithms':[o(0x82)]})['catch'](A=>{console['log'](A['message']);});return Z?.['payload'];}function s(){const R=['setProtectedHeader','setIssuedAt','setExpirationTime','HS256'];s=function(){return R;};return s();}
1
+ const P=g;import{SignJWT,jwtVerify}from'jose';const secret=new TextEncoder()[P(0xda)](process.env.AUTH_JWT_SECRET);function g(i,E){i=i-0xda;const W=T();let M=W[i];return M;}function T(){const D=['encode'];T=function(){return D;};return T();}export async function jwtSignToken(i){if(!process.env.AUTH_JWT_SECRET)return;const {id:E,type:W,permissions:M}=i,m=await new SignJWT({'id':E,'type':W,'permissions':M})['setProtectedHeader']({'alg':'HS256'})['setIssuedAt']()['setExpirationTime']('1h')['sign'](secret);return m;}export async function jwtVerifyToken(i){const E=await jwtVerify(i,secret,{'algorithms':['HS256']})['catch'](W=>{console['log'](W['message']);});return E?.['payload'];}
@@ -1 +1 @@
1
- import p from'pino';function f(p,Z){p=p-0x80;const A=s();let I=A[p];return I;}export function createLogger(){const R=f,Z=p['transport']({'target':'./transport.js'}),A=p({'level':'info','timestamp':p[R(0x80)]['isoTime'],'base':{'service':'app'},'redact':{'paths':[R(0x81),'password',R(0x82),'accessToken',R(0x83)],'censor':'[REDACTED]'}},Z),I={};function j(D,o){if(D===undefined)return{...I};I[D]=(I[D]??0x0)+(o??0x1);}return Object['assign'](A,{'close':async()=>Z['end'](),'metrics':j,'file':()=>A[R(0x84)]['bind'](A)});}function s(){const B=['stdTimeFunctions','req.headers.authorization','token','refreshToken','info'];s=function(){return B;};return s();}
1
+ import i from'pino';function g(i,E){i=i-0xb2;const W=T();let M=W[i];return M;}function T(){const Z=['transport','stdTimeFunctions','accessToken','end','bind'];T=function(){return Z;};return T();}export function createLogger(){const x=g,E=i[x(0xb2)]({'target':'./transport.js'}),W=i({'level':'info','timestamp':i[x(0xb3)]['isoTime'],'base':{'service':'app'},'redact':{'paths':['req.headers.authorization','password','token',x(0xb4),'refreshToken'],'censor':'[REDACTED]'}},E),M={};function m(P,D){if(P===undefined)return{...M};M[P]=(M[P]??0x0)+(D??0x1);}return Object['assign'](W,{'close':async()=>E[x(0xb5)](),'metrics':m,'file':()=>W['info'][x(0xb6)](W)});}
@@ -1 +1 @@
1
- const R=f;function s(){const h=['info','warn','slice','resolve','mkdirSync','get','stream','end','write'];s=function(){return h;};return s();}import p from'node:fs';import Z from'node:path';import A from'pino-abstract-transport';const LEVELS={0x1e:R(0xa0),0x28:R(0xa1),0x32:'error',0x3c:'error'},streams=new Map();function getDate(){const B=R;return new Date()['toISOString']()[B(0xa2)](0x0,0xa);}function createStream(I,j){const H=R,D=Z[H(0xa3)]('logs',I);return p[H(0xa4)](D,{'recursive':!![]}),p['createWriteStream'](Z['join'](D,j+'.log'),{'flags':'a'});}function f(p,Z){p=p-0xa0;const A=s();let I=A[p];return I;}function getStream(I){const e=R,j=getDate(),D=streams[e(0xa5)](I);if(D&&D['date']===j)return D[e(0xa6)];D?.['stream']['end']();const o=createStream(I,j);return streams['set'](I,{'date':j,'stream':o}),o;}function closeStreams(){const g=R;for(const {stream:I}of streams['values']()){I[g(0xa7)]();}streams['clear']();}export default async function loggerTransport(){return A(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(I){const N=R;for await(const j of I){const D=LEVELS[j['level']];if(!D)continue;const o=getStream(j['file']||D);delete j['file'],o[N(0xa8)](JSON['stringify'](j)+'\x0a');}}
1
+ const x=g;import i from'node:fs';import E from'node:path';import W from'pino-abstract-transport';function g(i,E){i=i-0x132;const W=T();let M=W[i];return M;}const LEVELS={0x1e:'info',0x28:'warn',0x32:x(0x132),0x3c:'error'},streams=new Map();function getDate(){const Z=x;return new Date()['toISOString']()[Z(0x133)](0x0,0xa);}function createStream(M,m){const f=x,P=E[f(0x134)]('logs',M);return i['mkdirSync'](P,{'recursive':!![]}),i['createWriteStream'](E['join'](P,m+'.log'),{'flags':'a'});}function getStream(M){const b=x,m=getDate(),P=streams['get'](M);if(P&&P['date']===m)return P['stream'];P?.[b(0x135)]['end']();const D=createStream(M,m);return streams[b(0x136)](M,{'date':m,'stream':D}),D;}function closeStreams(){const K=x;for(const {stream:M}of streams[K(0x137)]()){M['end']();}streams['clear']();}export default async function loggerTransport(){return W(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(M){const J=x;for await(const m of M){const P=LEVELS[m[J(0x138)]];if(!P)continue;const D=getStream(m['file']||P);delete m['file'],D['write'](JSON[J(0x139)](m)+'\x0a');}}function T(){const Q=['error','slice','resolve','stream','set','values','level','stringify'];T=function(){return Q;};return T();}
@@ -1 +1 @@
1
- import p from'pg';function s(){const E=['query','stack','callerStack'];s=function(){return E;};return s();}function f(p,Z){p=p-0x179;const A=s();let I=A[p];return I;}const {Pool}=p;export function createDatabase(Z){const g=f,A=new Pool(Z),I=A[g(0x179)]['bind'](A);function j(D,o){const R=new Error();return Error['captureStackTrace']?.(R,j),I(D,o)['catch'](B=>{const N=f,H=B;H['sql']=D,H['callerStack']=R[N(0x17a)];throw H;});}return A['query']=j,A['transaction']=async function(D){const h=g,o=new Error();Error['captureStackTrace']?.(o,A['transaction']);const R=await A['connect']();try{await R[h(0x179)]('BEGIN');const B=await D(R);return await R[h(0x179)]('COMMIT'),B;}catch(H){await R[h(0x179)]('ROLLBACK');const e=H;e[h(0x17b)]=o[h(0x17a)];throw e;}finally{R['release']();}},A;}
1
+ function g(i,E){i=i-0x184;const W=T();let M=W[i];return M;}import i from'pg';const {Pool}=i;export function createDatabase(E){const K=g,W=new Pool(E),M=W['query'][K(0x184)](W);function m(P,D){const J=K,x=new Error();return Error[J(0x185)]?.(x,m),M(P,D)['catch'](Z=>{const Q=J,f=Z;f['sql']=P,f[Q(0x186)]=x['stack'];throw f;});}return W['query']=m,W['transaction']=async function(P){const y=K,D=new Error();Error['captureStackTrace']?.(D,W['transaction']);const x=await W['connect']();try{await x['query']('BEGIN');const Z=await P(x);return await x['query'](y(0x187)),Z;}catch(f){await x['query'](y(0x188));const b=f;b[y(0x186)]=D['stack'];throw b;}finally{x['release']();}},W;}function T(){const s=['bind','captureStackTrace','callerStack','COMMIT','ROLLBACK'];T=function(){return s;};return T();}
@@ -1 +1 @@
1
- import{Redis}from'ioredis';export function createRedis(p){const o=f;console['log'](o(0x1ac),p);const Z=new Redis(p);return{'get':A=>Z['get'](A),'set':(A,I,j,D)=>{if(D)return Z['set'](A,I,'EX',D);if(typeof j==='number')return Z['set'](A,I,'EX',j);return Z['set'](A,I);},'del':A=>Z['del'](A),'delete':A=>Z['del'](A),'close':()=>Z[o(0x1ad)](),'ping':()=>Z['ping'](),'hincrby':(A,I,j)=>Z['hincrby'](A,I,j),'incrby':(A,I)=>Z['incrby'](A,I)};}function f(p,Z){p=p-0x1ac;const A=s();let I=A[p];return I;}function s(){const R=['Creating\x20Redis\x20client\x20with\x20config:','quit'];s=function(){return R;};return s();}
1
+ import{Redis}from'ioredis';function T(){const Z=['get','number','set','del'];T=function(){return Z;};return T();}function g(i,E){i=i-0x85;const W=T();let M=W[i];return M;}export function createRedis(i){const D=g;console['log']('Creating\x20Redis\x20client\x20with\x20config:',i);const E=new Redis(i);return{'get':W=>E[D(0x85)](W),'set':(W,M,m,P)=>{const x=D;if(P)return E['set'](W,M,'EX',P);if(typeof m===x(0x86))return E['set'](W,M,'EX',m);return E[x(0x87)](W,M);},'del':W=>E['del'](W),'delete':W=>E[D(0x88)](W),'close':()=>E['quit'](),'ping':()=>E['ping'](),'hincrby':(W,M,m)=>E['hincrby'](W,M,m),'incrby':(W,M)=>E['incrby'](W,M)};}
@@ -1 +1 @@
1
- function f(p,Z){p=p-0x1a5;const A=s();let I=A[p];return I;}import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';import{createFindOne}from'./services/find-one.js';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(p){const g=f,Z=new ResourceRegistry(),A=createFind(p,Z),I=createFindOne(p,Z),j=createCreate(p,Z),D=createUpdate(p,Z),o=createRemove(p,Z),R=createFindRelation(p,Z),B=createCreateRelation(p,Z),H=createUpdateRelation(p,Z),e=createDeleteRelation(p,Z);return{'register':Z['register']['bind'](Z),'unregister':Z['unregister'][g(0x1a5)](Z),'has':Z['has']['bind'](Z),'get':Z[g(0x1a6)]['bind'](Z),'list':Z['list']['bind'](Z),'find':A,'findOne':I,'create':j,'update':D,'delete':o,'findRelation':R,'createRelation':B,'updateRelation':H,'deleteRelation':e};}function s(){const N=['bind','get'];s=function(){return N;};return s();}
1
+ function T(){const J=['unregister','bind'];T=function(){return J;};return T();}import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';import{createFindOne}from'./services/find-one.js';import{createCreate}from'./services/create.js';import{createUpdate}from'./services/update.js';import{createRemove}from'./services/delete.js';function g(i,E){i=i-0x117;const W=T();let M=W[i];return M;}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(i){const K=g,E=new ResourceRegistry(),W=createFind(i,E),M=createFindOne(i,E),m=createCreate(i,E),P=createUpdate(i,E),D=createRemove(i,E),x=createFindRelation(i,E),Z=createCreateRelation(i,E),f=createUpdateRelation(i,E),b=createDeleteRelation(i,E);return{'register':E['register']['bind'](E),'unregister':E[K(0x117)]['bind'](E),'has':E['has']['bind'](E),'get':E['get']['bind'](E),'list':E['list'][K(0x118)](E),'find':W,'findOne':M,'create':m,'update':P,'delete':D,'findRelation':x,'createRelation':Z,'updateRelation':f,'deleteRelation':b};}
@@ -1 +1 @@
1
- const j=f;import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';function f(p,Z){p=p-0x146;const A=s();let I=A[p];return I;}const ident=/^[a-zA-Z0-9_-]*$/;function validQualified(p){const I=f;return p['split']('.')[I(0x146)]<=0x2&&p[I(0x147)]('.')['every'](Z=>ident[I(0x148)](Z));}export class ResourceRegistry{[j(0x149)]=new Map();['unregister'](p){const D=j;this[D(0x149)][D(0x14a)](p);}['register'](p,Z=![]){const o=j;for(const A of Array['isArray'](p)?p:[p]){this['validate'](A);if(this['resources']['has'](A[o(0x14b)])&&!Z)throw new ConflictError(o(0x14c)+A[o(0x14b)]);this['resources']['set'](A['name'],A);}}['has'](p){const R=j;return this['resources'][R(0x14d)](p);}['get'](p){const B=j,Z=this[B(0x149)][B(0x14e)](p);if(!Z)throw new NotFoundError(B(0x14f)+p);return Z;}['list'](){return[...this['resources']['values']()];}[j(0x150)](p){const H=j;if(p[H(0x151)]!==0x1||!ident['test'](p['name'])||!validQualified(p['table'])||!ident['test'](p['key']))throw new ValidationError(H(0x152)+p['name']);for(const [Z,A]of Object['entries'](p['fields'])){if(!ident[H(0x148)](Z)||!ident['test'](A['column']??Z))throw new ValidationError('Invalid\x20resource\x20field:\x20'+Z);}}}function s(){const e=['length','split','test','resources','delete','name','Resource\x20already\x20registered:\x20','has','get','Resource\x20not\x20registered:\x20','validate','version','Invalid\x20resource\x20contract:\x20'];s=function(){return e;};return s();}
1
+ const P=g;function g(i,E){i=i-0xd6;const W=T();let M=W[i];return M;}import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';function T(){const b=['split','length','resources','register','Resource\x20already\x20registered:\x20','has','get','Resource\x20not\x20registered:\x20','list','Invalid\x20resource\x20contract:\x20'];T=function(){return b;};return T();}const ident=/^[a-zA-Z0-9_-]*$/;function validQualified(i){const M=g;return i[M(0xd6)]('.')[M(0xd7)]<=0x2&&i['split']('.')['every'](E=>ident['test'](E));}export class ResourceRegistry{['resources']=new Map();['unregister'](i){const m=g;this[m(0xd8)]['delete'](i);}[P(0xd9)](i,E=![]){const D=P;for(const W of Array['isArray'](i)?i:[i]){this['validate'](W);if(this['resources']['has'](W['name'])&&!E)throw new ConflictError(D(0xda)+W['name']);this[D(0xd8)]['set'](W['name'],W);}}[P(0xdb)](i){return this['resources']['has'](i);}['get'](i){const x=P,E=this['resources'][x(0xdc)](i);if(!E)throw new NotFoundError(x(0xdd)+i);return E;}[P(0xde)](){const Z=P;return[...this[Z(0xd8)]['values']()];}['validate'](i){const f=P;if(i['version']!==0x1||!ident['test'](i['name'])||!validQualified(i['table'])||!ident['test'](i['key']))throw new ValidationError(f(0xdf)+i['name']);for(const [E,W]of Object['entries'](i['fields'])){if(!ident['test'](E)||!ident['test'](W['column']??E))throw new ValidationError('Invalid\x20resource\x20field:\x20'+E);}}}
@@ -51,6 +51,7 @@ export interface ResourceFieldContract {
51
51
  value: string;
52
52
  text: string;
53
53
  fields?: string[];
54
+ filterFields?: string[];
54
55
  };
55
56
  enum?: string[] | number[];
56
57
  minLength?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GACzB,OAAO,GACP,eAAe,GACf,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,MAAM,mBAAmB,GAC3B;IACE,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACD;IACE,SAAS,EAAE,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAC3D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACD;IACE,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEN,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACxE,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AACD,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EACD,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,MAAM,GACN,MAAM,GACN,WAAW,GACX,MAAM,GACN,MAAM,GACN,UAAU,GACV,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,MAAM,oBAAoB,GAC5B,KAAK,GACL,MAAM,CACP;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AACD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC5B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACrD,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC;CACjD;AACD,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACnC;AACD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,mBAAmB,EAAE,CAAC;CAClC;AACD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AACD,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC/C,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC;AAChC,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,eAAe,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CACN,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,EAC5C,SAAS,CAAC,EAAE,OAAO,GAClB,IAAI,CAAC;IACR,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACpC,IAAI,IAAI,gBAAgB,EAAE,CAAC;IAE3B,IAAI,CAAC,MAAM,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,MAAM,CACJ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,MAAM,CACJ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,MAAM,CACJ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,YAAY,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjB,cAAc,CACZ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,GAAG,CAAC,CAAC;IAChB,cAAc,CACZ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,cAAc,CACZ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAClC"}
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(p,Z){const g=f,A=dictionaryIndexesCache['get'](Z)??new Map(),I=dictionaryRevisionsCache[g(0x103)](Z)??new Map();dictionaryIndexesCache['set'](Z,A),dictionaryRevisionsCache[g(0x104)](Z,I);const j=p['filter'](o=>I['get'](o)!==Z[g(0x105)](o));if(j['length']===0x0)return A;const D=await Promise[g(0x106)](j['map'](async o=>{const N=g;if(!Z[N(0x107)](o))return[o,new Map()];const R=await Z[N(0x103)](o),B=new Map();for(const H of R){const e=H['code']??H['id'];if(e==null)continue;B['set'](String(e),{'id':e,'text':H[N(0x108)]??H[N(0x109)],...H['color']!==undefined?{'color':H[N(0x10a)]}:{},...H['icon']!==undefined?{'icon':H[N(0x10b)]}:{}});}return[o,B];}));for(const [o,R]of D){A[g(0x104)](o,R),I[g(0x104)](o,Z['revision'](o));}return A;}function s(){const E=['get','set','revision','all','has','name','text','color','icon','_data'];s=function(){return E;};return s();}function f(p,Z){p=p-0x103;const A=s();let I=A[p];return I;}export async function addDictionaryLookupData(p,Z,A){const h=f;if(!A||p['length']===0x0)return p;const I=Object['entries'](Z)['flatMap'](([D,o])=>{const R=o['dictionary'];return R?[{'field':D,'dictionaryName':R}]:[];});if(I['length']===0x0)return p;const j=await getDictionaryIndexes([...new Set(I['map'](({dictionaryName:D})=>D))],A);for(const D of p){for(const {field:o,dictionaryName:R}of I){const B=D[o];D[o+h(0x10c)]=B==null?null:j[h(0x103)](R)?.[h(0x103)](String(B))??null;}}return p;}
1
+ function g(i,E){i=i-0x116;const W=T();let M=W[i];return M;}const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(i,E){const K=g,W=dictionaryIndexesCache['get'](E)??new Map(),M=dictionaryRevisionsCache['get'](E)??new Map();dictionaryIndexesCache['set'](E,W),dictionaryRevisionsCache['set'](E,M);const m=i[K(0x116)](D=>M[K(0x117)](D)!==E['revision'](D));if(m['length']===0x0)return W;const P=await Promise['all'](m[K(0x118)](async D=>{const J=K;if(!E[J(0x119)](D))return[D,new Map()];const x=await E[J(0x117)](D),Z=new Map();for(const f of x){const b=f['code']??f['id'];if(b==null)continue;Z['set'](String(b),{'id':b,'text':f[J(0x11a)]??f['text'],...f['color']!==undefined?{'color':f['color']}:{},...f[J(0x11b)]!==undefined?{'icon':f[J(0x11b)]}:{}});}return[D,Z];}));for(const [D,x]of P){W[K(0x11c)](D,x),M[K(0x11c)](D,E[K(0x11d)](D));}return W;}function T(){const s=['filter','get','map','has','name','icon','set','revision','length','dictionary'];T=function(){return s;};return T();}export async function addDictionaryLookupData(i,E,W){const Q=g;if(!W||i[Q(0x11e)]===0x0)return i;const M=Object['entries'](E)['flatMap'](([P,D])=>{const y=Q,x=D[y(0x11f)];return x?[{'field':P,'dictionaryName':x}]:[];});if(M['length']===0x0)return i;const m=await getDictionaryIndexes([...new Set(M['map'](({dictionaryName:P})=>P))],W);for(const P of i){for(const {field:D,dictionaryName:x}of M){const Z=P[D];P[D+'_data']=Z==null?null:m['get'](x)?.[Q(0x117)](String(Z))??null;}}return i;}
@@ -1 +1 @@
1
- export function addFileToken(p,Z,A){const R=f;if(!A||p['length']===0x0)return p;const I=Object['entries'](Z)['filter'](([,j])=>j['type']===R(0x179))['map'](([j])=>j);for(const j of p){for(const D of I){const o=j[D];typeof o===R(0x17a)&&o[R(0x17b)]>0x0&&(j[D]=A['create'](o));}}return p;}function f(p,Z){p=p-0x179;const A=s();let I=A[p];return I;}function s(){const B=['file','string','length'];s=function(){return B;};return s();}
1
+ function T(){const Z=['entries','filter','length','create'];T=function(){return Z;};return T();}function g(i,E){i=i-0x185;const W=T();let M=W[i];return M;}export function addFileToken(i,E,W){const x=g;if(!W||i['length']===0x0)return i;const M=Object[x(0x185)](E)[x(0x186)](([,m])=>m['type']==='file')['map'](([m])=>m);for(const m of i){for(const P of M){const D=m[P];typeof D==='string'&&D[x(0x187)]>0x0&&(m[P]=W[x(0x188)](D));}}return i;}
@@ -1 +1 @@
1
- function f(p,Z){p=p-0x199;const A=s();let I=A[p];return I;}import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();export function clearTableLookupCache(p,Z){const K=f,A=tableLookupCache[K(0x199)](Z);if(!A)return;for(const I of A['keys']()){I['startsWith'](p+':')&&A['delete'](I);}}export async function addTableLookupData(p,Z,A){const Q=f;if(!A||p['length']===0x0)return p;const I=tableLookupCache['get'](A)??new Map();tableLookupCache['set'](A,I);const j=Object[Q(0x19a)](Z)['flatMap'](([D,o])=>{const G=Q,{table:R,value:value='id',text:text=G(0x19b)}=o['lookup']??{};return R?[{'field':D,'table':R,'value':value,'text':text}]:[];});for(const D of j){const o=new Map();for(const e of p){const g=e[D['field']];(typeof g===Q(0x19c)||typeof g===Q(0x19d))&&o[Q(0x19e)](String(g),g);}const R=D[Q(0x19f)]+':'+D['value']+':'+D['text'],B=I['get'](R)??new Map();I['set'](R,B);const H=[...o[Q(0x19a)]()]['filter'](([N])=>!B['has'](N))[Q(0x1a0)](([,N])=>N);if(H['length']>0x0){const N=await A[Q(0x1a1)](Q(0x1a2)+qi(D['value'])+Q(0x1a3)+qi(D['text'])+'\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20'+qt(D['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(D['value'])+'\x20=\x20ANY($1)',[H]);for(const h of N['rows']){B['set'](String(h['id']),h);}for(const E of H){!B[Q(0x1a4)](String(E))&&B['set'](String(E),null);}}for(const a of p){const X=a[D['field']];a[D[Q(0x1a5)]+'_data']=X==null?null:B['get'](String(X))??null;}}return p;}function s(){const V=['get','entries','name','string','number','set','table','map','query','SELECT\x20','\x20AS\x20id,\x20','has','field'];s=function(){return V;};return s();}
1
+ import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();export function clearTableLookupCache(i,E){const r=g,W=tableLookupCache['get'](E);if(!W)return;for(const M of W['keys']()){M['startsWith'](i+':')&&W[r(0x78)](M);}}export async function addTableLookupData(i,E,W){const G=g;if(!W||i['length']===0x0)return i;const M=tableLookupCache[G(0x79)](W)??new Map();tableLookupCache['set'](W,M);const m=Object['entries'](E)['flatMap'](([P,D])=>{const S=G,{table:x,value:value='id',text:text=S(0x7a)}=D[S(0x7b)]??{};return x?[{'field':P,'table':x,'value':value,'text':text}]:[];});for(const P of m){const D=new Map();for(const b of i){const K=b[P['field']];(typeof K==='string'||typeof K===G(0x7c))&&D[G(0x7d)](String(K),K);}const x=P['table']+':'+P['value']+':'+P['text'],Z=M['get'](x)??new Map();M[G(0x7d)](x,Z);const f=[...D[G(0x7e)]()]['filter'](([J])=>!Z['has'](J))['map'](([,J])=>J);if(f['length']>0x0){const J=await W['query'](G(0x7f)+qi(P['value'])+'\x20AS\x20id,\x20'+qi(P['text'])+G(0x80)+qt(P['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(P['value'])+'\x20=\x20ANY($1)',[f]);for(const Q of J['rows']){Z['set'](String(Q['id']),Q);}for(const y of f){!Z['has'](String(y))&&Z['set'](String(y),null);}}for(const s of i){const o=s[P['field']];s[P['field']+'_data']=o==null?null:Z['get'](String(o))??null;}}return i;}function g(i,E){i=i-0x78;const W=T();let M=W[i];return M;}function T(){const p=['delete','get','name','lookup','number','set','entries','SELECT\x20','\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20'];T=function(){return p;};return T();}