@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,219 @@
|
|
|
1
|
+
import type { Where } from '~/db/adapters/types';
|
|
2
|
+
import { getWithHooks } from '~/db/hooks';
|
|
3
|
+
import type { RegistryContext } from '~/types';
|
|
4
|
+
import type { GenericEndpointContext } from '~/types';
|
|
5
|
+
import { validateEntityOutput } from '../definition';
|
|
6
|
+
import type { Withdrawal } from './schema';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Creates and returns a set of consent withdrawal adapter methods to interact with the database.
|
|
10
|
+
* These methods provide a consistent interface for creating and querying consentWithdrawal records
|
|
11
|
+
* while applying hooks and enforcing data validation rules.
|
|
12
|
+
*
|
|
13
|
+
* @param adapter - The database adapter used for direct database operations
|
|
14
|
+
* @param ctx - The context object containing the database adapter, hooks, and options
|
|
15
|
+
* @returns An object containing type-safe consent withdrawal operations
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* const withdrawalAdapter = createConsentWithdrawalAdapter(
|
|
20
|
+
* databaseAdapter,
|
|
21
|
+
* createWithHooks,
|
|
22
|
+
* c15tOptions
|
|
23
|
+
* );
|
|
24
|
+
*
|
|
25
|
+
* // Create a new consentWithdrawal record
|
|
26
|
+
* const consentWithdrawal = await withdrawalAdapter.createConsentWithdrawal({
|
|
27
|
+
* consentId: 'cns_hadt8w7nngm7xmx2bn',
|
|
28
|
+
* subjectId: 'sub_x1pftyoufsm7xgo1kv',
|
|
29
|
+
* withdrawalReason: 'No longer wish to receive marketing emails',
|
|
30
|
+
* withdrawalMethod: 'subject-initiated'
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function consentWithdrawalRegistry({
|
|
35
|
+
adapter,
|
|
36
|
+
...ctx
|
|
37
|
+
}: RegistryContext) {
|
|
38
|
+
const { createWithHooks } = getWithHooks(adapter, ctx);
|
|
39
|
+
return {
|
|
40
|
+
/**
|
|
41
|
+
* Creates a new consent withdrawal record in the database.
|
|
42
|
+
* Automatically sets creation timestamp and applies any
|
|
43
|
+
* configured hooks during the creation process.
|
|
44
|
+
*
|
|
45
|
+
* @param consentWithdrawal - Withdrawal data to create (without id and timestamp)
|
|
46
|
+
* @param context - Optional endpoint context for hooks
|
|
47
|
+
* @returns The created consentWithdrawal record with all fields populated
|
|
48
|
+
* @throws May throw an error if hooks prevent creation or if database operations fail
|
|
49
|
+
*/
|
|
50
|
+
createConsentWithdrawal: async (
|
|
51
|
+
consentWithdrawal: Omit<Withdrawal, 'id' | 'createdAt'> &
|
|
52
|
+
Partial<Withdrawal>,
|
|
53
|
+
context?: GenericEndpointContext
|
|
54
|
+
) => {
|
|
55
|
+
const createdWithdrawal = await createWithHooks({
|
|
56
|
+
data: {
|
|
57
|
+
createdAt: new Date(),
|
|
58
|
+
...consentWithdrawal,
|
|
59
|
+
},
|
|
60
|
+
model: 'consentWithdrawal',
|
|
61
|
+
customFn: undefined,
|
|
62
|
+
context,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
if (!createdWithdrawal) {
|
|
66
|
+
throw new Error(
|
|
67
|
+
'Failed to create consent withdrawal - operation returned null'
|
|
68
|
+
);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
return validateEntityOutput(
|
|
72
|
+
'consentWithdrawal',
|
|
73
|
+
createdWithdrawal,
|
|
74
|
+
ctx.options
|
|
75
|
+
);
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Finds all consentWithdrawal records matching specified filters.
|
|
80
|
+
* Returns consentWithdrawals with processed output fields according to the schema configuration.
|
|
81
|
+
*
|
|
82
|
+
* @param subjectId - Optional subject ID to filter consentWithdrawals
|
|
83
|
+
* @param consentId - Optional consent ID to filter consentWithdrawals
|
|
84
|
+
* @param limit - Optional maximum number of records to return
|
|
85
|
+
* @returns Array of consentWithdrawal records matching the criteria
|
|
86
|
+
*/
|
|
87
|
+
findConsentWithdrawals: async (
|
|
88
|
+
subjectId?: string,
|
|
89
|
+
consentId?: string,
|
|
90
|
+
limit?: number
|
|
91
|
+
) => {
|
|
92
|
+
const whereConditions: Where<'consentWithdrawal'> = [];
|
|
93
|
+
|
|
94
|
+
if (subjectId) {
|
|
95
|
+
whereConditions.push({
|
|
96
|
+
field: 'subjectId',
|
|
97
|
+
value: subjectId,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (consentId) {
|
|
102
|
+
whereConditions.push({
|
|
103
|
+
field: 'consentId',
|
|
104
|
+
value: consentId,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const consentWithdrawals = await adapter.findMany({
|
|
109
|
+
model: 'consentWithdrawal',
|
|
110
|
+
where: whereConditions,
|
|
111
|
+
sortBy: {
|
|
112
|
+
field: 'createdAt',
|
|
113
|
+
direction: 'desc',
|
|
114
|
+
},
|
|
115
|
+
limit,
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
return consentWithdrawals.map((consentWithdrawal) =>
|
|
119
|
+
validateEntityOutput(
|
|
120
|
+
'consentWithdrawal',
|
|
121
|
+
consentWithdrawal,
|
|
122
|
+
ctx.options
|
|
123
|
+
)
|
|
124
|
+
);
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Finds a consentWithdrawal record by its unique ID.
|
|
129
|
+
* Returns the consentWithdrawal with processed output fields according to the schema configuration.
|
|
130
|
+
*
|
|
131
|
+
* @param withdrawalId - The unique identifier of the consentWithdrawal record
|
|
132
|
+
* @returns The consentWithdrawal object if found, null otherwise
|
|
133
|
+
*/
|
|
134
|
+
findConsentWithdrawalById: async (withdrawalId: string) => {
|
|
135
|
+
const consentWithdrawal = await adapter.findOne({
|
|
136
|
+
model: 'consentWithdrawal',
|
|
137
|
+
where: [
|
|
138
|
+
{
|
|
139
|
+
field: 'id',
|
|
140
|
+
value: withdrawalId,
|
|
141
|
+
},
|
|
142
|
+
],
|
|
143
|
+
});
|
|
144
|
+
return consentWithdrawal
|
|
145
|
+
? validateEntityOutput(
|
|
146
|
+
'consentWithdrawal',
|
|
147
|
+
consentWithdrawal,
|
|
148
|
+
ctx.options
|
|
149
|
+
)
|
|
150
|
+
: null;
|
|
151
|
+
},
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Finds all consentWithdrawal records for a specific subject.
|
|
155
|
+
* Returns consentWithdrawals with processed output fields according to the schema configuration.
|
|
156
|
+
*
|
|
157
|
+
* @param subjectId - The subject ID to find consentWithdrawals for
|
|
158
|
+
* @param limit - Optional maximum number of records to return
|
|
159
|
+
* @returns Array of consentWithdrawal records associated with the subject
|
|
160
|
+
*/
|
|
161
|
+
findConsentWithdrawalsBySubjectId: async (
|
|
162
|
+
subjectId: string,
|
|
163
|
+
limit?: number
|
|
164
|
+
) => {
|
|
165
|
+
const consentWithdrawals = await adapter.findMany({
|
|
166
|
+
model: 'consentWithdrawal',
|
|
167
|
+
where: [
|
|
168
|
+
{
|
|
169
|
+
field: 'subjectId',
|
|
170
|
+
value: subjectId,
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
sortBy: {
|
|
174
|
+
field: 'createdAt',
|
|
175
|
+
direction: 'desc',
|
|
176
|
+
},
|
|
177
|
+
limit,
|
|
178
|
+
});
|
|
179
|
+
return consentWithdrawals.map((consentWithdrawal) =>
|
|
180
|
+
validateEntityOutput(
|
|
181
|
+
'consentWithdrawal',
|
|
182
|
+
consentWithdrawal,
|
|
183
|
+
ctx.options
|
|
184
|
+
)
|
|
185
|
+
);
|
|
186
|
+
},
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Finds a consentWithdrawal record for a specific consent.
|
|
190
|
+
* Returns the consentWithdrawal with processed output fields according to the schema configuration.
|
|
191
|
+
* This is useful when you need to know if and why a specific consent was withdrawn.
|
|
192
|
+
*
|
|
193
|
+
* @param consentId - The consent ID to find consentWithdrawal for
|
|
194
|
+
* @returns The consentWithdrawal record if found, null otherwise
|
|
195
|
+
*/
|
|
196
|
+
findConsentWithdrawalByConsentId: async (consentId: string) => {
|
|
197
|
+
const consentWithdrawal = await adapter.findOne({
|
|
198
|
+
model: 'consentWithdrawal',
|
|
199
|
+
where: [
|
|
200
|
+
{
|
|
201
|
+
field: 'consentId',
|
|
202
|
+
value: consentId,
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
sortBy: {
|
|
206
|
+
field: 'createdAt',
|
|
207
|
+
direction: 'desc',
|
|
208
|
+
},
|
|
209
|
+
});
|
|
210
|
+
return consentWithdrawal
|
|
211
|
+
? validateEntityOutput(
|
|
212
|
+
'consentWithdrawal',
|
|
213
|
+
consentWithdrawal,
|
|
214
|
+
ctx.options
|
|
215
|
+
)
|
|
216
|
+
: null;
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zod schema for validating consent withdrawal entities.
|
|
5
|
+
*
|
|
6
|
+
* This defines the structure and validation rules for consentWithdrawal records:
|
|
7
|
+
* - Required fields: consentId, subjectId
|
|
8
|
+
* - Optional fields: withdrawalReason, withdrawalMethod, ipAddress, metadata
|
|
9
|
+
* - Default current date/time for creation and update timestamps
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const withdrawalData = {
|
|
14
|
+
* id: 'wdr_w5qufx2a66m7xkn3ty',
|
|
15
|
+
* consentId: 'cns_hadt8w7nngm7xmx2bn',
|
|
16
|
+
* subjectId: 'sub_x1pftyoufsm7xgo1kv',
|
|
17
|
+
* withdrawalReason: 'No longer wish to receive marketing emails',
|
|
18
|
+
* withdrawalMethod: 'subject-initiated',
|
|
19
|
+
* ipAddress: '192.168.1.1'
|
|
20
|
+
* };
|
|
21
|
+
*
|
|
22
|
+
* // Validate and parse the consentWithdrawal data
|
|
23
|
+
* const validWithdrawal = consentWithdrawalSchema.parse(withdrawalData);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export const consentWithdrawalSchema = z.object({
|
|
27
|
+
id: z.string(),
|
|
28
|
+
consentId: z.string(),
|
|
29
|
+
subjectId: z.string(),
|
|
30
|
+
withdrawalReason: z.string().optional(),
|
|
31
|
+
withdrawalMethod: z
|
|
32
|
+
.enum(['subject-initiated', 'automatic-expiry', 'admin', 'api', 'other'])
|
|
33
|
+
.default('subject-initiated'),
|
|
34
|
+
ipAddress: z.string().optional(),
|
|
35
|
+
userAgent: z.string().optional(),
|
|
36
|
+
metadata: z.record(z.unknown()).optional(),
|
|
37
|
+
createdAt: z.date().default(() => new Date()),
|
|
38
|
+
updatedAt: z.date().default(() => new Date()),
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Type definition for Withdrawal
|
|
43
|
+
*
|
|
44
|
+
* This type represents the structure of a consent withdrawal record
|
|
45
|
+
* as defined by the consentWithdrawalSchema. It includes all fields
|
|
46
|
+
* that are part of the consentWithdrawal entity.
|
|
47
|
+
*/
|
|
48
|
+
export type Withdrawal = z.infer<typeof consentWithdrawalSchema>;
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import type { Field } from '~/db/core/fields';
|
|
2
|
+
import type { C15TOptions } from '~/types';
|
|
3
|
+
import { consentWithdrawalSchema } from './schema';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates the database table configuration for the consent withdrawal entity.
|
|
7
|
+
*
|
|
8
|
+
* This function creates a schema definition that includes all standard consentWithdrawal 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 consentWithdrawal table customizations
|
|
13
|
+
* @param withdrawalFields - Additional fields from plugins to include in the consentWithdrawal table
|
|
14
|
+
* @returns A complete table schema definition with fields, model name, and metadata
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const withdrawalTableSchema = getConsentWithdrawalTable(c15tOptions);
|
|
19
|
+
* // Use the schema for migrations or data access
|
|
20
|
+
* const migrationPlans = generateMigrations(withdrawalTableSchema);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function getConsentWithdrawalTable(
|
|
24
|
+
options: C15TOptions,
|
|
25
|
+
withdrawalFields?: Record<string, Field>
|
|
26
|
+
) {
|
|
27
|
+
const consentWithdrawalConfig = options.tables?.consentWithdrawal;
|
|
28
|
+
const consentConfig = options.tables?.consent;
|
|
29
|
+
const subjectConfig = options.tables?.subject;
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
/**
|
|
33
|
+
* The name of the consentWithdrawal table in the database, configurable through options
|
|
34
|
+
*/
|
|
35
|
+
entityName: consentWithdrawalConfig?.entityName || 'consentWithdrawal',
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The ID prefix for the consentWithdrawal table
|
|
39
|
+
* Used to generate unique prefixed IDs for consentWithdrawals
|
|
40
|
+
*/
|
|
41
|
+
entityPrefix: consentWithdrawalConfig?.entityPrefix || 'wdr',
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* The schema for the consent withdrawal table
|
|
45
|
+
*/
|
|
46
|
+
schema: consentWithdrawalSchema,
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Field definitions for the consent withdrawal table
|
|
50
|
+
*/
|
|
51
|
+
fields: {
|
|
52
|
+
/**
|
|
53
|
+
* Reference to the consent that was withdrawn
|
|
54
|
+
*/
|
|
55
|
+
consentId: {
|
|
56
|
+
type: 'string',
|
|
57
|
+
required: true,
|
|
58
|
+
fieldName: consentWithdrawalConfig?.fields?.consentId || 'consentId',
|
|
59
|
+
references: {
|
|
60
|
+
model: consentConfig?.entityName || 'consent',
|
|
61
|
+
field: 'id',
|
|
62
|
+
},
|
|
63
|
+
},
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Reference to the subject who withdrew consent
|
|
67
|
+
*/
|
|
68
|
+
subjectId: {
|
|
69
|
+
type: 'string',
|
|
70
|
+
required: true,
|
|
71
|
+
fieldName: consentWithdrawalConfig?.fields?.subjectId || 'subjectId',
|
|
72
|
+
references: {
|
|
73
|
+
model: subjectConfig?.entityName || 'subject',
|
|
74
|
+
field: 'id',
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Reason provided for withdrawing consent
|
|
80
|
+
*/
|
|
81
|
+
withdrawalReason: {
|
|
82
|
+
type: 'string',
|
|
83
|
+
required: false,
|
|
84
|
+
fieldName:
|
|
85
|
+
consentWithdrawalConfig?.fields?.withdrawalReason ||
|
|
86
|
+
'withdrawalReason',
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Method by which consent was withdrawn
|
|
91
|
+
* Common values: 'subject-initiated', 'automatic-expiry', 'admin'
|
|
92
|
+
*/
|
|
93
|
+
withdrawalMethod: {
|
|
94
|
+
type: 'string',
|
|
95
|
+
defaultValue: () => 'subject-initiated',
|
|
96
|
+
required: true,
|
|
97
|
+
fieldName:
|
|
98
|
+
consentWithdrawalConfig?.fields?.withdrawalMethod ||
|
|
99
|
+
'withdrawalMethod',
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* IP address from which the consentWithdrawal was initiated
|
|
104
|
+
*/
|
|
105
|
+
ipAddress: {
|
|
106
|
+
type: 'string',
|
|
107
|
+
required: false,
|
|
108
|
+
fieldName: consentWithdrawalConfig?.fields?.ipAddress || 'ipAddress',
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Subject agent (browser/device) from which the consentWithdrawal was initiated
|
|
113
|
+
*/
|
|
114
|
+
userAgent: {
|
|
115
|
+
type: 'string',
|
|
116
|
+
required: false,
|
|
117
|
+
fieldName: consentWithdrawalConfig?.fields?.userAgent || 'userAgent',
|
|
118
|
+
},
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Additional metadata about the consentWithdrawal
|
|
122
|
+
*/
|
|
123
|
+
metadata: {
|
|
124
|
+
type: 'json',
|
|
125
|
+
required: false,
|
|
126
|
+
fieldName: consentWithdrawalConfig?.fields?.metadata || 'metadata',
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* When the consentWithdrawal record was created
|
|
131
|
+
* Automatically set to current time by default
|
|
132
|
+
*/
|
|
133
|
+
createdAt: {
|
|
134
|
+
type: 'date',
|
|
135
|
+
defaultValue: () => new Date(),
|
|
136
|
+
required: true,
|
|
137
|
+
fieldName: consentWithdrawalConfig?.fields?.createdAt || 'createdAt',
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
// Include additional fields from plugins
|
|
141
|
+
...(withdrawalFields || {}),
|
|
142
|
+
|
|
143
|
+
// Include additional fields from configuration
|
|
144
|
+
...(consentWithdrawalConfig?.additionalFields || {}),
|
|
145
|
+
},
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Add unique constraint to ensure a consent can only be withdrawn once
|
|
149
|
+
* (If this constraint is not desired, it can be disabled in options)
|
|
150
|
+
*/
|
|
151
|
+
uniqueConstraints:
|
|
152
|
+
consentWithdrawalConfig?.preventMultipleWithdrawals !== false
|
|
153
|
+
? [
|
|
154
|
+
{
|
|
155
|
+
name: 'unique_consent_withdrawal',
|
|
156
|
+
fields: ['consentId'],
|
|
157
|
+
},
|
|
158
|
+
]
|
|
159
|
+
: [],
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Add indexes for better query performance
|
|
163
|
+
*/
|
|
164
|
+
indexes: [
|
|
165
|
+
{
|
|
166
|
+
name: 'subject_id_index',
|
|
167
|
+
fields: ['subjectId'],
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
name: 'created_at_index',
|
|
171
|
+
fields: ['createdAt'],
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Execution order during migrations (lower numbers run first)
|
|
177
|
+
* Withdrawal table needs to be created after the consent and subject tables it references
|
|
178
|
+
*/
|
|
179
|
+
order: 4,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { BaseEntityConfig } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Withdrawal entity configuration
|
|
5
|
+
* @default entityName: "consentWithdrawal", entityPrefix: "wdr"
|
|
6
|
+
*/
|
|
7
|
+
export interface ConsentWithdrawalEntityConfig extends BaseEntityConfig {
|
|
8
|
+
fields?: Record<string, string> & {
|
|
9
|
+
id?: string;
|
|
10
|
+
consentId?: string;
|
|
11
|
+
revokedAt?: string;
|
|
12
|
+
revocationReason?: string;
|
|
13
|
+
method?: string;
|
|
14
|
+
actor?: string;
|
|
15
|
+
metadata?: string;
|
|
16
|
+
createdAt?: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Prevent multiple consentWithdrawals for the same consent
|
|
21
|
+
*
|
|
22
|
+
* If true, a subject can only have one consentWithdrawal record per consent,
|
|
23
|
+
* preventing multiple revocation records for the same consent.
|
|
24
|
+
* This helps maintain data integrity and clearer consent history.
|
|
25
|
+
*
|
|
26
|
+
* @default false
|
|
27
|
+
*/
|
|
28
|
+
preventMultipleWithdrawals?: boolean;
|
|
29
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import type { C15TOptions } from '~/types';
|
|
2
|
+
import type { PluginSchema } from '../core/types';
|
|
3
|
+
import {
|
|
4
|
+
getAuditLogTable,
|
|
5
|
+
getConsentGeoLocationTable,
|
|
6
|
+
getConsentPolicyTable,
|
|
7
|
+
// getGeoLocationTable,
|
|
8
|
+
getConsentRecordTable,
|
|
9
|
+
getConsentTable,
|
|
10
|
+
getConsentWithdrawalTable,
|
|
11
|
+
getDomainTable,
|
|
12
|
+
getGeoLocationTable,
|
|
13
|
+
getPurposeJunctionTable,
|
|
14
|
+
getPurposeTable,
|
|
15
|
+
getSubjectTable,
|
|
16
|
+
} from './index';
|
|
17
|
+
import type { InferTableShape } from './schemas';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Retrieves all consent-related database table definitions
|
|
21
|
+
*
|
|
22
|
+
* This function combines the core tables with any additional tables
|
|
23
|
+
* defined by plugins. It handles merging plugin-defined fields with
|
|
24
|
+
* the standard tables and ensures all table definitions are properly
|
|
25
|
+
* structured for use by database adapters.
|
|
26
|
+
*
|
|
27
|
+
* @param options - The c15t configuration options
|
|
28
|
+
* @returns A complete schema mapping containing all table definitions
|
|
29
|
+
*
|
|
30
|
+
* @remarks
|
|
31
|
+
* Each table definition includes both field definitions and the physical
|
|
32
|
+
* entity name used in the database. Plugins can extend core tables by
|
|
33
|
+
* defining additional fields, which will be merged with the standard fields.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* // Get all tables with default configuration
|
|
38
|
+
* const tables = getConsentTables(options);
|
|
39
|
+
*
|
|
40
|
+
* // Access fields for the consent table
|
|
41
|
+
* const consentFields = tables.consent.fields;
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export const getConsentTables = (options: C15TOptions) => {
|
|
45
|
+
const pluginSchema = options.plugins?.reduce((acc, plugin) => {
|
|
46
|
+
const schema = plugin.schema;
|
|
47
|
+
if (!schema) {
|
|
48
|
+
return acc;
|
|
49
|
+
}
|
|
50
|
+
for (const [key, value] of Object.entries(schema)) {
|
|
51
|
+
acc[key] = {
|
|
52
|
+
fields: {
|
|
53
|
+
...acc[key]?.fields,
|
|
54
|
+
...value.fields,
|
|
55
|
+
},
|
|
56
|
+
entityName: value.entityName || key,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return acc;
|
|
60
|
+
}, {} as PluginSchema);
|
|
61
|
+
|
|
62
|
+
const {
|
|
63
|
+
subject,
|
|
64
|
+
consentPurpose,
|
|
65
|
+
consentPolicy,
|
|
66
|
+
domain,
|
|
67
|
+
geoLocation,
|
|
68
|
+
consent,
|
|
69
|
+
consentPurposeJunction,
|
|
70
|
+
record,
|
|
71
|
+
consentGeoLocation,
|
|
72
|
+
consentWithdrawal,
|
|
73
|
+
auditLog,
|
|
74
|
+
...pluginTables
|
|
75
|
+
} = pluginSchema || {};
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
subject: getSubjectTable(options, subject?.fields),
|
|
79
|
+
consentPurpose: getPurposeTable(options, consentPurpose?.fields),
|
|
80
|
+
consentPolicy: getConsentPolicyTable(options, consentPolicy?.fields),
|
|
81
|
+
domain: getDomainTable(options, domain?.fields),
|
|
82
|
+
consent: getConsentTable(options, consent?.fields),
|
|
83
|
+
consentPurposeJunction: getPurposeJunctionTable(
|
|
84
|
+
options,
|
|
85
|
+
consentPurposeJunction?.fields
|
|
86
|
+
),
|
|
87
|
+
consentRecord: getConsentRecordTable(options, record?.fields),
|
|
88
|
+
consentGeoLocation: getConsentGeoLocationTable(
|
|
89
|
+
options,
|
|
90
|
+
consentGeoLocation?.fields
|
|
91
|
+
),
|
|
92
|
+
consentWithdrawal: getConsentWithdrawalTable(
|
|
93
|
+
options,
|
|
94
|
+
consentWithdrawal?.fields
|
|
95
|
+
),
|
|
96
|
+
auditLog: getAuditLogTable(options, auditLog?.fields),
|
|
97
|
+
geoLocation: getGeoLocationTable(options, geoLocation?.fields),
|
|
98
|
+
...pluginTables,
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Type representing the complete database schema for c15t
|
|
104
|
+
*
|
|
105
|
+
* This type captures the full structure of all tables in the database,
|
|
106
|
+
* including core tables and any plugin-defined tables. It's derived from
|
|
107
|
+
* the return type of `getConsentTables()`.
|
|
108
|
+
*
|
|
109
|
+
* @remarks
|
|
110
|
+
* This is a key type for type-safety throughout the codebase, as it
|
|
111
|
+
* ensures that table names and field references are validated at compile time.
|
|
112
|
+
* It's used as a basis for many other type definitions in the database layer.
|
|
113
|
+
*
|
|
114
|
+
* @example
|
|
115
|
+
* ```typescript
|
|
116
|
+
* // Type-safe reference to a specific table
|
|
117
|
+
* function processTable<TableName extends keyof C15TDBSchema>(
|
|
118
|
+
* tableName: TableName,
|
|
119
|
+
* data: Record<string, unknown>
|
|
120
|
+
* ) {
|
|
121
|
+
* const tableFields = getConsentTables(options)[tableName].fields;
|
|
122
|
+
* // Process with type safety...
|
|
123
|
+
* }
|
|
124
|
+
* ```
|
|
125
|
+
*/
|
|
126
|
+
export type C15TDBSchema = ReturnType<typeof getConsentTables>;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Type to get all output fields of a table by its name
|
|
130
|
+
* This type extracts only the fields that are included in output operations,
|
|
131
|
+
* automatically excluding fields marked with { returned: false }.
|
|
132
|
+
* It also resolves relationships between tables.
|
|
133
|
+
*/
|
|
134
|
+
export type EntityOutputFields<TableName extends keyof C15TDBSchema> =
|
|
135
|
+
InferTableShape<TableName>;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Type to get all input fields of a table by its name
|
|
139
|
+
* This type extracts only the fields that are allowed for input operations,
|
|
140
|
+
* automatically excluding fields marked with { input: false }.
|
|
141
|
+
*/
|
|
142
|
+
export type EntityInputFields<TableName extends keyof C15TDBSchema> = Omit<
|
|
143
|
+
InferTableShape<TableName>,
|
|
144
|
+
'id' | 'createdAt' | 'updatedAt'
|
|
145
|
+
>;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Validates output data against table schema using Zod
|
|
149
|
+
*
|
|
150
|
+
* This function validates and transforms output data according to the
|
|
151
|
+
* schema definition for a specific table. It ensures that all values match
|
|
152
|
+
* their expected types and excludes fields marked as not to be returned.
|
|
153
|
+
*
|
|
154
|
+
* @typeParam TableName - The table name from C15TDBSchema
|
|
155
|
+
* @param tableName - The name of the table to validate against
|
|
156
|
+
* @param data - The data to validate
|
|
157
|
+
* @param options - The C15TOptions instance
|
|
158
|
+
* @returns Validated and typed data
|
|
159
|
+
* @throws {Error} If the table is not found or validation fails
|
|
160
|
+
*
|
|
161
|
+
* @remarks
|
|
162
|
+
* This function is particularly useful for validating data received from
|
|
163
|
+
* external sources or database adapters before processing it in application logic.
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```typescript
|
|
167
|
+
* // Validate data retrieved from an external API
|
|
168
|
+
* try {
|
|
169
|
+
* const validSubjectOutput = validateEntityOutput(
|
|
170
|
+
* 'subject',
|
|
171
|
+
* fetchedSubjectData,
|
|
172
|
+
* options
|
|
173
|
+
* );
|
|
174
|
+
*
|
|
175
|
+
* // validSubjectOutput is now typed as EntityOutputFields<'subject'>
|
|
176
|
+
* displaySubjectProfile(validSubjectOutput);
|
|
177
|
+
* } catch (error) {
|
|
178
|
+
* console.error('Output validation failed:', error.message);
|
|
179
|
+
* }
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
export function validateEntityOutput<TableName extends keyof C15TDBSchema>(
|
|
183
|
+
tableName: TableName,
|
|
184
|
+
data: Record<string, unknown>,
|
|
185
|
+
options: C15TOptions
|
|
186
|
+
): EntityOutputFields<TableName> {
|
|
187
|
+
const tables = getConsentTables(options);
|
|
188
|
+
const table = tables[tableName];
|
|
189
|
+
|
|
190
|
+
if (!table) {
|
|
191
|
+
throw new Error(`Table ${tableName} not found`);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Validate and return data using Zod schema
|
|
195
|
+
return table.schema.parse(data) as EntityOutputFields<TableName>;
|
|
196
|
+
}
|