@burdenoff/microfe-devportal 2026.1014.1 → 2026.1026.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 (40) hide show
  1. package/dist/devportal/components/PackageValidationPanel.d.ts +31 -0
  2. package/dist/devportal/components/PackageValidationPanel.d.ts.map +1 -0
  3. package/dist/devportal/components/PackageValidationPanel.js +104 -0
  4. package/dist/devportal/components/PackageValidationPanel.js.map +1 -0
  5. package/dist/devportal/components/index.d.ts +1 -0
  6. package/dist/devportal/components/index.d.ts.map +1 -1
  7. package/dist/devportal/components/index.js +1 -0
  8. package/dist/devportal/hooks/useSellerOrganization.d.ts.map +1 -1
  9. package/dist/devportal/hooks/useSellerOrganization.js +23 -22
  10. package/dist/devportal/hooks/useSellerOrganization.js.map +1 -1
  11. package/dist/devportal/pages/AdminReviewPage.d.ts.map +1 -1
  12. package/dist/devportal/pages/AdminReviewPage.js +192 -181
  13. package/dist/devportal/pages/AdminReviewPage.js.map +1 -1
  14. package/dist/devportal/pages/ApplicationVersionsPage.d.ts.map +1 -1
  15. package/dist/devportal/pages/ApplicationVersionsPage.js +117 -115
  16. package/dist/devportal/pages/ApplicationVersionsPage.js.map +1 -1
  17. package/dist/devportal/pages/CreatePhysicalItemPage.d.ts.map +1 -1
  18. package/dist/devportal/pages/CreatePhysicalItemPage.js +119 -118
  19. package/dist/devportal/pages/CreatePhysicalItemPage.js.map +1 -1
  20. package/dist/devportal/pages/EditPhysicalItemPage.d.ts.map +1 -1
  21. package/dist/devportal/pages/EditPhysicalItemPage.js +61 -60
  22. package/dist/devportal/pages/EditPhysicalItemPage.js.map +1 -1
  23. package/dist/devportal/pages/SellerDashboardPage.d.ts.map +1 -1
  24. package/dist/devportal/pages/SellerDashboardPage.js +142 -141
  25. package/dist/devportal/pages/SellerDashboardPage.js.map +1 -1
  26. package/dist/devportal/pages/SellerItemsPage.d.ts.map +1 -1
  27. package/dist/devportal/pages/SellerItemsPage.js +190 -189
  28. package/dist/devportal/pages/SellerItemsPage.js.map +1 -1
  29. package/dist/devportal/pages/SellerOrdersPage.d.ts.map +1 -1
  30. package/dist/devportal/pages/SellerOrdersPage.js +43 -42
  31. package/dist/devportal/pages/SellerOrdersPage.js.map +1 -1
  32. package/dist/devportal/utils/graphqlEndpoint.d.ts +6 -0
  33. package/dist/devportal/utils/graphqlEndpoint.d.ts.map +1 -0
  34. package/dist/devportal/utils/graphqlEndpoint.js +9 -0
  35. package/dist/devportal/utils/graphqlEndpoint.js.map +1 -0
  36. package/dist/generated/global-operations.d.ts +1 -0
  37. package/dist/generated/global-operations.d.ts.map +1 -1
  38. package/dist/generated/global-operations.js +1 -0
  39. package/dist/generated/global-operations.js.map +1 -1
  40. package/package.json +1 -1
@@ -0,0 +1,31 @@
1
+ import { FC } from 'react';
2
+
3
+ export interface PackageValidationIssue {
4
+ severity: "error" | "warning";
5
+ code: string;
6
+ path: string;
7
+ message: string;
8
+ }
9
+ export type PackageValidationState = {
10
+ kind: "none";
11
+ } | {
12
+ kind: "pending";
13
+ } | {
14
+ kind: "passed" | "failed";
15
+ errors: PackageValidationIssue[];
16
+ warnings: PackageValidationIssue[];
17
+ validatedAt: string | null;
18
+ runtime: string | null;
19
+ operationCount: number;
20
+ };
21
+ /** Parse the stored report defensively — metadata is untyped JSON. */
22
+ export declare function readPackageValidationState(metadata: unknown): PackageValidationState;
23
+ interface PackageValidationPanelProps {
24
+ metadata: unknown;
25
+ /** Start expanded (the admin review card does; the versions table does not). */
26
+ defaultExpanded?: boolean;
27
+ className?: string;
28
+ }
29
+ export declare const PackageValidationPanel: FC<PackageValidationPanelProps>;
30
+ export {};
31
+ //# sourceMappingURL=PackageValidationPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackageValidationPanel.d.ts","sourceRoot":"","sources":["../../../src/devportal/components/PackageValidationPanel.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAahC,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IACE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC1B,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAgBN,sEAAsE;AACtE,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,OAAO,GAChB,sBAAsB,CAgBxB;AA4BD,UAAU,2BAA2B;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,gFAAgF;IAChF,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,sBAAsB,EAAE,EAAE,CAAC,2BAA2B,CA8HlE,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { useTr as e } from "../utils/i18n.js";
2
+ import { cn as t } from "../utils/cn.js";
3
+ import { useState as n } from "react";
4
+ import { AlertTriangle as r, CheckCircle2 as i, ChevronDown as a, ChevronUp as o, Loader2 as s, XCircle as c } from "lucide-react";
5
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
6
+ //#region src/devportal/components/PackageValidationPanel.tsx
7
+ function d(e) {
8
+ return typeof e == "object" && !!e && !Array.isArray(e);
9
+ }
10
+ function f(e) {
11
+ return Array.isArray(e) ? e.filter(d).map((e) => ({
12
+ severity: e.severity === "warning" ? "warning" : "error",
13
+ code: typeof e.code == "string" ? e.code : "",
14
+ path: typeof e.path == "string" ? e.path : "",
15
+ message: typeof e.message == "string" ? e.message : ""
16
+ })) : [];
17
+ }
18
+ function p(e) {
19
+ if (!d(e)) return { kind: "none" };
20
+ let t = e.packageValidation;
21
+ return d(t) ? t.pending === !0 ? { kind: "pending" } : typeof t.valid == "boolean" ? {
22
+ kind: t.valid ? "passed" : "failed",
23
+ errors: f(t.errors),
24
+ warnings: f(t.warnings),
25
+ validatedAt: typeof t.validatedAt == "string" ? t.validatedAt : null,
26
+ runtime: typeof t.runtime == "string" ? t.runtime : null,
27
+ operationCount: typeof t.operationCount == "number" ? t.operationCount : 0
28
+ } : { kind: "none" } : { kind: "none" };
29
+ }
30
+ var m = ({ issues: e }) => /* @__PURE__ */ l("ul", {
31
+ className: "space-y-1",
32
+ children: e.map((e, t) => /* @__PURE__ */ u("li", {
33
+ className: "text-xs leading-snug",
34
+ children: [e.path && /* @__PURE__ */ l("code", {
35
+ className: "mr-1 rounded bg-bg-sunken px-1 py-0.5 font-mono text-text-primary",
36
+ children: e.path
37
+ }), /* @__PURE__ */ l("span", {
38
+ className: e.severity === "error" ? "text-status-error-text" : "text-status-warning-text",
39
+ children: e.message
40
+ })]
41
+ }, `${e.code}-${e.path}-${t}`))
42
+ }), h = ({ metadata: d, defaultExpanded: f = !1, className: h }) => {
43
+ let g = e(), _ = p(d), [v, y] = n(f);
44
+ if (_.kind === "none") return /* @__PURE__ */ l("p", {
45
+ className: t("text-xs text-text-secondary", h),
46
+ "data-testid": "package-validation",
47
+ "data-state": "none",
48
+ children: g("devportal.packageValidation.none", "Package not validated (uploaded before validation existed)")
49
+ });
50
+ if (_.kind === "pending") return /* @__PURE__ */ u("p", {
51
+ className: t("inline-flex items-center gap-1 text-xs text-status-info-text", h),
52
+ "data-testid": "package-validation",
53
+ "data-state": "pending",
54
+ children: [/* @__PURE__ */ l(s, {
55
+ size: 12,
56
+ className: "animate-spin"
57
+ }), g("devportal.packageValidation.pending", "Validating package…")]
58
+ });
59
+ let b = _.kind === "failed", x = _.errors.length > 0 || _.warnings.length > 0, S = b ? g("devportal.packageValidation.failed", "Validation failed: {{count}} error(s)", { count: _.errors.length }) : g("devportal.packageValidation.passed", "Package validated");
60
+ return /* @__PURE__ */ u("div", {
61
+ className: t("space-y-1", h),
62
+ "data-testid": "package-validation",
63
+ "data-state": _.kind,
64
+ children: [/* @__PURE__ */ u("button", {
65
+ type: "button",
66
+ onClick: () => x && y((e) => !e),
67
+ className: t("inline-flex items-center gap-1 text-xs font-medium", b ? "text-status-error-text" : "text-status-success-text", x ? "hover:underline" : "cursor-default"),
68
+ "aria-expanded": x ? v : void 0,
69
+ children: [
70
+ l(b ? c : i, { size: 12 }),
71
+ S,
72
+ _.warnings.length > 0 && /* @__PURE__ */ u("span", {
73
+ className: "inline-flex items-center gap-0.5 text-status-warning-text",
74
+ children: [/* @__PURE__ */ l(r, { size: 12 }), g("devportal.packageValidation.warnings", "{{count}} warning(s)", { count: _.warnings.length })]
75
+ }),
76
+ x && l(v ? o : a, { size: 12 })
77
+ ]
78
+ }), v && x && /* @__PURE__ */ u("div", {
79
+ className: "max-w-md space-y-2 rounded-md border border-border-seam bg-bg-surface p-2",
80
+ children: [
81
+ _.errors.length > 0 && /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("p", {
82
+ className: "mb-1 text-xs font-semibold text-status-error-text",
83
+ children: g("devportal.packageValidation.errorsTitle", "Errors")
84
+ }), /* @__PURE__ */ l(m, { issues: _.errors })] }),
85
+ _.warnings.length > 0 && /* @__PURE__ */ u("div", { children: [/* @__PURE__ */ l("p", {
86
+ className: "mb-1 text-xs font-semibold text-status-warning-text",
87
+ children: g("devportal.packageValidation.warningsTitle", "Needs reviewer attention")
88
+ }), /* @__PURE__ */ l(m, { issues: _.warnings })] }),
89
+ /* @__PURE__ */ l("p", {
90
+ className: "text-[11px] text-text-secondary",
91
+ children: [
92
+ _.runtime && g("devportal.packageValidation.runtime", "Runtime: {{runtime}}", { runtime: _.runtime }),
93
+ g("devportal.packageValidation.operations", "{{count}} operation(s)", { count: _.operationCount }),
94
+ _.validatedAt && new Date(_.validatedAt).toLocaleString()
95
+ ].filter(Boolean).join(" · ")
96
+ })
97
+ ]
98
+ })]
99
+ });
100
+ };
101
+ //#endregion
102
+ export { h as PackageValidationPanel, p as readPackageValidationState };
103
+
104
+ //# sourceMappingURL=PackageValidationPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PackageValidationPanel.js","names":[],"sources":["../../../src/devportal/components/PackageValidationPanel.tsx"],"sourcesContent":["/**\n * PackageValidationPanel — shows the custom-node package validation report\n * (BOFF-4315) stored on `ApplicationVersion.metadata.packageValidation` by\n * global-devportal-svc.\n *\n * The service validates every uploaded NODE package before building it, and\n * refuses to submit or approve a version whose package failed. This panel is\n * how the developer learns why, and how the reviewing admin sees warnings\n * (dynamic code, unusual field types) that need a human decision.\n */\nimport { useState } from \"react\";\nimport type { FC } from \"react\";\nimport {\n AlertTriangle,\n CheckCircle2,\n ChevronDown,\n ChevronUp,\n Loader2,\n XCircle,\n} from \"lucide-react\";\n\nimport { cn } from \"../utils/cn\";\nimport { useTr } from \"../utils/i18n\";\n\nexport interface PackageValidationIssue {\n severity: \"error\" | \"warning\";\n code: string;\n path: string;\n message: string;\n}\n\nexport type PackageValidationState =\n | { kind: \"none\" }\n | { kind: \"pending\" }\n | {\n kind: \"passed\" | \"failed\";\n errors: PackageValidationIssue[];\n warnings: PackageValidationIssue[];\n validatedAt: string | null;\n runtime: string | null;\n operationCount: number;\n };\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction readIssues(value: unknown): PackageValidationIssue[] {\n if (!Array.isArray(value)) return [];\n return value.filter(isRecord).map((entry) => ({\n severity: entry.severity === \"warning\" ? \"warning\" : \"error\",\n code: typeof entry.code === \"string\" ? entry.code : \"\",\n path: typeof entry.path === \"string\" ? entry.path : \"\",\n message: typeof entry.message === \"string\" ? entry.message : \"\",\n }));\n}\n\n/** Parse the stored report defensively — metadata is untyped JSON. */\nexport function readPackageValidationState(\n metadata: unknown,\n): PackageValidationState {\n if (!isRecord(metadata)) return { kind: \"none\" };\n const report = metadata.packageValidation;\n if (!isRecord(report)) return { kind: \"none\" };\n if (report.pending === true) return { kind: \"pending\" };\n if (typeof report.valid !== \"boolean\") return { kind: \"none\" };\n return {\n kind: report.valid ? \"passed\" : \"failed\",\n errors: readIssues(report.errors),\n warnings: readIssues(report.warnings),\n validatedAt:\n typeof report.validatedAt === \"string\" ? report.validatedAt : null,\n runtime: typeof report.runtime === \"string\" ? report.runtime : null,\n operationCount:\n typeof report.operationCount === \"number\" ? report.operationCount : 0,\n };\n}\n\nconst IssueList: FC<{ issues: PackageValidationIssue[] }> = ({ issues }) => (\n <ul className=\"space-y-1\">\n {issues.map((issue, index) => (\n <li\n key={`${issue.code}-${issue.path}-${index}`}\n className=\"text-xs leading-snug\"\n >\n {issue.path && (\n <code className=\"mr-1 rounded bg-bg-sunken px-1 py-0.5 font-mono text-text-primary\">\n {issue.path}\n </code>\n )}\n <span\n className={\n issue.severity === \"error\"\n ? \"text-status-error-text\"\n : \"text-status-warning-text\"\n }\n >\n {issue.message}\n </span>\n </li>\n ))}\n </ul>\n);\n\ninterface PackageValidationPanelProps {\n metadata: unknown;\n /** Start expanded (the admin review card does; the versions table does not). */\n defaultExpanded?: boolean;\n className?: string;\n}\n\nexport const PackageValidationPanel: FC<PackageValidationPanelProps> = ({\n metadata,\n defaultExpanded = false,\n className,\n}) => {\n const tr = useTr();\n const state = readPackageValidationState(metadata);\n const [expanded, setExpanded] = useState(defaultExpanded);\n\n if (state.kind === \"none\") {\n return (\n <p\n className={cn(\"text-xs text-text-secondary\", className)}\n data-testid=\"package-validation\"\n data-state=\"none\"\n >\n {tr(\n \"devportal.packageValidation.none\",\n \"Package not validated (uploaded before validation existed)\",\n )}\n </p>\n );\n }\n\n if (state.kind === \"pending\") {\n return (\n <p\n className={cn(\n \"inline-flex items-center gap-1 text-xs text-status-info-text\",\n className,\n )}\n data-testid=\"package-validation\"\n data-state=\"pending\"\n >\n <Loader2 size={12} className=\"animate-spin\" />\n {tr(\"devportal.packageValidation.pending\", \"Validating package…\")}\n </p>\n );\n }\n\n const failed = state.kind === \"failed\";\n const hasDetails = state.errors.length > 0 || state.warnings.length > 0;\n const summary = failed\n ? tr(\n \"devportal.packageValidation.failed\",\n \"Validation failed: {{count}} error(s)\",\n { count: state.errors.length },\n )\n : tr(\"devportal.packageValidation.passed\", \"Package validated\");\n\n return (\n <div\n className={cn(\"space-y-1\", className)}\n data-testid=\"package-validation\"\n data-state={state.kind}\n >\n <button\n type=\"button\"\n onClick={() => hasDetails && setExpanded((value) => !value)}\n className={cn(\n \"inline-flex items-center gap-1 text-xs font-medium\",\n failed ? \"text-status-error-text\" : \"text-status-success-text\",\n hasDetails ? \"hover:underline\" : \"cursor-default\",\n )}\n aria-expanded={hasDetails ? expanded : undefined}\n >\n {failed ? <XCircle size={12} /> : <CheckCircle2 size={12} />}\n {summary}\n {state.warnings.length > 0 && (\n <span className=\"inline-flex items-center gap-0.5 text-status-warning-text\">\n <AlertTriangle size={12} />\n {tr(\n \"devportal.packageValidation.warnings\",\n \"{{count}} warning(s)\",\n { count: state.warnings.length },\n )}\n </span>\n )}\n {hasDetails &&\n (expanded ? <ChevronUp size={12} /> : <ChevronDown size={12} />)}\n </button>\n {expanded && hasDetails && (\n <div className=\"max-w-md space-y-2 rounded-md border border-border-seam bg-bg-surface p-2\">\n {state.errors.length > 0 && (\n <div>\n <p className=\"mb-1 text-xs font-semibold text-status-error-text\">\n {tr(\"devportal.packageValidation.errorsTitle\", \"Errors\")}\n </p>\n <IssueList issues={state.errors} />\n </div>\n )}\n {state.warnings.length > 0 && (\n <div>\n <p className=\"mb-1 text-xs font-semibold text-status-warning-text\">\n {tr(\n \"devportal.packageValidation.warningsTitle\",\n \"Needs reviewer attention\",\n )}\n </p>\n <IssueList issues={state.warnings} />\n </div>\n )}\n <p className=\"text-[11px] text-text-secondary\">\n {[\n state.runtime &&\n tr(\n \"devportal.packageValidation.runtime\",\n \"Runtime: {{runtime}}\",\n {\n runtime: state.runtime,\n },\n ),\n tr(\n \"devportal.packageValidation.operations\",\n \"{{count}} operation(s)\",\n { count: state.operationCount },\n ),\n state.validatedAt && new Date(state.validatedAt).toLocaleString(),\n ]\n .filter(Boolean)\n .join(\" · \")}\n </p>\n </div>\n )}\n </div>\n );\n};\n"],"mappings":"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"}
@@ -22,4 +22,5 @@ export * from './TelemetryErrorBoundary';
22
22
  export * from './SectionNav';
23
23
  export * from './MarkdownEditor';
24
24
  export * from './ManifestViewer';
25
+ export * from './PackageValidationPanel';
25
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/devportal/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/devportal/components/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC"}
@@ -17,3 +17,4 @@ import "./RegisterPickupLocationModal.js";
17
17
  import "./PermissionGuard.js";
18
18
  import "./MarkdownEditor.js";
19
19
  import "./ManifestViewer.js";
20
+ import "./PackageValidationPanel.js";
@@ -1 +1 @@
1
- {"version":3,"file":"useSellerOrganization.d.ts","sourceRoot":"","sources":["../../../src/devportal/hooks/useSellerOrganization.ts"],"names":[],"mappings":"AAmDA,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC/C,aAAa,EAAE,yBAAyB,EAAE,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAgB,qBAAqB,IAAI,2BAA2B,CA0GnE"}
1
+ {"version":3,"file":"useSellerOrganization.d.ts","sourceRoot":"","sources":["../../../src/devportal/hooks/useSellerOrganization.ts"],"names":[],"mappings":"AAoDA,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC/C,aAAa,EAAE,yBAAyB,EAAE,CAAC;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1C;AAED,wBAAgB,qBAAqB,IAAI,2BAA2B,CA0GnE"}
@@ -1,17 +1,18 @@
1
1
  import { useDevportal as e } from "../providers/DevportalProvider.js";
2
- import { useEffect as t, useRef as n, useState as r } from "react";
2
+ import { resolveGlobalGraphqlEndpoint as t } from "../utils/graphqlEndpoint.js";
3
+ import { useEffect as n, useRef as r, useState as i } from "react";
3
4
  //#region src/devportal/hooks/useSellerOrganization.ts
4
- var i = "\n query SellerPhysicalOrganizations {\n myDeveloperOrganizations {\n id\n name\n slug\n kind\n contactEmail\n websiteUrl\n legalEntityName\n taxCountry\n }\n }\n", a = "\n mutation CreateSellerOrganizationForSellerPortal($input: CreateDeveloperOrganizationInput!) {\n createSellerOrganization(input: $input) {\n id\n name\n slug\n contactEmail\n websiteUrl\n legalEntityName\n taxCountry\n }\n }\n";
5
- function o() {
6
- let { apiGatewayUrl: o, authToken: s, activePhysicalOrgId: c, setActivePhysicalOrgId: l } = e(), [u, d] = r([]), [f, p] = r(!0), [m, h] = r(null), g = n(!1), _ = `${o || ""}/global/graphql`;
7
- return t(() => {
5
+ var a = "\n query SellerPhysicalOrganizations {\n myDeveloperOrganizations {\n id\n name\n slug\n kind\n contactEmail\n websiteUrl\n legalEntityName\n taxCountry\n }\n }\n", o = "\n mutation CreateSellerOrganizationForSellerPortal($input: CreateDeveloperOrganizationInput!) {\n createSellerOrganization(input: $input) {\n id\n name\n slug\n contactEmail\n websiteUrl\n legalEntityName\n taxCountry\n }\n }\n";
6
+ function s() {
7
+ let { apiGatewayUrl: s, authToken: c, activePhysicalOrgId: l, setActivePhysicalOrgId: u } = e(), [d, f] = i([]), [p, m] = i(!0), [h, g] = i(null), _ = r(!1), v = t(s);
8
+ return n(() => {
8
9
  let e = !1;
9
10
  async function t(e, t) {
10
- let n = await (await fetch(_, {
11
+ let n = await (await fetch(v, {
11
12
  method: "POST",
12
13
  headers: {
13
14
  "Content-Type": "application/json",
14
- ...s ? { Authorization: `Bearer ${s}` } : {}
15
+ ...c ? { Authorization: `Bearer ${c}` } : {}
15
16
  },
16
17
  credentials: "include",
17
18
  body: JSON.stringify({
@@ -23,36 +24,36 @@ function o() {
23
24
  return n.data;
24
25
  }
25
26
  async function n() {
26
- p(!0), h(null);
27
+ m(!0), g(null);
27
28
  try {
28
- let n = await t(i);
29
+ let n = await t(a);
29
30
  if (e) return;
30
31
  let r = n.myDeveloperOrganizations.filter((e) => e.kind === "PHYSICAL");
31
- if (r.length === 0 && !g.current) {
32
- g.current = !0;
33
- let n = await t(a, { input: { name: "My Store" } });
32
+ if (r.length === 0 && !_.current) {
33
+ _.current = !0;
34
+ let n = await t(o, { input: { name: "My Store" } });
34
35
  if (e) return;
35
36
  r = [n.createSellerOrganization];
36
37
  }
37
- d(r), r.some((e) => e.id === c) || l(r[0]?.id ?? null);
38
+ f(r), r.some((e) => e.id === l) || u(r[0]?.id ?? null);
38
39
  } catch (t) {
39
- e || h(t instanceof Error ? t.message : String(t));
40
+ e || g(t instanceof Error ? t.message : String(t));
40
41
  } finally {
41
- e || p(!1);
42
+ e || m(!1);
42
43
  }
43
44
  }
44
45
  return n(), () => {
45
46
  e = !0;
46
47
  };
47
- }, [_, s]), {
48
- organization: u.find((e) => e.id === c) ?? u[0] ?? null,
49
- organizations: u,
50
- loading: f,
51
- error: m,
52
- selectOrganization: l
48
+ }, [v, c]), {
49
+ organization: d.find((e) => e.id === l) ?? d[0] ?? null,
50
+ organizations: d,
51
+ loading: p,
52
+ error: h,
53
+ selectOrganization: u
53
54
  };
54
55
  }
55
56
  //#endregion
56
- export { o as useSellerOrganization };
57
+ export { s as useSellerOrganization };
57
58
 
58
59
  //# sourceMappingURL=useSellerOrganization.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSellerOrganization.js","names":[],"sources":["../../../src/devportal/hooks/useSellerOrganization.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\n\n/**\n * Resolves the seller portal's current PHYSICAL-kind devportal org.\n *\n * Every seller-portal page (Dashboard, My Items, Orders, Create/Edit\n * Physical Item) must operate on the same PHYSICAL org, not independently\n * grab \"whichever org happens to be first\" — that let a multi-org seller's\n * physical listings silently attach to the wrong org. This hook is the\n * single source of truth: it prefers the persisted activePhysicalOrgId (if\n * still one of the caller's PHYSICAL orgs), falls back to the first PHYSICAL\n * org the actor belongs to, and — only if none exists yet — auto-provisions\n * one via createSellerOrganization (mirrors the previous auto-provision-on-\n * first-listing UX, now correctly scoped to PHYSICAL). See DeveloperOrgKind\n * (BOFF-7285).\n */\n\n// myDeveloperOrganizations (not developerOrganizations) — the latter is\n// admin-aware and returns every organization on the platform for a\n// SUPER_ADMIN actor, which would leak other sellers' orgs into this list.\n// See DeveloperOrgKind (BOFF-7285).\nconst PHYSICAL_ORGS_QUERY = `\n query SellerPhysicalOrganizations {\n myDeveloperOrganizations {\n id\n name\n slug\n kind\n contactEmail\n websiteUrl\n legalEntityName\n taxCountry\n }\n }\n`;\n\nconst CREATE_SELLER_ORGANIZATION_MUTATION = `\n mutation CreateSellerOrganizationForSellerPortal($input: CreateDeveloperOrganizationInput!) {\n createSellerOrganization(input: $input) {\n id\n name\n slug\n contactEmail\n websiteUrl\n legalEntityName\n taxCountry\n }\n }\n`;\n\nexport interface SellerOrganizationSummary {\n id: string;\n name: string;\n slug: string;\n contactEmail: string | null;\n websiteUrl: string | null;\n legalEntityName: string | null;\n taxCountry: string | null;\n}\n\nexport interface UseSellerOrganizationResult {\n organization: SellerOrganizationSummary | null;\n organizations: SellerOrganizationSummary[];\n loading: boolean;\n error: string | null;\n selectOrganization: (id: string) => void;\n}\n\nexport function useSellerOrganization(): UseSellerOrganizationResult {\n const {\n apiGatewayUrl,\n authToken,\n activePhysicalOrgId,\n setActivePhysicalOrgId,\n } = useDevportal();\n\n const [organizations, setOrganizations] = useState<\n SellerOrganizationSummary[]\n >([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const hasAttemptedAutoCreate = useRef(false);\n\n const endpoint = `${apiGatewayUrl || \"\"}/global/graphql`;\n\n useEffect(() => {\n let cancelled = false;\n\n async function gqlFetch<T>(\n query: string,\n variables?: Record<string, unknown>,\n ): Promise<T> {\n const res = await fetch(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n credentials: \"include\",\n body: JSON.stringify({ query, variables }),\n });\n const json = (await res.json()) as {\n data?: T;\n errors?: { message: string }[];\n };\n if (json.errors?.length) {\n throw new Error(json.errors.map((e) => e.message).join(\"; \"));\n }\n return json.data as T;\n }\n\n async function run(): Promise<void> {\n setLoading(true);\n setError(null);\n try {\n const data = await gqlFetch<{\n myDeveloperOrganizations: (SellerOrganizationSummary & {\n kind: \"DIGITAL\" | \"PHYSICAL\";\n })[];\n }>(PHYSICAL_ORGS_QUERY);\n if (cancelled) return;\n\n let physicalOrgs: SellerOrganizationSummary[] =\n data.myDeveloperOrganizations.filter(\n (org) => org.kind === \"PHYSICAL\",\n );\n\n if (physicalOrgs.length === 0 && !hasAttemptedAutoCreate.current) {\n hasAttemptedAutoCreate.current = true;\n const created = await gqlFetch<{\n createSellerOrganization: SellerOrganizationSummary;\n }>(CREATE_SELLER_ORGANIZATION_MUTATION, {\n input: { name: \"My Store\" },\n });\n if (cancelled) return;\n physicalOrgs = [created.createSellerOrganization];\n }\n\n setOrganizations(physicalOrgs);\n\n const stillValid = physicalOrgs.some(\n (org) => org.id === activePhysicalOrgId,\n );\n if (!stillValid) {\n setActivePhysicalOrgId(physicalOrgs[0]?.id ?? null);\n }\n } catch (err) {\n if (!cancelled) {\n setError(err instanceof Error ? err.message : String(err));\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n }\n\n void run();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- activePhysicalOrgId/setActivePhysicalOrgId intentionally excluded: they're read/written inside this effect, re-running on every write would loop.\n }, [endpoint, authToken]);\n\n const organization =\n organizations.find((org) => org.id === activePhysicalOrgId) ??\n organizations[0] ??\n null;\n\n return {\n organization,\n organizations,\n loading,\n error,\n selectOrganization: setActivePhysicalOrgId,\n };\n}\n"],"mappings":";;;AAsBA,IAAM,IAAsB,sNAetB,IAAsC;AAgC5C,SAAgB,IAAqD;CACnE,IAAM,EACJ,kBACA,cACA,wBACA,8BACE,GAAc,EAEZ,CAAC,GAAe,KAAoB,EAExC,EAAE,CAAC,EACC,CAAC,GAAS,KAAc,EAAS,GAAK,EACtC,CAAC,GAAO,KAAY,EAAwB,KAAK,EACjD,IAAyB,EAAO,GAAM,EAEtC,IAAW,GAAG,KAAiB,GAAG;AAoFxC,QAlFA,QAAgB;EACd,IAAI,IAAY;EAEhB,eAAe,EACb,GACA,GACY;GAUZ,IAAM,IAAQ,OATF,MAAM,MAAM,GAAU;IAChC,QAAQ;IACR,SAAS;KACP,gBAAgB;KAChB,GAAI,IAAY,EAAE,eAAe,UAAU,KAAa,GAAG,EAAE;KAC9D;IACD,aAAa;IACb,MAAM,KAAK,UAAU;KAAE;KAAO;KAAW,CAAC;IAC3C,CAAC,EACsB,MAAM;AAI9B,OAAI,EAAK,QAAQ,OACf,OAAU,MAAM,EAAK,OAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,KAAK,KAAK,CAAC;AAE/D,UAAO,EAAK;;EAGd,eAAe,IAAqB;AAElC,GADA,EAAW,GAAK,EAChB,EAAS,KAAK;AACd,OAAI;IACF,IAAM,IAAO,MAAM,EAIhB,EAAoB;AACvB,QAAI,EAAW;IAEf,IAAI,IACF,EAAK,yBAAyB,QAC3B,MAAQ,EAAI,SAAS,WACvB;AAEH,QAAI,EAAa,WAAW,KAAK,CAAC,EAAuB,SAAS;AAChE,OAAuB,UAAU;KACjC,IAAM,IAAU,MAAM,EAEnB,GAAqC,EACtC,OAAO,EAAE,MAAM,YAAY,EAC5B,CAAC;AACF,SAAI,EAAW;AACf,SAAe,CAAC,EAAQ,yBAAyB;;AAQnD,IALA,EAAiB,EAAa,EAEX,EAAa,MAC7B,MAAQ,EAAI,OAAO,EACrB,IAEC,EAAuB,EAAa,IAAI,MAAM,KAAK;YAE9C,GAAK;AACZ,IAAK,KACH,EAAS,aAAe,QAAQ,EAAI,UAAU,OAAO,EAAI,CAAC;aAEpD;AACR,IAAK,KAAW,EAAW,GAAM;;;AAKrC,SADK,GAAK,QACG;AACX,OAAY;;IAGb,CAAC,GAAU,EAAU,CAAC,EAOlB;EACL,cALA,EAAc,MAAM,MAAQ,EAAI,OAAO,EAAoB,IAC3D,EAAc,MACd;EAIA;EACA;EACA;EACA,oBAAoB;EACrB"}
1
+ {"version":3,"file":"useSellerOrganization.js","names":[],"sources":["../../../src/devportal/hooks/useSellerOrganization.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { useDevportal } from \"../providers/DevportalProvider\";\nimport { resolveGlobalGraphqlEndpoint } from \"../utils/graphqlEndpoint\";\n\n/**\n * Resolves the seller portal's current PHYSICAL-kind devportal org.\n *\n * Every seller-portal page (Dashboard, My Items, Orders, Create/Edit\n * Physical Item) must operate on the same PHYSICAL org, not independently\n * grab \"whichever org happens to be first\" — that let a multi-org seller's\n * physical listings silently attach to the wrong org. This hook is the\n * single source of truth: it prefers the persisted activePhysicalOrgId (if\n * still one of the caller's PHYSICAL orgs), falls back to the first PHYSICAL\n * org the actor belongs to, and — only if none exists yet — auto-provisions\n * one via createSellerOrganization (mirrors the previous auto-provision-on-\n * first-listing UX, now correctly scoped to PHYSICAL). See DeveloperOrgKind\n * (BOFF-7285).\n */\n\n// myDeveloperOrganizations (not developerOrganizations) — the latter is\n// admin-aware and returns every organization on the platform for a\n// SUPER_ADMIN actor, which would leak other sellers' orgs into this list.\n// See DeveloperOrgKind (BOFF-7285).\nconst PHYSICAL_ORGS_QUERY = `\n query SellerPhysicalOrganizations {\n myDeveloperOrganizations {\n id\n name\n slug\n kind\n contactEmail\n websiteUrl\n legalEntityName\n taxCountry\n }\n }\n`;\n\nconst CREATE_SELLER_ORGANIZATION_MUTATION = `\n mutation CreateSellerOrganizationForSellerPortal($input: CreateDeveloperOrganizationInput!) {\n createSellerOrganization(input: $input) {\n id\n name\n slug\n contactEmail\n websiteUrl\n legalEntityName\n taxCountry\n }\n }\n`;\n\nexport interface SellerOrganizationSummary {\n id: string;\n name: string;\n slug: string;\n contactEmail: string | null;\n websiteUrl: string | null;\n legalEntityName: string | null;\n taxCountry: string | null;\n}\n\nexport interface UseSellerOrganizationResult {\n organization: SellerOrganizationSummary | null;\n organizations: SellerOrganizationSummary[];\n loading: boolean;\n error: string | null;\n selectOrganization: (id: string) => void;\n}\n\nexport function useSellerOrganization(): UseSellerOrganizationResult {\n const {\n apiGatewayUrl,\n authToken,\n activePhysicalOrgId,\n setActivePhysicalOrgId,\n } = useDevportal();\n\n const [organizations, setOrganizations] = useState<\n SellerOrganizationSummary[]\n >([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const hasAttemptedAutoCreate = useRef(false);\n\n const endpoint = resolveGlobalGraphqlEndpoint(apiGatewayUrl);\n\n useEffect(() => {\n let cancelled = false;\n\n async function gqlFetch<T>(\n query: string,\n variables?: Record<string, unknown>,\n ): Promise<T> {\n const res = await fetch(endpoint, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(authToken ? { Authorization: `Bearer ${authToken}` } : {}),\n },\n credentials: \"include\",\n body: JSON.stringify({ query, variables }),\n });\n const json = (await res.json()) as {\n data?: T;\n errors?: { message: string }[];\n };\n if (json.errors?.length) {\n throw new Error(json.errors.map((e) => e.message).join(\"; \"));\n }\n return json.data as T;\n }\n\n async function run(): Promise<void> {\n setLoading(true);\n setError(null);\n try {\n const data = await gqlFetch<{\n myDeveloperOrganizations: (SellerOrganizationSummary & {\n kind: \"DIGITAL\" | \"PHYSICAL\";\n })[];\n }>(PHYSICAL_ORGS_QUERY);\n if (cancelled) return;\n\n let physicalOrgs: SellerOrganizationSummary[] =\n data.myDeveloperOrganizations.filter(\n (org) => org.kind === \"PHYSICAL\",\n );\n\n if (physicalOrgs.length === 0 && !hasAttemptedAutoCreate.current) {\n hasAttemptedAutoCreate.current = true;\n const created = await gqlFetch<{\n createSellerOrganization: SellerOrganizationSummary;\n }>(CREATE_SELLER_ORGANIZATION_MUTATION, {\n input: { name: \"My Store\" },\n });\n if (cancelled) return;\n physicalOrgs = [created.createSellerOrganization];\n }\n\n setOrganizations(physicalOrgs);\n\n const stillValid = physicalOrgs.some(\n (org) => org.id === activePhysicalOrgId,\n );\n if (!stillValid) {\n setActivePhysicalOrgId(physicalOrgs[0]?.id ?? null);\n }\n } catch (err) {\n if (!cancelled) {\n setError(err instanceof Error ? err.message : String(err));\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n }\n\n void run();\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- activePhysicalOrgId/setActivePhysicalOrgId intentionally excluded: they're read/written inside this effect, re-running on every write would loop.\n }, [endpoint, authToken]);\n\n const organization =\n organizations.find((org) => org.id === activePhysicalOrgId) ??\n organizations[0] ??\n null;\n\n return {\n organization,\n organizations,\n loading,\n error,\n selectOrganization: setActivePhysicalOrgId,\n };\n}\n"],"mappings":";;;;AAuBA,IAAM,IAAsB,sNAetB,IAAsC;AAgC5C,SAAgB,IAAqD;CACnE,IAAM,EACJ,kBACA,cACA,wBACA,8BACE,GAAc,EAEZ,CAAC,GAAe,KAAoB,EAExC,EAAE,CAAC,EACC,CAAC,GAAS,KAAc,EAAS,GAAK,EACtC,CAAC,GAAO,KAAY,EAAwB,KAAK,EACjD,IAAyB,EAAO,GAAM,EAEtC,IAAW,EAA6B,EAAc;AAoF5D,QAlFA,QAAgB;EACd,IAAI,IAAY;EAEhB,eAAe,EACb,GACA,GACY;GAUZ,IAAM,IAAQ,OATF,MAAM,MAAM,GAAU;IAChC,QAAQ;IACR,SAAS;KACP,gBAAgB;KAChB,GAAI,IAAY,EAAE,eAAe,UAAU,KAAa,GAAG,EAAE;KAC9D;IACD,aAAa;IACb,MAAM,KAAK,UAAU;KAAE;KAAO;KAAW,CAAC;IAC3C,CAAC,EACsB,MAAM;AAI9B,OAAI,EAAK,QAAQ,OACf,OAAU,MAAM,EAAK,OAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,KAAK,KAAK,CAAC;AAE/D,UAAO,EAAK;;EAGd,eAAe,IAAqB;AAElC,GADA,EAAW,GAAK,EAChB,EAAS,KAAK;AACd,OAAI;IACF,IAAM,IAAO,MAAM,EAIhB,EAAoB;AACvB,QAAI,EAAW;IAEf,IAAI,IACF,EAAK,yBAAyB,QAC3B,MAAQ,EAAI,SAAS,WACvB;AAEH,QAAI,EAAa,WAAW,KAAK,CAAC,EAAuB,SAAS;AAChE,OAAuB,UAAU;KACjC,IAAM,IAAU,MAAM,EAEnB,GAAqC,EACtC,OAAO,EAAE,MAAM,YAAY,EAC5B,CAAC;AACF,SAAI,EAAW;AACf,SAAe,CAAC,EAAQ,yBAAyB;;AAQnD,IALA,EAAiB,EAAa,EAEX,EAAa,MAC7B,MAAQ,EAAI,OAAO,EACrB,IAEC,EAAuB,EAAa,IAAI,MAAM,KAAK;YAE9C,GAAK;AACZ,IAAK,KACH,EAAS,aAAe,QAAQ,EAAI,UAAU,OAAO,EAAI,CAAC;aAEpD;AACR,IAAK,KAAW,EAAW,GAAM;;;AAKrC,SADK,GAAK,QACG;AACX,OAAY;;IAGb,CAAC,GAAU,EAAU,CAAC,EAOlB;EACL,cALA,EAAc,MAAM,MAAQ,EAAI,OAAO,EAAoB,IAC3D,EAAc,MACd;EAIA;EACA;EACA;EACA,oBAAoB;EACrB"}
@@ -1 +1 @@
1
- {"version":3,"file":"AdminReviewPage.d.ts","sourceRoot":"","sources":["../../../src/devportal/pages/AdminReviewPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAipBhC,eAAO,MAAM,eAAe,EAAE,EA2Y7B,CAAC"}
1
+ {"version":3,"file":"AdminReviewPage.d.ts","sourceRoot":"","sources":["../../../src/devportal/pages/AdminReviewPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AA8pBhC,eAAO,MAAM,eAAe,EAAE,EA2Y7B,CAAC"}