@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,255 @@
|
|
|
1
|
+
import type { Field, FieldType } from '~/db/core/fields';
|
|
2
|
+
/**
|
|
3
|
+
* Database type mapping functionality
|
|
4
|
+
*
|
|
5
|
+
* This module handles mapping between abstract field types and
|
|
6
|
+
* database-specific column types. It provides utilities for:
|
|
7
|
+
* 1. Converting between c15t field types and database-specific types
|
|
8
|
+
* 2. Checking type compatibility across different databases
|
|
9
|
+
* 3. Determining appropriate database types based on field attributes
|
|
10
|
+
*
|
|
11
|
+
* @module migration/type-mapping
|
|
12
|
+
*/
|
|
13
|
+
import type { KyselyDatabaseType } from '../adapters/kysely-adapter/types';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Type mappings for PostgreSQL
|
|
17
|
+
* Maps c15t field types to PostgreSQL-specific column types
|
|
18
|
+
*/
|
|
19
|
+
const postgresMap = {
|
|
20
|
+
string: ['character varying', 'text'],
|
|
21
|
+
number: [
|
|
22
|
+
'int4',
|
|
23
|
+
'integer',
|
|
24
|
+
'bigint',
|
|
25
|
+
'smallint',
|
|
26
|
+
'numeric',
|
|
27
|
+
'real',
|
|
28
|
+
'double precision',
|
|
29
|
+
],
|
|
30
|
+
boolean: ['bool', 'boolean'],
|
|
31
|
+
date: ['timestamp', 'date'],
|
|
32
|
+
json: ['json', 'jsonb'],
|
|
33
|
+
timezone: ['text', 'character varying'], // Timezone stored as text in PostgreSQL
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Type mappings for MySQL
|
|
38
|
+
* Maps c15t field types to MySQL-specific column types
|
|
39
|
+
*/
|
|
40
|
+
const mysqlMap = {
|
|
41
|
+
string: ['varchar(255)', 'varchar(36)', 'text'], // Common MySQL string variants
|
|
42
|
+
number: [
|
|
43
|
+
'integer',
|
|
44
|
+
'int',
|
|
45
|
+
'bigint',
|
|
46
|
+
'smallint',
|
|
47
|
+
'decimal',
|
|
48
|
+
'float',
|
|
49
|
+
'double',
|
|
50
|
+
],
|
|
51
|
+
boolean: ['boolean', 'tinyint'],
|
|
52
|
+
date: ['timestamp', 'datetime', 'date'],
|
|
53
|
+
json: ['json'],
|
|
54
|
+
timezone: ['varchar(50)'], // Fixed length for timezone strings
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Type mappings for SQLite
|
|
59
|
+
* Maps c15t field types to SQLite-specific column types
|
|
60
|
+
*/
|
|
61
|
+
const sqliteMap = {
|
|
62
|
+
string: ['TEXT'],
|
|
63
|
+
number: ['INTEGER', 'REAL'],
|
|
64
|
+
boolean: ['INTEGER', 'BOOLEAN'], // 0 or 1
|
|
65
|
+
date: ['DATE', 'INTEGER'],
|
|
66
|
+
json: ['TEXT'], // SQLite doesn't have native JSON, stored as TEXT
|
|
67
|
+
timezone: ['TEXT'], // Timezone stored as text in SQLite
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Type mappings for Microsoft SQL Server
|
|
71
|
+
* Maps c15t field types to MSSQL-specific column types
|
|
72
|
+
*
|
|
73
|
+
* @remarks
|
|
74
|
+
* For double-precision floating point values, MSSQL uses FLOAT(53) which is
|
|
75
|
+
* equivalent to DOUBLE PRECISION in other databases. We map both 'double' and
|
|
76
|
+
* 'float' to the appropriate MSSQL types.
|
|
77
|
+
*/
|
|
78
|
+
const mssqlMap = {
|
|
79
|
+
string: ['text', 'varchar'],
|
|
80
|
+
number: ['int', 'bigint', 'smallint', 'decimal', 'float(53)', 'float(24)'],
|
|
81
|
+
boolean: ['bit', 'smallint'],
|
|
82
|
+
date: ['datetime', 'date'],
|
|
83
|
+
json: ['nvarchar(max)'], // MSSQL uses nvarchar for JSON storage
|
|
84
|
+
timezone: ['varchar', 'text'], // Timezone stored as text in MSSQL
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* All database type mappings
|
|
89
|
+
* Provides a unified interface to access type mappings for all supported databases
|
|
90
|
+
*/
|
|
91
|
+
const map = {
|
|
92
|
+
postgres: postgresMap,
|
|
93
|
+
mysql: mysqlMap,
|
|
94
|
+
sqlite: sqliteMap,
|
|
95
|
+
mssql: mssqlMap,
|
|
96
|
+
} as const;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Determines MySQL string type based on field attributes
|
|
100
|
+
*
|
|
101
|
+
* @param field - Field attributes including unique and references properties
|
|
102
|
+
* @returns The appropriate MySQL type for the string field
|
|
103
|
+
*
|
|
104
|
+
* @example
|
|
105
|
+
* ```typescript
|
|
106
|
+
* // Returns 'varchar(255)' for unique fields
|
|
107
|
+
* getMySqlStringType({ type: 'string', unique: true });
|
|
108
|
+
*
|
|
109
|
+
* // Returns 'varchar(36)' for reference fields
|
|
110
|
+
* getMySqlStringType({ type: 'string', references: 'subjects' });
|
|
111
|
+
*
|
|
112
|
+
* // Returns 'text' for regular string fields
|
|
113
|
+
* getMySqlStringType({ type: 'string' });
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export function getMySqlStringType(field: Field): string {
|
|
117
|
+
if (field.unique) {
|
|
118
|
+
return 'varchar(255)';
|
|
119
|
+
}
|
|
120
|
+
if (field.references) {
|
|
121
|
+
return 'varchar(36)';
|
|
122
|
+
}
|
|
123
|
+
return 'text';
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Checks if a database column type matches the expected field type
|
|
128
|
+
*
|
|
129
|
+
* @param columnDataType - The actual column type in the database
|
|
130
|
+
* @param fieldType - The expected field type from c15t
|
|
131
|
+
* @param dbType - The database type (postgres, mysql, etc.)
|
|
132
|
+
* @returns True if types match, false otherwise
|
|
133
|
+
*
|
|
134
|
+
* @remarks
|
|
135
|
+
* This function handles type compatibility across different databases,
|
|
136
|
+
* accounting for the fact that the same logical type may have different
|
|
137
|
+
* names in different database systems.
|
|
138
|
+
*
|
|
139
|
+
* Array types (string[] and number[]) are treated specially and matched
|
|
140
|
+
* against JSON-compatible column types.
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* // Returns true because 'text' is compatible with 'string' in PostgreSQL
|
|
145
|
+
* matchType('text', 'string', 'postgres');
|
|
146
|
+
*
|
|
147
|
+
* // Returns true because 'jsonb' is compatible with array types
|
|
148
|
+
* matchType('jsonb', 'string[]', 'postgres');
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export function matchType(
|
|
152
|
+
columnDataType: string,
|
|
153
|
+
fieldType: FieldType,
|
|
154
|
+
dbType: KyselyDatabaseType
|
|
155
|
+
): boolean {
|
|
156
|
+
if (fieldType === 'string[]' || fieldType === 'number[]') {
|
|
157
|
+
return columnDataType.toLowerCase().includes('json');
|
|
158
|
+
}
|
|
159
|
+
const types = map[dbType];
|
|
160
|
+
const type = Array.isArray(fieldType)
|
|
161
|
+
? types.string.map((t) => t.toLowerCase())
|
|
162
|
+
: types[fieldType].map((t) => t.toLowerCase());
|
|
163
|
+
const matches = type.includes(columnDataType.toLowerCase());
|
|
164
|
+
return matches;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Gets the appropriate database type for a field
|
|
169
|
+
*
|
|
170
|
+
* @param field - Field attributes including type and other properties
|
|
171
|
+
* @param dbType - Database type to get the appropriate type for
|
|
172
|
+
* @returns The appropriate database-specific type
|
|
173
|
+
*
|
|
174
|
+
* @remarks
|
|
175
|
+
* This function determines the most appropriate database type for a given field,
|
|
176
|
+
* taking into account:
|
|
177
|
+
* - The field's base type (string, number, boolean, etc.)
|
|
178
|
+
* - Special attributes (unique, references, bigint)
|
|
179
|
+
* - Database-specific requirements and best practices
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* // Returns 'text' for a regular string field in SQLite
|
|
184
|
+
* getType({ type: 'string' }, 'sqlite');
|
|
185
|
+
*
|
|
186
|
+
* // Returns 'jsonb' for a JSON field in PostgreSQL
|
|
187
|
+
* getType({ type: 'json' }, 'postgres');
|
|
188
|
+
*
|
|
189
|
+
* // Returns 'bigint' for a number field with bigint flag
|
|
190
|
+
* getType({ type: 'number', bigint: true }, 'mysql');
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
export function getType(field: Field, dbType: KyselyDatabaseType = 'sqlite') {
|
|
194
|
+
const type = field.type;
|
|
195
|
+
const typeMap = {
|
|
196
|
+
string: {
|
|
197
|
+
sqlite: 'text',
|
|
198
|
+
postgres: 'text',
|
|
199
|
+
mysql: getMySqlStringType(field),
|
|
200
|
+
mssql: getMySqlStringType(field),
|
|
201
|
+
},
|
|
202
|
+
boolean: {
|
|
203
|
+
sqlite: 'integer',
|
|
204
|
+
postgres: 'boolean',
|
|
205
|
+
mysql: 'boolean',
|
|
206
|
+
mssql: 'smallint',
|
|
207
|
+
},
|
|
208
|
+
number: {
|
|
209
|
+
sqlite: field.bigint ? 'bigint' : 'integer',
|
|
210
|
+
postgres: field.bigint ? 'bigint' : 'integer',
|
|
211
|
+
mysql: field.bigint ? 'bigint' : 'integer',
|
|
212
|
+
mssql: field.bigint ? 'bigint' : 'integer',
|
|
213
|
+
},
|
|
214
|
+
date: {
|
|
215
|
+
sqlite: 'date',
|
|
216
|
+
postgres: 'timestamp',
|
|
217
|
+
mysql: 'datetime',
|
|
218
|
+
mssql: 'datetime',
|
|
219
|
+
},
|
|
220
|
+
timezone: {
|
|
221
|
+
sqlite: 'text',
|
|
222
|
+
postgres: 'text',
|
|
223
|
+
mysql: 'varchar(50)',
|
|
224
|
+
mssql: 'nvarchar(50)',
|
|
225
|
+
},
|
|
226
|
+
json: {
|
|
227
|
+
sqlite: 'text', // SQLite doesn't have native JSON
|
|
228
|
+
postgres: 'jsonb', // PostgreSQL prefers jsonb for better performance
|
|
229
|
+
mysql: 'json',
|
|
230
|
+
mssql: 'nvarchar(max)', // SQL Server stores JSON as nvarchar
|
|
231
|
+
},
|
|
232
|
+
} as const;
|
|
233
|
+
|
|
234
|
+
if (dbType === 'sqlite' && (type === 'string[]' || type === 'number[]')) {
|
|
235
|
+
return 'text';
|
|
236
|
+
}
|
|
237
|
+
if (type === 'string[]' || type === 'number[]') {
|
|
238
|
+
switch (dbType) {
|
|
239
|
+
case 'postgres':
|
|
240
|
+
return 'jsonb';
|
|
241
|
+
case 'mysql':
|
|
242
|
+
case 'mssql':
|
|
243
|
+
return 'json';
|
|
244
|
+
default:
|
|
245
|
+
return 'text';
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Handle json type
|
|
250
|
+
if (type === 'json') {
|
|
251
|
+
return typeMap.json[dbType];
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
return typeMap[type][dbType];
|
|
255
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Types used throughout the migration system
|
|
3
|
+
*
|
|
4
|
+
* @module migration/types
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type {
|
|
8
|
+
AlterTableColumnAlteringBuilder,
|
|
9
|
+
CreateTableBuilder,
|
|
10
|
+
} from 'kysely';
|
|
11
|
+
import type { Field } from '~/db/core/fields';
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Type representing a table to be created during migration
|
|
15
|
+
*/
|
|
16
|
+
export interface TableToCreate {
|
|
17
|
+
table: string;
|
|
18
|
+
fields: Record<string, Field>;
|
|
19
|
+
order: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Type representing table columns to be added during migration
|
|
24
|
+
*/
|
|
25
|
+
export interface ColumnsToAdd {
|
|
26
|
+
table: string;
|
|
27
|
+
fields: Record<string, Field>;
|
|
28
|
+
order: number;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Type for migration operations
|
|
33
|
+
*/
|
|
34
|
+
export type MigrationOperation =
|
|
35
|
+
| AlterTableColumnAlteringBuilder
|
|
36
|
+
| CreateTableBuilder<string, string>;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Result of migration generation
|
|
40
|
+
*/
|
|
41
|
+
export interface MigrationResult {
|
|
42
|
+
toBeCreated: TableToCreate[];
|
|
43
|
+
toBeAdded: ColumnsToAdd[];
|
|
44
|
+
runMigrations: () => Promise<void>;
|
|
45
|
+
compileMigrations: () => Promise<string>;
|
|
46
|
+
}
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import type { Where } from '~/db/adapters/types';
|
|
2
|
+
import { getWithHooks } from '~/db/hooks';
|
|
3
|
+
import type { GenericEndpointContext } from '~/types';
|
|
4
|
+
import type { RegistryContext } from '~/types/context';
|
|
5
|
+
import { validateEntityOutput } from '../definition';
|
|
6
|
+
import type { AuditLog } from './schema';
|
|
7
|
+
/**
|
|
8
|
+
* Creates and returns a set of consent audit log adapter methods to interact with the database.
|
|
9
|
+
* These methods provide a consistent interface for creating and querying audit logs
|
|
10
|
+
* while applying hooks and enforcing data validation rules.
|
|
11
|
+
*
|
|
12
|
+
* @param adapter - The database adapter used for direct database operations
|
|
13
|
+
* @param ctx - The context object containing the database adapter, hooks, and options
|
|
14
|
+
* @returns An object containing type-safe consent audit log operations
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const auditLogAdapter = createAuditLogAdapter({
|
|
19
|
+
* adapter: databaseAdapter,
|
|
20
|
+
* createWithHooks,
|
|
21
|
+
* options: c15tOptions
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* // Create a new audit log entry
|
|
25
|
+
* const log = await auditLogAdapter.createAuditLog({
|
|
26
|
+
* entityType: 'consent',
|
|
27
|
+
* entityId: 'cns_hadt8w7nngm7xmx2bn',
|
|
28
|
+
* actionType: 'update',
|
|
29
|
+
* subjectId: 'sub_x1pftyoufsm7xgo1kv',
|
|
30
|
+
* changes: { status: { from: 'active', to: 'withdrawn' } }
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export function auditLogRegistry({ adapter, ...ctx }: RegistryContext) {
|
|
35
|
+
const { createWithHooks } = getWithHooks(adapter, ctx);
|
|
36
|
+
|
|
37
|
+
return {
|
|
38
|
+
/**
|
|
39
|
+
* Creates a new consent audit log entry in the database.
|
|
40
|
+
* Automatically sets creation timestamp and applies any
|
|
41
|
+
* configured hooks during the creation process.
|
|
42
|
+
*
|
|
43
|
+
* @param auditLog - Audit log data to create (without id and timestamp)
|
|
44
|
+
* @param context - Optional endpoint context for hooks
|
|
45
|
+
* @returns The created audit log entry with all fields populated
|
|
46
|
+
* @throws May throw an error if hooks prevent creation or if database operations fail
|
|
47
|
+
*/
|
|
48
|
+
createAuditLog: async (
|
|
49
|
+
auditLog: Omit<AuditLog, 'id' | 'createdAt'> & Partial<AuditLog>,
|
|
50
|
+
context?: GenericEndpointContext
|
|
51
|
+
) => {
|
|
52
|
+
const createdLog = await createWithHooks({
|
|
53
|
+
data: {
|
|
54
|
+
createdAt: new Date(),
|
|
55
|
+
...auditLog,
|
|
56
|
+
},
|
|
57
|
+
model: 'auditLog',
|
|
58
|
+
customFn: undefined,
|
|
59
|
+
context,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
if (!createdLog) {
|
|
63
|
+
throw new Error(
|
|
64
|
+
'Failed to create consent audit log - operation returned null'
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
return createdLog as AuditLog;
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Finds all audit log entries matching specified filters.
|
|
73
|
+
* Returns logs with processed output fields according to the schema configuration.
|
|
74
|
+
*
|
|
75
|
+
* @param entityType - Optional entity type to filter logs (e.g., 'consent', 'subject')
|
|
76
|
+
* @param entityId - Optional entity ID to filter logs
|
|
77
|
+
* @param actionType - Optional action type to filter logs (e.g., 'create', 'update')
|
|
78
|
+
* @param limit - Optional maximum number of logs to return
|
|
79
|
+
* @param offset - Optional number of logs to skip for pagination
|
|
80
|
+
* @returns Array of audit log entries matching the criteria
|
|
81
|
+
*/
|
|
82
|
+
findAuditLogs: async (
|
|
83
|
+
entityType?: string,
|
|
84
|
+
entityId?: string,
|
|
85
|
+
actionType?: string,
|
|
86
|
+
limit?: number,
|
|
87
|
+
offset?: number
|
|
88
|
+
) => {
|
|
89
|
+
const whereConditions: Where<'auditLog'> = [];
|
|
90
|
+
|
|
91
|
+
if (entityType) {
|
|
92
|
+
whereConditions.push({
|
|
93
|
+
field: 'entityType',
|
|
94
|
+
value: entityType,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (entityId) {
|
|
99
|
+
whereConditions.push({
|
|
100
|
+
field: 'entityId',
|
|
101
|
+
value: entityId,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (actionType) {
|
|
106
|
+
whereConditions.push({
|
|
107
|
+
field: 'actionType',
|
|
108
|
+
value: actionType,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
const logs = await adapter.findMany({
|
|
113
|
+
model: 'auditLog',
|
|
114
|
+
where: whereConditions,
|
|
115
|
+
sortBy: {
|
|
116
|
+
field: 'createdAt',
|
|
117
|
+
direction: 'desc',
|
|
118
|
+
},
|
|
119
|
+
limit,
|
|
120
|
+
offset,
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
return logs.map((log) =>
|
|
124
|
+
validateEntityOutput('auditLog', log, ctx.options)
|
|
125
|
+
);
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Finds a specific audit log entry by its ID.
|
|
130
|
+
* Returns the log with processed output fields according to the schema configuration.
|
|
131
|
+
*
|
|
132
|
+
* @param auditLogId - The unique identifier of the audit log entry
|
|
133
|
+
* @returns The audit log entry if found, null otherwise
|
|
134
|
+
*/
|
|
135
|
+
findAuditLogById: async (auditLogId: string) => {
|
|
136
|
+
const log = await adapter.findOne({
|
|
137
|
+
model: 'auditLog',
|
|
138
|
+
where: [
|
|
139
|
+
{
|
|
140
|
+
field: 'id',
|
|
141
|
+
value: auditLogId,
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
});
|
|
145
|
+
return log ? validateEntityOutput('auditLog', log, ctx.options) : null;
|
|
146
|
+
},
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Finds all audit log entries for a specific entity.
|
|
150
|
+
* Returns logs with processed output fields according to the schema configuration.
|
|
151
|
+
*
|
|
152
|
+
* @param entityType - The type of entity (e.g., 'consent', 'subject')
|
|
153
|
+
* @param entityId - The unique identifier of the entity
|
|
154
|
+
* @param limit - Optional maximum number of logs to return
|
|
155
|
+
* @returns Array of audit log entries for the specified entity
|
|
156
|
+
*/
|
|
157
|
+
findAuditLogsByEntity: async (
|
|
158
|
+
entityType: string,
|
|
159
|
+
entityId: string,
|
|
160
|
+
limit?: number
|
|
161
|
+
) => {
|
|
162
|
+
const logs = await adapter.findMany({
|
|
163
|
+
model: 'auditLog',
|
|
164
|
+
where: [
|
|
165
|
+
{
|
|
166
|
+
field: 'entityType',
|
|
167
|
+
value: entityType,
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
field: 'entityId',
|
|
171
|
+
value: entityId,
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
sortBy: {
|
|
175
|
+
field: 'createdAt',
|
|
176
|
+
direction: 'desc',
|
|
177
|
+
},
|
|
178
|
+
limit,
|
|
179
|
+
});
|
|
180
|
+
return logs.map((log) =>
|
|
181
|
+
validateEntityOutput('auditLog', log, ctx.options)
|
|
182
|
+
);
|
|
183
|
+
},
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Counts the total number of audit log entries matching specified filters.
|
|
187
|
+
* Useful for pagination and reporting.
|
|
188
|
+
*
|
|
189
|
+
* @param entityType - Optional entity type to filter logs
|
|
190
|
+
* @param entityId - Optional entity ID to filter logs
|
|
191
|
+
* @param actionType - Optional action type to filter logs
|
|
192
|
+
* @returns The total count of matching audit log entries
|
|
193
|
+
*/
|
|
194
|
+
countAuditLogs: async (
|
|
195
|
+
entityType?: string,
|
|
196
|
+
entityId?: string,
|
|
197
|
+
actionType?: string
|
|
198
|
+
) => {
|
|
199
|
+
const whereConditions: Where<'auditLog'> = [];
|
|
200
|
+
|
|
201
|
+
if (entityType) {
|
|
202
|
+
whereConditions.push({
|
|
203
|
+
field: 'entityType',
|
|
204
|
+
value: entityType,
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (entityId) {
|
|
209
|
+
whereConditions.push({
|
|
210
|
+
field: 'entityId',
|
|
211
|
+
value: entityId,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
if (actionType) {
|
|
216
|
+
whereConditions.push({
|
|
217
|
+
field: 'actionType',
|
|
218
|
+
value: actionType,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
return adapter.count({
|
|
223
|
+
model: 'auditLog',
|
|
224
|
+
where: whereConditions,
|
|
225
|
+
});
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Zod schema for validating consent audit log entities.
|
|
5
|
+
*
|
|
6
|
+
* This defines the structure and validation rules for audit log entries:
|
|
7
|
+
* - Required fields: entityType, entityId, actionType
|
|
8
|
+
* - Optional fields: subjectId, ipAddress, changes, metadata
|
|
9
|
+
* - Default current date/time for creation timestamp
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const auditLogData = {
|
|
14
|
+
* id: 'log_w5qufx2a66m7xkn3ty',
|
|
15
|
+
* entityType: 'consent',
|
|
16
|
+
* entityId: 'cns_hadt8w7nngm7xmx2bn',
|
|
17
|
+
* actionType: 'update',
|
|
18
|
+
* subjectId: 'sub_x1pftyoufsm7xgo1kv',
|
|
19
|
+
* changes: { status: { from: 'active', to: 'withdrawn' } }
|
|
20
|
+
* };
|
|
21
|
+
*
|
|
22
|
+
* // Validate and parse the audit log data
|
|
23
|
+
* const validAuditLog = auditLogSchema.parse(auditLogData);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export const auditLogSchema = z.object({
|
|
27
|
+
id: z.string(),
|
|
28
|
+
entityType: z.string(),
|
|
29
|
+
entityId: z.string(),
|
|
30
|
+
actionType: z.string(),
|
|
31
|
+
subjectId: z.string().optional(),
|
|
32
|
+
ipAddress: z.string().optional(),
|
|
33
|
+
userAgent: z.string().optional(),
|
|
34
|
+
changes: z.record(z.unknown()).optional(),
|
|
35
|
+
metadata: z.record(z.unknown()).optional(),
|
|
36
|
+
createdAt: z.date().default(() => new Date()),
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Type definition for AuditLog
|
|
41
|
+
*
|
|
42
|
+
* This type represents the structure of a consent audit log entry
|
|
43
|
+
* as defined by the auditLogSchema. It includes all fields
|
|
44
|
+
* that are part of the audit log entity.
|
|
45
|
+
*/
|
|
46
|
+
export type AuditLog = z.infer<typeof auditLogSchema>;
|