nextjs-cms 0.5.9 → 0.5.10

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 (258) hide show
  1. package/dist/api/axios/axiosInstance.d.ts +1 -1
  2. package/dist/api/axios/axiosInstance.js +8 -8
  3. package/dist/api/index.d.ts +855 -855
  4. package/dist/api/index.d.ts.map +1 -1
  5. package/dist/api/index.js +12 -12
  6. package/dist/api/lib/serverActions.d.ts +239 -239
  7. package/dist/api/lib/serverActions.d.ts.map +1 -1
  8. package/dist/api/lib/serverActions.js +834 -834
  9. package/dist/api/root.d.ts +828 -828
  10. package/dist/api/root.js +30 -30
  11. package/dist/api/routers/accountSettings.d.ts +60 -60
  12. package/dist/api/routers/accountSettings.js +108 -108
  13. package/dist/api/routers/admins.d.ts +105 -105
  14. package/dist/api/routers/admins.js +219 -219
  15. package/dist/api/routers/auth.d.ts +47 -47
  16. package/dist/api/routers/auth.js +25 -25
  17. package/dist/api/routers/categorySection.d.ts +103 -103
  18. package/dist/api/routers/categorySection.js +38 -38
  19. package/dist/api/routers/cmsSettings.d.ts +48 -48
  20. package/dist/api/routers/cmsSettings.js +51 -51
  21. package/dist/api/routers/cpanel.d.ts +83 -83
  22. package/dist/api/routers/cpanel.js +216 -216
  23. package/dist/api/routers/files.d.ts +47 -47
  24. package/dist/api/routers/files.js +23 -23
  25. package/dist/api/routers/gallery.d.ts +35 -35
  26. package/dist/api/routers/gallery.js +62 -62
  27. package/dist/api/routers/googleAnalytics.d.ts +30 -30
  28. package/dist/api/routers/googleAnalytics.js +7 -7
  29. package/dist/api/routers/hasItemsSection.d.ts +139 -139
  30. package/dist/api/routers/hasItemsSection.js +34 -34
  31. package/dist/api/routers/navigation.d.ts +51 -51
  32. package/dist/api/routers/navigation.js +11 -11
  33. package/dist/api/routers/simpleSection.d.ts +57 -57
  34. package/dist/api/routers/simpleSection.js +12 -12
  35. package/dist/api/trpc.d.ts +106 -106
  36. package/dist/api/trpc.js +72 -72
  37. package/dist/auth/axios/axiosInstance.d.ts +1 -1
  38. package/dist/auth/axios/axiosInstance.js +8 -8
  39. package/dist/auth/csrf.d.ts +29 -29
  40. package/dist/auth/csrf.js +76 -76
  41. package/dist/auth/hooks/index.d.ts +3 -3
  42. package/dist/auth/hooks/index.d.ts.map +1 -1
  43. package/dist/auth/hooks/index.js +3 -3
  44. package/dist/auth/hooks/useAxiosPrivate.d.ts +4 -4
  45. package/dist/auth/hooks/useAxiosPrivate.js +74 -74
  46. package/dist/auth/hooks/useRefreshToken.d.ts +6 -6
  47. package/dist/auth/hooks/useRefreshToken.js +79 -79
  48. package/dist/auth/index.d.ts +22 -22
  49. package/dist/auth/index.js +44 -44
  50. package/dist/auth/jwt.d.ts +5 -5
  51. package/dist/auth/jwt.js +25 -25
  52. package/dist/auth/lib/actions.d.ts +32 -32
  53. package/dist/auth/lib/actions.d.ts.map +1 -1
  54. package/dist/auth/lib/actions.js +209 -209
  55. package/dist/auth/lib/client.d.ts +3 -3
  56. package/dist/auth/lib/client.js +46 -46
  57. package/dist/auth/lib/index.d.ts +2 -2
  58. package/dist/auth/lib/index.d.ts.map +1 -1
  59. package/dist/auth/lib/index.js +2 -2
  60. package/dist/auth/react.d.ts +105 -105
  61. package/dist/auth/react.d.ts.map +1 -1
  62. package/dist/auth/react.js +347 -347
  63. package/dist/auth/trpc.d.ts +5 -5
  64. package/dist/auth/trpc.d.ts.map +1 -1
  65. package/dist/auth/trpc.js +81 -81
  66. package/dist/core/config/config-loader.d.ts +91 -91
  67. package/dist/core/config/config-loader.js +230 -230
  68. package/dist/core/config/index.d.ts +2 -2
  69. package/dist/core/config/index.d.ts.map +1 -1
  70. package/dist/core/config/index.js +1 -1
  71. package/dist/core/config/loader.d.ts +1 -1
  72. package/dist/core/config/loader.js +42 -42
  73. package/dist/core/db/index.d.ts +1 -1
  74. package/dist/core/db/index.d.ts.map +1 -1
  75. package/dist/core/db/index.js +1 -1
  76. package/dist/core/db/table-checker/DbTable.d.ts +5 -5
  77. package/dist/core/db/table-checker/DbTable.js +5 -5
  78. package/dist/core/db/table-checker/MysqlTable.d.ts +33 -33
  79. package/dist/core/db/table-checker/MysqlTable.d.ts.map +1 -1
  80. package/dist/core/db/table-checker/MysqlTable.js +94 -94
  81. package/dist/core/db/table-checker/index.d.ts +1 -1
  82. package/dist/core/db/table-checker/index.d.ts.map +1 -1
  83. package/dist/core/db/table-checker/index.js +1 -1
  84. package/dist/core/factories/FieldFactory.d.ts +123 -123
  85. package/dist/core/factories/FieldFactory.d.ts.map +1 -1
  86. package/dist/core/factories/FieldFactory.js +411 -411
  87. package/dist/core/factories/SectionFactory.d.ts +109 -109
  88. package/dist/core/factories/SectionFactory.d.ts.map +1 -1
  89. package/dist/core/factories/SectionFactory.js +415 -415
  90. package/dist/core/factories/index.d.ts +2 -2
  91. package/dist/core/factories/index.d.ts.map +1 -1
  92. package/dist/core/factories/index.js +2 -2
  93. package/dist/core/fields/checkbox.d.ts +62 -62
  94. package/dist/core/fields/checkbox.d.ts.map +1 -1
  95. package/dist/core/fields/checkbox.js +62 -62
  96. package/dist/core/fields/color.d.ts +83 -83
  97. package/dist/core/fields/color.d.ts.map +1 -1
  98. package/dist/core/fields/color.js +91 -91
  99. package/dist/core/fields/date.d.ts +99 -99
  100. package/dist/core/fields/date.d.ts.map +1 -1
  101. package/dist/core/fields/date.js +108 -108
  102. package/dist/core/fields/document.d.ts +179 -179
  103. package/dist/core/fields/document.d.ts.map +1 -1
  104. package/dist/core/fields/document.js +277 -277
  105. package/dist/core/fields/field-group.d.ts +17 -17
  106. package/dist/core/fields/field-group.d.ts.map +1 -1
  107. package/dist/core/fields/field-group.js +6 -6
  108. package/dist/core/fields/field.d.ts +125 -125
  109. package/dist/core/fields/field.d.ts.map +1 -1
  110. package/dist/core/fields/field.js +148 -148
  111. package/dist/core/fields/fileField.d.ts +14 -14
  112. package/dist/core/fields/fileField.d.ts.map +1 -1
  113. package/dist/core/fields/fileField.js +5 -5
  114. package/dist/core/fields/index.d.ts +64 -64
  115. package/dist/core/fields/index.d.ts.map +1 -1
  116. package/dist/core/fields/index.js +18 -18
  117. package/dist/core/fields/map.d.ts +166 -166
  118. package/dist/core/fields/map.d.ts.map +1 -1
  119. package/dist/core/fields/map.js +152 -152
  120. package/dist/core/fields/number.d.ts +185 -185
  121. package/dist/core/fields/number.d.ts.map +1 -1
  122. package/dist/core/fields/number.js +241 -241
  123. package/dist/core/fields/password.d.ts +108 -108
  124. package/dist/core/fields/password.d.ts.map +1 -1
  125. package/dist/core/fields/password.js +133 -133
  126. package/dist/core/fields/photo.d.ts +288 -288
  127. package/dist/core/fields/photo.d.ts.map +1 -1
  128. package/dist/core/fields/photo.js +410 -410
  129. package/dist/core/fields/richText.d.ts +294 -294
  130. package/dist/core/fields/richText.d.ts.map +1 -1
  131. package/dist/core/fields/richText.js +338 -338
  132. package/dist/core/fields/select.d.ts +365 -365
  133. package/dist/core/fields/select.d.ts.map +1 -1
  134. package/dist/core/fields/select.js +499 -499
  135. package/dist/core/fields/selectMultiple.d.ts +235 -235
  136. package/dist/core/fields/selectMultiple.d.ts.map +1 -1
  137. package/dist/core/fields/selectMultiple.js +417 -417
  138. package/dist/core/fields/tags.d.ts +130 -130
  139. package/dist/core/fields/tags.d.ts.map +1 -1
  140. package/dist/core/fields/tags.js +105 -105
  141. package/dist/core/fields/text.d.ts +135 -135
  142. package/dist/core/fields/text.d.ts.map +1 -1
  143. package/dist/core/fields/text.js +157 -157
  144. package/dist/core/fields/textArea.d.ts +106 -106
  145. package/dist/core/fields/textArea.d.ts.map +1 -1
  146. package/dist/core/fields/textArea.js +126 -126
  147. package/dist/core/fields/video.d.ts +147 -147
  148. package/dist/core/fields/video.d.ts.map +1 -1
  149. package/dist/core/fields/video.js +248 -248
  150. package/dist/core/helpers/entity.d.ts +7 -7
  151. package/dist/core/helpers/entity.js +27 -27
  152. package/dist/core/helpers/index.d.ts +4 -4
  153. package/dist/core/helpers/index.d.ts.map +1 -1
  154. package/dist/core/helpers/index.js +3 -3
  155. package/dist/core/index.d.ts +7 -7
  156. package/dist/core/index.d.ts.map +1 -1
  157. package/dist/core/index.js +7 -7
  158. package/dist/core/sections/category.d.ts +282 -282
  159. package/dist/core/sections/category.d.ts.map +1 -1
  160. package/dist/core/sections/category.js +147 -147
  161. package/dist/core/sections/hasItems.d.ts +631 -631
  162. package/dist/core/sections/hasItems.d.ts.map +1 -1
  163. package/dist/core/sections/hasItems.js +144 -144
  164. package/dist/core/sections/index.d.ts +4 -4
  165. package/dist/core/sections/index.d.ts.map +1 -1
  166. package/dist/core/sections/index.js +4 -4
  167. package/dist/core/sections/section.d.ts +225 -225
  168. package/dist/core/sections/section.d.ts.map +1 -1
  169. package/dist/core/sections/section.js +341 -341
  170. package/dist/core/sections/simple.d.ts +98 -98
  171. package/dist/core/sections/simple.d.ts.map +1 -1
  172. package/dist/core/sections/simple.js +95 -95
  173. package/dist/core/security/dom.d.ts +10 -10
  174. package/dist/core/security/dom.js +92 -92
  175. package/dist/core/submit/ItemEditSubmit.d.ts +75 -75
  176. package/dist/core/submit/ItemEditSubmit.js +186 -186
  177. package/dist/core/submit/NewItemSubmit.d.ts +13 -13
  178. package/dist/core/submit/NewItemSubmit.js +93 -93
  179. package/dist/core/submit/SimpleSectionSubmit.d.ts +12 -12
  180. package/dist/core/submit/SimpleSectionSubmit.js +93 -93
  181. package/dist/core/submit/index.d.ts +4 -4
  182. package/dist/core/submit/index.js +4 -4
  183. package/dist/core/submit/submit.d.ts +115 -115
  184. package/dist/core/submit/submit.js +479 -479
  185. package/dist/core/types/index.d.ts +279 -279
  186. package/dist/core/types/index.d.ts.map +1 -1
  187. package/dist/core/types/index.js +1 -1
  188. package/dist/db/client.d.ts +8 -8
  189. package/dist/db/client.d.ts.map +1 -1
  190. package/dist/db/client.js +19 -19
  191. package/dist/db/config.d.ts +5 -5
  192. package/dist/db/config.js +22 -22
  193. package/dist/db/drizzle.config.d.ts +5 -5
  194. package/dist/db/drizzle.config.js +18 -18
  195. package/dist/db/index.d.ts +2 -2
  196. package/dist/db/index.js +3 -3
  197. package/dist/db/schema.d.ts +638 -638
  198. package/dist/db/schema.js +73 -73
  199. package/dist/index.d.ts +7 -7
  200. package/dist/index.d.ts.map +1 -1
  201. package/dist/index.js +7 -7
  202. package/dist/translations/index.d.ts +2 -2
  203. package/dist/translations/index.js +15 -15
  204. package/dist/utils/CpanelApi.d.ts +24 -24
  205. package/dist/utils/CpanelApi.js +64 -64
  206. package/dist/utils/constants.d.ts +13 -13
  207. package/dist/utils/constants.js +61 -61
  208. package/dist/utils/index.d.ts +4 -4
  209. package/dist/utils/index.d.ts.map +1 -1
  210. package/dist/utils/index.js +4 -4
  211. package/dist/utils/utils.d.ts +59 -59
  212. package/dist/utils/utils.js +132 -132
  213. package/dist/validators/checkbox.d.ts +3 -3
  214. package/dist/validators/checkbox.d.ts.map +1 -1
  215. package/dist/validators/checkbox.js +12 -12
  216. package/dist/validators/color.d.ts +3 -3
  217. package/dist/validators/color.d.ts.map +1 -1
  218. package/dist/validators/color.js +7 -7
  219. package/dist/validators/date.d.ts +3 -3
  220. package/dist/validators/date.d.ts.map +1 -1
  221. package/dist/validators/date.js +5 -5
  222. package/dist/validators/document.d.ts +3 -3
  223. package/dist/validators/document.d.ts.map +1 -1
  224. package/dist/validators/document.js +57 -57
  225. package/dist/validators/index.d.ts +14 -14
  226. package/dist/validators/index.d.ts.map +1 -1
  227. package/dist/validators/index.js +14 -14
  228. package/dist/validators/map.d.ts +3 -3
  229. package/dist/validators/map.d.ts.map +1 -1
  230. package/dist/validators/map.js +5 -5
  231. package/dist/validators/number.d.ts +3 -3
  232. package/dist/validators/number.d.ts.map +1 -1
  233. package/dist/validators/number.js +20 -20
  234. package/dist/validators/password.d.ts +3 -3
  235. package/dist/validators/password.d.ts.map +1 -1
  236. package/dist/validators/password.js +11 -11
  237. package/dist/validators/photo.d.ts +3 -3
  238. package/dist/validators/photo.d.ts.map +1 -1
  239. package/dist/validators/photo.js +100 -100
  240. package/dist/validators/richText.d.ts +3 -3
  241. package/dist/validators/richText.d.ts.map +1 -1
  242. package/dist/validators/richText.js +8 -8
  243. package/dist/validators/select-multiple.d.ts +9 -9
  244. package/dist/validators/select-multiple.d.ts.map +1 -1
  245. package/dist/validators/select-multiple.js +20 -20
  246. package/dist/validators/select.d.ts +3 -3
  247. package/dist/validators/select.d.ts.map +1 -1
  248. package/dist/validators/select.js +5 -5
  249. package/dist/validators/text.d.ts +3 -3
  250. package/dist/validators/text.d.ts.map +1 -1
  251. package/dist/validators/text.js +7 -7
  252. package/dist/validators/textarea.d.ts +3 -3
  253. package/dist/validators/textarea.d.ts.map +1 -1
  254. package/dist/validators/textarea.js +7 -7
  255. package/dist/validators/video.d.ts +3 -3
  256. package/dist/validators/video.d.ts.map +1 -1
  257. package/dist/validators/video.js +57 -57
  258. package/package.json +2 -3
@@ -1,219 +1,219 @@
1
- import { router, privateProcedure } from "../trpc.js";
2
- import * as z from 'zod';
3
- import { getAdminsList, getAllPrivileges } from "../lib/serverActions.js";
4
- import { db } from "../../db/client.js";
5
- import { AdminPrivilegesTable, AdminsTable } from "../../db/schema.js";
6
- import { eq } from 'drizzle-orm';
7
- import { TRPCError } from '@trpc/server';
8
- import bcrypt from 'bcrypt';
9
- import { customAlphabet } from 'nanoid';
10
- import getString from "../../translations.js";
11
- import path from 'path';
12
- import fs from 'fs';
13
- import { getCMSConfig } from "../../core/config.js";
14
- export const adminsRouter = router({
15
- list: privateProcedure.query(async () => {
16
- const data = await Promise.all([getAdminsList(), getAllPrivileges()]);
17
- const adminList = data[0];
18
- const privileges = data[1];
19
- return {
20
- admins: adminList,
21
- privileges: privileges,
22
- };
23
- }),
24
- get: privateProcedure.input(z.string()).query(async (opts) => {
25
- const data = await Promise.all([
26
- db
27
- .select({
28
- id: AdminsTable.id,
29
- user: AdminsTable.user,
30
- })
31
- .from(AdminsTable)
32
- .where(eq(AdminsTable.id, opts.input)),
33
- db
34
- .select({
35
- sectionName: AdminPrivilegesTable.sectionName,
36
- operations: AdminPrivilegesTable.operations,
37
- publisher: AdminPrivilegesTable.publisher,
38
- })
39
- .from(AdminPrivilegesTable)
40
- .where(eq(AdminPrivilegesTable.adminId, opts.input)),
41
- getAllPrivileges(),
42
- ]);
43
- const adminRows = data[0];
44
- const adminRoles = data[1];
45
- const allRoles = data[2];
46
- const adminData = adminRows[0];
47
- if (!adminData) {
48
- throw new TRPCError({
49
- code: 'BAD_REQUEST',
50
- message: 'Admin not found',
51
- });
52
- }
53
- return {
54
- admin: adminData,
55
- adminRoles: adminRoles,
56
- allRoles: allRoles,
57
- };
58
- }),
59
- create: privateProcedure
60
- .input(z.object({
61
- username: z.string(),
62
- password: z.string(),
63
- privileges: z.array(z.object({
64
- sectionName: z.string(),
65
- publisher: z.boolean().nullable(),
66
- operations: z.string(),
67
- })),
68
- }))
69
- .mutation(async ({ ctx, input }) => {
70
- /**
71
- * First, let's check if the username already exists
72
- */
73
- const usernameExists = await db.select().from(AdminsTable).where(eq(AdminsTable.user, input.username));
74
- /**
75
- * If the username already exists, throw an error
76
- */
77
- if (usernameExists.length > 0) {
78
- throw new TRPCError({
79
- code: 'BAD_REQUEST',
80
- message: getString('adminAlreadyExists'),
81
- });
82
- }
83
- /**
84
- * Let's filter the privileges to remove the ones that has operations set to 'none'
85
- */
86
- const filteredPrivileges = input.privileges.filter((privilege) => privilege.operations !== 'none');
87
- /**
88
- * If the filtered privileges are empty, throw an error
89
- */
90
- if (filteredPrivileges.length === 0) {
91
- throw new TRPCError({
92
- code: 'BAD_REQUEST',
93
- message: getString('selectAtLeastOnePrivilege'),
94
- });
95
- }
96
- /**
97
- * Hash password with bcrypt
98
- */
99
- const hashedPassword = await bcrypt.hash(input.password, 10);
100
- const id = customAlphabet('1234567890', 25)();
101
- const adminCreation = await db.insert(AdminsTable).values({
102
- id: id,
103
- pass: hashedPassword,
104
- user: input.username,
105
- });
106
- /**
107
- * Now, let's prepare the rows to be inserted into the admin_privileges table
108
- */
109
- const rows = filteredPrivileges.map((privilege) => ({
110
- adminId: id,
111
- sectionName: privilege.sectionName,
112
- operations: privilege.operations,
113
- publisher: privilege.publisher,
114
- }));
115
- /**
116
- * Insert the privileges into the admin_privileges table
117
- */
118
- await db.insert(AdminPrivilegesTable).values(rows);
119
- return {
120
- status: 'success',
121
- };
122
- }),
123
- update: privateProcedure
124
- .input(z.object({
125
- id: z.string(),
126
- privileges: z.array(z.object({
127
- sectionName: z.string(),
128
- publisher: z.boolean().nullable(),
129
- operations: z.string(),
130
- })),
131
- }))
132
- .mutation(async ({ ctx, input }) => {
133
- /**
134
- * First, let's check if the admin exists
135
- */
136
- const usernameExists = await db.select().from(AdminsTable).where(eq(AdminsTable.id, input.id));
137
- /**
138
- * If the admin doens't exist, throw an error
139
- */
140
- if (usernameExists.length === 0) {
141
- throw new TRPCError({
142
- code: 'BAD_REQUEST',
143
- message: getString('adminDoesNotExist'),
144
- });
145
- }
146
- /**
147
- * Let's filter the privileges to remove the ones that has operations set to 'none'
148
- */
149
- const filteredPrivileges = input.privileges.filter((privilege) => privilege.operations !== 'none');
150
- /**
151
- * If the filtered privileges are empty, throw an error
152
- */
153
- if (filteredPrivileges.length === 0) {
154
- throw new TRPCError({
155
- code: 'BAD_REQUEST',
156
- message: getString('selectAtLeastOnePrivilege'),
157
- });
158
- }
159
- /**
160
- * Now, let's prepare the rows to be inserted into the admin_privileges table
161
- */
162
- const rows = filteredPrivileges.map((privilege) => ({
163
- adminId: input.id,
164
- sectionName: privilege.sectionName,
165
- operations: privilege.operations,
166
- publisher: privilege.publisher,
167
- }));
168
- /**
169
- * Delete and then insert the privileges into the admin_privileges table
170
- */
171
- await db.delete(AdminPrivilegesTable).where(eq(AdminPrivilegesTable.adminId, input.id));
172
- await db.insert(AdminPrivilegesTable).values(rows);
173
- return {
174
- status: 'success',
175
- };
176
- }),
177
- remove: privateProcedure
178
- .input(z.object({
179
- id: z.string(),
180
- }))
181
- .mutation(async ({ input }) => {
182
- const uploadsFolder = getCMSConfig().files.upload.uploadPath;
183
- /**
184
- * Check if the admin is not the master admin
185
- */
186
- if (input.id === '1') {
187
- throw new TRPCError({
188
- code: 'BAD_REQUEST',
189
- message: getString('masterAdminCannotBeDeleted'),
190
- });
191
- }
192
- /**
193
- * Check if the admin exists
194
- */
195
- const adminResult = await db.select().from(AdminsTable).where(eq(AdminsTable.id, input.id));
196
- const admin = adminResult[0];
197
- if (!admin) {
198
- throw new TRPCError({
199
- code: 'BAD_REQUEST',
200
- message: getString('adminNotFound'),
201
- });
202
- }
203
- /**
204
- * Delete the admin roles from the admin_privileges table
205
- */
206
- await db.delete(AdminPrivilegesTable).where(eq(AdminPrivilegesTable.adminId, input.id));
207
- /**
208
- * Delete the admin from the admins table
209
- */
210
- await db.delete(AdminsTable).where(eq(AdminsTable.id, input.id));
211
- /**
212
- * Remove the admin avatar as well
213
- */
214
- if (admin.coverphoto) {
215
- await fs.promises.unlink(path.join(uploadsFolder, '.thumbs', 'admins', admin.coverphoto));
216
- }
217
- return true;
218
- }),
219
- });
1
+ import { router, privateProcedure } from '../trpc.js';
2
+ import * as z from 'zod';
3
+ import { getAdminsList, getAllPrivileges } from '../lib/serverActions.js';
4
+ import { db } from '../../db/client.js';
5
+ import { AdminPrivilegesTable, AdminsTable } from '../../db/schema.js';
6
+ import { eq } from 'drizzle-orm';
7
+ import { TRPCError } from '@trpc/server';
8
+ import bcrypt from 'bcrypt';
9
+ import { customAlphabet } from 'nanoid';
10
+ import getString from '../../translations/index.js';
11
+ import path from 'path';
12
+ import fs from 'fs';
13
+ import { getCMSConfig } from '../../core/config/index.js';
14
+ export const adminsRouter = router({
15
+ list: privateProcedure.query(async () => {
16
+ const data = await Promise.all([getAdminsList(), getAllPrivileges()]);
17
+ const adminList = data[0];
18
+ const privileges = data[1];
19
+ return {
20
+ admins: adminList,
21
+ privileges: privileges,
22
+ };
23
+ }),
24
+ get: privateProcedure.input(z.string()).query(async (opts) => {
25
+ const data = await Promise.all([
26
+ db
27
+ .select({
28
+ id: AdminsTable.id,
29
+ user: AdminsTable.user,
30
+ })
31
+ .from(AdminsTable)
32
+ .where(eq(AdminsTable.id, opts.input)),
33
+ db
34
+ .select({
35
+ sectionName: AdminPrivilegesTable.sectionName,
36
+ operations: AdminPrivilegesTable.operations,
37
+ publisher: AdminPrivilegesTable.publisher,
38
+ })
39
+ .from(AdminPrivilegesTable)
40
+ .where(eq(AdminPrivilegesTable.adminId, opts.input)),
41
+ getAllPrivileges(),
42
+ ]);
43
+ const adminRows = data[0];
44
+ const adminRoles = data[1];
45
+ const allRoles = data[2];
46
+ const adminData = adminRows[0];
47
+ if (!adminData) {
48
+ throw new TRPCError({
49
+ code: 'BAD_REQUEST',
50
+ message: 'Admin not found',
51
+ });
52
+ }
53
+ return {
54
+ admin: adminData,
55
+ adminRoles: adminRoles,
56
+ allRoles: allRoles,
57
+ };
58
+ }),
59
+ create: privateProcedure
60
+ .input(z.object({
61
+ username: z.string(),
62
+ password: z.string(),
63
+ privileges: z.array(z.object({
64
+ sectionName: z.string(),
65
+ publisher: z.boolean().nullable(),
66
+ operations: z.string(),
67
+ })),
68
+ }))
69
+ .mutation(async ({ ctx, input }) => {
70
+ /**
71
+ * First, let's check if the username already exists
72
+ */
73
+ const usernameExists = await db.select().from(AdminsTable).where(eq(AdminsTable.user, input.username));
74
+ /**
75
+ * If the username already exists, throw an error
76
+ */
77
+ if (usernameExists.length > 0) {
78
+ throw new TRPCError({
79
+ code: 'BAD_REQUEST',
80
+ message: getString('adminAlreadyExists'),
81
+ });
82
+ }
83
+ /**
84
+ * Let's filter the privileges to remove the ones that has operations set to 'none'
85
+ */
86
+ const filteredPrivileges = input.privileges.filter((privilege) => privilege.operations !== 'none');
87
+ /**
88
+ * If the filtered privileges are empty, throw an error
89
+ */
90
+ if (filteredPrivileges.length === 0) {
91
+ throw new TRPCError({
92
+ code: 'BAD_REQUEST',
93
+ message: getString('selectAtLeastOnePrivilege'),
94
+ });
95
+ }
96
+ /**
97
+ * Hash password with bcrypt
98
+ */
99
+ const hashedPassword = await bcrypt.hash(input.password, 10);
100
+ const id = customAlphabet('1234567890', 25)();
101
+ const adminCreation = await db.insert(AdminsTable).values({
102
+ id: id,
103
+ pass: hashedPassword,
104
+ user: input.username,
105
+ });
106
+ /**
107
+ * Now, let's prepare the rows to be inserted into the admin_privileges table
108
+ */
109
+ const rows = filteredPrivileges.map((privilege) => ({
110
+ adminId: id,
111
+ sectionName: privilege.sectionName,
112
+ operations: privilege.operations,
113
+ publisher: privilege.publisher,
114
+ }));
115
+ /**
116
+ * Insert the privileges into the admin_privileges table
117
+ */
118
+ await db.insert(AdminPrivilegesTable).values(rows);
119
+ return {
120
+ status: 'success',
121
+ };
122
+ }),
123
+ update: privateProcedure
124
+ .input(z.object({
125
+ id: z.string(),
126
+ privileges: z.array(z.object({
127
+ sectionName: z.string(),
128
+ publisher: z.boolean().nullable(),
129
+ operations: z.string(),
130
+ })),
131
+ }))
132
+ .mutation(async ({ ctx, input }) => {
133
+ /**
134
+ * First, let's check if the admin exists
135
+ */
136
+ const usernameExists = await db.select().from(AdminsTable).where(eq(AdminsTable.id, input.id));
137
+ /**
138
+ * If the admin doens't exist, throw an error
139
+ */
140
+ if (usernameExists.length === 0) {
141
+ throw new TRPCError({
142
+ code: 'BAD_REQUEST',
143
+ message: getString('adminDoesNotExist'),
144
+ });
145
+ }
146
+ /**
147
+ * Let's filter the privileges to remove the ones that has operations set to 'none'
148
+ */
149
+ const filteredPrivileges = input.privileges.filter((privilege) => privilege.operations !== 'none');
150
+ /**
151
+ * If the filtered privileges are empty, throw an error
152
+ */
153
+ if (filteredPrivileges.length === 0) {
154
+ throw new TRPCError({
155
+ code: 'BAD_REQUEST',
156
+ message: getString('selectAtLeastOnePrivilege'),
157
+ });
158
+ }
159
+ /**
160
+ * Now, let's prepare the rows to be inserted into the admin_privileges table
161
+ */
162
+ const rows = filteredPrivileges.map((privilege) => ({
163
+ adminId: input.id,
164
+ sectionName: privilege.sectionName,
165
+ operations: privilege.operations,
166
+ publisher: privilege.publisher,
167
+ }));
168
+ /**
169
+ * Delete and then insert the privileges into the admin_privileges table
170
+ */
171
+ await db.delete(AdminPrivilegesTable).where(eq(AdminPrivilegesTable.adminId, input.id));
172
+ await db.insert(AdminPrivilegesTable).values(rows);
173
+ return {
174
+ status: 'success',
175
+ };
176
+ }),
177
+ remove: privateProcedure
178
+ .input(z.object({
179
+ id: z.string(),
180
+ }))
181
+ .mutation(async ({ input }) => {
182
+ const uploadsFolder = getCMSConfig().files.upload.uploadPath;
183
+ /**
184
+ * Check if the admin is not the master admin
185
+ */
186
+ if (input.id === '1') {
187
+ throw new TRPCError({
188
+ code: 'BAD_REQUEST',
189
+ message: getString('masterAdminCannotBeDeleted'),
190
+ });
191
+ }
192
+ /**
193
+ * Check if the admin exists
194
+ */
195
+ const adminResult = await db.select().from(AdminsTable).where(eq(AdminsTable.id, input.id));
196
+ const admin = adminResult[0];
197
+ if (!admin) {
198
+ throw new TRPCError({
199
+ code: 'BAD_REQUEST',
200
+ message: getString('adminNotFound'),
201
+ });
202
+ }
203
+ /**
204
+ * Delete the admin roles from the admin_privileges table
205
+ */
206
+ await db.delete(AdminPrivilegesTable).where(eq(AdminPrivilegesTable.adminId, input.id));
207
+ /**
208
+ * Delete the admin from the admins table
209
+ */
210
+ await db.delete(AdminsTable).where(eq(AdminsTable.id, input.id));
211
+ /**
212
+ * Remove the admin avatar as well
213
+ */
214
+ if (admin.coverphoto) {
215
+ await fs.promises.unlink(path.join(uploadsFolder, '.thumbs', 'admins', admin.coverphoto));
216
+ }
217
+ return true;
218
+ }),
219
+ });
@@ -1,48 +1,48 @@
1
- import * as z from 'zod';
2
- export declare const authRouter: import("@trpc/server").TRPCBuiltRouter<{
3
- ctx: {
4
- db: import("drizzle-orm/mysql2").MySql2Database<typeof import("../../db/schema.js")> & {
5
- $client: import("mysql2/promise").Pool;
6
- };
7
- session: import("../...js").Session | null;
8
- opts: {
9
- headers: Headers;
10
- };
11
- };
12
- meta: object;
13
- errorShape: {
14
- data: {
15
- zodError: z.core.$ZodFlattenedError<unknown, string> | null;
16
- code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
17
- httpStatus: number;
18
- path?: string;
19
- stack?: string;
20
- };
21
- message: string;
22
- code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
23
- };
24
- transformer: true;
25
- }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
26
- login: import("@trpc/server").TRPCMutationProcedure<{
27
- input: {
28
- username: string;
29
- password: string;
30
- };
31
- output: {
32
- user: {
33
- id: string;
34
- username: string;
35
- lang: string | null;
36
- avatar: string | null;
37
- };
38
- accessToken: string;
39
- };
40
- meta: object;
41
- }>;
42
- logout: import("@trpc/server").TRPCMutationProcedure<{
43
- input: void;
44
- output: boolean;
45
- meta: object;
46
- }>;
47
- }>>;
1
+ import * as z from 'zod';
2
+ export declare const authRouter: import("@trpc/server").TRPCBuiltRouter<{
3
+ ctx: {
4
+ db: import("drizzle-orm/mysql2").MySql2Database<typeof import("../../db/schema.js")> & {
5
+ $client: import("mysql2/promise").Pool;
6
+ };
7
+ session: import("../../index.js").Session | null;
8
+ opts: {
9
+ headers: Headers;
10
+ };
11
+ };
12
+ meta: object;
13
+ errorShape: {
14
+ data: {
15
+ zodError: z.core.$ZodFlattenedError<unknown, string> | null;
16
+ code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
17
+ httpStatus: number;
18
+ path?: string;
19
+ stack?: string;
20
+ };
21
+ message: string;
22
+ code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
23
+ };
24
+ transformer: true;
25
+ }, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
26
+ login: import("@trpc/server").TRPCMutationProcedure<{
27
+ input: {
28
+ username: string;
29
+ password: string;
30
+ };
31
+ output: {
32
+ user: {
33
+ id: string;
34
+ username: string;
35
+ lang: string | null;
36
+ avatar: string | null;
37
+ };
38
+ accessToken: string;
39
+ };
40
+ meta: object;
41
+ }>;
42
+ logout: import("@trpc/server").TRPCMutationProcedure<{
43
+ input: void;
44
+ output: boolean;
45
+ meta: object;
46
+ }>;
47
+ }>>;
48
48
  //# sourceMappingURL=auth.d.ts.map
@@ -1,25 +1,25 @@
1
- import { privateProcedure, publicProcedure, router } from "../trpc.js";
2
- import * as z from 'zod';
3
- import { TRPCError } from '@trpc/server';
4
- import { deleteSession, login } from "../../auth/lib.js";
5
- export const authRouter = router({
6
- login: publicProcedure
7
- .input(z.object({
8
- username: z.string(),
9
- password: z.string(),
10
- }))
11
- .mutation(async (opts) => {
12
- try {
13
- return await login(opts.input);
14
- }
15
- catch (error) {
16
- throw new TRPCError({
17
- code: 'BAD_REQUEST',
18
- message: error.message,
19
- });
20
- }
21
- }),
22
- logout: privateProcedure.mutation(async (opts) => {
23
- return await deleteSession(opts.ctx.session);
24
- }),
25
- });
1
+ import { privateProcedure, publicProcedure, router } from '../trpc.js';
2
+ import * as z from 'zod';
3
+ import { TRPCError } from '@trpc/server';
4
+ import { deleteSession, login } from '../../auth/lib/index.js';
5
+ export const authRouter = router({
6
+ login: publicProcedure
7
+ .input(z.object({
8
+ username: z.string(),
9
+ password: z.string(),
10
+ }))
11
+ .mutation(async (opts) => {
12
+ try {
13
+ return await login(opts.input);
14
+ }
15
+ catch (error) {
16
+ throw new TRPCError({
17
+ code: 'BAD_REQUEST',
18
+ message: error.message,
19
+ });
20
+ }
21
+ }),
22
+ logout: privateProcedure.mutation(async (opts) => {
23
+ return await deleteSession(opts.ctx.session);
24
+ }),
25
+ });