@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,313 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import type { Where } from '~/db/adapters/types';
|
|
3
|
+
import { getWithHooks } from '~/db/hooks';
|
|
4
|
+
import type { GenericEndpointContext, RegistryContext } from '~/types';
|
|
5
|
+
import { validateEntityOutput } from '../definition';
|
|
6
|
+
import type { ConsentPolicy } from './schema';
|
|
7
|
+
|
|
8
|
+
export interface FindPolicyParams {
|
|
9
|
+
domainId?: string;
|
|
10
|
+
version?: string;
|
|
11
|
+
includeInactive?: boolean;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Generates placeholder content for a policy with its hash.
|
|
16
|
+
*
|
|
17
|
+
* @param name - Policy name
|
|
18
|
+
* @param date - Generation date
|
|
19
|
+
* @returns Object containing content and contentHash
|
|
20
|
+
*/
|
|
21
|
+
function generatePolicyPlaceholder(name: string, date: Date) {
|
|
22
|
+
const content = `[PLACEHOLDER] This is an automatically generated version of the ${name} policy.\n\nThis placeholder content should be replaced with actual policy terms before being presented to users.\n\nGenerated on: ${date.toISOString()}`;
|
|
23
|
+
const contentHash = createHash('sha256').update(content).digest('hex');
|
|
24
|
+
return { content, contentHash };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Creates and returns a set of consent policy-related adapter methods to interact with the database.
|
|
29
|
+
* These methods provide a consistent interface for creating, finding, and updating
|
|
30
|
+
* consent policy records while applying hooks and enforcing data validation rules.
|
|
31
|
+
*
|
|
32
|
+
* @param adapter - The database adapter used for direct database operations
|
|
33
|
+
* @param ctx - The context object containing the database adapter, hooks, and options
|
|
34
|
+
* @returns An object containing type-safe consent policy operations
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* const policyAdapter = createConsentPolicyAdapter(
|
|
39
|
+
* databaseAdapter,
|
|
40
|
+
* createWithHooks,
|
|
41
|
+
* updateWithHooks,
|
|
42
|
+
* c15tOptions
|
|
43
|
+
* );
|
|
44
|
+
*
|
|
45
|
+
* // Create a new consent policy
|
|
46
|
+
* const policy = await policyAdapter.createConsentPolicy({
|
|
47
|
+
* version: '1.0.0',
|
|
48
|
+
* name: 'Privacy Policy 2023',
|
|
49
|
+
* effectiveDate: new Date(),
|
|
50
|
+
* content: 'Full policy text...',
|
|
51
|
+
* contentHash: 'sha256-hash-of-content'
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export function policyRegistry({ adapter, ...ctx }: RegistryContext) {
|
|
56
|
+
const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
|
|
57
|
+
const registry = {
|
|
58
|
+
/**
|
|
59
|
+
* Creates a new consent policy record in the database.
|
|
60
|
+
* Automatically sets creation timestamp and applies any
|
|
61
|
+
* configured hooks during the creation process.
|
|
62
|
+
*
|
|
63
|
+
* @param policy - Policy data to create (without id and timestamp)
|
|
64
|
+
* @param context - Optional endpoint context for hooks
|
|
65
|
+
* @returns The created policy with all fields populated
|
|
66
|
+
* @throws May throw an error if hooks prevent creation or if database operations fail
|
|
67
|
+
*/
|
|
68
|
+
createConsentPolicy: async (
|
|
69
|
+
policy: Omit<ConsentPolicy, 'id' | 'createdAt'> & Partial<ConsentPolicy>,
|
|
70
|
+
context?: GenericEndpointContext
|
|
71
|
+
) => {
|
|
72
|
+
const createdPolicy = await createWithHooks({
|
|
73
|
+
data: {
|
|
74
|
+
createdAt: new Date(),
|
|
75
|
+
...policy,
|
|
76
|
+
},
|
|
77
|
+
model: 'consentPolicy',
|
|
78
|
+
context,
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
if (!createdPolicy) {
|
|
82
|
+
throw new Error(
|
|
83
|
+
'Failed to create consent policy - operation returned null'
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return createdPolicy as ConsentPolicy;
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
findPolicies: async (params: FindPolicyParams = {}) => {
|
|
91
|
+
const whereConditions: Where<'consentPolicy'> = [];
|
|
92
|
+
|
|
93
|
+
if (!params.includeInactive) {
|
|
94
|
+
whereConditions.push({
|
|
95
|
+
field: 'isActive',
|
|
96
|
+
value: true,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (params.domainId) {
|
|
101
|
+
whereConditions.push({
|
|
102
|
+
field: 'id',
|
|
103
|
+
value: params.domainId,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (params.version) {
|
|
108
|
+
whereConditions.push({
|
|
109
|
+
field: 'version',
|
|
110
|
+
value: params.version,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const policies = await adapter.findMany({
|
|
115
|
+
model: 'consentPolicy',
|
|
116
|
+
where: whereConditions,
|
|
117
|
+
sortBy: {
|
|
118
|
+
field: 'effectiveDate',
|
|
119
|
+
direction: 'desc',
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
return policies.map((policy) =>
|
|
124
|
+
validateEntityOutput('consentPolicy', policy, ctx.options)
|
|
125
|
+
);
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
findPolicy: async (domainId: string, version?: string) => {
|
|
129
|
+
const policies = await registry.findPolicies({ domainId, version });
|
|
130
|
+
return policies[0] || null;
|
|
131
|
+
},
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Finds all active consent policies.
|
|
135
|
+
* Returns policies with processed output fields according to the schema configuration.
|
|
136
|
+
*
|
|
137
|
+
* @returns Array of active consent policies sorted by effective date
|
|
138
|
+
*/
|
|
139
|
+
findActiveConsentPolicies: async () => {
|
|
140
|
+
const policies = await adapter.findMany({
|
|
141
|
+
model: 'consentPolicy',
|
|
142
|
+
where: [
|
|
143
|
+
{
|
|
144
|
+
field: 'isActive',
|
|
145
|
+
value: true,
|
|
146
|
+
},
|
|
147
|
+
],
|
|
148
|
+
sortBy: {
|
|
149
|
+
field: 'effectiveDate',
|
|
150
|
+
direction: 'desc',
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
return policies.map((policy) =>
|
|
155
|
+
validateEntityOutput('consentPolicy', policy, ctx.options)
|
|
156
|
+
);
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Finds a consent policy by its unique ID.
|
|
161
|
+
* Returns the policy with processed output fields according to the schema configuration.
|
|
162
|
+
*
|
|
163
|
+
* @param policyId - The unique identifier of the policy
|
|
164
|
+
* @returns The policy object if found, null otherwise
|
|
165
|
+
*/
|
|
166
|
+
findConsentPolicyById: async (policyId: string) => {
|
|
167
|
+
const policy = await adapter.findOne({
|
|
168
|
+
model: 'consentPolicy',
|
|
169
|
+
where: [
|
|
170
|
+
{
|
|
171
|
+
field: 'id',
|
|
172
|
+
value: policyId,
|
|
173
|
+
},
|
|
174
|
+
],
|
|
175
|
+
});
|
|
176
|
+
return policy
|
|
177
|
+
? validateEntityOutput('consentPolicy', policy, ctx.options)
|
|
178
|
+
: null;
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Finds a consent policy by its version string.
|
|
183
|
+
* Returns the policy with processed output fields according to the schema configuration.
|
|
184
|
+
*
|
|
185
|
+
* @param version - The version string of the policy
|
|
186
|
+
* @returns The policy object if found, null otherwise
|
|
187
|
+
*/
|
|
188
|
+
findConsentPolicyByVersion: async (version: string) => {
|
|
189
|
+
const policy = await adapter.findOne({
|
|
190
|
+
model: 'consentPolicy',
|
|
191
|
+
where: [
|
|
192
|
+
{
|
|
193
|
+
field: 'version',
|
|
194
|
+
value: version,
|
|
195
|
+
},
|
|
196
|
+
],
|
|
197
|
+
});
|
|
198
|
+
return policy
|
|
199
|
+
? validateEntityOutput('consentPolicy', policy, ctx.options)
|
|
200
|
+
: null;
|
|
201
|
+
},
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Updates an existing consent policy record by ID.
|
|
205
|
+
* Applies any configured hooks during the update process and
|
|
206
|
+
* processes the output according to schema configuration.
|
|
207
|
+
*
|
|
208
|
+
* @param policyId - The unique identifier of the policy to update
|
|
209
|
+
* @param data - The fields to update on the policy record
|
|
210
|
+
* @param context - Optional endpoint context for hooks
|
|
211
|
+
* @returns The updated policy if successful, null if not found or hooks prevented update
|
|
212
|
+
*/
|
|
213
|
+
updateConsentPolicy: async (
|
|
214
|
+
policyId: string,
|
|
215
|
+
data: Partial<ConsentPolicy>,
|
|
216
|
+
context?: GenericEndpointContext
|
|
217
|
+
) => {
|
|
218
|
+
const policy = await updateWithHooks<
|
|
219
|
+
Partial<ConsentPolicy>,
|
|
220
|
+
ConsentPolicy
|
|
221
|
+
>({
|
|
222
|
+
data,
|
|
223
|
+
where: [
|
|
224
|
+
{
|
|
225
|
+
field: 'id',
|
|
226
|
+
value: policyId,
|
|
227
|
+
},
|
|
228
|
+
],
|
|
229
|
+
model: 'consentPolicy',
|
|
230
|
+
customFn: undefined,
|
|
231
|
+
context,
|
|
232
|
+
});
|
|
233
|
+
return policy
|
|
234
|
+
? validateEntityOutput('consentPolicy', policy, ctx.options)
|
|
235
|
+
: null;
|
|
236
|
+
},
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Finds the latest active policy or creates a new one if none exists.
|
|
240
|
+
* Uses a database transaction to prevent race conditions in multi-threaded environments.
|
|
241
|
+
*
|
|
242
|
+
* If multiple active policies with the same name exist, returns the most recent one
|
|
243
|
+
* based on effectiveDate. When creating a new policy, it assigns version '1.0.0'
|
|
244
|
+
* and generates placeholder content with a SHA-256 hash.
|
|
245
|
+
*
|
|
246
|
+
* @param name - The name of the policy to find/create
|
|
247
|
+
* @returns The policy object
|
|
248
|
+
* @throws {Error} If the transaction fails to complete
|
|
249
|
+
*/
|
|
250
|
+
findOrCreatePolicy: async (name: string) => {
|
|
251
|
+
// Normalize name for comparison
|
|
252
|
+
const normalizedSearchName = name.toLowerCase().trim();
|
|
253
|
+
|
|
254
|
+
// Use a transaction to prevent race conditions
|
|
255
|
+
return adapter.transaction({
|
|
256
|
+
callback: async (txAdapter) => {
|
|
257
|
+
const now = new Date();
|
|
258
|
+
const txRegistry = policyRegistry({
|
|
259
|
+
adapter: txAdapter,
|
|
260
|
+
...ctx,
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
// Find latest policy with exact name match directly from database
|
|
264
|
+
const matchingPolicies = await txAdapter.findMany({
|
|
265
|
+
model: 'consentPolicy',
|
|
266
|
+
where: [
|
|
267
|
+
{ field: 'isActive', value: true },
|
|
268
|
+
{
|
|
269
|
+
field: 'name',
|
|
270
|
+
value: normalizedSearchName,
|
|
271
|
+
operator: 'ilike',
|
|
272
|
+
},
|
|
273
|
+
],
|
|
274
|
+
sortBy: {
|
|
275
|
+
field: 'effectiveDate',
|
|
276
|
+
direction: 'desc',
|
|
277
|
+
},
|
|
278
|
+
limit: 1,
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
const latestPolicy = matchingPolicies[0]
|
|
282
|
+
? validateEntityOutput(
|
|
283
|
+
'consentPolicy',
|
|
284
|
+
matchingPolicies[0],
|
|
285
|
+
ctx.options
|
|
286
|
+
)
|
|
287
|
+
: null;
|
|
288
|
+
|
|
289
|
+
if (latestPolicy) {
|
|
290
|
+
return latestPolicy;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
// Generate policy content and hash
|
|
294
|
+
const { content: defaultContent, contentHash } =
|
|
295
|
+
generatePolicyPlaceholder(name, now);
|
|
296
|
+
|
|
297
|
+
return txRegistry.createConsentPolicy({
|
|
298
|
+
version: '1.0.0',
|
|
299
|
+
name: normalizedSearchName,
|
|
300
|
+
effectiveDate: now,
|
|
301
|
+
content: defaultContent,
|
|
302
|
+
contentHash,
|
|
303
|
+
isActive: true,
|
|
304
|
+
updatedAt: now,
|
|
305
|
+
expirationDate: null,
|
|
306
|
+
});
|
|
307
|
+
},
|
|
308
|
+
});
|
|
309
|
+
},
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
return registry;
|
|
313
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zod schema for validating consent policy entities.
|
|
5
|
+
*
|
|
6
|
+
* This defines the structure and validation rules for consent policy records:
|
|
7
|
+
* - Required fields: version, name, effectiveDate, content, contentHash
|
|
8
|
+
* - Optional fields: expirationDate
|
|
9
|
+
* - Default value of true for isActive
|
|
10
|
+
* - Default current date/time for creation and update timestamps
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const policyData = {
|
|
15
|
+
* id: 'pol_w5qufx2a66m7xkn3ty',
|
|
16
|
+
* version: '1.0.0',
|
|
17
|
+
* name: 'Privacy Policy 2023',
|
|
18
|
+
* effectiveDate: new Date(),
|
|
19
|
+
* content: 'Full policy text...',
|
|
20
|
+
* contentHash: 'sha256-hash-of-content'
|
|
21
|
+
* };
|
|
22
|
+
*
|
|
23
|
+
* // Validate and parse the policy data
|
|
24
|
+
* const validPolicy = consentPolicySchema.parse(policyData);
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export const consentPolicySchema = z.object({
|
|
28
|
+
id: z.string(),
|
|
29
|
+
version: z.string(),
|
|
30
|
+
name: z.string(),
|
|
31
|
+
effectiveDate: z.date(),
|
|
32
|
+
expirationDate: z.date().nullable().optional(),
|
|
33
|
+
content: z.string(),
|
|
34
|
+
contentHash: z.string(),
|
|
35
|
+
isActive: z.boolean().default(true),
|
|
36
|
+
createdAt: z.date().default(() => new Date()),
|
|
37
|
+
updatedAt: z.date().default(() => new Date()),
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Type definition for ConsentPolicy
|
|
42
|
+
*
|
|
43
|
+
* This type represents the structure of a consent policy record
|
|
44
|
+
* as defined by the consentPolicySchema. It includes all fields
|
|
45
|
+
* that are part of the consent policy entity.
|
|
46
|
+
*/
|
|
47
|
+
export type ConsentPolicy = z.infer<typeof consentPolicySchema>;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import type { Field } from '~/db/core/fields';
|
|
2
|
+
import type { C15TOptions } from '~/types';
|
|
3
|
+
import { consentPolicySchema } from './schema';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates the database table configuration for the consent policy entity.
|
|
7
|
+
*
|
|
8
|
+
* This function creates a schema definition that includes all standard consent policy 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 policy table customizations
|
|
13
|
+
* @param policyFields - Additional fields from plugins to include in the policy table
|
|
14
|
+
* @returns A complete table schema definition with fields, model name, and metadata
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const policyTableSchema = getConsentPolicyTable(c15tOptions);
|
|
19
|
+
* // Use the schema for migrations or data access
|
|
20
|
+
* const migrationPlans = generateMigrations(policyTableSchema);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function getConsentPolicyTable(
|
|
24
|
+
options: C15TOptions,
|
|
25
|
+
policyFields?: Record<string, Field>
|
|
26
|
+
) {
|
|
27
|
+
const consentPolicyConfig = options.tables?.consentPolicy;
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
/**
|
|
31
|
+
* The name of the policy table in the database, configurable through options
|
|
32
|
+
*/
|
|
33
|
+
entityName: consentPolicyConfig?.entityName || 'consentPolicy',
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The ID prefix for the consent policy table
|
|
37
|
+
* Used to generate unique prefixed IDs for consent policies
|
|
38
|
+
*/
|
|
39
|
+
entityPrefix: consentPolicyConfig?.entityPrefix || 'pol',
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The schema for the consent policy table
|
|
43
|
+
*/
|
|
44
|
+
schema: consentPolicySchema,
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Field definitions for the consent policy table
|
|
48
|
+
*/
|
|
49
|
+
fields: {
|
|
50
|
+
/**
|
|
51
|
+
* Version identifier for the policy (e.g., "1.0.0")
|
|
52
|
+
*/
|
|
53
|
+
version: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
required: true,
|
|
56
|
+
fieldName: consentPolicyConfig?.fields?.version || 'version',
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Human-readable name of the policy
|
|
61
|
+
*/
|
|
62
|
+
name: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
required: true,
|
|
65
|
+
fieldName: consentPolicyConfig?.fields?.name || 'name',
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Date when the policy becomes effective
|
|
70
|
+
*/
|
|
71
|
+
effectiveDate: {
|
|
72
|
+
type: 'date',
|
|
73
|
+
required: true,
|
|
74
|
+
fieldName:
|
|
75
|
+
consentPolicyConfig?.fields?.effectiveDate || 'effectiveDate',
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Optional date when the policy expires
|
|
80
|
+
*/
|
|
81
|
+
expirationDate: {
|
|
82
|
+
type: 'date',
|
|
83
|
+
required: false,
|
|
84
|
+
fieldName:
|
|
85
|
+
consentPolicyConfig?.fields?.expirationDate || 'expirationDate',
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Full content of the policy document
|
|
90
|
+
*/
|
|
91
|
+
content: {
|
|
92
|
+
type: 'string',
|
|
93
|
+
required: true,
|
|
94
|
+
fieldName: consentPolicyConfig?.fields?.content || 'content',
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Hash of the content for integrity validation
|
|
99
|
+
*/
|
|
100
|
+
contentHash: {
|
|
101
|
+
type: 'string',
|
|
102
|
+
required: true,
|
|
103
|
+
fieldName: consentPolicyConfig?.fields?.contentHash || 'contentHash',
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Whether this policy is currently active
|
|
108
|
+
* Default: true
|
|
109
|
+
*/
|
|
110
|
+
isActive: {
|
|
111
|
+
type: 'boolean',
|
|
112
|
+
defaultValue: true,
|
|
113
|
+
required: true,
|
|
114
|
+
fieldName: consentPolicyConfig?.fields?.isActive || 'isActive',
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* When the policy record was created
|
|
119
|
+
* Automatically set to current time by default
|
|
120
|
+
*/
|
|
121
|
+
createdAt: {
|
|
122
|
+
type: 'date',
|
|
123
|
+
defaultValue: () => new Date(),
|
|
124
|
+
required: true,
|
|
125
|
+
fieldName: consentPolicyConfig?.fields?.createdAt || 'createdAt',
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
// Include additional fields from plugins
|
|
129
|
+
...(policyFields || {}),
|
|
130
|
+
|
|
131
|
+
// Include additional fields from configuration
|
|
132
|
+
...(consentPolicyConfig?.additionalFields || {}),
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Execution order during migrations (lower numbers run first)
|
|
137
|
+
* Policy table needs to be created before tables that reference it (like consent)
|
|
138
|
+
*/
|
|
139
|
+
order: 2,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { BaseEntityConfig } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Consent policy entity configuration
|
|
5
|
+
* @default entityName: "consentPolicy", entityPrefix: "pol"
|
|
6
|
+
*/
|
|
7
|
+
export interface ConsentPolicyEntityConfig extends BaseEntityConfig {
|
|
8
|
+
fields?: Record<string, string> & {
|
|
9
|
+
id?: string;
|
|
10
|
+
version?: string;
|
|
11
|
+
name?: string;
|
|
12
|
+
/**
|
|
13
|
+
* ISO format date string (e.g., "2024-04-15T00:00:00Z")
|
|
14
|
+
*/
|
|
15
|
+
effectiveDate?: string;
|
|
16
|
+
/**
|
|
17
|
+
* ISO format date string (e.g., "2024-04-15T00:00:00Z")
|
|
18
|
+
*/
|
|
19
|
+
expirationDate?: string;
|
|
20
|
+
content?: string;
|
|
21
|
+
contentHash?: string;
|
|
22
|
+
isActive?: string;
|
|
23
|
+
/**
|
|
24
|
+
* ISO format date string (e.g., "2024-04-15T00:00:00Z")
|
|
25
|
+
*/
|
|
26
|
+
createdAt?: string;
|
|
27
|
+
};
|
|
28
|
+
}
|