nextjs-cms 0.0.1 → 0.5.1
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/LICENSE +21 -0
- package/README.md +289 -0
- package/dist/api/axios/axiosInstance.d.ts +2 -0
- package/dist/api/axios/axiosInstance.d.ts.map +1 -0
- package/dist/api/axios/axiosInstance.js +8 -0
- package/dist/api/index.d.ts +856 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +12 -0
- package/dist/api/lib/serverActions.d.ts +240 -0
- package/dist/api/lib/serverActions.d.ts.map +1 -0
- package/dist/api/lib/serverActions.js +834 -0
- package/dist/api/root.d.ts +829 -0
- package/dist/api/root.d.ts.map +1 -0
- package/dist/api/root.js +30 -0
- package/dist/api/routers/accountSettings.d.ts +61 -0
- package/dist/api/routers/accountSettings.d.ts.map +1 -0
- package/dist/api/routers/accountSettings.js +108 -0
- package/dist/api/routers/admins.d.ts +106 -0
- package/dist/api/routers/admins.d.ts.map +1 -0
- package/dist/api/routers/admins.js +219 -0
- package/dist/api/routers/auth.d.ts +48 -0
- package/dist/api/routers/auth.d.ts.map +1 -0
- package/dist/api/routers/auth.js +25 -0
- package/dist/api/routers/categorySection.d.ts +104 -0
- package/dist/api/routers/categorySection.d.ts.map +1 -0
- package/dist/api/routers/categorySection.js +38 -0
- package/dist/api/routers/cmsSettings.d.ts +49 -0
- package/dist/api/routers/cmsSettings.d.ts.map +1 -0
- package/dist/api/routers/cmsSettings.js +51 -0
- package/dist/api/routers/cpanel.d.ts +84 -0
- package/dist/api/routers/cpanel.d.ts.map +1 -0
- package/dist/api/routers/cpanel.js +216 -0
- package/dist/api/routers/files.d.ts +48 -0
- package/dist/api/routers/files.d.ts.map +1 -0
- package/dist/api/routers/files.js +23 -0
- package/dist/api/routers/gallery.d.ts +36 -0
- package/dist/api/routers/gallery.d.ts.map +1 -0
- package/dist/api/routers/gallery.js +62 -0
- package/dist/api/routers/googleAnalytics.d.ts +31 -0
- package/dist/api/routers/googleAnalytics.d.ts.map +1 -0
- package/dist/api/routers/googleAnalytics.js +7 -0
- package/dist/api/routers/hasItemsSection.d.ts +140 -0
- package/dist/api/routers/hasItemsSection.d.ts.map +1 -0
- package/dist/api/routers/hasItemsSection.js +34 -0
- package/dist/api/routers/navigation.d.ts +52 -0
- package/dist/api/routers/navigation.d.ts.map +1 -0
- package/dist/api/routers/navigation.js +11 -0
- package/dist/api/routers/simpleSection.d.ts +58 -0
- package/dist/api/routers/simpleSection.d.ts.map +1 -0
- package/dist/api/routers/simpleSection.js +12 -0
- package/dist/api/trpc.d.ts +107 -0
- package/dist/api/trpc.d.ts.map +1 -0
- package/dist/api/trpc.js +72 -0
- package/dist/auth/axios/axiosInstance.d.ts +2 -0
- package/dist/auth/axios/axiosInstance.d.ts.map +1 -0
- package/dist/auth/axios/axiosInstance.js +8 -0
- package/dist/auth/csrf.d.ts +30 -0
- package/dist/auth/csrf.d.ts.map +1 -0
- package/dist/auth/csrf.js +76 -0
- package/dist/auth/hooks/index.d.ts +4 -0
- package/dist/auth/hooks/index.d.ts.map +1 -0
- package/dist/auth/hooks/index.js +3 -0
- package/dist/auth/hooks/useAxiosPrivate.d.ts +5 -0
- package/dist/auth/hooks/useAxiosPrivate.d.ts.map +1 -0
- package/dist/auth/hooks/useAxiosPrivate.js +74 -0
- package/dist/auth/hooks/useRefreshToken.d.ts +7 -0
- package/dist/auth/hooks/useRefreshToken.d.ts.map +1 -0
- package/dist/auth/hooks/useRefreshToken.js +79 -0
- package/dist/auth/index.d.ts +23 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +44 -0
- package/dist/auth/jwt.d.ts +6 -0
- package/dist/auth/jwt.d.ts.map +1 -0
- package/dist/auth/jwt.js +25 -0
- package/dist/auth/lib/actions.d.ts +33 -0
- package/dist/auth/lib/actions.d.ts.map +1 -0
- package/dist/auth/lib/actions.js +209 -0
- package/dist/auth/lib/client.d.ts +4 -0
- package/dist/auth/lib/client.d.ts.map +1 -0
- package/dist/auth/lib/client.js +46 -0
- package/dist/auth/lib/index.d.ts +3 -0
- package/dist/auth/lib/index.d.ts.map +1 -0
- package/dist/auth/lib/index.js +2 -0
- package/dist/auth/react.d.ts +106 -0
- package/dist/auth/react.d.ts.map +1 -0
- package/dist/auth/react.js +347 -0
- package/dist/auth/trpc.d.ts +6 -0
- package/dist/auth/trpc.d.ts.map +1 -0
- package/dist/auth/trpc.js +81 -0
- package/dist/core/config/config-loader.d.ts +92 -0
- package/dist/core/config/config-loader.d.ts.map +1 -0
- package/dist/core/config/config-loader.js +230 -0
- package/dist/core/config/index.d.ts +3 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/index.js +1 -0
- package/dist/core/config/loader.d.ts +2 -0
- package/dist/core/config/loader.d.ts.map +1 -0
- package/dist/core/config/loader.js +42 -0
- package/dist/core/db/index.d.ts +2 -0
- package/dist/core/db/index.d.ts.map +1 -0
- package/dist/core/db/index.js +1 -0
- package/dist/core/db/table-checker/DbTable.d.ts +6 -0
- package/dist/core/db/table-checker/DbTable.d.ts.map +1 -0
- package/dist/core/db/table-checker/DbTable.js +5 -0
- package/dist/core/db/table-checker/MysqlTable.d.ts +34 -0
- package/dist/core/db/table-checker/MysqlTable.d.ts.map +1 -0
- package/dist/core/db/table-checker/MysqlTable.js +102 -0
- package/dist/core/db/table-checker/index.d.ts +2 -0
- package/dist/core/db/table-checker/index.d.ts.map +1 -0
- package/dist/core/db/table-checker/index.js +1 -0
- package/dist/core/factories/FieldFactory.d.ts +124 -0
- package/dist/core/factories/FieldFactory.d.ts.map +1 -0
- package/dist/core/factories/FieldFactory.js +411 -0
- package/dist/core/factories/SectionFactory.d.ts +110 -0
- package/dist/core/factories/SectionFactory.d.ts.map +1 -0
- package/dist/core/factories/SectionFactory.js +415 -0
- package/dist/core/factories/index.d.ts +3 -0
- package/dist/core/factories/index.d.ts.map +1 -0
- package/dist/core/factories/index.js +2 -0
- package/dist/core/fields/checkbox.d.ts +63 -0
- package/dist/core/fields/checkbox.d.ts.map +1 -0
- package/dist/core/fields/checkbox.js +62 -0
- package/dist/core/fields/color.d.ts +84 -0
- package/dist/core/fields/color.d.ts.map +1 -0
- package/dist/core/fields/color.js +91 -0
- package/dist/core/fields/date.d.ts +100 -0
- package/dist/core/fields/date.d.ts.map +1 -0
- package/dist/core/fields/date.js +108 -0
- package/dist/core/fields/document.d.ts +180 -0
- package/dist/core/fields/document.d.ts.map +1 -0
- package/dist/core/fields/document.js +277 -0
- package/dist/core/fields/field-group.d.ts +18 -0
- package/dist/core/fields/field-group.d.ts.map +1 -0
- package/dist/core/fields/field-group.js +6 -0
- package/dist/core/fields/field.d.ts +126 -0
- package/dist/core/fields/field.d.ts.map +1 -0
- package/dist/core/fields/field.js +148 -0
- package/dist/core/fields/fileField.d.ts +15 -0
- package/dist/core/fields/fileField.d.ts.map +1 -0
- package/dist/core/fields/fileField.js +5 -0
- package/dist/core/fields/index.d.ts +65 -0
- package/dist/core/fields/index.d.ts.map +1 -0
- package/dist/core/fields/index.js +18 -0
- package/dist/core/fields/map.d.ts +167 -0
- package/dist/core/fields/map.d.ts.map +1 -0
- package/dist/core/fields/map.js +152 -0
- package/dist/core/fields/number.d.ts +186 -0
- package/dist/core/fields/number.d.ts.map +1 -0
- package/dist/core/fields/number.js +241 -0
- package/dist/core/fields/password.d.ts +109 -0
- package/dist/core/fields/password.d.ts.map +1 -0
- package/dist/core/fields/password.js +133 -0
- package/dist/core/fields/photo.d.ts +289 -0
- package/dist/core/fields/photo.d.ts.map +1 -0
- package/dist/core/fields/photo.js +410 -0
- package/dist/core/fields/richText.d.ts +295 -0
- package/dist/core/fields/richText.d.ts.map +1 -0
- package/dist/core/fields/richText.js +338 -0
- package/dist/core/fields/select.d.ts +366 -0
- package/dist/core/fields/select.d.ts.map +1 -0
- package/dist/core/fields/select.js +499 -0
- package/dist/core/fields/selectMultiple.d.ts +236 -0
- package/dist/core/fields/selectMultiple.d.ts.map +1 -0
- package/dist/core/fields/selectMultiple.js +417 -0
- package/dist/core/fields/tags.d.ts +131 -0
- package/dist/core/fields/tags.d.ts.map +1 -0
- package/dist/core/fields/tags.js +105 -0
- package/dist/core/fields/text.d.ts +136 -0
- package/dist/core/fields/text.d.ts.map +1 -0
- package/dist/core/fields/text.js +157 -0
- package/dist/core/fields/textArea.d.ts +107 -0
- package/dist/core/fields/textArea.d.ts.map +1 -0
- package/dist/core/fields/textArea.js +126 -0
- package/dist/core/fields/video.d.ts +148 -0
- package/dist/core/fields/video.d.ts.map +1 -0
- package/dist/core/fields/video.js +248 -0
- package/dist/core/helpers/entity.d.ts +8 -0
- package/dist/core/helpers/entity.d.ts.map +1 -0
- package/dist/core/helpers/entity.js +27 -0
- package/dist/core/helpers/index.d.ts +5 -0
- package/dist/core/helpers/index.d.ts.map +1 -0
- package/dist/core/helpers/index.js +3 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/sections/category.d.ts +283 -0
- package/dist/core/sections/category.d.ts.map +1 -0
- package/dist/core/sections/category.js +147 -0
- package/dist/core/sections/hasItems.d.ts +632 -0
- package/dist/core/sections/hasItems.d.ts.map +1 -0
- package/dist/core/sections/hasItems.js +144 -0
- package/dist/core/sections/index.d.ts +5 -0
- package/dist/core/sections/index.d.ts.map +1 -0
- package/dist/core/sections/index.js +4 -0
- package/dist/core/sections/section.d.ts +226 -0
- package/dist/core/sections/section.d.ts.map +1 -0
- package/dist/core/sections/section.js +341 -0
- package/dist/core/sections/simple.d.ts +99 -0
- package/dist/core/sections/simple.d.ts.map +1 -0
- package/dist/core/sections/simple.js +95 -0
- package/dist/core/security/dom.d.ts +11 -0
- package/dist/core/security/dom.d.ts.map +1 -0
- package/dist/core/security/dom.js +92 -0
- package/dist/core/submit/ItemEditSubmit.d.ts +76 -0
- package/dist/core/submit/ItemEditSubmit.d.ts.map +1 -0
- package/dist/core/submit/ItemEditSubmit.js +186 -0
- package/dist/core/submit/NewItemSubmit.d.ts +14 -0
- package/dist/core/submit/NewItemSubmit.d.ts.map +1 -0
- package/dist/core/submit/NewItemSubmit.js +93 -0
- package/dist/core/submit/SimpleSectionSubmit.d.ts +13 -0
- package/dist/core/submit/SimpleSectionSubmit.d.ts.map +1 -0
- package/dist/core/submit/SimpleSectionSubmit.js +93 -0
- package/dist/core/submit/index.d.ts +5 -0
- package/dist/core/submit/index.d.ts.map +1 -0
- package/dist/core/submit/index.js +4 -0
- package/dist/core/submit/submit.d.ts +116 -0
- package/dist/core/submit/submit.d.ts.map +1 -0
- package/dist/core/submit/submit.js +479 -0
- package/dist/core/types/index.d.ts +280 -0
- package/dist/core/types/index.d.ts.map +1 -0
- package/dist/core/types/index.js +1 -0
- package/dist/db/client.d.ts +9 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +19 -0
- package/dist/db/config.d.ts +6 -0
- package/dist/db/config.d.ts.map +1 -0
- package/dist/db/config.js +22 -0
- package/dist/db/drizzle.config.d.ts +6 -0
- package/dist/db/drizzle.config.d.ts.map +1 -0
- package/dist/db/drizzle.config.js +18 -0
- package/dist/db/index.d.ts +3 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +3 -0
- package/dist/db/schema.d.ts +639 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +73 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/translations/dictionaries/ar.json +279 -0
- package/dist/translations/dictionaries/en.json +279 -0
- package/dist/translations/index.d.ts +3 -0
- package/dist/translations/index.d.ts.map +1 -0
- package/dist/translations/index.js +15 -0
- package/dist/utils/CpanelApi.d.ts +25 -0
- package/dist/utils/CpanelApi.d.ts.map +1 -0
- package/dist/utils/CpanelApi.js +64 -0
- package/dist/utils/constants.d.ts +14 -0
- package/dist/utils/constants.d.ts.map +1 -0
- package/dist/utils/constants.js +61 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +4 -0
- package/dist/utils/utils.d.ts +60 -0
- package/dist/utils/utils.d.ts.map +1 -0
- package/dist/utils/utils.js +132 -0
- package/dist/validators/checkbox.d.ts +4 -0
- package/dist/validators/checkbox.d.ts.map +1 -0
- package/dist/validators/checkbox.js +12 -0
- package/dist/validators/color.d.ts +4 -0
- package/dist/validators/color.d.ts.map +1 -0
- package/dist/validators/color.js +7 -0
- package/dist/validators/date.d.ts +4 -0
- package/dist/validators/date.d.ts.map +1 -0
- package/dist/validators/date.js +5 -0
- package/dist/validators/document.d.ts +4 -0
- package/dist/validators/document.d.ts.map +1 -0
- package/dist/validators/document.js +57 -0
- package/dist/validators/index.d.ts +15 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +14 -0
- package/dist/validators/map.d.ts +4 -0
- package/dist/validators/map.d.ts.map +1 -0
- package/dist/validators/map.js +5 -0
- package/dist/validators/number.d.ts +4 -0
- package/dist/validators/number.d.ts.map +1 -0
- package/dist/validators/number.js +20 -0
- package/dist/validators/password.d.ts +4 -0
- package/dist/validators/password.d.ts.map +1 -0
- package/dist/validators/password.js +11 -0
- package/dist/validators/photo.d.ts +4 -0
- package/dist/validators/photo.d.ts.map +1 -0
- package/dist/validators/photo.js +100 -0
- package/dist/validators/richText.d.ts +4 -0
- package/dist/validators/richText.d.ts.map +1 -0
- package/dist/validators/richText.js +8 -0
- package/dist/validators/select-multiple.d.ts +10 -0
- package/dist/validators/select-multiple.d.ts.map +1 -0
- package/dist/validators/select-multiple.js +20 -0
- package/dist/validators/select.d.ts +4 -0
- package/dist/validators/select.d.ts.map +1 -0
- package/dist/validators/select.js +5 -0
- package/dist/validators/text.d.ts +4 -0
- package/dist/validators/text.d.ts.map +1 -0
- package/dist/validators/text.js +7 -0
- package/dist/validators/textarea.d.ts +4 -0
- package/dist/validators/textarea.d.ts.map +1 -0
- package/dist/validators/textarea.js +7 -0
- package/dist/validators/video.d.ts +4 -0
- package/dist/validators/video.d.ts.map +1 -0
- package/dist/validators/video.js +57 -0
- package/package.json +150 -6
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { privateProcedure, router } from '../trpc';
|
|
2
|
+
import * as z from 'zod';
|
|
3
|
+
import fs from 'fs';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { SectionFactory } from '../../core/factories';
|
|
6
|
+
import { TRPCError } from '@trpc/server';
|
|
7
|
+
import getString from '../../translations';
|
|
8
|
+
import { db } from '../../db/client';
|
|
9
|
+
import { sql } from 'drizzle-orm';
|
|
10
|
+
import { MysqlTableChecker } from '../../core/db';
|
|
11
|
+
import { getCMSConfig } from '../../core/config';
|
|
12
|
+
export const galleryRouter = router({
|
|
13
|
+
deletePhoto: privateProcedure
|
|
14
|
+
.input(z.object({
|
|
15
|
+
sectionName: z.string(),
|
|
16
|
+
photoName: z.string(),
|
|
17
|
+
referenceId: z.string(),
|
|
18
|
+
}))
|
|
19
|
+
.mutation(async ({ ctx, input }) => {
|
|
20
|
+
const uploadsFolder = getCMSConfig().files.upload.uploadPath;
|
|
21
|
+
/**
|
|
22
|
+
* Get the section information
|
|
23
|
+
*/
|
|
24
|
+
const sectionConfig = await SectionFactory.getSectionForAdmin({
|
|
25
|
+
name: input.sectionName,
|
|
26
|
+
admin: {
|
|
27
|
+
id: ctx.session.user.id,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
if (sectionConfig?.name !== input.sectionName) {
|
|
31
|
+
throw new TRPCError({
|
|
32
|
+
code: 'BAD_REQUEST',
|
|
33
|
+
message: getString('sectionNotFound'),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const section = sectionConfig?.build();
|
|
37
|
+
/**
|
|
38
|
+
* Delete the photo from the database
|
|
39
|
+
*/
|
|
40
|
+
if (section.gallery?.db.tableName) {
|
|
41
|
+
const columns = await MysqlTableChecker.getColumns(section.gallery.db.tableName);
|
|
42
|
+
if (columns.includes(section.gallery.db.photoNameField) &&
|
|
43
|
+
columns.includes(section.gallery.db.referenceIdentifierField)) {
|
|
44
|
+
await db.execute(sql `DELETE FROM ${sql.raw(section.gallery.db.tableName)} WHERE ${sql.raw(section.gallery.db.photoNameField)} = ${input.photoName} AND ${sql.raw(section.gallery.db.referenceIdentifierField)} = ${input.referenceId}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Delete the photo from disk
|
|
49
|
+
*/
|
|
50
|
+
try {
|
|
51
|
+
await fs.promises.unlink(path.join(uploadsFolder, '.photos', section.name, input.photoName));
|
|
52
|
+
/**
|
|
53
|
+
* TODO: Thumbs are not being deleted, it throws an error that they are being used by nodejs. Fix this
|
|
54
|
+
*/
|
|
55
|
+
await fs.promises.unlink(path.join(uploadsFolder, '.thumbs', section.name, input.photoName));
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.error(error);
|
|
59
|
+
}
|
|
60
|
+
return true;
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const googleAnalyticsRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
2
|
+
ctx: {
|
|
3
|
+
db: import("drizzle-orm/mysql2").MySql2Database<typeof import("../../db/schema")> & {
|
|
4
|
+
$client: import("mysql2/promise").Pool;
|
|
5
|
+
};
|
|
6
|
+
session: import("../..").Session | null;
|
|
7
|
+
opts: {
|
|
8
|
+
headers: Headers;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
meta: object;
|
|
12
|
+
errorShape: {
|
|
13
|
+
data: {
|
|
14
|
+
zodError: import("zod").ZodFlattenedError<unknown, string> | null;
|
|
15
|
+
code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
|
|
16
|
+
httpStatus: number;
|
|
17
|
+
path?: string;
|
|
18
|
+
stack?: string;
|
|
19
|
+
};
|
|
20
|
+
message: string;
|
|
21
|
+
code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
|
|
22
|
+
};
|
|
23
|
+
transformer: true;
|
|
24
|
+
}, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
|
|
25
|
+
test: import("@trpc/server").TRPCQueryProcedure<{
|
|
26
|
+
input: void;
|
|
27
|
+
output: boolean;
|
|
28
|
+
meta: object;
|
|
29
|
+
}>;
|
|
30
|
+
}>>;
|
|
31
|
+
//# sourceMappingURL=googleAnalytics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"googleAnalytics.d.ts","sourceRoot":"","sources":["../../../src/api/routers/googleAnalytics.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAIhC,CAAA"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
export declare const hasItemsSectionRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
3
|
+
ctx: {
|
|
4
|
+
db: import("drizzle-orm/mysql2").MySql2Database<typeof import("../../db/schema")> & {
|
|
5
|
+
$client: import("mysql2/promise").Pool;
|
|
6
|
+
};
|
|
7
|
+
session: import("../..").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
|
+
listItems: import("@trpc/server").TRPCQueryProcedure<{
|
|
27
|
+
input: {
|
|
28
|
+
sectionName: string;
|
|
29
|
+
page?: number | undefined;
|
|
30
|
+
q?: string | undefined;
|
|
31
|
+
};
|
|
32
|
+
output: {
|
|
33
|
+
error: {
|
|
34
|
+
message: string;
|
|
35
|
+
};
|
|
36
|
+
section?: undefined;
|
|
37
|
+
items?: undefined;
|
|
38
|
+
totalCount?: undefined;
|
|
39
|
+
} | {
|
|
40
|
+
section: {
|
|
41
|
+
hasSearch: boolean;
|
|
42
|
+
name: string;
|
|
43
|
+
title: string;
|
|
44
|
+
};
|
|
45
|
+
items: {
|
|
46
|
+
id: string | number;
|
|
47
|
+
headingTitle: string;
|
|
48
|
+
coverPhoto: string | null;
|
|
49
|
+
createdAt: string;
|
|
50
|
+
createdBy: string;
|
|
51
|
+
permission: number;
|
|
52
|
+
}[];
|
|
53
|
+
totalCount: any;
|
|
54
|
+
error?: undefined;
|
|
55
|
+
};
|
|
56
|
+
meta: object;
|
|
57
|
+
}>;
|
|
58
|
+
newItem: import("@trpc/server").TRPCQueryProcedure<{
|
|
59
|
+
input: {
|
|
60
|
+
sectionName: string;
|
|
61
|
+
};
|
|
62
|
+
output: {
|
|
63
|
+
error: {
|
|
64
|
+
message: any;
|
|
65
|
+
};
|
|
66
|
+
section?: undefined;
|
|
67
|
+
inputGroups?: undefined;
|
|
68
|
+
} | {
|
|
69
|
+
section: import("../..").HasItemsSection;
|
|
70
|
+
inputGroups: {
|
|
71
|
+
groupId: number;
|
|
72
|
+
groupTitle: string;
|
|
73
|
+
groupOrder: number;
|
|
74
|
+
inputs: {
|
|
75
|
+
type: import("../../core/types").FieldType;
|
|
76
|
+
name: string;
|
|
77
|
+
label: string;
|
|
78
|
+
required: boolean;
|
|
79
|
+
conditionalFields: import("../../core/types").ConditionalField[];
|
|
80
|
+
readonly: boolean;
|
|
81
|
+
defaultValue: any;
|
|
82
|
+
value: any;
|
|
83
|
+
}[];
|
|
84
|
+
}[] | undefined;
|
|
85
|
+
error?: undefined;
|
|
86
|
+
};
|
|
87
|
+
meta: object;
|
|
88
|
+
}>;
|
|
89
|
+
editItem: import("@trpc/server").TRPCQueryProcedure<{
|
|
90
|
+
input: {
|
|
91
|
+
sectionName: string;
|
|
92
|
+
sectionItemId: string | number;
|
|
93
|
+
};
|
|
94
|
+
output: {
|
|
95
|
+
error: {
|
|
96
|
+
message: string;
|
|
97
|
+
};
|
|
98
|
+
section?: undefined;
|
|
99
|
+
inputGroups?: undefined;
|
|
100
|
+
gallery?: undefined;
|
|
101
|
+
} | {
|
|
102
|
+
section: import("../..").HasItemsSection;
|
|
103
|
+
inputGroups: {
|
|
104
|
+
groupId: number;
|
|
105
|
+
groupTitle: string;
|
|
106
|
+
groupOrder: number;
|
|
107
|
+
inputs: {
|
|
108
|
+
type: import("../../core/types").FieldType;
|
|
109
|
+
name: string;
|
|
110
|
+
label: string;
|
|
111
|
+
required: boolean;
|
|
112
|
+
conditionalFields: import("../../core/types").ConditionalField[];
|
|
113
|
+
readonly: boolean;
|
|
114
|
+
defaultValue: any;
|
|
115
|
+
value: any;
|
|
116
|
+
}[];
|
|
117
|
+
}[] | undefined;
|
|
118
|
+
gallery: {
|
|
119
|
+
referenceId: string;
|
|
120
|
+
photo: string;
|
|
121
|
+
meta: any;
|
|
122
|
+
}[];
|
|
123
|
+
error?: undefined;
|
|
124
|
+
};
|
|
125
|
+
meta: object;
|
|
126
|
+
}>;
|
|
127
|
+
deleteItem: import("@trpc/server").TRPCMutationProcedure<{
|
|
128
|
+
input: {
|
|
129
|
+
sectionName: string;
|
|
130
|
+
sectionItemId: string | number;
|
|
131
|
+
};
|
|
132
|
+
output: true | {
|
|
133
|
+
error: {
|
|
134
|
+
message: string;
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
meta: object;
|
|
138
|
+
}>;
|
|
139
|
+
}>>;
|
|
140
|
+
//# sourceMappingURL=hasItemsSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hasItemsSection.d.ts","sourceRoot":"","sources":["../../../src/api/routers/hasItemsSection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAGxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqChC,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { privateProcedure, router } from '../trpc';
|
|
2
|
+
import * as z from 'zod';
|
|
3
|
+
import { createEditPage, createNewPage, deleteSectionItem, getBrowsePage } from '../lib/serverActions';
|
|
4
|
+
export const hasItemsSectionRouter = router({
|
|
5
|
+
listItems: privateProcedure
|
|
6
|
+
.input(z.object({
|
|
7
|
+
sectionName: z.string(),
|
|
8
|
+
page: z.number().optional(),
|
|
9
|
+
q: z.string().optional(),
|
|
10
|
+
}))
|
|
11
|
+
.query(async ({ ctx, input }) => {
|
|
12
|
+
return await getBrowsePage(ctx.session, input.sectionName, input.page, input.q);
|
|
13
|
+
}),
|
|
14
|
+
newItem: privateProcedure
|
|
15
|
+
.input(z.object({
|
|
16
|
+
sectionName: z.string(),
|
|
17
|
+
}))
|
|
18
|
+
.query(async ({ ctx, input }) => {
|
|
19
|
+
return await createNewPage(ctx.session, input.sectionName);
|
|
20
|
+
}),
|
|
21
|
+
editItem: privateProcedure
|
|
22
|
+
.input(z.object({
|
|
23
|
+
sectionName: z.string(),
|
|
24
|
+
sectionItemId: z.number().or(z.string()),
|
|
25
|
+
}))
|
|
26
|
+
.query(async ({ ctx, input }) => {
|
|
27
|
+
return await createEditPage(ctx.session, input.sectionName, input.sectionItemId);
|
|
28
|
+
}),
|
|
29
|
+
deleteItem: privateProcedure
|
|
30
|
+
.input(z.object({ sectionName: z.string(), sectionItemId: z.number().or(z.string()) }))
|
|
31
|
+
.mutation(async ({ ctx, input }) => {
|
|
32
|
+
return await deleteSectionItem(ctx.session, input.sectionName, input.sectionItemId);
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export declare const navRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
2
|
+
ctx: {
|
|
3
|
+
db: import("drizzle-orm/mysql2").MySql2Database<typeof import("../../db/schema")> & {
|
|
4
|
+
$client: import("mysql2/promise").Pool;
|
|
5
|
+
};
|
|
6
|
+
session: import("../..").Session | null;
|
|
7
|
+
opts: {
|
|
8
|
+
headers: Headers;
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
meta: object;
|
|
12
|
+
errorShape: {
|
|
13
|
+
data: {
|
|
14
|
+
zodError: import("zod").ZodFlattenedError<unknown, string> | null;
|
|
15
|
+
code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
|
|
16
|
+
httpStatus: number;
|
|
17
|
+
path?: string;
|
|
18
|
+
stack?: string;
|
|
19
|
+
};
|
|
20
|
+
message: string;
|
|
21
|
+
code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
|
|
22
|
+
};
|
|
23
|
+
transformer: true;
|
|
24
|
+
}, import("@trpc/server").TRPCDecorateCreateRouterOptions<{
|
|
25
|
+
getSidebar: import("@trpc/server").TRPCQueryProcedure<{
|
|
26
|
+
input: void;
|
|
27
|
+
output: {
|
|
28
|
+
fixed_sections: {
|
|
29
|
+
title: string;
|
|
30
|
+
path: string;
|
|
31
|
+
icon: string;
|
|
32
|
+
}[];
|
|
33
|
+
cat_sections: {
|
|
34
|
+
title: string;
|
|
35
|
+
path: string;
|
|
36
|
+
icon: string | undefined;
|
|
37
|
+
}[];
|
|
38
|
+
has_items_sections: {
|
|
39
|
+
title: string;
|
|
40
|
+
path: string;
|
|
41
|
+
icon: string | undefined;
|
|
42
|
+
}[];
|
|
43
|
+
simple_sections: {
|
|
44
|
+
title: string;
|
|
45
|
+
path: string;
|
|
46
|
+
icon: string | undefined;
|
|
47
|
+
}[];
|
|
48
|
+
};
|
|
49
|
+
meta: object;
|
|
50
|
+
}>;
|
|
51
|
+
}>>;
|
|
52
|
+
//# sourceMappingURL=navigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../../src/api/routers/navigation.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAQpB,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { privateProcedure, router } from '../trpc';
|
|
2
|
+
import { getSidebar } from '../lib/serverActions';
|
|
3
|
+
export const navRouter = router({
|
|
4
|
+
getSidebar: privateProcedure.query(async ({ ctx }) => {
|
|
5
|
+
/**
|
|
6
|
+
* TODO: This function is always returning the same fixed sections for all admins.
|
|
7
|
+
* We need to include the fixed sections in the privileges logic.
|
|
8
|
+
*/
|
|
9
|
+
return await getSidebar(ctx.session);
|
|
10
|
+
}),
|
|
11
|
+
});
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import * as z from 'zod';
|
|
2
|
+
export declare const simpleSectionRouter: import("@trpc/server").TRPCBuiltRouter<{
|
|
3
|
+
ctx: {
|
|
4
|
+
db: import("drizzle-orm/mysql2").MySql2Database<typeof import("../../db/schema")> & {
|
|
5
|
+
$client: import("mysql2/promise").Pool;
|
|
6
|
+
};
|
|
7
|
+
session: import("../..").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
|
+
create: import("@trpc/server").TRPCQueryProcedure<{
|
|
27
|
+
input: {
|
|
28
|
+
sectionName: string;
|
|
29
|
+
};
|
|
30
|
+
output: {
|
|
31
|
+
error: {
|
|
32
|
+
message: string;
|
|
33
|
+
};
|
|
34
|
+
section?: undefined;
|
|
35
|
+
inputGroups?: undefined;
|
|
36
|
+
} | {
|
|
37
|
+
section: import("../..").SimpleSection;
|
|
38
|
+
inputGroups: {
|
|
39
|
+
groupId: number;
|
|
40
|
+
groupTitle: string;
|
|
41
|
+
groupOrder: number;
|
|
42
|
+
inputs: {
|
|
43
|
+
type: import("../../core/types").FieldType;
|
|
44
|
+
name: string;
|
|
45
|
+
label: string;
|
|
46
|
+
required: boolean;
|
|
47
|
+
conditionalFields: import("../../core/types").ConditionalField[];
|
|
48
|
+
readonly: boolean;
|
|
49
|
+
defaultValue: any;
|
|
50
|
+
value: any;
|
|
51
|
+
}[];
|
|
52
|
+
}[] | undefined;
|
|
53
|
+
error?: undefined;
|
|
54
|
+
};
|
|
55
|
+
meta: object;
|
|
56
|
+
}>;
|
|
57
|
+
}>>;
|
|
58
|
+
//# sourceMappingURL=simpleSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simpleSection.d.ts","sourceRoot":"","sources":["../../../src/api/routers/simpleSection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAGxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAU9B,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { privateProcedure, router } from '../trpc';
|
|
2
|
+
import * as z from 'zod';
|
|
3
|
+
import { createSimpleSectionPage } from '../lib/serverActions';
|
|
4
|
+
export const simpleSectionRouter = router({
|
|
5
|
+
create: privateProcedure
|
|
6
|
+
.input(z.object({
|
|
7
|
+
sectionName: z.string(),
|
|
8
|
+
}))
|
|
9
|
+
.query(async ({ ctx, input }) => {
|
|
10
|
+
return await createSimpleSectionPage(ctx.session, input.sectionName);
|
|
11
|
+
}),
|
|
12
|
+
});
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import superjson from 'superjson';
|
|
2
|
+
import type { NextRequest } from 'next/server';
|
|
3
|
+
/**
|
|
4
|
+
* Creates context for an incoming request
|
|
5
|
+
* @link https://trpc.io/docs/v11/context
|
|
6
|
+
*/
|
|
7
|
+
export declare const createTRPCContext: (opts: {
|
|
8
|
+
req: NextRequest;
|
|
9
|
+
}) => Promise<{
|
|
10
|
+
db: import("drizzle-orm/mysql2").MySql2Database<typeof import("../db/schema")> & {
|
|
11
|
+
$client: import("mysql2/promise").Pool;
|
|
12
|
+
};
|
|
13
|
+
session: import("..").Session | null;
|
|
14
|
+
opts: {
|
|
15
|
+
headers: Headers;
|
|
16
|
+
};
|
|
17
|
+
}>;
|
|
18
|
+
export declare const transformer: {
|
|
19
|
+
input: typeof superjson;
|
|
20
|
+
output: typeof superjson;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Create a server-side caller
|
|
24
|
+
* @see https://trpc.io/docs/server/server-side-calls
|
|
25
|
+
*/
|
|
26
|
+
export declare const createCallerFactory: import("@trpc/server").TRPCRouterCallerFactory<{
|
|
27
|
+
ctx: {
|
|
28
|
+
db: import("drizzle-orm/mysql2").MySql2Database<typeof import("../db/schema")> & {
|
|
29
|
+
$client: import("mysql2/promise").Pool;
|
|
30
|
+
};
|
|
31
|
+
session: import("..").Session | null;
|
|
32
|
+
opts: {
|
|
33
|
+
headers: Headers;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
meta: object;
|
|
37
|
+
errorShape: {
|
|
38
|
+
data: {
|
|
39
|
+
zodError: import("zod").ZodFlattenedError<unknown, string> | null;
|
|
40
|
+
code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
|
|
41
|
+
httpStatus: number;
|
|
42
|
+
path?: string;
|
|
43
|
+
stack?: string;
|
|
44
|
+
};
|
|
45
|
+
message: string;
|
|
46
|
+
code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
|
|
47
|
+
};
|
|
48
|
+
transformer: true;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* This is how you create new routers and sub-routers in your tRPC API
|
|
52
|
+
* @see https://trpc.io/docs/router
|
|
53
|
+
*/
|
|
54
|
+
export declare const router: import("@trpc/server").TRPCRouterBuilder<{
|
|
55
|
+
ctx: {
|
|
56
|
+
db: import("drizzle-orm/mysql2").MySql2Database<typeof import("../db/schema")> & {
|
|
57
|
+
$client: import("mysql2/promise").Pool;
|
|
58
|
+
};
|
|
59
|
+
session: import("..").Session | null;
|
|
60
|
+
opts: {
|
|
61
|
+
headers: Headers;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
meta: object;
|
|
65
|
+
errorShape: {
|
|
66
|
+
data: {
|
|
67
|
+
zodError: import("zod").ZodFlattenedError<unknown, string> | null;
|
|
68
|
+
code: import("@trpc/server").TRPC_ERROR_CODE_KEY;
|
|
69
|
+
httpStatus: number;
|
|
70
|
+
path?: string;
|
|
71
|
+
stack?: string;
|
|
72
|
+
};
|
|
73
|
+
message: string;
|
|
74
|
+
code: import("@trpc/server").TRPC_ERROR_CODE_NUMBER;
|
|
75
|
+
};
|
|
76
|
+
transformer: true;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* Public procedure that doesn't require authentication
|
|
80
|
+
*/
|
|
81
|
+
export declare const publicProcedure: import("@trpc/server").TRPCProcedureBuilder<{
|
|
82
|
+
db: import("drizzle-orm/mysql2").MySql2Database<typeof import("../db/schema")> & {
|
|
83
|
+
$client: import("mysql2/promise").Pool;
|
|
84
|
+
};
|
|
85
|
+
session: import("..").Session | null;
|
|
86
|
+
opts: {
|
|
87
|
+
headers: Headers;
|
|
88
|
+
};
|
|
89
|
+
}, object, object, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, false>;
|
|
90
|
+
/**
|
|
91
|
+
* Private procedure that uses the `isAuthedMiddleware` middleware to require authentication
|
|
92
|
+
* @see https://trpc.io/docs/procedures
|
|
93
|
+
*/
|
|
94
|
+
export declare const privateProcedure: import("@trpc/server").TRPCProcedureBuilder<{
|
|
95
|
+
db: import("drizzle-orm/mysql2").MySql2Database<typeof import("../db/schema")> & {
|
|
96
|
+
$client: import("mysql2/promise").Pool;
|
|
97
|
+
};
|
|
98
|
+
session: import("..").Session | null;
|
|
99
|
+
opts: {
|
|
100
|
+
headers: Headers;
|
|
101
|
+
};
|
|
102
|
+
}, object, {
|
|
103
|
+
session: {
|
|
104
|
+
user: import("..").User;
|
|
105
|
+
};
|
|
106
|
+
}, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, import("@trpc/server").TRPCUnsetMarker, false>;
|
|
107
|
+
//# sourceMappingURL=trpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trpc.d.ts","sourceRoot":"","sources":["../../src/api/trpc.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,WAAW,CAAA;AAEjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAI9C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,MAAM;IAAE,GAAG,EAAE,WAAW,CAAA;CAAE;;;;;;;;EAWjE,CAAA;AAID,eAAO,MAAM,WAAW;;;CAGvB,CAAA;AAiCD;;;GAGG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;EAAwB,CAAA;AAExD;;;GAGG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;EAAW,CAAA;AAE9B;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;yLAAc,CAAA;AAE1C;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;yKAAsC,CAAA"}
|
package/dist/api/trpc.js
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { initTRPC, TRPCError } from '@trpc/server';
|
|
2
|
+
import superjson from 'superjson';
|
|
3
|
+
import { ZodError } from 'zod';
|
|
4
|
+
import auth from '../auth';
|
|
5
|
+
import { db } from '../db/client';
|
|
6
|
+
/**
|
|
7
|
+
* Creates context for an incoming request
|
|
8
|
+
* @link https://trpc.io/docs/v11/context
|
|
9
|
+
*/
|
|
10
|
+
export const createTRPCContext = async (opts) => {
|
|
11
|
+
const session = await auth();
|
|
12
|
+
const headers = opts.req.headers;
|
|
13
|
+
return {
|
|
14
|
+
db,
|
|
15
|
+
session,
|
|
16
|
+
opts: {
|
|
17
|
+
headers,
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export const transformer = {
|
|
22
|
+
input: superjson,
|
|
23
|
+
output: superjson,
|
|
24
|
+
};
|
|
25
|
+
const t = initTRPC.context().create({
|
|
26
|
+
transformer: transformer,
|
|
27
|
+
errorFormatter({ shape, error }) {
|
|
28
|
+
return {
|
|
29
|
+
...shape,
|
|
30
|
+
data: {
|
|
31
|
+
...shape.data,
|
|
32
|
+
zodError: error.cause instanceof ZodError ? error.cause.flatten() : null,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
/*errorFormatter({ shape }) {
|
|
37
|
+
return shape
|
|
38
|
+
},*/
|
|
39
|
+
});
|
|
40
|
+
const isAuthedMiddleware = t.middleware(async ({ ctx, next }) => {
|
|
41
|
+
if (!ctx.session || !ctx.session.user)
|
|
42
|
+
throw new TRPCError({ code: 'UNAUTHORIZED', message: 'No token provided' });
|
|
43
|
+
return next({
|
|
44
|
+
/*ctx: {
|
|
45
|
+
user: user,
|
|
46
|
+
headers: ctx.opts.headers,
|
|
47
|
+
},*/
|
|
48
|
+
ctx: {
|
|
49
|
+
// infers the `session` as non-nullable
|
|
50
|
+
session: { ...ctx.session, user: ctx.session.user },
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
/**
|
|
55
|
+
* Create a server-side caller
|
|
56
|
+
* @see https://trpc.io/docs/server/server-side-calls
|
|
57
|
+
*/
|
|
58
|
+
export const createCallerFactory = t.createCallerFactory;
|
|
59
|
+
/**
|
|
60
|
+
* This is how you create new routers and sub-routers in your tRPC API
|
|
61
|
+
* @see https://trpc.io/docs/router
|
|
62
|
+
*/
|
|
63
|
+
export const router = t.router;
|
|
64
|
+
/**
|
|
65
|
+
* Public procedure that doesn't require authentication
|
|
66
|
+
*/
|
|
67
|
+
export const publicProcedure = t.procedure;
|
|
68
|
+
/**
|
|
69
|
+
* Private procedure that uses the `isAuthedMiddleware` middleware to require authentication
|
|
70
|
+
* @see https://trpc.io/docs/procedures
|
|
71
|
+
*/
|
|
72
|
+
export const privateProcedure = t.procedure.use(isAuthedMiddleware);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"axiosInstance.d.ts","sourceRoot":"","sources":["../../../src/auth/axios/axiosInstance.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,+BAMvB,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a cookie with the value 'token|hash',
|
|
3
|
+
* where 'token' is the CSRF token and 'hash' is a hash made of the token and
|
|
4
|
+
* the secret, and the two values are joined by a pipe '|'. By storing the
|
|
5
|
+
* value and the hash of the value (with the secret used as a salt) we can
|
|
6
|
+
* verify the cookie was set by the server and not by a malicious attacker.
|
|
7
|
+
*
|
|
8
|
+
* For more details, see the following OWASP links:
|
|
9
|
+
* https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie
|
|
10
|
+
* https://owasp.org/www-chapter-london/assets/slides/David_Johansson-Double_Defeat_of_Double-Submit_Cookie.pdf
|
|
11
|
+
*/
|
|
12
|
+
export declare function createCSRFToken(cookieValue?: string): Promise<{
|
|
13
|
+
csrfToken: string;
|
|
14
|
+
cookie?: undefined;
|
|
15
|
+
} | {
|
|
16
|
+
cookie: string;
|
|
17
|
+
csrfToken: string;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* This function is used to validate the CSRF token in POST, PUT, DELETE requests (or any request that changes data)
|
|
21
|
+
* @param cookieValue
|
|
22
|
+
* @param bodyValue
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateCSRFToken({ cookieValue, bodyValue }: {
|
|
25
|
+
cookieValue?: string;
|
|
26
|
+
bodyValue?: string;
|
|
27
|
+
}): Promise<boolean>;
|
|
28
|
+
export declare function randomString(size: number): string;
|
|
29
|
+
export declare function createHash(message: string): Promise<string>;
|
|
30
|
+
//# sourceMappingURL=csrf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../src/auth/csrf.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM;;;;;;GAoCzD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,oBAe/G;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,UAKxC;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,mBAO/C"}
|