@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.
- package/dist/_chunks-dts/createGroqSearchFilter.d.ts +1147 -0
- package/dist/_chunks-dts/createGroqSearchFilter.d.ts.map +1 -0
- package/dist/_chunks-es/_internal.js +134 -0
- package/dist/_chunks-es/_internal.js.map +1 -0
- package/dist/_chunks-es/createGroqSearchFilter.js +1864 -0
- package/dist/_chunks-es/createGroqSearchFilter.js.map +1 -0
- package/dist/_chunks-es/telemetryManager.js +93 -0
- package/dist/_chunks-es/telemetryManager.js.map +1 -0
- package/dist/_exports/_internal.d.ts +95 -0
- package/dist/_exports/_internal.d.ts.map +1 -0
- package/dist/_exports/_internal.js +24 -0
- package/dist/_exports/_internal.js.map +1 -0
- package/dist/index.d.ts +1079 -1076
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1967 -2302
- package/dist/index.js.map +1 -1
- package/package.json +48 -47
- package/src/_exports/_internal.ts +26 -0
- package/src/_exports/index.ts +120 -11
- package/src/access/checkPermissions.test.ts +55 -0
- package/src/access/checkPermissions.ts +54 -0
- package/src/agent/agentActions.test.ts +16 -60
- package/src/agent/agentActions.ts +25 -38
- package/src/applications/applications.test-d.ts +83 -0
- package/src/applications/applications.test.ts +130 -0
- package/src/applications/applications.ts +364 -0
- package/src/applications/userApplications.test.ts +126 -0
- package/src/applications/userApplications.ts +261 -0
- package/src/auth/authLogger.ts +30 -0
- package/src/auth/authMode.test.ts +25 -0
- package/src/auth/authMode.ts +6 -3
- package/src/auth/authStore.test.ts +194 -13
- package/src/auth/authStore.ts +59 -26
- package/src/auth/getOrganizationVerificationState.test.ts +18 -17
- package/src/auth/getOrganizationVerificationState.ts +4 -4
- package/src/auth/handleAuthCallback.test.ts +35 -1
- package/src/auth/handleAuthCallback.ts +25 -6
- package/src/auth/logout.test.ts +75 -2
- package/src/auth/logout.ts +23 -4
- package/src/auth/refreshStampedToken.test.ts +219 -469
- package/src/auth/refreshStampedToken.ts +79 -195
- package/src/auth/studioAuth.ts +1 -1
- package/src/auth/studioModeAuth.ts +2 -1
- package/src/auth/subscribeToStateAndFetchCurrentUser.test.ts +146 -13
- package/src/auth/subscribeToStateAndFetchCurrentUser.ts +37 -6
- package/src/auth/subscribeToStorageEventsAndSetToken.test.ts +2 -0
- package/src/client/clientStore.test.ts +62 -37
- package/src/client/clientStore.ts +45 -75
- package/src/client/liveEvents.test.ts +151 -0
- package/src/client/liveEvents.ts +107 -0
- package/src/comlink/controller/actions/destroyController.test.ts +4 -1
- package/src/comlink/controller/actions/getOrCreateChannel.test.ts +4 -1
- package/src/comlink/controller/actions/getOrCreateChannel.ts +2 -2
- package/src/comlink/controller/actions/getOrCreateController.test.ts +4 -1
- package/src/comlink/controller/actions/releaseChannel.test.ts +1 -1
- package/src/comlink/controller/comlinkControllerStore.test.ts +4 -1
- package/src/comlink/node/actions/getOrCreateNode.test.ts +9 -3
- package/src/comlink/node/actions/getOrCreateNode.ts +2 -2
- package/src/comlink/node/actions/releaseNode.test.ts +7 -4
- package/src/comlink/node/comlinkNodeStore.test.ts +2 -2
- package/src/comlink/node/getNodeState.test.ts +1 -1
- package/src/comlink/node/getNodeState.ts +2 -1
- package/src/config/__tests__/handles.test.ts +18 -12
- package/src/config/handles.ts +25 -7
- package/src/config/sanityConfig.ts +109 -79
- package/src/datasets/datasets.test.ts +2 -2
- package/src/datasets/datasets.ts +10 -4
- package/src/document/actions.test.ts +115 -33
- package/src/document/actions.ts +212 -15
- package/src/document/applyDocumentActions.test.ts +38 -12
- package/src/document/applyDocumentActions.ts +30 -9
- package/src/document/documentConstants.ts +7 -0
- package/src/document/documentStore.concurrency.test.ts +1306 -0
- package/src/document/documentStore.test.ts +673 -278
- package/src/document/documentStore.ts +162 -71
- package/src/document/events.test.ts +57 -2
- package/src/document/events.ts +82 -26
- package/src/document/listen.test.ts +56 -0
- package/src/document/listen.ts +74 -21
- package/src/document/listenerEventOperators.test.ts +311 -0
- package/src/document/listenerEventOperators.ts +217 -0
- package/src/document/patchOperations.test.ts +49 -2
- package/src/document/patchOperations.ts +50 -0
- package/src/document/permissions.test.ts +105 -60
- package/src/document/permissions.ts +44 -19
- package/src/document/processActions/create.ts +138 -0
- package/src/document/processActions/delete.ts +100 -0
- package/src/document/processActions/discard.ts +63 -0
- package/src/document/processActions/edit.ts +154 -0
- package/src/document/processActions/processActions.ts +218 -0
- package/src/document/processActions/publish.ts +120 -0
- package/src/document/processActions/releaseArchive.ts +77 -0
- package/src/document/processActions/releaseCreate.ts +59 -0
- package/src/document/processActions/releaseDelete.ts +65 -0
- package/src/document/processActions/releaseEdit.ts +37 -0
- package/src/document/processActions/releasePublish.ts +45 -0
- package/src/document/processActions/releaseSchedule.ts +87 -0
- package/src/document/processActions/releaseUtil.ts +31 -0
- package/src/document/processActions/shared.ts +308 -0
- package/src/document/processActions/unpublish.ts +85 -0
- package/src/document/processActions.test.ts +1129 -121
- package/src/document/reducers.test.ts +639 -64
- package/src/document/reducers.ts +187 -48
- package/src/document/resourceRules.test.ts +178 -0
- package/src/document/resourceRules.ts +117 -0
- package/src/document/sharedListener.test.ts +16 -14
- package/src/document/sharedListener.ts +24 -8
- package/src/document/util.ts +14 -0
- package/src/favorites/favorites.test.ts +5 -6
- package/src/installations/installations.test-d.ts +68 -0
- package/src/installations/installations.test.ts +62 -0
- package/src/installations/installations.ts +202 -0
- package/src/organization/organization.test-d.ts +36 -0
- package/src/organization/organization.test.ts +138 -0
- package/src/organization/organization.ts +138 -0
- package/src/organizations/organizations.test-d.ts +56 -0
- package/src/organizations/organizations.test.ts +150 -0
- package/src/organizations/organizations.ts +107 -0
- package/src/presence/bifurTransport.test.ts +46 -6
- package/src/presence/bifurTransport.ts +19 -2
- package/src/presence/presenceStore.test.ts +94 -23
- package/src/presence/presenceStore.ts +85 -29
- package/src/preview/getPreviewState.test.ts +137 -0
- package/src/preview/getPreviewState.ts +69 -0
- package/src/preview/previewProjectionUtils.test.ts +9 -22
- package/src/preview/previewProjectionUtils.ts +7 -3
- package/src/preview/resolvePreview.test.ts +64 -0
- package/src/preview/resolvePreview.ts +43 -0
- package/src/preview/types.ts +10 -0
- package/src/project/project.test-d.ts +37 -0
- package/src/project/project.test.ts +157 -12
- package/src/project/project.ts +138 -25
- package/src/projection/getProjectionState.test.ts +18 -20
- package/src/projection/getProjectionState.ts +23 -3
- package/src/projection/projectionQuery.ts +5 -5
- package/src/projection/projectionStore.test.ts +1 -1
- package/src/projection/resolveProjection.test.ts +1 -2
- package/src/projection/resolveProjection.ts +16 -0
- package/src/projection/subscribeToStateAndFetchBatches.test.ts +1 -1
- package/src/projection/subscribeToStateAndFetchBatches.ts +32 -23
- package/src/projection/types.ts +8 -0
- package/src/projects/projects.test-d.ts +32 -0
- package/src/projects/projects.test.ts +108 -42
- package/src/projects/projects.ts +63 -27
- package/src/query/queryStore.test.ts +259 -123
- package/src/query/queryStore.ts +78 -63
- package/src/query/reducers.test.ts +0 -42
- package/src/query/reducers.ts +2 -18
- package/src/releases/getPerspectiveState.test.ts +17 -23
- package/src/releases/getPerspectiveState.ts +8 -20
- package/src/releases/observeReleases.test.ts +127 -0
- package/src/releases/observeReleases.ts +102 -0
- package/src/releases/releasesStore.test.ts +100 -53
- package/src/releases/releasesStore.ts +69 -44
- package/src/releases/utils/sortReleases.test.ts +38 -2
- package/src/releases/utils/sortReleases.ts +15 -10
- package/src/store/createActionBinder.test.ts +87 -90
- package/src/store/createActionBinder.ts +79 -25
- package/src/store/createSanityInstance.test.ts +83 -13
- package/src/store/createSanityInstance.ts +77 -2
- package/src/store/createStateSourceAction.test.ts +64 -2
- package/src/store/createStateSourceAction.ts +39 -44
- package/src/store/createStoreInstance.test.ts +4 -2
- package/src/store/fetcherStore.test-d.ts +121 -0
- package/src/store/fetcherStore.test.ts +299 -0
- package/src/store/fetcherStore.ts +801 -0
- package/src/telemetry/environment.test.ts +119 -0
- package/src/telemetry/environment.ts +92 -0
- package/src/telemetry/events.ts +42 -0
- package/src/telemetry/initTelemetry.test.ts +432 -0
- package/src/telemetry/initTelemetry.ts +218 -0
- package/src/telemetry/telemetryManager.test.ts +327 -0
- package/src/telemetry/telemetryManager.ts +199 -0
- package/src/users/reducers.test.ts +6 -1
- package/src/users/reducers.ts +5 -6
- package/src/users/types.ts +4 -4
- package/src/users/usersStore.test.ts +16 -12
- package/src/users/usersStore.ts +5 -1
- package/src/utils/buildQuery.test.ts +14 -0
- package/src/utils/buildQuery.ts +17 -0
- package/src/utils/createFetcherStore.test.ts +7 -5
- package/src/utils/createFetcherStore.ts +8 -5
- package/src/utils/getStagingApiHost.test.ts +21 -0
- package/src/utils/getStagingApiHost.ts +14 -0
- package/src/utils/ids.test.ts +1 -29
- package/src/utils/ids.ts +0 -10
- package/src/utils/includeShape.ts +36 -0
- package/src/utils/isImportError.test.ts +72 -0
- package/src/utils/isImportError.ts +34 -0
- package/src/utils/logger.test.ts +12 -0
- package/src/utils/logger.ts +8 -3
- package/src/utils/object.test.ts +95 -0
- package/src/utils/object.ts +142 -0
- package/src/utils/setCleanupTimeout.ts +37 -0
- package/src/document/processActions.ts +0 -707
- package/src/utils/defineIntent.test.ts +0 -477
- 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":";;"}
|