@storyblok/management-api-client 0.5.0 → 0.6.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.
Files changed (320) hide show
  1. package/README.md +3 -1
  2. package/dist/client.cjs +196 -0
  3. package/dist/client.cjs.map +1 -0
  4. package/dist/client.d.cts +761 -0
  5. package/dist/client.d.mts +761 -0
  6. package/dist/client.mjs +195 -0
  7. package/dist/client.mjs.map +1 -0
  8. package/dist/error.cjs.map +1 -1
  9. package/dist/error.d.cts +12 -2
  10. package/dist/error.d.mts +12 -2
  11. package/dist/error.mjs.map +1 -1
  12. package/dist/generated/mapi/_internal.gen.d.cts +371 -0
  13. package/dist/generated/mapi/_internal.gen.d.mts +371 -0
  14. package/dist/generated/{shared → mapi}/client/client.gen.cjs +1 -1
  15. package/dist/generated/mapi/client/client.gen.cjs.map +1 -0
  16. package/dist/generated/{shared → mapi}/client/client.gen.mjs +1 -1
  17. package/dist/generated/mapi/client/client.gen.mjs.map +1 -0
  18. package/dist/generated/{shared → mapi}/client/types.gen.d.cts +1 -1
  19. package/dist/generated/{shared → mapi}/client/types.gen.d.mts +1 -1
  20. package/dist/generated/{shared → mapi}/client/utils.gen.cjs +1 -1
  21. package/dist/generated/mapi/client/utils.gen.cjs.map +1 -0
  22. package/dist/generated/{shared → mapi}/client/utils.gen.d.cts +1 -1
  23. package/dist/generated/{shared → mapi}/client/utils.gen.d.mts +1 -1
  24. package/dist/generated/{shared → mapi}/client/utils.gen.mjs +1 -1
  25. package/dist/generated/mapi/client/utils.gen.mjs.map +1 -0
  26. package/dist/generated/mapi/client.gen.cjs +10 -0
  27. package/dist/generated/mapi/client.gen.cjs.map +1 -0
  28. package/dist/generated/mapi/client.gen.mjs +10 -0
  29. package/dist/generated/mapi/client.gen.mjs.map +1 -0
  30. package/dist/generated/{shared → mapi}/core/auth.gen.cjs +1 -1
  31. package/dist/generated/mapi/core/auth.gen.cjs.map +1 -0
  32. package/dist/generated/{shared → mapi}/core/auth.gen.d.cts +1 -1
  33. package/dist/generated/{shared → mapi}/core/auth.gen.d.mts +1 -1
  34. package/dist/generated/{shared → mapi}/core/auth.gen.mjs +1 -1
  35. package/dist/generated/mapi/core/auth.gen.mjs.map +1 -0
  36. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.cjs +1 -1
  37. package/dist/generated/mapi/core/bodySerializer.gen.cjs.map +1 -0
  38. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.d.cts +1 -1
  39. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.d.mts +1 -1
  40. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.mjs +1 -1
  41. package/dist/generated/mapi/core/bodySerializer.gen.mjs.map +1 -0
  42. package/dist/generated/{shared → mapi}/core/params.gen.cjs +1 -1
  43. package/dist/generated/mapi/core/params.gen.cjs.map +1 -0
  44. package/dist/generated/{shared → mapi}/core/params.gen.mjs +1 -1
  45. package/dist/generated/mapi/core/params.gen.mjs.map +1 -0
  46. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.cjs +1 -1
  47. package/dist/generated/mapi/core/pathSerializer.gen.cjs.map +1 -0
  48. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.d.cts +1 -1
  49. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.d.mts +1 -1
  50. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.mjs +1 -1
  51. package/dist/generated/mapi/core/pathSerializer.gen.mjs.map +1 -0
  52. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.cjs +1 -1
  53. package/dist/generated/mapi/core/serverSentEvents.gen.cjs.map +1 -0
  54. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.d.cts +1 -1
  55. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.d.mts +1 -1
  56. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.mjs +1 -1
  57. package/dist/generated/mapi/core/serverSentEvents.gen.mjs.map +1 -0
  58. package/dist/generated/{shared → mapi}/core/types.gen.d.cts +1 -1
  59. package/dist/generated/{shared → mapi}/core/types.gen.d.mts +1 -1
  60. package/dist/generated/{shared → mapi}/core/utils.gen.cjs +1 -1
  61. package/dist/generated/mapi/core/utils.gen.cjs.map +1 -0
  62. package/dist/generated/{shared → mapi}/core/utils.gen.mjs +1 -1
  63. package/dist/generated/mapi/core/utils.gen.mjs.map +1 -0
  64. package/dist/generated/mapi/sdk.gen.cjs +1477 -0
  65. package/dist/generated/mapi/sdk.gen.cjs.map +1 -0
  66. package/dist/generated/mapi/sdk.gen.mjs +1399 -0
  67. package/dist/generated/mapi/sdk.gen.mjs.map +1 -0
  68. package/dist/generated/mapi/types-aliased.gen.d.cts +1598 -0
  69. package/dist/generated/mapi/types-aliased.gen.d.mts +1598 -0
  70. package/dist/generated/mapi/types.gen.d.cts +5075 -0
  71. package/dist/generated/mapi/types.gen.d.mts +5075 -0
  72. package/dist/generated/overlay/_internal.gen.d.cts +850 -0
  73. package/dist/generated/overlay/_internal.gen.d.mts +850 -0
  74. package/dist/generated/types/_utils.d.cts +7 -0
  75. package/dist/generated/types/_utils.d.mts +7 -0
  76. package/dist/generated/types/block.d.cts +55 -0
  77. package/dist/generated/types/block.d.mts +55 -0
  78. package/dist/generated/types/field.d.cts +122 -0
  79. package/dist/generated/types/field.d.mts +122 -0
  80. package/dist/generated/types/mapi-story.d.cts +29 -0
  81. package/dist/generated/types/mapi-story.d.mts +29 -0
  82. package/dist/index.cjs +3 -181
  83. package/dist/index.d.cts +12 -647
  84. package/dist/index.d.mts +12 -646
  85. package/dist/index.mjs +2 -179
  86. package/dist/resources/asset-folders.cjs +9 -9
  87. package/dist/resources/asset-folders.cjs.map +1 -1
  88. package/dist/resources/asset-folders.mjs +9 -9
  89. package/dist/resources/asset-folders.mjs.map +1 -1
  90. package/dist/resources/assets.cjs +57 -50
  91. package/dist/resources/assets.cjs.map +1 -1
  92. package/dist/resources/assets.d.cts +23 -27
  93. package/dist/resources/assets.d.mts +23 -27
  94. package/dist/resources/assets.mjs +57 -50
  95. package/dist/resources/assets.mjs.map +1 -1
  96. package/dist/resources/component-folders.cjs +9 -9
  97. package/dist/resources/component-folders.cjs.map +1 -1
  98. package/dist/resources/component-folders.mjs +9 -9
  99. package/dist/resources/component-folders.mjs.map +1 -1
  100. package/dist/resources/components.cjs +28 -20
  101. package/dist/resources/components.cjs.map +1 -1
  102. package/dist/resources/components.d.cts +76 -0
  103. package/dist/resources/components.d.mts +76 -0
  104. package/dist/resources/components.mjs +28 -20
  105. package/dist/resources/components.mjs.map +1 -1
  106. package/dist/resources/datasource-entries.cjs +29 -34
  107. package/dist/resources/datasource-entries.cjs.map +1 -1
  108. package/dist/resources/datasource-entries.mjs +30 -35
  109. package/dist/resources/datasource-entries.mjs.map +1 -1
  110. package/dist/resources/datasources.cjs +27 -9
  111. package/dist/resources/datasources.cjs.map +1 -1
  112. package/dist/resources/datasources.mjs +27 -9
  113. package/dist/resources/datasources.mjs.map +1 -1
  114. package/dist/resources/experiments.cjs +31 -31
  115. package/dist/resources/experiments.cjs.map +1 -1
  116. package/dist/resources/experiments.mjs +31 -31
  117. package/dist/resources/experiments.mjs.map +1 -1
  118. package/dist/resources/internal-tags.cjs +7 -7
  119. package/dist/resources/internal-tags.cjs.map +1 -1
  120. package/dist/resources/internal-tags.mjs +7 -7
  121. package/dist/resources/internal-tags.mjs.map +1 -1
  122. package/dist/resources/presets.cjs +9 -9
  123. package/dist/resources/presets.cjs.map +1 -1
  124. package/dist/resources/presets.mjs +9 -9
  125. package/dist/resources/presets.mjs.map +1 -1
  126. package/dist/resources/shared-asset-folders.cjs.map +1 -1
  127. package/dist/resources/shared-asset-folders.d.cts +1 -1
  128. package/dist/resources/shared-asset-folders.d.mts +1 -1
  129. package/dist/resources/shared-asset-folders.mjs.map +1 -1
  130. package/dist/resources/shared-assets.cjs.map +1 -1
  131. package/dist/resources/shared-assets.d.cts +2 -2
  132. package/dist/resources/shared-assets.d.mts +2 -2
  133. package/dist/resources/shared-assets.mjs.map +1 -1
  134. package/dist/resources/shared-internal-tags.cjs.map +1 -1
  135. package/dist/resources/shared-internal-tags.mjs.map +1 -1
  136. package/dist/resources/shared.cjs +15 -0
  137. package/dist/resources/shared.cjs.map +1 -1
  138. package/dist/resources/shared.mjs +15 -1
  139. package/dist/resources/shared.mjs.map +1 -1
  140. package/dist/resources/spaces.cjs +8 -7
  141. package/dist/resources/spaces.cjs.map +1 -1
  142. package/dist/resources/spaces.d.cts +8 -0
  143. package/dist/resources/spaces.d.mts +7 -0
  144. package/dist/resources/spaces.mjs +8 -7
  145. package/dist/resources/spaces.mjs.map +1 -1
  146. package/dist/resources/stories.cjs +20 -16
  147. package/dist/resources/stories.cjs.map +1 -1
  148. package/dist/resources/stories.d.cts +93 -0
  149. package/dist/resources/stories.d.mts +93 -0
  150. package/dist/resources/stories.mjs +20 -16
  151. package/dist/resources/stories.mjs.map +1 -1
  152. package/dist/resources/users.cjs +3 -3
  153. package/dist/resources/users.cjs.map +1 -1
  154. package/dist/resources/users.mjs +3 -3
  155. package/dist/resources/users.mjs.map +1 -1
  156. package/dist/utils/query-serializer.cjs +54 -0
  157. package/dist/utils/query-serializer.cjs.map +1 -0
  158. package/dist/utils/query-serializer.mjs +54 -0
  159. package/dist/utils/query-serializer.mjs.map +1 -0
  160. package/package.json +16 -14
  161. package/playground/integration-tests/README.md +24 -0
  162. package/playground/integration-tests/eslint.config.js +5 -0
  163. package/playground/integration-tests/node_modules/.bin/eslint +16 -0
  164. package/playground/integration-tests/node_modules/.bin/tsc +16 -0
  165. package/playground/integration-tests/node_modules/.bin/tsserver +16 -0
  166. package/playground/integration-tests/node_modules/.bin/vitest +16 -0
  167. package/playground/integration-tests/package.json +24 -0
  168. package/playground/integration-tests/test/setup.e2e.ts +11 -0
  169. package/playground/integration-tests/test/specs/mapi-round-trip.spec.e2e.ts +510 -0
  170. package/playground/integration-tests/test/types/components.test-d.ts +74 -0
  171. package/playground/integration-tests/test/types/resources.test-d.ts +212 -0
  172. package/playground/integration-tests/test/types/stories.test-d.ts +310 -0
  173. package/playground/integration-tests/vitest.config.e2e.ts +25 -0
  174. package/playground/integration-tests/vitest.config.ts +13 -0
  175. package/test/GUIDE.md +59 -0
  176. package/vitest.config.ts +5 -0
  177. package/dist/generated/asset_folders/client.gen.cjs +0 -10
  178. package/dist/generated/asset_folders/client.gen.cjs.map +0 -1
  179. package/dist/generated/asset_folders/client.gen.mjs +0 -10
  180. package/dist/generated/asset_folders/client.gen.mjs.map +0 -1
  181. package/dist/generated/asset_folders/sdk.gen.cjs +0 -99
  182. package/dist/generated/asset_folders/sdk.gen.cjs.map +0 -1
  183. package/dist/generated/asset_folders/sdk.gen.mjs +0 -95
  184. package/dist/generated/asset_folders/sdk.gen.mjs.map +0 -1
  185. package/dist/generated/asset_folders/types.gen.d.cts +0 -156
  186. package/dist/generated/asset_folders/types.gen.d.mts +0 -156
  187. package/dist/generated/assets/client.gen.cjs +0 -10
  188. package/dist/generated/assets/client.gen.cjs.map +0 -1
  189. package/dist/generated/assets/client.gen.mjs +0 -10
  190. package/dist/generated/assets/client.gen.mjs.map +0 -1
  191. package/dist/generated/assets/sdk.gen.cjs +0 -179
  192. package/dist/generated/assets/sdk.gen.cjs.map +0 -1
  193. package/dist/generated/assets/sdk.gen.mjs +0 -171
  194. package/dist/generated/assets/sdk.gen.mjs.map +0 -1
  195. package/dist/generated/assets/types.gen.d.cts +0 -415
  196. package/dist/generated/assets/types.gen.d.mts +0 -415
  197. package/dist/generated/component_folders/client.gen.cjs +0 -10
  198. package/dist/generated/component_folders/client.gen.cjs.map +0 -1
  199. package/dist/generated/component_folders/client.gen.mjs +0 -10
  200. package/dist/generated/component_folders/client.gen.mjs.map +0 -1
  201. package/dist/generated/component_folders/sdk.gen.cjs +0 -99
  202. package/dist/generated/component_folders/sdk.gen.cjs.map +0 -1
  203. package/dist/generated/component_folders/sdk.gen.mjs +0 -95
  204. package/dist/generated/component_folders/sdk.gen.mjs.map +0 -1
  205. package/dist/generated/component_folders/types.gen.d.cts +0 -118
  206. package/dist/generated/component_folders/types.gen.d.mts +0 -118
  207. package/dist/generated/components/client.gen.cjs +0 -10
  208. package/dist/generated/components/client.gen.cjs.map +0 -1
  209. package/dist/generated/components/client.gen.mjs +0 -10
  210. package/dist/generated/components/client.gen.mjs.map +0 -1
  211. package/dist/generated/components/sdk.gen.cjs +0 -171
  212. package/dist/generated/components/sdk.gen.cjs.map +0 -1
  213. package/dist/generated/components/sdk.gen.mjs +0 -163
  214. package/dist/generated/components/sdk.gen.mjs.map +0 -1
  215. package/dist/generated/components/types.gen.d.cts +0 -855
  216. package/dist/generated/components/types.gen.d.mts +0 -855
  217. package/dist/generated/datasource_entries/client.gen.cjs +0 -10
  218. package/dist/generated/datasource_entries/client.gen.cjs.map +0 -1
  219. package/dist/generated/datasource_entries/client.gen.mjs +0 -10
  220. package/dist/generated/datasource_entries/client.gen.mjs.map +0 -1
  221. package/dist/generated/datasource_entries/sdk.gen.cjs +0 -89
  222. package/dist/generated/datasource_entries/sdk.gen.cjs.map +0 -1
  223. package/dist/generated/datasource_entries/sdk.gen.mjs +0 -85
  224. package/dist/generated/datasource_entries/sdk.gen.mjs.map +0 -1
  225. package/dist/generated/datasource_entries/types.gen.d.cts +0 -156
  226. package/dist/generated/datasource_entries/types.gen.d.mts +0 -156
  227. package/dist/generated/datasources/client.gen.cjs +0 -10
  228. package/dist/generated/datasources/client.gen.cjs.map +0 -1
  229. package/dist/generated/datasources/client.gen.mjs +0 -10
  230. package/dist/generated/datasources/client.gen.mjs.map +0 -1
  231. package/dist/generated/datasources/sdk.gen.cjs +0 -89
  232. package/dist/generated/datasources/sdk.gen.cjs.map +0 -1
  233. package/dist/generated/datasources/sdk.gen.mjs +0 -85
  234. package/dist/generated/datasources/sdk.gen.mjs.map +0 -1
  235. package/dist/generated/datasources/types.gen.d.cts +0 -186
  236. package/dist/generated/datasources/types.gen.d.mts +0 -186
  237. package/dist/generated/experiments/client.gen.cjs +0 -10
  238. package/dist/generated/experiments/client.gen.cjs.map +0 -1
  239. package/dist/generated/experiments/client.gen.mjs +0 -10
  240. package/dist/generated/experiments/client.gen.mjs.map +0 -1
  241. package/dist/generated/experiments/sdk.gen.cjs +0 -298
  242. package/dist/generated/experiments/sdk.gen.cjs.map +0 -1
  243. package/dist/generated/experiments/sdk.gen.mjs +0 -283
  244. package/dist/generated/experiments/sdk.gen.mjs.map +0 -1
  245. package/dist/generated/experiments/types.gen.d.cts +0 -522
  246. package/dist/generated/experiments/types.gen.d.mts +0 -522
  247. package/dist/generated/internal_tags/client.gen.cjs +0 -10
  248. package/dist/generated/internal_tags/client.gen.cjs.map +0 -1
  249. package/dist/generated/internal_tags/client.gen.mjs +0 -10
  250. package/dist/generated/internal_tags/client.gen.mjs.map +0 -1
  251. package/dist/generated/internal_tags/sdk.gen.cjs +0 -74
  252. package/dist/generated/internal_tags/sdk.gen.cjs.map +0 -1
  253. package/dist/generated/internal_tags/sdk.gen.mjs +0 -71
  254. package/dist/generated/internal_tags/sdk.gen.mjs.map +0 -1
  255. package/dist/generated/internal_tags/types.gen.d.cts +0 -106
  256. package/dist/generated/internal_tags/types.gen.d.mts +0 -106
  257. package/dist/generated/presets/client.gen.cjs +0 -10
  258. package/dist/generated/presets/client.gen.cjs.map +0 -1
  259. package/dist/generated/presets/client.gen.mjs +0 -10
  260. package/dist/generated/presets/client.gen.mjs.map +0 -1
  261. package/dist/generated/presets/sdk.gen.cjs +0 -99
  262. package/dist/generated/presets/sdk.gen.cjs.map +0 -1
  263. package/dist/generated/presets/sdk.gen.mjs +0 -95
  264. package/dist/generated/presets/sdk.gen.mjs.map +0 -1
  265. package/dist/generated/presets/types.gen.d.cts +0 -176
  266. package/dist/generated/presets/types.gen.d.mts +0 -176
  267. package/dist/generated/shared/client/client.gen.cjs.map +0 -1
  268. package/dist/generated/shared/client/client.gen.mjs.map +0 -1
  269. package/dist/generated/shared/client/utils.gen.cjs.map +0 -1
  270. package/dist/generated/shared/client/utils.gen.mjs.map +0 -1
  271. package/dist/generated/shared/core/auth.gen.cjs.map +0 -1
  272. package/dist/generated/shared/core/auth.gen.mjs.map +0 -1
  273. package/dist/generated/shared/core/bodySerializer.gen.cjs.map +0 -1
  274. package/dist/generated/shared/core/bodySerializer.gen.mjs.map +0 -1
  275. package/dist/generated/shared/core/params.gen.cjs.map +0 -1
  276. package/dist/generated/shared/core/params.gen.mjs.map +0 -1
  277. package/dist/generated/shared/core/pathSerializer.gen.cjs.map +0 -1
  278. package/dist/generated/shared/core/pathSerializer.gen.mjs.map +0 -1
  279. package/dist/generated/shared/core/serverSentEvents.gen.cjs.map +0 -1
  280. package/dist/generated/shared/core/serverSentEvents.gen.mjs.map +0 -1
  281. package/dist/generated/shared/core/utils.gen.cjs.map +0 -1
  282. package/dist/generated/shared/core/utils.gen.mjs.map +0 -1
  283. package/dist/generated/spaces/client.gen.cjs +0 -10
  284. package/dist/generated/spaces/client.gen.cjs.map +0 -1
  285. package/dist/generated/spaces/client.gen.mjs +0 -10
  286. package/dist/generated/spaces/client.gen.mjs.map +0 -1
  287. package/dist/generated/spaces/sdk.gen.cjs +0 -99
  288. package/dist/generated/spaces/sdk.gen.cjs.map +0 -1
  289. package/dist/generated/spaces/sdk.gen.mjs +0 -95
  290. package/dist/generated/spaces/sdk.gen.mjs.map +0 -1
  291. package/dist/generated/spaces/types.gen.d.cts +0 -544
  292. package/dist/generated/spaces/types.gen.d.mts +0 -544
  293. package/dist/generated/stories/client.gen.cjs +0 -10
  294. package/dist/generated/stories/client.gen.cjs.map +0 -1
  295. package/dist/generated/stories/client.gen.mjs +0 -10
  296. package/dist/generated/stories/client.gen.mjs.map +0 -1
  297. package/dist/generated/stories/sdk.gen.cjs +0 -138
  298. package/dist/generated/stories/sdk.gen.cjs.map +0 -1
  299. package/dist/generated/stories/sdk.gen.mjs +0 -131
  300. package/dist/generated/stories/sdk.gen.mjs.map +0 -1
  301. package/dist/generated/stories/types.gen.d.cts +0 -1306
  302. package/dist/generated/stories/types.gen.d.mts +0 -1306
  303. package/dist/generated/users/client.gen.cjs +0 -10
  304. package/dist/generated/users/client.gen.cjs.map +0 -1
  305. package/dist/generated/users/client.gen.mjs +0 -10
  306. package/dist/generated/users/client.gen.mjs.map +0 -1
  307. package/dist/generated/users/sdk.gen.cjs +0 -44
  308. package/dist/generated/users/sdk.gen.cjs.map +0 -1
  309. package/dist/generated/users/sdk.gen.mjs +0 -43
  310. package/dist/generated/users/sdk.gen.mjs.map +0 -1
  311. package/dist/generated/users/types.gen.d.cts +0 -348
  312. package/dist/generated/users/types.gen.d.mts +0 -348
  313. package/dist/index.cjs.map +0 -1
  314. package/dist/index.mjs.map +0 -1
  315. package/dist/types.d.cts +0 -130
  316. package/dist/types.d.mts +0 -130
  317. /package/dist/generated/{shared → mapi}/client/client.gen.d.mts +0 -0
  318. /package/dist/generated/{shared → mapi}/client/index.cjs +0 -0
  319. /package/dist/generated/{shared → mapi}/client/index.d.mts +0 -0
  320. /package/dist/generated/{shared → mapi}/client/index.mjs +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"assets.cjs","names":["resolveSpaceId"],"sources":["../../src/resources/assets.ts"],"sourcesContent":["import * as assetsApi from '../generated/assets/sdk.gen';\nimport type {\n Asset,\n AssetSignRequest,\n AssetUpdate,\n BulkMoveData,\n BulkMoveResponses,\n BulkRestoreData,\n BulkRestoreResponses,\n DeleteManyData,\n DeleteManyResponses,\n DeleteResponses,\n FinalizeResponses,\n GetResponses,\n ListData,\n ListResponses,\n SignResponseObjectData,\n SignResponseObjectResponses,\n UpdateData,\n UpdateResponses,\n} from '../generated/assets/types.gen';\nimport type { ApiResponse, FetchOptions, MapiResourceDeps } from '../index';\nimport { resolveSpaceId, type SpaceIdPathOverride } from './shared';\n\n/**\n * Fields for initiating an asset upload. Pass this to `upload()`, `create()`,\n * or `update()` alongside a file buffer.\n *\n * Uses `short_filename` (e.g. `\"hero.png\"`) to clearly distinguish it from\n * `Asset.filename`, which is the full CDN URL assigned by Storyblok after upload.\n *\n * If you need to call the raw sign endpoint directly, use\n * `signResponseObject()` with `AssetSignRequest` instead.\n */\nexport interface AssetUploadRequest {\n /** The desired filename for the asset (e.g. `\"hero.png\"`). Corresponds to `Asset.short_filename`. */\n short_filename: string;\n /** When set, the upload replaces the file of an existing asset with this ID. */\n id?: AssetSignRequest['id'];\n /** Place the asset in this folder. */\n asset_folder_id?: AssetSignRequest['asset_folder_id'];\n /** Mark the asset as private (inaccessible without a signed URL). */\n is_private?: AssetSignRequest['is_private'];\n /** Image dimensions in `\"<width>x<height>\"` format (e.g. `\"400x500\"`). */\n size?: AssetSignRequest['size'];\n /** Set to `1` to enable server-side upload validation. */\n validate_upload?: AssetSignRequest['validate_upload'];\n}\n\n/**\n * Input for `create()`. Combines upload fields (`short_filename`,\n * `asset_folder_id`, etc.) with writable metadata (`alt`, `title`,\n * `copyright`, etc.). The file buffer is passed separately.\n */\nexport type AssetCreate = AssetUpdate & AssetUploadRequest;\n\n/** Uploads the file to S3 using the signed fields from step 1. */\nexport async function uploadToS3(\n signedResponse: { post_url?: string; fields?: Record<string, unknown> },\n file: Blob | ArrayBuffer,\n filename: string,\n): Promise<void> {\n if (!signedResponse.post_url || !signedResponse.fields) {\n throw new Error('Invalid signed response: missing post_url or fields');\n }\n const formData = new FormData();\n for (const [key, value] of Object.entries(signedResponse.fields)) {\n formData.append(key, value as string);\n }\n const contentType = (signedResponse.fields['Content-Type'] as string | undefined) ?? 'application/octet-stream';\n const blob = file instanceof Blob ? file : new Blob([file], { type: contentType });\n formData.append('file', new File([blob], filename, { type: contentType }));\n const response = await fetch(signedResponse.post_url, { method: 'POST', body: formData });\n if (!response.ok) {\n throw new Error(`Failed to upload asset to S3: ${response.statusText}`);\n }\n}\n\nexport function createAssetsResource(deps: MapiResourceDeps) {\n const { client, spaceId, wrapRequest } = deps;\n const getSpaceId = (path?: SpaceIdPathOverride['path']) => resolveSpaceId(spaceId, path);\n\n return {\n list<ThrowOnError extends boolean = false>(options: { query?: ListData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<ListResponses[200], ThrowOnError>> {\n const { query, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<ListResponses[200], ThrowOnError>(() =>\n assetsApi.list({ client, path: { space_id: resolvedSpaceId }, query, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Requests a signed response object (step 1 of the upload flow).\n * Returns the S3 `post_url` and form `fields` needed for the actual upload.\n *\n * In most cases, prefer `upload()` or `create()` which handle all three\n * steps automatically.\n */\n signResponseObject<ThrowOnError extends boolean = false>(options: { body: SignResponseObjectData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<SignResponseObjectResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<SignResponseObjectResponses[200], ThrowOnError>(() =>\n assetsApi.signResponseObject({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Uploads a file to Storyblok (sign → S3 upload → finalize) and returns\n * the resulting `Asset`.\n *\n * To also set metadata (alt, title, etc.) in one call, use `create()`.\n */\n async upload(options: { body: AssetUploadRequest; file: Blob | ArrayBuffer; signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<Asset> {\n const { body, file, signal, path, fetchOptions } = options;\n const { short_filename, ...rest } = body;\n const signBody: AssetSignRequest = { filename: short_filename, ...rest };\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n const signResult = await wrapRequest<SignResponseObjectResponses[200], true>(() =>\n assetsApi.signResponseObject({ client, path: { space_id: resolvedSpaceId }, body: signBody, signal, throwOnError: true, ...kyOpts }), true);\n\n if (!signResult.data.id) {\n throw new Error('Invalid signed response: missing id');\n }\n\n await uploadToS3(signResult.data, file, short_filename);\n\n await wrapRequest<FinalizeResponses[200], true>(() =>\n assetsApi.finalize({\n client,\n path: { space_id: resolvedSpaceId, signed_response_object_id: String(signResult.data.id) },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n const getResult = await wrapRequest<GetResponses[200], true>(() =>\n assetsApi.get({ client, path: { space_id: resolvedSpaceId, asset_id: Number(signResult.data.id) }, signal, throwOnError: true, ...kyOpts }), true);\n\n return getResult.data;\n },\n /**\n * Creates a new asset with metadata. Performs the full upload flow, then\n * applies any provided metadata (alt, title, copyright, etc.) in a\n * follow-up update call. Returns the resulting `Asset`.\n */\n async create(options: { body: AssetCreate; file: Blob | ArrayBuffer; signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<Asset> {\n const { body, file, signal, path, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n const asset = await this.upload({\n body: {\n short_filename: body.short_filename,\n asset_folder_id: body.asset_folder_id,\n is_private: body.is_private,\n size: body.size,\n validate_upload: body.validate_upload,\n },\n file,\n signal,\n path: { space_id: resolvedSpaceId },\n fetchOptions,\n });\n\n const { short_filename, asset_folder_id, is_private, size, validate_upload, ...metadata } = body;\n const hasMetadata = Object.values(metadata).some(v => v !== undefined && v !== null);\n if (hasMetadata) {\n await wrapRequest<UpdateResponses[204], true>(() =>\n assetsApi.update({\n client,\n path: { space_id: resolvedSpaceId, asset_id: asset.id },\n body: { asset: metadata },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n const updatedResult = await wrapRequest<GetResponses[200], true>(() =>\n assetsApi.get({ client, path: { space_id: resolvedSpaceId, asset_id: asset.id }, signal, throwOnError: true, ...kyOpts }), true);\n return updatedResult.data;\n }\n\n return asset;\n },\n get<ThrowOnError extends boolean = false>(assetId: number | string, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<GetResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<GetResponses[200], ThrowOnError>(() =>\n assetsApi.get({ client, path: { space_id: resolvedSpaceId, asset_id: assetId }, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Updates an asset's metadata. When `file` and `short_filename` are\n * provided, the file is replaced first (sign → S3 → finalize), then\n * metadata is updated.\n */\n async update(\n assetId: number | string,\n options: (\n | { body: UpdateData['body']; file?: undefined }\n | { body: UpdateData['body'] & { short_filename: string }; file: Blob | ArrayBuffer }\n ) & { signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride,\n ): Promise<void> {\n const { body, file, signal, path, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n if (file !== undefined) {\n const { short_filename, ...assetBody } = body;\n const signResult = await wrapRequest<SignResponseObjectResponses[200], true>(() =>\n assetsApi.signResponseObject({\n client,\n path: { space_id: resolvedSpaceId },\n body: { filename: short_filename, id: Number(assetId) },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n if (!signResult.data.id) {\n throw new Error('Invalid signed response: missing id');\n }\n\n await uploadToS3(signResult.data, file, short_filename);\n\n await wrapRequest<FinalizeResponses[200], true>(() =>\n assetsApi.finalize({\n client,\n path: { space_id: resolvedSpaceId, signed_response_object_id: String(signResult.data.id) },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n if (assetBody.asset && Object.keys(assetBody.asset).length > 0) {\n await wrapRequest<UpdateResponses[204], true>(() =>\n assetsApi.update({ client, path: { space_id: resolvedSpaceId, asset_id: assetId }, body: assetBody, signal, throwOnError: true, ...kyOpts }), true);\n }\n }\n else {\n await wrapRequest<UpdateResponses[204], true>(() =>\n assetsApi.update({ client, path: { space_id: resolvedSpaceId, asset_id: assetId }, body, signal, throwOnError: true, ...kyOpts }), true);\n }\n },\n delete<ThrowOnError extends boolean = false>(assetId: number | string, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<DeleteResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<DeleteResponses[200], ThrowOnError>(() =>\n assetsApi.delete_({ client, path: { space_id: resolvedSpaceId, asset_id: assetId }, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n finalize<ThrowOnError extends boolean = false>(signedResponseObjectId: string, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<FinalizeResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<FinalizeResponses[200], ThrowOnError>(() =>\n assetsApi.finalize({\n client,\n path: { space_id: resolvedSpaceId, signed_response_object_id: signedResponseObjectId },\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }), throwOnError);\n },\n deleteMany<ThrowOnError extends boolean = false>(options: { body: DeleteManyData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<DeleteManyResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<DeleteManyResponses[200], ThrowOnError>(() =>\n assetsApi.deleteMany({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n bulkMove<ThrowOnError extends boolean = false>(options: { body: BulkMoveData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<BulkMoveResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<BulkMoveResponses[200], ThrowOnError>(() =>\n assetsApi.bulkMove({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n bulkRestore<ThrowOnError extends boolean = false>(options: { body: BulkRestoreData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<BulkRestoreResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<BulkRestoreResponses[200], ThrowOnError>(() =>\n assetsApi.bulkRestore({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Converts a space-local asset into a shared (org-level) asset.\n *\n * Wraps `POST /v1/spaces/{space_id}/assets/{asset_id}/convert`, which takes\n * the destination folder as the required `target_asset_folder_id` query\n * param and no request body. One-way only (space to org).\n *\n * Not part of the generated SDK, so this issues a raw `client.post`.\n * The response is assumed to match `Asset`.\n */\n convertToShared<ThrowOnError extends boolean = false>(\n assetId: number | string,\n options: { query: { target_asset_folder_id: number }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride,\n ): Promise<ApiResponse<Asset, ThrowOnError>> {\n const { query, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<Asset, ThrowOnError>(() =>\n client.post({\n url: '/v1/spaces/{space_id}/assets/{asset_id}/convert',\n path: { space_id: resolvedSpaceId, asset_id: assetId },\n query,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }), throwOnError);\n },\n };\n}\n"],"mappings":";;;;;AAyDA,eAAsB,WACpB,gBACA,MACA,UACe;AACf,KAAI,CAAC,eAAe,YAAY,CAAC,eAAe,OAC9C,OAAM,IAAI,MAAM,sDAAsD;CAExE,MAAM,WAAW,IAAI,UAAU;AAC/B,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,eAAe,OAAO,CAC9D,UAAS,OAAO,KAAK,MAAgB;CAEvC,MAAM,cAAe,eAAe,OAAO,mBAA0C;CACrF,MAAM,OAAO,gBAAgB,OAAO,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,aAAa,CAAC;AAClF,UAAS,OAAO,QAAQ,IAAI,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC,CAAC;CAC1E,MAAM,WAAW,MAAM,MAAM,eAAe,UAAU;EAAE,QAAQ;EAAQ,MAAM;EAAU,CAAC;AACzF,KAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,iCAAiC,SAAS,aAAa;;AAI3E,SAAgB,qBAAqB,MAAwB;CAC3D,MAAM,EAAE,QAAQ,SAAS,gBAAgB;CACzC,MAAM,cAAc,SAAuCA,8BAAe,SAAS,KAAK;AAExF,QAAO;EACL,KAA2C,UAA+I,EAAE,EAA0D;GACpP,MAAM,EAAE,OAAO,QAAQ,MAAM,cAAc,iBAAiB;GAC5D,MAAM,kBAAkB,WAAW,KAAK;AACxC,UAAO,uCACU;IAAE;IAAQ,MAAM,EAAE,UAAU,iBAAiB;IAAE;IAAO;IAAQ,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IAAG,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAAG,CAAC,EAAE,aAAa;;EASxP,mBAAyD,SAA+N;GACtR,MAAM,EAAE,MAAM,QAAQ,MAAM,cAAc,iBAAiB;GAC3D,MAAM,kBAAkB,WAAW,KAAK;AACxC,UAAO,qDACwB;IAAE;IAAQ,MAAM,EAAE,UAAU,iBAAiB;IAAE;IAAM;IAAQ,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IAAG,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAAG,CAAC,EAAE,aAAa;;EAQrQ,MAAM,OAAO,SAA0J;GACrK,MAAM,EAAE,MAAM,MAAM,QAAQ,MAAM,iBAAiB;GACnD,MAAM,EAAE,gBAAgB,GAAG,SAAS;GACpC,MAAM,WAA6B;IAAE,UAAU;IAAgB,GAAG;IAAM;GACxE,MAAM,kBAAkB,WAAW,KAAK;GACxC,MAAM,SAAS,eAAe,EAAE,WAAW;IAAE,GAAG,OAAO,WAAW,CAAC;IAAW,GAAG;IAAc,EAAE,GAAG,EAAE;GAEtG,MAAM,aAAa,MAAM,qDACM;IAAE;IAAQ,MAAM,EAAE,UAAU,iBAAiB;IAAE,MAAM;IAAU;IAAQ,cAAc;IAAM,GAAG;IAAQ,CAAC,EAAE,KAAK;AAE7I,OAAI,CAAC,WAAW,KAAK,GACnB,OAAM,IAAI,MAAM,sCAAsC;AAGxD,SAAM,WAAW,WAAW,MAAM,MAAM,eAAe;AAEvD,SAAM,2CACe;IACjB;IACA,MAAM;KAAE,UAAU;KAAiB,2BAA2B,OAAO,WAAW,KAAK,GAAG;KAAE;IAC1F;IACA,cAAc;IACd,GAAG;IACJ,CAAC,EAAE,KAAK;AAKX,WAHkB,MAAM,sCACR;IAAE;IAAQ,MAAM;KAAE,UAAU;KAAiB,UAAU,OAAO,WAAW,KAAK,GAAG;KAAE;IAAE;IAAQ,cAAc;IAAM,GAAG;IAAQ,CAAC,EAAE,KAAK,EAEnI;;EAOnB,MAAM,OAAO,SAAmJ;GAC9J,MAAM,EAAE,MAAM,MAAM,QAAQ,MAAM,iBAAiB;GACnD,MAAM,kBAAkB,WAAW,KAAK;GACxC,MAAM,SAAS,eAAe,EAAE,WAAW;IAAE,GAAG,OAAO,WAAW,CAAC;IAAW,GAAG;IAAc,EAAE,GAAG,EAAE;GAEtG,MAAM,QAAQ,MAAM,KAAK,OAAO;IAC9B,MAAM;KACJ,gBAAgB,KAAK;KACrB,iBAAiB,KAAK;KACtB,YAAY,KAAK;KACjB,MAAM,KAAK;KACX,iBAAiB,KAAK;KACvB;IACD;IACA;IACA,MAAM,EAAE,UAAU,iBAAiB;IACnC;IACD,CAAC;GAEF,MAAM,EAAE,gBAAgB,iBAAiB,YAAY,MAAM,iBAAiB,GAAG,aAAa;AAE5F,OADoB,OAAO,OAAO,SAAS,CAAC,MAAK,MAAK,MAAM,UAAa,MAAM,KAAK,EACnE;AACf,UAAM,yCACa;KACf;KACA,MAAM;MAAE,UAAU;MAAiB,UAAU,MAAM;MAAI;KACvD,MAAM,EAAE,OAAO,UAAU;KACzB;KACA,cAAc;KACd,GAAG;KACJ,CAAC,EAAE,KAAK;AAGX,YAFsB,MAAM,sCACZ;KAAE;KAAQ,MAAM;MAAE,UAAU;MAAiB,UAAU,MAAM;MAAI;KAAE;KAAQ,cAAc;KAAM,GAAG;KAAQ,CAAC,EAAE,KAAK,EAC7G;;AAGvB,UAAO;;EAET,IAA0C,SAA0B,UAAoH,EAAE,EAAyD;GACjP,MAAM,EAAE,QAAQ,MAAM,cAAc,iBAAiB;GACrD,MAAM,kBAAkB,WAAW,KAAK;AACxC,UAAO,sCACS;IAAE;IAAQ,MAAM;KAAE,UAAU;KAAiB,UAAU;KAAS;IAAE;IAAQ,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IAAG,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAAG,CAAC,EAAE,aAAa;;EAOnQ,MAAM,OACJ,SACA,SAIe;GACf,MAAM,EAAE,MAAM,MAAM,QAAQ,MAAM,iBAAiB;GACnD,MAAM,kBAAkB,WAAW,KAAK;GACxC,MAAM,SAAS,eAAe,EAAE,WAAW;IAAE,GAAG,OAAO,WAAW,CAAC;IAAW,GAAG;IAAc,EAAE,GAAG,EAAE;AAEtG,OAAI,SAAS,QAAW;IACtB,MAAM,EAAE,gBAAgB,GAAG,cAAc;IACzC,MAAM,aAAa,MAAM,qDACM;KAC3B;KACA,MAAM,EAAE,UAAU,iBAAiB;KACnC,MAAM;MAAE,UAAU;MAAgB,IAAI,OAAO,QAAQ;MAAE;KACvD;KACA,cAAc;KACd,GAAG;KACJ,CAAC,EAAE,KAAK;AAEX,QAAI,CAAC,WAAW,KAAK,GACnB,OAAM,IAAI,MAAM,sCAAsC;AAGxD,UAAM,WAAW,WAAW,MAAM,MAAM,eAAe;AAEvD,UAAM,2CACe;KACjB;KACA,MAAM;MAAE,UAAU;MAAiB,2BAA2B,OAAO,WAAW,KAAK,GAAG;MAAE;KAC1F;KACA,cAAc;KACd,GAAG;KACJ,CAAC,EAAE,KAAK;AAEX,QAAI,UAAU,SAAS,OAAO,KAAK,UAAU,MAAM,CAAC,SAAS,EAC3D,OAAM,yCACa;KAAE;KAAQ,MAAM;MAAE,UAAU;MAAiB,UAAU;MAAS;KAAE,MAAM;KAAW;KAAQ,cAAc;KAAM,GAAG;KAAQ,CAAC,EAAE,KAAK;SAIvJ,OAAM,yCACa;IAAE;IAAQ,MAAM;KAAE,UAAU;KAAiB,UAAU;KAAS;IAAE;IAAM;IAAQ,cAAc;IAAM,GAAG;IAAQ,CAAC,EAAE,KAAK;;EAG9I,OAA6C,SAA0B,UAAoH,EAAE,EAA4D;GACvP,MAAM,EAAE,QAAQ,MAAM,cAAc,iBAAiB;GACrD,MAAM,kBAAkB,WAAW,KAAK;AACxC,UAAO,0CACa;IAAE;IAAQ,MAAM;KAAE,UAAU;KAAiB,UAAU;KAAS;IAAE;IAAQ,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IAAG,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAAG,CAAC,EAAE,aAAa;;EAEvQ,SAA+C,wBAAgC,UAAoH,EAAE,EAA8D;GACjQ,MAAM,EAAE,QAAQ,MAAM,cAAc,iBAAiB;GACrD,MAAM,kBAAkB,WAAW,KAAK;AACxC,UAAO,2CACc;IACjB;IACA,MAAM;KAAE,UAAU;KAAiB,2BAA2B;KAAwB;IACtF;IACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IACtD,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAC5F,CAAC,EAAE,aAAa;;EAErB,WAAiD,SAA+M;GAC9P,MAAM,EAAE,MAAM,QAAQ,MAAM,cAAc,iBAAiB;GAC3D,MAAM,kBAAkB,WAAW,KAAK;AACxC,UAAO,6CACgB;IAAE;IAAQ,MAAM,EAAE,UAAU,iBAAiB;IAAE;IAAM;IAAQ,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IAAG,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAAG,CAAC,EAAE,aAAa;;EAE7P,SAA+C,SAA2M;GACxP,MAAM,EAAE,MAAM,QAAQ,MAAM,cAAc,iBAAiB;GAC3D,MAAM,kBAAkB,WAAW,KAAK;AACxC,UAAO,2CACc;IAAE;IAAQ,MAAM,EAAE,UAAU,iBAAiB;IAAE;IAAM;IAAQ,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IAAG,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAAG,CAAC,EAAE,aAAa;;EAE3P,YAAkD,SAAiN;GACjQ,MAAM,EAAE,MAAM,QAAQ,MAAM,cAAc,iBAAiB;GAC3D,MAAM,kBAAkB,WAAW,KAAK;AACxC,UAAO,8CACiB;IAAE;IAAQ,MAAM,EAAE,UAAU,iBAAiB;IAAE;IAAM;IAAQ,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IAAG,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAAG,CAAC,EAAE,aAAa;;EAY9P,gBACE,SACA,SAC2C;GAC3C,MAAM,EAAE,OAAO,QAAQ,MAAM,cAAc,iBAAiB;GAC5D,MAAM,kBAAkB,WAAW,KAAK;AACxC,UAAO,kBACL,OAAO,KAAK;IACV,KAAK;IACL,MAAM;KAAE,UAAU;KAAiB,UAAU;KAAS;IACtD;IACA;IACA,GAAI,iBAAiB,SAAY,EAAE,GAAG,EAAE,cAAc;IACtD,GAAI,eAAe,EAAE,WAAW;KAAE,GAAG,OAAO,WAAW,CAAC;KAAW,GAAG;KAAc,EAAE,GAAG,EAAE;IAC5F,CAAC,EAAE,aAAa;;EAEtB"}
1
+ {"version":3,"file":"assets.cjs","names":["ClientError","resolveSpaceId"],"sources":["../../src/resources/assets.ts"],"sourcesContent":["import * as mapi from '../generated/mapi/sdk.gen';\nimport type {\n BulkDestroyAssetsData,\n BulkDestroyAssetsResponses,\n BulkRestoreAssetsData,\n BulkRestoreAssetsResponses,\n BulkUpdateAssetsData,\n BulkUpdateAssetsResponses,\n CreateAssetData,\n CreateAssetResponses,\n DeleteAssetResponses,\n FinishAssetUploadResponses,\n GetAssetResponses,\n ListAssetsData,\n ListAssetsResponses,\n UpdateAssetData,\n UpdateAssetResponses,\n} from '../generated/mapi/types.gen';\nimport type { Asset } from '../generated/mapi/types-aliased.gen';\nimport type { ApiResponse, FetchOptions, MapiResourceDeps } from '../client';\nimport { ClientError } from '../error';\nimport { resolveSpaceId, type SpaceIdPathOverride } from './shared';\n\nexport type AssetListQuery = NonNullable<ListAssetsData['query']>;\n\n/**\n * Return shape of `list()`.\n *\n * The list endpoint serializes rows with MAPI's `IndexAsset` serializer, which\n * is NOT identical to the `ShowAsset` (= `Asset`) shape returned by `get()`:\n * `IndexAsset` omits `file` and `permanently_deleted`. We deliberately surface\n * list rows as `Asset` so consumers work against a single asset type. The lie:\n * `file`/`permanently_deleted` are absent on list rows at runtime — consumers\n * needing those must re-fetch via `get()`.\n */\nexport type ListAssetsResult = Omit<ListAssetsResponses[200], 'assets'> & { assets: Array<Asset> };\n\n/**\n * Fields for initiating an asset upload. Pass this to `upload()` or `create()`\n * alongside a file buffer.\n */\nexport type AssetUploadRequest = {\n /** The desired filename for the asset (e.g. `\"hero.png\"`). */\n short_filename: string;\n} & Partial<Omit<NonNullable<CreateAssetData['query']>, 'filename'>>;\n\n/**\n * Input for `create()`. Combines upload fields with writable metadata.\n */\nexport type AssetCreate = AssetUploadRequest & NonNullable<UpdateAssetData['body']['asset']>;\n\n/** Uploads the file to S3 using the signed fields from step 1. */\nexport async function uploadToS3(\n signedResponse: { post_url?: string; fields?: Record<string, unknown> },\n file: Blob | ArrayBuffer,\n filename: string,\n): Promise<void> {\n if (!signedResponse.post_url || !signedResponse.fields) {\n throw new ClientError('Invalid signed response: missing post_url or fields', {\n status: 0,\n statusText: 'Invalid signed response',\n data: signedResponse,\n });\n }\n const formData = new FormData();\n for (const [key, value] of Object.entries(signedResponse.fields)) {\n formData.append(key, value as string);\n }\n const contentType = (signedResponse.fields['Content-Type'] as string | undefined) ?? 'application/octet-stream';\n const blob = file instanceof Blob ? file : new Blob([file], { type: contentType });\n formData.append('file', new File([blob], filename, { type: contentType }));\n const response = await fetch(signedResponse.post_url, { method: 'POST', body: formData });\n if (!response.ok) {\n throw new ClientError(`Failed to upload asset to S3: ${response.statusText}`, {\n status: response.status,\n statusText: response.statusText,\n data: undefined,\n });\n }\n}\n\nconst hasDefinedFields = (value: Record<string, unknown> | undefined): boolean =>\n Object.values(value ?? {}).some(v => v !== undefined && v !== null);\n\nexport function createAssetsResource<DefaultThrowOnError extends boolean = false>(deps: MapiResourceDeps<DefaultThrowOnError>) {\n const { client, spaceId, wrapRequest } = deps;\n const getSpaceId = (path?: SpaceIdPathOverride['path']) => resolveSpaceId(spaceId, path);\n\n return {\n list<ThrowOnError extends boolean = DefaultThrowOnError>(options: { query?: ListAssetsData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<ListAssetsResult, ThrowOnError>> {\n const { query, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n // `listAssets` returns `IndexAsset` rows; we present them as `Asset` (see `ListAssetsResult`).\n return wrapRequest<ListAssetsResult, ThrowOnError>(() =>\n mapi.listAssets({ client, path: { space_id: resolvedSpaceId }, query, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Step 1 of the upload flow: requests a signed S3 upload object from MAPI.\n * Returns the S3 `post_url` and form `fields` needed for the actual upload.\n *\n * In most cases, prefer `upload()` or `create()` which handle all three\n * steps automatically.\n */\n signResponseObject<ThrowOnError extends boolean = DefaultThrowOnError>(options: { query: CreateAssetData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<CreateAssetResponses[200], ThrowOnError>> {\n const { query, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<CreateAssetResponses[200], ThrowOnError>(() =>\n mapi.createAsset({ client, path: { space_id: resolvedSpaceId }, query, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Uploads a file to Storyblok (sign → S3 upload → finish) and returns the\n * resulting `Asset`.\n */\n async upload(options: { body: AssetUploadRequest; file: Blob | ArrayBuffer; signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<Asset> {\n const { body, file, signal, path, fetchOptions } = options;\n const { short_filename, ...rest } = body;\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n const signResult = await wrapRequest<CreateAssetResponses[200], true>(() =>\n mapi.createAsset({ client, path: { space_id: resolvedSpaceId }, query: { filename: short_filename, ...rest }, signal, throwOnError: true, ...kyOpts }), true);\n\n if (!signResult.data.id) {\n throw new Error('Invalid signed response: missing id');\n }\n\n await uploadToS3(signResult.data, file, short_filename);\n\n await wrapRequest<FinishAssetUploadResponses[200], true>(() =>\n mapi.finishAssetUpload({\n client,\n path: { space_id: resolvedSpaceId, id: Number(signResult.data.id) },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n const getResult = await wrapRequest<GetAssetResponses[200], true>(() =>\n mapi.getAsset({ client, path: { space_id: resolvedSpaceId, id: Number(signResult.data.id) }, signal, throwOnError: true, ...kyOpts }), true);\n\n return getResult.data;\n },\n /**\n * Creates a new asset with metadata. Performs the full upload flow then\n * applies any provided metadata in a follow-up update call.\n */\n async create(options: { body: AssetCreate; file: Blob | ArrayBuffer; signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<Asset> {\n const { body, file, signal, path, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n const { short_filename, asset_folder_id, is_private, size, validate_upload, ext_id, ...metadataOnly } = body;\n const asset = await this.upload({\n body: { short_filename, asset_folder_id, is_private, size, validate_upload, ext_id },\n file,\n signal,\n path: { space_id: resolvedSpaceId },\n fetchOptions,\n });\n\n const hasMetadata = Object.values(metadataOnly).some(v => v !== undefined && v !== null);\n if (hasMetadata) {\n await wrapRequest<UpdateAssetResponses[204], true>(() =>\n mapi.updateAsset({\n client,\n path: { space_id: resolvedSpaceId, id: asset.id! },\n body: { asset: metadataOnly },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n const updatedResult = await wrapRequest<GetAssetResponses[200], true>(() =>\n mapi.getAsset({ client, path: { space_id: resolvedSpaceId, id: asset.id! }, signal, throwOnError: true, ...kyOpts }), true);\n return updatedResult.data;\n }\n\n return asset;\n },\n get<ThrowOnError extends boolean = DefaultThrowOnError>(assetId: number, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<GetAssetResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<GetAssetResponses[200], ThrowOnError>(() =>\n mapi.getAsset({ client, path: { space_id: resolvedSpaceId, id: assetId }, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Updates an asset's metadata. When `file` and `body.short_filename` are\n * provided, the file is replaced first (sign → S3 → finish), then metadata\n * is updated.\n */\n async update(\n assetId: number,\n options: (\n | { body: UpdateAssetData['body']; file?: undefined }\n | { body: UpdateAssetData['body'] & { short_filename: string }; file: Blob | ArrayBuffer }\n ) & { signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride,\n ): Promise<void> {\n const { body, file, signal, path, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n if (file !== undefined) {\n const { short_filename, ...assetBody } = body;\n const signResult = await wrapRequest<CreateAssetResponses[200], true>(() =>\n mapi.createAsset({\n client,\n path: { space_id: resolvedSpaceId },\n query: { filename: short_filename },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n if (!signResult.data.id) {\n throw new Error('Invalid signed response: missing id');\n }\n\n await uploadToS3(signResult.data, file, short_filename);\n\n await wrapRequest<FinishAssetUploadResponses[200], true>(() =>\n mapi.finishAssetUpload({\n client,\n path: { space_id: resolvedSpaceId, id: Number(signResult.data.id) },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n if (hasDefinedFields(assetBody.asset)) {\n await wrapRequest<UpdateAssetResponses[204], true>(() =>\n mapi.updateAsset({ client, path: { space_id: resolvedSpaceId, id: assetId }, body: assetBody, signal, throwOnError: true, ...kyOpts }), true);\n }\n }\n else {\n await wrapRequest<UpdateAssetResponses[204], true>(() =>\n mapi.updateAsset({ client, path: { space_id: resolvedSpaceId, id: assetId }, body, signal, throwOnError: true, ...kyOpts }), true);\n }\n },\n delete<ThrowOnError extends boolean = DefaultThrowOnError>(assetId: number, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<DeleteAssetResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<DeleteAssetResponses[200], ThrowOnError>(() =>\n mapi.deleteAsset({ client, path: { space_id: resolvedSpaceId, id: assetId }, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n finalize<ThrowOnError extends boolean = DefaultThrowOnError>(assetId: number, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<FinishAssetUploadResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<FinishAssetUploadResponses[200], ThrowOnError>(() =>\n mapi.finishAssetUpload({\n client,\n path: { space_id: resolvedSpaceId, id: assetId },\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }), throwOnError);\n },\n /** POST /assets/bulk_destroy: hard-delete many assets in one call. */\n deleteMany<ThrowOnError extends boolean = DefaultThrowOnError>(options: { body: BulkDestroyAssetsData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<BulkDestroyAssetsResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<BulkDestroyAssetsResponses[200], ThrowOnError>(() =>\n mapi.bulkDestroyAssets({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /** POST /assets/bulk_update: move many assets between folders in one call. */\n bulkMove<ThrowOnError extends boolean = DefaultThrowOnError>(options: { body: BulkUpdateAssetsData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<BulkUpdateAssetsResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<BulkUpdateAssetsResponses[200], ThrowOnError>(() =>\n mapi.bulkUpdateAssets({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n bulkRestore<ThrowOnError extends boolean = DefaultThrowOnError>(options: { body: BulkRestoreAssetsData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<BulkRestoreAssetsResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<BulkRestoreAssetsResponses[200], ThrowOnError>(() =>\n mapi.bulkRestoreAssets({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Converts a space-local asset into a shared (org-level) asset.\n *\n * Wraps `POST /v1/spaces/{space_id}/assets/{asset_id}/convert`, which takes\n * the destination folder as the required `target_asset_folder_id` query\n * param and no request body. One-way only (space to org).\n *\n * Not part of the generated SDK, so this issues a raw `client.post`.\n * The response is assumed to match `Asset`.\n */\n convertToShared<ThrowOnError extends boolean = false>(\n assetId: number | string,\n options: { query: { target_asset_folder_id: number }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride,\n ): Promise<ApiResponse<Asset, ThrowOnError>> {\n const { query, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<Asset, ThrowOnError>(() =>\n client.post({\n url: '/v1/spaces/{space_id}/assets/{asset_id}/convert',\n path: { space_id: resolvedSpaceId, asset_id: assetId },\n query,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }), throwOnError);\n },\n };\n}\n"],"mappings":"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"}
@@ -1,36 +1,32 @@
1
- import { AssetSignRequest, AssetUpdate } from "../generated/assets/types.gen.cjs";
1
+ import { CreateAssetData, ListAssetsData, ListAssetsResponses, UpdateAssetData } from "../generated/mapi/types.gen.cjs";
2
+ import { Asset } from "../generated/mapi/types-aliased.gen.cjs";
2
3
 
3
4
  //#region src/resources/assets.d.ts
5
+ type AssetListQuery = NonNullable<ListAssetsData['query']>;
4
6
  /**
5
- * Fields for initiating an asset upload. Pass this to `upload()`, `create()`,
6
- * or `update()` alongside a file buffer.
7
+ * Return shape of `list()`.
7
8
  *
8
- * Uses `short_filename` (e.g. `"hero.png"`) to clearly distinguish it from
9
- * `Asset.filename`, which is the full CDN URL assigned by Storyblok after upload.
10
- *
11
- * If you need to call the raw sign endpoint directly, use
12
- * `signResponseObject()` with `AssetSignRequest` instead.
9
+ * The list endpoint serializes rows with MAPI's `IndexAsset` serializer, which
10
+ * is NOT identical to the `ShowAsset` (= `Asset`) shape returned by `get()`:
11
+ * `IndexAsset` omits `file` and `permanently_deleted`. We deliberately surface
12
+ * list rows as `Asset` so consumers work against a single asset type. The lie:
13
+ * `file`/`permanently_deleted` are absent on list rows at runtime — consumers
14
+ * needing those must re-fetch via `get()`.
15
+ */
16
+ type ListAssetsResult = Omit<ListAssetsResponses[200], 'assets'> & {
17
+ assets: Array<Asset>;
18
+ };
19
+ /**
20
+ * Fields for initiating an asset upload. Pass this to `upload()` or `create()`
21
+ * alongside a file buffer.
13
22
  */
14
- interface AssetUploadRequest {
15
- /** The desired filename for the asset (e.g. `"hero.png"`). Corresponds to `Asset.short_filename`. */
16
- short_filename: string;
17
- /** When set, the upload replaces the file of an existing asset with this ID. */
18
- id?: AssetSignRequest['id'];
19
- /** Place the asset in this folder. */
20
- asset_folder_id?: AssetSignRequest['asset_folder_id'];
21
- /** Mark the asset as private (inaccessible without a signed URL). */
22
- is_private?: AssetSignRequest['is_private'];
23
- /** Image dimensions in `"<width>x<height>"` format (e.g. `"400x500"`). */
24
- size?: AssetSignRequest['size'];
25
- /** Set to `1` to enable server-side upload validation. */
26
- validate_upload?: AssetSignRequest['validate_upload'];
27
- }
23
+ type AssetUploadRequest = {
24
+ /** The desired filename for the asset (e.g. `"hero.png"`). */short_filename: string;
25
+ } & Partial<Omit<NonNullable<CreateAssetData['query']>, 'filename'>>;
28
26
  /**
29
- * Input for `create()`. Combines upload fields (`short_filename`,
30
- * `asset_folder_id`, etc.) with writable metadata (`alt`, `title`,
31
- * `copyright`, etc.). The file buffer is passed separately.
27
+ * Input for `create()`. Combines upload fields with writable metadata.
32
28
  */
33
- type AssetCreate = AssetUpdate & AssetUploadRequest;
29
+ type AssetCreate = AssetUploadRequest & NonNullable<UpdateAssetData['body']['asset']>;
34
30
  //#endregion
35
- export { AssetCreate, AssetUploadRequest };
31
+ export { AssetCreate, AssetListQuery, AssetUploadRequest, ListAssetsResult };
36
32
  //# sourceMappingURL=assets.d.cts.map
@@ -1,35 +1,31 @@
1
- import { AssetSignRequest, AssetUpdate } from "../generated/assets/types.gen.mjs";
1
+ import { CreateAssetData, ListAssetsData, ListAssetsResponses, UpdateAssetData } from "../generated/mapi/types.gen.mjs";
2
+ import { Asset } from "../generated/mapi/types-aliased.gen.mjs";
2
3
  //#region src/resources/assets.d.ts
4
+ type AssetListQuery = NonNullable<ListAssetsData['query']>;
3
5
  /**
4
- * Fields for initiating an asset upload. Pass this to `upload()`, `create()`,
5
- * or `update()` alongside a file buffer.
6
+ * Return shape of `list()`.
6
7
  *
7
- * Uses `short_filename` (e.g. `"hero.png"`) to clearly distinguish it from
8
- * `Asset.filename`, which is the full CDN URL assigned by Storyblok after upload.
9
- *
10
- * If you need to call the raw sign endpoint directly, use
11
- * `signResponseObject()` with `AssetSignRequest` instead.
8
+ * The list endpoint serializes rows with MAPI's `IndexAsset` serializer, which
9
+ * is NOT identical to the `ShowAsset` (= `Asset`) shape returned by `get()`:
10
+ * `IndexAsset` omits `file` and `permanently_deleted`. We deliberately surface
11
+ * list rows as `Asset` so consumers work against a single asset type. The lie:
12
+ * `file`/`permanently_deleted` are absent on list rows at runtime — consumers
13
+ * needing those must re-fetch via `get()`.
14
+ */
15
+ type ListAssetsResult = Omit<ListAssetsResponses[200], 'assets'> & {
16
+ assets: Array<Asset>;
17
+ };
18
+ /**
19
+ * Fields for initiating an asset upload. Pass this to `upload()` or `create()`
20
+ * alongside a file buffer.
12
21
  */
13
- interface AssetUploadRequest {
14
- /** The desired filename for the asset (e.g. `"hero.png"`). Corresponds to `Asset.short_filename`. */
15
- short_filename: string;
16
- /** When set, the upload replaces the file of an existing asset with this ID. */
17
- id?: AssetSignRequest['id'];
18
- /** Place the asset in this folder. */
19
- asset_folder_id?: AssetSignRequest['asset_folder_id'];
20
- /** Mark the asset as private (inaccessible without a signed URL). */
21
- is_private?: AssetSignRequest['is_private'];
22
- /** Image dimensions in `"<width>x<height>"` format (e.g. `"400x500"`). */
23
- size?: AssetSignRequest['size'];
24
- /** Set to `1` to enable server-side upload validation. */
25
- validate_upload?: AssetSignRequest['validate_upload'];
26
- }
22
+ type AssetUploadRequest = {
23
+ /** The desired filename for the asset (e.g. `"hero.png"`). */short_filename: string;
24
+ } & Partial<Omit<NonNullable<CreateAssetData['query']>, 'filename'>>;
27
25
  /**
28
- * Input for `create()`. Combines upload fields (`short_filename`,
29
- * `asset_folder_id`, etc.) with writable metadata (`alt`, `title`,
30
- * `copyright`, etc.). The file buffer is passed separately.
26
+ * Input for `create()`. Combines upload fields with writable metadata.
31
27
  */
32
- type AssetCreate = AssetUpdate & AssetUploadRequest;
28
+ type AssetCreate = AssetUploadRequest & NonNullable<UpdateAssetData['body']['asset']>;
33
29
  //#endregion
34
- export { AssetCreate, AssetUploadRequest };
30
+ export { AssetCreate, AssetListQuery, AssetUploadRequest, ListAssetsResult };
35
31
  //# sourceMappingURL=assets.d.mts.map
@@ -1,10 +1,15 @@
1
+ import { ClientError } from "../error.mjs";
2
+ import { bulkDestroyAssets, bulkRestoreAssets, bulkUpdateAssets, createAsset, deleteAsset, finishAssetUpload, getAsset, listAssets, updateAsset } from "../generated/mapi/sdk.gen.mjs";
1
3
  import { resolveSpaceId } from "./shared.mjs";
2
- import { bulkMove, bulkRestore, deleteMany, delete_, finalize, get, list, signResponseObject, update } from "../generated/assets/sdk.gen.mjs";
3
4
 
4
5
  //#region src/resources/assets.ts
5
6
  /** Uploads the file to S3 using the signed fields from step 1. */
6
7
  async function uploadToS3(signedResponse, file, filename) {
7
- if (!signedResponse.post_url || !signedResponse.fields) throw new Error("Invalid signed response: missing post_url or fields");
8
+ if (!signedResponse.post_url || !signedResponse.fields) throw new ClientError("Invalid signed response: missing post_url or fields", {
9
+ status: 0,
10
+ statusText: "Invalid signed response",
11
+ data: signedResponse
12
+ });
8
13
  const formData = new FormData();
9
14
  for (const [key, value] of Object.entries(signedResponse.fields)) formData.append(key, value);
10
15
  const contentType = signedResponse.fields["Content-Type"] ?? "application/octet-stream";
@@ -14,8 +19,13 @@ async function uploadToS3(signedResponse, file, filename) {
14
19
  method: "POST",
15
20
  body: formData
16
21
  });
17
- if (!response.ok) throw new Error(`Failed to upload asset to S3: ${response.statusText}`);
22
+ if (!response.ok) throw new ClientError(`Failed to upload asset to S3: ${response.statusText}`, {
23
+ status: response.status,
24
+ statusText: response.statusText,
25
+ data: void 0
26
+ });
18
27
  }
28
+ const hasDefinedFields = (value) => Object.values(value ?? {}).some((v) => v !== void 0 && v !== null);
19
29
  function createAssetsResource(deps) {
20
30
  const { client, spaceId, wrapRequest } = deps;
21
31
  const getSpaceId = (path) => resolveSpaceId(spaceId, path);
@@ -23,7 +33,7 @@ function createAssetsResource(deps) {
23
33
  list(options = {}) {
24
34
  const { query, signal, path, throwOnError, fetchOptions } = options;
25
35
  const resolvedSpaceId = getSpaceId(path);
26
- return wrapRequest(() => list({
36
+ return wrapRequest(() => listAssets({
27
37
  client,
28
38
  path: { space_id: resolvedSpaceId },
29
39
  query,
@@ -36,12 +46,12 @@ function createAssetsResource(deps) {
36
46
  }), throwOnError);
37
47
  },
38
48
  signResponseObject(options) {
39
- const { body, signal, path, throwOnError, fetchOptions } = options;
49
+ const { query, signal, path, throwOnError, fetchOptions } = options;
40
50
  const resolvedSpaceId = getSpaceId(path);
41
- return wrapRequest(() => signResponseObject({
51
+ return wrapRequest(() => createAsset({
42
52
  client,
43
53
  path: { space_id: resolvedSpaceId },
44
- body,
54
+ query,
45
55
  signal,
46
56
  ...throwOnError === void 0 ? {} : { throwOnError },
47
57
  ...fetchOptions ? { kyOptions: {
@@ -53,40 +63,39 @@ function createAssetsResource(deps) {
53
63
  async upload(options) {
54
64
  const { body, file, signal, path, fetchOptions } = options;
55
65
  const { short_filename, ...rest } = body;
56
- const signBody = {
57
- filename: short_filename,
58
- ...rest
59
- };
60
66
  const resolvedSpaceId = getSpaceId(path);
61
67
  const kyOpts = fetchOptions ? { kyOptions: {
62
68
  ...client.getConfig().kyOptions,
63
69
  ...fetchOptions
64
70
  } } : {};
65
- const signResult = await wrapRequest(() => signResponseObject({
71
+ const signResult = await wrapRequest(() => createAsset({
66
72
  client,
67
73
  path: { space_id: resolvedSpaceId },
68
- body: signBody,
74
+ query: {
75
+ filename: short_filename,
76
+ ...rest
77
+ },
69
78
  signal,
70
79
  throwOnError: true,
71
80
  ...kyOpts
72
81
  }), true);
73
82
  if (!signResult.data.id) throw new Error("Invalid signed response: missing id");
74
83
  await uploadToS3(signResult.data, file, short_filename);
75
- await wrapRequest(() => finalize({
84
+ await wrapRequest(() => finishAssetUpload({
76
85
  client,
77
86
  path: {
78
87
  space_id: resolvedSpaceId,
79
- signed_response_object_id: String(signResult.data.id)
88
+ id: Number(signResult.data.id)
80
89
  },
81
90
  signal,
82
91
  throwOnError: true,
83
92
  ...kyOpts
84
93
  }), true);
85
- return (await wrapRequest(() => get({
94
+ return (await wrapRequest(() => getAsset({
86
95
  client,
87
96
  path: {
88
97
  space_id: resolvedSpaceId,
89
- asset_id: Number(signResult.data.id)
98
+ id: Number(signResult.data.id)
90
99
  },
91
100
  signal,
92
101
  throwOnError: true,
@@ -100,37 +109,38 @@ function createAssetsResource(deps) {
100
109
  ...client.getConfig().kyOptions,
101
110
  ...fetchOptions
102
111
  } } : {};
112
+ const { short_filename, asset_folder_id, is_private, size, validate_upload, ext_id, ...metadataOnly } = body;
103
113
  const asset = await this.upload({
104
114
  body: {
105
- short_filename: body.short_filename,
106
- asset_folder_id: body.asset_folder_id,
107
- is_private: body.is_private,
108
- size: body.size,
109
- validate_upload: body.validate_upload
115
+ short_filename,
116
+ asset_folder_id,
117
+ is_private,
118
+ size,
119
+ validate_upload,
120
+ ext_id
110
121
  },
111
122
  file,
112
123
  signal,
113
124
  path: { space_id: resolvedSpaceId },
114
125
  fetchOptions
115
126
  });
116
- const { short_filename, asset_folder_id, is_private, size, validate_upload, ...metadata } = body;
117
- if (Object.values(metadata).some((v) => v !== void 0 && v !== null)) {
118
- await wrapRequest(() => update({
127
+ if (Object.values(metadataOnly).some((v) => v !== void 0 && v !== null)) {
128
+ await wrapRequest(() => updateAsset({
119
129
  client,
120
130
  path: {
121
131
  space_id: resolvedSpaceId,
122
- asset_id: asset.id
132
+ id: asset.id
123
133
  },
124
- body: { asset: metadata },
134
+ body: { asset: metadataOnly },
125
135
  signal,
126
136
  throwOnError: true,
127
137
  ...kyOpts
128
138
  }), true);
129
- return (await wrapRequest(() => get({
139
+ return (await wrapRequest(() => getAsset({
130
140
  client,
131
141
  path: {
132
142
  space_id: resolvedSpaceId,
133
- asset_id: asset.id
143
+ id: asset.id
134
144
  },
135
145
  signal,
136
146
  throwOnError: true,
@@ -142,11 +152,11 @@ function createAssetsResource(deps) {
142
152
  get(assetId, options = {}) {
143
153
  const { signal, path, throwOnError, fetchOptions } = options;
144
154
  const resolvedSpaceId = getSpaceId(path);
145
- return wrapRequest(() => get({
155
+ return wrapRequest(() => getAsset({
146
156
  client,
147
157
  path: {
148
158
  space_id: resolvedSpaceId,
149
- asset_id: assetId
159
+ id: assetId
150
160
  },
151
161
  signal,
152
162
  ...throwOnError === void 0 ? {} : { throwOnError },
@@ -165,45 +175,42 @@ function createAssetsResource(deps) {
165
175
  } } : {};
166
176
  if (file !== void 0) {
167
177
  const { short_filename, ...assetBody } = body;
168
- const signResult = await wrapRequest(() => signResponseObject({
178
+ const signResult = await wrapRequest(() => createAsset({
169
179
  client,
170
180
  path: { space_id: resolvedSpaceId },
171
- body: {
172
- filename: short_filename,
173
- id: Number(assetId)
174
- },
181
+ query: { filename: short_filename },
175
182
  signal,
176
183
  throwOnError: true,
177
184
  ...kyOpts
178
185
  }), true);
179
186
  if (!signResult.data.id) throw new Error("Invalid signed response: missing id");
180
187
  await uploadToS3(signResult.data, file, short_filename);
181
- await wrapRequest(() => finalize({
188
+ await wrapRequest(() => finishAssetUpload({
182
189
  client,
183
190
  path: {
184
191
  space_id: resolvedSpaceId,
185
- signed_response_object_id: String(signResult.data.id)
192
+ id: Number(signResult.data.id)
186
193
  },
187
194
  signal,
188
195
  throwOnError: true,
189
196
  ...kyOpts
190
197
  }), true);
191
- if (assetBody.asset && Object.keys(assetBody.asset).length > 0) await wrapRequest(() => update({
198
+ if (hasDefinedFields(assetBody.asset)) await wrapRequest(() => updateAsset({
192
199
  client,
193
200
  path: {
194
201
  space_id: resolvedSpaceId,
195
- asset_id: assetId
202
+ id: assetId
196
203
  },
197
204
  body: assetBody,
198
205
  signal,
199
206
  throwOnError: true,
200
207
  ...kyOpts
201
208
  }), true);
202
- } else await wrapRequest(() => update({
209
+ } else await wrapRequest(() => updateAsset({
203
210
  client,
204
211
  path: {
205
212
  space_id: resolvedSpaceId,
206
- asset_id: assetId
213
+ id: assetId
207
214
  },
208
215
  body,
209
216
  signal,
@@ -214,11 +221,11 @@ function createAssetsResource(deps) {
214
221
  delete(assetId, options = {}) {
215
222
  const { signal, path, throwOnError, fetchOptions } = options;
216
223
  const resolvedSpaceId = getSpaceId(path);
217
- return wrapRequest(() => delete_({
224
+ return wrapRequest(() => deleteAsset({
218
225
  client,
219
226
  path: {
220
227
  space_id: resolvedSpaceId,
221
- asset_id: assetId
228
+ id: assetId
222
229
  },
223
230
  signal,
224
231
  ...throwOnError === void 0 ? {} : { throwOnError },
@@ -228,14 +235,14 @@ function createAssetsResource(deps) {
228
235
  } } : {}
229
236
  }), throwOnError);
230
237
  },
231
- finalize(signedResponseObjectId, options = {}) {
238
+ finalize(assetId, options = {}) {
232
239
  const { signal, path, throwOnError, fetchOptions } = options;
233
240
  const resolvedSpaceId = getSpaceId(path);
234
- return wrapRequest(() => finalize({
241
+ return wrapRequest(() => finishAssetUpload({
235
242
  client,
236
243
  path: {
237
244
  space_id: resolvedSpaceId,
238
- signed_response_object_id: signedResponseObjectId
245
+ id: assetId
239
246
  },
240
247
  signal,
241
248
  ...throwOnError === void 0 ? {} : { throwOnError },
@@ -248,7 +255,7 @@ function createAssetsResource(deps) {
248
255
  deleteMany(options) {
249
256
  const { body, signal, path, throwOnError, fetchOptions } = options;
250
257
  const resolvedSpaceId = getSpaceId(path);
251
- return wrapRequest(() => deleteMany({
258
+ return wrapRequest(() => bulkDestroyAssets({
252
259
  client,
253
260
  path: { space_id: resolvedSpaceId },
254
261
  body,
@@ -263,7 +270,7 @@ function createAssetsResource(deps) {
263
270
  bulkMove(options) {
264
271
  const { body, signal, path, throwOnError, fetchOptions } = options;
265
272
  const resolvedSpaceId = getSpaceId(path);
266
- return wrapRequest(() => bulkMove({
273
+ return wrapRequest(() => bulkUpdateAssets({
267
274
  client,
268
275
  path: { space_id: resolvedSpaceId },
269
276
  body,
@@ -278,7 +285,7 @@ function createAssetsResource(deps) {
278
285
  bulkRestore(options) {
279
286
  const { body, signal, path, throwOnError, fetchOptions } = options;
280
287
  const resolvedSpaceId = getSpaceId(path);
281
- return wrapRequest(() => bulkRestore({
288
+ return wrapRequest(() => bulkRestoreAssets({
282
289
  client,
283
290
  path: { space_id: resolvedSpaceId },
284
291
  body,
@@ -1 +1 @@
1
- {"version":3,"file":"assets.mjs","names":["assetsApi.list","assetsApi.signResponseObject","assetsApi.finalize","assetsApi.get","assetsApi.update","assetsApi.delete_","assetsApi.deleteMany","assetsApi.bulkMove","assetsApi.bulkRestore"],"sources":["../../src/resources/assets.ts"],"sourcesContent":["import * as assetsApi from '../generated/assets/sdk.gen';\nimport type {\n Asset,\n AssetSignRequest,\n AssetUpdate,\n BulkMoveData,\n BulkMoveResponses,\n BulkRestoreData,\n BulkRestoreResponses,\n DeleteManyData,\n DeleteManyResponses,\n DeleteResponses,\n FinalizeResponses,\n GetResponses,\n ListData,\n ListResponses,\n SignResponseObjectData,\n SignResponseObjectResponses,\n UpdateData,\n UpdateResponses,\n} from '../generated/assets/types.gen';\nimport type { ApiResponse, FetchOptions, MapiResourceDeps } from '../index';\nimport { resolveSpaceId, type SpaceIdPathOverride } from './shared';\n\n/**\n * Fields for initiating an asset upload. Pass this to `upload()`, `create()`,\n * or `update()` alongside a file buffer.\n *\n * Uses `short_filename` (e.g. `\"hero.png\"`) to clearly distinguish it from\n * `Asset.filename`, which is the full CDN URL assigned by Storyblok after upload.\n *\n * If you need to call the raw sign endpoint directly, use\n * `signResponseObject()` with `AssetSignRequest` instead.\n */\nexport interface AssetUploadRequest {\n /** The desired filename for the asset (e.g. `\"hero.png\"`). Corresponds to `Asset.short_filename`. */\n short_filename: string;\n /** When set, the upload replaces the file of an existing asset with this ID. */\n id?: AssetSignRequest['id'];\n /** Place the asset in this folder. */\n asset_folder_id?: AssetSignRequest['asset_folder_id'];\n /** Mark the asset as private (inaccessible without a signed URL). */\n is_private?: AssetSignRequest['is_private'];\n /** Image dimensions in `\"<width>x<height>\"` format (e.g. `\"400x500\"`). */\n size?: AssetSignRequest['size'];\n /** Set to `1` to enable server-side upload validation. */\n validate_upload?: AssetSignRequest['validate_upload'];\n}\n\n/**\n * Input for `create()`. Combines upload fields (`short_filename`,\n * `asset_folder_id`, etc.) with writable metadata (`alt`, `title`,\n * `copyright`, etc.). The file buffer is passed separately.\n */\nexport type AssetCreate = AssetUpdate & AssetUploadRequest;\n\n/** Uploads the file to S3 using the signed fields from step 1. */\nexport async function uploadToS3(\n signedResponse: { post_url?: string; fields?: Record<string, unknown> },\n file: Blob | ArrayBuffer,\n filename: string,\n): Promise<void> {\n if (!signedResponse.post_url || !signedResponse.fields) {\n throw new Error('Invalid signed response: missing post_url or fields');\n }\n const formData = new FormData();\n for (const [key, value] of Object.entries(signedResponse.fields)) {\n formData.append(key, value as string);\n }\n const contentType = (signedResponse.fields['Content-Type'] as string | undefined) ?? 'application/octet-stream';\n const blob = file instanceof Blob ? file : new Blob([file], { type: contentType });\n formData.append('file', new File([blob], filename, { type: contentType }));\n const response = await fetch(signedResponse.post_url, { method: 'POST', body: formData });\n if (!response.ok) {\n throw new Error(`Failed to upload asset to S3: ${response.statusText}`);\n }\n}\n\nexport function createAssetsResource(deps: MapiResourceDeps) {\n const { client, spaceId, wrapRequest } = deps;\n const getSpaceId = (path?: SpaceIdPathOverride['path']) => resolveSpaceId(spaceId, path);\n\n return {\n list<ThrowOnError extends boolean = false>(options: { query?: ListData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<ListResponses[200], ThrowOnError>> {\n const { query, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<ListResponses[200], ThrowOnError>(() =>\n assetsApi.list({ client, path: { space_id: resolvedSpaceId }, query, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Requests a signed response object (step 1 of the upload flow).\n * Returns the S3 `post_url` and form `fields` needed for the actual upload.\n *\n * In most cases, prefer `upload()` or `create()` which handle all three\n * steps automatically.\n */\n signResponseObject<ThrowOnError extends boolean = false>(options: { body: SignResponseObjectData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<SignResponseObjectResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<SignResponseObjectResponses[200], ThrowOnError>(() =>\n assetsApi.signResponseObject({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Uploads a file to Storyblok (sign → S3 upload → finalize) and returns\n * the resulting `Asset`.\n *\n * To also set metadata (alt, title, etc.) in one call, use `create()`.\n */\n async upload(options: { body: AssetUploadRequest; file: Blob | ArrayBuffer; signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<Asset> {\n const { body, file, signal, path, fetchOptions } = options;\n const { short_filename, ...rest } = body;\n const signBody: AssetSignRequest = { filename: short_filename, ...rest };\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n const signResult = await wrapRequest<SignResponseObjectResponses[200], true>(() =>\n assetsApi.signResponseObject({ client, path: { space_id: resolvedSpaceId }, body: signBody, signal, throwOnError: true, ...kyOpts }), true);\n\n if (!signResult.data.id) {\n throw new Error('Invalid signed response: missing id');\n }\n\n await uploadToS3(signResult.data, file, short_filename);\n\n await wrapRequest<FinalizeResponses[200], true>(() =>\n assetsApi.finalize({\n client,\n path: { space_id: resolvedSpaceId, signed_response_object_id: String(signResult.data.id) },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n const getResult = await wrapRequest<GetResponses[200], true>(() =>\n assetsApi.get({ client, path: { space_id: resolvedSpaceId, asset_id: Number(signResult.data.id) }, signal, throwOnError: true, ...kyOpts }), true);\n\n return getResult.data;\n },\n /**\n * Creates a new asset with metadata. Performs the full upload flow, then\n * applies any provided metadata (alt, title, copyright, etc.) in a\n * follow-up update call. Returns the resulting `Asset`.\n */\n async create(options: { body: AssetCreate; file: Blob | ArrayBuffer; signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<Asset> {\n const { body, file, signal, path, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n const asset = await this.upload({\n body: {\n short_filename: body.short_filename,\n asset_folder_id: body.asset_folder_id,\n is_private: body.is_private,\n size: body.size,\n validate_upload: body.validate_upload,\n },\n file,\n signal,\n path: { space_id: resolvedSpaceId },\n fetchOptions,\n });\n\n const { short_filename, asset_folder_id, is_private, size, validate_upload, ...metadata } = body;\n const hasMetadata = Object.values(metadata).some(v => v !== undefined && v !== null);\n if (hasMetadata) {\n await wrapRequest<UpdateResponses[204], true>(() =>\n assetsApi.update({\n client,\n path: { space_id: resolvedSpaceId, asset_id: asset.id },\n body: { asset: metadata },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n const updatedResult = await wrapRequest<GetResponses[200], true>(() =>\n assetsApi.get({ client, path: { space_id: resolvedSpaceId, asset_id: asset.id }, signal, throwOnError: true, ...kyOpts }), true);\n return updatedResult.data;\n }\n\n return asset;\n },\n get<ThrowOnError extends boolean = false>(assetId: number | string, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<GetResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<GetResponses[200], ThrowOnError>(() =>\n assetsApi.get({ client, path: { space_id: resolvedSpaceId, asset_id: assetId }, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Updates an asset's metadata. When `file` and `short_filename` are\n * provided, the file is replaced first (sign → S3 → finalize), then\n * metadata is updated.\n */\n async update(\n assetId: number | string,\n options: (\n | { body: UpdateData['body']; file?: undefined }\n | { body: UpdateData['body'] & { short_filename: string }; file: Blob | ArrayBuffer }\n ) & { signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride,\n ): Promise<void> {\n const { body, file, signal, path, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n if (file !== undefined) {\n const { short_filename, ...assetBody } = body;\n const signResult = await wrapRequest<SignResponseObjectResponses[200], true>(() =>\n assetsApi.signResponseObject({\n client,\n path: { space_id: resolvedSpaceId },\n body: { filename: short_filename, id: Number(assetId) },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n if (!signResult.data.id) {\n throw new Error('Invalid signed response: missing id');\n }\n\n await uploadToS3(signResult.data, file, short_filename);\n\n await wrapRequest<FinalizeResponses[200], true>(() =>\n assetsApi.finalize({\n client,\n path: { space_id: resolvedSpaceId, signed_response_object_id: String(signResult.data.id) },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n if (assetBody.asset && Object.keys(assetBody.asset).length > 0) {\n await wrapRequest<UpdateResponses[204], true>(() =>\n assetsApi.update({ client, path: { space_id: resolvedSpaceId, asset_id: assetId }, body: assetBody, signal, throwOnError: true, ...kyOpts }), true);\n }\n }\n else {\n await wrapRequest<UpdateResponses[204], true>(() =>\n assetsApi.update({ client, path: { space_id: resolvedSpaceId, asset_id: assetId }, body, signal, throwOnError: true, ...kyOpts }), true);\n }\n },\n delete<ThrowOnError extends boolean = false>(assetId: number | string, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<DeleteResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<DeleteResponses[200], ThrowOnError>(() =>\n assetsApi.delete_({ client, path: { space_id: resolvedSpaceId, asset_id: assetId }, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n finalize<ThrowOnError extends boolean = false>(signedResponseObjectId: string, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<FinalizeResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<FinalizeResponses[200], ThrowOnError>(() =>\n assetsApi.finalize({\n client,\n path: { space_id: resolvedSpaceId, signed_response_object_id: signedResponseObjectId },\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }), throwOnError);\n },\n deleteMany<ThrowOnError extends boolean = false>(options: { body: DeleteManyData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<DeleteManyResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<DeleteManyResponses[200], ThrowOnError>(() =>\n assetsApi.deleteMany({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n bulkMove<ThrowOnError extends boolean = false>(options: { body: BulkMoveData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<BulkMoveResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<BulkMoveResponses[200], ThrowOnError>(() =>\n assetsApi.bulkMove({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n bulkRestore<ThrowOnError extends boolean = false>(options: { body: BulkRestoreData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<BulkRestoreResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<BulkRestoreResponses[200], ThrowOnError>(() =>\n assetsApi.bulkRestore({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Converts a space-local asset into a shared (org-level) asset.\n *\n * Wraps `POST /v1/spaces/{space_id}/assets/{asset_id}/convert`, which takes\n * the destination folder as the required `target_asset_folder_id` query\n * param and no request body. One-way only (space to org).\n *\n * Not part of the generated SDK, so this issues a raw `client.post`.\n * The response is assumed to match `Asset`.\n */\n convertToShared<ThrowOnError extends boolean = false>(\n assetId: number | string,\n options: { query: { target_asset_folder_id: number }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride,\n ): Promise<ApiResponse<Asset, ThrowOnError>> {\n const { query, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<Asset, ThrowOnError>(() =>\n client.post({\n url: '/v1/spaces/{space_id}/assets/{asset_id}/convert',\n path: { space_id: resolvedSpaceId, asset_id: assetId },\n query,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }), throwOnError);\n },\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"assets.mjs","names":["mapi.listAssets","mapi.createAsset","mapi.finishAssetUpload","mapi.getAsset","mapi.updateAsset","mapi.deleteAsset","mapi.bulkDestroyAssets","mapi.bulkUpdateAssets","mapi.bulkRestoreAssets"],"sources":["../../src/resources/assets.ts"],"sourcesContent":["import * as mapi from '../generated/mapi/sdk.gen';\nimport type {\n BulkDestroyAssetsData,\n BulkDestroyAssetsResponses,\n BulkRestoreAssetsData,\n BulkRestoreAssetsResponses,\n BulkUpdateAssetsData,\n BulkUpdateAssetsResponses,\n CreateAssetData,\n CreateAssetResponses,\n DeleteAssetResponses,\n FinishAssetUploadResponses,\n GetAssetResponses,\n ListAssetsData,\n ListAssetsResponses,\n UpdateAssetData,\n UpdateAssetResponses,\n} from '../generated/mapi/types.gen';\nimport type { Asset } from '../generated/mapi/types-aliased.gen';\nimport type { ApiResponse, FetchOptions, MapiResourceDeps } from '../client';\nimport { ClientError } from '../error';\nimport { resolveSpaceId, type SpaceIdPathOverride } from './shared';\n\nexport type AssetListQuery = NonNullable<ListAssetsData['query']>;\n\n/**\n * Return shape of `list()`.\n *\n * The list endpoint serializes rows with MAPI's `IndexAsset` serializer, which\n * is NOT identical to the `ShowAsset` (= `Asset`) shape returned by `get()`:\n * `IndexAsset` omits `file` and `permanently_deleted`. We deliberately surface\n * list rows as `Asset` so consumers work against a single asset type. The lie:\n * `file`/`permanently_deleted` are absent on list rows at runtime — consumers\n * needing those must re-fetch via `get()`.\n */\nexport type ListAssetsResult = Omit<ListAssetsResponses[200], 'assets'> & { assets: Array<Asset> };\n\n/**\n * Fields for initiating an asset upload. Pass this to `upload()` or `create()`\n * alongside a file buffer.\n */\nexport type AssetUploadRequest = {\n /** The desired filename for the asset (e.g. `\"hero.png\"`). */\n short_filename: string;\n} & Partial<Omit<NonNullable<CreateAssetData['query']>, 'filename'>>;\n\n/**\n * Input for `create()`. Combines upload fields with writable metadata.\n */\nexport type AssetCreate = AssetUploadRequest & NonNullable<UpdateAssetData['body']['asset']>;\n\n/** Uploads the file to S3 using the signed fields from step 1. */\nexport async function uploadToS3(\n signedResponse: { post_url?: string; fields?: Record<string, unknown> },\n file: Blob | ArrayBuffer,\n filename: string,\n): Promise<void> {\n if (!signedResponse.post_url || !signedResponse.fields) {\n throw new ClientError('Invalid signed response: missing post_url or fields', {\n status: 0,\n statusText: 'Invalid signed response',\n data: signedResponse,\n });\n }\n const formData = new FormData();\n for (const [key, value] of Object.entries(signedResponse.fields)) {\n formData.append(key, value as string);\n }\n const contentType = (signedResponse.fields['Content-Type'] as string | undefined) ?? 'application/octet-stream';\n const blob = file instanceof Blob ? file : new Blob([file], { type: contentType });\n formData.append('file', new File([blob], filename, { type: contentType }));\n const response = await fetch(signedResponse.post_url, { method: 'POST', body: formData });\n if (!response.ok) {\n throw new ClientError(`Failed to upload asset to S3: ${response.statusText}`, {\n status: response.status,\n statusText: response.statusText,\n data: undefined,\n });\n }\n}\n\nconst hasDefinedFields = (value: Record<string, unknown> | undefined): boolean =>\n Object.values(value ?? {}).some(v => v !== undefined && v !== null);\n\nexport function createAssetsResource<DefaultThrowOnError extends boolean = false>(deps: MapiResourceDeps<DefaultThrowOnError>) {\n const { client, spaceId, wrapRequest } = deps;\n const getSpaceId = (path?: SpaceIdPathOverride['path']) => resolveSpaceId(spaceId, path);\n\n return {\n list<ThrowOnError extends boolean = DefaultThrowOnError>(options: { query?: ListAssetsData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<ListAssetsResult, ThrowOnError>> {\n const { query, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n // `listAssets` returns `IndexAsset` rows; we present them as `Asset` (see `ListAssetsResult`).\n return wrapRequest<ListAssetsResult, ThrowOnError>(() =>\n mapi.listAssets({ client, path: { space_id: resolvedSpaceId }, query, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Step 1 of the upload flow: requests a signed S3 upload object from MAPI.\n * Returns the S3 `post_url` and form `fields` needed for the actual upload.\n *\n * In most cases, prefer `upload()` or `create()` which handle all three\n * steps automatically.\n */\n signResponseObject<ThrowOnError extends boolean = DefaultThrowOnError>(options: { query: CreateAssetData['query']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<CreateAssetResponses[200], ThrowOnError>> {\n const { query, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<CreateAssetResponses[200], ThrowOnError>(() =>\n mapi.createAsset({ client, path: { space_id: resolvedSpaceId }, query, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Uploads a file to Storyblok (sign → S3 upload → finish) and returns the\n * resulting `Asset`.\n */\n async upload(options: { body: AssetUploadRequest; file: Blob | ArrayBuffer; signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<Asset> {\n const { body, file, signal, path, fetchOptions } = options;\n const { short_filename, ...rest } = body;\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n const signResult = await wrapRequest<CreateAssetResponses[200], true>(() =>\n mapi.createAsset({ client, path: { space_id: resolvedSpaceId }, query: { filename: short_filename, ...rest }, signal, throwOnError: true, ...kyOpts }), true);\n\n if (!signResult.data.id) {\n throw new Error('Invalid signed response: missing id');\n }\n\n await uploadToS3(signResult.data, file, short_filename);\n\n await wrapRequest<FinishAssetUploadResponses[200], true>(() =>\n mapi.finishAssetUpload({\n client,\n path: { space_id: resolvedSpaceId, id: Number(signResult.data.id) },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n const getResult = await wrapRequest<GetAssetResponses[200], true>(() =>\n mapi.getAsset({ client, path: { space_id: resolvedSpaceId, id: Number(signResult.data.id) }, signal, throwOnError: true, ...kyOpts }), true);\n\n return getResult.data;\n },\n /**\n * Creates a new asset with metadata. Performs the full upload flow then\n * applies any provided metadata in a follow-up update call.\n */\n async create(options: { body: AssetCreate; file: Blob | ArrayBuffer; signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<Asset> {\n const { body, file, signal, path, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n const { short_filename, asset_folder_id, is_private, size, validate_upload, ext_id, ...metadataOnly } = body;\n const asset = await this.upload({\n body: { short_filename, asset_folder_id, is_private, size, validate_upload, ext_id },\n file,\n signal,\n path: { space_id: resolvedSpaceId },\n fetchOptions,\n });\n\n const hasMetadata = Object.values(metadataOnly).some(v => v !== undefined && v !== null);\n if (hasMetadata) {\n await wrapRequest<UpdateAssetResponses[204], true>(() =>\n mapi.updateAsset({\n client,\n path: { space_id: resolvedSpaceId, id: asset.id! },\n body: { asset: metadataOnly },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n const updatedResult = await wrapRequest<GetAssetResponses[200], true>(() =>\n mapi.getAsset({ client, path: { space_id: resolvedSpaceId, id: asset.id! }, signal, throwOnError: true, ...kyOpts }), true);\n return updatedResult.data;\n }\n\n return asset;\n },\n get<ThrowOnError extends boolean = DefaultThrowOnError>(assetId: number, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<GetAssetResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<GetAssetResponses[200], ThrowOnError>(() =>\n mapi.getAsset({ client, path: { space_id: resolvedSpaceId, id: assetId }, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Updates an asset's metadata. When `file` and `body.short_filename` are\n * provided, the file is replaced first (sign → S3 → finish), then metadata\n * is updated.\n */\n async update(\n assetId: number,\n options: (\n | { body: UpdateAssetData['body']; file?: undefined }\n | { body: UpdateAssetData['body'] & { short_filename: string }; file: Blob | ArrayBuffer }\n ) & { signal?: AbortSignal; fetchOptions?: FetchOptions } & SpaceIdPathOverride,\n ): Promise<void> {\n const { body, file, signal, path, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n const kyOpts = fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {};\n\n if (file !== undefined) {\n const { short_filename, ...assetBody } = body;\n const signResult = await wrapRequest<CreateAssetResponses[200], true>(() =>\n mapi.createAsset({\n client,\n path: { space_id: resolvedSpaceId },\n query: { filename: short_filename },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n if (!signResult.data.id) {\n throw new Error('Invalid signed response: missing id');\n }\n\n await uploadToS3(signResult.data, file, short_filename);\n\n await wrapRequest<FinishAssetUploadResponses[200], true>(() =>\n mapi.finishAssetUpload({\n client,\n path: { space_id: resolvedSpaceId, id: Number(signResult.data.id) },\n signal,\n throwOnError: true,\n ...kyOpts,\n }), true);\n\n if (hasDefinedFields(assetBody.asset)) {\n await wrapRequest<UpdateAssetResponses[204], true>(() =>\n mapi.updateAsset({ client, path: { space_id: resolvedSpaceId, id: assetId }, body: assetBody, signal, throwOnError: true, ...kyOpts }), true);\n }\n }\n else {\n await wrapRequest<UpdateAssetResponses[204], true>(() =>\n mapi.updateAsset({ client, path: { space_id: resolvedSpaceId, id: assetId }, body, signal, throwOnError: true, ...kyOpts }), true);\n }\n },\n delete<ThrowOnError extends boolean = DefaultThrowOnError>(assetId: number, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<DeleteAssetResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<DeleteAssetResponses[200], ThrowOnError>(() =>\n mapi.deleteAsset({ client, path: { space_id: resolvedSpaceId, id: assetId }, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n finalize<ThrowOnError extends boolean = DefaultThrowOnError>(assetId: number, options: { signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride = {}): Promise<ApiResponse<FinishAssetUploadResponses[200], ThrowOnError>> {\n const { signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<FinishAssetUploadResponses[200], ThrowOnError>(() =>\n mapi.finishAssetUpload({\n client,\n path: { space_id: resolvedSpaceId, id: assetId },\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }), throwOnError);\n },\n /** POST /assets/bulk_destroy: hard-delete many assets in one call. */\n deleteMany<ThrowOnError extends boolean = DefaultThrowOnError>(options: { body: BulkDestroyAssetsData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<BulkDestroyAssetsResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<BulkDestroyAssetsResponses[200], ThrowOnError>(() =>\n mapi.bulkDestroyAssets({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /** POST /assets/bulk_update: move many assets between folders in one call. */\n bulkMove<ThrowOnError extends boolean = DefaultThrowOnError>(options: { body: BulkUpdateAssetsData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<BulkUpdateAssetsResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<BulkUpdateAssetsResponses[200], ThrowOnError>(() =>\n mapi.bulkUpdateAssets({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n bulkRestore<ThrowOnError extends boolean = DefaultThrowOnError>(options: { body: BulkRestoreAssetsData['body']; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride): Promise<ApiResponse<BulkRestoreAssetsResponses[200], ThrowOnError>> {\n const { body, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<BulkRestoreAssetsResponses[200], ThrowOnError>(() =>\n mapi.bulkRestoreAssets({ client, path: { space_id: resolvedSpaceId }, body, signal, ...(throwOnError === undefined ? {} : { throwOnError }), ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}) }), throwOnError);\n },\n /**\n * Converts a space-local asset into a shared (org-level) asset.\n *\n * Wraps `POST /v1/spaces/{space_id}/assets/{asset_id}/convert`, which takes\n * the destination folder as the required `target_asset_folder_id` query\n * param and no request body. One-way only (space to org).\n *\n * Not part of the generated SDK, so this issues a raw `client.post`.\n * The response is assumed to match `Asset`.\n */\n convertToShared<ThrowOnError extends boolean = false>(\n assetId: number | string,\n options: { query: { target_asset_folder_id: number }; signal?: AbortSignal; throwOnError?: ThrowOnError; fetchOptions?: FetchOptions } & SpaceIdPathOverride,\n ): Promise<ApiResponse<Asset, ThrowOnError>> {\n const { query, signal, path, throwOnError, fetchOptions } = options;\n const resolvedSpaceId = getSpaceId(path);\n return wrapRequest<Asset, ThrowOnError>(() =>\n client.post({\n url: '/v1/spaces/{space_id}/assets/{asset_id}/convert',\n path: { space_id: resolvedSpaceId, asset_id: assetId },\n query,\n signal,\n ...(throwOnError === undefined ? {} : { throwOnError }),\n ...(fetchOptions ? { kyOptions: { ...client.getConfig().kyOptions, ...fetchOptions } } : {}),\n }), throwOnError);\n },\n };\n}\n"],"mappings":"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"}