@reverso/api 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +47 -0
  2. package/dist/index.d.ts +41 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +56 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/plugins/auth.d.ts +72 -0
  7. package/dist/plugins/auth.d.ts.map +1 -0
  8. package/dist/plugins/auth.js +173 -0
  9. package/dist/plugins/auth.js.map +1 -0
  10. package/dist/plugins/database.d.ts +19 -0
  11. package/dist/plugins/database.d.ts.map +1 -0
  12. package/dist/plugins/database.js +23 -0
  13. package/dist/plugins/database.js.map +1 -0
  14. package/dist/plugins/index.d.ts +5 -0
  15. package/dist/plugins/index.d.ts.map +1 -0
  16. package/dist/plugins/index.js +5 -0
  17. package/dist/plugins/index.js.map +1 -0
  18. package/dist/routes/auth.d.ts +6 -0
  19. package/dist/routes/auth.d.ts.map +1 -0
  20. package/dist/routes/auth.js +258 -0
  21. package/dist/routes/auth.js.map +1 -0
  22. package/dist/routes/content.d.ts +8 -0
  23. package/dist/routes/content.d.ts.map +1 -0
  24. package/dist/routes/content.js +339 -0
  25. package/dist/routes/content.js.map +1 -0
  26. package/dist/routes/forms.d.ts +8 -0
  27. package/dist/routes/forms.d.ts.map +1 -0
  28. package/dist/routes/forms.js +953 -0
  29. package/dist/routes/forms.js.map +1 -0
  30. package/dist/routes/index.d.ts +19 -0
  31. package/dist/routes/index.d.ts.map +1 -0
  32. package/dist/routes/index.js +31 -0
  33. package/dist/routes/index.js.map +1 -0
  34. package/dist/routes/media.d.ts +8 -0
  35. package/dist/routes/media.d.ts.map +1 -0
  36. package/dist/routes/media.js +400 -0
  37. package/dist/routes/media.js.map +1 -0
  38. package/dist/routes/pages.d.ts +8 -0
  39. package/dist/routes/pages.d.ts.map +1 -0
  40. package/dist/routes/pages.js +220 -0
  41. package/dist/routes/pages.js.map +1 -0
  42. package/dist/routes/redirects.d.ts +8 -0
  43. package/dist/routes/redirects.d.ts.map +1 -0
  44. package/dist/routes/redirects.js +462 -0
  45. package/dist/routes/redirects.js.map +1 -0
  46. package/dist/routes/schema.d.ts +8 -0
  47. package/dist/routes/schema.d.ts.map +1 -0
  48. package/dist/routes/schema.js +151 -0
  49. package/dist/routes/schema.js.map +1 -0
  50. package/dist/routes/sitemap.d.ts +8 -0
  51. package/dist/routes/sitemap.d.ts.map +1 -0
  52. package/dist/routes/sitemap.js +144 -0
  53. package/dist/routes/sitemap.js.map +1 -0
  54. package/dist/server.d.ts +47 -0
  55. package/dist/server.d.ts.map +1 -0
  56. package/dist/server.js +218 -0
  57. package/dist/server.js.map +1 -0
  58. package/dist/types.d.ts +91 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +5 -0
  61. package/dist/types.js.map +1 -0
  62. package/dist/utils/index.d.ts +5 -0
  63. package/dist/utils/index.d.ts.map +1 -0
  64. package/dist/utils/index.js +5 -0
  65. package/dist/utils/index.js.map +1 -0
  66. package/dist/utils/security.d.ts +32 -0
  67. package/dist/utils/security.d.ts.map +1 -0
  68. package/dist/utils/security.js +154 -0
  69. package/dist/utils/security.js.map +1 -0
  70. package/dist/validation.d.ts +402 -0
  71. package/dist/validation.d.ts.map +1 -0
  72. package/dist/validation.js +308 -0
  73. package/dist/validation.js.map +1 -0
  74. package/package.json +76 -0
@@ -0,0 +1,220 @@
1
+ /**
2
+ * Pages routes.
3
+ * Handles page CRUD operations.
4
+ */
5
+ import { getContentByFieldId, getFieldsBySectionId, getPageBySlug, getPages, getSectionsByPageId, parseContentValue, parseFieldConfig, parseRepeaterConfig, parseSourceFiles, } from '@reverso/db';
6
+ import { slugParamSchema } from '../validation.js';
7
+ const pagesRoutes = async (fastify) => {
8
+ /**
9
+ * GET /pages
10
+ * List all pages.
11
+ */
12
+ fastify.get('/pages', async (request, reply) => {
13
+ try {
14
+ const db = request.db;
15
+ const pages = await getPages(db);
16
+ return {
17
+ success: true,
18
+ data: pages.map((page) => ({
19
+ slug: page.slug,
20
+ name: page.name,
21
+ fieldCount: page.fieldCount,
22
+ sourceFiles: parseSourceFiles(page),
23
+ createdAt: page.createdAt,
24
+ updatedAt: page.updatedAt,
25
+ })),
26
+ };
27
+ }
28
+ catch (error) {
29
+ fastify.log.error(error, 'Failed to list pages');
30
+ return reply.status(500).send({
31
+ success: false,
32
+ error: 'Internal error',
33
+ message: 'Failed to list pages',
34
+ });
35
+ }
36
+ });
37
+ /**
38
+ * GET /pages/:slug
39
+ * Get a page with its sections and fields.
40
+ */
41
+ fastify.get('/pages/:slug', async (request, reply) => {
42
+ try {
43
+ const paramResult = slugParamSchema.safeParse(request.params);
44
+ if (!paramResult.success) {
45
+ return reply.status(400).send({
46
+ success: false,
47
+ error: 'Validation error',
48
+ message: 'Invalid slug format',
49
+ });
50
+ }
51
+ const { slug } = paramResult.data;
52
+ const db = request.db;
53
+ const page = await getPageBySlug(db, slug);
54
+ if (!page) {
55
+ return reply.status(404).send({
56
+ success: false,
57
+ error: 'Not found',
58
+ message: `Page "${slug}" not found`,
59
+ });
60
+ }
61
+ const sections = await getSectionsByPageId(db, page.id);
62
+ const sectionsData = [];
63
+ for (const section of sections) {
64
+ const fields = await getFieldsBySectionId(db, section.id);
65
+ const fieldsData = [];
66
+ for (const field of fields) {
67
+ const content = await getContentByFieldId(db, field.id);
68
+ fieldsData.push({
69
+ path: field.path,
70
+ type: field.type,
71
+ label: field.label,
72
+ placeholder: field.placeholder,
73
+ required: field.required,
74
+ config: parseFieldConfig(field),
75
+ value: content ? parseContentValue(content) : null,
76
+ published: content?.published ?? false,
77
+ });
78
+ }
79
+ sectionsData.push({
80
+ slug: section.slug,
81
+ name: section.name,
82
+ isRepeater: section.isRepeater,
83
+ repeaterConfig: parseRepeaterConfig(section),
84
+ fields: fieldsData,
85
+ });
86
+ }
87
+ return {
88
+ success: true,
89
+ data: {
90
+ slug: page.slug,
91
+ name: page.name,
92
+ fieldCount: page.fieldCount,
93
+ sourceFiles: parseSourceFiles(page),
94
+ sections: sectionsData,
95
+ },
96
+ };
97
+ }
98
+ catch (error) {
99
+ fastify.log.error(error, 'Failed to get page');
100
+ return reply.status(500).send({
101
+ success: false,
102
+ error: 'Internal error',
103
+ message: 'Failed to get page',
104
+ });
105
+ }
106
+ });
107
+ /**
108
+ * GET /pages/:slug/sections
109
+ * Get sections for a page.
110
+ */
111
+ fastify.get('/pages/:slug/sections', async (request, reply) => {
112
+ try {
113
+ const paramResult = slugParamSchema.safeParse(request.params);
114
+ if (!paramResult.success) {
115
+ return reply.status(400).send({
116
+ success: false,
117
+ error: 'Validation error',
118
+ message: 'Invalid slug format',
119
+ });
120
+ }
121
+ const { slug } = paramResult.data;
122
+ const db = request.db;
123
+ const page = await getPageBySlug(db, slug);
124
+ if (!page) {
125
+ return reply.status(404).send({
126
+ success: false,
127
+ error: 'Not found',
128
+ message: `Page "${slug}" not found`,
129
+ });
130
+ }
131
+ const sections = await getSectionsByPageId(db, page.id);
132
+ return {
133
+ success: true,
134
+ data: sections.map((section) => ({
135
+ slug: section.slug,
136
+ name: section.name,
137
+ isRepeater: section.isRepeater,
138
+ repeaterConfig: parseRepeaterConfig(section),
139
+ sortOrder: section.sortOrder,
140
+ })),
141
+ };
142
+ }
143
+ catch (error) {
144
+ fastify.log.error(error, 'Failed to get sections');
145
+ return reply.status(500).send({
146
+ success: false,
147
+ error: 'Internal error',
148
+ message: 'Failed to get sections',
149
+ });
150
+ }
151
+ });
152
+ /**
153
+ * GET /pages/:slug/sections/:sectionSlug
154
+ * Get a specific section with fields.
155
+ */
156
+ fastify.get('/pages/:slug/sections/:sectionSlug', async (request, reply) => {
157
+ try {
158
+ const { slug, sectionSlug } = request.params;
159
+ const db = request.db;
160
+ // Validate slug format
161
+ const paramResult = slugParamSchema.safeParse({ slug });
162
+ if (!paramResult.success) {
163
+ return reply.status(400).send({
164
+ success: false,
165
+ error: 'Validation error',
166
+ message: 'Invalid slug format',
167
+ });
168
+ }
169
+ const page = await getPageBySlug(db, slug);
170
+ if (!page) {
171
+ return reply.status(404).send({
172
+ success: false,
173
+ error: 'Not found',
174
+ message: `Page "${slug}" not found`,
175
+ });
176
+ }
177
+ const sections = await getSectionsByPageId(db, page.id);
178
+ const section = sections.find((s) => s.slug === sectionSlug);
179
+ if (!section) {
180
+ return reply.status(404).send({
181
+ success: false,
182
+ error: 'Not found',
183
+ message: `Section "${sectionSlug}" not found in page "${slug}"`,
184
+ });
185
+ }
186
+ const fields = await getFieldsBySectionId(db, section.id);
187
+ const fieldsData = [];
188
+ for (const field of fields) {
189
+ const content = await getContentByFieldId(db, field.id);
190
+ fieldsData.push({
191
+ path: field.path,
192
+ type: field.type,
193
+ label: field.label,
194
+ value: content ? parseContentValue(content) : null,
195
+ published: content?.published ?? false,
196
+ });
197
+ }
198
+ return {
199
+ success: true,
200
+ data: {
201
+ slug: section.slug,
202
+ name: section.name,
203
+ isRepeater: section.isRepeater,
204
+ repeaterConfig: parseRepeaterConfig(section),
205
+ fields: fieldsData,
206
+ },
207
+ };
208
+ }
209
+ catch (error) {
210
+ fastify.log.error(error, 'Failed to get section');
211
+ return reply.status(500).send({
212
+ success: false,
213
+ error: 'Internal error',
214
+ message: 'Failed to get section',
215
+ });
216
+ }
217
+ });
218
+ };
219
+ export default pagesRoutes;
220
+ //# sourceMappingURL=pages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.js","sourceRoot":"","sources":["../../src/routes/pages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Redirects routes.
3
+ * Handles redirect CRUD operations for SEO.
4
+ */
5
+ import type { FastifyPluginAsync } from 'fastify';
6
+ declare const redirectsRoutes: FastifyPluginAsync;
7
+ export default redirectsRoutes;
8
+ //# sourceMappingURL=redirects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redirects.d.ts","sourceRoot":"","sources":["../../src/routes/redirects.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,OAAO,KAAK,EAAmB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGnE,QAAA,MAAM,eAAe,EAAE,kBAmetB,CAAC;AAYF,eAAe,eAAe,CAAC"}