@nocobase/plugin-backups 2.3.0-beta.6 → 2.4.0-alpha.2

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.
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ "use strict";(self.webpackChunk_nocobase_plugin_backups_client_v2=self.webpackChunk_nocobase_plugin_backups_client_v2||[]).push([["268"],{887:function(e,t,n){n.r(t),n.d(t,{default:function(){return g}});var r=n(694),a=n(625),o=n(59),l=n(155),c=n.n(l),u=n(837);n(693);var i=n(488);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function m(e,t,n,r,a,o,l){try{var c=e[o](l),u=c.value}catch(e){n(e);return}c.done?t(u):Promise.resolve(u).then(r,a)}function p(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var o=e.apply(t,n);function l(e){m(o,r,a,l,c,"next",e)}function c(e){m(o,r,a,l,c,"throw",e)}l(void 0)})}}function f(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],l=!0,c=!1;try{for(a=a.call(e);!(l=(n=a.next()).done)&&(o.push(n.value),!t||o.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{l||null==a.return||a.return()}finally{if(c)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},l=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),c=Object.defineProperty;return c(l,"next",{value:u(0)}),c(l,"throw",{value:u(1)}),c(l,"return",{value:u(2)}),"function"==typeof Symbol&&c(l,Symbol.iterator,{value:function(){return this}}),l;function u(c){return function(u){var i=[c,u];if(n)throw TypeError("Generator is already executing.");for(;l&&(l=0,i[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var y={scheduled:!1,cron:"0 0 * * *",keep:100,enableFilesBackup:!1,enablePortalsBackup:!0},h=function(e){var t,n,r,a=e.onChange,o=e.value,l=function(e,t){if(null==e)return{};var n,r,a,o={};if("u">typeof Reflect&&Reflect.ownKeys){for(a=0,n=Reflect.ownKeys(Object(e));a<n.length;a++)r=n[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r]);return o}if(o=function(e,t){if(null==e)return{};var n,r,a={},o=Object.getOwnPropertyNames(e);for(r=0;r<o.length;r++)n=o[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n]);return a}(e,t),Object.getOwnPropertySymbols)for(a=0,n=Object.getOwnPropertySymbols(e);a<n.length;a++)r=n[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r]);return o}(e,["onChange","value"]),i=window.cronLocale;return c().createElement("fieldset",{className:"nb-backup-settings-cron"},c().createElement(u.l4,(t=f({},l),n=n={clearButton:!1,locale:i,value:null!=(r=null!=o?o:y.cron)?r:"",setValue:function(e){null==a||a(e)}},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)))},g=function(){var e=(0,r.useFlowContext)(),t=(0,i.k)(),n=o.App.useApp(),u=n.message,s=n.notification,m=b(o.Form.useForm(),1)[0],g=b((0,l.useState)(!1),2),v=g[0],w=g[1],k=o.Form.useWatch("scheduled",m),O=(0,a.useRequest)(function(){return p(function(){var t;return d(this,function(n){switch(n.label){case 0:return[4,e.api.request({url:"backupSettings:get/1"})];case 1:return[2,null==(t=n.sent().data)?void 0:t.data]}})})()},{onSuccess:function(e){m.setFieldsValue(f({},y,e))}}),j=(0,a.useRequest)(function(){return p(function(){var t,n;return d(this,function(r){switch(r.label){case 0:return[4,e.api.request({url:"storages:list"})];case 1:return[2,(null!=(t=null==(n=r.sent().data)?void 0:n.data)?t:[]).filter(function(e){return"local"!==e.type})]}})})()}),E=(0,l.useMemo)(function(){var e;return(null!=(e=j.data)?e:[]).map(function(e){return{label:e.title,value:e.id}})},[j.data]);return c().createElement(o.Card,{bordered:!1},c().createElement("style",null,"\n .nb-backup-settings-cron {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n }\n\n .nb-backup-settings-cron .react-js-cron {\n padding: 0.5em 0.5em 0 0.5em;\n border: 1px dashed #ccc;\n }\n\n .nb-backup-settings-cron .react-js-cron .react-js-cron-field {\n flex-shrink: 0;\n margin-bottom: 0.5em;\n }\n\n .nb-backup-settings-cron .react-js-cron .react-js-cron-field > span {\n flex-shrink: 0;\n margin: 0 0.5em 0 0;\n }\n\n .nb-backup-settings-cron .react-js-cron .react-js-cron-field > .react-js-cron-select {\n margin: 0 0.5em 0 0;\n }\n\n .nb-backup-settings-cron\n .react-js-cron\n .react-js-cron-field\n > .react-js-cron-select\n .ant-select-selection-overflow {\n align-items: center;\n flex: initial;\n }\n"),c().createElement(o.Form,{form:m,layout:"vertical",initialValues:y,disabled:O.loading,onFinish:function(n){return p(function(){var r,a,o;return d(this,function(l){switch(l.label){case 0:r=f({},O.data,n),w(!0),l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,e.api.request({url:"backupSettings:update/1",method:"post",data:r,skipNotify:!0})];case 2:return l.sent(),O.mutate(r),u.success(t("Saved successfully")),[3,5];case 3:return a=l.sent(),o=e.api.toErrMessages(a),s.error({message:o.length?o.map(function(e,n){var r="string"==typeof e?e:e.message;return c().createElement("div",{key:"".concat(n,"_").concat(r)},r||t("Save failed"))}):t("Save failed"),role:"alert"}),[3,5];case 4:return w(!1),[7];case 5:return[2]}})})()}},c().createElement(o.Form.Item,{label:t("Automatic backup")},c().createElement(o.Space,{direction:"vertical",style:{width:"100%"}},c().createElement(o.Form.Item,{name:"scheduled",valuePropName:"checked",noStyle:!0},c().createElement(o.Checkbox,null,t("Run automatic backup on the cron schedule"))),c().createElement(o.Form.Item,{name:"cron",rules:[{required:!!k,message:t("The field value is required")}],style:{marginBottom:0}},c().createElement(h,{disabled:!k})))),c().createElement(o.Form.Item,{name:"keep",label:t("Maximum number of backups"),extra:t("The maximum number of backups to keep, older backups are automatically deleted."),required:!0,rules:[{required:!0,message:t("The field value is required")},{type:"integer",min:1,max:1e3,message:t("Maximum number of backups must be an integer between {{min}} and {{max}}",{min:1,max:1e3})}]},c().createElement(o.InputNumber,{min:1,max:1e3,precision:0,style:{width:"100%"}})),c().createElement(o.Form.Item,{name:"storageId",label:t("Sync backups to cloud storage")},c().createElement(o.Select,{loading:j.loading,options:E,style:{width:"100%"}})),c().createElement(o.Form.Item,{name:"enableFilesBackup",label:t("Backup local storage files"),valuePropName:"checked"},c().createElement(o.Switch,null)),c().createElement(o.Form.Item,{name:"enablePortalsBackup",label:t("Backup AI mode portals"),valuePropName:"checked"},c().createElement(o.Switch,null)),c().createElement(o.Form.Item,{name:"encryptionPassword",label:t("Restore password"),extra:t("If a restore password is set, it must be entered when restoring the backup.")},c().createElement(o.Input.Password,{autoComplete:"new-password",style:{width:"100%"}})),c().createElement(o.Form.Item,null,c().createElement(o.Button,{type:"primary",htmlType:"submit",loading:v},t("Submit")))))}}}]);
@@ -0,0 +1,10 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ (self.webpackChunk_nocobase_plugin_backups_client_v2=self.webpackChunk_nocobase_plugin_backups_client_v2||[]).push([["962"],{574:function(e,t,n){var r,a;void 0===(a="function"==typeof(r=function(){"use strict";function t(e,t,n){var r=new XMLHttpRequest;r.open("GET",e),r.responseType="blob",r.onload=function(){l(r.response,t,n)},r.onerror=function(){console.error("could not download file")},r.send()}function r(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function a(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(n){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var o="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof n.g&&n.g.global===n.g?n.g:void 0,u=o.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),l=o.saveAs||("object"!=typeof window||window!==o?function(){}:"download"in HTMLAnchorElement.prototype&&!u?function(e,n,u){var l=o.URL||o.webkitURL,i=document.createElement("a");i.download=n=n||e.name||"download",i.rel="noopener","string"==typeof e?(i.href=e,i.origin===location.origin?a(i):r(i.href)?t(e,n,u):a(i,i.target="_blank")):(i.href=l.createObjectURL(e),setTimeout(function(){l.revokeObjectURL(i.href)},4e4),setTimeout(function(){a(i)},0))}:"msSaveOrOpenBlob"in navigator?function(e,n,o){if(n=n||e.name||"download","string"!=typeof e){var u;navigator.msSaveOrOpenBlob((void 0===(u=o)?u={autoBom:!1}:"object"!=typeof u&&(console.warn("Deprecated: Expected third argument to be a object"),u={autoBom:!u}),u.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\uFEFF",e],{type:e.type}):e),n)}else if(r(e))t(e,n,o);else{var l=document.createElement("a");l.href=e,l.target="_blank",setTimeout(function(){a(l)})}}:function(e,n,r,a){if((a=a||open("","_blank"))&&(a.document.title=a.document.body.innerText="downloading..."),"string"==typeof e)return t(e,n,r);var l="application/octet-stream"===e.type,i=/constructor/i.test(o.HTMLElement)||o.safari,c=/CriOS\/[\d]+/.test(navigator.userAgent);if((c||l&&i||u)&&"u">typeof FileReader){var s=new FileReader;s.onloadend=function(){var e=s.result;e=c?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=e:location=e,a=null},s.readAsDataURL(e)}else{var f=o.URL||o.webkitURL,p=f.createObjectURL(e);a?a.location=p:location.href=p,a=null,setTimeout(function(){f.revokeObjectURL(p)},4e4)}});o.saveAs=l.saveAs=l,e.exports=l})?r.apply(t,[]):r)||(e.exports=a)},225:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return Y}});var r=n(694),a=n(625),o=n(59),u=n(155),l=n.n(u),i=n(477),c=n(485),s=n(185),f=n.n(s),p=n(574),d=n(401),b=(0,u.createContext)(null),m=function(){var e=(0,u.useContext)(b);if(!e)throw Error("BackupsContext provider is missing");return e},h=n(488);function v(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}var y={database:{dialect:""}},g=function(){var e=(0,r.useFlowContext)(),t=(0,a.useMemoizedFn)(function(){var t;return(t=function(){var t,n;return function(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(r){switch(r.label){case 0:return[4,e.api.request({url:"backups:appInfo"})];case 1:return[2,null!=(t=null==(n=r.sent().data)?void 0:n.data)?t:y]}})},function(){var e=this,n=arguments;return new Promise(function(r,a){var o=t.apply(e,n);function u(e){v(o,r,a,u,l,"next",e)}function l(e){v(o,r,a,u,l,"throw",e)}u(void 0)})})()}),n=(0,a.useRequest)(t,{cacheKey:"backupAppInfo",staleTime:-1}).data;return null!=n?n:y},w=function(){var e=(0,r.useFlowEngine)(),t=(0,c.useApp)();return{showCheckBackupMessage:(0,a.useMemoizedFn)(function(){var n=e.context[d.l];n?n.showCheckBackupMessage():("function"==typeof t.setMaintaining?t.setMaintaining(!0):t.maintaining=!0,t.error={command:{name:"APP Restoring"},message:"checking backup...",code:"APP_COMMANDING"})}),hideCheckBackupMessage:(0,a.useMemoizedFn)(function(){var n=e.context[d.l];n?n.hideCheckBackupMessage():"function"==typeof t.setMaintaining?t.setMaintaining(!1):t.maintaining=!1})}},k=n(194);function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function C(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}function S(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],u=!0,l=!1;try{for(a=a.call(e);!(u=(n=a.next()).done)&&(o.push(n.value),!t||o.length!==t);u=!0);}catch(e){l=!0,r=e}finally{try{u||null==a.return||a.return()}finally{if(l)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return E(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return E(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var A=function(e){var t=e.backup,n=(0,h.k)(),a=(0,r.useFlowContext)(),u=o.App.useApp().notification,i=S(l().useState(!1),2),c=i[0],s=i[1],f=S(l().useState(""),2),p=f[0],d=f[1],b=S(l().useState(!1),2),m=b[0],v=b[1],y=S(l().useState(""),2),E=y[0],A=y[1],x=l().useRef(!1),O=(0,k._)(),j=O.restoring,I=O.startRestoring,R=w().showCheckBackupMessage,M=g().database,P=M.schema,T=M.dialect,B=function(){d(""),A("")},F=function(){x.current||(s(!1),B())};return l().createElement(l().Fragment,null,l().createElement(o.Button,{type:"link",size:"small",disabled:j,onClick:function(){s(!0)}},n("Restore")),l().createElement(o.Modal,{title:n("Restore"),open:c,onCancel:F,closable:!m,keyboard:!m,maskClosable:!m,footer:[l().createElement(o.Button,{key:"back",disabled:m,onClick:F},n("Cancel")),l().createElement(o.Button,{key:"submit",type:"primary",loading:m,disabled:m,onClick:function(){var e;return(e=function(){var e,r,o,i,c,f,d,b,m,h;return function(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(y){switch(y.label){case 0:if(x.current)return[2];x.current=!0,v(!0),e=!1,y.label=1;case 1:return y.trys.push([1,3,4,5]),[4,a.api.request({url:"backups:restore",method:"post",skipNotify:!0,data:{name:t.name,password:p,dbSchema:E}})];case 2:return(c=null!=(r=null==(i=y.sent().data)||null==(o=i.data)?void 0:o.task)?r:null)&&I(c),R(),s(!1),B(),[3,5];case 3:return e=!(m=f=y.sent()).response||(null==(b=m.response.data)||null==(d=b.error)?void 0:d.maintaining)===!0,h=a.api.toErrMessages(f),u.error({message:h.map(function(e,t){var r="string"==typeof e?e:e.message;return l().createElement("div",{key:"".concat(t,"_").concat(r)},r||n("Restore failed"))}),role:"alert"}),[3,5];case 4:return e||(x.current=!1,v(!1)),[7];case 5:return[2]}})},function(){var t=this,n=arguments;return new Promise(function(r,a){var o=e.apply(t,n);function u(e){C(o,r,a,u,l,"next",e)}function l(e){C(o,r,a,u,l,"throw",e)}u(void 0)})})()}},n("Submit"))]},l().createElement(o.Form,{layout:"vertical",autoComplete:"off",disabled:m},["postgres","kingbase"].includes(T)&&l().createElement(o.Form.Item,{label:n("Confirm the application database schema"),help:n("Required if application database schema is different with the backup",{currentDbSchemaTips:P?"[".concat(P,"]"):""})},l().createElement(o.Input,{autoComplete:"new-password",value:E,onChange:function(e){return A(e.target.value)}})),l().createElement(o.Form.Item,{colon:!0,label:n("Restore password")},l().createElement(o.Input.Password,{value:p,autoComplete:"new-password",onChange:function(e){return d(e.target.value)}})))))};function x(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}function O(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var o=e.apply(t,n);function u(e){x(o,r,a,u,l,"next",e)}function l(e){x(o,r,a,u,l,"throw",e)}u(void 0)})}}function j(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function I(){var e,t,n=(e=["\n .ant-table-tbody > tr > td {\n line-height: ","px;\n }\n "],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return I=function(){return n},n}var R=function(){var e,t=(0,h.k)(),n=(0,r.useFlowContext)(),s=(0,c.useCurrentAppInfo)(),b=o.theme.useToken().token,v=(0,u.useMemo)(function(){return(0,i.css)(I(),b.controlHeight-b.paddingXXS)},[b.controlHeight,b.paddingXXS]),y=o.App.useApp(),g=y.modal,w=y.message,k=m(),E=k.data,C=k.loading,S=k.refreshAsync,x=(0,a.useRequest)(function(e){return O(function(){var t;return j(this,function(r){switch(r.label){case 0:return[4,n.api.request({url:"".concat(d.C,":destroy"),method:"post",params:{filterByTk:e}})];case 1:return[2,null==(t=r.sent().data)?void 0:t.data]}})})()},{manual:!0}).runAsync,R=(0,u.useCallback)(function(e){g.confirm({title:t("Delete record"),content:t("Are you sure you want to delete it?"),onOk:function(){return O(function(){return j(this,function(n){switch(n.label){case 0:return[4,x(e.name)];case 1:return n.sent(),[4,S()];case 2:return n.sent(),w.success(t("The deletion was successful.")),[2]}})})()}})},[x,w,g,S,t]),M=(0,u.useCallback)(function(e){return O(function(){var t,r,a,o,u;return j(this,function(l){switch(l.label){case 0:return a=null!=(t=null==s?void 0:s.name)?t:null==s||null==(r=s.data)?void 0:r.name,o={filterByTk:e.name},a&&(o.__appName=a),[4,n.api.request({url:"backups:download",method:"get",params:o,responseType:"blob"})];case 1:return u=new Blob([l.sent().data]),(0,p.saveAs)(u,e.name),[2]}})})()},[n.api,null==s||null==(e=s.data)?void 0:e.name,null==s?void 0:s.name]),P=function(e){return e.inProgress?{colSpan:0}:{}},T=(0,u.useMemo)(function(){return[{title:t("Backup list"),dataIndex:"name",width:400,ellipsis:!0,onCell:function(e){return e.inProgress?{colSpan:4}:{}},render:function(e,n){return n.inProgress?l().createElement("span",{style:{color:b.colorText}},e,"(",t("Backing up"),"...)"):l().createElement("span",null,e)}},{title:t("File size"),dataIndex:"fileSize",onCell:P},{title:t("Created at"),dataIndex:"createdAt",onCell:P,render:function(e){return e?f()(e).format("YYYY-MM-DD HH:mm:ss"):null}},{title:t("Actions"),dataIndex:"actions",onCell:P,render:function(e,n){return l().createElement(o.Space,{split:l().createElement(o.Divider,{type:"vertical"})},l().createElement(A,{backup:n}),l().createElement("a",{onClick:function(){M(n)}},t("Download")),l().createElement("a",{onClick:function(){return R(n)}},t("Delete")))}}]},[R,M,t,b.colorText]);return l().createElement(c.Table,{rowKey:"name",className:v,dataSource:null==E?void 0:E.data,loading:C,columns:T})},M=n(375);function P(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function T(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}function B(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var o=e.apply(t,n);function u(e){T(o,r,a,u,l,"next",e)}function l(e){T(o,r,a,u,l,"throw",e)}u(void 0)})}}function F(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],u=!0,l=!1;try{for(a=a.call(e);!(u=(n=a.next()).done)&&(o.push(n.value),!t||o.length!==t);u=!0);}catch(e){l=!0,r=e}finally{try{u||null==a.return||a.return()}finally{if(l)throw r}}return o}}(e,t)||q(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _(e){return function(e){if(Array.isArray(e))return P(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||q(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(e,t){if(e){if("string"==typeof e)return P(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return P(e,t)}}function L(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var U=function(){var e=F((0,u.useState)([]),2),t=e[0],n=e[1],i=(0,h.k)(),c=(0,r.useFlowContext)(),s=o.App.useApp(),f=s.message,p=s.notification,b=s.modal,v=m().refreshAsync,y=(0,a.useRequest)(function(){return B(function(){var e;return L(this,function(t){switch(t.label){case 0:return[4,c.api.request({url:"".concat(d.C,":create"),method:"post"})];case 1:return[2,null==(e=t.sent().data)?void 0:e.data]}})})()},{manual:!0,throttleWait:1e3}),g=y.runAsync,w=y.loading,k=(0,a.useRequest)(function(e){return B(function(){var t,n;return L(this,function(r){switch(r.label){case 0:return[4,c.api.request({url:"".concat(d.C,":taskStatus"),method:"get",params:{names:e}})];case 1:return[2,null!=(t=null==(n=r.sent().data)?void 0:n.data)?t:{}]}})})()},{manual:!0}).runAsync;(0,u.useEffect)(function(){if(0!==t.length){var e=setInterval(function(){return B(function(){var e,r,a,o,u,l,c,s,d,b,m,h;return L(this,function(y){switch(y.label){case 0:return[4,k(t)];case 1:e=y.sent(),r=[],a=[],o=!0,u=!1,l=void 0;try{for(c=Object.entries(e)[Symbol.iterator]();!(o=(s=c.next()).done);o=!0)b=(d=F(s.value,2))[0],(m=d[1]).inProgress||(m.message?(a.push(b),p.error({message:m.message,role:"alert"})):r.push(b))}catch(e){u=!0,l=e}finally{try{o||null==c.return||c.return()}finally{if(u)throw l}}if(h=_(r).concat(_(a)),!(r.length>0))return[3,3];return f.success(i("NEW_BACKUPS_CREATED",{names:r.join(", ")})),[4,v()];case 2:y.sent(),y.label=3;case 3:return h.length>0&&n(function(e){return e.filter(function(e){return!h.includes(e)})}),[2]}})})()},3e3);return function(){clearInterval(e)}}},[t,f,p,k,v,i]);var E=w?M.LoadingOutlined:M.PlusOutlined;return l().createElement(o.Button,{icon:l().createElement(E,null),disabled:w,type:"primary",onClick:function(){return B(function(){return L(this,function(e){return b.confirm({title:i("New backup"),content:i("Are you sure you want to create new backup?"),onOk:function(){return B(function(){return L(this,function(e){switch(e.label){case 0:return[4,B(function(){var e;return L(this,function(t){switch(t.label){case 0:return[4,g()];case 1:return(null==(e=t.sent())?void 0:e.name)&&n(function(t){return _(t).concat([e.name])}),f.success(i("New backup operation started")),[4,v()];case 2:return t.sent(),[2]}})})()];case 1:return e.sent(),[2]}})})()}}),[2]})})()}},i("New backup"))},D=function(){var e=(0,h.k)(),t=m(),n=t.refresh,r=t.loading,a=r?M.LoadingOutlined:M.ReloadOutlined;return l().createElement(o.Button,{onClick:n,icon:l().createElement(a,null),disabled:r},e("Refresh"))};function N(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function H(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}function z(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],u=!0,l=!1;try{for(a=a.call(e);!(u=(n=a.next()).done)&&(o.push(n.value),!t||o.length!==t);u=!0);}catch(e){l=!0,r=e}finally{try{u||null==a.return||a.return()}finally{if(l)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return N(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return N(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var G=function(){var e=(0,h.k)(),t=(0,r.useFlowContext)(),n=o.App.useApp().notification,a=z((0,u.useState)(!1),2),i=a[0],c=a[1],s=z((0,u.useState)(!1),2),f=s[0],p=s[1],d=z((0,u.useState)(""),2),b=d[0],m=d[1],v=z((0,u.useState)(""),2),y=v[0],E=v[1],C=z((0,u.useState)(null),2),S=C[0],A=C[1],x=z((0,u.useState)([]),2),O=x[0],j=x[1],I=l().useRef(!1),R=(0,k._)(),P=R.restoring,T=R.startRestoring,B=w().showCheckBackupMessage,F=g().database,_=F.schema,q=F.dialect,L=function(){m(""),A(null),j([]),E("")},U=function(){I.current||(c(!1),L())};return l().createElement(l().Fragment,null,l().createElement(o.Button,{icon:l().createElement(M.UploadOutlined,null),disabled:P,onClick:function(){c(!0)}},e("Restore backup from local")),l().createElement(o.Modal,{title:e("Restore backup from local"),open:i,onCancel:U,closable:!f,keyboard:!f,maskClosable:!f,footer:[l().createElement(o.Button,{key:"back",disabled:f,onClick:U},e("Cancel")),l().createElement(o.Button,{key:"submit",type:"primary",loading:f,disabled:f,onClick:function(){var r;return(r=function(){var r,a,o,u,i,s,f,d,m,h,v;return function(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(g){switch(g.label){case 0:if(I.current)return[2];if(!S)return n.error({message:e("Please select a backup file")}),[2];I.current=!0,p(!0),r=!1,(a=new FormData).append("file",S),a.append("password",b),a.append("dbSchema",y),g.label=1;case 1:return g.trys.push([1,3,4,5]),[4,t.api.request({url:"backups:upload",method:"post",data:a,skipNotify:!0})];case 2:return(s=null!=(o=null==(i=g.sent().data)||null==(u=i.data)?void 0:u.task)?o:null)&&T(s),B(),c(!1),L(),[3,5];case 3:return r=!(h=f=g.sent()).response||(null==(m=h.response.data)||null==(d=m.error)?void 0:d.maintaining)===!0,v=t.api.toErrMessages(f),n.error({message:v.map(function(t,n){var r="string"==typeof t?t:t.message;return l().createElement("div",{key:"".concat(n,"_").concat(r)},r||e("Restore failed"))}),role:"alert"}),[3,5];case 4:return r||(I.current=!1,p(!1)),[7];case 5:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(n,a){var o=r.apply(e,t);function u(e){H(o,n,a,u,l,"next",e)}function l(e){H(o,n,a,u,l,"throw",e)}u(void 0)})})()}},e("Submit"))]},l().createElement(o.Form,{layout:"vertical",autoComplete:"off",disabled:f},l().createElement(o.Form.Item,null,l().createElement(o.Upload.Dragger,{onRemove:function(){j([]),A(null)},fileList:O,multiple:!1,maxCount:1,beforeUpload:function(e){return A(e),j([e]),!1}},l().createElement("p",{className:"ant-upload-drag-icon"},l().createElement(M.InboxOutlined,null)),l().createElement("p",{className:"ant-upload-text"},e("Click or drag file to this area to upload")))),["postgres","kingbase"].includes(q)&&l().createElement(o.Form.Item,{label:e("Confirm the application database schema"),help:e("Required if application database schema is different with the backup",{currentDbSchemaTips:_?"[".concat(_,"]"):""})},l().createElement(o.Input,{autoComplete:"new-password",value:y,onChange:function(e){return E(e.target.value)}})),l().createElement(o.Form.Item,{colon:!0,label:e("Restore password")},l().createElement(o.Input.Password,{autoComplete:"new-password",value:b,onChange:function(e){return m(e.target.value)}})))))};function X(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}var K={data:[]},Y=function(){var e=(0,r.useFlowContext)(),t=(0,a.useRequest)(function(){var t;return(t=function(){var t;return function(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(n){switch(n.label){case 0:return[4,e.api.request({url:"".concat(d.C,":list"),method:"get"})];case 1:return[2,null!=(t=n.sent().data)?t:K]}})},function(){var e=this,n=arguments;return new Promise(function(r,a){var o=t.apply(e,n);function u(e){X(o,r,a,u,l,"next",e)}function l(e){X(o,r,a,u,l,"throw",e)}u(void 0)})})()});return l().createElement(b.Provider,{value:t},l().createElement(o.Card,{bordered:!1},l().createElement(o.Space,{style:{float:"right",marginBottom:16}},l().createElement(D,null),l().createElement(G,null),l().createElement(U,null)),l().createElement(R,null)))}}}]);
@@ -0,0 +1,16 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+ import React from 'react';
10
+ type RestoreLoadingContextValue = {
11
+ restoring: boolean;
12
+ startRestoring: (taskId: string) => void;
13
+ };
14
+ export declare const RestoreLoadingProvider: ({ children }: React.PropsWithChildren) => React.JSX.Element;
15
+ export declare function useRestoreLoading(): RestoreLoadingContextValue;
16
+ export {};
@@ -7,4 +7,4 @@
7
7
  * For more information, please refer to: https://www.nocobase.com/agreement.
8
8
  */
9
9
 
10
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("ahooks"),require("@emotion/css"),require("@nocobase/client-v2"),require("dayjs"),require("react"),require("antd"),require("@ant-design/icons"),require("@nocobase/flow-engine")):"function"==typeof define&&define.amd?define("@nocobase/plugin-backups/client-v2",["ahooks","@emotion/css","@nocobase/client-v2","dayjs","react","antd","@ant-design/icons","@nocobase/flow-engine"],t):"object"==typeof exports?exports["@nocobase/plugin-backups/client-v2"]=t(require("ahooks"),require("@emotion/css"),require("@nocobase/client-v2"),require("dayjs"),require("react"),require("antd"),require("@ant-design/icons"),require("@nocobase/flow-engine")):e["@nocobase/plugin-backups/client-v2"]=t(e.ahooks,e["@emotion/css"],e["@nocobase/client-v2"],e.dayjs,e.react,e.antd,e["@ant-design/icons"],e["@nocobase/flow-engine"])}(self,function(e,t,n,r,o,i,c,a){return function(){"use strict";var u,s,l,p={401:function(e,t,n){n.d(t,{C:function(){return r},l:function(){return o}});var r="backups",o="backupRestoreRuntime"},375:function(e){e.exports=c},477:function(e){e.exports=t},485:function(e){e.exports=n},694:function(e){e.exports=a},625:function(t){t.exports=e},59:function(e){e.exports=i},185:function(e){e.exports=r},155:function(e){e.exports=o}},f={};function d(e){var t=f[e];if(void 0!==t)return t.exports;var n=f[e]={id:e,exports:{}};return p[e].call(n.exports,n,n.exports,d),n.exports}d.m=p,d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){return""+e+"."+({268:"105b4075a27d89f7",346:"45d02ff0f75c76e4",567:"6b5a421f028393a2"})[e]+".js"},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},b={},d.l=function(e,t,n,r){if(b[e])return void b[e].push(t);if(void 0!==n)for(var o,i,c=document.getElementsByTagName("script"),a=0;a<c.length;a++){var u=c[a];if(u.getAttribute("src")==e||u.getAttribute("data-rspack")=="@nocobase/plugin-backups/client-v2:"+n){o=u;break}}o||(i=!0,(o=document.createElement("script")).timeout=120,d.nc&&o.setAttribute("nonce",d.nc),o.setAttribute("data-rspack","@nocobase/plugin-backups/client-v2:"+n),o.src=e),b[e]=[t];var s=function(t,n){o.onerror=o.onload=null,clearTimeout(l);var r=b[e];if(delete b[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},l=setTimeout(s.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=s.bind(null,o.onerror),o.onload=s.bind(null,o.onload),i&&document.head.appendChild(o)},d.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.nc=void 0,d.g.importScripts&&(g=d.g.location+"");var b,g,h=d.g.document;if(!g&&h&&(h.currentScript&&"SCRIPT"===h.currentScript.tagName.toUpperCase()&&(g=h.currentScript.src),!g)){var v=h.getElementsByTagName("script");if(v.length)for(var y=v.length-1;y>-1&&(!g||!/^http(s?):/.test(g));)g=v[y--].src}if(!g)throw Error("Automatic publicPath is not supported in this browser");d.p=g.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),u={889:0},d.f.j=function(e,t){var n=d.o(u,e)?u[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=u[e]=[t,r]});t.push(n[2]=r);var o=d.p+d.u(e),i=Error();d.l(o,function(t){if(d.o(u,e)&&(0!==(n=u[e])&&(u[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",i.name="ChunkLoadError",i.type=r,i.request=o,n[1](i)}},"chunk-"+e,e)}},s=function(e,t){var n,r,o=t[0],i=t[1],c=t[2],a=0;if(o.some(function(e){return 0!==u[e]})){for(n in i)d.o(i,n)&&(d.m[n]=i[n]);c&&c(d)}for(e&&e(t);a<o.length;a++)r=o[a],d.o(u,r)&&u[r]&&u[r][0](),u[r]=0},(l=self.webpackChunk_nocobase_plugin_backups_client_v2=self.webpackChunk_nocobase_plugin_backups_client_v2||[]).forEach(s.bind(null,0)),l.push=s.bind(null,l.push.bind(l));var m={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src){var n=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"");n.indexOf("/static/plugins/@nocobase/plugin-backups/dist/client-v2/")>=0&&(e=n.replace(/\/[^\/]+$/,"/"))}if(!e){var r=window.__webpack_public_path__||"";r&&("/"!==r.charAt(r.length-1)&&(r+="/"),e=r+"static/plugins/@nocobase/plugin-backups/dist/client-v2/")}if(!e){var o=window.__nocobase_modern_client_prefix__||"v",i="/"+(o=String(o).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var c=window.location.pathname||"/",a=c.indexOf(i);e=a>=0?c.slice(0,a+1):"/"}e&&(e=e.replace(RegExp("/"+o+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/@nocobase/plugin-backups/dist/client-v2/"}d.p=e}(),!function(){d.r(m),d.d(m,{default:function(){return u}});var e=d(485),t=d(401);function n(e,t,n,r,o,i,c){try{var a=e[i](c),u=a.value}catch(e){n(e);return}a.done?t(u):Promise.resolve(u).then(r,o)}function r(e,t,n){return(r=a()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&i(o,n.prototype),o}).apply(null,arguments)}function o(e){return(o=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function i(e,t){return(i=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function c(e){var t="function"==typeof Map?new Map:void 0;return(c=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return r(e,arguments,o(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),i(n,e)})(e)}function a(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(a=function(){return!!e})()}var u=function(e){var r;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function c(){var e,t;if(!(this instanceof c))throw TypeError("Cannot call a class as a function");return e=c,t=arguments,e=o(e),function(e,t){var n;if(t&&("object"==((n=t)&&"u">typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,a()?Reflect.construct(e,t||[],o(this).constructor):e.apply(this,t))}return c.prototype=Object.create(e&&e.prototype,{constructor:{value:c,writable:!0,configurable:!0}}),e&&i(c,e),r=[{key:"load",value:function(){var e;return(e=function(){var e;return function(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},c=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),a=Object.defineProperty;return a(c,"next",{value:u(0)}),a(c,"throw",{value:u(1)}),a(c,"return",{value:u(2)}),"function"==typeof Symbol&&a(c,Symbol.iterator,{value:function(){return this}}),c;function u(a){return function(u){var s=[a,u];if(n)throw TypeError("Generator is already executing.");for(;c&&(c=0,s[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&s[0]?r.return:s[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;switch(r=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,r=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(6===s[0]&&i.label<o[1]){i.label=o[1],o=s;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(s);break}o[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],r=0}finally{n=o=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}}}(this,function(n){return e=this.t("Backup manager"),this.flowEngine.context.defineProperty(t.l,{value:this.createBackupRestoreRuntime()}),this.pluginSettingsManager.addMenuItem({key:t.C,title:e,icon:"CloudServerOutlined",showTabs:!0}),this.pluginSettingsManager.addPageTabItem({menuKey:t.C,key:"list",title:this.t("Backup list"),icon:"CloudServerOutlined",aclSnippet:"pm.".concat(t.C),componentLoader:function(){return d.e("567").then(d.bind(d,258))}}),this.pluginSettingsManager.addPageTabItem({menuKey:t.C,key:"settings",title:this.t("Settings"),icon:"SettingOutlined",aclSnippet:"pm.".concat(t.C,".settings"),componentLoader:function(){return Promise.all([d.e("346"),d.e("268")]).then(d.bind(d,887))}}),[2]})},function(){var t=this,r=arguments;return new Promise(function(o,i){var c=e.apply(t,r);function a(e){n(c,o,i,a,u,"next",e)}function u(e){n(c,o,i,a,u,"throw",e)}a(void 0)})}).call(this)}},{key:"createBackupRestoreRuntime",value:function(){var e=this.app;return{showCheckBackupMessage:function(){"function"==typeof e.setMaintaining?e.setMaintaining(!0):e.maintaining=!0,e.error={command:{name:"APP Restoring"},message:"checking backup...",code:"APP_COMMANDING"}},hideCheckBackupMessage:function(){"function"==typeof e.setMaintaining?e.setMaintaining(!1):e.maintaining=!1}}}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(c.prototype,r),c}(c(e.Plugin))}(),m}()});
10
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("ahooks"),require("@emotion/css"),require("@nocobase/client-v2"),require("dayjs"),require("react"),require("antd"),require("@ant-design/icons"),require("@nocobase/flow-engine")):"function"==typeof define&&define.amd?define("@nocobase/plugin-backups/client-v2",["ahooks","@emotion/css","@nocobase/client-v2","dayjs","react","antd","@ant-design/icons","@nocobase/flow-engine"],t):"object"==typeof exports?exports["@nocobase/plugin-backups/client-v2"]=t(require("ahooks"),require("@emotion/css"),require("@nocobase/client-v2"),require("dayjs"),require("react"),require("antd"),require("@ant-design/icons"),require("@nocobase/flow-engine")):e["@nocobase/plugin-backups/client-v2"]=t(e.ahooks,e["@emotion/css"],e["@nocobase/client-v2"],e.dayjs,e.react,e.antd,e["@ant-design/icons"],e["@nocobase/flow-engine"])}(self,function(e,t,n,r,o,i,a,u){return function(){"use strict";var c,l,s,f={194:function(e,t,n){n.d(t,{w:function(){return p},_:function(){return b}});var r=n(59),o=n(155),i=n.n(o),a=n(694),u=n(401);function c(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){n(e);return}u.done?t(c):Promise.resolve(c).then(r,o)}var l=n(488);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var f=i().createContext(null),p=function(e){var t,n,p,b,d=e.children,v=(0,l.k)(),h=function(e){if(Array.isArray(e))return e}(t=i().useState(!1))||function(e){var t,n,r=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var o=[],i=!0,a=!1;try{for(r=r.call(e);!(i=(t=r.next()).done)&&(o.push(t.value),2!==o.length);i=!0);}catch(e){a=!0,n=e}finally{try{i||null==r.return||r.return()}finally{if(a)throw n}}return o}}(t)||function(e){if(e){if("string"==typeof e)return s(e,2);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return s(e,2)}}(t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),y=h[0],g=h[1],m=(n=(0,a.useFlowContext)(),p=i().useRef(null),b=r.App.useApp().notification,(0,o.useEffect)(function(){var e=!1,t=!1,r=setInterval(function(){var r;return(r=function(){var r,o,i,a,c;return function(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(a,"next",{value:c(0)}),u(a,"throw",{value:c(1)}),u(a,"return",{value:c(2)}),"function"==typeof Symbol&&u(a,Symbol.iterator,{value:function(){return this}}),a;function c(u){return function(c){var l=[u,c];if(n)throw TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,r=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}(this,function(l){switch(l.label){case 0:if(!(r=p.current)||e)return[2];e=!0,l.label=1;case 1:return l.trys.push([1,3,4,5]),[4,n.api.request({url:"".concat(u.C,":restoreStatus"),method:"get",params:{task:r}})];case 2:if(i=l.sent(),t||p.current!==r||!(a=null==(o=i.data)?void 0:o.data))return[2];return a.inProgress||(p.current=null),a.message&&b.error({message:a.message,role:"alert"}),[3,5];case 3:return c=l.sent(),t||console.error(c),[3,5];case 4:return e=!1,[7];case 5:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(n,o){var i=r.apply(e,t);function a(e){c(i,n,o,a,u,"next",e)}function u(e){c(i,n,o,a,u,"throw",e)}a(void 0)})})()},3e3);return function(){t=!0,clearInterval(r)}},[n.api,b]),p),w=i().useCallback(function(e){m.current=e,g(!0)},[m]),k=i().useMemo(function(){return{restoring:y,startRestoring:w}},[y,w]);return i().createElement(f.Provider,{value:k},d,y&&i().createElement(r.Spin,{fullscreen:!0,tip:v("Restoring backup")}))};function b(){var e=i().useContext(f);if(!e)throw Error("RestoreLoadingProvider is missing");return e}},401:function(e,t,n){n.d(t,{C:function(){return r},l:function(){return o}});var r="backups",o="backupRestoreRuntime"},488:function(e,t,n){n.d(t,{k:function(){return i}});var r=n(694),o=n(401);function i(){var e=(0,r.useFlowEngine)();return function(t,n){return e.context.t(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({ns:[o.C,"client"]},n))}}},375:function(e){e.exports=a},477:function(e){e.exports=t},485:function(e){e.exports=n},694:function(e){e.exports=u},625:function(t){t.exports=e},59:function(e){e.exports=i},185:function(e){e.exports=r},155:function(e){e.exports=o}},p={};function b(e){var t=p[e];if(void 0!==t)return t.exports;var n=p[e]={id:e,exports:{}};return f[e].call(n.exports,n,n.exports,b),n.exports}b.m=f,b.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return b.d(t,{a:t}),t},b.d=function(e,t){for(var n in t)b.o(t,n)&&!b.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},b.f={},b.e=function(e){return Promise.all(Object.keys(b.f).reduce(function(t,n){return b.f[n](e,t),t},[]))},b.u=function(e){return""+e+"."+({268:"6a7586f5496a2385",346:"45d02ff0f75c76e4",962:"e592f96c2bf0a543"})[e]+".js"},b.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),b.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},d={},b.l=function(e,t,n,r){if(d[e])return void d[e].push(t);if(void 0!==n)for(var o,i,a=document.getElementsByTagName("script"),u=0;u<a.length;u++){var c=a[u];if(c.getAttribute("src")==e||c.getAttribute("data-rspack")=="@nocobase/plugin-backups/client-v2:"+n){o=c;break}}o||(i=!0,(o=document.createElement("script")).timeout=120,b.nc&&o.setAttribute("nonce",b.nc),o.setAttribute("data-rspack","@nocobase/plugin-backups/client-v2:"+n),o.src=e),d[e]=[t];var l=function(t,n){o.onerror=o.onload=null,clearTimeout(s);var r=d[e];if(delete d[e],o.parentNode&&o.parentNode.removeChild(o),r&&r.forEach(function(e){return e(n)}),t)return t(n)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=l.bind(null,o.onerror),o.onload=l.bind(null,o.onload),i&&document.head.appendChild(o)},b.r=function(e){"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},b.nc=void 0,b.g.importScripts&&(v=b.g.location+"");var d,v,h=b.g.document;if(!v&&h&&(h.currentScript&&"SCRIPT"===h.currentScript.tagName.toUpperCase()&&(v=h.currentScript.src),!v)){var y=h.getElementsByTagName("script");if(y.length)for(var g=y.length-1;g>-1&&(!v||!/^http(s?):/.test(v));)v=y[g--].src}if(!v)throw Error("Automatic publicPath is not supported in this browser");b.p=v.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),c={889:0},b.f.j=function(e,t){var n=b.o(c,e)?c[e]:void 0;if(0!==n)if(n)t.push(n[2]);else{var r=new Promise(function(t,r){n=c[e]=[t,r]});t.push(n[2]=r);var o=b.p+b.u(e),i=Error();b.l(o,function(t){if(b.o(c,e)&&(0!==(n=c[e])&&(c[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;i.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",i.name="ChunkLoadError",i.type=r,i.request=o,n[1](i)}},"chunk-"+e,e)}},l=function(e,t){var n,r,o=t[0],i=t[1],a=t[2],u=0;if(o.some(function(e){return 0!==c[e]})){for(n in i)b.o(i,n)&&(b.m[n]=i[n]);a&&a(b)}for(e&&e(t);u<o.length;u++)r=o[u],b.o(c,r)&&c[r]&&c[r][0](),c[r]=0},(s=self.webpackChunk_nocobase_plugin_backups_client_v2=self.webpackChunk_nocobase_plugin_backups_client_v2||[]).forEach(l.bind(null,0)),s.push=l.bind(null,s.push.bind(s));var m={};return!function(){var e="",t="u">typeof document?document.currentScript:null;if(t&&t.src){var n=t.src.replace(/^blob:/,"").replace(/#.*$/,"").replace(/\?.*$/,"");n.indexOf("/static/plugins/@nocobase/plugin-backups/dist/client-v2/")>=0&&(e=n.replace(/\/[^\/]+$/,"/"))}if(!e){var r=window.__webpack_public_path__||"";r&&("/"!==r.charAt(r.length-1)&&(r+="/"),e=r+"static/plugins/@nocobase/plugin-backups/dist/client-v2/")}if(!e){var o=window.__nocobase_modern_client_prefix__||"v",i="/"+(o=String(o).replace(/^\/+|\/+$/g,"")||"v")+"/";if(!(e=window.__nocobase_public_path__||"")&&window.location&&window.location.pathname){var a=window.location.pathname||"/",u=a.indexOf(i);e=u>=0?a.slice(0,u+1):"/"}e&&(e=e.replace(RegExp("/"+o+"/?$"),"/")),e||(e="/"),"/"!==e.charAt(e.length-1)&&(e+="/"),e+="static/plugins/@nocobase/plugin-backups/dist/client-v2/"}b.p=e}(),!function(){b.r(m),b.d(m,{default:function(){return l}});var e=b(485),t=b(194),n=b(401);function r(e,t,n,r,o,i,a){try{var u=e[i](a),c=u.value}catch(e){n(e);return}u.done?t(c):Promise.resolve(c).then(r,o)}function o(e,t,n){return(o=c()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&a(o,n.prototype),o}).apply(null,arguments)}function i(e){return(i=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function a(e,t){return(a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function u(e){var t="function"==typeof Map?new Map:void 0;return(u=function(e){if(null===e||-1===Function.toString.call(e).indexOf("[native code]"))return e;if("function"!=typeof e)throw TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return o(e,arguments,i(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),a(n,e)})(e)}function c(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(c=function(){return!!e})()}var l=function(e){var o;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function u(){var e,t;if(!(this instanceof u))throw TypeError("Cannot call a class as a function");return e=u,t=arguments,e=i(e),function(e,t){var n;if(t&&("object"==((n=t)&&"u">typeof Symbol&&n.constructor===Symbol?"symbol":typeof n)||"function"==typeof t))return t;if(void 0===e)throw ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(this,c()?Reflect.construct(e,t||[],i(this).constructor):e.apply(this,t))}return u.prototype=Object.create(e&&e.prototype,{constructor:{value:u,writable:!0,configurable:!0}}),e&&a(u,e),o=[{key:"load",value:function(){var e;return(e=function(){var e;return function(e,t){var n,r,o,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},a=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),u=Object.defineProperty;return u(a,"next",{value:c(0)}),u(a,"throw",{value:c(1)}),u(a,"return",{value:c(2)}),"function"==typeof Symbol&&u(a,Symbol.iterator,{value:function(){return this}}),a;function c(u){return function(c){var l=[u,c];if(n)throw TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,r=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!(o=(o=i.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}}}(this,function(r){return e=this.t("Backup manager"),this.app.use(t.w),this.flowEngine.context.defineProperty(n.l,{value:this.createBackupRestoreRuntime()}),this.pluginSettingsManager.addMenuItem({key:n.C,title:e,icon:"CloudServerOutlined",showTabs:!0}),this.pluginSettingsManager.addPageTabItem({menuKey:n.C,key:"list",title:this.t("Backup list"),icon:"CloudServerOutlined",aclSnippet:"pm.".concat(n.C),componentLoader:function(){return b.e("962").then(b.bind(b,225))}}),this.pluginSettingsManager.addPageTabItem({menuKey:n.C,key:"settings",title:this.t("Settings"),icon:"SettingOutlined",aclSnippet:"pm.".concat(n.C,".settings"),componentLoader:function(){return Promise.all([b.e("346"),b.e("268")]).then(b.bind(b,887))}}),[2]})},function(){var t=this,n=arguments;return new Promise(function(o,i){var a=e.apply(t,n);function u(e){r(a,o,i,u,c,"next",e)}function c(e){r(a,o,i,u,c,"throw",e)}u(void 0)})}).call(this)}},{key:"createBackupRestoreRuntime",value:function(){var e=this.app;return{showCheckBackupMessage:function(){"function"==typeof e.setMaintaining?e.setMaintaining(!0):e.maintaining=!0,e.error={command:{name:"APP Restoring"},message:"checking backup...",code:"APP_COMMANDING"}},hideCheckBackupMessage:function(){"function"==typeof e.setMaintaining?e.setMaintaining(!1):e.maintaining=!1}}}}],function(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}(u.prototype,o),u}(u(e.Plugin))}(),m}()});
@@ -8,17 +8,17 @@
8
8
  */
9
9
 
10
10
  module.exports = {
11
- "@nocobase/client": "2.3.0-beta.6",
11
+ "@nocobase/client": "2.4.0-alpha.2",
12
12
  "react": "18.2.0",
13
- "@nocobase/flow-engine": "2.3.0-beta.6",
14
- "@nocobase/client-v2": "2.3.0-beta.6",
15
- "@nocobase/cache": "2.3.0-beta.6",
16
- "@nocobase/lock-manager": "2.3.0-beta.6",
17
- "@nocobase/server": "2.3.0-beta.6",
13
+ "@nocobase/flow-engine": "2.4.0-alpha.2",
14
+ "@nocobase/client-v2": "2.4.0-alpha.2",
15
+ "@nocobase/cache": "2.4.0-alpha.2",
16
+ "@nocobase/lock-manager": "2.4.0-alpha.2",
17
+ "@nocobase/server": "2.4.0-alpha.2",
18
18
  "lodash": "4.18.1",
19
- "@nocobase/database": "2.3.0-beta.6",
19
+ "@nocobase/database": "2.4.0-alpha.2",
20
20
  "sequelize": "6.35.2",
21
- "@nocobase/test": "2.3.0-beta.6",
21
+ "@nocobase/test": "2.4.0-alpha.2",
22
22
  "@formily/antd-v5": "1.2.3",
23
23
  "@formily/react": "2.3.7",
24
24
  "@formily/reactive": "2.3.7",
@@ -28,7 +28,7 @@ module.exports = {
28
28
  "ahooks": "3.7.8",
29
29
  "@emotion/css": "11.13.0",
30
30
  "dayjs": "1.11.13",
31
- "@nocobase/plugin-file-manager": "2.3.0-beta.6",
32
- "@nocobase/resourcer": "2.3.0-beta.6",
33
- "@nocobase/utils": "2.3.0-beta.6"
31
+ "@nocobase/plugin-file-manager": "2.4.0-alpha.2",
32
+ "@nocobase/resourcer": "2.4.0-alpha.2",
33
+ "@nocobase/utils": "2.4.0-alpha.2"
34
34
  };
@@ -6,6 +6,7 @@
6
6
  "Backing up": "Backing up",
7
7
  "Backup list": "Backup list",
8
8
  "Backup local storage files": "Backup local storage files",
9
+ "Backup AI mode portals": "Backup AI mode portals",
9
10
  "Backup manager": "Backup manager",
10
11
  "Click or drag file to this area to upload": "Click or drag file to this area to upload",
11
12
  "Confirm the application database schema": "Confirm the application database schema",
@@ -43,6 +44,7 @@
43
44
  "Restore": "Restore",
44
45
  "Restore backup from local": "Restore from local backup file",
45
46
  "Restore failed": "Restore failed",
47
+ "Restoring backup": "Restoring backup",
46
48
  "Restore password": "Restore password",
47
49
  "Run automatic backup on the cron schedule": "Run automatic backup on the cron schedule",
48
50
  "Settings": "Settings",
@@ -6,6 +6,7 @@
6
6
  "Backing up": "备份中",
7
7
  "Backup list": "备份列表",
8
8
  "Backup local storage files": "备份本地存储文件",
9
+ "Backup AI mode portals": "备份 AI 模式门户",
9
10
  "Backup manager": "备份管理器",
10
11
  "Click or drag file to this area to upload": "点击或拖拽文件到此区域上传",
11
12
  "Confirm the application database schema": "确认应用数据库 Schema",
@@ -43,6 +44,7 @@
43
44
  "Restore": "还原",
44
45
  "Restore backup from local": "从本地备份还原",
45
46
  "Restore failed": "还原失败",
47
+ "Restoring backup": "正在还原备份",
46
48
  "Restore password": "还原密码",
47
49
  "Run automatic backup on the cron schedule": "根据 Cron 运行自动备份",
48
50
  "Settings": "设置",
@@ -1 +1 @@
1
- {"name":"archiver","version":"5.3.2","description":"a streaming interface for archive generation","homepage":"https://github.com/archiverjs/node-archiver","author":{"name":"Chris Talkington","url":"http://christalkington.com/"},"repository":{"type":"git","url":"https://github.com/archiverjs/node-archiver.git"},"bugs":{"url":"https://github.com/archiverjs/node-archiver/issues"},"license":"MIT","main":"index.js","files":["index.js","lib"],"engines":{"node":">= 10"},"scripts":{"test":"mocha --reporter dot","bench":"node benchmark/simple/pack-zip.js"},"dependencies":{"archiver-utils":"^2.1.0","async":"^3.2.4","buffer-crc32":"^0.2.1","readable-stream":"^3.6.0","readdir-glob":"^1.1.2","tar-stream":"^2.2.0","zip-stream":"^4.1.0"},"devDependencies":{"archiver-jsdoc-theme":"^1.1.3","chai":"^4.3.7","jsdoc":"^3.6.4","mkdirp":"^2.1.5","mocha":"^9.0.2","rimraf":"^4.3.1","stream-bench":"^0.1.2","tar":"^6.1.13","yauzl":"^2.9.0"},"keywords":["archive","archiver","stream","zip","tar"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"_lastModified":"2026-08-31T04:05:47.384Z"}
1
+ {"name":"archiver","version":"5.3.2","description":"a streaming interface for archive generation","homepage":"https://github.com/archiverjs/node-archiver","author":{"name":"Chris Talkington","url":"http://christalkington.com/"},"repository":{"type":"git","url":"https://github.com/archiverjs/node-archiver.git"},"bugs":{"url":"https://github.com/archiverjs/node-archiver/issues"},"license":"MIT","main":"index.js","files":["index.js","lib"],"engines":{"node":">= 10"},"scripts":{"test":"mocha --reporter dot","bench":"node benchmark/simple/pack-zip.js"},"dependencies":{"archiver-utils":"^2.1.0","async":"^3.2.4","buffer-crc32":"^0.2.1","readable-stream":"^3.6.0","readdir-glob":"^1.1.2","tar-stream":"^2.2.0","zip-stream":"^4.1.0"},"devDependencies":{"archiver-jsdoc-theme":"^1.1.3","chai":"^4.3.7","jsdoc":"^3.6.4","mkdirp":"^2.1.5","mocha":"^9.0.2","rimraf":"^4.3.1","stream-bench":"^0.1.2","tar":"^6.1.13","yauzl":"^2.9.0"},"keywords":["archive","archiver","stream","zip","tar"],"publishConfig":{"registry":"https://registry.npmjs.org/"},"_lastModified":"2026-09-02T08:46:57.929Z"}
@@ -1 +1 @@
1
- {"name":"cron-parser","version":"4.4.0","description":"Node.js library for parsing crontab instructions","main":"lib/parser.js","types":"index.d.ts","typesVersions":{"<4.1":{"*":["types/ts3/*"]}},"directories":{"test":"test"},"scripts":{"test:tsd":"tsd","test:unit":"TZ=UTC tap ./test/*.js","test:cover":"TZ=UTC tap --coverage-report=html ./test/*.js","lint":"eslint .","lint:fix":"eslint --fix .","test":"npm run lint && npm run test:unit && npm run test:tsd"},"repository":{"type":"git","url":"https://github.com/harrisiirak/cron-parser.git"},"keywords":["cron","crontab","parser"],"author":"Harri Siirak","contributors":["Nicholas Clawson","Daniel Prentis <daniel@salsitasoft.com>","Renault John Lecoultre","Richard Astbury <richard.astbury@gmail.com>","Meaglin Wasabi <Meaglin.wasabi@gmail.com>","Mike Kusold <hello@mikekusold.com>","Alex Kit <alex.kit@atmajs.com>","Santiago Gimeno <santiago.gimeno@gmail.com>","Daniel <darc.tec@gmail.com>","Christian Steininger <christian.steininger.cs@gmail.com>","Mykola Piskovyi <m.piskovyi@gmail.com>","Brian Vaughn <brian.david.vaughn@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Yasuhiroki <yasuhiroki.duck@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Brendan Warkentin <faazshift@gmail.com>","Charlie Fish <fishcharlie.code@gmail.com>","Ian Graves <ian+diskimage@iangrav.es>","Andy Thompson <me@andytson.com>","Regev Brody <regevbr@gmail.com>"],"license":"MIT","dependencies":{"luxon":"^1.28.0"},"devDependencies":{"eslint":"^8.2.0","sinon":"^10.0.0","tap":"^16.0.1","tsd":"^0.19.0"},"engines":{"node":">=0.8"},"browser":{"fs":false},"tap":{"check-coverage":false},"tsd":{"directory":"test","compilerOptions":{"lib":["es2017","dom"]}},"_lastModified":"2026-08-31T04:05:46.515Z"}
1
+ {"name":"cron-parser","version":"4.4.0","description":"Node.js library for parsing crontab instructions","main":"lib/parser.js","types":"index.d.ts","typesVersions":{"<4.1":{"*":["types/ts3/*"]}},"directories":{"test":"test"},"scripts":{"test:tsd":"tsd","test:unit":"TZ=UTC tap ./test/*.js","test:cover":"TZ=UTC tap --coverage-report=html ./test/*.js","lint":"eslint .","lint:fix":"eslint --fix .","test":"npm run lint && npm run test:unit && npm run test:tsd"},"repository":{"type":"git","url":"https://github.com/harrisiirak/cron-parser.git"},"keywords":["cron","crontab","parser"],"author":"Harri Siirak","contributors":["Nicholas Clawson","Daniel Prentis <daniel@salsitasoft.com>","Renault John Lecoultre","Richard Astbury <richard.astbury@gmail.com>","Meaglin Wasabi <Meaglin.wasabi@gmail.com>","Mike Kusold <hello@mikekusold.com>","Alex Kit <alex.kit@atmajs.com>","Santiago Gimeno <santiago.gimeno@gmail.com>","Daniel <darc.tec@gmail.com>","Christian Steininger <christian.steininger.cs@gmail.com>","Mykola Piskovyi <m.piskovyi@gmail.com>","Brian Vaughn <brian.david.vaughn@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Yasuhiroki <yasuhiroki.duck@gmail.com>","Nicholas Clawson <nickclaw@gmail.com>","Brendan Warkentin <faazshift@gmail.com>","Charlie Fish <fishcharlie.code@gmail.com>","Ian Graves <ian+diskimage@iangrav.es>","Andy Thompson <me@andytson.com>","Regev Brody <regevbr@gmail.com>"],"license":"MIT","dependencies":{"luxon":"^1.28.0"},"devDependencies":{"eslint":"^8.2.0","sinon":"^10.0.0","tap":"^16.0.1","tsd":"^0.19.0"},"engines":{"node":">=0.8"},"browser":{"fs":false},"tap":{"check-coverage":false},"tsd":{"directory":"test","compilerOptions":{"lib":["es2017","dom"]}},"_lastModified":"2026-09-02T08:46:56.807Z"}
@@ -1 +1 @@
1
- {"name":"fs-extra","version":"9.1.0","description":"fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as recursive mkdir, copy, and remove.","engines":{"node":">=10"},"homepage":"https://github.com/jprichardson/node-fs-extra","repository":{"type":"git","url":"https://github.com/jprichardson/node-fs-extra"},"keywords":["fs","file","file system","copy","directory","extra","mkdirp","mkdir","mkdirs","recursive","json","read","write","extra","delete","remove","touch","create","text","output","move","promise"],"author":"JP Richardson <jprichardson@gmail.com>","license":"MIT","dependencies":{"at-least-node":"^1.0.0","graceful-fs":"^4.2.0","jsonfile":"^6.0.1","universalify":"^2.0.0"},"devDependencies":{"coveralls":"^3.0.0","klaw":"^2.1.1","klaw-sync":"^3.0.2","minimist":"^1.1.1","mocha":"^5.0.5","nyc":"^15.0.0","proxyquire":"^2.0.1","read-dir-files":"^0.1.1","standard":"^14.1.0"},"main":"./lib/index.js","files":["lib/","!lib/**/__tests__/"],"scripts":{"full-ci":"npm run lint && npm run coverage","coverage":"nyc -r lcovonly npm run unit","coveralls":"coveralls < coverage/lcov.info","lint":"standard","test-find":"find ./lib/**/__tests__ -name *.test.js | xargs mocha","test":"npm run lint && npm run unit","unit":"node test.js"},"_lastModified":"2026-08-31T04:05:47.658Z"}
1
+ {"name":"fs-extra","version":"9.1.0","description":"fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as recursive mkdir, copy, and remove.","engines":{"node":">=10"},"homepage":"https://github.com/jprichardson/node-fs-extra","repository":{"type":"git","url":"https://github.com/jprichardson/node-fs-extra"},"keywords":["fs","file","file system","copy","directory","extra","mkdirp","mkdir","mkdirs","recursive","json","read","write","extra","delete","remove","touch","create","text","output","move","promise"],"author":"JP Richardson <jprichardson@gmail.com>","license":"MIT","dependencies":{"at-least-node":"^1.0.0","graceful-fs":"^4.2.0","jsonfile":"^6.0.1","universalify":"^2.0.0"},"devDependencies":{"coveralls":"^3.0.0","klaw":"^2.1.1","klaw-sync":"^3.0.2","minimist":"^1.1.1","mocha":"^5.0.5","nyc":"^15.0.0","proxyquire":"^2.0.1","read-dir-files":"^0.1.1","standard":"^14.1.0"},"main":"./lib/index.js","files":["lib/","!lib/**/__tests__/"],"scripts":{"full-ci":"npm run lint && npm run coverage","coverage":"nyc -r lcovonly npm run unit","coveralls":"coveralls < coverage/lcov.info","lint":"standard","test-find":"find ./lib/**/__tests__ -name *.test.js | xargs mocha","test":"npm run lint && npm run unit","unit":"node test.js"},"_lastModified":"2026-09-02T08:46:58.544Z"}
@@ -1 +1 @@
1
- {"name":"semver","version":"7.6.0","description":"The semantic version parser used by npm.","main":"index.js","scripts":{"test":"tap","snap":"tap","lint":"eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"","postlint":"template-oss-check","lintfix":"npm run lint -- --fix","posttest":"npm run lint","template-oss-apply":"template-oss-apply --force"},"devDependencies":{"@npmcli/eslint-config":"^4.0.0","@npmcli/template-oss":"4.21.3","tap":"^16.0.0"},"license":"ISC","repository":{"type":"git","url":"https://github.com/npm/node-semver.git"},"bin":{"semver":"bin/semver.js"},"files":["bin/","lib/","classes/","functions/","internal/","ranges/","index.js","preload.js","range.bnf"],"tap":{"timeout":30,"coverage-map":"map.js","nyc-arg":["--exclude","tap-snapshots/**"]},"engines":{"node":">=10"},"dependencies":{"lru-cache":"^6.0.0"},"author":"GitHub Inc.","templateOSS":{"//@npmcli/template-oss":"This file is partially managed by @npmcli/template-oss. Edits may be overwritten.","version":"4.21.3","engines":">=10","distPaths":["classes/","functions/","internal/","ranges/","index.js","preload.js","range.bnf"],"allowPaths":["/classes/","/functions/","/internal/","/ranges/","/index.js","/preload.js","/range.bnf"],"publish":"true"},"_lastModified":"2026-08-31T04:05:47.892Z"}
1
+ {"name":"semver","version":"7.6.0","description":"The semantic version parser used by npm.","main":"index.js","scripts":{"test":"tap","snap":"tap","lint":"eslint \"**/*.{js,cjs,ts,mjs,jsx,tsx}\"","postlint":"template-oss-check","lintfix":"npm run lint -- --fix","posttest":"npm run lint","template-oss-apply":"template-oss-apply --force"},"devDependencies":{"@npmcli/eslint-config":"^4.0.0","@npmcli/template-oss":"4.21.3","tap":"^16.0.0"},"license":"ISC","repository":{"type":"git","url":"https://github.com/npm/node-semver.git"},"bin":{"semver":"bin/semver.js"},"files":["bin/","lib/","classes/","functions/","internal/","ranges/","index.js","preload.js","range.bnf"],"tap":{"timeout":30,"coverage-map":"map.js","nyc-arg":["--exclude","tap-snapshots/**"]},"engines":{"node":">=10"},"dependencies":{"lru-cache":"^6.0.0"},"author":"GitHub Inc.","templateOSS":{"//@npmcli/template-oss":"This file is partially managed by @npmcli/template-oss. Edits may be overwritten.","version":"4.21.3","engines":">=10","distPaths":["classes/","functions/","internal/","ranges/","index.js","preload.js","range.bnf"],"allowPaths":["/classes/","/functions/","/internal/","/ranges/","/index.js","/preload.js","/range.bnf"],"publish":"true"},"_lastModified":"2026-09-02T08:46:58.859Z"}
@@ -1 +1 @@
1
- {"name":"yauzl","version":"3.3.0","description":"yet another unzip library for node","engines":{"node":">=12"},"main":"index.js","scripts":{"test":"node test/test.js"},"repository":{"type":"git","url":"git+https://github.com/thejoshwolfe/yauzl.git"},"keywords":["unzip","zip","stream","archive","file"],"author":"Josh Wolfe <thejoshwolfe@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/thejoshwolfe/yauzl/issues"},"homepage":"https://github.com/thejoshwolfe/yauzl","dependencies":{"buffer-crc32":"~0.2.3","pend":"~1.2.0"},"devDependencies":{"bl":"^6.0.11"},"files":["fd-slicer.js","index.js"],"_lastModified":"2026-08-31T04:05:47.518Z"}
1
+ {"name":"yauzl","version":"3.3.0","description":"yet another unzip library for node","engines":{"node":">=12"},"main":"index.js","scripts":{"test":"node test/test.js"},"repository":{"type":"git","url":"git+https://github.com/thejoshwolfe/yauzl.git"},"keywords":["unzip","zip","stream","archive","file"],"author":"Josh Wolfe <thejoshwolfe@gmail.com>","license":"MIT","bugs":{"url":"https://github.com/thejoshwolfe/yauzl/issues"},"homepage":"https://github.com/thejoshwolfe/yauzl","dependencies":{"buffer-crc32":"~0.2.3","pend":"~1.2.0"},"devDependencies":{"bl":"^6.0.11"},"files":["fd-slicer.js","index.js"],"_lastModified":"2026-09-02T08:46:58.353Z"}
@@ -63,6 +63,11 @@ var backup_settings_default = (0, import_database.defineCollection)({
63
63
  type: "boolean",
64
64
  name: "enableFilesBackup"
65
65
  },
66
+ {
67
+ type: "boolean",
68
+ name: "enablePortalsBackup",
69
+ defaultValue: true
70
+ },
66
71
  {
67
72
  type: "belongsTo",
68
73
  name: "storage",
@@ -14,6 +14,7 @@ export interface BackupSettings {
14
14
  storageId?: string | number | null;
15
15
  encryptionPassword: string;
16
16
  enableFilesBackup: boolean;
17
+ enablePortalsBackup?: boolean;
17
18
  keep?: number;
18
19
  scheduled: boolean;
19
20
  cron: string;
@@ -54,6 +55,7 @@ export declare class BackupManager {
54
55
  protected set backupDir(backupDir: string);
55
56
  protected set tempDir(tempDir: string);
56
57
  protected set uploadDir(uploadDir: string);
58
+ protected set portalDir(portalDir: string);
57
59
  protected set backupTasksCacheName(backupTasksCacheName: string);
58
60
  createBackupName(): Promise<string>;
59
61
  backup(fileBaseName: string, opts?: Partial<BackupSettings>): Promise<string>;
@@ -50,7 +50,7 @@ var import_utils = require("@nocobase/utils");
50
50
  var import_util = require("util");
51
51
  var import_database = require("../adapters/database");
52
52
  var import_utils2 = require("../utils");
53
- const BACKUP_METADATA_VERSION = 2;
53
+ const BACKUP_METADATA_VERSION = 3;
54
54
  class BackupManager {
55
55
  app;
56
56
  ctx;
@@ -62,6 +62,7 @@ class BackupManager {
62
62
  #backupDir;
63
63
  #tempDir;
64
64
  #uploadDir;
65
+ #portalDir;
65
66
  #aesKeyPath;
66
67
  constructor(app, ctx, settings) {
67
68
  this.app = app;
@@ -73,6 +74,7 @@ class BackupManager {
73
74
  this.#backupDir = (0, import_utils.storagePathJoin)("backups", app.name);
74
75
  this.#tempDir = (0, import_utils.storagePathJoin)("tmp", "backups", app.name);
75
76
  this.#uploadDir = (0, import_utils.storagePathJoin)("uploads");
77
+ this.#portalDir = (0, import_utils.storagePathJoin)("portals", app.name);
76
78
  this.#aesKeyPath = (0, import_utils.storagePathJoin)("apps", app.name, "aes_key.dat");
77
79
  }
78
80
  set backupPrefix(backupPrefix) {
@@ -87,14 +89,24 @@ class BackupManager {
87
89
  set uploadDir(uploadDir) {
88
90
  this.#uploadDir = uploadDir;
89
91
  }
92
+ set portalDir(portalDir) {
93
+ this.#portalDir = portalDir;
94
+ }
90
95
  set backupTasksCacheName(backupTasksCacheName) {
91
96
  this.#backupTasksCacheName = backupTasksCacheName;
92
97
  }
93
98
  #normalizeBackupSettings(settings) {
94
99
  if (typeof settings.toJSON === "function") {
95
- return settings.toJSON();
100
+ const values = settings.toJSON();
101
+ return {
102
+ ...values,
103
+ enablePortalsBackup: values.enablePortalsBackup ?? true
104
+ };
96
105
  }
97
- return { ...settings };
106
+ return {
107
+ ...settings,
108
+ enablePortalsBackup: settings.enablePortalsBackup ?? true
109
+ };
98
110
  }
99
111
  async createBackupName() {
100
112
  await this.#dbAdapter.check("backup");
@@ -199,6 +211,7 @@ class BackupManager {
199
211
  ...opts.metadata ?? {},
200
212
  metadataVersion: BACKUP_METADATA_VERSION,
201
213
  enableFilesBackup: opts.enableFilesBackup,
214
+ enablePortalsBackup: opts.enablePortalsBackup,
202
215
  version: await this.app.version.get(),
203
216
  description: opts.description,
204
217
  createdBy: opts.createdBy,
@@ -292,6 +305,9 @@ class BackupManager {
292
305
  }
293
306
  }
294
307
  }
308
+ if (opts.enablePortalsBackup && fs.existsSync(this.#portalDir)) {
309
+ archive.directory(this.#portalDir, "portals");
310
+ }
295
311
  if (fs.existsSync(this.#aesKeyPath)) {
296
312
  archive.file(this.#aesKeyPath, { name: "aes_key.dat" });
297
313
  }
@@ -20,6 +20,7 @@ export declare class RestoreManager {
20
20
  protected set backupDir(backupDir: string);
21
21
  protected set tempDir(tempDir: string);
22
22
  protected set uploadDir(uploadDir: string);
23
+ protected set portalDir(portalDir: string);
23
24
  protected set restoreTasksCacheName(restoreTasksCacheName: string);
24
25
  restoreFromBackup(backupFileName: string, taskId: string, password?: string, tolerentMode?: boolean, options?: RestoreOptions): Promise<void>;
25
26
  restoreFromUpload(backupFile: Express.Multer.File, taskId: string, password?: string, tolerentMode?: boolean, options?: RestoreOptions): Promise<void>;
@@ -61,6 +61,7 @@ class RestoreManager {
61
61
  #backupDir;
62
62
  #tempDir;
63
63
  #uploadDir;
64
+ #portalDir;
64
65
  #aesKeyPath;
65
66
  constructor(ctx, dbOptions) {
66
67
  this.ctx = ctx;
@@ -69,6 +70,7 @@ class RestoreManager {
69
70
  this.#backupDir = (0, import_utils.storagePathJoin)("backups", ctx.app.name);
70
71
  this.#tempDir = (0, import_utils.storagePathJoin)("tmp", "backups", ctx.app.name);
71
72
  this.#uploadDir = (0, import_utils.storagePathJoin)("uploads");
73
+ this.#portalDir = (0, import_utils.storagePathJoin)("portals", ctx.app.name);
72
74
  this.#aesKeyPath = (0, import_utils.storagePathJoin)("apps", ctx.app.name, "aes_key.dat");
73
75
  }
74
76
  set backupDir(backupDir) {
@@ -80,6 +82,9 @@ class RestoreManager {
80
82
  set uploadDir(uploadDir) {
81
83
  this.#uploadDir = uploadDir;
82
84
  }
85
+ set portalDir(portalDir) {
86
+ this.#portalDir = portalDir;
87
+ }
83
88
  set restoreTasksCacheName(restoreTasksCacheName) {
84
89
  this.#restoreTasksCacheName = restoreTasksCacheName;
85
90
  }
@@ -119,6 +124,7 @@ class RestoreManager {
119
124
  this.ctx.logger.warn("Tolerent mode enabled, ignoring the error and continue the upgrade.", {
120
125
  module: import_utils2.BACKUPS
121
126
  });
127
+ await this.#restorePortals(metadata.enablePortalsBackup === true, extractedDir);
122
128
  await this.#restoreFilesAndCleanup(uploadsExist, extractedDir);
123
129
  await this.ctx.app.upgrade();
124
130
  } else if (!skipRevertOnError) {
@@ -147,6 +153,7 @@ class RestoreManager {
147
153
  toolchain: this.#resolveRestoreToolchain(metadata)
148
154
  });
149
155
  this.ctx.logger.info("Database restored successfully", { module: import_utils2.BACKUPS });
156
+ await this.#restorePortals(metadata.enablePortalsBackup === true, extractedDir);
150
157
  await this.#restoreFilesAndCleanup(restoreUploads, extractedDir);
151
158
  } catch (error) {
152
159
  this.ctx.logger.error(`Error restoring backup: ${error.message}. Trying to revert the backup process`, {
@@ -194,6 +201,7 @@ class RestoreManager {
194
201
  this.ctx.logger.warn("Tolerent mode enabled, ignoring the error and continue the upgrade.", {
195
202
  module: import_utils2.BACKUPS
196
203
  });
204
+ await this.#restorePortals(metadata.enablePortalsBackup === true, extractedDir);
197
205
  await this.#restoreFilesAndCleanup(uploadsExist, extractedDir);
198
206
  await this.ctx.app.runCommand("upgrade");
199
207
  } else {
@@ -401,6 +409,7 @@ class RestoreManager {
401
409
  if (restoreUploads) {
402
410
  this.#notify(RESTORE_STEPS.UPLOADS);
403
411
  }
412
+ await this.#restorePortals(metadata.enablePortalsBackup === true, extractedDir);
404
413
  await this.#restoreFilesAndCleanup(restoreUploads, extractedDir);
405
414
  } catch (error) {
406
415
  await statusCache.set(taskId, {
@@ -419,6 +428,16 @@ class RestoreManager {
419
428
  });
420
429
  await this.ctx.app.runCommand("upgrade");
421
430
  }
431
+ async #restorePortals(restorePortals, extractedDir) {
432
+ if (!restorePortals) {
433
+ return;
434
+ }
435
+ const portalsDir = import_path.default.join(extractedDir, "portals");
436
+ await import_fs_extra.default.rm(this.#portalDir, { recursive: true, force: true });
437
+ if (await import_fs_extra.default.pathExists(portalsDir)) {
438
+ await import_fs_extra.default.copy(portalsDir, this.#portalDir, { overwrite: true });
439
+ }
440
+ }
422
441
  async #restoreFilesAndCleanup(restoreUploads, extractedDir) {
423
442
  if (restoreUploads) {
424
443
  const uploadsDir = import_path.default.join(extractedDir, "uploads");
@@ -57,6 +57,7 @@ const DEFAULT_SETTINGS = {
57
57
  cron: "0 0 * * *",
58
58
  keep: 100,
59
59
  enableFilesBackup: true,
60
+ enablePortalsBackup: true,
60
61
  storageId: null,
61
62
  encryptionPassword: ""
62
63
  }
@@ -201,6 +202,7 @@ class PluginBackupsServer extends import_server.Plugin {
201
202
  cron: null,
202
203
  encryptionPassword: null,
203
204
  enableFilesBackup: false,
205
+ enablePortalsBackup: false,
204
206
  keep: 0
205
207
  });
206
208
  const fileBaseName = await backupManager.createBackupName();
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "displayName.zh-CN": "备份管理器",
5
5
  "description": "Provides backup and restore functionality, supports scheduled backups, and ensures data security and quick recovery.",
6
6
  "description.zh-CN": "提供备份与还原功能,支持定时备份,确保数据安全与快速恢复。",
7
- "version": "2.3.0-beta.6",
7
+ "version": "2.4.0-alpha.2",
8
8
  "license": "Apache-2.0",
9
9
  "main": "dist/server/index.js",
10
10
  "nocobase": {
@@ -50,5 +50,5 @@
50
50
  "keywords": [
51
51
  "System management"
52
52
  ],
53
- "gitHead": "45b23791f5245d1417047b122d1a76764aaf5473"
53
+ "gitHead": "706bb81047a05f39f2ddce781ebcafeea4ec9cd5"
54
54
  }
@@ -1,10 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- "use strict";(self.webpackChunk_nocobase_plugin_backups_client_v2=self.webpackChunk_nocobase_plugin_backups_client_v2||[]).push([["268"],{887:function(e,t,n){n.r(t),n.d(t,{default:function(){return h}});var r=n(694),a=n(625),o=n(59),c=n(155),l=n.n(c),u=n(837);n(693);var i=n(488);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function f(e,t,n,r,a,o,c){try{var l=e[o](c),u=l.value}catch(e){n(e);return}l.done?t(u):Promise.resolve(u).then(r,a)}function m(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var o=e.apply(t,n);function c(e){f(o,r,a,c,l,"next",e)}function l(e){f(o,r,a,c,l,"throw",e)}c(void 0)})}}function p(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],c=!0,l=!1;try{for(a=a.call(e);!(c=(n=a.next()).done)&&(o.push(n.value),!t||o.length!==t);c=!0);}catch(e){l=!0,r=e}finally{try{c||null==a.return||a.return()}finally{if(l)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return s(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},c=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(c,"next",{value:u(0)}),l(c,"throw",{value:u(1)}),l(c,"return",{value:u(2)}),"function"==typeof Symbol&&l(c,Symbol.iterator,{value:function(){return this}}),c;function u(l){return function(u){var i=[l,u];if(n)throw TypeError("Generator is already executing.");for(;c&&(c=0,i[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&i[0]?r.return:i[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,i[1])).done)return a;switch(r=0,a&&(i=[2&i[0],a.value]),i[0]){case 0:case 1:a=i;break;case 4:return o.label++,{value:i[1],done:!1};case 5:o.label++,r=i[1],i=[0];continue;case 7:i=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!a||i[1]>a[0]&&i[1]<a[3])){o.label=i[1];break}if(6===i[0]&&o.label<a[1]){o.label=a[1],a=i;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(i);break}a[2]&&o.ops.pop(),o.trys.pop();continue}i=t.call(e,o)}catch(e){i=[6,e],r=0}finally{n=a=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}}}var y={scheduled:!1,cron:"0 0 * * *",keep:100,enableFilesBackup:!1},g=function(e){var t,n,r,a=e.onChange,o=e.value,c=function(e,t){if(null==e)return{};var n,r,a,o={};if("u">typeof Reflect&&Reflect.ownKeys){for(a=0,n=Reflect.ownKeys(Object(e));a<n.length;a++)r=n[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r]);return o}if(o=function(e,t){if(null==e)return{};var n,r,a={},o=Object.getOwnPropertyNames(e);for(r=0;r<o.length;r++)n=o[r],!(t.indexOf(n)>=0)&&Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n]);return a}(e,t),Object.getOwnPropertySymbols)for(a=0,n=Object.getOwnPropertySymbols(e);a<n.length;a++)r=n[a],!(t.indexOf(r)>=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r]);return o}(e,["onChange","value"]),i=window.cronLocale;return l().createElement("fieldset",{className:"nb-backup-settings-cron"},l().createElement(u.l4,(t=p({},c),n=n={clearButton:!1,locale:i,value:null!=(r=null!=o?o:y.cron)?r:"",setValue:function(e){null==a||a(e)}},Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):(function(e){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t.push.apply(t,n)}return t})(Object(n)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}),t)))},h=function(){var e=(0,r.useFlowContext)(),t=(0,i.k)(),n=o.App.useApp(),u=n.message,s=n.notification,f=b(o.Form.useForm(),1)[0],h=b((0,c.useState)(!1),2),v=h[0],w=h[1],O=o.Form.useWatch("scheduled",f),k=(0,a.useRequest)(function(){return m(function(){var t;return d(this,function(n){switch(n.label){case 0:return[4,e.api.request({url:"backupSettings:get/1"})];case 1:return[2,null==(t=n.sent().data)?void 0:t.data]}})})()},{onSuccess:function(e){f.setFieldsValue(p({},y,e))}}),j=(0,a.useRequest)(function(){return m(function(){var t,n;return d(this,function(r){switch(r.label){case 0:return[4,e.api.request({url:"storages:list"})];case 1:return[2,(null!=(t=null==(n=r.sent().data)?void 0:n.data)?t:[]).filter(function(e){return"local"!==e.type})]}})})()}),E=(0,c.useMemo)(function(){var e;return(null!=(e=j.data)?e:[]).map(function(e){return{label:e.title,value:e.id}})},[j.data]);return l().createElement(o.Card,{bordered:!1},l().createElement("style",null,"\n .nb-backup-settings-cron {\n min-width: 0;\n margin: 0;\n padding: 0;\n border: 0;\n }\n\n .nb-backup-settings-cron .react-js-cron {\n padding: 0.5em 0.5em 0 0.5em;\n border: 1px dashed #ccc;\n }\n\n .nb-backup-settings-cron .react-js-cron .react-js-cron-field {\n flex-shrink: 0;\n margin-bottom: 0.5em;\n }\n\n .nb-backup-settings-cron .react-js-cron .react-js-cron-field > span {\n flex-shrink: 0;\n margin: 0 0.5em 0 0;\n }\n\n .nb-backup-settings-cron .react-js-cron .react-js-cron-field > .react-js-cron-select {\n margin: 0 0.5em 0 0;\n }\n\n .nb-backup-settings-cron\n .react-js-cron\n .react-js-cron-field\n > .react-js-cron-select\n .ant-select-selection-overflow {\n align-items: center;\n flex: initial;\n }\n"),l().createElement(o.Form,{form:f,layout:"vertical",initialValues:y,disabled:k.loading,onFinish:function(n){return m(function(){var r,a,o;return d(this,function(c){switch(c.label){case 0:r=p({},k.data,n),w(!0),c.label=1;case 1:return c.trys.push([1,3,4,5]),[4,e.api.request({url:"backupSettings:update/1",method:"post",data:r,skipNotify:!0})];case 2:return c.sent(),k.mutate(r),u.success(t("Saved successfully")),[3,5];case 3:return a=c.sent(),o=e.api.toErrMessages(a),s.error({message:o.length?o.map(function(e,n){var r="string"==typeof e?e:e.message;return l().createElement("div",{key:"".concat(n,"_").concat(r)},r||t("Save failed"))}):t("Save failed"),role:"alert"}),[3,5];case 4:return w(!1),[7];case 5:return[2]}})})()}},l().createElement(o.Form.Item,{label:t("Automatic backup")},l().createElement(o.Space,{direction:"vertical",style:{width:"100%"}},l().createElement(o.Form.Item,{name:"scheduled",valuePropName:"checked",noStyle:!0},l().createElement(o.Checkbox,null,t("Run automatic backup on the cron schedule"))),l().createElement(o.Form.Item,{name:"cron",rules:[{required:!!O,message:t("The field value is required")}],style:{marginBottom:0}},l().createElement(g,{disabled:!O})))),l().createElement(o.Form.Item,{name:"keep",label:t("Maximum number of backups"),extra:t("The maximum number of backups to keep, older backups are automatically deleted."),required:!0,rules:[{required:!0,message:t("The field value is required")},{type:"integer",min:1,max:1e3,message:t("Maximum number of backups must be an integer between {{min}} and {{max}}",{min:1,max:1e3})}]},l().createElement(o.InputNumber,{min:1,max:1e3,precision:0,style:{width:"100%"}})),l().createElement(o.Form.Item,{name:"storageId",label:t("Sync backups to cloud storage")},l().createElement(o.Select,{loading:j.loading,options:E,style:{width:"100%"}})),l().createElement(o.Form.Item,{name:"enableFilesBackup",label:t("Backup local storage files"),valuePropName:"checked"},l().createElement(o.Switch,null)),l().createElement(o.Form.Item,{name:"encryptionPassword",label:t("Restore password"),extra:t("If a restore password is set, it must be entered when restoring the backup.")},l().createElement(o.Input.Password,{autoComplete:"new-password",style:{width:"100%"}})),l().createElement(o.Form.Item,null,l().createElement(o.Button,{type:"primary",htmlType:"submit",loading:v},t("Submit")))))}},488:function(e,t,n){n.d(t,{k:function(){return o}});var r=n(694),a=n(401);function o(){var e=(0,r.useFlowEngine)();return function(t,n){return e.context.t(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({ns:[a.C,"client"]},n))}}}}]);
@@ -1,10 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- (self.webpackChunk_nocobase_plugin_backups_client_v2=self.webpackChunk_nocobase_plugin_backups_client_v2||[]).push([["567"],{574:function(e,t,n){var r,a;void 0===(a="function"==typeof(r=function(){"use strict";function t(e,t,n){var r=new XMLHttpRequest;r.open("GET",e),r.responseType="blob",r.onload=function(){l(r.response,t,n)},r.onerror=function(){console.error("could not download file")},r.send()}function r(e){var t=new XMLHttpRequest;t.open("HEAD",e,!1);try{t.send()}catch(e){}return 200<=t.status&&299>=t.status}function a(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(n){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var o="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof n.g&&n.g.global===n.g?n.g:void 0,u=o.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),l=o.saveAs||("object"!=typeof window||window!==o?function(){}:"download"in HTMLAnchorElement.prototype&&!u?function(e,n,u){var l=o.URL||o.webkitURL,i=document.createElement("a");i.download=n=n||e.name||"download",i.rel="noopener","string"==typeof e?(i.href=e,i.origin===location.origin?a(i):r(i.href)?t(e,n,u):a(i,i.target="_blank")):(i.href=l.createObjectURL(e),setTimeout(function(){l.revokeObjectURL(i.href)},4e4),setTimeout(function(){a(i)},0))}:"msSaveOrOpenBlob"in navigator?function(e,n,o){if(n=n||e.name||"download","string"!=typeof e){var u;navigator.msSaveOrOpenBlob((void 0===(u=o)?u={autoBom:!1}:"object"!=typeof u&&(console.warn("Deprecated: Expected third argument to be a object"),u={autoBom:!u}),u.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob(["\uFEFF",e],{type:e.type}):e),n)}else if(r(e))t(e,n,o);else{var l=document.createElement("a");l.href=e,l.target="_blank",setTimeout(function(){a(l)})}}:function(e,n,r,a){if((a=a||open("","_blank"))&&(a.document.title=a.document.body.innerText="downloading..."),"string"==typeof e)return t(e,n,r);var l="application/octet-stream"===e.type,i=/constructor/i.test(o.HTMLElement)||o.safari,c=/CriOS\/[\d]+/.test(navigator.userAgent);if((c||l&&i||u)&&"u">typeof FileReader){var s=new FileReader;s.onloadend=function(){var e=s.result;e=c?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),a?a.location.href=e:location=e,a=null},s.readAsDataURL(e)}else{var f=o.URL||o.webkitURL,p=f.createObjectURL(e);a?a.location=p:location.href=p,a=null,setTimeout(function(){f.revokeObjectURL(p)},4e4)}});o.saveAs=l.saveAs=l,e.exports=l})?r.apply(t,[]):r)||(e.exports=a)},258:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return W}});var r=n(694),a=n(625),o=n(59),u=n(155),l=n.n(u),i=n(477),c=n(485),s=n(185),f=n.n(s),p=n(574),d=n(401),b=(0,u.createContext)(null),m=function(){var e=(0,u.useContext)(b);if(!e)throw Error("BackupsContext provider is missing");return e},v=n(488);function h(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}var y={database:{dialect:""}},w=function(){var e=(0,r.useFlowContext)(),t=(0,a.useMemoizedFn)(function(){var t;return(t=function(){var t,n;return function(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(r){switch(r.label){case 0:return[4,e.api.request({url:"backups:appInfo"})];case 1:return[2,null!=(t=null==(n=r.sent().data)?void 0:n.data)?t:y]}})},function(){var e=this,n=arguments;return new Promise(function(r,a){var o=t.apply(e,n);function u(e){h(o,r,a,u,l,"next",e)}function l(e){h(o,r,a,u,l,"throw",e)}u(void 0)})})()}),n=(0,a.useRequest)(t,{cacheKey:"backupAppInfo",staleTime:-1}).data;return null!=n?n:y},g=function(){var e=(0,r.useFlowEngine)(),t=(0,c.useApp)();return{showCheckBackupMessage:(0,a.useMemoizedFn)(function(){var n=e.context[d.l];n?n.showCheckBackupMessage():("function"==typeof t.setMaintaining?t.setMaintaining(!0):t.maintaining=!0,t.error={command:{name:"APP Restoring"},message:"checking backup...",code:"APP_COMMANDING"})}),hideCheckBackupMessage:(0,a.useMemoizedFn)(function(){var n=e.context[d.l];n?n.hideCheckBackupMessage():"function"==typeof t.setMaintaining?t.setMaintaining(!1):t.maintaining=!1})}};function k(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}function E(){var e=(0,r.useFlowContext)(),t=(0,c.useApp)(),n=l().useRef(null),a=o.App.useApp().notification,i=g().hideCheckBackupMessage;return(0,u.useEffect)(function(){var t=setInterval(function(){var t;return(t=function(){var t,r;return function(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(o){switch(o.label){case 0:if(!n.current)return[2];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,e.api.request({url:"".concat(d.C,":restoreStatus"),method:"get",params:{task:n.current}})];case 2:if(!(r=null==(t=o.sent().data)?void 0:t.data))return[2];return r.inProgress||(n.current=null),r.message&&(i(),a.error({message:r.message,role:"alert"})),[3,4];case 3:return console.error(o.sent()),[3,4];case 4:return[2]}})},function(){var e=this,n=arguments;return new Promise(function(r,a){var o=t.apply(e,n);function u(e){k(o,r,a,u,l,"next",e)}function l(e){k(o,r,a,u,l,"throw",e)}u(void 0)})})()},3e3);return function(){return clearInterval(t)}},[t.maintaining,e.api,i,a]),n}function C(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function S(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}function x(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],u=!0,l=!1;try{for(a=a.call(e);!(u=(n=a.next()).done)&&(o.push(n.value),!t||o.length!==t);u=!0);}catch(e){l=!0,r=e}finally{try{u||null==a.return||a.return()}finally{if(l)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return C(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return C(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var A=function(e){var t=e.backup,n=(0,v.k)(),a=(0,r.useFlowContext)(),u=o.App.useApp().notification,i=x(l().useState(!1),2),c=i[0],s=i[1],f=x(l().useState(""),2),p=f[0],d=f[1],b=x(l().useState(!1),2),m=b[0],h=b[1],y=x(l().useState(""),2),k=y[0],C=y[1],A=l().useRef(!1),O=E(),j=g().showCheckBackupMessage,I=w().database,P=I.schema,R=I.dialect,M=function(){d(""),C("")},T=function(){A.current||(s(!1),M())};return l().createElement(l().Fragment,null,l().createElement(o.Button,{type:"link",size:"small",onClick:function(){s(!0)}},n("Restore")),l().createElement(o.Modal,{title:n("Restore"),open:c,onCancel:T,closable:!m,keyboard:!m,maskClosable:!m,footer:[l().createElement(o.Button,{key:"back",disabled:m,onClick:T},n("Cancel")),l().createElement(o.Button,{key:"submit",type:"primary",loading:m,disabled:m,onClick:function(){var e;return(e=function(){var e,r,o,i,c,f,d,b,m;return function(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(v){switch(v.label){case 0:if(A.current)return[2];A.current=!0,h(!0),e=!1,v.label=1;case 1:return v.trys.push([1,3,4,5]),[4,a.api.request({url:"backups:restore",method:"post",skipNotify:!0,data:{name:t.name,password:p,dbSchema:k}})];case 2:return O.current=null!=(r=null==(i=v.sent().data)||null==(o=i.data)?void 0:o.task)?r:null,j(),s(!1),M(),[3,5];case 3:return e=!(b=c=v.sent()).response||(null==(d=b.response.data)||null==(f=d.error)?void 0:f.maintaining)===!0,m=a.api.toErrMessages(c),u.error({message:m.map(function(e,t){var r="string"==typeof e?e:e.message;return l().createElement("div",{key:"".concat(t,"_").concat(r)},r||n("Restore failed"))}),role:"alert"}),[3,5];case 4:return e||(A.current=!1,h(!1)),[7];case 5:return[2]}})},function(){var t=this,n=arguments;return new Promise(function(r,a){var o=e.apply(t,n);function u(e){S(o,r,a,u,l,"next",e)}function l(e){S(o,r,a,u,l,"throw",e)}u(void 0)})})()}},n("Submit"))]},l().createElement(o.Form,{layout:"vertical",autoComplete:"off",disabled:m},["postgres","kingbase"].includes(R)&&l().createElement(o.Form.Item,{label:n("Confirm the application database schema"),help:n("Required if application database schema is different with the backup",{currentDbSchemaTips:P?"[".concat(P,"]"):""})},l().createElement(o.Input,{autoComplete:"new-password",value:k,onChange:function(e){return C(e.target.value)}})),l().createElement(o.Form.Item,{colon:!0,label:n("Restore password")},l().createElement(o.Input.Password,{value:p,autoComplete:"new-password",onChange:function(e){return d(e.target.value)}})))))};function O(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}function j(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var o=e.apply(t,n);function u(e){O(o,r,a,u,l,"next",e)}function l(e){O(o,r,a,u,l,"throw",e)}u(void 0)})}}function I(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}function P(){var e,t,n=(e=["\n .ant-table-tbody > tr > td {\n line-height: ","px;\n }\n "],t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}})));return P=function(){return n},n}var R=function(){var e,t=(0,v.k)(),n=(0,r.useFlowContext)(),s=(0,c.useCurrentAppInfo)(),b=o.theme.useToken().token,h=(0,u.useMemo)(function(){return(0,i.css)(P(),b.controlHeight-b.paddingXXS)},[b.controlHeight,b.paddingXXS]),y=o.App.useApp(),w=y.modal,g=y.message,k=m(),E=k.data,C=k.loading,S=k.refreshAsync,x=(0,a.useRequest)(function(e){return j(function(){var t;return I(this,function(r){switch(r.label){case 0:return[4,n.api.request({url:"".concat(d.C,":destroy"),method:"post",params:{filterByTk:e}})];case 1:return[2,null==(t=r.sent().data)?void 0:t.data]}})})()},{manual:!0}).runAsync,O=(0,u.useCallback)(function(e){w.confirm({title:t("Delete record"),content:t("Are you sure you want to delete it?"),onOk:function(){return j(function(){return I(this,function(n){switch(n.label){case 0:return[4,x(e.name)];case 1:return n.sent(),[4,S()];case 2:return n.sent(),g.success(t("The deletion was successful.")),[2]}})})()}})},[x,g,w,S,t]),R=(0,u.useCallback)(function(e){return j(function(){var t,r,a,o,u;return I(this,function(l){switch(l.label){case 0:return a=null!=(t=null==s?void 0:s.name)?t:null==s||null==(r=s.data)?void 0:r.name,o={filterByTk:e.name},a&&(o.__appName=a),[4,n.api.request({url:"backups:download",method:"get",params:o,responseType:"blob"})];case 1:return u=new Blob([l.sent().data]),(0,p.saveAs)(u,e.name),[2]}})})()},[n.api,null==s||null==(e=s.data)?void 0:e.name,null==s?void 0:s.name]),M=function(e){return e.inProgress?{colSpan:0}:{}},T=(0,u.useMemo)(function(){return[{title:t("Backup list"),dataIndex:"name",width:400,ellipsis:!0,onCell:function(e){return e.inProgress?{colSpan:4}:{}},render:function(e,n){return n.inProgress?l().createElement("span",{style:{color:b.colorText}},e,"(",t("Backing up"),"...)"):l().createElement("span",null,e)}},{title:t("File size"),dataIndex:"fileSize",onCell:M},{title:t("Created at"),dataIndex:"createdAt",onCell:M,render:function(e){return e?f()(e).format("YYYY-MM-DD HH:mm:ss"):null}},{title:t("Actions"),dataIndex:"actions",onCell:M,render:function(e,n){return l().createElement(o.Space,{split:l().createElement(o.Divider,{type:"vertical"})},l().createElement(A,{backup:n}),l().createElement("a",{onClick:function(){R(n)}},t("Download")),l().createElement("a",{onClick:function(){return O(n)}},t("Delete")))}}]},[O,R,t,b.colorText]);return l().createElement(c.Table,{rowKey:"name",className:h,dataSource:null==E?void 0:E.data,loading:C,columns:T})},M=n(375);function T(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function B(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}function F(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var o=e.apply(t,n);function u(e){B(o,r,a,u,l,"next",e)}function l(e){B(o,r,a,u,l,"throw",e)}u(void 0)})}}function _(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],u=!0,l=!1;try{for(a=a.call(e);!(u=(n=a.next()).done)&&(o.push(n.value),!t||o.length!==t);u=!0);}catch(e){l=!0,r=e}finally{try{u||null==a.return||a.return()}finally{if(l)throw r}}return o}}(e,t)||D(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function q(e){return function(e){if(Array.isArray(e))return T(e)}(e)||function(e){if("u">typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||D(e)||function(){throw TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function D(e,t){if(e){if("string"==typeof e)return T(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return T(e,t)}}function L(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}var U=function(){var e=_((0,u.useState)([]),2),t=e[0],n=e[1],i=(0,v.k)(),c=(0,r.useFlowContext)(),s=o.App.useApp(),f=s.message,p=s.notification,b=s.modal,h=m().refreshAsync,y=(0,a.useRequest)(function(){return F(function(){var e;return L(this,function(t){switch(t.label){case 0:return[4,c.api.request({url:"".concat(d.C,":create"),method:"post"})];case 1:return[2,null==(e=t.sent().data)?void 0:e.data]}})})()},{manual:!0,throttleWait:1e3}),w=y.runAsync,g=y.loading,k=(0,a.useRequest)(function(e){return F(function(){var t,n;return L(this,function(r){switch(r.label){case 0:return[4,c.api.request({url:"".concat(d.C,":taskStatus"),method:"get",params:{names:e}})];case 1:return[2,null!=(t=null==(n=r.sent().data)?void 0:n.data)?t:{}]}})})()},{manual:!0}).runAsync;(0,u.useEffect)(function(){if(0!==t.length){var e=setInterval(function(){return F(function(){var e,r,a,o,u,l,c,s,d,b,m,v;return L(this,function(y){switch(y.label){case 0:return[4,k(t)];case 1:e=y.sent(),r=[],a=[],o=!0,u=!1,l=void 0;try{for(c=Object.entries(e)[Symbol.iterator]();!(o=(s=c.next()).done);o=!0)b=(d=_(s.value,2))[0],(m=d[1]).inProgress||(m.message?(a.push(b),p.error({message:m.message,role:"alert"})):r.push(b))}catch(e){u=!0,l=e}finally{try{o||null==c.return||c.return()}finally{if(u)throw l}}if(v=q(r).concat(q(a)),!(r.length>0))return[3,3];return f.success(i("NEW_BACKUPS_CREATED",{names:r.join(", ")})),[4,h()];case 2:y.sent(),y.label=3;case 3:return v.length>0&&n(function(e){return e.filter(function(e){return!v.includes(e)})}),[2]}})})()},3e3);return function(){clearInterval(e)}}},[t,f,p,k,h,i]);var E=g?M.LoadingOutlined:M.PlusOutlined;return l().createElement(o.Button,{icon:l().createElement(E,null),disabled:g,type:"primary",onClick:function(){return F(function(){return L(this,function(e){return b.confirm({title:i("New backup"),content:i("Are you sure you want to create new backup?"),onOk:function(){return F(function(){return L(this,function(e){switch(e.label){case 0:return[4,F(function(){var e;return L(this,function(t){switch(t.label){case 0:return[4,w()];case 1:return(null==(e=t.sent())?void 0:e.name)&&n(function(t){return q(t).concat([e.name])}),f.success(i("New backup operation started")),[4,h()];case 2:return t.sent(),[2]}})})()];case 1:return e.sent(),[2]}})})()}}),[2]})})()}},i("New backup"))},N=function(){var e=(0,v.k)(),t=m(),n=t.refresh,r=t.loading,a=r?M.LoadingOutlined:M.ReloadOutlined;return l().createElement(o.Button,{onClick:n,icon:l().createElement(a,null),disabled:r},e("Refresh"))};function G(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function H(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}function z(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,a=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var o=[],u=!0,l=!1;try{for(a=a.call(e);!(u=(n=a.next()).done)&&(o.push(n.value),!t||o.length!==t);u=!0);}catch(e){l=!0,r=e}finally{try{u||null==a.return||a.return()}finally{if(l)throw r}}return o}}(e,t)||function(e,t){if(e){if("string"==typeof e)return G(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if("Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return G(e,t)}}(e,t)||function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var X=function(){var e=(0,v.k)(),t=(0,r.useFlowContext)(),n=o.App.useApp().notification,a=z((0,u.useState)(!1),2),i=a[0],c=a[1],s=z((0,u.useState)(!1),2),f=s[0],p=s[1],d=z((0,u.useState)(""),2),b=d[0],m=d[1],h=z((0,u.useState)(""),2),y=h[0],k=h[1],C=z((0,u.useState)(null),2),S=C[0],x=C[1],A=z((0,u.useState)([]),2),O=A[0],j=A[1],I=l().useRef(!1),P=E(),R=g().showCheckBackupMessage,T=w().database,B=T.schema,F=T.dialect,_=function(){m(""),x(null),j([]),k("")},q=function(){I.current||(c(!1),_())};return l().createElement(l().Fragment,null,l().createElement(o.Button,{icon:l().createElement(M.UploadOutlined,null),onClick:function(){c(!0)}},e("Restore backup from local")),l().createElement(o.Modal,{title:e("Restore backup from local"),open:i,onCancel:q,closable:!f,keyboard:!f,maskClosable:!f,footer:[l().createElement(o.Button,{key:"back",disabled:f,onClick:q},e("Cancel")),l().createElement(o.Button,{key:"submit",type:"primary",loading:f,disabled:f,onClick:function(){var r;return(r=function(){var r,a,o,u,i,s,f,d,m,v;return function(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(h){switch(h.label){case 0:if(I.current)return[2];if(!S)return n.error({message:e("Please select a backup file")}),[2];I.current=!0,p(!0),r=!1,(a=new FormData).append("file",S),a.append("password",b),a.append("dbSchema",y),h.label=1;case 1:return h.trys.push([1,3,4,5]),[4,t.api.request({url:"backups:upload",method:"post",data:a,skipNotify:!0})];case 2:return P.current=null!=(o=null==(i=h.sent().data)||null==(u=i.data)?void 0:u.task)?o:null,R(),c(!1),_(),[3,5];case 3:return r=!(m=s=h.sent()).response||(null==(d=m.response.data)||null==(f=d.error)?void 0:f.maintaining)===!0,v=t.api.toErrMessages(s),n.error({message:v.map(function(t,n){var r="string"==typeof t?t:t.message;return l().createElement("div",{key:"".concat(n,"_").concat(r)},r||e("Restore failed"))}),role:"alert"}),[3,5];case 4:return r||(I.current=!1,p(!1)),[7];case 5:return[2]}})},function(){var e=this,t=arguments;return new Promise(function(n,a){var o=r.apply(e,t);function u(e){H(o,n,a,u,l,"next",e)}function l(e){H(o,n,a,u,l,"throw",e)}u(void 0)})})()}},e("Submit"))]},l().createElement(o.Form,{layout:"vertical",autoComplete:"off",disabled:f},l().createElement(o.Form.Item,null,l().createElement(o.Upload.Dragger,{onRemove:function(){j([]),x(null)},fileList:O,multiple:!1,maxCount:1,beforeUpload:function(e){return x(e),j([e]),!1}},l().createElement("p",{className:"ant-upload-drag-icon"},l().createElement(M.InboxOutlined,null)),l().createElement("p",{className:"ant-upload-text"},e("Click or drag file to this area to upload")))),["postgres","kingbase"].includes(F)&&l().createElement(o.Form.Item,{label:e("Confirm the application database schema"),help:e("Required if application database schema is different with the backup",{currentDbSchemaTips:B?"[".concat(B,"]"):""})},l().createElement(o.Input,{autoComplete:"new-password",value:y,onChange:function(e){return k(e.target.value)}})),l().createElement(o.Form.Item,{colon:!0,label:e("Restore password")},l().createElement(o.Input.Password,{autoComplete:"new-password",value:b,onChange:function(e){return m(e.target.value)}})))))};function K(e,t,n,r,a,o,u){try{var l=e[o](u),i=l.value}catch(e){n(e);return}l.done?t(i):Promise.resolve(i).then(r,a)}var Y={data:[]},W=function(){var e=(0,r.useFlowContext)(),t=(0,a.useRequest)(function(){var t;return(t=function(){var t;return function(e,t){var n,r,a,o={label:0,sent:function(){if(1&a[0])throw a[1];return a[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),l=Object.defineProperty;return l(u,"next",{value:i(0)}),l(u,"throw",{value:i(1)}),l(u,"return",{value:i(2)}),"function"==typeof Symbol&&l(u,Symbol.iterator,{value:function(){return this}}),u;function i(l){return function(i){var c=[l,i];if(n)throw TypeError("Generator is already executing.");for(;u&&(u=0,c[0]&&(o=0)),o;)try{if(n=1,r&&(a=2&c[0]?r.return:c[0]?r.throw||((a=r.return)&&a.call(r),0):r.next)&&!(a=a.call(r,c[1])).done)return a;switch(r=0,a&&(c=[2&c[0],a.value]),c[0]){case 0:case 1:a=c;break;case 4:return o.label++,{value:c[1],done:!1};case 5:o.label++,r=c[1],c=[0];continue;case 7:c=o.ops.pop(),o.trys.pop();continue;default:if(!(a=(a=o.trys).length>0&&a[a.length-1])&&(6===c[0]||2===c[0])){o=0;continue}if(3===c[0]&&(!a||c[1]>a[0]&&c[1]<a[3])){o.label=c[1];break}if(6===c[0]&&o.label<a[1]){o.label=a[1],a=c;break}if(a&&o.label<a[2]){o.label=a[2],o.ops.push(c);break}a[2]&&o.ops.pop(),o.trys.pop();continue}c=t.call(e,o)}catch(e){c=[6,e],r=0}finally{n=a=0}if(5&c[0])throw c[1];return{value:c[0]?c[1]:void 0,done:!0}}}}(this,function(n){switch(n.label){case 0:return[4,e.api.request({url:"".concat(d.C,":list"),method:"get"})];case 1:return[2,null!=(t=n.sent().data)?t:Y]}})},function(){var e=this,n=arguments;return new Promise(function(r,a){var o=t.apply(e,n);function u(e){K(o,r,a,u,l,"next",e)}function l(e){K(o,r,a,u,l,"throw",e)}u(void 0)})})()});return l().createElement(b.Provider,{value:t},l().createElement(o.Card,{bordered:!1},l().createElement(o.Space,{style:{float:"right",marginBottom:16}},l().createElement(N,null),l().createElement(X,null),l().createElement(U,null)),l().createElement(R,null)))}},488:function(e,t,n){"use strict";n.d(t,{k:function(){return o}});var r=n(694),a=n(401);function o(){var e=(0,r.useFlowEngine)();return function(t,n){return e.context.t(t,function(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"==typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){var r;r=n[t],t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r})}return e}({ns:[a.C,"client"]},n))}}}}]);