@sanity/sdk 2.14.1 → 2.16.0

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.
@@ -787,13 +787,14 @@ declare function getQueryState(instance: SanityInstance, queryOptions: QueryOpti
787
787
  * Resolves the result of a query without registering a lasting subscriber.
788
788
  *
789
789
  * This function fetches the result of a GROQ query and returns a promise that resolves with the query result.
790
- * Unlike `getQueryState`, which registers subscribers to keep the query live and performs automatic cleanup,
791
- * `resolveQuery` does not track subscribers. This makes it ideal for use with React Suspense, where the returned
792
- * promise is thrown to delay rendering until the query result becomes available.
790
+ * It registers a temporary subscriber for the lifetime of the resolution (released shortly after the promise
791
+ * settles), so the query state participates in normal cleanup even when no lasting subscriber ever attaches
792
+ * e.g. when a suspended component errors before committing. This makes it ideal for use with React Suspense,
793
+ * where the returned promise is thrown to delay rendering until the query result becomes available.
793
794
  * Once the promise resolves, it is expected that a real subscriber will be added via `getQueryState` to manage ongoing updates.
794
795
  *
795
796
  * Additionally, an optional AbortSignal can be provided to cancel the query and immediately clear the associated state
796
- * if there are no active subscribers.
797
+ * if there are no other active subscribers.
797
798
  *
798
799
  * @beta
799
800
  */
@@ -1 +1 @@
1
- {"version":3,"file":"createGroqSearchFilter.d.ts","names":[],"sources":["../../src/config/authConfig.ts","../../src/config/sanityConfig.ts","../../src/auth/authMode.ts","../../src/store/createSanityInstance.ts","../../src/store/createStoreState.ts","../../src/store/defineStore.ts","../../src/store/createActionBinder.ts","../../src/auth/authStateType.ts","../../src/auth/authStore.ts","../../src/auth/utils.ts","../../src/preview/previewConstants.ts","../../src/projection/types.ts","../../src/preview/types.ts","../../src/preview/previewProjectionUtils.ts","../../src/store/createStateSourceAction.ts","../../src/query/queryStore.ts","../../src/users/types.ts","../../src/users/reducers.ts","../../src/utils/createGroqSearchFilter.ts"],"mappings":"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"}
1
+ {"version":3,"file":"createGroqSearchFilter.d.ts","names":[],"sources":["../../src/config/authConfig.ts","../../src/config/sanityConfig.ts","../../src/auth/authMode.ts","../../src/store/createSanityInstance.ts","../../src/store/createStoreState.ts","../../src/store/defineStore.ts","../../src/store/createActionBinder.ts","../../src/auth/authStateType.ts","../../src/auth/authStore.ts","../../src/auth/utils.ts","../../src/preview/previewConstants.ts","../../src/projection/types.ts","../../src/preview/types.ts","../../src/preview/previewProjectionUtils.ts","../../src/store/createStateSourceAction.ts","../../src/query/queryStore.ts","../../src/users/types.ts","../../src/users/reducers.ts","../../src/utils/createGroqSearchFilter.ts"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { createImageUrlBuilder } from "@sanity/image-url";
2
- import { createClient, CorsOriginError } from "@sanity/client";
3
- import { Observable, map, distinctUntilChanged, shareReplay, skip, defer, finalize, filter, exhaustMap, timer, switchMap, takeWhile, from, firstValueFrom, catchError, EMPTY, fromEvent, NEVER, first, race, startWith, pairwise, mergeMap, groupBy, of, combineLatest, tap, share } from "rxjs";
2
+ import { Observable, map, distinctUntilChanged, shareReplay, skip, defer, finalize, filter, exhaustMap, timer, switchMap, takeWhile, catchError, EMPTY, fromEvent, retry, BehaviorSubject, combineLatest, startWith, tap, NEVER, first, firstValueFrom, race, pairwise, mergeMap, groupBy, of, share } from "rxjs";
3
+ import { createClient, CorsOriginError, DisconnectError, ConnectionFailedError } from "@sanity/client";
4
4
  import { devtools } from "zustand/middleware";
5
5
  import { createStore } from "zustand/vanilla";
6
6
  import { createSelector } from "reselect";
@@ -361,27 +361,7 @@ function getAuthLogger(instance) {
361
361
  }
362
362
  }), loggers.set(instance, logger)), logger;
363
363
  }
364
- const REFRESH_INTERVAL = 720 * 60 * 1e3, LOCK_NAME = "sanity-token-refresh-lock";
365
- function getLastRefreshTime(storageArea, storageKey) {
366
- try {
367
- const data = storageArea?.getItem(`${storageKey}_last_refresh`), parsed = data ? parseInt(data, 10) : 0;
368
- return isNaN(parsed) ? 0 : parsed;
369
- } catch {
370
- return 0;
371
- }
372
- }
373
- function setLastRefreshTime(storageArea, storageKey) {
374
- try {
375
- storageArea?.setItem(`${storageKey}_last_refresh`, Date.now().toString());
376
- } catch {
377
- }
378
- }
379
- function getNextRefreshDelay(storageArea, storageKey) {
380
- const lastRefresh = getLastRefreshTime(storageArea, storageKey);
381
- if (!lastRefresh) return 0;
382
- const now = Date.now(), nextRefreshTime = lastRefresh + REFRESH_INTERVAL;
383
- return Math.max(0, nextRefreshTime - now);
384
- }
364
+ const REFRESH_INTERVAL = 720 * 60 * 1e3;
385
365
  function createTokenRefreshStream(token, clientFactory, apiHost) {
386
366
  return new Observable((subscriber) => {
387
367
  const subscription = clientFactory({
@@ -403,27 +383,6 @@ function createTokenRefreshStream(token, clientFactory, apiHost) {
403
383
  return () => subscription.unsubscribe();
404
384
  });
405
385
  }
406
- async function acquireTokenRefreshLock(refreshFn, storageArea, storageKey) {
407
- if (!navigator.locks)
408
- return console.warn("Web Locks API not supported. Proceeding with uncoordinated refresh."), await refreshFn(), setLastRefreshTime(storageArea, storageKey), !0;
409
- try {
410
- return await navigator.locks.request(LOCK_NAME, { mode: "exclusive" }, async (lock) => {
411
- if (!lock) return !1;
412
- for (; ; ) {
413
- const delay = getNextRefreshDelay(storageArea, storageKey);
414
- delay > 0 && await new Promise((resolve) => setTimeout(resolve, delay));
415
- try {
416
- await refreshFn(), setLastRefreshTime(storageArea, storageKey);
417
- } catch (error) {
418
- console.error("Token refresh failed within lock:", error);
419
- }
420
- await new Promise((resolve) => setTimeout(resolve, REFRESH_INTERVAL));
421
- }
422
- }) === !0;
423
- } catch (error) {
424
- return console.error("Failed to request token refresh lock:", error), !1;
425
- }
426
- }
427
386
  function shouldRefreshToken(lastRefresh) {
428
387
  return lastRefresh ? Date.now() - lastRefresh >= REFRESH_INTERVAL : !0;
429
388
  }
@@ -433,35 +392,15 @@ const refreshStampedToken = ({
433
392
  }) => {
434
393
  const logger = getAuthLogger(instance), { clientFactory, apiHost, storageArea, storageKey } = state.get().options;
435
394
  return state.observable.pipe(
436
- map((storeState) => ({
437
- authState: storeState.authState,
438
- dashboardContext: storeState.dashboardContext
439
- })),
395
+ map((storeState) => storeState.authState),
440
396
  filter(
441
- (storeState) => storeState.authState.type === AuthStateType.LOGGED_IN
442
- ),
443
- distinctUntilChanged(
444
- (prev, curr) => prev.authState.type === curr.authState.type && prev.authState.token === curr.authState.token && // Only care about token for distinctness here
445
- prev.dashboardContext === curr.dashboardContext
397
+ (authState) => authState.type === AuthStateType.LOGGED_IN
446
398
  ),
447
- // Make distinctness check explicit
448
- filter((storeState) => storeState.authState.token.includes("-st")),
399
+ distinctUntilChanged((prev, curr) => prev.token === curr.token),
400
+ filter((authState) => authState.token.includes("-st")),
449
401
  // Ensure we only try to refresh stamped tokens
450
- exhaustMap((storeState) => {
451
- const performRefresh = async () => {
452
- const currentState = state.get();
453
- if (currentState.authState.type !== AuthStateType.LOGGED_IN)
454
- throw logger.debug("Token refresh aborted - user logged out"), new Error("User logged out before refresh could complete");
455
- const currentToken = currentState.authState.token;
456
- logger.debug("Refreshing stamped token");
457
- const response = await firstValueFrom(
458
- createTokenRefreshStream(currentToken, clientFactory, apiHost)
459
- );
460
- logger.info("Token refreshed successfully"), state.set("setRefreshStampedToken", (prev) => ({
461
- authState: prev.authState.type === AuthStateType.LOGGED_IN ? { ...prev.authState, token: response.token } : prev.authState
462
- })), storageArea?.setItem(storageKey, JSON.stringify({ token: response.token }));
463
- };
464
- return storeState.dashboardContext ? new Observable((subscriber) => {
402
+ exhaustMap(
403
+ () => new Observable((subscriber) => {
465
404
  const visibilityHandler = () => {
466
405
  const currentState = state.get();
467
406
  document.visibilityState === "visible" && currentState.authState.type === AuthStateType.LOGGED_IN && shouldRefreshToken(currentState.authState.lastTokenRefresh) && createTokenRefreshStream(
@@ -506,16 +445,8 @@ const refreshStampedToken = ({
506
445
  }).pipe(
507
446
  takeWhile(() => state.get().authState.type === AuthStateType.LOGGED_IN),
508
447
  map((response) => ({ token: response.token }))
509
- ) : from(acquireTokenRefreshLock(performRefresh, storageArea, storageKey)).pipe(
510
- filter((hasLock) => hasLock),
511
- map(() => {
512
- const currentState = state.get().authState;
513
- if (currentState.type !== AuthStateType.LOGGED_IN)
514
- throw new Error("User logged out before refresh could complete");
515
- return { token: currentState.token };
516
- })
517
- );
518
- })
448
+ )
449
+ )
519
450
  ).subscribe({
520
451
  next: (response) => {
521
452
  logger.debug("Token refresh completed, updating state"), state.set("setRefreshStampedToken", (prev) => ({
@@ -1161,22 +1092,95 @@ function transformProjectionToPreview(instance, projectionResult, resource) {
1161
1092
  ...projectionResult._status && { _status: projectionResult._status }
1162
1093
  };
1163
1094
  }
1095
+ const LIVE_EVENTS_API_VERSION = "v2025-05-06", LIVE_EVENTS_RETRY_DELAY = 1e3;
1096
+ function observeLiveEvents(instance, { resource, onCorsError }) {
1097
+ return getClientState(instance, {
1098
+ apiVersion: LIVE_EVENTS_API_VERSION,
1099
+ resource
1100
+ }).observable.pipe(
1101
+ switchMap(
1102
+ (client) => defer(
1103
+ () => client.live.events({ includeDrafts: !!client.config().token, tag: "live-events" })
1104
+ ).pipe(
1105
+ catchError((error) => {
1106
+ if (error instanceof CorsOriginError)
1107
+ return onCorsError(error), EMPTY;
1108
+ if (error instanceof DisconnectError)
1109
+ return EMPTY;
1110
+ if (error instanceof ConnectionFailedError && typeof error.status == "number" && error.status >= 400 && error.status < 500)
1111
+ return EMPTY;
1112
+ throw error;
1113
+ }),
1114
+ // Server-initiated live errors (e.g. ChannelError, MessageError) are
1115
+ // retried, not surfaced. Dropped connections are already reconnected
1116
+ // inside @sanity/client.
1117
+ retry({ delay: LIVE_EVENTS_RETRY_DELAY })
1118
+ )
1119
+ ),
1120
+ filter((e) => e.type === "message")
1121
+ );
1122
+ }
1123
+ const RELEASES_QUERY = "releases::all()", RELEASES_API_VERSION = "v2025-05-06";
1124
+ function observeReleases(instance, { resource, onCorsError }) {
1125
+ return getClientState(instance, {
1126
+ apiVersion: RELEASES_API_VERSION,
1127
+ resource
1128
+ }).observable.pipe(
1129
+ switchMap((client) => {
1130
+ const syncTags$ = new BehaviorSubject(void 0);
1131
+ return combineLatest([
1132
+ observeLiveEvents(instance, { resource, onCorsError }).pipe(startWith(void 0)),
1133
+ syncTags$
1134
+ ]).pipe(
1135
+ filter(
1136
+ ([message, syncTags]) => message === void 0 || message.tags.some((tag) => syncTags?.includes(tag))
1137
+ ),
1138
+ map(([message]) => message?.id),
1139
+ distinctUntilChanged()
1140
+ ).pipe(
1141
+ switchMap(
1142
+ (lastLiveEventId) => client.observable.fetch(
1143
+ RELEASES_QUERY,
1144
+ {},
1145
+ {
1146
+ perspective: "raw",
1147
+ filterResponse: !1,
1148
+ returnQuery: !1,
1149
+ lastLiveEventId,
1150
+ tag: "releases"
1151
+ }
1152
+ )
1153
+ ),
1154
+ tap((response) => {
1155
+ syncTags$.next(response.syncTags);
1156
+ }),
1157
+ map((response) => response.result)
1158
+ );
1159
+ }),
1160
+ // Emit synchronously on subscribe (mirroring StateSource semantics, which
1161
+ // the releases store previously consumed) so the store can immediately
1162
+ // record an empty list: consumers distinguish "no releases yet" from
1163
+ // "never loaded", and the React hooks don't suspend on first load.
1164
+ startWith(void 0)
1165
+ );
1166
+ }
1164
1167
  function sortReleases(releases = []) {
1165
1168
  return [...releases].sort((a, b) => {
1166
- if (a.metadata.releaseType === "undecided" && b.metadata.releaseType !== "undecided")
1169
+ const aType = a.metadata?.releaseType, bType = b.metadata?.releaseType;
1170
+ if (aType === "undecided" && bType !== "undecided")
1167
1171
  return -1;
1168
- if (a.metadata.releaseType !== "undecided" && b.metadata.releaseType === "undecided")
1172
+ if (aType !== "undecided" && bType === "undecided")
1169
1173
  return 1;
1170
- if (a.metadata.releaseType === "undecided" && b.metadata.releaseType === "undecided")
1174
+ if (aType === "undecided" && bType === "undecided")
1171
1175
  return new Date(b._createdAt).getTime() - new Date(a._createdAt).getTime();
1172
- if (a.metadata.releaseType === "scheduled" && b.metadata.releaseType === "scheduled") {
1173
- const aPublishAt = a.publishAt || a.metadata.intendedPublishAt;
1176
+ if (aType === "scheduled" && bType === "scheduled") {
1177
+ const aPublishAt = a.publishAt || a.metadata?.intendedPublishAt;
1174
1178
  if (!aPublishAt)
1175
1179
  return 1;
1176
- const bPublishAt = b.publishAt || b.metadata.intendedPublishAt;
1180
+ const bPublishAt = b.publishAt || b.metadata?.intendedPublishAt;
1177
1181
  return bPublishAt ? new Date(bPublishAt).getTime() - new Date(aPublishAt).getTime() : -1;
1178
1182
  }
1179
- return a.metadata.releaseType === "asap" && b.metadata.releaseType !== "asap" ? 1 : a.metadata.releaseType !== "asap" && b.metadata.releaseType === "asap" ? -1 : a.metadata.releaseType === "asap" && b.metadata.releaseType === "asap" ? new Date(b._createdAt).getTime() - new Date(a._createdAt).getTime() : 0;
1183
+ return aType === "asap" && bType !== "asap" ? 1 : aType !== "asap" && bType === "asap" ? -1 : aType === "asap" && bType === "asap" ? new Date(b._createdAt).getTime() - new Date(a._createdAt).getTime() : 0;
1180
1184
  });
1181
1185
  }
1182
1186
  const ARCHIVED_RELEASE_STATES = ["archived", "published"], STABLE_EMPTY_RELEASES = [], releasesStore = {
@@ -1192,7 +1196,10 @@ const ARCHIVED_RELEASE_STATES = ["archived", "published"], STABLE_EMPTY_RELEASES
1192
1196
  }, _getActiveReleasesState = bindActionByResource(
1193
1197
  releasesStore,
1194
1198
  createStateSourceAction({
1195
- selector: ({ state }, _) => state.activeReleases
1199
+ selector: ({ state }) => {
1200
+ if (state.error) throw state.error;
1201
+ return state.activeReleases;
1202
+ }
1196
1203
  })
1197
1204
  ), getActiveReleasesState = (instance, options) => (
1198
1205
  // bindActionByResource keyFn destructures { resource } from the first param, so pass {} when no options
@@ -1200,31 +1207,31 @@ const ARCHIVED_RELEASE_STATES = ["archived", "published"], STABLE_EMPTY_RELEASES
1200
1207
  ), _getAllReleasesState = bindActionByResource(
1201
1208
  releasesStore,
1202
1209
  createStateSourceAction({
1203
- selector: ({ state }, _) => state.allReleases
1210
+ selector: ({ state }) => {
1211
+ if (state.error) throw state.error;
1212
+ return state.allReleases;
1213
+ }
1204
1214
  })
1205
- ), getAllReleasesState = (instance, options) => _getAllReleasesState(instance, options ?? {}), RELEASES_QUERY = "releases::all()", subscribeToReleases = ({
1215
+ ), getAllReleasesState = (instance, options) => _getAllReleasesState(instance, options ?? {}), subscribeToReleases = ({
1206
1216
  instance,
1207
1217
  state,
1208
1218
  key: { resource }
1209
- }) => {
1210
- const { observable: releases$ } = getQueryState(instance, {
1211
- query: RELEASES_QUERY,
1212
- perspective: "raw",
1213
- resource,
1214
- tag: "releases"
1215
- });
1216
- return releases$.pipe(
1217
- map((releases) => {
1218
- const sorted = sortReleases(releases ?? STABLE_EMPTY_RELEASES).reverse();
1219
- state.set("setReleases", {
1220
- allReleases: sorted,
1221
- activeReleases: sorted.filter(
1222
- (release) => !ARCHIVED_RELEASE_STATES.includes(release.state)
1223
- )
1224
- });
1225
- })
1226
- ).subscribe({ error: (error) => state.set("setError", { error }) });
1227
- }, DEFAULT_PERSPECTIVE = "drafts", optionsCache = /* @__PURE__ */ new Map(), selectInstancePerspective = (context, _) => context.instance.config.perspective, selectActiveReleases = (context) => context.state.activeReleases, selectOptions = (_context, options) => options, memoizedOptionsSelector = createSelector(
1219
+ }) => observeReleases(instance, {
1220
+ resource,
1221
+ // Surface CORS errors as store state instead of erroring the stream so
1222
+ // they can be handled by the Cors Error component
1223
+ onCorsError: (error) => state.set("setError", { error })
1224
+ }).pipe(
1225
+ map((releases) => {
1226
+ const sorted = sortReleases(releases ?? STABLE_EMPTY_RELEASES).reverse();
1227
+ state.set("setReleases", {
1228
+ allReleases: sorted,
1229
+ activeReleases: sorted.filter(
1230
+ (release) => !ARCHIVED_RELEASE_STATES.includes(release.state)
1231
+ )
1232
+ });
1233
+ })
1234
+ ).subscribe({ error: (error) => state.set("setError", { error }) }), DEFAULT_PERSPECTIVE = "drafts", optionsCache = /* @__PURE__ */ new Map(), selectInstancePerspective = (context, _) => context.instance.config.perspective, selectActiveReleases = (context) => context.state.activeReleases, selectOptions = (_context, options) => options, memoizedOptionsSelector = createSelector(
1228
1235
  [selectActiveReleases, selectOptions],
1229
1236
  (activeReleases, options) => {
1230
1237
  if (!options || !activeReleases) return options;
@@ -1248,12 +1255,13 @@ const ARCHIVED_RELEASE_STATES = ["archived", "published"], STABLE_EMPTY_RELEASES
1248
1255
  return ["drafts", ...releaseNames.slice(0, index + 1)].filter((name) => !perspective.excludedPerspectives?.includes(name)).reverse();
1249
1256
  }
1250
1257
  )
1251
- });
1252
- let _boundGetPerspectiveState;
1253
- const getPerspectiveState = (instance, ...rest) => (_boundGetPerspectiveState || (_boundGetPerspectiveState = bindActionByResource(
1258
+ }), _boundGetPerspectiveState = bindActionByResource(
1254
1259
  releasesStore,
1255
1260
  _getPerspectiveStateSelector
1256
- )), _boundGetPerspectiveState(instance, ...rest.length ? rest : [{}]));
1261
+ ), getPerspectiveState = (instance, ...rest) => (
1262
+ // bindActionByResource keyFn destructures { resource } from the first param, so pass {} when no options
1263
+ _boundGetPerspectiveState(instance, ...rest.length ? rest : [{}])
1264
+ );
1257
1265
  function setCleanupTimeout(fn, delay) {
1258
1266
  const timer2 = setTimeout(fn, delay), t = timer2;
1259
1267
  return typeof t == "object" && t !== null && "unref" in t && typeof t.unref == "function" && t.unref(), timer2;
@@ -1278,10 +1286,7 @@ const QUERY_STATE_CLEAR_DELAY = 1e3, QUERY_STORE_API_VERSION = "v2025-05-06", QU
1278
1286
  if (!prevQuery) return prev;
1279
1287
  const subscribers = prevQuery.subscribers.filter((id) => id !== subscriptionId);
1280
1288
  return subscribers.length ? { ...prev, queries: { ...prev.queries, [key]: { ...prevQuery, subscribers } } } : { ...prev, queries: omitProperty(prev.queries, key) };
1281
- }, cancelQuery = (key) => (prev) => {
1282
- const prevQuery = prev.queries[key];
1283
- return !prevQuery || prevQuery.subscribers.length ? prev : { ...prev, queries: omitProperty(prev.queries, key) };
1284
- }, initializeQuery = (key) => (prev) => prev.queries[key] ? prev : { ...prev, queries: { ...prev.queries, [key]: { subscribers: [] } } }, EMPTY_ARRAY = [], getQueryKey = (options) => JSON.stringify(options), parseQueryKey = (key) => JSON.parse(key);
1289
+ }, EMPTY_ARRAY = [], getQueryKey = (options) => JSON.stringify(options), parseQueryKey = (key) => JSON.parse(key);
1285
1290
  function normalizeOptionsWithPerspective(instance, options) {
1286
1291
  if (options.perspective !== void 0) return options;
1287
1292
  const instancePerspective = instance.config.perspective;
@@ -1333,7 +1338,8 @@ const queryStore = {
1333
1338
  perspective: perspectiveFromOptions,
1334
1339
  ...restOptions
1335
1340
  } = parseQueryKey(group$.key), perspective$ = isReleasePerspective(perspectiveFromOptions) ? getPerspectiveState(instance, {
1336
- perspective: perspectiveFromOptions
1341
+ perspective: perspectiveFromOptions,
1342
+ resource
1337
1343
  }).observable.pipe(filter(Boolean)) : of(perspectiveFromOptions ?? QUERY_STORE_DEFAULT_PERSPECTIVE), client$ = getClientState(instance, {
1338
1344
  apiVersion: QUERY_STORE_API_VERSION,
1339
1345
  projectId,
@@ -1354,12 +1360,16 @@ const queryStore = {
1354
1360
  lastLiveEventId,
1355
1361
  tag
1356
1362
  })
1357
- )
1363
+ ),
1364
+ tap(({ result, syncTags }) => {
1365
+ state.set("setQueryData", setQueryData(group$.key, result, syncTags));
1366
+ }),
1367
+ // Catch inside the per-event stream: erroring the group pipe would
1368
+ // complete the group's subscription, and since `groupBy` above never
1369
+ // removes its group subjects, re-adding the key would emit into a
1370
+ // subject with no subscribers — the key could never be fetched again.
1371
+ catchError((error) => (state.set("setQueryError", setQueryError(group$.key, error)), EMPTY))
1358
1372
  );
1359
- }),
1360
- catchError((error) => (state.set("setQueryError", setQueryError(group$.key, error)), EMPTY)),
1361
- tap(({ result, syncTags }) => {
1362
- state.set("setQueryData", setQueryData(group$.key, result, syncTags));
1363
1373
  })
1364
1374
  )
1365
1375
  )
@@ -1368,24 +1378,14 @@ const queryStore = {
1368
1378
  instance,
1369
1379
  key: { resource }
1370
1380
  }) => {
1371
- const liveMessages$ = getClientState(instance, {
1372
- apiVersion: QUERY_STORE_API_VERSION,
1373
- resource
1374
- }).observable.pipe(
1375
- switchMap(
1376
- (client) => defer(
1377
- () => client.live.events({ includeDrafts: !!client.config().token, tag: "query-store" })
1378
- ).pipe(
1379
- catchError((error) => {
1380
- if (error instanceof CorsOriginError)
1381
- return state.set("setError", { error }), EMPTY;
1382
- throw error;
1383
- })
1384
- )
1385
- ),
1386
- share(),
1387
- filter((e) => e.type === "message")
1388
- );
1381
+ const liveMessages$ = observeLiveEvents(instance, {
1382
+ resource,
1383
+ // Surface CORS errors as store state (handled by the Cors Error
1384
+ // component) instead of erroring the stream: a stream error here would
1385
+ // reach the outer subscription's errorHandler, set the store-wide
1386
+ // `state.error`, and permanently brick every query selector.
1387
+ onCorsError: (error) => state.set("setError", { error })
1388
+ }).pipe(share());
1389
1389
  return state.observable.pipe(
1390
1390
  mergeMap((s) => Object.entries(s.queries)),
1391
1391
  groupBy(([key]) => key),
@@ -1433,7 +1433,9 @@ function resolveQuery(...args) {
1433
1433
  const _resolveQuery = bindActionByResource(
1434
1434
  queryStore,
1435
1435
  ({ state, instance }, { signal, ...options }) => {
1436
- const normalized = normalizeOptionsWithPerspective(instance, options), { getCurrent } = getQueryState(instance, normalized), key = getQueryKey(normalized), aborted$ = signal ? new Observable((observer) => {
1436
+ const normalized = normalizeOptionsWithPerspective(instance, options), { getCurrent } = getQueryState(instance, normalized), key = getQueryKey(normalized), subscriptionId = insecureRandomId();
1437
+ state.set("addSubscriber", addSubscriber(key, subscriptionId));
1438
+ const aborted$ = signal ? new Observable((observer) => {
1437
1439
  const cleanup = () => {
1438
1440
  signal.removeEventListener("abort", listener);
1439
1441
  }, listener = () => {
@@ -1442,15 +1444,17 @@ const _resolveQuery = bindActionByResource(
1442
1444
  return signal.addEventListener("abort", listener), cleanup;
1443
1445
  }).pipe(
1444
1446
  catchError((error) => {
1445
- throw error instanceof Error && error.name === "AbortError" && state.set("cancelQuery", cancelQuery(key)), error;
1447
+ throw error instanceof Error && error.name === "AbortError" && state.set("removeSubscriber", removeSubscriber(key, subscriptionId)), error;
1446
1448
  })
1447
- ) : NEVER;
1448
- state.set("initializeQuery", initializeQuery(key));
1449
- const resolved$ = state.observable.pipe(
1449
+ ) : NEVER, resolved$ = state.observable.pipe(
1450
1450
  map(getCurrent),
1451
1451
  first((i) => i !== void 0)
1452
- );
1453
- return firstValueFrom(race([resolved$, aborted$]));
1452
+ ), promise = firstValueFrom(race([resolved$, aborted$])), releaseSubscriber = () => {
1453
+ setCleanupTimeout(() => {
1454
+ state.set("removeSubscriber", removeSubscriber(key, subscriptionId));
1455
+ }, QUERY_STATE_CLEAR_DELAY);
1456
+ };
1457
+ return promise.then(releaseSubscriber, releaseSubscriber), promise;
1454
1458
  }
1455
1459
  ), API_VERSION = "vX", PROJECT_API_VERSION = "2025-07-18", USERS_STATE_CLEAR_DELAY = 5e3, DEFAULT_USERS_BATCH_SIZE = 100, getUsersKey = (instance, {
1456
1460
  resourceType,