@lunora/studio 1.0.0-alpha.7 → 1.0.0-alpha.8

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 (34) hide show
  1. package/dist/index.d.ts +4 -3
  2. package/dist/index.js +24 -24
  3. package/dist/mount.d.ts +1 -1
  4. package/dist/mount.js +1 -1
  5. package/dist/packem_shared/{ADMIN_FUNCTIONS-DmBqMZ-z.js → ADMIN_FUNCTIONS-DjXgvJb6.js} +1 -0
  6. package/dist/packem_shared/{ApiDocsPanel-C5-yJ1p7.js → ApiDocsPanel-yVSGHK3H.js} +1 -1
  7. package/dist/packem_shared/{ApiTab-W3no0KOj.js → ApiTab-rwttyQ1-.js} +1 -1
  8. package/dist/packem_shared/{AuditPanel-Bq4o_IqT.js → AuditPanel-BqXZAsu_.js} +1 -1
  9. package/dist/packem_shared/{DataBrowser-CtBe1So9.js → DataBrowser-Ck_7QwNK.js} +1 -1
  10. package/dist/packem_shared/{ExportImportPanel-dxY56TDF.js → ExportImportPanel-Dq6rj0tI.js} +1 -1
  11. package/dist/packem_shared/{FileBrowser-Dhy4zES8.js → FileBrowser-0pCpdKPE.js} +1 -1
  12. package/dist/packem_shared/{FunctionRunner--fQJRPAD.js → FunctionRunner-7NH3KcTg.js} +1 -1
  13. package/dist/packem_shared/{FunctionStatsPanel-BjRUA_G3.js → FunctionStatsPanel-Cn_EBpDy.js} +1 -1
  14. package/dist/packem_shared/{HealthPanel-PxclMWmA.js → HealthPanel-CQ4LzVET.js} +1 -1
  15. package/dist/packem_shared/{HomePanel-Cw16stjq.js → HomePanel-CP0lN1eF.js} +1 -1
  16. package/dist/packem_shared/{InsightsPanel-CWS_C-xW.js → InsightsPanel-DzNtoz7k.js} +1 -1
  17. package/dist/packem_shared/{LogsPanel-CTW8CFcM.js → LogsPanel-C3W0mabf.js} +1 -1
  18. package/dist/packem_shared/{MailPanel-BwkvfIHF.js → MailPanel-CoEfWkCh.js} +1 -1
  19. package/dist/packem_shared/{MetricsPanel-BLuOhZQ4.js → MetricsPanel-CujtUfpl.js} +1 -1
  20. package/dist/packem_shared/{MigrationsPanel-DT3lnwHF.js → MigrationsPanel-RX5qIFSr.js} +1 -1
  21. package/dist/packem_shared/{PitrPanel-CdErL7EJ.js → PitrPanel-LJGNP_IX.js} +1 -1
  22. package/dist/packem_shared/{SchemaViewer-LJDcmNIO.js → SchemaViewer-Bam6ylvw.js} +1 -1
  23. package/dist/packem_shared/{SecurityAdvisorPanel-C_ETsPih.js → SecurityAdvisorPanel-DHr_bI38.js} +1 -1
  24. package/dist/packem_shared/{SettingsPanel-C0uLRf5P.js → SettingsPanel-CBXQpYQA.js} +1 -1
  25. package/dist/packem_shared/{SqlEditorPanel-CguV7otm.js → SqlEditorPanel-D5wMIxcg.js} +2 -2
  26. package/dist/packem_shared/Studio-DkgODWD3.js +33 -0
  27. package/dist/packem_shared/{StudioApp-D4azxYBu.js → StudioApp-ColQCvC_.js} +1 -1
  28. package/dist/packem_shared/{TableEditor-ChfUOZec.js → TableEditor-B8K5nUna.js} +1 -1
  29. package/dist/packem_shared/{app.d-CCmwDEVs.d.ts → app.d-Nbhpihxv.d.ts} +1 -1
  30. package/dist/packem_shared/{sql-editor-panel-BFRpzj6r.js → sql-editor-panel-Smfl_FDF.js} +1 -1
  31. package/dist/packem_shared/{studio-H9fuQgSj.js → studio-Be28OqIx.js} +611 -501
  32. package/dist/standalone/studio.js +108 -108
  33. package/package.json +6 -6
  34. package/dist/packem_shared/Studio-BmSGSIuY.js +0 -33
@@ -20,43 +20,43 @@ import { B as Button } from './button-BhsN2uZH.js';
20
20
  import { Dialog } from '@base-ui/react/dialog';
21
21
  import { Tooltip as Tooltip$1 } from '@base-ui/react/tooltip';
22
22
  import { S as Skeleton } from './reference-view-B4E49Lip.js';
23
- import { InsightsPanel } from './InsightsPanel-CWS_C-xW.js';
23
+ import { InsightsPanel } from './InsightsPanel-DzNtoz7k.js';
24
24
  import { useLunora } from '@lunora/react';
25
25
  import { C as Card, a as CardContent, b as CardHeader, c as CardTitle, d as CardDescription } from './card-DURq3ElK.js';
26
26
  import { E as EmptyState } from './empty-state-DY_oe0k6.js';
27
27
  import { T as Table, a as TableHeader, b as TableRow, c as TableHead, d as TableBody, e as TableCell } from './table-_RzNvy3R.js';
28
- import { ADMIN_FUNCTIONS } from './ADMIN_FUNCTIONS-DmBqMZ-z.js';
28
+ import { ADMIN_FUNCTIONS } from './ADMIN_FUNCTIONS-DjXgvJb6.js';
29
29
  import { f as fireAndForget, c as callOptions, e as errorMessage, a as adminRef, h as formatCell, b as formatTimestamp, g as copyToClipboard } from './internal-rXJEAhXS.js';
30
- import SecurityAdvisorPanel from './SecurityAdvisorPanel-C_ETsPih.js';
31
- import { createAnalyticsSqlClient } from '@lunora/analytics';
32
- import ApiTab from './ApiTab-W3no0KOj.js';
30
+ import SecurityAdvisorPanel from './SecurityAdvisorPanel-DHr_bI38.js';
31
+ import { createAnalyticsSqlClient } from '@lunora/bindings/analytics';
32
+ import ApiTab from './ApiTab-rwttyQ1-.js';
33
33
  import { useAutoRefresh } from './DEFAULT_AUTO_REFRESH_MS-Vxwaxx51.js';
34
34
  import useDebounced from './useDebounced-Dxncpg6z.js';
35
35
  import { L as Label } from './label-D8ykjn5J.js';
36
36
  import { M as ModalShell } from './grid-features-CzUfqgsM.js';
37
- import { TableEditor } from './TableEditor-ChfUOZec.js';
38
- import { ExportImportPanel } from './ExportImportPanel-dxY56TDF.js';
39
- import { MigrationsPanel } from './MigrationsPanel-DT3lnwHF.js';
40
- import { PitrPanel } from './PitrPanel-CdErL7EJ.js';
41
- import { FunctionRunner } from './FunctionRunner--fQJRPAD.js';
42
- import { FunctionStatsPanel } from './FunctionStatsPanel-BjRUA_G3.js';
43
- import { HomePanel } from './HomePanel-Cw16stjq.js';
44
- import { AuditPanel } from './AuditPanel-Bq4o_IqT.js';
37
+ import { TableEditor } from './TableEditor-B8K5nUna.js';
38
+ import { ExportImportPanel } from './ExportImportPanel-Dq6rj0tI.js';
39
+ import { MigrationsPanel } from './MigrationsPanel-RX5qIFSr.js';
40
+ import { PitrPanel } from './PitrPanel-LJGNP_IX.js';
41
+ import { FunctionRunner } from './FunctionRunner-7NH3KcTg.js';
42
+ import { FunctionStatsPanel } from './FunctionStatsPanel-Cn_EBpDy.js';
43
+ import { HomePanel } from './HomePanel-CP0lN1eF.js';
44
+ import { AuditPanel } from './AuditPanel-BqXZAsu_.js';
45
45
  import { C as CLOUDFLARE_OBSERVABILITY_URL } from './cf-links-2cktDedA.js';
46
- import { LogsPanel } from './LogsPanel-CTW8CFcM.js';
47
- import { MailPanel } from './MailPanel-BwkvfIHF.js';
46
+ import { LogsPanel } from './LogsPanel-C3W0mabf.js';
47
+ import { MailPanel } from './MailPanel-CoEfWkCh.js';
48
48
  import { ConfirmButton } from './ConfirmButton-C2eVi2Qv.js';
49
49
  import { ScheduledJobs } from './ScheduledJobs-CabfKbyM.js';
50
50
  import { ShardInput } from './ShardInput-gx_DZXXn.js';
51
51
  import { L as LiveError } from './live-status-FZ0psC1z.js';
52
52
  import { u as useLiveAdmin } from './use-live-admin-Dq6g3daN.js';
53
53
  import { T as Textarea } from './textarea-D3gaCU_-.js';
54
- import { u as usePersistedList, A as Alert, a as SqlResultChart, n as newId, S as SqlEditorPanel } from './sql-editor-panel-BFRpzj6r.js';
55
- import { HealthPanel } from './HealthPanel-PxclMWmA.js';
56
- import { MetricsPanel } from './MetricsPanel-BLuOhZQ4.js';
57
- import { SchemaViewer } from './SchemaViewer-LJDcmNIO.js';
58
- import { SettingsPanel } from './SettingsPanel-C0uLRf5P.js';
59
- import { FileBrowser } from './FileBrowser-Dhy4zES8.js';
54
+ import { u as usePersistedList, A as Alert, a as SqlResultChart, n as newId, S as SqlEditorPanel } from './sql-editor-panel-Smfl_FDF.js';
55
+ import { HealthPanel } from './HealthPanel-CQ4LzVET.js';
56
+ import { MetricsPanel } from './MetricsPanel-CujtUfpl.js';
57
+ import { SchemaViewer } from './SchemaViewer-Bam6ylvw.js';
58
+ import { SettingsPanel } from './SettingsPanel-CBXQpYQA.js';
59
+ import { FileBrowser } from './FileBrowser-0pCpdKPE.js';
60
60
  import { StudioI18nProvider } from './StudioI18nProvider-B-tDCZIi.js';
61
61
  import { CommandPalette, openCommandPalette } from './CommandPalette-BtgkBzZI.js';
62
62
 
@@ -6366,6 +6366,89 @@ const PermissionsPanel = ({
6366
6366
  }, void 0, true);
6367
6367
  };
6368
6368
 
6369
+ const LIST_QUEUES = adminRef(ADMIN_FUNCTIONS.listQueues);
6370
+ const QueuesPanel = () => {
6371
+ const client = useLunora();
6372
+ const t = useT();
6373
+ const [data, setData] = useState(null);
6374
+ const [error, setError] = useState(null);
6375
+ const refresh = useCallback(async () => {
6376
+ try {
6377
+ const result = await client.query(LIST_QUEUES, {}, callOptions(""));
6378
+ setData({
6379
+ queues: Array.isArray(result.queues) ? result.queues : []
6380
+ });
6381
+ setError(null);
6382
+ } catch (error_) {
6383
+ setError(errorMessage(error_));
6384
+ }
6385
+ }, [client]);
6386
+ useEffect(() => {
6387
+ fireAndForget(refresh());
6388
+ }, [refresh]);
6389
+ const queues = useMemo(() => data === null ? [] : [...data.queues].toSorted((a, b) => a.exportName.localeCompare(b.exportName)), [data]);
6390
+ return /* @__PURE__ */ jsxDEV("div", {
6391
+ className: "flex flex-col gap-6",
6392
+ "data-testid": "lunora-queues-panel",
6393
+ children: [error !== null && /* @__PURE__ */ jsxDEV("p", {
6394
+ className: "text-sm text-destructive",
6395
+ "data-testid": "queues-error",
6396
+ role: "alert",
6397
+ children: error
6398
+ }, void 0, false), /* @__PURE__ */ jsxDEV("p", {
6399
+ className: "text-sm text-muted-foreground",
6400
+ children: t("Queues are declared in code with defineQueue. Enqueue from a mutation or action with ctx.queues.<name>.send(...); push consumers process batches in the worker.")
6401
+ }, void 0, false), data !== null && queues.length === 0 ? /* @__PURE__ */ jsxDEV(EmptyState, {
6402
+ description: t("No defineQueue is declared in lunora/queues.ts in this deployment. Add one to offload async work to a Cloudflare Queue."),
6403
+ testId: "queues-empty",
6404
+ title: t("No queues defined")
6405
+ }, void 0, false) : /* @__PURE__ */ jsxDEV(Card, {
6406
+ className: "overflow-hidden py-0",
6407
+ children: /* @__PURE__ */ jsxDEV(CardContent, {
6408
+ className: "px-0",
6409
+ children: /* @__PURE__ */ jsxDEV(Table, {
6410
+ "data-testid": "queues-table",
6411
+ children: [/* @__PURE__ */ jsxDEV(TableHeader, {
6412
+ children: /* @__PURE__ */ jsxDEV(TableRow, {
6413
+ children: [/* @__PURE__ */ jsxDEV(TableHead, {
6414
+ children: t("Export")
6415
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableHead, {
6416
+ children: t("Queue")
6417
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableHead, {
6418
+ children: t("Mode")
6419
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableHead, {
6420
+ children: t("Binding")
6421
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableHead, {
6422
+ children: t("Dead-letter")
6423
+ }, void 0, false)]
6424
+ }, void 0, true)
6425
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableBody, {
6426
+ children: queues.map((queue) => /* @__PURE__ */ jsxDEV(TableRow, {
6427
+ "data-testid": `queues-row-${queue.exportName}`,
6428
+ children: [/* @__PURE__ */ jsxDEV(TableCell, {
6429
+ className: "font-mono text-xs",
6430
+ children: queue.exportName
6431
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableCell, {
6432
+ className: "font-mono text-xs text-muted-foreground",
6433
+ children: queue.name
6434
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableCell, {
6435
+ className: "font-mono text-xs text-muted-foreground",
6436
+ children: queue.mode
6437
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableCell, {
6438
+ className: "font-mono text-xs text-muted-foreground",
6439
+ children: queue.binding
6440
+ }, void 0, false), /* @__PURE__ */ jsxDEV(TableCell, {
6441
+ className: "font-mono text-xs text-muted-foreground",
6442
+ children: queue.deadLetterQueue ?? "—"
6443
+ }, void 0, false)]
6444
+ }, queue.exportName, true))
6445
+ }, void 0, false)]
6446
+ }, void 0, true)
6447
+ }, void 0, false)
6448
+ }, void 0, false)]
6449
+ }, void 0, true);
6450
+ };
6451
+
6369
6452
  const RUN_SQL = adminRef(ADMIN_FUNCTIONS.runSql);
6370
6453
  const useRunSql = (sql, shardKey) => {
6371
6454
  const client = useLunora();
@@ -8050,6 +8133,7 @@ const STUDIO_FEATURES = adminRef(ADMIN_FUNCTIONS.studioFeatures);
8050
8133
  const DEFAULT_STUDIO_FEATURES = {
8051
8134
  mail: true,
8052
8135
  payments: true,
8136
+ queues: true,
8053
8137
  scheduler: true,
8054
8138
  storage: true,
8055
8139
  vectors: true,
@@ -8064,6 +8148,7 @@ const coerceFeatures = (raw) => {
8064
8148
  return {
8065
8149
  mail: flag("mail"),
8066
8150
  payments: flag("payments"),
8151
+ queues: flag("queues"),
8067
8152
  scheduler: flag("scheduler"),
8068
8153
  storage: flag("storage"),
8069
8154
  vectors: flag("vectors"),
@@ -8165,6 +8250,9 @@ const TAB_ICONS = {
8165
8250
  pitr: /* @__PURE__ */ jsxDEV("path", {
8166
8251
  d: "M12 21a9 9 0 1 0-9-9M12 7.5V12l3 2M3 12l-2-2m2 2 2-2"
8167
8252
  }, void 0, false),
8253
+ queues: /* @__PURE__ */ jsxDEV("path", {
8254
+ d: "M4 6h16M4 10h16M4 14h10M4 18h10m4-2 3 2-3 2v-4Z"
8255
+ }, void 0, false),
8168
8256
  realtime: /* @__PURE__ */ jsxDEV("path", {
8169
8257
  d: "M5 12a7 7 0 0 1 14 0M8 12a4 4 0 0 1 8 0M12 12v8m0-8a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"
8170
8258
  }, void 0, false),
@@ -8207,7 +8295,7 @@ const NAV_GROUPS = [{
8207
8295
  tabs: ["data", "sql", "schema", "migrations", "vectors", "pitr", "export"]
8208
8296
  }, {
8209
8297
  key: "functions",
8210
- tabs: ["functions", "api", "workflows"]
8298
+ tabs: ["functions", "api", "workflows", "queues"]
8211
8299
  }, {
8212
8300
  key: "auth",
8213
8301
  tabs: ["users", "organizations", "authSessions", "authConfig"]
@@ -8231,6 +8319,7 @@ const TAB_FEATURE = {
8231
8319
  files: "storage",
8232
8320
  mail: "mail",
8233
8321
  payments: "payments",
8322
+ queues: "queues",
8234
8323
  schedule: "scheduler",
8235
8324
  storageRules: "storage",
8236
8325
  vectors: "vectors",
@@ -8266,7 +8355,7 @@ const TabIcon = (t0) => {
8266
8355
  }
8267
8356
  return t2;
8268
8357
  };
8269
- const TABS = ["home", "data", "sql", "functions", "api", "workflows", "schema", "migrations", "vectors", "export", "pitr", "users", "organizations", "authSessions", "authConfig", "files", "storageRules", "dashboards", "metrics", "analytics", "health", "security", "rls", "permissions", "insights", "logs", "realtime", "mail", "payments", "audit", "schedule", "drains", "settings"];
8358
+ const TABS = ["home", "data", "sql", "functions", "api", "workflows", "queues", "schema", "migrations", "vectors", "export", "pitr", "users", "organizations", "authSessions", "authConfig", "files", "storageRules", "dashboards", "metrics", "analytics", "health", "security", "rls", "permissions", "insights", "logs", "realtime", "mail", "payments", "audit", "schedule", "drains", "settings"];
8270
8359
  const FULL_HEIGHT_TABS = /* @__PURE__ */ new Set(["api", "data", "sql"]);
8271
8360
  const tabFromPathname = (pathname) => {
8272
8361
  const slug = pathname.split("/").findLast(Boolean) ?? "";
@@ -8873,7 +8962,7 @@ const StudioSidebar = (t0) => {
8873
8962
  return t9;
8874
8963
  };
8875
8964
  const StudioLayout = () => {
8876
- const $ = c(264);
8965
+ const $ = c(270);
8877
8966
  const t = useT();
8878
8967
  const navigate = useNavigate();
8879
8968
  let t0;
@@ -9112,7 +9201,7 @@ const StudioLayout = () => {
9112
9201
  }
9113
9202
  let t27;
9114
9203
  if ($[55] !== t) {
9115
- t27 = t("Realtime");
9204
+ t27 = t("Queues");
9116
9205
  $[55] = t;
9117
9206
  $[56] = t27;
9118
9207
  } else {
@@ -9120,7 +9209,7 @@ const StudioLayout = () => {
9120
9209
  }
9121
9210
  let t28;
9122
9211
  if ($[57] !== t) {
9123
- t28 = t("RLS Policies");
9212
+ t28 = t("Realtime");
9124
9213
  $[57] = t;
9125
9214
  $[58] = t28;
9126
9215
  } else {
@@ -9128,7 +9217,7 @@ const StudioLayout = () => {
9128
9217
  }
9129
9218
  let t29;
9130
9219
  if ($[59] !== t) {
9131
- t29 = t("Scheduled");
9220
+ t29 = t("RLS Policies");
9132
9221
  $[59] = t;
9133
9222
  $[60] = t29;
9134
9223
  } else {
@@ -9136,7 +9225,7 @@ const StudioLayout = () => {
9136
9225
  }
9137
9226
  let t30;
9138
9227
  if ($[61] !== t) {
9139
- t30 = t("Schema");
9228
+ t30 = t("Scheduled");
9140
9229
  $[61] = t;
9141
9230
  $[62] = t30;
9142
9231
  } else {
@@ -9144,7 +9233,7 @@ const StudioLayout = () => {
9144
9233
  }
9145
9234
  let t31;
9146
9235
  if ($[63] !== t) {
9147
- t31 = t("Security");
9236
+ t31 = t("Schema");
9148
9237
  $[63] = t;
9149
9238
  $[64] = t31;
9150
9239
  } else {
@@ -9152,7 +9241,7 @@ const StudioLayout = () => {
9152
9241
  }
9153
9242
  let t32;
9154
9243
  if ($[65] !== t) {
9155
- t32 = t("Settings");
9244
+ t32 = t("Security");
9156
9245
  $[65] = t;
9157
9246
  $[66] = t32;
9158
9247
  } else {
@@ -9160,7 +9249,7 @@ const StudioLayout = () => {
9160
9249
  }
9161
9250
  let t33;
9162
9251
  if ($[67] !== t) {
9163
- t33 = t("SQL editor");
9252
+ t33 = t("Settings");
9164
9253
  $[67] = t;
9165
9254
  $[68] = t33;
9166
9255
  } else {
@@ -9168,7 +9257,7 @@ const StudioLayout = () => {
9168
9257
  }
9169
9258
  let t34;
9170
9259
  if ($[69] !== t) {
9171
- t34 = t("Access Rules");
9260
+ t34 = t("SQL editor");
9172
9261
  $[69] = t;
9173
9262
  $[70] = t34;
9174
9263
  } else {
@@ -9176,7 +9265,7 @@ const StudioLayout = () => {
9176
9265
  }
9177
9266
  let t35;
9178
9267
  if ($[71] !== t) {
9179
- t35 = t("Users");
9268
+ t35 = t("Access Rules");
9180
9269
  $[71] = t;
9181
9270
  $[72] = t35;
9182
9271
  } else {
@@ -9184,7 +9273,7 @@ const StudioLayout = () => {
9184
9273
  }
9185
9274
  let t36;
9186
9275
  if ($[73] !== t) {
9187
- t36 = t("Vectors");
9276
+ t36 = t("Users");
9188
9277
  $[73] = t;
9189
9278
  $[74] = t36;
9190
9279
  } else {
@@ -9192,15 +9281,23 @@ const StudioLayout = () => {
9192
9281
  }
9193
9282
  let t37;
9194
9283
  if ($[75] !== t) {
9195
- t37 = t("Workflows");
9284
+ t37 = t("Vectors");
9196
9285
  $[75] = t;
9197
9286
  $[76] = t37;
9198
9287
  } else {
9199
9288
  t37 = $[76];
9200
9289
  }
9201
9290
  let t38;
9202
- if ($[77] !== t10 || $[78] !== t11 || $[79] !== t12 || $[80] !== t13 || $[81] !== t14 || $[82] !== t15 || $[83] !== t16 || $[84] !== t17 || $[85] !== t18 || $[86] !== t19 || $[87] !== t20 || $[88] !== t21 || $[89] !== t22 || $[90] !== t23 || $[91] !== t24 || $[92] !== t25 || $[93] !== t26 || $[94] !== t27 || $[95] !== t28 || $[96] !== t29 || $[97] !== t30 || $[98] !== t31 || $[99] !== t32 || $[100] !== t33 || $[101] !== t34 || $[102] !== t35 || $[103] !== t36 || $[104] !== t37 || $[105] !== t5 || $[106] !== t6 || $[107] !== t7 || $[108] !== t8 || $[109] !== t9) {
9203
- t38 = {
9291
+ if ($[77] !== t) {
9292
+ t38 = t("Workflows");
9293
+ $[77] = t;
9294
+ $[78] = t38;
9295
+ } else {
9296
+ t38 = $[78];
9297
+ }
9298
+ let t39;
9299
+ if ($[79] !== t10 || $[80] !== t11 || $[81] !== t12 || $[82] !== t13 || $[83] !== t14 || $[84] !== t15 || $[85] !== t16 || $[86] !== t17 || $[87] !== t18 || $[88] !== t19 || $[89] !== t20 || $[90] !== t21 || $[91] !== t22 || $[92] !== t23 || $[93] !== t24 || $[94] !== t25 || $[95] !== t26 || $[96] !== t27 || $[97] !== t28 || $[98] !== t29 || $[99] !== t30 || $[100] !== t31 || $[101] !== t32 || $[102] !== t33 || $[103] !== t34 || $[104] !== t35 || $[105] !== t36 || $[106] !== t37 || $[107] !== t38 || $[108] !== t5 || $[109] !== t6 || $[110] !== t7 || $[111] !== t8 || $[112] !== t9) {
9300
+ t39 = {
9204
9301
  analytics: t5,
9205
9302
  api: t6,
9206
9303
  audit: t7,
@@ -9223,56 +9320,58 @@ const StudioLayout = () => {
9223
9320
  mail: t24,
9224
9321
  payments: t25,
9225
9322
  permissions: t26,
9226
- realtime: t27,
9227
- rls: t28,
9228
- schedule: t29,
9229
- schema: t30,
9230
- security: t31,
9231
- settings: t32,
9232
- sql: t33,
9233
- storageRules: t34,
9234
- users: t35,
9235
- vectors: t36,
9236
- workflows: t37
9323
+ queues: t27,
9324
+ realtime: t28,
9325
+ rls: t29,
9326
+ schedule: t30,
9327
+ schema: t31,
9328
+ security: t32,
9329
+ settings: t33,
9330
+ sql: t34,
9331
+ storageRules: t35,
9332
+ users: t36,
9333
+ vectors: t37,
9334
+ workflows: t38
9237
9335
  };
9238
- $[77] = t10;
9239
- $[78] = t11;
9240
- $[79] = t12;
9241
- $[80] = t13;
9242
- $[81] = t14;
9243
- $[82] = t15;
9244
- $[83] = t16;
9245
- $[84] = t17;
9246
- $[85] = t18;
9247
- $[86] = t19;
9248
- $[87] = t20;
9249
- $[88] = t21;
9250
- $[89] = t22;
9251
- $[90] = t23;
9252
- $[91] = t24;
9253
- $[92] = t25;
9254
- $[93] = t26;
9255
- $[94] = t27;
9256
- $[95] = t28;
9257
- $[96] = t29;
9258
- $[97] = t30;
9259
- $[98] = t31;
9260
- $[99] = t32;
9261
- $[100] = t33;
9262
- $[101] = t34;
9263
- $[102] = t35;
9264
- $[103] = t36;
9265
- $[104] = t37;
9266
- $[105] = t5;
9267
- $[106] = t6;
9268
- $[107] = t7;
9269
- $[108] = t8;
9270
- $[109] = t9;
9271
- $[110] = t38;
9272
- } else {
9273
- t38 = $[110];
9274
- }
9275
- const tabLabel = t38;
9336
+ $[79] = t10;
9337
+ $[80] = t11;
9338
+ $[81] = t12;
9339
+ $[82] = t13;
9340
+ $[83] = t14;
9341
+ $[84] = t15;
9342
+ $[85] = t16;
9343
+ $[86] = t17;
9344
+ $[87] = t18;
9345
+ $[88] = t19;
9346
+ $[89] = t20;
9347
+ $[90] = t21;
9348
+ $[91] = t22;
9349
+ $[92] = t23;
9350
+ $[93] = t24;
9351
+ $[94] = t25;
9352
+ $[95] = t26;
9353
+ $[96] = t27;
9354
+ $[97] = t28;
9355
+ $[98] = t29;
9356
+ $[99] = t30;
9357
+ $[100] = t31;
9358
+ $[101] = t32;
9359
+ $[102] = t33;
9360
+ $[103] = t34;
9361
+ $[104] = t35;
9362
+ $[105] = t36;
9363
+ $[106] = t37;
9364
+ $[107] = t38;
9365
+ $[108] = t5;
9366
+ $[109] = t6;
9367
+ $[110] = t7;
9368
+ $[111] = t8;
9369
+ $[112] = t9;
9370
+ $[113] = t39;
9371
+ } else {
9372
+ t39 = $[113];
9373
+ }
9374
+ const tabLabel = t39;
9276
9375
  const groupLabel = {
9277
9376
  advisors: t("Advisors"),
9278
9377
  auth: t("Auth"),
@@ -9284,376 +9383,386 @@ const StudioLayout = () => {
9284
9383
  settings: t("Settings"),
9285
9384
  storage: t("Storage")
9286
9385
  };
9287
- let t39;
9288
- if ($[111] !== t) {
9289
- t39 = t("Usage and latency from Analytics Engine — request volume, p50/p95, and hot shards.");
9290
- $[111] = t;
9291
- $[112] = t39;
9292
- } else {
9293
- t39 = $[112];
9294
- }
9295
9386
  let t40;
9296
- if ($[113] !== t) {
9297
- t40 = t("Interactive OpenAPI reference and copy-paste snippets for your functions.");
9298
- $[113] = t;
9299
- $[114] = t40;
9387
+ if ($[114] !== t) {
9388
+ t40 = t("Usage and latency from Analytics Engine request volume, p50/p95, and hot shards.");
9389
+ $[114] = t;
9390
+ $[115] = t40;
9300
9391
  } else {
9301
- t40 = $[114];
9392
+ t40 = $[115];
9302
9393
  }
9303
9394
  let t41;
9304
- if ($[115] !== t) {
9305
- t41 = t("A durable log of admin state-changing operations.");
9306
- $[115] = t;
9307
- $[116] = t41;
9395
+ if ($[116] !== t) {
9396
+ t41 = t("Interactive OpenAPI reference and copy-paste snippets for your functions.");
9397
+ $[116] = t;
9398
+ $[117] = t41;
9308
9399
  } else {
9309
- t41 = $[116];
9400
+ t41 = $[117];
9310
9401
  }
9311
9402
  let t42;
9312
- if ($[117] !== t) {
9313
- t42 = t("Enabled plugins and session config (read-only).");
9314
- $[117] = t;
9315
- $[118] = t42;
9403
+ if ($[118] !== t) {
9404
+ t42 = t("A durable log of admin state-changing operations.");
9405
+ $[118] = t;
9406
+ $[119] = t42;
9316
9407
  } else {
9317
- t42 = $[118];
9408
+ t42 = $[119];
9318
9409
  }
9319
9410
  let t43;
9320
- if ($[119] !== t) {
9321
- t43 = t("Browse and revoke active sessions across all users.");
9322
- $[119] = t;
9323
- $[120] = t43;
9411
+ if ($[120] !== t) {
9412
+ t43 = t("Enabled plugins and session config (read-only).");
9413
+ $[120] = t;
9414
+ $[121] = t43;
9324
9415
  } else {
9325
- t43 = $[120];
9416
+ t43 = $[121];
9326
9417
  }
9327
9418
  let t44;
9328
- if ($[121] !== t) {
9329
- t44 = t("Chart widgets backed by saved read-only SQL queries.");
9330
- $[121] = t;
9331
- $[122] = t44;
9419
+ if ($[122] !== t) {
9420
+ t44 = t("Browse and revoke active sessions across all users.");
9421
+ $[122] = t;
9422
+ $[123] = t44;
9332
9423
  } else {
9333
- t44 = $[122];
9424
+ t44 = $[123];
9334
9425
  }
9335
9426
  let t45;
9336
- if ($[123] !== t) {
9337
- t45 = t("Browse and edit rows across your shard and global tables.");
9338
- $[123] = t;
9339
- $[124] = t45;
9427
+ if ($[124] !== t) {
9428
+ t45 = t("Chart widgets backed by saved read-only SQL queries.");
9429
+ $[124] = t;
9430
+ $[125] = t45;
9340
9431
  } else {
9341
- t45 = $[124];
9432
+ t45 = $[125];
9342
9433
  }
9343
9434
  let t46;
9344
- if ($[125] !== t) {
9345
- t46 = t("Forward logs to Logpush, Tail Workers, or a webhook collector.");
9346
- $[125] = t;
9347
- $[126] = t46;
9435
+ if ($[126] !== t) {
9436
+ t46 = t("Browse and edit rows across your shard and global tables.");
9437
+ $[126] = t;
9438
+ $[127] = t46;
9348
9439
  } else {
9349
- t46 = $[126];
9440
+ t46 = $[127];
9350
9441
  }
9351
9442
  let t47;
9352
- if ($[127] !== t) {
9353
- t47 = t("Export a shard to NDJSON, or import rows from it.");
9354
- $[127] = t;
9355
- $[128] = t47;
9443
+ if ($[128] !== t) {
9444
+ t47 = t("Forward logs to Logpush, Tail Workers, or a webhook collector.");
9445
+ $[128] = t;
9446
+ $[129] = t47;
9356
9447
  } else {
9357
- t47 = $[128];
9448
+ t47 = $[129];
9358
9449
  }
9359
9450
  let t48;
9360
- if ($[129] !== t) {
9361
- t48 = t("Browse objects in your R2 storage buckets.");
9362
- $[129] = t;
9363
- $[130] = t48;
9451
+ if ($[130] !== t) {
9452
+ t48 = t("Export a shard to NDJSON, or import rows from it.");
9453
+ $[130] = t;
9454
+ $[131] = t48;
9364
9455
  } else {
9365
- t48 = $[130];
9456
+ t48 = $[131];
9366
9457
  }
9367
9458
  let t49;
9368
- if ($[131] !== t) {
9369
- t49 = t("Run registered queries, mutations, and actions.");
9370
- $[131] = t;
9371
- $[132] = t49;
9459
+ if ($[132] !== t) {
9460
+ t49 = t("Browse objects in your R2 storage buckets.");
9461
+ $[132] = t;
9462
+ $[133] = t49;
9372
9463
  } else {
9373
- t49 = $[132];
9464
+ t49 = $[133];
9374
9465
  }
9375
9466
  let t50;
9376
- if ($[133] !== t) {
9377
- t50 = t("At-a-glance connection, error, and shard signals.");
9378
- $[133] = t;
9379
- $[134] = t50;
9467
+ if ($[134] !== t) {
9468
+ t50 = t("Run registered queries, mutations, and actions.");
9469
+ $[134] = t;
9470
+ $[135] = t50;
9380
9471
  } else {
9381
- t50 = $[134];
9472
+ t50 = $[135];
9382
9473
  }
9383
9474
  let t51;
9384
- if ($[135] !== t) {
9385
- t51 = t("Connection, health, and advisor summary for your deployment.");
9386
- $[135] = t;
9387
- $[136] = t51;
9475
+ if ($[136] !== t) {
9476
+ t51 = t("At-a-glance connection, error, and shard signals.");
9477
+ $[136] = t;
9478
+ $[137] = t51;
9388
9479
  } else {
9389
- t51 = $[136];
9480
+ t51 = $[137];
9390
9481
  }
9391
9482
  let t52;
9392
- if ($[137] !== t) {
9393
- t52 = t("Surface slow functions, error spikes, and cache problems.");
9394
- $[137] = t;
9395
- $[138] = t52;
9483
+ if ($[138] !== t) {
9484
+ t52 = t("Connection, health, and advisor summary for your deployment.");
9485
+ $[138] = t;
9486
+ $[139] = t52;
9396
9487
  } else {
9397
- t52 = $[138];
9488
+ t52 = $[139];
9398
9489
  }
9399
9490
  let t53;
9400
- if ($[139] !== t) {
9401
- t53 = t("A live stream of recent function logs.");
9402
- $[139] = t;
9403
- $[140] = t53;
9491
+ if ($[140] !== t) {
9492
+ t53 = t("Surface slow functions, error spikes, and cache problems.");
9493
+ $[140] = t;
9494
+ $[141] = t53;
9404
9495
  } else {
9405
- t53 = $[140];
9496
+ t53 = $[141];
9406
9497
  }
9407
9498
  let t54;
9408
- if ($[141] !== t) {
9409
- t54 = t("Per-shard health and aggregate metrics.");
9410
- $[141] = t;
9411
- $[142] = t54;
9499
+ if ($[142] !== t) {
9500
+ t54 = t("A live stream of recent function logs.");
9501
+ $[142] = t;
9502
+ $[143] = t54;
9412
9503
  } else {
9413
- t54 = $[142];
9504
+ t54 = $[143];
9414
9505
  }
9415
9506
  let t55;
9416
- if ($[143] !== t) {
9417
- t55 = t("Review migration status and run them.");
9418
- $[143] = t;
9419
- $[144] = t55;
9507
+ if ($[144] !== t) {
9508
+ t55 = t("Per-shard health and aggregate metrics.");
9509
+ $[144] = t;
9510
+ $[145] = t55;
9420
9511
  } else {
9421
- t55 = $[144];
9512
+ t55 = $[145];
9422
9513
  }
9423
9514
  let t56;
9424
- if ($[145] !== t) {
9425
- t56 = t("Browse and manage organizations, members, and invitations.");
9426
- $[145] = t;
9427
- $[146] = t56;
9515
+ if ($[146] !== t) {
9516
+ t56 = t("Review migration status and run them.");
9517
+ $[146] = t;
9518
+ $[147] = t56;
9428
9519
  } else {
9429
- t56 = $[146];
9520
+ t56 = $[147];
9430
9521
  }
9431
9522
  let t57;
9432
- if ($[147] !== t) {
9433
- t57 = t("Restore a shard to a point in the last 30 days.");
9434
- $[147] = t;
9435
- $[148] = t57;
9523
+ if ($[148] !== t) {
9524
+ t57 = t("Browse and manage organizations, members, and invitations.");
9525
+ $[148] = t;
9526
+ $[149] = t57;
9436
9527
  } else {
9437
- t57 = $[148];
9528
+ t57 = $[149];
9438
9529
  }
9439
9530
  let t58;
9440
- if ($[149] !== t) {
9441
- t58 = t("Email your app sent, captured in dev.");
9442
- $[149] = t;
9443
- $[150] = t58;
9531
+ if ($[150] !== t) {
9532
+ t58 = t("Restore a shard to a point in the last 30 days.");
9533
+ $[150] = t;
9534
+ $[151] = t58;
9444
9535
  } else {
9445
- t58 = $[150];
9536
+ t58 = $[151];
9446
9537
  }
9447
9538
  let t59;
9448
- if ($[151] !== t) {
9449
- t59 = t("Synced customers, subscriptions, and webhook events.");
9450
- $[151] = t;
9451
- $[152] = t59;
9539
+ if ($[152] !== t) {
9540
+ t59 = t("Email your app sent, captured in dev.");
9541
+ $[152] = t;
9542
+ $[153] = t59;
9452
9543
  } else {
9453
- t59 = $[152];
9544
+ t59 = $[153];
9454
9545
  }
9455
9546
  let t60;
9456
- if ($[153] !== t) {
9457
- t60 = t("Inspect access policies per table, and probe a function as any identity.");
9458
- $[153] = t;
9459
- $[154] = t60;
9547
+ if ($[154] !== t) {
9548
+ t60 = t("Synced customers, subscriptions, and webhook events.");
9549
+ $[154] = t;
9550
+ $[155] = t60;
9460
9551
  } else {
9461
- t60 = $[154];
9552
+ t60 = $[155];
9462
9553
  }
9463
9554
  let t61;
9464
- if ($[155] !== t) {
9465
- t61 = t("Active WebSocket subscriptions on this shard.");
9466
- $[155] = t;
9467
- $[156] = t61;
9555
+ if ($[156] !== t) {
9556
+ t61 = t("Inspect access policies per table, and probe a function as any identity.");
9557
+ $[156] = t;
9558
+ $[157] = t61;
9468
9559
  } else {
9469
- t61 = $[156];
9560
+ t61 = $[157];
9470
9561
  }
9471
9562
  let t62;
9472
- if ($[157] !== t) {
9473
- t62 = t("Inspect row-level-security policies and roles, per table.");
9474
- $[157] = t;
9475
- $[158] = t62;
9563
+ if ($[158] !== t) {
9564
+ t62 = t("Inspect declared Cloudflare Queues — their producer bindings, consumer mode, and dead-letter queue.");
9565
+ $[158] = t;
9566
+ $[159] = t62;
9476
9567
  } else {
9477
- t62 = $[158];
9568
+ t62 = $[159];
9478
9569
  }
9479
9570
  let t63;
9480
- if ($[159] !== t) {
9481
- t63 = t("Inspect and cancel scheduled jobs.");
9482
- $[159] = t;
9483
- $[160] = t63;
9571
+ if ($[160] !== t) {
9572
+ t63 = t("Active WebSocket subscriptions on this shard.");
9573
+ $[160] = t;
9574
+ $[161] = t63;
9484
9575
  } else {
9485
- t63 = $[160];
9576
+ t63 = $[161];
9486
9577
  }
9487
9578
  let t64;
9488
- if ($[161] !== t) {
9489
- t64 = t("Inspect each table and its columns.");
9490
- $[161] = t;
9491
- $[162] = t64;
9579
+ if ($[162] !== t) {
9580
+ t64 = t("Inspect row-level-security policies and roles, per table.");
9581
+ $[162] = t;
9582
+ $[163] = t64;
9492
9583
  } else {
9493
- t64 = $[162];
9584
+ t64 = $[163];
9494
9585
  }
9495
9586
  let t65;
9496
- if ($[163] !== t) {
9497
- t65 = t("Review admin gates, credentials, and log redaction.");
9498
- $[163] = t;
9499
- $[164] = t65;
9587
+ if ($[164] !== t) {
9588
+ t65 = t("Inspect and cancel scheduled jobs.");
9589
+ $[164] = t;
9590
+ $[165] = t65;
9500
9591
  } else {
9501
- t65 = $[164];
9592
+ t65 = $[165];
9502
9593
  }
9503
9594
  let t66;
9504
- if ($[165] !== t) {
9505
- t66 = t("Read-only deployment config vars, secrets, and bindings.");
9506
- $[165] = t;
9507
- $[166] = t66;
9595
+ if ($[166] !== t) {
9596
+ t66 = t("Inspect each table and its columns.");
9597
+ $[166] = t;
9598
+ $[167] = t66;
9508
9599
  } else {
9509
- t66 = $[166];
9600
+ t66 = $[167];
9510
9601
  }
9511
9602
  let t67;
9512
- if ($[167] !== t) {
9513
- t67 = t("Run read-only SQL against a shard.");
9514
- $[167] = t;
9515
- $[168] = t67;
9603
+ if ($[168] !== t) {
9604
+ t67 = t("Review admin gates, credentials, and log redaction.");
9605
+ $[168] = t;
9606
+ $[169] = t67;
9516
9607
  } else {
9517
- t67 = $[168];
9608
+ t67 = $[169];
9518
9609
  }
9519
9610
  let t68;
9520
- if ($[169] !== t) {
9521
- t68 = t("Inspect storage access rules per bucket, operation, and key prefix.");
9522
- $[169] = t;
9523
- $[170] = t68;
9611
+ if ($[170] !== t) {
9612
+ t68 = t("Read-only deployment configvars, secrets, and bindings.");
9613
+ $[170] = t;
9614
+ $[171] = t68;
9524
9615
  } else {
9525
- t68 = $[170];
9616
+ t68 = $[171];
9526
9617
  }
9527
9618
  let t69;
9528
- if ($[171] !== t) {
9529
- t69 = t("Manage auth users roles, bans, sessions, and identity.");
9530
- $[171] = t;
9531
- $[172] = t69;
9619
+ if ($[172] !== t) {
9620
+ t69 = t("Run read-only SQL against a shard.");
9621
+ $[172] = t;
9622
+ $[173] = t69;
9532
9623
  } else {
9533
- t69 = $[172];
9624
+ t69 = $[173];
9534
9625
  }
9535
9626
  let t70;
9536
- if ($[173] !== t) {
9537
- t70 = t("Browse Vectorize indexes and run similarity searches.");
9538
- $[173] = t;
9539
- $[174] = t70;
9627
+ if ($[174] !== t) {
9628
+ t70 = t("Inspect storage access rules — per bucket, operation, and key prefix.");
9629
+ $[174] = t;
9630
+ $[175] = t70;
9540
9631
  } else {
9541
- t70 = $[174];
9632
+ t70 = $[175];
9542
9633
  }
9543
9634
  let t71;
9544
- if ($[175] !== t) {
9545
- t71 = t("Inspect declared Cloudflare Workflows and their bindings.");
9546
- $[175] = t;
9547
- $[176] = t71;
9635
+ if ($[176] !== t) {
9636
+ t71 = t("Manage auth users roles, bans, sessions, and identity.");
9637
+ $[176] = t;
9638
+ $[177] = t71;
9548
9639
  } else {
9549
- t71 = $[176];
9640
+ t71 = $[177];
9550
9641
  }
9551
9642
  let t72;
9552
- if ($[177] !== t39 || $[178] !== t40 || $[179] !== t41 || $[180] !== t42 || $[181] !== t43 || $[182] !== t44 || $[183] !== t45 || $[184] !== t46 || $[185] !== t47 || $[186] !== t48 || $[187] !== t49 || $[188] !== t50 || $[189] !== t51 || $[190] !== t52 || $[191] !== t53 || $[192] !== t54 || $[193] !== t55 || $[194] !== t56 || $[195] !== t57 || $[196] !== t58 || $[197] !== t59 || $[198] !== t60 || $[199] !== t61 || $[200] !== t62 || $[201] !== t63 || $[202] !== t64 || $[203] !== t65 || $[204] !== t66 || $[205] !== t67 || $[206] !== t68 || $[207] !== t69 || $[208] !== t70 || $[209] !== t71) {
9553
- t72 = {
9554
- analytics: t39,
9555
- api: t40,
9556
- audit: t41,
9557
- authConfig: t42,
9558
- authSessions: t43,
9559
- dashboards: t44,
9560
- data: t45,
9561
- drains: t46,
9562
- export: t47,
9563
- files: t48,
9564
- functions: t49,
9565
- health: t50,
9566
- home: t51,
9567
- insights: t52,
9568
- logs: t53,
9569
- metrics: t54,
9570
- migrations: t55,
9571
- organizations: t56,
9572
- pitr: t57,
9573
- mail: t58,
9574
- payments: t59,
9575
- permissions: t60,
9576
- realtime: t61,
9577
- rls: t62,
9578
- schedule: t63,
9579
- schema: t64,
9580
- security: t65,
9581
- settings: t66,
9582
- sql: t67,
9583
- storageRules: t68,
9584
- users: t69,
9585
- vectors: t70,
9586
- workflows: t71
9587
- };
9588
- $[177] = t39;
9589
- $[178] = t40;
9590
- $[179] = t41;
9591
- $[180] = t42;
9592
- $[181] = t43;
9593
- $[182] = t44;
9594
- $[183] = t45;
9595
- $[184] = t46;
9596
- $[185] = t47;
9597
- $[186] = t48;
9598
- $[187] = t49;
9599
- $[188] = t50;
9600
- $[189] = t51;
9601
- $[190] = t52;
9602
- $[191] = t53;
9603
- $[192] = t54;
9604
- $[193] = t55;
9605
- $[194] = t56;
9606
- $[195] = t57;
9607
- $[196] = t58;
9608
- $[197] = t59;
9609
- $[198] = t60;
9610
- $[199] = t61;
9611
- $[200] = t62;
9612
- $[201] = t63;
9613
- $[202] = t64;
9614
- $[203] = t65;
9615
- $[204] = t66;
9616
- $[205] = t67;
9617
- $[206] = t68;
9618
- $[207] = t69;
9619
- $[208] = t70;
9620
- $[209] = t71;
9621
- $[210] = t72;
9622
- } else {
9623
- t72 = $[210];
9624
- }
9625
- const tabDescription = t72;
9643
+ if ($[178] !== t) {
9644
+ t72 = t("Browse Vectorize indexes and run similarity searches.");
9645
+ $[178] = t;
9646
+ $[179] = t72;
9647
+ } else {
9648
+ t72 = $[179];
9649
+ }
9626
9650
  let t73;
9627
- if ($[211] !== navigate) {
9628
- t73 = (event) => {
9651
+ if ($[180] !== t) {
9652
+ t73 = t("Inspect declared Cloudflare Workflows and their bindings.");
9653
+ $[180] = t;
9654
+ $[181] = t73;
9655
+ } else {
9656
+ t73 = $[181];
9657
+ }
9658
+ let t74;
9659
+ if ($[182] !== t40 || $[183] !== t41 || $[184] !== t42 || $[185] !== t43 || $[186] !== t44 || $[187] !== t45 || $[188] !== t46 || $[189] !== t47 || $[190] !== t48 || $[191] !== t49 || $[192] !== t50 || $[193] !== t51 || $[194] !== t52 || $[195] !== t53 || $[196] !== t54 || $[197] !== t55 || $[198] !== t56 || $[199] !== t57 || $[200] !== t58 || $[201] !== t59 || $[202] !== t60 || $[203] !== t61 || $[204] !== t62 || $[205] !== t63 || $[206] !== t64 || $[207] !== t65 || $[208] !== t66 || $[209] !== t67 || $[210] !== t68 || $[211] !== t69 || $[212] !== t70 || $[213] !== t71 || $[214] !== t72 || $[215] !== t73) {
9660
+ t74 = {
9661
+ analytics: t40,
9662
+ api: t41,
9663
+ audit: t42,
9664
+ authConfig: t43,
9665
+ authSessions: t44,
9666
+ dashboards: t45,
9667
+ data: t46,
9668
+ drains: t47,
9669
+ export: t48,
9670
+ files: t49,
9671
+ functions: t50,
9672
+ health: t51,
9673
+ home: t52,
9674
+ insights: t53,
9675
+ logs: t54,
9676
+ metrics: t55,
9677
+ migrations: t56,
9678
+ organizations: t57,
9679
+ pitr: t58,
9680
+ mail: t59,
9681
+ payments: t60,
9682
+ permissions: t61,
9683
+ queues: t62,
9684
+ realtime: t63,
9685
+ rls: t64,
9686
+ schedule: t65,
9687
+ schema: t66,
9688
+ security: t67,
9689
+ settings: t68,
9690
+ sql: t69,
9691
+ storageRules: t70,
9692
+ users: t71,
9693
+ vectors: t72,
9694
+ workflows: t73
9695
+ };
9696
+ $[182] = t40;
9697
+ $[183] = t41;
9698
+ $[184] = t42;
9699
+ $[185] = t43;
9700
+ $[186] = t44;
9701
+ $[187] = t45;
9702
+ $[188] = t46;
9703
+ $[189] = t47;
9704
+ $[190] = t48;
9705
+ $[191] = t49;
9706
+ $[192] = t50;
9707
+ $[193] = t51;
9708
+ $[194] = t52;
9709
+ $[195] = t53;
9710
+ $[196] = t54;
9711
+ $[197] = t55;
9712
+ $[198] = t56;
9713
+ $[199] = t57;
9714
+ $[200] = t58;
9715
+ $[201] = t59;
9716
+ $[202] = t60;
9717
+ $[203] = t61;
9718
+ $[204] = t62;
9719
+ $[205] = t63;
9720
+ $[206] = t64;
9721
+ $[207] = t65;
9722
+ $[208] = t66;
9723
+ $[209] = t67;
9724
+ $[210] = t68;
9725
+ $[211] = t69;
9726
+ $[212] = t70;
9727
+ $[213] = t71;
9728
+ $[214] = t72;
9729
+ $[215] = t73;
9730
+ $[216] = t74;
9731
+ } else {
9732
+ t74 = $[216];
9733
+ }
9734
+ const tabDescription = t74;
9735
+ let t75;
9736
+ if ($[217] !== navigate) {
9737
+ t75 = (event) => {
9629
9738
  fireAndForget(navigate({
9630
9739
  to: `/${event.currentTarget.dataset.tab ?? ""}`
9631
9740
  }));
9632
9741
  };
9633
- $[211] = navigate;
9634
- $[212] = t73;
9742
+ $[217] = navigate;
9743
+ $[218] = t75;
9635
9744
  } else {
9636
- t73 = $[212];
9745
+ t75 = $[218];
9637
9746
  }
9638
- const selectTab = t73;
9639
- let t74;
9640
- let t75;
9641
- if ($[213] !== current || $[214] !== tabLabel) {
9642
- t74 = () => {
9747
+ const selectTab = t75;
9748
+ let t76;
9749
+ let t77;
9750
+ if ($[219] !== current || $[220] !== tabLabel) {
9751
+ t76 = () => {
9643
9752
  if (typeof document !== "undefined") {
9644
9753
  document.title = `${tabLabel[current]} · lunora`;
9645
9754
  }
9646
9755
  };
9647
- t75 = [current, tabLabel];
9648
- $[213] = current;
9649
- $[214] = tabLabel;
9650
- $[215] = t74;
9651
- $[216] = t75;
9756
+ t77 = [current, tabLabel];
9757
+ $[219] = current;
9758
+ $[220] = tabLabel;
9759
+ $[221] = t76;
9760
+ $[222] = t77;
9652
9761
  } else {
9653
- t74 = $[215];
9654
- t75 = $[216];
9762
+ t76 = $[221];
9763
+ t77 = $[222];
9655
9764
  }
9656
- useEffect(t74, t75);
9765
+ useEffect(t76, t77);
9657
9766
  const activeGroup = visibleGroups.find((group_1) => group_1.tabs.includes(current)) ?? NAV_GROUPS[0];
9658
9767
  const commandItems = visibleGroups.flatMap((group_2) => group_2.tabs.map((tab_0) => ({
9659
9768
  group: groupLabel[group_2.key],
@@ -9662,48 +9771,48 @@ const StudioLayout = () => {
9662
9771
  })));
9663
9772
  const chrome = use(StudioChromeContext);
9664
9773
  const connected = chrome !== null && chrome.token !== "";
9665
- let t76;
9666
- if ($[217] !== commandItems) {
9667
- t76 = /* @__PURE__ */ jsxDEV(CommandPalette, {
9774
+ let t78;
9775
+ if ($[223] !== commandItems) {
9776
+ t78 = /* @__PURE__ */ jsxDEV(CommandPalette, {
9668
9777
  items: commandItems
9669
9778
  }, void 0, false);
9670
- $[217] = commandItems;
9671
- $[218] = t76;
9779
+ $[223] = commandItems;
9780
+ $[224] = t78;
9672
9781
  } else {
9673
- t76 = $[218];
9782
+ t78 = $[224];
9674
9783
  }
9675
- let t77;
9676
- if ($[219] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9677
- t77 = /* @__PURE__ */ jsxDEV(SidebarTrigger, {
9784
+ let t79;
9785
+ if ($[225] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9786
+ t79 = /* @__PURE__ */ jsxDEV(SidebarTrigger, {
9678
9787
  className: "-ms-1"
9679
9788
  }, void 0, false);
9680
- $[219] = t77;
9789
+ $[225] = t79;
9681
9790
  } else {
9682
- t77 = $[219];
9791
+ t79 = $[225];
9683
9792
  }
9684
- let t78;
9685
- if ($[220] !== t) {
9686
- t78 = t("Breadcrumb");
9687
- $[220] = t;
9688
- $[221] = t78;
9793
+ let t80;
9794
+ if ($[226] !== t) {
9795
+ t80 = t("Breadcrumb");
9796
+ $[226] = t;
9797
+ $[227] = t80;
9689
9798
  } else {
9690
- t78 = $[221];
9799
+ t80 = $[227];
9691
9800
  }
9692
- const t79 = groupLabel[activeGroup.key];
9693
- let t80;
9694
- if ($[222] !== t79) {
9695
- t80 = /* @__PURE__ */ jsxDEV("span", {
9801
+ const t81 = groupLabel[activeGroup.key];
9802
+ let t82;
9803
+ if ($[228] !== t81) {
9804
+ t82 = /* @__PURE__ */ jsxDEV("span", {
9696
9805
  className: "text-muted-foreground",
9697
- children: t79
9806
+ children: t81
9698
9807
  }, void 0, false);
9699
- $[222] = t79;
9700
- $[223] = t80;
9808
+ $[228] = t81;
9809
+ $[229] = t82;
9701
9810
  } else {
9702
- t80 = $[223];
9811
+ t82 = $[229];
9703
9812
  }
9704
- let t81;
9705
- if ($[224] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9706
- t81 = /* @__PURE__ */ jsxDEV("svg", {
9813
+ let t83;
9814
+ if ($[230] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9815
+ t83 = /* @__PURE__ */ jsxDEV("svg", {
9707
9816
  "aria-hidden": "true",
9708
9817
  className: "size-3.5 text-muted-foreground/60",
9709
9818
  fill: "none",
@@ -9716,39 +9825,39 @@ const StudioLayout = () => {
9716
9825
  strokeLinejoin: "round"
9717
9826
  }, void 0, false)
9718
9827
  }, void 0, false);
9719
- $[224] = t81;
9828
+ $[230] = t83;
9720
9829
  } else {
9721
- t81 = $[224];
9830
+ t83 = $[230];
9722
9831
  }
9723
- const t82 = tabLabel[current];
9724
- let t83;
9725
- if ($[225] !== t82) {
9726
- t83 = /* @__PURE__ */ jsxDEV("span", {
9832
+ const t84 = tabLabel[current];
9833
+ let t85;
9834
+ if ($[231] !== t84) {
9835
+ t85 = /* @__PURE__ */ jsxDEV("span", {
9727
9836
  className: "font-medium text-foreground",
9728
- children: t82
9837
+ children: t84
9729
9838
  }, void 0, false);
9730
- $[225] = t82;
9731
- $[226] = t83;
9839
+ $[231] = t84;
9840
+ $[232] = t85;
9732
9841
  } else {
9733
- t83 = $[226];
9842
+ t85 = $[232];
9734
9843
  }
9735
- let t84;
9736
- if ($[227] !== t78 || $[228] !== t80 || $[229] !== t83) {
9737
- t84 = /* @__PURE__ */ jsxDEV("nav", {
9738
- "aria-label": t78,
9844
+ let t86;
9845
+ if ($[233] !== t80 || $[234] !== t82 || $[235] !== t85) {
9846
+ t86 = /* @__PURE__ */ jsxDEV("nav", {
9847
+ "aria-label": t80,
9739
9848
  className: "flex items-center gap-1.5 text-[13px]",
9740
- children: [t80, t81, t83]
9849
+ children: [t82, t83, t85]
9741
9850
  }, void 0, true);
9742
- $[227] = t78;
9743
- $[228] = t80;
9744
- $[229] = t83;
9745
- $[230] = t84;
9851
+ $[233] = t80;
9852
+ $[234] = t82;
9853
+ $[235] = t85;
9854
+ $[236] = t86;
9746
9855
  } else {
9747
- t84 = $[230];
9856
+ t86 = $[236];
9748
9857
  }
9749
- let t85;
9750
- if ($[231] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9751
- t85 = /* @__PURE__ */ jsxDEV("svg", {
9858
+ let t87;
9859
+ if ($[237] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9860
+ t87 = /* @__PURE__ */ jsxDEV("svg", {
9752
9861
  "aria-hidden": "true",
9753
9862
  className: "size-3.5",
9754
9863
  fill: "none",
@@ -9764,164 +9873,164 @@ const StudioLayout = () => {
9764
9873
  strokeLinecap: "round"
9765
9874
  }, void 0, false)]
9766
9875
  }, void 0, true);
9767
- $[231] = t85;
9876
+ $[237] = t87;
9768
9877
  } else {
9769
- t85 = $[231];
9878
+ t87 = $[237];
9770
9879
  }
9771
- let t86;
9772
- if ($[232] !== t) {
9773
- t86 = t("Search…");
9774
- $[232] = t;
9775
- $[233] = t86;
9880
+ let t88;
9881
+ if ($[238] !== t) {
9882
+ t88 = t("Search…");
9883
+ $[238] = t;
9884
+ $[239] = t88;
9776
9885
  } else {
9777
- t86 = $[233];
9886
+ t88 = $[239];
9778
9887
  }
9779
- let t87;
9780
- if ($[234] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9781
- t87 = /* @__PURE__ */ jsxDEV("kbd", {
9888
+ let t89;
9889
+ if ($[240] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9890
+ t89 = /* @__PURE__ */ jsxDEV("kbd", {
9782
9891
  className: "ms-auto rounded border border-border bg-background px-1 font-sans text-[10px] text-muted-foreground",
9783
9892
  children: "⌘K"
9784
9893
  }, void 0, false);
9785
- $[234] = t87;
9894
+ $[240] = t89;
9786
9895
  } else {
9787
- t87 = $[234];
9896
+ t89 = $[240];
9788
9897
  }
9789
- let t88;
9790
- if ($[235] !== t86) {
9791
- t88 = /* @__PURE__ */ jsxDEV("button", {
9898
+ let t90;
9899
+ if ($[241] !== t88) {
9900
+ t90 = /* @__PURE__ */ jsxDEV("button", {
9792
9901
  className: "mx-auto hidden h-8 w-72 items-center gap-2 rounded-lg border border-border bg-muted/40 px-3 text-xs text-muted-foreground transition-colors hover:bg-muted md:flex",
9793
9902
  "data-testid": "dash-app-search",
9794
9903
  onClick: openCommandPalette,
9795
9904
  type: "button",
9796
- children: [t85, t86, t87]
9905
+ children: [t87, t88, t89]
9797
9906
  }, void 0, true);
9798
- $[235] = t86;
9799
- $[236] = t88;
9907
+ $[241] = t88;
9908
+ $[242] = t90;
9800
9909
  } else {
9801
- t88 = $[236];
9910
+ t90 = $[242];
9802
9911
  }
9803
- let t89;
9804
- if ($[237] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9805
- t89 = /* @__PURE__ */ jsxDEV("div", {
9912
+ let t91;
9913
+ if ($[243] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9914
+ t91 = /* @__PURE__ */ jsxDEV("div", {
9806
9915
  className: "ms-auto flex items-center gap-1.5 md:ms-0",
9807
9916
  children: /* @__PURE__ */ jsxDEV(ThemeToggle, {}, void 0, false)
9808
9917
  }, void 0, false);
9809
- $[237] = t89;
9918
+ $[243] = t91;
9810
9919
  } else {
9811
- t89 = $[237];
9920
+ t91 = $[243];
9812
9921
  }
9813
- let t90;
9814
- if ($[238] !== t84 || $[239] !== t88) {
9815
- t90 = /* @__PURE__ */ jsxDEV("header", {
9922
+ let t92;
9923
+ if ($[244] !== t86 || $[245] !== t90) {
9924
+ t92 = /* @__PURE__ */ jsxDEV("header", {
9816
9925
  className: "flex h-11 shrink-0 items-center gap-2 border-b border-border px-4",
9817
9926
  "data-testid": "dash-app-header",
9818
- children: [t77, t84, t88, t89]
9927
+ children: [t79, t86, t90, t91]
9819
9928
  }, void 0, true);
9820
- $[238] = t84;
9821
- $[239] = t88;
9822
- $[240] = t90;
9929
+ $[244] = t86;
9930
+ $[245] = t90;
9931
+ $[246] = t92;
9823
9932
  } else {
9824
- t90 = $[240];
9933
+ t92 = $[246];
9825
9934
  }
9826
- let t91;
9827
- if ($[241] !== chrome?.rulesInstalled) {
9828
- t91 = chrome?.rulesInstalled === false && /* @__PURE__ */ jsxDEV(RulesBanner, {}, void 0, false);
9829
- $[241] = chrome?.rulesInstalled;
9830
- $[242] = t91;
9831
- } else {
9832
- t91 = $[242];
9833
- }
9834
- const t92 = `dash-tab-${current}`;
9835
- const t93 = fullHeight ? "flex min-w-0 flex-1 flex-col overflow-hidden" : "min-w-0 flex-1 overflow-auto p-6";
9836
- const t94 = tabLabel[current];
9837
- let t95;
9838
- if ($[243] !== t || $[244] !== t94) {
9839
- t95 = t("{title} failed", {
9840
- title: t94
9841
- });
9842
- $[243] = t;
9843
- $[244] = t94;
9844
- $[245] = t95;
9935
+ let t93;
9936
+ if ($[247] !== chrome?.rulesInstalled) {
9937
+ t93 = chrome?.rulesInstalled === false && /* @__PURE__ */ jsxDEV(RulesBanner, {}, void 0, false);
9938
+ $[247] = chrome?.rulesInstalled;
9939
+ $[248] = t93;
9845
9940
  } else {
9846
- t95 = $[245];
9941
+ t93 = $[248];
9847
9942
  }
9943
+ const t94 = `dash-tab-${current}`;
9944
+ const t95 = fullHeight ? "flex min-w-0 flex-1 flex-col overflow-hidden" : "min-w-0 flex-1 overflow-auto p-6";
9848
9945
  const t96 = tabLabel[current];
9849
9946
  let t97;
9850
- if ($[246] !== t) {
9851
- t97 = t("Try again");
9852
- $[246] = t;
9853
- $[247] = t97;
9854
- } else {
9855
- t97 = $[247];
9856
- }
9857
- let t98;
9858
- if ($[248] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9859
- t98 = /* @__PURE__ */ jsxDEV(Outlet, {}, void 0, false);
9860
- $[248] = t98;
9947
+ if ($[249] !== t || $[250] !== t96) {
9948
+ t97 = t("{title} failed", {
9949
+ title: t96
9950
+ });
9951
+ $[249] = t;
9952
+ $[250] = t96;
9953
+ $[251] = t97;
9861
9954
  } else {
9862
- t98 = $[248];
9955
+ t97 = $[251];
9863
9956
  }
9957
+ const t98 = tabLabel[current];
9864
9958
  let t99;
9865
- if ($[249] !== current || $[250] !== t95 || $[251] !== t96 || $[252] !== t97) {
9866
- t99 = /* @__PURE__ */ jsxDEV(ErrorBoundary, {
9867
- fallbackTitle: t95,
9868
- label: t96,
9869
- retryLabel: t97,
9870
- children: t98
9871
- }, current, false);
9872
- $[249] = current;
9873
- $[250] = t95;
9874
- $[251] = t96;
9875
- $[252] = t97;
9959
+ if ($[252] !== t) {
9960
+ t99 = t("Try again");
9961
+ $[252] = t;
9876
9962
  $[253] = t99;
9877
9963
  } else {
9878
9964
  t99 = $[253];
9879
9965
  }
9880
9966
  let t100;
9881
- if ($[254] !== t93 || $[255] !== t99) {
9882
- t100 = /* @__PURE__ */ jsxDEV("div", {
9883
- className: t93,
9884
- children: t99
9885
- }, void 0, false);
9886
- $[254] = t93;
9887
- $[255] = t99;
9888
- $[256] = t100;
9967
+ if ($[254] === /* @__PURE__ */ Symbol.for("react.memo_cache_sentinel")) {
9968
+ t100 = /* @__PURE__ */ jsxDEV(Outlet, {}, void 0, false);
9969
+ $[254] = t100;
9889
9970
  } else {
9890
- t100 = $[256];
9971
+ t100 = $[254];
9891
9972
  }
9892
9973
  let t101;
9893
- if ($[257] !== t100 || $[258] !== t92) {
9894
- t101 = /* @__PURE__ */ jsxDEV("div", {
9895
- "aria-labelledby": t92,
9974
+ if ($[255] !== current || $[256] !== t97 || $[257] !== t98 || $[258] !== t99) {
9975
+ t101 = /* @__PURE__ */ jsxDEV(ErrorBoundary, {
9976
+ fallbackTitle: t97,
9977
+ label: t98,
9978
+ retryLabel: t99,
9979
+ children: t100
9980
+ }, current, false);
9981
+ $[255] = current;
9982
+ $[256] = t97;
9983
+ $[257] = t98;
9984
+ $[258] = t99;
9985
+ $[259] = t101;
9986
+ } else {
9987
+ t101 = $[259];
9988
+ }
9989
+ let t102;
9990
+ if ($[260] !== t101 || $[261] !== t95) {
9991
+ t102 = /* @__PURE__ */ jsxDEV("div", {
9992
+ className: t95,
9993
+ children: t101
9994
+ }, void 0, false);
9995
+ $[260] = t101;
9996
+ $[261] = t95;
9997
+ $[262] = t102;
9998
+ } else {
9999
+ t102 = $[262];
10000
+ }
10001
+ let t103;
10002
+ if ($[263] !== t102 || $[264] !== t94) {
10003
+ t103 = /* @__PURE__ */ jsxDEV("div", {
10004
+ "aria-labelledby": t94,
9896
10005
  className: "flex min-w-0 flex-1 flex-col overflow-hidden",
9897
10006
  "data-testid": "dash-panel",
9898
10007
  id: "dash-panel",
9899
10008
  role: "tabpanel",
9900
- children: t100
10009
+ children: t102
9901
10010
  }, void 0, false);
9902
- $[257] = t100;
9903
- $[258] = t92;
9904
- $[259] = t101;
10011
+ $[263] = t102;
10012
+ $[264] = t94;
10013
+ $[265] = t103;
9905
10014
  } else {
9906
- t101 = $[259];
10015
+ t103 = $[265];
9907
10016
  }
9908
- let t102;
9909
- if ($[260] !== t101 || $[261] !== t90 || $[262] !== t91) {
9910
- t102 = /* @__PURE__ */ jsxDEV(SidebarInset, {
10017
+ let t104;
10018
+ if ($[266] !== t103 || $[267] !== t92 || $[268] !== t93) {
10019
+ t104 = /* @__PURE__ */ jsxDEV(SidebarInset, {
9911
10020
  className: "overflow-hidden md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm",
9912
- children: [t90, t91, t101]
10021
+ children: [t92, t93, t103]
9913
10022
  }, void 0, true);
9914
- $[260] = t101;
9915
- $[261] = t90;
9916
- $[262] = t91;
9917
- $[263] = t102;
10023
+ $[266] = t103;
10024
+ $[267] = t92;
10025
+ $[268] = t93;
10026
+ $[269] = t104;
9918
10027
  } else {
9919
- t102 = $[263];
10028
+ t104 = $[269];
9920
10029
  }
9921
10030
  return /* @__PURE__ */ jsxDEV(SidebarProvider, {
9922
10031
  className: "min-h-0 flex-1",
9923
10032
  "data-testid": "lunora-studio",
9924
- children: [t76, /* @__PURE__ */ jsxDEV(StudioSidebar, {
10033
+ children: [t78, /* @__PURE__ */ jsxDEV(StudioSidebar, {
9925
10034
  chrome,
9926
10035
  connected,
9927
10036
  current,
@@ -9930,7 +10039,7 @@ const StudioLayout = () => {
9930
10039
  selectTab,
9931
10040
  tabDescription,
9932
10041
  tabLabel
9933
- }, void 0, false), t102]
10042
+ }, void 0, false), t104]
9934
10043
  }, void 0, true);
9935
10044
  };
9936
10045
  const RoutePending = () => {
@@ -10096,6 +10205,7 @@ const buildRouter = ({
10096
10205
  }, void 0, false),
10097
10206
  mail: /* @__PURE__ */ jsxDEV(MailPanel, {}, void 0, false),
10098
10207
  payments: /* @__PURE__ */ jsxDEV(PaymentsPanel, {}, void 0, false),
10208
+ queues: /* @__PURE__ */ jsxDEV(QueuesPanel, {}, void 0, false),
10099
10209
  realtime: /* @__PURE__ */ jsxDEV(SubscriptionsPanel, {
10100
10210
  initialShardKey
10101
10211
  }, void 0, false),