@opengis/fcore 0.0.1-beta.18 → 0.0.1-beta.19

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 (105) hide show
  1. package/dist/config.js +1 -1
  2. package/dist/context.js +1 -1
  3. package/dist/errors.js +1 -1
  4. package/dist/fastify.js +1 -1
  5. package/dist/fcore.js +1 -1
  6. package/dist/migrations/cli.js +1 -1
  7. package/dist/migrations/runner.js +1 -1
  8. package/dist/modules/auth/adduser-cli.js +1 -1
  9. package/dist/modules/auth/passwd-cli.js +1 -1
  10. package/dist/modules/auth/permission-cli.js +1 -1
  11. package/dist/modules/auth/route.js +1 -1
  12. package/dist/modules/auth/schema.js +1 -1
  13. package/dist/modules/auth/services/change-password.js +1 -1
  14. package/dist/modules/auth/services/get-current-user.js +1 -1
  15. package/dist/modules/auth/services/registration.js +1 -1
  16. package/dist/modules/auth/services/verify-two-factor.js +1 -1
  17. package/dist/modules/file/mime.js +1 -1
  18. package/dist/modules/file/route.js +1 -1
  19. package/dist/modules/file/schema.js +1 -1
  20. package/dist/modules/file/services/get-file.js +1 -1
  21. package/dist/modules/file/services/resize-file.js +1 -1
  22. package/dist/modules/file/services/upload-file.js +1 -1
  23. package/dist/modules/resource/route.js +1 -1
  24. package/dist/modules/resource/schema.js +1 -1
  25. package/dist/modules/resource/services/add-note.js +1 -1
  26. package/dist/modules/resource/services/add-resource-file.js +1 -1
  27. package/dist/modules/resource/services/create-resource-relation.js +1 -1
  28. package/dist/modules/resource/services/create-resource.js +1 -1
  29. package/dist/modules/resource/services/delete-resource-relation.js +1 -1
  30. package/dist/modules/resource/services/delete-resource.js +1 -1
  31. package/dist/modules/resource/services/export-resource.js +1 -1
  32. package/dist/modules/resource/services/get-resource.js +1 -1
  33. package/dist/modules/resource/services/list-resource-relation.js +1 -1
  34. package/dist/modules/resource/services/list-resources.js +1 -1
  35. package/dist/modules/resource/services/search-resource.js +1 -1
  36. package/dist/modules/resource/services/suggest-resource.js +1 -1
  37. package/dist/modules/resource/services/update-resource-relation.js +1 -1
  38. package/dist/modules/resource/services/update-resource.js +1 -1
  39. package/dist/modules/resource/services/upload-resource-file.js +1 -1
  40. package/dist/modules/system/route.js +1 -1
  41. package/dist/modules/system/schema.d.ts +3 -2
  42. package/dist/modules/system/schema.d.ts.map +1 -1
  43. package/dist/modules/system/schema.js +1 -1
  44. package/dist/modules/system/services/check-system.js +1 -1
  45. package/dist/modules/system/services/get-access.d.ts +1 -0
  46. package/dist/modules/system/services/get-access.d.ts.map +1 -1
  47. package/dist/modules/system/services/get-access.js +1 -1
  48. package/dist/modules/system/services/get-api-list.js +1 -1
  49. package/dist/modules/system/services/get-audit-log.js +1 -1
  50. package/dist/modules/system/services/get-dictionary.js +1 -1
  51. package/dist/modules/system/services/get-system-log.js +1 -1
  52. package/dist/modules/system/services/get-system-settings.js +1 -1
  53. package/dist/modules/system/services/list-dictionaries.js +1 -1
  54. package/dist/modules/system/services/set-access.d.ts +2 -1
  55. package/dist/modules/system/services/set-access.d.ts.map +1 -1
  56. package/dist/modules/system/services/set-access.js +1 -1
  57. package/dist/modules/system/services/update-dictionary.js +1 -1
  58. package/dist/modules/system/services/update-system-settings.js +1 -1
  59. package/dist/modules/utils/require-admin.js +1 -1
  60. package/dist/modules/utils/safe-user.js +1 -1
  61. package/dist/modules/utils/unsupported.js +1 -1
  62. package/dist/plugins/audit/audit.js +1 -1
  63. package/dist/plugins/audit/audit.types.d.ts +1 -1
  64. package/dist/plugins/audit/audit.types.d.ts.map +1 -1
  65. package/dist/plugins/audit/services/write-audit.js +1 -1
  66. package/dist/plugins/auth/get-user-permissions.js +1 -1
  67. package/dist/plugins/auth/index.js +1 -1
  68. package/dist/plugins/auth/verifyUser.js +1 -1
  69. package/dist/plugins/dictionary.js +1 -1
  70. package/dist/plugins/file.js +1 -1
  71. package/dist/plugins/jwt.js +1 -1
  72. package/dist/plugins/logger/index.js +1 -1
  73. package/dist/plugins/logger/transport.js +1 -1
  74. package/dist/plugins/pg.js +1 -1
  75. package/dist/plugins/redis.js +1 -1
  76. package/dist/plugins/resource/resource.js +1 -1
  77. package/dist/plugins/resource/resource.registry.js +1 -1
  78. package/dist/plugins/resource/resource.types.d.ts +3 -1
  79. package/dist/plugins/resource/resource.types.d.ts.map +1 -1
  80. package/dist/plugins/resource/services/add-dictionary-lookup-data.js +1 -1
  81. package/dist/plugins/resource/services/add-file-token.js +1 -1
  82. package/dist/plugins/resource/services/add-table-lookup-data.js +1 -1
  83. package/dist/plugins/resource/services/create-relation.js +1 -1
  84. package/dist/plugins/resource/services/create.js +1 -1
  85. package/dist/plugins/resource/services/delete-relation.js +1 -1
  86. package/dist/plugins/resource/services/delete.d.ts.map +1 -1
  87. package/dist/plugins/resource/services/delete.js +1 -1
  88. package/dist/plugins/resource/services/find-one.d.ts.map +1 -1
  89. package/dist/plugins/resource/services/find-one.js +1 -1
  90. package/dist/plugins/resource/services/find-relation.d.ts.map +1 -1
  91. package/dist/plugins/resource/services/find-relation.js +1 -1
  92. package/dist/plugins/resource/services/find.d.ts.map +1 -1
  93. package/dist/plugins/resource/services/find.js +1 -1
  94. package/dist/plugins/resource/services/update-relation.js +1 -1
  95. package/dist/plugins/resource/services/update.d.ts.map +1 -1
  96. package/dist/plugins/resource/services/update.js +1 -1
  97. package/dist/plugins/resource/utils/auto-index.js +1 -1
  98. package/dist/plugins/resource/utils/fields.js +1 -1
  99. package/dist/plugins/resource/utils/filters.js +1 -1
  100. package/dist/plugins/resource/utils/permissions.js +1 -1
  101. package/dist/plugins/resource/utils/sort.js +1 -1
  102. package/dist/plugins/resource/utils/sql.js +1 -1
  103. package/dist/shared/getIP.js +1 -1
  104. package/migrations/20260905120000_add_user_foreign_keys.sql +42 -42
  105. package/package.json +93 -93
@@ -1 +1 @@
1
- import{getSystemSettings}from'./services/get-system-settings.js';function D(){const b=['/api/dictionary/:name','dictionaryName','post','Replaces\x20the\x20items\x20of\x20a\x20registered\x20platform\x20dictionary.','user','params','body','system','admin','system:access','fcore','Set\x20access\x20rules','Replaces\x20direct\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','system:settings','/api/system/settings','/api/system/logger','Returns\x20system\x20logger\x20entries\x20for\x20the\x20requested\x20path.','query','type','get','system:audit','system:check'];D=function(){return b;};return D();}import{updateSystemSettings}from'./services/update-system-settings.js';import{getAuditLog}from'./services/get-audit-log.js';function p(d,X){d=d-0x199;const F=D();let a=F[d];return a;}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['user'];export function systemRoutes(d,X=new Map()){return async F=>{const f=p;F['get'](f(0x199),{'schema':{'tags':['fcore','system'],'summary':'Get\x20platform\x20dictionary','description':'Returns\x20a\x20registered\x20platform\x20dictionary\x20by\x20name.','access':'user','permissions':['system:dictionaries'],'params':systemSchemas[f(0x19a)]}},async s=>({'items':await getDictionary({...s['params'],'user':u(s)},d)})),F[f(0x19b)]('/api/dictionary/:name',{'schema':{'tags':['fcore','system'],'summary':'Update\x20platform\x20dictionary','description':f(0x19c),'access':f(0x19d),'permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName'],'body':systemSchemas['dictionaryItems']}},async s=>updateDictionary({...s[f(0x19e)],...s[f(0x19f)],'user':u(s)},d));const a=async s=>getAccess({...s['params'],'user':u(s)},d);F['get']('/api/access/:type/:id',{'schema':{'tags':['fcore',f(0x1a0)],'summary':'Get\x20access\x20rules','description':'Returns\x20direct\x20and\x20role-based\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','access':f(0x1a1),'permissions':[f(0x1a2)],'params':systemSchemas['accessTarget']}},a),F['post']('/api/access/:type/:id',{'schema':{'tags':[f(0x1a3),'system'],'summary':f(0x1a4),'description':f(0x1a5),'access':'admin','permissions':['system:access'],'params':systemSchemas['accessTarget'],'body':systemSchemas['access']}},async s=>setAccess({...s['params'],...s['body'],'user':u(s)},d)),F['get']('/api/system/settings',{'schema':{'tags':['fcore','system'],'summary':'Get\x20system\x20settings','description':'Returns\x20system\x20settings\x20as\x20nested\x20JSON.','access':f(0x1a1),'permissions':[f(0x1a6)]}},async s=>getSystemSettings({...s['params'],'user':u(s)},d)),F['post'](f(0x1a7),{'schema':{'tags':['fcore','system'],'summary':'Update\x20system\x20settings','description':'Updates\x20system\x20settings\x20using\x20flat\x20dot-notation\x20keys.','access':'admin','permissions':['system:settings'],'body':systemSchemas['settings']}},async s=>updateSystemSettings({...s['params'],'patch':s['body'],'user':u(s)},d)),F['get'](f(0x1a8),{'schema':{'tags':['fcore','system'],'summary':'Get\x20system\x20log','description':f(0x1a9),'access':f(0x19d),'permissions':['system:logs'],'querystring':systemSchemas['logger']}},async(s,y)=>{const G=f,{contentType:k,body:q}=await getSystemLog({...s[G(0x1aa)],'user':u(s)},d);return y[G(0x1ab)](k)['send'](q);}),F[f(0x1ac)]('/api/system/audit',{'schema':{'tags':['fcore',f(0x1a0)],'summary':'Get\x20audit\x20log','description':'Returns\x20the\x20system\x20audit\x20log\x20entries.','access':f(0x19d),'permissions':[f(0x1ad)]}},async s=>getAuditLog({...s['query'],'user':u(s)},d)),F[f(0x1ac)]('/api/system/check',{'schema':{'tags':['fcore','system'],'summary':'Check\x20system\x20health','description':'Checks\x20the\x20availability\x20of\x20system\x20dependencies.','access':'user','permissions':[f(0x1ae)]}},async s=>checkSystem({'user':u(s)},d)),F['get']('/api/system/list',{'schema':{'tags':['fcore','system'],'summary':'List\x20APIs','description':'Returns\x20the\x20list\x20of\x20registered\x20platform\x20APIs.','access':'admin','permissions':[],'querystring':systemSchemas['apiListQuery']}},async s=>getApiList({'user':u(s),'apiRoutes':X,...s['query']},d));};}
1
+ import{getSystemSettings}from'./services/get-system-settings.js';function O(L,E){L=L-0x15a;const c=Z();let t=c[L];return t;}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 Z(){const F=['get','/api/dictionary/:name','fcore','system','system:dictionaries','dictionaryName','Returns\x20direct\x20and\x20role-based\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','system:access','access','params','Update\x20system\x20settings','admin','settings','body','send','Returns\x20the\x20system\x20audit\x20log\x20entries.','user','apiListQuery'];Z=function(){return F;};return Z();}import{getAccess}from'./services/get-access.js';import{setAccess}from'./services/set-access.js';import{systemSchemas}from'./schema.js';const u=L=>L['user'];export function systemRoutes(L,E=new Map()){return async c=>{const X=O;c[X(0x15a)](X(0x15b),{'schema':{'tags':[X(0x15c),X(0x15d)],'summary':'Get\x20platform\x20dictionary','description':'Returns\x20a\x20registered\x20platform\x20dictionary\x20by\x20name.','access':'user','permissions':[X(0x15e)],'params':systemSchemas[X(0x15f)]}},async e=>({'items':await getDictionary({...e['params'],'user':u(e)},L)})),c['post']('/api/dictionary/:name',{'schema':{'tags':['fcore','system'],'summary':'Update\x20platform\x20dictionary','description':'Replaces\x20the\x20items\x20of\x20a\x20registered\x20platform\x20dictionary.','access':'user','permissions':['system:dictionaries'],'params':systemSchemas[X(0x15f)],'body':systemSchemas['dictionaryItems']}},async e=>updateDictionary({...e['params'],...e['body'],'user':u(e)},L));const t=async e=>getAccess({...e['params'],'user':u(e)},L);c[X(0x15a)]('/api/access/:type/:id',{'schema':{'tags':['fcore','system'],'summary':'Get\x20access\x20rules','description':X(0x160),'access':'admin','permissions':[X(0x161)],'params':systemSchemas['accessTarget']}},t),c['post']('/api/access/:type/:id',{'schema':{'tags':['fcore','system'],'summary':'Set\x20access\x20rules','description':'Replaces\x20direct\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','access':'admin','permissions':['system:access'],'params':systemSchemas['accessTarget'],'body':systemSchemas[X(0x162)]}},async e=>setAccess({...e['params'],...e['body'],'user':u(e)},L)),c[X(0x15a)]('/api/system/settings',{'schema':{'tags':['fcore','system'],'summary':'Get\x20system\x20settings','description':'Returns\x20system\x20settings\x20as\x20nested\x20JSON.','access':'admin','permissions':['system:settings']}},async e=>getSystemSettings({...e[X(0x163)],'user':u(e)},L)),c['post']('/api/system/settings',{'schema':{'tags':[X(0x15c),'system'],'summary':X(0x164),'description':'Updates\x20system\x20settings\x20using\x20flat\x20dot-notation\x20keys.','access':X(0x165),'permissions':['system:settings'],'body':systemSchemas[X(0x166)]}},async e=>updateSystemSettings({...e['params'],'patch':e[X(0x167)],'user':u(e)},L)),c['get']('/api/system/logger',{'schema':{'tags':[X(0x15c),'system'],'summary':'Get\x20system\x20log','description':'Returns\x20system\x20logger\x20entries\x20for\x20the\x20requested\x20path.','access':'user','permissions':['system:logs'],'querystring':systemSchemas['logger']}},async(e,B)=>{const j=X,{contentType:g,body:r}=await getSystemLog({...e['query'],'user':u(e)},L);return B['type'](g)[j(0x168)](r);}),c['get']('/api/system/audit',{'schema':{'tags':[X(0x15c),'system'],'summary':'Get\x20audit\x20log','description':X(0x169),'access':X(0x16a),'permissions':['system:audit']}},async e=>getAuditLog({...e['query'],'user':u(e)},L)),c['get']('/api/system/check',{'schema':{'tags':['fcore','system'],'summary':'Check\x20system\x20health','description':'Checks\x20the\x20availability\x20of\x20system\x20dependencies.','access':'user','permissions':['system:check']}},async e=>checkSystem({'user':u(e)},L)),c[X(0x15a)]('/api/system/list',{'schema':{'tags':['fcore','system'],'summary':'List\x20APIs','description':'Returns\x20the\x20list\x20of\x20registered\x20platform\x20APIs.','access':'admin','permissions':[],'querystring':systemSchemas[X(0x16b)]}},async e=>getApiList({'user':u(e),'apiRoutes':E,...e['query']},L));};}
@@ -16,10 +16,11 @@ export declare const systemSchemas: {
16
16
  id: import("@sinclair/typebox").TString;
17
17
  }>;
18
18
  access: import("@sinclair/typebox").TObject<{
19
- access: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
19
+ permissions: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
20
+ access: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TObject<{
20
21
  resource: import("@sinclair/typebox").TString;
21
22
  actions: import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>;
22
- }>>;
23
+ }>>>;
23
24
  }>;
24
25
  apiListQuery: import("@sinclair/typebox").TObject<{
25
26
  format: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"short">, import("@sinclair/typebox").TLiteral<"extended">]>>;
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/modules/system/schema.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU,qCAIrB,CAAC;AAEH,eAAO,MAAM,aAAa;IACxB,cAAc;;;IAGd,eAAe;;;;;;;;IAef,YAAY;;;;IAIZ,MAAM;;;;;;IAQN,YAAY;;;IAGZ,cAAc;;;IACd,QAAQ;IACR,MAAM;;;CAKP,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/modules/system/schema.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU,qCAIrB,CAAC;AAEH,eAAO,MAAM,aAAa;IACxB,cAAc;;;IAGd,eAAe;;;;;;;;IAef,YAAY;;;;IAIZ,MAAM;;;;;;;IAaN,YAAY;;;IAGZ,cAAc;;;IACd,QAAQ;IACR,MAAM;;;CAKP,CAAC"}
@@ -1 +1 @@
1
- const d=p;function p(d,X){d=d-0xb9;const F=D();let a=F[d];return a;}import{Type}from'@sinclair/typebox';function D(){const X=['Object','Union','String','Optional','Null','Literal','Record','Unknown'];D=function(){return X;};return D();}export const identifier=Type['String']({'minLength':0x1,'maxLength':0x80,'pattern':'^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$'});export const systemSchemas={'dictionaryName':Type[d(0xb9)]({'name':identifier}),'dictionaryItems':Type['Object']({'items':Type['Array'](Type['Object']({'id':Type['Optional'](Type[d(0xba)]([Type['String'](),Type['Number']()])),'code':Type['String']({'minLength':0x1}),'name':Type[d(0xbb)]({'minLength':0x1}),'parentId':Type[d(0xbc)](Type['Union']([Type[d(0xbb)](),Type['Number'](),Type[d(0xbd)]()]))},{'additionalProperties':!![]}))}),'accessTarget':Type['Object']({'type':Type[d(0xba)]([Type[d(0xbe)]('user'),Type['Literal']('role')]),'id':identifier}),'access':Type[d(0xb9)]({'access':Type['Array'](Type['Object']({'resource':Type['String']({'minLength':0x1,'maxLength':0x80}),'actions':Type['Array'](Type['String']({'minLength':0x1,'maxLength':0x80}),{'minItems':0x1})}))}),'apiListQuery':Type['Object']({'format':Type['Optional'](Type['Union']([Type['Literal']('short'),Type['Literal']('extended')]))}),'settingsEntity':Type[d(0xb9)]({'entity':Type[d(0xbc)](identifier)}),'settings':Type[d(0xbf)](Type['String']({'minLength':0x1}),Type[d(0xc0)]()),'logger':Type['Object']({'path':Type[d(0xbc)](Type[d(0xbb)]({'maxLength':0x100,'pattern':'^[A-Za-z0-9_.\x5c-/]*$'}))})};
1
+ function O(L,E){L=L-0xcf;const c=Z();let t=c[L];return t;}function Z(){const E=['Object','Union','Literal','Optional','Array','String','short'];Z=function(){return E;};return Z();}const L=O;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}$'});export const systemSchemas={'dictionaryName':Type[L(0xcf)]({'name':identifier}),'dictionaryItems':Type['Object']({'items':Type['Array'](Type['Object']({'id':Type['Optional'](Type['Union']([Type['String'](),Type['Number']()])),'code':Type['String']({'minLength':0x1}),'name':Type['String']({'minLength':0x1}),'parentId':Type['Optional'](Type['Union']([Type['String'](),Type['Number'](),Type['Null']()]))},{'additionalProperties':!![]}))}),'accessTarget':Type['Object']({'type':Type[L(0xd0)]([Type[L(0xd1)]('user'),Type[L(0xd1)]('role')]),'id':identifier}),'access':Type[L(0xcf)]({'permissions':Type[L(0xd2)](Type['Array'](Type['String']({'minLength':0x1,'maxLength':0x80,'pattern':'^[A-Za-z0-9_-]+(?::[A-Za-z0-9_-]+)?$'}))),'access':Type['Optional'](Type[L(0xd3)](Type['Object']({'resource':Type[L(0xd4)]({'minLength':0x1,'maxLength':0x80}),'actions':Type[L(0xd3)](Type['String']({'minLength':0x1,'maxLength':0x80}),{'minItems':0x1})})))}),'apiListQuery':Type['Object']({'format':Type[L(0xd2)](Type[L(0xd0)]([Type['Literal'](L(0xd5)),Type[L(0xd1)]('extended')]))}),'settingsEntity':Type[L(0xcf)]({'entity':Type[L(0xd2)](identifier)}),'settings':Type['Record'](Type['String']({'minLength':0x1}),Type['Unknown']()),'logger':Type['Object']({'path':Type['Optional'](Type['String']({'maxLength':0x100,'pattern':'^[A-Za-z0-9_.\x5c-/]*$'}))})};
@@ -1 +1 @@
1
- function p(d,X){d=d-0x14f;const F=D();let a=F[d];return a;}export async function checkSystem(d,X){const s=p,[F,a]=await Promise['allSettled']([X['pg'][s(0x14f)]('SELECT\x201'),X[s(0x150)]['ping']()]);return{'status':F['status']==='fulfilled'&&a[s(0x151)]==='fulfilled'?'ok':'degraded','pg':F['status'],'redis':a['status']};}function D(){const y=['query','redis','status'];D=function(){return y;};return D();}
1
+ function O(L,E){L=L-0x1e5;const c=Z();let t=c[L];return t;}export async function checkSystem(L,E){const e=O,[c,t]=await Promise[e(0x1e5)]([E['pg'][e(0x1e6)](e(0x1e7)),E[e(0x1e8)]['ping']()]);return{'status':c[e(0x1e9)]===e(0x1ea)&&t['status']==='fulfilled'?'ok':'degraded','pg':c['status'],'redis':t['status']};}function Z(){const B=['allSettled','query','SELECT\x201','redis','status','fulfilled'];Z=function(){return B;};return Z();}
@@ -10,5 +10,6 @@ export declare function getAccess(params: {
10
10
  user: User;
11
11
  }, ctx: AppContext): Promise<{
12
12
  access: AccessRecord[];
13
+ resources: string[];
13
14
  }>;
14
15
  //# sourceMappingURL=get-access.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"get-access.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,EACzD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAkBrC"}
1
+ {"version":3,"file":"get-access.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/get-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,wBAAsB,SAAS,CAC7B,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,EACzD,GAAG,EAAE,UAAU,GACd,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAwB1D"}
@@ -1 +1 @@
1
- function p(d,X){d=d-0xd6;const F=D();let a=F[d];return a;}export async function getAccess(d,X){const s=p,F=d['type']===s(0xd6)?'\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',a=await X['pg']['query'](F,[d['id']]);return{'access':a['rows']};}function D(){const y=['user'];D=function(){return y;};return D();}
1
+ function O(L,E){L=L-0x9c;const c=Z();let t=c[L];return t;}export async function getAccess(L,E){const g=O,c=L[g(0x9c)]==='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',t=await E['pg'][g(0x9d)](c,[L['id']]),e=[...new Set(t[g(0x9e)]['map'](B=>B['resource'])[g(0x9f)](B=>B!==null))];return{'access':t['rows'],'resources':e};}function Z(){const r=['type','query','rows','filter'];Z=function(){return r;};return Z();}
@@ -1 +1 @@
1
- export async function getApiList(d,X){const q=p,F=[...d['apiRoutes']['values']()][q(0x106)]((a,s)=>(a['endpoint']+'\x20'+a['method'])['localeCompare'](s[q(0x107)]+'\x20'+s['method']));if(d['format']!=='short')return F;return F['map'](({method:a,endpoint:s,access:y,permissions:k})=>a+'\x20'+s);}function p(d,X){d=d-0x106;const F=D();let a=F[d];return a;}function D(){const f=['sort','endpoint'];D=function(){return f;};return D();}
1
+ function O(L,E){L=L-0xed;const c=Z();let t=c[L];return t;}function Z(){const X=['sort','method','short'];Z=function(){return X;};return Z();}export async function getApiList(L,E){const r=O,c=[...L['apiRoutes']['values']()][r(0xed)]((t,e)=>(t['endpoint']+'\x20'+t[r(0xee)])['localeCompare'](e['endpoint']+'\x20'+e['method']));if(L['format']!==r(0xef))return c;return c['map'](({method:t,endpoint:e,access:B,permissions:g})=>t+'\x20'+e);}
@@ -1 +1 @@
1
- function p(d,X){d=d-0xe3;const F=D();let a=F[d];return a;}function D(){const k=['max','query','SELECT\x20*\x20FROM\x20admin.audit_log\x20ORDER\x20BY\x20id\x20DESC\x20LIMIT\x20$1\x20OFFSET\x20$2','rows'];D=function(){return k;};return D();}export async function getAuditLog(d,X){const y=p,F=Math['min'](Math['max'](d['limit']??0x32,0x1),0xc8),a=Math[y(0xe3)]((d['page']??0x1)-0x1,0x0)*F,s=await X['pg'][y(0xe4)](y(0xe5),[F,a]);return{'rows':s[y(0xe6)],'page':d['page']??0x1,'limit':F};}
1
+ function O(L,E){L=L-0x175;const c=Z();let t=c[L];return t;}export async function getAuditLog(L,E){const B=O,c=Math['min'](Math[B(0x175)](L['limit']??0x32,0x1),0xc8),t=Math[B(0x175)]((L['page']??0x1)-0x1,0x0)*c,e=await E['pg']['query'](B(0x176),[c,t]);return{'rows':e['rows'],'page':L[B(0x177)]??0x1,'limit':c};}function Z(){const g=['max','SELECT\x20*\x20FROM\x20admin.audit_log\x20ORDER\x20BY\x20id\x20DESC\x20LIMIT\x20$1\x20OFFSET\x20$2','page'];Z=function(){return g;};return Z();}
@@ -1 +1 @@
1
- export async function getDictionary(d,X){var F=p;return X['dictionary']['get'](d[F(0x137)]);}function p(d,X){d=d-0x137;var F=D();var a=F[d];return a;}function D(){var a=['name'];D=function(){return a;};return D();}
1
+ function O(L,E){L=L-0x1d1;var c=Z();var t=c[L];return t;}export async function getDictionary(L,E){var c=O;return E['dictionary'][c(0x1d1)](L['name']);}function Z(){var t=['get'];Z=function(){return t;};return Z();}
@@ -1 +1 @@
1
- function p(d,X){d=d-0x7f;const F=D();let a=F[d];return a;}import d from'node:fs/promises';import X from'node:path';import{NotFoundError,ValidationError}from'../../../errors.js';function D(){const U=['resolve','sep','stat','all','name','mtime','toISOString','split','text/html;\x20charset=utf-8','text/plain;\x20charset=utf-8','map','?path=','path','type','logs/','<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>','</title></head>\x0a<body>\x0a<h1>','</h1>\x0a<ul>\x0a','replace','&quot;','some','open','alloc','read','filter'];D=function(){return U;};return D();}const LOGS_ROOT=X['resolve'](process['cwd'](),'logs'),TAIL_LINES=0x64;export async function getSystemLog(F,a){const P=p,s=normalizePath(F['path']),y=X[P(0x7f)](LOGS_ROOT,s);if(y!==LOGS_ROOT&&!y['startsWith'](LOGS_ROOT+X[P(0x80)]))throw new ValidationError('Invalid\x20log\x20path');const k=await d[P(0x81)](y)['catch'](()=>null);if(!k)throw new NotFoundError('Log\x20path\x20not\x20found');if(k['isDirectory']()){const f=await d['readdir'](y,{'withFileTypes':!![]}),G=await Promise[P(0x82)](f['map'](async b=>{const v=P,H=await d[v(0x81)](X['join'](y,b['name']));return{'name':b['name'],'path':s?s+'/'+b['name']:b[v(0x83)],'type':b['isDirectory']()?'directory':'file','size':b['isDirectory']()?undefined:H['size'],'modified':H[v(0x84)][v(0x85)]()};}));G['sort']((H,T)=>H[P(0x83)]['localeCompare'](T['name']));if(s){const b=s[P(0x86)]('/')['slice'](0x0,-0x1)['join']('/');G['unshift']({'name':'..','path':b,'type':'directory'});}return{'contentType':P(0x87),'body':renderDirectory(s,G)};}const q=await tailFile(y,TAIL_LINES);return{'contentType':P(0x88),'body':q['join']('\x0a')};}function renderDirectory(F,a){const J=p,s=a[J(0x89)](k=>{const R=J,q=R(0x8a)+encodeURIComponent(k[R(0x8b)]),f=k[R(0x8c)]==='directory'?k['name']+'/':k[R(0x83)];return'<li><a\x20href=\x22'+q+'\x22>'+escapeHtml(f)+'</a></li>';})['join']('\x0a'),y=escapeHtml(J(0x8d)+F);return J(0x8e)+y+J(0x8f)+y+J(0x90)+s+'\x0a</ul>\x0a</body>\x0a</html>';}function escapeHtml(F){const V=p;return F[V(0x91)](/&/g,'&amp;')['replace'](/</g,'&lt;')[V(0x91)](/>/g,'&gt;')['replace'](/"/g,V(0x92));}function normalizePath(F){const M=p,a=(F??'')['replace'](/\\/g,'/')['replace'](/^\/+|\/+$/g,'');if(a['split']('/')[M(0x93)](s=>s==='..'))throw new ValidationError('Invalid\x20log\x20path');return a;}async function tailFile(F,a){const z=p,s=await d[z(0x94)](F,'r');try{const {size:y}=await s[z(0x81)](),k=0x40*0x400;let q=y,f=Buffer['alloc'](0x0),G=0x0;while(q>0x0&&G<=a){const H=Math['min'](k,q);q-=H;const T=Buffer[z(0x95)](H);await s[z(0x96)](T,0x0,H,q),f=Buffer['concat']([T,f]),G+=countNewlines(T);}const b=f['toString']('utf8')['split']('\x0a')[z(0x97)](W=>W['length']>0x0);return b['slice'](-a)['reverse']();}finally{await s['close']();}}function countNewlines(F){let a=0x0;for(const s of F){if(s===0xa)a++;}return a;}
1
+ import L from'node:fs/promises';function O(L,E){L=L-0x73;const c=Z();let t=c[L];return t;}import E from'node:path';import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=E['resolve'](process['cwd'](),'logs'),TAIL_LINES=0x64;export async function getSystemLog(c,t){const A=O,e=normalizePath(c[A(0x73)]),B=E['resolve'](LOGS_ROOT,e);if(B!==LOGS_ROOT&&!B[A(0x74)](LOGS_ROOT+E[A(0x75)]))throw new ValidationError('Invalid\x20log\x20path');const g=await L['stat'](B)['catch'](()=>null);if(!g)throw new NotFoundError('Log\x20path\x20not\x20found');if(g['isDirectory']()){const X=await L['readdir'](B,{'withFileTypes':!![]}),j=await Promise['all'](X[A(0x76)](async F=>{const G=A,I=await L['stat'](E[G(0x77)](B,F[G(0x78)]));return{'name':F[G(0x78)],'path':e?e+'/'+F['name']:F['name'],'type':F['isDirectory']()?'directory':'file','size':F['isDirectory']()?undefined:I[G(0x79)],'modified':I['mtime']['toISOString']()};}));j['sort']((F,I)=>F['name'][A(0x7a)](I['name']));if(e){const F=e[A(0x7b)]('/')['slice'](0x0,-0x1)[A(0x77)]('/');j['unshift']({'name':'..','path':F,'type':'directory'});}return{'contentType':A(0x7c),'body':renderDirectory(e,j)};}const r=await tailFile(B,TAIL_LINES);return{'contentType':'text/plain;\x20charset=utf-8','body':r['join']('\x0a')};}function renderDirectory(c,t){const x=O,e=t[x(0x76)](g=>{const W=x,r='?path='+encodeURIComponent(g['path']),X=g['type']===W(0x7d)?g['name']+'/':g[W(0x78)];return'<li><a\x20href=\x22'+r+'\x22>'+escapeHtml(X)+'</a></li>';})['join']('\x0a'),B=escapeHtml('logs/'+c);return'<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>'+B+'</title></head>\x0a<body>\x0a<h1>'+B+'</h1>\x0a<ul>\x0a'+e+'\x0a</ul>\x0a</body>\x0a</html>';}function Z(){const Y=['path','startsWith','sep','map','join','name','size','localeCompare','split','text/html;\x20charset=utf-8','directory','&lt;','replace','toString','utf8','slice','close'];Z=function(){return Y;};return Z();}function escapeHtml(c){const q=O;return c['replace'](/&/g,'&amp;')['replace'](/</g,q(0x7e))['replace'](/>/g,'&gt;')['replace'](/"/g,'&quot;');}function normalizePath(c){const y=O,t=(c??'')['replace'](/\\/g,'/')[y(0x7f)](/^\/+|\/+$/g,'');if(t['split']('/')['some'](e=>e==='..'))throw new ValidationError('Invalid\x20log\x20path');return t;}async function tailFile(c,t){const p=O,e=await L['open'](c,'r');try{const {size:B}=await e['stat'](),g=0x40*0x400;let r=B,X=Buffer['alloc'](0x0),j=0x0;while(r>0x0&&j<=t){const I=Math['min'](g,r);r-=I;const T=Buffer['alloc'](I);await e['read'](T,0x0,I,r),X=Buffer['concat']([T,X]),j+=countNewlines(T);}const F=X[p(0x80)](p(0x81))[p(0x7b)]('\x0a')['filter'](f=>f['length']>0x0);return F[p(0x82)](-t)['reverse']();}finally{await e[p(0x83)]();}}function countNewlines(c){let t=0x0;for(const e of c){if(e===0xa)t++;}return t;}
@@ -1 +1 @@
1
- function p(d,X){d=d-0x11b;const F=D();let a=F[d];return a;}function D(){const b=['rows','slice'];D=function(){return b;};return D();}export async function getSystemSettings(d,X){const f=p,F=await X['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 F[f(0x11b)]['reduce']((a,s)=>{const G=f,y=String(s['key'])['split']('.');let k=a;for(const q of y[G(0x11c)](0x0,-0x1)){k[q]??={},k=k[q];}return k[y['at'](-0x1)]=s['value'],a;},{});}
1
+ export async function getSystemSettings(L,E){const X=O,c=await E['pg'][X(0x158)](X(0x159));return c['rows']['reduce']((t,e)=>{const B=String(e['key'])['split']('.');let g=t;for(const r of B['slice'](0x0,-0x1)){g[r]??={},g=g[r];}return g[B['at'](-0x1)]=e['value'],t;},{});}function O(L,E){L=L-0x158;const c=Z();let t=c[L];return t;}function Z(){const j=['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'];Z=function(){return j;};return Z();}
@@ -1 +1 @@
1
- export async function listDictionaries(d,X){return X['dictionary']['list']();}
1
+ export async function listDictionaries(L,E){return E['dictionary']['list']();}
@@ -7,7 +7,8 @@ type AccessInput = {
7
7
  export declare function setAccess(params: {
8
8
  type: "user" | "role";
9
9
  id: string;
10
- access: AccessInput[];
10
+ access?: AccessInput[];
11
+ permissions?: string[];
11
12
  user: User;
12
13
  }, ctx: AppContext): Promise<{
13
14
  access: AccessRecord[];
@@ -1 +1 @@
1
- {"version":3,"file":"set-access.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/set-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/D,KAAK,WAAW,GAAG;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,wBAAsB,SAAS,CAC3B,MAAM,EAAE;IACJ,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,IAAI,EAAE,IAAI,CAAC;CACd,EACD,GAAG,EAAE,UAAU,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CA6CrC"}
1
+ {"version":3,"file":"set-access.d.ts","sourceRoot":"","sources":["../../../../src/modules/system/services/set-access.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAa,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/D,KAAK,WAAW,GAAG;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAoBF,wBAAsB,SAAS,CAC3B,MAAM,EAAE;IACJ,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC;CACd,EACD,GAAG,EAAE,UAAU,GAChB,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAiDrC"}
@@ -1 +1 @@
1
- function p(d,X){d=d-0x79;const F=D();let a=F[d];return a;}function D(){const k=['user','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)','INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20role_id,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)','actions'];D=function(){return k;};return D();}import{getAccess}from'./get-access.js';export async function setAccess(d,X){const y=p,F=await X['pg']['connect']();try{await F['query']('BEGIN');d['type']===y(0x79)?await F['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL',[d['id']]):await F[y(0x7a)]('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL',[d['id']]);for(const a of d['access']){d['type']==='user'?await F['query'](y(0x7b),[a['resource'],a['actions'],d['id'],d[y(0x79)]['id'],d['user']['id']]):await F['query'](y(0x7c),[a['resource'],a[y(0x7d)],d['id'],d[y(0x79)]['id'],d[y(0x79)]['id']]);}await F[y(0x7a)]('COMMIT');}catch(s){await F['query']('ROLLBACK');throw s;}finally{F['release']();}return getAccess(d,X);}
1
+ function Z(){const f=['delete','update','add','map','BEGIN','DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL','access','INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20user_uid,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)','resource','query','user','ROLLBACK','release'];Z=function(){return f;};return Z();}const F=O;import{getAccess}from'./get-access.js';function O(L,E){L=L-0xaf;const c=Z();let t=c[L];return t;}const CRUD_ACTIONS=['read','update','create',F(0xaf)];function permissionsToAccess(L){const I=F,E=new Map();for(const c of L){const [t,e]=c['split'](':');if(!t)continue;const B=e==='edit'?I(0xb0):e,g=E['get'](t)??new Set();for(const r of B?[B]:CRUD_ACTIONS)g[I(0xb1)](r);E['set'](t,g);}return[...E][I(0xb2)](([X,j])=>({'resource':X,'actions':[...j]}));}export async function setAccess(L,E){const T=F,c=await E['pg']['connect']();try{await c['query'](T(0xb3));L['type']==='user'?await c['query'](T(0xb4),[L['id']]):await c['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL',[L['id']]);const t=L['permissions']?permissionsToAccess(L['permissions']):L[T(0xb5)]??[];for(const e of t){L['type']==='user'?await c['query'](T(0xb6),[e[T(0xb7)],e['actions'],L['id'],L['user']['id'],L['user']['id']]):await c[T(0xb8)]('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)',[e[T(0xb7)],e['actions'],L['id'],L[T(0xb9)]['id'],L['user']['id']]);}await c['query']('COMMIT');}catch(B){await c['query'](T(0xba));throw B;}finally{c[T(0xbb)]();}return getAccess(L,E);}
@@ -1 +1 @@
1
- export async function updateDictionary(d,X){var F=p;return await X['dictionary'][F(0x65)](d['name'],d['items']),{'success':!![]};}function p(d,X){d=d-0x65;var F=D();var a=F[d];return a;}function D(){var a=['put'];D=function(){return a;};return D();}
1
+ function Z(){var t=['dictionary'];Z=function(){return t;};return Z();}function O(L,E){L=L-0x1c1;var c=Z();var t=c[L];return t;}export async function updateDictionary(L,E){var c=O;return await E[c(0x1c1)]['put'](L['name'],L['items']),{'success':!![]};}
@@ -1 +1 @@
1
- function p(d,X){d=d-0xc4;const F=D();let a=F[d];return a;}function D(){const y=['keys','Settings\x20patch\x20is\x20empty','trim','includes'];D=function(){return y;};return D();}import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(d,X){const s=p;if(!Object[s(0xc4)](d['patch'])['length'])throw new ValidationError(s(0xc5));for(const [F,a]of Object['entries'](d['patch'])){if(!F[s(0xc6)]()||F[s(0xc7)]('..'))throw new ValidationError('Invalid\x20setting\x20key:\x20'+F);await X['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',[F,JSON['stringify'](a),d['user']['id']]);}return{'success':!![]};}
1
+ import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(L,E){const e=O;if(!Object['keys'](L['patch'])['length'])throw new ValidationError('Settings\x20patch\x20is\x20empty');for(const [c,t]of Object['entries'](L['patch'])){if(!c[e(0x15c)]()||c['includes']('..'))throw new ValidationError('Invalid\x20setting\x20key:\x20'+c);await E['pg'][e(0x15d)]('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.settings\x20(resource,\x20resource_id,\x20key,\x20value,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(\x27system\x27,\x20NULL,\x20$1,\x20$2::jsonb,\x20$3)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT\x20(resource,\x20resource_id,\x20key)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20DO\x20UPDATE\x20SET\x20value\x20=\x20EXCLUDED.value,\x20updated_by\x20=\x20EXCLUDED.updated_by,\x20updated_at\x20=\x20now()\x0a\x20\x20\x20\x20\x20\x20\x20\x20',[c,JSON['stringify'](t),L['user']['id']]);}return{'success':!![]};}function O(L,E){L=L-0x15c;const c=Z();let t=c[L];return t;}function Z(){const B=['trim','query'];Z=function(){return B;};return Z();}
@@ -1 +1 @@
1
- import{ForbiddenError}from'../../errors.js';function p(d,X){d=d-0xe5;var F=D();var a=F[d];return a;}function D(){var a=['Admin\x20access\x20required','type','admin','permissions','Missing\x20permission:\x20'];D=function(){return a;};return D();}export function requireAdmin(d,X){var F=p;if(!d)throw new ForbiddenError('User\x20required');if(d['type']!=='admin')throw new ForbiddenError(F(0xe5));if(d[F(0xe6)]!==F(0xe7)&&X&&!d[F(0xe8)]?.['includes'](X))throw new ForbiddenError(F(0xe9)+X);}
1
+ function Z(){var t=['admin'];Z=function(){return t;};return Z();}function O(L,E){L=L-0x1c8;var c=Z();var t=c[L];return t;}import{ForbiddenError}from'../../errors.js';export function requireAdmin(L,E){var c=O;if(!L)throw new ForbiddenError('User\x20required');if(L['type']!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(L['type']!==c(0x1c8)&&E&&!L['permissions']?.['includes'](E))throw new ForbiddenError('Missing\x20permission:\x20'+E);}
@@ -1 +1 @@
1
- function p(d,X){d=d-0x14f;const F=D();let a=F[d];return a;}export const safeUser=d=>{const s=p,X=['password','salt','secret','credentials'];return Object['fromEntries'](Object['entries'](d)[s(0x14f)](([F])=>!X[s(0x150)](a=>F['toLowerCase']()[s(0x151)](a))));};function D(){const y=['filter','some','includes'];D=function(){return y;};return D();}
1
+ function Z(){const B=['some'];Z=function(){return B;};return Z();}function O(L,E){L=L-0x156;const c=Z();let t=c[L];return t;}export const safeUser=L=>{const e=O,E=['password','salt','secret','credentials'];return Object['fromEntries'](Object['entries'](L)['filter'](([c])=>!E[e(0x156)](t=>c['toLowerCase']()['includes'](t))));};
@@ -1 +1 @@
1
- import{UnsupportedError}from'../../errors.js';export function unsupported(d){throw new UnsupportedError(d+'\x20requires\x20a\x20project/provider\x20implementation');}
1
+ function O(L,E){L=L-0xc8;var c=Z();var t=c[L];return t;}import{UnsupportedError}from'../../errors.js';function Z(){var c=['\x20requires\x20a\x20project/provider\x20implementation'];Z=function(){return c;};return Z();}export function unsupported(L){var E=O;throw new UnsupportedError(L+E(0xc8));}
@@ -1 +1 @@
1
- import{writeAudit}from'./services/write-audit.js';export function createAudit(d){const X=writeAudit(d);return{'write':X};}
1
+ import{writeAudit}from'./services/write-audit.js';export function createAudit(L){const E=writeAudit(L);return{'write':E};}
@@ -13,7 +13,7 @@ export interface AuditChange {
13
13
  newValue?: unknown;
14
14
  }
15
15
  export interface AuditEvent extends AuditActor {
16
- module: string;
16
+ module?: string;
17
17
  resource: string;
18
18
  resourceId?: string | number;
19
19
  action: AuditAction;
@@ -1 +1 @@
1
- {"version":3,"file":"audit.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/audit/audit.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AACjC,MAAM,WAAW,UAAU;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AACD,MAAM,WAAW,WAAW;IACxB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7C"}
1
+ {"version":3,"file":"audit.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/audit/audit.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AACjC,MAAM,WAAW,UAAU;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AACD,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AACD,MAAM,WAAW,WAAW;IACxB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC7C"}
@@ -1 +1 @@
1
- const secretPattern=/password|token|secret|credential|salt/i;function clean(d){const G=p;if(Array['isArray'](d))return d['map'](clean);if(d&&typeof d==='object')return Object[G(0x16f)](Object['entries'](d)['map'](([X,F])=>[X,secretPattern['test'](X)?'[REDACTED]':clean(F)]));return d;}export function writeAudit(d){let X,F;async function a(){const b=p;if(!d['pg'])return![];if(X!==undefined)return X;return F??=d['pg']['query'](b(0x170))['then'](s=>{const H=b,y=new Set(s['rows']['map'](k=>k[H(0x171)]));return X=y[H(0x172)](H(0x173))&&y[H(0x172)]('audit_log_data'),!X&&d['logger']['warn']({'expectedTables':['admin.audit_log',H(0x174)],'foundTables':[...y]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),X;})['catch'](s=>{return X=![],d['logger']['warn']({'err':s},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),F;}return async function s(y){const T=p;if(!await a())return d['logger'][T(0x175)]({'auditFallback':!![],'event':clean({...y,'changes':y['changes']?.['map'](f=>({...f,'oldValue':clean(f['oldValue']),'newValue':clean(f[T(0x176)])}))})},'audit'),0x0;if(!d['pg'])throw new Error('empty\x20pg');const k=await d['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',[y['userId']??null,y['module'],y['resource'],y[T(0x177)]==null?null:String(y['resourceId']),y['fields']??null,y['action'],y['requestId']??null,y[T(0x178)]??null,clean(y[T(0x179)]??{})]),q=k['rows'][0x0]['id'];for(const f of y[T(0x17a)]??[]){if(secretPattern['test'](f['field']))continue;await d['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.audit_log_data\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20audit_log_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20field,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20old_value,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20new_value\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20',[q,f['field'],JSON['stringify'](clean(f['oldValue'])),JSON['stringify'](clean(f['newValue']))]);}return q;};}function p(d,X){d=d-0x16f;const F=D();let a=F[d];return a;}function D(){const W=['fromEntries','\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','table_name','has','audit_log','admin.audit_log_data','info','newValue','resourceId','ipAddress','metadata','changes'];D=function(){return W;};return D();}
1
+ const secretPattern=/password|token|secret|credential|salt/i;function Z(){const f=['isArray','fromEntries','test','[REDACTED]','rows','map','table_name','has','audit_log','audit_log_data','catch','changes','oldValue','audit','userId','resourceId','fields','field','\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'];Z=function(){return f;};return Z();}function O(L,E){L=L-0x189;const c=Z();let t=c[L];return t;}function clean(L){const j=O;if(Array[j(0x189)](L))return L['map'](clean);if(L&&typeof L==='object')return Object[j(0x18a)](Object['entries'](L)['map'](([E,c])=>[E,secretPattern[j(0x18b)](E)?j(0x18c):clean(c)]));return L;}export function writeAudit(L){let E,c;async function t(){const I=O;if(!L['pg'])return![];if(E!==undefined)return E;return c??=L['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20table_name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20information_schema.tables\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20table_schema\x20=\x20\x27admin\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20table_name\x20IN\x20(\x27audit_log\x27,\x20\x27audit_log_data\x27)\x0a\x20\x20\x20\x20\x20\x20\x20\x20')['then'](e=>{const F=O,B=new Set(e[F(0x18d)][F(0x18e)](g=>g[F(0x18f)]));return E=B[F(0x190)](F(0x191))&&B['has'](F(0x192)),!E&&L['logger']['warn']({'expectedTables':['admin.audit_log','admin.audit_log_data'],'foundTables':[...B]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),E;})[I(0x193)](e=>{return E=![],L['logger']['warn']({'err':e},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),c;}return async function e(B){const T=O;if(!await t())return L['logger']['info']({'auditFallback':!![],'event':clean({...B,'changes':B[T(0x194)]?.[T(0x18e)](X=>({...X,'oldValue':clean(X[T(0x195)]),'newValue':clean(X['newValue'])}))})},T(0x196)),0x0;if(!L['pg'])throw new Error('empty\x20pg');const g=await L['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.audit_log\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resource,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resource_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20request_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ip_address,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20metadata\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5,\x20$6,\x20$7,\x20$8,\x20$9)\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20id\x0a\x20\x20\x20\x20\x20\x20',[B[T(0x197)]??null,B['module'],B['resource'],B[T(0x198)]==null?null:String(B['resourceId']),B[T(0x199)]??null,B['action'],B['requestId']??null,B['ipAddress']??null,clean(B['metadata']??{})]),r=g['rows'][0x0]['id'];for(const X of B[T(0x194)]??[]){if(secretPattern['test'](X[T(0x19a)]))continue;await L['pg']['query'](T(0x19b),[r,X['field'],JSON['stringify'](clean(X['oldValue'])),JSON['stringify'](clean(X['newValue']))]);}return r;};}
@@ -1 +1 @@
1
- function p(d,X){d=d-0x13c;const F=D();let a=F[d];return a;}export async function getUserPermissions(d,X){const s=p,F=await X['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20SELECT\x20DISTINCT\x20ra.resource\x20||\x20\x27:\x27\x20||\x20action\x20AS\x20permission\x0a\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20LEFT\x20JOIN\x20admin.user_roles\x20ur\x20ON\x20ur.role_id\x20=\x20ra.role_id\x0a\x20\x20\x20\x20\x20\x20CROSS\x20JOIN\x20LATERAL\x20unnest(COALESCE(ra.actions,\x20\x27{}\x27::text[]))\x20AS\x20action\x0a\x20\x20\x20\x20\x20\x20WHERE\x20ra.user_uid\x20=\x20$1\x20OR\x20ur.user_uid\x20=\x20$1\x0a\x20\x20\x20\x20',[d]);return F['rows'][s(0x13c)](a=>a[s(0x13d)]);}function D(){const y=['map','permission'];D=function(){return y;};return D();}
1
+ function O(L,E){L=L-0x188;const c=Z();let t=c[L];return t;}export async function getUserPermissions(L,E){const e=O,c=await E['pg']['query'](e(0x188),[L]);return c[e(0x189)]['map'](t=>t[e(0x18a)]);}function Z(){const B=['\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','rows','permission'];Z=function(){return B;};return Z();}
@@ -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 X from'@fastify/cookie';function p(d,X){d=d-0x19e;const F=D();let a=F[d];return a;}import F from'@fastify/session';import{Authenticator}from'@fastify/passport';function D(){const v=['scrypt$','toString','hex','scrypt','length','auth','cookieOptions','secret','database','register','secureSession','registerUserDeserializer'];D=function(){return v;};return D();}import a 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(s){const T=p,y=randomBytes(0x10),k=await scrypt(s,y,0x40);return T(0x19e)+y[T(0x19f)](T(0x1a0))+'$'+k[T(0x19f)]('hex');}export async function verifyPassword(s,y){const W=p,[k,q,f]=y?.['split']('$')||[];if(k!==W(0x1a1)||!q||!f)return![];const G=Buffer['from'](q,'hex'),b=Buffer['from'](f,W(0x1a0)),H=await scrypt(s,G,b[W(0x1a2)]);return timingSafeEqual(H,b);}export async function createSessionStore(s,y){const P=p,{config:k,redis:q}=y;if(!k||!q){console['warn']('Missing\x20config\x20or\x20redis\x20-\x20skipping\x20session\x20store\x20creation');return;}if(process.env.NODE_ENV==='test'||process.env.VITEST)return;await s['register'](X,{'parseOptions':k[P(0x1a3)][P(0x1a4)]}),await s['register'](F,{'secret':k['auth'][P(0x1a5)],'cookieName':k[P(0x1a3)]['cookieName'],'cookie':k[P(0x1a3)]['cookieOptions'],'store':new a({'prefix':k[P(0x1a3)]['cookieName']+':'+(k['pg']?.[P(0x1a6)]||'db')+':','client':q})}),await s[P(0x1a7)](fastifyPassport['initialize']()),await s['register'](fastifyPassport[P(0x1a8)]()),fastifyPassport['registerUserSerializer'](async f=>({'user':f})),fastifyPassport[P(0x1a9)](async f=>{const G=f?.['user']||f;return G?.['id']&&(G['permissions']=await getUserPermissions(G['id'],y)),G;});}
1
+ function O(L,E){L=L-0xa0;const c=Z();let t=c[L];return t;}export*from'./auth.types.js';import{randomBytes,scrypt as L,timingSafeEqual}from'node:crypto';import{promisify}from'node:util';const scrypt=promisify(L);import E from'@fastify/cookie';import c from'@fastify/session';import{Authenticator}from'@fastify/passport';import t 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 Z(){const x=['scrypt$','toString','from','test','auth','cookieOptions','database','initialize','register','user'];Z=function(){return x;};return Z();}export async function hashPassword(e){const T=O,B=randomBytes(0x10),g=await scrypt(e,B,0x40);return T(0xa0)+B['toString']('hex')+'$'+g[T(0xa1)]('hex');}export async function verifyPassword(e,B){const f=O,[g,r,X]=B?.['split']('$')||[];if(g!=='scrypt'||!r||!X)return![];const j=Buffer[f(0xa2)](r,'hex'),F=Buffer['from'](X,'hex'),I=await scrypt(e,j,F['length']);return timingSafeEqual(I,F);}export async function createSessionStore(e,B){const A=O,{config:g,redis:r}=B;if(!g||!r){console['warn']('Missing\x20config\x20or\x20redis\x20-\x20skipping\x20session\x20store\x20creation');return;}if(process.env.NODE_ENV===A(0xa3)||process.env.VITEST)return;await e['register'](E,{'parseOptions':g[A(0xa4)]['cookieOptions']}),await e['register'](c,{'secret':g['auth']['secret'],'cookieName':g['auth']['cookieName'],'cookie':g['auth'][A(0xa5)],'store':new t({'prefix':g[A(0xa4)]['cookieName']+':'+(g['pg']?.[A(0xa6)]||'db')+':','client':r})}),await e['register'](fastifyPassport[A(0xa7)]()),await e[A(0xa8)](fastifyPassport['secureSession']()),fastifyPassport['registerUserSerializer'](async X=>({'user':X})),fastifyPassport['registerUserDeserializer'](async X=>{const G=A,j=X?.[G(0xa9)]||X;return j?.['id']&&(j['permissions']=await getUserPermissions(j['id'],B)),j;});}
@@ -1 +1 @@
1
- function D(){const H=['auth/warn'];D=function(){return H;};return D();}import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';function p(d,X){d=d-0x97;const F=D();let a=F[d];return a;}export async function verifyUser({user:d,password:X,ip:F},{pg:a,logger:s}){const b=p;if(!d||d==='')throw new BadRequestError('not\x20enough\x20params:\x20user');if(!X||X==='')throw new BadRequestError('not\x20enough\x20params:\x20password');s['metrics']('user.login');const y='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',k=await a['query'](y,[d])['then'](f=>f['rows']?.[0x0]);if(!k){const f='user\x20not\x20found';s['info']({'file':'auth/warn','error':f,'user':d,'ip':F});throw new BadRequestError(f);}const q=await verifyPassword(X,k['password_hash']);if(!q){const G='Wrong\x20password';s['info']({'file':b(0x97),'error':G,'user':d,'ip':F});throw new BadRequestError(G);}return delete k['password_hash'],k;}
1
+ import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';function O(L,E){L=L-0x1c6;const c=Z();let t=c[L];return t;}function Z(){const I=['query','rows','info','auth/warn'];Z=function(){return I;};return Z();}export async function verifyUser({user:L,password:E,ip:c},{pg:t,logger:e}){const F=O;if(!L||L==='')throw new BadRequestError('not\x20enough\x20params:\x20user');if(!E||E==='')throw new BadRequestError('not\x20enough\x20params:\x20password');e['metrics']('user.login');const B='select\x20uid\x20as\x20id,\x20user_type\x20as\x20type,\x20password_hash,\x20twofa\x20from\x20admin.users\x20where\x20$1\x20in\x20(login,email,phone)\x20and\x20enabled\x20limit\x201',g=await t[F(0x1c6)](B,[L])['then'](X=>X[F(0x1c7)]?.[0x0]);if(!g){const X='user\x20not\x20found';e[F(0x1c8)]({'file':F(0x1c9),'error':X,'user':L,'ip':c});throw new BadRequestError(X);}const r=await verifyPassword(E,g['password_hash']);if(!r){const j='Wrong\x20password';e[F(0x1c8)]({'file':'auth/warn','error':j,'user':L,'ip':c});throw new BadRequestError(j);}return delete g['password_hash'],g;}
@@ -1 +1 @@
1
- import{ConflictError,NotFoundError,ValidationError}from'../errors.js';const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;function p(d,X){d=d-0xfc;const F=D();let a=F[d];return a;}function D(){const Z=['empty\x20pg','query','rows','isArray','items','code','get','length','set','Dictionary\x20not\x20found:\x20','fcore','COMMIT','delete','has','push'];D=function(){return Z;};return D();}export function createDictionary({pg:d,dictionaries:dictionaries=[]}){const X=new Map(),F=new Map();let a,s;async function y(){const I=p;if(a!==undefined)return a;if(!d)throw new Error(I(0xfc));return s??=d[I(0xfd)]('\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'](P=>{const x=I,v=P[x(0xfe)][0x0]?.['table_name'];a=v==='dictionaries'?v:null;}),await s,a;}function k(P){if(!dictionaryName['test'](P))throw new ValidationError('Invalid\x20dictionary\x20name:\x20'+P);}function q(P){const o=p;for(const v of Array[o(0xff)](P)?P:[P]){k(v['code']);if(!Array['isArray'](v[o(0x100)]))throw new ValidationError('Invalid\x20dictionary\x20items:\x20'+v['code']);if(X['has'](v[o(0x101)]))throw new ConflictError('Dictionary\x20already\x20registered:\x20'+v[o(0x101)]);X['set'](v['code'],{...v,'source':'static'});}}function f(P){return X['has'](P);}async function G(P){const B=p;k(P);const v=X[B(0x102)](P);if(v&&v['checked'])return v[B(0x100)];const J=await y();if(!J)throw new NotFoundError('Dictionary\x20table\x20not\x20found');const R=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',[P]);if(R?.['rows']?.[B(0x103)]){const V=R?.['rows'];return X[B(0x104)](P,{'code':P,'name':P,'items':V,'source':'database','checked':!![]}),V;}if(!v?.['items'])throw new NotFoundError(B(0x105)+P);return v['checked']=!![],v['items'];}async function b(P,v){const N=p;k(P);if(!Array['isArray'](v))throw new ValidationError('Dictionary\x20items\x20must\x20be\x20an\x20array');const J=await y();if(!J)throw new NotFoundError('Dictionary\x20table\x20not\x20found');if(!d)throw new Error('empty\x20pg');const R=await d['connect']();try{await R['query']('BEGIN');const V=await R['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.dictionaries\x20(code,\x20name,\x20module,\x20source,\x20editable)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT\x20(code)\x20DO\x20UPDATE\x20SET\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20name\x20=\x20EXCLUDED.name,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module\x20=\x20EXCLUDED.module,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20source\x20=\x20EXCLUDED.source,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20editable\x20=\x20EXCLUDED.editable,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20updated_at\x20=\x20now()\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20id\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',[P,P,N(0x106),'custom',!![]]),M=V[N(0xfe)][0x0]['id'];await R[N(0xfd)]('DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1',[M]);for(const z of v){await R['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.dictionary_items\x20(dictionary_id,\x20code,\x20name,\x20parent_id)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20',[M,z['code'],z['name'],z['parentId']??null]);}await R['query'](N(0x107));}catch(U){await R['query']('ROLLBACK');throw U;}finally{R['release']();}X['set'](P,{'items':v,'code':P,'source':'static','checked':!![]}),F[N(0x104)](P,(F['get'](P)??0x0)+0x1);}function H(P){const C=p;return k(P),F['set'](P,(F[C(0x102)](P)??0x0)+0x1),X[C(0x108)](P);}function T(P){const L=p;return F[L(0x102)](P)??0x0;}async function W(){const l=p,P=[...X['values']()]['map'](({code:R,name:V,source:M})=>({'code':R,'name':V??R,'source':M})),v=await y();if(!v)return P;if(!d)throw new Error(l(0xfc));const J=await d['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 J['rows']){!X[l(0x109)](R[l(0x101)])&&P[l(0x10a)](R);}return P;}return q(dictionaries),{'register':q,'get':G,'put':b,'clear':H,'revision':T,'list':W,'has':f};}
1
+ import{ConflictError,NotFoundError,ValidationError}from'../errors.js';const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;export function createDictionary({pg:L,dictionaries:dictionaries=[]}){const E=new Map(),c=new Map();let t,e;async function B(){const h=O;if(t!==undefined)return t;if(!L)throw new Error('empty\x20pg');return e??=L[h(0xae)]('\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')[h(0xaf)](A=>{const w=h,G=A[w(0xb0)][0x0]?.[w(0xb1)];t=G==='dictionaries'?G:null;}),await e,t;}function g(A){if(!dictionaryName['test'](A))throw new ValidationError('Invalid\x20dictionary\x20name:\x20'+A);}function r(A){const S=O;for(const G of Array[S(0xb2)](A)?A:[A]){g(G['code']);if(!Array['isArray'](G['items']))throw new ValidationError(S(0xb3)+G['code']);if(E['has'](G['code']))throw new ConflictError('Dictionary\x20already\x20registered:\x20'+G[S(0xb4)]);E[S(0xb5)](G[S(0xb4)],{...G,'source':'static'});}}function X(A){return E['has'](A);}async function j(A){const D=O;g(A);const G=E['get'](A);if(G&&G[D(0xb6)])return G['items'];const x=await B();if(!x)throw new NotFoundError('Dictionary\x20table\x20not\x20found');const W=await L?.[D(0xae)](D(0xb7),[A]);if(W?.['rows']?.['length']){const q=W?.[D(0xb0)];return E['set'](A,{'code':A,'name':A,'items':q,'source':'database','checked':!![]}),q;}if(!G?.['items'])throw new NotFoundError('Dictionary\x20not\x20found:\x20'+A);return G['checked']=!![],G[D(0xb8)];}async function F(A,G){const u=O;g(A);if(!Array[u(0xb2)](G))throw new ValidationError('Dictionary\x20items\x20must\x20be\x20an\x20array');const x=await B();if(!x)throw new NotFoundError('Dictionary\x20table\x20not\x20found');if(!L)throw new Error(u(0xb9));const W=await L['connect']();try{await W['query']('BEGIN');const q=await W[u(0xae)]('\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',[A,A,'fcore','custom',!![]]),y=q['rows'][0x0]['id'];await W['query']('DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1',[y]);for(const p of G){await W['query'](u(0xba),[y,p[u(0xb4)],p['name'],p[u(0xbb)]??null]);}await W['query']('COMMIT');}catch(Y){await W['query']('ROLLBACK');throw Y;}finally{W['release']();}E[u(0xb5)](A,{'items':G,'code':A,'source':'static','checked':!![]}),c['set'](A,(c['get'](A)??0x0)+0x1);}function I(A){return g(A),c['set'](A,(c['get'](A)??0x0)+0x1),E['delete'](A);}function T(A){return c['get'](A)??0x0;}async function f(){const A=[...E['values']()]['map'](({code:W,name:q,source:y})=>({'code':W,'name':q??W,'source':y})),G=await B();if(!G)return A;if(!L)throw new Error('empty\x20pg');const x=await L['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 W of x['rows']){!E['has'](W['code'])&&A['push'](W);}return A;}return r(dictionaries),{'register':r,'get':j,'put':F,'clear':I,'revision':T,'list':f,'has':X};}function O(L,E){L=L-0xae;const c=Z();let t=c[L];return t;}function Z(){const U=['query','then','rows','table_name','isArray','Invalid\x20dictionary\x20items:\x20','code','set','checked','\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','items','empty\x20pg','\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','parentId'];Z=function(){return U;};return Z();}
@@ -1 +1 @@
1
- import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';import d from'node:crypto';function D(){const R=['startsWith','transformToByteArray','endpoint','us-east-1','accessKey','accessKeyId','secretKey','send','$metadata','name','createHmac','sha256','base64url','Invalid\x20file\x20token','from','utf8'];D=function(){return R;};return D();}import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function p(d,X){d=d-0x118;const F=D();let a=F[d];return a;}function keyFor(X,F){const H=p;if(!F||F[H(0x118)]('/')||F['includes']('..'))throw new ValidationError('Invalid\x20file\x20path');const a=F['replace'](/\\/g,'/')['replace'](/^\/+/,''),s=(X??'')['replace'](/^\/+|\/+$/g,'');return s?s+'/'+a:a;}async function bodyToBuffer(X){const T=p;if(!X)return Buffer['alloc'](0x0);const F=X;if(typeof F[T(0x119)]==='function')return Buffer['from'](await F['transformToByteArray']());const a=[];for await(const s of X){a['push'](Buffer['from'](s));}return Buffer['concat'](a);}export function createFileS3(X){const W=p,F=X['tokenSecret']??process.env.FILE_TOKEN_SECRET??d['randomBytes'](0x20)['toString']('hex'),a=new S3Client({'endpoint':X[W(0x11a)],'region':X['region']??W(0x11b),'forcePathStyle':X['forcePathStyle']??!![],'credentials':X['accessKeyId']||X[W(0x11c)]?{'accessKeyId':X[W(0x11d)]??X[W(0x11c)],'secretAccessKey':X['secretAccessKey']??X[W(0x11e)]}:undefined}),s=y=>keyFor(X['folder'],y);return{async 'put'(y,k){await a['send'](new PutObjectCommand({'Bucket':X['bucket'],'Key':s(y),'Body':k}));},async 'get'(y){const k=await a['send'](new GetObjectCommand({'Bucket':X['bucket'],'Key':s(y)}));return bodyToBuffer(k['Body']);},async 'exists'(y){const P=W;try{return await a[P(0x11f)](new HeadObjectCommand({'Bucket':X['bucket'],'Key':s(y)})),!![];}catch(k){const q=k;if(q[P(0x120)]?.['httpStatusCode']===0x194||q[P(0x121)]==='NotFound')return![];throw k;}},async 'delete'(y){await a['send'](new DeleteObjectCommand({'Bucket':X['bucket'],'Key':s(y)}));},'create'(y,k=X['tokenTtl']??0xe10){const v=W,q=Buffer['from'](y)['toString']('base64url'),f=d[v(0x122)](v(0x123),F)['update'](q)['digest'](v(0x124));return q+'.'+f;},'verify'(y){const J=W,[k,q]=y['split']('.');if(!k||!q)throw new UnauthorizedError(J(0x125));const f=d[J(0x122)](J(0x123),F)['update'](k)['digest'](),G=Buffer[J(0x126)](q,'base64url');if(f['length']!==G['length']||!d['timingSafeEqual'](f,G))throw new UnauthorizedError('Invalid\x20file\x20token');const b=Buffer[J(0x126)](k,'base64url')['toString'](J(0x127));return b;}};}
1
+ import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';function Z(){const q=['startsWith','includes','replace','transformToByteArray','push','from','concat','toString','us-east-1','forcePathStyle','bucket','Body','httpStatusCode','tokenTtl','base64url','createHmac','sha256','Invalid\x20file\x20token','digest','length'];Z=function(){return q;};return Z();}import L from'node:crypto';import{ValidationError}from'../errors.js';function O(L,E){L=L-0xec;const c=Z();let t=c[L];return t;}import{UnauthorizedError}from'../errors.js';function keyFor(E,c){const I=O;if(!c||c[I(0xec)]('/')||c[I(0xed)]('..'))throw new ValidationError('Invalid\x20file\x20path');const t=c['replace'](/\\/g,'/')[I(0xee)](/^\/+/,''),e=(E??'')['replace'](/^\/+|\/+$/g,'');return e?e+'/'+t:t;}async function bodyToBuffer(E){const T=O;if(!E)return Buffer['alloc'](0x0);const c=E;if(typeof c[T(0xef)]==='function')return Buffer['from'](await c['transformToByteArray']());const t=[];for await(const e of E){t[T(0xf0)](Buffer[T(0xf1)](e));}return Buffer[T(0xf2)](t);}export function createFileS3(E){const f=O,c=E['tokenSecret']??process.env.FILE_TOKEN_SECRET??L['randomBytes'](0x20)[f(0xf3)]('hex'),t=new S3Client({'endpoint':E['endpoint'],'region':E['region']??f(0xf4),'forcePathStyle':E[f(0xf5)]??!![],'credentials':E['accessKeyId']||E['accessKey']?{'accessKeyId':E['accessKeyId']??E['accessKey'],'secretAccessKey':E['secretAccessKey']??E['secretKey']}:undefined}),e=B=>keyFor(E['folder'],B);return{async 'put'(B,g){await t['send'](new PutObjectCommand({'Bucket':E['bucket'],'Key':e(B),'Body':g}));},async 'get'(B){const A=f,g=await t['send'](new GetObjectCommand({'Bucket':E[A(0xf6)],'Key':e(B)}));return bodyToBuffer(g[A(0xf7)]);},async 'exists'(B){const G=f;try{return await t['send'](new HeadObjectCommand({'Bucket':E['bucket'],'Key':e(B)})),!![];}catch(g){const r=g;if(r['$metadata']?.[G(0xf8)]===0x194||r['name']==='NotFound')return![];throw g;}},async 'delete'(B){await t['send'](new DeleteObjectCommand({'Bucket':E['bucket'],'Key':e(B)}));},'create'(B,g=E[f(0xf9)]??0xe10){const x=f,r=Buffer['from'](B)['toString'](x(0xfa)),X=L[x(0xfb)](x(0xfc),c)['update'](r)['digest']('base64url');return r+'.'+X;},'verify'(B){const W=f,[g,r]=B['split']('.');if(!g||!r)throw new UnauthorizedError(W(0xfd));const X=L['createHmac']('sha256',c)['update'](g)[W(0xfe)](),j=Buffer[W(0xf1)](r,'base64url');if(X[W(0xff)]!==j['length']||!L['timingSafeEqual'](X,j))throw new UnauthorizedError('Invalid\x20file\x20token');const F=Buffer['from'](g,'base64url')[W(0xf3)]('utf8');return F;}};}
@@ -1 +1 @@
1
- import{SignJWT,jwtVerify}from'jose';const secret=new TextEncoder()['encode'](process.env.AUTH_JWT_SECRET);export async function jwtSignToken(d){const y=p;if(!process.env.AUTH_JWT_SECRET)return;const {id:X,type:F,permissions:a}=d,s=await new SignJWT({'id':X,'type':F,'permissions':a})['setProtectedHeader']({'alg':y(0x105)})['setIssuedAt']()[y(0x106)]('1h')['sign'](secret);return s;}function p(d,X){d=d-0x105;const F=D();let a=F[d];return a;}export async function jwtVerifyToken(d){const q=p,X=await jwtVerify(d,secret,{'algorithms':['HS256']})['catch'](F=>{const k=p;console['log'](F[k(0x107)]);});return X?.[q(0x108)];}function D(){const f=['HS256','setExpirationTime','message','payload'];D=function(){return f;};return D();}
1
+ import{SignJWT,jwtVerify}from'jose';function O(L,E){L=L-0xf2;const c=Z();let t=c[L];return t;}const secret=new TextEncoder()['encode'](process.env.AUTH_JWT_SECRET);function Z(){const g=['setIssuedAt'];Z=function(){return g;};return Z();}export async function jwtSignToken(L){const B=O;if(!process.env.AUTH_JWT_SECRET)return;const {id:E,type:c,permissions:t}=L,e=await new SignJWT({'id':E,'type':c,'permissions':t})['setProtectedHeader']({'alg':'HS256'})[B(0xf2)]()['setExpirationTime']('1h')['sign'](secret);return e;}export async function jwtVerifyToken(L){const E=await jwtVerify(L,secret,{'algorithms':['HS256']})['catch'](c=>{console['log'](c['message']);});return E?.['payload'];}
@@ -1 +1 @@
1
- function p(d,X){d=d-0x1ae;const F=D();let a=F[d];return a;}import d from'pino';export function createLogger(){const q=p,X=d[q(0x1ae)]({'target':q(0x1af)}),F=d({'level':'info','timestamp':d['stdTimeFunctions'][q(0x1b0)],'base':{'service':q(0x1b1)},'redact':{'paths':['req.headers.authorization','password',q(0x1b2),'accessToken','refreshToken'],'censor':'[REDACTED]'}},X),a={};function s(y,k){if(y===undefined)return{...a};a[y]=(a[y]??0x0)+(k??0x1);}return Object['assign'](F,{'close':async()=>X['end'](),'metrics':s,'file':()=>F['info']['bind'](F)});}function D(){const f=['transport','./transport.js','isoTime','app','token'];D=function(){return f;};return D();}
1
+ import L from'pino';function Z(){const X=['transport','./transport.js','password','token','refreshToken','bind'];Z=function(){return X;};return Z();}function O(L,E){L=L-0xba;const c=Z();let t=c[L];return t;}export function createLogger(){const r=O,E=L[r(0xba)]({'target':r(0xbb)}),c=L({'level':'info','timestamp':L['stdTimeFunctions']['isoTime'],'base':{'service':'app'},'redact':{'paths':['req.headers.authorization',r(0xbc),r(0xbd),'accessToken',r(0xbe)],'censor':'[REDACTED]'}},E),t={};function e(B,g){if(B===undefined)return{...t};t[B]=(t[B]??0x0)+(g??0x1);}return Object['assign'](c,{'close':async()=>E['end'](),'metrics':e,'file':()=>c['info'][r(0xbf)](c)});}
@@ -1 +1 @@
1
- const q=p;function p(d,X){d=d-0x1d4;const F=D();let a=F[d];return a;}import d from'node:fs';import X from'node:path';import F from'pino-abstract-transport';const LEVELS={0x1e:q(0x1d4),0x28:'warn',0x32:'error',0x3c:q(0x1d5)},streams=new Map();function getDate(){return new Date()['toISOString']()['slice'](0x0,0xa);}function D(){const b=['info','error','mkdirSync','join','get','date'];D=function(){return b;};return D();}function createStream(a,s){const f=q,y=X['resolve']('logs',a);return d[f(0x1d6)](y,{'recursive':!![]}),d['createWriteStream'](X[f(0x1d7)](y,s+'.log'),{'flags':'a'});}function getStream(a){const G=q,s=getDate(),y=streams[G(0x1d8)](a);if(y&&y[G(0x1d9)]===s)return y['stream'];y?.['stream']['end']();const k=createStream(a,s);return streams['set'](a,{'date':s,'stream':k}),k;}function closeStreams(){for(const {stream:a}of streams['values']()){a['end']();}streams['clear']();}export default async function loggerTransport(){return F(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(a){for await(const s of a){const y=LEVELS[s['level']];if(!y)continue;const k=getStream(s['file']||y);delete s['file'],k['write'](JSON['stringify'](s)+'\x0a');}}
1
+ function Z(){const T=['slice','mkdirSync','createWriteStream','.log','stream','set','clear','file'];Z=function(){return T;};return Z();}import L from'node:fs';import E from'node:path';import c from'pino-abstract-transport';const LEVELS={0x1e:'info',0x28:'warn',0x32:'error',0x3c:'error'},streams=new Map();function getDate(){const r=O;return new Date()['toISOString']()[r(0x18e)](0x0,0xa);}function createStream(t,e){const X=O,B=E['resolve']('logs',t);return L[X(0x18f)](B,{'recursive':!![]}),L[X(0x190)](E['join'](B,e+X(0x191)),{'flags':'a'});}function getStream(t){const j=O,e=getDate(),B=streams['get'](t);if(B&&B['date']===e)return B['stream'];B?.[j(0x192)]['end']();const g=createStream(t,e);return streams[j(0x193)](t,{'date':e,'stream':g}),g;}function closeStreams(){const F=O;for(const {stream:t}of streams['values']()){t['end']();}streams[F(0x194)]();}function O(L,E){L=L-0x18e;const c=Z();let t=c[L];return t;}export default async function loggerTransport(){return c(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(t){const I=O;for await(const e of t){const B=LEVELS[e['level']];if(!B)continue;const g=getStream(e['file']||B);delete e[I(0x195)],g['write'](JSON['stringify'](e)+'\x0a');}}
@@ -1 +1 @@
1
- import d from'pg';function D(){const v=['catch','callerStack','transaction','query','ROLLBACK'];D=function(){return v;};return D();}const {Pool}=d;function p(d,X){d=d-0x1be;const F=D();let a=F[d];return a;}export function createDatabase(X){const W=p,F=new Pool(X),a=F['query']['bind'](F);function s(y,k){const H=p,q=new Error();return Error['captureStackTrace']?.(q,s),a(y,k)[H(0x1be)](f=>{const T=H,G=f;G['sql']=y,G[T(0x1bf)]=q['stack'];throw G;});}return F['query']=s,F[W(0x1c0)]=async function(y){const P=W,k=new Error();Error['captureStackTrace']?.(k,F[P(0x1c0)]);const q=await F['connect']();try{await q['query']('BEGIN');const f=await y(q);return await q['query']('COMMIT'),f;}catch(G){await q[P(0x1c1)](P(0x1c2));const b=G;b['callerStack']=k['stack'];throw b;}finally{q['release']();}},F;}
1
+ import L from'pg';function Z(){const A=['query','bind','captureStackTrace','transaction','connect','BEGIN','ROLLBACK'];Z=function(){return A;};return Z();}const {Pool}=L;function O(L,E){L=L-0x6a;const c=Z();let t=c[L];return t;}export function createDatabase(E){const I=O,c=new Pool(E),t=c[I(0x6a)][I(0x6b)](c);function e(B,g){const T=I,r=new Error();return Error[T(0x6c)]?.(r,e),t(B,g)['catch'](X=>{const j=X;j['sql']=B,j['callerStack']=r['stack'];throw j;});}return c[I(0x6a)]=e,c['transaction']=async function(B){const f=I,g=new Error();Error[f(0x6c)]?.(g,c[f(0x6d)]);const r=await c[f(0x6e)]();try{await r['query'](f(0x6f));const X=await B(r);return await r['query']('COMMIT'),X;}catch(j){await r['query'](f(0x70));const F=j;F['callerStack']=g['stack'];throw F;}finally{r['release']();}},c;}
@@ -1 +1 @@
1
- import{Redis}from'ioredis';export function createRedis(d){const k=p,X=new Redis(d);return{'get':F=>X[k(0x17f)](F),'set':(F,a,s,y)=>{const q=k;if(y)return X['set'](F,a,'EX',y);if(typeof s===q(0x180))return X['set'](F,a,'EX',s);return X['set'](F,a);},'del':F=>X['del'](F),'delete':F=>X['del'](F),'close':()=>X['quit'](),'ping':()=>X['ping'](),'hincrby':(F,a,s)=>X[k(0x181)](F,a,s),'incrby':(F,a)=>X['incrby'](F,a)};}function p(d,X){d=d-0x17f;const F=D();let a=F[d];return a;}function D(){const f=['get','number','hincrby'];D=function(){return f;};return D();}
1
+ import{Redis}from'ioredis';function O(L,E){L=L-0xc6;const c=Z();let t=c[L];return t;}function Z(){const r=['del','ping'];Z=function(){return r;};return Z();}export function createRedis(L){const g=O,E=new Redis(L);return{'get':c=>E['get'](c),'set':(c,t,e,B)=>{if(B)return E['set'](c,t,'EX',B);if(typeof e==='number')return E['set'](c,t,'EX',e);return E['set'](c,t);},'del':c=>E['del'](c),'delete':c=>E[g(0xc6)](c),'close':()=>E['quit'](),'ping':()=>E[g(0xc7)](),'hincrby':(c,t,e)=>E['hincrby'](c,t,e),'incrby':(c,t)=>E['incrby'](c,t)};}
@@ -1 +1 @@
1
- import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';import{createFindOne}from'./services/find-one.js';function D(){const T=['bind'];D=function(){return T;};return D();}import{createCreate}from'./services/create.js';import{createUpdate}from'./services/update.js';import{createRemove}from'./services/delete.js';function p(d,X){d=d-0xc5;const F=D();let a=F[d];return a;}import{createFindRelation}from'./services/find-relation.js';import{createCreateRelation}from'./services/create-relation.js';import{createDeleteRelation}from'./services/delete-relation.js';import{createUpdateRelation}from'./services/update-relation.js';export function createResource(d){const H=p,X=new ResourceRegistry(),F=createFind(d,X),a=createFindOne(d,X),s=createCreate(d,X),y=createUpdate(d,X),k=createRemove(d,X),q=createFindRelation(d,X),f=createCreateRelation(d,X),G=createUpdateRelation(d,X),b=createDeleteRelation(d,X);return{'register':X['register']['bind'](X),'has':X['has'][H(0xc5)](X),'get':X['get']['bind'](X),'list':X['list']['bind'](X),'find':F,'findOne':a,'create':s,'update':y,'delete':k,'findRelation':q,'createRelation':f,'updateRelation':G,'deleteRelation':b};}
1
+ import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';import{createFindOne}from'./services/find-one.js';import{createCreate}from'./services/create.js';import{createUpdate}from'./services/update.js';import{createRemove}from'./services/delete.js';import{createFindRelation}from'./services/find-relation.js';import{createCreateRelation}from'./services/create-relation.js';import{createDeleteRelation}from'./services/delete-relation.js';import{createUpdateRelation}from'./services/update-relation.js';export function createResource(L){const E=new ResourceRegistry(),c=createFind(L,E),t=createFindOne(L,E),e=createCreate(L,E),B=createUpdate(L,E),g=createRemove(L,E),r=createFindRelation(L,E),X=createCreateRelation(L,E),j=createUpdateRelation(L,E),F=createDeleteRelation(L,E);return{'register':E['register']['bind'](E),'has':E['has']['bind'](E),'get':E['get']['bind'](E),'list':E['list']['bind'](E),'find':c,'findOne':t,'create':e,'update':B,'delete':g,'findRelation':r,'createRelation':X,'updateRelation':j,'deleteRelation':F};}
@@ -1 +1 @@
1
- const y=p;import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function validQualified(d){const a=p;return d[a(0x10d)]('.')['length']<=0x2&&d['split']('.')[a(0x10e)](X=>ident[a(0x10f)](X));}function p(d,X){d=d-0x10d;const F=D();let a=F[d];return a;}function D(){const f=['split','every','test','has','name','get','resources','Resource\x20not\x20registered:\x20','list','key','Invalid\x20resource\x20contract:\x20','fields','column','Invalid\x20resource\x20field:\x20'];D=function(){return f;};return D();}export class ResourceRegistry{['resources']=new Map();['register'](d){const s=p;for(const X of Array['isArray'](d)?d:[d]){this['validate'](X);if(this['resources'][s(0x110)](X['name']))throw new ConflictError('Resource\x20already\x20registered:\x20'+X['name']);this['resources']['set'](X[s(0x111)],X);}}['has'](d){return this['resources']['has'](d);}[y(0x112)](d){const k=y,X=this[k(0x113)]['get'](d);if(!X)throw new NotFoundError(k(0x114)+d);return X;}[y(0x115)](){return[...this['resources']['values']()];}['validate'](d){const q=y;if(d['version']!==0x1||!ident[q(0x10f)](d['name'])||!validQualified(d['table'])||!ident[q(0x10f)](d[q(0x116)]))throw new ValidationError(q(0x117)+d['name']);for(const [X,F]of Object['entries'](d[q(0x118)])){if(!ident[q(0x10f)](X)||!ident['test'](F[q(0x119)]??X))throw new ValidationError(q(0x11a)+X);}}}
1
+ function O(L,E){L=L-0xa9;const c=Z();let t=c[L];return t;}function Z(){const j=['isArray','name','has','resources','Resource\x20not\x20registered:\x20','values','test','table','key'];Z=function(){return j;};return Z();}const e=O;import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function validQualified(L){return L['split']('.')['length']<=0x2&&L['split']('.')['every'](E=>ident['test'](E));}export class ResourceRegistry{['resources']=new Map();['register'](L){const t=O;for(const E of Array[t(0xa9)](L)?L:[L]){this['validate'](E);if(this['resources']['has'](E['name']))throw new ConflictError('Resource\x20already\x20registered:\x20'+E['name']);this['resources']['set'](E[t(0xaa)],E);}}[e(0xab)](L){const B=e;return this[B(0xac)][B(0xab)](L);}['get'](L){const g=e,E=this['resources']['get'](L);if(!E)throw new NotFoundError(g(0xad)+L);return E;}['list'](){const r=e;return[...this['resources'][r(0xae)]()];}['validate'](L){const X=e;if(L['version']!==0x1||!ident[X(0xaf)](L['name'])||!validQualified(L[X(0xb0)])||!ident[X(0xaf)](L[X(0xb1)]))throw new ValidationError('Invalid\x20resource\x20contract:\x20'+L[X(0xaa)]);for(const [E,c]of Object['entries'](L['fields'])){if(!ident['test'](E)||!ident['test'](c['column']??E))throw new ValidationError('Invalid\x20resource\x20field:\x20'+E);}}}
@@ -44,6 +44,7 @@ export interface ResourceFieldContract {
44
44
  export interface ResourceRelationContract {
45
45
  resource?: string;
46
46
  table?: string;
47
+ where?: string;
47
48
  localKey?: string;
48
49
  foreignKey?: string;
49
50
  fields?: string[];
@@ -54,9 +55,10 @@ export interface ResourceRelationContract {
54
55
  export interface ResourceContract {
55
56
  version: 1;
56
57
  name: string;
57
- module: string;
58
+ module?: string;
58
59
  title?: string;
59
60
  table: string;
61
+ where?: string;
60
62
  key: string;
61
63
  operations: ResourceOperation[];
62
64
  searchable?: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(d,X){const H=p,F=dictionaryIndexesCache['get'](X)??new Map(),a=dictionaryRevisionsCache['get'](X)??new Map();dictionaryIndexesCache['set'](X,F),dictionaryRevisionsCache[H(0x7e)](X,a);const s=d['filter'](k=>a[H(0x7f)](k)!==X['revision'](k));if(s['length']===0x0)return F;const y=await Promise['all'](s['map'](async k=>{const T=H;if(!X['has'](k))return[k,new Map()];const q=await X['get'](k),f=new Map();for(const G of q){const b=G['code']??G['id'];if(b==null)continue;f['set'](String(b),{'id':b,'text':G['name']??G['text'],...G['color']!==undefined?{'color':G[T(0x80)]}:{},...G['icon']!==undefined?{'icon':G[T(0x81)]}:{}});}return[k,f];}));for(const [k,q]of y){F['set'](k,q),a[H(0x7e)](k,X['revision'](k));}return F;}function p(d,X){d=d-0x7e;const F=D();let a=F[d];return a;}function D(){const v=['set','get','color','icon','entries','dictionary','length','map'];D=function(){return v;};return D();}export async function addDictionaryLookupData(d,X,F){const W=p;if(!F||d['length']===0x0)return d;const a=Object[W(0x82)](X)['flatMap'](([y,k])=>{const P=W,q=k[P(0x83)];return q?[{'field':y,'dictionaryName':q}]:[];});if(a[W(0x84)]===0x0)return d;const s=await getDictionaryIndexes([...new Set(a[W(0x85)](({dictionaryName:y})=>y))],F);for(const y of d){for(const {field:k,dictionaryName:q}of a){const f=y[k];y[k+'_data']=f==null?null:s['get'](q)?.['get'](String(f))??null;}}return d;}
1
+ function O(L,E){L=L-0x1e0;const c=Z();let t=c[L];return t;}function Z(){const A=['set','all','has','get','color','icon','length','flatMap'];Z=function(){return A;};return Z();}const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(L,E){const I=O,c=dictionaryIndexesCache['get'](E)??new Map(),t=dictionaryRevisionsCache['get'](E)??new Map();dictionaryIndexesCache['set'](E,c),dictionaryRevisionsCache[I(0x1e0)](E,t);const e=L['filter'](g=>t['get'](g)!==E['revision'](g));if(e['length']===0x0)return c;const B=await Promise[I(0x1e1)](e['map'](async g=>{const T=I;if(!E[T(0x1e2)](g))return[g,new Map()];const r=await E[T(0x1e3)](g),X=new Map();for(const j of r){const F=j['code']??j['id'];if(F==null)continue;X[T(0x1e0)](String(F),{'id':F,'text':j['name']??j['text'],...j['color']!==undefined?{'color':j[T(0x1e4)]}:{},...j['icon']!==undefined?{'icon':j[T(0x1e5)]}:{}});}return[g,X];}));for(const [g,r]of B){c['set'](g,r),t['set'](g,E['revision'](g));}return c;}export async function addDictionaryLookupData(L,E,c){const f=O;if(!c||L[f(0x1e6)]===0x0)return L;const t=Object['entries'](E)[f(0x1e7)](([B,g])=>{const r=g['dictionary'];return r?[{'field':B,'dictionaryName':r}]:[];});if(t['length']===0x0)return L;const e=await getDictionaryIndexes([...new Set(t['map'](({dictionaryName:B})=>B))],c);for(const B of L){for(const {field:g,dictionaryName:r}of t){const X=B[g];B[g+'_data']=X==null?null:e['get'](r)?.['get'](String(X))??null;}}return L;}