@zengenti/contensis-react-base 2.4.1-beta.7 → 2.5.1-beta.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 (225) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +89 -0
  3. package/cjs/{App-f3164dab.js → App-8f560cc5.js} +236 -22
  4. package/cjs/App-8f560cc5.js.map +1 -0
  5. package/cjs/{RouteLoader-5c44f039.js → RouteLoader-f99cd734.js} +14 -41
  6. package/cjs/RouteLoader-f99cd734.js.map +1 -0
  7. package/cjs/{ToJs-ca9bea03.js → ToJs-d72e5b10.js} +58 -2
  8. package/cjs/ToJs-d72e5b10.js.map +1 -0
  9. package/cjs/{actions-e22726ed.js → actions-e9f69947.js} +1 -1
  10. package/cjs/actions-e9f69947.js.map +1 -0
  11. package/cjs/client.js +121 -16
  12. package/cjs/client.js.map +1 -1
  13. package/cjs/contensis-react-base.js +128 -118
  14. package/cjs/contensis-react-base.js.map +1 -1
  15. package/cjs/forms.js +1 -1
  16. package/cjs/{login-6c0ef139.js → login-4f274c6a.js} +8 -5
  17. package/cjs/login-4f274c6a.js.map +1 -0
  18. package/cjs/reducers-cb531715.js +207 -0
  19. package/cjs/reducers-cb531715.js.map +1 -0
  20. package/cjs/redux.js +15 -16
  21. package/cjs/redux.js.map +1 -1
  22. package/cjs/routing.js +4 -5
  23. package/cjs/routing.js.map +1 -1
  24. package/cjs/search.js +6 -4
  25. package/cjs/search.js.map +1 -1
  26. package/cjs/{selectors-69c3d37c.js → selectors-1295124a.js} +9 -1
  27. package/cjs/selectors-1295124a.js.map +1 -0
  28. package/cjs/user.js +82 -27
  29. package/cjs/user.js.map +1 -1
  30. package/cjs/util.js +21 -91
  31. package/cjs/util.js.map +1 -1
  32. package/cjs/{injectors-72d5b989.js → version-3a808c12.js} +21 -6
  33. package/cjs/version-3a808c12.js.map +1 -0
  34. package/esm/{App-08311b77.js → App-d468b2a6.js} +223 -8
  35. package/esm/App-d468b2a6.js.map +1 -0
  36. package/esm/{RouteLoader-2cfdfc5c.js → RouteLoader-281d47e1.js} +14 -40
  37. package/esm/RouteLoader-281d47e1.js.map +1 -0
  38. package/esm/{ToJs-19a3244a.js → ToJs-6e7b247c.js} +47 -3
  39. package/esm/ToJs-6e7b247c.js.map +1 -0
  40. package/esm/{actions-fda5e103.js → actions-ddd9c623.js} +1 -1
  41. package/esm/actions-ddd9c623.js.map +1 -0
  42. package/esm/client.js +121 -16
  43. package/esm/client.js.map +1 -1
  44. package/esm/contensis-react-base.js +122 -112
  45. package/esm/contensis-react-base.js.map +1 -1
  46. package/esm/forms.js +1 -1
  47. package/esm/{login-c05fee0e.js → login-1f9ad133.js} +8 -6
  48. package/esm/login-1f9ad133.js.map +1 -0
  49. package/esm/reducers-feab84fc.js +183 -0
  50. package/esm/reducers-feab84fc.js.map +1 -0
  51. package/esm/redux.js +5 -6
  52. package/esm/redux.js.map +1 -1
  53. package/esm/routing.js +4 -5
  54. package/esm/routing.js.map +1 -1
  55. package/esm/search.js +6 -4
  56. package/esm/search.js.map +1 -1
  57. package/esm/{selectors-170581d2.js → selectors-68799788.js} +9 -1
  58. package/esm/selectors-68799788.js.map +1 -0
  59. package/esm/user.js +80 -29
  60. package/esm/user.js.map +1 -1
  61. package/esm/util.js +20 -90
  62. package/esm/util.js.map +1 -1
  63. package/esm/{injectors-3cbe3981.js → version-64906b26.js} +20 -5
  64. package/esm/version-64906b26.js.map +1 -0
  65. package/models/app/App.d.ts +4 -0
  66. package/models/app/pages/VersionInfo/components/VersionInfo.d.ts +40 -0
  67. package/models/app/pages/VersionInfo/components/VersionInfo.styled.d.ts +1 -0
  68. package/models/app/pages/VersionInfo/index.d.ts +2 -0
  69. package/models/app/pages/VersionInfo/transformations/state-to-versioninfoprops.mapper.d.ts +3 -0
  70. package/models/client/client.d.ts +11 -0
  71. package/models/client/index.d.ts +3 -0
  72. package/models/config.d.ts +33 -0
  73. package/models/forms/index.d.ts +1 -0
  74. package/models/index.d.ts +5 -0
  75. package/models/redux/actions/index.d.ts +9 -0
  76. package/models/redux/actions/navigation.d.ts +1 -0
  77. package/models/redux/actions/version.d.ts +2 -0
  78. package/models/redux/index.d.ts +17 -0
  79. package/models/redux/reducers/navigation.d.ts +3 -0
  80. package/models/redux/reducers/version.d.ts +3 -0
  81. package/models/redux/sagas/index.d.ts +1 -0
  82. package/models/redux/sagas/navigation.d.ts +4 -0
  83. package/models/redux/selectors/index.d.ts +9 -0
  84. package/models/redux/selectors/navigation.d.ts +3 -0
  85. package/models/redux/selectors/version.d.ts +3 -0
  86. package/models/redux/store/history.d.ts +2 -0
  87. package/models/redux/store/injectors.d.ts +19 -0
  88. package/models/redux/store/routerMiddleware.d.ts +7 -0
  89. package/models/redux/store/store.d.ts +3 -0
  90. package/models/redux/types/index.d.ts +9 -0
  91. package/models/redux/types/navigation.d.ts +3 -0
  92. package/models/redux/types/version.d.ts +2 -0
  93. package/models/redux/util.d.ts +1 -0
  94. package/models/routing/components/Loading.d.ts +5 -0
  95. package/models/routing/components/NotFound.d.ts +6 -0
  96. package/models/routing/components/RouteLoader.d.ts +3 -0
  97. package/models/routing/components/Status.d.ts +4 -0
  98. package/models/routing/index.d.ts +4 -0
  99. package/models/routing/redux/actions.d.ts +6 -0
  100. package/models/routing/redux/reducers.d.ts +4 -0
  101. package/models/routing/redux/sagas.d.ts +1 -0
  102. package/models/routing/redux/selectors.d.ts +25 -0
  103. package/models/routing/redux/types.d.ts +12 -0
  104. package/models/routing/routes.d.ts +98 -0
  105. package/models/routing/util/expressions.d.ts +2 -0
  106. package/models/routing/util/find-contenttype-mapping.d.ts +2 -0
  107. package/models/routing/util/queries.d.ts +2 -0
  108. package/models/search/containers/withListing.d.ts +4 -0
  109. package/models/search/containers/withSearch.d.ts +4 -0
  110. package/models/search/hooks/useMinilist.hook.d.ts +23 -0
  111. package/models/search/index.d.ts +16 -0
  112. package/models/search/models/Enums.d.ts +5 -0
  113. package/models/search/models/Queries.d.ts +43 -0
  114. package/models/search/models/Search.d.ts +180 -0
  115. package/models/search/models/SearchActions.d.ts +127 -0
  116. package/models/search/models/SearchProps.d.ts +45 -0
  117. package/models/search/models/SearchState.d.ts +83 -0
  118. package/models/search/models/SearchUtil.d.ts +6 -0
  119. package/models/search/models/index.d.ts +3 -0
  120. package/models/search/redux/actions.d.ts +39 -0
  121. package/models/search/redux/queries.d.ts +3 -0
  122. package/models/search/redux/reducers.d.ts +4 -0
  123. package/models/search/redux/sagas.d.ts +20 -0
  124. package/models/search/redux/schema.d.ts +9 -0
  125. package/models/search/redux/selectors.d.ts +112 -0
  126. package/models/search/redux/types.d.ts +20 -0
  127. package/models/search/redux/util.d.ts +25 -0
  128. package/models/search/search/ContensisDeliveryApi.d.ts +32 -0
  129. package/models/search/search/ToJs.d.ts +4 -0
  130. package/models/search/search/expressions.d.ts +29 -0
  131. package/models/search/search/performance.d.ts +1 -0
  132. package/models/search/search/schema.d.ts +28 -0
  133. package/models/search/search/util.d.ts +21 -0
  134. package/models/search/transformations/entry-to-filteritem.mapper.d.ts +2 -0
  135. package/models/search/transformations/filters-to-filterexpression.d.ts +1 -0
  136. package/models/search/transformations/filters-to-filterexpression.mapper.d.ts +2 -0
  137. package/models/search/transformations/searchresult-to-state.mapper.d.ts +6 -0
  138. package/models/search/transformations/state-to-queryparams.mapper.d.ts +12 -0
  139. package/models/search/transformations/state-to-searchuri.d.ts +14 -0
  140. package/models/server/features/caching/cacheDuration.schema.d.ts +7 -0
  141. package/models/server/features/caching/cacheHashing.d.ts +1 -0
  142. package/models/server/features/caching/setCachingHeaders.d.ts +6 -0
  143. package/models/server/features/response-handler/index.d.ts +12 -0
  144. package/models/server/features/response-handler/types.d.ts +5 -0
  145. package/models/server/features/reverse-proxy/index.d.ts +4 -0
  146. package/models/server/features/static-assets/index.d.ts +14 -0
  147. package/models/server/internalServer.d.ts +10 -0
  148. package/models/server/middleware/bundleManipulation.d.ts +6 -0
  149. package/models/server/middleware/resolveStartup.d.ts +13 -0
  150. package/models/server/util/bundles.d.ts +46 -0
  151. package/models/server/util/displayStartupConfiguration.d.ts +2 -0
  152. package/models/server/util/headers.d.ts +9 -0
  153. package/models/server/util/staticPaths.d.ts +1 -0
  154. package/models/server/util/stringifyAttributes.d.ts +2 -0
  155. package/models/server/webApp.d.ts +9 -0
  156. package/models/testImmer/redux/reducer.d.ts +8 -0
  157. package/models/testImmer/redux/selectors.d.ts +3 -0
  158. package/models/user/components/Login.d.ts +2 -0
  159. package/models/user/components/LoginForm.d.ts +16 -0
  160. package/models/user/components/LogoutForm.d.ts +12 -0
  161. package/models/user/components.styled/Login.styled.d.ts +2 -0
  162. package/models/user/components.styled/LoginForm.styled.d.ts +2 -0
  163. package/models/user/containers/ChangePassword.container.d.ts +2 -0
  164. package/models/user/containers/ForgotPassword.container.d.ts +2 -0
  165. package/models/user/containers/Login.container.d.ts +2 -0
  166. package/models/user/containers/Registration.container.d.ts +2 -0
  167. package/models/user/hocs/withLogin.d.ts +2 -0
  168. package/models/user/hocs/withRegistration.d.ts +2 -0
  169. package/models/user/hooks/useChangePassword.d.ts +9 -0
  170. package/models/user/hooks/useForgotPassword.d.ts +14 -0
  171. package/models/user/hooks/useLogin.d.ts +12 -0
  172. package/models/user/hooks/useRegistration.d.ts +8 -0
  173. package/models/user/index.d.ts +16 -0
  174. package/models/user/redux/actions.d.ts +6 -0
  175. package/models/user/redux/reducers.d.ts +4 -0
  176. package/models/user/redux/sagas/index.d.ts +1 -0
  177. package/models/user/redux/sagas/login.d.ts +36 -0
  178. package/models/user/redux/sagas/register.d.ts +1 -0
  179. package/models/user/redux/sagas/resetPassword.d.ts +1 -0
  180. package/models/user/redux/selectors.d.ts +27 -0
  181. package/models/user/redux/types.d.ts +21 -0
  182. package/models/user/transformations/mapClientCredentials.d.ts +2 -0
  183. package/models/user/util/ContensisManagementApi.d.ts +9 -0
  184. package/models/user/util/CookieHelper.class.d.ts +5 -0
  185. package/models/user/util/LoginHelper.class.d.ts +52 -0
  186. package/models/user/util/OidcUserManager.d.ts +18 -0
  187. package/models/user/util/matchGroups.d.ts +3 -0
  188. package/models/user/util/userHelper.d.ts +12 -0
  189. package/models/util/ContensisDeliveryApi.d.ts +40 -0
  190. package/models/util/ToJs.d.ts +1 -0
  191. package/models/util/fromJSLeaveImmer.d.ts +2 -0
  192. package/models/util/fromJSOrdered.d.ts +2 -0
  193. package/models/util/index.d.ts +5 -0
  194. package/models/util/json-mapper.d.ts +81 -0
  195. package/models/util/navHelper.d.ts +7 -0
  196. package/models/util/navigation.d.ts +4 -0
  197. package/models/util/performance.d.ts +1 -0
  198. package/models/util/pickProject.d.ts +2 -0
  199. package/models/{schema.d.ts → util/schema.d.ts} +0 -0
  200. package/models/util/stringifyStrings.d.ts +2 -0
  201. package/models/util/urls.d.ts +9 -0
  202. package/package-lock.json +7831 -7713
  203. package/package.json +24 -14
  204. package/cjs/App-f3164dab.js.map +0 -1
  205. package/cjs/RouteLoader-5c44f039.js.map +0 -1
  206. package/cjs/ToJs-ca9bea03.js.map +0 -1
  207. package/cjs/actions-e22726ed.js.map +0 -1
  208. package/cjs/injectors-72d5b989.js.map +0 -1
  209. package/cjs/login-6c0ef139.js.map +0 -1
  210. package/cjs/reducers-91e3e239.js +0 -119
  211. package/cjs/reducers-91e3e239.js.map +0 -1
  212. package/cjs/selectors-69c3d37c.js.map +0 -1
  213. package/cjs/version-7d8852f6.js +0 -23
  214. package/cjs/version-7d8852f6.js.map +0 -1
  215. package/esm/App-08311b77.js.map +0 -1
  216. package/esm/RouteLoader-2cfdfc5c.js.map +0 -1
  217. package/esm/ToJs-19a3244a.js.map +0 -1
  218. package/esm/actions-fda5e103.js.map +0 -1
  219. package/esm/injectors-3cbe3981.js.map +0 -1
  220. package/esm/login-c05fee0e.js.map +0 -1
  221. package/esm/reducers-f855681f.js +0 -108
  222. package/esm/reducers-f855681f.js.map +0 -1
  223. package/esm/selectors-170581d2.js.map +0 -1
  224. package/esm/version-937d57fb.js +0 -19
  225. package/esm/version-937d57fb.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"contensis-react-base.js","sources":["../src/server/util/displayStartupConfiguration.js","../src/server/features/reverse-proxy/index.js","../src/server/features/caching/cacheDuration.schema.js","../src/server/util/staticPaths.js","../src/server/middleware/bundleManipulation.js","../src/server/middleware/resolveStartup.js","../src/server/features/static-assets/index.js","../node_modules/fromentries/index.js","../src/user/redux/sagas/index.js","../src/redux/sagas/index.js","../src/server/features/response-handler/types.js","../src/server/features/response-handler/index.js","../src/server/util/stringifyAttributes.js","../src/server/webApp.js","../src/server/internalServer.js"],"sourcesContent":["const servers = SERVERS; /* global SERVERS */\nconst projects = PROJECTS; /* global PROJECTS */\n\nconst DisplayStartupConfiguration = config => {\n /* eslint-disable no-console */\n console.log();\n console.log(\n `Configured servers:\n`,\n JSON.stringify(servers, null, 2)\n );\n console.log();\n console.log(\n `Configured projects:\n`,\n JSON.stringify(projects, null, 2)\n );\n console.log();\n console.log(\n 'Reverse proxy paths: ',\n JSON.stringify(config.reverseProxyPaths, null, 2)\n );\n console.log();\n\n /* eslint-enable no-console */\n};\n\nexport default DisplayStartupConfiguration;\n","import httpProxy from 'http-proxy';\n\nconst servers = SERVERS; /* global SERVERS */\nexport const apiProxy = httpProxy.createProxyServer();\n\nconst reverseProxies = (app, reverseProxyPaths) => {\n deliveryApiProxy(apiProxy, app);\n\n app.all(reverseProxyPaths, (req, res) => {\n const target =\n req.hostname.indexOf('preview-') ||\n req.hostname.indexOf('preview.') ||\n req.hostname === 'localhost'\n ? servers.previewIis || servers.iis\n : servers.iis;\n\n apiProxy.web(req, res, { target, changeOrigin: true });\n apiProxy.on('error', e => {\n /* eslint-disable no-console */\n console.log(\n `Proxy Request for ${req.path} HostName:${req.hostname} failed with ${e}`\n );\n /* eslint-enable no-console */\n });\n });\n};\n\nconst deliveryApiProxy = (apiProxy, app) => {\n // This is just here to stop cors requests on localhost. In Production this is mapped using varnish.\n app.all(['/api/delivery/*', '/api/image/*'], (req, res) => {\n /* eslint-disable no-console */\n const target = servers.cms;\n console.log(`Proxying api request to ${servers.alias}`);\n apiProxy.web(req, res, {\n target,\n changeOrigin: true,\n });\n apiProxy.on('error', e => {\n /* eslint-disable no-console */\n console.log(\n `Proxy request for ${req.path} HostName:${req.hostname} failed with ${e}`\n );\n /* eslint-enable no-console */\n });\n });\n};\n\nexport default reverseProxies;\n","export const CacheDuration = {\n 200: '3600',\n 404: '5',\n static: '31536000', // Believe it or not these two max ages are the same in runtime\n expressStatic: '31557600h', // Believe it or not these two max ages are the same in runtime\n};\n\nexport const getCacheDuration = (status = 200) => {\n if (status > 400) return CacheDuration[404];\n return CacheDuration[200];\n};\n","export const replaceStaticPath = (string, staticFolderPath = 'static') =>\n string.replace(/static\\//g, `${staticFolderPath}/`);\n","import fs from 'fs';\nimport path from 'path';\nimport { replaceStaticPath } from '../util/staticPaths';\n\nexport const bundleManipulationMiddleware =\n ({ appRootPath, maxage, staticRoutePath }) =>\n (req, res, next) => {\n const filename = path.basename(req.path);\n const modernBundle = filename.endsWith('.mjs');\n const legacyBundle = filename.endsWith('.js');\n if ((legacyBundle || modernBundle) && filename.startsWith('runtime.')) {\n const jsRuntimeLocation = path.resolve(\n appRootPath,\n `dist/static/${modernBundle ? 'modern/js' : 'legacy/js'}/${filename}`\n );\n try {\n const jsRuntimeBundle = fs.readFileSync(jsRuntimeLocation, 'utf8');\n const modifiedBundle = replaceStaticPath(\n jsRuntimeBundle,\n staticRoutePath\n );\n if (maxage) res.set('Cache-Control', `public, max-age=${maxage}`);\n res.type('.js').send(modifiedBundle);\n return;\n } catch (readError) {\n // eslint-disable-next-line no-console\n console.log(\n `Unable to find js runtime bundle at '${jsRuntimeLocation}'`,\n readError\n );\n next();\n }\n } else {\n next();\n }\n };\n","import path from 'path';\n\n/**\n *\n * @param { appRootPath: string; maxage: number; staticFolderPath: string, startupScriptFilename: string } args\n * @returns Response | next()\n * A middleware function to resolve /dist/static/startup.js under a supplied startupScriptFilename variable\n */\nexport const resolveStartupMiddleware = ({\n appRootPath,\n maxage,\n staticFolderPath,\n startupScriptFilename,\n}) => (req, res, next) => {\n if (\n startupScriptFilename !== 'startup.js' &&\n req.path === `/${startupScriptFilename}`\n ) {\n const startupFilePath = `dist/${staticFolderPath}/startup.js`;\n const startupFileLocation = path.resolve(appRootPath, startupFilePath);\n\n if (maxage) res.set('Cache-Control', `public, max-age=${maxage}`);\n\n try {\n res.sendFile(startupFileLocation);\n } catch (sendFileError) {\n // eslint-disable-next-line no-console\n console.log(\n `Unable to send file startup.js at '${startupFileLocation}'`,\n sendFileError\n );\n next();\n }\n } else {\n next();\n }\n};\n","import express from 'express';\nimport { CacheDuration } from '~/server/features/caching/cacheDuration.schema';\nimport { bundleManipulationMiddleware } from '~/server/middleware/bundleManipulation';\nimport { resolveStartupMiddleware } from '~/server/middleware/resolveStartup';\n\n// Serving static assets\nconst staticAssets = (\n app,\n {\n appRootPath = require('app-root-path').path,\n scripts = {},\n startupScriptFilename = 'startup.js',\n staticFolderPath = 'static',\n staticRoutePath = 'static',\n staticRoutePaths = [],\n }\n) => {\n app.use(\n [\n `/${staticRoutePath}`,\n ...staticRoutePaths.map(p => `/${p}`),\n `/${staticFolderPath}`,\n ],\n bundleManipulationMiddleware({\n appRootPath,\n // these maxage values are different in config but the same in runtime,\n // this one is the true value in seconds\n maxage: CacheDuration.static,\n staticRoutePath,\n }),\n resolveStartupMiddleware({\n appRootPath,\n maxage: CacheDuration.static,\n startupScriptFilename: scripts.startup || startupScriptFilename,\n staticFolderPath,\n }),\n express.static(`dist/${staticFolderPath}`, {\n // these maxage values are different in config but the same in runtime,\n // this one is somehow converted and should end up being the same as CacheDuration.static\n maxage: CacheDuration.expressStatic,\n })\n );\n};\n\nexport default staticAssets;\n","/*! fromentries. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = function fromEntries (iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n}\n","import { loginSagas } from './login';\nimport { registerSagas } from './register';\n\nexport const userSagas = [...loginSagas, ...registerSagas];\n","// index.js\nimport { all } from 'redux-saga/effects';\nimport { navigationSagas } from './navigation';\nimport { routingSagas } from '~/routing/redux/sagas';\nimport { userSagas } from '~/user/redux/sagas';\n\nexport default function (featureSagas = []) {\n return function* rootSaga() {\n const subSagas = [...routingSagas, ...navigationSagas, ...userSagas];\n yield all([...subSagas, ...featureSagas]);\n };\n}\n","export const ResponseMethod = {\n send: 'send',\n json: 'json',\n end: 'end',\n};\n","/* eslint-disable no-console */\nimport { ResponseMethod } from './types';\n\n/**\n * Web Application Response handler, sends a prepared express js response\n * with the supplied content sending in the specified manner\n * @param {response} request express js request object\n * @param {response} response express js response object\n * @param {string | object} content the content to send in the response body\n * @param {function} send the response function to call e.g res.send() res.json() res.end()\n */\nconst handleResponse = (\n request,\n response,\n content,\n send = ResponseMethod.send\n) => {\n // console.log('---', response.statusCode, '---');\n response[send](content);\n};\n\nexport default handleResponse;\n","export default (attributes = {}) =>\n Object.entries(attributes)\n .map(\n ([key, value], idx) =>\n `${idx !== 0 ? ' ' : ''}${key}${value ? `=\"${value}\"` : ''}`\n )\n .join(' ');\n","import fs from 'fs';\nimport React from 'react';\nimport { StaticRouter } from 'react-router-dom';\nimport { Provider as ReduxProvider } from 'react-redux';\nimport Loadable from 'react-loadable';\nimport { renderToString } from 'react-dom/server';\nimport { matchRoutes } from 'react-router-config';\nimport { getBundles } from 'react-loadable/webpack';\nimport { ServerStyleSheet } from 'styled-components';\nimport Helmet from 'react-helmet';\nimport serialize from 'serialize-javascript';\nimport minifyCssString from 'minify-css-string';\nimport mapJson from 'jsonpath-mapper';\nimport { fromJS } from 'immutable';\n// import fromJSLeaveImmer from '~/util/fromJSLeaveImmer';\nimport fromEntries from 'fromentries';\n\nimport createStore from '~/redux/store/store';\nimport { history } from '~/redux/store/history';\nimport rootSaga from '~/redux/sagas/index.js';\n\nimport { setVersion, setVersionStatus } from '../redux/actions/version';\nimport { setCurrentProject } from '../routing/redux/actions';\nimport {\n selectCurrentProject,\n selectRouteEntry,\n} from '../routing/redux/selectors';\n\nimport { getCacheDuration } from './features/caching/cacheDuration.schema';\nimport handleResponse from './features/response-handler';\n\nimport { replaceStaticPath } from './util/staticPaths';\nimport pickProject from '~/util/pickProject';\nimport { deliveryApi } from '~/util/ContensisDeliveryApi';\nimport stringifyAttributes from './util/stringifyAttributes';\n\nconst addStandardHeaders = (state, response, packagejson, groups) => {\n if (state) {\n try {\n console.info('About to add headers');\n const routingSurrogateKeys = state.getIn(\n ['routing', 'surrogateKeys'],\n ''\n );\n\n const surrogateKeyHeader = ` ${packagejson.name}-app ${routingSurrogateKeys}`;\n\n response.header('surrogate-key', surrogateKeyHeader);\n\n addVarnishAuthenticationHeaders(state, response, groups);\n\n response.setHeader(\n 'Surrogate-Control',\n `max-age=${getCacheDuration(response.statusCode)}`\n );\n } catch (e) {\n console.info('Error Adding headers', e.message);\n }\n }\n};\n\nconst addVarnishAuthenticationHeaders = (state, response, groups = {}) => {\n if (state) {\n try {\n const stateEntry = selectRouteEntry(state);\n const project = selectCurrentProject(state);\n const { globalGroups, allowedGroups } = groups;\n // console.info(globalGroups, allowedGroups);\n let allGroups = Array.from((globalGroups && globalGroups[project]) || {});\n if (\n stateEntry &&\n stateEntry.getIn(['authentication', 'isLoginRequired']) &&\n allowedGroups &&\n allowedGroups[project]\n ) {\n allGroups = [...allGroups, ...allowedGroups[project]];\n }\n response.header('x-contensis-viewer-groups', allGroups.join('|'));\n } catch (e) {\n console.info('Error adding authentication header', e);\n }\n }\n};\n\nconst readFileSync = path => fs.readFileSync(path, 'utf8');\n\nconst loadableBundleData = ({ stats, templates }, staticRoutePath, build) => {\n const bundle = {};\n try {\n bundle.stats = JSON.parse(\n readFileSync(stats.replace('/target', build ? `/${build}` : ''))\n );\n } catch (ex) {\n //console.info(ex);\n bundle.stats = null;\n }\n try {\n bundle.templates = {\n templateHTML: replaceStaticPath(\n readFileSync(\n templates.html.replace('/target', build ? `/${build}` : '')\n ),\n staticRoutePath\n ),\n templateHTMLStatic: replaceStaticPath(\n readFileSync(\n templates.static.replace('/target', build ? `/${build}` : '')\n ),\n staticRoutePath\n ),\n templateHTMLFragment: replaceStaticPath(\n readFileSync(\n templates.fragment.replace('/target', build ? `/${build}` : '')\n ),\n staticRoutePath\n ),\n };\n } catch (ex) {\n //console.info(ex);\n bundle.templates = null;\n }\n return bundle;\n};\n\nconst webApp = (app, ReactApp, config) => {\n const {\n routes,\n withReducers,\n withSagas,\n withEvents,\n packagejson,\n scripts = {},\n staticFolderPath = 'static',\n startupScriptFilename,\n differentialBundles,\n allowedGroups,\n globalGroups,\n disableSsrRedux,\n handleResponses,\n } = config;\n const staticRoutePath = config.staticRoutePath || staticFolderPath;\n\n const bundleData = {\n default: loadableBundleData(config, staticRoutePath),\n legacy: loadableBundleData(config, staticRoutePath, 'legacy'),\n modern: loadableBundleData(config, staticRoutePath, 'modern'),\n };\n if (!bundleData.default || bundleData.default === {})\n bundleData.default = bundleData.legacy || bundleData.modern;\n\n const attributes = stringifyAttributes(scripts.attributes);\n scripts.startup = scripts.startup || startupScriptFilename;\n\n const responseHandler =\n typeof handleResponses === 'function' ? handleResponses : handleResponse;\n\n const versionInfo = JSON.parse(\n fs.readFileSync(`dist/${staticFolderPath}/version.json`, 'utf8')\n );\n\n app.get('/*', (request, response) => {\n const { url } = request;\n\n const matchedStaticRoute = () =>\n matchRoutes(routes.StaticRoutes, request.path);\n const isStaticRoute = () => matchedStaticRoute().length > 0;\n const staticRoute = isStaticRoute() && matchedStaticRoute()[0];\n\n // Allow certain routes to avoid SSR\n const onlyDynamic = staticRoute && staticRoute.route.ssr === false;\n const onlySSR = staticRoute && staticRoute.route.ssrOnly === true;\n\n const normaliseQs = q => (q && q.toLowerCase() === 'true' ? true : false);\n\n // Determine functional params from QueryString and set access methods\n const accessMethod = mapJson(request.query, {\n DYNAMIC: ({ dynamic }) => normaliseQs(dynamic) || onlyDynamic,\n REDUX: ({ redux }) => normaliseQs(redux),\n FRAGMENT: ({ fragment }) => normaliseQs(fragment),\n STATIC: ({ static: value }) => normaliseQs(value) || onlySSR,\n });\n\n const context = {};\n // Track the current statusCode via the response object\n response.status(200);\n\n // Create a store (with a memory history) from our current url\n const store = createStore(\n withReducers,\n fromJS({}),\n history({\n initialEntries: [url],\n })\n );\n\n // dispatch any global and non-saga related actions before calling our JSX\n const versionStatusFromHostname = deliveryApi.getVersionStatusFromHostname(\n request.hostname\n );\n\n console.info(\n `Request for ${request.path} hostname: ${request.hostname} versionStatus: ${versionStatusFromHostname}`\n );\n\n store.dispatch(\n setVersionStatus(request.query.versionStatus || versionStatusFromHostname)\n );\n store.dispatch(setVersion(versionInfo.commitRef, versionInfo.buildNo));\n\n const project = pickProject(request.hostname, request.query);\n\n const groups = allowedGroups && allowedGroups[project];\n store.dispatch(setCurrentProject(project, groups, request.hostname));\n\n const modules = [];\n\n const jsx = (\n <Loadable.Capture report={moduleName => modules.push(moduleName)}>\n <ReduxProvider store={store}>\n <StaticRouter context={context} location={url}>\n <ReactApp routes={routes} withEvents={withEvents} />\n </StaticRouter>\n </ReduxProvider>\n </Loadable.Capture>\n );\n\n const buildBundleTags = bundles => {\n // Take the bundles returned from Loadable.Capture\n const bundleTags = bundles\n .filter(b => b)\n .map(bundle => {\n if (bundle.publicPath.includes('/modern/'))\n return differentialBundles\n ? `<script ${attributes} type=\"module\" src=\"${replaceStaticPath(\n bundle.publicPath,\n staticRoutePath\n )}\"></script>`\n : null;\n return `<script ${attributes} nomodule src=\"${replaceStaticPath(\n bundle.publicPath,\n staticRoutePath\n )}\"></script>`;\n })\n .filter(f => f);\n\n // Add the static startup script to the bundleTags\n scripts.startup &&\n bundleTags.push(\n `<script ${attributes} src=\"/${staticRoutePath}/${scripts.startup}\"></script>`\n );\n\n return bundleTags;\n };\n\n const templates =\n bundleData.default.templates || bundleData.legacy.templates;\n\n const stats =\n bundleData.modern.stats && bundleData.legacy.stats\n ? fromEntries(\n Object.entries(bundleData.modern.stats).map(([lib, paths]) => [\n lib,\n bundleData.legacy.stats[lib]\n ? [...paths, ...bundleData.legacy.stats[lib]]\n : paths,\n ])\n )\n : bundleData.default.stats;\n\n const { templateHTML, templateHTMLFragment, templateHTMLStatic } =\n templates;\n\n // Serve a blank HTML page with client scripts to load the app in the browser\n if (accessMethod.DYNAMIC) {\n // Dynamic doesn't need sagas\n renderToString(jsx);\n\n // Dynamic page render has only the necessary bundles to start up the app\n // and does not include any react-loadable code-split bundles\n const loadableBundles = getBundles(stats, modules);\n const bundleTags = buildBundleTags(loadableBundles).join('');\n\n const isDynamicHint = `<script ${attributes}>window.isDynamic = true;</script>`;\n\n const responseHtmlDynamic = templateHTML\n .replace('{{TITLE}}', '')\n .replace('{{SEO_CRITICAL_METADATA}}', '')\n .replace('{{CRITICAL_CSS}}', '')\n .replace('{{APP}}', '')\n .replace('{{LOADABLE_CHUNKS}}', bundleTags)\n .replace('{{REDUX_DATA}}', isDynamicHint);\n // Dynamic pages always return a 200 so we can run\n // the app and serve up all errors inside the client\n response.setHeader(\n 'Surrogate-Control',\n `max-age=${getCacheDuration(200)}`\n );\n responseHandler(request, response, responseHtmlDynamic);\n }\n\n // Render the JSX server side and send response as per access method options\n if (!accessMethod.DYNAMIC) {\n store\n .runSaga(rootSaga(withSagas))\n .toPromise()\n .then(() => {\n const sheet = new ServerStyleSheet();\n\n const html = renderToString(sheet.collectStyles(jsx));\n\n const helmet = Helmet.renderStatic();\n Helmet.rewind();\n const htmlAttributes = helmet.htmlAttributes.toString();\n let title = helmet.title.toString();\n const metadata = helmet.meta.toString();\n\n if (context.url) {\n return response.redirect(302, context.url);\n }\n\n const reduxState = store.getState();\n\n const styleTags = sheet.getStyleTags();\n\n // After running rootSaga there should be an additional react-loadable\n // code-split bundle for a page component as well as core app bundles\n const loadableBundles = getBundles(stats, modules);\n const bundleTags = buildBundleTags(loadableBundles).join('');\n\n let serialisedReduxData = '';\n if (context.status !== 404) {\n // For a request that returns a redux state object as a response\n if (accessMethod.REDUX) {\n serialisedReduxData = serialize(reduxState, {\n ignoreFunction: true,\n });\n addStandardHeaders(reduxState, response, packagejson, {\n allowedGroups,\n globalGroups,\n });\n responseHandler(request, response, serialisedReduxData, 'json');\n return true;\n }\n if (!disableSsrRedux) {\n serialisedReduxData = serialize(reduxState, {\n ignoreFunction: true,\n });\n serialisedReduxData = `<script ${attributes}>window.REDUX_DATA = ${serialisedReduxData}</script>`;\n }\n }\n if (context.status > 400) {\n accessMethod.STATIC = true;\n }\n\n // Responses\n let responseHTML = '';\n\n if (context.status === 404)\n title = '<title>404 page not found</title>';\n\n // Static page served as a fragment\n if (accessMethod.FRAGMENT && accessMethod.STATIC) {\n responseHTML = minifyCssString(styleTags) + html;\n }\n\n // Page fragment served with client scripts and redux data that hydrate the app client side\n if (accessMethod.FRAGMENT && !accessMethod.STATIC) {\n responseHTML = templateHTMLFragment\n .replace('{{TITLE}}', title)\n .replace('{{SEO_CRITICAL_METADATA}}', metadata)\n .replace('{{CRITICAL_CSS}}', minifyCssString(styleTags))\n .replace('{{APP}}', html)\n .replace('{{LOADABLE_CHUNKS}}', bundleTags)\n .replace('{{REDUX_DATA}}', serialisedReduxData);\n }\n\n // Full HTML page served statically\n if (!accessMethod.FRAGMENT && accessMethod.STATIC) {\n responseHTML = templateHTMLStatic\n .replace('{{TITLE}}', title)\n .replace('{{SEO_CRITICAL_METADATA}}', metadata)\n .replace('{{CRITICAL_CSS}}', minifyCssString(styleTags))\n .replace('{{APP}}', html)\n .replace('{{LOADABLE_CHUNKS}}', '');\n }\n\n // Full HTML page served with client scripts and redux data that hydrate the app client side\n if (!accessMethod.FRAGMENT && !accessMethod.STATIC) {\n responseHTML = templateHTML\n .replace('{{TITLE}}', title)\n .replace('{{SEO_CRITICAL_METADATA}}', metadata)\n .replace('{{CRITICAL_CSS}}', styleTags)\n .replace('{{APP}}', html)\n .replace('{{LOADABLE_CHUNKS}}', bundleTags)\n .replace('{{REDUX_DATA}}', serialisedReduxData);\n }\n\n // Set response.status from React StaticRouter\n if (typeof context.status === 'number')\n response.status(context.status);\n\n addStandardHeaders(reduxState, response, packagejson, {\n allowedGroups,\n globalGroups,\n });\n try {\n // If react-helmet htmlAttributes are being used,\n // replace the html tag with those attributes sepcified\n // e.g. (lang, dir etc.)\n if (htmlAttributes) {\n responseHTML = responseHTML.replace(\n /<html?.+?>/,\n `<html ${htmlAttributes}>`\n );\n }\n responseHandler(request, response, responseHTML);\n } catch (err) {\n console.info(err.message);\n }\n })\n .catch(err => {\n // Handle any error that occurred in any of the previous\n // promises in the chain.\n console.info(err);\n response.status(500);\n responseHandler(\n request,\n response,\n `Error occurred: <br />${err.stack} <br />${JSON.stringify(err)}`\n );\n });\n renderToString(jsx);\n\n store.close();\n }\n });\n};\n\nexport default webApp;\n","import 'isomorphic-fetch';\nimport express from 'express';\nimport Loadable from 'react-loadable';\n\nimport DisplayStartupConfiguration from './util/displayStartupConfiguration';\nimport ConfigureReverseProxies, { apiProxy } from './features/reverse-proxy';\nimport ServeStaticAssets from './features/static-assets';\nimport ConfigureWebApp from './webApp';\n\nconst app = express();\n\nconst start = (ReactApp, config, ServerFeatures) => {\n global.PACKAGE_JSON = config.packagejson;\n global.REVERSE_PROXY_PATHS = Object(config.reverseProxyPaths);\n global.PROXY_DELIVERY_API = config.proxyDeliveryApi;\n global.DISABLE_SSR_REDUX = config.disableSsrRedux;\n\n app.disable('x-powered-by');\n\n // Output some information about the used build/startup configuration\n DisplayStartupConfiguration(config);\n\n ServerFeatures(app);\n // Set-up local proxy for images from cms, and delivery api requests\n // to save doing rewrites and extra code\n ConfigureReverseProxies(app, config.reverseProxyPaths);\n ServeStaticAssets(app, config);\n ConfigureWebApp(app, ReactApp, config);\n\n app.on('ready', async () => {\n // Configure DNS to make life easier\n //await ConfigureLocalDNS();\n\n Loadable.preloadAll().then(() => {\n var server = app.listen(3001, () => {\n console.info(`HTTP server is listening @ port 3001`);\n setTimeout(function() {\n app.emit('app_started');\n }, 500);\n });\n app.on('stop', () => {\n server.close(function() {\n console.info('GoodBye :(');\n });\n });\n });\n });\n};\n\nexport default { app, apiProxy, start };\n"],"names":["servers","SERVERS","projects","PROJECTS","DisplayStartupConfiguration","config","console","log","JSON","stringify","reverseProxyPaths","apiProxy","httpProxy","createProxyServer","reverseProxies","app","deliveryApiProxy","all","req","res","target","hostname","indexOf","previewIis","iis","web","changeOrigin","on","e","path","cms","alias","CacheDuration","static","expressStatic","getCacheDuration","status","replaceStaticPath","string","staticFolderPath","replace","bundleManipulationMiddleware","appRootPath","maxage","staticRoutePath","next","filename","basename","modernBundle","endsWith","legacyBundle","startsWith","jsRuntimeLocation","resolve","jsRuntimeBundle","fs","readFileSync","modifiedBundle","set","type","send","readError","resolveStartupMiddleware","startupScriptFilename","startupFilePath","startupFileLocation","sendFile","sendFileError","staticAssets","require","scripts","staticRoutePaths","use","map","p","startup","express","userSagas","loginSagas","registerSagas","featureSagas","rootSaga","subSagas","routingSagas","navigationSagas","ResponseMethod","json","end","handleResponse","request","response","content","attributes","Object","entries","key","value","idx","join","addStandardHeaders","state","packagejson","groups","info","routingSurrogateKeys","getIn","surrogateKeyHeader","name","header","addVarnishAuthenticationHeaders","setHeader","statusCode","message","stateEntry","selectRouteEntry","project","selectCurrentProject","globalGroups","allowedGroups","allGroups","Array","from","loadableBundleData","stats","templates","build","bundle","parse","ex","templateHTML","html","templateHTMLStatic","templateHTMLFragment","fragment","webApp","ReactApp","routes","withReducers","withSagas","withEvents","differentialBundles","disableSsrRedux","handleResponses","bundleData","default","legacy","modern","stringifyAttributes","responseHandler","versionInfo","get","url","matchedStaticRoute","matchRoutes","StaticRoutes","isStaticRoute","length","staticRoute","onlyDynamic","route","ssr","onlySSR","ssrOnly","normaliseQs","q","toLowerCase","accessMethod","mapJson","query","DYNAMIC","dynamic","REDUX","redux","FRAGMENT","STATIC","context","store","createStore","fromJS","history","initialEntries","versionStatusFromHostname","deliveryApi","getVersionStatusFromHostname","dispatch","setVersionStatus","versionStatus","setVersion","commitRef","buildNo","pickProject","setCurrentProject","modules","jsx","moduleName","push","ReduxProvider","buildBundleTags","bundles","bundleTags","filter","b","publicPath","includes","f","fromEntries","lib","paths","renderToString","loadableBundles","getBundles","isDynamicHint","responseHtmlDynamic","runSaga","toPromise","then","sheet","ServerStyleSheet","collectStyles","helmet","Helmet","renderStatic","rewind","htmlAttributes","toString","title","metadata","meta","redirect","reduxState","getState","styleTags","getStyleTags","serialisedReduxData","serialize","ignoreFunction","responseHTML","minifyCssString","err","catch","stack","close","start","ServerFeatures","global","PACKAGE_JSON","REVERSE_PROXY_PATHS","PROXY_DELIVERY_API","proxyDeliveryApi","DISABLE_SSR_REDUX","disable","ConfigureReverseProxies","ServeStaticAssets","ConfigureWebApp","Loadable","preloadAll","server","listen","setTimeout","emit"],"mappings":"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"}
1
+ {"version":3,"file":"contensis-react-base.js","sources":["../src/server/util/displayStartupConfiguration.ts","../src/server/features/reverse-proxy/index.ts","../src/server/features/caching/cacheDuration.schema.ts","../src/server/util/staticPaths.ts","../src/server/middleware/bundleManipulation.ts","../src/server/middleware/resolveStartup.ts","../src/server/features/static-assets/index.ts","../src/server/features/response-handler/index.ts","../src/server/util/stringifyAttributes.ts","../src/server/util/bundles.ts","../src/server/util/headers.ts","../src/server/webApp.tsx","../src/server/internalServer.ts"],"sourcesContent":["const servers = SERVERS; /* global SERVERS */\nconst projects = PROJECTS; /* global PROJECTS */\n\nconst DisplayStartupConfiguration = config => {\n /* eslint-disable no-console */\n console.log();\n console.log(\n `Configured servers:\n`,\n JSON.stringify(servers, null, 2)\n );\n console.log();\n console.log(\n `Configured projects:\n`,\n JSON.stringify(projects, null, 2)\n );\n console.log();\n console.log(\n 'Reverse proxy paths: ',\n JSON.stringify(config.reverseProxyPaths, null, 2)\n );\n console.log();\n\n /* eslint-enable no-console */\n};\n\nexport default DisplayStartupConfiguration;\n","import { Express } from 'express';\nimport httpProxy from 'http-proxy';\n\nconst servers = SERVERS; /* global SERVERS */\nexport const apiProxy = httpProxy.createProxyServer();\n\nconst reverseProxies = (app: Express, reverseProxyPaths: string[] = []) => {\n deliveryApiProxy(apiProxy, app);\n\n app.all(reverseProxyPaths, (req, res) => {\n const target =\n req.hostname.indexOf('preview-') ||\n req.hostname.indexOf('preview.') ||\n req.hostname === 'localhost'\n ? servers.previewIis || servers.iis\n : servers.iis;\n\n apiProxy.web(req, res, { target, changeOrigin: true });\n apiProxy.on('error', e => {\n /* eslint-disable no-console */\n console.log(\n `Proxy Request for ${req.path} HostName:${req.hostname} failed with ${e}`\n );\n /* eslint-enable no-console */\n });\n });\n};\n\nconst deliveryApiProxy = (apiProxy, app) => {\n // This is just here to stop cors requests on localhost. In Production this is mapped using varnish.\n app.all(['/api/delivery/*', '/api/image/*'], (req, res) => {\n /* eslint-disable no-console */\n const target = servers.cms;\n console.log(`Proxying api request to ${servers.alias}`);\n apiProxy.web(req, res, {\n target,\n changeOrigin: true,\n });\n apiProxy.on('error', e => {\n /* eslint-disable no-console */\n console.log(\n `Proxy request for ${req.path} HostName:${req.hostname} failed with ${e}`\n );\n /* eslint-enable no-console */\n });\n });\n};\n\nexport default reverseProxies;\n","export const CacheDuration = {\n 200: '3600',\n 404: '5',\n static: '31536000', // Believe it or not these two max ages are the same in runtime\n expressStatic: '31557600h', // Believe it or not these two max ages are the same in runtime\n};\n\nexport const getCacheDuration = (status = 200) => {\n if (status > 400) return CacheDuration[404];\n return CacheDuration[200];\n};\n","export const replaceStaticPath = (str: string, staticFolderPath = 'static') =>\n str.replace(/static\\//g, `${staticFolderPath}/`);\n","import { RequestHandler } from 'express';\nimport fs from 'fs';\nimport path from 'path';\nimport { replaceStaticPath } from '../util/staticPaths';\n\nexport const bundleManipulationMiddleware =\n ({\n appRootPath,\n maxage,\n staticRoutePath,\n }: {\n appRootPath: string;\n maxage: string;\n staticRoutePath: string;\n }): RequestHandler =>\n (req, res, next) => {\n const filename = path.basename(req.path);\n const modernBundle = filename.endsWith('.mjs');\n const legacyBundle = filename.endsWith('.js');\n if ((legacyBundle || modernBundle) && filename.startsWith('runtime.')) {\n const jsRuntimeLocation = path.resolve(\n appRootPath,\n `dist/static/${modernBundle ? 'modern/js' : 'legacy/js'}/${filename}`\n );\n try {\n const jsRuntimeBundle = fs.readFileSync(jsRuntimeLocation, 'utf8');\n const modifiedBundle = replaceStaticPath(\n jsRuntimeBundle,\n staticRoutePath\n );\n if (maxage) res.set('Cache-Control', `public, max-age=${maxage}`);\n res.type('.js').send(modifiedBundle);\n return;\n } catch (readError) {\n // eslint-disable-next-line no-console\n console.log(\n `Unable to find js runtime bundle at '${jsRuntimeLocation}'`,\n readError\n );\n next();\n }\n } else {\n next();\n }\n };\n","import { RequestHandler } from 'express';\nimport path from 'path';\n\n/**\n *\n * @param { appRootPath: string; maxage: number; staticFolderPath: string, startupScriptFilename: string } args\n * @returns Response | next()\n * A middleware function to resolve /dist/static/startup.js under a supplied startupScriptFilename variable\n */\nexport const resolveStartupMiddleware =\n ({\n appRootPath,\n maxage,\n staticFolderPath,\n startupScriptFilename,\n }: {\n appRootPath: string;\n maxage: string;\n staticFolderPath: string;\n startupScriptFilename: string;\n }): RequestHandler =>\n (req, res, next) => {\n if (\n startupScriptFilename !== 'startup.js' &&\n req.path === `/${startupScriptFilename}`\n ) {\n const startupFilePath = `dist/${staticFolderPath}/startup.js`;\n const startupFileLocation = path.resolve(appRootPath, startupFilePath);\n\n if (maxage) res.set('Cache-Control', `public, max-age=${maxage}`);\n\n try {\n res.sendFile(startupFileLocation);\n } catch (sendFileError) {\n // eslint-disable-next-line no-console\n console.log(\n `Unable to send file startup.js at '${startupFileLocation}'`,\n sendFileError\n );\n next();\n }\n } else {\n next();\n }\n };\n","import express from 'express';\nimport { CacheDuration } from '~/server/features/caching/cacheDuration.schema';\nimport { bundleManipulationMiddleware } from '~/server/middleware/bundleManipulation';\nimport { resolveStartupMiddleware } from '~/server/middleware/resolveStartup';\n\nimport { path as appPath } from 'app-root-path';\nimport { ServerConfig } from '~/config';\n// Serving static assets\nconst staticAssets = (\n app,\n {\n appRootPath = appPath,\n scripts = {} as NonNullable<ServerConfig['scripts']>,\n startupScriptFilename = 'startup.js',\n staticFolderPath = 'static',\n staticRoutePath = 'static',\n staticRoutePaths = [] as string[],\n }\n) => {\n app.use(\n [\n `/${staticRoutePath}`,\n ...staticRoutePaths.map(p => `/${p}`),\n `/${staticFolderPath}`,\n ],\n bundleManipulationMiddleware({\n appRootPath,\n // these maxage values are different in config but the same in runtime,\n // this one is the true value in seconds\n maxage: CacheDuration.static,\n staticRoutePath,\n }),\n resolveStartupMiddleware({\n appRootPath,\n maxage: CacheDuration.static,\n startupScriptFilename: scripts.startup || startupScriptFilename,\n staticFolderPath,\n }),\n // eslint-disable-next-line import/no-named-as-default-member\n express.static(`dist/${staticFolderPath}`, {\n // these maxage values are different in config but the same in runtime,\n // this one is somehow converted and should end up being the same as CacheDuration.static\n maxAge: CacheDuration.expressStatic,\n })\n );\n};\n\nexport default staticAssets;\n","/* eslint-disable no-console */\nimport { Request, Response } from 'express';\nimport { ResponseMethod } from './types';\n\n/**\n * Web Application Response handler, sends a prepared express js response\n * with the supplied content sending in the specified manner\n * @param {response} request express js request object\n * @param {response} response express js response object\n * @param {string | object} content the content to send in the response body\n * @param {\"send\" | \"json\" | \"end\"} send the response function to call e.g res.send() res.json() res.end()\n */\nconst handleResponse = (\n request: Request,\n response: Response,\n content: any,\n send: keyof typeof ResponseMethod = 'send'\n) => {\n // console.log('---', response.statusCode, '---');\n response[send](content);\n};\n\nexport default handleResponse;\n","export default (attributes = {}) =>\n Object.entries(attributes)\n .map(\n ([key, value], idx) =>\n `${idx !== 0 ? ' ' : ''}${key}${value ? `=\"${value}\"` : ''}`\n )\n .join(' ');\n","import fs from 'fs';\nimport path from 'path';\nimport { ChunkExtractor } from '@loadable/server';\nimport { replaceStaticPath } from './staticPaths';\n\nconst readFileSync = path => fs.readFileSync(path, 'utf8');\n\nexport const loadableBundleData = (\n { stats, templates },\n staticRoutePath: string,\n build?: string\n) => {\n const bundle: {\n stats?: string | null;\n templates?: {\n templateHTML;\n templateHTMLStatic;\n templateHTMLFragment;\n } | null;\n } = {};\n try {\n bundle.stats = JSON.parse(\n readFileSync(stats.replace('/target', build ? `/${build}` : ''))\n );\n } catch (ex) {\n // console.info(ex);\n bundle.stats = null;\n }\n try {\n bundle.templates = {\n templateHTML: replaceStaticPath(\n readFileSync(\n templates.html.replace('/target', build ? `/${build}` : '')\n ),\n staticRoutePath\n ),\n templateHTMLStatic: replaceStaticPath(\n readFileSync(\n templates.static.replace('/target', build ? `/${build}` : '')\n ),\n staticRoutePath\n ),\n templateHTMLFragment: replaceStaticPath(\n readFileSync(\n templates.fragment.replace('/target', build ? `/${build}` : '')\n ),\n staticRoutePath\n ),\n };\n } catch (ex) {\n // console.info(ex);\n bundle.templates = null;\n }\n return bundle;\n};\n\nexport const loadableChunkExtractors = () => {\n try {\n const modern = new ChunkExtractor({\n entrypoints: ['app'],\n namespace: 'modern',\n statsFile: path.resolve('dist/modern/loadable-stats.json'),\n });\n const legacy = new ChunkExtractor({\n entrypoints: ['app'],\n namespace: 'legacy',\n statsFile: path.resolve('dist/legacy/loadable-stats.json'),\n });\n const commonLoadableExtractor = {\n addChunk(chunk) {\n modern.addChunk(chunk);\n if (typeof legacy.stats.assetsByChunkName[chunk] !== 'undefined')\n legacy.addChunk(chunk);\n },\n };\n\n return { commonLoadableExtractor, modern, legacy };\n } catch (e) {\n console.info('@loadable/server ChunkExtractor not available');\n }\n};\n\nexport const getBundleData = (config, staticRoutePath) => {\n const bundleData = {\n default: loadableBundleData(config, staticRoutePath),\n legacy: loadableBundleData(config, staticRoutePath, 'legacy'),\n modern: loadableBundleData(config, staticRoutePath, 'modern'),\n };\n if (!bundleData.default || bundleData.default === {})\n bundleData.default = bundleData.legacy || bundleData.modern;\n return bundleData;\n};\n\nexport const buildBundleTags = (\n bundles,\n differentialBundles = false,\n staticRoutePath = 'static',\n attributes = ''\n) => {\n // Take the bundles returned from Loadable.Capture\n const bundleTags = bundles\n .filter(b => b)\n .map(bundle => {\n if (bundle.publicPath.includes('/modern/'))\n return differentialBundles\n ? `<script ${attributes} type=\"module\" src=\"${replaceStaticPath(\n bundle.publicPath,\n staticRoutePath\n )}\"></script>`\n : null;\n return `<script ${attributes}${\n differentialBundles ? ' nomodule' : ''\n } src=\"${replaceStaticPath(\n bundle.publicPath,\n staticRoutePath\n )}\"></script>`;\n })\n .filter(f => f);\n\n return bundleTags;\n};\n\nexport const getBundleTags = loadableExtractor => {\n if (loadableExtractor) {\n const legacyScriptTags = loadableExtractor?.legacy.getScriptTags({\n noModule: true,\n });\n const modernScriptTags = loadableExtractor?.modern.getScriptTags({\n type: 'module',\n });\n return legacyScriptTags + modernScriptTags;\n }\n};\n","import { Response } from 'express';\nimport {\n selectCurrentProject,\n selectRouteEntry,\n} from '~/routing/redux/selectors';\nimport { getCacheDuration } from '../features/caching/cacheDuration.schema';\n\nexport const addStandardHeaders = (\n state: any,\n response: Response,\n packagejson: any,\n groups: { globalGroups?: any[]; allowedGroups?: any[] }\n) => {\n if (state) {\n try {\n console.info('About to add headers');\n const routingSurrogateKeys = state.getIn(\n ['routing', 'surrogateKeys'],\n ''\n );\n\n const surrogateKeyHeader = ` ${packagejson.name}-app ${routingSurrogateKeys}`;\n\n response.header('surrogate-key', surrogateKeyHeader);\n\n addVarnishAuthenticationHeaders(state, response, groups);\n\n response.setHeader(\n 'Surrogate-Control',\n `max-age=${getCacheDuration(response.statusCode)}`\n );\n } catch (e: any) {\n console.info('Error Adding headers', e.message);\n }\n }\n};\n\nexport const addVarnishAuthenticationHeaders = (\n state: any,\n response: Response,\n groups: { globalGroups?: any[]; allowedGroups?: any[] } = {}\n) => {\n if (state) {\n try {\n const stateEntry = selectRouteEntry(state);\n const project = selectCurrentProject(state);\n const { globalGroups, allowedGroups } = groups;\n // console.info(globalGroups, allowedGroups);\n let allGroups = Array.from((globalGroups && globalGroups[project]) || {});\n if (\n stateEntry &&\n stateEntry.getIn(['authentication', 'isLoginRequired']) &&\n allowedGroups &&\n allowedGroups[project]\n ) {\n allGroups = [...allGroups, ...allowedGroups[project]];\n }\n response.header('x-contensis-viewer-groups', allGroups.join('|'));\n } catch (e) {\n console.info('Error adding authentication header', e);\n }\n }\n};\n","import fs from 'fs';\nimport React, { PropsWithChildren } from 'react';\nimport { renderToString } from 'react-dom/server';\nimport { StaticRouter } from 'react-router-dom';\nimport { Provider as ReduxProvider } from 'react-redux';\nimport { matchRoutes } from 'react-router-config';\nimport Helmet from 'react-helmet';\nimport { ServerStyleSheet } from 'styled-components';\nimport serialize from 'serialize-javascript';\nimport minifyCssString from 'minify-css-string';\nimport mapJson from 'jsonpath-mapper';\nimport { Express } from 'express';\nimport { StaticRouterContext } from 'react-router';\n\nimport Loadable from 'react-loadable';\n// import { getBundles } from 'react-loadable/webpack';\nimport { getBundles } from 'react-loadable-ssr-addon';\nimport { ChunkExtractorManager } from '@loadable/server';\n\nimport { fromJS } from 'immutable';\n// import fromJSLeaveImmer from '~/util/fromJSLeaveImmer';\n\nimport createStore from '~/redux/store/store';\nimport { history } from '~/redux/store/history';\nimport rootSaga from '~/redux/sagas/index.js';\n\nimport { setVersion, setVersionStatus } from '../redux/actions/version';\nimport { setCurrentProject } from '../routing/redux/actions';\n\nimport { getCacheDuration } from './features/caching/cacheDuration.schema';\nimport handleResponse from './features/response-handler';\n\nimport pickProject from '~/util/pickProject';\nimport { deliveryApi } from '~/util/ContensisDeliveryApi';\nimport stringifyAttributes from './util/stringifyAttributes';\nimport { ServerConfig } from '~/config';\nimport {\n buildBundleTags,\n getBundleData,\n getBundleTags,\n loadableChunkExtractors,\n} from './util/bundles';\nimport { addStandardHeaders } from './util/headers';\n\nconst webApp = (\n app: Express,\n ReactApp: React.ComponentType<any>,\n config: ServerConfig & {\n allowedGroups?: string[];\n globalGroups?: string[];\n startupScriptFilename?: string;\n }\n) => {\n const {\n routes,\n withReducers,\n withSagas,\n withEvents,\n packagejson,\n scripts = {},\n staticFolderPath = 'static',\n startupScriptFilename,\n differentialBundles,\n allowedGroups,\n globalGroups,\n disableSsrRedux,\n handleResponses,\n } = config;\n const staticRoutePath = config.staticRoutePath || staticFolderPath;\n\n const bundleData = getBundleData(config, staticRoutePath);\n\n const attributes = stringifyAttributes(scripts.attributes);\n scripts.startup = scripts.startup || startupScriptFilename;\n\n const responseHandler =\n typeof handleResponses === 'function' ? handleResponses : handleResponse;\n\n const versionInfo = JSON.parse(\n fs.readFileSync(`dist/${staticFolderPath}/version.json`, 'utf8')\n );\n\n app.get('/*', (request, response) => {\n const { url } = request;\n\n const matchedStaticRoute = () =>\n matchRoutes(routes.StaticRoutes, request.path);\n const isStaticRoute = () => matchedStaticRoute().length > 0;\n const staticRoute = isStaticRoute() && matchedStaticRoute()[0];\n\n // Allow certain routes to avoid SSR\n const onlyDynamic = staticRoute && staticRoute.route.ssr === false;\n const onlySSR = staticRoute && staticRoute.route.ssrOnly === true;\n\n const normaliseQs = q => (q && q.toLowerCase() === 'true' ? true : false);\n\n // Determine functional params from QueryString and set access methods\n const accessMethod = mapJson<\n any,\n { DYNAMIC: boolean; REDUX: boolean; FRAGMENT: boolean; STATIC: boolean }\n >(request.query, {\n DYNAMIC: ({ dynamic }) => normaliseQs(dynamic) || onlyDynamic,\n REDUX: ({ redux }) => normaliseQs(redux),\n FRAGMENT: ({ fragment }) => normaliseQs(fragment),\n STATIC: ({ static: value }) => normaliseQs(value) || onlySSR,\n });\n\n const context: StaticRouterContext = {};\n // Track the current statusCode via the response object\n response.status(200);\n\n // Create a store (with a memory history) from our current url\n const store = createStore(\n withReducers,\n fromJS({}),\n history({\n initialEntries: [url],\n })\n );\n\n // dispatch any global and non-saga related actions before calling our JSX\n const versionStatusFromHostname = deliveryApi.getVersionStatusFromHostname(\n request.hostname\n );\n\n console.info(\n `Request for ${request.path} hostname: ${request.hostname} versionStatus: ${versionStatusFromHostname}`\n );\n\n store.dispatch(\n setVersionStatus(request.query.versionStatus || versionStatusFromHostname)\n );\n store.dispatch(setVersion(versionInfo.commitRef, versionInfo.buildNo));\n\n const project = pickProject(request.hostname, request.query);\n\n const groups = allowedGroups && allowedGroups[project];\n store.dispatch(setCurrentProject(project, groups, request.hostname));\n\n const loadableExtractor = loadableChunkExtractors();\n\n const jsx = (\n <ChunkExtractorManager\n extractor={loadableExtractor?.commonLoadableExtractor}\n >\n <ReduxProvider store={store}>\n <StaticRouter context={context} location={url}>\n <ReactApp routes={routes} withEvents={withEvents} />\n </StaticRouter>\n </ReduxProvider>\n </ChunkExtractorManager>\n );\n\n const templates =\n bundleData.default.templates || bundleData.legacy.templates;\n\n const { templateHTML, templateHTMLFragment, templateHTMLStatic } =\n templates || {};\n\n // Serve a blank HTML page with client scripts to load the app in the browser\n if (accessMethod.DYNAMIC) {\n // Dynamic doesn't need sagas\n renderToString(jsx);\n\n // Dynamic page render has only the necessary bundles to start up the app\n // and does not include any react-loadable code-split bundles\n let bundleTags = '';\n // Add the static startup script to the bundleTags\n if (scripts.startup)\n bundleTags = `<script ${attributes} src=\"/${staticRoutePath}/${scripts.startup}\"></script>`;\n\n bundleTags += getBundleTags(loadableExtractor);\n\n const isDynamicHint = `<script ${attributes}>window.isDynamic = true;</script>`;\n\n const responseHtmlDynamic = templateHTML\n .replace('{{TITLE}}', '')\n .replace('{{SEO_CRITICAL_METADATA}}', '')\n .replace('{{CRITICAL_CSS}}', '')\n .replace('{{APP}}', '')\n .replace('{{LOADABLE_CHUNKS}}', bundleTags)\n .replace('{{REDUX_DATA}}', isDynamicHint);\n // Dynamic pages always return a 200 so we can run\n // the app and serve up all errors inside the client\n response.setHeader(\n 'Surrogate-Control',\n `max-age=${getCacheDuration(200)}`\n );\n responseHandler(request, response, responseHtmlDynamic);\n }\n\n // Render the JSX server side and send response as per access method options\n if (!accessMethod.DYNAMIC) {\n store\n .runSaga(rootSaga(withSagas))\n .toPromise()\n .then(() => {\n const sheet = new ServerStyleSheet();\n\n const html = renderToString(sheet.collectStyles(jsx));\n\n const helmet = Helmet.renderStatic();\n Helmet.rewind();\n const htmlAttributes = helmet.htmlAttributes.toString();\n let title = helmet.title.toString();\n const metadata = helmet.meta.toString();\n\n if (context.url) {\n return response.redirect(302, context.url);\n }\n\n const reduxState = store.getState();\n\n const styleTags = sheet.getStyleTags();\n\n // After running rootSaga there should be an additional react-loadable\n // code-split bundle for a page component as well as core app bundles\n\n let bundleTags = '';\n // Add the static startup script to the bundleTags\n if (scripts.startup)\n bundleTags = `<script ${attributes} src=\"/${staticRoutePath}/${scripts.startup}\"></script>`;\n\n bundleTags += getBundleTags(loadableExtractor);\n\n let serialisedReduxData = '';\n if (context.statusCode !== 404) {\n // For a request that returns a redux state object as a response\n if (accessMethod.REDUX) {\n serialisedReduxData = serialize(reduxState, {\n ignoreFunction: true,\n });\n addStandardHeaders(reduxState, response, packagejson, {\n allowedGroups,\n globalGroups,\n });\n responseHandler(request, response, serialisedReduxData, 'json');\n return true;\n }\n if (!disableSsrRedux) {\n serialisedReduxData = serialize(reduxState, {\n ignoreFunction: true,\n });\n serialisedReduxData = `<script ${attributes}>window.REDUX_DATA = ${serialisedReduxData}</script>`;\n }\n }\n if ((context.statusCode || 200) > 400) {\n accessMethod.STATIC = true;\n }\n\n // Responses\n let responseHTML = '';\n\n if (context.statusCode === 404)\n title = '<title>404 page not found</title>';\n\n // Static page served as a fragment\n if (accessMethod.FRAGMENT && accessMethod.STATIC) {\n responseHTML = minifyCssString(styleTags) + html;\n }\n\n // Page fragment served with client scripts and redux data that hydrate the app client side\n if (accessMethod.FRAGMENT && !accessMethod.STATIC) {\n responseHTML = templateHTMLFragment\n .replace('{{TITLE}}', title)\n .replace('{{SEO_CRITICAL_METADATA}}', metadata)\n .replace('{{CRITICAL_CSS}}', minifyCssString(styleTags))\n .replace('{{APP}}', html)\n .replace('{{LOADABLE_CHUNKS}}', bundleTags)\n .replace('{{REDUX_DATA}}', serialisedReduxData);\n }\n\n // Full HTML page served statically\n if (!accessMethod.FRAGMENT && accessMethod.STATIC) {\n responseHTML = templateHTMLStatic\n .replace('{{TITLE}}', title)\n .replace('{{SEO_CRITICAL_METADATA}}', metadata)\n .replace('{{CRITICAL_CSS}}', minifyCssString(styleTags))\n .replace('{{APP}}', html)\n .replace('{{LOADABLE_CHUNKS}}', '');\n }\n\n // Full HTML page served with client scripts and redux data that hydrate the app client side\n if (!accessMethod.FRAGMENT && !accessMethod.STATIC) {\n responseHTML = templateHTML\n .replace('{{TITLE}}', title)\n .replace('{{SEO_CRITICAL_METADATA}}', metadata)\n .replace('{{CRITICAL_CSS}}', styleTags)\n .replace('{{APP}}', html)\n .replace('{{LOADABLE_CHUNKS}}', bundleTags)\n .replace('{{REDUX_DATA}}', serialisedReduxData);\n }\n\n // Set response.status from React StaticRouter\n if (typeof context.statusCode === 'number')\n response.status(context.statusCode);\n\n addStandardHeaders(reduxState, response, packagejson, {\n allowedGroups,\n globalGroups,\n });\n try {\n // If react-helmet htmlAttributes are being used,\n // replace the html tag with those attributes sepcified\n // e.g. (lang, dir etc.)\n if (htmlAttributes) {\n responseHTML = responseHTML.replace(\n /<html?.+?>/,\n `<html ${htmlAttributes}>`\n );\n }\n responseHandler(request, response, responseHTML);\n } catch (err: any) {\n console.info(err.message);\n }\n })\n .catch(err => {\n // Handle any error that occurred in any of the previous\n // promises in the chain.\n console.info(err);\n response.status(500);\n responseHandler(\n request,\n response,\n `Error occurred: <br />${err.stack} <br />${JSON.stringify(err)}`\n );\n });\n renderToString(jsx);\n\n store.close();\n }\n });\n};\n\nexport default webApp;\n","import 'isomorphic-fetch';\nimport express, { Express } from 'express';\nimport Loadable from 'react-loadable';\nimport React from 'react';\n\nimport DisplayStartupConfiguration from './util/displayStartupConfiguration';\nimport ConfigureReverseProxies, { apiProxy } from './features/reverse-proxy';\nimport ServeStaticAssets from './features/static-assets';\nimport ConfigureWebApp from './webApp';\nimport { ServerConfig } from '~/config';\n\ndeclare let global: typeof globalThis & {\n DISABLE_SSR_REDUX: boolean | undefined;\n PACKAGE_JSON: any;\n PROXY_DELIVERY_API: boolean | undefined;\n REVERSE_PROXY_PATHS: string[];\n};\n\nconst app: Express = express();\n\nconst start = (\n ReactApp: React.ComponentType<any>,\n config: ServerConfig,\n ServerFeatures: (app: Express) => void\n) => {\n global.PACKAGE_JSON = config.packagejson;\n global.DISABLE_SSR_REDUX = config.disableSsrRedux;\n global.PROXY_DELIVERY_API = config.proxyDeliveryApi;\n global.REVERSE_PROXY_PATHS = Object(config.reverseProxyPaths);\n\n app.disable('x-powered-by');\n\n // Output some information about the used build/startup configuration\n DisplayStartupConfiguration(config);\n\n ServerFeatures(app);\n // Set-up local proxy for images from cms, and delivery api requests\n // to save doing rewrites and extra code\n ConfigureReverseProxies(app, config.reverseProxyPaths);\n ServeStaticAssets(app, config);\n ConfigureWebApp(app, ReactApp, config);\n\n app.on('ready', async () => {\n // Configure DNS to make life easier\n // await ConfigureLocalDNS();\n\n Loadable.preloadAll().then(() => {\n const server = app.listen(3001, () => {\n console.info(`HTTP server is listening @ port 3001`);\n setTimeout(function () {\n app.emit('app_started');\n }, 500);\n });\n app.on('stop', () => {\n server.close(function () {\n console.info('GoodBye :(');\n });\n });\n });\n });\n};\n\nexport default { app, apiProxy, start };\n"],"names":["servers","SERVERS","projects","PROJECTS","DisplayStartupConfiguration","config","console","log","JSON","stringify","reverseProxyPaths","apiProxy","httpProxy","createProxyServer","reverseProxies","app","deliveryApiProxy","all","req","res","target","hostname","indexOf","previewIis","iis","web","changeOrigin","on","e","path","cms","alias","CacheDuration","static","expressStatic","getCacheDuration","status","replaceStaticPath","str","staticFolderPath","replace","bundleManipulationMiddleware","appRootPath","maxage","staticRoutePath","next","filename","basename","modernBundle","endsWith","legacyBundle","startsWith","jsRuntimeLocation","resolve","jsRuntimeBundle","fs","readFileSync","modifiedBundle","set","type","send","readError","resolveStartupMiddleware","startupScriptFilename","startupFilePath","startupFileLocation","sendFile","sendFileError","staticAssets","appPath","scripts","staticRoutePaths","use","map","p","startup","express","maxAge","handleResponse","request","response","content","attributes","Object","entries","key","value","idx","join","loadableBundleData","stats","templates","build","bundle","parse","ex","templateHTML","html","templateHTMLStatic","templateHTMLFragment","fragment","loadableChunkExtractors","modern","ChunkExtractor","entrypoints","namespace","statsFile","legacy","commonLoadableExtractor","addChunk","chunk","assetsByChunkName","info","getBundleData","bundleData","default","getBundleTags","loadableExtractor","legacyScriptTags","getScriptTags","noModule","modernScriptTags","addStandardHeaders","state","packagejson","groups","routingSurrogateKeys","getIn","surrogateKeyHeader","name","header","addVarnishAuthenticationHeaders","setHeader","statusCode","message","stateEntry","selectRouteEntry","project","selectCurrentProject","globalGroups","allowedGroups","allGroups","Array","from","webApp","ReactApp","routes","withReducers","withSagas","withEvents","differentialBundles","disableSsrRedux","handleResponses","stringifyAttributes","responseHandler","versionInfo","get","url","matchedStaticRoute","matchRoutes","StaticRoutes","isStaticRoute","length","staticRoute","onlyDynamic","route","ssr","onlySSR","ssrOnly","normaliseQs","q","toLowerCase","accessMethod","mapJson","query","DYNAMIC","dynamic","REDUX","redux","FRAGMENT","STATIC","context","store","createStore","fromJS","history","initialEntries","versionStatusFromHostname","deliveryApi","getVersionStatusFromHostname","dispatch","setVersionStatus","versionStatus","setVersion","commitRef","buildNo","pickProject","setCurrentProject","jsx","ReduxProvider","renderToString","bundleTags","isDynamicHint","responseHtmlDynamic","runSaga","rootSaga","toPromise","then","sheet","ServerStyleSheet","collectStyles","helmet","Helmet","renderStatic","rewind","htmlAttributes","toString","title","metadata","meta","redirect","reduxState","getState","styleTags","getStyleTags","serialisedReduxData","serialize","ignoreFunction","responseHTML","minifyCssString","err","catch","stack","close","start","ServerFeatures","global","PACKAGE_JSON","DISABLE_SSR_REDUX","PROXY_DELIVERY_API","proxyDeliveryApi","REVERSE_PROXY_PATHS","disable","ConfigureReverseProxies","ServeStaticAssets","ConfigureWebApp","Loadable","preloadAll","server","listen","setTimeout","emit"],"mappings":"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"}
package/esm/forms.js CHANGED
@@ -3,8 +3,8 @@ import { connect } from 'react-redux';
3
3
  import styled, { css, ThemeProvider as ThemeProvider$1 } from 'styled-components';
4
4
  import { Map, fromJS, Iterable } from 'immutable';
5
5
  import { takeEvery, takeLatest, put, call, select, all } from '@redux-saga/core/effects';
6
- import PropTypes from 'prop-types';
7
6
  import { createSelector } from 'reselect';
7
+ import PropTypes from 'prop-types';
8
8
 
9
9
  const ACTION_PREFIX = '@FORM2/';
10
10
  const SET_FORM_DATA = `${ACTION_PREFIX}SET_FORM_DATA`;
@@ -1,10 +1,10 @@
1
1
  import mapJson from 'jsonpath-mapper';
2
2
  import { Map } from 'immutable';
3
- import { f as setRoute } from './actions-fda5e103.js';
4
- import { L as LOGIN_USER, c as LOGOUT_USER, V as VALIDATE_USER, S as SET_AUTHENTICATION_STATE } from './reducers-f855681f.js';
3
+ import { f as setRoute } from './actions-ddd9c623.js';
4
+ import { L as LOGIN_USER, n as LOGOUT_USER, V as VALIDATE_USER, S as SET_AUTHENTICATION_STATE } from './reducers-feab84fc.js';
5
5
  import { takeEvery, select, call, put } from '@redux-saga/core/effects';
6
- import { q as queryParams, g as selectCurrentSearch } from './selectors-170581d2.js';
7
- import { s as selectUserIsAuthenticated, a as selectUserGroups, m as matchUserGroup, b as selectClientCredentials } from './ToJs-19a3244a.js';
6
+ import { q as queryParams, g as selectCurrentSearch } from './selectors-68799788.js';
7
+ import { a as selectUserIsAuthenticated, b as selectUserGroups, m as matchUserGroup, s as selectClientCredentials } from './ToJs-6e7b247c.js';
8
8
  import { to } from 'await-to-js';
9
9
  import Cookies from 'js-cookie';
10
10
 
@@ -196,7 +196,9 @@ class LoginHelper {
196
196
  authenticationState = {
197
197
  authenticated: false,
198
198
  authenticationError: authenticationError,
199
+ authenticationErrorMessage: authenticationError && loginError.message || null,
199
200
  error: !authenticationError,
201
+ errorMessage: !authenticationError && loginError.message || null,
200
202
  clientCredentials: null
201
203
  };
202
204
  LoginHelper.ClearCachedCredentials();
@@ -584,5 +586,5 @@ function* refreshSecurityToken() {
584
586
  }
585
587
  }
586
588
 
587
- export { LoginHelper as L, findContentTypeMapping as f, handleRequiresLoginSaga as h, loginSagas as l, refreshSecurityToken as r };
588
- //# sourceMappingURL=login-c05fee0e.js.map
589
+ export { LoginHelper as L, findContentTypeMapping as f, getManagementApiClient as g, handleRequiresLoginSaga as h, loginSagas as l, refreshSecurityToken as r };
590
+ //# sourceMappingURL=login-1f9ad133.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login-1f9ad133.js","sources":["../src/routing/util/find-contenttype-mapping.ts","../src/user/transformations/mapClientCredentials.js","../src/user/util/ContensisManagementApi.js","../src/user/util/CookieHelper.class.js","../src/user/util/OidcUserManager.js","../src/user/util/LoginHelper.class.js","../src/user/redux/sagas/login.js"],"sourcesContent":["import { ContentTypeMapping } from '../routes';\n\nexport const findContentTypeMapping = (\n ContentTypeMappings: ContentTypeMapping[],\n contentTypeId: string\n) => ContentTypeMappings.find(ct => ct.contentTypeID === contentTypeId);\n","import { mapJson } from '~/util/json-mapper';\n\nconst clientCredentials = {\n bearerToken: 'bearerToken',\n bearerTokenExpiryDate: ({ bearerTokenExpiryDate }) =>\n bearerTokenExpiryDate.toISOString(),\n refreshToken: 'refreshToken',\n refreshTokenExpiryDate: ({ refreshTokenExpiryDate }) =>\n refreshTokenExpiryDate.toISOString(),\n contensisClassicToken: 'contensisClassicToken',\n};\nexport default obj => mapJson(obj, clientCredentials);\n","// import { Client } from 'contensis-management-api';\n\nexport const getManagementApiClient = async ({\n bearerToken,\n bearerTokenExpiryDate,\n refreshToken,\n refreshTokenExpiryDate,\n contensisClassicToken,\n username,\n password,\n}) => {\n const rootUrl = SERVERS.api || SERVERS.cms; /* global SERVERS */\n const projectId = PROJECTS[0].id; /* global PROJECTS */\n\n let config = {};\n if (refreshToken) {\n config = {\n clientType: 'contensis_classic_refresh_token',\n clientDetails: {\n refreshToken,\n },\n };\n } else {\n config = {\n clientType: 'contensis_classic',\n clientDetails: {\n username,\n password,\n },\n };\n }\n const { Client } = await import('contensis-management-api');\n\n const client = Client.create({\n ...config,\n projectId,\n rootUrl,\n });\n\n if (bearerToken) client.bearerToken = bearerToken;\n if (bearerTokenExpiryDate)\n client.bearerTokenExpiryDate = bearerTokenExpiryDate;\n if (refreshToken) client.refreshToken = refreshToken;\n if (refreshTokenExpiryDate)\n client.refreshTokenExpiryDate = refreshTokenExpiryDate;\n if (contensisClassicToken)\n client.contensisClassicToken = contensisClassicToken;\n\n return client;\n};\n","import Cookies from 'js-cookie';\n\nconst COOKIE_VALID_DAYS = 1; // 0 = Session cookie\n\n// Override the default js-cookie conversion / encoding\n// methods so the written values work with Contensis sites\nconst _cookie = Cookies.withConverter({\n read: value => decodeURIComponent(value),\n write: value => encodeURIComponent(value),\n});\n\nexport class CookieHelper {\n static GetCookie(name) {\n let cookie = _cookie.get(name);\n if (typeof cookie == 'undefined') {\n return null;\n }\n return cookie;\n }\n\n static SetCookie(name, value, maxAgeDays = COOKIE_VALID_DAYS) {\n maxAgeDays === 0\n ? _cookie.set(name, value)\n : _cookie.set(name, value, { expires: maxAgeDays });\n }\n\n static DeleteCookie(name) {\n _cookie.remove(name);\n }\n}\n","const context = typeof window != 'undefined' ? window : global;\nconst requireOidc =\n process.env.NODE_ENV === 'development'\n ? WSFED_LOGIN === 'true' /* global WSFED_LOGIN */\n : context.WSFED_LOGIN === 'true';\n\nconst servers = SERVERS; /* global SERVERS */\n\nexport const userManagerConfig =\n typeof window !== 'undefined'\n ? {\n authority: `${servers.cms}/authenticate/`,\n client_id: 'WebsiteAdfsClient',\n redirect_uri: window.location.toString(),\n post_logout_redirect_uri: window.location.toString(),\n response_type: 'id_token',\n scope: 'openid',\n filterProtocolClaims: false,\n }\n : {};\n\nexport const createUserManager = async config => {\n if (typeof window !== 'undefined' && requireOidc) {\n try {\n const { UserManager } = await import(\n /* webpackChunkName: \"oidcclient\" */ 'oidc-client'\n );\n return new UserManager(config);\n } catch (e) {\n // eslint-disable-next-line no-console\n console.log('Exception in createUserManager: ', e);\n }\n } else return {};\n};\n\n//const userManager = createUserManager(userManagerConfig);\n\n// export default userManager;\n","/* eslint-disable require-atomic-updates */\nimport { getManagementApiClient } from './ContensisManagementApi';\nimport { to } from 'await-to-js';\n\nimport { CookieHelper } from './CookieHelper.class';\n\nimport mapClientCredentials from '../transformations/mapClientCredentials';\nimport { createUserManager, userManagerConfig } from './OidcUserManager';\n\nexport const LOGIN_COOKIE = 'ContensisCMSUserName';\nexport const REFRESH_TOKEN_COOKIE = 'RefreshToken';\n\nconst context = typeof window != 'undefined' ? window : global;\n\nexport class LoginHelper {\n static CMS_URL = SERVERS.cms /* global SERVERS */;\n static WSFED_LOGIN =\n process.env.NODE_ENV === 'development'\n ? WSFED_LOGIN === 'true' /* global WSFED_LOGIN */\n : context.WSFED_LOGIN === 'true';\n static LOGIN_ROUTE = '/account/login';\n static ACCESS_DENIED_ROUTE = '/account/access-denied';\n\n static SetLoginCookies({ contensisClassicToken, refreshToken }) {\n console.info(\n 'SetLoginCookies:',\n LOGIN_COOKIE,\n contensisClassicToken,\n REFRESH_TOKEN_COOKIE,\n refreshToken\n );\n if (contensisClassicToken)\n CookieHelper.SetCookie(LOGIN_COOKIE, contensisClassicToken);\n if (refreshToken)\n CookieHelper.SetCookie(REFRESH_TOKEN_COOKIE, refreshToken);\n }\n\n static GetCachedCredentials() {\n return {\n bearerToken: null,\n bearerTokenExpiryDate: null,\n refreshToken: CookieHelper.GetCookie(REFRESH_TOKEN_COOKIE),\n refreshTokenExpiryDate: null,\n contensisClassicToken: CookieHelper.GetCookie(LOGIN_COOKIE),\n };\n }\n\n static ClearCachedCredentials() {\n CookieHelper.DeleteCookie(LOGIN_COOKIE);\n CookieHelper.DeleteCookie(REFRESH_TOKEN_COOKIE);\n }\n\n static async LoginUser({ username, password, clientCredentials }) {\n let credentials = clientCredentials;\n let authenticationState = {\n authenticated: false,\n authenticationError: false,\n error: false,\n clientCredentials: null,\n };\n let transientClient;\n let user;\n\n if (username && password) {\n // Get a management client with username and password\n transientClient = await getManagementApiClient({\n username,\n password,\n });\n\n // Ensure the client has requested a bearer token\n const [loginError, clientBearerToken] = await to(\n transientClient.ensureBearerToken()\n );\n\n // Problem getting token with username and password\n if (loginError) {\n const authenticationError = loginError.name.includes(\n 'ContensisAuthenticationError'\n );\n authenticationState = {\n authenticated: false,\n authenticationError: authenticationError,\n authenticationErrorMessage:\n (authenticationError && loginError.message) || null,\n error: !authenticationError,\n errorMessage: (!authenticationError && loginError.message) || null,\n clientCredentials: null,\n };\n LoginHelper.ClearCachedCredentials();\n }\n\n // Got a token using username and password\n if (clientBearerToken) {\n // Set credentials so we can continue to GetUserDetails\n credentials = mapClientCredentials(transientClient);\n LoginHelper.SetLoginCookies(credentials);\n authenticationState = {\n authenticated: true,\n authenticationError: false,\n error: false,\n clientCredentials: credentials,\n };\n }\n }\n\n // If we have credentials supplied by a successful username and password login\n // or clientCredentials supplied in the options argument we can continue to\n // fetch the user's details\n if (credentials) {\n const client =\n transientClient || (await getManagementApiClient(credentials));\n const [error, userDetails] = await LoginHelper.GetUserDetails(client);\n\n if (error) {\n authenticationState = {\n authenticated: false,\n authenticationError: false,\n error: { message: error.message, stack: error.stack },\n clientCredentials: null,\n };\n LoginHelper.ClearCachedCredentials();\n } else {\n // Ensure we get latest refreshToken and contensisClassicToken from the latest client\n const latestCredentials = mapClientCredentials(client);\n LoginHelper.SetLoginCookies(latestCredentials);\n\n user = userDetails;\n authenticationState = {\n authenticated: true,\n authenticationError: false,\n error: false,\n clientCredentials: latestCredentials,\n };\n }\n }\n\n return { authenticationState, user };\n }\n\n static GetUserDetails = async client => {\n let userError,\n groupsError,\n user = {},\n groupsResult;\n\n [userError, user] = await to(client.security.users.getCurrent());\n if (user && user.id) {\n [groupsError, groupsResult] = await to(\n client.security.users.getUserGroups({\n userId: user.id,\n includeInherited: true,\n })\n );\n // Set groups attribute in user object to be the items\n // array from the getUserGroups result\n if (groupsResult && groupsResult.items) user.groups = groupsResult.items;\n\n //If groups call fails then log the error but allow the user to login still\n // eslint-disable-next-line no-console\n if (groupsError) console.log(groupsError);\n }\n return [userError, user];\n };\n\n static LogoutUser(redirectPath) {\n LoginHelper.ClearCachedCredentials();\n if (LoginHelper.WSFED_LOGIN) {\n LoginHelper.WsFedLogout(redirectPath);\n } else {\n if (redirectPath) LoginHelper.ClientRedirectToPath(redirectPath);\n else LoginHelper.ClientRedirectToSignInPage();\n }\n }\n\n static ClientRedirectToHome(location) {\n if (typeof window != 'undefined') {\n let url = '/';\n if (location) {\n const { search, hash } = location.toJS();\n url = search ? `${url}${search}` : url;\n url = hash ? `${url}${hash}` : url;\n }\n window.location.href = url;\n }\n }\n\n static async ClientRedirectToSignInPage(redirectPath) {\n if (LoginHelper.WSFED_LOGIN) {\n await LoginHelper.WsFedLogout();\n await LoginHelper.WsFedLogin();\n } else {\n // Standard Contensis Login\n let url = LoginHelper.LOGIN_ROUTE;\n if (typeof redirectPath === 'string')\n url = `${url}?redirect_uri=${redirectPath}`;\n if (\n typeof location !== 'undefined' &&\n redirectPath !== LoginHelper.LOGIN_ROUTE\n )\n location.replace(url);\n }\n }\n\n static ClientRedirectToAccessDeniedPage(originalPath) {\n let url = LoginHelper.ACCESS_DENIED_ROUTE;\n if (originalPath === url) return;\n\n if (typeof originalPath === 'string')\n url = `${url}?original_uri=${originalPath}`;\n if (typeof location !== 'undefined') location.href = url;\n }\n\n static ClientRedirectToPath(redirectPath) {\n if (typeof redirectPath === 'string') {\n if (typeof location !== 'undefined') window.location.href = redirectPath;\n } else LoginHelper.ClientRedirectToHome();\n }\n\n static async WsFedLogin(redirectUri) {\n const userManager = await createUserManager(userManagerConfig);\n userManager.signinRedirect({\n scope: 'openid',\n response_type: 'id_token',\n redirect_uri: redirectUri || window.location.toString(),\n });\n }\n\n static async WsFedLogout(redirectPath) {\n await fetch(\n `${LoginHelper.CMS_URL}/authenticate/logout?jsonResponseRequired=true`,\n {\n credentials: 'include',\n }\n );\n if (redirectPath) {\n window.location = redirectPath;\n }\n }\n\n static async GetCredentialsForSecurityToken(securityToken) {\n const [error, response] = await to(\n fetch(`${LoginHelper.CMS_URL}/REST/Contensis/Security/IsAuthenticated`, {\n method: 'POST',\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n securityToken: encodeURIComponent(securityToken),\n }),\n })\n );\n if (error) return [{ message: 'Failed to fetch credentials' }];\n if (response.ok) {\n const [parseError, body] = await to(response.json());\n if (parseError) return [parseError];\n\n const { LogonResult, ApplicationData = [] } = body;\n if (LogonResult !== 0) {\n return [\n { message: 'Security token is invalid', data: ApplicationData },\n ];\n }\n if (ApplicationData.length > 0) {\n let refreshToken;\n ApplicationData.forEach(item => {\n if (item.Key === 'ContensisSecurityRefreshToken')\n refreshToken = item.Value;\n });\n if (!refreshToken) {\n return [\n {\n message:\n 'Fetch credentials: Unable to find ContensisSecurityRefreshToken',\n },\n ];\n }\n return [undefined, refreshToken];\n } else {\n return [\n {\n message:\n 'Fetch credentials: Unable to find ContensisSecurityRefreshToken',\n },\n ];\n }\n } else {\n return [\n {\n message: `Fetch credentials error: ${response.status} ${response.statusText}`,\n },\n ];\n }\n }\n\n static isZengentiStaff(email) {\n const emailRefs = ['@zengenti', '@contensis'];\n\n return emailRefs.some(emailRef => {\n if (email.includes(emailRef)) {\n return true;\n }\n });\n }\n}\n","import { Map } from 'immutable';\nimport { takeEvery, select, put, call } from 'redux-saga/effects';\nimport {\n SET_AUTHENTICATION_STATE,\n LOGIN_USER,\n LOGOUT_USER,\n VALIDATE_USER,\n} from '../types';\nimport {\n selectUserIsAuthenticated,\n selectClientCredentials,\n selectUserGroups,\n} from '../selectors';\n\nimport { setRoute } from '~/routing/redux/actions';\nimport { selectCurrentSearch } from '~/routing/redux/selectors';\nimport { findContentTypeMapping } from '~/routing/util/find-contenttype-mapping';\n\nimport mapClientCredentials from '~/user/transformations/mapClientCredentials';\n\nimport { getManagementApiClient } from '~/user/util/ContensisManagementApi';\nimport { LoginHelper } from '~/user/util/LoginHelper.class';\nimport { matchUserGroup } from '~/user/util/matchGroups';\nimport { queryParams } from '~/util/navigation';\n\nexport const loginSagas = [\n takeEvery(LOGIN_USER, loginUserSaga),\n takeEvery(LOGOUT_USER, logoutUserSaga),\n takeEvery(VALIDATE_USER, validateUserSaga),\n takeEvery(SET_AUTHENTICATION_STATE, redirectAfterSuccessfulLoginSaga),\n];\n\nexport function* handleRequiresLoginSaga(action) {\n const {\n entry,\n requireLogin,\n routes: { ContentTypeMappings },\n staticRoute,\n } = action;\n let userLoggedIn = yield select(selectUserIsAuthenticated);\n\n // Check for a securityToken in querystring\n const currentQs = queryParams(yield select(selectCurrentSearch));\n const securityToken = currentQs.securityToken || currentQs.securitytoken;\n\n // Check if any of the defined routes have \"requireLogin\" attribute\n const { requireLogin: authRoute } = (staticRoute && staticRoute.route) || {};\n const { requireLogin: authContentType } =\n (entry &&\n findContentTypeMapping(ContentTypeMappings, entry.sys.contentTypeId)) ||\n {};\n\n // If requireLogin, authRoute or authContentType has been specified as an\n // array of groups we can merge all the arrays and match on any group supplied\n const routeRequiresGroups = [\n ...((Array.isArray(authContentType) && authContentType) || []),\n ...((Array.isArray(authRoute) && authRoute) || []),\n ...((Array.isArray(requireLogin) && requireLogin) || []),\n ];\n const routeRequiresLogin = !!authContentType || !!authRoute || !!requireLogin;\n\n if (!userLoggedIn) {\n // If cookies or securityToken are found on any route change\n // always validate and login the user\n if (routeRequiresLogin) {\n // If routeRequiresLogin do a blocking call that returns userLoggedIn\n userLoggedIn = yield call(validateUserSaga, { securityToken });\n }\n // otherwise do a non blocking put to handle validation in the background\n else yield put({ type: VALIDATE_USER, securityToken });\n }\n\n if (routeRequiresLogin) {\n // If a security token is in the querystring and we are not already\n // logged in something is wrong and we won't bother going on another redirect loop\n if (!userLoggedIn && !securityToken) {\n LoginHelper.ClientRedirectToSignInPage(action.location.pathname);\n } else if (routeRequiresGroups.length > 0) {\n const userGroups = (yield select(selectUserGroups)).toJS();\n const groupMatch = matchUserGroup(userGroups, routeRequiresGroups);\n\n if (!groupMatch)\n LoginHelper.ClientRedirectToAccessDeniedPage(action.location.pathname);\n }\n }\n}\n\nfunction* validateUserSaga({ securityToken }) {\n if (securityToken) {\n // If we have just a security token we will call a CMS endpoint\n // and provide us with a RefreshToken cookie we can use during login\n const [error, refreshToken] =\n yield LoginHelper.GetCredentialsForSecurityToken(securityToken);\n if (refreshToken)\n LoginHelper.SetLoginCookies({\n contensisClassicToken: securityToken,\n refreshToken,\n });\n if (error)\n yield put({\n type: SET_AUTHENTICATION_STATE,\n authenticationState: {\n error: { message: error.message, stack: error.stack },\n },\n });\n }\n\n // Check for refreshToken in cookies\n const clientCredentials = LoginHelper.GetCachedCredentials();\n\n // Log the user in if a refreshToken is found\n if (clientCredentials.refreshToken)\n yield call(loginUserSaga, { clientCredentials });\n\n // Tell any callers have we successfully logged in?\n return yield select(selectUserIsAuthenticated);\n}\n\nfunction* loginUserSaga(action = {}) {\n const { username, password, clientCredentials } = action;\n\n // If a WSFED_LOGIN site has dispatched the loginUser action\n // just redirect them to the Identity Provider sign in\n if (action.type === LOGIN_USER && LoginHelper.WSFED_LOGIN)\n LoginHelper.ClientRedirectToSignInPage();\n\n const { authenticationState, user } = yield LoginHelper.LoginUser({\n username,\n password,\n clientCredentials,\n });\n\n yield put({\n type: SET_AUTHENTICATION_STATE,\n authenticationState,\n user,\n });\n}\nconst removeHostnamePart = path => {\n // eslint-disable-next-line no-console\n console.log(path);\n const relativePath = '/' + path.split('/').splice(3).join('/');\n // eslint-disable-next-line no-console\n console.log(relativePath);\n return relativePath;\n};\n\nfunction* redirectAfterSuccessfulLoginSaga() {\n const isLoggedIn = yield select(selectUserIsAuthenticated);\n const { redirect_uri: redirectPath, ReturnURL: assetRedirectPath } =\n queryParams(yield select(selectCurrentSearch));\n\n if (isLoggedIn && assetRedirectPath && typeof window != 'undefined') {\n const path = removeHostnamePart(assetRedirectPath);\n // This has to be a hard href to get the app to\n // leave React and hit the server for the IIS hosted assets\n window.location.href = path;\n // yield put(setRoute(path)); // does not work in this scenario\n } else if (isLoggedIn && redirectPath) {\n yield put(setRoute(redirectPath));\n }\n}\n\nfunction* logoutUserSaga({ redirectPath }) {\n yield put({\n type: SET_AUTHENTICATION_STATE,\n user: null,\n });\n yield LoginHelper.LogoutUser(redirectPath);\n}\n\nexport function* refreshSecurityToken() {\n const clientCredentials = (\n (yield select(selectClientCredentials)) || Map()\n ).toJS();\n if (Object.keys(clientCredentials).length > 0) {\n const client = yield getManagementApiClient(clientCredentials);\n yield client.authenticate();\n\n const authenticationState = {};\n\n const newClientCredentials = mapClientCredentials(client);\n\n authenticationState.clientCredentials = newClientCredentials;\n\n yield put({\n type: SET_AUTHENTICATION_STATE,\n authenticationState,\n });\n }\n}\n"],"names":["findContentTypeMapping","ContentTypeMappings","contentTypeId","find","ct","contentTypeID","clientCredentials","bearerToken","bearerTokenExpiryDate","toISOString","refreshToken","refreshTokenExpiryDate","contensisClassicToken","obj","mapJson","getManagementApiClient","username","password","rootUrl","SERVERS","api","cms","projectId","PROJECTS","id","config","clientType","clientDetails","Client","client","create","COOKIE_VALID_DAYS","_cookie","Cookies","withConverter","read","value","decodeURIComponent","write","encodeURIComponent","CookieHelper","GetCookie","name","cookie","get","SetCookie","maxAgeDays","set","expires","DeleteCookie","remove","context","window","global","requireOidc","process","env","NODE_ENV","WSFED_LOGIN","servers","userManagerConfig","authority","client_id","redirect_uri","location","toString","post_logout_redirect_uri","response_type","scope","filterProtocolClaims","createUserManager","UserManager","e","console","log","LOGIN_COOKIE","REFRESH_TOKEN_COOKIE","LoginHelper","SetLoginCookies","info","GetCachedCredentials","ClearCachedCredentials","LoginUser","credentials","authenticationState","authenticated","authenticationError","error","transientClient","user","loginError","clientBearerToken","to","ensureBearerToken","includes","authenticationErrorMessage","message","errorMessage","mapClientCredentials","userDetails","GetUserDetails","stack","latestCredentials","LogoutUser","redirectPath","WsFedLogout","ClientRedirectToPath","ClientRedirectToSignInPage","ClientRedirectToHome","url","search","hash","toJS","href","WsFedLogin","LOGIN_ROUTE","replace","ClientRedirectToAccessDeniedPage","originalPath","ACCESS_DENIED_ROUTE","redirectUri","userManager","signinRedirect","fetch","CMS_URL","GetCredentialsForSecurityToken","securityToken","response","method","headers","Accept","body","JSON","stringify","ok","parseError","json","LogonResult","ApplicationData","data","length","forEach","item","Key","Value","undefined","status","statusText","isZengentiStaff","email","emailRefs","some","emailRef","userError","groupsError","groupsResult","security","users","getCurrent","getUserGroups","userId","includeInherited","items","groups","loginSagas","takeEvery","LOGIN_USER","loginUserSaga","LOGOUT_USER","logoutUserSaga","VALIDATE_USER","validateUserSaga","SET_AUTHENTICATION_STATE","redirectAfterSuccessfulLoginSaga","handleRequiresLoginSaga","action","entry","requireLogin","routes","staticRoute","userLoggedIn","select","selectUserIsAuthenticated","currentQs","queryParams","selectCurrentSearch","securitytoken","authRoute","route","authContentType","sys","routeRequiresGroups","Array","isArray","routeRequiresLogin","call","put","type","pathname","userGroups","selectUserGroups","groupMatch","matchUserGroup","removeHostnamePart","path","relativePath","split","splice","join","isLoggedIn","ReturnURL","assetRedirectPath","setRoute","refreshSecurityToken","selectClientCredentials","Map","Object","keys","authenticate","newClientCredentials"],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ import { Seq, Map, List } from 'immutable';
2
+
3
+ const fromJSOrdered = js => {
4
+ return typeof js !== 'object' || js === null ? js : Array.isArray(js) ? Seq(js).map(fromJSOrdered).toList() : Seq(js).map(fromJSOrdered).toOrderedMap();
5
+ };
6
+
7
+ const ACTION_PREFIX = '@USER/';
8
+ const VALIDATE_USER = `${ACTION_PREFIX}VALIDATE_USER`;
9
+ const SET_AUTHENTICATION_STATE = `${ACTION_PREFIX}SET_AUTHENTICATION_STATE`;
10
+ const LOGIN_USER = `${ACTION_PREFIX}LOGIN_USER`;
11
+ const LOGIN_SUCCESSFUL = `${ACTION_PREFIX}LOGIN_SUCCESSFUL`;
12
+ const LOGIN_FAILED = `${ACTION_PREFIX}LOGIN_FAILED`;
13
+ const LOGOUT_USER = `${ACTION_PREFIX}LOGOUT_USER`;
14
+ const REGISTER_USER = `${ACTION_PREFIX}REGISTER_USER`;
15
+ const REGISTER_USER_SUCCESS = `${ACTION_PREFIX}REGISTER_USER_SUCCESS`;
16
+ const REGISTER_USER_FAILED = `${ACTION_PREFIX}REGISTER_USER_FAILED`;
17
+ const REQUEST_USER_PASSWORD_RESET = `${ACTION_PREFIX}REQUEST_USER_PASSWORD_RESET`;
18
+ const RESET_USER_PASSWORD = `${ACTION_PREFIX}RESET_USER_PASSWORD`;
19
+ const REQUEST_USER_PASSWORD_RESET_SENDING = `${ACTION_PREFIX}REQUEST_USER_PASSWORD_RESET_SENDING`;
20
+ const REQUEST_USER_PASSWORD_RESET_SUCCESS = `${ACTION_PREFIX}REQUEST_USER_PASSWORD_RESET_SUCCESS`;
21
+ const REQUEST_USER_PASSWORD_RESET_ERROR = `${ACTION_PREFIX}REQUEST_USER_PASSWORD_RESET_ERROR`;
22
+ const RESET_USER_PASSWORD_SENDING = `${ACTION_PREFIX}RESET_USER_PASSWORD_SENDING`;
23
+ const RESET_USER_PASSWORD_SUCCESS = `${ACTION_PREFIX}RESET_USER_PASSWORD_SUCCESS`;
24
+ const RESET_USER_PASSWORD_ERROR = `${ACTION_PREFIX}RESET_USER_PASSWORD_ERROR`;
25
+ const CHANGE_USER_PASSWORD = `${ACTION_PREFIX}CHANGE_USER_PASSWORD`;
26
+ const CHANGE_USER_PASSWORD_SENDING = `${ACTION_PREFIX}CHANGE_USER_PASSWORD_SENDING`;
27
+ const CHANGE_USER_PASSWORD_SUCCESS = `${ACTION_PREFIX}CHANGE_USER_PASSWORD_SUCCESS`;
28
+ const CHANGE_USER_PASSWORD_ERROR = `${ACTION_PREFIX}CHANGE_USER_PASSWORD_ERROR`;
29
+
30
+ var types = /*#__PURE__*/Object.freeze({
31
+ __proto__: null,
32
+ VALIDATE_USER: VALIDATE_USER,
33
+ SET_AUTHENTICATION_STATE: SET_AUTHENTICATION_STATE,
34
+ LOGIN_USER: LOGIN_USER,
35
+ LOGIN_SUCCESSFUL: LOGIN_SUCCESSFUL,
36
+ LOGIN_FAILED: LOGIN_FAILED,
37
+ LOGOUT_USER: LOGOUT_USER,
38
+ REGISTER_USER: REGISTER_USER,
39
+ REGISTER_USER_SUCCESS: REGISTER_USER_SUCCESS,
40
+ REGISTER_USER_FAILED: REGISTER_USER_FAILED,
41
+ REQUEST_USER_PASSWORD_RESET: REQUEST_USER_PASSWORD_RESET,
42
+ RESET_USER_PASSWORD: RESET_USER_PASSWORD,
43
+ REQUEST_USER_PASSWORD_RESET_SENDING: REQUEST_USER_PASSWORD_RESET_SENDING,
44
+ REQUEST_USER_PASSWORD_RESET_SUCCESS: REQUEST_USER_PASSWORD_RESET_SUCCESS,
45
+ REQUEST_USER_PASSWORD_RESET_ERROR: REQUEST_USER_PASSWORD_RESET_ERROR,
46
+ RESET_USER_PASSWORD_SENDING: RESET_USER_PASSWORD_SENDING,
47
+ RESET_USER_PASSWORD_SUCCESS: RESET_USER_PASSWORD_SUCCESS,
48
+ RESET_USER_PASSWORD_ERROR: RESET_USER_PASSWORD_ERROR,
49
+ CHANGE_USER_PASSWORD: CHANGE_USER_PASSWORD,
50
+ CHANGE_USER_PASSWORD_SENDING: CHANGE_USER_PASSWORD_SENDING,
51
+ CHANGE_USER_PASSWORD_SUCCESS: CHANGE_USER_PASSWORD_SUCCESS,
52
+ CHANGE_USER_PASSWORD_ERROR: CHANGE_USER_PASSWORD_ERROR
53
+ });
54
+
55
+ const defaultAuthenticationState = Map({
56
+ authenticated: false,
57
+ authenticationError: false,
58
+ authenticationErrorMessage: null,
59
+ clientCredentials: null,
60
+ error: false,
61
+ errorMessage: null,
62
+ loading: false
63
+ });
64
+ const defaultPasswordResetRequestValues = {
65
+ isSending: false,
66
+ sent: false,
67
+ error: null
68
+ };
69
+ const defaultResetPasswordValues = {
70
+ isSending: false,
71
+ sent: false,
72
+ error: null
73
+ };
74
+ const defaultChangePasswordValues = {
75
+ isSending: false,
76
+ sent: false,
77
+ error: null
78
+ };
79
+ const initialUserState = Map({
80
+ authenticationState: defaultAuthenticationState,
81
+ passwordResetRequest: defaultPasswordResetRequestValues,
82
+ resetPassword: defaultResetPasswordValues,
83
+ changePassword: defaultChangePasswordValues,
84
+ groups: new List([])
85
+ });
86
+ var UserReducer = ((state = initialUserState, action) => {
87
+ switch (action.type) {
88
+ case LOGIN_USER:
89
+ case LOGOUT_USER:
90
+ case SET_AUTHENTICATION_STATE:
91
+ {
92
+ if (!action.authenticationState) {
93
+ action.authenticationState = defaultAuthenticationState.toJS();
94
+ }
95
+
96
+ const loading = action.type === LOGIN_USER;
97
+ const {
98
+ authenticationState: {
99
+ error = false,
100
+ errorMessage = null,
101
+ authenticated,
102
+ authenticationError = false,
103
+ authenticationErrorMessage = null,
104
+ clientCredentials = null
105
+ },
106
+ user
107
+ } = action;
108
+
109
+ if (user) {
110
+ user.name = `${user.firstName} ${user.lastName}`;
111
+ user.isZengentiStaff = user.email.includes('@zengenti.com');
112
+ }
113
+
114
+ const nextState = { ...initialUserState.toJS(),
115
+ ...(user || state.toJS()),
116
+ authenticationState: {
117
+ authenticated: authenticated || state.getIn(['authenticationState', 'authenticated']),
118
+ authenticationError,
119
+ authenticationErrorMessage,
120
+ clientCredentials,
121
+ error,
122
+ errorMessage,
123
+ loading
124
+ }
125
+ };
126
+ return fromJSOrdered(nextState);
127
+ }
128
+ // REGISTER_USER is the trigger to set the user.registration initial state
129
+ // and will set user.registration.loading to true
130
+ // REGISTER_USER_FAILED will unset user.registration.loading and will set
131
+ // the value in user.registration.error
132
+ // REGISTER_USER_SUCCESS will unset user.registration.loading and will
133
+ // set user.registration to the created user from the api response
134
+
135
+ case REGISTER_USER:
136
+ case REGISTER_USER_FAILED:
137
+ case REGISTER_USER_SUCCESS:
138
+ {
139
+ const {
140
+ error,
141
+ user
142
+ } = action; // Set registration object from the supplied action.user
143
+ // so we can call these values back later
144
+
145
+ const nextState = state.set('registration', user ? fromJSOrdered(user) : state.get('registration', Map())); // Set registration flags so the UI can track the status
146
+
147
+ return nextState.setIn(['registration', 'success'], action.type === REGISTER_USER_SUCCESS).setIn(['registration', 'error'], error || false).setIn(['registration', 'loading'], action.type === REGISTER_USER);
148
+ }
149
+
150
+ case REQUEST_USER_PASSWORD_RESET_SENDING:
151
+ return state.setIn(['passwordResetRequest', 'isSending'], true);
152
+
153
+ case REQUEST_USER_PASSWORD_RESET_SUCCESS:
154
+ return state.setIn(['passwordResetRequest', 'isSending'], false).setIn(['passwordResetRequest', 'sent'], true);
155
+
156
+ case REQUEST_USER_PASSWORD_RESET_ERROR:
157
+ return state.setIn(['passwordResetRequest', 'isSending'], false).setIn(['passwordResetRequest', 'error'], action.error);
158
+
159
+ case RESET_USER_PASSWORD_SENDING:
160
+ return state.setIn(['resetPassword', 'isSending'], true);
161
+
162
+ case RESET_USER_PASSWORD_SUCCESS:
163
+ return state.setIn(['resetPassword', 'isSending'], false).setIn(['resetPassword', 'sent'], true);
164
+
165
+ case RESET_USER_PASSWORD_ERROR:
166
+ return state.setIn(['resetPassword', 'isSending'], false).setIn(['resetPassword', 'error'], action.error);
167
+
168
+ case CHANGE_USER_PASSWORD_SENDING:
169
+ return state.setIn(['changePassword', 'isSending'], true);
170
+
171
+ case CHANGE_USER_PASSWORD_SUCCESS:
172
+ return state.setIn(['changePassword', 'isSending'], false).setIn(['changePassword', 'sent'], true);
173
+
174
+ case CHANGE_USER_PASSWORD_ERROR:
175
+ return state.setIn(['changePassword', 'isSending'], false).setIn(['changePassword', 'error'], action.error);
176
+
177
+ default:
178
+ return state;
179
+ }
180
+ });
181
+
182
+ export { CHANGE_USER_PASSWORD as C, LOGIN_USER as L, REGISTER_USER as R, SET_AUTHENTICATION_STATE as S, UserReducer as U, VALIDATE_USER as V, REGISTER_USER_SUCCESS as a, REGISTER_USER_FAILED as b, REQUEST_USER_PASSWORD_RESET as c, RESET_USER_PASSWORD as d, REQUEST_USER_PASSWORD_RESET_SENDING as e, REQUEST_USER_PASSWORD_RESET_SUCCESS as f, REQUEST_USER_PASSWORD_RESET_ERROR as g, RESET_USER_PASSWORD_SENDING as h, RESET_USER_PASSWORD_SUCCESS as i, RESET_USER_PASSWORD_ERROR as j, CHANGE_USER_PASSWORD_ERROR as k, CHANGE_USER_PASSWORD_SENDING as l, CHANGE_USER_PASSWORD_SUCCESS as m, LOGOUT_USER as n, fromJSOrdered as o, initialUserState as p, types as t };
183
+ //# sourceMappingURL=reducers-feab84fc.js.map