data-primals-engine 1.2.6-rc2 → 1.2.6-rc3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -315,7 +315,7 @@ curl -X DELETE http://localhost:7633/api/data?_user=demo \
315
315
  Make sure you use the code below to initialize the user :
316
316
  ```javascript
317
317
  import express from "express";
318
- import {Engine, insertData, searchData } from './src/index';
318
+ import {Engine, insertData, searchData } from 'data-primals-engine';
319
319
 
320
320
  // Ensure the engine is initialized
321
321
 
package/package.json CHANGED
@@ -1,120 +1,120 @@
1
- {
2
- "name": "data-primals-engine",
3
- "version": "1.2.6-rc2",
4
- "description": "data-primals-engine is a package responsible from handling large amount of data using MongoDB in a practical and performant way. It can also get workflow models working (for automation), and fully supports internationalisation. It also has integrated AI assistant.",
5
- "main": "src/engine.js",
6
- "type": "module",
7
- "scripts": {
8
- "preinstall": "npx force-resolutions",
9
- "dev": "concurrently \"npm:client\" \"npm:devserver\"",
10
- "prod": "npm run build-server && npm run server",
11
- "client": "cd client && npm run dev",
12
- "build-server": "vite build client --config client/vite.config.js --outDir dist",
13
- "build-client": "cd client && npm run build",
14
- "server": "cross-env NODE_ENV=production node server.js",
15
- "devserver": "npm run build-server && cross-env NODE_ENV=development PORT=7633 node server.js",
16
- "lint": "eslint .",
17
- "format": "prettier --write .",
18
- "clean": "rm -rf node_modules package-lock.json",
19
- "test": "cross-env MONGO_DB_URL=\"mongodb://localhost:27017\" PORT=7635 vitest --no-file-parallelism",
20
- "audit": "npm audit --audit-level=high",
21
- "migrate:create": "node src/migrate.js create",
22
- "migrate:up": "node src/migrate.js up",
23
- "migrate:down": "node src/migrate.js down",
24
- "migrate:revert": "node src/migrate.js revert",
25
- "migrate:status": "node src/migrate.js status"
26
- },
27
- "optionalDependencies": {
28
- "@rollup/rollup-linux-x64-gnu": "4.6.1"
29
- },
30
- "resolutions": {
31
- "tar-fs": "3.0.9",
32
- "on-headers": "1.1.0",
33
- "brace-expansion": "2.0.2",
34
- "prismjs": "1.30.0"
35
- },
36
- "repository": {
37
- "type": "git",
38
- "url": "https://github.com/anonympins/data-primals-engine.git"
39
- },
40
- "exports": {
41
- ".": "./src/index.js",
42
- "./modules/*.js": "./src/modules/*.js",
43
- "./modules/*": "./src/modules/*/index.js",
44
- "./client": "./client/index.js",
45
- "./*": "./src/*.js"
46
- },
47
- "peerDependencies": {
48
- "express": "^5.1.0",
49
- "react": ">=18.0.0",
50
- "react-query": ">=3.0.0"
51
- },
52
- "dependencies": {
53
- "@langchain/core": "^0.3.66",
54
- "@langchain/deepseek": "^0.1.0",
55
- "@langchain/google-genai": "^0.2.16",
56
- "@langchain/openai": "^0.6.3",
57
- "archiver": "^7.0.1",
58
- "aws-sdk": "^2.1692.0",
59
- "bcrypt": "^6.0.0",
60
- "body-parser": "^2.2.0",
61
- "chalk": "^5.4.1",
62
- "check-disk-space": "^3.4.0",
63
- "compression": "^1.8.1",
64
- "cookie-parser": "^1.4.7",
65
- "cronstrue": "^3.2.0",
66
- "csv-parse": "^6.1.0",
67
- "date-fns": "^4.1.0",
68
- "express-csrf-double-submit-cookie": "^2.0.0",
69
- "express-formidable": "^1.2.0",
70
- "express-mongo-sanitize": "^2.2.0",
71
- "express-rate-limit": "^8.0.1",
72
- "express-session": "^1.18.2",
73
- "i18next-browser-languagedetector": "^8.2.0",
74
- "isolated-vm": "^4.7.2",
75
- "juice": "^11.0.1",
76
- "mathjs": "^14.6.0",
77
- "mongodb": "^6.18.0",
78
- "node-cache": "^5.1.2",
79
- "node-schedule": "^2.1.1",
80
- "nodemailer": "^7.0.5",
81
- "openai": "^5.10.2",
82
- "process": "^0.11.10",
83
- "prop-types": "^15.8.1",
84
- "randomcolor": "^0.6.2",
85
- "react-i18next": "^15.6.1",
86
- "react-markdown": "^10.1.0",
87
- "read-excel-file": "^5.8.8",
88
- "request-ip": "^3.3.0",
89
- "sanitize-html": "^2.17.0",
90
- "sirv": "^3.0.1",
91
- "swagger-ui-express": "^5.0.1",
92
- "tar": "^7.4.3",
93
- "uniqid": "^5.4.0",
94
- "vitest": "^3.2.4",
95
- "yaml": "^2.8.0"
96
- },
97
- "devDependencies": {
98
- "@eslint/js": "^9.32.0",
99
- "concurrently": "^9.2.0",
100
- "cross-env": "^10.0.0",
101
- "eslint": "^9.32.0",
102
- "globals": "^16.3.0"
103
- },
104
- "subPackages": [
105
- "client"
106
- ],
107
- "keywords": [
108
- "data-driven engine",
109
- "headless CMS",
110
- "backend",
111
- "automation",
112
- "AWS S3",
113
- "MongoDB"
114
- ],
115
- "author": "anonympins",
116
- "license": "MIT",
117
- "engines": {
118
- "node": ">=20.0.0"
119
- }
120
- }
1
+ {
2
+ "name": "data-primals-engine",
3
+ "version": "1.2.6-rc3",
4
+ "description": "data-primals-engine is a package responsible from handling large amount of data using MongoDB in a practical and performant way. It can also get workflow models working (for automation), and fully supports internationalisation. It also has integrated AI assistant.",
5
+ "main": "src/engine.js",
6
+ "type": "module",
7
+ "scripts": {
8
+ "preinstall": "npx force-resolutions",
9
+ "dev": "concurrently \"npm:client\" \"npm:devserver\"",
10
+ "prod": "npm run build-server && npm run server",
11
+ "client": "cd client && npm run dev",
12
+ "build-server": "vite build client --config client/vite.config.js --outDir dist",
13
+ "build-client": "cd client && npm run build",
14
+ "server": "cross-env NODE_ENV=production node server.js",
15
+ "devserver": "npm run build-server && cross-env NODE_ENV=development PORT=7633 node server.js",
16
+ "lint": "eslint .",
17
+ "format": "prettier --write .",
18
+ "clean": "rm -rf node_modules package-lock.json",
19
+ "test": "cross-env MONGO_DB_URL=\"mongodb://localhost:27017\" PORT=7635 vitest --no-file-parallelism",
20
+ "audit": "npm audit --audit-level=high",
21
+ "migrate:create": "node src/migrate.js create",
22
+ "migrate:up": "node src/migrate.js up",
23
+ "migrate:down": "node src/migrate.js down",
24
+ "migrate:revert": "node src/migrate.js revert",
25
+ "migrate:status": "node src/migrate.js status"
26
+ },
27
+ "optionalDependencies": {
28
+ "@rollup/rollup-linux-x64-gnu": "4.6.1"
29
+ },
30
+ "resolutions": {
31
+ "tar-fs": "3.0.9",
32
+ "on-headers": "1.1.0",
33
+ "brace-expansion": "2.0.2",
34
+ "prismjs": "1.30.0"
35
+ },
36
+ "repository": {
37
+ "type": "git",
38
+ "url": "https://github.com/anonympins/data-primals-engine.git"
39
+ },
40
+ "exports": {
41
+ ".": "./src/index.js",
42
+ "./modules/*.js": "./src/modules/*.js",
43
+ "./modules/*": "./src/modules/*/index.js",
44
+ "./client": "./client/index.js",
45
+ "./*": "./src/*.js"
46
+ },
47
+ "peerDependencies": {
48
+ "express": "^5.1.0",
49
+ "react": ">=18.0.0",
50
+ "react-query": ">=3.0.0"
51
+ },
52
+ "dependencies": {
53
+ "@langchain/core": "^0.3.66",
54
+ "@langchain/deepseek": "^0.1.0",
55
+ "@langchain/google-genai": "^0.2.16",
56
+ "@langchain/openai": "^0.6.3",
57
+ "archiver": "^7.0.1",
58
+ "aws-sdk": "^2.1692.0",
59
+ "bcrypt": "^6.0.0",
60
+ "body-parser": "^2.2.0",
61
+ "chalk": "^5.4.1",
62
+ "check-disk-space": "^3.4.0",
63
+ "compression": "^1.8.1",
64
+ "cookie-parser": "^1.4.7",
65
+ "cronstrue": "^3.2.0",
66
+ "csv-parse": "^6.1.0",
67
+ "date-fns": "^4.1.0",
68
+ "express-csrf-double-submit-cookie": "^2.0.0",
69
+ "express-formidable": "^1.2.0",
70
+ "express-mongo-sanitize": "^2.2.0",
71
+ "express-rate-limit": "^8.0.1",
72
+ "express-session": "^1.18.2",
73
+ "i18next-browser-languagedetector": "^8.2.0",
74
+ "isolated-vm": "^4.7.2",
75
+ "juice": "^11.0.1",
76
+ "mathjs": "^14.6.0",
77
+ "mongodb": "^6.18.0",
78
+ "node-cache": "^5.1.2",
79
+ "node-schedule": "^2.1.1",
80
+ "nodemailer": "^7.0.5",
81
+ "openai": "^5.10.2",
82
+ "process": "^0.11.10",
83
+ "prop-types": "^15.8.1",
84
+ "randomcolor": "^0.6.2",
85
+ "react-i18next": "^15.6.1",
86
+ "react-markdown": "^10.1.0",
87
+ "read-excel-file": "^5.8.8",
88
+ "request-ip": "^3.3.0",
89
+ "sanitize-html": "^2.17.0",
90
+ "sirv": "^3.0.1",
91
+ "swagger-ui-express": "^5.0.1",
92
+ "tar": "^7.4.3",
93
+ "uniqid": "^5.4.0",
94
+ "vitest": "^3.2.4",
95
+ "yaml": "^2.8.0"
96
+ },
97
+ "devDependencies": {
98
+ "@eslint/js": "^9.32.0",
99
+ "concurrently": "^9.2.0",
100
+ "cross-env": "^10.0.0",
101
+ "eslint": "^9.32.0",
102
+ "globals": "^16.3.0"
103
+ },
104
+ "subPackages": [
105
+ "client"
106
+ ],
107
+ "keywords": [
108
+ "data-driven engine",
109
+ "headless CMS",
110
+ "backend",
111
+ "automation",
112
+ "AWS S3",
113
+ "MongoDB"
114
+ ],
115
+ "author": "anonympins",
116
+ "license": "MIT",
117
+ "engines": {
118
+ "node": ">=20.0.0"
119
+ }
120
+ }
package/src/engine.js CHANGED
@@ -199,7 +199,6 @@ export const Engine = {
199
199
  }
200
200
  } catch (e) {
201
201
  logger.error(`Échec du chargement du module '${moduleIdentifier}':`, e.stack);
202
- return null;
203
202
  }
204
203
  }
205
204
 
@@ -1,4 +1,7 @@
1
1
  import NodeCache from "node-cache";
2
+ import i18n from "../../i18n.js";
3
+ import {allowedFields, maxStringLength} from "../../constants.js";
4
+ import path from "node:path";
2
5
 
3
6
  export const modelsCache = new NodeCache( { stdTTL: 100, checkperiod: 120 } );
4
7
 
@@ -15,3 +18,73 @@ export const mongoDBWhitelist = [
15
18
  ];
16
19
  export let importJobs = {};
17
20
 
21
+
22
+ /**
23
+ * Exécute une tâche d'import/export (parsing, stringify) dans un worker thread.
24
+ * @param {('parse-json'|'parse-csv'|'stringify-json')} action - L'action à effectuer.
25
+ * @param {object} payload - Les données nécessaires pour l'action.
26
+ * @returns {Promise<any>} - Une promesse qui se résout avec les données traitées.
27
+ */
28
+ export function runImportExportWorker(action, payload) {
29
+ return new Promise((resolve, reject) => {
30
+ const workerPath = path.resolve(process.cwd(), './src/workers/import-export-worker.js');
31
+ const worker = new Worker(workerPath);
32
+
33
+ worker.postMessage({ action, payload });
34
+
35
+ worker.on('message', (result) => {
36
+ if (result.success) {
37
+ resolve(result.data);
38
+ } else {
39
+ // Correction : On s'assure de toujours passer une chaîne de caractères à new Error()
40
+ const errorMessage = result.error || `Import/Export Worker failed with an unknown error. Action: ${action}.`;
41
+ reject(new Error(errorMessage));
42
+ }
43
+ worker.terminate();
44
+ });
45
+
46
+ worker.on('error', (err) => {
47
+ reject(err);
48
+ worker.terminate();
49
+ });
50
+
51
+ worker.on('exit', (code) => {
52
+ if (code !== 0) {
53
+ reject(new Error(`Import/Export Worker stopped with exit code ${code}`));
54
+ }
55
+ });
56
+ });
57
+ }
58
+ /** Exécute une tâche de cryptographie dans un worker thread.
59
+ * @param {('encrypt'|'decrypt'|'hash')} action - L'action à effectuer.
60
+ * @param {object} payload - Les données nécessaires pour l'action.
61
+ * @returns {Promise<any>} - Une promesse qui se résout avec le résultat (si pertinent).
62
+ */
63
+ export function runCryptoWorkerTask(action, payload) {
64
+ return new Promise((resolve, reject) => {
65
+ const workerPath = path.resolve(process.cwd(), './src/workers/crypto-worker.js');
66
+ const worker = new Worker(workerPath);
67
+
68
+ worker.postMessage({ action, payload });
69
+
70
+ worker.on('message', (result) => {
71
+ if (result.success) {
72
+ resolve(result.data); // Résout avec les données (ex: le hash) ou undefined si pas de retour
73
+ } else {
74
+ reject(new Error(result.error));
75
+ }
76
+ worker.terminate();
77
+ });
78
+
79
+ worker.on('error', (err) => {
80
+ reject(err);
81
+ worker.terminate();
82
+ });
83
+
84
+ worker.on('exit', (code) => {
85
+ if (code !== 0) {
86
+ reject(new Error(`Crypto Worker stopped with exit code ${code}`));
87
+ }
88
+ });
89
+ });
90
+ }
@@ -78,7 +78,7 @@ import {getAllPacks} from "../../packs.js";
78
78
  import {Config} from "../../config.js";
79
79
  import {profiles} from "../../../client/src/constants.js";
80
80
  import {registerRoutes, sendSseToUser} from "./data.routes.js";
81
- import {importJobs, modelsCache, mongoDBWhitelist} from "./data.core.js";
81
+ import {importJobs, modelsCache, mongoDBWhitelist, runCryptoWorkerTask, runImportExportWorker} from "./data.core.js";
82
82
  import readXlsxFile from "read-excel-file/node";
83
83
 
84
84
  let engine;
@@ -500,75 +500,6 @@ export const getAPILang = (langs) => {
500
500
  }, []).sort(((p,r) => p.quality < r.quality ? 1 : -1))?.[0].lang.split(/[-_]/)?.[0];
501
501
  }
502
502
 
503
- /**
504
- * Exécute une tâche d'import/export (parsing, stringify) dans un worker thread.
505
- * @param {('parse-json'|'parse-csv'|'stringify-json')} action - L'action à effectuer.
506
- * @param {object} payload - Les données nécessaires pour l'action.
507
- * @returns {Promise<any>} - Une promesse qui se résout avec les données traitées.
508
- */
509
- function runImportExportWorker(action, payload) {
510
- return new Promise((resolve, reject) => {
511
- const workerPath = path.resolve(process.cwd(), './src/workers/import-export-worker.js');
512
- const worker = new Worker(workerPath);
513
-
514
- worker.postMessage({ action, payload });
515
-
516
- worker.on('message', (result) => {
517
- if (result.success) {
518
- resolve(result.data);
519
- } else {
520
- // Correction : On s'assure de toujours passer une chaîne de caractères à new Error()
521
- const errorMessage = result.error || `Import/Export Worker failed with an unknown error. Action: ${action}.`;
522
- reject(new Error(errorMessage));
523
- }
524
- worker.terminate();
525
- });
526
-
527
- worker.on('error', (err) => {
528
- reject(err);
529
- worker.terminate();
530
- });
531
-
532
- worker.on('exit', (code) => {
533
- if (code !== 0) {
534
- reject(new Error(`Import/Export Worker stopped with exit code ${code}`));
535
- }
536
- });
537
- });
538
- }
539
- /** Exécute une tâche de cryptographie dans un worker thread.
540
- * @param {('encrypt'|'decrypt'|'hash')} action - L'action à effectuer.
541
- * @param {object} payload - Les données nécessaires pour l'action.
542
- * @returns {Promise<any>} - Une promesse qui se résout avec le résultat (si pertinent).
543
- */
544
- function runCryptoWorkerTask(action, payload) {
545
- return new Promise((resolve, reject) => {
546
- const workerPath = path.resolve(process.cwd(), './src/workers/crypto-worker.js');
547
- const worker = new Worker(workerPath);
548
-
549
- worker.postMessage({ action, payload });
550
-
551
- worker.on('message', (result) => {
552
- if (result.success) {
553
- resolve(result.data); // Résout avec les données (ex: le hash) ou undefined si pas de retour
554
- } else {
555
- reject(new Error(result.error));
556
- }
557
- worker.terminate();
558
- });
559
-
560
- worker.on('error', (err) => {
561
- reject(err);
562
- worker.terminate();
563
- });
564
-
565
- worker.on('exit', (code) => {
566
- if (code !== 0) {
567
- reject(new Error(`Crypto Worker stopped with exit code ${code}`));
568
- }
569
- });
570
- });
571
- }
572
503
 
573
504
  export function validateModelStructure(modelStructure) {
574
505
 
@@ -40,10 +40,10 @@ import {tutorialsConfig} from "../../../client/src/tutorials.js";
40
40
  import {
41
41
  cancelAlerts, deleteData,
42
42
  dumpUserData,
43
- editData, exportData,
43
+ editData, editModel, exportData,
44
44
  getModel, getResource,
45
45
  handleCustomEndpointRequest,
46
- handleDemoInitialization, importData, insertData, installPack,
46
+ handleDemoInitialization, importData, insertData, installPack, loadFromDump,
47
47
  patchData, searchData, validateModelStructure
48
48
  } from "./data.js";
49
49
  import process from "node:process";