@bloomneo/appkit 1.2.9

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 (262) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +902 -0
  3. package/bin/appkit.js +71 -0
  4. package/bin/commands/generate.js +1050 -0
  5. package/bin/templates/backend/README.md.template +39 -0
  6. package/bin/templates/backend/api.http.template +0 -0
  7. package/bin/templates/backend/docs/APPKIT_CLI.md +507 -0
  8. package/bin/templates/backend/docs/APPKIT_COMMENTS_GUIDELINES.md +61 -0
  9. package/bin/templates/backend/docs/APPKIT_LLM_GUIDE.md +2539 -0
  10. package/bin/templates/backend/package.json.template +34 -0
  11. package/bin/templates/backend/src/api/features/welcome/welcome.http.template +29 -0
  12. package/bin/templates/backend/src/api/features/welcome/welcome.route.ts.template +36 -0
  13. package/bin/templates/backend/src/api/features/welcome/welcome.service.ts.template +88 -0
  14. package/bin/templates/backend/src/api/features/welcome/welcome.types.ts.template +18 -0
  15. package/bin/templates/backend/src/api/lib/api-router.ts.template +84 -0
  16. package/bin/templates/backend/src/api/server.ts.template +188 -0
  17. package/bin/templates/backend/tsconfig.api.json.template +24 -0
  18. package/bin/templates/backend/tsconfig.json.template +40 -0
  19. package/bin/templates/feature/feature.http.template +63 -0
  20. package/bin/templates/feature/feature.route.ts.template +36 -0
  21. package/bin/templates/feature/feature.service.ts.template +81 -0
  22. package/bin/templates/feature/feature.types.ts.template +23 -0
  23. package/bin/templates/feature-db/feature.http.template +63 -0
  24. package/bin/templates/feature-db/feature.model.ts.template +74 -0
  25. package/bin/templates/feature-db/feature.route.ts.template +58 -0
  26. package/bin/templates/feature-db/feature.service.ts.template +231 -0
  27. package/bin/templates/feature-db/feature.types.ts.template +25 -0
  28. package/bin/templates/feature-db/schema-addition.prisma.template +9 -0
  29. package/bin/templates/feature-db/seeding/README.md.template +57 -0
  30. package/bin/templates/feature-db/seeding/feature.seed.js.template +67 -0
  31. package/bin/templates/feature-user/schema-addition.prisma.template +19 -0
  32. package/bin/templates/feature-user/user.http.template +157 -0
  33. package/bin/templates/feature-user/user.model.ts.template +244 -0
  34. package/bin/templates/feature-user/user.route.ts.template +379 -0
  35. package/bin/templates/feature-user/user.seed.js.template +182 -0
  36. package/bin/templates/feature-user/user.service.ts.template +426 -0
  37. package/bin/templates/feature-user/user.types.ts.template +127 -0
  38. package/dist/auth/auth.d.ts +182 -0
  39. package/dist/auth/auth.d.ts.map +1 -0
  40. package/dist/auth/auth.js +477 -0
  41. package/dist/auth/auth.js.map +1 -0
  42. package/dist/auth/defaults.d.ts +104 -0
  43. package/dist/auth/defaults.d.ts.map +1 -0
  44. package/dist/auth/defaults.js +374 -0
  45. package/dist/auth/defaults.js.map +1 -0
  46. package/dist/auth/index.d.ts +70 -0
  47. package/dist/auth/index.d.ts.map +1 -0
  48. package/dist/auth/index.js +94 -0
  49. package/dist/auth/index.js.map +1 -0
  50. package/dist/cache/cache.d.ts +118 -0
  51. package/dist/cache/cache.d.ts.map +1 -0
  52. package/dist/cache/cache.js +249 -0
  53. package/dist/cache/cache.js.map +1 -0
  54. package/dist/cache/defaults.d.ts +63 -0
  55. package/dist/cache/defaults.d.ts.map +1 -0
  56. package/dist/cache/defaults.js +193 -0
  57. package/dist/cache/defaults.js.map +1 -0
  58. package/dist/cache/index.d.ts +101 -0
  59. package/dist/cache/index.d.ts.map +1 -0
  60. package/dist/cache/index.js +203 -0
  61. package/dist/cache/index.js.map +1 -0
  62. package/dist/cache/strategies/memory.d.ts +138 -0
  63. package/dist/cache/strategies/memory.d.ts.map +1 -0
  64. package/dist/cache/strategies/memory.js +348 -0
  65. package/dist/cache/strategies/memory.js.map +1 -0
  66. package/dist/cache/strategies/redis.d.ts +105 -0
  67. package/dist/cache/strategies/redis.d.ts.map +1 -0
  68. package/dist/cache/strategies/redis.js +318 -0
  69. package/dist/cache/strategies/redis.js.map +1 -0
  70. package/dist/config/config.d.ts +62 -0
  71. package/dist/config/config.d.ts.map +1 -0
  72. package/dist/config/config.js +107 -0
  73. package/dist/config/config.js.map +1 -0
  74. package/dist/config/defaults.d.ts +44 -0
  75. package/dist/config/defaults.d.ts.map +1 -0
  76. package/dist/config/defaults.js +217 -0
  77. package/dist/config/defaults.js.map +1 -0
  78. package/dist/config/index.d.ts +105 -0
  79. package/dist/config/index.d.ts.map +1 -0
  80. package/dist/config/index.js +163 -0
  81. package/dist/config/index.js.map +1 -0
  82. package/dist/database/adapters/mongoose.d.ts +106 -0
  83. package/dist/database/adapters/mongoose.d.ts.map +1 -0
  84. package/dist/database/adapters/mongoose.js +480 -0
  85. package/dist/database/adapters/mongoose.js.map +1 -0
  86. package/dist/database/adapters/prisma.d.ts +106 -0
  87. package/dist/database/adapters/prisma.d.ts.map +1 -0
  88. package/dist/database/adapters/prisma.js +494 -0
  89. package/dist/database/adapters/prisma.js.map +1 -0
  90. package/dist/database/defaults.d.ts +87 -0
  91. package/dist/database/defaults.d.ts.map +1 -0
  92. package/dist/database/defaults.js +271 -0
  93. package/dist/database/defaults.js.map +1 -0
  94. package/dist/database/index.d.ts +137 -0
  95. package/dist/database/index.d.ts.map +1 -0
  96. package/dist/database/index.js +490 -0
  97. package/dist/database/index.js.map +1 -0
  98. package/dist/email/defaults.d.ts +100 -0
  99. package/dist/email/defaults.d.ts.map +1 -0
  100. package/dist/email/defaults.js +400 -0
  101. package/dist/email/defaults.js.map +1 -0
  102. package/dist/email/email.d.ts +139 -0
  103. package/dist/email/email.d.ts.map +1 -0
  104. package/dist/email/email.js +316 -0
  105. package/dist/email/email.js.map +1 -0
  106. package/dist/email/index.d.ts +176 -0
  107. package/dist/email/index.d.ts.map +1 -0
  108. package/dist/email/index.js +251 -0
  109. package/dist/email/index.js.map +1 -0
  110. package/dist/email/strategies/console.d.ts +90 -0
  111. package/dist/email/strategies/console.d.ts.map +1 -0
  112. package/dist/email/strategies/console.js +268 -0
  113. package/dist/email/strategies/console.js.map +1 -0
  114. package/dist/email/strategies/resend.d.ts +84 -0
  115. package/dist/email/strategies/resend.d.ts.map +1 -0
  116. package/dist/email/strategies/resend.js +266 -0
  117. package/dist/email/strategies/resend.js.map +1 -0
  118. package/dist/email/strategies/smtp.d.ts +77 -0
  119. package/dist/email/strategies/smtp.d.ts.map +1 -0
  120. package/dist/email/strategies/smtp.js +286 -0
  121. package/dist/email/strategies/smtp.js.map +1 -0
  122. package/dist/error/defaults.d.ts +40 -0
  123. package/dist/error/defaults.d.ts.map +1 -0
  124. package/dist/error/defaults.js +75 -0
  125. package/dist/error/defaults.js.map +1 -0
  126. package/dist/error/error.d.ts +140 -0
  127. package/dist/error/error.d.ts.map +1 -0
  128. package/dist/error/error.js +200 -0
  129. package/dist/error/error.js.map +1 -0
  130. package/dist/error/index.d.ts +145 -0
  131. package/dist/error/index.d.ts.map +1 -0
  132. package/dist/error/index.js +145 -0
  133. package/dist/error/index.js.map +1 -0
  134. package/dist/event/defaults.d.ts +111 -0
  135. package/dist/event/defaults.d.ts.map +1 -0
  136. package/dist/event/defaults.js +378 -0
  137. package/dist/event/defaults.js.map +1 -0
  138. package/dist/event/event.d.ts +171 -0
  139. package/dist/event/event.d.ts.map +1 -0
  140. package/dist/event/event.js +391 -0
  141. package/dist/event/event.js.map +1 -0
  142. package/dist/event/index.d.ts +173 -0
  143. package/dist/event/index.d.ts.map +1 -0
  144. package/dist/event/index.js +302 -0
  145. package/dist/event/index.js.map +1 -0
  146. package/dist/event/strategies/memory.d.ts +122 -0
  147. package/dist/event/strategies/memory.d.ts.map +1 -0
  148. package/dist/event/strategies/memory.js +331 -0
  149. package/dist/event/strategies/memory.js.map +1 -0
  150. package/dist/event/strategies/redis.d.ts +115 -0
  151. package/dist/event/strategies/redis.d.ts.map +1 -0
  152. package/dist/event/strategies/redis.js +434 -0
  153. package/dist/event/strategies/redis.js.map +1 -0
  154. package/dist/index.d.ts +58 -0
  155. package/dist/index.d.ts.map +1 -0
  156. package/dist/index.js +72 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/logger/defaults.d.ts +67 -0
  159. package/dist/logger/defaults.d.ts.map +1 -0
  160. package/dist/logger/defaults.js +213 -0
  161. package/dist/logger/defaults.js.map +1 -0
  162. package/dist/logger/index.d.ts +84 -0
  163. package/dist/logger/index.d.ts.map +1 -0
  164. package/dist/logger/index.js +101 -0
  165. package/dist/logger/index.js.map +1 -0
  166. package/dist/logger/logger.d.ts +165 -0
  167. package/dist/logger/logger.d.ts.map +1 -0
  168. package/dist/logger/logger.js +843 -0
  169. package/dist/logger/logger.js.map +1 -0
  170. package/dist/logger/transports/console.d.ts +102 -0
  171. package/dist/logger/transports/console.d.ts.map +1 -0
  172. package/dist/logger/transports/console.js +276 -0
  173. package/dist/logger/transports/console.js.map +1 -0
  174. package/dist/logger/transports/database.d.ts +153 -0
  175. package/dist/logger/transports/database.d.ts.map +1 -0
  176. package/dist/logger/transports/database.js +539 -0
  177. package/dist/logger/transports/database.js.map +1 -0
  178. package/dist/logger/transports/file.d.ts +146 -0
  179. package/dist/logger/transports/file.d.ts.map +1 -0
  180. package/dist/logger/transports/file.js +464 -0
  181. package/dist/logger/transports/file.js.map +1 -0
  182. package/dist/logger/transports/http.d.ts +128 -0
  183. package/dist/logger/transports/http.d.ts.map +1 -0
  184. package/dist/logger/transports/http.js +401 -0
  185. package/dist/logger/transports/http.js.map +1 -0
  186. package/dist/logger/transports/webhook.d.ts +152 -0
  187. package/dist/logger/transports/webhook.d.ts.map +1 -0
  188. package/dist/logger/transports/webhook.js +485 -0
  189. package/dist/logger/transports/webhook.js.map +1 -0
  190. package/dist/queue/defaults.d.ts +66 -0
  191. package/dist/queue/defaults.d.ts.map +1 -0
  192. package/dist/queue/defaults.js +205 -0
  193. package/dist/queue/defaults.js.map +1 -0
  194. package/dist/queue/index.d.ts +124 -0
  195. package/dist/queue/index.d.ts.map +1 -0
  196. package/dist/queue/index.js +116 -0
  197. package/dist/queue/index.js.map +1 -0
  198. package/dist/queue/queue.d.ts +156 -0
  199. package/dist/queue/queue.d.ts.map +1 -0
  200. package/dist/queue/queue.js +387 -0
  201. package/dist/queue/queue.js.map +1 -0
  202. package/dist/queue/transports/database.d.ts +165 -0
  203. package/dist/queue/transports/database.d.ts.map +1 -0
  204. package/dist/queue/transports/database.js +595 -0
  205. package/dist/queue/transports/database.js.map +1 -0
  206. package/dist/queue/transports/memory.d.ts +143 -0
  207. package/dist/queue/transports/memory.d.ts.map +1 -0
  208. package/dist/queue/transports/memory.js +415 -0
  209. package/dist/queue/transports/memory.js.map +1 -0
  210. package/dist/queue/transports/redis.d.ts +203 -0
  211. package/dist/queue/transports/redis.d.ts.map +1 -0
  212. package/dist/queue/transports/redis.js +744 -0
  213. package/dist/queue/transports/redis.js.map +1 -0
  214. package/dist/security/defaults.d.ts +64 -0
  215. package/dist/security/defaults.d.ts.map +1 -0
  216. package/dist/security/defaults.js +159 -0
  217. package/dist/security/defaults.js.map +1 -0
  218. package/dist/security/index.d.ts +110 -0
  219. package/dist/security/index.d.ts.map +1 -0
  220. package/dist/security/index.js +160 -0
  221. package/dist/security/index.js.map +1 -0
  222. package/dist/security/security.d.ts +138 -0
  223. package/dist/security/security.d.ts.map +1 -0
  224. package/dist/security/security.js +419 -0
  225. package/dist/security/security.js.map +1 -0
  226. package/dist/storage/defaults.d.ts +79 -0
  227. package/dist/storage/defaults.d.ts.map +1 -0
  228. package/dist/storage/defaults.js +358 -0
  229. package/dist/storage/defaults.js.map +1 -0
  230. package/dist/storage/index.d.ts +153 -0
  231. package/dist/storage/index.d.ts.map +1 -0
  232. package/dist/storage/index.js +242 -0
  233. package/dist/storage/index.js.map +1 -0
  234. package/dist/storage/storage.d.ts +151 -0
  235. package/dist/storage/storage.d.ts.map +1 -0
  236. package/dist/storage/storage.js +439 -0
  237. package/dist/storage/storage.js.map +1 -0
  238. package/dist/storage/strategies/local.d.ts +117 -0
  239. package/dist/storage/strategies/local.d.ts.map +1 -0
  240. package/dist/storage/strategies/local.js +368 -0
  241. package/dist/storage/strategies/local.js.map +1 -0
  242. package/dist/storage/strategies/r2.d.ts +130 -0
  243. package/dist/storage/strategies/r2.d.ts.map +1 -0
  244. package/dist/storage/strategies/r2.js +470 -0
  245. package/dist/storage/strategies/r2.js.map +1 -0
  246. package/dist/storage/strategies/s3.d.ts +121 -0
  247. package/dist/storage/strategies/s3.d.ts.map +1 -0
  248. package/dist/storage/strategies/s3.js +461 -0
  249. package/dist/storage/strategies/s3.js.map +1 -0
  250. package/dist/util/defaults.d.ts +77 -0
  251. package/dist/util/defaults.d.ts.map +1 -0
  252. package/dist/util/defaults.js +193 -0
  253. package/dist/util/defaults.js.map +1 -0
  254. package/dist/util/index.d.ts +97 -0
  255. package/dist/util/index.d.ts.map +1 -0
  256. package/dist/util/index.js +165 -0
  257. package/dist/util/index.js.map +1 -0
  258. package/dist/util/util.d.ts +145 -0
  259. package/dist/util/util.d.ts.map +1 -0
  260. package/dist/util/util.js +481 -0
  261. package/dist/util/util.js.map +1 -0
  262. package/package.json +234 -0
@@ -0,0 +1,271 @@
1
+ /**
2
+ * Simplified defaults and validation for AppKit Database
3
+ * Environment-driven configuration with smart detection
4
+ *
5
+ * Required Environment Variables:
6
+ * - DATABASE_URL: Database connection string
7
+ *
8
+ * Optional Environment Variables:
9
+ * - VOILA_DB_TENANT: Enable tenant mode (auto/true/false)
10
+ * - ORG_{NAME}: Organization-specific database URLs
11
+ *
12
+ * @module @bloomneo/appkit/database
13
+ * @file src/database/defaults.js
14
+ *
15
+ * @llm-rule WHEN: App startup - need to validate database environment configuration
16
+ * @llm-rule AVOID: Calling multiple times - expensive validation, use once at startup
17
+ * @llm-rule NOTE: All tenant tables MUST have tenant_id text field (nullable)
18
+ */
19
+ export function validateTenantId(tenantId) {
20
+ return typeof tenantId === 'string' && /^[a-zA-Z0-9_-]+$/.test(tenantId) && tenantId.length <= 63;
21
+ }
22
+ export function validateOrgId(orgId) {
23
+ return typeof orgId === 'string' && /^[a-zA-Z0-9_-]+$/.test(orgId) && orgId.length <= 63;
24
+ }
25
+ export function validateDatabaseUrl(url) {
26
+ if (!url || typeof url !== 'string')
27
+ return false;
28
+ if (!url.includes('://'))
29
+ return false;
30
+ if (url.includes('..') || url.includes('<') || url.includes('>'))
31
+ return false;
32
+ return [
33
+ 'postgresql://', 'postgres://', 'mysql://',
34
+ 'mongodb://', 'mongodb+srv://', 'sqlite://'
35
+ ].some(protocol => url.startsWith(protocol));
36
+ }
37
+ class DatabaseError extends Error {
38
+ statusCode;
39
+ details; // or use a more specific type like `Record<string, any>`
40
+ constructor(message, statusCode = 500, details = null) {
41
+ super(message);
42
+ this.name = 'DatabaseError';
43
+ this.statusCode = statusCode;
44
+ this.details = details;
45
+ if (Error.captureStackTrace) {
46
+ Error.captureStackTrace(this, DatabaseError);
47
+ }
48
+ }
49
+ }
50
+ export function createDatabaseError(message, statusCode = 500, details = null) {
51
+ return new DatabaseError(message, statusCode, details);
52
+ }
53
+ export function detectProvider(url) {
54
+ if (!url)
55
+ return 'unknown';
56
+ if (url.includes('postgresql://') || url.includes('postgres://'))
57
+ return 'postgresql';
58
+ if (url.includes('mysql://'))
59
+ return 'mysql';
60
+ if (url.includes('mongodb://') || url.includes('mongodb+srv://'))
61
+ return 'mongodb';
62
+ if (url.includes('sqlite://'))
63
+ return 'sqlite';
64
+ return 'unknown';
65
+ }
66
+ export function detectAdapter(url) {
67
+ const provider = detectProvider(url);
68
+ if (provider === 'mongodb')
69
+ return 'mongoose';
70
+ return 'prisma';
71
+ }
72
+ export function sanitizeDatabaseName(name) {
73
+ if (!name || typeof name !== 'string') {
74
+ throw createDatabaseError('Database name must be a non-empty string', 400);
75
+ }
76
+ return name.toLowerCase().replace(/[^a-z0-9_-]/g, '_');
77
+ }
78
+ export function getOrgEnvironmentVars() {
79
+ const orgVars = {};
80
+ Object.keys(process.env).forEach(key => {
81
+ if (key.startsWith('ORG_') && key !== 'ORG_') {
82
+ const orgId = key.replace('ORG_', '').toLowerCase();
83
+ const url = process.env[key];
84
+ if (url && validateDatabaseUrl(url)) {
85
+ orgVars[orgId] = url;
86
+ }
87
+ else {
88
+ console.warn(`Invalid database URL for organization '${orgId}': ${url}`);
89
+ }
90
+ }
91
+ });
92
+ return orgVars;
93
+ }
94
+ export function validateEnvironment() {
95
+ const errors = [];
96
+ const warnings = [];
97
+ const config = {
98
+ valid: true,
99
+ errors,
100
+ warnings,
101
+ hasDatabase: false,
102
+ hasTenants: false,
103
+ hasOrgs: false,
104
+ orgCount: 0,
105
+ };
106
+ const databaseUrl = process.env.DATABASE_URL;
107
+ if (!databaseUrl) {
108
+ errors.push('DATABASE_URL environment variable is required');
109
+ }
110
+ else if (!validateDatabaseUrl(databaseUrl)) {
111
+ errors.push(`Invalid DATABASE_URL format: ${databaseUrl}`);
112
+ }
113
+ else {
114
+ config.hasDatabase = true;
115
+ }
116
+ const tenantMode = process.env.VOILA_DB_TENANT;
117
+ if (tenantMode) {
118
+ const mode = tenantMode.toLowerCase();
119
+ if (['true', 'auto'].includes(mode)) {
120
+ config.hasTenants = true;
121
+ }
122
+ else if (mode !== 'false') {
123
+ warnings.push(`Unknown VOILA_DB_TENANT value: ${tenantMode}. Use 'auto', 'true', or 'false'`);
124
+ }
125
+ }
126
+ const orgVars = getOrgEnvironmentVars();
127
+ config.orgCount = Object.keys(orgVars).length;
128
+ config.hasOrgs = config.orgCount > 0;
129
+ Object.keys(orgVars).forEach(orgId => {
130
+ if (!validateOrgId(orgId)) {
131
+ warnings.push(`Invalid organization ID format: ${orgId}`);
132
+ }
133
+ });
134
+ const nodeEnv = process.env.NODE_ENV;
135
+ if (!nodeEnv) {
136
+ warnings.push('NODE_ENV not set. Defaulting to development mode');
137
+ }
138
+ else if (!['development', 'production', 'test'].includes(nodeEnv)) {
139
+ warnings.push(`Unusual NODE_ENV value: ${nodeEnv}`);
140
+ }
141
+ if (config.hasTenants && !config.hasDatabase) {
142
+ errors.push('Tenant mode enabled but no valid DATABASE_URL found');
143
+ }
144
+ if (config.hasOrgs && config.orgCount > 10) {
145
+ warnings.push(`Large number of organizations configured (${config.orgCount}). Consider using dynamic URL resolution`);
146
+ }
147
+ config.valid = errors.length === 0;
148
+ return config;
149
+ }
150
+ export function getSmartDefaults() {
151
+ const isDevelopment = process.env.NODE_ENV === 'development';
152
+ const isProduction = process.env.NODE_ENV === 'production';
153
+ const validation = validateEnvironment();
154
+ if (isDevelopment && validation.warnings.length > 0) {
155
+ console.warn('⚠️ [AppKit] Database configuration warnings:');
156
+ validation.warnings.forEach((w) => console.warn(` ${w}`));
157
+ }
158
+ if (!validation.valid) {
159
+ throw createDatabaseError(`Database configuration errors:\n${validation.errors.join('\n')}`, 500, { validation });
160
+ }
161
+ return {
162
+ database: {
163
+ url: process.env.DATABASE_URL || '',
164
+ provider: detectProvider(process.env.DATABASE_URL || ''),
165
+ adapter: detectAdapter(process.env.DATABASE_URL || ''),
166
+ },
167
+ tenant: {
168
+ enabled: validation.hasTenants,
169
+ mode: process.env.VOILA_DB_TENANT?.toLowerCase() || 'false',
170
+ fieldName: 'tenant_id',
171
+ },
172
+ org: {
173
+ enabled: validation.hasOrgs,
174
+ count: validation.orgCount,
175
+ urls: getOrgEnvironmentVars(),
176
+ },
177
+ environment: {
178
+ isDevelopment,
179
+ isProduction,
180
+ nodeEnv: process.env.NODE_ENV || 'development',
181
+ },
182
+ validation,
183
+ };
184
+ }
185
+ export async function validateSchema(client, requiredField = 'tenant_id') {
186
+ if (process.env.NODE_ENV !== 'development')
187
+ return { valid: true, warnings: [] };
188
+ const warnings = [];
189
+ try {
190
+ if (client.$queryRaw) {
191
+ const models = Object.keys(client).filter(key => typeof client[key] === 'object' && typeof client[key].findFirst === 'function');
192
+ for (const model of models) {
193
+ try {
194
+ await client[model].findFirst({ where: { [requiredField]: null }, take: 1 });
195
+ }
196
+ catch (e) {
197
+ if (e.message.includes(requiredField)) {
198
+ warnings.push(`Prisma model '${model}' missing field '${requiredField}'`);
199
+ }
200
+ }
201
+ }
202
+ }
203
+ else if (client.models) {
204
+ const models = Object.keys(client.models);
205
+ for (const modelName of models) {
206
+ const model = client.models[modelName];
207
+ if (!model.schema.paths[requiredField]) {
208
+ warnings.push(`Mongoose model '${modelName}' missing field '${requiredField}'`);
209
+ }
210
+ }
211
+ }
212
+ return { valid: warnings.length === 0, warnings };
213
+ }
214
+ catch (error) {
215
+ return { valid: false, warnings: [`Schema validation failed: ${error.message}`] };
216
+ }
217
+ }
218
+ export function formatBytes(bytes) {
219
+ if (bytes === 0)
220
+ return '0 B';
221
+ const k = 1024;
222
+ const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
223
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
224
+ return `${parseFloat((bytes / Math.pow(k, i)).toFixed(2))} ${sizes[i]}`;
225
+ }
226
+ export function maskUrl(url) {
227
+ if (!url || typeof url !== 'string')
228
+ return '[invalid-url]';
229
+ try {
230
+ return url.replace(/:\/\/[^@]*@/, '://***:***@');
231
+ }
232
+ catch {
233
+ return '[masked-url]';
234
+ }
235
+ }
236
+ export function getConfigSummary() {
237
+ const config = getSmartDefaults();
238
+ return {
239
+ database: {
240
+ provider: config.database.provider,
241
+ adapter: config.database.adapter,
242
+ url: maskUrl(config.database.url || ''),
243
+ },
244
+ tenant: {
245
+ enabled: config.tenant.enabled,
246
+ mode: config.tenant.mode,
247
+ },
248
+ org: {
249
+ enabled: config.org.enabled,
250
+ count: config.org.count,
251
+ organizations: Object.keys(config.org.urls),
252
+ },
253
+ environment: config.environment.nodeEnv,
254
+ validation: {
255
+ valid: config.validation.valid,
256
+ warningCount: config.validation.warnings.length,
257
+ errorCount: config.validation.errors.length,
258
+ },
259
+ };
260
+ }
261
+ let cachedValidation = null;
262
+ export function getCachedValidation() {
263
+ if (!cachedValidation) {
264
+ cachedValidation = validateEnvironment();
265
+ }
266
+ return cachedValidation;
267
+ }
268
+ export function clearValidationCache() {
269
+ cachedValidation = null;
270
+ }
271
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/database/defaults.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ /**
2
+ * Ultra-simple database API with org/tenant support and smart connection management
3
+ * @module @bloomneo/appkit/database
4
+ * @file src/database/index.ts
5
+ *
6
+ * @llm-rule WHEN: ALWAYS add tenant_id text field to ALL tables (nullable for future compatibility)
7
+ * @llm-rule NOTE: tenant_id = null (single tenant) or "team-1" (multi-tenant)
8
+ * @llm-rule VARIABLE: const db = await databaseClass.get() - user's data (single or tenant-filtered)
9
+ * @llm-rule VARIABLE: const dbTenants = await databaseClass.getTenants() - all tenants (admin access)
10
+ * @llm-rule VARIABLE: const {orgName}Db = await databaseClass.org('{orgName}').get() - org-specific data
11
+ * @llm-rule VARIABLE: const {orgName}DbTenants = await databaseClass.org('{orgName}').getTenants() - all tenants in org
12
+ */
13
+ interface DatabaseClient {
14
+ _appKit?: boolean;
15
+ _orgId?: string;
16
+ _tenantId?: string;
17
+ _url?: string;
18
+ [key: string]: any;
19
+ }
20
+ interface PrismaClient extends DatabaseClient {
21
+ $queryRaw?: any;
22
+ $disconnect: () => Promise<void>;
23
+ $connect: () => Promise<void>;
24
+ $use?: (middleware: any) => void;
25
+ }
26
+ interface MongooseConnection extends DatabaseClient {
27
+ db: any;
28
+ close: () => Promise<void>;
29
+ model: (name: string, schema?: any, collection?: string) => any;
30
+ models: Record<string, any>;
31
+ on: (event: string, callback: (...args: any[]) => void) => void;
32
+ }
33
+ type DatabaseClientUnion = PrismaClient | MongooseConnection;
34
+ /**
35
+ * Organization database builder
36
+ */
37
+ declare class OrgDatabase {
38
+ private orgId;
39
+ constructor(orgId: string);
40
+ /**
41
+ * Get organization database (tenant-filtered if tenant mode enabled)
42
+ */
43
+ get(req?: any): Promise<DatabaseClientUnion>;
44
+ /**
45
+ * Get all tenants in organization (admin access)
46
+ */
47
+ getTenants(req?: any): Promise<DatabaseClientUnion>;
48
+ }
49
+ /**
50
+ * Main database API - ultra-simple like auth module
51
+ */
52
+ export declare const databaseClass: {
53
+ /**
54
+ * Get database client - main function that handles all contexts
55
+ * @param {Object} [req] - Request object for context detection
56
+ * @returns {Promise<DatabaseClientUnion>} Database client
57
+ */
58
+ get(req?: any): Promise<DatabaseClientUnion>;
59
+ /**
60
+ * Get all tenants data (admin access - no tenant filtering)
61
+ * @param {Object} [req] - Request object for org context
62
+ * @returns {Promise<DatabaseClientUnion>} Database client with no tenant filtering
63
+ */
64
+ getTenants(req?: any): Promise<DatabaseClientUnion>;
65
+ /**
66
+ * Get organization-specific database
67
+ * @param {string} orgId - Organization ID
68
+ * @returns {OrgDatabase} Organization database instance
69
+ */
70
+ org(orgId: string): OrgDatabase;
71
+ /**
72
+ * Health check for database connections
73
+ * @returns {Promise<Object>} Health status
74
+ */
75
+ health(): Promise<any>;
76
+ /**
77
+ * List tenants in current context
78
+ * @param {Object} [req] - Request object for org context
79
+ * @returns {Promise<string[]>} Array of tenant IDs
80
+ */
81
+ list(req?: any): Promise<string[]>;
82
+ /**
83
+ * Check if tenant exists
84
+ * @param {string} tenantId - Tenant ID
85
+ * @param {Object} [req] - Request object for org context
86
+ * @returns {Promise<boolean>} Whether tenant exists
87
+ */
88
+ exists(tenantId: string, req?: any): Promise<boolean>;
89
+ /**
90
+ * Create tenant (registers tenant for future use)
91
+ * @param {string} tenantId - Tenant ID
92
+ * @param {Object} [req] - Request object for org context
93
+ * @returns {Promise<void>}
94
+ */
95
+ create(tenantId: string, req?: any): Promise<void>;
96
+ /**
97
+ * Delete all tenant data (requires confirmation)
98
+ * @param {string} tenantId - Tenant ID
99
+ * @param {Object} options - Options object
100
+ * @param {boolean} options.confirm - Confirmation flag (required)
101
+ * @param {Object} [req] - Request object for org context
102
+ * @returns {Promise<void>}
103
+ */
104
+ delete(tenantId: string, options: any, req?: any): Promise<void>;
105
+ /**
106
+ * Disconnect all connections and cleanup
107
+ * @returns {Promise<void>}
108
+ */
109
+ disconnect(): Promise<void>;
110
+ /**
111
+ * Get distinct tenant IDs from database
112
+ * @private
113
+ */
114
+ _getDistinctTenantIds(client: any): Promise<string[]>;
115
+ /**
116
+ * Check if tenant has data
117
+ * @private
118
+ */
119
+ _tenantHasData(client: any, tenantId: string): Promise<boolean>;
120
+ /**
121
+ * Delete all tenant data
122
+ * @private
123
+ */
124
+ _deleteAllTenantData(client: any, tenantId: string): Promise<void>;
125
+ /**
126
+ * Clear tenant-specific cached connections
127
+ * @private
128
+ */
129
+ _clearTenantCache(tenantId: string): void;
130
+ /**
131
+ * Close database connection
132
+ * @private
133
+ */
134
+ _closeConnection(connection: any): Promise<void>;
135
+ };
136
+ export default databaseClass;
137
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAOH,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,UAAU,YAAa,SAAQ,cAAc;IAC3C,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;CAClC;AAED,UAAU,kBAAmB,SAAQ,cAAc;IACjD,EAAE,EAAE,GAAG,CAAC;IACR,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,GAAG,CAAC;IAChE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;CACjE;AAED,KAAK,mBAAmB,GAAG,YAAY,GAAG,kBAAkB,CAAC;AA2K7D;;GAEG;AACH,cAAM,WAAW;IAEf,OAAO,CAAC,KAAK,CAAS;gBACV,KAAK,EAAE,MAAM;IAIzB;;OAEG;IACG,GAAG,CAAC,GAAG,GAAE,GAAU;IAWzB;;OAEG;IACG,UAAU,CAAC,GAAG,GAAE,GAAU;CAUjC;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;IACxB;;;;OAIG;cACY,GAAG,GAAU,OAAO,CAAC,mBAAmB,CAAC;IAoBxD;;;;OAIG;qBACmB,GAAG,GAAU,OAAO,CAAC,mBAAmB,CAAC;IAgB/D;;;;OAIG;eACQ,MAAM;IAQjB;;;OAGG;cACa,OAAO,CAAC,GAAG,CAAC;IA4B5B;;;;OAIG;eACa,GAAG,GAAU,OAAO,CAAC,MAAM,EAAE,CAAC;IAS9C;;;;;OAKG;qBACoB,MAAM,QAAO,GAAG,GAAU,OAAO,CAAC,OAAO,CAAC;IAWjE;;;;;OAKG;qBACoB,MAAM,QAAO,GAAG,GAAU,OAAO,CAAC,IAAI,CAAC;IAgB9D;;;;;;;OAOG;qBACoB,MAAM,WAAW,GAAG,QAAO,GAAG,GAAU,OAAO,CAAC,IAAI,CAAC;IAkB5E;;;OAGG;kBACiB,OAAO,CAAC,IAAI,CAAC;IAsBjC;;;OAGG;kCACiC,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsC3D;;;OAGG;2BAC0B,GAAG,YAAY,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA8BrE;;;OAGG;iCACgC,GAAG,YAAY,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCxE;;;OAGG;gCACyB,MAAM,GAAG,IAAI;IAkBzC;;;OAGG;iCACgC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;CAWvD,CAAC;AAGF,eAAe,aAAa,CAAC"}