@opengis/fcore 0.0.1-beta.21 → 0.0.1-beta.23

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 (98) hide show
  1. package/dist/config.js +1 -1
  2. package/dist/context.js +1 -1
  3. package/dist/errors.js +1 -1
  4. package/dist/fastify.js +1 -1
  5. package/dist/fcore.js +1 -1
  6. package/dist/migrations/cli.js +1 -1
  7. package/dist/migrations/runner.js +1 -1
  8. package/dist/modules/auth/adduser-cli.js +1 -1
  9. package/dist/modules/auth/passwd-cli.js +1 -1
  10. package/dist/modules/auth/permission-cli.js +1 -1
  11. package/dist/modules/auth/route.js +1 -1
  12. package/dist/modules/auth/schema.js +1 -1
  13. package/dist/modules/auth/services/change-password.js +1 -1
  14. package/dist/modules/auth/services/get-current-user.js +1 -1
  15. package/dist/modules/auth/services/registration.js +1 -1
  16. package/dist/modules/auth/services/verify-two-factor.js +1 -1
  17. package/dist/modules/file/mime.js +1 -1
  18. package/dist/modules/file/route.js +1 -1
  19. package/dist/modules/file/schema.js +1 -1
  20. package/dist/modules/file/services/get-file.js +1 -1
  21. package/dist/modules/file/services/resize-file.js +1 -1
  22. package/dist/modules/file/services/upload-file.js +1 -1
  23. package/dist/modules/resource/route.js +1 -1
  24. package/dist/modules/resource/schema.js +1 -1
  25. package/dist/modules/resource/services/add-note.js +1 -1
  26. package/dist/modules/resource/services/add-resource-file.js +1 -1
  27. package/dist/modules/resource/services/create-resource-relation.js +1 -1
  28. package/dist/modules/resource/services/create-resource.js +1 -1
  29. package/dist/modules/resource/services/delete-resource-relation.js +1 -1
  30. package/dist/modules/resource/services/delete-resource.js +1 -1
  31. package/dist/modules/resource/services/export-resource.js +1 -1
  32. package/dist/modules/resource/services/get-resource.js +1 -1
  33. package/dist/modules/resource/services/list-resource-relation.js +1 -1
  34. package/dist/modules/resource/services/list-resources.js +1 -1
  35. package/dist/modules/resource/services/search-resource.js +1 -1
  36. package/dist/modules/resource/services/suggest-resource.js +1 -1
  37. package/dist/modules/resource/services/update-resource-relation.js +1 -1
  38. package/dist/modules/resource/services/update-resource.js +1 -1
  39. package/dist/modules/resource/services/upload-resource-file.js +1 -1
  40. package/dist/modules/system/route.js +1 -1
  41. package/dist/modules/system/schema.js +1 -1
  42. package/dist/modules/system/services/check-system.js +1 -1
  43. package/dist/modules/system/services/get-access.js +1 -1
  44. package/dist/modules/system/services/get-api-list.js +1 -1
  45. package/dist/modules/system/services/get-audit-log.d.ts.map +1 -1
  46. package/dist/modules/system/services/get-audit-log.js +1 -1
  47. package/dist/modules/system/services/get-dictionary.js +1 -1
  48. package/dist/modules/system/services/get-system-log.js +1 -1
  49. package/dist/modules/system/services/get-system-settings.js +1 -1
  50. package/dist/modules/system/services/list-dictionaries.js +1 -1
  51. package/dist/modules/system/services/set-access.js +1 -1
  52. package/dist/modules/system/services/update-dictionary.js +1 -1
  53. package/dist/modules/system/services/update-system-settings.js +1 -1
  54. package/dist/modules/utils/require-admin.js +1 -1
  55. package/dist/modules/utils/safe-user.js +1 -1
  56. package/dist/modules/utils/unsupported.js +1 -1
  57. package/dist/plugins/audit/audit.js +1 -1
  58. package/dist/plugins/audit/services/write-audit.js +1 -1
  59. package/dist/plugins/auth/get-user-permissions.js +1 -1
  60. package/dist/plugins/auth/index.js +1 -1
  61. package/dist/plugins/auth/verifyUser.js +1 -1
  62. package/dist/plugins/dictionary.js +1 -1
  63. package/dist/plugins/file.js +1 -1
  64. package/dist/plugins/jwt.js +1 -1
  65. package/dist/plugins/logger/index.js +1 -1
  66. package/dist/plugins/logger/transport.js +1 -1
  67. package/dist/plugins/pg.js +1 -1
  68. package/dist/plugins/redis.js +1 -1
  69. package/dist/plugins/resource/resource.js +1 -1
  70. package/dist/plugins/resource/resource.registry.js +1 -1
  71. package/dist/plugins/resource/resource.types.d.ts +1 -0
  72. package/dist/plugins/resource/resource.types.d.ts.map +1 -1
  73. package/dist/plugins/resource/services/add-dictionary-lookup-data.js +1 -1
  74. package/dist/plugins/resource/services/add-file-token.js +1 -1
  75. package/dist/plugins/resource/services/add-table-lookup-data.js +1 -1
  76. package/dist/plugins/resource/services/create-relation.js +1 -1
  77. package/dist/plugins/resource/services/create.js +1 -1
  78. package/dist/plugins/resource/services/delete-relation.js +1 -1
  79. package/dist/plugins/resource/services/delete.js +1 -1
  80. package/dist/plugins/resource/services/find-one.d.ts.map +1 -1
  81. package/dist/plugins/resource/services/find-one.js +1 -1
  82. package/dist/plugins/resource/services/find-relation.js +1 -1
  83. package/dist/plugins/resource/services/find.d.ts.map +1 -1
  84. package/dist/plugins/resource/services/find.js +1 -1
  85. package/dist/plugins/resource/services/get-table-columns.d.ts +8 -0
  86. package/dist/plugins/resource/services/get-table-columns.d.ts.map +1 -0
  87. package/dist/plugins/resource/services/get-table-columns.js +1 -0
  88. package/dist/plugins/resource/services/update-relation.js +1 -1
  89. package/dist/plugins/resource/services/update.js +1 -1
  90. package/dist/plugins/resource/utils/auto-index.js +1 -1
  91. package/dist/plugins/resource/utils/fields.js +1 -1
  92. package/dist/plugins/resource/utils/filters.js +1 -1
  93. package/dist/plugins/resource/utils/permissions.js +1 -1
  94. package/dist/plugins/resource/utils/sort.js +1 -1
  95. package/dist/plugins/resource/utils/sql.js +1 -1
  96. package/dist/shared/getIP.js +1 -1
  97. package/migrations/20260903120000_core_schema.sql +1 -1
  98. package/package.json +1 -1
@@ -1 +1 @@
1
- const f=r;import{getSystemSettings}from'./services/get-system-settings.js';import{updateSystemSettings}from'./services/update-system-settings.js';import{getAuditLog}from'./services/get-audit-log.js';import{checkSystem}from'./services/check-system.js';import{getApiList}from'./services/get-api-list.js';function g(){const Q=['user','/api/dictionary/:name','fcore','params','Update\x20platform\x20dictionary','get','Get\x20access\x20rules','system:access','post','admin','accessTarget','access','body','/api/system/settings','system','Updates\x20system\x20settings\x20using\x20flat\x20dot-notation\x20keys.','settings','logger','Get\x20audit\x20log','/api/system/check','apiListQuery','query'];g=function(){return Q;};return g();}import{getSystemLog}from'./services/get-system-log.js';import{getDictionary}from'./services/get-dictionary.js';import{updateDictionary}from'./services/update-dictionary.js';import{getAccess}from'./services/get-access.js';import{setAccess}from'./services/set-access.js';function r(n,k){n=n-0xa9;const Z=g();let K=Z[n];return K;}import{systemSchemas}from'./schema.js';const u=n=>n[f(0xa9)];export function systemRoutes(n,k=new Map()){return async Z=>{const R=r;Z['get'](R(0xaa),{'schema':{'tags':[R(0xab),'system'],'summary':'Get\x20platform\x20dictionary','description':'Returns\x20a\x20registered\x20platform\x20dictionary\x20by\x20name.','access':'user','permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName']}},async d=>({'items':await getDictionary({...d[R(0xac)],'user':u(d)},n)})),Z['post'](R(0xaa),{'schema':{'tags':[R(0xab),'system'],'summary':R(0xad),'description':'Replaces\x20the\x20items\x20of\x20a\x20registered\x20platform\x20dictionary.','access':R(0xa9),'permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName'],'body':systemSchemas['dictionaryItems']}},async d=>updateDictionary({...d['params'],...d['body'],'user':u(d)},n));const K=async d=>getAccess({...d[R(0xac)],'user':u(d)},n);Z[R(0xae)]('/api/access/:type/:id',{'schema':{'tags':['fcore','system'],'summary':R(0xaf),'description':'Returns\x20direct\x20and\x20role-based\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','access':'admin','permissions':[R(0xb0)],'params':systemSchemas['accessTarget']}},K),Z[R(0xb1)]('/api/access/:type/:id',{'schema':{'tags':['fcore','system'],'summary':'Set\x20access\x20rules','description':'Replaces\x20direct\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','access':R(0xb2),'permissions':['system:access'],'params':systemSchemas[R(0xb3)],'body':systemSchemas[R(0xb4)]}},async d=>setAccess({...d['params'],...d[R(0xb5)],'user':u(d)},n)),Z[R(0xae)](R(0xb6),{'schema':{'tags':[R(0xab),'system'],'summary':'Get\x20system\x20settings','description':'Returns\x20system\x20settings\x20as\x20nested\x20JSON.','access':R(0xb2),'permissions':['system:settings']}},async d=>getSystemSettings({...d['params'],'user':u(d)},n)),Z['post']('/api/system/settings',{'schema':{'tags':['fcore',R(0xb7)],'summary':'Update\x20system\x20settings','description':R(0xb8),'access':'admin','permissions':['system:settings'],'body':systemSchemas[R(0xb9)]}},async d=>updateSystemSettings({...d[R(0xac)],'patch':d['body'],'user':u(d)},n)),Z['get']('/api/system/logger',{'schema':{'tags':['fcore','system'],'summary':'Get\x20system\x20log','description':'Returns\x20system\x20logger\x20entries\x20for\x20the\x20requested\x20path.','access':'user','permissions':['system:logs'],'querystring':systemSchemas[R(0xba)]}},async(d,J)=>{const {contentType:B,body:l}=await getSystemLog({...d['query'],'user':u(d)},n);return J['type'](B)['send'](l);}),Z['get']('/api/system/audit',{'schema':{'tags':[R(0xab),'system'],'summary':R(0xbb),'description':'Returns\x20the\x20system\x20audit\x20log\x20entries.','access':'user','permissions':['system:audit']}},async d=>getAuditLog({...d['query'],'user':u(d)},n)),Z['get'](R(0xbc),{'schema':{'tags':['fcore','system'],'summary':'Check\x20system\x20health','description':'Checks\x20the\x20availability\x20of\x20system\x20dependencies.','access':'user','permissions':['system:check']}},async d=>checkSystem({'user':u(d)},n)),Z['get']('/api/system/list',{'schema':{'tags':['fcore','system'],'summary':'List\x20APIs','description':'Returns\x20the\x20list\x20of\x20registered\x20platform\x20APIs.','access':'admin','permissions':[],'querystring':systemSchemas[R(0xbd)]}},async d=>getApiList({'user':u(d),'apiRoutes':k,...d[R(0xbe)]},n));};}
1
+ import{getSystemSettings}from'./services/get-system-settings.js';import{updateSystemSettings}from'./services/update-system-settings.js';import{getAuditLog}from'./services/get-audit-log.js';function S(i,n){i=i-0x192;const x=v();let N=x[i];return N;}import{checkSystem}from'./services/check-system.js';import{getApiList}from'./services/get-api-list.js';function v(){const V=['/api/dictionary/:name','fcore','post','system','user','params','get','Returns\x20direct\x20and\x20role-based\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','system:access','accessTarget','Set\x20access\x20rules','access','/api/system/settings','admin','Updates\x20system\x20settings\x20using\x20flat\x20dot-notation\x20keys.','system:settings','Returns\x20system\x20logger\x20entries\x20for\x20the\x20requested\x20path.','query','Checks\x20the\x20availability\x20of\x20system\x20dependencies.','system:check','List\x20APIs'];v=function(){return V;};return v();}import{getSystemLog}from'./services/get-system-log.js';import{getDictionary}from'./services/get-dictionary.js';import{updateDictionary}from'./services/update-dictionary.js';import{getAccess}from'./services/get-access.js';import{setAccess}from'./services/set-access.js';import{systemSchemas}from'./schema.js';const u=i=>i['user'];export function systemRoutes(i,n=new Map()){return async x=>{const f=S;x['get'](f(0x192),{'schema':{'tags':[f(0x193),'system'],'summary':'Get\x20platform\x20dictionary','description':'Returns\x20a\x20registered\x20platform\x20dictionary\x20by\x20name.','access':'user','permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName']}},async a=>({'items':await getDictionary({...a['params'],'user':u(a)},i)})),x[f(0x194)]('/api/dictionary/:name',{'schema':{'tags':['fcore',f(0x195)],'summary':'Update\x20platform\x20dictionary','description':'Replaces\x20the\x20items\x20of\x20a\x20registered\x20platform\x20dictionary.','access':f(0x196),'permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName'],'body':systemSchemas['dictionaryItems']}},async a=>updateDictionary({...a[f(0x197)],...a['body'],'user':u(a)},i));const N=async a=>getAccess({...a['params'],'user':u(a)},i);x[f(0x198)]('/api/access/:type/:id',{'schema':{'tags':[f(0x193),'system'],'summary':'Get\x20access\x20rules','description':f(0x199),'access':'admin','permissions':[f(0x19a)],'params':systemSchemas[f(0x19b)]}},N),x[f(0x194)]('/api/access/:type/:id',{'schema':{'tags':[f(0x193),'system'],'summary':f(0x19c),'description':'Replaces\x20direct\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','access':'admin','permissions':['system:access'],'params':systemSchemas['accessTarget'],'body':systemSchemas[f(0x19d)]}},async a=>setAccess({...a['params'],...a['body'],'user':u(a)},i)),x['get'](f(0x19e),{'schema':{'tags':['fcore','system'],'summary':'Get\x20system\x20settings','description':'Returns\x20system\x20settings\x20as\x20nested\x20JSON.','access':f(0x19f),'permissions':['system:settings']}},async a=>getSystemSettings({...a['params'],'user':u(a)},i)),x['post']('/api/system/settings',{'schema':{'tags':[f(0x193),'system'],'summary':'Update\x20system\x20settings','description':f(0x1a0),'access':f(0x19f),'permissions':[f(0x1a1)],'body':systemSchemas['settings']}},async a=>updateSystemSettings({...a['params'],'patch':a['body'],'user':u(a)},i)),x[f(0x198)]('/api/system/logger',{'schema':{'tags':[f(0x193),'system'],'summary':'Get\x20system\x20log','description':f(0x1a2),'access':'user','permissions':['system:logs'],'querystring':systemSchemas['logger']}},async(a,B)=>{const A=f,{contentType:q,body:X}=await getSystemLog({...a[A(0x1a3)],'user':u(a)},i);return B['type'](q)['send'](X);}),x['get']('/api/system/audit',{'schema':{'tags':['fcore','system'],'summary':'Get\x20audit\x20log','description':'Returns\x20the\x20system\x20audit\x20log\x20entries.','access':'user','permissions':['system:audit']}},async a=>getAuditLog({...a['query'],'user':u(a)},i)),x['get']('/api/system/check',{'schema':{'tags':['fcore','system'],'summary':'Check\x20system\x20health','description':f(0x1a4),'access':'user','permissions':[f(0x1a5)]}},async a=>checkSystem({'user':u(a)},i)),x[f(0x198)]('/api/system/list',{'schema':{'tags':['fcore','system'],'summary':f(0x1a6),'description':'Returns\x20the\x20list\x20of\x20registered\x20platform\x20APIs.','access':f(0x19f),'permissions':[],'querystring':systemSchemas['apiListQuery']}},async a=>getApiList({'user':u(a),'apiRoutes':n,...a['query']},i));};}
@@ -1 +1 @@
1
- function r(n,k){n=n-0x13f;const Z=g();let K=Z[n];return K;}const n=r;import{Type}from'@sinclair/typebox';function g(){const k=['^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$','String','Union','Number','user','Object','^[A-Za-z0-9_-]+(?::[A-Za-z0-9_-]+)?$','Literal','extended'];g=function(){return k;};return g();}export const identifier=Type['String']({'minLength':0x1,'maxLength':0x80,'pattern':n(0x13f)});export const systemSchemas={'dictionaryName':Type['Object']({'name':identifier}),'dictionaryItems':Type['Object']({'items':Type['Array'](Type['Object']({'id':Type['Optional'](Type['Union']([Type['String'](),Type['Number']()])),'code':Type['String']({'minLength':0x1}),'name':Type[n(0x140)]({'minLength':0x1}),'parentId':Type['Optional'](Type[n(0x141)]([Type['String'](),Type[n(0x142)](),Type['Null']()]))},{'additionalProperties':!![]}))}),'accessTarget':Type['Object']({'type':Type['Union']([Type['Literal'](n(0x143)),Type['Literal']('role')]),'id':identifier}),'access':Type[n(0x144)]({'permissions':Type['Optional'](Type['Array'](Type[n(0x140)]({'minLength':0x1,'maxLength':0x80,'pattern':n(0x145)}))),'access':Type['Optional'](Type['Array'](Type['Object']({'resource':Type['String']({'minLength':0x1,'maxLength':0x80}),'actions':Type['Array'](Type[n(0x140)]({'minLength':0x1,'maxLength':0x80}),{'minItems':0x1})})))}),'apiListQuery':Type['Object']({'format':Type['Optional'](Type['Union']([Type[n(0x146)]('short'),Type['Literal'](n(0x147))]))}),'settingsEntity':Type[n(0x144)]({'entity':Type['Optional'](identifier)}),'settings':Type['Record'](Type['String']({'minLength':0x1}),Type['Unknown']()),'logger':Type[n(0x144)]({'path':Type['Optional'](Type[n(0x140)]({'maxLength':0x100,'pattern':'^[A-Za-z0-9_.\x5c-/]*$'}))})};
1
+ const i=S;function S(i,n){i=i-0x148;const x=v();let N=x[i];return N;}import{Type}from'@sinclair/typebox';function v(){const n=['Optional','Union','role','String','Array','short','Object','Unknown'];v=function(){return n;};return v();}export const identifier=Type['String']({'minLength':0x1,'maxLength':0x80,'pattern':'^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$'});export const systemSchemas={'dictionaryName':Type['Object']({'name':identifier}),'dictionaryItems':Type['Object']({'items':Type['Array'](Type['Object']({'id':Type[i(0x148)](Type['Union']([Type['String'](),Type['Number']()])),'code':Type['String']({'minLength':0x1}),'name':Type['String']({'minLength':0x1}),'parentId':Type['Optional'](Type['Union']([Type['String'](),Type['Number'](),Type['Null']()]))},{'additionalProperties':!![]}))}),'accessTarget':Type['Object']({'type':Type[i(0x149)]([Type['Literal']('user'),Type['Literal'](i(0x14a))]),'id':identifier}),'access':Type['Object']({'permissions':Type[i(0x148)](Type['Array'](Type[i(0x14b)]({'minLength':0x1,'maxLength':0x80,'pattern':'^[A-Za-z0-9_-]+(?::[A-Za-z0-9_-]+)?$'}))),'access':Type[i(0x148)](Type['Array'](Type['Object']({'resource':Type['String']({'minLength':0x1,'maxLength':0x80}),'actions':Type[i(0x14c)](Type['String']({'minLength':0x1,'maxLength':0x80}),{'minItems':0x1})})))}),'apiListQuery':Type['Object']({'format':Type[i(0x148)](Type['Union']([Type['Literal'](i(0x14d)),Type['Literal']('extended')]))}),'settingsEntity':Type[i(0x14e)]({'entity':Type['Optional'](identifier)}),'settings':Type['Record'](Type[i(0x14b)]({'minLength':0x1}),Type[i(0x14f)]()),'logger':Type['Object']({'path':Type['Optional'](Type[i(0x14b)]({'maxLength':0x100,'pattern':'^[A-Za-z0-9_.\x5c-/]*$'}))})};
@@ -1 +1 @@
1
- export async function checkSystem(n,k){const d=r,[Z,K]=await Promise['allSettled']([k['pg']['query']('SELECT\x201'),k['redis']['ping']()]);return{'status':Z['status']===d(0x6a)&&K['status']===d(0x6a)?'ok':'degraded','pg':Z['status'],'redis':K['status']};}function r(n,k){n=n-0x6a;const Z=g();let K=Z[n];return K;}function g(){const J=['fulfilled'];g=function(){return J;};return g();}
1
+ export async function checkSystem(i,n){const a=S,[x,N]=await Promise['allSettled']([n['pg']['query']('SELECT\x201'),n[a(0xca)]['ping']()]);return{'status':x['status']==='fulfilled'&&N['status']==='fulfilled'?'ok':a(0xcb),'pg':x['status'],'redis':N['status']};}function S(i,n){i=i-0xca;const x=v();let N=x[i];return N;}function v(){const B=['redis','degraded'];v=function(){return B;};return v();}
@@ -1 +1 @@
1
- function r(n,k){n=n-0x170;const Z=g();let K=Z[n];return K;}function g(){const l=['type','\x0a\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20ra.resource,\x20ra.actions,\x20ra.role_id\x20AS\x20role\x0a\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20\x20\x20LEFT\x20JOIN\x20admin.user_roles\x20ur\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20ur.role_id\x20=\x20ra.role_id\x20AND\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20ra.user_uid\x20=\x20$1\x20OR\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20','\x0a\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20ra.resource,\x20ra.actions,\x20ra.role_id\x20AS\x20role\x0a\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20ra.role_id\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20','filter'];g=function(){return l;};return g();}export async function getAccess(n,k){const B=r,Z=n[B(0x170)]==='user'?B(0x171):B(0x172),K=await k['pg']['query'](Z,[n['id']]),d=[...new Set(K['rows']['map'](J=>J['resource'])[B(0x173)](J=>J!==null))];return{'access':K['rows'],'resources':d};}
1
+ function S(i,n){i=i-0x1ad;const x=v();let N=x[i];return N;}export async function getAccess(i,n){const q=S,x=i[q(0x1ad)]==='user'?'\x0a\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20ra.resource,\x20ra.actions,\x20ra.role_id\x20AS\x20role\x0a\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20\x20\x20LEFT\x20JOIN\x20admin.user_roles\x20ur\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20ur.role_id\x20=\x20ra.role_id\x20AND\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20ra.user_uid\x20=\x20$1\x20OR\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20':'\x0a\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20ra.resource,\x20ra.actions,\x20ra.role_id\x20AS\x20role\x0a\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20ra.role_id\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20',N=await n['pg']['query'](x,[i['id']]),a=[...new Set(N['rows']['map'](B=>B['resource'])['filter'](B=>B!==null))];return{'access':N['rows'],'resources':a};}function v(){const X=['type'];v=function(){return X;};return v();}
@@ -1 +1 @@
1
- function r(n,k){n=n-0x157;const Z=g();let K=Z[n];return K;}function g(){const f=['values','sort','format','map'];g=function(){return f;};return g();}export async function getApiList(n,k){const l=r,Z=[...n['apiRoutes'][l(0x157)]()][l(0x158)]((K,d)=>(K['endpoint']+'\x20'+K['method'])['localeCompare'](d['endpoint']+'\x20'+d['method']));if(n[l(0x159)]!=='short')return Z;return Z[l(0x15a)](({method:K,endpoint:d,access:J,permissions:B})=>K+'\x20'+d);}
1
+ export async function getApiList(i,n){const X=S,x=[...i['apiRoutes']['values']()]['sort']((N,a)=>(N[X(0x17f)]+'\x20'+N['method'])[X(0x180)](a['endpoint']+'\x20'+a[X(0x181)]));if(i['format']!=='short')return x;return x['map'](({method:N,endpoint:a,access:B,permissions:q})=>N+'\x20'+a);}function S(i,n){i=i-0x17f;const x=v();let N=x[i];return N;}function v(){const f=['endpoint','localeCompare','method'];v=function(){return f;};return v();}
@@ -1 +1 @@
1
- {"version":3,"file":"get-audit-log.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-audit-log.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,wBAAsB,WAAW,CAC/B,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,CAcd"}
1
+ {"version":3,"file":"get-audit-log.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-audit-log.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAG5D,wBAAsB,WAAW,CAC/B,MAAM,EAAE;IACN,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EACD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,CAmBd"}
@@ -1 +1 @@
1
- export async function getAuditLog(n,k){const J=r,Z=Math['min'](Math['max'](n['limit']??0x32,0x1),0xc8),K=Math[J(0x67)]((n['page']??0x1)-0x1,0x0)*Z,d=await k['pg'][J(0x68)]('SELECT\x20*\x20FROM\x20admin.audit_log\x20ORDER\x20BY\x20id\x20DESC\x20LIMIT\x20$1\x20OFFSET\x20$2',[Z,K]);return{'rows':d['rows'],'page':n['page']??0x1,'limit':Z};}function r(n,k){n=n-0x67;const Z=g();let K=Z[n];return K;}function g(){const B=['max','query'];g=function(){return B;};return g();}
1
+ export async function getAuditLog(i,n){const x=Math['min'](Math['max'](i['limit']??0x32,0x1),0xc8),N=Math['max']((i['page']??0x1)-0x1,0x0)*x,a=await n['pg']['query']('SELECT\x0a\x20\x20\x20\x20\x20\x20l.*,\x0a\x20\x20\x20\x20\x20\x20case\x20when\x20u.first_name\x20is\x20not\x20null\x20then\x20coalesce(u.last_name,\x27\x27)||coalesce(\x27\x20\x27||u.first_name,\x27\x27)\x20else\x20coalesce(u.login,\x20u.email,\x27\x27)\x20end\x20as\x20user_id_text\x0a\x20\x20\x20\x20FROM\x20admin.audit_log\x20l\x0a\x20\x20\x20\x20JOIN\x20admin.users\x20u\x20ON\x20l.user_id=u.uid\x0a\x20\x20\x20\x20ORDER\x20BY\x20id\x20DESC\x20LIMIT\x20$1\x20OFFSET\x20$2',[x,N]);return{'rows':a['rows'],'page':i['page']??0x1,'limit':x};}
@@ -1 +1 @@
1
- export async function getDictionary(n,k){return k['dictionary']['get'](n['name']);}
1
+ export async function getDictionary(i,n){return n['dictionary']['get'](i['name']);}
@@ -1 +1 @@
1
- function g(){const b=['resolve','file','isDirectory','mtime','toISOString','text/html;\x20charset=utf-8','?path=','directory','</a></li>','join','</title></head>\x0a<body>\x0a<h1>','\x0a</ul>\x0a</body>\x0a</html>','replace','&gt;','&quot;','split','some','Invalid\x20log\x20path','alloc','concat','utf8','slice','reverse'];g=function(){return b;};return g();}import n from'node:fs/promises';import k from'node:path';import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=k['resolve'](process['cwd'](),'logs'),TAIL_LINES=0x64;function r(n,k){n=n-0x8d;const Z=g();let K=Z[n];return K;}export async function getSystemLog(Z,K){const I=r,d=normalizePath(Z['path']),J=k[I(0x8d)](LOGS_ROOT,d);if(J!==LOGS_ROOT&&!J['startsWith'](LOGS_ROOT+k['sep']))throw new ValidationError('Invalid\x20log\x20path');const B=await n['stat'](J)['catch'](()=>null);if(!B)throw new NotFoundError('Log\x20path\x20not\x20found');if(B['isDirectory']()){const f=await n['readdir'](J,{'withFileTypes':!![]}),R=await Promise['all'](f['map'](async Q=>{const O=I,a=await n['stat'](k['join'](J,Q['name']));return{'name':Q['name'],'path':d?d+'/'+Q['name']:Q['name'],'type':Q['isDirectory']()?'directory':O(0x8e),'size':Q[O(0x8f)]()?undefined:a['size'],'modified':a[O(0x90)][O(0x91)]()};}));R['sort']((Q,H)=>Q['name']['localeCompare'](H['name']));if(d){const Q=d['split']('/')['slice'](0x0,-0x1)['join']('/');R['unshift']({'name':'..','path':Q,'type':'directory'});}return{'contentType':I(0x92),'body':renderDirectory(d,R)};}const l=await tailFile(J,TAIL_LINES);return{'contentType':'text/plain;\x20charset=utf-8','body':l['join']('\x0a')};}function renderDirectory(Z,K){const p=r,d=K['map'](B=>{const m=r,l=m(0x93)+encodeURIComponent(B['path']),f=B['type']===m(0x94)?B['name']+'/':B['name'];return'<li><a\x20href=\x22'+l+'\x22>'+escapeHtml(f)+m(0x95);})[p(0x96)]('\x0a'),J=escapeHtml('logs/'+Z);return'<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>'+J+p(0x97)+J+'</h1>\x0a<ul>\x0a'+d+p(0x98);}function escapeHtml(Z){const C=r;return Z['replace'](/&/g,'&amp;')[C(0x99)](/</g,'&lt;')['replace'](/>/g,C(0x9a))['replace'](/"/g,C(0x9b));}function normalizePath(Z){const T=r,K=(Z??'')[T(0x99)](/\\/g,'/')[T(0x99)](/^\/+|\/+$/g,'');if(K[T(0x9c)]('/')[T(0x9d)](d=>d==='..'))throw new ValidationError(T(0x9e));return K;}async function tailFile(Z,K){const c=r,d=await n['open'](Z,'r');try{const {size:J}=await d['stat'](),B=0x40*0x400;let l=J,f=Buffer['alloc'](0x0),R=0x0;while(l>0x0&&R<=K){const a=Math['min'](B,l);l-=a;const H=Buffer[c(0x9f)](a);await d['read'](H,0x0,a,l),f=Buffer[c(0xa0)]([H,f]),R+=countNewlines(H);}const Q=f['toString'](c(0xa1))['split']('\x0a')['filter'](A=>A['length']>0x0);return Q[c(0xa2)](-K)[c(0xa3)]();}finally{await d['close']();}}function countNewlines(Z){let K=0x0;for(const d of Z){if(d===0xa)K++;}return K;}
1
+ import i from'node:fs/promises';import n from'node:path';import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=n['resolve'](process['cwd'](),'logs'),TAIL_LINES=0x64;export async function getSystemLog(x,N){const t=S,a=normalizePath(x[t(0xb3)]),B=n[t(0xb4)](LOGS_ROOT,a);if(B!==LOGS_ROOT&&!B[t(0xb5)](LOGS_ROOT+n[t(0xb6)]))throw new ValidationError('Invalid\x20log\x20path');const q=await i['stat'](B)['catch'](()=>null);if(!q)throw new NotFoundError(t(0xb7));if(q['isDirectory']()){const f=await i['readdir'](B,{'withFileTypes':!![]}),A=await Promise[t(0xb8)](f[t(0xb9)](async u=>{const z=t,V=await i['stat'](n['join'](B,u[z(0xba)]));return{'name':u[z(0xba)],'path':a?a+'/'+u[z(0xba)]:u['name'],'type':u['isDirectory']()?'directory':'file','size':u['isDirectory']()?undefined:V['size'],'modified':V['mtime']['toISOString']()};}));A['sort']((u,V)=>u[t(0xba)]['localeCompare'](V['name']));if(a){const u=a['split']('/')['slice'](0x0,-0x1)['join']('/');A[t(0xbb)]({'name':'..','path':u,'type':'directory'});}return{'contentType':'text/html;\x20charset=utf-8','body':renderDirectory(a,A)};}const X=await tailFile(B,TAIL_LINES);return{'contentType':'text/plain;\x20charset=utf-8','body':X['join']('\x0a')};}function renderDirectory(x,N){const J=S,a=N[J(0xb9)](q=>{const p=J,X='?path='+encodeURIComponent(q[p(0xb3)]),f=q['type']===p(0xbc)?q['name']+'/':q['name'];return p(0xbd)+X+'\x22>'+escapeHtml(f)+'</a></li>';})[J(0xbe)]('\x0a'),B=escapeHtml(J(0xbf)+x);return'<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>'+B+J(0xc0)+B+'</h1>\x0a<ul>\x0a'+a+J(0xc1);}function escapeHtml(x){const h=S;return x['replace'](/&/g,h(0xc2))['replace'](/</g,h(0xc3))['replace'](/>/g,'&gt;')[h(0xc4)](/"/g,'&quot;');}function normalizePath(x){const O=S,N=(x??'')['replace'](/\\/g,'/')['replace'](/^\/+|\/+$/g,'');if(N['split']('/')[O(0xc5)](a=>a==='..'))throw new ValidationError('Invalid\x20log\x20path');return N;}async function tailFile(x,N){const m=S,a=await i['open'](x,'r');try{const {size:B}=await a['stat'](),q=0x40*0x400;let X=B,f=Buffer['alloc'](0x0),A=0x0;while(X>0x0&&A<=N){const V=Math[m(0xc6)](q,X);X-=V;const M=Buffer['alloc'](V);await a['read'](M,0x0,V,X),f=Buffer[m(0xc7)]([M,f]),A+=countNewlines(M);}const u=f['toString']('utf8')[m(0xc8)]('\x0a')['filter'](U=>U['length']>0x0);return u['slice'](-N)['reverse']();}finally{await a['close']();}}function S(i,n){i=i-0xb3;const x=v();let N=x[i];return N;}function countNewlines(x){let N=0x0;for(const a of x){if(a===0xa)N++;}return N;}function v(){const P=['path','resolve','startsWith','sep','Log\x20path\x20not\x20found','all','map','name','unshift','directory','<li><a\x20href=\x22','join','logs/','</title></head>\x0a<body>\x0a<h1>','\x0a</ul>\x0a</body>\x0a</html>','&amp;','&lt;','replace','some','min','concat','split'];v=function(){return P;};return v();}
@@ -1 +1 @@
1
- function r(n,k){n=n-0xd2;const Z=g();let K=Z[n];return K;}export async function getSystemSettings(n,k){const Z=await k['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 Z['rows']['reduce']((K,d)=>{const f=r,J=String(d['key'])[f(0xd2)]('.');let B=K;for(const l of J['slice'](0x0,-0x1)){B[l]??={},B=B[l];}return B[J['at'](-0x1)]=d['value'],K;},{});}function g(){const R=['split'];g=function(){return R;};return g();}
1
+ function S(i,n){i=i-0x146;const x=v();let N=x[i];return N;}function v(){const u=['\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','key'];v=function(){return u;};return v();}export async function getSystemSettings(i,n){const f=S,x=await n['pg']['query'](f(0x146));return x['rows']['reduce']((N,a)=>{const A=f,B=String(a[A(0x147)])['split']('.');let q=N;for(const X of B['slice'](0x0,-0x1)){q[X]??={},q=q[X];}return q[B['at'](-0x1)]=a['value'],N;},{});}
@@ -1 +1 @@
1
- export async function listDictionaries(n,k){return k['dictionary']['list']();}
1
+ export async function listDictionaries(i,n){return n['dictionary']['list']();}
@@ -1 +1 @@
1
- import{getAccess}from'./get-access.js';const CRUD_ACTIONS=['read','update','create','delete'];function g(){const H=['update','get','add','set','connect','user','DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL','query','permissions','access','type','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'];g=function(){return H;};return g();}function r(n,k){n=n-0x8a;const Z=g();let K=Z[n];return K;}function permissionsToAccess(n){const Q=r,k=new Map();for(const Z of n){const [K,d]=Z['split'](':');if(!K)continue;const J=d==='edit'?Q(0x8a):d,B=k[Q(0x8b)](K)??new Set();for(const l of J?[J]:CRUD_ACTIONS)B[Q(0x8c)](l);k[Q(0x8d)](K,B);}return[...k]['map'](([f,R])=>({'resource':f,'actions':[...R]}));}export async function setAccess(n,k){const a=r,Z=await k['pg'][a(0x8e)]();try{await Z['query']('BEGIN');n['type']===a(0x8f)?await Z['query'](a(0x90),[n['id']]):await Z[a(0x91)]('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL',[n['id']]);const K=n[a(0x92)]?permissionsToAccess(n[a(0x92)]):n[a(0x93)]??[];for(const d of K){n[a(0x94)]===a(0x8f)?await Z['query'](a(0x95),[d[a(0x96)],d['actions'],n['id'],n['user']['id'],n['user']['id']]):await Z['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[a(0x96)],d['actions'],n['id'],n[a(0x8f)]['id'],n[a(0x8f)]['id']]);}await Z['query']('COMMIT');}catch(J){await Z[a(0x91)]('ROLLBACK');throw J;}finally{Z['release']();}return getAccess(n,k);}
1
+ const u=S;function S(i,n){i=i-0x15b;const x=v();let N=x[i];return N;}function v(){const M=['read','connect','BEGIN','type','query','user','INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20user_uid,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)','resource','actions','ROLLBACK'];v=function(){return M;};return v();}import{getAccess}from'./get-access.js';const CRUD_ACTIONS=[u(0x15b),'update','create','delete'];function permissionsToAccess(i){const n=new Map();for(const x of i){const [N,a]=x['split'](':');if(!N)continue;const B=a==='edit'?'update':a,q=n['get'](N)??new Set();for(const X of B?[B]:CRUD_ACTIONS)q['add'](X);n['set'](N,q);}return[...n]['map'](([f,A])=>({'resource':f,'actions':[...A]}));}export async function setAccess(i,n){const V=u,x=await n['pg'][V(0x15c)]();try{await x['query'](V(0x15d));i[V(0x15e)]==='user'?await x[V(0x15f)]('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL',[i['id']]):await x['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL',[i['id']]);const N=i['permissions']?permissionsToAccess(i['permissions']):i['access']??[];for(const a of N){i[V(0x15e)]===V(0x160)?await x['query'](V(0x161),[a[V(0x162)],a[V(0x163)],i['id'],i[V(0x160)]['id'],i['user']['id']]):await x['query']('INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20role_id,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)',[a['resource'],a['actions'],i['id'],i['user']['id'],i['user']['id']]);}await x['query']('COMMIT');}catch(B){await x[V(0x15f)](V(0x164));throw B;}finally{x['release']();}return getAccess(i,n);}
@@ -1 +1 @@
1
- function g(){var K=['put','items'];g=function(){return K;};return g();}function r(n,k){n=n-0x116;var Z=g();var K=Z[n];return K;}export async function updateDictionary(n,k){var Z=r;return await k['dictionary'][Z(0x116)](n['name'],n[Z(0x117)]),{'success':!![]};}
1
+ function S(i,n){i=i-0x102;var x=v();var N=x[i];return N;}export async function updateDictionary(i,n){var x=S;return await n['dictionary']['put'](i[x(0x102)],i['items']),{'success':!![]};}function v(){var N=['name'];v=function(){return N;};return v();}
@@ -1 +1 @@
1
- import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(n,k){const d=r;if(!Object[d(0xd1)](n['patch'])['length'])throw new ValidationError('Settings\x20patch\x20is\x20empty');for(const [Z,K]of Object['entries'](n['patch'])){if(!Z['trim']()||Z['includes']('..'))throw new ValidationError('Invalid\x20setting\x20key:\x20'+Z);await k['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',[Z,JSON['stringify'](K),n['user']['id']]);}return{'success':!![]};}function r(n,k){n=n-0xd1;const Z=g();let K=Z[n];return K;}function g(){const J=['keys'];g=function(){return J;};return g();}
1
+ function S(i,n){i=i-0x15b;const x=v();let N=x[i];return N;}function v(){const B=['entries','trim','query'];v=function(){return B;};return v();}import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(i,n){const a=S;if(!Object['keys'](i['patch'])['length'])throw new ValidationError('Settings\x20patch\x20is\x20empty');for(const [x,N]of Object[a(0x15b)](i['patch'])){if(!x[a(0x15c)]()||x['includes']('..'))throw new ValidationError('Invalid\x20setting\x20key:\x20'+x);await n['pg'][a(0x15d)]('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.settings\x20(resource,\x20resource_id,\x20key,\x20value,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(\x27system\x27,\x20NULL,\x20$1,\x20$2::jsonb,\x20$3)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT\x20(resource,\x20resource_id,\x20key)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20DO\x20UPDATE\x20SET\x20value\x20=\x20EXCLUDED.value,\x20updated_by\x20=\x20EXCLUDED.updated_by,\x20updated_at\x20=\x20now()\x0a\x20\x20\x20\x20\x20\x20\x20\x20',[x,JSON['stringify'](N),i['user']['id']]);}return{'success':!![]};}
@@ -1 +1 @@
1
- import{ForbiddenError}from'../../errors.js';function g(){var K=['User\x20required','type'];g=function(){return K;};return g();}function r(n,k){n=n-0x1a8;var Z=g();var K=Z[n];return K;}export function requireAdmin(n,k){var Z=r;if(!n)throw new ForbiddenError(Z(0x1a8));if(n[Z(0x1a9)]!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(n['type']!=='admin'&&k&&!n['permissions']?.['includes'](k))throw new ForbiddenError('Missing\x20permission:\x20'+k);}
1
+ function S(i,n){i=i-0xcc;var x=v();var N=x[i];return N;}import{ForbiddenError}from'../../errors.js';export function requireAdmin(i,n){var x=S;if(!i)throw new ForbiddenError(x(0xcc));if(i['type']!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(i['type']!=='admin'&&n&&!i[x(0xcd)]?.['includes'](n))throw new ForbiddenError('Missing\x20permission:\x20'+n);}function v(){var N=['User\x20required','permissions'];v=function(){return N;};return v();}
@@ -1 +1 @@
1
- export const safeUser=n=>{const d=r,k=['password',d(0x149),'secret','credentials'];return Object['fromEntries'](Object['entries'](n)['filter'](([Z])=>!k['some'](K=>Z['toLowerCase']()['includes'](K))));};function r(n,k){n=n-0x149;const Z=g();let K=Z[n];return K;}function g(){const J=['salt'];g=function(){return J;};return g();}
1
+ function S(i,n){i=i-0x98;const x=v();let N=x[i];return N;}function v(){const B=['secret','credentials','filter'];v=function(){return B;};return v();}export const safeUser=i=>{const a=S,n=['password','salt',a(0x98),a(0x99)];return Object['fromEntries'](Object['entries'](i)[a(0x9a)](([x])=>!n['some'](N=>x['toLowerCase']()['includes'](N))));};
@@ -1 +1 @@
1
- import{UnsupportedError}from'../../errors.js';export function unsupported(n){throw new UnsupportedError(n+'\x20requires\x20a\x20project/provider\x20implementation');}
1
+ function v(){var x=['\x20requires\x20a\x20project/provider\x20implementation'];v=function(){return x;};return v();}function S(i,n){i=i-0x1c0;var x=v();var N=x[i];return N;}import{UnsupportedError}from'../../errors.js';export function unsupported(i){var n=S;throw new UnsupportedError(i+n(0x1c0));}
@@ -1 +1 @@
1
- import{writeAudit}from'./services/write-audit.js';export function createAudit(n){const k=writeAudit(n);return{'write':k};}
1
+ import{writeAudit}from'./services/write-audit.js';export function createAudit(i){const n=writeAudit(i);return{'write':n};}
@@ -1 +1 @@
1
- const secretPattern=/password|token|secret|credential|salt/i;function clean(n){if(Array['isArray'](n))return n['map'](clean);if(n&&typeof n==='object')return Object['fromEntries'](Object['entries'](n)['map'](([k,Z])=>[k,secretPattern['test'](k)?'[REDACTED]':clean(Z)]));return n;}export function writeAudit(n){let k,Z;async function K(){const R=r;if(!n['pg'])return![];if(k!==undefined)return k;return Z??=n['pg']['query'](R(0x140))['then'](d=>{const Q=R,J=new Set(d['rows']['map'](B=>B['table_name']));return k=J[Q(0x141)]('audit_log')&&J['has']('audit_log_data'),!k&&n['logger']['warn']({'expectedTables':['admin.audit_log','admin.audit_log_data'],'foundTables':[...J]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),k;})[R(0x142)](d=>{const a=R;return k=![],n['logger'][a(0x143)]({'err':d},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),Z;}return async function d(J){const H=r;if(!await K())return n['logger'][H(0x144)]({'auditFallback':!![],'event':clean({...J,'changes':J['changes']?.['map'](f=>({...f,'oldValue':clean(f['oldValue']),'newValue':clean(f['newValue'])}))})},'audit'),0x0;if(!n['pg'])throw new Error('empty\x20pg');const B=await n['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.audit_log\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resource,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resource_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20request_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ip_address,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20metadata\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5,\x20$6,\x20$7,\x20$8,\x20$9)\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20id\x0a\x20\x20\x20\x20\x20\x20',[J['userId']??null,J['module'],J[H(0x145)],J['resourceId']==null?null:String(J['resourceId']),J['fields']??null,J['action'],J['requestId']??null,J['ipAddress']??null,clean(J['metadata']??{})]),l=B['rows'][0x0]['id'];for(const f of J['changes']??[]){if(secretPattern['test'](f['field']))continue;await n['pg']['query'](H(0x146),[l,f['field'],JSON['stringify'](clean(f[H(0x147)])),JSON[H(0x148)](clean(f['newValue']))]);}return l;};}function r(n,k){n=n-0x140;const Z=g();let K=Z[n];return K;}function g(){const A=['\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','has','catch','warn','info','resource','\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','oldValue','stringify'];g=function(){return A;};return g();}
1
+ const secretPattern=/password|token|secret|credential|salt/i;function v(){const M=['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','map','has','audit_log','logger','catch','resourceId','action','requestId','metadata','changes','field'];v=function(){return M;};return v();}function S(i,n){i=i-0xd6;const x=v();let N=x[i];return N;}function clean(i){if(Array['isArray'](i))return i['map'](clean);if(i&&typeof i==='object')return Object['fromEntries'](Object['entries'](i)['map'](([n,x])=>[n,secretPattern['test'](n)?'[REDACTED]':clean(x)]));return i;}export function writeAudit(i){let n,x;async function N(){const A=S;if(!i['pg'])return![];if(n!==undefined)return n;return x??=i['pg'][A(0xd6)](A(0xd7))['then'](a=>{const u=A,B=new Set(a['rows'][u(0xd8)](q=>q['table_name']));return n=B[u(0xd9)](u(0xda))&&B['has']('audit_log_data'),!n&&i[u(0xdb)]['warn']({'expectedTables':['admin.audit_log','admin.audit_log_data'],'foundTables':[...B]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),n;})[A(0xdc)](a=>{return n=![],i['logger']['warn']({'err':a},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),x;}return async function a(B){const V=S;if(!await N())return i['logger']['info']({'auditFallback':!![],'event':clean({...B,'changes':B['changes']?.[V(0xd8)](f=>({...f,'oldValue':clean(f['oldValue']),'newValue':clean(f['newValue'])}))})},'audit'),0x0;if(!i['pg'])throw new Error('empty\x20pg');const q=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',[B['userId']??null,B['module'],B['resource'],B[V(0xdd)]==null?null:String(B['resourceId']),B['fields']??null,B[V(0xde)],B[V(0xdf)]??null,B['ipAddress']??null,clean(B[V(0xe0)]??{})]),X=q['rows'][0x0]['id'];for(const f of B[V(0xe1)]??[]){if(secretPattern['test'](f[V(0xe2)]))continue;await i['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.audit_log_data\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20audit_log_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20field,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20old_value,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20new_value\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20',[X,f['field'],JSON['stringify'](clean(f['oldValue'])),JSON['stringify'](clean(f['newValue']))]);}return X;};}
@@ -1 +1 @@
1
- export async function getUserPermissions(n,k){const Z=await k['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20SELECT\x20DISTINCT\x20ra.resource\x20||\x20\x27:\x27\x20||\x20action\x20AS\x20permission\x0a\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20LEFT\x20JOIN\x20admin.user_roles\x20ur\x20ON\x20ur.role_id\x20=\x20ra.role_id\x0a\x20\x20\x20\x20\x20\x20CROSS\x20JOIN\x20LATERAL\x20unnest(COALESCE(ra.actions,\x20\x27{}\x27::text[]))\x20AS\x20action\x0a\x20\x20\x20\x20\x20\x20WHERE\x20ra.user_uid\x20=\x20$1\x20OR\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20',[n]);return Z['rows']['map'](K=>K['permission']);}
1
+ function S(i,n){i=i-0xff;const x=v();let N=x[i];return N;}function v(){const B=['map'];v=function(){return B;};return v();}export async function getUserPermissions(i,n){const a=S,x=await n['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20SELECT\x20DISTINCT\x20ra.resource\x20||\x20\x27:\x27\x20||\x20action\x20AS\x20permission\x0a\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20LEFT\x20JOIN\x20admin.user_roles\x20ur\x20ON\x20ur.role_id\x20=\x20ra.role_id\x0a\x20\x20\x20\x20\x20\x20CROSS\x20JOIN\x20LATERAL\x20unnest(COALESCE(ra.actions,\x20\x27{}\x27::text[]))\x20AS\x20action\x0a\x20\x20\x20\x20\x20\x20WHERE\x20ra.user_uid\x20=\x20$1\x20OR\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20',[i]);return x['rows'][a(0xff)](N=>N['permission']);}
@@ -1 +1 @@
1
- export*from'./auth.types.js';import{randomBytes,scrypt as n,timingSafeEqual}from'node:crypto';function r(n,k){n=n-0x1af;const Z=g();let K=Z[n];return K;}import{promisify}from'node:util';const scrypt=promisify(n);import k from'@fastify/cookie';import Z from'@fastify/session';import{Authenticator}from'@fastify/passport';import K from'fastify-session-redis-store';function g(){const O=['toString','from','hex','length','warn','test','auth','cookieOptions','registerUserDeserializer'];g=function(){return O;};return g();}import{getUserPermissions}from'./get-user-permissions.js';const fastifyPassport=new Authenticator();export*from'./verifyUser.js';export*from'./get-user-permissions.js';export async function hashPassword(d){const H=r,J=randomBytes(0x10),B=await scrypt(d,J,0x40);return'scrypt$'+J['toString']('hex')+'$'+B[H(0x1af)]('hex');}export async function verifyPassword(d,J){const A=r,[B,l,f]=J?.['split']('$')||[];if(B!=='scrypt'||!l||!f)return![];const R=Buffer[A(0x1b0)](l,'hex'),Q=Buffer['from'](f,A(0x1b1)),a=await scrypt(d,R,Q[A(0x1b2)]);return timingSafeEqual(a,Q);}export async function createSessionStore(d,J){const I=r,{config:B,redis:l}=J;if(!B||!l){console[I(0x1b3)]('Missing\x20config\x20or\x20redis\x20-\x20skipping\x20session\x20store\x20creation');return;}if(process.env.NODE_ENV===I(0x1b4)||process.env.VITEST)return;await d['register'](k,{'parseOptions':B[I(0x1b5)]['cookieOptions']}),await d['register'](Z,{'secret':B['auth']['secret'],'cookieName':B['auth']['cookieName'],'cookie':B['auth'][I(0x1b6)],'store':new K({'prefix':B['auth']['cookieName']+':'+(B['pg']?.['database']||'db')+':','client':l})}),await d['register'](fastifyPassport['initialize']()),await d['register'](fastifyPassport['secureSession']()),fastifyPassport['registerUserSerializer'](async f=>({'user':f})),fastifyPassport[I(0x1b7)](async f=>{const R=f?.['user']||f;return R?.['id']&&(R['permissions']=await getUserPermissions(R['id'],J)),R;});}
1
+ export*from'./auth.types.js';import{randomBytes,scrypt as i,timingSafeEqual}from'node:crypto';import{promisify}from'node:util';const scrypt=promisify(i);import n from'@fastify/cookie';import x from'@fastify/session';import{Authenticator}from'@fastify/passport';import N from'fastify-session-redis-store';import{getUserPermissions}from'./get-user-permissions.js';const fastifyPassport=new Authenticator();export*from'./verifyUser.js';export*from'./get-user-permissions.js';export async function hashPassword(a){const M=S,B=randomBytes(0x10),q=await scrypt(a,B,0x40);return'scrypt$'+B[M(0x183)]('hex')+'$'+q[M(0x183)](M(0x184));}export async function verifyPassword(a,B){const U=S,[q,X,f]=B?.['split']('$')||[];if(q!=='scrypt'||!X||!f)return![];const A=Buffer[U(0x185)](X,'hex'),u=Buffer[U(0x185)](f,'hex'),V=await scrypt(a,A,u[U(0x186)]);return timingSafeEqual(V,u);}function S(i,n){i=i-0x183;const x=v();let N=x[i];return N;}function v(){const J=['toString','hex','from','length','warn','Missing\x20config\x20or\x20redis\x20-\x20skipping\x20session\x20store\x20creation','cookieName','auth','database','initialize','user','permissions'];v=function(){return J;};return v();}export async function createSessionStore(a,B){const t=S,{config:q,redis:X}=B;if(!q||!X){console[t(0x187)](t(0x188));return;}if(process.env.NODE_ENV==='test'||process.env.VITEST)return;await a['register'](n,{'parseOptions':q['auth']['cookieOptions']}),await a['register'](x,{'secret':q['auth']['secret'],'cookieName':q['auth'][t(0x189)],'cookie':q[t(0x18a)]['cookieOptions'],'store':new N({'prefix':q['auth']['cookieName']+':'+(q['pg']?.[t(0x18b)]||'db')+':','client':X})}),await a['register'](fastifyPassport[t(0x18c)]()),await a['register'](fastifyPassport['secureSession']()),fastifyPassport['registerUserSerializer'](async f=>({'user':f})),fastifyPassport['registerUserDeserializer'](async f=>{const z=t,A=f?.[z(0x18d)]||f;return A?.['id']&&(A[z(0x18e)]=await getUserPermissions(A['id'],B)),A;});}
@@ -1 +1 @@
1
- function g(){const a=['not\x20enough\x20params:\x20password','then','auth/warn'];g=function(){return a;};return g();}function r(n,k){n=n-0x1b9;const Z=g();let K=Z[n];return K;}import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';export async function verifyUser({user:n,password:k,ip:Z},{pg:K,logger:d}){const Q=r;if(!n||n==='')throw new BadRequestError('not\x20enough\x20params:\x20user');if(!k||k==='')throw new BadRequestError(Q(0x1b9));d['metrics']('user.login');const J='select\x20uid\x20as\x20id,\x20user_type\x20as\x20type,\x20password_hash,\x20twofa\x20from\x20admin.users\x20where\x20$1\x20in\x20(login,email,phone)\x20and\x20enabled\x20limit\x201',B=await K['query'](J,[n])[Q(0x1ba)](f=>f['rows']?.[0x0]);if(!B){const f='user\x20not\x20found';d['info']({'file':'auth/warn','error':f,'user':n,'ip':Z});throw new BadRequestError(f);}const l=await verifyPassword(k,B['password_hash']);if(!l){const R='Wrong\x20password';d['info']({'file':Q(0x1bb),'error':R,'user':n,'ip':Z});throw new BadRequestError(R);}return delete B['password_hash'],B;}
1
+ function v(){const V=['not\x20enough\x20params:\x20password','rows','auth/warn','password_hash'];v=function(){return V;};return v();}import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';function S(i,n){i=i-0x8a;const x=v();let N=x[i];return N;}export async function verifyUser({user:i,password:n,ip:x},{pg:N,logger:a}){const u=S;if(!i||i==='')throw new BadRequestError('not\x20enough\x20params:\x20user');if(!n||n==='')throw new BadRequestError(u(0x8a));a['metrics']('user.login');const B='select\x20uid\x20as\x20id,\x20user_type\x20as\x20type,\x20password_hash,\x20twofa\x20from\x20admin.users\x20where\x20$1\x20in\x20(login,email,phone)\x20and\x20enabled\x20limit\x201',q=await N['query'](B,[i])['then'](f=>f[u(0x8b)]?.[0x0]);if(!q){const f='user\x20not\x20found';a['info']({'file':u(0x8c),'error':f,'user':i,'ip':x});throw new BadRequestError(f);}const X=await verifyPassword(n,q[u(0x8d)]);if(!X){const A='Wrong\x20password';a['info']({'file':'auth/warn','error':A,'user':i,'ip':x});throw new BadRequestError(A);}return delete q[u(0x8d)],q;}
@@ -1 +1 @@
1
- function g(){const o=['then','table_name','dictionaries','test','code','set','items','isArray','empty\x20pg','connect','BEGIN','query','name','release'];g=function(){return o;};return g();}function r(n,k){n=n-0x86;const Z=g();let K=Z[n];return K;}import{ConflictError,NotFoundError,ValidationError}from'../errors.js';const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;export function createDictionary({pg:n,dictionaries:dictionaries=[]}){const k=new Map(),Z=new Map();let K,d;async function J(){const q=r;if(K!==undefined)return K;if(!n)throw new Error('empty\x20pg');return d??=n['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')[q(0x86)](I=>{const z=q,O=I['rows'][0x0]?.[z(0x87)];K=O===z(0x88)?O:null;}),await d,K;}function B(I){const j=r;if(!dictionaryName[j(0x89)](I))throw new ValidationError('Invalid\x20dictionary\x20name:\x20'+I);}function l(I){const w=r;for(const O of Array['isArray'](I)?I:[I]){B(O[w(0x8a)]);if(!Array['isArray'](O['items']))throw new ValidationError('Invalid\x20dictionary\x20items:\x20'+O[w(0x8a)]);if(k['has'](O['code']))throw new ConflictError('Dictionary\x20already\x20registered:\x20'+O['code']);k[w(0x8b)](O['code'],{...O,'source':'static'});}}function f(I){return k['has'](I);}async function R(I){const M=r;B(I);const O=k['get'](I);if(O&&O['checked'])return O['items'];const m=await J();if(!m)throw new NotFoundError('Dictionary\x20table\x20not\x20found');const p=await n?.['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',[I]);if(p?.['rows']?.['length']){const C=p?.['rows'];return k['set'](I,{'code':I,'name':I,'items':C,'source':'database','checked':!![]}),C;}if(!O?.[M(0x8c)])throw new NotFoundError('Dictionary\x20not\x20found:\x20'+I);return O['checked']=!![],O['items'];}async function Q(I,O){const V=r;B(I);if(!Array[V(0x8d)](O))throw new ValidationError('Dictionary\x20items\x20must\x20be\x20an\x20array');const m=await J();if(!m)throw new NotFoundError('Dictionary\x20table\x20not\x20found');if(!n)throw new Error(V(0x8e));const p=await n[V(0x8f)]();try{await p['query'](V(0x90));const C=await p['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',[I,I,'fcore','custom',!![]]),T=C['rows'][0x0]['id'];await p['query']('DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1',[T]);for(const c of O){await p[V(0x91)]('\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',[T,c['code'],c[V(0x92)],c['parentId']??null]);}await p['query']('COMMIT');}catch(b){await p[V(0x91)]('ROLLBACK');throw b;}finally{p[V(0x93)]();}k['set'](I,{'items':O,'code':I,'source':'static','checked':!![]}),Z[V(0x8b)](I,(Z['get'](I)??0x0)+0x1);}function a(I){const x=r;return B(I),Z[x(0x8b)](I,(Z['get'](I)??0x0)+0x1),k['delete'](I);}function H(I){return Z['get'](I)??0x0;}async function A(){const X=r,I=[...k['values']()]['map'](({code:p,name:C,source:T})=>({'code':p,'name':C??p,'source':T})),O=await J();if(!O)return I;if(!n)throw new Error('empty\x20pg');const m=await n['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 p of m['rows']){!k['has'](p[X(0x8a)])&&I['push'](p);}return I;}return l(dictionaries),{'register':l,'get':R,'put':Q,'clear':a,'revision':H,'list':A,'has':f};}
1
+ function S(i,n){i=i-0x1e0;const x=v();let N=x[i];return N;}import{ConflictError,NotFoundError,ValidationError}from'../errors.js';const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;function v(){const g=['empty\x20pg','table_name','isArray','code','items','Invalid\x20dictionary\x20items:\x20','has','Dictionary\x20already\x20registered:\x20','\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','set','database','Dictionary\x20not\x20found:\x20','Dictionary\x20table\x20not\x20found','query','custom','ROLLBACK','get'];v=function(){return g;};return v();}export function createDictionary({pg:i,dictionaries:dictionaries=[]}){const n=new Map(),x=new Map();let N,a;async function B(){const G=S;if(N!==undefined)return N;if(!i)throw new Error(G(0x1e0));return a??=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'](t=>{const b=G,z=t['rows'][0x0]?.[b(0x1e1)];N=z==='dictionaries'?z:null;}),await a,N;}function q(t){if(!dictionaryName['test'](t))throw new ValidationError('Invalid\x20dictionary\x20name:\x20'+t);}function X(t){const T=S;for(const z of Array[T(0x1e2)](t)?t:[t]){q(z[T(0x1e3)]);if(!Array['isArray'](z[T(0x1e4)]))throw new ValidationError(T(0x1e5)+z[T(0x1e3)]);if(n[T(0x1e6)](z['code']))throw new ConflictError(T(0x1e7)+z['code']);n['set'](z['code'],{...z,'source':'static'});}}function f(t){return n['has'](t);}async function A(t){const o=S;q(t);const z=n['get'](t);if(z&&z['checked'])return z['items'];const J=await B();if(!J)throw new NotFoundError('Dictionary\x20table\x20not\x20found');const p=await i?.['query'](o(0x1e8),[t]);if(p?.[o(0x1e9)]?.['length']){const h=p?.['rows'];return n[o(0x1ea)](t,{'code':t,'name':t,'items':h,'source':o(0x1eb),'checked':!![]}),h;}if(!z?.['items'])throw new NotFoundError(o(0x1ec)+t);return z['checked']=!![],z[o(0x1e4)];}async function u(t,z){const k=S;q(t);if(!Array['isArray'](z))throw new ValidationError('Dictionary\x20items\x20must\x20be\x20an\x20array');const J=await B();if(!J)throw new NotFoundError(k(0x1ed));if(!i)throw new Error('empty\x20pg');const p=await i['connect']();try{await p['query']('BEGIN');const h=await p[k(0x1ee)]('\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',[t,t,'fcore',k(0x1ef),!![]]),O=h[k(0x1e9)][0x0]['id'];await p['query']('DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1',[O]);for(const m of z){await p['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',[O,m[k(0x1e3)],m['name'],m['parentId']??null]);}await p['query']('COMMIT');}catch(P){await p['query'](k(0x1f0));throw P;}finally{p['release']();}n['set'](t,{'items':z,'code':t,'source':'static','checked':!![]}),x[k(0x1ea)](t,(x['get'](t)??0x0)+0x1);}function V(t){const c=S;return q(t),x['set'](t,(x[c(0x1f1)](t)??0x0)+0x1),n['delete'](t);}function M(t){return x['get'](t)??0x0;}async function U(){const t=[...n['values']()]['map'](({code:p,name:h,source:O})=>({'code':p,'name':h??p,'source':O})),z=await B();if(!z)return t;if(!i)throw new Error('empty\x20pg');const J=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 p of J['rows']){!n['has'](p['code'])&&t['push'](p);}return t;}return X(dictionaries),{'register':X,'get':A,'put':u,'clear':V,'revision':M,'list':U,'has':f};}
@@ -1 +1 @@
1
- import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';import n from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function r(n,k){n=n-0x11c;const Z=g();let K=Z[n];return K;}function keyFor(k,Z){const a=r;if(!Z||Z[a(0x11c)]('/')||Z['includes']('..'))throw new ValidationError('Invalid\x20file\x20path');const K=Z[a(0x11d)](/\\/g,'/')['replace'](/^\/+/,''),d=(k??'')[a(0x11d)](/^\/+|\/+$/g,'');return d?d+'/'+K:K;}function g(){const C=['startsWith','replace','alloc','transformToByteArray','from','toString','hex','region','us-east-1','accessKey','send','bucket','$metadata','httpStatusCode','update','createHmac','digest'];g=function(){return C;};return g();}async function bodyToBuffer(k){const H=r;if(!k)return Buffer[H(0x11e)](0x0);const Z=k;if(typeof Z[H(0x11f)]==='function')return Buffer[H(0x120)](await Z[H(0x11f)]());const K=[];for await(const d of k){K['push'](Buffer['from'](d));}return Buffer['concat'](K);}export function createFileS3(k){const A=r,Z=k['tokenSecret']??process.env.FILE_TOKEN_SECRET??n['randomBytes'](0x20)[A(0x121)](A(0x122)),K=new S3Client({'endpoint':k['endpoint'],'region':k[A(0x123)]??A(0x124),'forcePathStyle':k['forcePathStyle']??!![],'credentials':k['accessKeyId']||k[A(0x125)]?{'accessKeyId':k['accessKeyId']??k['accessKey'],'secretAccessKey':k['secretAccessKey']??k['secretKey']}:undefined}),d=J=>keyFor(k['folder'],J);return{async 'put'(J,B){await K['send'](new PutObjectCommand({'Bucket':k['bucket'],'Key':d(J),'Body':B}));},async 'get'(J){const I=A,B=await K[I(0x126)](new GetObjectCommand({'Bucket':k['bucket'],'Key':d(J)}));return bodyToBuffer(B['Body']);},async 'exists'(J){const O=A;try{return await K[O(0x126)](new HeadObjectCommand({'Bucket':k[O(0x127)],'Key':d(J)})),!![];}catch(B){const l=B;if(l[O(0x128)]?.[O(0x129)]===0x194||l['name']==='NotFound')return![];throw B;}},async 'delete'(J){await K['send'](new DeleteObjectCommand({'Bucket':k['bucket'],'Key':d(J)}));},'create'(J,B=k['tokenTtl']??0xe10){const m=A,l=Buffer[m(0x120)](J)[m(0x121)]('base64url'),f=n['createHmac']('sha256',Z)[m(0x12a)](l)['digest']('base64url');return l+'.'+f;},'verify'(J){const p=A,[B,l]=J['split']('.');if(!B||!l)throw new UnauthorizedError('Invalid\x20file\x20token');const f=n[p(0x12b)]('sha256',Z)['update'](B)[p(0x12c)](),R=Buffer[p(0x120)](l,'base64url');if(f['length']!==R['length']||!n['timingSafeEqual'](f,R))throw new UnauthorizedError('Invalid\x20file\x20token');const Q=Buffer['from'](B,'base64url')['toString']('utf8');return Q;}};}
1
+ import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';import i from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function S(i,n){i=i-0x9d;const x=v();let N=x[i];return N;}function v(){const p=['Invalid\x20file\x20path','replace','tokenSecret','randomBytes','us-east-1','accessKeyId','accessKey','secretAccessKey','secretKey','bucket','name','NotFound','tokenTtl','createHmac','base64url'];v=function(){return p;};return v();}function keyFor(n,x){const V=S;if(!x||x['startsWith']('/')||x['includes']('..'))throw new ValidationError(V(0x9d));const N=x['replace'](/\\/g,'/')[V(0x9e)](/^\/+/,''),a=(n??'')['replace'](/^\/+|\/+$/g,'');return a?a+'/'+N:N;}async function bodyToBuffer(n){if(!n)return Buffer['alloc'](0x0);const x=n;if(typeof x['transformToByteArray']==='function')return Buffer['from'](await x['transformToByteArray']());const N=[];for await(const a of n){N['push'](Buffer['from'](a));}return Buffer['concat'](N);}export function createFileS3(n){const M=S,x=n[M(0x9f)]??process.env.FILE_TOKEN_SECRET??i[M(0xa0)](0x20)['toString']('hex'),N=new S3Client({'endpoint':n['endpoint'],'region':n['region']??M(0xa1),'forcePathStyle':n['forcePathStyle']??!![],'credentials':n[M(0xa2)]||n[M(0xa3)]?{'accessKeyId':n['accessKeyId']??n['accessKey'],'secretAccessKey':n[M(0xa4)]??n[M(0xa5)]}:undefined}),a=B=>keyFor(n['folder'],B);return{async 'put'(B,q){const U=M;await N['send'](new PutObjectCommand({'Bucket':n[U(0xa6)],'Key':a(B),'Body':q}));},async 'get'(B){const t=M,q=await N['send'](new GetObjectCommand({'Bucket':n[t(0xa6)],'Key':a(B)}));return bodyToBuffer(q['Body']);},async 'exists'(B){const z=M;try{return await N['send'](new HeadObjectCommand({'Bucket':n['bucket'],'Key':a(B)})),!![];}catch(q){const X=q;if(X['$metadata']?.['httpStatusCode']===0x194||X[z(0xa7)]===z(0xa8))return![];throw q;}},async 'delete'(B){await N['send'](new DeleteObjectCommand({'Bucket':n['bucket'],'Key':a(B)}));},'create'(B,q=n[M(0xa9)]??0xe10){const X=Buffer['from'](B)['toString']('base64url'),f=i['createHmac']('sha256',x)['update'](X)['digest']('base64url');return X+'.'+f;},'verify'(B){const J=M,[q,X]=B['split']('.');if(!q||!X)throw new UnauthorizedError('Invalid\x20file\x20token');const f=i[J(0xaa)]('sha256',x)['update'](q)['digest'](),A=Buffer['from'](X,J(0xab));if(f['length']!==A['length']||!i['timingSafeEqual'](f,A))throw new UnauthorizedError('Invalid\x20file\x20token');const u=Buffer['from'](q,'base64url')['toString']('utf8');return u;}};}
@@ -1 +1 @@
1
- function g(){const B=['sign'];g=function(){return B;};return g();}import{SignJWT,jwtVerify}from'jose';function r(n,k){n=n-0x123;const Z=g();let K=Z[n];return K;}const secret=new TextEncoder()['encode'](process.env.AUTH_JWT_SECRET);export async function jwtSignToken(n){const J=r;if(!process.env.AUTH_JWT_SECRET)return;const {id:k,type:Z,permissions:K}=n,d=await new SignJWT({'id':k,'type':Z,'permissions':K})['setProtectedHeader']({'alg':'HS256'})['setIssuedAt']()['setExpirationTime']('1h')[J(0x123)](secret);return d;}export async function jwtVerifyToken(n){const k=await jwtVerify(n,secret,{'algorithms':['HS256']})['catch'](Z=>{console['log'](Z['message']);});return k?.['payload'];}
1
+ import{SignJWT,jwtVerify}from'jose';const secret=new TextEncoder()['encode'](process.env.AUTH_JWT_SECRET);function S(i,n){i=i-0xa7;const x=v();let N=x[i];return N;}export async function jwtSignToken(i){const B=S;if(!process.env.AUTH_JWT_SECRET)return;const {id:n,type:x,permissions:N}=i,a=await new SignJWT({'id':n,'type':x,'permissions':N})['setProtectedHeader']({'alg':'HS256'})['setIssuedAt']()[B(0xa7)]('1h')['sign'](secret);return a;}function v(){const q=['setExpirationTime'];v=function(){return q;};return v();}export async function jwtVerifyToken(i){const n=await jwtVerify(i,secret,{'algorithms':['HS256']})['catch'](x=>{console['log'](x['message']);});return n?.['payload'];}
@@ -1 +1 @@
1
- import n from'pino';export function createLogger(){const l=r,k=n['transport']({'target':'./transport.js'}),Z=n({'level':l(0x10d),'timestamp':n[l(0x10e)]['isoTime'],'base':{'service':'app'},'redact':{'paths':[l(0x10f),'password',l(0x110),'accessToken','refreshToken'],'censor':'[REDACTED]'}},k),K={};function d(J,B){if(J===undefined)return{...K};K[J]=(K[J]??0x0)+(B??0x1);}return Object['assign'](Z,{'close':async()=>k['end'](),'metrics':d,'file':()=>Z[l(0x10d)]['bind'](Z)});}function r(n,k){n=n-0x10d;const Z=g();let K=Z[n];return K;}function g(){const f=['info','stdTimeFunctions','req.headers.authorization','token'];g=function(){return f;};return g();}
1
+ function S(i,n){i=i-0x124;const x=v();let N=x[i];return N;}import i from'pino';export function createLogger(){const X=S,n=i['transport']({'target':'./transport.js'}),x=i({'level':X(0x124),'timestamp':i['stdTimeFunctions'][X(0x125)],'base':{'service':'app'},'redact':{'paths':[X(0x126),'password','token','accessToken',X(0x127)],'censor':'[REDACTED]'}},n),N={};function a(B,q){if(B===undefined)return{...N};N[B]=(N[B]??0x0)+(q??0x1);}return Object[X(0x128)](x,{'close':async()=>n['end'](),'metrics':a,'file':()=>x[X(0x124)]['bind'](x)});}function v(){const f=['info','isoTime','req.headers.authorization','refreshToken','assign'];v=function(){return f;};return v();}
@@ -1 +1 @@
1
- function r(n,k){n=n-0x103;const Z=g();let K=Z[n];return K;}const l=r;import n from'node:fs';import k from'node:path';import Z from'pino-abstract-transport';const LEVELS={0x1e:'info',0x28:'warn',0x32:'error',0x3c:l(0x103)},streams=new Map();function getDate(){const f=l;return new Date()[f(0x104)]()['slice'](0x0,0xa);}function createStream(K,d){const R=l,J=k['resolve']('logs',K);return n['mkdirSync'](J,{'recursive':!![]}),n['createWriteStream'](k[R(0x105)](J,d+'.log'),{'flags':'a'});}function getStream(K){const Q=l,d=getDate(),J=streams['get'](K);if(J&&J[Q(0x106)]===d)return J[Q(0x107)];J?.[Q(0x107)][Q(0x108)]();const B=createStream(K,d);return streams['set'](K,{'date':d,'stream':B}),B;}function closeStreams(){for(const {stream:K}of streams['values']()){K['end']();}streams['clear']();}export default async function loggerTransport(){return Z(writeLogs,{'close':async()=>{closeStreams();}});}function g(){const a=['error','toISOString','join','date','stream','end'];g=function(){return a;};return g();}async function writeLogs(K){for await(const d of K){const J=LEVELS[d['level']];if(!J)continue;const B=getStream(d['file']||J);delete d['file'],B['write'](JSON['stringify'](d)+'\x0a');}}
1
+ function S(i,n){i=i-0x17c;const x=v();let N=x[i];return N;}const X=S;import i from'node:fs';function v(){const U=['info','error','toISOString','createWriteStream','.log','stream','end','values','clear','write'];v=function(){return U;};return v();}import n from'node:path';import x from'pino-abstract-transport';const LEVELS={0x1e:X(0x17c),0x28:'warn',0x32:'error',0x3c:X(0x17d)},streams=new Map();function getDate(){const f=X;return new Date()[f(0x17e)]()['slice'](0x0,0xa);}function createStream(N,a){const A=X,B=n['resolve']('logs',N);return i['mkdirSync'](B,{'recursive':!![]}),i[A(0x17f)](n['join'](B,a+A(0x180)),{'flags':'a'});}function getStream(N){const u=X,a=getDate(),B=streams['get'](N);if(B&&B['date']===a)return B[u(0x181)];B?.['stream'][u(0x182)]();const q=createStream(N,a);return streams['set'](N,{'date':a,'stream':q}),q;}function closeStreams(){const V=X;for(const {stream:N}of streams[V(0x183)]()){N['end']();}streams[V(0x184)]();}export default async function loggerTransport(){return x(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(N){const M=X;for await(const a of N){const B=LEVELS[a['level']];if(!B)continue;const q=getStream(a['file']||B);delete a['file'],q[M(0x185)](JSON['stringify'](a)+'\x0a');}}
@@ -1 +1 @@
1
- function g(){const A=['bind','transaction','query','COMMIT'];g=function(){return A;};return g();}function r(n,k){n=n-0x13c;const Z=g();let K=Z[n];return K;}import n from'pg';const {Pool}=n;export function createDatabase(k){const a=r,Z=new Pool(k),K=Z['query'][a(0x13c)](Z);function d(J,B){const l=new Error();return Error['captureStackTrace']?.(l,d),K(J,B)['catch'](f=>{const R=f;R['sql']=J,R['callerStack']=l['stack'];throw R;});}return Z['query']=d,Z['transaction']=async function(J){const H=a,B=new Error();Error['captureStackTrace']?.(B,Z[H(0x13d)]);const l=await Z['connect']();try{await l['query']('BEGIN');const f=await J(l);return await l[H(0x13e)](H(0x13f)),f;}catch(R){await l[H(0x13e)]('ROLLBACK');const Q=R;Q['callerStack']=B['stack'];throw Q;}finally{l['release']();}},Z;}
1
+ function v(){const t=['query','bind','sql','transaction','captureStackTrace','ROLLBACK','stack'];v=function(){return t;};return v();}import i from'pg';const {Pool}=i;function S(i,n){i=i-0x1e0;const x=v();let N=x[i];return N;}export function createDatabase(n){const V=S,x=new Pool(n),N=x[V(0x1e0)][V(0x1e1)](x);function a(B,q){const X=new Error();return Error['captureStackTrace']?.(X,a),N(B,q)['catch'](f=>{const M=S,A=f;A[M(0x1e2)]=B,A['callerStack']=X['stack'];throw A;});}return x['query']=a,x[V(0x1e3)]=async function(B){const U=V,q=new Error();Error[U(0x1e4)]?.(q,x['transaction']);const X=await x['connect']();try{await X['query']('BEGIN');const f=await B(X);return await X['query']('COMMIT'),f;}catch(A){await X[U(0x1e0)](U(0x1e5));const u=A;u['callerStack']=q[U(0x1e6)];throw u;}finally{X['release']();}},x;}
@@ -1 +1 @@
1
- function r(n,k){n=n-0x128;const Z=g();let K=Z[n];return K;}function g(){const f=['get','set'];g=function(){return f;};return g();}import{Redis}from'ioredis';export function createRedis(n){const B=r,k=new Redis(n);return{'get':Z=>k[B(0x128)](Z),'set':(Z,K,d,J)=>{const l=B;if(J)return k[l(0x129)](Z,K,'EX',J);if(typeof d==='number')return k['set'](Z,K,'EX',d);return k[l(0x129)](Z,K);},'del':Z=>k['del'](Z),'delete':Z=>k['del'](Z),'close':()=>k['quit'](),'ping':()=>k['ping'](),'hincrby':(Z,K,d)=>k['hincrby'](Z,K,d),'incrby':(Z,K)=>k['incrby'](Z,K)};}
1
+ function v(){const X=['set'];v=function(){return X;};return v();}function S(i,n){i=i-0x1b9;const x=v();let N=x[i];return N;}import{Redis}from'ioredis';export function createRedis(i){const n=new Redis(i);return{'get':x=>n['get'](x),'set':(x,N,a,B)=>{const q=S;if(B)return n[q(0x1b9)](x,N,'EX',B);if(typeof a==='number')return n[q(0x1b9)](x,N,'EX',a);return n['set'](x,N);},'del':x=>n['del'](x),'delete':x=>n['del'](x),'close':()=>n['quit'](),'ping':()=>n['ping'](),'hincrby':(x,N,a)=>n['hincrby'](x,N,a),'incrby':(x,N)=>n['incrby'](x,N)};}
@@ -1 +1 @@
1
- import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';function r(n,k){n=n-0x11d;const Z=g();let K=Z[n];return K;}import{createFindOne}from'./services/find-one.js';function g(){const H=['register','bind','list'];g=function(){return H;};return g();}import{createCreate}from'./services/create.js';import{createUpdate}from'./services/update.js';import{createRemove}from'./services/delete.js';import{createFindRelation}from'./services/find-relation.js';import{createCreateRelation}from'./services/create-relation.js';import{createDeleteRelation}from'./services/delete-relation.js';import{createUpdateRelation}from'./services/update-relation.js';export function createResource(n){const a=r,k=new ResourceRegistry(),Z=createFind(n,k),K=createFindOne(n,k),d=createCreate(n,k),J=createUpdate(n,k),B=createRemove(n,k),l=createFindRelation(n,k),f=createCreateRelation(n,k),R=createUpdateRelation(n,k),Q=createDeleteRelation(n,k);return{'register':k[a(0x11d)]['bind'](k),'has':k['has'][a(0x11e)](k),'get':k['get']['bind'](k),'list':k[a(0x11f)][a(0x11e)](k),'find':Z,'findOne':K,'create':d,'update':J,'delete':B,'findRelation':l,'createRelation':f,'updateRelation':R,'deleteRelation':Q};}
1
+ 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';function v(){const M=['has','list','bind'];v=function(){return M;};return v();}function S(i,n){i=i-0x1af;const x=v();let N=x[i];return N;}import{createUpdateRelation}from'./services/update-relation.js';export function createResource(i){const V=S,n=new ResourceRegistry(),x=createFind(i,n),N=createFindOne(i,n),a=createCreate(i,n),B=createUpdate(i,n),q=createRemove(i,n),X=createFindRelation(i,n),f=createCreateRelation(i,n),A=createUpdateRelation(i,n),u=createDeleteRelation(i,n);return{'register':n['register']['bind'](n),'has':n[V(0x1af)]['bind'](n),'get':n['get']['bind'](n),'list':n[V(0x1b0)][V(0x1b1)](n),'find':x,'findOne':N,'create':a,'update':B,'delete':q,'findRelation':X,'createRelation':f,'updateRelation':A,'deleteRelation':u};}
@@ -1 +1 @@
1
- const d=r;import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function r(n,k){n=n-0x123;const Z=g();let K=Z[n];return K;}function validQualified(n){const K=r;return n[K(0x123)]('.')['length']<=0x2&&n['split']('.')['every'](k=>ident['test'](k));}export class ResourceRegistry{[d(0x124)]=new Map();[d(0x125)](n){const J=d;for(const k of Array['isArray'](n)?n:[n]){this['validate'](k);if(this[J(0x124)][J(0x126)](k['name']))throw new ConflictError(J(0x127)+k['name']);this['resources']['set'](k[J(0x128)],k);}}['has'](n){return this['resources']['has'](n);}['get'](n){const B=d,k=this['resources'][B(0x129)](n);if(!k)throw new NotFoundError('Resource\x20not\x20registered:\x20'+n);return k;}['list'](){const l=d;return[...this['resources'][l(0x12a)]()];}[d(0x12b)](n){const f=d;if(n[f(0x12c)]!==0x1||!ident[f(0x12d)](n[f(0x128)])||!validQualified(n['table'])||!ident[f(0x12d)](n[f(0x12e)]))throw new ValidationError('Invalid\x20resource\x20contract:\x20'+n['name']);for(const [k,Z]of Object['entries'](n[f(0x12f)])){if(!ident[f(0x12d)](k)||!ident[f(0x12d)](Z[f(0x130)]??k))throw new ValidationError('Invalid\x20resource\x20field:\x20'+k);}}}function g(){const R=['split','resources','register','has','Resource\x20already\x20registered:\x20','name','get','values','validate','version','test','key','fields','column'];g=function(){return R;};return g();}
1
+ import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function S(i,n){i=i-0x158;const x=v();let N=x[i];return N;}function v(){const A=['length','split','test','validate','resources','has','Resource\x20not\x20registered:\x20','values','table','name','entries'];v=function(){return A;};return v();}function validQualified(i){const N=S;return i['split']('.')[N(0x158)]<=0x2&&i[N(0x159)]('.')['every'](n=>ident[N(0x15a)](n));}export class ResourceRegistry{['resources']=new Map();['register'](i){const a=S;for(const n of Array['isArray'](i)?i:[i]){this[a(0x15b)](n);if(this['resources']['has'](n['name']))throw new ConflictError('Resource\x20already\x20registered:\x20'+n['name']);this[a(0x15c)]['set'](n['name'],n);}}['has'](i){const B=S;return this['resources'][B(0x15d)](i);}['get'](i){const q=S,n=this['resources']['get'](i);if(!n)throw new NotFoundError(q(0x15e)+i);return n;}['list'](){const X=S;return[...this[X(0x15c)][X(0x15f)]()];}['validate'](i){const f=S;if(i['version']!==0x1||!ident['test'](i['name'])||!validQualified(i[f(0x160)])||!ident['test'](i['key']))throw new ValidationError('Invalid\x20resource\x20contract:\x20'+i[f(0x161)]);for(const [n,x]of Object[f(0x162)](i['fields'])){if(!ident[f(0x15a)](n)||!ident[f(0x15a)](x['column']??n))throw new ValidationError('Invalid\x20resource\x20field:\x20'+n);}}}
@@ -84,6 +84,7 @@ export interface ResourceListResult<T = Record<string, unknown>> {
84
84
  rows: T[];
85
85
  limit: number;
86
86
  time: number;
87
+ count: number | null;
87
88
  total: number | null;
88
89
  offset: number;
89
90
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();function g(){const I=['get','length','text','icon','revision'];g=function(){return I;};return g();}async function getDictionaryIndexes(n,k){const a=r,Z=dictionaryIndexesCache[a(0xde)](k)??new Map(),K=dictionaryRevisionsCache[a(0xde)](k)??new Map();dictionaryIndexesCache['set'](k,Z),dictionaryRevisionsCache['set'](k,K);const d=n['filter'](B=>K['get'](B)!==k['revision'](B));if(d[a(0xdf)]===0x0)return Z;const J=await Promise['all'](d['map'](async B=>{const H=a;if(!k['has'](B))return[B,new Map()];const l=await k['get'](B),f=new Map();for(const R of l){const Q=R['code']??R['id'];if(Q==null)continue;f['set'](String(Q),{'id':Q,'text':R['name']??R[H(0xe0)],...R['color']!==undefined?{'color':R['color']}:{},...R[H(0xe1)]!==undefined?{'icon':R[H(0xe1)]}:{}});}return[B,f];}));for(const [B,l]of J){Z['set'](B,l),K['set'](B,k[a(0xe2)](B));}return Z;}function r(n,k){n=n-0xde;const Z=g();let K=Z[n];return K;}export async function addDictionaryLookupData(n,k,Z){const A=r;if(!Z||n['length']===0x0)return n;const K=Object['entries'](k)['flatMap'](([J,B])=>{const l=B['dictionary'];return l?[{'field':J,'dictionaryName':l}]:[];});if(K['length']===0x0)return n;const d=await getDictionaryIndexes([...new Set(K['map'](({dictionaryName:J})=>J))],Z);for(const J of n){for(const {field:B,dictionaryName:l}of K){const f=J[B];J[B+'_data']=f==null?null:d['get'](l)?.[A(0xde)](String(f))??null;}}return n;}
1
+ const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(i,n){const V=S,x=dictionaryIndexesCache['get'](n)??new Map(),N=dictionaryRevisionsCache['get'](n)??new Map();dictionaryIndexesCache[V(0x103)](n,x),dictionaryRevisionsCache['set'](n,N);const a=i['filter'](q=>N[V(0x104)](q)!==n['revision'](q));if(a['length']===0x0)return x;const B=await Promise['all'](a[V(0x105)](async q=>{const M=V;if(!n['has'](q))return[q,new Map()];const X=await n['get'](q),f=new Map();for(const A of X){const u=A['code']??A['id'];if(u==null)continue;f[M(0x103)](String(u),{'id':u,'text':A['name']??A['text'],...A['color']!==undefined?{'color':A['color']}:{},...A['icon']!==undefined?{'icon':A['icon']}:{}});}return[q,f];}));for(const [q,X]of B){x[V(0x103)](q,X),N[V(0x103)](q,n['revision'](q));}return x;}export async function addDictionaryLookupData(i,n,x){const U=S;if(!x||i['length']===0x0)return i;const N=Object['entries'](n)['flatMap'](([B,q])=>{const X=q['dictionary'];return X?[{'field':B,'dictionaryName':X}]:[];});if(N['length']===0x0)return i;const a=await getDictionaryIndexes([...new Set(N[U(0x105)](({dictionaryName:B})=>B))],x);for(const B of i){for(const {field:q,dictionaryName:X}of N){const f=B[q];B[q+'_data']=f==null?null:a[U(0x104)](X)?.[U(0x104)](String(f))??null;}}return i;}function S(i,n){i=i-0x103;const x=v();let N=x[i];return N;}function v(){const t=['set','get','map'];v=function(){return t;};return v();}
@@ -1 +1 @@
1
- export function addFileToken(n,k,Z){const l=r;if(!Z||n['length']===0x0)return n;const K=Object[l(0x1b5)](k)['filter'](([,d])=>d['type']==='file')['map'](([d])=>d);for(const d of n){for(const J of K){const B=d[J];typeof B===l(0x1b6)&&B['length']>0x0&&(d[J]=Z['create'](B));}}return n;}function r(n,k){n=n-0x1b5;const Z=g();let K=Z[n];return K;}function g(){const f=['entries','string'];g=function(){return f;};return g();}
1
+ function S(i,n){i=i-0x171;const x=v();let N=x[i];return N;}function v(){const f=['file','map','string'];v=function(){return f;};return v();}export function addFileToken(i,n,x){const X=S;if(!x||i['length']===0x0)return i;const N=Object['entries'](n)['filter'](([,a])=>a['type']===X(0x171))[X(0x172)](([a])=>a);for(const a of i){for(const B of N){const q=a[B];typeof q===X(0x173)&&q['length']>0x0&&(a[B]=x['create'](q));}}return i;}
@@ -1 +1 @@
1
- import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();function g(){const C=['get','flatMap','string','value','text','set','map','length','table','has','_data'];g=function(){return C;};return g();}function r(n,k){n=n-0x1eb;const Z=g();let K=Z[n];return K;}export function clearTableLookupCache(n,k){const Z=tableLookupCache['get'](k);if(!Z)return;for(const K of Z['keys']()){K['startsWith'](n+':')&&Z['delete'](K);}}export async function addTableLookupData(n,k,Z){const p=r;if(!Z||n['length']===0x0)return n;const K=tableLookupCache[p(0x1eb)](Z)??new Map();tableLookupCache['set'](Z,K);const d=Object['entries'](k)[p(0x1ec)](([J,B])=>{const {table:l,value:value='id',text:text='name'}=B['lookup']??{};return l?[{'field':J,'table':l,'value':value,'text':text}]:[];});for(const J of d){const B=new Map();for(const Q of n){const a=Q[J['field']];(typeof a===p(0x1ed)||typeof a==='number')&&B['set'](String(a),a);}const l=J['table']+':'+J[p(0x1ee)]+':'+J[p(0x1ef)],f=K['get'](l)??new Map();K[p(0x1f0)](l,f);const R=[...B['entries']()]['filter'](([H])=>!f['has'](H))[p(0x1f1)](([,H])=>H);if(R[p(0x1f2)]>0x0){const H=await Z['query']('SELECT\x20'+qi(J[p(0x1ee)])+'\x20AS\x20id,\x20'+qi(J[p(0x1ef)])+'\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20'+qt(J[p(0x1f3)])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(J['value'])+'\x20=\x20ANY($1)',[R]);for(const A of H['rows']){f['set'](String(A['id']),A);}for(const I of R){!f[p(0x1f4)](String(I))&&f[p(0x1f0)](String(I),null);}}for(const O of n){const m=O[J['field']];O[J['field']+p(0x1f5)]=m==null?null:f['get'](String(m))??null;}}return n;}
1
+ import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();export function clearTableLookupCache(i,n){const p=S,x=tableLookupCache['get'](n);if(!x)return;for(const N of x['keys']()){N[p(0x123)](i+':')&&x[p(0x124)](N);}}function v(){const m=['startsWith','delete','name','field','number','set','entries','query','text','\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20','table','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20','value','rows','_data'];v=function(){return m;};return v();}function S(i,n){i=i-0x123;const x=v();let N=x[i];return N;}export async function addTableLookupData(i,n,x){const O=S;if(!x||i['length']===0x0)return i;const N=tableLookupCache['get'](x)??new Map();tableLookupCache['set'](x,N);const a=Object['entries'](n)['flatMap'](([B,q])=>{const h=S,{table:X,value:value='id',text:text=h(0x125)}=q['lookup']??{};return X?[{'field':B,'table':X,'value':value,'text':text}]:[];});for(const B of a){const q=new Map();for(const u of i){const V=u[B[O(0x126)]];(typeof V==='string'||typeof V===O(0x127))&&q['set'](String(V),V);}const X=B['table']+':'+B['value']+':'+B['text'],f=N['get'](X)??new Map();N[O(0x128)](X,f);const A=[...q[O(0x129)]()]['filter'](([M])=>!f['has'](M))['map'](([,M])=>M);if(A['length']>0x0){const M=await x[O(0x12a)]('SELECT\x20'+qi(B['value'])+'\x20AS\x20id,\x20'+qi(B[O(0x12b)])+O(0x12c)+qt(B[O(0x12d)])+O(0x12e)+qi(B[O(0x12f)])+'\x20=\x20ANY($1)',[A]);for(const U of M[O(0x130)]){f['set'](String(U['id']),U);}for(const t of A){!f['has'](String(t))&&f['set'](String(t),null);}}for(const z of i){const J=z[B['field']];z[B[O(0x126)]+O(0x131)]=J==null?null:f['get'](String(J))??null;}}return i;}
@@ -1 +1 @@
1
- import{UnsupportedError}from'../../../errors.js';function g(){const p=['notes','files','query','INSERT\x20INTO\x20admin.files\x20(resource,\x20resource_id,\x20file_path,\x20size)\x0a\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\x20RETURNING\x20*','foreignKey','table','\x22\x20requires\x20a\x20project/provider\x20implementation','Relation\x20update\x20is\x20not\x20configured:\x20'];g=function(){return p;};return g();}import{createCreate}from'./create.js';function r(n,k){n=n-0x1df;const Z=g();let K=Z[n];return K;}export function createCreateRelation(n,k){const Z=createCreate(n,k);return async function K({name:d,id:J,relation:B,data:l,user:f},R){const m=r,Q=R?.['pg']??n['pg'],a=k['get'](d);if(['notes','files']['includes'](B)&&!a['capabilities']?.['includes'](B))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+B+'\x22\x20requires\x20a\x20capabilities\x20\x22'+B+'\x22');if(B===m(0x1df)){const I=await Q['query']('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[d,String(J),l?.['body']]);return I['rows'][0x0];}if(B===m(0x1e0)){const O=await Q[m(0x1e1)](m(0x1e2),[d,String(J),l?.['filePath'],l?.['size']??null]);return O['rows'][0x0];}const H=a['relations']?.[B];if(!H?.[m(0x1e3)]||!H['resource']&&!H[m(0x1e4)])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+B+m(0x1e5));if(!l)throw new UnsupportedError('No\x20data\x20provided\x20for\x20relation:\x20'+l);if(!H['resource'])throw new UnsupportedError(m(0x1e6)+B);l[H['foreignKey']]=J;const A=await Z({'name':H['resource'],'data':l??{},'user':f});return A;};}
1
+ function S(i,n){i=i-0x1a4;const x=v();let N=x[i];return N;}import{UnsupportedError}from'../../../errors.js';function v(){const p=['capabilities','Generic\x20Resource\x20relation\x20\x22','files','rows','\x22\x20requires\x20a\x20project/provider\x20implementation','resource','Relation\x20update\x20is\x20not\x20configured:\x20'];v=function(){return p;};return v();}import{createCreate}from'./create.js';export function createCreateRelation(i,n){const x=createCreate(i,n);return async function N({name:a,id:B,relation:q,data:X,user:f},A){const J=S,u=A?.['pg']??i['pg'],V=n['get'](a);if(['notes','files']['includes'](q)&&!V[J(0x1a4)]?.['includes'](q))throw new UnsupportedError(J(0x1a5)+q+'\x22\x20requires\x20a\x20capabilities\x20\x22'+q+'\x22');if(q==='notes'){const t=await u['query']('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[a,String(B),X?.['body']]);return t['rows'][0x0];}if(q===J(0x1a6)){const z=await u['query']('INSERT\x20INTO\x20admin.files\x20(resource,\x20resource_id,\x20file_path,\x20size)\x0a\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\x20RETURNING\x20*',[a,String(B),X?.['filePath'],X?.['size']??null]);return z[J(0x1a7)][0x0];}const M=V['relations']?.[q];if(!M?.['foreignKey']||!M['resource']&&!M['table'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+q+J(0x1a8));if(!X)throw new UnsupportedError('No\x20data\x20provided\x20for\x20relation:\x20'+X);if(!M[J(0x1a9)])throw new UnsupportedError(J(0x1aa)+q);X[M['foreignKey']]=B;const U=await x({'name':M[J(0x1a9)],'data':X??{},'user':f});return U;};}
@@ -1 +1 @@
1
- function g(){const C=['get','push','No\x20writable\x20fields','join','name','key'];g=function(){return C;};return g();}function r(n,k){n=n-0x64;const Z=g();let K=Z[n];return K;}import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';import{qi,qt,writableData}from'../utils/sql.js';import{validateInputData}from'../utils/fields.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createCreate(n,k){return async function Z({name:K,data:d,user:J},B){const p=r,l=k[p(0x64)](K);assertOperation(l,'create',J),validateInputData({'resource':l,'data':d});const f=writableData(l,d);l['fields']['created_at']&&f['push'](['created_at',new Date()]);l['fields']['created_by']&&f[p(0x65)](['created_by',J?.['id']]);if(!f['length'])throw new ValidationError(p(0x66));const R=f['map'](([O])=>qi(O)),Q=f['map']((O,m)=>'$'+(m+0x1)),a=f['map'](([,O])=>O),H=B?.['pg']??n['pg'],A=await H['query']('INSERT\x20INTO\x20'+qt(l['table'])+'\x20('+R['join'](',\x20')+')\x20'+('VALUES\x20('+Q[p(0x67)](',\x20')+')\x20')+'RETURNING\x20*',a),I=A['rows'][0x0];return clearTableLookupCache(l['table'],H),await(B?.['audit']??n['audit'])?.['write']({'userId':J?.['id'],'module':l['module'],'resource':l[p(0x68)],'resourceId':I[l[p(0x69)]],'action':'create','fields':Object['keys'](d)}),I;};}
1
+ function S(i,n){i=i-0x109;const x=v();let N=x[i];return N;}import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';function v(){const h=['get','push','length','No\x20writable\x20fields','map','query','join','keys'];v=function(){return h;};return v();}import{qi,qt,writableData}from'../utils/sql.js';import{validateInputData}from'../utils/fields.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createCreate(i,n){return async function x({name:N,data:a,user:B},q){const p=S,X=n[p(0x109)](N);assertOperation(X,'create',B),validateInputData({'resource':X,'data':a});const f=writableData(X,a);X['fields']['created_at']&&f[p(0x10a)](['created_at',new Date()]);X['fields']['created_by']&&f['push'](['created_by',B?.['id']]);if(!f[p(0x10b)])throw new ValidationError(p(0x10c));const A=f[p(0x10d)](([z])=>qi(z)),u=f[p(0x10d)]((z,J)=>'$'+(J+0x1)),V=f['map'](([,z])=>z),M=q?.['pg']??i['pg'],U=await M[p(0x10e)]('INSERT\x20INTO\x20'+qt(X['table'])+'\x20('+A[p(0x10f)](',\x20')+')\x20'+('VALUES\x20('+u[p(0x10f)](',\x20')+')\x20')+'RETURNING\x20*',V),t=U['rows'][0x0];return clearTableLookupCache(X['table'],M),await(q?.['audit']??i['audit'])?.['write']({'userId':B?.['id'],'module':X['module'],'resource':X['name'],'resourceId':t[X['key']],'action':'create','fields':Object[p(0x110)](a)}),t;};}
@@ -1 +1 @@
1
- function r(n,k){n=n-0xca;const Z=g();let K=Z[n];return K;}import{UnsupportedError}from'../../../errors.js';import{createRemove}from'./delete.js';export function createDeleteRelation(n,k){const Z=createRemove(n,k);return async function K({name:d,id:J,relation:B,relationId:l,user:f},R){const I=r,Q=R?.['pg']??n['pg'],a=k[I(0xca)](d);if(['notes','files']['includes'](B)&&!a['capabilities']?.[I(0xcb)](B))throw new UnsupportedError(I(0xcc)+B+'\x22\x20requires\x20a\x20capabilities\x20\x22'+B+'\x22');if(B===I(0xcd))return await Q['query']('DELETE\x20FROM\x20admin.notes\x20WHERE\x20note_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[l,d,String(J)]),{'success':!![]};if(B===I(0xce))return await Q['query']('DELETE\x20FROM\x20admin.files\x20WHERE\x20file_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[l,d,String(J)]),{'success':!![]};const H=a['relations']?.[B];if(!H?.['resource']||!H['foreignKey'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+B+'\x22\x20requires\x20a\x20project/provider\x20implementation');const A=await Z({'name':H['resource'],'id':l,'user':f,'where':{'column':H['foreignKey'],'value':J}},R);return{'success':A};};}function g(){const O=['get','includes','Generic\x20Resource\x20relation\x20\x22','notes','files'];g=function(){return O;};return g();}
1
+ function v(){const z=['query','relations','resource','foreignKey','Generic\x20Resource\x20relation\x20\x22'];v=function(){return z;};return v();}import{UnsupportedError}from'../../../errors.js';function S(i,n){i=i-0x7a;const x=v();let N=x[i];return N;}import{createRemove}from'./delete.js';export function createDeleteRelation(i,n){const x=createRemove(i,n);return async function N({name:a,id:B,relation:q,relationId:X,user:f},A){const t=S,u=A?.['pg']??i['pg'],V=n['get'](a);if(['notes','files']['includes'](q)&&!V['capabilities']?.['includes'](q))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+q+'\x22\x20requires\x20a\x20capabilities\x20\x22'+q+'\x22');if(q==='notes')return await u[t(0x7a)]('DELETE\x20FROM\x20admin.notes\x20WHERE\x20note_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[X,a,String(B)]),{'success':!![]};if(q==='files')return await u['query']('DELETE\x20FROM\x20admin.files\x20WHERE\x20file_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[X,a,String(B)]),{'success':!![]};const M=V[t(0x7b)]?.[q];if(!M?.[t(0x7c)]||!M[t(0x7d)])throw new UnsupportedError(t(0x7e)+q+'\x22\x20requires\x20a\x20project/provider\x20implementation');const U=await x({'name':M['resource'],'id':X,'user':f,'where':{'column':M['foreignKey'],'value':B}},A);return{'success':U};};}