@arcraz/common 1.0.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 (174) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +373 -0
  3. package/dist/aws/bedrock/client-factory.d.ts +45 -0
  4. package/dist/aws/bedrock/client-factory.d.ts.map +1 -0
  5. package/dist/aws/bedrock/client-factory.js +113 -0
  6. package/dist/aws/bedrock/index.d.ts +3 -0
  7. package/dist/aws/bedrock/index.d.ts.map +1 -0
  8. package/dist/aws/bedrock/index.js +1 -0
  9. package/dist/aws/bedrock/types.d.ts +95 -0
  10. package/dist/aws/bedrock/types.d.ts.map +1 -0
  11. package/dist/aws/bedrock/types.js +1 -0
  12. package/dist/aws/cloudfront/index.d.ts +3 -0
  13. package/dist/aws/cloudfront/index.d.ts.map +1 -0
  14. package/dist/aws/cloudfront/index.js +1 -0
  15. package/dist/aws/cloudfront/signer-factory.d.ts +36 -0
  16. package/dist/aws/cloudfront/signer-factory.d.ts.map +1 -0
  17. package/dist/aws/cloudfront/signer-factory.js +75 -0
  18. package/dist/aws/cloudfront/types.d.ts +52 -0
  19. package/dist/aws/cloudfront/types.d.ts.map +1 -0
  20. package/dist/aws/cloudfront/types.js +1 -0
  21. package/dist/aws/s3/client-factory.d.ts +13 -0
  22. package/dist/aws/s3/client-factory.d.ts.map +1 -0
  23. package/dist/aws/s3/client-factory.js +25 -0
  24. package/dist/aws/s3/index.d.ts +4 -0
  25. package/dist/aws/s3/index.d.ts.map +1 -0
  26. package/dist/aws/s3/index.js +2 -0
  27. package/dist/aws/s3/operations.d.ts +106 -0
  28. package/dist/aws/s3/operations.d.ts.map +1 -0
  29. package/dist/aws/s3/operations.js +234 -0
  30. package/dist/aws/s3/types.d.ts +88 -0
  31. package/dist/aws/s3/types.d.ts.map +1 -0
  32. package/dist/aws/s3/types.js +1 -0
  33. package/dist/caches/api-cache.d.ts +40 -0
  34. package/dist/caches/api-cache.d.ts.map +1 -0
  35. package/dist/caches/api-cache.js +65 -0
  36. package/dist/caches/database-cache.d.ts +40 -0
  37. package/dist/caches/database-cache.d.ts.map +1 -0
  38. package/dist/caches/database-cache.js +65 -0
  39. package/dist/caches/index.d.ts +3 -0
  40. package/dist/caches/index.d.ts.map +1 -0
  41. package/dist/caches/index.js +2 -0
  42. package/dist/config/env-loader.d.ts +28 -0
  43. package/dist/config/env-loader.d.ts.map +1 -0
  44. package/dist/config/env-loader.js +39 -0
  45. package/dist/config/index.d.ts +5 -0
  46. package/dist/config/index.d.ts.map +1 -0
  47. package/dist/config/index.js +2 -0
  48. package/dist/config/schemas.d.ts +193 -0
  49. package/dist/config/schemas.d.ts.map +1 -0
  50. package/dist/config/schemas.js +92 -0
  51. package/dist/config/types.d.ts +23 -0
  52. package/dist/config/types.d.ts.map +1 -0
  53. package/dist/config/types.js +2 -0
  54. package/dist/constants/cache-durations.d.ts +29 -0
  55. package/dist/constants/cache-durations.d.ts.map +1 -0
  56. package/dist/constants/cache-durations.js +27 -0
  57. package/dist/constants/defaults.d.ts +50 -0
  58. package/dist/constants/defaults.d.ts.map +1 -0
  59. package/dist/constants/defaults.js +49 -0
  60. package/dist/constants/index.d.ts +4 -0
  61. package/dist/constants/index.d.ts.map +1 -0
  62. package/dist/constants/index.js +2 -0
  63. package/dist/database/base-repository.d.ts +45 -0
  64. package/dist/database/base-repository.d.ts.map +1 -0
  65. package/dist/database/base-repository.js +57 -0
  66. package/dist/database/helpers/converter-helper.d.ts +9 -0
  67. package/dist/database/helpers/converter-helper.d.ts.map +1 -0
  68. package/dist/database/helpers/converter-helper.js +20 -0
  69. package/dist/database/helpers/index.d.ts +3 -0
  70. package/dist/database/helpers/index.d.ts.map +1 -0
  71. package/dist/database/helpers/index.js +2 -0
  72. package/dist/database/helpers/paged-response-helper.d.ts +33 -0
  73. package/dist/database/helpers/paged-response-helper.d.ts.map +1 -0
  74. package/dist/database/helpers/paged-response-helper.js +64 -0
  75. package/dist/database/index.d.ts +6 -0
  76. package/dist/database/index.d.ts.map +1 -0
  77. package/dist/database/index.js +4 -0
  78. package/dist/database/pool-factory.d.ts +24 -0
  79. package/dist/database/pool-factory.d.ts.map +1 -0
  80. package/dist/database/pool-factory.js +91 -0
  81. package/dist/database/query-helpers.d.ts +36 -0
  82. package/dist/database/query-helpers.d.ts.map +1 -0
  83. package/dist/database/query-helpers.js +68 -0
  84. package/dist/database/types.d.ts +55 -0
  85. package/dist/database/types.d.ts.map +1 -0
  86. package/dist/database/types.js +1 -0
  87. package/dist/helpers/data-obscurer.d.ts +18 -0
  88. package/dist/helpers/data-obscurer.d.ts.map +1 -0
  89. package/dist/helpers/data-obscurer.js +29 -0
  90. package/dist/helpers/enum-converters.d.ts +27 -0
  91. package/dist/helpers/enum-converters.d.ts.map +1 -0
  92. package/dist/helpers/enum-converters.js +37 -0
  93. package/dist/helpers/index.d.ts +5 -0
  94. package/dist/helpers/index.d.ts.map +1 -0
  95. package/dist/helpers/index.js +3 -0
  96. package/dist/helpers/remove-sensitive-values.d.ts +20 -0
  97. package/dist/helpers/remove-sensitive-values.d.ts.map +1 -0
  98. package/dist/helpers/remove-sensitive-values.js +72 -0
  99. package/dist/index.d.ts +11 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +20 -0
  102. package/dist/logging/formatters.d.ts +19 -0
  103. package/dist/logging/formatters.d.ts.map +1 -0
  104. package/dist/logging/formatters.js +94 -0
  105. package/dist/logging/index.d.ts +4 -0
  106. package/dist/logging/index.d.ts.map +1 -0
  107. package/dist/logging/index.js +2 -0
  108. package/dist/logging/logger-factory.d.ts +8 -0
  109. package/dist/logging/logger-factory.d.ts.map +1 -0
  110. package/dist/logging/logger-factory.js +86 -0
  111. package/dist/logging/types.d.ts +52 -0
  112. package/dist/logging/types.d.ts.map +1 -0
  113. package/dist/logging/types.js +1 -0
  114. package/dist/rabbitmq/connection-factory.d.ts +8 -0
  115. package/dist/rabbitmq/connection-factory.d.ts.map +1 -0
  116. package/dist/rabbitmq/connection-factory.js +117 -0
  117. package/dist/rabbitmq/consumer.d.ts +44 -0
  118. package/dist/rabbitmq/consumer.d.ts.map +1 -0
  119. package/dist/rabbitmq/consumer.js +107 -0
  120. package/dist/rabbitmq/index.d.ts +6 -0
  121. package/dist/rabbitmq/index.d.ts.map +1 -0
  122. package/dist/rabbitmq/index.js +4 -0
  123. package/dist/rabbitmq/namespace-helpers.d.ts +33 -0
  124. package/dist/rabbitmq/namespace-helpers.d.ts.map +1 -0
  125. package/dist/rabbitmq/namespace-helpers.js +44 -0
  126. package/dist/rabbitmq/publisher.d.ts +27 -0
  127. package/dist/rabbitmq/publisher.d.ts.map +1 -0
  128. package/dist/rabbitmq/publisher.js +94 -0
  129. package/dist/rabbitmq/types.d.ts +94 -0
  130. package/dist/rabbitmq/types.d.ts.map +1 -0
  131. package/dist/rabbitmq/types.js +1 -0
  132. package/dist/redis/client-factory.d.ts +14 -0
  133. package/dist/redis/client-factory.d.ts.map +1 -0
  134. package/dist/redis/client-factory.js +98 -0
  135. package/dist/redis/index.d.ts +6 -0
  136. package/dist/redis/index.d.ts.map +1 -0
  137. package/dist/redis/index.js +4 -0
  138. package/dist/redis/namespace-helpers.d.ts +33 -0
  139. package/dist/redis/namespace-helpers.d.ts.map +1 -0
  140. package/dist/redis/namespace-helpers.js +43 -0
  141. package/dist/redis/operations/index.d.ts +3 -0
  142. package/dist/redis/operations/index.d.ts.map +1 -0
  143. package/dist/redis/operations/index.js +2 -0
  144. package/dist/redis/operations/list.d.ts +102 -0
  145. package/dist/redis/operations/list.d.ts.map +1 -0
  146. package/dist/redis/operations/list.js +136 -0
  147. package/dist/redis/operations/standard.d.ts +85 -0
  148. package/dist/redis/operations/standard.d.ts.map +1 -0
  149. package/dist/redis/operations/standard.js +136 -0
  150. package/dist/redis/types.d.ts +81 -0
  151. package/dist/redis/types.d.ts.map +1 -0
  152. package/dist/redis/types.js +8 -0
  153. package/dist/security/cors-factory.d.ts +28 -0
  154. package/dist/security/cors-factory.d.ts.map +1 -0
  155. package/dist/security/cors-factory.js +73 -0
  156. package/dist/security/helmet-factory.d.ts +14 -0
  157. package/dist/security/helmet-factory.d.ts.map +1 -0
  158. package/dist/security/helmet-factory.js +80 -0
  159. package/dist/security/index.d.ts +4 -0
  160. package/dist/security/index.d.ts.map +1 -0
  161. package/dist/security/index.js +2 -0
  162. package/dist/security/types.d.ts +103 -0
  163. package/dist/security/types.d.ts.map +1 -0
  164. package/dist/security/types.js +1 -0
  165. package/dist/types/custom-types.d.ts +102 -0
  166. package/dist/types/custom-types.d.ts.map +1 -0
  167. package/dist/types/custom-types.js +45 -0
  168. package/dist/types/enums.d.ts +26 -0
  169. package/dist/types/enums.d.ts.map +1 -0
  170. package/dist/types/enums.js +30 -0
  171. package/dist/types/index.d.ts +4 -0
  172. package/dist/types/index.d.ts.map +1 -0
  173. package/dist/types/index.js +2 -0
  174. package/package.json +154 -0
@@ -0,0 +1,193 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Database configuration schema
4
+ */
5
+ export declare const DatabaseConfigSchema: z.ZodObject<{
6
+ name: z.ZodString;
7
+ host: z.ZodString;
8
+ port: z.ZodDefault<z.ZodNumber>;
9
+ database: z.ZodString;
10
+ user: z.ZodString;
11
+ password: z.ZodString;
12
+ ssl: z.ZodDefault<z.ZodBoolean>;
13
+ maxConnections: z.ZodDefault<z.ZodNumber>;
14
+ idleTimeoutMs: z.ZodDefault<z.ZodNumber>;
15
+ connectionTimeoutMs: z.ZodDefault<z.ZodNumber>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ name: string;
18
+ host: string;
19
+ port: number;
20
+ database: string;
21
+ user: string;
22
+ password: string;
23
+ ssl: boolean;
24
+ maxConnections: number;
25
+ idleTimeoutMs: number;
26
+ connectionTimeoutMs: number;
27
+ }, {
28
+ name: string;
29
+ host: string;
30
+ database: string;
31
+ user: string;
32
+ password: string;
33
+ port?: number | undefined;
34
+ ssl?: boolean | undefined;
35
+ maxConnections?: number | undefined;
36
+ idleTimeoutMs?: number | undefined;
37
+ connectionTimeoutMs?: number | undefined;
38
+ }>;
39
+ /**
40
+ * Redis configuration schema - supports single instance or cluster
41
+ */
42
+ export declare const RedisConfigSchema: z.ZodObject<{
43
+ host: z.ZodDefault<z.ZodString>;
44
+ port: z.ZodDefault<z.ZodNumber>;
45
+ password: z.ZodOptional<z.ZodString>;
46
+ db: z.ZodDefault<z.ZodNumber>;
47
+ keyPrefix: z.ZodOptional<z.ZodString>;
48
+ tls: z.ZodDefault<z.ZodBoolean>;
49
+ connectTimeout: z.ZodDefault<z.ZodNumber>;
50
+ commandTimeout: z.ZodDefault<z.ZodNumber>;
51
+ retryDelayMs: z.ZodDefault<z.ZodNumber>;
52
+ maxRetries: z.ZodDefault<z.ZodNumber>;
53
+ }, "strip", z.ZodTypeAny, {
54
+ host: string;
55
+ port: number;
56
+ db: number;
57
+ tls: boolean;
58
+ connectTimeout: number;
59
+ commandTimeout: number;
60
+ retryDelayMs: number;
61
+ maxRetries: number;
62
+ password?: string | undefined;
63
+ keyPrefix?: string | undefined;
64
+ }, {
65
+ host?: string | undefined;
66
+ port?: number | undefined;
67
+ password?: string | undefined;
68
+ db?: number | undefined;
69
+ keyPrefix?: string | undefined;
70
+ tls?: boolean | undefined;
71
+ connectTimeout?: number | undefined;
72
+ commandTimeout?: number | undefined;
73
+ retryDelayMs?: number | undefined;
74
+ maxRetries?: number | undefined;
75
+ }>;
76
+ export declare const RedisClusterConfigSchema: z.ZodObject<{
77
+ nodes: z.ZodArray<z.ZodObject<{
78
+ host: z.ZodString;
79
+ port: z.ZodNumber;
80
+ }, "strip", z.ZodTypeAny, {
81
+ host: string;
82
+ port: number;
83
+ }, {
84
+ host: string;
85
+ port: number;
86
+ }>, "many">;
87
+ password: z.ZodOptional<z.ZodString>;
88
+ keyPrefix: z.ZodOptional<z.ZodString>;
89
+ tls: z.ZodDefault<z.ZodBoolean>;
90
+ connectTimeout: z.ZodDefault<z.ZodNumber>;
91
+ commandTimeout: z.ZodDefault<z.ZodNumber>;
92
+ }, "strip", z.ZodTypeAny, {
93
+ tls: boolean;
94
+ connectTimeout: number;
95
+ commandTimeout: number;
96
+ nodes: {
97
+ host: string;
98
+ port: number;
99
+ }[];
100
+ password?: string | undefined;
101
+ keyPrefix?: string | undefined;
102
+ }, {
103
+ nodes: {
104
+ host: string;
105
+ port: number;
106
+ }[];
107
+ password?: string | undefined;
108
+ keyPrefix?: string | undefined;
109
+ tls?: boolean | undefined;
110
+ connectTimeout?: number | undefined;
111
+ commandTimeout?: number | undefined;
112
+ }>;
113
+ /**
114
+ * RabbitMQ configuration schema
115
+ */
116
+ export declare const RabbitMQConfigSchema: z.ZodObject<{
117
+ host: z.ZodString;
118
+ port: z.ZodDefault<z.ZodNumber>;
119
+ username: z.ZodString;
120
+ password: z.ZodString;
121
+ vhost: z.ZodDefault<z.ZodString>;
122
+ heartbeat: z.ZodDefault<z.ZodNumber>;
123
+ connectionTimeout: z.ZodDefault<z.ZodNumber>;
124
+ reconnectDelayMs: z.ZodDefault<z.ZodNumber>;
125
+ maxReconnectAttempts: z.ZodDefault<z.ZodNumber>;
126
+ prefetchCount: z.ZodDefault<z.ZodNumber>;
127
+ protocol: z.ZodDefault<z.ZodEnum<["amqp", "amqps"]>>;
128
+ }, "strip", z.ZodTypeAny, {
129
+ host: string;
130
+ port: number;
131
+ password: string;
132
+ username: string;
133
+ vhost: string;
134
+ heartbeat: number;
135
+ connectionTimeout: number;
136
+ reconnectDelayMs: number;
137
+ maxReconnectAttempts: number;
138
+ prefetchCount: number;
139
+ protocol: "amqp" | "amqps";
140
+ }, {
141
+ host: string;
142
+ password: string;
143
+ username: string;
144
+ port?: number | undefined;
145
+ vhost?: string | undefined;
146
+ heartbeat?: number | undefined;
147
+ connectionTimeout?: number | undefined;
148
+ reconnectDelayMs?: number | undefined;
149
+ maxReconnectAttempts?: number | undefined;
150
+ prefetchCount?: number | undefined;
151
+ protocol?: "amqp" | "amqps" | undefined;
152
+ }>;
153
+ /**
154
+ * Logging configuration schema
155
+ */
156
+ export declare const LoggingConfigSchema: z.ZodObject<{
157
+ level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
158
+ format: z.ZodDefault<z.ZodEnum<["json", "logfmt", "pretty"]>>;
159
+ timestamp: z.ZodDefault<z.ZodBoolean>;
160
+ colorize: z.ZodDefault<z.ZodBoolean>;
161
+ }, "strip", z.ZodTypeAny, {
162
+ level: "debug" | "info" | "warn" | "error";
163
+ format: "json" | "logfmt" | "pretty";
164
+ timestamp: boolean;
165
+ colorize: boolean;
166
+ }, {
167
+ level?: "debug" | "info" | "warn" | "error" | undefined;
168
+ format?: "json" | "logfmt" | "pretty" | undefined;
169
+ timestamp?: boolean | undefined;
170
+ colorize?: boolean | undefined;
171
+ }>;
172
+ /**
173
+ * Validates configuration against a schema
174
+ * @param schema The Zod schema to validate against
175
+ * @param data The data to validate
176
+ * @returns Validated and typed configuration
177
+ * @throws ZodError if validation fails
178
+ */
179
+ export declare function validateConfig<T extends z.ZodType>(schema: T, data: unknown): z.infer<T>;
180
+ /**
181
+ * Safely validates configuration, returning result object instead of throwing
182
+ * @param schema The Zod schema to validate against
183
+ * @param data The data to validate
184
+ * @returns Object with success flag and either data or error
185
+ */
186
+ export declare function safeValidateConfig<T extends z.ZodType>(schema: T, data: unknown): {
187
+ success: true;
188
+ data: z.infer<T>;
189
+ } | {
190
+ success: false;
191
+ error: z.ZodError;
192
+ };
193
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/config/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAW5B,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcnC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY/B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAExF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAA;CAAE,CAM7J"}
@@ -0,0 +1,92 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Database configuration schema
4
+ */
5
+ export const DatabaseConfigSchema = z.object({
6
+ name: z.string().min(1),
7
+ host: z.string().min(1),
8
+ port: z.number().int().positive().default(5432),
9
+ database: z.string().min(1),
10
+ user: z.string().min(1),
11
+ password: z.string(),
12
+ ssl: z.boolean().default(false),
13
+ maxConnections: z.number().int().positive().default(10),
14
+ idleTimeoutMs: z.number().int().nonnegative().default(30000),
15
+ connectionTimeoutMs: z.number().int().positive().default(5000)
16
+ });
17
+ /**
18
+ * Redis configuration schema - supports single instance or cluster
19
+ */
20
+ export const RedisConfigSchema = z.object({
21
+ host: z.string().min(1).default('localhost'),
22
+ port: z.number().int().positive().default(6379),
23
+ password: z.string().optional(),
24
+ db: z.number().int().nonnegative().default(0),
25
+ keyPrefix: z.string().optional(),
26
+ tls: z.boolean().default(false),
27
+ connectTimeout: z.number().int().positive().default(10000),
28
+ commandTimeout: z.number().int().positive().default(5000),
29
+ retryDelayMs: z.number().int().positive().default(50),
30
+ maxRetries: z.number().int().nonnegative().default(10)
31
+ });
32
+ export const RedisClusterConfigSchema = z.object({
33
+ nodes: z
34
+ .array(z.object({
35
+ host: z.string().min(1),
36
+ port: z.number().int().positive()
37
+ }))
38
+ .min(1),
39
+ password: z.string().optional(),
40
+ keyPrefix: z.string().optional(),
41
+ tls: z.boolean().default(false),
42
+ connectTimeout: z.number().int().positive().default(10000),
43
+ commandTimeout: z.number().int().positive().default(5000)
44
+ });
45
+ /**
46
+ * RabbitMQ configuration schema
47
+ */
48
+ export const RabbitMQConfigSchema = z.object({
49
+ host: z.string().min(1),
50
+ port: z.number().int().positive().default(5672),
51
+ username: z.string().min(1),
52
+ password: z.string(),
53
+ vhost: z.string().default('/'),
54
+ heartbeat: z.number().int().nonnegative().default(60),
55
+ connectionTimeout: z.number().int().positive().default(30000),
56
+ reconnectDelayMs: z.number().int().positive().default(5000),
57
+ maxReconnectAttempts: z.number().int().nonnegative().default(10),
58
+ prefetchCount: z.number().int().positive().default(1),
59
+ protocol: z.enum(['amqp', 'amqps']).default('amqp')
60
+ });
61
+ /**
62
+ * Logging configuration schema
63
+ */
64
+ export const LoggingConfigSchema = z.object({
65
+ level: z.enum(['debug', 'info', 'warn', 'error']).default('info'),
66
+ format: z.enum(['json', 'logfmt', 'pretty']).default('json'),
67
+ timestamp: z.boolean().default(true),
68
+ colorize: z.boolean().default(false)
69
+ });
70
+ /**
71
+ * Validates configuration against a schema
72
+ * @param schema The Zod schema to validate against
73
+ * @param data The data to validate
74
+ * @returns Validated and typed configuration
75
+ * @throws ZodError if validation fails
76
+ */
77
+ export function validateConfig(schema, data) {
78
+ return schema.parse(data);
79
+ }
80
+ /**
81
+ * Safely validates configuration, returning result object instead of throwing
82
+ * @param schema The Zod schema to validate against
83
+ * @param data The data to validate
84
+ * @returns Object with success flag and either data or error
85
+ */
86
+ export function safeValidateConfig(schema, data) {
87
+ const result = schema.safeParse(data);
88
+ if (result.success) {
89
+ return { success: true, data: result.data };
90
+ }
91
+ return { success: false, error: result.error };
92
+ }
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ import { DatabaseConfigSchema, RedisConfigSchema, RedisClusterConfigSchema, RabbitMQConfigSchema, LoggingConfigSchema } from './schemas.js';
3
+ /**
4
+ * Database configuration type
5
+ */
6
+ export type DatabaseConfig = z.infer<typeof DatabaseConfigSchema>;
7
+ /**
8
+ * Redis single instance configuration type
9
+ */
10
+ export type RedisConfig = z.infer<typeof RedisConfigSchema>;
11
+ /**
12
+ * Redis cluster configuration type
13
+ */
14
+ export type RedisClusterConfig = z.infer<typeof RedisClusterConfigSchema>;
15
+ /**
16
+ * RabbitMQ configuration type
17
+ */
18
+ export type RabbitMQConfig = z.infer<typeof RabbitMQConfigSchema>;
19
+ /**
20
+ * Logging configuration type
21
+ */
22
+ export type LoggingConfig = z.infer<typeof LoggingConfigSchema>;
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE5I;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { z } from 'zod';
2
+ import { DatabaseConfigSchema, RedisConfigSchema, RedisClusterConfigSchema, RabbitMQConfigSchema, LoggingConfigSchema } from './schemas.js';
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Standard cache duration constants in seconds
3
+ */
4
+ export declare const CACHE_DURATION: {
5
+ /** 1 minute */
6
+ readonly ONE_MINUTE: 60;
7
+ /** 5 minutes */
8
+ readonly FIVE_MINUTES: 300;
9
+ /** 15 minutes */
10
+ readonly FIFTEEN_MINUTES: 900;
11
+ /** 30 minutes */
12
+ readonly THIRTY_MINUTES: 1800;
13
+ /** 1 hour */
14
+ readonly ONE_HOUR: 3600;
15
+ /** 2 hours */
16
+ readonly TWO_HOURS: 7200;
17
+ /** 6 hours */
18
+ readonly SIX_HOURS: 21600;
19
+ /** 12 hours */
20
+ readonly TWELVE_HOURS: 43200;
21
+ /** 1 day */
22
+ readonly ONE_DAY: 86400;
23
+ /** 1 week */
24
+ readonly ONE_WEEK: 604800;
25
+ /** 30 days */
26
+ readonly ONE_MONTH: 2592000;
27
+ };
28
+ export type CacheDuration = (typeof CACHE_DURATION)[keyof typeof CACHE_DURATION];
29
+ //# sourceMappingURL=cache-durations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-durations.d.ts","sourceRoot":"","sources":["../../src/constants/cache-durations.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB,eAAe;;IAEf,gBAAgB;;IAEhB,iBAAiB;;IAEjB,iBAAiB;;IAEjB,aAAa;;IAEb,cAAc;;IAEd,cAAc;;IAEd,eAAe;;IAEf,YAAY;;IAEZ,aAAa;;IAEb,cAAc;;CAEN,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Standard cache duration constants in seconds
3
+ */
4
+ export const CACHE_DURATION = {
5
+ /** 1 minute */
6
+ ONE_MINUTE: 60,
7
+ /** 5 minutes */
8
+ FIVE_MINUTES: 300,
9
+ /** 15 minutes */
10
+ FIFTEEN_MINUTES: 900,
11
+ /** 30 minutes */
12
+ THIRTY_MINUTES: 1800,
13
+ /** 1 hour */
14
+ ONE_HOUR: 3600,
15
+ /** 2 hours */
16
+ TWO_HOURS: 7200,
17
+ /** 6 hours */
18
+ SIX_HOURS: 21600,
19
+ /** 12 hours */
20
+ TWELVE_HOURS: 43200,
21
+ /** 1 day */
22
+ ONE_DAY: 86400,
23
+ /** 1 week */
24
+ ONE_WEEK: 604800,
25
+ /** 30 days */
26
+ ONE_MONTH: 2592000
27
+ };
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Default pool sizes for database connections
3
+ */
4
+ export declare const DATABASE_DEFAULTS: {
5
+ readonly MAX_CONNECTIONS: 10;
6
+ readonly IDLE_TIMEOUT_MS: 30000;
7
+ readonly CONNECTION_TIMEOUT_MS: 5000;
8
+ readonly STATEMENT_TIMEOUT_MS: 30000;
9
+ };
10
+ /**
11
+ * Default Redis configuration values
12
+ */
13
+ export declare const REDIS_DEFAULTS: {
14
+ readonly PORT: 6379;
15
+ readonly DB: 0;
16
+ readonly CONNECT_TIMEOUT_MS: 10000;
17
+ readonly COMMAND_TIMEOUT_MS: 5000;
18
+ readonly RETRY_DELAY_MS: 50;
19
+ readonly MAX_RETRIES: 10;
20
+ };
21
+ /**
22
+ * Default RabbitMQ configuration values
23
+ */
24
+ export declare const RABBITMQ_DEFAULTS: {
25
+ readonly PORT: 5672;
26
+ readonly HEARTBEAT: 60;
27
+ readonly CONNECTION_TIMEOUT_MS: 30000;
28
+ readonly RECONNECT_DELAY_MS: 5000;
29
+ readonly MAX_RECONNECT_ATTEMPTS: 10;
30
+ readonly PREFETCH_COUNT: 1;
31
+ readonly DEFAULT_DELAY_EXCHANGE: "delayed-exchange";
32
+ };
33
+ /**
34
+ * Default retry configuration
35
+ */
36
+ export declare const RETRY_DEFAULTS: {
37
+ readonly MAX_ATTEMPTS: 3;
38
+ readonly INITIAL_DELAY_MS: 1000;
39
+ readonly MAX_DELAY_MS: 30000;
40
+ readonly BACKOFF_MULTIPLIER: 2;
41
+ };
42
+ /**
43
+ * Default pagination values
44
+ */
45
+ export declare const PAGINATION_DEFAULTS: {
46
+ readonly PAGE_SIZE: 50;
47
+ readonly MAX_PAGE_SIZE: 1000;
48
+ readonly DEFAULT_PAGE: 1;
49
+ };
50
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/constants/defaults.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;CAKpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;CAOjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;CAQpB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;CAKjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Default pool sizes for database connections
3
+ */
4
+ export const DATABASE_DEFAULTS = {
5
+ MAX_CONNECTIONS: 10,
6
+ IDLE_TIMEOUT_MS: 30000,
7
+ CONNECTION_TIMEOUT_MS: 5000,
8
+ STATEMENT_TIMEOUT_MS: 30000
9
+ };
10
+ /**
11
+ * Default Redis configuration values
12
+ */
13
+ export const REDIS_DEFAULTS = {
14
+ PORT: 6379,
15
+ DB: 0,
16
+ CONNECT_TIMEOUT_MS: 10000,
17
+ COMMAND_TIMEOUT_MS: 5000,
18
+ RETRY_DELAY_MS: 50,
19
+ MAX_RETRIES: 10
20
+ };
21
+ /**
22
+ * Default RabbitMQ configuration values
23
+ */
24
+ export const RABBITMQ_DEFAULTS = {
25
+ PORT: 5672,
26
+ HEARTBEAT: 60,
27
+ CONNECTION_TIMEOUT_MS: 30000,
28
+ RECONNECT_DELAY_MS: 5000,
29
+ MAX_RECONNECT_ATTEMPTS: 10,
30
+ PREFETCH_COUNT: 1,
31
+ DEFAULT_DELAY_EXCHANGE: 'delayed-exchange'
32
+ };
33
+ /**
34
+ * Default retry configuration
35
+ */
36
+ export const RETRY_DEFAULTS = {
37
+ MAX_ATTEMPTS: 3,
38
+ INITIAL_DELAY_MS: 1000,
39
+ MAX_DELAY_MS: 30000,
40
+ BACKOFF_MULTIPLIER: 2
41
+ };
42
+ /**
43
+ * Default pagination values
44
+ */
45
+ export const PAGINATION_DEFAULTS = {
46
+ PAGE_SIZE: 50,
47
+ MAX_PAGE_SIZE: 1000,
48
+ DEFAULT_PAGE: 1
49
+ };
@@ -0,0 +1,4 @@
1
+ export { CACHE_DURATION } from './cache-durations.js';
2
+ export type { CacheDuration } from './cache-durations.js';
3
+ export { DATABASE_DEFAULTS, REDIS_DEFAULTS, RABBITMQ_DEFAULTS, RETRY_DEFAULTS, PAGINATION_DEFAULTS } from './defaults.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { CACHE_DURATION } from './cache-durations.js';
2
+ export { DATABASE_DEFAULTS, REDIS_DEFAULTS, RABBITMQ_DEFAULTS, RETRY_DEFAULTS, PAGINATION_DEFAULTS } from './defaults.js';
@@ -0,0 +1,45 @@
1
+ import type { DatabasePool } from './types.js';
2
+ /**
3
+ * Abstract base repository class for database operations
4
+ * Extend this class and inject DatabasePool instances via constructor
5
+ */
6
+ export declare abstract class BaseRepository {
7
+ protected readonly db: DatabasePool;
8
+ protected readonly readOnlyDb: DatabasePool;
9
+ constructor(db: DatabasePool, readOnlyDb?: DatabasePool);
10
+ /**
11
+ * Execute a query on the main database
12
+ * @param text SQL query
13
+ * @param values Query parameters
14
+ * @returns Array of camelCased results
15
+ */
16
+ protected query<T>(text: string, values?: unknown[]): Promise<T[]>;
17
+ /**
18
+ * Execute a query on the read-only database
19
+ * @param text SQL query
20
+ * @param values Query parameters
21
+ * @returns Array of camelCased results
22
+ */
23
+ protected queryReadOnly<T>(text: string, values?: unknown[]): Promise<T[]>;
24
+ /**
25
+ * Execute a query and return a single result
26
+ * @param text SQL query
27
+ * @param values Query parameters
28
+ * @returns Single camelCased result or null
29
+ */
30
+ protected queryOne<T>(text: string, values?: unknown[]): Promise<T | null>;
31
+ /**
32
+ * Execute a query on read-only db and return a single result
33
+ * @param text SQL query
34
+ * @param values Query parameters
35
+ * @returns Single camelCased result or null
36
+ */
37
+ protected queryOneReadOnly<T>(text: string, values?: unknown[]): Promise<T | null>;
38
+ /**
39
+ * Execute a transaction on the main database
40
+ * @param fn Transaction function receiving a client
41
+ * @returns Transaction result
42
+ */
43
+ protected transaction<T>(fn: (client: import('pg').PoolClient) => Promise<T>): Promise<T>;
44
+ }
45
+ //# sourceMappingURL=base-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-repository.d.ts","sourceRoot":"","sources":["../../src/database/base-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C;;;GAGG;AACH,8BAAsB,cAAc;IAClC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,YAAY,CAAC;IACpC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC;gBAEhC,EAAE,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,YAAY;IAKvD;;;;;OAKG;cACa,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIxE;;;;;OAKG;cACa,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAIhF;;;;;OAKG;cACa,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAIhF;;;;;OAKG;cACa,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC;IAIxF;;;;OAIG;cACa,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAGhG"}
@@ -0,0 +1,57 @@
1
+ import { queryWithCamelCase, queryOneWithCamelCase } from './pool-factory.js';
2
+ /**
3
+ * Abstract base repository class for database operations
4
+ * Extend this class and inject DatabasePool instances via constructor
5
+ */
6
+ export class BaseRepository {
7
+ db;
8
+ readOnlyDb;
9
+ constructor(db, readOnlyDb) {
10
+ this.db = db;
11
+ this.readOnlyDb = readOnlyDb ?? db;
12
+ }
13
+ /**
14
+ * Execute a query on the main database
15
+ * @param text SQL query
16
+ * @param values Query parameters
17
+ * @returns Array of camelCased results
18
+ */
19
+ async query(text, values) {
20
+ return queryWithCamelCase(this.db, text, values);
21
+ }
22
+ /**
23
+ * Execute a query on the read-only database
24
+ * @param text SQL query
25
+ * @param values Query parameters
26
+ * @returns Array of camelCased results
27
+ */
28
+ async queryReadOnly(text, values) {
29
+ return queryWithCamelCase(this.readOnlyDb, text, values);
30
+ }
31
+ /**
32
+ * Execute a query and return a single result
33
+ * @param text SQL query
34
+ * @param values Query parameters
35
+ * @returns Single camelCased result or null
36
+ */
37
+ async queryOne(text, values) {
38
+ return queryOneWithCamelCase(this.db, text, values);
39
+ }
40
+ /**
41
+ * Execute a query on read-only db and return a single result
42
+ * @param text SQL query
43
+ * @param values Query parameters
44
+ * @returns Single camelCased result or null
45
+ */
46
+ async queryOneReadOnly(text, values) {
47
+ return queryOneWithCamelCase(this.readOnlyDb, text, values);
48
+ }
49
+ /**
50
+ * Execute a transaction on the main database
51
+ * @param fn Transaction function receiving a client
52
+ * @returns Transaction result
53
+ */
54
+ async transaction(fn) {
55
+ return this.db.transaction(fn);
56
+ }
57
+ }
@@ -0,0 +1,9 @@
1
+ import type { KeyValuePair } from '../../types/custom-types.js';
2
+ /**
3
+ * Converts PostgreSQL array fields in an object to TypeScript arrays
4
+ * @param keysTypes Array of key-value pairs specifying which fields to convert
5
+ * @param originalObject Object containing fields to convert
6
+ * @returns Object with converted array fields
7
+ */
8
+ export declare function ConverterHelper<T>(keysTypes: KeyValuePair[], originalObject: T): T;
9
+ //# sourceMappingURL=converter-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"converter-helper.d.ts","sourceRoot":"","sources":["../../../src/database/helpers/converter-helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAGhE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,CAelF"}
@@ -0,0 +1,20 @@
1
+ import { parsePostgresArray } from '../query-helpers.js';
2
+ /**
3
+ * Converts PostgreSQL array fields in an object to TypeScript arrays
4
+ * @param keysTypes Array of key-value pairs specifying which fields to convert
5
+ * @param originalObject Object containing fields to convert
6
+ * @returns Object with converted array fields
7
+ */
8
+ export function ConverterHelper(keysTypes, originalObject) {
9
+ if (!originalObject) {
10
+ return originalObject;
11
+ }
12
+ const result = { ...originalObject };
13
+ for (const pair of keysTypes) {
14
+ const key = String(pair.key);
15
+ if (key in result) {
16
+ result[key] = parsePostgresArray(result[key]);
17
+ }
18
+ }
19
+ return result;
20
+ }
@@ -0,0 +1,3 @@
1
+ export { ConverterHelper } from './converter-helper.js';
2
+ export { PagedResponseHelper } from './paged-response-helper.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/database/helpers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ConverterHelper } from './converter-helper.js';
2
+ export { PagedResponseHelper } from './paged-response-helper.js';