@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.
Files changed (183) hide show
  1. package/dist/admin/components/EditAssetDialog/EditAssetContent.js +32 -3
  2. package/dist/admin/components/EditAssetDialog/EditAssetContent.js.map +1 -1
  3. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs +32 -3
  4. package/dist/admin/components/EditAssetDialog/EditAssetContent.mjs.map +1 -1
  5. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.js.map +1 -1
  6. package/dist/admin/components/EditAssetDialog/PreviewBox/AssetPreview.mjs.map +1 -1
  7. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js +57 -0
  8. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.js.map +1 -0
  9. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs +55 -0
  10. package/dist/admin/components/EditAssetDialog/PreviewBox/FocalPointActions.mjs.map +1 -0
  11. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js +96 -20
  12. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.js.map +1 -1
  13. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs +98 -22
  14. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewBox.mjs.map +1 -1
  15. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js +47 -0
  16. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.js.map +1 -1
  17. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs +44 -1
  18. package/dist/admin/components/EditAssetDialog/PreviewBox/PreviewComponents.mjs.map +1 -1
  19. package/dist/admin/future/App.js +45 -0
  20. package/dist/admin/future/App.js.map +1 -0
  21. package/dist/admin/future/App.mjs +43 -0
  22. package/dist/admin/future/App.mjs.map +1 -0
  23. package/dist/admin/future/pages/AIGenerationPage.js +24 -0
  24. package/dist/admin/future/pages/AIGenerationPage.js.map +1 -0
  25. package/dist/admin/future/pages/AIGenerationPage.mjs +22 -0
  26. package/dist/admin/future/pages/AIGenerationPage.mjs.map +1 -0
  27. package/dist/admin/future/pages/MediaLibraryPage.js +119 -0
  28. package/dist/admin/future/pages/MediaLibraryPage.js.map +1 -0
  29. package/dist/admin/future/pages/MediaLibraryPage.mjs +98 -0
  30. package/dist/admin/future/pages/MediaLibraryPage.mjs.map +1 -0
  31. package/dist/admin/future/services/api.js +28 -0
  32. package/dist/admin/future/services/api.js.map +1 -0
  33. package/dist/admin/future/services/api.mjs +25 -0
  34. package/dist/admin/future/services/api.mjs.map +1 -0
  35. package/dist/admin/future/utils/translations.js +8 -0
  36. package/dist/admin/future/utils/translations.js.map +1 -0
  37. package/dist/admin/future/utils/translations.mjs +6 -0
  38. package/dist/admin/future/utils/translations.mjs.map +1 -0
  39. package/dist/admin/hooks/useAIMetadataJob.js +114 -0
  40. package/dist/admin/hooks/useAIMetadataJob.js.map +1 -0
  41. package/dist/admin/hooks/useAIMetadataJob.mjs +93 -0
  42. package/dist/admin/hooks/useAIMetadataJob.mjs.map +1 -0
  43. package/dist/admin/hooks/useEditAsset.js +1 -0
  44. package/dist/admin/hooks/useEditAsset.js.map +1 -1
  45. package/dist/admin/hooks/useEditAsset.mjs +1 -0
  46. package/dist/admin/hooks/useEditAsset.mjs.map +1 -1
  47. package/dist/admin/index.js +23 -4
  48. package/dist/admin/index.js.map +1 -1
  49. package/dist/admin/index.mjs +24 -5
  50. package/dist/admin/index.mjs.map +1 -1
  51. package/dist/admin/package.json.js +6 -5
  52. package/dist/admin/package.json.js.map +1 -1
  53. package/dist/admin/package.json.mjs +6 -5
  54. package/dist/admin/package.json.mjs.map +1 -1
  55. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js +1 -0
  56. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.js.map +1 -1
  57. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs +1 -0
  58. package/dist/admin/pages/App/ConfigureTheView/ConfigureTheView.mjs.map +1 -1
  59. package/dist/admin/pages/App/components/Header.js +3 -0
  60. package/dist/admin/pages/App/components/Header.js.map +1 -1
  61. package/dist/admin/pages/App/components/Header.mjs +3 -0
  62. package/dist/admin/pages/App/components/Header.mjs.map +1 -1
  63. package/dist/admin/pages/SettingsPage/SettingsPage.js +252 -67
  64. package/dist/admin/pages/SettingsPage/SettingsPage.js.map +1 -1
  65. package/dist/admin/pages/SettingsPage/SettingsPage.mjs +256 -71
  66. package/dist/admin/pages/SettingsPage/SettingsPage.mjs.map +1 -1
  67. package/dist/admin/src/components/EditAssetDialog/PreviewBox/AssetPreview.d.ts +1 -2
  68. package/dist/admin/src/components/EditAssetDialog/PreviewBox/FocalPointActions.d.ts +7 -0
  69. package/dist/admin/src/components/EditAssetDialog/PreviewBox/PreviewBox.d.ts +6 -2
  70. package/dist/admin/src/components/EditAssetDialog/PreviewBox/PreviewComponents.d.ts +13 -0
  71. package/dist/admin/src/future/App.d.ts +1 -0
  72. package/dist/admin/src/future/pages/AIGenerationPage.d.ts +1 -0
  73. package/dist/admin/src/future/pages/MediaLibraryPage.d.ts +1 -0
  74. package/dist/admin/src/future/services/api.d.ts +6 -0
  75. package/dist/admin/src/future/services/settings.d.ts +2 -0
  76. package/dist/admin/src/future/utils/translations.d.ts +1 -0
  77. package/dist/admin/src/hooks/useAIMetadataJob.d.ts +9 -0
  78. package/dist/admin/translations/de.json.js +44 -1
  79. package/dist/admin/translations/de.json.js.map +1 -1
  80. package/dist/admin/translations/de.json.mjs +44 -1
  81. package/dist/admin/translations/de.json.mjs.map +1 -1
  82. package/dist/admin/translations/en.json.js +17 -0
  83. package/dist/admin/translations/en.json.js.map +1 -1
  84. package/dist/admin/translations/en.json.mjs +17 -0
  85. package/dist/admin/translations/en.json.mjs.map +1 -1
  86. package/dist/server/bootstrap.js +1 -0
  87. package/dist/server/bootstrap.js.map +1 -1
  88. package/dist/server/bootstrap.mjs +1 -0
  89. package/dist/server/bootstrap.mjs.map +1 -1
  90. package/dist/server/content-types/file.js +4 -0
  91. package/dist/server/content-types/file.js.map +1 -1
  92. package/dist/server/content-types/file.mjs +4 -0
  93. package/dist/server/content-types/file.mjs.map +1 -1
  94. package/dist/server/controllers/admin-file.js +86 -0
  95. package/dist/server/controllers/admin-file.js.map +1 -1
  96. package/dist/server/controllers/admin-file.mjs +86 -0
  97. package/dist/server/controllers/admin-file.mjs.map +1 -1
  98. package/dist/server/controllers/admin-upload.js +3 -23
  99. package/dist/server/controllers/admin-upload.js.map +1 -1
  100. package/dist/server/controllers/admin-upload.mjs +3 -23
  101. package/dist/server/controllers/admin-upload.mjs.map +1 -1
  102. package/dist/server/controllers/validation/admin/upload.js +5 -0
  103. package/dist/server/controllers/validation/admin/upload.js.map +1 -1
  104. package/dist/server/controllers/validation/admin/upload.mjs +5 -0
  105. package/dist/server/controllers/validation/admin/upload.mjs.map +1 -1
  106. package/dist/server/controllers/validation/content-api/upload.js +6 -1
  107. package/dist/server/controllers/validation/content-api/upload.js.map +1 -1
  108. package/dist/server/controllers/validation/content-api/upload.mjs +6 -1
  109. package/dist/server/controllers/validation/content-api/upload.mjs.map +1 -1
  110. package/dist/server/models/ai-metadata-job.js +36 -0
  111. package/dist/server/models/ai-metadata-job.js.map +1 -0
  112. package/dist/server/models/ai-metadata-job.mjs +33 -0
  113. package/dist/server/models/ai-metadata-job.mjs.map +1 -0
  114. package/dist/server/register.js +3 -0
  115. package/dist/server/register.js.map +1 -1
  116. package/dist/server/register.mjs +3 -0
  117. package/dist/server/register.mjs.map +1 -1
  118. package/dist/server/routes/admin.js +46 -0
  119. package/dist/server/routes/admin.js.map +1 -1
  120. package/dist/server/routes/admin.mjs +46 -0
  121. package/dist/server/routes/admin.mjs.map +1 -1
  122. package/dist/server/services/ai-metadata-jobs.js +72 -0
  123. package/dist/server/services/ai-metadata-jobs.js.map +1 -0
  124. package/dist/server/services/ai-metadata-jobs.mjs +70 -0
  125. package/dist/server/services/ai-metadata-jobs.mjs.map +1 -0
  126. package/dist/server/services/ai-metadata.js +170 -20
  127. package/dist/server/services/ai-metadata.js.map +1 -1
  128. package/dist/server/services/ai-metadata.mjs +170 -20
  129. package/dist/server/services/ai-metadata.mjs.map +1 -1
  130. package/dist/server/services/index.js +3 -1
  131. package/dist/server/services/index.js.map +1 -1
  132. package/dist/server/services/index.mjs +3 -1
  133. package/dist/server/services/index.mjs.map +1 -1
  134. package/dist/server/services/upload.js +3 -1
  135. package/dist/server/services/upload.js.map +1 -1
  136. package/dist/server/services/upload.mjs +3 -1
  137. package/dist/server/services/upload.mjs.map +1 -1
  138. package/dist/server/src/bootstrap.d.ts.map +1 -1
  139. package/dist/server/src/content-types/file.d.ts +4 -0
  140. package/dist/server/src/content-types/file.d.ts.map +1 -1
  141. package/dist/server/src/content-types/index.d.ts +4 -0
  142. package/dist/server/src/content-types/index.d.ts.map +1 -1
  143. package/dist/server/src/controllers/admin-file.d.ts +3 -0
  144. package/dist/server/src/controllers/admin-file.d.ts.map +1 -1
  145. package/dist/server/src/controllers/admin-upload.d.ts.map +1 -1
  146. package/dist/server/src/controllers/index.d.ts +3 -0
  147. package/dist/server/src/controllers/index.d.ts.map +1 -1
  148. package/dist/server/src/controllers/validation/admin/upload.d.ts +240 -0
  149. package/dist/server/src/controllers/validation/admin/upload.d.ts.map +1 -1
  150. package/dist/server/src/controllers/validation/content-api/upload.d.ts +180 -0
  151. package/dist/server/src/controllers/validation/content-api/upload.d.ts.map +1 -1
  152. package/dist/server/src/index.d.ts +32 -2
  153. package/dist/server/src/index.d.ts.map +1 -1
  154. package/dist/server/src/models/ai-metadata-job.d.ts +5 -0
  155. package/dist/server/src/models/ai-metadata-job.d.ts.map +1 -0
  156. package/dist/server/src/models/index.d.ts +5 -0
  157. package/dist/server/src/models/index.d.ts.map +1 -0
  158. package/dist/server/src/register.d.ts.map +1 -1
  159. package/dist/server/src/routes/admin.d.ts.map +1 -1
  160. package/dist/server/src/services/ai-metadata-jobs.d.ts +14 -0
  161. package/dist/server/src/services/ai-metadata-jobs.d.ts.map +1 -0
  162. package/dist/server/src/services/ai-metadata.d.ts +25 -2
  163. package/dist/server/src/services/ai-metadata.d.ts.map +1 -1
  164. package/dist/server/src/services/index.d.ts +25 -2
  165. package/dist/server/src/services/index.d.ts.map +1 -1
  166. package/dist/server/src/services/upload.d.ts +1 -1
  167. package/dist/server/src/services/upload.d.ts.map +1 -1
  168. package/dist/server/src/types.d.ts +6 -0
  169. package/dist/server/src/types.d.ts.map +1 -1
  170. package/dist/server/src/utils/images.d.ts +7 -0
  171. package/dist/server/src/utils/images.d.ts.map +1 -0
  172. package/dist/server/src/utils/index.d.ts +2 -0
  173. package/dist/server/src/utils/index.d.ts.map +1 -1
  174. package/dist/server/utils/images.js +35 -0
  175. package/dist/server/utils/images.js.map +1 -0
  176. package/dist/server/utils/images.mjs +33 -0
  177. package/dist/server/utils/images.mjs.map +1 -0
  178. package/dist/server/utils/index.js.map +1 -1
  179. package/dist/server/utils/index.mjs.map +1 -1
  180. package/dist/shared/contracts/ai-metadata-jobs.d.ts +53 -0
  181. package/dist/shared/contracts/ai-metadata-jobs.d.ts.map +1 -0
  182. package/dist/shared/contracts/files.d.ts +39 -0
  183. 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":["fileInfoSchema","yup","object","name","string","nullable","alternativeText","caption","noUnknown","uploadSchema","fileInfo","multiUploadSchema","array","of","validateUploadBody","data","isMulti","schema","validateYupSchema","strict"],"mappings":";;AAEA,MAAMA,cAAAA,GAAiBC,GACpBC,CAAAA,MAAM,CAAC;IACNC,IAAMF,EAAAA,GAAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ,EAAA;IAC3BC,eAAiBL,EAAAA,GAAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ,EAAA;IACtCE,OAASN,EAAAA,GAAAA,CAAIG,MAAM,EAAA,CAAGC,QAAQ;AAChC,CAAA,CAAA,CACCG,SAAS,EAAA;AAEZ,MAAMC,YAAAA,GAAeR,GAAIC,CAAAA,MAAM,CAAC;IAC9BQ,QAAUV,EAAAA;AACZ,CAAA,CAAA;AAEA,MAAMW,iBAAAA,GAAoBV,GAAIC,CAAAA,MAAM,CAAC;AACnCQ,IAAAA,QAAAA,EAAUT,GAAIW,CAAAA,KAAK,EAAGC,CAAAA,EAAE,CAACb,cAAAA;AAC3B,CAAA,CAAA;AAEA,MAAMc,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;;;;"}
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;;;;"}
@@ -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","get","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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"}
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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"}
@@ -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","get","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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"}
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":";;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;AACD;AACH;;;;"}
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":"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"}
@@ -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;;;;"}