vome-core 0.0.55 → 0.0.57
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/admin/config/plugin-dev.js +1 -1
- package/dist/admin/crud/config.js +1 -1
- package/dist/admin/crud/confirm.js +1 -1
- package/dist/admin/crud/dict.js +1 -1
- package/dist/admin/crud/index.js +1 -1
- package/dist/admin/crud/key.js +1 -1
- package/dist/admin/crud/mitt.js +1 -1
- package/dist/admin/crud/plugins.js +1 -1
- package/dist/admin/crud/span.js +1 -1
- package/dist/admin/crud/style.js +1 -1
- package/dist/admin/crud/validate.js +1 -1
- package/dist/admin/directives/perm.js +1 -1
- package/dist/admin/hooks/useUpload.js +1 -1
- package/dist/admin/lib/browser.js +1 -1
- package/dist/admin/lib/cn.js +1 -1
- package/dist/admin/lib/dialog-float.js +1 -1
- package/dist/admin/lib/export-excel.js +1 -1
- package/dist/admin/lib/file-preview.js +1 -1
- package/dist/admin/lib/import-excel.js +1 -1
- package/dist/admin/lib/json.js +1 -1
- package/dist/admin/lib/menu.js +1 -1
- package/dist/admin/lib/tree.js +1 -1
- package/dist/admin/lib/upload.js +1 -1
- package/dist/admin/lib/video-frame.js +1 -1
- package/dist/index.js +1 -1
- package/dist/server/index.js +1 -1
- package/dist/shared/excel.js +1 -1
- package/dist/shared/index.js +1 -1
- package/dist/shared/tree.js +1 -1
- package/dist/src/core/index.d.ts +2 -2
- package/dist/src/ext/index.d.ts +7 -1
- package/dist/src/ext/market-crypto.d.ts +41 -0
- package/dist/src/ext/market-install.test.d.ts +1 -0
- package/dist/src/ext/market-package.d.ts +28 -0
- package/dist/src/ext/module-install-gate.d.ts +20 -0
- package/dist/src/ext/module-install.d.ts +25 -0
- package/dist/src/ext/module-registry.d.ts +8 -2
- package/dist/src/ext/path.d.ts +6 -0
- package/dist/src/server/index.d.ts +2 -2
- package/dist/typings/ext/market.d.ts +43 -0
- package/dist/typings/ext/module.d.ts +7 -0
- package/package.json +3 -1
package/dist/shared/excel.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const _0x16fc69=_0x1e4d;(function(_0x426491,_0x800203){const _0x3f6839=_0x1e4d,_0x4e6f88=_0x426491();while(!![]){try{const _0x56044a=-parseInt(_0x3f6839(0x116))/0x1+-parseInt(_0x3f6839(0x124))/0x2*(-parseInt(_0x3f6839(0x123))/0x3)+parseInt(_0x3f6839(0x11d))/0x4*(parseInt(_0x3f6839(0x110))/0x5)+parseInt(_0x3f6839(0x10d))/0x6+parseInt(_0x3f6839(0x115))/0x7*(parseInt(_0x3f6839(0x11b))/0x8)+-parseInt(_0x3f6839(0x129))/0x9+-parseInt(_0x3f6839(0x112))/0xa*(-parseInt(_0x3f6839(0x122))/0xb);if(_0x56044a===_0x800203)break;else _0x4e6f88['push'](_0x4e6f88['shift']());}catch(_0x502ded){_0x4e6f88['push'](_0x4e6f88['shift']());}}}(_0x1031,0x549d2));import*as _0x55a6e6 from'xlsx';export const IMPORT_SKIP_FIELDS=['id',_0x16fc69(0x113),_0x16fc69(0x10f),_0x16fc69(0x11c),_0x16fc69(0x117)];export function isImportSkipField(_0x4a678c){const _0x3222a8=_0x16fc69;return IMPORT_SKIP_FIELDS[_0x3222a8(0x11a)](_0x4a678c);}export function buildExcelBuffer(_0x36f0d6,_0x330638,_0x4e797e){const _0x1c5006=_0x16fc69,_0x1a1273=_0x36f0d6[_0x1c5006(0x128)](_0x4391b8=>_0x4391b8['label']||_0x4391b8[_0x1c5006(0x119)]),_0x29b328=_0x330638[_0x1c5006(0x128)](_0x324f05=>_0x36f0d6['map'](_0x4d37fa=>{const _0x56887e=_0x1c5006;if(_0x4e797e)return _0x4e797e(_0x4d37fa[_0x56887e(0x119)],_0x324f05);const _0x53ce76=_0x324f05[_0x4d37fa[_0x56887e(0x119)]];if(_0x53ce76==null)return'';return String(_0x53ce76);})),_0x24b8a6=_0x55a6e6[_0x1c5006(0x126)][_0x1c5006(0x11f)]([_0x1a1273,..._0x29b328]),_0x9d25f3=_0x55a6e6[_0x1c5006(0x126)]['book_new']();return _0x55a6e6[_0x1c5006(0x126)]['book_append_sheet'](_0x9d25f3,_0x24b8a6,'Sheet1'),_0x55a6e6[_0x1c5006(0x111)](_0x9d25f3,{'bookType':_0x1c5006(0x12b),'type':'array'});}export function buildImportTemplateBuffer(_0x4e8d0a){return buildExcelBuffer(_0x4e8d0a,[]);}export function parseExcelBuffer(_0x53a9e2,_0x8767a7){const _0x49b6c6=_0x16fc69,_0x4ab2b4=_0x55a6e6[_0x49b6c6(0x10e)](_0x53a9e2,{'type':_0x49b6c6(0x11e),'cellDates':!![]}),_0x825d5d=_0x4ab2b4['SheetNames'][0x0];if(!_0x825d5d)return[];const _0x2c8d9b=_0x4ab2b4['Sheets'][_0x825d5d];if(!_0x2c8d9b)return[];const _0x3be857=_0x55a6e6['utils']['sheet_to_json'](_0x2c8d9b,{'header':0x1,'defval':'','raw':![]});if(!_0x3be857[_0x49b6c6(0x125)])return[];const _0x189623=(_0x3be857[0x0]||[])['map'](_0x1ff4b1=>String(_0x1ff4b1??'')['trim']()),_0x2d9891=new Map();if(_0x8767a7?.[_0x49b6c6(0x125)])for(const _0x21d5ab of _0x8767a7){_0x2d9891[_0x49b6c6(0x114)](_0x21d5ab[_0x49b6c6(0x120)][_0x49b6c6(0x121)](),_0x21d5ab[_0x49b6c6(0x119)]),_0x2d9891['set'](_0x21d5ab[_0x49b6c6(0x119)],_0x21d5ab[_0x49b6c6(0x119)]);}const _0x224c87=_0x189623[_0x49b6c6(0x128)](_0x41dd43=>{if(!_0x41dd43)return'';return _0x2d9891['get'](_0x41dd43)||_0x41dd43;}),_0x113ba9=[];for(let _0x49187a=0x1;_0x49187a<_0x3be857[_0x49b6c6(0x125)];_0x49187a++){const _0x94a72a=_0x3be857[_0x49187a]||[],_0x37db36={};let _0x25c65b=!![];for(let _0x132641=0x0;_0x132641<_0x224c87[_0x49b6c6(0x125)];_0x132641++){const _0x1515ea=_0x224c87[_0x132641];if(!_0x1515ea)continue;let _0x296aff=_0x94a72a[_0x132641];if(_0x296aff==null||_0x296aff===''){_0x37db36[_0x1515ea]=_0x296aff==null?null:'';continue;}_0x25c65b=![],typeof _0x296aff==='string'?_0x37db36[_0x1515ea]=_0x296aff[_0x49b6c6(0x121)]():_0x37db36[_0x1515ea]=_0x296aff;}if(!_0x25c65b)_0x113ba9[_0x49b6c6(0x12c)](_0x37db36);}return _0x113ba9;}export function excelFilename(_0x101f32){const _0x4fc742=_0x16fc69;return _0x101f32[_0x4fc742(0x118)]('.xlsx')?_0x101f32:_0x101f32+'.xlsx';}function _0x1e4d(_0x376893,_0x58a6b9){_0x376893=_0x376893-0x10d;const _0x103108=_0x1031();let _0x1e4d04=_0x103108[_0x376893];if(_0x1e4d['SCmoQZ']===undefined){var _0x311ca7=function(_0x3d8c0e){const _0x423fac='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x55a6e6='',_0x4a678c='';for(let _0x36f0d6=0x0,_0x330638,_0x4e797e,_0x1a1273=0x0;_0x4e797e=_0x3d8c0e['charAt'](_0x1a1273++);~_0x4e797e&&(_0x330638=_0x36f0d6%0x4?_0x330638*0x40+_0x4e797e:_0x4e797e,_0x36f0d6++%0x4)?_0x55a6e6+=String['fromCharCode'](0xff&_0x330638>>(-0x2*_0x36f0d6&0x6)):0x0){_0x4e797e=_0x423fac['indexOf'](_0x4e797e);}for(let _0x29b328=0x0,_0x24b8a6=_0x55a6e6['length'];_0x29b328<_0x24b8a6;_0x29b328++){_0x4a678c+='%'+('00'+_0x55a6e6['charCodeAt'](_0x29b328)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x4a678c);};_0x1e4d['QXpJvl']=_0x311ca7,_0x1e4d['twsrGp']={},_0x1e4d['SCmoQZ']=!![];}const _0xf5fbfb=_0x103108[0x0],_0x289df5=_0x376893+_0xf5fbfb,_0x3188b2=_0x1e4d['twsrGp'][_0x289df5];return!_0x3188b2?(_0x1e4d04=_0x1e4d['QXpJvl'](_0x1e4d04),_0x1e4d['twsrGp'][_0x289df5]=_0x1e4d04):_0x1e4d04=_0x3188b2,_0x1e4d04;}function _0x1031(){const _0x262529=['DxbKyxrLvgLTzq','mJviyK1fDeK','D3jPDgu','mtiWuwXhrezz','y3jLyxrLvgLTzq','C2v0','mJmXBe1xs1jH','mZCWnZKWtMXlr2TR','DgvUyw50swq','zw5KC1DPDgG','ChjVCa','Aw5JBhvKzxm','nZm2mePjAKfWtW','zgvSzxrLzef0','nti5nMP5ug1rAa','yxjYyxK','yw9Hx3rVx3nOzwv0','BgfIzwW','DhjPBq','mtG5mZK4C3zMCxvm','m093DuzrBG','nJaYntqYEhjYuwLR','BgvUz3rO','DxrPBhm','yxbWBgLJyxrPB24VDM5KlM9Wzw54BwXMB3jTyxrZlw9MzMLJzwrVy3vTzw50lNnWCMvHzhnOzwv0BwWUC2HLzxq','BwfW','ndqYodC0n3DSrvrUzW','yxr0ywnOBwvUDdSGzMLSzw5HBwuQpvvurI04jYC','EgXZEa','ChvZAa','mZK4nZuWngvPzMrrvW','CMvHza'];_0x1031=function(){return _0x262529;};return _0x1031();}export function excelResponseHeaders(_0x3658a4){const _0x56697c=_0x16fc69,_0x5b82a5=excelFilename(_0x3658a4);return{'Content-Type':_0x56697c(0x127),'Content-Disposition':_0x56697c(0x12a)+encodeURIComponent(_0x5b82a5)};}
|
package/dist/shared/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
function _0x2029(){var _0xcda00e=['mtvpAeL2BNC','nJn4qMrWBKe','mtGXswHfCxzp','ntGYnK96AxrkuW','mJqWotmZnMPKrunNAG','nZDiwgLKrhG','ndCYmZe1nxjjyxL2AG','nZKZmJC3ofHYCgXjAq','nZuYodiWAKDoAKTQ','mJGWndHXDu1Psfi','nfjRvwjhuq','mtu0mdy2otbyC2XSC2m'];_0x2029=function(){return _0xcda00e;};return _0x2029();}function _0x426e(_0x46fad8,_0x2a4a65){_0x46fad8=_0x46fad8-0x18c;var _0x2029ea=_0x2029();var _0x426e78=_0x2029ea[_0x46fad8];if(_0x426e['uGobyE']===undefined){var _0x537641=function(_0x2587e8){var _0x1718b9='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x5d337a='',_0x3c8530='';for(var _0x95f61b=0x0,_0x4d01ad,_0x141bc0,_0x2f1759=0x0;_0x141bc0=_0x2587e8['charAt'](_0x2f1759++);~_0x141bc0&&(_0x4d01ad=_0x95f61b%0x4?_0x4d01ad*0x40+_0x141bc0:_0x141bc0,_0x95f61b++%0x4)?_0x5d337a+=String['fromCharCode'](0xff&_0x4d01ad>>(-0x2*_0x95f61b&0x6)):0x0){_0x141bc0=_0x1718b9['indexOf'](_0x141bc0);}for(var _0x552f10=0x0,_0x5e64ca=_0x5d337a['length'];_0x552f10<_0x5e64ca;_0x552f10++){_0x3c8530+='%'+('00'+_0x5d337a['charCodeAt'](_0x552f10)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x3c8530);};_0x426e['wBNoyo']=_0x537641,_0x426e['LydlDd']={},_0x426e['uGobyE']=!![];}var _0x1745f2=_0x2029ea[0x0],_0x403502=_0x46fad8+_0x1745f2,_0x4aaf1b=_0x426e['LydlDd'][_0x403502];return!_0x4aaf1b?(_0x426e78=_0x426e['wBNoyo'](_0x426e78),_0x426e['LydlDd'][_0x403502]=_0x426e78):_0x426e78=_0x4aaf1b,_0x426e78;}(function(_0x150255,_0x3154ce){var _0x1f6e6c=_0x426e,_0x593c59=_0x150255();while(!![]){try{var _0x59903e=parseInt(_0x1f6e6c(0x18c))/0x1*(parseInt(_0x1f6e6c(0x18d))/0x2)+-parseInt(_0x1f6e6c(0x190))/0x3*(parseInt(_0x1f6e6c(0x194))/0x4)+parseInt(_0x1f6e6c(0x196))/0x5*(parseInt(_0x1f6e6c(0x18e))/0x6)+-parseInt(_0x1f6e6c(0x191))/0x7+parseInt(_0x1f6e6c(0x193))/0x8*(-parseInt(_0x1f6e6c(0x197))/0x9)+parseInt(_0x1f6e6c(0x195))/0xa+-parseInt(_0x1f6e6c(0x18f))/0xb*(-parseInt(_0x1f6e6c(0x192))/0xc);if(_0x59903e===_0x3154ce)break;else _0x593c59['push'](_0x593c59['shift']());}catch(_0x4bf2d8){_0x593c59['push'](_0x593c59['shift']());}}}(_0x2029,0xef262));export{merge}from'../comm/merge';export{deepTree,flattenTree}from'./tree';export{RES_CODE}from'../routing/base';export{buildExcelBuffer,buildImportTemplateBuffer,parseExcelBuffer,excelFilename,excelResponseHeaders,IMPORT_SKIP_FIELDS,isImportSkipField}from'./excel';
|
package/dist/shared/tree.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
(function(_0x22fe2d,_0x251fcf){const _0x3c0f3f=_0x218b,_0x3fd5de=_0x22fe2d();while(!![]){try{const _0x2ae1a4=-parseInt(_0x3c0f3f(0x1d0))/0x1+parseInt(_0x3c0f3f(0x1d6))/0x2+parseInt(_0x3c0f3f(0x1de))/0x3*(parseInt(_0x3c0f3f(0x1dc))/0x4)+-parseInt(_0x3c0f3f(0x1d2))/0x5*(parseInt(_0x3c0f3f(0x1df))/0x6)+parseInt(_0x3c0f3f(0x1d4))/0x7+parseInt(_0x3c0f3f(0x1d9))/0x8+-parseInt(_0x3c0f3f(0x1d1))/0x9;if(_0x2ae1a4===_0x251fcf)break;else _0x3fd5de['push'](_0x3fd5de['shift']());}catch(_0x1bd300){_0x3fd5de['push'](_0x3fd5de['shift']());}}}(_0xa181,0x3dedb));function _0x218b(_0xd08245,_0x31e99e){_0xd08245=_0xd08245-0x1cd;const _0xa181c3=_0xa181();let _0x218b54=_0xa181c3[_0xd08245];if(_0x218b['xinbwK']===undefined){var _0x455d3a=function(_0xdec2a9){const _0x3d9f1f='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x8aec3c='',_0x12e533='';for(let _0x46766f=0x0,_0x22c1cb,_0x22d1bf,_0x31ba9e=0x0;_0x22d1bf=_0xdec2a9['charAt'](_0x31ba9e++);~_0x22d1bf&&(_0x22c1cb=_0x46766f%0x4?_0x22c1cb*0x40+_0x22d1bf:_0x22d1bf,_0x46766f++%0x4)?_0x8aec3c+=String['fromCharCode'](0xff&_0x22c1cb>>(-0x2*_0x46766f&0x6)):0x0){_0x22d1bf=_0x3d9f1f['indexOf'](_0x22d1bf);}for(let _0xac23ea=0x0,_0x34cacd=_0x8aec3c['length'];_0xac23ea<_0x34cacd;_0xac23ea++){_0x12e533+='%'+('00'+_0x8aec3c['charCodeAt'](_0xac23ea)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x12e533);};_0x218b['ttGCXZ']=_0x455d3a,_0x218b['clshfR']={},_0x218b['xinbwK']=!![];}const _0x4928e1=_0xa181c3[0x0],_0xff7fb=_0xd08245+_0x4928e1,_0x1e65d3=_0x218b['clshfR'][_0xff7fb];return!_0x1e65d3?(_0x218b54=_0x218b['ttGCXZ'](_0x218b54),_0x218b['clshfR'][_0xff7fb]=_0x218b54):_0x218b54=_0x1e65d3,_0x218b54;}export function deepTree(_0x8aec3c,_0x12e533='asc'){const _0x4edf99=_0x218b,_0x46766f=new Map();for(const _0x31ba9e of _0x8aec3c){if(_0x31ba9e['id']==null)continue;_0x46766f[_0x4edf99(0x1dd)](_0x31ba9e['id'],{..._0x31ba9e,'children':[]});}const _0x22c1cb=[];for(const _0xac23ea of _0x46766f[_0x4edf99(0x1db)]()){const _0x34cacd=_0xac23ea[_0x4edf99(0x1da)];_0x34cacd!=null&&_0x34cacd!==''&&_0x46766f[_0x4edf99(0x1cd)](_0x34cacd)?_0x46766f[_0x4edf99(0x1cf)](_0x34cacd)[_0x4edf99(0x1ce)][_0x4edf99(0x1d8)](_0xac23ea):_0x22c1cb['push'](_0xac23ea);}const _0x22d1bf=_0x496c4c=>{const _0x1d4df9=_0x4edf99;_0x496c4c['sort']((_0x183468,_0x21c172)=>{const _0x43ba7d=_0x218b,_0x508623=_0x183468[_0x43ba7d(0x1d3)]??0x0,_0x3f852d=_0x21c172[_0x43ba7d(0x1d3)]??0x0,_0x5d4ef3=_0x12e533===_0x43ba7d(0x1d5)?_0x3f852d-_0x508623:_0x508623-_0x3f852d;return _0x5d4ef3||Number(_0x183468['id'])-Number(_0x21c172['id']);});for(const _0xb90320 of _0x496c4c)if(_0xb90320[_0x1d4df9(0x1ce)]?.[_0x1d4df9(0x1d7)])_0x22d1bf(_0xb90320[_0x1d4df9(0x1ce)]);};return _0x22d1bf(_0x22c1cb),_0x22c1cb;}export function flattenTree(_0x42f83c,_0x22be8c,_0x53c0f5=0x0,_0x30f866=[]){const _0x3ec0db=_0x218b;for(const _0x4f0e11 of _0x42f83c){const _0x1e6e8f=_0x4f0e11[_0x3ec0db(0x1ce)]||[];_0x30f866[_0x3ec0db(0x1d8)]({..._0x4f0e11,'depth':_0x53c0f5,'hasChildren':_0x1e6e8f[_0x3ec0db(0x1d7)]>0x0});if(_0x1e6e8f[_0x3ec0db(0x1d7)]&&_0x22be8c[_0x3ec0db(0x1cd)](_0x4f0e11['id']))flattenTree(_0x1e6e8f,_0x22be8c,_0x53c0f5+0x1,_0x30f866);}return _0x30f866;}function _0xa181(){const _0x2879c1=['mJaXnZbVwgDvEfu','B3jKzxjoDw0','mta2mJGXmhzWwK1wrq','zgvZyW','odKWnJK0A2LetNPQ','BgvUz3rO','ChvZAa','odaZoteYu0PNuvbh','CgfYzw50swq','DMfSDwvZ','nejPv05hAG','C2v0','nJy2mZm5z2v3yuLy','ndq0vgXlAKvg','AgfZ','y2HPBgrYzw4','z2v0','mZeWode2ywHOywTb','nteXmdKYy21tDK1z'];_0xa181=function(){return _0x2879c1;};return _0xa181();}
|
package/dist/src/core/index.d.ts
CHANGED
|
@@ -15,6 +15,6 @@ export { Eps, isEpsEnabled, BaseController, RES_CODE, Controller, Get, Post, Put
|
|
|
15
15
|
export type { ApiFail, ApiResult, ApiSuccess, ControllerCrudOptions, ControllerMeta, ControllerRouteMeta, ControllerSide, CrudApi, CrudBeforeFn, CrudRegistrar, EpsApiItem, EpsColumn, EpsEntity, EpsModuleMap, HttpMethod, InsertParamFn, QueryExtendFn, QueryExtendQb, QueryFieldRef, QueryJoin, QueryJoinType, QueryOp, QueryOpCtx, QueryWhereFn, QueryWhereResult, ResCode, RouteMiddleware, RouteParamMeta, RouteParamSource, } from '../routing';
|
|
16
16
|
export { DbStore, baseColumns, BASE_COLUMN_COMMENTS, entitySchemas, columnComments, getColumnComments, syncColumnCommentsToPg, readCrudConfig, resolveSoftDelete, resolveUpsert, Repository, getRepository, InjectRepository, BaseService, q, compactWhere, needsAdvancedQuery, buildQueryOp, queryWithOp, attachCrudRoutes, isTenantEnabled, noTenant, normalizeHost, resolveTenantScope, tableHasDepartmentId, resolveDataScope, applyDataScopeWhere, applyRowScopes, noDataScope, } from '../orm';
|
|
17
17
|
export type { CrudUpsertMode, CrudModifyType, CrudWriteOptions, CrudTrashQueryOptions, CrudDeleteOptions, PageQuery, PagePagination, PageResult, } from '../orm';
|
|
18
|
-
export { BasePlugin, loadPluginClass, loadPluginClassFromPath, loadModuleHandlers, loadModuleHandlersFromPath, readPluginScript, resolvePluginServerPath, pDataPath, pPluginPath, pModulesPath, pModulePath, ModuleRegistry, microApps, createModuleGateway, } from '../ext';
|
|
19
|
-
export type { PluginManifest, PluginInfo, PluginPayload, PluginCheckResult, ModuleRouteDef, ModuleMenuDef, ModuleManifest, ModuleHandlerCtx, ModuleHandler, ModuleInstalled, } from '../ext';
|
|
18
|
+
export { BasePlugin, loadPluginClass, loadPluginClassFromPath, loadModuleHandlers, loadModuleHandlersFromPath, readPluginScript, resolvePluginServerPath, pDataPath, pPluginPath, pModulesPath, pModulePath, pLicensesPath, pLicensePath, ModuleRegistry, microApps, createModuleGateway, DEFAULT_MARKET_PUBLIC_KEY_B64, newMarketId, newInstallNonce, stableStringify, resolveMarketPublicKey, resolveMarketPrivateKey, ed25519Sign, ed25519Verify, generateMarketKeyPair, pricingFromPrice, buildMarketSigPayload, signMarketSigPayload, verifyMarketSigPayload, issueLicenseFile, parseLicenseFile, verifyLicenseFile, hashZipEntries, readZipManifest, readMarketSig, sealVomeBuffer, verifySealedVome, assertModuleInstallAllowed, assertModuleDirAllowed, peekMarketPackage, installModuleFromZip, uninstallModuleFiles, } from '../ext';
|
|
19
|
+
export type { PluginManifest, PluginInfo, PluginPayload, PluginCheckResult, ModuleRouteDef, ModuleMenuDef, ModuleManifest, ModuleHandlerCtx, ModuleHandler, ModuleInstalled, MarketPricing, MarketSigPayload, MarketLicensePayload, MarketLicenseFile, InstallGateKind, InstallGateResult, AssertModuleInstallOptions, InstallModuleOptions, InstallModuleResult, } from '../ext';
|
|
20
20
|
export { defineAuthMacro } from '../auth';
|
package/dist/src/ext/index.d.ts
CHANGED
|
@@ -7,9 +7,15 @@
|
|
|
7
7
|
*/
|
|
8
8
|
export { BasePlugin } from './base-plugin';
|
|
9
9
|
export { loadPluginClass, loadPluginClassFromPath, loadModuleHandlers, loadModuleHandlersFromPath, readPluginScript, resolvePluginServerPath, } from './load-plugin';
|
|
10
|
-
export { pDataPath, pPluginPath, pModulesPath, pModulePath, } from './path';
|
|
10
|
+
export { pDataPath, pPluginPath, pModulesPath, pModulePath, pLicensesPath, pLicensePath, } from './path';
|
|
11
11
|
export { ModuleRegistry, } from './module-registry';
|
|
12
12
|
export { microApps } from './micro-apps';
|
|
13
13
|
export { createModuleGateway } from './module-gateway';
|
|
14
|
+
export { DEFAULT_MARKET_PUBLIC_KEY_B64, newMarketId, newInstallNonce, stableStringify, resolveMarketPublicKey, resolveMarketPrivateKey, ed25519Sign, ed25519Verify, generateMarketKeyPair, pricingFromPrice, buildMarketSigPayload, signMarketSigPayload, verifyMarketSigPayload, issueLicenseFile, parseLicenseFile, verifyLicenseFile, } from './market-crypto';
|
|
15
|
+
export { hashZipEntries, readZipManifest, readMarketSig, sealVomeBuffer, verifySealedVome, } from './market-package';
|
|
16
|
+
export { assertModuleInstallAllowed, assertModuleDirAllowed, peekMarketPackage, } from './module-install-gate';
|
|
17
|
+
export { installModuleFromZip, uninstallModuleFiles, } from './module-install';
|
|
18
|
+
export type { InstallModuleOptions, InstallModuleResult, } from './module-install';
|
|
14
19
|
export type { PluginManifest, PluginInfo, PluginPayload, PluginCheckResult, } from '../../typings/ext/plugin';
|
|
15
20
|
export type { ModuleRouteDef, ModuleMenuDef, ModuleManifest, ModuleHandlerCtx, ModuleHandler, ModuleInstalled, } from '../../typings/ext/module';
|
|
21
|
+
export type { MarketPricing, MarketSigPayload, MarketLicensePayload, MarketLicenseFile, InstallGateKind, InstallGateResult, AssertModuleInstallOptions, } from '../../typings/ext/market';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type KeyObject } from 'node:crypto';
|
|
2
|
+
import type { MarketLicenseFile, MarketLicensePayload, MarketPricing, MarketSigPayload } from '../../typings/ext/market';
|
|
3
|
+
/**
|
|
4
|
+
* 官方插件市场 Ed25519 公钥(SPKI DER base64)。
|
|
5
|
+
* 私钥仅保存在插件市场宿主配置 `market.privateKey`,不得打进客户站点 / npm 包对外常量。
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFAULT_MARKET_PUBLIC_KEY_B64 = "MCowBQYDK2VwAyEAKAnlQfYBA+ooJQSkjmmYsq+Zx6lTjHLgViX2Yt+gdr0=";
|
|
8
|
+
export declare function newMarketId(): string;
|
|
9
|
+
export declare function newInstallNonce(): string;
|
|
10
|
+
/** 稳定 JSON(键排序),供签名 */
|
|
11
|
+
export declare function stableStringify(value: unknown): string;
|
|
12
|
+
export declare function resolveMarketPublicKey(override?: string | Uint8Array): KeyObject;
|
|
13
|
+
export declare function resolveMarketPrivateKey(privateKey: string | Uint8Array): KeyObject;
|
|
14
|
+
export declare function ed25519Sign(data: string | Buffer, privateKey: string | Uint8Array | KeyObject): string;
|
|
15
|
+
export declare function ed25519Verify(data: string | Buffer, sigB64: string, publicKey?: string | Uint8Array | KeyObject): boolean;
|
|
16
|
+
/** 生成一对 Ed25519(运维轮换密钥用) */
|
|
17
|
+
export declare function generateMarketKeyPair(): {
|
|
18
|
+
publicKey: string;
|
|
19
|
+
privateKey: string;
|
|
20
|
+
};
|
|
21
|
+
export declare function pricingFromPrice(price: number): MarketPricing;
|
|
22
|
+
export declare function buildMarketSigPayload(input: {
|
|
23
|
+
marketId: string;
|
|
24
|
+
pricing: MarketPricing;
|
|
25
|
+
version: string;
|
|
26
|
+
key: string;
|
|
27
|
+
contentHash: string;
|
|
28
|
+
}): MarketSigPayload;
|
|
29
|
+
export declare function signMarketSigPayload(payload: MarketSigPayload, privateKey: string | Uint8Array | KeyObject): string;
|
|
30
|
+
export declare function verifyMarketSigPayload(payload: MarketSigPayload, sigB64: string, publicKey?: string | Uint8Array | KeyObject): boolean;
|
|
31
|
+
export declare function issueLicenseFile(payload: Omit<MarketLicensePayload, 'v'> & {
|
|
32
|
+
v?: 1;
|
|
33
|
+
}, privateKey: string | Uint8Array | KeyObject): MarketLicenseFile;
|
|
34
|
+
export declare function parseLicenseFile(raw: string | MarketLicenseFile | object): MarketLicenseFile | null;
|
|
35
|
+
export declare function verifyLicenseFile(file: MarketLicenseFile, opts?: {
|
|
36
|
+
publicKey?: string | Uint8Array | KeyObject;
|
|
37
|
+
expectMarketId?: string;
|
|
38
|
+
expectNonce?: string | null;
|
|
39
|
+
now?: Date;
|
|
40
|
+
}): boolean;
|
|
41
|
+
export declare function sha256Hex(parts: Buffer[]): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import AdmZip from 'adm-zip';
|
|
2
|
+
import type { KeyObject } from 'node:crypto';
|
|
3
|
+
import type { ModuleManifest } from '../../typings/ext/module';
|
|
4
|
+
import type { MarketPricing, MarketSigPayload } from '../../typings/ext/market';
|
|
5
|
+
/** 对 zip 内除 market.sig 外的条目做内容指纹 */
|
|
6
|
+
export declare function hashZipEntries(zip: AdmZip): string;
|
|
7
|
+
export declare function readZipManifest(zip: AdmZip): ModuleManifest;
|
|
8
|
+
export type MarketSigFile = {
|
|
9
|
+
payload: MarketSigPayload;
|
|
10
|
+
sig: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function readMarketSig(zip: AdmZip): MarketSigFile | null;
|
|
13
|
+
/**
|
|
14
|
+
* 市场注入 marketId / pricing,写入 market.sig(作者无需手写 marketId)
|
|
15
|
+
*/
|
|
16
|
+
export declare function sealVomeBuffer(input: Buffer, opts: {
|
|
17
|
+
marketId: string;
|
|
18
|
+
pricing: MarketPricing;
|
|
19
|
+
privateKey: string | Uint8Array | KeyObject;
|
|
20
|
+
}): Buffer;
|
|
21
|
+
/**
|
|
22
|
+
* 验签市场包。无 market.sig → 非市场包(null)。
|
|
23
|
+
* 有签但失败 → 抛错。
|
|
24
|
+
*/
|
|
25
|
+
export declare function verifySealedVome(input: Buffer | AdmZip, publicKey?: string | Uint8Array | KeyObject): {
|
|
26
|
+
manifest: ModuleManifest;
|
|
27
|
+
sig: MarketSigFile;
|
|
28
|
+
} | null;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AssertModuleInstallOptions, InstallGateResult } from '../../typings/ext/market';
|
|
2
|
+
import type { MarketSigFile } from './market-package';
|
|
3
|
+
/**
|
|
4
|
+
* 安装前强制门禁(写入 core):
|
|
5
|
+
* - 无市场签名 → 自研包,放行
|
|
6
|
+
* - 签名 free → 放行
|
|
7
|
+
* - 签名 paid → 须本地 .lic 或联网拉取「签名 license」验签通过(不采信 boolean)
|
|
8
|
+
*/
|
|
9
|
+
export declare function assertModuleInstallAllowed(zipPathOrBuffer: string | Buffer, opts?: AssertModuleInstallOptions): Promise<InstallGateResult>;
|
|
10
|
+
/**
|
|
11
|
+
* 启动/热加载时校验已落盘模块(防直接拷贝 modules/ 绕过 install)
|
|
12
|
+
*/
|
|
13
|
+
export declare function assertModuleDirAllowed(dir: string, opts?: {
|
|
14
|
+
marketPublicKey?: string | Uint8Array;
|
|
15
|
+
}): InstallGateResult;
|
|
16
|
+
/** 从 zip 快速探测是否为市场签发包(调试用) */
|
|
17
|
+
export declare function peekMarketPackage(zipPathOrBuffer: string | Buffer): {
|
|
18
|
+
manifest: import(".").ModuleManifest;
|
|
19
|
+
sig: MarketSigFile;
|
|
20
|
+
} | null;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AssertModuleInstallOptions, InstallGateResult } from '../../typings/ext/market';
|
|
2
|
+
import type { ModuleManifest } from '../../typings/ext/module';
|
|
3
|
+
export type InstallModuleOptions = AssertModuleInstallOptions & {
|
|
4
|
+
/** 覆盖落盘前:宿主注销钩子等 */
|
|
5
|
+
beforeReplace?: (key: string, manifest: ModuleManifest) => void | Promise<void>;
|
|
6
|
+
};
|
|
7
|
+
export type InstallModuleResult = {
|
|
8
|
+
manifest: ModuleManifest;
|
|
9
|
+
path: string;
|
|
10
|
+
hasServer: boolean;
|
|
11
|
+
hasWeb: boolean;
|
|
12
|
+
hasHook: boolean;
|
|
13
|
+
entryUrl?: string;
|
|
14
|
+
gate: InstallGateResult;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* 安装闭环(仅 core):验签门禁 → 解压落盘 → ModuleRegistry.load
|
|
18
|
+
* 宿主不得自行 AdmZip 解压;菜单/钩子由宿主在返回后处理。
|
|
19
|
+
*/
|
|
20
|
+
export declare function installModuleFromZip(filePath: string, opts?: InstallModuleOptions): Promise<InstallModuleResult>;
|
|
21
|
+
/** 仅卸盘(菜单/钩子由宿主处理) */
|
|
22
|
+
export declare function uninstallModuleFiles(key: string): {
|
|
23
|
+
ok: true;
|
|
24
|
+
path: string;
|
|
25
|
+
};
|
|
@@ -11,8 +11,14 @@ export declare const ModuleRegistry: {
|
|
|
11
11
|
manifest: ModuleManifest;
|
|
12
12
|
routes: ModuleRouteDef[];
|
|
13
13
|
}[];
|
|
14
|
-
/**
|
|
15
|
-
|
|
14
|
+
/**
|
|
15
|
+
* 加载已落盘模块到内存;无 routes 时可无 handlers(纯页面 / 仅钩子)
|
|
16
|
+
* 加载前强制目录验签/license(防直接拷贝 modules/)
|
|
17
|
+
*/
|
|
18
|
+
load(key: string, opts?: {
|
|
19
|
+
marketPublicKey?: string | Uint8Array;
|
|
20
|
+
skipMarketCheck?: boolean;
|
|
21
|
+
}): LoadedModule;
|
|
16
22
|
unload(key: string): void;
|
|
17
23
|
/** 匹配 method + 子路径,调用对应 handler */
|
|
18
24
|
dispatch(key: string, method: string, subPath: string, ctx: ModuleHandlerCtx): Promise<{
|
package/dist/src/ext/path.d.ts
CHANGED
|
@@ -6,3 +6,9 @@ export declare function pPluginPath(): string;
|
|
|
6
6
|
export declare function pModulesPath(): string;
|
|
7
7
|
/** 单个业务模块目录 */
|
|
8
8
|
export declare function pModulePath(key: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* 插件市场离线 license 目录:宿主 service 根下 `licenses/`
|
|
11
|
+
*(一插件一文件:`<marketId>.lic`)
|
|
12
|
+
*/
|
|
13
|
+
export declare function pLicensesPath(): string;
|
|
14
|
+
export declare function pLicensePath(marketId: string): string;
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* 导入时加载宿主 `src/config`;扫描 / IoC / 路由注册在 `App.start()` 中执行。
|
|
5
5
|
* 宿主须:`import 'reflect-metadata'`,并开启 `experimentalDecorators` + `emitDecoratorMetadata`。
|
|
6
6
|
*/
|
|
7
|
-
export { App, appendInjectMeta, BaseController, Body, CommException, Context, Controller, Delete, Eps, isEpsEnabled, Get, getEnv, Inject, Ioc, isCommException, listControllers, isPublicHttpRoute, listProviders, Logger, Param, Patch, Post, Provide, Public, Perms, IgnorePerms, Put, Query, RES_CODE, scanFiles, ScopeEnum, Use, vome, VomeConfig, DbStore, baseColumns, BASE_COLUMN_COMMENTS, entitySchemas, columnComments, getColumnComments, syncColumnCommentsToPg, Repository, getRepository, InjectRepository, BaseService, q, attachCrudRoutes, isTenantEnabled, noTenant, normalizeHost, resolveTenantScope, tableHasDepartmentId, resolveDataScope, applyDataScopeWhere, applyRowScopes, noDataScope, BasePlugin, loadPluginClass, loadPluginClassFromPath, loadModuleHandlers, loadModuleHandlersFromPath, readPluginScript, resolvePluginServerPath, pDataPath, pPluginPath, pModulesPath, pModulePath, ModuleRegistry, microApps, createModuleGateway, defineAuthMacro, } from '../core';
|
|
7
|
+
export { App, appendInjectMeta, BaseController, Body, CommException, Context, Controller, Delete, Eps, isEpsEnabled, Get, getEnv, Inject, Ioc, isCommException, listControllers, isPublicHttpRoute, listProviders, Logger, Param, Patch, Post, Provide, Public, Perms, IgnorePerms, Put, Query, RES_CODE, scanFiles, ScopeEnum, Use, vome, VomeConfig, DbStore, baseColumns, BASE_COLUMN_COMMENTS, entitySchemas, columnComments, getColumnComments, syncColumnCommentsToPg, Repository, getRepository, InjectRepository, BaseService, q, attachCrudRoutes, isTenantEnabled, noTenant, normalizeHost, resolveTenantScope, tableHasDepartmentId, resolveDataScope, applyDataScopeWhere, applyRowScopes, noDataScope, BasePlugin, loadPluginClass, loadPluginClassFromPath, loadModuleHandlers, loadModuleHandlersFromPath, readPluginScript, resolvePluginServerPath, pDataPath, pPluginPath, pModulesPath, pModulePath, pLicensesPath, pLicensePath, ModuleRegistry, microApps, createModuleGateway, defineAuthMacro, DEFAULT_MARKET_PUBLIC_KEY_B64, newMarketId, newInstallNonce, stableStringify, resolveMarketPublicKey, resolveMarketPrivateKey, ed25519Sign, ed25519Verify, generateMarketKeyPair, pricingFromPrice, buildMarketSigPayload, signMarketSigPayload, verifyMarketSigPayload, issueLicenseFile, parseLicenseFile, verifyLicenseFile, hashZipEntries, readZipManifest, readMarketSig, sealVomeBuffer, verifySealedVome, assertModuleInstallAllowed, assertModuleDirAllowed, peekMarketPackage, installModuleFromZip, uninstallModuleFiles, } from '../core';
|
|
8
8
|
export { buildExcelBuffer, buildImportTemplateBuffer, parseExcelBuffer, excelFilename, excelResponseHeaders, IMPORT_SKIP_FIELDS, isImportSkipField, } from '../shared/excel';
|
|
9
9
|
export type { ExcelColumn, ExcelFormatCell } from '../shared/excel';
|
|
10
|
-
export type { ApiFail, ApiResult, ApiSuccess, ClassToken, ContextData, ControllerCrudOptions, ControllerMeta, ControllerRouteMeta, ControllerSide, CrudApi, CrudBeforeFn, CrudRegistrar, CrudUpsertMode, CrudModifyType, CrudWriteOptions, CrudTrashQueryOptions, CrudDeleteOptions, PageQuery, PagePagination, PageResult, PluginManifest, PluginInfo, PluginPayload, PluginCheckResult, ModuleRouteDef, ModuleMenuDef, ModuleManifest, ModuleHandlerCtx, ModuleHandler, ModuleInstalled, EpsApiItem, EpsColumn, EpsEntity, EpsModuleMap, HttpMethod, InjectionToken, InjectMeta, InsertParamFn, ProvideOptions, QueryExtendFn, QueryExtendQb, QueryFieldRef, QueryJoin, QueryJoinType, QueryOp, QueryOpCtx, QueryWhereFn, QueryWhereResult, ResCode, RouteMiddleware, RouteParamMeta, RouteParamSource, ScanOptions, } from '../core';
|
|
10
|
+
export type { ApiFail, ApiResult, ApiSuccess, ClassToken, ContextData, ControllerCrudOptions, ControllerMeta, ControllerRouteMeta, ControllerSide, CrudApi, CrudBeforeFn, CrudRegistrar, CrudUpsertMode, CrudModifyType, CrudWriteOptions, CrudTrashQueryOptions, CrudDeleteOptions, PageQuery, PagePagination, PageResult, PluginManifest, PluginInfo, PluginPayload, PluginCheckResult, ModuleRouteDef, ModuleMenuDef, ModuleManifest, ModuleHandlerCtx, ModuleHandler, ModuleInstalled, MarketPricing, MarketSigPayload, MarketLicensePayload, MarketLicenseFile, InstallGateKind, InstallGateResult, AssertModuleInstallOptions, InstallModuleOptions, InstallModuleResult, EpsApiItem, EpsColumn, EpsEntity, EpsModuleMap, HttpMethod, InjectionToken, InjectMeta, InsertParamFn, ProvideOptions, QueryExtendFn, QueryExtendQb, QueryFieldRef, QueryJoin, QueryJoinType, QueryOp, QueryOpCtx, QueryWhereFn, QueryWhereResult, ResCode, RouteMiddleware, RouteParamMeta, RouteParamSource, ScanOptions, } from '../core';
|
|
11
11
|
/** 与 package.json version 同步 */
|
|
12
12
|
export declare const version: string;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** 市场签发包定价 */
|
|
2
|
+
export type MarketPricing = 'free' | 'paid';
|
|
3
|
+
/** market.sig 签名载荷(稳定字段,勿随意增删) */
|
|
4
|
+
export type MarketSigPayload = {
|
|
5
|
+
marketId: string;
|
|
6
|
+
pricing: MarketPricing;
|
|
7
|
+
version: string;
|
|
8
|
+
key: string;
|
|
9
|
+
contentHash: string;
|
|
10
|
+
};
|
|
11
|
+
/** 离线 / 联网 license 载荷 */
|
|
12
|
+
export type MarketLicensePayload = {
|
|
13
|
+
v: 1;
|
|
14
|
+
marketId: string;
|
|
15
|
+
buyerId: string;
|
|
16
|
+
issuedAt: string;
|
|
17
|
+
/** null = 永久 */
|
|
18
|
+
expireAt: string | null;
|
|
19
|
+
orderNo?: string | null;
|
|
20
|
+
/** 联网签发时必填,须与请求 nonce 一致 */
|
|
21
|
+
nonce?: string | null;
|
|
22
|
+
pluginName?: string | null;
|
|
23
|
+
};
|
|
24
|
+
/** 磁盘 / 接口中的 license 文件结构 */
|
|
25
|
+
export type MarketLicenseFile = {
|
|
26
|
+
payload: MarketLicensePayload;
|
|
27
|
+
sig: string;
|
|
28
|
+
};
|
|
29
|
+
export type InstallGateKind = 'local' | 'market-free' | 'market-paid';
|
|
30
|
+
export type InstallGateResult = {
|
|
31
|
+
kind: InstallGateKind;
|
|
32
|
+
marketId?: string;
|
|
33
|
+
via?: 'file' | 'network';
|
|
34
|
+
};
|
|
35
|
+
export type AssertModuleInstallOptions = {
|
|
36
|
+
/** 覆盖 core 内置市场公钥(SPKI DER base64 或 PEM) */
|
|
37
|
+
marketPublicKey?: string | Uint8Array;
|
|
38
|
+
/**
|
|
39
|
+
* 联网拉取「签名 license 原文」;core 只验签,不采信 boolean。
|
|
40
|
+
* 返回 null/空 = 无凭证。
|
|
41
|
+
*/
|
|
42
|
+
fetchSignedLicense?: (marketId: string, nonce: string) => Promise<string | MarketLicenseFile | null | undefined>;
|
|
43
|
+
};
|
|
@@ -28,6 +28,13 @@ export type ModuleManifest = {
|
|
|
28
28
|
readme?: string;
|
|
29
29
|
routes?: ModuleRouteDef[];
|
|
30
30
|
menus?: ModuleMenuDef[];
|
|
31
|
+
/**
|
|
32
|
+
* 插件市场终身 ID(仅市场注入,作者勿手写)
|
|
33
|
+
* 无 market.sig 时忽略,按自研包安装
|
|
34
|
+
*/
|
|
35
|
+
marketId?: string;
|
|
36
|
+
/** 市场定价;与 market.sig 一致 */
|
|
37
|
+
pricing?: 'free' | 'paid';
|
|
31
38
|
};
|
|
32
39
|
export type ModuleHandlerCtx = {
|
|
33
40
|
body: unknown;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vome-core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.57",
|
|
4
4
|
"description": "Vome framework — shared + Bun/Elysia server + Vue admin",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -136,6 +136,7 @@
|
|
|
136
136
|
}
|
|
137
137
|
},
|
|
138
138
|
"devDependencies": {
|
|
139
|
+
"@types/adm-zip": "^0.5.8",
|
|
139
140
|
"bun-types": "latest",
|
|
140
141
|
"drizzle-orm": "latest",
|
|
141
142
|
"drizzle-zod": "^0.8.3",
|
|
@@ -148,6 +149,7 @@
|
|
|
148
149
|
"dependencies": {
|
|
149
150
|
"@bogeychan/elysia-logger": "^0.1.10",
|
|
150
151
|
"@elysiajs/openapi": "^1.4.15",
|
|
152
|
+
"adm-zip": "^0.6.0",
|
|
151
153
|
"pino": "^10.3.1",
|
|
152
154
|
"pino-pretty": "^13.1.3",
|
|
153
155
|
"xlsx": "^0.18.5"
|