@airoom/nextmin-node 2.0.1 → 2.0.3

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 (45) hide show
  1. package/README.md +151 -0
  2. package/dist/api/apiRouter.d.ts +28 -1
  3. package/dist/api/apiRouter.js +138 -8
  4. package/dist/api/router/mountBatchRoutes.d.ts +2 -0
  5. package/dist/api/router/mountBatchRoutes.js +90 -0
  6. package/dist/api/router/mountCrudRoutes.js +79 -20
  7. package/dist/api/router/setupAuthRoutes.js +475 -38
  8. package/dist/api/router/setupChatWidgetRoutes.d.ts +3 -0
  9. package/dist/api/router/setupChatWidgetRoutes.js +207 -0
  10. package/dist/api/router/setupFileRoutes.js +258 -12
  11. package/dist/api/router/utils.d.ts +4 -1
  12. package/dist/api/router/utils.js +25 -7
  13. package/dist/cli.d.ts +1 -0
  14. package/dist/cli.js +145 -64
  15. package/dist/database/DatabaseAdapter.d.ts +2 -0
  16. package/dist/database/NMAdapter.d.ts +11 -0
  17. package/dist/database/NMAdapter.js +688 -73
  18. package/dist/database/QueryEngine.js +7 -4
  19. package/dist/files/FileStorageAdapter.d.ts +6 -0
  20. package/dist/files/LocalFileStorageAdapter.d.ts +6 -0
  21. package/dist/files/LocalFileStorageAdapter.js +39 -3
  22. package/dist/files/S3FileStorageAdapter.d.ts +8 -1
  23. package/dist/files/S3FileStorageAdapter.js +86 -11
  24. package/dist/files/filename.js +6 -4
  25. package/dist/index.d.ts +1 -0
  26. package/dist/index.js +3 -1
  27. package/dist/models/BaseModel.d.ts +19 -2
  28. package/dist/models/BaseModel.js +4 -4
  29. package/dist/policy/authorize.d.ts +1 -1
  30. package/dist/policy/authorize.js +64 -13
  31. package/dist/schemas/Users.json +20 -10
  32. package/dist/services/AggregateService.d.ts +8 -0
  33. package/dist/services/AggregateService.js +87 -0
  34. package/dist/services/IndexingService.d.ts +24 -0
  35. package/dist/services/IndexingService.js +555 -0
  36. package/dist/services/LocalAIService.d.ts +34 -0
  37. package/dist/services/LocalAIService.js +471 -0
  38. package/dist/services/OpenAIService.d.ts +16 -0
  39. package/dist/services/OpenAIService.js +586 -0
  40. package/dist/utils/Events.js +1 -1
  41. package/dist/utils/Logger.d.ts +2 -1
  42. package/dist/utils/Logger.js +15 -6
  43. package/dist/utils/SchemaLoader.d.ts +2 -2
  44. package/dist/utils/SchemaLoader.js +44 -6
  45. package/package.json +12 -4
@@ -58,6 +58,10 @@ function validateSchema(obj) {
58
58
  return missing;
59
59
  }
60
60
  class SchemaLoader {
61
+ get isDevelopment() {
62
+ return (process.env.APP_MODE?.toLowerCase() !== 'production' &&
63
+ process.env.NODE_ENV?.toLowerCase() !== 'production');
64
+ }
61
65
  // Singleton instance
62
66
  static getInstance() {
63
67
  if (!SchemaLoader._instance) {
@@ -68,10 +72,8 @@ class SchemaLoader {
68
72
  constructor() {
69
73
  this.emitter = new events_1.EventEmitter();
70
74
  this.schemas = {};
71
- this.isDevelopment = false;
72
- this.nonOverridableSchemas = new Set(['User', 'Role']);
75
+ this.nonOverridableSchemas = new Set(['Users', 'Roles']);
73
76
  this.watcher = null; // <-- TS-safe
74
- this.isDevelopment = process.env.APP_MODE !== 'production';
75
77
  const baseDir = process.cwd();
76
78
  const basePackageDir = path_1.default.resolve(__dirname, '..');
77
79
  this.packageSchemasDir = path_1.default.join(basePackageDir, 'schemas');
@@ -275,7 +277,7 @@ class SchemaLoader {
275
277
  // Instead of blocking, MERGE user changes into package default
276
278
  const base = schemas[modelName];
277
279
  if (base) {
278
- // shallow merge + attributes deep merge with delete support
280
+ // shallow merge + attributes deep merge with delete support + deep access merge
279
281
  const merged = {
280
282
  ...base,
281
283
  ...schema,
@@ -284,6 +286,42 @@ class SchemaLoader {
284
286
  ...base.allowedMethods,
285
287
  ...schema.allowedMethods,
286
288
  },
289
+ access: base.access || schema.access ? {
290
+ ...(base.access || {}),
291
+ ...(schema.access || {}),
292
+ public: {
293
+ ...(base.access?.public || {}),
294
+ ...(schema.access?.public || {}),
295
+ },
296
+ authenticated: {
297
+ ...(base.access?.authenticated || {}),
298
+ ...(schema.access?.authenticated || {}),
299
+ },
300
+ roles: {
301
+ ...(base.access?.roles || {}),
302
+ ...(schema.access?.roles || {}),
303
+ },
304
+ queryFilter: {
305
+ ...(base.access?.queryFilter || {}),
306
+ ...(schema.access?.queryFilter || {}),
307
+ },
308
+ createDefaults: {
309
+ ...(base.access?.createDefaults || {}),
310
+ ...(schema.access?.createDefaults || {}),
311
+ },
312
+ restrictions: {
313
+ ...(base.access?.restrictions || {}),
314
+ ...(schema.access?.restrictions || {}),
315
+ },
316
+ bypassPrivacy: base.access?.bypassPrivacy || schema.access?.bypassPrivacy ? {
317
+ ...(base.access?.bypassPrivacy || {}),
318
+ ...(schema.access?.bypassPrivacy || {}),
319
+ roles: Array.from(new Set([
320
+ ...(base.access?.bypassPrivacy?.roles || []),
321
+ ...(schema.access?.bypassPrivacy?.roles || [])
322
+ ]))
323
+ } : undefined
324
+ } : undefined
287
325
  };
288
326
  schemas[modelName] = merged;
289
327
  }
@@ -395,9 +433,9 @@ class SchemaLoader {
395
433
  }
396
434
  return out;
397
435
  }
398
- closeWatcher() {
436
+ async closeWatcher() {
399
437
  if (this.watcher) {
400
- this.watcher.close();
438
+ await this.watcher.close();
401
439
  }
402
440
  }
403
441
  coerceIndexDir(val) {
package/package.json CHANGED
@@ -1,11 +1,16 @@
1
1
  {
2
2
  "name": "@airoom/nextmin-node",
3
- "version": "2.0.1",
3
+ "version": "2.0.3",
4
4
  "license": "MIT",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "nextmin-node": "./dist/cli.js",
9
+ "nextmin": "./dist/cli.js",
10
+ "netmin": "./dist/cli.js"
11
+ },
7
12
  "scripts": {
8
- "build": "rm -rf dist && tsc --project tsconfig.json && copyfiles -u 2 \"src/schemas/**/*\" dist/schemas",
13
+ "build": "rm -rf dist && tsc --project tsconfig.json && copyfiles -u 2 \"src/schemas/**/*\" dist/schemas && chmod +x dist/cli.js",
9
14
  "watch": "tsc --project tsconfig.json --watch",
10
15
  "test": "vitest run",
11
16
  "test:watch": "vitest",
@@ -15,22 +20,25 @@
15
20
  "dependencies": {
16
21
  "@aws-sdk/client-s3": "^3.864.0",
17
22
  "@aws-sdk/s3-request-presigner": "^3.864.0",
23
+ "@keyv/redis": "^4.0.1",
18
24
  "bcrypt": "^6.0.0",
19
25
  "body-parser": "^2.2.0",
20
26
  "chokidar": "^4.0.3",
27
+ "dotenv": "^16.4.5",
21
28
  "fast-glob": "^3.3.1",
22
29
  "jsonwebtoken": "^9.0.2",
23
30
  "keyv": "^5.2.3",
24
31
  "kleur": "^4.1.5",
25
- "@keyv/redis": "^4.0.1",
26
32
  "mongodb": "^6.21.0",
27
33
  "mongoose": "^8.18.0",
28
34
  "mongoose-autopopulate": "^1.1.0",
29
35
  "mssql": "^12.2.0",
30
36
  "multer": "^2.0.2",
31
37
  "mysql2": "^3.16.1",
38
+ "node-llama-cpp": "^3.18.1",
32
39
  "pg": "^8.17.2",
33
40
  "reflect-metadata": "^0.2.2",
41
+ "sharp": "^0.33.5",
34
42
  "socket.io": "^4.7.5",
35
43
  "sqlite3": "^5.1.7",
36
44
  "typeorm": "^0.3.28"
@@ -57,4 +65,4 @@
57
65
  "publishConfig": {
58
66
  "access": "public"
59
67
  }
60
- }
68
+ }