glasswork 0.1.1 → 0.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.
Files changed (120) hide show
  1. package/dist/config/config-service.d.ts +101 -0
  2. package/dist/config/config-service.d.ts.map +1 -0
  3. package/dist/config/config-service.js +164 -0
  4. package/dist/config/config-service.js.map +1 -0
  5. package/dist/config/helpers.d.ts +101 -0
  6. package/dist/config/helpers.d.ts.map +1 -0
  7. package/dist/config/helpers.js +122 -0
  8. package/dist/config/helpers.js.map +1 -0
  9. package/dist/config/index.d.ts +39 -0
  10. package/dist/config/index.d.ts.map +1 -0
  11. package/dist/config/index.js +41 -0
  12. package/dist/config/index.js.map +1 -0
  13. package/dist/config/providers.d.ts +163 -0
  14. package/dist/config/providers.d.ts.map +1 -0
  15. package/dist/config/providers.js +188 -0
  16. package/dist/config/providers.js.map +1 -0
  17. package/dist/config/types.d.ts +98 -0
  18. package/dist/config/types.d.ts.map +1 -0
  19. package/dist/config/types.js +7 -0
  20. package/dist/config/types.js.map +1 -0
  21. package/dist/core/bootstrap.js +9 -3
  22. package/dist/core/bootstrap.js.map +1 -1
  23. package/dist/core/types.d.ts +2 -1
  24. package/dist/core/types.d.ts.map +1 -1
  25. package/dist/http/errors.d.ts +39 -0
  26. package/dist/http/errors.d.ts.map +1 -1
  27. package/dist/http/errors.js +78 -0
  28. package/dist/http/errors.js.map +1 -1
  29. package/dist/http/route-helpers.d.ts +13 -6
  30. package/dist/http/route-helpers.d.ts.map +1 -1
  31. package/dist/http/route-helpers.js +29 -1
  32. package/dist/http/route-helpers.js.map +1 -1
  33. package/dist/index.d.ts +5 -3
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +9 -5
  36. package/dist/index.js.map +1 -1
  37. package/dist/middleware/rate-limit.d.ts.map +1 -1
  38. package/dist/middleware/rate-limit.js +2 -16
  39. package/dist/middleware/rate-limit.js.map +1 -1
  40. package/dist/openapi/openapi.d.ts +1 -1
  41. package/dist/openapi/openapi.d.ts.map +1 -1
  42. package/dist/openapi/openapi.js +21 -3
  43. package/dist/openapi/openapi.js.map +1 -1
  44. package/package.json +22 -1
  45. package/dist/bootstrap.d.ts +0 -55
  46. package/dist/bootstrap.d.ts.map +0 -1
  47. package/dist/bootstrap.js +0 -359
  48. package/dist/bootstrap.js.map +0 -1
  49. package/dist/environment.d.ts +0 -21
  50. package/dist/environment.d.ts.map +0 -1
  51. package/dist/environment.js +0 -29
  52. package/dist/environment.js.map +0 -1
  53. package/dist/error-handler.d.ts +0 -33
  54. package/dist/error-handler.d.ts.map +0 -1
  55. package/dist/error-handler.js +0 -53
  56. package/dist/error-handler.js.map +0 -1
  57. package/dist/errors.d.ts +0 -36
  58. package/dist/errors.d.ts.map +0 -1
  59. package/dist/errors.js +0 -65
  60. package/dist/errors.js.map +0 -1
  61. package/dist/get-client-ip.d.ts +0 -24
  62. package/dist/get-client-ip.d.ts.map +0 -1
  63. package/dist/get-client-ip.js +0 -49
  64. package/dist/get-client-ip.js.map +0 -1
  65. package/dist/logger.d.ts +0 -37
  66. package/dist/logger.d.ts.map +0 -1
  67. package/dist/logger.js +0 -52
  68. package/dist/logger.js.map +0 -1
  69. package/dist/module.d.ts +0 -21
  70. package/dist/module.d.ts.map +0 -1
  71. package/dist/module.js +0 -85
  72. package/dist/module.js.map +0 -1
  73. package/dist/omit.d.ts +0 -20
  74. package/dist/omit.d.ts.map +0 -1
  75. package/dist/omit.js +0 -28
  76. package/dist/omit.js.map +0 -1
  77. package/dist/openapi-defaults.d.ts +0 -11
  78. package/dist/openapi-defaults.d.ts.map +0 -1
  79. package/dist/openapi-defaults.js +0 -127
  80. package/dist/openapi-defaults.js.map +0 -1
  81. package/dist/openapi-hooks.d.ts +0 -14
  82. package/dist/openapi-hooks.d.ts.map +0 -1
  83. package/dist/openapi-hooks.js +0 -80
  84. package/dist/openapi-hooks.js.map +0 -1
  85. package/dist/openapi.d.ts +0 -24
  86. package/dist/openapi.d.ts.map +0 -1
  87. package/dist/openapi.js +0 -106
  88. package/dist/openapi.js.map +0 -1
  89. package/dist/pagination.d.ts +0 -48
  90. package/dist/pagination.d.ts.map +0 -1
  91. package/dist/pagination.js +0 -43
  92. package/dist/pagination.js.map +0 -1
  93. package/dist/pick.d.ts +0 -20
  94. package/dist/pick.d.ts.map +0 -1
  95. package/dist/pick.js +0 -28
  96. package/dist/pick.js.map +0 -1
  97. package/dist/rate-limit.d.ts +0 -7
  98. package/dist/rate-limit.d.ts.map +0 -1
  99. package/dist/rate-limit.js +0 -180
  100. package/dist/rate-limit.js.map +0 -1
  101. package/dist/route-helpers.d.ts +0 -172
  102. package/dist/route-helpers.d.ts.map +0 -1
  103. package/dist/route-helpers.js +0 -249
  104. package/dist/route-helpers.js.map +0 -1
  105. package/dist/serialize-dates.d.ts +0 -27
  106. package/dist/serialize-dates.d.ts.map +0 -1
  107. package/dist/serialize-dates.js +0 -39
  108. package/dist/serialize-dates.js.map +0 -1
  109. package/dist/testing.d.ts +0 -87
  110. package/dist/testing.d.ts.map +0 -1
  111. package/dist/testing.js +0 -94
  112. package/dist/testing.js.map +0 -1
  113. package/dist/types.d.ts +0 -273
  114. package/dist/types.d.ts.map +0 -1
  115. package/dist/types.js +0 -2
  116. package/dist/types.js.map +0 -1
  117. package/dist/utils.d.ts +0 -9
  118. package/dist/utils.d.ts.map +0 -1
  119. package/dist/utils.js +0 -31
  120. package/dist/utils.js.map +0 -1
package/dist/bootstrap.js DELETED
@@ -1,359 +0,0 @@
1
- import { asClass, asValue, createContainer, InjectionMode } from 'awilix';
2
- import { Hono } from 'hono';
3
- import { cors } from 'hono/cors';
4
- import { logger as honoLogger } from 'hono/logger';
5
- import { requestId } from 'hono/request-id';
6
- import { secureHeaders } from 'hono/secure-headers';
7
- import { isLambda } from './environment.js';
8
- import { defaultErrorHandler } from './error-handler.js';
9
- import { createPlainLogger } from './logger.js';
10
- import { configureOpenAPI } from './openapi.js';
11
- import { createRateLimitMiddleware } from './rate-limit.js';
12
- /**
13
- * Detect environment from NODE_ENV or AWS Lambda context
14
- */
15
- function detectEnvironment() {
16
- const nodeEnv = process.env.NODE_ENV;
17
- if (nodeEnv === 'production') {
18
- return 'production';
19
- }
20
- if (nodeEnv === 'test') {
21
- return 'test';
22
- }
23
- // Check if running in AWS Lambda
24
- if (process.env.AWS_LAMBDA_FUNCTION_NAME || process.env.LAMBDA_TASK_ROOT) {
25
- return 'production';
26
- }
27
- return 'development';
28
- }
29
- /**
30
- * Bootstrap the application with modules.
31
- *
32
- * This function:
33
- * 1. Creates an Awilix container (PROXY mode for Lambda compatibility)
34
- * 2. Registers all module providers
35
- * 3. Creates a Hono app
36
- * 4. Applies rate limiting middleware (if configured)
37
- * 5. Configures OpenAPI (environment-aware)
38
- * 6. Mounts module routes
39
- * 7. Returns both app and container (container remains accessible!)
40
- *
41
- * Features:
42
- * - Automatic environment detection (development/production/test)
43
- * - OpenAPI generation and serving (environment-aware)
44
- * - Rate limiting with pluggable storage (memory/DynamoDB)
45
- * - Module system with dependency injection
46
- *
47
- * @example
48
- * ```typescript
49
- * const { app, container } = bootstrap(AppModule, {
50
- * openapi: {
51
- * enabled: true,
52
- * documentation: { ... }
53
- * },
54
- * rateLimit: {
55
- * enabled: true,
56
- * storage: 'memory'
57
- * }
58
- * });
59
- *
60
- * // Container is still accessible for advanced use
61
- * console.log(container.cradle.authService);
62
- * container.register({ customService: asClass(CustomService) });
63
- * ```
64
- */
65
- export function bootstrap(rootModule, options = {}) {
66
- const { apiBasePath = '/api', debug = false, environment = detectEnvironment(), errorHandler = defaultErrorHandler, openapi, rateLimit, middleware, logger, } = options;
67
- // Create Awilix container with PROXY mode (Lambda-compatible)
68
- const container = createContainer({
69
- injectionMode: InjectionMode.PROXY,
70
- strict: true,
71
- });
72
- if (debug) {
73
- console.log('[Glasswork] Bootstrapping application...');
74
- }
75
- // Collect all modules (flatten imports)
76
- const allModules = collectModules(rootModule);
77
- if (debug) {
78
- console.log(`[Glasswork] Found ${allModules.length} modules:`, allModules.map((m) => m.name).join(', '));
79
- }
80
- // Validate no circular dependencies
81
- validateNoCycles(allModules);
82
- // Register all providers
83
- for (const module of allModules) {
84
- if (debug) {
85
- console.log(`[Glasswork] Registering module: ${module.name}`);
86
- }
87
- registerModuleProviders(module, container, debug);
88
- }
89
- // Create Hono app and apply middleware
90
- const app = createApp({
91
- environment,
92
- errorHandler,
93
- openapi,
94
- rateLimit,
95
- middleware,
96
- logger,
97
- debug,
98
- });
99
- // Mount module routes
100
- mountModuleRoutes({ app, modules: allModules, container, apiBasePath, debug });
101
- if (debug) {
102
- console.log('[Glasswork] Bootstrap complete');
103
- console.log(`[Glasswork] Environment: ${environment}`);
104
- console.log(`[Glasswork] Registered ${Object.keys(container.cradle).length} services`);
105
- }
106
- return { app, container };
107
- }
108
- /**
109
- * Create Hono app and apply middleware
110
- */
111
- function createApp(options) {
112
- const app = new Hono();
113
- applyErrorHandler(app, options);
114
- applySecurityMiddleware(app, options);
115
- applyLoggingMiddleware(app, options);
116
- applyRateLimiting(app, options);
117
- applyOpenAPIDocumentation(app, options);
118
- return app;
119
- }
120
- /**
121
- * Apply error handler to the app
122
- */
123
- function applyErrorHandler(app, { errorHandler, debug }) {
124
- if (errorHandler === false)
125
- return;
126
- if (debug) {
127
- console.log('[Glasswork] Applying error handler');
128
- }
129
- app.onError(errorHandler);
130
- }
131
- /**
132
- * Apply security-related middleware (secure headers, request ID, CORS)
133
- */
134
- function applySecurityMiddleware(app, { environment, middleware, debug, }) {
135
- // Secure headers (default: true in production)
136
- if (middleware?.secureHeaders !== false && environment === 'production') {
137
- if (debug) {
138
- console.log('[Glasswork] Applying secure headers');
139
- }
140
- app.use(secureHeaders());
141
- }
142
- // Request ID (default: true)
143
- if (middleware?.requestId !== false) {
144
- if (debug) {
145
- console.log('[Glasswork] Applying request ID middleware');
146
- }
147
- app.use(requestId());
148
- }
149
- // CORS
150
- if (middleware?.cors) {
151
- if (debug) {
152
- console.log('[Glasswork] Applying CORS middleware');
153
- }
154
- app.use(cors(middleware.cors));
155
- }
156
- }
157
- /**
158
- * Apply logging middleware
159
- */
160
- function applyLoggingMiddleware(app, { logger, debug }) {
161
- if (logger?.enabled === false)
162
- return;
163
- // Auto-detect plain mode based on environment if not specified
164
- const usePlainLogger = logger?.plain ?? isLambda();
165
- if (debug) {
166
- console.log(`[Glasswork] Applying logger (plain: ${usePlainLogger})`);
167
- }
168
- app.use(usePlainLogger ? createPlainLogger() : honoLogger());
169
- }
170
- /**
171
- * Apply rate limiting middleware
172
- */
173
- function applyRateLimiting(app, { rateLimit, debug }) {
174
- if (!rateLimit?.enabled)
175
- return;
176
- if (debug) {
177
- console.log(`[Glasswork] Rate limiting enabled (${rateLimit.storage} storage, ${rateLimit.maxRequests || 100} req/${rateLimit.windowMs || 60000}ms)`);
178
- }
179
- app.use(createRateLimitMiddleware(rateLimit));
180
- }
181
- /**
182
- * Apply OpenAPI documentation
183
- */
184
- function applyOpenAPIDocumentation(app, options) {
185
- const { environment, openapi, rateLimit, middleware, debug } = options;
186
- if (!openapi?.enabled)
187
- return;
188
- if (debug) {
189
- console.log('[Glasswork] Configuring OpenAPI');
190
- }
191
- configureOpenAPI({ app, environment, openapi, rateLimit, middleware });
192
- }
193
- /**
194
- * Mount module routes to the app
195
- */
196
- function mountModuleRoutes(options) {
197
- const { app, modules, container, apiBasePath, debug } = options;
198
- for (const module of modules) {
199
- if (!module.routes || !module.basePath) {
200
- continue;
201
- }
202
- if (debug) {
203
- console.log(`[Glasswork] Mounting routes: ${apiBasePath}/${module.basePath}`);
204
- }
205
- const router = new Hono();
206
- // Call route factory with router and services
207
- module.routes(router, container.cradle);
208
- // Mount at base path
209
- app.route(`${apiBasePath}/${module.basePath}`, router);
210
- }
211
- }
212
- /**
213
- * Collect all modules (flatten imports recursively)
214
- * @internal - exported for testing utilities
215
- */
216
- export function collectModules(rootModule) {
217
- const modules = new Map();
218
- const visited = new Set();
219
- function collect(module) {
220
- if (visited.has(module.name)) {
221
- return;
222
- }
223
- visited.add(module.name);
224
- modules.set(module.name, module);
225
- // Recursively collect imports
226
- if (module.imports) {
227
- for (const importedModule of module.imports) {
228
- collect(importedModule);
229
- }
230
- }
231
- }
232
- collect(rootModule);
233
- return Array.from(modules.values());
234
- }
235
- /**
236
- * Validate no circular dependencies between modules
237
- * @internal - exported for testing utilities
238
- */
239
- export function validateNoCycles(modules) {
240
- const graph = new Map();
241
- // Build dependency graph
242
- for (const module of modules) {
243
- if (!graph.has(module.name)) {
244
- graph.set(module.name, new Set());
245
- }
246
- if (module.imports) {
247
- for (const importedModule of module.imports) {
248
- graph.get(module.name)?.add(importedModule.name);
249
- }
250
- }
251
- }
252
- // Detect cycles using DFS
253
- const visiting = new Set();
254
- const visited = new Set();
255
- function visit(name, path) {
256
- if (visiting.has(name)) {
257
- throw new Error(`Circular dependency detected: ${[...path, name].join(' -> ')}`);
258
- }
259
- if (visited.has(name)) {
260
- return;
261
- }
262
- visiting.add(name);
263
- const dependencies = graph.get(name) || new Set();
264
- for (const dep of dependencies) {
265
- visit(dep, [...path, name]);
266
- }
267
- visiting.delete(name);
268
- visited.add(name);
269
- }
270
- for (const module of modules) {
271
- visit(module.name, []);
272
- }
273
- }
274
- /**
275
- * Register module providers with Awilix container
276
- * @internal - exported for testing utilities
277
- */
278
- export function registerModuleProviders(module, container, debug = false) {
279
- if (!module.providers) {
280
- return;
281
- }
282
- for (const provider of module.providers) {
283
- registerProvider(provider, container, module.name, debug);
284
- }
285
- }
286
- /**
287
- * Register a single provider with Awilix
288
- */
289
- function registerProvider(provider, container, moduleName, debug) {
290
- if (typeof provider === 'function') {
291
- registerClassProvider(provider, container, debug);
292
- return;
293
- }
294
- if ('useClass' in provider) {
295
- registerExplicitClassProvider(provider, container, debug);
296
- return;
297
- }
298
- if ('useValue' in provider) {
299
- registerValueProvider(provider, container, debug);
300
- return;
301
- }
302
- if ('useFactory' in provider) {
303
- registerFactoryProvider(provider, container, debug);
304
- return;
305
- }
306
- throw new Error(`Invalid provider configuration in module "${moduleName}"`);
307
- }
308
- function registerClassProvider(provider, container, debug) {
309
- const name = camelCase(provider.name);
310
- if (debug) {
311
- console.log(` - Registering ${name} (${provider.name})`);
312
- }
313
- container.register({
314
- [name]: asClass(provider).singleton(),
315
- });
316
- }
317
- function registerExplicitClassProvider(provider, container, debug) {
318
- const name = typeof provider.provide === 'string' ? provider.provide : camelCase(provider.provide.name);
319
- const scope = provider.scope || 'SINGLETON';
320
- if (debug) {
321
- console.log(` - Registering ${name} (scope: ${scope})`);
322
- }
323
- const registration = asClass(provider.useClass);
324
- container.register({
325
- [name]: applyScopeToRegistration(registration, scope),
326
- });
327
- }
328
- function registerValueProvider(provider, container, debug) {
329
- if (debug) {
330
- console.log(` - Registering ${provider.provide} (value)`);
331
- }
332
- container.register({
333
- [provider.provide]: asValue(provider.useValue),
334
- });
335
- }
336
- function registerFactoryProvider(provider, container, debug) {
337
- if (debug) {
338
- console.log(` - Registering ${provider.provide} (factory)`);
339
- }
340
- container.register({
341
- [provider.provide]: asValue(provider.useFactory(container)),
342
- });
343
- }
344
- function applyScopeToRegistration(registration, scope) {
345
- if (scope === 'SCOPED') {
346
- return registration.scoped();
347
- }
348
- if (scope === 'TRANSIENT') {
349
- return registration.transient();
350
- }
351
- return registration.singleton();
352
- }
353
- /**
354
- * Convert PascalCase to camelCase
355
- */
356
- function camelCase(str) {
357
- return str.charAt(0).toLowerCase() + str.slice(1);
358
- }
359
- //# sourceMappingURL=bootstrap.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Environment detection utilities for serverless and local development.
3
- */
4
- /**
5
- * Check if running in AWS Lambda environment
6
- */
7
- export declare function isLambda(): boolean;
8
- /**
9
- * Check if running in production environment
10
- * (either NODE_ENV=production or in Lambda)
11
- */
12
- export declare function isProduction(): boolean;
13
- /**
14
- * Check if running in test environment
15
- */
16
- export declare function isTest(): boolean;
17
- /**
18
- * Check if running in development environment
19
- */
20
- export declare function isDevelopment(): boolean;
21
- //# sourceMappingURL=environment.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAElC;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,OAAO,CAEhC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Environment detection utilities for serverless and local development.
3
- */
4
- /**
5
- * Check if running in AWS Lambda environment
6
- */
7
- export function isLambda() {
8
- return !!(process.env.AWS_LAMBDA_FUNCTION_NAME || process.env.LAMBDA_TASK_ROOT);
9
- }
10
- /**
11
- * Check if running in production environment
12
- * (either NODE_ENV=production or in Lambda)
13
- */
14
- export function isProduction() {
15
- return process.env.NODE_ENV === 'production' || isLambda();
16
- }
17
- /**
18
- * Check if running in test environment
19
- */
20
- export function isTest() {
21
- return process.env.NODE_ENV === 'test';
22
- }
23
- /**
24
- * Check if running in development environment
25
- */
26
- export function isDevelopment() {
27
- return !isProduction() && !isTest();
28
- }
29
- //# sourceMappingURL=environment.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAClF,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,IAAI,QAAQ,EAAE,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,MAAM;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACtC,CAAC"}
@@ -1,33 +0,0 @@
1
- import type { Context, ErrorHandler } from 'hono';
2
- import type { ContentfulStatusCode } from 'hono/utils/http-status';
3
- interface FormattedError {
4
- message: string;
5
- statusCode: ContentfulStatusCode;
6
- }
7
- interface ErrorHandlerOptions {
8
- /**
9
- * Whether to log errors to console
10
- * @default true in development, false in test
11
- */
12
- logErrors?: boolean;
13
- /**
14
- * Custom error response handler
15
- */
16
- responseHandler?: (error: FormattedError, context: Context) => Response | Promise<Response>;
17
- }
18
- /**
19
- * Create an error handler middleware for Hono
20
- *
21
- * Handles:
22
- * - DomainException (custom business logic exceptions)
23
- * - HTTPException (Hono's built-in HTTP exceptions)
24
- * - Validation errors (returns 422)
25
- * - Generic errors (returns 500)
26
- */
27
- export declare function createErrorHandler(options?: ErrorHandlerOptions): ErrorHandler;
28
- /**
29
- * Default error handler instance
30
- */
31
- export declare const defaultErrorHandler: ErrorHandler;
32
- export {};
33
- //# sourceMappingURL=error-handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-handler.d.ts","sourceRoot":"","sources":["../src/error-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAElD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAGnE,UAAU,cAAc;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,oBAAoB,CAAC;CAClC;AAED,UAAU,mBAAmB;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC7F;AAcD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,mBAAwB,GAAG,YAAY,CA+BlF;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,cAAuB,CAAC"}
@@ -1,53 +0,0 @@
1
- import { HTTPException } from 'hono/http-exception';
2
- import { DomainException, getStatusCodeFromErrorCode } from './errors.js';
3
- /**
4
- * Default response handler - returns JSON error
5
- */
6
- function defaultResponseHandler(error, context) {
7
- return context.json({
8
- error: error.message,
9
- }, error.statusCode);
10
- }
11
- /**
12
- * Create an error handler middleware for Hono
13
- *
14
- * Handles:
15
- * - DomainException (custom business logic exceptions)
16
- * - HTTPException (Hono's built-in HTTP exceptions)
17
- * - Validation errors (returns 422)
18
- * - Generic errors (returns 500)
19
- */
20
- export function createErrorHandler(options = {}) {
21
- const { logErrors = process.env.NODE_ENV !== 'test', responseHandler = defaultResponseHandler } = options;
22
- return (err, context) => {
23
- let error;
24
- if (err instanceof DomainException) {
25
- const statusCode = getStatusCodeFromErrorCode(err.code);
26
- error = { message: err.message, statusCode: statusCode };
27
- if (logErrors && statusCode === 500) {
28
- console.error('[Glasswork] DomainException with unknown code:', err);
29
- }
30
- }
31
- else if (err instanceof HTTPException) {
32
- error = {
33
- message: err.message,
34
- statusCode: err.status,
35
- };
36
- }
37
- else {
38
- if (logErrors) {
39
- console.error('[Glasswork] Unhandled error:', err);
40
- }
41
- error = {
42
- message: 'Internal server error',
43
- statusCode: 500,
44
- };
45
- }
46
- return responseHandler(error, context);
47
- };
48
- }
49
- /**
50
- * Default error handler instance
51
- */
52
- export const defaultErrorHandler = createErrorHandler();
53
- //# sourceMappingURL=error-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../src/error-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAmB1E;;GAEG;AACH,SAAS,sBAAsB,CAAC,KAAqB,EAAE,OAAgB;IACrE,OAAO,OAAO,CAAC,IAAI,CACjB;QACE,KAAK,EAAE,KAAK,CAAC,OAAO;KACrB,EACD,KAAK,CAAC,UAAU,CACjB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,UAA+B,EAAE;IAClE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,eAAe,GAAG,sBAAsB,EAAE,GAC7F,OAAO,CAAC;IAEV,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QACtB,IAAI,KAAqB,CAAC;QAE1B,IAAI,GAAG,YAAY,eAAe,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,0BAA0B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACxD,KAAK,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,UAAkC,EAAE,CAAC;YAEjF,IAAI,SAAS,IAAI,UAAU,KAAK,GAAG,EAAE,CAAC;gBACpC,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,GAAG,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,YAAY,aAAa,EAAE,CAAC;YACxC,KAAK,GAAG;gBACN,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,UAAU,EAAE,GAAG,CAAC,MAAM;aACvB,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC;YACD,KAAK,GAAG;gBACN,OAAO,EAAE,uBAAuB;gBAChC,UAAU,EAAE,GAAG;aAChB,CAAC;QACJ,CAAC;QAED,OAAO,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,EAAE,CAAC"}
package/dist/errors.d.ts DELETED
@@ -1,36 +0,0 @@
1
- /**
2
- * Base domain exception class for business logic errors
3
- */
4
- export declare class DomainException extends Error {
5
- readonly code: string;
6
- constructor(message: string, code: string);
7
- }
8
- /**
9
- * Standard HTTP exception classes
10
- */
11
- export declare class ValidationException extends DomainException {
12
- constructor(message?: string);
13
- }
14
- export declare class UnauthorizedException extends DomainException {
15
- constructor(message?: string);
16
- }
17
- export declare class NotFoundException extends DomainException {
18
- constructor(message?: string);
19
- }
20
- export declare class ConflictException extends DomainException {
21
- constructor(message?: string);
22
- }
23
- export declare class ForbiddenException extends DomainException {
24
- constructor(message?: string);
25
- }
26
- export declare class BadRequestException extends DomainException {
27
- constructor(message?: string);
28
- }
29
- export declare class TooManyRequestsException extends DomainException {
30
- constructor(message?: string);
31
- }
32
- /**
33
- * Map error codes to HTTP status codes
34
- */
35
- export declare function getStatusCodeFromErrorCode(code: string): number;
36
- //# sourceMappingURL=errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,IAAI,EAAE,MAAM;gBAD5B,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM;CAK/B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,SAAqB;CAGzC;AAED,qBAAa,qBAAsB,SAAQ,eAAe;gBAC5C,OAAO,SAAiB;CAGrC;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,OAAO,SAAc;CAGlC;AAED,qBAAa,iBAAkB,SAAQ,eAAe;gBACxC,OAAO,SAAa;CAGjC;AAED,qBAAa,kBAAmB,SAAQ,eAAe;gBACzC,OAAO,SAAc;CAGlC;AAED,qBAAa,mBAAoB,SAAQ,eAAe;gBAC1C,OAAO,SAAgB;CAGpC;AAED,qBAAa,wBAAyB,SAAQ,eAAe;gBAC/C,OAAO,SAAsB;CAG1C;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY/D"}
package/dist/errors.js DELETED
@@ -1,65 +0,0 @@
1
- /**
2
- * Base domain exception class for business logic errors
3
- */
4
- export class DomainException extends Error {
5
- code;
6
- constructor(message, code) {
7
- super(message);
8
- this.code = code;
9
- this.name = this.constructor.name;
10
- }
11
- }
12
- /**
13
- * Standard HTTP exception classes
14
- */
15
- export class ValidationException extends DomainException {
16
- constructor(message = 'Validation error') {
17
- super(message, 'VALIDATION_ERROR');
18
- }
19
- }
20
- export class UnauthorizedException extends DomainException {
21
- constructor(message = 'Unauthorized') {
22
- super(message, 'UNAUTHORIZED');
23
- }
24
- }
25
- export class NotFoundException extends DomainException {
26
- constructor(message = 'Not found') {
27
- super(message, 'NOT_FOUND');
28
- }
29
- }
30
- export class ConflictException extends DomainException {
31
- constructor(message = 'Conflict') {
32
- super(message, 'CONFLICT');
33
- }
34
- }
35
- export class ForbiddenException extends DomainException {
36
- constructor(message = 'Forbidden') {
37
- super(message, 'FORBIDDEN');
38
- }
39
- }
40
- export class BadRequestException extends DomainException {
41
- constructor(message = 'Bad request') {
42
- super(message, 'BAD_REQUEST');
43
- }
44
- }
45
- export class TooManyRequestsException extends DomainException {
46
- constructor(message = 'Too many requests') {
47
- super(message, 'TOO_MANY_REQUESTS');
48
- }
49
- }
50
- /**
51
- * Map error codes to HTTP status codes
52
- */
53
- export function getStatusCodeFromErrorCode(code) {
54
- const codeMap = {
55
- BAD_REQUEST: 400,
56
- UNAUTHORIZED: 401,
57
- FORBIDDEN: 403,
58
- NOT_FOUND: 404,
59
- CONFLICT: 409,
60
- VALIDATION_ERROR: 422,
61
- TOO_MANY_REQUESTS: 429,
62
- };
63
- return codeMap[code] || 500;
64
- }
65
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGtB;IAFlB,YACE,OAAe,EACC,IAAY;QAE5B,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,SAAI,GAAJ,IAAI,CAAQ;QAG5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAO,GAAG,kBAAkB;QACtC,KAAK,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IACrC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IACxD,YAAY,OAAO,GAAG,cAAc;QAClC,KAAK,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IACpD,YAAY,OAAO,GAAG,WAAW;QAC/B,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IACpD,YAAY,OAAO,GAAG,UAAU;QAC9B,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,eAAe;IACrD,YAAY,OAAO,GAAG,WAAW;QAC/B,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,eAAe;IACtD,YAAY,OAAO,GAAG,aAAa;QACjC,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,eAAe;IAC3D,YAAY,OAAO,GAAG,mBAAmB;QACvC,KAAK,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;IACtC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAY;IACrD,MAAM,OAAO,GAA2B;QACtC,WAAW,EAAE,GAAG;QAChB,YAAY,EAAE,GAAG;QACjB,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,GAAG;QACd,QAAQ,EAAE,GAAG;QACb,gBAAgB,EAAE,GAAG;QACrB,iBAAiB,EAAE,GAAG;KACvB,CAAC;IAEF,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC;AAC9B,CAAC"}
@@ -1,24 +0,0 @@
1
- import type { Context } from 'hono';
2
- /**
3
- * Extract the client IP address from Hono context.
4
- *
5
- * Checks headers in order:
6
- * 1. x-forwarded-for (proxy/load balancer)
7
- * 2. x-real-ip (nginx)
8
- * 3. Direct connection info (if available)
9
- *
10
- * @param c - Hono context
11
- * @returns Client IP address or 'unknown' if not determinable
12
- *
13
- * @example
14
- * ```typescript
15
- * router.post('/login', route({
16
- * handler: async ({ ip }) => {
17
- * // ip is automatically populated
18
- * await authService.logLoginAttempt(email, ip);
19
- * }
20
- * }));
21
- * ```
22
- */
23
- export declare function getClientIp(c: Context): string;
24
- //# sourceMappingURL=get-client-ip.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-client-ip.d.ts","sourceRoot":"","sources":["../src/get-client-ip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CA0B9C"}