@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,188 @@
|
|
|
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 { ConsentPurpose } from './schema';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Creates and returns a set of consent consentPurpose-related adapter methods to interact with the database.
|
|
9
|
+
* These methods provide a consistent interface for creating, finding, and updating
|
|
10
|
+
* consent consentPurpose records 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 consentPurpose operations
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const purposeAdapter = createConsentPurposeAdapter(
|
|
19
|
+
* databaseAdapter,
|
|
20
|
+
* createWithHooks,
|
|
21
|
+
* updateWithHooks,
|
|
22
|
+
* c15tOptions
|
|
23
|
+
* );
|
|
24
|
+
*
|
|
25
|
+
* // Create a new consent consentPurpose
|
|
26
|
+
* const consentPurpose = await purposeAdapter.createConsentPurpose({
|
|
27
|
+
* code: 'pur_e8zyhgozr3im7xj59it',
|
|
28
|
+
* name: 'Marketing Communications',
|
|
29
|
+
* description: 'Allow us to send you marketing materials',
|
|
30
|
+
* isEssential: false
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function consentPurposeRegistry({ adapter, ...ctx }: RegistryContext) {
|
|
35
|
+
const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
|
|
36
|
+
return {
|
|
37
|
+
/**
|
|
38
|
+
* Creates a new consent consentPurpose record in the database.
|
|
39
|
+
* Automatically sets creation and update timestamps and applies any
|
|
40
|
+
* configured hooks during the creation process.
|
|
41
|
+
*
|
|
42
|
+
* @param consentPurpose - ConsentPurpose data to create (without id and timestamps)
|
|
43
|
+
* @param context - Optional endpoint context for hooks
|
|
44
|
+
* @returns The created consentPurpose with all fields populated
|
|
45
|
+
* @throws May throw an error if hooks prevent creation or if database operations fail
|
|
46
|
+
*/
|
|
47
|
+
createConsentPurpose: async (
|
|
48
|
+
consentPurpose: Omit<ConsentPurpose, 'id' | 'createdAt' | 'updatedAt'> &
|
|
49
|
+
Partial<ConsentPurpose>,
|
|
50
|
+
context?: GenericEndpointContext
|
|
51
|
+
) => {
|
|
52
|
+
const createdPurpose = await createWithHooks({
|
|
53
|
+
data: {
|
|
54
|
+
id: consentPurpose.id || '',
|
|
55
|
+
createdAt: new Date(),
|
|
56
|
+
updatedAt: new Date(),
|
|
57
|
+
...consentPurpose,
|
|
58
|
+
},
|
|
59
|
+
model: 'consentPurpose',
|
|
60
|
+
context,
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
if (!createdPurpose) {
|
|
64
|
+
throw new Error(
|
|
65
|
+
'Failed to create consent consentPurpose - operation returned null'
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return validateEntityOutput(
|
|
70
|
+
'consentPurpose',
|
|
71
|
+
createdPurpose,
|
|
72
|
+
ctx.options
|
|
73
|
+
);
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Finds all consent purposes, optionally including inactive ones.
|
|
78
|
+
* Returns purposes with processed output fields according to the schema configuration.
|
|
79
|
+
*
|
|
80
|
+
* @param includeInactive - Whether to include inactive purposes (default: false)
|
|
81
|
+
* @returns Array of consent purposes matching the criteria
|
|
82
|
+
*/
|
|
83
|
+
findConsentPurposes: async (includeInactive?: boolean) => {
|
|
84
|
+
const whereConditions: Where<'consentPurpose'> = [];
|
|
85
|
+
|
|
86
|
+
if (!includeInactive) {
|
|
87
|
+
whereConditions.push({
|
|
88
|
+
field: 'isActive',
|
|
89
|
+
value: true,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const purposes = await adapter.findMany({
|
|
94
|
+
model: 'consentPurpose',
|
|
95
|
+
where: whereConditions,
|
|
96
|
+
sortBy: {
|
|
97
|
+
field: 'createdAt',
|
|
98
|
+
direction: 'asc',
|
|
99
|
+
},
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
return purposes.map((consentPurpose) =>
|
|
103
|
+
validateEntityOutput('consentPurpose', consentPurpose, ctx.options)
|
|
104
|
+
);
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Finds a consent consentPurpose by its unique ID.
|
|
109
|
+
* Returns the consentPurpose with processed output fields according to the schema configuration.
|
|
110
|
+
*
|
|
111
|
+
* @param purposeId - The unique identifier of the consentPurpose
|
|
112
|
+
* @returns The consentPurpose object if found, null otherwise
|
|
113
|
+
*/
|
|
114
|
+
findConsentPurposeById: async (purposeId: string) => {
|
|
115
|
+
const consentPurpose = await adapter.findOne({
|
|
116
|
+
model: 'consentPurpose',
|
|
117
|
+
where: [
|
|
118
|
+
{
|
|
119
|
+
field: 'id',
|
|
120
|
+
value: purposeId,
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
});
|
|
124
|
+
return consentPurpose
|
|
125
|
+
? validateEntityOutput('consentPurpose', consentPurpose, ctx.options)
|
|
126
|
+
: null;
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Finds a consent consentPurpose by its unique code.
|
|
131
|
+
* Returns the consentPurpose with processed output fields according to the schema configuration.
|
|
132
|
+
*
|
|
133
|
+
* @param code - The unique code of the consentPurpose
|
|
134
|
+
* @returns The consentPurpose object if found, null otherwise
|
|
135
|
+
*/
|
|
136
|
+
findConsentPurposeByCode: async (code: string) => {
|
|
137
|
+
const consentPurpose = await adapter.findOne({
|
|
138
|
+
model: 'consentPurpose',
|
|
139
|
+
where: [
|
|
140
|
+
{
|
|
141
|
+
field: 'code',
|
|
142
|
+
value: code,
|
|
143
|
+
},
|
|
144
|
+
],
|
|
145
|
+
});
|
|
146
|
+
return consentPurpose
|
|
147
|
+
? validateEntityOutput('consentPurpose', consentPurpose, ctx.options)
|
|
148
|
+
: null;
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
*
|
|
153
|
+
/**
|
|
154
|
+
*
|
|
155
|
+
* Updates an existing consent consentPurpose record by ID.
|
|
156
|
+
* Applies any configured hooks during the update process and
|
|
157
|
+
* processes the output according to schema configuration.
|
|
158
|
+
*
|
|
159
|
+
* @param purposeId - The unique identifier of the consentPurpose to update
|
|
160
|
+
* @param data - The fields to update on the consentPurpose record
|
|
161
|
+
* @param context - Optional endpoint context for hooks
|
|
162
|
+
* @returns The updated consentPurpose if successful, null if not found or hooks prevented update
|
|
163
|
+
*/
|
|
164
|
+
updateConsentPurpose: async (
|
|
165
|
+
purposeId: string,
|
|
166
|
+
data: Partial<ConsentPurpose>,
|
|
167
|
+
context?: GenericEndpointContext
|
|
168
|
+
) => {
|
|
169
|
+
const consentPurpose = await updateWithHooks({
|
|
170
|
+
data: {
|
|
171
|
+
...data,
|
|
172
|
+
updatedAt: new Date(),
|
|
173
|
+
},
|
|
174
|
+
where: [
|
|
175
|
+
{
|
|
176
|
+
field: 'id',
|
|
177
|
+
value: purposeId,
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
model: 'consentPurpose',
|
|
181
|
+
context,
|
|
182
|
+
});
|
|
183
|
+
return consentPurpose
|
|
184
|
+
? validateEntityOutput('consentPurpose', consentPurpose, ctx.options)
|
|
185
|
+
: null;
|
|
186
|
+
},
|
|
187
|
+
};
|
|
188
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zod schema for validating consent consentPurpose entities.
|
|
5
|
+
*
|
|
6
|
+
* This defines the structure and validation rules for consent consentPurpose records:
|
|
7
|
+
* - Required fields: code, name, description
|
|
8
|
+
* - Default value of false for isEssential
|
|
9
|
+
* - Default value of true for isActive
|
|
10
|
+
* - Optional fields for dataCategory and legalBasis
|
|
11
|
+
* - Default current date/time for creation and update timestamps
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* const purposeData = {
|
|
16
|
+
* id: 'pur_e8zyhgozr3im7xj59it',
|
|
17
|
+
* code: 'marketing',
|
|
18
|
+
* name: 'Marketing Communications',
|
|
19
|
+
* description: 'Allow us to send you marketing materials',
|
|
20
|
+
* isEssential: false
|
|
21
|
+
* };
|
|
22
|
+
*
|
|
23
|
+
* // Validate and parse the consentPurpose data
|
|
24
|
+
* const validPurpose = purposeSchema.parse(purposeData);
|
|
25
|
+
*
|
|
26
|
+
* // Example with missing fields (defaults will be applied)
|
|
27
|
+
* const minimalPurposeData = {
|
|
28
|
+
* id: 'pur_e8zyhgozr3im7xj59it',
|
|
29
|
+
* code: 'marketing',
|
|
30
|
+
* name: 'Marketing Communications',
|
|
31
|
+
* description: 'Allow us to send you marketing materials',
|
|
32
|
+
* };
|
|
33
|
+
*
|
|
34
|
+
* // isEssential will default to false, isActive to true, etc.
|
|
35
|
+
* const purposeWithDefaults = purposeSchema.parse(minimalPurposeData);
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export const purposeSchema = z.object({
|
|
39
|
+
id: z.string(),
|
|
40
|
+
code: z.string(),
|
|
41
|
+
name: z.string(),
|
|
42
|
+
description: z.string(),
|
|
43
|
+
isEssential: z.boolean().default(false),
|
|
44
|
+
dataCategory: z.string().optional(),
|
|
45
|
+
legalBasis: z.string().optional(),
|
|
46
|
+
isActive: z.boolean().default(true),
|
|
47
|
+
createdAt: z.date().default(() => new Date()),
|
|
48
|
+
updatedAt: z.date().default(() => new Date()),
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Type definition for ConsentPurpose
|
|
53
|
+
*
|
|
54
|
+
* This type represents the structure of a consent consentPurpose record
|
|
55
|
+
* as defined by the purposeSchema. It includes all fields
|
|
56
|
+
* that are part of the consent consentPurpose entity.
|
|
57
|
+
*/
|
|
58
|
+
export type ConsentPurpose = z.infer<typeof purposeSchema>;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import type { Field } from '~/db/core/fields';
|
|
2
|
+
import type { C15TOptions } from '~/types';
|
|
3
|
+
import { purposeSchema } from './schema';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Generates the database table configuration for the consent consentPurpose entity.
|
|
7
|
+
*
|
|
8
|
+
* This function creates a schema definition that includes all standard consent consentPurpose 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 consentPurpose table customizations
|
|
13
|
+
* @param purposeFields - Additional fields from plugins to include in the consentPurpose table
|
|
14
|
+
* @returns A complete table schema definition with fields, model name, and metadata
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const purposeTableSchema = getPurposeTable(c15tOptions);
|
|
19
|
+
* // Use the schema for migrations or data access
|
|
20
|
+
* const migrationPlans = generateMigrations(purposeTableSchema);
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export function getPurposeTable(
|
|
24
|
+
options: C15TOptions,
|
|
25
|
+
purposeFields?: Record<string, Field>
|
|
26
|
+
) {
|
|
27
|
+
const purposeConfig = options.tables?.consentPurpose;
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
/**
|
|
31
|
+
* The name of the consentPurpose table in the database, configurable through options
|
|
32
|
+
*/
|
|
33
|
+
entityName: purposeConfig?.entityName || 'consentPurpose',
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The ID prefix for the consentPurpose table
|
|
37
|
+
* Used to generate unique prefixed IDs for purposes
|
|
38
|
+
*/
|
|
39
|
+
entityPrefix: purposeConfig?.entityPrefix || 'pur',
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* The schema for the consentPurpose table
|
|
43
|
+
*/
|
|
44
|
+
schema: purposeSchema,
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Field definitions for the consent consentPurpose table
|
|
48
|
+
*/
|
|
49
|
+
fields: {
|
|
50
|
+
/**
|
|
51
|
+
* Unique code for the consentPurpose, used for programmatic identification
|
|
52
|
+
*/
|
|
53
|
+
code: {
|
|
54
|
+
type: 'string',
|
|
55
|
+
required: true,
|
|
56
|
+
fieldName: purposeConfig?.fields?.code || 'code',
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Human-readable name of the consentPurpose
|
|
61
|
+
*/
|
|
62
|
+
name: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
required: true,
|
|
65
|
+
fieldName: purposeConfig?.fields?.name || 'name',
|
|
66
|
+
},
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Detailed description of the consentPurpose, shown to subjects
|
|
70
|
+
*/
|
|
71
|
+
description: {
|
|
72
|
+
type: 'string',
|
|
73
|
+
required: true,
|
|
74
|
+
fieldName: purposeConfig?.fields?.description || 'description',
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Whether this is an essential consentPurpose that doesn't require explicit consent
|
|
79
|
+
* Default: false
|
|
80
|
+
*/
|
|
81
|
+
isEssential: {
|
|
82
|
+
type: 'boolean',
|
|
83
|
+
defaultValue: () => false,
|
|
84
|
+
required: true,
|
|
85
|
+
fieldName: purposeConfig?.fields?.isEssential || 'isEssential',
|
|
86
|
+
},
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Category of data this consentPurpose processes (e.g., 'personal', 'profile')
|
|
90
|
+
* Optional field
|
|
91
|
+
*/
|
|
92
|
+
dataCategory: {
|
|
93
|
+
type: 'string',
|
|
94
|
+
required: false,
|
|
95
|
+
fieldName: purposeConfig?.fields?.dataCategory || 'dataCategory',
|
|
96
|
+
},
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Legal basis for data processing (e.g., 'consent', 'legitimate interest')
|
|
100
|
+
* Optional field
|
|
101
|
+
*/
|
|
102
|
+
legalBasis: {
|
|
103
|
+
type: 'string',
|
|
104
|
+
required: false,
|
|
105
|
+
fieldName: purposeConfig?.fields?.legalBasis || 'legalBasis',
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Whether this consentPurpose is currently active
|
|
110
|
+
* Default: true
|
|
111
|
+
*/
|
|
112
|
+
isActive: {
|
|
113
|
+
type: 'boolean',
|
|
114
|
+
defaultValue: true,
|
|
115
|
+
required: true,
|
|
116
|
+
fieldName: purposeConfig?.fields?.isActive || 'isActive',
|
|
117
|
+
},
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* When the consentPurpose record was created
|
|
121
|
+
* Automatically set to current time by default
|
|
122
|
+
*/
|
|
123
|
+
createdAt: {
|
|
124
|
+
type: 'date',
|
|
125
|
+
defaultValue: () => new Date(),
|
|
126
|
+
required: true,
|
|
127
|
+
fieldName: purposeConfig?.fields?.createdAt || 'createdAt',
|
|
128
|
+
},
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* When the consentPurpose record was last updated
|
|
132
|
+
* Automatically updated on each modification
|
|
133
|
+
*/
|
|
134
|
+
updatedAt: {
|
|
135
|
+
type: 'date',
|
|
136
|
+
defaultValue: () => new Date(),
|
|
137
|
+
required: true,
|
|
138
|
+
fieldName: purposeConfig?.fields?.updatedAt || 'updatedAt',
|
|
139
|
+
},
|
|
140
|
+
|
|
141
|
+
// Include additional fields from plugins
|
|
142
|
+
...(purposeFields || {}),
|
|
143
|
+
|
|
144
|
+
// Include additional fields from configuration
|
|
145
|
+
...(purposeConfig?.additionalFields || {}),
|
|
146
|
+
},
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Execution order during migrations (lower numbers run first)
|
|
150
|
+
* ConsentPurpose table needs to be created relatively early as other tables reference it
|
|
151
|
+
*/
|
|
152
|
+
order: 1,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ActiveEntityConfig } from '../types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* ConsentPurpose entity configuration
|
|
5
|
+
* @default entityName: "consentPurpose", entityPrefix: "pur"
|
|
6
|
+
*/
|
|
7
|
+
export interface ConsentPurposeEntityConfig extends ActiveEntityConfig {
|
|
8
|
+
fields?: Record<string, string> & {
|
|
9
|
+
id?: string;
|
|
10
|
+
name?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
isActive?: string;
|
|
13
|
+
createdAt?: string;
|
|
14
|
+
updatedAt?: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import type { GenericEndpointContext, RegistryContext } from '~/types';
|
|
2
|
+
import type { PurposeJunction } from './schema';
|
|
3
|
+
|
|
4
|
+
import { getWithHooks } from '~/db/hooks';
|
|
5
|
+
import { validateEntityOutput } from '../definition';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Creates and returns a set of consent-purpose junction adapter methods to interact with the database.
|
|
9
|
+
* These methods provide a consistent interface for creating, finding, and managing
|
|
10
|
+
* relationships between consents and purposes 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-purpose junction operations
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const junctionAdapter = createConsentPurposeJunctionAdapter(
|
|
19
|
+
* databaseAdapter,
|
|
20
|
+
* createWithHooks,
|
|
21
|
+
* updateWithHooks,
|
|
22
|
+
* c15tOptions
|
|
23
|
+
* );
|
|
24
|
+
*
|
|
25
|
+
* // Create a new junction record
|
|
26
|
+
* const junction = await junctionAdapter.createConsentPurposeJunction({
|
|
27
|
+
* consentId: 'cns_hadt8w7nngm7xmx2bn',
|
|
28
|
+
* purposeId: 'pol_tioiyf19tbkm7xn5vpx',
|
|
29
|
+
* status: 'active'
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function consentPurposeJunctionRegistry({
|
|
34
|
+
adapter,
|
|
35
|
+
...ctx
|
|
36
|
+
}: RegistryContext) {
|
|
37
|
+
const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
|
|
38
|
+
return {
|
|
39
|
+
/**
|
|
40
|
+
* Creates a new consent-purpose junction record in the database.
|
|
41
|
+
* Automatically sets creation timestamp and applies any
|
|
42
|
+
* configured hooks during the creation process.
|
|
43
|
+
*
|
|
44
|
+
* @param junction - Junction data to create (without id and timestamp)
|
|
45
|
+
* @param context - Optional endpoint context for hooks
|
|
46
|
+
* @returns The created junction record with all fields populated
|
|
47
|
+
* @throws May throw an error if hooks prevent creation or if database operations fail
|
|
48
|
+
*/
|
|
49
|
+
createConsentPurposeJunction: async (
|
|
50
|
+
junction: Omit<PurposeJunction, 'id' | 'createdAt' | 'status'> &
|
|
51
|
+
Partial<PurposeJunction>,
|
|
52
|
+
context?: GenericEndpointContext
|
|
53
|
+
) => {
|
|
54
|
+
const createdJunction = await createWithHooks({
|
|
55
|
+
data: {
|
|
56
|
+
createdAt: new Date(),
|
|
57
|
+
|
|
58
|
+
...junction,
|
|
59
|
+
status: 'active',
|
|
60
|
+
},
|
|
61
|
+
model: 'consentPurposeJunction',
|
|
62
|
+
customFn: undefined,
|
|
63
|
+
context,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
if (!createdJunction) {
|
|
67
|
+
throw new Error(
|
|
68
|
+
'Failed to create consent-purpose junction - operation returned null'
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return createdJunction as PurposeJunction;
|
|
73
|
+
},
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Finds all junction records for a specific consent.
|
|
77
|
+
* Returns junctions with processed output fields according to the schema configuration.
|
|
78
|
+
*
|
|
79
|
+
* @param consentId - The consent ID to find purposes for
|
|
80
|
+
* @returns Array of junction records associated with the consent
|
|
81
|
+
*/
|
|
82
|
+
findConsentPurposesByConsentId: async (consentId: string) => {
|
|
83
|
+
const junctions = await adapter.findMany({
|
|
84
|
+
model: 'consentPurposeJunction',
|
|
85
|
+
where: [
|
|
86
|
+
{
|
|
87
|
+
field: 'consentId',
|
|
88
|
+
value: consentId,
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
sortBy: {
|
|
92
|
+
field: 'createdAt',
|
|
93
|
+
direction: 'desc',
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
return junctions.map((junction) =>
|
|
98
|
+
validateEntityOutput('consentPurposeJunction', junction, ctx.options)
|
|
99
|
+
);
|
|
100
|
+
},
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Finds all junction records for a specific consentPurpose.
|
|
104
|
+
* Returns junctions with processed output fields according to the schema configuration.
|
|
105
|
+
*
|
|
106
|
+
* @param purposeId - The consentPurpose ID to find consents for
|
|
107
|
+
* @returns Array of junction records associated with the consentPurpose
|
|
108
|
+
*/
|
|
109
|
+
findConsentPurposesByPurposeId: async (purposeId: string) => {
|
|
110
|
+
const junctions = await adapter.findMany({
|
|
111
|
+
model: 'consentPurposeJunction',
|
|
112
|
+
where: [
|
|
113
|
+
{
|
|
114
|
+
field: 'purposeId',
|
|
115
|
+
value: purposeId,
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
sortBy: {
|
|
119
|
+
field: 'createdAt',
|
|
120
|
+
direction: 'desc',
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
return junctions.map((junction) =>
|
|
125
|
+
validateEntityOutput('consentPurposeJunction', junction, ctx.options)
|
|
126
|
+
);
|
|
127
|
+
},
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Updates a junction record's status.
|
|
131
|
+
* Applies any configured hooks during the update process and
|
|
132
|
+
* processes the output according to schema configuration.
|
|
133
|
+
*
|
|
134
|
+
* @param junctionId - The unique identifier of the junction to update
|
|
135
|
+
* @param status - The new status value ('active' or 'withdrawn')
|
|
136
|
+
* @param context - Optional endpoint context for hooks
|
|
137
|
+
* @returns The updated junction if successful, null if not found or hooks prevented update
|
|
138
|
+
*/
|
|
139
|
+
updateConsentPurposeJunction: async (
|
|
140
|
+
junctionId: string,
|
|
141
|
+
status: 'active' | 'withdrawn',
|
|
142
|
+
context?: GenericEndpointContext
|
|
143
|
+
) => {
|
|
144
|
+
const junction = await updateWithHooks({
|
|
145
|
+
data: {
|
|
146
|
+
status,
|
|
147
|
+
updatedAt: new Date(),
|
|
148
|
+
},
|
|
149
|
+
where: [
|
|
150
|
+
{
|
|
151
|
+
field: 'id',
|
|
152
|
+
value: junctionId,
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
model: 'consentPurposeJunction',
|
|
156
|
+
customFn: undefined,
|
|
157
|
+
context,
|
|
158
|
+
});
|
|
159
|
+
return junction
|
|
160
|
+
? validateEntityOutput('consentPurposeJunction', junction, ctx.options)
|
|
161
|
+
: null;
|
|
162
|
+
},
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Deletes all junction records for a specific consent.
|
|
166
|
+
* This effectively removes all consentPurpose connections for the consent.
|
|
167
|
+
*
|
|
168
|
+
* @param consentId - The ID of the consent to remove all consentPurpose connections for
|
|
169
|
+
* @returns True if successful, false otherwise
|
|
170
|
+
*/
|
|
171
|
+
deleteConsentPurposeJunctionsByConsentId: async (consentId: string) => {
|
|
172
|
+
try {
|
|
173
|
+
await adapter.deleteMany({
|
|
174
|
+
model: 'consentPurposeJunction',
|
|
175
|
+
where: [
|
|
176
|
+
{
|
|
177
|
+
field: 'consentId',
|
|
178
|
+
value: consentId,
|
|
179
|
+
},
|
|
180
|
+
],
|
|
181
|
+
});
|
|
182
|
+
return true;
|
|
183
|
+
} catch (error) {
|
|
184
|
+
ctx.logger.error('Error deleting consent-purpose junctions:', error);
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zod schema for validating consent-purpose junction entities.
|
|
5
|
+
*
|
|
6
|
+
* This defines the structure and validation rules for junction records:
|
|
7
|
+
* - Required fields: consentId, purposeId
|
|
8
|
+
* - Default value of 'active' for status
|
|
9
|
+
* - Default current date/time for creation and update timestamps
|
|
10
|
+
* - Default current date/time for update timestamp
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const junctionData = {
|
|
15
|
+
* id: 'pjx_w5qufx2a66m7xkn3ty',
|
|
16
|
+
* consentId: 'cns_hadt8w7nngm7xmx2bn',
|
|
17
|
+
* purposeId: 'pur_e8zyhgozr3im7xj59it',
|
|
18
|
+
* status: 'active'
|
|
19
|
+
* };
|
|
20
|
+
*
|
|
21
|
+
* // Validate and parse the junction data
|
|
22
|
+
* const validJunction = consentPurposeJunctionSchema.parse(junctionData);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export const consentPurposeJunctionSchema = z.object({
|
|
26
|
+
id: z.string(),
|
|
27
|
+
consentId: z.string(),
|
|
28
|
+
consentPurposeId: z.string(),
|
|
29
|
+
status: z
|
|
30
|
+
.enum(['active', 'withdrawn'], {
|
|
31
|
+
errorMap: () => ({
|
|
32
|
+
message: "Status must be either 'active' or 'withdrawn'",
|
|
33
|
+
}),
|
|
34
|
+
})
|
|
35
|
+
.default('active'),
|
|
36
|
+
|
|
37
|
+
metadata: z.record(z.union([z.string(), z.number(), z.boolean()])).optional(),
|
|
38
|
+
createdAt: z.date().default(() => new Date()),
|
|
39
|
+
updatedAt: z.date().default(() => new Date()),
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Type definition for PurposeJunction
|
|
44
|
+
*
|
|
45
|
+
* This type represents the structure of a consent-purpose junction record
|
|
46
|
+
* as defined by the consentPurposeJunctionSchema. It includes all fields
|
|
47
|
+
* that are part of the junction entity.
|
|
48
|
+
*/
|
|
49
|
+
export type PurposeJunction = z.infer<typeof consentPurposeJunctionSchema>;
|