@oktis-works/config 0.0.0-stage → 0.1.1

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.
@@ -0,0 +1,75 @@
1
+ export interface DatabaseConfig {
2
+ driver: 'postgres' | 'mysql';
3
+ host: string;
4
+ port: number;
5
+ database: string;
6
+ user: string;
7
+ password: string;
8
+ ssl?: boolean;
9
+ maxConnections?: number;
10
+ /** Tentativas de reconexão no bootstrap (core-bootstrap-002). */
11
+ retries?: number;
12
+ /** Replica opcional para leitura (primary+read-replica). Se undefined, usa primary. */
13
+ replica?: {
14
+ host: string;
15
+ port: number;
16
+ enabled: boolean;
17
+ };
18
+ }
19
+ export interface RedisConfig {
20
+ host: string;
21
+ port: number;
22
+ password?: string;
23
+ db?: number;
24
+ /** cluster opcional — se true, usa Cluster; se false/undefined, single. Se host=disabled, fallback memória. */
25
+ cluster?: boolean;
26
+ enabled?: boolean;
27
+ }
28
+ export interface AuthConfig {
29
+ jwtSecret: string;
30
+ jwtExpiresIn: string;
31
+ refreshTokenExpiresIn: string;
32
+ bcryptRounds: number;
33
+ }
34
+ export interface StorageConfig {
35
+ provider: 'local' | 's3' | 'minio';
36
+ bucket: string;
37
+ region?: string;
38
+ endpoint?: string;
39
+ accessKey?: string;
40
+ secretKey?: string;
41
+ }
42
+ export interface AppConfig {
43
+ nodeEnv: 'development' | 'production' | 'test';
44
+ port: number;
45
+ host: string;
46
+ corsOrigins: string[];
47
+ rateLimit: {
48
+ windowMs: number;
49
+ max: number;
50
+ };
51
+ }
52
+ export interface WorkerConfig {
53
+ mode: 'docker' | 'pm2' | 'k8s';
54
+ count: number;
55
+ concurrency: number;
56
+ retryAttempts: number;
57
+ retryDelay: number;
58
+ }
59
+ export interface CacheConfig {
60
+ ttl: number;
61
+ prefix: string;
62
+ }
63
+ export interface Config {
64
+ app: AppConfig;
65
+ database: DatabaseConfig;
66
+ redis: RedisConfig;
67
+ auth: AuthConfig;
68
+ storage: StorageConfig;
69
+ worker: WorkerConfig;
70
+ cache: CacheConfig;
71
+ }
72
+ export declare function loadConfig(): Config;
73
+ export declare function getConfig(): Config;
74
+ export declare function resetConfig(): void;
75
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uFAAuF;IACvF,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,+GAA+G;IAC/G,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,aAAa,GAAG,YAAY,GAAG,MAAM,CAAC;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,EAAE;QACT,QAAQ,EAAE,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,KAAK,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,SAAS,CAAC;IACf,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,WAAW,CAAC;CACpB;AAqBD,wBAAgB,UAAU,IAAI,MAAM,CA2DnC;AAID,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC"}
package/dist/index.js ADDED
@@ -0,0 +1,89 @@
1
+ // @oktis-works/config - Configuration Management
2
+ function getEnv(key, defaultValue) {
3
+ const value = process.env[key] ?? defaultValue;
4
+ if (value === undefined) {
5
+ throw new Error(`Missing required environment variable: ${key}`);
6
+ }
7
+ return value;
8
+ }
9
+ function getEnvInt(key, defaultValue) {
10
+ const value = process.env[key];
11
+ return value ? parseInt(value, 10) : defaultValue;
12
+ }
13
+ function getEnvBool(key, defaultValue) {
14
+ const value = process.env[key];
15
+ if (value === undefined)
16
+ return defaultValue;
17
+ return value === 'true' || value === '1';
18
+ }
19
+ export function loadConfig() {
20
+ return {
21
+ app: {
22
+ nodeEnv: process.env['NODE_ENV'] ?? 'development',
23
+ port: getEnvInt('PORT', 3000),
24
+ host: getEnv('HOST', '0.0.0.0'),
25
+ corsOrigins: getEnv('CORS_ORIGINS', 'http://localhost:4321').split(','),
26
+ rateLimit: {
27
+ windowMs: getEnvInt('RATE_LIMIT_WINDOW_MS', 60000),
28
+ max: getEnvInt('RATE_LIMIT_MAX', 100),
29
+ },
30
+ },
31
+ database: {
32
+ driver: process.env['DB_DRIVER'] ?? 'postgres',
33
+ host: getEnv('DB_HOST', 'localhost'),
34
+ port: getEnvInt('DB_PORT', process.env['DB_DRIVER'] === 'mysql' ? 3306 : 5432),
35
+ database: getEnv('DB_NAME', 'okcms'),
36
+ user: getEnv('DB_USER', 'postgres'),
37
+ password: getEnv('DB_PASSWORD', 'postgres'),
38
+ ssl: getEnvBool('DB_SSL', false),
39
+ maxConnections: getEnvInt('DB_MAX_CONNECTIONS', 20),
40
+ replica: process.env['DB_REPLICA_HOST']
41
+ ? { host: getEnv('DB_REPLICA_HOST', ''), port: getEnvInt('DB_REPLICA_PORT', 5433), enabled: true }
42
+ : undefined,
43
+ },
44
+ redis: {
45
+ host: getEnv('REDIS_HOST', 'localhost'),
46
+ port: getEnvInt('REDIS_PORT', 6379),
47
+ password: process.env['REDIS_PASSWORD'],
48
+ db: getEnvInt('REDIS_DB', 0),
49
+ cluster: getEnvBool('REDIS_CLUSTER', false),
50
+ enabled: getEnv('REDIS_HOST', 'localhost') !== 'disabled',
51
+ },
52
+ auth: {
53
+ jwtSecret: getEnv('JWT_SECRET', 'dev-secret-change-in-production'),
54
+ jwtExpiresIn: getEnv('JWT_EXPIRES_IN', '15m'),
55
+ refreshTokenExpiresIn: getEnv('REFRESH_TOKEN_EXPIRES_IN', '7d'),
56
+ bcryptRounds: getEnvInt('BCRYPT_ROUNDS', 12),
57
+ },
58
+ storage: {
59
+ provider: process.env['STORAGE_PROVIDER'] ?? 'local',
60
+ bucket: getEnv('STORAGE_BUCKET', 'okcms-media'),
61
+ region: process.env['STORAGE_REGION'],
62
+ endpoint: process.env['STORAGE_ENDPOINT'],
63
+ accessKey: process.env['STORAGE_ACCESS_KEY'],
64
+ secretKey: process.env['STORAGE_SECRET_KEY'],
65
+ },
66
+ worker: {
67
+ mode: process.env['WORKER_MODE'] ?? 'docker',
68
+ count: getEnvInt('WORKER_COUNT', 1),
69
+ concurrency: getEnvInt('WORKER_CONCURRENCY', 5),
70
+ retryAttempts: getEnvInt('WORKER_RETRY_ATTEMPTS', 3),
71
+ retryDelay: getEnvInt('WORKER_RETRY_DELAY', 1000),
72
+ },
73
+ cache: {
74
+ ttl: getEnvInt('CACHE_TTL', 3600),
75
+ prefix: getEnv('CACHE_PREFIX', 'bl:'),
76
+ },
77
+ };
78
+ }
79
+ let _config = null;
80
+ export function getConfig() {
81
+ if (!_config) {
82
+ _config = loadConfig();
83
+ }
84
+ return _config;
85
+ }
86
+ export function resetConfig() {
87
+ _config = null;
88
+ }
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,38 @@
1
1
  {
2
2
  "name": "@oktis-works/config",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.1",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "scripts": {
15
+ "build": "tsc",
16
+ "dev": "tsc --watch",
17
+ "clean": "rm -rf dist tsconfig.tsbuildinfo"
18
+ },
19
+ "dependencies": {
20
+ "@oktis-works/types": "0.1.1"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "5.7.3"
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "publishConfig": {
29
+ "access": "public",
30
+ "registry": "https://registry.npmjs.org/"
31
+ },
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/okcms/okcms",
36
+ "directory": "packages/config"
37
+ }
38
+ }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.