@sanity/cli 6.0.0-alpha.3 → 6.0.0-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (376) hide show
  1. package/dist/actions/auth/login/{index.js → login.js} +1 -1
  2. package/dist/actions/auth/login/{index.js.map → login.js.map} +1 -1
  3. package/dist/actions/dev/startStudioDevServer.js +3 -8
  4. package/dist/actions/dev/startStudioDevServer.js.map +1 -1
  5. package/dist/actions/dev/types.d.ts +1 -3
  6. package/dist/actions/dev/types.js.map +1 -1
  7. package/dist/actions/documents/validate.d.ts +0 -2
  8. package/dist/actions/documents/validate.js +21 -1
  9. package/dist/actions/documents/validate.js.map +1 -1
  10. package/dist/actions/exec/execScript.js +1 -1
  11. package/dist/actions/exec/execScript.js.map +1 -1
  12. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js +1 -1
  13. package/dist/actions/graphql/__tests__/getGraphQLAPIs.test.js.map +1 -1
  14. package/dist/actions/graphql/getGraphQLAPIs.js +1 -1
  15. package/dist/actions/graphql/getGraphQLAPIs.js.map +1 -1
  16. package/dist/actions/manifest/extractManifest.js +1 -4
  17. package/dist/actions/manifest/extractManifest.js.map +1 -1
  18. package/dist/actions/organizations/getOrganizationChoices.d.ts +6 -0
  19. package/dist/actions/organizations/getOrganizationChoices.js +23 -0
  20. package/dist/actions/organizations/getOrganizationChoices.js.map +1 -0
  21. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.d.ts +2 -0
  22. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js +9 -0
  23. package/dist/actions/organizations/getOrganizationsWithAttachGrantInfo.js.map +1 -0
  24. package/dist/actions/organizations/hasProjectAttachGrant.d.ts +1 -0
  25. package/dist/actions/organizations/hasProjectAttachGrant.js +24 -0
  26. package/dist/actions/organizations/hasProjectAttachGrant.js.map +1 -0
  27. package/dist/actions/schema/deleteSchemaAction.d.ts +13 -5
  28. package/dist/actions/schema/deleteSchemaAction.js +12 -17
  29. package/dist/actions/schema/deleteSchemaAction.js.map +1 -1
  30. package/dist/actions/schema/deploySchemas.d.ts +15 -0
  31. package/dist/actions/schema/deploySchemas.js +98 -0
  32. package/dist/actions/schema/deploySchemas.js.map +1 -0
  33. package/dist/actions/schema/listSchemas.d.ts +12 -0
  34. package/dist/actions/schema/listSchemas.js +119 -0
  35. package/dist/actions/schema/listSchemas.js.map +1 -0
  36. package/dist/actions/schema/schemaStoreTypes.d.ts +0 -11
  37. package/dist/actions/schema/schemaStoreTypes.js.map +1 -1
  38. package/dist/actions/schema/utils/debug.d.ts +2 -0
  39. package/dist/actions/schema/utils/debug.js +5 -0
  40. package/dist/actions/schema/utils/debug.js.map +1 -0
  41. package/dist/actions/schema/utils/manifestExtractor.d.ts +3 -8
  42. package/dist/actions/schema/utils/manifestExtractor.js +12 -17
  43. package/dist/actions/schema/utils/manifestExtractor.js.map +1 -1
  44. package/dist/actions/schema/utils/manifestReader.d.ts +2 -9
  45. package/dist/actions/schema/utils/manifestReader.js +6 -12
  46. package/dist/actions/schema/utils/manifestReader.js.map +1 -1
  47. package/dist/actions/schema/utils/schemaStoreOutStrings.d.ts +0 -1
  48. package/dist/actions/schema/utils/schemaStoreOutStrings.js +1 -1
  49. package/dist/actions/schema/utils/schemaStoreOutStrings.js.map +1 -1
  50. package/dist/actions/schema/utils/schemaStoreValidation.d.ts +10 -62
  51. package/dist/actions/schema/utils/schemaStoreValidation.js +40 -127
  52. package/dist/actions/schema/utils/schemaStoreValidation.js.map +1 -1
  53. package/dist/actions/schema/utils/uniqByProjectIdDataset.d.ts +14 -0
  54. package/dist/actions/schema/utils/uniqByProjectIdDataset.js +9 -0
  55. package/dist/actions/schema/utils/uniqByProjectIdDataset.js.map +1 -0
  56. package/dist/actions/users/getMembersForProject.d.ts +1 -3
  57. package/dist/actions/users/getMembersForProject.js +6 -17
  58. package/dist/actions/users/getMembersForProject.js.map +1 -1
  59. package/dist/actions/users/types.d.ts +0 -11
  60. package/dist/actions/users/types.js.map +1 -1
  61. package/dist/commands/__tests__/debug.test.js +113 -220
  62. package/dist/commands/__tests__/debug.test.js.map +1 -1
  63. package/dist/commands/__tests__/deploy.test.js +325 -293
  64. package/dist/commands/__tests__/deploy.test.js.map +1 -1
  65. package/dist/commands/__tests__/dev.test.js +62 -19
  66. package/dist/commands/__tests__/dev.test.js.map +1 -1
  67. package/dist/commands/__tests__/init/init.authentication.test.js +73 -0
  68. package/dist/commands/__tests__/init/init.authentication.test.js.map +1 -0
  69. package/dist/commands/__tests__/init/init.create-new-project.test.js +195 -0
  70. package/dist/commands/__tests__/init/init.create-new-project.test.js.map +1 -0
  71. package/dist/commands/__tests__/init/init.plan.test.js +279 -0
  72. package/dist/commands/__tests__/init/init.plan.test.js.map +1 -0
  73. package/dist/commands/__tests__/init/init.setup.test.js +335 -0
  74. package/dist/commands/__tests__/init/init.setup.test.js.map +1 -0
  75. package/dist/commands/__tests__/install.test.js +46 -22
  76. package/dist/commands/__tests__/install.test.js.map +1 -1
  77. package/dist/commands/__tests__/logout.test.js +8 -5
  78. package/dist/commands/__tests__/logout.test.js.map +1 -1
  79. package/dist/commands/__tests__/manage.test.js +29 -24
  80. package/dist/commands/__tests__/manage.test.js.map +1 -1
  81. package/dist/commands/__tests__/migration.test.js +119 -0
  82. package/dist/commands/__tests__/migration.test.js.map +1 -0
  83. package/dist/commands/__tests__/versions.test.js +22 -14
  84. package/dist/commands/__tests__/versions.test.js.map +1 -1
  85. package/dist/commands/backup/__tests__/disable.test.js +72 -75
  86. package/dist/commands/backup/__tests__/disable.test.js.map +1 -1
  87. package/dist/commands/backup/__tests__/download.test.js +169 -80
  88. package/dist/commands/backup/__tests__/download.test.js.map +1 -1
  89. package/dist/commands/backup/__tests__/enable.test.js +109 -140
  90. package/dist/commands/backup/__tests__/enable.test.js.map +1 -1
  91. package/dist/commands/backup/__tests__/list.test.js +84 -75
  92. package/dist/commands/backup/__tests__/list.test.js.map +1 -1
  93. package/dist/commands/backup/disable.js +5 -11
  94. package/dist/commands/backup/disable.js.map +1 -1
  95. package/dist/commands/backup/enable.js +5 -11
  96. package/dist/commands/backup/enable.js.map +1 -1
  97. package/dist/commands/backup/list.js +7 -8
  98. package/dist/commands/backup/list.js.map +1 -1
  99. package/dist/commands/cors/__tests__/add.test.js +68 -38
  100. package/dist/commands/cors/__tests__/add.test.js.map +1 -1
  101. package/dist/commands/cors/__tests__/delete.test.js +52 -37
  102. package/dist/commands/cors/__tests__/delete.test.js.map +1 -1
  103. package/dist/commands/cors/__tests__/list.test.js +80 -57
  104. package/dist/commands/cors/__tests__/list.test.js.map +1 -1
  105. package/dist/commands/cors/add.js +5 -13
  106. package/dist/commands/cors/add.js.map +1 -1
  107. package/dist/commands/cors/delete.js +7 -15
  108. package/dist/commands/cors/delete.js.map +1 -1
  109. package/dist/commands/cors/list.js +2 -10
  110. package/dist/commands/cors/list.js.map +1 -1
  111. package/dist/commands/dataset/__tests__/copy.test.js +197 -89
  112. package/dist/commands/dataset/__tests__/copy.test.js.map +1 -1
  113. package/dist/commands/dataset/__tests__/create.test.js +147 -117
  114. package/dist/commands/dataset/__tests__/create.test.js.map +1 -1
  115. package/dist/commands/dataset/__tests__/delete.test.js +75 -68
  116. package/dist/commands/dataset/__tests__/delete.test.js.map +1 -1
  117. package/dist/commands/dataset/__tests__/export.test.js +123 -83
  118. package/dist/commands/dataset/__tests__/export.test.js.map +1 -1
  119. package/dist/commands/dataset/__tests__/import.test.js +2 -2
  120. package/dist/commands/dataset/__tests__/import.test.js.map +1 -1
  121. package/dist/commands/dataset/__tests__/list.test.js +107 -65
  122. package/dist/commands/dataset/__tests__/list.test.js.map +1 -1
  123. package/dist/commands/dataset/alias/__tests__/create.test.js +114 -74
  124. package/dist/commands/dataset/alias/__tests__/create.test.js.map +1 -1
  125. package/dist/commands/dataset/alias/__tests__/delete.test.js +40 -29
  126. package/dist/commands/dataset/alias/__tests__/delete.test.js.map +1 -1
  127. package/dist/commands/dataset/alias/__tests__/link.test.js +114 -74
  128. package/dist/commands/dataset/alias/__tests__/link.test.js.map +1 -1
  129. package/dist/commands/dataset/alias/__tests__/unlink.test.js +44 -29
  130. package/dist/commands/dataset/alias/__tests__/unlink.test.js.map +1 -1
  131. package/dist/commands/dataset/export.js +4 -4
  132. package/dist/commands/dataset/export.js.map +1 -1
  133. package/dist/commands/dataset/visibility/__tests__/get.test.js +48 -67
  134. package/dist/commands/dataset/visibility/__tests__/get.test.js.map +1 -1
  135. package/dist/commands/dataset/visibility/__tests__/set.test.js +76 -123
  136. package/dist/commands/dataset/visibility/__tests__/set.test.js.map +1 -1
  137. package/dist/commands/dev.js +0 -1
  138. package/dist/commands/dev.js.map +1 -1
  139. package/dist/commands/docs/__tests__/search.test.js +8 -7
  140. package/dist/commands/docs/__tests__/search.test.js.map +1 -1
  141. package/dist/commands/documents/__tests__/create.test.js +328 -265
  142. package/dist/commands/documents/__tests__/create.test.js.map +1 -1
  143. package/dist/commands/documents/__tests__/delete.test.js +119 -87
  144. package/dist/commands/documents/__tests__/delete.test.js.map +1 -1
  145. package/dist/commands/documents/__tests__/get.test.js +68 -95
  146. package/dist/commands/documents/__tests__/get.test.js.map +1 -1
  147. package/dist/commands/documents/__tests__/query.test.js +87 -192
  148. package/dist/commands/documents/__tests__/query.test.js.map +1 -1
  149. package/dist/commands/documents/__tests__/validate.test.js +52 -29
  150. package/dist/commands/documents/__tests__/validate.test.js.map +1 -1
  151. package/dist/commands/documents/create.d.ts +1 -0
  152. package/dist/commands/documents/create.js +10 -9
  153. package/dist/commands/documents/create.js.map +1 -1
  154. package/dist/commands/documents/delete.js +2 -3
  155. package/dist/commands/documents/delete.js.map +1 -1
  156. package/dist/commands/documents/get.js +2 -3
  157. package/dist/commands/documents/get.js.map +1 -1
  158. package/dist/commands/documents/query.js +2 -3
  159. package/dist/commands/documents/query.js.map +1 -1
  160. package/dist/commands/documents/validate.js +0 -20
  161. package/dist/commands/documents/validate.js.map +1 -1
  162. package/dist/commands/graphql/__tests__/list.test.js +57 -45
  163. package/dist/commands/graphql/__tests__/list.test.js.map +1 -1
  164. package/dist/commands/graphql/__tests__/undeploy.test.js +85 -59
  165. package/dist/commands/graphql/__tests__/undeploy.test.js.map +1 -1
  166. package/dist/commands/graphql/list.js +2 -2
  167. package/dist/commands/graphql/list.js.map +1 -1
  168. package/dist/commands/graphql/undeploy.js +4 -9
  169. package/dist/commands/graphql/undeploy.js.map +1 -1
  170. package/dist/commands/hook/__tests__/attempt.test.js +48 -33
  171. package/dist/commands/hook/__tests__/attempt.test.js.map +1 -1
  172. package/dist/commands/hook/__tests__/create.test.js +49 -51
  173. package/dist/commands/hook/__tests__/create.test.js.map +1 -1
  174. package/dist/commands/hook/__tests__/delete.test.js +43 -30
  175. package/dist/commands/hook/__tests__/delete.test.js.map +1 -1
  176. package/dist/commands/hook/__tests__/list.test.js +38 -31
  177. package/dist/commands/hook/__tests__/list.test.js.map +1 -1
  178. package/dist/commands/hook/__tests__/logs.test.js +68 -40
  179. package/dist/commands/hook/__tests__/logs.test.js.map +1 -1
  180. package/dist/commands/hook/create.js +2 -6
  181. package/dist/commands/hook/create.js.map +1 -1
  182. package/dist/commands/hook/delete.js +5 -17
  183. package/dist/commands/hook/delete.js.map +1 -1
  184. package/dist/commands/hook/list.js +2 -8
  185. package/dist/commands/hook/list.js.map +1 -1
  186. package/dist/commands/init.d.ts +4 -0
  187. package/dist/commands/init.js +151 -18
  188. package/dist/commands/init.js.map +1 -1
  189. package/dist/commands/login.js +1 -1
  190. package/dist/commands/login.js.map +1 -1
  191. package/dist/commands/manifest/__tests__/extract.test.js +22 -13
  192. package/dist/commands/manifest/__tests__/extract.test.js.map +1 -1
  193. package/dist/commands/media/__tests__/create-aspect.test.js +41 -28
  194. package/dist/commands/media/__tests__/create-aspect.test.js.map +1 -1
  195. package/dist/commands/media/__tests__/delete-aspect.test.js +44 -35
  196. package/dist/commands/media/__tests__/delete-aspect.test.js.map +1 -1
  197. package/dist/commands/media/__tests__/deploy-aspect.test.js +67 -80
  198. package/dist/commands/media/__tests__/deploy-aspect.test.js.map +1 -1
  199. package/dist/commands/media/__tests__/export.test.js +365 -66
  200. package/dist/commands/media/__tests__/export.test.js.map +1 -1
  201. package/dist/commands/media/__tests__/import.test.js +171 -105
  202. package/dist/commands/media/__tests__/import.test.js.map +1 -1
  203. package/dist/commands/media/export.js +2 -2
  204. package/dist/commands/media/export.js.map +1 -1
  205. package/dist/commands/media/import.js +2 -2
  206. package/dist/commands/media/import.js.map +1 -1
  207. package/dist/commands/projects/__tests__/list.test.js +5 -4
  208. package/dist/commands/projects/__tests__/list.test.js.map +1 -1
  209. package/dist/commands/projects/list.js +2 -6
  210. package/dist/commands/projects/list.js.map +1 -1
  211. package/dist/commands/schema/__tests__/delete.test.js +396 -151
  212. package/dist/commands/schema/__tests__/delete.test.js.map +1 -1
  213. package/dist/commands/schema/__tests__/deploy.test.js +348 -0
  214. package/dist/commands/schema/__tests__/deploy.test.js.map +1 -0
  215. package/dist/commands/schema/__tests__/extract.test.js +19 -11
  216. package/dist/commands/schema/__tests__/extract.test.js.map +1 -1
  217. package/dist/commands/schema/__tests__/list.test.js +399 -0
  218. package/dist/commands/schema/__tests__/list.test.js.map +1 -0
  219. package/dist/commands/schema/__tests__/validate.test.js +27 -10
  220. package/dist/commands/schema/__tests__/validate.test.js.map +1 -1
  221. package/dist/commands/schema/delete.d.ts +1 -1
  222. package/dist/commands/schema/delete.js +20 -23
  223. package/dist/commands/schema/delete.js.map +1 -1
  224. package/dist/commands/schema/deploy.d.ts +16 -0
  225. package/dist/commands/schema/deploy.js +98 -0
  226. package/dist/commands/schema/deploy.js.map +1 -0
  227. package/dist/commands/schema/list.d.ts +15 -0
  228. package/dist/commands/schema/list.js +104 -0
  229. package/dist/commands/schema/list.js.map +1 -0
  230. package/dist/commands/telemetry/__tests__/disable.test.js +7 -5
  231. package/dist/commands/telemetry/__tests__/disable.test.js.map +1 -1
  232. package/dist/commands/telemetry/__tests__/enable.test.js +7 -5
  233. package/dist/commands/telemetry/__tests__/enable.test.js.map +1 -1
  234. package/dist/commands/telemetry/__tests__/status.test.js +7 -5
  235. package/dist/commands/telemetry/__tests__/status.test.js.map +1 -1
  236. package/dist/commands/tokens/__tests__/add.test.js +55 -40
  237. package/dist/commands/tokens/__tests__/add.test.js.map +1 -1
  238. package/dist/commands/tokens/__tests__/delete.test.js +72 -42
  239. package/dist/commands/tokens/__tests__/delete.test.js.map +1 -1
  240. package/dist/commands/tokens/__tests__/list.test.js +87 -60
  241. package/dist/commands/tokens/__tests__/list.test.js.map +1 -1
  242. package/dist/commands/tokens/add.js +3 -5
  243. package/dist/commands/tokens/add.js.map +1 -1
  244. package/dist/commands/users/__tests__/invite.test.js +100 -79
  245. package/dist/commands/users/__tests__/invite.test.js.map +1 -1
  246. package/dist/commands/users/__tests__/list.test.js +186 -180
  247. package/dist/commands/users/__tests__/list.test.js.map +1 -1
  248. package/dist/commands/users/invite.js +6 -17
  249. package/dist/commands/users/invite.js.map +1 -1
  250. package/dist/commands/users/list.js +4 -7
  251. package/dist/commands/users/list.js.map +1 -1
  252. package/dist/config/createCliConfig.d.ts +4 -4
  253. package/dist/services/backup.d.ts +8 -0
  254. package/dist/services/backup.js +19 -0
  255. package/dist/services/backup.js.map +1 -1
  256. package/dist/services/cors.d.ts +23 -0
  257. package/dist/services/cors.js +38 -0
  258. package/dist/services/cors.js.map +1 -0
  259. package/dist/services/graphql.d.ts +7 -0
  260. package/dist/services/graphql.js +11 -0
  261. package/dist/services/graphql.js.map +1 -1
  262. package/dist/services/hooks.d.ts +2 -0
  263. package/dist/services/hooks.js +19 -0
  264. package/dist/services/hooks.js.map +1 -1
  265. package/dist/services/organizations.d.ts +40 -0
  266. package/dist/services/organizations.js +41 -0
  267. package/dist/services/organizations.js.map +1 -0
  268. package/dist/services/projects.d.ts +31 -0
  269. package/dist/services/projects.js +71 -1
  270. package/dist/services/projects.js.map +1 -1
  271. package/dist/services/schemas.d.ts +4 -0
  272. package/dist/services/schemas.js +40 -0
  273. package/dist/services/schemas.js.map +1 -0
  274. package/dist/services/user.d.ts +10 -0
  275. package/dist/services/user.js +24 -0
  276. package/dist/services/user.js.map +1 -0
  277. package/dist/util/__tests__/getCliVersion.test.js +2 -2
  278. package/dist/util/__tests__/getCliVersion.test.js.map +1 -1
  279. package/dist/util/errorMessages.d.ts +1 -0
  280. package/dist/util/errorMessages.js +1 -0
  281. package/dist/util/errorMessages.js.map +1 -1
  282. package/dist/util/getCliVersion.js +1 -1
  283. package/dist/util/getCliVersion.js.map +1 -1
  284. package/dist/util/readPackageJson.d.ts +1 -15
  285. package/dist/util/readPackageJson.js +1 -1
  286. package/dist/util/readPackageJson.js.map +1 -1
  287. package/dist/util/uniqBy.d.ts +1 -0
  288. package/dist/util/uniqBy.js +14 -0
  289. package/dist/util/uniqBy.js.map +1 -0
  290. package/oclif.config.js +6 -1
  291. package/oclif.manifest.json +152 -158
  292. package/package.json +30 -31
  293. package/dist/actions/cors/constants.d.ts +0 -1
  294. package/dist/actions/cors/constants.js +0 -3
  295. package/dist/actions/cors/constants.js.map +0 -1
  296. package/dist/actions/cors/types.d.ts +0 -9
  297. package/dist/actions/cors/types.js +0 -3
  298. package/dist/actions/cors/types.js.map +0 -1
  299. package/dist/actions/migration/getMigrationRootDirectory.d.ts +0 -2
  300. package/dist/actions/migration/getMigrationRootDirectory.js +0 -14
  301. package/dist/actions/migration/getMigrationRootDirectory.js.map +0 -1
  302. package/dist/actions/migration/resolveMigrations.d.ts +0 -19
  303. package/dist/actions/migration/resolveMigrations.js +0 -43
  304. package/dist/actions/migration/resolveMigrations.js.map +0 -1
  305. package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js +0 -65
  306. package/dist/actions/migration/templates/__tests__/minimalAdvanced.test.js.map +0 -1
  307. package/dist/actions/migration/templates/__tests__/minimalSimple.test.js +0 -145
  308. package/dist/actions/migration/templates/__tests__/minimalSimple.test.js.map +0 -1
  309. package/dist/actions/migration/templates/__tests__/renameField.test.js +0 -63
  310. package/dist/actions/migration/templates/__tests__/renameField.test.js.map +0 -1
  311. package/dist/actions/migration/templates/__tests__/renameType.test.js +0 -61
  312. package/dist/actions/migration/templates/__tests__/renameType.test.js.map +0 -1
  313. package/dist/actions/migration/templates/__tests__/stringToPTE.test.js +0 -87
  314. package/dist/actions/migration/templates/__tests__/stringToPTE.test.js.map +0 -1
  315. package/dist/actions/migration/templates/index.d.ts +0 -5
  316. package/dist/actions/migration/templates/index.js +0 -7
  317. package/dist/actions/migration/templates/index.js.map +0 -1
  318. package/dist/actions/migration/templates/minimalAdvanced.d.ts +0 -4
  319. package/dist/actions/migration/templates/minimalAdvanced.js +0 -21
  320. package/dist/actions/migration/templates/minimalAdvanced.js.map +0 -1
  321. package/dist/actions/migration/templates/minimalSimple.d.ts +0 -4
  322. package/dist/actions/migration/templates/minimalSimple.js +0 -61
  323. package/dist/actions/migration/templates/minimalSimple.js.map +0 -1
  324. package/dist/actions/migration/templates/renameField.d.ts +0 -4
  325. package/dist/actions/migration/templates/renameField.js +0 -20
  326. package/dist/actions/migration/templates/renameField.js.map +0 -1
  327. package/dist/actions/migration/templates/renameType.d.ts +0 -4
  328. package/dist/actions/migration/templates/renameType.js +0 -19
  329. package/dist/actions/migration/templates/renameType.js.map +0 -1
  330. package/dist/actions/migration/templates/stringToPTE.d.ts +0 -4
  331. package/dist/actions/migration/templates/stringToPTE.js +0 -32
  332. package/dist/actions/migration/templates/stringToPTE.js.map +0 -1
  333. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js +0 -294
  334. package/dist/actions/schema/__tests__/deleteSchemaAction.test.js.map +0 -1
  335. package/dist/actions/schema/schemaStoreConstants.d.ts +0 -1
  336. package/dist/actions/schema/schemaStoreConstants.js +0 -4
  337. package/dist/actions/schema/schemaStoreConstants.js.map +0 -1
  338. package/dist/actions/schema/utils/schemaActionHelpers.d.ts +0 -1
  339. package/dist/actions/schema/utils/schemaActionHelpers.js +0 -5
  340. package/dist/actions/schema/utils/schemaActionHelpers.js.map +0 -1
  341. package/dist/actions/schema/utils/schemaApiClient.d.ts +0 -6
  342. package/dist/actions/schema/utils/schemaApiClient.js +0 -17
  343. package/dist/actions/schema/utils/schemaApiClient.js.map +0 -1
  344. package/dist/actions/users/apiVersion.d.ts +0 -6
  345. package/dist/actions/users/apiVersion.js +0 -7
  346. package/dist/actions/users/apiVersion.js.map +0 -1
  347. package/dist/commands/__tests__/init.test.js +0 -411
  348. package/dist/commands/__tests__/init.test.js.map +0 -1
  349. package/dist/commands/migration/__tests__/create.test.js +0 -296
  350. package/dist/commands/migration/__tests__/create.test.js.map +0 -1
  351. package/dist/commands/migration/__tests__/list.test.js +0 -166
  352. package/dist/commands/migration/__tests__/list.test.js.map +0 -1
  353. package/dist/commands/migration/__tests__/run.test.js +0 -481
  354. package/dist/commands/migration/__tests__/run.test.js.map +0 -1
  355. package/dist/commands/migration/create.d.ts +0 -17
  356. package/dist/commands/migration/create.js +0 -143
  357. package/dist/commands/migration/create.js.map +0 -1
  358. package/dist/commands/migration/list.d.ts +0 -9
  359. package/dist/commands/migration/list.js +0 -61
  360. package/dist/commands/migration/list.js.map +0 -1
  361. package/dist/commands/migration/run.d.ts +0 -26
  362. package/dist/commands/migration/run.js +0 -271
  363. package/dist/commands/migration/run.js.map +0 -1
  364. package/dist/util/migration/constants.d.ts +0 -3
  365. package/dist/util/migration/constants.js +0 -10
  366. package/dist/util/migration/constants.js.map +0 -1
  367. package/dist/util/migration/ensureApiVersionFormat.d.ts +0 -9
  368. package/dist/util/migration/ensureApiVersionFormat.js +0 -16
  369. package/dist/util/migration/ensureApiVersionFormat.js.map +0 -1
  370. package/dist/util/migration/prettyMutationFormatter.d.ts +0 -8
  371. package/dist/util/migration/prettyMutationFormatter.js +0 -141
  372. package/dist/util/migration/prettyMutationFormatter.js.map +0 -1
  373. package/dist/utils/migration/resolveMigrationScript.d.ts +0 -44
  374. package/dist/utils/migration/resolveMigrationScript.js +0 -74
  375. package/dist/utils/migration/resolveMigrationScript.js.map +0 -1
  376. /package/dist/actions/auth/login/{index.d.ts → login.d.ts} +0 -0
@@ -2,27 +2,23 @@ import { runCommand } from '@oclif/test';
2
2
  import { mockApi, testCommand } from '@sanity/cli-test';
3
3
  import nock from 'nock';
4
4
  import { afterEach, describe, expect, test, vi } from 'vitest';
5
- import { CORS_API_VERSION } from '../../../actions/cors/constants.js';
5
+ import { CORS_API_VERSION } from '../../../services/cors.js';
6
6
  import { NO_PROJECT_ID } from '../../../util/errorMessages.js';
7
7
  import { List } from '../list.js';
8
- // Mock the config functions with relative paths
9
- vi.mock('../../../../../cli-core/src/config/findProjectRoot.js', ()=>({
10
- findProjectRoot: vi.fn().mockResolvedValue({
11
- directory: '/test/path',
12
- root: '/test/path',
13
- type: 'studio'
14
- })
15
- }));
16
- vi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', ()=>({
17
- getCliConfig: vi.fn().mockResolvedValue({
18
- api: {
19
- projectId: 'test-project'
20
- }
21
- })
22
- }));
23
- vi.mock('../../../../../cli-core/src/services/getCliToken.js', ()=>({
24
- getCliToken: vi.fn().mockResolvedValue('test-token')
25
- }));
8
+ const testProjectId = 'test-project';
9
+ const defaultMocks = {
10
+ cliConfig: {
11
+ api: {
12
+ projectId: testProjectId
13
+ }
14
+ },
15
+ projectRoot: {
16
+ directory: '/test/path',
17
+ path: '/test/path/sanity.config.ts',
18
+ type: 'studio'
19
+ },
20
+ token: 'test-token'
21
+ };
26
22
  describe('#list', ()=>{
27
23
  afterEach(()=>{
28
24
  vi.clearAllMocks();
@@ -40,7 +36,7 @@ describe('#list', ()=>{
40
36
  test('displays CORS origins correctly', async ()=>{
41
37
  mockApi({
42
38
  apiVersion: CORS_API_VERSION,
43
- uri: '/projects/test-project/cors'
39
+ uri: `/projects/${testProjectId}/cors`
44
40
  }).reply(200, [
45
41
  {
46
42
  allowCredentials: true,
@@ -48,7 +44,7 @@ describe('#list', ()=>{
48
44
  deletedAt: null,
49
45
  id: 1,
50
46
  origin: 'https://example.com',
51
- projectId: 'test-project',
47
+ projectId: testProjectId,
52
48
  updatedAt: '2023-01-02T00:00:00Z'
53
49
  },
54
50
  {
@@ -57,7 +53,7 @@ describe('#list', ()=>{
57
53
  deletedAt: null,
58
54
  id: 2,
59
55
  origin: 'https://app.example.com',
60
- projectId: 'test-project',
56
+ projectId: testProjectId,
61
57
  updatedAt: null
62
58
  },
63
59
  {
@@ -66,17 +62,19 @@ describe('#list', ()=>{
66
62
  deletedAt: null,
67
63
  id: 3,
68
64
  origin: 'http://localhost:3000',
69
- projectId: 'test-project',
65
+ projectId: testProjectId,
70
66
  updatedAt: null
71
67
  }
72
68
  ]);
73
- const { stdout } = await testCommand(List);
69
+ const { stdout } = await testCommand(List, [], {
70
+ mocks: defaultMocks
71
+ });
74
72
  expect(stdout).toBe('https://example.com\nhttps://app.example.com\nhttp://localhost:3000\n');
75
73
  });
76
74
  test('displays single CORS origin correctly', async ()=>{
77
75
  mockApi({
78
76
  apiVersion: CORS_API_VERSION,
79
- uri: '/projects/test-project/cors'
77
+ uri: `/projects/${testProjectId}/cors`
80
78
  }).reply(200, [
81
79
  {
82
80
  allowCredentials: true,
@@ -84,92 +82,113 @@ describe('#list', ()=>{
84
82
  deletedAt: null,
85
83
  id: 1,
86
84
  origin: 'https://single-origin.com',
87
- projectId: 'test-project',
85
+ projectId: testProjectId,
88
86
  updatedAt: null
89
87
  }
90
88
  ]);
91
- const { stdout } = await testCommand(List);
89
+ const { stdout } = await testCommand(List, [], {
90
+ mocks: defaultMocks
91
+ });
92
92
  expect(stdout).toBe('https://single-origin.com\n');
93
93
  });
94
94
  test('handles empty CORS origins list', async ()=>{
95
95
  mockApi({
96
96
  apiVersion: CORS_API_VERSION,
97
- uri: '/projects/test-project/cors'
97
+ uri: `/projects/${testProjectId}/cors`
98
98
  }).reply(200, []);
99
- const { stdout } = await testCommand(List);
99
+ const { stdout } = await testCommand(List, [], {
100
+ mocks: defaultMocks
101
+ });
100
102
  expect(stdout).toBe('No CORS origins configured for this project.\n');
101
103
  });
102
104
  test('displays an error if the API request fails', async ()=>{
103
105
  mockApi({
104
106
  apiVersion: CORS_API_VERSION,
105
- uri: '/projects/test-project/cors'
107
+ uri: `/projects/${testProjectId}/cors`
106
108
  }).reply(500, {
107
109
  message: 'Internal Server Error'
108
110
  });
109
- const { error } = await testCommand(List);
111
+ const { error } = await testCommand(List, [], {
112
+ mocks: defaultMocks
113
+ });
110
114
  expect(error).toBeInstanceOf(Error);
111
115
  expect(error?.message).toContain('CORS origins list retrieval failed');
112
116
  expect(error?.message).toContain('Internal Server Error');
113
117
  });
114
118
  test('handles network errors gracefully', async ()=>{
115
119
  // Don't set up any mock to simulate network failure
116
- const { error } = await testCommand(List);
120
+ const { error } = await testCommand(List, [], {
121
+ mocks: defaultMocks
122
+ });
117
123
  expect(error).toBeInstanceOf(Error);
118
124
  expect(error?.message).toContain('CORS origins list retrieval failed');
119
125
  // The actual error can vary (authorization, network, etc.) so just check the wrapper
120
126
  });
121
127
  test('throws error when no project ID is found', async ()=>{
122
- const { getCliConfig } = await import('../../../../../cli-core/src/config/cli/getCliConfig.js');
123
- vi.mocked(getCliConfig).mockResolvedValueOnce({
124
- api: {
125
- projectId: undefined
128
+ const { error } = await testCommand(List, [], {
129
+ mocks: {
130
+ ...defaultMocks,
131
+ cliConfig: {
132
+ api: {
133
+ projectId: undefined
134
+ }
135
+ }
126
136
  }
127
137
  });
128
- const { error } = await testCommand(List);
129
138
  expect(error).toBeInstanceOf(Error);
130
139
  expect(error?.message).toEqual(NO_PROJECT_ID);
131
140
  });
132
141
  test('throws error when project ID is null', async ()=>{
133
- const { getCliConfig } = await import('../../../../../cli-core/src/config/cli/getCliConfig.js');
134
- vi.mocked(getCliConfig).mockResolvedValueOnce({
135
- api: {
136
- projectId: undefined
142
+ const { error } = await testCommand(List, [], {
143
+ mocks: {
144
+ ...defaultMocks,
145
+ cliConfig: {
146
+ api: {
147
+ projectId: undefined
148
+ }
149
+ }
137
150
  }
138
151
  });
139
- const { error } = await testCommand(List);
140
152
  expect(error).toBeInstanceOf(Error);
141
153
  expect(error?.message).toEqual(NO_PROJECT_ID);
142
154
  });
143
155
  test('throws error when project ID is empty string', async ()=>{
144
- const { getCliConfig } = await import('../../../../../cli-core/src/config/cli/getCliConfig.js');
145
- vi.mocked(getCliConfig).mockResolvedValueOnce({
146
- api: {
147
- projectId: ''
156
+ const { error } = await testCommand(List, [], {
157
+ mocks: {
158
+ ...defaultMocks,
159
+ cliConfig: {
160
+ api: {
161
+ projectId: ''
162
+ }
163
+ }
148
164
  }
149
165
  });
150
- const { error } = await testCommand(List);
151
166
  expect(error).toBeInstanceOf(Error);
152
167
  expect(error?.message).toEqual(NO_PROJECT_ID);
153
168
  });
154
169
  test('handles non-array API response', async ()=>{
155
170
  mockApi({
156
171
  apiVersion: CORS_API_VERSION,
157
- uri: '/projects/test-project/cors'
172
+ uri: `/projects/${testProjectId}/cors`
158
173
  }).reply(200, {
159
174
  message: 'Not an array'
160
175
  });
161
- const { error } = await testCommand(List);
176
+ const { error } = await testCommand(List, [], {
177
+ mocks: defaultMocks
178
+ });
162
179
  expect(error).toBeInstanceOf(Error);
163
180
  expect(error?.message).toContain('origins.map is not a function');
164
181
  });
165
182
  test('handles 404 error gracefully', async ()=>{
166
183
  mockApi({
167
184
  apiVersion: CORS_API_VERSION,
168
- uri: '/projects/test-project/cors'
185
+ uri: `/projects/${testProjectId}/cors`
169
186
  }).reply(404, {
170
187
  message: 'Project not found'
171
188
  });
172
- const { error } = await testCommand(List);
189
+ const { error } = await testCommand(List, [], {
190
+ mocks: defaultMocks
191
+ });
173
192
  expect(error).toBeInstanceOf(Error);
174
193
  expect(error?.message).toContain('CORS origins list retrieval failed');
175
194
  expect(error?.message).toContain('Project not found');
@@ -177,11 +196,13 @@ describe('#list', ()=>{
177
196
  test('handles 403 forbidden error', async ()=>{
178
197
  mockApi({
179
198
  apiVersion: CORS_API_VERSION,
180
- uri: '/projects/test-project/cors'
199
+ uri: `/projects/${testProjectId}/cors`
181
200
  }).reply(403, {
182
201
  message: 'Forbidden'
183
202
  });
184
- const { error } = await testCommand(List);
203
+ const { error } = await testCommand(List, [], {
204
+ mocks: defaultMocks
205
+ });
185
206
  expect(error).toBeInstanceOf(Error);
186
207
  expect(error?.message).toContain('CORS origins list retrieval failed');
187
208
  expect(error?.message).toContain('Forbidden');
@@ -189,7 +210,7 @@ describe('#list', ()=>{
189
210
  test('handles origins with special characters', async ()=>{
190
211
  mockApi({
191
212
  apiVersion: CORS_API_VERSION,
192
- uri: '/projects/test-project/cors'
213
+ uri: `/projects/${testProjectId}/cors`
193
214
  }).reply(200, [
194
215
  {
195
216
  allowCredentials: true,
@@ -197,7 +218,7 @@ describe('#list', ()=>{
197
218
  deletedAt: null,
198
219
  id: 1,
199
220
  origin: 'https://café.example.com',
200
- projectId: 'test-project',
221
+ projectId: testProjectId,
201
222
  updatedAt: null
202
223
  },
203
224
  {
@@ -206,11 +227,13 @@ describe('#list', ()=>{
206
227
  deletedAt: null,
207
228
  id: 2,
208
229
  origin: 'https://example.com:8080',
209
- projectId: 'test-project',
230
+ projectId: testProjectId,
210
231
  updatedAt: null
211
232
  }
212
233
  ]);
213
- const { stdout } = await testCommand(List);
234
+ const { stdout } = await testCommand(List, [], {
235
+ mocks: defaultMocks
236
+ });
214
237
  expect(stdout).toBe('https://café.example.com\nhttps://example.com:8080\n');
215
238
  });
216
239
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/commands/cors/__tests__/list.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {CORS_API_VERSION} from '../../../actions/cors/constants.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {List} from '../list.js'\n\n// Mock the config functions with relative paths\nvi.mock('../../../../../cli-core/src/config/findProjectRoot.js', () => ({\n findProjectRoot: vi.fn().mockResolvedValue({\n directory: '/test/path',\n root: '/test/path',\n type: 'studio',\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/config/cli/getCliConfig.js', () => ({\n getCliConfig: vi.fn().mockResolvedValue({\n api: {\n projectId: 'test-project',\n },\n }),\n}))\n\nvi.mock('../../../../../cli-core/src/services/getCliToken.js', () => ({\n getCliToken: vi.fn().mockResolvedValue('test-token'),\n}))\n\ndescribe('#list', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['cors list', '--help'])\n\n expect(stdout).toContain('List all origins allowed to access the API for this project')\n })\n\n test('displays CORS origins correctly', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: '/projects/test-project/cors',\n }).reply(200, [\n {\n allowCredentials: true,\n createdAt: '2023-01-01T00:00:00Z',\n deletedAt: null,\n id: 1,\n origin: 'https://example.com',\n projectId: 'test-project',\n updatedAt: '2023-01-02T00:00:00Z',\n },\n {\n allowCredentials: false,\n createdAt: '2023-01-01T00:00:00Z',\n deletedAt: null,\n id: 2,\n origin: 'https://app.example.com',\n projectId: 'test-project',\n updatedAt: null,\n },\n {\n allowCredentials: true,\n createdAt: '2023-01-03T00:00:00Z',\n deletedAt: null,\n id: 3,\n origin: 'http://localhost:3000',\n projectId: 'test-project',\n updatedAt: null,\n },\n ])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toBe('https://example.com\\nhttps://app.example.com\\nhttp://localhost:3000\\n')\n })\n\n test('displays single CORS origin correctly', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: '/projects/test-project/cors',\n }).reply(200, [\n {\n allowCredentials: true,\n createdAt: '2023-01-01T00:00:00Z',\n deletedAt: null,\n id: 1,\n origin: 'https://single-origin.com',\n projectId: 'test-project',\n updatedAt: null,\n },\n ])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toBe('https://single-origin.com\\n')\n })\n\n test('handles empty CORS origins list', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: '/projects/test-project/cors',\n }).reply(200, [])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toBe('No CORS origins configured for this project.\\n')\n })\n\n test('displays an error if the API request fails', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: '/projects/test-project/cors',\n }).reply(500, {message: 'Internal Server Error'})\n\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('CORS origins list retrieval failed')\n expect(error?.message).toContain('Internal Server Error')\n })\n\n test('handles network errors gracefully', async () => {\n // Don't set up any mock to simulate network failure\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('CORS origins list retrieval failed')\n // The actual error can vary (authorization, network, etc.) so just check the wrapper\n })\n\n test('throws error when no project ID is found', async () => {\n const {getCliConfig} = await import('../../../../../cli-core/src/config/cli/getCliConfig.js')\n vi.mocked(getCliConfig).mockResolvedValueOnce({\n api: {\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n\n test('throws error when project ID is null', async () => {\n const {getCliConfig} = await import('../../../../../cli-core/src/config/cli/getCliConfig.js')\n vi.mocked(getCliConfig).mockResolvedValueOnce({\n api: {\n projectId: undefined,\n },\n })\n\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n\n test('throws error when project ID is empty string', async () => {\n const {getCliConfig} = await import('../../../../../cli-core/src/config/cli/getCliConfig.js')\n vi.mocked(getCliConfig).mockResolvedValueOnce({\n api: {\n projectId: '',\n },\n })\n\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n\n test('handles non-array API response', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: '/projects/test-project/cors',\n }).reply(200, {message: 'Not an array'})\n\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('origins.map is not a function')\n })\n\n test('handles 404 error gracefully', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: '/projects/test-project/cors',\n }).reply(404, {message: 'Project not found'})\n\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('CORS origins list retrieval failed')\n expect(error?.message).toContain('Project not found')\n })\n\n test('handles 403 forbidden error', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: '/projects/test-project/cors',\n }).reply(403, {message: 'Forbidden'})\n\n const {error} = await testCommand(List)\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('CORS origins list retrieval failed')\n expect(error?.message).toContain('Forbidden')\n })\n\n test('handles origins with special characters', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: '/projects/test-project/cors',\n }).reply(200, [\n {\n allowCredentials: true,\n createdAt: '2023-01-01T00:00:00Z',\n deletedAt: null,\n id: 1,\n origin: 'https://café.example.com',\n projectId: 'test-project',\n updatedAt: null,\n },\n {\n allowCredentials: false,\n createdAt: '2023-01-02T00:00:00Z',\n deletedAt: null,\n id: 2,\n origin: 'https://example.com:8080',\n projectId: 'test-project',\n updatedAt: null,\n },\n ])\n\n const {stdout} = await testCommand(List)\n\n expect(stdout).toBe('https://café.example.com\\nhttps://example.com:8080\\n')\n })\n})\n"],"names":["runCommand","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","CORS_API_VERSION","NO_PROJECT_ID","List","mock","findProjectRoot","fn","mockResolvedValue","directory","root","type","getCliConfig","api","projectId","getCliToken","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toContain","apiVersion","uri","reply","allowCredentials","createdAt","deletedAt","id","origin","updatedAt","toBe","message","error","toBeInstanceOf","Error","mocked","mockResolvedValueOnce","undefined"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/commands/cors/__tests__/list.test.ts"],"sourcesContent":["import {runCommand} from '@oclif/test'\nimport {mockApi, testCommand} from '@sanity/cli-test'\nimport nock from 'nock'\nimport {afterEach, describe, expect, test, vi} from 'vitest'\n\nimport {CORS_API_VERSION} from '../../../services/cors.js'\nimport {NO_PROJECT_ID} from '../../../util/errorMessages.js'\nimport {List} from '../list.js'\n\nconst testProjectId = 'test-project'\n\nconst defaultMocks = {\n cliConfig: {api: {projectId: testProjectId}},\n projectRoot: {\n directory: '/test/path',\n path: '/test/path/sanity.config.ts',\n type: 'studio' as const,\n },\n token: 'test-token',\n}\n\ndescribe('#list', () => {\n afterEach(() => {\n vi.clearAllMocks()\n const pending = nock.pendingMocks()\n nock.cleanAll()\n expect(pending, 'pending mocks').toEqual([])\n })\n\n test('--help works', async () => {\n const {stdout} = await runCommand(['cors list', '--help'])\n\n expect(stdout).toContain('List all origins allowed to access the API for this project')\n })\n\n test('displays CORS origins correctly', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: `/projects/${testProjectId}/cors`,\n }).reply(200, [\n {\n allowCredentials: true,\n createdAt: '2023-01-01T00:00:00Z',\n deletedAt: null,\n id: 1,\n origin: 'https://example.com',\n projectId: testProjectId,\n updatedAt: '2023-01-02T00:00:00Z',\n },\n {\n allowCredentials: false,\n createdAt: '2023-01-01T00:00:00Z',\n deletedAt: null,\n id: 2,\n origin: 'https://app.example.com',\n projectId: testProjectId,\n updatedAt: null,\n },\n {\n allowCredentials: true,\n createdAt: '2023-01-03T00:00:00Z',\n deletedAt: null,\n id: 3,\n origin: 'http://localhost:3000',\n projectId: testProjectId,\n updatedAt: null,\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toBe('https://example.com\\nhttps://app.example.com\\nhttp://localhost:3000\\n')\n })\n\n test('displays single CORS origin correctly', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: `/projects/${testProjectId}/cors`,\n }).reply(200, [\n {\n allowCredentials: true,\n createdAt: '2023-01-01T00:00:00Z',\n deletedAt: null,\n id: 1,\n origin: 'https://single-origin.com',\n projectId: testProjectId,\n updatedAt: null,\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toBe('https://single-origin.com\\n')\n })\n\n test('handles empty CORS origins list', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: `/projects/${testProjectId}/cors`,\n }).reply(200, [])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toBe('No CORS origins configured for this project.\\n')\n })\n\n test('displays an error if the API request fails', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: `/projects/${testProjectId}/cors`,\n }).reply(500, {message: 'Internal Server Error'})\n\n const {error} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('CORS origins list retrieval failed')\n expect(error?.message).toContain('Internal Server Error')\n })\n\n test('handles network errors gracefully', async () => {\n // Don't set up any mock to simulate network failure\n const {error} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('CORS origins list retrieval failed')\n // The actual error can vary (authorization, network, etc.) so just check the wrapper\n })\n\n test('throws error when no project ID is found', async () => {\n const {error} = await testCommand(List, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: undefined}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n\n test('throws error when project ID is null', async () => {\n const {error} = await testCommand(List, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: undefined}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n\n test('throws error when project ID is empty string', async () => {\n const {error} = await testCommand(List, [], {\n mocks: {\n ...defaultMocks,\n cliConfig: {api: {projectId: ''}},\n },\n })\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toEqual(NO_PROJECT_ID)\n })\n\n test('handles non-array API response', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: `/projects/${testProjectId}/cors`,\n }).reply(200, {message: 'Not an array'})\n\n const {error} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('origins.map is not a function')\n })\n\n test('handles 404 error gracefully', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: `/projects/${testProjectId}/cors`,\n }).reply(404, {message: 'Project not found'})\n\n const {error} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('CORS origins list retrieval failed')\n expect(error?.message).toContain('Project not found')\n })\n\n test('handles 403 forbidden error', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: `/projects/${testProjectId}/cors`,\n }).reply(403, {message: 'Forbidden'})\n\n const {error} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(error).toBeInstanceOf(Error)\n expect(error?.message).toContain('CORS origins list retrieval failed')\n expect(error?.message).toContain('Forbidden')\n })\n\n test('handles origins with special characters', async () => {\n mockApi({\n apiVersion: CORS_API_VERSION,\n uri: `/projects/${testProjectId}/cors`,\n }).reply(200, [\n {\n allowCredentials: true,\n createdAt: '2023-01-01T00:00:00Z',\n deletedAt: null,\n id: 1,\n origin: 'https://café.example.com',\n projectId: testProjectId,\n updatedAt: null,\n },\n {\n allowCredentials: false,\n createdAt: '2023-01-02T00:00:00Z',\n deletedAt: null,\n id: 2,\n origin: 'https://example.com:8080',\n projectId: testProjectId,\n updatedAt: null,\n },\n ])\n\n const {stdout} = await testCommand(List, [], {mocks: defaultMocks})\n\n expect(stdout).toBe('https://café.example.com\\nhttps://example.com:8080\\n')\n })\n})\n"],"names":["runCommand","mockApi","testCommand","nock","afterEach","describe","expect","test","vi","CORS_API_VERSION","NO_PROJECT_ID","List","testProjectId","defaultMocks","cliConfig","api","projectId","projectRoot","directory","path","type","token","clearAllMocks","pending","pendingMocks","cleanAll","toEqual","stdout","toContain","apiVersion","uri","reply","allowCredentials","createdAt","deletedAt","id","origin","updatedAt","mocks","toBe","message","error","toBeInstanceOf","Error","undefined"],"mappings":"AAAA,SAAQA,UAAU,QAAO,cAAa;AACtC,SAAQC,OAAO,EAAEC,WAAW,QAAO,mBAAkB;AACrD,OAAOC,UAAU,OAAM;AACvB,SAAQC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAO,SAAQ;AAE5D,SAAQC,gBAAgB,QAAO,4BAA2B;AAC1D,SAAQC,aAAa,QAAO,iCAAgC;AAC5D,SAAQC,IAAI,QAAO,aAAY;AAE/B,MAAMC,gBAAgB;AAEtB,MAAMC,eAAe;IACnBC,WAAW;QAACC,KAAK;YAACC,WAAWJ;QAAa;IAAC;IAC3CK,aAAa;QACXC,WAAW;QACXC,MAAM;QACNC,MAAM;IACR;IACAC,OAAO;AACT;AAEAhB,SAAS,SAAS;IAChBD,UAAU;QACRI,GAAGc,aAAa;QAChB,MAAMC,UAAUpB,KAAKqB,YAAY;QACjCrB,KAAKsB,QAAQ;QACbnB,OAAOiB,SAAS,iBAAiBG,OAAO,CAAC,EAAE;IAC7C;IAEAnB,KAAK,gBAAgB;QACnB,MAAM,EAACoB,MAAM,EAAC,GAAG,MAAM3B,WAAW;YAAC;YAAa;SAAS;QAEzDM,OAAOqB,QAAQC,SAAS,CAAC;IAC3B;IAEArB,KAAK,mCAAmC;QACtCN,QAAQ;YACN4B,YAAYpB;YACZqB,KAAK,CAAC,UAAU,EAAElB,cAAc,KAAK,CAAC;QACxC,GAAGmB,KAAK,CAAC,KAAK;YACZ;gBACEC,kBAAkB;gBAClBC,WAAW;gBACXC,WAAW;gBACXC,IAAI;gBACJC,QAAQ;gBACRpB,WAAWJ;gBACXyB,WAAW;YACb;YACA;gBACEL,kBAAkB;gBAClBC,WAAW;gBACXC,WAAW;gBACXC,IAAI;gBACJC,QAAQ;gBACRpB,WAAWJ;gBACXyB,WAAW;YACb;YACA;gBACEL,kBAAkB;gBAClBC,WAAW;gBACXC,WAAW;gBACXC,IAAI;gBACJC,QAAQ;gBACRpB,WAAWJ;gBACXyB,WAAW;YACb;SACD;QAED,MAAM,EAACV,MAAM,EAAC,GAAG,MAAMzB,YAAYS,MAAM,EAAE,EAAE;YAAC2B,OAAOzB;QAAY;QAEjEP,OAAOqB,QAAQY,IAAI,CAAC;IACtB;IAEAhC,KAAK,yCAAyC;QAC5CN,QAAQ;YACN4B,YAAYpB;YACZqB,KAAK,CAAC,UAAU,EAAElB,cAAc,KAAK,CAAC;QACxC,GAAGmB,KAAK,CAAC,KAAK;YACZ;gBACEC,kBAAkB;gBAClBC,WAAW;gBACXC,WAAW;gBACXC,IAAI;gBACJC,QAAQ;gBACRpB,WAAWJ;gBACXyB,WAAW;YACb;SACD;QAED,MAAM,EAACV,MAAM,EAAC,GAAG,MAAMzB,YAAYS,MAAM,EAAE,EAAE;YAAC2B,OAAOzB;QAAY;QAEjEP,OAAOqB,QAAQY,IAAI,CAAC;IACtB;IAEAhC,KAAK,mCAAmC;QACtCN,QAAQ;YACN4B,YAAYpB;YACZqB,KAAK,CAAC,UAAU,EAAElB,cAAc,KAAK,CAAC;QACxC,GAAGmB,KAAK,CAAC,KAAK,EAAE;QAEhB,MAAM,EAACJ,MAAM,EAAC,GAAG,MAAMzB,YAAYS,MAAM,EAAE,EAAE;YAAC2B,OAAOzB;QAAY;QAEjEP,OAAOqB,QAAQY,IAAI,CAAC;IACtB;IAEAhC,KAAK,8CAA8C;QACjDN,QAAQ;YACN4B,YAAYpB;YACZqB,KAAK,CAAC,UAAU,EAAElB,cAAc,KAAK,CAAC;QACxC,GAAGmB,KAAK,CAAC,KAAK;YAACS,SAAS;QAAuB;QAE/C,MAAM,EAACC,KAAK,EAAC,GAAG,MAAMvC,YAAYS,MAAM,EAAE,EAAE;YAAC2B,OAAOzB;QAAY;QAEhEP,OAAOmC,OAAOC,cAAc,CAACC;QAC7BrC,OAAOmC,OAAOD,SAASZ,SAAS,CAAC;QACjCtB,OAAOmC,OAAOD,SAASZ,SAAS,CAAC;IACnC;IAEArB,KAAK,qCAAqC;QACxC,oDAAoD;QACpD,MAAM,EAACkC,KAAK,EAAC,GAAG,MAAMvC,YAAYS,MAAM,EAAE,EAAE;YAAC2B,OAAOzB;QAAY;QAEhEP,OAAOmC,OAAOC,cAAc,CAACC;QAC7BrC,OAAOmC,OAAOD,SAASZ,SAAS,CAAC;IACjC,qFAAqF;IACvF;IAEArB,KAAK,4CAA4C;QAC/C,MAAM,EAACkC,KAAK,EAAC,GAAG,MAAMvC,YAAYS,MAAM,EAAE,EAAE;YAC1C2B,OAAO;gBACL,GAAGzB,YAAY;gBACfC,WAAW;oBAACC,KAAK;wBAACC,WAAW4B;oBAAS;gBAAC;YACzC;QACF;QAEAtC,OAAOmC,OAAOC,cAAc,CAACC;QAC7BrC,OAAOmC,OAAOD,SAASd,OAAO,CAAChB;IACjC;IAEAH,KAAK,wCAAwC;QAC3C,MAAM,EAACkC,KAAK,EAAC,GAAG,MAAMvC,YAAYS,MAAM,EAAE,EAAE;YAC1C2B,OAAO;gBACL,GAAGzB,YAAY;gBACfC,WAAW;oBAACC,KAAK;wBAACC,WAAW4B;oBAAS;gBAAC;YACzC;QACF;QAEAtC,OAAOmC,OAAOC,cAAc,CAACC;QAC7BrC,OAAOmC,OAAOD,SAASd,OAAO,CAAChB;IACjC;IAEAH,KAAK,gDAAgD;QACnD,MAAM,EAACkC,KAAK,EAAC,GAAG,MAAMvC,YAAYS,MAAM,EAAE,EAAE;YAC1C2B,OAAO;gBACL,GAAGzB,YAAY;gBACfC,WAAW;oBAACC,KAAK;wBAACC,WAAW;oBAAE;gBAAC;YAClC;QACF;QAEAV,OAAOmC,OAAOC,cAAc,CAACC;QAC7BrC,OAAOmC,OAAOD,SAASd,OAAO,CAAChB;IACjC;IAEAH,KAAK,kCAAkC;QACrCN,QAAQ;YACN4B,YAAYpB;YACZqB,KAAK,CAAC,UAAU,EAAElB,cAAc,KAAK,CAAC;QACxC,GAAGmB,KAAK,CAAC,KAAK;YAACS,SAAS;QAAc;QAEtC,MAAM,EAACC,KAAK,EAAC,GAAG,MAAMvC,YAAYS,MAAM,EAAE,EAAE;YAAC2B,OAAOzB;QAAY;QAEhEP,OAAOmC,OAAOC,cAAc,CAACC;QAC7BrC,OAAOmC,OAAOD,SAASZ,SAAS,CAAC;IACnC;IAEArB,KAAK,gCAAgC;QACnCN,QAAQ;YACN4B,YAAYpB;YACZqB,KAAK,CAAC,UAAU,EAAElB,cAAc,KAAK,CAAC;QACxC,GAAGmB,KAAK,CAAC,KAAK;YAACS,SAAS;QAAmB;QAE3C,MAAM,EAACC,KAAK,EAAC,GAAG,MAAMvC,YAAYS,MAAM,EAAE,EAAE;YAAC2B,OAAOzB;QAAY;QAEhEP,OAAOmC,OAAOC,cAAc,CAACC;QAC7BrC,OAAOmC,OAAOD,SAASZ,SAAS,CAAC;QACjCtB,OAAOmC,OAAOD,SAASZ,SAAS,CAAC;IACnC;IAEArB,KAAK,+BAA+B;QAClCN,QAAQ;YACN4B,YAAYpB;YACZqB,KAAK,CAAC,UAAU,EAAElB,cAAc,KAAK,CAAC;QACxC,GAAGmB,KAAK,CAAC,KAAK;YAACS,SAAS;QAAW;QAEnC,MAAM,EAACC,KAAK,EAAC,GAAG,MAAMvC,YAAYS,MAAM,EAAE,EAAE;YAAC2B,OAAOzB;QAAY;QAEhEP,OAAOmC,OAAOC,cAAc,CAACC;QAC7BrC,OAAOmC,OAAOD,SAASZ,SAAS,CAAC;QACjCtB,OAAOmC,OAAOD,SAASZ,SAAS,CAAC;IACnC;IAEArB,KAAK,2CAA2C;QAC9CN,QAAQ;YACN4B,YAAYpB;YACZqB,KAAK,CAAC,UAAU,EAAElB,cAAc,KAAK,CAAC;QACxC,GAAGmB,KAAK,CAAC,KAAK;YACZ;gBACEC,kBAAkB;gBAClBC,WAAW;gBACXC,WAAW;gBACXC,IAAI;gBACJC,QAAQ;gBACRpB,WAAWJ;gBACXyB,WAAW;YACb;YACA;gBACEL,kBAAkB;gBAClBC,WAAW;gBACXC,WAAW;gBACXC,IAAI;gBACJC,QAAQ;gBACRpB,WAAWJ;gBACXyB,WAAW;YACb;SACD;QAED,MAAM,EAACV,MAAM,EAAC,GAAG,MAAMzB,YAAYS,MAAM,EAAE,EAAE;YAAC2B,OAAOzB;QAAY;QAEjEP,OAAOqB,QAAQY,IAAI,CAAC;IACtB;AACF"}
@@ -4,8 +4,8 @@ import { Args, Flags } from '@oclif/core';
4
4
  import { SanityCommand, subdebug } from '@sanity/cli-core';
5
5
  import { chalk, confirm, logSymbols } from '@sanity/cli-core/ux';
6
6
  import { oneline } from 'oneline';
7
- import { CORS_API_VERSION } from '../../actions/cors/constants.js';
8
7
  import { filterAndValidateOrigin } from '../../actions/cors/filterAndValidateOrigin.js';
8
+ import { createCorsOrigin } from '../../services/cors.js';
9
9
  import { NO_PROJECT_ID } from '../../util/errorMessages.js';
10
10
  const addCorsDebug = subdebug('cors:add');
11
11
  export class Add extends SanityCommand {
@@ -41,10 +41,6 @@ export class Add extends SanityCommand {
41
41
  async run() {
42
42
  const { args, flags } = await this.parse(Add);
43
43
  const { origin } = args;
44
- const client = await this.getGlobalApiClient({
45
- apiVersion: CORS_API_VERSION,
46
- requireUser: true
47
- });
48
44
  // Ensure we have project context
49
45
  const projectId = await this.getProjectId();
50
46
  if (!projectId) {
@@ -76,14 +72,10 @@ export class Add extends SanityCommand {
76
72
  this.log(`Normalized origin to: ${filteredOrigin}`);
77
73
  }
78
74
  try {
79
- const response = await client.request({
80
- body: {
81
- allowCredentials,
82
- origin: filteredOrigin
83
- },
84
- maxRedirects: 0,
85
- method: 'POST',
86
- uri: `/projects/${projectId}/cors`
75
+ const response = await createCorsOrigin({
76
+ allowCredentials,
77
+ origin: filteredOrigin,
78
+ projectId
87
79
  });
88
80
  addCorsDebug(`CORS origin added successfully`, response);
89
81
  this.log('CORS origin added successfully');
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/cors/add.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk, confirm, logSymbols} from '@sanity/cli-core/ux'\nimport {oneline} from 'oneline'\n\nimport {CORS_API_VERSION} from '../../actions/cors/constants.js'\nimport {filterAndValidateOrigin} from '../../actions/cors/filterAndValidateOrigin.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst addCorsDebug = subdebug('cors:add')\n\nexport class Add extends SanityCommand<typeof Add> {\n static override args = {\n origin: Args.string({\n description: 'Origin to allow (e.g., https://example.com)',\n required: true,\n }),\n }\n\n static override description = 'Allow a new origin to use your project API through CORS'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Interactively add a CORS origin',\n },\n {\n command: '<%= config.bin %> <%= command.id %> http://localhost:3000 --no-credentials',\n description: 'Add a localhost origin without credentials',\n },\n {\n command: '<%= config.bin %> <%= command.id %> https://myapp.com --credentials',\n description: 'Add a production origin with credentials allowed',\n },\n ]\n\n static override flags = {\n credentials: Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Allow credentials (token/cookie) to be sent from this origin',\n required: false,\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(Add)\n const {origin} = args\n\n const client = await this.getGlobalApiClient({\n apiVersion: CORS_API_VERSION,\n requireUser: true,\n })\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 // Check if the origin argument looks like a file path and warn\n try {\n const isFile = fs.existsSync(path.join(process.cwd(), args.origin))\n if (isFile) {\n this.warn(`Origin \"${args.origin}?\" Remember to quote values (sanity cors add \"*\")`)\n }\n } catch {\n // Ignore errors checking if it's a file\n }\n\n const filteredOrigin = await filterAndValidateOrigin(origin, this.output)\n const hasWildcard = origin.includes('*')\n\n if (hasWildcard) {\n const confirmed = await this.promptForWildcardConfirmation(origin)\n if (!confirmed) {\n this.error('Operation cancelled', {exit: 1})\n }\n }\n\n const allowCredentials =\n flags.credentials === undefined\n ? await this.promptForCredentials(hasWildcard)\n : Boolean(flags.credentials)\n\n if (filteredOrigin !== origin) {\n this.log(`Normalized origin to: ${filteredOrigin}`)\n }\n\n try {\n const response = await client.request({\n body: {\n allowCredentials,\n origin: filteredOrigin,\n },\n maxRedirects: 0,\n method: 'POST',\n uri: `/projects/${projectId}/cors`,\n })\n\n addCorsDebug(`CORS origin added successfully`, response)\n\n this.log('CORS origin added successfully')\n } catch (error) {\n const err = error as Error\n\n addCorsDebug(`Error adding CORS origin`, err)\n this.error(`CORS origin addition failed:\\n${err.message}`, {exit: 1})\n }\n }\n\n /**\n * Prompt the user for credentials\n *\n * @param hasWildcard - Whether the origin contains a wildcard\n * @returns - Whether to allow credentials\n */\n private async promptForCredentials(hasWildcard: boolean) {\n this.log('')\n if (hasWildcard) {\n this.log(oneline`\n ${chalk.yellow(`${logSymbols.warning} Warning:`)}\n We ${chalk.red(chalk.underline('HIGHLY'))} recommend NOT allowing credentials\n on origins containing wildcards. If you are logged in to a studio, people will\n be able to send requests ${chalk.underline('on your behalf')} to read and modify\n data, from any matching origin. Please tread carefully!\n `)\n } else {\n this.log(oneline`\n ${chalk.yellow(`${logSymbols.warning} Warning:`)}\n Should this origin be allowed to send requests using authentication tokens or\n session cookies? Be aware that any script on this origin will be able to send\n requests ${chalk.underline('on your behalf')} to read and modify data if you\n are logged in to a Sanity studio. If this origin hosts a studio, you will need\n this, otherwise you should probably answer \"No\" (n).\n `)\n }\n\n this.log('')\n\n return confirm({\n default: false,\n message: oneline`\n Allow credentials to be sent from this origin? Please read the warning above.\n `,\n })\n }\n\n /**\n * Prompt the user for wildcard confirmation\n *\n * @param origin - The origin to check for wildcards\n * @returns - Whether to allow the origin\n */\n private async promptForWildcardConfirmation(origin: string) {\n this.log('')\n this.log(chalk.yellow(`${logSymbols.warning} Warning: Examples of allowed origins:`))\n\n if (origin === '*') {\n this.log('- http://www.some-malicious.site')\n this.log('- https://not.what-you-were-expecting.com')\n this.log('- https://high-traffic-site.com')\n this.log('- http://192.168.1.1:8080')\n } else {\n this.log(`- ${origin.replace(/:\\*/, ':1234').replaceAll('*', 'foo')}`)\n this.log(`- ${origin.replace(/:\\*/, ':3030').replaceAll('*', 'foo.bar')}`)\n }\n\n this.log('')\n\n return confirm({\n default: false,\n message: oneline`\n Using wildcards can be ${chalk.red('risky')}.\n Are you ${chalk.underline('absolutely sure')} you want to allow this origin?`,\n })\n }\n}\n"],"names":["fs","path","Args","Flags","SanityCommand","subdebug","chalk","confirm","logSymbols","oneline","CORS_API_VERSION","filterAndValidateOrigin","NO_PROJECT_ID","addCorsDebug","Add","args","origin","string","description","required","examples","command","flags","credentials","boolean","allowNo","default","undefined","run","parse","client","getGlobalApiClient","apiVersion","requireUser","projectId","getProjectId","error","exit","isFile","existsSync","join","process","cwd","warn","filteredOrigin","output","hasWildcard","includes","confirmed","promptForWildcardConfirmation","allowCredentials","promptForCredentials","Boolean","log","response","request","body","maxRedirects","method","uri","err","message","yellow","warning","red","underline","replace","replaceAll"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/cors/add.ts"],"sourcesContent":["import fs from 'node:fs'\nimport path from 'node:path'\n\nimport {Args, Flags} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {chalk, confirm, logSymbols} from '@sanity/cli-core/ux'\nimport {oneline} from 'oneline'\n\nimport {filterAndValidateOrigin} from '../../actions/cors/filterAndValidateOrigin.js'\nimport {createCorsOrigin} from '../../services/cors.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst addCorsDebug = subdebug('cors:add')\n\nexport class Add extends SanityCommand<typeof Add> {\n static override args = {\n origin: Args.string({\n description: 'Origin to allow (e.g., https://example.com)',\n required: true,\n }),\n }\n\n static override description = 'Allow a new origin to use your project API through CORS'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Interactively add a CORS origin',\n },\n {\n command: '<%= config.bin %> <%= command.id %> http://localhost:3000 --no-credentials',\n description: 'Add a localhost origin without credentials',\n },\n {\n command: '<%= config.bin %> <%= command.id %> https://myapp.com --credentials',\n description: 'Add a production origin with credentials allowed',\n },\n ]\n\n static override flags = {\n credentials: Flags.boolean({\n allowNo: true,\n default: undefined,\n description: 'Allow credentials (token/cookie) to be sent from this origin',\n required: false,\n }),\n }\n\n public async run(): Promise<void> {\n const {args, flags} = await this.parse(Add)\n const {origin} = args\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 // Check if the origin argument looks like a file path and warn\n try {\n const isFile = fs.existsSync(path.join(process.cwd(), args.origin))\n if (isFile) {\n this.warn(`Origin \"${args.origin}?\" Remember to quote values (sanity cors add \"*\")`)\n }\n } catch {\n // Ignore errors checking if it's a file\n }\n\n const filteredOrigin = await filterAndValidateOrigin(origin, this.output)\n const hasWildcard = origin.includes('*')\n\n if (hasWildcard) {\n const confirmed = await this.promptForWildcardConfirmation(origin)\n if (!confirmed) {\n this.error('Operation cancelled', {exit: 1})\n }\n }\n\n const allowCredentials =\n flags.credentials === undefined\n ? await this.promptForCredentials(hasWildcard)\n : Boolean(flags.credentials)\n\n if (filteredOrigin !== origin) {\n this.log(`Normalized origin to: ${filteredOrigin}`)\n }\n\n try {\n const response = await createCorsOrigin({\n allowCredentials,\n origin: filteredOrigin,\n projectId,\n })\n\n addCorsDebug(`CORS origin added successfully`, response)\n\n this.log('CORS origin added successfully')\n } catch (error) {\n const err = error as Error\n\n addCorsDebug(`Error adding CORS origin`, err)\n this.error(`CORS origin addition failed:\\n${err.message}`, {exit: 1})\n }\n }\n\n /**\n * Prompt the user for credentials\n *\n * @param hasWildcard - Whether the origin contains a wildcard\n * @returns - Whether to allow credentials\n */\n private async promptForCredentials(hasWildcard: boolean) {\n this.log('')\n if (hasWildcard) {\n this.log(oneline`\n ${chalk.yellow(`${logSymbols.warning} Warning:`)}\n We ${chalk.red(chalk.underline('HIGHLY'))} recommend NOT allowing credentials\n on origins containing wildcards. If you are logged in to a studio, people will\n be able to send requests ${chalk.underline('on your behalf')} to read and modify\n data, from any matching origin. Please tread carefully!\n `)\n } else {\n this.log(oneline`\n ${chalk.yellow(`${logSymbols.warning} Warning:`)}\n Should this origin be allowed to send requests using authentication tokens or\n session cookies? Be aware that any script on this origin will be able to send\n requests ${chalk.underline('on your behalf')} to read and modify data if you\n are logged in to a Sanity studio. If this origin hosts a studio, you will need\n this, otherwise you should probably answer \"No\" (n).\n `)\n }\n\n this.log('')\n\n return confirm({\n default: false,\n message: oneline`\n Allow credentials to be sent from this origin? Please read the warning above.\n `,\n })\n }\n\n /**\n * Prompt the user for wildcard confirmation\n *\n * @param origin - The origin to check for wildcards\n * @returns - Whether to allow the origin\n */\n private async promptForWildcardConfirmation(origin: string) {\n this.log('')\n this.log(chalk.yellow(`${logSymbols.warning} Warning: Examples of allowed origins:`))\n\n if (origin === '*') {\n this.log('- http://www.some-malicious.site')\n this.log('- https://not.what-you-were-expecting.com')\n this.log('- https://high-traffic-site.com')\n this.log('- http://192.168.1.1:8080')\n } else {\n this.log(`- ${origin.replace(/:\\*/, ':1234').replaceAll('*', 'foo')}`)\n this.log(`- ${origin.replace(/:\\*/, ':3030').replaceAll('*', 'foo.bar')}`)\n }\n\n this.log('')\n\n return confirm({\n default: false,\n message: oneline`\n Using wildcards can be ${chalk.red('risky')}.\n Are you ${chalk.underline('absolutely sure')} you want to allow this origin?`,\n })\n }\n}\n"],"names":["fs","path","Args","Flags","SanityCommand","subdebug","chalk","confirm","logSymbols","oneline","filterAndValidateOrigin","createCorsOrigin","NO_PROJECT_ID","addCorsDebug","Add","args","origin","string","description","required","examples","command","flags","credentials","boolean","allowNo","default","undefined","run","parse","projectId","getProjectId","error","exit","isFile","existsSync","join","process","cwd","warn","filteredOrigin","output","hasWildcard","includes","confirmed","promptForWildcardConfirmation","allowCredentials","promptForCredentials","Boolean","log","response","err","message","yellow","warning","red","underline","replace","replaceAll"],"mappings":"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"}
@@ -1,7 +1,7 @@
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 { CORS_API_VERSION } from '../../actions/cors/constants.js';
4
+ import { deleteCorsOrigin, listCorsOrigins } from '../../services/cors.js';
5
5
  import { NO_PROJECT_ID } from '../../util/errorMessages.js';
6
6
  const deleteCorsDebug = subdebug('cors:delete');
7
7
  export class Delete extends SanityCommand {
@@ -24,10 +24,6 @@ export class Delete extends SanityCommand {
24
24
  ];
25
25
  async run() {
26
26
  const { args } = await this.parse(Delete);
27
- const client = await this.getGlobalApiClient({
28
- apiVersion: CORS_API_VERSION,
29
- requireUser: true
30
- });
31
27
  // Ensure we have project context
32
28
  const projectId = await this.getProjectId();
33
29
  if (!projectId) {
@@ -36,12 +32,11 @@ export class Delete extends SanityCommand {
36
32
  });
37
33
  }
38
34
  // Get the origin ID to delete
39
- const originId = await this.promptForOrigin(args.origin, client, projectId);
40
- // Delete the origin
35
+ const originId = await this.promptForOrigin(args.origin, projectId);
41
36
  try {
42
- await client.request({
43
- method: 'DELETE',
44
- uri: `/projects/${projectId}/cors/${originId}`
37
+ await deleteCorsOrigin({
38
+ originId,
39
+ projectId
45
40
  });
46
41
  this.log('Origin deleted');
47
42
  } catch (error) {
@@ -52,13 +47,10 @@ export class Delete extends SanityCommand {
52
47
  });
53
48
  }
54
49
  }
55
- async promptForOrigin(specifiedOrigin, client, projectId) {
56
- // Fetch all CORS origins
50
+ async promptForOrigin(specifiedOrigin, projectId) {
57
51
  let origins;
58
52
  try {
59
- origins = await client.request({
60
- uri: `/projects/${projectId}/cors`
61
- });
53
+ origins = await listCorsOrigins(projectId);
62
54
  } catch (error) {
63
55
  const err = error;
64
56
  deleteCorsDebug(`Error fetching CORS origins for project ${projectId}`, err);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/cors/delete.ts"],"sourcesContent":["import {Args} from '@oclif/core'\nimport {SanityCommand, subdebug} from '@sanity/cli-core'\nimport {select} from '@sanity/cli-core/ux'\n\nimport {CORS_API_VERSION} from '../../actions/cors/constants.js'\nimport {type CorsOrigin} from '../../actions/cors/types.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst deleteCorsDebug = subdebug('cors:delete')\n\nexport class Delete extends SanityCommand<typeof Delete> {\n static override args = {\n origin: Args.string({\n description: 'Origin to delete (will prompt if not provided)',\n required: false,\n }),\n }\n\n static override description = 'Delete an existing CORS origin from your project'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Interactively select and delete a CORS origin',\n },\n {\n command: '<%= config.bin %> <%= command.id %> https://example.com',\n description: 'Delete a specific CORS origin',\n },\n ]\n\n public async run(): Promise<void> {\n const {args} = await this.parse(Delete)\n\n const client = await this.getGlobalApiClient({\n apiVersion: CORS_API_VERSION,\n requireUser: true,\n })\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 the origin ID to delete\n const originId = await this.promptForOrigin(args.origin, client, projectId)\n\n // Delete the origin\n try {\n await client.request({\n method: 'DELETE',\n uri: `/projects/${projectId}/cors/${originId}`,\n })\n\n this.log('Origin deleted')\n } catch (error) {\n const err = error as Error\n deleteCorsDebug(`Error deleting CORS origin ${originId} for project ${projectId}`, err)\n this.error(`Origin deletion failed:\\n${err.message}`, {exit: 1})\n }\n }\n\n private async promptForOrigin(\n specifiedOrigin: string | undefined,\n client: Awaited<ReturnType<typeof this.getGlobalApiClient>>,\n projectId: string,\n ): Promise<number> {\n // Fetch all CORS origins\n let origins: CorsOrigin[]\n try {\n origins = await client.request<CorsOrigin[]>({uri: `/projects/${projectId}/cors`})\n } catch (error) {\n const err = error as Error\n deleteCorsDebug(`Error fetching CORS origins for project ${projectId}`, err)\n this.error(`Failed to fetch CORS origins:\\n${err.message}`, {exit: 1})\n }\n\n if (origins.length === 0) {\n this.error('No CORS origins configured for this project.', {exit: 1})\n }\n\n // If origin is specified, find it in the list\n if (specifiedOrigin) {\n const specifiedOriginLower = specifiedOrigin.toLowerCase()\n const selectedOrigin = origins.find(\n (origin) => origin.origin.toLowerCase() === specifiedOriginLower,\n )\n\n if (!selectedOrigin) {\n this.error(`Origin \"${specifiedOrigin}\" not found`, {exit: 1})\n }\n\n return selectedOrigin.id\n }\n\n // If no origin specified, prompt user to select one\n const choices = origins.map((origin) => ({\n name: origin.origin,\n value: origin.id,\n }))\n\n const selectedId = await select({\n choices,\n message: 'Select origin to delete',\n })\n\n return selectedId\n }\n}\n"],"names":["Args","SanityCommand","subdebug","select","CORS_API_VERSION","NO_PROJECT_ID","deleteCorsDebug","Delete","args","origin","string","description","required","examples","command","run","parse","client","getGlobalApiClient","apiVersion","requireUser","projectId","getProjectId","error","exit","originId","promptForOrigin","request","method","uri","log","err","message","specifiedOrigin","origins","length","specifiedOriginLower","toLowerCase","selectedOrigin","find","id","choices","map","name","value","selectedId"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/commands/cors/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 CorsOrigin, deleteCorsOrigin, listCorsOrigins} from '../../services/cors.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst deleteCorsDebug = subdebug('cors:delete')\n\nexport class Delete extends SanityCommand<typeof Delete> {\n static override args = {\n origin: Args.string({\n description: 'Origin to delete (will prompt if not provided)',\n required: false,\n }),\n }\n\n static override description = 'Delete an existing CORS origin from your project'\n\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'Interactively select and delete a CORS origin',\n },\n {\n command: '<%= config.bin %> <%= command.id %> https://example.com',\n description: 'Delete a specific CORS origin',\n },\n ]\n\n public async run(): Promise<void> {\n const {args} = await this.parse(Delete)\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 the origin ID to delete\n const originId = await this.promptForOrigin(args.origin, projectId)\n\n try {\n await deleteCorsOrigin({originId, projectId})\n\n this.log('Origin deleted')\n } catch (error) {\n const err = error as Error\n deleteCorsDebug(`Error deleting CORS origin ${originId} for project ${projectId}`, err)\n this.error(`Origin deletion failed:\\n${err.message}`, {exit: 1})\n }\n }\n\n private async promptForOrigin(\n specifiedOrigin: string | undefined,\n projectId: string,\n ): Promise<number> {\n let origins: CorsOrigin[]\n try {\n origins = await listCorsOrigins(projectId)\n } catch (error) {\n const err = error as Error\n deleteCorsDebug(`Error fetching CORS origins for project ${projectId}`, err)\n this.error(`Failed to fetch CORS origins:\\n${err.message}`, {exit: 1})\n }\n\n if (origins.length === 0) {\n this.error('No CORS origins configured for this project.', {exit: 1})\n }\n\n // If origin is specified, find it in the list\n if (specifiedOrigin) {\n const specifiedOriginLower = specifiedOrigin.toLowerCase()\n const selectedOrigin = origins.find(\n (origin) => origin.origin.toLowerCase() === specifiedOriginLower,\n )\n\n if (!selectedOrigin) {\n this.error(`Origin \"${specifiedOrigin}\" not found`, {exit: 1})\n }\n\n return selectedOrigin.id\n }\n\n // If no origin specified, prompt user to select one\n const choices = origins.map((origin) => ({\n name: origin.origin,\n value: origin.id,\n }))\n\n const selectedId = await select({\n choices,\n message: 'Select origin to delete',\n })\n\n return selectedId\n }\n}\n"],"names":["Args","SanityCommand","subdebug","select","deleteCorsOrigin","listCorsOrigins","NO_PROJECT_ID","deleteCorsDebug","Delete","args","origin","string","description","required","examples","command","run","parse","projectId","getProjectId","error","exit","originId","promptForOrigin","log","err","message","specifiedOrigin","origins","length","specifiedOriginLower","toLowerCase","selectedOrigin","find","id","choices","map","name","value","selectedId"],"mappings":"AAAA,SAAQA,IAAI,QAAO,cAAa;AAChC,SAAQC,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AACxD,SAAQC,MAAM,QAAO,sBAAqB;AAE1C,SAAyBC,gBAAgB,EAAEC,eAAe,QAAO,yBAAwB;AACzF,SAAQC,aAAa,QAAO,8BAA6B;AAEzD,MAAMC,kBAAkBL,SAAS;AAEjC,OAAO,MAAMM,eAAeP;IAC1B,OAAgBQ,OAAO;QACrBC,QAAQV,KAAKW,MAAM,CAAC;YAClBC,aAAa;YACbC,UAAU;QACZ;IACF,EAAC;IAED,OAAgBD,cAAc,mDAAkD;IAEhF,OAAgBE,WAAW;QACzB;YACEC,SAAS;YACTH,aAAa;QACf;QACA;YACEG,SAAS;YACTH,aAAa;QACf;KACD,CAAA;IAED,MAAaI,MAAqB;QAChC,MAAM,EAACP,IAAI,EAAC,GAAG,MAAM,IAAI,CAACQ,KAAK,CAACT;QAEhC,iCAAiC;QACjC,MAAMU,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,IAAI,CAACD,WAAW;YACd,IAAI,CAACE,KAAK,CAACd,eAAe;gBAACe,MAAM;YAAC;QACpC;QAEA,8BAA8B;QAC9B,MAAMC,WAAW,MAAM,IAAI,CAACC,eAAe,CAACd,KAAKC,MAAM,EAAEQ;QAEzD,IAAI;YACF,MAAMd,iBAAiB;gBAACkB;gBAAUJ;YAAS;YAE3C,IAAI,CAACM,GAAG,CAAC;QACX,EAAE,OAAOJ,OAAO;YACd,MAAMK,MAAML;YACZb,gBAAgB,CAAC,2BAA2B,EAAEe,SAAS,aAAa,EAAEJ,WAAW,EAAEO;YACnF,IAAI,CAACL,KAAK,CAAC,CAAC,yBAAyB,EAAEK,IAAIC,OAAO,EAAE,EAAE;gBAACL,MAAM;YAAC;QAChE;IACF;IAEA,MAAcE,gBACZI,eAAmC,EACnCT,SAAiB,EACA;QACjB,IAAIU;QACJ,IAAI;YACFA,UAAU,MAAMvB,gBAAgBa;QAClC,EAAE,OAAOE,OAAO;YACd,MAAMK,MAAML;YACZb,gBAAgB,CAAC,wCAAwC,EAAEW,WAAW,EAAEO;YACxE,IAAI,CAACL,KAAK,CAAC,CAAC,+BAA+B,EAAEK,IAAIC,OAAO,EAAE,EAAE;gBAACL,MAAM;YAAC;QACtE;QAEA,IAAIO,QAAQC,MAAM,KAAK,GAAG;YACxB,IAAI,CAACT,KAAK,CAAC,gDAAgD;gBAACC,MAAM;YAAC;QACrE;QAEA,8CAA8C;QAC9C,IAAIM,iBAAiB;YACnB,MAAMG,uBAAuBH,gBAAgBI,WAAW;YACxD,MAAMC,iBAAiBJ,QAAQK,IAAI,CACjC,CAACvB,SAAWA,OAAOA,MAAM,CAACqB,WAAW,OAAOD;YAG9C,IAAI,CAACE,gBAAgB;gBACnB,IAAI,CAACZ,KAAK,CAAC,CAAC,QAAQ,EAAEO,gBAAgB,WAAW,CAAC,EAAE;oBAACN,MAAM;gBAAC;YAC9D;YAEA,OAAOW,eAAeE,EAAE;QAC1B;QAEA,oDAAoD;QACpD,MAAMC,UAAUP,QAAQQ,GAAG,CAAC,CAAC1B,SAAY,CAAA;gBACvC2B,MAAM3B,OAAOA,MAAM;gBACnB4B,OAAO5B,OAAOwB,EAAE;YAClB,CAAA;QAEA,MAAMK,aAAa,MAAMpC,OAAO;YAC9BgC;YACAT,SAAS;QACX;QAEA,OAAOa;IACT;AACF"}
@@ -1,5 +1,5 @@
1
1
  import { SanityCommand, subdebug } from '@sanity/cli-core';
2
- import { CORS_API_VERSION } from '../../actions/cors/constants.js';
2
+ import { listCorsOrigins } from '../../services/cors.js';
3
3
  import { NO_PROJECT_ID } from '../../util/errorMessages.js';
4
4
  const listCorsDebug = subdebug('cors:list');
5
5
  export class List extends SanityCommand {
@@ -11,13 +11,7 @@ export class List extends SanityCommand {
11
11
  }
12
12
  ];
13
13
  async run() {
14
- // Parse to ensure no invalid flags are passed
15
14
  await this.parse(List);
16
- const client = await this.getGlobalApiClient({
17
- apiVersion: CORS_API_VERSION,
18
- requireUser: true
19
- });
20
- // Ensure we have project context
21
15
  const projectId = await this.getProjectId();
22
16
  if (!projectId) {
23
17
  this.error(NO_PROJECT_ID, {
@@ -26,9 +20,7 @@ export class List extends SanityCommand {
26
20
  }
27
21
  let origins;
28
22
  try {
29
- origins = await client.request({
30
- uri: `/projects/${projectId}/cors`
31
- });
23
+ origins = await listCorsOrigins(projectId);
32
24
  } catch (error) {
33
25
  const err = error;
34
26
  listCorsDebug(`Error fetching CORS origins for project ${projectId}`, err);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/commands/cors/list.ts"],"sourcesContent":["import {SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {CORS_API_VERSION} from '../../actions/cors/constants.js'\nimport {type CorsOrigin} from '../../actions/cors/types.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst listCorsDebug = subdebug('cors:list')\n\nexport class List extends SanityCommand<typeof List> {\n static override description = 'List all origins allowed to access the API for this project'\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'List CORS origins for the current project',\n },\n ]\n\n public async run(): Promise<void> {\n // Parse to ensure no invalid flags are passed\n await this.parse(List)\n\n const client = await this.getGlobalApiClient({\n apiVersion: CORS_API_VERSION,\n requireUser: true,\n })\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 let origins: CorsOrigin[]\n try {\n origins = await client.request<CorsOrigin[]>({uri: `/projects/${projectId}/cors`})\n } catch (error) {\n const err = error as Error\n\n listCorsDebug(`Error fetching CORS origins for project ${projectId}`, err)\n this.error(`CORS origins list retrieval failed:\\n${err.message}`, {exit: 1})\n }\n\n if (origins.length === 0) {\n this.log('No CORS origins configured for this project.')\n return\n }\n\n // Output each origin on a new line, matching the original behavior\n this.log(origins.map((origin) => origin.origin).join('\\n'))\n }\n}\n"],"names":["SanityCommand","subdebug","CORS_API_VERSION","NO_PROJECT_ID","listCorsDebug","List","description","examples","command","run","parse","client","getGlobalApiClient","apiVersion","requireUser","projectId","getProjectId","error","exit","origins","request","uri","err","message","length","log","map","origin","join"],"mappings":"AAAA,SAAQA,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAExD,SAAQC,gBAAgB,QAAO,kCAAiC;AAEhE,SAAQC,aAAa,QAAO,8BAA6B;AAEzD,MAAMC,gBAAgBH,SAAS;AAE/B,OAAO,MAAMI,aAAaL;IACxB,OAAgBM,cAAc,8DAA6D;IAC3F,OAAgBC,WAAW;QACzB;YACEC,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,MAAaG,MAAqB;QAChC,8CAA8C;QAC9C,MAAM,IAAI,CAACC,KAAK,CAACL;QAEjB,MAAMM,SAAS,MAAM,IAAI,CAACC,kBAAkB,CAAC;YAC3CC,YAAYX;YACZY,aAAa;QACf;QAEA,iCAAiC;QACjC,MAAMC,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,IAAI,CAACD,WAAW;YACd,IAAI,CAACE,KAAK,CAACd,eAAe;gBAACe,MAAM;YAAC;QACpC;QAEA,IAAIC;QACJ,IAAI;YACFA,UAAU,MAAMR,OAAOS,OAAO,CAAe;gBAACC,KAAK,CAAC,UAAU,EAAEN,UAAU,KAAK,CAAC;YAAA;QAClF,EAAE,OAAOE,OAAO;YACd,MAAMK,MAAML;YAEZb,cAAc,CAAC,wCAAwC,EAAEW,WAAW,EAAEO;YACtE,IAAI,CAACL,KAAK,CAAC,CAAC,qCAAqC,EAAEK,IAAIC,OAAO,EAAE,EAAE;gBAACL,MAAM;YAAC;QAC5E;QAEA,IAAIC,QAAQK,MAAM,KAAK,GAAG;YACxB,IAAI,CAACC,GAAG,CAAC;YACT;QACF;QAEA,mEAAmE;QACnE,IAAI,CAACA,GAAG,CAACN,QAAQO,GAAG,CAAC,CAACC,SAAWA,OAAOA,MAAM,EAAEC,IAAI,CAAC;IACvD;AACF"}
1
+ {"version":3,"sources":["../../../src/commands/cors/list.ts"],"sourcesContent":["import {SanityCommand, subdebug} from '@sanity/cli-core'\n\nimport {type CorsOrigin, listCorsOrigins} from '../../services/cors.js'\nimport {NO_PROJECT_ID} from '../../util/errorMessages.js'\n\nconst listCorsDebug = subdebug('cors:list')\n\nexport class List extends SanityCommand<typeof List> {\n static override description = 'List all origins allowed to access the API for this project'\n static override examples = [\n {\n command: '<%= config.bin %> <%= command.id %>',\n description: 'List CORS origins for the current project',\n },\n ]\n\n public async run(): Promise<void> {\n await this.parse(List)\n\n const projectId = await this.getProjectId()\n if (!projectId) {\n this.error(NO_PROJECT_ID, {exit: 1})\n }\n\n let origins: CorsOrigin[]\n try {\n origins = await listCorsOrigins(projectId)\n } catch (error) {\n const err = error as Error\n\n listCorsDebug(`Error fetching CORS origins for project ${projectId}`, err)\n this.error(`CORS origins list retrieval failed:\\n${err.message}`, {exit: 1})\n }\n\n if (origins.length === 0) {\n this.log('No CORS origins configured for this project.')\n return\n }\n\n // Output each origin on a new line, matching the original behavior\n this.log(origins.map((origin) => origin.origin).join('\\n'))\n }\n}\n"],"names":["SanityCommand","subdebug","listCorsOrigins","NO_PROJECT_ID","listCorsDebug","List","description","examples","command","run","parse","projectId","getProjectId","error","exit","origins","err","message","length","log","map","origin","join"],"mappings":"AAAA,SAAQA,aAAa,EAAEC,QAAQ,QAAO,mBAAkB;AAExD,SAAyBC,eAAe,QAAO,yBAAwB;AACvE,SAAQC,aAAa,QAAO,8BAA6B;AAEzD,MAAMC,gBAAgBH,SAAS;AAE/B,OAAO,MAAMI,aAAaL;IACxB,OAAgBM,cAAc,8DAA6D;IAC3F,OAAgBC,WAAW;QACzB;YACEC,SAAS;YACTF,aAAa;QACf;KACD,CAAA;IAED,MAAaG,MAAqB;QAChC,MAAM,IAAI,CAACC,KAAK,CAACL;QAEjB,MAAMM,YAAY,MAAM,IAAI,CAACC,YAAY;QACzC,IAAI,CAACD,WAAW;YACd,IAAI,CAACE,KAAK,CAACV,eAAe;gBAACW,MAAM;YAAC;QACpC;QAEA,IAAIC;QACJ,IAAI;YACFA,UAAU,MAAMb,gBAAgBS;QAClC,EAAE,OAAOE,OAAO;YACd,MAAMG,MAAMH;YAEZT,cAAc,CAAC,wCAAwC,EAAEO,WAAW,EAAEK;YACtE,IAAI,CAACH,KAAK,CAAC,CAAC,qCAAqC,EAAEG,IAAIC,OAAO,EAAE,EAAE;gBAACH,MAAM;YAAC;QAC5E;QAEA,IAAIC,QAAQG,MAAM,KAAK,GAAG;YACxB,IAAI,CAACC,GAAG,CAAC;YACT;QACF;QAEA,mEAAmE;QACnE,IAAI,CAACA,GAAG,CAACJ,QAAQK,GAAG,CAAC,CAACC,SAAWA,OAAOA,MAAM,EAAEC,IAAI,CAAC;IACvD;AACF"}