@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
@@ -0,0 +1,478 @@
1
+ "use server";
2
+ import { cookies } from 'next/headers';
3
+ import { Buffer } from 'buffer';
4
+ import { cache } from 'react';
5
+
6
+ /**
7
+ * Enterprise Portal Components
8
+ * This file is generated by tsup. Do not edit manually.
9
+ */
10
+ var __defProp = Object.defineProperty;
11
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
+ var __getOwnPropNames = Object.getOwnPropertyNames;
13
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
14
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
15
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
16
+ }) : x)(function(x) {
17
+ if (typeof require !== "undefined") return require.apply(this, arguments);
18
+ throw Error('Dynamic require of "' + x + '" is not supported');
19
+ });
20
+ var __esm = (fn, res) => function __init() {
21
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
22
+ };
23
+ var __export = (target, all) => {
24
+ for (var name in all)
25
+ __defProp(target, name, { get: all[name], enumerable: true });
26
+ };
27
+ var __copyProps = (to, from, except, desc) => {
28
+ if (from && typeof from === "object" || typeof from === "function") {
29
+ for (let key of __getOwnPropNames(from))
30
+ if (!__hasOwnProp.call(to, key) && key !== except)
31
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
32
+ }
33
+ return to;
34
+ };
35
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
36
+
37
+ // datadog/tracer.ts
38
+ var tracer_exports = {};
39
+ __export(tracer_exports, {
40
+ default: () => tracer_default
41
+ });
42
+ var rawFlag, isEnabled, tracer, getRoutePattern, tracer_default;
43
+ var init_tracer = __esm({
44
+ "datadog/tracer.ts"() {
45
+ rawFlag = String(process.env.USE_DATADOG_APM || "").toLowerCase();
46
+ isEnabled = rawFlag === "true";
47
+ process.env.DD_TRACE_ENABLED = isEnabled ? "1" : "0";
48
+ tracer = null;
49
+ if (isEnabled) {
50
+ const serviceName = process.env.DD_SERVICE || "enterprise-portal";
51
+ const environment = process.env.DD_ENV || process.env.NODE_ENV || "development";
52
+ const version = process.env.DD_VERSION || process.env.NEXT_PUBLIC_VERSION || "0.0.0-dev";
53
+ const agentHost = process.env.DD_AGENT_HOST || process.env.DATADOG_AGENT_HOST || "127.0.0.1";
54
+ const agentPort = process.env.DD_TRACE_AGENT_PORT || "8126";
55
+ process.env.DD_SERVICE = serviceName;
56
+ process.env.DD_ENV = environment;
57
+ {
58
+ process.env.DD_VERSION = version;
59
+ }
60
+ process.env.DD_AGENT_HOST = agentHost;
61
+ process.env.DD_TRACE_AGENT_PORT = agentPort;
62
+ const dbmPropagationMode = process.env.DD_DBM_PROPAGATION_MODE || "full";
63
+ process.env.DD_DBM_PROPAGATION_MODE = dbmPropagationMode;
64
+ try {
65
+ const ddTrace = __require("dd-trace");
66
+ tracer = ddTrace.init({
67
+ service: serviceName,
68
+ env: environment,
69
+ version,
70
+ logInjection: true,
71
+ runtimeMetrics: true,
72
+ appsec: false,
73
+ profiling: false,
74
+ startupLogs: true
75
+ // Enable for debugging
76
+ });
77
+ console.log(`[datadog] Tracer initialized: service=${serviceName}, env=${environment}, version=${version}, agent=${agentHost}:${agentPort}`);
78
+ tracer.use("dns", false);
79
+ tracer.use("net", false);
80
+ tracer.use("http", {
81
+ server: {
82
+ hooks: {
83
+ request: (span, req) => {
84
+ if (!span) return;
85
+ const url = req?.url || "";
86
+ const method = req?.method || "GET";
87
+ const path = url.split("?")[0];
88
+ if (path.startsWith("/_next/")) {
89
+ span.context()._trace.isRecording = false;
90
+ return;
91
+ }
92
+ const routePattern = getRoutePattern(path);
93
+ span.setTag("resource.name", `${method} ${routePattern}`);
94
+ span.setTag("http.route", routePattern);
95
+ }
96
+ }
97
+ }
98
+ });
99
+ } catch (err) {
100
+ console.error("[datadog] failed to initialize tracing", err);
101
+ tracer = null;
102
+ }
103
+ }
104
+ getRoutePattern = (path) => {
105
+ const routePatterns = [
106
+ // Update instance routes - normalize dynamic segments (capture suffix to preserve sub-routes)
107
+ { pattern: /^\/update\/instance\/[^/]+(.*)$/, replacement: "/update/instance/[instanceId]$1" }
108
+ ];
109
+ for (const { pattern, replacement } of routePatterns) {
110
+ if (pattern.test(path)) {
111
+ return path.replace(pattern, replacement);
112
+ }
113
+ }
114
+ return path;
115
+ };
116
+ tracer_default = tracer;
117
+ }
118
+ });
119
+
120
+ // src/utils/observability/tracing.ts
121
+ var tracerCache = void 0;
122
+ function getTracer() {
123
+ if (tracerCache !== void 0) {
124
+ return tracerCache;
125
+ }
126
+ const rawFlag2 = String(process.env.USE_DATADOG_APM || "").toLowerCase();
127
+ const isEnabled2 = rawFlag2 === "true";
128
+ if (!isEnabled2) {
129
+ tracerCache = null;
130
+ return null;
131
+ }
132
+ try {
133
+ const tracerModule = (init_tracer(), __toCommonJS(tracer_exports));
134
+ const tracer2 = tracerModule.default || tracerModule;
135
+ if (tracer2 && typeof tracer2.trace === "function") {
136
+ tracerCache = tracer2;
137
+ return tracerCache;
138
+ }
139
+ } catch (err) {
140
+ console.warn("Failed to load tracer:", err);
141
+ }
142
+ tracerCache = null;
143
+ return null;
144
+ }
145
+ async function withTrace(name, fn) {
146
+ const activeTracer = getTracer();
147
+ if (!activeTracer) {
148
+ return fn(void 0);
149
+ }
150
+ return activeTracer.trace(name, async (span) => {
151
+ if (span) {
152
+ span.setTag("component", "application");
153
+ }
154
+ try {
155
+ const result = await fn(span);
156
+ return result;
157
+ } catch (error) {
158
+ if (span) {
159
+ span.setTag("error", error);
160
+ }
161
+ throw error;
162
+ }
163
+ });
164
+ }
165
+ function traceServerAction(name, fn) {
166
+ const spanName = name.startsWith("server.action.") ? name : `server.action.${name}`;
167
+ const traced = async (...args) => {
168
+ return withTrace(spanName, async (span) => {
169
+ if (span) {
170
+ span.setTag("component", "server-action");
171
+ }
172
+ const result = await fn(...args);
173
+ return result;
174
+ });
175
+ };
176
+ return traced;
177
+ }
178
+
179
+ // src/utils/api-client.ts
180
+ async function authenticatedFetch(url, options = {}) {
181
+ const { token, ...fetchOptions } = options;
182
+ const headers = new Headers(fetchOptions.headers);
183
+ if (token) {
184
+ headers.set("authorization", `Bearer ${token}`);
185
+ }
186
+ const response = await fetch(url, {
187
+ ...fetchOptions,
188
+ headers
189
+ });
190
+ if (response.status === 401) {
191
+ await handle401();
192
+ }
193
+ if (response.status === 502 || response.status === 503 || response.status === 504) {
194
+ await handleServerError(response.status);
195
+ }
196
+ return response;
197
+ }
198
+ async function handle401() {
199
+ const { redirect } = await import('next/navigation');
200
+ return redirect("/?expired=1");
201
+ }
202
+ function isErrorPage(url) {
203
+ try {
204
+ const urlObj = new URL(url);
205
+ return urlObj.pathname === "/error";
206
+ } catch {
207
+ return url === "/error" || url.startsWith("/error?");
208
+ }
209
+ }
210
+ async function handleServerError(statusCode) {
211
+ const { redirect } = await import('next/navigation');
212
+ const { cookies: cookies2 } = await import('next/headers');
213
+ let sourceUrl;
214
+ try {
215
+ const { headers } = await import('next/headers');
216
+ const headersList = await headers();
217
+ const referer = headersList.get("referer");
218
+ const host = headersList.get("host");
219
+ const pathname = headersList.get("x-invoke-path") || headersList.get("x-forwarded-path");
220
+ if (referer && !isErrorPage(referer)) {
221
+ sourceUrl = referer;
222
+ } else if (host && pathname) {
223
+ const protocol = headersList.get("x-forwarded-proto") || "https";
224
+ sourceUrl = `${protocol}://${host}${pathname}`;
225
+ }
226
+ if (!sourceUrl || isErrorPage(sourceUrl)) {
227
+ const cookieStore = await cookies2();
228
+ const preservedSource = cookieStore.get("portal_error_source");
229
+ if (preservedSource?.value) {
230
+ sourceUrl = decodeURIComponent(preservedSource.value);
231
+ cookieStore.delete("portal_error_source");
232
+ }
233
+ }
234
+ } catch (error) {
235
+ console.debug("[portal-components] Could not determine source URL", error);
236
+ }
237
+ const params = new URLSearchParams({ code: String(statusCode) });
238
+ if (sourceUrl) {
239
+ params.set("source", sourceUrl);
240
+ }
241
+ return redirect(`/error?${params.toString()}`);
242
+ }
243
+
244
+ // src/utils/constants.ts
245
+ var isHttpApiOrigin = () => {
246
+ return process.env.REPLICATED_APP_ORIGIN?.startsWith("http://") || false;
247
+ };
248
+
249
+ // src/actions/index.ts
250
+ var getApiOrigin = () => {
251
+ return (process.env.REPLICATED_APP_ORIGIN || "https://replicated.app").replace(/\/+$/, "");
252
+ };
253
+ var fetchCustomBrandingImpl = async () => {
254
+ const appSlug = process.env.PORTAL_APP_SLUG;
255
+ if (!appSlug) {
256
+ throw new Error("PORTAL_APP_SLUG is not configured");
257
+ }
258
+ const url = `${getApiOrigin()}/enterprise-portal/public/branding?app_slug=${encodeURIComponent(
259
+ appSlug
260
+ )}`;
261
+ if (process.env.NODE_ENV !== "production") {
262
+ console.debug(
263
+ "[portal-components] fetching custom branding via %s (Enterprise Portal API)",
264
+ url
265
+ );
266
+ }
267
+ const response = await fetch(url, {
268
+ headers: {
269
+ accept: "application/json"
270
+ }
271
+ });
272
+ if (!response.ok) {
273
+ throw new Error(
274
+ `Custom branding request failed (${response.status} ${response.statusText})`
275
+ );
276
+ }
277
+ const payload = await response.json();
278
+ const brandingObject = {
279
+ logo: payload.logoUrl,
280
+ title: payload.title,
281
+ primaryColor: payload.primaryColor,
282
+ secondaryColor: payload.secondaryColor,
283
+ favicon: payload.faviconUrl,
284
+ supportPortalLink: payload.supportPortalLink || "",
285
+ background: payload.background,
286
+ backgroundImage: payload.backgroundImage,
287
+ customColor1: payload.customColor1,
288
+ customColor2: payload.customColor2
289
+ };
290
+ const brandingData = Buffer.from(JSON.stringify(brandingObject)).toString("base64");
291
+ return {
292
+ brandingData,
293
+ documentation: null
294
+ // Documentation not included in new API's public endpoint
295
+ };
296
+ };
297
+ cache(fetchCustomBrandingImpl);
298
+ async function listReleasesImpl() {
299
+ const { cookies: cookies2 } = await import('next/headers');
300
+ const sessionStore = await cookies2();
301
+ const session = sessionStore.get("portal_session");
302
+ const token = session?.value;
303
+ if (!token) {
304
+ throw new Error("List releases requires a session token");
305
+ }
306
+ const endpoint = `${getApiOrigin()}/enterprise-portal/releases`;
307
+ if (process.env.NODE_ENV !== "production") {
308
+ console.debug("[portal-components] fetching releases via %s (Enterprise Portal API)", endpoint);
309
+ }
310
+ const response = await authenticatedFetch(endpoint, {
311
+ method: "GET",
312
+ token,
313
+ headers: {
314
+ accept: "application/json"
315
+ }
316
+ });
317
+ if (!response.ok) {
318
+ throw new Error(
319
+ `List releases request failed (${response.status} ${response.statusText})`
320
+ );
321
+ }
322
+ const envelope = await response.json();
323
+ const data = envelope.data;
324
+ return {
325
+ releases: Array.isArray(data?.releases) ? data.releases : [],
326
+ totalCount: data?.totalCount || 0
327
+ };
328
+ }
329
+ traceServerAction("listReleases", listReleasesImpl);
330
+
331
+ // src/actions/trial-signup.ts
332
+ async function createTrialSignupImpl(payload) {
333
+ try {
334
+ const response = await fetch(
335
+ `${getApiOrigin()}/enterprise-portal/auth/trial/signup`,
336
+ {
337
+ method: "POST",
338
+ headers: {
339
+ "Content-Type": "application/json"
340
+ },
341
+ body: JSON.stringify({
342
+ app_slug: payload.appSlug,
343
+ company: payload.company,
344
+ email: payload.email
345
+ })
346
+ }
347
+ );
348
+ if (!response.ok) {
349
+ if (response.status === 403) {
350
+ return {
351
+ success: false,
352
+ error: "Trial signup is not enabled for this application."
353
+ };
354
+ }
355
+ if (response.status === 400) {
356
+ return {
357
+ success: false,
358
+ error: "Invalid request. Please check your information and try again."
359
+ };
360
+ }
361
+ return {
362
+ success: false,
363
+ error: "An error occurred. Please try again later."
364
+ };
365
+ }
366
+ const data = await response.json();
367
+ return { success: data.success };
368
+ } catch (error) {
369
+ console.error("Error creating trial signup:", error);
370
+ return {
371
+ success: false,
372
+ error: "Network error. Please try again later."
373
+ };
374
+ }
375
+ }
376
+ async function verifyTrialSignupImpl(code) {
377
+ try {
378
+ const response = await fetch(
379
+ `${getApiOrigin()}/enterprise-portal/auth/trial/signup/verify`,
380
+ {
381
+ method: "POST",
382
+ headers: {
383
+ "Content-Type": "application/json"
384
+ },
385
+ body: JSON.stringify({
386
+ code
387
+ })
388
+ }
389
+ );
390
+ if (!response.ok) {
391
+ if (response.status === 401) {
392
+ return {
393
+ success: false,
394
+ error: "Invalid or expired verification code. Please try again."
395
+ };
396
+ }
397
+ return {
398
+ success: false,
399
+ error: "An error occurred during verification. Please try again."
400
+ };
401
+ }
402
+ const data = await response.json();
403
+ const token = data.Body?.jwt || data.jwt;
404
+ if (!token) {
405
+ return {
406
+ success: false,
407
+ error: "Failed to create session. Please contact support."
408
+ };
409
+ }
410
+ const sessionStore = await cookies();
411
+ const secure = true;
412
+ const sameSiteValue = isHttpApiOrigin() ? "none" : "lax";
413
+ sessionStore.set("portal_session", token, {
414
+ httpOnly: true,
415
+ secure,
416
+ sameSite: sameSiteValue,
417
+ path: "/"
418
+ });
419
+ return {
420
+ success: true,
421
+ redirectUrl: "/"
422
+ // Redirect to home/dashboard
423
+ };
424
+ } catch (error) {
425
+ console.error("Error verifying trial signup:", error);
426
+ return {
427
+ success: false,
428
+ error: "Network error. Please try again later."
429
+ };
430
+ }
431
+ }
432
+ async function checkTrialSignupEnabledImpl(appSlug) {
433
+ try {
434
+ const params = new URLSearchParams({ app_slug: appSlug });
435
+ const url = `${getApiOrigin()}/enterprise-portal/public/app-features?${params.toString()}`;
436
+ if (process.env.NODE_ENV !== "production") {
437
+ console.debug("[portal-components] fetching app features via %s", url);
438
+ }
439
+ const response = await fetch(url, {
440
+ method: "GET",
441
+ headers: {
442
+ "Content-Type": "application/json"
443
+ },
444
+ cache: "no-store"
445
+ });
446
+ if (!response.ok) {
447
+ if (process.env.NODE_ENV !== "production") {
448
+ console.debug("[portal-components] app features request failed with status %d", response.status);
449
+ }
450
+ return { enabled: false };
451
+ }
452
+ const data = await response.json();
453
+ if (process.env.NODE_ENV !== "production") {
454
+ console.debug(
455
+ "[portal-components] app features response: trial_signup_enabled=%s, trial_expiration_days=%d, license_type=%s",
456
+ data.trial_signup_enabled,
457
+ data.trial_expiration_days,
458
+ data.license_type
459
+ );
460
+ }
461
+ return {
462
+ enabled: data.trial_signup_enabled === true,
463
+ trialExpirationDays: data.trial_expiration_days || 30,
464
+ licenseType: data.license_type || "trial",
465
+ termsAndConditionsUrl: data.terms_and_conditions_url || ""
466
+ };
467
+ } catch (error) {
468
+ console.error("[portal-components] Error checking trial signup status:", error);
469
+ return { enabled: false };
470
+ }
471
+ }
472
+ var createTrialSignup = traceServerAction("createTrialSignup", createTrialSignupImpl);
473
+ var verifyTrialSignup = traceServerAction("verifyTrialSignup", verifyTrialSignupImpl);
474
+ var checkTrialSignupEnabled = traceServerAction("checkTrialSignupEnabled", checkTrialSignupEnabledImpl);
475
+
476
+ export { checkTrialSignupEnabled, createTrialSignup, verifyTrialSignup };
477
+ //# sourceMappingURL=trial-signup.js.map
478
+ //# sourceMappingURL=trial-signup.js.map