@opengis/fcore 0.0.1-beta.10 → 0.0.1-beta.12

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 (104) 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.d.ts.map +1 -1
  5. package/dist/fastify.js +1 -1
  6. package/dist/fcore.js +1 -1
  7. package/dist/migrations/cli.js +1 -1
  8. package/dist/migrations/runner.js +1 -1
  9. package/dist/modules/auth/adduser-cli.js +1 -1
  10. package/dist/modules/auth/passwd-cli.js +1 -1
  11. package/dist/modules/auth/permission-cli.js +1 -1
  12. package/dist/modules/auth/route.js +1 -1
  13. package/dist/modules/auth/schema.js +1 -1
  14. package/dist/modules/auth/services/change-password.js +1 -1
  15. package/dist/modules/auth/services/get-current-user.js +1 -1
  16. package/dist/modules/auth/services/registration.js +1 -1
  17. package/dist/modules/auth/services/verify-two-factor.js +1 -1
  18. package/dist/modules/file/mime.js +1 -1
  19. package/dist/modules/file/route.js +1 -1
  20. package/dist/modules/file/schema.js +1 -1
  21. package/dist/modules/file/services/get-file.js +1 -1
  22. package/dist/modules/file/services/resize-file.js +1 -1
  23. package/dist/modules/file/services/upload-file.js +1 -1
  24. package/dist/modules/resource/route.js +1 -1
  25. package/dist/modules/resource/schema.js +1 -1
  26. package/dist/modules/resource/services/add-note.js +1 -1
  27. package/dist/modules/resource/services/add-resource-file.js +1 -1
  28. package/dist/modules/resource/services/create-resource-relation.js +1 -1
  29. package/dist/modules/resource/services/create-resource.js +1 -1
  30. package/dist/modules/resource/services/delete-resource-relation.js +1 -1
  31. package/dist/modules/resource/services/delete-resource.js +1 -1
  32. package/dist/modules/resource/services/export-resource.js +1 -1
  33. package/dist/modules/resource/services/get-resource.js +1 -1
  34. package/dist/modules/resource/services/list-resource-relation.js +1 -1
  35. package/dist/modules/resource/services/list-resources.js +1 -1
  36. package/dist/modules/resource/services/search-resource.js +1 -1
  37. package/dist/modules/resource/services/suggest-resource.js +1 -1
  38. package/dist/modules/resource/services/update-resource-relation.js +1 -1
  39. package/dist/modules/resource/services/update-resource.js +1 -1
  40. package/dist/modules/resource/services/upload-resource-file.js +1 -1
  41. package/dist/modules/system/route.js +1 -1
  42. package/dist/modules/system/schema.js +1 -1
  43. package/dist/modules/system/services/check-system.js +1 -1
  44. package/dist/modules/system/services/get-access.js +1 -1
  45. package/dist/modules/system/services/get-api-list.js +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 +5 -2
  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.d.ts.map +1 -1
  77. package/dist/plugins/resource/services/create-relation.js +1 -1
  78. package/dist/plugins/resource/services/create.d.ts.map +1 -1
  79. package/dist/plugins/resource/services/create.js +1 -1
  80. package/dist/plugins/resource/services/delete-relation.d.ts.map +1 -1
  81. package/dist/plugins/resource/services/delete-relation.js +1 -1
  82. package/dist/plugins/resource/services/delete.d.ts +5 -1
  83. package/dist/plugins/resource/services/delete.d.ts.map +1 -1
  84. package/dist/plugins/resource/services/delete.js +1 -1
  85. package/dist/plugins/resource/services/find-one.js +1 -1
  86. package/dist/plugins/resource/services/find-relation.d.ts.map +1 -1
  87. package/dist/plugins/resource/services/find-relation.js +1 -1
  88. package/dist/plugins/resource/services/find.d.ts.map +1 -1
  89. package/dist/plugins/resource/services/find.js +1 -1
  90. package/dist/plugins/resource/services/update-relation.d.ts.map +1 -1
  91. package/dist/plugins/resource/services/update-relation.js +1 -1
  92. package/dist/plugins/resource/services/update.d.ts +5 -1
  93. package/dist/plugins/resource/services/update.d.ts.map +1 -1
  94. package/dist/plugins/resource/services/update.js +1 -1
  95. package/dist/plugins/resource/utils/auto-index.js +1 -1
  96. package/dist/plugins/resource/utils/fields.js +1 -1
  97. package/dist/plugins/resource/utils/filters.js +1 -1
  98. package/dist/plugins/resource/utils/permissions.js +1 -1
  99. package/dist/plugins/resource/utils/sort.js +1 -1
  100. package/dist/plugins/resource/utils/sql.js +1 -1
  101. package/dist/shared/getIP.js +1 -1
  102. package/migrations/20260903120000_core_schema.sql +5 -2
  103. package/migrations/20260903130001_add_file_fields.sql +5 -0
  104. package/package.json +2 -2
@@ -1 +1 @@
1
- const w=S;function v(){const Q=['user','Get\x20platform\x20dictionary','/api/dictionary/:name','system:dictionaries','Returns\x20direct\x20and\x20role-based\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','/api/access/:type/:id','system','accessTarget','params','body','admin','system:settings','/api/system/settings','Update\x20system\x20settings','get','fcore','Returns\x20system\x20logger\x20entries\x20for\x20the\x20requested\x20path.','logger','system:audit','Check\x20system\x20health','Checks\x20the\x20availability\x20of\x20system\x20dependencies.','/api/system/list','apiListQuery'];v=function(){return Q;};return v();}import{getSystemSettings}from'./services/get-system-settings.js';function S(d,h){d=d-0x141;const p=v();let Z=p[d];return Z;}import{updateSystemSettings}from'./services/update-system-settings.js';import{getAuditLog}from'./services/get-audit-log.js';import{checkSystem}from'./services/check-system.js';import{getApiList}from'./services/get-api-list.js';import{getSystemLog}from'./services/get-system-log.js';import{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=d=>d[w(0x141)];export function systemRoutes(d,h=new Map()){return async p=>{const y=S;p['get']('/api/dictionary/:name',{'schema':{'tags':['fcore','system'],'summary':y(0x142),'description':'Returns\x20a\x20registered\x20platform\x20dictionary\x20by\x20name.','access':'user','permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName']}},async D=>({'items':await getDictionary({...D['params'],'user':u(D)},d)})),p['post'](y(0x143),{'schema':{'tags':['fcore','system'],'summary':'Update\x20platform\x20dictionary','description':'Replaces\x20the\x20items\x20of\x20a\x20registered\x20platform\x20dictionary.','access':'user','permissions':[y(0x144)],'params':systemSchemas['dictionaryName'],'body':systemSchemas['dictionaryItems']}},async D=>updateDictionary({...D['params'],...D['body'],'user':u(D)},d));const Z=async D=>getAccess({...D['params'],'user':u(D)},d);p['get']('/api/access/:type/:id',{'schema':{'tags':['fcore','system'],'summary':'Get\x20access\x20rules','description':y(0x145),'access':'admin','permissions':['system:access'],'params':systemSchemas['accessTarget']}},Z),p['post'](y(0x146),{'schema':{'tags':['fcore',y(0x147)],'summary':'Set\x20access\x20rules','description':'Replaces\x20direct\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','access':'admin','permissions':['system:access'],'params':systemSchemas[y(0x148)],'body':systemSchemas['access']}},async D=>setAccess({...D[y(0x149)],...D[y(0x14a)],'user':u(D)},d)),p['get']('/api/system/settings',{'schema':{'tags':['fcore','system'],'summary':'Get\x20system\x20settings','description':'Returns\x20system\x20settings\x20as\x20nested\x20JSON.','access':y(0x14b),'permissions':[y(0x14c)]}},async D=>getSystemSettings({...D[y(0x149)],'user':u(D)},d)),p['post'](y(0x14d),{'schema':{'tags':['fcore','system'],'summary':y(0x14e),'description':'Updates\x20system\x20settings\x20using\x20flat\x20dot-notation\x20keys.','access':y(0x14b),'permissions':['system:settings'],'body':systemSchemas['settings']}},async D=>updateSystemSettings({...D[y(0x149)],'patch':D['body'],'user':u(D)},d)),p[y(0x14f)]('/api/system/logger',{'schema':{'tags':[y(0x150),'system'],'summary':'Get\x20system\x20log','description':y(0x151),'access':y(0x141),'permissions':['system:logs'],'querystring':systemSchemas[y(0x152)]}},async(D,n)=>{const {contentType:X,body:Y}=await getSystemLog({...D['query'],'user':u(D)},d);return n['type'](X)['send'](Y);}),p['get']('/api/system/audit',{'schema':{'tags':['fcore',y(0x147)],'summary':'Get\x20audit\x20log','description':'Returns\x20the\x20system\x20audit\x20log\x20entries.','access':'user','permissions':[y(0x153)]}},async D=>getAuditLog({...D['query'],'user':u(D)},d)),p['get']('/api/system/check',{'schema':{'tags':['fcore','system'],'summary':y(0x154),'description':y(0x155),'access':'user','permissions':['system:check']}},async D=>checkSystem({'user':u(D)},d)),p[y(0x14f)](y(0x156),{'schema':{'tags':[y(0x150),'system'],'summary':'List\x20APIs','description':'Returns\x20the\x20list\x20of\x20registered\x20platform\x20APIs.','access':'admin','permissions':[],'querystring':systemSchemas[y(0x157)]}},async D=>getApiList({'user':u(D),'apiRoutes':h,...D['query']},d));};}
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';import{checkSystem}from'./services/check-system.js';import{getApiList}from'./services/get-api-list.js';import{getSystemLog}from'./services/get-system-log.js';import{getDictionary}from'./services/get-dictionary.js';import{updateDictionary}from'./services/update-dictionary.js';function A(x,q){x=x-0x10a;const C=g();let J=C[x];return J;}import{getAccess}from'./services/get-access.js';import{setAccess}from'./services/set-access.js';import{systemSchemas}from'./schema.js';const u=x=>x['user'];function g(){const F=['system','Get\x20platform\x20dictionary','user','fcore','Update\x20platform\x20dictionary','body','Returns\x20direct\x20and\x20role-based\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','system:access','Set\x20access\x20rules','Replaces\x20direct\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','admin','system:settings','params','/api/system/settings','system:logs','logger','query','type','get','/api/system/check','Checks\x20the\x20availability\x20of\x20system\x20dependencies.','Returns\x20the\x20list\x20of\x20registered\x20platform\x20APIs.'];g=function(){return F;};return g();}export function systemRoutes(x,q=new Map()){return async C=>{const k=A;C['get']('/api/dictionary/:name',{'schema':{'tags':['fcore',k(0x10a)],'summary':k(0x10b),'description':'Returns\x20a\x20registered\x20platform\x20dictionary\x20by\x20name.','access':k(0x10c),'permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName']}},async K=>({'items':await getDictionary({...K['params'],'user':u(K)},x)})),C['post']('/api/dictionary/:name',{'schema':{'tags':[k(0x10d),'system'],'summary':k(0x10e),'description':'Replaces\x20the\x20items\x20of\x20a\x20registered\x20platform\x20dictionary.','access':k(0x10c),'permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName'],'body':systemSchemas['dictionaryItems']}},async K=>updateDictionary({...K['params'],...K[k(0x10f)],'user':u(K)},x));const J=async K=>getAccess({...K['params'],'user':u(K)},x);C['get']('/api/access/:type/:id',{'schema':{'tags':['fcore','system'],'summary':'Get\x20access\x20rules','description':k(0x110),'access':'admin','permissions':[k(0x111)],'params':systemSchemas['accessTarget']}},J),C['post']('/api/access/:type/:id',{'schema':{'tags':[k(0x10d),'system'],'summary':k(0x112),'description':k(0x113),'access':k(0x114),'permissions':['system:access'],'params':systemSchemas['accessTarget'],'body':systemSchemas['access']}},async K=>setAccess({...K['params'],...K['body'],'user':u(K)},x)),C['get']('/api/system/settings',{'schema':{'tags':['fcore','system'],'summary':'Get\x20system\x20settings','description':'Returns\x20system\x20settings\x20as\x20nested\x20JSON.','access':'admin','permissions':[k(0x115)]}},async K=>getSystemSettings({...K[k(0x116)],'user':u(K)},x)),C['post'](k(0x117),{'schema':{'tags':[k(0x10d),'system'],'summary':'Update\x20system\x20settings','description':'Updates\x20system\x20settings\x20using\x20flat\x20dot-notation\x20keys.','access':'admin','permissions':['system:settings'],'body':systemSchemas['settings']}},async K=>updateSystemSettings({...K[k(0x116)],'patch':K['body'],'user':u(K)},x)),C['get']('/api/system/logger',{'schema':{'tags':['fcore',k(0x10a)],'summary':'Get\x20system\x20log','description':'Returns\x20system\x20logger\x20entries\x20for\x20the\x20requested\x20path.','access':k(0x10c),'permissions':[k(0x118)],'querystring':systemSchemas[k(0x119)]}},async(K,Z)=>{const H=k,{contentType:Y,body:b}=await getSystemLog({...K[H(0x11a)],'user':u(K)},x);return Z[H(0x11b)](Y)['send'](b);}),C['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 K=>getAuditLog({...K['query'],'user':u(K)},x)),C[k(0x11c)](k(0x11d),{'schema':{'tags':['fcore','system'],'summary':'Check\x20system\x20health','description':k(0x11e),'access':'user','permissions':['system:check']}},async K=>checkSystem({'user':u(K)},x)),C['get']('/api/system/list',{'schema':{'tags':['fcore',k(0x10a)],'summary':'List\x20APIs','description':k(0x11f),'access':k(0x114),'permissions':[],'querystring':systemSchemas['apiListQuery']}},async K=>getApiList({'user':u(K),'apiRoutes':q,...K['query']},x));};}
@@ -1 +1 @@
1
- const d=S;import{Type}from'@sinclair/typebox';export const identifier=Type[d(0x1aa)]({'minLength':0x1,'maxLength':0x80,'pattern':d(0x1ab)});function S(d,h){d=d-0x1aa;const p=v();let Z=p[d];return Z;}export const systemSchemas={'dictionaryName':Type['Object']({'name':identifier}),'dictionaryItems':Type['Object']({'items':Type['Array'](Type['Object']({'id':Type['Optional'](Type[d(0x1ac)]([Type['String'](),Type['Number']()])),'code':Type['String']({'minLength':0x1}),'name':Type['String']({'minLength':0x1}),'parentId':Type['Optional'](Type[d(0x1ac)]([Type['String'](),Type['Number'](),Type[d(0x1ad)]()]))},{'additionalProperties':!![]}))}),'accessTarget':Type[d(0x1ae)]({'type':Type['Union']([Type['Literal']('user'),Type['Literal']('role')]),'id':identifier}),'access':Type['Object']({'access':Type[d(0x1af)](Type['Object']({'resource':Type[d(0x1aa)]({'minLength':0x1,'maxLength':0x80}),'actions':Type[d(0x1af)](Type['String']({'minLength':0x1,'maxLength':0x80}),{'minItems':0x1})}))}),'apiListQuery':Type['Object']({'format':Type[d(0x1b0)](Type['Union']([Type['Literal'](d(0x1b1)),Type['Literal']('extended')]))}),'settingsEntity':Type['Object']({'entity':Type[d(0x1b0)](identifier)}),'settings':Type['Record'](Type['String']({'minLength':0x1}),Type[d(0x1b2)]()),'logger':Type['Object']({'path':Type[d(0x1b0)](Type['String']({'maxLength':0x100,'pattern':d(0x1b3)}))})};function v(){const h=['String','^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$','Union','Null','Object','Array','Optional','short','Unknown','^[A-Za-z0-9_.\x5c-/]*$'];v=function(){return h;};return v();}
1
+ const x=A;import{Type}from'@sinclair/typebox';export const identifier=Type['String']({'minLength':0x1,'maxLength':0x80,'pattern':'^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$'});function g(){const q=['Object','Optional','Number','Null','user','role','String','Literal','extended','Record','Unknown'];g=function(){return q;};return g();}function A(x,q){x=x-0x88;const C=g();let J=C[x];return J;}export const systemSchemas={'dictionaryName':Type[x(0x88)]({'name':identifier}),'dictionaryItems':Type['Object']({'items':Type['Array'](Type['Object']({'id':Type[x(0x89)](Type['Union']([Type['String'](),Type['Number']()])),'code':Type['String']({'minLength':0x1}),'name':Type['String']({'minLength':0x1}),'parentId':Type['Optional'](Type['Union']([Type['String'](),Type[x(0x8a)](),Type[x(0x8b)]()]))},{'additionalProperties':!![]}))}),'accessTarget':Type['Object']({'type':Type['Union']([Type['Literal'](x(0x8c)),Type['Literal'](x(0x8d))]),'id':identifier}),'access':Type['Object']({'access':Type['Array'](Type[x(0x88)]({'resource':Type['String']({'minLength':0x1,'maxLength':0x80}),'actions':Type['Array'](Type[x(0x8e)]({'minLength':0x1,'maxLength':0x80}),{'minItems':0x1})}))}),'apiListQuery':Type[x(0x88)]({'format':Type['Optional'](Type['Union']([Type['Literal']('short'),Type[x(0x8f)](x(0x90))]))}),'settingsEntity':Type['Object']({'entity':Type['Optional'](identifier)}),'settings':Type[x(0x91)](Type['String']({'minLength':0x1}),Type[x(0x92)]()),'logger':Type['Object']({'path':Type['Optional'](Type[x(0x8e)]({'maxLength':0x100,'pattern':'^[A-Za-z0-9_.\x5c-/]*$'}))})};
@@ -1 +1 @@
1
- function S(d,h){d=d-0xd4;const p=v();let Z=p[d];return Z;}export async function checkSystem(d,h){const D=S,[p,Z]=await Promise['allSettled']([h['pg']['query']('SELECT\x201'),h['redis'][D(0xd4)]()]);return{'status':p[D(0xd5)]===D(0xd6)&&Z['status']==='fulfilled'?'ok':'degraded','pg':p['status'],'redis':Z['status']};}function v(){const u=['ping','status','fulfilled'];v=function(){return u;};return v();}
1
+ export async function checkSystem(x,q){const K=A,[C,J]=await Promise['allSettled']([q['pg'][K(0xb5)](K(0xb6)),q['redis']['ping']()]);return{'status':C['status']===K(0xb7)&&J[K(0xb8)]===K(0xb7)?'ok':K(0xb9),'pg':C['status'],'redis':J['status']};}function A(x,q){x=x-0xb5;const C=g();let J=C[x];return J;}function g(){const Z=['query','SELECT\x201','fulfilled','status','degraded'];g=function(){return Z;};return g();}
@@ -1 +1 @@
1
- export async function getAccess(d,h){const p=d['type']==='user'?'\x0a\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20ra.resource,\x20ra.actions,\x20ra.role_id\x20AS\x20role\x0a\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20\x20\x20LEFT\x20JOIN\x20admin.user_roles\x20ur\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20ur.role_id\x20=\x20ra.role_id\x20AND\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20ra.user_uid\x20=\x20$1\x20OR\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20':'\x0a\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20ra.resource,\x20ra.actions,\x20ra.role_id\x20AS\x20role\x0a\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20ra.role_id\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20',Z=await h['pg']['query'](p,[d['id']]);return{'access':Z['rows']};}
1
+ function A(x,q){x=x-0x109;const C=g();let J=C[x];return J;}export async function getAccess(x,q){const K=A,C=x['type']===K(0x109)?'\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',J=await q['pg'][K(0x10a)](C,[x['id']]);return{'access':J['rows']};}function g(){const Z=['user','query'];g=function(){return Z;};return g();}
@@ -1 +1 @@
1
- function S(d,h){d=d-0x1d1;const p=v();let Z=p[d];return Z;}export async function getApiList(d,h){const X=S,p=[...d['apiRoutes']['values']()][X(0x1d1)]((Z,D)=>(Z['endpoint']+'\x20'+Z[X(0x1d2)])['localeCompare'](D[X(0x1d3)]+'\x20'+D['method']));if(d['format']!==X(0x1d4))return p;return p['map'](({method:Z,endpoint:D,access:u,permissions:n})=>Z+'\x20'+D);}function v(){const Y=['sort','method','endpoint','short'];v=function(){return Y;};return v();}
1
+ function A(x,q){x=x-0xa7;const C=g();let J=C[x];return J;}function g(){const k=['sort'];g=function(){return k;};return g();}export async function getApiList(x,q){const b=A,C=[...x['apiRoutes']['values']()][b(0xa7)]((J,K)=>(J['endpoint']+'\x20'+J['method'])['localeCompare'](K['endpoint']+'\x20'+K['method']));if(x['format']!=='short')return C;return C['map'](({method:J,endpoint:K,access:Z,permissions:Y})=>J+'\x20'+K);}
@@ -1 +1 @@
1
- export async function getAuditLog(d,h){const u=S,p=Math['min'](Math['max'](d['limit']??0x32,0x1),0xc8),Z=Math['max']((d['page']??0x1)-0x1,0x0)*p,D=await h['pg'][u(0x122)]('SELECT\x20*\x20FROM\x20admin.audit_log\x20ORDER\x20BY\x20id\x20DESC\x20LIMIT\x20$1\x20OFFSET\x20$2',[p,Z]);return{'rows':D['rows'],'page':d[u(0x123)]??0x1,'limit':p};}function S(d,h){d=d-0x122;const p=v();let Z=p[d];return Z;}function v(){const n=['query','page'];v=function(){return n;};return v();}
1
+ function g(){const Y=['limit'];g=function(){return Y;};return g();}function A(x,q){x=x-0x1ad;const C=g();let J=C[x];return J;}export async function getAuditLog(x,q){const Z=A,C=Math['min'](Math['max'](x[Z(0x1ad)]??0x32,0x1),0xc8),J=Math['max']((x['page']??0x1)-0x1,0x0)*C,K=await q['pg']['query']('SELECT\x20*\x20FROM\x20admin.audit_log\x20ORDER\x20BY\x20id\x20DESC\x20LIMIT\x20$1\x20OFFSET\x20$2',[C,J]);return{'rows':K['rows'],'page':x['page']??0x1,'limit':C};}
@@ -1 +1 @@
1
- function v(){var Z=['dictionary'];v=function(){return Z;};return v();}function S(d,h){d=d-0xec;var p=v();var Z=p[d];return Z;}export async function getDictionary(d,h){var p=S;return h[p(0xec)]['get'](d['name']);}
1
+ function A(x,q){x=x-0x1d3;var C=g();var J=C[x];return J;}export async function getDictionary(x,q){var C=A;return q[C(0x1d3)]['get'](x['name']);}function g(){var J=['dictionary'];g=function(){return J;};return g();}
@@ -1 +1 @@
1
- const K=S;import d from'node:fs/promises';function v(){const U=['resolve','catch','Log\x20path\x20not\x20found','isDirectory','map','name','localeCompare','slice','join','unshift','?path=','<li><a\x20href=\x22','logs/','</h1>\x0a<ul>\x0a','\x0a</ul>\x0a</body>\x0a</html>','replace','&lt;','Invalid\x20log\x20path','stat','min','toString','filter','length'];v=function(){return U;};return v();}import h from'node:path';import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=h[K(0xfb)](process['cwd'](),'logs'),TAIL_LINES=0x64;export async function getSystemLog(p,Z){const g=K,D=normalizePath(p['path']),u=h['resolve'](LOGS_ROOT,D);if(u!==LOGS_ROOT&&!u['startsWith'](LOGS_ROOT+h['sep']))throw new ValidationError('Invalid\x20log\x20path');const n=await d['stat'](u)[g(0xfc)](()=>null);if(!n)throw new NotFoundError(g(0xfd));if(n[g(0xfe)]()){const Y=await d['readdir'](u,{'withFileTypes':!![]}),w=await Promise['all'](Y[g(0xff)](async y=>{const s=g,Q=await d['stat'](h['join'](u,y['name']));return{'name':y[s(0x100)],'path':D?D+'/'+y['name']:y['name'],'type':y['isDirectory']()?'directory':'file','size':y[s(0xfe)]()?undefined:Q['size'],'modified':Q['mtime']['toISOString']()};}));w['sort']((y,Q)=>y[g(0x100)][g(0x101)](Q['name']));if(D){const y=D['split']('/')[g(0x102)](0x0,-0x1)[g(0x103)]('/');w[g(0x104)]({'name':'..','path':y,'type':'directory'});}return{'contentType':'text/html;\x20charset=utf-8','body':renderDirectory(D,w)};}const X=await tailFile(u,TAIL_LINES);return{'contentType':'text/plain;\x20charset=utf-8','body':X[g(0x103)]('\x0a')};}function renderDirectory(p,Z){const M=K,D=Z[M(0xff)](n=>{const O=M,X=O(0x105)+encodeURIComponent(n['path']),Y=n['type']==='directory'?n['name']+'/':n['name'];return O(0x106)+X+'\x22>'+escapeHtml(Y)+'</a></li>';})['join']('\x0a'),u=escapeHtml(M(0x107)+p);return'<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>'+u+'</title></head>\x0a<body>\x0a<h1>'+u+M(0x108)+D+M(0x109);}function escapeHtml(p){const R=K;return p[R(0x10a)](/&/g,'&amp;')['replace'](/</g,R(0x10b))['replace'](/>/g,'&gt;')['replace'](/"/g,'&quot;');}function normalizePath(p){const E=K,Z=(p??'')['replace'](/\\/g,'/')['replace'](/^\/+|\/+$/g,'');if(Z['split']('/')['some'](D=>D==='..'))throw new ValidationError(E(0x10c));return Z;}async function tailFile(p,Z){const J=K,D=await d['open'](p,'r');try{const {size:u}=await D[J(0x10d)](),n=0x40*0x400;let X=u,Y=Buffer['alloc'](0x0),w=0x0;while(X>0x0&&w<=Z){const Q=Math[J(0x10e)](n,X);X-=Q;const F=Buffer['alloc'](Q);await D['read'](F,0x0,Q,X),Y=Buffer['concat']([F,Y]),w+=countNewlines(F);}const y=Y[J(0x10f)]('utf8')['split']('\x0a')[J(0x110)](B=>B[J(0x111)]>0x0);return y['slice'](-Z)['reverse']();}finally{await D['close']();}}function S(d,h){d=d-0xfb;const p=v();let Z=p[d];return Z;}function countNewlines(p){let Z=0x0;for(const D of p){if(D===0xa)Z++;}return Z;}
1
+ const t=A;import x from'node:fs/promises';import q from'node:path';import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=q[t(0x1af)](process['cwd'](),'logs'),TAIL_LINES=0x64;function A(x,q){x=x-0x1af;const C=g();let J=C[x];return J;}export async function getSystemLog(C,J){const p=t,K=normalizePath(C[p(0x1b0)]),Z=q['resolve'](LOGS_ROOT,K);if(Z!==LOGS_ROOT&&!Z[p(0x1b1)](LOGS_ROOT+q['sep']))throw new ValidationError('Invalid\x20log\x20path');const Y=await x['stat'](Z)[p(0x1b2)](()=>null);if(!Y)throw new NotFoundError(p(0x1b3));if(Y['isDirectory']()){const k=await x['readdir'](Z,{'withFileTypes':!![]}),H=await Promise['all'](k['map'](async F=>{const w=p,y=await x['stat'](q['join'](Z,F['name']));return{'name':F[w(0x1b4)],'path':K?K+'/'+F['name']:F['name'],'type':F['isDirectory']()?'directory':'file','size':F['isDirectory']()?undefined:y['size'],'modified':y['mtime']['toISOString']()};}));H['sort']((F,y)=>F['name'][p(0x1b5)](y['name']));if(K){const F=K['split']('/')[p(0x1b6)](0x0,-0x1)['join']('/');H['unshift']({'name':'..','path':F,'type':'directory'});}return{'contentType':'text/html;\x20charset=utf-8','body':renderDirectory(K,H)};}const b=await tailFile(Z,TAIL_LINES);return{'contentType':'text/plain;\x20charset=utf-8','body':b['join']('\x0a')};}function renderDirectory(C,J){const K=J['map'](Y=>{const R=A,b='?path='+encodeURIComponent(Y['path']),k=Y['type']==='directory'?Y['name']+'/':Y[R(0x1b4)];return'<li><a\x20href=\x22'+b+'\x22>'+escapeHtml(k)+R(0x1b7);})['join']('\x0a'),Z=escapeHtml('logs/'+C);return'<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>'+Z+'</title></head>\x0a<body>\x0a<h1>'+Z+'</h1>\x0a<ul>\x0a'+K+'\x0a</ul>\x0a</body>\x0a</html>';}function escapeHtml(C){const s=t;return C['replace'](/&/g,s(0x1b8))[s(0x1b9)](/</g,'&lt;')['replace'](/>/g,'&gt;')['replace'](/"/g,'&quot;');}function normalizePath(C){const G=t,J=(C??'')['replace'](/\\/g,'/')['replace'](/^\/+|\/+$/g,'');if(J[G(0x1ba)]('/')[G(0x1bb)](K=>K==='..'))throw new ValidationError(G(0x1bc));return J;}async function tailFile(C,J){const h=t,K=await x['open'](C,'r');try{const {size:Z}=await K['stat'](),Y=0x40*0x400;let b=Z,k=Buffer['alloc'](0x0),H=0x0;while(b>0x0&&H<=J){const y=Math['min'](Y,b);b-=y;const r=Buffer[h(0x1bd)](y);await K[h(0x1be)](r,0x0,y,b),k=Buffer[h(0x1bf)]([r,k]),H+=countNewlines(r);}const F=k['toString']('utf8')['split']('\x0a')[h(0x1c0)](B=>B[h(0x1c1)]>0x0);return F['slice'](-J)[h(0x1c2)]();}finally{await K['close']();}}function countNewlines(C){let J=0x0;for(const K of C){if(K===0xa)J++;}return J;}function g(){const a=['resolve','path','startsWith','catch','Log\x20path\x20not\x20found','name','localeCompare','slice','</a></li>','&amp;','replace','split','some','Invalid\x20log\x20path','alloc','read','concat','filter','length','reverse'];g=function(){return a;};return g();}
@@ -1 +1 @@
1
- function S(d,h){d=d-0x19a;const p=v();let Z=p[d];return Z;}function v(){const w=['split','value'];v=function(){return w;};return v();}export async function getSystemSettings(d,h){const p=await h['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 p['rows']['reduce']((Z,D)=>{const Y=S,u=String(D['key'])[Y(0x19a)]('.');let n=Z;for(const X of u['slice'](0x0,-0x1)){n[X]??={},n=n[X];}return n[u['at'](-0x1)]=D[Y(0x19b)],Z;},{});}
1
+ function A(x,q){x=x-0x1ce;const C=g();let J=C[x];return J;}function g(){const H=['slice'];g=function(){return H;};return g();}export async function getSystemSettings(x,q){const C=await q['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 C['rows']['reduce']((J,K)=>{const k=A,Z=String(K['key'])['split']('.');let Y=J;for(const b of Z[k(0x1ce)](0x0,-0x1)){Y[b]??={},Y=Y[b];}return Y[Z['at'](-0x1)]=K['value'],J;},{});}
@@ -1 +1 @@
1
- export async function listDictionaries(d,h){return h['dictionary']['list']();}
1
+ function A(x,q){x=x-0x14c;var C=g();var J=C[x];return J;}export async function listDictionaries(x,q){var C=A;return q['dictionary'][C(0x14c)]();}function g(){var J=['list'];g=function(){return J;};return g();}
@@ -1 +1 @@
1
- import{getAccess}from'./get-access.js';function v(){const n=['query','user','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)','ROLLBACK'];v=function(){return n;};return v();}function S(d,h){d=d-0x69;const p=v();let Z=p[d];return Z;}export async function setAccess(d,h){const u=S,p=await h['pg']['connect']();try{await p['query']('BEGIN');d['type']==='user'?await p[u(0x69)]('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL',[d['id']]):await p['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL',[d['id']]);for(const Z of d['access']){d['type']===u(0x6a)?await p['query']('INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20user_uid,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)',[Z['resource'],Z['actions'],d['id'],d['user']['id'],d[u(0x6a)]['id']]):await p[u(0x69)](u(0x6b),[Z['resource'],Z['actions'],d['id'],d[u(0x6a)]['id'],d[u(0x6a)]['id']]);}await p[u(0x69)]('COMMIT');}catch(D){await p['query'](u(0x6c));throw D;}finally{p['release']();}return getAccess(d,h);}
1
+ import{getAccess}from'./get-access.js';function g(){const Y=['type','query','INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20user_uid,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)','user','resource','ROLLBACK','release'];g=function(){return Y;};return g();}function A(x,q){x=x-0xbf;const C=g();let J=C[x];return J;}export async function setAccess(x,q){const Z=A,C=await q['pg']['connect']();try{await C['query']('BEGIN');x[Z(0xbf)]==='user'?await C['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL',[x['id']]):await C['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL',[x['id']]);for(const J of x['access']){x[Z(0xbf)]==='user'?await C[Z(0xc0)](Z(0xc1),[J['resource'],J['actions'],x['id'],x['user']['id'],x[Z(0xc2)]['id']]):await C['query']('INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20role_id,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)',[J[Z(0xc3)],J['actions'],x['id'],x[Z(0xc2)]['id'],x['user']['id']]);}await C[Z(0xc0)]('COMMIT');}catch(K){await C[Z(0xc0)](Z(0xc4));throw K;}finally{C[Z(0xc5)]();}return getAccess(x,q);}
@@ -1 +1 @@
1
- function S(d,h){d=d-0x1de;var p=v();var Z=p[d];return Z;}function v(){var Z=['put'];v=function(){return Z;};return v();}export async function updateDictionary(d,h){var p=S;return await h['dictionary'][p(0x1de)](d['name'],d['items']),{'success':!![]};}
1
+ export async function updateDictionary(x,q){return await q['dictionary']['put'](x['name'],x['items']),{'success':!![]};}
@@ -1 +1 @@
1
- import{ValidationError}from'../../../errors.js';function v(){const u=['keys','length','patch','Invalid\x20setting\x20key:\x20','stringify','user'];v=function(){return u;};return v();}function S(d,h){d=d-0x159;const p=v();let Z=p[d];return Z;}export async function updateSystemSettings(d,h){const D=S;if(!Object[D(0x159)](d['patch'])[D(0x15a)])throw new ValidationError('Settings\x20patch\x20is\x20empty');for(const [p,Z]of Object['entries'](d[D(0x15b)])){if(!p['trim']()||p['includes']('..'))throw new ValidationError(D(0x15c)+p);await h['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.settings\x20(resource,\x20resource_id,\x20key,\x20value,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(\x27system\x27,\x20NULL,\x20$1,\x20$2::jsonb,\x20$3)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT\x20(resource,\x20resource_id,\x20key)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20DO\x20UPDATE\x20SET\x20value\x20=\x20EXCLUDED.value,\x20updated_by\x20=\x20EXCLUDED.updated_by,\x20updated_at\x20=\x20now()\x0a\x20\x20\x20\x20\x20\x20\x20\x20',[p,JSON[D(0x15d)](Z),d[D(0x15e)]['id']]);}return{'success':!![]};}
1
+ import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(x,q){const K=A;if(!Object[K(0xba)](x[K(0xbb)])[K(0xbc)])throw new ValidationError('Settings\x20patch\x20is\x20empty');for(const [C,J]of Object['entries'](x['patch'])){if(!C['trim']()||C['includes']('..'))throw new ValidationError('Invalid\x20setting\x20key:\x20'+C);await q['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',[C,JSON[K(0xbd)](J),x[K(0xbe)]['id']]);}return{'success':!![]};}function A(x,q){x=x-0xba;const C=g();let J=C[x];return J;}function g(){const Z=['keys','patch','length','stringify','user'];g=function(){return Z;};return g();}
@@ -1 +1 @@
1
- import{ForbiddenError}from'../../errors.js';function S(d,h){d=d-0xda;var p=v();var Z=p[d];return Z;}export function requireAdmin(d,h){var p=S;if(!d)throw new ForbiddenError(p(0xda));if(d['type']!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(d['type']!=='admin'&&h&&!d[p(0xdb)]?.['includes'](h))throw new ForbiddenError('Missing\x20permission:\x20'+h);}function v(){var Z=['User\x20required','permissions'];v=function(){return Z;};return v();}
1
+ import{ForbiddenError}from'../../errors.js';export function requireAdmin(x,q){var C=A;if(!x)throw new ForbiddenError(C(0x18c));if(x['type']!=='admin')throw new ForbiddenError(C(0x18d));if(x['type']!=='admin'&&q&&!x['permissions']?.['includes'](q))throw new ForbiddenError('Missing\x20permission:\x20'+q);}function A(x,q){x=x-0x18c;var C=g();var J=C[x];return J;}function g(){var J=['User\x20required','Admin\x20access\x20required'];g=function(){return J;};return g();}
@@ -1 +1 @@
1
- export const safeUser=d=>{const D=S,h=['password','salt','secret','credentials'];return Object['fromEntries'](Object['entries'](d)['filter'](([p])=>!h[D(0x14d)](Z=>p['toLowerCase']()[D(0x14e)](Z))));};function S(d,h){d=d-0x14d;const p=v();let Z=p[d];return Z;}function v(){const u=['some','includes'];v=function(){return u;};return v();}
1
+ function A(x,q){x=x-0x1ac;const C=g();let J=C[x];return J;}export const safeUser=x=>{const K=A,q=[K(0x1ac),'salt','secret','credentials'];return Object[K(0x1ad)](Object['entries'](x)['filter'](([C])=>!q[K(0x1ae)](J=>C['toLowerCase']()['includes'](J))));};function g(){const Z=['password','fromEntries','some'];g=function(){return Z;};return g();}
@@ -1 +1 @@
1
- import{UnsupportedError}from'../../errors.js';export function unsupported(d){throw new UnsupportedError(d+'\x20requires\x20a\x20project/provider\x20implementation');}
1
+ import{UnsupportedError}from'../../errors.js';export function unsupported(x){throw new UnsupportedError(x+'\x20requires\x20a\x20project/provider\x20implementation');}
@@ -1 +1 @@
1
- import{writeAudit}from'./services/write-audit.js';export function createAudit(d){const h=writeAudit(d);return{'write':h};}
1
+ import{writeAudit}from'./services/write-audit.js';export function createAudit(x){const q=writeAudit(x);return{'write':q};}
@@ -1 +1 @@
1
- const secretPattern=/password|token|secret|credential|salt/i;function v(){const B=['fromEntries','[REDACTED]','query','map','table_name','has','audit_log_data','Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled','oldValue','\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','userId','resourceId','rows','changes','\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'];v=function(){return B;};return v();}function clean(d){const w=S;if(Array['isArray'](d))return d['map'](clean);if(d&&typeof d==='object')return Object[w(0x170)](Object['entries'](d)['map'](([h,p])=>[h,secretPattern['test'](h)?w(0x171):clean(p)]));return d;}function S(d,h){d=d-0x170;const p=v();let Z=p[d];return Z;}export function writeAudit(d){let h,p;async function Z(){const y=S;if(!d['pg'])return![];if(h!==undefined)return h;return p??=d['pg'][y(0x172)]('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20table_name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20information_schema.tables\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20table_schema\x20=\x20\x27admin\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20table_name\x20IN\x20(\x27audit_log\x27,\x20\x27audit_log_data\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20')['then'](D=>{const Q=y,u=new Set(D['rows'][Q(0x173)](n=>n[Q(0x174)]));return h=u['has']('audit_log')&&u[Q(0x175)](Q(0x176)),!h&&d['logger']['warn']({'expectedTables':['admin.audit_log','admin.audit_log_data'],'foundTables':[...u]},Q(0x177)),h;})['catch'](D=>{return h=![],d['logger']['warn']({'err':D},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),p;}return async function D(u){const F=S;if(!await Z())return d['logger']['info']({'auditFallback':!![],'event':clean({...u,'changes':u['changes']?.[F(0x173)](Y=>({...Y,'oldValue':clean(Y[F(0x178)]),'newValue':clean(Y['newValue'])}))})},'audit'),0x0;if(!d['pg'])throw new Error('empty\x20pg');const n=await d['pg']['query'](F(0x179),[u[F(0x17a)]??null,u['module'],u['resource'],u[F(0x17b)]==null?null:String(u['resourceId']),u['fields']??null,u['action'],u['requestId']??null,u['ipAddress']??null,clean(u['metadata']??{})]),X=n[F(0x17c)][0x0]['id'];for(const Y of u[F(0x17d)]??[]){if(secretPattern['test'](Y['field']))continue;await d['pg']['query'](F(0x17e),[X,Y['field'],JSON['stringify'](clean(Y[F(0x178)])),JSON['stringify'](clean(Y['newValue']))]);}return X;};}
1
+ function A(x,q){x=x-0xfe;const C=g();let J=C[x];return J;}const secretPattern=/password|token|secret|credential|salt/i;function clean(x){if(Array['isArray'](x))return x['map'](clean);if(x&&typeof x==='object')return Object['fromEntries'](Object['entries'](x)['map'](([q,C])=>[q,secretPattern['test'](q)?'[REDACTED]':clean(C)]));return x;}function g(){const B=['\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','warn','info','newValue','module','resource','action','requestId','ipAddress','rows','query','stringify','oldValue'];g=function(){return B;};return g();}export function writeAudit(x){let q,C;async function J(){const H=A;if(!x['pg'])return![];if(q!==undefined)return q;return C??=x['pg']['query'](H(0xfe))['then'](K=>{const F=H,Z=new Set(K['rows'][F(0xff)](Y=>Y['table_name']));return q=Z['has']('audit_log')&&Z['has']('audit_log_data'),!q&&x['logger']['warn']({'expectedTables':['admin.audit_log','admin.audit_log_data'],'foundTables':[...Z]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),q;})['catch'](K=>{const y=H;return q=![],x['logger'][y(0x100)]({'err':K},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),C;}return async function K(Z){const r=A;if(!await J())return x['logger'][r(0x101)]({'auditFallback':!![],'event':clean({...Z,'changes':Z['changes']?.['map'](k=>({...k,'oldValue':clean(k['oldValue']),'newValue':clean(k[r(0x102)])}))})},'audit'),0x0;if(!x['pg'])throw new Error('empty\x20pg');const Y=await x['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',[Z['userId']??null,Z[r(0x103)],Z[r(0x104)],Z['resourceId']==null?null:String(Z['resourceId']),Z['fields']??null,Z[r(0x105)],Z[r(0x106)]??null,Z[r(0x107)]??null,clean(Z['metadata']??{})]),b=Y[r(0x108)][0x0]['id'];for(const k of Z['changes']??[]){if(secretPattern['test'](k['field']))continue;await x['pg'][r(0x109)]('\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',[b,k['field'],JSON[r(0x10a)](clean(k[r(0x10b)])),JSON['stringify'](clean(k[r(0x102)]))]);}return b;};}
@@ -1 +1 @@
1
- function v(){const u=['query'];v=function(){return u;};return v();}function S(d,h){d=d-0x170;const p=v();let Z=p[d];return Z;}export async function getUserPermissions(d,h){const D=S,p=await h['pg'][D(0x170)]('\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',[d]);return p['rows']['map'](Z=>Z['permission']);}
1
+ function A(x,q){x=x-0xab;const C=g();let J=C[x];return J;}export async function getUserPermissions(x,q){const K=A,C=await q['pg'][K(0xab)]('\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',[x]);return C['rows'][K(0xac)](J=>J['permission']);}function g(){const Z=['query','map'];g=function(){return Z;};return g();}
@@ -1 +1 @@
1
- export*from'./auth.types.js';import{randomBytes,scrypt as d,timingSafeEqual}from'node:crypto';import{promisify}from'node:util';const scrypt=promisify(d);import h from'@fastify/cookie';import p from'@fastify/session';function S(d,h){d=d-0x97;const p=v();let Z=p[d];return Z;}import{Authenticator}from'@fastify/passport';import Z 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';function v(){const g=['hex','split','scrypt','from','length','warn','cookieOptions','register','cookieName','auth','database'];v=function(){return g;};return v();}export async function hashPassword(D){const F=S,u=randomBytes(0x10),n=await scrypt(D,u,0x40);return'scrypt$'+u['toString'](F(0x97))+'$'+n['toString']('hex');}export async function verifyPassword(D,u){const B=S,[n,X,Y]=u?.[B(0x98)]('$')||[];if(n!==B(0x99)||!X||!Y)return![];const w=Buffer['from'](X,'hex'),y=Buffer[B(0x9a)](Y,B(0x97)),Q=await scrypt(D,w,y[B(0x9b)]);return timingSafeEqual(Q,y);}export async function createSessionStore(D,u){const K=S,{config:n,redis:X}=u;if(!n||!X){console[K(0x9c)]('Missing\x20config\x20or\x20redis\x20-\x20skipping\x20session\x20store\x20creation');return;}if(process.env.NODE_ENV==='test'||process.env.VITEST)return;await D['register'](h,{'parseOptions':n['auth'][K(0x9d)]}),await D[K(0x9e)](p,{'secret':n['auth']['secret'],'cookieName':n['auth'][K(0x9f)],'cookie':n['auth']['cookieOptions'],'store':new Z({'prefix':n[K(0xa0)]['cookieName']+':'+(n['pg']?.[K(0xa1)]||'db')+':','client':X})}),await D[K(0x9e)](fastifyPassport['initialize']()),await D['register'](fastifyPassport['secureSession']()),fastifyPassport['registerUserSerializer'](async Y=>({'user':Y})),fastifyPassport['registerUserDeserializer'](async Y=>{const w=Y?.['user']||Y;return w?.['id']&&(w['permissions']=await getUserPermissions(w['id'],u)),w;});}
1
+ function g(){const w=['scrypt$','split','hex','warn','Missing\x20config\x20or\x20redis\x20-\x20skipping\x20session\x20store\x20creation','test','register','auth','cookieOptions','initialize','registerUserDeserializer','permissions'];g=function(){return w;};return g();}export*from'./auth.types.js';import{randomBytes,scrypt as x,timingSafeEqual}from'node:crypto';import{promisify}from'node:util';const scrypt=promisify(x);function A(x,q){x=x-0x7a;const C=g();let J=C[x];return J;}import q from'@fastify/cookie';import C from'@fastify/session';import{Authenticator}from'@fastify/passport';import J 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(K){const r=A,Z=randomBytes(0x10),Y=await scrypt(K,Z,0x40);return r(0x7a)+Z['toString']('hex')+'$'+Y['toString']('hex');}export async function verifyPassword(K,Z){const B=A,[Y,b,k]=Z?.[B(0x7b)]('$')||[];if(Y!=='scrypt'||!b||!k)return![];const H=Buffer['from'](b,'hex'),F=Buffer['from'](k,B(0x7c)),y=await scrypt(K,H,F['length']);return timingSafeEqual(y,F);}export async function createSessionStore(K,Z){const t=A,{config:Y,redis:b}=Z;if(!Y||!b){console[t(0x7d)](t(0x7e));return;}if(process.env.NODE_ENV===t(0x7f)||process.env.VITEST)return;await K['register'](q,{'parseOptions':Y['auth']['cookieOptions']}),await K[t(0x80)](C,{'secret':Y[t(0x81)]['secret'],'cookieName':Y[t(0x81)]['cookieName'],'cookie':Y[t(0x81)][t(0x82)],'store':new J({'prefix':Y[t(0x81)]['cookieName']+':'+(Y['pg']?.['database']||'db')+':','client':b})}),await K['register'](fastifyPassport[t(0x83)]()),await K[t(0x80)](fastifyPassport['secureSession']()),fastifyPassport['registerUserSerializer'](async k=>({'user':k})),fastifyPassport[t(0x84)](async k=>{const p=t,H=k?.['user']||k;return H?.['id']&&(H[p(0x85)]=await getUserPermissions(H['id'],Z)),H;});}
@@ -1 +1 @@
1
- function v(){const Q=['not\x20enough\x20params:\x20user','user.login','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','query','rows','auth/warn','password_hash','Wrong\x20password'];v=function(){return Q;};return v();}import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';function S(d,h){d=d-0x11f;const p=v();let Z=p[d];return Z;}export async function verifyUser({user:d,password:h,ip:p},{pg:Z,logger:D}){const y=S;if(!d||d==='')throw new BadRequestError(y(0x11f));if(!h||h==='')throw new BadRequestError('not\x20enough\x20params:\x20password');D['metrics'](y(0x120));const u=y(0x121),n=await Z[y(0x122)](u,[d])['then'](Y=>Y[y(0x123)]?.[0x0]);if(!n){const Y='user\x20not\x20found';D['info']({'file':y(0x124),'error':Y,'user':d,'ip':p});throw new BadRequestError(Y);}const X=await verifyPassword(h,n[y(0x125)]);if(!X){const w=y(0x126);D['info']({'file':'auth/warn','error':w,'user':d,'ip':p});throw new BadRequestError(w);}return delete n['password_hash'],n;}
1
+ import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';function g(){const y=['user\x20not\x20found','info','Wrong\x20password'];g=function(){return y;};return g();}function A(x,q){x=x-0x14b;const C=g();let J=C[x];return J;}export async function verifyUser({user:x,password:q,ip:C},{pg:J,logger:K}){const F=A;if(!x||x==='')throw new BadRequestError('not\x20enough\x20params:\x20user');if(!q||q==='')throw new BadRequestError('not\x20enough\x20params:\x20password');K['metrics']('user.login');const Z='select\x20uid\x20as\x20id,\x20user_type\x20as\x20type,\x20password_hash,\x20twofa\x20from\x20admin.users\x20where\x20$1\x20in\x20(login,email,phone)\x20and\x20enabled\x20limit\x201',Y=await J['query'](Z,[x])['then'](k=>k['rows']?.[0x0]);if(!Y){const k=F(0x14b);K[F(0x14c)]({'file':'auth/warn','error':k,'user':x,'ip':C});throw new BadRequestError(k);}const b=await verifyPassword(q,Y['password_hash']);if(!b){const H=F(0x14d);K['info']({'file':'auth/warn','error':H,'user':x,'ip':C});throw new BadRequestError(H);}return delete Y['password_hash'],Y;}
@@ -1 +1 @@
1
- import{ConflictError,NotFoundError,ValidationError}from'../errors.js';function S(d,h){d=d-0x8f;const p=v();let Z=p[d];return Z;}const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;export function createDictionary({pg:d,dictionaries:dictionaries=[]}){const h=new Map(),p=new Map();let Z,D;async function u(){const U=S;if(Z!==undefined)return Z;if(!d)throw new Error('empty\x20pg');return D??=d['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')[U(0x8f)](K=>{const I=U,g=K[I(0x90)][0x0]?.[I(0x91)];Z=g==='dictionaries'?g:null;}),await D,Z;}function n(K){if(!dictionaryName['test'](K))throw new ValidationError('Invalid\x20dictionary\x20name:\x20'+K);}function X(K){const k=S;for(const g of Array[k(0x92)](K)?K:[K]){n(g[k(0x93)]);if(!Array[k(0x92)](g[k(0x94)]))throw new ValidationError('Invalid\x20dictionary\x20items:\x20'+g[k(0x93)]);if(h['has'](g[k(0x93)]))throw new ConflictError(k(0x95)+g[k(0x93)]);h[k(0x96)](g['code'],{...g,'source':'static'});}}function Y(K){const c=S;return h[c(0x97)](K);}async function w(K){const q=S;n(K);const g=h[q(0x98)](K);if(g&&g['checked'])return g['items'];const s=await u();if(!s)throw new NotFoundError('Dictionary\x20table\x20not\x20found');const M=await d?.['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',[K]);if(M?.['rows']?.['length']){const O=M?.['rows'];return h['set'](K,{'code':K,'name':K,'items':O,'source':q(0x99),'checked':!![]}),O;}if(!g?.[q(0x94)])throw new NotFoundError(q(0x9a)+K);return g[q(0x9b)]=!![],g['items'];}async function y(K,g){const j=S;n(K);if(!Array['isArray'](g))throw new ValidationError('Dictionary\x20items\x20must\x20be\x20an\x20array');const s=await u();if(!s)throw new NotFoundError(j(0x9c));if(!d)throw new Error('empty\x20pg');const M=await d[j(0x9d)]();try{await M['query']('BEGIN');const O=await M[j(0x9e)]('\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',[K,K,'fcore','custom',!![]]),R=O['rows'][0x0]['id'];await M['query'](j(0x9f),[R]);for(const E of g){await M[j(0x9e)]('\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',[R,E['code'],E[j(0xa0)],E['parentId']??null]);}await M['query']('COMMIT');}catch(J){await M['query'](j(0xa1));throw J;}finally{M['release']();}h['set'](K,{'items':g,'code':K,'source':'static','checked':!![]}),p[j(0x96)](K,(p['get'](K)??0x0)+0x1);}function Q(K){return n(K),p['set'](K,(p['get'](K)??0x0)+0x1),h['delete'](K);}function F(K){return p['get'](K)??0x0;}async function B(){const P=S,K=[...h['values']()][P(0xa2)](({code:M,name:O,source:R})=>({'code':M,'name':O??M,'source':R})),g=await u();if(!g)return K;if(!d)throw new Error(P(0xa3));const s=await d[P(0x9e)](P(0xa4));for(const M of s[P(0x90)]){!h['has'](M['code'])&&K['push'](M);}return K;}return X(dictionaries),{'register':X,'get':w,'put':y,'clear':Q,'revision':F,'list':B,'has':Y};}function v(){const L=['then','rows','table_name','isArray','code','items','Dictionary\x20already\x20registered:\x20','set','has','get','database','Dictionary\x20not\x20found:\x20','checked','Dictionary\x20table\x20not\x20found','connect','query','DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1','name','ROLLBACK','map','empty\x20pg','\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'];v=function(){return L;};return v();}
1
+ function g(){const V=['test','code','items','Dictionary\x20already\x20registered:\x20','set','get','checked','Dictionary\x20table\x20not\x20found','database','query','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.dictionaries\x20(code,\x20name,\x20module,\x20source,\x20editable)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT\x20(code)\x20DO\x20UPDATE\x20SET\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20name\x20=\x20EXCLUDED.name,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module\x20=\x20EXCLUDED.module,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20source\x20=\x20EXCLUDED.source,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20editable\x20=\x20EXCLUDED.editable,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated_at\x20=\x20now()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20','fcore','DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1','\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','ROLLBACK','empty\x20pg'];g=function(){return V;};return g();}import{ConflictError,NotFoundError,ValidationError}from'../errors.js';const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;function A(x,q){x=x-0x1bf;const C=g();let J=C[x];return J;}export function createDictionary({pg:x,dictionaries:dictionaries=[]}){const q=new Map(),C=new Map();let J,K;async function Z(){if(J!==undefined)return J;if(!x)throw new Error('empty\x20pg');return K??=x['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 p=t['rows'][0x0]?.['table_name'];J=p==='dictionaries'?p:null;}),await K,J;}function Y(t){const m=A;if(!dictionaryName[m(0x1bf)](t))throw new ValidationError('Invalid\x20dictionary\x20name:\x20'+t);}function b(t){const e=A;for(const p of Array['isArray'](t)?t:[t]){Y(p[e(0x1c0)]);if(!Array['isArray'](p[e(0x1c1)]))throw new ValidationError('Invalid\x20dictionary\x20items:\x20'+p['code']);if(q['has'](p['code']))throw new ConflictError(e(0x1c2)+p['code']);q[e(0x1c3)](p[e(0x1c0)],{...p,'source':'static'});}}function k(t){return q['has'](t);}async function H(t){const f=A;Y(t);const p=q[f(0x1c4)](t);if(p&&p[f(0x1c5)])return p[f(0x1c1)];const w=await Z();if(!w)throw new NotFoundError(f(0x1c6));const R=await x?.['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',[t]);if(R?.['rows']?.['length']){const s=R?.['rows'];return q['set'](t,{'code':t,'name':t,'items':s,'source':f(0x1c7),'checked':!![]}),s;}if(!p?.['items'])throw new NotFoundError('Dictionary\x20not\x20found:\x20'+t);return p[f(0x1c5)]=!![],p['items'];}async function F(t,p){const D=A;Y(t);if(!Array['isArray'](p))throw new ValidationError('Dictionary\x20items\x20must\x20be\x20an\x20array');const w=await Z();if(!w)throw new NotFoundError('Dictionary\x20table\x20not\x20found');if(!x)throw new Error('empty\x20pg');const R=await x['connect']();try{await R[D(0x1c8)]('BEGIN');const s=await R['query'](D(0x1c9),[t,t,D(0x1ca),'custom',!![]]),G=s['rows'][0x0]['id'];await R['query'](D(0x1cb),[G]);for(const h of p){await R[D(0x1c8)](D(0x1cc),[G,h['code'],h['name'],h['parentId']??null]);}await R[D(0x1c8)]('COMMIT');}catch(a){await R['query'](D(0x1cd));throw a;}finally{R['release']();}q[D(0x1c3)](t,{'items':p,'code':t,'source':'static','checked':!![]}),C[D(0x1c3)](t,(C['get'](t)??0x0)+0x1);}function y(t){return Y(t),C['set'](t,(C['get'](t)??0x0)+0x1),q['delete'](t);}function r(t){return C['get'](t)??0x0;}async function B(){const P=A,t=[...q['values']()]['map'](({code:R,name:s,source:G})=>({'code':R,'name':s??R,'source':G})),p=await Z();if(!p)return t;if(!x)throw new Error(P(0x1ce));const w=await x['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20code,\x20name,\x20\x27database\x27\x20AS\x20source\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.dictionaries\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20name\x0a\x20\x20\x20\x20\x20\x20\x20\x20');for(const R of w['rows']){!q['has'](R['code'])&&t['push'](R);}return t;}return b(dictionaries),{'register':b,'get':H,'put':F,'clear':y,'revision':r,'list':B,'has':k};}
@@ -1 +1 @@
1
- import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';import d from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function keyFor(h,p){const Q=S;if(!p||p['startsWith']('/')||p['includes']('..'))throw new ValidationError(Q(0xcd));const Z=p['replace'](/\\/g,'/')[Q(0xce)](/^\/+/,''),D=(h??'')[Q(0xce)](/^\/+|\/+$/g,'');return D?D+'/'+Z:Z;}function S(d,h){d=d-0xcd;const p=v();let Z=p[d];return Z;}async function bodyToBuffer(h){if(!h)return Buffer['alloc'](0x0);const p=h;if(typeof p['transformToByteArray']==='function')return Buffer['from'](await p['transformToByteArray']());const Z=[];for await(const D of h){Z['push'](Buffer['from'](D));}return Buffer['concat'](Z);}function v(){const R=['Invalid\x20file\x20path','replace','toString','region','us-east-1','forcePathStyle','accessKey','bucket','send','$metadata','from','update','timingSafeEqual','base64url'];v=function(){return R;};return v();}export function createFileS3(h){const F=S,p=h['tokenSecret']??process.env.FILE_TOKEN_SECRET??d['randomBytes'](0x20)[F(0xcf)]('hex'),Z=new S3Client({'endpoint':h['endpoint'],'region':h[F(0xd0)]??F(0xd1),'forcePathStyle':h[F(0xd2)]??!![],'credentials':h['accessKeyId']||h[F(0xd3)]?{'accessKeyId':h['accessKeyId']??h['accessKey'],'secretAccessKey':h['secretAccessKey']??h['secretKey']}:undefined}),D=u=>keyFor(h['folder'],u);return{async 'put'(u,n){const B=F;await Z['send'](new PutObjectCommand({'Bucket':h[B(0xd4)],'Key':D(u),'Body':n}));},async 'get'(u){const K=F,n=await Z[K(0xd5)](new GetObjectCommand({'Bucket':h['bucket'],'Key':D(u)}));return bodyToBuffer(n['Body']);},async 'exists'(u){const g=F;try{return await Z['send'](new HeadObjectCommand({'Bucket':h[g(0xd4)],'Key':D(u)})),!![];}catch(n){const X=n;if(X[g(0xd6)]?.['httpStatusCode']===0x194||X['name']==='NotFound')return![];throw n;}},async 'delete'(u){const s=F;await Z[s(0xd5)](new DeleteObjectCommand({'Bucket':h['bucket'],'Key':D(u)}));},'create'(u,n=h['tokenTtl']??0xe10){const M=F,X=Buffer[M(0xd7)](u)['toString']('base64url'),Y=d['createHmac']('sha256',p)[M(0xd8)](X)['digest']('base64url');return X+'.'+Y;},'verify'(u){const O=F,[n,X]=u['split']('.');if(!n||!X)throw new UnauthorizedError('Invalid\x20file\x20token');const Y=d['createHmac']('sha256',p)['update'](n)['digest'](),w=Buffer['from'](X,'base64url');if(Y['length']!==w['length']||!d[O(0xd9)](Y,w))throw new UnauthorizedError('Invalid\x20file\x20token');const y=Buffer['from'](n,O(0xda))['toString']('utf8');return y;}};}
1
+ import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';import x from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function A(x,q){x=x-0x1e3;const C=g();let J=C[x];return J;}function g(){const h=['replace','alloc','transformToByteArray','tokenSecret','region','us-east-1','secretAccessKey','bucket','send','$metadata','httpStatusCode','sha256','update','Invalid\x20file\x20token','from','timingSafeEqual'];g=function(){return h;};return g();}function keyFor(q,C){const y=A;if(!C||C['startsWith']('/')||C['includes']('..'))throw new ValidationError('Invalid\x20file\x20path');const J=C['replace'](/\\/g,'/')[y(0x1e3)](/^\/+/,''),K=(q??'')['replace'](/^\/+|\/+$/g,'');return K?K+'/'+J:J;}async function bodyToBuffer(q){const r=A;if(!q)return Buffer[r(0x1e4)](0x0);const C=q;if(typeof C[r(0x1e5)]==='function')return Buffer['from'](await C[r(0x1e5)]());const J=[];for await(const K of q){J['push'](Buffer['from'](K));}return Buffer['concat'](J);}export function createFileS3(q){const B=A,C=q[B(0x1e6)]??process.env.FILE_TOKEN_SECRET??x['randomBytes'](0x20)['toString']('hex'),J=new S3Client({'endpoint':q['endpoint'],'region':q[B(0x1e7)]??B(0x1e8),'forcePathStyle':q['forcePathStyle']??!![],'credentials':q['accessKeyId']||q['accessKey']?{'accessKeyId':q['accessKeyId']??q['accessKey'],'secretAccessKey':q[B(0x1e9)]??q['secretKey']}:undefined}),K=Z=>keyFor(q['folder'],Z);return{async 'put'(Z,Y){const t=B;await J['send'](new PutObjectCommand({'Bucket':q[t(0x1ea)],'Key':K(Z),'Body':Y}));},async 'get'(Z){const p=B,Y=await J['send'](new GetObjectCommand({'Bucket':q[p(0x1ea)],'Key':K(Z)}));return bodyToBuffer(Y['Body']);},async 'exists'(Z){const w=B;try{return await J[w(0x1eb)](new HeadObjectCommand({'Bucket':q[w(0x1ea)],'Key':K(Z)})),!![];}catch(Y){const b=Y;if(b[w(0x1ec)]?.[w(0x1ed)]===0x194||b['name']==='NotFound')return![];throw Y;}},async 'delete'(Z){const R=B;await J['send'](new DeleteObjectCommand({'Bucket':q[R(0x1ea)],'Key':K(Z)}));},'create'(Z,Y=q['tokenTtl']??0xe10){const s=B,b=Buffer['from'](Z)['toString']('base64url'),k=x['createHmac'](s(0x1ee),C)[s(0x1ef)](b)['digest']('base64url');return b+'.'+k;},'verify'(Z){const G=B,[Y,b]=Z['split']('.');if(!Y||!b)throw new UnauthorizedError(G(0x1f0));const k=x['createHmac']('sha256',C)['update'](Y)['digest'](),H=Buffer[G(0x1f1)](b,'base64url');if(k['length']!==H['length']||!x[G(0x1f2)](k,H))throw new UnauthorizedError('Invalid\x20file\x20token');const F=Buffer[G(0x1f1)](Y,'base64url')['toString']('utf8');return F;}};}
@@ -1 +1 @@
1
- function S(d,h){d=d-0x1e7;const p=v();let Z=p[d];return Z;}import{SignJWT,jwtVerify}from'jose';function v(){const Y=['setProtectedHeader','catch','message'];v=function(){return Y;};return v();}const secret=new TextEncoder()['encode'](process.env.AUTH_JWT_SECRET);export async function jwtSignToken(d){const u=S;if(!process.env.AUTH_JWT_SECRET)return;const {id:h,type:p,permissions:Z}=d,D=await new SignJWT({'id':h,'type':p,'permissions':Z})[u(0x1e7)]({'alg':'HS256'})['setIssuedAt']()['setExpirationTime']('1h')['sign'](secret);return D;}export async function jwtVerifyToken(d){const n=S,h=await jwtVerify(d,secret,{'algorithms':['HS256']})[n(0x1e8)](p=>{const X=n;console['log'](p[X(0x1e9)]);});return h?.['payload'];}
1
+ function A(x,q){x=x-0x168;const C=g();let J=C[x];return J;}import{SignJWT,jwtVerify}from'jose';const secret=new TextEncoder()['encode'](process.env.AUTH_JWT_SECRET);export async function jwtSignToken(x){const Z=A;if(!process.env.AUTH_JWT_SECRET)return;const {id:q,type:C,permissions:J}=x,K=await new SignJWT({'id':q,'type':C,'permissions':J})[Z(0x168)]({'alg':Z(0x169)})['setIssuedAt']()['setExpirationTime']('1h')[Z(0x16a)](secret);return K;}export async function jwtVerifyToken(x){const b=A,q=await jwtVerify(x,secret,{'algorithms':['HS256']})['catch'](C=>{const Y=A;console['log'](C[Y(0x16b)]);});return q?.[b(0x16c)];}function g(){const k=['setProtectedHeader','HS256','sign','message','payload'];g=function(){return k;};return g();}
@@ -1 +1 @@
1
- function S(d,h){d=d-0x9f;const p=v();let Z=p[d];return Z;}function v(){const Y=['app','accessToken','[REDACTED]','end'];v=function(){return Y;};return v();}import d from'pino';export function createLogger(){const X=S,h=d['transport']({'target':'./transport.js'}),p=d({'level':'info','timestamp':d['stdTimeFunctions']['isoTime'],'base':{'service':X(0x9f)},'redact':{'paths':['req.headers.authorization','password','token',X(0xa0),'refreshToken'],'censor':X(0xa1)}},h),Z={};function D(u,n){if(u===undefined)return{...Z};Z[u]=(Z[u]??0x0)+(n??0x1);}return Object['assign'](p,{'close':async()=>h[X(0xa2)](),'metrics':D,'file':()=>p['info']['bind'](p)});}
1
+ import x from'pino';function A(x,q){x=x-0xef;const C=g();let J=C[x];return J;}function g(){const k=['app','password','token','refreshToken','end','info','bind'];g=function(){return k;};return g();}export function createLogger(){const b=A,q=x['transport']({'target':'./transport.js'}),C=x({'level':'info','timestamp':x['stdTimeFunctions']['isoTime'],'base':{'service':b(0xef)},'redact':{'paths':['req.headers.authorization',b(0xf0),b(0xf1),'accessToken',b(0xf2)],'censor':'[REDACTED]'}},q),J={};function K(Z,Y){if(Z===undefined)return{...J};J[Z]=(J[Z]??0x0)+(Y??0x1);}return Object['assign'](C,{'close':async()=>q[b(0xf3)](),'metrics':K,'file':()=>C[b(0xf4)][b(0xf5)](C)});}
@@ -1 +1 @@
1
- function S(d,h){d=d-0xcc;const p=v();let Z=p[d];return Z;}const X=S;import d from'node:fs';import h from'node:path';import p from'pino-abstract-transport';const LEVELS={0x1e:X(0xcc),0x28:X(0xcd),0x32:'error',0x3c:'error'},streams=new Map();function getDate(){const Y=X;return new Date()[Y(0xce)]()['slice'](0x0,0xa);}function createStream(Z,D){const w=X,u=h['resolve']('logs',Z);return d['mkdirSync'](u,{'recursive':!![]}),d['createWriteStream'](h[w(0xcf)](u,D+'.log'),{'flags':'a'});}function getStream(Z){const y=X,D=getDate(),u=streams['get'](Z);if(u&&u[y(0xd0)]===D)return u['stream'];u?.['stream']['end']();const n=createStream(Z,D);return streams['set'](Z,{'date':D,'stream':n}),n;}function v(){const B=['info','warn','toISOString','join','date','clear','level','file','stringify'];v=function(){return B;};return v();}function closeStreams(){const Q=X;for(const {stream:Z}of streams['values']()){Z['end']();}streams[Q(0xd1)]();}export default async function loggerTransport(){return p(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(Z){const F=X;for await(const D of Z){const u=LEVELS[D[F(0xd2)]];if(!u)continue;const n=getStream(D[F(0xd3)]||u);delete D['file'],n['write'](JSON[F(0xd4)](D)+'\x0a');}}
1
+ const b=A;import x from'node:fs';import q from'node:path';function A(x,q){x=x-0xce;const C=g();let J=C[x];return J;}import C from'pino-abstract-transport';function g(){const y=['warn','error','resolve','logs','mkdirSync','get','date','stream','write','stringify'];g=function(){return y;};return g();}const LEVELS={0x1e:'info',0x28:b(0xce),0x32:b(0xcf),0x3c:'error'},streams=new Map();function getDate(){return new Date()['toISOString']()['slice'](0x0,0xa);}function createStream(J,K){const k=b,Z=q[k(0xd0)](k(0xd1),J);return x[k(0xd2)](Z,{'recursive':!![]}),x['createWriteStream'](q['join'](Z,K+'.log'),{'flags':'a'});}function getStream(J){const H=b,K=getDate(),Z=streams[H(0xd3)](J);if(Z&&Z[H(0xd4)]===K)return Z[H(0xd5)];Z?.['stream']['end']();const Y=createStream(J,K);return streams['set'](J,{'date':K,'stream':Y}),Y;}function closeStreams(){for(const {stream:J}of streams['values']()){J['end']();}streams['clear']();}export default async function loggerTransport(){return C(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(J){const F=b;for await(const K of J){const Z=LEVELS[K['level']];if(!Z)continue;const Y=getStream(K['file']||Z);delete K['file'],Y[F(0xd6)](JSON[F(0xd7)](K)+'\x0a');}}
@@ -1 +1 @@
1
- import d from'pg';function v(){const B=['query','connect','BEGIN','COMMIT'];v=function(){return B;};return v();}const {Pool}=d;function S(d,h){d=d-0x180;const p=v();let Z=p[d];return Z;}export function createDatabase(h){const Q=S,p=new Pool(h),Z=p[Q(0x180)]['bind'](p);function D(u,n){const X=new Error();return Error['captureStackTrace']?.(X,D),Z(u,n)['catch'](Y=>{const w=Y;w['sql']=u,w['callerStack']=X['stack'];throw w;});}return p['query']=D,p['transaction']=async function(u){const F=Q,n=new Error();Error['captureStackTrace']?.(n,p['transaction']);const X=await p[F(0x181)]();try{await X[F(0x180)](F(0x182));const Y=await u(X);return await X[F(0x180)](F(0x183)),Y;}catch(w){await X[F(0x180)]('ROLLBACK');const y=w;y['callerStack']=n['stack'];throw y;}finally{X['release']();}},p;}
1
+ import x from'pg';const {Pool}=x;export function createDatabase(q){const y=A,C=new Pool(q),J=C[y(0x117)]['bind'](C);function K(Z,Y){const b=new Error();return Error['captureStackTrace']?.(b,K),J(Z,Y)['catch'](k=>{const H=k;H['sql']=Z,H['callerStack']=b['stack'];throw H;});}return C[y(0x117)]=K,C[y(0x118)]=async function(Z){const r=y,Y=new Error();Error['captureStackTrace']?.(Y,C['transaction']);const b=await C['connect']();try{await b['query']('BEGIN');const k=await Z(b);return await b['query']('COMMIT'),k;}catch(H){await b[r(0x117)]('ROLLBACK');const F=H;F['callerStack']=Y[r(0x119)];throw F;}finally{b['release']();}},C;}function A(x,q){x=x-0x117;const C=g();let J=C[x];return J;}function g(){const B=['query','transaction','stack'];g=function(){return B;};return g();}
@@ -1 +1 @@
1
- function v(){const X=['del','quit','hincrby','incrby'];v=function(){return X;};return v();}import{Redis}from'ioredis';function S(d,h){d=d-0x1ac;const p=v();let Z=p[d];return Z;}export function createRedis(d){const n=S,h=new Redis(d);return{'get':p=>h['get'](p),'set':(p,Z,D,u)=>{if(u)return h['set'](p,Z,'EX',u);if(typeof D==='number')return h['set'](p,Z,'EX',D);return h['set'](p,Z);},'del':p=>h[n(0x1ac)](p),'delete':p=>h['del'](p),'close':()=>h[n(0x1ad)](),'ping':()=>h['ping'](),'hincrby':(p,Z,D)=>h[n(0x1ae)](p,Z,D),'incrby':(p,Z)=>h[n(0x1af)](p,Z)};}
1
+ function A(x,q){x=x-0x13f;const C=g();let J=C[x];return J;}import{Redis}from'ioredis';export function createRedis(x){const b=A,q=new Redis(x);return{'get':C=>q['get'](C),'set':(C,J,K,Z)=>{const Y=A;if(Z)return q[Y(0x13f)](C,J,'EX',Z);if(typeof K===Y(0x140))return q[Y(0x13f)](C,J,'EX',K);return q['set'](C,J);},'del':C=>q['del'](C),'delete':C=>q[b(0x141)](C),'close':()=>q['quit'](),'ping':()=>q['ping'](),'hincrby':(C,J,K)=>q['hincrby'](C,J,K),'incrby':(C,J)=>q['incrby'](C,J)};}function g(){const k=['set','number','del'];g=function(){return k;};return g();}
@@ -1 +1 @@
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';function v(){const F=['has'];v=function(){return F;};return v();}import{createUpdate}from'./services/update.js';import{createRemove}from'./services/delete.js';import{createFindRelation}from'./services/find-relation.js';function S(d,h){d=d-0x14a;const p=v();let Z=p[d];return Z;}import{createCreateRelation}from'./services/create-relation.js';import{createDeleteRelation}from'./services/delete-relation.js';import{createUpdateRelation}from'./services/update-relation.js';export function createResource(d){const Q=S,h=new ResourceRegistry(),p=createFind(d,h),Z=createFindOne(d,h),D=createCreate(d,h),u=createUpdate(d,h),n=createRemove(d,h),X=createFindRelation(d,h),Y=createCreateRelation(d,h),w=createUpdateRelation(d,h),y=createDeleteRelation(d,h);return{'register':h['register']['bind'](h),'has':h[Q(0x14a)]['bind'](h),'get':h['get']['bind'](h),'list':h['list']['bind'](h),'find':p,'findOne':Z,'create':D,'update':u,'delete':n,'findRelation':X,'createRelation':Y,'updateRelation':w,'deleteRelation':y};}
1
+ import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';import{createFindOne}from'./services/find-one.js';function g(){const r=['register','get'];g=function(){return r;};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';function A(x,q){x=x-0xd8;const C=g();let J=C[x];return J;}import{createUpdateRelation}from'./services/update-relation.js';export function createResource(x){const y=A,q=new ResourceRegistry(),C=createFind(x,q),J=createFindOne(x,q),K=createCreate(x,q),Z=createUpdate(x,q),Y=createRemove(x,q),b=createFindRelation(x,q),k=createCreateRelation(x,q),H=createUpdateRelation(x,q),F=createDeleteRelation(x,q);return{'register':q[y(0xd8)]['bind'](q),'has':q['has']['bind'](q),'get':q[y(0xd9)]['bind'](q),'list':q['list']['bind'](q),'find':C,'findOne':J,'create':K,'update':Z,'delete':Y,'findRelation':b,'createRelation':k,'updateRelation':H,'deleteRelation':F};}
@@ -1 +1 @@
1
- function v(){const Y=['split','has','get','Resource\x20not\x20registered:\x20','validate','version','key','column'];v=function(){return Y;};return v();}const n=S;import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function validQualified(d){const Z=S;return d['split']('.')['length']<=0x2&&d[Z(0x94)]('.')['every'](h=>ident['test'](h));}function S(d,h){d=d-0x94;const p=v();let Z=p[d];return Z;}export class ResourceRegistry{['resources']=new Map();['register'](d){const D=S;for(const h of Array['isArray'](d)?d:[d]){this['validate'](h);if(this['resources'][D(0x95)](h['name']))throw new ConflictError('Resource\x20already\x20registered:\x20'+h['name']);this['resources']['set'](h['name'],h);}}['has'](d){return this['resources']['has'](d);}['get'](d){const u=S,h=this['resources'][u(0x96)](d);if(!h)throw new NotFoundError(u(0x97)+d);return h;}['list'](){return[...this['resources']['values']()];}[n(0x98)](d){const X=n;if(d[X(0x99)]!==0x1||!ident['test'](d['name'])||!validQualified(d['table'])||!ident['test'](d[X(0x9a)]))throw new ValidationError('Invalid\x20resource\x20contract:\x20'+d['name']);for(const [h,p]of Object['entries'](d['fields'])){if(!ident['test'](h)||!ident['test'](p[X(0x9b)]??h))throw new ValidationError('Invalid\x20resource\x20field:\x20'+h);}}}
1
+ function g(){const k=['every','resources','name'];g=function(){return k;};return g();}const K=A;function A(x,q){x=x-0xf0;const C=g();let J=C[x];return J;}import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function validQualified(x){const J=A;return x['split']('.')['length']<=0x2&&x['split']('.')[J(0xf0)](q=>ident['test'](q));}export class ResourceRegistry{[K(0xf1)]=new Map();['register'](x){const Z=K;for(const q of Array['isArray'](x)?x:[x]){this['validate'](q);if(this['resources']['has'](q[Z(0xf2)]))throw new ConflictError('Resource\x20already\x20registered:\x20'+q[Z(0xf2)]);this['resources']['set'](q['name'],q);}}['has'](x){return this['resources']['has'](x);}['get'](x){const q=this['resources']['get'](x);if(!q)throw new NotFoundError('Resource\x20not\x20registered:\x20'+x);return q;}['list'](){const Y=K;return[...this[Y(0xf1)]['values']()];}['validate'](x){const b=K;if(x['version']!==0x1||!ident['test'](x[b(0xf2)])||!validQualified(x['table'])||!ident['test'](x['key']))throw new ValidationError('Invalid\x20resource\x20contract:\x20'+x['name']);for(const [q,C]of Object['entries'](x['fields'])){if(!ident['test'](q)||!ident['test'](C['column']??q))throw new ValidationError('Invalid\x20resource\x20field:\x20'+q);}}}
@@ -41,11 +41,13 @@ export interface ResourceFieldContract {
41
41
  export interface ResourceRelationContract {
42
42
  resource?: string;
43
43
  table?: string;
44
- sourceField?: string;
44
+ localKey?: string;
45
45
  foreignKey?: string;
46
- targetField?: string;
47
46
  type?: "one" | "many";
48
47
  fields?: string[];
48
+ junctionTable?: string;
49
+ junctionLocalKey?: string;
50
+ junctionForeignKey?: string;
49
51
  }
50
52
  export interface ResourceContract {
51
53
  version: 1;
@@ -55,6 +57,7 @@ export interface ResourceContract {
55
57
  table: string;
56
58
  key: string;
57
59
  operations: ResourceOperation[];
60
+ searchable?: string[];
58
61
  capabilities?: string[];
59
62
  permission?: string;
60
63
  fields: Record<string, ResourceFieldContract>;
@@ -1 +1 @@
1
- {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACxE,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EACH,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,MAAM,GACN,MAAM,GACN,WAAW,GACX,MAAM,GACN,MAAM,GACN,UAAU,GACV,MAAM,CAAC;IACT,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AACD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACrD,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACtC;AACD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AACD,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC;AAChC,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,eAAe,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAAC;IAC7D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACpC,IAAI,IAAI,gBAAgB,EAAE,CAAC;IAE3B,IAAI,CAAC,MAAM,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,MAAM,CAAC,MAAM,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EAAC,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,MAAM,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,MAAM,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvC,YAAY,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjB,cAAc,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,cAAc,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,cAAc,CAAC,MAAM,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACrD"}
1
+ {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(d,h){const Q=S,p=dictionaryIndexesCache['get'](h)??new Map(),Z=dictionaryRevisionsCache['get'](h)??new Map();dictionaryIndexesCache['set'](h,p),dictionaryRevisionsCache['set'](h,Z);const D=d[Q(0x1e6)](n=>Z['get'](n)!==h['revision'](n));if(D['length']===0x0)return p;const u=await Promise['all'](D['map'](async n=>{const F=Q;if(!h[F(0x1e7)](n))return[n,new Map()];const X=await h['get'](n),Y=new Map();for(const w of X){const y=w[F(0x1e8)]??w['id'];if(y==null)continue;Y['set'](String(y),{'id':y,'text':w[F(0x1e9)]??w[F(0x1ea)],...w[F(0x1eb)]!==undefined?{'color':w['color']}:{},...w['icon']!==undefined?{'icon':w['icon']}:{}});}return[n,Y];}));for(const [n,X]of u){p['set'](n,X),Z[Q(0x1ec)](n,h['revision'](n));}return p;}function S(d,h){d=d-0x1e6;const p=v();let Z=p[d];return Z;}function v(){const K=['filter','has','code','name','text','color','set','length','entries','map','get'];v=function(){return K;};return v();}export async function addDictionaryLookupData(d,h,p){const B=S;if(!p||d[B(0x1ed)]===0x0)return d;const Z=Object[B(0x1ee)](h)['flatMap'](([u,n])=>{const X=n['dictionary'];return X?[{'field':u,'dictionaryName':X}]:[];});if(Z['length']===0x0)return d;const D=await getDictionaryIndexes([...new Set(Z[B(0x1ef)](({dictionaryName:u})=>u))],p);for(const u of d){for(const {field:n,dictionaryName:X}of Z){const Y=u[n];u[n+'_data']=Y==null?null:D[B(0x1f0)](X)?.['get'](String(Y))??null;}}return d;}
1
+ const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();function g(){const t=['get','all','map','name','set','revision'];g=function(){return t;};return g();}async function getDictionaryIndexes(x,q){const y=A,C=dictionaryIndexesCache['get'](q)??new Map(),J=dictionaryRevisionsCache['get'](q)??new Map();dictionaryIndexesCache['set'](q,C),dictionaryRevisionsCache['set'](q,J);const K=x['filter'](Y=>J[y(0x1e6)](Y)!==q['revision'](Y));if(K['length']===0x0)return C;const Z=await Promise[y(0x1e7)](K[y(0x1e8)](async Y=>{const r=y;if(!q['has'](Y))return[Y,new Map()];const b=await q['get'](Y),k=new Map();for(const H of b){const F=H['code']??H['id'];if(F==null)continue;k['set'](String(F),{'id':F,'text':H[r(0x1e9)]??H['text'],...H['color']!==undefined?{'color':H['color']}:{},...H['icon']!==undefined?{'icon':H['icon']}:{}});}return[Y,k];}));for(const [Y,b]of Z){C[y(0x1ea)](Y,b),J[y(0x1ea)](Y,q[y(0x1eb)](Y));}return C;}function A(x,q){x=x-0x1e6;const C=g();let J=C[x];return J;}export async function addDictionaryLookupData(x,q,C){const B=A;if(!C||x['length']===0x0)return x;const J=Object['entries'](q)['flatMap'](([Z,Y])=>{const b=Y['dictionary'];return b?[{'field':Z,'dictionaryName':b}]:[];});if(J['length']===0x0)return x;const K=await getDictionaryIndexes([...new Set(J[B(0x1e8)](({dictionaryName:Z})=>Z))],C);for(const Z of x){for(const {field:Y,dictionaryName:b}of J){const k=Z[Y];Z[Y+'_data']=k==null?null:K[B(0x1e6)](b)?.['get'](String(k))??null;}}return x;}
@@ -1 +1 @@
1
- function S(d,h){d=d-0x169;const p=v();let Z=p[d];return Z;}export function addFileToken(d,h,p){const X=S;if(!p||d['length']===0x0)return d;const Z=Object[X(0x169)](h)[X(0x16a)](([,D])=>D['type']===X(0x16b))['map'](([D])=>D);for(const D of d){for(const u of Z){const n=D[u];typeof n==='string'&&n[X(0x16c)]>0x0&&(D[u]=p[X(0x16d)](n));}}return d;}function v(){const Y=['entries','filter','file','length','create'];v=function(){return Y;};return v();}
1
+ function g(){const k=['filter','type','file','string','create'];g=function(){return k;};return g();}function A(x,q){x=x-0xd6;const C=g();let J=C[x];return J;}export function addFileToken(x,q,C){const b=A;if(!C||x['length']===0x0)return x;const J=Object['entries'](q)[b(0xd6)](([,K])=>K[b(0xd7)]===b(0xd8))['map'](([K])=>K);for(const K of x){for(const Z of J){const Y=K[Z];typeof Y===b(0xd9)&&Y['length']>0x0&&(K[Z]=C[b(0xda)](Y));}}return x;}
@@ -1 +1 @@
1
- import{qi,qt}from'../utils/sql.js';function v(){const O=['entries','string','query','SELECT\x20','\x20AS\x20id,\x20','\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20','table','value'];v=function(){return O;};return v();}const tableLookupCache=new WeakMap();function S(d,h){d=d-0x19c;const p=v();let Z=p[d];return Z;}export function clearTableLookupCache(d,h){const p=tableLookupCache['get'](h);if(!p)return;for(const Z of p['keys']()){Z['startsWith'](d+':')&&p['delete'](Z);}}export async function addTableLookupData(d,h,p){const M=S;if(!p||d['length']===0x0)return d;const Z=tableLookupCache['get'](p)??new Map();tableLookupCache['set'](p,Z);const D=Object[M(0x19c)](h)['flatMap'](([u,n])=>{const {table:X,value:value='id',text:text='name'}=n['lookup']??{};return X?[{'field':u,'table':X,'value':value,'text':text}]:[];});for(const u of D){const n=new Map();for(const y of d){const Q=y[u['field']];(typeof Q===M(0x19d)||typeof Q==='number')&&n['set'](String(Q),Q);}const X=u['table']+':'+u['value']+':'+u['text'],Y=Z['get'](X)??new Map();Z['set'](X,Y);const w=[...n[M(0x19c)]()]['filter'](([F])=>!Y['has'](F))['map'](([,F])=>F);if(w['length']>0x0){const F=await p[M(0x19e)](M(0x19f)+qi(u['value'])+M(0x1a0)+qi(u['text'])+M(0x1a1)+qt(u[M(0x1a2)])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(u[M(0x1a3)])+'\x20=\x20ANY($1)',[w]);for(const B of F['rows']){Y['set'](String(B['id']),B);}for(const K of w){!Y['has'](String(K))&&Y['set'](String(K),null);}}for(const g of d){const s=g[u['field']];g[u['field']+'_data']=s==null?null:Y['get'](String(s))??null;}}return d;}
1
+ function g(){const G=['startsWith','get','flatMap','map','query','SELECT\x20','text','\x20=\x20ANY($1)','_data'];g=function(){return G;};return g();}function A(x,q){x=x-0x134;const C=g();let J=C[x];return J;}import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();export function clearTableLookupCache(x,q){const R=A,C=tableLookupCache['get'](q);if(!C)return;for(const J of C['keys']()){J[R(0x134)](x+':')&&C['delete'](J);}}export async function addTableLookupData(x,q,C){const s=A;if(!C||x['length']===0x0)return x;const J=tableLookupCache[s(0x135)](C)??new Map();tableLookupCache['set'](C,J);const K=Object['entries'](q)[s(0x136)](([Z,Y])=>{const {table:b,value:value='id',text:text='name'}=Y['lookup']??{};return b?[{'field':Z,'table':b,'value':value,'text':text}]:[];});for(const Z of K){const Y=new Map();for(const F of x){const y=F[Z['field']];(typeof y==='string'||typeof y==='number')&&Y['set'](String(y),y);}const b=Z['table']+':'+Z['value']+':'+Z['text'],k=J['get'](b)??new Map();J['set'](b,k);const H=[...Y['entries']()]['filter'](([r])=>!k['has'](r))[s(0x137)](([,r])=>r);if(H['length']>0x0){const r=await C[s(0x138)](s(0x139)+qi(Z['value'])+'\x20AS\x20id,\x20'+qi(Z[s(0x13a)])+'\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20'+qt(Z['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(Z['value'])+s(0x13b),[H]);for(const B of r['rows']){k['set'](String(B['id']),B);}for(const t of H){!k['has'](String(t))&&k['set'](String(t),null);}}for(const p of x){const w=p[Z['field']];p[Z['field']+s(0x13c)]=w==null?null:k['get'](String(w))??null;}}return x;}
@@ -1 +1 @@
1
- {"version":3,"file":"create-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/create-relation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,yCAIgD,oBAAoB,QAAQ,UAAU,KAAG,OAAO,CAAC,GAAG,CAAC,CAqEhI"}
1
+ {"version":3,"file":"create-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/create-relation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,yCAIgD,oBAAoB,QAAQ,UAAU,KAAG,OAAO,CAAC,GAAG,CAAC,CA+DhI"}
@@ -1 +1 @@
1
- import{UnsupportedError,ValidationError}from'../../../errors.js';import{qi,qt}from'../utils/sql.js';import{createCreate}from'./create.js';function S(d,h){d=d-0xb4;const p=v();let Z=p[d];return Z;}function v(){const q=['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*','get','Generic\x20Resource\x20relation\x20\x22','\x22\x20requires\x20a\x20project/provider\x20implementation','resource','length','No\x20writable\x20fields','map','INSERT\x20INTO\x20','rows','table'];v=function(){return q;};return v();}export function createCreateRelation(d,h){const p=createCreate(d,h);return async function Z({name:D,id:u,relation:n,data:X,user:Y},w){const c=S,y=w?.['pg']??d['pg'];if(n==='notes'){const g=await y['query']('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[D,String(u),X?.['body']]);return g['rows'][0x0];}if(n==='files'){const s=await y['query'](c(0xb4),[D,String(u),X?.['filePath'],X?.['size']??null]);return s['rows'][0x0];}const Q=h[c(0xb5)](D),F=Q['relations']?.[n];if(!F?.['foreignKey']||!F['resource']&&!F['table'])throw new UnsupportedError(c(0xb6)+n+c(0xb7));let B,K;if(F['resource'])B=await p({'name':F['resource'],'data':X??{},'user':Y}),K=B[h['get'](F[c(0xb8)])['key']];else{const M=F['fields'];if(!M?.['length'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+n+'\x22\x20requires\x20a\x20project/provider\x20implementation');const O=Object['entries'](X??{})['filter'](([I])=>M['includes'](I));if(!O[c(0xb9)])throw new ValidationError(c(0xba));const R=O['map'](([I])=>qi(I)),E=O[c(0xbb)]((I,k)=>'$'+(k+0x1)),J=O['map'](([,I])=>I),U=await y['query'](c(0xbc)+qt(F['table'])+'\x20('+R['join'](',\x20')+')\x20VALUES\x20('+E['join'](',\x20')+')\x20RETURNING\x20*',J);B=U[c(0xbd)][0x0],K=B['id'];}return await y['query']('UPDATE\x20'+qt(Q[c(0xbe)])+'\x20SET\x20'+qi(F['foreignKey'])+'\x20=\x20$1\x20WHERE\x20'+qi(Q['key'])+'\x20=\x20$2',[K,u]),B;};}
1
+ function g(){const R=['get','includes','Generic\x20Resource\x20relation\x20\x22','body','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*','filePath','rows','foreignKey','No\x20data\x20provided\x20for\x20relation:\x20','resource'];g=function(){return R;};return g();}import{UnsupportedError}from'../../../errors.js';function A(x,q){x=x-0x15a;const C=g();let J=C[x];return J;}import{createCreate}from'./create.js';export function createCreateRelation(x,q){const C=createCreate(x,q);return async function J({name:K,id:Z,relation:Y,data:b,user:k},H){const w=A,F=H?.['pg']??x['pg'],y=q[w(0x15a)](K);if(['notes','files'][w(0x15b)](Y)&&!y['capabilities']?.['includes'](Y))throw new UnsupportedError(w(0x15c)+Y+'\x22\x20requires\x20a\x20capabilities\x20\x22'+Y+'\x22');if(Y==='notes'){const t=await F['query']('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[K,String(Z),b?.[w(0x15d)]]);return t['rows'][0x0];}if(Y===w(0x15e)){const p=await F[w(0x15f)](w(0x160),[K,String(Z),b?.[w(0x161)],b?.['size']??null]);return p[w(0x162)][0x0];}const r=y['relations']?.[Y];if(!r?.[w(0x163)]||!r['resource']&&!r['table'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+Y+'\x22\x20requires\x20a\x20project/provider\x20implementation');if(!b)throw new UnsupportedError(w(0x164)+b);if(!r[w(0x165)])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+Y);b[r['foreignKey']]=Z;const B=await C({'name':r['resource'],'data':b??{},'user':k});return B;};}
@@ -1 +1 @@
1
- {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/create.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,2BAE0B,YAAY,QAAQ,UAAU,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAqCtH"}
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/create.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,2BAE0B,YAAY,QAAQ,UAAU,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA4CtH"}