@sanity/cli 6.0.0-alpha.9 → 6.0.0
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/README.md +602 -258
- package/bin/run.js +2 -0
- package/dist/SanityHelp.js +51 -23
- package/dist/SanityHelp.js.map +1 -1
- package/dist/actions/auth/authServer.js +28 -22
- package/dist/actions/auth/authServer.js.map +1 -1
- package/dist/actions/auth/login/getProvider.js +49 -38
- package/dist/actions/auth/login/getProvider.js.map +1 -1
- package/dist/actions/auth/login/getSSOProvider.js +25 -19
- package/dist/actions/auth/login/getSSOProvider.js.map +1 -1
- package/dist/actions/auth/login/login.js +12 -33
- package/dist/actions/auth/login/login.js.map +1 -1
- package/dist/actions/auth/types.js.map +1 -1
- package/dist/actions/backup/downloadAsset.js +9 -9
- package/dist/actions/backup/downloadAsset.js.map +1 -1
- package/dist/actions/backup/downloadDocument.js +8 -8
- package/dist/actions/backup/downloadDocument.js.map +1 -1
- package/dist/actions/build/buildApp.js +55 -18
- package/dist/actions/build/buildApp.js.map +1 -1
- package/dist/actions/build/buildStaticFiles.js +3 -2
- package/dist/actions/build/buildStaticFiles.js.map +1 -1
- package/dist/actions/build/buildStudio.js +72 -44
- package/dist/actions/build/buildStudio.js.map +1 -1
- package/dist/actions/build/buildVendorDependencies.js +18 -52
- package/dist/actions/build/buildVendorDependencies.js.map +1 -1
- package/dist/actions/build/checkRequiredDependencies.js +13 -8
- package/dist/actions/build/checkRequiredDependencies.js.map +1 -1
- package/dist/actions/build/checkStudioDependencyVersions.js +19 -17
- package/dist/actions/build/checkStudioDependencyVersions.js.map +1 -1
- package/dist/actions/build/createExternalFromImportMap.js +1 -1
- package/dist/actions/build/createExternalFromImportMap.js.map +1 -1
- package/dist/actions/build/determineBasePath.js +5 -2
- package/dist/actions/build/determineBasePath.js.map +1 -1
- package/dist/actions/build/getViteConfig.js +47 -4
- package/dist/actions/build/getViteConfig.js.map +1 -1
- package/dist/actions/build/handlePrereleaseVersions.js +44 -0
- package/dist/actions/build/handlePrereleaseVersions.js.map +1 -0
- package/dist/actions/build/renderDocument.js +6 -10
- package/dist/actions/build/renderDocument.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js +4 -4
- package/dist/actions/build/renderDocumentWorker/components/BasicDocument.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js +3 -3
- package/dist/actions/build/renderDocumentWorker/components/DefaultDocument.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js +1 -0
- package/dist/actions/build/renderDocumentWorker/components/GlobalErrorHandler.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js +2 -2
- package/dist/actions/build/renderDocumentWorker/getDocumentComponent.js.map +1 -1
- package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js +1 -1
- package/dist/actions/build/renderDocumentWorker/renderDocumentWorker.js.map +1 -1
- package/dist/actions/build/shouldAutoUpdate.js +2 -0
- package/dist/actions/build/shouldAutoUpdate.js.map +1 -1
- package/dist/actions/build/types.js.map +1 -1
- package/dist/actions/build/writeFavicons.js +3 -5
- package/dist/actions/build/writeFavicons.js.map +1 -1
- package/dist/actions/build/writeSanityRuntime.js +4 -3
- package/dist/actions/build/writeSanityRuntime.js.map +1 -1
- package/dist/actions/codemods/reactIconsV3.js +2 -2
- package/dist/actions/codemods/reactIconsV3.js.map +1 -1
- package/dist/actions/dataset/create.js +7 -1
- package/dist/actions/dataset/create.js.map +1 -1
- package/dist/actions/dataset/determineDatasetAclMode.js.map +1 -1
- package/dist/actions/dataset/resolveDataset.js +26 -0
- package/dist/actions/dataset/resolveDataset.js.map +1 -0
- package/dist/actions/debug/formatters.js +22 -0
- package/dist/actions/debug/formatters.js.map +1 -0
- package/dist/actions/deploy/createStudioUserApplication.js +17 -4
- package/dist/actions/deploy/createStudioUserApplication.js.map +1 -1
- package/dist/actions/deploy/deployApp.js +41 -15
- package/dist/actions/deploy/deployApp.js.map +1 -1
- package/dist/actions/deploy/deployStudio.js +92 -44
- package/dist/actions/deploy/deployStudio.js.map +1 -1
- package/dist/actions/deploy/deployStudioSchemasAndManifests.js +55 -0
- package/dist/actions/deploy/deployStudioSchemasAndManifests.js.map +1 -0
- package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js +120 -0
- package/dist/actions/deploy/deployStudioSchemasAndManifests.worker.js.map +1 -0
- package/dist/actions/deploy/findUserApplicationForStudio.js +35 -12
- package/dist/actions/deploy/findUserApplicationForStudio.js.map +1 -1
- package/dist/actions/deploy/types.js +10 -1
- package/dist/actions/deploy/types.js.map +1 -1
- package/dist/actions/deploy/urlUtils.js +21 -0
- package/dist/actions/deploy/urlUtils.js.map +1 -0
- package/dist/actions/dev/getDashboardAppUrl.js +48 -0
- package/dist/actions/dev/getDashboardAppUrl.js.map +1 -0
- package/dist/actions/dev/getDevServerConfig.js +7 -3
- package/dist/actions/dev/getDevServerConfig.js.map +1 -1
- package/dist/actions/dev/startAppDevServer.js +3 -3
- package/dist/actions/dev/startAppDevServer.js.map +1 -1
- package/dist/actions/dev/startStudioDevServer.js +14 -14
- package/dist/actions/dev/startStudioDevServer.js.map +1 -1
- package/dist/actions/doctor/checks/cliInstallation.js +56 -0
- package/dist/actions/doctor/checks/cliInstallation.js.map +1 -0
- package/dist/actions/doctor/checks/index.js +16 -0
- package/dist/actions/doctor/checks/index.js.map +1 -0
- package/dist/actions/doctor/runDoctorChecks.js +56 -0
- package/dist/actions/doctor/runDoctorChecks.js.map +1 -0
- package/dist/actions/doctor/types.js +3 -0
- package/dist/actions/doctor/types.js.map +1 -0
- package/dist/actions/documents/types.js.map +1 -1
- package/dist/actions/documents/validate.js +11 -2
- package/dist/actions/documents/validate.js.map +1 -1
- package/dist/actions/documents/validateDocuments.worker.js +4 -4
- package/dist/actions/documents/validateDocuments.worker.js.map +1 -1
- package/dist/actions/documents/validation/reporters/jsonReporter.js +1 -1
- package/dist/actions/documents/validation/reporters/jsonReporter.js.map +1 -1
- package/dist/actions/documents/validation/reporters/ndjsonReporter.js +1 -1
- package/dist/actions/documents/validation/reporters/ndjsonReporter.js.map +1 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js +1 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/formatDocumentValidation.js.map +1 -1
- package/dist/actions/documents/validation/reporters/prettyReporter/tree.js +108 -0
- package/dist/actions/documents/validation/reporters/prettyReporter/tree.js.map +1 -0
- package/dist/actions/graphql/SchemaError.js +4 -26
- package/dist/actions/graphql/SchemaError.js.map +1 -1
- package/dist/actions/graphql/__tests__/fixtures/many-self-refs.js +540 -0
- package/dist/actions/graphql/__tests__/fixtures/many-self-refs.js.map +1 -0
- package/dist/actions/graphql/__tests__/fixtures/test-studio.js +1143 -0
- package/dist/actions/graphql/__tests__/fixtures/test-studio.js.map +1 -0
- package/dist/actions/graphql/__tests__/fixtures/union-refs.js +591 -0
- package/dist/actions/graphql/__tests__/fixtures/union-refs.js.map +1 -0
- package/dist/actions/graphql/__tests__/helpers.js +23 -0
- package/dist/actions/graphql/__tests__/helpers.js.map +1 -0
- package/dist/actions/graphql/extractFromSanitySchema.js +5 -5
- package/dist/actions/graphql/extractFromSanitySchema.js.map +1 -1
- package/dist/actions/graphql/extractGraphQLAPIs.js +150 -0
- package/dist/actions/graphql/extractGraphQLAPIs.js.map +1 -0
- package/dist/actions/graphql/extractGraphQLAPIs.worker.js +12 -0
- package/dist/actions/graphql/extractGraphQLAPIs.worker.js.map +1 -0
- package/dist/actions/graphql/gen1/generateTypeFilters.js +1 -1
- package/dist/actions/graphql/gen1/generateTypeFilters.js.map +1 -1
- package/dist/actions/graphql/gen1/generateTypeQueries.js +2 -1
- package/dist/actions/graphql/gen1/generateTypeQueries.js.map +1 -1
- package/dist/actions/graphql/gen1/index.js +5 -5
- package/dist/actions/graphql/gen1/index.js.map +1 -1
- package/dist/actions/graphql/gen2/generateTypeQueries.js +1 -1
- package/dist/actions/graphql/gen2/generateTypeQueries.js.map +1 -1
- package/dist/actions/graphql/gen2/index.js +6 -6
- package/dist/actions/graphql/gen2/index.js.map +1 -1
- package/dist/actions/graphql/gen3/generateTypeQueries.js +3 -4
- package/dist/actions/graphql/gen3/generateTypeQueries.js.map +1 -1
- package/dist/actions/graphql/gen3/index.js +6 -7
- package/dist/actions/graphql/gen3/index.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.js +15 -57
- package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
- package/dist/actions/graphql/getGraphQLAPIs.worker.js +75 -106
- package/dist/actions/graphql/getGraphQLAPIs.worker.js.map +1 -1
- package/dist/actions/graphql/helpers.js +13 -0
- package/dist/actions/graphql/helpers.js.map +1 -1
- package/dist/actions/graphql/resolveGraphQLApisFromWorkspaces.js +187 -0
- package/dist/actions/graphql/resolveGraphQLApisFromWorkspaces.js.map +1 -0
- package/dist/actions/graphql/types.js +1 -1
- package/dist/actions/graphql/types.js.map +1 -1
- package/dist/actions/init/bootstrapLocalTemplate.js +10 -8
- package/dist/actions/init/bootstrapLocalTemplate.js.map +1 -1
- package/dist/actions/init/bootstrapRemoteTemplate.js +6 -5
- package/dist/actions/init/bootstrapRemoteTemplate.js.map +1 -1
- package/dist/actions/init/bootstrapTemplate.js.map +1 -1
- package/dist/actions/init/checkNextJsReactCompatibility.js +1 -1
- package/dist/actions/init/checkNextJsReactCompatibility.js.map +1 -1
- package/dist/actions/init/createAppCliConfig.js.map +1 -1
- package/dist/actions/init/createCliConfig.js.map +1 -1
- package/dist/actions/init/createPackageManifest.js +21 -9
- package/dist/actions/init/createPackageManifest.js.map +1 -1
- package/dist/actions/init/remoteTemplate.js +1 -2
- package/dist/actions/init/remoteTemplate.js.map +1 -1
- package/dist/actions/init/sdkAppDependencies.js +19 -0
- package/dist/actions/init/sdkAppDependencies.js.map +1 -0
- package/dist/actions/init/studioDependencies.js.map +1 -0
- package/dist/actions/init/templates/appQuickstart.js +1 -22
- package/dist/actions/init/templates/appQuickstart.js.map +1 -1
- package/dist/actions/init/templates/appSanityUi.js +3 -22
- package/dist/actions/init/templates/appSanityUi.js.map +1 -1
- package/dist/actions/init/types.js.map +1 -1
- package/dist/actions/manifest/SchemaIcon.js +6 -4
- package/dist/actions/manifest/SchemaIcon.js.map +1 -1
- package/dist/actions/manifest/blockTypeTransformer.js +67 -0
- package/dist/actions/manifest/blockTypeTransformer.js.map +1 -0
- package/dist/actions/manifest/debug.js +4 -0
- package/dist/actions/manifest/debug.js.map +1 -0
- package/dist/actions/manifest/extractAppManifest.js +39 -22
- package/dist/actions/manifest/extractAppManifest.js.map +1 -1
- package/dist/actions/manifest/extractManifest.js +27 -78
- package/dist/actions/manifest/extractManifest.js.map +1 -1
- package/dist/actions/manifest/extractManifest.worker.js +30 -0
- package/dist/actions/manifest/extractManifest.worker.js.map +1 -0
- package/dist/actions/manifest/extractWorkspaceManifest.js +31 -372
- package/dist/actions/manifest/extractWorkspaceManifest.js.map +1 -1
- package/dist/actions/manifest/iconResolver.js +30 -0
- package/dist/actions/manifest/iconResolver.js.map +1 -0
- package/dist/actions/manifest/referenceTransformer.js +51 -0
- package/dist/actions/manifest/referenceTransformer.js.map +1 -0
- package/dist/actions/manifest/schemaTypeHelpers.js +2 -2
- package/dist/actions/manifest/schemaTypeHelpers.js.map +1 -1
- package/dist/actions/manifest/schemaTypeTransformer.js +168 -0
- package/dist/actions/manifest/schemaTypeTransformer.js.map +1 -0
- package/dist/actions/manifest/transformerUtils.js +40 -0
- package/dist/actions/manifest/transformerUtils.js.map +1 -0
- package/dist/actions/manifest/types.js +5 -0
- package/dist/actions/manifest/types.js.map +1 -1
- package/dist/actions/manifest/validationTransformer.js +84 -0
- package/dist/actions/manifest/validationTransformer.js.map +1 -0
- package/dist/actions/manifest/writeManifestFile.js +30 -0
- package/dist/actions/manifest/writeManifestFile.js.map +1 -0
- package/dist/actions/manifest/writeWorkspaceFiles.js +30 -0
- package/dist/actions/manifest/writeWorkspaceFiles.js.map +1 -0
- package/dist/actions/mcp/detectAvailableEditors.js +16 -4
- package/dist/actions/mcp/detectAvailableEditors.js.map +1 -1
- package/dist/actions/mcp/editorConfigs.js +64 -6
- package/dist/actions/mcp/editorConfigs.js.map +1 -1
- package/dist/actions/mcp/setupMCP.js.map +1 -1
- package/dist/actions/mcp/writeMCPConfig.js +27 -15
- package/dist/actions/mcp/writeMCPConfig.js.map +1 -1
- package/dist/actions/media/buildNdjsonIndex.js +32 -0
- package/dist/actions/media/buildNdjsonIndex.js.map +1 -0
- package/dist/actions/media/importAspects.js +2 -11
- package/dist/actions/media/importAspects.js.map +1 -1
- package/dist/actions/media/importMedia.js +22 -18
- package/dist/actions/media/importMedia.js.map +1 -1
- package/dist/actions/organizations/findOrganizationByUserName.js +5 -0
- package/dist/actions/organizations/findOrganizationByUserName.js.map +1 -0
- package/dist/actions/organizations/getOrganization.js +3 -2
- package/dist/actions/organizations/getOrganization.js.map +1 -1
- package/dist/actions/organizations/getOrganizationChoices.js +27 -19
- package/dist/actions/organizations/getOrganizationChoices.js.map +1 -1
- package/dist/actions/organizations/types.js +3 -0
- package/dist/actions/organizations/types.js.map +1 -0
- package/dist/actions/projects/getManageUrl.js +1 -2
- package/dist/actions/projects/getManageUrl.js.map +1 -1
- package/dist/actions/schema/deleteSchemaAction.js +14 -30
- package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
- package/dist/actions/schema/deploySchemas.js +22 -91
- package/dist/actions/schema/deploySchemas.js.map +1 -1
- package/dist/actions/schema/extractSanitySchema.worker.js +0 -5
- package/dist/actions/schema/extractSanitySchema.worker.js.map +1 -1
- package/dist/actions/schema/extractSanityWorkspace.worker.js +24 -0
- package/dist/actions/schema/extractSanityWorkspace.worker.js.map +1 -0
- package/dist/actions/schema/extractSchema.js +8 -40
- package/dist/actions/schema/extractSchema.js.map +1 -1
- package/dist/actions/schema/extractSchemaWatcher.js +128 -0
- package/dist/actions/schema/extractSchemaWatcher.js.map +1 -0
- package/dist/actions/schema/formatSchemaValidation.js +5 -1
- package/dist/actions/schema/formatSchemaValidation.js.map +1 -1
- package/dist/actions/schema/getExtractOptions.js +16 -0
- package/dist/actions/schema/getExtractOptions.js.map +1 -0
- package/dist/actions/schema/listSchemas.js +53 -56
- package/dist/actions/schema/listSchemas.js.map +1 -1
- package/dist/actions/schema/matchSchemaPattern.js +22 -0
- package/dist/actions/schema/matchSchemaPattern.js.map +1 -0
- package/dist/actions/schema/runSchemaExtraction.js +39 -0
- package/dist/actions/schema/runSchemaExtraction.js.map +1 -0
- package/dist/actions/schema/types.js +8 -0
- package/dist/actions/schema/types.js.map +1 -1
- package/dist/actions/schema/uniqueWorkspaces.worker.js +24 -0
- package/dist/actions/schema/uniqueWorkspaces.worker.js.map +1 -0
- package/dist/actions/schema/updateWorkspaceSchema.js +63 -0
- package/dist/actions/schema/updateWorkspaceSchema.js.map +1 -0
- package/dist/actions/schema/uploadSchemaToLexicon.js +87 -0
- package/dist/actions/schema/uploadSchemaToLexicon.js.map +1 -0
- package/dist/actions/schema/utils/SchemaExtractionError.js +10 -0
- package/dist/actions/schema/utils/SchemaExtractionError.js.map +1 -0
- package/dist/actions/schema/utils/schemaStoreValidation.js +1 -15
- package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js +1 -1
- package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -1
- package/dist/actions/schema/validateSchema.worker.js +1 -8
- package/dist/actions/schema/validateSchema.worker.js.map +1 -1
- package/dist/actions/schema/watchExtractSchema.js +72 -0
- package/dist/actions/schema/watchExtractSchema.js.map +1 -0
- package/dist/actions/telemetry/isTrueish.js +10 -0
- package/dist/actions/telemetry/isTrueish.js.map +1 -0
- package/dist/actions/telemetry/resolveConsent.js +2 -1
- package/dist/actions/telemetry/resolveConsent.js.map +1 -1
- package/dist/actions/telemetry/setConsent.js +2 -1
- package/dist/actions/telemetry/setConsent.js.map +1 -1
- package/dist/actions/users/getMembersForProject.js.map +1 -1
- package/dist/actions/users/getPendingInvitations.js +1 -1
- package/dist/actions/users/getPendingInvitations.js.map +1 -1
- package/dist/actions/users/types.js.map +1 -1
- package/dist/actions/versions/filterSanityModules.js.map +1 -1
- package/dist/actions/versions/findSanityModulesVersions.js +2 -3
- package/dist/actions/versions/findSanityModulesVersions.js.map +1 -1
- package/dist/actions/versions/getFormatters.js +1 -1
- package/dist/actions/versions/getFormatters.js.map +1 -1
- package/dist/actions/versions/tryFindLatestVersion.js +1 -1
- package/dist/actions/versions/tryFindLatestVersion.js.map +1 -1
- package/dist/commands/backup/disable.js +22 -7
- package/dist/commands/backup/disable.js.map +1 -1
- package/dist/commands/backup/download.js +19 -10
- package/dist/commands/backup/download.js.map +1 -1
- package/dist/commands/backup/enable.js +22 -7
- package/dist/commands/backup/enable.js.map +1 -1
- package/dist/commands/backup/list.js +20 -8
- package/dist/commands/backup/list.js.map +1 -1
- package/dist/commands/build.js +2 -5
- package/dist/commands/build.js.map +1 -1
- package/dist/commands/cors/add.js +20 -7
- package/dist/commands/cors/add.js.map +1 -1
- package/dist/commands/cors/delete.js +22 -7
- package/dist/commands/cors/delete.js.map +1 -1
- package/dist/commands/cors/list.js +22 -7
- package/dist/commands/cors/list.js.map +1 -1
- package/dist/commands/dataset/alias/create.js +26 -7
- package/dist/commands/dataset/alias/create.js.map +1 -1
- package/dist/commands/dataset/alias/delete.js +20 -7
- package/dist/commands/dataset/alias/delete.js.map +1 -1
- package/dist/commands/dataset/alias/link.js +20 -7
- package/dist/commands/dataset/alias/link.js.map +1 -1
- package/dist/commands/dataset/alias/unlink.js +20 -7
- package/dist/commands/dataset/alias/unlink.js.map +1 -1
- package/dist/commands/dataset/copy.js +45 -30
- package/dist/commands/dataset/copy.js.map +1 -1
- package/dist/commands/dataset/create.js +32 -7
- package/dist/commands/dataset/create.js.map +1 -1
- package/dist/commands/dataset/delete.js +16 -7
- package/dist/commands/dataset/delete.js.map +1 -1
- package/dist/commands/dataset/embeddings/disable.js +77 -0
- package/dist/commands/dataset/embeddings/disable.js.map +1 -0
- package/dist/commands/dataset/embeddings/enable.js +141 -0
- package/dist/commands/dataset/embeddings/enable.js.map +1 -0
- package/dist/commands/dataset/embeddings/status.js +72 -0
- package/dist/commands/dataset/embeddings/status.js.map +1 -0
- package/dist/commands/dataset/export.js +25 -16
- package/dist/commands/dataset/export.js.map +1 -1
- package/dist/commands/dataset/import.js +306 -1
- package/dist/commands/dataset/import.js.map +1 -1
- package/dist/commands/dataset/list.js +22 -7
- package/dist/commands/dataset/list.js.map +1 -1
- package/dist/commands/dataset/visibility/get.js +18 -7
- package/dist/commands/dataset/visibility/get.js.map +1 -1
- package/dist/commands/dataset/visibility/set.js +22 -7
- package/dist/commands/dataset/visibility/set.js.map +1 -1
- package/dist/commands/debug.js +4 -2
- package/dist/commands/debug.js.map +1 -1
- package/dist/commands/deploy.js +22 -11
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.js +2 -4
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/doctor.js +125 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/documents/create.js +19 -12
- package/dist/commands/documents/create.js.map +1 -1
- package/dist/commands/documents/delete.js +19 -12
- package/dist/commands/documents/delete.js.map +1 -1
- package/dist/commands/documents/get.js +17 -12
- package/dist/commands/documents/get.js.map +1 -1
- package/dist/commands/documents/query.js +26 -18
- package/dist/commands/documents/query.js.map +1 -1
- package/dist/commands/documents/validate.js +32 -10
- package/dist/commands/documents/validate.js.map +1 -1
- package/dist/commands/graphql/deploy.js +58 -30
- package/dist/commands/graphql/deploy.js.map +1 -1
- package/dist/commands/graphql/list.js +15 -7
- package/dist/commands/graphql/list.js.map +1 -1
- package/dist/commands/graphql/undeploy.js +37 -19
- package/dist/commands/graphql/undeploy.js.map +1 -1
- package/dist/commands/hook/attempt.js +22 -7
- package/dist/commands/hook/attempt.js.map +1 -1
- package/dist/commands/hook/create.js +23 -8
- package/dist/commands/hook/create.js.map +1 -1
- package/dist/commands/hook/delete.js +22 -7
- package/dist/commands/hook/delete.js.map +1 -1
- package/dist/commands/hook/list.js +22 -7
- package/dist/commands/hook/list.js.map +1 -1
- package/dist/commands/hook/logs.js +21 -8
- package/dist/commands/hook/logs.js.map +1 -1
- package/dist/commands/init.js +46 -28
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.js +19 -6
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logout.js +8 -6
- package/dist/commands/logout.js.map +1 -1
- package/dist/commands/manage.js +0 -1
- package/dist/commands/manage.js.map +1 -1
- package/dist/commands/manifest/extract.js +14 -10
- package/dist/commands/manifest/extract.js.map +1 -1
- package/dist/commands/mcp/configure.js +1 -1
- package/dist/commands/mcp/configure.js.map +1 -1
- package/dist/commands/media/create-aspect.js +4 -4
- package/dist/commands/media/create-aspect.js.map +1 -1
- package/dist/commands/media/delete-aspect.js +9 -7
- package/dist/commands/media/delete-aspect.js.map +1 -1
- package/dist/commands/media/deploy-aspect.js +22 -9
- package/dist/commands/media/deploy-aspect.js.map +1 -1
- package/dist/commands/media/export.js +9 -7
- package/dist/commands/media/export.js.map +1 -1
- package/dist/commands/media/import.js +10 -8
- package/dist/commands/media/import.js.map +1 -1
- package/dist/commands/preview.js +2 -4
- package/dist/commands/preview.js.map +1 -1
- package/dist/commands/projects/list.js +2 -1
- package/dist/commands/projects/list.js.map +1 -1
- package/dist/commands/schema/delete.js +33 -34
- package/dist/commands/schema/delete.js.map +1 -1
- package/dist/commands/schema/deploy.js +19 -30
- package/dist/commands/schema/deploy.js.map +1 -1
- package/dist/commands/schema/extract.js +32 -4
- package/dist/commands/schema/extract.js.map +1 -1
- package/dist/commands/schema/list.js +10 -31
- package/dist/commands/schema/list.js.map +1 -1
- package/dist/commands/tokens/add.js +24 -7
- package/dist/commands/tokens/add.js.map +1 -1
- package/dist/commands/tokens/delete.js +20 -7
- package/dist/commands/tokens/delete.js.map +1 -1
- package/dist/commands/tokens/list.js +20 -7
- package/dist/commands/tokens/list.js.map +1 -1
- package/dist/commands/users/invite.js +24 -7
- package/dist/commands/users/invite.js.map +1 -1
- package/dist/commands/users/list.js +76 -33
- package/dist/commands/users/list.js.map +1 -1
- package/dist/commands/versions.js +1 -1
- package/dist/commands/versions.js.map +1 -1
- package/dist/config/createCliConfig.js +1 -2
- package/dist/config/createCliConfig.js.map +1 -1
- package/dist/exports/_internal.d.ts +132 -0
- package/dist/exports/_internal.js +4 -0
- package/dist/exports/_internal.js.map +1 -0
- package/dist/exports/index.d.ts +113 -0
- package/dist/exports/index.js +6 -0
- package/dist/exports/index.js.map +1 -0
- package/dist/hooks/init/checkForUpdates.js +14 -0
- package/dist/hooks/init/checkForUpdates.js.map +1 -0
- package/dist/hooks/prerun/flushTelemetry.worker.js +1 -1
- package/dist/hooks/prerun/flushTelemetry.worker.js.map +1 -1
- package/dist/hooks/prerun/injectEnvVariables.js +9 -1
- package/dist/hooks/prerun/injectEnvVariables.js.map +1 -1
- package/dist/hooks/prerun/setupTelemetry.js +9 -3
- package/dist/hooks/prerun/setupTelemetry.js.map +1 -1
- package/dist/prompts/promptForProject.js +64 -0
- package/dist/prompts/promptForProject.js.map +1 -0
- package/dist/{actions/auth/login/promptProviders.js → prompts/promptForProviders.js} +3 -3
- package/dist/prompts/promptForProviders.js.map +1 -0
- package/dist/prompts/selectMediaLibrary.js +1 -1
- package/dist/prompts/selectMediaLibrary.js.map +1 -1
- package/dist/server/devServer.js +4 -2
- package/dist/server/devServer.js.map +1 -1
- package/dist/server/previewServer.js +2 -2
- package/dist/server/previewServer.js.map +1 -1
- package/dist/server/vite/plugin-schema-extraction.js +201 -0
- package/dist/server/vite/plugin-schema-extraction.js.map +1 -0
- package/dist/server/vite/plugin-typegen.js +217 -0
- package/dist/server/vite/plugin-typegen.js.map +1 -0
- package/dist/services/auth.js +42 -3
- package/dist/services/auth.js.map +1 -1
- package/dist/services/datasets.js +7 -5
- package/dist/services/datasets.js.map +1 -1
- package/dist/services/docs.js +2 -2
- package/dist/services/docs.js.map +1 -1
- package/dist/services/embeddings.js +25 -0
- package/dist/services/embeddings.js.map +1 -0
- package/dist/services/getUrlHeaders.js +7 -18
- package/dist/services/getUrlHeaders.js.map +1 -1
- package/dist/services/grants.js +13 -0
- package/dist/services/grants.js.map +1 -0
- package/dist/services/graphql.js +1 -1
- package/dist/services/graphql.js.map +1 -1
- package/dist/services/projects.js +4 -2
- package/dist/services/projects.js.map +1 -1
- package/dist/services/schemas.js +1 -1
- package/dist/services/schemas.js.map +1 -1
- package/dist/services/telemetry.js +2 -1
- package/dist/services/telemetry.js.map +1 -1
- package/dist/services/userApplications.js +21 -6
- package/dist/services/userApplications.js.map +1 -1
- package/dist/telemetry/extractSchema.telemetry.js +10 -0
- package/dist/telemetry/extractSchema.telemetry.js.map +1 -1
- package/dist/types/grants.js +3 -0
- package/dist/types/grants.js.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -1
- package/dist/util/checkProjectPermissions.js +21 -0
- package/dist/util/checkProjectPermissions.js.map +1 -0
- package/dist/util/cliClient.js +5 -3
- package/dist/util/cliClient.js.map +1 -1
- package/dist/util/compareDependencyVersions.js +74 -38
- package/dist/util/compareDependencyVersions.js.map +1 -1
- package/dist/util/createExpiringConfig.js +64 -0
- package/dist/util/createExpiringConfig.js.map +1 -0
- package/dist/util/detectFramework.js +135 -0
- package/dist/util/detectFramework.js.map +1 -0
- package/dist/util/errorMessages.js +0 -1
- package/dist/util/errorMessages.js.map +1 -1
- package/dist/util/extractDocumentsFromNdjsonOrTarball.js +1 -2
- package/dist/util/extractDocumentsFromNdjsonOrTarball.js.map +1 -1
- package/dist/util/getCliVersion.js +1 -1
- package/dist/util/getCliVersion.js.map +1 -1
- package/dist/util/getLocalPackageVersion.js +31 -23
- package/dist/util/getLocalPackageVersion.js.map +1 -1
- package/dist/util/getProjectDefaults.js.map +1 -1
- package/dist/util/getSharedServerConfig.js +1 -0
- package/dist/util/getSharedServerConfig.js.map +1 -1
- package/dist/util/getWorkspace.js +1 -1
- package/dist/util/getWorkspace.js.map +1 -1
- package/dist/util/isSchemaError.js +11 -0
- package/dist/util/isSchemaError.js.map +1 -0
- package/dist/util/isTar.js +8 -0
- package/dist/util/isTar.js.map +1 -0
- package/dist/util/packageManager/getPeerDependencies.js +44 -0
- package/dist/util/packageManager/getPeerDependencies.js.map +1 -0
- package/dist/util/packageManager/installationInfo/analyzeIssues.js +225 -0
- package/dist/util/packageManager/installationInfo/analyzeIssues.js.map +1 -0
- package/dist/util/packageManager/installationInfo/commands.js +73 -0
- package/dist/util/packageManager/installationInfo/commands.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectCliInstallation.js +66 -0
- package/dist/util/packageManager/installationInfo/detectCliInstallation.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectGlobals.js +295 -0
- package/dist/util/packageManager/installationInfo/detectGlobals.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectPackages.js +190 -0
- package/dist/util/packageManager/installationInfo/detectPackages.js.map +1 -0
- package/dist/util/packageManager/installationInfo/detectWorkspace.js +192 -0
- package/dist/util/packageManager/installationInfo/detectWorkspace.js.map +1 -0
- package/dist/util/packageManager/installationInfo/index.js +4 -0
- package/dist/util/packageManager/installationInfo/index.js.map +1 -0
- package/dist/util/packageManager/installationInfo/readJsonFile.js +14 -0
- package/dist/util/packageManager/installationInfo/readJsonFile.js.map +1 -0
- package/dist/util/packageManager/installationInfo/resolveVersionRange.js +42 -0
- package/dist/util/packageManager/installationInfo/resolveVersionRange.js.map +1 -0
- package/dist/util/packageManager/installationInfo/types.js +3 -0
- package/dist/util/packageManager/installationInfo/types.js.map +1 -0
- package/dist/util/packageManager/packageManagerChoice.js +1 -20
- package/dist/util/packageManager/packageManagerChoice.js.map +1 -1
- package/dist/util/packageManager/upgradePackages.js +4 -1
- package/dist/util/packageManager/upgradePackages.js.map +1 -1
- package/dist/util/promiseRaceWithTimeout.js +28 -0
- package/dist/util/promiseRaceWithTimeout.js.map +1 -0
- package/dist/util/readdirRecursive.js.map +1 -1
- package/dist/util/resolveLatestVersions.js +2 -2
- package/dist/util/resolveLatestVersions.js.map +1 -1
- package/dist/util/sharedFlags.js +54 -0
- package/dist/util/sharedFlags.js.map +1 -0
- package/dist/util/telemetry/cleanupOldTelemetryFiles.js +30 -0
- package/dist/util/telemetry/cleanupOldTelemetryFiles.js.map +1 -0
- package/dist/util/telemetry/createTelemetryStore.js +95 -0
- package/dist/util/telemetry/createTelemetryStore.js.map +1 -0
- package/dist/util/telemetry/createTraceId.js +10 -0
- package/dist/util/telemetry/createTraceId.js.map +1 -0
- package/dist/util/telemetry/findTelemetryFiles.js +35 -0
- package/dist/util/telemetry/findTelemetryFiles.js.map +1 -0
- package/dist/util/telemetry/flushTelemetryFiles.js +118 -0
- package/dist/util/telemetry/flushTelemetryFiles.js.map +1 -0
- package/dist/util/telemetry/generateTelemetryFilePath.js +30 -0
- package/dist/util/telemetry/generateTelemetryFilePath.js.map +1 -0
- package/dist/util/telemetry/logger.js +59 -0
- package/dist/util/telemetry/logger.js.map +1 -0
- package/dist/util/telemetry/readNDJSON.js +28 -0
- package/dist/util/telemetry/readNDJSON.js.map +1 -0
- package/dist/util/telemetry/telemetryStoreDebug.js +7 -0
- package/dist/util/telemetry/telemetryStoreDebug.js.map +1 -0
- package/dist/util/telemetry/trace.js +150 -0
- package/dist/util/telemetry/trace.js.map +1 -0
- package/dist/util/toForwardSlashes.js +8 -0
- package/dist/util/toForwardSlashes.js.map +1 -0
- package/dist/util/update/fetchLatestVersion.js +21 -0
- package/dist/util/update/fetchLatestVersion.js.map +1 -0
- package/dist/util/update/getUpdateCommand.js +20 -0
- package/dist/util/update/getUpdateCommand.js.map +1 -0
- package/dist/util/update/isInstalledUsingYarn.js +17 -0
- package/dist/util/update/isInstalledUsingYarn.js.map +1 -0
- package/dist/util/update/showNotificationUpdate.js +31 -0
- package/dist/util/update/showNotificationUpdate.js.map +1 -0
- package/dist/util/update/updateChecker.js +60 -0
- package/dist/util/update/updateChecker.js.map +1 -0
- package/dist/util/update/updateCheckerDebug.js +4 -0
- package/dist/util/update/updateCheckerDebug.js.map +1 -0
- package/oclif.config.js +1 -0
- package/oclif.manifest.json +900 -107
- package/package.json +72 -71
- package/static/favicons/apple-touch-icon.png +0 -0
- package/static/favicons/favicon-192.png +0 -0
- package/static/favicons/favicon-512.png +0 -0
- package/static/favicons/favicon-96.png +0 -0
- package/static/favicons/favicon.ico +0 -0
- package/static/favicons/favicon.svg +12 -0
- package/dist/actions/auth/login/promptProviders.js.map +0 -1
- package/dist/actions/dev/getCoreAppUrl.js +0 -10
- package/dist/actions/dev/getCoreAppUrl.js.map +0 -1
- package/dist/actions/schema/schemaStoreTypes.js +0 -19
- package/dist/actions/schema/schemaStoreTypes.js.map +0 -1
- package/dist/actions/schema/utils/manifestExtractor.js +0 -33
- package/dist/actions/schema/utils/manifestExtractor.js.map +0 -1
- package/dist/actions/schema/utils/manifestReader.js +0 -71
- package/dist/actions/schema/utils/manifestReader.js.map +0 -1
- package/dist/index.d.ts +0 -2326
- package/dist/index.js +0 -6
- package/dist/index.js.map +0 -1
- package/dist/studioDependencies.js.map +0 -1
- package/dist/typings/deepSortObject.d.js +0 -2
- package/dist/typings/deepSortObject.d.js.map +0 -1
- package/dist/util/findNdjsonEntry.js +0 -21
- package/dist/util/findNdjsonEntry.js.map +0 -1
- package/dist/util/importStudioConfig.js +0 -40
- package/dist/util/importStudioConfig.js.map +0 -1
- package/dist/util/readModuleVersion.js +0 -15
- package/dist/util/readModuleVersion.js.map +0 -1
- package/dist/util/readPackageJson.js +0 -44
- package/dist/util/readPackageJson.js.map +0 -1
- package/dist/util/readPackageManifest.js +0 -46
- package/dist/util/readPackageManifest.js.map +0 -1
- package/dist/util/uniqBy.js +0 -14
- package/dist/util/uniqBy.js.map +0 -1
- package/dist/util/workerChannels.js +0 -172
- package/dist/util/workerChannels.js.map +0 -1
- /package/dist/{studioDependencies.js → actions/init/studioDependencies.js} +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { getSanityUrl, SanityCommand, subdebug } from '@sanity/cli-core';
|
|
2
2
|
import open from 'open';
|
|
3
|
+
import { promptForProject } from '../../prompts/promptForProject.js';
|
|
3
4
|
import { getProjectById } from '../../services/projects.js';
|
|
4
|
-
import {
|
|
5
|
+
import { getProjectIdFlag } from '../../util/sharedFlags.js';
|
|
5
6
|
const createHookDebug = subdebug('hook:create');
|
|
6
7
|
export class CreateHookCommand extends SanityCommand {
|
|
7
8
|
static description = 'Create a new webhook for the current project';
|
|
@@ -9,15 +10,29 @@ export class CreateHookCommand extends SanityCommand {
|
|
|
9
10
|
{
|
|
10
11
|
command: '<%= config.bin %> <%= command.id %>',
|
|
11
12
|
description: 'Create a new webhook for the current project'
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
command: '<%= config.bin %> <%= command.id %> --project-id abc123',
|
|
16
|
+
description: 'Create a webhook for a specific project'
|
|
12
17
|
}
|
|
13
18
|
];
|
|
19
|
+
static flags = {
|
|
20
|
+
...getProjectIdFlag({
|
|
21
|
+
description: 'Project ID to create webhook for',
|
|
22
|
+
semantics: 'override'
|
|
23
|
+
})
|
|
24
|
+
};
|
|
14
25
|
async run() {
|
|
15
|
-
const projectId = await this.getProjectId(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
const projectId = await this.getProjectId({
|
|
27
|
+
fallback: ()=>promptForProject({
|
|
28
|
+
requiredPermissions: [
|
|
29
|
+
{
|
|
30
|
+
grant: 'read',
|
|
31
|
+
permission: 'sanity.project'
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
})
|
|
35
|
+
});
|
|
21
36
|
let projectInfo;
|
|
22
37
|
try {
|
|
23
38
|
projectInfo = await getProjectById(projectId);
|
|
@@ -29,7 +44,7 @@ export class CreateHookCommand extends SanityCommand {
|
|
|
29
44
|
});
|
|
30
45
|
}
|
|
31
46
|
const organizationId = projectInfo.organizationId || 'personal';
|
|
32
|
-
const manageUrl =
|
|
47
|
+
const manageUrl = getSanityUrl(`/organizations/${organizationId}/project/${projectId}/api/webhooks/new`);
|
|
33
48
|
this.log(`Opening ${manageUrl}`);
|
|
34
49
|
try {
|
|
35
50
|
await open(manageUrl);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/hook/create.ts"],"sourcesContent":["import {getSanityUrl, SanityCommand, subdebug} from '@sanity/cli-core'\nimport open from 'open'\n\nimport {getProjectById} from '../../services/projects.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/hook/create.ts"],"sourcesContent":["import {getSanityUrl, SanityCommand, subdebug} from '@sanity/cli-core'\nimport open from 'open'\n\nimport {promptForProject} from '../../prompts/promptForProject.js'\nimport {getProjectById} from '../../services/projects.js'\nimport {getProjectIdFlag} from '../../util/sharedFlags.js'\n\nconst createHookDebug = subdebug('hook:create')\n\nexport class CreateHookCommand extends SanityCommand<typeof CreateHookCommand> {\n static override description = 'Create a new webhook for the current project'\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Create a new webhook for the current project',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --project-id abc123',\n description: 'Create a webhook for a specific project',\n },\n ]\n\n static override flags = {\n ...getProjectIdFlag({\n description: 'Project ID to create webhook for',\n semantics: 'override',\n }),\n }\n\n public async run() {\n const projectId = await this.getProjectId({\n fallback: () =>\n promptForProject({requiredPermissions: [{grant: 'read', permission: 'sanity.project'}]}),\n })\n\n let projectInfo: {organizationId?: string | null}\n try {\n projectInfo = await getProjectById(projectId)\n } catch (error) {\n const err = error as Error\n createHookDebug(`Error fetching project info for project ${projectId}`, err)\n this.error(`Failed to fetch project information:\\n${err.message}`, {exit: 1})\n }\n\n const organizationId = projectInfo.organizationId || 'personal'\n const manageUrl = getSanityUrl(\n `/organizations/${organizationId}/project/${projectId}/api/webhooks/new`,\n )\n\n this.log(`Opening ${manageUrl}`)\n\n try {\n await open(manageUrl)\n } catch (error) {\n const err = error as Error\n createHookDebug('Error opening browser', err)\n this.error(`Failed to open browser:\\n${err.message}`, {exit: 1})\n }\n }\n}\n"],"names":["getSanityUrl","SanityCommand","subdebug","open","promptForProject","getProjectById","getProjectIdFlag","createHookDebug","CreateHookCommand","description","examples","command","flags","semantics","run","projectId","getProjectId","fallback","requiredPermissions","grant","permission","projectInfo","error","err","message","exit","organizationId","manageUrl","log"],"mappings":"AAAA,SAAQA,YAAY,EAAEC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AACtE,OAAOC,UAAU,OAAM;AAEvB,SAAQC,gBAAgB,QAAO,oCAAmC;AAClE,SAAQC,cAAc,QAAO,6BAA4B;AACzD,SAAQC,gBAAgB,QAAO,4BAA2B;AAE1D,MAAMC,kBAAkBL,SAAS;AAEjC,OAAO,MAAMM,0BAA0BP;IACrC,OAAgBQ,cAAc,+CAA8C;IAC5E,OAAgBC,WAAW;QACzB;YACEC,SAAS;YACTF,aAAa;QACf;QACA;YACEE,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,OAAgBG,QAAQ;QACtB,GAAGN,iBAAiB;YAClBG,aAAa;YACbI,WAAW;QACb,EAAE;IACJ,EAAC;IAED,MAAaC,MAAM;QACjB,MAAMC,YAAY,MAAM,IAAI,CAACC,YAAY,CAAC;YACxCC,UAAU,IACRb,iBAAiB;oBAACc,qBAAqB;wBAAC;4BAACC,OAAO;4BAAQC,YAAY;wBAAgB;qBAAE;gBAAA;QAC1F;QAEA,IAAIC;QACJ,IAAI;YACFA,cAAc,MAAMhB,eAAeU;QACrC,EAAE,OAAOO,OAAO;YACd,MAAMC,MAAMD;YACZf,gBAAgB,CAAC,wCAAwC,EAAEQ,WAAW,EAAEQ;YACxE,IAAI,CAACD,KAAK,CAAC,CAAC,sCAAsC,EAAEC,IAAIC,OAAO,EAAE,EAAE;gBAACC,MAAM;YAAC;QAC7E;QAEA,MAAMC,iBAAiBL,YAAYK,cAAc,IAAI;QACrD,MAAMC,YAAY3B,aAChB,CAAC,eAAe,EAAE0B,eAAe,SAAS,EAAEX,UAAU,iBAAiB,CAAC;QAG1E,IAAI,CAACa,GAAG,CAAC,CAAC,QAAQ,EAAED,WAAW;QAE/B,IAAI;YACF,MAAMxB,KAAKwB;QACb,EAAE,OAAOL,OAAO;YACd,MAAMC,MAAMD;YACZf,gBAAgB,yBAAyBgB;YACzC,IAAI,CAACD,KAAK,CAAC,CAAC,yBAAyB,EAAEC,IAAIC,OAAO,EAAE,EAAE;gBAACC,MAAM;YAAC;QAChE;IACF;AACF"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Args } from '@oclif/core';
|
|
2
2
|
import { SanityCommand, subdebug } from '@sanity/cli-core';
|
|
3
3
|
import { select } from '@sanity/cli-core/ux';
|
|
4
|
+
import { promptForProject } from '../../prompts/promptForProject.js';
|
|
4
5
|
import { deleteHookForProject, listHooksForProject } from '../../services/hooks.js';
|
|
5
|
-
import {
|
|
6
|
+
import { getProjectIdFlag } from '../../util/sharedFlags.js';
|
|
6
7
|
const deleteHookDebug = subdebug('hook:delete');
|
|
7
8
|
export class Delete extends SanityCommand {
|
|
8
9
|
static args = {
|
|
@@ -20,16 +21,30 @@ export class Delete extends SanityCommand {
|
|
|
20
21
|
{
|
|
21
22
|
command: '<%= config.bin %> <%= command.id %> my-hook',
|
|
22
23
|
description: 'Delete a specific hook by name'
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
command: '<%= config.bin %> <%= command.id %> --project-id abc123',
|
|
27
|
+
description: 'Delete a hook from a specific project'
|
|
23
28
|
}
|
|
24
29
|
];
|
|
30
|
+
static flags = {
|
|
31
|
+
...getProjectIdFlag({
|
|
32
|
+
description: 'Project ID to delete webhook from',
|
|
33
|
+
semantics: 'override'
|
|
34
|
+
})
|
|
35
|
+
};
|
|
25
36
|
async run() {
|
|
26
37
|
const { args } = await this.parse(Delete);
|
|
27
|
-
const projectId = await this.getProjectId(
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
38
|
+
const projectId = await this.getProjectId({
|
|
39
|
+
fallback: ()=>promptForProject({
|
|
40
|
+
requiredPermissions: [
|
|
41
|
+
{
|
|
42
|
+
grant: 'delete',
|
|
43
|
+
permission: 'sanity.project.webhooks'
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
})
|
|
47
|
+
});
|
|
33
48
|
// Get the hook ID to delete
|
|
34
49
|
const hookId = await this.promptForHook(args.name, projectId);
|
|
35
50
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/hook/delete.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\n\nimport {type Hook} from '../../actions/hook/types'\nimport {deleteHookForProject, listHooksForProject} from '../../services/hooks.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/hook/delete.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\n\nimport {type Hook} from '../../actions/hook/types'\nimport {promptForProject} from '../../prompts/promptForProject.js'\nimport {deleteHookForProject, listHooksForProject} from '../../services/hooks.js'\nimport {getProjectIdFlag} from '../../util/sharedFlags.js'\n\nconst deleteHookDebug = subdebug('hook:delete')\n\nexport class Delete extends SanityCommand<typeof Delete> {\n static override args = {\n name: Args.string({\n description: 'Name of hook to delete (will prompt if not provided)',\n required: false,\n }),\n }\n\n static override description = 'Delete a hook within your project'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Interactively select and delete a hook',\n },\n {\n command: '<%= config.bin %> <%= command.id %> my-hook',\n description: 'Delete a specific hook by name',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --project-id abc123',\n description: 'Delete a hook from a specific project',\n },\n ]\n\n static override flags = {\n ...getProjectIdFlag({\n description: 'Project ID to delete webhook from',\n semantics: 'override',\n }),\n }\n\n public async run(): Promise<void> {\n const {args} = await this.parse(Delete)\n\n const projectId = await this.getProjectId({\n fallback: () =>\n promptForProject({\n requiredPermissions: [{grant: 'delete', permission: 'sanity.project.webhooks'}],\n }),\n })\n\n // Get the hook ID to delete\n const hookId = await this.promptForHook(args.name, projectId)\n\n try {\n await deleteHookForProject(projectId, hookId)\n\n this.log('Hook deleted')\n } catch (error) {\n const err = error as Error\n deleteHookDebug(`Error deleting hook ${hookId} for project ${projectId}`, err)\n this.error(`Hook deletion failed:\\n${err.message}`, {exit: 1})\n }\n }\n\n private async promptForHook(\n specifiedName: string | undefined,\n projectId: string,\n ): Promise<string> {\n let hooks: Hook[]\n try {\n hooks = await listHooksForProject(projectId)\n } catch (error) {\n const err = error as Error\n deleteHookDebug(`Error fetching hooks for project ${projectId}`, err)\n this.error(`Failed to fetch hooks:\\n${err.message}`, {exit: 1})\n }\n\n if (hooks.length === 0) {\n this.error('No hooks configured for this project.', {exit: 1})\n }\n\n // If hook name is specified, find it in the list\n if (specifiedName) {\n const specifiedNameLower = specifiedName.toLowerCase()\n const selectedHook = hooks.find((hook) => hook.name.toLowerCase() === specifiedNameLower)\n\n if (!selectedHook) {\n this.error(`Hook with name \"${specifiedName}\" not found`, {exit: 1})\n }\n\n return selectedHook.id\n }\n\n // If no hook name specified, prompt user to select one\n const choices = hooks.map((hook) => ({\n name: hook.name,\n value: hook.id,\n }))\n\n const selectedId = await select({\n choices,\n message: 'Select hook to delete',\n })\n\n return selectedId\n }\n}\n"],"names":["Args","SanityCommand","subdebug","select","promptForProject","deleteHookForProject","listHooksForProject","getProjectIdFlag","deleteHookDebug","Delete","args","name","string","description","required","examples","command","flags","semantics","run","parse","projectId","getProjectId","fallback","requiredPermissions","grant","permission","hookId","promptForHook","log","error","err","message","exit","specifiedName","hooks","length","specifiedNameLower","toLowerCase","selectedHook","find","hook","id","choices","map","value","selectedId"],"mappings":"AAAA,SAAQA,IAAI,QAAO,cAAa;AAChC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AACxD,SAAQC,MAAM,QAAO,sBAAqB;AAG1C,SAAQC,gBAAgB,QAAO,oCAAmC;AAClE,SAAQC,oBAAoB,EAAEC,mBAAmB,QAAO,0BAAyB;AACjF,SAAQC,gBAAgB,QAAO,4BAA2B;AAE1D,MAAMC,kBAAkBN,SAAS;AAEjC,OAAO,MAAMO,eAAeR;IAC1B,OAAgBS,OAAO;QACrBC,MAAMX,KAAKY,MAAM,CAAC;YAChBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,oCAAmC;IAEjE,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;KACD,CAAA;IAED,OAAgBI,QAAQ;QACtB,GAAGV,iBAAiB;YAClBM,aAAa;YACbK,WAAW;QACb,EAAE;IACJ,EAAC;IAED,MAAaC,MAAqB;QAChC,MAAM,EAACT,IAAI,EAAC,GAAG,MAAM,IAAI,CAACU,KAAK,CAACX;QAEhC,MAAMY,YAAY,MAAM,IAAI,CAACC,YAAY,CAAC;YACxCC,UAAU,IACRnB,iBAAiB;oBACfoB,qBAAqB;wBAAC;4BAACC,OAAO;4BAAUC,YAAY;wBAAyB;qBAAE;gBACjF;QACJ;QAEA,4BAA4B;QAC5B,MAAMC,SAAS,MAAM,IAAI,CAACC,aAAa,CAAClB,KAAKC,IAAI,EAAEU;QAEnD,IAAI;YACF,MAAMhB,qBAAqBgB,WAAWM;YAEtC,IAAI,CAACE,GAAG,CAAC;QACX,EAAE,OAAOC,OAAO;YACd,MAAMC,MAAMD;YACZtB,gBAAgB,CAAC,oBAAoB,EAAEmB,OAAO,aAAa,EAAEN,WAAW,EAAEU;YAC1E,IAAI,CAACD,KAAK,CAAC,CAAC,uBAAuB,EAAEC,IAAIC,OAAO,EAAE,EAAE;gBAACC,MAAM;YAAC;QAC9D;IACF;IAEA,MAAcL,cACZM,aAAiC,EACjCb,SAAiB,EACA;QACjB,IAAIc;QACJ,IAAI;YACFA,QAAQ,MAAM7B,oBAAoBe;QACpC,EAAE,OAAOS,OAAO;YACd,MAAMC,MAAMD;YACZtB,gBAAgB,CAAC,iCAAiC,EAAEa,WAAW,EAAEU;YACjE,IAAI,CAACD,KAAK,CAAC,CAAC,wBAAwB,EAAEC,IAAIC,OAAO,EAAE,EAAE;gBAACC,MAAM;YAAC;QAC/D;QAEA,IAAIE,MAAMC,MAAM,KAAK,GAAG;YACtB,IAAI,CAACN,KAAK,CAAC,yCAAyC;gBAACG,MAAM;YAAC;QAC9D;QAEA,iDAAiD;QACjD,IAAIC,eAAe;YACjB,MAAMG,qBAAqBH,cAAcI,WAAW;YACpD,MAAMC,eAAeJ,MAAMK,IAAI,CAAC,CAACC,OAASA,KAAK9B,IAAI,CAAC2B,WAAW,OAAOD;YAEtE,IAAI,CAACE,cAAc;gBACjB,IAAI,CAACT,KAAK,CAAC,CAAC,gBAAgB,EAAEI,cAAc,WAAW,CAAC,EAAE;oBAACD,MAAM;gBAAC;YACpE;YAEA,OAAOM,aAAaG,EAAE;QACxB;QAEA,uDAAuD;QACvD,MAAMC,UAAUR,MAAMS,GAAG,CAAC,CAACH,OAAU,CAAA;gBACnC9B,MAAM8B,KAAK9B,IAAI;gBACfkC,OAAOJ,KAAKC,EAAE;YAChB,CAAA;QAEA,MAAMI,aAAa,MAAM3C,OAAO;YAC9BwC;YACAX,SAAS;QACX;QAEA,OAAOc;IACT;AACF"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SanityCommand, subdebug } from '@sanity/cli-core';
|
|
2
|
+
import { promptForProject } from '../../prompts/promptForProject.js';
|
|
2
3
|
import { listHooksForProject } from '../../services/hooks.js';
|
|
3
|
-
import {
|
|
4
|
+
import { getProjectIdFlag } from '../../util/sharedFlags.js';
|
|
4
5
|
const listHookDebug = subdebug('hook:list');
|
|
5
6
|
export class List extends SanityCommand {
|
|
6
7
|
static description = 'List hooks for a given project';
|
|
@@ -8,16 +9,30 @@ export class List extends SanityCommand {
|
|
|
8
9
|
{
|
|
9
10
|
command: '<%= config.bin %> <%= command.id %>',
|
|
10
11
|
description: 'List hooks for a given project'
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
command: '<%= config.bin %> <%= command.id %> --project-id abc123',
|
|
15
|
+
description: 'List hooks for a specific project'
|
|
11
16
|
}
|
|
12
17
|
];
|
|
18
|
+
static flags = {
|
|
19
|
+
...getProjectIdFlag({
|
|
20
|
+
description: 'Project ID to list webhooks for',
|
|
21
|
+
semantics: 'override'
|
|
22
|
+
})
|
|
23
|
+
};
|
|
13
24
|
async run() {
|
|
14
25
|
// Ensure we have project context
|
|
15
|
-
const projectId = await this.getProjectId(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
26
|
+
const projectId = await this.getProjectId({
|
|
27
|
+
fallback: ()=>promptForProject({
|
|
28
|
+
requiredPermissions: [
|
|
29
|
+
{
|
|
30
|
+
grant: 'read',
|
|
31
|
+
permission: 'sanity.project.webhooks'
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
})
|
|
35
|
+
});
|
|
21
36
|
let hooks;
|
|
22
37
|
try {
|
|
23
38
|
hooks = await listHooksForProject(projectId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/hook/list.ts"],"sourcesContent":["import {SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {type Hook} from '../../actions/hook/types'\nimport {listHooksForProject} from '../../services/hooks.js'\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/hook/list.ts"],"sourcesContent":["import {SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {type Hook} from '../../actions/hook/types'\nimport {promptForProject} from '../../prompts/promptForProject.js'\nimport {listHooksForProject} from '../../services/hooks.js'\nimport {getProjectIdFlag} from '../../util/sharedFlags.js'\n\nconst listHookDebug = subdebug('hook:list')\n\nexport class List extends SanityCommand<typeof List> {\n static override description = 'List hooks for a given project'\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'List hooks for a given project',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --project-id abc123',\n description: 'List hooks for a specific project',\n },\n ]\n\n static override flags = {\n ...getProjectIdFlag({\n description: 'Project ID to list webhooks for',\n semantics: 'override',\n }),\n }\n\n public async run() {\n // Ensure we have project context\n const projectId = await this.getProjectId({\n fallback: () =>\n promptForProject({\n requiredPermissions: [{grant: 'read', permission: 'sanity.project.webhooks'}],\n }),\n })\n\n let hooks: Hook[]\n try {\n hooks = await listHooksForProject(projectId)\n } catch (error) {\n const err = error as Error\n\n listHookDebug(`Error fetching hooks for project ${projectId}`, err)\n this.error(`Hook list retrieval failed:\\n${err.message}`, {exit: 1})\n }\n\n for (const hook of hooks) {\n this.log(`Name: ${hook.name}`)\n this.log(`Dataset: ${hook.dataset}`)\n this.log(`URL: ${hook.url}`)\n\n if (hook.type === 'document') {\n this.log(`HTTP method: ${hook.httpMethod}`)\n\n if (hook.description) {\n this.log(`Description: ${hook.description}`)\n }\n }\n\n this.log('')\n }\n }\n}\n"],"names":["SanityCommand","subdebug","promptForProject","listHooksForProject","getProjectIdFlag","listHookDebug","List","description","examples","command","flags","semantics","run","projectId","getProjectId","fallback","requiredPermissions","grant","permission","hooks","error","err","message","exit","hook","log","name","dataset","url","type","httpMethod"],"mappings":"AAAA,SAAQA,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAGxD,SAAQC,gBAAgB,QAAO,oCAAmC;AAClE,SAAQC,mBAAmB,QAAO,0BAAyB;AAC3D,SAAQC,gBAAgB,QAAO,4BAA2B;AAE1D,MAAMC,gBAAgBJ,SAAS;AAE/B,OAAO,MAAMK,aAAaN;IACxB,OAAgBO,cAAc,iCAAgC;IAC9D,OAAgBC,WAAW;QACzB;YACEC,SAAS;YACTF,aAAa;QACf;QACA;YACEE,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,OAAgBG,QAAQ;QACtB,GAAGN,iBAAiB;YAClBG,aAAa;YACbI,WAAW;QACb,EAAE;IACJ,EAAC;IAED,MAAaC,MAAM;QACjB,iCAAiC;QACjC,MAAMC,YAAY,MAAM,IAAI,CAACC,YAAY,CAAC;YACxCC,UAAU,IACRb,iBAAiB;oBACfc,qBAAqB;wBAAC;4BAACC,OAAO;4BAAQC,YAAY;wBAAyB;qBAAE;gBAC/E;QACJ;QAEA,IAAIC;QACJ,IAAI;YACFA,QAAQ,MAAMhB,oBAAoBU;QACpC,EAAE,OAAOO,OAAO;YACd,MAAMC,MAAMD;YAEZf,cAAc,CAAC,iCAAiC,EAAEQ,WAAW,EAAEQ;YAC/D,IAAI,CAACD,KAAK,CAAC,CAAC,6BAA6B,EAAEC,IAAIC,OAAO,EAAE,EAAE;gBAACC,MAAM;YAAC;QACpE;QAEA,KAAK,MAAMC,QAAQL,MAAO;YACxB,IAAI,CAACM,GAAG,CAAC,CAAC,MAAM,EAAED,KAAKE,IAAI,EAAE;YAC7B,IAAI,CAACD,GAAG,CAAC,CAAC,SAAS,EAAED,KAAKG,OAAO,EAAE;YACnC,IAAI,CAACF,GAAG,CAAC,CAAC,KAAK,EAAED,KAAKI,GAAG,EAAE;YAE3B,IAAIJ,KAAKK,IAAI,KAAK,YAAY;gBAC5B,IAAI,CAACJ,GAAG,CAAC,CAAC,aAAa,EAAED,KAAKM,UAAU,EAAE;gBAE1C,IAAIN,KAAKjB,WAAW,EAAE;oBACpB,IAAI,CAACkB,GAAG,CAAC,CAAC,aAAa,EAAED,KAAKjB,WAAW,EAAE;gBAC7C;YACF;YAEA,IAAI,CAACkB,GAAG,CAAC;QACX;IACF;AACF"}
|
|
@@ -2,10 +2,11 @@ import { inspect, styleText } from 'node:util';
|
|
|
2
2
|
import { Args, Flags } from '@oclif/core';
|
|
3
3
|
import { SanityCommand, subdebug } from '@sanity/cli-core';
|
|
4
4
|
import { select } from '@sanity/cli-core/ux';
|
|
5
|
-
import
|
|
5
|
+
import groupBy from 'lodash-es/groupBy.js';
|
|
6
6
|
import { formatFailure } from '../../actions/hook/formatFailure.js';
|
|
7
|
+
import { promptForProject } from '../../prompts/promptForProject.js';
|
|
7
8
|
import { getHookAttemptsForProject, getHookMessagesForProject, getHooksForProject } from '../../services/hooks.js';
|
|
8
|
-
import {
|
|
9
|
+
import { getProjectIdFlag } from '../../util/sharedFlags.js';
|
|
9
10
|
const logsHookDebug = subdebug('hook:logs');
|
|
10
11
|
export class LogsHookCommand extends SanityCommand {
|
|
11
12
|
static args = {
|
|
@@ -23,9 +24,17 @@ export class LogsHookCommand extends SanityCommand {
|
|
|
23
24
|
{
|
|
24
25
|
command: '<%= config.bin %> <%= command.id %> [NAME]',
|
|
25
26
|
description: 'List latest log entries for a specific hook by name'
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
command: '<%= config.bin %> <%= command.id %> --project-id abc123',
|
|
30
|
+
description: 'List hook logs for a specific project'
|
|
26
31
|
}
|
|
27
32
|
];
|
|
28
33
|
static flags = {
|
|
34
|
+
...getProjectIdFlag({
|
|
35
|
+
description: 'Project ID to view webhook logs for',
|
|
36
|
+
semantics: 'override'
|
|
37
|
+
}),
|
|
29
38
|
detailed: Flags.boolean({
|
|
30
39
|
description: 'Include detailed payload and attempts',
|
|
31
40
|
required: false
|
|
@@ -34,12 +43,16 @@ export class LogsHookCommand extends SanityCommand {
|
|
|
34
43
|
async run() {
|
|
35
44
|
const { args, flags } = await this.parse(LogsHookCommand);
|
|
36
45
|
// Ensure we have project context
|
|
37
|
-
const projectId = await this.getProjectId(
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
46
|
+
const projectId = await this.getProjectId({
|
|
47
|
+
fallback: ()=>promptForProject({
|
|
48
|
+
requiredPermissions: [
|
|
49
|
+
{
|
|
50
|
+
grant: 'read',
|
|
51
|
+
permission: 'sanity.project.webhooks'
|
|
52
|
+
}
|
|
53
|
+
]
|
|
54
|
+
})
|
|
55
|
+
});
|
|
43
56
|
// Get hooks for the project
|
|
44
57
|
let hooks;
|
|
45
58
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/commands/hook/logs.ts"],"sourcesContent":["import {inspect, styleText} from 'node:util'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\nimport {groupBy} from 'lodash-es'\n\nimport {formatFailure} from '../../actions/hook/formatFailure.js'\nimport {type DeliveryAttempt, type Hook, type HookMessage} from '../../actions/hook/types'\nimport {\n getHookAttemptsForProject,\n getHookMessagesForProject,\n getHooksForProject,\n} from '../../services/hooks.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst logsHookDebug = subdebug('hook:logs')\n\nexport class LogsHookCommand extends SanityCommand<typeof LogsHookCommand> {\n static override args = {\n name: Args.string({\n description: 'Name of the hook to show logs for',\n required: false,\n }),\n }\n\n static override description = 'List latest log entries for a given hook'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'List latest log entries for a given hook',\n },\n {\n command: '<%= config.bin %> <%= command.id %> [NAME]',\n description: 'List latest log entries for a specific hook by name',\n },\n ]\n\n static override flags = {\n detailed: Flags.boolean({\n description: 'Include detailed payload and attempts',\n required: false,\n }),\n }\n\n public async run() {\n const {args, flags} = await this.parse(LogsHookCommand)\n\n // Ensure we have project context\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n // Get hooks for the project\n let hooks: Hook[]\n try {\n hooks = await getHooksForProject(projectId)\n } catch (error) {\n const err = error as Error\n logsHookDebug(`Error fetching hooks for project ${projectId}`, err)\n this.error(`Hook list retrieval failed:\\n${err.message}`, {exit: 1})\n }\n\n if (hooks.length === 0) {\n this.error('No hooks currently registered', {exit: 1})\n }\n\n // If hook name is provided, find that specific hook\n let selectedHook: Hook | undefined\n if (args.name) {\n selectedHook = hooks.find((hook) => hook.name.toLowerCase() === args.name?.toLowerCase())\n if (!selectedHook) {\n this.error(`Hook with name \"${args.name}\" not found`, {exit: 1})\n }\n } else if (hooks.length === 1) {\n // If only one hook exists, use that\n selectedHook = hooks[0]\n } else {\n // Otherwise prompt user to select a hook\n selectedHook = await this.selectHook(hooks)\n }\n\n if (!selectedHook) {\n this.error('No hook selected', {exit: 1})\n }\n\n // Fetch messages and attempts for the selected hook\n let messages: HookMessage[]\n let attempts: DeliveryAttempt[] = []\n try {\n ;[messages, attempts] = await Promise.all([\n getHookMessagesForProject({\n hookId: selectedHook.id,\n projectId,\n }),\n getHookAttemptsForProject({\n hookId: selectedHook.id,\n projectId,\n }),\n ])\n } catch (error) {\n const err = error as Error\n logsHookDebug(`Error fetching logs for hook ${selectedHook.id}`, err)\n this.error(`Hook logs retrieval failed:\\n${err.message}`, {exit: 1})\n }\n\n // Group attempts by message ID\n const groupedAttempts = groupBy(attempts, 'messageId')\n\n // Populate messages with attempts\n const populated = messages.map((msg): HookMessage & {attempts: DeliveryAttempt[]} => ({\n ...msg,\n attempts: groupedAttempts[msg.id] || [],\n }))\n\n const totalMessages = messages.length - 1\n\n for (const [i, message] of populated.entries()) {\n this.printMessage(message, {detailed: flags.detailed})\n this.printSeparator(totalMessages === i)\n }\n }\n\n private formatAttemptDate(dateString: string): string {\n try {\n return new Date(dateString).toISOString().replace(/\\.\\d+Z$/, 'Z')\n } catch {\n return dateString // fallback to original if parsing fails\n }\n }\n\n private printMessage(\n message: HookMessage & {attempts: DeliveryAttempt[]},\n options: {detailed?: boolean},\n ) {\n const {detailed} = options\n\n this.log(`Date: ${message.createdAt}`)\n this.log(`Status: ${message.status}`)\n if (message.resultCode) {\n this.log(`Result code: ${message.resultCode}`)\n }\n\n if (message.failureCount > 0) {\n this.log(`Failures: ${message.failureCount}`)\n }\n\n if (detailed) {\n this.log('Payload:')\n try {\n const payload = JSON.parse(message.payload)\n this.log(inspect(payload, {colors: true}))\n } catch (error) {\n this.log(`Payload (raw): ${message.payload}`)\n logsHookDebug('Failed to parse payload JSON:', error)\n }\n }\n\n if (detailed && message.attempts && message.attempts.length > 0) {\n this.log('Attempts:')\n for (const attempt of message.attempts) {\n const date = this.formatAttemptDate(attempt.createdAt)\n const prefix = ` [${date}]`\n\n if (attempt.inProgress) {\n this.log(`${prefix} ${styleText('yellow', 'Pending')}`)\n } else if (attempt.isFailure) {\n const failure = formatFailure(attempt, {includeHelp: true})\n this.log(`${prefix} ${styleText('yellow', `Failure: ${failure}`)}`)\n } else {\n this.log(`${prefix} Success: HTTP ${attempt.resultCode} (${attempt.duration}ms)`)\n }\n }\n }\n\n // Leave some empty space between messages\n this.log('')\n }\n\n private printSeparator(skip: boolean) {\n if (!skip) {\n this.log('---\\n')\n }\n }\n\n private async selectHook(hooks: Hook[]) {\n const hookId = await select({\n choices: hooks.map((hook) => ({\n name: hook.name,\n value: hook.id,\n })),\n message: 'Select hook to list logs for',\n })\n\n return hooks.find((hook) => hook.id === hookId)\n }\n}\n"],"names":["inspect","styleText","Args","Flags","SanityCommand","subdebug","select","groupBy","formatFailure","getHookAttemptsForProject","getHookMessagesForProject","getHooksForProject","NO_PROJECT_ID","logsHookDebug","LogsHookCommand","args","name","string","description","required","examples","command","flags","detailed","boolean","run","parse","projectId","getProjectId","error","exit","hooks","err","message","length","selectedHook","find","hook","toLowerCase","selectHook","messages","attempts","Promise","all","hookId","id","groupedAttempts","populated","map","msg","totalMessages","i","entries","printMessage","printSeparator","formatAttemptDate","dateString","Date","toISOString","replace","options","log","createdAt","status","resultCode","failureCount","payload","JSON","colors","attempt","date","prefix","inProgress","isFailure","failure","includeHelp","duration","skip","choices","value"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/commands/hook/logs.ts"],"sourcesContent":["import {inspect, styleText} from 'node:util'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\nimport groupBy from 'lodash-es/groupBy.js'\n\nimport {formatFailure} from '../../actions/hook/formatFailure.js'\nimport {type DeliveryAttempt, type Hook, type HookMessage} from '../../actions/hook/types'\nimport {promptForProject} from '../../prompts/promptForProject.js'\nimport {\n getHookAttemptsForProject,\n getHookMessagesForProject,\n getHooksForProject,\n} from '../../services/hooks.js'\nimport {getProjectIdFlag} from '../../util/sharedFlags.js'\n\nconst logsHookDebug = subdebug('hook:logs')\n\nexport class LogsHookCommand extends SanityCommand<typeof LogsHookCommand> {\n static override args = {\n name: Args.string({\n description: 'Name of the hook to show logs for',\n required: false,\n }),\n }\n\n static override description = 'List latest log entries for a given hook'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'List latest log entries for a given hook',\n },\n {\n command: '<%= config.bin %> <%= command.id %> [NAME]',\n description: 'List latest log entries for a specific hook by name',\n },\n {\n command: '<%= config.bin %> <%= command.id %> --project-id abc123',\n description: 'List hook logs for a specific project',\n },\n ]\n\n static override flags = {\n ...getProjectIdFlag({\n description: 'Project ID to view webhook logs for',\n semantics: 'override',\n }),\n detailed: Flags.boolean({\n description: 'Include detailed payload and attempts',\n required: false,\n }),\n }\n\n public async run() {\n const {args, flags} = await this.parse(LogsHookCommand)\n\n // Ensure we have project context\n const projectId = await this.getProjectId({\n fallback: () =>\n promptForProject({\n requiredPermissions: [{grant: 'read', permission: 'sanity.project.webhooks'}],\n }),\n })\n\n // Get hooks for the project\n let hooks: Hook[]\n try {\n hooks = await getHooksForProject(projectId)\n } catch (error) {\n const err = error as Error\n logsHookDebug(`Error fetching hooks for project ${projectId}`, err)\n this.error(`Hook list retrieval failed:\\n${err.message}`, {exit: 1})\n }\n\n if (hooks.length === 0) {\n this.error('No hooks currently registered', {exit: 1})\n }\n\n // If hook name is provided, find that specific hook\n let selectedHook: Hook | undefined\n if (args.name) {\n selectedHook = hooks.find((hook) => hook.name.toLowerCase() === args.name?.toLowerCase())\n if (!selectedHook) {\n this.error(`Hook with name \"${args.name}\" not found`, {exit: 1})\n }\n } else if (hooks.length === 1) {\n // If only one hook exists, use that\n selectedHook = hooks[0]\n } else {\n // Otherwise prompt user to select a hook\n selectedHook = await this.selectHook(hooks)\n }\n\n if (!selectedHook) {\n this.error('No hook selected', {exit: 1})\n }\n\n // Fetch messages and attempts for the selected hook\n let messages: HookMessage[]\n let attempts: DeliveryAttempt[] = []\n try {\n ;[messages, attempts] = await Promise.all([\n getHookMessagesForProject({\n hookId: selectedHook.id,\n projectId,\n }),\n getHookAttemptsForProject({\n hookId: selectedHook.id,\n projectId,\n }),\n ])\n } catch (error) {\n const err = error as Error\n logsHookDebug(`Error fetching logs for hook ${selectedHook.id}`, err)\n this.error(`Hook logs retrieval failed:\\n${err.message}`, {exit: 1})\n }\n\n // Group attempts by message ID\n const groupedAttempts = groupBy(attempts, 'messageId')\n\n // Populate messages with attempts\n const populated = messages.map((msg): HookMessage & {attempts: DeliveryAttempt[]} => ({\n ...msg,\n attempts: groupedAttempts[msg.id] || [],\n }))\n\n const totalMessages = messages.length - 1\n\n for (const [i, message] of populated.entries()) {\n this.printMessage(message, {detailed: flags.detailed})\n this.printSeparator(totalMessages === i)\n }\n }\n\n private formatAttemptDate(dateString: string): string {\n try {\n return new Date(dateString).toISOString().replace(/\\.\\d+Z$/, 'Z')\n } catch {\n return dateString // fallback to original if parsing fails\n }\n }\n\n private printMessage(\n message: HookMessage & {attempts: DeliveryAttempt[]},\n options: {detailed?: boolean},\n ) {\n const {detailed} = options\n\n this.log(`Date: ${message.createdAt}`)\n this.log(`Status: ${message.status}`)\n if (message.resultCode) {\n this.log(`Result code: ${message.resultCode}`)\n }\n\n if (message.failureCount > 0) {\n this.log(`Failures: ${message.failureCount}`)\n }\n\n if (detailed) {\n this.log('Payload:')\n try {\n const payload = JSON.parse(message.payload)\n this.log(inspect(payload, {colors: true}))\n } catch (error) {\n this.log(`Payload (raw): ${message.payload}`)\n logsHookDebug('Failed to parse payload JSON:', error)\n }\n }\n\n if (detailed && message.attempts && message.attempts.length > 0) {\n this.log('Attempts:')\n for (const attempt of message.attempts) {\n const date = this.formatAttemptDate(attempt.createdAt)\n const prefix = ` [${date}]`\n\n if (attempt.inProgress) {\n this.log(`${prefix} ${styleText('yellow', 'Pending')}`)\n } else if (attempt.isFailure) {\n const failure = formatFailure(attempt, {includeHelp: true})\n this.log(`${prefix} ${styleText('yellow', `Failure: ${failure}`)}`)\n } else {\n this.log(`${prefix} Success: HTTP ${attempt.resultCode} (${attempt.duration}ms)`)\n }\n }\n }\n\n // Leave some empty space between messages\n this.log('')\n }\n\n private printSeparator(skip: boolean) {\n if (!skip) {\n this.log('---\\n')\n }\n }\n\n private async selectHook(hooks: Hook[]) {\n const hookId = await select({\n choices: hooks.map((hook) => ({\n name: hook.name,\n value: hook.id,\n })),\n message: 'Select hook to list logs for',\n })\n\n return hooks.find((hook) => hook.id === hookId)\n }\n}\n"],"names":["inspect","styleText","Args","Flags","SanityCommand","subdebug","select","groupBy","formatFailure","promptForProject","getHookAttemptsForProject","getHookMessagesForProject","getHooksForProject","getProjectIdFlag","logsHookDebug","LogsHookCommand","args","name","string","description","required","examples","command","flags","semantics","detailed","boolean","run","parse","projectId","getProjectId","fallback","requiredPermissions","grant","permission","hooks","error","err","message","exit","length","selectedHook","find","hook","toLowerCase","selectHook","messages","attempts","Promise","all","hookId","id","groupedAttempts","populated","map","msg","totalMessages","i","entries","printMessage","printSeparator","formatAttemptDate","dateString","Date","toISOString","replace","options","log","createdAt","status","resultCode","failureCount","payload","JSON","colors","attempt","date","prefix","inProgress","isFailure","failure","includeHelp","duration","skip","choices","value"],"mappings":"AAAA,SAAQA,OAAO,EAAEC,SAAS,QAAO,YAAW;AAE5C,SAAQC,IAAI,EAAEC,KAAK,QAAO,cAAa;AACvC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AACxD,SAAQC,MAAM,QAAO,sBAAqB;AAC1C,OAAOC,aAAa,uBAAsB;AAE1C,SAAQC,aAAa,QAAO,sCAAqC;AAEjE,SAAQC,gBAAgB,QAAO,oCAAmC;AAClE,SACEC,yBAAyB,EACzBC,yBAAyB,EACzBC,kBAAkB,QACb,0BAAyB;AAChC,SAAQC,gBAAgB,QAAO,4BAA2B;AAE1D,MAAMC,gBAAgBT,SAAS;AAE/B,OAAO,MAAMU,wBAAwBX;IACnC,OAAgBY,OAAO;QACrBC,MAAMf,KAAKgB,MAAM,CAAC;YAChBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,2CAA0C;IAExE,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;KACD,CAAA;IAED,OAAgBI,QAAQ;QACtB,GAAGV,iBAAiB;YAClBM,aAAa;YACbK,WAAW;QACb,EAAE;QACFC,UAAUtB,MAAMuB,OAAO,CAAC;YACtBP,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,MAAaO,MAAM;QACjB,MAAM,EAACX,IAAI,EAAEO,KAAK,EAAC,GAAG,MAAM,IAAI,CAACK,KAAK,CAACb;QAEvC,iCAAiC;QACjC,MAAMc,YAAY,MAAM,IAAI,CAACC,YAAY,CAAC;YACxCC,UAAU,IACRtB,iBAAiB;oBACfuB,qBAAqB;wBAAC;4BAACC,OAAO;4BAAQC,YAAY;wBAAyB;qBAAE;gBAC/E;QACJ;QAEA,4BAA4B;QAC5B,IAAIC;QACJ,IAAI;YACFA,QAAQ,MAAMvB,mBAAmBiB;QACnC,EAAE,OAAOO,OAAO;YACd,MAAMC,MAAMD;YACZtB,cAAc,CAAC,iCAAiC,EAAEe,WAAW,EAAEQ;YAC/D,IAAI,CAACD,KAAK,CAAC,CAAC,6BAA6B,EAAEC,IAAIC,OAAO,EAAE,EAAE;gBAACC,MAAM;YAAC;QACpE;QAEA,IAAIJ,MAAMK,MAAM,KAAK,GAAG;YACtB,IAAI,CAACJ,KAAK,CAAC,iCAAiC;gBAACG,MAAM;YAAC;QACtD;QAEA,oDAAoD;QACpD,IAAIE;QACJ,IAAIzB,KAAKC,IAAI,EAAE;YACbwB,eAAeN,MAAMO,IAAI,CAAC,CAACC,OAASA,KAAK1B,IAAI,CAAC2B,WAAW,OAAO5B,KAAKC,IAAI,EAAE2B;YAC3E,IAAI,CAACH,cAAc;gBACjB,IAAI,CAACL,KAAK,CAAC,CAAC,gBAAgB,EAAEpB,KAAKC,IAAI,CAAC,WAAW,CAAC,EAAE;oBAACsB,MAAM;gBAAC;YAChE;QACF,OAAO,IAAIJ,MAAMK,MAAM,KAAK,GAAG;YAC7B,oCAAoC;YACpCC,eAAeN,KAAK,CAAC,EAAE;QACzB,OAAO;YACL,yCAAyC;YACzCM,eAAe,MAAM,IAAI,CAACI,UAAU,CAACV;QACvC;QAEA,IAAI,CAACM,cAAc;YACjB,IAAI,CAACL,KAAK,CAAC,oBAAoB;gBAACG,MAAM;YAAC;QACzC;QAEA,oDAAoD;QACpD,IAAIO;QACJ,IAAIC,WAA8B,EAAE;QACpC,IAAI;;YACD,CAACD,UAAUC,SAAS,GAAG,MAAMC,QAAQC,GAAG,CAAC;gBACxCtC,0BAA0B;oBACxBuC,QAAQT,aAAaU,EAAE;oBACvBtB;gBACF;gBACAnB,0BAA0B;oBACxBwC,QAAQT,aAAaU,EAAE;oBACvBtB;gBACF;aACD;QACH,EAAE,OAAOO,OAAO;YACd,MAAMC,MAAMD;YACZtB,cAAc,CAAC,6BAA6B,EAAE2B,aAAaU,EAAE,EAAE,EAAEd;YACjE,IAAI,CAACD,KAAK,CAAC,CAAC,6BAA6B,EAAEC,IAAIC,OAAO,EAAE,EAAE;gBAACC,MAAM;YAAC;QACpE;QAEA,+BAA+B;QAC/B,MAAMa,kBAAkB7C,QAAQwC,UAAU;QAE1C,kCAAkC;QAClC,MAAMM,YAAYP,SAASQ,GAAG,CAAC,CAACC,MAAsD,CAAA;gBACpF,GAAGA,GAAG;gBACNR,UAAUK,eAAe,CAACG,IAAIJ,EAAE,CAAC,IAAI,EAAE;YACzC,CAAA;QAEA,MAAMK,gBAAgBV,SAASN,MAAM,GAAG;QAExC,KAAK,MAAM,CAACiB,GAAGnB,QAAQ,IAAIe,UAAUK,OAAO,GAAI;YAC9C,IAAI,CAACC,YAAY,CAACrB,SAAS;gBAACb,UAAUF,MAAME,QAAQ;YAAA;YACpD,IAAI,CAACmC,cAAc,CAACJ,kBAAkBC;QACxC;IACF;IAEQI,kBAAkBC,UAAkB,EAAU;QACpD,IAAI;YACF,OAAO,IAAIC,KAAKD,YAAYE,WAAW,GAAGC,OAAO,CAAC,WAAW;QAC/D,EAAE,OAAM;YACN,OAAOH,WAAW,wCAAwC;;QAC5D;IACF;IAEQH,aACNrB,OAAoD,EACpD4B,OAA6B,EAC7B;QACA,MAAM,EAACzC,QAAQ,EAAC,GAAGyC;QAEnB,IAAI,CAACC,GAAG,CAAC,CAAC,MAAM,EAAE7B,QAAQ8B,SAAS,EAAE;QACrC,IAAI,CAACD,GAAG,CAAC,CAAC,QAAQ,EAAE7B,QAAQ+B,MAAM,EAAE;QACpC,IAAI/B,QAAQgC,UAAU,EAAE;YACtB,IAAI,CAACH,GAAG,CAAC,CAAC,aAAa,EAAE7B,QAAQgC,UAAU,EAAE;QAC/C;QAEA,IAAIhC,QAAQiC,YAAY,GAAG,GAAG;YAC5B,IAAI,CAACJ,GAAG,CAAC,CAAC,UAAU,EAAE7B,QAAQiC,YAAY,EAAE;QAC9C;QAEA,IAAI9C,UAAU;YACZ,IAAI,CAAC0C,GAAG,CAAC;YACT,IAAI;gBACF,MAAMK,UAAUC,KAAK7C,KAAK,CAACU,QAAQkC,OAAO;gBAC1C,IAAI,CAACL,GAAG,CAACnE,QAAQwE,SAAS;oBAACE,QAAQ;gBAAI;YACzC,EAAE,OAAOtC,OAAO;gBACd,IAAI,CAAC+B,GAAG,CAAC,CAAC,eAAe,EAAE7B,QAAQkC,OAAO,EAAE;gBAC5C1D,cAAc,iCAAiCsB;YACjD;QACF;QAEA,IAAIX,YAAYa,QAAQS,QAAQ,IAAIT,QAAQS,QAAQ,CAACP,MAAM,GAAG,GAAG;YAC/D,IAAI,CAAC2B,GAAG,CAAC;YACT,KAAK,MAAMQ,WAAWrC,QAAQS,QAAQ,CAAE;gBACtC,MAAM6B,OAAO,IAAI,CAACf,iBAAiB,CAACc,QAAQP,SAAS;gBACrD,MAAMS,SAAS,CAAC,GAAG,EAAED,KAAK,CAAC,CAAC;gBAE5B,IAAID,QAAQG,UAAU,EAAE;oBACtB,IAAI,CAACX,GAAG,CAAC,GAAGU,OAAO,CAAC,EAAE5E,UAAU,UAAU,YAAY;gBACxD,OAAO,IAAI0E,QAAQI,SAAS,EAAE;oBAC5B,MAAMC,UAAUxE,cAAcmE,SAAS;wBAACM,aAAa;oBAAI;oBACzD,IAAI,CAACd,GAAG,CAAC,GAAGU,OAAO,CAAC,EAAE5E,UAAU,UAAU,CAAC,SAAS,EAAE+E,SAAS,GAAG;gBACpE,OAAO;oBACL,IAAI,CAACb,GAAG,CAAC,GAAGU,OAAO,eAAe,EAAEF,QAAQL,UAAU,CAAC,EAAE,EAAEK,QAAQO,QAAQ,CAAC,GAAG,CAAC;gBAClF;YACF;QACF;QAEA,0CAA0C;QAC1C,IAAI,CAACf,GAAG,CAAC;IACX;IAEQP,eAAeuB,IAAa,EAAE;QACpC,IAAI,CAACA,MAAM;YACT,IAAI,CAAChB,GAAG,CAAC;QACX;IACF;IAEA,MAActB,WAAWV,KAAa,EAAE;QACtC,MAAMe,SAAS,MAAM5C,OAAO;YAC1B8E,SAASjD,MAAMmB,GAAG,CAAC,CAACX,OAAU,CAAA;oBAC5B1B,MAAM0B,KAAK1B,IAAI;oBACfoE,OAAO1C,KAAKQ,EAAE;gBAChB,CAAA;YACAb,SAAS;QACX;QAEA,OAAOH,MAAMO,IAAI,CAAC,CAACC,OAASA,KAAKQ,EAAE,KAAKD;IAC1C;AACF"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// @Todo will remove by time migration of this command is complete
|
|
2
1
|
import { existsSync } from 'node:fs';
|
|
3
2
|
import { mkdir, writeFile } from 'node:fs/promises';
|
|
4
3
|
import path from 'node:path';
|
|
@@ -8,11 +7,9 @@ import { CLIError } from '@oclif/core/errors';
|
|
|
8
7
|
import { getCliToken, SanityCommand, subdebug } from '@sanity/cli-core';
|
|
9
8
|
import { confirm, input, logSymbols, select, Separator, spinner } from '@sanity/cli-core/ux';
|
|
10
9
|
import { isHttpError } from '@sanity/client';
|
|
11
|
-
import { DatasetImportCommand } from '@sanity/import';
|
|
12
10
|
import { frameworks } from '@vercel/frameworks';
|
|
13
|
-
import { detectFrameworkRecord, LocalFileSystemDetector } from '@vercel/fs-detectors';
|
|
14
11
|
import { execa } from 'execa';
|
|
15
|
-
import
|
|
12
|
+
import deburr from 'lodash-es/deburr.js';
|
|
16
13
|
import { getProviderName } from '../actions/auth/getProviderName.js';
|
|
17
14
|
import { login } from '../actions/auth/login/login.js';
|
|
18
15
|
import { createDataset } from '../actions/dataset/create.js';
|
|
@@ -28,6 +25,7 @@ import { resolvePackageManager } from '../actions/init/resolvePackageManager.js'
|
|
|
28
25
|
import templates from '../actions/init/templates/index.js';
|
|
29
26
|
import { sanityCliTemplate, sanityConfigTemplate, sanityFolder, sanityStudioTemplate } from '../actions/init/templates/nextjs/index.js';
|
|
30
27
|
import { setupMCP } from '../actions/mcp/setupMCP.js';
|
|
28
|
+
import { findOrganizationByUserName } from '../actions/organizations/findOrganizationByUserName.js';
|
|
31
29
|
import { getOrganizationChoices } from '../actions/organizations/getOrganizationChoices.js';
|
|
32
30
|
import { getOrganizationsWithAttachGrantInfo } from '../actions/organizations/getOrganizationsWithAttachGrantInfo.js';
|
|
33
31
|
import { hasProjectAttachGrant } from '../actions/organizations/hasProjectAttachGrant.js';
|
|
@@ -44,10 +42,13 @@ import { getPlanId, getPlanIdFromCoupon } from '../services/plans.js';
|
|
|
44
42
|
import { createProject, listProjects, updateProjectInitializedAt } from '../services/projects.js';
|
|
45
43
|
import { getCliUser } from '../services/user.js';
|
|
46
44
|
import { CLIInitStepCompleted } from '../telemetry/init.telemetry.js';
|
|
45
|
+
import { detectFrameworkRecord } from '../util/detectFramework.js';
|
|
47
46
|
import { absolutify, validateEmptyPath } from '../util/fsUtils.js';
|
|
48
47
|
import { getProjectDefaults } from '../util/getProjectDefaults.js';
|
|
48
|
+
import { getPeerDependencies } from '../util/packageManager/getPeerDependencies.js';
|
|
49
49
|
import { installDeclaredPackages, installNewPackages } from '../util/packageManager/installPackages.js';
|
|
50
50
|
import { getPartialEnvWithNpmPath } from '../util/packageManager/packageManagerChoice.js';
|
|
51
|
+
import { ImportDatasetCommand } from './dataset/import.js';
|
|
51
52
|
const debug = subdebug('init');
|
|
52
53
|
export class InitCommand extends SanityCommand {
|
|
53
54
|
static args = {
|
|
@@ -297,7 +298,7 @@ export class InitCommand extends SanityCommand {
|
|
|
297
298
|
}
|
|
298
299
|
const detectedFramework = await detectFrameworkRecord({
|
|
299
300
|
frameworkList: frameworks,
|
|
300
|
-
|
|
301
|
+
rootPath: process.cwd()
|
|
301
302
|
});
|
|
302
303
|
const isNextJs = detectedFramework?.slug === 'nextjs';
|
|
303
304
|
let remoteTemplateInfo;
|
|
@@ -526,7 +527,7 @@ export class InitCommand extends SanityCommand {
|
|
|
526
527
|
exit: 1
|
|
527
528
|
});
|
|
528
529
|
}
|
|
529
|
-
await
|
|
530
|
+
await ImportDatasetCommand.run([
|
|
530
531
|
template.datasetUrl,
|
|
531
532
|
'--project',
|
|
532
533
|
projectId,
|
|
@@ -696,10 +697,17 @@ export class InitCommand extends SanityCommand {
|
|
|
696
697
|
this._trace.log({
|
|
697
698
|
step: 'login'
|
|
698
699
|
});
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
700
|
+
try {
|
|
701
|
+
await login({
|
|
702
|
+
output: this.output,
|
|
703
|
+
telemetry: this._trace.newContext('login')
|
|
704
|
+
});
|
|
705
|
+
} catch (error) {
|
|
706
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
707
|
+
this.error(`Login failed: ${message}`, {
|
|
708
|
+
exit: 1
|
|
709
|
+
});
|
|
710
|
+
}
|
|
703
711
|
}
|
|
704
712
|
user = await getCliUser();
|
|
705
713
|
this.log(`${logSymbols.success} You are logged in as ${user.email} using ${getProviderName(user.provider)}`);
|
|
@@ -945,6 +953,7 @@ export class InitCommand extends SanityCommand {
|
|
|
945
953
|
includeMembers: 'true'
|
|
946
954
|
});
|
|
947
955
|
const appOrganizationId = await this.promptUserForOrganization({
|
|
956
|
+
isAppTemplate: true,
|
|
948
957
|
organizations,
|
|
949
958
|
user
|
|
950
959
|
});
|
|
@@ -1142,11 +1151,17 @@ export class InitCommand extends SanityCommand {
|
|
|
1142
1151
|
}
|
|
1143
1152
|
case 'yarn':
|
|
1144
1153
|
{
|
|
1145
|
-
await
|
|
1146
|
-
|
|
1147
|
-
'
|
|
1148
|
-
|
|
1149
|
-
|
|
1154
|
+
const peerDeps = await getPeerDependencies('next-sanity@11', workDir);
|
|
1155
|
+
await installNewPackages({
|
|
1156
|
+
packageManager: 'yarn',
|
|
1157
|
+
packages: [
|
|
1158
|
+
'next-sanity@11',
|
|
1159
|
+
...peerDeps
|
|
1160
|
+
]
|
|
1161
|
+
}, {
|
|
1162
|
+
output: this.output,
|
|
1163
|
+
workDir
|
|
1164
|
+
});
|
|
1150
1165
|
break;
|
|
1151
1166
|
}
|
|
1152
1167
|
default:
|
|
@@ -1241,25 +1256,28 @@ export class InitCommand extends SanityCommand {
|
|
|
1241
1256
|
spin.succeed();
|
|
1242
1257
|
return organization;
|
|
1243
1258
|
}
|
|
1244
|
-
async promptUserForOrganization({ organizations, user }) {
|
|
1259
|
+
async promptUserForOrganization({ isAppTemplate = false, organizations, user }) {
|
|
1245
1260
|
// If the user has no organizations, prompt them to create one with the same name as
|
|
1246
1261
|
// their user, but allow them to customize it if they want
|
|
1247
1262
|
if (organizations.length === 0) {
|
|
1248
1263
|
const newOrganization = await this.promptUserForNewOrganization(user);
|
|
1249
1264
|
return newOrganization.id;
|
|
1250
1265
|
}
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1266
|
+
let organizationChoices;
|
|
1267
|
+
let defaultOrganizationId;
|
|
1268
|
+
if (isAppTemplate) {
|
|
1269
|
+
// For app templates, all organizations are valid — no attach grant check needed
|
|
1270
|
+
organizationChoices = getOrganizationChoices(organizations);
|
|
1271
|
+
defaultOrganizationId = organizations.length === 1 ? organizations[0].id : findOrganizationByUserName(organizations, user);
|
|
1272
|
+
} else {
|
|
1273
|
+
// For studio projects, check which organizations the user can attach projects to
|
|
1274
|
+
debug(`User has ${organizations.length} organization(s), checking attach access`);
|
|
1275
|
+
const withGrantInfo = await getOrganizationsWithAttachGrantInfo(organizations);
|
|
1276
|
+
const withAttach = withGrantInfo.filter(({ hasAttachGrant })=>hasAttachGrant);
|
|
1277
|
+
debug('User has attach access to %d organizations.', withAttach.length);
|
|
1278
|
+
organizationChoices = getOrganizationChoices(withGrantInfo);
|
|
1279
|
+
defaultOrganizationId = withAttach.length === 1 ? withAttach[0].organization.id : findOrganizationByUserName(organizations, user);
|
|
1280
|
+
}
|
|
1263
1281
|
const chosenOrg = await select({
|
|
1264
1282
|
choices: organizationChoices,
|
|
1265
1283
|
default: defaultOrganizationId || undefined,
|