@opengis/fcore 0.0.1-beta.12 → 0.0.1-beta.13
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.
- package/dist/config.js +1 -1
- package/dist/context.js +1 -1
- package/dist/errors.js +1 -1
- package/dist/fastify.js +1 -1
- package/dist/fcore.js +1 -1
- package/dist/migrations/cli.js +1 -1
- package/dist/migrations/runner.js +1 -1
- package/dist/modules/auth/adduser-cli.js +1 -1
- package/dist/modules/auth/passwd-cli.js +1 -1
- package/dist/modules/auth/permission-cli.js +1 -1
- package/dist/modules/auth/route.js +1 -1
- package/dist/modules/auth/schema.js +1 -1
- package/dist/modules/auth/services/change-password.js +1 -1
- package/dist/modules/auth/services/get-current-user.js +1 -1
- package/dist/modules/auth/services/registration.js +1 -1
- package/dist/modules/auth/services/verify-two-factor.js +1 -1
- package/dist/modules/file/mime.js +1 -1
- package/dist/modules/file/route.js +1 -1
- package/dist/modules/file/schema.js +1 -1
- package/dist/modules/file/services/get-file.js +1 -1
- package/dist/modules/file/services/resize-file.js +1 -1
- package/dist/modules/file/services/upload-file.js +1 -1
- package/dist/modules/resource/route.js +1 -1
- package/dist/modules/resource/schema.js +1 -1
- package/dist/modules/resource/services/add-note.js +1 -1
- package/dist/modules/resource/services/add-resource-file.js +1 -1
- package/dist/modules/resource/services/create-resource-relation.js +1 -1
- package/dist/modules/resource/services/create-resource.js +1 -1
- package/dist/modules/resource/services/delete-resource-relation.js +1 -1
- package/dist/modules/resource/services/delete-resource.js +1 -1
- package/dist/modules/resource/services/export-resource.js +1 -1
- package/dist/modules/resource/services/get-resource.js +1 -1
- package/dist/modules/resource/services/list-resource-relation.js +1 -1
- package/dist/modules/resource/services/list-resources.js +1 -1
- package/dist/modules/resource/services/search-resource.js +1 -1
- package/dist/modules/resource/services/suggest-resource.js +1 -1
- package/dist/modules/resource/services/update-resource-relation.js +1 -1
- package/dist/modules/resource/services/update-resource.js +1 -1
- package/dist/modules/resource/services/upload-resource-file.js +1 -1
- package/dist/modules/system/route.js +1 -1
- package/dist/modules/system/schema.js +1 -1
- package/dist/modules/system/services/check-system.js +1 -1
- package/dist/modules/system/services/get-access.js +1 -1
- package/dist/modules/system/services/get-api-list.js +1 -1
- package/dist/modules/system/services/get-audit-log.js +1 -1
- package/dist/modules/system/services/get-dictionary.js +1 -1
- package/dist/modules/system/services/get-system-log.js +1 -1
- package/dist/modules/system/services/get-system-settings.js +1 -1
- package/dist/modules/system/services/list-dictionaries.js +1 -1
- package/dist/modules/system/services/set-access.js +1 -1
- package/dist/modules/system/services/update-dictionary.js +1 -1
- package/dist/modules/system/services/update-system-settings.js +1 -1
- package/dist/modules/utils/require-admin.js +1 -1
- package/dist/modules/utils/safe-user.js +1 -1
- package/dist/modules/utils/unsupported.js +1 -1
- package/dist/plugins/audit/audit.js +1 -1
- package/dist/plugins/audit/services/write-audit.js +1 -1
- package/dist/plugins/auth/get-user-permissions.js +1 -1
- package/dist/plugins/auth/index.js +1 -1
- package/dist/plugins/auth/verifyUser.js +1 -1
- package/dist/plugins/dictionary.js +1 -1
- package/dist/plugins/file.js +1 -1
- package/dist/plugins/jwt.js +1 -1
- package/dist/plugins/logger/index.js +1 -1
- package/dist/plugins/logger/transport.js +1 -1
- package/dist/plugins/pg.js +1 -1
- package/dist/plugins/redis.js +1 -1
- package/dist/plugins/resource/resource.js +1 -1
- package/dist/plugins/resource/resource.registry.js +1 -1
- package/dist/plugins/resource/resource.types.d.ts +6 -0
- package/dist/plugins/resource/resource.types.d.ts.map +1 -1
- package/dist/plugins/resource/services/add-dictionary-lookup-data.js +1 -1
- package/dist/plugins/resource/services/add-file-token.js +1 -1
- package/dist/plugins/resource/services/add-table-lookup-data.js +1 -1
- package/dist/plugins/resource/services/create-relation.js +1 -1
- package/dist/plugins/resource/services/create.js +1 -1
- package/dist/plugins/resource/services/delete-relation.js +1 -1
- package/dist/plugins/resource/services/delete.js +1 -1
- package/dist/plugins/resource/services/find-one.js +1 -1
- package/dist/plugins/resource/services/find-relation.js +1 -1
- package/dist/plugins/resource/services/find.d.ts.map +1 -1
- package/dist/plugins/resource/services/find.js +1 -1
- package/dist/plugins/resource/services/update-relation.js +1 -1
- package/dist/plugins/resource/services/update.js +1 -1
- package/dist/plugins/resource/utils/auto-index.js +1 -1
- package/dist/plugins/resource/utils/fields.js +1 -1
- package/dist/plugins/resource/utils/filters.js +1 -1
- package/dist/plugins/resource/utils/permissions.js +1 -1
- package/dist/plugins/resource/utils/sort.js +1 -1
- package/dist/plugins/resource/utils/sql.d.ts +1 -1
- package/dist/plugins/resource/utils/sql.d.ts.map +1 -1
- package/dist/plugins/resource/utils/sql.js +1 -1
- package/dist/shared/getIP.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getSystemSettings}from'./services/get-system-settings.js';import{updateSystemSettings}from'./services/update-system-settings.js';import{getAuditLog}from'./services/get-audit-log.js';import{checkSystem}from'./services/check-system.js';import{getApiList}from'./services/get-api-list.js';import{getSystemLog}from'./services/get-system-log.js';import{getDictionary}from'./services/get-dictionary.js';
|
|
1
|
+
const X=k;import{getSystemSettings}from'./services/get-system-settings.js';function t(){const e=['user','/api/dictionary/:name','fcore','system','dictionaryItems','body','/api/access/:type/:id','Returns\x20direct\x20and\x20role-based\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','params','/api/system/settings','Returns\x20system\x20settings\x20as\x20nested\x20JSON.','Returns\x20system\x20logger\x20entries\x20for\x20the\x20requested\x20path.','logger','query','send','get','/api/system/audit','Returns\x20the\x20system\x20audit\x20log\x20entries.','system:audit','Check\x20system\x20health','Checks\x20the\x20availability\x20of\x20system\x20dependencies.','system:check'];t=function(){return e;};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';function k(T,w){T=T-0x94;const j=t();let N=j[T];return N;}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=T=>T[X(0x94)];export function systemRoutes(T,w=new Map()){return async j=>{const b=k;j['get']('/api/dictionary/:name',{'schema':{'tags':['fcore','system'],'summary':'Get\x20platform\x20dictionary','description':'Returns\x20a\x20registered\x20platform\x20dictionary\x20by\x20name.','access':b(0x94),'permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName']}},async Y=>({'items':await getDictionary({...Y['params'],'user':u(Y)},T)})),j['post'](b(0x95),{'schema':{'tags':[b(0x96),b(0x97)],'summary':'Update\x20platform\x20dictionary','description':'Replaces\x20the\x20items\x20of\x20a\x20registered\x20platform\x20dictionary.','access':'user','permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName'],'body':systemSchemas[b(0x98)]}},async Y=>updateDictionary({...Y['params'],...Y[b(0x99)],'user':u(Y)},T));const N=async Y=>getAccess({...Y['params'],'user':u(Y)},T);j['get'](b(0x9a),{'schema':{'tags':[b(0x96),b(0x97)],'summary':'Get\x20access\x20rules','description':b(0x9b),'access':'admin','permissions':['system:access'],'params':systemSchemas['accessTarget']}},N),j['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['access']}},async Y=>setAccess({...Y[b(0x9c)],...Y['body'],'user':u(Y)},T)),j['get'](b(0x9d),{'schema':{'tags':['fcore','system'],'summary':'Get\x20system\x20settings','description':b(0x9e),'access':'admin','permissions':['system:settings']}},async Y=>getSystemSettings({...Y['params'],'user':u(Y)},T)),j['post'](b(0x9d),{'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 Y=>updateSystemSettings({...Y['params'],'patch':Y['body'],'user':u(Y)},T)),j['get']('/api/system/logger',{'schema':{'tags':['fcore',b(0x97)],'summary':'Get\x20system\x20log','description':b(0x9f),'access':'user','permissions':['system:logs'],'querystring':systemSchemas[b(0xa0)]}},async(Y,J)=>{const E=b,{contentType:q,body:O}=await getSystemLog({...Y[E(0xa1)],'user':u(Y)},T);return J['type'](q)[E(0xa2)](O);}),j[b(0xa3)](b(0xa4),{'schema':{'tags':['fcore',b(0x97)],'summary':'Get\x20audit\x20log','description':b(0xa5),'access':'user','permissions':[b(0xa6)]}},async Y=>getAuditLog({...Y[b(0xa1)],'user':u(Y)},T)),j['get']('/api/system/check',{'schema':{'tags':['fcore',b(0x97)],'summary':b(0xa7),'description':b(0xa8),'access':'user','permissions':[b(0xa9)]}},async Y=>checkSystem({'user':u(Y)},T)),j['get']('/api/system/list',{'schema':{'tags':[b(0x96),b(0x97)],'summary':'List\x20APIs','description':'Returns\x20the\x20list\x20of\x20registered\x20platform\x20APIs.','access':'admin','permissions':[],'querystring':systemSchemas['apiListQuery']}},async Y=>getApiList({'user':u(Y),'apiRoutes':w,...Y['query']},T));};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const T=k;function k(T,w){T=T-0x18f;const j=t();let N=j[T];return N;}import{Type}from'@sinclair/typebox';function t(){const w=['String','^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$','Object','Optional','Number','Union','Literal','user','Array','Record'];t=function(){return w;};return t();}export const identifier=Type[T(0x18f)]({'minLength':0x1,'maxLength':0x80,'pattern':T(0x190)});export const systemSchemas={'dictionaryName':Type[T(0x191)]({'name':identifier}),'dictionaryItems':Type['Object']({'items':Type['Array'](Type['Object']({'id':Type[T(0x192)](Type['Union']([Type['String'](),Type[T(0x193)]()])),'code':Type['String']({'minLength':0x1}),'name':Type['String']({'minLength':0x1}),'parentId':Type[T(0x192)](Type[T(0x194)]([Type[T(0x18f)](),Type['Number'](),Type['Null']()]))},{'additionalProperties':!![]}))}),'accessTarget':Type['Object']({'type':Type['Union']([Type[T(0x195)](T(0x196)),Type['Literal']('role')]),'id':identifier}),'access':Type['Object']({'access':Type[T(0x197)](Type[T(0x191)]({'resource':Type['String']({'minLength':0x1,'maxLength':0x80}),'actions':Type['Array'](Type['String']({'minLength':0x1,'maxLength':0x80}),{'minItems':0x1})}))}),'apiListQuery':Type['Object']({'format':Type[T(0x192)](Type['Union']([Type['Literal']('short'),Type[T(0x195)]('extended')]))}),'settingsEntity':Type[T(0x191)]({'entity':Type[T(0x192)](identifier)}),'settings':Type[T(0x198)](Type[T(0x18f)]({'minLength':0x1}),Type['Unknown']()),'logger':Type['Object']({'path':Type[T(0x192)](Type['String']({'maxLength':0x100,'pattern':'^[A-Za-z0-9_.\x5c-/]*$'}))})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export async function checkSystem(
|
|
1
|
+
function k(T,w){T=T-0x88;const j=t();let N=j[T];return N;}function t(){const J=['ping','fulfilled','degraded','status'];t=function(){return J;};return t();}export async function checkSystem(T,w){const Y=k,[j,N]=await Promise['allSettled']([w['pg']['query']('SELECT\x201'),w['redis'][Y(0x88)]()]);return{'status':j['status']===Y(0x89)&&N['status']===Y(0x89)?'ok':Y(0x8a),'pg':j[Y(0x8b)],'redis':N['status']};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function t(){const J=['type','user','\x0a\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20ra.resource,\x20ra.actions,\x20ra.role_id\x20AS\x20role\x0a\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20admin.role_access\x20ra\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20ra.role_id\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20','rows'];t=function(){return J;};return t();}function k(T,w){T=T-0xe1;const j=t();let N=j[T];return N;}export async function getAccess(T,w){const Y=k,j=T[Y(0xe1)]===Y(0xe2)?'\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':Y(0xe3),N=await w['pg']['query'](j,[T['id']]);return{'access':N[Y(0xe4)]};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function t(){const X=['apiRoutes','sort','localeCompare','short'];t=function(){return X;};return t();}function k(T,w){T=T-0x18f;const j=t();let N=j[T];return N;}export async function getApiList(T,w){const O=k,j=[...T[O(0x18f)]['values']()][O(0x190)]((N,Y)=>(N['endpoint']+'\x20'+N['method'])[O(0x191)](Y['endpoint']+'\x20'+Y['method']));if(T['format']!==O(0x192))return j;return j['map'](({method:N,endpoint:Y,access:J,permissions:q})=>N+'\x20'+Y);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function k(T,w){T=T-0x1ae;const j=t();let N=j[T];return N;}function t(){const q=['limit','page'];t=function(){return q;};return t();}export async function getAuditLog(T,w){const J=k,j=Math['min'](Math['max'](T[J(0x1ae)]??0x32,0x1),0xc8),N=Math['max']((T[J(0x1af)]??0x1)-0x1,0x0)*j,Y=await w['pg']['query']('SELECT\x20*\x20FROM\x20admin.audit_log\x20ORDER\x20BY\x20id\x20DESC\x20LIMIT\x20$1\x20OFFSET\x20$2',[j,N]);return{'rows':Y['rows'],'page':T['page']??0x1,'limit':j};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export async function getDictionary(T,w){return w['dictionary']['get'](T['name']);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const t=
|
|
1
|
+
function k(T,w){T=T-0xc9;const j=t();let N=j[T];return N;}const u=k;import T from'node:fs/promises';function t(){const D=['cwd','resolve','startsWith','stat','name','file','size','slice','join','directory','?path=','</h1>\x0a<ul>\x0a','replace','some','Invalid\x20log\x20path','alloc','filter'];t=function(){return D;};return t();}import w from'node:path';import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=w['resolve'](process[u(0xc9)](),'logs'),TAIL_LINES=0x64;export async function getSystemLog(j,N){const r=u,Y=normalizePath(j['path']),J=w[r(0xca)](LOGS_ROOT,Y);if(J!==LOGS_ROOT&&!J[r(0xcb)](LOGS_ROOT+w['sep']))throw new ValidationError('Invalid\x20log\x20path');const q=await T[r(0xcc)](J)['catch'](()=>null);if(!q)throw new NotFoundError('Log\x20path\x20not\x20found');if(q['isDirectory']()){const X=await T['readdir'](J,{'withFileTypes':!![]}),b=await Promise['all'](X['map'](async E=>{const Z=r,e=await T[Z(0xcc)](w['join'](J,E['name']));return{'name':E['name'],'path':Y?Y+'/'+E[Z(0xcd)]:E['name'],'type':E['isDirectory']()?'directory':Z(0xce),'size':E['isDirectory']()?undefined:e[Z(0xcf)],'modified':e['mtime']['toISOString']()};}));b['sort']((E,e)=>E[r(0xcd)]['localeCompare'](e[r(0xcd)]));if(Y){const E=Y['split']('/')[r(0xd0)](0x0,-0x1)[r(0xd1)]('/');b['unshift']({'name':'..','path':E,'type':r(0xd2)});}return{'contentType':'text/html;\x20charset=utf-8','body':renderDirectory(Y,b)};}const O=await tailFile(J,TAIL_LINES);return{'contentType':'text/plain;\x20charset=utf-8','body':O['join']('\x0a')};}function renderDirectory(j,N){const P=u,Y=N['map'](q=>{const f=k,O=f(0xd3)+encodeURIComponent(q['path']),X=q['type']==='directory'?q['name']+'/':q['name'];return'<li><a\x20href=\x22'+O+'\x22>'+escapeHtml(X)+'</a></li>';})['join']('\x0a'),J=escapeHtml('logs/'+j);return'<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>'+J+'</title></head>\x0a<body>\x0a<h1>'+J+P(0xd4)+Y+'\x0a</ul>\x0a</body>\x0a</html>';}function escapeHtml(j){const h=u;return j['replace'](/&/g,'&')[h(0xd5)](/</g,'<')[h(0xd5)](/>/g,'>')['replace'](/"/g,'"');}function normalizePath(j){const a=u,N=(j??'')['replace'](/\\/g,'/')['replace'](/^\/+|\/+$/g,'');if(N['split']('/')[a(0xd6)](Y=>Y==='..'))throw new ValidationError(a(0xd7));return N;}async function tailFile(j,N){const H=u,Y=await T['open'](j,'r');try{const {size:J}=await Y[H(0xcc)](),q=0x40*0x400;let O=J,X=Buffer['alloc'](0x0),b=0x0;while(O>0x0&&b<=N){const e=Math['min'](q,O);O-=e;const p=Buffer[H(0xd8)](e);await Y['read'](p,0x0,e,O),X=Buffer['concat']([p,X]),b+=countNewlines(p);}const E=X['toString']('utf8')['split']('\x0a')[H(0xd9)](m=>m['length']>0x0);return E['slice'](-N)['reverse']();}finally{await Y['close']();}}function countNewlines(j){let N=0x0;for(const Y of j){if(Y===0xa)N++;}return N;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function k(T,w){T=T-0x6e;const j=t();let N=j[T];return N;}export async function getSystemSettings(T,w){const j=await w['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 j['rows']['reduce']((N,Y)=>{const X=k,J=String(Y['key'])['split']('.');let q=N;for(const O of J['slice'](0x0,-0x1)){q[O]??={},q=q[O];}return q[J['at'](-0x1)]=Y[X(0x6e)],N;},{});}function t(){const b=['value'];t=function(){return b;};return t();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export async function listDictionaries(T,w){return w['dictionary']['list']();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getAccess}from'./get-access.js';function
|
|
1
|
+
import{getAccess}from'./get-access.js';function k(T,w){T=T-0xbc;const j=t();let N=j[T];return N;}function t(){const q=['BEGIN','query','INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20user_uid,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)','user','ROLLBACK'];t=function(){return q;};return t();}export async function setAccess(T,w){const J=k,j=await w['pg']['connect']();try{await j['query'](J(0xbc));T['type']==='user'?await j[J(0xbd)]('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL',[T['id']]):await j['query']('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL',[T['id']]);for(const N of T['access']){T['type']==='user'?await j['query'](J(0xbe),[N['resource'],N['actions'],T['id'],T['user']['id'],T['user']['id']]):await j['query']('INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20role_id,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)',[N['resource'],N['actions'],T['id'],T[J(0xbf)]['id'],T['user']['id']]);}await j['query']('COMMIT');}catch(Y){await j[J(0xbd)](J(0xc0));throw Y;}finally{j['release']();}return getAccess(T,w);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export async function updateDictionary(
|
|
1
|
+
function t(){var N=['put'];t=function(){return N;};return t();}function k(T,w){T=T-0xbd;var j=t();var N=j[T];return N;}export async function updateDictionary(T,w){var j=k;return await w['dictionary'][j(0xbd)](T['name'],T['items']),{'success':!![]};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(
|
|
1
|
+
function k(T,w){T=T-0x13c;const j=t();let N=j[T];return N;}import{ValidationError}from'../../../errors.js';function t(){const J=['patch','Settings\x20patch\x20is\x20empty','includes','stringify'];t=function(){return J;};return t();}export async function updateSystemSettings(T,w){const Y=k;if(!Object['keys'](T[Y(0x13c)])['length'])throw new ValidationError(Y(0x13d));for(const [j,N]of Object['entries'](T['patch'])){if(!j['trim']()||j[Y(0x13e)]('..'))throw new ValidationError('Invalid\x20setting\x20key:\x20'+j);await w['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',[j,JSON[Y(0x13f)](N),T['user']['id']]);}return{'success':!![]};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ForbiddenError}from'../../errors.js';export function requireAdmin(
|
|
1
|
+
import{ForbiddenError}from'../../errors.js';export function requireAdmin(T,w){var j=k;if(!T)throw new ForbiddenError('User\x20required');if(T['type']!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(T['type']!==j(0x68)&&w&&!T[j(0x69)]?.['includes'](w))throw new ForbiddenError('Missing\x20permission:\x20'+w);}function k(T,w){T=T-0x68;var j=t();var N=j[T];return N;}function t(){var N=['admin','permissions'];t=function(){return N;};return t();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export const safeUser=T=>{const Y=k,w=['password',Y(0x146),Y(0x147),'credentials'];return Object['fromEntries'](Object['entries'](T)['filter'](([j])=>!w['some'](N=>j['toLowerCase']()['includes'](N))));};function k(T,w){T=T-0x146;const j=t();let N=j[T];return N;}function t(){const J=['salt','secret'];t=function(){return J;};return t();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{UnsupportedError}from'../../errors.js';export function unsupported(
|
|
1
|
+
function t(){var j=['\x20requires\x20a\x20project/provider\x20implementation'];t=function(){return j;};return t();}function k(T,w){T=T-0x1e8;var j=t();var N=j[T];return N;}import{UnsupportedError}from'../../errors.js';export function unsupported(T){var w=k;throw new UnsupportedError(T+w(0x1e8));}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{writeAudit}from'./services/write-audit.js';export function createAudit(
|
|
1
|
+
import{writeAudit}from'./services/write-audit.js';export function createAudit(T){const w=writeAudit(T);return{'write':w};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function k(T,w){T=T-0xb2;const j=t();let N=j[T];return N;}const secretPattern=/password|token|secret|credential|salt/i;function t(){const u=['entries','map','test','\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','rows','table_name','logger','changes','empty\x20pg','query','resource','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.audit_log_data\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20audit_log_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20field,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20old_value,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20new_value\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20','oldValue','stringify','newValue'];t=function(){return u;};return t();}function clean(T){const b=k;if(Array['isArray'](T))return T['map'](clean);if(T&&typeof T==='object')return Object['fromEntries'](Object[b(0xb2)](T)[b(0xb3)](([w,j])=>[w,secretPattern[b(0xb4)](w)?'[REDACTED]':clean(j)]));return T;}export function writeAudit(T){let w,j;async function N(){const E=k;if(!T['pg'])return![];if(w!==undefined)return w;return j??=T['pg']['query'](E(0xb5))[E(0xb6)](Y=>{const e=E,J=new Set(Y[e(0xb7)]['map'](q=>q[e(0xb8)]));return w=J['has']('audit_log')&&J['has']('audit_log_data'),!w&&T['logger']['warn']({'expectedTables':['admin.audit_log','admin.audit_log_data'],'foundTables':[...J]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),w;})['catch'](Y=>{const p=E;return w=![],T[p(0xb9)]['warn']({'err':Y},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),j;}return async function Y(J){const m=k;if(!await N())return T['logger']['info']({'auditFallback':!![],'event':clean({...J,'changes':J[m(0xba)]?.['map'](X=>({...X,'oldValue':clean(X['oldValue']),'newValue':clean(X['newValue'])}))})},'audit'),0x0;if(!T['pg'])throw new Error(m(0xbb));const q=await T['pg'][m(0xbc)]('\x0a\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.audit_log\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20user_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20module,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resource,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20resource_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20fields,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20action,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20request_id,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ip_address,\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20metadata\x0a\x20\x20\x20\x20\x20\x20\x20\x20)\x0a\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5,\x20$6,\x20$7,\x20$8,\x20$9)\x0a\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20id\x0a\x20\x20\x20\x20\x20\x20',[J['userId']??null,J['module'],J[m(0xbd)],J['resourceId']==null?null:String(J['resourceId']),J['fields']??null,J['action'],J['requestId']??null,J['ipAddress']??null,clean(J['metadata']??{})]),O=q['rows'][0x0]['id'];for(const X of J['changes']??[]){if(secretPattern['test'](X['field']))continue;await T['pg']['query'](m(0xbe),[O,X['field'],JSON['stringify'](clean(X[m(0xbf)])),JSON[m(0xc0)](clean(X[m(0xc1)]))]);}return O;};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export async function getUserPermissions(T,w){const j=await w['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',[T]);return j['rows']['map'](N=>N['permission']);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
export*from'./auth.types.js';function t(){const r=['from','hex','warn','Missing\x20config\x20or\x20redis\x20-\x20skipping\x20session\x20store\x20creation','secret','auth','cookieOptions','cookieName','register','permissions'];t=function(){return r;};return t();}import{randomBytes,scrypt as T,timingSafeEqual}from'node:crypto';import{promisify}from'node:util';const scrypt=promisify(T);import w from'@fastify/cookie';import j from'@fastify/session';import{Authenticator}from'@fastify/passport';import N from'fastify-session-redis-store';import{getUserPermissions}from'./get-user-permissions.js';function k(T,w){T=T-0xdb;const j=t();let N=j[T];return N;}const fastifyPassport=new Authenticator();export*from'./verifyUser.js';export*from'./get-user-permissions.js';export async function hashPassword(Y){const J=randomBytes(0x10),q=await scrypt(Y,J,0x40);return'scrypt$'+J['toString']('hex')+'$'+q['toString']('hex');}export async function verifyPassword(Y,J){const p=k,[q,O,X]=J?.['split']('$')||[];if(q!=='scrypt'||!O||!X)return![];const b=Buffer[p(0xdb)](O,p(0xdc)),E=Buffer[p(0xdb)](X,p(0xdc)),e=await scrypt(Y,b,E['length']);return timingSafeEqual(e,E);}export async function createSessionStore(Y,J){const m=k,{config:q,redis:O}=J;if(!q||!O){console[m(0xdd)](m(0xde));return;}if(process.env.NODE_ENV==='test'||process.env.VITEST)return;await Y['register'](w,{'parseOptions':q['auth']['cookieOptions']}),await Y['register'](j,{'secret':q['auth'][m(0xdf)],'cookieName':q['auth']['cookieName'],'cookie':q[m(0xe0)][m(0xe1)],'store':new N({'prefix':q[m(0xe0)][m(0xe2)]+':'+(q['pg']?.['database']||'db')+':','client':O})}),await Y['register'](fastifyPassport['initialize']()),await Y[m(0xe3)](fastifyPassport['secureSession']()),fastifyPassport['registerUserSerializer'](async X=>({'user':X})),fastifyPassport['registerUserDeserializer'](async X=>{const u=m,b=X?.['user']||X;return b?.['id']&&(b[u(0xe4)]=await getUserPermissions(b['id'],J)),b;});}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BadRequestError}from'../../errors.js';
|
|
1
|
+
function k(T,w){T=T-0x1be;const j=t();let N=j[T];return N;}import{BadRequestError}from'../../errors.js';function t(){const e=['then','auth/warn'];t=function(){return e;};return t();}import{verifyPassword}from'./index.js';export async function verifyUser({user:T,password:w,ip:j},{pg:N,logger:Y}){const E=k;if(!T||T==='')throw new BadRequestError('not\x20enough\x20params:\x20user');if(!w||w==='')throw new BadRequestError('not\x20enough\x20params:\x20password');Y['metrics']('user.login');const J='select\x20uid\x20as\x20id,\x20user_type\x20as\x20type,\x20password_hash,\x20twofa\x20from\x20admin.users\x20where\x20$1\x20in\x20(login,email,phone)\x20and\x20enabled\x20limit\x201',q=await N['query'](J,[T])[E(0x1be)](X=>X['rows']?.[0x0]);if(!q){const X='user\x20not\x20found';Y['info']({'file':'auth/warn','error':X,'user':T,'ip':j});throw new BadRequestError(X);}const O=await verifyPassword(w,q['password_hash']);if(!O){const b='Wrong\x20password';Y['info']({'file':E(0x1bf),'error':b,'user':T,'ip':j});throw new BadRequestError(b);}return delete q['password_hash'],q;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{ConflictError,NotFoundError,ValidationError}from'../errors.js';const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;export function createDictionary({pg:T,dictionaries:dictionaries=[]}){const w=new Map(),j=new Map();let N,Y;async function J(){if(N!==undefined)return N;if(!T)throw new Error('empty\x20pg');return Y??=T['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20table_name\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20information_schema.tables\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20table_schema\x20=\x20\x27admin\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20AND\x20table_name\x20=\x20\x27dictionaries\x27\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20LIMIT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20')['then'](u=>{const D=k,r=u['rows'][0x0]?.[D(0x99)];N=r==='dictionaries'?r:null;}),await Y,N;}function q(u){const I=k;if(!dictionaryName[I(0x9a)](u))throw new ValidationError('Invalid\x20dictionary\x20name:\x20'+u);}function O(u){const g=k;for(const r of Array[g(0x9b)](u)?u:[u]){q(r['code']);if(!Array['isArray'](r[g(0x9c)]))throw new ValidationError('Invalid\x20dictionary\x20items:\x20'+r['code']);if(w[g(0x9d)](r[g(0x9e)]))throw new ConflictError(g(0x9f)+r[g(0x9e)]);w['set'](r['code'],{...r,'source':g(0xa0)});}}function X(u){return w['has'](u);}async function b(u){const z=k;q(u);const r=w['get'](u);if(r&&r[z(0xa1)])return r['items'];const Z=await J();if(!Z)throw new NotFoundError('Dictionary\x20table\x20not\x20found');const f=await T?.['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',[u]);if(f?.['rows']?.['length']){const P=f?.[z(0xa2)];return w[z(0xa3)](u,{'code':u,'name':u,'items':P,'source':'database','checked':!![]}),P;}if(!r?.['items'])throw new NotFoundError('Dictionary\x20not\x20found:\x20'+u);return r[z(0xa1)]=!![],r['items'];}async function E(u,r){const R=k;q(u);if(!Array[R(0x9b)](r))throw new ValidationError('Dictionary\x20items\x20must\x20be\x20an\x20array');const Z=await J();if(!Z)throw new NotFoundError(R(0xa4));if(!T)throw new Error('empty\x20pg');const f=await T['connect']();try{await f['query'](R(0xa5));const P=await f[R(0xa6)](R(0xa7),[u,u,'fcore','custom',!![]]),h=P[R(0xa2)][0x0]['id'];await f[R(0xa6)]('DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1',[h]);for(const a of r){await f['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',[h,a['code'],a['name'],a['parentId']??null]);}await f[R(0xa6)](R(0xa8));}catch(H){await f['query'](R(0xa9));throw H;}finally{f['release']();}w['set'](u,{'items':r,'code':u,'source':'static','checked':!![]}),j['set'](u,(j['get'](u)??0x0)+0x1);}function e(u){const Q=k;return q(u),j[Q(0xa3)](u,(j['get'](u)??0x0)+0x1),w['delete'](u);}function p(u){return j['get'](u)??0x0;}async function m(){const o=k,u=[...w[o(0xaa)]()]['map'](({code:f,name:P,source:h})=>({'code':f,'name':P??f,'source':h})),r=await J();if(!r)return u;if(!T)throw new Error('empty\x20pg');const Z=await T['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 f of Z['rows']){!w['has'](f[o(0x9e)])&&u['push'](f);}return u;}return O(dictionaries),{'register':O,'get':b,'put':E,'clear':e,'revision':p,'list':m,'has':X};}function k(T,w){T=T-0x99;const j=t();let N=j[T];return N;}function t(){const C=['table_name','test','isArray','items','has','code','Dictionary\x20already\x20registered:\x20','static','checked','rows','set','Dictionary\x20table\x20not\x20found','BEGIN','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','COMMIT','ROLLBACK','values'];t=function(){return C;};return t();}
|
package/dist/plugins/file.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';
|
|
1
|
+
import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';function k(T,w){T=T-0x1cd;const j=t();let N=j[T];return N;}function t(){const P=['transformToByteArray','from','push','forcePathStyle','accessKey','accessKeyId','send','bucket','NotFound','sha256','update','createHmac','length','toString'];t=function(){return P;};return t();}import T from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function keyFor(w,j){if(!j||j['startsWith']('/')||j['includes']('..'))throw new ValidationError('Invalid\x20file\x20path');const N=j['replace'](/\\/g,'/')['replace'](/^\/+/,''),Y=(w??'')['replace'](/^\/+|\/+$/g,'');return Y?Y+'/'+N:N;}async function bodyToBuffer(w){const e=k;if(!w)return Buffer['alloc'](0x0);const j=w;if(typeof j[e(0x1cd)]==='function')return Buffer[e(0x1ce)](await j[e(0x1cd)]());const N=[];for await(const Y of w){N[e(0x1cf)](Buffer['from'](Y));}return Buffer['concat'](N);}export function createFileS3(w){const p=k,j=w['tokenSecret']??process.env.FILE_TOKEN_SECRET??T['randomBytes'](0x20)['toString']('hex'),N=new S3Client({'endpoint':w['endpoint'],'region':w['region']??'us-east-1','forcePathStyle':w[p(0x1d0)]??!![],'credentials':w['accessKeyId']||w[p(0x1d1)]?{'accessKeyId':w[p(0x1d2)]??w[p(0x1d1)],'secretAccessKey':w['secretAccessKey']??w['secretKey']}:undefined}),Y=J=>keyFor(w['folder'],J);return{async 'put'(J,q){const m=p;await N[m(0x1d3)](new PutObjectCommand({'Bucket':w['bucket'],'Key':Y(J),'Body':q}));},async 'get'(J){const q=await N['send'](new GetObjectCommand({'Bucket':w['bucket'],'Key':Y(J)}));return bodyToBuffer(q['Body']);},async 'exists'(J){const u=p;try{return await N[u(0x1d3)](new HeadObjectCommand({'Bucket':w[u(0x1d4)],'Key':Y(J)})),!![];}catch(q){const O=q;if(O['$metadata']?.['httpStatusCode']===0x194||O['name']===u(0x1d5))return![];throw q;}},async 'delete'(J){const r=p;await N['send'](new DeleteObjectCommand({'Bucket':w[r(0x1d4)],'Key':Y(J)}));},'create'(J,q=w['tokenTtl']??0xe10){const Z=p,O=Buffer['from'](J)['toString']('base64url'),X=T['createHmac'](Z(0x1d6),j)[Z(0x1d7)](O)['digest']('base64url');return O+'.'+X;},'verify'(J){const f=p,[q,O]=J['split']('.');if(!q||!O)throw new UnauthorizedError('Invalid\x20file\x20token');const X=T[f(0x1d8)](f(0x1d6),j)['update'](q)['digest'](),b=Buffer['from'](O,'base64url');if(X[f(0x1d9)]!==b[f(0x1d9)]||!T['timingSafeEqual'](X,b))throw new UnauthorizedError('Invalid\x20file\x20token');const E=Buffer['from'](q,'base64url')[f(0x1da)]('utf8');return E;}};}
|
package/dist/plugins/jwt.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{SignJWT,jwtVerify}from'jose';const secret=new TextEncoder()['encode'](process.env.AUTH_JWT_SECRET);function t(){const O=['HS256','setIssuedAt','catch'];t=function(){return O;};return t();}export async function jwtSignToken(T){const J=k;if(!process.env.AUTH_JWT_SECRET)return;const {id:w,type:j,permissions:N}=T,Y=await new SignJWT({'id':w,'type':j,'permissions':N})['setProtectedHeader']({'alg':J(0xe6)})[J(0xe7)]()['setExpirationTime']('1h')['sign'](secret);return Y;}function k(T,w){T=T-0xe6;const j=t();let N=j[T];return N;}export async function jwtVerifyToken(T){const q=k,w=await jwtVerify(T,secret,{'algorithms':['HS256']})[q(0xe8)](j=>{console['log'](j['message']);});return w?.['payload'];}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
function k(T,w){T=T-0x1ca;const j=t();let N=j[T];return N;}function t(){const X=['info','app','token','refreshToken','assign','bind'];t=function(){return X;};return t();}import T from'pino';export function createLogger(){const O=k,w=T['transport']({'target':'./transport.js'}),j=T({'level':O(0x1ca),'timestamp':T['stdTimeFunctions']['isoTime'],'base':{'service':O(0x1cb)},'redact':{'paths':['req.headers.authorization','password',O(0x1cc),'accessToken',O(0x1cd)],'censor':'[REDACTED]'}},w),N={};function Y(J,q){if(J===undefined)return{...N};N[J]=(N[J]??0x0)+(q??0x1);}return Object[O(0x1ce)](j,{'close':async()=>w['end'](),'metrics':Y,'file':()=>j['info'][O(0x1cf)](j)});}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const O=k;function k(T,w){T=T-0x1e4;const j=t();let N=j[T];return N;}import T from'node:fs';import w from'node:path';import j from'pino-abstract-transport';const LEVELS={0x1e:O(0x1e4),0x28:'warn',0x32:O(0x1e5),0x3c:'error'},streams=new Map();function t(){const p=['info','error','toISOString','slice','logs','mkdirSync','createWriteStream','join','stream','file'];t=function(){return p;};return t();}function getDate(){const X=O;return new Date()[X(0x1e6)]()[X(0x1e7)](0x0,0xa);}function createStream(N,Y){const b=O,J=w['resolve'](b(0x1e8),N);return T[b(0x1e9)](J,{'recursive':!![]}),T[b(0x1ea)](w[b(0x1eb)](J,Y+'.log'),{'flags':'a'});}function getStream(N){const E=O,Y=getDate(),J=streams['get'](N);if(J&&J['date']===Y)return J['stream'];J?.[E(0x1ec)]['end']();const q=createStream(N,Y);return streams['set'](N,{'date':Y,'stream':q}),q;}function closeStreams(){for(const {stream:N}of streams['values']()){N['end']();}streams['clear']();}export default async function loggerTransport(){return j(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(N){const e=O;for await(const Y of N){const J=LEVELS[Y['level']];if(!J)continue;const q=getStream(Y['file']||J);delete Y[e(0x1ed)],q['write'](JSON['stringify'](Y)+'\x0a');}}
|
package/dist/plugins/pg.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import T from'pg';function t(){const m=['bind','transaction','captureStackTrace','connect','query','BEGIN'];t=function(){return m;};return t();}const {Pool}=T;function k(T,w){T=T-0x160;const j=t();let N=j[T];return N;}export function createDatabase(w){const e=k,j=new Pool(w),N=j['query'][e(0x160)](j);function Y(J,q){const O=new Error();return Error['captureStackTrace']?.(O,Y),N(J,q)['catch'](X=>{const b=X;b['sql']=J,b['callerStack']=O['stack'];throw b;});}return j['query']=Y,j[e(0x161)]=async function(J){const p=e,q=new Error();Error[p(0x162)]?.(q,j['transaction']);const O=await j[p(0x163)]();try{await O[p(0x164)](p(0x165));const X=await J(O);return await O['query']('COMMIT'),X;}catch(b){await O[p(0x164)]('ROLLBACK');const E=b;E['callerStack']=q['stack'];throw E;}finally{O['release']();}},j;}
|
package/dist/plugins/redis.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
import{Redis}from'ioredis';function t(){const X=['set','incrby'];t=function(){return X;};return t();}function k(T,w){T=T-0x1cf;const j=t();let N=j[T];return N;}export function createRedis(T){const O=k,w=new Redis(T);return{'get':j=>w['get'](j),'set':(j,N,Y,J)=>{const q=k;if(J)return w['set'](j,N,'EX',J);if(typeof Y==='number')return w[q(0x1cf)](j,N,'EX',Y);return w['set'](j,N);},'del':j=>w['del'](j),'delete':j=>w['del'](j),'close':()=>w['quit'](),'ping':()=>w['ping'](),'hincrby':(j,N,Y)=>w['hincrby'](j,N,Y),'incrby':(j,N)=>w[O(0x1d0)](j,N)};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';import{createFindOne}from'./services/find-one.js';
|
|
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';function k(T,w){T=T-0x1ce;const j=t();let N=j[T];return N;}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';function t(){const p=['register','bind'];t=function(){return p;};return t();}export function createResource(T){const e=k,w=new ResourceRegistry(),j=createFind(T,w),N=createFindOne(T,w),Y=createCreate(T,w),J=createUpdate(T,w),q=createRemove(T,w),O=createFindRelation(T,w),X=createCreateRelation(T,w),b=createUpdateRelation(T,w),E=createDeleteRelation(T,w);return{'register':w[e(0x1ce)]['bind'](w),'has':w['has']['bind'](w),'get':w['get'][e(0x1cf)](w),'list':w['list'][e(0x1cf)](w),'find':j,'findOne':N,'create':Y,'update':J,'delete':q,'findRelation':O,'createRelation':X,'updateRelation':b,'deleteRelation':E};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
const N=k;function t(){const X=['resources','Resource\x20already\x20registered:\x20','values','test','table'];t=function(){return X;};return t();}import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';function k(T,w){T=T-0x1ba;const j=t();let N=j[T];return N;}const ident=/^[a-zA-Z0-9_-]*$/;function validQualified(T){return T['split']('.')['length']<=0x2&&T['split']('.')['every'](w=>ident['test'](w));}export class ResourceRegistry{[N(0x1ba)]=new Map();['register'](T){const Y=N;for(const w of Array['isArray'](T)?T:[T]){this['validate'](w);if(this['resources']['has'](w['name']))throw new ConflictError(Y(0x1bb)+w['name']);this['resources']['set'](w['name'],w);}}['has'](T){const J=N;return this[J(0x1ba)]['has'](T);}['get'](T){const w=this['resources']['get'](T);if(!w)throw new NotFoundError('Resource\x20not\x20registered:\x20'+T);return w;}['list'](){const q=N;return[...this['resources'][q(0x1bc)]()];}['validate'](T){const O=N;if(T['version']!==0x1||!ident[O(0x1bd)](T['name'])||!validQualified(T[O(0x1be)])||!ident[O(0x1bd)](T['key']))throw new ValidationError('Invalid\x20resource\x20contract:\x20'+T['name']);for(const [w,j]of Object['entries'](T['fields'])){if(!ident['test'](w)||!ident['test'](j['column']??w))throw new ValidationError('Invalid\x20resource\x20field:\x20'+w);}}}
|
|
@@ -9,6 +9,10 @@ import type { FileAdapter } from "../file.js";
|
|
|
9
9
|
import { User } from "../../context.js";
|
|
10
10
|
import type { AppContext } from "../../context.js";
|
|
11
11
|
export type ResourceOperation = "read" | "create" | "update" | "delete";
|
|
12
|
+
export interface ResourceJoinContract {
|
|
13
|
+
scope?: "all" | "item";
|
|
14
|
+
sql: string;
|
|
15
|
+
}
|
|
12
16
|
export interface ResourceFieldContract {
|
|
13
17
|
column?: string;
|
|
14
18
|
type?: "string" | "number" | "integer" | "boolean" | "date" | "json" | "text" | "timestamp" | "uuid" | "file" | "geometry" | "geom";
|
|
@@ -24,6 +28,7 @@ export interface ResourceFieldContract {
|
|
|
24
28
|
filter?: boolean;
|
|
25
29
|
sort?: boolean;
|
|
26
30
|
search?: boolean;
|
|
31
|
+
scope?: "all" | "item";
|
|
27
32
|
dictionary?: string;
|
|
28
33
|
lookup?: {
|
|
29
34
|
table: string;
|
|
@@ -62,6 +67,7 @@ export interface ResourceContract {
|
|
|
62
67
|
permission?: string;
|
|
63
68
|
fields: Record<string, ResourceFieldContract>;
|
|
64
69
|
relations?: Record<string, ResourceRelationContract>;
|
|
70
|
+
joins?: ResourceJoinContract[];
|
|
65
71
|
access?: "public" | "user" | "admin";
|
|
66
72
|
}
|
|
67
73
|
export interface ResourceQuery {
|
|
@@ -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();
|
|
1
|
+
const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(T,w){const e=k,j=dictionaryIndexesCache[e(0xcf)](w)??new Map(),N=dictionaryRevisionsCache['get'](w)??new Map();dictionaryIndexesCache['set'](w,j),dictionaryRevisionsCache['set'](w,N);const Y=T['filter'](q=>N['get'](q)!==w['revision'](q));if(Y['length']===0x0)return j;const J=await Promise['all'](Y[e(0xd0)](async q=>{const p=e;if(!w[p(0xd1)](q))return[q,new Map()];const O=await w['get'](q),X=new Map();for(const b of O){const E=b[p(0xd2)]??b['id'];if(E==null)continue;X['set'](String(E),{'id':E,'text':b['name']??b['text'],...b['color']!==undefined?{'color':b['color']}:{},...b['icon']!==undefined?{'icon':b[p(0xd3)]}:{}});}return[q,X];}));for(const [q,O]of J){j[e(0xd4)](q,O),N['set'](q,w[e(0xd5)](q));}return j;}function t(){const u=['get','map','has','code','icon','set','revision','length','entries'];t=function(){return u;};return t();}function k(T,w){T=T-0xcf;const j=t();let N=j[T];return N;}export async function addDictionaryLookupData(T,w,j){const m=k;if(!j||T[m(0xd6)]===0x0)return T;const N=Object[m(0xd7)](w)['flatMap'](([J,q])=>{const O=q['dictionary'];return O?[{'field':J,'dictionaryName':O}]:[];});if(N['length']===0x0)return T;const Y=await getDictionaryIndexes([...new Set(N['map'](({dictionaryName:J})=>J))],j);for(const J of T){for(const {field:q,dictionaryName:O}of N){const X=J[q];J[q+'_data']=X==null?null:Y['get'](O)?.['get'](String(X))??null;}}return T;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function t(){const X=['entries','type'];t=function(){return X;};return t();}function k(T,w){T=T-0x16d;const j=t();let N=j[T];return N;}export function addFileToken(T,w,j){const O=k;if(!j||T['length']===0x0)return T;const N=Object[O(0x16d)](w)['filter'](([,Y])=>Y[O(0x16e)]==='file')['map'](([Y])=>Y);for(const Y of T){for(const J of N){const q=Y[J];typeof q==='string'&&q['length']>0x0&&(Y[J]=j['create'](q));}}return T;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function k(T,w){T=T-0x107;const j=t();let N=j[T];return N;}import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();export function clearTableLookupCache(T,w){const f=k,j=tableLookupCache['get'](w);if(!j)return;for(const N of j[f(0x107)]()){N['startsWith'](T+':')&&j['delete'](N);}}function t(){const h=['keys','entries','field','string','value','\x20=\x20ANY($1)','set','get'];t=function(){return h;};return t();}export async function addTableLookupData(T,w,j){const P=k;if(!j||T['length']===0x0)return T;const N=tableLookupCache['get'](j)??new Map();tableLookupCache['set'](j,N);const Y=Object[P(0x108)](w)['flatMap'](([J,q])=>{const {table:O,value:value='id',text:text='name'}=q['lookup']??{};return O?[{'field':J,'table':O,'value':value,'text':text}]:[];});for(const J of Y){const q=new Map();for(const E of T){const e=E[J[P(0x109)]];(typeof e===P(0x10a)||typeof e==='number')&&q['set'](String(e),e);}const O=J['table']+':'+J[P(0x10b)]+':'+J['text'],X=N['get'](O)??new Map();N['set'](O,X);const b=[...q['entries']()]['filter'](([p])=>!X['has'](p))['map'](([,p])=>p);if(b['length']>0x0){const p=await j['query']('SELECT\x20'+qi(J[P(0x10b)])+'\x20AS\x20id,\x20'+qi(J['text'])+'\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20'+qt(J['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(J['value'])+P(0x10c),[b]);for(const m of p['rows']){X[P(0x10d)](String(m['id']),m);}for(const u of b){!X['has'](String(u))&&X['set'](String(u),null);}}for(const r of T){const Z=r[J[P(0x109)]];r[J['field']+'_data']=Z==null?null:X[P(0x10e)](String(Z))??null;}}return T;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
import{UnsupportedError}from'../../../errors.js';import{createCreate}from'./create.js';function k(T,w){T=T-0x179;const j=t();let N=j[T];return N;}function t(){const f=['get','includes','\x22\x20requires\x20a\x20capabilities\x20\x22','files','size','relations','foreignKey','\x22\x20requires\x20a\x20project/provider\x20implementation','No\x20data\x20provided\x20for\x20relation:\x20'];t=function(){return f;};return t();}export function createCreateRelation(T,w){const j=createCreate(T,w);return async function N({name:Y,id:J,relation:q,data:O,user:X},b){const Z=k,E=b?.['pg']??T['pg'],e=w[Z(0x179)](Y);if(['notes','files'][Z(0x17a)](q)&&!e['capabilities']?.['includes'](q))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+q+Z(0x17b)+q+'\x22');if(q==='notes'){const u=await E['query']('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[Y,String(J),O?.['body']]);return u['rows'][0x0];}if(q===Z(0x17c)){const r=await E['query']('INSERT\x20INTO\x20admin.files\x20(resource,\x20resource_id,\x20file_path,\x20size)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*',[Y,String(J),O?.['filePath'],O?.[Z(0x17d)]??null]);return r['rows'][0x0];}const p=e[Z(0x17e)]?.[q];if(!p?.[Z(0x17f)]||!p['resource']&&!p['table'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+q+Z(0x180));if(!O)throw new UnsupportedError(Z(0x181)+O);if(!p['resource'])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+q);O[p['foreignKey']]=J;const m=await j({'name':p['resource'],'data':O??{},'user':X});return m;};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';import{qi,qt,
|
|
1
|
+
function k(T,w){T=T-0x154;const j=t();let N=j[T];return N;}function t(){const P=['get','create','created_at','fields','created_by','query','INSERT\x20INTO\x20','join','keys','rows','audit','write'];t=function(){return P;};return t();}import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';import{qi,qt,writableData}from'../utils/sql.js';import{validateInputData}from'../utils/fields.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createCreate(T,w){return async function j({name:N,data:Y,user:J},q){const f=k,O=w[f(0x154)](N);assertOperation(O,f(0x155),J),validateInputData({'resource':O,'data':Y});const X=writableData(O,Y);O['fields'][f(0x156)]&&X['push'](['created_at',new Date()]);O[f(0x157)]['created_by']&&X['push']([f(0x158),J?.['id']]);if(!X['length'])throw new ValidationError('No\x20writable\x20fields');const b=X['map'](([r])=>qi(r)),E=X['map']((r,Z)=>'$'+(Z+0x1)),e=X['map'](([,r])=>r),p=q?.['pg']??T['pg'],m=await p[f(0x159)](f(0x15a)+qt(O['table'])+'\x20('+b[f(0x15b)](',\x20')+')\x20'+('VALUES\x20('+E[f(0x15b)](',\x20')+')\x20')+('RETURNING\x20'+Object[f(0x15c)](Y)['map'](qi)['join'](',\x20')),e),u=m[f(0x15d)][0x0];return clearTableLookupCache(O['table'],p),await(q?.['audit']??T[f(0x15e)])?.[f(0x15f)]({'userId':J?.['id'],'module':O['module'],'resource':O['name'],'resourceId':u[O['key']],'action':'create','fields':Object[f(0x15c)](Y)}),u;};}
|