@strapi/upload 5.33.3 → 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.
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.js +2 -2
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.js.map +1 -1
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.mjs +2 -2
- package/dist/admin/components/MediaLibraryDialog/MediaLibraryDialog.mjs.map +1 -1
- package/dist/admin/future/App.js +45 -0
- package/dist/admin/future/App.js.map +1 -0
- package/dist/admin/future/App.mjs +43 -0
- package/dist/admin/future/App.mjs.map +1 -0
- package/dist/admin/future/pages/AIGenerationPage.js +24 -0
- package/dist/admin/future/pages/AIGenerationPage.js.map +1 -0
- package/dist/admin/future/pages/AIGenerationPage.mjs +22 -0
- package/dist/admin/future/pages/AIGenerationPage.mjs.map +1 -0
- package/dist/admin/future/pages/MediaLibraryPage.js +55 -0
- package/dist/admin/future/pages/MediaLibraryPage.js.map +1 -0
- package/dist/admin/future/pages/MediaLibraryPage.mjs +53 -0
- package/dist/admin/future/pages/MediaLibraryPage.mjs.map +1 -0
- package/dist/admin/hooks/useAIMetadataJob.js +114 -0
- package/dist/admin/hooks/useAIMetadataJob.js.map +1 -0
- package/dist/admin/hooks/useAIMetadataJob.mjs +93 -0
- package/dist/admin/hooks/useAIMetadataJob.mjs.map +1 -0
- package/dist/admin/index.js +23 -4
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +24 -5
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/package.json.js +8 -7
- package/dist/admin/package.json.js.map +1 -1
- package/dist/admin/package.json.mjs +8 -7
- package/dist/admin/package.json.mjs.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +1 -0
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +1 -0
- package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
- package/dist/admin/pages/App/components/Header.js +3 -0
- package/dist/admin/pages/App/components/Header.js.map +1 -1
- package/dist/admin/pages/App/components/Header.mjs +3 -0
- package/dist/admin/pages/App/components/Header.mjs.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.js +252 -67
- package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs +256 -71
- package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
- package/dist/admin/src/components/MediaLibraryDialog/MediaLibraryDialog.d.ts +2 -1
- package/dist/admin/src/future/App.d.ts +1 -0
- package/dist/admin/src/future/pages/AIGenerationPage.d.ts +1 -0
- package/dist/admin/src/future/pages/MediaLibraryPage.d.ts +1 -0
- package/dist/admin/src/future/services/api.d.ts +2 -0
- package/dist/admin/src/future/services/settings.d.ts +2 -0
- package/dist/admin/src/hooks/useAIMetadataJob.d.ts +9 -0
- package/dist/admin/translations/de.json.js +44 -1
- package/dist/admin/translations/de.json.js.map +1 -1
- package/dist/admin/translations/de.json.mjs +44 -1
- package/dist/admin/translations/de.json.mjs.map +1 -1
- package/dist/admin/translations/en.json.js +9 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +9 -0
- package/dist/admin/translations/en.json.mjs.map +1 -1
- package/dist/server/bootstrap.js +1 -0
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/bootstrap.mjs +1 -0
- package/dist/server/bootstrap.mjs.map +1 -1
- package/dist/server/controllers/admin-file.js +86 -0
- package/dist/server/controllers/admin-file.js.map +1 -1
- package/dist/server/controllers/admin-file.mjs +86 -0
- package/dist/server/controllers/admin-file.mjs.map +1 -1
- package/dist/server/controllers/admin-upload.js +3 -23
- package/dist/server/controllers/admin-upload.js.map +1 -1
- package/dist/server/controllers/admin-upload.mjs +3 -23
- package/dist/server/controllers/admin-upload.mjs.map +1 -1
- package/dist/server/models/ai-metadata-job.js +36 -0
- package/dist/server/models/ai-metadata-job.js.map +1 -0
- package/dist/server/models/ai-metadata-job.mjs +33 -0
- package/dist/server/models/ai-metadata-job.mjs.map +1 -0
- package/dist/server/register.js +3 -0
- package/dist/server/register.js.map +1 -1
- package/dist/server/register.mjs +3 -0
- package/dist/server/register.mjs.map +1 -1
- package/dist/server/routes/admin.js +46 -0
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/admin.mjs +46 -0
- package/dist/server/routes/admin.mjs.map +1 -1
- package/dist/server/services/ai-metadata-jobs.js +72 -0
- package/dist/server/services/ai-metadata-jobs.js.map +1 -0
- package/dist/server/services/ai-metadata-jobs.mjs +70 -0
- package/dist/server/services/ai-metadata-jobs.mjs.map +1 -0
- package/dist/server/services/ai-metadata.js +170 -20
- package/dist/server/services/ai-metadata.js.map +1 -1
- package/dist/server/services/ai-metadata.mjs +170 -20
- package/dist/server/services/ai-metadata.mjs.map +1 -1
- package/dist/server/services/index.js +3 -1
- package/dist/server/services/index.js.map +1 -1
- package/dist/server/services/index.mjs +3 -1
- package/dist/server/services/index.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-file.d.ts +3 -0
- package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
- package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +3 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +27 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/models/ai-metadata-job.d.ts +5 -0
- package/dist/server/src/models/ai-metadata-job.d.ts.map +1 -0
- package/dist/server/src/models/index.d.ts +5 -0
- package/dist/server/src/models/index.d.ts.map +1 -0
- package/dist/server/src/register.d.ts.map +1 -1
- package/dist/server/src/routes/admin.d.ts.map +1 -1
- package/dist/server/src/services/ai-metadata-jobs.d.ts +14 -0
- package/dist/server/src/services/ai-metadata-jobs.d.ts.map +1 -0
- package/dist/server/src/services/ai-metadata.d.ts +25 -2
- package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +24 -1
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/utils/images.d.ts +7 -0
- package/dist/server/src/utils/images.d.ts.map +1 -0
- package/dist/server/src/utils/index.d.ts +2 -0
- package/dist/server/src/utils/index.d.ts.map +1 -1
- package/dist/server/utils/images.js +35 -0
- package/dist/server/utils/images.js.map +1 -0
- package/dist/server/utils/images.mjs +33 -0
- package/dist/server/utils/images.mjs.map +1 -0
- package/dist/server/utils/index.js.map +1 -1
- package/dist/server/utils/index.mjs.map +1 -1
- package/dist/shared/contracts/ai-metadata-jobs.d.ts +53 -0
- package/dist/shared/contracts/ai-metadata-jobs.d.ts.map +1 -0
- package/dist/shared/contracts/files.d.ts +33 -0
- package/package.json +8 -7
|
@@ -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;
|
|
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":";;
|
|
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":"
|
|
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.
|
|
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/
|
|
66
|
-
"@strapi/
|
|
67
|
-
"@strapi/
|
|
68
|
-
"@strapi/
|
|
65
|
+
"@strapi/database": "5.33.3",
|
|
66
|
+
"@strapi/design-system": "2.1.2",
|
|
67
|
+
"@strapi/icons": "2.1.2",
|
|
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.
|
|
93
|
-
"@strapi/types": "5.
|
|
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",
|