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.
- package/dist/api/axios/axiosInstance.d.ts +1 -1
- package/dist/api/axios/axiosInstance.js +8 -8
- package/dist/api/index.d.ts +855 -855
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +12 -12
- package/dist/api/lib/serverActions.d.ts +239 -239
- package/dist/api/lib/serverActions.d.ts.map +1 -1
- package/dist/api/lib/serverActions.js +834 -834
- package/dist/api/root.d.ts +828 -828
- package/dist/api/root.js +30 -30
- package/dist/api/routers/accountSettings.d.ts +60 -60
- package/dist/api/routers/accountSettings.js +108 -108
- package/dist/api/routers/admins.d.ts +105 -105
- package/dist/api/routers/admins.js +219 -219
- package/dist/api/routers/auth.d.ts +47 -47
- package/dist/api/routers/auth.js +25 -25
- package/dist/api/routers/categorySection.d.ts +103 -103
- package/dist/api/routers/categorySection.js +38 -38
- package/dist/api/routers/cmsSettings.d.ts +48 -48
- package/dist/api/routers/cmsSettings.js +51 -51
- package/dist/api/routers/cpanel.d.ts +83 -83
- package/dist/api/routers/cpanel.js +216 -216
- package/dist/api/routers/files.d.ts +47 -47
- package/dist/api/routers/files.js +23 -23
- package/dist/api/routers/gallery.d.ts +35 -35
- package/dist/api/routers/gallery.js +62 -62
- package/dist/api/routers/googleAnalytics.d.ts +30 -30
- package/dist/api/routers/googleAnalytics.js +7 -7
- package/dist/api/routers/hasItemsSection.d.ts +139 -139
- package/dist/api/routers/hasItemsSection.js +34 -34
- package/dist/api/routers/navigation.d.ts +51 -51
- package/dist/api/routers/navigation.js +11 -11
- package/dist/api/routers/simpleSection.d.ts +57 -57
- package/dist/api/routers/simpleSection.js +12 -12
- package/dist/api/trpc.d.ts +106 -106
- package/dist/api/trpc.js +72 -72
- package/dist/auth/axios/axiosInstance.d.ts +1 -1
- package/dist/auth/axios/axiosInstance.js +8 -8
- package/dist/auth/csrf.d.ts +29 -29
- package/dist/auth/csrf.js +76 -76
- package/dist/auth/hooks/index.d.ts +3 -3
- package/dist/auth/hooks/index.d.ts.map +1 -1
- package/dist/auth/hooks/index.js +3 -3
- package/dist/auth/hooks/useAxiosPrivate.d.ts +4 -4
- package/dist/auth/hooks/useAxiosPrivate.js +74 -74
- package/dist/auth/hooks/useRefreshToken.d.ts +6 -6
- package/dist/auth/hooks/useRefreshToken.js +79 -79
- package/dist/auth/index.d.ts +22 -22
- package/dist/auth/index.js +44 -44
- package/dist/auth/jwt.d.ts +5 -5
- package/dist/auth/jwt.js +25 -25
- package/dist/auth/lib/actions.d.ts +32 -32
- package/dist/auth/lib/actions.d.ts.map +1 -1
- package/dist/auth/lib/actions.js +209 -209
- package/dist/auth/lib/client.d.ts +3 -3
- package/dist/auth/lib/client.js +46 -46
- package/dist/auth/lib/index.d.ts +2 -2
- package/dist/auth/lib/index.d.ts.map +1 -1
- package/dist/auth/lib/index.js +2 -2
- package/dist/auth/react.d.ts +105 -105
- package/dist/auth/react.d.ts.map +1 -1
- package/dist/auth/react.js +347 -347
- package/dist/auth/trpc.d.ts +5 -5
- package/dist/auth/trpc.d.ts.map +1 -1
- package/dist/auth/trpc.js +81 -81
- package/dist/core/config/config-loader.d.ts +91 -91
- package/dist/core/config/config-loader.js +230 -230
- package/dist/core/config/index.d.ts +2 -2
- package/dist/core/config/index.d.ts.map +1 -1
- package/dist/core/config/index.js +1 -1
- package/dist/core/config/loader.d.ts +1 -1
- package/dist/core/config/loader.js +42 -42
- package/dist/core/db/index.d.ts +1 -1
- package/dist/core/db/index.d.ts.map +1 -1
- package/dist/core/db/index.js +1 -1
- package/dist/core/db/table-checker/DbTable.d.ts +5 -5
- package/dist/core/db/table-checker/DbTable.js +5 -5
- package/dist/core/db/table-checker/MysqlTable.d.ts +33 -33
- package/dist/core/db/table-checker/MysqlTable.d.ts.map +1 -1
- package/dist/core/db/table-checker/MysqlTable.js +94 -94
- package/dist/core/db/table-checker/index.d.ts +1 -1
- package/dist/core/db/table-checker/index.d.ts.map +1 -1
- package/dist/core/db/table-checker/index.js +1 -1
- package/dist/core/factories/FieldFactory.d.ts +123 -123
- package/dist/core/factories/FieldFactory.d.ts.map +1 -1
- package/dist/core/factories/FieldFactory.js +411 -411
- package/dist/core/factories/SectionFactory.d.ts +109 -109
- package/dist/core/factories/SectionFactory.d.ts.map +1 -1
- package/dist/core/factories/SectionFactory.js +415 -415
- package/dist/core/factories/index.d.ts +2 -2
- package/dist/core/factories/index.d.ts.map +1 -1
- package/dist/core/factories/index.js +2 -2
- package/dist/core/fields/checkbox.d.ts +62 -62
- package/dist/core/fields/checkbox.d.ts.map +1 -1
- package/dist/core/fields/checkbox.js +62 -62
- package/dist/core/fields/color.d.ts +83 -83
- package/dist/core/fields/color.d.ts.map +1 -1
- package/dist/core/fields/color.js +91 -91
- package/dist/core/fields/date.d.ts +99 -99
- package/dist/core/fields/date.d.ts.map +1 -1
- package/dist/core/fields/date.js +108 -108
- package/dist/core/fields/document.d.ts +179 -179
- package/dist/core/fields/document.d.ts.map +1 -1
- package/dist/core/fields/document.js +277 -277
- package/dist/core/fields/field-group.d.ts +17 -17
- package/dist/core/fields/field-group.d.ts.map +1 -1
- package/dist/core/fields/field-group.js +6 -6
- package/dist/core/fields/field.d.ts +125 -125
- package/dist/core/fields/field.d.ts.map +1 -1
- package/dist/core/fields/field.js +148 -148
- package/dist/core/fields/fileField.d.ts +14 -14
- package/dist/core/fields/fileField.d.ts.map +1 -1
- package/dist/core/fields/fileField.js +5 -5
- package/dist/core/fields/index.d.ts +64 -64
- package/dist/core/fields/index.d.ts.map +1 -1
- package/dist/core/fields/index.js +18 -18
- package/dist/core/fields/map.d.ts +166 -166
- package/dist/core/fields/map.d.ts.map +1 -1
- package/dist/core/fields/map.js +152 -152
- package/dist/core/fields/number.d.ts +185 -185
- package/dist/core/fields/number.d.ts.map +1 -1
- package/dist/core/fields/number.js +241 -241
- package/dist/core/fields/password.d.ts +108 -108
- package/dist/core/fields/password.d.ts.map +1 -1
- package/dist/core/fields/password.js +133 -133
- package/dist/core/fields/photo.d.ts +288 -288
- package/dist/core/fields/photo.d.ts.map +1 -1
- package/dist/core/fields/photo.js +410 -410
- package/dist/core/fields/richText.d.ts +294 -294
- package/dist/core/fields/richText.d.ts.map +1 -1
- package/dist/core/fields/richText.js +338 -338
- package/dist/core/fields/select.d.ts +365 -365
- package/dist/core/fields/select.d.ts.map +1 -1
- package/dist/core/fields/select.js +499 -499
- package/dist/core/fields/selectMultiple.d.ts +235 -235
- package/dist/core/fields/selectMultiple.d.ts.map +1 -1
- package/dist/core/fields/selectMultiple.js +417 -417
- package/dist/core/fields/tags.d.ts +130 -130
- package/dist/core/fields/tags.d.ts.map +1 -1
- package/dist/core/fields/tags.js +105 -105
- package/dist/core/fields/text.d.ts +135 -135
- package/dist/core/fields/text.d.ts.map +1 -1
- package/dist/core/fields/text.js +157 -157
- package/dist/core/fields/textArea.d.ts +106 -106
- package/dist/core/fields/textArea.d.ts.map +1 -1
- package/dist/core/fields/textArea.js +126 -126
- package/dist/core/fields/video.d.ts +147 -147
- package/dist/core/fields/video.d.ts.map +1 -1
- package/dist/core/fields/video.js +248 -248
- package/dist/core/helpers/entity.d.ts +7 -7
- package/dist/core/helpers/entity.js +27 -27
- package/dist/core/helpers/index.d.ts +4 -4
- package/dist/core/helpers/index.d.ts.map +1 -1
- package/dist/core/helpers/index.js +3 -3
- package/dist/core/index.d.ts +7 -7
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +7 -7
- package/dist/core/sections/category.d.ts +282 -282
- package/dist/core/sections/category.d.ts.map +1 -1
- package/dist/core/sections/category.js +147 -147
- package/dist/core/sections/hasItems.d.ts +631 -631
- package/dist/core/sections/hasItems.d.ts.map +1 -1
- package/dist/core/sections/hasItems.js +144 -144
- package/dist/core/sections/index.d.ts +4 -4
- package/dist/core/sections/index.d.ts.map +1 -1
- package/dist/core/sections/index.js +4 -4
- package/dist/core/sections/section.d.ts +225 -225
- package/dist/core/sections/section.d.ts.map +1 -1
- package/dist/core/sections/section.js +341 -341
- package/dist/core/sections/simple.d.ts +98 -98
- package/dist/core/sections/simple.d.ts.map +1 -1
- package/dist/core/sections/simple.js +95 -95
- package/dist/core/security/dom.d.ts +10 -10
- package/dist/core/security/dom.js +92 -92
- package/dist/core/submit/ItemEditSubmit.d.ts +75 -75
- package/dist/core/submit/ItemEditSubmit.js +186 -186
- package/dist/core/submit/NewItemSubmit.d.ts +13 -13
- package/dist/core/submit/NewItemSubmit.js +93 -93
- package/dist/core/submit/SimpleSectionSubmit.d.ts +12 -12
- package/dist/core/submit/SimpleSectionSubmit.js +93 -93
- package/dist/core/submit/index.d.ts +4 -4
- package/dist/core/submit/index.js +4 -4
- package/dist/core/submit/submit.d.ts +115 -115
- package/dist/core/submit/submit.js +479 -479
- package/dist/core/types/index.d.ts +279 -279
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js +1 -1
- package/dist/db/client.d.ts +8 -8
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +19 -19
- package/dist/db/config.d.ts +5 -5
- package/dist/db/config.js +22 -22
- package/dist/db/drizzle.config.d.ts +5 -5
- package/dist/db/drizzle.config.js +18 -18
- package/dist/db/index.d.ts +2 -2
- package/dist/db/index.js +3 -3
- package/dist/db/schema.d.ts +638 -638
- package/dist/db/schema.js +73 -73
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -7
- package/dist/translations/index.d.ts +2 -2
- package/dist/translations/index.js +15 -15
- package/dist/utils/CpanelApi.d.ts +24 -24
- package/dist/utils/CpanelApi.js +64 -64
- package/dist/utils/constants.d.ts +13 -13
- package/dist/utils/constants.js +61 -61
- package/dist/utils/index.d.ts +4 -4
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -4
- package/dist/utils/utils.d.ts +59 -59
- package/dist/utils/utils.js +132 -132
- package/dist/validators/checkbox.d.ts +3 -3
- package/dist/validators/checkbox.d.ts.map +1 -1
- package/dist/validators/checkbox.js +12 -12
- package/dist/validators/color.d.ts +3 -3
- package/dist/validators/color.d.ts.map +1 -1
- package/dist/validators/color.js +7 -7
- package/dist/validators/date.d.ts +3 -3
- package/dist/validators/date.d.ts.map +1 -1
- package/dist/validators/date.js +5 -5
- package/dist/validators/document.d.ts +3 -3
- package/dist/validators/document.d.ts.map +1 -1
- package/dist/validators/document.js +57 -57
- package/dist/validators/index.d.ts +14 -14
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +14 -14
- package/dist/validators/map.d.ts +3 -3
- package/dist/validators/map.d.ts.map +1 -1
- package/dist/validators/map.js +5 -5
- package/dist/validators/number.d.ts +3 -3
- package/dist/validators/number.d.ts.map +1 -1
- package/dist/validators/number.js +20 -20
- package/dist/validators/password.d.ts +3 -3
- package/dist/validators/password.d.ts.map +1 -1
- package/dist/validators/password.js +11 -11
- package/dist/validators/photo.d.ts +3 -3
- package/dist/validators/photo.d.ts.map +1 -1
- package/dist/validators/photo.js +100 -100
- package/dist/validators/richText.d.ts +3 -3
- package/dist/validators/richText.d.ts.map +1 -1
- package/dist/validators/richText.js +8 -8
- package/dist/validators/select-multiple.d.ts +9 -9
- package/dist/validators/select-multiple.d.ts.map +1 -1
- package/dist/validators/select-multiple.js +20 -20
- package/dist/validators/select.d.ts +3 -3
- package/dist/validators/select.d.ts.map +1 -1
- package/dist/validators/select.js +5 -5
- package/dist/validators/text.d.ts +3 -3
- package/dist/validators/text.d.ts.map +1 -1
- package/dist/validators/text.js +7 -7
- package/dist/validators/textarea.d.ts +3 -3
- package/dist/validators/textarea.d.ts.map +1 -1
- package/dist/validators/textarea.js +7 -7
- package/dist/validators/video.d.ts +3 -3
- package/dist/validators/video.d.ts.map +1 -1
- package/dist/validators/video.js +57 -57
- package/package.json +2 -3
package/dist/auth/jwt.d.ts
CHANGED
|
@@ -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
|
|
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,
|
|
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"}
|
package/dist/auth/lib/actions.js
CHANGED
|
@@ -1,209 +1,209 @@
|
|
|
1
|
-
import { db } from
|
|
2
|
-
import { AccessTokensTable, AdminsTable } from
|
|
3
|
-
import { and, eq } from 'drizzle-orm';
|
|
4
|
-
import bcrypt from 'bcrypt';
|
|
5
|
-
import { decodeRefreshToken, encodeJWT, encodeRefreshToken } from
|
|
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
|
package/dist/auth/lib/client.js
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { getCsrfToken } from
|
|
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
|
+
}
|
package/dist/auth/lib/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { deleteSession, login, authRefresh } from
|
|
2
|
-
export { createCSRFToken, validateCSRFToken } from
|
|
1
|
+
export { deleteSession, login, authRefresh } from './actions.js';
|
|
2
|
+
export { createCSRFToken, validateCSRFToken } from '../csrf.js';
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|