@shadimakhoul/ggcoach 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 (134) hide show
  1. package/config/config.ts +7 -0
  2. package/config/index.ts +2 -0
  3. package/config/initExpress.ts +27 -0
  4. package/config/redis.ts +38 -0
  5. package/config/swagger-ui.ts +84 -0
  6. package/config/swagger.ts +4417 -0
  7. package/dist/config/config.d.ts +8 -0
  8. package/dist/config/config.d.ts.map +1 -0
  9. package/dist/config/config.js +11 -0
  10. package/dist/config/config.js.map +1 -0
  11. package/dist/config/index.d.ts +3 -0
  12. package/dist/config/index.d.ts.map +1 -0
  13. package/dist/config/index.js +19 -0
  14. package/dist/config/index.js.map +1 -0
  15. package/dist/config/initExpress.d.ts +2 -0
  16. package/dist/config/initExpress.d.ts.map +1 -0
  17. package/dist/config/initExpress.js +29 -0
  18. package/dist/config/initExpress.js.map +1 -0
  19. package/dist/config/redis.d.ts +6 -0
  20. package/dist/config/redis.d.ts.map +1 -0
  21. package/dist/config/redis.js +34 -0
  22. package/dist/config/redis.js.map +1 -0
  23. package/dist/config/swagger-ui.d.ts +6 -0
  24. package/dist/config/swagger-ui.d.ts.map +1 -0
  25. package/dist/config/swagger-ui.js +88 -0
  26. package/dist/config/swagger-ui.js.map +1 -0
  27. package/dist/config/swagger.d.ts +9 -0
  28. package/dist/config/swagger.d.ts.map +1 -0
  29. package/dist/config/swagger.js +4406 -0
  30. package/dist/config/swagger.js.map +1 -0
  31. package/dist/index.d.ts +5 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +21 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/middleware/admin-auth.d.ts +4 -0
  36. package/dist/middleware/admin-auth.d.ts.map +1 -0
  37. package/dist/middleware/admin-auth.js +55 -0
  38. package/dist/middleware/admin-auth.js.map +1 -0
  39. package/dist/middleware/auth.d.ts +4 -0
  40. package/dist/middleware/auth.d.ts.map +1 -0
  41. package/dist/middleware/auth.js +86 -0
  42. package/dist/middleware/auth.js.map +1 -0
  43. package/dist/middleware/cors.d.ts +16 -0
  44. package/dist/middleware/cors.d.ts.map +1 -0
  45. package/dist/middleware/cors.js +45 -0
  46. package/dist/middleware/cors.js.map +1 -0
  47. package/dist/middleware/errorHandler.d.ts +3 -0
  48. package/dist/middleware/errorHandler.d.ts.map +1 -0
  49. package/dist/middleware/errorHandler.js +58 -0
  50. package/dist/middleware/errorHandler.js.map +1 -0
  51. package/dist/middleware/index.d.ts +9 -0
  52. package/dist/middleware/index.d.ts.map +1 -0
  53. package/dist/middleware/index.js +25 -0
  54. package/dist/middleware/index.js.map +1 -0
  55. package/dist/middleware/internalAuth.d.ts +4 -0
  56. package/dist/middleware/internalAuth.d.ts.map +1 -0
  57. package/dist/middleware/internalAuth.js +23 -0
  58. package/dist/middleware/internalAuth.js.map +1 -0
  59. package/dist/middleware/rateLimiter.d.ts +4 -0
  60. package/dist/middleware/rateLimiter.d.ts.map +1 -0
  61. package/dist/middleware/rateLimiter.js +24 -0
  62. package/dist/middleware/rateLimiter.js.map +1 -0
  63. package/dist/middleware/swagger.d.ts +16 -0
  64. package/dist/middleware/swagger.d.ts.map +1 -0
  65. package/dist/middleware/swagger.js +49 -0
  66. package/dist/middleware/swagger.js.map +1 -0
  67. package/dist/middleware/validation.d.ts +4 -0
  68. package/dist/middleware/validation.d.ts.map +1 -0
  69. package/dist/middleware/validation.js +24 -0
  70. package/dist/middleware/validation.js.map +1 -0
  71. package/dist/types/admin-auth.d.ts +44 -0
  72. package/dist/types/admin-auth.d.ts.map +1 -0
  73. package/dist/types/admin-auth.js +3 -0
  74. package/dist/types/admin-auth.js.map +1 -0
  75. package/dist/types/auth.d.ts +53 -0
  76. package/dist/types/auth.d.ts.map +1 -0
  77. package/dist/types/auth.js +3 -0
  78. package/dist/types/auth.js.map +1 -0
  79. package/dist/types/enums/auth.d.ts +7 -0
  80. package/dist/types/enums/auth.d.ts.map +1 -0
  81. package/dist/types/enums/auth.js +11 -0
  82. package/dist/types/enums/auth.js.map +1 -0
  83. package/dist/types/enums/index.d.ts +2 -0
  84. package/dist/types/enums/index.d.ts.map +1 -0
  85. package/dist/types/enums/index.js +18 -0
  86. package/dist/types/enums/index.js.map +1 -0
  87. package/dist/types/index.d.ts +4 -0
  88. package/dist/types/index.d.ts.map +1 -0
  89. package/dist/types/index.js +20 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/utils/index.d.ts +4 -0
  92. package/dist/utils/index.d.ts.map +1 -0
  93. package/dist/utils/index.js +20 -0
  94. package/dist/utils/index.js.map +1 -0
  95. package/dist/utils/jwt.d.ts +5 -0
  96. package/dist/utils/jwt.d.ts.map +1 -0
  97. package/dist/utils/jwt.js +67 -0
  98. package/dist/utils/jwt.js.map +1 -0
  99. package/dist/utils/logger.d.ts +6 -0
  100. package/dist/utils/logger.d.ts.map +1 -0
  101. package/dist/utils/logger.js +69 -0
  102. package/dist/utils/logger.js.map +1 -0
  103. package/dist/utils/openapi.d.ts +9 -0
  104. package/dist/utils/openapi.d.ts.map +1 -0
  105. package/dist/utils/openapi.js +90 -0
  106. package/dist/utils/openapi.js.map +1 -0
  107. package/dist/utils/validation.d.ts +12 -0
  108. package/dist/utils/validation.d.ts.map +1 -0
  109. package/dist/utils/validation.js +108 -0
  110. package/dist/utils/validation.js.map +1 -0
  111. package/index.ts +4 -0
  112. package/logs/combined.log +85182 -0
  113. package/logs/error.log +48814 -0
  114. package/middleware/admin-auth.ts +93 -0
  115. package/middleware/auth.ts +100 -0
  116. package/middleware/cors.ts +48 -0
  117. package/middleware/errorHandler.ts +62 -0
  118. package/middleware/index.ts +8 -0
  119. package/middleware/internalAuth.ts +25 -0
  120. package/middleware/rateLimiter.ts +18 -0
  121. package/middleware/swagger.ts +69 -0
  122. package/middleware/validation.ts +24 -0
  123. package/package.json +43 -0
  124. package/public/swagger.css +114 -0
  125. package/tsconfig.json +10 -0
  126. package/types/admin-auth.ts +47 -0
  127. package/types/auth.ts +66 -0
  128. package/types/enums/auth.ts +6 -0
  129. package/types/enums/index.ts +1 -0
  130. package/types/index.ts +3 -0
  131. package/utils/index.ts +3 -0
  132. package/utils/jwt.ts +66 -0
  133. package/utils/logger.ts +90 -0
  134. package/utils/openapi.ts +125 -0
@@ -0,0 +1,7 @@
1
+ export const config = {
2
+ dev: process.env.NODE_ENV === 'dev',
3
+ jwtSecret: process.env.JWT_SECRET || 'default_jwt_secret',
4
+ redis: {
5
+ REDIS_URL: process.env.REDIS_URL || 'redis://redis:6379'
6
+ }
7
+ };
@@ -0,0 +1,2 @@
1
+ export * from './initExpress';
2
+ export * from './redis';
@@ -0,0 +1,27 @@
1
+ import express from "express";
2
+ import dotenv from "dotenv";
3
+ import helmet from "helmet";
4
+ import morgan from "morgan";
5
+ import { corsMiddleware, generalRateLimiter } from "../middleware";
6
+ import { stream } from "../utils";
7
+
8
+ dotenv.config();
9
+
10
+ export function initExpress() {
11
+ const app = express();
12
+
13
+ app.use(helmet());
14
+ app.use(corsMiddleware);
15
+ app.use(generalRateLimiter);
16
+
17
+ app.use(express.json({ limit: "10mb" }));
18
+ app.use(express.urlencoded({ extended: true, limit: "10mb" }));
19
+
20
+ if (process.env.NODE_ENV === "dev") {
21
+ app.use(morgan("dev", { stream } as any));
22
+ } else {
23
+ app.use(morgan("combined", { stream } as any));
24
+ }
25
+
26
+ return app;
27
+ }
@@ -0,0 +1,38 @@
1
+ import { createClient } from 'redis';
2
+
3
+ import { logger } from '../utils';
4
+ import { config } from './config';
5
+
6
+ const REDIS_URL = config.redis.REDIS_URL;
7
+
8
+ export type RedisClient = ReturnType<typeof createClient>;
9
+
10
+ let redisClient: RedisClient | null = null;
11
+
12
+ export const initializeRedis = async (): Promise<RedisClient> => {
13
+ if (redisClient && redisClient.isOpen) {
14
+ return redisClient;
15
+ }
16
+
17
+ redisClient = createClient({ url: REDIS_URL });
18
+
19
+ redisClient.on('error', (err) => logger.error('Redis Client Error', err));
20
+ redisClient.on('connect', () => logger.info('✅ Redis connected'));
21
+
22
+ await redisClient.connect();
23
+ return redisClient;
24
+ };
25
+
26
+ export const getRedisClient = (): RedisClient => {
27
+ if (!redisClient || !redisClient.isOpen) {
28
+ throw new Error('Redis client not initialized');
29
+ }
30
+ return redisClient;
31
+ };
32
+
33
+ export const closeRedis = async (): Promise<void> => {
34
+ if (redisClient && redisClient.isOpen) {
35
+ await redisClient.quit();
36
+ redisClient = null;
37
+ }
38
+ };
@@ -0,0 +1,84 @@
1
+ export const swaggerUiOptions = {
2
+ customCss: `
3
+ /* Main background and text */
4
+ body {
5
+ background-color: #1a1a1a;
6
+ color: #f0f0f0 !important;
7
+ }
8
+
9
+ .swagger-ui {
10
+ background-color: #1a1a1a;
11
+ color: #f0f0f0 !important;
12
+ }
13
+
14
+ /* Force ALL text to be white */
15
+ .swagger-ui *,
16
+ .swagger-ui .opblock-tag,
17
+ .swagger-ui .opblock .opblock-summary-operation-id,
18
+ .swagger-ui .opblock .opblock-summary-path,
19
+ .swagger-ui .opblock .opblock-summary-path span,
20
+ .swagger-ui .opblock .opblock-summary-description,
21
+ .swagger-ui .model-title,
22
+ .swagger-ui label,
23
+ .swagger-ui span,
24
+ .swagger-ui h1, .swagger-ui h2, .swagger-ui h3, .swagger-ui h4, .swagger-ui h5, .swagger-ui h6,
25
+ .swagger-ui .parameter__name,
26
+ .swagger-ui .parameter__type,
27
+ .swagger-ui table thead tr th,
28
+ .swagger-ui table tbody tr td,
29
+ .swagger-ui .response-col_status,
30
+ .swagger-ui .response-col_description,
31
+ .swagger-ui .tab li,
32
+ .swagger-ui section.models h4,
33
+ .swagger-ui section.models h5,
34
+ .swagger-ui .servers > label {
35
+ color: #f0f0f0 !important;
36
+ }
37
+
38
+ /* Override any SVGs or special elements */
39
+ .swagger-ui svg {
40
+ fill: #f0f0f0 !important;
41
+ }
42
+
43
+ .swagger-ui .scheme-container {
44
+ background-color: #1a1a1a;
45
+ }
46
+
47
+ .swagger-ui .opblock .opblock-section-header {
48
+ background-color: #1a1a1a;
49
+ }
50
+
51
+ .swagger-ui .dialog-ux .modal-ux {
52
+ background-color: #1a1a1a;
53
+ }
54
+
55
+ /* Operation blocks */
56
+ .swagger-ui .opblock {
57
+ background-color: #2d2d2d;
58
+ border-color: #444;
59
+ }
60
+
61
+ /* Input fields */
62
+ .swagger-ui input[type=text],
63
+ .swagger-ui textarea {
64
+ background-color: rgb(12, 12, 12);
65
+ color: white !important;
66
+ }
67
+
68
+ .swagger-ui input,
69
+ .swagger-ui select,
70
+ .swagger-ui textarea {
71
+ background-color: #333;
72
+ color: white !important;
73
+ }
74
+
75
+ /* Code blocks */
76
+ .swagger-ui .highlight-code,
77
+ .swagger-ui .microlight {
78
+ background-color: rgb(69, 69, 68) !important;
79
+ color: #f8f8f2 !important;
80
+ }
81
+ `,
82
+ customSiteTitle: "GGCoach API Documentation",
83
+ customfavIcon: "/favicon.ico",
84
+ };