@burdenoff/microfe-devportal 2026.1031.1 → 2026.1102.1

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 (43) hide show
  1. package/dist/devportal/DevportalRoutes.d.ts.map +1 -1
  2. package/dist/devportal/DevportalRoutes.js +13 -9
  3. package/dist/devportal/DevportalRoutes.js.map +1 -1
  4. package/dist/devportal/components/OnboardingChecklist.d.ts +16 -0
  5. package/dist/devportal/components/OnboardingChecklist.d.ts.map +1 -0
  6. package/dist/devportal/components/OnboardingChecklist.js +151 -0
  7. package/dist/devportal/components/OnboardingChecklist.js.map +1 -0
  8. package/dist/devportal/constants/developerLinks.d.ts +47 -0
  9. package/dist/devportal/constants/developerLinks.d.ts.map +1 -0
  10. package/dist/devportal/constants/developerLinks.js +27 -0
  11. package/dist/devportal/constants/developerLinks.js.map +1 -0
  12. package/dist/devportal/hooks/useGraphQL.d.ts.map +1 -1
  13. package/dist/devportal/hooks/useGraphQL.js +2 -1
  14. package/dist/devportal/hooks/useGraphQL.js.map +1 -1
  15. package/dist/devportal/hooks/useProducts.js +1 -1
  16. package/dist/devportal/hooks/useProducts.js.map +1 -1
  17. package/dist/devportal/pages/DashboardPage.d.ts.map +1 -1
  18. package/dist/devportal/pages/DashboardPage.js +107 -105
  19. package/dist/devportal/pages/DashboardPage.js.map +1 -1
  20. package/dist/devportal/pages/DocumentationPage.d.ts.map +1 -1
  21. package/dist/devportal/pages/DocumentationPage.js +114 -148
  22. package/dist/devportal/pages/DocumentationPage.js.map +1 -1
  23. package/dist/devportal/pages/PublisherProfilePage.d.ts.map +1 -1
  24. package/dist/devportal/pages/PublisherProfilePage.js +170 -160
  25. package/dist/devportal/pages/PublisherProfilePage.js.map +1 -1
  26. package/dist/devportal/pages/ResourcesPage.js +2 -2
  27. package/dist/devportal/pages/ResourcesPage.js.map +1 -1
  28. package/dist/devportal/pages/SetupPage.d.ts.map +1 -1
  29. package/dist/devportal/pages/SetupPage.js +363 -218
  30. package/dist/devportal/pages/SetupPage.js.map +1 -1
  31. package/dist/devportal/utils/developerOnboarding.d.ts +85 -0
  32. package/dist/devportal/utils/developerOnboarding.d.ts.map +1 -0
  33. package/dist/devportal/utils/developerOnboarding.js +104 -0
  34. package/dist/devportal/utils/developerOnboarding.js.map +1 -0
  35. package/dist/generated/global-operations.d.ts +92 -39
  36. package/dist/generated/global-operations.d.ts.map +1 -1
  37. package/dist/generated/global-operations.js +177 -141
  38. package/dist/generated/global-operations.js.map +1 -1
  39. package/dist/translations/en.d.ts +50 -0
  40. package/dist/translations/en.d.ts.map +1 -1
  41. package/dist/translations/en.js +51 -1
  42. package/dist/translations/en.js.map +1 -1
  43. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DevportalRoutes.d.ts","sourceRoot":"","sources":["../../src/devportal/DevportalRoutes.tsx"],"names":[],"mappings":"AA6RA,wBAAgB,eAAe,gCAgP9B"}
1
+ {"version":3,"file":"DevportalRoutes.d.ts","sourceRoot":"","sources":["../../src/devportal/DevportalRoutes.tsx"],"names":[],"mappings":"AA6RA,wBAAgB,eAAe,gCAuP9B"}
@@ -4,15 +4,15 @@ import { FeatureFlaggedRoute as n } from "./components/FeatureFlaggedRoute.js";
4
4
  import { TelemetryErrorBoundary as r } from "./components/TelemetryErrorBoundary.js";
5
5
  import { OrgSwitcher as i } from "./components/SectionNav.js";
6
6
  import { DashboardPage as a } from "./pages/DashboardPage.js";
7
- import { Suspense as o, lazy as s, useEffect as ee } from "react";
8
- import { Navigate as c, Outlet as l, Route as u, Routes as d, useLocation as f } from "react-router";
7
+ import { Suspense as o, lazy as s, useEffect as c } from "react";
8
+ import { Navigate as ee, Outlet as l, Route as u, Routes as d, useLocation as f } from "react-router";
9
9
  import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
10
10
  //#region src/devportal/DevportalRoutes.tsx
11
11
  function g() {
12
12
  let { basePath: t, navigate: n } = e();
13
- return ee(() => {
13
+ return c(() => {
14
14
  t && n && n((t.endsWith("/") ? t.slice(0, -1) : t) || "/");
15
- }, [t, n]), t && n ? null : /* @__PURE__ */ m(c, {
15
+ }, [t, n]), t && n ? null : /* @__PURE__ */ m(ee, {
16
16
  to: "..",
17
17
  replace: !0
18
18
  });
@@ -26,7 +26,7 @@ function _(e, t) {
26
26
  })
27
27
  });
28
28
  }
29
- var v = s(() => import("./pages/OrganizationsPage.js").then((e) => ({ default: e.OrganizationsPage }))), y = s(() => import("./pages/OrganizationDetailPage.js").then((e) => ({ default: e.OrganizationDetailPage }))), b = s(() => import("./pages/CreateOrganizationPage.js").then((e) => ({ default: e.CreateOrganizationPage }))), x = s(() => import("./pages/OrganizationMembersPage.js").then((e) => ({ default: e.OrganizationMembersPage }))), S = s(() => import("./pages/RevenueDashboardPage.js").then((e) => ({ default: e.RevenueDashboardPage }))), C = s(() => import("./pages/ApplicationsPage.js").then((e) => ({ default: e.ApplicationsPage }))), w = s(() => import("./pages/ApplicationDetailPage.js").then((e) => ({ default: e.ApplicationDetailPage }))), T = s(() => import("./pages/CreateApplicationPage.js").then((e) => ({ default: e.CreateApplicationPage }))), E = s(() => import("./pages/EditApplicationPage.js").then((e) => ({ default: e.EditApplicationPage }))), D = s(() => import("./pages/ApplicationVersionsPage.js").then((e) => ({ default: e.ApplicationVersionsPage }))), O = s(() => import("./pages/OAuthCallbackPage.js").then((e) => ({ default: e.OAuthCallbackPage }))), k = s(() => import("./pages/OAuthClientsPage.js").then((e) => ({ default: e.OAuthClientsPage }))), A = s(() => import("./pages/CreateOAuthClientPage.js").then((e) => ({ default: e.CreateOAuthClientPage }))), j = s(() => import("./pages/OAuthClientDetailPage.js").then((e) => ({ default: e.OAuthClientDetailPage }))), M = s(() => import("./pages/ApiKeysPage.js").then((e) => ({ default: e.ApiKeysPage }))), N = s(() => import("./pages/CreateApiKeyPage.js").then((e) => ({ default: e.CreateApiKeyPage }))), P = s(() => import("./pages/WebhooksPage.js").then((e) => ({ default: e.WebhooksPage }))), F = s(() => import("./pages/CreateWebhookPage.js").then((e) => ({ default: e.CreateWebhookPage }))), I = s(() => import("./pages/WebhookDetailPage.js").then((e) => ({ default: e.WebhookDetailPage }))), L = s(() => import("./pages/AnalyticsDashboardPage.js").then((e) => ({ default: e.AnalyticsDashboardPage }))), R = s(() => import("./pages/DocumentationPage.js").then((e) => ({ default: e.DocumentationPage }))), z = s(() => import("./pages/ResourcesPage.js").then((e) => ({ default: e.ResourcesPage }))), B = s(() => import("./pages/SettingsPage.js").then((e) => ({ default: e.SettingsPage }))), te = s(() => import("./pages/NodeLifecyclePage.js").then((e) => ({ default: e.NodeLifecyclePage }))), V = s(() => import("./pages/PublishPage.js").then((e) => ({ default: e.PublishPage }))), H = s(() => import("./pages/AppLogsPage.js").then((e) => ({ default: e.AppLogsPage }))), U = s(() => import("./pages/DelegationsPage.js").then((e) => ({ default: e.DelegationsPage }))), W = s(() => import("./pages/ListingPreviewPage.js").then((e) => ({ default: e.ListingPreviewPage }))), G = s(() => import("./pages/StoreSubmissionPage.js").then((e) => ({ default: e.StoreSubmissionPage }))), K = s(() => import("./pages/PublisherProfilePage.js").then((e) => ({ default: e.PublisherProfilePage }))), q = s(() => import("./pages/SetupPage.js").then((e) => ({ default: e.SetupPage }))), J = s(() => import("./pages/InvitationDecisionPage.js").then((e) => ({ default: e.InvitationDecisionPage }))), Y = s(() => import("./pages/SellerDashboardPage.js").then((e) => ({ default: e.SellerDashboardPage }))), X = s(() => import("./pages/SellerItemsPage.js").then((e) => ({ default: e.SellerItemsPage }))), Z = s(() => import("./pages/CreatePhysicalItemPage.js").then((e) => ({ default: e.CreatePhysicalItemPage }))), Q = s(() => import("./pages/SellerOrdersPage.js").then((e) => ({ default: e.SellerOrdersPage }))), ne = s(() => import("./pages/EditPhysicalItemPage.js").then((e) => ({ default: e.EditPhysicalItemPage })));
29
+ var v = s(() => import("./pages/OrganizationsPage.js").then((e) => ({ default: e.OrganizationsPage }))), y = s(() => import("./pages/OrganizationDetailPage.js").then((e) => ({ default: e.OrganizationDetailPage }))), b = s(() => import("./pages/CreateOrganizationPage.js").then((e) => ({ default: e.CreateOrganizationPage }))), x = s(() => import("./pages/OrganizationMembersPage.js").then((e) => ({ default: e.OrganizationMembersPage }))), S = s(() => import("./pages/RevenueDashboardPage.js").then((e) => ({ default: e.RevenueDashboardPage }))), C = s(() => import("./pages/ApplicationsPage.js").then((e) => ({ default: e.ApplicationsPage }))), w = s(() => import("./pages/ApplicationDetailPage.js").then((e) => ({ default: e.ApplicationDetailPage }))), T = s(() => import("./pages/CreateApplicationPage.js").then((e) => ({ default: e.CreateApplicationPage }))), E = s(() => import("./pages/EditApplicationPage.js").then((e) => ({ default: e.EditApplicationPage }))), D = s(() => import("./pages/ApplicationVersionsPage.js").then((e) => ({ default: e.ApplicationVersionsPage }))), O = s(() => import("./pages/OAuthCallbackPage.js").then((e) => ({ default: e.OAuthCallbackPage }))), k = s(() => import("./pages/OAuthClientsPage.js").then((e) => ({ default: e.OAuthClientsPage }))), A = s(() => import("./pages/CreateOAuthClientPage.js").then((e) => ({ default: e.CreateOAuthClientPage }))), j = s(() => import("./pages/OAuthClientDetailPage.js").then((e) => ({ default: e.OAuthClientDetailPage }))), M = s(() => import("./pages/ApiKeysPage.js").then((e) => ({ default: e.ApiKeysPage }))), N = s(() => import("./pages/CreateApiKeyPage.js").then((e) => ({ default: e.CreateApiKeyPage }))), P = s(() => import("./pages/WebhooksPage.js").then((e) => ({ default: e.WebhooksPage }))), F = s(() => import("./pages/CreateWebhookPage.js").then((e) => ({ default: e.CreateWebhookPage }))), I = s(() => import("./pages/WebhookDetailPage.js").then((e) => ({ default: e.WebhookDetailPage }))), L = s(() => import("./pages/AnalyticsDashboardPage.js").then((e) => ({ default: e.AnalyticsDashboardPage }))), te = s(() => import("./pages/DocumentationPage.js").then((e) => ({ default: e.DocumentationPage }))), R = s(() => import("./pages/ResourcesPage.js").then((e) => ({ default: e.ResourcesPage }))), z = s(() => import("./pages/SettingsPage.js").then((e) => ({ default: e.SettingsPage }))), B = s(() => import("./pages/NodeLifecyclePage.js").then((e) => ({ default: e.NodeLifecyclePage }))), V = s(() => import("./pages/PublishPage.js").then((e) => ({ default: e.PublishPage }))), H = s(() => import("./pages/AppLogsPage.js").then((e) => ({ default: e.AppLogsPage }))), U = s(() => import("./pages/DelegationsPage.js").then((e) => ({ default: e.DelegationsPage }))), W = s(() => import("./pages/ListingPreviewPage.js").then((e) => ({ default: e.ListingPreviewPage }))), G = s(() => import("./pages/StoreSubmissionPage.js").then((e) => ({ default: e.StoreSubmissionPage }))), K = s(() => import("./pages/PublisherProfilePage.js").then((e) => ({ default: e.PublisherProfilePage }))), q = s(() => import("./pages/SetupPage.js").then((e) => ({ default: e.SetupPage }))), J = s(() => import("./pages/InvitationDecisionPage.js").then((e) => ({ default: e.InvitationDecisionPage }))), Y = s(() => import("./pages/SellerDashboardPage.js").then((e) => ({ default: e.SellerDashboardPage }))), X = s(() => import("./pages/SellerItemsPage.js").then((e) => ({ default: e.SellerItemsPage }))), Z = s(() => import("./pages/CreatePhysicalItemPage.js").then((e) => ({ default: e.CreatePhysicalItemPage }))), Q = s(() => import("./pages/SellerOrdersPage.js").then((e) => ({ default: e.SellerOrdersPage }))), ne = s(() => import("./pages/EditPhysicalItemPage.js").then((e) => ({ default: e.EditPhysicalItemPage })));
30
30
  function re() {
31
31
  return /* @__PURE__ */ h(p, { children: [/* @__PURE__ */ m($, {}), /* @__PURE__ */ m(l, {})] });
32
32
  }
@@ -79,7 +79,7 @@ function se() {
79
79
  }),
80
80
  /* @__PURE__ */ m(u, {
81
81
  path: "apps/:appId/versions/:versionId/lifecycle",
82
- element: _("apps.node-lifecycle", /* @__PURE__ */ m(te, {}))
82
+ element: _("apps.node-lifecycle", /* @__PURE__ */ m(B, {}))
83
83
  }),
84
84
  /* @__PURE__ */ m(u, {
85
85
  path: "apps/:appId/publish",
@@ -214,9 +214,13 @@ function se() {
214
214
  path: "publisher/profile",
215
215
  element: _("publisher.profile", /* @__PURE__ */ m(K, {}))
216
216
  }),
217
+ /* @__PURE__ */ m(u, {
218
+ path: "profile",
219
+ element: _("publisher.profile", /* @__PURE__ */ m(K, {}))
220
+ }),
217
221
  /* @__PURE__ */ m(u, {
218
222
  path: "settings",
219
- element: _("settings", /* @__PURE__ */ m(B, {}))
223
+ element: _("settings", /* @__PURE__ */ m(z, {}))
220
224
  }),
221
225
  /* @__PURE__ */ m(u, {
222
226
  path: "*",
@@ -253,11 +257,11 @@ function se() {
253
257
  }),
254
258
  /* @__PURE__ */ m(u, {
255
259
  path: "docs",
256
- element: _("docs", /* @__PURE__ */ m(R, {}))
260
+ element: _("docs", /* @__PURE__ */ m(te, {}))
257
261
  }),
258
262
  /* @__PURE__ */ m(u, {
259
263
  path: "resources",
260
- element: _("resources", /* @__PURE__ */ m(z, {}))
264
+ element: _("resources", /* @__PURE__ */ m(R, {}))
261
265
  })
262
266
  ]
263
267
  })
@@ -1 +1 @@
1
- {"version":3,"file":"DevportalRoutes.js","names":[],"sources":["../../src/devportal/DevportalRoutes.tsx"],"sourcesContent":["import { Suspense, lazy, useEffect, type ReactNode } from \"react\";\nimport { Routes, Route, Navigate, Outlet, useLocation } from \"react-router\";\nimport { LoadingState } from \"./components/LoadingState\";\nimport { FeatureFlaggedRoute } from \"./components/FeatureFlaggedRoute\";\nimport { TelemetryErrorBoundary } from \"./components/TelemetryErrorBoundary\";\nimport { OrgSwitcher } from \"./components/SectionNav\";\nimport { useDevportal } from \"./providers/DevportalProvider\";\n\n/**\n * Catch-all redirect target for the unmatched `*` route. Uses the\n * DevportalProvider's `basePath` and `navigate` so the redirect works\n * regardless of the integration mode (shell or standalone). Falls back to a\n * relative Navigate when neither is wired, which is the standalone/test path.\n */\nfunction CatchAllRedirect() {\n const { basePath, navigate } = useDevportal();\n useEffect(() => {\n if (basePath && navigate) {\n const target = basePath.endsWith(\"/\") ? basePath.slice(0, -1) : basePath;\n navigate(target || \"/\");\n }\n }, [basePath, navigate]);\n if (basePath && navigate) return null;\n return <Navigate to=\"..\" replace />;\n}\n\n/**\n * Wrap a page element with the per-route feature flag gate and a\n * telemetry-emitting error boundary. The flag name follows\n * `devportal.<page-slug>` convention; when disabled the user sees a\n * graceful fallback instead of a route-level crash.\n *\n * Per `dev/platform/context/commercial/feature-flags` and spec\n * `microfrontends/47-FRONTEND-EVENT-BUS.md` (error.boundary emission).\n */\nfunction gated(slug: string, element: ReactNode): ReactNode {\n return (\n <TelemetryErrorBoundary scope={slug}>\n <FeatureFlaggedRoute flag={`devportal.${slug}`}>\n {element}\n </FeatureFlaggedRoute>\n </TelemetryErrorBoundary>\n );\n}\n\n// Eager load the main dashboard page\nimport { DashboardPage } from \"./pages/DashboardPage\";\n\n// Lazy load all other pages\nconst OrganizationsPage = lazy(() =>\n import(\"./pages/OrganizationsPage\").then((m) => ({\n default: m.OrganizationsPage,\n })),\n);\nconst OrganizationDetailPage = lazy(() =>\n import(\"./pages/OrganizationDetailPage\").then((m) => ({\n default: m.OrganizationDetailPage,\n })),\n);\nconst CreateOrganizationPage = lazy(() =>\n import(\"./pages/CreateOrganizationPage\").then((m) => ({\n default: m.CreateOrganizationPage,\n })),\n);\nconst OrganizationMembersPage = lazy(() =>\n import(\"./pages/OrganizationMembersPage\").then((m) => ({\n default: m.OrganizationMembersPage,\n })),\n);\nconst RevenueDashboardPage = lazy(() =>\n import(\"./pages/RevenueDashboardPage\").then((m) => ({\n default: m.RevenueDashboardPage,\n })),\n);\nconst ApplicationsPage = lazy(() =>\n import(\"./pages/ApplicationsPage\").then((m) => ({\n default: m.ApplicationsPage,\n })),\n);\nconst ApplicationDetailPage = lazy(() =>\n import(\"./pages/ApplicationDetailPage\").then((m) => ({\n default: m.ApplicationDetailPage,\n })),\n);\nconst CreateApplicationPage = lazy(() =>\n import(\"./pages/CreateApplicationPage\").then((m) => ({\n default: m.CreateApplicationPage,\n })),\n);\nconst EditApplicationPage = lazy(() =>\n import(\"./pages/EditApplicationPage\").then((m) => ({\n default: m.EditApplicationPage,\n })),\n);\nconst ApplicationVersionsPage = lazy(() =>\n import(\"./pages/ApplicationVersionsPage\").then((m) => ({\n default: m.ApplicationVersionsPage,\n })),\n);\nconst OAuthCallbackPage = lazy(() =>\n import(\"./pages/OAuthCallbackPage\").then((m) => ({\n default: m.OAuthCallbackPage,\n })),\n);\nconst OAuthClientsPage = lazy(() =>\n import(\"./pages/OAuthClientsPage\").then((m) => ({\n default: m.OAuthClientsPage,\n })),\n);\nconst CreateOAuthClientPage = lazy(() =>\n import(\"./pages/CreateOAuthClientPage\").then((m) => ({\n default: m.CreateOAuthClientPage,\n })),\n);\nconst OAuthClientDetailPage = lazy(() =>\n import(\"./pages/OAuthClientDetailPage\").then((m) => ({\n default: m.OAuthClientDetailPage,\n })),\n);\nconst ApiKeysPage = lazy(() =>\n import(\"./pages/ApiKeysPage\").then((m) => ({ default: m.ApiKeysPage })),\n);\nconst CreateApiKeyPage = lazy(() =>\n import(\"./pages/CreateApiKeyPage\").then((m) => ({\n default: m.CreateApiKeyPage,\n })),\n);\nconst WebhooksPage = lazy(() =>\n import(\"./pages/WebhooksPage\").then((m) => ({ default: m.WebhooksPage })),\n);\nconst CreateWebhookPage = lazy(() =>\n import(\"./pages/CreateWebhookPage\").then((m) => ({\n default: m.CreateWebhookPage,\n })),\n);\nconst WebhookDetailPage = lazy(() =>\n import(\"./pages/WebhookDetailPage\").then((m) => ({\n default: m.WebhookDetailPage,\n })),\n);\nconst AnalyticsDashboardPage = lazy(() =>\n import(\"./pages/AnalyticsDashboardPage\").then((m) => ({\n default: m.AnalyticsDashboardPage,\n })),\n);\nconst DocumentationPage = lazy(() =>\n import(\"./pages/DocumentationPage\").then((m) => ({\n default: m.DocumentationPage,\n })),\n);\nconst ResourcesPage = lazy(() =>\n import(\"./pages/ResourcesPage\").then((m) => ({ default: m.ResourcesPage })),\n);\nconst SettingsPage = lazy(() =>\n import(\"./pages/SettingsPage\").then((m) => ({ default: m.SettingsPage })),\n);\nconst NodeLifecyclePage = lazy(() =>\n import(\"./pages/NodeLifecyclePage\").then((m) => ({\n default: m.NodeLifecyclePage,\n })),\n);\nconst PublishPage = lazy(() =>\n import(\"./pages/PublishPage\").then((m) => ({ default: m.PublishPage })),\n);\nconst AppLogsPage = lazy(() =>\n import(\"./pages/AppLogsPage\").then((m) => ({ default: m.AppLogsPage })),\n);\nconst DelegationsPage = lazy(() =>\n import(\"./pages/DelegationsPage\").then((m) => ({\n default: m.DelegationsPage,\n })),\n);\nconst ListingPreviewPage = lazy(() =>\n import(\"./pages/ListingPreviewPage\").then((m) => ({\n default: m.ListingPreviewPage,\n })),\n);\nconst StoreSubmissionPage = lazy(() =>\n import(\"./pages/StoreSubmissionPage\").then((m) => ({\n default: m.StoreSubmissionPage,\n })),\n);\nconst PublisherProfilePage = lazy(() =>\n import(\"./pages/PublisherProfilePage\").then((m) => ({\n default: m.PublisherProfilePage,\n })),\n);\nconst SetupPage = lazy(() =>\n import(\"./pages/SetupPage\").then((m) => ({ default: m.SetupPage })),\n);\nconst InvitationDecisionPage = lazy(() =>\n import(\"./pages/InvitationDecisionPage\").then((m) => ({\n default: m.InvitationDecisionPage,\n })),\n);\nconst SellerDashboardPage = lazy(() =>\n import(\"./pages/SellerDashboardPage\").then((m) => ({\n default: m.SellerDashboardPage,\n })),\n);\nconst SellerItemsPage = lazy(() =>\n import(\"./pages/SellerItemsPage\").then((m) => ({\n default: m.SellerItemsPage,\n })),\n);\nconst CreatePhysicalItemPage = lazy(() =>\n import(\"./pages/CreatePhysicalItemPage\").then((m) => ({\n default: m.CreatePhysicalItemPage,\n })),\n);\nconst SellerOrdersPage = lazy(() =>\n import(\"./pages/SellerOrdersPage\").then((m) => ({\n default: m.SellerOrdersPage,\n })),\n);\nconst EditPhysicalItemPage = lazy(() =>\n import(\"./pages/EditPhysicalItemPage\").then((m) => ({\n default: m.EditPhysicalItemPage,\n })),\n);\n\n/** Layout for app-context routes (/apps/:appId/*) — adds the org context bar. */\nfunction AppLayout() {\n return (\n <>\n <OrgContextBar />\n <Outlet />\n </>\n );\n}\n\n/** Slim org-context bar shown above every devportal page. */\nfunction OrgContextBar() {\n return (\n <div className=\"flex items-center justify-end border-b border-border-subtle bg-bg-surface/40 px-4 py-2\">\n <OrgSwitcher />\n </div>\n );\n}\n\n/**\n * The org switcher only matters on pages that actually read the active-org\n * state it controls (dashboard, apps, webhooks, analytics, revenue, create\n * flows, etc). Pages that are already scoped by their own route param (an\n * org/item detail page) or that list every org regardless of which one is\n * \"active\" (the org list) don't use that state at all, so showing a\n * switcher there is just confusing. Matched by path suffix so it doesn't\n * care which basePath a given product shell mounts devportal under, and\n * works for both the digital (`organizations`) and seller\n * (`seller/organizations`) route families since they share the same pages.\n */\nfunction hideOrgSwitcher(pathname: string): boolean {\n const segments = pathname.split(\"/\").filter(Boolean);\n const last = segments[segments.length - 1];\n const secondLast = segments[segments.length - 2];\n const thirdLast = segments[segments.length - 3];\n\n // organizations | seller/organizations (list)\n if (last === \"organizations\") return true;\n // organizations/:id | seller/organizations/:id (detail) — not /new\n if (secondLast === \"organizations\" && last !== \"new\") return true;\n // seller/items/:id (item edit) — not /new\n if (thirdLast === \"seller\" && secondLast === \"items\" && last !== \"new\")\n return true;\n\n return false;\n}\n\n/** Layout wrapping org-context devportal routes — adds the org context bar,\n * except on routes that don't depend on the active-org it controls. */\nfunction GlobalLayout() {\n const { pathname } = useLocation();\n return (\n <>\n {!hideOrgSwitcher(pathname) && <OrgContextBar />}\n <Outlet />\n </>\n );\n}\n\n/** Layout for pages that are not org-scoped (OAuth, API Keys, Docs, Resources). */\nfunction PlainLayout() {\n return <Outlet />;\n}\n\nexport function DevportalRoutes() {\n return (\n <Suspense fallback={<LoadingState message=\"Loading page...\" />}>\n <Routes>\n {/* Setup wizard — no SectionNav */}\n <Route path=\"setup\" element={gated(\"setup\", <SetupPage />)} />\n <Route\n path=\"invitations/:token\"\n element={\n <TelemetryErrorBoundary scope=\"invitations.accept\">\n <InvitationDecisionPage />\n </TelemetryErrorBoundary>\n }\n />\n\n {/* App-context routes (/apps/:appId/*) — no SectionNav.\n The app-level tab bar inside ApplicationDetailPage is the nav here. */}\n <Route element={<AppLayout />}>\n <Route\n path=\"apps/:appId\"\n element={gated(\"apps.detail\", <ApplicationDetailPage />)}\n />\n <Route\n path=\"apps/:appId/edit\"\n element={gated(\"apps.edit\", <EditApplicationPage />)}\n />\n <Route\n path=\"apps/:appId/versions\"\n element={gated(\"apps.versions\", <ApplicationVersionsPage />)}\n />\n <Route\n path=\"apps/:appId/versions/:versionId/lifecycle\"\n element={gated(\"apps.node-lifecycle\", <NodeLifecyclePage />)}\n />\n <Route\n path=\"apps/:appId/publish\"\n element={gated(\"apps.publish\", <PublishPage />)}\n />\n <Route\n path=\"apps/:appId/store-submission\"\n element={gated(\"apps.storeSubmission\", <StoreSubmissionPage />)}\n />\n <Route\n path=\"apps/:appId/listing\"\n element={gated(\"apps.listing\", <ListingPreviewPage />)}\n />\n <Route\n path=\"apps/:appId/logs\"\n element={gated(\"apps.logs\", <AppLogsPage />)}\n />\n <Route\n path=\"apps/:appId/webhooks\"\n element={gated(\"apps.webhooks\", <WebhooksPage />)}\n />\n <Route\n path=\"apps/:appId/webhooks/new\"\n element={gated(\"apps.webhooks.create\", <CreateWebhookPage />)}\n />\n <Route\n path=\"apps/:appId/webhooks/:webhookId\"\n element={gated(\"apps.webhooks.detail\", <WebhookDetailPage />)}\n />\n <Route\n path=\"apps/:appId/analytics\"\n element={gated(\"apps.analytics\", <AnalyticsDashboardPage />)}\n />\n </Route>\n\n {/* All other routes — with SectionNav */}\n <Route element={<GlobalLayout />}>\n {/* Dashboard */}\n <Route index element={gated(\"dashboard\", <DashboardPage />)} />\n\n {/* Organizations */}\n <Route\n path=\"organizations\"\n element={gated(\"organizations\", <OrganizationsPage />)}\n />\n <Route\n path=\"organizations/new\"\n element={gated(\"organizations.create\", <CreateOrganizationPage />)}\n />\n <Route\n path=\"organizations/:orgId\"\n element={gated(\"organizations.detail\", <OrganizationDetailPage />)}\n />\n <Route\n path=\"organizations/:orgId/members\"\n element={gated(\n \"organizations.members\",\n <OrganizationMembersPage />,\n )}\n />\n <Route\n path=\"organizations/:orgId/revenue\"\n element={gated(\"organizations.revenue\", <RevenueDashboardPage />)}\n />\n\n {/* Applications list and create */}\n <Route path=\"apps\" element={gated(\"apps\", <ApplicationsPage />)} />\n <Route\n path=\"apps/new\"\n element={gated(\"apps.create\", <CreateApplicationPage />)}\n />\n\n {/* Seller routes */}\n <Route\n path=\"seller\"\n element={gated(\"seller.dashboard\", <SellerDashboardPage />)}\n />\n <Route\n path=\"seller/items\"\n element={gated(\"seller.items\", <SellerItemsPage />)}\n />\n <Route\n path=\"seller/items/new\"\n element={gated(\"seller.items.create\", <CreatePhysicalItemPage />)}\n />\n <Route\n path=\"seller/items/:itemId\"\n element={gated(\"seller.items.edit\", <EditPhysicalItemPage />)}\n />\n <Route\n path=\"seller/orders\"\n element={gated(\"seller.orders\", <SellerOrdersPage />)}\n />\n\n {/* Seller organizations — same pages as the regular \"Organizations\"\n routes above, reused as-is. They tell PHYSICAL from DIGITAL by\n route (useIsSellerSection), not by a separate component. See\n DeveloperOrgKind (BOFF-7285). */}\n <Route\n path=\"seller/organizations\"\n element={gated(\"seller.organizations\", <OrganizationsPage />)}\n />\n <Route\n path=\"seller/organizations/new\"\n element={gated(\n \"seller.organizations.create\",\n <CreateOrganizationPage />,\n )}\n />\n <Route\n path=\"seller/organizations/:orgId\"\n element={gated(\n \"seller.organizations.detail\",\n <OrganizationDetailPage />,\n )}\n />\n <Route\n path=\"seller/organizations/:orgId/members\"\n element={gated(\n \"seller.organizations.members\",\n <OrganizationMembersPage />,\n )}\n />\n <Route\n path=\"seller/organizations/:orgId/revenue\"\n element={gated(\n \"seller.organizations.revenue\",\n <RevenueDashboardPage />,\n )}\n />\n\n {/* Delegations */}\n <Route\n path=\"delegations\"\n element={gated(\"delegations\", <DelegationsPage />)}\n />\n\n {/* Global Webhooks */}\n <Route\n path=\"webhooks/new\"\n element={gated(\"webhooks.create\", <CreateWebhookPage />)}\n />\n <Route\n path=\"webhooks\"\n element={gated(\"webhooks\", <WebhooksPage />)}\n />\n\n {/* Analytics & Revenue */}\n <Route\n path=\"analytics\"\n element={gated(\"analytics\", <AnalyticsDashboardPage />)}\n />\n <Route\n path=\"revenue\"\n element={gated(\"revenue\", <RevenueDashboardPage />)}\n />\n\n {/* Publisher */}\n <Route\n path=\"publisher/profile\"\n element={gated(\"publisher.profile\", <PublisherProfilePage />)}\n />\n\n {/* Settings */}\n <Route\n path=\"settings\"\n element={gated(\"settings\", <SettingsPage />)}\n />\n\n {/* Catch-all redirect to dashboard */}\n <Route path=\"*\" element={<CatchAllRedirect />} />\n </Route>\n\n {/* Non-org-context routes — no OrgContextBar */}\n <Route element={<PlainLayout />}>\n {/* OAuth Clients */}\n <Route path=\"oauth\" element={gated(\"oauth\", <OAuthClientsPage />)} />\n <Route\n path=\"oauth/new\"\n element={gated(\"oauth.create\", <CreateOAuthClientPage />)}\n />\n <Route\n path=\"oauth/callback\"\n element={gated(\"oauth.callback\", <OAuthCallbackPage />)}\n />\n <Route\n path=\"oauth/:clientId\"\n element={gated(\"oauth.detail\", <OAuthClientDetailPage />)}\n />\n\n {/* API Keys */}\n <Route path=\"api-keys\" element={gated(\"apiKeys\", <ApiKeysPage />)} />\n <Route\n path=\"api-keys/new\"\n element={gated(\"apiKeys.create\", <CreateApiKeyPage />)}\n />\n\n {/* Documentation & Resources */}\n <Route path=\"docs\" element={gated(\"docs\", <DocumentationPage />)} />\n <Route\n path=\"resources\"\n element={gated(\"resources\", <ResourcesPage />)}\n />\n </Route>\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DevportalRoutes.js","names":[],"sources":["../../src/devportal/DevportalRoutes.tsx"],"sourcesContent":["import { Suspense, lazy, useEffect, type ReactNode } from \"react\";\nimport { Routes, Route, Navigate, Outlet, useLocation } from \"react-router\";\nimport { LoadingState } from \"./components/LoadingState\";\nimport { FeatureFlaggedRoute } from \"./components/FeatureFlaggedRoute\";\nimport { TelemetryErrorBoundary } from \"./components/TelemetryErrorBoundary\";\nimport { OrgSwitcher } from \"./components/SectionNav\";\nimport { useDevportal } from \"./providers/DevportalProvider\";\n\n/**\n * Catch-all redirect target for the unmatched `*` route. Uses the\n * DevportalProvider's `basePath` and `navigate` so the redirect works\n * regardless of the integration mode (shell or standalone). Falls back to a\n * relative Navigate when neither is wired, which is the standalone/test path.\n */\nfunction CatchAllRedirect() {\n const { basePath, navigate } = useDevportal();\n useEffect(() => {\n if (basePath && navigate) {\n const target = basePath.endsWith(\"/\") ? basePath.slice(0, -1) : basePath;\n navigate(target || \"/\");\n }\n }, [basePath, navigate]);\n if (basePath && navigate) return null;\n return <Navigate to=\"..\" replace />;\n}\n\n/**\n * Wrap a page element with the per-route feature flag gate and a\n * telemetry-emitting error boundary. The flag name follows\n * `devportal.<page-slug>` convention; when disabled the user sees a\n * graceful fallback instead of a route-level crash.\n *\n * Per `dev/platform/context/commercial/feature-flags` and spec\n * `microfrontends/47-FRONTEND-EVENT-BUS.md` (error.boundary emission).\n */\nfunction gated(slug: string, element: ReactNode): ReactNode {\n return (\n <TelemetryErrorBoundary scope={slug}>\n <FeatureFlaggedRoute flag={`devportal.${slug}`}>\n {element}\n </FeatureFlaggedRoute>\n </TelemetryErrorBoundary>\n );\n}\n\n// Eager load the main dashboard page\nimport { DashboardPage } from \"./pages/DashboardPage\";\n\n// Lazy load all other pages\nconst OrganizationsPage = lazy(() =>\n import(\"./pages/OrganizationsPage\").then((m) => ({\n default: m.OrganizationsPage,\n })),\n);\nconst OrganizationDetailPage = lazy(() =>\n import(\"./pages/OrganizationDetailPage\").then((m) => ({\n default: m.OrganizationDetailPage,\n })),\n);\nconst CreateOrganizationPage = lazy(() =>\n import(\"./pages/CreateOrganizationPage\").then((m) => ({\n default: m.CreateOrganizationPage,\n })),\n);\nconst OrganizationMembersPage = lazy(() =>\n import(\"./pages/OrganizationMembersPage\").then((m) => ({\n default: m.OrganizationMembersPage,\n })),\n);\nconst RevenueDashboardPage = lazy(() =>\n import(\"./pages/RevenueDashboardPage\").then((m) => ({\n default: m.RevenueDashboardPage,\n })),\n);\nconst ApplicationsPage = lazy(() =>\n import(\"./pages/ApplicationsPage\").then((m) => ({\n default: m.ApplicationsPage,\n })),\n);\nconst ApplicationDetailPage = lazy(() =>\n import(\"./pages/ApplicationDetailPage\").then((m) => ({\n default: m.ApplicationDetailPage,\n })),\n);\nconst CreateApplicationPage = lazy(() =>\n import(\"./pages/CreateApplicationPage\").then((m) => ({\n default: m.CreateApplicationPage,\n })),\n);\nconst EditApplicationPage = lazy(() =>\n import(\"./pages/EditApplicationPage\").then((m) => ({\n default: m.EditApplicationPage,\n })),\n);\nconst ApplicationVersionsPage = lazy(() =>\n import(\"./pages/ApplicationVersionsPage\").then((m) => ({\n default: m.ApplicationVersionsPage,\n })),\n);\nconst OAuthCallbackPage = lazy(() =>\n import(\"./pages/OAuthCallbackPage\").then((m) => ({\n default: m.OAuthCallbackPage,\n })),\n);\nconst OAuthClientsPage = lazy(() =>\n import(\"./pages/OAuthClientsPage\").then((m) => ({\n default: m.OAuthClientsPage,\n })),\n);\nconst CreateOAuthClientPage = lazy(() =>\n import(\"./pages/CreateOAuthClientPage\").then((m) => ({\n default: m.CreateOAuthClientPage,\n })),\n);\nconst OAuthClientDetailPage = lazy(() =>\n import(\"./pages/OAuthClientDetailPage\").then((m) => ({\n default: m.OAuthClientDetailPage,\n })),\n);\nconst ApiKeysPage = lazy(() =>\n import(\"./pages/ApiKeysPage\").then((m) => ({ default: m.ApiKeysPage })),\n);\nconst CreateApiKeyPage = lazy(() =>\n import(\"./pages/CreateApiKeyPage\").then((m) => ({\n default: m.CreateApiKeyPage,\n })),\n);\nconst WebhooksPage = lazy(() =>\n import(\"./pages/WebhooksPage\").then((m) => ({ default: m.WebhooksPage })),\n);\nconst CreateWebhookPage = lazy(() =>\n import(\"./pages/CreateWebhookPage\").then((m) => ({\n default: m.CreateWebhookPage,\n })),\n);\nconst WebhookDetailPage = lazy(() =>\n import(\"./pages/WebhookDetailPage\").then((m) => ({\n default: m.WebhookDetailPage,\n })),\n);\nconst AnalyticsDashboardPage = lazy(() =>\n import(\"./pages/AnalyticsDashboardPage\").then((m) => ({\n default: m.AnalyticsDashboardPage,\n })),\n);\nconst DocumentationPage = lazy(() =>\n import(\"./pages/DocumentationPage\").then((m) => ({\n default: m.DocumentationPage,\n })),\n);\nconst ResourcesPage = lazy(() =>\n import(\"./pages/ResourcesPage\").then((m) => ({ default: m.ResourcesPage })),\n);\nconst SettingsPage = lazy(() =>\n import(\"./pages/SettingsPage\").then((m) => ({ default: m.SettingsPage })),\n);\nconst NodeLifecyclePage = lazy(() =>\n import(\"./pages/NodeLifecyclePage\").then((m) => ({\n default: m.NodeLifecyclePage,\n })),\n);\nconst PublishPage = lazy(() =>\n import(\"./pages/PublishPage\").then((m) => ({ default: m.PublishPage })),\n);\nconst AppLogsPage = lazy(() =>\n import(\"./pages/AppLogsPage\").then((m) => ({ default: m.AppLogsPage })),\n);\nconst DelegationsPage = lazy(() =>\n import(\"./pages/DelegationsPage\").then((m) => ({\n default: m.DelegationsPage,\n })),\n);\nconst ListingPreviewPage = lazy(() =>\n import(\"./pages/ListingPreviewPage\").then((m) => ({\n default: m.ListingPreviewPage,\n })),\n);\nconst StoreSubmissionPage = lazy(() =>\n import(\"./pages/StoreSubmissionPage\").then((m) => ({\n default: m.StoreSubmissionPage,\n })),\n);\nconst PublisherProfilePage = lazy(() =>\n import(\"./pages/PublisherProfilePage\").then((m) => ({\n default: m.PublisherProfilePage,\n })),\n);\nconst SetupPage = lazy(() =>\n import(\"./pages/SetupPage\").then((m) => ({ default: m.SetupPage })),\n);\nconst InvitationDecisionPage = lazy(() =>\n import(\"./pages/InvitationDecisionPage\").then((m) => ({\n default: m.InvitationDecisionPage,\n })),\n);\nconst SellerDashboardPage = lazy(() =>\n import(\"./pages/SellerDashboardPage\").then((m) => ({\n default: m.SellerDashboardPage,\n })),\n);\nconst SellerItemsPage = lazy(() =>\n import(\"./pages/SellerItemsPage\").then((m) => ({\n default: m.SellerItemsPage,\n })),\n);\nconst CreatePhysicalItemPage = lazy(() =>\n import(\"./pages/CreatePhysicalItemPage\").then((m) => ({\n default: m.CreatePhysicalItemPage,\n })),\n);\nconst SellerOrdersPage = lazy(() =>\n import(\"./pages/SellerOrdersPage\").then((m) => ({\n default: m.SellerOrdersPage,\n })),\n);\nconst EditPhysicalItemPage = lazy(() =>\n import(\"./pages/EditPhysicalItemPage\").then((m) => ({\n default: m.EditPhysicalItemPage,\n })),\n);\n\n/** Layout for app-context routes (/apps/:appId/*) — adds the org context bar. */\nfunction AppLayout() {\n return (\n <>\n <OrgContextBar />\n <Outlet />\n </>\n );\n}\n\n/** Slim org-context bar shown above every devportal page. */\nfunction OrgContextBar() {\n return (\n <div className=\"flex items-center justify-end border-b border-border-subtle bg-bg-surface/40 px-4 py-2\">\n <OrgSwitcher />\n </div>\n );\n}\n\n/**\n * The org switcher only matters on pages that actually read the active-org\n * state it controls (dashboard, apps, webhooks, analytics, revenue, create\n * flows, etc). Pages that are already scoped by their own route param (an\n * org/item detail page) or that list every org regardless of which one is\n * \"active\" (the org list) don't use that state at all, so showing a\n * switcher there is just confusing. Matched by path suffix so it doesn't\n * care which basePath a given product shell mounts devportal under, and\n * works for both the digital (`organizations`) and seller\n * (`seller/organizations`) route families since they share the same pages.\n */\nfunction hideOrgSwitcher(pathname: string): boolean {\n const segments = pathname.split(\"/\").filter(Boolean);\n const last = segments[segments.length - 1];\n const secondLast = segments[segments.length - 2];\n const thirdLast = segments[segments.length - 3];\n\n // organizations | seller/organizations (list)\n if (last === \"organizations\") return true;\n // organizations/:id | seller/organizations/:id (detail) — not /new\n if (secondLast === \"organizations\" && last !== \"new\") return true;\n // seller/items/:id (item edit) — not /new\n if (thirdLast === \"seller\" && secondLast === \"items\" && last !== \"new\")\n return true;\n\n return false;\n}\n\n/** Layout wrapping org-context devportal routes — adds the org context bar,\n * except on routes that don't depend on the active-org it controls. */\nfunction GlobalLayout() {\n const { pathname } = useLocation();\n return (\n <>\n {!hideOrgSwitcher(pathname) && <OrgContextBar />}\n <Outlet />\n </>\n );\n}\n\n/** Layout for pages that are not org-scoped (OAuth, API Keys, Docs, Resources). */\nfunction PlainLayout() {\n return <Outlet />;\n}\n\nexport function DevportalRoutes() {\n return (\n <Suspense fallback={<LoadingState message=\"Loading page...\" />}>\n <Routes>\n {/* Setup wizard — no SectionNav */}\n <Route path=\"setup\" element={gated(\"setup\", <SetupPage />)} />\n <Route\n path=\"invitations/:token\"\n element={\n <TelemetryErrorBoundary scope=\"invitations.accept\">\n <InvitationDecisionPage />\n </TelemetryErrorBoundary>\n }\n />\n\n {/* App-context routes (/apps/:appId/*) — no SectionNav.\n The app-level tab bar inside ApplicationDetailPage is the nav here. */}\n <Route element={<AppLayout />}>\n <Route\n path=\"apps/:appId\"\n element={gated(\"apps.detail\", <ApplicationDetailPage />)}\n />\n <Route\n path=\"apps/:appId/edit\"\n element={gated(\"apps.edit\", <EditApplicationPage />)}\n />\n <Route\n path=\"apps/:appId/versions\"\n element={gated(\"apps.versions\", <ApplicationVersionsPage />)}\n />\n <Route\n path=\"apps/:appId/versions/:versionId/lifecycle\"\n element={gated(\"apps.node-lifecycle\", <NodeLifecyclePage />)}\n />\n <Route\n path=\"apps/:appId/publish\"\n element={gated(\"apps.publish\", <PublishPage />)}\n />\n <Route\n path=\"apps/:appId/store-submission\"\n element={gated(\"apps.storeSubmission\", <StoreSubmissionPage />)}\n />\n <Route\n path=\"apps/:appId/listing\"\n element={gated(\"apps.listing\", <ListingPreviewPage />)}\n />\n <Route\n path=\"apps/:appId/logs\"\n element={gated(\"apps.logs\", <AppLogsPage />)}\n />\n <Route\n path=\"apps/:appId/webhooks\"\n element={gated(\"apps.webhooks\", <WebhooksPage />)}\n />\n <Route\n path=\"apps/:appId/webhooks/new\"\n element={gated(\"apps.webhooks.create\", <CreateWebhookPage />)}\n />\n <Route\n path=\"apps/:appId/webhooks/:webhookId\"\n element={gated(\"apps.webhooks.detail\", <WebhookDetailPage />)}\n />\n <Route\n path=\"apps/:appId/analytics\"\n element={gated(\"apps.analytics\", <AnalyticsDashboardPage />)}\n />\n </Route>\n\n {/* All other routes — with SectionNav */}\n <Route element={<GlobalLayout />}>\n {/* Dashboard */}\n <Route index element={gated(\"dashboard\", <DashboardPage />)} />\n\n {/* Organizations */}\n <Route\n path=\"organizations\"\n element={gated(\"organizations\", <OrganizationsPage />)}\n />\n <Route\n path=\"organizations/new\"\n element={gated(\"organizations.create\", <CreateOrganizationPage />)}\n />\n <Route\n path=\"organizations/:orgId\"\n element={gated(\"organizations.detail\", <OrganizationDetailPage />)}\n />\n <Route\n path=\"organizations/:orgId/members\"\n element={gated(\n \"organizations.members\",\n <OrganizationMembersPage />,\n )}\n />\n <Route\n path=\"organizations/:orgId/revenue\"\n element={gated(\"organizations.revenue\", <RevenueDashboardPage />)}\n />\n\n {/* Applications list and create */}\n <Route path=\"apps\" element={gated(\"apps\", <ApplicationsPage />)} />\n <Route\n path=\"apps/new\"\n element={gated(\"apps.create\", <CreateApplicationPage />)}\n />\n\n {/* Seller routes */}\n <Route\n path=\"seller\"\n element={gated(\"seller.dashboard\", <SellerDashboardPage />)}\n />\n <Route\n path=\"seller/items\"\n element={gated(\"seller.items\", <SellerItemsPage />)}\n />\n <Route\n path=\"seller/items/new\"\n element={gated(\"seller.items.create\", <CreatePhysicalItemPage />)}\n />\n <Route\n path=\"seller/items/:itemId\"\n element={gated(\"seller.items.edit\", <EditPhysicalItemPage />)}\n />\n <Route\n path=\"seller/orders\"\n element={gated(\"seller.orders\", <SellerOrdersPage />)}\n />\n\n {/* Seller organizations — same pages as the regular \"Organizations\"\n routes above, reused as-is. They tell PHYSICAL from DIGITAL by\n route (useIsSellerSection), not by a separate component. See\n DeveloperOrgKind (BOFF-7285). */}\n <Route\n path=\"seller/organizations\"\n element={gated(\"seller.organizations\", <OrganizationsPage />)}\n />\n <Route\n path=\"seller/organizations/new\"\n element={gated(\n \"seller.organizations.create\",\n <CreateOrganizationPage />,\n )}\n />\n <Route\n path=\"seller/organizations/:orgId\"\n element={gated(\n \"seller.organizations.detail\",\n <OrganizationDetailPage />,\n )}\n />\n <Route\n path=\"seller/organizations/:orgId/members\"\n element={gated(\n \"seller.organizations.members\",\n <OrganizationMembersPage />,\n )}\n />\n <Route\n path=\"seller/organizations/:orgId/revenue\"\n element={gated(\n \"seller.organizations.revenue\",\n <RevenueDashboardPage />,\n )}\n />\n\n {/* Delegations */}\n <Route\n path=\"delegations\"\n element={gated(\"delegations\", <DelegationsPage />)}\n />\n\n {/* Global Webhooks */}\n <Route\n path=\"webhooks/new\"\n element={gated(\"webhooks.create\", <CreateWebhookPage />)}\n />\n <Route\n path=\"webhooks\"\n element={gated(\"webhooks\", <WebhooksPage />)}\n />\n\n {/* Analytics & Revenue */}\n <Route\n path=\"analytics\"\n element={gated(\"analytics\", <AnalyticsDashboardPage />)}\n />\n <Route\n path=\"revenue\"\n element={gated(\"revenue\", <RevenueDashboardPage />)}\n />\n\n {/* Publisher */}\n <Route\n path=\"publisher/profile\"\n element={gated(\"publisher.profile\", <PublisherProfilePage />)}\n />\n {/* Shell nav entries and the onboarding checklist link to\n /profile; without this route the catch-all bounced them to the\n dashboard (BOFF-10636). Same page and flag as above. */}\n <Route\n path=\"profile\"\n element={gated(\"publisher.profile\", <PublisherProfilePage />)}\n />\n\n {/* Settings */}\n <Route\n path=\"settings\"\n element={gated(\"settings\", <SettingsPage />)}\n />\n\n {/* Catch-all redirect to dashboard */}\n <Route path=\"*\" element={<CatchAllRedirect />} />\n </Route>\n\n {/* Non-org-context routes — no OrgContextBar */}\n <Route element={<PlainLayout />}>\n {/* OAuth Clients */}\n <Route path=\"oauth\" element={gated(\"oauth\", <OAuthClientsPage />)} />\n <Route\n path=\"oauth/new\"\n element={gated(\"oauth.create\", <CreateOAuthClientPage />)}\n />\n <Route\n path=\"oauth/callback\"\n element={gated(\"oauth.callback\", <OAuthCallbackPage />)}\n />\n <Route\n path=\"oauth/:clientId\"\n element={gated(\"oauth.detail\", <OAuthClientDetailPage />)}\n />\n\n {/* API Keys */}\n <Route path=\"api-keys\" element={gated(\"apiKeys\", <ApiKeysPage />)} />\n <Route\n path=\"api-keys/new\"\n element={gated(\"apiKeys.create\", <CreateApiKeyPage />)}\n />\n\n {/* Documentation & Resources */}\n <Route path=\"docs\" element={gated(\"docs\", <DocumentationPage />)} />\n <Route\n path=\"resources\"\n element={gated(\"resources\", <ResourcesPage />)}\n />\n </Route>\n </Routes>\n </Suspense>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { FC } from 'react';
2
+
3
+ export interface OnboardingChecklistProps {
4
+ /** Navigate to a devportal-relative path (the caller adds basePath). */
5
+ onNavigate: (path: string) => void;
6
+ }
7
+ /**
8
+ * "Get started as a developer" checklist on the devportal dashboard
9
+ * (BOFF-10636). Shows the four steps of the public registration journey
10
+ * with their live state, links each open step to the page that completes
11
+ * it, and points at the connector publishing guide and the SDK/CLI docs.
12
+ * Renders nothing once every step is done, or while the status loads, so it
13
+ * never flashes for an established developer.
14
+ */
15
+ export declare const OnboardingChecklist: FC<OnboardingChecklistProps>;
16
+ //# sourceMappingURL=OnboardingChecklist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnboardingChecklist.d.ts","sourceRoot":"","sources":["../../../src/devportal/components/OnboardingChecklist.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAsFhC,MAAM,WAAW,wBAAwB;IACvC,wEAAwE;IACxE,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,EAAE,CAAC,wBAAwB,CAkI5D,CAAC"}
@@ -0,0 +1,151 @@
1
+ import { useTr as e } from "../utils/i18n.js";
2
+ import { cn as t } from "../utils/cn.js";
3
+ import { useGetDeveloperOnboardingStatusQuery as n } from "../../generated/global-operations.js";
4
+ import { computeOnboardingState as r } from "../utils/developerOnboarding.js";
5
+ import { DEVELOPER_LINKS as i } from "../constants/developerLinks.js";
6
+ import { BookOpen as a, Check as o, ChevronRight as s, Code2 as c, Plug as l, Terminal as u } from "lucide-react";
7
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
8
+ //#region src/devportal/components/OnboardingChecklist.tsx
9
+ var p = {
10
+ profile: {
11
+ key: "devportal.onboarding.steps.profile",
12
+ title: "Create your developer profile",
13
+ descKey: "devportal.onboarding.steps.profileDesc",
14
+ desc: "Tell customers who builds your apps: company, website and links."
15
+ },
16
+ organization: {
17
+ key: "devportal.onboarding.steps.organization",
18
+ title: "Create a developer organization",
19
+ descKey: "devportal.onboarding.steps.organizationDesc",
20
+ desc: "The publisher identity that owns your apps and your team."
21
+ },
22
+ app: {
23
+ key: "devportal.onboarding.steps.app",
24
+ title: "Register your first app",
25
+ descKey: "devportal.onboarding.steps.appDesc",
26
+ desc: "An API integration, workflow node or workflow template."
27
+ },
28
+ submit: {
29
+ key: "devportal.onboarding.steps.submit",
30
+ title: "Submit it for review",
31
+ descKey: "devportal.onboarding.steps.submitDesc",
32
+ desc: "Reviewers check every submission before it is listed."
33
+ }
34
+ }, m = [
35
+ {
36
+ id: "publishConnector",
37
+ key: "devportal.onboarding.links.publishConnector",
38
+ label: "Publish a connector",
39
+ url: i.publishConnector,
40
+ icon: l
41
+ },
42
+ {
43
+ id: "nodeSdk",
44
+ key: "devportal.onboarding.links.nodeSdk",
45
+ label: "Node.js SDK",
46
+ url: i.nodeSdk,
47
+ icon: c
48
+ },
49
+ {
50
+ id: "cli",
51
+ key: "devportal.onboarding.links.cli",
52
+ label: "CLI reference",
53
+ url: i.cliReference,
54
+ icon: u
55
+ },
56
+ {
57
+ id: "guide",
58
+ key: "devportal.onboarding.links.guide",
59
+ label: "Registration guide",
60
+ url: i.registrationGuide,
61
+ icon: a
62
+ }
63
+ ], h = ({ onNavigate: i }) => {
64
+ let a = e(), { data: c, loading: l, error: u } = n({ fetchPolicy: "no-cache" });
65
+ if (l && !c || u && !c) return null;
66
+ let h = c, g = h?.applications?.edges?.map((e) => e.node) ?? [], _ = r({
67
+ hasProfile: !!h?.myDeveloperProfile?.id,
68
+ organizationKinds: (h?.myDeveloperOrganizations ?? []).map((e) => e.kind),
69
+ applications: g,
70
+ totalApplications: h?.applications?.totalCount ?? 0
71
+ });
72
+ return _.isComplete ? null : /* @__PURE__ */ f("section", {
73
+ "aria-labelledby": "devportal-onboarding-title",
74
+ "data-testid": "devportal-onboarding-checklist",
75
+ className: "rounded-card border border-border-seam bg-bg-surface p-5",
76
+ children: [
77
+ /* @__PURE__ */ f("div", {
78
+ className: "flex flex-wrap items-baseline justify-between gap-2",
79
+ children: [/* @__PURE__ */ d("h2", {
80
+ id: "devportal-onboarding-title",
81
+ className: "text-base font-semibold text-text-primary",
82
+ children: a("devportal.onboarding.title", "Get started as a developer")
83
+ }), /* @__PURE__ */ d("p", {
84
+ className: "text-sm text-text-secondary",
85
+ children: a("devportal.onboarding.progress", "{{done}} of {{total}} done", {
86
+ done: _.completedCount,
87
+ total: _.steps.length
88
+ })
89
+ })]
90
+ }),
91
+ /* @__PURE__ */ d("ol", {
92
+ className: "mt-4 flex flex-col gap-2",
93
+ children: _.steps.map((e, n) => {
94
+ let r = p[e.id], c = _.nextStep?.id === e.id;
95
+ return /* @__PURE__ */ d("li", { children: /* @__PURE__ */ f("button", {
96
+ type: "button",
97
+ "data-testid": `devportal-onboarding-step-${e.id}`,
98
+ "data-done": e.done ? "true" : "false",
99
+ onClick: () => i(e.path),
100
+ className: t("flex w-full items-center gap-3 rounded-lg border px-4 py-3 text-left transition-colors", c ? "border-primary bg-action-primary-bg/5 hover:bg-action-primary-bg/10" : "border-border-subtle hover:bg-bg-muted"),
101
+ children: [
102
+ /* @__PURE__ */ d("span", {
103
+ className: t("flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold", e.done ? "bg-status-success-bg-subtle text-status-success-text" : "bg-bg-sunken text-text-secondary"),
104
+ "aria-hidden": "true",
105
+ children: e.done ? /* @__PURE__ */ d(o, { size: 14 }) : n + 1
106
+ }),
107
+ /* @__PURE__ */ f("span", {
108
+ className: "min-w-0 flex-1",
109
+ children: [/* @__PURE__ */ f("span", {
110
+ className: t("block text-sm font-medium", e.done ? "text-text-secondary line-through" : "text-text-primary"),
111
+ children: [a(r.key, r.title), /* @__PURE__ */ d("span", {
112
+ className: "sr-only",
113
+ children: e.done ? ` (${a("devportal.onboarding.done", "done")})` : ` (${a("devportal.onboarding.todo", "to do")})`
114
+ })]
115
+ }), /* @__PURE__ */ d("span", {
116
+ className: "block text-xs text-text-secondary",
117
+ children: a(r.descKey, r.desc)
118
+ })]
119
+ }),
120
+ /* @__PURE__ */ d(s, {
121
+ size: 16,
122
+ className: "shrink-0 text-text-muted",
123
+ "aria-hidden": "true"
124
+ })
125
+ ]
126
+ }) }, e.id);
127
+ })
128
+ }),
129
+ /* @__PURE__ */ d("div", {
130
+ className: "mt-4 flex flex-wrap gap-x-5 gap-y-2 border-t border-border-seam pt-4",
131
+ children: m.map((e) => {
132
+ let t = e.icon;
133
+ return /* @__PURE__ */ f("a", {
134
+ href: e.url,
135
+ target: "_blank",
136
+ rel: "noopener noreferrer",
137
+ className: "inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline",
138
+ children: [/* @__PURE__ */ d(t, {
139
+ size: 14,
140
+ "aria-hidden": "true"
141
+ }), a(e.key, e.label)]
142
+ }, e.id);
143
+ })
144
+ })
145
+ ]
146
+ });
147
+ };
148
+ //#endregion
149
+ export { h as OnboardingChecklist };
150
+
151
+ //# sourceMappingURL=OnboardingChecklist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OnboardingChecklist.js","names":[],"sources":["../../../src/devportal/components/OnboardingChecklist.tsx"],"sourcesContent":["import type { FC } from \"react\";\nimport {\n BookOpen,\n Check,\n ChevronRight,\n Plug,\n Terminal,\n Code2,\n} from \"lucide-react\";\nimport { useTr } from \"../utils/i18n\";\nimport { cn } from \"../utils/cn\";\nimport {\n computeOnboardingState,\n type OnboardingStepId,\n} from \"../utils/developerOnboarding\";\nimport { DEVELOPER_LINKS } from \"../constants/developerLinks\";\nimport {\n useGetDeveloperOnboardingStatusQuery,\n type GetDeveloperOnboardingStatusQuery,\n} from \"../../generated/global-operations\";\n\ntype OnboardingStatus = GetDeveloperOnboardingStatusQuery;\ntype OnboardingApp = OnboardingStatus[\"applications\"][\"edges\"][number][\"node\"];\ntype OnboardingOrg = OnboardingStatus[\"myDeveloperOrganizations\"][number];\n\nconst STEP_COPY: Record<\n OnboardingStepId,\n { key: string; title: string; descKey: string; desc: string }\n> = {\n profile: {\n key: \"devportal.onboarding.steps.profile\",\n title: \"Create your developer profile\",\n descKey: \"devportal.onboarding.steps.profileDesc\",\n desc: \"Tell customers who builds your apps: company, website and links.\",\n },\n organization: {\n key: \"devportal.onboarding.steps.organization\",\n title: \"Create a developer organization\",\n descKey: \"devportal.onboarding.steps.organizationDesc\",\n desc: \"The publisher identity that owns your apps and your team.\",\n },\n app: {\n key: \"devportal.onboarding.steps.app\",\n title: \"Register your first app\",\n descKey: \"devportal.onboarding.steps.appDesc\",\n desc: \"An API integration, workflow node or workflow template.\",\n },\n submit: {\n key: \"devportal.onboarding.steps.submit\",\n title: \"Submit it for review\",\n descKey: \"devportal.onboarding.steps.submitDesc\",\n desc: \"Reviewers check every submission before it is listed.\",\n },\n};\n\nconst RESOURCE_LINKS = [\n {\n id: \"publishConnector\",\n key: \"devportal.onboarding.links.publishConnector\",\n label: \"Publish a connector\",\n url: DEVELOPER_LINKS.publishConnector,\n icon: Plug,\n },\n {\n id: \"nodeSdk\",\n key: \"devportal.onboarding.links.nodeSdk\",\n label: \"Node.js SDK\",\n url: DEVELOPER_LINKS.nodeSdk,\n icon: Code2,\n },\n {\n id: \"cli\",\n key: \"devportal.onboarding.links.cli\",\n label: \"CLI reference\",\n url: DEVELOPER_LINKS.cliReference,\n icon: Terminal,\n },\n {\n id: \"guide\",\n key: \"devportal.onboarding.links.guide\",\n label: \"Registration guide\",\n url: DEVELOPER_LINKS.registrationGuide,\n icon: BookOpen,\n },\n] as const;\n\nexport interface OnboardingChecklistProps {\n /** Navigate to a devportal-relative path (the caller adds basePath). */\n onNavigate: (path: string) => void;\n}\n\n/**\n * \"Get started as a developer\" checklist on the devportal dashboard\n * (BOFF-10636). Shows the four steps of the public registration journey\n * with their live state, links each open step to the page that completes\n * it, and points at the connector publishing guide and the SDK/CLI docs.\n * Renders nothing once every step is done, or while the status loads, so it\n * never flashes for an established developer.\n */\nexport const OnboardingChecklist: FC<OnboardingChecklistProps> = ({\n onNavigate,\n}) => {\n const tr = useTr();\n // no-cache: the dashboard's own `applications(limit: 5)` query shares the\n // paginated cache entry, and a later five-app page replacing this 100-app\n // one would make the checklist read a truncated list as \"submitted\".\n const { data, loading, error } = useGetDeveloperOnboardingStatusQuery({\n fetchPolicy: \"no-cache\",\n });\n\n if (loading && !data) return null;\n if (error && !data) return null;\n\n const status: OnboardingStatus | undefined = data;\n const applications: OnboardingApp[] =\n status?.applications?.edges?.map(\n (edge: { node: OnboardingApp }) => edge.node,\n ) ?? [];\n const state = computeOnboardingState({\n hasProfile: !!status?.myDeveloperProfile?.id,\n organizationKinds: (status?.myDeveloperOrganizations ?? []).map(\n (org: OnboardingOrg) => org.kind,\n ),\n applications,\n totalApplications: status?.applications?.totalCount ?? 0,\n });\n\n if (state.isComplete) return null;\n\n return (\n <section\n aria-labelledby=\"devportal-onboarding-title\"\n data-testid=\"devportal-onboarding-checklist\"\n className=\"rounded-card border border-border-seam bg-bg-surface p-5\"\n >\n <div className=\"flex flex-wrap items-baseline justify-between gap-2\">\n <h2\n id=\"devportal-onboarding-title\"\n className=\"text-base font-semibold text-text-primary\"\n >\n {tr(\"devportal.onboarding.title\", \"Get started as a developer\")}\n </h2>\n <p className=\"text-sm text-text-secondary\">\n {tr(\"devportal.onboarding.progress\", \"{{done}} of {{total}} done\", {\n done: state.completedCount,\n total: state.steps.length,\n })}\n </p>\n </div>\n\n <ol className=\"mt-4 flex flex-col gap-2\">\n {state.steps.map((step, index) => {\n const copy = STEP_COPY[step.id];\n const isNext = state.nextStep?.id === step.id;\n return (\n <li key={step.id}>\n <button\n type=\"button\"\n data-testid={`devportal-onboarding-step-${step.id}`}\n data-done={step.done ? \"true\" : \"false\"}\n onClick={() => onNavigate(step.path)}\n className={cn(\n \"flex w-full items-center gap-3 rounded-lg border px-4 py-3 text-left transition-colors\",\n isNext\n ? \"border-primary bg-action-primary-bg/5 hover:bg-action-primary-bg/10\"\n : \"border-border-subtle hover:bg-bg-muted\",\n )}\n >\n <span\n className={cn(\n \"flex h-7 w-7 shrink-0 items-center justify-center rounded-full text-xs font-semibold\",\n step.done\n ? \"bg-status-success-bg-subtle text-status-success-text\"\n : \"bg-bg-sunken text-text-secondary\",\n )}\n aria-hidden=\"true\"\n >\n {step.done ? <Check size={14} /> : index + 1}\n </span>\n <span className=\"min-w-0 flex-1\">\n <span\n className={cn(\n \"block text-sm font-medium\",\n step.done\n ? \"text-text-secondary line-through\"\n : \"text-text-primary\",\n )}\n >\n {tr(copy.key, copy.title)}\n <span className=\"sr-only\">\n {step.done\n ? ` (${tr(\"devportal.onboarding.done\", \"done\")})`\n : ` (${tr(\"devportal.onboarding.todo\", \"to do\")})`}\n </span>\n </span>\n <span className=\"block text-xs text-text-secondary\">\n {tr(copy.descKey, copy.desc)}\n </span>\n </span>\n <ChevronRight\n size={16}\n className=\"shrink-0 text-text-muted\"\n aria-hidden=\"true\"\n />\n </button>\n </li>\n );\n })}\n </ol>\n\n <div className=\"mt-4 flex flex-wrap gap-x-5 gap-y-2 border-t border-border-seam pt-4\">\n {RESOURCE_LINKS.map((link) => {\n const Icon = link.icon;\n return (\n <a\n key={link.id}\n href={link.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1.5 text-sm font-medium text-primary hover:underline\"\n >\n <Icon size={14} aria-hidden=\"true\" />\n {tr(link.key, link.label)}\n </a>\n );\n })}\n </div>\n </section>\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Public URLs the developer portal links to.
3
+ *
4
+ * Every URL here was checked to return HTTP 200 when it was added
5
+ * (BOFF-10636). Pages that do not exist on the public docs site are
6
+ * deliberately absent: a link that 404s is worse than no link. When a new
7
+ * docs page ships, add it here and reference the constant instead of
8
+ * hard-coding the URL in a page.
9
+ */
10
+ export declare const DOCS_SITE = "https://docs.burdenoff.com";
11
+ export declare const DEVELOPER_DOCS = "https://docs.burdenoff.com/developers";
12
+ export declare const MARKETING_SITE = "https://burdenoff.com";
13
+ export declare const DEVELOPER_LINKS: {
14
+ /** Developer docs landing page. */
15
+ readonly docsHome: "https://docs.burdenoff.com/developers";
16
+ /** The public "Build on Workspaces" entry point on the marketing site. */
17
+ readonly buildOnWorkspaces: "https://burdenoff.com/developers";
18
+ /** Step-by-step registration guide for external developers. */
19
+ readonly registrationGuide: "https://docs.burdenoff.com/developers/build/register-as-a-developer";
20
+ readonly quickStart: "https://docs.burdenoff.com/developers/quick-start";
21
+ readonly platformOverview: "https://docs.burdenoff.com/developers/platform-overview";
22
+ readonly authentication: "https://docs.burdenoff.com/developers/authentication";
23
+ readonly graphqlApi: "https://docs.burdenoff.com/developers/build/graphql-api";
24
+ readonly webhooks: "https://docs.burdenoff.com/developers/build/webhooks";
25
+ readonly plugins: "https://docs.burdenoff.com/developers/build/plugins";
26
+ readonly integrationsOverview: "https://docs.burdenoff.com/developers/build/integrations/overview";
27
+ readonly publishConnector: "https://docs.burdenoff.com/developers/build/integrations/publish-a-connector";
28
+ readonly nodeSdk: "https://docs.burdenoff.com/developers/node-sdk";
29
+ readonly pythonSdk: "https://docs.burdenoff.com/developers/python-sdk";
30
+ readonly cliReference: "https://docs.burdenoff.com/developers/cli-reference";
31
+ readonly mcpServer: "https://docs.burdenoff.com/developers/mcp-server";
32
+ readonly examples: "https://docs.burdenoff.com/developers/examples";
33
+ readonly faq: "https://docs.burdenoff.com/developers/faq";
34
+ readonly developerAgreement: "https://burdenoff.com/developer-agreement";
35
+ readonly acceptableUsePolicy: "https://burdenoff.com/aup";
36
+ readonly status: "https://status.burdenoff.com";
37
+ readonly community: "https://community.burdenoff.com/developers";
38
+ };
39
+ export type DeveloperLinkKey = keyof typeof DEVELOPER_LINKS;
40
+ /**
41
+ * Version label of the Developer Agreement a developer accepts during setup.
42
+ * Recorded on the developer organization's metadata together with the
43
+ * acceptance timestamp so a later change to the agreement can tell which
44
+ * organizations accepted which text.
45
+ */
46
+ export declare const DEVELOPER_AGREEMENT_VERSION = "2026-10";
47
+ //# sourceMappingURL=developerLinks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developerLinks.d.ts","sourceRoot":"","sources":["../../../src/devportal/constants/developerLinks.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,SAAS,+BAA+B,CAAC;AACtD,eAAO,MAAM,cAAc,0CAA4B,CAAC;AACxD,eAAO,MAAM,cAAc,0BAA0B,CAAC;AAEtD,eAAO,MAAM,eAAe;IAC1B,mCAAmC;;IAEnC,0EAA0E;;IAE1E,+DAA+D;;;;;;;;;;;;;;;;;;;;CAoBvD,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,eAAe,CAAC;AAE5D;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,YAAY,CAAC"}
@@ -0,0 +1,27 @@
1
+ var e = "https://docs.burdenoff.com/developers", t = "https://burdenoff.com", n = {
2
+ docsHome: e,
3
+ buildOnWorkspaces: `${t}/developers`,
4
+ registrationGuide: `${e}/build/register-as-a-developer`,
5
+ quickStart: `${e}/quick-start`,
6
+ platformOverview: `${e}/platform-overview`,
7
+ authentication: `${e}/authentication`,
8
+ graphqlApi: `${e}/build/graphql-api`,
9
+ webhooks: `${e}/build/webhooks`,
10
+ plugins: `${e}/build/plugins`,
11
+ integrationsOverview: `${e}/build/integrations/overview`,
12
+ publishConnector: `${e}/build/integrations/publish-a-connector`,
13
+ nodeSdk: `${e}/node-sdk`,
14
+ pythonSdk: `${e}/python-sdk`,
15
+ cliReference: `${e}/cli-reference`,
16
+ mcpServer: `${e}/mcp-server`,
17
+ examples: `${e}/examples`,
18
+ faq: `${e}/faq`,
19
+ developerAgreement: `${t}/developer-agreement`,
20
+ acceptableUsePolicy: `${t}/aup`,
21
+ status: "https://status.burdenoff.com",
22
+ community: "https://community.burdenoff.com/developers"
23
+ }, r = "2026-10";
24
+ //#endregion
25
+ export { r as DEVELOPER_AGREEMENT_VERSION, n as DEVELOPER_LINKS };
26
+
27
+ //# sourceMappingURL=developerLinks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"developerLinks.js","names":[],"sources":["../../../src/devportal/constants/developerLinks.ts"],"sourcesContent":["/**\n * Public URLs the developer portal links to.\n *\n * Every URL here was checked to return HTTP 200 when it was added\n * (BOFF-10636). Pages that do not exist on the public docs site are\n * deliberately absent: a link that 404s is worse than no link. When a new\n * docs page ships, add it here and reference the constant instead of\n * hard-coding the URL in a page.\n */\n\nexport const DOCS_SITE = \"https://docs.burdenoff.com\";\nexport const DEVELOPER_DOCS = `${DOCS_SITE}/developers`;\nexport const MARKETING_SITE = \"https://burdenoff.com\";\n\nexport const DEVELOPER_LINKS = {\n /** Developer docs landing page. */\n docsHome: DEVELOPER_DOCS,\n /** The public \"Build on Workspaces\" entry point on the marketing site. */\n buildOnWorkspaces: `${MARKETING_SITE}/developers`,\n /** Step-by-step registration guide for external developers. */\n registrationGuide: `${DEVELOPER_DOCS}/build/register-as-a-developer`,\n quickStart: `${DEVELOPER_DOCS}/quick-start`,\n platformOverview: `${DEVELOPER_DOCS}/platform-overview`,\n authentication: `${DEVELOPER_DOCS}/authentication`,\n graphqlApi: `${DEVELOPER_DOCS}/build/graphql-api`,\n webhooks: `${DEVELOPER_DOCS}/build/webhooks`,\n plugins: `${DEVELOPER_DOCS}/build/plugins`,\n integrationsOverview: `${DEVELOPER_DOCS}/build/integrations/overview`,\n publishConnector: `${DEVELOPER_DOCS}/build/integrations/publish-a-connector`,\n nodeSdk: `${DEVELOPER_DOCS}/node-sdk`,\n pythonSdk: `${DEVELOPER_DOCS}/python-sdk`,\n cliReference: `${DEVELOPER_DOCS}/cli-reference`,\n mcpServer: `${DEVELOPER_DOCS}/mcp-server`,\n examples: `${DEVELOPER_DOCS}/examples`,\n faq: `${DEVELOPER_DOCS}/faq`,\n developerAgreement: `${MARKETING_SITE}/developer-agreement`,\n acceptableUsePolicy: `${MARKETING_SITE}/aup`,\n status: \"https://status.burdenoff.com\",\n community: \"https://community.burdenoff.com/developers\",\n} as const;\n\nexport type DeveloperLinkKey = keyof typeof DEVELOPER_LINKS;\n\n/**\n * Version label of the Developer Agreement a developer accepts during setup.\n * Recorded on the developer organization's metadata together with the\n * acceptance timestamp so a later change to the agreement can tell which\n * organizations accepted which text.\n */\nexport const DEVELOPER_AGREEMENT_VERSION = \"2026-10\";\n"],"mappings":"AAWA,IAAa,IAAiB,yCACjB,IAAiB,yBAEjB,IAAkB;CAE7B,UAAU;CAEV,mBAAmB,GAAG,EAAe;CAErC,mBAAmB,GAAG,EAAe;CACrC,YAAY,GAAG,EAAe;CAC9B,kBAAkB,GAAG,EAAe;CACpC,gBAAgB,GAAG,EAAe;CAClC,YAAY,GAAG,EAAe;CAC9B,UAAU,GAAG,EAAe;CAC5B,SAAS,GAAG,EAAe;CAC3B,sBAAsB,GAAG,EAAe;CACxC,kBAAkB,GAAG,EAAe;CACpC,SAAS,GAAG,EAAe;CAC3B,WAAW,GAAG,EAAe;CAC7B,cAAc,GAAG,EAAe;CAChC,WAAW,GAAG,EAAe;CAC7B,UAAU,GAAG,EAAe;CAC5B,KAAK,GAAG,EAAe;CACvB,oBAAoB,GAAG,EAAe;CACtC,qBAAqB,GAAG,EAAe;CACvC,QAAQ;CACR,WAAW;CACZ,EAUY,IAA8B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGraphQL.d.ts","sourceRoot":"","sources":["../../../src/devportal/hooks/useGraphQL.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,YAAY,EAKb,MAAM,qBAAqB,CAAC;AA0C7B,cAAc,mCAAmC,CAAC;AA2JlD,eAAO,MAAM,YAAY,cAkKvB,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CACrC;AAGD,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG;IACpC,aAAa,CAAC,EAAE,SAAS;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/B,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;KACrC,EAAE,CAAC;IACJ,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,EAAE,CAgC5E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAG9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAK3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAKjE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtD"}
1
+ {"version":3,"file":"useGraphQL.d.ts","sourceRoot":"","sources":["../../../src/devportal/hooks/useGraphQL.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,YAAY,EAKb,MAAM,qBAAqB,CAAC;AA0C7B,cAAc,mCAAmC,CAAC;AA2JlD,eAAO,MAAM,YAAY,cAqKvB,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;CACrC;AAGD,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG;IACpC,aAAa,CAAC,EAAE,SAAS;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/B,IAAI,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;KACrC,EAAE,CAAC;IACJ,YAAY,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,EAAE,CAgC5E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAG9D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAK3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAKjE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEtD"}
@@ -87,7 +87,8 @@ var S = s({ uri: g }), C = l(({ operationName: e }) => e ? v.has(e) : !1, s({ ur
87
87
  keyArgs: [
88
88
  "status",
89
89
  "visibility",
90
- "developerId"
90
+ "developerId",
91
+ "organizationId"
91
92
  ],
92
93
  merge(e, t, { args: n }) {
93
94
  return !n?.offset || n.offset === 0 ? t : {