@sanity/cli 8.0.0 → 8.0.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.
Files changed (76) hide show
  1. package/dist/actions/backup/downloadAsset.js +3 -24
  2. package/dist/actions/backup/downloadAsset.js.map +1 -1
  3. package/dist/actions/backup/downloadDocument.js +11 -22
  4. package/dist/actions/backup/downloadDocument.js.map +1 -1
  5. package/dist/actions/backup/downloadStream.js +83 -0
  6. package/dist/actions/backup/downloadStream.js.map +1 -0
  7. package/dist/actions/documents/validate.js +0 -3
  8. package/dist/actions/documents/validate.js.map +1 -1
  9. package/dist/actions/documents/validateDocuments.worker.js +4 -1
  10. package/dist/actions/documents/validateDocuments.worker.js.map +1 -1
  11. package/dist/actions/init/sdkAppDependencies.js +1 -1
  12. package/dist/actions/init/sdkAppDependencies.js.map +1 -1
  13. package/dist/actions/init/studioDependencies.js +1 -1
  14. package/dist/actions/init/studioDependencies.js.map +1 -1
  15. package/dist/actions/schema/uploadSchemaToLexicon.js +3 -0
  16. package/dist/actions/schema/uploadSchemaToLexicon.js.map +1 -1
  17. package/dist/actions/telemetry/telemetryDebug.js +2 -2
  18. package/dist/actions/telemetry/telemetryDebug.js.map +1 -1
  19. package/dist/commands/assets/upload.js +35 -1
  20. package/dist/commands/assets/upload.js.map +1 -1
  21. package/dist/commands/datasets/import.js +7 -10
  22. package/dist/commands/datasets/import.js.map +1 -1
  23. package/dist/exports/_internal.d.ts +50 -82
  24. package/dist/exports/index.d.ts +48 -78
  25. package/dist/exports/invokeSanityCli/index.d.ts +108 -18
  26. package/dist/exports/invokeSanityCli/index.js +2 -1
  27. package/dist/exports/invokeSanityCli/index.js.map +1 -1
  28. package/dist/exports/runtime.d.ts +3 -65
  29. package/dist/services/api.js +23 -15
  30. package/dist/services/api.js.map +1 -1
  31. package/dist/services/auth.js +4 -4
  32. package/dist/services/auth.js.map +1 -1
  33. package/dist/services/backup.js +3 -3
  34. package/dist/services/backup.js.map +1 -1
  35. package/dist/services/cors.js +3 -3
  36. package/dist/services/cors.js.map +1 -1
  37. package/dist/services/datasetAliases.js +5 -5
  38. package/dist/services/datasetAliases.js.map +1 -1
  39. package/dist/services/datasets.js +3 -3
  40. package/dist/services/datasets.js.map +1 -1
  41. package/dist/services/documents.js +1 -1
  42. package/dist/services/documents.js.map +1 -1
  43. package/dist/services/getProjectFeatures.js +1 -1
  44. package/dist/services/getProjectFeatures.js.map +1 -1
  45. package/dist/services/getUrlHeaders.js +3 -9
  46. package/dist/services/getUrlHeaders.js.map +1 -1
  47. package/dist/services/grants.js +1 -1
  48. package/dist/services/grants.js.map +1 -1
  49. package/dist/services/graphql.js +4 -3
  50. package/dist/services/graphql.js.map +1 -1
  51. package/dist/services/hooks.js +6 -6
  52. package/dist/services/hooks.js.map +1 -1
  53. package/dist/services/mcp.js +4 -4
  54. package/dist/services/mcp.js.map +1 -1
  55. package/dist/services/mediaLibraries.js +3 -3
  56. package/dist/services/mediaLibraries.js.map +1 -1
  57. package/dist/services/mintProject.js +6 -11
  58. package/dist/services/mintProject.js.map +1 -1
  59. package/dist/services/organizations.js +6 -6
  60. package/dist/services/organizations.js.map +1 -1
  61. package/dist/services/plans.js +2 -2
  62. package/dist/services/plans.js.map +1 -1
  63. package/dist/services/projects.js +7 -7
  64. package/dist/services/projects.js.map +1 -1
  65. package/dist/services/schemas.js +2 -2
  66. package/dist/services/schemas.js.map +1 -1
  67. package/dist/services/telemetry.js +2 -2
  68. package/dist/services/telemetry.js.map +1 -1
  69. package/dist/services/tokens.js +5 -5
  70. package/dist/services/tokens.js.map +1 -1
  71. package/dist/services/user.js +1 -1
  72. package/dist/services/user.js.map +1 -1
  73. package/dist/services/userApplications.js +18 -18
  74. package/dist/services/userApplications.js.map +1 -1
  75. package/oclif.manifest.json +1 -1
  76. package/package.json +12 -12
@@ -9,7 +9,7 @@ export const PROJECT_FEATURES_API_VERSION = 'v2025-09-16';
9
9
  requireUser: true
10
10
  });
11
11
  return client.request({
12
- uri: '/features'
12
+ url: '/features'
13
13
  });
14
14
  }
15
15
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/getProjectFeatures.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\n\nexport const PROJECT_FEATURES_API_VERSION = 'v2025-09-16'\n\n/**\n * Get the list of features available for a project\n */\nexport async function getProjectFeatures(projectId: string): Promise<string[]> {\n const client = await getProjectCliClient({\n apiVersion: PROJECT_FEATURES_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<string[]>({uri: '/features'})\n}\n"],"names":["getProjectCliClient","PROJECT_FEATURES_API_VERSION","getProjectFeatures","projectId","client","apiVersion","requireUser","request","uri"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,mBAAkB;AAEpD,OAAO,MAAMC,+BAA+B,cAAa;AAEzD;;CAEC,GACD,OAAO,eAAeC,mBAAmBC,SAAiB;IACxD,MAAMC,SAAS,MAAMJ,oBAAoB;QACvCK,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAW;QAACC,KAAK;IAAW;AACnD"}
1
+ {"version":3,"sources":["../../src/services/getProjectFeatures.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\n\nexport const PROJECT_FEATURES_API_VERSION = 'v2025-09-16'\n\n/**\n * Get the list of features available for a project\n */\nexport async function getProjectFeatures(projectId: string): Promise<string[]> {\n const client = await getProjectCliClient({\n apiVersion: PROJECT_FEATURES_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<string[]>({url: '/features'})\n}\n"],"names":["getProjectCliClient","PROJECT_FEATURES_API_VERSION","getProjectFeatures","projectId","client","apiVersion","requireUser","request","url"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,mBAAkB;AAEpD,OAAO,MAAMC,+BAA+B,cAAa;AAEzD;;CAEC,GACD,OAAO,eAAeC,mBAAmBC,SAAiB;IACxD,MAAMC,SAAS,MAAMJ,oBAAoB;QACvCK,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAW;QAACC,KAAK;IAAW;AACnD"}
@@ -1,11 +1,5 @@
1
1
  import { createRequester } from '@sanity/cli-core/request';
2
- const request = createRequester({
3
- middleware: {
4
- promise: {
5
- onlyBody: false
6
- }
7
- }
8
- });
2
+ const request = createRequester();
9
3
  /**
10
4
  * Gets the headers of a URL
11
5
  *
@@ -15,11 +9,11 @@ const request = createRequester({
15
9
  */ export async function getUrlHeaders(url, headers = {}) {
16
10
  const response = await request({
17
11
  headers,
18
- maxRedirects: 0,
19
12
  method: 'HEAD',
13
+ redirect: 'manual',
20
14
  url
21
15
  });
22
- return response.headers;
16
+ return Object.fromEntries(response.headers.entries());
23
17
  }
24
18
 
25
19
  //# sourceMappingURL=getUrlHeaders.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/getUrlHeaders.ts"],"sourcesContent":["import {createRequester} from '@sanity/cli-core/request'\n\nconst request = createRequester({middleware: {promise: {onlyBody: false}}})\n\n/**\n * Gets the headers of a URL\n *\n * @param url - The URL to get the headers from\n * @param headers - The headers to send with the request\n * @returns The headers of the response\n */\nexport async function getUrlHeaders(url: string, headers = {}): Promise<Record<string, string>> {\n const response = await request({\n headers,\n maxRedirects: 0,\n method: 'HEAD',\n url,\n })\n\n return response.headers\n}\n"],"names":["createRequester","request","middleware","promise","onlyBody","getUrlHeaders","url","headers","response","maxRedirects","method"],"mappings":"AAAA,SAAQA,eAAe,QAAO,2BAA0B;AAExD,MAAMC,UAAUD,gBAAgB;IAACE,YAAY;QAACC,SAAS;YAACC,UAAU;QAAK;IAAC;AAAC;AAEzE;;;;;;CAMC,GACD,OAAO,eAAeC,cAAcC,GAAW,EAAEC,UAAU,CAAC,CAAC;IAC3D,MAAMC,WAAW,MAAMP,QAAQ;QAC7BM;QACAE,cAAc;QACdC,QAAQ;QACRJ;IACF;IAEA,OAAOE,SAASD,OAAO;AACzB"}
1
+ {"version":3,"sources":["../../src/services/getUrlHeaders.ts"],"sourcesContent":["import {createRequester} from '@sanity/cli-core/request'\n\nconst request = createRequester()\n\n/**\n * Gets the headers of a URL\n *\n * @param url - The URL to get the headers from\n * @param headers - The headers to send with the request\n * @returns The headers of the response\n */\nexport async function getUrlHeaders(url: string, headers = {}): Promise<Record<string, string>> {\n const response = await request({\n headers,\n method: 'HEAD',\n redirect: 'manual',\n url,\n })\n\n return Object.fromEntries(response.headers.entries())\n}\n"],"names":["createRequester","request","getUrlHeaders","url","headers","response","method","redirect","Object","fromEntries","entries"],"mappings":"AAAA,SAAQA,eAAe,QAAO,2BAA0B;AAExD,MAAMC,UAAUD;AAEhB;;;;;;CAMC,GACD,OAAO,eAAeE,cAAcC,GAAW,EAAEC,UAAU,CAAC,CAAC;IAC3D,MAAMC,WAAW,MAAMJ,QAAQ;QAC7BG;QACAE,QAAQ;QACRC,UAAU;QACVJ;IACF;IAEA,OAAOK,OAAOC,WAAW,CAACJ,SAASD,OAAO,CAACM,OAAO;AACpD"}
@@ -6,7 +6,7 @@ export async function getUserGrants() {
6
6
  requireUser: true
7
7
  });
8
8
  return client.request({
9
- uri: '/users/me/grants'
9
+ url: '/users/me/grants'
10
10
  });
11
11
  }
12
12
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/grants.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\n\nimport {type UserGrantsResponse} from '../types/grants.js'\n\nexport const GRANTS_API_VERSION = '2025-01-01'\n\nexport async function getUserGrants(): Promise<UserGrantsResponse> {\n const client = await getGlobalCliClient({\n apiVersion: GRANTS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<UserGrantsResponse>({uri: '/users/me/grants'})\n}\n"],"names":["getGlobalCliClient","GRANTS_API_VERSION","getUserGrants","client","apiVersion","requireUser","request","uri"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AAInD,OAAO,MAAMC,qBAAqB,aAAY;AAE9C,OAAO,eAAeC;IACpB,MAAMC,SAAS,MAAMH,mBAAmB;QACtCI,YAAYH;QACZI,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAqB;QAACC,KAAK;IAAkB;AACpE"}
1
+ {"version":3,"sources":["../../src/services/grants.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\n\nimport {type UserGrantsResponse} from '../types/grants.js'\n\nexport const GRANTS_API_VERSION = '2025-01-01'\n\nexport async function getUserGrants(): Promise<UserGrantsResponse> {\n const client = await getGlobalCliClient({\n apiVersion: GRANTS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<UserGrantsResponse>({url: '/users/me/grants'})\n}\n"],"names":["getGlobalCliClient","GRANTS_API_VERSION","getUserGrants","client","apiVersion","requireUser","request","url"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AAInD,OAAO,MAAMC,qBAAqB,aAAY;AAE9C,OAAO,eAAeC;IACpB,MAAMC,SAAS,MAAMH,mBAAmB;QACtCI,YAAYH;QACZI,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAqB;QAACC,KAAK;IAAkB;AACpE"}
@@ -1,4 +1,5 @@
1
1
  import { getProjectCliClient } from '@sanity/cli-core';
2
+ import { HttpError } from '@sanity/cli-core/request';
2
3
  import { getUrlHeaders } from './getUrlHeaders.js';
3
4
  export const GRAPHQL_API_VERSION = 'v2025-09-19';
4
5
  /**
@@ -15,7 +16,7 @@ export const GRAPHQL_API_VERSION = 'v2025-09-19';
15
16
  });
16
17
  return client.request({
17
18
  method: 'GET',
18
- uri: '/apis/graphql'
19
+ url: '/apis/graphql'
19
20
  });
20
21
  }
21
22
  export async function deleteGraphQLAPI({ dataset, projectId, tag }) {
@@ -26,7 +27,7 @@ export async function deleteGraphQLAPI({ dataset, projectId, tag }) {
26
27
  });
27
28
  return client.request({
28
29
  method: 'DELETE',
29
- uri: `/apis/graphql/${dataset}/${tag}`
30
+ url: `/apis/graphql/${dataset}/${tag}`
30
31
  });
31
32
  }
32
33
  export async function validateGraphQLAPI({ dataset, enablePlayground, projectId, schema, tag }) {
@@ -86,7 +87,7 @@ export async function getCurrentSchemaProps(projectId, dataset, tag) {
86
87
  playgroundEnabled: res['x-sanity-graphql-playground'] === 'true'
87
88
  };
88
89
  } catch (err) {
89
- if (err instanceof Error && 'response' in err && typeof err.response === 'object' && err.response !== null && 'statusCode' in err.response && err.response.statusCode === 404) {
90
+ if (err instanceof HttpError && err.status === 404) {
90
91
  return {};
91
92
  }
92
93
  throw err;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/graphql.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\n\nimport {\n type DeployResponse,\n type GeneratedApiSpecification,\n type ValidationResponse,\n} from '../actions/graphql/types.js'\nimport {getUrlHeaders} from './getUrlHeaders.js'\n\nexport const GRAPHQL_API_VERSION = 'v2025-09-19'\n\nexport interface GraphQLEndpoint {\n dataset: string\n generation: string\n playgroundEnabled: boolean\n projectId: string\n tag: string\n}\n\n/**\n * List all GraphQL endpoints for a project\n * @param client - The API client to use for the request\n * @returns A promise that resolves to an array of GraphQL endpoints\n *\n * @internal\n */\nexport async function listGraphQLEndpoints(projectId: string): Promise<GraphQLEndpoint[]> {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<GraphQLEndpoint[]>({\n method: 'GET',\n uri: '/apis/graphql',\n })\n}\n\ninterface DeleteGraphQLAPIOptions {\n dataset: string\n projectId: string\n tag: string\n}\n\nexport async function deleteGraphQLAPI({dataset, projectId, tag}: DeleteGraphQLAPIOptions) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request({\n method: 'DELETE',\n uri: `/apis/graphql/${dataset}/${tag}`,\n })\n}\n\nexport async function validateGraphQLAPI({\n dataset,\n enablePlayground,\n projectId,\n schema,\n tag,\n}: {\n dataset: string\n enablePlayground: boolean\n projectId: string\n schema: GeneratedApiSpecification\n tag: string\n}) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<ValidationResponse>({\n body: {enablePlayground, schema},\n maxRedirects: 0,\n method: 'POST',\n url: `/apis/graphql/${dataset}/${tag}/validate`,\n })\n}\n\ninterface DeployGraphQLAPIOptions {\n dataset: string\n enablePlayground: boolean\n projectId: string\n schema: GeneratedApiSpecification\n tag: string\n}\n\nexport async function deployGraphQLAPI({\n dataset,\n enablePlayground,\n projectId,\n schema,\n tag,\n}: DeployGraphQLAPIOptions) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<DeployResponse>({\n body: {enablePlayground, schema},\n maxRedirects: 0,\n method: 'PUT',\n url: `/apis/graphql/${dataset}/${tag}`,\n })\n}\n\nexport async function getClientUrl(projectId: string, uri: string) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return `${client.config().url}/${uri.replace(/^\\//, '')}`\n}\n\nexport async function getCurrentSchemaProps(\n projectId: string,\n dataset: string,\n tag: string,\n): Promise<{\n currentGeneration?: string\n playgroundEnabled?: boolean\n}> {\n try {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n })\n\n const uri = `/apis/graphql/${dataset}/${tag}`\n const config = client.config()\n const apiUrl = `${config.url}/${uri.replace(/^\\//, '')}`\n\n const res = await getUrlHeaders(apiUrl, {\n Authorization: `Bearer ${config.token}`,\n })\n\n return {\n currentGeneration: res['x-sanity-graphql-generation'],\n playgroundEnabled: res['x-sanity-graphql-playground'] === 'true',\n }\n } catch (err) {\n if (\n err instanceof Error &&\n 'response' in err &&\n typeof err.response === 'object' &&\n err.response !== null &&\n 'statusCode' in err.response &&\n err.response.statusCode === 404\n ) {\n return {}\n }\n\n throw err\n }\n}\n"],"names":["getProjectCliClient","getUrlHeaders","GRAPHQL_API_VERSION","listGraphQLEndpoints","projectId","client","apiVersion","requireUser","request","method","uri","deleteGraphQLAPI","dataset","tag","validateGraphQLAPI","enablePlayground","schema","body","maxRedirects","url","deployGraphQLAPI","getClientUrl","config","replace","getCurrentSchemaProps","apiUrl","res","Authorization","token","currentGeneration","playgroundEnabled","err","Error","response","statusCode"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,mBAAkB;AAOpD,SAAQC,aAAa,QAAO,qBAAoB;AAEhD,OAAO,MAAMC,sBAAsB,cAAa;AAUhD;;;;;;CAMC,GACD,OAAO,eAAeC,qBAAqBC,SAAiB;IAC1D,MAAMC,SAAS,MAAML,oBAAoB;QACvCM,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAoB;QACvCC,QAAQ;QACRC,KAAK;IACP;AACF;AAQA,OAAO,eAAeC,iBAAiB,EAACC,OAAO,EAAER,SAAS,EAAES,GAAG,EAA0B;IACvF,MAAMR,SAAS,MAAML,oBAAoB;QACvCM,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAC;QACpBC,QAAQ;QACRC,KAAK,CAAC,cAAc,EAAEE,QAAQ,CAAC,EAAEC,KAAK;IACxC;AACF;AAEA,OAAO,eAAeC,mBAAmB,EACvCF,OAAO,EACPG,gBAAgB,EAChBX,SAAS,EACTY,MAAM,EACNH,GAAG,EAOJ;IACC,MAAMR,SAAS,MAAML,oBAAoB;QACvCM,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAqB;QACxCS,MAAM;YAACF;YAAkBC;QAAM;QAC/BE,cAAc;QACdT,QAAQ;QACRU,KAAK,CAAC,cAAc,EAAEP,QAAQ,CAAC,EAAEC,IAAI,SAAS,CAAC;IACjD;AACF;AAUA,OAAO,eAAeO,iBAAiB,EACrCR,OAAO,EACPG,gBAAgB,EAChBX,SAAS,EACTY,MAAM,EACNH,GAAG,EACqB;IACxB,MAAMR,SAAS,MAAML,oBAAoB;QACvCM,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAiB;QACpCS,MAAM;YAACF;YAAkBC;QAAM;QAC/BE,cAAc;QACdT,QAAQ;QACRU,KAAK,CAAC,cAAc,EAAEP,QAAQ,CAAC,EAAEC,KAAK;IACxC;AACF;AAEA,OAAO,eAAeQ,aAAajB,SAAiB,EAAEM,GAAW;IAC/D,MAAML,SAAS,MAAML,oBAAoB;QACvCM,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAO,GAAGF,OAAOiB,MAAM,GAAGH,GAAG,CAAC,CAAC,EAAET,IAAIa,OAAO,CAAC,OAAO,KAAK;AAC3D;AAEA,OAAO,eAAeC,sBACpBpB,SAAiB,EACjBQ,OAAe,EACfC,GAAW;IAKX,IAAI;QACF,MAAMR,SAAS,MAAML,oBAAoB;YACvCM,YAAYJ;YACZE;QACF;QAEA,MAAMM,MAAM,CAAC,cAAc,EAAEE,QAAQ,CAAC,EAAEC,KAAK;QAC7C,MAAMS,SAASjB,OAAOiB,MAAM;QAC5B,MAAMG,SAAS,GAAGH,OAAOH,GAAG,CAAC,CAAC,EAAET,IAAIa,OAAO,CAAC,OAAO,KAAK;QAExD,MAAMG,MAAM,MAAMzB,cAAcwB,QAAQ;YACtCE,eAAe,CAAC,OAAO,EAAEL,OAAOM,KAAK,EAAE;QACzC;QAEA,OAAO;YACLC,mBAAmBH,GAAG,CAAC,8BAA8B;YACrDI,mBAAmBJ,GAAG,CAAC,8BAA8B,KAAK;QAC5D;IACF,EAAE,OAAOK,KAAK;QACZ,IACEA,eAAeC,SACf,cAAcD,OACd,OAAOA,IAAIE,QAAQ,KAAK,YACxBF,IAAIE,QAAQ,KAAK,QACjB,gBAAgBF,IAAIE,QAAQ,IAC5BF,IAAIE,QAAQ,CAACC,UAAU,KAAK,KAC5B;YACA,OAAO,CAAC;QACV;QAEA,MAAMH;IACR;AACF"}
1
+ {"version":3,"sources":["../../src/services/graphql.ts"],"sourcesContent":["import {getProjectCliClient} from '@sanity/cli-core'\nimport {HttpError} from '@sanity/cli-core/request'\n\nimport {\n type DeployResponse,\n type GeneratedApiSpecification,\n type ValidationResponse,\n} from '../actions/graphql/types.js'\nimport {getUrlHeaders} from './getUrlHeaders.js'\n\nexport const GRAPHQL_API_VERSION = 'v2025-09-19'\n\nexport interface GraphQLEndpoint {\n dataset: string\n generation: string\n playgroundEnabled: boolean\n projectId: string\n tag: string\n}\n\n/**\n * List all GraphQL endpoints for a project\n * @param client - The API client to use for the request\n * @returns A promise that resolves to an array of GraphQL endpoints\n *\n * @internal\n */\nexport async function listGraphQLEndpoints(projectId: string): Promise<GraphQLEndpoint[]> {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<GraphQLEndpoint[]>({\n method: 'GET',\n url: '/apis/graphql',\n })\n}\n\ninterface DeleteGraphQLAPIOptions {\n dataset: string\n projectId: string\n tag: string\n}\n\nexport async function deleteGraphQLAPI({dataset, projectId, tag}: DeleteGraphQLAPIOptions) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request({\n method: 'DELETE',\n url: `/apis/graphql/${dataset}/${tag}`,\n })\n}\n\nexport async function validateGraphQLAPI({\n dataset,\n enablePlayground,\n projectId,\n schema,\n tag,\n}: {\n dataset: string\n enablePlayground: boolean\n projectId: string\n schema: GeneratedApiSpecification\n tag: string\n}) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<ValidationResponse>({\n body: {enablePlayground, schema},\n maxRedirects: 0,\n method: 'POST',\n url: `/apis/graphql/${dataset}/${tag}/validate`,\n })\n}\n\ninterface DeployGraphQLAPIOptions {\n dataset: string\n enablePlayground: boolean\n projectId: string\n schema: GeneratedApiSpecification\n tag: string\n}\n\nexport async function deployGraphQLAPI({\n dataset,\n enablePlayground,\n projectId,\n schema,\n tag,\n}: DeployGraphQLAPIOptions) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.request<DeployResponse>({\n body: {enablePlayground, schema},\n maxRedirects: 0,\n method: 'PUT',\n url: `/apis/graphql/${dataset}/${tag}`,\n })\n}\n\nexport async function getClientUrl(projectId: string, uri: string) {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return `${client.config().url}/${uri.replace(/^\\//, '')}`\n}\n\nexport async function getCurrentSchemaProps(\n projectId: string,\n dataset: string,\n tag: string,\n): Promise<{\n currentGeneration?: string\n playgroundEnabled?: boolean\n}> {\n try {\n const client = await getProjectCliClient({\n apiVersion: GRAPHQL_API_VERSION,\n projectId,\n })\n\n const uri = `/apis/graphql/${dataset}/${tag}`\n const config = client.config()\n const apiUrl = `${config.url}/${uri.replace(/^\\//, '')}`\n\n const res = await getUrlHeaders(apiUrl, {\n Authorization: `Bearer ${config.token}`,\n })\n\n return {\n currentGeneration: res['x-sanity-graphql-generation'],\n playgroundEnabled: res['x-sanity-graphql-playground'] === 'true',\n }\n } catch (err) {\n if (err instanceof HttpError && err.status === 404) {\n return {}\n }\n\n throw err\n }\n}\n"],"names":["getProjectCliClient","HttpError","getUrlHeaders","GRAPHQL_API_VERSION","listGraphQLEndpoints","projectId","client","apiVersion","requireUser","request","method","url","deleteGraphQLAPI","dataset","tag","validateGraphQLAPI","enablePlayground","schema","body","maxRedirects","deployGraphQLAPI","getClientUrl","uri","config","replace","getCurrentSchemaProps","apiUrl","res","Authorization","token","currentGeneration","playgroundEnabled","err","status"],"mappings":"AAAA,SAAQA,mBAAmB,QAAO,mBAAkB;AACpD,SAAQC,SAAS,QAAO,2BAA0B;AAOlD,SAAQC,aAAa,QAAO,qBAAoB;AAEhD,OAAO,MAAMC,sBAAsB,cAAa;AAUhD;;;;;;CAMC,GACD,OAAO,eAAeC,qBAAqBC,SAAiB;IAC1D,MAAMC,SAAS,MAAMN,oBAAoB;QACvCO,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAoB;QACvCC,QAAQ;QACRC,KAAK;IACP;AACF;AAQA,OAAO,eAAeC,iBAAiB,EAACC,OAAO,EAAER,SAAS,EAAES,GAAG,EAA0B;IACvF,MAAMR,SAAS,MAAMN,oBAAoB;QACvCO,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAC;QACpBC,QAAQ;QACRC,KAAK,CAAC,cAAc,EAAEE,QAAQ,CAAC,EAAEC,KAAK;IACxC;AACF;AAEA,OAAO,eAAeC,mBAAmB,EACvCF,OAAO,EACPG,gBAAgB,EAChBX,SAAS,EACTY,MAAM,EACNH,GAAG,EAOJ;IACC,MAAMR,SAAS,MAAMN,oBAAoB;QACvCO,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAqB;QACxCS,MAAM;YAACF;YAAkBC;QAAM;QAC/BE,cAAc;QACdT,QAAQ;QACRC,KAAK,CAAC,cAAc,EAAEE,QAAQ,CAAC,EAAEC,IAAI,SAAS,CAAC;IACjD;AACF;AAUA,OAAO,eAAeM,iBAAiB,EACrCP,OAAO,EACPG,gBAAgB,EAChBX,SAAS,EACTY,MAAM,EACNH,GAAG,EACqB;IACxB,MAAMR,SAAS,MAAMN,oBAAoB;QACvCO,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAiB;QACpCS,MAAM;YAACF;YAAkBC;QAAM;QAC/BE,cAAc;QACdT,QAAQ;QACRC,KAAK,CAAC,cAAc,EAAEE,QAAQ,CAAC,EAAEC,KAAK;IACxC;AACF;AAEA,OAAO,eAAeO,aAAahB,SAAiB,EAAEiB,GAAW;IAC/D,MAAMhB,SAAS,MAAMN,oBAAoB;QACvCO,YAAYJ;QACZE;QACAG,aAAa;IACf;IAEA,OAAO,GAAGF,OAAOiB,MAAM,GAAGZ,GAAG,CAAC,CAAC,EAAEW,IAAIE,OAAO,CAAC,OAAO,KAAK;AAC3D;AAEA,OAAO,eAAeC,sBACpBpB,SAAiB,EACjBQ,OAAe,EACfC,GAAW;IAKX,IAAI;QACF,MAAMR,SAAS,MAAMN,oBAAoB;YACvCO,YAAYJ;YACZE;QACF;QAEA,MAAMiB,MAAM,CAAC,cAAc,EAAET,QAAQ,CAAC,EAAEC,KAAK;QAC7C,MAAMS,SAASjB,OAAOiB,MAAM;QAC5B,MAAMG,SAAS,GAAGH,OAAOZ,GAAG,CAAC,CAAC,EAAEW,IAAIE,OAAO,CAAC,OAAO,KAAK;QAExD,MAAMG,MAAM,MAAMzB,cAAcwB,QAAQ;YACtCE,eAAe,CAAC,OAAO,EAAEL,OAAOM,KAAK,EAAE;QACzC;QAEA,OAAO;YACLC,mBAAmBH,GAAG,CAAC,8BAA8B;YACrDI,mBAAmBJ,GAAG,CAAC,8BAA8B,KAAK;QAC5D;IACF,EAAE,OAAOK,KAAK;QACZ,IAAIA,eAAe/B,aAAa+B,IAAIC,MAAM,KAAK,KAAK;YAClD,OAAO,CAAC;QACV;QAEA,MAAMD;IACR;AACF"}
@@ -6,7 +6,7 @@ export async function getHooksForProject(projectId) {
6
6
  requireUser: true
7
7
  });
8
8
  return client.request({
9
- uri: `/hooks/projects/${projectId}`
9
+ url: `/hooks/projects/${projectId}`
10
10
  });
11
11
  }
12
12
  export async function getHookMessagesForProject({ hookId, projectId }) {
@@ -15,7 +15,7 @@ export async function getHookMessagesForProject({ hookId, projectId }) {
15
15
  requireUser: true
16
16
  });
17
17
  return client.request({
18
- uri: `/hooks/projects/${projectId}/${hookId}/messages`
18
+ url: `/hooks/projects/${projectId}/${hookId}/messages`
19
19
  });
20
20
  }
21
21
  export async function getHookAttemptsForProject({ hookId, projectId }) {
@@ -24,7 +24,7 @@ export async function getHookAttemptsForProject({ hookId, projectId }) {
24
24
  requireUser: true
25
25
  });
26
26
  return client.request({
27
- uri: `/hooks/projects/${projectId}/${hookId}/attempts`
27
+ url: `/hooks/projects/${projectId}/${hookId}/attempts`
28
28
  });
29
29
  }
30
30
  export async function getHookAttempt({ attemptId, projectId }) {
@@ -33,7 +33,7 @@ export async function getHookAttempt({ attemptId, projectId }) {
33
33
  requireUser: true
34
34
  });
35
35
  return client.request({
36
- uri: `/hooks/projects/${projectId}/attempts/${attemptId}`
36
+ url: `/hooks/projects/${projectId}/attempts/${attemptId}`
37
37
  });
38
38
  }
39
39
  export async function listHooksForProject(projectId) {
@@ -42,7 +42,7 @@ export async function listHooksForProject(projectId) {
42
42
  requireUser: true
43
43
  });
44
44
  return client.request({
45
- uri: `/hooks/projects/${projectId}`
45
+ url: `/hooks/projects/${projectId}`
46
46
  });
47
47
  }
48
48
  export async function deleteHookForProject(projectId, hookId) {
@@ -52,7 +52,7 @@ export async function deleteHookForProject(projectId, hookId) {
52
52
  });
53
53
  return client.request({
54
54
  method: 'DELETE',
55
- uri: `/hooks/projects/${projectId}/${hookId}`
55
+ url: `/hooks/projects/${projectId}/${hookId}`
56
56
  });
57
57
  }
58
58
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/hooks.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\n\nimport {HOOK_API_VERSION} from '../actions/hook/constants.js'\nimport {type DeliveryAttempt, type Hook, type HookMessage} from '../actions/hook/types.js'\n\nexport async function getHooksForProject(projectId: string): Promise<Hook[]> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request<Hook[]>({uri: `/hooks/projects/${projectId}`})\n}\n\nexport async function getHookMessagesForProject({\n hookId,\n projectId,\n}: {\n hookId: string\n projectId: string\n}): Promise<HookMessage[]> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request<HookMessage[]>({\n uri: `/hooks/projects/${projectId}/${hookId}/messages`,\n })\n}\n\nexport async function getHookAttemptsForProject({\n hookId,\n projectId,\n}: {\n hookId: string\n projectId: string\n}): Promise<DeliveryAttempt[]> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request<DeliveryAttempt[]>({\n uri: `/hooks/projects/${projectId}/${hookId}/attempts`,\n })\n}\n\nexport async function getHookAttempt({\n attemptId,\n projectId,\n}: {\n attemptId: string\n projectId: string\n}): Promise<DeliveryAttempt> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request<DeliveryAttempt>({\n uri: `/hooks/projects/${projectId}/attempts/${attemptId}`,\n })\n}\n\nexport async function listHooksForProject(projectId: string): Promise<Hook[]> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request<Hook[]>({uri: `/hooks/projects/${projectId}`})\n}\n\nexport async function deleteHookForProject(projectId: string, hookId: string): Promise<void> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request({method: 'DELETE', uri: `/hooks/projects/${projectId}/${hookId}`})\n}\n"],"names":["getGlobalCliClient","HOOK_API_VERSION","getHooksForProject","projectId","client","apiVersion","requireUser","request","uri","getHookMessagesForProject","hookId","getHookAttemptsForProject","getHookAttempt","attemptId","listHooksForProject","deleteHookForProject","method"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AAEnD,SAAQC,gBAAgB,QAAO,+BAA8B;AAG7D,OAAO,eAAeC,mBAAmBC,SAAiB;IACxD,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAS;QAACC,KAAK,CAAC,gBAAgB,EAAEL,WAAW;IAAA;AACpE;AAEA,OAAO,eAAeM,0BAA0B,EAC9CC,MAAM,EACNP,SAAS,EAIV;IACC,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAgB;QACnCC,KAAK,CAAC,gBAAgB,EAAEL,UAAU,CAAC,EAAEO,OAAO,SAAS,CAAC;IACxD;AACF;AAEA,OAAO,eAAeC,0BAA0B,EAC9CD,MAAM,EACNP,SAAS,EAIV;IACC,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAoB;QACvCC,KAAK,CAAC,gBAAgB,EAAEL,UAAU,CAAC,EAAEO,OAAO,SAAS,CAAC;IACxD;AACF;AAEA,OAAO,eAAeE,eAAe,EACnCC,SAAS,EACTV,SAAS,EAIV;IACC,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAkB;QACrCC,KAAK,CAAC,gBAAgB,EAAEL,UAAU,UAAU,EAAEU,WAAW;IAC3D;AACF;AAEA,OAAO,eAAeC,oBAAoBX,SAAiB;IACzD,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAS;QAACC,KAAK,CAAC,gBAAgB,EAAEL,WAAW;IAAA;AACpE;AAEA,OAAO,eAAeY,qBAAqBZ,SAAiB,EAAEO,MAAc;IAC1E,MAAMN,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAC;QAACS,QAAQ;QAAUR,KAAK,CAAC,gBAAgB,EAAEL,UAAU,CAAC,EAAEO,QAAQ;IAAA;AACxF"}
1
+ {"version":3,"sources":["../../src/services/hooks.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\n\nimport {HOOK_API_VERSION} from '../actions/hook/constants.js'\nimport {type DeliveryAttempt, type Hook, type HookMessage} from '../actions/hook/types.js'\n\nexport async function getHooksForProject(projectId: string): Promise<Hook[]> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request<Hook[]>({url: `/hooks/projects/${projectId}`})\n}\n\nexport async function getHookMessagesForProject({\n hookId,\n projectId,\n}: {\n hookId: string\n projectId: string\n}): Promise<HookMessage[]> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request<HookMessage[]>({\n url: `/hooks/projects/${projectId}/${hookId}/messages`,\n })\n}\n\nexport async function getHookAttemptsForProject({\n hookId,\n projectId,\n}: {\n hookId: string\n projectId: string\n}): Promise<DeliveryAttempt[]> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request<DeliveryAttempt[]>({\n url: `/hooks/projects/${projectId}/${hookId}/attempts`,\n })\n}\n\nexport async function getHookAttempt({\n attemptId,\n projectId,\n}: {\n attemptId: string\n projectId: string\n}): Promise<DeliveryAttempt> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request<DeliveryAttempt>({\n url: `/hooks/projects/${projectId}/attempts/${attemptId}`,\n })\n}\n\nexport async function listHooksForProject(projectId: string): Promise<Hook[]> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request<Hook[]>({url: `/hooks/projects/${projectId}`})\n}\n\nexport async function deleteHookForProject(projectId: string, hookId: string): Promise<void> {\n const client = await getGlobalCliClient({\n apiVersion: HOOK_API_VERSION,\n requireUser: true,\n })\n\n return client.request({method: 'DELETE', url: `/hooks/projects/${projectId}/${hookId}`})\n}\n"],"names":["getGlobalCliClient","HOOK_API_VERSION","getHooksForProject","projectId","client","apiVersion","requireUser","request","url","getHookMessagesForProject","hookId","getHookAttemptsForProject","getHookAttempt","attemptId","listHooksForProject","deleteHookForProject","method"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AAEnD,SAAQC,gBAAgB,QAAO,+BAA8B;AAG7D,OAAO,eAAeC,mBAAmBC,SAAiB;IACxD,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAS;QAACC,KAAK,CAAC,gBAAgB,EAAEL,WAAW;IAAA;AACpE;AAEA,OAAO,eAAeM,0BAA0B,EAC9CC,MAAM,EACNP,SAAS,EAIV;IACC,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAgB;QACnCC,KAAK,CAAC,gBAAgB,EAAEL,UAAU,CAAC,EAAEO,OAAO,SAAS,CAAC;IACxD;AACF;AAEA,OAAO,eAAeC,0BAA0B,EAC9CD,MAAM,EACNP,SAAS,EAIV;IACC,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAoB;QACvCC,KAAK,CAAC,gBAAgB,EAAEL,UAAU,CAAC,EAAEO,OAAO,SAAS,CAAC;IACxD;AACF;AAEA,OAAO,eAAeE,eAAe,EACnCC,SAAS,EACTV,SAAS,EAIV;IACC,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAkB;QACrCC,KAAK,CAAC,gBAAgB,EAAEL,UAAU,UAAU,EAAEU,WAAW;IAC3D;AACF;AAEA,OAAO,eAAeC,oBAAoBX,SAAiB;IACzD,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAS;QAACC,KAAK,CAAC,gBAAgB,EAAEL,WAAW;IAAA;AACpE;AAEA,OAAO,eAAeY,qBAAqBZ,SAAiB,EAAEO,MAAc;IAC1E,MAAMN,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAC;QAACS,QAAQ;QAAUR,KAAK,CAAC,gBAAgB,EAAEL,UAAU,CAAC,EAAEO,QAAQ;IAAA;AACxF"}
@@ -22,14 +22,14 @@ const debug = subdebug('mcp:service');
22
22
  withStamp: false
23
23
  },
24
24
  method: 'POST',
25
- uri: '/auth/session/create'
25
+ url: '/auth/session/create'
26
26
  });
27
27
  const tokenResponse = await client.request({
28
28
  method: 'GET',
29
29
  query: {
30
30
  sid: sessionResponse.sid
31
31
  },
32
- uri: '/auth/fetch'
32
+ url: '/auth/fetch'
33
33
  });
34
34
  return tokenResponse.token;
35
35
  }
@@ -59,7 +59,7 @@ const debug = subdebug('mcp:service');
59
59
  try {
60
60
  await client.request({
61
61
  timeout: 2500,
62
- uri: '/users/me'
62
+ url: '/users/me'
63
63
  });
64
64
  return true;
65
65
  } catch (err) {
@@ -85,7 +85,7 @@ const debug = subdebug('mcp:service');
85
85
  return await client.request({
86
86
  method: 'GET',
87
87
  timeout: 1000,
88
- uri: '/journey/mcp/post-init-prompt'
88
+ url: '/journey/mcp/post-init-prompt'
89
89
  });
90
90
  }
91
91
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/mcp.ts"],"sourcesContent":["import {getGlobalCliClient, subdebug} from '@sanity/cli-core'\nimport {isHttpError} from '@sanity/client'\n\nconst MCP_API_VERSION = '2025-12-09'\nexport const MCP_SERVER_URL = 'https://mcp.sanity.io'\nexport const MCP_JOURNEY_API_VERSION = 'v2024-02-23'\n\nconst debug = subdebug('mcp:service')\n\ninterface PostInitPromptResponse {\n message?: string\n}\n\n/**\n * Create a child token for MCP usage\n * This token is tied to the parent CLI token and will be invalidated\n * when the parent token is invalidated (e.g., on logout)\n *\n * @returns The MCP token string\n * @internal\n */\nexport async function createMCPToken(): Promise<string> {\n const client = await getGlobalCliClient({\n apiVersion: MCP_API_VERSION,\n requireUser: true,\n })\n\n const sessionResponse = await client.request<{id: string; sid: string}>({\n body: {\n sourceId: 'sanity-mcp',\n withStamp: false,\n },\n method: 'POST',\n uri: '/auth/session/create',\n })\n\n const tokenResponse = await client.request<{label: string; token: string}>({\n method: 'GET',\n query: {sid: sessionResponse.sid},\n uri: '/auth/fetch',\n })\n\n return tokenResponse.token\n}\n\n/**\n * Validate an MCP token by checking it against the Sanity API.\n *\n * MCP tokens are standard Sanity session tokens (`sk…`), so we validate\n * by calling `/users/me` on `api.sanity.io`. A 200 means the token is\n * alive; a 401/403 means it is dead and the caller should prompt for\n * re-configuration.\n *\n * Transient errors (5xx, network failures, timeouts) are rethrown so the\n * caller can decide how to handle them — typically by assuming the token\n * is still valid rather than falsely marking it as expired.\n *\n * We intentionally do NOT probe `mcp.sanity.io` because the MCP server\n * lets invalid bearer tokens through for protocol-compatibility reasons,\n * which causes the CLI to falsely treat dead tokens as valid.\n *\n * @internal\n */\nexport async function validateMCPToken(token: string): Promise<boolean> {\n const client = await getGlobalCliClient({\n apiVersion: MCP_API_VERSION,\n requireUser: false,\n token,\n })\n\n try {\n await client.request({timeout: 2500, uri: '/users/me'})\n return true\n } catch (err) {\n // 401/403 definitively mean \"dead token\"\n if (isHttpError(err) && (err.statusCode === 401 || err.statusCode === 403)) {\n debug('MCP token validation failed with %d', err.statusCode)\n return false\n }\n\n // Everything else (5xx, network errors, timeouts) is rethrown so the\n // caller can decide — typically assumes valid rather than forcing re-auth.\n throw err\n }\n}\n\n/**\n * Fetches the post-init MCP prompt from the Journey API and interpolates editor names.\n * Falls back to a hardcoded default if the API call fails, times out, or returns empty.\n * Text wrapped in **markers** will be formatted with cyan color.\n */\nexport async function getPostInitPrompt() {\n const client = await getGlobalCliClient({apiVersion: MCP_JOURNEY_API_VERSION, requireUser: false})\n return await client.request<PostInitPromptResponse | null>({\n method: 'GET',\n timeout: 1000,\n uri: '/journey/mcp/post-init-prompt',\n })\n}\n"],"names":["getGlobalCliClient","subdebug","isHttpError","MCP_API_VERSION","MCP_SERVER_URL","MCP_JOURNEY_API_VERSION","debug","createMCPToken","client","apiVersion","requireUser","sessionResponse","request","body","sourceId","withStamp","method","uri","tokenResponse","query","sid","token","validateMCPToken","timeout","err","statusCode","getPostInitPrompt"],"mappings":"AAAA,SAAQA,kBAAkB,EAAEC,QAAQ,QAAO,mBAAkB;AAC7D,SAAQC,WAAW,QAAO,iBAAgB;AAE1C,MAAMC,kBAAkB;AACxB,OAAO,MAAMC,iBAAiB,wBAAuB;AACrD,OAAO,MAAMC,0BAA0B,cAAa;AAEpD,MAAMC,QAAQL,SAAS;AAMvB;;;;;;;CAOC,GACD,OAAO,eAAeM;IACpB,MAAMC,SAAS,MAAMR,mBAAmB;QACtCS,YAAYN;QACZO,aAAa;IACf;IAEA,MAAMC,kBAAkB,MAAMH,OAAOI,OAAO,CAA4B;QACtEC,MAAM;YACJC,UAAU;YACVC,WAAW;QACb;QACAC,QAAQ;QACRC,KAAK;IACP;IAEA,MAAMC,gBAAgB,MAAMV,OAAOI,OAAO,CAAiC;QACzEI,QAAQ;QACRG,OAAO;YAACC,KAAKT,gBAAgBS,GAAG;QAAA;QAChCH,KAAK;IACP;IAEA,OAAOC,cAAcG,KAAK;AAC5B;AAEA;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,eAAeC,iBAAiBD,KAAa;IAClD,MAAMb,SAAS,MAAMR,mBAAmB;QACtCS,YAAYN;QACZO,aAAa;QACbW;IACF;IAEA,IAAI;QACF,MAAMb,OAAOI,OAAO,CAAC;YAACW,SAAS;YAAMN,KAAK;QAAW;QACrD,OAAO;IACT,EAAE,OAAOO,KAAK;QACZ,yCAAyC;QACzC,IAAItB,YAAYsB,QAASA,CAAAA,IAAIC,UAAU,KAAK,OAAOD,IAAIC,UAAU,KAAK,GAAE,GAAI;YAC1EnB,MAAM,uCAAuCkB,IAAIC,UAAU;YAC3D,OAAO;QACT;QAEA,qEAAqE;QACrE,2EAA2E;QAC3E,MAAMD;IACR;AACF;AAEA;;;;CAIC,GACD,OAAO,eAAeE;IACpB,MAAMlB,SAAS,MAAMR,mBAAmB;QAACS,YAAYJ;QAAyBK,aAAa;IAAK;IAChG,OAAO,MAAMF,OAAOI,OAAO,CAAgC;QACzDI,QAAQ;QACRO,SAAS;QACTN,KAAK;IACP;AACF"}
1
+ {"version":3,"sources":["../../src/services/mcp.ts"],"sourcesContent":["import {getGlobalCliClient, subdebug} from '@sanity/cli-core'\nimport {isHttpError} from '@sanity/client'\n\nconst MCP_API_VERSION = '2025-12-09'\nexport const MCP_SERVER_URL = 'https://mcp.sanity.io'\nexport const MCP_JOURNEY_API_VERSION = 'v2024-02-23'\n\nconst debug = subdebug('mcp:service')\n\ninterface PostInitPromptResponse {\n message?: string\n}\n\n/**\n * Create a child token for MCP usage\n * This token is tied to the parent CLI token and will be invalidated\n * when the parent token is invalidated (e.g., on logout)\n *\n * @returns The MCP token string\n * @internal\n */\nexport async function createMCPToken(): Promise<string> {\n const client = await getGlobalCliClient({\n apiVersion: MCP_API_VERSION,\n requireUser: true,\n })\n\n const sessionResponse = await client.request<{id: string; sid: string}>({\n body: {\n sourceId: 'sanity-mcp',\n withStamp: false,\n },\n method: 'POST',\n url: '/auth/session/create',\n })\n\n const tokenResponse = await client.request<{label: string; token: string}>({\n method: 'GET',\n query: {sid: sessionResponse.sid},\n url: '/auth/fetch',\n })\n\n return tokenResponse.token\n}\n\n/**\n * Validate an MCP token by checking it against the Sanity API.\n *\n * MCP tokens are standard Sanity session tokens (`sk…`), so we validate\n * by calling `/users/me` on `api.sanity.io`. A 200 means the token is\n * alive; a 401/403 means it is dead and the caller should prompt for\n * re-configuration.\n *\n * Transient errors (5xx, network failures, timeouts) are rethrown so the\n * caller can decide how to handle them — typically by assuming the token\n * is still valid rather than falsely marking it as expired.\n *\n * We intentionally do NOT probe `mcp.sanity.io` because the MCP server\n * lets invalid bearer tokens through for protocol-compatibility reasons,\n * which causes the CLI to falsely treat dead tokens as valid.\n *\n * @internal\n */\nexport async function validateMCPToken(token: string): Promise<boolean> {\n const client = await getGlobalCliClient({\n apiVersion: MCP_API_VERSION,\n requireUser: false,\n token,\n })\n\n try {\n await client.request({timeout: 2500, url: '/users/me'})\n return true\n } catch (err) {\n // 401/403 definitively mean \"dead token\"\n if (isHttpError(err) && (err.statusCode === 401 || err.statusCode === 403)) {\n debug('MCP token validation failed with %d', err.statusCode)\n return false\n }\n\n // Everything else (5xx, network errors, timeouts) is rethrown so the\n // caller can decide — typically assumes valid rather than forcing re-auth.\n throw err\n }\n}\n\n/**\n * Fetches the post-init MCP prompt from the Journey API and interpolates editor names.\n * Falls back to a hardcoded default if the API call fails, times out, or returns empty.\n * Text wrapped in **markers** will be formatted with cyan color.\n */\nexport async function getPostInitPrompt() {\n const client = await getGlobalCliClient({apiVersion: MCP_JOURNEY_API_VERSION, requireUser: false})\n return await client.request<PostInitPromptResponse | null>({\n method: 'GET',\n timeout: 1000,\n url: '/journey/mcp/post-init-prompt',\n })\n}\n"],"names":["getGlobalCliClient","subdebug","isHttpError","MCP_API_VERSION","MCP_SERVER_URL","MCP_JOURNEY_API_VERSION","debug","createMCPToken","client","apiVersion","requireUser","sessionResponse","request","body","sourceId","withStamp","method","url","tokenResponse","query","sid","token","validateMCPToken","timeout","err","statusCode","getPostInitPrompt"],"mappings":"AAAA,SAAQA,kBAAkB,EAAEC,QAAQ,QAAO,mBAAkB;AAC7D,SAAQC,WAAW,QAAO,iBAAgB;AAE1C,MAAMC,kBAAkB;AACxB,OAAO,MAAMC,iBAAiB,wBAAuB;AACrD,OAAO,MAAMC,0BAA0B,cAAa;AAEpD,MAAMC,QAAQL,SAAS;AAMvB;;;;;;;CAOC,GACD,OAAO,eAAeM;IACpB,MAAMC,SAAS,MAAMR,mBAAmB;QACtCS,YAAYN;QACZO,aAAa;IACf;IAEA,MAAMC,kBAAkB,MAAMH,OAAOI,OAAO,CAA4B;QACtEC,MAAM;YACJC,UAAU;YACVC,WAAW;QACb;QACAC,QAAQ;QACRC,KAAK;IACP;IAEA,MAAMC,gBAAgB,MAAMV,OAAOI,OAAO,CAAiC;QACzEI,QAAQ;QACRG,OAAO;YAACC,KAAKT,gBAAgBS,GAAG;QAAA;QAChCH,KAAK;IACP;IAEA,OAAOC,cAAcG,KAAK;AAC5B;AAEA;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,eAAeC,iBAAiBD,KAAa;IAClD,MAAMb,SAAS,MAAMR,mBAAmB;QACtCS,YAAYN;QACZO,aAAa;QACbW;IACF;IAEA,IAAI;QACF,MAAMb,OAAOI,OAAO,CAAC;YAACW,SAAS;YAAMN,KAAK;QAAW;QACrD,OAAO;IACT,EAAE,OAAOO,KAAK;QACZ,yCAAyC;QACzC,IAAItB,YAAYsB,QAASA,CAAAA,IAAIC,UAAU,KAAK,OAAOD,IAAIC,UAAU,KAAK,GAAE,GAAI;YAC1EnB,MAAM,uCAAuCkB,IAAIC,UAAU;YAC3D,OAAO;QACT;QAEA,qEAAqE;QACrE,2EAA2E;QAC3E,MAAMD;IACR;AACF;AAEA;;;;CAIC,GACD,OAAO,eAAeE;IACpB,MAAMlB,SAAS,MAAMR,mBAAmB;QAACS,YAAYJ;QAAyBK,aAAa;IAAK;IAChG,OAAO,MAAMF,OAAOI,OAAO,CAAgC;QACzDI,QAAQ;QACRO,SAAS;QACTN,KAAK;IACP;AACF"}
@@ -31,7 +31,7 @@ async function getMediaLibraryClient() {
31
31
  ]
32
32
  },
33
33
  method: 'POST',
34
- uri: `/media-libraries/${mediaLibraryId}/mutate`
34
+ url: `/media-libraries/${mediaLibraryId}/mutate`
35
35
  });
36
36
  }
37
37
  /**
@@ -47,7 +47,7 @@ async function getMediaLibraryClient() {
47
47
  query: {
48
48
  projectId
49
49
  },
50
- uri: `/media-libraries`
50
+ url: `/media-libraries`
51
51
  });
52
52
  return response.data.filter((library)=>library.status === 'active');
53
53
  }
@@ -67,7 +67,7 @@ async function getMediaLibraryClient() {
67
67
  }))
68
68
  },
69
69
  method: 'POST',
70
- uri: `/media-libraries/${mediaLibraryId}/mutate`
70
+ url: `/media-libraries/${mediaLibraryId}/mutate`
71
71
  });
72
72
  }
73
73
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/mediaLibraries.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\nimport {\n MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME,\n type MediaLibraryAssetAspectDocument,\n} from '@sanity/types'\n\nexport const MEDIA_LIBRARY_API_VERSION = 'v2025-02-19'\n\nasync function getMediaLibraryClient() {\n return getGlobalCliClient({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n requireUser: true,\n })\n}\n\ninterface DeleteAspectOptions {\n aspectName: string\n mediaLibraryId: string\n projectId: string\n}\n\ninterface DeleteAspectResponse {\n results: Array<{id: string}>\n}\n\n/**\n * Delete an aspect from a media library\n * @param options - The options for deleting an aspect\n * @returns A promise that resolves to the deletion response\n *\n * @internal\n */\nexport async function deleteAspect(options: DeleteAspectOptions): Promise<DeleteAspectResponse> {\n const {aspectName, mediaLibraryId} = options\n\n const client = await getMediaLibraryClient()\n\n return client.request<DeleteAspectResponse>({\n body: {\n mutations: [\n {\n delete: {\n params: {\n id: aspectName,\n type: MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME,\n },\n query: `*[_type == $type && _id == $id]`,\n },\n },\n ],\n },\n method: 'POST',\n uri: `/media-libraries/${mediaLibraryId}/mutate`,\n })\n}\n\nexport interface MediaLibrary {\n id: string\n organizationId: string\n status: 'active' | 'inactive'\n}\n\ninterface MediaLibrariesResponse {\n data: MediaLibrary[]\n}\n\n/**\n * Get a list of media libraries for a project\n * @param projectId - The project ID\n * @returns A promise that resolves to the media libraries\n *\n * @internal\n */\nexport async function getMediaLibraries(projectId: string): Promise<MediaLibrary[]> {\n const client = await getMediaLibraryClient()\n\n const response = await client.request<MediaLibrariesResponse>({\n method: 'GET',\n query: {\n projectId,\n },\n uri: `/media-libraries`,\n })\n\n return response.data.filter((library) => library.status === 'active')\n}\n\ninterface DeployAspectsOptions {\n aspects: MediaLibraryAssetAspectDocument[]\n mediaLibraryId: string\n}\n\ninterface DeployAspectsResponse {\n results: Array<{id: string; operation: string}>\n}\n\n/**\n * Deploy one or more aspects to a media library\n * @param options - The options for deploying aspects\n * @returns A promise that resolves to the deployment response\n *\n * @internal\n */\nexport async function deployAspects(options: DeployAspectsOptions): Promise<DeployAspectsResponse> {\n const {aspects, mediaLibraryId} = options\n\n const client = await getMediaLibraryClient()\n\n return client.request<DeployAspectsResponse>({\n body: {\n mutations: aspects.map((aspect) => ({\n createOrReplace: aspect,\n })),\n },\n method: 'POST',\n uri: `/media-libraries/${mediaLibraryId}/mutate`,\n })\n}\n"],"names":["getGlobalCliClient","MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME","MEDIA_LIBRARY_API_VERSION","getMediaLibraryClient","apiVersion","requireUser","deleteAspect","options","aspectName","mediaLibraryId","client","request","body","mutations","delete","params","id","type","query","method","uri","getMediaLibraries","projectId","response","data","filter","library","status","deployAspects","aspects","map","aspect","createOrReplace"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AACnD,SACEC,oCAAoC,QAE/B,gBAAe;AAEtB,OAAO,MAAMC,4BAA4B,cAAa;AAEtD,eAAeC;IACb,OAAOH,mBAAmB;QACxBI,YAAYF;QACZG,aAAa;IACf;AACF;AAYA;;;;;;CAMC,GACD,OAAO,eAAeC,aAAaC,OAA4B;IAC7D,MAAM,EAACC,UAAU,EAAEC,cAAc,EAAC,GAAGF;IAErC,MAAMG,SAAS,MAAMP;IAErB,OAAOO,OAAOC,OAAO,CAAuB;QAC1CC,MAAM;YACJC,WAAW;gBACT;oBACEC,QAAQ;wBACNC,QAAQ;4BACNC,IAAIR;4BACJS,MAAMhB;wBACR;wBACAiB,OAAO,CAAC,+BAA+B,CAAC;oBAC1C;gBACF;aACD;QACH;QACAC,QAAQ;QACRC,KAAK,CAAC,iBAAiB,EAAEX,eAAe,OAAO,CAAC;IAClD;AACF;AAYA;;;;;;CAMC,GACD,OAAO,eAAeY,kBAAkBC,SAAiB;IACvD,MAAMZ,SAAS,MAAMP;IAErB,MAAMoB,WAAW,MAAMb,OAAOC,OAAO,CAAyB;QAC5DQ,QAAQ;QACRD,OAAO;YACLI;QACF;QACAF,KAAK,CAAC,gBAAgB,CAAC;IACzB;IAEA,OAAOG,SAASC,IAAI,CAACC,MAAM,CAAC,CAACC,UAAYA,QAAQC,MAAM,KAAK;AAC9D;AAWA;;;;;;CAMC,GACD,OAAO,eAAeC,cAAcrB,OAA6B;IAC/D,MAAM,EAACsB,OAAO,EAAEpB,cAAc,EAAC,GAAGF;IAElC,MAAMG,SAAS,MAAMP;IAErB,OAAOO,OAAOC,OAAO,CAAwB;QAC3CC,MAAM;YACJC,WAAWgB,QAAQC,GAAG,CAAC,CAACC,SAAY,CAAA;oBAClCC,iBAAiBD;gBACnB,CAAA;QACF;QACAZ,QAAQ;QACRC,KAAK,CAAC,iBAAiB,EAAEX,eAAe,OAAO,CAAC;IAClD;AACF"}
1
+ {"version":3,"sources":["../../src/services/mediaLibraries.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\nimport {\n MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME,\n type MediaLibraryAssetAspectDocument,\n} from '@sanity/types'\n\nexport const MEDIA_LIBRARY_API_VERSION = 'v2025-02-19'\n\nasync function getMediaLibraryClient() {\n return getGlobalCliClient({\n apiVersion: MEDIA_LIBRARY_API_VERSION,\n requireUser: true,\n })\n}\n\ninterface DeleteAspectOptions {\n aspectName: string\n mediaLibraryId: string\n projectId: string\n}\n\ninterface DeleteAspectResponse {\n results: Array<{id: string}>\n}\n\n/**\n * Delete an aspect from a media library\n * @param options - The options for deleting an aspect\n * @returns A promise that resolves to the deletion response\n *\n * @internal\n */\nexport async function deleteAspect(options: DeleteAspectOptions): Promise<DeleteAspectResponse> {\n const {aspectName, mediaLibraryId} = options\n\n const client = await getMediaLibraryClient()\n\n return client.request<DeleteAspectResponse>({\n body: {\n mutations: [\n {\n delete: {\n params: {\n id: aspectName,\n type: MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME,\n },\n query: `*[_type == $type && _id == $id]`,\n },\n },\n ],\n },\n method: 'POST',\n url: `/media-libraries/${mediaLibraryId}/mutate`,\n })\n}\n\nexport interface MediaLibrary {\n id: string\n organizationId: string\n status: 'active' | 'inactive'\n}\n\ninterface MediaLibrariesResponse {\n data: MediaLibrary[]\n}\n\n/**\n * Get a list of media libraries for a project\n * @param projectId - The project ID\n * @returns A promise that resolves to the media libraries\n *\n * @internal\n */\nexport async function getMediaLibraries(projectId: string): Promise<MediaLibrary[]> {\n const client = await getMediaLibraryClient()\n\n const response = await client.request<MediaLibrariesResponse>({\n method: 'GET',\n query: {\n projectId,\n },\n url: `/media-libraries`,\n })\n\n return response.data.filter((library) => library.status === 'active')\n}\n\ninterface DeployAspectsOptions {\n aspects: MediaLibraryAssetAspectDocument[]\n mediaLibraryId: string\n}\n\ninterface DeployAspectsResponse {\n results: Array<{id: string; operation: string}>\n}\n\n/**\n * Deploy one or more aspects to a media library\n * @param options - The options for deploying aspects\n * @returns A promise that resolves to the deployment response\n *\n * @internal\n */\nexport async function deployAspects(options: DeployAspectsOptions): Promise<DeployAspectsResponse> {\n const {aspects, mediaLibraryId} = options\n\n const client = await getMediaLibraryClient()\n\n return client.request<DeployAspectsResponse>({\n body: {\n mutations: aspects.map((aspect) => ({\n createOrReplace: aspect,\n })),\n },\n method: 'POST',\n url: `/media-libraries/${mediaLibraryId}/mutate`,\n })\n}\n"],"names":["getGlobalCliClient","MEDIA_LIBRARY_ASSET_ASPECT_TYPE_NAME","MEDIA_LIBRARY_API_VERSION","getMediaLibraryClient","apiVersion","requireUser","deleteAspect","options","aspectName","mediaLibraryId","client","request","body","mutations","delete","params","id","type","query","method","url","getMediaLibraries","projectId","response","data","filter","library","status","deployAspects","aspects","map","aspect","createOrReplace"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AACnD,SACEC,oCAAoC,QAE/B,gBAAe;AAEtB,OAAO,MAAMC,4BAA4B,cAAa;AAEtD,eAAeC;IACb,OAAOH,mBAAmB;QACxBI,YAAYF;QACZG,aAAa;IACf;AACF;AAYA;;;;;;CAMC,GACD,OAAO,eAAeC,aAAaC,OAA4B;IAC7D,MAAM,EAACC,UAAU,EAAEC,cAAc,EAAC,GAAGF;IAErC,MAAMG,SAAS,MAAMP;IAErB,OAAOO,OAAOC,OAAO,CAAuB;QAC1CC,MAAM;YACJC,WAAW;gBACT;oBACEC,QAAQ;wBACNC,QAAQ;4BACNC,IAAIR;4BACJS,MAAMhB;wBACR;wBACAiB,OAAO,CAAC,+BAA+B,CAAC;oBAC1C;gBACF;aACD;QACH;QACAC,QAAQ;QACRC,KAAK,CAAC,iBAAiB,EAAEX,eAAe,OAAO,CAAC;IAClD;AACF;AAYA;;;;;;CAMC,GACD,OAAO,eAAeY,kBAAkBC,SAAiB;IACvD,MAAMZ,SAAS,MAAMP;IAErB,MAAMoB,WAAW,MAAMb,OAAOC,OAAO,CAAyB;QAC5DQ,QAAQ;QACRD,OAAO;YACLI;QACF;QACAF,KAAK,CAAC,gBAAgB,CAAC;IACzB;IAEA,OAAOG,SAASC,IAAI,CAACC,MAAM,CAAC,CAACC,UAAYA,QAAQC,MAAM,KAAK;AAC9D;AAWA;;;;;;CAMC,GACD,OAAO,eAAeC,cAAcrB,OAA6B;IAC/D,MAAM,EAACsB,OAAO,EAAEpB,cAAc,EAAC,GAAGF;IAElC,MAAMG,SAAS,MAAMP;IAErB,OAAOO,OAAOC,OAAO,CAAwB;QAC3CC,MAAM;YACJC,WAAWgB,QAAQC,GAAG,CAAC,CAACC,SAAY,CAAA;oBAClCC,iBAAiBD;gBACnB,CAAA;QACF;QACAZ,QAAQ;QACRC,KAAK,CAAC,iBAAiB,EAAEX,eAAe,OAAO,CAAC;IAClD;AACF"}
@@ -5,12 +5,7 @@ import { TERMS_OF_SERVICE_FALLBACK_NOTICE, TERMS_OF_SERVICE_FALLBACK_URL } from
5
5
  const debug = subdebug('new:provision');
6
6
  /** Provision API version for minting unclaimed projects. */ export const PROVISION_API_VERSION = 'v2026-06-23';
7
7
  const request = createRequester({
8
- middleware: {
9
- httpErrors: false,
10
- promise: {
11
- onlyBody: false
12
- }
13
- }
8
+ httpErrors: false
14
9
  });
15
10
  function getProvisionApiBase() {
16
11
  const override = process.env.SANITY_API_HOST;
@@ -76,16 +71,16 @@ function parseProvisionResponse(body) {
76
71
  method: 'POST',
77
72
  url
78
73
  });
79
- if (response.statusCode === 404) {
74
+ if (response.status === 404) {
80
75
  throw new Error('Creating projects without an account is currently unavailable. Try again later, or run `sanity login` and `sanity init`.');
81
76
  }
82
- if (response.statusCode === 429) {
77
+ if (response.status === 429) {
83
78
  throw new Error('Project creation rate limit reached for this machine. Try again later.');
84
79
  }
85
- if (response.statusCode < 200 || response.statusCode >= 300) {
86
- throw new Error(`Project creation failed (HTTP ${response.statusCode}). Try again later.`);
80
+ if (response.status < 200 || response.status >= 300) {
81
+ throw new Error(`Project creation failed (HTTP ${response.status}). Try again later.`);
87
82
  }
88
- return parseProvisionResponse(response.body);
83
+ return parseProvisionResponse(response.text());
89
84
  }
90
85
 
91
86
  //# sourceMappingURL=mintProject.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/mintProject.ts"],"sourcesContent":["import {subdebug} from '@sanity/cli-core/debug'\nimport {createRequester} from '@sanity/cli-core/request'\nimport {isStaging} from '@sanity/cli-core/util'\n\nimport {\n TERMS_OF_SERVICE_FALLBACK_NOTICE,\n TERMS_OF_SERVICE_FALLBACK_URL,\n} from '../util/mintProjectConstants.js'\n\nconst debug = subdebug('new:provision')\n\n/** Provision API version for minting unclaimed projects. */\nexport const PROVISION_API_VERSION = 'v2026-06-23'\n\nconst request = createRequester({middleware: {httpErrors: false, promise: {onlyBody: false}}})\n\nexport interface MintedProject {\n apiHost: string\n claimApiUrl: string\n claimToken: string\n claimUrl: string\n datasetName: string\n expiresAt: string\n resourceId: string\n /** Terms of Service accepted by using the project. Falls back to the bundled constants. */\n termsNotice: string\n termsUrl: string\n token: string\n}\n\nfunction getProvisionApiBase(): string {\n const override = process.env.SANITY_API_HOST\n if (override) return override.replace(/\\/$/u, '')\n return isStaging() ? 'https://api.sanity.work' : 'https://api.sanity.io'\n}\n\nfunction parseJsonBody(body: unknown): unknown {\n if (typeof body !== 'string') return body\n\n try {\n return JSON.parse(body)\n } catch {\n return undefined\n }\n}\n\nfunction getString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction parseProvisionResponse(body: unknown): MintedProject {\n const data = parseJsonBody(body)\n const response =\n data && typeof data === 'object' && !Array.isArray(data)\n ? (data as Record<string, unknown>)\n : {}\n const links =\n response.links && typeof response.links === 'object' && !Array.isArray(response.links)\n ? (response.links as Record<string, unknown>)\n : {}\n const terms =\n response.terms && typeof response.terms === 'object' && !Array.isArray(response.terms)\n ? (response.terms as Record<string, unknown>)\n : {}\n\n const minted = {\n apiHost: getString(response.apiHost),\n claimApiUrl: getString(links.claimApiUrl),\n claimToken: getString(response.claimToken),\n claimUrl: getString(links.claimUrl),\n datasetName: getString(response.datasetName),\n expiresAt: getString(response.expiresAt),\n resourceId: getString(response.resourceId),\n token: getString(response.token),\n }\n const missing = Object.entries(minted)\n .filter(([, value]) => value === undefined)\n .map(([key]) => key)\n\n if (response.resourceType !== 'project') {\n missing.push('resourceType')\n }\n if (missing.length > 0) {\n throw new Error(`Project creation response is missing or invalid: ${missing.join(', ')}`)\n }\n\n return {\n ...(minted as Omit<MintedProject, 'termsNotice' | 'termsUrl'>),\n termsNotice: getString(terms.notice) ?? TERMS_OF_SERVICE_FALLBACK_NOTICE,\n termsUrl: getString(terms.url) ?? TERMS_OF_SERVICE_FALLBACK_URL,\n }\n}\n\n/**\n * Mint an unclaimed Sanity project through the public provision endpoint.\n */\nexport async function mintUnclaimedProject(options: {displayName: string}): Promise<MintedProject> {\n const displayName = options.displayName.trim()\n if (!displayName || displayName.length > 80) {\n throw new Error('Project name must be 1-80 characters.')\n }\n\n const url = `${getProvisionApiBase()}/${PROVISION_API_VERSION}/provision`\n debug('minting unclaimed project at %s', url)\n\n const response = await request({\n body: JSON.stringify({displayName, resourceType: 'project'}),\n headers: {'Content-Type': 'application/json'},\n method: 'POST',\n url,\n })\n\n if (response.statusCode === 404) {\n throw new Error(\n 'Creating projects without an account is currently unavailable. Try again later, or run `sanity login` and `sanity init`.',\n )\n }\n if (response.statusCode === 429) {\n throw new Error('Project creation rate limit reached for this machine. Try again later.')\n }\n if (response.statusCode < 200 || response.statusCode >= 300) {\n throw new Error(`Project creation failed (HTTP ${response.statusCode}). Try again later.`)\n }\n\n return parseProvisionResponse(response.body)\n}\n"],"names":["subdebug","createRequester","isStaging","TERMS_OF_SERVICE_FALLBACK_NOTICE","TERMS_OF_SERVICE_FALLBACK_URL","debug","PROVISION_API_VERSION","request","middleware","httpErrors","promise","onlyBody","getProvisionApiBase","override","process","env","SANITY_API_HOST","replace","parseJsonBody","body","JSON","parse","undefined","getString","value","length","parseProvisionResponse","data","response","Array","isArray","links","terms","minted","apiHost","claimApiUrl","claimToken","claimUrl","datasetName","expiresAt","resourceId","token","missing","Object","entries","filter","map","key","resourceType","push","Error","join","termsNotice","notice","termsUrl","url","mintUnclaimedProject","options","displayName","trim","stringify","headers","method","statusCode"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/services/mintProject.ts"],"sourcesContent":["import {subdebug} from '@sanity/cli-core/debug'\nimport {createRequester} from '@sanity/cli-core/request'\nimport {isStaging} from '@sanity/cli-core/util'\n\nimport {\n TERMS_OF_SERVICE_FALLBACK_NOTICE,\n TERMS_OF_SERVICE_FALLBACK_URL,\n} from '../util/mintProjectConstants.js'\n\nconst debug = subdebug('new:provision')\n\n/** Provision API version for minting unclaimed projects. */\nexport const PROVISION_API_VERSION = 'v2026-06-23'\n\nconst request = createRequester({httpErrors: false})\n\nexport interface MintedProject {\n apiHost: string\n claimApiUrl: string\n claimToken: string\n claimUrl: string\n datasetName: string\n expiresAt: string\n resourceId: string\n /** Terms of Service accepted by using the project. Falls back to the bundled constants. */\n termsNotice: string\n termsUrl: string\n token: string\n}\n\nfunction getProvisionApiBase(): string {\n const override = process.env.SANITY_API_HOST\n if (override) return override.replace(/\\/$/u, '')\n return isStaging() ? 'https://api.sanity.work' : 'https://api.sanity.io'\n}\n\nfunction parseJsonBody(body: unknown): unknown {\n if (typeof body !== 'string') return body\n\n try {\n return JSON.parse(body)\n } catch {\n return undefined\n }\n}\n\nfunction getString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction parseProvisionResponse(body: unknown): MintedProject {\n const data = parseJsonBody(body)\n const response =\n data && typeof data === 'object' && !Array.isArray(data)\n ? (data as Record<string, unknown>)\n : {}\n const links =\n response.links && typeof response.links === 'object' && !Array.isArray(response.links)\n ? (response.links as Record<string, unknown>)\n : {}\n const terms =\n response.terms && typeof response.terms === 'object' && !Array.isArray(response.terms)\n ? (response.terms as Record<string, unknown>)\n : {}\n\n const minted = {\n apiHost: getString(response.apiHost),\n claimApiUrl: getString(links.claimApiUrl),\n claimToken: getString(response.claimToken),\n claimUrl: getString(links.claimUrl),\n datasetName: getString(response.datasetName),\n expiresAt: getString(response.expiresAt),\n resourceId: getString(response.resourceId),\n token: getString(response.token),\n }\n const missing = Object.entries(minted)\n .filter(([, value]) => value === undefined)\n .map(([key]) => key)\n\n if (response.resourceType !== 'project') {\n missing.push('resourceType')\n }\n if (missing.length > 0) {\n throw new Error(`Project creation response is missing or invalid: ${missing.join(', ')}`)\n }\n\n return {\n ...(minted as Omit<MintedProject, 'termsNotice' | 'termsUrl'>),\n termsNotice: getString(terms.notice) ?? TERMS_OF_SERVICE_FALLBACK_NOTICE,\n termsUrl: getString(terms.url) ?? TERMS_OF_SERVICE_FALLBACK_URL,\n }\n}\n\n/**\n * Mint an unclaimed Sanity project through the public provision endpoint.\n */\nexport async function mintUnclaimedProject(options: {displayName: string}): Promise<MintedProject> {\n const displayName = options.displayName.trim()\n if (!displayName || displayName.length > 80) {\n throw new Error('Project name must be 1-80 characters.')\n }\n\n const url = `${getProvisionApiBase()}/${PROVISION_API_VERSION}/provision`\n debug('minting unclaimed project at %s', url)\n\n const response = await request({\n body: JSON.stringify({displayName, resourceType: 'project'}),\n headers: {'Content-Type': 'application/json'},\n method: 'POST',\n url,\n })\n\n if (response.status === 404) {\n throw new Error(\n 'Creating projects without an account is currently unavailable. Try again later, or run `sanity login` and `sanity init`.',\n )\n }\n if (response.status === 429) {\n throw new Error('Project creation rate limit reached for this machine. Try again later.')\n }\n if (response.status < 200 || response.status >= 300) {\n throw new Error(`Project creation failed (HTTP ${response.status}). Try again later.`)\n }\n\n return parseProvisionResponse(response.text())\n}\n"],"names":["subdebug","createRequester","isStaging","TERMS_OF_SERVICE_FALLBACK_NOTICE","TERMS_OF_SERVICE_FALLBACK_URL","debug","PROVISION_API_VERSION","request","httpErrors","getProvisionApiBase","override","process","env","SANITY_API_HOST","replace","parseJsonBody","body","JSON","parse","undefined","getString","value","length","parseProvisionResponse","data","response","Array","isArray","links","terms","minted","apiHost","claimApiUrl","claimToken","claimUrl","datasetName","expiresAt","resourceId","token","missing","Object","entries","filter","map","key","resourceType","push","Error","join","termsNotice","notice","termsUrl","url","mintUnclaimedProject","options","displayName","trim","stringify","headers","method","status","text"],"mappings":"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"}
@@ -9,7 +9,7 @@ export const ORGANIZATIONS_API_VERSION = 'v2025-05-14';
9
9
  });
10
10
  return client.request({
11
11
  query,
12
- uri: '/organizations'
12
+ url: '/organizations'
13
13
  });
14
14
  }
15
15
  /**
@@ -27,7 +27,7 @@ export const ORGANIZATIONS_API_VERSION = 'v2025-05-14';
27
27
  } : {}
28
28
  },
29
29
  method: 'post',
30
- uri: '/organizations'
30
+ url: '/organizations'
31
31
  });
32
32
  }
33
33
  /**
@@ -38,7 +38,7 @@ export const ORGANIZATIONS_API_VERSION = 'v2025-05-14';
38
38
  requireUser: true
39
39
  });
40
40
  return client.request({
41
- uri: `/organizations/${organizationId}/grants`
41
+ url: `/organizations/${organizationId}/grants`
42
42
  });
43
43
  }
44
44
  /**
@@ -53,7 +53,7 @@ export const ORGANIZATIONS_API_VERSION = 'v2025-05-14';
53
53
  includeFeatures: 'false',
54
54
  includeMembers: 'false'
55
55
  },
56
- uri: `/organizations/${organizationId}`
56
+ url: `/organizations/${organizationId}`
57
57
  });
58
58
  }
59
59
  /**
@@ -66,7 +66,7 @@ export const ORGANIZATIONS_API_VERSION = 'v2025-05-14';
66
66
  return client.request({
67
67
  body: params,
68
68
  method: 'patch',
69
- uri: `/organizations/${organizationId}`
69
+ url: `/organizations/${organizationId}`
70
70
  });
71
71
  }
72
72
  /**
@@ -78,7 +78,7 @@ export const ORGANIZATIONS_API_VERSION = 'v2025-05-14';
78
78
  });
79
79
  return client.request({
80
80
  method: 'delete',
81
- uri: `/organizations/${organizationId}`
81
+ url: `/organizations/${organizationId}`
82
82
  });
83
83
  }
84
84
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/organizations.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\nimport {RawRequestOptions} from '@sanity/client'\n\nexport const ORGANIZATIONS_API_VERSION = 'v2025-05-14'\n\nexport interface ProjectOrganization {\n id: string\n name: string\n slug: string | null\n}\n\nexport interface OrganizationCreateResponse {\n createdByUserId: string\n defaultRoleName: string | null\n features: unknown[]\n id: string\n members: unknown[]\n name: string\n slug: string | null\n}\n\ninterface Organization extends ProjectOrganization {\n createdAt: string\n defaultRoleName: string | null\n updatedAt: string\n}\n\nexport interface OrganizationUpdateParams {\n defaultRoleName?: string\n name?: string\n slug?: string\n}\n\ninterface OrganizationDeleteResponse {\n deleted: boolean\n}\n\nexport interface OrganizationWithGrant {\n hasAttachGrant: boolean\n organization: ProjectOrganization\n}\n\ninterface OrganizationGrant {\n grants: {name: string}[]\n}\n\ninterface OrganizationGrantsResponse {\n [key: string]: OrganizationGrant[]\n}\n\ntype OrganizationRequestQuery = RawRequestOptions['query']\n\n/**\n * List all organizations the user has access to\n */\nexport async function listOrganizations(\n query?: OrganizationRequestQuery,\n): Promise<ProjectOrganization[]> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<ProjectOrganization[]>({\n query,\n uri: '/organizations',\n })\n}\n\n/**\n * Create a new organization\n */\nexport async function createOrganization(\n name: string,\n defaultRoleName?: string,\n): Promise<OrganizationCreateResponse> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<OrganizationCreateResponse>({\n body: {name, ...(defaultRoleName ? {defaultRoleName} : {})},\n method: 'post',\n uri: '/organizations',\n })\n}\n\n/**\n * Get organization grants for a specific organization\n */\nexport async function getOrganizationGrants(\n organizationId: string,\n): Promise<OrganizationGrantsResponse> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<OrganizationGrantsResponse>({\n uri: `/organizations/${organizationId}/grants`,\n })\n}\n\n/**\n * Get a single organization by ID\n */\nexport async function getOrganization(organizationId: string): Promise<Organization> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<Organization>({\n query: {includeFeatures: 'false', includeMembers: 'false'},\n uri: `/organizations/${organizationId}`,\n })\n}\n\n/**\n * Update an organization\n */\nexport async function updateOrganization(\n organizationId: string,\n params: OrganizationUpdateParams,\n): Promise<Organization> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<Organization>({\n body: params,\n method: 'patch',\n uri: `/organizations/${organizationId}`,\n })\n}\n\n/**\n * Delete an organization\n */\nexport async function deleteOrganization(\n organizationId: string,\n): Promise<OrganizationDeleteResponse> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<OrganizationDeleteResponse>({\n method: 'delete',\n uri: `/organizations/${organizationId}`,\n })\n}\n"],"names":["getGlobalCliClient","ORGANIZATIONS_API_VERSION","listOrganizations","query","client","apiVersion","requireUser","request","uri","createOrganization","name","defaultRoleName","body","method","getOrganizationGrants","organizationId","getOrganization","includeFeatures","includeMembers","updateOrganization","params","deleteOrganization"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AAGnD,OAAO,MAAMC,4BAA4B,cAAa;AAiDtD;;CAEC,GACD,OAAO,eAAeC,kBACpBC,KAAgC;IAEhC,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAwB;QAC3CJ;QACAK,KAAK;IACP;AACF;AAEA;;CAEC,GACD,OAAO,eAAeC,mBACpBC,IAAY,EACZC,eAAwB;IAExB,MAAMP,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAA6B;QAChDK,MAAM;YAACF;YAAM,GAAIC,kBAAkB;gBAACA;YAAe,IAAI,CAAC,CAAC;QAAC;QAC1DE,QAAQ;QACRL,KAAK;IACP;AACF;AAEA;;CAEC,GACD,OAAO,eAAeM,sBACpBC,cAAsB;IAEtB,MAAMX,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAA6B;QAChDC,KAAK,CAAC,eAAe,EAAEO,eAAe,OAAO,CAAC;IAChD;AACF;AAEA;;CAEC,GACD,OAAO,eAAeC,gBAAgBD,cAAsB;IAC1D,MAAMX,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAe;QAClCJ,OAAO;YAACc,iBAAiB;YAASC,gBAAgB;QAAO;QACzDV,KAAK,CAAC,eAAe,EAAEO,gBAAgB;IACzC;AACF;AAEA;;CAEC,GACD,OAAO,eAAeI,mBACpBJ,cAAsB,EACtBK,MAAgC;IAEhC,MAAMhB,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAe;QAClCK,MAAMQ;QACNP,QAAQ;QACRL,KAAK,CAAC,eAAe,EAAEO,gBAAgB;IACzC;AACF;AAEA;;CAEC,GACD,OAAO,eAAeM,mBACpBN,cAAsB;IAEtB,MAAMX,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAA6B;QAChDM,QAAQ;QACRL,KAAK,CAAC,eAAe,EAAEO,gBAAgB;IACzC;AACF"}
1
+ {"version":3,"sources":["../../src/services/organizations.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\nimport {RawRequestOptions} from '@sanity/client'\n\nexport const ORGANIZATIONS_API_VERSION = 'v2025-05-14'\n\nexport interface ProjectOrganization {\n id: string\n name: string\n slug: string | null\n}\n\nexport interface OrganizationCreateResponse {\n createdByUserId: string\n defaultRoleName: string | null\n features: unknown[]\n id: string\n members: unknown[]\n name: string\n slug: string | null\n}\n\ninterface Organization extends ProjectOrganization {\n createdAt: string\n defaultRoleName: string | null\n updatedAt: string\n}\n\nexport interface OrganizationUpdateParams {\n defaultRoleName?: string\n name?: string\n slug?: string\n}\n\ninterface OrganizationDeleteResponse {\n deleted: boolean\n}\n\nexport interface OrganizationWithGrant {\n hasAttachGrant: boolean\n organization: ProjectOrganization\n}\n\ninterface OrganizationGrant {\n grants: {name: string}[]\n}\n\ninterface OrganizationGrantsResponse {\n [key: string]: OrganizationGrant[]\n}\n\ntype OrganizationRequestQuery = RawRequestOptions['query']\n\n/**\n * List all organizations the user has access to\n */\nexport async function listOrganizations(\n query?: OrganizationRequestQuery,\n): Promise<ProjectOrganization[]> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<ProjectOrganization[]>({\n query,\n url: '/organizations',\n })\n}\n\n/**\n * Create a new organization\n */\nexport async function createOrganization(\n name: string,\n defaultRoleName?: string,\n): Promise<OrganizationCreateResponse> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<OrganizationCreateResponse>({\n body: {name, ...(defaultRoleName ? {defaultRoleName} : {})},\n method: 'post',\n url: '/organizations',\n })\n}\n\n/**\n * Get organization grants for a specific organization\n */\nexport async function getOrganizationGrants(\n organizationId: string,\n): Promise<OrganizationGrantsResponse> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<OrganizationGrantsResponse>({\n url: `/organizations/${organizationId}/grants`,\n })\n}\n\n/**\n * Get a single organization by ID\n */\nexport async function getOrganization(organizationId: string): Promise<Organization> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<Organization>({\n query: {includeFeatures: 'false', includeMembers: 'false'},\n url: `/organizations/${organizationId}`,\n })\n}\n\n/**\n * Update an organization\n */\nexport async function updateOrganization(\n organizationId: string,\n params: OrganizationUpdateParams,\n): Promise<Organization> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<Organization>({\n body: params,\n method: 'patch',\n url: `/organizations/${organizationId}`,\n })\n}\n\n/**\n * Delete an organization\n */\nexport async function deleteOrganization(\n organizationId: string,\n): Promise<OrganizationDeleteResponse> {\n const client = await getGlobalCliClient({\n apiVersion: ORGANIZATIONS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<OrganizationDeleteResponse>({\n method: 'delete',\n url: `/organizations/${organizationId}`,\n })\n}\n"],"names":["getGlobalCliClient","ORGANIZATIONS_API_VERSION","listOrganizations","query","client","apiVersion","requireUser","request","url","createOrganization","name","defaultRoleName","body","method","getOrganizationGrants","organizationId","getOrganization","includeFeatures","includeMembers","updateOrganization","params","deleteOrganization"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AAGnD,OAAO,MAAMC,4BAA4B,cAAa;AAiDtD;;CAEC,GACD,OAAO,eAAeC,kBACpBC,KAAgC;IAEhC,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAwB;QAC3CJ;QACAK,KAAK;IACP;AACF;AAEA;;CAEC,GACD,OAAO,eAAeC,mBACpBC,IAAY,EACZC,eAAwB;IAExB,MAAMP,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAA6B;QAChDK,MAAM;YAACF;YAAM,GAAIC,kBAAkB;gBAACA;YAAe,IAAI,CAAC,CAAC;QAAC;QAC1DE,QAAQ;QACRL,KAAK;IACP;AACF;AAEA;;CAEC,GACD,OAAO,eAAeM,sBACpBC,cAAsB;IAEtB,MAAMX,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAA6B;QAChDC,KAAK,CAAC,eAAe,EAAEO,eAAe,OAAO,CAAC;IAChD;AACF;AAEA;;CAEC,GACD,OAAO,eAAeC,gBAAgBD,cAAsB;IAC1D,MAAMX,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAe;QAClCJ,OAAO;YAACc,iBAAiB;YAASC,gBAAgB;QAAO;QACzDV,KAAK,CAAC,eAAe,EAAEO,gBAAgB;IACzC;AACF;AAEA;;CAEC,GACD,OAAO,eAAeI,mBACpBJ,cAAsB,EACtBK,MAAgC;IAEhC,MAAMhB,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAAe;QAClCK,MAAMQ;QACNP,QAAQ;QACRL,KAAK,CAAC,eAAe,EAAEO,gBAAgB;IACzC;AACF;AAEA;;CAEC,GACD,OAAO,eAAeM,mBACpBN,cAAsB;IAEtB,MAAMX,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,OAAOF,OAAOG,OAAO,CAA6B;QAChDM,QAAQ;QACRL,KAAK,CAAC,eAAe,EAAEO,gBAAgB;IACzC;AACF"}
@@ -6,7 +6,7 @@ export async function getPlanId(intendedPlanId) {
6
6
  requireUser: false
7
7
  });
8
8
  const response = await client.request({
9
- uri: `plans/${intendedPlanId}`
9
+ url: `plans/${intendedPlanId}`
10
10
  });
11
11
  if (Array.isArray(response) && response.length > 0) {
12
12
  const planId = response[0]?.id;
@@ -22,7 +22,7 @@ export async function getPlanIdFromCoupon(couponCode) {
22
22
  requireUser: false
23
23
  });
24
24
  const response = await client.request({
25
- uri: `plans/coupon/${encodeURIComponent(couponCode)}`
25
+ url: `plans/coupon/${encodeURIComponent(couponCode)}`
26
26
  });
27
27
  if (!Array.isArray(response) || response.length === 0) {
28
28
  throw new Error(`No plans found for coupon code "${couponCode}"`);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/plans.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\n\nimport {INIT_API_VERSION} from '../actions/init/constants.js'\n\nexport async function getPlanId(intendedPlanId: string) {\n const client = await getGlobalCliClient({\n apiVersion: INIT_API_VERSION,\n requireUser: false,\n })\n\n const response = await client.request<{id: string}[]>({uri: `plans/${intendedPlanId}`})\n if (Array.isArray(response) && response.length > 0) {\n const planId = response[0]?.id\n if (!planId) {\n throw new Error(`Unable to find a plan with id ${intendedPlanId}`)\n }\n\n return response[0].id\n }\n}\n\nexport async function getPlanIdFromCoupon(couponCode: string) {\n const client = await getGlobalCliClient({\n apiVersion: INIT_API_VERSION,\n requireUser: false,\n })\n\n const response = await client.request<{id: string}[]>({\n uri: `plans/coupon/${encodeURIComponent(couponCode)}`,\n })\n\n if (!Array.isArray(response) || response.length === 0) {\n throw new Error(`No plans found for coupon code \"${couponCode}\"`)\n }\n\n const planId = response[0].id\n if (!planId) {\n throw new Error('Unable to find a plan from coupon code')\n }\n\n return planId\n}\n"],"names":["getGlobalCliClient","INIT_API_VERSION","getPlanId","intendedPlanId","client","apiVersion","requireUser","response","request","uri","Array","isArray","length","planId","id","Error","getPlanIdFromCoupon","couponCode","encodeURIComponent"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AAEnD,SAAQC,gBAAgB,QAAO,+BAA8B;AAE7D,OAAO,eAAeC,UAAUC,cAAsB;IACpD,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,MAAMC,WAAW,MAAMH,OAAOI,OAAO,CAAiB;QAACC,KAAK,CAAC,MAAM,EAAEN,gBAAgB;IAAA;IACrF,IAAIO,MAAMC,OAAO,CAACJ,aAAaA,SAASK,MAAM,GAAG,GAAG;QAClD,MAAMC,SAASN,QAAQ,CAAC,EAAE,EAAEO;QAC5B,IAAI,CAACD,QAAQ;YACX,MAAM,IAAIE,MAAM,CAAC,8BAA8B,EAAEZ,gBAAgB;QACnE;QAEA,OAAOI,QAAQ,CAAC,EAAE,CAACO,EAAE;IACvB;AACF;AAEA,OAAO,eAAeE,oBAAoBC,UAAkB;IAC1D,MAAMb,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,MAAMC,WAAW,MAAMH,OAAOI,OAAO,CAAiB;QACpDC,KAAK,CAAC,aAAa,EAAES,mBAAmBD,aAAa;IACvD;IAEA,IAAI,CAACP,MAAMC,OAAO,CAACJ,aAAaA,SAASK,MAAM,KAAK,GAAG;QACrD,MAAM,IAAIG,MAAM,CAAC,gCAAgC,EAAEE,WAAW,CAAC,CAAC;IAClE;IAEA,MAAMJ,SAASN,QAAQ,CAAC,EAAE,CAACO,EAAE;IAC7B,IAAI,CAACD,QAAQ;QACX,MAAM,IAAIE,MAAM;IAClB;IAEA,OAAOF;AACT"}
1
+ {"version":3,"sources":["../../src/services/plans.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\n\nimport {INIT_API_VERSION} from '../actions/init/constants.js'\n\nexport async function getPlanId(intendedPlanId: string) {\n const client = await getGlobalCliClient({\n apiVersion: INIT_API_VERSION,\n requireUser: false,\n })\n\n const response = await client.request<{id: string}[]>({url: `plans/${intendedPlanId}`})\n if (Array.isArray(response) && response.length > 0) {\n const planId = response[0]?.id\n if (!planId) {\n throw new Error(`Unable to find a plan with id ${intendedPlanId}`)\n }\n\n return response[0].id\n }\n}\n\nexport async function getPlanIdFromCoupon(couponCode: string) {\n const client = await getGlobalCliClient({\n apiVersion: INIT_API_VERSION,\n requireUser: false,\n })\n\n const response = await client.request<{id: string}[]>({\n url: `plans/coupon/${encodeURIComponent(couponCode)}`,\n })\n\n if (!Array.isArray(response) || response.length === 0) {\n throw new Error(`No plans found for coupon code \"${couponCode}\"`)\n }\n\n const planId = response[0].id\n if (!planId) {\n throw new Error('Unable to find a plan from coupon code')\n }\n\n return planId\n}\n"],"names":["getGlobalCliClient","INIT_API_VERSION","getPlanId","intendedPlanId","client","apiVersion","requireUser","response","request","url","Array","isArray","length","planId","id","Error","getPlanIdFromCoupon","couponCode","encodeURIComponent"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AAEnD,SAAQC,gBAAgB,QAAO,+BAA8B;AAE7D,OAAO,eAAeC,UAAUC,cAAsB;IACpD,MAAMC,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,MAAMC,WAAW,MAAMH,OAAOI,OAAO,CAAiB;QAACC,KAAK,CAAC,MAAM,EAAEN,gBAAgB;IAAA;IACrF,IAAIO,MAAMC,OAAO,CAACJ,aAAaA,SAASK,MAAM,GAAG,GAAG;QAClD,MAAMC,SAASN,QAAQ,CAAC,EAAE,EAAEO;QAC5B,IAAI,CAACD,QAAQ;YACX,MAAM,IAAIE,MAAM,CAAC,8BAA8B,EAAEZ,gBAAgB;QACnE;QAEA,OAAOI,QAAQ,CAAC,EAAE,CAACO,EAAE;IACvB;AACF;AAEA,OAAO,eAAeE,oBAAoBC,UAAkB;IAC1D,MAAMb,SAAS,MAAMJ,mBAAmB;QACtCK,YAAYJ;QACZK,aAAa;IACf;IAEA,MAAMC,WAAW,MAAMH,OAAOI,OAAO,CAAiB;QACpDC,KAAK,CAAC,aAAa,EAAES,mBAAmBD,aAAa;IACvD;IAEA,IAAI,CAACP,MAAMC,OAAO,CAACJ,aAAaA,SAASK,MAAM,KAAK,GAAG;QACrD,MAAM,IAAIG,MAAM,CAAC,gCAAgC,EAAEE,WAAW,CAAC,CAAC;IAClE;IAEA,MAAMJ,SAASN,QAAQ,CAAC,EAAE,CAACO,EAAE;IAC7B,IAAI,CAACD,QAAQ;QACX,MAAM,IAAIE,MAAM;IAClB;IAEA,OAAOF;AACT"}
@@ -19,7 +19,7 @@ const UNCLAIMED_PROJECT_ORGANIZATION_ID = 'oSystemUnclaimed';
19
19
  }
20
20
  },
21
21
  method: 'POST',
22
- uri: '/projects'
22
+ url: '/projects'
23
23
  });
24
24
  return {
25
25
  displayName: options.displayName || '',
@@ -62,7 +62,7 @@ export async function getProjectRoles(projectId) {
62
62
  requireUser: true
63
63
  });
64
64
  return client.request({
65
- uri: `/projects/${projectId}/roles`
65
+ url: `/projects/${projectId}/roles`
66
66
  });
67
67
  }
68
68
  export async function inviteUser({ email, projectId, role }) {
@@ -77,7 +77,7 @@ export async function inviteUser({ email, projectId, role }) {
77
77
  },
78
78
  maxRedirects: 0,
79
79
  method: 'POST',
80
- uri: `/invitations/project/${projectId}`,
80
+ url: `/invitations/project/${projectId}`,
81
81
  useGlobalApi: true
82
82
  });
83
83
  }
@@ -96,7 +96,7 @@ export async function getProjectInvites(projectId) {
96
96
  requireUser: true
97
97
  });
98
98
  return client.request({
99
- uri: `/invitations/project/${projectId}`
99
+ url: `/invitations/project/${projectId}`
100
100
  });
101
101
  }
102
102
  export async function updateProjectInitializedAt(projectId) {
@@ -106,7 +106,7 @@ export async function updateProjectInitializedAt(projectId) {
106
106
  requireUser: true
107
107
  });
108
108
  const project = await client.request({
109
- uri: `/projects/${projectId}`
109
+ url: `/projects/${projectId}`
110
110
  });
111
111
  if (!project?.metadata?.cliInitializedAt) {
112
112
  await client.request({
@@ -116,7 +116,7 @@ export async function updateProjectInitializedAt(projectId) {
116
116
  }
117
117
  },
118
118
  method: 'PATCH',
119
- uri: `/projects/${projectId}`
119
+ url: `/projects/${projectId}`
120
120
  });
121
121
  }
122
122
  }
@@ -133,7 +133,7 @@ export async function updateProjectInitalTemplate(projectId, templateName) {
133
133
  }
134
134
  },
135
135
  method: 'PATCH',
136
- uri: `/projects/${projectId}`
136
+ url: `/projects/${projectId}`
137
137
  });
138
138
  }
139
139