startx 0.0.1 → 0.1.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 (154) hide show
  1. package/.prettierignore +0 -13
  2. package/.prettierrc.js +52 -52
  3. package/.vscode/launch.json +32 -0
  4. package/.vscode/settings.json +9 -3
  5. package/apps/core-server/.env.example +18 -24
  6. package/apps/core-server/Dockerfile +35 -61
  7. package/apps/core-server/eslint.config.ts +7 -0
  8. package/apps/core-server/package.json +41 -52
  9. package/apps/core-server/src/config/custom-type.ts +2 -40
  10. package/apps/core-server/src/events/index.ts +37 -37
  11. package/apps/core-server/src/index.ts +4 -13
  12. package/apps/core-server/src/middlewares/auth-middleware.ts +24 -7
  13. package/apps/core-server/src/middlewares/cors-middleware.ts +7 -6
  14. package/apps/core-server/src/middlewares/error-middleware.ts +7 -4
  15. package/apps/core-server/src/middlewares/logger-middleware.ts +81 -21
  16. package/apps/core-server/src/middlewares/notfound-middleware.ts +6 -14
  17. package/apps/core-server/src/middlewares/serve-static.ts +30 -24
  18. package/apps/core-server/src/routes/files/router.ts +9 -7
  19. package/apps/core-server/src/routes/server.ts +30 -36
  20. package/apps/core-server/tsdown.config.ts +4 -3
  21. package/biome.json +58 -60
  22. package/configs/eslint-config/package.json +16 -19
  23. package/configs/eslint-config/src/configs/base.ts +185 -225
  24. package/configs/eslint-config/src/configs/extend.ts +3 -0
  25. package/configs/eslint-config/src/configs/frontend.ts +81 -56
  26. package/configs/eslint-config/src/configs/node.ts +6 -6
  27. package/configs/eslint-config/src/plugin.ts +1 -0
  28. package/configs/eslint-config/src/rules/index.ts +8 -12
  29. package/configs/eslint-config/src/rules/no-json-parse-json-stringify.test.ts +30 -17
  30. package/configs/eslint-config/src/rules/no-json-parse-json-stringify.ts +52 -49
  31. package/configs/eslint-config/src/rules/no-uncaught-json-parse.ts +43 -45
  32. package/configs/tsdown-config/package.json +10 -3
  33. package/configs/typescript-config/package.json +10 -1
  34. package/configs/typescript-config/tsconfig.common.json +3 -3
  35. package/configs/vitest-config/dist/base.mjs +1 -0
  36. package/configs/vitest-config/dist/frontend.mjs +1 -0
  37. package/configs/vitest-config/dist/node.mjs +1 -0
  38. package/configs/vitest-config/package.json +12 -0
  39. package/configs/vitest-config/src/base.ts +17 -29
  40. package/configs/vitest-config/src/index.ts +1 -0
  41. package/package.json +21 -13
  42. package/packages/@repo/constants/eslint.config.ts +4 -0
  43. package/packages/@repo/constants/package.json +16 -0
  44. package/packages/@repo/constants/src/index.ts +8 -8
  45. package/packages/@repo/db/eslint.config.ts +4 -0
  46. package/packages/@repo/db/package.json +16 -8
  47. package/packages/@repo/db/src/index.ts +26 -20
  48. package/packages/@repo/db/src/schema/common.ts +45 -49
  49. package/packages/@repo/env/eslint.config.ts +4 -0
  50. package/packages/@repo/env/package.json +39 -0
  51. package/packages/@repo/env/src/default-env.ts +12 -0
  52. package/packages/@repo/env/src/define-env.ts +70 -0
  53. package/packages/@repo/env/src/index.ts +2 -0
  54. package/packages/@repo/env/src/utils.ts +52 -0
  55. package/packages/@repo/env/tsconfig.json +7 -0
  56. package/packages/@repo/lib/eslint.config.ts +4 -0
  57. package/packages/@repo/lib/package.json +34 -34
  58. package/packages/@repo/lib/src/bucket-module/file-storage.ts +50 -49
  59. package/packages/@repo/lib/src/bucket-module/index.ts +3 -0
  60. package/packages/@repo/lib/src/bucket-module/s3-storage.ts +120 -114
  61. package/packages/@repo/lib/src/bucket-module/utils.ts +10 -11
  62. package/packages/@repo/lib/src/{cookie-module.ts → cookie-module/cookie-module.ts} +48 -42
  63. package/packages/@repo/lib/src/cookie-module/index.ts +1 -0
  64. package/packages/@repo/lib/src/extra/index.ts +1 -0
  65. package/packages/@repo/lib/src/extra/pagination-module.ts +35 -0
  66. package/packages/@repo/lib/src/{token-module.ts → extra/token-module.ts} +12 -5
  67. package/packages/@repo/lib/src/file-system-module/index.ts +170 -0
  68. package/packages/@repo/lib/src/{hashing-module.ts → hashing-module/index.ts} +9 -9
  69. package/packages/@repo/lib/src/index.ts +0 -26
  70. package/packages/@repo/lib/src/mail-module/index.ts +2 -0
  71. package/packages/@repo/lib/src/mail-module/mock.ts +8 -8
  72. package/packages/@repo/lib/src/mail-module/nodemailer.ts +17 -7
  73. package/packages/@repo/lib/src/notification-module/index.ts +1 -172
  74. package/packages/@repo/lib/src/notification-module/push-notification.ts +97 -90
  75. package/packages/@repo/lib/src/{oauth2-client.ts → oauth2-module/index.ts} +107 -109
  76. package/packages/@repo/lib/src/otp-module/index.ts +91 -0
  77. package/packages/@repo/lib/src/session-module/index.ts +113 -0
  78. package/packages/@repo/lib/src/utils.ts +43 -42
  79. package/packages/@repo/lib/src/validation-module/index.ts +242 -0
  80. package/packages/@repo/logger/eslint.config.ts +4 -0
  81. package/packages/@repo/logger/package.json +40 -0
  82. package/packages/@repo/logger/src/index.ts +2 -0
  83. package/packages/@repo/logger/src/logger.ts +72 -0
  84. package/packages/@repo/{lib/src/logger-module → logger/src}/memory-profiler.ts +64 -65
  85. package/packages/@repo/logger/tsconfig.json +7 -0
  86. package/packages/@repo/mail/eslint.config.ts +4 -0
  87. package/packages/@repo/mail/package.json +10 -3
  88. package/packages/@repo/mail/src/emails/admin/OtpEmail.tsx +169 -168
  89. package/packages/@repo/mail/src/index.ts +1 -2
  90. package/packages/@repo/mail/tsconfig.json +3 -3
  91. package/packages/@repo/redis/dist/index.d.mts +3 -0
  92. package/packages/@repo/redis/dist/index.mjs +5 -0
  93. package/packages/@repo/redis/dist/lib/redis-client.d.mts +7 -0
  94. package/packages/@repo/redis/dist/lib/redis-client.mjs +25 -0
  95. package/packages/@repo/redis/dist/lib/redis-client.mjs.map +1 -0
  96. package/packages/@repo/redis/dist/lib/redis-module.d.mts +5 -0
  97. package/packages/@repo/redis/dist/lib/redis-module.mjs +6 -0
  98. package/packages/@repo/redis/dist/lib/redis-module.mjs.map +1 -0
  99. package/packages/@repo/redis/eslint.config.ts +4 -0
  100. package/packages/@repo/redis/package.json +13 -10
  101. package/packages/@repo/redis/src/index.ts +2 -2
  102. package/packages/@repo/redis/src/lib/redis-client.ts +36 -23
  103. package/packages/@repo/redis/src/lib/redis-module.ts +69 -3
  104. package/packages/cli/dist/index.mjs +203 -0
  105. package/packages/cli/eslint.config.ts +4 -0
  106. package/packages/cli/package.json +44 -0
  107. package/packages/cli/tsconfig.json +12 -0
  108. package/packages/cli/tsdown.config.ts +17 -0
  109. package/packages/ui/components.json +0 -1
  110. package/packages/ui/eslint.config.ts +4 -0
  111. package/packages/ui/package.json +16 -3
  112. package/packages/ui/postcss.config.mjs +9 -9
  113. package/packages/ui/src/components/lib/utils.ts +53 -53
  114. package/packages/ui/src/components/ui/alert-dialog.tsx +118 -116
  115. package/packages/ui/src/components/ui/avatar.tsx +52 -53
  116. package/packages/ui/src/components/ui/badge.tsx +45 -46
  117. package/packages/ui/src/components/ui/breadcrumb.tsx +108 -109
  118. package/packages/ui/src/components/ui/card.tsx +91 -92
  119. package/packages/ui/src/components/ui/carousel.tsx +243 -243
  120. package/packages/ui/src/components/ui/checkbox.tsx +32 -32
  121. package/packages/ui/src/components/ui/command.tsx +144 -155
  122. package/packages/ui/src/components/ui/dialog.tsx +124 -127
  123. package/packages/ui/src/components/ui/form.tsx +166 -165
  124. package/packages/ui/src/components/ui/input-otp.tsx +74 -76
  125. package/packages/ui/src/components/ui/input.tsx +19 -21
  126. package/packages/ui/src/components/ui/multiple-select.tsx +4 -4
  127. package/packages/ui/src/{components/lucide.tsx → lucide.ts} +3 -3
  128. package/packages/ui/tailwind.config.ts +94 -94
  129. package/packages/ui/tsconfig.json +7 -1
  130. package/pnpm-workspace.yaml +41 -1
  131. package/turbo.json +20 -27
  132. package/apps/core-server/eslint.config.mjs +0 -47
  133. package/configs/eslint-config/src/rules/no-dynamic-import-template.ts +0 -32
  134. package/configs/eslint-config/src/rules/no-plain-errors.ts +0 -50
  135. package/configs/eslint-config/tsdown.config.ts +0 -11
  136. package/packages/@repo/constants/eslint.config.mjs +0 -21
  137. package/packages/@repo/db/eslint.config.mjs +0 -21
  138. package/packages/@repo/lib/eslint.config.mjs +0 -49
  139. package/packages/@repo/lib/src/command-module.ts +0 -77
  140. package/packages/@repo/lib/src/constants.ts +0 -3
  141. package/packages/@repo/lib/src/custom-type.ts +0 -54
  142. package/packages/@repo/lib/src/env.ts +0 -13
  143. package/packages/@repo/lib/src/file-system/index.ts +0 -90
  144. package/packages/@repo/lib/src/logger-module/log-config.ts +0 -16
  145. package/packages/@repo/lib/src/logger-module/logger.ts +0 -78
  146. package/packages/@repo/lib/src/mail-module/api.ts +0 -0
  147. package/packages/@repo/lib/src/otp-module.ts +0 -98
  148. package/packages/@repo/lib/src/pagination-module.ts +0 -49
  149. package/packages/@repo/lib/src/user-session.ts +0 -117
  150. package/packages/@repo/lib/src/validation-module.ts +0 -187
  151. package/packages/@repo/mail/tsconfig.build.json +0 -14
  152. package/packages/@repo/mail/tsdown.config.ts +0 -9
  153. package/packages/@repo/redis/eslint.config.mjs +0 -8
  154. package/packages/ui/eslint.config.mjs +0 -18
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@repo/redis",
3
3
  "version": "0.0.0",
4
+ "type": "module",
4
5
  "private": true,
5
6
  "scripts": {
6
7
  "clean": "rimraf dist .turbo",
@@ -15,17 +16,19 @@
15
16
  "exports": "./src/index.ts",
16
17
  "devDependencies": {
17
18
  "eslint-config": "workspace:*",
18
- "typescript-config": "workspace:*",
19
- "@types/eslint": "^8.56.5",
20
- "@types/node": "^20.16.5",
21
- "@types/pg": "^8.11.10",
22
- "eslint": "catalog:",
23
- "tsc-alias": "^1.8.10",
24
- "typescript": "5.5.4"
19
+ "typescript-config": "workspace:*"
25
20
  },
26
21
  "dependencies": {
27
- "drizzle-orm": "^0.36.0",
28
- "ioredis": "^5.4.1",
29
- "pg": "^8.13.1"
22
+ "ioredis": "catalog:",
23
+ "@repo/env": "workspace:*",
24
+ "@repo/logger": "workspace:*"
25
+ },
26
+ "startx": {
27
+ "tags": [
28
+ "node"
29
+ ],
30
+ "requiredDevDeps": [
31
+ "typescript-config"
32
+ ]
30
33
  }
31
34
  }
@@ -1,2 +1,2 @@
1
- export * from "ioredis";
2
- export * from "./lib/redis-client.js";
1
+ export * from "ioredis";
2
+ export * from "./lib/redis-module.js";
@@ -1,23 +1,36 @@
1
- import { Redis } from "ioredis";
2
-
3
- export const redisClient = new Redis({
4
- host: process.env.REDIS_HOST,
5
- port: Number(process.env.REDIS_PORT),
6
- username: process.env.REDIS_USERNAME,
7
- password: process.env.REDIS_PASSWORD,
8
- });
9
-
10
- function setEventListeners() {
11
- redisClient.on("error", (error: string) => {
12
- console.log("Could not establish a connection with redis. " + error);
13
- });
14
- redisClient.on("connect", (error: string) => {
15
- if (error) {
16
- console.log("Could not establish a connection with redis. " + error);
17
- }
18
- console.log("Connected to redis successfully");
19
- });
20
- }
21
-
22
- setEventListeners();
23
-
1
+ /* eslint-disable @typescript-eslint/naming-convention */
2
+ import { defineEnv } from "@repo/env";
3
+ import { logger } from "@repo/logger";
4
+ import { Redis } from "ioredis";
5
+ import z from "zod";
6
+ export const connection = defineEnv({
7
+ REDIS_HOST: z.string().min(1),
8
+ REDIS_PORT: z.number(),
9
+ REDIS_USERNAME: z.string(),
10
+ REDIS_PASSWORD: z.string(),
11
+ });
12
+
13
+ let client: Redis | null = null;
14
+
15
+ export function getRedis() {
16
+ if (!client) {
17
+ client = new Redis({
18
+ host: connection.REDIS_HOST,
19
+ port: connection.REDIS_PORT,
20
+ username: connection.REDIS_USERNAME,
21
+ password: connection.REDIS_PASSWORD,
22
+ lazyConnect: true,
23
+ maxRetriesPerRequest: null,
24
+ });
25
+
26
+ client.on("connect", () => {
27
+ logger.info("[Redis] connected");
28
+ });
29
+
30
+ client.on("error", err => {
31
+ logger.error("[Redis] error:", err);
32
+ });
33
+ }
34
+
35
+ return client;
36
+ }
@@ -1,3 +1,69 @@
1
- export class RedisModule {
2
- //
3
- }
1
+ import { logger } from "@repo/logger";
2
+ import type { Redis } from "ioredis";
3
+
4
+ import { getRedis } from "./redis-client.js";
5
+
6
+ export const redis = {
7
+ async get<T>(key: string): Promise<T | null> {
8
+ const data = await getRedis().get(key);
9
+ if (!data) return null;
10
+ try {
11
+ return JSON.parse(data) as T;
12
+ } catch (error) {
13
+ logger.error(error);
14
+ return null;
15
+ }
16
+ },
17
+
18
+ async set(key: string, value: unknown, ttl?: number) {
19
+ const val = JSON.stringify(value);
20
+ if (ttl) {
21
+ return await getRedis().set(key, val, "EX", ttl);
22
+ }
23
+ return await getRedis().set(key, val);
24
+ },
25
+ };
26
+
27
+ interface RedisStoreOptions {
28
+ namespace?: string;
29
+ }
30
+
31
+ export class RedisStore<T> {
32
+ private client: Redis;
33
+ private namespace?: string;
34
+
35
+ constructor(options?: RedisStoreOptions) {
36
+ this.client = getRedis();
37
+ this.namespace = options?.namespace;
38
+ }
39
+
40
+ private formatKey(key: string): string {
41
+ return this.namespace ? `${this.namespace}:${key}` : key;
42
+ }
43
+
44
+ async get(key: string): Promise<T | null> {
45
+ const data = await this.client.get(this.formatKey(key));
46
+ if (!data) return null;
47
+ try {
48
+ return JSON.parse(data) as T;
49
+ } catch {
50
+ return data as T;
51
+ }
52
+ }
53
+
54
+ async set(key: string, value: T, ttlSeconds?: number): Promise<void> {
55
+ const stringValue = typeof value === "string" ? value : JSON.stringify(value);
56
+
57
+ const finalKey = this.formatKey(key);
58
+
59
+ if (ttlSeconds) {
60
+ await this.client.set(finalKey, stringValue, "EX", ttlSeconds);
61
+ } else {
62
+ await this.client.set(finalKey, stringValue);
63
+ }
64
+ }
65
+
66
+ async del(key: string): Promise<void> {
67
+ await this.client.del(this.formatKey(key));
68
+ }
69
+ }