@opengis/fcore 0.0.1-beta.12 → 0.0.1-beta.14
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.d.ts +0 -3
- package/dist/fastify.d.ts.map +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';import{updateDictionary}from'./services/update-dictionary.js';
|
|
1
|
+
import{getSystemSettings}from'./services/get-system-settings.js';import{updateSystemSettings}from'./services/update-system-settings.js';import{getAuditLog}from'./services/get-audit-log.js';function F(){const R=['/api/dictionary/:name','params','user','body','fcore','Get\x20access\x20rules','accessTarget','Set\x20access\x20rules','Replaces\x20direct\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','system:access','access','system','admin','Get\x20system\x20log','logger','type','Check\x20system\x20health','Checks\x20the\x20availability\x20of\x20system\x20dependencies.','system:check','query'];F=function(){return R;};return F();}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=k=>k['user'];function y(k,f){k=k-0x1d6;const C=F();let p=C[k];return p;}export function systemRoutes(k,f=new Map()){return async C=>{const A=y;C['get'](A(0x1d6),{'schema':{'tags':['fcore','system'],'summary':'Get\x20platform\x20dictionary','description':'Returns\x20a\x20registered\x20platform\x20dictionary\x20by\x20name.','access':'user','permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName']}},async a=>({'items':await getDictionary({...a[A(0x1d7)],'user':u(a)},k)})),C['post']('/api/dictionary/:name',{'schema':{'tags':['fcore','system'],'summary':'Update\x20platform\x20dictionary','description':'Replaces\x20the\x20items\x20of\x20a\x20registered\x20platform\x20dictionary.','access':A(0x1d8),'permissions':['system:dictionaries'],'params':systemSchemas['dictionaryName'],'body':systemSchemas['dictionaryItems']}},async a=>updateDictionary({...a['params'],...a[A(0x1d9)],'user':u(a)},k));const p=async a=>getAccess({...a['params'],'user':u(a)},k);C['get']('/api/access/:type/:id',{'schema':{'tags':[A(0x1da),'system'],'summary':A(0x1db),'description':'Returns\x20direct\x20and\x20role-based\x20access\x20rules\x20for\x20a\x20user\x20or\x20role.','access':'admin','permissions':['system:access'],'params':systemSchemas[A(0x1dc)]}},p),C['post']('/api/access/:type/:id',{'schema':{'tags':['fcore','system'],'summary':A(0x1dd),'description':A(0x1de),'access':'admin','permissions':[A(0x1df)],'params':systemSchemas[A(0x1dc)],'body':systemSchemas[A(0x1e0)]}},async a=>setAccess({...a['params'],...a[A(0x1d9)],'user':u(a)},k)),C['get']('/api/system/settings',{'schema':{'tags':['fcore','system'],'summary':'Get\x20system\x20settings','description':'Returns\x20system\x20settings\x20as\x20nested\x20JSON.','access':'admin','permissions':['system:settings']}},async a=>getSystemSettings({...a['params'],'user':u(a)},k)),C['post']('/api/system/settings',{'schema':{'tags':['fcore',A(0x1e1)],'summary':'Update\x20system\x20settings','description':'Updates\x20system\x20settings\x20using\x20flat\x20dot-notation\x20keys.','access':A(0x1e2),'permissions':['system:settings'],'body':systemSchemas['settings']}},async a=>updateSystemSettings({...a[A(0x1d7)],'patch':a[A(0x1d9)],'user':u(a)},k)),C['get']('/api/system/logger',{'schema':{'tags':[A(0x1da),'system'],'summary':A(0x1e3),'description':'Returns\x20system\x20logger\x20entries\x20for\x20the\x20requested\x20path.','access':'user','permissions':['system:logs'],'querystring':systemSchemas[A(0x1e4)]}},async(a,N)=>{const H=A,{contentType:W,body:n}=await getSystemLog({...a['query'],'user':u(a)},k);return N[H(0x1e5)](W)['send'](n);}),C['get']('/api/system/audit',{'schema':{'tags':['fcore',A(0x1e1)],'summary':'Get\x20audit\x20log','description':'Returns\x20the\x20system\x20audit\x20log\x20entries.','access':'user','permissions':['system:audit']}},async a=>getAuditLog({...a['query'],'user':u(a)},k)),C['get']('/api/system/check',{'schema':{'tags':['fcore','system'],'summary':A(0x1e6),'description':A(0x1e7),'access':'user','permissions':[A(0x1e8)]}},async a=>checkSystem({'user':u(a)},k)),C['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 a=>getApiList({'user':u(a),'apiRoutes':f,...a[A(0x1e9)]},k));};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
function y(k,f){k=k-0x91;const C=F();let p=C[k];return p;}const k=y;import{Type}from'@sinclair/typebox';function F(){const f=['Array','Optional','String','Null','user','Literal','Object','extended'];F=function(){return f;};return F();}export const identifier=Type['String']({'minLength':0x1,'maxLength':0x80,'pattern':'^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$'});export const systemSchemas={'dictionaryName':Type['Object']({'name':identifier}),'dictionaryItems':Type['Object']({'items':Type[k(0x91)](Type['Object']({'id':Type[k(0x92)](Type['Union']([Type['String'](),Type['Number']()])),'code':Type['String']({'minLength':0x1}),'name':Type[k(0x93)]({'minLength':0x1}),'parentId':Type['Optional'](Type['Union']([Type[k(0x93)](),Type['Number'](),Type[k(0x94)]()]))},{'additionalProperties':!![]}))}),'accessTarget':Type['Object']({'type':Type['Union']([Type['Literal'](k(0x95)),Type[k(0x96)]('role')]),'id':identifier}),'access':Type['Object']({'access':Type[k(0x91)](Type[k(0x97)]({'resource':Type['String']({'minLength':0x1,'maxLength':0x80}),'actions':Type[k(0x91)](Type['String']({'minLength':0x1,'maxLength':0x80}),{'minItems':0x1})}))}),'apiListQuery':Type['Object']({'format':Type['Optional'](Type['Union']([Type['Literal']('short'),Type['Literal'](k(0x98))]))}),'settingsEntity':Type['Object']({'entity':Type['Optional'](identifier)}),'settings':Type['Record'](Type['String']({'minLength':0x1}),Type['Unknown']()),'logger':Type['Object']({'path':Type['Optional'](Type[k(0x93)]({'maxLength':0x100,'pattern':'^[A-Za-z0-9_.\x5c-/]*$'}))})};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export async function checkSystem(
|
|
1
|
+
export async function checkSystem(k,f){const a=y,[C,p]=await Promise['allSettled']([f['pg']['query']('SELECT\x201'),f['redis']['ping']()]);return{'status':C['status']==='fulfilled'&&p['status']==='fulfilled'?'ok':'degraded','pg':C['status'],'redis':p[a(0x70)]};}function y(k,f){k=k-0x70;const C=F();let p=C[k];return p;}function F(){const N=['status'];F=function(){return N;};return F();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function F(){const N=['\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','query','rows'];F=function(){return N;};return F();}function y(k,f){k=k-0x13f;const C=F();let p=C[k];return p;}export async function getAccess(k,f){const a=y,C=k['type']==='user'?a(0x13f):'\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',p=await f['pg'][a(0x140)](C,[k['id']]);return{'access':p[a(0x141)]};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function F(){const A=['values','method','endpoint','map'];F=function(){return A;};return F();}function y(k,f){k=k-0x10c;const C=F();let p=C[k];return p;}export async function getApiList(k,f){const n=y,C=[...k['apiRoutes'][n(0x10c)]()]['sort']((p,a)=>(p['endpoint']+'\x20'+p[n(0x10d)])['localeCompare'](a[n(0x10e)]+'\x20'+a['method']));if(k['format']!=='short')return C;return C[n(0x10f)](({method:p,endpoint:a,access:N,permissions:W})=>p+'\x20'+a);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function y(k,f){k=k-0x1a8;const C=F();let p=C[k];return p;}export async function getAuditLog(k,f){const N=y,C=Math['min'](Math['max'](k['limit']??0x32,0x1),0xc8),p=Math['max']((k[N(0x1a8)]??0x1)-0x1,0x0)*C,a=await f['pg'][N(0x1a9)](N(0x1aa),[C,p]);return{'rows':a[N(0x1ab)],'page':k[N(0x1a8)]??0x1,'limit':C};}function F(){const W=['page','query','SELECT\x20*\x20FROM\x20admin.audit_log\x20ORDER\x20BY\x20id\x20DESC\x20LIMIT\x20$1\x20OFFSET\x20$2','rows'];F=function(){return W;};return F();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function y(k,f){k=k-0x15a;var C=F();var p=C[k];return p;}export async function getDictionary(k,f){var C=y;return f['dictionary'][C(0x15a)](k['name']);}function F(){var p=['get'];F=function(){return p;};return F();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import k from'node:fs/promises';import f from'node:path';function F(){const Q=['path','map','name','directory','file','size','toISOString','unshift','<li><a\x20href=\x22','replace','>','Invalid\x20log\x20path','open','alloc','min','length','reverse'];F=function(){return Q;};return F();}import{NotFoundError,ValidationError}from'../../../errors.js';const LOGS_ROOT=f['resolve'](process['cwd'](),'logs'),TAIL_LINES=0x64;export async function getSystemLog(C,p){const z=y,a=normalizePath(C[z(0xa0)]),N=f['resolve'](LOGS_ROOT,a);if(N!==LOGS_ROOT&&!N['startsWith'](LOGS_ROOT+f['sep']))throw new ValidationError('Invalid\x20log\x20path');const W=await k['stat'](N)['catch'](()=>null);if(!W)throw new NotFoundError('Log\x20path\x20not\x20found');if(W['isDirectory']()){const A=await k['readdir'](N,{'withFileTypes':!![]}),H=await Promise['all'](A[z(0xa1)](async R=>{const T=z,u=await k['stat'](f['join'](N,R['name']));return{'name':R[T(0xa2)],'path':a?a+'/'+R[T(0xa2)]:R[T(0xa2)],'type':R['isDirectory']()?T(0xa3):T(0xa4),'size':R['isDirectory']()?undefined:u[T(0xa5)],'modified':u['mtime'][T(0xa6)]()};}));H['sort']((R,u)=>R[z(0xa2)]['localeCompare'](u['name']));if(a){const R=a['split']('/')['slice'](0x0,-0x1)['join']('/');H[z(0xa7)]({'name':'..','path':R,'type':'directory'});}return{'contentType':'text/html;\x20charset=utf-8','body':renderDirectory(a,H)};}const n=await tailFile(N,TAIL_LINES);return{'contentType':'text/plain;\x20charset=utf-8','body':n['join']('\x0a')};}function renderDirectory(C,p){const a=p['map'](W=>{const S=y,n='?path='+encodeURIComponent(W['path']),A=W['type']==='directory'?W[S(0xa2)]+'/':W[S(0xa2)];return S(0xa8)+n+'\x22>'+escapeHtml(A)+'</a></li>';})['join']('\x0a'),N=escapeHtml('logs/'+C);return'<!DOCTYPE\x20html>\x0a<html>\x0a<head><meta\x20charset=\x22utf-8\x22><title>'+N+'</title></head>\x0a<body>\x0a<h1>'+N+'</h1>\x0a<ul>\x0a'+a+'\x0a</ul>\x0a</body>\x0a</html>';}function escapeHtml(C){const i=y;return C['replace'](/&/g,'&')['replace'](/</g,'<')[i(0xa9)](/>/g,i(0xaa))['replace'](/"/g,'"');}function y(k,f){k=k-0xa0;const C=F();let p=C[k];return p;}function normalizePath(C){const b=y,p=(C??'')['replace'](/\\/g,'/')['replace'](/^\/+|\/+$/g,'');if(p['split']('/')['some'](a=>a==='..'))throw new ValidationError(b(0xab));return p;}async function tailFile(C,p){const P=y,a=await k[P(0xac)](C,'r');try{const {size:N}=await a['stat'](),W=0x40*0x400;let n=N,A=Buffer[P(0xad)](0x0),H=0x0;while(n>0x0&&H<=p){const u=Math[P(0xae)](W,n);n-=u;const d=Buffer['alloc'](u);await a['read'](d,0x0,u,n),A=Buffer['concat']([d,A]),H+=countNewlines(d);}const R=A['toString']('utf8')['split']('\x0a')['filter'](j=>j[P(0xaf)]>0x0);return R['slice'](-p)[P(0xb0)]();}finally{await a['close']();}}function countNewlines(C){let p=0x0;for(const a of C){if(a===0xa)p++;}return p;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function F(){const H=['key'];F=function(){return H;};return F();}function y(k,f){k=k-0x143;const C=F();let p=C[k];return p;}export async function getSystemSettings(k,f){const C=await f['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20SELECT\x20key,\x20value\x0a\x20\x20\x20\x20\x20\x20FROM\x20admin.settings\x0a\x20\x20\x20\x20\x20\x20WHERE\x20resource\x20=\x20\x27system\x27\x20AND\x20resource_id\x20IS\x20NULL\x0a\x20\x20\x20\x20\x20\x20ORDER\x20BY\x20key\x0a\x20\x20\x20\x20');return C['rows']['reduce']((p,a)=>{const A=y,N=String(a[A(0x143)])['split']('.');let W=p;for(const n of N['slice'](0x0,-0x1)){W[n]??={},W=W[n];}return W[N['at'](-0x1)]=a['value'],p;},{});}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function F(){var p=['list'];F=function(){return p;};return F();}function y(k,f){k=k-0x1d9;var C=F();var p=C[k];return p;}export async function listDictionaries(k,f){var C=y;return f['dictionary'][C(0x1d9)]();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
function y(k,f){k=k-0x118;const C=F();let p=C[k];return p;}import{getAccess}from'./get-access.js';export async function setAccess(k,f){const N=y,C=await f['pg']['connect']();try{await C['query']('BEGIN');k[N(0x118)]==='user'?await C[N(0x119)]('DELETE\x20FROM\x20admin.role_access\x20WHERE\x20user_uid\x20=\x20$1\x20AND\x20role_id\x20IS\x20NULL',[k['id']]):await C['query'](N(0x11a),[k['id']]);for(const p of k['access']){k[N(0x118)]===N(0x11b)?await C['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)',[p['resource'],p['actions'],k['id'],k['user']['id'],k[N(0x11b)]['id']]):await C['query']('INSERT\x20INTO\x20admin.role_access\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20(\x20resource,\x20actions,\x20role_id,\x20created_by,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4,\x20$5)',[p[N(0x11c)],p[N(0x11d)],k['id'],k['user']['id'],k['user']['id']]);}await C['query']('COMMIT');}catch(a){await C['query']('ROLLBACK');throw a;}finally{C['release']();}return getAccess(k,f);}function F(){const W=['type','query','DELETE\x20FROM\x20admin.role_access\x20WHERE\x20role_id\x20=\x20$1\x20AND\x20user_uid\x20IS\x20NULL','user','resource','actions'];F=function(){return W;};return F();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export async function updateDictionary(
|
|
1
|
+
function y(k,f){k=k-0xdc;var C=F();var p=C[k];return p;}export async function updateDictionary(k,f){var C=y;return await f['dictionary']['put'](k[C(0xdc)],k['items']),{'success':!![]};}function F(){var p=['name'];F=function(){return p;};return F();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(
|
|
1
|
+
import{ValidationError}from'../../../errors.js';export async function updateSystemSettings(k,f){const a=y;if(!Object['keys'](k['patch'])['length'])throw new ValidationError(a(0x16b));for(const [C,p]of Object['entries'](k['patch'])){if(!C['trim']()||C['includes']('..'))throw new ValidationError(a(0x16c)+C);await f['pg']['query']('\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20INSERT\x20INTO\x20admin.settings\x20(resource,\x20resource_id,\x20key,\x20value,\x20updated_by)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20(\x27system\x27,\x20NULL,\x20$1,\x20$2::jsonb,\x20$3)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20ON\x20CONFLICT\x20(resource,\x20resource_id,\x20key)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20DO\x20UPDATE\x20SET\x20value\x20=\x20EXCLUDED.value,\x20updated_by\x20=\x20EXCLUDED.updated_by,\x20updated_at\x20=\x20now()\x0a\x20\x20\x20\x20\x20\x20\x20\x20',[C,JSON['stringify'](p),k[a(0x16d)]['id']]);}return{'success':!![]};}function y(k,f){k=k-0x16b;const C=F();let p=C[k];return p;}function F(){const N=['Settings\x20patch\x20is\x20empty','Invalid\x20setting\x20key:\x20','user'];F=function(){return N;};return F();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ForbiddenError}from'../../errors.js';export function requireAdmin(
|
|
1
|
+
function y(k,f){k=k-0x13f;var C=F();var p=C[k];return p;}function F(){var p=['User\x20required','type','admin','Admin\x20access\x20required','permissions'];F=function(){return p;};return F();}import{ForbiddenError}from'../../errors.js';export function requireAdmin(k,f){var C=y;if(!k)throw new ForbiddenError(C(0x13f));if(k[C(0x140)]!==C(0x141))throw new ForbiddenError(C(0x142));if(k['type']!=='admin'&&f&&!k[C(0x143)]?.['includes'](f))throw new ForbiddenError('Missing\x20permission:\x20'+f);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function y(k,f){k=k-0x12a;const C=F();let p=C[k];return p;}function F(){const N=['entries'];F=function(){return N;};return F();}export const safeUser=k=>{const a=y,f=['password','salt','secret','credentials'];return Object['fromEntries'](Object[a(0x12a)](k)['filter'](([C])=>!f['some'](p=>C['toLowerCase']()['includes'](p))));};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{UnsupportedError}from'../../errors.js';export function unsupported(
|
|
1
|
+
import{UnsupportedError}from'../../errors.js';export function unsupported(k){throw new UnsupportedError(k+'\x20requires\x20a\x20project/provider\x20implementation');}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{writeAudit}from'./services/write-audit.js';export function createAudit(
|
|
1
|
+
import{writeAudit}from'./services/write-audit.js';export function createAudit(k){const f=writeAudit(k);return{'write':f};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
const secretPattern=/password|token|secret|credential|salt/i;function F(){const z=['isArray','entries','[REDACTED]','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','map','has','audit_log_data','logger','oldValue','audit','userId','resourceId','action','requestId','rows','changes','stringify','newValue'];F=function(){return z;};return F();}function clean(k){const H=y;if(Array[H(0x78)](k))return k['map'](clean);if(k&&typeof k==='object')return Object['fromEntries'](Object[H(0x79)](k)['map'](([f,C])=>[f,secretPattern['test'](f)?H(0x7a):clean(C)]));return k;}function y(k,f){k=k-0x78;const C=F();let p=C[k];return p;}export function writeAudit(k){let f,C;async function p(){const R=y;if(!k['pg'])return![];if(f!==undefined)return f;return C??=k['pg'][R(0x7b)](R(0x7c))[R(0x7d)](a=>{const u=R,N=new Set(a['rows'][u(0x7e)](W=>W['table_name']));return f=N['has']('audit_log')&&N[u(0x7f)](u(0x80)),!f&&k['logger']['warn']({'expectedTables':['admin.audit_log','admin.audit_log_data'],'foundTables':[...N]},'Audit\x20tables\x20are\x20unavailable;\x20audit\x20writes\x20are\x20disabled'),f;})['catch'](a=>{const d=R;return f=![],k[d(0x81)]['warn']({'err':a},'Unable\x20to\x20check\x20audit\x20tables;\x20audit\x20writes\x20are\x20disabled'),![];}),C;}return async function a(N){const j=y;if(!await p())return k['logger']['info']({'auditFallback':!![],'event':clean({...N,'changes':N['changes']?.[j(0x7e)](A=>({...A,'oldValue':clean(A[j(0x82)]),'newValue':clean(A['newValue'])}))})},j(0x83)),0x0;if(!k['pg'])throw new Error('empty\x20pg');const W=await k['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',[N[j(0x84)]??null,N['module'],N['resource'],N[j(0x85)]==null?null:String(N['resourceId']),N['fields']??null,N[j(0x86)],N[j(0x87)]??null,N['ipAddress']??null,clean(N['metadata']??{})]),n=W[j(0x88)][0x0]['id'];for(const A of N[j(0x89)]??[]){if(secretPattern['test'](A['field']))continue;await k['pg'][j(0x7b)]('\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',[n,A['field'],JSON[j(0x8a)](clean(A['oldValue'])),JSON['stringify'](clean(A[j(0x8b)]))]);}return n;};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function y(k,f){k=k-0x190;const C=F();let p=C[k];return p;}function F(){const N=['rows','map','permission'];F=function(){return N;};return F();}export async function getUserPermissions(k,f){const a=y,C=await f['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',[k]);return C[a(0x190)][a(0x191)](p=>p[a(0x192)]);}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export*from'./auth.types.js';import{randomBytes,scrypt as k,timingSafeEqual}from'node:crypto';import{promisify}from'node:util';const scrypt=promisify(k);import f from'@fastify/cookie';import C from'@fastify/session';import{Authenticator}from'@fastify/passport';import p from'fastify-session-redis-store';function y(k,f){k=k-0x1ba;const C=F();let p=C[k];return p;}import{getUserPermissions}from'./get-user-permissions.js';const fastifyPassport=new Authenticator();export*from'./verifyUser.js';function F(){const S=['hex','split','length','test','auth','cookieName','register','secureSession','user'];F=function(){return S;};return F();}export*from'./get-user-permissions.js';export async function hashPassword(a){const d=y,N=randomBytes(0x10),W=await scrypt(a,N,0x40);return'scrypt$'+N['toString']('hex')+'$'+W['toString'](d(0x1ba));}export async function verifyPassword(a,N){const j=y,[W,n,A]=N?.[j(0x1bb)]('$')||[];if(W!=='scrypt'||!n||!A)return![];const H=Buffer['from'](n,j(0x1ba)),R=Buffer['from'](A,j(0x1ba)),u=await scrypt(a,H,R[j(0x1bc)]);return timingSafeEqual(u,R);}export async function createSessionStore(a,N){const z=y,{config:W,redis:n}=N;if(!W||!n){console['warn']('Missing\x20config\x20or\x20redis\x20-\x20skipping\x20session\x20store\x20creation');return;}if(process.env.NODE_ENV===z(0x1bd)||process.env.VITEST)return;await a['register'](f,{'parseOptions':W[z(0x1be)]['cookieOptions']}),await a['register'](C,{'secret':W[z(0x1be)]['secret'],'cookieName':W['auth'][z(0x1bf)],'cookie':W[z(0x1be)]['cookieOptions'],'store':new p({'prefix':W[z(0x1be)]['cookieName']+':'+(W['pg']?.['database']||'db')+':','client':n})}),await a[z(0x1c0)](fastifyPassport['initialize']()),await a['register'](fastifyPassport[z(0x1c1)]()),fastifyPassport['registerUserSerializer'](async A=>({'user':A})),fastifyPassport['registerUserDeserializer'](async A=>{const T=z,H=A?.[T(0x1c2)]||A;return H?.['id']&&(H['permissions']=await getUserPermissions(H['id'],N)),H;});}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';function
|
|
1
|
+
import{BadRequestError}from'../../errors.js';import{verifyPassword}from'./index.js';function y(k,f){k=k-0xf8;const C=F();let p=C[k];return p;}export async function verifyUser({user:k,password:f,ip:C},{pg:p,logger:a}){const R=y;if(!k||k==='')throw new BadRequestError(R(0xf8));if(!f||f==='')throw new BadRequestError('not\x20enough\x20params:\x20password');a[R(0xf9)]('user.login');const N=R(0xfa),W=await p['query'](N,[k])['then'](A=>A[R(0xfb)]?.[0x0]);if(!W){const A='user\x20not\x20found';a['info']({'file':'auth/warn','error':A,'user':k,'ip':C});throw new BadRequestError(A);}const n=await verifyPassword(f,W['password_hash']);if(!n){const H=R(0xfc);a[R(0xfd)]({'file':'auth/warn','error':H,'user':k,'ip':C});throw new BadRequestError(H);}return delete W['password_hash'],W;}function F(){const u=['not\x20enough\x20params:\x20user','metrics','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','rows','Wrong\x20password','info'];F=function(){return u;};return F();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function F(){const X=['empty\x20pg','table_name','Invalid\x20dictionary\x20name:\x20','isArray','Invalid\x20dictionary\x20items:\x20','set','Dictionary\x20table\x20not\x20found','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','length','Dictionary\x20not\x20found:\x20','\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','DELETE\x20FROM\x20admin.dictionary_items\x20WHERE\x20dictionary_id\x20=\x20$1','code','parentId','release','get','values'];F=function(){return X;};return F();}import{ConflictError,NotFoundError,ValidationError}from'../errors.js';const dictionaryName=/^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/;function y(k,f){k=k-0x142;const C=F();let p=C[k];return p;}export function createDictionary({pg:k,dictionaries:dictionaries=[]}){const f=new Map(),C=new Map();let p,a;async function N(){const I=y;if(p!==undefined)return p;if(!k)throw new Error(I(0x142));return a??=k['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'](z=>{const h=I,T=z['rows'][0x0]?.[h(0x143)];p=T==='dictionaries'?T:null;}),await a,p;}function W(z){const K=y;if(!dictionaryName['test'](z))throw new ValidationError(K(0x144)+z);}function n(z){const M=y;for(const T of Array['isArray'](z)?z:[z]){W(T['code']);if(!Array[M(0x145)](T['items']))throw new ValidationError(M(0x146)+T['code']);if(f['has'](T['code']))throw new ConflictError('Dictionary\x20already\x20registered:\x20'+T['code']);f[M(0x147)](T['code'],{...T,'source':'static'});}}function A(z){return f['has'](z);}async function H(z){const E=y;W(z);const T=f['get'](z);if(T&&T['checked'])return T['items'];const S=await N();if(!S)throw new NotFoundError(E(0x148));const i=await k?.[E(0x149)](E(0x14a),[z]);if(i?.['rows']?.[E(0x14b)]){const b=i?.['rows'];return f['set'](z,{'code':z,'name':z,'items':b,'source':'database','checked':!![]}),b;}if(!T?.['items'])throw new NotFoundError(E(0x14c)+z);return T['checked']=!![],T['items'];}async function R(z,T){const t=y;W(z);if(!Array[t(0x145)](T))throw new ValidationError('Dictionary\x20items\x20must\x20be\x20an\x20array');const S=await N();if(!S)throw new NotFoundError('Dictionary\x20table\x20not\x20found');if(!k)throw new Error('empty\x20pg');const i=await k['connect']();try{await i['query']('BEGIN');const b=await i['query'](t(0x14d),[z,z,'fcore','custom',!![]]),P=b['rows'][0x0]['id'];await i['query'](t(0x14e),[P]);for(const Q of T){await i['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',[P,Q[t(0x14f)],Q['name'],Q[t(0x150)]??null]);}await i['query']('COMMIT');}catch(l){await i[t(0x149)]('ROLLBACK');throw l;}finally{i[t(0x151)]();}f['set'](z,{'items':T,'code':z,'source':'static','checked':!![]}),C[t(0x147)](z,(C[t(0x152)](z)??0x0)+0x1);}function u(z){return W(z),C['set'](z,(C['get'](z)??0x0)+0x1),f['delete'](z);}function d(z){return C['get'](z)??0x0;}async function j(){const G=y,z=[...f[G(0x153)]()]['map'](({code:i,name:b,source:P})=>({'code':i,'name':b??i,'source':P})),T=await N();if(!T)return z;if(!k)throw new Error('empty\x20pg');const S=await k['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 i of S['rows']){!f['has'](i['code'])&&z['push'](i);}return z;}return n(dictionaries),{'register':n,'get':H,'put':R,'clear':u,'revision':d,'list':j,'has':A};}
|
package/dist/plugins/file.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
function F(){const P=['replace','push','randomBytes','hex','us-east-1','accessKeyId','secretKey','bucket','Body','send','NotFound','toString','createHmac','sha256','digest','from','base64url'];F=function(){return P;};return F();}import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';function y(k,f){k=k-0x119;const C=F();let p=C[k];return p;}import k from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function keyFor(f,C){const u=y;if(!C||C['startsWith']('/')||C['includes']('..'))throw new ValidationError('Invalid\x20file\x20path');const p=C['replace'](/\\/g,'/')['replace'](/^\/+/,''),a=(f??'')[u(0x119)](/^\/+|\/+$/g,'');return a?a+'/'+p:p;}async function bodyToBuffer(f){const d=y;if(!f)return Buffer['alloc'](0x0);const C=f;if(typeof C['transformToByteArray']==='function')return Buffer['from'](await C['transformToByteArray']());const p=[];for await(const a of f){p[d(0x11a)](Buffer['from'](a));}return Buffer['concat'](p);}export function createFileS3(f){const j=y,C=f['tokenSecret']??process.env.FILE_TOKEN_SECRET??k[j(0x11b)](0x20)['toString'](j(0x11c)),p=new S3Client({'endpoint':f['endpoint'],'region':f['region']??j(0x11d),'forcePathStyle':f['forcePathStyle']??!![],'credentials':f[j(0x11e)]||f['accessKey']?{'accessKeyId':f[j(0x11e)]??f['accessKey'],'secretAccessKey':f['secretAccessKey']??f[j(0x11f)]}:undefined}),a=N=>keyFor(f['folder'],N);return{async 'put'(N,W){await p['send'](new PutObjectCommand({'Bucket':f['bucket'],'Key':a(N),'Body':W}));},async 'get'(N){const z=j,W=await p['send'](new GetObjectCommand({'Bucket':f[z(0x120)],'Key':a(N)}));return bodyToBuffer(W[z(0x121)]);},async 'exists'(N){const T=j;try{return await p[T(0x122)](new HeadObjectCommand({'Bucket':f['bucket'],'Key':a(N)})),!![];}catch(W){const n=W;if(n['$metadata']?.['httpStatusCode']===0x194||n['name']===T(0x123))return![];throw W;}},async 'delete'(N){const S=j;await p[S(0x122)](new DeleteObjectCommand({'Bucket':f[S(0x120)],'Key':a(N)}));},'create'(N,W=f['tokenTtl']??0xe10){const i=j,n=Buffer['from'](N)[i(0x124)]('base64url'),A=k[i(0x125)](i(0x126),C)['update'](n)[i(0x127)]('base64url');return n+'.'+A;},'verify'(N){const b=j,[W,n]=N['split']('.');if(!W||!n)throw new UnauthorizedError('Invalid\x20file\x20token');const A=k['createHmac']('sha256',C)['update'](W)['digest'](),H=Buffer['from'](n,'base64url');if(A['length']!==H['length']||!k['timingSafeEqual'](A,H))throw new UnauthorizedError('Invalid\x20file\x20token');const R=Buffer[b(0x128)](W,b(0x129))['toString']('utf8');return R;}};}
|
package/dist/plugins/jwt.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function F(){const A=['encode','setIssuedAt','log'];F=function(){return A;};return F();}const N=y;import{SignJWT,jwtVerify}from'jose';const secret=new TextEncoder()[N(0x1b4)](process.env.AUTH_JWT_SECRET);export async function jwtSignToken(k){const W=N;if(!process.env.AUTH_JWT_SECRET)return;const {id:f,type:C,permissions:p}=k,a=await new SignJWT({'id':f,'type':C,'permissions':p})['setProtectedHeader']({'alg':'HS256'})[W(0x1b5)]()['setExpirationTime']('1h')['sign'](secret);return a;}function y(k,f){k=k-0x1b4;const C=F();let p=C[k];return p;}export async function jwtVerifyToken(k){const f=await jwtVerify(k,secret,{'algorithms':['HS256']})['catch'](C=>{const n=y;console[n(0x1b6)](C['message']);});return f?.['payload'];}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import k from'pino';export function createLogger(){const n=y,f=k['transport']({'target':'./transport.js'}),C=k({'level':'info','timestamp':k['stdTimeFunctions']['isoTime'],'base':{'service':'app'},'redact':{'paths':[n(0x1b8),'password','token','accessToken','refreshToken'],'censor':'[REDACTED]'}},f),p={};function a(N,W){if(N===undefined)return{...p};p[N]=(p[N]??0x0)+(W??0x1);}return Object['assign'](C,{'close':async()=>f['end'](),'metrics':a,'file':()=>C['info'][n(0x1b9)](C)});}function y(k,f){k=k-0x1b8;const C=F();let p=C[k];return p;}function F(){const A=['req.headers.authorization','bind'];F=function(){return A;};return F();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const n=y;import k from'node:fs';import f from'node:path';import C from'pino-abstract-transport';function y(k,f){k=k-0xc5;const C=F();let p=C[k];return p;}function F(){const d=['info','warn','error','join','get','end','file','write'];F=function(){return d;};return F();}const LEVELS={0x1e:n(0xc5),0x28:n(0xc6),0x32:n(0xc7),0x3c:'error'},streams=new Map();function getDate(){return new Date()['toISOString']()['slice'](0x0,0xa);}function createStream(p,a){const A=n,N=f['resolve']('logs',p);return k['mkdirSync'](N,{'recursive':!![]}),k['createWriteStream'](f[A(0xc8)](N,a+'.log'),{'flags':'a'});}function getStream(p){const H=n,a=getDate(),N=streams[H(0xc9)](p);if(N&&N['date']===a)return N['stream'];N?.['stream']['end']();const W=createStream(p,a);return streams['set'](p,{'date':a,'stream':W}),W;}function closeStreams(){const R=n;for(const {stream:p}of streams['values']()){p[R(0xca)]();}streams['clear']();}export default async function loggerTransport(){return C(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(p){const u=n;for await(const a of p){const N=LEVELS[a['level']];if(!N)continue;const W=getStream(a[u(0xcb)]||N);delete a['file'],W[u(0xcc)](JSON['stringify'](a)+'\x0a');}}
|
package/dist/plugins/pg.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
function y(k,f){k=k-0xa3;const C=F();let p=C[k];return p;}import k from'pg';const {Pool}=k;export function createDatabase(f){const u=y,C=new Pool(f),p=C[u(0xa3)]['bind'](C);function a(N,W){const d=u,n=new Error();return Error[d(0xa4)]?.(n,a),p(N,W)['catch'](A=>{const j=d,H=A;H['sql']=N,H[j(0xa5)]=n[j(0xa6)];throw H;});}return C[u(0xa3)]=a,C['transaction']=async function(N){const z=u,W=new Error();Error['captureStackTrace']?.(W,C['transaction']);const n=await C[z(0xa7)]();try{await n['query'](z(0xa8));const A=await N(n);return await n[z(0xa3)]('COMMIT'),A;}catch(H){await n['query']('ROLLBACK');const R=H;R['callerStack']=W['stack'];throw R;}finally{n['release']();}},C;}function F(){const T=['query','captureStackTrace','callerStack','stack','connect','BEGIN'];F=function(){return T;};return F();}
|
package/dist/plugins/redis.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function y(k,f){k=k-0xee;const C=F();let p=C[k];return p;}import{Redis}from'ioredis';export function createRedis(k){const n=y,f=new Redis(k);return{'get':C=>f['get'](C),'set':(C,p,a,N)=>{const W=y;if(N)return f['set'](C,p,'EX',N);if(typeof a===W(0xee))return f[W(0xef)](C,p,'EX',a);return f[W(0xef)](C,p);},'del':C=>f['del'](C),'delete':C=>f['del'](C),'close':()=>f['quit'](),'ping':()=>f[n(0xf0)](),'hincrby':(C,p,a)=>f[n(0xf1)](C,p,a),'incrby':(C,p)=>f['incrby'](C,p)};}function F(){const A=['number','set','ping','hincrby'];F=function(){return A;};return F();}
|
|
@@ -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';function y(k,f){k=k-0x152;const C=F();let p=C[k];return p;}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 F(){const d=['register','get','list','bind'];F=function(){return d;};return F();}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(k){const u=y,f=new ResourceRegistry(),C=createFind(k,f),p=createFindOne(k,f),a=createCreate(k,f),N=createUpdate(k,f),W=createRemove(k,f),n=createFindRelation(k,f),A=createCreateRelation(k,f),H=createUpdateRelation(k,f),R=createDeleteRelation(k,f);return{'register':f[u(0x152)]['bind'](f),'has':f['has']['bind'](f),'get':f[u(0x153)]['bind'](f),'list':f[u(0x154)][u(0x155)](f),'find':C,'findOne':p,'create':a,'update':N,'delete':W,'findRelation':n,'createRelation':A,'updateRelation':H,'deleteRelation':R};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
const N=y;import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function F(){const A=['length','split','every','name','Resource\x20already\x20registered:\x20','resources','list','values','version','table','key','entries','test','column'];F=function(){return A;};return F();}function y(k,f){k=k-0xa5;const C=F();let p=C[k];return p;}function validQualified(k){const p=y;return k['split']('.')[p(0xa5)]<=0x2&&k[p(0xa6)]('.')[p(0xa7)](f=>ident['test'](f));}export class ResourceRegistry{['resources']=new Map();['register'](k){const a=y;for(const f of Array['isArray'](k)?k:[k]){this['validate'](f);if(this['resources']['has'](f[a(0xa8)]))throw new ConflictError(a(0xa9)+f['name']);this[a(0xaa)]['set'](f[a(0xa8)],f);}}['has'](k){return this['resources']['has'](k);}['get'](k){const f=this['resources']['get'](k);if(!f)throw new NotFoundError('Resource\x20not\x20registered:\x20'+k);return f;}[N(0xab)](){const W=N;return[...this['resources'][W(0xac)]()];}['validate'](k){const n=N;if(k[n(0xad)]!==0x1||!ident['test'](k['name'])||!validQualified(k[n(0xae)])||!ident['test'](k[n(0xaf)]))throw new ValidationError('Invalid\x20resource\x20contract:\x20'+k['name']);for(const [f,C]of Object[n(0xb0)](k['fields'])){if(!ident['test'](f)||!ident[n(0xb1)](C[n(0xb2)]??f))throw new ValidationError('Invalid\x20resource\x20field:\x20'+f);}}}
|
|
@@ -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(k,f){const u=y,C=dictionaryIndexesCache[u(0x133)](f)??new Map(),p=dictionaryRevisionsCache[u(0x133)](f)??new Map();dictionaryIndexesCache['set'](f,C),dictionaryRevisionsCache[u(0x134)](f,p);const a=k['filter'](W=>p['get'](W)!==f[u(0x135)](W));if(a['length']===0x0)return C;const N=await Promise['all'](a['map'](async W=>{const d=u;if(!f['has'](W))return[W,new Map()];const n=await f[d(0x133)](W),A=new Map();for(const H of n){const R=H['code']??H['id'];if(R==null)continue;A['set'](String(R),{'id':R,'text':H['name']??H['text'],...H['color']!==undefined?{'color':H['color']}:{},...H['icon']!==undefined?{'icon':H['icon']}:{}});}return[W,A];}));for(const [W,n]of N){C['set'](W,n),p['set'](W,f['revision'](W));}return C;}function y(k,f){k=k-0x133;const C=F();let p=C[k];return p;}export async function addDictionaryLookupData(k,f,C){const j=y;if(!C||k['length']===0x0)return k;const p=Object['entries'](f)[j(0x136)](([N,W])=>{const n=W['dictionary'];return n?[{'field':N,'dictionaryName':n}]:[];});if(p['length']===0x0)return k;const a=await getDictionaryIndexes([...new Set(p[j(0x137)](({dictionaryName:N})=>N))],C);for(const N of k){for(const {field:W,dictionaryName:n}of p){const A=N[W];N[W+'_data']=A==null?null:a['get'](n)?.['get'](String(A))??null;}}return k;}function F(){const z=['get','set','revision','flatMap','map'];F=function(){return z;};return F();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function y(k,f){k=k-0x124;const C=F();let p=C[k];return p;}function F(){const A=['file','string'];F=function(){return A;};return F();}export function addFileToken(k,f,C){const n=y;if(!C||k['length']===0x0)return k;const p=Object['entries'](f)['filter'](([,a])=>a['type']===n(0x124))['map'](([a])=>a);for(const a of k){for(const N of p){const W=a[N];typeof W===n(0x125)&&W['length']>0x0&&(a[N]=C['create'](W));}}return k;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function F(){const P=['get','keys','delete','table','filter','has','length','SELECT\x20','rows'];F=function(){return P;};return F();}import{qi,qt}from'../utils/sql.js';function y(k,f){k=k-0xd5;const C=F();let p=C[k];return p;}const tableLookupCache=new WeakMap();export function clearTableLookupCache(k,f){const i=y,C=tableLookupCache[i(0xd5)](f);if(!C)return;for(const p of C[i(0xd6)]()){p['startsWith'](k+':')&&C[i(0xd7)](p);}}export async function addTableLookupData(k,f,C){const b=y;if(!C||k['length']===0x0)return k;const p=tableLookupCache['get'](C)??new Map();tableLookupCache['set'](C,p);const a=Object['entries'](f)['flatMap'](([N,W])=>{const {table:n,value:value='id',text:text='name'}=W['lookup']??{};return n?[{'field':N,'table':n,'value':value,'text':text}]:[];});for(const N of a){const W=new Map();for(const R of k){const u=R[N['field']];(typeof u==='string'||typeof u==='number')&&W['set'](String(u),u);}const n=N[b(0xd8)]+':'+N['value']+':'+N['text'],A=p['get'](n)??new Map();p['set'](n,A);const H=[...W['entries']()][b(0xd9)](([d])=>!A[b(0xda)](d))['map'](([,d])=>d);if(H[b(0xdb)]>0x0){const d=await C['query'](b(0xdc)+qi(N['value'])+'\x20AS\x20id,\x20'+qi(N['text'])+'\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20'+qt(N['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(N['value'])+'\x20=\x20ANY($1)',[H]);for(const j of d[b(0xdd)]){A['set'](String(j['id']),j);}for(const z of H){!A['has'](String(z))&&A['set'](String(z),null);}}for(const T of k){const S=T[N['field']];T[N['field']+'_data']=S==null?null:A[b(0xd5)](String(S))??null;}}return k;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{UnsupportedError}from'../../../errors.js';import{createCreate}from'./create.js';function y(k,f){k=k-0x1b4;const C=F();let p=C[k];return p;}export function createCreateRelation(k,f){const C=createCreate(k,f);return async function p({name:a,id:N,relation:W,data:n,user:A},H){const S=y,R=H?.['pg']??k['pg'],u=f[S(0x1b4)](a);if(['notes','files'][S(0x1b5)](W)&&!u['capabilities']?.['includes'](W))throw new UnsupportedError(S(0x1b6)+W+'\x22\x20requires\x20a\x20capabilities\x20\x22'+W+'\x22');if(W==='notes'){const z=await R['query'](S(0x1b7),[a,String(N),n?.['body']]);return z['rows'][0x0];}if(W===S(0x1b8)){const T=await R['query']('INSERT\x20INTO\x20admin.files\x20(resource,\x20resource_id,\x20file_path,\x20size)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*',[a,String(N),n?.[S(0x1b9)],n?.['size']??null]);return T['rows'][0x0];}const d=u['relations']?.[W];if(!d?.['foreignKey']||!d['resource']&&!d['table'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+W+'\x22\x20requires\x20a\x20project/provider\x20implementation');if(!n)throw new UnsupportedError('No\x20data\x20provided\x20for\x20relation:\x20'+n);if(!d[S(0x1ba)])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+W);n[d['foreignKey']]=N;const j=await C({'name':d[S(0x1ba)],'data':n??{},'user':A});return j;};}function F(){const i=['get','includes','Generic\x20Resource\x20relation\x20\x22','INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*','files','filePath','resource'];F=function(){return i;};return F();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';import{qi,qt,
|
|
1
|
+
import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';import{qi,qt,writableData}from'../utils/sql.js';function y(k,f){k=k-0x1e1;const C=F();let p=C[k];return p;}import{validateInputData}from'../utils/fields.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';function F(){const b=['fields','created_at','push','created_by','INSERT\x20INTO\x20','audit','name','create','keys'];F=function(){return b;};return F();}export function createCreate(k,f){return async function C({name:p,data:a,user:N},W){const i=y,n=f['get'](p);assertOperation(n,'create',N),validateInputData({'resource':n,'data':a});const A=writableData(n,a);n[i(0x1e1)][i(0x1e2)]&&A[i(0x1e3)](['created_at',new Date()]);n['fields'][i(0x1e4)]&&A['push']([i(0x1e4),N?.['id']]);if(!A['length'])throw new ValidationError('No\x20writable\x20fields');const H=A['map'](([T])=>qi(T)),R=A['map']((T,S)=>'$'+(S+0x1)),u=A['map'](([,T])=>T),d=W?.['pg']??k['pg'],j=await d['query'](i(0x1e5)+qt(n['table'])+'\x20('+H['join'](',\x20')+')\x20'+('VALUES\x20('+R['join'](',\x20')+')\x20')+'RETURNING\x20*',u),z=j['rows'][0x0];return clearTableLookupCache(n['table'],d),await(W?.[i(0x1e6)]??k[i(0x1e6)])?.['write']({'userId':N?.['id'],'module':n['module'],'resource':n[i(0x1e7)],'resourceId':z[n['key']],'action':i(0x1e8),'fields':Object[i(0x1e9)](a)}),z;};}
|