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,6 +1,6 @@
1
- import type { AccessTokenPayload, RefreshTokenPayload } from 'jsonwebtoken';
2
- export declare const encodeJWT: (payload: AccessTokenPayload) => string;
3
- export declare const encodeRefreshToken: (payload: RefreshTokenPayload) => string;
4
- export declare const decodeJWT: (token: string) => AccessTokenPayload;
5
- export declare const decodeRefreshToken: (token: string) => RefreshTokenPayload;
1
+ import type { AccessTokenPayload, RefreshTokenPayload } from 'jsonwebtoken';
2
+ export declare const encodeJWT: (payload: AccessTokenPayload) => string;
3
+ export declare const encodeRefreshToken: (payload: RefreshTokenPayload) => string;
4
+ export declare const decodeJWT: (token: string) => AccessTokenPayload;
5
+ export declare const decodeRefreshToken: (token: string) => RefreshTokenPayload;
6
6
  //# sourceMappingURL=jwt.d.ts.map
package/dist/auth/jwt.js CHANGED
@@ -1,25 +1,25 @@
1
- import { randomUUID } from 'node:crypto';
2
- import jwt from 'jsonwebtoken';
3
- export const encodeJWT = (payload) => {
4
- return jwt.sign(payload, process.env.ACCESS_TOKEN_SECRET, {
5
- expiresIn: process.env.ACCESS_TOKEN_EXPIRATION,
6
- jwtid: randomUUID(),
7
- });
8
- };
9
- export const encodeRefreshToken = (payload) => {
10
- return jwt.sign(payload, process.env.REFRESH_TOKEN_SECRET, {
11
- expiresIn: process.env.REFRESH_TOKEN_EXPIRATION,
12
- jwtid: randomUUID(),
13
- });
14
- };
15
- export const decodeJWT = (token) => {
16
- return jwt.verify(token, process.env.ACCESS_TOKEN_SECRET || '');
17
- };
18
- export const decodeRefreshToken = (token) => {
19
- try {
20
- return jwt.verify(token, process.env.REFRESH_TOKEN_SECRET || '');
21
- }
22
- catch (err) {
23
- throw err;
24
- }
25
- };
1
+ import { randomUUID } from 'node:crypto';
2
+ import jwt from 'jsonwebtoken';
3
+ export const encodeJWT = (payload) => {
4
+ return jwt.sign(payload, process.env.ACCESS_TOKEN_SECRET, {
5
+ expiresIn: process.env.ACCESS_TOKEN_EXPIRATION,
6
+ jwtid: randomUUID(),
7
+ });
8
+ };
9
+ export const encodeRefreshToken = (payload) => {
10
+ return jwt.sign(payload, process.env.REFRESH_TOKEN_SECRET, {
11
+ expiresIn: process.env.REFRESH_TOKEN_EXPIRATION,
12
+ jwtid: randomUUID(),
13
+ });
14
+ };
15
+ export const decodeJWT = (token) => {
16
+ return jwt.verify(token, process.env.ACCESS_TOKEN_SECRET || '');
17
+ };
18
+ export const decodeRefreshToken = (token) => {
19
+ try {
20
+ return jwt.verify(token, process.env.REFRESH_TOKEN_SECRET || '');
21
+ }
22
+ catch (err) {
23
+ throw err;
24
+ }
25
+ };
@@ -1,33 +1,33 @@
1
- import type { Session } from "../index.js";
2
- export declare const authRefresh: (refreshToken?: {
3
- value: string;
4
- }) => Promise<{
5
- status: number;
6
- code: string;
7
- state: string;
8
- user?: undefined;
9
- } | {
10
- status: number;
11
- state: string;
12
- user: {
13
- id: string;
14
- username: string;
15
- lang: string | null;
16
- avatar: string | null;
17
- };
18
- code?: undefined;
19
- }>;
20
- export declare const login: ({ username, password }: {
21
- username: string;
22
- password: string;
23
- }) => Promise<{
24
- user: {
25
- id: string;
26
- username: string;
27
- lang: string | null;
28
- avatar: string | null;
29
- };
30
- accessToken: string;
31
- }>;
32
- export declare const deleteSession: (session?: Session | null) => Promise<boolean>;
1
+ import type { Session } from '../index.js';
2
+ export declare const authRefresh: (refreshToken?: {
3
+ value: string;
4
+ }) => Promise<{
5
+ status: number;
6
+ code: string;
7
+ state: string;
8
+ user?: undefined;
9
+ } | {
10
+ status: number;
11
+ state: string;
12
+ user: {
13
+ id: string;
14
+ username: string;
15
+ lang: string | null;
16
+ avatar: string | null;
17
+ };
18
+ code?: undefined;
19
+ }>;
20
+ export declare const login: ({ username, password }: {
21
+ username: string;
22
+ password: string;
23
+ }) => Promise<{
24
+ user: {
25
+ id: string;
26
+ username: string;
27
+ lang: string | null;
28
+ avatar: string | null;
29
+ };
30
+ accessToken: string;
31
+ }>;
32
+ export declare const deleteSession: (session?: Session | null) => Promise<boolean>;
33
33
  //# sourceMappingURL=actions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/auth/lib/actions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC,eAAO,MAAM,WAAW,GAAU,eAAe;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;EA4GjE,CAAA;AAED,eAAO,MAAM,KAAK,GAAU,wBAAwB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;;;;;;;;EA+FzF,CAAA;AAED,eAAO,MAAM,aAAa,GAAU,UAAU,OAAO,GAAG,IAAI,qBA0B3D,CAAA"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/auth/lib/actions.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAO,MAAM,WAAW,GAAU,eAAe;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;;;;EA4GjE,CAAA;AAED,eAAO,MAAM,KAAK,GAAU,wBAAwB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;;;;;;;;EA+FzF,CAAA;AAED,eAAO,MAAM,aAAa,GAAU,UAAU,OAAO,GAAG,IAAI,qBA0B3D,CAAA"}
@@ -1,209 +1,209 @@
1
- import { db } from "../../db/client.js";
2
- import { AccessTokensTable, AdminsTable } from "../../db/schema.js";
3
- import { and, eq } from 'drizzle-orm';
4
- import bcrypt from 'bcrypt';
5
- import { decodeRefreshToken, encodeJWT, encodeRefreshToken } from "../jwt.js";
6
- import { cookies } from 'next/headers';
7
- export const authRefresh = async (refreshToken) => {
8
- if (!refreshToken) {
9
- return {
10
- status: 401,
11
- code: 'no_refresh_token',
12
- state: 'logged_out',
13
- };
14
- }
15
- try {
16
- const decoded = decodeRefreshToken(refreshToken.value);
17
- const result = await db
18
- .select({
19
- adminId: AccessTokensTable.adminId,
20
- accessToken: AccessTokensTable.accessToken,
21
- refreshToken: AccessTokensTable.refreshToken,
22
- expiration: AccessTokensTable.expiration,
23
- username: AdminsTable.user,
24
- locale: AdminsTable.language,
25
- coverphoto: AdminsTable.coverphoto,
26
- })
27
- .from(AccessTokensTable)
28
- .innerJoin(AdminsTable, eq(AccessTokensTable.adminId, AdminsTable.id))
29
- .where(and(eq(AccessTokensTable.adminId, decoded.id), eq(AccessTokensTable.refreshToken, refreshToken.value)))
30
- .limit(1);
31
- const adminTokenResult = result[0];
32
- if (!adminTokenResult) {
33
- return {
34
- status: 401,
35
- code: 'invalid_refresh_token',
36
- state: 'logged_out',
37
- };
38
- }
39
- // Let's create a JWT access token and refresh token
40
- const accessToken = encodeJWT({
41
- id: decoded.id,
42
- iss: 'Lazemni CMS',
43
- aud: 'admin',
44
- sub: adminTokenResult.username,
45
- locale: adminTokenResult.locale || 'en',
46
- });
47
- const newRefreshToken = encodeRefreshToken({
48
- id: adminTokenResult.adminId,
49
- iss: 'Lazemni CMS',
50
- aud: 'admin',
51
- sub: adminTokenResult.username,
52
- });
53
- // Let's update the refresh token in the database
54
- await db
55
- .update(AccessTokensTable)
56
- .set({
57
- accessToken,
58
- refreshToken: newRefreshToken,
59
- expiration: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),
60
- })
61
- .where(and(eq(AccessTokensTable.adminId, adminTokenResult.adminId), eq(AccessTokensTable.refreshToken, refreshToken.value)));
62
- // Let's send the refresh token as a cookie
63
- const cookieStore = await cookies();
64
- cookieStore.set({
65
- name: 'refresh_token',
66
- value: newRefreshToken,
67
- httpOnly: true,
68
- path: '/api/auth/refresh',
69
- secure: true,
70
- sameSite: true,
71
- maxAge: 60 * 60 * 24 * 365,
72
- });
73
- cookieStore.set({
74
- name: 'access_token',
75
- value: accessToken,
76
- httpOnly: true,
77
- secure: true,
78
- sameSite: true,
79
- maxAge: 60 * 60 * 2, // 2 hours
80
- });
81
- return {
82
- status: 200,
83
- // accessToken: accessToken,
84
- state: 'logged_in',
85
- user: {
86
- id: adminTokenResult.adminId,
87
- username: adminTokenResult.username,
88
- lang: adminTokenResult.locale,
89
- avatar: adminTokenResult.coverphoto,
90
- },
91
- };
92
- }
93
- catch (err) {
94
- return {
95
- status: 401,
96
- code: 'invalid_refresh_token',
97
- state: 'logged_out',
98
- };
99
- }
100
- };
101
- export const login = async ({ username, password }) => {
102
- if (!username || !password) {
103
- throw new Error('Please provide username and password');
104
- }
105
- const result = await db
106
- .select({
107
- password: AdminsTable.pass,
108
- id: AdminsTable.id,
109
- username: AdminsTable.user,
110
- locale: AdminsTable.language,
111
- coverphoto: AdminsTable.coverphoto,
112
- })
113
- .from(AdminsTable)
114
- .where(eq(AdminsTable.user, username))
115
- .limit(1);
116
- const admin = result[0];
117
- if (!admin) {
118
- throw new Error('Invalid credentials');
119
- }
120
- // Verify password with bcrypt
121
- const valid = await bcrypt.compare(password, admin.password);
122
- if (!valid) {
123
- throw new Error('Invalid credentials');
124
- }
125
- // Let's create a JWT access token and refresh token
126
- const accessToken = encodeJWT({
127
- id: admin.id,
128
- iss: 'Lazemni CMS',
129
- aud: 'admin',
130
- sub: admin.username,
131
- locale: admin.locale || 'en',
132
- });
133
- const refreshToken = encodeRefreshToken({
134
- id: admin.id,
135
- iss: 'Lazemni CMS',
136
- aud: 'admin',
137
- sub: admin.username,
138
- });
139
- // Let's save the refresh token in the database
140
- await db
141
- .insert(AccessTokensTable)
142
- .values({
143
- accessToken,
144
- refreshToken,
145
- adminId: admin.id,
146
- expiration: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),
147
- })
148
- .onDuplicateKeyUpdate({
149
- set: {
150
- accessToken,
151
- refreshToken,
152
- expiration: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),
153
- },
154
- });
155
- const cookieStore = await cookies();
156
- // Let's send the refresh token as a cookie
157
- cookieStore.set({
158
- name: 'refresh_token',
159
- value: refreshToken,
160
- httpOnly: true,
161
- path: '/api/auth/refresh',
162
- secure: true,
163
- sameSite: true,
164
- maxAge: 60 * 60 * 24 * 365,
165
- });
166
- cookieStore.set({
167
- name: 'access_token',
168
- value: accessToken,
169
- httpOnly: true,
170
- secure: true,
171
- sameSite: true,
172
- maxAge: 60 * 60 * 2, // 2 hours
173
- });
174
- // Now, return the access token in body
175
- return {
176
- user: {
177
- id: admin.id,
178
- username: admin.username,
179
- lang: admin.locale,
180
- avatar: admin.coverphoto,
181
- },
182
- accessToken: accessToken,
183
- };
184
- };
185
- export const deleteSession = async (session) => {
186
- // Let's delete csrf, access and refresh token cookies
187
- const cookieStore = await cookies();
188
- cookieStore.set({
189
- name: 'csrf_token',
190
- value: '',
191
- maxAge: -1,
192
- });
193
- cookieStore.set({
194
- name: 'access_token',
195
- value: '',
196
- maxAge: -1,
197
- });
198
- cookieStore.set({
199
- name: 'refresh_token',
200
- value: '',
201
- path: '/api/auth/refresh',
202
- maxAge: -1,
203
- });
204
- if (session?.user.id) {
205
- // Let's delete the refresh token from the database
206
- await db.delete(AccessTokensTable).where(eq(AccessTokensTable.adminId, session.user.id));
207
- }
208
- return true;
209
- };
1
+ import { db } from '../../db/client.js';
2
+ import { AccessTokensTable, AdminsTable } from '../../db/schema.js';
3
+ import { and, eq } from 'drizzle-orm';
4
+ import bcrypt from 'bcrypt';
5
+ import { decodeRefreshToken, encodeJWT, encodeRefreshToken } from '../jwt';
6
+ import { cookies } from 'next/headers';
7
+ export const authRefresh = async (refreshToken) => {
8
+ if (!refreshToken) {
9
+ return {
10
+ status: 401,
11
+ code: 'no_refresh_token',
12
+ state: 'logged_out',
13
+ };
14
+ }
15
+ try {
16
+ const decoded = decodeRefreshToken(refreshToken.value);
17
+ const result = await db
18
+ .select({
19
+ adminId: AccessTokensTable.adminId,
20
+ accessToken: AccessTokensTable.accessToken,
21
+ refreshToken: AccessTokensTable.refreshToken,
22
+ expiration: AccessTokensTable.expiration,
23
+ username: AdminsTable.user,
24
+ locale: AdminsTable.language,
25
+ coverphoto: AdminsTable.coverphoto,
26
+ })
27
+ .from(AccessTokensTable)
28
+ .innerJoin(AdminsTable, eq(AccessTokensTable.adminId, AdminsTable.id))
29
+ .where(and(eq(AccessTokensTable.adminId, decoded.id), eq(AccessTokensTable.refreshToken, refreshToken.value)))
30
+ .limit(1);
31
+ const adminTokenResult = result[0];
32
+ if (!adminTokenResult) {
33
+ return {
34
+ status: 401,
35
+ code: 'invalid_refresh_token',
36
+ state: 'logged_out',
37
+ };
38
+ }
39
+ // Let's create a JWT access token and refresh token
40
+ const accessToken = encodeJWT({
41
+ id: decoded.id,
42
+ iss: 'Lazemni CMS',
43
+ aud: 'admin',
44
+ sub: adminTokenResult.username,
45
+ locale: adminTokenResult.locale || 'en',
46
+ });
47
+ const newRefreshToken = encodeRefreshToken({
48
+ id: adminTokenResult.adminId,
49
+ iss: 'Lazemni CMS',
50
+ aud: 'admin',
51
+ sub: adminTokenResult.username,
52
+ });
53
+ // Let's update the refresh token in the database
54
+ await db
55
+ .update(AccessTokensTable)
56
+ .set({
57
+ accessToken,
58
+ refreshToken: newRefreshToken,
59
+ expiration: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),
60
+ })
61
+ .where(and(eq(AccessTokensTable.adminId, adminTokenResult.adminId), eq(AccessTokensTable.refreshToken, refreshToken.value)));
62
+ // Let's send the refresh token as a cookie
63
+ const cookieStore = await cookies();
64
+ cookieStore.set({
65
+ name: 'refresh_token',
66
+ value: newRefreshToken,
67
+ httpOnly: true,
68
+ path: '/api/auth/refresh',
69
+ secure: true,
70
+ sameSite: true,
71
+ maxAge: 60 * 60 * 24 * 365,
72
+ });
73
+ cookieStore.set({
74
+ name: 'access_token',
75
+ value: accessToken,
76
+ httpOnly: true,
77
+ secure: true,
78
+ sameSite: true,
79
+ maxAge: 60 * 60 * 2, // 2 hours
80
+ });
81
+ return {
82
+ status: 200,
83
+ // accessToken: accessToken,
84
+ state: 'logged_in',
85
+ user: {
86
+ id: adminTokenResult.adminId,
87
+ username: adminTokenResult.username,
88
+ lang: adminTokenResult.locale,
89
+ avatar: adminTokenResult.coverphoto,
90
+ },
91
+ };
92
+ }
93
+ catch (err) {
94
+ return {
95
+ status: 401,
96
+ code: 'invalid_refresh_token',
97
+ state: 'logged_out',
98
+ };
99
+ }
100
+ };
101
+ export const login = async ({ username, password }) => {
102
+ if (!username || !password) {
103
+ throw new Error('Please provide username and password');
104
+ }
105
+ const result = await db
106
+ .select({
107
+ password: AdminsTable.pass,
108
+ id: AdminsTable.id,
109
+ username: AdminsTable.user,
110
+ locale: AdminsTable.language,
111
+ coverphoto: AdminsTable.coverphoto,
112
+ })
113
+ .from(AdminsTable)
114
+ .where(eq(AdminsTable.user, username))
115
+ .limit(1);
116
+ const admin = result[0];
117
+ if (!admin) {
118
+ throw new Error('Invalid credentials');
119
+ }
120
+ // Verify password with bcrypt
121
+ const valid = await bcrypt.compare(password, admin.password);
122
+ if (!valid) {
123
+ throw new Error('Invalid credentials');
124
+ }
125
+ // Let's create a JWT access token and refresh token
126
+ const accessToken = encodeJWT({
127
+ id: admin.id,
128
+ iss: 'Lazemni CMS',
129
+ aud: 'admin',
130
+ sub: admin.username,
131
+ locale: admin.locale || 'en',
132
+ });
133
+ const refreshToken = encodeRefreshToken({
134
+ id: admin.id,
135
+ iss: 'Lazemni CMS',
136
+ aud: 'admin',
137
+ sub: admin.username,
138
+ });
139
+ // Let's save the refresh token in the database
140
+ await db
141
+ .insert(AccessTokensTable)
142
+ .values({
143
+ accessToken,
144
+ refreshToken,
145
+ adminId: admin.id,
146
+ expiration: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),
147
+ })
148
+ .onDuplicateKeyUpdate({
149
+ set: {
150
+ accessToken,
151
+ refreshToken,
152
+ expiration: new Date(Date.now() + 1000 * 60 * 60 * 24 * 365),
153
+ },
154
+ });
155
+ const cookieStore = await cookies();
156
+ // Let's send the refresh token as a cookie
157
+ cookieStore.set({
158
+ name: 'refresh_token',
159
+ value: refreshToken,
160
+ httpOnly: true,
161
+ path: '/api/auth/refresh',
162
+ secure: true,
163
+ sameSite: true,
164
+ maxAge: 60 * 60 * 24 * 365,
165
+ });
166
+ cookieStore.set({
167
+ name: 'access_token',
168
+ value: accessToken,
169
+ httpOnly: true,
170
+ secure: true,
171
+ sameSite: true,
172
+ maxAge: 60 * 60 * 2, // 2 hours
173
+ });
174
+ // Now, return the access token in body
175
+ return {
176
+ user: {
177
+ id: admin.id,
178
+ username: admin.username,
179
+ lang: admin.locale,
180
+ avatar: admin.coverphoto,
181
+ },
182
+ accessToken: accessToken,
183
+ };
184
+ };
185
+ export const deleteSession = async (session) => {
186
+ // Let's delete csrf, access and refresh token cookies
187
+ const cookieStore = await cookies();
188
+ cookieStore.set({
189
+ name: 'csrf_token',
190
+ value: '',
191
+ maxAge: -1,
192
+ });
193
+ cookieStore.set({
194
+ name: 'access_token',
195
+ value: '',
196
+ maxAge: -1,
197
+ });
198
+ cookieStore.set({
199
+ name: 'refresh_token',
200
+ value: '',
201
+ path: '/api/auth/refresh',
202
+ maxAge: -1,
203
+ });
204
+ if (session?.user.id) {
205
+ // Let's delete the refresh token from the database
206
+ await db.delete(AccessTokensTable).where(eq(AccessTokensTable.adminId, session.user.id));
207
+ }
208
+ return true;
209
+ };
@@ -1,4 +1,4 @@
1
- export declare function fetchData<T = any>(path: string, req?: any): Promise<T | null>;
2
- export declare function now(): number;
3
- export declare function useOnline(): boolean;
1
+ export declare function fetchData<T = any>(path: string, req?: any): Promise<T | null>;
2
+ export declare function now(): number;
3
+ export declare function useOnline(): boolean;
4
4
  //# sourceMappingURL=client.d.ts.map
@@ -1,46 +1,46 @@
1
- 'use client';
2
- import React from 'react';
3
- import { getCsrfToken } from "../react.js";
4
- export async function fetchData(path, req = {}) {
5
- const url = `/api/auth/${path}`;
6
- try {
7
- const options = {
8
- headers: {
9
- // If there is a body, add the x-csrf-token header
10
- ...(req?.body ? { 'x-csrf-token': await getCsrfToken() } : {}),
11
- 'Content-Type': 'application/json',
12
- ...(req?.headers?.cookie ? { cookie: req.headers.cookie } : {}),
13
- },
14
- };
15
- if (req?.body) {
16
- options.body = JSON.stringify(req.body);
17
- options.method = 'POST';
18
- }
19
- const res = await fetch(url, options);
20
- const data = await res.json();
21
- if (!res.ok)
22
- throw data;
23
- return data;
24
- }
25
- catch (error) {
26
- console.error(error.message);
27
- return null;
28
- }
29
- }
30
- export function now() {
31
- return Math.floor(Date.now() / 1000);
32
- }
33
- export function useOnline() {
34
- const [isOnline, setIsOnline] = React.useState(typeof navigator !== 'undefined' ? navigator.onLine : false);
35
- const setOnline = () => setIsOnline(true);
36
- const setOffline = () => setIsOnline(false);
37
- React.useEffect(() => {
38
- window.addEventListener('online', setOnline);
39
- window.addEventListener('offline', setOffline);
40
- return () => {
41
- window.removeEventListener('online', setOnline);
42
- window.removeEventListener('offline', setOffline);
43
- };
44
- }, []);
45
- return isOnline;
46
- }
1
+ 'use client';
2
+ import React from 'react';
3
+ import { getCsrfToken } from '../react.jsx';
4
+ export async function fetchData(path, req = {}) {
5
+ const url = `/api/auth/${path}`;
6
+ try {
7
+ const options = {
8
+ headers: {
9
+ // If there is a body, add the x-csrf-token header
10
+ ...(req?.body ? { 'x-csrf-token': await getCsrfToken() } : {}),
11
+ 'Content-Type': 'application/json',
12
+ ...(req?.headers?.cookie ? { cookie: req.headers.cookie } : {}),
13
+ },
14
+ };
15
+ if (req?.body) {
16
+ options.body = JSON.stringify(req.body);
17
+ options.method = 'POST';
18
+ }
19
+ const res = await fetch(url, options);
20
+ const data = await res.json();
21
+ if (!res.ok)
22
+ throw data;
23
+ return data;
24
+ }
25
+ catch (error) {
26
+ console.error(error.message);
27
+ return null;
28
+ }
29
+ }
30
+ export function now() {
31
+ return Math.floor(Date.now() / 1000);
32
+ }
33
+ export function useOnline() {
34
+ const [isOnline, setIsOnline] = React.useState(typeof navigator !== 'undefined' ? navigator.onLine : false);
35
+ const setOnline = () => setIsOnline(true);
36
+ const setOffline = () => setIsOnline(false);
37
+ React.useEffect(() => {
38
+ window.addEventListener('online', setOnline);
39
+ window.addEventListener('offline', setOffline);
40
+ return () => {
41
+ window.removeEventListener('online', setOnline);
42
+ window.removeEventListener('offline', setOffline);
43
+ };
44
+ }, []);
45
+ return isOnline;
46
+ }
@@ -1,3 +1,3 @@
1
- export { deleteSession, login, authRefresh } from "./actions.js";
2
- export { createCSRFToken, validateCSRFToken } from "../csrf.js";
1
+ export { deleteSession, login, authRefresh } from './actions.js';
2
+ export { createCSRFToken, validateCSRFToken } from '../csrf.js';
3
3
  //# sourceMappingURL=index.d.ts.map