@paralect/hive 0.1.49 → 0.1.50-alpha.2

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 (189) hide show
  1. package/.hive/.babelrc +3 -0
  2. package/.hive/.cursor/commands/add-endpoint.md +262 -0
  3. package/.hive/.cursor/commands/add-handler.md +137 -0
  4. package/.hive/.cursor/commands/add-middleware.md +95 -0
  5. package/.hive/.cursor/commands/add-resource.md +71 -0
  6. package/.hive/.cursor/commands/add-scheduler.md +138 -0
  7. package/.hive/.cursor/commands/add-service.md +188 -0
  8. package/.hive/.cursor/skills/hive-auth/SKILL.md +134 -0
  9. package/.hive/.cursor/skills/hive-database/SKILL.md +103 -0
  10. package/.hive/.cursor/skills/hive-endpoint/SKILL.md +103 -0
  11. package/.hive/.cursor/skills/hive-handler/SKILL.md +88 -0
  12. package/.hive/.cursor/skills/hive-mapping/SKILL.md +85 -0
  13. package/.hive/.cursor/skills/hive-middleware/SKILL.md +104 -0
  14. package/.hive/.cursor/skills/hive-overview/SKILL.md +50 -0
  15. package/.hive/.cursor/skills/hive-scheduler/SKILL.md +94 -0
  16. package/.hive/.cursor/skills/hive-schema/SKILL.md +73 -0
  17. package/.hive/.cursor/skills/hive-service/SKILL.md +90 -0
  18. package/.hive/.dockerignore +1 -0
  19. package/.hive/Dockerfile +22 -0
  20. package/.hive/Dockerfile.dev +33 -0
  21. package/.hive/Dockerfile.prod +29 -0
  22. package/.hive/README.md +11 -0
  23. package/.hive/bin/deploy.sh +5 -0
  24. package/.hive/bin/start.sh +2 -0
  25. package/.hive/bootstrap-hive.js +118 -0
  26. package/.hive/deploy/api/Chart.yaml +6 -0
  27. package/.hive/deploy/api/staging.yaml +3 -0
  28. package/.hive/deploy/api/templates/deployment.yaml +44 -0
  29. package/.hive/deploy/api/templates/ingress.yaml +26 -0
  30. package/.hive/deploy/api/templates/service.yaml +14 -0
  31. package/.hive/deploy/script/Dockerfile +39 -0
  32. package/.hive/deploy/script/package-lock.json +1499 -0
  33. package/.hive/deploy/script/package.json +12 -0
  34. package/.hive/deploy/script/src/config.js +48 -0
  35. package/.hive/deploy/script/src/index.js +108 -0
  36. package/.hive/deploy/script/src/util.js +19 -0
  37. package/.hive/initial-data.json +176 -0
  38. package/.hive/package-lock.json +10242 -0
  39. package/.hive/package.json +98 -0
  40. package/.hive/ship_logo.png +0 -0
  41. package/.hive/src/app-config/app.js +3 -0
  42. package/.hive/src/app-config/assertEnv.js +15 -0
  43. package/.hive/src/app-config/index.js +62 -0
  44. package/.hive/src/app.js +69 -0
  45. package/.hive/src/assets/emails/components/header.mjml +13 -0
  46. package/.hive/src/assets/emails/dist/.gitkeep +0 -0
  47. package/.hive/src/assets/emails/signup-welcome.mjml +34 -0
  48. package/.hive/src/assets/emails/styles/index.mjml +77 -0
  49. package/.hive/src/autoMap/addHandlers.js +142 -0
  50. package/.hive/src/autoMap/getDependentFields.js +37 -0
  51. package/.hive/src/autoMap/mapSchema.js +99 -0
  52. package/.hive/src/autoMap/schemaMappings.js +13 -0
  53. package/.hive/src/autoMap/schemaMappings.json +3 -0
  54. package/.hive/src/bullMqBus.js +21 -0
  55. package/.hive/src/bullMqWrapper.js +23 -0
  56. package/.hive/src/db.js +52 -0
  57. package/.hive/src/emails/MyEmailComponent.jsx +14 -0
  58. package/.hive/src/emails/compiled/MyEmailComponent.js +18 -0
  59. package/.hive/src/emails/compiled/compiled/MyEmailComponent.js +18 -0
  60. package/.hive/src/helpers/db/ifUpdated.js +22 -0
  61. package/.hive/src/helpers/getMiddlewares.js +38 -0
  62. package/.hive/src/helpers/getResourceEndpoints.js +28 -0
  63. package/.hive/src/helpers/getResources.js +32 -0
  64. package/.hive/src/helpers/getSchemas.js +50 -0
  65. package/.hive/src/helpers/importHandlers.js +29 -0
  66. package/.hive/src/helpers/isZodArray.js +13 -0
  67. package/.hive/src/helpers/prettierFormat.js +8 -0
  68. package/.hive/src/helpers/schema/db.schema.js +9 -0
  69. package/.hive/src/helpers/schema/pagination.schema.js +14 -0
  70. package/.hive/src/ioEmitter.js +9 -0
  71. package/.hive/src/jsconfig.json +5 -0
  72. package/.hive/src/lib/node-mongo/.github/workflows/npm-publish.yml +32 -0
  73. package/.hive/src/lib/node-mongo/API.md +654 -0
  74. package/.hive/src/lib/node-mongo/CHANGELOG.md +98 -0
  75. package/.hive/src/lib/node-mongo/README.md +97 -0
  76. package/.hive/src/lib/node-mongo/package-lock.json +3682 -0
  77. package/.hive/src/lib/node-mongo/package.json +74 -0
  78. package/.hive/src/lib/node-mongo/src/index.js +64 -0
  79. package/.hive/src/lib/node-mongo/src/mongo-query-service.js +78 -0
  80. package/.hive/src/lib/node-mongo/src/mongo-service-error.js +15 -0
  81. package/.hive/src/lib/node-mongo/src/mongo-service.js +303 -0
  82. package/.hive/src/logger.js +43 -0
  83. package/.hive/src/middlewares/allowNoAuth.js +9 -0
  84. package/.hive/src/middlewares/attachUser.js +41 -0
  85. package/.hive/src/middlewares/global/extractUserTokens.js +15 -0
  86. package/.hive/src/middlewares/global/tryToAttachUser.js +33 -0
  87. package/.hive/src/middlewares/isAuthorized.js +18 -0
  88. package/.hive/src/middlewares/shouldExist.js +37 -0
  89. package/.hive/src/middlewares/shouldNotExist.js +19 -0
  90. package/.hive/src/middlewares/uploadFile.js +5 -0
  91. package/.hive/src/middlewares/validate.js +32 -0
  92. package/.hive/src/migrations/migration.js +8 -0
  93. package/.hive/src/migrations/migration.service.js +73 -0
  94. package/.hive/src/migrations/migrations/1.js +22 -0
  95. package/.hive/src/migrations/migrations-log/migration-log.schema.js +13 -0
  96. package/.hive/src/migrations/migrations-log/migration-log.service.js +50 -0
  97. package/.hive/src/migrations/migrations.schema.js +6 -0
  98. package/.hive/src/migrations/migrator.js +75 -0
  99. package/.hive/src/migrator.js +4 -0
  100. package/.hive/src/resources/_dev/endpoints/triggerSchedulerHandler.js +32 -0
  101. package/.hive/src/resources/health/endpoints/get.js +19 -0
  102. package/.hive/src/resources/schemaMappings/schemaMappings.schema.js +6 -0
  103. package/.hive/src/resources/tokens/methods/generateSecureToken.js +9 -0
  104. package/.hive/src/resources/tokens/methods/setToken.js +8 -0
  105. package/.hive/src/resources/tokens/methods/storeToken.js +35 -0
  106. package/.hive/src/resources/tokens/tokens.schema.js +11 -0
  107. package/.hive/src/resources/users/endpoints/getCurrentUser.js +14 -0
  108. package/.hive/src/resources/users/endpoints/getUserProfile.js +19 -0
  109. package/.hive/src/resources/users/handlers/test.js +1 -0
  110. package/.hive/src/resources/users/methods/ensureUserCreated.js +68 -0
  111. package/.hive/src/resources/users/users.schema.js +16 -0
  112. package/.hive/src/routes/index.js +172 -0
  113. package/.hive/src/routes/middlewares/attachCustomErrors.js +28 -0
  114. package/.hive/src/routes/middlewares/routeErrorHandler.js +27 -0
  115. package/.hive/src/scheduler/handlers/sendDailyReport.example.js +7 -0
  116. package/.hive/src/scheduler.js +32 -0
  117. package/.hive/src/security.util.js +38 -0
  118. package/.hive/src/services/emailService.js +15 -0
  119. package/.hive/src/services/globalTest.js +0 -0
  120. package/.hive/src/services/setCookie.js +21 -0
  121. package/.hive/src/socketIo.js +99 -0
  122. package/.hive/tsconfig.json +31 -0
  123. package/cli/helpers/docker.js +59 -0
  124. package/cli/helpers/envCheck.js +127 -0
  125. package/cli/helpers/findPort.js +32 -0
  126. package/cli/hive.js +91 -17
  127. package/package.json +1 -1
  128. package/starter/loader.mjs +40 -0
  129. package/starter/package-lock.json +3512 -262
  130. package/starter/package.json +7 -2
  131. package/starter/register.mjs +6 -0
  132. package/starter/src/app-config/index.js +3 -0
  133. package/starter/src/app.js +10 -14
  134. package/starter/src/autoMap/addHandlers.js +3 -3
  135. package/starter/src/autoMap/getDependentFields.js +1 -1
  136. package/starter/src/autoMap/mapSchema.js +2 -2
  137. package/starter/src/bullMqBus.js +1 -1
  138. package/starter/src/bullMqWrapper.js +1 -1
  139. package/starter/src/db.js +12 -11
  140. package/starter/src/helpers/esm.js +56 -0
  141. package/starter/src/helpers/getMiddlewares.js +3 -0
  142. package/starter/src/helpers/getResourceEndpoints.js +3 -0
  143. package/starter/src/helpers/getResources.js +3 -0
  144. package/starter/src/helpers/getSchemas.js +3 -0
  145. package/starter/src/helpers/importHandlers.js +11 -20
  146. package/starter/src/ioEmitter.js +1 -1
  147. package/starter/src/logger.js +1 -1
  148. package/starter/src/middlewares/attachUser.js +2 -2
  149. package/starter/src/middlewares/global/tryToAttachUser.js +1 -1
  150. package/starter/src/middlewares/shouldExist.js +1 -1
  151. package/starter/src/middlewares/shouldNotExist.js +1 -1
  152. package/starter/src/migrations/migration.service.js +4 -1
  153. package/starter/src/migrations/migrations-log/migration-log.schema.js +1 -1
  154. package/starter/src/migrations/migrations-log/migration-log.service.js +1 -1
  155. package/starter/src/migrations/migrations.schema.js +1 -1
  156. package/starter/src/migrations/migrator.js +1 -1
  157. package/starter/src/migrator.js +2 -3
  158. package/starter/src/resources/schemaMappings/schemaMappings.schema.js +1 -1
  159. package/starter/src/resources/tokens/methods/setToken.js +1 -1
  160. package/starter/src/resources/tokens/methods/storeToken.js +2 -2
  161. package/starter/src/resources/tokens/tokens.schema.js +1 -1
  162. package/starter/src/resources/users/endpoints/getCurrentUser.js +1 -1
  163. package/starter/src/resources/users/endpoints/getUserProfile.js +1 -1
  164. package/starter/src/resources/users/methods/ensureUserCreated.js +1 -1
  165. package/starter/src/resources/users/users.schema.js +1 -1
  166. package/starter/src/routes/index.js +8 -8
  167. package/starter/src/routes/middlewares/routeErrorHandler.js +1 -1
  168. package/starter/src/scheduler.js +10 -7
  169. package/starter/src/services/emailService.js +1 -1
  170. package/starter/src/services/setCookie.js +2 -2
  171. package/starter/src/socketIo.js +3 -3
  172. package/test-app/.cursor/commands/add-endpoint.md +262 -0
  173. package/test-app/.cursor/commands/add-handler.md +137 -0
  174. package/test-app/.cursor/commands/add-middleware.md +95 -0
  175. package/test-app/.cursor/commands/add-resource.md +71 -0
  176. package/test-app/.cursor/commands/add-scheduler.md +138 -0
  177. package/test-app/.cursor/commands/add-service.md +188 -0
  178. package/test-app/.cursor/skills/hive-auth/SKILL.md +134 -0
  179. package/test-app/.cursor/skills/hive-database/SKILL.md +103 -0
  180. package/test-app/.cursor/skills/hive-endpoint/SKILL.md +103 -0
  181. package/test-app/.cursor/skills/hive-handler/SKILL.md +88 -0
  182. package/test-app/.cursor/skills/hive-mapping/SKILL.md +85 -0
  183. package/test-app/.cursor/skills/hive-middleware/SKILL.md +104 -0
  184. package/test-app/.cursor/skills/hive-overview/SKILL.md +50 -0
  185. package/test-app/.cursor/skills/hive-scheduler/SKILL.md +94 -0
  186. package/test-app/.cursor/skills/hive-schema/SKILL.md +73 -0
  187. package/test-app/.cursor/skills/hive-service/SKILL.md +90 -0
  188. package/test-app/package-lock.json +462 -0
  189. package/test-app/package.json +21 -0
package/cli/hive.js CHANGED
@@ -7,9 +7,36 @@ const inquirer = require('inquirer');
7
7
  const mergeDirs = require('./helpers/mergeDirs');
8
8
  const execCommand = require('./helpers/execCommand');
9
9
  const downloadDirectory = require('./helpers/downloadDirectory');
10
+ const { isDockerInstalled, startMongo, startRedis } = require('./helpers/docker');
11
+ const { ensureEnvConfig, hashCode } = require('./helpers/envCheck');
12
+ const { findAvailablePort } = require('./helpers/findPort');
10
13
  const axios = require('axios');
11
- const tsx = require('tsx/cjs/api');
12
14
  const fs = require('fs');
15
+ const { spawn } = require('child_process');
16
+
17
+ const hivePackage = require('../package.json');
18
+
19
+ let appPackage = {
20
+ "name": "my-hive-app",
21
+ "version": "1.0.0",
22
+ "description": "Hive App",
23
+ "main": "src/app.js",
24
+ "scripts": {
25
+ "prepare": "hive prepare ./src",
26
+ "dev": "hive prepare ./src && HIVE_SRC=$PWD/src npm -C .hive run dev",
27
+ "start": "hive prepare ./src && HIVE_SRC=$PWD/src npm -C .hive run start",
28
+ "deploy-local": "hive build-local && hive deploy"
29
+ },
30
+ "keywords": [],
31
+ "author": "",
32
+ "license": "ISC",
33
+ "dependencies": {
34
+ "@paralect/hive": hivePackage.version,
35
+ },
36
+ "devDependencies": {
37
+ "nodemon": "^3.1.4"
38
+ }
39
+ }
13
40
 
14
41
  program
15
42
  .command('init [projectName]')
@@ -43,23 +70,22 @@ program
43
70
  path.join(projectDir, 'package.json'),
44
71
  JSON.stringify({
45
72
  name,
46
- version: '1.0.0',
47
- scripts: {
48
- dev: 'hive run ./src',
49
- start: 'hive run ./src'
50
- },
51
- dependencies: {}
73
+ ...appPackage
74
+
52
75
  }, null, 2)
53
76
  );
54
77
 
78
+ const redisDb = hashCode(name) % 16;
79
+ const appConfigDir = path.join(projectDir, 'src', 'app-config');
80
+ await execCommand(`mkdir -p ${appConfigDir}`);
55
81
  fs.writeFileSync(
56
- path.join(projectDir, '.env'),
57
- `MONGO_URI=mongodb://localhost:27017/${name}\nPORT=3001\nNODE_ENV=development\n`
82
+ path.join(appConfigDir, '.env'),
83
+ `MONGODB_URI=mongodb://localhost:27027/${name}\nREDIS_URI=redis://localhost:6389/${redisDb}\nPORT=3001\nNODE_ENV=development\n`
58
84
  );
59
85
 
60
86
  fs.writeFileSync(
61
87
  path.join(projectDir, '.gitignore'),
62
- `node_modules\n.hive\n.env\n`
88
+ `node_modules\n.hive\n.env\nsrc/app-config/.env\n`
63
89
  );
64
90
 
65
91
  await execCommand(`cp -r ${path.resolve(__dirname, '..')}/starter/.cursor ${projectDir}/`);
@@ -76,18 +102,62 @@ program
76
102
  }
77
103
  });
78
104
 
105
+ program
106
+ .command('infra-docker')
107
+ .description('Start shared MongoDB and Redis containers for local development')
108
+ .action(async () => {
109
+ try {
110
+ if (!isDockerInstalled()) {
111
+ console.error('Docker is not installed or not running. Please install Docker first.');
112
+ process.exit(1);
113
+ }
114
+
115
+ console.log('\nStarting Hive infrastructure...\n');
116
+
117
+ await startMongo();
118
+ await startRedis();
119
+
120
+ console.log('\n✅ Infrastructure ready!\n');
121
+ console.log('Connection URIs:');
122
+ console.log(' MongoDB: mongodb://localhost:27027/<your-db-name>');
123
+ console.log(' Redis: redis://localhost:6389/<db-number>\n');
124
+ console.log('These containers are shared across all Hive projects.');
125
+ console.log('Each project uses a unique database name for isolation.\n');
126
+ } catch (error) {
127
+ console.error('An error occurred:', error.message);
128
+ }
129
+ });
130
+
79
131
  program
80
132
  .command('run [dirPath]')
81
133
  .description('Run Hive server')
82
134
  .action(async (dirPath = '.') => {
83
135
  try {
84
- process.env.HIVE_SRC = path.resolve(process.cwd(), dirPath);
136
+ const hiveSrc = path.resolve(process.cwd(), dirPath);
137
+ const projectDir = path.resolve(hiveSrc, '..');
138
+ const hiveProjectDir = path.resolve(projectDir, '.hive');
139
+
140
+ // Ensure env config exists in hive_src/app-config/.env
141
+ await ensureEnvConfig(hiveSrc);
142
+
143
+ // Find available port
144
+ const defaultPort = parseInt(process.env.PORT) || 3001;
145
+ const port = await findAvailablePort(defaultPort);
146
+ if (port !== defaultPort) {
147
+ console.log(` Port ${defaultPort} in use, using ${port} instead\n`);
148
+ }
85
149
 
86
- const hiveProjectDir = path.resolve(process.env.HIVE_SRC, `../.hive`);
87
150
  await execCommand(`mkdir -p ${hiveProjectDir}`);
88
- await execCommand(`cp -r ${path.resolve(__dirname, '..')}/starter/ ${hiveProjectDir}`);
151
+ await execCommand(`rsync -a --exclude node_modules ${path.resolve(__dirname, '..')}/starter/ ${hiveProjectDir}/`);
152
+
153
+ const child = spawn('npx', ['tsx', '--watch', '--import', './register.mjs', 'src/app.js'], {
154
+ cwd: hiveProjectDir,
155
+ stdio: 'inherit',
156
+ env: { ...process.env, HIVE_SRC: hiveSrc, PORT: String(port) }
157
+ });
89
158
 
90
- tsx.require(`${hiveProjectDir}/src/app.js`, __filename); // TSX doesn't work inside node_moduels
159
+ child.on('error', (err) => console.error('Failed to start:', err.message));
160
+ child.on('close', (code) => process.exit(code));
91
161
  } catch (error) {
92
162
  console.error('An error occurred:', error.message);
93
163
  }
@@ -98,11 +168,15 @@ program
98
168
  .description('Prepare Hive server')
99
169
  .action(async (dirPath = '.') => {
100
170
  try {
101
- process.env.HIVE_SRC = path.resolve(process.cwd(), dirPath);
102
- const hiveProjectDir = path.resolve(process.env.HIVE_SRC, `../.hive`);
171
+ const hiveSrc = path.resolve(process.cwd(), dirPath);
172
+ const projectDir = path.resolve(hiveSrc, '..');
173
+ const hiveProjectDir = path.resolve(projectDir, '.hive');
174
+
175
+ // Ensure env config exists in hive_src/app-config/.env
176
+ await ensureEnvConfig(hiveSrc);
103
177
 
104
178
  await execCommand(`mkdir -p ${hiveProjectDir}`);
105
- await execCommand(`cp -r ${path.resolve(__dirname, '..')}/starter/. ${hiveProjectDir}`);
179
+ await execCommand(`rsync -a --exclude node_modules ${path.resolve(__dirname, '..')}/starter/ ${hiveProjectDir}/`);
106
180
  } catch (error) {
107
181
  console.error('An error occurred:', error.message);
108
182
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paralect/hive",
3
- "version": "0.1.49",
3
+ "version": "0.1.50-alpha.2",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -0,0 +1,40 @@
1
+ import { resolve as resolvePath } from 'path';
2
+ import { pathToFileURL } from 'url';
3
+ import { existsSync, statSync } from 'fs';
4
+
5
+ function resolveFilePath(basePath) {
6
+ // If path exists as-is and is a file, use it
7
+ if (existsSync(basePath) && statSync(basePath).isFile()) {
8
+ return basePath;
9
+ }
10
+
11
+ // If path is a directory, try index.js
12
+ if (existsSync(basePath) && statSync(basePath).isDirectory()) {
13
+ const indexPath = resolvePath(basePath, 'index.js');
14
+ if (existsSync(indexPath)) {
15
+ return indexPath;
16
+ }
17
+ }
18
+
19
+ // Try adding .js extension
20
+ const withJs = basePath + '.js';
21
+ if (existsSync(withJs)) {
22
+ return withJs;
23
+ }
24
+
25
+ // Fallback to original path (will error if not found)
26
+ return basePath;
27
+ }
28
+
29
+ export function resolve(specifier, context, nextResolve) {
30
+ // #root/... → HIVE_SRC/... (user code)
31
+ // Note: #hive/... is handled by package.json imports field
32
+ if (specifier.startsWith('#root/')) {
33
+ const relativePath = specifier.slice(6); // remove '#root/'
34
+ const basePath = resolvePath(process.env.HIVE_SRC, relativePath);
35
+ const absolutePath = resolveFilePath(basePath);
36
+ return { url: pathToFileURL(absolutePath).href, shortCircuit: true };
37
+ }
38
+
39
+ return nextResolve(specifier, context);
40
+ }