@gravitee/gamma-lib-observability 2.1.0 → 2.2.0-fix-obs-59-keep-dashboard-revision-map-alive.b6b4e36

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/INTEGRATION.md CHANGED
@@ -857,12 +857,12 @@ const capabilities: DashboardCapabilities = {
857
857
  </CapabilityProvider>;
858
858
  ```
859
859
 
860
- | Capability | Effect |
861
- | -------------------------------- | ------------------------------------------------------------------------------------- |
862
- | `observability.dashboards.read` | Shows dashboard pages. Templates with `requiredCapabilities` are hidden when `false`. |
863
- | `observability.dashboards.write` | Enables edit mode on dashboards (future). |
864
- | `observability.logs.read` | Shows logs explorer page. |
865
- | `observability.traces.read` | Reserved for traces explorer (future). |
860
+ | Capability | Effect |
861
+ | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
862
+ | `observability.dashboards.read` | Shows dashboard pages. Templates with `requiredCapabilities` are hidden when `false`. |
863
+ | `observability.dashboards.write` | Enables creating, editing, duplicating and deleting custom dashboards. Without it, templates **and** saved custom dashboards are still listed and viewable, just read-only. Storage must also be in scope, see [Dashboard storage](#dashboard-storage-dashboardpersistence). |
864
+ | `observability.logs.read` | Shows logs explorer page. |
865
+ | `observability.traces.read` | Shows the traces explorer and trace detail routes, when tracing is enabled. |
866
866
 
867
867
  **Default behavior:** When no `CapabilityProvider` is present, all capabilities default to `false` (secure default). For initial integration without RBAC, pass all relevant capabilities as `true`.
868
868
 
@@ -984,6 +984,85 @@ const logsSource = createHttpLogsSource(baseUrl, {
984
984
 
985
985
  **`getById`**: fetches a single log via `GET /observability/logs/{requestId}?apiId={apiId}`. The `apiId` is extracted from the log row at click time via the `logsGetApiId` prop. Returns `null` on 404.
986
986
 
987
+ ### Dashboard storage (`DashboardPersistence`)
988
+
989
+ Custom dashboards are stored through a `DashboardPersistence`. `ObservabilityRoutes` builds the built-in HTTP one (`{baseUrl}/observability/dashboards`) from the shared `http` options when `config.features.dashboards.enabled` is true, so a server-backed dashboards section needs no host plumbing. Mounting a `DashboardPersistenceProvider` overrides it, and stays the seam for a custom store and for tests.
990
+
991
+ Options of the built-in adapter, `createHttpDashboardPersistence(baseUrl, options?)`:
992
+
993
+ | Option | Purpose |
994
+ | --------------------------------- | ---------------------------------------------------------------------------------------- |
995
+ | `fetch`, `headers`, `credentials` | Same as the other HTTP adapters, see [Authenticated HTTP](#authenticated-http-http-prop) |
996
+ | `dashboardsPath` | Path appended to `baseUrl`. Defaults to `'/observability/dashboards'` |
997
+
998
+ To store dashboards elsewhere, mount your own implementation instead. The browser-local one shipped with the library is the shortest example:
999
+
1000
+ ```tsx
1001
+ import {
1002
+ DashboardPersistenceProvider,
1003
+ createLocalStorageDashboardPersistence,
1004
+ } from '@gravitee/gamma-lib-observability';
1005
+
1006
+ // Scope the key per environment: localStorage is origin-wide, so an unscoped
1007
+ // key leaks dashboards across environments served from the same console origin.
1008
+ const persistence = createLocalStorageDashboardPersistence({
1009
+ storageKey: `observability.dashboards.${environmentId}`,
1010
+ });
1011
+
1012
+ <DashboardPersistenceProvider persistence={persistence}>
1013
+ <observability.Routes baseUrl={baseUrl} />
1014
+ </DashboardPersistenceProvider>;
1015
+ ```
1016
+
1017
+ A custom store implements:
1018
+
1019
+ ```ts
1020
+ interface DashboardPersistence {
1021
+ fetchDashboard(id: string, signal?: AbortSignal): Promise<Dashboard>;
1022
+ fetchDashboards(signal?: AbortSignal): Promise<Dashboard[]>;
1023
+ createDashboard(dashboard: Dashboard, signal?: AbortSignal): Promise<Dashboard>;
1024
+ updateDashboard(dashboard: Dashboard, signal?: AbortSignal, options?: { force?: boolean }): Promise<Dashboard>;
1025
+ deleteDashboard(id: string, signal?: AbortSignal): Promise<void>;
1026
+ /** Optional, only for a store that guards concurrent edits. */
1027
+ adoptCurrentRevision?(dashboardId: string): void;
1028
+ }
1029
+ ```
1030
+
1031
+ Creation and update are separate operations rather than one `save`: the caller always knows which it means, and a server-backed store maps them to endpoints guarded by different permissions. Implementations own `createdAt` and `updatedAt` and stamp them themselves.
1032
+
1033
+ **Failures are typed**, so a screen can tell one outcome from another. Only the editor's save path discriminates them today; everywhere else, and for a store that throws plain `Error`s, a failure lands on the generic error toast. A failed _load_ renders the "may have been deleted" panel whatever the error class was.
1034
+
1035
+ | Thrown | Meaning | What the UI does with it today |
1036
+ | --------------------------- | ------------------------------------- | ------------------------------------------------------------------------------------------------------ |
1037
+ | `DashboardConflictError` | The dashboard moved since it was read | Opens the conflict dialog on the editor's save |
1038
+ | `DashboardNotFoundError` | No such dashboard in this environment | On a forced overwrite, switches that dialog to its deleted step. On any other write, the error toast |
1039
+ | `DashboardForbiddenError` | The caller may not perform this verb | Nothing specific yet: the error toast. Exported so a host can tell a refusal apart from a real failure |
1040
+ | `DashboardPersistenceError` | Anything else | Error toast |
1041
+
1042
+ **Concurrent edits.** `DashboardConflictError` carries `currentDashboard`, the dashboard as it now stands in the store, and the editor renders it from there rather than fetching again. The author then picks one of three resolutions, and each comes back to this port:
1043
+
1044
+ - _Overwrite_ calls `updateDashboard(dashboard, signal, { force: true })`, which must apply the write over whatever revision is current, in one request. The HTTP adapter sends `If-Match: *`. The dashboard must still exist, so an overwrite never resurrects a deleted one.
1045
+ - _Take their version_ calls `adoptCurrentRevision(id)`. The caller has moved onto the revision the refusal reported, so the next save must be checked against that revision instead of the one that was refused. Skipping this leaves the store refusing every later save over a conflict the author already settled.
1046
+ - _Save as a copy_ is a plain `createDashboard` with a new id, so it needs nothing extra.
1047
+
1048
+ A store with no optimistic locking never throws the conflict, so both members are inert there: `force` has nothing to force, and `adoptCurrentRevision` can be omitted.
1049
+
1050
+ The HTTP adapter tracks revisions itself, from the response `ETag` (falling back to the body's `version` when a cross-origin deployment does not expose the header), and quotes it back in `If-Match` on every update.
1051
+
1052
+ **The adapter instance is that memory.** The revisions live on the instance, so an adapter you build yourself has to stay alive for as long as the section is mounted. Rebuilding it (a `useMemo` keyed on an inline `http` literal, say, which is a fresh identity on every host render) empties the memory: the next save then reads the dashboard back, quotes the revision that is current at _that_ moment, and silently overwrites whatever the other author saved in between. No conflict, no dialog. `ObservabilityRoutes` handles this for the adapter it builds. When you build your own, key the memo on what identifies the store (the `baseUrl`, which carries the environment) and wrap the HTTP options in `useStableHttpOptions`, which holds the identity still without pinning the configuration: `fetch` still resolves to the implementation you hold now, and `headers` is still re-evaluated per request.
1053
+
1054
+ ```tsx
1055
+ import { createHttpDashboardPersistence, useStableHttpOptions } from '@gravitee/gamma-lib-observability';
1056
+
1057
+ const http = useStableHttpOptions({
1058
+ credentials: 'include',
1059
+ headers: () => ({ 'X-Xsrf-Token': readXsrfTokenFromCookie() }),
1060
+ });
1061
+ const persistence = useMemo(() => createHttpDashboardPersistence(baseUrl, http), [baseUrl, http]);
1062
+ ```
1063
+
1064
+ Changing the `baseUrl` still yields a genuinely fresh adapter, which is what an environment switch must do: no revision from the previous environment may survive it.
1065
+
987
1066
  ### Custom data source
988
1067
 
989
1068
  Override the built-in HTTP metrics adapter when your module needs custom request/response mapping:
@@ -0,0 +1,40 @@
1
+ import { Dashboard } from '../../types/domain';
2
+ /** What the author decided to do with a save the server refused. */
3
+ export type DashboardConflictChoice = 'overwrite' | 'take-theirs' | 'save-as-copy';
4
+ export interface DashboardConflictDialogProps {
5
+ readonly open: boolean;
6
+ /**
7
+ * The dashboard as it now stands on the server, carried by the refusal
8
+ * itself, so showing it costs no request.
9
+ */
10
+ readonly theirDashboard: Dashboard | null;
11
+ /**
12
+ * The contested dashboard is gone, whether a save or an overwrite is what
13
+ * found out. Saving a copy is the only way left to keep the work, so it is
14
+ * the only resolution offered.
15
+ */
16
+ readonly deleted?: boolean;
17
+ /**
18
+ * Resolution waiting on the server, so a slow one cannot be fired twice.
19
+ * Taking their version is not one of them: it is applied from the refusal
20
+ * this dialog is already holding, with no request to wait for.
21
+ */
22
+ readonly pending?: Exclude<DashboardConflictChoice, 'take-theirs'> | null;
23
+ readonly onResolve: (choice: DashboardConflictChoice) => void;
24
+ /** Dismissal. The editor stays open, dirty and untouched. */
25
+ readonly onCancel: () => void;
26
+ }
27
+ /**
28
+ * What an author is shown when their save was refused because someone else
29
+ * saved the same dashboard first.
30
+ *
31
+ * The refusal changed nothing on either side: their edits are still in the
32
+ * editor behind this dialog, and the other version is still on the server. So
33
+ * this asks rather than acts. Reloading on their behalf, the obvious shortcut,
34
+ * is the one outcome where work is actually lost, and it would be lost silently.
35
+ *
36
+ * Taking the other version is the only choice that discards something the
37
+ * author cannot get back, so it alone asks a second time.
38
+ */
39
+ export declare function DashboardConflictDialog({ open, theirDashboard, deleted, pending, onResolve, onCancel, }: DashboardConflictDialogProps): import("react/jsx-runtime").JSX.Element;
40
+ //# sourceMappingURL=DashboardConflictDialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DashboardConflictDialog.d.ts","sourceRoot":"","sources":["../../../src/dashboards/editor/DashboardConflictDialog.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,oEAAoE;AACpE,MAAM,MAAM,uBAAuB,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,CAAC;AAEnF,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,cAAc,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1C;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,uBAAuB,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC;IAC1E,QAAQ,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAC9D,6DAA6D;IAC7D,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,cAAc,EACd,OAAe,EACf,OAAc,EACd,SAAS,EACT,QAAQ,GACT,EAAE,4BAA4B,2CA6C9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardEditorPage.d.ts","sourceRoot":"","sources":["../../../src/dashboards/editor/DashboardEditorPage.tsx"],"names":[],"mappings":"AAkEA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,wBAAgB,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,EAAE,wBAAwB,2CAYjF"}
1
+ {"version":3,"file":"DashboardEditorPage.d.ts","sourceRoot":"","sources":["../../../src/dashboards/editor/DashboardEditorPage.tsx"],"names":[],"mappings":"AAuEA;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACpC;AAED,wBAAgB,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,EAAE,wBAAwB,2CAYjF"}
@@ -1,4 +1,19 @@
1
1
  import { Dashboard } from '../types/domain';
2
+ export interface UpdateDashboardOptions {
3
+ /**
4
+ * Applies the write over whatever revision is current, instead of the one the
5
+ * caller is working from.
6
+ *
7
+ * This is the second step of the conflict flow, not a convenience: an author
8
+ * who was refused a save and chose "overwrite" applies their edit in one
9
+ * request, where re-reading and re-submitting could lose the same race again.
10
+ * It cannot be reached by accident, only by asking for it here.
11
+ *
12
+ * An implementation that does not guard concurrent edits has nothing to
13
+ * force (its update is already unconditional) and may ignore this.
14
+ */
15
+ readonly force?: boolean;
16
+ }
2
17
  /**
3
18
  * Storage backing custom dashboards. Creation and update are **separate
4
19
  * operations**, not a single `save`: the caller always knows which one it means
@@ -17,8 +32,29 @@ export interface DashboardPersistence {
17
32
  fetchDashboards(signal?: AbortSignal): Promise<Dashboard[]>;
18
33
  /** Stores a dashboard that does not exist yet. Rejects if the id is taken. */
19
34
  createDashboard(dashboard: Dashboard, signal?: AbortSignal): Promise<Dashboard>;
20
- /** Overwrites an existing dashboard, preserving its creation date. Rejects if it is gone. */
21
- updateDashboard(dashboard: Dashboard, signal?: AbortSignal): Promise<Dashboard>;
35
+ /**
36
+ * Overwrites an existing dashboard, preserving its creation date. Rejects if
37
+ * it is gone, and (where the implementation guards concurrent edits) if it
38
+ * moved since the caller read it, unless {@link UpdateDashboardOptions.force}
39
+ * says to apply the write anyway.
40
+ *
41
+ * The options are last and optional, so an implementation that ignores them
42
+ * still satisfies this port with a two-parameter function.
43
+ */
44
+ updateDashboard(dashboard: Dashboard, signal?: AbortSignal, options?: UpdateDashboardOptions): Promise<Dashboard>;
22
45
  deleteDashboard(id: string, signal?: AbortSignal): Promise<void>;
46
+ /**
47
+ * Records that the caller has taken the dashboard carried by the last refused
48
+ * save as its new base, so the next save is checked against *that* revision
49
+ * rather than the stale one the refusal quoted.
50
+ *
51
+ * Only meaningful for an implementation that guards concurrent edits, hence
52
+ * optional: a store without that guard has no revision to move. Calling it is
53
+ * the author's decision reaching the adapter ("I have seen their version and
54
+ * taken it"), which is why a plain re-read cannot stand in for it. A re-read
55
+ * proves nothing about what the author accepted, and adopting a revision on
56
+ * one would let a draft be saved over an edit nobody ever looked at.
57
+ */
58
+ adoptCurrentRevision?(dashboardId: string): void;
23
59
  }
24
60
  //# sourceMappingURL=dashboard-persistence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-persistence.d.ts","sourceRoot":"","sources":["../../src/data-sources/dashboard-persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;;;;;GAMG;AACH;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACrE,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5D,8EAA8E;IAC9E,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChF,6FAA6F;IAC7F,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChF,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE"}
1
+ {"version":3,"file":"dashboard-persistence.d.ts","sourceRoot":"","sources":["../../src/data-sources/dashboard-persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;GAMG;AACH;;;;;GAKG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACrE,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5D,8EAA8E;IAC9E,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChF;;;;;;;;OAQG;IACH,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClH,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE;;;;;;;;;;;OAWG;IACH,oBAAoB,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD"}
@@ -1,6 +1,6 @@
1
1
  import { HttpOptions } from '../providers/http-provider';
2
2
  import { Dashboard } from '../types/domain';
3
- import { DashboardPersistence } from './dashboard-persistence';
3
+ import { DashboardPersistence, UpdateDashboardOptions } from './dashboard-persistence';
4
4
  export interface HttpDashboardPersistenceOptions extends HttpOptions {
5
5
  /**
6
6
  * Path appended to `baseUrl` for the dashboards collection.
@@ -8,28 +8,18 @@ export interface HttpDashboardPersistenceOptions extends HttpOptions {
8
8
  */
9
9
  readonly dashboardsPath?: string;
10
10
  }
11
- export interface UpdateDashboardOptions {
12
- /**
13
- * Applies the write over whatever revision is current (`If-Match: *`) instead
14
- * of the revision this adapter last saw.
15
- *
16
- * This is the second step of the conflict flow, not a convenience: an author
17
- * who was refused a save and chose "overwrite" applies their edit in one
18
- * request, where re-reading and re-submitting could lose the same race again.
19
- * It cannot be reached by accident — only by asking for it here. The
20
- * dashboard must still exist, so an overwrite never resurrects a deleted one.
21
- */
22
- readonly force?: boolean;
23
- }
24
11
  /**
25
- * A {@link DashboardPersistence} that can also be asked for a deliberate
26
- * overwrite. The extra argument is optional, so this is the port plus a
27
- * capability rather than a different shape: anything typed against the port
28
- * keeps working, and callers holding this type can offer the overwrite.
12
+ * The port's optional revision handling, honoured rather than ignored: this
13
+ * adapter guards concurrent edits, so `force` sends `If-Match: *` (the
14
+ * dashboard must still exist, so an overwrite never resurrects a deleted one)
15
+ * and `adoptCurrentRevision` is what moves the caller onto the revision a
16
+ * refused save reported.
29
17
  */
30
18
  export interface HttpDashboardPersistence extends DashboardPersistence {
31
19
  updateDashboard(dashboard: Dashboard, signal?: AbortSignal, options?: UpdateDashboardOptions): Promise<Dashboard>;
20
+ adoptCurrentRevision(dashboardId: string): void;
32
21
  }
22
+ export type { UpdateDashboardOptions };
33
23
  /**
34
24
  * {@link DashboardPersistence} backed by the Gamma dashboards API
35
25
  * (`{baseUrl}/observability/dashboards`).
@@ -1 +1 @@
1
- {"version":3,"file":"http-dashboard-persistence.d.ts","sourceRoot":"","sources":["../../src/data-sources/http-dashboard-persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAOjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAkBpE,MAAM,WAAW,+BAAgC,SAAQ,WAAW;IAClE;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;OASG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,MAAM,WAAW,wBAAyB,SAAQ,oBAAoB;IACpE,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CACnH;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,+BAA+B,GACxC,wBAAwB,CAgN1B"}
1
+ {"version":3,"file":"http-dashboard-persistence.d.ts","sourceRoot":"","sources":["../../src/data-sources/http-dashboard-persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAOjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAkB5F,MAAM,WAAW,+BAAgC,SAAQ,WAAW;IAClE;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AAED;;;;;;GAMG;AACH,MAAM,WAAW,wBAAyB,SAAQ,oBAAoB;IACpE,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClH,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACjD;AAED,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,+BAA+B,GACxC,wBAAwB,CA4P1B"}
@@ -14,5 +14,22 @@ export declare function useCustomDashboardQuery(id: string | undefined): import(
14
14
  */
15
15
  export declare function useCreateDashboardMutation(): import('@tanstack/react-query').UseMutationResult<Dashboard, Error, Dashboard, unknown>;
16
16
  export declare function useUpdateDashboardMutation(): import('@tanstack/react-query').UseMutationResult<Dashboard, Error, Dashboard, unknown>;
17
+ /**
18
+ * Update that applies over whatever revision is current, for an author who was
19
+ * refused a save and chose to overwrite the other version.
20
+ *
21
+ * Separate from {@link useUpdateDashboardMutation} rather than a flag on it, so
22
+ * an ordinary save cannot become an overwrite by passing the wrong variable:
23
+ * reaching for this hook is the deliberate act.
24
+ */
25
+ export declare function useOverwriteDashboardMutation(): import('@tanstack/react-query').UseMutationResult<Dashboard, Error, Dashboard, unknown>;
26
+ /**
27
+ * Takes the dashboard carried by a refused save as the caller's new base: the
28
+ * persistence stops holding the revision that was refused, and every screen
29
+ * reading this dashboard from the cache shows the version that won.
30
+ *
31
+ * No request is made: the refusal already carried the whole dashboard.
32
+ */
33
+ export declare function useAdoptServerDashboard(): (dashboard: Dashboard) => void;
17
34
  export declare function useDeleteDashboardMutation(): import('@tanstack/react-query').UseMutationResult<void, Error, string, unknown>;
18
35
  //# sourceMappingURL=use-custom-dashboards.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-custom-dashboards.d.ts","sourceRoot":"","sources":["../../src/hooks/use-custom-dashboards.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD;;;;GAIG;AACH,wBAAgB,wBAAwB,gFAavC;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,6EAmB7D;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,4FAEzC;AAED,wBAAgB,0BAA0B,4FAEzC;AAsBD,wBAAgB,0BAA0B,oFAgBzC"}
1
+ {"version":3,"file":"use-custom-dashboards.d.ts","sourceRoot":"","sources":["../../src/hooks/use-custom-dashboards.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGjD;;;;GAIG;AACH,wBAAgB,wBAAwB,gFAavC;AAED,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,6EAmB7D;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,4FAEzC;AAED,wBAAgB,0BAA0B,4FAEzC;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,4FAI5C;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,IAAI,CAAC,SAAS,EAAE,SAAS,KAAK,IAAI,CAYxE;AAsBD,wBAAgB,0BAA0B,oFAgBzC"}
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export { DEFAULT_CAPABILITIES, DEFAULT_MEASURE, FILTER_OPERATORS, isBarWidget, i
7
7
  export type { AttributeValue, FacetBucket, Measure, MetricResult, PayloadLog, Span, SpanEvent, SpanKind, SpanStatus, TimeSeriesGroup, TimeSeriesPoint, TraceDetail, TraceSummary, } from './types';
8
8
  export type { FacetMetricRequest, FacetsRequest, LogsQuery, LogColumnDefinition, MeasuresRequest, MetricRequest, TimeSeriesRequest, TraceQuery, } from './types';
9
9
  export type { DashboardPersistence, FetchTraceByIdParams, LogsDataSource, LogsQueryResult, MetricsDataSource, TracesDataSource, TracesQueryResult, } from './data-sources';
10
- export { CapabilityProvider, DashboardPersistenceProvider, HttpProvider, LiveRefreshProvider, LogsDataSourceProvider, MetricsDataSourceProvider, TracesDataSourceProvider, useCapabilities, useCapability, useDashboardPersistence, useOptionalDashboardPersistence, useHttpOptions, useLiveRefresh, useLogsDataSource, useMetricsDataSource, useOptionalLiveRefresh, useOptionalLogsDataSource, useOptionalMetricsDataSource, useOptionalTracesDataSource, useTracesDataSource, DEFAULT_REFRESH_INTERVAL_MS, } from './providers';
10
+ export { CapabilityProvider, DashboardPersistenceProvider, HttpProvider, LiveRefreshProvider, LogsDataSourceProvider, MetricsDataSourceProvider, TracesDataSourceProvider, useCapabilities, useCapability, useDashboardPersistence, useOptionalDashboardPersistence, useHttpOptions, useLiveRefresh, useLogsDataSource, useMetricsDataSource, useOptionalLiveRefresh, useOptionalLogsDataSource, useOptionalMetricsDataSource, useOptionalTracesDataSource, useStableHttpOptions, useTracesDataSource, DEFAULT_REFRESH_INTERVAL_MS, } from './providers';
11
11
  export type { CapabilityProviderProps, DashboardPersistenceProviderProps, HttpOptions, HttpProviderProps, LiveRefreshConfig, LiveRefreshProviderProps, LiveRefreshState, LogsDataSourceProviderProps, MetricsDataSourceProviderProps, TracesDataSourceProviderProps, } from './providers';
12
12
  export { DEFAULT_STALE_TIME, observabilityQueryKeys, useFacetsQuery, useInfiniteOptions, useLogDetailQuery, useLogsPagedQuery, useLogsQuery, useMeasuresQuery, useTimeSeriesQuery, useTraceDetailQuery, useTracesPagedQuery, } from './hooks';
13
13
  export type { InfiniteOptionsLoader, InfiniteOptionsLoaderParams, InfiniteOptionsLoaderResult, UseInfiniteOptionsParams, UseInfiniteOptionsResult, UseFacetsQueryParams, UseLogDetailQueryParams, UseLogDetailQueryResult, UseLogsPagedQueryParams, UseLogsPagedQueryResult, UseLogsQueryParams, UseMeasuresQueryParams, UseTimeSeriesQueryParams, UseTraceDetailQueryParams, UseTraceDetailQueryResult, UseTracesPagedQueryParams, UseTracesPagedQueryResult, } from './hooks';
@@ -46,7 +46,7 @@ export { createHttpTracesSource, type HttpTracesSourceOptions } from './data-sou
46
46
  export { useStableTimeRange } from './hooks/use-stable-time-range';
47
47
  export { createLocalStorageDashboardPersistence, type LocalStorageDashboardPersistenceOptions, } from './persistence/local-storage-dashboard-persistence';
48
48
  export { DashboardConflictError, DashboardForbiddenError, DashboardNotFoundError, DashboardPersistenceError, } from './data-sources';
49
- export { useCustomDashboardQuery, useCustomDashboardsQuery, useDeleteDashboardMutation, useCreateDashboardMutation, useUpdateDashboardMutation, } from './hooks/use-custom-dashboards';
49
+ export { useAdoptServerDashboard, useCustomDashboardQuery, useCustomDashboardsQuery, useDeleteDashboardMutation, useCreateDashboardMutation, useOverwriteDashboardMutation, useUpdateDashboardMutation, } from './hooks/use-custom-dashboards';
50
50
  export { parseDashboardJson, serializeDashboard, type DashboardJsonParseResult, } from './dashboards/editor/dashboard-json';
51
51
  export type { EditableDashboardFields } from './dashboards/editor/dashboard-editor-state';
52
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}