sovrium 0.0.2
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/CHANGELOG.md +3497 -0
- package/LICENSE.md +147 -0
- package/LICENSE_EE.md +297 -0
- package/README.md +321 -0
- package/drizzle/0000_melted_kabuki.sql +163 -0
- package/drizzle/meta/0000_snapshot.json +1216 -0
- package/drizzle/meta/_journal.json +13 -0
- package/package.json +167 -0
- package/schemas/0.0.1/app.openapi.json +70 -0
- package/schemas/0.0.1/app.schema.json +7961 -0
- package/schemas/0.0.2/app.openapi.json +80 -0
- package/schemas/0.0.2/app.schema.json +8829 -0
- package/schemas/development/app.openapi.json +70 -0
- package/schemas/development/app.schema.json +7456 -0
- package/src/application/errors/app-validation-error.ts +14 -0
- package/src/application/errors/static-generation-error.ts +16 -0
- package/src/application/metadata/favicon-transformer.ts +127 -0
- package/src/application/models/server.ts +27 -0
- package/src/application/ports/models/user-metadata.ts +36 -0
- package/src/application/ports/models/user-session.ts +34 -0
- package/src/application/ports/repositories/activity-log-repository.ts +68 -0
- package/src/application/ports/repositories/activity-repository.ts +49 -0
- package/src/application/ports/repositories/analytics-repository.ts +164 -0
- package/src/application/ports/repositories/auth-repository.ts +33 -0
- package/src/application/ports/repositories/batch-repository.ts +86 -0
- package/src/application/ports/repositories/comment-repository.ts +150 -0
- package/src/application/ports/repositories/index.ts +41 -0
- package/src/application/ports/repositories/table-repository.ts +139 -0
- package/src/application/ports/services/css-compiler.ts +55 -0
- package/src/application/ports/services/index.ts +16 -0
- package/src/application/ports/services/page-renderer.ts +79 -0
- package/src/application/ports/services/server-factory.ts +80 -0
- package/src/application/ports/services/static-site-generator.ts +82 -0
- package/src/application/use-cases/activity/programs.ts +66 -0
- package/src/application/use-cases/analytics/collect-page-view.ts +114 -0
- package/src/application/use-cases/analytics/purge-old-data.ts +40 -0
- package/src/application/use-cases/analytics/query-campaigns.ts +43 -0
- package/src/application/use-cases/analytics/query-devices.ts +36 -0
- package/src/application/use-cases/analytics/query-overview.ts +50 -0
- package/src/application/use-cases/analytics/query-pages.ts +40 -0
- package/src/application/use-cases/analytics/query-referrers.ts +43 -0
- package/src/application/use-cases/analytics/ua-parser.ts +89 -0
- package/src/application/use-cases/analytics/visitor-hash.ts +77 -0
- package/src/application/use-cases/auth/bootstrap-admin.ts +270 -0
- package/src/application/use-cases/list-activity-logs.ts +123 -0
- package/src/application/use-cases/server/generate-static-helpers.ts +374 -0
- package/src/application/use-cases/server/generate-static.ts +287 -0
- package/src/application/use-cases/server/start-server.ts +118 -0
- package/src/application/use-cases/server/startup-error-handler.ts +69 -0
- package/src/application/use-cases/server/static-content-generators.ts +182 -0
- package/src/application/use-cases/server/static-language-generators.ts +181 -0
- package/src/application/use-cases/server/static-url-rewriter.ts +237 -0
- package/src/application/use-cases/server/translation-replacer.ts +164 -0
- package/src/application/use-cases/tables/activity-programs.ts +93 -0
- package/src/application/use-cases/tables/batch-operations.ts +156 -0
- package/src/application/use-cases/tables/comment-programs.ts +436 -0
- package/src/application/use-cases/tables/permissions/permissions.ts +25 -0
- package/src/application/use-cases/tables/programs.ts +435 -0
- package/src/application/use-cases/tables/table-operations.ts +412 -0
- package/src/application/use-cases/tables/user-role.ts +52 -0
- package/src/application/use-cases/tables/utils/display-formatter.ts +471 -0
- package/src/application/use-cases/tables/utils/field-read-filter.ts +189 -0
- package/src/application/use-cases/tables/utils/list-helpers.ts +122 -0
- package/src/application/use-cases/tables/utils/record-transformer.ts +319 -0
- package/src/cli.ts +370 -0
- package/src/domain/errors/create-tagged-error.ts +36 -0
- package/src/domain/errors/index.ts +78 -0
- package/src/domain/models/api/analytics.ts +179 -0
- package/src/domain/models/api/auth.ts +231 -0
- package/src/domain/models/api/common.ts +60 -0
- package/src/domain/models/api/error.ts +89 -0
- package/src/domain/models/api/health.ts +38 -0
- package/src/domain/models/api/index.ts +42 -0
- package/src/domain/models/api/request.ts +132 -0
- package/src/domain/models/api/tables.ts +444 -0
- package/src/domain/models/app/analytics/index.ts +129 -0
- package/src/domain/models/app/auth/config.ts +116 -0
- package/src/domain/models/app/auth/index.ts +230 -0
- package/src/domain/models/app/auth/methods/email-and-password.ts +67 -0
- package/src/domain/models/app/auth/methods/index.ts +11 -0
- package/src/domain/models/app/auth/methods/magic-link.ts +54 -0
- package/src/domain/models/app/auth/oauth/index.ts +8 -0
- package/src/domain/models/app/auth/oauth/providers.ts +105 -0
- package/src/domain/models/app/auth/plugins/admin.ts +130 -0
- package/src/domain/models/app/auth/plugins/index.ts +74 -0
- package/src/domain/models/app/auth/plugins/two-factor.ts +63 -0
- package/src/domain/models/app/auth/roles.ts +179 -0
- package/src/domain/models/app/auth/strategies.ts +191 -0
- package/src/domain/models/app/auth/validation.ts +127 -0
- package/src/domain/models/app/common/branded-ids.ts +200 -0
- package/src/domain/models/app/common/definitions.ts +187 -0
- package/src/domain/models/app/component/common/component-children.ts +119 -0
- package/src/domain/models/app/component/common/component-props.ts +89 -0
- package/src/domain/models/app/component/common/component-reference.ts +170 -0
- package/src/domain/models/app/component/component.ts +81 -0
- package/src/domain/models/app/components.ts +65 -0
- package/src/domain/models/app/description.ts +83 -0
- package/src/domain/models/app/index.ts +258 -0
- package/src/domain/models/app/language/language-config.ts +200 -0
- package/src/domain/models/app/languages.ts +205 -0
- package/src/domain/models/app/name.ts +66 -0
- package/src/domain/models/app/page/common/interactions/click-interaction.ts +116 -0
- package/src/domain/models/app/page/common/interactions/entrance-animation.ts +84 -0
- package/src/domain/models/app/page/common/interactions/hover-interaction.ts +144 -0
- package/src/domain/models/app/page/common/interactions/interactions.ts +64 -0
- package/src/domain/models/app/page/common/interactions/scroll-interaction.ts +93 -0
- package/src/domain/models/app/page/common/responsive.ts +114 -0
- package/src/domain/models/app/page/common/url.ts +35 -0
- package/src/domain/models/app/page/common/variable-reference.ts +53 -0
- package/src/domain/models/app/page/id.ts +44 -0
- package/src/domain/models/app/page/index.ts +270 -0
- package/src/domain/models/app/page/meta/analytics.ts +248 -0
- package/src/domain/models/app/page/meta/custom-elements.ts +180 -0
- package/src/domain/models/app/page/meta/dns-prefetch.ts +77 -0
- package/src/domain/models/app/page/meta/favicon-set.ts +203 -0
- package/src/domain/models/app/page/meta/favicon.ts +50 -0
- package/src/domain/models/app/page/meta/favicons-config.ts +73 -0
- package/src/domain/models/app/page/meta/index.ts +278 -0
- package/src/domain/models/app/page/meta/open-graph.ts +166 -0
- package/src/domain/models/app/page/meta/preload.ts +190 -0
- package/src/domain/models/app/page/meta/structured-data/article.ts +211 -0
- package/src/domain/models/app/page/meta/structured-data/breadcrumb.ts +115 -0
- package/src/domain/models/app/page/meta/structured-data/common-fields.ts +201 -0
- package/src/domain/models/app/page/meta/structured-data/education-event.ts +256 -0
- package/src/domain/models/app/page/meta/structured-data/faq-page.ts +127 -0
- package/src/domain/models/app/page/meta/structured-data/index.ts +95 -0
- package/src/domain/models/app/page/meta/structured-data/local-business.ts +247 -0
- package/src/domain/models/app/page/meta/structured-data/organization.ts +171 -0
- package/src/domain/models/app/page/meta/structured-data/person.ts +138 -0
- package/src/domain/models/app/page/meta/structured-data/postal-address.ts +106 -0
- package/src/domain/models/app/page/meta/structured-data/product.ts +214 -0
- package/src/domain/models/app/page/meta/twitter-card.ts +217 -0
- package/src/domain/models/app/page/name.ts +38 -0
- package/src/domain/models/app/page/path.ts +21 -0
- package/src/domain/models/app/page/scripts/external-scripts.ts +163 -0
- package/src/domain/models/app/page/scripts/features.ts +135 -0
- package/src/domain/models/app/page/scripts/inline-scripts.ts +114 -0
- package/src/domain/models/app/page/scripts/scripts.ts +102 -0
- package/src/domain/models/app/page/sections.ts +298 -0
- package/src/domain/models/app/pages.ts +61 -0
- package/src/domain/models/app/permissions/index.ts +61 -0
- package/src/domain/models/app/permissions/resource-action.ts +114 -0
- package/src/domain/models/app/permissions/roles.ts +120 -0
- package/src/domain/models/app/table/check-constraints.ts +105 -0
- package/src/domain/models/app/table/cycle-detection.ts +124 -0
- package/src/domain/models/app/table/database-identifier.ts +153 -0
- package/src/domain/models/app/table/field-name.ts +36 -0
- package/src/domain/models/app/table/field-types/advanced/array-field.ts +33 -0
- package/src/domain/models/app/table/field-types/advanced/autonumber-field.ts +54 -0
- package/src/domain/models/app/table/field-types/advanced/button-field.ts +56 -0
- package/src/domain/models/app/table/field-types/advanced/color-field.ts +57 -0
- package/src/domain/models/app/table/field-types/advanced/count-field.ts +54 -0
- package/src/domain/models/app/table/field-types/advanced/formula-field.ts +58 -0
- package/src/domain/models/app/table/field-types/advanced/geolocation-field.ts +49 -0
- package/src/domain/models/app/table/field-types/advanced/index.ts +16 -0
- package/src/domain/models/app/table/field-types/advanced/json-field.ts +25 -0
- package/src/domain/models/app/table/field-types/advanced/unknown-field.ts +85 -0
- package/src/domain/models/app/table/field-types/base-field.ts +42 -0
- package/src/domain/models/app/table/field-types/date-time/created-at-field.ts +49 -0
- package/src/domain/models/app/table/field-types/date-time/date-field.ts +95 -0
- package/src/domain/models/app/table/field-types/date-time/deleted-at-field.ts +56 -0
- package/src/domain/models/app/table/field-types/date-time/duration-field.ts +73 -0
- package/src/domain/models/app/table/field-types/date-time/index.ts +12 -0
- package/src/domain/models/app/table/field-types/date-time/updated-at-field.ts +50 -0
- package/src/domain/models/app/table/field-types/index.ts +19 -0
- package/src/domain/models/app/table/field-types/media/barcode-field.ts +58 -0
- package/src/domain/models/app/table/field-types/media/index.ts +10 -0
- package/src/domain/models/app/table/field-types/media/multiple-attachments-field.ts +80 -0
- package/src/domain/models/app/table/field-types/media/single-attachment-field.ts +81 -0
- package/src/domain/models/app/table/field-types/numeric/currency-field.ts +144 -0
- package/src/domain/models/app/table/field-types/numeric/decimal-field.ts +113 -0
- package/src/domain/models/app/table/field-types/numeric/index.ts +13 -0
- package/src/domain/models/app/table/field-types/numeric/integer-field.ts +98 -0
- package/src/domain/models/app/table/field-types/numeric/percentage-field.ts +115 -0
- package/src/domain/models/app/table/field-types/numeric/progress-field.ts +71 -0
- package/src/domain/models/app/table/field-types/numeric/rating-field.ts +74 -0
- package/src/domain/models/app/table/field-types/relational/index.ts +10 -0
- package/src/domain/models/app/table/field-types/relational/lookup-field.ts +46 -0
- package/src/domain/models/app/table/field-types/relational/relationship-field.ts +112 -0
- package/src/domain/models/app/table/field-types/relational/rollup-field.ts +58 -0
- package/src/domain/models/app/table/field-types/selection/checkbox-field.ts +51 -0
- package/src/domain/models/app/table/field-types/selection/index.ts +11 -0
- package/src/domain/models/app/table/field-types/selection/multi-select-field.ts +68 -0
- package/src/domain/models/app/table/field-types/selection/single-select-field.ts +54 -0
- package/src/domain/models/app/table/field-types/selection/status-field.ts +37 -0
- package/src/domain/models/app/table/field-types/text/email-field.ts +80 -0
- package/src/domain/models/app/table/field-types/text/index.ts +13 -0
- package/src/domain/models/app/table/field-types/text/long-text-field.ts +77 -0
- package/src/domain/models/app/table/field-types/text/phone-number-field.ts +82 -0
- package/src/domain/models/app/table/field-types/text/rich-text-field.ts +66 -0
- package/src/domain/models/app/table/field-types/text/single-line-text-field.ts +79 -0
- package/src/domain/models/app/table/field-types/text/url-field.ts +81 -0
- package/src/domain/models/app/table/field-types/user/created-by-field.ts +50 -0
- package/src/domain/models/app/table/field-types/user/deleted-by-field.ts +57 -0
- package/src/domain/models/app/table/field-types/user/index.ts +11 -0
- package/src/domain/models/app/table/field-types/user/updated-by-field.ts +51 -0
- package/src/domain/models/app/table/field-types/user/user-field.ts +52 -0
- package/src/domain/models/app/table/field-types/validation-utils.ts +166 -0
- package/src/domain/models/app/table/fields.ts +216 -0
- package/src/domain/models/app/table/foreign-keys.ts +111 -0
- package/src/domain/models/app/table/formula-keywords.ts +326 -0
- package/src/domain/models/app/table/id.ts +31 -0
- package/src/domain/models/app/table/index.ts +290 -0
- package/src/domain/models/app/table/indexes.ts +80 -0
- package/src/domain/models/app/table/name.ts +37 -0
- package/src/domain/models/app/table/permissions/field-permission.ts +83 -0
- package/src/domain/models/app/table/permissions/index.ts +167 -0
- package/src/domain/models/app/table/permissions/permission-evaluator.ts +372 -0
- package/src/domain/models/app/table/permissions/permission.ts +49 -0
- package/src/domain/models/app/table/primary-key.ts +62 -0
- package/src/domain/models/app/table/table-formula-validation.ts +168 -0
- package/src/domain/models/app/table/table-indexes-validation.ts +38 -0
- package/src/domain/models/app/table/table-permissions-validation.ts +77 -0
- package/src/domain/models/app/table/table-primary-key-validation.ts +49 -0
- package/src/domain/models/app/table/table-views-validation.ts +408 -0
- package/src/domain/models/app/table/unique-constraints.ts +79 -0
- package/src/domain/models/app/table/views/fields.ts +28 -0
- package/src/domain/models/app/table/views/filters.ts +162 -0
- package/src/domain/models/app/table/views/group-by.ts +32 -0
- package/src/domain/models/app/table/views/id.ts +50 -0
- package/src/domain/models/app/table/views/index.ts +177 -0
- package/src/domain/models/app/table/views/name.ts +32 -0
- package/src/domain/models/app/table/views/permissions.ts +98 -0
- package/src/domain/models/app/table/views/sorts.ts +31 -0
- package/src/domain/models/app/tables.ts +695 -0
- package/src/domain/models/app/theme/animations.ts +208 -0
- package/src/domain/models/app/theme/border-radius.ts +58 -0
- package/src/domain/models/app/theme/breakpoints.ts +62 -0
- package/src/domain/models/app/theme/colors.ts +110 -0
- package/src/domain/models/app/theme/fonts.ts +164 -0
- package/src/domain/models/app/theme/shadows.ts +61 -0
- package/src/domain/models/app/theme/spacing.ts +115 -0
- package/src/domain/models/app/theme.ts +66 -0
- package/src/domain/models/app/version.ts +87 -0
- package/src/domain/models/record-comment.ts +91 -0
- package/src/domain/utils/content-parsing.ts +49 -0
- package/src/domain/utils/format-detection.ts +69 -0
- package/src/domain/utils/index.ts +9 -0
- package/src/domain/utils/route-matcher.ts +184 -0
- package/src/domain/utils/translation-resolver.ts +170 -0
- package/src/index.ts +208 -0
- package/src/infrastructure/analytics/tracking-script.ts +48 -0
- package/src/infrastructure/auth/better-auth/auth.ts +216 -0
- package/src/infrastructure/auth/better-auth/email-handlers.ts +162 -0
- package/src/infrastructure/auth/better-auth/index.ts +16 -0
- package/src/infrastructure/auth/better-auth/layer.ts +97 -0
- package/src/infrastructure/auth/better-auth/plugins/admin.ts +56 -0
- package/src/infrastructure/auth/better-auth/plugins/magic-link.ts +31 -0
- package/src/infrastructure/auth/better-auth/plugins/two-factor.ts +19 -0
- package/src/infrastructure/auth/better-auth/schema.ts +152 -0
- package/src/infrastructure/auth/index.ts +27 -0
- package/src/infrastructure/css/cache/css-cache-service.ts +130 -0
- package/src/infrastructure/css/compiler.ts +210 -0
- package/src/infrastructure/css/css-compiler-live.ts +20 -0
- package/src/infrastructure/css/index.ts +25 -0
- package/src/infrastructure/css/styles/animation-styles-generator.ts +177 -0
- package/src/infrastructure/css/styles/click-animations.ts +147 -0
- package/src/infrastructure/css/styles/component-layer-generators.ts +147 -0
- package/src/infrastructure/css/theme/theme-generators.ts +130 -0
- package/src/infrastructure/css/theme/theme-layer-generators.ts +219 -0
- package/src/infrastructure/css/theme/theme-token-resolver.ts +76 -0
- package/src/infrastructure/database/activity-queries.ts +111 -0
- package/src/infrastructure/database/auth/auth-validation.ts +101 -0
- package/src/infrastructure/database/drizzle/db-bun.ts +17 -0
- package/src/infrastructure/database/drizzle/db.ts +17 -0
- package/src/infrastructure/database/drizzle/index.ts +16 -0
- package/src/infrastructure/database/drizzle/layer.ts +34 -0
- package/src/infrastructure/database/drizzle/migrate.ts +77 -0
- package/src/infrastructure/database/drizzle/schema/activity-log.ts +111 -0
- package/src/infrastructure/database/drizzle/schema/analytics-page-views.ts +116 -0
- package/src/infrastructure/database/drizzle/schema/migration-audit.ts +68 -0
- package/src/infrastructure/database/drizzle/schema/record-comments.ts +79 -0
- package/src/infrastructure/database/drizzle/schema.ts +12 -0
- package/src/infrastructure/database/field-utils.ts +87 -0
- package/src/infrastructure/database/filter-operators.ts +136 -0
- package/src/infrastructure/database/formula/formula-trigger-generators.ts +114 -0
- package/src/infrastructure/database/formula/formula-utils.ts +440 -0
- package/src/infrastructure/database/generators/index-generators.ts +152 -0
- package/src/infrastructure/database/generators/trigger-generators.ts +154 -0
- package/src/infrastructure/database/index.ts +35 -0
- package/src/infrastructure/database/lookup/lookup-expression-generators.ts +356 -0
- package/src/infrastructure/database/lookup/lookup-expressions.ts +116 -0
- package/src/infrastructure/database/lookup/lookup-view-generators.ts +403 -0
- package/src/infrastructure/database/lookup/lookup-view-helpers.ts +65 -0
- package/src/infrastructure/database/lookup/lookup-view-triggers.ts +121 -0
- package/src/infrastructure/database/migration-audit-trail.ts +375 -0
- package/src/infrastructure/database/repositories/activity-log-repository-live.ts +99 -0
- package/src/infrastructure/database/repositories/activity-repository-live.ts +21 -0
- package/src/infrastructure/database/repositories/analytics-repository-live.ts +316 -0
- package/src/infrastructure/database/repositories/auth-repository-live.ts +42 -0
- package/src/infrastructure/database/repositories/batch-repository-live.ts +29 -0
- package/src/infrastructure/database/repositories/comment-repository-live.ts +39 -0
- package/src/infrastructure/database/repositories/table-repository-live.ts +38 -0
- package/src/infrastructure/database/schema/schema-dependency-sorting.ts +142 -0
- package/src/infrastructure/database/schema/schema-initializer.ts +598 -0
- package/src/infrastructure/database/schema-migration/column-detection.ts +286 -0
- package/src/infrastructure/database/schema-migration/constants.ts +31 -0
- package/src/infrastructure/database/schema-migration/constraint-sync.ts +288 -0
- package/src/infrastructure/database/schema-migration/index-sync.ts +108 -0
- package/src/infrastructure/database/schema-migration/index.ts +66 -0
- package/src/infrastructure/database/schema-migration/migration-statements.ts +106 -0
- package/src/infrastructure/database/schema-migration/rename-detection.ts +87 -0
- package/src/infrastructure/database/schema-migration/table-operations.ts +65 -0
- package/src/infrastructure/database/schema-migration/type-utils.ts +98 -0
- package/src/infrastructure/database/schema-migration/types.ts +14 -0
- package/src/infrastructure/database/schema-migration-helpers.ts +53 -0
- package/src/infrastructure/database/session-context.ts +20 -0
- package/src/infrastructure/database/sql/sql-check-constraints.ts +252 -0
- package/src/infrastructure/database/sql/sql-column-generators.ts +174 -0
- package/src/infrastructure/database/sql/sql-execution.ts +245 -0
- package/src/infrastructure/database/sql/sql-field-predicates.ts +81 -0
- package/src/infrastructure/database/sql/sql-generators.ts +91 -0
- package/src/infrastructure/database/sql/sql-junction-tables.ts +79 -0
- package/src/infrastructure/database/sql/sql-key-constraints.ts +210 -0
- package/src/infrastructure/database/sql/sql-type-mappings.ts +106 -0
- package/src/infrastructure/database/sql/sql-utils.ts +53 -0
- package/src/infrastructure/database/table-live-layers.ts +30 -0
- package/src/infrastructure/database/table-operations/column-generators.ts +82 -0
- package/src/infrastructure/database/table-operations/create-table-sql.ts +81 -0
- package/src/infrastructure/database/table-operations/index.ts +55 -0
- package/src/infrastructure/database/table-operations/migration-utils.ts +157 -0
- package/src/infrastructure/database/table-operations/table-effects.ts +234 -0
- package/src/infrastructure/database/table-operations/table-features.ts +96 -0
- package/src/infrastructure/database/table-operations/type-compatibility.ts +58 -0
- package/src/infrastructure/database/table-operations.ts +47 -0
- package/src/infrastructure/database/table-queries/batch/batch-create.ts +80 -0
- package/src/infrastructure/database/table-queries/batch/batch-delete.ts +212 -0
- package/src/infrastructure/database/table-queries/batch/batch-helpers.ts +124 -0
- package/src/infrastructure/database/table-queries/batch/batch-restore.ts +161 -0
- package/src/infrastructure/database/table-queries/batch/batch-update.ts +146 -0
- package/src/infrastructure/database/table-queries/batch/batch-upsert.ts +357 -0
- package/src/infrastructure/database/table-queries/batch/batch.ts +14 -0
- package/src/infrastructure/database/table-queries/crud/crud-read.ts +351 -0
- package/src/infrastructure/database/table-queries/crud/crud-write.ts +399 -0
- package/src/infrastructure/database/table-queries/crud/crud.ts +16 -0
- package/src/infrastructure/database/table-queries/index.ts +11 -0
- package/src/infrastructure/database/table-queries/mutation-helpers/authorship-helpers.ts +152 -0
- package/src/infrastructure/database/table-queries/mutation-helpers/create-record-helpers.ts +90 -0
- package/src/infrastructure/database/table-queries/mutation-helpers/delete-helpers.ts +163 -0
- package/src/infrastructure/database/table-queries/mutation-helpers/record-fetch-helpers.ts +79 -0
- package/src/infrastructure/database/table-queries/mutation-helpers/update-helpers.ts +74 -0
- package/src/infrastructure/database/table-queries/query-helpers/activity-log-helpers.ts +53 -0
- package/src/infrastructure/database/table-queries/query-helpers/activity-queries.ts +106 -0
- package/src/infrastructure/database/table-queries/query-helpers/aggregation-helpers.ts +314 -0
- package/src/infrastructure/database/table-queries/query-helpers/comment-queries.ts +414 -0
- package/src/infrastructure/database/table-queries/query-helpers/record-validation-queries.ts +126 -0
- package/src/infrastructure/database/table-queries/query-helpers/trash-helpers.ts +58 -0
- package/src/infrastructure/database/table-queries/shared/error-handling.ts +47 -0
- package/src/infrastructure/database/table-queries/shared/typed-execute.ts +27 -0
- package/src/infrastructure/database/table-queries/shared/user-join-helpers.ts +38 -0
- package/src/infrastructure/database/table-queries/shared/validation.ts +39 -0
- package/src/infrastructure/database/views/view-generators.ts +258 -0
- package/src/infrastructure/devtools/devtools-layer.ts +43 -0
- package/src/infrastructure/devtools/index.ts +8 -0
- package/src/infrastructure/email/email-config.ts +103 -0
- package/src/infrastructure/email/email-service.ts +152 -0
- package/src/infrastructure/email/index.ts +107 -0
- package/src/infrastructure/email/nodemailer.ts +125 -0
- package/src/infrastructure/email/templates.ts +244 -0
- package/src/infrastructure/errors/auth-config-required-error.ts +21 -0
- package/src/infrastructure/errors/auth-error.ts +16 -0
- package/src/infrastructure/errors/css-compilation-error.ts +14 -0
- package/src/infrastructure/errors/index.ts +26 -0
- package/src/infrastructure/errors/schema-initialization-error.ts +19 -0
- package/src/infrastructure/errors/server-creation-error.ts +14 -0
- package/src/infrastructure/filesystem/copy-directory.ts +136 -0
- package/src/infrastructure/layers/app-layer.ts +61 -0
- package/src/infrastructure/layers/page-renderer-layer.ts +41 -0
- package/src/infrastructure/logging/index.ts +8 -0
- package/src/infrastructure/logging/logger.ts +204 -0
- package/src/infrastructure/schema/file-loader.ts +53 -0
- package/src/infrastructure/schema/index.ts +15 -0
- package/src/infrastructure/schema/remote-loader.ts +48 -0
- package/src/infrastructure/server/index.ts +26 -0
- package/src/infrastructure/server/language-detection.ts +87 -0
- package/src/infrastructure/server/lifecycle.ts +67 -0
- package/src/infrastructure/server/route-setup/api-routes.ts +310 -0
- package/src/infrastructure/server/route-setup/auth-route-utils.ts +399 -0
- package/src/infrastructure/server/route-setup/auth-routes.ts +245 -0
- package/src/infrastructure/server/route-setup/openapi-routes.ts +45 -0
- package/src/infrastructure/server/route-setup/openapi-schema.ts +120 -0
- package/src/infrastructure/server/route-setup/page-routes.ts +219 -0
- package/src/infrastructure/server/route-setup/static-assets.ts +191 -0
- package/src/infrastructure/server/server-factory-live.ts +45 -0
- package/src/infrastructure/server/server.ts +275 -0
- package/src/infrastructure/server/ssg-adapter.ts +196 -0
- package/src/infrastructure/server/static-site-generator-live.ts +20 -0
- package/src/infrastructure/utils/accept-language-parser.ts +106 -0
- package/src/infrastructure/utils/glob-matcher.ts +50 -0
- package/src/presentation/api/client.ts +114 -0
- package/src/presentation/api/middleware/auth.ts +233 -0
- package/src/presentation/api/middleware/table.ts +155 -0
- package/src/presentation/api/middleware/validation.ts +88 -0
- package/src/presentation/api/routes/activity/get-activity-by-id-handler.ts +77 -0
- package/src/presentation/api/routes/activity/index.ts +28 -0
- package/src/presentation/api/routes/activity.ts +339 -0
- package/src/presentation/api/routes/analytics.ts +328 -0
- package/src/presentation/api/routes/auth.ts +169 -0
- package/src/presentation/api/routes/index.ts +11 -0
- package/src/presentation/api/routes/tables/activity-handlers.ts +57 -0
- package/src/presentation/api/routes/tables/batch-permission-helpers.ts +163 -0
- package/src/presentation/api/routes/tables/batch-routes.ts +355 -0
- package/src/presentation/api/routes/tables/comment-handlers.ts +377 -0
- package/src/presentation/api/routes/tables/create-record-helpers.ts +179 -0
- package/src/presentation/api/routes/tables/effect-runner.ts +58 -0
- package/src/presentation/api/routes/tables/error-handlers.ts +53 -0
- package/src/presentation/api/routes/tables/field-permission-validation.ts +167 -0
- package/src/presentation/api/routes/tables/filter-parser.ts +75 -0
- package/src/presentation/api/routes/tables/formula-parser.ts +118 -0
- package/src/presentation/api/routes/tables/index.ts +113 -0
- package/src/presentation/api/routes/tables/list-records-filter.ts +54 -0
- package/src/presentation/api/routes/tables/param-parsers.ts +59 -0
- package/src/presentation/api/routes/tables/record-handlers.ts +484 -0
- package/src/presentation/api/routes/tables/record-routes.ts +53 -0
- package/src/presentation/api/routes/tables/record-update-handler.ts +200 -0
- package/src/presentation/api/routes/tables/sort-validation.ts +85 -0
- package/src/presentation/api/routes/tables/table-routes.ts +76 -0
- package/src/presentation/api/routes/tables/timezone-validation.ts +41 -0
- package/src/presentation/api/routes/tables/upsert-helpers.ts +471 -0
- package/src/presentation/api/routes/tables/utils.ts +159 -0
- package/src/presentation/api/routes/tables/view-routes.ts +51 -0
- package/src/presentation/api/routes/tables.ts +9 -0
- package/src/presentation/api/utils/context-helpers.ts +43 -0
- package/src/presentation/api/utils/error-sanitizer.ts +235 -0
- package/src/presentation/api/utils/field-permission-validator.ts +53 -0
- package/src/presentation/api/utils/filter-field-validator.ts +90 -0
- package/src/presentation/api/utils/index.ts +13 -0
- package/src/presentation/api/utils/run-effect.ts +94 -0
- package/src/presentation/api/utils/validate-request.ts +89 -0
- package/src/presentation/api/validation/index.ts +29 -0
- package/src/presentation/api/validation/rules/field-rules.ts +158 -0
- package/src/presentation/api/validation/rules/record-rules.ts +73 -0
- package/src/presentation/cli/index.ts +19 -0
- package/src/presentation/cli/schema-loader.ts +172 -0
- package/src/presentation/hooks/use-breakpoint.ts +155 -0
- package/src/presentation/rendering/render-error-pages.tsx +60 -0
- package/src/presentation/rendering/render-homepage.tsx +137 -0
- package/src/presentation/scripts/script-renderers.ts +112 -0
- package/src/presentation/styling/animation-composer.ts +117 -0
- package/src/presentation/styling/index.ts +13 -0
- package/src/presentation/styling/parse-style.ts +243 -0
- package/src/presentation/styling/style-utils.ts +50 -0
- package/src/presentation/styling/theme-colors.ts +53 -0
- package/src/presentation/translations/component-utils.ts +54 -0
- package/src/presentation/translations/index.ts +16 -0
- package/src/presentation/translations/translation-resolver.ts +22 -0
- package/src/presentation/ui/languages/language-switcher.tsx +119 -0
- package/src/presentation/ui/metadata/analytics-builders.tsx +174 -0
- package/src/presentation/ui/metadata/analytics-head.tsx +39 -0
- package/src/presentation/ui/metadata/custom-elements-builders.tsx +157 -0
- package/src/presentation/ui/metadata/extract-component-meta.ts +108 -0
- package/src/presentation/ui/metadata/head-elements.tsx +164 -0
- package/src/presentation/ui/metadata/index.tsx +35 -0
- package/src/presentation/ui/metadata/meta-utils.tsx +42 -0
- package/src/presentation/ui/metadata/open-graph-meta.tsx +57 -0
- package/src/presentation/ui/metadata/structured-data-from-component.tsx +134 -0
- package/src/presentation/ui/metadata/structured-data.tsx +88 -0
- package/src/presentation/ui/metadata/twitter-card-meta.tsx +80 -0
- package/src/presentation/ui/pages/DefaultHomePage.tsx +43 -0
- package/src/presentation/ui/pages/DefaultPageConfigs.ts +220 -0
- package/src/presentation/ui/pages/DynamicPage.tsx +307 -0
- package/src/presentation/ui/pages/ErrorPage.tsx +25 -0
- package/src/presentation/ui/pages/NotFoundPage.tsx +25 -0
- package/src/presentation/ui/pages/PageBodyScripts.tsx +242 -0
- package/src/presentation/ui/pages/PageBodyStyles.ts +52 -0
- package/src/presentation/ui/pages/PageHead.tsx +380 -0
- package/src/presentation/ui/pages/PageLangResolver.ts +58 -0
- package/src/presentation/ui/pages/PageMain.tsx +58 -0
- package/src/presentation/ui/pages/PageMetadata.ts +168 -0
- package/src/presentation/ui/pages/PageMetadataI18n.ts +169 -0
- package/src/presentation/ui/pages/PageScripts.ts +78 -0
- package/src/presentation/ui/pages/SectionRenderer.tsx +67 -0
- package/src/presentation/ui/pages/SectionSpacing.tsx +131 -0
- package/src/presentation/ui/sections/component-renderer.tsx +426 -0
- package/src/presentation/ui/sections/component-renderer.types.ts +33 -0
- package/src/presentation/ui/sections/components/component-reference-handler.tsx +74 -0
- package/src/presentation/ui/sections/components/component-resolution.ts +65 -0
- package/src/presentation/ui/sections/components/index.ts +9 -0
- package/src/presentation/ui/sections/hero.tsx +394 -0
- package/src/presentation/ui/sections/props/component-builder.ts +183 -0
- package/src/presentation/ui/sections/props/element-props.ts +179 -0
- package/src/presentation/ui/sections/props/index.ts +9 -0
- package/src/presentation/ui/sections/props/prop-conversion.ts +171 -0
- package/src/presentation/ui/sections/props/props-builder-config.ts +42 -0
- package/src/presentation/ui/sections/props/props-builder.ts +296 -0
- package/src/presentation/ui/sections/renderers/element-renderers/html-element-renderer.tsx +124 -0
- package/src/presentation/ui/sections/renderers/element-renderers/index.ts +59 -0
- package/src/presentation/ui/sections/renderers/element-renderers/interactive-renderers.tsx +231 -0
- package/src/presentation/ui/sections/renderers/element-renderers/media-renderers.tsx +102 -0
- package/src/presentation/ui/sections/renderers/element-renderers/text-content-renderers.tsx +42 -0
- package/src/presentation/ui/sections/renderers/element-renderers.ts +53 -0
- package/src/presentation/ui/sections/renderers/html-element-helpers.ts +100 -0
- package/src/presentation/ui/sections/renderers/specialized-renderers.tsx +212 -0
- package/src/presentation/ui/sections/rendering/component-dispatch-config.ts +31 -0
- package/src/presentation/ui/sections/rendering/component-registry/index.ts +39 -0
- package/src/presentation/ui/sections/rendering/component-registry/interactive-components.ts +54 -0
- package/src/presentation/ui/sections/rendering/component-registry/media-components.ts +36 -0
- package/src/presentation/ui/sections/rendering/component-registry/special-components.tsx +153 -0
- package/src/presentation/ui/sections/rendering/component-registry/structural-components.ts +215 -0
- package/src/presentation/ui/sections/rendering/component-registry/text-components.ts +57 -0
- package/src/presentation/ui/sections/rendering/component-registry-helpers.tsx +29 -0
- package/src/presentation/ui/sections/rendering/component-registry.tsx +21 -0
- package/src/presentation/ui/sections/rendering/component-type-dispatcher.tsx +33 -0
- package/src/presentation/ui/sections/rendering/index.ts +9 -0
- package/src/presentation/ui/sections/responsive/responsive-children-builder.tsx +96 -0
- package/src/presentation/ui/sections/responsive/responsive-content-builder.tsx +95 -0
- package/src/presentation/ui/sections/responsive/responsive-props-merger.ts +195 -0
- package/src/presentation/ui/sections/responsive/responsive-resolver.ts +213 -0
- package/src/presentation/ui/sections/styling/animation-composer-wrapper.ts +65 -0
- package/src/presentation/ui/sections/styling/class-builders.ts +45 -0
- package/src/presentation/ui/sections/styling/color-resolver.ts +43 -0
- package/src/presentation/ui/sections/styling/hover-interaction-handler.ts +107 -0
- package/src/presentation/ui/sections/styling/index.ts +9 -0
- package/src/presentation/ui/sections/styling/interaction-props-builder.ts +55 -0
- package/src/presentation/ui/sections/styling/shadow-resolver.ts +83 -0
- package/src/presentation/ui/sections/styling/spacing-resolver.ts +104 -0
- package/src/presentation/ui/sections/styling/style-processor.ts +170 -0
- package/src/presentation/ui/sections/styling/theme-tokens.ts +184 -0
- package/src/presentation/ui/sections/translations/i18n-content-resolver.ts +198 -0
- package/src/presentation/ui/sections/translations/index.ts +9 -0
- package/src/presentation/ui/sections/translations/translation-handler.ts +143 -0
- package/src/presentation/ui/sections/translations/variable-substitution.ts +225 -0
- package/src/presentation/ui/sections/utils/time-parser.ts +82 -0
- package/src/presentation/utils/link-attributes.ts +50 -0
- package/src/presentation/utils/string-utils.ts +58 -0
- package/src/presentation/utils/styles.ts +50 -0
- package/tsconfig.json +46 -0
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
import { timestampSchema } from './common'
|
|
10
|
+
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// User Schemas
|
|
13
|
+
// ============================================================================
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* User schema
|
|
17
|
+
*
|
|
18
|
+
* Represents a user in API responses.
|
|
19
|
+
* Based on Better Auth user model.
|
|
20
|
+
*/
|
|
21
|
+
export const userSchema = z
|
|
22
|
+
.object({
|
|
23
|
+
id: z.string().describe('Unique user identifier'),
|
|
24
|
+
email: z.email().describe('User email address'),
|
|
25
|
+
name: z.string().nullable().describe('User display name'),
|
|
26
|
+
image: z.url().nullable().optional().describe('User avatar URL'),
|
|
27
|
+
emailVerified: z.boolean().describe('Whether email is verified'),
|
|
28
|
+
})
|
|
29
|
+
.extend(timestampSchema.shape)
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* User with role schema (for admin endpoints)
|
|
33
|
+
*/
|
|
34
|
+
export const userWithRoleSchema = userSchema.extend({
|
|
35
|
+
role: z.enum(['user', 'admin']).describe('User role'),
|
|
36
|
+
banned: z.boolean().optional().describe('Whether user is banned'),
|
|
37
|
+
banReason: z.string().nullable().optional().describe('Reason for ban'),
|
|
38
|
+
banExpiresAt: z.iso.datetime().nullable().optional().describe('Ban expiration'),
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// Session Schemas
|
|
43
|
+
// ============================================================================
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Session schema
|
|
47
|
+
*
|
|
48
|
+
* Represents an authentication session.
|
|
49
|
+
*/
|
|
50
|
+
export const sessionSchema = z
|
|
51
|
+
.object({
|
|
52
|
+
id: z.string().describe('Session identifier'),
|
|
53
|
+
userId: z.string().describe('User ID this session belongs to'),
|
|
54
|
+
token: z.string().describe('Session token'),
|
|
55
|
+
expiresAt: z.iso.datetime().describe('Session expiration timestamp'),
|
|
56
|
+
ipAddress: z.string().nullable().optional().describe('IP address of session'),
|
|
57
|
+
userAgent: z.string().nullable().optional().describe('User agent string'),
|
|
58
|
+
})
|
|
59
|
+
.extend(timestampSchema.shape)
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Session with user schema
|
|
63
|
+
*/
|
|
64
|
+
export const sessionWithUserSchema = z.object({
|
|
65
|
+
session: sessionSchema,
|
|
66
|
+
user: userSchema,
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
// ============================================================================
|
|
70
|
+
// Auth Response Schemas
|
|
71
|
+
// ============================================================================
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Sign-in response schema
|
|
75
|
+
*
|
|
76
|
+
* Returned on successful email/password sign-in.
|
|
77
|
+
*/
|
|
78
|
+
export const signInResponseSchema = z.object({
|
|
79
|
+
user: userSchema.describe('Authenticated user data'),
|
|
80
|
+
session: sessionSchema.describe('New session data'),
|
|
81
|
+
token: z.string().optional().describe('Bearer token for API calls'),
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Sign-up response schema
|
|
86
|
+
*
|
|
87
|
+
* Returned on successful user registration.
|
|
88
|
+
*/
|
|
89
|
+
export const signUpResponseSchema = z.object({
|
|
90
|
+
user: userSchema.describe('Newly created user data'),
|
|
91
|
+
session: sessionSchema.optional().describe('Session if auto-login enabled'),
|
|
92
|
+
token: z.string().optional().describe('Bearer token if auto-login enabled'),
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Sign-out response schema
|
|
97
|
+
*/
|
|
98
|
+
export const signOutResponseSchema = z.object({
|
|
99
|
+
success: z.literal(true).describe('Sign-out succeeded'),
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Session response schema
|
|
104
|
+
*
|
|
105
|
+
* Returned when fetching current session.
|
|
106
|
+
* Alias for sessionWithUserSchema for API clarity.
|
|
107
|
+
*/
|
|
108
|
+
export const getSessionResponseSchema = z.object({
|
|
109
|
+
session: sessionSchema,
|
|
110
|
+
user: userSchema,
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* List sessions response schema
|
|
115
|
+
*/
|
|
116
|
+
export const listSessionsResponseSchema = z.object({
|
|
117
|
+
sessions: z.array(sessionSchema).describe('List of active sessions'),
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Revoke session response schema
|
|
122
|
+
*/
|
|
123
|
+
export const revokeSessionResponseSchema = z.object({
|
|
124
|
+
success: z.literal(true).describe('Session revoked successfully'),
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
// ============================================================================
|
|
128
|
+
// Password Schemas
|
|
129
|
+
// ============================================================================
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Password reset request response schema
|
|
133
|
+
*/
|
|
134
|
+
export const forgotPasswordResponseSchema = z.object({
|
|
135
|
+
success: z.literal(true).describe('Password reset email sent'),
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Password reset response schema
|
|
140
|
+
*/
|
|
141
|
+
export const resetPasswordResponseSchema = z.object({
|
|
142
|
+
success: z.literal(true).describe('Password reset successful'),
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Change password response schema
|
|
147
|
+
*/
|
|
148
|
+
export const changePasswordResponseSchema = z.object({
|
|
149
|
+
success: z.literal(true).describe('Password changed successfully'),
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
// ============================================================================
|
|
153
|
+
// Verification Schemas
|
|
154
|
+
// ============================================================================
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Email verification response schema
|
|
158
|
+
*/
|
|
159
|
+
export const verifyEmailResponseSchema = z.object({
|
|
160
|
+
user: userSchema.describe('User with verified email'),
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Send verification email response schema
|
|
165
|
+
*/
|
|
166
|
+
export const sendVerificationEmailResponseSchema = z.object({
|
|
167
|
+
success: z.literal(true).describe('Verification email sent'),
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
// ============================================================================
|
|
171
|
+
// Admin Schemas
|
|
172
|
+
// ============================================================================
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Admin list users response schema
|
|
176
|
+
*/
|
|
177
|
+
export const adminListUsersResponseSchema = z.object({
|
|
178
|
+
users: z.array(userWithRoleSchema).describe('List of users'),
|
|
179
|
+
total: z.number().describe('Total user count'),
|
|
180
|
+
page: z.number().describe('Current page'),
|
|
181
|
+
limit: z.number().describe('Items per page'),
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Admin get user response schema
|
|
186
|
+
*/
|
|
187
|
+
export const adminGetUserResponseSchema = z.object({
|
|
188
|
+
user: userWithRoleSchema.describe('User details'),
|
|
189
|
+
})
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Admin update user response schema
|
|
193
|
+
*/
|
|
194
|
+
export const adminUpdateUserResponseSchema = z.object({
|
|
195
|
+
user: userWithRoleSchema.describe('Updated user'),
|
|
196
|
+
})
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Admin delete user response schema
|
|
200
|
+
*/
|
|
201
|
+
export const adminDeleteUserResponseSchema = z.object({
|
|
202
|
+
success: z.literal(true).describe('User deleted'),
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Admin ban user response schema
|
|
207
|
+
*/
|
|
208
|
+
export const adminBanUserResponseSchema = z.object({
|
|
209
|
+
user: userWithRoleSchema.describe('Banned user'),
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Admin unban user response schema
|
|
214
|
+
*/
|
|
215
|
+
export const adminUnbanUserResponseSchema = z.object({
|
|
216
|
+
user: userWithRoleSchema.describe('Unbanned user'),
|
|
217
|
+
})
|
|
218
|
+
|
|
219
|
+
// ============================================================================
|
|
220
|
+
// TypeScript Types
|
|
221
|
+
// ============================================================================
|
|
222
|
+
|
|
223
|
+
export type User = z.infer<typeof userSchema>
|
|
224
|
+
export type UserWithRole = z.infer<typeof userWithRoleSchema>
|
|
225
|
+
export type Session = z.infer<typeof sessionSchema>
|
|
226
|
+
export type SessionWithUser = z.infer<typeof sessionWithUserSchema>
|
|
227
|
+
export type SignInResponse = z.infer<typeof signInResponseSchema>
|
|
228
|
+
export type SignUpResponse = z.infer<typeof signUpResponseSchema>
|
|
229
|
+
export type SignOutResponse = z.infer<typeof signOutResponseSchema>
|
|
230
|
+
export type GetSessionResponse = z.infer<typeof getSessionResponseSchema>
|
|
231
|
+
export type ListSessionsResponse = z.infer<typeof listSessionsResponseSchema>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Pagination metadata schema
|
|
12
|
+
*
|
|
13
|
+
* Common pagination fields used across list endpoints.
|
|
14
|
+
*/
|
|
15
|
+
export const paginationSchema = z.object({
|
|
16
|
+
page: z.number().int().min(1).describe('Current page number (1-indexed)'),
|
|
17
|
+
limit: z.number().int().min(1).max(100).describe('Items per page'),
|
|
18
|
+
offset: z.number().int().min(0).describe('Offset from start of results'),
|
|
19
|
+
total: z.number().int().min(0).describe('Total number of items'),
|
|
20
|
+
totalPages: z.number().int().min(0).describe('Total number of pages'),
|
|
21
|
+
hasNextPage: z.boolean().describe('Whether there are more pages'),
|
|
22
|
+
hasPreviousPage: z.boolean().describe('Whether there are previous pages'),
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Pagination query parameters schema
|
|
27
|
+
*
|
|
28
|
+
* Used for parsing pagination query parameters.
|
|
29
|
+
*/
|
|
30
|
+
export const paginationQuerySchema = z.object({
|
|
31
|
+
page: z.coerce.number().int().min(1).default(1).describe('Page number'),
|
|
32
|
+
limit: z.coerce.number().int().min(1).max(100).default(20).describe('Items per page'),
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Timestamp metadata schema
|
|
37
|
+
*
|
|
38
|
+
* Common timestamp fields for audit trails.
|
|
39
|
+
*/
|
|
40
|
+
export const timestampSchema = z.object({
|
|
41
|
+
createdAt: z.iso.datetime().describe('ISO 8601 creation timestamp'),
|
|
42
|
+
updatedAt: z.iso.datetime().describe('ISO 8601 last update timestamp'),
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Success response wrapper schema
|
|
47
|
+
*
|
|
48
|
+
* Standard wrapper for successful responses.
|
|
49
|
+
*/
|
|
50
|
+
export const successResponseSchema = z.object({
|
|
51
|
+
success: z.literal(true).describe('Operation success indicator'),
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* TypeScript types inferred from schemas
|
|
56
|
+
*/
|
|
57
|
+
export type Pagination = z.infer<typeof paginationSchema>
|
|
58
|
+
export type PaginationQuery = z.infer<typeof paginationQuerySchema>
|
|
59
|
+
export type Timestamps = z.infer<typeof timestampSchema>
|
|
60
|
+
export type SuccessResponse = z.infer<typeof successResponseSchema>
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Field validation error schema
|
|
12
|
+
*
|
|
13
|
+
* Represents a validation error on a specific field.
|
|
14
|
+
*/
|
|
15
|
+
export const fieldErrorSchema = z.object({
|
|
16
|
+
field: z.string().describe('Field name that failed validation'),
|
|
17
|
+
message: z.string().describe('Human-readable error message'),
|
|
18
|
+
code: z.string().optional().describe('Machine-readable error code'),
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Validation error response schema
|
|
23
|
+
*
|
|
24
|
+
* Used for 400 Bad Request responses with field-level errors.
|
|
25
|
+
*/
|
|
26
|
+
export const validationErrorResponseSchema = z.object({
|
|
27
|
+
success: z.literal(false).describe('Operation failed'),
|
|
28
|
+
message: z.string().describe('General error message'),
|
|
29
|
+
code: z.literal('VALIDATION_ERROR').describe('Error type code'),
|
|
30
|
+
errors: z.array(fieldErrorSchema).describe('List of field-level validation errors'),
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Generic error response schema
|
|
35
|
+
*
|
|
36
|
+
* Used for non-validation errors (401, 403, 404, 500, etc).
|
|
37
|
+
*/
|
|
38
|
+
export const errorResponseSchema = z.object({
|
|
39
|
+
success: z.literal(false).describe('Operation failed'),
|
|
40
|
+
error: z.string().optional().describe('Error type identifier'),
|
|
41
|
+
message: z.string().describe('Human-readable error message'),
|
|
42
|
+
code: z
|
|
43
|
+
.enum([
|
|
44
|
+
'UNAUTHORIZED',
|
|
45
|
+
'FORBIDDEN',
|
|
46
|
+
'NOT_FOUND',
|
|
47
|
+
'VALIDATION_ERROR',
|
|
48
|
+
'CONFLICT',
|
|
49
|
+
'RATE_LIMITED',
|
|
50
|
+
'INTERNAL_ERROR',
|
|
51
|
+
'SERVICE_UNAVAILABLE',
|
|
52
|
+
])
|
|
53
|
+
.describe('Machine-readable error code'),
|
|
54
|
+
details: z.array(z.string()).optional().describe('Optional error details'),
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Better Auth error response schema
|
|
59
|
+
*
|
|
60
|
+
* Better Auth returns errors in this format.
|
|
61
|
+
*/
|
|
62
|
+
export const betterAuthErrorSchema = z.object({
|
|
63
|
+
error: z
|
|
64
|
+
.object({
|
|
65
|
+
message: z.string().describe('Error message'),
|
|
66
|
+
status: z.number().optional().describe('HTTP status code'),
|
|
67
|
+
})
|
|
68
|
+
.describe('Error details'),
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Combined API error schema
|
|
73
|
+
*
|
|
74
|
+
* Union of all possible error response formats.
|
|
75
|
+
*/
|
|
76
|
+
export const apiErrorSchema = z.union([
|
|
77
|
+
validationErrorResponseSchema,
|
|
78
|
+
errorResponseSchema,
|
|
79
|
+
betterAuthErrorSchema,
|
|
80
|
+
])
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* TypeScript types inferred from schemas
|
|
84
|
+
*/
|
|
85
|
+
export type FieldError = z.infer<typeof fieldErrorSchema>
|
|
86
|
+
export type ValidationErrorResponse = z.infer<typeof validationErrorResponseSchema>
|
|
87
|
+
export type ErrorResponse = z.infer<typeof errorResponseSchema>
|
|
88
|
+
export type BetterAuthError = z.infer<typeof betterAuthErrorSchema>
|
|
89
|
+
export type ApiError = z.infer<typeof apiErrorSchema>
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Health check response schema
|
|
12
|
+
*
|
|
13
|
+
* Defines the shape of the health check API response.
|
|
14
|
+
* This schema is shared between:
|
|
15
|
+
* - Regular Hono routes (for runtime validation and RPC typing)
|
|
16
|
+
* - OpenAPI schema generation (for API documentation)
|
|
17
|
+
*/
|
|
18
|
+
export const healthResponseSchema = z.object({
|
|
19
|
+
status: z.literal('ok').describe('Server health status indicator'),
|
|
20
|
+
timestamp: z.iso
|
|
21
|
+
.datetime({
|
|
22
|
+
offset: true,
|
|
23
|
+
precision: 3,
|
|
24
|
+
})
|
|
25
|
+
.describe('ISO 8601 timestamp of the health check'),
|
|
26
|
+
app: z
|
|
27
|
+
.object({
|
|
28
|
+
name: z.string().describe('Application name from configuration'),
|
|
29
|
+
})
|
|
30
|
+
.describe('Application metadata'),
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* TypeScript type inferred from Zod schema
|
|
35
|
+
*
|
|
36
|
+
* Use this type for type-safe health check responses in application code.
|
|
37
|
+
*/
|
|
38
|
+
export type HealthResponse = z.infer<typeof healthResponseSchema>
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* API Schema Exports
|
|
10
|
+
*
|
|
11
|
+
* This module exports all Zod schemas used for API response validation
|
|
12
|
+
* and OpenAPI documentation generation.
|
|
13
|
+
*
|
|
14
|
+
* Schema Organization:
|
|
15
|
+
* - common: Pagination, timestamps, generic responses
|
|
16
|
+
* - error: Error response formats
|
|
17
|
+
* - health: Health check endpoint
|
|
18
|
+
* - auth: Authentication and authorization
|
|
19
|
+
* - tables: Table and record operations
|
|
20
|
+
* - request: Request input validation
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
// Analytics schemas
|
|
24
|
+
export * from './analytics'
|
|
25
|
+
|
|
26
|
+
// Common schemas
|
|
27
|
+
export * from './common'
|
|
28
|
+
|
|
29
|
+
// Error schemas
|
|
30
|
+
export * from './error'
|
|
31
|
+
|
|
32
|
+
// Health check schemas
|
|
33
|
+
export * from './health'
|
|
34
|
+
|
|
35
|
+
// Authentication schemas
|
|
36
|
+
export * from './auth'
|
|
37
|
+
|
|
38
|
+
// Table and record schemas
|
|
39
|
+
export * from './tables'
|
|
40
|
+
|
|
41
|
+
// Request schemas (input validation)
|
|
42
|
+
export * from './request'
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025 ESSENTIAL SERVICES
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the Business Source License 1.1
|
|
5
|
+
* found in the LICENSE.md file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { z } from 'zod'
|
|
9
|
+
import { fieldValueSchema } from './tables'
|
|
10
|
+
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Record Request Schemas
|
|
13
|
+
// ============================================================================
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Create record request schema
|
|
17
|
+
*
|
|
18
|
+
* Validates the request body for creating a single record.
|
|
19
|
+
* Requires nested format: { fields: {...} }
|
|
20
|
+
*/
|
|
21
|
+
export const createRecordRequestSchema = z.object({
|
|
22
|
+
fields: z.record(z.string(), fieldValueSchema).optional().default({}),
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Update record request schema
|
|
27
|
+
*
|
|
28
|
+
* Validates the request body for updating a record.
|
|
29
|
+
* Requires nested format: { fields: {...} }
|
|
30
|
+
*/
|
|
31
|
+
export const updateRecordRequestSchema = z.object({
|
|
32
|
+
fields: z.record(z.string(), fieldValueSchema).optional().default({}),
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// Batch Operation Request Schemas
|
|
37
|
+
// ============================================================================
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Batch create records request schema
|
|
41
|
+
*
|
|
42
|
+
* Requires nested format: { fields: {...} } (Airtable style)
|
|
43
|
+
*/
|
|
44
|
+
export const batchCreateRecordsRequestSchema = z.object({
|
|
45
|
+
records: z
|
|
46
|
+
.array(
|
|
47
|
+
z.object({
|
|
48
|
+
fields: z.record(z.string(), fieldValueSchema).optional().default({}),
|
|
49
|
+
})
|
|
50
|
+
)
|
|
51
|
+
.min(1, 'At least one record is required')
|
|
52
|
+
.max(1000, 'Maximum 1000 records per batch'),
|
|
53
|
+
returnRecords: z.boolean().optional().default(false),
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Batch update records request schema
|
|
58
|
+
*
|
|
59
|
+
* Requires nested format: { id: string, fields: {...} }
|
|
60
|
+
*/
|
|
61
|
+
export const batchUpdateRecordsRequestSchema = z.object({
|
|
62
|
+
records: z
|
|
63
|
+
.array(
|
|
64
|
+
z.object({
|
|
65
|
+
id: z
|
|
66
|
+
.union([z.string().min(1, 'Record ID is required'), z.number()])
|
|
67
|
+
.transform((val) => String(val)),
|
|
68
|
+
fields: z.record(z.string(), fieldValueSchema).optional().default({}),
|
|
69
|
+
})
|
|
70
|
+
)
|
|
71
|
+
.min(1, 'At least one record is required')
|
|
72
|
+
.max(100, 'Maximum 100 records per batch'),
|
|
73
|
+
returnRecords: z.boolean().optional().default(false),
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Batch delete records request schema
|
|
78
|
+
*/
|
|
79
|
+
export const batchDeleteRecordsRequestSchema = z.object({
|
|
80
|
+
ids: z
|
|
81
|
+
.array(
|
|
82
|
+
z
|
|
83
|
+
.union([z.string().min(1, 'Record ID cannot be empty'), z.number()])
|
|
84
|
+
.transform((val) => String(val))
|
|
85
|
+
)
|
|
86
|
+
.min(1, 'At least one ID is required')
|
|
87
|
+
.max(100, 'Maximum 100 IDs per batch'),
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Batch restore records request schema
|
|
92
|
+
*/
|
|
93
|
+
export const batchRestoreRecordsRequestSchema = z.object({
|
|
94
|
+
ids: z
|
|
95
|
+
.array(
|
|
96
|
+
z
|
|
97
|
+
.union([z.string().min(1, 'Record ID cannot be empty'), z.number()])
|
|
98
|
+
.transform((val) => String(val))
|
|
99
|
+
)
|
|
100
|
+
.min(1, 'At least one ID is required')
|
|
101
|
+
.max(100, 'Maximum 100 IDs per batch'),
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Upsert records request schema
|
|
106
|
+
*
|
|
107
|
+
* Requires nested format: { fields: {...} }
|
|
108
|
+
*/
|
|
109
|
+
export const upsertRecordsRequestSchema = z.object({
|
|
110
|
+
records: z
|
|
111
|
+
.array(
|
|
112
|
+
z.object({
|
|
113
|
+
fields: z.record(z.string(), fieldValueSchema).optional().default({}),
|
|
114
|
+
})
|
|
115
|
+
)
|
|
116
|
+
.min(1, 'At least one record is required')
|
|
117
|
+
.max(100, 'Maximum 100 records per batch'),
|
|
118
|
+
fieldsToMergeOn: z.array(z.string()).min(1, 'At least one merge field is required'),
|
|
119
|
+
returnRecords: z.boolean().optional().default(false),
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
// ============================================================================
|
|
123
|
+
// TypeScript Types
|
|
124
|
+
// ============================================================================
|
|
125
|
+
|
|
126
|
+
export type CreateRecordRequest = z.infer<typeof createRecordRequestSchema>
|
|
127
|
+
export type UpdateRecordRequest = z.infer<typeof updateRecordRequestSchema>
|
|
128
|
+
export type BatchCreateRecordsRequest = z.infer<typeof batchCreateRecordsRequestSchema>
|
|
129
|
+
export type BatchUpdateRecordsRequest = z.infer<typeof batchUpdateRecordsRequestSchema>
|
|
130
|
+
export type BatchDeleteRecordsRequest = z.infer<typeof batchDeleteRecordsRequestSchema>
|
|
131
|
+
export type BatchRestoreRecordsRequest = z.infer<typeof batchRestoreRecordsRequestSchema>
|
|
132
|
+
export type UpsertRecordsRequest = z.infer<typeof upsertRecordsRequestSchema>
|