@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.
- package/dist/_chunks-dts/createGroqSearchFilter.d.ts +925 -0
- package/dist/_chunks-dts/createGroqSearchFilter.d.ts.map +1 -0
- package/dist/_chunks-es/createGroqSearchFilter.js +261 -225
- package/dist/_chunks-es/createGroqSearchFilter.js.map +1 -1
- package/dist/_chunks-es/version.js +1 -1
- package/dist/_exports/_internal.d.ts +3 -2
- package/dist/_exports/_internal.d.ts.map +1 -0
- package/dist/index.d.ts +1856 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -28
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/auth/authLogger.ts +30 -0
- package/src/auth/authStore.test.ts +96 -1
- package/src/auth/authStore.ts +55 -24
- package/src/auth/handleAuthCallback.test.ts +23 -1
- package/src/auth/handleAuthCallback.ts +25 -6
- package/src/auth/logout.test.ts +68 -1
- package/src/auth/logout.ts +22 -3
- package/src/auth/refreshStampedToken.test.ts +15 -0
- package/src/auth/refreshStampedToken.ts +12 -1
- package/src/auth/subscribeToStateAndFetchCurrentUser.test.ts +17 -2
- package/src/auth/subscribeToStateAndFetchCurrentUser.ts +9 -0
- package/dist/_chunks-dts/utils.d.ts +0 -2778
|
@@ -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":";;;;;;;;UAMiB,YAAA;EAAY;;;EAI3B,IAAA;EAKA;;;EAAA,KAAA;EAUS;AAQX;;EAbE,GAAA;EAwByB;;;EAnBzB,SAAA;AAAA;;;;;;UAQe,UAAA;EAWf;;;;EANA,mBAAA;EAaY;;;;EAPZ,aAAA,IAAiB,MAAA,EAAQ,YAAA,KAAiB,YAAA;EAOuC;;;;;EAAjF,SAAA,GAAY,YAAA,OAAmB,IAAA,EAAM,YAAA,OAAmB,YAAA,KAAiB,OAAA,CAAQ,YAAA;EA0B5E;AAAA;;ACjEP;ED6CE,OAAA;;;;;EAMA,WAAA,GAAc,OAAA;ECjDJ;;;AAA+D;AAU3E;ED8CE,WAAA;;;;;;EAOA,KAAA;AAAA;;;;AAvEF;;;;;UCMiB,WAAA;EDQf;ECNA,SAAA,CAAU,QAAA;IAAW,IAAA,GAAO,KAAA;EAAA;IAAkC,WAAA;EAAA;AAAA;;;;;;;;UAU/C,YAAA;EDuCM;;;;;ECjCrB,aAAA;EDc0C;ECZ1C,IAAA;IDmBY;;;;;;;ICXV,KAAA,GAAQ,WAAW;EAAA;AAAA;;;ADqChB;;UC7BU,aAAA;EACf,SAAA,GAAY,UAAU;AAAA;;;;KAMZ,kBAAA;EACV,WAAA;EACA,oBAAA,GAAuB,oBAAoB;AAAA;AA3C8B;AAU3E;;AAV2E,UAiD1D,iBAAA;EACf,WAAA,GAAc,iBAAA,GAAoB,kBAAkB;AAAA;;;;UAMrC,aAAA,+EACP,aAAA,CAAc,UAAA,GAAa,iBAAA;EACnC,OAAA,GAAU,QAAA;EAxBK;;;;EA6Bf,QAAA,GAAW,gBAAA;EA5BX;;;AAAsB;EAiCtB,MAAA,GAAS,gBAAA;AAAA;;;;;;;UASM,kBAAA,sHAIP,aAAA,CAAc,QAAA,EAAU,UAAA;EAChC,UAAA;EACA,YAAA,EAAc,aAAA;;;;;;EAMd,QAAA;AAAA;AAjCF;;;;;;AAAA,UA0CiB,cAAA,sHAIP,kBAAA,CAAmB,aAAA,EAAe,QAAA,EAAU,UAAA;EACpD,UAAA;AAAA;;;;;;;;;UAWe,aAAA,SAAsB,aAAa;EAClD,SAAS;AAAA;;;;AA/CgB;UAsDV,YAAA,SAAqB,aAAA,EAAe,iBAAA;EA7ClB;;;EAiDjC,IAAA,GAAO,UAAA;EA3CO;;;;;;;;EAoDd,MAAA,GAAS,YAAA;EAtDuB;;;;;;EA8DhC,UAAA;IACE,OAAA;EAAA;EA9C2B;;;;EAqD7B,SAAA,GAAY,MAAA,SAAe,gBAAA;EAjDD;;;;EAsD1B,OAAA,GAAU,MAAA,SAAe,gBAAA;AAAA;;;;;;AArDf;KA8DA,gBAAA,GAAmB,eAAA,GAAkB,oBAAA,GAAuB,cAAA;;;;KAK5D,eAAA;EAAmB,SAAA;EAAmB,OAAO;AAAA;;;;KAK7C,oBAAA;EAAwB,cAAc;AAAA;;;;KAKtC,cAAA;EAAkB,QAAQ;AAAA;;;;iBAKtB,iBAAA,CAAkB,QAAA,EAAU,gBAAA,GAAmB,QAAA,IAAY,eAAe;;;;iBAO1E,sBAAA,CACd,QAAA,EAAU,gBAAA,GACT,QAAA,IAAY,oBAAoB;;;;iBAOnB,gBAAA,CAAiB,QAAA,EAAU,gBAAA,GAAmB,QAAA,IAAY,cAAc;;AA7C7C;AAS3C;;KA4CY,cAAA,GAAiB,gBAAgB;;;;;KAMjC,aAAA,GAAgB,eAAe;;;;;KAM/B,kBAAA,GAAqB,oBAAoB;AAnDrD;;;;AAAA,KAyDY,YAAA,GAAe,cAAc;AApDzC;;;;AAAA,iBA0DgB,eAAA,CAAgB,MAAA,EAAQ,cAAA,GAAiB,MAAA,IAAU,aAAa;AArDhF;;;;AAAA,iBA6DgB,oBAAA,CAAqB,MAAA,EAAQ,cAAA,GAAiB,MAAA,IAAU,kBAAkB;AAxD1F;;;;AAAA,iBAgEgB,cAAA,CAAe,MAAA,EAAQ,cAAA,GAAiB,MAAA,IAAU,YAAY;;;;;;;;iBC9N9D,cAAA,CAAe,MAAoB,EAAZ,YAAY;;;;;AFnCnD;UGIiB,cAAA;;;;;WAKN,UAAA;EHUT;;AAAS;EAAT,SGLS,MAAA,EAAQ,YAAA;EHaQ;;;;EGPzB,UAAA;EHyBqC;;;;EGnBrC,OAAA;EH+BqB;;;;;EGxBrB,SAAA,CAAU,EAAA;EHKgC;;;;;EGE1C,SAAA,IAAa,cAAA;EHK4D;;;;;EGEzE,WAAA,CAAY,MAAA,EAAQ,YAAA,GAAe,cAAA;EHwBnC;;AAAK;;ACjEP;;;EEkDE,KAAA,CAAM,YAAA,EAAc,OAAA,CAAQ,YAAA,IAAgB,cAAA;AAAA;;;;;;AFhD6B;AAU3E;;iBEiDgB,oBAAA,CAAqB,MAAA,GAAQ,YAAA,GAAoB,cAAc;;;;UClE9D,UAAA;EJDY;;;;;;EIQ3B,GAAA,QAAW,MAAA;EJWF;AAAA;AAQX;;;;;;;EIRE,GAAA,GAAM,IAAA,UAAc,YAAA,EAAc,OAAA,CAAQ,MAAA,MAAY,CAAA,EAAG,MAAA,KAAW,OAAA,CAAQ,MAAA;EJ0BK;;;;;;;;EIhBjF,UAAA,EAAY,UAAA,CAAW,MAAA;AAAA;;;;UC7BR,YAAA;ELAY;;;;;;EKO3B,QAAA,EAAU,cAAA;ELYD;AAAA;AAQX;;;;EKZE,KAAA,EAAO,UAAA,CAAW,MAAA;EL8BN;;;EKzBZ,GAAA,EAAK,IAAA;AAAA;;;;KCMK,WAAA,gEACV,OAAA,EAAS,YAAA,CAAa,MAAA,EAAQ,IAAA,MAC3B,MAAA,EAAQ,OAAA,KACR,OAAA;;;;KAKO,gBAAA,iDACV,QAAA,EAAU,cAAA,KACP,MAAA,EAAQ,OAAA,KACR,OAAA;;;;;;aCtCO,aAAA;EACV,SAAA;EACA,UAAA;EACA,KAAA;EACA,UAAA;AAAA;;APHF;;;;KQoBY,SAAA,GAAY,iBAAA,GAAoB,kBAAA,GAAqB,kBAAA,GAAqB,cAAA;;;;;KAM1E,iBAAA;EACV,IAAA,EAAM,aAAA,CAAc,SAAA;EACpB,KAAA;EACA,WAAA,EAAa,WAAW;EACxB,gBAAA;AAAA;;;;;KAOU,kBAAA;EAAsB,IAAA,EAAM,aAAA,CAAc,UAAU;EAAE,mBAAA;AAAA;;;;;KAMtD,kBAAA;EAAsB,IAAA,EAAM,aAAA,CAAc,UAAU;EAAE,iBAAA;AAAA;;;;;KAMtD,cAAA;EAAkB,IAAA,EAAM,aAAA,CAAc,KAAK;EAAE,KAAA;AAAA;;;ARsBlD;;ACjEP;UOkDiB,gBAAA;EACf,IAAA;EACA,GAAA;EACA,KAAA;AAAA;;;;;KAOU,iBAAA;APhDZ;;;AAAA,UOuDiB,cAAA;EACf,SAAA,EAAW,SAAA;EACX,SAAA,GAAY,YAAA;EACZ,OAAA;IACE,mBAAA;IACA,aAAA,GAAgB,MAAA,EAAQ,YAAA,KAAiB,YAAA;IACzC,eAAA,EAAiB,UAAA;IACjB,UAAA;IACA,WAAA,EAAa,OAAA;IACb,OAAA;IACA,QAAA;IACA,WAAA;IACA,aAAA;IACA,UAAA,EAAY,iBAAA;EAAA;EAEd,gBAAA,GAAmB,gBAAA;AAAA;;;;cAwIR,mBAAA,EAAmB,gBAAA,CAAA,cAAA,4BAAA,WAAA,CAAA,WAAA;;;AP7Ka;cOuLhC,aAAA,EAAa,gBAAA,CAAA,cAAA,4BAAA,WAAA;;;;cAkBb,gBAAA,EAAgB,gBAAA,CAAA,cAAA,4BAAA,WAAA;AP5L7B;;;AAAA,cOoMa,YAAA,EAAY,gBAAA,CAAA,cAAA,4BAAA,WAAA,CAAA,SAAA;;;;cAQZ,0BAAA,EAA0B,gBAAA,CAAA,cAAA,4BAAA,WAAA;;;;;cAS1B,qBAAA,EAAqB,gBAAA,CAAA,cAAA,4BAAA,WAAA;;;;;;cAcrB,YAAA,EAAY,gBAAA,CAAA,cAAA,GAAA,KAAA;AR5NlB;AAAA,KSmGK,YAAA;EACV,KAAA;IAAS,IAAA;IAAe,WAAA;EAAA;EACxB,IAAA;EACA,WAAA;EACA,OAAA;AAAA;;iBAIc,qBAAA,CAAsB,KAAA,EAAO,WAAA,GAAc,YAAY;AR1KI;AAAA,iBQgL3D,qBAAA,CAAsB,KAAkB,EAAX,WAAW;;iBAMxC,4BAAA,CAA6B,KAAkB,EAAX,WAAW;;iBAM/C,gCAAA,CAAiC,KAAkB,EAAX,WAAW;ATjLxD;AAQX;;;;;AARW,cUHE,kBAAA;;;;;UClBI,sBAAA;EACf,IAAA,EAAM,MAAM;EACZ,SAAA;AAAA;;;;AXmBS;AAQX;;KWdY,eAAA;AAAA,UAYK,cAAA;EACf,iBAAA;EACA,qBAAA;EACA,mBAAA;AAAA;;;;;UC5Be,kBAAA;EACf,GAAA;EACA,KAAA;EACA,UAAA;EACA,eAAA,EAAiB,MAAA;EACjB,kBAAA,EAAoB,MAAA;EACpB,KAAA,GAAQ,YAAA;EACR,OAAA,GAAU,cAAA;AAAA;AZYD;AAQX;;;;AARW,UYJM,YAAA;EACf,IAAA;EACA,IAAA;EACA,GAAA;AAAA;;;;;;;;UAUe,YAAA;EZU2B;;;EYN1C,KAAA;EZa+B;;;EYR/B,QAAA;EZcA;;;;EYRA,KAAA,GAAQ,YAAY;EZ4Bf;AAAA;;EYvBL,OAAA;IX1C0B,0CW4CxB,qBAAA,WX5CwB;IW8CxB,iBAAA;EAAA;AAAA;;;;AX5CuE;AAU3E;;;;;;KWgDY,YAAA;EACV,IAAA,EAAM,CAAC;EACP,SAAA;AAAA;AX1BF;;;;;AAAA,UWkCiB,iBAAA;EACf,MAAA,8BAAmC,YAAY,CAAC,YAAA;EAChD,aAAA;AAAA;;;;AZ3DS;AAQX;;;;;iBasCgB,4BAAA,CACd,QAAA,EAAU,cAAA,EACV,gBAAA,EAAkB,kBAAA,EAClB,QAAA,GAAW,gBAAA,GACV,YAAA;;AbrEH;;;;;;;;;AAmBW;UcRM,WAAA;EdgBU;;;;;EcVzB,SAAA,GAAY,cAAA;Ed4B4C;;;;;;;EcnBxD,UAAA,QAAkB,CAAA;EdYO;;;;;;;;;EcDzB,UAAA,EAAY,UAAA,CAAW,CAAA;AAAA;;;;;;AdkClB;;ACjEP;;;;;;;;;;AAE2E;AAU3E;;;Ua2CiB,eAAA;EbrCf;;;EayCA,KAAA,EAAO,MAAA;Eb/Bc;AAAA;AAQvB;Ea4BE,QAAA,EAAU,cAAc;AAAA;;;;;KAOd,QAAA,gDACV,OAAA,EAAS,eAAA,CAAgB,MAAA,MACtB,MAAA,EAAQ,OAAA,KACR,OAAA;AdhFL;;;AAAA,Ue6DiB,YAAA,+GAMb,IAAA,CAAK,oBAAA,sDACL,aAAA,CAAc,QAAA,EAAU,UAAA;EAC1B,KAAA,EAAO,MAAA;EACP,MAAA,GAAS,MAAA;AAAA;;;AfnDA;UeyDM,mBAAA,+GAIP,YAAA,CAAa,MAAA,EAAQ,QAAA,EAAU,UAAA;EACvC,MAAA,GAAS,WAAA;AAAA;;cAME,WAAA,GAAe,OAAqB,EAAZ,YAAY;;cAEpC,aAAA,GAAiB,GAAA,aAAc,YAA+B;;;;;;;;;;;;;;;;;iBAmM3D,aAAA,uGAKd,QAAA,EAAU,cAAA,EACV,YAAA,EAAc,YAAA,CAAa,MAAA,EAAQ,QAAA,EAAU,UAAA,IAC5C,WAAA,CAAY,iBAAA,CAAkB,MAAA,KAAW,UAAA,IAAc,QAAA;;iBAG1C,aAAA,QACd,QAAA,EAAU,cAAA,EACV,YAAA,EAAc,YAAA,GACb,WAAA,CAAY,KAAA;;iBAGC,aAAA,CACd,QAAA,EAAU,cAAA,EACV,YAAA,EAAc,YAAA,GACb,WAAA;;;;AfxOI;;ACjEP;;;;;;;;;iBc0VgB,YAAA,uGAKd,QAAA,EAAU,cAAA,EACV,YAAA,EAAc,mBAAA,CAAoB,MAAA,EAAQ,QAAA,EAAU,UAAA,IACnD,OAAA,CAAQ,iBAAA,CAAkB,MAAA,KAAW,UAAA,IAAc,QAAA;Ad/VqB;AAAA,iBckW3D,YAAA,QACd,QAAA,EAAU,cAAA,EACV,YAAA,EAAc,mBAAA,GACb,OAAA,CAAQ,KAAA;;;;UC9WM,UAAA;EACf,YAAA;EACA,OAAA,EAAS,WAAA;EACT,WAAA,EAAa,UAAU;AAAA;;;;UAMR,UAAA;EACf,OAAA;EACA,YAAA;EACA,UAAA;EACA,SAAA,EAAW,KAAK;EAChB,UAAA;AAAA;;;;UAMe,WAAA;EACf,EAAA;EACA,WAAA;EACA,KAAA;EACA,UAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,QAAA;EACA,aAAA;EACA,SAAA;EACA,SAAA;EACA,aAAA;EACA,UAAA;AAAA;;;;UAMe,eAAA,SAAwB,aAAa;EACpD,YAAA;EACA,SAAA;EACA,cAAA;EACA,MAAA;AAAA;AhB6BK;;ACjEP;ADiEO,UgBvBU,eAAA;EACf,aAAA;EACA,UAAA;EACA,UAAA;EACA,mBAAA;EACA,KAAA,GAAQ,UAAU;EAClB,KAAA;AAAA;;Af9CyE;AAU3E;Ue0CiB,kBAAA;EACf,IAAA,EAAM,UAAU;EAChB,UAAA;EACA,UAAA;AAAA;;;;UAMe,eAAA;EACf,KAAA,4BAAgC,eAAe;EAC/C,KAAA;AAAA;;;;UAMe,mBAAA,SAA4B,eAAe;EAC1D,MAAA,GAAS,WAAA;AAAA;;;;UAMM,cAAA,SAAuB,aAAa;EACnD,MAAA;EACA,YAAA;EACA,cAAA;AAAA;;;;UAMe,kBAAA,SAA2B,cAAc;EACxD,MAAA,GAAS,WAAA;AAAA;;cC9FE,WAAA,GACX,QAAA,EAAU,cAAA;EACV,YAAA;EAAA,cAAA;EAAA,SAAA;EAAA,SAAA;EAAA;AAAA,IAMG,eAAA;;cAWQ,aAAA,GACX,GAAA;EAEA,SAAA;EACA,YAAA;EACA,SAAA;EACA,cAAA;EACA,MAAA;AAAA;;;;;;AjB1BF;;;;;;;;iBkBsCgB,sBAAA,CAAuB,KAAa"}
|
|
@@ -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
|
|
336
|
-
function
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
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 = ({
|
|
420
|
-
|
|
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
|
|
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
|
-
|
|
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),
|
|
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(
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1075
|
-
|
|
1076
|
-
return
|
|
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 : [{}]))
|
|
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
|
-
),
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
)
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
return
|
|
1424
|
-
}
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
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
|
|
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,
|