sanity
Version:
Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches
1,512 lines (1,474 loc) • 109 kB
text/typescript
import {ActionFunction} from 'xstate'
import {ActorRef} from 'xstate'
import {ActorRefFrom} from 'xstate'
import {ActorRefFromLogic} from 'xstate'
import {AnyActorLogic} from 'xstate'
import {AnyActorRef} from 'xstate'
import {AnyEventObject} from 'xstate'
import {ClientPerspective} from '@sanity/client'
import {ComponentType} from 'react'
import {ConditionalRequired} from 'xstate'
import {DocumentStore} from 'sanity'
import {DocumentValuePermission} from 'sanity'
import {DoneActorEvent} from 'xstate'
import {ErrorActorEvent} from 'xstate'
import {EventObject} from 'xstate'
import {GetConcreteByKey} from 'xstate'
import {InputFrom} from 'xstate'
import {IsNotNever} from 'xstate'
import {MachineSnapshot} from 'xstate'
import {MetaObject} from 'xstate'
import {NonReducibleUnknown} from 'xstate'
import {Observable} from 'rxjs'
import {ObservableActorLogic} from 'xstate'
import {ObservableSnapshot} from 'xstate'
import {PermissionCheckResult} from 'sanity'
import {Plugin as Plugin_2} from 'sanity'
import {PreviewUrlResolver} from '@sanity/preview-url-secret/define-preview-url'
import {PromiseActorLogic} from 'xstate'
import {RefObject} from 'react'
import {RequiredActorOptions} from 'xstate'
import {RequiredLogicInput} from 'xstate'
import {SanityClient} from 'sanity'
import {SanityDocument} from '@sanity/types'
import {Serializable} from '@sanity/presentation-comlink'
import {SerializableArray} from '@sanity/presentation-comlink'
import {SerializableObject} from '@sanity/presentation-comlink'
import {SerializablePrimitive} from '@sanity/presentation-comlink'
import {SnapshotEvent} from 'xstate'
import {StackablePerspective} from '@sanity/client'
import {StateMachine} from 'xstate'
import {StateValue} from 'xstate'
import {Values} from 'xstate'
declare interface CheckPermissionInput {
checkPermissionName: DocumentValuePermission
document: Partial<SanityDocument> | null
}
/**
* All possible URL search parameters used by the Presentation tool
* @public
*/
export declare interface CombinedSearchParams
extends StructureDocumentPaneParams,
PresentationSearchParams {}
/** @public */
export declare type ConnectionStatus = 'connected' | 'connecting' | 'reconnecting' | 'idle'
declare interface Context {
url: URL | null
error: Error | null
visualEditingOverlaysEnabled: boolean
}
declare interface Context_2 {
initialUrl: URL | null
previewUrl: URL | null
allowOrigins: URLPattern[] | null
error: Error | null
previewSearchParam: string | null
previewUrlSecret: {
secret: string
expiresAt: Date
} | null
previewAccessSharingCreatePermission: PermissionCheckResult | null
previewAccessSharingReadPermission: PermissionCheckResult | null
previewAccessSharingUpdatePermission: PermissionCheckResult | null
previewUrlSecretPermission: PermissionCheckResult | null
previewMode: PreviewUrlPreviewMode | null
}
/**
* @public
*/
export declare type ContextFn<T> = (context: DocumentResolverContext) => T
/**
* Define documents for a given location.
* This function doesn't do anything itself, it is used to provide type information.
* @param resolvers - resolvers that return documents.
* @public
*/
export declare function defineDocuments(resolvers: DocumentResolver[]): typeof resolvers
/**
* Define locations for a given document type.
* This function doesn't do anything itself, it is used to provide type information.
* @param resolver - resolver that return locations for a document.
* @public
*/
export declare function defineLocations<K extends string>(
resolver: DocumentLocationResolverObject<K> | DocumentLocationsState,
): typeof resolver
/**
* @deprecated the `previewUrl.initial`, `previewUrl.allowOrigins` and `previewUrl.previewMode.enable` supports async functions that offer advanced control over how preview URLs are resolved
* @public
*/
declare type DeprecatedPreviewUrlResolver = PreviewUrlResolver<SanityClient>
/**
* Represents a document location
* @param title - Title of the document
* @param href - URL of the document location
* @public
*/
export declare interface DocumentLocation {
title: string
href: string
}
/**
* Function used for advanced document location resolution
* @param params - Object with document `id` and document `type` properties
* @param context - Object with `documentStore` property for creating listenQuery subscriptions
* @returns Document location state, optionally as an Observable, or null/undefined if no locations are available
* @public
*/
export declare type DocumentLocationResolver = (
params: {
id: string
type: string
version: string | undefined
perspectiveStack: StackablePerspective[]
},
context: {
documentStore: DocumentStore
},
) =>
| DocumentLocationsState
| null
| undefined
| Observable<DocumentLocationsState | null | undefined>
/**
* Document location resolver object
* @param select - object for selecting document fields
* @param resolve - function that accepts a document with the selected fields and returns an optional document location state
* @public
*/
export declare type DocumentLocationResolverObject<K extends string = string> = {
select: Record<K, string>
resolve: (value: Record<K, any> | null) => DocumentLocationsState | null | undefined | void
}
/**
* Object of document location resolver definitions per document type
* @public
*/
export declare type DocumentLocationResolvers = Record<
string,
DocumentLocationResolverObject | DocumentLocationsState
>
/**
* State for describing document locations or providing a message if no document
* locations are unavailable
* @param locations - Array of document locations
* @param message - Message to display if locations are unavailable
* @param tone - Tone of the message
* @public
*/
export declare interface DocumentLocationsState {
locations?: DocumentLocation[]
message?: string
tone?: 'positive' | 'caution' | 'critical'
}
/**
* Object for resolving a document for a given route pattern
* @public
*/
export declare type DocumentResolver =
| {
route: string | Array<string>
type: string
filter?: never
params?: never
resolve?: never
}
| {
route: string | Array<string>
type?: never
filter: ContextFn<string> | string
params?: ContextFn<Record<string, string>> | Record<string, string>
resolve?: never
}
| {
route: string | Array<string>
type?: never
filter?: never
params?: never
resolve: ContextFn<
| {
filter: string
params?: Record<string, string>
}
| undefined
>
}
/**
* @public
*/
export declare interface DocumentResolverContext {
origin: string | undefined
params: Record<string, string>
path: string
}
/** @public */
export declare interface HeaderOptions {
component: ComponentType<PreviewHeaderProps>
}
declare type Input = Omit<SetPreviewSearchParamEvent, 'type'>
/**
* parameters for the changes inspector
* @public
*/
export declare interface InspectorTab {
changesInspectorTab?: 'history' | 'review'
}
/** @public */
export declare interface NavigatorOptions {
minWidth?: number
maxWidth?: number
component: ComponentType
}
declare const presentationMachine: StateMachine<
Context,
| {
type: 'toggle visual editing overlays'
enabled: boolean
}
| {
type: 'iframe loaded'
}
| {
type: 'iframe refresh'
}
| {
type: 'iframe reload'
},
{},
never,
never,
never,
never,
| 'error'
| 'loading'
| {
loaded: 'idle' | 'refreshing' | 'reloading'
},
'error' | 'busy',
NonReducibleUnknown,
NonReducibleUnknown,
EventObject,
MetaObject,
{
/** @xstate-layout N4IgpgJg5mDOIC5QAUBOcwDsAuBDbAlgPaYAEAKkUQDYDEBAZqrgLZinrVG4QDaADAF1EoAA5FYBQiREgAHogAsAJgA0IAJ6IAHAEYAdIoCcJowFY9R-vzPLlAX3vq0GHPmJlKNfVx4FMUPRMrOy+EJACwkgg4pLSmLIKCLoAbIr6Zoop2tqKAMxpJnnF6loIZkbK+uZ5umapKXmK-Cm6js7osFh48RRU1D7c4RC02ERQUNTsAG4EsACuuNSkkFL+UKRE02Co1LgasJGysWsy0UnaZinVyrpGAOx1Rim2efeliPe3hma1Zvy6XT8W4OJwgFxdNy9LwDMKQILMNgcMBMOAACyO0RO8USiAK930LWU-3uiiB9yaKXemkQjW01V+txS-GKqUe7XBnW67hIfW8cJGjER7E4Q0xYgkpwS5zxVMJKWJ-FJ5Mp1LKFn4Pz+DSaLTaYIh3Oh-UGPEg+nQqNgaPWCJCpAF4pikpxMoQKWZ+gp+TSZLy1hSH3deXpNSZLNqVP1HVcPQ8fNhQ3Nor8ATtSMdQmOLo8uPdnu9BUUfoDQY1WrqOuarUcYMwRHC8Gihqh8Zh2biubdAFpAzSEL2OS247yYfodqgiKgO1K8yog7ptATFL9dFljMDrHkh1zW6OTWF1jPXaAkmY1YgKnktfxtC9dPd+Io9DvYzzPAekxBj13T3i7vKirKkqqpBsYVQ1HUFjFs0t6KK+kIjh+-JfvoBAQFMP5nH+CDaMo16KjYyjMvUNh5GWOT6MoLL8A8ygrk0dQIUabafmaEAWiinQ2gEWHSjhjJUYuj73Pcd63noQaNEYFb-Dk2S0cxe7IYm7GcYevFYjm2HyJeeQQb8tFkikVjGNoFGajUt73o+z61vYQA */
readonly id: 'Presentation Tool'
readonly context: {
readonly url: null
readonly error: null
readonly visualEditingOverlaysEnabled: false
}
readonly on: {
readonly 'iframe reload': {
readonly actions: ActionFunction<
Context,
{
type: 'iframe reload'
},
| {
type: 'toggle visual editing overlays'
enabled: boolean
}
| {
type: 'iframe loaded'
}
| {
type: 'iframe refresh'
}
| {
type: 'iframe reload'
},
undefined,
never,
never,
never,
never,
never
>
readonly target: '.loading'
}
}
readonly states: {
readonly error: {
readonly description: 'Failed to load, either because of a misconfiguration, a network error, or an unexpected error'
readonly tags: readonly ['error']
}
readonly loading: {
readonly on: {
readonly 'iframe loaded': {
readonly target: 'loaded'
}
}
readonly tags: readonly ['busy']
}
readonly loaded: {
readonly on: {
readonly 'toggle visual editing overlays': {
readonly actions: ActionFunction<
Context,
{
type: 'toggle visual editing overlays'
enabled: boolean
},
| {
type: 'toggle visual editing overlays'
enabled: boolean
}
| {
type: 'iframe loaded'
}
| {
type: 'iframe refresh'
}
| {
type: 'iframe reload'
},
undefined,
never,
never,
never,
never,
never
>
}
readonly 'iframe refresh': {
readonly target: '.refreshing'
}
readonly 'iframe reload': {
readonly target: '.reloading'
}
}
readonly states: {
readonly idle: {}
readonly refreshing: {
readonly on: {
readonly 'iframe loaded': {
readonly target: 'idle'
}
}
readonly tags: readonly ['busy']
}
readonly reloading: {
readonly on: {
readonly 'iframe loaded': {
readonly target: 'idle'
}
}
readonly tags: readonly ['busy']
}
}
readonly initial: 'idle'
}
}
readonly initial: 'loading'
}
>
declare type PresentationMachineRef = ActorRefFrom<typeof presentationMachine>
/** @public */
export declare type PresentationNavigateContextValue = (
preview: string | undefined,
document?: {
type: string
id: string
},
) => void
/**
* All possible parameters that can be used to describe the state of the
* Presentation tool, stored in the pathname and as search parameters of the URL
* @public
*/
export declare interface PresentationParams extends PresentationStateParams, CombinedSearchParams {}
/** @public */
export declare type PresentationPerspective = Exclude<ClientPerspective, 'raw'>
/**
* @public
*/
export declare interface PresentationPluginOptions {
devMode?: boolean | (() => boolean)
icon?: ComponentType
name?: string
title?: string
allowOrigins?: PreviewUrlAllowOption
previewUrl: PreviewUrlOption
/**
* @deprecated use `resolve.locations` instead
*/
locate?: DocumentLocationResolver
resolve?: {
mainDocuments?: DocumentResolver[]
locations?: DocumentLocationResolvers | DocumentLocationResolver
}
components?: {
unstable_header?: HeaderOptions
unstable_navigator?: NavigatorOptions
}
/**
* @deprecated this feature flag is no longer needed
*/
unstable_showUnsafeShareUrl?: boolean
}
/**
* Presentation specific URL search parameters, they should persist when
* navigating between the document pane and document list pane
* @public
*/
export declare interface PresentationSearchParams {
preview?: string
perspective?: string
viewport?: string
}
/**
* Presentation specific state that is stored in the pathname section of the URL
* @public
*/
export declare interface PresentationStateParams {
type?: string
id?: string
path?: string
}
/** @public */
export declare const presentationTool: Plugin_2<PresentationPluginOptions>
/** @public */
export declare type PresentationViewport = 'desktop' | 'mobile'
/** @public */
export declare interface PreviewHeaderProps extends PreviewProps {
iframeRef: RefObject<HTMLIFrameElement | null>
renderDefault: (props: PreviewHeaderProps) => React.JSX.Element
}
/** @public */
export declare interface PreviewProps {
canSharePreviewAccess: boolean
canToggleSharePreviewAccess: boolean
canUseSharedPreviewAccess: boolean
header?: HeaderOptions
initialUrl: URL
loadersConnection: ConnectionStatus
navigatorEnabled: boolean
onPathChange: (nextPath: string) => void
onRefresh: (fallback: () => void) => void
openPopup: (url: string) => void
overlaysConnection: ConnectionStatus
presentationRef: PresentationMachineRef
perspective: PresentationPerspective
previewUrl?: string
setViewport: (mode: 'desktop' | 'mobile') => void
targetOrigin: string
toggleNavigator?: () => void
toggleOverlay: () => void
viewport: PresentationViewport
vercelProtectionBypass: string | null
previewUrlRef: PreviewUrlRef
}
/** @public */
declare type PreviewUrlAllowOption =
| string
| string[]
| ((context: PreviewUrlAllowOptionContext) => string | string[] | Promise<string | string[]>)
/** @public */
declare interface PreviewUrlAllowOptionContext {
client: SanityClient
/**
* Equivalent to `location.origin`
*/
origin: string
/**
* The initial URL of the preview
*/
initialUrl: URL
}
/** @public */
declare type PreviewUrlInitialOption =
| string
| ((context: PreviewUrlInitialOptionContext) => string | Promise<string>)
/** @public */
declare interface PreviewUrlInitialOptionContext {
client: SanityClient
/**
* Equivalent to `location.origin`
*/
origin: string
}
declare const previewUrlMachine: StateMachine<
Context_2,
SetPreviewSearchParamEvent,
{
[x: string]:
| ActorRefFromLogic<
PromiseActorLogic<
URL,
{
initialUrl: URL
previewSearchParam: string | null | undefined
allowOrigins: URLPattern[]
},
EventObject
>
>
| ActorRefFromLogic<
ObservableActorLogic<PermissionCheckResult, CheckPermissionInput, EventObject>
>
| ActorRefFromLogic<
PromiseActorLogic<
URL,
{
previewSearchParam: string | null
},
EventObject
>
>
| ActorRefFromLogic<
PromiseActorLogic<
URLPattern[],
{
initialUrl: URL
},
EventObject
>
>
| ActorRefFromLogic<
PromiseActorLogic<
false | PreviewUrlPreviewMode,
{
targetOrigin: string
},
EventObject
>
>
| ActorRefFromLogic<
PromiseActorLogic<
{
secret: string
expiresAt: Date
},
NonReducibleUnknown,
EventObject
>
>
| ActorRefFromLogic<PromiseActorLogic<string | null, NonReducibleUnknown, EventObject>>
| ActorRefFromLogic<PromiseActorLogic<URL, ResolvePreviewModeUrlInput, EventObject>>
| undefined
},
Values<{
'resolve url from preview search param': {
src: 'resolve url from preview search param'
logic: PromiseActorLogic<
URL,
{
initialUrl: URL
previewSearchParam: string | null | undefined
allowOrigins: URLPattern[]
},
EventObject
>
id: string | undefined
}
'check permission': {
src: 'check permission'
logic: ObservableActorLogic<PermissionCheckResult, CheckPermissionInput, EventObject>
id: string | undefined
}
'resolve initial url': {
src: 'resolve initial url'
logic: PromiseActorLogic<
URL,
{
previewSearchParam: string | null
},
EventObject
>
id: string | undefined
}
'resolve allow patterns': {
src: 'resolve allow patterns'
logic: PromiseActorLogic<
URLPattern[],
{
initialUrl: URL
},
EventObject
>
id: string | undefined
}
'resolve preview mode': {
src: 'resolve preview mode'
logic: PromiseActorLogic<
false | PreviewUrlPreviewMode,
{
targetOrigin: string
},
EventObject
>
id: string | undefined
}
'create preview secret': {
src: 'create preview secret'
logic: PromiseActorLogic<
{
secret: string
expiresAt: Date
},
NonReducibleUnknown,
EventObject
>
id: string | undefined
}
'read shared preview secret': {
src: 'read shared preview secret'
logic: PromiseActorLogic<string | null, NonReducibleUnknown, EventObject>
id: string | undefined
}
'resolve preview mode url': {
src: 'resolve preview mode url'
logic: PromiseActorLogic<URL, ResolvePreviewModeUrlInput, EventObject>
id: string | undefined
}
}>,
Values<{
'notify preview will likely fail': {
type: 'notify preview will likely fail'
params: NonReducibleUnknown
}
'assign preview search param': {
type: 'assign preview search param'
params: {
previewSearchParam: string | null
}
}
'assign error': {
type: 'assign error'
params: {
message: string
error: unknown
}
}
}>,
Values<{
'has checked permissions': {
type: 'has checked permissions'
params: unknown
}
'search param has new origin': {
type: 'search param has new origin'
params: unknown
}
'can create preview secret': {
type: 'can create preview secret'
params: unknown
}
'has preview mode with created secret': {
type: 'has preview mode with created secret'
params: false | PreviewUrlPreviewMode
}
'has preview mode with share access': {
type: 'has preview mode with share access'
params: false | PreviewUrlPreviewMode
}
'has preview mode without permissions': {
type: 'has preview mode without permissions'
params: false | PreviewUrlPreviewMode
}
}>,
'expiredSecret',
| 'error'
| 'success'
| 'checkingPermissions'
| 'resolvingInitialUrl'
| 'resolvingAllowPatterns'
| 'resolvingUrlFromPreviewSearchParam'
| 'resolvingPreviewMode'
| {
previewMode:
| 'error'
| 'success'
| 'createPreviewSecret'
| 'resolvePreviewUrl'
| 'readShareAccess'
},
'error' | 'busy',
Input,
NonReducibleUnknown,
EventObject,
MetaObject,
{
/** @xstate-layout N4IgpgJg5mDOIC5QAUBOYBuBLMB3ABAKoBKAMgMRiqoD2qAdAA4A2AhgC4BmdAtvWphwESpBFgB2GGgGMOWGuIDaABgC6K1YlCMasLO3nitIAB6IArAA56AZgCcAdkcBGS8vMAmO+YBszgDQgAJ6Izs4+9M7KACzKztGWHg4OPubmAL7pgQLYeERklNR0TGxcvPzoucJkYpIycgqKzupqxjp6BgrGZggAtM520ZHRdjZjNjFe7oEhCGERUbHxicmpGVkgOUL5FFS0DCwc3Kh8W3kitVKynUoeLZpIIO36ht2IvV62Hl7elmE2lh83xmoXCkRicQSSRS5gSmWylW2IkK+xKR3KZ2qogkVwaShs9zauheXUePV6gPo3jSUyi-xBczBi0hKxh5mc8M2iPOBVgYHY+EY3IIfNYqGkAAtBWLWDwNESOq8yaCbM56A4bB5fGllHYvD4fAz4h56CNfG5LKqHMpLdFOZidvRJWBpABrCRQZBUHhYWB6BSwcjyx7PG5vPrs5TqjWqyyjTXRDwMjwxei68J2ZQ2nyWXN2jYOkT0dCwGjMbDiKAASXEL1YzEIqGY5AgCjA9BxNFd7cLZGLcDLFertYM9cbzEu9RuGmD2mJYeVfRGdipyh86Yc0XiE3MDK3JssIwcrmtPjGSXzCMEPNI-dL5Y9NbrDabKOKhzKJwq16xd8Hj5HLAxybSdrkMGdWhDeclVAclN3odlzBsKwBjSSxjwcZM7DVeJ1w8P4xmidk7HtYVHRLf9KwAQWYZgaFwZAOHYKhxEDVtxHbTtu2-KpyIHB9qNo+jGPYZjUFY0C8Qgh450VUlYPedkHHoHwnDSZDVOiGwfGiBlUhXXwwjsQYtKSYzSJ-Pj7yHGi6IYpiWMDPZ31KY5TjIosKIEqBbOEhzxNgSTpzUWcnmg+TTHePV6Hw3MYgzaItJ0hlYRNTNkLiHxBl1GILN4zz+KHccADFaB4TEAGUwDFSVGNQWUWzbDs6m43tby8oqm1KmhyuFKqaolOrZSC8CQsg2SSSMRdel8ZSNUTdlcw8M07AZQZrDXdaDRtUZnHWK98r7DqPRKsrKuq8VBplHg3wOVyMQ8o7CpOrqzr6i7auukbGjGmSwrkqaFL6MJlLiWFlC1EGty0hknAiXVVPMRx12UJwOQLR72ueytMQAWRoCAwEajjmqkVrMb-by8YJsBvqUX6FUm8Nem2+hbWPUZErGTcjS8NUJg8AE9T1ZwHHwvKkSe6yPWpwnic4lqewp46ceFfHCbpmdmkZhcgZmyxzFsDmTPcXUUiNRKDy3ZQJlVLSkYlm9KaHWWifYhWyaVyyCul1Wf3V2nOzAn71DuHWYMivovGsBxPCy74beWaJDWCUJzBSFTrUcQYdMzIFHd-FXPTVmn5dJrsvcOrHfeL-2ac1kKCXDiLyWcNKJiiHM-BtONwgtnMEM1DVNwhhI7B8AurMo2uqgD260U-dzval6fXYbwkoIB5moijLLkm5tvYRBo1nGQtND11ZaIdzEiMeX6vV5LuW+QFIVLNFS7pXquVxv+pnF1FtYP4OY7AG3QohJMqcEDeGUq4NwYQBhLEnkWWAABXaQ0g4CBhfoKMiH9JRf1lKFUMEceiizVPA0+7gtQQy8LzXU6obaJTFtEJwHhXDIL7G-WepccHcO2PgqUjBrrEPCoDSOFI3C2AGHtQ8sIiJJGTILZS7JRaeGSKw7CnDbz8LwAHJ06AOBgHOtIdA7Ay5cUrpLHRT92ymOqsxExZj16iK3gAqI6oaQ6QtE4YylhkynzmkCBGNgNR7VvgdaxTBbEGIccY969jzHOTuuiL8bVol10JrEoxTj+QuN-iQlu7xwjKX1P8bSTC0hGhcKaBIOZAQGkBKE7RGSeFZMMRACqEoxRgCohgrBFjFY8Sibo3A+iOldJ6X0zBfp8l-UKeIshjgqTGTiPYPaGotS7igd8QWtgsp6iQnFOEd8q6tKEOM6qnTunoGmQM5JC83LDKdqMy5rBrlTP6bMoOUkGab3-kDU+ERVEpnsEjDRVSdljBXKeQY3h5gOBaa8mmzt4k-nHIMz2zzfzIvaYVNFVRxxzObosxAfg1Q2jSOERIh5kIBNGKaNZ2lvjhFhEimJHUCVCAxQ8j8Tz0m4vbJyzERKfnBQ3hNXWkdyWeJsCMVhqNsK6mTO4Q2Q9DysLCEhDw7LMntjQV8wMJhYDsCMfQVgnAxIAAowAmEYFgdAnSXRmIAJTkAFTEg1MzYCuIBZHKYKlUiqWwrCMJkDZgDAYceRMfwUisPYZYTIGxxA03gI8NqJLmZ6msKqENcjErqIZL0cethvDGXLew9hiYWnOjdDLb0vp-SsUzdNcwEMEJ7WTohDMfgU4RpTCpUJnhYrHghuEFpRcnyjhfMwFtet2Q2FNOwsWZarBan8TsuMkRvhIzPJGDwmkWnJLnf6g0aZl0mQTURDdsxYiGwwsRIEgwEwTuxj5IS9lRKORPeSJCOF4XgrUZqbZsxwZszcJtbC4RUg2FfTXU6PVzoDSGjwH9ik-gxRGG4NtxkkZblhgyxIhFQG5lSPEODj89VoYjKqGKURkij0zImXSUCwiozZuDLUCQQY6tOVEr1WDqMsxNCkP4RFPBZj+I4I0qoRMODjIlceBzkK6raWAIT7DDZlNPhUuVkKI0pEXbHBISF1yAiIqpi5KL7E5ISWYoTna2b6Qg+DcFN7EAphLdpdOWVoPJ0RXxl5HKrmTNuYahzaQviaQPVERa8mlGeBUnnQyDStSwcCzi4L1kuV4HHNR4DCFdRaVVFSzcZ4VVIVsDEVhZ5QnWlYZZvRKLj3-KlT0FIKjVRZghkCXwqkjQGzVFxvOMisoWYy46QV9ABN+mo3mFZZ427lp032jzVa2bJGtCUtciak1AA */
readonly id: 'Preview URL'
readonly context: ({
input,
}: {
spawn: {
<
TSrc extends
| 'resolve url from preview search param'
| 'check permission'
| 'resolve initial url'
| 'resolve allow patterns'
| 'resolve preview mode'
| 'create preview secret'
| 'read shared preview secret'
| 'resolve preview mode url',
>(
logic: TSrc,
...[options]:
| ({
src: 'resolve url from preview search param'
logic: PromiseActorLogic<
URL,
{
initialUrl: URL
previewSearchParam: string | null | undefined
allowOrigins: URLPattern[]
},
EventObject
>
id: string | undefined
} extends infer T
? T extends {
src: 'resolve url from preview search param'
logic: PromiseActorLogic<
URL,
{
initialUrl: URL
previewSearchParam: string | null | undefined
allowOrigins: URLPattern[]
},
EventObject
>
id: string | undefined
}
? T extends {
src: TSrc
}
? ConditionalRequired<
[
options?:
| ({
id?: T['id'] | undefined
systemId?: string
input?: InputFrom<T['logic']> | undefined
syncSnapshot?: boolean
} & {[K in RequiredActorOptions<T>]: unknown})
| undefined,
],
IsNotNever<RequiredActorOptions<T>>
>
: never
: never
: never)
| ({
src: 'check permission'
logic: ObservableActorLogic<
PermissionCheckResult,
CheckPermissionInput,
EventObject
>
id: string | undefined
} extends infer T_1
? T_1 extends {
src: 'check permission'
logic: ObservableActorLogic<
PermissionCheckResult,
CheckPermissionInput,
EventObject
>
id: string | undefined
}
? T_1 extends {
src: TSrc
}
? ConditionalRequired<
[
options?:
| ({
id?: T_1['id'] | undefined
systemId?: string
input?: InputFrom<T_1['logic']> | undefined
syncSnapshot?: boolean
} & {[K_1 in RequiredActorOptions<T_1>]: unknown})
| undefined,
],
IsNotNever<RequiredActorOptions<T_1>>
>
: never
: never
: never)
| ({
src: 'resolve initial url'
logic: PromiseActorLogic<
URL,
{
previewSearchParam: string | null
},
EventObject
>
id: string | undefined
} extends infer T_2
? T_2 extends {
src: 'resolve initial url'
logic: PromiseActorLogic<
URL,
{
previewSearchParam: string | null
},
EventObject
>
id: string | undefined
}
? T_2 extends {
src: TSrc
}
? ConditionalRequired<
[
options?:
| ({
id?: T_2['id'] | undefined
systemId?: string
input?: InputFrom<T_2['logic']> | undefined
syncSnapshot?: boolean
} & {[K_2 in RequiredActorOptions<T_2>]: unknown})
| undefined,
],
IsNotNever<RequiredActorOptions<T_2>>
>
: never
: never
: never)
| ({
src: 'resolve allow patterns'
logic: PromiseActorLogic<
URLPattern[],
{
initialUrl: URL
},
EventObject
>
id: string | undefined
} extends infer T_3
? T_3 extends {
src: 'resolve allow patterns'
logic: PromiseActorLogic<
URLPattern[],
{
initialUrl: URL
},
EventObject
>
id: string | undefined
}
? T_3 extends {
src: TSrc
}
? ConditionalRequired<
[
options?:
| ({
id?: T_3['id'] | undefined
systemId?: string
input?: InputFrom<T_3['logic']> | undefined
syncSnapshot?: boolean
} & {[K_3 in RequiredActorOptions<T_3>]: unknown})
| undefined,
],
IsNotNever<RequiredActorOptions<T_3>>
>
: never
: never
: never)
| ({
src: 'resolve preview mode'
logic: PromiseActorLogic<
false | PreviewUrlPreviewMode,
{
targetOrigin: string
},
EventObject
>
id: string | undefined
} extends infer T_4
? T_4 extends {
src: 'resolve preview mode'
logic: PromiseActorLogic<
false | PreviewUrlPreviewMode,
{
targetOrigin: string
},
EventObject
>
id: string | undefined
}
? T_4 extends {
src: TSrc
}
? ConditionalRequired<
[
options?:
| ({
id?: T_4['id'] | undefined
systemId?: string
input?: InputFrom<T_4['logic']> | undefined
syncSnapshot?: boolean
} & {[K_4 in RequiredActorOptions<T_4>]: unknown})
| undefined,
],
IsNotNever<RequiredActorOptions<T_4>>
>
: never
: never
: never)
| ({
src: 'create preview secret'
logic: PromiseActorLogic<
{
secret: string
expiresAt: Date
},
NonReducibleUnknown,
EventObject
>
id: string | undefined
} extends infer T_5
? T_5 extends {
src: 'create preview secret'
logic: PromiseActorLogic<
{
secret: string
expiresAt: Date
},
NonReducibleUnknown,
EventObject
>
id: string | undefined
}
? T_5 extends {
src: TSrc
}
? ConditionalRequired<
[
options?:
| ({
id?: T_5['id'] | undefined
systemId?: string
input?: InputFrom<T_5['logic']> | undefined
syncSnapshot?: boolean
} & {[K_5 in RequiredActorOptions<T_5>]: unknown})
| undefined,
],
IsNotNever<RequiredActorOptions<T_5>>
>
: never
: never
: never)
| ({
src: 'read shared preview secret'
logic: PromiseActorLogic<string | null, NonReducibleUnknown, EventObject>
id: string | undefined
} extends infer T_6
? T_6 extends {
src: 'read shared preview secret'
logic: PromiseActorLogic<string | null, NonReducibleUnknown, EventObject>
id: string | undefined
}
? T_6 extends {
src: TSrc
}
? ConditionalRequired<
[
options?:
| ({
id?: T_6['id'] | undefined
systemId?: string
input?: InputFrom<T_6['logic']> | undefined
syncSnapshot?: boolean
} & {[K_6 in RequiredActorOptions<T_6>]: unknown})
| undefined,
],
IsNotNever<RequiredActorOptions<T_6>>
>
: never
: never
: never)
| ({
src: 'resolve preview mode url'
logic: PromiseActorLogic<URL, ResolvePreviewModeUrlInput, EventObject>
id: string | undefined
} extends infer T_7
? T_7 extends {
src: 'resolve preview mode url'
logic: PromiseActorLogic<URL, ResolvePreviewModeUrlInput, EventObject>
id: string | undefined
}
? T_7 extends {
src: TSrc
}
? ConditionalRequired<
[
options?:
| ({
id?: T_7['id'] | undefined
systemId?: string
input?: InputFrom<T_7['logic']> | undefined
syncSnapshot?: boolean
} & {[K_7 in RequiredActorOptions<T_7>]: unknown})
| undefined,
],
IsNotNever<RequiredActorOptions<T_7>>
>
: never
: never
: never)
): ActorRefFromLogic<
GetConcreteByKey<
Values<{
'resolve url from preview search param': {
src: 'resolve url from preview search param'
logic: PromiseActorLogic<
URL,
{
initialUrl: URL
previewSearchParam: string | null | undefined
allowOrigins: URLPattern[]
},
EventObject
>
id: string | undefined
}
'check permission': {
src: 'check permission'
logic: ObservableActorLogic<
PermissionCheckResult,
CheckPermissionInput,
EventObject
>
id: string | undefined
}
'resolve initial url': {
src: 'resolve initial url'
logic: PromiseActorLogic<
URL,
{
previewSearchParam: string | null
},
EventObject
>
id: string | undefined
}
'resolve allow patterns': {
src: 'resolve allow patterns'
logic: PromiseActorLogic<
URLPattern[],
{
initialUrl: URL
},
EventObject
>
id: string | undefined
}
'resolve preview mode': {
src: 'resolve preview mode'
logic: PromiseActorLogic<
false | PreviewUrlPreviewMode,
{
targetOrigin: string
},
EventObject
>
id: string | undefined
}
'create preview secret': {
src: 'create preview secret'
logic: PromiseActorLogic<
{
secret: string
expiresAt: Date
},
NonReducibleUnknown,
EventObject
>
id: string | undefined
}
'read shared preview secret': {
src: 'read shared preview secret'
logic: PromiseActorLogic<string | null, NonReducibleUnknown, EventObject>
id: string | undefined
}
'resolve preview mode url': {
src: 'resolve preview mode url'
logic: PromiseActorLogic<URL, ResolvePreviewModeUrlInput, EventObject>
id: string | undefined
}
}>,
'src',
TSrc
>['logic']
>
<TLogic extends AnyActorLogic>(
src: TLogic,
...[options]: ConditionalRequired<
[
options?:
| ({
id?: never
systemId?: string
input?: InputFrom<TLogic> | undefined
syncSnapshot?: boolean
} & {[K in RequiredLogicInput<TLogic>]: unknown})
| undefined,
],
IsNotNever<RequiredLogicInput<TLogic>>
>
): ActorRefFromLogic<TLogic>
}
input: Input
self: ActorRef<
MachineSnapshot<
Context_2,
SetPreviewSearchParamEvent,
Record<string, AnyActorRef | undefined>,
StateValue,
string,
unknown,
any,
any
>,
SetPreviewSearchParamEvent,
AnyEventObject
>
}) => {
initialUrl: null
previewUrl: null
error: null
allowOrigins: null
previewSearchParam: string | null
previewUrlSecret: null
previewAccessSharingCreatePermission: null
previewAccessSharingReadPermission: null
previewAccessSharingUpdatePermission: null
previewUrlSecretPermission: null
previewMode: null
}
readonly invoke: readonly [
{
readonly src: 'check permission'
readonly input: () => {
checkPermissionName: 'read'
document: {
_id: 'sanity-preview-url-secret.share-access'
_type: string
}
}
readonly onError: {
readonly target: '.error'
readonly actions: {
readonly type: 'assign error'
readonly params: ({
event,
}: {
context: Context_2
event: ErrorActorEvent<unknown, string>
}) => {
message: string
error: unknown
}
}
}
readonly onSnapshot: {
readonly actions: ActionFunction<
Context_2,
SnapshotEvent<ObservableSnapshot<PermissionCheckResult, CheckPermissionInput>>,
SetPreviewSearchParamEvent,
undefined,
Values<{
'resolve url from preview search param': {
src: 'resolve url from preview search param'
logic: PromiseActorLogic<
URL,
{
initialUrl: URL
previewSearchParam: string | null | undefined
allowOrigins: URLPattern[]
},
EventObject
>
id: string | undefined
}
'check permission': {
src: 'check permission'
logic: ObservableActorLogic<
PermissionCheckResult,
CheckPermissionInput,
EventObject
>
id: string | undefined
}
'resolve initial url': {
src: 'resolve initial url'
logic: PromiseActorLogic<
URL,
{
previewSearchParam: string | null
},
EventObject
>
id: string | undefined
}
'resolve allow patterns': {
src: 'resolve allow patterns'
logic: PromiseActorLogic<
URLPattern[],
{
initialUrl: URL
},
EventObject
>
id: string | undefined
}
'resolve preview mode': {
src: 'resolve preview mode'
logic: PromiseActorLogic<
false | PreviewUrlPreviewMode,
{
targetOrigin: string
},
EventObject
>
id: string | undefined
}
'create preview secret': {
src: 'create preview secret'
logic: PromiseActorLogic<
{
secret: string
expiresAt: Date
},
NonReducibleUnknown,
EventObject
>
id: string | undefined
}
'read shared preview secret': {
src: 'read shared preview secret'
logic: PromiseActorLogic<string | null, NonReducibleUnknown, EventObject>
id: string | undefined
}
'resolve preview mode url': {
src: 'resolve preview mode url'
logic: PromiseActorLogic<URL, ResolvePreviewModeUrlInput, EventObject>
id: string | undefined
}
}>,
never,
never,
never,
never
>
}
},
{
readonly src: 'check permission'
readonly input: () => {
checkPermissionName: 'create'
document: {
_id: 'sanity-preview-url-secret.share-access'
_type: string
}
}
readonly onError: {
readonly target: '.error'
readonly actions: {
readonly type: 'assign error'
readonly params: ({
event,
}: {
context: Context_2
event: ErrorActorEvent<unknown, string>
}) => {
message: string
error: unknown
}
}
}
readonly onSnapshot: {
readonly actions: ActionFunction<
Context_2,
SnapshotEvent<ObservableSnapshot<PermissionCheckResult, CheckPermissionInput>>,
SetPreviewSearchParamEvent,
undefined,
Values<{
'resolve url from preview search param': {
src: 'resolve url from preview search param'
logic: PromiseActorLogic<
URL,
{
initialUrl: URL
previewSearchParam: string | null | undefined
allowOrigins: URLPattern[]
},
EventObject
>
id: string | undefined
}
'check permission': {
src: 'check permission'
logic: ObservableActorLogic<
PermissionCheckResult,
CheckPermissionInput,
EventObject
>
id: string | undefined
}
'resolve initial url': {
src: 'resolve initial url'
logic: PromiseActorLogic<
URL,
{
previewSearchParam: string | null
},
EventObject
>
id: string | undefined
}
'resolve allow patterns': {
src: 'resolve allow patterns'
logic: PromiseActorLogic<
URLPattern[],
{
initialUrl: URL
},
EventObject
>
id: string | undefined
}
'resolve preview mode': {
src: 'resolve preview mode'
logic: PromiseActorLogic<
false | PreviewUrlPreviewMode,
{
targetOrigin: string
},
EventObject
>
id: string | undefined
}
'create preview secret': {
src: 'create preview secret'
logic: PromiseActorLogic<
{
secret: string
expiresAt: Date
},
NonReducibleUnknown,
EventObject
>
id: string | undefined
}
'read shared preview secret': {
src: 'read shared preview secret'
logic: PromiseActorLogic<string | null, NonReducibleUnknown, EventObject>
id: string | undefined
}
'resolve preview mode url': {
src: 'resolve preview mode url'
logic: PromiseActorLogic<URL, ResolvePreviewModeUrlInput, EventObject>
id: string | undefined
}
}>,
never,
never,
never,
never
>
}
},
{
readonly src: 'check permission'
readonly input: () => {
checkPermissionName: 'update'
document: {
_id: 'sanity-preview-url-secret.share-access'
_type: string
}
}
readonly onError: {
readonly target: '.error'
readonly actions: {
readonly type: 'assign error'
readonly params: ({
event,
}: {
context: Context_2
event: ErrorActorEvent<unknown, string>
}) => {
message: string
error: unknown
}
}
}
readonly onSnapshot: {
readonly actions: ActionFunction<
Context_2,
SnapshotEvent<ObservableSnapshot<PermissionCheckResult, CheckPermissionInput>>,
SetPreviewSearchParamEvent,
undefined,
Values<{
'resolve url from preview search param': {
src: 'resolve url from preview search param'
logic: PromiseActorLogic<
URL,
{
initialUrl: URL
previewSearchParam: string | null | undefined
allowOrigins: URLPattern[]
},
EventObject
>
id: string | undefined
}
'check permission': {
src: 'check permission'
logic: ObservableActorLogic<
PermissionCheckResult,
CheckPermissionInput,
EventObject
>
id: string | undefined
}
'resolve initial url': {
src: 'resolve initial url'
logic: PromiseActorLogic<
URL,
{
previewSearchParam: string | null
},
EventObject
>
id: string | undefined
}
'resolve allow patterns': {
src: 'resolve allow patterns'
logic: PromiseActorLogic<
URLPattern[],
{
initialUrl: URL
},
EventObject
>
id: string | undefined
}
'resolve preview mode': {
src: 'resolve preview mode'
logic: PromiseActorLogic<
false | PreviewUrlPreviewMode,
{
targetOrigin: string
},
EventObject
>
id: string | undefined
}
'create preview secret': {
src: 'create preview secret'
logic: PromiseActorLogic<
{
secret: string
expiresAt: Date
},
NonReducibleUnknown,