@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,244 @@
|
|
|
1
|
+
import { vi } from 'vitest';
|
|
2
|
+
import type { C15TContext } from '~/types';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Creates a mock context for testing API endpoints
|
|
6
|
+
*
|
|
7
|
+
* @returns A mock C15TContext with default values
|
|
8
|
+
*/
|
|
9
|
+
export function createMockContext(): C15TContext {
|
|
10
|
+
return {
|
|
11
|
+
version: '1.0.0',
|
|
12
|
+
appName: 'test-app',
|
|
13
|
+
db: {
|
|
14
|
+
setConsent: vi.fn(),
|
|
15
|
+
getConsent: vi.fn(),
|
|
16
|
+
withdrawConsent: vi.fn(),
|
|
17
|
+
verifyConsent: vi.fn(),
|
|
18
|
+
getConsentHistory: vi.fn(),
|
|
19
|
+
getConsentPolicy: vi.fn(),
|
|
20
|
+
generateConsentReceipt: vi.fn(),
|
|
21
|
+
},
|
|
22
|
+
registry: {
|
|
23
|
+
findConsents: vi.fn().mockResolvedValue({
|
|
24
|
+
success: true,
|
|
25
|
+
data: {
|
|
26
|
+
consents: [
|
|
27
|
+
{
|
|
28
|
+
id: 'test-consent-id',
|
|
29
|
+
domainId: 'example.com',
|
|
30
|
+
status: 'active',
|
|
31
|
+
givenAt: new Date().toISOString(),
|
|
32
|
+
consentWithdrawals: [],
|
|
33
|
+
records: [],
|
|
34
|
+
},
|
|
35
|
+
],
|
|
36
|
+
auditLogs: [],
|
|
37
|
+
pagination: { total: 1, offset: 0, limit: 100 },
|
|
38
|
+
},
|
|
39
|
+
}),
|
|
40
|
+
findConsentWithdrawals: vi.fn().mockResolvedValue({
|
|
41
|
+
success: true,
|
|
42
|
+
data: {
|
|
43
|
+
consentWithdrawals: [],
|
|
44
|
+
auditLogs: [],
|
|
45
|
+
pagination: { total: 0, offset: 0, limit: 100 },
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
48
|
+
findPolicies: vi.fn().mockResolvedValue({
|
|
49
|
+
success: true,
|
|
50
|
+
data: {
|
|
51
|
+
policies: [],
|
|
52
|
+
auditLogs: [],
|
|
53
|
+
pagination: { total: 0, offset: 0, limit: 100 },
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
56
|
+
findDomains: vi.fn().mockResolvedValue({
|
|
57
|
+
success: true,
|
|
58
|
+
data: {
|
|
59
|
+
domains: [],
|
|
60
|
+
auditLogs: [],
|
|
61
|
+
pagination: { total: 0, offset: 0, limit: 100 },
|
|
62
|
+
},
|
|
63
|
+
}),
|
|
64
|
+
//@ts-expect-error
|
|
65
|
+
findJurisdictions: vi.fn().mockResolvedValue({
|
|
66
|
+
success: true,
|
|
67
|
+
data: {
|
|
68
|
+
jurisdictions: [],
|
|
69
|
+
auditLogs: [],
|
|
70
|
+
pagination: { total: 0, offset: 0, limit: 100 },
|
|
71
|
+
},
|
|
72
|
+
}),
|
|
73
|
+
createConsent: vi.fn(),
|
|
74
|
+
createConsentWithdrawal: vi.fn(),
|
|
75
|
+
createDomain: vi.fn(),
|
|
76
|
+
updateConsent: vi.fn(),
|
|
77
|
+
updateWithdrawal: vi.fn(),
|
|
78
|
+
updateDomain: vi.fn(),
|
|
79
|
+
getConsent: vi.fn().mockResolvedValue({
|
|
80
|
+
success: true,
|
|
81
|
+
data: {
|
|
82
|
+
id: 'test-consent-id',
|
|
83
|
+
subjectId: 'test-subject',
|
|
84
|
+
domainId: 'example.com',
|
|
85
|
+
status: 'active',
|
|
86
|
+
givenAt: new Date().toISOString(),
|
|
87
|
+
preferences: {
|
|
88
|
+
marketing: 'granted',
|
|
89
|
+
analytics: 'granted',
|
|
90
|
+
preferences: 'granted',
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
}),
|
|
94
|
+
getWithdrawal: vi.fn(),
|
|
95
|
+
getPolicy: vi.fn().mockResolvedValue({
|
|
96
|
+
success: true,
|
|
97
|
+
data: {
|
|
98
|
+
id: 'test-policy-id',
|
|
99
|
+
domain: 'example.com',
|
|
100
|
+
version: '1.0',
|
|
101
|
+
content: 'Test policy content',
|
|
102
|
+
availablePreferences: {
|
|
103
|
+
marketing: ['granted', 'denied'],
|
|
104
|
+
analytics: ['granted', 'denied'],
|
|
105
|
+
preferences: ['granted', 'denied'],
|
|
106
|
+
},
|
|
107
|
+
createdAt: new Date().toISOString(),
|
|
108
|
+
},
|
|
109
|
+
}),
|
|
110
|
+
getDomain: vi.fn().mockResolvedValue({
|
|
111
|
+
success: true,
|
|
112
|
+
data: {
|
|
113
|
+
id: 'example.com',
|
|
114
|
+
name: 'Example Domain',
|
|
115
|
+
policyId: 'test-policy-id',
|
|
116
|
+
createdAt: new Date().toISOString(),
|
|
117
|
+
},
|
|
118
|
+
}),
|
|
119
|
+
getJurisdiction: vi.fn().mockResolvedValue({
|
|
120
|
+
success: true,
|
|
121
|
+
data: {
|
|
122
|
+
code: 'EU',
|
|
123
|
+
name: 'European Union',
|
|
124
|
+
requiresConsent: true,
|
|
125
|
+
createdAt: new Date().toISOString(),
|
|
126
|
+
},
|
|
127
|
+
}),
|
|
128
|
+
},
|
|
129
|
+
logger: {
|
|
130
|
+
info: vi.fn(),
|
|
131
|
+
error: vi.fn(),
|
|
132
|
+
warn: vi.fn(),
|
|
133
|
+
debug: vi.fn(),
|
|
134
|
+
success: vi.fn(),
|
|
135
|
+
},
|
|
136
|
+
options: {
|
|
137
|
+
plugins: [],
|
|
138
|
+
logger: {
|
|
139
|
+
level: 'info',
|
|
140
|
+
disabled: false,
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
baseURL: 'http://localhost:3000',
|
|
144
|
+
ipAddress: '127.0.0.1',
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Creates a mock request for testing
|
|
150
|
+
*
|
|
151
|
+
* @param url - The request URL
|
|
152
|
+
* @param method - The HTTP method
|
|
153
|
+
* @param body - Optional request body
|
|
154
|
+
* @returns A mock Request object
|
|
155
|
+
*/
|
|
156
|
+
export function createMockRequest(
|
|
157
|
+
url: string,
|
|
158
|
+
method = 'GET',
|
|
159
|
+
body?: unknown
|
|
160
|
+
): Request {
|
|
161
|
+
return new Request(url, {
|
|
162
|
+
method,
|
|
163
|
+
headers: {
|
|
164
|
+
'Content-Type': 'application/json',
|
|
165
|
+
},
|
|
166
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Creates a mock response for testing
|
|
172
|
+
*
|
|
173
|
+
* @param status - The HTTP status code
|
|
174
|
+
* @param body - The response body
|
|
175
|
+
* @returns A mock Response object
|
|
176
|
+
*/
|
|
177
|
+
export function createMockResponse(status: number, body: unknown): Response {
|
|
178
|
+
return new Response(JSON.stringify(body), {
|
|
179
|
+
status,
|
|
180
|
+
headers: {
|
|
181
|
+
'Content-Type': 'application/json',
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Helper to create a mock consent object
|
|
188
|
+
*
|
|
189
|
+
* @param overrides - Optional overrides for the default consent object
|
|
190
|
+
* @returns A mock consent object
|
|
191
|
+
*/
|
|
192
|
+
export function createMockConsent(
|
|
193
|
+
overrides: Partial<{
|
|
194
|
+
subjectId: string;
|
|
195
|
+
domain: string;
|
|
196
|
+
preferences: Record<string, string>;
|
|
197
|
+
status: string;
|
|
198
|
+
givenAt: string;
|
|
199
|
+
}> = {}
|
|
200
|
+
) {
|
|
201
|
+
return {
|
|
202
|
+
subjectId: 'test-subject',
|
|
203
|
+
domain: 'example.com',
|
|
204
|
+
preferences: {
|
|
205
|
+
marketing: 'granted',
|
|
206
|
+
analytics: 'granted',
|
|
207
|
+
preferences: 'granted',
|
|
208
|
+
},
|
|
209
|
+
status: 'active',
|
|
210
|
+
givenAt: new Date().toISOString(),
|
|
211
|
+
...overrides,
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Helper to create a mock consent policy
|
|
217
|
+
*
|
|
218
|
+
* @param overrides - Optional overrides for the default policy object
|
|
219
|
+
* @returns A mock consent policy object
|
|
220
|
+
*/
|
|
221
|
+
export function createMockPolicy(
|
|
222
|
+
overrides: Partial<{
|
|
223
|
+
id: string;
|
|
224
|
+
domain: string;
|
|
225
|
+
version: string;
|
|
226
|
+
content: string;
|
|
227
|
+
availablePreferences: Record<string, string[]>;
|
|
228
|
+
createdAt: string;
|
|
229
|
+
}> = {}
|
|
230
|
+
) {
|
|
231
|
+
return {
|
|
232
|
+
id: 'test-policy-id',
|
|
233
|
+
domain: 'example.com',
|
|
234
|
+
version: '1.0',
|
|
235
|
+
content: 'Test policy content',
|
|
236
|
+
availablePreferences: {
|
|
237
|
+
marketing: ['granted', 'denied'],
|
|
238
|
+
analytics: ['granted', 'denied'],
|
|
239
|
+
preferences: ['granted', 'denied'],
|
|
240
|
+
},
|
|
241
|
+
createdAt: new Date().toISOString(),
|
|
242
|
+
...overrides,
|
|
243
|
+
};
|
|
244
|
+
}
|
package/src/types/api.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Types for c15t
|
|
3
|
+
*
|
|
4
|
+
* Definitions for API routes, request handlers, and endpoint configuration
|
|
5
|
+
*/
|
|
6
|
+
import type { Endpoint } from 'better-call';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Filter action methods from an object type
|
|
10
|
+
*
|
|
11
|
+
* This type utility extracts only the method properties from an object type,
|
|
12
|
+
* useful for API type inference.
|
|
13
|
+
*
|
|
14
|
+
* @typeParam TObject - The object type to filter action methods from
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* interface APIHandlers {
|
|
19
|
+
* getSubject: (id: string) => Promise<Subject>;
|
|
20
|
+
* userData: Subject;
|
|
21
|
+
* updateSubject: (subject: Subject) => Promise<void>;
|
|
22
|
+
* }
|
|
23
|
+
*
|
|
24
|
+
* // ActionKeys will be 'getSubject' | 'updateSubject'
|
|
25
|
+
* type ActionKeys = FilterActions<APIHandlers>[keyof FilterActions<APIHandlers>];
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export type FilterActions<TObject extends Record<string, unknown>> = {
|
|
29
|
+
[Key in keyof TObject]: TObject[Key] extends (...args: unknown[]) => unknown
|
|
30
|
+
? Key
|
|
31
|
+
: never;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Base API path template literal for c15t endpoints
|
|
36
|
+
*
|
|
37
|
+
* This type defines the base path for all API routes in the c15t system.
|
|
38
|
+
* Used as a foundation for building type-safe API route paths.
|
|
39
|
+
*
|
|
40
|
+
* @see ApiPath for complete path patterns
|
|
41
|
+
*/
|
|
42
|
+
export type ApiPathBase = `/api/c15t`;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* API route path with strict type checking
|
|
46
|
+
*
|
|
47
|
+
* This type union represents all valid API paths in the system.
|
|
48
|
+
* It enforces type safety when defining routes or middlewares to
|
|
49
|
+
* prevent typos and ensure consistency.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```ts
|
|
53
|
+
* // Valid API path
|
|
54
|
+
* const consentPath: ApiPath = '/api/c15t/consent';
|
|
55
|
+
*
|
|
56
|
+
* // Invalid - would cause a type error
|
|
57
|
+
* const invalidPath: ApiPath = '/api/c15t/unknown-endpoint';
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export type ApiPath =
|
|
61
|
+
| `${ApiPathBase}`
|
|
62
|
+
| `${ApiPathBase}/consent`
|
|
63
|
+
| `${ApiPathBase}/consent/:id`
|
|
64
|
+
| `${ApiPathBase}/jurisdictions`
|
|
65
|
+
| `${ApiPathBase}/jurisdictions/:code`
|
|
66
|
+
| `${ApiPathBase}/plugins/:id`;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Strongly-typed middleware configuration
|
|
70
|
+
*
|
|
71
|
+
* Defines the structure for API middleware registrations,
|
|
72
|
+
* ensuring that both the path and middleware function are properly typed.
|
|
73
|
+
*
|
|
74
|
+
* @see ApiPath for valid path patterns
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```ts
|
|
78
|
+
* // Register a middleware for the consent endpoint
|
|
79
|
+
* const authMiddleware: ApiMiddleware = {
|
|
80
|
+
* path: '/api/c15t/consent',
|
|
81
|
+
* middleware: async (ctx, next) => {
|
|
82
|
+
* // Verify authentication
|
|
83
|
+
* if (!ctx.request.headers.get('Authorization')) {
|
|
84
|
+
* return ctx.json({ error: 'Unauthorized' }, { status: 401 });
|
|
85
|
+
* }
|
|
86
|
+
* return next();
|
|
87
|
+
* }
|
|
88
|
+
* };
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
export interface ApiMiddleware {
|
|
92
|
+
/**
|
|
93
|
+
* The API path to apply this middleware to
|
|
94
|
+
*/
|
|
95
|
+
path: ApiPath;
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* The middleware function to execute
|
|
99
|
+
*/
|
|
100
|
+
middleware: Endpoint;
|
|
101
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
EndpointContext,
|
|
3
|
+
EndpointOptions,
|
|
4
|
+
InputContext,
|
|
5
|
+
} from 'better-call';
|
|
6
|
+
import type { getConsentTables } from '~/db';
|
|
7
|
+
import type { Adapter } from '~/db/adapters/types';
|
|
8
|
+
import type { EntityName } from '~/db/core/types';
|
|
9
|
+
import type { createRegistry } from '~/db/create-registry';
|
|
10
|
+
import type { DatabaseHook } from '~/db/hooks/types';
|
|
11
|
+
import type { createLogger } from '~/utils';
|
|
12
|
+
import type { C15TOptions } from './index';
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Extended endpoint context for hooks
|
|
16
|
+
*
|
|
17
|
+
* This type extends the standard endpoint context with additional properties
|
|
18
|
+
* specific to c15t hooks, allowing hooks to access the complete c15t context.
|
|
19
|
+
*
|
|
20
|
+
* @typeParam TOptions - Endpoint configuration options type
|
|
21
|
+
*
|
|
22
|
+
* @see GenericEndpointContext for a simpler context type without input context inclusion
|
|
23
|
+
*/
|
|
24
|
+
export type HookEndpointContext<
|
|
25
|
+
TOptions extends EndpointOptions = EndpointOptions,
|
|
26
|
+
> = EndpointContext<string, TOptions> &
|
|
27
|
+
Omit<InputContext<string, TOptions>, 'method'> & {
|
|
28
|
+
/**
|
|
29
|
+
* The c15t context with possible hook-specific extensions
|
|
30
|
+
*/
|
|
31
|
+
context: C15TContext & {
|
|
32
|
+
/**
|
|
33
|
+
* Value returned by the endpoint handler, available in 'after' hooks
|
|
34
|
+
*/
|
|
35
|
+
returned?: unknown;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Response headers, available in 'after' hooks
|
|
39
|
+
*/
|
|
40
|
+
responseHeaders?: Headers;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Request headers
|
|
45
|
+
*/
|
|
46
|
+
headers?: Headers;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Standard endpoint context for c15t handlers
|
|
51
|
+
*
|
|
52
|
+
* A simplified context type that includes the c15t context,
|
|
53
|
+
* used by endpoint handlers throughout the system.
|
|
54
|
+
*
|
|
55
|
+
* @typeParam TOptions - Endpoint configuration options type
|
|
56
|
+
*/
|
|
57
|
+
export type GenericEndpointContext<
|
|
58
|
+
TOptions extends EndpointOptions = EndpointOptions,
|
|
59
|
+
> = EndpointContext<string, TOptions> & {
|
|
60
|
+
/**
|
|
61
|
+
* The c15t application context
|
|
62
|
+
*/
|
|
63
|
+
context: C15TContext;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Base shared context for all c15t components
|
|
68
|
+
*
|
|
69
|
+
* Contains the minimal set of properties needed by all components
|
|
70
|
+
* in the c15t system, including configuration options and logging.
|
|
71
|
+
*/
|
|
72
|
+
export interface BaseContext {
|
|
73
|
+
/**
|
|
74
|
+
* Configuration options for the c15t system
|
|
75
|
+
*/
|
|
76
|
+
options: C15TOptions;
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Logger instance for recording events and errors
|
|
80
|
+
*/
|
|
81
|
+
logger: ReturnType<typeof createLogger>;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Registry-specific context for database adapters
|
|
86
|
+
*
|
|
87
|
+
* Extends the base context with properties needed for
|
|
88
|
+
* database operations and entity management.
|
|
89
|
+
*/
|
|
90
|
+
export interface RegistryContext extends BaseContext {
|
|
91
|
+
/**
|
|
92
|
+
* Database adapter instance
|
|
93
|
+
*/
|
|
94
|
+
adapter: Adapter;
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Database lifecycle hooks
|
|
98
|
+
*/
|
|
99
|
+
hooks: DatabaseHook[];
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Function to generate unique IDs for entities
|
|
103
|
+
*
|
|
104
|
+
* @param options - Options for ID generation including entity type and length
|
|
105
|
+
* @returns A unique ID string
|
|
106
|
+
*/
|
|
107
|
+
generateId: (options: { model: EntityName; size?: number }) => string;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Base context without plugin-specific extensions
|
|
112
|
+
*
|
|
113
|
+
* This interface defines the core context properties available to all
|
|
114
|
+
* components in the c15t system before plugin extensions are applied.
|
|
115
|
+
*/
|
|
116
|
+
export interface BaseC15TContext {
|
|
117
|
+
/**
|
|
118
|
+
* Application name displayed in consent dialogs
|
|
119
|
+
*/
|
|
120
|
+
appName: string;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Configuration options for the c15t system
|
|
124
|
+
*/
|
|
125
|
+
options: C15TOptions;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* List of origins that are trusted for CORS and CSRF protection
|
|
129
|
+
*/
|
|
130
|
+
trustedOrigins: string[];
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Base URL for API requests
|
|
134
|
+
*/
|
|
135
|
+
baseURL: string;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Secret key used for signing cookies and tokens
|
|
139
|
+
*/
|
|
140
|
+
secret: string;
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Logger instance for recording events and errors
|
|
144
|
+
*/
|
|
145
|
+
logger: ReturnType<typeof createLogger>;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Function to generate unique IDs for entities
|
|
149
|
+
*
|
|
150
|
+
* @param options - Options for ID generation including entity type and length
|
|
151
|
+
* @returns A unique ID string
|
|
152
|
+
*/
|
|
153
|
+
generateId: (options: { model: EntityName; size?: number }) => string;
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Database adapter instance
|
|
157
|
+
*/
|
|
158
|
+
adapter: Adapter;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Entity registry for database operations
|
|
162
|
+
*/
|
|
163
|
+
registry: ReturnType<typeof createRegistry>;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Database tables for the consent system
|
|
167
|
+
*/
|
|
168
|
+
tables: ReturnType<typeof getConsentTables>;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* IP address of the client
|
|
172
|
+
*/
|
|
173
|
+
ipAddress?: string | null;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Subject agent of the client
|
|
177
|
+
*/
|
|
178
|
+
userAgent?: string | null;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Extended context type with plugin extensions
|
|
183
|
+
*
|
|
184
|
+
* This type extends the base context with plugin-specific properties,
|
|
185
|
+
* allowing plugins to add their own functionality to the context.
|
|
186
|
+
*
|
|
187
|
+
* @typeParam TPluginContext - Record of plugin-specific context extensions
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
* ```ts
|
|
191
|
+
* // Plugin extending the context with analytics capabilities
|
|
192
|
+
* interface AnalyticsContext {
|
|
193
|
+
* analytics: {
|
|
194
|
+
* trackEvent: (event: string, data: unknown) => void;
|
|
195
|
+
* getSessionId: () => string;
|
|
196
|
+
* }
|
|
197
|
+
* }
|
|
198
|
+
*
|
|
199
|
+
* // Using the extended context in a component
|
|
200
|
+
* function handleConsent(ctx: C15TContext<AnalyticsContext>) {
|
|
201
|
+
* // Base context is available
|
|
202
|
+
* const { baseURL, logger } = ctx;
|
|
203
|
+
*
|
|
204
|
+
* // Plugin context is also available
|
|
205
|
+
* ctx.analytics.trackEvent('consent_given', { timestamp: Date.now() });
|
|
206
|
+
* }
|
|
207
|
+
* ```
|
|
208
|
+
*/
|
|
209
|
+
export type C15TContext<
|
|
210
|
+
TPluginContext extends Record<string, unknown> = Record<string, unknown>,
|
|
211
|
+
> = BaseC15TContext & TPluginContext;
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Helper to extract context with a specific plugin's context type
|
|
215
|
+
*
|
|
216
|
+
* This utility type makes it easier to work with context that has been
|
|
217
|
+
* extended by a specific plugin, providing proper type information.
|
|
218
|
+
*
|
|
219
|
+
* @typeParam TPluginName - The name of the plugin providing the context extension
|
|
220
|
+
* @typeParam TPluginContext - The type of the context extension provided by the plugin
|
|
221
|
+
*
|
|
222
|
+
* @example
|
|
223
|
+
* ```ts
|
|
224
|
+
* // Working with a specific plugin's context
|
|
225
|
+
* function useGeoPlugin(ctx: ContextWithPlugin<'geo', GeoPluginContext>) {
|
|
226
|
+
* // TypeScript knows that ctx.geo exists and has the right type
|
|
227
|
+
* const country = ctx.geo.getCurrentCountry();
|
|
228
|
+
* return country;
|
|
229
|
+
* }
|
|
230
|
+
* ```
|
|
231
|
+
*/
|
|
232
|
+
export type ContextWithPlugin<
|
|
233
|
+
TPluginName extends string,
|
|
234
|
+
TPluginContext extends Record<string, unknown>,
|
|
235
|
+
> = C15TContext<Record<TPluginName, TPluginContext>>;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a string literal type
|
|
3
|
+
*
|
|
4
|
+
* This type ensures that only string literals are accepted, not general string types.
|
|
5
|
+
* It's useful for ensuring type safety with specific string values.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* // Function that only accepts literal strings, not string variables
|
|
10
|
+
* function doSomething(value: LiteralString) {
|
|
11
|
+
* // Implementation
|
|
12
|
+
* }
|
|
13
|
+
*
|
|
14
|
+
* // Valid usage:
|
|
15
|
+
* doSomething('specific-value');
|
|
16
|
+
*
|
|
17
|
+
* // Invalid usage:
|
|
18
|
+
* const dynamicString = getStringFromSomewhere();
|
|
19
|
+
* doSomething(dynamicString); // Type error
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export type LiteralString = '' | (string & Record<never, never>);
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Extracts all required keys from an object type
|
|
26
|
+
*
|
|
27
|
+
* This utility type identifies which keys in an object type are required
|
|
28
|
+
* (not optional or undefined). Useful for type manipulation in complex types.
|
|
29
|
+
*
|
|
30
|
+
* @typeParam BaseType - The object type to extract required keys from
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* interface Subject {
|
|
35
|
+
* id: number;
|
|
36
|
+
* name: string;
|
|
37
|
+
* email?: string;
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* // RequiredKeysOf<Subject> will be 'id' | 'name'
|
|
41
|
+
* type RequiredsubjectFields = RequiredKeysOf<Subject>;
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export type RequiredKeysOf<BaseType extends object> = Exclude<
|
|
45
|
+
{
|
|
46
|
+
[Key in keyof BaseType]: BaseType extends Record<Key, BaseType[Key]>
|
|
47
|
+
? Key
|
|
48
|
+
: never;
|
|
49
|
+
}[keyof BaseType],
|
|
50
|
+
undefined
|
|
51
|
+
>;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Makes all properties in an object type optional recursively
|
|
55
|
+
*
|
|
56
|
+
* Unlike TypeScript's built-in Partial<T>, this type makes nested object
|
|
57
|
+
* properties optional as well. Functions are preserved as-is.
|
|
58
|
+
*
|
|
59
|
+
* @typeParam T - The type to make deeply partial
|
|
60
|
+
*/
|
|
61
|
+
export type DeepPartial<T> = T extends (...args: unknown[]) => unknown
|
|
62
|
+
? T
|
|
63
|
+
: T extends object
|
|
64
|
+
? { [K in keyof T]?: DeepPartial<T[K]> }
|
|
65
|
+
: T;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Recursively expands object types for better IntelliSense
|
|
69
|
+
*
|
|
70
|
+
* This utility improves type display in editors by expanding nested type
|
|
71
|
+
* definitions. Particularly useful when working with complex types
|
|
72
|
+
* created through composition or manipulation.
|
|
73
|
+
*
|
|
74
|
+
* @typeParam T - The type to expand recursively
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```ts
|
|
78
|
+
* // Before expansion: Intersection of multiple types
|
|
79
|
+
* type ComplexType = TypeA & TypeB & { extraProp: string };
|
|
80
|
+
*
|
|
81
|
+
* // After expansion: Flat object type with all properties visible
|
|
82
|
+
* type ExpandedType = ExpandRecursively<ComplexType>;
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
export type ExpandRecursively<T> = T extends infer O
|
|
86
|
+
? { [K in keyof O]: O[K] }
|
|
87
|
+
: never;
|