@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,11 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
> @c15t/backend@0.0.1-rc.10 build /Users/christopherburns/glados/k/c15t/packages/backend
|
|
4
|
+
> rslib build
|
|
5
|
+
|
|
6
|
+
[1m[38;2;189;255;243m [39m[38;2;189;255;243m [39m[38;2;179;249;235mR[39m[38;2;168;244;227ms[39m[38;2;158;238;219ml[39m[38;2;147;233;211mi[39m[38;2;137;227;203mb[39m[38;2;137;227;203m [39m[38;2;126;222;194mv[39m[38;2;116;216;186m0[39m[38;2;105;211;178m.[39m[38;2;95;205;170m5[39m[38;2;84;200;162m.[39m[38;2;74;194;154m3[39m[38;2;74;194;154m
|
|
7
|
+
[39m[22m
|
|
8
|
+
[1m[32mready [39m[22m built in [1m0.69[22m s[90m (esm)[39m
|
|
9
|
+
[1m[32mready [39m[22m built in [1m0.69[22m s[90m (cjs)[39m
|
|
10
|
+
[1m[36mstart [39m[22m Generating DTS... [90m(esm)[39m
|
|
11
|
+
[1m[36mstart [39m[22m Generating DTS... [90m(cjs)[39m
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
> @c15t/backend@0.0.1-rc.10 fmt /Users/christopherburns/glados/k/c15t/packages/backend
|
|
4
|
+
> pnpm biome format --write . && biome check --formatter-enabled=false --linter-enabled=false --organize-imports-enabled=true --write
|
|
5
|
+
|
|
6
|
+
[0m[34mFormatted [0m[0m[34m164[0m[0m[34m [0m[0m[34mfiles[0m[0m[34m in [0m[0m[34m40[0m[0m[2m[34mms[0m[0m[34m.[0m[0m[34m No fixes applied.[0m
|
|
7
|
+
[0m[34mChecked [0m[0m[34m194[0m[0m[34m [0m[0m[34mfiles[0m[0m[34m in [0m[0m[34m32[0m[0m[2m[34mms[0m[0m[34m.[0m[0m[34m Fixed [0m[0m[34m3[0m[0m[34m [0m[0m[34mfiles[0m[0m[34m.[0m
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
> @c15t/backend@0.0.1-rc.10 test /Users/christopherburns/glados/k/c15t/packages/backend
|
|
4
|
+
> vitest
|
|
5
|
+
|
|
6
|
+
[?25l
|
|
7
|
+
[1m[7m[34m DEV [39m[27m[22m [34mv3.0.8 [39m[90m/Users/christopherburns/glados/k/c15t/packages/backend[39m
|
|
8
|
+
|
|
9
|
+
[?2026h
|
|
10
|
+
[1m[33m ❯ [39m[22msrc/api/routes/__tests__/status.test.ts[2m [queued][22m
|
|
11
|
+
|
|
12
|
+
[2m Test Files [22m[1m[32m0 passed[39m[22m[90m (4)[39m
|
|
13
|
+
[2m Tests [22m[1m[32m0 passed[39m[22m[90m (0)[39m
|
|
14
|
+
[2m Start at [22m13:42:20
|
|
15
|
+
[2m Duration [22m204ms
|
|
16
|
+
[?2026l[?2026h[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K[1A[K [32m✓[39m src/api/routes/__tests__/status.test.ts [2m([22m[2m2 tests[22m[2m)[22m[90m 16[2mms[22m[39m
|
|
17
|
+
|
|
18
|
+
[1m[33m ❯ [39m[22msrc/api/routes/__tests__/consent.test.ts[2m [queued][22m
|
|
19
|
+
[1m[33m ❯ [39m[22msrc/core.test.ts[2m [queued][22m
|
|
20
|
+
[1m[33m ❯ [39m[22msrc/init.test.ts[2m [queued][22m
|
|
21
|
+
|
|
22
|
+
[2m Test Files [22m[1m[32m1 passed[39m[22m[90m (4)[39m
|
|
23
|
+
[2m Tests [22m[1m[32m2 passed[39m[22m[90m (2)[39m
|
|
24
|
+
[2m Start at [22m13:42:20
|
|
25
|
+
[2m Duration [22m705ms
|
|
26
|
+
[?2026l[?25h[41m[30m ELIFECYCLE [39m[49m [31mTest failed. See above for more details.[39m
|
package/README-next.md
ADDED
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# c15t Next.js Integration
|
|
2
|
+
|
|
3
|
+
This guide shows how to integrate c15t into your Next.js application for consent management.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
Follow these steps to add c15t to your Next.js project:
|
|
8
|
+
|
|
9
|
+
1. Install the c15t package:
|
|
10
|
+
```bash
|
|
11
|
+
npm install @c15t/backend
|
|
12
|
+
# or
|
|
13
|
+
yarn add @c15t/backend
|
|
14
|
+
# or
|
|
15
|
+
pnpm add @c15t/backend
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
2. Create a shared c15t instance:
|
|
19
|
+
```typescript
|
|
20
|
+
// lib/c15t.ts
|
|
21
|
+
import { c15tInstance } from '@c15t/backend';
|
|
22
|
+
import { memoryAdapter } from '@c15t/backend/storage/memory';
|
|
23
|
+
|
|
24
|
+
export const C15TInstance = c15tInstance({
|
|
25
|
+
appName: 'My Next.js App',
|
|
26
|
+
trustedOrigins: ['http://localhost:3000'],
|
|
27
|
+
storage: memoryAdapter(), // Use a persistent adapter for production
|
|
28
|
+
consent: {
|
|
29
|
+
expiresIn: 60 * 60 * 24 * 365, // 1 year
|
|
30
|
+
updateAge: 60 * 60 * 24, // 24 hours
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
3. Create the API route handler:
|
|
36
|
+
```typescript
|
|
37
|
+
// app/api/c15t/[...route]/route.ts
|
|
38
|
+
import { toNextJsHandler } from '@c15t/backend/integrations/next';
|
|
39
|
+
import { C15TInstance } from '@/lib/c15t';
|
|
40
|
+
|
|
41
|
+
// Export all HTTP methods
|
|
42
|
+
export const { GET, POST, PUT, DELETE, OPTIONS } = toNextJsHandler(C15TInstance);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
4. Create a React client for client components:
|
|
46
|
+
```typescript
|
|
47
|
+
// lib/consent-client.ts
|
|
48
|
+
import { createConsentClient } from '@c15t/backend/integrations/react';
|
|
49
|
+
|
|
50
|
+
export const consentClient = createConsentClient({
|
|
51
|
+
baseUrl: '/api/c15t',
|
|
52
|
+
refreshInterval: 60 * 1000, // Check every minute (optional)
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
// Export hooks for use in components
|
|
56
|
+
export const { useConsent, useConditionalContent } = consentClient;
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Usage Examples
|
|
60
|
+
|
|
61
|
+
### Client Components
|
|
62
|
+
|
|
63
|
+
#### Consent Banner
|
|
64
|
+
```tsx
|
|
65
|
+
// components/ConsentBanner.tsx
|
|
66
|
+
'use client';
|
|
67
|
+
import { useConsent } from '@/lib/consent-client';
|
|
68
|
+
|
|
69
|
+
export function ConsentBanner() {
|
|
70
|
+
const { isLoading, hasConsented, acceptAll, declineAll } = useConsent();
|
|
71
|
+
|
|
72
|
+
if (isLoading || hasConsented) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return (
|
|
77
|
+
<div className="fixed bottom-0 left-0 right-0 bg-white p-4 shadow-lg">
|
|
78
|
+
<h3>Cookie Consent</h3>
|
|
79
|
+
<p>We use cookies to improve your experience.</p>
|
|
80
|
+
<div className="flex gap-2 mt-2">
|
|
81
|
+
<button onClick={() => acceptAll()}>Accept All</button>
|
|
82
|
+
<button onClick={() => declineAll()}>Decline All</button>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### Conditional Content
|
|
90
|
+
```tsx
|
|
91
|
+
// components/AnalyticsContent.tsx
|
|
92
|
+
'use client';
|
|
93
|
+
import { useConditionalContent } from '@/lib/consent-client';
|
|
94
|
+
|
|
95
|
+
export function AnalyticsContent() {
|
|
96
|
+
const { isLoading, canShow } = useConditionalContent('analytics');
|
|
97
|
+
|
|
98
|
+
if (isLoading) {
|
|
99
|
+
return <div>Loading...</div>;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (!canShow) {
|
|
103
|
+
return <div>Please accept analytics cookies to view this content.</div>;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return <div>Analytics content visible!</div>;
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### Server Components and Actions
|
|
111
|
+
|
|
112
|
+
#### Server Component with Consent Check
|
|
113
|
+
```tsx
|
|
114
|
+
// app/protected-content/page.tsx
|
|
115
|
+
import { getServerConsent } from '@c15t/backend/integrations/server';
|
|
116
|
+
import { headers } from 'next/headers';
|
|
117
|
+
import { C15TInstance } from '@/lib/c15t';
|
|
118
|
+
|
|
119
|
+
export default async function ProtectedPage() {
|
|
120
|
+
const consent = await getServerConsent(C15TInstance, { headers: headers() });
|
|
121
|
+
|
|
122
|
+
if (!consent.consented) {
|
|
123
|
+
return (
|
|
124
|
+
<div>
|
|
125
|
+
<h1>Consent Required</h1>
|
|
126
|
+
<p>Please accept cookies to view this content.</p>
|
|
127
|
+
</div>
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// User has consented, show protected content
|
|
132
|
+
return (
|
|
133
|
+
<div>
|
|
134
|
+
<h1>Protected Content</h1>
|
|
135
|
+
<p>This content is only visible to users who have provided consent.</p>
|
|
136
|
+
</div>
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
#### Server Action to Update Consent
|
|
142
|
+
```tsx
|
|
143
|
+
// app/actions.ts
|
|
144
|
+
'use server'
|
|
145
|
+
import { setServerConsent } from '@c15t/backend/integrations/server';
|
|
146
|
+
import { cookies } from 'next/headers';
|
|
147
|
+
import { C15TInstance } from '@/lib/c15t';
|
|
148
|
+
|
|
149
|
+
export async function acceptAllCookies() {
|
|
150
|
+
return await setServerConsent(
|
|
151
|
+
C15TInstance,
|
|
152
|
+
{
|
|
153
|
+
preferences: { analytics: true, marketing: true, preferences: true }
|
|
154
|
+
},
|
|
155
|
+
{ cookies: cookies() }
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
export async function rejectAllCookies() {
|
|
160
|
+
return await setServerConsent(
|
|
161
|
+
C15TInstance,
|
|
162
|
+
{
|
|
163
|
+
preferences: { analytics: false, marketing: false, preferences: false }
|
|
164
|
+
},
|
|
165
|
+
{ cookies: cookies() }
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Middleware for Consent Checking
|
|
171
|
+
|
|
172
|
+
```typescript
|
|
173
|
+
// middleware.ts
|
|
174
|
+
import { NextResponse } from 'next/server';
|
|
175
|
+
import { checkConsentCookie } from '@c15t/backend/integrations/next';
|
|
176
|
+
|
|
177
|
+
export function middleware(request) {
|
|
178
|
+
// Check if user has provided consent
|
|
179
|
+
const hasConsent = checkConsentCookie(request);
|
|
180
|
+
|
|
181
|
+
// For routes that require consent, redirect to consent page if not consented
|
|
182
|
+
if (!hasConsent && request.nextUrl.pathname.startsWith('/protected')) {
|
|
183
|
+
return NextResponse.redirect(new URL('/consent', request.url));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
return NextResponse.next();
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
export const config = {
|
|
190
|
+
matcher: ['/protected/:path*'],
|
|
191
|
+
};
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Advanced Configuration
|
|
195
|
+
|
|
196
|
+
### Custom Consent Preferences
|
|
197
|
+
|
|
198
|
+
You can define custom consent categories beyond the standard ones:
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
// lib/consent-client.ts
|
|
202
|
+
import { createConsentClient } from '@c15t/backend/integrations/react';
|
|
203
|
+
|
|
204
|
+
export const consentClient = createConsentClient({
|
|
205
|
+
defaultPreferences: {
|
|
206
|
+
analytics: true,
|
|
207
|
+
marketing: true,
|
|
208
|
+
preferences: true,
|
|
209
|
+
thirdParty: true, // Custom category
|
|
210
|
+
personalization: true, // Custom category
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Troubleshooting
|
|
216
|
+
|
|
217
|
+
### Common Issues
|
|
218
|
+
|
|
219
|
+
1. **API Route Not Found**: Make sure your route file is placed correctly at `app/api/c15t/[...route]/route.ts` or adjust your c15t configuration to match your route path.
|
|
220
|
+
|
|
221
|
+
2. **Cookie Not Set**: Ensure your API calls include `credentials: 'same-origin'` to allow cookies to be set. For server actions, make sure you're using the `cookies()` helper.
|
|
222
|
+
|
|
223
|
+
3. **CORS Issues**: If accessing the API from a different origin, configure the `trustedOrigins` in your c15t instance.
|
package/README.md
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# C15T Backend
|
|
2
|
+
|
|
3
|
+
A robust consent management system backend that provides flexible database adapters, comprehensive audit logging, and a powerful plugin system.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
### Database Adapters
|
|
8
|
+
- **Memory Adapter**: In-memory storage for development and testing
|
|
9
|
+
- **Kysely Adapter**: Type-safe SQL query builder with support for multiple databases
|
|
10
|
+
- **Prisma Adapter**: Integration with Prisma ORM
|
|
11
|
+
- **Drizzle Adapter**: Integration with Drizzle ORM
|
|
12
|
+
|
|
13
|
+
### Core Functionality
|
|
14
|
+
- **Consent Management**: Track and manage user consent preferences
|
|
15
|
+
- **Audit Logging**: Comprehensive logging of all consent-related actions
|
|
16
|
+
- **Geo-location Support**: Track user locations for compliance
|
|
17
|
+
- **Domain Management**: Handle multiple domains and subdomains
|
|
18
|
+
- **Policy Management**: Version and manage consent policies
|
|
19
|
+
|
|
20
|
+
### API Endpoints
|
|
21
|
+
- `/api/c15t/status`: System status and configuration
|
|
22
|
+
- `/api/c15t/consent`: Consent management endpoints
|
|
23
|
+
- `/api/c15t/policy`: Policy management endpoints
|
|
24
|
+
- `/api/c15t/audit`: Audit log access
|
|
25
|
+
- `/api/c15t/domain`: Domain management
|
|
26
|
+
- `/api/c15t/geo-location`: Geo-location tracking
|
|
27
|
+
|
|
28
|
+
## Getting Started
|
|
29
|
+
|
|
30
|
+
### Installation
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm install @c15t/backend
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Basic Usage
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { c15tInstance } from '@c15t/backend';
|
|
40
|
+
import { memoryAdapter } from '@c15t/backend/db/adapters/memory';
|
|
41
|
+
|
|
42
|
+
const instance = c15tInstance({
|
|
43
|
+
baseURL: 'http://localhost:3000',
|
|
44
|
+
database: memoryAdapter({}),
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// Handle requests
|
|
48
|
+
const response = await instance.handler(request);
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Database Configuration
|
|
52
|
+
|
|
53
|
+
```typescript
|
|
54
|
+
// Using Kysely adapter
|
|
55
|
+
import { kyselyAdapter } from '@c15t/backend/db/adapters/kysely';
|
|
56
|
+
|
|
57
|
+
const instance = c15tInstance({
|
|
58
|
+
baseURL: 'http://localhost:3000',
|
|
59
|
+
database: kyselyAdapter({
|
|
60
|
+
dialect: 'postgres',
|
|
61
|
+
connection: {
|
|
62
|
+
host: 'localhost',
|
|
63
|
+
port: 5432,
|
|
64
|
+
database: 'c15t',
|
|
65
|
+
user: 'postgres',
|
|
66
|
+
password: 'password',
|
|
67
|
+
},
|
|
68
|
+
}),
|
|
69
|
+
});
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Plugin System
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
const customPlugin = {
|
|
76
|
+
id: 'custom-plugin',
|
|
77
|
+
name: 'Custom Plugin',
|
|
78
|
+
type: 'test',
|
|
79
|
+
init: () => ({
|
|
80
|
+
context: {
|
|
81
|
+
customField: 'value',
|
|
82
|
+
},
|
|
83
|
+
}),
|
|
84
|
+
onRequest: async (request, ctx) => {
|
|
85
|
+
// Modify request
|
|
86
|
+
return { request: modifiedRequest };
|
|
87
|
+
},
|
|
88
|
+
onResponse: async (response, ctx) => {
|
|
89
|
+
// Modify response
|
|
90
|
+
return { response: modifiedResponse };
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const instance = c15tInstance({
|
|
95
|
+
baseURL: 'http://localhost:3000',
|
|
96
|
+
database: memoryAdapter({}),
|
|
97
|
+
plugins: [customPlugin],
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## API Documentation
|
|
102
|
+
|
|
103
|
+
### Core Instance
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
interface C15TInstance {
|
|
107
|
+
options: C15TOptions;
|
|
108
|
+
$context: Promise<Result<C15TContext, C15TError>>;
|
|
109
|
+
handler: (request: Request) => Promise<Result<Response, C15TError>>;
|
|
110
|
+
getApi: () => Promise<Result<Record<string, unknown>, C15TError>>;
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Database Adapters
|
|
115
|
+
|
|
116
|
+
Each adapter provides a consistent interface for database operations:
|
|
117
|
+
|
|
118
|
+
```typescript
|
|
119
|
+
interface DatabaseAdapter {
|
|
120
|
+
create: <T extends Record<string, unknown>>(table: string, data: T) => Promise<T>;
|
|
121
|
+
find: <T extends Record<string, unknown>>(table: string, query: Query) => Promise<T[]>;
|
|
122
|
+
update: <T extends Record<string, unknown>>(table: string, query: Query, data: Partial<T>) => Promise<T>;
|
|
123
|
+
delete: (table: string, query: Query) => Promise<void>;
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Plugin System
|
|
128
|
+
|
|
129
|
+
Plugins can extend the system's functionality:
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
interface C15TPlugin {
|
|
133
|
+
id: string;
|
|
134
|
+
name: string;
|
|
135
|
+
type: string;
|
|
136
|
+
init?: () => Promise<{ context: Record<string, unknown> }>;
|
|
137
|
+
onRequest?: (request: Request, ctx: C15TContext) => Promise<{ request: Request } | { response: Response } | undefined>;
|
|
138
|
+
onResponse?: (response: Response, ctx: C15TContext) => Promise<{ response: Response } | undefined>;
|
|
139
|
+
}
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## Error Handling
|
|
143
|
+
|
|
144
|
+
The system uses a Result type for error handling:
|
|
145
|
+
|
|
146
|
+
```typescript
|
|
147
|
+
type Result<T, E> = { isOk: true; value: T } | { isOk: false; error: E };
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Security Features
|
|
151
|
+
|
|
152
|
+
- Origin validation for CORS
|
|
153
|
+
- Request validation
|
|
154
|
+
- Audit logging
|
|
155
|
+
- Secure ID generation
|
|
156
|
+
- Input sanitization
|
|
157
|
+
|
|
158
|
+
## Contributing
|
|
159
|
+
|
|
160
|
+
1. Fork the repository
|
|
161
|
+
2. Create your feature branch
|
|
162
|
+
3. Commit your changes
|
|
163
|
+
4. Push to the branch
|
|
164
|
+
5. Create a new Pull Request
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import type { C15TContext } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Middleware that provides access to the C15T context
|
|
4
|
+
*
|
|
5
|
+
* This middleware is used as a base for all endpoint handlers to provide
|
|
6
|
+
* access to the C15T context.
|
|
7
|
+
*
|
|
8
|
+
* @returns A Promise resolving to the C15T context
|
|
9
|
+
* @internal This is primarily meant for internal use by the C15T system
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* This middleware serves as the foundation for context propagation throughout
|
|
13
|
+
* the consent management system. It's typically not used directly but is
|
|
14
|
+
* composed within other middleware and endpoint factories.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // This middleware is typically used internally by createAuthMiddleware and createAuthEndpoint
|
|
19
|
+
* const myMiddleware = createMiddleware.create({
|
|
20
|
+
* use: [optionsMiddleware]
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare const optionsMiddleware: <InputCtx extends import("better-call").MiddlewareInputContext<import("better-call").MiddlewareOptions>>(inputContext: InputCtx) => Promise<C15TContext>;
|
|
25
|
+
/**
|
|
26
|
+
* Creates an authentication middleware with pre-configured context access
|
|
27
|
+
*
|
|
28
|
+
* This factory combines the options middleware with post-hook functionality,
|
|
29
|
+
* allowing handlers to modify responses by setting headers.
|
|
30
|
+
*
|
|
31
|
+
* @returns A configured middleware for authentication endpoints
|
|
32
|
+
* @throws May propagate errors from underlying middleware implementations
|
|
33
|
+
* @throws Errors from your middleware handler will be propagated unless explicitly caught
|
|
34
|
+
*
|
|
35
|
+
* @remarks
|
|
36
|
+
* The middleware created by this factory automatically receives the C15T context
|
|
37
|
+
* and manages response header manipulation. It's particularly useful for
|
|
38
|
+
* authentication, authorization, and other cross-cutting concerns.
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* // Create a custom authentication middleware
|
|
43
|
+
* const verifySubjectMiddleware = createAuthMiddleware(async (context) => {
|
|
44
|
+
* const { subjectId } = context.params;
|
|
45
|
+
*
|
|
46
|
+
* // Verify the subject exists
|
|
47
|
+
* const subject = await getSubjectById(subjectId);
|
|
48
|
+
* if (!subject) {
|
|
49
|
+
* throw new APIError({
|
|
50
|
+
* message: 'Subject not found',
|
|
51
|
+
* status: 'NOT_FOUND'
|
|
52
|
+
* });
|
|
53
|
+
* }
|
|
54
|
+
*
|
|
55
|
+
* // Add subject to context
|
|
56
|
+
* return {
|
|
57
|
+
* context: {
|
|
58
|
+
* subject
|
|
59
|
+
* }
|
|
60
|
+
* };
|
|
61
|
+
* });
|
|
62
|
+
*
|
|
63
|
+
* // Apply the middleware to specific routes in router configuration
|
|
64
|
+
* router.use('/subjects/**', verifySubjectMiddleware);
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
export declare const createAuthMiddleware: {
|
|
68
|
+
<Options extends import("better-call").MiddlewareOptions, R>(options: Options, handler: (ctx: import("better-call").MiddlewareContext<Options, {
|
|
69
|
+
returned?: unknown;
|
|
70
|
+
responseHeaders?: Headers;
|
|
71
|
+
} & import("../types").BaseC15TContext & Record<string, unknown>>) => Promise<R>): (inputContext: import("better-call").MiddlewareInputContext<Options>) => Promise<R>;
|
|
72
|
+
<Options extends import("better-call").MiddlewareOptions, R_1>(handler: (ctx: import("better-call").MiddlewareContext<Options, {
|
|
73
|
+
returned?: unknown;
|
|
74
|
+
responseHeaders?: Headers;
|
|
75
|
+
} & import("../types").BaseC15TContext & Record<string, unknown>>) => Promise<R_1>): (inputContext: import("better-call").MiddlewareInputContext<Options>) => Promise<R_1>;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Creates an authentication endpoint with pre-configured context access
|
|
79
|
+
*
|
|
80
|
+
* This factory provides a standardized way to create endpoints with access
|
|
81
|
+
* to the C15T context.
|
|
82
|
+
*
|
|
83
|
+
* @returns A configured endpoint creator for authentication endpoints
|
|
84
|
+
* @throws May propagate errors from endpoint handler implementations
|
|
85
|
+
* @throws Any uncaught errors in the endpoint handler will be propagated through the system
|
|
86
|
+
*
|
|
87
|
+
* @remarks
|
|
88
|
+
* Endpoints created with this factory are automatically configured with
|
|
89
|
+
* the C15T context, making them ideal for building consent management APIs.
|
|
90
|
+
* These endpoints can be used in route configurations or with the toEndpoints
|
|
91
|
+
* function for automatic API generation.
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* // Create a consent status endpoint
|
|
96
|
+
* export const getConsentStatus = createAuthEndpoint(async (context) => {
|
|
97
|
+
* const { subjectId, domain } = context.params;
|
|
98
|
+
*
|
|
99
|
+
* // Get consent status from storage
|
|
100
|
+
* const status = await context.context.storage.getConsentStatus(subjectId, domain);
|
|
101
|
+
*
|
|
102
|
+
* return {
|
|
103
|
+
* subjectId,
|
|
104
|
+
* domain,
|
|
105
|
+
* hasConsented: status.consented,
|
|
106
|
+
* purposes: status.purposes,
|
|
107
|
+
* updatedAt: status.timestamp
|
|
108
|
+
* };
|
|
109
|
+
* });
|
|
110
|
+
*
|
|
111
|
+
* // Create a consent update endpoint with error handling
|
|
112
|
+
* export const updateConsent = createAuthEndpoint(async (context) => {
|
|
113
|
+
* const { subjectId, domain, purposes } = context.params;
|
|
114
|
+
*
|
|
115
|
+
* try {
|
|
116
|
+
* // Update consent status in storage
|
|
117
|
+
* await context.context.storage.updateConsentStatus(subjectId, domain, {
|
|
118
|
+
* consented: true,
|
|
119
|
+
* purposes,
|
|
120
|
+
* timestamp: new Date().toISOString()
|
|
121
|
+
* });
|
|
122
|
+
*
|
|
123
|
+
* return { success: true, subjectId, domain };
|
|
124
|
+
* } catch (error) {
|
|
125
|
+
* throw new APIError({
|
|
126
|
+
* message: 'Failed to update consent status',
|
|
127
|
+
* status: 'INTERNAL_SERVER_ERROR',
|
|
128
|
+
* cause: error
|
|
129
|
+
* });
|
|
130
|
+
* }
|
|
131
|
+
* });
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export declare const createAuthEndpoint: <Path extends string, Opts extends import("better-call").EndpointOptions, R>(path: Path, options: Opts, handler: (ctx: import("better-call").EndpointContext<Path, Opts, import("../types").BaseC15TContext & Record<string, unknown>>) => Promise<R>) => {
|
|
135
|
+
<C extends import("better-call").HasRequiredKeys<import("better-call").InputContext<Path, Opts & {
|
|
136
|
+
use: any[];
|
|
137
|
+
}>> extends true ? [import("better-call").InputContext<Path, Opts & {
|
|
138
|
+
use: any[];
|
|
139
|
+
}>] : [(import("better-call").InputContext<Path, Opts & {
|
|
140
|
+
use: any[];
|
|
141
|
+
}> | undefined)?]>(...inputCtx: C): Promise<C extends [{
|
|
142
|
+
asResponse: true;
|
|
143
|
+
}] ? Response : C extends [{
|
|
144
|
+
returnHeaders: true;
|
|
145
|
+
}] ? {
|
|
146
|
+
headers: Headers;
|
|
147
|
+
response: R;
|
|
148
|
+
} : R>;
|
|
149
|
+
options: Opts & {
|
|
150
|
+
use: any[];
|
|
151
|
+
};
|
|
152
|
+
path: Path;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Type definition for a C15T endpoint handler
|
|
156
|
+
*
|
|
157
|
+
* Represents the function signature returned by createAuthEndpoint.
|
|
158
|
+
* Used for type checking when building API endpoints.
|
|
159
|
+
*
|
|
160
|
+
* @remarks
|
|
161
|
+
* This type is used extensively in the toEndpoints function and
|
|
162
|
+
* when defining route handlers for the consent management system.
|
|
163
|
+
*/
|
|
164
|
+
export type C15TEndpoint = ReturnType<typeof createAuthEndpoint>;
|
|
165
|
+
/**
|
|
166
|
+
* Type definition for a C15T middleware handler
|
|
167
|
+
*
|
|
168
|
+
* Represents the function signature returned by createAuthMiddleware.
|
|
169
|
+
* Used for type checking when building middleware chains.
|
|
170
|
+
*
|
|
171
|
+
* @remarks
|
|
172
|
+
* This type is used when defining hooks and custom middleware
|
|
173
|
+
* for the consent management system pipeline.
|
|
174
|
+
*/
|
|
175
|
+
export type C15TMiddleware = ReturnType<typeof createAuthMiddleware>;
|
|
176
|
+
//# sourceMappingURL=call.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../src/api/call.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,iBAAiB,0JAQ5B,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,oBAAoB;;mBASlB,OAAO;0BACA,OAAO;;;mBADd,OAAO;0BACA,OAAO;;CAI3B,CAAC;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;CAE7B,CAAC;AAEH;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE;;;;;;;;;GASG;AACH,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|