@strapi/upload 5.33.4 → 5.35.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/EditAssetDialog/EditAssetContent.js +32 -3
- package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +32 -3
- package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js +57 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs +55 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs.map +1 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +96 -20
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +98 -22
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js +47 -0
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js.map +1 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs +44 -1
- package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.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 +119 -0
- package/dist/admin/future/pages/MediaLibraryPage.js.map +1 -0
- package/dist/admin/future/pages/MediaLibraryPage.mjs +98 -0
- package/dist/admin/future/pages/MediaLibraryPage.mjs.map +1 -0
- package/dist/admin/future/services/api.js +28 -0
- package/dist/admin/future/services/api.js.map +1 -0
- package/dist/admin/future/services/api.mjs +25 -0
- package/dist/admin/future/services/api.mjs.map +1 -0
- package/dist/admin/future/utils/translations.js +8 -0
- package/dist/admin/future/utils/translations.js.map +1 -0
- package/dist/admin/future/utils/translations.mjs +6 -0
- package/dist/admin/future/utils/translations.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/hooks/useEditAsset.js +1 -0
- package/dist/admin/hooks/useEditAsset.js.map +1 -1
- package/dist/admin/hooks/useEditAsset.mjs +1 -0
- package/dist/admin/hooks/useEditAsset.mjs.map +1 -1
- 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 +6 -5
- package/dist/admin/package.json.js.map +1 -1
- package/dist/admin/package.json.mjs +6 -5
- 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/EditAssetDialog/PreviewBox/AssetPreview.d.ts +1 -2
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/FocalPointActions.d.ts +7 -0
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.d.ts +6 -2
- package/dist/admin/src/components/EditAssetDialog/PreviewBox/PreviewComponents.d.ts +13 -0
- 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 +6 -0
- package/dist/admin/src/future/services/settings.d.ts +2 -0
- package/dist/admin/src/future/utils/translations.d.ts +1 -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 +17 -0
- package/dist/admin/translations/en.json.js.map +1 -1
- package/dist/admin/translations/en.json.mjs +17 -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/content-types/file.js +4 -0
- package/dist/server/content-types/file.js.map +1 -1
- package/dist/server/content-types/file.mjs +4 -0
- package/dist/server/content-types/file.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/controllers/validation/admin/upload.js +5 -0
- package/dist/server/controllers/validation/admin/upload.js.map +1 -1
- package/dist/server/controllers/validation/admin/upload.mjs +5 -0
- package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
- package/dist/server/controllers/validation/content-api/upload.js +6 -1
- package/dist/server/controllers/validation/content-api/upload.js.map +1 -1
- package/dist/server/controllers/validation/content-api/upload.mjs +6 -1
- package/dist/server/controllers/validation/content-api/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/services/upload.js +3 -1
- package/dist/server/services/upload.js.map +1 -1
- package/dist/server/services/upload.mjs +3 -1
- package/dist/server/services/upload.mjs.map +1 -1
- package/dist/server/src/bootstrap.d.ts.map +1 -1
- package/dist/server/src/content-types/file.d.ts +4 -0
- package/dist/server/src/content-types/file.d.ts.map +1 -1
- package/dist/server/src/content-types/index.d.ts +4 -0
- package/dist/server/src/content-types/index.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/controllers/validation/admin/upload.d.ts +240 -0
- package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
- package/dist/server/src/controllers/validation/content-api/upload.d.ts +180 -0
- package/dist/server/src/controllers/validation/content-api/upload.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +32 -2
- 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 +25 -2
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/upload.d.ts +1 -1
- package/dist/server/src/services/upload.d.ts.map +1 -1
- package/dist/server/src/types.d.ts +6 -0
- package/dist/server/src/types.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 +39 -0
- package/package.json +6 -5
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { yup, validateYupSchema } from '@strapi/utils';
|
|
2
2
|
|
|
3
|
+
const focalPointSchema = yup.object({
|
|
4
|
+
x: yup.number().min(0).max(100).required(),
|
|
5
|
+
y: yup.number().min(0).max(100).required()
|
|
6
|
+
}).nullable().default(null);
|
|
3
7
|
const fileInfoSchema = yup.object({
|
|
4
8
|
name: yup.string().nullable(),
|
|
5
9
|
alternativeText: yup.string().nullable(),
|
|
6
|
-
caption: yup.string().nullable()
|
|
10
|
+
caption: yup.string().nullable(),
|
|
11
|
+
focalPoint: focalPointSchema
|
|
7
12
|
}).noUnknown();
|
|
8
13
|
const uploadSchema = yup.object({
|
|
9
14
|
fileInfo: fileInfoSchema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upload.mjs","sources":["../../../../../server/src/controllers/validation/content-api/upload.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nconst fileInfoSchema = yup\n .object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n })\n .noUnknown();\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n"],"names":["
|
|
1
|
+
{"version":3,"file":"upload.mjs","sources":["../../../../../server/src/controllers/validation/content-api/upload.ts"],"sourcesContent":["import { yup, validateYupSchema } from '@strapi/utils';\n\nconst focalPointSchema = yup\n .object({\n x: yup.number().min(0).max(100).required(),\n y: yup.number().min(0).max(100).required(),\n })\n .nullable()\n .default(null);\n\nconst fileInfoSchema = yup\n .object({\n name: yup.string().nullable(),\n alternativeText: yup.string().nullable(),\n caption: yup.string().nullable(),\n focalPoint: focalPointSchema,\n })\n .noUnknown();\n\nconst uploadSchema = yup.object({\n fileInfo: fileInfoSchema,\n});\n\nconst multiUploadSchema = yup.object({\n fileInfo: yup.array().of(fileInfoSchema),\n});\n\nconst validateUploadBody = (data = {}, isMulti = false) => {\n const schema = isMulti ? multiUploadSchema : uploadSchema;\n\n return validateYupSchema(schema, { strict: false })(data);\n};\n\nexport { validateUploadBody };\n\nexport type UploadBody =\n | yup.InferType<typeof uploadSchema>\n | yup.InferType<typeof multiUploadSchema>;\n"],"names":["focalPointSchema","yup","object","x","number","min","max","required","y","nullable","default","fileInfoSchema","name","string","alternativeText","caption","focalPoint","noUnknown","uploadSchema","fileInfo","multiUploadSchema","array","of","validateUploadBody","data","isMulti","schema","validateYupSchema","strict"],"mappings":";;AAEA,MAAMA,gBAAAA,GAAmBC,GACtBC,CAAAA,MAAM,CAAC;IACNC,CAAGF,EAAAA,GAAAA,CAAIG,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAGC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ,EAAA;IACxCC,CAAGP,EAAAA,GAAAA,CAAIG,MAAM,EAAGC,CAAAA,GAAG,CAAC,CAAGC,CAAAA,CAAAA,GAAG,CAAC,GAAA,CAAA,CAAKC,QAAQ;AAC1C,CACCE,CAAAA,CAAAA,QAAQ,EACRC,CAAAA,OAAO,CAAC,IAAA,CAAA;AAEX,MAAMC,cAAAA,GAAiBV,GACpBC,CAAAA,MAAM,CAAC;IACNU,IAAMX,EAAAA,GAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IAC3BK,eAAiBb,EAAAA,GAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IACtCM,OAASd,EAAAA,GAAAA,CAAIY,MAAM,EAAA,CAAGJ,QAAQ,EAAA;IAC9BO,UAAYhB,EAAAA;AACd,CAAA,CAAA,CACCiB,SAAS,EAAA;AAEZ,MAAMC,YAAAA,GAAejB,GAAIC,CAAAA,MAAM,CAAC;IAC9BiB,QAAUR,EAAAA;AACZ,CAAA,CAAA;AAEA,MAAMS,iBAAAA,GAAoBnB,GAAIC,CAAAA,MAAM,CAAC;AACnCiB,IAAAA,QAAAA,EAAUlB,GAAIoB,CAAAA,KAAK,EAAGC,CAAAA,EAAE,CAACX,cAAAA;AAC3B,CAAA,CAAA;AAEA,MAAMY,qBAAqB,CAACC,IAAAA,GAAO,EAAE,EAAEC,UAAU,KAAK,GAAA;IACpD,MAAMC,MAAAA,GAASD,UAAUL,iBAAoBF,GAAAA,YAAAA;AAE7C,IAAA,OAAOS,kBAAkBD,MAAQ,EAAA;QAAEE,MAAQ,EAAA;KAASJ,CAAAA,CAAAA,IAAAA,CAAAA;AACtD;;;;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const AI_METADATA_JOB_UID = 'plugin::upload.ai-metadata-job';
|
|
4
|
+
const aiMetadataJob = {
|
|
5
|
+
uid: AI_METADATA_JOB_UID,
|
|
6
|
+
tableName: 'strapi_ai_metadata_jobs',
|
|
7
|
+
singularName: 'ai-metadata-job',
|
|
8
|
+
attributes: {
|
|
9
|
+
id: {
|
|
10
|
+
type: 'increments'
|
|
11
|
+
},
|
|
12
|
+
status: {
|
|
13
|
+
type: 'enumeration',
|
|
14
|
+
enum: [
|
|
15
|
+
'processing',
|
|
16
|
+
'completed',
|
|
17
|
+
'failed'
|
|
18
|
+
],
|
|
19
|
+
column: {
|
|
20
|
+
notNullable: true
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
createdAt: {
|
|
24
|
+
type: 'datetime',
|
|
25
|
+
default: ()=>new Date()
|
|
26
|
+
},
|
|
27
|
+
completedAt: {
|
|
28
|
+
type: 'datetime',
|
|
29
|
+
default: null
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
exports.AI_METADATA_JOB_UID = AI_METADATA_JOB_UID;
|
|
35
|
+
exports.aiMetadataJob = aiMetadataJob;
|
|
36
|
+
//# sourceMappingURL=ai-metadata-job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-metadata-job.js","sources":["../../../server/src/models/ai-metadata-job.ts"],"sourcesContent":["import type { Model } from '@strapi/database';\n\nconst AI_METADATA_JOB_UID = 'plugin::upload.ai-metadata-job';\n\nconst aiMetadataJob: Model = {\n uid: AI_METADATA_JOB_UID,\n tableName: 'strapi_ai_metadata_jobs',\n singularName: 'ai-metadata-job',\n attributes: {\n id: {\n type: 'increments',\n },\n status: {\n type: 'enumeration',\n enum: ['processing', 'completed', 'failed'],\n column: { notNullable: true },\n },\n createdAt: {\n type: 'datetime',\n default: () => new Date(),\n },\n completedAt: {\n type: 'datetime',\n default: null,\n },\n },\n};\n\nexport { aiMetadataJob, AI_METADATA_JOB_UID };\n"],"names":["AI_METADATA_JOB_UID","aiMetadataJob","uid","tableName","singularName","attributes","id","type","status","enum","column","notNullable","createdAt","default","Date","completedAt"],"mappings":";;AAEA,MAAMA,mBAAsB,GAAA;AAE5B,MAAMC,aAAuB,GAAA;IAC3BC,GAAKF,EAAAA,mBAAAA;IACLG,SAAW,EAAA,yBAAA;IACXC,YAAc,EAAA,iBAAA;IACdC,UAAY,EAAA;QACVC,EAAI,EAAA;YACFC,IAAM,EAAA;AACR,SAAA;QACAC,MAAQ,EAAA;YACND,IAAM,EAAA,aAAA;YACNE,IAAM,EAAA;AAAC,gBAAA,YAAA;AAAc,gBAAA,WAAA;AAAa,gBAAA;AAAS,aAAA;YAC3CC,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAC,SAAW,EAAA;YACTL,IAAM,EAAA,UAAA;AACNM,YAAAA,OAAAA,EAAS,IAAM,IAAIC,IAAAA;AACrB,SAAA;QACAC,WAAa,EAAA;YACXR,IAAM,EAAA,UAAA;YACNM,OAAS,EAAA;AACX;AACF;AACF;;;;;"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const AI_METADATA_JOB_UID = 'plugin::upload.ai-metadata-job';
|
|
2
|
+
const aiMetadataJob = {
|
|
3
|
+
uid: AI_METADATA_JOB_UID,
|
|
4
|
+
tableName: 'strapi_ai_metadata_jobs',
|
|
5
|
+
singularName: 'ai-metadata-job',
|
|
6
|
+
attributes: {
|
|
7
|
+
id: {
|
|
8
|
+
type: 'increments'
|
|
9
|
+
},
|
|
10
|
+
status: {
|
|
11
|
+
type: 'enumeration',
|
|
12
|
+
enum: [
|
|
13
|
+
'processing',
|
|
14
|
+
'completed',
|
|
15
|
+
'failed'
|
|
16
|
+
],
|
|
17
|
+
column: {
|
|
18
|
+
notNullable: true
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
createdAt: {
|
|
22
|
+
type: 'datetime',
|
|
23
|
+
default: ()=>new Date()
|
|
24
|
+
},
|
|
25
|
+
completedAt: {
|
|
26
|
+
type: 'datetime',
|
|
27
|
+
default: null
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export { AI_METADATA_JOB_UID, aiMetadataJob };
|
|
33
|
+
//# sourceMappingURL=ai-metadata-job.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-metadata-job.mjs","sources":["../../../server/src/models/ai-metadata-job.ts"],"sourcesContent":["import type { Model } from '@strapi/database';\n\nconst AI_METADATA_JOB_UID = 'plugin::upload.ai-metadata-job';\n\nconst aiMetadataJob: Model = {\n uid: AI_METADATA_JOB_UID,\n tableName: 'strapi_ai_metadata_jobs',\n singularName: 'ai-metadata-job',\n attributes: {\n id: {\n type: 'increments',\n },\n status: {\n type: 'enumeration',\n enum: ['processing', 'completed', 'failed'],\n column: { notNullable: true },\n },\n createdAt: {\n type: 'datetime',\n default: () => new Date(),\n },\n completedAt: {\n type: 'datetime',\n default: null,\n },\n },\n};\n\nexport { aiMetadataJob, AI_METADATA_JOB_UID };\n"],"names":["AI_METADATA_JOB_UID","aiMetadataJob","uid","tableName","singularName","attributes","id","type","status","enum","column","notNullable","createdAt","default","Date","completedAt"],"mappings":"AAEA,MAAMA,mBAAsB,GAAA;AAE5B,MAAMC,aAAuB,GAAA;IAC3BC,GAAKF,EAAAA,mBAAAA;IACLG,SAAW,EAAA,yBAAA;IACXC,YAAc,EAAA,iBAAA;IACdC,UAAY,EAAA;QACVC,EAAI,EAAA;YACFC,IAAM,EAAA;AACR,SAAA;QACAC,MAAQ,EAAA;YACND,IAAM,EAAA,aAAA;YACNE,IAAM,EAAA;AAAC,gBAAA,YAAA;AAAc,gBAAA,WAAA;AAAa,gBAAA;AAAS,aAAA;YAC3CC,MAAQ,EAAA;gBAAEC,WAAa,EAAA;AAAK;AAC9B,SAAA;QACAC,SAAW,EAAA;YACTL,IAAM,EAAA,UAAA;AACNM,YAAAA,OAAAA,EAAS,IAAM,IAAIC,IAAAA;AACrB,SAAA;QACAC,WAAa,EAAA;YACXR,IAAM,EAAA,UAAA;YACNM,OAAS,EAAA;AACX;AACF;AACF;;;;"}
|
package/dist/server/register.js
CHANGED
|
@@ -4,12 +4,15 @@ var _ = require('lodash');
|
|
|
4
4
|
var utils = require('@strapi/utils');
|
|
5
5
|
var upload = require('./middlewares/upload.js');
|
|
6
6
|
var contentApi = require('./documentation/content-api.json.js');
|
|
7
|
+
var aiMetadataJob = require('./models/ai-metadata-job.js');
|
|
7
8
|
|
|
8
9
|
const { PayloadTooLargeError } = utils.errors;
|
|
9
10
|
const { bytesToHumanReadable, kbytesToBytes } = utils.file;
|
|
10
11
|
/**
|
|
11
12
|
* Register upload plugin
|
|
12
13
|
*/ async function register({ strapi }) {
|
|
14
|
+
// Register AI metadata job model
|
|
15
|
+
strapi.get('models').add(aiMetadataJob.aiMetadataJob);
|
|
13
16
|
strapi.plugin('upload').provider = createProvider(strapi.config.get('plugin::upload'));
|
|
14
17
|
await upload({
|
|
15
18
|
strapi
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sources":["../../server/src/register.ts"],"sourcesContent":["import _ from 'lodash';\n\nimport { errors, file } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport registerUploadMiddleware from './middlewares/upload';\nimport spec from '../../documentation/content-api.json';\nimport type { Config, File, InputFile } from './types';\n\nconst { PayloadTooLargeError } = errors;\nconst { bytesToHumanReadable, kbytesToBytes } = file;\n\n/**\n * Register upload plugin\n */\nexport async function register({ strapi }: { strapi: Core.Strapi }) {\n strapi.plugin('upload').provider = createProvider(strapi.config.get<Config>('plugin::upload'));\n\n await registerUploadMiddleware({ strapi });\n\n if (strapi.plugin('graphql')) {\n const { installGraphqlExtension } = await import('./graphql.js');\n installGraphqlExtension({ strapi });\n }\n\n if (strapi.plugin('documentation')) {\n strapi\n .plugin('documentation')\n .service('override')\n .registerOverride(spec, {\n pluginOrigin: 'upload',\n excludeFromGeneration: ['upload'],\n });\n }\n}\n\nconst createProvider = (config: Config) => {\n const { providerOptions, actionOptions = {} } = config;\n\n const providerName = _.toLower(config.provider);\n let provider;\n\n let modulePath;\n try {\n modulePath = require.resolve(`@strapi/provider-upload-${providerName}`);\n } catch (error) {\n if (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n error.code === 'MODULE_NOT_FOUND'\n ) {\n modulePath = providerName;\n } else {\n throw error;\n }\n }\n\n try {\n provider = require(modulePath);\n } catch (err) {\n const newError = new Error(`Could not load upload provider \"${providerName}\".`);\n\n if (err instanceof Error) {\n newError.stack = err.stack;\n }\n\n throw newError;\n }\n\n const providerInstance = provider.init(providerOptions);\n\n if (!providerInstance.delete) {\n throw new Error(`The upload provider \"${providerName}\" doesn't implement the delete method.`);\n }\n\n if (!providerInstance.upload && !providerInstance.uploadStream) {\n throw new Error(\n `The upload provider \"${providerName}\" doesn't implement the uploadStream nor the upload method.`\n );\n }\n\n if (!providerInstance.uploadStream) {\n process.emitWarning(\n `The upload provider \"${providerName}\" doesn't implement the uploadStream function. Strapi will fallback on the upload method. Some performance issues may occur.`\n );\n }\n\n const wrappedProvider = _.mapValues(providerInstance, (method, methodName) => {\n return async (file: File, options = actionOptions[methodName]) =>\n providerInstance[methodName](file, options);\n });\n\n return Object.assign(Object.create(baseProvider), wrappedProvider);\n};\n\nconst baseProvider = {\n extend(obj: unknown) {\n Object.assign(this, obj);\n },\n checkFileSize(file: InputFile, { sizeLimit }: { sizeLimit: number }) {\n if (sizeLimit && kbytesToBytes(file.size) > sizeLimit) {\n throw new PayloadTooLargeError(\n `${file.originalFilename} exceeds size limit of ${bytesToHumanReadable(sizeLimit)}.`\n );\n }\n },\n getSignedUrl(file: File) {\n return file;\n },\n isPrivate() {\n return false;\n },\n};\n"],"names":["PayloadTooLargeError","errors","bytesToHumanReadable","kbytesToBytes","file","register","strapi","plugin","provider","createProvider","config","
|
|
1
|
+
{"version":3,"file":"register.js","sources":["../../server/src/register.ts"],"sourcesContent":["import _ from 'lodash';\n\nimport { errors, file } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport registerUploadMiddleware from './middlewares/upload';\nimport spec from '../../documentation/content-api.json';\nimport type { Config, File, InputFile } from './types';\nimport { aiMetadataJob } from './models/ai-metadata-job';\n\nconst { PayloadTooLargeError } = errors;\nconst { bytesToHumanReadable, kbytesToBytes } = file;\n\n/**\n * Register upload plugin\n */\nexport async function register({ strapi }: { strapi: Core.Strapi }) {\n // Register AI metadata job model\n strapi.get('models').add(aiMetadataJob);\n\n strapi.plugin('upload').provider = createProvider(strapi.config.get<Config>('plugin::upload'));\n\n await registerUploadMiddleware({ strapi });\n\n if (strapi.plugin('graphql')) {\n const { installGraphqlExtension } = await import('./graphql.js');\n installGraphqlExtension({ strapi });\n }\n\n if (strapi.plugin('documentation')) {\n strapi\n .plugin('documentation')\n .service('override')\n .registerOverride(spec, {\n pluginOrigin: 'upload',\n excludeFromGeneration: ['upload'],\n });\n }\n}\n\nconst createProvider = (config: Config) => {\n const { providerOptions, actionOptions = {} } = config;\n\n const providerName = _.toLower(config.provider);\n let provider;\n\n let modulePath;\n try {\n modulePath = require.resolve(`@strapi/provider-upload-${providerName}`);\n } catch (error) {\n if (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n error.code === 'MODULE_NOT_FOUND'\n ) {\n modulePath = providerName;\n } else {\n throw error;\n }\n }\n\n try {\n provider = require(modulePath);\n } catch (err) {\n const newError = new Error(`Could not load upload provider \"${providerName}\".`);\n\n if (err instanceof Error) {\n newError.stack = err.stack;\n }\n\n throw newError;\n }\n\n const providerInstance = provider.init(providerOptions);\n\n if (!providerInstance.delete) {\n throw new Error(`The upload provider \"${providerName}\" doesn't implement the delete method.`);\n }\n\n if (!providerInstance.upload && !providerInstance.uploadStream) {\n throw new Error(\n `The upload provider \"${providerName}\" doesn't implement the uploadStream nor the upload method.`\n );\n }\n\n if (!providerInstance.uploadStream) {\n process.emitWarning(\n `The upload provider \"${providerName}\" doesn't implement the uploadStream function. Strapi will fallback on the upload method. Some performance issues may occur.`\n );\n }\n\n const wrappedProvider = _.mapValues(providerInstance, (method, methodName) => {\n return async (file: File, options = actionOptions[methodName]) =>\n providerInstance[methodName](file, options);\n });\n\n return Object.assign(Object.create(baseProvider), wrappedProvider);\n};\n\nconst baseProvider = {\n extend(obj: unknown) {\n Object.assign(this, obj);\n },\n checkFileSize(file: InputFile, { sizeLimit }: { sizeLimit: number }) {\n if (sizeLimit && kbytesToBytes(file.size) > sizeLimit) {\n throw new PayloadTooLargeError(\n `${file.originalFilename} exceeds size limit of ${bytesToHumanReadable(sizeLimit)}.`\n );\n }\n },\n getSignedUrl(file: File) {\n return file;\n },\n isPrivate() {\n return false;\n },\n};\n"],"names":["PayloadTooLargeError","errors","bytesToHumanReadable","kbytesToBytes","file","register","strapi","get","add","aiMetadataJob","plugin","provider","createProvider","config","registerUploadMiddleware","installGraphqlExtension","service","registerOverride","spec","pluginOrigin","excludeFromGeneration","providerOptions","actionOptions","providerName","_","toLower","modulePath","require","resolve","error","code","err","newError","Error","stack","providerInstance","init","delete","upload","uploadStream","process","emitWarning","wrappedProvider","mapValues","method","methodName","options","Object","assign","create","baseProvider","extend","obj","checkFileSize","sizeLimit","size","originalFilename","getSignedUrl","isPrivate"],"mappings":"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"}
|
package/dist/server/register.mjs
CHANGED
|
@@ -2,12 +2,15 @@ import _ from 'lodash';
|
|
|
2
2
|
import { errors, file } from '@strapi/utils';
|
|
3
3
|
import registerUploadMiddleware from './middlewares/upload.mjs';
|
|
4
4
|
import spec from './documentation/content-api.json.mjs';
|
|
5
|
+
import { aiMetadataJob } from './models/ai-metadata-job.mjs';
|
|
5
6
|
|
|
6
7
|
const { PayloadTooLargeError } = errors;
|
|
7
8
|
const { bytesToHumanReadable, kbytesToBytes } = file;
|
|
8
9
|
/**
|
|
9
10
|
* Register upload plugin
|
|
10
11
|
*/ async function register({ strapi }) {
|
|
12
|
+
// Register AI metadata job model
|
|
13
|
+
strapi.get('models').add(aiMetadataJob);
|
|
11
14
|
strapi.plugin('upload').provider = createProvider(strapi.config.get('plugin::upload'));
|
|
12
15
|
await registerUploadMiddleware({
|
|
13
16
|
strapi
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.mjs","sources":["../../server/src/register.ts"],"sourcesContent":["import _ from 'lodash';\n\nimport { errors, file } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport registerUploadMiddleware from './middlewares/upload';\nimport spec from '../../documentation/content-api.json';\nimport type { Config, File, InputFile } from './types';\n\nconst { PayloadTooLargeError } = errors;\nconst { bytesToHumanReadable, kbytesToBytes } = file;\n\n/**\n * Register upload plugin\n */\nexport async function register({ strapi }: { strapi: Core.Strapi }) {\n strapi.plugin('upload').provider = createProvider(strapi.config.get<Config>('plugin::upload'));\n\n await registerUploadMiddleware({ strapi });\n\n if (strapi.plugin('graphql')) {\n const { installGraphqlExtension } = await import('./graphql.js');\n installGraphqlExtension({ strapi });\n }\n\n if (strapi.plugin('documentation')) {\n strapi\n .plugin('documentation')\n .service('override')\n .registerOverride(spec, {\n pluginOrigin: 'upload',\n excludeFromGeneration: ['upload'],\n });\n }\n}\n\nconst createProvider = (config: Config) => {\n const { providerOptions, actionOptions = {} } = config;\n\n const providerName = _.toLower(config.provider);\n let provider;\n\n let modulePath;\n try {\n modulePath = require.resolve(`@strapi/provider-upload-${providerName}`);\n } catch (error) {\n if (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n error.code === 'MODULE_NOT_FOUND'\n ) {\n modulePath = providerName;\n } else {\n throw error;\n }\n }\n\n try {\n provider = require(modulePath);\n } catch (err) {\n const newError = new Error(`Could not load upload provider \"${providerName}\".`);\n\n if (err instanceof Error) {\n newError.stack = err.stack;\n }\n\n throw newError;\n }\n\n const providerInstance = provider.init(providerOptions);\n\n if (!providerInstance.delete) {\n throw new Error(`The upload provider \"${providerName}\" doesn't implement the delete method.`);\n }\n\n if (!providerInstance.upload && !providerInstance.uploadStream) {\n throw new Error(\n `The upload provider \"${providerName}\" doesn't implement the uploadStream nor the upload method.`\n );\n }\n\n if (!providerInstance.uploadStream) {\n process.emitWarning(\n `The upload provider \"${providerName}\" doesn't implement the uploadStream function. Strapi will fallback on the upload method. Some performance issues may occur.`\n );\n }\n\n const wrappedProvider = _.mapValues(providerInstance, (method, methodName) => {\n return async (file: File, options = actionOptions[methodName]) =>\n providerInstance[methodName](file, options);\n });\n\n return Object.assign(Object.create(baseProvider), wrappedProvider);\n};\n\nconst baseProvider = {\n extend(obj: unknown) {\n Object.assign(this, obj);\n },\n checkFileSize(file: InputFile, { sizeLimit }: { sizeLimit: number }) {\n if (sizeLimit && kbytesToBytes(file.size) > sizeLimit) {\n throw new PayloadTooLargeError(\n `${file.originalFilename} exceeds size limit of ${bytesToHumanReadable(sizeLimit)}.`\n );\n }\n },\n getSignedUrl(file: File) {\n return file;\n },\n isPrivate() {\n return false;\n },\n};\n"],"names":["PayloadTooLargeError","errors","bytesToHumanReadable","kbytesToBytes","file","register","strapi","plugin","provider","createProvider","config","
|
|
1
|
+
{"version":3,"file":"register.mjs","sources":["../../server/src/register.ts"],"sourcesContent":["import _ from 'lodash';\n\nimport { errors, file } from '@strapi/utils';\nimport type { Core } from '@strapi/types';\n\nimport registerUploadMiddleware from './middlewares/upload';\nimport spec from '../../documentation/content-api.json';\nimport type { Config, File, InputFile } from './types';\nimport { aiMetadataJob } from './models/ai-metadata-job';\n\nconst { PayloadTooLargeError } = errors;\nconst { bytesToHumanReadable, kbytesToBytes } = file;\n\n/**\n * Register upload plugin\n */\nexport async function register({ strapi }: { strapi: Core.Strapi }) {\n // Register AI metadata job model\n strapi.get('models').add(aiMetadataJob);\n\n strapi.plugin('upload').provider = createProvider(strapi.config.get<Config>('plugin::upload'));\n\n await registerUploadMiddleware({ strapi });\n\n if (strapi.plugin('graphql')) {\n const { installGraphqlExtension } = await import('./graphql.js');\n installGraphqlExtension({ strapi });\n }\n\n if (strapi.plugin('documentation')) {\n strapi\n .plugin('documentation')\n .service('override')\n .registerOverride(spec, {\n pluginOrigin: 'upload',\n excludeFromGeneration: ['upload'],\n });\n }\n}\n\nconst createProvider = (config: Config) => {\n const { providerOptions, actionOptions = {} } = config;\n\n const providerName = _.toLower(config.provider);\n let provider;\n\n let modulePath;\n try {\n modulePath = require.resolve(`@strapi/provider-upload-${providerName}`);\n } catch (error) {\n if (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n error.code === 'MODULE_NOT_FOUND'\n ) {\n modulePath = providerName;\n } else {\n throw error;\n }\n }\n\n try {\n provider = require(modulePath);\n } catch (err) {\n const newError = new Error(`Could not load upload provider \"${providerName}\".`);\n\n if (err instanceof Error) {\n newError.stack = err.stack;\n }\n\n throw newError;\n }\n\n const providerInstance = provider.init(providerOptions);\n\n if (!providerInstance.delete) {\n throw new Error(`The upload provider \"${providerName}\" doesn't implement the delete method.`);\n }\n\n if (!providerInstance.upload && !providerInstance.uploadStream) {\n throw new Error(\n `The upload provider \"${providerName}\" doesn't implement the uploadStream nor the upload method.`\n );\n }\n\n if (!providerInstance.uploadStream) {\n process.emitWarning(\n `The upload provider \"${providerName}\" doesn't implement the uploadStream function. Strapi will fallback on the upload method. Some performance issues may occur.`\n );\n }\n\n const wrappedProvider = _.mapValues(providerInstance, (method, methodName) => {\n return async (file: File, options = actionOptions[methodName]) =>\n providerInstance[methodName](file, options);\n });\n\n return Object.assign(Object.create(baseProvider), wrappedProvider);\n};\n\nconst baseProvider = {\n extend(obj: unknown) {\n Object.assign(this, obj);\n },\n checkFileSize(file: InputFile, { sizeLimit }: { sizeLimit: number }) {\n if (sizeLimit && kbytesToBytes(file.size) > sizeLimit) {\n throw new PayloadTooLargeError(\n `${file.originalFilename} exceeds size limit of ${bytesToHumanReadable(sizeLimit)}.`\n );\n }\n },\n getSignedUrl(file: File) {\n return file;\n },\n isPrivate() {\n return false;\n },\n};\n"],"names":["PayloadTooLargeError","errors","bytesToHumanReadable","kbytesToBytes","file","register","strapi","get","add","aiMetadataJob","plugin","provider","createProvider","config","registerUploadMiddleware","installGraphqlExtension","service","registerOverride","spec","pluginOrigin","excludeFromGeneration","providerOptions","actionOptions","providerName","_","toLower","modulePath","require","resolve","error","code","err","newError","Error","stack","providerInstance","init","delete","upload","uploadStream","process","emitWarning","wrappedProvider","mapValues","method","methodName","options","Object","assign","create","baseProvider","extend","obj","checkFileSize","sizeLimit","size","originalFilename","getSignedUrl","isPrivate"],"mappings":"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"}
|
|
@@ -246,6 +246,52 @@ const routes = {
|
|
|
246
246
|
}
|
|
247
247
|
]
|
|
248
248
|
}
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
method: 'POST',
|
|
252
|
+
path: '/actions/generate-ai-metadata',
|
|
253
|
+
handler: 'admin-file.generateAIMetadata',
|
|
254
|
+
config: {
|
|
255
|
+
policies: [
|
|
256
|
+
'admin::isAuthenticatedAdmin',
|
|
257
|
+
{
|
|
258
|
+
name: 'admin::hasPermissions',
|
|
259
|
+
config: {
|
|
260
|
+
actions: [
|
|
261
|
+
'plugin::upload.assets.update'
|
|
262
|
+
]
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
]
|
|
266
|
+
}
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
method: 'GET',
|
|
270
|
+
path: '/actions/generate-ai-metadata/count',
|
|
271
|
+
handler: 'admin-file.getAIMetadataCount',
|
|
272
|
+
config: {
|
|
273
|
+
policies: [
|
|
274
|
+
'admin::isAuthenticatedAdmin',
|
|
275
|
+
{
|
|
276
|
+
name: 'admin::hasPermissions',
|
|
277
|
+
config: {
|
|
278
|
+
actions: [
|
|
279
|
+
'plugin::upload.read'
|
|
280
|
+
]
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
]
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
method: 'GET',
|
|
288
|
+
path: '/actions/generate-ai-metadata/latest',
|
|
289
|
+
handler: 'admin-file.getLatestAIMetadataJob',
|
|
290
|
+
config: {
|
|
291
|
+
policies: [
|
|
292
|
+
'admin::isAuthenticatedAdmin'
|
|
293
|
+
]
|
|
294
|
+
}
|
|
249
295
|
}
|
|
250
296
|
]
|
|
251
297
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export const routes = {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/settings',\n handler: 'admin-settings.getSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.settings.read'],\n },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/settings',\n handler: 'admin-settings.updateSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.settings.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/',\n handler: 'admin-upload.upload',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/files',\n handler: 'admin-file.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/files/:id',\n handler: 'admin-file.findOne',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/files/:id',\n handler: 'admin-file.destroy',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folders/:id',\n handler: 'admin-folder.findOne',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folders',\n handler: 'admin-folder.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/folders',\n handler: 'admin-folder.create',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.create'],\n },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/folders/:id',\n handler: 'admin-folder.update',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folder-structure',\n handler: 'admin-folder.getStructure',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-delete',\n handler: 'admin-folder-file.deleteMany',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-move',\n handler: 'admin-folder-file.moveMany',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-update',\n handler: 'admin-upload.bulkUpdateFileInfo',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n ],\n};\n"],"names":["routes","type","method","path","handler","config","policies","name","actions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin.js","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export const routes = {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/settings',\n handler: 'admin-settings.getSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.settings.read'],\n },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/settings',\n handler: 'admin-settings.updateSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.settings.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/',\n handler: 'admin-upload.upload',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/files',\n handler: 'admin-file.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/files/:id',\n handler: 'admin-file.findOne',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/files/:id',\n handler: 'admin-file.destroy',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folders/:id',\n handler: 'admin-folder.findOne',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folders',\n handler: 'admin-folder.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/folders',\n handler: 'admin-folder.create',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.create'],\n },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/folders/:id',\n handler: 'admin-folder.update',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folder-structure',\n handler: 'admin-folder.getStructure',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-delete',\n handler: 'admin-folder-file.deleteMany',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-move',\n handler: 'admin-folder-file.moveMany',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-update',\n handler: 'admin-upload.bulkUpdateFileInfo',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/generate-ai-metadata',\n handler: 'admin-file.generateAIMetadata',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/actions/generate-ai-metadata/count',\n handler: 'admin-file.getAIMetadataCount',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/actions/generate-ai-metadata/latest',\n handler: 'admin-file.getLatestAIMetadataJob',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n"],"names":["routes","type","method","path","handler","config","policies","name","actions"],"mappings":"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"}
|
|
@@ -244,6 +244,52 @@ const routes = {
|
|
|
244
244
|
}
|
|
245
245
|
]
|
|
246
246
|
}
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
method: 'POST',
|
|
250
|
+
path: '/actions/generate-ai-metadata',
|
|
251
|
+
handler: 'admin-file.generateAIMetadata',
|
|
252
|
+
config: {
|
|
253
|
+
policies: [
|
|
254
|
+
'admin::isAuthenticatedAdmin',
|
|
255
|
+
{
|
|
256
|
+
name: 'admin::hasPermissions',
|
|
257
|
+
config: {
|
|
258
|
+
actions: [
|
|
259
|
+
'plugin::upload.assets.update'
|
|
260
|
+
]
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
]
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
method: 'GET',
|
|
268
|
+
path: '/actions/generate-ai-metadata/count',
|
|
269
|
+
handler: 'admin-file.getAIMetadataCount',
|
|
270
|
+
config: {
|
|
271
|
+
policies: [
|
|
272
|
+
'admin::isAuthenticatedAdmin',
|
|
273
|
+
{
|
|
274
|
+
name: 'admin::hasPermissions',
|
|
275
|
+
config: {
|
|
276
|
+
actions: [
|
|
277
|
+
'plugin::upload.read'
|
|
278
|
+
]
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
]
|
|
282
|
+
}
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
method: 'GET',
|
|
286
|
+
path: '/actions/generate-ai-metadata/latest',
|
|
287
|
+
handler: 'admin-file.getLatestAIMetadataJob',
|
|
288
|
+
config: {
|
|
289
|
+
policies: [
|
|
290
|
+
'admin::isAuthenticatedAdmin'
|
|
291
|
+
]
|
|
292
|
+
}
|
|
247
293
|
}
|
|
248
294
|
]
|
|
249
295
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.mjs","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export const routes = {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/settings',\n handler: 'admin-settings.getSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.settings.read'],\n },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/settings',\n handler: 'admin-settings.updateSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.settings.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/',\n handler: 'admin-upload.upload',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/files',\n handler: 'admin-file.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/files/:id',\n handler: 'admin-file.findOne',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/files/:id',\n handler: 'admin-file.destroy',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folders/:id',\n handler: 'admin-folder.findOne',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folders',\n handler: 'admin-folder.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/folders',\n handler: 'admin-folder.create',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.create'],\n },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/folders/:id',\n handler: 'admin-folder.update',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folder-structure',\n handler: 'admin-folder.getStructure',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-delete',\n handler: 'admin-folder-file.deleteMany',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-move',\n handler: 'admin-folder-file.moveMany',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-update',\n handler: 'admin-upload.bulkUpdateFileInfo',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n ],\n};\n"],"names":["routes","type","method","path","handler","config","policies","name","actions"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin.mjs","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export const routes = {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/settings',\n handler: 'admin-settings.getSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.settings.read'],\n },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/settings',\n handler: 'admin-settings.updateSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.settings.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/',\n handler: 'admin-upload.upload',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/files',\n handler: 'admin-file.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/files/:id',\n handler: 'admin-file.findOne',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/files/:id',\n handler: 'admin-file.destroy',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folders/:id',\n handler: 'admin-folder.findOne',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folders',\n handler: 'admin-folder.find',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/folders',\n handler: 'admin-folder.create',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.create'],\n },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/folders/:id',\n handler: 'admin-folder.update',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/folder-structure',\n handler: 'admin-folder.getStructure',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-delete',\n handler: 'admin-folder-file.deleteMany',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-move',\n handler: 'admin-folder-file.moveMany',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/bulk-update',\n handler: 'admin-upload.bulkUpdateFileInfo',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/actions/generate-ai-metadata',\n handler: 'admin-file.generateAIMetadata',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.assets.update'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/actions/generate-ai-metadata/count',\n handler: 'admin-file.getAIMetadataCount',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'admin::hasPermissions',\n config: {\n actions: ['plugin::upload.read'],\n },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/actions/generate-ai-metadata/latest',\n handler: 'admin-file.getLatestAIMetadataJob',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n"],"names":["routes","type","method","path","handler","config","policies","name","actions"],"mappings":"MAAaA,MAAS,GAAA;IACpBC,IAAM,EAAA,OAAA;IACND,MAAQ,EAAA;AACN,QAAA;YACEE,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,4BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAA+B;AAC3C;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,+BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAA+B;AAC3C;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,GAAA;YACNC,OAAS,EAAA,qBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,QAAA;YACNC,OAAS,EAAA,iBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAAsB;AAClC;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,YAAA;YACNC,OAAS,EAAA,oBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAAsB;AAClC;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,QAAA;YACRC,IAAM,EAAA,YAAA;YACNC,OAAS,EAAA,oBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAA+B;AAC3C;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAAsB;AAClC;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,mBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAAsB;AAClC;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,qBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAA+B;AAC3C;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,qBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAA+B;AAC3C;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,mBAAA;YACNC,OAAS,EAAA,2BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAAsB;AAClC;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,sBAAA;YACNC,OAAS,EAAA,8BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAA+B;AAC3C;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,oBAAA;YACNC,OAAS,EAAA,4BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAA+B;AAC3C;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,sBAAA;YACNC,OAAS,EAAA,iCAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAA+B;AAC3C;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,+BAAA;YACNC,OAAS,EAAA,+BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAA+B;AAC3C;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,qCAAA;YACNC,OAAS,EAAA,+BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,uBAAA;wBACNF,MAAQ,EAAA;4BACNG,OAAS,EAAA;AAAC,gCAAA;AAAsB;AAClC;AACF;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,sCAAA;YACNC,OAAS,EAAA,mCAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH;;;;"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var aiMetadataJob = require('../models/ai-metadata-job.js');
|
|
4
|
+
|
|
5
|
+
const createAIMetadataJobsService = ({ strapi })=>({
|
|
6
|
+
async createJob () {
|
|
7
|
+
const job = await strapi.db.query(aiMetadataJob.AI_METADATA_JOB_UID).create({
|
|
8
|
+
data: {
|
|
9
|
+
status: 'processing',
|
|
10
|
+
createdAt: new Date()
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
return job.id;
|
|
14
|
+
},
|
|
15
|
+
async getJob (jobId) {
|
|
16
|
+
return strapi.db.query(aiMetadataJob.AI_METADATA_JOB_UID).findOne({
|
|
17
|
+
where: {
|
|
18
|
+
id: jobId
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
async updateJob (jobId, updates) {
|
|
23
|
+
await strapi.db.query(aiMetadataJob.AI_METADATA_JOB_UID).update({
|
|
24
|
+
where: {
|
|
25
|
+
id: jobId
|
|
26
|
+
},
|
|
27
|
+
data: updates
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
async deleteJob (jobId) {
|
|
31
|
+
await strapi.db.query(aiMetadataJob.AI_METADATA_JOB_UID).delete({
|
|
32
|
+
where: {
|
|
33
|
+
id: jobId
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
},
|
|
37
|
+
async getLatestActiveJob () {
|
|
38
|
+
// Return the most recent job, regardless of status
|
|
39
|
+
// This allows the frontend to see completed/failed status
|
|
40
|
+
return strapi.db.query(aiMetadataJob.AI_METADATA_JOB_UID).findOne({
|
|
41
|
+
orderBy: {
|
|
42
|
+
createdAt: 'desc'
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
async registerCron () {
|
|
47
|
+
strapi.cron.add({
|
|
48
|
+
aiMetadataJobsCleanup: {
|
|
49
|
+
async task () {
|
|
50
|
+
try {
|
|
51
|
+
const result = await strapi.db.query(aiMetadataJob.AI_METADATA_JOB_UID).deleteMany({
|
|
52
|
+
where: {
|
|
53
|
+
status: {
|
|
54
|
+
$ne: 'processing'
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
if (result.count > 0) {
|
|
59
|
+
strapi.log.info(`Cleaned up ${result.count} old AI metadata jobs`);
|
|
60
|
+
}
|
|
61
|
+
} catch (error) {
|
|
62
|
+
strapi.log.error('Failed to cleanup AI metadata jobs:', error);
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
options: '0 0 * * *'
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
exports.createAIMetadataJobsService = createAIMetadataJobsService;
|
|
72
|
+
//# sourceMappingURL=ai-metadata-jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-metadata-jobs.js","sources":["../../../server/src/services/ai-metadata-jobs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { AIMetadataJob } from '../../../shared/contracts/ai-metadata-jobs';\nimport { AI_METADATA_JOB_UID } from '../models/ai-metadata-job';\n\nexport const createAIMetadataJobsService = ({ strapi }: { strapi: Core.Strapi }) => ({\n async createJob(): Promise<number> {\n const job = await strapi.db.query(AI_METADATA_JOB_UID).create({\n data: {\n status: 'processing',\n createdAt: new Date(),\n },\n });\n\n return job.id;\n },\n\n async getJob(jobId: number): Promise<AIMetadataJob | null> {\n return strapi.db.query(AI_METADATA_JOB_UID).findOne({\n where: { id: jobId },\n });\n },\n\n async updateJob(\n jobId: number,\n updates: Partial<Omit<AIMetadataJob, 'id' | 'createdAt'>>\n ): Promise<void> {\n await strapi.db.query(AI_METADATA_JOB_UID).update({\n where: { id: jobId },\n data: updates,\n });\n },\n\n async deleteJob(jobId: number): Promise<void> {\n await strapi.db.query(AI_METADATA_JOB_UID).delete({\n where: { id: jobId },\n });\n },\n\n async getLatestActiveJob(): Promise<AIMetadataJob | null> {\n // Return the most recent job, regardless of status\n // This allows the frontend to see completed/failed status\n return strapi.db.query(AI_METADATA_JOB_UID).findOne({\n orderBy: { createdAt: 'desc' },\n });\n },\n\n async registerCron() {\n strapi.cron.add({\n aiMetadataJobsCleanup: {\n async task() {\n try {\n const result = await strapi.db.query(AI_METADATA_JOB_UID).deleteMany({\n where: {\n status: { $ne: 'processing' },\n },\n });\n\n if (result.count > 0) {\n strapi.log.info(`Cleaned up ${result.count} old AI metadata jobs`);\n }\n } catch (error) {\n strapi.log.error('Failed to cleanup AI metadata jobs:', error);\n }\n },\n options: '0 0 * * *', // Run once a day at midnight\n },\n });\n },\n});\n\nexport type { AIMetadataJob };\n"],"names":["createAIMetadataJobsService","strapi","createJob","job","db","query","AI_METADATA_JOB_UID","create","data","status","createdAt","Date","id","getJob","jobId","findOne","where","updateJob","updates","update","deleteJob","delete","getLatestActiveJob","orderBy","registerCron","cron","add","aiMetadataJobsCleanup","task","result","deleteMany","$ne","count","log","info","error","options"],"mappings":";;;;MAKaA,2BAA8B,GAAA,CAAC,EAAEC,MAAM,EAA2B,IAAM;QACnF,MAAMC,SAAAA,CAAAA,GAAAA;YACJ,MAAMC,GAAAA,GAAM,MAAMF,MAAOG,CAAAA,EAAE,CAACC,KAAK,CAACC,iCAAqBC,CAAAA,CAAAA,MAAM,CAAC;gBAC5DC,IAAM,EAAA;oBACJC,MAAQ,EAAA,YAAA;AACRC,oBAAAA,SAAAA,EAAW,IAAIC,IAAAA;AACjB;AACF,aAAA,CAAA;AAEA,YAAA,OAAOR,IAAIS,EAAE;AACf,SAAA;AAEA,QAAA,MAAMC,QAAOC,KAAa,EAAA;AACxB,YAAA,OAAOb,OAAOG,EAAE,CAACC,KAAK,CAACC,iCAAAA,CAAAA,CAAqBS,OAAO,CAAC;gBAClDC,KAAO,EAAA;oBAAEJ,EAAIE,EAAAA;AAAM;AACrB,aAAA,CAAA;AACF,SAAA;QAEA,MAAMG,SAAAA,CAAAA,CACJH,KAAa,EACbI,OAAyD,EAAA;AAEzD,YAAA,MAAMjB,OAAOG,EAAE,CAACC,KAAK,CAACC,iCAAAA,CAAAA,CAAqBa,MAAM,CAAC;gBAChDH,KAAO,EAAA;oBAAEJ,EAAIE,EAAAA;AAAM,iBAAA;gBACnBN,IAAMU,EAAAA;AACR,aAAA,CAAA;AACF,SAAA;AAEA,QAAA,MAAME,WAAUN,KAAa,EAAA;AAC3B,YAAA,MAAMb,OAAOG,EAAE,CAACC,KAAK,CAACC,iCAAAA,CAAAA,CAAqBe,MAAM,CAAC;gBAChDL,KAAO,EAAA;oBAAEJ,EAAIE,EAAAA;AAAM;AACrB,aAAA,CAAA;AACF,SAAA;QAEA,MAAMQ,kBAAAA,CAAAA,GAAAA;;;AAGJ,YAAA,OAAOrB,OAAOG,EAAE,CAACC,KAAK,CAACC,iCAAAA,CAAAA,CAAqBS,OAAO,CAAC;gBAClDQ,OAAS,EAAA;oBAAEb,SAAW,EAAA;AAAO;AAC/B,aAAA,CAAA;AACF,SAAA;QAEA,MAAMc,YAAAA,CAAAA,GAAAA;YACJvB,MAAOwB,CAAAA,IAAI,CAACC,GAAG,CAAC;gBACdC,qBAAuB,EAAA;oBACrB,MAAMC,IAAAA,CAAAA,GAAAA;wBACJ,IAAI;4BACF,MAAMC,MAAAA,GAAS,MAAM5B,MAAOG,CAAAA,EAAE,CAACC,KAAK,CAACC,iCAAqBwB,CAAAA,CAAAA,UAAU,CAAC;gCACnEd,KAAO,EAAA;oCACLP,MAAQ,EAAA;wCAAEsB,GAAK,EAAA;AAAa;AAC9B;AACF,6BAAA,CAAA;4BAEA,IAAIF,MAAAA,CAAOG,KAAK,GAAG,CAAG,EAAA;gCACpB/B,MAAOgC,CAAAA,GAAG,CAACC,IAAI,CAAC,CAAC,WAAW,EAAEL,MAAOG,CAAAA,KAAK,CAAC,qBAAqB,CAAC,CAAA;AACnE;AACF,yBAAA,CAAE,OAAOG,KAAO,EAAA;AACdlC,4BAAAA,MAAAA,CAAOgC,GAAG,CAACE,KAAK,CAAC,qCAAuCA,EAAAA,KAAAA,CAAAA;AAC1D;AACF,qBAAA;oBACAC,OAAS,EAAA;AACX;AACF,aAAA,CAAA;AACF;AACF,KAAA;;;;"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { AI_METADATA_JOB_UID } from '../models/ai-metadata-job.mjs';
|
|
2
|
+
|
|
3
|
+
const createAIMetadataJobsService = ({ strapi })=>({
|
|
4
|
+
async createJob () {
|
|
5
|
+
const job = await strapi.db.query(AI_METADATA_JOB_UID).create({
|
|
6
|
+
data: {
|
|
7
|
+
status: 'processing',
|
|
8
|
+
createdAt: new Date()
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
return job.id;
|
|
12
|
+
},
|
|
13
|
+
async getJob (jobId) {
|
|
14
|
+
return strapi.db.query(AI_METADATA_JOB_UID).findOne({
|
|
15
|
+
where: {
|
|
16
|
+
id: jobId
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
},
|
|
20
|
+
async updateJob (jobId, updates) {
|
|
21
|
+
await strapi.db.query(AI_METADATA_JOB_UID).update({
|
|
22
|
+
where: {
|
|
23
|
+
id: jobId
|
|
24
|
+
},
|
|
25
|
+
data: updates
|
|
26
|
+
});
|
|
27
|
+
},
|
|
28
|
+
async deleteJob (jobId) {
|
|
29
|
+
await strapi.db.query(AI_METADATA_JOB_UID).delete({
|
|
30
|
+
where: {
|
|
31
|
+
id: jobId
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
},
|
|
35
|
+
async getLatestActiveJob () {
|
|
36
|
+
// Return the most recent job, regardless of status
|
|
37
|
+
// This allows the frontend to see completed/failed status
|
|
38
|
+
return strapi.db.query(AI_METADATA_JOB_UID).findOne({
|
|
39
|
+
orderBy: {
|
|
40
|
+
createdAt: 'desc'
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
async registerCron () {
|
|
45
|
+
strapi.cron.add({
|
|
46
|
+
aiMetadataJobsCleanup: {
|
|
47
|
+
async task () {
|
|
48
|
+
try {
|
|
49
|
+
const result = await strapi.db.query(AI_METADATA_JOB_UID).deleteMany({
|
|
50
|
+
where: {
|
|
51
|
+
status: {
|
|
52
|
+
$ne: 'processing'
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
if (result.count > 0) {
|
|
57
|
+
strapi.log.info(`Cleaned up ${result.count} old AI metadata jobs`);
|
|
58
|
+
}
|
|
59
|
+
} catch (error) {
|
|
60
|
+
strapi.log.error('Failed to cleanup AI metadata jobs:', error);
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
options: '0 0 * * *'
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
export { createAIMetadataJobsService };
|
|
70
|
+
//# sourceMappingURL=ai-metadata-jobs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-metadata-jobs.mjs","sources":["../../../server/src/services/ai-metadata-jobs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\n\nimport { AIMetadataJob } from '../../../shared/contracts/ai-metadata-jobs';\nimport { AI_METADATA_JOB_UID } from '../models/ai-metadata-job';\n\nexport const createAIMetadataJobsService = ({ strapi }: { strapi: Core.Strapi }) => ({\n async createJob(): Promise<number> {\n const job = await strapi.db.query(AI_METADATA_JOB_UID).create({\n data: {\n status: 'processing',\n createdAt: new Date(),\n },\n });\n\n return job.id;\n },\n\n async getJob(jobId: number): Promise<AIMetadataJob | null> {\n return strapi.db.query(AI_METADATA_JOB_UID).findOne({\n where: { id: jobId },\n });\n },\n\n async updateJob(\n jobId: number,\n updates: Partial<Omit<AIMetadataJob, 'id' | 'createdAt'>>\n ): Promise<void> {\n await strapi.db.query(AI_METADATA_JOB_UID).update({\n where: { id: jobId },\n data: updates,\n });\n },\n\n async deleteJob(jobId: number): Promise<void> {\n await strapi.db.query(AI_METADATA_JOB_UID).delete({\n where: { id: jobId },\n });\n },\n\n async getLatestActiveJob(): Promise<AIMetadataJob | null> {\n // Return the most recent job, regardless of status\n // This allows the frontend to see completed/failed status\n return strapi.db.query(AI_METADATA_JOB_UID).findOne({\n orderBy: { createdAt: 'desc' },\n });\n },\n\n async registerCron() {\n strapi.cron.add({\n aiMetadataJobsCleanup: {\n async task() {\n try {\n const result = await strapi.db.query(AI_METADATA_JOB_UID).deleteMany({\n where: {\n status: { $ne: 'processing' },\n },\n });\n\n if (result.count > 0) {\n strapi.log.info(`Cleaned up ${result.count} old AI metadata jobs`);\n }\n } catch (error) {\n strapi.log.error('Failed to cleanup AI metadata jobs:', error);\n }\n },\n options: '0 0 * * *', // Run once a day at midnight\n },\n });\n },\n});\n\nexport type { AIMetadataJob };\n"],"names":["createAIMetadataJobsService","strapi","createJob","job","db","query","AI_METADATA_JOB_UID","create","data","status","createdAt","Date","id","getJob","jobId","findOne","where","updateJob","updates","update","deleteJob","delete","getLatestActiveJob","orderBy","registerCron","cron","add","aiMetadataJobsCleanup","task","result","deleteMany","$ne","count","log","info","error","options"],"mappings":";;MAKaA,2BAA8B,GAAA,CAAC,EAAEC,MAAM,EAA2B,IAAM;QACnF,MAAMC,SAAAA,CAAAA,GAAAA;YACJ,MAAMC,GAAAA,GAAM,MAAMF,MAAOG,CAAAA,EAAE,CAACC,KAAK,CAACC,mBAAqBC,CAAAA,CAAAA,MAAM,CAAC;gBAC5DC,IAAM,EAAA;oBACJC,MAAQ,EAAA,YAAA;AACRC,oBAAAA,SAAAA,EAAW,IAAIC,IAAAA;AACjB;AACF,aAAA,CAAA;AAEA,YAAA,OAAOR,IAAIS,EAAE;AACf,SAAA;AAEA,QAAA,MAAMC,QAAOC,KAAa,EAAA;AACxB,YAAA,OAAOb,OAAOG,EAAE,CAACC,KAAK,CAACC,mBAAAA,CAAAA,CAAqBS,OAAO,CAAC;gBAClDC,KAAO,EAAA;oBAAEJ,EAAIE,EAAAA;AAAM;AACrB,aAAA,CAAA;AACF,SAAA;QAEA,MAAMG,SAAAA,CAAAA,CACJH,KAAa,EACbI,OAAyD,EAAA;AAEzD,YAAA,MAAMjB,OAAOG,EAAE,CAACC,KAAK,CAACC,mBAAAA,CAAAA,CAAqBa,MAAM,CAAC;gBAChDH,KAAO,EAAA;oBAAEJ,EAAIE,EAAAA;AAAM,iBAAA;gBACnBN,IAAMU,EAAAA;AACR,aAAA,CAAA;AACF,SAAA;AAEA,QAAA,MAAME,WAAUN,KAAa,EAAA;AAC3B,YAAA,MAAMb,OAAOG,EAAE,CAACC,KAAK,CAACC,mBAAAA,CAAAA,CAAqBe,MAAM,CAAC;gBAChDL,KAAO,EAAA;oBAAEJ,EAAIE,EAAAA;AAAM;AACrB,aAAA,CAAA;AACF,SAAA;QAEA,MAAMQ,kBAAAA,CAAAA,GAAAA;;;AAGJ,YAAA,OAAOrB,OAAOG,EAAE,CAACC,KAAK,CAACC,mBAAAA,CAAAA,CAAqBS,OAAO,CAAC;gBAClDQ,OAAS,EAAA;oBAAEb,SAAW,EAAA;AAAO;AAC/B,aAAA,CAAA;AACF,SAAA;QAEA,MAAMc,YAAAA,CAAAA,GAAAA;YACJvB,MAAOwB,CAAAA,IAAI,CAACC,GAAG,CAAC;gBACdC,qBAAuB,EAAA;oBACrB,MAAMC,IAAAA,CAAAA,GAAAA;wBACJ,IAAI;4BACF,MAAMC,MAAAA,GAAS,MAAM5B,MAAOG,CAAAA,EAAE,CAACC,KAAK,CAACC,mBAAqBwB,CAAAA,CAAAA,UAAU,CAAC;gCACnEd,KAAO,EAAA;oCACLP,MAAQ,EAAA;wCAAEsB,GAAK,EAAA;AAAa;AAC9B;AACF,6BAAA,CAAA;4BAEA,IAAIF,MAAAA,CAAOG,KAAK,GAAG,CAAG,EAAA;gCACpB/B,MAAOgC,CAAAA,GAAG,CAACC,IAAI,CAAC,CAAC,WAAW,EAAEL,MAAOG,CAAAA,KAAK,CAAC,qBAAqB,CAAC,CAAA;AACnE;AACF,yBAAA,CAAE,OAAOG,KAAO,EAAA;AACdlC,4BAAAA,MAAAA,CAAOgC,GAAG,CAACE,KAAK,CAAC,qCAAuCA,EAAAA,KAAAA,CAAAA;AAC1D;AACF,qBAAA;oBACAC,OAAS,EAAA;AACX;AACF,aAAA,CAAA;AACF;AACF,KAAA;;;;"}
|