@valentine-efagene/qshelter-common 2.0.2 → 2.0.4

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 (241) hide show
  1. package/dist/{src/config → config}/config.service.d.ts +44 -0
  2. package/dist/{src/config → config}/config.service.js +64 -17
  3. package/dist/config/index.js +1 -0
  4. package/dist/index.d.ts +3 -16
  5. package/dist/index.js +3 -33
  6. package/dist/types/prisma.d.ts +2 -0
  7. package/dist/types/prisma.js +2 -0
  8. package/dist/types/response.d.ts +15 -0
  9. package/dist/types/response.js +6 -0
  10. package/dist/utils/errors.d.ts +21 -0
  11. package/dist/utils/errors.js +28 -0
  12. package/package.json +34 -99
  13. package/prisma/schema.prisma +636 -0
  14. package/dist/OpenApiHelper.d.ts +0 -9
  15. package/dist/OpenApiHelper.js +0 -118
  16. package/dist/OpenApiHelper.js.map +0 -1
  17. package/dist/decorator/index.d.ts +0 -2
  18. package/dist/decorator/index.js +0 -19
  19. package/dist/decorator/index.js.map +0 -1
  20. package/dist/decorator/permission.decorator.d.ts +0 -2
  21. package/dist/decorator/permission.decorator.js +0 -6
  22. package/dist/decorator/permission.decorator.js.map +0 -1
  23. package/dist/decorator/tenant.decorator.d.ts +0 -2
  24. package/dist/decorator/tenant.decorator.js +0 -13
  25. package/dist/decorator/tenant.decorator.js.map +0 -1
  26. package/dist/encryption/encryption.module.d.ts +0 -2
  27. package/dist/encryption/encryption.module.js +0 -24
  28. package/dist/encryption/encryption.module.js.map +0 -1
  29. package/dist/encryption/encryption.service.d.ts +0 -17
  30. package/dist/encryption/encryption.service.js +0 -85
  31. package/dist/encryption/encryption.service.js.map +0 -1
  32. package/dist/entities/TenantAwareEntity.d.ts +0 -9
  33. package/dist/entities/TenantAwareEntity.js +0 -48
  34. package/dist/entities/TenantAwareEntity.js.map +0 -1
  35. package/dist/entities/TenantAwareRepository.d.ts +0 -13
  36. package/dist/entities/TenantAwareRepository.js +0 -65
  37. package/dist/entities/TenantAwareRepository.js.map +0 -1
  38. package/dist/entities/amenity.entity.d.ts +0 -4
  39. package/dist/entities/amenity.entity.js +0 -28
  40. package/dist/entities/amenity.entity.js.map +0 -1
  41. package/dist/entities/common.entity.d.ts +0 -16
  42. package/dist/entities/common.entity.js +0 -63
  43. package/dist/entities/common.entity.js.map +0 -1
  44. package/dist/entities/common.pure.entity.d.ts +0 -11
  45. package/dist/entities/common.pure.entity.js +0 -52
  46. package/dist/entities/common.pure.entity.js.map +0 -1
  47. package/dist/entities/contract-document.entity.d.ts +0 -39
  48. package/dist/entities/contract-document.entity.js +0 -115
  49. package/dist/entities/contract-document.entity.js.map +0 -1
  50. package/dist/entities/contract.entity.d.ts +0 -62
  51. package/dist/entities/contract.entity.js +0 -191
  52. package/dist/entities/contract.entity.js.map +0 -1
  53. package/dist/entities/device_endpoint.entity.d.ts +0 -10
  54. package/dist/entities/device_endpoint.entity.js +0 -50
  55. package/dist/entities/device_endpoint.entity.js.map +0 -1
  56. package/dist/entities/email_preference.entity.d.ts +0 -6
  57. package/dist/entities/email_preference.entity.js +0 -45
  58. package/dist/entities/email_preference.entity.js.map +0 -1
  59. package/dist/entities/index.d.ts +0 -36
  60. package/dist/entities/index.js +0 -53
  61. package/dist/entities/index.js.map +0 -1
  62. package/dist/entities/mortgage-document.entity.d.ts +0 -14
  63. package/dist/entities/mortgage-document.entity.js +0 -58
  64. package/dist/entities/mortgage-document.entity.js.map +0 -1
  65. package/dist/entities/mortgage-downpayment-installment.entity.d.ts +0 -19
  66. package/dist/entities/mortgage-downpayment-installment.entity.js +0 -63
  67. package/dist/entities/mortgage-downpayment-installment.entity.js.map +0 -1
  68. package/dist/entities/mortgage-downpayment-payment.entity.d.ts +0 -28
  69. package/dist/entities/mortgage-downpayment-payment.entity.js +0 -84
  70. package/dist/entities/mortgage-downpayment-payment.entity.js.map +0 -1
  71. package/dist/entities/mortgage-downpayment.entity.d.ts +0 -22
  72. package/dist/entities/mortgage-downpayment.entity.js +0 -66
  73. package/dist/entities/mortgage-downpayment.entity.js.map +0 -1
  74. package/dist/entities/mortgage-step.entity.d.ts +0 -12
  75. package/dist/entities/mortgage-step.entity.js +0 -52
  76. package/dist/entities/mortgage-step.entity.js.map +0 -1
  77. package/dist/entities/mortgage-transition-event.entity.d.ts +0 -26
  78. package/dist/entities/mortgage-transition-event.entity.js +0 -111
  79. package/dist/entities/mortgage-transition-event.entity.js.map +0 -1
  80. package/dist/entities/mortgage-transition.entity.d.ts +0 -25
  81. package/dist/entities/mortgage-transition.entity.js +0 -91
  82. package/dist/entities/mortgage-transition.entity.js.map +0 -1
  83. package/dist/entities/mortgage-type.entity.d.ts +0 -10
  84. package/dist/entities/mortgage-type.entity.js +0 -46
  85. package/dist/entities/mortgage-type.entity.js.map +0 -1
  86. package/dist/entities/mortgage.entity.d.ts +0 -37
  87. package/dist/entities/mortgage.entity.js +0 -124
  88. package/dist/entities/mortgage.entity.js.map +0 -1
  89. package/dist/entities/password_reset_tokens.entity.d.ts +0 -7
  90. package/dist/entities/password_reset_tokens.entity.js +0 -45
  91. package/dist/entities/password_reset_tokens.entity.js.map +0 -1
  92. package/dist/entities/payment-installment.entity.d.ts +0 -39
  93. package/dist/entities/payment-installment.entity.js +0 -134
  94. package/dist/entities/payment-installment.entity.js.map +0 -1
  95. package/dist/entities/payment-plan.entity.d.ts +0 -62
  96. package/dist/entities/payment-plan.entity.js +0 -174
  97. package/dist/entities/payment-plan.entity.js.map +0 -1
  98. package/dist/entities/payment-schedule.entity.d.ts +0 -44
  99. package/dist/entities/payment-schedule.entity.js +0 -134
  100. package/dist/entities/payment-schedule.entity.js.map +0 -1
  101. package/dist/entities/payment.entity.d.ts +0 -55
  102. package/dist/entities/payment.entity.js +0 -157
  103. package/dist/entities/payment.entity.js.map +0 -1
  104. package/dist/entities/permission.entity.d.ts +0 -6
  105. package/dist/entities/permission.entity.js +0 -30
  106. package/dist/entities/permission.entity.js.map +0 -1
  107. package/dist/entities/property-document.entity.d.ts +0 -6
  108. package/dist/entities/property-document.entity.js +0 -34
  109. package/dist/entities/property-document.entity.js.map +0 -1
  110. package/dist/entities/property-media.entity.d.ts +0 -6
  111. package/dist/entities/property-media.entity.js +0 -37
  112. package/dist/entities/property-media.entity.js.map +0 -1
  113. package/dist/entities/property.entity.d.ts +0 -40
  114. package/dist/entities/property.entity.js +0 -202
  115. package/dist/entities/property.entity.js.map +0 -1
  116. package/dist/entities/refresh_token.entity.d.ts +0 -7
  117. package/dist/entities/refresh_token.entity.js +0 -35
  118. package/dist/entities/refresh_token.entity.js.map +0 -1
  119. package/dist/entities/role.entity.d.ts +0 -8
  120. package/dist/entities/role.entity.js +0 -39
  121. package/dist/entities/role.entity.js.map +0 -1
  122. package/dist/entities/settings.entity.d.ts +0 -17
  123. package/dist/entities/settings.entity.js +0 -81
  124. package/dist/entities/settings.entity.js.map +0 -1
  125. package/dist/entities/social.entity.d.ts +0 -8
  126. package/dist/entities/social.entity.js +0 -48
  127. package/dist/entities/social.entity.js.map +0 -1
  128. package/dist/entities/tenant.entity.d.ts +0 -32
  129. package/dist/entities/tenant.entity.js +0 -101
  130. package/dist/entities/tenant.entity.js.map +0 -1
  131. package/dist/entities/transaction.entity.d.ts +0 -17
  132. package/dist/entities/transaction.entity.js +0 -87
  133. package/dist/entities/transaction.entity.js.map +0 -1
  134. package/dist/entities/user.entity.d.ts +0 -28
  135. package/dist/entities/user.entity.js +0 -109
  136. package/dist/entities/user.entity.js.map +0 -1
  137. package/dist/entities/user_suspensions.entity.d.ts +0 -7
  138. package/dist/entities/user_suspensions.entity.js +0 -44
  139. package/dist/entities/user_suspensions.entity.js.map +0 -1
  140. package/dist/entities/wallet.entity.d.ts +0 -17
  141. package/dist/entities/wallet.entity.js +0 -79
  142. package/dist/entities/wallet.entity.js.map +0 -1
  143. package/dist/guard/index.d.ts +0 -2
  144. package/dist/guard/index.js +0 -19
  145. package/dist/guard/index.js.map +0 -1
  146. package/dist/guard/permission.guard.d.ts +0 -10
  147. package/dist/guard/permission.guard.js +0 -47
  148. package/dist/guard/permission.guard.js.map +0 -1
  149. package/dist/guard/swagger-auth.guard.d.ts +0 -1
  150. package/dist/guard/swagger-auth.guard.js +0 -9
  151. package/dist/guard/swagger-auth.guard.js.map +0 -1
  152. package/dist/helpers/ArrayHelper.d.ts +0 -2
  153. package/dist/helpers/ArrayHelper.js +0 -6
  154. package/dist/helpers/ArrayHelper.js.map +0 -1
  155. package/dist/helpers/ConstantHelper.d.ts +0 -36
  156. package/dist/helpers/ConstantHelper.js +0 -90
  157. package/dist/helpers/ConstantHelper.js.map +0 -1
  158. package/dist/helpers/CustomNamingStrategy.d.ts +0 -7
  159. package/dist/helpers/CustomNamingStrategy.js +0 -22
  160. package/dist/helpers/CustomNamingStrategy.js.map +0 -1
  161. package/dist/helpers/DateHelper.d.ts +0 -3
  162. package/dist/helpers/DateHelper.js +0 -20
  163. package/dist/helpers/DateHelper.js.map +0 -1
  164. package/dist/helpers/EmailHelper.d.ts +0 -4
  165. package/dist/helpers/EmailHelper.js +0 -55
  166. package/dist/helpers/EmailHelper.js.map +0 -1
  167. package/dist/helpers/FileSystemHelper.d.ts +0 -15
  168. package/dist/helpers/FileSystemHelper.js +0 -102
  169. package/dist/helpers/FileSystemHelper.js.map +0 -1
  170. package/dist/helpers/index.d.ts +0 -5
  171. package/dist/helpers/index.js +0 -22
  172. package/dist/helpers/index.js.map +0 -1
  173. package/dist/index.js.map +0 -1
  174. package/dist/middleware/AccessLoggerMiddleware.d.ts +0 -6
  175. package/dist/middleware/AccessLoggerMiddleware.js +0 -64
  176. package/dist/middleware/AccessLoggerMiddleware.js.map +0 -1
  177. package/dist/middleware/AuthenticationMiddleware.d.ts +0 -5
  178. package/dist/middleware/AuthenticationMiddleware.js +0 -19
  179. package/dist/middleware/AuthenticationMiddleware.js.map +0 -1
  180. package/dist/middleware/TenantMiddleware.d.ts +0 -14
  181. package/dist/middleware/TenantMiddleware.js +0 -49
  182. package/dist/middleware/TenantMiddleware.js.map +0 -1
  183. package/dist/middleware/index.d.ts +0 -3
  184. package/dist/middleware/index.js +0 -20
  185. package/dist/middleware/index.js.map +0 -1
  186. package/dist/pagination/index.d.ts +0 -2
  187. package/dist/pagination/index.js +0 -19
  188. package/dist/pagination/index.js.map +0 -1
  189. package/dist/pagination/pagination.helper.d.ts +0 -7
  190. package/dist/pagination/pagination.helper.js +0 -40
  191. package/dist/pagination/pagination.helper.js.map +0 -1
  192. package/dist/pagination/pagination.types.d.ts +0 -19
  193. package/dist/pagination/pagination.types.js +0 -3
  194. package/dist/pagination/pagination.types.js.map +0 -1
  195. package/dist/qr-code/qr-code.dto.d.ts +0 -3
  196. package/dist/qr-code/qr-code.dto.js +0 -21
  197. package/dist/qr-code/qr-code.dto.js.map +0 -1
  198. package/dist/qr-code/qr-code.module.d.ts +0 -2
  199. package/dist/qr-code/qr-code.module.js +0 -24
  200. package/dist/qr-code/qr-code.module.js.map +0 -1
  201. package/dist/qr-code/qr-code.service.d.ts +0 -11
  202. package/dist/qr-code/qr-code.service.js +0 -89
  203. package/dist/qr-code/qr-code.service.js.map +0 -1
  204. package/dist/qr-code/qr-code.type.d.ts +0 -5
  205. package/dist/qr-code/qr-code.type.js +0 -3
  206. package/dist/qr-code/qr-code.type.js.map +0 -1
  207. package/dist/src/config/config.service.js.map +0 -1
  208. package/dist/src/config/index.js +0 -18
  209. package/dist/src/config/index.js.map +0 -1
  210. package/dist/standard-response.d.ts +0 -7
  211. package/dist/standard-response.js +0 -27
  212. package/dist/standard-response.js.map +0 -1
  213. package/dist/tsconfig.tsbuildinfo +0 -1
  214. package/dist/types/common.type.d.ts +0 -54
  215. package/dist/types/common.type.js +0 -55
  216. package/dist/types/common.type.js.map +0 -1
  217. package/dist/types/index.d.ts +0 -8
  218. package/dist/types/index.js +0 -25
  219. package/dist/types/index.js.map +0 -1
  220. package/dist/types/mortgage-fsm.type.d.ts +0 -180
  221. package/dist/types/mortgage-fsm.type.js +0 -130
  222. package/dist/types/mortgage-fsm.type.js.map +0 -1
  223. package/dist/types/permission.type.d.ts +0 -42
  224. package/dist/types/permission.type.js +0 -47
  225. package/dist/types/permission.type.js.map +0 -1
  226. package/dist/types/policy.type.d.ts +0 -18
  227. package/dist/types/policy.type.js +0 -3
  228. package/dist/types/policy.type.js.map +0 -1
  229. package/dist/types/property.type.d.ts +0 -13
  230. package/dist/types/property.type.js +0 -20
  231. package/dist/types/property.type.js.map +0 -1
  232. package/dist/types/tenant.type.d.ts +0 -13
  233. package/dist/types/tenant.type.js +0 -19
  234. package/dist/types/tenant.type.js.map +0 -1
  235. package/dist/types/transaction.type.d.ts +0 -8
  236. package/dist/types/transaction.type.js +0 -14
  237. package/dist/types/transaction.type.js.map +0 -1
  238. package/dist/types/user.type.d.ts +0 -10
  239. package/dist/types/user.type.js +0 -16
  240. package/dist/types/user.type.js.map +0 -1
  241. /package/dist/{src/config → config}/index.d.ts +0 -0
@@ -44,18 +44,62 @@ export declare class ConfigService {
44
44
  private readonly CACHE_TTL;
45
45
  private constructor();
46
46
  static getInstance(region?: string): ConfigService;
47
+ /**
48
+ * Get all infrastructure configuration from SSM Parameter Store
49
+ */
47
50
  getInfrastructureConfig(stage?: string): Promise<InfrastructureConfig>;
51
+ /**
52
+ * Get a single parameter from SSM
53
+ */
48
54
  getParameter(name: string): Promise<string>;
55
+ /**
56
+ * Get JWT secrets from Secrets Manager
57
+ */
49
58
  getJwtSecret(stage?: string): Promise<JwtSecrets>;
59
+ /**
60
+ * Get refresh token secret from Secrets Manager
61
+ */
50
62
  getRefreshTokenSecret(stage?: string): Promise<JwtSecrets>;
63
+ /**
64
+ * Get encryption secrets from Secrets Manager
65
+ */
51
66
  getEncryptionSecrets(stage?: string): Promise<EncryptionSecrets>;
67
+ /**
68
+ * Get OAuth secrets from Secrets Manager
69
+ */
52
70
  getOAuthSecrets(stage?: string): Promise<OAuthSecrets>;
71
+ /**
72
+ * Get Paystack secrets from Secrets Manager
73
+ */
53
74
  getPaystackSecrets(stage?: string): Promise<PaystackSecrets>;
75
+ /**
76
+ * Get Email secrets from Secrets Manager
77
+ */
54
78
  getEmailSecrets(stage?: string): Promise<EmailSecrets>;
79
+ /**
80
+ * Generic method to get any secret from Secrets Manager
81
+ */
55
82
  private getSecret;
83
+ /**
84
+ * Helper to extract parameter value from SSM response
85
+ */
56
86
  private getParamValue;
87
+ /**
88
+ * Get value from cache if valid
89
+ */
57
90
  private getFromCache;
91
+ /**
92
+ * Set value in cache with timestamp
93
+ */
58
94
  private setCache;
95
+ /**
96
+ * Clear the cache (useful for testing or forcing refresh)
97
+ */
59
98
  clearCache(): void;
99
+ /**
100
+ * Get a configuration value from environment variables
101
+ * This is useful for local development when AWS services are not available
102
+ */
103
+ get(key: string): string;
60
104
  }
61
105
  export declare const configService: ConfigService;
@@ -1,15 +1,15 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.configService = exports.ConfigService = void 0;
4
- const client_ssm_1 = require("@aws-sdk/client-ssm");
5
- const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
6
- class ConfigService {
1
+ import { SSMClient, GetParameterCommand, GetParametersByPathCommand } from '@aws-sdk/client-ssm';
2
+ import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-secrets-manager';
3
+ export class ConfigService {
4
+ static instance;
5
+ ssmClient;
6
+ secretsClient;
7
+ cache = new Map();
8
+ cacheTimestamps = new Map();
9
+ CACHE_TTL = 5 * 60 * 1000; // 5 minutes
7
10
  constructor(region = 'us-east-1') {
8
- this.cache = new Map();
9
- this.cacheTimestamps = new Map();
10
- this.CACHE_TTL = 5 * 60 * 1000;
11
- this.ssmClient = new client_ssm_1.SSMClient({ region });
12
- this.secretsClient = new client_secrets_manager_1.SecretsManagerClient({ region });
11
+ this.ssmClient = new SSMClient({ region });
12
+ this.secretsClient = new SecretsManagerClient({ region });
13
13
  }
14
14
  static getInstance(region) {
15
15
  if (!ConfigService.instance) {
@@ -17,6 +17,9 @@ class ConfigService {
17
17
  }
18
18
  return ConfigService.instance;
19
19
  }
20
+ /**
21
+ * Get all infrastructure configuration from SSM Parameter Store
22
+ */
20
23
  async getInfrastructureConfig(stage = process.env.NODE_ENV || 'dev') {
21
24
  const cacheKey = `infra-${stage}`;
22
25
  const cached = this.getFromCache(cacheKey);
@@ -24,7 +27,7 @@ class ConfigService {
24
27
  return cached;
25
28
  const pathPrefix = `/qshelter/${stage}/`;
26
29
  try {
27
- const command = new client_ssm_1.GetParametersByPathCommand({
30
+ const command = new GetParametersByPathCommand({
28
31
  Path: pathPrefix,
29
32
  Recursive: true,
30
33
  WithDecryption: false,
@@ -53,12 +56,15 @@ class ConfigService {
53
56
  throw new Error(`Failed to load infrastructure configuration: ${error.message}`);
54
57
  }
55
58
  }
59
+ /**
60
+ * Get a single parameter from SSM
61
+ */
56
62
  async getParameter(name) {
57
63
  const cached = this.getFromCache(name);
58
64
  if (cached)
59
65
  return cached;
60
66
  try {
61
- const command = new client_ssm_1.GetParameterCommand({
67
+ const command = new GetParameterCommand({
62
68
  Name: name,
63
69
  WithDecryption: false,
64
70
  });
@@ -72,39 +78,62 @@ class ConfigService {
72
78
  throw new Error(`Failed to load parameter ${name}: ${error.message}`);
73
79
  }
74
80
  }
81
+ /**
82
+ * Get JWT secrets from Secrets Manager
83
+ */
75
84
  async getJwtSecret(stage = process.env.NODE_ENV || 'dev') {
76
85
  return this.getSecret(`qshelter/${stage}/jwt-secret`);
77
86
  }
87
+ /**
88
+ * Get refresh token secret from Secrets Manager
89
+ */
78
90
  async getRefreshTokenSecret(stage = process.env.NODE_ENV || 'dev') {
79
91
  return this.getSecret(`qshelter/${stage}/refresh-token-secret`);
80
92
  }
93
+ /**
94
+ * Get encryption secrets from Secrets Manager
95
+ */
81
96
  async getEncryptionSecrets(stage = process.env.NODE_ENV || 'dev') {
82
97
  return this.getSecret(`qshelter/${stage}/encryption`);
83
98
  }
99
+ /**
100
+ * Get OAuth secrets from Secrets Manager
101
+ */
84
102
  async getOAuthSecrets(stage = process.env.NODE_ENV || 'dev') {
85
103
  return this.getSecret(`qshelter/${stage}/oauth`);
86
104
  }
105
+ /**
106
+ * Get Paystack secrets from Secrets Manager
107
+ */
87
108
  async getPaystackSecrets(stage = process.env.NODE_ENV || 'dev') {
88
109
  return this.getSecret(`qshelter/${stage}/paystack`);
89
110
  }
111
+ /**
112
+ * Get Email secrets from Secrets Manager
113
+ */
90
114
  async getEmailSecrets(stage = process.env.NODE_ENV || 'dev') {
91
115
  return this.getSecret(`qshelter/${stage}/email`);
92
116
  }
117
+ /**
118
+ * Generic method to get any secret from Secrets Manager
119
+ */
93
120
  async getSecret(secretName) {
94
121
  const cached = this.getFromCache(secretName);
95
122
  if (cached)
96
123
  return cached;
97
124
  try {
98
- const command = new client_secrets_manager_1.GetSecretValueCommand({
125
+ const command = new GetSecretValueCommand({
99
126
  SecretId: secretName,
100
127
  });
101
128
  const response = await this.secretsClient.send(command);
102
129
  const secretString = response.SecretString || '{}';
130
+ // Try to parse as JSON first, if it fails treat as plain text
103
131
  let secret;
104
132
  try {
105
133
  secret = JSON.parse(secretString);
106
134
  }
107
135
  catch {
136
+ // If not JSON, treat as plain text and wrap in object with 'secret' key
108
137
  secret = { secret: secretString };
109
138
  }
110
139
  this.setCache(secretName, secret);
@@ -115,6 +144,9 @@ class ConfigService {
115
144
  throw new Error(`Failed to load secret ${secretName}: ${error.message}`);
116
145
  }
117
146
  }
147
+ /**
148
+ * Helper to extract parameter value from SSM response
149
+ */
118
150
  getParamValue(params, name) {
119
151
  const param = params.find(p => p.Name === name);
120
152
  if (!param) {
@@ -122,6 +154,9 @@ class ConfigService {
122
154
  }
123
155
  return param.Value || '';
124
156
  }
157
+ /**
158
+ * Get value from cache if valid
159
+ */
125
160
  getFromCache(key) {
126
161
  const now = Date.now();
127
162
  const cachedTime = this.cacheTimestamps.get(key);
@@ -130,15 +165,27 @@ class ConfigService {
130
165
  }
131
166
  return null;
132
167
  }
168
+ /**
169
+ * Set value in cache with timestamp
170
+ */
133
171
  setCache(key, value) {
134
172
  this.cache.set(key, value);
135
173
  this.cacheTimestamps.set(key, Date.now());
136
174
  }
175
+ /**
176
+ * Clear the cache (useful for testing or forcing refresh)
177
+ */
137
178
  clearCache() {
138
179
  this.cache.clear();
139
180
  this.cacheTimestamps.clear();
140
181
  }
182
+ /**
183
+ * Get a configuration value from environment variables
184
+ * This is useful for local development when AWS services are not available
185
+ */
186
+ get(key) {
187
+ return process.env[key] || '';
188
+ }
141
189
  }
142
- exports.ConfigService = ConfigService;
143
- exports.configService = ConfigService.getInstance();
144
- //# sourceMappingURL=config.service.js.map
190
+ // Export singleton instance
191
+ export const configService = ConfigService.getInstance();
@@ -0,0 +1 @@
1
+ export * from './config.service';
package/dist/index.d.ts CHANGED
@@ -1,16 +1,3 @@
1
- export * from './pagination';
2
- export * from './standard-response';
3
- export * from './entities';
4
- export * from './middleware';
5
- export * from './helpers';
6
- export * from './decorator';
7
- export * from './types';
8
- export * from './guard';
9
- export * from './OpenApiHelper';
10
- export * from './encryption/encryption.service';
11
- export * from './encryption/encryption.module';
12
- export * from './qr-code/qr-code.service';
13
- export * from './qr-code/qr-code.module';
14
- export * from './qr-code/qr-code.type';
15
- export * from './qr-code/qr-code.dto';
16
- export * from './src/config';
1
+ export * from './types/response';
2
+ export * from './utils/errors';
3
+ export * from './config';
package/dist/index.js CHANGED
@@ -1,33 +1,3 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./pagination"), exports);
18
- __exportStar(require("./standard-response"), exports);
19
- __exportStar(require("./entities"), exports);
20
- __exportStar(require("./middleware"), exports);
21
- __exportStar(require("./helpers"), exports);
22
- __exportStar(require("./decorator"), exports);
23
- __exportStar(require("./types"), exports);
24
- __exportStar(require("./guard"), exports);
25
- __exportStar(require("./OpenApiHelper"), exports);
26
- __exportStar(require("./encryption/encryption.service"), exports);
27
- __exportStar(require("./encryption/encryption.module"), exports);
28
- __exportStar(require("./qr-code/qr-code.service"), exports);
29
- __exportStar(require("./qr-code/qr-code.module"), exports);
30
- __exportStar(require("./qr-code/qr-code.type"), exports);
31
- __exportStar(require("./qr-code/qr-code.dto"), exports);
32
- __exportStar(require("./src/config"), exports);
33
- //# sourceMappingURL=index.js.map
1
+ export * from './types/response';
2
+ export * from './utils/errors';
3
+ export * from './config';
@@ -0,0 +1,2 @@
1
+ export type { User, Role, Permission, RolePermission, Tenant, RefreshToken, PasswordReset, UserSuspension, EmailPreference, DeviceEndpoint, Social, Wallet, Transaction, Settings, Property, PropertyMedia, PropertyDocument, Amenity, PropertyAmenity, Mortgage, MortgageType, MortgageDocument, MortgageStep, MortgageDownpaymentPlan, MortgageDownpaymentInstallment, MortgageDownpaymentPayment, MortgageTransition, MortgageTransitionEvent, PaymentPlan, PaymentSchedule, PaymentInstallment, Payment, Contract, ContractDocument, Prisma, } from '@prisma/client';
2
+ export { Prisma as PrismaNamespace } from '@prisma/client';
@@ -0,0 +1,2 @@
1
+ // Export Prisma namespace for advanced types
2
+ export { Prisma as PrismaNamespace } from '@prisma/client';
@@ -0,0 +1,15 @@
1
+ export interface ApiResponse<T = any> {
2
+ success: boolean;
3
+ data?: T;
4
+ error?: string;
5
+ message?: string;
6
+ }
7
+ export interface PaginatedResponse<T = any> {
8
+ data: T[];
9
+ total: number;
10
+ page: number;
11
+ pageSize: number;
12
+ totalPages: number;
13
+ }
14
+ export declare function successResponse<T>(data: T, message?: string): ApiResponse<T>;
15
+ export declare function errorResponse(error: string): ApiResponse;
@@ -0,0 +1,6 @@
1
+ export function successResponse(data, message) {
2
+ return { success: true, data, message };
3
+ }
4
+ export function errorResponse(error) {
5
+ return { success: false, error };
6
+ }
@@ -0,0 +1,21 @@
1
+ export declare class AppError extends Error {
2
+ statusCode: number;
3
+ message: string;
4
+ isOperational: boolean;
5
+ constructor(statusCode: number, message: string, isOperational?: boolean);
6
+ }
7
+ export declare class ValidationError extends AppError {
8
+ constructor(message: string);
9
+ }
10
+ export declare class UnauthorizedError extends AppError {
11
+ constructor(message?: string);
12
+ }
13
+ export declare class ForbiddenError extends AppError {
14
+ constructor(message?: string);
15
+ }
16
+ export declare class NotFoundError extends AppError {
17
+ constructor(message?: string);
18
+ }
19
+ export declare class ConflictError extends AppError {
20
+ constructor(message: string);
21
+ }
@@ -0,0 +1,28 @@
1
+ export class AppError extends Error {
2
+ statusCode;
3
+ message;
4
+ isOperational;
5
+ constructor(statusCode, message, isOperational = true) {
6
+ super(message);
7
+ this.statusCode = statusCode;
8
+ this.message = message;
9
+ this.isOperational = isOperational;
10
+ this.name = this.constructor.name;
11
+ Error.captureStackTrace(this, this.constructor);
12
+ }
13
+ }
14
+ export class ValidationError extends AppError {
15
+ constructor(message) { super(400, message); }
16
+ }
17
+ export class UnauthorizedError extends AppError {
18
+ constructor(message = 'Unauthorized') { super(401, message); }
19
+ }
20
+ export class ForbiddenError extends AppError {
21
+ constructor(message = 'Forbidden') { super(403, message); }
22
+ }
23
+ export class NotFoundError extends AppError {
24
+ constructor(message = 'Resource not found') { super(404, message); }
25
+ }
26
+ export class ConflictError extends AppError {
27
+ constructor(message) { super(409, message); }
28
+ }
package/package.json CHANGED
@@ -1,101 +1,36 @@
1
1
  {
2
- "name": "@valentine-efagene/qshelter-common",
3
- "version": "2.0.2",
4
- "description": "Shared common utilities, DTOs, entities, guards, middleware, decorators, and pagination for QShelter",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
7
- "scripts": {
8
- "build": "tsc",
9
- "prepublishOnly": "npm run build",
10
- "patch": "npm version patch && npm run build && npm publish --access public",
11
- "publish:public": "npm publish --access public",
12
- "build:watch": "tsc -w",
13
- "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
14
- "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
15
- },
16
- "keywords": [
17
- "common",
18
- "utilities",
19
- "nestjs",
20
- "entities",
21
- "pagination",
22
- "qshelter",
23
- "aws",
24
- "config"
25
- ],
26
- "author": "Valentine Efagene",
27
- "license": "MIT",
28
- "files": [
29
- "dist"
30
- ],
31
- "exports": {
32
- ".": {
33
- "import": "./dist/index.js",
34
- "require": "./dist/index.js"
35
- },
36
- "./*": {
37
- "import": "./dist/*",
38
- "require": "./dist/*"
39
- },
40
- "./middleware/*": {
41
- "import": "./dist/middleware/*",
42
- "require": "./dist/middleware/*"
43
- },
44
- "./guard/*": {
45
- "import": "./dist/guard/*",
46
- "require": "./dist/guard/*"
47
- },
48
- "./helpers/*": {
49
- "import": "./dist/helpers/*",
50
- "require": "./dist/helpers/*"
51
- },
52
- "./decorator/*": {
53
- "import": "./dist/decorator/*",
54
- "require": "./dist/decorator/*"
55
- },
56
- "./entities/*": {
57
- "import": "./dist/entities/*",
58
- "require": "./dist/entities/*"
59
- },
60
- "./types/*": {
61
- "import": "./dist/types/*",
62
- "require": "./dist/types/*"
63
- },
64
- "./OpenApiHelper": {
65
- "import": "./dist/OpenApiHelper.js",
66
- "require": "./dist/OpenApiHelper.js"
67
- },
68
- "./standard-response": {
69
- "import": "./dist/standard-response.js",
70
- "require": "./dist/standard-response.js"
71
- }
72
- },
73
- "peerDependencies": {
74
- "@nestjs/common": "^10.0.0",
75
- "@nestjs/config": "^3.0.0",
76
- "@nestjs/jwt": "^10.0.0",
77
- "@nestjs/swagger": "^7.4.0",
78
- "class-transformer": "^0.5.0",
79
- "class-validator": "^0.14.0",
80
- "typeorm": "^0.3.0"
81
- },
82
- "dependencies": {
83
- "@aws-sdk/client-secrets-manager": "^3.958.0",
84
- "@aws-sdk/client-ssm": "^3.958.0",
85
- "@types/qrcode": "^1.5.6",
86
- "handlebars": "^4.7.8",
87
- "qrcode": "^1.5.4"
88
- },
89
- "devDependencies": {
90
- "@nestjs/common": "^10.0.0",
91
- "@nestjs/config": "^3.0.0",
92
- "@nestjs/jwt": "^10.0.0",
93
- "@nestjs/swagger": "^7.4.0",
94
- "@types/handlebars": "^4.1.0",
95
- "@types/node": "^20.0.0",
96
- "class-transformer": "^0.5.1",
97
- "class-validator": "^0.14.0",
98
- "typeorm": "^0.3.20",
99
- "typescript": "^5.0.0"
100
- }
2
+ "name": "@valentine-efagene/qshelter-common",
3
+ "version": "2.0.4",
4
+ "description": "Shared database schemas and utilities for QShelter services",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "type": "module",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "dev": "tsc --watch",
11
+ "patch": "npm version patch && npm run build && npm publish --access public",
12
+ "prepublishOnly": "npm run build",
13
+ "publish:public": "npm publish --access public"
14
+ },
15
+ "keywords": [
16
+ "qshelter",
17
+ "common",
18
+ "schemas",
19
+ "prisma"
20
+ ],
21
+ "author": "Valentine Efagene",
22
+ "license": "MIT",
23
+ "files": [
24
+ "dist",
25
+ "prisma"
26
+ ],
27
+ "dependencies": {
28
+ "@prisma/client": "^7.0.0",
29
+ "prisma": "^7.0.0",
30
+ "@aws-sdk/client-ssm": "^3.500.0",
31
+ "@aws-sdk/client-secrets-manager": "^3.500.0"
32
+ },
33
+ "devDependencies": {
34
+ "typescript": "^5.7.3"
35
+ }
101
36
  }