@kortix/sdk 0.13.18 → 0.13.20

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.
@@ -32,6 +32,8 @@ export * from './query-keys.js';
32
32
  export * from './query-contracts.js';
33
33
  export * from './use-project-name.js';
34
34
  export * from './use-project-session.js';
35
+ export * from './use-project-sessions.js';
36
+ export * from './session-cache-write.js';
35
37
  export * from './invalidate-project.js';
36
38
  export * from './use-feature-flag.js';
37
39
  export { useKortixViewer, fetchKortixViewer, SignInWithKortix, kortixSignInHref, kortixSignOutHref, KORTIX_AUTH_DEFAULT_BASE_PATH, type KortixViewerInfo, type KortixViewerState, type SignInWithKortixProps, } from './sign-in-with-kortix.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
@@ -80,6 +80,8 @@ export * from './query-keys.js';
80
80
  export * from './query-contracts.js';
81
81
  export * from './use-project-name.js';
82
82
  export * from './use-project-session.js';
83
+ export * from './use-project-sessions.js';
84
+ export * from './session-cache-write.js';
83
85
  export * from './invalidate-project.js';
84
86
  export * from './use-feature-flag.js';
85
87
  // "Sign in with Kortix" — the browser half of `createKortixAuth`
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/react/index.ts"],"names":[],"mappings":"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"}
@@ -224,6 +224,23 @@ export declare const qk: {
224
224
  * staying strict.
225
225
  */
226
226
  readonly sessions: (id: string, scope?: "visible" | "project") => readonly ["kx", "project", string, "sessions", "list", "project" | "visible"];
227
+ /**
228
+ * The PAGED session list — `useInfiniteQuery` over
229
+ * `listProjectSessionsPage`. A separate slot from `sessions(...)` because
230
+ * the two hold different SHAPES: this one caches
231
+ * `{ pages: ProjectSessionPage[], pageParams }`, that one caches a bare
232
+ * `ProjectSession[]`. react-query does not tag a cache entry with the hook
233
+ * that wrote it, so sharing one key between `useQuery` and
234
+ * `useInfiniteQuery` hands each hook the other's shape and both render
235
+ * garbage.
236
+ *
237
+ * It still nests under `sessionsScope(id)`, so the existing prefix
238
+ * invalidation every mutation already performs
239
+ * (`invalidateQueries({ queryKey: qk.project.sessionsScope(id) })`)
240
+ * reaches the paged list too. That is the point of the shared prefix — a
241
+ * new slot must not need a second invalidation nobody remembers to add.
242
+ */
243
+ readonly sessionsPaged: (id: string, scope?: "visible" | "project") => readonly ["kx", "project", string, "sessions", "list-paged", "project" | "visible"];
227
244
  /**
228
245
  * One session, by id. Nests directly under the scope-LESS
229
246
  * `sessionsScope` prefix, not under a specific `sessions(id, scope)`
@@ -1 +1 @@
1
- {"version":3,"file":"query-keys.d.ts","sourceRoot":"","sources":["../../src/react/query-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,eAAO,MAAM,EAAE;IACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;;QAED;;;;;;;;;;WAUG;;QAGH;;;;;;;;;;;;;;;;WAgBG;gCACY,MAAM,GAAG,IAAI,GAAG,SAAS;;;QAKxC;;;;iEAIyD;;QAGzD,+EAA+E;oCAC5D,MAAM;;;QAIzB,4DAA4D;6BAChD,MAAM;QAElB;;;;;;;;;;;;;WAaG;+BACW,MAAM;8BAEP,MAAM;QACnB;;;;;;;;;;;WAWG;8BACU,MAAM;QACnB;;;;;;;;;;;;;;;WAeG;mCACe,MAAM;QAExB,iFAAiF;0CACxD,MAAM;QAE/B;;;;;;;;;WASG;qCACiB,MAAM;QAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA+BG;gCACY,MAAM,UAAS,SAAS,GAAG,SAAS;QAGnD;;;;;;WAMG;+BACW,MAAM,aAAa,MAAM;gCAExB,MAAM,aAAa,MAAM;QAExC;;;;;;;;;;;WAWG;sCACkB,MAAM,aAAa,MAAM;QAE9C,qEAAqE;sCAChD,MAAM,aAAa,MAAM;QAE9C,yEAAyE;mCACvD,MAAM,aAAa,MAAM;kCAG1B,MAAM;QACvB,+DAA+D;uCACzC,MAAM,QAAQ,MAAM;QAE1C;;;2DAGmD;gDACpB,MAAM,QAAQ,MAAM;8BAGtC,MAAM;sCACE,MAAM;sCACN,MAAM;QAC3B,yFAAyF;mCACvE,MAAM;QACxB;iFACyE;sCACpD,MAAM;+BAEb,MAAM;QAEpB,yDAAyD;4BAC9C,MAAM;QACjB,iEAAiE;iCACjD,MAAM,SAAS,MAAM;QACrC,oDAAoD;wCAC7B,MAAM,SAAS,MAAM;QAE5C,gDAAgD;sCAC3B,MAAM,SAAS,MAAM;QAG1C;;;;;4CAKoC;gCACrB,MAAM;QAErB;;;;;;;WAOG;6BACS,MAAM;kCACD,MAAM,QAAQ,MAAM;gCAEtB,MAAM;QAErB;;wEAEgE;gCACjD,MAAM;QACrB;;;;;;;;;;WAUG;wCACoB,MAAM;iCAEb,MAAM;wCACC,MAAM;iCACb,MAAM;QAEtB,6EAA6E;+BAC/D,MAAM;uCACE,MAAM,QAAQ,MAAM;qCAEtB,MAAM,QAAQ,MAAM;wCAEjB,MAAM,QAAQ,MAAM;uCAErB,MAAM,QAAQ,MAAM;qCAEtB,MAAM,QAAQ,MAAM;QAExC,wFAAwF;mCACtE,MAAM,MAAM,OAAO,GAAG,IAAI;kCAE3B,MAAM,SAAS,MAAM,GAAG,IAAI;sCAExB,MAAM;mCACT,MAAM;;CAElB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"query-keys.d.ts","sourceRoot":"","sources":["../../src/react/query-keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,eAAO,MAAM,EAAE;IACb;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;;QAED;;;;;;;;;;WAUG;;QAGH;;;;;;;;;;;;;;;;WAgBG;gCACY,MAAM,GAAG,IAAI,GAAG,SAAS;;;QAKxC;;;;iEAIyD;;QAGzD,+EAA+E;oCAC5D,MAAM;;;QAIzB,4DAA4D;6BAChD,MAAM;QAElB;;;;;;;;;;;;;WAaG;+BACW,MAAM;8BAEP,MAAM;QACnB;;;;;;;;;;;WAWG;8BACU,MAAM;QACnB;;;;;;;;;;;;;;;WAeG;mCACe,MAAM;QAExB,iFAAiF;0CACxD,MAAM;QAE/B;;;;;;;;;WASG;qCACiB,MAAM;QAE1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA+BG;gCACY,MAAM,UAAS,SAAS,GAAG,SAAS;QAGnD;;;;;;;;;;;;;;;WAeG;qCACiB,MAAM,UAAS,SAAS,GAAG,SAAS;QAGxD;;;;;;WAMG;+BACW,MAAM,aAAa,MAAM;gCAExB,MAAM,aAAa,MAAM;QAExC;;;;;;;;;;;WAWG;sCACkB,MAAM,aAAa,MAAM;QAE9C,qEAAqE;sCAChD,MAAM,aAAa,MAAM;QAE9C,yEAAyE;mCACvD,MAAM,aAAa,MAAM;kCAG1B,MAAM;QACvB,+DAA+D;uCACzC,MAAM,QAAQ,MAAM;QAE1C;;;2DAGmD;gDACpB,MAAM,QAAQ,MAAM;8BAGtC,MAAM;sCACE,MAAM;sCACN,MAAM;QAC3B,yFAAyF;mCACvE,MAAM;QACxB;iFACyE;sCACpD,MAAM;+BAEb,MAAM;QAEpB,yDAAyD;4BAC9C,MAAM;QACjB,iEAAiE;iCACjD,MAAM,SAAS,MAAM;QACrC,oDAAoD;wCAC7B,MAAM,SAAS,MAAM;QAE5C,gDAAgD;sCAC3B,MAAM,SAAS,MAAM;QAG1C;;;;;4CAKoC;gCACrB,MAAM;QAErB;;;;;;;WAOG;6BACS,MAAM;kCACD,MAAM,QAAQ,MAAM;gCAEtB,MAAM;QAErB;;wEAEgE;gCACjD,MAAM;QACrB;;;;;;;;;;WAUG;wCACoB,MAAM;iCAEb,MAAM;wCACC,MAAM;iCACb,MAAM;QAEtB,6EAA6E;+BAC/D,MAAM;uCACE,MAAM,QAAQ,MAAM;qCAEtB,MAAM,QAAQ,MAAM;wCAEjB,MAAM,QAAQ,MAAM;uCAErB,MAAM,QAAQ,MAAM;qCAEtB,MAAM,QAAQ,MAAM;QAExC,wFAAwF;mCACtE,MAAM,MAAM,OAAO,GAAG,IAAI;kCAE3B,MAAM,SAAS,MAAM,GAAG,IAAI;sCAExB,MAAM;mCACT,MAAM;;CAElB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC"}
@@ -224,6 +224,23 @@ export const qk = {
224
224
  * staying strict.
225
225
  */
226
226
  sessions: (id, scope = 'visible') => [...qk.project.sessionsScope(id), 'list', scope],
227
+ /**
228
+ * The PAGED session list — `useInfiniteQuery` over
229
+ * `listProjectSessionsPage`. A separate slot from `sessions(...)` because
230
+ * the two hold different SHAPES: this one caches
231
+ * `{ pages: ProjectSessionPage[], pageParams }`, that one caches a bare
232
+ * `ProjectSession[]`. react-query does not tag a cache entry with the hook
233
+ * that wrote it, so sharing one key between `useQuery` and
234
+ * `useInfiniteQuery` hands each hook the other's shape and both render
235
+ * garbage.
236
+ *
237
+ * It still nests under `sessionsScope(id)`, so the existing prefix
238
+ * invalidation every mutation already performs
239
+ * (`invalidateQueries({ queryKey: qk.project.sessionsScope(id) })`)
240
+ * reaches the paged list too. That is the point of the shared prefix — a
241
+ * new slot must not need a second invalidation nobody remembers to add.
242
+ */
243
+ sessionsPaged: (id, scope = 'visible') => [...qk.project.sessionsScope(id), 'list-paged', scope],
227
244
  /**
228
245
  * One session, by id. Nests directly under the scope-LESS
229
246
  * `sessionsScope` prefix, not under a specific `sessions(id, scope)`
@@ -1 +1 @@
1
- {"version":3,"file":"query-keys.js","sourceRoot":"","sources":["../../src/react/query-keys.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-keys.js","sourceRoot":"","sources":["../../src/react/query-keys.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Writing to the project-session caches, whatever shape they are in.
3
+ *
4
+ * One project's sessions are cached under three different shapes at once:
5
+ *
6
+ * qk.project.sessions(id, scope) → ProjectSession[]
7
+ * qk.project.sessionsPaged(id, scope) → { pages: ProjectSessionPage[], pageParams }
8
+ * qk.project.session(id, sessionId) → ProjectSession
9
+ *
10
+ * A mutation's optimistic write used to know only the first one, because it was
11
+ * the only one: the sidebar held the project's entire session list in a single
12
+ * flat array. Once that list became a bounded `useInfiniteQuery`
13
+ * (`useProjectSessions`), a write aimed at the flat key stopped reaching the
14
+ * surface the user was looking at — the rename appeared only when the
15
+ * post-mutation refetch landed, which is exactly the delay the optimistic write
16
+ * exists to hide.
17
+ *
18
+ * `updateCachedProjectSessions` writes through all three, so a caller states
19
+ * the change once, in terms of sessions, and never names a cache shape.
20
+ */
21
+ import type { QueryClient } from '@tanstack/react-query';
22
+ import type { ProjectSession } from '../core/rest/projects-client/sessions.js';
23
+ export type ProjectSessionsUpdater = (sessions: ProjectSession[]) => ProjectSession[];
24
+ /**
25
+ * Apply a sessions updater to ONE cache entry, whatever shape it holds.
26
+ *
27
+ * An unrecognized entry is returned BY REFERENCE, not rebuilt: every entry
28
+ * under the sessions prefix passes through here, and handing react-query a new
29
+ * object for one it did not need to change re-renders that entry's observers
30
+ * for nothing.
31
+ */
32
+ export declare function applyToCachedSessionShape(cached: unknown, update: ProjectSessionsUpdater): unknown;
33
+ /**
34
+ * Apply `update` to every cached session list for this project — flat, paged,
35
+ * single-row, and every scope — in one call.
36
+ *
37
+ * Prefixed on `qk.project.sessionsScope(projectId)`, the same prefix every
38
+ * mutation already invalidates, so a cache shape added later is covered without
39
+ * finding each writer again.
40
+ */
41
+ export declare function updateCachedProjectSessions(queryClient: QueryClient, projectId: string, update: ProjectSessionsUpdater): void;
42
+ /**
43
+ * Insert a session at the top of the cached lists, or replace it where it is
44
+ * already cached.
45
+ *
46
+ * Separate from `updateCachedProjectSessions` because an INSERT is not a map:
47
+ * running a prepending updater over a paged cache would add the row to every
48
+ * loaded page. The list is ordered by most recent activity, so a just-created
49
+ * session belongs at the top of the FIRST page and nowhere else.
50
+ */
51
+ export declare function upsertIntoCachedSessionShape(cached: unknown, session: ProjectSession): unknown;
52
+ /**
53
+ * Insert a session into every cached list for this project, or replace it
54
+ * wherever it is already cached. The optimistic counterpart of a create.
55
+ */
56
+ export declare function upsertCachedProjectSession(queryClient: QueryClient, projectId: string, session: ProjectSession): void;
57
+ //# sourceMappingURL=session-cache-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cache-write.d.ts","sourceRoot":"","sources":["../../src/react/session-cache-write.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AAG5E,MAAM,MAAM,sBAAsB,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,CAAC;AAuBtF;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAuBlG;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,sBAAsB,GAC7B,IAAI,CAKN;AAED;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAkC9F;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,GACtB,IAAI,CAKN"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Writing to the project-session caches, whatever shape they are in.
3
+ *
4
+ * One project's sessions are cached under three different shapes at once:
5
+ *
6
+ * qk.project.sessions(id, scope) → ProjectSession[]
7
+ * qk.project.sessionsPaged(id, scope) → { pages: ProjectSessionPage[], pageParams }
8
+ * qk.project.session(id, sessionId) → ProjectSession
9
+ *
10
+ * A mutation's optimistic write used to know only the first one, because it was
11
+ * the only one: the sidebar held the project's entire session list in a single
12
+ * flat array. Once that list became a bounded `useInfiniteQuery`
13
+ * (`useProjectSessions`), a write aimed at the flat key stopped reaching the
14
+ * surface the user was looking at — the rename appeared only when the
15
+ * post-mutation refetch landed, which is exactly the delay the optimistic write
16
+ * exists to hide.
17
+ *
18
+ * `updateCachedProjectSessions` writes through all three, so a caller states
19
+ * the change once, in terms of sessions, and never names a cache shape.
20
+ */
21
+ import { qk } from './query-keys.js';
22
+ function isPagedSessionCache(value) {
23
+ return (typeof value === 'object' &&
24
+ value !== null &&
25
+ Array.isArray(value.pages));
26
+ }
27
+ function isSessionRow(value) {
28
+ return (typeof value === 'object' &&
29
+ value !== null &&
30
+ typeof value.session_id === 'string');
31
+ }
32
+ /**
33
+ * Apply a sessions updater to ONE cache entry, whatever shape it holds.
34
+ *
35
+ * An unrecognized entry is returned BY REFERENCE, not rebuilt: every entry
36
+ * under the sessions prefix passes through here, and handing react-query a new
37
+ * object for one it did not need to change re-renders that entry's observers
38
+ * for nothing.
39
+ */
40
+ export function applyToCachedSessionShape(cached, update) {
41
+ if (Array.isArray(cached))
42
+ return update(cached);
43
+ if (isPagedSessionCache(cached)) {
44
+ return {
45
+ ...cached,
46
+ pages: cached.pages.map((page) => ({ ...page, items: update(page.items) })),
47
+ };
48
+ }
49
+ if (isSessionRow(cached)) {
50
+ // A single row is a one-element list as far as the updater is concerned.
51
+ // Matched back BY ID, not by position: an updater that prepends (a session
52
+ // being seeded) would otherwise replace this entry with the new session's
53
+ // row, so `session(projectId, sessionId)` would start answering with a
54
+ // DIFFERENT session. An updater that drops the row (a delete) leaves the
55
+ // entry untouched rather than caching `undefined`, which react-query reads
56
+ // as "never fetched".
57
+ const updated = update([cached]);
58
+ return updated.find((row) => row.session_id === cached.session_id) ?? cached;
59
+ }
60
+ return cached;
61
+ }
62
+ /**
63
+ * Apply `update` to every cached session list for this project — flat, paged,
64
+ * single-row, and every scope — in one call.
65
+ *
66
+ * Prefixed on `qk.project.sessionsScope(projectId)`, the same prefix every
67
+ * mutation already invalidates, so a cache shape added later is covered without
68
+ * finding each writer again.
69
+ */
70
+ export function updateCachedProjectSessions(queryClient, projectId, update) {
71
+ queryClient.setQueriesData({ queryKey: qk.project.sessionsScope(projectId) }, (cached) => applyToCachedSessionShape(cached, update));
72
+ }
73
+ /**
74
+ * Insert a session at the top of the cached lists, or replace it where it is
75
+ * already cached.
76
+ *
77
+ * Separate from `updateCachedProjectSessions` because an INSERT is not a map:
78
+ * running a prepending updater over a paged cache would add the row to every
79
+ * loaded page. The list is ordered by most recent activity, so a just-created
80
+ * session belongs at the top of the FIRST page and nowhere else.
81
+ */
82
+ export function upsertIntoCachedSessionShape(cached, session) {
83
+ const upsert = (items) => {
84
+ const index = items.findIndex((row) => row.session_id === session.session_id);
85
+ if (index === -1)
86
+ return [session, ...items];
87
+ const next = items.slice();
88
+ next[index] = session;
89
+ return next;
90
+ };
91
+ if (Array.isArray(cached))
92
+ return upsert(cached);
93
+ if (isPagedSessionCache(cached)) {
94
+ const index = cached.pages.findIndex((page) => page.items.some((row) => row.session_id === session.session_id));
95
+ // Already loaded on some page: replace it there, in place. Only a session
96
+ // the cache has never seen is prepended, and only to page one.
97
+ const target = index === -1 ? 0 : index;
98
+ return {
99
+ ...cached,
100
+ pages: cached.pages.map((page, i) => i === target ? { ...page, items: upsert(page.items) } : page),
101
+ };
102
+ }
103
+ // The single-row entry only ever holds ONE session. It is replaced when it is
104
+ // this session, and left alone otherwise — a different session's row is not a
105
+ // list to insert into.
106
+ if (isSessionRow(cached)) {
107
+ return cached.session_id === session.session_id ? session : cached;
108
+ }
109
+ return cached;
110
+ }
111
+ /**
112
+ * Insert a session into every cached list for this project, or replace it
113
+ * wherever it is already cached. The optimistic counterpart of a create.
114
+ */
115
+ export function upsertCachedProjectSession(queryClient, projectId, session) {
116
+ queryClient.setQueriesData({ queryKey: qk.project.sessionsScope(projectId) }, (cached) => upsertIntoCachedSessionShape(cached, session));
117
+ }
118
+ //# sourceMappingURL=session-cache-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-cache-write.js","sourceRoot":"","sources":["../../src/react/session-cache-write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,315 @@
1
+ /**
2
+ * The project session list, paged.
3
+ *
4
+ * `GET /projects/:id/sessions` used to answer with every session row the viewer
5
+ * could see. On a project that had accumulated 12,617 sessions that is a
6
+ * multi-megabyte body — and the sidebar re-fetches this list every 5 seconds
7
+ * for as long as ANY one row sits in `queued`/`branching`/`provisioning`, which
8
+ * over twelve thousand rows is effectively always. The browser paid three times
9
+ * per tick: parsing the body, letting react-query structurally share 12k
10
+ * objects, then re-sorting and re-grouping them into sections.
11
+ *
12
+ * The list is now a bounded keyset page (`listProjectSessionsPage`). This module
13
+ * holds the two pure pieces of the `useInfiniteQuery` wiring so they can be
14
+ * tested without mounting react-query, plus the hook itself.
15
+ */
16
+ import { type ListProjectSessionsOptions, type ProjectSession, type ProjectSessionPage } from '../core/rest/projects-client/sessions.js';
17
+ /**
18
+ * `getNextPageParam`. Returns `undefined` — not `null` — at the end of the
19
+ * list: `undefined` is what react-query reads as "no more pages", and it is
20
+ * what makes `hasNextPage` go false. Handing back `null` leaves `hasNextPage`
21
+ * true and a Load-more button that re-fetches page one forever.
22
+ */
23
+ export declare function projectSessionsPageParam(page: ProjectSessionPage): string | undefined;
24
+ /**
25
+ * Flatten the fetched pages into the flat array every consumer of this list
26
+ * already renders.
27
+ *
28
+ * De-duplicates by `session_id`, keeping first occurrence. A session prompted
29
+ * between two page fetches moves to the top of the `updated_at DESC` order, so
30
+ * a row already served on page 1 legitimately reappears on page 2 — keyset
31
+ * paging makes that a shifted window, not a bug to fix server-side. Rendering
32
+ * it twice would hand React two children with the same key.
33
+ */
34
+ export declare function flattenProjectSessionPages(data: {
35
+ pages: ProjectSessionPage[];
36
+ pageParams: unknown[];
37
+ } | undefined): ProjectSession[];
38
+ export interface UseProjectSessionsOptions extends Pick<ListProjectSessionsOptions, 'scope' | 'limit'> {
39
+ enabled?: boolean;
40
+ /** Milliseconds, or false. Evaluated against the sessions loaded SO FAR. */
41
+ refetchInterval?: number | false | ((sessions: ProjectSession[]) => number | false);
42
+ refetchOnWindowFocus?: boolean;
43
+ }
44
+ /**
45
+ * One project's sessions, newest activity first, fetched a page at a time.
46
+ *
47
+ * Returns the flat `sessions` array plus the paging controls, so a list that
48
+ * previously read `data ?? []` changes only where the array comes from.
49
+ */
50
+ export declare function useProjectSessions(projectId: string, options?: UseProjectSessionsOptions): {
51
+ /**
52
+ * Every page loaded so far, flattened and de-duplicated.
53
+ *
54
+ * A poll refetches EVERY loaded page, so a viewer who has pressed
55
+ * "Load more" several times pays for each of them on every tick. That is
56
+ * the intended trade — it is bounded by what the viewer actually asked to
57
+ * see, where the old behavior was bounded by nothing.
58
+ */
59
+ sessions: ProjectSession[];
60
+ data: import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>;
61
+ error: Error;
62
+ isError: true;
63
+ isPending: false;
64
+ isLoading: false;
65
+ isLoadingError: false;
66
+ isRefetchError: true;
67
+ isSuccess: false;
68
+ isPlaceholderData: false;
69
+ status: "error";
70
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
71
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
72
+ hasNextPage: boolean;
73
+ hasPreviousPage: boolean;
74
+ isFetchNextPageError: boolean;
75
+ isFetchingNextPage: boolean;
76
+ isFetchPreviousPageError: boolean;
77
+ isFetchingPreviousPage: boolean;
78
+ dataUpdatedAt: number;
79
+ errorUpdatedAt: number;
80
+ failureCount: number;
81
+ failureReason: Error | null;
82
+ errorUpdateCount: number;
83
+ isFetched: boolean;
84
+ isFetchedAfterMount: boolean;
85
+ isFetching: boolean;
86
+ isInitialLoading: boolean;
87
+ isPaused: boolean;
88
+ isRefetching: boolean;
89
+ isStale: boolean;
90
+ isEnabled: boolean;
91
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
92
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
93
+ promise: Promise<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>>;
94
+ } | {
95
+ /**
96
+ * Every page loaded so far, flattened and de-duplicated.
97
+ *
98
+ * A poll refetches EVERY loaded page, so a viewer who has pressed
99
+ * "Load more" several times pays for each of them on every tick. That is
100
+ * the intended trade — it is bounded by what the viewer actually asked to
101
+ * see, where the old behavior was bounded by nothing.
102
+ */
103
+ sessions: ProjectSession[];
104
+ data: import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>;
105
+ error: null;
106
+ isError: false;
107
+ isPending: false;
108
+ isLoading: false;
109
+ isLoadingError: false;
110
+ isRefetchError: false;
111
+ isFetchNextPageError: false;
112
+ isFetchPreviousPageError: false;
113
+ isSuccess: true;
114
+ isPlaceholderData: false;
115
+ status: "success";
116
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
117
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
118
+ hasNextPage: boolean;
119
+ hasPreviousPage: boolean;
120
+ isFetchingNextPage: boolean;
121
+ isFetchingPreviousPage: boolean;
122
+ dataUpdatedAt: number;
123
+ errorUpdatedAt: number;
124
+ failureCount: number;
125
+ failureReason: Error | null;
126
+ errorUpdateCount: number;
127
+ isFetched: boolean;
128
+ isFetchedAfterMount: boolean;
129
+ isFetching: boolean;
130
+ isInitialLoading: boolean;
131
+ isPaused: boolean;
132
+ isRefetching: boolean;
133
+ isStale: boolean;
134
+ isEnabled: boolean;
135
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
136
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
137
+ promise: Promise<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>>;
138
+ } | {
139
+ /**
140
+ * Every page loaded so far, flattened and de-duplicated.
141
+ *
142
+ * A poll refetches EVERY loaded page, so a viewer who has pressed
143
+ * "Load more" several times pays for each of them on every tick. That is
144
+ * the intended trade — it is bounded by what the viewer actually asked to
145
+ * see, where the old behavior was bounded by nothing.
146
+ */
147
+ sessions: ProjectSession[];
148
+ data: undefined;
149
+ error: Error;
150
+ isError: true;
151
+ isPending: false;
152
+ isLoading: false;
153
+ isLoadingError: true;
154
+ isRefetchError: false;
155
+ isFetchNextPageError: false;
156
+ isFetchPreviousPageError: false;
157
+ isSuccess: false;
158
+ isPlaceholderData: false;
159
+ status: "error";
160
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
161
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
162
+ hasNextPage: boolean;
163
+ hasPreviousPage: boolean;
164
+ isFetchingNextPage: boolean;
165
+ isFetchingPreviousPage: boolean;
166
+ dataUpdatedAt: number;
167
+ errorUpdatedAt: number;
168
+ failureCount: number;
169
+ failureReason: Error | null;
170
+ errorUpdateCount: number;
171
+ isFetched: boolean;
172
+ isFetchedAfterMount: boolean;
173
+ isFetching: boolean;
174
+ isInitialLoading: boolean;
175
+ isPaused: boolean;
176
+ isRefetching: boolean;
177
+ isStale: boolean;
178
+ isEnabled: boolean;
179
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
180
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
181
+ promise: Promise<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>>;
182
+ } | {
183
+ /**
184
+ * Every page loaded so far, flattened and de-duplicated.
185
+ *
186
+ * A poll refetches EVERY loaded page, so a viewer who has pressed
187
+ * "Load more" several times pays for each of them on every tick. That is
188
+ * the intended trade — it is bounded by what the viewer actually asked to
189
+ * see, where the old behavior was bounded by nothing.
190
+ */
191
+ sessions: ProjectSession[];
192
+ data: undefined;
193
+ error: null;
194
+ isError: false;
195
+ isPending: true;
196
+ isLoading: true;
197
+ isLoadingError: false;
198
+ isRefetchError: false;
199
+ isFetchNextPageError: false;
200
+ isFetchPreviousPageError: false;
201
+ isSuccess: false;
202
+ isPlaceholderData: false;
203
+ status: "pending";
204
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
205
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
206
+ hasNextPage: boolean;
207
+ hasPreviousPage: boolean;
208
+ isFetchingNextPage: boolean;
209
+ isFetchingPreviousPage: boolean;
210
+ dataUpdatedAt: number;
211
+ errorUpdatedAt: number;
212
+ failureCount: number;
213
+ failureReason: Error | null;
214
+ errorUpdateCount: number;
215
+ isFetched: boolean;
216
+ isFetchedAfterMount: boolean;
217
+ isFetching: boolean;
218
+ isInitialLoading: boolean;
219
+ isPaused: boolean;
220
+ isRefetching: boolean;
221
+ isStale: boolean;
222
+ isEnabled: boolean;
223
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
224
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
225
+ promise: Promise<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>>;
226
+ } | {
227
+ /**
228
+ * Every page loaded so far, flattened and de-duplicated.
229
+ *
230
+ * A poll refetches EVERY loaded page, so a viewer who has pressed
231
+ * "Load more" several times pays for each of them on every tick. That is
232
+ * the intended trade — it is bounded by what the viewer actually asked to
233
+ * see, where the old behavior was bounded by nothing.
234
+ */
235
+ sessions: ProjectSession[];
236
+ data: undefined;
237
+ error: null;
238
+ isError: false;
239
+ isPending: true;
240
+ isLoadingError: false;
241
+ isRefetchError: false;
242
+ isFetchNextPageError: false;
243
+ isFetchPreviousPageError: false;
244
+ isSuccess: false;
245
+ isPlaceholderData: false;
246
+ status: "pending";
247
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
248
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
249
+ hasNextPage: boolean;
250
+ hasPreviousPage: boolean;
251
+ isFetchingNextPage: boolean;
252
+ isFetchingPreviousPage: boolean;
253
+ dataUpdatedAt: number;
254
+ errorUpdatedAt: number;
255
+ failureCount: number;
256
+ failureReason: Error | null;
257
+ errorUpdateCount: number;
258
+ isFetched: boolean;
259
+ isFetchedAfterMount: boolean;
260
+ isFetching: boolean;
261
+ isLoading: boolean;
262
+ isInitialLoading: boolean;
263
+ isPaused: boolean;
264
+ isRefetching: boolean;
265
+ isStale: boolean;
266
+ isEnabled: boolean;
267
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
268
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
269
+ promise: Promise<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>>;
270
+ } | {
271
+ /**
272
+ * Every page loaded so far, flattened and de-duplicated.
273
+ *
274
+ * A poll refetches EVERY loaded page, so a viewer who has pressed
275
+ * "Load more" several times pays for each of them on every tick. That is
276
+ * the intended trade — it is bounded by what the viewer actually asked to
277
+ * see, where the old behavior was bounded by nothing.
278
+ */
279
+ sessions: ProjectSession[];
280
+ data: import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>;
281
+ isError: false;
282
+ error: null;
283
+ isPending: false;
284
+ isLoading: false;
285
+ isLoadingError: false;
286
+ isRefetchError: false;
287
+ isSuccess: true;
288
+ isPlaceholderData: true;
289
+ isFetchNextPageError: false;
290
+ isFetchPreviousPageError: false;
291
+ status: "success";
292
+ fetchNextPage: (options?: import("@tanstack/react-query").FetchNextPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
293
+ fetchPreviousPage: (options?: import("@tanstack/react-query").FetchPreviousPageOptions) => Promise<import("@tanstack/react-query").InfiniteQueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
294
+ hasNextPage: boolean;
295
+ hasPreviousPage: boolean;
296
+ isFetchingNextPage: boolean;
297
+ isFetchingPreviousPage: boolean;
298
+ dataUpdatedAt: number;
299
+ errorUpdatedAt: number;
300
+ failureCount: number;
301
+ failureReason: Error | null;
302
+ errorUpdateCount: number;
303
+ isFetched: boolean;
304
+ isFetchedAfterMount: boolean;
305
+ isFetching: boolean;
306
+ isInitialLoading: boolean;
307
+ isPaused: boolean;
308
+ isRefetching: boolean;
309
+ isStale: boolean;
310
+ isEnabled: boolean;
311
+ refetch: (options?: import("@tanstack/react-query").RefetchOptions) => Promise<import("@tanstack/react-query").QueryObserverResult<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>, Error>>;
312
+ fetchStatus: import("@tanstack/react-query").FetchStatus;
313
+ promise: Promise<import("@tanstack/react-query").InfiniteData<ProjectSessionPage, unknown>>;
314
+ };
315
+ //# sourceMappingURL=use-project-sessions.d.ts.map