@storyblok/management-api-client 1.0.0-alpha.1 → 1.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (294) hide show
  1. package/README.md +3 -1
  2. package/dist/client.cjs +9 -9
  3. package/dist/client.cjs.map +1 -1
  4. package/dist/client.d.cts +208 -200
  5. package/dist/client.d.mts +208 -200
  6. package/dist/client.mjs +9 -9
  7. package/dist/client.mjs.map +1 -1
  8. package/dist/generated/mapi/_internal.gen.d.cts +541 -0
  9. package/dist/generated/mapi/_internal.gen.d.mts +541 -0
  10. package/dist/generated/{shared → mapi}/client/client.gen.cjs +1 -1
  11. package/dist/generated/mapi/client/client.gen.cjs.map +1 -0
  12. package/dist/generated/{shared → mapi}/client/client.gen.mjs +1 -1
  13. package/dist/generated/mapi/client/client.gen.mjs.map +1 -0
  14. package/dist/generated/{shared → mapi}/client/types.gen.d.cts +1 -1
  15. package/dist/generated/{shared → mapi}/client/types.gen.d.mts +1 -1
  16. package/dist/generated/{shared → mapi}/client/utils.gen.cjs +1 -1
  17. package/dist/generated/mapi/client/utils.gen.cjs.map +1 -0
  18. package/dist/generated/{shared → mapi}/client/utils.gen.d.cts +1 -1
  19. package/dist/generated/{shared → mapi}/client/utils.gen.d.mts +1 -1
  20. package/dist/generated/{shared → mapi}/client/utils.gen.mjs +1 -1
  21. package/dist/generated/mapi/client/utils.gen.mjs.map +1 -0
  22. package/dist/generated/mapi/client.gen.cjs +10 -0
  23. package/dist/generated/mapi/client.gen.cjs.map +1 -0
  24. package/dist/generated/mapi/client.gen.mjs +10 -0
  25. package/dist/generated/mapi/client.gen.mjs.map +1 -0
  26. package/dist/generated/{shared → mapi}/core/auth.gen.cjs +1 -1
  27. package/dist/generated/mapi/core/auth.gen.cjs.map +1 -0
  28. package/dist/generated/{shared → mapi}/core/auth.gen.d.cts +1 -1
  29. package/dist/generated/{shared → mapi}/core/auth.gen.d.mts +1 -1
  30. package/dist/generated/{shared → mapi}/core/auth.gen.mjs +1 -1
  31. package/dist/generated/mapi/core/auth.gen.mjs.map +1 -0
  32. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.cjs +1 -1
  33. package/dist/generated/mapi/core/bodySerializer.gen.cjs.map +1 -0
  34. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.d.cts +1 -1
  35. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.d.mts +1 -1
  36. package/dist/generated/{shared → mapi}/core/bodySerializer.gen.mjs +1 -1
  37. package/dist/generated/mapi/core/bodySerializer.gen.mjs.map +1 -0
  38. package/dist/generated/{shared → mapi}/core/params.gen.cjs +1 -1
  39. package/dist/generated/mapi/core/params.gen.cjs.map +1 -0
  40. package/dist/generated/{shared → mapi}/core/params.gen.mjs +1 -1
  41. package/dist/generated/mapi/core/params.gen.mjs.map +1 -0
  42. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.cjs +1 -1
  43. package/dist/generated/mapi/core/pathSerializer.gen.cjs.map +1 -0
  44. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.d.cts +1 -1
  45. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.d.mts +1 -1
  46. package/dist/generated/{shared → mapi}/core/pathSerializer.gen.mjs +1 -1
  47. package/dist/generated/mapi/core/pathSerializer.gen.mjs.map +1 -0
  48. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.cjs +1 -1
  49. package/dist/generated/mapi/core/serverSentEvents.gen.cjs.map +1 -0
  50. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.d.cts +1 -1
  51. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.d.mts +1 -1
  52. package/dist/generated/{shared → mapi}/core/serverSentEvents.gen.mjs +1 -1
  53. package/dist/generated/mapi/core/serverSentEvents.gen.mjs.map +1 -0
  54. package/dist/generated/{shared → mapi}/core/types.gen.d.cts +1 -1
  55. package/dist/generated/{shared → mapi}/core/types.gen.d.mts +1 -1
  56. package/dist/generated/{shared → mapi}/core/utils.gen.cjs +1 -1
  57. package/dist/generated/mapi/core/utils.gen.cjs.map +1 -0
  58. package/dist/generated/{shared → mapi}/core/utils.gen.mjs +1 -1
  59. package/dist/generated/mapi/core/utils.gen.mjs.map +1 -0
  60. package/dist/generated/mapi/sdk.gen.cjs +1477 -0
  61. package/dist/generated/mapi/sdk.gen.cjs.map +1 -0
  62. package/dist/generated/mapi/sdk.gen.mjs +1399 -0
  63. package/dist/generated/mapi/sdk.gen.mjs.map +1 -0
  64. package/dist/generated/mapi/types-aliased.gen.d.cts +1428 -0
  65. package/dist/generated/mapi/types-aliased.gen.d.mts +1428 -0
  66. package/dist/generated/mapi/types.gen.d.cts +5075 -0
  67. package/dist/generated/mapi/types.gen.d.mts +5075 -0
  68. package/dist/generated/{components/types.gen.d.cts → overlay/_internal.gen.d.cts} +281 -457
  69. package/dist/generated/{components/types.gen.d.mts → overlay/_internal.gen.d.mts} +281 -457
  70. package/dist/generated/types/_utils.d.cts +7 -0
  71. package/dist/generated/types/_utils.d.mts +7 -0
  72. package/dist/generated/types/block.d.cts +30 -0
  73. package/dist/generated/types/block.d.mts +30 -0
  74. package/dist/generated/types/field.d.cts +75 -0
  75. package/dist/generated/types/field.d.mts +75 -0
  76. package/dist/generated/types/mapi-story.d.cts +29 -0
  77. package/dist/generated/types/mapi-story.d.mts +29 -0
  78. package/dist/index.d.cts +9 -4
  79. package/dist/index.d.mts +9 -4
  80. package/dist/resources/asset-folders.cjs +9 -9
  81. package/dist/resources/asset-folders.cjs.map +1 -1
  82. package/dist/resources/asset-folders.mjs +9 -9
  83. package/dist/resources/asset-folders.mjs.map +1 -1
  84. package/dist/resources/assets.cjs +64 -46
  85. package/dist/resources/assets.cjs.map +1 -1
  86. package/dist/resources/assets.d.cts +23 -28
  87. package/dist/resources/assets.d.mts +23 -28
  88. package/dist/resources/assets.mjs +64 -46
  89. package/dist/resources/assets.mjs.map +1 -1
  90. package/dist/resources/component-folders.cjs +9 -9
  91. package/dist/resources/component-folders.cjs.map +1 -1
  92. package/dist/resources/component-folders.mjs +9 -9
  93. package/dist/resources/component-folders.mjs.map +1 -1
  94. package/dist/resources/components.cjs +28 -20
  95. package/dist/resources/components.cjs.map +1 -1
  96. package/dist/resources/components.d.cts +76 -0
  97. package/dist/resources/components.d.mts +76 -0
  98. package/dist/resources/components.mjs +28 -20
  99. package/dist/resources/components.mjs.map +1 -1
  100. package/dist/resources/datasource-entries.cjs +28 -34
  101. package/dist/resources/datasource-entries.cjs.map +1 -1
  102. package/dist/resources/datasource-entries.mjs +29 -35
  103. package/dist/resources/datasource-entries.mjs.map +1 -1
  104. package/dist/resources/datasources.cjs +27 -9
  105. package/dist/resources/datasources.cjs.map +1 -1
  106. package/dist/resources/datasources.mjs +27 -9
  107. package/dist/resources/datasources.mjs.map +1 -1
  108. package/dist/resources/experiments.cjs +299 -0
  109. package/dist/resources/experiments.cjs.map +1 -0
  110. package/dist/resources/experiments.mjs +299 -0
  111. package/dist/resources/experiments.mjs.map +1 -0
  112. package/dist/resources/internal-tags.cjs +7 -7
  113. package/dist/resources/internal-tags.cjs.map +1 -1
  114. package/dist/resources/internal-tags.mjs +7 -7
  115. package/dist/resources/internal-tags.mjs.map +1 -1
  116. package/dist/resources/presets.cjs +9 -9
  117. package/dist/resources/presets.cjs.map +1 -1
  118. package/dist/resources/presets.mjs +9 -9
  119. package/dist/resources/presets.mjs.map +1 -1
  120. package/dist/resources/shared.cjs +15 -0
  121. package/dist/resources/shared.cjs.map +1 -1
  122. package/dist/resources/shared.mjs +15 -1
  123. package/dist/resources/shared.mjs.map +1 -1
  124. package/dist/resources/spaces.cjs +8 -7
  125. package/dist/resources/spaces.cjs.map +1 -1
  126. package/dist/resources/spaces.d.cts +8 -0
  127. package/dist/resources/spaces.d.mts +7 -0
  128. package/dist/resources/spaces.mjs +8 -7
  129. package/dist/resources/spaces.mjs.map +1 -1
  130. package/dist/resources/stories.cjs +20 -16
  131. package/dist/resources/stories.cjs.map +1 -1
  132. package/dist/resources/stories.d.cts +30 -42
  133. package/dist/resources/stories.d.mts +30 -42
  134. package/dist/resources/stories.mjs +20 -16
  135. package/dist/resources/stories.mjs.map +1 -1
  136. package/dist/resources/users.cjs +3 -3
  137. package/dist/resources/users.cjs.map +1 -1
  138. package/dist/resources/users.mjs +3 -3
  139. package/dist/resources/users.mjs.map +1 -1
  140. package/dist/utils/query-serializer.cjs +54 -0
  141. package/dist/utils/query-serializer.cjs.map +1 -0
  142. package/dist/utils/query-serializer.mjs +54 -0
  143. package/dist/utils/query-serializer.mjs.map +1 -0
  144. package/dist/utils/rate-limit.cjs +15 -74
  145. package/dist/utils/rate-limit.cjs.map +1 -1
  146. package/dist/utils/rate-limit.d.cts +5 -6
  147. package/dist/utils/rate-limit.d.mts +5 -6
  148. package/dist/utils/rate-limit.mjs +15 -74
  149. package/dist/utils/rate-limit.mjs.map +1 -1
  150. package/package.json +13 -13
  151. package/playground/integration-tests/README.md +24 -0
  152. package/playground/integration-tests/eslint.config.js +5 -0
  153. package/playground/integration-tests/node_modules/.bin/eslint +16 -0
  154. package/playground/integration-tests/node_modules/.bin/tsc +16 -0
  155. package/playground/integration-tests/node_modules/.bin/tsserver +16 -0
  156. package/playground/integration-tests/node_modules/.bin/vitest +16 -0
  157. package/playground/integration-tests/package.json +24 -0
  158. package/{test → playground/integration-tests/test}/setup.e2e.ts +2 -2
  159. package/{test → playground/integration-tests/test}/specs/mapi-round-trip.spec.e2e.ts +1 -1
  160. package/playground/integration-tests/test/types/components.test-d.ts +113 -0
  161. package/playground/integration-tests/test/types/resources.test-d.ts +364 -0
  162. package/playground/integration-tests/test/types/stories.test-d.ts +306 -0
  163. package/{vitest.config.e2e.ts → playground/integration-tests/vitest.config.e2e.ts} +1 -2
  164. package/playground/integration-tests/vitest.config.ts +13 -0
  165. package/test/GUIDE.md +2 -2
  166. package/vitest.config.ts +2 -0
  167. package/dist/generated/asset_folders/client.gen.cjs +0 -10
  168. package/dist/generated/asset_folders/client.gen.cjs.map +0 -1
  169. package/dist/generated/asset_folders/client.gen.mjs +0 -10
  170. package/dist/generated/asset_folders/client.gen.mjs.map +0 -1
  171. package/dist/generated/asset_folders/sdk.gen.cjs +0 -99
  172. package/dist/generated/asset_folders/sdk.gen.cjs.map +0 -1
  173. package/dist/generated/asset_folders/sdk.gen.mjs +0 -95
  174. package/dist/generated/asset_folders/sdk.gen.mjs.map +0 -1
  175. package/dist/generated/asset_folders/types.gen.d.cts +0 -130
  176. package/dist/generated/asset_folders/types.gen.d.mts +0 -130
  177. package/dist/generated/assets/client.gen.cjs +0 -10
  178. package/dist/generated/assets/client.gen.cjs.map +0 -1
  179. package/dist/generated/assets/client.gen.mjs +0 -10
  180. package/dist/generated/assets/client.gen.mjs.map +0 -1
  181. package/dist/generated/assets/sdk.gen.cjs +0 -179
  182. package/dist/generated/assets/sdk.gen.cjs.map +0 -1
  183. package/dist/generated/assets/sdk.gen.mjs +0 -171
  184. package/dist/generated/assets/sdk.gen.mjs.map +0 -1
  185. package/dist/generated/assets/types.gen.d.cts +0 -343
  186. package/dist/generated/assets/types.gen.d.mts +0 -343
  187. package/dist/generated/component_folders/client.gen.cjs +0 -10
  188. package/dist/generated/component_folders/client.gen.cjs.map +0 -1
  189. package/dist/generated/component_folders/client.gen.mjs +0 -10
  190. package/dist/generated/component_folders/client.gen.mjs.map +0 -1
  191. package/dist/generated/component_folders/sdk.gen.cjs +0 -99
  192. package/dist/generated/component_folders/sdk.gen.cjs.map +0 -1
  193. package/dist/generated/component_folders/sdk.gen.mjs +0 -95
  194. package/dist/generated/component_folders/sdk.gen.mjs.map +0 -1
  195. package/dist/generated/component_folders/types.gen.d.cts +0 -102
  196. package/dist/generated/component_folders/types.gen.d.mts +0 -102
  197. package/dist/generated/components/client.gen.cjs +0 -10
  198. package/dist/generated/components/client.gen.cjs.map +0 -1
  199. package/dist/generated/components/client.gen.mjs +0 -10
  200. package/dist/generated/components/client.gen.mjs.map +0 -1
  201. package/dist/generated/components/sdk.gen.cjs +0 -171
  202. package/dist/generated/components/sdk.gen.cjs.map +0 -1
  203. package/dist/generated/components/sdk.gen.mjs +0 -163
  204. package/dist/generated/components/sdk.gen.mjs.map +0 -1
  205. package/dist/generated/datasource_entries/client.gen.cjs +0 -10
  206. package/dist/generated/datasource_entries/client.gen.cjs.map +0 -1
  207. package/dist/generated/datasource_entries/client.gen.mjs +0 -10
  208. package/dist/generated/datasource_entries/client.gen.mjs.map +0 -1
  209. package/dist/generated/datasource_entries/sdk.gen.cjs +0 -89
  210. package/dist/generated/datasource_entries/sdk.gen.cjs.map +0 -1
  211. package/dist/generated/datasource_entries/sdk.gen.mjs +0 -85
  212. package/dist/generated/datasource_entries/sdk.gen.mjs.map +0 -1
  213. package/dist/generated/datasource_entries/types.gen.d.cts +0 -130
  214. package/dist/generated/datasource_entries/types.gen.d.mts +0 -130
  215. package/dist/generated/datasources/client.gen.cjs +0 -10
  216. package/dist/generated/datasources/client.gen.cjs.map +0 -1
  217. package/dist/generated/datasources/client.gen.mjs +0 -10
  218. package/dist/generated/datasources/client.gen.mjs.map +0 -1
  219. package/dist/generated/datasources/sdk.gen.cjs +0 -89
  220. package/dist/generated/datasources/sdk.gen.cjs.map +0 -1
  221. package/dist/generated/datasources/sdk.gen.mjs +0 -85
  222. package/dist/generated/datasources/sdk.gen.mjs.map +0 -1
  223. package/dist/generated/datasources/types.gen.d.cts +0 -165
  224. package/dist/generated/datasources/types.gen.d.mts +0 -165
  225. package/dist/generated/internal_tags/client.gen.cjs +0 -10
  226. package/dist/generated/internal_tags/client.gen.cjs.map +0 -1
  227. package/dist/generated/internal_tags/client.gen.mjs +0 -10
  228. package/dist/generated/internal_tags/client.gen.mjs.map +0 -1
  229. package/dist/generated/internal_tags/sdk.gen.cjs +0 -74
  230. package/dist/generated/internal_tags/sdk.gen.cjs.map +0 -1
  231. package/dist/generated/internal_tags/sdk.gen.mjs +0 -71
  232. package/dist/generated/internal_tags/sdk.gen.mjs.map +0 -1
  233. package/dist/generated/internal_tags/types.gen.d.cts +0 -102
  234. package/dist/generated/internal_tags/types.gen.d.mts +0 -102
  235. package/dist/generated/presets/client.gen.cjs +0 -10
  236. package/dist/generated/presets/client.gen.cjs.map +0 -1
  237. package/dist/generated/presets/client.gen.mjs +0 -10
  238. package/dist/generated/presets/client.gen.mjs.map +0 -1
  239. package/dist/generated/presets/sdk.gen.cjs +0 -99
  240. package/dist/generated/presets/sdk.gen.cjs.map +0 -1
  241. package/dist/generated/presets/sdk.gen.mjs +0 -95
  242. package/dist/generated/presets/sdk.gen.mjs.map +0 -1
  243. package/dist/generated/presets/types.gen.d.cts +0 -171
  244. package/dist/generated/presets/types.gen.d.mts +0 -171
  245. package/dist/generated/shared/client/client.gen.cjs.map +0 -1
  246. package/dist/generated/shared/client/client.gen.mjs.map +0 -1
  247. package/dist/generated/shared/client/utils.gen.cjs.map +0 -1
  248. package/dist/generated/shared/client/utils.gen.mjs.map +0 -1
  249. package/dist/generated/shared/core/auth.gen.cjs.map +0 -1
  250. package/dist/generated/shared/core/auth.gen.mjs.map +0 -1
  251. package/dist/generated/shared/core/bodySerializer.gen.cjs.map +0 -1
  252. package/dist/generated/shared/core/bodySerializer.gen.mjs.map +0 -1
  253. package/dist/generated/shared/core/params.gen.cjs.map +0 -1
  254. package/dist/generated/shared/core/params.gen.mjs.map +0 -1
  255. package/dist/generated/shared/core/pathSerializer.gen.cjs.map +0 -1
  256. package/dist/generated/shared/core/pathSerializer.gen.mjs.map +0 -1
  257. package/dist/generated/shared/core/serverSentEvents.gen.cjs.map +0 -1
  258. package/dist/generated/shared/core/serverSentEvents.gen.mjs.map +0 -1
  259. package/dist/generated/shared/core/utils.gen.cjs.map +0 -1
  260. package/dist/generated/shared/core/utils.gen.mjs.map +0 -1
  261. package/dist/generated/spaces/client.gen.cjs +0 -10
  262. package/dist/generated/spaces/client.gen.cjs.map +0 -1
  263. package/dist/generated/spaces/client.gen.mjs +0 -10
  264. package/dist/generated/spaces/client.gen.mjs.map +0 -1
  265. package/dist/generated/spaces/sdk.gen.cjs +0 -99
  266. package/dist/generated/spaces/sdk.gen.cjs.map +0 -1
  267. package/dist/generated/spaces/sdk.gen.mjs +0 -95
  268. package/dist/generated/spaces/sdk.gen.mjs.map +0 -1
  269. package/dist/generated/spaces/types.gen.d.cts +0 -504
  270. package/dist/generated/spaces/types.gen.d.mts +0 -504
  271. package/dist/generated/stories/client.gen.cjs +0 -10
  272. package/dist/generated/stories/client.gen.cjs.map +0 -1
  273. package/dist/generated/stories/client.gen.mjs +0 -10
  274. package/dist/generated/stories/client.gen.mjs.map +0 -1
  275. package/dist/generated/stories/sdk.gen.cjs +0 -138
  276. package/dist/generated/stories/sdk.gen.cjs.map +0 -1
  277. package/dist/generated/stories/sdk.gen.mjs +0 -131
  278. package/dist/generated/stories/sdk.gen.mjs.map +0 -1
  279. package/dist/generated/stories/types.gen.d.cts +0 -1314
  280. package/dist/generated/stories/types.gen.d.mts +0 -1314
  281. package/dist/generated/users/client.gen.cjs +0 -10
  282. package/dist/generated/users/client.gen.cjs.map +0 -1
  283. package/dist/generated/users/client.gen.mjs +0 -10
  284. package/dist/generated/users/client.gen.mjs.map +0 -1
  285. package/dist/generated/users/sdk.gen.cjs +0 -44
  286. package/dist/generated/users/sdk.gen.cjs.map +0 -1
  287. package/dist/generated/users/sdk.gen.mjs +0 -43
  288. package/dist/generated/users/sdk.gen.mjs.map +0 -1
  289. package/dist/generated/users/types.gen.d.cts +0 -249
  290. package/dist/generated/users/types.gen.d.mts +0 -249
  291. /package/dist/generated/{shared → mapi}/client/client.gen.d.mts +0 -0
  292. /package/dist/generated/{shared → mapi}/client/index.cjs +0 -0
  293. /package/dist/generated/{shared → mapi}/client/index.d.mts +0 -0
  294. /package/dist/generated/{shared → mapi}/client/index.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  const require_error = require('../error.cjs');
2
+ const require_sdk_gen = require('../generated/mapi/sdk.gen.cjs');
2
3
  const require_shared = require('./shared.cjs');
3
- const require_sdk_gen = require('../generated/assets/sdk.gen.cjs');
4
4
 
5
5
  //#region src/resources/assets.ts
6
6
  /** Uploads the file to S3 using the signed fields from step 1. */
@@ -25,6 +25,7 @@ async function uploadToS3(signedResponse, file, filename) {
25
25
  data: void 0
26
26
  });
27
27
  }
28
+ const hasDefinedFields = (value) => Object.values(value ?? {}).some((v) => v !== void 0 && v !== null);
28
29
  function createAssetsResource(deps) {
29
30
  const { client, spaceId, wrapRequest } = deps;
30
31
  const getSpaceId = (path) => require_shared.resolveSpaceId(spaceId, path);
@@ -32,7 +33,7 @@ function createAssetsResource(deps) {
32
33
  list(options = {}) {
33
34
  const { query, signal, path, throwOnError, fetchOptions } = options;
34
35
  const resolvedSpaceId = getSpaceId(path);
35
- return wrapRequest(() => require_sdk_gen.list({
36
+ return wrapRequest(() => require_sdk_gen.listAssets({
36
37
  client,
37
38
  path: { space_id: resolvedSpaceId },
38
39
  query,
@@ -45,12 +46,12 @@ function createAssetsResource(deps) {
45
46
  }), throwOnError);
46
47
  },
47
48
  signResponseObject(options) {
48
- const { body, signal, path, throwOnError, fetchOptions } = options;
49
+ const { query, signal, path, throwOnError, fetchOptions } = options;
49
50
  const resolvedSpaceId = getSpaceId(path);
50
- return wrapRequest(() => require_sdk_gen.signResponseObject({
51
+ return wrapRequest(() => require_sdk_gen.createAsset({
51
52
  client,
52
53
  path: { space_id: resolvedSpaceId },
53
- body,
54
+ query,
54
55
  signal,
55
56
  ...throwOnError === void 0 ? {} : { throwOnError },
56
57
  ...fetchOptions ? { kyOptions: {
@@ -62,40 +63,39 @@ function createAssetsResource(deps) {
62
63
  async upload(options) {
63
64
  const { body, file, signal, path, fetchOptions } = options;
64
65
  const { short_filename, ...rest } = body;
65
- const signBody = {
66
- filename: short_filename,
67
- ...rest
68
- };
69
66
  const resolvedSpaceId = getSpaceId(path);
70
67
  const kyOpts = fetchOptions ? { kyOptions: {
71
68
  ...client.getConfig().kyOptions,
72
69
  ...fetchOptions
73
70
  } } : {};
74
- const signResult = await wrapRequest(() => require_sdk_gen.signResponseObject({
71
+ const signResult = await wrapRequest(() => require_sdk_gen.createAsset({
75
72
  client,
76
73
  path: { space_id: resolvedSpaceId },
77
- body: signBody,
74
+ query: {
75
+ filename: short_filename,
76
+ ...rest
77
+ },
78
78
  signal,
79
79
  throwOnError: true,
80
80
  ...kyOpts
81
81
  }), true);
82
82
  if (!signResult.data.id) throw new Error("Invalid signed response: missing id");
83
83
  await uploadToS3(signResult.data, file, short_filename);
84
- await wrapRequest(() => require_sdk_gen.finalize({
84
+ await wrapRequest(() => require_sdk_gen.finishAssetUpload({
85
85
  client,
86
86
  path: {
87
87
  space_id: resolvedSpaceId,
88
- signed_response_object_id: String(signResult.data.id)
88
+ id: Number(signResult.data.id)
89
89
  },
90
90
  signal,
91
91
  throwOnError: true,
92
92
  ...kyOpts
93
93
  }), true);
94
- return (await wrapRequest(() => require_sdk_gen.get({
94
+ return (await wrapRequest(() => require_sdk_gen.getAsset({
95
95
  client,
96
96
  path: {
97
97
  space_id: resolvedSpaceId,
98
- asset_id: Number(signResult.data.id)
98
+ id: Number(signResult.data.id)
99
99
  },
100
100
  signal,
101
101
  throwOnError: true,
@@ -109,35 +109,38 @@ function createAssetsResource(deps) {
109
109
  ...client.getConfig().kyOptions,
110
110
  ...fetchOptions
111
111
  } } : {};
112
+ const { short_filename, asset_folder_id, is_private, size, validate_upload, ext_id, ...metadataOnly } = body;
112
113
  const asset = await this.upload({
113
114
  body: {
114
- short_filename: body.short_filename,
115
- asset_folder_id: body.asset_folder_id,
116
- is_private: body.is_private
115
+ short_filename,
116
+ asset_folder_id,
117
+ is_private,
118
+ size,
119
+ validate_upload,
120
+ ext_id
117
121
  },
118
122
  file,
119
123
  signal,
120
124
  path: { space_id: resolvedSpaceId },
121
125
  fetchOptions
122
126
  });
123
- const { short_filename, asset_folder_id, is_private, size, validate_upload, ...metadata } = body;
124
- if (Object.values(metadata).some((v) => v !== void 0 && v !== null)) {
125
- await wrapRequest(() => require_sdk_gen.update({
127
+ if (Object.values(metadataOnly).some((v) => v !== void 0 && v !== null)) {
128
+ await wrapRequest(() => require_sdk_gen.updateAsset({
126
129
  client,
127
130
  path: {
128
131
  space_id: resolvedSpaceId,
129
- asset_id: asset.id
132
+ id: asset.id
130
133
  },
131
- body: { asset: metadata },
134
+ body: { asset: metadataOnly },
132
135
  signal,
133
136
  throwOnError: true,
134
137
  ...kyOpts
135
138
  }), true);
136
- return (await wrapRequest(() => require_sdk_gen.get({
139
+ return (await wrapRequest(() => require_sdk_gen.getAsset({
137
140
  client,
138
141
  path: {
139
142
  space_id: resolvedSpaceId,
140
- asset_id: asset.id
143
+ id: asset.id
141
144
  },
142
145
  signal,
143
146
  throwOnError: true,
@@ -149,11 +152,11 @@ function createAssetsResource(deps) {
149
152
  get(assetId, options = {}) {
150
153
  const { signal, path, throwOnError, fetchOptions } = options;
151
154
  const resolvedSpaceId = getSpaceId(path);
152
- return wrapRequest(() => require_sdk_gen.get({
155
+ return wrapRequest(() => require_sdk_gen.getAsset({
153
156
  client,
154
157
  path: {
155
158
  space_id: resolvedSpaceId,
156
- asset_id: assetId
159
+ id: assetId
157
160
  },
158
161
  signal,
159
162
  ...throwOnError === void 0 ? {} : { throwOnError },
@@ -172,45 +175,42 @@ function createAssetsResource(deps) {
172
175
  } } : {};
173
176
  if (file !== void 0) {
174
177
  const { short_filename, ...assetBody } = body;
175
- const signResult = await wrapRequest(() => require_sdk_gen.signResponseObject({
178
+ const signResult = await wrapRequest(() => require_sdk_gen.createAsset({
176
179
  client,
177
180
  path: { space_id: resolvedSpaceId },
178
- body: {
179
- filename: short_filename,
180
- id: Number(assetId)
181
- },
181
+ query: { filename: short_filename },
182
182
  signal,
183
183
  throwOnError: true,
184
184
  ...kyOpts
185
185
  }), true);
186
186
  if (!signResult.data.id) throw new Error("Invalid signed response: missing id");
187
187
  await uploadToS3(signResult.data, file, short_filename);
188
- await wrapRequest(() => require_sdk_gen.finalize({
188
+ await wrapRequest(() => require_sdk_gen.finishAssetUpload({
189
189
  client,
190
190
  path: {
191
191
  space_id: resolvedSpaceId,
192
- signed_response_object_id: String(signResult.data.id)
192
+ id: Number(signResult.data.id)
193
193
  },
194
194
  signal,
195
195
  throwOnError: true,
196
196
  ...kyOpts
197
197
  }), true);
198
- if (assetBody.asset && Object.keys(assetBody.asset).length > 0) await wrapRequest(() => require_sdk_gen.update({
198
+ if (hasDefinedFields(assetBody.asset)) await wrapRequest(() => require_sdk_gen.updateAsset({
199
199
  client,
200
200
  path: {
201
201
  space_id: resolvedSpaceId,
202
- asset_id: assetId
202
+ id: assetId
203
203
  },
204
204
  body: assetBody,
205
205
  signal,
206
206
  throwOnError: true,
207
207
  ...kyOpts
208
208
  }), true);
209
- } else await wrapRequest(() => require_sdk_gen.update({
209
+ } else await wrapRequest(() => require_sdk_gen.updateAsset({
210
210
  client,
211
211
  path: {
212
212
  space_id: resolvedSpaceId,
213
- asset_id: assetId
213
+ id: assetId
214
214
  },
215
215
  body,
216
216
  signal,
@@ -221,11 +221,11 @@ function createAssetsResource(deps) {
221
221
  delete(assetId, options = {}) {
222
222
  const { signal, path, throwOnError, fetchOptions } = options;
223
223
  const resolvedSpaceId = getSpaceId(path);
224
- return wrapRequest(() => require_sdk_gen.delete_({
224
+ return wrapRequest(() => require_sdk_gen.deleteAsset({
225
225
  client,
226
226
  path: {
227
227
  space_id: resolvedSpaceId,
228
- asset_id: assetId
228
+ id: assetId
229
229
  },
230
230
  signal,
231
231
  ...throwOnError === void 0 ? {} : { throwOnError },
@@ -235,14 +235,14 @@ function createAssetsResource(deps) {
235
235
  } } : {}
236
236
  }), throwOnError);
237
237
  },
238
- finalize(signedResponseObjectId, options = {}) {
238
+ finalize(assetId, options = {}) {
239
239
  const { signal, path, throwOnError, fetchOptions } = options;
240
240
  const resolvedSpaceId = getSpaceId(path);
241
- return wrapRequest(() => require_sdk_gen.finalize({
241
+ return wrapRequest(() => require_sdk_gen.finishAssetUpload({
242
242
  client,
243
243
  path: {
244
244
  space_id: resolvedSpaceId,
245
- signed_response_object_id: signedResponseObjectId
245
+ id: assetId
246
246
  },
247
247
  signal,
248
248
  ...throwOnError === void 0 ? {} : { throwOnError },
@@ -255,7 +255,7 @@ function createAssetsResource(deps) {
255
255
  deleteMany(options) {
256
256
  const { body, signal, path, throwOnError, fetchOptions } = options;
257
257
  const resolvedSpaceId = getSpaceId(path);
258
- return wrapRequest(() => require_sdk_gen.deleteMany({
258
+ return wrapRequest(() => require_sdk_gen.bulkDestroyAssets({
259
259
  client,
260
260
  path: { space_id: resolvedSpaceId },
261
261
  body,
@@ -270,7 +270,7 @@ function createAssetsResource(deps) {
270
270
  bulkMove(options) {
271
271
  const { body, signal, path, throwOnError, fetchOptions } = options;
272
272
  const resolvedSpaceId = getSpaceId(path);
273
- return wrapRequest(() => require_sdk_gen.bulkMove({
273
+ return wrapRequest(() => require_sdk_gen.bulkUpdateAssets({
274
274
  client,
275
275
  path: { space_id: resolvedSpaceId },
276
276
  body,
@@ -285,7 +285,7 @@ function createAssetsResource(deps) {
285
285
  bulkRestore(options) {
286
286
  const { body, signal, path, throwOnError, fetchOptions } = options;
287
287
  const resolvedSpaceId = getSpaceId(path);
288
- return wrapRequest(() => require_sdk_gen.bulkRestore({
288
+ return wrapRequest(() => require_sdk_gen.bulkRestoreAssets({
289
289
  client,
290
290
  path: { space_id: resolvedSpaceId },
291
291
  body,
@@ -296,6 +296,24 @@ function createAssetsResource(deps) {
296
296
  ...fetchOptions
297
297
  } } : {}
298
298
  }), throwOnError);
299
+ },
300
+ convertToShared(assetId, options) {
301
+ const { query, signal, path, throwOnError, fetchOptions } = options;
302
+ const resolvedSpaceId = getSpaceId(path);
303
+ return wrapRequest(() => client.post({
304
+ url: "/v1/spaces/{space_id}/assets/{asset_id}/convert",
305
+ path: {
306
+ space_id: resolvedSpaceId,
307
+ asset_id: assetId
308
+ },
309
+ query,
310
+ signal,
311
+ ...throwOnError === void 0 ? {} : { throwOnError },
312
+ ...fetchOptions ? { kyOptions: {
313
+ ...client.getConfig().kyOptions,
314
+ ...fetchOptions
315
+ } } : {}
316
+ }), throwOnError);
299
317
  }
300
318
  };
301
319
  }
@@ -1 +1 @@
1
- {"version":3,"file":"assets.cjs","names":["ClientError","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 '../client';\nimport { ClientError } from '../error';\nimport { resolveSpaceId, type SpaceIdPathOverride } from './shared';\n\nexport type AssetListQuery = NonNullable<ListData['query']>;\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. */\nasync function uploadToS3(\n signedResponse: SignResponseObjectResponses[200],\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\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?: 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 = DefaultThrowOnError>(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 },\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 = DefaultThrowOnError>(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 = DefaultThrowOnError>(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 = DefaultThrowOnError>(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 = DefaultThrowOnError>(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 = DefaultThrowOnError>(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 = DefaultThrowOnError>(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}\n"],"mappings":"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"}
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 CreateAsset as SignedResponseObject,\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. */\nasync function uploadToS3(\n signedResponse: SignedResponseObject,\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,37 +1,32 @@
1
- import { AssetSignRequest, AssetUpdate, ListData } 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
4
- type AssetListQuery = NonNullable<ListData['query']>;
5
+ type AssetListQuery = NonNullable<ListAssetsData['query']>;
5
6
  /**
6
- * Fields for initiating an asset upload. Pass this to `upload()`, `create()`,
7
- * or `update()` alongside a file buffer.
7
+ * Return shape of `list()`.
8
8
  *
9
- * Uses `short_filename` (e.g. `"hero.png"`) to clearly distinguish it from
10
- * `Asset.filename`, which is the full CDN URL assigned by Storyblok after upload.
11
- *
12
- * If you need to call the raw sign endpoint directly, use
13
- * `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.
14
22
  */
15
- interface AssetUploadRequest {
16
- /** The desired filename for the asset (e.g. `"hero.png"`). Corresponds to `Asset.short_filename`. */
17
- short_filename: string;
18
- /** When set, the upload replaces the file of an existing asset with this ID. */
19
- id?: AssetSignRequest['id'];
20
- /** Place the asset in this folder. */
21
- asset_folder_id?: AssetSignRequest['asset_folder_id'];
22
- /** Mark the asset as private (inaccessible without a signed URL). */
23
- is_private?: AssetSignRequest['is_private'];
24
- /** Image dimensions in `"<width>x<height>"` format (e.g. `"400x500"`). */
25
- size?: AssetSignRequest['size'];
26
- /** Set to `1` to enable server-side upload validation. */
27
- validate_upload?: AssetSignRequest['validate_upload'];
28
- }
23
+ type AssetUploadRequest = {
24
+ /** The desired filename for the asset (e.g. `"hero.png"`). */short_filename: string;
25
+ } & Partial<Omit<NonNullable<CreateAssetData['query']>, 'filename'>>;
29
26
  /**
30
- * Input for `create()`. Combines upload fields (`short_filename`,
31
- * `asset_folder_id`, etc.) with writable metadata (`alt`, `title`,
32
- * `copyright`, etc.). The file buffer is passed separately.
27
+ * Input for `create()`. Combines upload fields with writable metadata.
33
28
  */
34
- type AssetCreate = AssetUpdate & AssetUploadRequest;
29
+ type AssetCreate = AssetUploadRequest & NonNullable<UpdateAssetData['body']['asset']>;
35
30
  //#endregion
36
- export { AssetCreate, AssetListQuery, AssetUploadRequest };
31
+ export { AssetCreate, AssetListQuery, AssetUploadRequest, ListAssetsResult };
37
32
  //# sourceMappingURL=assets.d.cts.map
@@ -1,36 +1,31 @@
1
- import { AssetSignRequest, AssetUpdate, ListData } 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
3
- type AssetListQuery = NonNullable<ListData['query']>;
4
+ type AssetListQuery = NonNullable<ListAssetsData['query']>;
4
5
  /**
5
- * Fields for initiating an asset upload. Pass this to `upload()`, `create()`,
6
- * or `update()` alongside a file buffer.
6
+ * Return shape of `list()`.
7
7
  *
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.
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.
13
21
  */
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
- }
22
+ type AssetUploadRequest = {
23
+ /** The desired filename for the asset (e.g. `"hero.png"`). */short_filename: string;
24
+ } & Partial<Omit<NonNullable<CreateAssetData['query']>, 'filename'>>;
28
25
  /**
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.
26
+ * Input for `create()`. Combines upload fields with writable metadata.
32
27
  */
33
- type AssetCreate = AssetUpdate & AssetUploadRequest;
28
+ type AssetCreate = AssetUploadRequest & NonNullable<UpdateAssetData['body']['asset']>;
34
29
  //#endregion
35
- export { AssetCreate, AssetListQuery, AssetUploadRequest };
30
+ export { AssetCreate, AssetListQuery, AssetUploadRequest, ListAssetsResult };
36
31
  //# sourceMappingURL=assets.d.mts.map