@strapi/admin 5.21.0 → 5.23.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 (132) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +38 -8
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +36 -6
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/GuidedTour/Context.js +23 -8
  6. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
  7. package/dist/admin/admin/src/components/GuidedTour/Context.mjs +23 -8
  8. package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/GuidedTour/Overview.js +7 -5
  10. package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
  11. package/dist/admin/admin/src/components/GuidedTour/Overview.mjs +7 -5
  12. package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.js +156 -0
  14. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.js.map +1 -0
  15. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs +154 -0
  16. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs.map +1 -0
  17. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.js +221 -0
  18. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.js.map +1 -0
  19. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.mjs +219 -0
  20. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.mjs.map +1 -0
  21. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js +219 -0
  22. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -0
  23. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs +217 -0
  24. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -0
  25. package/dist/admin/admin/src/components/GuidedTour/{Step.js → Steps/Step.js} +116 -71
  26. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -0
  27. package/dist/admin/admin/src/components/GuidedTour/{Step.mjs → Steps/Step.mjs} +117 -74
  28. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -0
  29. package/dist/admin/admin/src/components/GuidedTour/Tours.js +47 -322
  30. package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
  31. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +48 -324
  32. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
  33. package/dist/admin/admin/src/components/GuidedTour/utils/constants.js +19 -0
  34. package/dist/admin/admin/src/components/GuidedTour/utils/constants.js.map +1 -0
  35. package/dist/admin/admin/src/components/GuidedTour/utils/constants.mjs +17 -0
  36. package/dist/admin/admin/src/components/GuidedTour/utils/constants.mjs.map +1 -0
  37. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js +31 -0
  38. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js.map +1 -0
  39. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs +29 -0
  40. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs.map +1 -0
  41. package/dist/admin/admin/src/components/SubNav.js +3 -1
  42. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  43. package/dist/admin/admin/src/components/SubNav.mjs +3 -1
  44. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  45. package/dist/admin/admin/src/components/Widgets.js +27 -9
  46. package/dist/admin/admin/src/components/Widgets.js.map +1 -1
  47. package/dist/admin/admin/src/components/Widgets.mjs +28 -10
  48. package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
  49. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  50. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  51. package/dist/admin/admin/src/pages/Home/HomePage.js +40 -33
  52. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  53. package/dist/admin/admin/src/pages/Home/HomePage.mjs +41 -34
  54. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  55. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +17 -14
  56. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  57. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +17 -14
  58. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
  59. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +31 -6
  60. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  61. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +12 -6
  62. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +28 -24
  64. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +28 -24
  66. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  68. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +56 -57
  70. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +57 -58
  72. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  73. package/dist/admin/admin/src/services/apiTokens.js +0 -1
  74. package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
  75. package/dist/admin/admin/src/services/apiTokens.mjs +0 -1
  76. package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
  77. package/dist/admin/admin/src/translations/en.json.js +35 -21
  78. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  79. package/dist/admin/admin/src/translations/en.json.mjs +35 -21
  80. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  81. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js +131 -0
  82. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -0
  83. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs +129 -0
  84. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs.map +1 -0
  85. package/dist/admin/ee/admin/src/constants.js +3 -1
  86. package/dist/admin/ee/admin/src/constants.js.map +1 -1
  87. package/dist/admin/ee/admin/src/constants.mjs +3 -2
  88. package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
  89. package/dist/admin/index.js +6 -2
  90. package/dist/admin/index.js.map +1 -1
  91. package/dist/admin/index.mjs +2 -0
  92. package/dist/admin/index.mjs.map +1 -1
  93. package/dist/admin/src/components/GuidedTour/Context.d.ts +26 -9
  94. package/dist/admin/src/components/GuidedTour/Steps/ApiTokensSteps.d.ts +20 -0
  95. package/dist/admin/src/components/GuidedTour/Steps/ContentManagerSteps.d.ts +21 -0
  96. package/dist/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.d.ts +30 -0
  97. package/dist/admin/src/components/GuidedTour/{Step.d.ts → Steps/Step.d.ts} +25 -6
  98. package/dist/admin/src/components/GuidedTour/Tours.d.ts +53 -14
  99. package/dist/admin/src/components/GuidedTour/utils/constants.d.ts +15 -0
  100. package/dist/admin/src/components/GuidedTour/utils/migrations.d.ts +6 -0
  101. package/dist/admin/src/features/Tracking.d.ts +20 -2
  102. package/dist/admin/src/index.d.ts +5 -0
  103. package/dist/admin/src/pages/Home/HomePage.d.ts +2 -2
  104. package/dist/ee/admin/src/components/AuditLogs/Widgets.d.ts +2 -0
  105. package/dist/ee/admin/src/constants.d.ts +1 -0
  106. package/dist/server/server/src/controllers/admin.js +2 -5
  107. package/dist/server/server/src/controllers/admin.js.map +1 -1
  108. package/dist/server/server/src/controllers/admin.mjs +2 -5
  109. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  110. package/dist/server/server/src/services/index.js +0 -2
  111. package/dist/server/server/src/services/index.js.map +1 -1
  112. package/dist/server/server/src/services/index.mjs +0 -2
  113. package/dist/server/server/src/services/index.mjs.map +1 -1
  114. package/dist/server/src/controllers/admin.d.ts +1 -1
  115. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  116. package/dist/server/src/controllers/index.d.ts +1 -1
  117. package/dist/server/src/index.d.ts +1 -6
  118. package/dist/server/src/index.d.ts.map +1 -1
  119. package/dist/server/src/services/constants.d.ts +1 -0
  120. package/dist/server/src/services/guided-tour.d.ts +2 -3
  121. package/dist/server/src/services/guided-tour.d.ts.map +1 -1
  122. package/dist/server/src/services/index.d.ts +0 -5
  123. package/dist/server/src/services/index.d.ts.map +1 -1
  124. package/dist/shared/contracts/admin.d.ts +2 -2
  125. package/dist/shared/contracts/admin.d.ts.map +1 -1
  126. package/package.json +7 -7
  127. package/dist/admin/admin/src/components/GuidedTour/Step.js.map +0 -1
  128. package/dist/admin/admin/src/components/GuidedTour/Step.mjs.map +0 -1
  129. package/dist/server/server/src/services/guided-tour.js +0 -61
  130. package/dist/server/server/src/services/guided-tour.js.map +0 -1
  131. package/dist/server/server/src/services/guided-tour.mjs +0 -59
  132. package/dist/server/server/src/services/guided-tour.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TokenBox.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: ['didCopyApiToken'],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage: \"Make sure to copy this token, you won't be able to see it again!\",\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleClick(token)}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleClick","didCopy","type","payload","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","apiTokens","CopyAPIToken","Button","startIcon","Duplicate","onClick","marginTop","TokenBox","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":";;;;;;;;;;;;;;;AAmBA,MAAMA,mBAAAA,GAAsBC,aAAOC,CAAAA,uBAAAA,CAAW;;AAE9C,CAAC;MAEYC,WAAc,GAAA,CAAC,EAAEC,KAAK,EAAEC,SAAS,EAAiB,GAAA;IAC7D,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;IAC/B,MAAM,EAAEC,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;AACvB,IAAA,MAAMC,WAAWC,qBAAc,CAAA,UAAA,EAAY,CAACC,CAAAA,GAAMA,EAAEF,QAAQ,CAAA;IAE5D,MAAM,EAAEG,IAAI,EAAE,GAAGC,yBAAAA,EAAAA;IAEjB,MAAMC,WAAAA,GAAc,CAACb,KAAkC,GAAA,UAAA;AACrD,YAAA,IAAIA,KAAO,EAAA;gBACT,MAAMc,OAAAA,GAAU,MAAMH,IAAKX,CAAAA,KAAAA,CAAAA;AAE3B,gBAAA,IAAIc,OAAS,EAAA;AACXR,oBAAAA,UAAAA,CAAW,iBAAmB,EAAA;AAC5BL,wBAAAA;AACF,qBAAA,CAAA;oBACAO,QAAS,CAAA;wBACPO,IAAM,EAAA,uBAAA;wBACNC,OAAS,EAAA;AAAC,4BAAA;AAAkB;AAC9B,qBAAA,CAAA;oBACAZ,kBAAmB,CAAA;wBACjBW,IAAM,EAAA,SAAA;AACNE,wBAAAA,OAAAA,EAASf,aAAc,CAAA;4BAAEgB,EAAI,EAAA;AAAsC,yBAAA;AACrE,qBAAA,CAAA;AACF;AACF;AACF,SAAA;IAEA,qBACEC,cAAA,CAAAC,mBAAA,EAAA;AACE,QAAA,QAAA,gBAAAC,eAACC,CAAAA,iBAAAA,EAAAA;YACCC,MAAO,EAAA,aAAA;YACPC,SAAU,EAAA,QAAA;YACVC,UAAW,EAAA,OAAA;YACXC,SAAS,EAAA,IAAA;YACTC,OAAS,EAAA,CAAA;YACTC,UAAW,EAAA,UAAA;;8BAEXP,eAACC,CAAAA,iBAAAA,EAAAA;oBAAKE,SAAU,EAAA,QAAA;oBAASC,UAAW,EAAA,OAAA;oBAAQI,GAAK,EAAA,CAAA;oBAAGC,aAAe,EAAA,CAAA;;sCACjEX,cAACrB,CAAAA,uBAAAA,EAAAA;4BAAWiC,UAAW,EAAA,MAAA;sCACpB7B,aAAc,CAAA;gCACbgB,EAAI,EAAA,4BAAA;gCACJc,cAAgB,EAAA;AAClB,6BAAA;;sCAEFb,cAACrB,CAAAA,uBAAAA,EAAAA;sCACEI,aAAc,CAAA;gCACbgB,EAAI,EAAA,kCAAA;gCACJc,cAAgB,EAAA;AAClB,6BAAA;;;;8BAGJb,cAACc,CAAAA,gBAAAA,EAAAA;oBAAIL,UAAW,EAAA,YAAA;oBAAaF,SAAS,EAAA,IAAA;oBAACC,OAAS,EAAA,CAAA;oBAAGO,WAAY,EAAA,YAAA;AAC7D,oBAAA,QAAA,gBAAAf,cAACvB,CAAAA,mBAAAA,EAAAA;wBAAoBmC,UAAW,EAAA,UAAA;wBAAWI,OAAQ,EAAA,IAAA;AAChDnC,wBAAAA,QAAAA,EAAAA;;;8BAGLmB,cAACiB,CAAAA,WAAAA,CAAMC,SAAS,CAACC,YAAY,EAAA;AAC3B,oBAAA,QAAA,gBAAAnB,cAACoB,CAAAA,mBAAAA,EAAAA;AACCC,wBAAAA,SAAAA,gBAAWrB,cAACsB,CAAAA,eAAAA,EAAAA,EAAAA,CAAAA;wBACZN,OAAQ,EAAA,WAAA;AACRO,wBAAAA,OAAAA,EAAS7B,WAAYb,CAAAA,KAAAA,CAAAA;wBACrB2C,SAAW,EAAA,CAAA;kCAEVzC,aAAc,CAAA;4BAAEgB,EAAI,EAAA,2BAAA;4BAA6Bc,cAAgB,EAAA;AAAO,yBAAA;;;;;;AAMrF;MAEaY,QAAW,GAAA,CAAC,EAAE5C,KAAK,EAAEC,SAAS,EAAiB,GAAA;IAC1D,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;IAC/B,MAAM,EAAEC,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;IAEvB,MAAM,EAAEI,IAAI,EAAE,GAAGC,yBAAAA,EAAAA;IAEjB,MAAMC,WAAAA,GAAc,CAACb,KAAkC,GAAA,UAAA;AACrD,YAAA,IAAIA,KAAO,EAAA;gBACT,MAAMc,OAAAA,GAAU,MAAMH,IAAKX,CAAAA,KAAAA,CAAAA;AAE3B,gBAAA,IAAIc,OAAS,EAAA;AACXR,oBAAAA,UAAAA,CAAW,iBAAmB,EAAA;AAC5BL,wBAAAA;AACF,qBAAA,CAAA;oBACAG,kBAAmB,CAAA;wBACjBW,IAAM,EAAA,SAAA;AACNE,wBAAAA,OAAAA,EAASf,aAAc,CAAA;4BAAEgB,EAAI,EAAA;AAAsC,yBAAA;AACrE,qBAAA,CAAA;AACF;AACF;AACF,SAAA;AAEA,IAAA,qBACEC,cAAC0B,CAAAA,qBAAAA,EAAAA;AACCC,QAAAA,SAAAA,EACE9C,uBACEmB,cAAC4B,CAAAA,MAAAA,EAAAA;YAAKC,KAAO,EAAA;gBAAEC,SAAW,EAAA;AAAQ,aAAA;AAChC,YAAA,QAAA,gBAAA9B,cAAC+B,CAAAA,uBAAAA,EAAAA;AACCC,gBAAAA,KAAAA,EAAOjD,aAAc,CAAA;oBACnBgB,EAAI,EAAA,qCAAA;oBACJc,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAU,gBAAAA,OAAAA,EAAS7B,WAAYb,CAAAA,KAAAA,CAAAA;gBACrBmC,OAAQ,EAAA,OAAA;gBACRpB,IAAK,EAAA,QAAA;gBACLiC,KAAO,EAAA;oBAAErB,OAAS,EAAA,CAAA;oBAAGyB,MAAQ,EAAA;AAAS,iBAAA;AAEtC,gBAAA,QAAA,gBAAAjC,cAACsB,CAAAA,eAAAA,EAAAA,EAAAA;;;AAKTY,QAAAA,KAAAA,EACErD,SACAE,aAAc,CAAA;YACZgB,EAAI,EAAA,gCAAA;YACJc,cAAgB,EAAA;AAClB,SAAA,CAAA;QAEFsB,QACEtD,EAAAA,KAAAA,GACIE,aACED,CAAAA,SAAAA,KAAc,WACV,GAAA;YACEiB,EAAI,EAAA,+BAAA;YACJc,cAAgB,EAAA;SAElB,GAAA;YACEd,EAAI,EAAA,kCAAA;YACJc,cACE,EAAA;AACJ,SAAA,CAAA,GAEN9B,aAAc,CAAA;YACZgB,EAAI,EAAA,kCAAA;YACJc,cAAgB,EAAA;AAClB,SAAA,CAAA;AAENuB,QAAAA,IAAAA,gBAAMpC,cAACqC,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA;QACPC,cAAe,EAAA;;AAGrB;;;;;"}
1
+ {"version":3,"file":"TokenBox.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from '../../../../components/GuidedTour/utils/constants';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleCopyToken = async (token: TokenBoxProps['token']) => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.apiTokens.copyToken],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.apiTokens.copy.lastWarning',\n defaultMessage: 'Copy your API token',\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n handleCopyToken(token);\n }}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleCopyToken","didCopy","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","apiTokens","copyToken","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","CopyAPIToken","Button","startIcon","Duplicate","onClick","e","preventDefault","marginTop","TokenBox","handleClick","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":"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"}
@@ -7,6 +7,7 @@ import { styled } from 'styled-components';
7
7
  import { ContentBox } from '../../../../components/ContentBox.mjs';
8
8
  import { useGuidedTour } from '../../../../components/GuidedTour/Context.mjs';
9
9
  import { tours } from '../../../../components/GuidedTour/Tours.mjs';
10
+ import { GUIDED_TOUR_REQUIRED_ACTIONS } from '../../../../components/GuidedTour/utils/constants.mjs';
10
11
  import { useNotification } from '../../../../features/Notifications.mjs';
11
12
  import { useTracking } from '../../../../features/Tracking.mjs';
12
13
  import { useClipboard } from '../../../../hooks/useClipboard.mjs';
@@ -20,28 +21,28 @@ const ApiTokenBox = ({ token, tokenType })=>{
20
21
  const { trackUsage } = useTracking();
21
22
  const dispatch = useGuidedTour('TokenBox', (s)=>s.dispatch);
22
23
  const { copy } = useClipboard();
23
- const handleClick = (token)=>async ()=>{
24
- if (token) {
25
- const didCopy = await copy(token);
26
- if (didCopy) {
27
- trackUsage('didCopyTokenKey', {
28
- tokenType
29
- });
30
- dispatch({
31
- type: 'set_completed_actions',
32
- payload: [
33
- 'didCopyApiToken'
34
- ]
35
- });
36
- toggleNotification({
37
- type: 'success',
38
- message: formatMessage({
39
- id: 'Settings.tokens.notification.copied'
40
- })
41
- });
42
- }
24
+ const handleCopyToken = async (token)=>{
25
+ if (token) {
26
+ const didCopy = await copy(token);
27
+ if (didCopy) {
28
+ trackUsage('didCopyTokenKey', {
29
+ tokenType
30
+ });
31
+ dispatch({
32
+ type: 'set_completed_actions',
33
+ payload: [
34
+ GUIDED_TOUR_REQUIRED_ACTIONS.apiTokens.copyToken
35
+ ]
36
+ });
37
+ toggleNotification({
38
+ type: 'success',
39
+ message: formatMessage({
40
+ id: 'Settings.tokens.notification.copied'
41
+ })
42
+ });
43
43
  }
44
- };
44
+ }
45
+ };
45
46
  return /*#__PURE__*/ jsx(Fragment, {
46
47
  children: /*#__PURE__*/ jsxs(Flex, {
47
48
  shadow: "tableShadow",
@@ -66,8 +67,8 @@ const ApiTokenBox = ({ token, tokenType })=>{
66
67
  }),
67
68
  /*#__PURE__*/ jsx(Typography, {
68
69
  children: formatMessage({
69
- id: 'Settings.tokens.copy.lastWarning',
70
- defaultMessage: "Make sure to copy this token, you won't be able to see it again!"
70
+ id: 'Settings.apiTokens.copy.lastWarning',
71
+ defaultMessage: 'Copy your API token'
71
72
  })
72
73
  })
73
74
  ]
@@ -87,7 +88,10 @@ const ApiTokenBox = ({ token, tokenType })=>{
87
88
  children: /*#__PURE__*/ jsx(Button, {
88
89
  startIcon: /*#__PURE__*/ jsx(Duplicate, {}),
89
90
  variant: "secondary",
90
- onClick: handleClick(token),
91
+ onClick: (e)=>{
92
+ e.preventDefault();
93
+ handleCopyToken(token);
94
+ },
91
95
  marginTop: 6,
92
96
  children: formatMessage({
93
97
  id: 'Settings.tokens.copy.copy',
@@ -1 +1 @@
1
- {"version":3,"file":"TokenBox.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: ['didCopyApiToken'],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage: \"Make sure to copy this token, you won't be able to see it again!\",\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={handleClick(token)}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleClick","didCopy","type","payload","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","apiTokens","CopyAPIToken","Button","startIcon","Duplicate","onClick","marginTop","TokenBox","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":";;;;;;;;;;;;;AAmBA,MAAMA,mBAAAA,GAAsBC,MAAOC,CAAAA,UAAAA,CAAW;;AAE9C,CAAC;MAEYC,WAAc,GAAA,CAAC,EAAEC,KAAK,EAAEC,SAAS,EAAiB,GAAA;IAC7D,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AACvB,IAAA,MAAMC,WAAWC,aAAc,CAAA,UAAA,EAAY,CAACC,CAAAA,GAAMA,EAAEF,QAAQ,CAAA;IAE5D,MAAM,EAAEG,IAAI,EAAE,GAAGC,YAAAA,EAAAA;IAEjB,MAAMC,WAAAA,GAAc,CAACb,KAAkC,GAAA,UAAA;AACrD,YAAA,IAAIA,KAAO,EAAA;gBACT,MAAMc,OAAAA,GAAU,MAAMH,IAAKX,CAAAA,KAAAA,CAAAA;AAE3B,gBAAA,IAAIc,OAAS,EAAA;AACXR,oBAAAA,UAAAA,CAAW,iBAAmB,EAAA;AAC5BL,wBAAAA;AACF,qBAAA,CAAA;oBACAO,QAAS,CAAA;wBACPO,IAAM,EAAA,uBAAA;wBACNC,OAAS,EAAA;AAAC,4BAAA;AAAkB;AAC9B,qBAAA,CAAA;oBACAZ,kBAAmB,CAAA;wBACjBW,IAAM,EAAA,SAAA;AACNE,wBAAAA,OAAAA,EAASf,aAAc,CAAA;4BAAEgB,EAAI,EAAA;AAAsC,yBAAA;AACrE,qBAAA,CAAA;AACF;AACF;AACF,SAAA;IAEA,qBACEC,GAAA,CAAAC,QAAA,EAAA;AACE,QAAA,QAAA,gBAAAC,IAACC,CAAAA,IAAAA,EAAAA;YACCC,MAAO,EAAA,aAAA;YACPC,SAAU,EAAA,QAAA;YACVC,UAAW,EAAA,OAAA;YACXC,SAAS,EAAA,IAAA;YACTC,OAAS,EAAA,CAAA;YACTC,UAAW,EAAA,UAAA;;8BAEXP,IAACC,CAAAA,IAAAA,EAAAA;oBAAKE,SAAU,EAAA,QAAA;oBAASC,UAAW,EAAA,OAAA;oBAAQI,GAAK,EAAA,CAAA;oBAAGC,aAAe,EAAA,CAAA;;sCACjEX,GAACrB,CAAAA,UAAAA,EAAAA;4BAAWiC,UAAW,EAAA,MAAA;sCACpB7B,aAAc,CAAA;gCACbgB,EAAI,EAAA,4BAAA;gCACJc,cAAgB,EAAA;AAClB,6BAAA;;sCAEFb,GAACrB,CAAAA,UAAAA,EAAAA;sCACEI,aAAc,CAAA;gCACbgB,EAAI,EAAA,kCAAA;gCACJc,cAAgB,EAAA;AAClB,6BAAA;;;;8BAGJb,GAACc,CAAAA,GAAAA,EAAAA;oBAAIL,UAAW,EAAA,YAAA;oBAAaF,SAAS,EAAA,IAAA;oBAACC,OAAS,EAAA,CAAA;oBAAGO,WAAY,EAAA,YAAA;AAC7D,oBAAA,QAAA,gBAAAf,GAACvB,CAAAA,mBAAAA,EAAAA;wBAAoBmC,UAAW,EAAA,UAAA;wBAAWI,OAAQ,EAAA,IAAA;AAChDnC,wBAAAA,QAAAA,EAAAA;;;8BAGLmB,GAACiB,CAAAA,KAAAA,CAAMC,SAAS,CAACC,YAAY,EAAA;AAC3B,oBAAA,QAAA,gBAAAnB,GAACoB,CAAAA,MAAAA,EAAAA;AACCC,wBAAAA,SAAAA,gBAAWrB,GAACsB,CAAAA,SAAAA,EAAAA,EAAAA,CAAAA;wBACZN,OAAQ,EAAA,WAAA;AACRO,wBAAAA,OAAAA,EAAS7B,WAAYb,CAAAA,KAAAA,CAAAA;wBACrB2C,SAAW,EAAA,CAAA;kCAEVzC,aAAc,CAAA;4BAAEgB,EAAI,EAAA,2BAAA;4BAA6Bc,cAAgB,EAAA;AAAO,yBAAA;;;;;;AAMrF;MAEaY,QAAW,GAAA,CAAC,EAAE5C,KAAK,EAAEC,SAAS,EAAiB,GAAA;IAC1D,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;IAC/B,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;IAEvB,MAAM,EAAEI,IAAI,EAAE,GAAGC,YAAAA,EAAAA;IAEjB,MAAMC,WAAAA,GAAc,CAACb,KAAkC,GAAA,UAAA;AACrD,YAAA,IAAIA,KAAO,EAAA;gBACT,MAAMc,OAAAA,GAAU,MAAMH,IAAKX,CAAAA,KAAAA,CAAAA;AAE3B,gBAAA,IAAIc,OAAS,EAAA;AACXR,oBAAAA,UAAAA,CAAW,iBAAmB,EAAA;AAC5BL,wBAAAA;AACF,qBAAA,CAAA;oBACAG,kBAAmB,CAAA;wBACjBW,IAAM,EAAA,SAAA;AACNE,wBAAAA,OAAAA,EAASf,aAAc,CAAA;4BAAEgB,EAAI,EAAA;AAAsC,yBAAA;AACrE,qBAAA,CAAA;AACF;AACF;AACF,SAAA;AAEA,IAAA,qBACEC,GAAC0B,CAAAA,UAAAA,EAAAA;AACCC,QAAAA,SAAAA,EACE9C,uBACEmB,GAAC4B,CAAAA,MAAAA,EAAAA;YAAKC,KAAO,EAAA;gBAAEC,SAAW,EAAA;AAAQ,aAAA;AAChC,YAAA,QAAA,gBAAA9B,GAAC+B,CAAAA,UAAAA,EAAAA;AACCC,gBAAAA,KAAAA,EAAOjD,aAAc,CAAA;oBACnBgB,EAAI,EAAA,qCAAA;oBACJc,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACAU,gBAAAA,OAAAA,EAAS7B,WAAYb,CAAAA,KAAAA,CAAAA;gBACrBmC,OAAQ,EAAA,OAAA;gBACRpB,IAAK,EAAA,QAAA;gBACLiC,KAAO,EAAA;oBAAErB,OAAS,EAAA,CAAA;oBAAGyB,MAAQ,EAAA;AAAS,iBAAA;AAEtC,gBAAA,QAAA,gBAAAjC,GAACsB,CAAAA,SAAAA,EAAAA,EAAAA;;;AAKTY,QAAAA,KAAAA,EACErD,SACAE,aAAc,CAAA;YACZgB,EAAI,EAAA,gCAAA;YACJc,cAAgB,EAAA;AAClB,SAAA,CAAA;QAEFsB,QACEtD,EAAAA,KAAAA,GACIE,aACED,CAAAA,SAAAA,KAAc,WACV,GAAA;YACEiB,EAAI,EAAA,+BAAA;YACJc,cAAgB,EAAA;SAElB,GAAA;YACEd,EAAI,EAAA,kCAAA;YACJc,cACE,EAAA;AACJ,SAAA,CAAA,GAEN9B,aAAc,CAAA;YACZgB,EAAI,EAAA,kCAAA;YACJc,cAAgB,EAAA;AAClB,SAAA,CAAA;AAENuB,QAAAA,IAAAA,gBAAMpC,GAACqC,CAAAA,GAAAA,EAAAA,EAAAA,CAAAA;QACPC,cAAe,EAAA;;AAGrB;;;;"}
1
+ {"version":3,"file":"TokenBox.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/TokenBox.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { IconButton, Flex, Box, Typography, Button } from '@strapi/design-system';\nimport { Duplicate, Key } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ContentBox } from '../../../../components/ContentBox';\nimport { useGuidedTour } from '../../../../components/GuidedTour/Context';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { GUIDED_TOUR_REQUIRED_ACTIONS } from '../../../../components/GuidedTour/utils/constants';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useClipboard } from '../../../../hooks/useClipboard';\n\ninterface TokenBoxProps {\n token?: string;\n tokenType: 'transfer-token' | 'api-token';\n}\n\nconst TypographyWordBreak = styled(Typography)`\n word-break: break-all;\n`;\n\nexport const ApiTokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n const dispatch = useGuidedTour('TokenBox', (s) => s.dispatch);\n\n const { copy } = useClipboard();\n\n const handleCopyToken = async (token: TokenBoxProps['token']) => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n dispatch({\n type: 'set_completed_actions',\n payload: [GUIDED_TOUR_REQUIRED_ACTIONS.apiTokens.copyToken],\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <>\n <Flex\n shadow=\"tableShadow\"\n direction=\"column\"\n alignItems=\"start\"\n hasRadius\n padding={6}\n background=\"neutral0\"\n >\n <Flex direction=\"column\" alignItems=\"start\" gap={1} paddingBottom={4}>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'Settings.tokens.copy.title',\n defaultMessage: 'Token',\n })}\n </Typography>\n <Typography>\n {formatMessage({\n id: 'Settings.apiTokens.copy.lastWarning',\n defaultMessage: 'Copy your API token',\n })}\n </Typography>\n </Flex>\n <Box background=\"neutral100\" hasRadius padding={2} borderColor=\"neutral150\">\n <TypographyWordBreak fontWeight=\"semiBold\" variant=\"pi\">\n {token}\n </TypographyWordBreak>\n </Box>\n <tours.apiTokens.CopyAPIToken>\n <Button\n startIcon={<Duplicate />}\n variant=\"secondary\"\n onClick={(e: React.MouseEvent) => {\n e.preventDefault();\n handleCopyToken(token);\n }}\n marginTop={6}\n >\n {formatMessage({ id: 'Settings.tokens.copy.copy', defaultMessage: 'Copy' })}\n </Button>\n </tours.apiTokens.CopyAPIToken>\n </Flex>\n </>\n );\n};\n\nexport const TokenBox = ({ token, tokenType }: TokenBoxProps) => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { trackUsage } = useTracking();\n\n const { copy } = useClipboard();\n\n const handleClick = (token: TokenBoxProps['token']) => async () => {\n if (token) {\n const didCopy = await copy(token);\n\n if (didCopy) {\n trackUsage('didCopyTokenKey', {\n tokenType,\n });\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.tokens.notification.copied' }),\n });\n }\n }\n };\n\n return (\n <ContentBox\n endAction={\n token && (\n <span style={{ alignSelf: 'start' }}>\n <IconButton\n label={formatMessage({\n id: 'app.component.CopyToClipboard.label',\n defaultMessage: 'Copy to clipboard',\n })}\n onClick={handleClick(token)}\n variant=\"ghost\"\n type=\"button\"\n style={{ padding: 0, height: '1.6rem' }}\n >\n <Duplicate />\n </IconButton>\n </span>\n )\n }\n title={\n token ||\n formatMessage({\n id: 'Settings.tokens.copy.editTitle',\n defaultMessage: 'This token isn’t accessible anymore.',\n })\n }\n subtitle={\n token\n ? formatMessage(\n tokenType === 'api-token'\n ? {\n id: 'Settings.tokens.copy.subtitle',\n defaultMessage: 'Copy this token for use elsewhere',\n }\n : {\n id: 'Settings.tokens.copy.lastWarning',\n defaultMessage:\n 'Make sure to copy this token, you won’t be able to see it again!',\n }\n )\n : formatMessage({\n id: 'Settings.tokens.copy.editMessage',\n defaultMessage: 'For security reasons, you can only see your token once.',\n })\n }\n icon={<Key />}\n iconBackground=\"neutral100\"\n />\n );\n};\n"],"names":["TypographyWordBreak","styled","Typography","ApiTokenBox","token","tokenType","formatMessage","useIntl","toggleNotification","useNotification","trackUsage","useTracking","dispatch","useGuidedTour","s","copy","useClipboard","handleCopyToken","didCopy","type","payload","GUIDED_TOUR_REQUIRED_ACTIONS","apiTokens","copyToken","message","id","_jsx","_Fragment","_jsxs","Flex","shadow","direction","alignItems","hasRadius","padding","background","gap","paddingBottom","fontWeight","defaultMessage","Box","borderColor","variant","tours","CopyAPIToken","Button","startIcon","Duplicate","onClick","e","preventDefault","marginTop","TokenBox","handleClick","ContentBox","endAction","span","style","alignSelf","IconButton","label","height","title","subtitle","icon","Key","iconBackground"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EditViewPage.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { TokenBox, ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // lifespan must be \"null\" for unlimited (0 would mean instantly expired and isn't accepted)\n lifespan:\n body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = !!apiToken?.accessKey;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey && showToken && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","showToken","setShowToken","Boolean","hideTimerRef","useRef","trackUsage","useTracking","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidtionErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","schema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"EditViewPage.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n\n const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // lifespan must be \"null\" for unlimited (0 would mean instantly expired and isn't accepted)\n lifespan:\n body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = !!apiToken?.accessKey;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey && showToken && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","showToken","setShowToken","Boolean","hideTimerRef","useRef","trackUsage","useTracking","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidtionErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","schema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EditViewPage.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { TokenBox, ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // lifespan must be \"null\" for unlimited (0 would mean instantly expired and isn't accepted)\n lifespan:\n body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = !!apiToken?.accessKey;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey && showToken && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","showToken","setShowToken","Boolean","hideTimerRef","useRef","trackUsage","useTracking","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidtionErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","schema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"EditViewPage.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n\n const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // lifespan must be \"null\" for unlimited (0 would mean instantly expired and isn't accepted)\n lifespan:\n body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = !!apiToken?.accessKey;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey && showToken && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","showToken","setShowToken","Boolean","hideTimerRef","useRef","trackUsage","useTracking","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidtionErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","schema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAoCA;;;UAIaA,QAAW,GAAA,IAAA;IACtB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,KAAAA,EAAOC,aAAa,EAAE,GAAGC,WAAAA,EAAAA;AACjC,IAAA,MAAMC,cAAcC,gBAAiB,CAAA,CAACJ,QAAUA,KAAMK,CAAAA,SAAS,CAACF,WAAW,CAAA;IAC3E,MAAM,CAACG,UAAUC,WAAY,CAAA,GAAGC,MAAMC,QAAQ,CAC5CR,aAAeK,EAAAA,QAAAA,EAAUI,SACrB,GAAA;AACE,QAAA,GAAGT,cAAcK;KAEnB,GAAA,IAAA,CAAA;IAGN,MAAM,CAACK,WAAWC,YAAa,CAAA,GAAGJ,MAAMC,QAAQ,CAACI,OAAQZ,CAAAA,aAAAA,EAAeK,QAAUI,EAAAA,SAAAA,CAAAA,CAAAA;IAClF,MAAMI,YAAAA,GAAeN,KAAMO,CAAAA,MAAM,CAAuC,IAAA,CAAA;IACxE,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AACvB,IAAA,MAAM,EACJC,cAAgB,EAAA,EAAEC,SAAS,EAAEC,SAAS,EAAEC,aAAa,EAAE,EACxD,GAAGC,OAAQnB,CAAAA,WAAAA,CAAYoB,QAAQ,GAAG,YAAa,CAAA,CAAA;AAChD,IAAA,MAAM,CAACvB,KAAOwB,EAAAA,QAAAA,CAAS,GAAGhB,KAAMiB,CAAAA,UAAU,CAACC,OAASC,EAAAA,YAAAA,CAAAA;AACpD,IAAA,MAAMC,QAAQC,QAAS,CAAA,0BAAA,CAAA;IACvB,MAAMC,EAAAA,GAAKF,OAAOG,MAAQD,EAAAA,EAAAA;AAC1B,IAAA,MAAME,aAAaF,EAAO,KAAA,QAAA;AAC1B,IAAA,MAAM,EACJG,uBAAyBC,EAAAA,cAAc,EACvCC,+BAAiCC,EAAAA,qBAAqB,EACvD,GAAGC,kBAAAA,EAAAA;AAEJ,IAAA,MAAMC,QAAWC,GAAAA,WAAAA,EAAAA;AAEjB,IAAA,MAAMC,0BAA6BC,GAAAA,sBAAAA,EAAAA;AACnC,IAAA,MAAMC,qBAAwBC,GAAAA,iBAAAA,EAAAA;AAC9B;;;MAIAnC,KAAAA,CAAMoC,SAAS,CAAC,IAAA;QACd,IAAIJ,0BAAAA,CAA2BK,KAAK,EAAE;YACpC/C,kBAAmB,CAAA;gBACjBgD,IAAM,EAAA,QAAA;gBACNC,OAASb,EAAAA,cAAAA,CAAeM,2BAA2BK,KAAK;AAC1D,aAAA,CAAA;AACF;KACC,EAAA;AAACL,QAAAA,0BAAAA,CAA2BK,KAAK;AAAEX,QAAAA,cAAAA;AAAgBpC,QAAAA;AAAmB,KAAA,CAAA;AAEzEU,IAAAA,KAAAA,CAAMoC,SAAS,CAAC,IAAA;QACd,IAAIF,qBAAAA,CAAsBG,KAAK,EAAE;YAC/B/C,kBAAmB,CAAA;gBACjBgD,IAAM,EAAA,QAAA;gBACNC,OAASb,EAAAA,cAAAA,CAAeQ,sBAAsBG,KAAK;AACrD,aAAA,CAAA;AACF;KACC,EAAA;AAACH,QAAAA,qBAAAA,CAAsBG,KAAK;AAAEX,QAAAA,cAAAA;AAAgBpC,QAAAA;AAAmB,KAAA,CAAA;AAEpEU,IAAAA,KAAAA,CAAMoC,SAAS,CAAC,IAAA;QACd,IAAIJ,0BAAAA,CAA2BQ,IAAI,EAAE;YACnCxB,QAAS,CAAA;gBACPsB,IAAM,EAAA,2BAAA;AACNG,gBAAAA,KAAAA,EAAOT,2BAA2BQ;AACpC,aAAA,CAAA;AACF;KACC,EAAA;AAACR,QAAAA,0BAAAA,CAA2BQ;AAAK,KAAA,CAAA;AAEpCxC,IAAAA,KAAAA,CAAMoC,SAAS,CAAC,IAAA;QACd,IAAIF,qBAAAA,CAAsBM,IAAI,EAAE;YAC9BxB,QAAS,CAAA;gBACPsB,IAAM,EAAA,eAAA;AACNG,gBAAAA,KAAAA,EAAOP,sBAAsBM;AAC/B,aAAA,CAAA;AACF;KACC,EAAA;AAACN,QAAAA,qBAAAA,CAAsBM;AAAK,KAAA,CAAA;AAE/BxC,IAAAA,KAAAA,CAAMoC,SAAS,CAAC,IAAA;AACd,QAAA,IAAItC,QAAU,EAAA;YACZ,IAAIA,QAAAA,CAASwC,IAAI,KAAK,WAAa,EAAA;gBACjCtB,QAAS,CAAA;oBACPsB,IAAM,EAAA;AACR,iBAAA,CAAA;AACF;YACA,IAAIxC,QAAAA,CAASwC,IAAI,KAAK,aAAe,EAAA;gBACnCtB,QAAS,CAAA;oBACPsB,IAAM,EAAA;AACR,iBAAA,CAAA;AACF;YACA,IAAIxC,QAAAA,CAASwC,IAAI,KAAK,QAAU,EAAA;gBAC9BtB,QAAS,CAAA;oBACPsB,IAAM,EAAA,oBAAA;AACNG,oBAAAA,KAAAA,EAAO3C,QAAUH,EAAAA;AACnB,iBAAA,CAAA;AACF;AACF;KACC,EAAA;AAACG,QAAAA;AAAS,KAAA,CAAA;AAEbE,IAAAA,KAAAA,CAAMoC,SAAS,CAAC,IAAA;QACd5B,UAAWgB,CAAAA,UAAAA,GAAa,wBAAwB,sBAAwB,EAAA;YACtEkB,SAAWC,EAAAA;AACb,SAAA,CAAA;KACC,EAAA;AAACnB,QAAAA,UAAAA;AAAYhB,QAAAA;AAAW,KAAA,CAAA;IAE3B,MAAM,EAAEgC,IAAI,EAAEH,KAAK,EAAEO,SAAS,EAAE,GAAGC,mBAAAA,CAAoBvB,EAAK,EAAA;AAC1DwB,QAAAA,IAAAA,EAAM,CAACxB,EAAAA,IAAME,UAAc,IAAA,CAAC,CAAC1B;AAC/B,KAAA,CAAA;AAEAE,IAAAA,KAAAA,CAAMoC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIC,KAAO,EAAA;YACT/C,kBAAmB,CAAA;gBACjBgD,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASb,cAAeW,CAAAA,KAAAA;AAC1B,aAAA,CAAA;AACF;KACC,EAAA;AAACA,QAAAA,KAAAA;AAAOX,QAAAA,cAAAA;AAAgBpC,QAAAA;AAAmB,KAAA,CAAA;AAE9CU,IAAAA,KAAAA,CAAMoC,SAAS,CAAC,IAAA;AACd,QAAA,IAAII,IAAM,EAAA;YACRzC,WAAYyC,CAAAA,IAAAA,CAAAA;YAEZ,IAAIA,IAAAA,CAAKF,IAAI,KAAK,WAAa,EAAA;gBAC7BtB,QAAS,CAAA;oBACPsB,IAAM,EAAA;AACR,iBAAA,CAAA;AACF;YACA,IAAIE,IAAAA,CAAKF,IAAI,KAAK,aAAe,EAAA;gBAC/BtB,QAAS,CAAA;oBACPsB,IAAM,EAAA;AACR,iBAAA,CAAA;AACF;YACA,IAAIE,IAAAA,CAAKF,IAAI,KAAK,QAAU,EAAA;gBAC1BtB,QAAS,CAAA;oBACPsB,IAAM,EAAA,oBAAA;AACNG,oBAAAA,KAAAA,EAAOD,IAAM7C,EAAAA;AACf,iBAAA,CAAA;AACF;AACF;KACC,EAAA;AAAC6C,QAAAA;AAAK,KAAA,CAAA;AAETxC,IAAAA,KAAAA,CAAMoC,SAAS,CAAC,IAAA;;AAEd,QAAA,IAAIjC,SAAW,EAAA;YACbG,YAAayC,CAAAA,OAAO,GAAGC,UAAW,CAAA,IAAA;gBAChC5C,YAAa,CAAA,KAAA,CAAA;AACf,aAAA,EAAG;;YAGH,OAAO,IAAA;gBACL,IAAIE,YAAAA,CAAayC,OAAO,EAAE;AACxBE,oBAAAA,YAAAA,CAAa3C,aAAayC,OAAO,CAAA;AACjCzC,oBAAAA,YAAAA,CAAayC,OAAO,GAAG,IAAA;AACzB;AACF,aAAA;AACF;KACC,EAAA;AAAC5C,QAAAA;AAAU,KAAA,CAAA;IAEd,MAAM,CAAC+C,YAAY,GAAGC,yBAAAA,EAAAA;IACtB,MAAM,CAACC,YAAY,GAAGC,yBAAAA,EAAAA;IAOtB,MAAMC,YAAAA,GAAe,OAAOC,IAAkBC,EAAAA,MAAAA,GAAAA;QAC5ChD,UAAWgB,CAAAA,UAAAA,GAAa,oBAAoB,eAAiB,EAAA;YAC3DkB,SAAWC,EAAAA;AACb,SAAA,CAAA;QAEA,IAAI;AACF,YAAA,IAAInB,UAAY,EAAA;gBACd,MAAMiC,GAAAA,GAAM,MAAMP,WAAY,CAAA;AAC5B,oBAAA,GAAGK,IAAI;;AAEPG,oBAAAA,QAAAA,EACEH,IAAMG,EAAAA,QAAAA,IAAYH,IAAKG,CAAAA,QAAQ,KAAK,GAAA,GAAMC,QAASJ,CAAAA,IAAAA,CAAKG,QAAQ,CAACE,QAAQ,EAAA,EAAI,EAAM,CAAA,GAAA,IAAA;AACrFjE,oBAAAA,WAAAA,EAAa4D,KAAKjB,IAAI,KAAK,QAAW9C,GAAAA,KAAAA,CAAMqE,eAAe,GAAG;AAChE,iBAAA,CAAA;AAEA,gBAAA,IAAI,WAAWJ,GAAK,EAAA;oBAClB,IAAIK,gBAAAA,CAAiBL,IAAIpB,KAAK,CAAA,IAAKoB,IAAIpB,KAAK,CAAC0B,IAAI,KAAK,iBAAmB,EAAA;AACvEP,wBAAAA,MAAAA,CAAOQ,SAAS,CAACpC,qBAAsB6B,CAAAA,GAAAA,CAAIpB,KAAK,CAAA,CAAA;qBAC3C,MAAA;wBACL/C,kBAAmB,CAAA;4BACjBgD,IAAM,EAAA,QAAA;4BACNC,OAASb,EAAAA,cAAAA,CAAe+B,IAAIpB,KAAK;AACnC,yBAAA,CAAA;AACF;AAEA,oBAAA;AACF;gBAEA/C,kBAAmB,CAAA;oBACjBgD,IAAM,EAAA,SAAA;AACNC,oBAAAA,OAAAA,EAASnD,aAAc,CAAA;wBACrBkC,EAAI,EAAA,sCAAA;wBACJ2C,cAAgB,EAAA;AAClB,qBAAA;AACF,iBAAA,CAAA;AAEAzD,gBAAAA,UAAAA,CAAW,gBAAkB,EAAA;oBAC3B8B,IAAMmB,EAAAA,GAAAA,CAAIjB,IAAI,CAACF,IAAI;oBACnBI,SAAWC,EAAAA;AACb,iBAAA,CAAA;gBAEAb,QAAS,CAAA,CAAC,cAAc,EAAE2B,GAAIjB,CAAAA,IAAI,CAAClB,EAAE,CAACsC,QAAQ,EAAG,CAAA,CAAC,EAAE;oBAClDpE,KAAO,EAAA;AAAEM,wBAAAA,QAAAA,EAAU2D,IAAIjB;AAAK,qBAAA;oBAC5B0B,OAAS,EAAA;AACX,iBAAA,CAAA;aACK,MAAA;gBACL,MAAMT,GAAAA,GAAM,MAAML,WAAY,CAAA;oBAC5B9B,EAAIA,EAAAA,EAAAA;AACJyC,oBAAAA,IAAAA,EAAMR,KAAKQ,IAAI;AACfI,oBAAAA,WAAAA,EAAaZ,KAAKY,WAAW;AAC7B7B,oBAAAA,IAAAA,EAAMiB,KAAKjB,IAAI;AACf3C,oBAAAA,WAAAA,EAAa4D,KAAKjB,IAAI,KAAK,QAAW9C,GAAAA,KAAAA,CAAMqE,eAAe,GAAG;AAChE,iBAAA,CAAA;AAEA,gBAAA,IAAI,WAAWJ,GAAK,EAAA;oBAClB,IAAIK,gBAAAA,CAAiBL,IAAIpB,KAAK,CAAA,IAAKoB,IAAIpB,KAAK,CAAC0B,IAAI,KAAK,iBAAmB,EAAA;AACvEP,wBAAAA,MAAAA,CAAOQ,SAAS,CAACpC,qBAAsB6B,CAAAA,GAAAA,CAAIpB,KAAK,CAAA,CAAA;qBAC3C,MAAA;wBACL/C,kBAAmB,CAAA;4BACjBgD,IAAM,EAAA,QAAA;4BACNC,OAASb,EAAAA,cAAAA,CAAe+B,IAAIpB,KAAK;AACnC,yBAAA,CAAA;AACF;AAEA,oBAAA;AACF;gBAEA/C,kBAAmB,CAAA;oBACjBgD,IAAM,EAAA,SAAA;AACNC,oBAAAA,OAAAA,EAASnD,aAAc,CAAA;wBACrBkC,EAAI,EAAA,qCAAA;wBACJ2C,cAAgB,EAAA;AAClB,qBAAA;AACF,iBAAA,CAAA;AAEAzD,gBAAAA,UAAAA,CAAW,cAAgB,EAAA;oBACzB8B,IAAMmB,EAAAA,GAAAA,CAAIjB,IAAI,CAACF,IAAI;oBACnBI,SAAWC,EAAAA;AACb,iBAAA,CAAA;AACF;AACF,SAAA,CAAE,OAAM;YACNrD,kBAAmB,CAAA;gBACjBgD,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASnD,aAAc,CAAA;oBACrBkC,EAAI,EAAA,oBAAA;oBACJ2C,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACF;AACF,KAAA;AAEA,IAAA,MAAM,CAACG,qBAAuBC,EAAAA,wBAAAA,CAAyB,GAAGrE,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAEzE,IAAA,MAAMqE,uBAAuB,CAAC,EAC5BC,QAAQ,EAAE9B,KAAK,EAAE,EACmD,GAAA;QACpE4B,wBAAyB,CAAA,IAAA,CAAA;QACzBrD,QAAS,CAAA;YACPsB,IAAM,EAAA,WAAA;AACNG,YAAAA;AACF,SAAA,CAAA;AACF,KAAA;AAEA,IAAA,MAAM+B,gCAAgC,CAAC,EACrCD,QAAQ,EAAE9B,KAAK,EAAE,EAC4D,GAAA;QAC7E4B,wBAAyB,CAAA,IAAA,CAAA;QACzBrD,QAAS,CAAA;YACPsB,IAAM,EAAA,0BAAA;AACNG,YAAAA;AACF,SAAA,CAAA;AACF,KAAA;AAEA,IAAA,MAAMgC,oBAAoB,CAAC,EACzBF,QAAQ,EAAE9B,KAAK,EAAE,EAC4D,GAAA;QAC7EzB,QAAS,CAAA;YACPsB,IAAM,EAAA,qBAAA;AACNG,YAAAA;AACF,SAAA,CAAA;AACF,KAAA;AAEA,IAAA,MAAMiC,WAAc,GAAA,IAAA;QAClBtE,YAAa,CAAA,CAACuE,OAAS,CAACA,IAAAA,CAAAA;QACxB,IAAIrE,YAAAA,CAAayC,OAAO,EAAE;AACxBE,YAAAA,YAAAA,CAAa3C,aAAayC,OAAO,CAAA;AACjCzC,YAAAA,YAAAA,CAAayC,OAAO,GAAG,IAAA;AACzB;AACF,KAAA;AAEA,IAAA,MAAM6B,aAAgB,GAAA;AACpB,QAAA,GAAGpF,KAAK;QACRqF,QAAUP,EAAAA,oBAAAA;QACVQ,iBAAmBN,EAAAA,6BAAAA;AACnBC,QAAAA;AACF,KAAA;AAEA,IAAA,MAAMM,aAAgB,GAACnE,SAAa,IAAA,CAACY,cAAgBb,SAAaa,IAAAA,UAAAA;IAClE,MAAMwD,YAAAA,GAAe,CAAC,CAAClF,QAAUI,EAAAA,SAAAA;AAEjC,IAAA,IAAI0C,SAAW,EAAA;QACb,qBAAOqC,GAAA,CAACC,KAAKC,OAAO,EAAA,EAAA,CAAA;AACtB;AAEA,IAAA,qBACEF,GAACG,CAAAA,2BAAAA,EAAAA;QAA4B3C,KAAOmC,EAAAA,aAAAA;gCAClCS,IAAA,CAACH,KAAKI,IAAI,EAAA;;AACR,8BAAAL,GAAA,CAACC,KAAKK,KAAK,EAAA;8BACRnG,aACC,CAAA;wBAAEkC,EAAI,EAAA,oBAAA;wBAAsB2C,cAAgB,EAAA;qBAC5C,EAAA;wBAAEF,IAAM,EAAA;AAAa,qBAAA;;8BAGzBkB,GAACO,CAAAA,MAAAA,EAAAA;oBACCC,gBAAkBC,EAAAA,MAAAA;oBAClBC,gBAAkB,EAAA,KAAA;oBAClBC,aAAe,EAAA;AACb7B,wBAAAA,IAAAA,EAAMjE,UAAUiE,IAAQ,IAAA,EAAA;AACxBI,wBAAAA,WAAAA,EAAarE,UAAUqE,WAAe,IAAA,EAAA;AACtC7B,wBAAAA,IAAAA,EAAMxC,QAAUwC,EAAAA,IAAAA;AAChBoB,wBAAAA,QAAAA,EAAU5D,QAAU4D,EAAAA;AACtB,qBAAA;oBACAmC,kBAAkB,EAAA,IAAA;AAClBC,oBAAAA,QAAAA,EAAU,CAACvC,IAAAA,EAAMwC,OAAYzC,GAAAA,YAAAA,CAAaC,IAAMwC,EAAAA,OAAAA,CAAAA;8BAE/C,CAAC,EAAEC,MAAM,EAAEC,YAAY,EAAEC,YAAY,EAAEC,MAAM,EAAEC,aAAa,EAAE,GAAA;wBAC7D,IAAIhC,qBAAAA,IAAyB+B,MAAQ7D,EAAAA,IAAAA,KAAS,QAAU,EAAA;AACtD8D,4BAAAA,aAAAA,CAAc,MAAQ,EAAA,QAAA,CAAA;AACxB;AAEA,wBAAA,qBACEf,IAACgB,CAAAA,IAAAA,EAAAA;;8CACCpB,GAACqB,CAAAA,QAAAA,EAAAA;oCACCC,KAAO,EAAA;wCACLjF,EAAI,EAAA,qCAAA;wCACJ2C,cAAgB,EAAA;AAClB,qCAAA;oCACAuC,KAAO1G,EAAAA,QAAAA;oCACP2G,QAAU1G,EAAAA,WAAAA;oCACV2E,WAAaA,EAAAA,WAAAA;oCACbvE,SAAWA,EAAAA,SAAAA;oCACX4E,aAAeA,EAAAA,aAAAA;oCACflE,aAAeA,EAAAA,aAAAA;oCACfmE,YAAcA,EAAAA,YAAAA;oCACdkB,YAAcA,EAAAA,YAAAA;oCACdQ,aAAc,EAAA;;AAGhB,8CAAAzB,GAAA,CAAC0B,QAAQC,OAAO,EAAA;AACd,oCAAA,QAAA,gBAAAvB,IAACwB,CAAAA,IAAAA,EAAAA;wCAAKC,SAAU,EAAA,QAAA;wCAASC,UAAW,EAAA,SAAA;wCAAUC,GAAK,EAAA,CAAA;;AAChDlH,4CAAAA,QAAAA,EAAUI,aAAaC,SACtB,kBAAA8E,GAAA,CAAAgC,QAAA,EAAA;AACE,gDAAA,QAAA,gBAAAhC,GAACiC,CAAAA,WAAAA,EAAAA;AAAYV,oDAAAA,KAAAA,EAAO1G,SAASI,SAAS;oDAAEwC,SAAWC,EAAAA;;;0DAIvDsC,GAACkC,CAAAA,qBAAAA,EAAAA;gDACCnB,MAAQA,EAAAA,MAAAA;gDACRnB,QAAUoB,EAAAA,YAAAA;gDACVlB,aAAeA,EAAAA,aAAAA;gDACfvD,UAAYA,EAAAA,UAAAA;gDACZ2E,MAAQA,EAAAA,MAAAA;gDACRrG,QAAUA,EAAAA,QAAAA;gDACVsH,UAAYpG,EAAAA,QAAAA;gDACZqD,wBAA0BA,EAAAA;;0DAE5BY,GAACoC,CAAAA,WAAAA,EAAAA;AACCC,gDAAAA,QAAAA,EACE,CAACvC,aACDoB,IAAAA,MAAAA,EAAQ7D,IAAS,KAAA,WAAA,IACjB6D,QAAQ7D,IAAS,KAAA;;;;;;;AAO/B;;;;;AAKV;MAEaiF,iBAAoB,GAAA,IAAA;AAC/B,IAAA,MAAM5H,WAAcC,GAAAA,gBAAAA,CAClB,CAACJ,KAAAA,GAAUA,KAAMK,CAAAA,SAAS,CAACF,WAAW,CAACoB,QAAQ,GAAG,aAAa,CAACyG,IAAAA,CAAAA;IAGlE,qBACEvC,GAAA,CAACC,KAAKuC,OAAO,EAAA;QAAC9H,WAAaA,EAAAA,WAAAA;AACzB,QAAA,QAAA,gBAAAsF,GAAC9F,CAAAA,QAAAA,EAAAA,EAAAA;;AAGP;;;;"}