@c15t/backend 0.0.1-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +11 -0
- package/.turbo/turbo-check-types.log +5 -0
- package/.turbo/turbo-fmt.log +7 -0
- package/.turbo/turbo-lint.log +6 -0
- package/.turbo/turbo-test.log +26 -0
- package/README-next.md +223 -0
- package/README.md +164 -0
- package/dist/api/call.d.ts +176 -0
- package/dist/api/call.d.ts.map +1 -0
- package/dist/api/index.d.ts +935 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/middlewares/index.d.ts +39 -0
- package/dist/api/middlewares/index.d.ts.map +1 -0
- package/dist/api/middlewares/origin-check.d.ts +82 -0
- package/dist/api/middlewares/origin-check.d.ts.map +1 -0
- package/dist/api/middlewares/validate-context.d.ts +38 -0
- package/dist/api/middlewares/validate-context.d.ts.map +1 -0
- package/dist/api/routes/__tests__/consent.test.d.ts +2 -0
- package/dist/api/routes/__tests__/consent.test.d.ts.map +1 -0
- package/dist/api/routes/__tests__/status.test.d.ts +2 -0
- package/dist/api/routes/__tests__/status.test.d.ts.map +1 -0
- package/dist/api/routes/error.d.ts +57 -0
- package/dist/api/routes/error.d.ts.map +1 -0
- package/dist/api/routes/generate-consent-receipt.d.ts +130 -0
- package/dist/api/routes/generate-consent-receipt.d.ts.map +1 -0
- package/dist/api/routes/get-consent-history.d.ts +133 -0
- package/dist/api/routes/get-consent-history.d.ts.map +1 -0
- package/dist/api/routes/get-consent-policy.d.ts +164 -0
- package/dist/api/routes/get-consent-policy.d.ts.map +1 -0
- package/dist/api/routes/get-consent.d.ts +148 -0
- package/dist/api/routes/get-consent.d.ts.map +1 -0
- package/dist/api/routes/index.d.ts +339 -0
- package/dist/api/routes/index.d.ts.map +1 -0
- package/dist/api/routes/ok.d.ts +87 -0
- package/dist/api/routes/ok.d.ts.map +1 -0
- package/dist/api/routes/set-consent.d.ts +245 -0
- package/dist/api/routes/set-consent.d.ts.map +1 -0
- package/dist/api/routes/show-consent-banner.d.ts +127 -0
- package/dist/api/routes/show-consent-banner.d.ts.map +1 -0
- package/dist/api/routes/status.d.ts +61 -0
- package/dist/api/routes/status.d.ts.map +1 -0
- package/dist/api/routes/verify-consent.d.ts +179 -0
- package/dist/api/routes/verify-consent.d.ts.map +1 -0
- package/dist/api/routes/withdraw-consent.d.ts +194 -0
- package/dist/api/routes/withdraw-consent.d.ts.map +1 -0
- package/dist/api/to-endpoints.d.ts +35 -0
- package/dist/api/to-endpoints.d.ts.map +1 -0
- package/dist/client/index.cjs +139 -0
- package/dist/client/index.d.ts +203 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +106 -0
- package/dist/client/types.d.ts +431 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/core.d.ts +124 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.test.d.ts +2 -0
- package/dist/core.test.d.ts.map +1 -0
- package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts +122 -0
- package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts.map +1 -0
- package/dist/db/adapters/drizzle-adapter/index.d.ts +2 -0
- package/dist/db/adapters/drizzle-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/drizzle.cjs +1531 -0
- package/dist/db/adapters/drizzle.js +1489 -0
- package/dist/db/adapters/kysely-adapter/dialect.d.ts +72 -0
- package/dist/db/adapters/kysely-adapter/dialect.d.ts.map +1 -0
- package/dist/db/adapters/kysely-adapter/index.d.ts +4 -0
- package/dist/db/adapters/kysely-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts +98 -0
- package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts.map +1 -0
- package/dist/db/adapters/kysely-adapter/types.d.ts +281 -0
- package/dist/db/adapters/kysely-adapter/types.d.ts.map +1 -0
- package/dist/db/adapters/kysely.cjs +1551 -0
- package/dist/db/adapters/kysely.js +1508 -0
- package/dist/db/adapters/memory-adapter/index.d.ts +2 -0
- package/dist/db/adapters/memory-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/memory-adapter/memory-adapter.d.ts +56 -0
- package/dist/db/adapters/memory-adapter/memory-adapter.d.ts.map +1 -0
- package/dist/db/adapters/memory.cjs +1391 -0
- package/dist/db/adapters/memory.js +1349 -0
- package/dist/db/adapters/prisma-adapter/index.d.ts +2 -0
- package/dist/db/adapters/prisma-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts +143 -0
- package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts.map +1 -0
- package/dist/db/adapters/prisma.cjs +1503 -0
- package/dist/db/adapters/prisma.js +1461 -0
- package/dist/db/adapters/types.d.ts +154 -0
- package/dist/db/adapters/types.d.ts.map +1 -0
- package/dist/db/adapters/utils.d.ts +36 -0
- package/dist/db/adapters/utils.d.ts.map +1 -0
- package/dist/db/core/fields/field-factory.d.ts +383 -0
- package/dist/db/core/fields/field-factory.d.ts.map +1 -0
- package/dist/db/core/fields/field-inference.d.ts +218 -0
- package/dist/db/core/fields/field-inference.d.ts.map +1 -0
- package/dist/db/core/fields/field-options-integration.d.ts +90 -0
- package/dist/db/core/fields/field-options-integration.d.ts.map +1 -0
- package/dist/db/core/fields/field-types.d.ts +182 -0
- package/dist/db/core/fields/field-types.d.ts.map +1 -0
- package/dist/db/core/fields/id-generator.d.ts +19 -0
- package/dist/db/core/fields/id-generator.d.ts.map +1 -0
- package/dist/db/core/fields/index.d.ts +8 -0
- package/dist/db/core/fields/index.d.ts.map +1 -0
- package/dist/db/core/fields/superjson-utils.d.ts +34 -0
- package/dist/db/core/fields/superjson-utils.d.ts.map +1 -0
- package/dist/db/core/fields/zod-fields.d.ts +1011 -0
- package/dist/db/core/fields/zod-fields.d.ts.map +1 -0
- package/dist/db/core/get-schema.d.ts +36 -0
- package/dist/db/core/get-schema.d.ts.map +1 -0
- package/dist/db/core/types.d.ts +41 -0
- package/dist/db/core/types.d.ts.map +1 -0
- package/dist/db/create-registry.d.ts +760 -0
- package/dist/db/create-registry.d.ts.map +1 -0
- package/dist/db/hooks/create-hooks.d.ts +32 -0
- package/dist/db/hooks/create-hooks.d.ts.map +1 -0
- package/dist/db/hooks/index.d.ts +40 -0
- package/dist/db/hooks/index.d.ts.map +1 -0
- package/dist/db/hooks/types.d.ts +133 -0
- package/dist/db/hooks/types.d.ts.map +1 -0
- package/dist/db/hooks/update-hooks.d.ts +33 -0
- package/dist/db/hooks/update-hooks.d.ts.map +1 -0
- package/dist/db/hooks/update-many-hooks.d.ts +55 -0
- package/dist/db/hooks/update-many-hooks.d.ts.map +1 -0
- package/dist/db/hooks/utils.d.ts +62 -0
- package/dist/db/hooks/utils.d.ts.map +1 -0
- package/dist/db/hooks/with-hooks-factory.d.ts +33 -0
- package/dist/db/hooks/with-hooks-factory.d.ts.map +1 -0
- package/dist/db/index.cjs +2458 -0
- package/dist/db/index.d.ts +11 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +2404 -0
- package/dist/db/migration/get-migration.d.ts +32 -0
- package/dist/db/migration/get-migration.d.ts.map +1 -0
- package/dist/db/migration/get-schema/get-schema.d.ts +27 -0
- package/dist/db/migration/get-schema/get-schema.d.ts.map +1 -0
- package/dist/db/migration/get-schema/index.d.ts +21 -0
- package/dist/db/migration/get-schema/index.d.ts.map +1 -0
- package/dist/db/migration/get-schema/process-fields.d.ts +16 -0
- package/dist/db/migration/get-schema/process-fields.d.ts.map +1 -0
- package/dist/db/migration/get-schema/process-tables.d.ts +13 -0
- package/dist/db/migration/get-schema/process-tables.d.ts.map +1 -0
- package/dist/db/migration/get-schema/types.d.ts +17 -0
- package/dist/db/migration/get-schema/types.d.ts.map +1 -0
- package/dist/db/migration/index.cjs +1613 -0
- package/dist/db/migration/index.d.ts +14 -0
- package/dist/db/migration/index.d.ts.map +1 -0
- package/dist/db/migration/index.js +1571 -0
- package/dist/db/migration/migration-builders.d.ts +28 -0
- package/dist/db/migration/migration-builders.d.ts.map +1 -0
- package/dist/db/migration/migration-execution.d.ts +12 -0
- package/dist/db/migration/migration-execution.d.ts.map +1 -0
- package/dist/db/migration/schema-comparison.d.ts +54 -0
- package/dist/db/migration/schema-comparison.d.ts.map +1 -0
- package/dist/db/migration/type-mapping.d.ts +86 -0
- package/dist/db/migration/type-mapping.d.ts.map +1 -0
- package/dist/db/migration/types.d.ts +37 -0
- package/dist/db/migration/types.d.ts.map +1 -0
- package/dist/db/schema/audit-log/index.d.ts +4 -0
- package/dist/db/schema/audit-log/index.d.ts.map +1 -0
- package/dist/db/schema/audit-log/registry.d.ts +128 -0
- package/dist/db/schema/audit-log/registry.d.ts.map +1 -0
- package/dist/db/schema/audit-log/schema.d.ts +67 -0
- package/dist/db/schema/audit-log/schema.d.ts.map +1 -0
- package/dist/db/schema/audit-log/table.d.ts +175 -0
- package/dist/db/schema/audit-log/table.d.ts.map +1 -0
- package/dist/db/schema/audit-log/types.d.ts +29 -0
- package/dist/db/schema/audit-log/types.d.ts.map +1 -0
- package/dist/db/schema/consent/index.d.ts +4 -0
- package/dist/db/schema/consent/index.d.ts.map +1 -0
- package/dist/db/schema/consent/registry.d.ts +318 -0
- package/dist/db/schema/consent/registry.d.ts.map +1 -0
- package/dist/db/schema/consent/schema.d.ts +135 -0
- package/dist/db/schema/consent/schema.d.ts.map +1 -0
- package/dist/db/schema/consent/table.d.ts +245 -0
- package/dist/db/schema/consent/table.d.ts.map +1 -0
- package/dist/db/schema/consent/types.d.ts +37 -0
- package/dist/db/schema/consent/types.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/index.d.ts +4 -0
- package/dist/db/schema/consent-geo-location/index.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/registry.d.ts +96 -0
- package/dist/db/schema/consent-geo-location/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/schema.d.ts +71 -0
- package/dist/db/schema/consent-geo-location/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/table.d.ts +167 -0
- package/dist/db/schema/consent-geo-location/table.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/types.d.ts +21 -0
- package/dist/db/schema/consent-geo-location/types.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/index.d.ts +4 -0
- package/dist/db/schema/consent-policy/index.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/registry.d.ts +186 -0
- package/dist/db/schema/consent-policy/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/schema.d.ts +68 -0
- package/dist/db/schema/consent-policy/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/table.d.ts +147 -0
- package/dist/db/schema/consent-policy/table.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/types.d.ts +28 -0
- package/dist/db/schema/consent-policy/types.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/index.d.ts +4 -0
- package/dist/db/schema/consent-purpose/index.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/registry.d.ts +136 -0
- package/dist/db/schema/consent-purpose/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/schema.d.ts +79 -0
- package/dist/db/schema/consent-purpose/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/table.d.ts +161 -0
- package/dist/db/schema/consent-purpose/table.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/types.d.ts +16 -0
- package/dist/db/schema/consent-purpose/types.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/index.d.ts +4 -0
- package/dist/db/schema/consent-purpose-junction/index.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/registry.d.ts +109 -0
- package/dist/db/schema/consent-purpose-junction/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/schema.d.ts +57 -0
- package/dist/db/schema/consent-purpose-junction/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/table.d.ts +138 -0
- package/dist/db/schema/consent-purpose-junction/table.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/types.d.ts +14 -0
- package/dist/db/schema/consent-purpose-junction/types.d.ts.map +1 -0
- package/dist/db/schema/consent-record/index.d.ts +4 -0
- package/dist/db/schema/consent-record/index.d.ts.map +1 -0
- package/dist/db/schema/consent-record/registry.d.ts +119 -0
- package/dist/db/schema/consent-record/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-record/schema.d.ts +57 -0
- package/dist/db/schema/consent-record/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-record/table.d.ts +123 -0
- package/dist/db/schema/consent-record/table.d.ts.map +1 -0
- package/dist/db/schema/consent-record/types.d.ts +21 -0
- package/dist/db/schema/consent-record/types.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/index.d.ts +4 -0
- package/dist/db/schema/consent-withdrawal/index.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/registry.d.ts +134 -0
- package/dist/db/schema/consent-withdrawal/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/schema.d.ts +67 -0
- package/dist/db/schema/consent-withdrawal/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/table.d.ts +170 -0
- package/dist/db/schema/consent-withdrawal/table.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/types.d.ts +28 -0
- package/dist/db/schema/consent-withdrawal/types.d.ts.map +1 -0
- package/dist/db/schema/definition.d.ts +1100 -0
- package/dist/db/schema/definition.d.ts.map +1 -0
- package/dist/db/schema/domain/index.d.ts +4 -0
- package/dist/db/schema/domain/index.d.ts.map +1 -0
- package/dist/db/schema/domain/registry.d.ts +169 -0
- package/dist/db/schema/domain/registry.d.ts.map +1 -0
- package/dist/db/schema/domain/schema.d.ts +60 -0
- package/dist/db/schema/domain/schema.d.ts.map +1 -0
- package/dist/db/schema/domain/table.d.ts +140 -0
- package/dist/db/schema/domain/table.d.ts.map +1 -0
- package/dist/db/schema/domain/types.d.ts +27 -0
- package/dist/db/schema/domain/types.d.ts.map +1 -0
- package/dist/db/schema/geo-location/index.d.ts +4 -0
- package/dist/db/schema/geo-location/index.d.ts.map +1 -0
- package/dist/db/schema/geo-location/registry.d.ts +114 -0
- package/dist/db/schema/geo-location/registry.d.ts.map +1 -0
- package/dist/db/schema/geo-location/schema.d.ts +58 -0
- package/dist/db/schema/geo-location/schema.d.ts.map +1 -0
- package/dist/db/schema/geo-location/table.d.ts +132 -0
- package/dist/db/schema/geo-location/table.d.ts.map +1 -0
- package/dist/db/schema/geo-location/types.d.ts +17 -0
- package/dist/db/schema/geo-location/types.d.ts.map +1 -0
- package/dist/db/schema/index.d.ts +85 -0
- package/dist/db/schema/index.d.ts.map +1 -0
- package/dist/db/schema/parser.d.ts +183 -0
- package/dist/db/schema/parser.d.ts.map +1 -0
- package/dist/db/schema/schemas.d.ts +383 -0
- package/dist/db/schema/schemas.d.ts.map +1 -0
- package/dist/db/schema/subject/index.d.ts +4 -0
- package/dist/db/schema/subject/index.d.ts.map +1 -0
- package/dist/db/schema/subject/registry.d.ts +141 -0
- package/dist/db/schema/subject/registry.d.ts.map +1 -0
- package/dist/db/schema/subject/schema.d.ts +56 -0
- package/dist/db/schema/subject/schema.d.ts.map +1 -0
- package/dist/db/schema/subject/table.d.ts +136 -0
- package/dist/db/schema/subject/table.d.ts.map +1 -0
- package/dist/db/schema/subject/types.d.ts +22 -0
- package/dist/db/schema/subject/types.d.ts.map +1 -0
- package/dist/db/schema/types.d.ts +136 -0
- package/dist/db/schema/types.d.ts.map +1 -0
- package/dist/db/utils/adapter-factory.d.ts +21 -0
- package/dist/db/utils/adapter-factory.d.ts.map +1 -0
- package/dist/db/utils/index.d.ts +10 -0
- package/dist/db/utils/index.d.ts.map +1 -0
- package/dist/db/utils.d.ts +4 -0
- package/dist/db/utils.d.ts.map +1 -0
- package/dist/error/codes.cjs +68 -0
- package/dist/error/codes.d.ts +175 -0
- package/dist/error/codes.d.ts.map +1 -0
- package/dist/error/codes.js +35 -0
- package/dist/error/error.d.ts +79 -0
- package/dist/error/error.d.ts.map +1 -0
- package/dist/error/index.cjs +172 -0
- package/dist/error/index.d.ts +9 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +129 -0
- package/dist/error/logging.d.ts +25 -0
- package/dist/error/logging.d.ts.map +1 -0
- package/dist/error/pipeline.d.ts +19 -0
- package/dist/error/pipeline.d.ts.map +1 -0
- package/dist/error/recovery.d.ts +22 -0
- package/dist/error/recovery.d.ts.map +1 -0
- package/dist/error/results.d.ts +56 -0
- package/dist/error/results.d.ts.map +1 -0
- package/dist/index.cjs +4777 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4708 -0
- package/dist/init.d.ts +52 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.test.d.ts +2 -0
- package/dist/init.test.d.ts.map +1 -0
- package/dist/integrations/index.cjs +281 -0
- package/dist/integrations/index.d.ts +7 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +248 -0
- package/dist/integrations/next.cjs +131 -0
- package/dist/integrations/next.d.ts +29 -0
- package/dist/integrations/next.d.ts.map +1 -0
- package/dist/integrations/next.js +99 -0
- package/dist/integrations/react.cjs +182 -0
- package/dist/integrations/react.d.ts +257 -0
- package/dist/integrations/react.d.ts.map +1 -0
- package/dist/integrations/react.js +150 -0
- package/dist/plugins/geo/index.d.ts +2 -0
- package/dist/plugins/geo/index.d.ts.map +1 -0
- package/dist/test/utils.d.ts +65 -0
- package/dist/test/utils.d.ts.map +1 -0
- package/dist/types/api.d.ts +89 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/context.d.ts +205 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/helper.d.ts +78 -0
- package/dist/types/helper.d.ts.map +1 -0
- package/dist/types/index.cjs +19 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +0 -0
- package/dist/types/options.d.ts +172 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/plugins.d.ts +442 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/utils/env.d.ts +77 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/hide-metadata.d.ts +22 -0
- package/dist/utils/hide-metadata.d.ts.map +1 -0
- package/dist/utils/index.cjs +268 -0
- package/dist/utils/index.d.ts +18 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +210 -0
- package/dist/utils/ip.d.ts +10 -0
- package/dist/utils/ip.d.ts.map +1 -0
- package/dist/utils/json.d.ts +14 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +108 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/url.d.ts +87 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/wildcard.d.ts +46 -0
- package/dist/utils/wildcard.d.ts.map +1 -0
- package/knip.json +37 -0
- package/package.json +146 -0
- package/rslib.config.ts +104 -0
- package/src/api/call.ts +177 -0
- package/src/api/index.ts +303 -0
- package/src/api/middlewares/index.ts +38 -0
- package/src/api/middlewares/origin-check.ts +260 -0
- package/src/api/middlewares/validate-context.ts +175 -0
- package/src/api/routes/__tests__/consent.test.ts +270 -0
- package/src/api/routes/__tests__/status.test.ts +36 -0
- package/src/api/routes/error.ts +130 -0
- package/src/api/routes/generate-consent-receipt.ts +244 -0
- package/src/api/routes/get-consent-history.ts +128 -0
- package/src/api/routes/get-consent-policy.ts +327 -0
- package/src/api/routes/get-consent.ts +230 -0
- package/src/api/routes/index.ts +12 -0
- package/src/api/routes/ok.ts +45 -0
- package/src/api/routes/set-consent.ts +328 -0
- package/src/api/routes/show-consent-banner.ts +149 -0
- package/src/api/routes/status.ts +62 -0
- package/src/api/routes/verify-consent.ts +272 -0
- package/src/api/routes/withdraw-consent.ts +293 -0
- package/src/api/to-endpoints.ts +371 -0
- package/src/client/index.ts +471 -0
- package/src/client/types.ts +458 -0
- package/src/core.test.ts +303 -0
- package/src/core.ts +267 -0
- package/src/db/adapters/drizzle-adapter/drizzle-adapter.ts +711 -0
- package/src/db/adapters/drizzle-adapter/index.ts +1 -0
- package/src/db/adapters/kysely-adapter/dialect.ts +192 -0
- package/src/db/adapters/kysely-adapter/index.ts +3 -0
- package/src/db/adapters/kysely-adapter/kysely-adapter.ts +1168 -0
- package/src/db/adapters/kysely-adapter/types.ts +307 -0
- package/src/db/adapters/memory-adapter/index.ts +1 -0
- package/src/db/adapters/memory-adapter/memory-adapter.ts +648 -0
- package/src/db/adapters/prisma-adapter/index.ts +1 -0
- package/src/db/adapters/prisma-adapter/prisma-adapter.ts +586 -0
- package/src/db/adapters/types.ts +203 -0
- package/src/db/adapters/utils.ts +51 -0
- package/src/db/core/fields/field-factory.ts +804 -0
- package/src/db/core/fields/field-inference.ts +298 -0
- package/src/db/core/fields/field-options-integration.ts +135 -0
- package/src/db/core/fields/field-types.ts +233 -0
- package/src/db/core/fields/id-generator.ts +57 -0
- package/src/db/core/fields/index.ts +56 -0
- package/src/db/core/fields/superjson-utils.ts +155 -0
- package/src/db/core/fields/zod-fields.ts +269 -0
- package/src/db/core/get-schema.ts +102 -0
- package/src/db/core/types.ts +52 -0
- package/src/db/create-registry.ts +31 -0
- package/src/db/hooks/create-hooks.ts +88 -0
- package/src/db/hooks/index.ts +39 -0
- package/src/db/hooks/types.ts +164 -0
- package/src/db/hooks/update-hooks.ts +91 -0
- package/src/db/hooks/update-many-hooks.ts +176 -0
- package/src/db/hooks/utils.ts +151 -0
- package/src/db/hooks/with-hooks-factory.ts +68 -0
- package/src/db/index.ts +32 -0
- package/src/db/migration/get-migration.ts +89 -0
- package/src/db/migration/get-schema/get-schema.ts +44 -0
- package/src/db/migration/get-schema/index.ts +20 -0
- package/src/db/migration/get-schema/process-fields.ts +66 -0
- package/src/db/migration/get-schema/process-tables.ts +68 -0
- package/src/db/migration/get-schema/types.ts +18 -0
- package/src/db/migration/index.ts +18 -0
- package/src/db/migration/migration-builders.ts +170 -0
- package/src/db/migration/migration-execution.ts +79 -0
- package/src/db/migration/schema-comparison.ts +216 -0
- package/src/db/migration/type-mapping.ts +255 -0
- package/src/db/migration/types.ts +46 -0
- package/src/db/schema/audit-log/index.ts +3 -0
- package/src/db/schema/audit-log/registry.ts +228 -0
- package/src/db/schema/audit-log/schema.ts +46 -0
- package/src/db/schema/audit-log/table.ts +185 -0
- package/src/db/schema/audit-log/types.ts +29 -0
- package/src/db/schema/consent/index.ts +3 -0
- package/src/db/schema/consent/registry.ts +381 -0
- package/src/db/schema/consent/schema.ts +65 -0
- package/src/db/schema/consent/table.ts +220 -0
- package/src/db/schema/consent/types.ts +39 -0
- package/src/db/schema/consent-geo-location/index.ts +3 -0
- package/src/db/schema/consent-geo-location/registry.ts +124 -0
- package/src/db/schema/consent-geo-location/schema.ts +51 -0
- package/src/db/schema/consent-geo-location/table.ts +169 -0
- package/src/db/schema/consent-geo-location/types.ts +21 -0
- package/src/db/schema/consent-policy/index.ts +3 -0
- package/src/db/schema/consent-policy/registry.ts +313 -0
- package/src/db/schema/consent-policy/schema.ts +47 -0
- package/src/db/schema/consent-policy/table.ts +141 -0
- package/src/db/schema/consent-policy/types.ts +28 -0
- package/src/db/schema/consent-purpose/index.ts +3 -0
- package/src/db/schema/consent-purpose/registry.ts +188 -0
- package/src/db/schema/consent-purpose/schema.ts +58 -0
- package/src/db/schema/consent-purpose/table.ts +154 -0
- package/src/db/schema/consent-purpose/types.ts +16 -0
- package/src/db/schema/consent-purpose-junction/index.ts +3 -0
- package/src/db/schema/consent-purpose-junction/registry.ts +189 -0
- package/src/db/schema/consent-purpose-junction/schema.ts +49 -0
- package/src/db/schema/consent-purpose-junction/table.ts +142 -0
- package/src/db/schema/consent-purpose-junction/types.ts +14 -0
- package/src/db/schema/consent-record/index.ts +3 -0
- package/src/db/schema/consent-record/registry.ts +209 -0
- package/src/db/schema/consent-record/schema.ts +42 -0
- package/src/db/schema/consent-record/table.ts +124 -0
- package/src/db/schema/consent-record/types.ts +21 -0
- package/src/db/schema/consent-withdrawal/index.ts +3 -0
- package/src/db/schema/consent-withdrawal/registry.ts +219 -0
- package/src/db/schema/consent-withdrawal/schema.ts +48 -0
- package/src/db/schema/consent-withdrawal/table.ts +181 -0
- package/src/db/schema/consent-withdrawal/types.ts +29 -0
- package/src/db/schema/definition.ts +196 -0
- package/src/db/schema/domain/index.ts +3 -0
- package/src/db/schema/domain/registry.ts +272 -0
- package/src/db/schema/domain/schema.ts +43 -0
- package/src/db/schema/domain/table.ts +137 -0
- package/src/db/schema/domain/types.ts +27 -0
- package/src/db/schema/geo-location/index.ts +3 -0
- package/src/db/schema/geo-location/registry.ts +159 -0
- package/src/db/schema/geo-location/schema.ts +45 -0
- package/src/db/schema/geo-location/table.ts +148 -0
- package/src/db/schema/geo-location/types.ts +18 -0
- package/src/db/schema/index.ts +96 -0
- package/src/db/schema/parser.ts +417 -0
- package/src/db/schema/schemas.ts +35 -0
- package/src/db/schema/subject/index.ts +3 -0
- package/src/db/schema/subject/registry.ts +371 -0
- package/src/db/schema/subject/schema.ts +41 -0
- package/src/db/schema/subject/table.ts +139 -0
- package/src/db/schema/subject/types.ts +22 -0
- package/src/db/schema/types.ts +154 -0
- package/src/db/utils/adapter-factory.ts +64 -0
- package/src/db/utils/index.ts +10 -0
- package/src/db/utils.ts +42 -0
- package/src/docs/ADVANCED_JSON_HANDLING.md +99 -0
- package/src/docs/neverthrow.md +171 -0
- package/src/error/codes.ts +201 -0
- package/src/error/error.ts +145 -0
- package/src/error/index.ts +23 -0
- package/src/error/logging.ts +52 -0
- package/src/error/pipeline.ts +57 -0
- package/src/error/recovery.ts +45 -0
- package/src/error/results.ts +100 -0
- package/src/index.ts +79 -0
- package/src/init.test.ts +235 -0
- package/src/init.ts +261 -0
- package/src/integrations/index.ts +10 -0
- package/src/integrations/next.ts +136 -0
- package/src/integrations/react.ts +567 -0
- package/src/plugins/geo/index.ts +563 -0
- package/src/test/utils.ts +244 -0
- package/src/types/api.ts +101 -0
- package/src/types/context.ts +235 -0
- package/src/types/helper.ts +87 -0
- package/src/types/index.ts +5 -0
- package/src/types/options.ts +189 -0
- package/src/types/plugins.ts +538 -0
- package/src/utils/env.ts +103 -0
- package/src/utils/hide-metadata.ts +21 -0
- package/src/utils/index.ts +17 -0
- package/src/utils/ip.ts +45 -0
- package/src/utils/json.ts +19 -0
- package/src/utils/logger.ts +252 -0
- package/src/utils/url.ts +194 -0
- package/src/utils/wildcard.ts +253 -0
- package/tsconfig.json +12 -0
- package/vitest.config.ts +14 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
import type { Where } from '~/db/adapters/types';
|
|
2
|
+
import { getWithHooks } from '~/db/hooks';
|
|
3
|
+
import { BASE_ERROR_CODES, C15TError } from '~/error';
|
|
4
|
+
import type { GenericEndpointContext, RegistryContext } from '~/types';
|
|
5
|
+
import { validateEntityOutput } from '../definition';
|
|
6
|
+
import type { Domain } from './schema';
|
|
7
|
+
|
|
8
|
+
export interface FindDomainParams {
|
|
9
|
+
name?: string;
|
|
10
|
+
includeInactive?: boolean;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Creates and returns a set of domain-related adapter methods to interact with the database.
|
|
15
|
+
* These methods provide a consistent interface for creating, finding, and updating
|
|
16
|
+
* domain records while applying hooks and enforcing data validation rules.
|
|
17
|
+
*
|
|
18
|
+
* @param adapter - The database adapter used for direct database operations
|
|
19
|
+
* @param ctx - The context object containing the database adapter, hooks, and options
|
|
20
|
+
* @returns An object containing type-safe domain operations
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const domainAdapter = createDomainAdapter(
|
|
25
|
+
* databaseAdapter,
|
|
26
|
+
* createWithHooks,
|
|
27
|
+
* updateWithHooks,
|
|
28
|
+
* c15tOptions
|
|
29
|
+
* );
|
|
30
|
+
*
|
|
31
|
+
* // Create a new domain
|
|
32
|
+
* const domain = await domainAdapter.createDomain({
|
|
33
|
+
* name: 'example.com',
|
|
34
|
+
* description: 'Example company website',
|
|
35
|
+
* isVerified: true
|
|
36
|
+
* });
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export function domainRegistry({ adapter, ...ctx }: RegistryContext) {
|
|
40
|
+
const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
|
|
41
|
+
const registry = {
|
|
42
|
+
/**
|
|
43
|
+
* Creates a new domain record in the database.
|
|
44
|
+
* Automatically sets creation timestamp and applies any
|
|
45
|
+
* configured hooks during the creation process.
|
|
46
|
+
*
|
|
47
|
+
* @param domain - Domain data to create (without id and timestamp)
|
|
48
|
+
* @param context - Optional endpoint context for hooks
|
|
49
|
+
* @returns The created domain with all fields populated
|
|
50
|
+
* @throws May throw an error if hooks prevent creation or if database operations fail
|
|
51
|
+
*/
|
|
52
|
+
createDomain: async (
|
|
53
|
+
domain: Omit<Domain, 'id' | 'createdAt' | 'updatedAt'> & Partial<Domain>,
|
|
54
|
+
context?: GenericEndpointContext
|
|
55
|
+
) => {
|
|
56
|
+
const createdDomain = await createWithHooks({
|
|
57
|
+
data: {
|
|
58
|
+
...domain,
|
|
59
|
+
createdAt: new Date(),
|
|
60
|
+
updatedAt: new Date(),
|
|
61
|
+
},
|
|
62
|
+
model: 'domain',
|
|
63
|
+
customFn: undefined,
|
|
64
|
+
context,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
if (!createdDomain) {
|
|
68
|
+
throw new Error('Failed to create domain - operation returned null');
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return createdDomain as Domain;
|
|
72
|
+
},
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Finds an existing domain or creates a new one if needed.
|
|
76
|
+
*
|
|
77
|
+
* @param name - The domain name to find or create
|
|
78
|
+
* @param context - Optional endpoint context for hooks
|
|
79
|
+
* @returns The existing or newly created domain
|
|
80
|
+
* @throws APIError if domain creation fails
|
|
81
|
+
*/
|
|
82
|
+
findOrCreateDomain: async function (
|
|
83
|
+
name: string,
|
|
84
|
+
context?: GenericEndpointContext
|
|
85
|
+
) {
|
|
86
|
+
// Try to find existing domain
|
|
87
|
+
const existingDomain = await this.findDomainByName(name);
|
|
88
|
+
if (existingDomain) {
|
|
89
|
+
return existingDomain;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Create new domain if not found
|
|
93
|
+
const domain = await this.createDomain(
|
|
94
|
+
{
|
|
95
|
+
name,
|
|
96
|
+
description: `Auto-created domain for ${name}`,
|
|
97
|
+
isActive: true,
|
|
98
|
+
isVerified: true,
|
|
99
|
+
allowedOrigins: [],
|
|
100
|
+
},
|
|
101
|
+
context
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
if (!domain) {
|
|
105
|
+
throw new C15TError('Failed to create domain', {
|
|
106
|
+
code: BASE_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
107
|
+
status: 503,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return domain;
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Finds all domains, optionally including inactive ones.
|
|
116
|
+
* Returns domains with processed output fields according to the schema configuration.
|
|
117
|
+
*
|
|
118
|
+
* @param params - Optional parameters to filter the results
|
|
119
|
+
* @returns Array of domains matching the criteria
|
|
120
|
+
*/
|
|
121
|
+
findDomains: async (params: FindDomainParams = {}) => {
|
|
122
|
+
const whereConditions: Where<'domain'> = [];
|
|
123
|
+
|
|
124
|
+
if (!params.includeInactive) {
|
|
125
|
+
whereConditions.push({
|
|
126
|
+
field: 'isActive',
|
|
127
|
+
value: true,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (params.name) {
|
|
132
|
+
whereConditions.push({
|
|
133
|
+
field: 'name',
|
|
134
|
+
value: params.name,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const domains = await adapter.findMany({
|
|
139
|
+
model: 'domain',
|
|
140
|
+
where: whereConditions,
|
|
141
|
+
sortBy: {
|
|
142
|
+
field: 'name',
|
|
143
|
+
direction: 'asc',
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
return domains.map((domain) =>
|
|
148
|
+
validateEntityOutput('domain', domain, ctx.options)
|
|
149
|
+
);
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Finds a domain by its name.
|
|
154
|
+
* Returns the domain with processed output fields according to the schema configuration.
|
|
155
|
+
*
|
|
156
|
+
* @param name - The domain name to search for
|
|
157
|
+
* @returns The domain object if found, null otherwise
|
|
158
|
+
*/
|
|
159
|
+
findDomain: async (name: string) => {
|
|
160
|
+
const domains = await registry.findDomains({
|
|
161
|
+
name,
|
|
162
|
+
includeInactive: false,
|
|
163
|
+
});
|
|
164
|
+
return domains[0] || null;
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Finds a domain by its unique ID.
|
|
169
|
+
* Returns the domain with processed output fields according to the schema configuration.
|
|
170
|
+
*
|
|
171
|
+
* @param domainId - The unique identifier of the domain
|
|
172
|
+
* @returns The domain object if found, null otherwise
|
|
173
|
+
*/
|
|
174
|
+
findDomainById: async (domainId: string) => {
|
|
175
|
+
const domain = await adapter.findOne({
|
|
176
|
+
model: 'domain',
|
|
177
|
+
where: [
|
|
178
|
+
{
|
|
179
|
+
field: 'id',
|
|
180
|
+
value: domainId,
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
});
|
|
184
|
+
return domain
|
|
185
|
+
? validateEntityOutput('domain', domain, ctx.options)
|
|
186
|
+
: null;
|
|
187
|
+
},
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Finds a domain by its name.
|
|
191
|
+
* Returns the domain with processed output fields according to the schema configuration.
|
|
192
|
+
*
|
|
193
|
+
* @param name - The domain name to search for
|
|
194
|
+
* @returns The domain object if found, null otherwise
|
|
195
|
+
*/
|
|
196
|
+
findDomainByName: async (name: string) => {
|
|
197
|
+
const domain = await adapter.findOne({
|
|
198
|
+
model: 'domain',
|
|
199
|
+
where: [
|
|
200
|
+
{
|
|
201
|
+
field: 'name',
|
|
202
|
+
value: name,
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
});
|
|
206
|
+
return domain
|
|
207
|
+
? validateEntityOutput('domain', domain, ctx.options)
|
|
208
|
+
: null;
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Updates an existing domain record by ID.
|
|
213
|
+
* Applies any configured hooks during the update process and
|
|
214
|
+
* processes the output according to schema configuration.
|
|
215
|
+
*
|
|
216
|
+
* @param domainId - The unique identifier of the domain to update
|
|
217
|
+
* @param data - The fields to update on the domain record
|
|
218
|
+
* @param context - Optional endpoint context for hooks
|
|
219
|
+
* @returns The updated domain if successful, null if not found or hooks prevented update
|
|
220
|
+
*/
|
|
221
|
+
updateDomain: async (
|
|
222
|
+
domainId: string,
|
|
223
|
+
data: Partial<Domain>,
|
|
224
|
+
context?: GenericEndpointContext
|
|
225
|
+
) => {
|
|
226
|
+
const domain = await updateWithHooks({
|
|
227
|
+
data: {
|
|
228
|
+
...data,
|
|
229
|
+
updatedAt: new Date(),
|
|
230
|
+
},
|
|
231
|
+
where: [
|
|
232
|
+
{
|
|
233
|
+
field: 'id',
|
|
234
|
+
value: domainId,
|
|
235
|
+
},
|
|
236
|
+
],
|
|
237
|
+
model: 'domain',
|
|
238
|
+
customFn: undefined,
|
|
239
|
+
context,
|
|
240
|
+
});
|
|
241
|
+
return domain
|
|
242
|
+
? validateEntityOutput('domain', domain as Domain, ctx.options)
|
|
243
|
+
: null;
|
|
244
|
+
},
|
|
245
|
+
|
|
246
|
+
/**
|
|
247
|
+
* Verifies if a domain exists and is active.
|
|
248
|
+
* Useful for checking domain validity during API requests.
|
|
249
|
+
*
|
|
250
|
+
* @param domainName - The domain name to verify
|
|
251
|
+
* @returns True if the domain exists and is active, false otherwise
|
|
252
|
+
*/
|
|
253
|
+
verifyDomain: async (domainName: string) => {
|
|
254
|
+
const domain = await adapter.findOne({
|
|
255
|
+
model: 'domain',
|
|
256
|
+
where: [
|
|
257
|
+
{
|
|
258
|
+
field: 'name',
|
|
259
|
+
value: domainName,
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
field: 'isActive',
|
|
263
|
+
value: true,
|
|
264
|
+
},
|
|
265
|
+
],
|
|
266
|
+
});
|
|
267
|
+
return !!domain;
|
|
268
|
+
},
|
|
269
|
+
};
|
|
270
|
+
|
|
271
|
+
return registry;
|
|
272
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zod schema for validating domain entities.
|
|
5
|
+
*
|
|
6
|
+
* This defines the structure and validation rules for domain records:
|
|
7
|
+
* - Required fields: name
|
|
8
|
+
* - Optional fields: description, allowedOrigins
|
|
9
|
+
* - Default value of true for isActive and isVerified
|
|
10
|
+
* - Default current date/time for creation timestamp
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const domainData = {
|
|
15
|
+
* id: 'dom_x1pftyoufsm7xgo1kv',
|
|
16
|
+
* name: 'example.com',
|
|
17
|
+
* description: 'Company website',
|
|
18
|
+
* allowedOrigins: ['https://app.example.com', 'https://admin.example.com']
|
|
19
|
+
* };
|
|
20
|
+
*
|
|
21
|
+
* // Validate and parse the domain data
|
|
22
|
+
* const validDomain = domainSchema.parse(domainData);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export const domainSchema = z.object({
|
|
26
|
+
id: z.string(),
|
|
27
|
+
name: z.string().min(1),
|
|
28
|
+
description: z.string().optional(),
|
|
29
|
+
allowedOrigins: z.array(z.string()).optional().default([]),
|
|
30
|
+
isVerified: z.boolean().default(true),
|
|
31
|
+
isActive: z.boolean().default(true),
|
|
32
|
+
createdAt: z.date().default(() => new Date()),
|
|
33
|
+
updatedAt: z.date().default(() => new Date()),
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Type definition for Domain
|
|
38
|
+
*
|
|
39
|
+
* This type represents the structure of a domain record
|
|
40
|
+
* as defined by the domainSchema. It includes all fields
|
|
41
|
+
* that are part of the domain entity.
|
|
42
|
+
*/
|
|
43
|
+
export type Domain = z.infer<typeof domainSchema>;
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import type { Field } from '~/db/core/fields';
|
|
2
|
+
import type { C15TOptions } from '~/types';
|
|
3
|
+
import { domainSchema } from './schema';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates the database table configuration for the domain entity.
|
|
7
|
+
*
|
|
8
|
+
* This function creates a schema definition that includes all standard domain fields
|
|
9
|
+
* and any additional fields from plugins or configuration. The resulting schema is used
|
|
10
|
+
* for database migrations, schema validation, and query building.
|
|
11
|
+
*
|
|
12
|
+
* @param options - C15T configuration options that may contain domain table customizations
|
|
13
|
+
* @param domainFields - Additional fields from plugins to include in the domain table
|
|
14
|
+
* @returns A complete table schema definition with fields, model name, and metadata
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const domainTableSchema = getDomainTable(c15tOptions);
|
|
19
|
+
* // Use the schema for migrations or data access
|
|
20
|
+
* const migrationPlans = generateMigrations(domainTableSchema);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function getDomainTable(
|
|
24
|
+
options: C15TOptions,
|
|
25
|
+
domainFields?: Record<string, Field>
|
|
26
|
+
) {
|
|
27
|
+
const domainConfig = options.tables?.domain;
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
/**
|
|
31
|
+
* The name of the domain table in the database, configurable through options
|
|
32
|
+
*/
|
|
33
|
+
entityName: domainConfig?.entityName || 'domain',
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The ID prefix for the domain table
|
|
37
|
+
* Used to generate unique prefixed IDs for domains
|
|
38
|
+
*/
|
|
39
|
+
entityPrefix: domainConfig?.entityPrefix || 'dom',
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The schema for the domain table
|
|
43
|
+
*/
|
|
44
|
+
schema: domainSchema,
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Field definitions for the domain table
|
|
48
|
+
*/
|
|
49
|
+
fields: {
|
|
50
|
+
/**
|
|
51
|
+
* Domain name (e.g., "example.com")
|
|
52
|
+
* This is the primary identifier for the domain in addition to its ID
|
|
53
|
+
*/
|
|
54
|
+
name: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
required: true,
|
|
57
|
+
unique: true,
|
|
58
|
+
fieldName: domainConfig?.fields?.name || 'name',
|
|
59
|
+
},
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Optional human-readable description of the domain
|
|
63
|
+
*/
|
|
64
|
+
description: {
|
|
65
|
+
type: 'string',
|
|
66
|
+
required: false,
|
|
67
|
+
fieldName: domainConfig?.fields?.description || 'description',
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* List of additional origins that are allowed to access resources for this domain
|
|
72
|
+
* Stored as a JSON array of strings
|
|
73
|
+
*/
|
|
74
|
+
allowedOrigins: {
|
|
75
|
+
type: 'json',
|
|
76
|
+
defaultValue: () => [],
|
|
77
|
+
required: false,
|
|
78
|
+
fieldName: domainConfig?.fields?.allowedOrigins || 'allowedOrigins',
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Whether domain ownership has been verified
|
|
83
|
+
* Default: true
|
|
84
|
+
*/
|
|
85
|
+
isVerified: {
|
|
86
|
+
type: 'boolean',
|
|
87
|
+
defaultValue: true,
|
|
88
|
+
required: true,
|
|
89
|
+
fieldName: domainConfig?.fields?.isVerified || 'isVerified',
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Whether this domain is currently active
|
|
94
|
+
* Default: true
|
|
95
|
+
*/
|
|
96
|
+
isActive: {
|
|
97
|
+
type: 'boolean',
|
|
98
|
+
defaultValue: true,
|
|
99
|
+
required: true,
|
|
100
|
+
fieldName: domainConfig?.fields?.isActive || 'isActive',
|
|
101
|
+
},
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* When the domain record was created
|
|
105
|
+
* Automatically set to current time by default
|
|
106
|
+
*/
|
|
107
|
+
createdAt: {
|
|
108
|
+
type: 'date',
|
|
109
|
+
defaultValue: () => new Date(),
|
|
110
|
+
required: true,
|
|
111
|
+
fieldName: domainConfig?.fields?.createdAt || 'createdAt',
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* When the domain record was last updated
|
|
116
|
+
* Optional, set during updates
|
|
117
|
+
*/
|
|
118
|
+
updatedAt: {
|
|
119
|
+
type: 'date',
|
|
120
|
+
required: false,
|
|
121
|
+
fieldName: domainConfig?.fields?.updatedAt || 'updatedAt',
|
|
122
|
+
},
|
|
123
|
+
|
|
124
|
+
// Include additional fields from plugins
|
|
125
|
+
...(domainFields || {}),
|
|
126
|
+
|
|
127
|
+
// Include additional fields from configuration
|
|
128
|
+
...(domainConfig?.additionalFields || {}),
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Execution order during migrations (lower numbers run first)
|
|
133
|
+
* Domain table needs to be created before tables that reference it
|
|
134
|
+
*/
|
|
135
|
+
order: 1,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ActiveEntityConfig } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Domain entity configuration
|
|
5
|
+
* @default entityName: "domain", entityPrefix: "dom"
|
|
6
|
+
*/
|
|
7
|
+
export interface DomainEntityConfig extends ActiveEntityConfig {
|
|
8
|
+
fields?: Record<string, string> & {
|
|
9
|
+
id?: string;
|
|
10
|
+
domain: string;
|
|
11
|
+
/**
|
|
12
|
+
* Indicates if the domain is a pattern (e.g., "true"/"false")
|
|
13
|
+
* When true, the domain string will be interpreted as a pattern
|
|
14
|
+
*/
|
|
15
|
+
isPattern?: string;
|
|
16
|
+
/**
|
|
17
|
+
* The type of pattern matching to apply
|
|
18
|
+
* Valid values: "regex", "wildcard", "prefix", "suffix", "exact"
|
|
19
|
+
*/
|
|
20
|
+
patternType?: string;
|
|
21
|
+
parentDomainId?: string;
|
|
22
|
+
description?: string;
|
|
23
|
+
isActive?: string;
|
|
24
|
+
createdAt?: string;
|
|
25
|
+
updatedAt?: string;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import type { Where } from '~/db/adapters/types';
|
|
2
|
+
import { getWithHooks } from '~/db/hooks/with-hooks-factory';
|
|
3
|
+
import type { GenericEndpointContext, RegistryContext } from '~/types';
|
|
4
|
+
import { validateEntityOutput } from '../definition';
|
|
5
|
+
import type { GeoLocation } from './schema';
|
|
6
|
+
/**
|
|
7
|
+
* Creates and returns a set of geo-location-related adapter methods to interact with the database.
|
|
8
|
+
* These methods provide a consistent interface for creating and finding
|
|
9
|
+
* geo-location records while applying hooks and enforcing data validation rules.
|
|
10
|
+
*
|
|
11
|
+
* @param adapter - The database adapter used for direct database operations
|
|
12
|
+
* @param ctx - The context object containing the database adapter, hooks, and options
|
|
13
|
+
* @returns An object containing type-safe geo-location operations
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const locationAdapter = createGeoLocationAdapter(
|
|
18
|
+
* databaseAdapter,
|
|
19
|
+
* createWithHooks,
|
|
20
|
+
* c15tOptions
|
|
21
|
+
* );
|
|
22
|
+
*
|
|
23
|
+
* // Create a new geo-location record
|
|
24
|
+
* const location = await locationAdapter.createGeoLocation({
|
|
25
|
+
* countryCode: 'US',
|
|
26
|
+
* countryName: 'United States',
|
|
27
|
+
* regionCode: 'CA',
|
|
28
|
+
* regionName: 'California',
|
|
29
|
+
* regulatoryZones: ['CCPA', 'CPRA']
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function geoLocationRegistry({ adapter, ...ctx }: RegistryContext) {
|
|
34
|
+
const { createWithHooks } = getWithHooks(adapter, ctx);
|
|
35
|
+
return {
|
|
36
|
+
/**
|
|
37
|
+
* Creates a new geo-location record in the database.
|
|
38
|
+
* Automatically sets creation timestamp and applies any
|
|
39
|
+
* configured hooks during the creation process.
|
|
40
|
+
*
|
|
41
|
+
* @param location - Geo-location data to create (without id and timestamp)
|
|
42
|
+
* @param context - Optional endpoint context for hooks
|
|
43
|
+
* @returns The created geo-location record with all fields populated
|
|
44
|
+
* @throws May throw an error if hooks prevent creation or if database operations fail
|
|
45
|
+
*/
|
|
46
|
+
createGeoLocation: async (
|
|
47
|
+
location: Omit<GeoLocation, 'id' | 'createdAt'> & Partial<GeoLocation>,
|
|
48
|
+
context?: GenericEndpointContext
|
|
49
|
+
) => {
|
|
50
|
+
const createdLocation = await createWithHooks({
|
|
51
|
+
data: {
|
|
52
|
+
createdAt: new Date(),
|
|
53
|
+
...location,
|
|
54
|
+
},
|
|
55
|
+
model: 'consentGeoLocation',
|
|
56
|
+
customFn: undefined,
|
|
57
|
+
context,
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
if (!createdLocation) {
|
|
61
|
+
throw new Error(
|
|
62
|
+
'Failed to create geo-location - operation returned null'
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return createdLocation as GeoLocation;
|
|
67
|
+
},
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Finds all geo-location records matching the given criteria.
|
|
71
|
+
* Returns geo-locations with processed output fields according to the schema configuration.
|
|
72
|
+
*
|
|
73
|
+
* @param filter - Optional filter parameters for the query
|
|
74
|
+
* @returns Array of geo-location records matching the criteria
|
|
75
|
+
*/
|
|
76
|
+
findGeoLocations: async (filter?: {
|
|
77
|
+
countryCode?: string;
|
|
78
|
+
regionCode?: string;
|
|
79
|
+
}) => {
|
|
80
|
+
const whereConditions: Where<'geoLocation'> = [];
|
|
81
|
+
|
|
82
|
+
if (filter?.countryCode) {
|
|
83
|
+
whereConditions.push({
|
|
84
|
+
field: 'countryCode',
|
|
85
|
+
value: filter.countryCode,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (filter?.regionCode) {
|
|
90
|
+
whereConditions.push({
|
|
91
|
+
field: 'regionCode',
|
|
92
|
+
value: filter.regionCode,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const locations = await adapter.findMany({
|
|
97
|
+
model: 'geoLocation',
|
|
98
|
+
where: whereConditions,
|
|
99
|
+
sortBy: {
|
|
100
|
+
field: 'countryName',
|
|
101
|
+
direction: 'asc',
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
return locations.map((location) =>
|
|
106
|
+
validateEntityOutput('consentGeoLocation', location, ctx.options)
|
|
107
|
+
);
|
|
108
|
+
},
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Finds a geo-location record by its unique ID.
|
|
112
|
+
* Returns the geo-location with processed output fields according to the schema configuration.
|
|
113
|
+
*
|
|
114
|
+
* @param locationId - The unique identifier of the geo-location record
|
|
115
|
+
* @returns The geo-location object if found, null otherwise
|
|
116
|
+
*/
|
|
117
|
+
findGeoLocationById: async (locationId: string) => {
|
|
118
|
+
const location = await adapter.findOne({
|
|
119
|
+
model: 'geoLocation',
|
|
120
|
+
where: [
|
|
121
|
+
{
|
|
122
|
+
field: 'id',
|
|
123
|
+
value: locationId,
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
});
|
|
127
|
+
return location
|
|
128
|
+
? validateEntityOutput('consentGeoLocation', location, ctx.options)
|
|
129
|
+
: null;
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Finds geo-location records by country code.
|
|
134
|
+
* Returns geo-locations with processed output fields according to the schema configuration.
|
|
135
|
+
*
|
|
136
|
+
* @param countryCode - The country code to search for
|
|
137
|
+
* @returns Array of geo-location records for the specified country
|
|
138
|
+
*/
|
|
139
|
+
findGeoLocationsByCountry: async (countryCode: string) => {
|
|
140
|
+
const locations = await adapter.findMany({
|
|
141
|
+
model: 'geoLocation',
|
|
142
|
+
where: [
|
|
143
|
+
{
|
|
144
|
+
field: 'countryCode',
|
|
145
|
+
value: countryCode,
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
sortBy: {
|
|
149
|
+
field: 'regionName',
|
|
150
|
+
direction: 'asc',
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
return locations.map((location) =>
|
|
155
|
+
validateEntityOutput('consentGeoLocation', location, ctx.options)
|
|
156
|
+
);
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zod schema for validating geo-location entities.
|
|
5
|
+
*
|
|
6
|
+
* This defines the structure and validation rules for geographic location records:
|
|
7
|
+
* - Required fields: countryCode, countryName
|
|
8
|
+
* - Optional fields: regionCode, regionName, regulatoryZones
|
|
9
|
+
* - Default current date/time for creation timestamp
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const locationData = {
|
|
14
|
+
* id: 'geo_x1pftyoufsm7xgo1kv',
|
|
15
|
+
* countryCode: 'US',
|
|
16
|
+
* countryName: 'United States',
|
|
17
|
+
* regionCode: 'CA',
|
|
18
|
+
* regionName: 'California',
|
|
19
|
+
* regulatoryZones: ['CCPA', 'CPRA']
|
|
20
|
+
* };
|
|
21
|
+
*
|
|
22
|
+
* // Validate and parse the geo-location data
|
|
23
|
+
* const validLocation = geoLocationSchema.parse(locationData);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export const geoLocationSchema = z.object({
|
|
27
|
+
id: z.string(),
|
|
28
|
+
countryCode: z.string().length(2).toUpperCase(),
|
|
29
|
+
countryName: z.string(),
|
|
30
|
+
regionCode: z.string().optional(),
|
|
31
|
+
regionName: z.string().optional(),
|
|
32
|
+
regulatoryZones: z
|
|
33
|
+
.array(z.enum(['GDPR', 'CCPA', 'CPRA', 'LGPD', 'PIPEDA']))
|
|
34
|
+
.optional(), // Add your actual regulatory zones
|
|
35
|
+
createdAt: z.date().default(() => new Date()),
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Type definition for GeoLocation
|
|
40
|
+
*
|
|
41
|
+
* This type represents the structure of a geo-location entity
|
|
42
|
+
* as defined by the geoLocationSchema. It includes all fields
|
|
43
|
+
* that are part of the geo-location entity.
|
|
44
|
+
*/
|
|
45
|
+
export type GeoLocation = z.infer<typeof geoLocationSchema>;
|