@strapi/upload 5.33.4 → 5.34.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 (120) hide show
  1. package/dist/admin/future/App.js +45 -0
  2. package/dist/admin/future/App.js.map +1 -0
  3. package/dist/admin/future/App.mjs +43 -0
  4. package/dist/admin/future/App.mjs.map +1 -0
  5. package/dist/admin/future/pages/AIGenerationPage.js +24 -0
  6. package/dist/admin/future/pages/AIGenerationPage.js.map +1 -0
  7. package/dist/admin/future/pages/AIGenerationPage.mjs +22 -0
  8. package/dist/admin/future/pages/AIGenerationPage.mjs.map +1 -0
  9. package/dist/admin/future/pages/MediaLibraryPage.js +55 -0
  10. package/dist/admin/future/pages/MediaLibraryPage.js.map +1 -0
  11. package/dist/admin/future/pages/MediaLibraryPage.mjs +53 -0
  12. package/dist/admin/future/pages/MediaLibraryPage.mjs.map +1 -0
  13. package/dist/admin/hooks/useAIMetadataJob.js +114 -0
  14. package/dist/admin/hooks/useAIMetadataJob.js.map +1 -0
  15. package/dist/admin/hooks/useAIMetadataJob.mjs +93 -0
  16. package/dist/admin/hooks/useAIMetadataJob.mjs.map +1 -0
  17. package/dist/admin/index.js +23 -4
  18. package/dist/admin/index.js.map +1 -1
  19. package/dist/admin/index.mjs +24 -5
  20. package/dist/admin/index.mjs.map +1 -1
  21. package/dist/admin/package.json.js +6 -5
  22. package/dist/admin/package.json.js.map +1 -1
  23. package/dist/admin/package.json.mjs +6 -5
  24. package/dist/admin/package.json.mjs.map +1 -1
  25. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +1 -0
  26. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
  27. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +1 -0
  28. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
  29. package/dist/admin/pages/App/components/Header.js +3 -0
  30. package/dist/admin/pages/App/components/Header.js.map +1 -1
  31. package/dist/admin/pages/App/components/Header.mjs +3 -0
  32. package/dist/admin/pages/App/components/Header.mjs.map +1 -1
  33. package/dist/admin/pages/SettingsPage/SettingsPage.js +252 -67
  34. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
  35. package/dist/admin/pages/SettingsPage/SettingsPage.mjs +256 -71
  36. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
  37. package/dist/admin/src/future/App.d.ts +1 -0
  38. package/dist/admin/src/future/pages/AIGenerationPage.d.ts +1 -0
  39. package/dist/admin/src/future/pages/MediaLibraryPage.d.ts +1 -0
  40. package/dist/admin/src/future/services/api.d.ts +2 -0
  41. package/dist/admin/src/future/services/settings.d.ts +2 -0
  42. package/dist/admin/src/hooks/useAIMetadataJob.d.ts +9 -0
  43. package/dist/admin/translations/de.json.js +44 -1
  44. package/dist/admin/translations/de.json.js.map +1 -1
  45. package/dist/admin/translations/de.json.mjs +44 -1
  46. package/dist/admin/translations/de.json.mjs.map +1 -1
  47. package/dist/admin/translations/en.json.js +9 -0
  48. package/dist/admin/translations/en.json.js.map +1 -1
  49. package/dist/admin/translations/en.json.mjs +9 -0
  50. package/dist/admin/translations/en.json.mjs.map +1 -1
  51. package/dist/server/bootstrap.js +1 -0
  52. package/dist/server/bootstrap.js.map +1 -1
  53. package/dist/server/bootstrap.mjs +1 -0
  54. package/dist/server/bootstrap.mjs.map +1 -1
  55. package/dist/server/controllers/admin-file.js +86 -0
  56. package/dist/server/controllers/admin-file.js.map +1 -1
  57. package/dist/server/controllers/admin-file.mjs +86 -0
  58. package/dist/server/controllers/admin-file.mjs.map +1 -1
  59. package/dist/server/controllers/admin-upload.js +3 -23
  60. package/dist/server/controllers/admin-upload.js.map +1 -1
  61. package/dist/server/controllers/admin-upload.mjs +3 -23
  62. package/dist/server/controllers/admin-upload.mjs.map +1 -1
  63. package/dist/server/models/ai-metadata-job.js +36 -0
  64. package/dist/server/models/ai-metadata-job.js.map +1 -0
  65. package/dist/server/models/ai-metadata-job.mjs +33 -0
  66. package/dist/server/models/ai-metadata-job.mjs.map +1 -0
  67. package/dist/server/register.js +3 -0
  68. package/dist/server/register.js.map +1 -1
  69. package/dist/server/register.mjs +3 -0
  70. package/dist/server/register.mjs.map +1 -1
  71. package/dist/server/routes/admin.js +46 -0
  72. package/dist/server/routes/admin.js.map +1 -1
  73. package/dist/server/routes/admin.mjs +46 -0
  74. package/dist/server/routes/admin.mjs.map +1 -1
  75. package/dist/server/services/ai-metadata-jobs.js +72 -0
  76. package/dist/server/services/ai-metadata-jobs.js.map +1 -0
  77. package/dist/server/services/ai-metadata-jobs.mjs +70 -0
  78. package/dist/server/services/ai-metadata-jobs.mjs.map +1 -0
  79. package/dist/server/services/ai-metadata.js +170 -20
  80. package/dist/server/services/ai-metadata.js.map +1 -1
  81. package/dist/server/services/ai-metadata.mjs +170 -20
  82. package/dist/server/services/ai-metadata.mjs.map +1 -1
  83. package/dist/server/services/index.js +3 -1
  84. package/dist/server/services/index.js.map +1 -1
  85. package/dist/server/services/index.mjs +3 -1
  86. package/dist/server/services/index.mjs.map +1 -1
  87. package/dist/server/src/bootstrap.d.ts.map +1 -1
  88. package/dist/server/src/controllers/admin-file.d.ts +3 -0
  89. package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
  90. package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
  91. package/dist/server/src/controllers/index.d.ts +3 -0
  92. package/dist/server/src/controllers/index.d.ts.map +1 -1
  93. package/dist/server/src/index.d.ts +27 -1
  94. package/dist/server/src/index.d.ts.map +1 -1
  95. package/dist/server/src/models/ai-metadata-job.d.ts +5 -0
  96. package/dist/server/src/models/ai-metadata-job.d.ts.map +1 -0
  97. package/dist/server/src/models/index.d.ts +5 -0
  98. package/dist/server/src/models/index.d.ts.map +1 -0
  99. package/dist/server/src/register.d.ts.map +1 -1
  100. package/dist/server/src/routes/admin.d.ts.map +1 -1
  101. package/dist/server/src/services/ai-metadata-jobs.d.ts +14 -0
  102. package/dist/server/src/services/ai-metadata-jobs.d.ts.map +1 -0
  103. package/dist/server/src/services/ai-metadata.d.ts +25 -2
  104. package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
  105. package/dist/server/src/services/index.d.ts +24 -1
  106. package/dist/server/src/services/index.d.ts.map +1 -1
  107. package/dist/server/src/utils/images.d.ts +7 -0
  108. package/dist/server/src/utils/images.d.ts.map +1 -0
  109. package/dist/server/src/utils/index.d.ts +2 -0
  110. package/dist/server/src/utils/index.d.ts.map +1 -1
  111. package/dist/server/utils/images.js +35 -0
  112. package/dist/server/utils/images.js.map +1 -0
  113. package/dist/server/utils/images.mjs +33 -0
  114. package/dist/server/utils/images.mjs.map +1 -0
  115. package/dist/server/utils/index.js.map +1 -1
  116. package/dist/server/utils/index.mjs.map +1 -1
  117. package/dist/shared/contracts/ai-metadata-jobs.d.ts +53 -0
  118. package/dist/shared/contracts/ai-metadata-jobs.d.ts.map +1 -0
  119. package/dist/shared/contracts/files.d.ts +33 -0
  120. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,iBAAiB,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,eAAe,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,KAAK,QAAQ,GAAG;IACd,MAAM,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;IAClC,oBAAoB,EAAE,OAAO,iBAAiB,CAAC;IAC/C,QAAQ,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;IACtC,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,IAAI,CAAC;IAClB,aAAa,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IAChD,OAAO,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;IACpC,mBAAmB,EAAE,OAAO,eAAe,CAAC;IAC5C,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;CACxD,CAAC;AAEF,eAAO,MAAM,UAAU,uCAAwC,KAAK,KAAG,QAAQ,CAAC,KAAK,CAEpF,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,iBAAiB,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,eAAe,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,QAAQ,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,MAAM,MAAM,oBAAoB,CAAC;AAC7C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAC;AACzC,OAAO,KAAK,aAAa,MAAM,4BAA4B,CAAC;AAC5D,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAEhF,KAAK,QAAQ,GAAG;IACd,MAAM,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;IAClC,oBAAoB,EAAE,OAAO,iBAAiB,CAAC;IAC/C,QAAQ,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;IACtC,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,IAAI,EAAE,OAAO,IAAI,CAAC;IAClB,aAAa,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;IAChD,OAAO,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;IACpC,mBAAmB,EAAE,OAAO,eAAe,CAAC;IAC5C,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;IACvD,cAAc,EAAE,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAC;CAChE,CAAC;AAEF,eAAO,MAAM,UAAU,uCAAwC,KAAK,KAAG,QAAQ,CAAC,KAAK,CAEpF,CAAC"}
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Fetches an image from a URL and returns it as a Blob
5
+ */ async function fetchImageAsBlob(file, serverAbsoluteUrl, logger) {
6
+ const fullUrl = file.provider === 'local' ? serverAbsoluteUrl + file.filepath : file.filepath;
7
+ const resp = await fetch(fullUrl);
8
+ if (!resp.ok) {
9
+ logger.error('Failed to fetch image', {
10
+ fullUrl,
11
+ status: resp.status,
12
+ statusText: resp.statusText
13
+ });
14
+ throw new Error(`Failed to fetch image from URL: ${fullUrl} (${resp.status})`);
15
+ }
16
+ const arrayBuffer = await resp.arrayBuffer();
17
+ return new Blob([
18
+ arrayBuffer
19
+ ], {
20
+ type: file.mimetype || undefined
21
+ });
22
+ }
23
+ /**
24
+ * Builds FormData from an array of input files by fetching each image
25
+ */ async function buildFormDataFromFiles(files, serverAbsoluteUrl, logger) {
26
+ const formData = new FormData();
27
+ for (const file of files){
28
+ const blob = await fetchImageAsBlob(file, serverAbsoluteUrl, logger);
29
+ formData.append('files', blob);
30
+ }
31
+ return formData;
32
+ }
33
+
34
+ exports.buildFormDataFromFiles = buildFormDataFromFiles;
35
+ //# sourceMappingURL=images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images.js","sources":["../../../server/src/utils/images.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { InputFile } from '../types';\n\n/**\n * Fetches an image from a URL and returns it as a Blob\n */\nasync function fetchImageAsBlob(\n file: InputFile,\n serverAbsoluteUrl: string,\n logger: Core.Strapi['log']\n): Promise<Blob> {\n const fullUrl = file.provider === 'local' ? serverAbsoluteUrl + file.filepath : file.filepath;\n\n const resp = await fetch(fullUrl);\n if (!resp.ok) {\n logger.error('Failed to fetch image', {\n fullUrl,\n status: resp.status,\n statusText: resp.statusText,\n });\n throw new Error(`Failed to fetch image from URL: ${fullUrl} (${resp.status})`);\n }\n\n const arrayBuffer = await resp.arrayBuffer();\n return new Blob([arrayBuffer], { type: file.mimetype || undefined });\n}\n\n/**\n * Builds FormData from an array of input files by fetching each image\n */\nexport async function buildFormDataFromFiles(\n files: InputFile[],\n serverAbsoluteUrl: string,\n logger: Core.Strapi['log']\n): Promise<FormData> {\n const formData = new FormData();\n\n for (const file of files) {\n const blob = await fetchImageAsBlob(file, serverAbsoluteUrl, logger);\n formData.append('files', blob);\n }\n\n return formData;\n}\n"],"names":["fetchImageAsBlob","file","serverAbsoluteUrl","logger","fullUrl","provider","filepath","resp","fetch","ok","error","status","statusText","Error","arrayBuffer","Blob","type","mimetype","undefined","buildFormDataFromFiles","files","formData","FormData","blob","append"],"mappings":";;AAGA;;AAEC,IACD,eAAeA,gBACbC,CAAAA,IAAe,EACfC,iBAAyB,EACzBC,MAA0B,EAAA;IAE1B,MAAMC,OAAAA,GAAUH,IAAKI,CAAAA,QAAQ,KAAK,OAAA,GAAUH,oBAAoBD,IAAKK,CAAAA,QAAQ,GAAGL,IAAAA,CAAKK,QAAQ;IAE7F,MAAMC,IAAAA,GAAO,MAAMC,KAAMJ,CAAAA,OAAAA,CAAAA;IACzB,IAAI,CAACG,IAAKE,CAAAA,EAAE,EAAE;QACZN,MAAOO,CAAAA,KAAK,CAAC,uBAAyB,EAAA;AACpCN,YAAAA,OAAAA;AACAO,YAAAA,MAAAA,EAAQJ,KAAKI,MAAM;AACnBC,YAAAA,UAAAA,EAAYL,KAAKK;AACnB,SAAA,CAAA;AACA,QAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,gCAAgC,EAAET,OAAAA,CAAQ,EAAE,EAAEG,IAAKI,CAAAA,MAAM,CAAC,CAAC,CAAC,CAAA;AAC/E;IAEA,MAAMG,WAAAA,GAAc,MAAMP,IAAAA,CAAKO,WAAW,EAAA;AAC1C,IAAA,OAAO,IAAIC,IAAK,CAAA;AAACD,QAAAA;KAAY,EAAE;QAAEE,IAAMf,EAAAA,IAAAA,CAAKgB,QAAQ,IAAIC;AAAU,KAAA,CAAA;AACpE;AAEA;;AAEC,IACM,eAAeC,sBAAAA,CACpBC,KAAkB,EAClBlB,iBAAyB,EACzBC,MAA0B,EAAA;AAE1B,IAAA,MAAMkB,WAAW,IAAIC,QAAAA,EAAAA;IAErB,KAAK,MAAMrB,QAAQmB,KAAO,CAAA;AACxB,QAAA,MAAMG,IAAO,GAAA,MAAMvB,gBAAiBC,CAAAA,IAAAA,EAAMC,iBAAmBC,EAAAA,MAAAA,CAAAA;QAC7DkB,QAASG,CAAAA,MAAM,CAAC,OAASD,EAAAA,IAAAA,CAAAA;AAC3B;IAEA,OAAOF,QAAAA;AACT;;;;"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Fetches an image from a URL and returns it as a Blob
3
+ */ async function fetchImageAsBlob(file, serverAbsoluteUrl, logger) {
4
+ const fullUrl = file.provider === 'local' ? serverAbsoluteUrl + file.filepath : file.filepath;
5
+ const resp = await fetch(fullUrl);
6
+ if (!resp.ok) {
7
+ logger.error('Failed to fetch image', {
8
+ fullUrl,
9
+ status: resp.status,
10
+ statusText: resp.statusText
11
+ });
12
+ throw new Error(`Failed to fetch image from URL: ${fullUrl} (${resp.status})`);
13
+ }
14
+ const arrayBuffer = await resp.arrayBuffer();
15
+ return new Blob([
16
+ arrayBuffer
17
+ ], {
18
+ type: file.mimetype || undefined
19
+ });
20
+ }
21
+ /**
22
+ * Builds FormData from an array of input files by fetching each image
23
+ */ async function buildFormDataFromFiles(files, serverAbsoluteUrl, logger) {
24
+ const formData = new FormData();
25
+ for (const file of files){
26
+ const blob = await fetchImageAsBlob(file, serverAbsoluteUrl, logger);
27
+ formData.append('files', blob);
28
+ }
29
+ return formData;
30
+ }
31
+
32
+ export { buildFormDataFromFiles };
33
+ //# sourceMappingURL=images.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"images.mjs","sources":["../../../server/src/utils/images.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { InputFile } from '../types';\n\n/**\n * Fetches an image from a URL and returns it as a Blob\n */\nasync function fetchImageAsBlob(\n file: InputFile,\n serverAbsoluteUrl: string,\n logger: Core.Strapi['log']\n): Promise<Blob> {\n const fullUrl = file.provider === 'local' ? serverAbsoluteUrl + file.filepath : file.filepath;\n\n const resp = await fetch(fullUrl);\n if (!resp.ok) {\n logger.error('Failed to fetch image', {\n fullUrl,\n status: resp.status,\n statusText: resp.statusText,\n });\n throw new Error(`Failed to fetch image from URL: ${fullUrl} (${resp.status})`);\n }\n\n const arrayBuffer = await resp.arrayBuffer();\n return new Blob([arrayBuffer], { type: file.mimetype || undefined });\n}\n\n/**\n * Builds FormData from an array of input files by fetching each image\n */\nexport async function buildFormDataFromFiles(\n files: InputFile[],\n serverAbsoluteUrl: string,\n logger: Core.Strapi['log']\n): Promise<FormData> {\n const formData = new FormData();\n\n for (const file of files) {\n const blob = await fetchImageAsBlob(file, serverAbsoluteUrl, logger);\n formData.append('files', blob);\n }\n\n return formData;\n}\n"],"names":["fetchImageAsBlob","file","serverAbsoluteUrl","logger","fullUrl","provider","filepath","resp","fetch","ok","error","status","statusText","Error","arrayBuffer","Blob","type","mimetype","undefined","buildFormDataFromFiles","files","formData","FormData","blob","append"],"mappings":"AAGA;;AAEC,IACD,eAAeA,gBACbC,CAAAA,IAAe,EACfC,iBAAyB,EACzBC,MAA0B,EAAA;IAE1B,MAAMC,OAAAA,GAAUH,IAAKI,CAAAA,QAAQ,KAAK,OAAA,GAAUH,oBAAoBD,IAAKK,CAAAA,QAAQ,GAAGL,IAAAA,CAAKK,QAAQ;IAE7F,MAAMC,IAAAA,GAAO,MAAMC,KAAMJ,CAAAA,OAAAA,CAAAA;IACzB,IAAI,CAACG,IAAKE,CAAAA,EAAE,EAAE;QACZN,MAAOO,CAAAA,KAAK,CAAC,uBAAyB,EAAA;AACpCN,YAAAA,OAAAA;AACAO,YAAAA,MAAAA,EAAQJ,KAAKI,MAAM;AACnBC,YAAAA,UAAAA,EAAYL,KAAKK;AACnB,SAAA,CAAA;AACA,QAAA,MAAM,IAAIC,KAAAA,CAAM,CAAC,gCAAgC,EAAET,OAAAA,CAAQ,EAAE,EAAEG,IAAKI,CAAAA,MAAM,CAAC,CAAC,CAAC,CAAA;AAC/E;IAEA,MAAMG,WAAAA,GAAc,MAAMP,IAAAA,CAAKO,WAAW,EAAA;AAC1C,IAAA,OAAO,IAAIC,IAAK,CAAA;AAACD,QAAAA;KAAY,EAAE;QAAEE,IAAMf,EAAAA,IAAAA,CAAKgB,QAAQ,IAAIC;AAAU,KAAA,CAAA;AACpE;AAEA;;AAEC,IACM,eAAeC,sBAAAA,CACpBC,KAAkB,EAClBlB,iBAAyB,EACzBC,MAA0B,EAAA;AAE1B,IAAA,MAAMkB,WAAW,IAAIC,QAAAA,EAAAA;IAErB,KAAK,MAAMrB,QAAQmB,KAAO,CAAA;AACxB,QAAA,MAAMG,IAAO,GAAA,MAAMvB,gBAAiBC,CAAAA,IAAAA,EAAMC,iBAAmBC,EAAAA,MAAAA,CAAAA;QAC7DkB,QAASG,CAAAA,MAAM,CAAC,OAASD,EAAAA,IAAAA,CAAAA;AAC3B;IAEA,OAAOF,QAAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type upload from '../services/upload';\nimport type imageManipulation from '../services/image-manipulation';\nimport type apiUploadFolder from '../services/api-upload-folder';\nimport type provider from '../services/provider';\nimport type folder from '../services/folder';\nimport type file from '../services/file';\nimport type weeklyMetrics from '../services/weekly-metrics';\nimport type metrics from '../services/metrics';\nimport type extensions from '../services/extensions';\nimport type { createAIMetadataService } from '../services/ai-metadata';\n\ntype Services = {\n upload: ReturnType<typeof upload>;\n 'image-manipulation': typeof imageManipulation;\n provider: ReturnType<typeof provider>;\n folder: typeof folder;\n file: typeof file;\n weeklyMetrics: ReturnType<typeof weeklyMetrics>;\n metrics: ReturnType<typeof metrics>;\n 'api-upload-folder': typeof apiUploadFolder;\n extensions: typeof extensions;\n aiMetadata: ReturnType<typeof createAIMetadataService>;\n};\n\nexport const getService = <TName extends keyof Services>(name: TName): Services[TName] => {\n return strapi.plugin('upload').service<Services[TName]>(name);\n};\n"],"names":["getService","name","strapi","plugin","service"],"mappings":";;AAwBO,MAAMA,aAAa,CAA+BC,IAAAA,GAAAA;AACvD,IAAA,OAAOC,MAAOC,CAAAA,MAAM,CAAC,QAAA,CAAA,CAAUC,OAAO,CAAkBH,IAAAA,CAAAA;AAC1D;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type upload from '../services/upload';\nimport type imageManipulation from '../services/image-manipulation';\nimport type apiUploadFolder from '../services/api-upload-folder';\nimport type provider from '../services/provider';\nimport type folder from '../services/folder';\nimport type file from '../services/file';\nimport type weeklyMetrics from '../services/weekly-metrics';\nimport type metrics from '../services/metrics';\nimport type extensions from '../services/extensions';\nimport type { createAIMetadataService } from '../services/ai-metadata';\nimport type { createAIMetadataJobsService } from '../services/ai-metadata-jobs';\n\ntype Services = {\n upload: ReturnType<typeof upload>;\n 'image-manipulation': typeof imageManipulation;\n provider: ReturnType<typeof provider>;\n folder: typeof folder;\n file: typeof file;\n weeklyMetrics: ReturnType<typeof weeklyMetrics>;\n metrics: ReturnType<typeof metrics>;\n 'api-upload-folder': typeof apiUploadFolder;\n extensions: typeof extensions;\n aiMetadata: ReturnType<typeof createAIMetadataService>;\n aiMetadataJobs: ReturnType<typeof createAIMetadataJobsService>;\n};\n\nexport const getService = <TName extends keyof Services>(name: TName): Services[TName] => {\n return strapi.plugin('upload').service<Services[TName]>(name);\n};\n"],"names":["getService","name","strapi","plugin","service"],"mappings":";;AA0BO,MAAMA,aAAa,CAA+BC,IAAAA,GAAAA;AACvD,IAAA,OAAOC,MAAOC,CAAAA,MAAM,CAAC,QAAA,CAAA,CAAUC,OAAO,CAAkBH,IAAAA,CAAAA;AAC1D;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type upload from '../services/upload';\nimport type imageManipulation from '../services/image-manipulation';\nimport type apiUploadFolder from '../services/api-upload-folder';\nimport type provider from '../services/provider';\nimport type folder from '../services/folder';\nimport type file from '../services/file';\nimport type weeklyMetrics from '../services/weekly-metrics';\nimport type metrics from '../services/metrics';\nimport type extensions from '../services/extensions';\nimport type { createAIMetadataService } from '../services/ai-metadata';\n\ntype Services = {\n upload: ReturnType<typeof upload>;\n 'image-manipulation': typeof imageManipulation;\n provider: ReturnType<typeof provider>;\n folder: typeof folder;\n file: typeof file;\n weeklyMetrics: ReturnType<typeof weeklyMetrics>;\n metrics: ReturnType<typeof metrics>;\n 'api-upload-folder': typeof apiUploadFolder;\n extensions: typeof extensions;\n aiMetadata: ReturnType<typeof createAIMetadataService>;\n};\n\nexport const getService = <TName extends keyof Services>(name: TName): Services[TName] => {\n return strapi.plugin('upload').service<Services[TName]>(name);\n};\n"],"names":["getService","name","strapi","plugin","service"],"mappings":"AAwBO,MAAMA,aAAa,CAA+BC,IAAAA,GAAAA;AACvD,IAAA,OAAOC,MAAOC,CAAAA,MAAM,CAAC,QAAA,CAAA,CAAUC,OAAO,CAAkBH,IAAAA,CAAAA;AAC1D;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/utils/index.ts"],"sourcesContent":["import type upload from '../services/upload';\nimport type imageManipulation from '../services/image-manipulation';\nimport type apiUploadFolder from '../services/api-upload-folder';\nimport type provider from '../services/provider';\nimport type folder from '../services/folder';\nimport type file from '../services/file';\nimport type weeklyMetrics from '../services/weekly-metrics';\nimport type metrics from '../services/metrics';\nimport type extensions from '../services/extensions';\nimport type { createAIMetadataService } from '../services/ai-metadata';\nimport type { createAIMetadataJobsService } from '../services/ai-metadata-jobs';\n\ntype Services = {\n upload: ReturnType<typeof upload>;\n 'image-manipulation': typeof imageManipulation;\n provider: ReturnType<typeof provider>;\n folder: typeof folder;\n file: typeof file;\n weeklyMetrics: ReturnType<typeof weeklyMetrics>;\n metrics: ReturnType<typeof metrics>;\n 'api-upload-folder': typeof apiUploadFolder;\n extensions: typeof extensions;\n aiMetadata: ReturnType<typeof createAIMetadataService>;\n aiMetadataJobs: ReturnType<typeof createAIMetadataJobsService>;\n};\n\nexport const getService = <TName extends keyof Services>(name: TName): Services[TName] => {\n return strapi.plugin('upload').service<Services[TName]>(name);\n};\n"],"names":["getService","name","strapi","plugin","service"],"mappings":"AA0BO,MAAMA,aAAa,CAA+BC,IAAAA,GAAAA;AACvD,IAAA,OAAOC,MAAOC,CAAAA,MAAM,CAAC,QAAA,CAAA,CAAUC,OAAO,CAAkBH,IAAAA,CAAAA;AAC1D;;;;"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * AI Metadata Job types shared between admin and server
3
+ */
4
+ export interface AIMetadataJob {
5
+ id: number;
6
+ status: 'processing' | 'completed' | 'failed';
7
+ createdAt: Date;
8
+ completedAt?: Date;
9
+ }
10
+ /**
11
+ * GET /upload/actions/generate-ai-metadata/latest
12
+ *
13
+ * Return the latest AI metadata job
14
+ */
15
+ export declare namespace GetLatestAIMetadataJob {
16
+ interface Request {
17
+ query?: {};
18
+ }
19
+ interface Response {
20
+ data: AIMetadataJob | null;
21
+ }
22
+ }
23
+ /**
24
+ * POST /upload/actions/generate-ai-metadata
25
+ *
26
+ * Start a new AI metadata generation job
27
+ */
28
+ export declare namespace StartAIMetadataJob {
29
+ interface Request {
30
+ body?: {};
31
+ }
32
+ interface Response {
33
+ data: {
34
+ jobId: number;
35
+ status: string;
36
+ };
37
+ }
38
+ }
39
+ /**
40
+ * GET /upload/actions/generate-ai-metadata/count
41
+ *
42
+ * Return count of images without metadata
43
+ */
44
+ export declare namespace GetAIMetadataCount {
45
+ interface Request {
46
+ query?: {};
47
+ }
48
+ interface Response {
49
+ data: {
50
+ count: number;
51
+ };
52
+ }
53
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-metadata-jobs.d.ts","sourceRoot":"","sources":["../../../shared/contracts/ai-metadata-jobs.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC9C,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,WAAW,sBAAsB,CAAC;IAC9C,UAAiB,OAAO;QACtB,KAAK,CAAC,EAAE,EAAE,CAAC;KACZ;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;KAC5B;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,WAAW,kBAAkB,CAAC;IAC1C,UAAiB,OAAO;QACtB,IAAI,CAAC,EAAE,EAAE,CAAC;KACX;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC;YACd,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,WAAW,kBAAkB,CAAC;IAC1C,UAAiB,OAAO;QACtB,KAAK,CAAC,EAAE,EAAE,CAAC;KACZ;IAED,UAAiB,QAAQ;QACvB,IAAI,EAAE;YACJ,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH;CACF"}
@@ -230,4 +230,37 @@ export declare namespace BulkUpdateFiles {
230
230
  error?: errors.ApplicationError | errors.ValidationError;
231
231
  }
232
232
  }
233
+ /**
234
+ * GET /upload/actions/generate-ai-metadata/count - Get count of images without metadata
235
+ */
236
+ export declare namespace GetAIMetadataCount {
237
+ interface Request {
238
+ query: {};
239
+ }
240
+ interface Response {
241
+ data: {
242
+ imagesWithoutMetadataCount: number;
243
+ totalImages: number;
244
+ };
245
+ error?: errors.ApplicationError;
246
+ }
247
+ }
248
+ /**
249
+ * POST /upload/actions/generate-ai-metadata - Start AI metadata generation job
250
+ */
251
+ export declare namespace GenerateAIMetadata {
252
+ interface Request {
253
+ body: {};
254
+ }
255
+ interface Response {
256
+ data: {
257
+ jobId: number;
258
+ status: 'pending';
259
+ } | {
260
+ count: 0;
261
+ message: string;
262
+ };
263
+ error?: errors.ApplicationError;
264
+ }
265
+ }
233
266
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/upload",
3
- "version": "5.33.4",
3
+ "version": "5.34.0",
4
4
  "description": "Makes it easy to upload images and files to your Strapi Application.",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": {
@@ -62,10 +62,11 @@
62
62
  "dependencies": {
63
63
  "@mux/mux-player-react": "3.1.0",
64
64
  "@reduxjs/toolkit": "1.9.7",
65
+ "@strapi/database": "5.33.3",
65
66
  "@strapi/design-system": "2.1.2",
66
67
  "@strapi/icons": "2.1.2",
67
- "@strapi/provider-upload-local": "5.33.4",
68
- "@strapi/utils": "5.33.4",
68
+ "@strapi/provider-upload-local": "5.34.0",
69
+ "@strapi/utils": "5.34.0",
69
70
  "byte-size": "8.1.1",
70
71
  "cropperjs": "1.6.1",
71
72
  "date-fns": "2.30.0",
@@ -89,8 +90,8 @@
89
90
  "zod": "3.25.67"
90
91
  },
91
92
  "devDependencies": {
92
- "@strapi/admin": "5.33.4",
93
- "@strapi/types": "5.33.4",
93
+ "@strapi/admin": "5.34.0",
94
+ "@strapi/types": "5.34.0",
94
95
  "@testing-library/dom": "10.4.1",
95
96
  "@testing-library/react": "16.3.0",
96
97
  "@testing-library/user-event": "14.6.1",