@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
@@ -200,8 +200,17 @@ async function handle401() {
200
200
  const { redirect } = await import('next/navigation');
201
201
  return redirect("/?expired=1");
202
202
  }
203
+ function isErrorPage(url) {
204
+ try {
205
+ const urlObj = new URL(url);
206
+ return urlObj.pathname === "/error";
207
+ } catch {
208
+ return url === "/error" || url.startsWith("/error?");
209
+ }
210
+ }
203
211
  async function handleServerError(statusCode) {
204
212
  const { redirect } = await import('next/navigation');
213
+ const { cookies: cookies2 } = await import('next/headers');
205
214
  let sourceUrl;
206
215
  try {
207
216
  const { headers } = await import('next/headers');
@@ -209,12 +218,20 @@ async function handleServerError(statusCode) {
209
218
  const referer = headersList.get("referer");
210
219
  const host = headersList.get("host");
211
220
  const pathname = headersList.get("x-invoke-path") || headersList.get("x-forwarded-path");
212
- if (referer) {
221
+ if (referer && !isErrorPage(referer)) {
213
222
  sourceUrl = referer;
214
223
  } else if (host && pathname) {
215
224
  const protocol = headersList.get("x-forwarded-proto") || "https";
216
225
  sourceUrl = `${protocol}://${host}${pathname}`;
217
226
  }
227
+ if (!sourceUrl || isErrorPage(sourceUrl)) {
228
+ const cookieStore = await cookies2();
229
+ const preservedSource = cookieStore.get("portal_error_source");
230
+ if (preservedSource?.value) {
231
+ sourceUrl = decodeURIComponent(preservedSource.value);
232
+ cookieStore.delete("portal_error_source");
233
+ }
234
+ }
218
235
  } catch (error) {
219
236
  console.debug("[portal-components] Could not determine source URL", error);
220
237
  }
@@ -294,11 +311,15 @@ var fetchCustomBrandingImpl = async () => {
294
311
  const payload = await response.json();
295
312
  const brandingObject = {
296
313
  logo: payload.logoUrl,
297
- title: payload.appName,
298
- customColor1: payload.primaryColor,
299
- customColor2: payload.secondaryColor,
314
+ title: payload.title,
315
+ primaryColor: payload.primaryColor,
316
+ secondaryColor: payload.secondaryColor,
300
317
  favicon: payload.faviconUrl,
301
- supportPortalLink: payload.supportPortalLink || ""
318
+ supportPortalLink: payload.supportPortalLink || "",
319
+ background: payload.background,
320
+ backgroundImage: payload.backgroundImage,
321
+ customColor1: payload.customColor1,
322
+ customColor2: payload.customColor2
302
323
  };
303
324
  const brandingData = Buffer.from(JSON.stringify(brandingObject)).toString("base64");
304
325
  return {
@@ -332,6 +353,38 @@ var getCustomerIdFromToken = (token) => {
332
353
  }
333
354
  return customerId.trim();
334
355
  };
356
+ async function listReleasesImpl() {
357
+ const { cookies: cookies2 } = await import('next/headers');
358
+ const sessionStore = await cookies2();
359
+ const session = sessionStore.get("portal_session");
360
+ const token = session?.value;
361
+ if (!token) {
362
+ throw new Error("List releases requires a session token");
363
+ }
364
+ const endpoint = `${getApiOrigin()}/enterprise-portal/releases`;
365
+ if (process.env.NODE_ENV !== "production") {
366
+ console.debug("[portal-components] fetching releases via %s (Enterprise Portal API)", endpoint);
367
+ }
368
+ const response = await authenticatedFetch(endpoint, {
369
+ method: "GET",
370
+ token,
371
+ headers: {
372
+ accept: "application/json"
373
+ }
374
+ });
375
+ if (!response.ok) {
376
+ throw new Error(
377
+ `List releases request failed (${response.status} ${response.statusText})`
378
+ );
379
+ }
380
+ const envelope = await response.json();
381
+ const data = envelope.data;
382
+ return {
383
+ releases: Array.isArray(data?.releases) ? data.releases : [],
384
+ totalCount: data?.totalCount || 0
385
+ };
386
+ }
387
+ traceServerAction("listReleases", listReleasesImpl);
335
388
  var fetchTeamUsers = defineServerAction({
336
389
  id: "team/fetch-users",
337
390
  description: "Fetches paginated list of team users and pending invites",
@@ -927,36 +980,47 @@ async function deprovisionSamlActionImpl() {
927
980
  return { success: true };
928
981
  }
929
982
  var deprovisionSamlAction = traceServerAction("deprovisionSamlAction", deprovisionSamlActionImpl);
930
- async function getSamlFeatureEnabledImpl() {
983
+ async function fetchAppFeaturesImpl() {
931
984
  const sessionStore = await cookies();
932
985
  const session = sessionStore.get("portal_session");
933
- if (!session?.value) {
934
- return false;
935
- }
936
986
  const appSlug = process.env.PORTAL_APP_SLUG;
937
987
  if (!appSlug) {
938
- return false;
988
+ throw new Error("PORTAL_APP_SLUG is not configured");
939
989
  }
940
- try {
941
- const payload = decodeJwtPayload(session.value);
942
- const customerId = payload?.customer_id;
943
- if (!customerId) {
944
- return false;
945
- }
946
- const url = `${getApiOrigin()}/v3/metadata?app_slug=${encodeURIComponent(appSlug)}&customer_id=${encodeURIComponent(customerId)}`;
947
- const response = await fetch(url, {
948
- headers: {
949
- Accept: "application/json"
990
+ const params = new URLSearchParams({ app_slug: appSlug });
991
+ if (session?.value) {
992
+ try {
993
+ const payload = decodeJwtPayload(session.value);
994
+ const customerId = payload?.customer_id;
995
+ if (customerId) {
996
+ params.set("customer_id", customerId);
950
997
  }
951
- });
952
- const data = await response.json();
953
- return data?.enterprise_portal_saml_auth === true;
954
- } catch {
955
- return false;
998
+ } catch {
999
+ }
1000
+ }
1001
+ const url = `${getApiOrigin()}/enterprise-portal/public/app-features?${params.toString()}`;
1002
+ const response = await fetch(url, {
1003
+ headers: {
1004
+ Accept: "application/json"
1005
+ }
1006
+ });
1007
+ if (!response.ok) {
1008
+ throw new Error(`Failed to fetch app features: ${response.status} ${response.statusText}`);
956
1009
  }
1010
+ const data = await response.json();
1011
+ return {
1012
+ epEnabled: data.ep_enabled ?? false,
1013
+ trialSignupEnabled: data.trial_signup_enabled ?? false,
1014
+ trialExpirationDays: data.trial_expiration_days ?? 30,
1015
+ licenseType: data.license_type ?? "trial",
1016
+ termsAndConditionsUrl: data.terms_and_conditions_url ?? "",
1017
+ epSecurityCenterEnabled: data.ep_security_center_enabled ?? false,
1018
+ epSamlAuthEnabled: data.ep_saml_auth_enabled ?? false,
1019
+ epHideSupportBundleUploadEnabled: data.ep_hide_support_bundle_upload_enabled ?? false
1020
+ };
957
1021
  }
958
- var getSamlFeatureEnabled = traceServerAction("getSamlFeatureEnabled", getSamlFeatureEnabledImpl);
1022
+ var fetchAppFeatures = traceServerAction("fetchAppFeatures", fetchAppFeaturesImpl);
959
1023
 
960
- export { createServiceAccountAction, deleteUserAction, deprovisionSamlAction, fetchInstancesAction, fetchSamlConfigAction, fetchServiceAccountsAction, fetchTeamUsersAction, getSamlFeatureEnabled, inviteUserAction, revokeServiceAccountAction, rotateServiceAccountTokenAction, toggleSamlEnabledAction, updateSamlConfigAction };
1024
+ export { createServiceAccountAction, deleteUserAction, deprovisionSamlAction, fetchAppFeatures, fetchInstancesAction, fetchSamlConfigAction, fetchServiceAccountsAction, fetchTeamUsersAction, inviteUserAction, revokeServiceAccountAction, rotateServiceAccountTokenAction, toggleSamlEnabledAction, updateSamlConfigAction };
961
1025
  //# sourceMappingURL=team-settings.js.map
962
1026
  //# sourceMappingURL=team-settings.js.map