@heavybit/pendoadmin-shared-lib 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 (132) hide show
  1. package/dist/common/index.d.ts +6 -0
  2. package/dist/common/index.d.ts.map +1 -0
  3. package/dist/common/index.js +6 -0
  4. package/dist/common/index.js.map +1 -0
  5. package/dist/common/jwt.utils.d.ts +7 -0
  6. package/dist/common/jwt.utils.d.ts.map +1 -0
  7. package/dist/common/jwt.utils.js +31 -0
  8. package/dist/common/jwt.utils.js.map +1 -0
  9. package/dist/common/password.utils.d.ts +4 -0
  10. package/dist/common/password.utils.d.ts.map +1 -0
  11. package/dist/common/password.utils.js +17 -0
  12. package/dist/common/password.utils.js.map +1 -0
  13. package/dist/common/phone.utils.d.ts +4 -0
  14. package/dist/common/phone.utils.d.ts.map +1 -0
  15. package/dist/common/phone.utils.js +36 -0
  16. package/dist/common/phone.utils.js.map +1 -0
  17. package/dist/common/response.utils.d.ts +6 -0
  18. package/dist/common/response.utils.d.ts.map +1 -0
  19. package/dist/common/response.utils.js +33 -0
  20. package/dist/common/response.utils.js.map +1 -0
  21. package/dist/common/uuid.utils.d.ts +5 -0
  22. package/dist/common/uuid.utils.d.ts.map +1 -0
  23. package/dist/common/uuid.utils.js +10 -0
  24. package/dist/common/uuid.utils.js.map +1 -0
  25. package/dist/config/index.d.ts +95 -0
  26. package/dist/config/index.d.ts.map +1 -0
  27. package/dist/config/index.js +71 -0
  28. package/dist/config/index.js.map +1 -0
  29. package/dist/database/index.d.ts +25 -0
  30. package/dist/database/index.d.ts.map +1 -0
  31. package/dist/database/index.js +62 -0
  32. package/dist/database/index.js.map +1 -0
  33. package/dist/express/auth.middleware.d.ts +20 -0
  34. package/dist/express/auth.middleware.d.ts.map +1 -0
  35. package/dist/express/auth.middleware.js +83 -0
  36. package/dist/express/auth.middleware.js.map +1 -0
  37. package/dist/express/correlation.middleware.d.ts +6 -0
  38. package/dist/express/correlation.middleware.d.ts.map +1 -0
  39. package/dist/express/correlation.middleware.js +15 -0
  40. package/dist/express/correlation.middleware.js.map +1 -0
  41. package/dist/express/error-handler.d.ts +8 -0
  42. package/dist/express/error-handler.d.ts.map +1 -0
  43. package/dist/express/error-handler.js +18 -0
  44. package/dist/express/error-handler.js.map +1 -0
  45. package/dist/express/index.d.ts +6 -0
  46. package/dist/express/index.d.ts.map +1 -0
  47. package/dist/express/index.js +6 -0
  48. package/dist/express/index.js.map +1 -0
  49. package/dist/express/permission.guard.d.ts +14 -0
  50. package/dist/express/permission.guard.d.ts.map +1 -0
  51. package/dist/express/permission.guard.js +66 -0
  52. package/dist/express/permission.guard.js.map +1 -0
  53. package/dist/express/validation.middleware.d.ts +14 -0
  54. package/dist/express/validation.middleware.d.ts.map +1 -0
  55. package/dist/express/validation.middleware.js +80 -0
  56. package/dist/express/validation.middleware.js.map +1 -0
  57. package/dist/index.d.ts +9 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +17 -0
  60. package/dist/index.js.map +1 -0
  61. package/dist/logging/index.d.ts +4 -0
  62. package/dist/logging/index.d.ts.map +1 -0
  63. package/dist/logging/index.js +24 -0
  64. package/dist/logging/index.js.map +1 -0
  65. package/dist/messaging/index.d.ts +58 -0
  66. package/dist/messaging/index.d.ts.map +1 -0
  67. package/dist/messaging/index.js +132 -0
  68. package/dist/messaging/index.js.map +1 -0
  69. package/dist/nestjs/auth.guard.d.ts +12 -0
  70. package/dist/nestjs/auth.guard.d.ts.map +1 -0
  71. package/dist/nestjs/auth.guard.js +75 -0
  72. package/dist/nestjs/auth.guard.js.map +1 -0
  73. package/dist/nestjs/correlation.interceptor.d.ts +9 -0
  74. package/dist/nestjs/correlation.interceptor.d.ts.map +1 -0
  75. package/dist/nestjs/correlation.interceptor.js +29 -0
  76. package/dist/nestjs/correlation.interceptor.js.map +1 -0
  77. package/dist/nestjs/exception.filter.d.ts +8 -0
  78. package/dist/nestjs/exception.filter.d.ts.map +1 -0
  79. package/dist/nestjs/exception.filter.js +54 -0
  80. package/dist/nestjs/exception.filter.js.map +1 -0
  81. package/dist/nestjs/index.d.ts +7 -0
  82. package/dist/nestjs/index.d.ts.map +1 -0
  83. package/dist/nestjs/index.js +7 -0
  84. package/dist/nestjs/index.js.map +1 -0
  85. package/dist/nestjs/permission.decorator.d.ts +22 -0
  86. package/dist/nestjs/permission.decorator.d.ts.map +1 -0
  87. package/dist/nestjs/permission.decorator.js +30 -0
  88. package/dist/nestjs/permission.decorator.js.map +1 -0
  89. package/dist/nestjs/permission.guard.d.ts +12 -0
  90. package/dist/nestjs/permission.guard.d.ts.map +1 -0
  91. package/dist/nestjs/permission.guard.js +66 -0
  92. package/dist/nestjs/permission.guard.js.map +1 -0
  93. package/dist/nestjs/user.decorator.d.ts +12 -0
  94. package/dist/nestjs/user.decorator.d.ts.map +1 -0
  95. package/dist/nestjs/user.decorator.js +16 -0
  96. package/dist/nestjs/user.decorator.js.map +1 -0
  97. package/dist/types/index.d.ts +193 -0
  98. package/dist/types/index.d.ts.map +1 -0
  99. package/dist/types/index.js +17 -0
  100. package/dist/types/index.js.map +1 -0
  101. package/dist/validation/index.d.ts +32 -0
  102. package/dist/validation/index.d.ts.map +1 -0
  103. package/dist/validation/index.js +21 -0
  104. package/dist/validation/index.js.map +1 -0
  105. package/package.json +100 -0
  106. package/src/common/index.ts +5 -0
  107. package/src/common/jwt.utils.ts +43 -0
  108. package/src/common/password.utils.ts +20 -0
  109. package/src/common/phone.utils.ts +36 -0
  110. package/src/common/response.utils.ts +48 -0
  111. package/src/common/uuid.utils.ts +11 -0
  112. package/src/config/index.ts +73 -0
  113. package/src/database/index.ts +77 -0
  114. package/src/express/auth.middleware.ts +93 -0
  115. package/src/express/correlation.middleware.ts +16 -0
  116. package/src/express/error-handler.ts +28 -0
  117. package/src/express/index.ts +5 -0
  118. package/src/express/permission.guard.ts +72 -0
  119. package/src/express/validation.middleware.ts +76 -0
  120. package/src/index.ts +23 -0
  121. package/src/logging/index.ts +31 -0
  122. package/src/messaging/index.ts +161 -0
  123. package/src/nestjs/auth.guard.ts +69 -0
  124. package/src/nestjs/correlation.interceptor.ts +30 -0
  125. package/src/nestjs/exception.filter.ts +53 -0
  126. package/src/nestjs/index.ts +11 -0
  127. package/src/nestjs/permission.decorator.ts +36 -0
  128. package/src/nestjs/permission.guard.ts +76 -0
  129. package/src/nestjs/user.decorator.ts +19 -0
  130. package/src/types/index.ts +239 -0
  131. package/src/validation/index.ts +26 -0
  132. package/tsconfig.json +22 -0
@@ -0,0 +1,239 @@
1
+ // ──────────────────────────────────────────────
2
+ // User & Auth Types
3
+ // ──────────────────────────────────────────────
4
+
5
+ export interface IUser {
6
+ id: string;
7
+ email: string;
8
+ first_name: string;
9
+ last_name: string;
10
+ phone?: string | null;
11
+ password_hash: string;
12
+ company_id: string;
13
+ is_superadmin: boolean;
14
+ is_active: boolean;
15
+ email_verified: boolean;
16
+ failed_login_attempts: number;
17
+ locked_until: Date | null;
18
+ change_password_next_login: boolean;
19
+ last_login_at: Date | null;
20
+ created_at: Date;
21
+ updated_at: Date;
22
+ }
23
+
24
+ export interface IUserCreate {
25
+ email: string;
26
+ first_name: string;
27
+ last_name: string;
28
+ phone?: string;
29
+ password_hash: string;
30
+ company_id: string;
31
+ is_superadmin?: boolean;
32
+ }
33
+
34
+ export interface IUserUpdate {
35
+ email?: string;
36
+ first_name?: string;
37
+ last_name?: string;
38
+ phone?: string;
39
+ password_hash?: string;
40
+ company_id?: string;
41
+ is_active?: boolean;
42
+ email_verified?: boolean;
43
+ failed_login_attempts?: number;
44
+ locked_until?: Date | null;
45
+ change_password_next_login?: boolean;
46
+ last_login_at?: Date | null;
47
+ }
48
+
49
+ export interface IJwtPayload {
50
+ sub: string;
51
+ email: string;
52
+ companyId: string;
53
+ roles: string[];
54
+ permissions: string[];
55
+ isSuperAdmin: boolean;
56
+ iat?: number;
57
+ exp?: number;
58
+ iss?: string;
59
+ }
60
+
61
+ export interface ITokenPair {
62
+ accessToken: string;
63
+ refreshToken: string;
64
+ expiresIn: number;
65
+ }
66
+
67
+ export interface IAuthUser {
68
+ id: string;
69
+ email: string;
70
+ companyId: string;
71
+ roles: string[];
72
+ permissions: string[];
73
+ isSuperAdmin: boolean;
74
+ }
75
+
76
+ // ──────────────────────────────────────────────
77
+ // Company & Branch Types
78
+ // ──────────────────────────────────────────────
79
+
80
+ export interface ICompany {
81
+ id: string;
82
+ name: string;
83
+ short_name?: string | null;
84
+ company_type?: string | null;
85
+ email?: string | null;
86
+ phone?: string | null;
87
+ address?: string | null;
88
+ city?: string | null;
89
+ country?: string | null;
90
+ logo_url?: string | null;
91
+ website?: string | null;
92
+ is_active: boolean;
93
+ created_at: Date;
94
+ updated_at: Date;
95
+ }
96
+
97
+ export interface ICompanyCreate {
98
+ name: string;
99
+ short_name?: string;
100
+ company_type?: string;
101
+ email?: string;
102
+ phone?: string;
103
+ address?: string;
104
+ city?: string;
105
+ country?: string;
106
+ }
107
+
108
+ export interface ICompanyUpdate {
109
+ name?: string;
110
+ short_name?: string;
111
+ company_type?: string;
112
+ email?: string;
113
+ phone?: string;
114
+ address?: string;
115
+ city?: string;
116
+ country?: string;
117
+ logo_url?: string;
118
+ website?: string;
119
+ is_active?: boolean;
120
+ }
121
+
122
+ export interface ICompanyBranch {
123
+ id: string;
124
+ company_id: string;
125
+ name: string;
126
+ code?: string | null;
127
+ address?: string | null;
128
+ city?: string | null;
129
+ phone?: string | null;
130
+ email?: string | null;
131
+ is_active: boolean;
132
+ created_at: Date;
133
+ updated_at: Date;
134
+ }
135
+
136
+ export interface ICompanyServiceConfig {
137
+ id: string;
138
+ company_id: string;
139
+ service_name: string;
140
+ config: Record<string, unknown>;
141
+ is_active: boolean;
142
+ created_at: Date;
143
+ updated_at: Date;
144
+ }
145
+
146
+ // ──────────────────────────────────────────────
147
+ // Role & Permission Types
148
+ // ──────────────────────────────────────────────
149
+
150
+ export interface IRole {
151
+ id: string;
152
+ name: string;
153
+ slug: string;
154
+ description?: string | null;
155
+ company_id?: string | null;
156
+ is_system_role: boolean;
157
+ is_editable: boolean;
158
+ created_at: Date;
159
+ updated_at: Date;
160
+ }
161
+
162
+ export interface IPermission {
163
+ id: string;
164
+ name: string;
165
+ description?: string | null;
166
+ category: string;
167
+ is_active: boolean;
168
+ created_at: Date;
169
+ }
170
+
171
+ // ──────────────────────────────────────────────
172
+ // API Response Types
173
+ // ──────────────────────────────────────────────
174
+
175
+ export interface IApiResponse<T = unknown> {
176
+ success: boolean;
177
+ message: string;
178
+ data?: T;
179
+ errors?: Record<string, string[]>;
180
+ meta?: IPaginationMeta;
181
+ }
182
+
183
+ export interface IPaginationMeta {
184
+ page: number;
185
+ limit: number;
186
+ total: number;
187
+ totalPages: number;
188
+ hasNext: boolean;
189
+ hasPrev: boolean;
190
+ }
191
+
192
+ export interface IPaginationParams {
193
+ page: number;
194
+ limit: number;
195
+ search?: string;
196
+ sortBy?: string;
197
+ sortOrder?: 'asc' | 'desc';
198
+ }
199
+
200
+ export interface IPaginatedResult<T> {
201
+ data: T[];
202
+ meta: IPaginationMeta;
203
+ }
204
+
205
+ // ──────────────────────────────────────────────
206
+ // Analytics Types
207
+ // ──────────────────────────────────────────────
208
+
209
+ export interface IAnalyticsEvent {
210
+ event_type: string;
211
+ event_data: Record<string, unknown>;
212
+ company_id?: string;
213
+ timestamp?: Date;
214
+ }
215
+
216
+ // ──────────────────────────────────────────────
217
+ // Service Config Types
218
+ // ──────────────────────────────────────────────
219
+
220
+ export interface IServiceConfig {
221
+ serviceName: string;
222
+ serviceUrl: string;
223
+ healthEndpoint: string;
224
+ }
225
+
226
+ // ──────────────────────────────────────────────
227
+ // Gateway Header Types
228
+ // ──────────────────────────────────────────────
229
+
230
+ export const GATEWAY_HEADERS = {
231
+ USER_ID: 'x-user-id',
232
+ COMPANY_ID: 'x-company-id',
233
+ USER_EMAIL: 'x-user-email',
234
+ USER_ROLES: 'x-user-roles',
235
+ USER_PERMISSIONS: 'x-user-permissions',
236
+ IS_SUPERADMIN: 'x-is-superadmin',
237
+ CORRELATION_ID: 'x-correlation-id',
238
+ SERVICE_NAME: 'x-service-name',
239
+ } as const;
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+
3
+ export const paginationSchema = z.object({
4
+ page: z.coerce.number().int().min(1).default(1),
5
+ limit: z.coerce.number().int().min(1).max(100).default(20),
6
+ search: z.string().optional(),
7
+ sortBy: z.string().optional(),
8
+ sortOrder: z.enum(['asc', 'desc']).default('desc'),
9
+ });
10
+
11
+ export const emailSchema = z.string().email('Invalid email address').toLowerCase().trim();
12
+
13
+ export const phoneSchema = z.string().min(9).max(15).regex(/^\+?[0-9]+$/, 'Invalid phone number');
14
+
15
+ export const uuidSchema = z.string().uuid('Invalid UUID');
16
+
17
+ export const passwordSchema = z.string()
18
+ .min(8, 'Password must be at least 8 characters')
19
+ .regex(/[A-Z]/, 'Password must contain at least one uppercase letter')
20
+ .regex(/[a-z]/, 'Password must contain at least one lowercase letter')
21
+ .regex(/[0-9]/, 'Password must contain at least one digit')
22
+ .regex(/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/, 'Password must contain at least one special character');
23
+
24
+ export const idParamSchema = z.object({
25
+ id: z.string().min(1),
26
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ES2022",
5
+ "moduleResolution": "node",
6
+ "lib": ["ES2022"],
7
+ "outDir": "./dist",
8
+ "rootDir": "./src",
9
+ "declaration": true,
10
+ "declarationMap": true,
11
+ "sourceMap": true,
12
+ "strict": true,
13
+ "esModuleInterop": true,
14
+ "skipLibCheck": true,
15
+ "forceConsistentCasingInFileNames": true,
16
+ "resolveJsonModule": true,
17
+ "experimentalDecorators": true,
18
+ "emitDecoratorMetadata": true
19
+ },
20
+ "include": ["src/**/*"],
21
+ "exclude": ["node_modules", "dist"]
22
+ }