@togatherlabs/shared-utils 1.0.10 β†’ 1.2.0

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/README.md CHANGED
@@ -1,175 +1,271 @@
1
1
  # @togatherlabs/shared-utils
2
2
 
3
- A collection of **shared TypeScript utilities, constants, and types** used across ToGather microservices.
3
+ Shared utilities library for Togather services, providing production-grade utilities including logger, validators, and common helpers.
4
4
 
5
- [![npm package](https://img.shields.io/npm/v/@togatherlabs/shared-utils.svg)](https://www.npmjs.com/package/@togatherlabs/shared-utils)
6
- [![npm downloads](https://img.shields.io/npm/dm/@togatherlabs/shared-utils.svg)](https://www.npmjs.com/package/@togatherlabs/shared-utils)
7
- [![license](https://img.shields.io/npm/l/@togatherlabs/shared-utils.svg)](./LICENSE)
5
+ ## πŸ“¦ Installation
8
6
 
9
- ## Table of Contents
7
+ ```bash
8
+ pnpm add @togatherlabs/shared-utils
9
+ ```
10
10
 
11
- 1. [Directory Structure](#directory-structure)
12
- 2. [Package Development](#package-development)
11
+ ## πŸš€ Features
13
12
 
14
- * [Adding New Utilities](#adding-new-utilities)
15
- * [Linting](#linting)
16
- * [Building](#building)
17
- * [Publishing Package](#publishing-package)
18
- 3. [Using the Utilities](#using-the-utilities)
13
+ ### Logger Module
14
+ Production-ready logging built on [Pino](https://getpino.io/) with:
15
+ - πŸ”’ Automatic sensitive data redaction
16
+ - πŸ“Š Structured logging with context
17
+ - 🎨 Environment-aware (pretty dev logs, JSON production logs)
18
+ - πŸ”§ Fully configurable
19
+ - ⚑ High performance
19
20
 
20
- * [TypeScript](#typescript)
21
- 4. [Best Practices](#best-practices)
22
- 5. [Troubleshooting](#troubleshooting)
23
- 6. [License](#license)
21
+ ## πŸ“š Available Modules
24
22
 
25
- ## Directory Structure
23
+ ### Logger
26
24
 
27
- The package follows a **clear folder structure** for maintainability:
25
+ ```typescript
26
+ import { Logger, ILogger } from '@togatherlabs/shared-utils/logger';
28
27
 
29
- ```
30
- src/
31
- β”œβ”€β”€ constants/
32
- β”‚ └── index.ts
33
- β”œβ”€β”€ utils/
34
- β”‚ └── index.ts
35
- β”œβ”€β”€ types/
36
- β”‚ └── index.ts
37
- └── index.ts
28
+ // Minimal - uses defaults
29
+ const logger = new Logger();
30
+
31
+ // With environment config from service (recommended)
32
+ const logger = new Logger(undefined, {
33
+ nodeEnv: process.env.NODE_ENV,
34
+ logLevel: process.env.LOG_LEVEL,
35
+ serviceName: process.env.SERVICE_NAME
36
+ });
37
+
38
+ logger.info({ label: 'app' }, 'Application started');
39
+ logger.error({ err, label: 'database' }, 'Connection failed');
38
40
  ```
39
41
 
40
- * **constants**: Shared constants across services
41
- * **utils**: Reusable utility functions
42
- * **types**: Shared TypeScript types and interfaces
43
- * **index.ts**: Exports all public utilities
42
+ **Full documentation**: [Logger README](./src/logger/README.md)
44
43
 
45
- ## Package Development
44
+ ## πŸ”§ Usage
46
45
 
47
- ### Adding New Utilities
46
+ ### Basic Import
48
47
 
49
- 1. Add your function, constant, or type in the appropriate folder (`utils`, `constants`, or `types`).
50
- 2. Export it from the folder’s `index.ts`.
51
- 3. Re-export from the root `index.ts` for public usage.
48
+ ```typescript
49
+ // Import from main entry point
50
+ import { Logger, ILogger, type LoggerConfig } from '@togatherlabs/shared-utils';
52
51
 
53
- **Example:** Adding a new utility `capitalize`:
52
+ // Or import from specific module
53
+ import { Logger, ILogger, type LoggerConfig } from '@togatherlabs/shared-utils/logger';
54
+ ```
54
55
 
55
- ```ts
56
- // src/utils/capitalize.ts
57
- export function capitalize(str: string): string {
58
- return str.charAt(0).toUpperCase() + str.slice(1);
59
- }
56
+ ### Configuration
57
+
58
+ **Services pass environment variables via LoggerConfig:**
59
+
60
+ ```typescript
61
+ import { Logger, type LoggerConfig } from '@togatherlabs/shared-utils/logger';
60
62
 
61
- // src/utils/index.ts
62
- export * from './capitalize';
63
+ const config: LoggerConfig = {
64
+ nodeEnv: process.env.NODE_ENV,
65
+ logLevel: process.env.LOG_LEVEL,
66
+ serviceName: process.env.SERVICE_NAME
67
+ };
63
68
 
64
- // src/index.ts
65
- export * from './utils';
69
+ const logger = new Logger(undefined, config);
66
70
  ```
67
71
 
68
- ### Linting
72
+ **LoggerConfig fields:**
73
+ - `nodeEnv` - Environment: `'development'` (pretty logs) or `'production'` (JSON logs)
74
+ - `logLevel` - Log level (default: `'info'`)
75
+ - `serviceName` - Service name for context
76
+ - `hostname` - Hostname override (optional)
69
77
 
70
- Check code style and catch errors using Biome:
78
+ See the [Logger README](./src/logger/README.md) for detailed configuration options.
71
79
 
72
- ```bash
73
- pnpm lint
74
- pnpm lint:fix
80
+ ### With Dependency Injection
81
+
82
+ ```typescript
83
+ import { injectable, inject } from 'inversify';
84
+ import type { ILogger } from '@togatherlabs/shared-utils/logger';
85
+
86
+ @injectable()
87
+ class UserService {
88
+ constructor(
89
+ @inject(TYPES.Logger) private logger: ILogger
90
+ ) {}
91
+
92
+ async createUser(data: CreateUserDTO) {
93
+ this.logger.info({ userId: data.id, label: 'UserService' }, 'Creating user');
94
+ // ... implementation
95
+ }
96
+ }
75
97
  ```
76
98
 
77
- ### Building
99
+ ## πŸ› οΈ Development
78
100
 
79
- Compile TypeScript into the `dist/` folder:
101
+ ### Setup
80
102
 
81
103
  ```bash
82
- pnpm build
104
+ # Install dependencies
105
+ pnpm install
106
+
107
+ # Build the library
108
+ pnpm run build
109
+
110
+ # Run type checking
111
+ pnpm run typecheck
112
+
113
+ # Run linting
114
+ pnpm run lint
115
+
116
+ # Format code
117
+ pnpm run format
83
118
  ```
84
119
 
85
- Check types without generating output:
120
+ ### Project Structure
86
121
 
87
- ```bash
88
- pnpm typecheck
122
+ ```
123
+ togather-shared-utils/
124
+ β”œβ”€β”€ src/
125
+ β”‚ β”œβ”€β”€ logger/ # Logger module
126
+ β”‚ β”‚ β”œβ”€β”€ ILogger.ts # Logger interface
127
+ β”‚ β”‚ β”œβ”€β”€ logger.ts # Logger implementation
128
+ β”‚ β”‚ β”œβ”€β”€ index.ts # Module exports
129
+ β”‚ β”‚ └── README.md # Logger documentation
130
+ β”‚ └── index.ts # Main library exports
131
+ β”œβ”€β”€ dist/ # Compiled output (generated)
132
+ β”œβ”€β”€ scripts/ # Publishing scripts
133
+ β”‚ β”œβ”€β”€ publish.js # NPM publishing script
134
+ β”‚ └── version.js # Version bumping script
135
+ β”œβ”€β”€ package.json
136
+ β”œβ”€β”€ tsconfig.json
137
+ β”œβ”€β”€ biome.json
138
+ └── README.md
89
139
  ```
90
140
 
91
- ### Publishing Package
141
+ ## πŸ“€ Publishing
92
142
 
93
- To publish the package to npm:
143
+ ### Version Bumping
94
144
 
95
145
  ```bash
96
- pnpm run release
146
+ # Bump patch version (1.0.0 -> 1.0.1) for bug fixes
147
+ pnpm run version:patch
148
+
149
+ # Bump minor version (1.0.0 -> 1.1.0) for new features
150
+ pnpm run version:minor
151
+
152
+ # Bump major version (1.0.0 -> 2.0.0) for breaking changes
153
+ pnpm run version:major
97
154
  ```
98
155
 
99
- This script performs:
156
+ ### Publishing to NPM
157
+
158
+ ```bash
159
+ # Dry run (test publishing without actually publishing)
160
+ pnpm run publish:npm -- --dry-run
161
+
162
+ # Publish to npm with 'latest' tag
163
+ pnpm run publish:npm
100
164
 
101
- * Builds the package
102
- * Commits changes
103
- * Updates version (patch/minor/major)
104
- * Publishes to npm with public access
165
+ # Publish with a specific tag (e.g., beta)
166
+ pnpm run publish:npm -- --tag beta
167
+ ```
105
168
 
106
- Ensure all changes are committed and tests pass before publishing.
169
+ The publish script automatically:
170
+ - βœ… Checks git status
171
+ - βœ… Runs type checking
172
+ - βœ… Runs linting
173
+ - βœ… Builds the package
174
+ - βœ… Checks if version already exists
175
+ - βœ… Publishes to npm
176
+ - βœ… Creates and pushes git tag
107
177
 
108
- ## Using the Utilities
178
+ ## πŸ”„ Workflow
109
179
 
110
- ### TypeScript
180
+ ### Adding a New Feature
111
181
 
112
- Install the package:
182
+ 1. Create a new branch
183
+ ```bash
184
+ git checkout -b feat/new-utility
185
+ ```
113
186
 
114
- ```bash
115
- pnpm add @togatherlabs/shared-utils
116
- ```
187
+ 2. Make your changes and commit
188
+ ```bash
189
+ git add .
190
+ pnpm run commit # Uses commitizen for conventional commits
191
+ ```
117
192
 
118
- Example usage:
193
+ 3. Bump version
194
+ ```bash
195
+ pnpm run version:minor # or patch/major
196
+ ```
119
197
 
120
- ```ts
121
- import { formatDate, generateId, logger } from '@togatherlabs/shared-utils';
198
+ 4. Push changes
199
+ ```bash
200
+ git push origin feat/new-utility
201
+ git push --tags
202
+ ```
122
203
 
123
- // Format a date
124
- console.log(formatDate(new Date()));
204
+ 5. Publish to npm
205
+ ```bash
206
+ pnpm run publish:npm
207
+ ```
125
208
 
126
- // Generate a unique ID
127
- const id = generateId();
128
- console.log(id);
209
+ ## πŸ“‹ Commit Convention
210
+
211
+ This project uses [Conventional Commits](https://www.conventionalcommits.org/):
129
212
 
130
- // Log messages
131
- logger.info('Service started');
132
- logger.error('Failed to fetch data', { error: new Error('Network error') });
133
213
  ```
214
+ <type>(<scope>): <subject>
134
215
 
135
- ## Best Practices
216
+ <body>
217
+ ```
136
218
 
137
- * Keep utilities small and focused – each function should have a single responsibility.
138
- * Type safety – use TypeScript types/interfaces, avoid `any`.
139
- * Documentation – add JSDoc comments for each utility.
140
- * Testing – write unit tests for every new utility.
141
- * Consistent exports – always export utilities through `index.ts` files.
219
+ **Types:**
220
+ - `feat`: New feature
221
+ - `fix`: Bug fix
222
+ - `docs`: Documentation changes
223
+ - `style`: Code style changes (formatting)
224
+ - `refactor`: Code refactoring
225
+ - `test`: Adding or updating tests
226
+ - `chore`: Maintenance tasks
142
227
 
143
- ## Troubleshooting
228
+ **Example:**
229
+ ```
230
+ feat(logger): Add support for custom log formatters
231
+
232
+ Added a new option to Logger constructor that allows users to
233
+ provide custom formatters for log messages. This enables better
234
+ integration with external logging services.
235
+ ```
144
236
 
145
- **Cannot find module '@togatherlabs/shared-utils'**
237
+ Use `pnpm run commit` for an interactive commit prompt.
146
238
 
147
- * Ensure the package is installed
148
- * Check `tsconfig.json` paths if using path aliases
149
- * Delete `node_modules` and reinstall dependencies
239
+ ## πŸ§ͺ Testing
240
+
241
+ ```bash
242
+ # Run tests (when available)
243
+ pnpm test
244
+
245
+ # Run tests with coverage
246
+ pnpm test:coverage
247
+ ```
150
248
 
151
- **Property 'myFunction' does not exist**
249
+ ## πŸ“– Documentation
152
250
 
153
- * Ensure the function is exported correctly
154
- * Verify the import path matches the package export
251
+ - [Logger Documentation](./src/logger/README.md)
155
252
 
156
- **Build errors**
253
+ ## 🀝 Contributing
157
254
 
158
- * Check for missing peer dependencies
159
- * Ensure relative imports are correct
160
- * Clean and rebuild the project
255
+ 1. Follow the commit convention
256
+ 2. Write tests for new features
257
+ 3. Update documentation
258
+ 4. Ensure all checks pass before publishing
161
259
 
162
- **Version mismatches across services**
260
+ ## πŸ“„ License
163
261
 
164
- * Make sure all services use compatible versions of shared-utils
165
- * Check changelog for breaking changes
262
+ Internal use only - Togather Infrastructure
166
263
 
167
- **TypeScript declaration errors**
264
+ ## πŸ†˜ Support
168
265
 
169
- * Ensure `declaration: true` is set in `tsconfig.json`
170
- * Verify the `types` field in `package.json` points to the correct declaration file
171
- * Run `pnpm build` to regenerate type definitions
266
+ For questions or issues, contact the platform team.
172
267
 
173
- ## License
268
+ ## πŸ”— Related Packages
174
269
 
175
- MIT Β© ToGather Labs
270
+ - [@togatherlabs/shared-protos](../togather-shared-protos) - Shared Protocol Buffers
271
+ - [@togatherlabs/event-sdk](../togather-shared-events) - Event handling SDK
package/dist/index.d.ts CHANGED
@@ -1,4 +1,2 @@
1
- export * from "./constants/index.js";
2
- export * from "./helpers/index.js";
3
- export * from "./types/index.js";
1
+ export * from './logger/index.js';
4
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export * from "./constants/index.js";
2
- export * from "./helpers/index.js";
3
- export * from "./types/index.js";
1
+ // Main library exports
2
+ export * from './logger/index.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,cAAc,mBAAmB,CAAC"}
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Logger interface for structured logging.
3
+ */
4
+ export interface ILogger {
5
+ /**
6
+ * Log informational messages
7
+ *
8
+ * @param labels - Context object that can include:
9
+ * - `label`: string | string[] - Categorization labels (e.g., class name, method name, operation type)
10
+ * - Any other contextual data (userId, requestId, etc.)
11
+ * @param msg - Human-readable log message (supports string interpolation with args)
12
+ * @param args - Values for string interpolation in the message (e.g., logger.info({}, 'User %s logged in', userId))
13
+ *
14
+ * @example
15
+ * logger.info({ label: 'UserService' }, 'User created');
16
+ * logger.info({ label: ['UserService', 'createUser'] }, 'Creating user');
17
+ * logger.info({ userId: '123', label: 'UserService.createUser' }, 'User created successfully');
18
+ * logger.info({ label: 'UserService' }, 'User %s created with email %s', userId, email);
19
+ */
20
+ info(labels: object | string, msg?: string, ...args: unknown[]): void;
21
+ /**
22
+ * Log warning messages
23
+ *
24
+ * @param labels - Context object that can include:
25
+ * - `label`: string | string[] - Categorization labels (e.g., class name, method name, operation type)
26
+ * - Any other contextual data (userId, requestId, etc.)
27
+ * @param msg - Human-readable log message (supports string interpolation with args)
28
+ * @param args - Values for string interpolation in the message
29
+ *
30
+ * @example
31
+ * logger.warn({ label: 'RateLimiter' }, 'Rate limit approaching');
32
+ * logger.warn({ userId: '123', label: ['AuthService', 'login'] }, 'Multiple failed attempts');
33
+ * logger.warn({ label: 'RateLimiter' }, 'User %s exceeded %d requests', userId, maxRequests);
34
+ */
35
+ warn(labels: object | string, msg?: string, ...args: unknown[]): void;
36
+ /**
37
+ * Log error messages
38
+ *
39
+ * @param labels - Context object that can include:
40
+ * - `label`: string | string[] - Categorization labels (e.g., class name, method name, operation type)
41
+ * - `err`: Error - The error object for proper serialization
42
+ * - Any other contextual data (userId, requestId, etc.)
43
+ * @param msg - Human-readable log message (supports string interpolation with args)
44
+ * @param args - Values for string interpolation in the message
45
+ *
46
+ * @example
47
+ * logger.error({ err, label: 'DatabaseService' }, 'Connection failed');
48
+ * logger.error({ err, userId: '123', label: ['UserRepository', 'findById'] }, 'Query failed');
49
+ * logger.error({ err, label: 'DatabaseService' }, 'Failed to connect to %s on port %d', host, port);
50
+ */
51
+ error(labels: object | string, msg?: string, ...args: unknown[]): void;
52
+ /**
53
+ * Log debug messages
54
+ *
55
+ * @param labels - Context object that can include:
56
+ * - `label`: string | string[] - Categorization labels (e.g., class name, method name, operation type)
57
+ * - Any other contextual data (userId, requestId, etc.)
58
+ * @param msg - Human-readable log message (supports string interpolation with args)
59
+ * @param args - Values for string interpolation in the message
60
+ *
61
+ * @example
62
+ * logger.debug({ label: 'CacheService' }, 'Cache hit');
63
+ * logger.debug({ cacheKey: 'user:123', label: ['CacheService', 'get'] }, 'Retrieved from cache');
64
+ * logger.debug({ label: 'CacheService' }, 'Cache hit for key %s in %dms', cacheKey, duration);
65
+ */
66
+ debug(labels: object | string, msg?: string, ...args: unknown[]): void;
67
+ /**
68
+ * Log fatal messages (highest severity)
69
+ *
70
+ * @param labels - Context object that can include:
71
+ * - `label`: string | string[] - Categorization labels (e.g., class name, method name, operation type)
72
+ * - `err`: Error - The error object for proper serialization
73
+ * - Any other contextual data (userId, requestId, etc.)
74
+ * @param msg - Human-readable log message (supports string interpolation with args)
75
+ * @param args - Values for string interpolation in the message
76
+ *
77
+ * @example
78
+ * logger.fatal({ err, label: 'Application' }, 'Critical system failure');
79
+ * logger.fatal({ err, label: 'Application' }, 'System crashed after %d retries', retryCount);
80
+ */
81
+ fatal(labels: object | string, msg?: string, ...args: unknown[]): void;
82
+ /**
83
+ * Log trace messages (lowest severity)
84
+ *
85
+ * @param labels - Context object that can include:
86
+ * - `label`: string | string[] - Categorization labels (e.g., class name, method name, operation type)
87
+ * - Any other contextual data (userId, requestId, etc.)
88
+ * @param msg - Human-readable log message (supports string interpolation with args)
89
+ * @param args - Values for string interpolation in the message
90
+ *
91
+ * @example
92
+ * logger.trace({ label: ['UserService', 'createUser', 'validation'] }, 'Validating input');
93
+ * logger.trace({ label: 'UserService' }, 'Step %d: %s', stepNumber, stepName);
94
+ */
95
+ trace(labels: object | string, msg?: string, ...args: unknown[]): void;
96
+ }
97
+ //# sourceMappingURL=ILogger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ILogger.d.ts","sourceRoot":"","sources":["../../src/logger/ILogger.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,OAAO;IACvB;;;;;;;;;;;;;;OAcG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEtE;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEtE;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEvE;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEvE;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEvE;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CACvE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ILogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ILogger.js","sourceRoot":"","sources":["../../src/logger/ILogger.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export { ILogger } from './ILogger.js';
2
+ export { Logger, type LoggerConfig } from './logger.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Logger } from './logger.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { type LoggerOptions } from 'pino';
2
+ import type { ILogger } from './ILogger.js';
3
+ export interface LoggerConfig {
4
+ /** Node environment (e.g., 'development', 'production', 'test') */
5
+ nodeEnv?: string;
6
+ /** Log level (e.g., 'info', 'debug', 'warn', 'error') */
7
+ logLevel?: string;
8
+ /** Service name for log context */
9
+ serviceName?: string;
10
+ /** Hostname override */
11
+ hostname?: string;
12
+ }
13
+ /**
14
+ * Pino logger implementation with configurable options.
15
+ *
16
+ * @example
17
+ * // Minimal - uses defaults
18
+ * const logger = new Logger();
19
+ *
20
+ * @example
21
+ * // With environment config from service
22
+ * const logger = new Logger(undefined, {
23
+ * nodeEnv: process.env.NODE_ENV,
24
+ * logLevel: process.env.LOG_LEVEL,
25
+ * serviceName: process.env.SERVICE_NAME
26
+ * });
27
+ *
28
+ * @example
29
+ * // With custom Pino options
30
+ * const logger = new Logger({
31
+ * level: 'debug',
32
+ * base: { service: 'my-service', version: '1.0.0' }
33
+ * });
34
+ */
35
+ export declare class Logger implements ILogger {
36
+ private logger;
37
+ /**
38
+ * Creates a new Logger instance.
39
+ *
40
+ * @param options - logger options for advanced configuration
41
+ * @param config - Environment configuration passed from the service
42
+ */
43
+ constructor(options?: LoggerOptions, config?: LoggerConfig);
44
+ info(labels: object | string, msg?: string, ...args: unknown[]): void;
45
+ warn(labels: object | string, msg?: string, ...args: unknown[]): void;
46
+ error(labels: object | string, msg?: string, ...args: unknown[]): void;
47
+ debug(labels: object | string, msg?: string, ...args: unknown[]): void;
48
+ fatal(labels: object | string, msg?: string, ...args: unknown[]): void;
49
+ trace(labels: object | string, msg?: string, ...args: unknown[]): void;
50
+ }
51
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":"AAAA,OAAa,EAAqC,KAAK,aAAa,EAAE,MAAM,MAAM,CAAC;AAEnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,MAAM,WAAW,YAAY;IAC5B,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBACa,MAAO,YAAW,OAAO;IACrC,OAAO,CAAC,MAAM,CAAqB;IAEnC;;;;;OAKG;gBACS,OAAO,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,YAAY;IA8E1D,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIrE,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIrE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAItE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAItE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAItE,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;CAGtE"}
@@ -0,0 +1,138 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import pino from 'pino';
11
+ import { injectable } from 'inversify';
12
+ import { hostname } from 'node:os';
13
+ /**
14
+ * Pino logger implementation with configurable options.
15
+ *
16
+ * @example
17
+ * // Minimal - uses defaults
18
+ * const logger = new Logger();
19
+ *
20
+ * @example
21
+ * // With environment config from service
22
+ * const logger = new Logger(undefined, {
23
+ * nodeEnv: process.env.NODE_ENV,
24
+ * logLevel: process.env.LOG_LEVEL,
25
+ * serviceName: process.env.SERVICE_NAME
26
+ * });
27
+ *
28
+ * @example
29
+ * // With custom Pino options
30
+ * const logger = new Logger({
31
+ * level: 'debug',
32
+ * base: { service: 'my-service', version: '1.0.0' }
33
+ * });
34
+ */
35
+ let Logger = class Logger {
36
+ logger;
37
+ /**
38
+ * Creates a new Logger instance.
39
+ *
40
+ * @param options - logger options for advanced configuration
41
+ * @param config - Environment configuration passed from the service
42
+ */
43
+ constructor(options, config) {
44
+ const nodeEnv = config?.nodeEnv || 'development';
45
+ const isDevelopment = nodeEnv === 'development';
46
+ const isProduction = nodeEnv === 'production';
47
+ const defaultOptions = {
48
+ level: config?.logLevel || 'info',
49
+ base: {
50
+ pid: process.pid,
51
+ hostname: config?.hostname || hostname(),
52
+ service: config?.serviceName,
53
+ environment: nodeEnv,
54
+ },
55
+ timestamp: pino.stdTimeFunctions.isoTime,
56
+ // Error serialization for proper error logging
57
+ serializers: {
58
+ err: pino.stdSerializers.err,
59
+ error: pino.stdSerializers.err,
60
+ req: pino.stdSerializers.req,
61
+ res: pino.stdSerializers.res,
62
+ },
63
+ // Redact sensitive information in production
64
+ redact: {
65
+ paths: [
66
+ 'password',
67
+ '*.password',
68
+ 'token',
69
+ '*.token',
70
+ 'accessToken',
71
+ '*.accessToken',
72
+ 'refreshToken',
73
+ '*.refreshToken',
74
+ 'secret',
75
+ '*.secret',
76
+ 'authorization',
77
+ '*.authorization',
78
+ 'cookie',
79
+ '*.cookie',
80
+ 'apiKey',
81
+ '*.apiKey',
82
+ ],
83
+ remove: isProduction, // Remove in production, mask in development
84
+ },
85
+ // Pretty printing for development
86
+ transport: isDevelopment
87
+ ? {
88
+ target: 'pino-pretty',
89
+ options: {
90
+ colorize: true,
91
+ translateTime: 'HH:MM:ss Z',
92
+ ignore: 'pid,hostname',
93
+ singleLine: false,
94
+ messageFormat: '{levelLabel} - {msg}',
95
+ },
96
+ }
97
+ : undefined,
98
+ };
99
+ const mergedOptions = {
100
+ ...defaultOptions,
101
+ ...options,
102
+ base: {
103
+ ...defaultOptions.base,
104
+ ...(options?.base || {}),
105
+ },
106
+ serializers: {
107
+ ...defaultOptions.serializers,
108
+ ...(options?.serializers || {}),
109
+ },
110
+ redact: options?.redact !== undefined ? options.redact : defaultOptions.redact,
111
+ };
112
+ this.logger = pino(mergedOptions);
113
+ }
114
+ info(labels, msg, ...args) {
115
+ this.logger.info(labels, msg, ...args);
116
+ }
117
+ warn(labels, msg, ...args) {
118
+ this.logger.warn(labels, msg, ...args);
119
+ }
120
+ error(labels, msg, ...args) {
121
+ this.logger.error(labels, msg, ...args);
122
+ }
123
+ debug(labels, msg, ...args) {
124
+ this.logger.debug(labels, msg, ...args);
125
+ }
126
+ fatal(labels, msg, ...args) {
127
+ this.logger.fatal(labels, msg, ...args);
128
+ }
129
+ trace(labels, msg, ...args) {
130
+ this.logger.trace(labels, msg, ...args);
131
+ }
132
+ };
133
+ Logger = __decorate([
134
+ injectable(),
135
+ __metadata("design:paramtypes", [Object, Object])
136
+ ], Logger);
137
+ export { Logger };
138
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,88 +1,78 @@
1
1
  {
2
- "name": "@togatherlabs/shared-utils",
3
- "version": "1.0.10",
4
- "description": "Shared utility functions, constants, and types for ToGather microservices",
5
- "type": "module",
6
- "main": "dist/index.js",
7
- "types": "dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "import": "./dist/index.js",
11
- "require": "./dist/index.js",
12
- "types": "./dist/index.d.ts"
13
- },
14
- "./helpers": {
15
- "import": "./dist/helpers/index.js",
16
- "require": "./dist/helpers/index.js",
17
- "types": "./dist/helpers/index.d.ts"
18
- },
19
- "./constants": {
20
- "import": "./dist/constants/index.js",
21
- "require": "./dist/constants/index.js",
22
- "types": "./dist/constants/index.d.ts"
23
- },
24
- "./types": {
25
- "import": "./dist/types/index.js",
26
- "require": "./dist/types/index.js",
27
- "types": "./dist/types/index.d.ts"
28
- }
29
- },
30
- "files": [
31
- "dist"
32
- ],
33
- "keywords": [
34
- "shared",
35
- "utils",
36
- "togather",
37
- "microservices"
38
- ],
39
- "author": "toGather team",
40
- "license": "ISC",
41
- "devDependencies": {
42
- "@biomejs/biome": "^2.2.6",
43
- "@commitlint/cli": "^20.1.0",
44
- "@commitlint/config-conventional": "^20.0.0",
45
- "@commitlint/cz-commitlint": "^20.1.0",
46
- "@commitlint/types": "^20.0.0",
47
- "@tsconfig/node22": "^22.0.2",
48
- "@types/node": "^24.7.2",
49
- "@vitest/coverage-v8": "^3.2.4",
50
- "@vitest/ui": "^3.2.4",
51
- "commitizen": "^4.3.1",
52
- "husky": "^9.1.7",
53
- "inquirer": "^9.3.8",
54
- "ts-node": "^10.9.2",
55
- "typescript": "^5.9.3",
56
- "vitest": "^3.2.4"
57
- },
58
- "config": {
59
- "commitizen": {
60
- "path": "@commitlint/cz-commitlint"
61
- }
62
- },
63
- "publishConfig": {
64
- "access": "public"
65
- },
66
- "scripts": {
67
- "build": "tsc",
68
- "lint": "biome lint .",
69
- "lint:fix": "biome lint --write .",
70
- "format": "biome format .",
71
- "format:fix": "biome format --write .",
72
- "check": "biome check .",
73
- "check:fix": "biome check --write .",
74
- "typecheck": "tsc --noEmit",
75
- "test": "vitest run",
76
- "test:watch": "vitest",
77
- "test:coverage": "vitest run --coverage",
78
- "test:ui": "vitest --ui",
79
- "commit": "git-cz",
80
- "package:patch": "pnpm version patch",
81
- "package:minor": "pnpm version minor",
82
- "package:major": "pnpm version major",
83
- "package:publish": "pnpm publish --access public",
84
- "release:patch": "pnpm build && git add . && pnpm commit && pnpm package:patch && git push --follow-tags && pnpm package:publish",
85
- "release:minor": "pnpm build && git add . && pnpm commit && pnpm package:minor && git push --follow-tags && pnpm package:publish",
86
- "release:major": "pnpm build && git add . && pnpm commit && pnpm package:major && git push --follow-tags && pnpm package:publish"
87
- }
88
- }
2
+ "name": "@togatherlabs/shared-utils",
3
+ "version": "1.2.0",
4
+ "description": "Shared utilities for Togather services including logger, validators, and common helpers",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "scripts": {
9
+ "prepare": "husky",
10
+ "build": "tsc",
11
+ "typecheck": "tsc --noEmit",
12
+ "lint": "biome check .",
13
+ "lint:fix": "biome check . --write",
14
+ "format": "biome format . --write",
15
+ "clean": "rm -rf dist",
16
+ "prebuild": "pnpm run clean",
17
+ "prepublishOnly": "pnpm run build",
18
+ "commit": "cz",
19
+ "publish:npm": "./scripts/publish.sh",
20
+ "version:patch": "./scripts/version.sh patch",
21
+ "version:minor": "./scripts/version.sh minor",
22
+ "version:major": "./scripts/version.sh major"
23
+ },
24
+ "keywords": [
25
+ "togather",
26
+ "utilities",
27
+ "logger",
28
+ "pino",
29
+ "shared"
30
+ ],
31
+ "author": "Togather Team",
32
+ "license": "ISC",
33
+ "packageManager": "pnpm@10.7.1",
34
+ "files": [
35
+ "dist",
36
+ "README.md",
37
+ "LICENSE"
38
+ ],
39
+ "exports": {
40
+ ".": {
41
+ "import": "./dist/index.js",
42
+ "types": "./dist/index.d.ts"
43
+ },
44
+ "./logger": {
45
+ "import": "./dist/logger/index.js",
46
+ "types": "./dist/logger/index.d.ts"
47
+ }
48
+ },
49
+ "dependencies": {
50
+ "inversify": "^7.10.4",
51
+ "pino": "^10.1.0"
52
+ },
53
+ "devDependencies": {
54
+ "@biomejs/biome": "2.2.5",
55
+ "@commitlint/cli": "^20.1.0",
56
+ "@commitlint/config-conventional": "^20.0.0",
57
+ "@commitlint/cz-commitlint": "^20.1.0",
58
+ "@commitlint/types": "^20.0.0",
59
+ "@types/node": "^24.9.1",
60
+ "commitizen": "^4.3.1",
61
+ "husky": "^9.1.7",
62
+ "pino-pretty": "^13.1.2",
63
+ "typescript": "^5.9.3"
64
+ },
65
+ "peerDependencies": {
66
+ "pino-pretty": "^13.1.2"
67
+ },
68
+ "peerDependenciesMeta": {
69
+ "pino-pretty": {
70
+ "optional": true
71
+ }
72
+ },
73
+ "config": {
74
+ "commitizen": {
75
+ "path": "@commitlint/cz-commitlint"
76
+ }
77
+ }
78
+ }
@@ -1,2 +0,0 @@
1
- export * from "./sample.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
@@ -1 +0,0 @@
1
- export * from "./sample.js";
@@ -1,4 +0,0 @@
1
- export declare const SAMPLE: {
2
- Char: string;
3
- };
4
- //# sourceMappingURL=sample.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sample.d.ts","sourceRoot":"","sources":["../../src/constants/sample.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;CAElB,CAAC"}
@@ -1,3 +0,0 @@
1
- export const SAMPLE = {
2
- Char: "A",
3
- };
@@ -1,2 +0,0 @@
1
- export declare function formatDate(date: Date, locale?: string): string;
2
- //# sourceMappingURL=formatDate.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"formatDate.d.ts","sourceRoot":"","sources":["../../src/helpers/formatDate.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,SAAU,GAAG,MAAM,CAU/D"}
@@ -1,10 +0,0 @@
1
- export function formatDate(date, locale = "en-IN") {
2
- if (!(date instanceof Date) || Number.isNaN(date.getTime())) {
3
- throw new Error("Invalid Date");
4
- }
5
- return date.toLocaleDateString(locale, {
6
- year: "numeric",
7
- month: "short",
8
- day: "numeric",
9
- });
10
- }
@@ -1,2 +0,0 @@
1
- export * from "./formatDate.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -1 +0,0 @@
1
- export * from "./formatDate.js";
@@ -1,2 +0,0 @@
1
- export * from "./user.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC"}
@@ -1 +0,0 @@
1
- export * from "./user.js";
@@ -1,6 +0,0 @@
1
- export interface UserDTO {
2
- id: string;
3
- name: string;
4
- email: string;
5
- }
6
- //# sourceMappingURL=user.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../src/types/user.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf"}
@@ -1 +0,0 @@
1
- export {};