@gravitee/gamma-lib-observability 2.2.1 → 2.2.2-fix-obs-61-stop-false-editor-conflicts.0deb9bf

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
@@ -253,6 +253,8 @@ The `http` config is applied to **every** internally-built source. Resolution or
253
253
  2. Nearest `HttpProvider` ancestor
254
254
  3. Bare `fetch` (no auth) — only when neither of the above is provided
255
255
 
256
+ > **Do not memoize this object yourself.** Passing a fresh literal on every render is the intended usage. The library keeps whatever has to stay stable internally, while re-reading `fetch` and re-evaluating the `headers` factory on every request. A host-side `useMemo` with a dependency array that misses the closure producing your token would freeze a rotating token instead, which is the failure this arrangement exists to avoid.
257
+
256
258
  > Per-source option bags (`createHttpDataSource(baseUrl, options)`, `createHttpLogsSource(baseUrl, options)`) still exist for advanced overrides (see [Advanced Topics](#advanced-topics)), but the `http` prop is the recommended centralized pattern — supply it once and you are done.
257
259
 
258
260
  ---
@@ -1023,8 +1025,9 @@ interface DashboardPersistence {
1023
1025
  createDashboard(dashboard: Dashboard, signal?: AbortSignal): Promise<Dashboard>;
1024
1026
  updateDashboard(dashboard: Dashboard, signal?: AbortSignal, options?: { force?: boolean }): Promise<Dashboard>;
1025
1027
  deleteDashboard(id: string, signal?: AbortSignal): Promise<void>;
1026
- /** Optional, only for a store that guards concurrent edits. */
1028
+ /** Both optional, and only for a store that guards concurrent edits. */
1027
1029
  adoptCurrentRevision?(dashboardId: string): void;
1030
+ takeReadRevision?(dashboardId: string): void;
1028
1031
  }
1029
1032
  ```
1030
1033
 
@@ -1047,7 +1050,36 @@ Creation and update are separate operations rather than one `save`: the caller a
1047
1050
 
1048
1051
  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
1052
 
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.
1053
+ **Which revision a save is checked against.** A read never moves the caller onto the revision it reports, because a store cannot tell the read that fills a fresh editor from the refetch running behind one already open, and the second must leave that editor's base where it is. Whoever is about to edit what a read returned says so with `takeReadRevision(id)`, and the editor does exactly that when it seeds a draft. Without it, opening the editor on a dashboard that moved since it was listed is refused as a conflict against a version identical to the one on screen, which teaches authors to dismiss the one warning that must be believed.
1054
+
1055
+ Do not call it on a refetch behind a draft already open. Both this and `adoptCurrentRevision` fail closed: forgetting either costs a conflict the author can resolve, never a silent overwrite. If you drive the editor's screens yourself, `useTakeReadDashboardRevision()` is the hook that reaches the port.
1056
+
1057
+ 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. What a listing reports never becomes takeable: an editor opening straight after a list can still be showing content read before it, so only the read of that one dashboard can move its base.
1058
+
1059
+ **That memory outlives the adapter.** The revisions live in a `DashboardRevisionStore`, not on the adapter, because their lifetime is a correctness property rather than a caching detail: lose them and the next save reads the dashboard back, claims whatever revision is current at that moment, and silently overwrites the edit that landed in between. React documents memoization as an optimization it is free to discard, so a `useMemo` cannot hold something that must not be lost.
1060
+
1061
+ `ObservabilityRoutes` handles this for the adapter it builds, holding one store per `baseUrl` in state. An adapter you build yourself gets a private store by default, which is correct as long as you build it once and keep it. If it may be rebuilt, own the store and pass it in:
1062
+
1063
+ ```tsx
1064
+ import {
1065
+ createDashboardRevisionStore,
1066
+ createHttpDashboardPersistence,
1067
+ useStableHttpOptions,
1068
+ } from '@gravitee/gamma-lib-observability';
1069
+
1070
+ // Held in state, whose lifetime React guarantees, and replaced when the
1071
+ // environment changes so no revision survives the switch.
1072
+ const [scope, setScope] = useState(() => ({ baseUrl, store: createDashboardRevisionStore() }));
1073
+ if (scope.baseUrl !== baseUrl) setScope({ baseUrl, store: createDashboardRevisionStore() });
1074
+
1075
+ const http = useStableHttpOptions({ credentials: 'include' });
1076
+ const persistence = useMemo(
1077
+ () => createHttpDashboardPersistence(baseUrl, { ...http, revisionStore: scope.store }),
1078
+ [baseUrl, http, scope],
1079
+ );
1080
+ ```
1081
+
1082
+ Saving a dashboard the store never saw is still handled rather than refused: the current revision is read back so the request states a precondition the server checks. That leaves a narrow window an edit can slip through unseen, so it logs a warning. Nothing in the library reaches that path, and seeing it means a store was lost or never shared.
1051
1083
 
1052
1084
  ### Custom data source
1053
1085
 
@@ -1 +1 @@
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
+ {"version":3,"file":"DashboardEditorPage.d.ts","sourceRoot":"","sources":["../../../src/dashboards/editor/DashboardEditorPage.tsx"],"names":[],"mappings":"AAwEA;;;;;;;;;;;;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"}
@@ -56,5 +56,25 @@ export interface DashboardPersistence {
56
56
  * one would let a draft be saved over an edit nobody ever looked at.
57
57
  */
58
58
  adoptCurrentRevision?(dashboardId: string): void;
59
+ /**
60
+ * Records that the caller now holds the content of the last read of this
61
+ * dashboard, and is editing from it. The next save is checked against that
62
+ * revision rather than whichever older one the caller happened to be left
63
+ * with, which is what stops an editor opened on the current version from
64
+ * being refused a conflict against itself.
65
+ *
66
+ * This is the counterpart of {@link adoptCurrentRevision} for the ordinary
67
+ * way into the editor, and it exists for the same reason: an implementation
68
+ * cannot tell a refetch running behind a live draft from the read that seeds
69
+ * a fresh one, and only the caller can. Call it when a draft is seeded, with
70
+ * the content the draft was seeded from still on screen. Never on a refetch
71
+ * behind a draft already open, which would re-base that draft on an edit its
72
+ * author has not seen.
73
+ *
74
+ * Optional for the same reason as {@link adoptCurrentRevision}: a store
75
+ * without optimistic locking has no revision to move. Forgetting it costs a
76
+ * conflict the author can resolve, never a silent overwrite.
77
+ */
78
+ takeReadRevision?(dashboardId: string): void;
59
79
  }
60
80
  //# 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,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
+ {"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;IACjD;;;;;;;;;;;;;;;;;;OAkBG;IACH,gBAAgB,CAAC,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9C"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Which revision of each dashboard a caller is working from, and which one a
3
+ * refused save has offered them.
4
+ *
5
+ * <h3>Why this is not just a field on the adapter</h3>
6
+ * This is the optimistic-locking protection itself: the validator quoted back
7
+ * as `If-Match` on the next save. Forget it and the save reads the dashboard
8
+ * back, claims whatever revision is current at that moment, and destroys the
9
+ * edit that landed in between, with no conflict raised and nothing for either
10
+ * author to see.
11
+ *
12
+ * That makes its lifetime a correctness property rather than a caching detail,
13
+ * and a `useMemo` cannot express it: React documents memoization as an
14
+ * optimization it is free to discard, so a revision map living inside a
15
+ * memoized adapter can be emptied by React alone, without anything in the
16
+ * application changing. Holding it separately lets the owner give it a
17
+ * lifetime React actually guarantees, and lets the adapter be rebuilt as often
18
+ * as its inputs require without ever costing an edit.
19
+ *
20
+ * The scope of one store is one dashboards endpoint. A store must never be
21
+ * shared across environments, and must not outlive the one it belongs to:
22
+ * dashboards are per-environment, and a revision from another environment is
23
+ * meaningless at best.
24
+ *
25
+ * <h3>Read and write are not the same event</h3>
26
+ * A write always moves the caller onto the revision it produced, because that
27
+ * is what the caller now holds. A read only fills a blank. The asymmetry is
28
+ * the whole point: an editor holds a draft seeded from an earlier read while a
29
+ * refetch runs behind it, and moving the revision on that refetch would let
30
+ * the draft be saved against a revision it was never based on, silently
31
+ * overwriting the edit that produced it. The cost of erring this way is a save
32
+ * refused as a conflict when the author was in fact already current. They are
33
+ * shown the current version and can overwrite in one request: visible and
34
+ * recoverable, where the reverse is neither.
35
+ *
36
+ * <h3>Seeing a revision, and taking it</h3>
37
+ * That leaves reads that *are* the caller taking the content: the one seeding
38
+ * a fresh editor. Refusing to move for those refuses every first save made
39
+ * after the dashboard moved since it was listed, and a conflict the author
40
+ * cannot have caused is worse than no warning at all, because it is the same
41
+ * dialog the real conflict uses.
42
+ *
43
+ * So a read records what it saw without moving anyone, and taking it is a
44
+ * separate act. Two revisions can be on offer at once and they are kept apart:
45
+ * the one a read reported ({@link sight} / {@link take}) and the one a refused
46
+ * save reported ({@link offer} / {@link adopt}). Merging them would let a
47
+ * refetch landing between a refusal and the author's answer replace the version
48
+ * the dialog is showing, so "take their version" would move them onto an edit
49
+ * nobody has looked at.
50
+ *
51
+ * Both stay fail-closed: a caller that never says it took anything keeps the
52
+ * revision it already had, which costs a conflict, never an overwrite.
53
+ */
54
+ export interface DashboardRevisionStore {
55
+ /** The validator to quote for a save, or `undefined` when none is known. */
56
+ current(dashboardId: string): string | undefined;
57
+ /**
58
+ * Records the revision a write just produced. Always moves, and settles the
59
+ * race any outstanding offer belonged to: keeping that offer would let a
60
+ * later "take their version" move the caller back onto a revision older than
61
+ * the one they just wrote.
62
+ */
63
+ refresh(dashboardId: string, validator: string | null): void;
64
+ /**
65
+ * Records the revision a *listing* reported. Fills a blank and leaves an
66
+ * existing entry alone, for the reason given on this interface.
67
+ *
68
+ * A listing is never takeable. What it reports is the revision of a dashboard
69
+ * nobody is looking at yet, and an editor opening straight afterwards can
70
+ * still be showing older content held per dashboard elsewhere. Taking the
71
+ * listing's revision would move the base past the content on screen, which is
72
+ * the overwrite all of this exists to prevent. Use {@link sight} for a read
73
+ * whose content the caller can actually go on to edit.
74
+ */
75
+ seed(dashboardId: string, validator: string | null): void;
76
+ /**
77
+ * Records the revision a read of this one dashboard reported: seen, and
78
+ * available to be {@link take}n by whoever goes on to hold that content.
79
+ * Fills a blank exactly like {@link seed}, and moves no one on its own.
80
+ */
81
+ sight(dashboardId: string, validator: string | null): void;
82
+ /**
83
+ * Moves the caller onto the revision the last {@link sight}ed read reported,
84
+ * which is the one they have just been handed and are about to edit.
85
+ *
86
+ * Nothing sighted is not an error: no read of this dashboard has landed, so
87
+ * the remembered revision is still the best thing known, and leaving it is
88
+ * what keeps a forgotten call cheap.
89
+ */
90
+ take(dashboardId: string): void;
91
+ /**
92
+ * Records the revision a refused save reported: seen, but not taken. It is
93
+ * kept apart from {@link current} because the author has been *told* about
94
+ * that revision, not moved onto it.
95
+ */
96
+ offer(dashboardId: string, validator: string | null): void;
97
+ /**
98
+ * Moves the caller onto the offered revision, which is the one they have
99
+ * just been shown and taken. Nothing to adopt is not an error: no save was
100
+ * refused, so the remembered revision is still the one the caller is on.
101
+ */
102
+ adopt(dashboardId: string): void;
103
+ /** Drops everything known about a dashboard that no longer exists. */
104
+ forget(dashboardId: string): void;
105
+ }
106
+ /**
107
+ * A store for one dashboards endpoint. Give it a lifetime that matches that
108
+ * endpoint: long enough to outlive any adapter built against it, short enough
109
+ * that switching environment starts from nothing.
110
+ */
111
+ export declare function createDashboardRevisionStore(): DashboardRevisionStore;
112
+ //# sourceMappingURL=dashboard-revision-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-revision-store.d.ts","sourceRoot":"","sources":["../../src/data-sources/dashboard-revision-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAEjD;;;;;OAKG;IACH,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAE7D;;;;;;;;;;OAUG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAE1D;;;;OAIG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAE3D;;;;;;;OAOG;IACH,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC;;;;OAIG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAE3D;;;;OAIG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjC,sEAAsE;IACtE,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,IAAI,sBAAsB,CA8DrE"}
@@ -1,23 +1,36 @@
1
1
  import { HttpOptions } from '../providers/http-provider';
2
2
  import { Dashboard } from '../types/domain';
3
3
  import { DashboardPersistence, UpdateDashboardOptions } from './dashboard-persistence';
4
+ import { DashboardRevisionStore } from './dashboard-revision-store';
4
5
  export interface HttpDashboardPersistenceOptions extends HttpOptions {
5
6
  /**
6
7
  * Path appended to `baseUrl` for the dashboards collection.
7
8
  * @default '/observability/dashboards'
8
9
  */
9
10
  readonly dashboardsPath?: string;
11
+ /**
12
+ * Where this adapter remembers which revision each dashboard is being edited
13
+ * from. Pass one in to give that memory a lifetime longer than the adapter's,
14
+ * which is what a caller rebuilding the adapter has to do: see
15
+ * {@link DashboardRevisionStore} for why losing it costs an edit.
16
+ *
17
+ * Defaults to a private store, so an adapter that is built once and kept is
18
+ * correct without the caller thinking about it.
19
+ */
20
+ readonly revisionStore?: DashboardRevisionStore;
10
21
  }
11
22
  /**
12
23
  * The port's optional revision handling, honoured rather than ignored: this
13
24
  * 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.
25
+ * dashboard must still exist, so an overwrite never resurrects a deleted one),
26
+ * `adoptCurrentRevision` is what moves the caller onto the revision a refused
27
+ * save reported, and `takeReadRevision` what moves them onto the one the last
28
+ * read reported.
17
29
  */
18
30
  export interface HttpDashboardPersistence extends DashboardPersistence {
19
31
  updateDashboard(dashboard: Dashboard, signal?: AbortSignal, options?: UpdateDashboardOptions): Promise<Dashboard>;
20
32
  adoptCurrentRevision(dashboardId: string): void;
33
+ takeReadRevision(dashboardId: string): void;
21
34
  }
22
35
  export type { UpdateDashboardOptions };
23
36
  /**
@@ -26,23 +39,20 @@ export type { UpdateDashboardOptions };
26
39
  *
27
40
  * <h3>Revisions</h3>
28
41
  * The API guards concurrent edits with `ETag` / `If-Match`, and its revision
29
- * counter has no home in the lib's `Dashboard` deliberately, so the port stays
30
- * the same contract whatever backs it. This adapter therefore remembers, per
31
- * dashboard id, the validator naming the revision the caller is working from,
32
- * and quotes it back on the next save. `If-Match` is always sent, so the API's
33
- * 428 is unreachable from here.
42
+ * counter has no home in the lib's `Dashboard`, deliberately, so the port stays
43
+ * the same contract whatever backs it. The validator naming the revision the
44
+ * caller is working from is kept in a {@link DashboardRevisionStore} instead,
45
+ * and quoted back on the next save. `If-Match` is always sent, so the API's 428
46
+ * is unreachable from here.
47
+ *
48
+ * That store is where the read-versus-write asymmetry is explained, and why its
49
+ * lifetime belongs to the caller rather than to this adapter. Pass one in when
50
+ * this adapter may be rebuilt.
34
51
  *
35
- * A **write** always adopts the revision it just produced: after a save, that is
36
- * what the caller holds. A **read** only fills a blank it never moves a
37
- * revision already remembered. The two differ because a read is not proof the
38
- * caller took the content: an editor holds a draft seeded from an earlier read
39
- * while TanStack Query refetches behind it, and adopting that refetch's revision
40
- * would let the draft be saved with a validator naming a revision it was never
41
- * based on — silently overwriting the edit that produced it, which is the one
42
- * outcome the whole mechanism exists to prevent. The cost of the other direction
43
- * is a save refused as a conflict while the author was in fact already looking
44
- * at the current revision: they are shown it and can overwrite in one request.
45
- * Visible and recoverable, where the reverse is neither.
52
+ * A read never moves the caller onto the revision it reports, because the same
53
+ * call is both the read that seeds a fresh editor and the refetch running
54
+ * behind one already open. Whoever is about to edit what a read returned says
55
+ * so with `takeReadRevision`.
46
56
  *
47
57
  * The `ETag` header is preferred and the body's `version` is the fallback: a
48
58
  * cross-origin deployment that does not expose `ETag` still yields a usable
@@ -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,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"}
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;AAC5F,OAAO,EAAgC,KAAK,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAkBvG,MAAM,WAAW,+BAAgC,SAAQ,WAAW;IAClE;;;OAGG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;;;;OAQG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,sBAAsB,CAAC;CACjD;AAED;;;;;;;GAOG;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;IAChD,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,+BAA+B,GACxC,wBAAwB,CAyQ1B"}
@@ -3,6 +3,7 @@ export type { LogsDataSource, LogsQueryResult } from './logs-data-source';
3
3
  export type { MetricsDataSource } from './metrics-data-source';
4
4
  export type { FetchTraceByIdParams, TracesDataSource, TracesQueryResult } from './traces-data-source';
5
5
  export { DashboardConflictError, DashboardForbiddenError, DashboardNotFoundError, DashboardPersistenceError, } from './dashboard-errors';
6
+ export { createDashboardRevisionStore, type DashboardRevisionStore } from './dashboard-revision-store';
6
7
  export { createHttpDashboardPersistence, type HttpDashboardPersistence, type HttpDashboardPersistenceOptions, type UpdateDashboardOptions, } from './http-dashboard-persistence';
7
8
  export { createHttpDataSource, type HttpDataSourceOptions } from './http-data-source';
8
9
  export { createHttpFilterSource, type FilterSource } from './http-filter-source';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-sources/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEtG,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,8BAA8B,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,4BAA4B,EAAE,KAAK,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC3G,OAAO,EAAE,sBAAsB,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data-sources/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACpE,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1E,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEtG,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,4BAA4B,EAAE,KAAK,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACvG,OAAO,EACL,8BAA8B,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,GAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,4BAA4B,EAAE,KAAK,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC3G,OAAO,EAAE,sBAAsB,EAAE,KAAK,uBAAuB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -31,5 +31,20 @@ export declare function useOverwriteDashboardMutation(): import('@tanstack/react
31
31
  * No request is made: the refusal already carried the whole dashboard.
32
32
  */
33
33
  export declare function useAdoptServerDashboard(): (dashboard: Dashboard) => void;
34
+ /**
35
+ * Tells the persistence that this caller now holds what the last read of a
36
+ * dashboard returned, and is editing from it, so the next save is checked
37
+ * against that revision instead of an older one left over from a listing or an
38
+ * earlier visit. Without it, opening the editor on a dashboard that moved since
39
+ * it was listed is refused as a conflict against a version identical to the one
40
+ * on screen.
41
+ *
42
+ * Call it when a draft is seeded, never on a refetch behind a draft already
43
+ * open: the persistence cannot tell those apart, and moving the base under a
44
+ * live draft is what would let it overwrite an edit its author never saw.
45
+ *
46
+ * No request is made, and no cache is touched: the content is already in hand.
47
+ */
48
+ export declare function useTakeReadDashboardRevision(): (dashboardId: string) => void;
34
49
  export declare function useDeleteDashboardMutation(): import('@tanstack/react-query').UseMutationResult<void, Error, string, unknown>;
35
50
  //# 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":"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"}
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;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,IAAI,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAS5E;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';
@@ -37,7 +37,7 @@ export { ContextFiltersProvider, useContextFilters } from './routing';
37
37
  export type { BreadcrumbSegment, ContextFiltersProviderProps, DashboardFeatureConfig, ExternalDashboardLink, FeatureKey, LogDetailMode, LogsFeatureConfig, NavGroup, NavItem, ObservabilityFeatures, ObservabilityFeaturesConfig, ObservabilityRoutesProps, TracingFeatureConfig, TracingScreenProps, } from './routing';
38
38
  export { buildObservabilityBaseUrl, type BuildObservabilityBaseUrlOptions } from './build-observability-base-url';
39
39
  export { buildTracesBaseUrl, type BuildTracesBaseUrlOptions } from './build-traces-base-url';
40
- export { createHttpDashboardPersistence, type HttpDashboardPersistence, type HttpDashboardPersistenceOptions, type UpdateDashboardOptions, } from './data-sources';
40
+ export { createDashboardRevisionStore, createHttpDashboardPersistence, type DashboardRevisionStore, type HttpDashboardPersistence, type HttpDashboardPersistenceOptions, type UpdateDashboardOptions, } from './data-sources';
41
41
  export { createHttpDataSource, type HttpDataSourceOptions } from './data-sources';
42
42
  export { createHttpFilterSource, type FilterSource } from './data-sources';
43
43
  export { createHttpLogsSource, type HttpLogsSourceOptions } from './data-sources';
@@ -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 { useAdoptServerDashboard, useCustomDashboardQuery, useCustomDashboardsQuery, useDeleteDashboardMutation, useCreateDashboardMutation, useOverwriteDashboardMutation, useUpdateDashboardMutation, } from './hooks/use-custom-dashboards';
49
+ export { useAdoptServerDashboard, useCustomDashboardQuery, useCustomDashboardsQuery, useDeleteDashboardMutation, useCreateDashboardMutation, useOverwriteDashboardMutation, useTakeReadDashboardRevision, 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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"}