@strapi/admin 4.4.0-alpha.0 → 4.4.0-beta.1

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.
Files changed (138) hide show
  1. package/admin/src/StrapiApp.js +12 -4
  2. package/admin/src/components/Providers/index.js +10 -14
  3. package/admin/src/content-manager/components/DynamicTable/CellContent/RelationSingle/index.js +1 -1
  4. package/admin/src/content-manager/components/FieldTypeIcon/index.js +1 -31
  5. package/admin/src/content-manager/components/Inputs/index.js +10 -30
  6. package/admin/src/content-manager/components/SelectMany/index.js +3 -0
  7. package/admin/src/content-manager/components/SelectOne/SingleValue.js +2 -2
  8. package/admin/src/content-manager/components/SelectOne/index.js +3 -0
  9. package/admin/src/content-manager/components/SelectWrapper/Option.js +2 -2
  10. package/admin/src/content-manager/components/SelectWrapper/index.js +6 -0
  11. package/admin/src/content-manager/pages/EditSettingsView/components/FormModal.js +2 -7
  12. package/admin/src/content-manager/pages/EditSettingsView/index.js +1 -2
  13. package/admin/src/content-manager/pages/EditView/index.js +84 -91
  14. package/admin/src/content-manager/pages/ListSettingsView/index.js +1 -1
  15. package/admin/src/contexts/ApiTokenPermissions/index.js +24 -0
  16. package/admin/src/core/apis/index.js +0 -1
  17. package/admin/src/hooks/index.js +1 -0
  18. package/admin/src/hooks/useRegenerate/index.js +34 -0
  19. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ActionBoundRoutes/index.js +56 -0
  20. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/getMethodColor.js +41 -0
  21. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/BoundRoute/index.js +72 -0
  22. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/CheckBoxWrapper.js +30 -0
  23. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/CollapsableContentType/index.js +150 -0
  24. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/ContenTypesSection/index.js +37 -0
  25. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Permissions/index.js +40 -0
  26. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/components/Regenerate/index.js +68 -0
  27. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/index.js +452 -180
  28. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/init.js +13 -0
  29. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/reducer.js +55 -0
  30. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/getDateOfExpiration.js +16 -0
  31. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/index.js +5 -0
  32. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/schema.js +2 -1
  33. package/admin/src/pages/SettingsPage/pages/ApiTokens/EditView/utils/transformPermissionsData.js +36 -0
  34. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/DefaultButton/index.js +63 -0
  35. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/DeleteButton/index.js +1 -0
  36. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/ReadButton/index.js +19 -0
  37. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/UpdateButton/index.js +3 -36
  38. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/DynamicTable/index.js +13 -11
  39. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/index.js +4 -3
  40. package/admin/src/pages/SettingsPage/pages/ApiTokens/ListView/utils/tableHeaders.js +8 -8
  41. package/admin/src/pages/SettingsPage/pages/ApiTokens/ProtectedEditView/index.js +1 -1
  42. package/admin/src/pages/SettingsPage/pages/Roles/ListPage/index.js +1 -1
  43. package/admin/src/pages/SettingsPage/pages/Users/ListPage/index.js +1 -1
  44. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/EventInput/index.js +10 -10
  45. package/admin/src/pages/SettingsPage/pages/Webhooks/ListView/index.js +1 -1
  46. package/admin/src/permissions/defaultPermissions.js +2 -6
  47. package/admin/src/translations/en.json +18 -0
  48. package/admin/src/translations/es.json +1 -1
  49. package/admin/src/translations/fr.json +33 -0
  50. package/build/1669.d1b29c28.chunk.js +1 -0
  51. package/build/{1856.d3da2fcd.chunk.js → 1856.47226450.chunk.js} +6 -6
  52. package/build/{2077.b25a0b57.chunk.js → 2077.61cebc93.chunk.js} +4 -4
  53. package/build/{2912.da8a70aa.chunk.js → 2912.a015078a.chunk.js} +10 -10
  54. package/build/4235.982b5799.chunk.js +30 -0
  55. package/build/{4715.3787be19.chunk.js → 4715.3f6cac0a.chunk.js} +30 -30
  56. package/build/{4800.d3ebc81d.chunk.js → 4800.d09f1225.chunk.js} +1 -1
  57. package/build/{4982.a4e36c9a.chunk.js → 4982.c6f88c5d.chunk.js} +8 -8
  58. package/build/611.a91aff91.chunk.js +158 -0
  59. package/build/7379.d246dd38.chunk.js +1 -0
  60. package/build/{7841.922b96eb.chunk.js → 7841.91f793dc.chunk.js} +9 -9
  61. package/build/{7866.22e3c9f8.chunk.js → 7866.c793a31d.chunk.js} +23 -23
  62. package/build/{8380.ab3939f3.chunk.js → 8380.8789ff76.chunk.js} +8 -8
  63. package/build/{8549.0e30f86d.chunk.js → 8549.133c4473.chunk.js} +5 -5
  64. package/build/{8773.4e36117f.chunk.js → 8773.eccaa5f3.chunk.js} +9 -9
  65. package/build/{9066.2847fdff.chunk.js → 9066.08049eb1.chunk.js} +4 -4
  66. package/build/{9166.280c7521.chunk.js → 9166.037339e0.chunk.js} +2 -2
  67. package/build/{9420.ee1ccff7.chunk.js → 9420.43a86e7c.chunk.js} +30 -30
  68. package/build/{Admin-authenticatedApp.aaa66872.chunk.js → Admin-authenticatedApp.3a31a087.chunk.js} +3 -3
  69. package/build/{Admin_homePage.118926e0.chunk.js → Admin_homePage.6d5e3236.chunk.js} +1 -1
  70. package/build/{Admin_marketplace.2d181ad7.chunk.js → Admin_marketplace.82c0570b.chunk.js} +1 -1
  71. package/build/{Admin_profilePage.8617313a.chunk.js → Admin_profilePage.83991a6c.chunk.js} +1 -1
  72. package/build/{Admin_settingsPage.e58753c8.chunk.js → Admin_settingsPage.fc9c607a.chunk.js} +16 -16
  73. package/build/admin-app.41b6472c.chunk.js +112 -0
  74. package/build/admin-edit-roles-page.4dd6bcb9.chunk.js +1 -0
  75. package/build/{admin-users.1d0aa7a0.chunk.js → admin-users.dccd5f4c.chunk.js} +2 -2
  76. package/build/api-tokens-create-page.29cc87b6.chunk.js +1 -0
  77. package/build/api-tokens-edit-page.c294a88f.chunk.js +1 -0
  78. package/build/api-tokens-list-page.bb36535f.chunk.js +16 -0
  79. package/build/content-manager.fb5ee865.chunk.js +1178 -0
  80. package/build/content-type-builder-list-view.8cc534e0.chunk.js +194 -0
  81. package/build/content-type-builder-translation-en-json.201bfb78.chunk.js +1 -0
  82. package/build/content-type-builder.42cecba9.chunk.js +142 -0
  83. package/build/{email-settings-page.818761d5.chunk.js → email-settings-page.64037147.chunk.js} +5 -5
  84. package/build/en-json.a9918c93.chunk.js +1 -0
  85. package/build/{es-json.bb1fc425.chunk.js → es-json.3a9c7c09.chunk.js} +1 -1
  86. package/build/fr-json.4ed1fc2c.chunk.js +1 -0
  87. package/build/{i18n-settings-page.bf1304b0.chunk.js → i18n-settings-page.0b73785d.chunk.js} +5 -5
  88. package/build/index.html +1 -1
  89. package/build/{main.7db3414f.js → main.cdfda31e.js} +1235 -1235
  90. package/build/{runtime~main.c1c5510b.js → runtime~main.fa8f8898.js} +1 -1
  91. package/build/sso-settings-page.9ceb0140.chunk.js +1 -0
  92. package/build/{upload-settings.5dfe0fe2.chunk.js → upload-settings.80ff0974.chunk.js} +7 -7
  93. package/build/upload-translation-ca-json.db8ed7ba.chunk.js +1 -0
  94. package/build/{users-advanced-settings-page.f11c8af4.chunk.js → users-advanced-settings-page.a02f4806.chunk.js} +5 -5
  95. package/build/{users-roles-settings-page.cafb4fe5.chunk.js → users-roles-settings-page.b33ec5e5.chunk.js} +1 -1
  96. package/build/{webhook-edit-page.9aba79b2.chunk.js → webhook-edit-page.9e46fc3f.chunk.js} +3 -3
  97. package/build/{webhook-list-page.912becb8.chunk.js → webhook-list-page.2775a683.chunk.js} +5 -5
  98. package/ee/admin/pages/SettingsPage/pages/Roles/ListPage/index.js +1 -1
  99. package/package.json +14 -13
  100. package/scripts/build.js +2 -4
  101. package/server/bootstrap.js +19 -1
  102. package/server/config/admin-actions.js +20 -0
  103. package/server/content-types/api-token-permission.js +36 -0
  104. package/server/content-types/api-token.js +25 -1
  105. package/server/content-types/index.js +1 -0
  106. package/server/controllers/api-token.js +24 -1
  107. package/server/controllers/content-api.js +15 -0
  108. package/server/controllers/index.js +1 -0
  109. package/server/routes/api-tokens.js +11 -0
  110. package/server/routes/content-api.js +20 -0
  111. package/server/routes/index.js +2 -0
  112. package/server/services/api-token.js +310 -29
  113. package/server/services/constants.js +10 -0
  114. package/server/services/permission/engine.js +36 -226
  115. package/server/services/permission/permissions-manager/query-builers.js +3 -2
  116. package/server/services/permission/queries.js +1 -1
  117. package/server/services/permission.js +4 -1
  118. package/server/strategies/admin.js +7 -1
  119. package/server/strategies/api-token.js +71 -11
  120. package/server/validation/api-tokens.js +12 -2
  121. package/server/validation/common-functions/check-fields-are-correctly-nested.js +1 -1
  122. package/admin/src/core/apis/CustomFields.js +0 -80
  123. package/build/1669.4ce92b2f.chunk.js +0 -1
  124. package/build/524.2437fb56.chunk.js +0 -644
  125. package/build/admin-app.1f9e13f8.chunk.js +0 -112
  126. package/build/admin-edit-roles-page.554ba3fa.chunk.js +0 -1
  127. package/build/api-tokens-create-page.b4a9987d.chunk.js +0 -1
  128. package/build/api-tokens-edit-page.6f5b4e26.chunk.js +0 -1
  129. package/build/api-tokens-list-page.06938769.chunk.js +0 -15
  130. package/build/content-manager.86f7594d.chunk.js +0 -1178
  131. package/build/content-type-builder-list-view.9b874fd4.chunk.js +0 -194
  132. package/build/content-type-builder-translation-en-json.f985c9c4.chunk.js +0 -1
  133. package/build/content-type-builder.47ab07ad.chunk.js +0 -145
  134. package/build/en-json.1bf20384.chunk.js +0 -1
  135. package/build/fr-json.a3cf2e0b.chunk.js +0 -1
  136. package/build/sso-settings-page.445184e0.chunk.js +0 -1
  137. package/build/upload-translation-ca-json.00dc1f33.chunk.js +0 -1
  138. package/server/services/permission/engine-hooks.js +0 -82
@@ -1,4 +1,4 @@
1
- (self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4121],{55470:(V,z,p)=>{"use strict";V.exports=p(17173)},17173:function(V,z,p){(function(i,w){V.exports=w(p(32735),p(19615))})(this,function(i,w){return function(o){var b={};function n(a){if(b[a])return b[a].exports;var r=b[a]={i:a,l:!1,exports:{}};return o[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=o,n.c=b,n.d=function(a,r,u){n.o(a,r)||Object.defineProperty(a,r,{enumerable:!0,get:u})},n.r=function(a){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},n.t=function(a,r){if(1&r&&(a=n(a)),8&r||4&r&&typeof a=="object"&&a&&a.__esModule)return a;var u=Object.create(null);if(n.r(u),Object.defineProperty(u,"default",{enumerable:!0,value:a}),2&r&&typeof a!="string")for(var l in a)n.d(u,l,function(f){return a[f]}.bind(null,l));return u},n.n=function(a){var r=a&&a.__esModule?function(){return a.default}:function(){return a};return n.d(r,"a",r),r},n.o=function(a,r){return Object.prototype.hasOwnProperty.call(a,r)},n.p="",n(n.s=121)}({0:function(o,b,n){o.exports=n(19)()},1:function(o,b){o.exports=i},10:function(o,b,n){var a=n(25),r=n(26),u=n(22),l=n(27);o.exports=function(f,c){return a(f)||r(f,c)||u(f,c)||l()},o.exports.default=o.exports,o.exports.__esModule=!0},121:function(o,b,n){"use strict";n.r(b),n.d(b,"Switch",function(){return B});var a,r,u=n(5),l=n.n(u),f=n(4),c=n.n(f),m=n(3),E=n.n(m),C=n(1),s=n.n(C),v=n(0),S=n.n(v),k=n(2),L=n.n(k),D=n(9),e=n(6),t=["label","onChange","onLabel","offLabel","selected","visibleLabels"],d=L.a.div(a||(a=E()([`
1
+ (self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4121],{55470:(V,z,p)=>{"use strict";V.exports=p(17173)},17173:function(V,z,p){(function(i,w){V.exports=w(p(32735),p(19615))})(this,function(i,w){return function(o){var b={};function n(a){if(b[a])return b[a].exports;var r=b[a]={i:a,l:!1,exports:{}};return o[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=o,n.c=b,n.d=function(a,r,u){n.o(a,r)||Object.defineProperty(a,r,{enumerable:!0,get:u})},n.r=function(a){typeof Symbol!="undefined"&&Symbol.toStringTag&&Object.defineProperty(a,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(a,"__esModule",{value:!0})},n.t=function(a,r){if(1&r&&(a=n(a)),8&r||4&r&&typeof a=="object"&&a&&a.__esModule)return a;var u=Object.create(null);if(n.r(u),Object.defineProperty(u,"default",{enumerable:!0,value:a}),2&r&&typeof a!="string")for(var l in a)n.d(u,l,function(f){return a[f]}.bind(null,l));return u},n.n=function(a){var r=a&&a.__esModule?function(){return a.default}:function(){return a};return n.d(r,"a",r),r},n.o=function(a,r){return Object.prototype.hasOwnProperty.call(a,r)},n.p="",n(n.s=121)}({0:function(o,b,n){o.exports=n(19)()},1:function(o,b){o.exports=i},10:function(o,b,n){var a=n(25),r=n(26),u=n(22),l=n(27);o.exports=function(f,c){return a(f)||r(f,c)||u(f,c)||l()},o.exports.default=o.exports,o.exports.__esModule=!0},121:function(o,b,n){"use strict";n.r(b),n.d(b,"Switch",function(){return B});var a,r,u=n(6),l=n.n(u),f=n(4),c=n.n(f),m=n(3),E=n.n(m),C=n(1),s=n.n(C),v=n(0),S=n.n(v),k=n(2),L=n.n(k),D=n(9),e=n(5),t=["label","onChange","onLabel","offLabel","selected","visibleLabels"],d=L.a.div(a||(a=E()([`
2
2
  background: `,`;
3
3
  border: none;
4
4
  border-radius: 16px;
@@ -40,7 +40,7 @@
40
40
  transform: translateX(1rem);
41
41
  }
42
42
  `])),d,function(O){return O.theme.colors.success500},d),B=s.a.forwardRef(function(O,_){var ee=O.label,ne=O.onChange,G=O.onLabel,$=O.offLabel,U=O.selected,Q=O.visibleLabels,te=c()(O,t);return s.a.createElement(j,l()({ref:_,role:"switch","aria-checked":U,"aria-label":ee,onClick:ne,visibleLabels:Q,type:"button"},te),s.a.createElement(D.Flex,null,s.a.createElement(d,null,s.a.createElement("span",null,G),s.a.createElement("span",null,$)),Q&&s.a.createElement(e.Box,{as:"span","aria-hidden":!0,paddingLeft:2,color:U?"success600":"danger600"},U?G:$)))});B.defaultProps={onLabel:"On",offLabel:"Off",visibleLabels:!1},B.propTypes={label:S.a.string.isRequired,offLabel:S.a.string,onChange:S.a.func.isRequired,onLabel:S.a.string,selected:S.a.bool.isRequired,visibleLabels:S.a.bool},B.displayName="Switch"},13:function(o,b){function n(a){return typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?(o.exports=n=function(r){return typeof r},o.exports.default=o.exports,o.exports.__esModule=!0):(o.exports=n=function(r){return r&&typeof Symbol=="function"&&r.constructor===Symbol&&r!==Symbol.prototype?"symbol":typeof r},o.exports.default=o.exports,o.exports.__esModule=!0),n(a)}o.exports=n,o.exports.default=o.exports,o.exports.__esModule=!0},19:function(o,b,n){"use strict";var a=n(20);function r(){}function u(){}u.resetWarningCache=r,o.exports=function(){function l(m,E,C,s,v,S){if(S!==a){var k=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw k.name="Invariant Violation",k}}function f(){return l}l.isRequired=l;var c={array:l,bool:l,func:l,number:l,object:l,string:l,symbol:l,any:l,arrayOf:f,element:l,elementType:l,instanceOf:f,node:l,objectOf:f,oneOf:f,oneOfType:f,shape:f,exact:f,checkPropTypes:u,resetWarningCache:r};return c.PropTypes=c,c}},2:function(o,b){o.exports=w},20:function(o,b,n){"use strict";o.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},21:function(o,b){o.exports=function(n,a){(a==null||a>n.length)&&(a=n.length);for(var r=0,u=new Array(a);r<a;r++)u[r]=n[r];return u},o.exports.default=o.exports,o.exports.__esModule=!0},22:function(o,b,n){var a=n(21);o.exports=function(r,u){if(r){if(typeof r=="string")return a(r,u);var l=Object.prototype.toString.call(r).slice(8,-1);return l==="Object"&&r.constructor&&(l=r.constructor.name),l==="Map"||l==="Set"?Array.from(r):l==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(l)?a(r,u):void 0}},o.exports.default=o.exports,o.exports.__esModule=!0},24:function(o,b){o.exports=function(n,a){if(n==null)return{};var r,u,l={},f=Object.keys(n);for(u=0;u<f.length;u++)r=f[u],a.indexOf(r)>=0||(l[r]=n[r]);return l},o.exports.default=o.exports,o.exports.__esModule=!0},25:function(o,b){o.exports=function(n){if(Array.isArray(n))return n},o.exports.default=o.exports,o.exports.__esModule=!0},26:function(o,b){o.exports=function(n,a){var r=n==null?null:typeof Symbol!="undefined"&&n[Symbol.iterator]||n["@@iterator"];if(r!=null){var u,l,f=[],c=!0,m=!1;try{for(r=r.call(n);!(c=(u=r.next()).done)&&(f.push(u.value),!a||f.length!==a);c=!0);}catch(E){m=!0,l=E}finally{try{c||r.return==null||r.return()}finally{if(m)throw l}}return f}},o.exports.default=o.exports,o.exports.__esModule=!0},27:function(o,b){o.exports=function(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
43
- In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)},o.exports.default=o.exports,o.exports.__esModule=!0},3:function(o,b){o.exports=function(n,a){return a||(a=n.slice(0)),Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(a)}}))},o.exports.default=o.exports,o.exports.__esModule=!0},4:function(o,b,n){var a=n(24);o.exports=function(r,u){if(r==null)return{};var l,f,c=a(r,u);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(r);for(f=0;f<m.length;f++)l=m[f],u.indexOf(l)>=0||Object.prototype.propertyIsEnumerable.call(r,l)&&(c[l]=r[l])}return c},o.exports.default=o.exports,o.exports.__esModule=!0},5:function(o,b){function n(){return o.exports=n=Object.assign||function(a){for(var r=1;r<arguments.length;r++){var u=arguments[r];for(var l in u)Object.prototype.hasOwnProperty.call(u,l)&&(a[l]=u[l])}return a},o.exports.default=o.exports,o.exports.__esModule=!0,n.apply(this,arguments)}o.exports=n,o.exports.default=o.exports,o.exports.__esModule=!0},6:function(o,b,n){"use strict";n.r(b),n.d(b,"Box",function(){return D});var a,r=n(3),u=n.n(r),l=n(2),f=n.n(l),c=n(7),m=n(1),E=n.n(m),C=n(0),s=n.n(C),v=function(e){return E.a.createElement("div",e)},S={background:void 0,borderColor:void 0,color:void 0,hiddenS:!1,hiddenXS:!1,padding:void 0,paddingTop:void 0,paddingRight:void 0,paddingBottom:void 0,paddingLeft:void 0,hasRadius:!1,shadow:void 0,children:null,shrink:void 0,grow:void 0,basis:void 0,flex:void 0,_hover:function(){}},k={_hover:s.a.func,background:s.a.string,basis:s.a.oneOfType([s.a.string,s.a.string]),borderColor:s.a.string,children:s.a.oneOfType([s.a.node,s.a.string]),color:s.a.string,flex:s.a.oneOfType([s.a.string,s.a.string]),grow:s.a.oneOfType([s.a.string,s.a.string]),hasRadius:s.a.bool,hiddenS:s.a.bool,hiddenXS:s.a.bool,padding:s.a.oneOfType([s.a.number,s.a.arrayOf(s.a.number)]),paddingBottom:s.a.oneOfType([s.a.number,s.a.arrayOf(s.a.number)]),paddingLeft:s.a.oneOfType([s.a.number,s.a.arrayOf(s.a.number)]),paddingRight:s.a.oneOfType([s.a.number,s.a.arrayOf(s.a.number)]),paddingTop:s.a.oneOfType([s.a.number,s.a.arrayOf(s.a.number)]),shadow:s.a.string,shrink:s.a.oneOfType([s.a.string,s.a.string])};v.defaultProps=S,v.propTypes=k;var L={color:!0},D=f.a.div.withConfig({shouldForwardProp:function(e,t){return!L[e]&&t(e)}})(a||(a=u()([`
43
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)},o.exports.default=o.exports,o.exports.__esModule=!0},3:function(o,b){o.exports=function(n,a){return a||(a=n.slice(0)),Object.freeze(Object.defineProperties(n,{raw:{value:Object.freeze(a)}}))},o.exports.default=o.exports,o.exports.__esModule=!0},4:function(o,b,n){var a=n(24);o.exports=function(r,u){if(r==null)return{};var l,f,c=a(r,u);if(Object.getOwnPropertySymbols){var m=Object.getOwnPropertySymbols(r);for(f=0;f<m.length;f++)l=m[f],u.indexOf(l)>=0||Object.prototype.propertyIsEnumerable.call(r,l)&&(c[l]=r[l])}return c},o.exports.default=o.exports,o.exports.__esModule=!0},5:function(o,b,n){"use strict";n.r(b),n.d(b,"Box",function(){return D});var a,r=n(3),u=n.n(r),l=n(2),f=n.n(l),c=n(7),m=n(1),E=n.n(m),C=n(0),s=n.n(C),v=function(e){return E.a.createElement("div",e)},S={background:void 0,borderColor:void 0,color:void 0,hiddenS:!1,hiddenXS:!1,padding:void 0,paddingTop:void 0,paddingRight:void 0,paddingBottom:void 0,paddingLeft:void 0,hasRadius:!1,shadow:void 0,children:null,shrink:void 0,grow:void 0,basis:void 0,flex:void 0,_hover:function(){}},k={_hover:s.a.func,background:s.a.string,basis:s.a.oneOfType([s.a.string,s.a.string]),borderColor:s.a.string,children:s.a.oneOfType([s.a.node,s.a.string]),color:s.a.string,flex:s.a.oneOfType([s.a.string,s.a.string]),grow:s.a.oneOfType([s.a.string,s.a.string]),hasRadius:s.a.bool,hiddenS:s.a.bool,hiddenXS:s.a.bool,padding:s.a.oneOfType([s.a.number,s.a.arrayOf(s.a.number)]),paddingBottom:s.a.oneOfType([s.a.number,s.a.arrayOf(s.a.number)]),paddingLeft:s.a.oneOfType([s.a.number,s.a.arrayOf(s.a.number)]),paddingRight:s.a.oneOfType([s.a.number,s.a.arrayOf(s.a.number)]),paddingTop:s.a.oneOfType([s.a.number,s.a.arrayOf(s.a.number)]),shadow:s.a.string,shrink:s.a.oneOfType([s.a.string,s.a.string])};v.defaultProps=S,v.propTypes=k;var L={color:!0},D=f.a.div.withConfig({shouldForwardProp:function(e,t){return!L[e]&&t(e)}})(a||(a=u()([`
44
44
  // Font
45
45
  font-size: `,`;
46
46
 
@@ -119,11 +119,11 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
119
119
 
120
120
  // Cursor
121
121
  cursor: `,`;
122
- `])),function(e){var t=e.fontSize;return e.theme.fontSizes[t]||t},function(e){var t=e.theme,d=e.background;return t.colors[d]},function(e){var t=e.theme,d=e.color;return t.colors[d]},function(e){var t=e.theme,d=e.padding;return Object(c.a)("padding",d,t)},function(e){var t=e.theme,d=e.paddingTop;return Object(c.a)("padding-top",d,t)},function(e){var t=e.theme,d=e.paddingRight;return Object(c.a)("padding-right",d,t)},function(e){var t=e.theme,d=e.paddingBottom;return Object(c.a)("padding-bottom",d,t)},function(e){var t=e.theme,d=e.paddingLeft;return Object(c.a)("padding-left",d,t)},function(e){var t=e.theme,d=e.marginLeft;return Object(c.a)("margin-left",d,t)},function(e){var t=e.theme,d=e.marginRight;return Object(c.a)("margin-right",d,t)},function(e){var t=e.theme,d=e.marginTop;return Object(c.a)("margin-top",d,t)},function(e){var t=e.theme,d=e.marginBottom;return Object(c.a)("margin-bottom",d,t)},function(e){var t=e.theme;return e.hiddenS?"".concat(t.mediaQueries.tablet," { display: none; }"):void 0},function(e){var t=e.theme;return e.hiddenXS?"".concat(t.mediaQueries.mobile," { display: none; }"):void 0},function(e){var t=e.theme,d=e.hasRadius,j=e.borderRadius;return d?t.borderRadius:j},function(e){return e.borderStyle},function(e){return e.borderWidth},function(e){var t=e.borderColor;return e.theme.colors[t]},function(e){var t=e.theme,d=e.borderColor,j=e.borderStyle,B=e.borderWidth;if(d&&!j&&!B)return"1px solid ".concat(t.colors[d])},function(e){var t=e.theme,d=e.shadow;return t.shadows[d]},function(e){return e.pointerEvents},function(e){var t=e._hover,d=e.theme;return t?t(d):void 0},function(e){return e.display},function(e){return e.position},function(e){var t=e.left;return e.theme.spaces[t]||t},function(e){var t=e.right;return e.theme.spaces[t]||t},function(e){var t=e.top;return e.theme.spaces[t]||t},function(e){var t=e.bottom;return e.theme.spaces[t]||t},function(e){return e.zIndex},function(e){return e.overflow},function(e){return e.cursor},function(e){var t=e.width;return e.theme.spaces[t]||t},function(e){var t=e.maxWidth;return e.theme.spaces[t]||t},function(e){var t=e.minWidth;return e.theme.spaces[t]||t},function(e){var t=e.height;return e.theme.spaces[t]||t},function(e){var t=e.maxHeight;return e.theme.spaces[t]||t},function(e){var t=e.minHeight;return e.theme.spaces[t]||t},function(e){return e.transition},function(e){return e.transform},function(e){return e.animation},function(e){return e.shrink},function(e){return e.grow},function(e){return e.basis},function(e){return e.flex},function(e){return e.textAlign},function(e){return e.textTransform},function(e){return e.lineHeight},function(e){return e.cursor});D.defaultProps=S,D.propTypes=k},7:function(o,b,n){"use strict";var a=n(10),r=n.n(a),u=n(13),l=n.n(u);b.a=function(f,c,m){var E=c;if(Array.isArray(c)||l()(c)!=="object"||(E=[c==null?void 0:c.desktop,c==null?void 0:c.tablet,c==null?void 0:c.mobile]),E!==void 0){if(Array.isArray(E)){var C=E,s=r()(C,3),v=s[0],S=s[1],k=s[2],L="".concat(f,": ").concat(m.spaces[v],";");return S!==void 0&&(L+="".concat(m.mediaQueries.tablet,`{
122
+ `])),function(e){var t=e.fontSize;return e.theme.fontSizes[t]||t},function(e){var t=e.theme,d=e.background;return t.colors[d]},function(e){var t=e.theme,d=e.color;return t.colors[d]},function(e){var t=e.theme,d=e.padding;return Object(c.a)("padding",d,t)},function(e){var t=e.theme,d=e.paddingTop;return Object(c.a)("padding-top",d,t)},function(e){var t=e.theme,d=e.paddingRight;return Object(c.a)("padding-right",d,t)},function(e){var t=e.theme,d=e.paddingBottom;return Object(c.a)("padding-bottom",d,t)},function(e){var t=e.theme,d=e.paddingLeft;return Object(c.a)("padding-left",d,t)},function(e){var t=e.theme,d=e.marginLeft;return Object(c.a)("margin-left",d,t)},function(e){var t=e.theme,d=e.marginRight;return Object(c.a)("margin-right",d,t)},function(e){var t=e.theme,d=e.marginTop;return Object(c.a)("margin-top",d,t)},function(e){var t=e.theme,d=e.marginBottom;return Object(c.a)("margin-bottom",d,t)},function(e){var t=e.theme;return e.hiddenS?"".concat(t.mediaQueries.tablet," { display: none; }"):void 0},function(e){var t=e.theme;return e.hiddenXS?"".concat(t.mediaQueries.mobile," { display: none; }"):void 0},function(e){var t=e.theme,d=e.hasRadius,j=e.borderRadius;return d?t.borderRadius:j},function(e){return e.borderStyle},function(e){return e.borderWidth},function(e){var t=e.borderColor;return e.theme.colors[t]},function(e){var t=e.theme,d=e.borderColor,j=e.borderStyle,B=e.borderWidth;if(d&&!j&&!B)return"1px solid ".concat(t.colors[d])},function(e){var t=e.theme,d=e.shadow;return t.shadows[d]},function(e){return e.pointerEvents},function(e){var t=e._hover,d=e.theme;return t?t(d):void 0},function(e){return e.display},function(e){return e.position},function(e){var t=e.left;return e.theme.spaces[t]||t},function(e){var t=e.right;return e.theme.spaces[t]||t},function(e){var t=e.top;return e.theme.spaces[t]||t},function(e){var t=e.bottom;return e.theme.spaces[t]||t},function(e){return e.zIndex},function(e){return e.overflow},function(e){return e.cursor},function(e){var t=e.width;return e.theme.spaces[t]||t},function(e){var t=e.maxWidth;return e.theme.spaces[t]||t},function(e){var t=e.minWidth;return e.theme.spaces[t]||t},function(e){var t=e.height;return e.theme.spaces[t]||t},function(e){var t=e.maxHeight;return e.theme.spaces[t]||t},function(e){var t=e.minHeight;return e.theme.spaces[t]||t},function(e){return e.transition},function(e){return e.transform},function(e){return e.animation},function(e){return e.shrink},function(e){return e.grow},function(e){return e.basis},function(e){return e.flex},function(e){return e.textAlign},function(e){return e.textTransform},function(e){return e.lineHeight},function(e){return e.cursor});D.defaultProps=S,D.propTypes=k},6:function(o,b){function n(){return o.exports=n=Object.assign||function(a){for(var r=1;r<arguments.length;r++){var u=arguments[r];for(var l in u)Object.prototype.hasOwnProperty.call(u,l)&&(a[l]=u[l])}return a},o.exports.default=o.exports,o.exports.__esModule=!0,n.apply(this,arguments)}o.exports=n,o.exports.default=o.exports,o.exports.__esModule=!0},7:function(o,b,n){"use strict";var a=n(10),r=n.n(a),u=n(13),l=n.n(u);b.a=function(f,c,m){var E=c;if(Array.isArray(c)||l()(c)!=="object"||(E=[c==null?void 0:c.desktop,c==null?void 0:c.tablet,c==null?void 0:c.mobile]),E!==void 0){if(Array.isArray(E)){var C=E,s=r()(C,3),v=s[0],S=s[1],k=s[2],L="".concat(f,": ").concat(m.spaces[v],";");return S!==void 0&&(L+="".concat(m.mediaQueries.tablet,`{
123
123
  `).concat(f,": ").concat(m.spaces[S],`;
124
124
  }`)),k!==void 0&&(L+="".concat(m.mediaQueries.mobile,`{
125
125
  `).concat(f,": ").concat(m.spaces[k],`;
126
- }`)),L}var D=m.spaces[E]||E;return"".concat(f,": ").concat(D,";")}}},9:function(o,b,n){"use strict";n.r(b),n.d(b,"Flex",function(){return e});var a,r=n(3),u=n.n(r),l=n(2),f=n.n(l),c=n(6),m=n(7),E=n(1),C=n.n(E),s=n(0),v=n.n(s),S=function(t){return C.a.createElement("div",t)},k={alignItems:"center",basis:void 0,direction:"row",gap:void 0,inline:!1,justifyContent:void 0,reverse:!1,wrap:void 0},L={alignItems:v.a.string,basis:v.a.oneOfType([v.a.string,v.a.number]),direction:v.a.string,gap:v.a.oneOfType([v.a.shape({desktop:v.a.number,mobile:v.a.number,tablet:v.a.number}),v.a.number,v.a.arrayOf(v.a.number),v.a.string]),inline:v.a.bool,justifyContent:v.a.string,reverse:v.a.bool,shrink:v.a.number,wrap:v.a.string};S.defaultProps=k,S.propTypes=L;var D={direction:!0},e=f()(c.Box).withConfig({shouldForwardProp:function(t,d){return!D[t]&&d(t)}})(a||(a=u()([`
126
+ }`)),L}var D=m.spaces[E]||E;return"".concat(f,": ").concat(D,";")}}},9:function(o,b,n){"use strict";n.r(b),n.d(b,"Flex",function(){return e});var a,r=n(3),u=n.n(r),l=n(2),f=n.n(l),c=n(5),m=n(7),E=n(1),C=n.n(E),s=n(0),v=n.n(s),S=function(t){return C.a.createElement("div",t)},k={alignItems:"center",basis:void 0,direction:"row",gap:void 0,inline:!1,justifyContent:void 0,reverse:!1,wrap:void 0},L={alignItems:v.a.string,basis:v.a.oneOfType([v.a.string,v.a.number]),direction:v.a.string,gap:v.a.oneOfType([v.a.shape({desktop:v.a.number,mobile:v.a.number,tablet:v.a.number}),v.a.number,v.a.arrayOf(v.a.number),v.a.string]),inline:v.a.bool,justifyContent:v.a.string,reverse:v.a.bool,shrink:v.a.number,wrap:v.a.string};S.defaultProps=k,S.propTypes=L;var D={direction:!0},e=f()(c.Box).withConfig({shouldForwardProp:function(t,d){return!D[t]&&d(t)}})(a||(a=u()([`
127
127
  align-items: `,`;
128
128
  display: `,`;
129
129
  flex-direction: `,`;
@@ -131,4 +131,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
131
131
  flex-wrap: `,`;
132
132
  `,`};
133
133
  justify-content: `,`;
134
- `])),function(t){return t.alignItems},function(t){return t.inline?"inline-flex":"flex"},function(t){return t.direction},function(t){return t.shrink},function(t){return t.wrap},function(t){var d=t.gap,j=t.theme;return Object(m.a)("gap",d,j)},function(t){return t.justifyContent});e.defaultProps=k,e.propTypes=L}})})},70791:(V,z,p)=>{"use strict";p.r(z),p.d(z,{default:()=>Ee});var i=p(32735),w=p(88425),o=p(83983),b=p(5141),n=p(5636),a=p(11856),r=p(64354),u=p(19192),l=p(90662),f=p(20763),c=p(35980),m=p(53214),E=p(95602),C=p(44526),s=p(28004),v=p(55470),S=p(16540),k=p(29270),L=p(9808),D=p(59290),e=p.n(D),t=p(95717),d=p.n(t),j=p(76470),B=p.n(j),O=p(97042),_=p.n(O),ee=p(49415),ne=p(3040),G=p.n(ne);const $={webhooks:[],webhooksToDelete:[],webhookToDelete:null,loadingWebhooks:!0},Q=(x,y)=>(0,ee.default)(x,g=>{switch(y.type){case"GET_DATA_SUCCEEDED":{g.webhooks=y.data,g.loadingWebhooks=!1;break}case"TOGGLE_LOADING":{g.loadingWebhooks=!x.loadingWebhooks;break}case"SET_WEBHOOK_ENABLED":{G()(g,["webhooks",...y.keys],y.value);break}case"SET_WEBHOOK_TO_DELETE":{g.webhookToDelete=y.id;break}case"SET_WEBHOOKS_TO_DELETE":{y.value?g.webhooksToDelete.push(y.id):g.webhooksToDelete=x.webhooksToDelete.filter(P=>P!==y.id);break}case"SET_ALL_WEBHOOKS_TO_DELETE":{x.webhooksToDelete.length===0?g.webhooksToDelete=x.webhooks.map(P=>P.id):g.webhooksToDelete=[];break}case"WEBHOOKS_DELETED":{g.webhooks=x.webhooks.filter(P=>!x.webhooksToDelete.includes(P.id)),g.webhooksToDelete=[];break}case"WEBHOOK_DELETED":{g.webhooks=x.webhooks.filter((P,H)=>H!==y.index),g.webhookToDelete=null;break}default:return g}});var te=p(98399),pe=Object.defineProperty,he=Object.defineProperties,me=Object.getOwnPropertyDescriptors,ae=Object.getOwnPropertySymbols,be=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable,ie=(x,y,g)=>y in x?pe(x,y,{enumerable:!0,configurable:!0,writable:!0,value:g}):x[y]=g,F=(x,y)=>{for(var g in y||(y={}))be.call(y,g)&&ie(x,g,y[g]);if(ae)for(var g of ae(y))ge.call(y,g)&&ie(x,g,y[g]);return x},ve=(x,y)=>he(x,me(y)),X=(x,y,g)=>new Promise((P,H)=>{var N=A=>{try{T(g.next(A))}catch(R){H(R)}},W=A=>{try{T(g.throw(A))}catch(R){H(R)}},T=A=>A.done?P(A.value):Promise.resolve(A.value).then(N,W);T((g=g.apply(x,y)).next())});const ye=()=>{const{isLoading:x,allowedActions:{canCreate:y,canRead:g,canUpdate:P,canDelete:H}}=(0,w.useRBAC)(o.Z.settings.webhooks),N=(0,w.useNotification)(),W=(0,i.useRef)(!0),{formatMessage:T}=(0,n.useIntl)(),[A,R]=(0,i.useState)(!1),[{webhooks:Z,webhooksToDelete:Y,webhookToDelete:oe,loadingWebhooks:re},I]=(0,i.useReducer)(Q,$),{notifyStatus:xe}=(0,k.useNotifyAT)();(0,w.useFocusWhenNavigate)();const{push:Te}=(0,b.useHistory)(),{pathname:se}=(0,b.useLocation)(),J=Z.length,K=Y.length,le=h=>Z.findIndex(M=>M.id===h);(0,i.useEffect)(()=>(W.current=!0,()=>{W.current=!1}),[]),(0,i.useEffect)(()=>{g&&Oe()},[g]);const Oe=()=>X(void 0,null,function*(){try{const{data:h}=yield(0,w.request)("/admin/webhooks",{method:"GET"});W.current&&(I({type:"GET_DATA_SUCCEEDED",data:h}),xe("webhooks have been loaded"))}catch(h){te.log(h),W.current&&(h.code!==20&&N({type:"warning",message:{id:"notification.error"}}),I({type:"TOGGLE_LOADING"}))}}),we=()=>{R(h=>!h)},Se=()=>{oe?ke():Le()},ke=()=>X(void 0,null,function*(){try{yield(0,w.request)(`/admin/webhooks/${oe}`,{method:"DELETE"}),I({type:"WEBHOOK_DELETED",index:le(oe)})}catch(h){h.code!==20&&N({type:"warning",message:{id:"notification.error"}})}R(!1)}),Le=()=>X(void 0,null,function*(){const h={ids:Y};try{yield(0,w.request)("/admin/webhooks/batch-delete",{method:"POST",body:h}),W.current&&I({type:"WEBHOOKS_DELETED"})}catch(M){W.current&&M.code!==20&&N({type:"warning",message:{id:"notification.error"}})}R(!1)}),ue=h=>{R(!0),h!=="all"&&I({type:"SET_WEBHOOK_TO_DELETE",id:h})},Ce=(h,M)=>X(void 0,null,function*(){const ce=le(M),Me=Z[ce],de=[ce,"isEnabled"],fe=ve(F({},Me),{isEnabled:h});delete fe.id;try{I({type:"SET_WEBHOOK_ENABLED",keys:de,value:h}),yield(0,w.request)(`/admin/webhooks/${M}`,{method:"PUT",body:fe})}catch(je){W.current&&(I({type:"SET_WEBHOOK_ENABLED",keys:de,value:!h}),je.code!==20&&N({type:"warning",message:{id:"notification.error"}}))}}),De=()=>{I({type:"SET_ALL_WEBHOOKS_TO_DELETE"})},Pe=(h,M)=>{I({type:"SET_WEBHOOKS_TO_DELETE",value:h,id:M})},q=h=>{Te(`${se}/${h}`)};return i.createElement(a.Layout,null,i.createElement(w.SettingsPageTitle,{name:"Webhooks"}),i.createElement(S.Main,{"aria-busy":x||re},i.createElement(a.HeaderLayout,{title:T({id:"Settings.webhooks.title",defaultMessage:"Webhooks"}),subtitle:T({id:"Settings.webhooks.list.description",defaultMessage:"Get POST changes notifications"}),primaryAction:y&&!re&&i.createElement(w.LinkButton,{startIcon:i.createElement(e(),null),variant:"default",to:`${se}/create`,size:"L"},T({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))}),K>0&&H&&i.createElement(a.ActionLayout,{startActions:i.createElement(i.Fragment,null,i.createElement(E.Typography,{variant:"epsilon",textColor:"neutral600"},T({id:"Settings.webhooks.to.delete",defaultMessage:"{webhooksToDeleteLength, plural, one {# asset} other {# assets}} selected"},{webhooksToDeleteLength:K})),i.createElement(C.Button,{onClick:()=>ue("all"),startIcon:i.createElement(B(),null),size:"L",variant:"danger-light"},T({id:"global.delete",defaultMessage:"Delete"})))}),i.createElement(a.ContentLayout,null,x||re?i.createElement(L.Box,{background:"neutral0",padding:6,shadow:"filterShadow",hasRadius:!0},i.createElement(w.LoadingIndicatorPage,null)):i.createElement(i.Fragment,null,J>0?i.createElement(m.Table,{colCount:5,rowCount:J+1,footer:i.createElement(m.TFooter,{onClick:()=>y?q("create"):{},icon:i.createElement(e(),null)},T({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))},i.createElement(m.Thead,null,i.createElement(m.Tr,null,i.createElement(m.Th,null,i.createElement(c.BaseCheckbox,{"aria-label":T({id:"global.select-all-entries",defaultMessage:"Select all entries"}),indeterminate:K>0&&K<J,value:K===J,onValueChange:De})),i.createElement(m.Th,{width:"20%"},i.createElement(E.Typography,{variant:"sigma",textColor:"neutral600"},T({id:"global.name",defaultMessage:"Name"}))),i.createElement(m.Th,{width:"60%"},i.createElement(E.Typography,{variant:"sigma",textColor:"neutral600"},T({id:"Settings.webhooks.form.url",defaultMessage:"URL"}))),i.createElement(m.Th,{width:"20%"},i.createElement(E.Typography,{variant:"sigma",textColor:"neutral600"},T({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"}))),i.createElement(m.Th,null,i.createElement(s.VisuallyHidden,null,T({id:"Settings.webhooks.list.th.actions",defaultMessage:"Actions"}))))),i.createElement(m.Tbody,null,Z.map(h=>i.createElement(m.Tr,F({key:h.id},(0,w.onRowClick)({fn:()=>q(h.id),condition:P})),i.createElement(m.Td,F({},w.stopPropagation),i.createElement(c.BaseCheckbox,{"aria-label":`${T({id:"global.select",defaultMessage:"Select"})} ${h.name}`,value:Y==null?void 0:Y.includes(h.id),onValueChange:M=>Pe(M,h.id),id:"select",name:"select"})),i.createElement(m.Td,null,i.createElement(E.Typography,{fontWeight:"semiBold",textColor:"neutral800"},h.name)),i.createElement(m.Td,null,i.createElement(E.Typography,{textColor:"neutral800"},h.url)),i.createElement(m.Td,null,i.createElement(u.Flex,F({},w.stopPropagation),i.createElement(v.Switch,{onLabel:T({id:"global.enabled",defaultMessage:"Enabled"}),offLabel:T({id:"global.disabled",defaultMessage:"Disabled"}),label:`${h.name} ${T({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"})}`,selected:h.isEnabled,onChange:()=>Ce(!h.isEnabled,h.id),visibleLabels:!0}))),i.createElement(m.Td,null,i.createElement(l.Stack,F({horizontal:!0,spacing:1},w.stopPropagation),P&&i.createElement(f.IconButton,{onClick:()=>{q(h.id)},label:T({id:"Settings.webhooks.events.update",defaultMessage:"Update"}),icon:i.createElement(d(),null),noBorder:!0}),H&&i.createElement(f.IconButton,{onClick:()=>ue(h.id),label:T({id:"global.delete",defaultMessage:"Delete"}),icon:i.createElement(B(),null),noBorder:!0,id:`delete-${h.id}`}))))))):i.createElement(r.EmptyStateLayout,{icon:i.createElement(_(),{width:"160px"}),content:T({id:"Settings.webhooks.list.empty.description",defaultMessage:"No webhooks found"}),action:i.createElement(C.Button,{variant:"secondary",startIcon:i.createElement(e(),null),onClick:()=>y?q("create"):{}},T({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))})))),i.createElement(w.ConfirmDialog,{isOpen:A,onToggleDialog:we,onConfirm:Se}))},Ee=()=>i.createElement(w.CheckPagePermissions,{permissions:o.Z.settings.webhooks.main},i.createElement(ye,null))}}]);
134
+ `])),function(t){return t.alignItems},function(t){return t.inline?"inline-flex":"flex"},function(t){return t.direction},function(t){return t.shrink},function(t){return t.wrap},function(t){var d=t.gap,j=t.theme;return Object(m.a)("gap",d,j)},function(t){return t.justifyContent});e.defaultProps=k,e.propTypes=L}})})},70791:(V,z,p)=>{"use strict";p.r(z),p.d(z,{default:()=>Ee});var i=p(32735),w=p(88425),o=p(83983),b=p(5141),n=p(5636),a=p(11856),r=p(64354),u=p(19192),l=p(90662),f=p(20763),c=p(35980),m=p(53214),E=p(95602),C=p(44526),s=p(28004),v=p(55470),S=p(16540),k=p(29270),L=p(9808),D=p(59290),e=p.n(D),t=p(95717),d=p.n(t),j=p(76470),B=p.n(j),O=p(97042),_=p.n(O),ee=p(49415),ne=p(3040),G=p.n(ne);const $={webhooks:[],webhooksToDelete:[],webhookToDelete:null,loadingWebhooks:!0},Q=(x,y)=>(0,ee.default)(x,g=>{switch(y.type){case"GET_DATA_SUCCEEDED":{g.webhooks=y.data,g.loadingWebhooks=!1;break}case"TOGGLE_LOADING":{g.loadingWebhooks=!x.loadingWebhooks;break}case"SET_WEBHOOK_ENABLED":{G()(g,["webhooks",...y.keys],y.value);break}case"SET_WEBHOOK_TO_DELETE":{g.webhookToDelete=y.id;break}case"SET_WEBHOOKS_TO_DELETE":{y.value?g.webhooksToDelete.push(y.id):g.webhooksToDelete=x.webhooksToDelete.filter(P=>P!==y.id);break}case"SET_ALL_WEBHOOKS_TO_DELETE":{x.webhooksToDelete.length===0?g.webhooksToDelete=x.webhooks.map(P=>P.id):g.webhooksToDelete=[];break}case"WEBHOOKS_DELETED":{g.webhooks=x.webhooks.filter(P=>!x.webhooksToDelete.includes(P.id)),g.webhooksToDelete=[];break}case"WEBHOOK_DELETED":{g.webhooks=x.webhooks.filter((P,H)=>H!==y.index),g.webhookToDelete=null;break}default:return g}});var te=p(98399),pe=Object.defineProperty,he=Object.defineProperties,me=Object.getOwnPropertyDescriptors,ae=Object.getOwnPropertySymbols,be=Object.prototype.hasOwnProperty,ge=Object.prototype.propertyIsEnumerable,ie=(x,y,g)=>y in x?pe(x,y,{enumerable:!0,configurable:!0,writable:!0,value:g}):x[y]=g,F=(x,y)=>{for(var g in y||(y={}))be.call(y,g)&&ie(x,g,y[g]);if(ae)for(var g of ae(y))ge.call(y,g)&&ie(x,g,y[g]);return x},ve=(x,y)=>he(x,me(y)),X=(x,y,g)=>new Promise((P,H)=>{var N=A=>{try{T(g.next(A))}catch(R){H(R)}},W=A=>{try{T(g.throw(A))}catch(R){H(R)}},T=A=>A.done?P(A.value):Promise.resolve(A.value).then(N,W);T((g=g.apply(x,y)).next())});const ye=()=>{const{isLoading:x,allowedActions:{canCreate:y,canRead:g,canUpdate:P,canDelete:H}}=(0,w.useRBAC)(o.Z.settings.webhooks),N=(0,w.useNotification)(),W=(0,i.useRef)(!0),{formatMessage:T}=(0,n.useIntl)(),[A,R]=(0,i.useState)(!1),[{webhooks:Z,webhooksToDelete:Y,webhookToDelete:oe,loadingWebhooks:re},I]=(0,i.useReducer)(Q,$),{notifyStatus:xe}=(0,k.useNotifyAT)();(0,w.useFocusWhenNavigate)();const{push:Te}=(0,b.useHistory)(),{pathname:se}=(0,b.useLocation)(),J=Z.length,K=Y.length,le=h=>Z.findIndex(M=>M.id===h);(0,i.useEffect)(()=>(W.current=!0,()=>{W.current=!1}),[]),(0,i.useEffect)(()=>{g&&Oe()},[g]);const Oe=()=>X(void 0,null,function*(){try{const{data:h}=yield(0,w.request)("/admin/webhooks",{method:"GET"});W.current&&(I({type:"GET_DATA_SUCCEEDED",data:h}),xe("webhooks have been loaded"))}catch(h){te.log(h),W.current&&(h.code!==20&&N({type:"warning",message:{id:"notification.error"}}),I({type:"TOGGLE_LOADING"}))}}),we=()=>{R(h=>!h)},Se=()=>{oe?ke():Le()},ke=()=>X(void 0,null,function*(){try{yield(0,w.request)(`/admin/webhooks/${oe}`,{method:"DELETE"}),I({type:"WEBHOOK_DELETED",index:le(oe)})}catch(h){h.code!==20&&N({type:"warning",message:{id:"notification.error"}})}R(!1)}),Le=()=>X(void 0,null,function*(){const h={ids:Y};try{yield(0,w.request)("/admin/webhooks/batch-delete",{method:"POST",body:h}),W.current&&I({type:"WEBHOOKS_DELETED"})}catch(M){W.current&&M.code!==20&&N({type:"warning",message:{id:"notification.error"}})}R(!1)}),ue=h=>{R(!0),h!=="all"&&I({type:"SET_WEBHOOK_TO_DELETE",id:h})},Ce=(h,M)=>X(void 0,null,function*(){const ce=le(M),Me=Z[ce],de=[ce,"isEnabled"],fe=ve(F({},Me),{isEnabled:h});delete fe.id;try{I({type:"SET_WEBHOOK_ENABLED",keys:de,value:h}),yield(0,w.request)(`/admin/webhooks/${M}`,{method:"PUT",body:fe})}catch(je){W.current&&(I({type:"SET_WEBHOOK_ENABLED",keys:de,value:!h}),je.code!==20&&N({type:"warning",message:{id:"notification.error"}}))}}),De=()=>{I({type:"SET_ALL_WEBHOOKS_TO_DELETE"})},Pe=(h,M)=>{I({type:"SET_WEBHOOKS_TO_DELETE",value:h,id:M})},q=h=>{Te(`${se}/${h}`)};return i.createElement(a.Layout,null,i.createElement(w.SettingsPageTitle,{name:"Webhooks"}),i.createElement(S.Main,{"aria-busy":x||re},i.createElement(a.HeaderLayout,{title:T({id:"Settings.webhooks.title",defaultMessage:"Webhooks"}),subtitle:T({id:"Settings.webhooks.list.description",defaultMessage:"Get POST changes notifications"}),primaryAction:y&&!re&&i.createElement(w.LinkButton,{startIcon:i.createElement(e(),null),variant:"default",to:`${se}/create`,size:"S"},T({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))}),K>0&&H&&i.createElement(a.ActionLayout,{startActions:i.createElement(i.Fragment,null,i.createElement(E.Typography,{variant:"epsilon",textColor:"neutral600"},T({id:"Settings.webhooks.to.delete",defaultMessage:"{webhooksToDeleteLength, plural, one {# asset} other {# assets}} selected"},{webhooksToDeleteLength:K})),i.createElement(C.Button,{onClick:()=>ue("all"),startIcon:i.createElement(B(),null),size:"L",variant:"danger-light"},T({id:"global.delete",defaultMessage:"Delete"})))}),i.createElement(a.ContentLayout,null,x||re?i.createElement(L.Box,{background:"neutral0",padding:6,shadow:"filterShadow",hasRadius:!0},i.createElement(w.LoadingIndicatorPage,null)):i.createElement(i.Fragment,null,J>0?i.createElement(m.Table,{colCount:5,rowCount:J+1,footer:i.createElement(m.TFooter,{onClick:()=>y?q("create"):{},icon:i.createElement(e(),null)},T({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))},i.createElement(m.Thead,null,i.createElement(m.Tr,null,i.createElement(m.Th,null,i.createElement(c.BaseCheckbox,{"aria-label":T({id:"global.select-all-entries",defaultMessage:"Select all entries"}),indeterminate:K>0&&K<J,value:K===J,onValueChange:De})),i.createElement(m.Th,{width:"20%"},i.createElement(E.Typography,{variant:"sigma",textColor:"neutral600"},T({id:"global.name",defaultMessage:"Name"}))),i.createElement(m.Th,{width:"60%"},i.createElement(E.Typography,{variant:"sigma",textColor:"neutral600"},T({id:"Settings.webhooks.form.url",defaultMessage:"URL"}))),i.createElement(m.Th,{width:"20%"},i.createElement(E.Typography,{variant:"sigma",textColor:"neutral600"},T({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"}))),i.createElement(m.Th,null,i.createElement(s.VisuallyHidden,null,T({id:"Settings.webhooks.list.th.actions",defaultMessage:"Actions"}))))),i.createElement(m.Tbody,null,Z.map(h=>i.createElement(m.Tr,F({key:h.id},(0,w.onRowClick)({fn:()=>q(h.id),condition:P})),i.createElement(m.Td,F({},w.stopPropagation),i.createElement(c.BaseCheckbox,{"aria-label":`${T({id:"global.select",defaultMessage:"Select"})} ${h.name}`,value:Y==null?void 0:Y.includes(h.id),onValueChange:M=>Pe(M,h.id),id:"select",name:"select"})),i.createElement(m.Td,null,i.createElement(E.Typography,{fontWeight:"semiBold",textColor:"neutral800"},h.name)),i.createElement(m.Td,null,i.createElement(E.Typography,{textColor:"neutral800"},h.url)),i.createElement(m.Td,null,i.createElement(u.Flex,F({},w.stopPropagation),i.createElement(v.Switch,{onLabel:T({id:"global.enabled",defaultMessage:"Enabled"}),offLabel:T({id:"global.disabled",defaultMessage:"Disabled"}),label:`${h.name} ${T({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"})}`,selected:h.isEnabled,onChange:()=>Ce(!h.isEnabled,h.id),visibleLabels:!0}))),i.createElement(m.Td,null,i.createElement(l.Stack,F({horizontal:!0,spacing:1},w.stopPropagation),P&&i.createElement(f.IconButton,{onClick:()=>{q(h.id)},label:T({id:"Settings.webhooks.events.update",defaultMessage:"Update"}),icon:i.createElement(d(),null),noBorder:!0}),H&&i.createElement(f.IconButton,{onClick:()=>ue(h.id),label:T({id:"global.delete",defaultMessage:"Delete"}),icon:i.createElement(B(),null),noBorder:!0,id:`delete-${h.id}`}))))))):i.createElement(r.EmptyStateLayout,{icon:i.createElement(_(),{width:"160px"}),content:T({id:"Settings.webhooks.list.empty.description",defaultMessage:"No webhooks found"}),action:i.createElement(C.Button,{variant:"secondary",startIcon:i.createElement(e(),null),onClick:()=>y?q("create"):{}},T({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))})))),i.createElement(w.ConfirmDialog,{isOpen:A,onToggleDialog:we,onConfirm:Se}))},Ee=()=>i.createElement(w.CheckPagePermissions,{permissions:o.Z.settings.webhooks.main},i.createElement(ye,null))}}]);
@@ -259,7 +259,7 @@ const RoleListPage = () => {
259
259
  <HeaderLayout
260
260
  primaryAction={
261
261
  canCreate ? (
262
- <Button onClick={handleNewRoleClick} startIcon={<Plus />} size="L">
262
+ <Button onClick={handleNewRoleClick} startIcon={<Plus />} size="S">
263
263
  {formatMessage({
264
264
  id: 'Settings.roles.list.button.add',
265
265
  defaultMessage: 'Add new role',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/admin",
3
- "version": "4.4.0-alpha.0",
3
+ "version": "4.4.0-beta.1",
4
4
  "description": "Strapi Admin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -51,19 +51,20 @@
51
51
  "@fortawesome/free-solid-svg-icons": "^5.15.3",
52
52
  "@fortawesome/react-fontawesome": "^0.2.0",
53
53
  "@pmmmwh/react-refresh-webpack-plugin": "0.5.7",
54
- "@strapi/babel-plugin-switch-ee-ce": "4.4.0-alpha.0",
55
- "@strapi/design-system": "1.2.1",
56
- "@strapi/helper-plugin": "4.4.0-alpha.0",
57
- "@strapi/icons": "1.2.1",
58
- "@strapi/typescript-utils": "4.4.0-alpha.0",
59
- "@strapi/utils": "4.4.0-alpha.0",
54
+ "@strapi/babel-plugin-switch-ee-ce": "4.4.0-beta.1",
55
+ "@strapi/design-system": "1.2.2",
56
+ "@strapi/helper-plugin": "4.4.0-beta.1",
57
+ "@strapi/icons": "1.2.2",
58
+ "@strapi/permissions": "4.4.0-beta.1",
59
+ "@strapi/typescript-utils": "4.4.0-beta.1",
60
+ "@strapi/utils": "4.4.0-beta.1",
60
61
  "axios": "0.27.2",
61
62
  "babel-loader": "8.2.5",
62
63
  "babel-plugin-styled-components": "2.0.2",
63
64
  "bcryptjs": "2.4.3",
64
65
  "chalk": "^4.1.1",
65
66
  "chokidar": "^3.5.1",
66
- "codemirror": "^5.65.6",
67
+ "codemirror": "^5.65.8",
67
68
  "cross-env": "^7.0.3",
68
69
  "css-loader": "6.7.1",
69
70
  "date-fns": "2.29.2",
@@ -117,7 +118,7 @@
117
118
  "react-is": "^17.0.2",
118
119
  "react-query": "3.24.3",
119
120
  "react-redux": "7.2.8",
120
- "react-refresh": "0.11.0",
121
+ "react-refresh": "0.14.0",
121
122
  "react-router": "5.2.0",
122
123
  "react-router-dom": "5.2.0",
123
124
  "react-window": "1.8.7",
@@ -126,7 +127,7 @@
126
127
  "rimraf": "3.0.2",
127
128
  "sanitize-html": "2.7.1",
128
129
  "semver": "7.3.7",
129
- "sift": "13.5.4",
130
+ "sift": "16.0.0",
130
131
  "style-loader": "3.3.1",
131
132
  "styled-components": "5.3.3",
132
133
  "typescript": "4.6.2",
@@ -145,13 +146,13 @@
145
146
  "glob": "8.0.3",
146
147
  "react-test-renderer": "^17.0.2",
147
148
  "speed-measure-webpack-plugin": "1.5.0",
148
- "webpack-bundle-analyzer": "^4.5.0"
149
+ "webpack-bundle-analyzer": "^4.6.1"
149
150
  },
150
151
  "peerDependencies": {
151
152
  "@strapi/strapi": "^4.3.4"
152
153
  },
153
154
  "engines": {
154
- "node": ">=14.19.1 <=16.x.x",
155
+ "node": ">=14.19.1 <=18.x.x",
155
156
  "npm": ">=6.0.0"
156
157
  },
157
158
  "nx": {
@@ -163,5 +164,5 @@
163
164
  }
164
165
  }
165
166
  },
166
- "gitHead": "fc78298ae4f9b247d636beda568734d5f8ed7b3e"
167
+ "gitHead": "cae16f7f259fa4473a55e8fea57839cda98f34ae"
167
168
  }
package/scripts/build.js CHANGED
@@ -80,12 +80,10 @@ const buildAdmin = async () => {
80
80
  new Error(
81
81
  messages.errors.reduce((acc, error) => {
82
82
  if (isObject(error)) {
83
- acc += error.message;
84
- } else {
85
- acc += error.join('\n\n');
83
+ return acc + error.message;
86
84
  }
87
85
 
88
- return acc;
86
+ return acc + error.join('\n\n');
89
87
  }, '')
90
88
  )
91
89
  );
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
- const { merge } = require('lodash/fp');
3
+ const { merge, map, difference, uniq } = require('lodash/fp');
4
+ const { pipeAsync } = require('@strapi/utils');
4
5
  const { getService } = require('./utils');
5
6
  const adminActions = require('./config/admin-actions');
6
7
  const adminConditions = require('./config/admin-conditions');
@@ -52,6 +53,22 @@ const syncAuthSettings = async () => {
52
53
  await adminStore.set({ key: 'auth', value: newAuthSettings });
53
54
  };
54
55
 
56
+ const syncAPITokensPermissions = async () => {
57
+ const validPermissions = strapi.contentAPI.permissions.providers.action.keys();
58
+ const permissionsInDB = await pipeAsync(
59
+ strapi.query('admin::api-token-permission').findMany,
60
+ map('action')
61
+ )();
62
+
63
+ const unknownPermissions = uniq(difference(permissionsInDB, validPermissions));
64
+
65
+ if (unknownPermissions.length > 0) {
66
+ await strapi
67
+ .query('admin::api-token-permission')
68
+ .deleteMany({ where: { action: { $in: unknownPermissions } } });
69
+ }
70
+ };
71
+
55
72
  module.exports = async () => {
56
73
  await registerAdminConditions();
57
74
  await registerPermissionActions();
@@ -73,6 +90,7 @@ module.exports = async () => {
73
90
  await userService.displayWarningIfUsersDontHaveRole();
74
91
 
75
92
  await syncAuthSettings();
93
+ await syncAPITokensPermissions();
76
94
 
77
95
  apiTokenService.checkSaltIsDefined();
78
96
  tokenService.checkSecretIsDefined();
@@ -118,12 +118,21 @@ module.exports = {
118
118
  category: 'users and roles',
119
119
  subCategory: 'roles',
120
120
  },
121
+ {
122
+ uid: 'api-tokens.access',
123
+ displayName: 'Access the API tokens settings page',
124
+ pluginName: 'admin',
125
+ section: 'settings',
126
+ category: 'api tokens',
127
+ subCategory: 'api Tokens',
128
+ },
121
129
  {
122
130
  uid: 'api-tokens.create',
123
131
  displayName: 'Create (generate)',
124
132
  pluginName: 'admin',
125
133
  section: 'settings',
126
134
  category: 'api tokens',
135
+ subCategory: 'general',
127
136
  },
128
137
  {
129
138
  uid: 'api-tokens.read',
@@ -131,6 +140,7 @@ module.exports = {
131
140
  pluginName: 'admin',
132
141
  section: 'settings',
133
142
  category: 'api tokens',
143
+ subCategory: 'general',
134
144
  },
135
145
  {
136
146
  uid: 'api-tokens.update',
@@ -138,6 +148,15 @@ module.exports = {
138
148
  pluginName: 'admin',
139
149
  section: 'settings',
140
150
  category: 'api tokens',
151
+ subCategory: 'general',
152
+ },
153
+ {
154
+ uid: 'api-tokens.regenerate',
155
+ displayName: 'Regenerate',
156
+ pluginName: 'admin',
157
+ section: 'settings',
158
+ category: 'api tokens',
159
+ subCategory: 'general',
141
160
  },
142
161
  {
143
162
  uid: 'api-tokens.delete',
@@ -145,6 +164,7 @@ module.exports = {
145
164
  pluginName: 'admin',
146
165
  section: 'settings',
147
166
  category: 'api tokens',
167
+ subCategory: 'general',
148
168
  },
149
169
  {
150
170
  uid: 'project-settings.update',
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ collectionName: 'strapi_api_token_permissions',
5
+ info: {
6
+ name: 'API Token Permission',
7
+ description: '',
8
+ singularName: 'api-token-permission',
9
+ pluralName: 'api-token-permissions',
10
+ displayName: 'API Token Permission',
11
+ },
12
+ options: {},
13
+ pluginOptions: {
14
+ 'content-manager': {
15
+ visible: false,
16
+ },
17
+ 'content-type-builder': {
18
+ visible: false,
19
+ },
20
+ },
21
+ attributes: {
22
+ action: {
23
+ type: 'string',
24
+ minLength: 1,
25
+ configurable: false,
26
+ required: true,
27
+ },
28
+ token: {
29
+ configurable: false,
30
+ type: 'relation',
31
+ relation: 'manyToOne',
32
+ inversedBy: 'permissions',
33
+ target: 'admin::api-token',
34
+ },
35
+ },
36
+ };
@@ -26,6 +26,7 @@ module.exports = {
26
26
  minLength: 1,
27
27
  configurable: false,
28
28
  required: true,
29
+ unique: true,
29
30
  },
30
31
  description: {
31
32
  type: 'string',
@@ -38,7 +39,7 @@ module.exports = {
38
39
  type: 'enumeration',
39
40
  enum: Object.values(constants.API_TOKEN_TYPE),
40
41
  configurable: false,
41
- required: false,
42
+ required: true,
42
43
  default: constants.API_TOKEN_TYPE.READ_ONLY,
43
44
  },
44
45
  accessKey: {
@@ -47,5 +48,28 @@ module.exports = {
47
48
  configurable: false,
48
49
  required: true,
49
50
  },
51
+ lastUsedAt: {
52
+ type: 'datetime',
53
+ configurable: false,
54
+ required: false,
55
+ },
56
+ permissions: {
57
+ type: 'relation',
58
+ target: 'admin::api-token-permission',
59
+ relation: 'oneToMany',
60
+ mappedBy: 'token',
61
+ configurable: false,
62
+ required: false,
63
+ },
64
+ expiresAt: {
65
+ type: 'datetime',
66
+ configurable: false,
67
+ required: false,
68
+ },
69
+ lifespan: {
70
+ type: 'integer',
71
+ configurable: false,
72
+ required: false,
73
+ },
50
74
  },
51
75
  };
@@ -5,4 +5,5 @@ module.exports = {
5
5
  user: { schema: require('./User') },
6
6
  role: { schema: require('./Role') },
7
7
  'api-token': { schema: require('./api-token') },
8
+ 'api-token-permission': { schema: require('./api-token-permission') },
8
9
  };
@@ -24,6 +24,8 @@ module.exports = {
24
24
  name: trim(body.name),
25
25
  description: trim(body.description),
26
26
  type: body.type,
27
+ permissions: body.permissions,
28
+ lifespan: body.lifespan,
27
29
  };
28
30
 
29
31
  await validateApiTokenCreationInput(attributes);
@@ -37,6 +39,21 @@ module.exports = {
37
39
  ctx.created({ data: apiToken });
38
40
  },
39
41
 
42
+ async regenerate(ctx) {
43
+ const { id } = ctx.params;
44
+ const apiTokenService = getService('api-token');
45
+
46
+ const apiTokenExists = await apiTokenService.getById(id);
47
+ if (!apiTokenExists) {
48
+ ctx.notFound('API Token not found');
49
+ return;
50
+ }
51
+
52
+ const accessToken = await apiTokenService.regenerate(id);
53
+
54
+ ctx.created({ data: accessToken });
55
+ },
56
+
40
57
  async list(ctx) {
41
58
  const apiTokenService = getService('api-token');
42
59
  const apiTokens = await apiTokenService.list();
@@ -59,7 +76,6 @@ module.exports = {
59
76
 
60
77
  if (!apiToken) {
61
78
  ctx.notFound('API Token not found');
62
-
63
79
  return;
64
80
  }
65
81
 
@@ -108,4 +124,11 @@ module.exports = {
108
124
  const apiToken = await apiTokenService.update(id, attributes);
109
125
  ctx.send({ data: apiToken });
110
126
  },
127
+
128
+ async getLayout(ctx) {
129
+ const apiTokenService = getService('api-token');
130
+ const layout = await apiTokenService.getApiTokenLayout();
131
+
132
+ ctx.send({ data: layout });
133
+ },
111
134
  };
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ module.exports = {
4
+ async getPermissions(ctx) {
5
+ const actionsMap = await strapi.contentAPI.permissions.getActionsMap();
6
+
7
+ ctx.send({ data: actionsMap });
8
+ },
9
+
10
+ async getRoutes(ctx) {
11
+ const routesMap = await strapi.contentAPI.getRoutesMap();
12
+
13
+ ctx.send({ data: routesMap });
14
+ },
15
+ };
@@ -9,4 +9,5 @@ module.exports = {
9
9
  role: require('./role'),
10
10
  user: require('./user'),
11
11
  webhooks: require('./webhooks'),
12
+ 'content-api': require('./content-api'),
12
13
  };
@@ -56,4 +56,15 @@ module.exports = [
56
56
  ],
57
57
  },
58
58
  },
59
+ {
60
+ method: 'POST',
61
+ path: '/api-tokens/:id/regenerate',
62
+ handler: 'api-token.regenerate',
63
+ config: {
64
+ policies: [
65
+ 'admin::isAuthenticatedAdmin',
66
+ { name: 'admin::hasPermissions', config: { actions: ['admin::api-tokens.regenerate'] } },
67
+ ],
68
+ },
69
+ },
59
70
  ];
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ module.exports = [
4
+ {
5
+ method: 'GET',
6
+ path: '/content-api/permissions',
7
+ handler: 'content-api.getPermissions',
8
+ config: {
9
+ policies: ['admin::isAuthenticatedAdmin'],
10
+ },
11
+ },
12
+ {
13
+ method: 'GET',
14
+ path: '/content-api/routes',
15
+ handler: 'content-api.getRoutes',
16
+ config: {
17
+ policies: ['admin::isAuthenticatedAdmin'],
18
+ },
19
+ },
20
+ ];
@@ -7,6 +7,7 @@ const users = require('./users');
7
7
  const roles = require('./roles');
8
8
  const webhooks = require('./webhooks');
9
9
  const apiTokens = require('./api-tokens');
10
+ const contentApi = require('./content-api');
10
11
 
11
12
  module.exports = [
12
13
  ...admin,
@@ -16,4 +17,5 @@ module.exports = [
16
17
  ...roles,
17
18
  ...webhooks,
18
19
  ...apiTokens,
20
+ ...contentApi,
19
21
  ];