@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,142 @@
|
|
|
1
|
+
import type { Field } from '~/db/core/fields';
|
|
2
|
+
import type { C15TOptions } from '~/types';
|
|
3
|
+
import { consentPurposeJunctionSchema } from './schema';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates the database table configuration for the consent-purpose junction entity.
|
|
7
|
+
*
|
|
8
|
+
* This function creates a schema definition that implements a many-to-many relationship
|
|
9
|
+
* between consents and purposes. The resulting schema is used for database migrations,
|
|
10
|
+
* schema validation, and query building.
|
|
11
|
+
*
|
|
12
|
+
* @param options - C15T configuration options that may contain junction table customizations
|
|
13
|
+
* @param junctionFields - Additional fields from plugins to include in the junction table
|
|
14
|
+
* @returns A complete table schema definition with fields, model name, and metadata
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const junctionTableSchema = getPurposeJunctionTable(c15tOptions);
|
|
19
|
+
* // Use the schema for migrations or data access
|
|
20
|
+
* const migrationPlans = generateMigrations(junctionTableSchema);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function getPurposeJunctionTable(
|
|
24
|
+
options: C15TOptions,
|
|
25
|
+
junctionFields?: Record<string, Field>
|
|
26
|
+
) {
|
|
27
|
+
const purposeJunctionConfig = options.tables?.consentPurposeJunction;
|
|
28
|
+
const consentConfig = options.tables?.consent;
|
|
29
|
+
const purposeConfig = options.tables?.consentPurpose;
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
/**
|
|
33
|
+
* The name of the junction table in the database, configurable through options
|
|
34
|
+
*/
|
|
35
|
+
entityName: purposeJunctionConfig?.entityName || 'consentPurposeJunction',
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The ID prefix for the consentPurpose junction table
|
|
39
|
+
* Used to generate unique prefixed IDs for consentPurpose junctions
|
|
40
|
+
*/
|
|
41
|
+
entityPrefix: purposeJunctionConfig?.entityPrefix || 'pjx',
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The schema for the consentPurpose junction table
|
|
45
|
+
*/
|
|
46
|
+
schema: consentPurposeJunctionSchema,
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Field definitions for the consent-purpose junction table
|
|
50
|
+
*/
|
|
51
|
+
fields: {
|
|
52
|
+
/**
|
|
53
|
+
* Reference to the consent record this junction is associated with
|
|
54
|
+
*/
|
|
55
|
+
consentId: {
|
|
56
|
+
type: 'string',
|
|
57
|
+
required: true,
|
|
58
|
+
fieldName: purposeJunctionConfig?.fields?.consentId || 'consentId',
|
|
59
|
+
references: {
|
|
60
|
+
model: consentConfig?.entityName || 'consent',
|
|
61
|
+
field: 'id',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Reference to the consentPurpose record this junction is associated with
|
|
67
|
+
*/
|
|
68
|
+
purposeId: {
|
|
69
|
+
type: 'string',
|
|
70
|
+
required: true,
|
|
71
|
+
fieldName: purposeJunctionConfig?.fields?.purposeId || 'purposeId',
|
|
72
|
+
references: {
|
|
73
|
+
model: purposeConfig?.entityName || 'consentPurpose',
|
|
74
|
+
field: 'id',
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Status of this specific consent-purpose relationship
|
|
80
|
+
* Default: 'active'
|
|
81
|
+
*/
|
|
82
|
+
status: {
|
|
83
|
+
type: 'string',
|
|
84
|
+
defaultValue: () => 'active',
|
|
85
|
+
required: true,
|
|
86
|
+
fieldName: purposeJunctionConfig?.fields?.status || 'status',
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Additional metadata about this specific consent-purpose relationship
|
|
91
|
+
*/
|
|
92
|
+
metadata: {
|
|
93
|
+
type: 'json',
|
|
94
|
+
required: false,
|
|
95
|
+
fieldName: purposeJunctionConfig?.fields?.metadata || 'metadata',
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* When the junction record was created
|
|
100
|
+
* Automatically set to current time by default
|
|
101
|
+
*/
|
|
102
|
+
createdAt: {
|
|
103
|
+
type: 'date',
|
|
104
|
+
defaultValue: () => new Date(),
|
|
105
|
+
required: true,
|
|
106
|
+
fieldName: purposeJunctionConfig?.fields?.createdAt || 'createdAt',
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* When the junction record was last updated
|
|
111
|
+
* Optional, set during updates
|
|
112
|
+
*/
|
|
113
|
+
updatedAt: {
|
|
114
|
+
type: 'date',
|
|
115
|
+
required: false,
|
|
116
|
+
fieldName: purposeJunctionConfig?.fields?.updatedAt || 'updatedAt',
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
// Include additional fields from plugins
|
|
120
|
+
...(junctionFields || {}),
|
|
121
|
+
|
|
122
|
+
// Include additional fields from configuration
|
|
123
|
+
...(purposeJunctionConfig?.additionalFields || {}),
|
|
124
|
+
},
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Add unique constraint to ensure a consentPurpose can only be associated with a consent once
|
|
128
|
+
*/
|
|
129
|
+
uniqueConstraints: [
|
|
130
|
+
{
|
|
131
|
+
name: 'unique_consent_purpose',
|
|
132
|
+
fields: ['consentId', 'purposeId'],
|
|
133
|
+
},
|
|
134
|
+
],
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Execution order during migrations (lower numbers run first)
|
|
138
|
+
* Junction table needs to be created after the consent and consentPurpose tables it references
|
|
139
|
+
*/
|
|
140
|
+
order: 4,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { BaseEntityConfig } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ConsentPurpose junction entity configuration
|
|
5
|
+
* @default entityName: "consentPurposeJunction", entityPrefix: "pjx"
|
|
6
|
+
*/
|
|
7
|
+
export interface ConsentPurposeJunctionEntityConfig extends BaseEntityConfig {
|
|
8
|
+
fields?: Record<string, string> & {
|
|
9
|
+
id?: string;
|
|
10
|
+
consentId?: string;
|
|
11
|
+
purposeId?: string;
|
|
12
|
+
isAccepted?: string;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import type { Where } from '~/db/adapters/types';
|
|
2
|
+
import { getWithHooks } from '~/db/hooks';
|
|
3
|
+
import type { GenericEndpointContext, RegistryContext } from '~/types';
|
|
4
|
+
import { validateEntityOutput } from '../definition';
|
|
5
|
+
import type { ConsentRecord } from './schema';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Creates and returns a set of consent record-related adapter methods to interact with the database.
|
|
9
|
+
* These methods provide a consistent interface for creating and querying consent records
|
|
10
|
+
* while applying hooks and enforcing data validation rules.
|
|
11
|
+
*
|
|
12
|
+
* @param adapter - The database adapter used for direct database operations
|
|
13
|
+
* @param ctx - The context object containing the database adapter, hooks, and options
|
|
14
|
+
* @returns An object containing type-safe consent record operations
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const recordAdapter = createRecordAdapter(
|
|
19
|
+
* databaseAdapter,
|
|
20
|
+
* createWithHooks,
|
|
21
|
+
* c15tOptions
|
|
22
|
+
* );
|
|
23
|
+
*
|
|
24
|
+
* // Create a new consent record
|
|
25
|
+
* const record = await recordAdapter.createConsentRecord({
|
|
26
|
+
* subjectId: 'sub_x1pftyoufsm7xgo1kv',
|
|
27
|
+
* consentId: 'cns_hadt8w7nngm7xmx2bn',
|
|
28
|
+
* actionType: 'given',
|
|
29
|
+
* details: { ip: '192.168.1.1', userAgent: 'Mozilla/5.0...' }
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function consentRecordRegistry({ adapter, ...ctx }: RegistryContext) {
|
|
34
|
+
const { createWithHooks } = getWithHooks(adapter, ctx);
|
|
35
|
+
return {
|
|
36
|
+
/**
|
|
37
|
+
* Creates a new consent record in the database.
|
|
38
|
+
* Automatically sets creation timestamp and applies any
|
|
39
|
+
* configured hooks during the creation process.
|
|
40
|
+
*
|
|
41
|
+
* @param record - Consent record data to create (without id and timestamp)
|
|
42
|
+
* @param context - Optional endpoint context for hooks
|
|
43
|
+
* @returns The created consent record with all fields populated
|
|
44
|
+
* @throws May throw an error if hooks prevent creation or if database operations fail
|
|
45
|
+
*/
|
|
46
|
+
createConsentRecord: async (
|
|
47
|
+
record: Omit<ConsentRecord, 'id' | 'createdAt' | 'updatedAt'> &
|
|
48
|
+
Partial<ConsentRecord>,
|
|
49
|
+
context?: GenericEndpointContext
|
|
50
|
+
) => {
|
|
51
|
+
const createdRecord = await createWithHooks({
|
|
52
|
+
data: {
|
|
53
|
+
createdAt: record.createdAt || new Date(),
|
|
54
|
+
updatedAt: record.updatedAt || new Date(),
|
|
55
|
+
...record,
|
|
56
|
+
},
|
|
57
|
+
model: 'consentRecord',
|
|
58
|
+
customFn: undefined,
|
|
59
|
+
context,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
if (!createdRecord) {
|
|
63
|
+
throw new Error(
|
|
64
|
+
'Failed to create consent record - operation returned null'
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return createdRecord as ConsentRecord;
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Finds all consent records matching specified filters.
|
|
73
|
+
* Returns records with processed output fields according to the schema configuration.
|
|
74
|
+
*
|
|
75
|
+
* @param subjectId - Optional subject ID to filter records
|
|
76
|
+
* @param consentId - Optional consent ID to filter records
|
|
77
|
+
* @param actionType - Optional action type to filter records
|
|
78
|
+
* @param limit - Optional maximum number of records to return
|
|
79
|
+
* @returns Array of consent records matching the criteria
|
|
80
|
+
*/
|
|
81
|
+
findConsentRecords: async (
|
|
82
|
+
subjectId?: string,
|
|
83
|
+
consentId?: string,
|
|
84
|
+
actionType?: string,
|
|
85
|
+
limit?: number
|
|
86
|
+
) => {
|
|
87
|
+
const whereConditions: Where<'consentRecord'> = [];
|
|
88
|
+
|
|
89
|
+
if (subjectId) {
|
|
90
|
+
whereConditions.push({
|
|
91
|
+
field: 'subjectId',
|
|
92
|
+
value: subjectId,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (consentId) {
|
|
97
|
+
whereConditions.push({
|
|
98
|
+
field: 'consentId',
|
|
99
|
+
value: consentId,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (actionType) {
|
|
104
|
+
whereConditions.push({
|
|
105
|
+
field: 'actionType',
|
|
106
|
+
value: actionType,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const records = await adapter.findMany({
|
|
111
|
+
model: 'consentRecord',
|
|
112
|
+
where: whereConditions,
|
|
113
|
+
sortBy: {
|
|
114
|
+
field: 'createdAt',
|
|
115
|
+
direction: 'desc',
|
|
116
|
+
},
|
|
117
|
+
limit,
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
return records.map((record) =>
|
|
121
|
+
validateEntityOutput('consentRecord', record, ctx.options)
|
|
122
|
+
);
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Finds a consent record by its unique ID.
|
|
127
|
+
* Returns the record with processed output fields according to the schema configuration.
|
|
128
|
+
*
|
|
129
|
+
* @param recordId - The unique identifier of the consent record
|
|
130
|
+
* @returns The consent record object if found, null otherwise
|
|
131
|
+
*/
|
|
132
|
+
findConsentRecordById: async (recordId: string) => {
|
|
133
|
+
const record = await adapter.findOne({
|
|
134
|
+
model: 'consentRecord',
|
|
135
|
+
where: [
|
|
136
|
+
{
|
|
137
|
+
field: 'id',
|
|
138
|
+
value: recordId,
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
});
|
|
142
|
+
return record
|
|
143
|
+
? validateEntityOutput('consentRecord', record, ctx.options)
|
|
144
|
+
: null;
|
|
145
|
+
},
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Finds all consent records for a specific subject.
|
|
149
|
+
* Returns records with processed output fields according to the schema configuration.
|
|
150
|
+
*
|
|
151
|
+
* @param subjectId - The subject ID to find consent records for
|
|
152
|
+
* @param limit - Optional maximum number of records to return
|
|
153
|
+
* @returns Array of consent records associated with the subject
|
|
154
|
+
*/
|
|
155
|
+
findConsentRecordsBySubjectId: async (
|
|
156
|
+
subjectId: string,
|
|
157
|
+
limit?: number
|
|
158
|
+
) => {
|
|
159
|
+
const records = await adapter.findMany({
|
|
160
|
+
model: 'consentRecord',
|
|
161
|
+
where: [
|
|
162
|
+
{
|
|
163
|
+
field: 'subjectId',
|
|
164
|
+
value: subjectId,
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
sortBy: {
|
|
168
|
+
field: 'createdAt',
|
|
169
|
+
direction: 'desc',
|
|
170
|
+
},
|
|
171
|
+
limit,
|
|
172
|
+
});
|
|
173
|
+
return records.map((record) =>
|
|
174
|
+
validateEntityOutput('consentRecord', record, ctx.options)
|
|
175
|
+
);
|
|
176
|
+
},
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Finds all consent records for a specific consent.
|
|
180
|
+
* Returns records with processed output fields according to the schema configuration.
|
|
181
|
+
*
|
|
182
|
+
* @param consentId - The consent ID to find records for
|
|
183
|
+
* @param limit - Optional maximum number of records to return
|
|
184
|
+
* @returns Array of consent records associated with the consent
|
|
185
|
+
*/
|
|
186
|
+
findConsentRecordsByConsentId: async (
|
|
187
|
+
consentId: string,
|
|
188
|
+
limit?: number
|
|
189
|
+
) => {
|
|
190
|
+
const records = await adapter.findMany({
|
|
191
|
+
model: 'consentRecord',
|
|
192
|
+
where: [
|
|
193
|
+
{
|
|
194
|
+
field: 'consentId',
|
|
195
|
+
value: consentId,
|
|
196
|
+
},
|
|
197
|
+
],
|
|
198
|
+
sortBy: {
|
|
199
|
+
field: 'createdAt',
|
|
200
|
+
direction: 'desc',
|
|
201
|
+
},
|
|
202
|
+
limit,
|
|
203
|
+
});
|
|
204
|
+
return records.map((record) =>
|
|
205
|
+
validateEntityOutput('consentRecord', record, ctx.options)
|
|
206
|
+
);
|
|
207
|
+
},
|
|
208
|
+
};
|
|
209
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zod schema for validating consent record entities.
|
|
5
|
+
*
|
|
6
|
+
* This defines the structure and validation rules for consent records:
|
|
7
|
+
* - Required fields: subjectId, actionType (given, withdrawn, updated, etc.)
|
|
8
|
+
* - Optional fields: consentId, details
|
|
9
|
+
* - Default current date/time for creation and update timestamps
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const recordData = {
|
|
14
|
+
* id: 'rec_w5qufx2a66m7xkn3ty',
|
|
15
|
+
* subjectId: 'sub_x1pftyoufsm7xgo1kv',
|
|
16
|
+
* consentId: 'cns_hadt8w7nngm7xmx2bn',
|
|
17
|
+
* actionType: 'given',
|
|
18
|
+
* details: { ip: '192.168.1.1', userAgent: 'Mozilla/5.0...' }
|
|
19
|
+
* };
|
|
20
|
+
*
|
|
21
|
+
* // Validate and parse the record data
|
|
22
|
+
* const validRecord = consentRecordSchema.parse(recordData);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export const consentRecordSchema = z.object({
|
|
26
|
+
id: z.string(),
|
|
27
|
+
subjectId: z.string(),
|
|
28
|
+
consentId: z.string().optional(),
|
|
29
|
+
actionType: z.string(),
|
|
30
|
+
details: z.record(z.unknown()).optional(),
|
|
31
|
+
createdAt: z.date().default(() => new Date()),
|
|
32
|
+
updatedAt: z.date().default(() => new Date()),
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Type definition for Record
|
|
37
|
+
*
|
|
38
|
+
* This type represents the structure of a consent record
|
|
39
|
+
* as defined by the consentRecordSchema. It includes all fields
|
|
40
|
+
* that are part of the consent record entity.
|
|
41
|
+
*/
|
|
42
|
+
export type ConsentRecord = z.infer<typeof consentRecordSchema>;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import type { Field } from '~/db/core/fields';
|
|
2
|
+
import type { C15TOptions } from '~/types';
|
|
3
|
+
import { consentRecordSchema } from './schema';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates the database table configuration for the consent record entity.
|
|
7
|
+
*
|
|
8
|
+
* This function creates a schema definition that includes all standard consent record 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 consent record table customizations
|
|
13
|
+
* @param recordFields - Additional fields from plugins to include in the consent record table
|
|
14
|
+
* @returns A complete table schema definition with fields, model name, and metadata
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const recordTableSchema = getConsentRecordTable(c15tOptions);
|
|
19
|
+
* // Use the schema for migrations or data access
|
|
20
|
+
* const migrationPlans = generateMigrations(recordTableSchema);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function getConsentRecordTable(
|
|
24
|
+
options: C15TOptions,
|
|
25
|
+
recordFields?: Record<string, Field>
|
|
26
|
+
) {
|
|
27
|
+
// Get record config, supporting both the new tables.record and legacy record format
|
|
28
|
+
const recordConfig = options.tables?.record;
|
|
29
|
+
const subjectConfig = options.tables?.subject;
|
|
30
|
+
const consentConfig = options.tables?.consent;
|
|
31
|
+
|
|
32
|
+
return {
|
|
33
|
+
/**
|
|
34
|
+
* The name of the consent record table in the database, configurable through options
|
|
35
|
+
*/
|
|
36
|
+
entityName: recordConfig?.entityName || 'consentRecord',
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* The ID prefix for the consent record table
|
|
40
|
+
* Used to generate unique prefixed IDs for records
|
|
41
|
+
*/
|
|
42
|
+
entityPrefix: recordConfig?.entityPrefix || 'rec',
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* The schema for the consent record table
|
|
46
|
+
*/
|
|
47
|
+
schema: consentRecordSchema,
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Field definitions for the consent record table
|
|
51
|
+
*/
|
|
52
|
+
fields: {
|
|
53
|
+
/**
|
|
54
|
+
* Reference to the subject associated with this consent record
|
|
55
|
+
*/
|
|
56
|
+
subjectId: {
|
|
57
|
+
type: 'string',
|
|
58
|
+
required: true,
|
|
59
|
+
fieldName: recordConfig?.fields?.subjectId || 'subjectId',
|
|
60
|
+
references: {
|
|
61
|
+
model: subjectConfig?.entityName || 'subject',
|
|
62
|
+
field: 'id',
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Optional reference to the specific consent this record is about
|
|
68
|
+
* May be null for general consent actions not related to a specific consent
|
|
69
|
+
*/
|
|
70
|
+
consentId: {
|
|
71
|
+
type: 'string',
|
|
72
|
+
required: false,
|
|
73
|
+
fieldName: recordConfig?.fields?.consentId || 'consentId',
|
|
74
|
+
references: {
|
|
75
|
+
model: consentConfig?.entityName || 'consent',
|
|
76
|
+
field: 'id',
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Type of consent action this record represents
|
|
82
|
+
* Common values: 'given', 'withdrawn', 'updated', 'expired', 'requested'
|
|
83
|
+
*/
|
|
84
|
+
actionType: {
|
|
85
|
+
type: 'string',
|
|
86
|
+
required: true,
|
|
87
|
+
fieldName: recordConfig?.fields?.actionType || 'actionType',
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Additional details about the consent action
|
|
92
|
+
* May include IP address, subject agent, reason for withdrawal, etc.
|
|
93
|
+
*/
|
|
94
|
+
details: {
|
|
95
|
+
type: 'json',
|
|
96
|
+
required: false,
|
|
97
|
+
fieldName: recordConfig?.fields?.details || 'details',
|
|
98
|
+
},
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* When the consent record was created
|
|
102
|
+
* Automatically set to current time by default
|
|
103
|
+
*/
|
|
104
|
+
createdAt: {
|
|
105
|
+
type: 'date',
|
|
106
|
+
defaultValue: () => new Date(),
|
|
107
|
+
required: true,
|
|
108
|
+
fieldName: recordConfig?.fields?.createdAt || 'createdAt',
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
// Include additional fields from plugins
|
|
112
|
+
...(recordFields || {}),
|
|
113
|
+
|
|
114
|
+
// Include additional fields from configuration
|
|
115
|
+
...(recordConfig?.additionalFields || {}),
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Execution order during migrations (lower numbers run first)
|
|
120
|
+
* Consent record table needs to be created after the subject and consent tables it references
|
|
121
|
+
*/
|
|
122
|
+
order: 4,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Record Entity Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* This module contains type definitions specific to the record entity.
|
|
5
|
+
*/
|
|
6
|
+
import type { BaseEntityConfig } from '../types';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Record entity configuration
|
|
10
|
+
* @default entityName: "record", entityPrefix: "rec"
|
|
11
|
+
*/
|
|
12
|
+
export interface ConsentRecordEntityConfig extends BaseEntityConfig {
|
|
13
|
+
fields?: Record<string, string> & {
|
|
14
|
+
id?: string;
|
|
15
|
+
subjectId?: string;
|
|
16
|
+
consentId?: string;
|
|
17
|
+
actionType?: string;
|
|
18
|
+
details?: string;
|
|
19
|
+
createdAt?: string;
|
|
20
|
+
};
|
|
21
|
+
}
|