@strapi/admin 4.6.0-beta.2 → 4.6.0

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 (160) hide show
  1. package/admin/src/components/ConfigurationsProvider/index.js +21 -18
  2. package/admin/src/components/ConfigurationsProvider/reducer.js +1 -0
  3. package/admin/src/components/LeftMenu/index.js +53 -50
  4. package/admin/src/components/UnauthenticatedLogo/index.js +1 -1
  5. package/admin/src/content-manager/components/Hint/index.js +4 -17
  6. package/admin/src/content-manager/components/InputUID/index.js +3 -14
  7. package/admin/src/content-manager/components/PreviewWysiwyg/Wrapper.js +22 -27
  8. package/admin/src/content-manager/components/Wysiwyg/EditorLayout.js +19 -28
  9. package/admin/src/content-manager/components/Wysiwyg/index.js +4 -8
  10. package/admin/src/content-manager/pages/App/LeftMenu/index.js +3 -8
  11. package/admin/src/content-manager/pages/App/LeftMenu/utils/index.js +1 -0
  12. package/admin/src/content-manager/pages/App/LeftMenu/utils/matchByTitle.js +24 -0
  13. package/admin/src/content-manager/pages/EditView/{Informations → Information}/index.js +55 -39
  14. package/admin/src/content-manager/pages/EditView/{Informations → Information}/utils/getUnits.js +0 -0
  15. package/admin/src/content-manager/pages/EditView/index.js +3 -3
  16. package/admin/src/core/store/configureStore.js +22 -4
  17. package/admin/src/core/utils/axiosInstance.js +4 -2
  18. package/admin/src/hooks/useSettingsMenu/init.js +2 -25
  19. package/admin/src/hooks/useSettingsMenu/utils/adminLinks.js +4 -0
  20. package/admin/src/hooks/useSettingsMenu/utils/customAdminLinks.js +1 -0
  21. package/admin/src/hooks/useSettingsMenu/utils/defaultAdminLinks.js +21 -0
  22. package/admin/src/index.js +3 -3
  23. package/admin/src/pages/App/index.js +6 -2
  24. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/CustomizationInfos/index.js +142 -0
  25. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/{Form → CustomizationInfos}/init.js +3 -0
  26. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/{Form → CustomizationInfos}/reducer.js +20 -0
  27. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/LogoInput/index.js +21 -17
  28. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/index.js +68 -42
  29. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/utils/api.js +5 -1
  30. package/admin/src/pages/SettingsPage/pages/Webhooks/EditView/components/EventInput/index.js +1 -1
  31. package/admin/src/pages/SettingsPage/utils/defaultRoutes.js +0 -11
  32. package/admin/src/permissions/defaultPermissions.js +4 -0
  33. package/admin/src/translations/en.json +22 -16
  34. package/build/2607.ce06608e.chunk.js +66 -0
  35. package/build/{2743.692b1f21.chunk.js → 2743.dea372fb.chunk.js} +14 -14
  36. package/build/3075.03ebe93d.chunk.js +115 -0
  37. package/build/3632.963ac97d.chunk.js +138 -0
  38. package/build/{4318.87affaf2.chunk.js → 4318.8cb388a5.chunk.js} +1 -1
  39. package/build/4656.a0d43cca.chunk.js +159 -0
  40. package/build/{5015.f5e15fdb.chunk.js → 5015.8e3fe50b.chunk.js} +1 -1
  41. package/build/{3557.e7115160.chunk.js → 5910.a5374848.chunk.js} +130 -90
  42. package/build/{8633.6f546066.chunk.js → 8633.4af74a50.chunk.js} +1 -1
  43. package/build/9641.a311b612.chunk.js +276 -0
  44. package/build/9707.62831b4d.chunk.js +101 -0
  45. package/build/Admin-authenticatedApp.50dc27f9.chunk.js +75 -0
  46. package/build/Admin_homePage.79ab880c.chunk.js +77 -0
  47. package/build/Admin_marketplace.eabf21b2.chunk.js +26 -0
  48. package/build/{Admin_pluginsPage.d2a9a619.chunk.js → Admin_pluginsPage.953e796b.chunk.js} +1 -1
  49. package/build/{Admin_profilePage.5e830ceb.chunk.js → Admin_profilePage.5c2efda5.chunk.js} +1 -1
  50. package/build/Admin_settingsPage.19cfb9ca.chunk.js +178 -0
  51. package/build/{Upload_ConfigureTheView.9bdf41b5.chunk.js → Upload_ConfigureTheView.3f2b6e6a.chunk.js} +1 -1
  52. package/build/admin-app.34295b50.chunk.js +112 -0
  53. package/build/{admin-edit-roles-page.32bfe5ea.chunk.js → admin-edit-roles-page.d50d9654.chunk.js} +1 -1
  54. package/build/admin-edit-users.912b856d.chunk.js +10 -0
  55. package/build/admin-users.e36e7111.chunk.js +11 -0
  56. package/build/{api-tokens-list-page.a55e427c.chunk.js → api-tokens-list-page.1cd86136.chunk.js} +1 -1
  57. package/build/audit-logs-settings-page.308a6250.chunk.js +1 -0
  58. package/build/{content-manager.ad929a94.chunk.js → content-manager.851f40ce.chunk.js} +128 -132
  59. package/build/content-type-builder-list-view.4243b2b1.chunk.js +198 -0
  60. package/build/{content-type-builder-translation-de-json.29df67b8.chunk.js → content-type-builder-translation-de-json.0979cccb.chunk.js} +1 -1
  61. package/build/{content-type-builder-translation-dk-json.e22d2527.chunk.js → content-type-builder-translation-dk-json.e05583e9.chunk.js} +1 -1
  62. package/build/content-type-builder-translation-en-json.e577d595.chunk.js +1 -0
  63. package/build/{content-type-builder-translation-es-json.1044b252.chunk.js → content-type-builder-translation-es-json.fe4daad8.chunk.js} +1 -1
  64. package/build/{content-type-builder-translation-fr-json.2183e6b3.chunk.js → content-type-builder-translation-fr-json.b1eb52f6.chunk.js} +1 -1
  65. package/build/{content-type-builder-translation-id-json.ba3e8891.chunk.js → content-type-builder-translation-id-json.ee3b36bb.chunk.js} +1 -1
  66. package/build/{content-type-builder-translation-it-json.d4661201.chunk.js → content-type-builder-translation-it-json.13b3c26a.chunk.js} +1 -1
  67. package/build/{content-type-builder-translation-ko-json.57ff7f51.chunk.js → content-type-builder-translation-ko-json.8a274be5.chunk.js} +1 -1
  68. package/build/{content-type-builder-translation-pl-json.a057b51e.chunk.js → content-type-builder-translation-pl-json.24a34349.chunk.js} +1 -1
  69. package/build/{content-type-builder-translation-pt-BR-json.446df9da.chunk.js → content-type-builder-translation-pt-BR-json.97f71a9d.chunk.js} +1 -1
  70. package/build/{content-type-builder-translation-ru-json.8c51843e.chunk.js → content-type-builder-translation-ru-json.54d11230.chunk.js} +1 -1
  71. package/build/{content-type-builder-translation-sv-json.af6ecca1.chunk.js → content-type-builder-translation-sv-json.59f5e1e5.chunk.js} +1 -1
  72. package/build/{content-type-builder-translation-tr-json.da83a07e.chunk.js → content-type-builder-translation-tr-json.cea4d226.chunk.js} +1 -1
  73. package/build/{content-type-builder-translation-zh-json.42f94cb3.chunk.js → content-type-builder-translation-zh-json.faedd610.chunk.js} +1 -1
  74. package/build/content-type-builder.365b6bf4.chunk.js +125 -0
  75. package/build/email-settings-page.379552b1.chunk.js +15 -0
  76. package/build/en-json.38d182e5.chunk.js +1 -0
  77. package/build/i18n-settings-page.3ab28b1a.chunk.js +65 -0
  78. package/build/{i18n-translation-de-json.dc876c08.chunk.js → i18n-translation-de-json.362384a6.chunk.js} +1 -1
  79. package/build/{i18n-translation-dk-json.49aaf933.chunk.js → i18n-translation-dk-json.89401417.chunk.js} +1 -1
  80. package/build/{i18n-translation-en-json.ac9ebc1b.chunk.js → i18n-translation-en-json.60af6722.chunk.js} +1 -1
  81. package/build/{i18n-translation-es-json.57072ed3.chunk.js → i18n-translation-es-json.87b494d1.chunk.js} +1 -1
  82. package/build/{i18n-translation-fr-json.84733f34.chunk.js → i18n-translation-fr-json.57ddc77e.chunk.js} +1 -1
  83. package/build/{i18n-translation-ko-json.fc73fe20.chunk.js → i18n-translation-ko-json.ef4f9471.chunk.js} +1 -1
  84. package/build/{i18n-translation-pl-json.16e5df90.chunk.js → i18n-translation-pl-json.dfac513d.chunk.js} +1 -1
  85. package/build/{i18n-translation-tr-json.cb39c048.chunk.js → i18n-translation-tr-json.10f0600d.chunk.js} +1 -1
  86. package/build/{i18n-translation-zh-Hans-json.2cf82d2d.chunk.js → i18n-translation-zh-Hans-json.757ce62d.chunk.js} +1 -1
  87. package/build/{i18n-translation-zh-json.ed1d272e.chunk.js → i18n-translation-zh-json.bef2dc07.chunk.js} +1 -1
  88. package/build/index.html +1 -1
  89. package/build/main.9f31732e.js +4454 -0
  90. package/build/runtime~main.2b8e2318.js +2 -0
  91. package/build/sso-settings-page.b64a44e8.chunk.js +41 -0
  92. package/build/upload-settings.6c26ff37.chunk.js +89 -0
  93. package/build/upload.2c69d238.chunk.js +38 -0
  94. package/build/users-advanced-settings-page.c4270682.chunk.js +13 -0
  95. package/build/users-email-settings-page.60422a2f.chunk.js +28 -0
  96. package/build/users-providers-settings-page.e1834060.chunk.js +104 -0
  97. package/build/{users-roles-settings-page.ad28ab42.chunk.js → users-roles-settings-page.3ef35132.chunk.js} +1 -1
  98. package/build/webhook-edit-page.c0080dc1.chunk.js +75 -0
  99. package/build/webhook-list-page.f75ba3f2.chunk.js +42 -0
  100. package/ee/admin/hooks/useSettingsMenu/utils/customAdminLinks.js +17 -0
  101. package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionBody.js +0 -0
  102. package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/Modal/ActionItem.js +0 -0
  103. package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/Modal/index.js +5 -1
  104. package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/PaginationFooter/index.js +0 -0
  105. package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/TableRows/index.js +0 -0
  106. package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/hooks/useFormatTimeStamp.js +0 -0
  107. package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/index.js +7 -7
  108. package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/utils/getActionTypesDefaultMessages.js +3 -0
  109. package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ListView/utils/tableHeaders.js +0 -0
  110. package/{admin/src → ee/admin}/pages/SettingsPage/pages/AuditLogs/ProtectedListPage/index.js +1 -1
  111. package/ee/admin/pages/SettingsPage/{SingleSignOn → pages/SingleSignOn}/index.js +3 -3
  112. package/ee/admin/pages/SettingsPage/{SingleSignOn → pages/SingleSignOn}/utils/schema.js +0 -0
  113. package/ee/admin/pages/SettingsPage/utils/customRoutes.js +28 -16
  114. package/ee/server/bootstrap.js +2 -0
  115. package/ee/server/routes/index.js +94 -10
  116. package/ee/server/services/audit-logs.js +19 -1
  117. package/ee/server/services/passport/sso.js +13 -1
  118. package/ee/server/services/passport.js +1 -4
  119. package/package.json +11 -16
  120. package/server/controllers/admin.js +3 -2
  121. package/server/register.js +7 -7
  122. package/server/services/project-settings.js +10 -6
  123. package/server/services/user.js +3 -1
  124. package/server/validation/project-settings.js +19 -10
  125. package/strapi-server.js +1 -1
  126. package/admin/src/core/store/createReducer.js +0 -5
  127. package/admin/src/pages/SettingsPage/pages/ApplicationInfosPage/components/Form/index.js +0 -85
  128. package/build/2235.746d3cf7.chunk.js +0 -106
  129. package/build/2598.01c96bd5.chunk.js +0 -159
  130. package/build/4958.1979bbf5.chunk.js +0 -276
  131. package/build/5052.c2eacff2.chunk.js +0 -65
  132. package/build/7295.4e2dfbbb.chunk.js +0 -114
  133. package/build/805.da20168c.chunk.js +0 -138
  134. package/build/874.be41e4b3.chunk.js +0 -104
  135. package/build/9707.a07db355.chunk.js +0 -101
  136. package/build/Admin-authenticatedApp.9933974c.chunk.js +0 -75
  137. package/build/Admin_homePage.045bb0c8.chunk.js +0 -77
  138. package/build/Admin_marketplace.bf3ac090.chunk.js +0 -26
  139. package/build/Admin_settingsPage.53fa00a4.chunk.js +0 -178
  140. package/build/admin-app.8ed108ca.chunk.js +0 -112
  141. package/build/admin-audit-logs.68f833bf.chunk.js +0 -1
  142. package/build/admin-edit-users.795f155c.chunk.js +0 -10
  143. package/build/admin-users.cbd9bcf7.chunk.js +0 -11
  144. package/build/content-type-builder-list-view.3048854d.chunk.js +0 -198
  145. package/build/content-type-builder-translation-en-json.08e28f4e.chunk.js +0 -1
  146. package/build/content-type-builder.4edd1c22.chunk.js +0 -127
  147. package/build/email-settings-page.7c9e6c5e.chunk.js +0 -15
  148. package/build/en-json.d65a13ef.chunk.js +0 -1
  149. package/build/i18n-settings-page.fbccdf12.chunk.js +0 -1
  150. package/build/main.6bbf9950.js +0 -4417
  151. package/build/runtime~main.c2bf62af.js +0 -2
  152. package/build/sso-settings-page.4031de9e.chunk.js +0 -41
  153. package/build/upload-settings.657790fd.chunk.js +0 -89
  154. package/build/upload.608a9856.chunk.js +0 -38
  155. package/build/users-advanced-settings-page.e3ab865f.chunk.js +0 -13
  156. package/build/users-email-settings-page.57adf9b7.chunk.js +0 -28
  157. package/build/users-providers-settings-page.7d1fb45c.chunk.js +0 -1
  158. package/build/webhook-edit-page.1dd6d040.chunk.js +0 -75
  159. package/build/webhook-list-page.98afa3ea.chunk.js +0 -42
  160. package/ee/server/routes/features-routes.js +0 -66
@@ -0,0 +1,75 @@
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[5162],{41513:function(te,M,t){t.d(M,{Z:function(){return Fe}});var e=t(32735),n=t(88425),L=t(27649),P=t(84968),x=t(5141),E=t(67927),p=t(17247),ne=t(60216),d=t.n(ne),h=t(29439),k=t(66456),ce=t(74512);function ve(a){return(0,ce.jsx)("svg",{width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...a,children:(0,ce.jsx)("path",{d:"M4 20.252V3.748a1 1 0 011.507-.862l14.028 8.252a1 1 0 010 1.724L5.507 21.113A1 1 0 014 20.252z",fill:"#212134"})})}var be=t(28356),Re=t(17e3),ae=t(72850),ue=t(41415),W=t(27677),Q=t(10369),me=t(15335),D=t(5803),Z=t(83281),N=t(5636),Ce=t(76437),F=t(49372),ye=t(83292),Ie=t(44426),G=t(8284),ge=t(23940),i=t.n(ge);const C=({disabledEvents:a,name:r,events:o,inputValue:s,handleChange:c,handleChangeAll:O})=>{const u=o.filter(b=>!a.includes(b)),f=s.length===u.length,m=s.length>0,K=({target:{name:b}})=>{O({target:{name:b,value:!f}})};return e.createElement("tr",null,e.createElement("td",null,e.createElement(G.X,{indeterminate:m&&!f,"aria-label":"Select all entries",name:r,onChange:K,value:f},i()(r))),o.map(b=>e.createElement("td",{key:b},e.createElement(Ie.C,{disabled:a.includes(b),"aria-label":b,name:b,value:s.includes(b),onValueChange:S=>c({target:{name:b,value:S}})}))))};C.defaultProps={disabledEvents:[],events:[],inputValue:[],handleChange(){},handleChangeAll(){}},C.propTypes={disabledEvents:d().array,events:d().array,inputValue:d().array,handleChange:d().func,handleChangeAll:d().func,name:d().string.isRequired};var A=C,R=a=>a.reduce((r,o)=>{const s=o.split(".")[0];return r[s]||(r[s]=[]),r[s].push(o),r},{});const pe=ye.default.table`
2
+ td {
3
+ height: ${52/16}rem;
4
+ width: 10%;
5
+ vertical-align: middle;
6
+ text-align: center;
7
+ }
8
+
9
+ tbody tr:nth-child(odd) {
10
+ background: ${({theme:a})=>a.colors.neutral100};
11
+ }
12
+
13
+ tbody tr td:first-child {
14
+ padding-left: ${({theme:a})=>a.spaces[7]};
15
+ }
16
+ `,re={headers:{default:[{id:"Settings.webhooks.events.create",defaultMessage:"Create"},{id:"Settings.webhooks.events.update",defaultMessage:"Update"},{id:"app.utils.delete",defaultMessage:"Delete"}],draftAndPublish:[{id:"Settings.webhooks.events.create",defaultMessage:"Create"},{id:"Settings.webhooks.events.update",defaultMessage:"Update"},{id:"app.utils.delete",defaultMessage:"Delete"},{id:"app.utils.publish",defaultMessage:"Publish"},{id:"app.utils.unpublish",defaultMessage:"Unpublish"}]},events:{default:{entry:["entry.create","entry.update","entry.delete"],media:["media.create","media.update","media.delete"]},draftAndPublish:{entry:["entry.create","entry.update","entry.delete","entry.publish","entry.unpublish"],media:["media.create","media.update","media.delete"]}}},fe=({isDraftAndPublish:a})=>{const r=a?re.headers.draftAndPublish:re.headers.default,o=a?re.events.draftAndPublish:re.events.default,{formatMessage:s}=(0,N.useIntl)(),{values:c,handleChange:O}=(0,Z.useFormikContext)(),u="events",f=c.events,m=[],K=R(f),b=({target:{name:v,value:ee}})=>{let l=new Set(f);ee?l.add(v):l.delete(v),O({target:{name:u,value:Array.from(l)}})},S=({target:{name:v,value:ee}})=>{let l=new Set(f);ee?o[v].forEach(g=>{m.includes(g)||l.add(g)}):o[v].forEach(g=>l.delete(g)),O({target:{name:u,value:Array.from(l)}})};return e.createElement(W.K,{spacing:1},e.createElement(Ce.Q,null,s({id:"Settings.webhooks.form.events",defaultMessage:"Events"})),e.createElement(pe,null,e.createElement("thead",null,e.createElement("tr",null,e.createElement("td",null),r.map(v=>v==="app.utils.publish"||v==="app.utils.unpublish"?e.createElement("td",{key:v.id,title:s({id:"Settings.webhooks.event.publish-tooltip",defaultMessage:"This event only exists for content with draft & publish enabled"})},e.createElement(F.Z,{variant:"sigma",textColor:"neutral600"},s(v))):e.createElement("td",{key:v.id},e.createElement(F.Z,{variant:"sigma",textColor:"neutral600"},s(v)))))),e.createElement("tbody",null,Object.keys(o).map(v=>e.createElement(A,{disabledEvents:m,key:v,name:v,events:o[v],inputValue:K[v],handleChange:b,handleChangeAll:S})))))};fe.propTypes={isDraftAndPublish:d().bool.isRequired};var J=fe,Te=t(19406),z=t(87933),Le=t(7563),Ae=t(21590),Me=t(90333),Pe=["A-IM","Accept","Accept-Charset","Accept-Encoding","Accept-Language","Accept-Datetime","Access-Control-Request-Method","Access-Control-Request-Headers","Authorization","Cache-Control","Connection","Content-Length","Content-Type","Cookie","Date","Expect","Forwarded","From","Host","If-Match","If-Modified-Since","If-None-Match","If-Range","If-Unmodified-Since","Max-Forwards","Origin","Pragma","Proxy-Authorization","Range","Referer","TE","User-Agent","Upgrade","Via","Warning"];const oe=({name:a,onChange:r,value:o,...s})=>{const[c,O]=(0,e.useState)(o?[...Pe,o]:Pe),u=m=>{r({target:{name:a,value:m}})},f=m=>{O(K=>[...K,m]),r({target:{name:a,value:m}})};return e.createElement(Ae.X,{...s,onChange:u,onCreateOption:f,placeholder:"",value:o},c.map(m=>e.createElement(Me.O,{value:m,key:m},m)))};oe.defaultProps={value:void 0},oe.propTypes={name:d().string.isRequired,onChange:d().func.isRequired,value:d().string};var De=oe,xe=()=>{const{formatMessage:a}=(0,N.useIntl)(),{values:r,errors:o}=(0,Z.useFormikContext)();return e.createElement(W.K,{spacing:1},e.createElement(Ce.Q,null,a({id:"Settings.webhooks.form.headers",defaultMessage:"Headers"})),e.createElement(ae.x,{padding:8,background:"neutral100",hasRadius:!0},e.createElement(Z.FieldArray,{validateOnChange:!1,name:"headers",render:({push:s,remove:c})=>e.createElement(me.r,{gap:4},r.headers?.map((O,u)=>e.createElement(e.Fragment,{key:u},e.createElement(D.P,{col:6},e.createElement(Z.Field,{as:De,name:`headers.${u}.key`,"aria-label":`row ${u+1} key`,label:a({id:"Settings.webhooks.key",defaultMessage:"Key"}),error:o.headers?.[u]?.key&&a({id:o.headers[u]?.key,defaultMessage:o.headers[u]?.key})})),e.createElement(D.P,{col:6},e.createElement(z.k,{alignItems:"flex-end"},e.createElement(ae.x,{style:{flex:1}},e.createElement(Z.Field,{as:Q.o,"aria-label":`row ${u+1} value`,label:a({id:"Settings.webhooks.value",defaultMessage:"Value"}),name:`headers.${u}.value`,error:o.headers?.[u]?.value&&a({id:o.headers[u]?.value,defaultMessage:o.headers[u]?.value})})),e.createElement(z.k,{paddingLeft:2,style:{alignSelf:"center"},paddingTop:o.headers?.[u]?.value?0:5},e.createElement(n.RemoveRoundedButton,{onClick:()=>r.headers.length!==1&&c(u),label:a({id:"Settings.webhooks.headers.remove",defaultMessage:"Remove header row {number}"},{number:u+1})})))))),e.createElement(D.P,{col:12},e.createElement(Le.A,{type:"button",onClick:()=>{s({key:"",value:""})},startIcon:e.createElement(Te.default,null)},a({id:"Settings.webhooks.create.header",defaultMessage:"Create new header"}))))})))},w=t(35331),$e=t(27169);const le=ye.default.svg(({theme:a,color:r})=>`
17
+ width: ${12/16}rem;
18
+ height: ${12/16}rem;
19
+
20
+ path {
21
+ fill: ${a.colors[r]};
22
+ }
23
+ `),y=({isPending:a,statusCode:r})=>{const{formatMessage:o}=(0,N.useIntl)();return a?e.createElement(W.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(le,{as:$e.Z}),e.createElement(F.Z,null,o({id:"Settings.webhooks.trigger.pending",defaultMessage:"pending"}))):r>=200&&r<300?e.createElement(W.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(le,{as:k.Z,color:"success700"}),e.createElement(F.Z,null,o({id:"Settings.webhooks.trigger.success",defaultMessage:"success"}))):r>=300?e.createElement(W.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(le,{as:w.default,color:"danger700"}),e.createElement(F.Z,null,o({id:"Settings.error",defaultMessage:"error"})," ",r)):null};y.propTypes={isPending:d().bool.isRequired,statusCode:d().number},y.defaultProps={statusCode:void 0};const se=({statusCode:a,message:r})=>{const{formatMessage:o}=(0,N.useIntl)();return a>=200&&a<300?e.createElement(z.k,{justifyContent:"flex-end"},e.createElement(F.Z,{textColor:"neutral600",ellipsis:!0},o({id:"Settings.webhooks.trigger.success.label",defaultMessage:"Trigger succeeded"}))):a>=300?e.createElement(z.k,{justifyContent:"flex-end"},e.createElement(z.k,{maxWidth:(0,n.pxToRem)(250),justifyContent:"flex-end",title:r},e.createElement(F.Z,{ellipsis:!0,textColor:"neutral600"},r))):null};se.propTypes={statusCode:d().number,message:d().string},se.defaultProps={statusCode:void 0,message:void 0};const Oe=({onCancel:a})=>{const{formatMessage:r}=(0,N.useIntl)();return e.createElement(z.k,{justifyContent:"flex-end"},e.createElement("button",{onClick:a,type:"button"},e.createElement(W.K,{horizontal:!0,spacing:2,style:{alignItems:"center"}},e.createElement(F.Z,{textColor:"neutral400"},r({id:"Settings.webhooks.trigger.cancel",defaultMessage:"cancel"})),e.createElement(le,{as:w.default,color:"neutral400"}))))};Oe.propTypes={onCancel:d().func.isRequired};const he=({isPending:a,onCancel:r,response:o})=>{const{statusCode:s,message:c}=o,{formatMessage:O}=(0,N.useIntl)();return e.createElement(ae.x,{background:"neutral0",padding:5,shadow:"filterShadow",hasRadius:!0},e.createElement(me.r,{gap:4,style:{alignItems:"center"}},e.createElement(D.P,{col:3},e.createElement(F.Z,null,O({id:"Settings.webhooks.trigger.test",defaultMessage:"Test-trigger"}))),e.createElement(D.P,{col:3},e.createElement(y,{isPending:a,statusCode:s})),e.createElement(D.P,{col:6},a?e.createElement(Oe,{onCancel:r}):e.createElement(se,{statusCode:s,message:c}))))};he.defaultProps={isPending:!1,onCancel(){},response:{}},he.propTypes={isPending:d().bool,onCancel:d().func,response:d().object};var $=he,B=t(5173);const H=/(^$)|(^[A-Za-z][_0-9A-Za-z ]*$)/,Be=/(^$)|((https?:\/\/.*)(d*)\/?(.*))/;var ie=B.Ry().shape({name:B.Z_(n.translatedErrors.string).required(n.translatedErrors.required).matches(H,n.translatedErrors.regex),url:B.Z_(n.translatedErrors.string).required(n.translatedErrors.required).matches(Be,n.translatedErrors.regex),headers:B.Vo(a=>{let r=B.IX();if(a.length===1){const{key:o,value:s}=a[0];if(!o&&!s)return r}return r.of(B.Ry().shape({key:B.Z_().required(n.translatedErrors.required),value:B.Z_().required(n.translatedErrors.required)}))}),events:B.IX()});const V=({handleSubmit:a,data:r,triggerWebhook:o,isCreating:s,isTriggering:c,triggerResponse:O,isDraftAndPublishEvents:u})=>{const{formatMessage:f}=(0,N.useIntl)(),[m,K]=(0,e.useState)(!1);return e.createElement(Z.Formik,{onSubmit:a,initialValues:{name:r?.name||"",url:r?.url||"",headers:Object.keys(r?.headers||[]).length?Object.entries(r.headers).map(([b,S])=>({key:b,value:S})):[{key:"",value:""}],events:r?.events||[]},validationSchema:ie,validateOnChange:!1,validateOnBlur:!1},({handleSubmit:b,errors:S})=>e.createElement(n.Form,{noValidate:!0},e.createElement(be.T,{primaryAction:e.createElement(W.K,{horizontal:!0,spacing:2},e.createElement(ue.z,{onClick:()=>{o(),K(!0)},variant:"tertiary",startIcon:e.createElement(ve,null),disabled:s||c,size:"L"},f({id:"Settings.webhooks.trigger",defaultMessage:"Trigger"})),e.createElement(ue.z,{startIcon:e.createElement(k.Z,null),onClick:b,type:"submit",size:"L"},f({id:"global.save",defaultMessage:"Save"}))),title:s?f({id:"Settings.webhooks.create",defaultMessage:"Create a webhook"}):r?.name,navigationAction:e.createElement(n.Link,{startIcon:e.createElement(h.Z,null),to:"/settings/webhooks"},f({id:"global.back",defaultMessage:"Back"}))}),e.createElement(Re.D,null,e.createElement(W.K,{spacing:4},m&&e.createElement("div",{className:"trigger-wrapper"},e.createElement($,{isPending:c,response:O,onCancel:()=>K(!1)})),e.createElement(ae.x,{background:"neutral0",padding:8,shadow:"filterShadow",hasRadius:!0},e.createElement(W.K,{spacing:6},e.createElement(me.r,{gap:6},e.createElement(D.P,{col:6},e.createElement(Z.Field,{as:Q.o,name:"name",error:S.name&&f({id:S.name}),label:f({id:"global.name",defaultMessage:"Name"}),required:!0})),e.createElement(D.P,{col:12},e.createElement(Z.Field,{as:Q.o,name:"url",error:S.url&&f({id:S.url}),label:f({id:"Settings.roles.form.input.url",defaultMessage:"Url"}),required:!0}))),e.createElement(xe,null),e.createElement(J,{isDraftAndPublish:u})))))))};V.propTypes={data:d().object,handleSubmit:d().func.isRequired,triggerWebhook:d().func.isRequired,isCreating:d().bool.isRequired,isDraftAndPublishEvents:d().bool.isRequired,isTriggering:d().bool.isRequired,triggerResponse:d().object},V.defaultProps={data:void 0,triggerResponse:void 0};var de=V,_=t(92891);const Se=a=>{const r={...a};return(0,_.set)(r,"headers",Ke(a.headers)),r},Ke=a=>a.reduce((r,o)=>{const{key:s,value:c}=o;return s!==""?{...r,[s]:c}:r},{});var Ee=Se,T=t(98399),Fe=()=>{const{params:{id:a}}=(0,x.useRouteMatch)("/settings/webhooks/:id"),{replace:r}=(0,x.useHistory)(),{lockApp:o,unlockApp:s}=(0,n.useOverlayBlocker)(),c=(0,n.useNotification)(),O=(0,P.useQueryClient)(),{isLoading:u,collectionTypes:f}=(0,E.bP)(),m=a==="create",K=(0,e.useCallback)(async j=>{const[X,{data:Ve}]=await(0,n.to)((0,n.request)(`/admin/webhooks/${j}`,{method:"GET"}));return X?(c({type:"warning",message:{id:"notification.error"}}),null):Ve},[c]),{isLoading:b,data:S}=(0,P.useQuery)(["get-webhook",a],()=>K(a),{enabled:!m}),{isLoading:v,data:ee,isIdle:l,mutate:g}=(0,P.useMutation)(()=>p.be.post(`/admin/webhooks/${a}/trigger`)),U=()=>g(null,{onError(){c({type:"warning",message:{id:"notification.error"}})}}),Y=(0,P.useMutation)(j=>(0,n.request)("/admin/webhooks",{method:"POST",body:j})),Ue=(0,P.useMutation)(({id:j,body:X})=>(0,n.request)(`/admin/webhooks/${j}`,{method:"PUT",body:X})),Ze=async j=>{m?(o(),Y.mutate(Ee(j),{onSuccess(X){c({type:"success",message:{id:"Settings.webhooks.created"}}),r(`/settings/webhooks/${X.data.id}`),s()},onError(X){c({type:"warning",message:{id:"notification.error"}}),T.log(X),s()}})):(o(),Ue.mutate({id:a,body:Ee(j)},{onSuccess(){O.invalidateQueries(["get-webhook",a]),c({type:"success",message:{id:"notification.form.success.fields"}}),s()},onError(X){c({type:"warning",message:{id:"notification.error"}}),T.log(X),s()}}))},ze=(0,e.useMemo)(()=>f.some(j=>j.options.draftAndPublish===!0),[f]);return b||u?e.createElement(n.LoadingIndicatorPage,null):e.createElement(L.o,null,e.createElement(n.SettingsPageTitle,{name:"Webhooks"}),e.createElement(de,{handleSubmit:Ze,data:S,triggerWebhook:U,isCreating:m,isTriggering:v,isTriggerIdle:l,triggerResponse:ee?.data.data,isDraftAndPublishEvents:ze}))}},33238:function(te,M,t){t.r(M);var e=t(32735),n=t(88425),L=t.n(n),P=t(83983),x=t(41513);const E=()=>e.createElement(n.CheckPagePermissions,{permissions:P.Z.settings.webhooks.create},e.createElement(x.Z,null));M.default=E},59021:function(te,M,t){t.r(M);var e=t(32735),n=t(88425),L=t.n(n),P=t(83983),x=t(41513);const E=()=>e.createElement(n.CheckPagePermissions,{permissions:P.Z.settings.webhooks.update},e.createElement(x.Z,null));M.default=E},21590:function(te,M,t){t.d(M,{h:function(){return G},X:function(){return ge}});var e=t(32735),n=t(60216),L=t(57269),P=t(59002),x=t(96892),E=t(94486);const p={Close:"Close",CloseSelect:"CloseSelect",First:"First",Last:"Last",Next:"Next",Open:"Open",PageDown:"PageDown",PageUp:"PageUp",Previous:"Previous",Select:"Select",Space:"Space",Type:"Type"},ne={Close:"Close",First:"First",Last:"Last",Next:"Next",Open:"Open",Previous:"Previous",Select:"Select",UpLevel:"UpLevel"};function d(i=[],C=null,A=[]){const q=String(C??"").toLowerCase();return q?i.filter(R=>R.props.children.toString().toLowerCase().includes(q)&&A.indexOf(R)<0):i}function h(i,C){if(!C&&i===E.y.DOWN)return p.Open;if(i===E.y.DOWN)return p.Next;if(i===E.y.UP)return p.Previous;if(i===E.y.HOME)return p.First;if(i===E.y.END)return p.Last;if(i===E.y.ESCAPE)return p.Close;if(i===E.y.ENTER)return p.CloseSelect;if(i===E.y.BACKSPACE||i===E.y.CLEAR||i.length===1)return p.Type}function k(i,C,A){switch(A){case p.First:return 0;case p.Last:return C;case p.Previous:return Math.max(0,i-1);case p.Next:return Math.min(C,i+1);default:return i}}function ce(i){x(i,{scrollMode:"if-needed",block:"nearest",inline:"nearest"}).forEach(({el:C,top:A,left:q})=>{C.scrollTop=A,C.scrollLeft=q})}var ve=t(87933),be=t(93958),Re=t(46406),ae=t(72850),ue=t(49372),W=t(97405),Q=t(91225),me=t(90333);const D=({options:i,activeOptionRef:C})=>((0,e.useEffect)(()=>{C.current&&ce(C.current)},[C]),i);D.defaultProps={activeOptionRef:void 0},D.propTypes={options:n.array.isRequired};var Z=t(87107),N=t(76437),Ce=t(67014),F=t(47851),ye=t(27677),Ie=t(3685);const G=({children:i,clearLabel:C,creatable:A,createMessage:q,disabled:R,error:pe,hasMoreItems:re,hint:fe,label:J,labelAction:Te,loading:z,loadingMessage:Le,noOptionsMessage:Ae,onChange:Me,onClear:ke,onCreateOption:Pe,onInputChange:oe,onLoadMore:De,placeholder:we,required:xe,value:w,...$e})=>{const le=()=>i.find(l=>l.props?.value.toLowerCase()===w.toLowerCase()).props?.children,[y,se]=(0,e.useState)(0),[Oe,he]=(0,e.useState)(null),[$,B]=(0,e.useState)(i),[H,Be]=(0,e.useState)(!1),[I,ie]=(0,e.useState)(""),V=(0,e.useRef)(),de=(0,e.useRef)(!1),_=(0,e.useRef)(),Se=(0,e.useRef)(),Ke=(0,e.useRef)(),Ee=(0,e.useRef)(!0),T=(0,P.M)("combobox"),We=`${T}-label`;if(!J&&!$e["aria-label"])throw new Error('The Combobox component needs a "label" or an "aria-label" props');(0,e.useEffect)(()=>{B(d(i,I))},[I,i]),(0,e.useEffect)(()=>{H&&V.current&&ce(V.current)},[y,H]),(0,e.useLayoutEffect)(()=>{Ee.current&&(Ee.current=!1)},[w]);const Fe=H?`${T}-${y}`:"",a=()=>{Me(null),ie("")},r=l=>{oe&&oe(l);const g=_.current.value;B(d(i,g)),se(0),he(null),I!==g&&ie(g),H||m(!0,!1)},o=l=>{const{key:g}=l,U=A&&I?$.length:$.length-1,Y=h(g,H);switch(w&&!I&&g===E.y.BACKSPACE&&a(),Y){case p.Next:{if(y===U){c(0);break}c(k(y,U,Y));break}case p.Previous:{if(y===0){c(U);break}c(k(y,U,Y));break}case p.Last:case p.First:{if(y===U){c(0);break}c(k(y,U,Y));break}case p.CloseSelect:l.preventDefault(),f(y);break;case p.Close:l.preventDefault(),m(!1);break;case p.Open:m(!0);break}},s=l=>{if(l.preventDefault(),w&&!de.current&&ie(""),de.current){de.current=!1;return}m(!1,!1)},c=l=>{se(l)},O=l=>{c(l),f(l)},u=()=>{de.current=!0},f=l=>{const g=$[l];if(ie(""),g){Me(g.props.value),m(!1);return}A&&(Pe(I),m(!1))},m=(l,g=!0)=>{Be(l),g&&_.current.focus()},K=e.Children.toArray($).map((l,g)=>{const U=y===g;return(0,e.cloneElement)(l,{id:`${T}-${g}`,"aria-selected":Oe===g,"aria-posinset":g+1,"aria-setsize":e.Children.toArray($).length,ref(Y){U&&(V.current=Y)},onClick:()=>O(g),onMouseDown:u,isSelected:U})}),b=()=>{_.current.focus(),ke&&ke(),a()},S=()=>{_.current.focus(),m(!0)},v=()=>{const l=$.findIndex(g=>g.props?.children===I);return I&&l===-1},ee=l=>{l.preventDefault(),m(l,!0)};return e.createElement(Z.g,{hint:fe,error:pe,id:T,required:xe},e.createElement(Ie.T,{"aria-live":"polite","aria-atomic":"false","aria-relevant":"additions text"},w),e.createElement(ye.K,{spacing:J||fe||pe?1:0},J&&e.createElement(N.Q,{action:Te},J),e.createElement(Q.d8,{ref:Se,$disabled:R,hasError:pe},e.createElement(Q.fv,{wrap:"wrap"},!I&&w&&e.createElement(Q.K7,{id:`${T}-selected-value`},e.createElement(ue.Z,null,le())),e.createElement(Q.II,{"aria-activedescendant":Fe,"aria-autocomplete":"list","aria-controls":`${T}-listbox`,"aria-disabled":R,"aria-expanded":H,"aria-haspopup":"listbox","aria-labelledby":J?We:void 0,autoComplete:"off",autoCorrect:"off",id:T,onBlur:R?void 0:s,onClick:R?void 0:ee,onInput:R?void 0:r,onKeyDown:R?void 0:o,placeholder:w?"":we,readOnly:R,ref:_,required:xe,role:"combobox",spellCheck:"off",type:"text",value:I})),e.createElement(ve.k,null,(w||I)&&e.createElement(be.zb,{id:`${T}-clear`,"aria-label":C,disabled:R,paddingLeft:3,as:"button",onClick:b,type:"button"},e.createElement(L.Cross,null)),e.createElement(be.AV,{disabled:R,paddingLeft:3,"aria-hidden":!0,as:"button",onClick:S,tabIndex:-1,type:"button"},e.createElement(L.CarretDown,null)))),e.createElement(Ce.J,null),e.createElement(F.c,null)),H&&e.createElement(Re.J,{id:`${T}-popover`,source:Se,spacing:4,fullWidth:!0,intersectionId:`${T}-listbox-popover-intersection`,onReachEnd:re&&!z?De:void 0},e.createElement("div",{role:"listbox",ref:Ke,id:`${T}-listbox`,"aria-labelledby":J?We:void 0},(Boolean($.length)||A)&&e.createElement(e.Fragment,null,e.createElement(D,{activeOptionRef:V,options:K}),v()&&A&&e.createElement(me.O,{isSelected:y===$.length,ref:l=>{y===$.length&&(V.current=l)},onMouseDown:u,onClick:()=>f(),taindex:0},q(I))),!$.length&&!A&&!z&&e.createElement(ae.x,{paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2,ref:V},e.createElement(ue.Z,{textColor:"neutral800"},Ae(I))),z&&e.createElement(ve.k,{justifyContent:"center",alignItems:"center",paddingTop:2,paddingBottom:2},e.createElement(W.a,{small:!0},Le)))))},ge=i=>e.createElement(G,{...i,creatable:!0});G.defaultProps={"aria-label":void 0,clearLabel:"clear",creatable:!1,createMessage:i=>`Create "${i}"`,disabled:!1,error:void 0,hasMoreItems:!1,hint:void 0,label:void 0,loading:!1,loadingMessage:"Loading content...",noOptionsMessage:()=>"No results found",onClear:void 0,onCreateOption:void 0,onInputChange:void 0,onLoadMore:void 0,placeholder:"Select or enter a value",value:void 0},ge.defaultProps=G.defaultProps,G.propTypes={"aria-label":n.string,children:n.oneOfType([n.arrayOf(n.node),n.node]),clearLabel:n.string,creatable:n.bool,createMessage:n.func,disabled:n.bool,error:n.string,hasMoreItems:n.bool,hint:n.oneOfType([n.string,n.node,n.arrayOf(n.node)]),label:n.string,labelAction:n.element,loading:n.bool,loadingMessage:n.string,noOptionsMessage:n.func,onChange:n.func.isRequired,onClear:n.func,onCreateOption:n.func,onInputChange:n.func,onLoadMore:n.func,placeholder:n.string,value:n.string},ge.propTypes={...G.propTypes,onCreateOption:n.func.isRequired}},90333:function(te,M,t){t.d(M,{O:function(){return x}});var e=t(32735),n=t(60216),L=t(49372),P=t(91225);const x=(0,e.forwardRef)(({isSelected:E,children:p,...ne},d)=>e.createElement(P.Zq,{hasRadius:!0,paddingLeft:4,paddingRight:4,paddingTop:2,paddingBottom:2,role:"option",background:"neutral0",isSelected:E,ref:d,...ne},e.createElement(L.Z,{textColor:E?"primary600":"neutral800",fontWeight:E?"bold":null},p)));x.defaultProps={isSelected:!1},x.propTypes={children:n.oneOfType([n.string,n.number]).isRequired,isSelected:n.bool},x.displayName="ComboboxOption"},91225:function(te,M,t){t.d(M,{II:function(){return ne},K7:function(){return E},Zq:function(){return d},d8:function(){return x},fv:function(){return p}});var e=t(83292),n=t(72850),L=t(87933),P=t(30350);const x=(0,e.default)(L.k)`
24
+ position: relative;
25
+ border: 1px solid ${({theme:h,hasError:k})=>k?h.colors.danger600:h.colors.neutral200};
26
+ padding-right: ${({theme:h})=>h.spaces[3]};
27
+ padding-left: ${({theme:h})=>h.spaces[3]};
28
+ border-radius: ${({theme:h})=>h.borderRadius};
29
+ background: ${({theme:h})=>h.colors.neutral0};
30
+
31
+ ${({theme:h,$disabled:k})=>k?`
32
+ color: ${h.colors.neutral600};
33
+ background: ${h.colors.neutral150};
34
+ `:void 0}
35
+
36
+ ${(0,P.k3)()}
37
+ `,E=e.default.div`
38
+ padding: 1px 2px;
39
+ grid-area: 1 / 1 / 2 / 3;
40
+ `,p=(0,e.default)(L.k)`
41
+ display: grid;
42
+ flex: 1 1 0%;
43
+ position: relative;
44
+ `,ne=e.default.input`
45
+ display: inline-grid;
46
+ grid-area: 1 / 1 / 2 / 3;
47
+ grid-template-columns: 0px min-content;
48
+ background: transparent;
49
+ min-height: ${40/16}rem;
50
+ border: none;
51
+ flex: 1;
52
+ font-size: ${14/16}rem;
53
+ color: ${({theme:h})=>h.colors.neutral800};
54
+ outline: none;
55
+ &:focus-visible {
56
+ outline: none;
57
+ box-shadow: none;
58
+ outline-offset: 0;
59
+ }
60
+ &[aria-disabled='true'] {
61
+ background: inherit;
62
+ color: inherit;
63
+ cursor: not-allowed;
64
+ }
65
+ `,d=(0,e.default)(n.x)`
66
+ width: 100%;
67
+ border: none;
68
+ text-align: left;
69
+ outline-offset: -3px;
70
+ ${({isSelected:h,theme:k})=>h&&`background: ${k.colors.primary100};`}
71
+
72
+ &:hover {
73
+ background: ${({theme:h})=>h.colors.primary100};
74
+ }
75
+ `},27169:function(te,M,t){t.d(M,{Z:function(){return n}});var e=t(74512);function n(L){return(0,e.jsx)("svg",{width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...L,children:(0,e.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M12.057 18c.552 0 1 .451 1 .997v4.006a1 1 0 01-.941.995l-.059.002c-.552 0-1-.451-1-.997v-4.006a1 1 0 01.941-.995l.06-.002zm-3.06-.736l.055.03c.478.276.64.89.367 1.364l-2.002 3.468a1 1 0 01-1.31.394l-.055-.03a1.002 1.002 0 01-.368-1.363l2.003-3.469a1 1 0 011.31-.394zm7.42.394l2.002 3.468a1 1 0 01-.314 1.331l-.053.033a1.002 1.002 0 01-1.365-.363l-2.003-3.469a1 1 0 01.314-1.33l.054-.034a1.002 1.002 0 011.364.364zm-9.548-2.66l.033.054c.276.478.11 1.091-.364 1.364L3.07 18.42a1 1 0 01-1.331-.314l-.033-.053a1.001 1.001 0 01.364-1.365l3.468-2.003a1 1 0 011.33.314zm11.79-.313l3.468 2.002a1 1 0 01.393 1.31l-.03.055c-.276.478-.89.64-1.363.367l-3.469-2.003a1 1 0 01-.394-1.309l.03-.055c.276-.479.89-.64 1.364-.367zm4.344-3.628a1 1 0 01.995.941l.002.06c0 .551-.451 1-.997 1h-4.006a1 1 0 01-.995-.942L18 12.057c0-.552.451-1 .997-1h4.006zm-18 0a1 1 0 01.995.941l.002.06c0 .551-.451 1-.998 1H.998a1 1 0 01-.996-.942L0 12.057c0-.552.451-1 .998-1h4.004zm17.454-5.059l.033.054c.277.478.11 1.091-.363 1.365l-3.469 2.002a1 1 0 01-1.33-.314l-.034-.053a1.002 1.002 0 01.364-1.365l3.468-2.003a1 1 0 011.331.314zM3.07 5.684l3.468 2.003a1 1 0 01.394 1.31l-.03.055c-.276.478-.89.64-1.364.367L2.07 7.417a1 1 0 01-.394-1.31l.03-.055c.276-.479.89-.64 1.364-.368zm14.926-4.008l.056.03c.478.276.64.89.367 1.364l-2.003 3.468a1 1 0 01-1.309.394l-.055-.03a1.002 1.002 0 01-.367-1.364l2.002-3.468a1 1 0 011.31-.394zm-10.58.394L9.42 5.538a1 1 0 01-.314 1.33l-.053.034a1.002 1.002 0 01-1.365-.364L5.684 3.07a1 1 0 01.314-1.331l.054-.033a1.002 1.002 0 011.365.364zM12.058 0c.552 0 1 .451 1 .998v4.004a1 1 0 01-.941.996L12.057 6c-.552 0-1-.451-1-.998V.998a1 1 0 01.941-.996l.06-.002z",fill:"#212134"})})}}}]);
@@ -0,0 +1,42 @@
1
+ "use strict";(self.webpackChunk_strapi_admin=self.webpackChunk_strapi_admin||[]).push([[4121],{74767:function(We,S,t){t.r(S),t.d(S,{default:function(){return ge}});var e=t(32735),s=t(88425),W=t(83983),B=t(5141),U=t(5636),F=t(96709),X=t(28356),j=t(99223),J=t(17e3),Q=t(9695),M=t(87933),Y=t(27677),A=t(50563),x=t(44426),q=t(94745),_=t(73269),ee=t(76330),$=t(29005),d=t(66735),te=t(3594),g=t(49372),H=t(41415),ne=t(3685),b=t(60216),P=t(83292),K=t(72850);const y=P.default.div`
2
+ background: ${({theme:a})=>a.colors.danger500};
3
+ border: none;
4
+ border-radius: 16px;
5
+ position: relative;
6
+ height: ${24/16}rem;
7
+ width: ${40/16}rem;
8
+
9
+ & span {
10
+ font-size: ${({visibleLabels:a})=>a?"1rem":0};
11
+ }
12
+
13
+ &:before {
14
+ content: '';
15
+ background: ${({theme:a})=>a.colors.neutral0};
16
+ width: 1rem;
17
+ height: 1rem;
18
+ border-radius: 50%;
19
+ position: absolute;
20
+ transition: all 0.5s;
21
+ left: ${({theme:a})=>a.spaces[1]};
22
+ top: ${({theme:a})=>a.spaces[1]};
23
+ }
24
+
25
+ @media (prefers-reduced-motion: reduce) {
26
+ &:before {
27
+ transition: none;
28
+ }
29
+ }
30
+ `,ae=P.default.button`
31
+ background: transparent;
32
+ padding: 0;
33
+ border: none;
34
+
35
+ &[aria-checked='true'] ${y} {
36
+ background: ${({theme:a})=>a.colors.success500};
37
+ }
38
+
39
+ &[aria-checked='true'] ${y}:before {
40
+ transform: translateX(1rem);
41
+ }
42
+ `,T=e.forwardRef(({label:a,onChange:i,onLabel:o,offLabel:r,selected:h,visibleLabels:m,...u},l)=>e.createElement(ae,{ref:l,role:"switch","aria-checked":h,"aria-label":a,onClick:i,visibleLabels:m,type:"button",...u},e.createElement(M.k,null,e.createElement(y,null,e.createElement("span",null,o),e.createElement("span",null,r)),m&&e.createElement(K.x,{as:"span","aria-hidden":!0,paddingLeft:2,color:h?"success600":"danger600"},h?o:r))));T.defaultProps={onLabel:"On",offLabel:"Off",visibleLabels:!1},T.propTypes={label:b.string.isRequired,offLabel:b.string,onChange:b.func.isRequired,onLabel:b.string,selected:b.bool.isRequired,visibleLabels:b.bool},T.displayName="Switch";var le=t(27649),oe=t(94638),C=t(19406),se=t(68625),G=t(4038),ie=t(54725),re=t(97889),de=t(3040),ce=t.n(de);const ue={webhooks:[],webhooksToDelete:[],webhookToDelete:null,loadingWebhooks:!0};var Ee=(a,i)=>(0,re.default)(a,o=>{switch(i.type){case"GET_DATA_SUCCEEDED":{o.webhooks=i.data,o.loadingWebhooks=!1;break}case"TOGGLE_LOADING":{o.loadingWebhooks=!a.loadingWebhooks;break}case"SET_WEBHOOK_ENABLED":{ce()(o,["webhooks",...i.keys],i.value);break}case"SET_WEBHOOK_TO_DELETE":{o.webhookToDelete=i.id;break}case"SET_WEBHOOKS_TO_DELETE":{i.value?o.webhooksToDelete.push(i.id):o.webhooksToDelete=a.webhooksToDelete.filter(r=>r!==i.id);break}case"SET_ALL_WEBHOOKS_TO_DELETE":{a.webhooksToDelete.length===0?o.webhooksToDelete=a.webhooks.map(r=>r.id):o.webhooksToDelete=[];break}case"WEBHOOKS_DELETED":{o.webhooks=a.webhooks.filter(r=>!a.webhooksToDelete.includes(r.id)),o.webhooksToDelete=[];break}case"WEBHOOK_DELETED":{o.webhooks=a.webhooks.filter((r,h)=>h!==i.index),o.webhookToDelete=null;break}default:return o}}),he=t(98399),me=()=>{const{isLoading:a,allowedActions:{canCreate:i,canRead:o,canUpdate:r,canDelete:h}}=(0,s.useRBAC)(W.Z.settings.webhooks),m=(0,s.useNotification)(),u=(0,e.useRef)(!0),{formatMessage:l}=(0,U.useIntl)(),[be,v]=(0,e.useState)(!1),[{webhooks:L,webhooksToDelete:O,webhookToDelete:p,loadingWebhooks:w},E]=(0,e.useReducer)(Ee,ue),{notifyStatus:fe}=(0,oe.G)();(0,s.useFocusWhenNavigate)();const{push:Te}=(0,B.useHistory)(),{pathname:N}=(0,B.useLocation)(),D=L.length,f=O.length,I=n=>L.findIndex(c=>c.id===n);(0,e.useEffect)(()=>(u.current=!0,()=>{u.current=!1}),[]),(0,e.useEffect)(()=>{o&&ve()},[o]);const ve=async()=>{try{const{data:n}=await(0,s.request)("/admin/webhooks",{method:"GET"});u.current&&(E({type:"GET_DATA_SUCCEEDED",data:n}),fe("webhooks have been loaded"))}catch(n){he.log(n),u.current&&(n.code!==20&&m({type:"warning",message:{id:"notification.error"}}),E({type:"TOGGLE_LOADING"}))}},Le=()=>{v(n=>!n)},De=()=>{p?ke():ye()},ke=async()=>{try{await(0,s.request)(`/admin/webhooks/${p}`,{method:"DELETE"}),E({type:"WEBHOOK_DELETED",index:I(p)})}catch(n){n.code!==20&&m({type:"warning",message:{id:"notification.error"}})}v(!1)},ye=async()=>{const n={ids:O};try{await(0,s.request)("/admin/webhooks/batch-delete",{method:"POST",body:n}),u.current&&E({type:"WEBHOOKS_DELETED"})}catch(c){u.current&&c.code!==20&&m({type:"warning",message:{id:"notification.error"}})}v(!1)},R=n=>{v(!0),n!=="all"&&E({type:"SET_WEBHOOK_TO_DELETE",id:n})},Ce=async(n,c)=>{const V=I(c),we=L[V],Z=[V,"isEnabled"],z={...we,isEnabled:n};delete z.id;try{E({type:"SET_WEBHOOK_ENABLED",keys:Z,value:n}),await(0,s.request)(`/admin/webhooks/${c}`,{method:"PUT",body:z})}catch(Se){u.current&&(E({type:"SET_WEBHOOK_ENABLED",keys:Z,value:!n}),Se.code!==20&&m({type:"warning",message:{id:"notification.error"}}))}},Oe=()=>{E({type:"SET_ALL_WEBHOOKS_TO_DELETE"})},pe=(n,c)=>{E({type:"SET_WEBHOOKS_TO_DELETE",value:n,id:c})},k=n=>{Te(`${N}/${n}`)};return e.createElement(F.A,null,e.createElement(s.SettingsPageTitle,{name:"Webhooks"}),e.createElement(le.o,{"aria-busy":a||w},e.createElement(X.T,{title:l({id:"Settings.webhooks.title",defaultMessage:"Webhooks"}),subtitle:l({id:"Settings.webhooks.list.description",defaultMessage:"Get POST changes notifications"}),primaryAction:i&&!w&&e.createElement(s.LinkButton,{startIcon:e.createElement(C.default,null),variant:"default",to:`${N}/create`,size:"S"},l({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))}),f>0&&h&&e.createElement(j.Z,{startActions:e.createElement(e.Fragment,null,e.createElement(g.Z,{variant:"epsilon",textColor:"neutral600"},l({id:"Settings.webhooks.to.delete",defaultMessage:"{webhooksToDeleteLength, plural, one {# asset} other {# assets}} selected"},{webhooksToDeleteLength:f})),e.createElement(H.z,{onClick:()=>R("all"),startIcon:e.createElement(G.default,null),size:"L",variant:"danger-light"},l({id:"global.delete",defaultMessage:"Delete"})))}),e.createElement(J.D,null,a||w?e.createElement(K.x,{background:"neutral0",padding:6,shadow:"filterShadow",hasRadius:!0},e.createElement(s.LoadingIndicatorPage,null)):e.createElement(e.Fragment,null,D>0?e.createElement(q.i,{colCount:5,rowCount:D+1,footer:e.createElement(_.c,{onClick:()=>i?k("create"):{},icon:e.createElement(C.default,null)},l({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))},e.createElement(ee.h,null,e.createElement($.Tr,null,e.createElement(d.Th,null,e.createElement(x.C,{"aria-label":l({id:"global.select-all-entries",defaultMessage:"Select all entries"}),indeterminate:f>0&&f<D,value:f===D,onValueChange:Oe})),e.createElement(d.Th,{width:"20%"},e.createElement(g.Z,{variant:"sigma",textColor:"neutral600"},l({id:"global.name",defaultMessage:"Name"}))),e.createElement(d.Th,{width:"60%"},e.createElement(g.Z,{variant:"sigma",textColor:"neutral600"},l({id:"Settings.webhooks.form.url",defaultMessage:"URL"}))),e.createElement(d.Th,{width:"20%"},e.createElement(g.Z,{variant:"sigma",textColor:"neutral600"},l({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"}))),e.createElement(d.Th,null,e.createElement(ne.T,null,l({id:"Settings.webhooks.list.th.actions",defaultMessage:"Actions"}))))),e.createElement(te.p,null,L.map(n=>e.createElement($.Tr,{key:n.id,...(0,s.onRowClick)({fn:()=>k(n.id),condition:r})},e.createElement(d.Td,{...s.stopPropagation},e.createElement(x.C,{"aria-label":`${l({id:"global.select",defaultMessage:"Select"})} ${n.name}`,value:O?.includes(n.id),onValueChange:c=>pe(c,n.id),id:"select",name:"select"})),e.createElement(d.Td,null,e.createElement(g.Z,{fontWeight:"semiBold",textColor:"neutral800"},n.name)),e.createElement(d.Td,null,e.createElement(g.Z,{textColor:"neutral800"},n.url)),e.createElement(d.Td,null,e.createElement(M.k,{...s.stopPropagation},e.createElement(T,{onLabel:l({id:"global.enabled",defaultMessage:"Enabled"}),offLabel:l({id:"global.disabled",defaultMessage:"Disabled"}),label:`${n.name} ${l({id:"Settings.webhooks.list.th.status",defaultMessage:"Status"})}`,selected:n.isEnabled,onChange:()=>Ce(!n.isEnabled,n.id),visibleLabels:!0}))),e.createElement(d.Td,null,e.createElement(Y.K,{horizontal:!0,spacing:1,...s.stopPropagation},r&&e.createElement(A.h,{onClick:()=>{k(n.id)},label:l({id:"Settings.webhooks.events.update",defaultMessage:"Update"}),icon:e.createElement(se.Z,null),noBorder:!0}),h&&e.createElement(A.h,{onClick:()=>R(n.id),label:l({id:"global.delete",defaultMessage:"Delete"}),icon:e.createElement(G.default,null),noBorder:!0,id:`delete-${n.id}`}))))))):e.createElement(Q.x,{icon:e.createElement(ie.default,{width:"160px"}),content:l({id:"Settings.webhooks.list.empty.description",defaultMessage:"No webhooks found"}),action:e.createElement(H.z,{variant:"secondary",startIcon:e.createElement(C.default,null),onClick:()=>i?k("create"):{}},l({id:"Settings.webhooks.list.button.add",defaultMessage:"Create new webhook"}))})))),e.createElement(s.ConfirmDialog,{isOpen:be,onToggleDialog:Le,onConfirm:De}))},ge=()=>e.createElement(s.CheckPagePermissions,{permissions:W.Z.settings.webhooks.main},e.createElement(me,null))}}]);
@@ -0,0 +1,17 @@
1
+ import adminPermissions from '../../../../../admin/src/permissions';
2
+
3
+ const auditLogsRoutes = strapi.features.isEnabled(strapi.features.AUDIT_LOGS)
4
+ ? [
5
+ {
6
+ intlLabel: { id: 'global.auditLogs', defaultMessage: 'Audit Logs' },
7
+ to: '/settings/audit-logs?pageSize=50&page=1&sort=date:DESC',
8
+ id: 'auditLogs',
9
+ isDisplayed: false,
10
+ permissions: adminPermissions.settings.auditLogs.main,
11
+ },
12
+ ]
13
+ : [];
14
+
15
+ const customAdminLinks = [...auditLogsRoutes];
16
+
17
+ export default customAdminLinks;
@@ -14,6 +14,10 @@ const Modal = ({ handleClose, logId }) => {
14
14
  const fetchAuditLog = async (id) => {
15
15
  const { data } = await get(`/admin/audit-logs/${id}`);
16
16
 
17
+ if (!data) {
18
+ throw new Error('Audit log not found');
19
+ }
20
+
17
21
  return data;
18
22
  };
19
23
 
@@ -46,7 +50,7 @@ const Modal = ({ handleClose, logId }) => {
46
50
 
47
51
  Modal.propTypes = {
48
52
  handleClose: PropTypes.func.isRequired,
49
- logId: PropTypes.number.isRequired,
53
+ logId: PropTypes.string.isRequired,
50
54
  };
51
55
 
52
56
  export default Modal;
@@ -1,4 +1,4 @@
1
- import React, { useState } from 'react';
1
+ import React from 'react';
2
2
  import { useIntl } from 'react-intl';
3
3
  import {
4
4
  SettingsPageTitle,
@@ -7,12 +7,13 @@ import {
7
7
  useNotification,
8
8
  useFocusWhenNavigate,
9
9
  useFetchClient,
10
+ useQueryParams,
10
11
  } from '@strapi/helper-plugin';
11
12
  import { HeaderLayout, ContentLayout } from '@strapi/design-system/Layout';
12
13
  import { Main } from '@strapi/design-system/Main';
13
14
  import { useLocation } from 'react-router-dom';
14
15
  import { useQuery } from 'react-query';
15
- import adminPermissions from '../../../../../permissions';
16
+ import adminPermissions from '../../../../../../../admin/src/permissions';
16
17
  import TableRows from './TableRows';
17
18
  import tableHeaders from './utils/tableHeaders';
18
19
  import PaginationFooter from './PaginationFooter';
@@ -26,6 +27,7 @@ const ListView = () => {
26
27
  } = useRBAC(adminPermissions.settings.auditLogs);
27
28
  const { get } = useFetchClient();
28
29
  const { search } = useLocation();
30
+ const [{ query }, setQuery] = useQueryParams();
29
31
 
30
32
  useFocusWhenNavigate();
31
33
 
@@ -40,7 +42,7 @@ const ListView = () => {
40
42
  enabled: canRead,
41
43
  keepPreviousData: true,
42
44
  retry: false,
43
- staleTime: 1000 * 20,
45
+ staleTime: 1000 * 10,
44
46
  onError() {
45
47
  toggleNotification({
46
48
  type: 'warning',
@@ -62,8 +64,6 @@ const ListView = () => {
62
64
  },
63
65
  }));
64
66
 
65
- const [modalLogId, setModalLogId] = useState(null);
66
-
67
67
  return (
68
68
  <Main aria-busy={isLoading}>
69
69
  <SettingsPageTitle name={title} />
@@ -85,12 +85,12 @@ const ListView = () => {
85
85
  <TableRows
86
86
  headers={headers}
87
87
  rows={data?.results || []}
88
- onOpenModal={(id) => setModalLogId(id)}
88
+ onOpenModal={(id) => setQuery({ id })}
89
89
  />
90
90
  </DynamicTable>
91
91
  <PaginationFooter pagination={data?.pagination} />
92
92
  </ContentLayout>
93
- {modalLogId && <Modal handleClose={() => setModalLogId(null)} logId={modalLogId} />}
93
+ {query?.id && <Modal handleClose={() => setQuery({ id: null }, 'remove')} logId={query.id} />}
94
94
  </Main>
95
95
  );
96
96
  };
@@ -7,6 +7,9 @@ const actionTypes = {
7
7
  'media.create': 'Create media',
8
8
  'media.update': 'Update media',
9
9
  'media.delete': 'Delete media',
10
+ 'media-folder.create': 'Create media folder',
11
+ 'media-folder.update': 'Update media folder',
12
+ 'media-folder.delete': 'Delete media folder',
10
13
  'user.create': 'Create user',
11
14
  'user.update': 'Update user',
12
15
  'user.delete': 'Delete user',
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { CheckPagePermissions } from '@strapi/helper-plugin';
3
- import adminPermissions from '../../../../../permissions';
3
+ import adminPermissions from '../../../../../../../admin/src/permissions';
4
4
  import ListView from '../ListView';
5
5
 
6
6
  const ProtectedListPage = () => (
@@ -17,9 +17,9 @@ import { Select, Option } from '@strapi/design-system/Select';
17
17
  import { Grid, GridItem } from '@strapi/design-system/Grid';
18
18
  import { useIntl } from 'react-intl';
19
19
  import isEqual from 'lodash/isEqual';
20
- import { getRequestUrl } from '../../../../../admin/src/utils';
21
- import { useRolesList, useSettingsForm } from '../../../../../admin/src/hooks';
22
- import adminPermissions from '../../../../../admin/src/permissions';
20
+ import { getRequestUrl } from '../../../../../../admin/src/utils';
21
+ import { useRolesList, useSettingsForm } from '../../../../../../admin/src/hooks';
22
+ import adminPermissions from '../../../../../../admin/src/permissions';
23
23
  import schema from './utils/schema';
24
24
 
25
25
  const ssoPermissions = {
@@ -1,19 +1,31 @@
1
- const ssoRoutes = strapi.features.isEnabled(strapi.features.SSO)
2
- ? [
3
- {
4
- async Component() {
5
- const component = await import(
6
- /* webpackChunkName: "sso-settings-page" */ '../SingleSignOn'
7
- );
1
+ const routes = [];
8
2
 
9
- return component;
10
- },
11
- to: '/settings/single-sign-on',
12
- exact: true,
13
- },
14
- ]
15
- : [];
3
+ if (strapi.features.isEnabled(strapi.features.SSO)) {
4
+ routes.push({
5
+ async Component() {
6
+ const component = await import(
7
+ /* webpackChunkName: "sso-settings-page" */ '../pages/SingleSignOn'
8
+ );
16
9
 
17
- const customRoutes = [...ssoRoutes];
10
+ return component;
11
+ },
12
+ to: '/settings/single-sign-on',
13
+ exact: true,
14
+ });
15
+ }
18
16
 
19
- export default customRoutes;
17
+ if (strapi.features.isEnabled(strapi.features.AUDIT_LOGS)) {
18
+ routes.push({
19
+ async Component() {
20
+ const component = await import(
21
+ /* webpackChunkName: "audit-logs-settings-page" */ '../pages/AuditLogs/ProtectedListPage'
22
+ );
23
+
24
+ return component;
25
+ },
26
+ to: '/settings/audit-logs',
27
+ exact: true,
28
+ });
29
+ }
30
+
31
+ export default routes;
@@ -17,5 +17,7 @@ module.exports = async () => {
17
17
  await actionProvider.registerMany(actions.auditLogs);
18
18
  }
19
19
 
20
+ // TODO: check admin seats
21
+
20
22
  await executeCEBootstrap();
21
23
  };
@@ -1,17 +1,13 @@
1
1
  'use strict';
2
2
 
3
- // eslint-disable-next-line node/no-extraneous-require
4
3
  const { features } = require('@strapi/strapi/lib/utils/ee');
5
- const featuresRoutes = require('./features-routes');
6
4
 
7
- const getFeaturesRoutes = () => {
8
- return Object.entries(featuresRoutes).flatMap(([featureName, featureRoutes]) => {
9
- if (features.isEnabled(featureName)) {
10
- return featureRoutes;
11
- }
5
+ const enableFeatureMiddleware = (featureName) => (ctx, next) => {
6
+ if (features.isEnabled(featureName)) {
7
+ return next();
8
+ }
12
9
 
13
- return [];
14
- });
10
+ ctx.status = 404;
15
11
  };
16
12
 
17
13
  module.exports = [
@@ -63,5 +59,93 @@ module.exports = [
63
59
  ],
64
60
  },
65
61
  },
66
- ...getFeaturesRoutes(),
62
+
63
+ // SSO
64
+ {
65
+ method: 'GET',
66
+ path: '/providers',
67
+ handler: 'authentication.getProviders',
68
+ config: {
69
+ middlewares: [enableFeatureMiddleware('sso')],
70
+ auth: false,
71
+ },
72
+ },
73
+ {
74
+ method: 'GET',
75
+ path: '/connect/:provider',
76
+ handler: 'authentication.providerLogin',
77
+ config: {
78
+ middlewares: [enableFeatureMiddleware('sso')],
79
+ auth: false,
80
+ },
81
+ },
82
+ {
83
+ method: 'POST',
84
+ path: '/connect/:provider',
85
+ handler: 'authentication.providerLogin',
86
+ config: {
87
+ middlewares: [enableFeatureMiddleware('sso')],
88
+ auth: false,
89
+ },
90
+ },
91
+ {
92
+ method: 'GET',
93
+ path: '/providers/options',
94
+ handler: 'authentication.getProviderLoginOptions',
95
+ config: {
96
+ middlewares: [enableFeatureMiddleware('sso')],
97
+ policies: [
98
+ 'admin::isAuthenticatedAdmin',
99
+ { name: 'admin::hasPermissions', config: { actions: ['admin::provider-login.read'] } },
100
+ ],
101
+ },
102
+ },
103
+ {
104
+ method: 'PUT',
105
+ path: '/providers/options',
106
+ handler: 'authentication.updateProviderLoginOptions',
107
+ config: {
108
+ middlewares: [enableFeatureMiddleware('sso')],
109
+ policies: [
110
+ 'admin::isAuthenticatedAdmin',
111
+ { name: 'admin::hasPermissions', config: { actions: ['admin::provider-login.update'] } },
112
+ ],
113
+ },
114
+ },
115
+
116
+ // Audit logs
117
+ {
118
+ method: 'GET',
119
+ path: '/audit-logs',
120
+ handler: 'auditLogs.findMany',
121
+ config: {
122
+ middlewares: [enableFeatureMiddleware('audit-logs')],
123
+ policies: [
124
+ 'admin::isAuthenticatedAdmin',
125
+ {
126
+ name: 'admin::hasPermissions',
127
+ config: {
128
+ actions: ['admin::audit-logs.read'],
129
+ },
130
+ },
131
+ ],
132
+ },
133
+ },
134
+ {
135
+ method: 'GET',
136
+ path: '/audit-logs/:id',
137
+ handler: 'auditLogs.findOne',
138
+ config: {
139
+ middlewares: [enableFeatureMiddleware('audit-logs')],
140
+ policies: [
141
+ 'admin::isAuthenticatedAdmin',
142
+ {
143
+ name: 'admin::hasPermissions',
144
+ config: {
145
+ actions: ['admin::audit-logs.read'],
146
+ },
147
+ },
148
+ ],
149
+ },
150
+ },
67
151
  ];
@@ -2,6 +2,9 @@
2
2
 
3
3
  const localProvider = require('@strapi/provider-audit-logs-local');
4
4
  const { scheduleJob } = require('node-schedule');
5
+ const { features } = require('@strapi/strapi/lib/utils/ee');
6
+
7
+ const DEFAULT_RETENTION_DAYS = 90;
5
8
 
6
9
  const defaultEvents = [
7
10
  'entry.create',
@@ -12,6 +15,9 @@ const defaultEvents = [
12
15
  'media.create',
13
16
  'media.update',
14
17
  'media.delete',
18
+ 'media-folder.create',
19
+ 'media-folder.update',
20
+ 'media-folder.delete',
15
21
  'user.create',
16
22
  'user.update',
17
23
  'user.delete',
@@ -59,6 +65,12 @@ const createAuditLogsService = (strapi) => {
59
65
  return null;
60
66
  }
61
67
 
68
+ // Ignore some events based on payload
69
+ const ignoredUids = ['plugin::upload.file', 'plugin::upload.folder'];
70
+ if (ignoredUids.includes(args[0]?.uid)) {
71
+ return null;
72
+ }
73
+
62
74
  return {
63
75
  action: name,
64
76
  date: new Date().toISOString(),
@@ -77,9 +89,15 @@ const createAuditLogsService = (strapi) => {
77
89
 
78
90
  return {
79
91
  async register() {
92
+ const retentionDays =
93
+ features.get('audit-logs')?.options.retentionDays ?? DEFAULT_RETENTION_DAYS;
80
94
  this._provider = await localProvider.register({ strapi });
81
95
  this._eventHubUnsubscribe = strapi.eventHub.subscribe(handleEvent.bind(this));
82
- this._deleteExpiredJob = scheduleJob('0 0 * * *', this._provider.deleteExpiredEvents);
96
+ this._deleteExpiredJob = scheduleJob('0 0 * * *', () => {
97
+ const expirationDate = new Date(Date.now() - retentionDays * 24 * 60 * 60 * 1000);
98
+ this._provider.deleteExpiredEvents(expirationDate);
99
+ });
100
+
83
101
  return this;
84
102
  },
85
103
 
@@ -1,13 +1,25 @@
1
1
  'use strict';
2
2
 
3
+ const ee = require('@strapi/strapi/ee');
3
4
  const { authEventsMapper } = require('../../../../server/services/passport');
4
5
  const createProviderRegistry = require('./provider-registry');
5
6
 
6
7
  const providerRegistry = createProviderRegistry();
8
+ const errorMessage = 'SSO is disabled. Its functionnalities cannot be accessed.';
7
9
 
8
- const getStrategyCallbackURL = (providerName) => `/admin/connect/${providerName}`;
10
+ const getStrategyCallbackURL = (providerName) => {
11
+ if (!ee.features.isEnabled('sso')) {
12
+ throw new Error(errorMessage);
13
+ }
14
+
15
+ return `/admin/connect/${providerName}`;
16
+ };
9
17
 
10
18
  const syncProviderRegistryWithConfig = () => {
19
+ if (!ee.features.isEnabled('sso')) {
20
+ throw new Error(errorMessage);
21
+ }
22
+
11
23
  const { providers = [] } = strapi.config.get('admin.auth', {});
12
24
 
13
25
  providerRegistry.registerMany(providers);
@@ -25,8 +25,5 @@ const getPassportStrategies = () => {
25
25
 
26
26
  module.exports = {
27
27
  getPassportStrategies,
28
+ ...sso,
28
29
  };
29
-
30
- if (features.isEnabled('sso')) {
31
- Object.assign(module.exports, sso);
32
- }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/admin",
3
- "version": "4.6.0-beta.2",
3
+ "version": "4.6.0",
4
4
  "description": "Strapi Admin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -45,21 +45,16 @@
45
45
  "@babel/runtime": "7.18.9",
46
46
  "@casl/ability": "^5.4.3",
47
47
  "@fingerprintjs/fingerprintjs": "3.3.6",
48
- "@fortawesome/fontawesome-free": "^5.15.3",
49
- "@fortawesome/fontawesome-svg-core": "6.2.0",
50
- "@fortawesome/free-brands-svg-icons": "^5.15.3",
51
- "@fortawesome/free-solid-svg-icons": "^5.15.3",
52
- "@fortawesome/react-fontawesome": "^0.2.0",
53
48
  "@pmmmwh/react-refresh-webpack-plugin": "0.5.10",
54
- "@strapi/babel-plugin-switch-ee-ce": "4.6.0-beta.2",
55
- "@strapi/data-transfer": "4.6.0-beta.2",
56
- "@strapi/design-system": "0.0.0-jsoninput.0",
57
- "@strapi/helper-plugin": "4.6.0-beta.2",
58
- "@strapi/icons": "1.4.2",
59
- "@strapi/permissions": "4.6.0-beta.2",
60
- "@strapi/provider-audit-logs-local": "4.6.0-beta.2",
61
- "@strapi/typescript-utils": "4.6.0-beta.2",
62
- "@strapi/utils": "4.6.0-beta.2",
49
+ "@strapi/babel-plugin-switch-ee-ce": "4.6.0",
50
+ "@strapi/data-transfer": "4.6.0",
51
+ "@strapi/design-system": "1.6.1",
52
+ "@strapi/helper-plugin": "4.6.0",
53
+ "@strapi/icons": "1.6.1",
54
+ "@strapi/permissions": "4.6.0",
55
+ "@strapi/provider-audit-logs-local": "4.6.0",
56
+ "@strapi/typescript-utils": "4.6.0",
57
+ "@strapi/utils": "4.6.0",
63
58
  "axios": "1.2.2",
64
59
  "babel-loader": "8.2.5",
65
60
  "babel-plugin-styled-components": "2.0.2",
@@ -170,5 +165,5 @@
170
165
  }
171
166
  }
172
167
  },
173
- "gitHead": "b852090f931cd21868c4016f24db2f9fdfc7a7ab"
168
+ "gitHead": "a9e55435c489f3379d88565bf3f729deb29bfb45"
174
169
  }