@bunnarin/plugin-audit-log 2.0.2 → 2.0.3

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.
@@ -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("react"),require("@nocobase/client"),require("antd")):"function"==typeof define&&define.amd?define("@bunnarin/plugin-audit-log",["react","@nocobase/client","antd"],t):"object"==typeof exports?exports["@bunnarin/plugin-audit-log"]=t(require("react"),require("@nocobase/client"),require("antd")):e["@bunnarin/plugin-audit-log"]=t(e.react,e["@nocobase/client"],e.antd)}(self,function(e,t,n){return function(){"use strict";var r={772:function(e){e.exports=t},721:function(e){e.exports=n},156:function(t){t.exports=e}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return r[e](n,n.exports,i),n.exports}i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return!function(){i.r(a),i.d(a,{default:function(){return k}});var e=i(772),t={},n=i(156),r=i.n(n),o=i(721);function u(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 l(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function c(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){l(i,r,o,a,u,"next",e)}function u(e){l(i,r,o,a,u,"throw",e)}a(void 0)})}}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}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){s(e,t,n[t])})}return e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(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 u(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 y(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)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 a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}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}}}}var b=function(){var t,i,a=(0,e.useCollectionManager)().getCollections(),u=(0,e.useAPIClient)(),l=d((0,n.useState)({}),2),b=l[0],h=l[1],v=d((0,n.useState)(!0),2),g=v[0],m=v[1],w=(t=c(function(){var e,t,n;return y(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,3,4]),m(!0),[4,u.resource("__auditConfig").list({paginate:!1})];case 1:return t=r.sent().data,n={},null==t||null==(e=t.data)||e.forEach(function(e){n[e.collectionName]=e}),h(n),[3,4];case 2:return console.error(r.sent()),o.message.error("Failed to fetch audit configs"),[3,4];case 3:return m(!1),[7];case 4:return[2]}})}),function(){return t.apply(this,arguments)});(0,n.useEffect)(function(){w()},[]);var O=(i=c(function(e,t){var n,r;return y(this,function(i){switch(i.label){case 0:if(i.trys.push([0,5,,6]),r=f({},n=b[e]||{},t),h(function(t){return p(f({},t),s({},e,r))}),n.collectionName)return[3,2];return[4,u.resource("__auditConfig").create({values:f({collectionName:e},t)}).then(function(t){return h(function(n){return p(f({},n),s({},e,Array.isArray(t.data.data)?t.data.data[0]:t.data.data))})})];case 1:return i.sent(),[3,4];case 2:return[4,u.resource("__auditConfig").update({filter:{collectionName:e},values:t}).then(function(t){return h(function(n){return p(f({},n),s({},e,Array.isArray(t.data.data)?t.data.data[0]:t.data.data))})})];case 3:i.sent(),i.label=4;case 4:return o.message.success("Config saved"),[3,6];case 5:return console.error(i.sent()),o.message.error("Failed to save config"),w(),[3,6];case 6:return[2]}})}),function(e,t){return i.apply(this,arguments)}),k=(0,n.useMemo)(function(){return a.filter(function(e){return!e.name.startsWith("__audit")&&"__ipAddress"!==e.name})},[a]),x=[{title:"Collection",dataIndex:"name",key:"name",render:function(e,t){return r().createElement("div",null,r().createElement(o.Typography.Text,{strong:!0},t.title||e),r().createElement("br",null),r().createElement(o.Typography.Text,{type:"secondary"},e))}},{title:"Skip IP",dataIndex:"skipIP",key:"skipIP",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipIP)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipIP:e})}})}},{title:"Skip Create",dataIndex:"skipCreate",key:"skipCreate",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipCreate)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipCreate:e})}})}},{title:"Skip Delete",dataIndex:"skipDelete",key:"skipDelete",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipDelete)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipDelete:e})}})}},{title:"Update Listen Logic",dataIndex:"updateListenLogic",key:"updateListenLogic",render:function(e,t){var n,i,a=(null==(n=b[t.name])?void 0:n.updateListenLogic)||{},u=a.blacklist?"include":a.whitelist?"exclude":"none",l="include"===u?a.blacklist:"exclude"===u?a.whitelist:[],c=(null==(i=t.fields)?void 0:i.filter(function(e){return!["hasOne","hasMany","belongsTo","belongsToMany"].includes(e.type)}))||[];return r().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"8px",minWidth:"250px"}},r().createElement(o.Select,{value:u,onChange:function(e){"none"===e?O(t.name,{updateListenLogic:null}):O(t.name,{updateListenLogic:s({},"include"===e?"blacklist":"whitelist",[])})},options:[{label:"Log nothing (Default)",value:"none"},{label:"blacklist",value:"include"},{label:"whitelist",value:"exclude"}]}),"none"!==u&&r().createElement(o.Select,{mode:"multiple",allowClear:!0,placeholder:"Select fields",value:l,onChange:function(e){O(t.name,{updateListenLogic:s({},"include"===u?"blacklist":"whitelist",e)})},options:c.map(function(e){return{label:e.title||e.name,value:e.name}})}))}}];return g&&0===Object.keys(b).length?r().createElement(o.Spin,{style:{margin:"20px"}}):r().createElement("div",{style:{padding:"24px"}},r().createElement("h2",null,"Audit Log Configuration"),r().createElement(o.Table,{dataSource:k,columns:x,rowKey:"name",pagination:!1,bordered:!0}))};function h(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function v(e,t,n){return(v=O()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&m(o,n.prototype),o}).apply(null,arguments)}function g(e){return(g=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function m(e,t){return(m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function w(e){var t="function"==typeof Map?new Map:void 0;return(w=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 v(e,arguments,g(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),m(n,e)})(e)}function O(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(O=function(){return!!e})()}var k=function(e){var n;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function r(){var e,t;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return e=r,t=arguments,e=g(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=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,O()?Reflect.construct(e,t||[],g(this).constructor):e.apply(this,t))}return r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&m(r,e),n=[{key:"load",value:function(){var e,n=this;return(e=function(){var e,r;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)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 a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}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(o){return null==(r=n.flowEngine)||null==(e=r.registerModels)||e.call(r,t),n.app.pluginSettingsManager.add("audit-log",{title:"Audit Log Settings",icon:"SettingOutlined",Component:b}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){h(i,r,o,a,u,"next",e)}function u(e){h(i,r,o,a,u,"throw",e)}a(void 0)})})()}}],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)}}(r.prototype,n),r}(w(e.Plugin))}(),a}()});
10
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("@nocobase/client"),require("antd")):"function"==typeof define&&define.amd?define("@bunnarin/plugin-audit-log",["react","@nocobase/client","antd"],t):"object"==typeof exports?exports["@bunnarin/plugin-audit-log"]=t(require("react"),require("@nocobase/client"),require("antd")):e["@bunnarin/plugin-audit-log"]=t(e.react,e["@nocobase/client"],e.antd)}(self,function(e,t,n){return function(){"use strict";var r={772:function(e){e.exports=t},721:function(e){e.exports=n},156:function(t){t.exports=e}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var n=o[e]={exports:{}};return r[e](n,n.exports,i),n.exports}i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,{a:t}),t},i.d=function(e,t){for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var a={};return!function(){i.r(a),i.d(a,{default:function(){return k}});var e=i(772),t={},n=i(156),r=i.n(n),o=i(721);function u(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 l(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function c(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){l(i,r,o,a,u,"next",e)}function u(e){l(i,r,o,a,u,"throw",e)}a(void 0)})}}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}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){s(e,t,n[t])})}return e}function p(e,t){return t=null!=t?t:{},Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):(function(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n.push.apply(n,r)}return n})(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}),e}function d(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n,r,o=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(n=o.next()).done)&&(i.push(n.value),!t||i.length!==t);a=!0);}catch(e){u=!0,r=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw r}}return i}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(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 u(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 y(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)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 a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}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}}}}var b=function(){var t,i,a=(0,e.useCollectionManager)().getCollections(),u=(0,e.useAPIClient)(),l=d((0,n.useState)({}),2),b=l[0],h=l[1],v=d((0,n.useState)(!0),2),g=v[0],m=v[1],w=(t=c(function(){var e,t,n;return y(this,function(r){switch(r.label){case 0:return r.trys.push([0,2,3,4]),m(!0),[4,u.resource("__auditConfig").list({paginate:!1})];case 1:return t=r.sent().data,n={},null==t||null==(e=t.data)||e.forEach(function(e){n[e.collection]=e}),h(n),[3,4];case 2:return console.error(r.sent()),o.message.error("Failed to fetch audit configs"),[3,4];case 3:return m(!1),[7];case 4:return[2]}})}),function(){return t.apply(this,arguments)});(0,n.useEffect)(function(){w()},[]);var O=(i=c(function(e,t){var n,r;return y(this,function(i){switch(i.label){case 0:if(i.trys.push([0,5,,6]),r=f({},n=b[e]||{},t),h(function(t){return p(f({},t),s({},e,r))}),n.collection)return[3,2];return[4,u.resource("__auditConfig").create({values:f({collection:e},t)}).then(function(t){return h(function(n){return p(f({},n),s({},e,Array.isArray(t.data.data)?t.data.data[0]:t.data.data))})})];case 1:return i.sent(),[3,4];case 2:return[4,u.resource("__auditConfig").update({filter:{collection:e},values:t}).then(function(t){return h(function(n){return p(f({},n),s({},e,Array.isArray(t.data.data)?t.data.data[0]:t.data.data))})})];case 3:i.sent(),i.label=4;case 4:return o.message.success("Config saved"),[3,6];case 5:return console.error(i.sent()),o.message.error("Failed to save config"),w(),[3,6];case 6:return[2]}})}),function(e,t){return i.apply(this,arguments)}),k=(0,n.useMemo)(function(){return a.filter(function(e){return!e.name.startsWith("__audit")&&"__ipAddress"!==e.name})},[a]),x=[{title:"Collection",dataIndex:"name",key:"name",render:function(e,t){return r().createElement("div",null,r().createElement(o.Typography.Text,{strong:!0},t.title||e),r().createElement("br",null),r().createElement(o.Typography.Text,{type:"secondary"},e))}},{title:"Skip IP",dataIndex:"skipIP",key:"skipIP",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipIP)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipIP:e})}})}},{title:"Skip Create",dataIndex:"skipCreate",key:"skipCreate",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipCreate)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipCreate:e})}})}},{title:"Skip Delete",dataIndex:"skipDelete",key:"skipDelete",render:function(e,t){var n,i=(null==(n=b[t.name])?void 0:n.skipDelete)||!1;return r().createElement(o.Switch,{checked:i,onChange:function(e){return O(t.name,{skipDelete:e})}})}},{title:"Update Listen Logic",dataIndex:"updateListenLogic",key:"updateListenLogic",render:function(e,t){var n,i,a=(null==(n=b[t.name])?void 0:n.updateListenLogic)||{},u=a.blacklist?"include":a.whitelist?"exclude":"none",l="include"===u?a.blacklist:"exclude"===u?a.whitelist:[],c=(null==(i=t.fields)?void 0:i.filter(function(e){return!["hasOne","hasMany","belongsTo","belongsToMany"].includes(e.type)}))||[];return r().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"8px",minWidth:"250px"}},r().createElement(o.Select,{value:u,onChange:function(e){"none"===e?O(t.name,{updateListenLogic:null}):O(t.name,{updateListenLogic:s({},"include"===e?"blacklist":"whitelist",[])})},options:[{label:"Log nothing (Default)",value:"none"},{label:"blacklist",value:"include"},{label:"whitelist",value:"exclude"}]}),"none"!==u&&r().createElement(o.Select,{mode:"multiple",allowClear:!0,placeholder:"Select fields",value:l,onChange:function(e){O(t.name,{updateListenLogic:s({},"include"===u?"blacklist":"whitelist",e)})},options:c.map(function(e){return{label:e.title||e.name,value:e.name}})}))}}];return g&&0===Object.keys(b).length?r().createElement(o.Spin,{style:{margin:"20px"}}):r().createElement("div",{style:{padding:"24px"}},r().createElement("h2",null,"Audit Log Configuration"),r().createElement(o.Table,{dataSource:k,columns:x,rowKey:"name",pagination:!1,bordered:!0}))};function h(e,t,n,r,o,i,a){try{var u=e[i](a),l=u.value}catch(e){n(e);return}u.done?t(l):Promise.resolve(l).then(r,o)}function v(e,t,n){return(v=O()?Reflect.construct:function(e,t,n){var r=[null];r.push.apply(r,t);var o=new(Function.bind.apply(e,r));return n&&m(o,n.prototype),o}).apply(null,arguments)}function g(e){return(g=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)})(e)}function m(e,t){return(m=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e})(e,t)}function w(e){var t="function"==typeof Map?new Map:void 0;return(w=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 v(e,arguments,g(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),m(n,e)})(e)}function O(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(O=function(){return!!e})()}var k=function(e){var n;if("function"!=typeof e&&null!==e)throw TypeError("Super expression must either be null or a function");function r(){var e,t;if(!(this instanceof r))throw TypeError("Cannot call a class as a function");return e=r,t=arguments,e=g(e),function(e,t){var n;if(t&&("object"==((n=t)&&"undefined"!=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,O()?Reflect.construct(e,t||[],g(this).constructor):e.apply(this,t))}return r.prototype=Object.create(e&&e.prototype,{constructor:{value:r,writable:!0,configurable:!0}}),e&&m(r,e),n=[{key:"load",value:function(){var e,n=this;return(e=function(){var e,r;return function(e,t){var n,r,o,i,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:u(0),throw:u(1),return:u(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function u(i){return function(u){var l=[i,u];if(n)throw TypeError("Generator is already executing.");for(;a;)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 a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){a.label=l[1];break}if(6===l[0]&&a.label<o[1]){a.label=o[1],o=l;break}if(o&&a.label<o[2]){a.label=o[2],a.ops.push(l);break}o[2]&&a.ops.pop(),a.trys.pop();continue}l=t.call(e,a)}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(o){return null==(r=n.flowEngine)||null==(e=r.registerModels)||e.call(r,t),n.app.pluginSettingsManager.add("audit-log-config",{title:"Audit Log Config",icon:"SettingOutlined",Component:b}),[2]})},function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function a(e){h(i,r,o,a,u,"next",e)}function u(e){h(i,r,o,a,u,"throw",e)}a(void 0)})})()}}],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)}}(r.prototype,n),r}(w(e.Plugin))}(),a}()});
@@ -33,12 +33,23 @@ var import_database = require("@nocobase/database");
33
33
  var auditConfig_default = (0, import_database.defineCollection)({
34
34
  name: "__auditConfig",
35
35
  title: "audit config",
36
- filterTargetKey: "collectionName",
36
+ filterTargetKey: "collection",
37
37
  fields: [
38
38
  {
39
39
  type: "string",
40
- name: "collectionName",
41
- primaryKey: true
40
+ interface: "collection",
41
+ name: "collection",
42
+ primaryKey: true,
43
+ unique: true,
44
+ uiSchema: {
45
+ title: "collection",
46
+ type: "string",
47
+ "x-component": "CollectionSelect",
48
+ "x-component-props": {
49
+ multiple: false
50
+ },
51
+ required: true
52
+ }
42
53
  },
43
54
  {
44
55
  type: "belongsTo",
@@ -46,25 +57,49 @@ var auditConfig_default = (0, import_database.defineCollection)({
46
57
  target: "collections",
47
58
  targetKey: "name",
48
59
  sourceKey: "id",
49
- foreignKey: "collectionName",
60
+ foreignKey: "collection",
50
61
  constraints: false
51
62
  },
52
63
  {
53
64
  type: "boolean",
54
- name: "skipIP"
65
+ name: "skipIP",
66
+ interface: "checkbox",
67
+ uiSchema: {
68
+ title: "skip ip",
69
+ type: "boolean",
70
+ "x-component": "Checkbox"
71
+ }
55
72
  },
56
73
  {
57
74
  type: "boolean",
58
- name: "skipCreate"
75
+ name: "skipCreate",
76
+ interface: "checkbox",
77
+ uiSchema: {
78
+ title: "skip create",
79
+ type: "boolean",
80
+ "x-component": "Checkbox"
81
+ }
59
82
  },
60
83
  {
61
84
  type: "boolean",
62
- name: "skipDelete"
85
+ name: "skipDelete",
86
+ interface: "checkbox",
87
+ uiSchema: {
88
+ title: "skip delete",
89
+ type: "boolean",
90
+ "x-component": "Checkbox"
91
+ }
63
92
  },
64
93
  // key will be either include all except or whitelist and value will be array of field names
65
94
  {
66
95
  type: "json",
67
- name: "updateListenLogic"
96
+ name: "updateListenLogic",
97
+ interface: "json",
98
+ uiSchema: {
99
+ title: "update listen logic",
100
+ type: "object",
101
+ "x-component": "JSONEditor"
102
+ }
68
103
  }
69
104
  ]
70
105
  });
@@ -1 +1 @@
1
- export declare function afterCreate(model: any, options: any, ipAddressId: any): Promise<void>;
1
+ export declare function afterCreate(model: any, options: any, ipAddressId: number | null): Promise<void>;
@@ -1 +1 @@
1
- export declare function afterDestroy(model: any, options: any, ipAddressId: any): Promise<void>;
1
+ export declare function afterDestroy(model: any, options: any, ipAddressId: number | null): Promise<void>;
@@ -1 +1 @@
1
- export declare function afterUpdate(model: any, options: any, ipAddressId: any, auditConfig: any): Promise<void>;
1
+ export declare function afterUpdate(model: any, options: any, ipAddressId: number | null, auditConfig: any): Promise<void>;
@@ -30,31 +30,28 @@ __export(afterUpdate_exports, {
30
30
  });
31
31
  module.exports = __toCommonJS(afterUpdate_exports);
32
32
  async function afterUpdate(model, options, ipAddressId, auditConfig) {
33
- var _a, _b, _c, _d;
33
+ var _a, _b;
34
34
  const { collection, database } = model.constructor;
35
35
  const changedFields = model.changed();
36
36
  if (!changedFields) return;
37
37
  const listenLogic = auditConfig.get("updateListenLogic");
38
38
  let allowedFields = [];
39
- if ((_a = listenLogic == null ? void 0 : listenLogic.blacklist) == null ? void 0 : _a.length)
39
+ if (Array.isArray(listenLogic == null ? void 0 : listenLogic.blacklist))
40
40
  allowedFields = changedFields.filter((f) => !listenLogic.blacklist.includes(f));
41
- else if ((_b = listenLogic == null ? void 0 : listenLogic.whitelist) == null ? void 0 : _b.length)
41
+ else if (Array.isArray(listenLogic == null ? void 0 : listenLogic.whitelist))
42
42
  allowedFields = changedFields.filter((f) => listenLogic.whitelist.includes(f));
43
- else
44
- allowedFields = changedFields;
45
43
  if (allowedFields.length == 0) return;
46
44
  const changes = [];
47
45
  allowedFields.forEach((key) => {
48
46
  const field = collection.findField((field2) => {
49
47
  return field2.name === key || field2.options.field === key;
50
48
  });
51
- if (field && !field.options.hidden) {
49
+ if (field && !field.options.hidden)
52
50
  changes.push({
53
51
  fieldName: key,
54
52
  before: stringifyValue(model.previous(key)),
55
53
  after: stringifyValue(model.get(key))
56
54
  });
57
- }
58
55
  });
59
56
  const transaction = options.transaction;
60
57
  const auditLog = await database.getRepository("__auditLog").create({
@@ -63,7 +60,7 @@ async function afterUpdate(model, options, ipAddressId, auditConfig) {
63
60
  isUpdate: true,
64
61
  collection: collection.name,
65
62
  ipAddressId,
66
- createdBy: (_d = (_c = options == null ? void 0 : options.context) == null ? void 0 : _c.state) == null ? void 0 : _d.currentUser
63
+ createdBy: (_b = (_a = options == null ? void 0 : options.context) == null ? void 0 : _a.state) == null ? void 0 : _b.currentUser
67
64
  },
68
65
  transaction
69
66
  });
@@ -41,21 +41,19 @@ class PluginAuditLogServer extends import_server.Plugin {
41
41
  this.db.on("afterDestroy", (model, options) => this.afterWrite(model, options, "delete"));
42
42
  }
43
43
  async afterWrite(model, options, type) {
44
- var _a, _b, _c, _d, _e, _f;
44
+ var _a, _b, _c, _d, _e;
45
45
  const { collection } = model.constructor;
46
46
  if (!collection) return;
47
- console.log("filterTargetKey: ", collection.filterTargetKey);
48
- console.log("primaryKeyAttribute: ", (_a = collection.model) == null ? void 0 : _a.primaryKeyAttribute);
49
47
  const config = await this.db.getRepository("__auditConfig").findOne({
50
48
  filter: {
51
- collectionName: collection.name
49
+ collection: collection.name
52
50
  }
53
51
  });
54
52
  if (!config) return;
55
53
  if (type === "create" && config.get("skipCreate")) return;
56
54
  if (type === "delete" && config.get("skipDelete")) return;
57
- const ip = (_f = (_e = (_d = (_c = (_b = options.context) == null ? void 0 : _b.request) == null ? void 0 : _c.headers) == null ? void 0 : _d["x-forwarded-for"]) == null ? void 0 : _e.split(", ")) == null ? void 0 : _f[0];
58
- let ipRecord;
55
+ const ip = (_e = (_d = (_c = (_b = (_a = options.context) == null ? void 0 : _a.request) == null ? void 0 : _b.headers) == null ? void 0 : _c["x-forwarded-for"]) == null ? void 0 : _d.split(", ")) == null ? void 0 : _e[0];
56
+ let ipRecord = null;
59
57
  if (ip && !config.get("skipIP"))
60
58
  ipRecord = await this.db.getRepository("__ipAddress").firstOrCreate({
61
59
  filterKeys: ["ip"],
@@ -64,11 +62,11 @@ class PluginAuditLogServer extends import_server.Plugin {
64
62
  }
65
63
  });
66
64
  if (type === "create")
67
- await (0, import_afterCreate.afterCreate)(model, options, ipRecord.get("id"));
65
+ await (0, import_afterCreate.afterCreate)(model, options, ip ? ipRecord.get("id") : null);
68
66
  else if (type === "update")
69
- await (0, import_afterUpdate.afterUpdate)(model, options, ipRecord.get("id"), config);
67
+ await (0, import_afterUpdate.afterUpdate)(model, options, ip ? ipRecord.get("id") : null, config);
70
68
  else if (type === "delete")
71
- await (0, import_afterDestroy.afterDestroy)(model, options, ipRecord.get("id"));
69
+ await (0, import_afterDestroy.afterDestroy)(model, options, ip ? ipRecord.get("id") : null);
72
70
  }
73
71
  }
74
72
  var server_default = PluginAuditLogServer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bunnarin/plugin-audit-log",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "displayName": "Audit logs",
5
5
  "displayName.ru-RU": "Журнал аудита",
6
6
  "displayName.zh-CN": "审计日志",