@sanity/cli 8.0.1 → 8.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SanityHelp.js.map +1 -1
- package/dist/actions/backup/assertDatasetExist.js +2 -1
- package/dist/actions/backup/assertDatasetExist.js.map +1 -1
- package/dist/actions/backup/downloadAsset.js +3 -24
- package/dist/actions/backup/downloadAsset.js.map +1 -1
- package/dist/actions/backup/downloadDocument.js +11 -22
- package/dist/actions/backup/downloadDocument.js.map +1 -1
- package/dist/actions/backup/downloadStream.js +83 -0
- package/dist/actions/backup/downloadStream.js.map +1 -0
- package/dist/actions/build/buildStudio.js +3 -2
- package/dist/actions/build/buildStudio.js.map +1 -1
- package/dist/actions/build/eventListenerFactory.js +7 -6
- package/dist/actions/build/eventListenerFactory.js.map +1 -1
- package/dist/actions/build/shouldAutoUpdate.js +2 -1
- package/dist/actions/build/shouldAutoUpdate.js.map +1 -1
- package/dist/actions/cors/filterAndValidateOrigin.js +3 -2
- package/dist/actions/cors/filterAndValidateOrigin.js.map +1 -1
- package/dist/actions/deploy/createUserApplication.js +2 -1
- package/dist/actions/deploy/createUserApplication.js.map +1 -1
- package/dist/actions/deploy/deployRunner.js +3 -2
- package/dist/actions/deploy/deployRunner.js.map +1 -1
- package/dist/actions/deploy/deployStudio.js +3 -3
- package/dist/actions/deploy/deployStudio.js.map +1 -1
- package/dist/actions/deploy/findUserApplication.js +8 -7
- package/dist/actions/deploy/findUserApplication.js.map +1 -1
- package/dist/actions/dev/servers/startAppDevServer.js +2 -1
- package/dist/actions/dev/servers/startAppDevServer.js.map +1 -1
- package/dist/actions/dev/servers/startStudioDevServer.js +3 -3
- package/dist/actions/dev/servers/startStudioDevServer.js.map +1 -1
- package/dist/actions/documents/validate.js +5 -5
- package/dist/actions/documents/validate.js.map +1 -1
- package/dist/actions/documents/validateDocuments.worker.js +4 -1
- package/dist/actions/documents/validateDocuments.worker.js.map +1 -1
- package/dist/actions/init/env/createOrAppendEnvVars.js +2 -1
- package/dist/actions/init/env/createOrAppendEnvVars.js.map +1 -1
- package/dist/actions/init/env/parseAndUpdateEnvVars.js +2 -2
- package/dist/actions/init/env/parseAndUpdateEnvVars.js.map +1 -1
- package/dist/actions/schema/extractSchema.js +2 -2
- package/dist/actions/schema/extractSchema.js.map +1 -1
- package/dist/actions/schema/extractSchemaWatcher.js +2 -1
- package/dist/actions/schema/extractSchemaWatcher.js.map +1 -1
- package/dist/actions/schema/uploadSchemaToLexicon.js +3 -0
- package/dist/actions/schema/uploadSchemaToLexicon.js.map +1 -1
- package/dist/actions/telemetry/telemetryDebug.js +2 -2
- package/dist/actions/telemetry/telemetryDebug.js.map +1 -1
- package/dist/actions/undeploy/runUndeploy.js +2 -2
- package/dist/actions/undeploy/runUndeploy.js.map +1 -1
- package/dist/commands/backups/list.js +5 -8
- package/dist/commands/backups/list.js.map +1 -1
- package/dist/commands/datasets/copy.js +5 -7
- package/dist/commands/datasets/copy.js.map +1 -1
- package/dist/commands/datasets/import.js +7 -10
- package/dist/commands/datasets/import.js.map +1 -1
- package/dist/commands/docs/search.js +2 -2
- package/dist/commands/docs/search.js.map +1 -1
- package/dist/commands/mcp/configure.js +2 -2
- package/dist/commands/mcp/configure.js.map +1 -1
- package/dist/commands/typegen/generate.js +6 -6
- package/dist/commands/typegen/generate.js.map +1 -1
- package/dist/exports/_internal.d.ts +50 -82
- package/dist/exports/index.d.ts +48 -78
- package/dist/exports/invokeSanityCli/index.d.ts +108 -18
- package/dist/exports/invokeSanityCli/index.js +2 -1
- package/dist/exports/invokeSanityCli/index.js.map +1 -1
- package/dist/exports/runtime.d.ts +3 -65
- package/dist/services/api.js +23 -15
- package/dist/services/api.js.map +1 -1
- package/dist/services/auth.js +4 -4
- package/dist/services/auth.js.map +1 -1
- package/dist/services/backup.js +3 -3
- package/dist/services/backup.js.map +1 -1
- package/dist/services/cors.js +3 -3
- package/dist/services/cors.js.map +1 -1
- package/dist/services/datasetAliases.js +5 -5
- package/dist/services/datasetAliases.js.map +1 -1
- package/dist/services/datasets.js +3 -3
- package/dist/services/datasets.js.map +1 -1
- package/dist/services/documents.js +1 -1
- package/dist/services/documents.js.map +1 -1
- package/dist/services/getProjectFeatures.js +1 -1
- package/dist/services/getProjectFeatures.js.map +1 -1
- package/dist/services/getUrlHeaders.js +3 -9
- package/dist/services/getUrlHeaders.js.map +1 -1
- package/dist/services/grants.js +1 -1
- package/dist/services/grants.js.map +1 -1
- package/dist/services/graphql.js +4 -3
- package/dist/services/graphql.js.map +1 -1
- package/dist/services/hooks.js +6 -6
- package/dist/services/hooks.js.map +1 -1
- package/dist/services/mcp.js +4 -4
- package/dist/services/mcp.js.map +1 -1
- package/dist/services/mediaLibraries.js +3 -3
- package/dist/services/mediaLibraries.js.map +1 -1
- package/dist/services/mintProject.js +33 -14
- package/dist/services/mintProject.js.map +1 -1
- package/dist/services/organizations.js +6 -6
- package/dist/services/organizations.js.map +1 -1
- package/dist/services/plans.js +2 -2
- package/dist/services/plans.js.map +1 -1
- package/dist/services/projects.js +7 -7
- package/dist/services/projects.js.map +1 -1
- package/dist/services/schemas.js +2 -2
- package/dist/services/schemas.js.map +1 -1
- package/dist/services/telemetry.js +2 -2
- package/dist/services/telemetry.js.map +1 -1
- package/dist/services/tokens.js +5 -5
- package/dist/services/tokens.js.map +1 -1
- package/dist/services/user.js +1 -1
- package/dist/services/user.js.map +1 -1
- package/dist/services/userApplications.js +18 -18
- package/dist/services/userApplications.js.map +1 -1
- package/dist/util/appId.js +2 -1
- package/dist/util/appId.js.map +1 -1
- package/dist/util/dates.js +125 -0
- package/dist/util/dates.js.map +1 -0
- package/dist/util/getCliVersion.js +1 -11
- package/dist/util/getCliVersion.js.map +1 -1
- package/oclif.manifest.json +1093 -1093
- package/package.json +12 -15
package/dist/services/hooks.js
CHANGED
|
@@ -6,7 +6,7 @@ export async function getHooksForProject(projectId) {
|
|
|
6
6
|
requireUser: true
|
|
7
7
|
});
|
|
8
8
|
return client.request({
|
|
9
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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[]>({
|
|
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"}
|
package/dist/services/mcp.js
CHANGED
|
@@ -22,14 +22,14 @@ const debug = subdebug('mcp:service');
|
|
|
22
22
|
withStamp: false
|
|
23
23
|
},
|
|
24
24
|
method: 'POST',
|
|
25
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
88
|
+
url: '/journey/mcp/post-init-prompt'
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
|
package/dist/services/mcp.js.map
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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"}
|
|
@@ -4,13 +4,31 @@ import { isStaging } from '@sanity/cli-core/util';
|
|
|
4
4
|
import { TERMS_OF_SERVICE_FALLBACK_NOTICE, TERMS_OF_SERVICE_FALLBACK_URL } from '../util/mintProjectConstants.js';
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Request tag identifying the caller to the provisioning funnel, using the same `?tag=` convention
|
|
9
|
+
* as every other Sanity API request. `sanity new` is deliberately usable without an account, so
|
|
10
|
+
* most mints have no user to attribute — this is what tells reporting who made them, and is how
|
|
11
|
+
* synthetic callers are kept out of mint-to-claim conversion.
|
|
12
|
+
*/ export const MINT_REQUEST_TAG = 'sanity.cli';
|
|
13
|
+
/**
|
|
14
|
+
* Overrides {@link MINT_REQUEST_TAG}. Internal plumbing for the scheduled smoke test, which mints
|
|
15
|
+
* against production several times an hour and never claims; it sets `sanity.cli.smoketest` so
|
|
16
|
+
* those mints can be excluded from reporting.
|
|
17
|
+
*/ const MINT_TAG_ENV_VAR = 'SANITY_CLI_MINT_TAG';
|
|
18
|
+
/** Mirrors `@sanity/client`'s `requestTag` rule, which is what the API accepts. */ const TAG_PATTERN = /^[a-z0-9._-]{1,75}$/i;
|
|
19
|
+
function getRequestTag() {
|
|
20
|
+
const override = process.env[MINT_TAG_ENV_VAR];
|
|
21
|
+
if (!override) return MINT_REQUEST_TAG;
|
|
22
|
+
if (!TAG_PATTERN.test(override)) {
|
|
23
|
+
// A malformed override would be dropped by the API anyway; fall back rather than mint
|
|
24
|
+
// untagged, so the request is still attributable.
|
|
25
|
+
debug('ignoring malformed %s value %j', MINT_TAG_ENV_VAR, override);
|
|
26
|
+
return MINT_REQUEST_TAG;
|
|
13
27
|
}
|
|
28
|
+
return override;
|
|
29
|
+
}
|
|
30
|
+
const request = createRequester({
|
|
31
|
+
httpErrors: false
|
|
14
32
|
});
|
|
15
33
|
function getProvisionApiBase() {
|
|
16
34
|
const override = process.env.SANITY_API_HOST;
|
|
@@ -63,8 +81,9 @@ function parseProvisionResponse(body) {
|
|
|
63
81
|
if (!displayName || displayName.length > 80) {
|
|
64
82
|
throw new Error('Project name must be 1-80 characters.');
|
|
65
83
|
}
|
|
66
|
-
const url = `${
|
|
67
|
-
|
|
84
|
+
const url = new URL(`${PROVISION_API_VERSION}/provision`, getProvisionApiBase());
|
|
85
|
+
url.searchParams.set('tag', getRequestTag());
|
|
86
|
+
debug('minting unclaimed project at %s', url.toString());
|
|
68
87
|
const response = await request({
|
|
69
88
|
body: JSON.stringify({
|
|
70
89
|
displayName,
|
|
@@ -74,18 +93,18 @@ function parseProvisionResponse(body) {
|
|
|
74
93
|
'Content-Type': 'application/json'
|
|
75
94
|
},
|
|
76
95
|
method: 'POST',
|
|
77
|
-
url
|
|
96
|
+
url: url.toString()
|
|
78
97
|
});
|
|
79
|
-
if (response.
|
|
98
|
+
if (response.status === 404) {
|
|
80
99
|
throw new Error('Creating projects without an account is currently unavailable. Try again later, or run `sanity login` and `sanity init`.');
|
|
81
100
|
}
|
|
82
|
-
if (response.
|
|
101
|
+
if (response.status === 429) {
|
|
83
102
|
throw new Error('Project creation rate limit reached for this machine. Try again later.');
|
|
84
103
|
}
|
|
85
|
-
if (response.
|
|
86
|
-
throw new Error(`Project creation failed (HTTP ${response.
|
|
104
|
+
if (response.status < 200 || response.status >= 300) {
|
|
105
|
+
throw new Error(`Project creation failed (HTTP ${response.status}). Try again later.`);
|
|
87
106
|
}
|
|
88
|
-
return parseProvisionResponse(response.
|
|
107
|
+
return parseProvisionResponse(response.text());
|
|
89
108
|
}
|
|
90
109
|
|
|
91
110
|
//# 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\
|
|
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\n/**\n * Request tag identifying the caller to the provisioning funnel, using the same `?tag=` convention\n * as every other Sanity API request. `sanity new` is deliberately usable without an account, so\n * most mints have no user to attribute — this is what tells reporting who made them, and is how\n * synthetic callers are kept out of mint-to-claim conversion.\n */\nexport const MINT_REQUEST_TAG = 'sanity.cli'\n\n/**\n * Overrides {@link MINT_REQUEST_TAG}. Internal plumbing for the scheduled smoke test, which mints\n * against production several times an hour and never claims; it sets `sanity.cli.smoketest` so\n * those mints can be excluded from reporting.\n */\nconst MINT_TAG_ENV_VAR = 'SANITY_CLI_MINT_TAG'\n\n/** Mirrors `@sanity/client`'s `requestTag` rule, which is what the API accepts. */\nconst TAG_PATTERN = /^[a-z0-9._-]{1,75}$/i\n\nfunction getRequestTag(): string {\n const override = process.env[MINT_TAG_ENV_VAR]\n if (!override) return MINT_REQUEST_TAG\n if (!TAG_PATTERN.test(override)) {\n // A malformed override would be dropped by the API anyway; fall back rather than mint\n // untagged, so the request is still attributable.\n debug('ignoring malformed %s value %j', MINT_TAG_ENV_VAR, override)\n return MINT_REQUEST_TAG\n }\n return override\n}\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 = new URL(`${PROVISION_API_VERSION}/provision`, getProvisionApiBase())\n url.searchParams.set('tag', getRequestTag())\n debug('minting unclaimed project at %s', url.toString())\n\n const response = await request({\n body: JSON.stringify({displayName, resourceType: 'project'}),\n headers: {'Content-Type': 'application/json'},\n method: 'POST',\n url: url.toString(),\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","MINT_REQUEST_TAG","MINT_TAG_ENV_VAR","TAG_PATTERN","getRequestTag","override","process","env","test","request","httpErrors","getProvisionApiBase","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","URL","searchParams","set","toString","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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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"}
|
package/dist/services/plans.js
CHANGED
|
@@ -6,7 +6,7 @@ export async function getPlanId(intendedPlanId) {
|
|
|
6
6
|
requireUser: false
|
|
7
7
|
});
|
|
8
8
|
const response = await client.request({
|
|
9
|
-
|
|
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
|
-
|
|
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}[]>({
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
136
|
+
url: `/projects/${projectId}`
|
|
137
137
|
});
|
|
138
138
|
}
|
|
139
139
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/projects.ts"],"sourcesContent":["import {debug, getGlobalCliClient, getProjectCliClient} from '@sanity/cli-core'\nimport {SanityProject} from '@sanity/client'\n\nimport {type Invite, type Role} from '../actions/users/types.js'\n\nexport const PROJECTS_API_VERSION = '2025-09-22'\n\nexport const CREATE_PROJECT_API_VERSION = 'v2025-05-14'\n\nconst UNCLAIMED_PROJECT_ORGANIZATION_ID = 'oSystemUnclaimed'\n\nexport type ProjectClaimStatus = 'claimed' | 'unclaimed' | 'unknown'\n\ninterface CreateProjectOptions {\n displayName: string\n\n metadata?: {\n coupon?: string\n integration?: string\n }\n organizationId?: string\n subscription?: {planId: string}\n}\n\nexport interface CreateProjectResult {\n displayName: string\n projectId: string\n}\n\n/**\n * Create a new Sanity project\n */\nexport async function createProject(options: CreateProjectOptions): Promise<CreateProjectResult> {\n const client = await getGlobalCliClient({\n apiVersion: CREATE_PROJECT_API_VERSION,\n requireUser: true,\n })\n\n try {\n const response = await client.request({\n body: {\n ...options,\n metadata: {\n ...options?.metadata,\n integration: 'cli',\n },\n },\n method: 'POST',\n
|
|
1
|
+
{"version":3,"sources":["../../src/services/projects.ts"],"sourcesContent":["import {debug, getGlobalCliClient, getProjectCliClient} from '@sanity/cli-core'\nimport {SanityProject} from '@sanity/client'\n\nimport {type Invite, type Role} from '../actions/users/types.js'\n\nexport const PROJECTS_API_VERSION = '2025-09-22'\n\nexport const CREATE_PROJECT_API_VERSION = 'v2025-05-14'\n\nconst UNCLAIMED_PROJECT_ORGANIZATION_ID = 'oSystemUnclaimed'\n\nexport type ProjectClaimStatus = 'claimed' | 'unclaimed' | 'unknown'\n\ninterface CreateProjectOptions {\n displayName: string\n\n metadata?: {\n coupon?: string\n integration?: string\n }\n organizationId?: string\n subscription?: {planId: string}\n}\n\nexport interface CreateProjectResult {\n displayName: string\n projectId: string\n}\n\n/**\n * Create a new Sanity project\n */\nexport async function createProject(options: CreateProjectOptions): Promise<CreateProjectResult> {\n const client = await getGlobalCliClient({\n apiVersion: CREATE_PROJECT_API_VERSION,\n requireUser: true,\n })\n\n try {\n const response = await client.request({\n body: {\n ...options,\n metadata: {\n ...options?.metadata,\n integration: 'cli',\n },\n },\n method: 'POST',\n url: '/projects',\n })\n\n return {\n displayName: options.displayName || '',\n projectId: response.projectId || response.id,\n }\n } catch (err) {\n debug('Error creating project', err)\n throw err\n }\n}\n\nexport async function getProjectById(projectId: string) {\n const client = await getProjectCliClient({\n apiVersion: PROJECTS_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n return client.projects.getById(projectId)\n}\n\nexport async function getProjectClaimStatus(\n projectId: string,\n token: string,\n): Promise<ProjectClaimStatus> {\n try {\n const client = await getProjectCliClient({\n apiVersion: PROJECTS_API_VERSION,\n projectId,\n requireUser: true,\n token,\n })\n const project = await client.projects.getById(projectId)\n\n if (typeof project.organizationId !== 'string' || project.organizationId.length === 0) {\n return 'unknown'\n }\n\n return project.organizationId === UNCLAIMED_PROJECT_ORGANIZATION_ID ? 'unclaimed' : 'claimed'\n } catch (error) {\n debug(\n 'failed to check claim status for project %s: %s',\n projectId,\n error instanceof Error ? error.message : `${error}`,\n )\n return 'unknown'\n }\n}\n\nexport async function getProjectRoles(projectId: string) {\n const client = await getGlobalCliClient({\n apiVersion: PROJECTS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<Role[]>({url: `/projects/${projectId}/roles`})\n}\n\ninterface InviteUserOptions {\n email: string\n projectId: string\n role: string\n}\n\nexport async function inviteUser({email, projectId, role}: InviteUserOptions) {\n const client = await getGlobalCliClient({\n apiVersion: PROJECTS_API_VERSION,\n requireUser: true,\n })\n\n return client.request({\n body: {email, role},\n maxRedirects: 0,\n method: 'POST',\n url: `/invitations/project/${projectId}`,\n useGlobalApi: true,\n })\n}\n\nexport async function listProjects({\n onlyExplicitMembership = true,\n}: {\n onlyExplicitMembership?: boolean\n} = {}) {\n const client = await getGlobalCliClient({\n apiVersion: PROJECTS_API_VERSION,\n requireUser: true,\n })\n\n return client.projects.list({onlyExplicitMembership})\n}\n\nexport async function getProjectInvites(projectId: string) {\n const client = await getGlobalCliClient({\n apiVersion: PROJECTS_API_VERSION,\n requireUser: true,\n })\n\n return client.request<Invite[]>({url: `/invitations/project/${projectId}`})\n}\n\nexport async function updateProjectInitializedAt(projectId: string) {\n const client = await getProjectCliClient({\n apiVersion: PROJECTS_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n const project = await client.request<SanityProject>({url: `/projects/${projectId}`})\n\n if (!project?.metadata?.cliInitializedAt) {\n await client.request({\n body: {metadata: {cliInitializedAt: new Date().toISOString()}},\n method: 'PATCH',\n url: `/projects/${projectId}`,\n })\n }\n}\n\nexport async function updateProjectInitalTemplate(projectId: string, templateName: string) {\n const client = await getProjectCliClient({\n apiVersion: PROJECTS_API_VERSION,\n projectId,\n requireUser: true,\n })\n\n await client.request({\n body: {metadata: {initialTemplate: templateName}},\n method: 'PATCH',\n url: `/projects/${projectId}`,\n })\n}\n"],"names":["debug","getGlobalCliClient","getProjectCliClient","PROJECTS_API_VERSION","CREATE_PROJECT_API_VERSION","UNCLAIMED_PROJECT_ORGANIZATION_ID","createProject","options","client","apiVersion","requireUser","response","request","body","metadata","integration","method","url","displayName","projectId","id","err","getProjectById","projects","getById","getProjectClaimStatus","token","project","organizationId","length","error","Error","message","getProjectRoles","inviteUser","email","role","maxRedirects","useGlobalApi","listProjects","onlyExplicitMembership","list","getProjectInvites","updateProjectInitializedAt","cliInitializedAt","Date","toISOString","updateProjectInitalTemplate","templateName","initialTemplate"],"mappings":"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"}
|
package/dist/services/schemas.js
CHANGED
|
@@ -10,7 +10,7 @@ export async function getSchemas(dataset, projectId, id) {
|
|
|
10
10
|
const client = await getSchemaClient();
|
|
11
11
|
return client.request({
|
|
12
12
|
method: 'GET',
|
|
13
|
-
|
|
13
|
+
url: `/projects/${projectId}/datasets/${dataset}/schemas${id ? `/${id}` : ''}`
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
16
|
export async function deleteSchema(dataset, projectId, id) {
|
|
@@ -23,7 +23,7 @@ export async function deleteSchema(dataset, projectId, id) {
|
|
|
23
23
|
const client = await getSchemaClient();
|
|
24
24
|
return client.request({
|
|
25
25
|
method: 'DELETE',
|
|
26
|
-
|
|
26
|
+
url: `/projects/${projectId}/datasets/${dataset}/schemas/${id}`
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
export async function updateSchemas(dataset, projectId, schemas) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/services/schemas.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\n\nimport {type StoredWorkspaceSchema} from '../actions/manifest/types.js'\n\nexport const SCHEMA_API_VERSION = 'v2025-03-01'\n\nasync function getSchemaClient() {\n return await getGlobalCliClient({\n apiVersion: SCHEMA_API_VERSION,\n requireUser: true,\n })\n}\n\nexport async function getSchemas(dataset: string, projectId: string, id?: string) {\n const client = await getSchemaClient()\n\n return client.request<StoredWorkspaceSchema[]>({\n method: 'GET',\n
|
|
1
|
+
{"version":3,"sources":["../../src/services/schemas.ts"],"sourcesContent":["import {getGlobalCliClient} from '@sanity/cli-core'\n\nimport {type StoredWorkspaceSchema} from '../actions/manifest/types.js'\n\nexport const SCHEMA_API_VERSION = 'v2025-03-01'\n\nasync function getSchemaClient() {\n return await getGlobalCliClient({\n apiVersion: SCHEMA_API_VERSION,\n requireUser: true,\n })\n}\n\nexport async function getSchemas(dataset: string, projectId: string, id?: string) {\n const client = await getSchemaClient()\n\n return client.request<StoredWorkspaceSchema[]>({\n method: 'GET',\n url: `/projects/${projectId}/datasets/${dataset}/schemas${id ? `/${id}` : ''}`,\n })\n}\n\nexport async function deleteSchema(dataset: string, projectId: string, id: string) {\n const exists = await getSchemas(dataset, projectId, id)\n\n if (exists?.length === 0) {\n return {\n deleted: false,\n }\n }\n\n const client = await getSchemaClient()\n\n return client.request({\n method: 'DELETE',\n url: `/projects/${projectId}/datasets/${dataset}/schemas/${id}`,\n })\n}\n\nexport async function updateSchemas<T>(dataset: string, projectId: string, schemas: T) {\n const client = await getSchemaClient()\n\n return client.request({\n body: {\n schemas,\n },\n method: 'PUT',\n url: `/projects/${projectId}/datasets/${dataset}/schemas`,\n })\n}\n"],"names":["getGlobalCliClient","SCHEMA_API_VERSION","getSchemaClient","apiVersion","requireUser","getSchemas","dataset","projectId","id","client","request","method","url","deleteSchema","exists","length","deleted","updateSchemas","schemas","body"],"mappings":"AAAA,SAAQA,kBAAkB,QAAO,mBAAkB;AAInD,OAAO,MAAMC,qBAAqB,cAAa;AAE/C,eAAeC;IACb,OAAO,MAAMF,mBAAmB;QAC9BG,YAAYF;QACZG,aAAa;IACf;AACF;AAEA,OAAO,eAAeC,WAAWC,OAAe,EAAEC,SAAiB,EAAEC,EAAW;IAC9E,MAAMC,SAAS,MAAMP;IAErB,OAAOO,OAAOC,OAAO,CAA0B;QAC7CC,QAAQ;QACRC,KAAK,CAAC,UAAU,EAAEL,UAAU,UAAU,EAAED,QAAQ,QAAQ,EAAEE,KAAK,CAAC,CAAC,EAAEA,IAAI,GAAG,IAAI;IAChF;AACF;AAEA,OAAO,eAAeK,aAAaP,OAAe,EAAEC,SAAiB,EAAEC,EAAU;IAC/E,MAAMM,SAAS,MAAMT,WAAWC,SAASC,WAAWC;IAEpD,IAAIM,QAAQC,WAAW,GAAG;QACxB,OAAO;YACLC,SAAS;QACX;IACF;IAEA,MAAMP,SAAS,MAAMP;IAErB,OAAOO,OAAOC,OAAO,CAAC;QACpBC,QAAQ;QACRC,KAAK,CAAC,UAAU,EAAEL,UAAU,UAAU,EAAED,QAAQ,SAAS,EAAEE,IAAI;IACjE;AACF;AAEA,OAAO,eAAeS,cAAiBX,OAAe,EAAEC,SAAiB,EAAEW,OAAU;IACnF,MAAMT,SAAS,MAAMP;IAErB,OAAOO,OAAOC,OAAO,CAAC;QACpBS,MAAM;YACJD;QACF;QACAP,QAAQ;QACRC,KAAK,CAAC,UAAU,EAAEL,UAAU,UAAU,EAAED,QAAQ,QAAQ,CAAC;IAC3D;AACF"}
|
|
@@ -22,7 +22,7 @@ export async function sendEvents(batch) {
|
|
|
22
22
|
},
|
|
23
23
|
json: true,
|
|
24
24
|
method: 'POST',
|
|
25
|
-
|
|
25
|
+
url: '/intake/batch'
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
async function getTelemetryConsent() {
|
|
@@ -32,7 +32,7 @@ async function getTelemetryConsent() {
|
|
|
32
32
|
});
|
|
33
33
|
return client.request({
|
|
34
34
|
tag: 'telemetry-consent',
|
|
35
|
-
|
|
35
|
+
url: '/intake/telemetry-status'
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
38
|
/**
|