@burdenoff/microfe-bigconsole 2026.924.2 → 2026.925.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.
- package/dist/bigconsole/BigConsoleRoot.js +94 -84
- package/dist/bigconsole/BigConsoleRoot.js.map +1 -1
- package/dist/bigconsole/BigConsoleRoutes.js +137 -138
- package/dist/bigconsole/BigConsoleRoutes.js.map +1 -1
- package/dist/bigconsole/assistant/previewController.js +7 -7
- package/dist/bigconsole/components/DrilldownDashboardRenderer.js +17 -17
- package/dist/bigconsole/components/builder/inspector/DataBindingSection.js +32 -32
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js +52 -52
- package/dist/bigconsole/components/dashboard/CreateDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/DashboardCanvas.js +7 -7
- package/dist/bigconsole/components/dashboard/DashboardStatusPill.js +53 -0
- package/dist/bigconsole/components/dashboard/DashboardStatusPill.js.map +1 -0
- package/dist/bigconsole/components/dashboard/DashboardToolbar.js +60 -60
- package/dist/bigconsole/components/dashboard/DrilldownBreadcrumb.js +21 -21
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterChip.js +30 -30
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterEditor.js +36 -36
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/FilterPresetSelector.js +34 -34
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js +38 -38
- package/dist/bigconsole/components/dashboard/GlobalFiltersBar/GlobalFiltersBar.js.map +1 -1
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js +121 -121
- package/dist/bigconsole/components/dashboard/ImportDashboardDialog.js.map +1 -1
- package/dist/bigconsole/components/dashboard/PublishToStoreDialog.js +22 -22
- package/dist/bigconsole/components/dashboard/SavedViewsDropdown/SavedViewsDropdown.js +46 -46
- package/dist/bigconsole/components/dashboard/ShareDialog/EmbedTab.js +53 -53
- package/dist/bigconsole/components/dashboard/TemplatePicker/TemplatePicker.js +1 -1
- package/dist/bigconsole/components/dashboard/WidgetPalette.js +47 -47
- package/dist/bigconsole/components/dashboard/index.js +1 -0
- package/dist/bigconsole/components/datasink/CacheTTLSelector.js +35 -35
- package/dist/bigconsole/components/datasink/DataSinkDeleteDialog.js +18 -18
- package/dist/bigconsole/components/datasink/DataSinkRefreshDialog.js +20 -20
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js +30 -29
- package/dist/bigconsole/components/datasink/DataSinkStatusBadge.js.map +1 -1
- package/dist/bigconsole/components/datasink/ImportDataGuideDialog.js +48 -48
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js +126 -114
- package/dist/bigconsole/components/datasink/ImportDataSinkDialog.js.map +1 -1
- package/dist/bigconsole/components/datasink/RefreshTypeSelector.js +35 -35
- package/dist/bigconsole/components/overview/DashboardGuide.js +214 -0
- package/dist/bigconsole/components/overview/DashboardGuide.js.map +1 -0
- package/dist/bigconsole/components/overview/DataHealthCard.js +97 -0
- package/dist/bigconsole/components/overview/DataHealthCard.js.map +1 -0
- package/dist/bigconsole/components/overview/OverviewQuickActions.js +32 -0
- package/dist/bigconsole/components/overview/OverviewQuickActions.js.map +1 -0
- package/dist/bigconsole/components/overview/OverviewStatCard.js +57 -0
- package/dist/bigconsole/components/overview/OverviewStatCard.js.map +1 -0
- package/dist/bigconsole/components/overview/RecentDashboardsPanel.js +107 -0
- package/dist/bigconsole/components/overview/RecentDashboardsPanel.js.map +1 -0
- package/dist/bigconsole/components/overview/dashboardGuideSteps.js +119 -0
- package/dist/bigconsole/components/overview/dashboardGuideSteps.js.map +1 -0
- package/dist/bigconsole/components/overview/index.js +8 -0
- package/dist/bigconsole/components/overview/overviewModel.js +119 -0
- package/dist/bigconsole/components/overview/overviewModel.js.map +1 -0
- package/dist/bigconsole/components/overview/useOverviewData.js +48 -0
- package/dist/bigconsole/components/overview/useOverviewData.js.map +1 -0
- package/dist/bigconsole/components/parser/DataSinkSelector.js +40 -40
- package/dist/bigconsole/components/parser/ImportParserDialog.js +127 -127
- package/dist/bigconsole/components/parser/ImportParserDialog.js.map +1 -1
- package/dist/bigconsole/components/parser/ParserSelector.js +51 -51
- package/dist/bigconsole/components/preview/AiPreviewContent.js +5 -5
- package/dist/bigconsole/components/preview/AiPreviewMiniPanel.js +32 -32
- package/dist/bigconsole/components/preview/AiPreviewPanel.js +37 -37
- package/dist/bigconsole/components/widgets/ActionConfigDialog.js +13 -13
- package/dist/bigconsole/components/widgets/DrilldownConfigPanel.js +70 -70
- package/dist/bigconsole/components/widgets/PropertiesPanel.js +28 -28
- package/dist/bigconsole/components/widgets/calendar/CalendarWidget.js +25 -25
- package/dist/bigconsole/components/widgets/chart/ChartConfig.js +48 -48
- package/dist/bigconsole/components/widgets/comments/WidgetComments.js +46 -46
- package/dist/bigconsole/components/widgets/event-logs/EventLogViewer.js +61 -61
- package/dist/bigconsole/components/widgets/form/FormWidget.js +36 -36
- package/dist/bigconsole/components/widgets/gauge/GaugeConfig.js +42 -42
- package/dist/bigconsole/components/widgets/heatmap/HeatmapConfig.js +25 -25
- package/dist/bigconsole/components/widgets/kanban/KanbanWidget.js +21 -21
- package/dist/bigconsole/components/widgets/list/ListConfig.js +30 -30
- package/dist/bigconsole/components/widgets/metric-card/MetricCardConfig.js +38 -38
- package/dist/bigconsole/components/widgets/metric-card/SparklineChart.js +9 -9
- package/dist/bigconsole/components/widgets/metric-card/TrendIndicator.js +9 -9
- package/dist/bigconsole/components/widgets/pivot-table/PivotTableWidget.js +49 -49
- package/dist/bigconsole/components/widgets/progress/ProgressConfig.js +39 -39
- package/dist/bigconsole/components/widgets/table/TableConfig.js +73 -73
- package/dist/bigconsole/components/widgets/webhook-config/WebhookConfigPanel.js +64 -64
- package/dist/bigconsole/customWidget/CustomWidgetBuilderSheet.js +10 -10
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js +68 -68
- package/dist/bigconsole/customWidget/CustomWidgetProposalPanel.js.map +1 -1
- package/dist/bigconsole/hooks/useDataSinkOperations.js +92 -89
- package/dist/bigconsole/hooks/useDataSinkOperations.js.map +1 -1
- package/dist/bigconsole/hooks/useImportDataSink.js +96 -91
- package/dist/bigconsole/hooks/useImportDataSink.js.map +1 -1
- package/dist/bigconsole/pages/AdminPage.js +136 -136
- package/dist/bigconsole/pages/DashboardBuilderPage.js +10 -10
- package/dist/bigconsole/pages/DashboardViewPage.js +61 -61
- package/dist/bigconsole/pages/DashboardViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DashboardsPage.js +327 -348
- package/dist/bigconsole/pages/DashboardsPage.js.map +1 -1
- package/dist/bigconsole/pages/DataParsersPage.js +5 -5
- package/dist/bigconsole/pages/DataSinkBuilderPage.js +82 -80
- package/dist/bigconsole/pages/DataSinkBuilderPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinkViewPage.js +83 -83
- package/dist/bigconsole/pages/DataSinkViewPage.js.map +1 -1
- package/dist/bigconsole/pages/DataSinksPage.js +11 -11
- package/dist/bigconsole/pages/DataSourcesPage.js +5 -5
- package/dist/bigconsole/pages/InsightsPage.js +315 -315
- package/dist/bigconsole/pages/InsightsPage.js.map +1 -1
- package/dist/bigconsole/pages/OverviewPage.js +244 -0
- package/dist/bigconsole/pages/OverviewPage.js.map +1 -0
- package/dist/bigconsole/pages/ParserBuilderPage.js +5 -5
- package/dist/bigconsole/pages/ParserViewPage.js +98 -98
- package/dist/bigconsole/pages/ParserViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelineBuilderPage.js +8 -8
- package/dist/bigconsole/pages/PipelineViewPage.js +46 -46
- package/dist/bigconsole/pages/PipelineViewPage.js.map +1 -1
- package/dist/bigconsole/pages/PipelinesPage.js +80 -80
- package/dist/bigconsole/pages/PipelinesPage.js.map +1 -1
- package/dist/bigconsole/pages/SettingsPage.js +70 -70
- package/dist/bigconsole/pages/WidgetDemoPage.js +42 -42
- package/dist/bigconsole/pages/WorkflowViewPage.js +200 -200
- package/dist/bigconsole/pages/WorkflowViewPage.js.map +1 -1
- package/dist/bigconsole/pages/WorkflowsPage.js +78 -78
- package/dist/bigconsole/pages/WorkflowsPage.js.map +1 -1
- package/dist/bigconsole/providers/BigConsoleQuotaProvider.js +36 -35
- package/dist/bigconsole/providers/BigConsoleQuotaProvider.js.map +1 -1
- package/dist/bigconsole/renderers/adapters/AdaptiveCardRenderer.js +34 -34
- package/dist/bigconsole/renderers/adapters/BlockKitRenderer.js +79 -79
- package/dist/bigconsole/renderers/adapters/CustomRenderer.js +46 -46
- package/dist/bigconsole/utils/createDialogParam.js +14 -0
- package/dist/bigconsole/utils/createDialogParam.js.map +1 -0
- package/dist/bigconsole/utils/quota.js +51 -23
- package/dist/bigconsole/utils/quota.js.map +1 -1
- package/dist/generated/global-operations.js +1 -1
- package/dist/generated/wspace-operations.js +285 -222
- package/dist/generated/wspace-operations.js.map +1 -1
- package/dist/shared/hooks/useTr.js +10 -7
- package/dist/shared/hooks/useTr.js.map +1 -1
- package/package.json +1 -1
- package/dist/bigconsole/pages/HomePage.js +0 -318
- package/dist/bigconsole/pages/HomePage.js.map +0 -1
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
import { extractQuotaExhaustedExtensions as e } from "@burdenoff/fe-libs/shared/utils";
|
|
2
2
|
//#region src/bigconsole/utils/quota.ts
|
|
3
|
-
var t = "bigconsole:quota-exhausted", n =
|
|
3
|
+
var t = "bigconsole:quota-exhausted", n = "QUOTA_NOT_PROVISIONED", r = {
|
|
4
|
+
billing: "/billing",
|
|
5
|
+
billingSetup: "/billing/overview"
|
|
6
|
+
}, i = new Set([
|
|
4
7
|
"createbigconsoledashboard",
|
|
5
8
|
"clonedashboard",
|
|
6
9
|
"importdashboard",
|
|
7
10
|
"importbigconsoledashboard",
|
|
8
11
|
"instantiatetemplate",
|
|
9
12
|
"createdashboardfromgeneration"
|
|
10
|
-
]),
|
|
13
|
+
]), a = new Set(["createdashboardview"]), o = new Set([
|
|
11
14
|
"generatedashboardfromprompt",
|
|
12
15
|
"refinegenerateddashboard",
|
|
13
16
|
"regeneratedashboard",
|
|
14
17
|
"conversationaldashboardedit",
|
|
15
18
|
"previewpromptanalysis"
|
|
16
|
-
]),
|
|
17
|
-
function
|
|
19
|
+
]), s = new Set(["bigconsole.projects.count"]), c = new Set(["bigconsole.sessions.count"]), l = new Set(["bigconsole.commands.count"]);
|
|
20
|
+
function u(e) {
|
|
18
21
|
return typeof e == "object" && !!e;
|
|
19
22
|
}
|
|
20
|
-
function
|
|
23
|
+
function d(t) {
|
|
21
24
|
if (Array.isArray(t)) return e({ graphQLErrors: t });
|
|
22
|
-
if (!
|
|
25
|
+
if (!u(t)) return null;
|
|
23
26
|
if ("quotaResult" in t) {
|
|
24
|
-
let e =
|
|
27
|
+
let e = d(t.quotaResult);
|
|
25
28
|
if (e) return e;
|
|
26
29
|
}
|
|
27
30
|
if ("graphQLErrors" in t || "networkError" in t) {
|
|
@@ -29,39 +32,64 @@ function l(t) {
|
|
|
29
32
|
if (n) return n;
|
|
30
33
|
}
|
|
31
34
|
if ("error" in t) {
|
|
32
|
-
let e =
|
|
35
|
+
let e = d(t.error);
|
|
33
36
|
if (e) return e;
|
|
34
37
|
}
|
|
35
38
|
if ("errors" in t && Array.isArray(t.errors)) {
|
|
36
39
|
let n = e({ graphQLErrors: t.errors });
|
|
37
40
|
if (n) return n;
|
|
38
41
|
}
|
|
39
|
-
if ("extensions" in t &&
|
|
42
|
+
if ("extensions" in t && u(t.extensions) && t.extensions.code === "QUOTA_EXHAUSTED") {
|
|
40
43
|
let n = e({ graphQLErrors: [t] });
|
|
41
44
|
if (n) return n;
|
|
42
45
|
}
|
|
43
46
|
return null;
|
|
44
47
|
}
|
|
45
|
-
function
|
|
46
|
-
|
|
48
|
+
function f(e, t = 0) {
|
|
49
|
+
if (t > 5 || !u(e)) return !1;
|
|
50
|
+
if (Array.isArray(e)) return e.some((e) => f(e, t + 1));
|
|
51
|
+
if (u(e.extensions)) {
|
|
52
|
+
let { code: t, errorCode: n } = e.extensions;
|
|
53
|
+
if (t === "QUOTA_NOT_PROVISIONED" || n === "QUOTA_NOT_PROVISIONED") return !0;
|
|
54
|
+
}
|
|
55
|
+
if (typeof e.bodyText == "string") try {
|
|
56
|
+
if (f(JSON.parse(e.bodyText), t + 1)) return !0;
|
|
57
|
+
} catch {}
|
|
58
|
+
return [
|
|
59
|
+
"quotaResult",
|
|
60
|
+
"error",
|
|
61
|
+
"errors",
|
|
62
|
+
"graphQLErrors",
|
|
63
|
+
"networkError",
|
|
64
|
+
"result"
|
|
65
|
+
].some((n) => n in e && f(e[n], t + 1));
|
|
66
|
+
}
|
|
67
|
+
function p(e) {
|
|
68
|
+
let t = Error(f(e) ? n : "QUOTA_EXHAUSTED");
|
|
47
69
|
return t.name = "BigConsoleQuotaError", Object.assign(t, { quotaResult: e });
|
|
48
70
|
}
|
|
49
|
-
function
|
|
50
|
-
return
|
|
71
|
+
function m(e) {
|
|
72
|
+
return d(e) !== null || f(e);
|
|
51
73
|
}
|
|
52
|
-
function
|
|
53
|
-
let
|
|
54
|
-
return
|
|
74
|
+
function h(e, t = "generic") {
|
|
75
|
+
let n = e.quotaName?.toLowerCase(), r = e.field?.toLowerCase();
|
|
76
|
+
return r && i.has(r) || n && s.has(n) ? "project" : r && a.has(r) || n && c.has(n) ? "session" : r && o.has(r) || n && l.has(n) ? "command" : t;
|
|
55
77
|
}
|
|
56
|
-
function
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
78
|
+
function g(e, n = "generic") {
|
|
79
|
+
if (typeof window > "u") return !1;
|
|
80
|
+
if (f(e)) return window.dispatchEvent(new CustomEvent(t, { detail: { kind: "billing-setup" } })), !0;
|
|
81
|
+
let r = d(e);
|
|
82
|
+
return r ? (window.dispatchEvent(new CustomEvent(t, { detail: {
|
|
83
|
+
kind: h(r, n),
|
|
60
84
|
extensions: r
|
|
61
|
-
} })), !0);
|
|
85
|
+
} })), !0) : !1;
|
|
62
86
|
}
|
|
63
|
-
function
|
|
87
|
+
function _(e) {
|
|
64
88
|
switch (e) {
|
|
89
|
+
case "billing-setup": return {
|
|
90
|
+
title: "Set up billing to continue",
|
|
91
|
+
message: "Your organization does not have a billing account yet, so no BigConsole plan is active. Set up billing to activate the free plan, then try again."
|
|
92
|
+
};
|
|
65
93
|
case "project": return {
|
|
66
94
|
title: "Dashboard limit reached",
|
|
67
95
|
message: "You have used all dashboards available on your current BigConsole plan. Upgrade to create, clone, import, or instantiate more dashboards."
|
|
@@ -81,6 +109,6 @@ function m(e) {
|
|
|
81
109
|
}
|
|
82
110
|
}
|
|
83
111
|
//#endregion
|
|
84
|
-
export { t as BIGCONSOLE_QUOTA_EXHAUSTED_EVENT,
|
|
112
|
+
export { r as BIGCONSOLE_BILLING_PATHS, t as BIGCONSOLE_QUOTA_EXHAUSTED_EVENT, p as createBigConsoleQuotaError, _ as getBigConsoleQuotaDialogContent, m as isBigConsoleQuotaError, g as reportBigConsoleQuotaError };
|
|
85
113
|
|
|
86
114
|
//# sourceMappingURL=quota.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"quota.js","names":[],"sources":["../../../src/bigconsole/utils/quota.ts"],"sourcesContent":["import { extractQuotaExhaustedExtensions, type QuotaExhaustedExtensions } from '@burdenoff/fe-libs/shared/utils';\n\nexport const BIGCONSOLE_QUOTA_EXHAUSTED_EVENT = 'bigconsole:quota-exhausted';\n\nexport type BigConsoleQuotaKind = 'project' | 'session' | 'command' | 'generic';\n\nexport interface BigConsoleQuotaExhaustedEventDetail {\n kind: BigConsoleQuotaKind;\n extensions: QuotaExhaustedExtensions;\n}\n\nconst PROJECT_FIELDS = new Set([\n 'createbigconsoledashboard',\n 'clonedashboard',\n 'importdashboard',\n 'importbigconsoledashboard',\n 'instantiatetemplate',\n 'createdashboardfromgeneration',\n]);\nconst SESSION_FIELDS = new Set(['createdashboardview']);\nconst COMMAND_FIELDS = new Set([\n 'generatedashboardfromprompt',\n 'refinegenerateddashboard',\n 'regeneratedashboard',\n 'conversationaldashboardedit',\n 'previewpromptanalysis',\n]);\nconst PROJECT_QUOTA_NAMES = new Set(['bigconsole.projects.count']);\nconst SESSION_QUOTA_NAMES = new Set(['bigconsole.sessions.count']);\nconst COMMAND_QUOTA_NAMES = new Set(['bigconsole.commands.count']);\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object';\n}\n\nexport function extractBigConsoleQuotaExtensions(value: unknown): QuotaExhaustedExtensions | null {\n if (Array.isArray(value)) {\n return extractQuotaExhaustedExtensions({ graphQLErrors: value });\n }\n\n if (!isObject(value)) {\n return null;\n }\n\n if ('quotaResult' in value) {\n const fromQuotaResult = extractBigConsoleQuotaExtensions(value.quotaResult);\n if (fromQuotaResult) return fromQuotaResult;\n }\n\n if ('graphQLErrors' in value || 'networkError' in value) {\n const fromApolloError = extractQuotaExhaustedExtensions(value);\n if (fromApolloError) return fromApolloError;\n }\n\n if ('error' in value) {\n const fromError = extractBigConsoleQuotaExtensions(value.error);\n if (fromError) return fromError;\n }\n\n if ('errors' in value && Array.isArray(value.errors)) {\n const fromErrors = extractQuotaExhaustedExtensions({ graphQLErrors: value.errors });\n if (fromErrors) return fromErrors;\n }\n\n if ('extensions' in value && isObject(value.extensions) && value.extensions.code === 'QUOTA_EXHAUSTED') {\n const fromGraphQLError = extractQuotaExhaustedExtensions({ graphQLErrors: [value] });\n if (fromGraphQLError) return fromGraphQLError;\n }\n\n return null;\n}\n\nexport function createBigConsoleQuotaError(value: unknown): Error {\n const error = new Error('QUOTA_EXHAUSTED');\n error.name = 'BigConsoleQuotaError';\n return Object.assign(error, { quotaResult: value });\n}\n\nexport function isBigConsoleQuotaError(value: unknown): boolean {\n return extractBigConsoleQuotaExtensions(value) !== null;\n}\n\nexport function inferBigConsoleQuotaKind(\n extensions: QuotaExhaustedExtensions,\n fallback: BigConsoleQuotaKind = 'generic'\n): BigConsoleQuotaKind {\n const quotaName = extensions.quotaName?.toLowerCase();\n const field = extensions.field?.toLowerCase();\n\n if ((field && PROJECT_FIELDS.has(field)) || (quotaName && PROJECT_QUOTA_NAMES.has(quotaName))) {\n return 'project';\n }\n\n if ((field && SESSION_FIELDS.has(field)) || (quotaName && SESSION_QUOTA_NAMES.has(quotaName))) {\n return 'session';\n }\n\n if ((field && COMMAND_FIELDS.has(field)) || (quotaName && COMMAND_QUOTA_NAMES.has(quotaName))) {\n return 'command';\n }\n\n return fallback;\n}\n\nexport function reportBigConsoleQuotaError(value: unknown, fallbackKind: BigConsoleQuotaKind = 'generic'): boolean {\n const extensions = extractBigConsoleQuotaExtensions(value);\n if (!extensions) return false;\n if (typeof window === 'undefined') return false;\n\n window.dispatchEvent(\n new CustomEvent<BigConsoleQuotaExhaustedEventDetail>(BIGCONSOLE_QUOTA_EXHAUSTED_EVENT, {\n detail: {\n kind: inferBigConsoleQuotaKind(extensions, fallbackKind),\n extensions,\n },\n })\n );\n\n return true;\n}\n\nexport function getBigConsoleQuotaDialogContent(kind: BigConsoleQuotaKind): {\n title: string;\n message: string;\n} {\n switch (kind) {\n case 'project':\n return {\n title: 'Dashboard limit reached',\n message:\n 'You have used all dashboards available on your current BigConsole plan. Upgrade to create, clone, import, or instantiate more dashboards.',\n };\n case 'session':\n return {\n title: 'Saved view limit reached',\n message:\n 'You have used all saved views available on your current BigConsole plan. Upgrade to save more dashboard views.',\n };\n case 'command':\n return {\n title: 'AI command limit reached',\n message:\n 'You have used all AI commands available on your current BigConsole plan. Upgrade to generate and refine more dashboards.',\n };\n case 'generic':\n default:\n return {\n title: 'Quota reached',\n message: 'You have reached a BigConsole usage limit on your current plan. Upgrade to continue.',\n };\n }\n}\n"],"mappings":";;AAEA,IAAa,IAAmC,8BAS1C,IAAiB,IAAI,IAAI;CAC7B;CACA;CACA;CACA;CACA;CACA;CACD,CAAC,EACI,IAAiB,IAAI,IAAI,CAAC,sBAAsB,CAAC,EACjD,IAAiB,IAAI,IAAI;CAC7B;CACA;CACA;CACA;CACA;CACD,CAAC,EACI,IAAsB,IAAI,IAAI,CAAC,4BAA4B,CAAC,EAC5D,IAAsB,IAAI,IAAI,CAAC,4BAA4B,CAAC,EAC5D,IAAsB,IAAI,IAAI,CAAC,4BAA4B,CAAC;AAElE,SAAS,EAAS,GAAkD;AAClE,QAAyB,OAAO,KAAU,cAAnC;;AAGT,SAAgB,EAAiC,GAAiD;AAChG,KAAI,MAAM,QAAQ,EAAM,CACtB,QAAO,EAAgC,EAAE,eAAe,GAAO,CAAC;AAGlE,KAAI,CAAC,EAAS,EAAM,CAClB,QAAO;AAGT,KAAI,iBAAiB,GAAO;EAC1B,IAAM,IAAkB,EAAiC,EAAM,YAAY;AAC3E,MAAI,EAAiB,QAAO;;AAG9B,KAAI,mBAAmB,KAAS,kBAAkB,GAAO;EACvD,IAAM,IAAkB,EAAgC,EAAM;AAC9D,MAAI,EAAiB,QAAO;;AAG9B,KAAI,WAAW,GAAO;EACpB,IAAM,IAAY,EAAiC,EAAM,MAAM;AAC/D,MAAI,EAAW,QAAO;;AAGxB,KAAI,YAAY,KAAS,MAAM,QAAQ,EAAM,OAAO,EAAE;EACpD,IAAM,IAAa,EAAgC,EAAE,eAAe,EAAM,QAAQ,CAAC;AACnF,MAAI,EAAY,QAAO;;AAGzB,KAAI,gBAAgB,KAAS,EAAS,EAAM,WAAW,IAAI,EAAM,WAAW,SAAS,mBAAmB;EACtG,IAAM,IAAmB,EAAgC,EAAE,eAAe,CAAC,EAAM,EAAE,CAAC;AACpF,MAAI,EAAkB,QAAO;;AAG/B,QAAO;;AAGT,SAAgB,EAA2B,GAAuB;CAChE,IAAM,IAAQ,gBAAI,MAAM,kBAAkB;AAE1C,QADA,EAAM,OAAO,wBACN,OAAO,OAAO,GAAO,EAAE,aAAa,GAAO,CAAC;;AAGrD,SAAgB,EAAuB,GAAyB;AAC9D,QAAO,EAAiC,EAAM,KAAK;;AAGrD,SAAgB,EACd,GACA,IAAgC,WACX;CACrB,IAAM,IAAY,EAAW,WAAW,aAAa,EAC/C,IAAQ,EAAW,OAAO,aAAa;AAc7C,QAZK,KAAS,EAAe,IAAI,EAAM,IAAM,KAAa,EAAoB,IAAI,EAAU,GACnF,YAGJ,KAAS,EAAe,IAAI,EAAM,IAAM,KAAa,EAAoB,IAAI,EAAU,GACnF,YAGJ,KAAS,EAAe,IAAI,EAAM,IAAM,KAAa,EAAoB,IAAI,EAAU,GACnF,YAGF;;AAGT,SAAgB,EAA2B,GAAgB,IAAoC,WAAoB;CACjH,IAAM,IAAa,EAAiC,EAAM;AAa1D,QAZI,CAAC,KACD,OAAO,SAAW,MAAoB,MAE1C,OAAO,cACL,IAAI,YAAiD,GAAkC,EACrF,QAAQ;EACN,MAAM,EAAyB,GAAY,EAAa;EACxD;EACD,EACF,CAAC,CACH,EAEM;;AAGT,SAAgB,EAAgC,GAG9C;AACA,SAAQ,GAAR;EACE,KAAK,UACH,QAAO;GACL,OAAO;GACP,SACE;GACH;EACH,KAAK,UACH,QAAO;GACL,OAAO;GACP,SACE;GACH;EACH,KAAK,UACH,QAAO;GACL,OAAO;GACP,SACE;GACH;EAEH,QACE,QAAO;GACL,OAAO;GACP,SAAS;GACV"}
|
|
1
|
+
{"version":3,"file":"quota.js","names":[],"sources":["../../../src/bigconsole/utils/quota.ts"],"sourcesContent":["import { extractQuotaExhaustedExtensions, type QuotaExhaustedExtensions } from '@burdenoff/fe-libs/shared/utils';\n\nexport const BIGCONSOLE_QUOTA_EXHAUSTED_EVENT = 'bigconsole:quota-exhausted';\n\n/**\n * `billing-setup` is not a spent quota: the gateway answered `QUOTA_NOT_PROVISIONED`\n * because the organisation has no billing account yet, so no free plan covers the\n * metered mutation. It is fixed by setting billing up, not by upgrading (BOFF-7913).\n */\nexport type BigConsoleQuotaKind = 'project' | 'session' | 'command' | 'generic' | 'billing-setup';\n\nexport interface BigConsoleQuotaExhaustedEventDetail {\n kind: BigConsoleQuotaKind;\n /** Present for exhausted quotas; a not-provisioned refusal carries no usage figures. */\n extensions?: QuotaExhaustedExtensions;\n}\n\nexport const QUOTA_NOT_PROVISIONED_CODE = 'QUOTA_NOT_PROVISIONED';\n\n/** Where each dialog kind sends the user. */\nexport const BIGCONSOLE_BILLING_PATHS: Record<'billing' | 'billingSetup', string> = {\n billing: '/billing',\n billingSetup: '/billing/overview',\n};\n\nconst PROJECT_FIELDS = new Set([\n 'createbigconsoledashboard',\n 'clonedashboard',\n 'importdashboard',\n 'importbigconsoledashboard',\n 'instantiatetemplate',\n 'createdashboardfromgeneration',\n]);\nconst SESSION_FIELDS = new Set(['createdashboardview']);\nconst COMMAND_FIELDS = new Set([\n 'generatedashboardfromprompt',\n 'refinegenerateddashboard',\n 'regeneratedashboard',\n 'conversationaldashboardedit',\n 'previewpromptanalysis',\n]);\nconst PROJECT_QUOTA_NAMES = new Set(['bigconsole.projects.count']);\nconst SESSION_QUOTA_NAMES = new Set(['bigconsole.sessions.count']);\nconst COMMAND_QUOTA_NAMES = new Set(['bigconsole.commands.count']);\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object';\n}\n\nexport function extractBigConsoleQuotaExtensions(value: unknown): QuotaExhaustedExtensions | null {\n if (Array.isArray(value)) {\n return extractQuotaExhaustedExtensions({ graphQLErrors: value });\n }\n\n if (!isObject(value)) {\n return null;\n }\n\n if ('quotaResult' in value) {\n const fromQuotaResult = extractBigConsoleQuotaExtensions(value.quotaResult);\n if (fromQuotaResult) return fromQuotaResult;\n }\n\n if ('graphQLErrors' in value || 'networkError' in value) {\n const fromApolloError = extractQuotaExhaustedExtensions(value);\n if (fromApolloError) return fromApolloError;\n }\n\n if ('error' in value) {\n const fromError = extractBigConsoleQuotaExtensions(value.error);\n if (fromError) return fromError;\n }\n\n if ('errors' in value && Array.isArray(value.errors)) {\n const fromErrors = extractQuotaExhaustedExtensions({ graphQLErrors: value.errors });\n if (fromErrors) return fromErrors;\n }\n\n if ('extensions' in value && isObject(value.extensions) && value.extensions.code === 'QUOTA_EXHAUSTED') {\n const fromGraphQLError = extractQuotaExhaustedExtensions({ graphQLErrors: [value] });\n if (fromGraphQLError) return fromGraphQLError;\n }\n\n return null;\n}\n\n/**\n * Whether a GraphQL error code of `QUOTA_NOT_PROVISIONED` is reachable from `value`.\n *\n * Walks the same shapes as {@link extractBigConsoleQuotaExtensions} — Apollo results\n * (`error`, `errors`), legacy Apollo errors (`graphQLErrors`, `networkError.result`),\n * wrapped hook errors (`quotaResult`) and a bare GraphQL error — plus the JSON\n * `bodyText` of an Apollo `ServerError`, which is how a 429 whose body was not parsed\n * as a GraphQL response reaches the caller. An `Error.message` is deliberately not\n * matched: prose is not a code.\n */\nexport function isBigConsoleBillingNotProvisionedError(value: unknown, depth = 0): boolean {\n if (depth > 5 || !isObject(value)) return false;\n if (Array.isArray(value)) {\n return value.some((entry) => isBigConsoleBillingNotProvisionedError(entry, depth + 1));\n }\n\n if (isObject(value.extensions)) {\n const { code, errorCode } = value.extensions;\n if (code === QUOTA_NOT_PROVISIONED_CODE || errorCode === QUOTA_NOT_PROVISIONED_CODE) return true;\n }\n\n if (typeof value.bodyText === 'string') {\n // Parsed and walked structurally, so a diagnostic string that merely\n // mentions the code (e.g. in a `details` field) does not match.\n try {\n const parsed: unknown = JSON.parse(value.bodyText);\n if (isBigConsoleBillingNotProvisionedError(parsed, depth + 1)) return true;\n } catch {\n // Not JSON: not a structured GraphQL error response.\n }\n }\n\n return ['quotaResult', 'error', 'errors', 'graphQLErrors', 'networkError', 'result'].some(\n (key) => key in value && isBigConsoleBillingNotProvisionedError(value[key], depth + 1)\n );\n}\n\nexport function createBigConsoleQuotaError(value: unknown): Error {\n const error = new Error(\n isBigConsoleBillingNotProvisionedError(value) ? QUOTA_NOT_PROVISIONED_CODE : 'QUOTA_EXHAUSTED'\n );\n error.name = 'BigConsoleQuotaError';\n return Object.assign(error, { quotaResult: value });\n}\n\n/** An exhausted quota, or a quota that was never provisioned because billing is not set up. */\nexport function isBigConsoleQuotaError(value: unknown): boolean {\n return extractBigConsoleQuotaExtensions(value) !== null || isBigConsoleBillingNotProvisionedError(value);\n}\n\nexport function inferBigConsoleQuotaKind(\n extensions: QuotaExhaustedExtensions,\n fallback: BigConsoleQuotaKind = 'generic'\n): BigConsoleQuotaKind {\n const quotaName = extensions.quotaName?.toLowerCase();\n const field = extensions.field?.toLowerCase();\n\n if ((field && PROJECT_FIELDS.has(field)) || (quotaName && PROJECT_QUOTA_NAMES.has(quotaName))) {\n return 'project';\n }\n\n if ((field && SESSION_FIELDS.has(field)) || (quotaName && SESSION_QUOTA_NAMES.has(quotaName))) {\n return 'session';\n }\n\n if ((field && COMMAND_FIELDS.has(field)) || (quotaName && COMMAND_QUOTA_NAMES.has(quotaName))) {\n return 'command';\n }\n\n return fallback;\n}\n\nexport function reportBigConsoleQuotaError(value: unknown, fallbackKind: BigConsoleQuotaKind = 'generic'): boolean {\n if (typeof window === 'undefined') return false;\n\n // Checked first: an organisation without billing has no plan at all, so an\n // \"upgrade\" message would send them to buy something that would not help.\n if (isBigConsoleBillingNotProvisionedError(value)) {\n window.dispatchEvent(\n new CustomEvent<BigConsoleQuotaExhaustedEventDetail>(BIGCONSOLE_QUOTA_EXHAUSTED_EVENT, {\n detail: { kind: 'billing-setup' },\n })\n );\n return true;\n }\n\n const extensions = extractBigConsoleQuotaExtensions(value);\n if (!extensions) return false;\n\n window.dispatchEvent(\n new CustomEvent<BigConsoleQuotaExhaustedEventDetail>(BIGCONSOLE_QUOTA_EXHAUSTED_EVENT, {\n detail: {\n kind: inferBigConsoleQuotaKind(extensions, fallbackKind),\n extensions,\n },\n })\n );\n\n return true;\n}\n\nexport function getBigConsoleQuotaDialogContent(kind: BigConsoleQuotaKind): {\n title: string;\n message: string;\n} {\n switch (kind) {\n case 'billing-setup':\n return {\n title: 'Set up billing to continue',\n message:\n 'Your organization does not have a billing account yet, so no BigConsole plan is active. Set up billing to activate the free plan, then try again.',\n };\n case 'project':\n return {\n title: 'Dashboard limit reached',\n message:\n 'You have used all dashboards available on your current BigConsole plan. Upgrade to create, clone, import, or instantiate more dashboards.',\n };\n case 'session':\n return {\n title: 'Saved view limit reached',\n message:\n 'You have used all saved views available on your current BigConsole plan. Upgrade to save more dashboard views.',\n };\n case 'command':\n return {\n title: 'AI command limit reached',\n message:\n 'You have used all AI commands available on your current BigConsole plan. Upgrade to generate and refine more dashboards.',\n };\n case 'generic':\n default:\n return {\n title: 'Quota reached',\n message: 'You have reached a BigConsole usage limit on your current plan. Upgrade to continue.',\n };\n }\n}\n"],"mappings":"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"}
|