data-primals-engine 1.4.2 → 1.5.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 (59) hide show
  1. package/README.md +878 -856
  2. package/client/package-lock.json +82 -0
  3. package/client/package.json +2 -0
  4. package/client/src/App.jsx +1 -1
  5. package/client/src/App.scss +25 -7
  6. package/client/src/AssistantChat.scss +3 -2
  7. package/client/src/ConditionBuilder.jsx +1 -1
  8. package/client/src/ConditionBuilder2.jsx +2 -1
  9. package/client/src/DashboardView.jsx +569 -569
  10. package/client/src/DataEditor.jsx +376 -368
  11. package/client/src/DataLayout.jsx +4 -10
  12. package/client/src/DataTable.jsx +858 -817
  13. package/client/src/Field.jsx +1825 -1784
  14. package/client/src/FlexDataRenderer.jsx +2 -0
  15. package/client/src/FlexTreeUtils.js +1 -1
  16. package/client/src/GeolocationField.jsx +94 -0
  17. package/client/src/KPIDialog.jsx +11 -1
  18. package/client/src/ModelCreator.jsx +1 -2
  19. package/client/src/ModelCreatorField.jsx +24 -27
  20. package/client/src/ModelList.jsx +1 -1
  21. package/client/src/RelationField.jsx +2 -2
  22. package/client/src/constants.js +3 -3
  23. package/client/src/filter.js +0 -155
  24. package/client/src/hooks/useTutorials.jsx +62 -65
  25. package/client/src/translations.js +14 -2
  26. package/package.json +2 -1
  27. package/perf/README.md +147 -0
  28. package/perf/artillery-hooks.js +37 -0
  29. package/perf/perf-shot-hardwork.yml +84 -0
  30. package/perf/perf-shot-search.yml +45 -0
  31. package/perf/setup.yml +26 -0
  32. package/server.js +1 -1
  33. package/src/constants.js +264 -31
  34. package/src/core.js +15 -1
  35. package/src/data.js +1 -1
  36. package/src/defaultModels.js +1544 -1540
  37. package/src/email.js +5 -2
  38. package/src/engine.js +10 -3
  39. package/src/filter.js +274 -260
  40. package/src/i18n.js +187 -177
  41. package/src/modules/assistant/assistant.js +3 -1
  42. package/src/modules/bucket.js +12 -15
  43. package/src/modules/data/data.backup.js +11 -8
  44. package/src/modules/data/data.core.js +2 -1
  45. package/src/modules/data/data.js +6 -3
  46. package/src/modules/data/data.operations.js +610 -168
  47. package/src/modules/data/data.routes.js +1821 -1785
  48. package/src/modules/data/data.scheduling.js +2 -1
  49. package/src/modules/data/data.validation.js +7 -1
  50. package/src/modules/file.js +4 -2
  51. package/src/modules/user.js +4 -1
  52. package/src/modules/workflow.js +9 -10
  53. package/src/openai.jobs.js +2 -0
  54. package/src/packs.js +22 -5
  55. package/src/providers.js +22 -7
  56. package/swagger-en.yml +133 -0
  57. package/test/data.integration.test.js +1060 -981
  58. package/test/import_export.integration.test.js +1 -1
  59. package/test/model.integration.test.js +377 -221
package/src/i18n.js CHANGED
@@ -5,6 +5,23 @@ import LanguageDetector from "i18next-browser-languagedetector";
5
5
  export const translations = {
6
6
  fr: {
7
7
  translation: {
8
+ "model_alert": "Alertes",
9
+ "model_endpoint": "Endpoints",
10
+ "field_endpoint_name": "Nom",
11
+ "field_endpoint_name_hint": "Un nom pour identifier l'endpoint dans l'interface.",
12
+ "field_endpoint_isActive": "Actif ?",
13
+ "field_endpoint_isActive_hint": "Si cette case est cochée, l'endpoint est actif et peut être appelé.",
14
+ "field_endpoint_path": "Chemin",
15
+ "field_endpoint_path_hint": "Le chemin d'accès à l'URL après /api/actions/ (par exemple, 'send-welcome-email'). N'incluez pas '/'.",
16
+ "field_endpoint_method": "Méthode HTTP",
17
+ "field_endpoint_method_hint": "La méthode HTTP requise pour appeler ce endpoint",
18
+ "field_endpoint_isPublic": "Public ?",
19
+ "field_endpoint_isPublic_hint": "Si coché, ce point d'accès sera accessible sans authentification. Le script s'exécutera avec les droits du propriétaire du point d'accès.",
20
+
21
+ "field_endpoint_code": "Code exécuté",
22
+ "field_endpoint_code_hint": "The script to execute. Must return a value or an object that will be the JSON response.",
23
+ "model_env": "Variables (env)",
24
+
8
25
  "datatable.advancedFilter.title": "Filtre avancé (MongoDB)",
9
26
  "datatable.advancedFilter.desc": "Créez de toute pièce vos filtres avancés, avec les opérateurs d'aggrégation de MongoDB disponibles ici.",
10
27
 
@@ -1242,6 +1259,21 @@ export const translations = {
1242
1259
  en: {
1243
1260
  translation: {
1244
1261
 
1262
+ "model_alert": "Alerts",
1263
+ "model_endpoint": "Endpoints",
1264
+ "field_endpoint_name": "Name",
1265
+ "field_endpoint_name_hint": "A name to identify the endpoint in the interface.",
1266
+ "field_endpoint_isActive": "Active?",
1267
+ "field_endpoint_isActive_hint": "If checked, the endpoint is active and can be called.",
1268
+ "field_endpoint_path": "Path",
1269
+ "field_endpoint_path_hint": "The URL path after /api/actions/ (e.g., 'send-welcome-email'). Do not include '/'.",
1270
+ "field_endpoint_method": "HTTP Method",
1271
+ "field_endpoint_method_hint": "The HTTP method required to call this endpoint.",
1272
+ "field_endpoint_isPublic": "Public?",
1273
+ "field_endpoint_isPublic_hint": "If checked, this endpoint will be accessible without authentication. The script will run with the permissions of the endpoint owner.",
1274
+ "field_endpoint_code": "Code to execute",
1275
+ "field_endpoint_code_hint": "The script to execute. Must return a value or an object that will be the JSON response.",
1276
+ "model_env": "Environment Variables (env)",
1245
1277
  "datatable.advancedFilter.title": "Advanced Filter (MongoDB)",
1246
1278
  "datatable.advancedFilter.desc": "Create your own advanced filters from scratch, using MongoDB's aggregation operators available here.",
1247
1279
 
@@ -2476,6 +2508,22 @@ export const translations = {
2476
2508
  },
2477
2509
  es: {
2478
2510
  translation: {
2511
+
2512
+ "model_alert": "Alertas",
2513
+ "model_endpoint": "Endpoints",
2514
+ "field_endpoint_name": "Nombre",
2515
+ "field_endpoint_name_hint": "Un nombre para identificar el endpoint en la interfaz.",
2516
+ "field_endpoint_isActive": "¿Activo?",
2517
+ "field_endpoint_isActive_hint": "Si está marcado, el endpoint está activo y se puede llamar.",
2518
+ "field_endpoint_path": "Ruta",
2519
+ "field_endpoint_path_hint": "La ruta de la URL después de /api/actions/ (ej., 'enviar-email-bienvenida'). No incluir '/'.",
2520
+ "field_endpoint_method": "Método HTTP",
2521
+ "field_endpoint_method_hint": "El método HTTP requerido para llamar a este endpoint.",
2522
+ "field_endpoint_isPublic": "¿Público?",
2523
+ "field_endpoint_isPublic_hint": "Si está marcado, este endpoint será accesible sin autenticación. El script se ejecutará con los permisos del propietario del endpoint.",
2524
+ "field_endpoint_code": "Código a ejecutar",
2525
+ "field_endpoint_code_hint": "El script a ejecutar. Debe devolver un valor o un objeto que será la respuesta JSON.",
2526
+ "model_env": "Variables de Entorno (env)",
2479
2527
  "datatable.advancedFilter.title": "Filtro avanzado (MongoDB)",
2480
2528
  "datatable.advancedFilter.desc": "Cree sus propios filtros avanzados desde cero, utilizando los operadores de agregación de MongoDB disponibles aquí.",
2481
2529
 
@@ -3747,6 +3795,27 @@ export const translations = {
3747
3795
  },
3748
3796
  pt: {
3749
3797
  translation: {
3798
+
3799
+ "model_alert": "Alertas",
3800
+ "model_endpoint": "Endpoints",
3801
+ "field_endpoint_name": "Nome",
3802
+ "field_endpoint_name_hint": "Um nome para identificar o endpoint na interface.",
3803
+ "field_endpoint_isActive": "Ativo?",
3804
+ "field_endpoint_isActive_hint": "Se marcado, o endpoint está ativo e pode ser chamado.",
3805
+ "field_endpoint_path": "Caminho",
3806
+ "field_endpoint_path_hint": "O caminho da URL após /api/actions/ (ex.: 'enviar-email-boas-vindas'). Não inclua '/'.",
3807
+ "field_endpoint_method": "Método HTTP",
3808
+ "field_endpoint_method_hint": "O método HTTP necessário para chamar este endpoint.",
3809
+ "field_endpoint_isPublic": "Público?",
3810
+ "field_endpoint_isPublic_hint": "Se marcado, este endpoint estará acessível sem autenticação. O script será executado com as permissões do proprietário do endpoint.",
3811
+ "field_endpoint_code": "Código a executar",
3812
+ "field_endpoint_code_hint": "O script a ser executado. Deve retornar um valor ou um objeto que será a resposta JSON.",
3813
+ "model_env": "Variáveis de Ambiente (env)",
3814
+ "field_env_name": "Chave",
3815
+ "field_env_name_hint": "O nome da chave usada para identificar a variável de ambiente.",
3816
+ "field_env_value": "Valor",
3817
+ "field_env_value_hint": "O valor da variável (oculto por padrão e criptografado para usuários locais).",
3818
+
3750
3819
  "datatable.advancedFilter.title": "Filtro Avançado (MongoDB)",
3751
3820
  "datatable.advancedFilter.desc": "Crie os seus próprios filtros avançados a partir do zero, utilizando os operadores de agregação do MongoDB disponíveis aqui.",
3752
3821
 
@@ -3819,6 +3888,22 @@ export const translations = {
3819
3888
  },
3820
3889
  de: {
3821
3890
  translation: {
3891
+
3892
+ "model_alert": "Warnungen",
3893
+ "model_endpoint": "Endpunkte",
3894
+ "field_endpoint_name": "Name",
3895
+ "field_endpoint_name_hint": "Ein Name, um den Endpunkt in der Oberfläche zu identifizieren.",
3896
+ "field_endpoint_isActive": "Aktiv?",
3897
+ "field_endpoint_isActive_hint": "Wenn aktiviert, ist der Endpunkt aktiv und kann aufgerufen werden.",
3898
+ "field_endpoint_path": "Pfad",
3899
+ "field_endpoint_path_hint": "Der URL-Pfad nach /api/actions/ (z.B. 'willkommens-email-senden'). '/' nicht einschließen.",
3900
+ "field_endpoint_method": "HTTP-Methode",
3901
+ "field_endpoint_method_hint": "Die HTTP-Methode, die zum Aufrufen dieses Endpunkts erforderlich ist.",
3902
+ "field_endpoint_isPublic": "Öffentlich?",
3903
+ "field_endpoint_isPublic_hint": "Wenn aktiviert, ist dieser Endpunkt ohne Authentifizierung zugänglich. Das Skript wird mit den Berechtigungen des Endpunkt-Besitzers ausgeführt.",
3904
+ "field_endpoint_code": "Auszuführender Code",
3905
+ "field_endpoint_code_hint": "Das auszuführende Skript. Muss einen Wert oder ein Objekt zurückgeben, das die JSON-Antwort sein wird.",
3906
+ "model_env": "Umgebungsvariablen (env)",
3822
3907
  "datatable.advancedFilter.title": "Erweiterter Filter (MongoDB)",
3823
3908
  "datatable.advancedFilter.desc": "Erstellen Sie Ihre eigenen erweiterten Filter von Grund auf mit den hier verfügbaren Aggregationsoperatoren von MongoDB.",
3824
3909
  "editData": "Bearbeiten in {{0}}",
@@ -4969,6 +5054,21 @@ export const translations = {
4969
5054
  },
4970
5055
  it: {
4971
5056
  translation: {
5057
+ "model_alert": "Avvisi",
5058
+ "model_endpoint": "Endpoint",
5059
+ "field_endpoint_name": "Nome",
5060
+ "field_endpoint_name_hint": "Un nome per identificare l'endpoint nell'interfaccia.",
5061
+ "field_endpoint_isActive": "Attivo?",
5062
+ "field_endpoint_isActive_hint": "Se selezionato, l'endpoint è attivo e può essere chiamato.",
5063
+ "field_endpoint_path": "Percorso",
5064
+ "field_endpoint_path_hint": "Il percorso URL dopo /api/actions/ (ad esempio, 'invia-email-benvenuto'). Non includere '/'.",
5065
+ "field_endpoint_method": "Metodo HTTP",
5066
+ "field_endpoint_method_hint": "Il metodo HTTP richiesto per chiamare questo endpoint.",
5067
+ "field_endpoint_isPublic": "Pubblico?",
5068
+ "field_endpoint_isPublic_hint": "Se selezionato, questo endpoint sarà accessibile senza autenticazione. Lo script verrà eseguito con i permessi del proprietario dell'endpoint.",
5069
+ "field_endpoint_code": "Codice da eseguire",
5070
+ "field_endpoint_code_hint": "Lo script da eseguire. Deve restituire un valore o un oggetto che sarà la risposta JSON.",
5071
+ "model_env": "Variabili d'Ambiente (env)",
4972
5072
  "datatable.advancedFilter.title": "Filtro avanzato (MongoDB)",
4973
5073
  "datatable.advancedFilter.desc": "Crea i tuoi filtri avanzati da zero, utilizzando gli operatori di aggregazione di MongoDB disponibili qui.",
4974
5074
  "editData": "Modifica in {{0}}",
@@ -6172,6 +6272,25 @@ export const translations = {
6172
6272
  },
6173
6273
  cs: {
6174
6274
  translation: {
6275
+
6276
+ "model_alert": "Upozornění",
6277
+ "model_endpoint": "Koncové body",
6278
+ "field_endpoint_name": "Název",
6279
+ "field_endpoint_name_hint": "Název pro identifikaci koncového bodu v rozhraní.",
6280
+ "field_endpoint_isActive": "Aktivní?",
6281
+ "field_endpoint_isActive_hint": "Je-li zaškrtnuto, koncový bod je aktivní a lze jej volat.",
6282
+ "field_endpoint_path": "Cesta",
6283
+ "field_endpoint_path_hint": "Cesta URL za /api/actions/ (např. 'send-welcome-email'). Nezahrnujte '/'.",
6284
+ "field_endpoint_method": "HTTP Metoda",
6285
+ "field_endpoint_method_hint": "HTTP metoda vyžadovaná pro volání tohoto koncového bodu.",
6286
+ "field_endpoint_isPublic": "Veřejný?",
6287
+ "field_endpoint_isPublic_hint": "Je-li zaškrtnuto, tento koncový bod bude přístupný bez ověření. Skript bude spuštěn s oprávněním vlastníka koncového bodu.",
6288
+ "field_endpoint_code": "Kód k provedení",
6289
+ "field_endpoint_code_hint": "Skript, který se má spustit. Musí vrátit hodnotu nebo objekt, který bude JSON odpovědí.",
6290
+ "model_env": "Proměnné prostředí (env)",
6291
+ "field_env_name": "Klíč",
6292
+ "field_env_value": "Hodnota",
6293
+
6175
6294
  "datatable.advancedFilter.title": "Rozšířený filtr (MongoDB)",
6176
6295
  "datatable.advancedFilter.desc": "Vytvořte si vlastní pokročilé filtry od nuly pomocí agregačních operátorů MongoDB dostupných zde.",
6177
6296
  "editData": "Upravit v {{0}}",
@@ -7019,6 +7138,23 @@ export const translations = {
7019
7138
  },
7020
7139
  ru: {
7021
7140
  translation: {
7141
+
7142
+ "model_alert": "Оповещения",
7143
+ "model_endpoint": "Эндпоинты",
7144
+ "field_endpoint_name": "Название",
7145
+ "field_endpoint_name_hint": "Имя для идентификации эндпоинта в интерфейсе.",
7146
+ "field_endpoint_isActive": "Активен?",
7147
+ "field_endpoint_isActive_hint": "Если отмечено, эндпоинт активен и может быть вызван.",
7148
+ "field_endpoint_path": "Путь",
7149
+ "field_endpoint_path_hint": "Путь URL после /api/actions/ (например, 'send-welcome-email'). Не включайте '/'.",
7150
+ "field_endpoint_method": "HTTP-метод",
7151
+ "field_endpoint_method_hint": "HTTP-метод, необходимый для вызова этого эндпоинта.",
7152
+ "field_endpoint_isPublic": "Публичный?",
7153
+ "field_endpoint_isPublic_hint": "Если отмечено, этот эндпоинт будет доступен без аутентификации. Скрипт будет запущен с разрешениями владельца эндпоинта.",
7154
+ "field_endpoint_code": "Исполняемый код",
7155
+ "field_endpoint_code_hint": "Скрипт для выполнения. Должен возвращать значение или объект, который будет ответом JSON.",
7156
+ "model_env": "Переменные среды (env)",
7157
+
7022
7158
  "datatable.advancedFilter.title": "Расширенный фильтр (MongoDB)",
7023
7159
  "datatable.advancedFilter.desc": "Создайте свои собственные расширенные фильтры с нуля, используя операторы агрегации MongoDB, доступные здесь",
7024
7160
  "editData": "Редактировать в {{0}}",
@@ -8222,6 +8358,23 @@ export const translations = {
8222
8358
  },
8223
8359
  ar: {
8224
8360
  translation: {
8361
+
8362
+ "model_alert": "التنبيهات",
8363
+ "model_endpoint": "نقاط النهاية (Endpoints)",
8364
+ "field_endpoint_name": "الاسم",
8365
+ "field_endpoint_name_hint": "اسم لتحديد نقطة النهاية في الواجهة.",
8366
+ "field_endpoint_isActive": "نشط؟",
8367
+ "field_endpoint_isActive_hint": "إذا تم تحديده، تكون نقطة النهاية نشطة ويمكن استدعاؤها.",
8368
+ "field_endpoint_path": "المسار",
8369
+ "field_endpoint_path_hint": "مسار URL بعد /api/actions/ (على سبيل المثال، 'send-welcome-email'). لا تقم بتضمين '/'.",
8370
+ "field_endpoint_method": "طريقة HTTP",
8371
+ "field_endpoint_method_hint": "طريقة HTTP المطلوبة لاستدعاء نقطة النهاية هذه.",
8372
+ "field_endpoint_isPublic": "عام؟",
8373
+ "field_endpoint_isPublic_hint": "إذا تم تحديده، ستكون نقطة النهاية هذه accessible بدون مصادقة. سوف يعمل السكريبت بأذونات owner نقطة النهاية.",
8374
+ "field_endpoint_code": "الكود المنفذ",
8375
+ "field_endpoint_code_hint": "السكريبت الذي سيتم تنفيذه. يجب أن يعيد قيمة أو كائنًا سيكون استجابة JSON.",
8376
+ "model_env": "متغيرات البيئة (env)",
8377
+
8225
8378
  "datatable.advancedFilter.title": "مرشح متقدم (MongoDB)",
8226
8379
  "datatable.advancedFilter.desc": "أنشئ مرشحاتك المتقدمة من الصفر، باستخدام عوامل تجميع MongoDB المتوفرة هنا",
8227
8380
  "editData": "تعديل في {{0}}",
@@ -9476,6 +9629,24 @@ export const translations = {
9476
9629
  },
9477
9630
  sv: {
9478
9631
  translation: {
9632
+
9633
+
9634
+ "model_alert": "Aviseringar",
9635
+ "model_endpoint": "Endpoints",
9636
+ "field_endpoint_name": "Namn",
9637
+ "field_endpoint_name_hint": "Ett namn för att identifiera endpointen i gränssnittet.",
9638
+ "field_endpoint_isActive": "Aktiv?",
9639
+ "field_endpoint_isActive_hint": "Om ikryssad är endpointen aktiv och kan anropas.",
9640
+ "field_endpoint_path": "Sökväg",
9641
+ "field_endpoint_path_hint": "URL-sökvägen efter /api/actions/ (t.ex. 'send-welcome-email'). Inkludera inte '/'.",
9642
+ "field_endpoint_method": "HTTP-metod",
9643
+ "field_endpoint_method_hint": "Den HTTP-metod som krävs för att anropa denna endpoint.",
9644
+ "field_endpoint_isPublic": "Publik?",
9645
+ "field_endpoint_isPublic_hint": "Om ikryssad kommer denna endpoint att vara tillgänglig utan autentisering. Skriptet kommer att köras med endpoint-ägarens behörigheter.",
9646
+ "field_endpoint_code": "Kod att köra",
9647
+ "field_endpoint_code_hint": "Skriptet som ska köras. Måste returnera ett värde eller ett objekt som blir JSON-svaret.",
9648
+ "model_env": "Miljövariabler (env)",
9649
+
9479
9650
  "datatable.advancedFilter.title": "Avancerat filter (MongoDB)",
9480
9651
  "datatable.advancedFilter.desc": "Skapa dina egna avancerade filter från grunden med hjälp av MongoDBs aggregeringsoperatorer som finns här.",
9481
9652
  "editData": "Redigera i {{0}}",
@@ -11764,6 +11935,22 @@ export const translations = {
11764
11935
  },
11765
11936
  fa: {
11766
11937
  translation: {
11938
+
11939
+ "model_alert": "هشدارها",
11940
+ "model_endpoint": "نقطه‌پایانی (Endpoint)",
11941
+ "field_endpoint_name": "نام",
11942
+ "field_endpoint_name_hint": "یک نام برای شناسایی نقطه‌پایانی در رابط کاربری.",
11943
+ "field_endpoint_isActive": "فعال؟",
11944
+ "field_endpoint_isActive_hint": "در صورت انتخاب، نقطه‌پایانی فعال است و می‌توان آن را فراخوانی کرد.",
11945
+ "field_endpoint_path": "مسیر",
11946
+ "field_endpoint_path_hint": "مسیر URL بعد از /api/actions/ (مثلاً 'send-welcome-email'). '/' را شامل نشود.",
11947
+ "field_endpoint_method": "متد HTTP",
11948
+ "field_endpoint_method_hint": "متد HTTP مورد نیاز برای فراخوانی این نقطه‌پایانی.",
11949
+ "field_endpoint_isPublic": "عمومی؟",
11950
+ "field_endpoint_isPublic_hint": "در صورت انتخاب، این نقطه‌پایانی بدون نیاز به احراز هویت در دسترس خواهد بود. اسکریپت با مجوزهای مالک نقطه‌پایانی اجرا می‌شود.",
11951
+ "field_endpoint_code": "کد اجرایی",
11952
+ "field_endpoint_code_hint": "اسکریپتی که باید اجرا شود. باید یک مقدار یا یک شیء را بازگرداند که پاسخ JSON خواهد بود.",
11953
+ "model_env": "متغیرهای محیطی (env)",
11767
11954
  "datatable.advancedFilter.title": "فیلتر پیشرفته (MongoDB)",
11768
11955
  "datatable.advancedFilter.desc": "با استفاده از عملگرهای تجمیع MongoDB که در اینجا موجود است، فیلترهای پیشرفته خود را از ابتدا ایجاد کنید.",
11769
11956
  "editData": "ویرایش در {{0}}",
@@ -11772,183 +11959,6 @@ export const translations = {
11772
11959
  "btns.delete": "حذف",
11773
11960
 
11774
11961
 
11775
- "field_workflowRun_completedAt_hint": "زمان‌نگار تکمیل اجرا (موفق یا ناموفق).",
11776
- "field_employee_socialSecurityNumber_hint": "شماره تأمین اجتماعی کارمند.",
11777
- "field_shipment_order_hint": "سفارش مرتبط با این محموله.",
11778
- "field_shipment_trackingNumber_hint": "شماره رهگیری ارائه شده توسط شرکت حمل‌ونقل.",
11779
- "field_shipment_carrier_hint": "نام شرکت حمل‌ونقل (مثلاً: Chronopost, UPS, FedEx).",
11780
- "field_shipment_status_hint": "وضعیت فعلی محموله (مثلاً: در حال حمل، تحویل شده، مشکل).",
11781
- "field_shipment_estimatedDeliveryDate_hint": "تاریخ تحویل تخمینی از طرف شرکت حمل‌ونقل.",
11782
- "field_shipment_actualDeliveryDate_hint": "تاریخ و زمان واقعی تحویل.",
11783
-
11784
- "field_invoice_order_hint": "سفارشی که این فاکتور به آن مرتبط است.",
11785
- "field_invoice_invoiceId_hint": "شناسه منحصر به فرد فاکتور.",
11786
- "field_invoice_invoiceDate_hint": "تاریخ صدور فاکتور.",
11787
- "field_invoice_dueDate_hint": "تاریخ سررسید پرداخت فاکتور.",
11788
- "field_invoice_status_hint": "وضعیت پرداخت فاکتور (مثلاً: پرداخت شده، پرداخت نشده، частично پرداخت شده).",
11789
-
11790
- "field_userSubscription_price_hint": "قیمت پرداختی برای هر چرخه صورتحساب.",
11791
- "field_userSubscription_currency_hint": "ارز اشتراک.",
11792
- "field_userSubscription_paymentMethod_hint": "روش پرداخت استفاده شده برای اشتراک.",
11793
- "field_userSubscription_billingCycleAnchor_hint": "تاریخ مرجع برای شروع چرخه صورتحساب.",
11794
- "field_userSubscription_nextBillingDate_hint": "تاریخ صورتحساب بعدی.",
11795
- "field_userSubscription_lastBillingDate_hint": "تاریخ آخرین صورتحساب.",
11796
- "field_userSubscription_cancelReason_hint": "دلیل لغو اشتراک، در صورت ارائه.",
11797
-
11798
- "field_message_sender_hint": "فرستنده پیام (می‌تواند کاربر یا سیستم باشد).",
11799
- "field_message_recipient_hint": "گیرنده پیام.",
11800
- "field_message_lang_hint": "زبانی که پیام به آن ارسال می‌شود.",
11801
- "field_message_subject_hint": "موضوع پیام (مثلاً: عنوان ایمیل).",
11802
- "field_message_content_hint": "محتوای کامل پیام، که می‌تواند شامل HTML باشد.",
11803
- "field_message_channels_hint": "کانال‌هایی که این پیام از طریق آن‌ها ارسال شده یا خواهد شد.",
11804
- "field_message_status_hint": "وضعیت تحویل پیام (مثلاً: در انتظار، ارسال شده، خوانده شده).",
11805
- "field_message_sentAt_hint": "تاریخ و زمان ارسال پیام.",
11806
- "field_message_readAt_hint": "تاریخ و زمان خوانده شدن پیام توسط گیرنده.",
11807
- "field_message_type_hint": "نوع داخلی برای دسته‌بندی پیام (مثلاً: 'order.confirmation').",
11808
- "field_message_priority_hint": "اولویت پیام، برای مدیریت صف‌های ارسال.",
11809
-
11810
- "field_user_gender_hint": "جنسیت کاربر.",
11811
- "field_user_profilePicture_hint": "عکس پروفایل کاربر.",
11812
-
11813
- "field_employee_employeeId_hint": "شناسه منحصر به فرد کارمند در شرکت.",
11814
- "field_employee_personalInfo_hint": "ارتباط با پروفایل کاربری که حاوی اطلاعات پایه (نام، ایمیل و غیره) است.",
11815
- "field_employee_jobTitle_hint": "عنوان رسمی شغل کارمند (مثلاً: برنامه‌نویس، مدیر پروژه).",
11816
- "field_employee_manager_hint": "ارتباط با مدیر مستقیم یا مافوق کارمند.",
11817
- "field_employee_workLocation_hint": "محل کار اصلی کارمند.",
11818
- "field_employee_employmentType_hint": "نوع قرارداد کارمند (مثلاً: تمام وقت، پاره وقت، کارآموز).",
11819
- "field_employee_emergencyContact_hint": "نفر برای تماس در مواقع اضطراری.",
11820
- "field_employee_homeAddress_hint": "آدرس شخصی کارمند.",
11821
- "field_employee_dateOfBirth_hint": "تاریخ تولد کارمند.",
11822
- "field_employee_nationality_hint": "ملیت کارمند.",
11823
- "field_employee_nationalId_hint": "شماره شناسنامه یا معادل آن.",
11824
- "field_employee_taxId_hint": "شماره مالیاتی کارمند.",
11825
- "field_employee_startDate_hint": "تاریخ شروع قرارداد کار.",
11826
- "field_employee_endDate_hint": "تاریخ پایان قرارداد کار (در صورت وجود).",
11827
- "field_employee_contractType_hint": "نوع قرارداد (مثلاً: دائمی، موقت).",
11828
- "field_employee_salaryCurrency_hint": "ارزی که حقوق در آن پرداخت می‌شود.",
11829
- "field_employee_payFrequency_hint": "دفعات پرداخت حقوق (مثلاً: ماهانه، هفتگی).",
11830
- "field_employee_bankAccountNumber_hint": "شماره حساب بانکی برای واریز حقوق.",
11831
- "field_employee_bankName_hint": "نام بانک کارمند.",
11832
- "field_employee_iban_hint": "شماره IBAN حساب بانکی کارمند.",
11833
- "field_employee_swiftBic_hint": "کد SWIFT/BIC بانک کارمند.",
11834
- "field_employee_workPermitNumber_hint": "شماره مجوز کار (در صورت وجود).",
11835
- "field_employee_workPermitExpiry_hint": "تاریخ انقضای مجوز کار.",
11836
- "field_employee_visaType_hint": "نوع ویزای کار (در صورت وجود).",
11837
- "field_employee_visaExpiry_hint": "تاریخ انقضای ویزا.",
11838
- "field_employee_skills_hint": "فهرست مهارت‌ها و صلاحیت‌های کارمند.",
11839
- "field_workflowStep_actions_hint": "اقدامات اصلی که در این مرحله انجام می‌شوند.",
11840
- "field_workflowAction_targetSelector_hint": "عبارت JSON (قالب $match MongoDB) برای فیلتر کردن اسناد هدف.",
11841
- "field_workflowAction_emailRecipients_hint": "گیرنده/های ایمیل. می‌تواند یک آدرس، چند آدرس جدا شده با کاما، یا یک متغیر مانند {triggerData.client.email} باشد.",
11842
- "field_workflowAction_emailSubject_hint": "موضوع ایمیل. می‌تواند شامل متغیرهایی مانند {triggerData.orderId} باشد.",
11843
- "field_workflowAction_emailContent_hint": "محتوای ایمیل. می‌تواند شامل متغیرها و HTML باشد.",
11844
- "field_workflowAction_aiProvider_hint": "ارائه‌دهنده مدل زبان بزرگ (LLM) که برای تولید استفاده می‌شود.",
11845
- "field_workflowAction_aiModel_hint": "مدل خاصی که استفاده می‌شود (مثلاً: gpt-4o-mini, gemini-1.5-pro-latest).",
11846
- "field_workflowAction_prompt_hint": "قالب prompt. از متغیرهایی مانند {triggerData.field} یا {context.variable} برای وارد کردن داده‌های پویا استفاده کنید.",
11847
- "field_workflowRun_startedAt_hint": "زمان‌نگار شروع اجرای workflow.",
11848
- "field_imageGallery_tags_hint": "برچسب‌ها یا دسته‌ها برای سازماندهی گالری‌ها (اختیاری).",
11849
- "field_imageGallery_createdAt_hint": "تاریخ ایجاد گالری (معمولاً توسط سیستم مدیریت می‌شود).",
11850
-
11851
- "field_kpi_targetModel_hint": "نام مدل برای محاسبه KPI (مثلاً: order).",
11852
- "field_kpi_matchFormula_hint": "فیلتر JSON (MongoDB $match) برای اعمال قبل از تجمیع (مثلاً: { \"status\": \"delivered\" }).",
11853
- "field_kpi_showTotal_hint": "نمایش کل.",
11854
- "field_kpi_showPercentTotal_hint": "نمایش کل به درصد.",
11855
- "field_kpi_totalMatchFormula_hint": "فرمول برای کل (برای محاسبه درصد استفاده می‌شود).",
11856
- "field_kpi_icon_hint": "نام آیکون (مثلاً: FaUsers, FaShoppingCart).",
11857
- "field_kpi_order_hint": "ترتیب نمایش در یک داشبورد.",
11858
- "field_kpi_color_hint": "رنگ مرتبط با KPI.",
11859
-
11860
- "field_dashboard_settings_hint": "تنظیمات JSON برای داشبورد، مانند بازه زمانی پیش‌فرض ('defaultTimeRange') یا فاصله بروزرسانی بر حسب ثانیه ('refreshInterval').",
11861
- "field_dashboard_isDefault_hint": "در صورت انتخاب، این داشبورد به طور پیش‌فرض برای کاربر نمایش داده می‌شود.",
11862
-
11863
- "field_event_currency_hint": "ارز برای قیمت (مثلاً: EUR, USD).",
11864
- "field_event_registrationDeadline_hint": "مهلت ثبت‌نام شرکت‌کنندگان در رویداد.",
11865
- "field_event_attendees_hint": "ارتباط با مخاطبین شرکت‌کننده در رویداد.",
11866
- "field_event_sponsors_hint": "فهرست حامیان یا شرکای درگیر در رویداد.",
11867
-
11868
- "field_workflowTrigger_workflow_hint": "Workflowی که این trigger به آن تعلق دارد.",
11869
- "field_workflowTrigger_dataFilter_hint": "شرایط اختیاری که قبل از راه‌اندازی workflow روی داده‌ها بررسی می‌شوند.",
11870
- "field_workflowTrigger_env_hint": "متغیرهای محیطی (جفت‌های کلید/مقدار JSON) در دسترس برای workflow.",
11871
- "field_workflowTrigger_cronExpression_hint": "عبارت Cron برای زمان‌بندی (مثلاً: '0 9 * * 1' برای دوشنبه ساعت 9 صبح).",
11872
-
11873
- "field_workflowStep_workflow_hint": "Workflowی که این مرحله به آن تعلق دارد.",
11874
- "field_workflowStep_name_hint": "نام توصیفی اختیاری برای مرحله (مثلاً: 'بررسی موجودی', 'ارسال ایمیل تأیید').",
11875
- "field_workflowStep_conditions_hint": "شرایط اختیاری که قبل از اجرای عمل مرحله بررسی می‌شوند.",
11876
- "field_workflowStep_onSuccessStep_hint": "اختیاری: مرحله بعدی در صورت موفقیت‌آمیز بودن عمل این مرحله.",
11877
- "field_workflowStep_onFailureStep_hint": "اختیاری: مرحله بعدی در صورت شکست شرایط یا عمل.",
11878
- "field_workflowStep_isTerminal_hint": "نشان می‌دهد که آیا این مرحله پایان یک مسیر workflow را نشان می‌دهد.",
11879
-
11880
- "field_workflowAction_name_hint": "نام عمل (مثلاً: 'به‌روزرسانی وضعیت', 'ارسال ایمیل', 'فراخوانی API').",
11881
- "field_workflowAction_type_hint": "نوع عملی که انجام خواهد شد.",
11882
- "field_workflowAction_targetModel_hint": "مدل داده برای فیلتر کردن اسناد هدف.",
11883
- "field_workflowAction_fieldsToUpdate_hint": "جفت‌های کلید-مقدار فیلدهایی که به‌روزرسانی می‌شوند (مثلاً: { \"status\": \"Validé\" }).",
11884
- "field_workflowAction_dataToCreate_hint": "شیء مدل برای سند جدیدی که ایجاد می‌شود.",
11885
- "field_workflowAction_script_hint": "اسکریپتی که اجرا خواهد شد.",
11886
- "field_workflowAction_url_hint": "آدرس URL webhook که فراخوانی می‌شود.",
11887
- "field_workflowAction_method_hint": "متد HTTP مورد استفاده برای فراخوانی webhook.",
11888
- "field_workflowAction_headers_hint": "هدرهای درخواست HTTP webhook (قالب JSON).",
11889
- "field_workflowAction_body_hint": "بدنه درخواست HTTP webhook (قالب JSON، می‌تواند شامل متغیرها باشد).",
11890
- "field_workflowAction_duration_hint": "مدت زمان انتظار.",
11891
- "field_workflowAction_durationUnit_hint": "واحد زمان برای مدت انتظار.",
11892
-
11893
- "field_workflowRun_contextData_hint": "نمونه‌ای از داده‌ها یا رویدادی که اجرا را فعال کرد.",
11894
- "field_workflowRun_currentStep_hint": "مرحله‌ای که در حال اجرا یا در انتظار است.",
11895
- "field_workflowRun_error_hint": "پیام خطا در صورت شکست اجرای workflow.",
11896
-
11897
- "field_event_title_hint": "عنوان رویداد.",
11898
- "field_event_description_hint": "توضیح مفصلی از رویداد، شامل برنامه، سخنرانان و غیره.",
11899
- "field_event_startDate_hint": "تاریخ و زمان شروع رویداد.",
11900
- "field_event_endDate_hint": "تاریخ و زمان پایان رویداد.",
11901
- "field_event_location_hint": "مکانی که رویداد در آن برگزار می‌شود (آدرس فیزیکی یا لینک آنلاین).",
11902
- "field_event_categories_hint": "دسته‌ها یا برچسب‌های مرتبط با رویداد (مثلاً: \"کنفرانس\", \"کارگاه\").",
11903
- "field_event_organizer_hint": "نام سازمان یا فرد برگزارکننده رویداد.",
11904
- "field_event_isOnline_hint": "نشان می‌دهد که رویداد آنلاین است یا حضوری.",
11905
- "field_event_eventUrl_hint": "لینک به وب‌سایت رسمی رویداد یا صفحه ثبت‌نام.",
11906
- "field_event_imageUrl_hint": "آدرس URL تصویر یا بنر رویداد.",
11907
- "field_event_status_hint": "وضعیت فعلی رویداد.",
11908
- "field_event_capacity_hint": "حداکثر تعداد شرکت‌کنندگان مجاز برای رویداد.",
11909
- "field_event_price_hint": "قیمت ورودی، در صورت وجود.",
11910
-
11911
- "field_alert_name_hint": "یک نام منحصر به فرد برای شناسایی هشدار (مثلاً: 'هشدار موجودی کم', 'کاربران غیرفعال جدید').",
11912
- "field_alert_sendEmail_hint": "برای ارسال یک اعلان از طریق ایمیل نیز انتخاب کنید.",
11913
- "field_alert_message_hint": "پیام سفارشی برای ایمیل. اگر خالی باشد، از یک پیام پیش‌فرض استفاده می‌شود. می‌توانید از متغیرهایی مانند {count}, {alert.name} و غیره استفاده کنید...",
11914
- "field_alert_targetModel_hint": "مدل داده‌ای که این هشدار روی آن اعمال می‌شود.",
11915
- "field_alert_description_hint": "توضیحی درباره اینکه هشدار چه چیزی را نظارت می‌کند و چرا.",
11916
- "field_alert_triggerCondition_hint": "شرطی که در صورت برقرار بودن، هشدار را فعال می‌کند.",
11917
- "field_alert_frequency_hint": "دفعات بررسی برقرار بودن شرط.",
11918
- "field_alert_lastNotifiedAt_hint": "زمان‌نگار آخرین اعلان ارسال شده برای این هشدار.",
11919
- "field_alert_isActive_hint": "اگر این کادر انتخاب شده باشد، هشدار فعال است و شرایط را بررسی می‌کند.",
11920
- "field_env_name_hint": "نام متغیر (مثلاً: OPENAI_API_KEY).",
11921
- "field_env_value_hint": "مقدار متغیر (به صورت ایمن ذخیره می‌شود و export نمی‌شود).",
11922
- "field_kpi_aggregationField_hint": "نام فیلد عددی که تجمیع روی آن اعمال می‌شود (مثلاً: totalAmount). برای 'count' لازم نیست.",
11923
- "field_content_category": "دسته",
11924
- "field_content_order": "ترتیب",
11925
- "field_content_inSitemap": "در نقشه سایت",
11926
- "field_resource_file": "فایل",
11927
- "field_taxonomy_identifier": "شناسه",
11928
- "field_taxonomy_order": "ترتیب",
11929
- "field_taxonomy_description": "توضیحات",
11930
- "field_review_product": "محصول",
11931
- "field_review_productVariant": "گونه محصول",
11932
- "field_product_slug": "Slug",
11933
- "field_product_seoTitle": "عنوان سئو",
11934
- "field_product_seoDescription": "توضیحات سئو",
11935
- "field_productVariant_description": "توضیحات",
11936
- "field_cart_name": "نام سبد خرید",
11937
- "field_return_channel": "کانال",
11938
- "field_ticket_parent": "تیکت والد",
11939
- "field_accountingExercise_name_hint": "عنوان دوره مالی",
11940
- "field_accountingLineItem_values_hint": "مقادیر آیتم خط حسابداری",
11941
- "field_accountingEntry_entryDate_hint": "تاریخ ثبت",
11942
- "field_accountingEntry_referenceNumber_hint": "شماره مرجع",
11943
- "field_accountingEntry_status_hint": "وضعیت",
11944
- "field_accountingEntry_createdBy_hint": "ایجاد شده توسط",
11945
- "field_accountingEntry_validatedBy_hint": "تأیید شده توسط",
11946
- "field_accountingEntry_validationDate_hint": "تاریخ تأیید",
11947
- "field_accountingEntry_attachments_hint": "پیوست‌ها",
11948
- "field_employee_notes_hint": "یادداشت‌های اضافی برای کارمند",
11949
-
11950
- "field_workflow_startStep_hint": "اولین مرحله‌ای که هنگام شروع workflow اجرا می‌شود.",
11951
-
11952
11962
  "field_alert_name": "نام",
11953
11963
  "field_alert_sendEmail": "ارسال ایمیل",
11954
11964
  "field_alert_message": "پیام",
@@ -12,6 +12,7 @@ import {maxAIReflectiveSteps} from "../../constants.js";
12
12
  import {providers} from "./constants.js";
13
13
  import {ChatDeepSeek} from "@langchain/deepseek";
14
14
  import {ChatAnthropic} from "@langchain/anthropic";
15
+ import {Config} from "../../config.js";
15
16
 
16
17
  let logger = null;
17
18
 
@@ -356,7 +357,8 @@ async function handleChatRequest(message, history, provider, context, user, conf
356
357
 
357
358
 
358
359
  // --- BOUCLE DE RAISONNEMENT ET D'EXÉCUTION D'OUTILS ---
359
- for (let i = 0; i < maxAIReflectiveSteps; i++) {
360
+ const m = Config.Get('maxAIReflectiveSteps', maxAIReflectiveSteps);
361
+ for (let i = 0; i < m; i++) {
360
362
  logger.debug(`[Assistant] Tour de boucle ${i + 1}. Invocation de l'IA...`);
361
363
 
362
364
  const response = await llm.invoke(conversationHistory);
@@ -13,6 +13,7 @@ import {sendEmail} from "../email.js";
13
13
  import {throttleMiddleware} from "../middlewares/throttle.js";
14
14
  import {getCollectionForUser} from "./mongodb.js";
15
15
  import {safeAssignObject} from "../core.js";
16
+ import {Config} from "../config.js";
16
17
 
17
18
  const restoreRequests = {};
18
19
 
@@ -47,15 +48,6 @@ export const requestRestore = async (user, lang) => {
47
48
  }
48
49
  };
49
50
 
50
- const getDefaultS3Config = () => {
51
- return {
52
- accessKeyId: process.env.AWS_ACCESS_KEY_ID,
53
- secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY, // Utiliser la clé déchiffrée
54
- region: process.env.AWS_REGION || awsDefaultConfig.region,
55
- bucketName: process.env.AWS_BUCKET || awsDefaultConfig.bucketName
56
- };
57
- }
58
-
59
51
  /**
60
52
  * Récupère la configuration S3 depuis les variables d'environnement de l'utilisateur en base de données.
61
53
  * @param {object} user - L'objet utilisateur.
@@ -98,12 +90,16 @@ async function _getUserS3ConfigFromDb(user) {
98
90
  * @returns {Promise<object>} - L'objet de configuration S3 final.
99
91
  */
100
92
  export async function getUserS3Config(user) {
93
+
94
+ const adc = awsDefaultConfig;
95
+ const dc = Config.Get('awsDefaultConfig', {});
96
+
101
97
  // 1. Récupérer la configuration globale par défaut
102
98
  const defaultConfig = {
103
- accessKeyId: process.env.AWS_ACCESS_KEY_ID,
104
- secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
105
- region: process.env.AWS_REGION || awsDefaultConfig.region,
106
- bucketName: process.env.AWS_BUCKET_NAME || awsDefaultConfig.bucketName
99
+ accessKeyId: dc.accessKeyId || process.env.AWS_ACCESS_KEY_ID,
100
+ secretAccessKey: dc.secretAccessKey || process.env.AWS_SECRET_ACCESS_KEY,
101
+ region: dc.region || process.env.AWS_REGION || adc.region,
102
+ bucketName: dc.bucketName || process.env.AWS_BUCKET_NAME || adc.bucketName
107
103
  };
108
104
 
109
105
  // 2. Récupérer la configuration spécifique de l'utilisateur
@@ -243,13 +239,14 @@ export const getS3Stream = (s3Config, s3Key) => {
243
239
  return s3.getObject(params).createReadStream();
244
240
  };
245
241
 
246
- const throttle = throttleMiddleware(maxBytesPerSecondThrottleData);
247
-
248
242
  let engine, logger;
249
243
  export async function onInit(defaultEngine) {
250
244
  engine = defaultEngine;
251
245
  logger = engine.getComponent(Logger);
252
246
 
247
+ const m = Config.Get('maxBytesPerSecondThrottleData', maxBytesPerSecondThrottleData);
248
+ const throttle = throttleMiddleware(m);
249
+
253
250
  const userMiddlewares = await engine.userProvider.getMiddlewares();
254
251
  engine.post('/api/backup/request-restore', [throttle, middlewareAuthenticator, userInitiator, ...userMiddlewares], async (req, res) => {
255
252
  const user = req.me; // Assuming you have user authentication middleware
@@ -153,7 +153,8 @@ export const loadFromDump = async (user, options = {}) => {
153
153
  }
154
154
 
155
155
  // --- EXÉCUTION DE MONGORESTORE ---
156
- const restoreSourceDir = path.join(tmpRestoreDir, dbName);
156
+ const d = Config.Get('dbName', dbName);
157
+ const restoreSourceDir = path.join(tmpRestoreDir, d);
157
158
  if (!fs.existsSync(restoreSourceDir)) {
158
159
  throw new Error(`Restore source directory (${restoreSourceDir}) not found.`);
159
160
  }
@@ -161,15 +162,15 @@ export const loadFromDump = async (user, options = {}) => {
161
162
  let command;
162
163
  const args = [
163
164
  '--uri', dbUrl,
164
- '--db', dbName
165
+ '--db', d
165
166
  ];
166
167
 
167
168
  if (modelsOnly) {
168
- args.push('--nsInclude', `${dbName}.models`);
169
+ args.push('--nsInclude', `${d}.models`);
169
170
  } else {
170
171
  // mongorestore accepte plusieurs fois l'option --nsInclude
171
- args.push('--nsInclude', `${dbName}.datas`);
172
- args.push('--nsInclude', `${dbName}.models`);
172
+ args.push('--nsInclude', `${d}.datas`);
173
+ args.push('--nsInclude', `${d}.models`);
173
174
  }
174
175
  // Le répertoire source est le dernier argument
175
176
  args.push(restoreSourceDir);
@@ -242,6 +243,8 @@ export const dumpUserData = async (user) => {
242
243
  const backupFrequency = await engine.userProvider.getBackupFrequency(user);
243
244
  logger.info(`Fréquence de sauvegarde : ${backupFrequency}.`);
244
245
 
246
+
247
+ const d = Config.Get('dbName', dbName);
245
248
  const collections = await MongoDatabase.listCollections().toArray();
246
249
  for (const collection of collections) {
247
250
  const collsToBackup = [await getUserCollectionName(user), 'models'];
@@ -249,7 +252,7 @@ export const dumpUserData = async (user) => {
249
252
  const query = {_user: user.username};
250
253
  const args = [
251
254
  '--uri', dbUrl,
252
- '--db', dbName,
255
+ '--db', d,
253
256
  '--out', localTempDumpDir,
254
257
  '--collection', collection.name,
255
258
  '--query', JSON.stringify(query)
@@ -258,9 +261,9 @@ export const dumpUserData = async (user) => {
258
261
  await execFileAsync('mongodump', args);
259
262
  }
260
263
  }
261
- const dumpSourceDir = path.join(localTempDumpDir, dbName);
264
+ const dumpSourceDir = path.join(localTempDumpDir, d);
262
265
  if (fs.existsSync(dumpSourceDir)) {
263
- await tar.create({gzip: true, file: localArchivePath, C: localTempDumpDir}, [dbName]);
266
+ await tar.create({gzip: true, file: localArchivePath, C: localTempDumpDir}, [d]);
264
267
  logger.info(`Archive de sauvegarde locale créée : ${localArchivePath}`);
265
268
  } else {
266
269
  logger.warn(`Le répertoire de dump ${dumpSourceDir} était vide. Aucune archive n'a créée.`);
@@ -16,7 +16,8 @@ export const mongoDBWhitelist = [
16
16
  "$abs", '$sin', '$cos', '$tan', '$asin', '$acos', '$atan',
17
17
  "$toDate", "$toBool", "$toString", "$toInt", "$toDouble",
18
18
  "$dateDiff", "$dateSubtract", "$dateAdd", "$dateToString",
19
- '$year', '$month', '$week', '$dayOfMonth', '$dayOfWeek', '$dayOfYear', '$hour', '$minute', '$second', '$millisecond'
19
+ '$year', '$month', '$week', '$dayOfMonth', '$dayOfWeek', '$dayOfYear', '$hour', '$minute', '$second', '$millisecond',
20
+ '$geoNear', '$regex', '$text', '$nearSphere','$geoWithin','$geoIntersects'
20
21
  ];
21
22
  export let importJobs = {};
22
23