@sanity/client 6.28.3-instruct.0 → 6.28.3-instruct.2

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.
@@ -122,110 +122,6 @@ export declare class AssetsClient {
122
122
  ): Promise<SanityAssetDocument | SanityImageAssetDocument>
123
123
  }
124
124
 
125
- /** @beta */
126
- export declare type AssistAsyncInstruction<
127
- T extends Record<string, Any_2> = Record<string, Any_2>,
128
- > = (ExistingDocumentRequest | CreateDocumentRequest<T>) & AssistRequestBase & Async
129
-
130
- /** @public */
131
- declare class AssistClient {
132
- #private
133
- constructor(client: SanityClient, httpRequest: HttpRequest)
134
- instruct(request: AssistAsyncInstruction): Promise<{
135
- _id: string
136
- }>
137
- instruct<DocumentShape extends Record<string, Any>>(
138
- request: AssistSyncInstruction<DocumentShape>,
139
- ): Promise<IdentifiedSanityDocumentStub & DocumentShape>
140
- }
141
-
142
- /** @beta */
143
- export declare type AssistInstruction<T extends Record<string, Any_2> = Record<string, Any_2>> =
144
- | AssistSyncInstruction<T>
145
- | AssistAsyncInstruction<T>
146
-
147
- declare interface AssistRequestBase {
148
- /** schemaId as reported by sanity deploy / sanity schema store */
149
- schemaId: string
150
- /** string template using $variable – more on this below under "Dynamic instruction" */
151
- instruction: string
152
- /** param values for the string template, keys are the variable name, ie if the template has "$variable", one key must be "variable" */
153
- instructionParams?: InstructionParams
154
- /**
155
- * Optional document path output target for the instruction.
156
- * When provided, the instruction will apply to this path in the document and its children.
157
- *
158
- * ## Examples
159
- * - `path: 'title'` will output to the title field in the document
160
- * - `path: 'array[_key="xx"]'` will output to the item with `_key: 'xx'` in the array field
161
- */
162
- path?: string
163
- /**
164
- * Controls sub-paths in the document that can be output to.
165
- *
166
- * The string-paths are relative to the `path` param
167
- *
168
- * Note: these path strings are less strictly validated than the `path` param itself:
169
- * if an relative-path does not exist or is invalid, it will be silently ignored.
170
- *
171
- * @see AssistRequestBase#conditionalPaths
172
- * @see AssistRequestBase#outputTypes
173
- */
174
- relativeOutputPaths?:
175
- | {
176
- include: string[]
177
- }
178
- | {
179
- exclude: string[]
180
- }
181
- /**
182
- * Controls which types the instruction is allowed to output to.
183
- *
184
- * @see AssistRequestBase#relativeOutputPaths
185
- * @see AssistRequestBase#conditionalPaths
186
- */
187
- outputTypes?:
188
- | {
189
- include: string[]
190
- }
191
- | {
192
- exclude: string[]
193
- }
194
- /**
195
- * When a type or field in the schema has a function set for `hidden` or `readOnly`, it is conditional.
196
- *
197
- * By default, AI Assist will not output to conditional `readOnly` and `hidden` fields,
198
- * ie, they are considered to resolve to `readOnly: true` / `hidden: true`.
199
- *
200
- * `conditionalPaths` param allows setting the default conditional value for
201
- * `hidden` and `readOnly` to false,
202
- * or individually set `hidden` and `readOnly` state for individual document paths.
203
- *
204
- *
205
- * Note: fields and types with explicit readOnly: true or hidden: true in the schema, are not available to AI Assist,
206
- * and cannot be changed via conditionalPaths.
207
- *
208
- * conditionalPaths state only apply to fields and types that have conditional `hidden` or `readOnly` in their schema definition.
209
- *
210
- * @see AssistRequestBase#relativeOutputPaths
211
- * @see AssistRequestBase#outputTypes
212
- */
213
- conditionalPaths?: {
214
- defaultReadOnly?: boolean
215
- defaultHidden?: boolean
216
- paths?: {
217
- /** path here is not a relative path: it must be the full document path, regardless of `path` param on the request itself */
218
- path: string
219
- readOnly: boolean
220
- hidden: boolean
221
- }[]
222
- }
223
- }
224
-
225
- /** @beta */
226
- export declare type AssistSyncInstruction<T extends Record<string, Any_2> = Record<string, Any_2>> =
227
- (ExistingDocumentRequest | CreateDocumentRequest<T>) & AssistRequestBase & Sync
228
-
229
125
  declare interface Async {
230
126
  /**
231
127
  * When async: true, requests responds with status 201 and {_id} as response body as soon as the request is validated.
@@ -577,12 +473,6 @@ export declare class ConnectionFailedError extends Error {
577
473
  readonly name = 'ConnectionFailedError'
578
474
  }
579
475
 
580
- /** @beta */
581
- export declare interface ConstantInstructionParam {
582
- type: 'constant'
583
- value: string
584
- }
585
-
586
476
  /** @public */
587
477
  export declare interface ContentSourceMap {
588
478
  mappings: ContentSourceMapMappings
@@ -928,23 +818,6 @@ declare interface ExistingDocumentRequest {
928
818
  documentId: string
929
819
  }
930
820
 
931
- /**
932
- *
933
- * Includes a LLM-friendly version of the field value in the instruction
934
- * @beta
935
- * */
936
- export declare interface FieldInstructionParam {
937
- type: 'field'
938
- /**
939
- * Examples: 'title', 'array[_key=="key"].field
940
- */
941
- path: string
942
- /**
943
- * If omitted, implicitly uses the documentId of the instruction target
944
- */
945
- documentId?: string
946
- }
947
-
948
821
  /** @public */
949
822
  export declare type FilterDefault = (props: {
950
823
  /**
@@ -1011,13 +884,6 @@ export declare type FirstDocumentMutationOptions = BaseMutationOptions & {
1011
884
  returnDocuments?: true
1012
885
  }
1013
886
 
1014
- /** @beta */
1015
- export declare interface GroqInstructionParam {
1016
- type: 'groq'
1017
- query: string
1018
- params?: Record<string, string>
1019
- }
1020
-
1021
887
  /** @public */
1022
888
  export declare type HttpRequest = {
1023
889
  (options: RequestOptions, requester: Requester): ReturnType<Requester>
@@ -1079,15 +945,141 @@ export declare type InsertPatch =
1079
945
  }
1080
946
 
1081
947
  /** @beta */
1082
- export declare type InstructionParam =
948
+ export declare type InstructAsyncInstruction<
949
+ T extends Record<string, Any_2> = Record<string, Any_2>,
950
+ > = (ExistingDocumentRequest | CreateDocumentRequest<T>) & InstructRequestBase & Async
951
+
952
+ /** @beta */
953
+ export declare interface InstructConstantInstructionParam {
954
+ type: 'constant'
955
+ value: string
956
+ }
957
+
958
+ /**
959
+ *
960
+ * Includes a LLM-friendly version of the field value in the instruction
961
+ * @beta
962
+ * */
963
+ export declare interface InstructFieldInstructionParam {
964
+ type: 'field'
965
+ /**
966
+ * Examples: 'title', 'array[_key=="key"].field'
967
+ */
968
+ path: string
969
+ /**
970
+ * If omitted, implicitly uses the documentId of the instruction target
971
+ */
972
+ documentId?: string
973
+ }
974
+
975
+ /**
976
+ * Includes a LLM-friendly version of GROQ query result in the instruction
977
+ * @beta
978
+ * */
979
+ export declare interface InstructGroqInstructionParam {
980
+ type: 'groq'
981
+ query: string
982
+ params?: Record<string, string>
983
+ }
984
+
985
+ /** @beta */
986
+ export declare type InstructInstruction<T extends Record<string, Any_2> = Record<string, Any_2>> =
987
+ | InstructSyncInstruction<T>
988
+ | InstructAsyncInstruction<T>
989
+
990
+ /** @beta */
991
+ export declare type InstructInstructionParam =
1083
992
  | string
1084
- | ConstantInstructionParam
1085
- | FieldInstructionParam
993
+ | InstructConstantInstructionParam
994
+ | InstructFieldInstructionParam
1086
995
  | DocumentInstructionParam
1087
- | GroqInstructionParam
996
+ | InstructGroqInstructionParam
1088
997
 
1089
998
  /** @beta */
1090
- export declare type InstructionParams = Record<string, InstructionParam>
999
+ export declare type InstructInstructionParams = Record<string, InstructInstructionParam>
1000
+
1001
+ declare interface InstructRequestBase {
1002
+ /** schemaId as reported by sanity deploy / sanity schema store */
1003
+ schemaId: string
1004
+ /** string template using $variable – more on this below under "Dynamic instruction" */
1005
+ instruction: string
1006
+ /** param values for the string template, keys are the variable name, ie if the template has "$variable", one key must be "variable" */
1007
+ instructionParams?: InstructInstructionParams
1008
+ /**
1009
+ * Optional document path output target for the instruction.
1010
+ * When provided, the instruction will apply to this path in the document and its children.
1011
+ *
1012
+ * ## Examples
1013
+ * - `path: 'title'` will output to the title field in the document
1014
+ * - `path: 'array[_key="xx"]'` will output to the item with `_key: 'xx'` in the array field
1015
+ */
1016
+ path?: string
1017
+ /**
1018
+ * Controls sub-paths in the document that can be output to.
1019
+ *
1020
+ * The string-paths are relative to the `path` param
1021
+ *
1022
+ * Note: these path strings are less strictly validated than the `path` param itself:
1023
+ * if an relative-path does not exist or is invalid, it will be silently ignored.
1024
+ *
1025
+ * @see InstructRequestBase#conditionalPaths
1026
+ * @see InstructRequestBase#outputTypes
1027
+ */
1028
+ relativeOutputPaths?:
1029
+ | {
1030
+ include: string[]
1031
+ }
1032
+ | {
1033
+ exclude: string[]
1034
+ }
1035
+ /**
1036
+ * Controls which types the instruction is allowed to output to.
1037
+ *
1038
+ * @see InstructRequestBase#relativeOutputPaths
1039
+ * @see InstructRequestBase#conditionalPaths
1040
+ */
1041
+ outputTypes?:
1042
+ | {
1043
+ include: string[]
1044
+ }
1045
+ | {
1046
+ exclude: string[]
1047
+ }
1048
+ /**
1049
+ * When a type or field in the schema has a function set for `hidden` or `readOnly`, it is conditional.
1050
+ *
1051
+ * By default, AI Instruct will not output to conditional `readOnly` and `hidden` fields,
1052
+ * ie, they are considered to resolve to `readOnly: true` / `hidden: true`.
1053
+ *
1054
+ * `conditionalPaths` param allows setting the default conditional value for
1055
+ * `hidden` and `readOnly` to false,
1056
+ * or individually set `hidden` and `readOnly` state for individual document paths.
1057
+ *
1058
+ *
1059
+ * Note: fields and types with explicit readOnly: true or hidden: true in the schema, are not available to AI Instruct,
1060
+ * and cannot be changed via conditionalPaths.
1061
+ *
1062
+ * conditionalPaths state only apply to fields and types that have conditional `hidden` or `readOnly` in their schema definition.
1063
+ *
1064
+ * @see InstructRequestBase#relativeOutputPaths
1065
+ * @see InstructRequestBase#outputTypes
1066
+ */
1067
+ conditionalPaths?: {
1068
+ defaultReadOnly?: boolean
1069
+ defaultHidden?: boolean
1070
+ paths?: {
1071
+ /** path here is not a relative path: it must be the full document path, regardless of `path` param on the request itself */
1072
+ path: string
1073
+ readOnly: boolean
1074
+ hidden: boolean
1075
+ }[]
1076
+ }
1077
+ }
1078
+
1079
+ /** @beta */
1080
+ export declare type InstructSyncInstruction<
1081
+ T extends Record<string, Any_2> = Record<string, Any_2>,
1082
+ > = (ExistingDocumentRequest | CreateDocumentRequest<T>) & InstructRequestBase & Sync
1091
1083
 
1092
1084
  /**
1093
1085
  * Set up a listener that will be notified when mutations occur on documents matching the provided query/filter.
@@ -1503,18 +1495,6 @@ export declare class ObservableAssetsClient {
1503
1495
  >
1504
1496
  }
1505
1497
 
1506
- /** @public */
1507
- declare class ObservableAssistClient {
1508
- #private
1509
- constructor(client: ObservableSanityClient, httpRequest: HttpRequest)
1510
- instruct(request: AssistAsyncInstruction): Observable<{
1511
- _id: string
1512
- }>
1513
- instruct<DocumentShape extends Record<string, Any>>(
1514
- request: AssistSyncInstruction<DocumentShape>,
1515
- ): Observable<IdentifiedSanityDocumentStub & DocumentShape>
1516
- }
1517
-
1518
1498
  /** @internal */
1519
1499
  export declare class ObservableDatasetsClient {
1520
1500
  #private
@@ -1638,7 +1618,6 @@ export declare class ObservableSanityClient {
1638
1618
  live: LiveClient
1639
1619
  projects: ObservableProjectsClient
1640
1620
  users: ObservableUsersClient
1641
- assist: ObservableAssistClient
1642
1621
  /**
1643
1622
  * Instance properties
1644
1623
  */
@@ -2133,6 +2112,12 @@ export declare class ObservableSanityClient {
2133
2112
  * @param path - Path to append after the operation
2134
2113
  */
2135
2114
  getDataUrl(operation: string, path?: string): string
2115
+ instruct(request: InstructAsyncInstruction): Observable<{
2116
+ _id: string
2117
+ }>
2118
+ instruct<DocumentShape extends Record<string, Any>>(
2119
+ request: InstructSyncInstruction<DocumentShape>,
2120
+ ): Observable<IdentifiedSanityDocumentStub & DocumentShape>
2136
2121
  }
2137
2122
 
2138
2123
  /** @public */
@@ -2558,7 +2543,6 @@ export declare class SanityClient {
2558
2543
  live: LiveClient
2559
2544
  projects: ProjectsClient
2560
2545
  users: UsersClient
2561
- assist: AssistClient
2562
2546
  /**
2563
2547
  * Observable version of the Sanity client, with the same configuration as the promise-based one
2564
2548
  */
@@ -3073,6 +3057,12 @@ export declare class SanityClient {
3073
3057
  * @param path - Path to append after the operation
3074
3058
  */
3075
3059
  getDataUrl(operation: string, path?: string): string
3060
+ instruct(request: InstructAsyncInstruction): Promise<{
3061
+ _id: string
3062
+ }>
3063
+ instruct<DocumentShape extends Record<string, Any>>(
3064
+ request: InstructSyncInstruction<DocumentShape>,
3065
+ ): Promise<IdentifiedSanityDocumentStub & DocumentShape>
3076
3066
  }
3077
3067
 
3078
3068
  /** @internal */
@@ -180,6 +180,9 @@ const createWarningPrinter = (message) => (
180
180
  `See ${generateHelpUrl(
181
181
  "js-client-browser-token"
182
182
  )} for more information and how to hide this warning.`
183
+ ]), printCredentialedTokenWarning = createWarningPrinter([
184
+ "You have configured Sanity client to use a token, but also provided `withCredentials: true`.",
185
+ "This is no longer supported - only token will be used - remove `withCredentials: true`."
183
186
  ]), printNoApiVersionSpecifiedWarning = createWarningPrinter([
184
187
  "Using the Sanity client without specifying an API version is deprecated.",
185
188
  `See ${generateHelpUrl("js-client-api-version")}`
@@ -198,21 +201,11 @@ function validateApiVersion(apiVersion) {
198
201
  if (!(/^\d{4}-\d{2}-\d{2}$/.test(apiVersion) && apiDate instanceof Date && apiDate.getTime() > 0))
199
202
  throw new Error("Invalid API version string, expected `1` or date in format `YYYY-MM-DD`");
200
203
  }
201
- const VALID_PERSPECTIVE = /^[a-z0-9_]+$/i;
202
204
  function validateApiPerspective(perspective) {
203
- if (Array.isArray(perspective) && perspective.includes("raw"))
205
+ if (Array.isArray(perspective) && perspective.length > 1 && perspective.includes("raw"))
204
206
  throw new TypeError(
205
207
  'Invalid API perspective value: "raw". The raw-perspective can not be combined with other perspectives'
206
208
  );
207
- const invalid = (Array.isArray(perspective) ? perspective : [perspective]).filter(
208
- (perspectiveName) => typeof perspectiveName != "string" || !VALID_PERSPECTIVE.test(perspectiveName)
209
- );
210
- if (invalid.length > 0) {
211
- const formatted = invalid.map((v) => JSON.stringify(v));
212
- throw new TypeError(
213
- `Invalid API perspective value${invalid.length === 1 ? "" : "s"}: ${formatted.join(", ")}, expected \`published\`, \`drafts\`, \`raw\` or a release identifier string`
214
- );
215
- }
216
209
  }
217
210
  const initConfig = (config, prevConfig) => {
218
211
  const specifiedConfig = {
@@ -250,8 +243,8 @@ const initConfig = (config, prevConfig) => {
250
243
  throw new Error(
251
244
  `stega.studioUrl must be a string or a function, received ${newConfig.stega.studioUrl}`
252
245
  );
253
- const isBrowser = typeof window < "u" && window.location && window.location.hostname, isLocalhost = isBrowser && isLocal(window.location.hostname);
254
- isBrowser && isLocalhost && newConfig.token && newConfig.ignoreBrowserTokenWarning !== !0 ? printBrowserTokenWarning() : typeof newConfig.useCdn > "u" && printCdnWarning(), projectBased && projectId(newConfig.projectId), newConfig.dataset && dataset(newConfig.dataset), "requestTagPrefix" in newConfig && (newConfig.requestTagPrefix = newConfig.requestTagPrefix ? requestTag(newConfig.requestTagPrefix).replace(/\.+$/, "") : void 0), newConfig.apiVersion = `${newConfig.apiVersion}`.replace(/^v/, ""), newConfig.isDefaultApi = newConfig.apiHost === defaultConfig.apiHost, newConfig.useCdn === !0 && newConfig.withCredentials && printCdnAndWithCredentialsWarning(), newConfig.useCdn = newConfig.useCdn !== !1 && !newConfig.withCredentials, validateApiVersion(newConfig.apiVersion);
246
+ const isBrowser = typeof window < "u" && window.location && window.location.hostname, isLocalhost = isBrowser && isLocal(window.location.hostname), hasToken = !!newConfig.token;
247
+ newConfig.withCredentials && hasToken && (printCredentialedTokenWarning(), newConfig.withCredentials = !1), isBrowser && isLocalhost && hasToken && newConfig.ignoreBrowserTokenWarning !== !0 ? printBrowserTokenWarning() : typeof newConfig.useCdn > "u" && printCdnWarning(), projectBased && projectId(newConfig.projectId), newConfig.dataset && dataset(newConfig.dataset), "requestTagPrefix" in newConfig && (newConfig.requestTagPrefix = newConfig.requestTagPrefix ? requestTag(newConfig.requestTagPrefix).replace(/\.+$/, "") : void 0), newConfig.apiVersion = `${newConfig.apiVersion}`.replace(/^v/, ""), newConfig.isDefaultApi = newConfig.apiHost === defaultConfig.apiHost, newConfig.useCdn === !0 && newConfig.withCredentials && printCdnAndWithCredentialsWarning(), newConfig.useCdn = newConfig.useCdn !== !1 && !newConfig.withCredentials, validateApiVersion(newConfig.apiVersion);
255
248
  const hostParts = newConfig.apiHost.split("://", 2), protocol = hostParts[0], host = hostParts[1], cdnHost = newConfig.isDefaultApi ? defaultCdnHost : host;
256
249
  return newConfig.useProjectHostname ? (newConfig.url = `${protocol}://${newConfig.projectId}.${host}/v${newConfig.apiVersion}`, newConfig.cdnUrl = `${protocol}://${newConfig.projectId}.${cdnHost}/v${newConfig.apiVersion}`) : (newConfig.url = `${newConfig.apiHost}/v${newConfig.apiVersion}`, newConfig.cdnUrl = newConfig.url), newConfig;
257
250
  };
@@ -699,7 +692,7 @@ const projectHeader = "X-Sanity-Project-ID";
699
692
  function requestOptions(config, overrides = {}) {
700
693
  const headers = {}, token = overrides.token || config.token;
701
694
  token && (headers.Authorization = `Bearer ${token}`), !overrides.useGlobalApi && !config.useProjectHostname && config.projectId && (headers[projectHeader] = config.projectId);
702
- const withCredentials = !!(typeof overrides.withCredentials > "u" ? config.token || config.withCredentials : overrides.withCredentials), timeout = typeof overrides.timeout > "u" ? config.timeout : overrides.timeout;
695
+ const withCredentials = !!(typeof overrides.withCredentials > "u" ? config.withCredentials : overrides.withCredentials), timeout = typeof overrides.timeout > "u" ? config.timeout : overrides.timeout;
703
696
  return Object.assign({}, overrides, {
704
697
  headers: Object.assign({}, headers, overrides.headers || {}),
705
698
  timeout: typeof timeout > "u" ? 5 * 60 * 1e3 : timeout,
@@ -981,42 +974,6 @@ function optionsFromFile(opts, file) {
981
974
  opts
982
975
  );
983
976
  }
984
- function _instruct(client, httpRequest, request) {
985
- const dataset2 = hasDataset(client.config());
986
- return _request(client, httpRequest, {
987
- method: "POST",
988
- uri: `/assist/tasks/instruct/${dataset2}`,
989
- body: request
990
- });
991
- }
992
- class ObservableAssistClient {
993
- #client;
994
- #httpRequest;
995
- constructor(client, httpRequest) {
996
- this.#client = client, this.#httpRequest = httpRequest;
997
- }
998
- /**
999
- * Run an ad-hoc instruction for a target document.
1000
- * @param request instruction request
1001
- */
1002
- instruct(request) {
1003
- return _instruct(this.#client, this.#httpRequest, request);
1004
- }
1005
- }
1006
- class AssistClient {
1007
- #client;
1008
- #httpRequest;
1009
- constructor(client, httpRequest) {
1010
- this.#client = client, this.#httpRequest = httpRequest;
1011
- }
1012
- /**
1013
- * Run an ad-hoc instruction for a target document.
1014
- * @param request instruction request
1015
- */
1016
- instruct(request) {
1017
- return lastValueFrom(_instruct(this.#client, this.#httpRequest, request));
1018
- }
1019
- }
1020
977
  var defaults = (obj, defaults2) => Object.keys(defaults2).concat(Object.keys(obj)).reduce((target, prop) => (target[prop] = typeof obj[prop] > "u" ? defaults2[prop] : obj[prop], target), {});
1021
978
  const pick = (obj, props) => props.reduce((selection, prop) => (typeof obj[prop] > "u" || (selection[prop] = obj[prop]), selection), {}), eventSourcePolyfill = defer(() => import("@sanity/eventsource")).pipe(
1022
979
  map(({ default: EventSource2 }) => EventSource2),
@@ -1045,7 +1002,7 @@ function _listen(query, params, opts = {}) {
1045
1002
  if (uri.length > MAX_URL_LENGTH)
1046
1003
  return throwError(() => new Error("Query too large for listener"));
1047
1004
  const listenFor = options.events ? options.events : ["mutation"], esOptions = {};
1048
- return (token || withCredentials) && (esOptions.withCredentials = !0), token && (esOptions.headers = {
1005
+ return withCredentials && (esOptions.withCredentials = !0), token && (esOptions.headers = {
1049
1006
  Authorization: `Bearer ${token}`
1050
1007
  }), connectEventSource(() => (
1051
1008
  // use polyfill if there is no global EventSource or if we need to set headers
@@ -1268,6 +1225,14 @@ function _modify(client, httpRequest, method, name, options) {
1268
1225
  tag: null
1269
1226
  });
1270
1227
  }
1228
+ function _instruct(client, httpRequest, request) {
1229
+ const dataset2 = hasDataset(client.config());
1230
+ return _request(client, httpRequest, {
1231
+ method: "POST",
1232
+ uri: `/assist/tasks/instruct/${dataset2}`,
1233
+ body: request
1234
+ });
1235
+ }
1271
1236
  class ObservableProjectsClient {
1272
1237
  #client;
1273
1238
  #httpRequest;
@@ -1352,7 +1317,6 @@ class ObservableSanityClient {
1352
1317
  live;
1353
1318
  projects;
1354
1319
  users;
1355
- assist;
1356
1320
  /**
1357
1321
  * Private properties
1358
1322
  */
@@ -1363,7 +1327,7 @@ class ObservableSanityClient {
1363
1327
  */
1364
1328
  listen = _listen;
1365
1329
  constructor(httpRequest, config = defaultConfig) {
1366
- this.config(config), this.#httpRequest = httpRequest, this.assets = new ObservableAssetsClient(this, this.#httpRequest), this.datasets = new ObservableDatasetsClient(this, this.#httpRequest), this.live = new LiveClient(this), this.projects = new ObservableProjectsClient(this, this.#httpRequest), this.users = new ObservableUsersClient(this, this.#httpRequest), this.assist = new ObservableAssistClient(this, this.#httpRequest);
1330
+ this.config(config), this.#httpRequest = httpRequest, this.assets = new ObservableAssetsClient(this, this.#httpRequest), this.datasets = new ObservableDatasetsClient(this, this.#httpRequest), this.live = new LiveClient(this), this.projects = new ObservableProjectsClient(this, this.#httpRequest), this.users = new ObservableUsersClient(this, this.#httpRequest);
1367
1331
  }
1368
1332
  /**
1369
1333
  * Clone the client - returns a new instance
@@ -1495,6 +1459,13 @@ class ObservableSanityClient {
1495
1459
  getDataUrl(operation, path) {
1496
1460
  return _getDataUrl(this, operation, path);
1497
1461
  }
1462
+ /**
1463
+ * Run an ad-hoc instruction for a target document.
1464
+ * @param request instruction request
1465
+ */
1466
+ instruct(request) {
1467
+ return _instruct(this, this.#httpRequest, request);
1468
+ }
1498
1469
  }
1499
1470
  class SanityClient {
1500
1471
  assets;
@@ -1502,7 +1473,6 @@ class SanityClient {
1502
1473
  live;
1503
1474
  projects;
1504
1475
  users;
1505
- assist;
1506
1476
  /**
1507
1477
  * Observable version of the Sanity client, with the same configuration as the promise-based one
1508
1478
  */
@@ -1517,7 +1487,7 @@ class SanityClient {
1517
1487
  */
1518
1488
  listen = _listen;
1519
1489
  constructor(httpRequest, config = defaultConfig) {
1520
- this.config(config), this.#httpRequest = httpRequest, this.assets = new AssetsClient(this, this.#httpRequest), this.datasets = new DatasetsClient(this, this.#httpRequest), this.live = new LiveClient(this), this.projects = new ProjectsClient(this, this.#httpRequest), this.users = new UsersClient(this, this.#httpRequest), this.assist = new AssistClient(this, this.#httpRequest), this.observable = new ObservableSanityClient(httpRequest, config);
1490
+ this.config(config), this.#httpRequest = httpRequest, this.assets = new AssetsClient(this, this.#httpRequest), this.datasets = new DatasetsClient(this, this.#httpRequest), this.live = new LiveClient(this), this.projects = new ProjectsClient(this, this.#httpRequest), this.users = new UsersClient(this, this.#httpRequest), this.observable = new ObservableSanityClient(httpRequest, config);
1521
1491
  }
1522
1492
  /**
1523
1493
  * Clone the client - returns a new instance
@@ -1673,6 +1643,13 @@ class SanityClient {
1673
1643
  getDataUrl(operation, path) {
1674
1644
  return _getDataUrl(this, operation, path);
1675
1645
  }
1646
+ /**
1647
+ * Run an ad-hoc instruction for a target document.
1648
+ * @param request instruction request
1649
+ */
1650
+ instruct(request) {
1651
+ return lastValueFrom(_instruct(this, this.#httpRequest, request));
1652
+ }
1676
1653
  }
1677
1654
  function defineCreateClientExports(envMiddleware2, ClassConstructor) {
1678
1655
  return { requester: defineHttpRequest(envMiddleware2), createClient: (config) => {