@valentine-efagene/qshelter-common 2.0.1 → 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.
- package/dist/{src/config → config}/config.service.d.ts +44 -0
- package/dist/{src/config → config}/config.service.js +64 -17
- package/dist/config/index.js +1 -0
- package/dist/index.d.ts +3 -16
- package/dist/index.js +3 -33
- package/dist/types/prisma.d.ts +2 -0
- package/dist/types/prisma.js +2 -0
- package/dist/types/response.d.ts +15 -0
- package/dist/types/response.js +6 -0
- package/dist/utils/errors.d.ts +21 -0
- package/dist/utils/errors.js +28 -0
- package/package.json +35 -100
- package/prisma/schema.prisma +636 -0
- package/dist/OpenApiHelper.d.ts +0 -9
- package/dist/OpenApiHelper.js +0 -118
- package/dist/OpenApiHelper.js.map +0 -1
- package/dist/decorator/index.d.ts +0 -2
- package/dist/decorator/index.js +0 -19
- package/dist/decorator/index.js.map +0 -1
- package/dist/decorator/permission.decorator.d.ts +0 -2
- package/dist/decorator/permission.decorator.js +0 -6
- package/dist/decorator/permission.decorator.js.map +0 -1
- package/dist/decorator/tenant.decorator.d.ts +0 -2
- package/dist/decorator/tenant.decorator.js +0 -13
- package/dist/decorator/tenant.decorator.js.map +0 -1
- package/dist/encryption/encryption.module.d.ts +0 -2
- package/dist/encryption/encryption.module.js +0 -24
- package/dist/encryption/encryption.module.js.map +0 -1
- package/dist/encryption/encryption.service.d.ts +0 -17
- package/dist/encryption/encryption.service.js +0 -85
- package/dist/encryption/encryption.service.js.map +0 -1
- package/dist/entities/TenantAwareEntity.d.ts +0 -9
- package/dist/entities/TenantAwareEntity.js +0 -48
- package/dist/entities/TenantAwareEntity.js.map +0 -1
- package/dist/entities/TenantAwareRepository.d.ts +0 -13
- package/dist/entities/TenantAwareRepository.js +0 -65
- package/dist/entities/TenantAwareRepository.js.map +0 -1
- package/dist/entities/amenity.entity.d.ts +0 -4
- package/dist/entities/amenity.entity.js +0 -28
- package/dist/entities/amenity.entity.js.map +0 -1
- package/dist/entities/common.entity.d.ts +0 -16
- package/dist/entities/common.entity.js +0 -63
- package/dist/entities/common.entity.js.map +0 -1
- package/dist/entities/common.pure.entity.d.ts +0 -11
- package/dist/entities/common.pure.entity.js +0 -52
- package/dist/entities/common.pure.entity.js.map +0 -1
- package/dist/entities/contract-document.entity.d.ts +0 -39
- package/dist/entities/contract-document.entity.js +0 -115
- package/dist/entities/contract-document.entity.js.map +0 -1
- package/dist/entities/contract.entity.d.ts +0 -62
- package/dist/entities/contract.entity.js +0 -191
- package/dist/entities/contract.entity.js.map +0 -1
- package/dist/entities/device_endpoint.entity.d.ts +0 -10
- package/dist/entities/device_endpoint.entity.js +0 -50
- package/dist/entities/device_endpoint.entity.js.map +0 -1
- package/dist/entities/email_preference.entity.d.ts +0 -6
- package/dist/entities/email_preference.entity.js +0 -45
- package/dist/entities/email_preference.entity.js.map +0 -1
- package/dist/entities/index.d.ts +0 -36
- package/dist/entities/index.js +0 -53
- package/dist/entities/index.js.map +0 -1
- package/dist/entities/mortgage-document.entity.d.ts +0 -14
- package/dist/entities/mortgage-document.entity.js +0 -58
- package/dist/entities/mortgage-document.entity.js.map +0 -1
- package/dist/entities/mortgage-downpayment-installment.entity.d.ts +0 -19
- package/dist/entities/mortgage-downpayment-installment.entity.js +0 -63
- package/dist/entities/mortgage-downpayment-installment.entity.js.map +0 -1
- package/dist/entities/mortgage-downpayment-payment.entity.d.ts +0 -28
- package/dist/entities/mortgage-downpayment-payment.entity.js +0 -84
- package/dist/entities/mortgage-downpayment-payment.entity.js.map +0 -1
- package/dist/entities/mortgage-downpayment.entity.d.ts +0 -22
- package/dist/entities/mortgage-downpayment.entity.js +0 -66
- package/dist/entities/mortgage-downpayment.entity.js.map +0 -1
- package/dist/entities/mortgage-step.entity.d.ts +0 -12
- package/dist/entities/mortgage-step.entity.js +0 -52
- package/dist/entities/mortgage-step.entity.js.map +0 -1
- package/dist/entities/mortgage-transition-event.entity.d.ts +0 -26
- package/dist/entities/mortgage-transition-event.entity.js +0 -111
- package/dist/entities/mortgage-transition-event.entity.js.map +0 -1
- package/dist/entities/mortgage-transition.entity.d.ts +0 -25
- package/dist/entities/mortgage-transition.entity.js +0 -91
- package/dist/entities/mortgage-transition.entity.js.map +0 -1
- package/dist/entities/mortgage-type.entity.d.ts +0 -10
- package/dist/entities/mortgage-type.entity.js +0 -46
- package/dist/entities/mortgage-type.entity.js.map +0 -1
- package/dist/entities/mortgage.entity.d.ts +0 -37
- package/dist/entities/mortgage.entity.js +0 -124
- package/dist/entities/mortgage.entity.js.map +0 -1
- package/dist/entities/password_reset_tokens.entity.d.ts +0 -7
- package/dist/entities/password_reset_tokens.entity.js +0 -45
- package/dist/entities/password_reset_tokens.entity.js.map +0 -1
- package/dist/entities/payment-installment.entity.d.ts +0 -39
- package/dist/entities/payment-installment.entity.js +0 -134
- package/dist/entities/payment-installment.entity.js.map +0 -1
- package/dist/entities/payment-plan.entity.d.ts +0 -62
- package/dist/entities/payment-plan.entity.js +0 -174
- package/dist/entities/payment-plan.entity.js.map +0 -1
- package/dist/entities/payment-schedule.entity.d.ts +0 -44
- package/dist/entities/payment-schedule.entity.js +0 -134
- package/dist/entities/payment-schedule.entity.js.map +0 -1
- package/dist/entities/payment.entity.d.ts +0 -55
- package/dist/entities/payment.entity.js +0 -157
- package/dist/entities/payment.entity.js.map +0 -1
- package/dist/entities/permission.entity.d.ts +0 -6
- package/dist/entities/permission.entity.js +0 -30
- package/dist/entities/permission.entity.js.map +0 -1
- package/dist/entities/property-document.entity.d.ts +0 -6
- package/dist/entities/property-document.entity.js +0 -34
- package/dist/entities/property-document.entity.js.map +0 -1
- package/dist/entities/property-media.entity.d.ts +0 -6
- package/dist/entities/property-media.entity.js +0 -37
- package/dist/entities/property-media.entity.js.map +0 -1
- package/dist/entities/property.entity.d.ts +0 -40
- package/dist/entities/property.entity.js +0 -202
- package/dist/entities/property.entity.js.map +0 -1
- package/dist/entities/refresh_token.entity.d.ts +0 -7
- package/dist/entities/refresh_token.entity.js +0 -35
- package/dist/entities/refresh_token.entity.js.map +0 -1
- package/dist/entities/role.entity.d.ts +0 -8
- package/dist/entities/role.entity.js +0 -39
- package/dist/entities/role.entity.js.map +0 -1
- package/dist/entities/settings.entity.d.ts +0 -17
- package/dist/entities/settings.entity.js +0 -81
- package/dist/entities/settings.entity.js.map +0 -1
- package/dist/entities/social.entity.d.ts +0 -8
- package/dist/entities/social.entity.js +0 -48
- package/dist/entities/social.entity.js.map +0 -1
- package/dist/entities/tenant.entity.d.ts +0 -32
- package/dist/entities/tenant.entity.js +0 -101
- package/dist/entities/tenant.entity.js.map +0 -1
- package/dist/entities/transaction.entity.d.ts +0 -17
- package/dist/entities/transaction.entity.js +0 -87
- package/dist/entities/transaction.entity.js.map +0 -1
- package/dist/entities/user.entity.d.ts +0 -28
- package/dist/entities/user.entity.js +0 -109
- package/dist/entities/user.entity.js.map +0 -1
- package/dist/entities/user_suspensions.entity.d.ts +0 -7
- package/dist/entities/user_suspensions.entity.js +0 -44
- package/dist/entities/user_suspensions.entity.js.map +0 -1
- package/dist/entities/wallet.entity.d.ts +0 -17
- package/dist/entities/wallet.entity.js +0 -79
- package/dist/entities/wallet.entity.js.map +0 -1
- package/dist/guard/index.d.ts +0 -2
- package/dist/guard/index.js +0 -19
- package/dist/guard/index.js.map +0 -1
- package/dist/guard/permission.guard.d.ts +0 -10
- package/dist/guard/permission.guard.js +0 -47
- package/dist/guard/permission.guard.js.map +0 -1
- package/dist/guard/swagger-auth.guard.d.ts +0 -1
- package/dist/guard/swagger-auth.guard.js +0 -9
- package/dist/guard/swagger-auth.guard.js.map +0 -1
- package/dist/helpers/ArrayHelper.d.ts +0 -2
- package/dist/helpers/ArrayHelper.js +0 -6
- package/dist/helpers/ArrayHelper.js.map +0 -1
- package/dist/helpers/ConstantHelper.d.ts +0 -36
- package/dist/helpers/ConstantHelper.js +0 -90
- package/dist/helpers/ConstantHelper.js.map +0 -1
- package/dist/helpers/CustomNamingStrategy.d.ts +0 -7
- package/dist/helpers/CustomNamingStrategy.js +0 -22
- package/dist/helpers/CustomNamingStrategy.js.map +0 -1
- package/dist/helpers/DateHelper.d.ts +0 -3
- package/dist/helpers/DateHelper.js +0 -20
- package/dist/helpers/DateHelper.js.map +0 -1
- package/dist/helpers/EmailHelper.d.ts +0 -4
- package/dist/helpers/EmailHelper.js +0 -55
- package/dist/helpers/EmailHelper.js.map +0 -1
- package/dist/helpers/FileSystemHelper.d.ts +0 -15
- package/dist/helpers/FileSystemHelper.js +0 -102
- package/dist/helpers/FileSystemHelper.js.map +0 -1
- package/dist/helpers/index.d.ts +0 -5
- package/dist/helpers/index.js +0 -22
- package/dist/helpers/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/middleware/AccessLoggerMiddleware.d.ts +0 -6
- package/dist/middleware/AccessLoggerMiddleware.js +0 -64
- package/dist/middleware/AccessLoggerMiddleware.js.map +0 -1
- package/dist/middleware/AuthenticationMiddleware.d.ts +0 -5
- package/dist/middleware/AuthenticationMiddleware.js +0 -19
- package/dist/middleware/AuthenticationMiddleware.js.map +0 -1
- package/dist/middleware/TenantMiddleware.d.ts +0 -14
- package/dist/middleware/TenantMiddleware.js +0 -49
- package/dist/middleware/TenantMiddleware.js.map +0 -1
- package/dist/middleware/index.d.ts +0 -3
- package/dist/middleware/index.js +0 -20
- package/dist/middleware/index.js.map +0 -1
- package/dist/pagination/index.d.ts +0 -2
- package/dist/pagination/index.js +0 -19
- package/dist/pagination/index.js.map +0 -1
- package/dist/pagination/pagination.helper.d.ts +0 -7
- package/dist/pagination/pagination.helper.js +0 -40
- package/dist/pagination/pagination.helper.js.map +0 -1
- package/dist/pagination/pagination.types.d.ts +0 -19
- package/dist/pagination/pagination.types.js +0 -3
- package/dist/pagination/pagination.types.js.map +0 -1
- package/dist/qr-code/qr-code.dto.d.ts +0 -3
- package/dist/qr-code/qr-code.dto.js +0 -21
- package/dist/qr-code/qr-code.dto.js.map +0 -1
- package/dist/qr-code/qr-code.module.d.ts +0 -2
- package/dist/qr-code/qr-code.module.js +0 -24
- package/dist/qr-code/qr-code.module.js.map +0 -1
- package/dist/qr-code/qr-code.service.d.ts +0 -11
- package/dist/qr-code/qr-code.service.js +0 -89
- package/dist/qr-code/qr-code.service.js.map +0 -1
- package/dist/qr-code/qr-code.type.d.ts +0 -5
- package/dist/qr-code/qr-code.type.js +0 -3
- package/dist/qr-code/qr-code.type.js.map +0 -1
- package/dist/src/config/config.service.js.map +0 -1
- package/dist/src/config/index.js +0 -18
- package/dist/src/config/index.js.map +0 -1
- package/dist/standard-response.d.ts +0 -7
- package/dist/standard-response.js +0 -27
- package/dist/standard-response.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/types/common.type.d.ts +0 -54
- package/dist/types/common.type.js +0 -55
- package/dist/types/common.type.js.map +0 -1
- package/dist/types/index.d.ts +0 -8
- package/dist/types/index.js +0 -25
- package/dist/types/index.js.map +0 -1
- package/dist/types/mortgage-fsm.type.d.ts +0 -180
- package/dist/types/mortgage-fsm.type.js +0 -130
- package/dist/types/mortgage-fsm.type.js.map +0 -1
- package/dist/types/permission.type.d.ts +0 -42
- package/dist/types/permission.type.js +0 -47
- package/dist/types/permission.type.js.map +0 -1
- package/dist/types/policy.type.d.ts +0 -18
- package/dist/types/policy.type.js +0 -3
- package/dist/types/policy.type.js.map +0 -1
- package/dist/types/property.type.d.ts +0 -13
- package/dist/types/property.type.js +0 -20
- package/dist/types/property.type.js.map +0 -1
- package/dist/types/tenant.type.d.ts +0 -13
- package/dist/types/tenant.type.js +0 -19
- package/dist/types/tenant.type.js.map +0 -1
- package/dist/types/transaction.type.d.ts +0 -8
- package/dist/types/transaction.type.js +0 -14
- package/dist/types/transaction.type.js.map +0 -1
- package/dist/types/user.type.d.ts +0 -10
- package/dist/types/user.type.js +0 -16
- package/dist/types/user.type.js.map +0 -1
- /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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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.
|
|
9
|
-
this.
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
143
|
-
|
|
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 './
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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,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,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
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
"
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
"
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
"
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
}
|
|
101
|
-
}
|
|
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
|
+
}
|
|
36
|
+
}
|