@replicated/portal-components 0.0.19 → 0.0.21

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 (244) hide show
  1. package/components/metadata/registry.json +2 -2
  2. package/components/metadata/registry.md +2 -2
  3. package/dist/actions/change-team.js +66 -7
  4. package/dist/actions/change-team.js.map +1 -1
  5. package/dist/actions/index.d.mts +3 -1
  6. package/dist/actions/index.d.ts +3 -1
  7. package/dist/actions/index.js +182 -465
  8. package/dist/actions/index.js.map +1 -1
  9. package/dist/actions/install-actions.d.mts +3 -1
  10. package/dist/actions/install-actions.d.ts +3 -1
  11. package/dist/actions/install-actions.js +58 -5
  12. package/dist/actions/install-actions.js.map +1 -1
  13. package/dist/actions/service-account.d.mts +3 -1
  14. package/dist/actions/service-account.d.ts +3 -1
  15. package/dist/actions/service-account.js +58 -5
  16. package/dist/actions/service-account.js.map +1 -1
  17. package/dist/actions/support-bundles.d.mts +3 -1
  18. package/dist/actions/support-bundles.d.ts +3 -1
  19. package/dist/actions/support-bundles.js +58 -5
  20. package/dist/actions/support-bundles.js.map +1 -1
  21. package/dist/actions/team-settings.d.mts +3 -1
  22. package/dist/actions/team-settings.d.ts +3 -1
  23. package/dist/actions/team-settings.js +91 -27
  24. package/dist/actions/team-settings.js.map +1 -1
  25. package/dist/actions/trial-signup.d.mts +24 -0
  26. package/dist/actions/trial-signup.d.ts +24 -0
  27. package/dist/actions/trial-signup.js +482 -0
  28. package/dist/actions/trial-signup.js.map +1 -0
  29. package/dist/actions/user-settings.d.mts +3 -1
  30. package/dist/actions/user-settings.d.ts +3 -1
  31. package/dist/actions/user-settings.js +58 -5
  32. package/dist/actions/user-settings.js.map +1 -1
  33. package/dist/airgap-instances.d.mts +3 -1
  34. package/dist/airgap-instances.d.ts +3 -1
  35. package/dist/airgap-instances.js +41 -112
  36. package/dist/airgap-instances.js.map +1 -1
  37. package/dist/branding-BsMSywts.d.mts +36 -0
  38. package/dist/branding-BsMSywts.d.ts +36 -0
  39. package/dist/error-page.js +10 -2
  40. package/dist/error-page.js.map +1 -1
  41. package/dist/error.js +10 -2
  42. package/dist/error.js.map +1 -1
  43. package/dist/esm/actions/change-team.js +66 -7
  44. package/dist/esm/actions/change-team.js.map +1 -1
  45. package/dist/esm/actions/index.js +181 -462
  46. package/dist/esm/actions/index.js.map +1 -1
  47. package/dist/esm/actions/install-actions.js +58 -5
  48. package/dist/esm/actions/install-actions.js.map +1 -1
  49. package/dist/esm/actions/service-account.js +58 -5
  50. package/dist/esm/actions/service-account.js.map +1 -1
  51. package/dist/esm/actions/support-bundles.js +58 -5
  52. package/dist/esm/actions/support-bundles.js.map +1 -1
  53. package/dist/esm/actions/team-settings.js +91 -27
  54. package/dist/esm/actions/team-settings.js.map +1 -1
  55. package/dist/esm/actions/trial-signup.js +478 -0
  56. package/dist/esm/actions/trial-signup.js.map +1 -0
  57. package/dist/esm/actions/user-settings.js +58 -5
  58. package/dist/esm/actions/user-settings.js.map +1 -1
  59. package/dist/esm/airgap-instances.js +40 -112
  60. package/dist/esm/airgap-instances.js.map +1 -1
  61. package/dist/esm/error-page.js +10 -2
  62. package/dist/esm/error-page.js.map +1 -1
  63. package/dist/esm/error.js +10 -2
  64. package/dist/esm/error.js.map +1 -1
  65. package/dist/esm/helm-install-wizard.js +118 -79
  66. package/dist/esm/helm-install-wizard.js.map +1 -1
  67. package/dist/esm/index.js +706 -438
  68. package/dist/esm/index.js.map +1 -1
  69. package/dist/esm/install-actions.js +40 -5
  70. package/dist/esm/install-actions.js.map +1 -1
  71. package/dist/esm/install-card.js +9 -6
  72. package/dist/esm/install-card.js.map +1 -1
  73. package/dist/esm/install-targets.js +9 -2
  74. package/dist/esm/install-targets.js.map +1 -1
  75. package/dist/esm/instance-card.js +39 -111
  76. package/dist/esm/instance-card.js.map +1 -1
  77. package/dist/esm/join-team.js +9 -3
  78. package/dist/esm/join-team.js.map +1 -1
  79. package/dist/esm/license-card.js +24 -22
  80. package/dist/esm/license-card.js.map +1 -1
  81. package/dist/esm/license-details.js +128 -334
  82. package/dist/esm/license-details.js.map +1 -1
  83. package/dist/esm/linux-install-wizard.js +95 -41
  84. package/dist/esm/linux-install-wizard.js.map +1 -1
  85. package/dist/esm/login.js +20 -4
  86. package/dist/esm/login.js.map +1 -1
  87. package/dist/esm/middleware.js +33 -0
  88. package/dist/esm/middleware.js.map +1 -0
  89. package/dist/esm/online-instance-list.js +40 -112
  90. package/dist/esm/online-instance-list.js.map +1 -1
  91. package/dist/esm/release-history-panel.js +27 -14
  92. package/dist/esm/release-history-panel.js.map +1 -1
  93. package/dist/esm/saml-callback-client.js +82 -0
  94. package/dist/esm/saml-callback-client.js.map +1 -0
  95. package/dist/esm/saml-handlers.js +138 -0
  96. package/dist/esm/saml-handlers.js.map +1 -0
  97. package/dist/esm/security-card.js +53 -38
  98. package/dist/esm/security-card.js.map +1 -1
  99. package/dist/esm/service-accounts-tab.js +800 -0
  100. package/dist/esm/service-accounts-tab.js.map +1 -0
  101. package/dist/esm/support-bundle-collection-card.js +48 -24
  102. package/dist/esm/support-bundle-collection-card.js.map +1 -1
  103. package/dist/esm/support-bundles-card.js +10 -5
  104. package/dist/esm/support-bundles-card.js.map +1 -1
  105. package/dist/esm/support-card.js +37 -5
  106. package/dist/esm/support-card.js.map +1 -1
  107. package/dist/esm/team-selection.js +5 -1
  108. package/dist/esm/team-selection.js.map +1 -1
  109. package/dist/esm/team-settings-card.js +5 -2
  110. package/dist/esm/team-settings-card.js.map +1 -1
  111. package/dist/esm/team-settings.js +7 -2
  112. package/dist/esm/team-settings.js.map +1 -1
  113. package/dist/esm/top-nav-user-menu.js +5 -1
  114. package/dist/esm/top-nav-user-menu.js.map +1 -1
  115. package/dist/esm/top-nav.js +175 -62
  116. package/dist/esm/top-nav.js.map +1 -1
  117. package/dist/esm/trial-signup.js +256 -0
  118. package/dist/esm/trial-signup.js.map +1 -0
  119. package/dist/esm/update-layout.js +175 -62
  120. package/dist/esm/update-layout.js.map +1 -1
  121. package/dist/esm/updates-card.js +15 -4
  122. package/dist/esm/updates-card.js.map +1 -1
  123. package/dist/esm/upload-support-bundle-modal.js +9 -4
  124. package/dist/esm/upload-support-bundle-modal.js.map +1 -1
  125. package/dist/esm/user-settings-card.js +5 -2
  126. package/dist/esm/user-settings-card.js.map +1 -1
  127. package/dist/esm/user-settings.js +12 -6
  128. package/dist/esm/user-settings.js.map +1 -1
  129. package/dist/esm/utils/index.js +204 -13
  130. package/dist/esm/utils/index.js.map +1 -1
  131. package/dist/fetch-license-iTyF7_GY.d.mts +81 -0
  132. package/dist/fetch-license-iTyF7_GY.d.ts +81 -0
  133. package/dist/helm-install-wizard.d.mts +11 -3
  134. package/dist/helm-install-wizard.d.ts +11 -3
  135. package/dist/helm-install-wizard.js +118 -79
  136. package/dist/helm-install-wizard.js.map +1 -1
  137. package/dist/{index-BAiVrSSR.d.mts → index-DyzJ0yKD.d.mts} +48 -50
  138. package/dist/{index-DWt-N5od.d.ts → index-sMbq94M7.d.ts} +48 -50
  139. package/dist/index.d.mts +8 -2
  140. package/dist/index.d.ts +8 -2
  141. package/dist/index.js +726 -438
  142. package/dist/index.js.map +1 -1
  143. package/dist/install-actions.d.mts +4 -2
  144. package/dist/install-actions.d.ts +4 -2
  145. package/dist/install-actions.js +40 -5
  146. package/dist/install-actions.js.map +1 -1
  147. package/dist/install-card.d.mts +2 -3
  148. package/dist/install-card.d.ts +2 -3
  149. package/dist/install-card.js +9 -6
  150. package/dist/install-card.js.map +1 -1
  151. package/dist/install-targets.js +9 -2
  152. package/dist/install-targets.js.map +1 -1
  153. package/dist/instance-card.d.mts +3 -1
  154. package/dist/instance-card.d.ts +3 -1
  155. package/dist/instance-card.js +40 -111
  156. package/dist/instance-card.js.map +1 -1
  157. package/dist/join-team.js +9 -3
  158. package/dist/join-team.js.map +1 -1
  159. package/dist/license-card.d.mts +2 -3
  160. package/dist/license-card.d.ts +2 -3
  161. package/dist/license-card.js +24 -22
  162. package/dist/license-card.js.map +1 -1
  163. package/dist/license-details.js +128 -334
  164. package/dist/license-details.js.map +1 -1
  165. package/dist/linux-install-wizard.d.mts +9 -3
  166. package/dist/linux-install-wizard.d.ts +9 -3
  167. package/dist/linux-install-wizard.js +95 -41
  168. package/dist/linux-install-wizard.js.map +1 -1
  169. package/dist/login.d.mts +4 -0
  170. package/dist/login.d.ts +4 -0
  171. package/dist/login.js +20 -4
  172. package/dist/login.js.map +1 -1
  173. package/dist/middleware.d.mts +13 -0
  174. package/dist/middleware.d.ts +13 -0
  175. package/dist/middleware.js +35 -0
  176. package/dist/middleware.js.map +1 -0
  177. package/dist/online-instance-list.d.mts +3 -1
  178. package/dist/online-instance-list.d.ts +3 -1
  179. package/dist/online-instance-list.js +41 -112
  180. package/dist/online-instance-list.js.map +1 -1
  181. package/dist/pending-installations.d.mts +3 -1
  182. package/dist/pending-installations.d.ts +3 -1
  183. package/dist/release-history-panel.js +27 -14
  184. package/dist/release-history-panel.js.map +1 -1
  185. package/dist/saml-callback-client.d.mts +36 -0
  186. package/dist/saml-callback-client.d.ts +36 -0
  187. package/dist/saml-callback-client.js +88 -0
  188. package/dist/saml-callback-client.js.map +1 -0
  189. package/dist/saml-handlers.d.mts +50 -0
  190. package/dist/saml-handlers.d.ts +50 -0
  191. package/dist/saml-handlers.js +141 -0
  192. package/dist/saml-handlers.js.map +1 -0
  193. package/dist/security-card.d.mts +3 -1
  194. package/dist/security-card.d.ts +3 -1
  195. package/dist/security-card.js +53 -38
  196. package/dist/security-card.js.map +1 -1
  197. package/dist/service-accounts-tab.d.mts +51 -0
  198. package/dist/service-accounts-tab.d.ts +51 -0
  199. package/dist/service-accounts-tab.js +802 -0
  200. package/dist/service-accounts-tab.js.map +1 -0
  201. package/dist/styles.css +375 -127
  202. package/dist/support-bundle-collection-card.d.mts +1 -1
  203. package/dist/support-bundle-collection-card.d.ts +1 -1
  204. package/dist/support-bundle-collection-card.js +47 -23
  205. package/dist/support-bundle-collection-card.js.map +1 -1
  206. package/dist/support-bundles-card.d.mts +4 -2
  207. package/dist/support-bundles-card.d.ts +4 -2
  208. package/dist/support-bundles-card.js +10 -5
  209. package/dist/support-bundles-card.js.map +1 -1
  210. package/dist/support-card.js +37 -5
  211. package/dist/support-card.js.map +1 -1
  212. package/dist/team-selection.js +5 -1
  213. package/dist/team-selection.js.map +1 -1
  214. package/dist/team-settings-card.js +5 -2
  215. package/dist/team-settings-card.js.map +1 -1
  216. package/dist/team-settings.js +7 -2
  217. package/dist/team-settings.js.map +1 -1
  218. package/dist/{top-nav-IRIn66wS.d.ts → top-nav-BUQAGoG1.d.mts} +14 -2
  219. package/dist/{top-nav-IRIn66wS.d.mts → top-nav-CEqw0KpO.d.ts} +14 -2
  220. package/dist/top-nav-user-menu.js +5 -1
  221. package/dist/top-nav-user-menu.js.map +1 -1
  222. package/dist/top-nav.d.mts +2 -1
  223. package/dist/top-nav.d.ts +2 -1
  224. package/dist/top-nav.js +175 -62
  225. package/dist/top-nav.js.map +1 -1
  226. package/dist/trial-signup.d.mts +31 -0
  227. package/dist/trial-signup.d.ts +31 -0
  228. package/dist/trial-signup.js +258 -0
  229. package/dist/trial-signup.js.map +1 -0
  230. package/dist/update-layout.js +175 -62
  231. package/dist/update-layout.js.map +1 -1
  232. package/dist/updates-card.js +15 -4
  233. package/dist/updates-card.js.map +1 -1
  234. package/dist/upload-support-bundle-modal.js +9 -4
  235. package/dist/upload-support-bundle-modal.js.map +1 -1
  236. package/dist/user-settings-card.js +5 -2
  237. package/dist/user-settings-card.js.map +1 -1
  238. package/dist/user-settings.js +12 -6
  239. package/dist/user-settings.js.map +1 -1
  240. package/dist/utils/index.d.mts +74 -16
  241. package/dist/utils/index.d.ts +74 -16
  242. package/dist/utils/index.js +215 -12
  243. package/dist/utils/index.js.map +1 -1
  244. package/package.json +37 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/support-bundles-card.tsx"],"names":[],"mappings":"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","file":"support-bundles-card.js","sourcesContent":["\"use client\";\n\nimport { useState, useCallback } from \"react\";\nimport type { SupportBundleSummary } from \"../actions\";\n\ninterface SupportBundlesCardProps {\n totalCount: number;\n bundles: SupportBundleSummary[];\n /** Callback to download a bundle. Returns a signed URL. */\n onDownload?: (bundleId: string) => Promise<string>;\n /** Callback to delete a bundle. */\n onDelete?: (bundleId: string) => Promise<void>;\n /** Primary brand color. Defaults to \"#6366f1\". */\n primaryColor?: string;\n}\n\nconst formatBytes = (bytes: number, decimals = 1): string => {\n if (bytes === 0) return \"0 Bytes\";\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n};\n\nconst DownloadIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M12 3v14\" />\n <path d=\"M8 13l4 4 4-4\" />\n <path d=\"M5 21h14\" />\n </svg>\n);\n\nconst TrashIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\" />\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\" />\n </svg>\n);\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={className}\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9 12l2 2 4-4\" />\n </svg>\n);\n\nconst PendingIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={className}\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" strokeDasharray=\"4 2\" />\n </svg>\n);\n\nconst AlertTriangleIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n);\n\nexport const SupportBundlesCard = ({\n totalCount,\n bundles,\n onDownload,\n onDelete,\n primaryColor = \"#6366f1\"\n}: SupportBundlesCardProps) => {\n const [downloadingId, setDownloadingId] = useState<string | null>(null);\n const [deletingId, setDeletingId] = useState<string | null>(null);\n const [bundleToDelete, setBundleToDelete] = useState<SupportBundleSummary | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const handleDownload = useCallback(async (bundleId: string) => {\n if (!onDownload) return;\n\n setError(null);\n setDownloadingId(bundleId);\n\n try {\n const signedUrl = await onDownload(bundleId);\n // Trigger download via temporary link\n const link = document.createElement(\"a\");\n link.href = signedUrl;\n link.setAttribute(\"download\", \"\");\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to download bundle\");\n } finally {\n setDownloadingId(null);\n }\n }, [onDownload]);\n\n const handleDeleteClick = useCallback((bundle: SupportBundleSummary) => {\n setBundleToDelete(bundle);\n }, []);\n\n const handleDeleteConfirm = useCallback(async () => {\n if (!onDelete || !bundleToDelete) return;\n\n setError(null);\n setDeletingId(bundleToDelete.id);\n\n try {\n await onDelete(bundleToDelete.id);\n setBundleToDelete(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to delete bundle\");\n setBundleToDelete(null);\n } finally {\n setDeletingId(null);\n }\n }, [onDelete, bundleToDelete]);\n\n const handleDeleteCancel = useCallback(() => {\n setBundleToDelete(null);\n }, []);\n\n const isActionDisabled = downloadingId !== null || deletingId !== null;\n\n const renderIssues = (insights: SupportBundleSummary[\"insights\"]) => {\n const errors = insights?.filter((i) => i.level === \"error\")?.length ?? 0;\n const warnings = insights?.filter((i) => i.level === \"warn\")?.length ?? 0;\n\n if (!errors && !warnings) {\n return (\n <span className=\"text-gray-400\">No issues found</span>\n );\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n {errors > 0 && (\n <span className=\"inline-flex items-center gap-1 text-red-600\">\n <AlertTriangleIcon className=\"h-4 w-4\" />\n {errors} {errors === 1 ? \"error\" : \"errors\"}\n </span>\n )}\n {warnings > 0 && (\n <span className=\"inline-flex items-center gap-1 text-yellow-600\">\n <AlertTriangleIcon className=\"h-4 w-4\" />\n {warnings} {warnings === 1 ? \"warning\" : \"warnings\"}\n </span>\n )}\n </div>\n );\n };\n\n return (\n <>\n <section className=\"rounded-3xl border border-gray-100 bg-white p-8 shadow-[0_18px_45px_rgba(17,24,39,0.08)]\">\n <header className=\"flex items-center justify-between\">\n <h2 className=\"text-xl font-semibold text-gray-900\">Support Bundles</h2>\n {totalCount > 0 && (\n <span className=\"text-sm text-gray-500\">{totalCount} total</span>\n )}\n </header>\n\n {error && (\n <div className=\"mt-4 rounded-lg bg-red-50 px-3 py-2 text-sm text-red-700\">\n {error}\n </div>\n )}\n\n <div className=\"mt-4\">\n {bundles.length === 0 ? (\n <p className=\"rounded-2xl border border-dashed border-gray-200 bg-gray-50 px-6 py-10 text-center text-sm text-gray-500\">\n No support bundles have been uploaded yet.\n </p>\n ) : (\n <div className=\"overflow-x-auto rounded-xl border border-gray-200\">\n <table className=\"min-w-full divide-y divide-gray-200\">\n <thead className=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Instance\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Date Collected\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Status\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Issues\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Size\n </th>\n {(onDownload || onDelete) && (\n <th scope=\"col\" className=\"relative px-4 py-3\">\n <span className=\"sr-only\">Actions</span>\n </th>\n )}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200 bg-white\">\n {bundles.map((bundle) => {\n const isDownloading = downloadingId === bundle.id;\n const isDeleting = deletingId === bundle.id;\n const status = bundle.status ?? \"uploaded\";\n const isUploaded = status === \"uploaded\";\n\n return (\n <tr key={bundle.id}>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm text-gray-900\">\n {(bundle.instanceId || bundle.id).slice(0, 7)}\n </td>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm text-gray-500\">\n {bundle.createdAt\n ? new Date(bundle.createdAt).toLocaleString()\n : \"Unknown\"}\n </td>\n <td className=\"whitespace-nowrap px-4 py-3\">\n <span\n className={`inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium ${\n isUploaded\n ? \"bg-green-50 text-green-700\"\n : \"bg-yellow-50 text-yellow-700\"\n }`}\n >\n {isUploaded ? (\n <CheckIcon className=\"h-3 w-3\" />\n ) : (\n <PendingIcon className=\"h-3 w-3\" />\n )}\n {status.charAt(0).toUpperCase() + status.slice(1)}\n </span>\n </td>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm\">\n {renderIssues(bundle.insights)}\n </td>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm text-gray-500\">\n {bundle.size ? formatBytes(bundle.size) : \"—\"}\n </td>\n {(onDownload || onDelete) && (\n <td className=\"whitespace-nowrap px-4 py-3 text-right text-sm font-medium\">\n <div className=\"flex items-center justify-end gap-3\">\n {onDownload && (\n <button\n type=\"button\"\n onClick={() => handleDownload(bundle.id)}\n disabled={isActionDisabled}\n className=\"inline-flex items-center gap-1 text-gray-600 hover:text-gray-900 disabled:opacity-50\"\n >\n <DownloadIcon className=\"h-4 w-4\" />\n {isDownloading ? \"Downloading...\" : \"Download\"}\n </button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => handleDeleteClick(bundle)}\n disabled={isActionDisabled}\n className=\"inline-flex items-center gap-1 text-red-600 hover:text-red-700 disabled:opacity-50\"\n >\n <TrashIcon className=\"h-4 w-4\" />\n {isDeleting ? \"Deleting...\" : \"Delete\"}\n </button>\n )}\n </div>\n </td>\n )}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n </section>\n\n {/* Delete Confirmation Modal */}\n {bundleToDelete && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"delete-modal-title\"\n >\n <div className=\"w-full max-w-md rounded-2xl bg-white p-6 shadow-xl\">\n <h3 id=\"delete-modal-title\" className=\"text-lg font-semibold text-gray-900\">\n Confirm Deletion\n </h3>\n <p className=\"mt-2 text-sm text-gray-600\">\n Are you sure you want to delete this support bundle? This action cannot be undone.\n </p>\n <div className=\"mt-4 rounded-lg bg-gray-50 p-3 text-sm text-gray-700\">\n <div className=\"mb-1\">\n <span className=\"font-medium\">Instance ID:</span>{\" \"}\n {(bundleToDelete.instanceId || bundleToDelete.id).slice(0, 7)}\n </div>\n <div className=\"mb-1\">\n <span className=\"font-medium\">Date Collected:</span>{\" \"}\n {bundleToDelete.createdAt\n ? new Date(bundleToDelete.createdAt).toLocaleString()\n : \"Unknown\"}\n </div>\n {bundleToDelete.size && (\n <div className=\"mb-1\">\n <span className=\"font-medium\">Size:</span> {formatBytes(bundleToDelete.size)}\n </div>\n )}\n <div>\n <span className=\"font-medium\">Status:</span>{\" \"}\n {(bundleToDelete.status ?? \"uploaded\").charAt(0).toUpperCase() +\n (bundleToDelete.status ?? \"uploaded\").slice(1)}\n </div>\n </div>\n <div className=\"mt-6 flex justify-end gap-3\">\n <button\n type=\"button\"\n onClick={handleDeleteCancel}\n disabled={deletingId !== null}\n className=\"rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 transition hover:bg-gray-200 disabled:opacity-50\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleDeleteConfirm}\n disabled={deletingId !== null}\n className=\"rounded-lg px-4 py-2 text-sm font-medium text-white transition hover:opacity-90 disabled:opacity-50\"\n style={{ backgroundColor: primaryColor }}\n >\n {deletingId !== null ? \"Deleting...\" : \"Delete\"}\n </button>\n </div>\n </div>\n </div>\n )}\n </>\n );\n};\n\nSupportBundlesCard.displayName = \"SupportBundlesCard\";\n"]}
1
+ {"version":3,"sources":["../../src/utils/format.ts","../../src/utils/constants.ts","../../src/components/support-bundles-card.tsx"],"names":[],"mappings":"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","file":"support-bundles-card.js","sourcesContent":["/**\n * Format bytes to human-readable string\n * @param bytes - Number of bytes\n * @param decimals - Number of decimal places (default: 1)\n * @returns Formatted string (e.g., \"1.5 MB\")\n */\nexport function formatBytes(bytes: number, decimals = 1): string {\n if (bytes === 0) return \"0 Bytes\";\n\n const k = 1024;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = [\"Bytes\", \"KB\", \"MB\", \"GB\", \"TB\"];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;\n}\n\n/**\n * Format date string to short numeric date (no time)\n * @param dateString - ISO date string or null/undefined\n * @returns Formatted string (e.g., \"01/27/2026\") or \"Never\" if no date\n */\nexport function formatDateShort(dateString?: string | null): string {\n if (!dateString) return \"Never\";\n const date = new Date(dateString);\n if (isNaN(date.getTime())) {\n return dateString;\n }\n return date.toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\"\n });\n}\n\n/**\n * Format date string to human-readable local timestamp\n * @param dateString - ISO date string or null/undefined\n * @returns Formatted string (e.g., \"Jan 27, 2026, 10:32 PM\") or \"Never\" if no date\n */\nexport function formatDate(dateString?: string | null): string {\n if (!dateString) return \"Never\";\n const date = new Date(dateString);\n if (isNaN(date.getTime())) {\n return dateString;\n }\n return date.toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true\n });\n}\n\n/**\n * Format date string to human-readable UTC timestamp\n * @param dateString - ISO date string\n * @returns Formatted string (e.g., \"01/27/2026, 22:32:39 UTC\")\n */\nexport function formatDateTime(dateString: string): string {\n const date = new Date(dateString);\n if (isNaN(date.getTime())) {\n return dateString;\n }\n return date.toLocaleString(\"en-US\", {\n timeZone: \"UTC\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n hour12: false\n }) + \" UTC\";\n}\n\n/**\n * Format date string to user-friendly local timestamp with 12-hour time\n * @param dateString - ISO date string or null/undefined\n * @returns Formatted string (e.g., \"1/27/2026, 10:32 PM\") or \"N/A\" if not provided\n */\nexport function formatDateTimeLocal(dateString?: string | null): string {\n if (!dateString) return \"N/A\";\n\n try {\n const date = new Date(dateString);\n if (isNaN(date.getTime())) {\n return dateString;\n }\n return date.toLocaleDateString(\"en-US\", {\n month: \"numeric\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"2-digit\",\n hour12: true\n });\n } catch {\n return \"N/A\";\n }\n}\n","/**\n * Default globe favicon matching the CiGlobe icon (Circum Icons)\n * Used as fallback when custom branding doesn't provide a favicon\n */\nexport const DEFAULT_FAVICON = \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239ca3af' stroke-width='1.5'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cellipse cx='12' cy='12' rx='4' ry='10'/%3E%3Cpath d='M2 12h20'/%3E%3C/svg%3E\";\n\n/**\n * Default primary brand color\n */\nexport const DEFAULT_PRIMARY_COLOR = \"#4f46e5\";\n\n/**\n * Default secondary brand color\n */\nexport const DEFAULT_SECONDARY_COLOR = \"#6366f1\";\n\n/**\n * Check if the API origin is HTTP (used for repldev environments)\n * This determines cookie security settings for cross-origin iframes\n * @returns true if the API origin starts with http:// (not https://)\n */\nexport const isHttpApiOrigin = (): boolean => {\n return process.env.REPLICATED_APP_ORIGIN?.startsWith('http://') || false;\n};\n","\"use client\";\n\nimport { useState, useCallback } from \"react\";\nimport type { SupportBundleSummary } from \"../actions\";\nimport { formatBytes } from \"../utils/format\";\nimport { DEFAULT_SECONDARY_COLOR } from \"../utils/constants\";\n\ninterface SupportBundlesCardProps {\n totalCount: number;\n bundles: SupportBundleSummary[];\n /** Callback to download a bundle. Returns a signed URL. */\n onDownload?: (bundleId: string) => Promise<string>;\n /** Callback to delete a bundle. */\n onDelete?: (bundleId: string) => Promise<void>;\n /** Primary brand color. Defaults to DEFAULT_SECONDARY_COLOR. */\n primaryColor?: string;\n}\n\nconst DownloadIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M12 3v14\" />\n <path d=\"M8 13l4 4 4-4\" />\n <path d=\"M5 21h14\" />\n </svg>\n);\n\nconst TrashIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M3 6h18\" />\n <path d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\" />\n <path d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\" />\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\" />\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\" />\n </svg>\n);\n\nconst CheckIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={className}\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9 12l2 2 4-4\" />\n </svg>\n);\n\nconst PendingIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={className}\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" strokeDasharray=\"4 2\" />\n </svg>\n);\n\nconst AlertTriangleIcon = ({ className }: { className?: string }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\" />\n <line x1=\"12\" y1=\"9\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"17\" x2=\"12.01\" y2=\"17\" />\n </svg>\n);\n\nexport const SupportBundlesCard = ({\n totalCount,\n bundles,\n onDownload,\n onDelete,\n primaryColor = DEFAULT_SECONDARY_COLOR\n}: SupportBundlesCardProps) => {\n const [downloadingId, setDownloadingId] = useState<string | null>(null);\n const [deletingId, setDeletingId] = useState<string | null>(null);\n const [bundleToDelete, setBundleToDelete] = useState<SupportBundleSummary | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const handleDownload = useCallback(async (bundleId: string) => {\n if (!onDownload) return;\n\n setError(null);\n setDownloadingId(bundleId);\n\n try {\n const signedUrl = await onDownload(bundleId);\n // Trigger download via temporary link\n const link = document.createElement(\"a\");\n link.href = signedUrl;\n link.setAttribute(\"download\", \"\");\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to download bundle\");\n } finally {\n setDownloadingId(null);\n }\n }, [onDownload]);\n\n const handleDeleteClick = useCallback((bundle: SupportBundleSummary) => {\n setBundleToDelete(bundle);\n }, []);\n\n const handleDeleteConfirm = useCallback(async () => {\n if (!onDelete || !bundleToDelete) return;\n\n setError(null);\n setDeletingId(bundleToDelete.id);\n\n try {\n await onDelete(bundleToDelete.id);\n setBundleToDelete(null);\n } catch (err) {\n setError(err instanceof Error ? err.message : \"Failed to delete bundle\");\n setBundleToDelete(null);\n } finally {\n setDeletingId(null);\n }\n }, [onDelete, bundleToDelete]);\n\n const handleDeleteCancel = useCallback(() => {\n setBundleToDelete(null);\n }, []);\n\n const isActionDisabled = downloadingId !== null || deletingId !== null;\n\n const renderIssues = (insights: SupportBundleSummary[\"insights\"]) => {\n const errors = insights?.filter((i) => i.level === \"error\")?.length ?? 0;\n const warnings = insights?.filter((i) => i.level === \"warn\")?.length ?? 0;\n\n if (!errors && !warnings) {\n return (\n <span className=\"text-gray-400\">No issues found</span>\n );\n }\n\n return (\n <div className=\"flex items-center gap-2\">\n {errors > 0 && (\n <span className=\"inline-flex items-center gap-1 text-red-600\">\n <AlertTriangleIcon className=\"h-4 w-4\" />\n {errors} {errors === 1 ? \"error\" : \"errors\"}\n </span>\n )}\n {warnings > 0 && (\n <span className=\"inline-flex items-center gap-1 text-yellow-600\">\n <AlertTriangleIcon className=\"h-4 w-4\" />\n {warnings} {warnings === 1 ? \"warning\" : \"warnings\"}\n </span>\n )}\n </div>\n );\n };\n\n return (\n <>\n <section className=\"rounded-3xl border border-gray-100 bg-white p-8 shadow-[0_18px_45px_rgba(17,24,39,0.08)]\">\n <header className=\"flex items-center justify-between\">\n <h2 className=\"text-xl font-semibold text-gray-900\">Support Bundles</h2>\n {totalCount > 0 && (\n <span className=\"text-sm text-gray-500\">{totalCount} total</span>\n )}\n </header>\n\n {error && (\n <div className=\"mt-4 rounded-lg bg-red-50 px-3 py-2 text-sm text-red-700\">\n {error}\n </div>\n )}\n\n <div className=\"mt-4\">\n {bundles.length === 0 ? (\n <p className=\"rounded-2xl border border-dashed border-gray-200 bg-gray-50 px-6 py-10 text-center text-sm text-gray-500\">\n No support bundles have been uploaded yet.\n </p>\n ) : (\n <div className=\"overflow-x-auto rounded-xl border border-gray-200\">\n <table className=\"w-full min-w-[700px] divide-y divide-gray-200\">\n <thead className=\"bg-gray-50\">\n <tr>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Instance\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Date Collected\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Status\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Issues\n </th>\n <th scope=\"col\" className=\"px-4 py-3 text-left text-xs font-medium uppercase tracking-wider text-gray-500\">\n Size\n </th>\n {(onDownload || onDelete) && (\n <th scope=\"col\" className=\"relative px-4 py-3\">\n <span className=\"sr-only\">Actions</span>\n </th>\n )}\n </tr>\n </thead>\n <tbody className=\"divide-y divide-gray-200 bg-white\">\n {bundles.map((bundle) => {\n const isDownloading = downloadingId === bundle.id;\n const isDeleting = deletingId === bundle.id;\n const status = bundle.status ?? \"uploaded\";\n const isUploaded = status === \"uploaded\";\n\n return (\n <tr key={bundle.id}>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm text-gray-900\">\n {(bundle.instanceId || bundle.id).slice(0, 7)}\n </td>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm text-gray-500\">\n {bundle.createdAt\n ? new Date(bundle.createdAt).toLocaleString()\n : \"Unknown\"}\n </td>\n <td className=\"whitespace-nowrap px-4 py-3\">\n <span\n className={`inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium ${\n isUploaded\n ? \"bg-green-50 text-green-700\"\n : \"bg-yellow-50 text-yellow-700\"\n }`}\n >\n {isUploaded ? (\n <CheckIcon className=\"h-3 w-3\" />\n ) : (\n <PendingIcon className=\"h-3 w-3\" />\n )}\n {status.charAt(0).toUpperCase() + status.slice(1)}\n </span>\n </td>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm\">\n {renderIssues(bundle.insights)}\n </td>\n <td className=\"whitespace-nowrap px-4 py-3 text-sm text-gray-500\">\n {bundle.size ? formatBytes(bundle.size) : \"—\"}\n </td>\n {(onDownload || onDelete) && (\n <td className=\"whitespace-nowrap px-4 py-3 text-right text-sm font-medium\">\n <div className=\"flex items-center justify-end gap-3\">\n {onDownload && (\n <button\n type=\"button\"\n onClick={() => handleDownload(bundle.id)}\n disabled={isActionDisabled}\n className=\"inline-flex items-center gap-1 text-gray-600 hover:text-gray-900 disabled:opacity-50\"\n >\n <DownloadIcon className=\"h-4 w-4\" />\n {isDownloading ? \"Downloading...\" : \"Download\"}\n </button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={() => handleDeleteClick(bundle)}\n disabled={isActionDisabled}\n className=\"inline-flex items-center gap-1 text-red-600 hover:text-red-700 disabled:opacity-50\"\n >\n <TrashIcon className=\"h-4 w-4\" />\n {isDeleting ? \"Deleting...\" : \"Delete\"}\n </button>\n )}\n </div>\n </td>\n )}\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n )}\n </div>\n </section>\n\n {/* Delete Confirmation Modal */}\n {bundleToDelete && (\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"delete-modal-title\"\n >\n <div className=\"w-full max-w-md rounded-2xl bg-white p-6 shadow-xl\">\n <h3 id=\"delete-modal-title\" className=\"text-lg font-semibold text-gray-900\">\n Confirm Deletion\n </h3>\n <p className=\"mt-2 text-sm text-gray-600\">\n Are you sure you want to delete this support bundle? This action cannot be undone.\n </p>\n <div className=\"mt-4 rounded-lg bg-gray-50 p-3 text-sm text-gray-700\">\n <div className=\"mb-1\">\n <span className=\"font-medium\">Instance ID:</span>{\" \"}\n {(bundleToDelete.instanceId || bundleToDelete.id).slice(0, 7)}\n </div>\n <div className=\"mb-1\">\n <span className=\"font-medium\">Date Collected:</span>{\" \"}\n {bundleToDelete.createdAt\n ? new Date(bundleToDelete.createdAt).toLocaleString()\n : \"Unknown\"}\n </div>\n {bundleToDelete.size && (\n <div className=\"mb-1\">\n <span className=\"font-medium\">Size:</span> {formatBytes(bundleToDelete.size)}\n </div>\n )}\n <div>\n <span className=\"font-medium\">Status:</span>{\" \"}\n {(bundleToDelete.status ?? \"uploaded\").charAt(0).toUpperCase() +\n (bundleToDelete.status ?? \"uploaded\").slice(1)}\n </div>\n </div>\n <div className=\"mt-6 flex justify-end gap-3\">\n <button\n type=\"button\"\n onClick={handleDeleteCancel}\n disabled={deletingId !== null}\n className=\"rounded-lg bg-gray-100 px-4 py-2 text-sm font-medium text-gray-700 transition hover:bg-gray-200 disabled:opacity-50\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleDeleteConfirm}\n disabled={deletingId !== null}\n className=\"rounded-lg px-4 py-2 text-sm font-medium text-white transition-opacity duration-200 hover:opacity-90 disabled:opacity-50\"\n style={{ backgroundColor: primaryColor }}\n >\n {deletingId !== null ? \"Deleting...\" : \"Delete\"}\n </button>\n </div>\n </div>\n </div>\n )}\n </>\n );\n};\n\nSupportBundlesCard.displayName = \"SupportBundlesCard\";\n"]}
@@ -7,7 +7,18 @@ import { jsxs, jsx } from 'react/jsx-runtime';
7
7
  * Enterprise Portal Components
8
8
  * This file is generated by tsup. Do not edit manually.
9
9
  */
10
+ var __defProp = Object.defineProperty;
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
10
15
 
16
+ // datadog/tracer.ts
17
+ var tracer_exports = {};
18
+ __export(tracer_exports, {
19
+ default: () => tracer_default
20
+ });
21
+ var tracer_default;
11
22
 
12
23
  // src/utils/api-client.ts
13
24
  function isRedirectError(error) {
@@ -35,8 +46,17 @@ async function handle401() {
35
46
  const { redirect } = await import('next/navigation');
36
47
  return redirect("/?expired=1");
37
48
  }
49
+ function isErrorPage(url) {
50
+ try {
51
+ const urlObj = new URL(url);
52
+ return urlObj.pathname === "/error";
53
+ } catch {
54
+ return url === "/error" || url.startsWith("/error?");
55
+ }
56
+ }
38
57
  async function handleServerError(statusCode) {
39
58
  const { redirect } = await import('next/navigation');
59
+ const { cookies } = await import('next/headers');
40
60
  let sourceUrl;
41
61
  try {
42
62
  const { headers } = await import('next/headers');
@@ -44,12 +64,20 @@ async function handleServerError(statusCode) {
44
64
  const referer = headersList.get("referer");
45
65
  const host = headersList.get("host");
46
66
  const pathname = headersList.get("x-invoke-path") || headersList.get("x-forwarded-path");
47
- if (referer) {
67
+ if (referer && !isErrorPage(referer)) {
48
68
  sourceUrl = referer;
49
69
  } else if (host && pathname) {
50
70
  const protocol = headersList.get("x-forwarded-proto") || "https";
51
71
  sourceUrl = `${protocol}://${host}${pathname}`;
52
72
  }
73
+ if (!sourceUrl || isErrorPage(sourceUrl)) {
74
+ const cookieStore = await cookies();
75
+ const preservedSource = cookieStore.get("portal_error_source");
76
+ if (preservedSource?.value) {
77
+ sourceUrl = decodeURIComponent(preservedSource.value);
78
+ cookieStore.delete("portal_error_source");
79
+ }
80
+ }
53
81
  } catch (error) {
54
82
  console.debug("[portal-components] Could not determine source URL", error);
55
83
  }
@@ -92,11 +120,15 @@ var fetchCustomBrandingImpl = async () => {
92
120
  const payload = await response.json();
93
121
  const brandingObject = {
94
122
  logo: payload.logoUrl,
95
- title: payload.appName,
96
- customColor1: payload.primaryColor,
97
- customColor2: payload.secondaryColor,
123
+ title: payload.title,
124
+ primaryColor: payload.primaryColor,
125
+ secondaryColor: payload.secondaryColor,
98
126
  favicon: payload.faviconUrl,
99
- supportPortalLink: payload.supportPortalLink || ""
127
+ supportPortalLink: payload.supportPortalLink || "",
128
+ background: payload.background,
129
+ backgroundImage: payload.backgroundImage,
130
+ customColor1: payload.customColor1,
131
+ customColor2: payload.customColor2
100
132
  };
101
133
  const brandingData = Buffer.from(JSON.stringify(brandingObject)).toString("base64");
102
134
  return {