@sanity/sdk 2.13.0 → 2.14.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.
@@ -0,0 +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,9 +1,9 @@
1
+ import { createImageUrlBuilder } from "@sanity/image-url";
1
2
  import { createClient, CorsOriginError } from "@sanity/client";
2
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";
3
- import { createSelector } from "reselect";
4
- import { createImageUrlBuilder } from "@sanity/image-url";
5
4
  import { devtools } from "zustand/middleware";
6
5
  import { createStore } from "zustand/vanilla";
6
+ import { createSelector } from "reselect";
7
7
  function isDatasetResource(resource) {
8
8
  return "projectId" in resource && "dataset" in resource;
9
9
  }
@@ -22,6 +22,24 @@ function isMediaLibrarySource(source) {
22
22
  function isCanvasSource(source) {
23
23
  return isCanvasResource(source);
24
24
  }
25
+ const DEFAULT_BASE = "http://localhost", AUTH_CODE_PARAM = "sid", DEFAULT_API_VERSION$1 = "2021-06-07", REQUEST_TAG_PREFIX = "sanity.sdk.auth";
26
+ function resolveAuthMode(config, locationHref) {
27
+ return isStudioConfig(config) ? "studio" : detectDashboardContext(locationHref) ? "dashboard" : "standalone";
28
+ }
29
+ function isStudioConfig(config) {
30
+ return !!config.studio || !!config.studioMode?.enabled;
31
+ }
32
+ function detectDashboardContext(locationHref) {
33
+ try {
34
+ const contextParam = new URL(locationHref, DEFAULT_BASE).searchParams.get("_context");
35
+ if (!contextParam) return !1;
36
+ const parsed = JSON.parse(contextParam);
37
+ return typeof parsed == "object" && parsed !== null && !Array.isArray(parsed) && Object.keys(parsed).length > 0;
38
+ } catch (err) {
39
+ return console.error("Failed to parse dashboard context from initial location:", err), !1;
40
+ }
41
+ }
42
+ var AuthStateType = /* @__PURE__ */ ((AuthStateType2) => (AuthStateType2.LOGGED_IN = "logged-in", AuthStateType2.LOGGING_IN = "logging-in", AuthStateType2.ERROR = "error", AuthStateType2.LOGGED_OUT = "logged-out", AuthStateType2))(AuthStateType || {});
25
43
  const isReleasePerspective = (perspective) => typeof perspective == "object" && perspective !== null && "releaseName" in perspective;
26
44
  function insecureRandomId() {
27
45
  return Array.from({ length: 16 }, () => Math.floor(Math.random() * 16).toString(16)).join("");
@@ -332,24 +350,17 @@ function getStagingApiHost() {
332
350
  if (typeof __SANITY_STAGING__ < "u" && __SANITY_STAGING__ === !0)
333
351
  return "https://api.sanity.work";
334
352
  }
335
- const DEFAULT_BASE = "http://localhost", AUTH_CODE_PARAM = "sid", DEFAULT_API_VERSION$1 = "2021-06-07", REQUEST_TAG_PREFIX = "sanity.sdk.auth";
336
- function resolveAuthMode(config, locationHref) {
337
- return isStudioConfig(config) ? "studio" : detectDashboardContext(locationHref) ? "dashboard" : "standalone";
338
- }
339
- function isStudioConfig(config) {
340
- return !!config.studio || !!config.studioMode?.enabled;
341
- }
342
- function detectDashboardContext(locationHref) {
343
- try {
344
- const contextParam = new URL(locationHref, DEFAULT_BASE).searchParams.get("_context");
345
- if (!contextParam) return !1;
346
- const parsed = JSON.parse(contextParam);
347
- return typeof parsed == "object" && parsed !== null && !Array.isArray(parsed) && Object.keys(parsed).length > 0;
348
- } catch (err) {
349
- return console.error("Failed to parse dashboard context from initial location:", err), !1;
350
- }
353
+ const loggers = /* @__PURE__ */ new WeakMap();
354
+ function getAuthLogger(instance) {
355
+ let logger = loggers.get(instance);
356
+ return logger || (logger = createLogger("auth", {
357
+ instanceContext: {
358
+ instanceId: instance.instanceId,
359
+ projectId: instance.config.projectId,
360
+ dataset: instance.config.dataset
361
+ }
362
+ }), loggers.set(instance, logger)), logger;
351
363
  }
352
- var AuthStateType = /* @__PURE__ */ ((AuthStateType2) => (AuthStateType2.LOGGED_IN = "logged-in", AuthStateType2.LOGGING_IN = "logging-in", AuthStateType2.ERROR = "error", AuthStateType2.LOGGED_OUT = "logged-out", AuthStateType2))(AuthStateType || {});
353
364
  const REFRESH_INTERVAL = 720 * 60 * 1e3, LOCK_NAME = "sanity-token-refresh-lock";
354
365
  function getLastRefreshTime(storageArea, storageKey) {
355
366
  try {
@@ -416,8 +427,11 @@ async function acquireTokenRefreshLock(refreshFn, storageArea, storageKey) {
416
427
  function shouldRefreshToken(lastRefresh) {
417
428
  return lastRefresh ? Date.now() - lastRefresh >= REFRESH_INTERVAL : !0;
418
429
  }
419
- const refreshStampedToken = ({ state }) => {
420
- const { clientFactory, apiHost, storageArea, storageKey } = state.get().options;
430
+ const refreshStampedToken = ({
431
+ state,
432
+ instance
433
+ }) => {
434
+ const logger = getAuthLogger(instance), { clientFactory, apiHost, storageArea, storageKey } = state.get().options;
421
435
  return state.observable.pipe(
422
436
  map((storeState) => ({
423
437
  authState: storeState.authState,
@@ -437,11 +451,13 @@ const refreshStampedToken = ({ state }) => {
437
451
  const performRefresh = async () => {
438
452
  const currentState = state.get();
439
453
  if (currentState.authState.type !== AuthStateType.LOGGED_IN)
440
- throw new Error("User logged out before refresh could complete");
441
- const currentToken = currentState.authState.token, response = await firstValueFrom(
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(
442
458
  createTokenRefreshStream(currentToken, clientFactory, apiHost)
443
459
  );
444
- state.set("setRefreshStampedToken", (prev) => ({
460
+ logger.info("Token refreshed successfully"), state.set("setRefreshStampedToken", (prev) => ({
445
461
  authState: prev.authState.type === AuthStateType.LOGGED_IN ? { ...prev.authState, token: response.token } : prev.authState
446
462
  })), storageArea?.setItem(storageKey, JSON.stringify({ token: response.token }));
447
463
  };
@@ -502,7 +518,7 @@ const refreshStampedToken = ({ state }) => {
502
518
  })
503
519
  ).subscribe({
504
520
  next: (response) => {
505
- state.set("setRefreshStampedToken", (prev) => ({
521
+ logger.debug("Token refresh completed, updating state"), state.set("setRefreshStampedToken", (prev) => ({
506
522
  authState: prev.authState.type === AuthStateType.LOGGED_IN ? {
507
523
  ...prev.authState,
508
524
  token: response.token,
@@ -511,11 +527,11 @@ const refreshStampedToken = ({ state }) => {
511
527
  })), storageArea?.setItem(storageKey, JSON.stringify({ token: response.token }));
512
528
  },
513
529
  error: (error) => {
514
- state.set("setRefreshStampedTokenError", { authState: { type: AuthStateType.ERROR, error } });
530
+ logger.error("Token refresh failed", { error }), state.set("setRefreshStampedTokenError", { authState: { type: AuthStateType.ERROR, error } });
515
531
  }
516
532
  });
517
533
  }, subscribeToStateAndFetchCurrentUser = ({ state, instance }, fetchOptions) => {
518
- const { clientFactory, apiHost } = state.get().options, useProjectHostname = fetchOptions?.useProjectHostname ?? isStudioConfig(instance.config), projectId = instance.config.projectId;
534
+ const logger = getAuthLogger(instance), { clientFactory, apiHost } = state.get().options, useProjectHostname = fetchOptions?.useProjectHostname ?? isStudioConfig(instance.config), projectId = instance.config.projectId;
519
535
  return state.observable.pipe(
520
536
  map(({ authState, options: storeOptions }) => ({
521
537
  authState,
@@ -554,99 +570,19 @@ const refreshStampedToken = ({ state }) => {
554
570
  * and subsequent token refreshes via comlink never re-fetch /users/me.
555
571
  * @see SDK-1409
556
572
  */
557
- catchError((error) => (state.set("setError", { authState: { type: AuthStateType.ERROR, error } }), EMPTY))
573
+ catchError((error) => (logger.error("Failed to fetch current user", { error }), state.set("setError", { authState: { type: AuthStateType.ERROR, error } }), EMPTY))
558
574
  )
559
575
  )
560
576
  ).subscribe({
561
577
  next: (currentUser) => {
562
- state.set("setCurrentUser", (prev) => ({
578
+ logger.info("Current user fetched successfully", {
579
+ hasEmail: !!currentUser.email
580
+ }), logger.debug("Current user details", { userId: currentUser.id }), state.set("setCurrentUser", (prev) => ({
563
581
  authState: prev.authState.type === AuthStateType.LOGGED_IN ? { ...prev.authState, currentUser } : prev.authState
564
582
  }));
565
583
  }
566
584
  });
567
585
  };
568
- function createLoggedInAuthState(token, currentUser, existingLastTokenRefresh) {
569
- const isStampedToken = token.includes("-st"), lastTokenRefresh = existingLastTokenRefresh ?? (isStampedToken ? Date.now() : void 0);
570
- return {
571
- type: AuthStateType.LOGGED_IN,
572
- token,
573
- currentUser,
574
- ...lastTokenRefresh !== void 0 && { lastTokenRefresh }
575
- };
576
- }
577
- function getAuthCode(callbackUrl, locationHref) {
578
- const loc = new URL(locationHref, DEFAULT_BASE), callbackLocation = callbackUrl ? new URL(callbackUrl, DEFAULT_BASE) : void 0, callbackLocationMatches = callbackLocation ? loc.pathname.toLowerCase().startsWith(callbackLocation.pathname.toLowerCase()) : !0;
579
- let authCode = new URLSearchParams(loc.hash.slice(1)).get(AUTH_CODE_PARAM) || new URLSearchParams(loc.search).get(AUTH_CODE_PARAM);
580
- if (!authCode) {
581
- const contextParam = new URLSearchParams(loc.search).get("_context");
582
- if (contextParam)
583
- try {
584
- const parsedContext = JSON.parse(contextParam);
585
- parsedContext && typeof parsedContext == "object" && typeof parsedContext.sid == "string" && parsedContext.sid && (authCode = parsedContext.sid);
586
- } catch {
587
- }
588
- }
589
- return authCode && callbackLocationMatches ? authCode : null;
590
- }
591
- function getTokenFromLocation(locationHref) {
592
- const loc = new URL(locationHref);
593
- return new URLSearchParams(loc.hash.slice(1)).get("token") || null;
594
- }
595
- function getTokenFromStorage(storageArea, storageKey) {
596
- if (!storageArea) return null;
597
- const item = storageArea.getItem(storageKey);
598
- if (item === null) return null;
599
- try {
600
- const parsed = JSON.parse(item);
601
- if (typeof parsed != "object" || parsed === null || !("token" in parsed) || typeof parsed.token != "string")
602
- throw new Error("Invalid stored auth data structure");
603
- return parsed.token;
604
- } catch {
605
- return storageArea.removeItem(storageKey), null;
606
- }
607
- }
608
- function getStorageEvents() {
609
- return typeof window < "u" && typeof window.addEventListener == "function" ? fromEvent(window, "storage") : EMPTY;
610
- }
611
- function getDefaultStorage() {
612
- try {
613
- return typeof localStorage < "u" && typeof localStorage.getItem == "function" ? localStorage : void 0;
614
- } catch {
615
- return;
616
- }
617
- }
618
- function getDefaultLocation() {
619
- try {
620
- return typeof location > "u" ? DEFAULT_BASE : typeof location.href == "string" ? location.href : DEFAULT_BASE;
621
- } catch {
622
- return DEFAULT_BASE;
623
- }
624
- }
625
- function getCleanedUrl(locationUrl) {
626
- const loc = new URL(locationUrl), rawHash = loc.hash.startsWith("#") ? loc.hash.slice(1) : loc.hash;
627
- if (rawHash && rawHash.includes("=")) {
628
- const hashParams = new URLSearchParams(rawHash);
629
- hashParams.delete("token"), hashParams.delete("withSid");
630
- const nextHash = hashParams.toString();
631
- loc.hash = nextHash ? `#${nextHash}` : "";
632
- }
633
- return loc.searchParams.delete("sid"), loc.searchParams.delete("url"), loc.toString();
634
- }
635
- function getClientErrorApiBody(error) {
636
- const body = error.response?.body;
637
- return body && typeof body == "object" ? body : void 0;
638
- }
639
- function getClientErrorApiType(error) {
640
- const body = getClientErrorApiBody(error);
641
- return body?.error?.type ?? body?.type;
642
- }
643
- function getClientErrorApiDescription(error) {
644
- const body = getClientErrorApiBody(error);
645
- return body?.error?.description ?? body?.description;
646
- }
647
- function isProjectUserNotFoundClientError(error) {
648
- return getClientErrorApiType(error) === "projectUserNotFoundError";
649
- }
650
586
  function parseDashboardContext(locationHref) {
651
587
  try {
652
588
  const contextParam = new URL(locationHref, DEFAULT_BASE).searchParams.get("_context");
@@ -869,6 +805,12 @@ let tokenRefresherRunning = !1;
869
805
  const authStore = {
870
806
  name: "Auth",
871
807
  getInitialState(instance) {
808
+ const logger = getAuthLogger(instance);
809
+ logger.debug("Initializing auth store", {
810
+ hasProvidedToken: !!instance.config.auth?.token,
811
+ hasCustomProviders: !!(instance.config.auth?.providers && instance.config.auth.providers.length > 0),
812
+ studioMode: instance.config.studioMode?.enabled ?? !1
813
+ });
872
814
  const {
873
815
  apiHost: configApiHost,
874
816
  callbackUrl,
@@ -902,7 +844,11 @@ const authStore = {
902
844
  result = getStandaloneInitialState(strategyOptions);
903
845
  break;
904
846
  }
905
- return {
847
+ return logger.debug("Auth state initialized", {
848
+ authStateType: result.authState.type,
849
+ mode,
850
+ authMethod: result.authMethod
851
+ }), {
906
852
  authState: result.authState,
907
853
  dashboardContext: result.dashboardContext,
908
854
  options: {
@@ -920,7 +866,8 @@ const authStore = {
920
866
  };
921
867
  },
922
868
  initialize(context) {
923
- const initialLocationHref = context.state.get().options?.initialLocationHref ?? getDefaultLocation(), mode = resolveAuthMode(context.instance.config, initialLocationHref);
869
+ const logger = getAuthLogger(context.instance), initialLocationHref = context.state.get().options?.initialLocationHref ?? getDefaultLocation(), mode = resolveAuthMode(context.instance.config, initialLocationHref);
870
+ logger.debug("Setting up auth subscriptions", { mode });
924
871
  let initResult;
925
872
  switch (mode) {
926
873
  case "studio":
@@ -933,7 +880,9 @@ const authStore = {
933
880
  initResult = initializeStandaloneAuth(context, tokenRefresherRunning);
934
881
  break;
935
882
  }
936
- return initResult.tokenRefresherStarted && (tokenRefresherRunning = !0), initResult.dispose;
883
+ return initResult.tokenRefresherStarted && (tokenRefresherRunning = !0), () => {
884
+ logger.debug("Cleaning up auth subscriptions"), initResult.dispose();
885
+ };
937
886
  }
938
887
  }, getCurrentUserState = bindActionGlobally(
939
888
  authStore,
@@ -965,20 +914,24 @@ const authStore = {
965
914
  !!dashboardContext && Object.keys(dashboardContext).length > 0
966
915
  )
967
916
  )
968
- ), setAuthToken = bindActionGlobally(authStore, ({ state }, token) => {
969
- const currentAuthState = state.get().authState;
970
- if (token) {
971
- if (currentAuthState.type !== AuthStateType.LOGGED_IN || currentAuthState.token !== token) {
972
- const currentUser = currentAuthState.type === AuthStateType.LOGGED_IN ? currentAuthState.currentUser : null, preservedLastTokenRefresh = currentAuthState.type === AuthStateType.LOGGED_IN ? currentAuthState.lastTokenRefresh : void 0;
973
- state.set("setToken", {
974
- authState: createLoggedInAuthState(token, currentUser, preservedLastTokenRefresh)
975
- });
976
- }
977
- } else
978
- currentAuthState.type !== AuthStateType.LOGGED_OUT && state.set("setToken", {
979
- authState: { type: AuthStateType.LOGGED_OUT, isDestroyingSession: !1 }
980
- });
981
- });
917
+ ), setAuthToken = bindActionGlobally(
918
+ authStore,
919
+ ({ state, instance }, token) => {
920
+ const logger = getAuthLogger(instance), currentAuthState = state.get().authState;
921
+ if (token) {
922
+ if (currentAuthState.type !== AuthStateType.LOGGED_IN || currentAuthState.token !== token) {
923
+ logger.info("Setting auth token");
924
+ const currentUser = currentAuthState.type === AuthStateType.LOGGED_IN ? currentAuthState.currentUser : null, preservedLastTokenRefresh = currentAuthState.type === AuthStateType.LOGGED_IN ? currentAuthState.lastTokenRefresh : void 0;
925
+ state.set("setToken", {
926
+ authState: createLoggedInAuthState(token, currentUser, preservedLastTokenRefresh)
927
+ });
928
+ }
929
+ } else
930
+ currentAuthState.type !== AuthStateType.LOGGED_OUT && (logger.info("Clearing auth token"), state.set("setToken", {
931
+ authState: { type: AuthStateType.LOGGED_OUT, isDestroyingSession: !1 }
932
+ }));
933
+ }
934
+ );
982
935
  var authStore$1 = /* @__PURE__ */ Object.freeze({
983
936
  __proto__: null,
984
937
  authStore,
@@ -991,7 +944,111 @@ var authStore$1 = /* @__PURE__ */ Object.freeze({
991
944
  getTokenState,
992
945
  setAuthToken
993
946
  });
994
- const DEFAULT_API_VERSION = "2024-11-12", DEFAULT_REQUEST_TAG_PREFIX = "sanity.sdk", allowedKeys = Object.keys({
947
+ function createLoggedInAuthState(token, currentUser, existingLastTokenRefresh) {
948
+ const isStampedToken = token.includes("-st"), lastTokenRefresh = existingLastTokenRefresh ?? (isStampedToken ? Date.now() : void 0);
949
+ return {
950
+ type: AuthStateType.LOGGED_IN,
951
+ token,
952
+ currentUser,
953
+ ...lastTokenRefresh !== void 0 && { lastTokenRefresh }
954
+ };
955
+ }
956
+ function getAuthCode(callbackUrl, locationHref) {
957
+ const loc = new URL(locationHref, DEFAULT_BASE), callbackLocation = callbackUrl ? new URL(callbackUrl, DEFAULT_BASE) : void 0, callbackLocationMatches = callbackLocation ? loc.pathname.toLowerCase().startsWith(callbackLocation.pathname.toLowerCase()) : !0;
958
+ let authCode = new URLSearchParams(loc.hash.slice(1)).get(AUTH_CODE_PARAM) || new URLSearchParams(loc.search).get(AUTH_CODE_PARAM);
959
+ if (!authCode) {
960
+ const contextParam = new URLSearchParams(loc.search).get("_context");
961
+ if (contextParam)
962
+ try {
963
+ const parsedContext = JSON.parse(contextParam);
964
+ parsedContext && typeof parsedContext == "object" && typeof parsedContext.sid == "string" && parsedContext.sid && (authCode = parsedContext.sid);
965
+ } catch {
966
+ }
967
+ }
968
+ return authCode && callbackLocationMatches ? authCode : null;
969
+ }
970
+ function getTokenFromLocation(locationHref) {
971
+ const loc = new URL(locationHref);
972
+ return new URLSearchParams(loc.hash.slice(1)).get("token") || null;
973
+ }
974
+ function getTokenFromStorage(storageArea, storageKey) {
975
+ if (!storageArea) return null;
976
+ const item = storageArea.getItem(storageKey);
977
+ if (item === null) return null;
978
+ try {
979
+ const parsed = JSON.parse(item);
980
+ if (typeof parsed != "object" || parsed === null || !("token" in parsed) || typeof parsed.token != "string")
981
+ throw new Error("Invalid stored auth data structure");
982
+ return parsed.token;
983
+ } catch {
984
+ return storageArea.removeItem(storageKey), null;
985
+ }
986
+ }
987
+ function getStorageEvents() {
988
+ return typeof window < "u" && typeof window.addEventListener == "function" ? fromEvent(window, "storage") : EMPTY;
989
+ }
990
+ function getDefaultStorage() {
991
+ try {
992
+ return typeof localStorage < "u" && typeof localStorage.getItem == "function" ? localStorage : void 0;
993
+ } catch {
994
+ return;
995
+ }
996
+ }
997
+ function getDefaultLocation() {
998
+ try {
999
+ return typeof location > "u" ? DEFAULT_BASE : typeof location.href == "string" ? location.href : DEFAULT_BASE;
1000
+ } catch {
1001
+ return DEFAULT_BASE;
1002
+ }
1003
+ }
1004
+ function getCleanedUrl(locationUrl) {
1005
+ const loc = new URL(locationUrl), rawHash = loc.hash.startsWith("#") ? loc.hash.slice(1) : loc.hash;
1006
+ if (rawHash && rawHash.includes("=")) {
1007
+ const hashParams = new URLSearchParams(rawHash);
1008
+ hashParams.delete("token"), hashParams.delete("withSid");
1009
+ const nextHash = hashParams.toString();
1010
+ loc.hash = nextHash ? `#${nextHash}` : "";
1011
+ }
1012
+ return loc.searchParams.delete("sid"), loc.searchParams.delete("url"), loc.toString();
1013
+ }
1014
+ function getClientErrorApiBody(error) {
1015
+ const body = error.response?.body;
1016
+ return body && typeof body == "object" ? body : void 0;
1017
+ }
1018
+ function getClientErrorApiType(error) {
1019
+ const body = getClientErrorApiBody(error);
1020
+ return body?.error?.type ?? body?.type;
1021
+ }
1022
+ function getClientErrorApiDescription(error) {
1023
+ const body = getClientErrorApiBody(error);
1024
+ return body?.error?.description ?? body?.description;
1025
+ }
1026
+ function isProjectUserNotFoundClientError(error) {
1027
+ return getClientErrorApiType(error) === "projectUserNotFoundError";
1028
+ }
1029
+ const TITLE_CANDIDATES = ["title", "name", "label", "heading", "header", "caption"], SUBTITLE_CANDIDATES = ["description", "subtitle", ...TITLE_CANDIDATES], PREVIEW_PROJECTION = `{
1030
+ // Get all potential title fields
1031
+ "titleCandidates": {
1032
+ ${TITLE_CANDIDATES.map((field) => `"${field}": ${field}`).join(`,
1033
+ `)}
1034
+ },
1035
+ // Get all potential subtitle fields
1036
+ "subtitleCandidates": {
1037
+ ${SUBTITLE_CANDIDATES.map((field) => `"${field}": ${field}`).join(`,
1038
+ `)}
1039
+ },
1040
+ "media": coalesce(
1041
+ select(
1042
+ defined(asset) => {"type": "image-asset", "_ref": asset._ref},
1043
+ defined(image.asset) => {"type": "image-asset", "_ref": image.asset._ref},
1044
+ defined(mainImage.asset) => {"type": "image-asset", "_ref": mainImage.asset._ref},
1045
+ null
1046
+ )
1047
+ ),
1048
+ _type,
1049
+ _id,
1050
+ _updatedAt
1051
+ }`, DEFAULT_API_VERSION = "2024-11-12", DEFAULT_REQUEST_TAG_PREFIX = "sanity.sdk", allowedKeys = Object.keys({
995
1052
  apiHost: null,
996
1053
  useCdn: null,
997
1054
  token: null,
@@ -1071,45 +1128,39 @@ var clientStore$1 = /* @__PURE__ */ Object.freeze({
1071
1128
  getClient,
1072
1129
  getClientState
1073
1130
  });
1074
- function setCleanupTimeout(fn, delay) {
1075
- const timer2 = setTimeout(fn, delay), t = timer2;
1076
- return typeof t == "object" && t !== null && "unref" in t && typeof t.unref == "function" && t.unref(), timer2;
1131
+ const API_VERSION$1 = "v2025-05-06";
1132
+ function hasImageRef(value) {
1133
+ return isObject(value) && "_ref" in value && typeof value._ref == "string";
1134
+ }
1135
+ function normalizeMedia(media, client) {
1136
+ if (!media || !hasImageRef(media)) return null;
1137
+ const url = createImageUrlBuilder(client).image({ _ref: media._ref }).url();
1138
+ return {
1139
+ type: "image-asset",
1140
+ _ref: media._ref,
1141
+ url
1142
+ };
1143
+ }
1144
+ function findFirstDefined(fieldsToSearch, candidates, exclude) {
1145
+ if (candidates)
1146
+ for (const field of fieldsToSearch) {
1147
+ const value = candidates[field];
1148
+ if (typeof value == "string" && value.trim() !== "" && value !== exclude)
1149
+ return value;
1150
+ }
1151
+ }
1152
+ function transformProjectionToPreview(instance, projectionResult, resource) {
1153
+ const title = findFirstDefined(TITLE_CANDIDATES, projectionResult.titleCandidates), subtitle = findFirstDefined(SUBTITLE_CANDIDATES, projectionResult.subtitleCandidates, title), client = getClient(instance, {
1154
+ apiVersion: API_VERSION$1,
1155
+ resource
1156
+ });
1157
+ return {
1158
+ title: String(title || `${projectionResult._type}: ${projectionResult._id}`),
1159
+ subtitle: subtitle || void 0,
1160
+ media: normalizeMedia(projectionResult.media, client),
1161
+ ...projectionResult._status && { _status: projectionResult._status }
1162
+ };
1077
1163
  }
1078
- const API_VERSION$1 = "vX", PROJECT_API_VERSION = "2025-07-18", USERS_STATE_CLEAR_DELAY = 5e3, DEFAULT_USERS_BATCH_SIZE = 100, getUsersKey = (instance, {
1079
- resourceType,
1080
- organizationId,
1081
- batchSize = DEFAULT_USERS_BATCH_SIZE,
1082
- projectId = instance.config.projectId,
1083
- userId
1084
- } = {}) => JSON.stringify({
1085
- resourceType,
1086
- organizationId,
1087
- batchSize,
1088
- projectId,
1089
- userId
1090
- }), parseUsersKey = (key) => JSON.parse(key), addSubscription = (subscriptionId, key) => (prev) => {
1091
- const group = prev.users[key], subscriptions = [...group?.subscriptions ?? [], subscriptionId];
1092
- return { ...prev, users: { ...prev.users, [key]: { ...group, subscriptions } } };
1093
- }, removeSubscription = (subscriptionId, key) => (prev) => {
1094
- const group = prev.users[key];
1095
- if (!group) return prev;
1096
- const subscriptions = group.subscriptions.filter((id) => id !== subscriptionId);
1097
- return subscriptions.length ? { ...prev, users: { ...prev.users, [key]: { ...group, subscriptions } } } : { ...prev, users: omitProperty(prev.users, key) };
1098
- }, setUsersData = (key, { data, nextCursor, totalCount }) => (prev) => {
1099
- const group = prev.users[key];
1100
- if (!group) return prev;
1101
- const users = [...group.users ?? [], ...data];
1102
- return { ...prev, users: { ...prev.users, [key]: { ...group, users, totalCount, nextCursor } } };
1103
- }, updateLastLoadMoreRequest = (timestamp, key) => (prev) => {
1104
- const group = prev.users[key];
1105
- return group ? { ...prev, users: { ...prev.users, [key]: { ...group, lastLoadMoreRequest: timestamp } } } : prev;
1106
- }, setUsersError = (key, error) => (prev) => {
1107
- const group = prev.users[key];
1108
- return group ? { ...prev, users: { ...prev.users, [key]: { ...group, error } } } : prev;
1109
- }, cancelRequest = (key) => (prev) => {
1110
- const group = prev.users[key];
1111
- return !group || group.subscriptions.length ? prev : { ...prev, users: omitProperty(prev.users, key) };
1112
- }, initializeRequest = (key) => (prev) => prev.users[key] ? prev : { ...prev, users: { ...prev.users, [key]: { subscriptions: [] } } };
1113
1164
  function sortReleases(releases = []) {
1114
1165
  return [...releases].sort((a, b) => {
1115
1166
  if (a.metadata.releaseType === "undecided" && b.metadata.releaseType !== "undecided")
@@ -1202,7 +1253,12 @@ let _boundGetPerspectiveState;
1202
1253
  const getPerspectiveState = (instance, ...rest) => (_boundGetPerspectiveState || (_boundGetPerspectiveState = bindActionByResource(
1203
1254
  releasesStore,
1204
1255
  _getPerspectiveStateSelector
1205
- )), _boundGetPerspectiveState(instance, ...rest.length ? rest : [{}])), QUERY_STATE_CLEAR_DELAY = 1e3, QUERY_STORE_API_VERSION = "v2025-05-06", QUERY_STORE_DEFAULT_PERSPECTIVE = "drafts", setQueryError = (key, error) => (prev) => {
1256
+ )), _boundGetPerspectiveState(instance, ...rest.length ? rest : [{}]));
1257
+ function setCleanupTimeout(fn, delay) {
1258
+ const timer2 = setTimeout(fn, delay), t = timer2;
1259
+ return typeof t == "object" && t !== null && "unref" in t && typeof t.unref == "function" && t.unref(), timer2;
1260
+ }
1261
+ const QUERY_STATE_CLEAR_DELAY = 1e3, QUERY_STORE_API_VERSION = "v2025-05-06", QUERY_STORE_DEFAULT_PERSPECTIVE = "drafts", setQueryError = (key, error) => (prev) => {
1206
1262
  const prevQuery = prev.queries[key];
1207
1263
  return prevQuery ? { ...prev, queries: { ...prev.queries, [key]: { ...prevQuery, error } } } : prev;
1208
1264
  }, setQueryData = (key, result, syncTags) => (prev) => {
@@ -1396,62 +1452,41 @@ const _resolveQuery = bindActionByResource(
1396
1452
  );
1397
1453
  return firstValueFrom(race([resolved$, aborted$]));
1398
1454
  }
1399
- ), TITLE_CANDIDATES = ["title", "name", "label", "heading", "header", "caption"], SUBTITLE_CANDIDATES = ["description", "subtitle", ...TITLE_CANDIDATES], PREVIEW_PROJECTION = `{
1400
- // Get all potential title fields
1401
- "titleCandidates": {
1402
- ${TITLE_CANDIDATES.map((field) => `"${field}": ${field}`).join(`,
1403
- `)}
1404
- },
1405
- // Get all potential subtitle fields
1406
- "subtitleCandidates": {
1407
- ${SUBTITLE_CANDIDATES.map((field) => `"${field}": ${field}`).join(`,
1408
- `)}
1409
- },
1410
- "media": coalesce(
1411
- select(
1412
- defined(asset) => {"type": "image-asset", "_ref": asset._ref},
1413
- defined(image.asset) => {"type": "image-asset", "_ref": image.asset._ref},
1414
- defined(mainImage.asset) => {"type": "image-asset", "_ref": mainImage.asset._ref},
1415
- null
1416
- )
1417
- ),
1418
- _type,
1419
- _id,
1420
- _updatedAt
1421
- }`, API_VERSION = "v2025-05-06";
1422
- function hasImageRef(value) {
1423
- return isObject(value) && "_ref" in value && typeof value._ref == "string";
1424
- }
1425
- function normalizeMedia(media, client) {
1426
- if (!media || !hasImageRef(media)) return null;
1427
- const url = createImageUrlBuilder(client).image({ _ref: media._ref }).url();
1428
- return {
1429
- type: "image-asset",
1430
- _ref: media._ref,
1431
- url
1432
- };
1433
- }
1434
- function findFirstDefined(fieldsToSearch, candidates, exclude) {
1435
- if (candidates)
1436
- for (const field of fieldsToSearch) {
1437
- const value = candidates[field];
1438
- if (typeof value == "string" && value.trim() !== "" && value !== exclude)
1439
- return value;
1440
- }
1441
- }
1442
- function transformProjectionToPreview(instance, projectionResult, resource) {
1443
- const title = findFirstDefined(TITLE_CANDIDATES, projectionResult.titleCandidates), subtitle = findFirstDefined(SUBTITLE_CANDIDATES, projectionResult.subtitleCandidates, title), client = getClient(instance, {
1444
- apiVersion: API_VERSION,
1445
- resource
1446
- });
1447
- return {
1448
- title: String(title || `${projectionResult._type}: ${projectionResult._id}`),
1449
- subtitle: subtitle || void 0,
1450
- media: normalizeMedia(projectionResult.media, client),
1451
- ...projectionResult._status && { _status: projectionResult._status }
1452
- };
1453
- }
1454
- const TOKEN_REGEX = /(?:[^\s"]+|"[^"]*")+/g;
1455
+ ), API_VERSION = "vX", PROJECT_API_VERSION = "2025-07-18", USERS_STATE_CLEAR_DELAY = 5e3, DEFAULT_USERS_BATCH_SIZE = 100, getUsersKey = (instance, {
1456
+ resourceType,
1457
+ organizationId,
1458
+ batchSize = DEFAULT_USERS_BATCH_SIZE,
1459
+ projectId = instance.config.projectId,
1460
+ userId
1461
+ } = {}) => JSON.stringify({
1462
+ resourceType,
1463
+ organizationId,
1464
+ batchSize,
1465
+ projectId,
1466
+ userId
1467
+ }), parseUsersKey = (key) => JSON.parse(key), addSubscription = (subscriptionId, key) => (prev) => {
1468
+ const group = prev.users[key], subscriptions = [...group?.subscriptions ?? [], subscriptionId];
1469
+ return { ...prev, users: { ...prev.users, [key]: { ...group, subscriptions } } };
1470
+ }, removeSubscription = (subscriptionId, key) => (prev) => {
1471
+ const group = prev.users[key];
1472
+ if (!group) return prev;
1473
+ const subscriptions = group.subscriptions.filter((id) => id !== subscriptionId);
1474
+ return subscriptions.length ? { ...prev, users: { ...prev.users, [key]: { ...group, subscriptions } } } : { ...prev, users: omitProperty(prev.users, key) };
1475
+ }, setUsersData = (key, { data, nextCursor, totalCount }) => (prev) => {
1476
+ const group = prev.users[key];
1477
+ if (!group) return prev;
1478
+ const users = [...group.users ?? [], ...data];
1479
+ return { ...prev, users: { ...prev.users, [key]: { ...group, users, totalCount, nextCursor } } };
1480
+ }, updateLastLoadMoreRequest = (timestamp, key) => (prev) => {
1481
+ const group = prev.users[key];
1482
+ return group ? { ...prev, users: { ...prev.users, [key]: { ...group, lastLoadMoreRequest: timestamp } } } : prev;
1483
+ }, setUsersError = (key, error) => (prev) => {
1484
+ const group = prev.users[key];
1485
+ return group ? { ...prev, users: { ...prev.users, [key]: { ...group, error } } } : prev;
1486
+ }, cancelRequest = (key) => (prev) => {
1487
+ const group = prev.users[key];
1488
+ return !group || group.subscriptions.length ? prev : { ...prev, users: omitProperty(prev.users, key) };
1489
+ }, initializeRequest = (key) => (prev) => prev.users[key] ? prev : { ...prev, users: { ...prev.users, [key]: { subscriptions: [] } } }, TOKEN_REGEX = /(?:[^\s"]+|"[^"]*")+/g;
1455
1490
  function isNegationToken(token) {
1456
1491
  return typeof token < "u" && token.trim().startsWith("-");
1457
1492
  }
@@ -1475,7 +1510,7 @@ function createGroqSearchFilter(query) {
1475
1510
  ), `[@] match text::query("${processedTokens.join(" ").replace(/"/g, '\\"')}")`;
1476
1511
  }
1477
1512
  export {
1478
- API_VERSION$1 as API_VERSION,
1513
+ API_VERSION,
1479
1514
  AuthStateType,
1480
1515
  DEFAULT_API_VERSION$1 as DEFAULT_API_VERSION,
1481
1516
  PREVIEW_PROJECTION,
@@ -1499,6 +1534,7 @@ export {
1499
1534
  getActiveReleasesState,
1500
1535
  getAllReleasesState,
1501
1536
  getAuthCode,
1537
+ getAuthLogger,
1502
1538
  getAuthState,
1503
1539
  getCleanedUrl,
1504
1540
  getClient,