@sanity/sdk 3.0.0-rc.0 → 3.0.0-rc.1

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.
Files changed (197) hide show
  1. package/dist/_chunks-dts/createGroqSearchFilter.d.ts +1147 -0
  2. package/dist/_chunks-dts/createGroqSearchFilter.d.ts.map +1 -0
  3. package/dist/_chunks-es/_internal.js +134 -0
  4. package/dist/_chunks-es/_internal.js.map +1 -0
  5. package/dist/_chunks-es/createGroqSearchFilter.js +1864 -0
  6. package/dist/_chunks-es/createGroqSearchFilter.js.map +1 -0
  7. package/dist/_chunks-es/telemetryManager.js +93 -0
  8. package/dist/_chunks-es/telemetryManager.js.map +1 -0
  9. package/dist/_exports/_internal.d.ts +95 -0
  10. package/dist/_exports/_internal.d.ts.map +1 -0
  11. package/dist/_exports/_internal.js +24 -0
  12. package/dist/_exports/_internal.js.map +1 -0
  13. package/dist/index.d.ts +1079 -1076
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +1967 -2302
  16. package/dist/index.js.map +1 -1
  17. package/package.json +48 -47
  18. package/src/_exports/_internal.ts +26 -0
  19. package/src/_exports/index.ts +120 -11
  20. package/src/access/checkPermissions.test.ts +55 -0
  21. package/src/access/checkPermissions.ts +54 -0
  22. package/src/agent/agentActions.test.ts +16 -60
  23. package/src/agent/agentActions.ts +25 -38
  24. package/src/applications/applications.test-d.ts +83 -0
  25. package/src/applications/applications.test.ts +130 -0
  26. package/src/applications/applications.ts +364 -0
  27. package/src/applications/userApplications.test.ts +126 -0
  28. package/src/applications/userApplications.ts +261 -0
  29. package/src/auth/authLogger.ts +30 -0
  30. package/src/auth/authMode.test.ts +25 -0
  31. package/src/auth/authMode.ts +6 -3
  32. package/src/auth/authStore.test.ts +194 -13
  33. package/src/auth/authStore.ts +59 -26
  34. package/src/auth/getOrganizationVerificationState.test.ts +18 -17
  35. package/src/auth/getOrganizationVerificationState.ts +4 -4
  36. package/src/auth/handleAuthCallback.test.ts +35 -1
  37. package/src/auth/handleAuthCallback.ts +25 -6
  38. package/src/auth/logout.test.ts +75 -2
  39. package/src/auth/logout.ts +23 -4
  40. package/src/auth/refreshStampedToken.test.ts +219 -469
  41. package/src/auth/refreshStampedToken.ts +79 -195
  42. package/src/auth/studioAuth.ts +1 -1
  43. package/src/auth/studioModeAuth.ts +2 -1
  44. package/src/auth/subscribeToStateAndFetchCurrentUser.test.ts +146 -13
  45. package/src/auth/subscribeToStateAndFetchCurrentUser.ts +37 -6
  46. package/src/auth/subscribeToStorageEventsAndSetToken.test.ts +2 -0
  47. package/src/client/clientStore.test.ts +62 -37
  48. package/src/client/clientStore.ts +45 -75
  49. package/src/client/liveEvents.test.ts +151 -0
  50. package/src/client/liveEvents.ts +107 -0
  51. package/src/comlink/controller/actions/destroyController.test.ts +4 -1
  52. package/src/comlink/controller/actions/getOrCreateChannel.test.ts +4 -1
  53. package/src/comlink/controller/actions/getOrCreateChannel.ts +2 -2
  54. package/src/comlink/controller/actions/getOrCreateController.test.ts +4 -1
  55. package/src/comlink/controller/actions/releaseChannel.test.ts +1 -1
  56. package/src/comlink/controller/comlinkControllerStore.test.ts +4 -1
  57. package/src/comlink/node/actions/getOrCreateNode.test.ts +9 -3
  58. package/src/comlink/node/actions/getOrCreateNode.ts +2 -2
  59. package/src/comlink/node/actions/releaseNode.test.ts +7 -4
  60. package/src/comlink/node/comlinkNodeStore.test.ts +2 -2
  61. package/src/comlink/node/getNodeState.test.ts +1 -1
  62. package/src/comlink/node/getNodeState.ts +2 -1
  63. package/src/config/__tests__/handles.test.ts +18 -12
  64. package/src/config/handles.ts +25 -7
  65. package/src/config/sanityConfig.ts +109 -79
  66. package/src/datasets/datasets.test.ts +2 -2
  67. package/src/datasets/datasets.ts +10 -4
  68. package/src/document/actions.test.ts +115 -33
  69. package/src/document/actions.ts +212 -15
  70. package/src/document/applyDocumentActions.test.ts +38 -12
  71. package/src/document/applyDocumentActions.ts +30 -9
  72. package/src/document/documentConstants.ts +7 -0
  73. package/src/document/documentStore.concurrency.test.ts +1306 -0
  74. package/src/document/documentStore.test.ts +673 -278
  75. package/src/document/documentStore.ts +162 -71
  76. package/src/document/events.test.ts +57 -2
  77. package/src/document/events.ts +82 -26
  78. package/src/document/listen.test.ts +56 -0
  79. package/src/document/listen.ts +74 -21
  80. package/src/document/listenerEventOperators.test.ts +311 -0
  81. package/src/document/listenerEventOperators.ts +217 -0
  82. package/src/document/patchOperations.test.ts +49 -2
  83. package/src/document/patchOperations.ts +50 -0
  84. package/src/document/permissions.test.ts +105 -60
  85. package/src/document/permissions.ts +44 -19
  86. package/src/document/processActions/create.ts +138 -0
  87. package/src/document/processActions/delete.ts +100 -0
  88. package/src/document/processActions/discard.ts +63 -0
  89. package/src/document/processActions/edit.ts +154 -0
  90. package/src/document/processActions/processActions.ts +218 -0
  91. package/src/document/processActions/publish.ts +120 -0
  92. package/src/document/processActions/releaseArchive.ts +77 -0
  93. package/src/document/processActions/releaseCreate.ts +59 -0
  94. package/src/document/processActions/releaseDelete.ts +65 -0
  95. package/src/document/processActions/releaseEdit.ts +37 -0
  96. package/src/document/processActions/releasePublish.ts +45 -0
  97. package/src/document/processActions/releaseSchedule.ts +87 -0
  98. package/src/document/processActions/releaseUtil.ts +31 -0
  99. package/src/document/processActions/shared.ts +308 -0
  100. package/src/document/processActions/unpublish.ts +85 -0
  101. package/src/document/processActions.test.ts +1129 -121
  102. package/src/document/reducers.test.ts +639 -64
  103. package/src/document/reducers.ts +187 -48
  104. package/src/document/resourceRules.test.ts +178 -0
  105. package/src/document/resourceRules.ts +117 -0
  106. package/src/document/sharedListener.test.ts +16 -14
  107. package/src/document/sharedListener.ts +24 -8
  108. package/src/document/util.ts +14 -0
  109. package/src/favorites/favorites.test.ts +5 -6
  110. package/src/installations/installations.test-d.ts +68 -0
  111. package/src/installations/installations.test.ts +62 -0
  112. package/src/installations/installations.ts +202 -0
  113. package/src/organization/organization.test-d.ts +36 -0
  114. package/src/organization/organization.test.ts +138 -0
  115. package/src/organization/organization.ts +138 -0
  116. package/src/organizations/organizations.test-d.ts +56 -0
  117. package/src/organizations/organizations.test.ts +150 -0
  118. package/src/organizations/organizations.ts +107 -0
  119. package/src/presence/bifurTransport.test.ts +46 -6
  120. package/src/presence/bifurTransport.ts +19 -2
  121. package/src/presence/presenceStore.test.ts +94 -23
  122. package/src/presence/presenceStore.ts +85 -29
  123. package/src/preview/getPreviewState.test.ts +137 -0
  124. package/src/preview/getPreviewState.ts +69 -0
  125. package/src/preview/previewProjectionUtils.test.ts +9 -22
  126. package/src/preview/previewProjectionUtils.ts +7 -3
  127. package/src/preview/resolvePreview.test.ts +64 -0
  128. package/src/preview/resolvePreview.ts +43 -0
  129. package/src/preview/types.ts +10 -0
  130. package/src/project/project.test-d.ts +37 -0
  131. package/src/project/project.test.ts +157 -12
  132. package/src/project/project.ts +138 -25
  133. package/src/projection/getProjectionState.test.ts +18 -20
  134. package/src/projection/getProjectionState.ts +23 -3
  135. package/src/projection/projectionQuery.ts +5 -5
  136. package/src/projection/projectionStore.test.ts +1 -1
  137. package/src/projection/resolveProjection.test.ts +1 -2
  138. package/src/projection/resolveProjection.ts +16 -0
  139. package/src/projection/subscribeToStateAndFetchBatches.test.ts +1 -1
  140. package/src/projection/subscribeToStateAndFetchBatches.ts +32 -23
  141. package/src/projection/types.ts +8 -0
  142. package/src/projects/projects.test-d.ts +32 -0
  143. package/src/projects/projects.test.ts +108 -42
  144. package/src/projects/projects.ts +63 -27
  145. package/src/query/queryStore.test.ts +259 -123
  146. package/src/query/queryStore.ts +78 -63
  147. package/src/query/reducers.test.ts +0 -42
  148. package/src/query/reducers.ts +2 -18
  149. package/src/releases/getPerspectiveState.test.ts +17 -23
  150. package/src/releases/getPerspectiveState.ts +8 -20
  151. package/src/releases/observeReleases.test.ts +127 -0
  152. package/src/releases/observeReleases.ts +102 -0
  153. package/src/releases/releasesStore.test.ts +100 -53
  154. package/src/releases/releasesStore.ts +69 -44
  155. package/src/releases/utils/sortReleases.test.ts +38 -2
  156. package/src/releases/utils/sortReleases.ts +15 -10
  157. package/src/store/createActionBinder.test.ts +87 -90
  158. package/src/store/createActionBinder.ts +79 -25
  159. package/src/store/createSanityInstance.test.ts +83 -13
  160. package/src/store/createSanityInstance.ts +77 -2
  161. package/src/store/createStateSourceAction.test.ts +64 -2
  162. package/src/store/createStateSourceAction.ts +39 -44
  163. package/src/store/createStoreInstance.test.ts +4 -2
  164. package/src/store/fetcherStore.test-d.ts +121 -0
  165. package/src/store/fetcherStore.test.ts +299 -0
  166. package/src/store/fetcherStore.ts +801 -0
  167. package/src/telemetry/environment.test.ts +119 -0
  168. package/src/telemetry/environment.ts +92 -0
  169. package/src/telemetry/events.ts +42 -0
  170. package/src/telemetry/initTelemetry.test.ts +432 -0
  171. package/src/telemetry/initTelemetry.ts +218 -0
  172. package/src/telemetry/telemetryManager.test.ts +327 -0
  173. package/src/telemetry/telemetryManager.ts +199 -0
  174. package/src/users/reducers.test.ts +6 -1
  175. package/src/users/reducers.ts +5 -6
  176. package/src/users/types.ts +4 -4
  177. package/src/users/usersStore.test.ts +16 -12
  178. package/src/users/usersStore.ts +5 -1
  179. package/src/utils/buildQuery.test.ts +14 -0
  180. package/src/utils/buildQuery.ts +17 -0
  181. package/src/utils/createFetcherStore.test.ts +7 -5
  182. package/src/utils/createFetcherStore.ts +8 -5
  183. package/src/utils/getStagingApiHost.test.ts +21 -0
  184. package/src/utils/getStagingApiHost.ts +14 -0
  185. package/src/utils/ids.test.ts +1 -29
  186. package/src/utils/ids.ts +0 -10
  187. package/src/utils/includeShape.ts +36 -0
  188. package/src/utils/isImportError.test.ts +72 -0
  189. package/src/utils/isImportError.ts +34 -0
  190. package/src/utils/logger.test.ts +12 -0
  191. package/src/utils/logger.ts +8 -3
  192. package/src/utils/object.test.ts +95 -0
  193. package/src/utils/object.ts +142 -0
  194. package/src/utils/setCleanupTimeout.ts +37 -0
  195. package/src/document/processActions.ts +0 -707
  196. package/src/utils/defineIntent.test.ts +0 -477
  197. package/src/utils/defineIntent.ts +0 -244
@@ -0,0 +1,93 @@
1
+ import "@sanity/client";
2
+ import { createBatchedStore } from "@sanity/telemetry";
3
+ import { CORE_SDK_VERSION, createLogger } from "./createGroqSearchFilter.js";
4
+ import { SDKSessionEnded, SDKError, SDKHookMounted, SDKSessionStarted } from "./_internal.js";
5
+ const FLUSH_INTERVAL_MS = 3e4, CONSENT_TAG = "telemetry-consent.sdk", BATCH_TAG = "telemetry.batch", log = createLogger("telemetry");
6
+ function createTelemetryManager(options) {
7
+ const { sessionId, getClient, projectId, environment } = options, startedAt = Date.now(), emittedHooks = /* @__PURE__ */ new Set();
8
+ let cachedConsent = null;
9
+ const resolveConsent = async () => {
10
+ if (cachedConsent) return cachedConsent;
11
+ try {
12
+ cachedConsent = await getClient().request({
13
+ uri: "/intake/telemetry-status",
14
+ tag: CONSENT_TAG
15
+ });
16
+ } catch {
17
+ cachedConsent = { status: "undetermined" };
18
+ }
19
+ return cachedConsent;
20
+ }, enrichBatch = (batch) => batch.map((event) => {
21
+ const existing = "context" in event ? event.context : void 0;
22
+ return {
23
+ ...event,
24
+ context: {
25
+ ...existing,
26
+ version: CORE_SDK_VERSION,
27
+ environment,
28
+ origin: typeof window < "u" ? window.location.origin : "node"
29
+ }
30
+ };
31
+ }), store = createBatchedStore(
32
+ sessionId,
33
+ {
34
+ flushInterval: FLUSH_INTERVAL_MS,
35
+ resolveConsent,
36
+ sendEvents: async (batch) => {
37
+ const client = getClient();
38
+ return log.debug("sending event batch", { batchSize: batch.length, environment }), client.request({
39
+ uri: "/intake/batch",
40
+ method: "POST",
41
+ body: { projectId, batch: enrichBatch(batch) },
42
+ tag: BATCH_TAG
43
+ });
44
+ }
45
+ }
46
+ ), logger = store.logger;
47
+ return {
48
+ async checkConsent() {
49
+ const { status } = await resolveConsent();
50
+ return status === "granted";
51
+ },
52
+ logSessionStarted(data) {
53
+ log.debug("event: SDK Session Started", {
54
+ projectId: data.projectId,
55
+ perspective: data.perspective,
56
+ authMethod: data.authMethod,
57
+ version: CORE_SDK_VERSION,
58
+ environment
59
+ }), logger.log(SDKSessionStarted, {
60
+ version: CORE_SDK_VERSION,
61
+ ...data
62
+ });
63
+ },
64
+ logHookFirstUsed(hookName) {
65
+ emittedHooks.has(hookName) || (emittedHooks.add(hookName), log.debug("event: SDK Hook Mounted", { hookName }), logger.log(SDKHookMounted, { hookName }));
66
+ },
67
+ logError(errorType, hookName) {
68
+ log.debug("event: SDK Error", { errorType, hookName }), logger.log(SDKError, { errorType, hookName });
69
+ },
70
+ endSession() {
71
+ const durationSeconds = Math.round((Date.now() - startedAt) / 1e3);
72
+ log.debug("event: SDK Session Ended", {
73
+ durationSeconds,
74
+ hooksUsed: [...emittedHooks],
75
+ environment
76
+ }), logger.log(SDKSessionEnded, {
77
+ durationSeconds,
78
+ hooksUsed: [...emittedHooks]
79
+ }), store.flush().catch(() => {
80
+ }), store.end();
81
+ },
82
+ dispose() {
83
+ store.end();
84
+ },
85
+ get hooksUsed() {
86
+ return emittedHooks;
87
+ }
88
+ };
89
+ }
90
+ export {
91
+ createTelemetryManager
92
+ };
93
+ //# sourceMappingURL=telemetryManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetryManager.js","sources":["../../src/telemetry/telemetryManager.ts"],"sourcesContent":["import {type SanityClient} from '@sanity/client'\nimport {\n type ConsentStatus,\n createBatchedStore,\n type SessionId,\n type TelemetryEvent,\n type TelemetryLogger,\n type TelemetryStore,\n} from '@sanity/telemetry'\n\nimport {createLogger} from '../utils/logger'\nimport {CORE_SDK_VERSION} from '../version'\nimport {type TelemetryEnvironment} from './environment'\nimport {SDKError, SDKHookMounted, SDKSessionEnded, SDKSessionStarted} from './events'\n\nconst FLUSH_INTERVAL_MS = 30_000\nconst CONSENT_TAG = 'telemetry-consent.sdk'\nconst BATCH_TAG = 'telemetry.batch'\n\nconst log = createLogger('telemetry')\n\n/**\n * Manages telemetry for a single SDK instance.\n *\n * Wraps `@sanity/telemetry`'s batched store with SDK-specific concerns:\n * consent caching, session lifecycle events, and hook usage tracking.\n * The `environment` is captured at construction time and recorded in\n * the event context so downstream pipelines can distinguish dev and\n * production sessions.\n *\n * @internal\n */\nexport interface TelemetryManager {\n /**\n * Eagerly resolve and cache the user's consent status.\n * Returns true only when the user has explicitly opted in (`granted`).\n * Call this before logging any events to avoid buffering events that\n * will be dropped on the first flush.\n */\n checkConsent(): Promise<boolean>\n\n /** Log a \"SDK Session Started\" event */\n logSessionStarted(data: {projectId: string; perspective: string; authMethod: string}): void\n\n /** Log a \"SDK Hook Mounted\" event (deduplicated per hook name) */\n logHookFirstUsed(hookName: string): void\n\n /** Log a \"SDK Error\" event */\n logError(errorType: string, hookName: string): void\n\n /** Log a \"SDK Session Ended\" event and tear down the store */\n endSession(): void\n\n /** Tear down the store without logging a session-end event */\n dispose(): void\n\n /** The set of hook names used during this session */\n readonly hooksUsed: ReadonlySet<string>\n}\n\ninterface TelemetryManagerOptions {\n sessionId: string\n getClient: () => SanityClient\n projectId: string\n environment: TelemetryEnvironment\n}\n\n/**\n * Creates a telemetry manager for a single SDK instance session.\n *\n * The manager initializes a `createBatchedStore` from `@sanity/telemetry`,\n * caches the consent check for the lifetime of the session, and provides\n * typed methods for each SDK telemetry event.\n *\n * @internal\n */\nexport function createTelemetryManager(options: TelemetryManagerOptions): TelemetryManager {\n const {sessionId, getClient, projectId, environment} = options\n const startedAt = Date.now()\n const emittedHooks = new Set<string>()\n\n let cachedConsent: {status: ConsentStatus} | null = null\n\n const resolveConsent = async (): Promise<{status: ConsentStatus}> => {\n if (cachedConsent) return cachedConsent\n try {\n const client = getClient()\n const result = await client.request<{status: ConsentStatus}>({\n uri: '/intake/telemetry-status',\n tag: CONSENT_TAG,\n })\n cachedConsent = result\n } catch {\n cachedConsent = {status: 'undetermined'}\n }\n return cachedConsent\n }\n\n const enrichBatch = (batch: TelemetryEvent[]) =>\n batch.map((event) => {\n // Trace events (`trace.start` / `trace.log` / `trace.error` /\n // `trace.complete`) arrive with their own caller-provided `context`.\n // Log / userProperties events don't. Narrow via `in` so `event`\n // stays typed as `TelemetryEvent`, then merge so we don't drop the\n // trace context. SDK-owned fields below win on conflict.\n const existing =\n 'context' in event ? (event.context as Record<string, unknown> | undefined) : undefined\n return {\n ...event,\n context: {\n ...existing,\n version: CORE_SDK_VERSION,\n environment,\n origin: typeof window !== 'undefined' ? window.location.origin : 'node',\n },\n }\n })\n\n const sendEvents = async (batch: TelemetryEvent[]): Promise<unknown> => {\n const client = getClient()\n log.debug('sending event batch', {batchSize: batch.length, environment})\n return client.request({\n uri: '/intake/batch',\n method: 'POST',\n body: {projectId, batch: enrichBatch(batch)},\n tag: BATCH_TAG,\n })\n }\n\n const store: TelemetryStore<Record<string, unknown>> = createBatchedStore(\n sessionId as SessionId,\n {\n flushInterval: FLUSH_INTERVAL_MS,\n resolveConsent,\n sendEvents,\n },\n )\n\n const logger: TelemetryLogger<Record<string, unknown>> = store.logger\n\n return {\n async checkConsent() {\n const {status} = await resolveConsent()\n return status === 'granted'\n },\n\n logSessionStarted(data) {\n log.debug('event: SDK Session Started', {\n projectId: data.projectId,\n perspective: data.perspective,\n authMethod: data.authMethod,\n version: CORE_SDK_VERSION,\n environment,\n })\n logger.log(SDKSessionStarted, {\n version: CORE_SDK_VERSION,\n ...data,\n })\n },\n\n logHookFirstUsed(hookName: string) {\n if (emittedHooks.has(hookName)) return\n emittedHooks.add(hookName)\n log.debug('event: SDK Hook Mounted', {hookName})\n logger.log(SDKHookMounted, {hookName})\n },\n\n logError(errorType: string, hookName: string) {\n log.debug('event: SDK Error', {errorType, hookName})\n logger.log(SDKError, {errorType, hookName})\n },\n\n endSession() {\n const durationSeconds = Math.round((Date.now() - startedAt) / 1000)\n log.debug('event: SDK Session Ended', {\n durationSeconds,\n hooksUsed: [...emittedHooks],\n environment,\n })\n logger.log(SDKSessionEnded, {\n durationSeconds,\n hooksUsed: [...emittedHooks],\n })\n\n store.flush().catch(() => {\n // Best-effort flush on dispose; swallow errors\n })\n store.end()\n },\n\n dispose() {\n store.end()\n },\n\n get hooksUsed(): ReadonlySet<string> {\n return emittedHooks\n },\n }\n}\n"],"names":[],"mappings":";;;;AAeA,MAAM,oBAAoB,KACpB,cAAc,yBACd,YAAY,mBAEZ,MAAM,aAAa,WAAW;AAyD7B,SAAS,uBAAuB,SAAoD;AACzF,QAAM,EAAC,WAAW,WAAW,WAAW,YAAA,IAAe,SACjD,YAAY,KAAK,IAAA,GACjB,mCAAmB,IAAA;AAEzB,MAAI,gBAAgD;AAEpD,QAAM,iBAAiB,YAA8C;AACnE,QAAI,cAAe,QAAO;AAC1B,QAAI;AAMF,sBAJe,MADA,UAAA,EACa,QAAiC;AAAA,QAC3D,KAAK;AAAA,QACL,KAAK;AAAA,MAAA,CACN;AAAA,IAEH,QAAQ;AACN,sBAAgB,EAAC,QAAQ,eAAA;AAAA,IAC3B;AACA,WAAO;AAAA,EACT,GAEM,cAAc,CAAC,UACnB,MAAM,IAAI,CAAC,UAAU;AAMnB,UAAM,WACJ,aAAa,QAAS,MAAM,UAAkD;AAChF,WAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,QACP,GAAG;AAAA,QACH,SAAS;AAAA,QACT;AAAA,QACA,QAAQ,OAAO,SAAW,MAAc,OAAO,SAAS,SAAS;AAAA,MAAA;AAAA,IACnE;AAAA,EAEJ,CAAC,GAaG,QAAiD;AAAA,IACrD;AAAA,IACA;AAAA,MACE,eAAe;AAAA,MACf;AAAA,MACA,YAhBe,OAAO,UAA8C;AACtE,cAAM,SAAS,UAAA;AACf,eAAA,IAAI,MAAM,uBAAuB,EAAC,WAAW,MAAM,QAAQ,YAAA,CAAY,GAChE,OAAO,QAAQ;AAAA,UACpB,KAAK;AAAA,UACL,QAAQ;AAAA,UACR,MAAM,EAAC,WAAW,OAAO,YAAY,KAAK,EAAA;AAAA,UAC1C,KAAK;AAAA,QAAA,CACN;AAAA,MACH;AAAA,IAAA;AAAA,EAQE,GAGI,SAAmD,MAAM;AAE/D,SAAO;AAAA,IACL,MAAM,eAAe;AACnB,YAAM,EAAC,WAAU,MAAM,eAAA;AACvB,aAAO,WAAW;AAAA,IACpB;AAAA,IAEA,kBAAkB,MAAM;AACtB,UAAI,MAAM,8BAA8B;AAAA,QACtC,WAAW,KAAK;AAAA,QAChB,aAAa,KAAK;AAAA,QAClB,YAAY,KAAK;AAAA,QACjB,SAAS;AAAA,QACT;AAAA,MAAA,CACD,GACD,OAAO,IAAI,mBAAmB;AAAA,QAC5B,SAAS;AAAA,QACT,GAAG;AAAA,MAAA,CACJ;AAAA,IACH;AAAA,IAEA,iBAAiB,UAAkB;AAC7B,mBAAa,IAAI,QAAQ,MAC7B,aAAa,IAAI,QAAQ,GACzB,IAAI,MAAM,2BAA2B,EAAC,SAAA,CAAS,GAC/C,OAAO,IAAI,gBAAgB,EAAC,UAAS;AAAA,IACvC;AAAA,IAEA,SAAS,WAAmB,UAAkB;AAC5C,UAAI,MAAM,oBAAoB,EAAC,WAAW,SAAA,CAAS,GACnD,OAAO,IAAI,UAAU,EAAC,WAAW,UAAS;AAAA,IAC5C;AAAA,IAEA,aAAa;AACX,YAAM,kBAAkB,KAAK,OAAO,KAAK,IAAA,IAAQ,aAAa,GAAI;AAClE,UAAI,MAAM,4BAA4B;AAAA,QACpC;AAAA,QACA,WAAW,CAAC,GAAG,YAAY;AAAA,QAC3B;AAAA,MAAA,CACD,GACD,OAAO,IAAI,iBAAiB;AAAA,QAC1B;AAAA,QACA,WAAW,CAAC,GAAG,YAAY;AAAA,MAAA,CAC5B,GAED,MAAM,MAAA,EAAQ,MAAM,MAAM;AAAA,MAE1B,CAAC,GACD,MAAM,IAAA;AAAA,IACR;AAAA,IAEA,UAAU;AACR,YAAM,IAAA;AAAA,IACR;AAAA,IAEA,IAAI,YAAiC;AACnC,aAAO;AAAA,IACT;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,95 @@
1
+ import { A as transformProjectionToPreview, B as getClientErrorApiBody, E as parseQueryKey, H as getClientErrorApiType, R as PREVIEW_PROJECTION, S as defineMutation, U as isProjectUserNotFoundClientError, V as getClientErrorApiDescription, _ as FetcherDefinition, b as MutationResult, ct as isStudioConfig, g as Fetcher, h as CacheWriter, m as CacheTag, n as getUsersKey, ot as SanityInstance, r as parseUsersKey, t as createGroqSearchFilter, v as FetcherSnapshot, w as getQueryKey, x as defineFetcher, y as MutationDefinition, z as ApiErrorBody } from "../_chunks-dts/createGroqSearchFilter.js";
2
+ import { SanityClient } from "@sanity/client";
3
+ /**
4
+ * Manages telemetry for a single SDK instance.
5
+ *
6
+ * Wraps `@sanity/telemetry`'s batched store with SDK-specific concerns:
7
+ * consent caching, session lifecycle events, and hook usage tracking.
8
+ * The `environment` is captured at construction time and recorded in
9
+ * the event context so downstream pipelines can distinguish dev and
10
+ * production sessions.
11
+ *
12
+ * @internal
13
+ */
14
+ interface TelemetryManager {
15
+ /**
16
+ * Eagerly resolve and cache the user's consent status.
17
+ * Returns true only when the user has explicitly opted in (`granted`).
18
+ * Call this before logging any events to avoid buffering events that
19
+ * will be dropped on the first flush.
20
+ */
21
+ checkConsent(): Promise<boolean>;
22
+ /** Log a "SDK Session Started" event */
23
+ logSessionStarted(data: {
24
+ projectId: string;
25
+ perspective: string;
26
+ authMethod: string;
27
+ }): void;
28
+ /** Log a "SDK Hook Mounted" event (deduplicated per hook name) */
29
+ logHookFirstUsed(hookName: string): void;
30
+ /** Log a "SDK Error" event */
31
+ logError(errorType: string, hookName: string): void;
32
+ /** Log a "SDK Session Ended" event and tear down the store */
33
+ endSession(): void;
34
+ /** Tear down the store without logging a session-end event */
35
+ dispose(): void;
36
+ /** The set of hook names used during this session */
37
+ readonly hooksUsed: ReadonlySet<string>;
38
+ }
39
+ /**
40
+ * Initializes telemetry for a SDK instance if the runtime environment
41
+ * qualifies. The environment is resolved by `getTelemetryEnvironment()`:
42
+ *
43
+ * - `'development'` — local dev servers (`localhost` / `127.0.0.1`, or
44
+ * Node with `NODE_ENV=development`). This is the original opt-in
45
+ * surface.
46
+ * - `'production'` — apps deployed to Sanity-controlled domains
47
+ * (e.g. `*.sanity.studio`, the dashboard). End users are
48
+ * authenticated Sanity users with Populus consent records, so we
49
+ * apply the same consent gate as the Studio's `telemetry-sink`.
50
+ *
51
+ * Apps on customer-controlled domains return `null` and skip telemetry
52
+ * entirely.
53
+ *
54
+ * `telemetryManager` and `clientStore` are dynamically imported so the
55
+ * telemetry code path stays out of production bundles for apps that
56
+ * don't qualify. Only the lightweight environment check runs at boot.
57
+ *
58
+ * The `projectId` must be passed explicitly because the resource
59
+ * configuration is typically set by the React layer after the
60
+ * instance has already been created.
61
+ *
62
+ * @internal
63
+ */
64
+ declare function initTelemetry(instance: SanityInstance, projectId: string): void;
65
+ /**
66
+ * Retrieves the telemetry manager for an instance, if one exists.
67
+ * Returns undefined when telemetry is disabled or not yet initialized.
68
+ *
69
+ * @internal
70
+ */
71
+ declare function getTelemetryManager(instance: SanityInstance): TelemetryManager | undefined;
72
+ /**
73
+ * Record a hook name for an instance. If the telemetry manager is
74
+ * already initialized the event is logged immediately. Otherwise
75
+ * the name is buffered and flushed when init completes.
76
+ *
77
+ * @internal
78
+ */
79
+ declare function trackHookMounted(instance: SanityInstance, hookName: string): void;
80
+ /**
81
+ * Creates a shallow copy containing only the provided properties.
82
+ *
83
+ * @internal
84
+ */
85
+ declare function pickProperties<T extends object, K extends keyof T>(value: T, keys: readonly K[]): Pick<T, K>;
86
+ /**
87
+ * Compares values deeply across the plain object, array, map, and set shapes used by the SDK.
88
+ * This helper is intended for acyclic SDK data structures and does not guard against circular
89
+ * references.
90
+ *
91
+ * @internal
92
+ */
93
+ declare function isDeepEqual<T>(left: T, right: T): boolean;
94
+ export { type ApiErrorBody, type CacheTag, type CacheWriter, type Fetcher, type FetcherDefinition, type FetcherSnapshot, type MutationDefinition, type MutationResult, PREVIEW_PROJECTION, createGroqSearchFilter, defineFetcher, defineMutation, getClientErrorApiBody, getClientErrorApiDescription, getClientErrorApiType, getQueryKey, getTelemetryManager, getUsersKey, initTelemetry, isDeepEqual, isProjectUserNotFoundClientError, isStudioConfig, parseQueryKey, parseUsersKey, pickProperties, trackHookMounted, transformProjectionToPreview };
95
+ //# sourceMappingURL=_internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_internal.d.ts","names":[],"sources":["../../src/telemetry/telemetryManager.ts","../../src/telemetry/initTelemetry.ts","../../src/utils/object.ts"],"mappings":";;;;;;;;;;;;;UAgCiB;;;;;;;EAOf,gBAAgB;;EAGhB,kBAAkB;IAAO;IAAmB;IAAqB;;;EAGjE,iBAAiB;;EAGjB,SAAS,mBAAmB;;EAG5B;;EAGA;;WAGS,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCXN,cAAc,UAAU,gBAAgB;;;;;;;iBAoIxC,oBAAoB,UAAU,iBAAiB;;;;;;;;iBAW/C,iBAAiB,UAAU,gBAAgB;;;;;;iBCvJ3C,eAAe,kBAAkB,gBAAgB,GAC/D,OAAO,GACP,eAAe,MACd,KAAK,GAAG;;;;;;;;iBA2DK,YAAY,GAAG,MAAM,GAAG,OAAO"}
@@ -0,0 +1,24 @@
1
+ import { PREVIEW_PROJECTION, createGroqSearchFilter, defineFetcher, defineMutation, getClientErrorApiBody, getClientErrorApiDescription, getClientErrorApiType, getQueryKey, getUsersKey, isDeepEqual, isProjectUserNotFoundClientError, isStudioConfig, parseQueryKey, parseUsersKey, pickProperties, transformProjectionToPreview } from "../_chunks-es/createGroqSearchFilter.js";
2
+ import { getTelemetryManager, initTelemetry, trackHookMounted } from "../_chunks-es/_internal.js";
3
+ export {
4
+ PREVIEW_PROJECTION,
5
+ createGroqSearchFilter,
6
+ defineFetcher,
7
+ defineMutation,
8
+ getClientErrorApiBody,
9
+ getClientErrorApiDescription,
10
+ getClientErrorApiType,
11
+ getQueryKey,
12
+ getTelemetryManager,
13
+ getUsersKey,
14
+ initTelemetry,
15
+ isDeepEqual,
16
+ isProjectUserNotFoundClientError,
17
+ isStudioConfig,
18
+ parseQueryKey,
19
+ parseUsersKey,
20
+ pickProperties,
21
+ trackHookMounted,
22
+ transformProjectionToPreview
23
+ };
24
+ //# sourceMappingURL=_internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_internal.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}