@tamyla/clodo-framework 3.1.21 → 3.1.22

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 (169) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/README.md +53 -0
  3. package/dist/bin/clodo-service.js +47 -15
  4. package/dist/bin/commands/deploy.js +115 -83
  5. package/dist/bin/commands/helpers/deployment-ui.js +138 -0
  6. package/dist/bin/commands/helpers/deployment-verification.js +251 -0
  7. package/dist/bin/commands/helpers/error-recovery.js +80 -0
  8. package/dist/bin/commands/helpers/resource-detection.js +113 -0
  9. package/dist/bin/commands/validate.js +1 -1
  10. package/dist/bin/security/security-cli.js +1 -1
  11. package/dist/bin/shared/cache/configuration-cache.js +82 -0
  12. package/dist/bin/shared/cloudflare/domain-manager.js +1 -1
  13. package/dist/bin/shared/cloudflare/index.js +1 -1
  14. package/dist/bin/shared/cloudflare/ops.js +6 -4
  15. package/dist/bin/shared/config/ConfigurationManager.js +23 -1
  16. package/dist/bin/shared/config/command-config-manager.js +19 -3
  17. package/dist/bin/shared/config/index.js +1 -1
  18. package/dist/bin/shared/deployment/credential-collector.js +30 -7
  19. package/dist/bin/shared/deployment/index.js +2 -2
  20. package/dist/bin/shared/deployment/rollback-manager.js +4 -520
  21. package/dist/bin/shared/deployment/utilities/d1-error-recovery.js +177 -0
  22. package/dist/bin/shared/deployment/validator.js +40 -10
  23. package/dist/bin/shared/deployment/workflows/deployment-summary.js +214 -0
  24. package/dist/bin/shared/deployment/workflows/interactive-confirmation.js +188 -0
  25. package/dist/bin/shared/deployment/workflows/interactive-database-workflow.js +234 -0
  26. package/dist/bin/shared/deployment/workflows/interactive-domain-info-gatherer.js +240 -0
  27. package/dist/bin/shared/deployment/workflows/interactive-secret-workflow.js +228 -0
  28. package/dist/bin/shared/deployment/workflows/interactive-testing-workflow.js +235 -0
  29. package/dist/bin/shared/deployment/workflows/interactive-validation.js +218 -0
  30. package/dist/bin/shared/error-handling/error-classifier.js +46 -0
  31. package/dist/bin/shared/monitoring/health-checker.js +129 -1
  32. package/dist/bin/shared/monitoring/memory-manager.js +17 -6
  33. package/dist/bin/shared/routing/domain-router.js +1 -1
  34. package/dist/bin/shared/utils/deployment-validator.js +97 -0
  35. package/dist/bin/shared/utils/formatters.js +10 -0
  36. package/dist/bin/shared/utils/index.js +13 -1
  37. package/dist/bin/shared/utils/interactive-prompts.js +34 -18
  38. package/dist/bin/shared/utils/progress-manager.js +2 -2
  39. package/dist/bin/shared/utils/progress-spinner.js +53 -0
  40. package/dist/bin/shared/utils/sensitive-redactor.js +91 -0
  41. package/dist/bin/shared/validation/ValidationRegistry.js +1 -1
  42. package/dist/security/index.js +1 -1
  43. package/dist/security/patterns/insecure-patterns.js +1 -1
  44. package/dist/utils/constants.js +102 -0
  45. package/dist/utils/deployment/wrangler-config-manager.js +215 -48
  46. package/dist/utils/framework-config.js +2 -2
  47. package/dist/utils/interactive-prompts.js +10 -59
  48. package/package.json +16 -8
  49. package/dist/bin/clodo-service-old.js +0 -868
  50. package/dist/bin/clodo-service-test.js +0 -10
  51. package/dist/bin/commands/assess.js +0 -91
  52. package/dist/bin/commands/create.js +0 -77
  53. package/dist/bin/commands/diagnose.js +0 -83
  54. package/dist/bin/commands/helpers.js +0 -138
  55. package/dist/bin/commands/update.js +0 -75
  56. package/dist/bin/database/deployment-db-manager.js +0 -423
  57. package/dist/bin/database/enterprise-db-manager.js +0 -457
  58. package/dist/bin/database/wrangler-d1-manager.js +0 -685
  59. package/dist/bin/deployment/enterprise-deploy.js +0 -877
  60. package/dist/bin/deployment/master-deploy.js +0 -1376
  61. package/dist/bin/deployment/modular-enterprise-deploy.js +0 -466
  62. package/dist/bin/deployment/modules/DeploymentConfiguration.js +0 -395
  63. package/dist/bin/deployment/modules/DeploymentOrchestrator.js +0 -492
  64. package/dist/bin/deployment/modules/EnvironmentManager.js +0 -517
  65. package/dist/bin/deployment/modules/MonitoringIntegration.js +0 -560
  66. package/dist/bin/deployment/modules/ValidationManager.js +0 -342
  67. package/dist/bin/deployment/orchestration/BaseDeploymentOrchestrator.js +0 -426
  68. package/dist/bin/deployment/orchestration/EnterpriseOrchestrator.js +0 -401
  69. package/dist/bin/deployment/orchestration/PortfolioOrchestrator.js +0 -273
  70. package/dist/bin/deployment/orchestration/SingleServiceOrchestrator.js +0 -231
  71. package/dist/bin/deployment/orchestration/UnifiedDeploymentOrchestrator.js +0 -662
  72. package/dist/bin/deployment/test-interactive-utils.js +0 -66
  73. package/dist/bin/portfolio/portfolio-manager.js +0 -487
  74. package/dist/bin/service-management/create-service.js +0 -122
  75. package/dist/bin/service-management/init-service.js +0 -79
  76. package/dist/config/customers.js +0 -623
  77. package/dist/config/domains.js +0 -186
  78. package/dist/config/index.js +0 -6
  79. package/dist/database/database-orchestrator.js +0 -795
  80. package/dist/database/index.js +0 -4
  81. package/dist/deployment/index.js +0 -11
  82. package/dist/deployment/orchestration/BaseDeploymentOrchestrator.js +0 -426
  83. package/dist/deployment/orchestration/EnterpriseOrchestrator.js +0 -401
  84. package/dist/deployment/orchestration/PortfolioOrchestrator.js +0 -273
  85. package/dist/deployment/orchestration/SingleServiceOrchestrator.js +0 -231
  86. package/dist/deployment/orchestration/UnifiedDeploymentOrchestrator.js +0 -662
  87. package/dist/deployment/orchestration/index.js +0 -17
  88. package/dist/deployment/rollback-manager.js +0 -36
  89. package/dist/deployment/wrangler-deployer.js +0 -640
  90. package/dist/handlers/GenericRouteHandler.js +0 -532
  91. package/dist/migration/MigrationAdapters.js +0 -562
  92. package/dist/modules/ModuleManager.js +0 -668
  93. package/dist/modules/security.js +0 -96
  94. package/dist/orchestration/cross-domain-coordinator.js +0 -1083
  95. package/dist/orchestration/index.js +0 -5
  96. package/dist/orchestration/modules/DeploymentCoordinator.js +0 -368
  97. package/dist/orchestration/modules/DomainResolver.js +0 -198
  98. package/dist/orchestration/modules/StateManager.js +0 -332
  99. package/dist/orchestration/multi-domain-orchestrator.js +0 -724
  100. package/dist/routing/EnhancedRouter.js +0 -158
  101. package/dist/schema/SchemaManager.js +0 -778
  102. package/dist/service-management/ConfirmationEngine.js +0 -412
  103. package/dist/service-management/ErrorTracker.js +0 -299
  104. package/dist/service-management/GenerationEngine.js +0 -447
  105. package/dist/service-management/InputCollector.js +0 -619
  106. package/dist/service-management/ServiceCreator.js +0 -265
  107. package/dist/service-management/ServiceInitializer.js +0 -453
  108. package/dist/service-management/ServiceOrchestrator.js +0 -633
  109. package/dist/service-management/generators/BaseGenerator.js +0 -233
  110. package/dist/service-management/generators/GeneratorRegistry.js +0 -254
  111. package/dist/service-management/generators/cicd/CiWorkflowGenerator.js +0 -87
  112. package/dist/service-management/generators/cicd/DeployWorkflowGenerator.js +0 -106
  113. package/dist/service-management/generators/code/ServiceHandlersGenerator.js +0 -235
  114. package/dist/service-management/generators/code/ServiceMiddlewareGenerator.js +0 -116
  115. package/dist/service-management/generators/code/ServiceUtilsGenerator.js +0 -246
  116. package/dist/service-management/generators/code/WorkerIndexGenerator.js +0 -143
  117. package/dist/service-management/generators/config/DevelopmentEnvGenerator.js +0 -101
  118. package/dist/service-management/generators/config/DomainsConfigGenerator.js +0 -175
  119. package/dist/service-management/generators/config/EnvExampleGenerator.js +0 -178
  120. package/dist/service-management/generators/config/ProductionEnvGenerator.js +0 -97
  121. package/dist/service-management/generators/config/StagingEnvGenerator.js +0 -97
  122. package/dist/service-management/generators/config/WranglerTomlGenerator.js +0 -238
  123. package/dist/service-management/generators/core/PackageJsonGenerator.js +0 -243
  124. package/dist/service-management/generators/core/SiteConfigGenerator.js +0 -115
  125. package/dist/service-management/generators/documentation/ApiDocsGenerator.js +0 -331
  126. package/dist/service-management/generators/documentation/ConfigurationDocsGenerator.js +0 -294
  127. package/dist/service-management/generators/documentation/DeploymentDocsGenerator.js +0 -244
  128. package/dist/service-management/generators/documentation/ReadmeGenerator.js +0 -196
  129. package/dist/service-management/generators/schemas/ServiceSchemaGenerator.js +0 -190
  130. package/dist/service-management/generators/scripts/DeployScriptGenerator.js +0 -123
  131. package/dist/service-management/generators/scripts/HealthCheckScriptGenerator.js +0 -101
  132. package/dist/service-management/generators/scripts/SetupScriptGenerator.js +0 -88
  133. package/dist/service-management/generators/service-types/StaticSiteGenerator.js +0 -342
  134. package/dist/service-management/generators/testing/EslintConfigGenerator.js +0 -85
  135. package/dist/service-management/generators/testing/IntegrationTestsGenerator.js +0 -237
  136. package/dist/service-management/generators/testing/JestConfigGenerator.js +0 -72
  137. package/dist/service-management/generators/testing/UnitTestsGenerator.js +0 -277
  138. package/dist/service-management/generators/tooling/DockerComposeGenerator.js +0 -71
  139. package/dist/service-management/generators/tooling/GitignoreGenerator.js +0 -143
  140. package/dist/service-management/generators/utils/FileWriter.js +0 -179
  141. package/dist/service-management/generators/utils/PathResolver.js +0 -157
  142. package/dist/service-management/generators/utils/ServiceManifestGenerator.js +0 -111
  143. package/dist/service-management/generators/utils/TemplateEngine.js +0 -185
  144. package/dist/service-management/generators/utils/index.js +0 -18
  145. package/dist/service-management/handlers/ConfirmationHandler.js +0 -71
  146. package/dist/service-management/handlers/GenerationHandler.js +0 -80
  147. package/dist/service-management/handlers/InputHandler.js +0 -59
  148. package/dist/service-management/handlers/ValidationHandler.js +0 -203
  149. package/dist/service-management/index.js +0 -14
  150. package/dist/service-management/routing/DomainRouteMapper.js +0 -311
  151. package/dist/service-management/routing/RouteGenerator.js +0 -266
  152. package/dist/service-management/routing/WranglerRoutesBuilder.js +0 -273
  153. package/dist/service-management/routing/index.js +0 -14
  154. package/dist/service-management/services/DirectoryStructureService.js +0 -56
  155. package/dist/service-management/services/GenerationCoordinator.js +0 -208
  156. package/dist/service-management/services/GeneratorRegistry.js +0 -174
  157. package/dist/services/GenericDataService.js +0 -501
  158. package/dist/ui-structures/concepts/second-order-acquisition-strategy.md +0 -286
  159. package/dist/ui-structures/concepts/service-lifecycle-management.md +0 -150
  160. package/dist/ui-structures/concepts/service-manifest-guide.md +0 -309
  161. package/dist/ui-structures/concepts/three-tier-categorization-strategy.md +0 -231
  162. package/dist/ui-structures/creation/automated-generation-ui.json +0 -246
  163. package/dist/ui-structures/creation/core-inputs-ui.json +0 -217
  164. package/dist/ui-structures/creation/smart-confirmable-ui.json +0 -451
  165. package/dist/ui-structures/reference/absolutely-required-inputs.json +0 -315
  166. package/dist/ui-structures/reference/service-manifest-template.json +0 -342
  167. package/dist/version/VersionDetector.js +0 -723
  168. package/dist/worker/index.js +0 -4
  169. package/dist/worker/integration.js +0 -351
@@ -1,532 +0,0 @@
1
- import { schemaManager } from '../schema/SchemaManager.js';
2
- import { createDataService } from '../services/GenericDataService.js';
3
- import { moduleManager } from '../modules/ModuleManager.js';
4
-
5
- /**
6
- * Generic Route Handlers
7
- * Provides reusable CRUD handlers for any configured data model
8
- */
9
-
10
- export class GenericRouteHandler {
11
- /**
12
- * Create a new GenericRouteHandler instance
13
- * @param {Object} d1Client - D1 database client
14
- * @param {string} modelName - Name of the model
15
- * @param {Object} options - Handler options
16
- */
17
- constructor(d1Client, modelName, options = {}) {
18
- this.d1Client = d1Client;
19
- this.modelName = modelName;
20
- this.dataService = createDataService(d1Client, modelName);
21
- this.options = {
22
- requireAuth: options.requireAuth !== false,
23
- // Default to requiring auth
24
- allowPublicRead: options.allowPublicRead || false,
25
- customValidators: options.customValidators || {},
26
- hooks: options.hooks || {},
27
- ...options
28
- };
29
- }
30
-
31
- /**
32
- * Handle GET /:model - List all records
33
- * @param {Request} request - HTTP request
34
- * @returns {Promise<Response>} HTTP response
35
- */
36
- async handleList(request) {
37
- try {
38
- // Check authentication if required
39
- if (this.options.requireAuth && !this.options.allowPublicRead) {
40
- const authResult = await this._checkAuth(request);
41
- if (!authResult.authenticated) {
42
- return new Response(JSON.stringify({
43
- success: false,
44
- error: 'Authentication required'
45
- }), {
46
- status: 401,
47
- headers: {
48
- 'Content-Type': 'application/json'
49
- }
50
- });
51
- }
52
- }
53
-
54
- // Parse query parameters
55
- const url = new URL(request.url);
56
- const criteria = this._parseQueryCriteria(url.searchParams);
57
- const pagination = this._parsePagination(url.searchParams);
58
-
59
- // Execute hooks
60
- await moduleManager.executeHooks('before.list', {
61
- model: this.modelName,
62
- request,
63
- criteria,
64
- pagination
65
- });
66
-
67
- // Get data
68
- let result;
69
- if (pagination.limit) {
70
- result = await this.dataService.paginate(criteria, pagination);
71
- } else {
72
- const data = await this.dataService.find(criteria);
73
- result = {
74
- data,
75
- pagination: null
76
- };
77
- }
78
-
79
- // Execute hooks
80
- await moduleManager.executeHooks('after.list', {
81
- model: this.modelName,
82
- request,
83
- result
84
- });
85
- return new Response(JSON.stringify({
86
- success: true,
87
- data: result.data,
88
- pagination: result.pagination
89
- }), {
90
- status: 200,
91
- headers: {
92
- 'Content-Type': 'application/json'
93
- }
94
- });
95
- } catch (error) {
96
- console.error(`Error in ${this.modelName} list:`, error);
97
- return new Response(JSON.stringify({
98
- success: false,
99
- error: 'Failed to retrieve records',
100
- message: error.message
101
- }), {
102
- status: 500,
103
- headers: {
104
- 'Content-Type': 'application/json'
105
- }
106
- });
107
- }
108
- }
109
-
110
- /**
111
- * Handle GET /:model/:id - Get single record
112
- * @param {Request} request - HTTP request
113
- * @param {string} id - Record ID
114
- * @returns {Promise<Response>} HTTP response
115
- */
116
- async handleGet(request, id) {
117
- try {
118
- // Check authentication if required
119
- if (this.options.requireAuth && !this.options.allowPublicRead) {
120
- const authResult = await this._checkAuth(request);
121
- if (!authResult.authenticated) {
122
- return new Response(JSON.stringify({
123
- success: false,
124
- error: 'Authentication required'
125
- }), {
126
- status: 401,
127
- headers: {
128
- 'Content-Type': 'application/json'
129
- }
130
- });
131
- }
132
- }
133
-
134
- // Execute hooks
135
- await moduleManager.executeHooks('before.get', {
136
- model: this.modelName,
137
- request,
138
- id
139
- });
140
-
141
- // Get data
142
- const record = await this.dataService.findById(id);
143
- if (!record) {
144
- return new Response(JSON.stringify({
145
- success: false,
146
- error: 'Record not found'
147
- }), {
148
- status: 404,
149
- headers: {
150
- 'Content-Type': 'application/json'
151
- }
152
- });
153
- }
154
-
155
- // Execute hooks
156
- await moduleManager.executeHooks('after.get', {
157
- model: this.modelName,
158
- request,
159
- record
160
- });
161
- return new Response(JSON.stringify({
162
- success: true,
163
- data: record
164
- }), {
165
- status: 200,
166
- headers: {
167
- 'Content-Type': 'application/json'
168
- }
169
- });
170
- } catch (error) {
171
- console.error(`Error in ${this.modelName} get:`, error);
172
- return new Response(JSON.stringify({
173
- success: false,
174
- error: 'Failed to retrieve record',
175
- message: error.message
176
- }), {
177
- status: 500,
178
- headers: {
179
- 'Content-Type': 'application/json'
180
- }
181
- });
182
- }
183
- }
184
-
185
- /**
186
- * Handle POST /:model - Create new record
187
- * @param {Request} request - HTTP request
188
- * @returns {Promise<Response>} HTTP response
189
- */
190
- async handleCreate(request) {
191
- try {
192
- // Check authentication if required
193
- if (this.options.requireAuth) {
194
- const authResult = await this._checkAuth(request);
195
- if (!authResult.authenticated) {
196
- return new Response(JSON.stringify({
197
- success: false,
198
- error: 'Authentication required'
199
- }), {
200
- status: 401,
201
- headers: {
202
- 'Content-Type': 'application/json'
203
- }
204
- });
205
- }
206
- }
207
-
208
- // Parse request body
209
- const data = await request.json();
210
-
211
- // Execute hooks
212
- await moduleManager.executeHooks('before.create', {
213
- model: this.modelName,
214
- request,
215
- data
216
- });
217
-
218
- // Custom validation
219
- if (this.options.customValidators.create) {
220
- const validation = await this.options.customValidators.create(data, request);
221
- if (!validation.valid) {
222
- return new Response(JSON.stringify({
223
- success: false,
224
- error: 'Validation failed',
225
- details: validation.errors
226
- }), {
227
- status: 400,
228
- headers: {
229
- 'Content-Type': 'application/json'
230
- }
231
- });
232
- }
233
- }
234
-
235
- // Create record
236
- const record = await this.dataService.create(data);
237
-
238
- // Execute hooks
239
- await moduleManager.executeHooks('after.create', {
240
- model: this.modelName,
241
- request,
242
- record
243
- });
244
- return new Response(JSON.stringify({
245
- success: true,
246
- data: record
247
- }), {
248
- status: 201,
249
- headers: {
250
- 'Content-Type': 'application/json'
251
- }
252
- });
253
- } catch (error) {
254
- console.error(`Error in ${this.modelName} create:`, error);
255
- return new Response(JSON.stringify({
256
- success: false,
257
- error: 'Failed to create record',
258
- message: error.message
259
- }), {
260
- status: 500,
261
- headers: {
262
- 'Content-Type': 'application/json'
263
- }
264
- });
265
- }
266
- }
267
-
268
- /**
269
- * Handle PATCH /:model/:id - Update record
270
- * @param {Request} request - HTTP request
271
- * @param {string} id - Record ID
272
- * @returns {Promise<Response>} HTTP response
273
- */
274
- async handleUpdate(request, id) {
275
- try {
276
- // Check authentication if required
277
- if (this.options.requireAuth) {
278
- const authResult = await this._checkAuth(request);
279
- if (!authResult.authenticated) {
280
- return new Response(JSON.stringify({
281
- success: false,
282
- error: 'Authentication required'
283
- }), {
284
- status: 401,
285
- headers: {
286
- 'Content-Type': 'application/json'
287
- }
288
- });
289
- }
290
- }
291
-
292
- // Parse request body
293
- const updates = await request.json();
294
-
295
- // Check if record exists
296
- const existing = await this.dataService.findById(id);
297
- if (!existing) {
298
- return new Response(JSON.stringify({
299
- success: false,
300
- error: 'Record not found'
301
- }), {
302
- status: 404,
303
- headers: {
304
- 'Content-Type': 'application/json'
305
- }
306
- });
307
- }
308
-
309
- // Execute hooks
310
- await moduleManager.executeHooks('before.update', {
311
- model: this.modelName,
312
- request,
313
- id,
314
- updates,
315
- existing
316
- });
317
-
318
- // Custom validation
319
- if (this.options.customValidators.update) {
320
- const validation = await this.options.customValidators.update(updates, request, existing);
321
- if (!validation.valid) {
322
- return new Response(JSON.stringify({
323
- success: false,
324
- error: 'Validation failed',
325
- details: validation.errors
326
- }), {
327
- status: 400,
328
- headers: {
329
- 'Content-Type': 'application/json'
330
- }
331
- });
332
- }
333
- }
334
-
335
- // Update record
336
- const record = await this.dataService.update(id, updates);
337
-
338
- // Execute hooks
339
- await moduleManager.executeHooks('after.update', {
340
- model: this.modelName,
341
- request,
342
- record
343
- });
344
- return new Response(JSON.stringify({
345
- success: true,
346
- data: record
347
- }), {
348
- status: 200,
349
- headers: {
350
- 'Content-Type': 'application/json'
351
- }
352
- });
353
- } catch (error) {
354
- console.error(`Error in ${this.modelName} update:`, error);
355
- return new Response(JSON.stringify({
356
- success: false,
357
- error: 'Failed to update record',
358
- message: error.message
359
- }), {
360
- status: 500,
361
- headers: {
362
- 'Content-Type': 'application/json'
363
- }
364
- });
365
- }
366
- }
367
-
368
- /**
369
- * Handle DELETE /:model/:id - Delete record
370
- * @param {Request} request - HTTP request
371
- * @param {string} id - Record ID
372
- * @returns {Promise<Response>} HTTP response
373
- */
374
- async handleDelete(request, id) {
375
- try {
376
- // Check authentication if required
377
- if (this.options.requireAuth) {
378
- const authResult = await this._checkAuth(request);
379
- if (!authResult.authenticated) {
380
- return new Response(JSON.stringify({
381
- success: false,
382
- error: 'Authentication required'
383
- }), {
384
- status: 401,
385
- headers: {
386
- 'Content-Type': 'application/json'
387
- }
388
- });
389
- }
390
- }
391
-
392
- // Check if record exists
393
- const existing = await this.dataService.findById(id);
394
- if (!existing) {
395
- return new Response(JSON.stringify({
396
- success: false,
397
- error: 'Record not found'
398
- }), {
399
- status: 404,
400
- headers: {
401
- 'Content-Type': 'application/json'
402
- }
403
- });
404
- }
405
-
406
- // Execute hooks
407
- await moduleManager.executeHooks('before.delete', {
408
- model: this.modelName,
409
- request,
410
- id,
411
- existing
412
- });
413
-
414
- // Delete record
415
- const success = await this.dataService.delete(id);
416
- if (success) {
417
- // Execute hooks
418
- await moduleManager.executeHooks('after.delete', {
419
- model: this.modelName,
420
- request,
421
- id
422
- });
423
- return new Response(JSON.stringify({
424
- success: true,
425
- data: {
426
- id
427
- }
428
- }), {
429
- status: 200,
430
- headers: {
431
- 'Content-Type': 'application/json'
432
- }
433
- });
434
- } else {
435
- throw new Error('Delete operation failed');
436
- }
437
- } catch (error) {
438
- console.error(`Error in ${this.modelName} delete:`, error);
439
- return new Response(JSON.stringify({
440
- success: false,
441
- error: 'Failed to delete record',
442
- message: error.message
443
- }), {
444
- status: 500,
445
- headers: {
446
- 'Content-Type': 'application/json'
447
- }
448
- });
449
- }
450
- }
451
-
452
- /**
453
- * Check authentication (placeholder - integrate with your auth system)
454
- * @param {Request} request - HTTP request
455
- * @returns {Promise<Object>} Auth result
456
- * @private
457
- */
458
- async _checkAuth(request) {
459
- // This should integrate with your existing auth middleware
460
- // For now, return authenticated if there's an authorization header
461
- const authHeader = request.headers.get('authorization');
462
- return {
463
- authenticated: !!authHeader,
464
- user: authHeader ? {
465
- id: 'user-from-token'
466
- } : null
467
- };
468
- }
469
-
470
- /**
471
- * Parse query parameters into search criteria
472
- * @param {URLSearchParams} params - Query parameters
473
- * @returns {Object} Search criteria
474
- * @private
475
- */
476
- _parseQueryCriteria(params) {
477
- const criteria = {};
478
- for (const [key, value] of params.entries()) {
479
- // Skip pagination params
480
- if (['page', 'limit', 'offset'].includes(key)) continue;
481
-
482
- // Handle different query types
483
- if (key.endsWith('_gt')) {
484
- const field = key.slice(0, -3);
485
- criteria[field] = {
486
- $gt: value
487
- };
488
- } else if (key.endsWith('_lt')) {
489
- const field = key.slice(0, -3);
490
- criteria[field] = {
491
- $lt: value
492
- };
493
- } else if (key.endsWith('_like')) {
494
- const field = key.slice(0, -5);
495
- criteria[field] = {
496
- $like: value
497
- };
498
- } else {
499
- criteria[key] = value;
500
- }
501
- }
502
- return criteria;
503
- }
504
-
505
- /**
506
- * Parse pagination parameters
507
- * @param {URLSearchParams} params - Query parameters
508
- * @returns {Object} Pagination options
509
- * @private
510
- */
511
- _parsePagination(params) {
512
- return {
513
- page: parseInt(params.get('page')) || 1,
514
- limit: parseInt(params.get('limit')) || null,
515
- offset: parseInt(params.get('offset')) || null
516
- };
517
- }
518
- }
519
-
520
- /**
521
- * Factory function to create route handlers for all models
522
- * @param {Object} d1Client - D1 database client
523
- * @param {Object} options - Global options
524
- * @returns {Object} Map of model names to handler instances
525
- */
526
- export function createRouteHandlers(d1Client, options = {}) {
527
- const handlers = {};
528
- for (const [modelName] of schemaManager.getAllModels()) {
529
- handlers[modelName] = new GenericRouteHandler(d1Client, modelName, options);
530
- }
531
- return handlers;
532
- }