@salesforce/ui-bundle-template-app-angular-template-b2x 11.30.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 (211) hide show
  1. package/LICENSE.txt +82 -0
  2. package/dist/.forceignore +15 -0
  3. package/dist/.husky/pre-commit +4 -0
  4. package/dist/.prettierignore +11 -0
  5. package/dist/.prettierrc +17 -0
  6. package/dist/CHANGELOG.md +3966 -0
  7. package/dist/README.md +77 -0
  8. package/dist/config/project-scratch-def.json +13 -0
  9. package/dist/eslint.config.js +7 -0
  10. package/dist/force-app/main/default/classes/UIBundleAuthUtils.cls +68 -0
  11. package/dist/force-app/main/default/classes/UIBundleAuthUtils.cls-meta.xml +5 -0
  12. package/dist/force-app/main/default/classes/UIBundleChangePassword.cls +77 -0
  13. package/dist/force-app/main/default/classes/UIBundleChangePassword.cls-meta.xml +5 -0
  14. package/dist/force-app/main/default/classes/UIBundleForgotPassword.cls +71 -0
  15. package/dist/force-app/main/default/classes/UIBundleForgotPassword.cls-meta.xml +5 -0
  16. package/dist/force-app/main/default/classes/UIBundleLogin.cls +105 -0
  17. package/dist/force-app/main/default/classes/UIBundleLogin.cls-meta.xml +5 -0
  18. package/dist/force-app/main/default/classes/UIBundleRegistration.cls +162 -0
  19. package/dist/force-app/main/default/classes/UIBundleRegistration.cls-meta.xml +5 -0
  20. package/dist/force-app/main/default/digitalExperienceConfigs/angularexternalapp1.digitalExperienceConfig-meta.xml +8 -0
  21. package/dist/force-app/main/default/digitalExperiences/site/angularexternalapp1/angularexternalapp1.digitalExperience-meta.xml +11 -0
  22. package/dist/force-app/main/default/digitalExperiences/site/angularexternalapp1/sfdc_cms__site/angularexternalapp1/_meta.json +5 -0
  23. package/dist/force-app/main/default/digitalExperiences/site/angularexternalapp1/sfdc_cms__site/angularexternalapp1/content.json +10 -0
  24. package/dist/force-app/main/default/networks/angularexternalapp.network-meta.xml +60 -0
  25. package/dist/force-app/main/default/package.xml +24 -0
  26. package/dist/force-app/main/default/permissionsets/angularexternalapp_Guest_User_Api_Access.permissionset-meta.xml +9 -0
  27. package/dist/force-app/main/default/sites/angularexternalapp.site-meta.xml +31 -0
  28. package/dist/force-app/main/default/uiBundles/angularexternalapp/.forceignore +15 -0
  29. package/dist/force-app/main/default/uiBundles/angularexternalapp/.postcssrc.json +5 -0
  30. package/dist/force-app/main/default/uiBundles/angularexternalapp/.prettierignore +8 -0
  31. package/dist/force-app/main/default/uiBundles/angularexternalapp/.prettierrc +12 -0
  32. package/dist/force-app/main/default/uiBundles/angularexternalapp/CHANGELOG.md +4 -0
  33. package/dist/force-app/main/default/uiBundles/angularexternalapp/README.md +85 -0
  34. package/dist/force-app/main/default/uiBundles/angularexternalapp/angular.json +98 -0
  35. package/dist/force-app/main/default/uiBundles/angularexternalapp/angularexternalapp.uibundle-meta.xml +8 -0
  36. package/dist/force-app/main/default/uiBundles/angularexternalapp/e2e/app.spec.ts +15 -0
  37. package/dist/force-app/main/default/uiBundles/angularexternalapp/esbuild/api-version.mjs +17 -0
  38. package/dist/force-app/main/default/uiBundles/angularexternalapp/eslint.config.js +60 -0
  39. package/dist/force-app/main/default/uiBundles/angularexternalapp/middleware/html.mjs +3 -0
  40. package/dist/force-app/main/default/uiBundles/angularexternalapp/middleware/proxy.mjs +12 -0
  41. package/dist/force-app/main/default/uiBundles/angularexternalapp/package.json +56 -0
  42. package/dist/force-app/main/default/uiBundles/angularexternalapp/playwright.config.ts +25 -0
  43. package/dist/force-app/main/default/uiBundles/angularexternalapp/public/favicon.ico +0 -0
  44. package/dist/force-app/main/default/uiBundles/angularexternalapp/scripts/rewrite-e2e-assets.mjs +30 -0
  45. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/account/account-search.service.ts +196 -0
  46. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/account/distinctAccountIndustries.ts +26 -0
  47. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/account/distinctAccountTypes.ts +26 -0
  48. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/account/getAccountDetail.ts +128 -0
  49. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/account/searchAccounts.ts +58 -0
  50. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/data-client.service.spec.ts +184 -0
  51. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/data-client.service.ts +74 -0
  52. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/api/user-profile.service.ts +126 -0
  53. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/app.config.ts +22 -0
  54. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/app.html +1 -0
  55. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/app.routes.ts +77 -0
  56. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/app.spec.ts +18 -0
  57. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/app.ts +15 -0
  58. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/layout/app-layout/app-layout.component.html +53 -0
  59. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/layout/app-layout/app-layout.component.spec.ts +89 -0
  60. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/layout/app-layout/app-layout.component.ts +81 -0
  61. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/_field-size.scss +42 -0
  62. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/alert/alert.component.html +31 -0
  63. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/alert/alert.component.ts +53 -0
  64. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/button/button.component.html +18 -0
  65. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/button/button.component.scss +112 -0
  66. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/button/button.component.ts +57 -0
  67. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/card/card.component.scss +34 -0
  68. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/card/card.component.ts +110 -0
  69. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/collapsible/collapsible.component.html +10 -0
  70. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/collapsible/collapsible.component.ts +26 -0
  71. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-picker/date-picker.component.html +25 -0
  72. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-picker/date-picker.component.scss +36 -0
  73. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-picker/date-picker.component.ts +41 -0
  74. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-range-picker/date-range-picker.component.html +34 -0
  75. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-range-picker/date-range-picker.component.scss +33 -0
  76. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/date-range-picker/date-range-picker.component.ts +66 -0
  77. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/dialog/dialog.component.html +37 -0
  78. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/dialog/dialog.component.ts +55 -0
  79. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/field/field.component.html +21 -0
  80. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/field/field.component.ts +36 -0
  81. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/field-size.ts +8 -0
  82. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/input/input.component.html +19 -0
  83. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/input/input.component.scss +35 -0
  84. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/input/input.component.ts +36 -0
  85. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/label/label.component.html +3 -0
  86. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/label/label.component.ts +17 -0
  87. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/paginator/paginator.component.html +10 -0
  88. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/paginator/paginator.component.ts +37 -0
  89. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/popover/popover.component.html +41 -0
  90. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/popover/popover.component.ts +40 -0
  91. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/select/select.component.html +24 -0
  92. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/select/select.component.scss +35 -0
  93. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/select/select.component.ts +72 -0
  94. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/separator/separator.component.html +1 -0
  95. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/separator/separator.component.scss +23 -0
  96. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/separator/separator.component.ts +56 -0
  97. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/skeleton/skeleton.component.html +1 -0
  98. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/skeleton/skeleton.component.scss +28 -0
  99. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/skeleton/skeleton.component.ts +24 -0
  100. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/components/ui/spinner/spinner.component.ts +35 -0
  101. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/auth/auth.guard.ts +50 -0
  102. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/auth/auth.service.ts +126 -0
  103. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/components/status-alert/status-alert.component.html +7 -0
  104. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/components/status-alert/status-alert.component.ts +52 -0
  105. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/config/authentication.config.ts +75 -0
  106. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/auth-form/auth-form.component.html +38 -0
  107. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/auth-form/auth-form.component.ts +94 -0
  108. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/footer-link/footer-link.component.html +11 -0
  109. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/footer-link/footer-link.component.ts +26 -0
  110. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/reactive-form-page.base.ts +50 -0
  111. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/submit-button/submit-button.component.html +8 -0
  112. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/submit-button/submit-button.component.scss +17 -0
  113. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/forms/submit-button/submit-button.component.ts +35 -0
  114. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/layouts/auth-app-layout/auth-app-layout.component.html +2 -0
  115. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/layouts/auth-app-layout/auth-app-layout.component.ts +30 -0
  116. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/layouts/card-layout/card-layout.component.html +17 -0
  117. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/layouts/card-layout/card-layout.component.ts +40 -0
  118. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/menu/auth-menu/auth-menu.component.html +26 -0
  119. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/menu/auth-menu/auth-menu.component.ts +46 -0
  120. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/session-timeout/session-time-servlet.ts +130 -0
  121. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/session-timeout/session-timeout-validator/session-timeout-validator.component.html +57 -0
  122. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/session-timeout/session-timeout-validator/session-timeout-validator.component.ts +205 -0
  123. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/session-timeout/session-timeout.config.ts +83 -0
  124. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/session-timeout/session-timeout.service.ts +201 -0
  125. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/utils/auth-helpers.ts +68 -0
  126. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/utils/auth-validators.ts +72 -0
  127. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/authentication/utils/helpers.ts +85 -0
  128. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/active-filters/active-filters.component.html +23 -0
  129. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/active-filters/active-filters.component.ts +78 -0
  130. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/date-filter/date-filter.component.html +18 -0
  131. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/date-filter/date-filter.component.ts +137 -0
  132. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/date-range-filter/date-range-filter.component.html +11 -0
  133. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/date-range-filter/date-range-filter.component.ts +69 -0
  134. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/filter-field-wrapper/filter-field-wrapper.component.html +11 -0
  135. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/filter-field-wrapper/filter-field-wrapper.component.ts +36 -0
  136. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/multi-select-filter/multi-select-filter.component.html +10 -0
  137. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/multi-select-filter/multi-select-filter.component.ts +58 -0
  138. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/numeric-range-filter/numeric-range-filter.component.html +22 -0
  139. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/numeric-range-filter/numeric-range-filter.component.ts +146 -0
  140. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/search-filter/search-filter.component.html +8 -0
  141. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/search-filter/search-filter.component.ts +82 -0
  142. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/select-filter/select-filter.component.html +12 -0
  143. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/select-filter/select-filter.component.ts +65 -0
  144. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/text-filter/text-filter.component.html +12 -0
  145. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/filters/text-filter/text-filter.component.ts +90 -0
  146. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/object-breadcrumb/object-breadcrumb.component.html +55 -0
  147. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/object-breadcrumb/object-breadcrumb.component.ts +40 -0
  148. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/pagination-controls/pagination-controls.component.html +8 -0
  149. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/pagination-controls/pagination-controls.component.ts +61 -0
  150. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/search-bar/search-bar.component.html +59 -0
  151. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/search-bar/search-bar.component.ts +108 -0
  152. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/sort-control/sort-control.component.html +50 -0
  153. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/components/sort-control/sort-control.component.ts +72 -0
  154. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/object-search-state.service.ts +232 -0
  155. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/utils/debounce.ts +31 -0
  156. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/utils/field-utils.ts +54 -0
  157. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/utils/filter-utils.ts +354 -0
  158. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/utils/index.ts +12 -0
  159. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/features/object-search/utils/sort-utils.ts +46 -0
  160. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/account-detail/account-detail-page.component.html +174 -0
  161. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/account-detail/account-detail-page.component.scss +7 -0
  162. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/account-detail/account-detail-page.component.ts +199 -0
  163. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/account-search/account-search-page.component.html +111 -0
  164. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/account-search/account-search-page.component.ts +217 -0
  165. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/change-password/change-password-page.component.html +68 -0
  166. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/change-password/change-password-page.component.ts +82 -0
  167. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/forgot-password/forgot-password-page.component.html +35 -0
  168. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/forgot-password/forgot-password-page.component.ts +87 -0
  169. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/home/home-page.component.html +18 -0
  170. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/home/home-page.component.ts +47 -0
  171. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/home/home.component.html +6 -0
  172. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/home/home.component.spec.ts +23 -0
  173. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/home/home.component.ts +13 -0
  174. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/login/login-page.component.html +47 -0
  175. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/login/login-page.component.ts +89 -0
  176. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/not-found/not-found.component.html +12 -0
  177. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/not-found/not-found.component.spec.ts +33 -0
  178. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/not-found/not-found.component.ts +15 -0
  179. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/profile/profile-page.component.html +126 -0
  180. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/profile/profile-page.component.ts +194 -0
  181. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/register/register-page.component.html +80 -0
  182. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/register/register-page.component.ts +93 -0
  183. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/reset-password/reset-password-page.component.html +60 -0
  184. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/pages/reset-password/reset-password-page.component.ts +96 -0
  185. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/app/utils/async-data.ts +99 -0
  186. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/index.html +14 -0
  187. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/main.ts +5 -0
  188. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/styles.scss +170 -0
  189. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/theme.scss +39 -0
  190. package/dist/force-app/main/default/uiBundles/angularexternalapp/src/types/sf-globals.d.ts +9 -0
  191. package/dist/force-app/main/default/uiBundles/angularexternalapp/tsconfig.app.json +11 -0
  192. package/dist/force-app/main/default/uiBundles/angularexternalapp/tsconfig.json +33 -0
  193. package/dist/force-app/main/default/uiBundles/angularexternalapp/tsconfig.spec.json +10 -0
  194. package/dist/force-app/main/default/uiBundles/angularexternalapp/ui-bundle.json +7 -0
  195. package/dist/jest.config.js +6 -0
  196. package/dist/package-lock.json +10066 -0
  197. package/dist/package.json +46 -0
  198. package/dist/scripts/apex/hello.apex +10 -0
  199. package/dist/scripts/gitignore-templates.json +4 -0
  200. package/dist/scripts/graphql-search.sh +191 -0
  201. package/dist/scripts/org-setup-config-schema.mjs +103 -0
  202. package/dist/scripts/org-setup-dev.mjs +87 -0
  203. package/dist/scripts/org-setup-utils.mjs +369 -0
  204. package/dist/scripts/org-setup-xml.mjs +182 -0
  205. package/dist/scripts/org-setup.config.json +9 -0
  206. package/dist/scripts/org-setup.mjs +1702 -0
  207. package/dist/scripts/sf-project-setup.mjs +103 -0
  208. package/dist/scripts/soql/account.soql +6 -0
  209. package/dist/scripts/validate-org-setup-config.mjs +38 -0
  210. package/dist/sfdx-project.json +12 -0
  211. package/package.json +40 -0
@@ -0,0 +1,17 @@
1
+ <div class="p-4">
2
+ <app-card class="w-full">
3
+ @if (title() || subtitle()) {
4
+ <app-card-header>
5
+ @if (title()) {
6
+ <app-card-title>{{ title() }}</app-card-title>
7
+ }
8
+ @if (subtitle()) {
9
+ <app-card-description>{{ subtitle() }}</app-card-description>
10
+ }
11
+ </app-card-header>
12
+ }
13
+ <app-card-content>
14
+ <ng-content />
15
+ </app-card-content>
16
+ </app-card>
17
+ </div>
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+ import { ChangeDetectionStrategy, Component, input } from "@angular/core";
7
+ import {
8
+ CardComponent,
9
+ CardContentComponent,
10
+ CardDescriptionComponent,
11
+ CardHeaderComponent,
12
+ CardTitleComponent,
13
+ } from "../../../../components/ui/card/card.component";
14
+
15
+ /**
16
+ * Centered page shell for auth pages — a feature-owned composition over the base
17
+ * `app-card` ui primitives (not a base-template component). Renders a single
18
+ * `app-card` centered in the viewport with an optional title / subtitle header,
19
+ * and content-projects the page body.
20
+ *
21
+ * Consumed by the authentication login / register / reset pages as the
22
+ * `CenteredPageLayout` analogue's card frame. Tailwind utilities pass through
23
+ * via the host `class`.
24
+ */
25
+ @Component({
26
+ selector: "app-card-layout",
27
+ changeDetection: ChangeDetectionStrategy.OnPush,
28
+ imports: [
29
+ CardComponent,
30
+ CardHeaderComponent,
31
+ CardTitleComponent,
32
+ CardDescriptionComponent,
33
+ CardContentComponent,
34
+ ],
35
+ templateUrl: "./card-layout.component.html",
36
+ })
37
+ export class CardLayoutComponent {
38
+ readonly title = input<string>("");
39
+ readonly subtitle = input<string | null>(null);
40
+ }
@@ -0,0 +1,26 @@
1
+ @if (loading()) {
2
+ <app-skeleton class="size-8 rounded-full" />
3
+ } @else {
4
+ <button matIconButton [matMenuTriggerFor]="menu" aria-label="User menu">
5
+ <mat-icon>person</mat-icon>
6
+ </button>
7
+
8
+ <mat-menu #menu="matMenu" xPosition="before">
9
+ @if (isAuthenticated()) {
10
+ <div class="px-3 py-2 font-medium truncate">{{ user()?.name }}</div>
11
+ <hr />
12
+ <a mat-menu-item [routerLink]="routes.PROFILE.PATH">Edit Profile</a>
13
+ <ng-content select="[menuItems]" />
14
+ <button mat-menu-item type="button" (click)="onLogout()">Sign Out</button>
15
+ } @else {
16
+ <a mat-menu-item [routerLink]="routes.LOGIN.PATH">
17
+ <mat-icon>login</mat-icon>
18
+ <span>Log In</span>
19
+ </a>
20
+ <a mat-menu-item [routerLink]="routes.REGISTER.PATH">
21
+ <mat-icon>person_add</mat-icon>
22
+ <span>Register</span>
23
+ </a>
24
+ }
25
+ </mat-menu>
26
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+ import { ChangeDetectionStrategy, Component, inject } from "@angular/core";
7
+ import { RouterLink } from "@angular/router";
8
+ import { MatButtonModule } from "@angular/material/button";
9
+ import { MatIconModule } from "@angular/material/icon";
10
+ import { MatMenuModule } from "@angular/material/menu";
11
+ import { SkeletonComponent } from "../../../../components/ui/skeleton/skeleton.component";
12
+ import { AuthService } from "../../auth/auth.service";
13
+ import { ROUTES } from "../../config/authentication.config";
14
+
15
+ /**
16
+ * Auth menu — the Angular port of the React `AuthMenu`. A header dropdown that
17
+ * shows the authenticated user's name + Edit Profile / Sign Out, or Log In /
18
+ * Register for guests. While auth state is loading it shows a skeleton avatar.
19
+ *
20
+ * Owns its own trigger and `mat-menu` (the canonical Material menu shape): an
21
+ * icon-only person button carries `matMenuTriggerFor`, so the trigger — with its
22
+ * `aria-haspopup` / `aria-expanded` / keyboard handling — sits on a real focusable
23
+ * `<button>`. Extra items can be inserted before Sign Out via `[menuItems]`
24
+ * projection.
25
+ *
26
+ * Reads `AuthService` directly (the `providedIn: 'root'` replacement for
27
+ * `useAuth`), so no inputs are needed for auth state.
28
+ */
29
+ @Component({
30
+ selector: "app-auth-menu",
31
+ changeDetection: ChangeDetectionStrategy.OnPush,
32
+ imports: [RouterLink, MatButtonModule, MatIconModule, MatMenuModule, SkeletonComponent],
33
+ templateUrl: "./auth-menu.component.html",
34
+ })
35
+ export class AuthMenuComponent {
36
+ private readonly authService = inject(AuthService);
37
+
38
+ protected readonly routes = ROUTES;
39
+ protected readonly user = this.authService.user;
40
+ protected readonly isAuthenticated = this.authService.isAuthenticated;
41
+ protected readonly loading = this.authService.loading;
42
+
43
+ protected onLogout(): void {
44
+ this.authService.logout();
45
+ }
46
+ }
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+
7
+ /**
8
+ * SessionTimeServlet API helpers — direct (pure-TS) port of the React
9
+ * `sessionTimeService.ts`. Handles communication with the session validation
10
+ * endpoint, strips the CSRF prefix, and subtracts the latency buffer. Returns
11
+ * `undefined` on any failure so the session-timeout feature never crashes the
12
+ * running application.
13
+ */
14
+
15
+ import { SESSION_CONFIG } from "./session-timeout.config";
16
+
17
+ /** Response from SessionTimeServlet API. */
18
+ export interface SessionResponse {
19
+ /** Session phase. */
20
+ sp: number;
21
+ /** Seconds remaining in session. */
22
+ sr: number;
23
+ }
24
+
25
+ /**
26
+ * Parse the servlet response text into a SessionResponse object. Handles the
27
+ * CSRF protection prefix.
28
+ *
29
+ * @param text - Raw response text from servlet.
30
+ * @returns Parsed session response, or undefined if parsing fails.
31
+ */
32
+ export function parseResponseResult(text: string): SessionResponse | undefined {
33
+ let cleanedText = text;
34
+
35
+ // Strip CSRF protection prefix if present.
36
+ if (cleanedText.startsWith(SESSION_CONFIG.CSRF_TOKEN)) {
37
+ cleanedText = cleanedText.substring(SESSION_CONFIG.CSRF_TOKEN.length);
38
+ }
39
+
40
+ // Trim whitespace.
41
+ cleanedText = cleanedText.trim();
42
+
43
+ try {
44
+ const parsed = JSON.parse(cleanedText) as SessionResponse;
45
+
46
+ // Validate response structure.
47
+ if (typeof parsed.sp !== "number" || typeof parsed.sr !== "number") {
48
+ throw new Error("Invalid response structure: missing sp or sr properties");
49
+ }
50
+
51
+ return parsed;
52
+ } catch (error) {
53
+ console.error("[sessionTimeService] Failed to parse response:", error, "Text:", cleanedText);
54
+ return undefined;
55
+ }
56
+ }
57
+
58
+ /**
59
+ * Call SessionTimeServlet API. Internal function used by both poll and extend.
60
+ * Returns undefined on any failure.
61
+ *
62
+ * @param basePath - Community base path (e.g., "/sfsites/c/").
63
+ * @param extend - Whether to extend the session (updateTimedOutSession param).
64
+ */
65
+ async function callSessionTimeServlet(
66
+ basePath: string,
67
+ extend = false,
68
+ ): Promise<SessionResponse | undefined> {
69
+ // Build URL with cache-busting timestamp.
70
+ const timestamp = Date.now();
71
+ let url = `${basePath}${SESSION_CONFIG.SERVLET_URL}?buster=${timestamp}`;
72
+
73
+ if (extend) {
74
+ url += "&updateTimedOutSession=true";
75
+ }
76
+
77
+ try {
78
+ const response = await fetch(url, {
79
+ method: "GET",
80
+ credentials: "same-origin",
81
+ cache: "no-cache",
82
+ headers: {
83
+ "X-Requested-With": "XMLHttpRequest",
84
+ },
85
+ });
86
+
87
+ if (!response.ok) {
88
+ console.error(`[sessionTimeService] HTTP ${response.status}: ${response.statusText}`);
89
+ return undefined;
90
+ }
91
+
92
+ const contentType = response.headers.get("content-type");
93
+ if (contentType && !contentType.includes("text") && !contentType.includes("json")) {
94
+ console.error(`[sessionTimeService] Unexpected content type: ${contentType}`);
95
+ return undefined;
96
+ }
97
+
98
+ const text = await response.text();
99
+ const parsed = parseResponseResult(text);
100
+ if (!parsed) {
101
+ return undefined;
102
+ }
103
+
104
+ return {
105
+ sp: parsed.sp,
106
+ sr: Math.max(0, parsed.sr - SESSION_CONFIG.LATENCY_BUFFER_SECONDS),
107
+ };
108
+ } catch (error) {
109
+ console.error("[sessionTimeService] API call failed:", error);
110
+ return undefined;
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Poll SessionTimeServlet to check remaining session time. Called periodically
116
+ * to monitor session status.
117
+ */
118
+ export async function pollSessionTimeServlet(
119
+ basePath: string,
120
+ ): Promise<SessionResponse | undefined> {
121
+ return callSessionTimeServlet(basePath, false);
122
+ }
123
+
124
+ /**
125
+ * Extend the current session time. Called when the user clicks "Continue" in the
126
+ * warning modal.
127
+ */
128
+ export async function extendSessionTime(basePath: string): Promise<SessionResponse | undefined> {
129
+ return callSessionTimeServlet(basePath, true);
130
+ }
@@ -0,0 +1,57 @@
1
+ @if (showWarningModal()) {
2
+ <app-dialog [open]="true" [closeOnBackdrop]="false">
3
+ <div
4
+ class="max-w-md"
5
+ role="alertdialog"
6
+ aria-labelledby="session-warning-title"
7
+ aria-describedby="session-warning-description"
8
+ >
9
+ <h2 id="session-warning-title" class="text-lg font-semibold">
10
+ {{ labels.sessionWarningTitle }}
11
+ </h2>
12
+ <p id="session-warning-description" class="text-sm text-muted-foreground mt-1">
13
+ {{ labels.sessionWarningMessage }}
14
+ </p>
15
+
16
+ <div class="flex flex-col items-center gap-4 py-6">
17
+ <time
18
+ [attr.datetime]="isoTime()"
19
+ role="timer"
20
+ aria-live="off"
21
+ aria-atomic="true"
22
+ aria-describedby="session-warning-description"
23
+ class="text-5xl font-bold text-center tabular-nums text-destructive"
24
+ >
25
+ {{ formattedTime() }}
26
+ </time>
27
+ </div>
28
+
29
+ <div class="flex gap-4 justify-end">
30
+ <app-button variant="outlined" (clicked)="onLogoutClick()">
31
+ {{ labels.logoutButton }}
32
+ </app-button>
33
+ <app-button variant="filled" (clicked)="onContinue()">
34
+ {{ labels.continueButton }}
35
+ </app-button>
36
+ </div>
37
+ </div>
38
+ </app-dialog>
39
+ }
40
+
41
+ @if (showExpiredAlert()) {
42
+ <div class="fixed top-4 left-1/2 -translate-x-1/2 z-50 w-full max-w-md px-4">
43
+ <app-status-alert
44
+ variant="error"
45
+ [title]="labels.sessionWarningTitle"
46
+ [message]="labels.invalidSessionMessage"
47
+ />
48
+ <button
49
+ type="button"
50
+ class="sr-only"
51
+ [attr.aria-label]="labels.closeLabel"
52
+ (click)="onDismissAlert()"
53
+ >
54
+ {{ labels.closeLabel }}
55
+ </button>
56
+ </div>
57
+ }
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+ import {
7
+ ChangeDetectionStrategy,
8
+ Component,
9
+ DestroyRef,
10
+ effect,
11
+ inject,
12
+ OnInit,
13
+ signal,
14
+ } from "@angular/core";
15
+ import { Router } from "@angular/router";
16
+ import { DialogComponent } from "../../../../components/ui/dialog/dialog.component";
17
+ import { StatusAlertComponent } from "../../components/status-alert/status-alert.component";
18
+ import { ButtonComponent } from "../../../../components/ui/button/button.component";
19
+ import { AuthService } from "../../auth/auth.service";
20
+ import { SessionTimeoutService } from "../session-timeout.service";
21
+ import { LABELS, STORAGE_KEYS } from "../session-timeout.config";
22
+ import { ROUTES } from "../../config/authentication.config";
23
+
24
+ /**
25
+ * Session-timeout validator — the Angular port of the React
26
+ * `SessionTimeoutValidator`. Rendered app-wide by `AuthAppLayoutComponent` so
27
+ * the warning modal is available on every route (exactly like React).
28
+ *
29
+ * Responsibilities (all mirrored from React):
30
+ * - Starts polling via `SessionTimeoutService` on init, skipping guest users.
31
+ * - Shows a non-dismissable warning modal with a live countdown when the session
32
+ * nears expiry; "Continue" extends the session, "Log Out" logs out.
33
+ * - When the countdown reaches 0 it re-checks the server before logging out
34
+ * (prevents premature logout).
35
+ * - On expiry it sets the `showSessionMessage` sessionStorage flag then calls
36
+ * `AuthService.logout(window.location.pathname)` (hard nav).
37
+ * - On the login page, if the flag is set, shows the session-expired alert once
38
+ * (lazily read at init, since the expiry logout hard-navigates and this
39
+ * component always remounts fresh on login).
40
+ *
41
+ * `SessionTimeoutService` is provided here so its timers are scoped to this
42
+ * component's lifetime (mirrors the hook's unmount cleanup).
43
+ */
44
+ @Component({
45
+ selector: "app-session-timeout-validator",
46
+ changeDetection: ChangeDetectionStrategy.OnPush,
47
+ providers: [SessionTimeoutService],
48
+ imports: [DialogComponent, StatusAlertComponent, ButtonComponent],
49
+ templateUrl: "./session-timeout-validator.component.html",
50
+ })
51
+ export class SessionTimeoutValidatorComponent implements OnInit {
52
+ private readonly authService = inject(AuthService);
53
+ private readonly session = inject(SessionTimeoutService);
54
+ private readonly destroyRef = inject(DestroyRef);
55
+ private readonly router = inject(Router);
56
+
57
+ protected readonly labels = LABELS;
58
+
59
+ // Community base path. React hard-codes "" here (root-relative); kept identical.
60
+ private readonly basePath = "";
61
+
62
+ // -- Exposed session state (from the service) ----------------------------
63
+ protected readonly showWarningModal = this.session.showWarningModal;
64
+ protected readonly timeLeftInSession = this.session.timeLeftInSession;
65
+
66
+ // -- Session-expired alert (lazy, read once at init) ---------------------
67
+ protected readonly showExpiredAlert = signal<boolean>(false);
68
+
69
+ // -- Countdown state (mirrors useCountdownTimer) -------------------------
70
+ protected readonly countdownSeconds = signal<number>(0);
71
+ private countdownIntervalId: ReturnType<typeof setInterval> | null = null;
72
+ private countdownEndTime = 0;
73
+ private lastModalOpen = false;
74
+
75
+ constructor() {
76
+ // React's SessionWarningModal resets+starts the countdown when the modal
77
+ // opens and stops it when it closes. This effect mirrors that: it reacts to
78
+ // the warning-modal signal and (re)starts the countdown from the latest
79
+ // remaining time whenever the modal is open.
80
+ effect(() => {
81
+ const open = this.showWarningModal();
82
+ const remaining = this.timeLeftInSession() ?? 0;
83
+ if (open) {
84
+ this.startCountdown(remaining);
85
+ } else if (this.lastModalOpen) {
86
+ this.stopCountdown();
87
+ }
88
+ this.lastModalOpen = open;
89
+ });
90
+
91
+ // Auto-logout when the countdown/poll reports the session is expired and the
92
+ // user is not a guest (mirrors the React expiry `useEffect`).
93
+ effect(() => {
94
+ const timeLeft = this.timeLeftInSession();
95
+ if (timeLeft !== null && timeLeft <= 0 && !this.isGuest()) {
96
+ this.handleLogout();
97
+ }
98
+ });
99
+ }
100
+
101
+ ngOnInit(): void {
102
+ // Session-expired alert: checked once at init via a lazy read. The expiry
103
+ // handler triggers a hard navigation, so this component always mounts fresh
104
+ // on the login page after expiry.
105
+ //
106
+ // Compare against the router's parsed URL (base-href/community-path stripped)
107
+ // rather than `window.location.pathname`: the raw browser path includes any
108
+ // base href (e.g. `/sfsites/c/.../login`) and would never equal `/login`,
109
+ // silently hiding the banner. `router.url` is router-relative, matching the
110
+ // React `useLocation().pathname` behavior. Strip the query/fragment before
111
+ // comparing.
112
+ const routerPath = this.router.url.split(/[?#]/)[0];
113
+ const isLoginPage = routerPath === ROUTES.LOGIN.PATH;
114
+ const shouldShow =
115
+ isLoginPage && sessionStorage.getItem(STORAGE_KEYS.SHOW_SESSION_MESSAGE) === "true";
116
+ if (shouldShow) {
117
+ sessionStorage.removeItem(STORAGE_KEYS.SHOW_SESSION_MESSAGE);
118
+ this.showExpiredAlert.set(true);
119
+ }
120
+
121
+ // Start monitoring (service skips guests internally).
122
+ this.session.start(this.basePath, this.isGuest());
123
+
124
+ this.destroyRef.onDestroy(() => {
125
+ this.session.stop();
126
+ this.stopCountdown();
127
+ });
128
+ }
129
+
130
+ private isGuest(): boolean {
131
+ return !this.authService.isAuthenticated();
132
+ }
133
+
134
+ // -- Countdown ------------------------------------------------------------
135
+
136
+ private startCountdown(seconds: number): void {
137
+ this.stopCountdown();
138
+ this.countdownSeconds.set(seconds);
139
+ this.countdownEndTime = Date.now() + seconds * 1000;
140
+ this.countdownIntervalId = setInterval(() => {
141
+ const remainingMs = this.countdownEndTime - Date.now();
142
+ const newTime = Math.max(0, Math.ceil(remainingMs / 1000));
143
+ this.countdownSeconds.set(newTime);
144
+ if (newTime <= 0) {
145
+ this.stopCountdown();
146
+ // Re-check with the server before logging out (React onCountdownExpire).
147
+ void this.session.checkSession();
148
+ }
149
+ }, 100);
150
+ }
151
+
152
+ private stopCountdown(): void {
153
+ if (this.countdownIntervalId) {
154
+ clearInterval(this.countdownIntervalId);
155
+ this.countdownIntervalId = null;
156
+ }
157
+ }
158
+
159
+ /** MM:SS formatted countdown (mirrors useCountdownTimer.formattedTime). */
160
+ protected formattedTime(): string {
161
+ const total = this.countdownSeconds();
162
+ const minutes = Math.floor(total / 60);
163
+ const secs = total % 60;
164
+ const pad = (n: number) => n.toString().padStart(2, "0");
165
+ return `${pad(minutes)}:${pad(secs)}`;
166
+ }
167
+
168
+ /** ISO 8601 duration for the <time> element (mirrors isoTime). */
169
+ protected isoTime(): string {
170
+ const total = this.countdownSeconds();
171
+ const minutes = Math.floor(total / 60);
172
+ const secs = total % 60;
173
+ return `PT${minutes}M${secs}S`;
174
+ }
175
+
176
+ // -- Actions --------------------------------------------------------------
177
+
178
+ /** "Continue" — stop countdown and extend the session. */
179
+ protected onContinue(): void {
180
+ this.stopCountdown();
181
+ void this.session.extendSession();
182
+ }
183
+
184
+ /** "Log Out" button in the warning modal. */
185
+ protected onLogoutClick(): void {
186
+ this.stopCountdown();
187
+ this.handleLogout();
188
+ }
189
+
190
+ /** Dismiss the session-expired alert. */
191
+ protected onDismissAlert(): void {
192
+ this.showExpiredAlert.set(false);
193
+ }
194
+
195
+ /**
196
+ * Set the session-message flag, stop monitoring, then hand off to the
197
+ * centralized logout (hard nav). Passes the current pathname as the return
198
+ * URL. Mirrors the React `handleLogout`.
199
+ */
200
+ private handleLogout(): void {
201
+ sessionStorage.setItem(STORAGE_KEYS.SHOW_SESSION_MESSAGE, "true");
202
+ this.session.stop();
203
+ this.authService.logout(window.location.pathname);
204
+ }
205
+ }
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Copyright (c) 2026, Salesforce, Inc.,
3
+ * All rights reserved.
4
+ * For full license text, see the LICENSE.txt file
5
+ */
6
+
7
+ /**
8
+ * Configuration constants for session timeout monitoring. Direct port of the
9
+ * React `sessionTimeoutConfig.ts` — values are byte-for-byte identical so the
10
+ * polling cadence, retry backoff, and warning window match exactly.
11
+ */
12
+
13
+ // ---------------------------------------------------------------------------
14
+ // Retry Configuration
15
+ // ---------------------------------------------------------------------------
16
+
17
+ /** Initial delay for first retry attempt (2 seconds). */
18
+ export const INITIAL_RETRY_DELAY = 2000;
19
+
20
+ /** Maximum number of retry attempts before giving up. */
21
+ export const MAX_RETRY_ATTEMPTS = 10;
22
+
23
+ /** Maximum retry delay (30 minutes). */
24
+ export const MAX_RETRY_DELAY = 30 * 60 * 1000;
25
+
26
+ // ---------------------------------------------------------------------------
27
+ // Session Storage Keys
28
+ // ---------------------------------------------------------------------------
29
+
30
+ /** sessionStorage keys used by the session validator. */
31
+ export const STORAGE_KEYS = {
32
+ /** Flag to show session expired message on login page. */
33
+ SHOW_SESSION_MESSAGE: "lwrSessionValidator.showSessionMessage",
34
+ } as const;
35
+
36
+ // ---------------------------------------------------------------------------
37
+ // Servlet Configuration
38
+ // ---------------------------------------------------------------------------
39
+
40
+ /** SessionTimeServlet configuration. */
41
+ export const SESSION_CONFIG = {
42
+ /** Relative URL to SessionTimeServlet. */
43
+ SERVLET_URL: "/sfsites/c/_nc_external/system/security/session/SessionTimeServlet",
44
+
45
+ /** Latency buffer to subtract from server response (seconds). */
46
+ LATENCY_BUFFER_SECONDS: 3,
47
+
48
+ /** CSRF protection prefix in servlet responses. */
49
+ CSRF_TOKEN: "while(1);\n",
50
+ } as const;
51
+
52
+ // ---------------------------------------------------------------------------
53
+ // UI Labels
54
+ // ---------------------------------------------------------------------------
55
+
56
+ /** UI labels for session timeout components. */
57
+ export const LABELS = {
58
+ /** Title for session warning modal. */
59
+ sessionWarningTitle: "Session Timeout Warning",
60
+
61
+ /** Message text in session warning modal. */
62
+ sessionWarningMessage:
63
+ "For security, we log you out if you’re inactive for too long. To continue working, click Continue before the time expires.",
64
+
65
+ /** Text for "Continue" button. */
66
+ continueButton: "Continue",
67
+
68
+ /** Text for "Log Out" button. */
69
+ logoutButton: "Log Out",
70
+
71
+ /** Message shown on login page after session expires. */
72
+ invalidSessionMessage: "Your session has expired. Please log in again.",
73
+
74
+ /** Accessibility label for close button. */
75
+ closeLabel: "Close",
76
+ } as const;
77
+
78
+ // ---------------------------------------------------------------------------
79
+ // Session Timeout Configuration
80
+ // ---------------------------------------------------------------------------
81
+
82
+ /** Session warning time in seconds (30 seconds). */
83
+ export const SESSION_WARNING_TIME = 30;