@bloomneo/appkit 1.2.9 → 1.5.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.
- package/AGENTS.md +195 -0
- package/CHANGELOG.md +253 -0
- package/README.md +147 -799
- package/bin/commands/generate.js +7 -7
- package/cookbook/README.md +26 -0
- package/cookbook/api-key-service.ts +106 -0
- package/cookbook/auth-protected-crud.ts +112 -0
- package/cookbook/file-upload-pipeline.ts +113 -0
- package/cookbook/multi-tenant-saas.ts +87 -0
- package/cookbook/real-time-chat.ts +121 -0
- package/dist/auth/auth.d.ts +21 -4
- package/dist/auth/auth.d.ts.map +1 -1
- package/dist/auth/auth.js +56 -44
- package/dist/auth/auth.js.map +1 -1
- package/dist/auth/defaults.d.ts +1 -1
- package/dist/auth/defaults.js +35 -35
- package/dist/cache/cache.d.ts +29 -6
- package/dist/cache/cache.d.ts.map +1 -1
- package/dist/cache/cache.js +72 -44
- package/dist/cache/cache.js.map +1 -1
- package/dist/cache/defaults.js +29 -29
- package/dist/cache/index.d.ts +19 -10
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +21 -18
- package/dist/cache/index.js.map +1 -1
- package/dist/config/defaults.d.ts +1 -1
- package/dist/config/defaults.js +11 -11
- package/dist/config/index.d.ts +3 -3
- package/dist/config/index.js +4 -4
- package/dist/database/adapters/mongoose.d.ts +4 -4
- package/dist/database/adapters/mongoose.js +7 -7
- package/dist/database/adapters/prisma.d.ts +4 -4
- package/dist/database/adapters/prisma.js +7 -7
- package/dist/database/defaults.d.ts +1 -1
- package/dist/database/defaults.js +4 -4
- package/dist/database/index.js +2 -2
- package/dist/database/index.js.map +1 -1
- package/dist/email/defaults.js +26 -26
- package/dist/email/index.js +7 -7
- package/dist/email/strategies/resend.js +1 -1
- package/dist/error/defaults.d.ts +1 -1
- package/dist/error/defaults.js +13 -13
- package/dist/error/error.d.ts +12 -0
- package/dist/error/error.d.ts.map +1 -1
- package/dist/error/error.js +19 -0
- package/dist/error/error.js.map +1 -1
- package/dist/error/index.d.ts +14 -3
- package/dist/error/index.d.ts.map +1 -1
- package/dist/error/index.js +14 -3
- package/dist/error/index.js.map +1 -1
- package/dist/event/defaults.js +35 -35
- package/dist/event/index.js +7 -7
- package/dist/logger/defaults.d.ts +1 -1
- package/dist/logger/defaults.js +40 -40
- package/dist/logger/index.d.ts +1 -0
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js.map +1 -1
- package/dist/logger/logger.d.ts +8 -0
- package/dist/logger/logger.d.ts.map +1 -1
- package/dist/logger/logger.js +13 -3
- package/dist/logger/logger.js.map +1 -1
- package/dist/logger/transports/console.js +2 -2
- package/dist/logger/transports/http.d.ts +1 -1
- package/dist/logger/transports/http.js +2 -2
- package/dist/logger/transports/webhook.d.ts +1 -1
- package/dist/logger/transports/webhook.js +3 -3
- package/dist/queue/defaults.d.ts +2 -2
- package/dist/queue/defaults.js +38 -38
- package/dist/security/defaults.d.ts +1 -1
- package/dist/security/defaults.js +30 -30
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.js +3 -3
- package/dist/security/security.d.ts +1 -1
- package/dist/security/security.js +4 -4
- package/dist/storage/defaults.js +26 -26
- package/dist/storage/index.js +3 -3
- package/dist/util/defaults.d.ts +1 -1
- package/dist/util/defaults.js +41 -41
- package/dist/util/env.d.ts +35 -0
- package/dist/util/env.d.ts.map +1 -0
- package/dist/util/env.js +50 -0
- package/dist/util/env.js.map +1 -0
- package/dist/util/errors.d.ts +52 -0
- package/dist/util/errors.d.ts.map +1 -0
- package/dist/util/errors.js +82 -0
- package/dist/util/errors.js.map +1 -0
- package/dist/util/util.js +1 -1
- package/examples/.env.example +80 -0
- package/examples/README.md +16 -0
- package/examples/auth.ts +228 -0
- package/examples/cache.ts +36 -0
- package/examples/config.ts +45 -0
- package/examples/database.ts +69 -0
- package/examples/email.ts +53 -0
- package/examples/error.ts +50 -0
- package/examples/event.ts +42 -0
- package/examples/logger.ts +41 -0
- package/examples/queue.ts +58 -0
- package/examples/security.ts +46 -0
- package/examples/storage.ts +44 -0
- package/examples/util.ts +47 -0
- package/llms.txt +591 -0
- package/package.json +19 -10
- package/src/auth/README.md +850 -0
- package/src/cache/README.md +756 -0
- package/src/config/README.md +604 -0
- package/src/database/README.md +818 -0
- package/src/email/README.md +759 -0
- package/src/error/README.md +660 -0
- package/src/event/README.md +729 -0
- package/src/logger/README.md +435 -0
- package/src/queue/README.md +851 -0
- package/src/security/README.md +612 -0
- package/src/storage/README.md +1008 -0
- package/src/util/README.md +955 -0
- package/bin/templates/backend/docs/APPKIT_CLI.md +0 -507
- package/bin/templates/backend/docs/APPKIT_COMMENTS_GUIDELINES.md +0 -61
- package/bin/templates/backend/docs/APPKIT_LLM_GUIDE.md +0 -2539
package/dist/config/defaults.js
CHANGED
|
@@ -65,15 +65,15 @@ function setNestedValue(obj, path, value) {
|
|
|
65
65
|
function validateEnvironment() {
|
|
66
66
|
const nodeEnv = process.env.NODE_ENV;
|
|
67
67
|
if (nodeEnv && !['development', 'production', 'test', 'staging'].includes(nodeEnv)) {
|
|
68
|
-
console.warn(`[
|
|
68
|
+
console.warn(`[Bloomneo AppKit] Unusual NODE_ENV: "${nodeEnv}". ` +
|
|
69
69
|
`Expected: development, production, test, or staging.`);
|
|
70
70
|
}
|
|
71
71
|
// Validate common required variables in production
|
|
72
72
|
if (nodeEnv === 'production') {
|
|
73
|
-
const requiredProdVars = ['
|
|
73
|
+
const requiredProdVars = ['BLOOM_SERVICE_NAME'];
|
|
74
74
|
const missing = requiredProdVars.filter(varName => !process.env[varName]);
|
|
75
75
|
if (missing.length > 0) {
|
|
76
|
-
console.warn(`[
|
|
76
|
+
console.warn(`[Bloomneo AppKit] Missing recommended production environment variables: ${missing.join(', ')}`);
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
}
|
|
@@ -81,11 +81,11 @@ function validateEnvironment() {
|
|
|
81
81
|
* Check if environment variable is a framework variable that should be ignored
|
|
82
82
|
* @llm-rule WHEN: Filtering out framework variables from app config parsing
|
|
83
83
|
* @llm-rule AVOID: Parsing framework variables as app config - they serve different purposes
|
|
84
|
-
* @llm-rule NOTE:
|
|
84
|
+
* @llm-rule NOTE: Bloomneo AppKit uses BLOOM_* and FLUX_* for internal configuration
|
|
85
85
|
*/
|
|
86
86
|
function isFrameworkVariable(envKey) {
|
|
87
87
|
const frameworkPrefixes = [
|
|
88
|
-
'
|
|
88
|
+
'BLOOM_', // Bloomneo AppKit framework configuration
|
|
89
89
|
'FLUX_', // Flux Framework internal variables
|
|
90
90
|
'NODE_', // Node.js environment variables
|
|
91
91
|
'npm_', // npm variables
|
|
@@ -146,7 +146,7 @@ function validateEnvVarFormat(envKey) {
|
|
|
146
146
|
}
|
|
147
147
|
// Check for proper UPPER_SNAKE_CASE format
|
|
148
148
|
if (envKey !== envKey.toUpperCase()) {
|
|
149
|
-
console.warn(`[
|
|
149
|
+
console.warn(`[Bloomneo AppKit] Environment variable "${envKey}" should be uppercase for consistency`);
|
|
150
150
|
}
|
|
151
151
|
return true;
|
|
152
152
|
}
|
|
@@ -156,20 +156,20 @@ function validateEnvVarFormat(envKey) {
|
|
|
156
156
|
* @llm-rule AVOID: Calling repeatedly - validates environment each time, expensive operation
|
|
157
157
|
* @llm-rule NOTE: Called once at startup, cached globally for performance
|
|
158
158
|
* @llm-rule CONVENTION: Only processes non-framework variables for user config
|
|
159
|
-
* @llm-rule CONVENTION: Variables with
|
|
159
|
+
* @llm-rule CONVENTION: Variables with BLOOM_* and FLUX_* are AppKit internal
|
|
160
160
|
*/
|
|
161
161
|
export function buildConfigFromEnv() {
|
|
162
162
|
validateEnvironment();
|
|
163
163
|
const config = {
|
|
164
164
|
app: {
|
|
165
|
-
name: process.env.
|
|
165
|
+
name: process.env.BLOOM_SERVICE_NAME || process.env.npm_package_name || 'voila-app',
|
|
166
166
|
environment: process.env.NODE_ENV || 'development',
|
|
167
167
|
port: process.env.PORT ? parseInt(process.env.PORT, 10) : undefined,
|
|
168
168
|
host: process.env.HOST || undefined,
|
|
169
169
|
},
|
|
170
170
|
};
|
|
171
171
|
// Process ONLY user configuration variables using UPPER_SNAKE_CASE convention
|
|
172
|
-
// IMPORTANT: Framework variables (
|
|
172
|
+
// IMPORTANT: Framework variables (BLOOM_*, FLUX_*) are NOT processed as user config
|
|
173
173
|
for (const envKey in process.env) {
|
|
174
174
|
// Skip framework variables and system variables
|
|
175
175
|
if (isFrameworkVariable(envKey) || isSystemVariable(envKey)) {
|
|
@@ -195,8 +195,8 @@ export function validateConfig(config) {
|
|
|
195
195
|
// Production-specific validations
|
|
196
196
|
if (environment === 'production') {
|
|
197
197
|
if (!config.app.name || config.app.name === 'voila-app') {
|
|
198
|
-
throw new Error('
|
|
199
|
-
'Set environment variable:
|
|
198
|
+
throw new Error('BLOOM_SERVICE_NAME is required in production. ' +
|
|
199
|
+
'Set environment variable: BLOOM_SERVICE_NAME=your-app-name');
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
// Port validation
|
package/dist/config/index.d.ts
CHANGED
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
* @llm-rule NOTE: Common pattern - configClass.get() → config.get('path', default) → use value
|
|
10
10
|
*
|
|
11
11
|
* CRITICAL UNDERSCORE CONVENTION:
|
|
12
|
-
* -
|
|
12
|
+
* - BLOOM_* and FLUX_* = Framework internal variables (NOT parsed as app config)
|
|
13
13
|
* - Everything else = Your app config (parsed into config object)
|
|
14
14
|
*
|
|
15
15
|
* Examples:
|
|
16
|
-
* ✅
|
|
16
|
+
* ✅ BLOOM_AUTH_SECRET=secret → Framework internal (not in config object)
|
|
17
17
|
* ✅ DATABASE_HOST=localhost → config.get('database.host')
|
|
18
18
|
* ✅ REDIS_URL=redis://local → config.get('redis.url')
|
|
19
|
-
* ❌
|
|
19
|
+
* ❌ BLOOM_DATABASE_HOST=localhost → Framework var (won't be parsed as app config)
|
|
20
20
|
*/
|
|
21
21
|
import { ConfigClass } from './config.js';
|
|
22
22
|
import { type ConfigValue } from './defaults.js';
|
package/dist/config/index.js
CHANGED
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
* @llm-rule NOTE: Common pattern - configClass.get() → config.get('path', default) → use value
|
|
10
10
|
*
|
|
11
11
|
* CRITICAL UNDERSCORE CONVENTION:
|
|
12
|
-
* -
|
|
12
|
+
* - BLOOM_* and FLUX_* = Framework internal variables (NOT parsed as app config)
|
|
13
13
|
* - Everything else = Your app config (parsed into config object)
|
|
14
14
|
*
|
|
15
15
|
* Examples:
|
|
16
|
-
* ✅
|
|
16
|
+
* ✅ BLOOM_AUTH_SECRET=secret → Framework internal (not in config object)
|
|
17
17
|
* ✅ DATABASE_HOST=localhost → config.get('database.host')
|
|
18
18
|
* ✅ REDIS_URL=redis://local → config.get('redis.url')
|
|
19
|
-
* ❌
|
|
19
|
+
* ❌ BLOOM_DATABASE_HOST=localhost → Framework var (won't be parsed as app config)
|
|
20
20
|
*/
|
|
21
21
|
import { ConfigClass } from './config.js';
|
|
22
22
|
import { getSmartDefaults } from './defaults.js';
|
|
@@ -101,7 +101,7 @@ function getEnvVars() {
|
|
|
101
101
|
const envVars = {};
|
|
102
102
|
for (const [key, value] of Object.entries(process.env)) {
|
|
103
103
|
// Skip framework variables - only show app config
|
|
104
|
-
if (!key.startsWith('
|
|
104
|
+
if (!key.startsWith('BLOOM_') &&
|
|
105
105
|
!key.startsWith('FLUX_') &&
|
|
106
106
|
!key.startsWith('NODE_') &&
|
|
107
107
|
!key.startsWith('npm_') &&
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module @bloomneo/appkit/database
|
|
4
4
|
* @file src/database/adapters/mongoose.ts
|
|
5
5
|
*
|
|
6
|
-
* @llm-rule WHEN: Using Mongoose ODM with MongoDB databases in
|
|
6
|
+
* @llm-rule WHEN: Using Mongoose ODM with MongoDB databases in Bloomneo framework
|
|
7
7
|
* @llm-rule AVOID: Using with SQL databases - use prisma adapter instead
|
|
8
8
|
* @llm-rule NOTE: Auto-discovers apps from /apps directory structure, applies tenant filtering
|
|
9
9
|
*/
|
|
@@ -36,7 +36,7 @@ interface MongooseConnection {
|
|
|
36
36
|
[key: string]: any;
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
* Simplified Mongoose adapter with
|
|
39
|
+
* Simplified Mongoose adapter with Bloomneo app discovery
|
|
40
40
|
*/
|
|
41
41
|
export declare class MongooseAdapter {
|
|
42
42
|
private options;
|
|
@@ -54,7 +54,7 @@ export declare class MongooseAdapter {
|
|
|
54
54
|
*/
|
|
55
55
|
applyTenantMiddleware(connection: MongooseConnection, tenantId: string, options?: TenantMiddlewareOptions): Promise<MongooseConnection>;
|
|
56
56
|
/**
|
|
57
|
-
* Auto-discover
|
|
57
|
+
* Auto-discover Bloomneo apps with Mongoose models
|
|
58
58
|
*/
|
|
59
59
|
discoverApps(): Promise<DiscoveredApp[]>;
|
|
60
60
|
/**
|
|
@@ -82,7 +82,7 @@ export declare class MongooseAdapter {
|
|
|
82
82
|
*/
|
|
83
83
|
disconnect(): Promise<void>;
|
|
84
84
|
/**
|
|
85
|
-
* Detect current app from file path (
|
|
85
|
+
* Detect current app from file path (Bloomneo structure)
|
|
86
86
|
*/
|
|
87
87
|
private _detectCurrentApp;
|
|
88
88
|
/**
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module @bloomneo/appkit/database
|
|
4
4
|
* @file src/database/adapters/mongoose.ts
|
|
5
5
|
*
|
|
6
|
-
* @llm-rule WHEN: Using Mongoose ODM with MongoDB databases in
|
|
6
|
+
* @llm-rule WHEN: Using Mongoose ODM with MongoDB databases in Bloomneo framework
|
|
7
7
|
* @llm-rule AVOID: Using with SQL databases - use prisma adapter instead
|
|
8
8
|
* @llm-rule NOTE: Auto-discovers apps from /apps directory structure, applies tenant filtering
|
|
9
9
|
*/
|
|
@@ -11,7 +11,7 @@ import fs from 'fs';
|
|
|
11
11
|
import path from 'path';
|
|
12
12
|
import { createDatabaseError } from '../defaults.js';
|
|
13
13
|
/**
|
|
14
|
-
* Simplified Mongoose adapter with
|
|
14
|
+
* Simplified Mongoose adapter with Bloomneo app discovery
|
|
15
15
|
*/
|
|
16
16
|
export class MongooseAdapter {
|
|
17
17
|
options;
|
|
@@ -182,7 +182,7 @@ export class MongooseAdapter {
|
|
|
182
182
|
return connection;
|
|
183
183
|
}
|
|
184
184
|
/**
|
|
185
|
-
* Auto-discover
|
|
185
|
+
* Auto-discover Bloomneo apps with Mongoose models
|
|
186
186
|
*/
|
|
187
187
|
async discoverApps() {
|
|
188
188
|
if (this.discoveredApps)
|
|
@@ -203,7 +203,7 @@ export class MongooseAdapter {
|
|
|
203
203
|
.filter((dirent) => dirent.isDirectory())
|
|
204
204
|
.map((dirent) => dirent.name);
|
|
205
205
|
for (const appName of appFolders) {
|
|
206
|
-
//
|
|
206
|
+
// Bloomneo standard: apps/{appName}/models or apps/{appName}/src/models
|
|
207
207
|
const possibleModelPaths = [
|
|
208
208
|
path.join(appsDir, appName, 'models'),
|
|
209
209
|
path.join(appsDir, appName, 'src/models'),
|
|
@@ -341,7 +341,7 @@ export class MongooseAdapter {
|
|
|
341
341
|
}
|
|
342
342
|
// Private helper methods
|
|
343
343
|
/**
|
|
344
|
-
* Detect current app from file path (
|
|
344
|
+
* Detect current app from file path (Bloomneo structure)
|
|
345
345
|
*/
|
|
346
346
|
async _detectCurrentApp() {
|
|
347
347
|
try {
|
|
@@ -380,8 +380,8 @@ export class MongooseAdapter {
|
|
|
380
380
|
*/
|
|
381
381
|
_findAppsDirectory() {
|
|
382
382
|
// Check environment variable first
|
|
383
|
-
if (process.env.
|
|
384
|
-
return process.env.
|
|
383
|
+
if (process.env.BLOOM_APPS_DIR && fs.existsSync(process.env.BLOOM_APPS_DIR)) {
|
|
384
|
+
return process.env.BLOOM_APPS_DIR;
|
|
385
385
|
}
|
|
386
386
|
// Search upwards from current directory
|
|
387
387
|
let currentDir = process.cwd();
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module @bloomneo/appkit/database
|
|
4
4
|
* @file src/database/adapters/prisma.ts
|
|
5
5
|
*
|
|
6
|
-
* @llm-rule WHEN: Using Prisma ORM with PostgreSQL, MySQL, or SQLite databases in
|
|
6
|
+
* @llm-rule WHEN: Using Prisma ORM with PostgreSQL, MySQL, or SQLite databases in Bloomneo framework
|
|
7
7
|
* @llm-rule AVOID: Using with MongoDB - use mongoose adapter instead
|
|
8
8
|
* @llm-rule NOTE: Auto-discovers apps from /apps directory structure, applies tenant filtering
|
|
9
9
|
*/
|
|
@@ -33,7 +33,7 @@ interface PrismaClient {
|
|
|
33
33
|
[key: string]: any;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
* Simplified Prisma adapter with
|
|
36
|
+
* Simplified Prisma adapter with Bloomneo app discovery
|
|
37
37
|
*/
|
|
38
38
|
export declare class PrismaAdapter {
|
|
39
39
|
private options;
|
|
@@ -50,7 +50,7 @@ export declare class PrismaAdapter {
|
|
|
50
50
|
*/
|
|
51
51
|
applyTenantMiddleware(client: PrismaClient, tenantId: string, options?: TenantMiddlewareOptions): Promise<PrismaClient>;
|
|
52
52
|
/**
|
|
53
|
-
* Auto-discover
|
|
53
|
+
* Auto-discover Bloomneo apps with Prisma clients
|
|
54
54
|
*/
|
|
55
55
|
discoverApps(): Promise<DiscoveredApp[]>;
|
|
56
56
|
/**
|
|
@@ -78,7 +78,7 @@ export declare class PrismaAdapter {
|
|
|
78
78
|
*/
|
|
79
79
|
disconnect(): Promise<void>;
|
|
80
80
|
/**
|
|
81
|
-
* Detect current app from file path (
|
|
81
|
+
* Detect current app from file path (Bloomneo structure)
|
|
82
82
|
*/
|
|
83
83
|
private _detectCurrentApp;
|
|
84
84
|
/**
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* @module @bloomneo/appkit/database
|
|
4
4
|
* @file src/database/adapters/prisma.ts
|
|
5
5
|
*
|
|
6
|
-
* @llm-rule WHEN: Using Prisma ORM with PostgreSQL, MySQL, or SQLite databases in
|
|
6
|
+
* @llm-rule WHEN: Using Prisma ORM with PostgreSQL, MySQL, or SQLite databases in Bloomneo framework
|
|
7
7
|
* @llm-rule AVOID: Using with MongoDB - use mongoose adapter instead
|
|
8
8
|
* @llm-rule NOTE: Auto-discovers apps from /apps directory structure, applies tenant filtering
|
|
9
9
|
*/
|
|
@@ -11,7 +11,7 @@ import fs from 'fs';
|
|
|
11
11
|
import path from 'path';
|
|
12
12
|
import { createDatabaseError } from '../defaults.js';
|
|
13
13
|
/**
|
|
14
|
-
* Simplified Prisma adapter with
|
|
14
|
+
* Simplified Prisma adapter with Bloomneo app discovery
|
|
15
15
|
*/
|
|
16
16
|
export class PrismaAdapter {
|
|
17
17
|
options;
|
|
@@ -149,7 +149,7 @@ export class PrismaAdapter {
|
|
|
149
149
|
return client;
|
|
150
150
|
}
|
|
151
151
|
/**
|
|
152
|
-
* Auto-discover
|
|
152
|
+
* Auto-discover Bloomneo apps with Prisma clients
|
|
153
153
|
*/
|
|
154
154
|
async discoverApps() {
|
|
155
155
|
if (this.discoveredApps)
|
|
@@ -170,7 +170,7 @@ export class PrismaAdapter {
|
|
|
170
170
|
.filter((dirent) => dirent.isDirectory())
|
|
171
171
|
.map((dirent) => dirent.name);
|
|
172
172
|
for (const appName of appFolders) {
|
|
173
|
-
//
|
|
173
|
+
// Bloomneo standard: apps/{appName}/prisma/generated/client
|
|
174
174
|
const clientPath = path.join(appsDir, appName, 'prisma/generated/client/index.js');
|
|
175
175
|
if (fs.existsSync(clientPath)) {
|
|
176
176
|
apps.push({
|
|
@@ -315,7 +315,7 @@ export class PrismaAdapter {
|
|
|
315
315
|
}
|
|
316
316
|
// Private helper methods
|
|
317
317
|
/**
|
|
318
|
-
* Detect current app from file path (
|
|
318
|
+
* Detect current app from file path (Bloomneo structure)
|
|
319
319
|
*/
|
|
320
320
|
async _detectCurrentApp() {
|
|
321
321
|
try {
|
|
@@ -354,8 +354,8 @@ export class PrismaAdapter {
|
|
|
354
354
|
*/
|
|
355
355
|
_findAppsDirectory() {
|
|
356
356
|
// Check environment variable first
|
|
357
|
-
if (process.env.
|
|
358
|
-
return process.env.
|
|
357
|
+
if (process.env.BLOOM_APPS_DIR && fs.existsSync(process.env.BLOOM_APPS_DIR)) {
|
|
358
|
+
return process.env.BLOOM_APPS_DIR;
|
|
359
359
|
}
|
|
360
360
|
// Search upwards from current directory
|
|
361
361
|
let currentDir = process.cwd();
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - DATABASE_URL: Database connection string
|
|
7
7
|
*
|
|
8
8
|
* Optional Environment Variables:
|
|
9
|
-
* -
|
|
9
|
+
* - BLOOM_DB_TENANT: Enable tenant mode (auto/true/false)
|
|
10
10
|
* - ORG_{NAME}: Organization-specific database URLs
|
|
11
11
|
*
|
|
12
12
|
* @module @bloomneo/appkit/database
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* - DATABASE_URL: Database connection string
|
|
7
7
|
*
|
|
8
8
|
* Optional Environment Variables:
|
|
9
|
-
* -
|
|
9
|
+
* - BLOOM_DB_TENANT: Enable tenant mode (auto/true/false)
|
|
10
10
|
* - ORG_{NAME}: Organization-specific database URLs
|
|
11
11
|
*
|
|
12
12
|
* @module @bloomneo/appkit/database
|
|
@@ -113,14 +113,14 @@ export function validateEnvironment() {
|
|
|
113
113
|
else {
|
|
114
114
|
config.hasDatabase = true;
|
|
115
115
|
}
|
|
116
|
-
const tenantMode = process.env.
|
|
116
|
+
const tenantMode = process.env.BLOOM_DB_TENANT;
|
|
117
117
|
if (tenantMode) {
|
|
118
118
|
const mode = tenantMode.toLowerCase();
|
|
119
119
|
if (['true', 'auto'].includes(mode)) {
|
|
120
120
|
config.hasTenants = true;
|
|
121
121
|
}
|
|
122
122
|
else if (mode !== 'false') {
|
|
123
|
-
warnings.push(`Unknown
|
|
123
|
+
warnings.push(`Unknown BLOOM_DB_TENANT value: ${tenantMode}. Use 'auto', 'true', or 'false'`);
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
const orgVars = getOrgEnvironmentVars();
|
|
@@ -166,7 +166,7 @@ export function getSmartDefaults() {
|
|
|
166
166
|
},
|
|
167
167
|
tenant: {
|
|
168
168
|
enabled: validation.hasTenants,
|
|
169
|
-
mode: process.env.
|
|
169
|
+
mode: process.env.BLOOM_DB_TENANT?.toLowerCase() || 'false',
|
|
170
170
|
fieldName: 'tenant_id',
|
|
171
171
|
},
|
|
172
172
|
org: {
|
package/dist/database/index.js
CHANGED
|
@@ -59,7 +59,7 @@ function detectOrg(req) {
|
|
|
59
59
|
function detectTenant(req) {
|
|
60
60
|
if (!req)
|
|
61
61
|
return null;
|
|
62
|
-
if (!process.env.
|
|
62
|
+
if (!process.env.BLOOM_DB_TENANT)
|
|
63
63
|
return null;
|
|
64
64
|
return (req.headers?.['x-tenant-id'] ||
|
|
65
65
|
req.user?.tenant_id ||
|
|
@@ -338,7 +338,7 @@ export const databaseClass = {
|
|
|
338
338
|
async disconnect() {
|
|
339
339
|
const disconnectPromises = [];
|
|
340
340
|
for (const [key, connection] of connections) {
|
|
341
|
-
disconnectPromises.push(this._closeConnection(connection).catch((error) => console.warn(`
|
|
341
|
+
disconnectPromises.push(this._closeConnection(connection).catch((error) => console.warn(`[@bloomneo/appkit/database] Disconnect warning for "${key}":`, error.message)));
|
|
342
342
|
}
|
|
343
343
|
await Promise.all(disconnectPromises);
|
|
344
344
|
connections.clear();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"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"}
|
package/dist/email/defaults.js
CHANGED
|
@@ -27,14 +27,14 @@ export function getSmartDefaults() {
|
|
|
27
27
|
strategy,
|
|
28
28
|
// Default sender with service identification
|
|
29
29
|
from: {
|
|
30
|
-
name: process.env.
|
|
31
|
-
email: process.env.
|
|
30
|
+
name: process.env.BLOOM_EMAIL_FROM_NAME || process.env.BLOOM_SERVICE_NAME || 'App',
|
|
31
|
+
email: process.env.BLOOM_EMAIL_FROM_EMAIL || getDefaultFromEmail(strategy),
|
|
32
32
|
},
|
|
33
33
|
// Resend configuration (only used when strategy is 'resend')
|
|
34
34
|
resend: {
|
|
35
35
|
apiKey: process.env.RESEND_API_KEY || '',
|
|
36
36
|
baseURL: process.env.RESEND_BASE_URL || 'https://api.resend.com',
|
|
37
|
-
timeout: parseInt(process.env.
|
|
37
|
+
timeout: parseInt(process.env.BLOOM_EMAIL_RESEND_TIMEOUT || '30000'),
|
|
38
38
|
},
|
|
39
39
|
// SMTP configuration (only used when strategy is 'smtp')
|
|
40
40
|
smtp: {
|
|
@@ -45,14 +45,14 @@ export function getSmartDefaults() {
|
|
|
45
45
|
user: process.env.SMTP_USER || '',
|
|
46
46
|
pass: process.env.SMTP_PASS || '',
|
|
47
47
|
},
|
|
48
|
-
timeout: parseInt(process.env.
|
|
48
|
+
timeout: parseInt(process.env.BLOOM_EMAIL_SMTP_TIMEOUT || '30000'),
|
|
49
49
|
pool: process.env.SMTP_POOL !== 'false', // Default to true for performance
|
|
50
50
|
},
|
|
51
51
|
// Console configuration (only used when strategy is 'console')
|
|
52
52
|
console: {
|
|
53
|
-
colorize: process.env.
|
|
54
|
-
showPreview: process.env.
|
|
55
|
-
format: process.env.
|
|
53
|
+
colorize: process.env.BLOOM_EMAIL_CONSOLE_COLOR !== 'false' && !isProduction,
|
|
54
|
+
showPreview: process.env.BLOOM_EMAIL_CONSOLE_PREVIEW !== 'false' && isDevelopment,
|
|
55
|
+
format: process.env.BLOOM_EMAIL_CONSOLE_FORMAT || 'simple',
|
|
56
56
|
},
|
|
57
57
|
// Environment information
|
|
58
58
|
environment: {
|
|
@@ -71,7 +71,7 @@ export function getSmartDefaults() {
|
|
|
71
71
|
*/
|
|
72
72
|
function detectEmailStrategy() {
|
|
73
73
|
// Explicit override wins (for testing/debugging)
|
|
74
|
-
const explicit = process.env.
|
|
74
|
+
const explicit = process.env.BLOOM_EMAIL_STRATEGY?.toLowerCase();
|
|
75
75
|
if (explicit === 'resend' || explicit === 'smtp' || explicit === 'console') {
|
|
76
76
|
return explicit;
|
|
77
77
|
}
|
|
@@ -84,7 +84,7 @@ function detectEmailStrategy() {
|
|
|
84
84
|
}
|
|
85
85
|
// Default to console for development/testing
|
|
86
86
|
if (process.env.NODE_ENV === 'production') {
|
|
87
|
-
console.warn('[
|
|
87
|
+
console.warn('[Bloomneo AppKit] No email provider configured in production. ' +
|
|
88
88
|
'Using console strategy which will only log emails. ' +
|
|
89
89
|
'Set RESEND_API_KEY or SMTP_HOST for production email sending.');
|
|
90
90
|
}
|
|
@@ -139,9 +139,9 @@ function isDefaultSecurePort() {
|
|
|
139
139
|
*/
|
|
140
140
|
function validateEnvironment() {
|
|
141
141
|
// Validate email strategy if explicitly set
|
|
142
|
-
const strategy = process.env.
|
|
142
|
+
const strategy = process.env.BLOOM_EMAIL_STRATEGY;
|
|
143
143
|
if (strategy && !['resend', 'smtp', 'console'].includes(strategy.toLowerCase())) {
|
|
144
|
-
throw new Error(`Invalid
|
|
144
|
+
throw new Error(`Invalid BLOOM_EMAIL_STRATEGY: "${strategy}". Must be "resend", "smtp", or "console"`);
|
|
145
145
|
}
|
|
146
146
|
// Validate Resend API key format if provided
|
|
147
147
|
const resendApiKey = process.env.RESEND_API_KEY;
|
|
@@ -154,18 +154,18 @@ function validateEnvironment() {
|
|
|
154
154
|
validateSmtpConfig();
|
|
155
155
|
}
|
|
156
156
|
// Validate FROM email if provided
|
|
157
|
-
const fromEmail = process.env.
|
|
157
|
+
const fromEmail = process.env.BLOOM_EMAIL_FROM_EMAIL;
|
|
158
158
|
if (fromEmail && !isValidEmail(fromEmail)) {
|
|
159
|
-
throw new Error(`Invalid
|
|
159
|
+
throw new Error(`Invalid BLOOM_EMAIL_FROM_EMAIL: "${fromEmail}". Must be a valid email address`);
|
|
160
160
|
}
|
|
161
161
|
// Validate numeric values
|
|
162
162
|
validateNumericEnv('SMTP_PORT', 1, 65535);
|
|
163
|
-
validateNumericEnv('
|
|
164
|
-
validateNumericEnv('
|
|
163
|
+
validateNumericEnv('BLOOM_EMAIL_RESEND_TIMEOUT', 1000, 300000); // 1s to 5min
|
|
164
|
+
validateNumericEnv('BLOOM_EMAIL_SMTP_TIMEOUT', 1000, 300000); // 1s to 5min
|
|
165
165
|
// Validate console format if provided
|
|
166
|
-
const consoleFormat = process.env.
|
|
166
|
+
const consoleFormat = process.env.BLOOM_EMAIL_CONSOLE_FORMAT;
|
|
167
167
|
if (consoleFormat && !['simple', 'detailed'].includes(consoleFormat)) {
|
|
168
|
-
throw new Error(`Invalid
|
|
168
|
+
throw new Error(`Invalid BLOOM_EMAIL_CONSOLE_FORMAT: "${consoleFormat}". Must be "simple" or "detailed"`);
|
|
169
169
|
}
|
|
170
170
|
// Production-specific validations
|
|
171
171
|
const nodeEnv = process.env.NODE_ENV;
|
|
@@ -174,7 +174,7 @@ function validateEnvironment() {
|
|
|
174
174
|
}
|
|
175
175
|
// Validate NODE_ENV
|
|
176
176
|
if (nodeEnv && !['development', 'production', 'test', 'staging'].includes(nodeEnv)) {
|
|
177
|
-
console.warn(`[
|
|
177
|
+
console.warn(`[Bloomneo AppKit] Unusual NODE_ENV: "${nodeEnv}". ` +
|
|
178
178
|
`Expected: development, production, test, or staging`);
|
|
179
179
|
}
|
|
180
180
|
}
|
|
@@ -192,7 +192,7 @@ function validateSmtpConfig() {
|
|
|
192
192
|
}
|
|
193
193
|
// Many SMTP servers require authentication
|
|
194
194
|
if (!user && !pass) {
|
|
195
|
-
console.warn('[
|
|
195
|
+
console.warn('[Bloomneo AppKit] SMTP configured without authentication. ' +
|
|
196
196
|
'Set SMTP_USER and SMTP_PASS if your server requires authentication.');
|
|
197
197
|
}
|
|
198
198
|
if (user && !pass) {
|
|
@@ -210,15 +210,15 @@ function validateSmtpConfig() {
|
|
|
210
210
|
function validateProductionConfig() {
|
|
211
211
|
const strategy = detectEmailStrategy();
|
|
212
212
|
if (strategy === 'console') {
|
|
213
|
-
console.warn('[
|
|
213
|
+
console.warn('[Bloomneo AppKit] Using console email strategy in production. ' +
|
|
214
214
|
'Emails will only be logged, not sent. ' +
|
|
215
215
|
'Set RESEND_API_KEY or SMTP_HOST for production email sending.');
|
|
216
216
|
}
|
|
217
217
|
// Validate FROM email is set in production
|
|
218
|
-
const fromEmail = process.env.
|
|
218
|
+
const fromEmail = process.env.BLOOM_EMAIL_FROM_EMAIL;
|
|
219
219
|
if (!fromEmail) {
|
|
220
|
-
console.warn('[
|
|
221
|
-
'Set
|
|
220
|
+
console.warn('[Bloomneo AppKit] No FROM email configured in production. ' +
|
|
221
|
+
'Set BLOOM_EMAIL_FROM_EMAIL for professional email sending.');
|
|
222
222
|
}
|
|
223
223
|
}
|
|
224
224
|
/**
|
|
@@ -269,7 +269,7 @@ export function validateProductionRequirements() {
|
|
|
269
269
|
const config = getSmartDefaults();
|
|
270
270
|
if (config.environment.isProduction) {
|
|
271
271
|
if (config.strategy === 'console') {
|
|
272
|
-
console.warn('[
|
|
272
|
+
console.warn('[Bloomneo AppKit] Using console email strategy in production. ' +
|
|
273
273
|
'Emails will only be logged, not sent. ' +
|
|
274
274
|
'Set RESEND_API_KEY or SMTP_HOST for production email sending.');
|
|
275
275
|
}
|
|
@@ -325,10 +325,10 @@ export function validateStartupConfiguration() {
|
|
|
325
325
|
// FROM email validation
|
|
326
326
|
if (!config.from.email || config.from.email.includes('example.com')) {
|
|
327
327
|
if (config.environment.isProduction) {
|
|
328
|
-
errors.push('
|
|
328
|
+
errors.push('BLOOM_EMAIL_FROM_EMAIL must be set in production');
|
|
329
329
|
}
|
|
330
330
|
else {
|
|
331
|
-
warnings.push('
|
|
331
|
+
warnings.push('BLOOM_EMAIL_FROM_EMAIL not configured - using default');
|
|
332
332
|
}
|
|
333
333
|
}
|
|
334
334
|
// Environment-specific warnings
|
package/dist/email/index.js
CHANGED
|
@@ -126,13 +126,13 @@ function validateConfig() {
|
|
|
126
126
|
try {
|
|
127
127
|
const validation = validateStartupConfiguration();
|
|
128
128
|
if (validation.errors.length > 0) {
|
|
129
|
-
console.error('[
|
|
129
|
+
console.error('[Bloomneo AppKit] Email configuration errors:', validation.errors);
|
|
130
130
|
}
|
|
131
131
|
if (validation.warnings.length > 0) {
|
|
132
|
-
console.warn('[
|
|
132
|
+
console.warn('[Bloomneo AppKit] Email configuration warnings:', validation.warnings);
|
|
133
133
|
}
|
|
134
134
|
if (validation.ready) {
|
|
135
|
-
console.log(`✅ [
|
|
135
|
+
console.log(`✅ [Bloomneo AppKit] Email configured with ${validation.strategy} strategy`);
|
|
136
136
|
}
|
|
137
137
|
return {
|
|
138
138
|
valid: validation.errors.length === 0,
|
|
@@ -144,7 +144,7 @@ function validateConfig() {
|
|
|
144
144
|
}
|
|
145
145
|
catch (error) {
|
|
146
146
|
const errorMessage = error.message;
|
|
147
|
-
console.error('[
|
|
147
|
+
console.error('[Bloomneo AppKit] Email configuration validation failed:', errorMessage);
|
|
148
148
|
return {
|
|
149
149
|
valid: false,
|
|
150
150
|
strategy: 'unknown',
|
|
@@ -164,13 +164,13 @@ function validateProduction() {
|
|
|
164
164
|
try {
|
|
165
165
|
validateProductionRequirements();
|
|
166
166
|
if (process.env.NODE_ENV === 'production' && !hasProvider()) {
|
|
167
|
-
console.warn('[
|
|
167
|
+
console.warn('[Bloomneo AppKit] No email provider configured in production. ' +
|
|
168
168
|
'Set RESEND_API_KEY or SMTP_HOST to send real emails.');
|
|
169
169
|
}
|
|
170
|
-
console.log('✅ [
|
|
170
|
+
console.log('✅ [Bloomneo AppKit] Production email requirements validated');
|
|
171
171
|
}
|
|
172
172
|
catch (error) {
|
|
173
|
-
console.error('[
|
|
173
|
+
console.error('[Bloomneo AppKit] Production email validation failed:', error.message);
|
|
174
174
|
throw error;
|
|
175
175
|
}
|
|
176
176
|
}
|
|
@@ -195,7 +195,7 @@ export class ResendStrategy {
|
|
|
195
195
|
headers: {
|
|
196
196
|
'Authorization': `Bearer ${this.apiKey}`,
|
|
197
197
|
'Content-Type': 'application/json',
|
|
198
|
-
'User-Agent': '
|
|
198
|
+
'User-Agent': 'Bloomneo-AppKit-Email/1.0.0',
|
|
199
199
|
},
|
|
200
200
|
body: JSON.stringify(payload),
|
|
201
201
|
});
|
package/dist/error/defaults.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ export interface ErrorConfig {
|
|
|
31
31
|
environment: EnvironmentConfig;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
* Gets smart defaults using
|
|
34
|
+
* Gets smart defaults using BLOOM_ERROR_* environment variables
|
|
35
35
|
* @llm-rule WHEN: App startup to get production-ready error configuration
|
|
36
36
|
* @llm-rule AVOID: Calling repeatedly - expensive validation, cache the result
|
|
37
37
|
* @llm-rule NOTE: Automatically configures dev vs production error behavior
|