@strapi/i18n 0.0.0-next.06f5279fc9311f59f0473629613fe9516b74ddca → 0.0.0-next.07574a2620494b9275cb638d597903ed2f92c360

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 (184) hide show
  1. package/dist/admin/components/BulkLocaleActionModal.js.map +1 -1
  2. package/dist/admin/components/BulkLocaleActionModal.mjs.map +1 -1
  3. package/dist/admin/components/CMHeaderActions.js +240 -5
  4. package/dist/admin/components/CMHeaderActions.js.map +1 -1
  5. package/dist/admin/components/CMHeaderActions.mjs +244 -10
  6. package/dist/admin/components/CMHeaderActions.mjs.map +1 -1
  7. package/dist/admin/components/CreateLocale.js +1 -1
  8. package/dist/admin/components/CreateLocale.js.map +1 -1
  9. package/dist/admin/components/CreateLocale.mjs +1 -1
  10. package/dist/admin/components/CreateLocale.mjs.map +1 -1
  11. package/dist/admin/components/EditLocale.js +1 -1
  12. package/dist/admin/components/EditLocale.js.map +1 -1
  13. package/dist/admin/components/EditLocale.mjs +1 -1
  14. package/dist/admin/components/EditLocale.mjs.map +1 -1
  15. package/dist/admin/components/LocaleListCell.js +65 -45
  16. package/dist/admin/components/LocaleListCell.js.map +1 -1
  17. package/dist/admin/components/LocaleListCell.mjs +66 -46
  18. package/dist/admin/components/LocaleListCell.mjs.map +1 -1
  19. package/dist/admin/components/LocalePicker.js +18 -11
  20. package/dist/admin/components/LocalePicker.js.map +1 -1
  21. package/dist/admin/components/LocalePicker.mjs +19 -12
  22. package/dist/admin/components/LocalePicker.mjs.map +1 -1
  23. package/dist/admin/contentManagerHooks/editView.js +6 -3
  24. package/dist/admin/contentManagerHooks/editView.js.map +1 -1
  25. package/dist/admin/contentManagerHooks/editView.mjs +7 -4
  26. package/dist/admin/contentManagerHooks/editView.mjs.map +1 -1
  27. package/dist/admin/contentManagerHooks/listView.js +2 -1
  28. package/dist/admin/contentManagerHooks/listView.js.map +1 -1
  29. package/dist/admin/contentManagerHooks/listView.mjs +2 -1
  30. package/dist/admin/contentManagerHooks/listView.mjs.map +1 -1
  31. package/dist/admin/hooks/useAILocalizationJobsPolling.js +110 -0
  32. package/dist/admin/hooks/useAILocalizationJobsPolling.js.map +1 -0
  33. package/dist/admin/hooks/useAILocalizationJobsPolling.mjs +89 -0
  34. package/dist/admin/hooks/useAILocalizationJobsPolling.mjs.map +1 -0
  35. package/dist/admin/hooks/useI18n.js +4 -4
  36. package/dist/admin/hooks/useI18n.js.map +1 -1
  37. package/dist/admin/hooks/useI18n.mjs +4 -4
  38. package/dist/admin/hooks/useI18n.mjs.map +1 -1
  39. package/dist/admin/index.js +1 -0
  40. package/dist/admin/index.js.map +1 -1
  41. package/dist/admin/index.mjs +2 -1
  42. package/dist/admin/index.mjs.map +1 -1
  43. package/dist/admin/pages/SettingsPage.js +121 -46
  44. package/dist/admin/pages/SettingsPage.js.map +1 -1
  45. package/dist/admin/pages/SettingsPage.mjs +124 -30
  46. package/dist/admin/pages/SettingsPage.mjs.map +1 -1
  47. package/dist/admin/services/aiLocalizationJobs.js +26 -0
  48. package/dist/admin/services/aiLocalizationJobs.js.map +1 -0
  49. package/dist/admin/services/aiLocalizationJobs.mjs +24 -0
  50. package/dist/admin/services/aiLocalizationJobs.mjs.map +1 -0
  51. package/dist/admin/services/api.js +3 -1
  52. package/dist/admin/services/api.js.map +1 -1
  53. package/dist/admin/services/api.mjs +3 -1
  54. package/dist/admin/services/api.mjs.map +1 -1
  55. package/dist/admin/services/locales.js.map +1 -1
  56. package/dist/admin/services/locales.mjs.map +1 -1
  57. package/dist/admin/services/settings.js +29 -0
  58. package/dist/admin/services/settings.js.map +1 -0
  59. package/dist/admin/services/settings.mjs +26 -0
  60. package/dist/admin/services/settings.mjs.map +1 -0
  61. package/dist/admin/src/components/CMHeaderActions.d.ts +17 -4
  62. package/dist/admin/src/components/LocaleListCell.d.ts +2 -1
  63. package/dist/admin/src/hooks/useAILocalizationJobsPolling.d.ts +9 -0
  64. package/dist/admin/src/services/aiLocalizationJobs.d.ts +6 -0
  65. package/dist/admin/src/services/api.d.ts +1 -1
  66. package/dist/admin/src/services/locales.d.ts +1 -1
  67. package/dist/admin/src/services/relations.d.ts +1 -1
  68. package/dist/admin/src/services/settings.d.ts +5 -0
  69. package/dist/admin/translations/en.json.js +10 -0
  70. package/dist/admin/translations/en.json.js.map +1 -1
  71. package/dist/admin/translations/en.json.mjs +10 -0
  72. package/dist/admin/translations/en.json.mjs.map +1 -1
  73. package/dist/admin/utils/clean.js +2 -2
  74. package/dist/admin/utils/clean.js.map +1 -1
  75. package/dist/admin/utils/clean.mjs +2 -2
  76. package/dist/admin/utils/clean.mjs.map +1 -1
  77. package/dist/admin/utils/getTranslation.js.map +1 -1
  78. package/dist/admin/utils/getTranslation.mjs.map +1 -1
  79. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -1
  80. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -1
  81. package/dist/server/bootstrap.js +2 -0
  82. package/dist/server/bootstrap.js.map +1 -1
  83. package/dist/server/bootstrap.mjs +2 -0
  84. package/dist/server/bootstrap.mjs.map +1 -1
  85. package/dist/server/constants/iso-locales.json.js +4 -0
  86. package/dist/server/constants/iso-locales.json.js.map +1 -1
  87. package/dist/server/constants/iso-locales.json.mjs +4 -0
  88. package/dist/server/constants/iso-locales.json.mjs.map +1 -1
  89. package/dist/server/controllers/ai-localization-jobs.js +47 -0
  90. package/dist/server/controllers/ai-localization-jobs.js.map +1 -0
  91. package/dist/server/controllers/ai-localization-jobs.mjs +45 -0
  92. package/dist/server/controllers/ai-localization-jobs.mjs.map +1 -0
  93. package/dist/server/controllers/index.js +5 -1
  94. package/dist/server/controllers/index.js.map +1 -1
  95. package/dist/server/controllers/index.mjs +5 -1
  96. package/dist/server/controllers/index.mjs.map +1 -1
  97. package/dist/server/controllers/settings.js +24 -0
  98. package/dist/server/controllers/settings.js.map +1 -0
  99. package/dist/server/controllers/settings.mjs +22 -0
  100. package/dist/server/controllers/settings.mjs.map +1 -0
  101. package/dist/server/models/ai-localization-job.js +60 -0
  102. package/dist/server/models/ai-localization-job.js.map +1 -0
  103. package/dist/server/models/ai-localization-job.mjs +57 -0
  104. package/dist/server/models/ai-localization-job.mjs.map +1 -0
  105. package/dist/server/register.js +3 -1
  106. package/dist/server/register.js.map +1 -1
  107. package/dist/server/register.mjs +3 -1
  108. package/dist/server/register.mjs.map +1 -1
  109. package/dist/server/routes/admin.js +40 -0
  110. package/dist/server/routes/admin.js.map +1 -1
  111. package/dist/server/routes/admin.mjs +40 -0
  112. package/dist/server/routes/admin.mjs.map +1 -1
  113. package/dist/server/routes/content-api.js +11 -13
  114. package/dist/server/routes/content-api.js.map +1 -1
  115. package/dist/server/routes/content-api.mjs +11 -13
  116. package/dist/server/routes/content-api.mjs.map +1 -1
  117. package/dist/server/routes/index.mjs +2 -2
  118. package/dist/server/services/ai-localization-jobs.js +64 -0
  119. package/dist/server/services/ai-localization-jobs.js.map +1 -0
  120. package/dist/server/services/ai-localization-jobs.mjs +62 -0
  121. package/dist/server/services/ai-localization-jobs.mjs.map +1 -0
  122. package/dist/server/services/ai-localizations.js +276 -0
  123. package/dist/server/services/ai-localizations.js.map +1 -0
  124. package/dist/server/services/ai-localizations.mjs +274 -0
  125. package/dist/server/services/ai-localizations.mjs.map +1 -0
  126. package/dist/server/services/content-types.js.map +1 -1
  127. package/dist/server/services/content-types.mjs.map +1 -1
  128. package/dist/server/services/index.js +7 -1
  129. package/dist/server/services/index.js.map +1 -1
  130. package/dist/server/services/index.mjs +7 -1
  131. package/dist/server/services/index.mjs.map +1 -1
  132. package/dist/server/services/metrics.js +12 -1
  133. package/dist/server/services/metrics.js.map +1 -1
  134. package/dist/server/services/metrics.mjs +12 -1
  135. package/dist/server/services/metrics.mjs.map +1 -1
  136. package/dist/server/services/settings.js +25 -0
  137. package/dist/server/services/settings.js.map +1 -0
  138. package/dist/server/services/settings.mjs +23 -0
  139. package/dist/server/services/settings.mjs.map +1 -0
  140. package/dist/server/src/bootstrap.d.ts.map +1 -1
  141. package/dist/server/src/controllers/ai-localization-jobs.d.ts +17 -0
  142. package/dist/server/src/controllers/ai-localization-jobs.d.ts.map +1 -0
  143. package/dist/server/src/controllers/index.d.ts +10 -0
  144. package/dist/server/src/controllers/index.d.ts.map +1 -1
  145. package/dist/server/src/controllers/settings.d.ts +7 -0
  146. package/dist/server/src/controllers/settings.d.ts.map +1 -0
  147. package/dist/server/src/index.d.ts +49 -2
  148. package/dist/server/src/index.d.ts.map +1 -1
  149. package/dist/server/src/models/ai-localization-job.d.ts +5 -0
  150. package/dist/server/src/models/ai-localization-job.d.ts.map +1 -0
  151. package/dist/server/src/models/index.d.ts +5 -0
  152. package/dist/server/src/models/index.d.ts.map +1 -0
  153. package/dist/server/src/register.d.ts +1 -1
  154. package/dist/server/src/register.d.ts.map +1 -1
  155. package/dist/server/src/routes/admin.d.ts.map +1 -1
  156. package/dist/server/src/routes/content-api.d.ts +5 -2
  157. package/dist/server/src/routes/content-api.d.ts.map +1 -1
  158. package/dist/server/src/routes/index.d.ts +4 -1
  159. package/dist/server/src/routes/index.d.ts.map +1 -1
  160. package/dist/server/src/services/ai-localization-jobs.d.ts +26 -0
  161. package/dist/server/src/services/ai-localization-jobs.d.ts.map +1 -0
  162. package/dist/server/src/services/ai-localizations.d.ts +18 -0
  163. package/dist/server/src/services/ai-localizations.d.ts.map +1 -0
  164. package/dist/server/src/services/index.d.ts +34 -0
  165. package/dist/server/src/services/index.d.ts.map +1 -1
  166. package/dist/server/src/services/metrics.d.ts +1 -0
  167. package/dist/server/src/services/metrics.d.ts.map +1 -1
  168. package/dist/server/src/services/settings.d.ts +13 -0
  169. package/dist/server/src/services/settings.d.ts.map +1 -0
  170. package/dist/server/src/utils/index.d.ts +7 -1
  171. package/dist/server/src/utils/index.d.ts.map +1 -1
  172. package/dist/server/src/validation/settings.d.ts +12 -0
  173. package/dist/server/src/validation/settings.d.ts.map +1 -0
  174. package/dist/server/utils/index.js.map +1 -1
  175. package/dist/server/utils/index.mjs.map +1 -1
  176. package/dist/server/validation/settings.js +11 -0
  177. package/dist/server/validation/settings.js.map +1 -0
  178. package/dist/server/validation/settings.mjs +9 -0
  179. package/dist/server/validation/settings.mjs.map +1 -0
  180. package/dist/shared/contracts/ai-localization-jobs.d.ts +27 -0
  181. package/dist/shared/contracts/ai-localization-jobs.d.ts.map +1 -0
  182. package/dist/shared/contracts/settings.d.ts +40 -0
  183. package/dist/shared/contracts/shared.d.ts.map +1 -0
  184. package/package.json +10 -8
@@ -94,6 +94,46 @@ var admin = {
94
94
  'admin::isAuthenticatedAdmin'
95
95
  ]
96
96
  }
97
+ },
98
+ {
99
+ method: 'GET',
100
+ path: '/settings',
101
+ handler: 'settings.getSettings',
102
+ config: {
103
+ policies: [
104
+ 'admin::isAuthenticatedAdmin'
105
+ ]
106
+ }
107
+ },
108
+ {
109
+ method: 'PUT',
110
+ path: '/settings',
111
+ handler: 'settings.updateSettings',
112
+ config: {
113
+ policies: [
114
+ 'admin::isAuthenticatedAdmin'
115
+ ]
116
+ }
117
+ },
118
+ {
119
+ method: 'GET',
120
+ path: '/ai-localization-jobs/collection-types/:contentType/:documentId',
121
+ handler: 'ai-localization-jobs.getJobForCollectionType',
122
+ config: {
123
+ policies: [
124
+ 'admin::isAuthenticatedAdmin'
125
+ ]
126
+ }
127
+ },
128
+ {
129
+ method: 'GET',
130
+ path: '/ai-localization-jobs/single-types/:contentType',
131
+ handler: 'ai-localization-jobs.getJobForSingleType',
132
+ config: {
133
+ policies: [
134
+ 'admin::isAuthenticatedAdmin'
135
+ ]
136
+ }
97
137
  }
98
138
  ]
99
139
  };
@@ -1 +1 @@
1
- {"version":3,"file":"admin.js","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/iso-locales',\n handler: 'iso-locales.listIsoLocales',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/locales',\n handler: 'locales.listLocales',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'POST',\n path: '/locales',\n handler: 'locales.createLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.create'] },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/locales/:id',\n handler: 'locales.updateLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.update'] },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/locales/:id',\n handler: 'locales.deleteLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.delete'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/content-manager/actions/get-non-localized-fields',\n handler: 'content-types.getNonLocalizedAttributes',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":";;AAAA,YAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,4BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA2B;AAAC;AAClD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,qBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;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,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,QAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,mDAAA;YACNC,OAAS,EAAA,yCAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
1
+ {"version":3,"file":"admin.js","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/iso-locales',\n handler: 'iso-locales.listIsoLocales',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/locales',\n handler: 'locales.listLocales',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'POST',\n path: '/locales',\n handler: 'locales.createLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.create'] },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/locales/:id',\n handler: 'locales.updateLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.update'] },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/locales/:id',\n handler: 'locales.deleteLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.delete'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/content-manager/actions/get-non-localized-fields',\n handler: 'content-types.getNonLocalizedAttributes',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/settings',\n handler: 'settings.getSettings',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'PUT',\n path: '/settings',\n handler: 'settings.updateSettings',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/ai-localization-jobs/collection-types/:contentType/:documentId',\n handler: 'ai-localization-jobs.getJobForCollectionType',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/ai-localization-jobs/single-types/:contentType',\n handler: 'ai-localization-jobs.getJobForSingleType',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":";;AAAA,YAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,4BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA2B;AAAC;AAClD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,qBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;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,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,QAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,mDAAA;YACNC,OAAS,EAAA,yCAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,yBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,iEAAA;YACNC,OAAS,EAAA,8CAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,iDAAA;YACNC,OAAS,EAAA,0CAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
@@ -92,6 +92,46 @@ var admin = {
92
92
  'admin::isAuthenticatedAdmin'
93
93
  ]
94
94
  }
95
+ },
96
+ {
97
+ method: 'GET',
98
+ path: '/settings',
99
+ handler: 'settings.getSettings',
100
+ config: {
101
+ policies: [
102
+ 'admin::isAuthenticatedAdmin'
103
+ ]
104
+ }
105
+ },
106
+ {
107
+ method: 'PUT',
108
+ path: '/settings',
109
+ handler: 'settings.updateSettings',
110
+ config: {
111
+ policies: [
112
+ 'admin::isAuthenticatedAdmin'
113
+ ]
114
+ }
115
+ },
116
+ {
117
+ method: 'GET',
118
+ path: '/ai-localization-jobs/collection-types/:contentType/:documentId',
119
+ handler: 'ai-localization-jobs.getJobForCollectionType',
120
+ config: {
121
+ policies: [
122
+ 'admin::isAuthenticatedAdmin'
123
+ ]
124
+ }
125
+ },
126
+ {
127
+ method: 'GET',
128
+ path: '/ai-localization-jobs/single-types/:contentType',
129
+ handler: 'ai-localization-jobs.getJobForSingleType',
130
+ config: {
131
+ policies: [
132
+ 'admin::isAuthenticatedAdmin'
133
+ ]
134
+ }
95
135
  }
96
136
  ]
97
137
  };
@@ -1 +1 @@
1
- {"version":3,"file":"admin.mjs","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/iso-locales',\n handler: 'iso-locales.listIsoLocales',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/locales',\n handler: 'locales.listLocales',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'POST',\n path: '/locales',\n handler: 'locales.createLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.create'] },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/locales/:id',\n handler: 'locales.updateLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.update'] },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/locales/:id',\n handler: 'locales.deleteLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.delete'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/content-manager/actions/get-non-localized-fields',\n handler: 'content-types.getNonLocalizedAttributes',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":"AAAA,YAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,4BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA2B;AAAC;AAClD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,qBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;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,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,QAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,mDAAA;YACNC,OAAS,EAAA,yCAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
1
+ {"version":3,"file":"admin.mjs","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["export default {\n type: 'admin',\n routes: [\n {\n method: 'GET',\n path: '/iso-locales',\n handler: 'iso-locales.listIsoLocales',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.read'] },\n },\n ],\n },\n },\n {\n method: 'GET',\n path: '/locales',\n handler: 'locales.listLocales',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'POST',\n path: '/locales',\n handler: 'locales.createLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.create'] },\n },\n ],\n },\n },\n {\n method: 'PUT',\n path: '/locales/:id',\n handler: 'locales.updateLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.update'] },\n },\n ],\n },\n },\n {\n method: 'DELETE',\n path: '/locales/:id',\n handler: 'locales.deleteLocale',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n {\n name: 'plugin::content-manager.hasPermissions',\n config: { actions: ['plugin::i18n.locale.delete'] },\n },\n ],\n },\n },\n {\n method: 'POST',\n path: '/content-manager/actions/get-non-localized-fields',\n handler: 'content-types.getNonLocalizedAttributes',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/settings',\n handler: 'settings.getSettings',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'PUT',\n path: '/settings',\n handler: 'settings.updateSettings',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/ai-localization-jobs/collection-types/:contentType/:documentId',\n handler: 'ai-localization-jobs.getJobForCollectionType',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'GET',\n path: '/ai-localization-jobs/single-types/:contentType',\n handler: 'ai-localization-jobs.getJobForSingleType',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n ],\n};\n"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":"AAAA,YAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,4BAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA2B;AAAC;AAClD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,qBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;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,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,QAAA;YACRC,IAAM,EAAA,cAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBACEC,IAAM,EAAA,wCAAA;wBACNF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA6B;AAAC;AACpD;AACD;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,mDAAA;YACNC,OAAS,EAAA,yCAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,sBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,yBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,iEAAA;YACNC,OAAS,EAAA,8CAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,iDAAA;YACNC,OAAS,EAAA,0CAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF;AACD;AACH,CAAE;;;;"}
@@ -1,21 +1,19 @@
1
1
  'use strict';
2
2
 
3
+ var utils = require('@strapi/utils');
3
4
  var locale = require('./validation/locale.js');
4
5
 
5
- var contentApi = (()=>{
6
+ const createContentApiRoutes = utils.createContentApiRoutesFactory(()=>{
6
7
  const validator = new locale.I18nLocaleRouteValidator(strapi);
7
- return {
8
- type: 'content-api',
9
- routes: [
10
- {
11
- method: 'GET',
12
- path: '/locales',
13
- handler: 'locales.listLocales',
14
- response: validator.locales
15
- }
16
- ]
17
- };
8
+ return [
9
+ {
10
+ method: 'GET',
11
+ path: '/locales',
12
+ handler: 'locales.listLocales',
13
+ response: validator.locales
14
+ }
15
+ ];
18
16
  });
19
17
 
20
- module.exports = contentApi;
18
+ module.exports = createContentApiRoutes;
21
19
  //# sourceMappingURL=content-api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-api.js","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { I18nLocaleRouteValidator } from './validation';\n\nexport default (): Core.RouterInput => {\n const validator = new I18nLocaleRouteValidator(strapi);\n\n return {\n type: 'content-api',\n routes: [\n {\n method: 'GET',\n path: '/locales',\n handler: 'locales.listLocales',\n response: validator.locales,\n },\n ],\n };\n};\n"],"names":["validator","I18nLocaleRouteValidator","strapi","type","routes","method","path","handler","response","locales"],"mappings":";;;;AAGA,iBAAe,CAAA,IAAA;IACb,MAAMA,SAAAA,GAAY,IAAIC,+BAAyBC,CAAAA,MAAAA,CAAAA;IAE/C,OAAO;QACLC,IAAM,EAAA,aAAA;QACNC,MAAQ,EAAA;AACN,YAAA;gBACEC,MAAQ,EAAA,KAAA;gBACRC,IAAM,EAAA,UAAA;gBACNC,OAAS,EAAA,qBAAA;AACTC,gBAAAA,QAAAA,EAAUR,UAAUS;AACtB;AACD;AACH,KAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"content-api.js","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { createContentApiRoutesFactory } from '@strapi/utils';\nimport { I18nLocaleRouteValidator } from './validation';\n\nconst createContentApiRoutes = createContentApiRoutesFactory((): Core.RouterInput['routes'] => {\n const validator = new I18nLocaleRouteValidator(strapi);\n return [\n {\n method: 'GET',\n path: '/locales',\n handler: 'locales.listLocales',\n response: validator.locales,\n },\n ];\n});\n\nexport default createContentApiRoutes;\n"],"names":["createContentApiRoutes","createContentApiRoutesFactory","validator","I18nLocaleRouteValidator","strapi","method","path","handler","response","locales"],"mappings":";;;;;AAIA,MAAMA,yBAAyBC,mCAA8B,CAAA,IAAA;IAC3D,MAAMC,SAAAA,GAAY,IAAIC,+BAAyBC,CAAAA,MAAAA,CAAAA;IAC/C,OAAO;AACL,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,qBAAA;AACTC,YAAAA,QAAAA,EAAUN,UAAUO;AACtB;AACD,KAAA;AACH,CAAA;;;;"}
@@ -1,19 +1,17 @@
1
+ import { createContentApiRoutesFactory } from '@strapi/utils';
1
2
  import { I18nLocaleRouteValidator } from './validation/locale.mjs';
2
3
 
3
- var contentApi = (()=>{
4
+ const createContentApiRoutes = createContentApiRoutesFactory(()=>{
4
5
  const validator = new I18nLocaleRouteValidator(strapi);
5
- return {
6
- type: 'content-api',
7
- routes: [
8
- {
9
- method: 'GET',
10
- path: '/locales',
11
- handler: 'locales.listLocales',
12
- response: validator.locales
13
- }
14
- ]
15
- };
6
+ return [
7
+ {
8
+ method: 'GET',
9
+ path: '/locales',
10
+ handler: 'locales.listLocales',
11
+ response: validator.locales
12
+ }
13
+ ];
16
14
  });
17
15
 
18
- export { contentApi as default };
16
+ export { createContentApiRoutes as default };
19
17
  //# sourceMappingURL=content-api.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"content-api.mjs","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { I18nLocaleRouteValidator } from './validation';\n\nexport default (): Core.RouterInput => {\n const validator = new I18nLocaleRouteValidator(strapi);\n\n return {\n type: 'content-api',\n routes: [\n {\n method: 'GET',\n path: '/locales',\n handler: 'locales.listLocales',\n response: validator.locales,\n },\n ],\n };\n};\n"],"names":["validator","I18nLocaleRouteValidator","strapi","type","routes","method","path","handler","response","locales"],"mappings":";;AAGA,iBAAe,CAAA,IAAA;IACb,MAAMA,SAAAA,GAAY,IAAIC,wBAAyBC,CAAAA,MAAAA,CAAAA;IAE/C,OAAO;QACLC,IAAM,EAAA,aAAA;QACNC,MAAQ,EAAA;AACN,YAAA;gBACEC,MAAQ,EAAA,KAAA;gBACRC,IAAM,EAAA,UAAA;gBACNC,OAAS,EAAA,qBAAA;AACTC,gBAAAA,QAAAA,EAAUR,UAAUS;AACtB;AACD;AACH,KAAA;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"content-api.mjs","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { createContentApiRoutesFactory } from '@strapi/utils';\nimport { I18nLocaleRouteValidator } from './validation';\n\nconst createContentApiRoutes = createContentApiRoutesFactory((): Core.RouterInput['routes'] => {\n const validator = new I18nLocaleRouteValidator(strapi);\n return [\n {\n method: 'GET',\n path: '/locales',\n handler: 'locales.listLocales',\n response: validator.locales,\n },\n ];\n});\n\nexport default createContentApiRoutes;\n"],"names":["createContentApiRoutes","createContentApiRoutesFactory","validator","I18nLocaleRouteValidator","strapi","method","path","handler","response","locales"],"mappings":";;;AAIA,MAAMA,yBAAyBC,6BAA8B,CAAA,IAAA;IAC3D,MAAMC,SAAAA,GAAY,IAAIC,wBAAyBC,CAAAA,MAAAA,CAAAA;IAC/C,OAAO;AACL,QAAA;YACEC,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,UAAA;YACNC,OAAS,EAAA,qBAAA;AACTC,YAAAA,QAAAA,EAAUN,UAAUO;AACtB;AACD,KAAA;AACH,CAAA;;;;"}
@@ -1,9 +1,9 @@
1
1
  import admin from './admin.mjs';
2
- import contentApi from './content-api.mjs';
2
+ import createContentApiRoutes from './content-api.mjs';
3
3
 
4
4
  var routes = {
5
5
  admin,
6
- 'content-api': contentApi
6
+ 'content-api': createContentApiRoutes
7
7
  };
8
8
 
9
9
  export { routes as default };
@@ -0,0 +1,64 @@
1
+ 'use strict';
2
+
3
+ var aiLocalizationJob = require('../models/ai-localization-job.js');
4
+
5
+ const createAILocalizationJobsService = ({ strapi })=>({
6
+ /**
7
+ * Create a new AI localizations job or update an existing one for a document
8
+ * Ensures only one job exists per document
9
+ */ async upsertJobForDocument ({ documentId, contentType, sourceLocale, targetLocales, status = 'processing' }) {
10
+ // Check if job already exists for this document
11
+ const existingJob = await this.getJobByDocument(contentType, documentId);
12
+ if (existingJob) {
13
+ strapi.log.info(`[AI Localizations Job] Updated existing job for document ${documentId} with status: ${status}`);
14
+ // Update existing job with new data and status
15
+ return strapi.db.query(aiLocalizationJob.AI_LOCALIZATION_JOB_UID).update({
16
+ where: {
17
+ id: existingJob.id
18
+ },
19
+ data: {
20
+ contentType,
21
+ sourceLocale,
22
+ targetLocales,
23
+ status,
24
+ updatedAt: new Date()
25
+ }
26
+ });
27
+ }
28
+ strapi.log.info(`[AI Localizations Job] Created new job for document ${documentId} with status: ${status}`);
29
+ // Create new AI localizations job
30
+ return strapi.db.query(aiLocalizationJob.AI_LOCALIZATION_JOB_UID).create({
31
+ data: {
32
+ contentType,
33
+ relatedDocumentId: documentId,
34
+ sourceLocale,
35
+ targetLocales,
36
+ status,
37
+ createdAt: new Date(),
38
+ updatedAt: new Date()
39
+ }
40
+ });
41
+ },
42
+ /**
43
+ * Get job by document ID
44
+ */ async getJobByDocument (contentType, documentId) {
45
+ return strapi.db.query(aiLocalizationJob.AI_LOCALIZATION_JOB_UID).findOne({
46
+ where: {
47
+ relatedDocumentId: documentId,
48
+ contentType
49
+ }
50
+ });
51
+ },
52
+ /**
53
+ * Get job by content type
54
+ */ async getJobByContentType (contentType) {
55
+ return strapi.db.query(aiLocalizationJob.AI_LOCALIZATION_JOB_UID).findOne({
56
+ where: {
57
+ contentType
58
+ }
59
+ });
60
+ }
61
+ });
62
+
63
+ exports.createAILocalizationJobsService = createAILocalizationJobsService;
64
+ //# sourceMappingURL=ai-localization-jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-localization-jobs.js","sources":["../../../server/src/services/ai-localization-jobs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { AI_LOCALIZATION_JOB_UID } from '../models/ai-localization-job';\nimport type { AILocalizationJobs } from '../../../shared/contracts/ai-localization-jobs';\n\nexport const createAILocalizationJobsService = ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Create a new AI localizations job or update an existing one for a document\n * Ensures only one job exists per document\n */\n async upsertJobForDocument({\n documentId,\n contentType,\n sourceLocale,\n targetLocales,\n status = 'processing',\n }: {\n documentId: string;\n contentType: string;\n sourceLocale: string;\n targetLocales: string[];\n status?: AILocalizationJobs['status'];\n }) {\n // Check if job already exists for this document\n const existingJob = await this.getJobByDocument(contentType, documentId);\n\n if (existingJob) {\n strapi.log.info(\n `[AI Localizations Job] Updated existing job for document ${documentId} with status: ${status}`\n );\n // Update existing job with new data and status\n return strapi.db.query(AI_LOCALIZATION_JOB_UID).update({\n where: { id: existingJob.id },\n data: {\n contentType,\n sourceLocale,\n targetLocales,\n status,\n updatedAt: new Date(),\n },\n });\n }\n\n strapi.log.info(\n `[AI Localizations Job] Created new job for document ${documentId} with status: ${status}`\n );\n // Create new AI localizations job\n return strapi.db.query(AI_LOCALIZATION_JOB_UID).create({\n data: {\n contentType,\n relatedDocumentId: documentId,\n sourceLocale,\n targetLocales,\n status,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n });\n },\n\n /**\n * Get job by document ID\n */\n async getJobByDocument(contentType: string, documentId: string) {\n return strapi.db.query(AI_LOCALIZATION_JOB_UID).findOne({\n where: {\n relatedDocumentId: documentId,\n contentType,\n },\n });\n },\n\n /**\n * Get job by content type\n */\n async getJobByContentType(contentType: string) {\n return strapi.db.query(AI_LOCALIZATION_JOB_UID).findOne({\n where: {\n contentType,\n },\n });\n },\n});\n"],"names":["createAILocalizationJobsService","strapi","upsertJobForDocument","documentId","contentType","sourceLocale","targetLocales","status","existingJob","getJobByDocument","log","info","db","query","AI_LOCALIZATION_JOB_UID","update","where","id","data","updatedAt","Date","create","relatedDocumentId","createdAt","findOne","getJobByContentType"],"mappings":";;;;MAIaA,+BAAkC,GAAA,CAAC,EAAEC,MAAM,EAA2B,IAAM;AACvF;;;AAGC,MACD,MAAMC,oBAAAA,CAAAA,CAAqB,EACzBC,UAAU,EACVC,WAAW,EACXC,YAAY,EACZC,aAAa,EACbC,MAAAA,GAAS,YAAY,EAOtB,EAAA;;AAEC,YAAA,MAAMC,cAAc,MAAM,IAAI,CAACC,gBAAgB,CAACL,WAAaD,EAAAA,UAAAA,CAAAA;AAE7D,YAAA,IAAIK,WAAa,EAAA;gBACfP,MAAOS,CAAAA,GAAG,CAACC,IAAI,CACb,CAAC,yDAAyD,EAAER,UAAAA,CAAW,cAAc,EAAEI,MAAQ,CAAA,CAAA,CAAA;;AAGjG,gBAAA,OAAON,OAAOW,EAAE,CAACC,KAAK,CAACC,yCAAAA,CAAAA,CAAyBC,MAAM,CAAC;oBACrDC,KAAO,EAAA;AAAEC,wBAAAA,EAAAA,EAAIT,YAAYS;AAAG,qBAAA;oBAC5BC,IAAM,EAAA;AACJd,wBAAAA,WAAAA;AACAC,wBAAAA,YAAAA;AACAC,wBAAAA,aAAAA;AACAC,wBAAAA,MAAAA;AACAY,wBAAAA,SAAAA,EAAW,IAAIC,IAAAA;AACjB;AACF,iBAAA,CAAA;AACF;YAEAnB,MAAOS,CAAAA,GAAG,CAACC,IAAI,CACb,CAAC,oDAAoD,EAAER,UAAAA,CAAW,cAAc,EAAEI,MAAQ,CAAA,CAAA,CAAA;;AAG5F,YAAA,OAAON,OAAOW,EAAE,CAACC,KAAK,CAACC,yCAAAA,CAAAA,CAAyBO,MAAM,CAAC;gBACrDH,IAAM,EAAA;AACJd,oBAAAA,WAAAA;oBACAkB,iBAAmBnB,EAAAA,UAAAA;AACnBE,oBAAAA,YAAAA;AACAC,oBAAAA,aAAAA;AACAC,oBAAAA,MAAAA;AACAgB,oBAAAA,SAAAA,EAAW,IAAIH,IAAAA,EAAAA;AACfD,oBAAAA,SAAAA,EAAW,IAAIC,IAAAA;AACjB;AACF,aAAA,CAAA;AACF,SAAA;AAEA;;AAEC,MACD,MAAMX,gBAAAA,CAAAA,CAAiBL,WAAmB,EAAED,UAAkB,EAAA;AAC5D,YAAA,OAAOF,OAAOW,EAAE,CAACC,KAAK,CAACC,yCAAAA,CAAAA,CAAyBU,OAAO,CAAC;gBACtDR,KAAO,EAAA;oBACLM,iBAAmBnB,EAAAA,UAAAA;AACnBC,oBAAAA;AACF;AACF,aAAA,CAAA;AACF,SAAA;AAEA;;MAGA,MAAMqB,qBAAoBrB,WAAmB,EAAA;AAC3C,YAAA,OAAOH,OAAOW,EAAE,CAACC,KAAK,CAACC,yCAAAA,CAAAA,CAAyBU,OAAO,CAAC;gBACtDR,KAAO,EAAA;AACLZ,oBAAAA;AACF;AACF,aAAA,CAAA;AACF;AACF,KAAA;;;;"}
@@ -0,0 +1,62 @@
1
+ import { AI_LOCALIZATION_JOB_UID } from '../models/ai-localization-job.mjs';
2
+
3
+ const createAILocalizationJobsService = ({ strapi })=>({
4
+ /**
5
+ * Create a new AI localizations job or update an existing one for a document
6
+ * Ensures only one job exists per document
7
+ */ async upsertJobForDocument ({ documentId, contentType, sourceLocale, targetLocales, status = 'processing' }) {
8
+ // Check if job already exists for this document
9
+ const existingJob = await this.getJobByDocument(contentType, documentId);
10
+ if (existingJob) {
11
+ strapi.log.info(`[AI Localizations Job] Updated existing job for document ${documentId} with status: ${status}`);
12
+ // Update existing job with new data and status
13
+ return strapi.db.query(AI_LOCALIZATION_JOB_UID).update({
14
+ where: {
15
+ id: existingJob.id
16
+ },
17
+ data: {
18
+ contentType,
19
+ sourceLocale,
20
+ targetLocales,
21
+ status,
22
+ updatedAt: new Date()
23
+ }
24
+ });
25
+ }
26
+ strapi.log.info(`[AI Localizations Job] Created new job for document ${documentId} with status: ${status}`);
27
+ // Create new AI localizations job
28
+ return strapi.db.query(AI_LOCALIZATION_JOB_UID).create({
29
+ data: {
30
+ contentType,
31
+ relatedDocumentId: documentId,
32
+ sourceLocale,
33
+ targetLocales,
34
+ status,
35
+ createdAt: new Date(),
36
+ updatedAt: new Date()
37
+ }
38
+ });
39
+ },
40
+ /**
41
+ * Get job by document ID
42
+ */ async getJobByDocument (contentType, documentId) {
43
+ return strapi.db.query(AI_LOCALIZATION_JOB_UID).findOne({
44
+ where: {
45
+ relatedDocumentId: documentId,
46
+ contentType
47
+ }
48
+ });
49
+ },
50
+ /**
51
+ * Get job by content type
52
+ */ async getJobByContentType (contentType) {
53
+ return strapi.db.query(AI_LOCALIZATION_JOB_UID).findOne({
54
+ where: {
55
+ contentType
56
+ }
57
+ });
58
+ }
59
+ });
60
+
61
+ export { createAILocalizationJobsService };
62
+ //# sourceMappingURL=ai-localization-jobs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-localization-jobs.mjs","sources":["../../../server/src/services/ai-localization-jobs.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { AI_LOCALIZATION_JOB_UID } from '../models/ai-localization-job';\nimport type { AILocalizationJobs } from '../../../shared/contracts/ai-localization-jobs';\n\nexport const createAILocalizationJobsService = ({ strapi }: { strapi: Core.Strapi }) => ({\n /**\n * Create a new AI localizations job or update an existing one for a document\n * Ensures only one job exists per document\n */\n async upsertJobForDocument({\n documentId,\n contentType,\n sourceLocale,\n targetLocales,\n status = 'processing',\n }: {\n documentId: string;\n contentType: string;\n sourceLocale: string;\n targetLocales: string[];\n status?: AILocalizationJobs['status'];\n }) {\n // Check if job already exists for this document\n const existingJob = await this.getJobByDocument(contentType, documentId);\n\n if (existingJob) {\n strapi.log.info(\n `[AI Localizations Job] Updated existing job for document ${documentId} with status: ${status}`\n );\n // Update existing job with new data and status\n return strapi.db.query(AI_LOCALIZATION_JOB_UID).update({\n where: { id: existingJob.id },\n data: {\n contentType,\n sourceLocale,\n targetLocales,\n status,\n updatedAt: new Date(),\n },\n });\n }\n\n strapi.log.info(\n `[AI Localizations Job] Created new job for document ${documentId} with status: ${status}`\n );\n // Create new AI localizations job\n return strapi.db.query(AI_LOCALIZATION_JOB_UID).create({\n data: {\n contentType,\n relatedDocumentId: documentId,\n sourceLocale,\n targetLocales,\n status,\n createdAt: new Date(),\n updatedAt: new Date(),\n },\n });\n },\n\n /**\n * Get job by document ID\n */\n async getJobByDocument(contentType: string, documentId: string) {\n return strapi.db.query(AI_LOCALIZATION_JOB_UID).findOne({\n where: {\n relatedDocumentId: documentId,\n contentType,\n },\n });\n },\n\n /**\n * Get job by content type\n */\n async getJobByContentType(contentType: string) {\n return strapi.db.query(AI_LOCALIZATION_JOB_UID).findOne({\n where: {\n contentType,\n },\n });\n },\n});\n"],"names":["createAILocalizationJobsService","strapi","upsertJobForDocument","documentId","contentType","sourceLocale","targetLocales","status","existingJob","getJobByDocument","log","info","db","query","AI_LOCALIZATION_JOB_UID","update","where","id","data","updatedAt","Date","create","relatedDocumentId","createdAt","findOne","getJobByContentType"],"mappings":";;MAIaA,+BAAkC,GAAA,CAAC,EAAEC,MAAM,EAA2B,IAAM;AACvF;;;AAGC,MACD,MAAMC,oBAAAA,CAAAA,CAAqB,EACzBC,UAAU,EACVC,WAAW,EACXC,YAAY,EACZC,aAAa,EACbC,MAAAA,GAAS,YAAY,EAOtB,EAAA;;AAEC,YAAA,MAAMC,cAAc,MAAM,IAAI,CAACC,gBAAgB,CAACL,WAAaD,EAAAA,UAAAA,CAAAA;AAE7D,YAAA,IAAIK,WAAa,EAAA;gBACfP,MAAOS,CAAAA,GAAG,CAACC,IAAI,CACb,CAAC,yDAAyD,EAAER,UAAAA,CAAW,cAAc,EAAEI,MAAQ,CAAA,CAAA,CAAA;;AAGjG,gBAAA,OAAON,OAAOW,EAAE,CAACC,KAAK,CAACC,uBAAAA,CAAAA,CAAyBC,MAAM,CAAC;oBACrDC,KAAO,EAAA;AAAEC,wBAAAA,EAAAA,EAAIT,YAAYS;AAAG,qBAAA;oBAC5BC,IAAM,EAAA;AACJd,wBAAAA,WAAAA;AACAC,wBAAAA,YAAAA;AACAC,wBAAAA,aAAAA;AACAC,wBAAAA,MAAAA;AACAY,wBAAAA,SAAAA,EAAW,IAAIC,IAAAA;AACjB;AACF,iBAAA,CAAA;AACF;YAEAnB,MAAOS,CAAAA,GAAG,CAACC,IAAI,CACb,CAAC,oDAAoD,EAAER,UAAAA,CAAW,cAAc,EAAEI,MAAQ,CAAA,CAAA,CAAA;;AAG5F,YAAA,OAAON,OAAOW,EAAE,CAACC,KAAK,CAACC,uBAAAA,CAAAA,CAAyBO,MAAM,CAAC;gBACrDH,IAAM,EAAA;AACJd,oBAAAA,WAAAA;oBACAkB,iBAAmBnB,EAAAA,UAAAA;AACnBE,oBAAAA,YAAAA;AACAC,oBAAAA,aAAAA;AACAC,oBAAAA,MAAAA;AACAgB,oBAAAA,SAAAA,EAAW,IAAIH,IAAAA,EAAAA;AACfD,oBAAAA,SAAAA,EAAW,IAAIC,IAAAA;AACjB;AACF,aAAA,CAAA;AACF,SAAA;AAEA;;AAEC,MACD,MAAMX,gBAAAA,CAAAA,CAAiBL,WAAmB,EAAED,UAAkB,EAAA;AAC5D,YAAA,OAAOF,OAAOW,EAAE,CAACC,KAAK,CAACC,uBAAAA,CAAAA,CAAyBU,OAAO,CAAC;gBACtDR,KAAO,EAAA;oBACLM,iBAAmBnB,EAAAA,UAAAA;AACnBC,oBAAAA;AACF;AACF,aAAA,CAAA;AACF,SAAA;AAEA;;MAGA,MAAMqB,qBAAoBrB,WAAmB,EAAA;AAC3C,YAAA,OAAOH,OAAOW,EAAE,CAACC,KAAK,CAACC,uBAAAA,CAAAA,CAAyBU,OAAO,CAAC;gBACtDR,KAAO,EAAA;AACLZ,oBAAAA;AACF;AACF,aAAA,CAAA;AACF;AACF,KAAA;;;;"}