@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
package/src/api/call.ts
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { createEndpoint, createMiddleware } from 'better-call';
|
|
2
|
+
import type { C15TContext } from '~/types';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Middleware that provides access to the C15T context
|
|
6
|
+
*
|
|
7
|
+
* This middleware is used as a base for all endpoint handlers to provide
|
|
8
|
+
* access to the C15T context.
|
|
9
|
+
*
|
|
10
|
+
* @returns A Promise resolving to the C15T context
|
|
11
|
+
* @internal This is primarily meant for internal use by the C15T system
|
|
12
|
+
*
|
|
13
|
+
* @remarks
|
|
14
|
+
* This middleware serves as the foundation for context propagation throughout
|
|
15
|
+
* the consent management system. It's typically not used directly but is
|
|
16
|
+
* composed within other middleware and endpoint factories.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* // This middleware is typically used internally by createAuthMiddleware and createAuthEndpoint
|
|
21
|
+
* const myMiddleware = createMiddleware.create({
|
|
22
|
+
* use: [optionsMiddleware]
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export const optionsMiddleware = createMiddleware(async () => {
|
|
27
|
+
/**
|
|
28
|
+
* This will be passed on the instance of
|
|
29
|
+
* the context. Used to infer the type
|
|
30
|
+
* here.
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
return {} as C15TContext;
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Creates an authentication middleware with pre-configured context access
|
|
38
|
+
*
|
|
39
|
+
* This factory combines the options middleware with post-hook functionality,
|
|
40
|
+
* allowing handlers to modify responses by setting headers.
|
|
41
|
+
*
|
|
42
|
+
* @returns A configured middleware for authentication endpoints
|
|
43
|
+
* @throws May propagate errors from underlying middleware implementations
|
|
44
|
+
* @throws Errors from your middleware handler will be propagated unless explicitly caught
|
|
45
|
+
*
|
|
46
|
+
* @remarks
|
|
47
|
+
* The middleware created by this factory automatically receives the C15T context
|
|
48
|
+
* and manages response header manipulation. It's particularly useful for
|
|
49
|
+
* authentication, authorization, and other cross-cutting concerns.
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* // Create a custom authentication middleware
|
|
54
|
+
* const verifySubjectMiddleware = createAuthMiddleware(async (context) => {
|
|
55
|
+
* const { subjectId } = context.params;
|
|
56
|
+
*
|
|
57
|
+
* // Verify the subject exists
|
|
58
|
+
* const subject = await getSubjectById(subjectId);
|
|
59
|
+
* if (!subject) {
|
|
60
|
+
* throw new APIError({
|
|
61
|
+
* message: 'Subject not found',
|
|
62
|
+
* status: 'NOT_FOUND'
|
|
63
|
+
* });
|
|
64
|
+
* }
|
|
65
|
+
*
|
|
66
|
+
* // Add subject to context
|
|
67
|
+
* return {
|
|
68
|
+
* context: {
|
|
69
|
+
* subject
|
|
70
|
+
* }
|
|
71
|
+
* };
|
|
72
|
+
* });
|
|
73
|
+
*
|
|
74
|
+
* // Apply the middleware to specific routes in router configuration
|
|
75
|
+
* router.use('/subjects/**', verifySubjectMiddleware);
|
|
76
|
+
* ```
|
|
77
|
+
*/
|
|
78
|
+
export const createAuthMiddleware = createMiddleware.create({
|
|
79
|
+
use: [
|
|
80
|
+
optionsMiddleware,
|
|
81
|
+
/**
|
|
82
|
+
* Only use for post hooks
|
|
83
|
+
* @internal
|
|
84
|
+
*/
|
|
85
|
+
createMiddleware(async () => {
|
|
86
|
+
return {} as {
|
|
87
|
+
returned?: unknown;
|
|
88
|
+
responseHeaders?: Headers;
|
|
89
|
+
};
|
|
90
|
+
}),
|
|
91
|
+
],
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Creates an authentication endpoint with pre-configured context access
|
|
96
|
+
*
|
|
97
|
+
* This factory provides a standardized way to create endpoints with access
|
|
98
|
+
* to the C15T context.
|
|
99
|
+
*
|
|
100
|
+
* @returns A configured endpoint creator for authentication endpoints
|
|
101
|
+
* @throws May propagate errors from endpoint handler implementations
|
|
102
|
+
* @throws Any uncaught errors in the endpoint handler will be propagated through the system
|
|
103
|
+
*
|
|
104
|
+
* @remarks
|
|
105
|
+
* Endpoints created with this factory are automatically configured with
|
|
106
|
+
* the C15T context, making them ideal for building consent management APIs.
|
|
107
|
+
* These endpoints can be used in route configurations or with the toEndpoints
|
|
108
|
+
* function for automatic API generation.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* // Create a consent status endpoint
|
|
113
|
+
* export const getConsentStatus = createAuthEndpoint(async (context) => {
|
|
114
|
+
* const { subjectId, domain } = context.params;
|
|
115
|
+
*
|
|
116
|
+
* // Get consent status from storage
|
|
117
|
+
* const status = await context.context.storage.getConsentStatus(subjectId, domain);
|
|
118
|
+
*
|
|
119
|
+
* return {
|
|
120
|
+
* subjectId,
|
|
121
|
+
* domain,
|
|
122
|
+
* hasConsented: status.consented,
|
|
123
|
+
* purposes: status.purposes,
|
|
124
|
+
* updatedAt: status.timestamp
|
|
125
|
+
* };
|
|
126
|
+
* });
|
|
127
|
+
*
|
|
128
|
+
* // Create a consent update endpoint with error handling
|
|
129
|
+
* export const updateConsent = createAuthEndpoint(async (context) => {
|
|
130
|
+
* const { subjectId, domain, purposes } = context.params;
|
|
131
|
+
*
|
|
132
|
+
* try {
|
|
133
|
+
* // Update consent status in storage
|
|
134
|
+
* await context.context.storage.updateConsentStatus(subjectId, domain, {
|
|
135
|
+
* consented: true,
|
|
136
|
+
* purposes,
|
|
137
|
+
* timestamp: new Date().toISOString()
|
|
138
|
+
* });
|
|
139
|
+
*
|
|
140
|
+
* return { success: true, subjectId, domain };
|
|
141
|
+
* } catch (error) {
|
|
142
|
+
* throw new APIError({
|
|
143
|
+
* message: 'Failed to update consent status',
|
|
144
|
+
* status: 'INTERNAL_SERVER_ERROR',
|
|
145
|
+
* cause: error
|
|
146
|
+
* });
|
|
147
|
+
* }
|
|
148
|
+
* });
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
export const createAuthEndpoint = createEndpoint.create({
|
|
152
|
+
use: [optionsMiddleware],
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Type definition for a C15T endpoint handler
|
|
157
|
+
*
|
|
158
|
+
* Represents the function signature returned by createAuthEndpoint.
|
|
159
|
+
* Used for type checking when building API endpoints.
|
|
160
|
+
*
|
|
161
|
+
* @remarks
|
|
162
|
+
* This type is used extensively in the toEndpoints function and
|
|
163
|
+
* when defining route handlers for the consent management system.
|
|
164
|
+
*/
|
|
165
|
+
export type C15TEndpoint = ReturnType<typeof createAuthEndpoint>;
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Type definition for a C15T middleware handler
|
|
169
|
+
*
|
|
170
|
+
* Represents the function signature returned by createAuthMiddleware.
|
|
171
|
+
* Used for type checking when building middleware chains.
|
|
172
|
+
*
|
|
173
|
+
* @remarks
|
|
174
|
+
* This type is used when defining hooks and custom middleware
|
|
175
|
+
* for the consent management system pipeline.
|
|
176
|
+
*/
|
|
177
|
+
export type C15TMiddleware = ReturnType<typeof createAuthMiddleware>;
|
package/src/api/index.ts
ADDED
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
import {
|
|
2
|
+
APIError,
|
|
3
|
+
type Endpoint,
|
|
4
|
+
type Middleware,
|
|
5
|
+
type UnionToIntersection,
|
|
6
|
+
createRouter,
|
|
7
|
+
} from 'better-call';
|
|
8
|
+
import type { C15TContext, C15TOptions, C15TPlugin } from '~/types';
|
|
9
|
+
import { getIp } from '~/utils/ip';
|
|
10
|
+
|
|
11
|
+
import { logger } from '~/utils/logger';
|
|
12
|
+
import { originCheckMiddleware } from './middlewares/origin-check';
|
|
13
|
+
import { validateContextMiddleware } from './middlewares/validate-context';
|
|
14
|
+
import { baseEndpoints } from './routes';
|
|
15
|
+
import { ok } from './routes/ok';
|
|
16
|
+
import { toEndpoints } from './to-endpoints';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Retrieves and configures endpoints from plugins and core functionality
|
|
20
|
+
*
|
|
21
|
+
* This function collects endpoints from plugins, combines them with
|
|
22
|
+
* base endpoints, and builds an API object with properly configured
|
|
23
|
+
* handlers.
|
|
24
|
+
*
|
|
25
|
+
* @remarks
|
|
26
|
+
* Plugin endpoints are merged with core endpoints, with core endpoints
|
|
27
|
+
* taking precedence in case of naming conflicts.
|
|
28
|
+
*
|
|
29
|
+
* @typeParam ContextType - The specific context type extending C15TContext
|
|
30
|
+
* @typeParam OptionsType - Configuration options type extending C15TOptions
|
|
31
|
+
* @param ctx - The consent management context (or promise resolving to it)
|
|
32
|
+
* @param options - Configuration options for the consent system
|
|
33
|
+
* @returns Object containing API handlers and middleware configurations
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* const { api, middlewares } = getEndpoints(contextInstance, {
|
|
38
|
+
* plugins: [analyticsPlugin(), geoPlugin()]
|
|
39
|
+
* });
|
|
40
|
+
*
|
|
41
|
+
* // Use the configured API
|
|
42
|
+
* const response = await api.getConsentStatus({
|
|
43
|
+
* params: { subjectId: "sub_x1pftyoufsm7xgo1kv" }
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export function getEndpoints<
|
|
48
|
+
ContextType extends C15TContext,
|
|
49
|
+
OptionsType extends C15TOptions,
|
|
50
|
+
>(ctx: Promise<ContextType> | ContextType, options: OptionsType) {
|
|
51
|
+
const pluginEndpoints = options.plugins?.reduce<Record<string, Endpoint>>(
|
|
52
|
+
(acc, plugin) => {
|
|
53
|
+
if (plugin.endpoints) {
|
|
54
|
+
Object.assign(acc, plugin.endpoints);
|
|
55
|
+
}
|
|
56
|
+
return acc;
|
|
57
|
+
},
|
|
58
|
+
{}
|
|
59
|
+
);
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Type representing the intersection of all plugin endpoint types
|
|
63
|
+
*
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
type PluginEndpoint = UnionToIntersection<
|
|
67
|
+
OptionsType['plugins'] extends Array<infer PluginType>
|
|
68
|
+
? PluginType extends C15TPlugin
|
|
69
|
+
? PluginType extends {
|
|
70
|
+
endpoints: infer EndpointType;
|
|
71
|
+
}
|
|
72
|
+
? EndpointType
|
|
73
|
+
: Record<string, never>
|
|
74
|
+
: Record<string, never>
|
|
75
|
+
: Record<string, never>
|
|
76
|
+
>;
|
|
77
|
+
|
|
78
|
+
const middlewares =
|
|
79
|
+
options.plugins
|
|
80
|
+
?.map((plugin) =>
|
|
81
|
+
plugin.middlewares?.map((m) => {
|
|
82
|
+
const middleware = (async (context: { context: ContextType }) => {
|
|
83
|
+
return m.middleware({
|
|
84
|
+
...context,
|
|
85
|
+
context: {
|
|
86
|
+
...ctx,
|
|
87
|
+
...context.context,
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
}) as Middleware;
|
|
91
|
+
middleware.options = m.middleware.options;
|
|
92
|
+
return {
|
|
93
|
+
path: m.path,
|
|
94
|
+
middleware,
|
|
95
|
+
};
|
|
96
|
+
})
|
|
97
|
+
)
|
|
98
|
+
.filter(
|
|
99
|
+
(plugin): plugin is NonNullable<typeof plugin> => plugin !== undefined
|
|
100
|
+
)
|
|
101
|
+
.flat() || [];
|
|
102
|
+
|
|
103
|
+
const endpoints = {
|
|
104
|
+
...baseEndpoints,
|
|
105
|
+
...pluginEndpoints,
|
|
106
|
+
ok,
|
|
107
|
+
// error,
|
|
108
|
+
};
|
|
109
|
+
const api = toEndpoints(endpoints, ctx);
|
|
110
|
+
return {
|
|
111
|
+
api: api as typeof endpoints & PluginEndpoint,
|
|
112
|
+
middlewares,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Creates a router for handling API requests
|
|
118
|
+
*
|
|
119
|
+
* Sets up routing with proper error handling, CORS, and response processing.
|
|
120
|
+
* Integrates plugin-provided middlewares and response handlers.
|
|
121
|
+
*
|
|
122
|
+
* @remarks
|
|
123
|
+
* This router automatically applies the origin check middleware to all routes
|
|
124
|
+
* and handles error conditions appropriately based on configuration.
|
|
125
|
+
*
|
|
126
|
+
* @typeParam ContextType - The specific context type extending C15TContext
|
|
127
|
+
* @typeParam OptionsType - Configuration options type extending C15TOptions
|
|
128
|
+
* @param ctx - The initialized consent management context
|
|
129
|
+
* @param options - Configuration options for the consent system
|
|
130
|
+
* @returns A configured router with handler and endpoint functions
|
|
131
|
+
* @throws May throw errors in the onError handler if options.onAPIError.throw is true
|
|
132
|
+
*
|
|
133
|
+
* @example
|
|
134
|
+
* ```typescript
|
|
135
|
+
* const consentRouter = router(contextInstance, {
|
|
136
|
+
* logger: { level: 'error' },
|
|
137
|
+
* plugins: [analyticsPlugin()]
|
|
138
|
+
* });
|
|
139
|
+
*
|
|
140
|
+
* // Use the router to handle incoming requests
|
|
141
|
+
* app.use('/api/consent', async (req, res) => {
|
|
142
|
+
* const response = await consentRouter.handler(
|
|
143
|
+
* new Request(`https://example.com${req.url}`, {
|
|
144
|
+
* method: req.method,
|
|
145
|
+
* headers: req.headers,
|
|
146
|
+
* body: req.body ? JSON.stringify(req.body) : undefined
|
|
147
|
+
* })
|
|
148
|
+
* );
|
|
149
|
+
*
|
|
150
|
+
* // Send the response back
|
|
151
|
+
* res.status(response.status);
|
|
152
|
+
* response.headers.forEach((value, key) => {
|
|
153
|
+
* res.setHeader(key, value);
|
|
154
|
+
* });
|
|
155
|
+
* const body = await response.text();
|
|
156
|
+
* res.send(body);
|
|
157
|
+
* });
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
export const router = <
|
|
161
|
+
ContextType extends C15TContext,
|
|
162
|
+
OptionsType extends C15TOptions,
|
|
163
|
+
>(
|
|
164
|
+
ctx: ContextType,
|
|
165
|
+
options: OptionsType
|
|
166
|
+
) => {
|
|
167
|
+
const { api, middlewares } = getEndpoints(ctx, options);
|
|
168
|
+
|
|
169
|
+
// Check for baseURL and properly handle it
|
|
170
|
+
let basePath = '';
|
|
171
|
+
try {
|
|
172
|
+
if (ctx.baseURL) {
|
|
173
|
+
const url = new URL(ctx.baseURL);
|
|
174
|
+
basePath = url.pathname;
|
|
175
|
+
}
|
|
176
|
+
} catch {
|
|
177
|
+
basePath = '/api/c15t';
|
|
178
|
+
}
|
|
179
|
+
// Ensure we have a valid basePath
|
|
180
|
+
if (!basePath || basePath === '/') {
|
|
181
|
+
basePath = '/api/c15t';
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Configure and create the router instance
|
|
186
|
+
*
|
|
187
|
+
* @internal
|
|
188
|
+
*/
|
|
189
|
+
const routerInstance = createRouter(api, {
|
|
190
|
+
routerContext: ctx,
|
|
191
|
+
openapi: {
|
|
192
|
+
disabled: false,
|
|
193
|
+
},
|
|
194
|
+
basePath,
|
|
195
|
+
routerMiddleware: [
|
|
196
|
+
{
|
|
197
|
+
path: '/**',
|
|
198
|
+
middleware: validateContextMiddleware,
|
|
199
|
+
},
|
|
200
|
+
{
|
|
201
|
+
path: '/**',
|
|
202
|
+
middleware: originCheckMiddleware,
|
|
203
|
+
},
|
|
204
|
+
...middlewares,
|
|
205
|
+
],
|
|
206
|
+
async onRequest(req) {
|
|
207
|
+
// Add IP address to context
|
|
208
|
+
(ctx as C15TContext).ipAddress = getIp(req, options);
|
|
209
|
+
(ctx as C15TContext).userAgent = req.headers.get('user-agent');
|
|
210
|
+
|
|
211
|
+
for (const plugin of ctx.options.plugins || []) {
|
|
212
|
+
if (plugin.onRequest) {
|
|
213
|
+
const response = await plugin.onRequest(req, ctx);
|
|
214
|
+
if (response && 'response' in response) {
|
|
215
|
+
return response.response;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
return req;
|
|
220
|
+
},
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Handle response processing through plugins
|
|
224
|
+
*
|
|
225
|
+
* @internal
|
|
226
|
+
* @param res - The response to process
|
|
227
|
+
* @returns The processed response
|
|
228
|
+
*/
|
|
229
|
+
async onResponse(res) {
|
|
230
|
+
for (const plugin of ctx.options.plugins || []) {
|
|
231
|
+
if (plugin.onResponse) {
|
|
232
|
+
const response = await plugin.onResponse(res, ctx);
|
|
233
|
+
if (response) {
|
|
234
|
+
return response.response;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return res;
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Handle errors that occur during request processing
|
|
243
|
+
*
|
|
244
|
+
* @internal
|
|
245
|
+
* @param e - The error that occurred
|
|
246
|
+
*/
|
|
247
|
+
onError(e) {
|
|
248
|
+
if (e instanceof APIError && e.status === 'FOUND') {
|
|
249
|
+
return;
|
|
250
|
+
}
|
|
251
|
+
if (options.onAPIError?.throw) {
|
|
252
|
+
throw e;
|
|
253
|
+
}
|
|
254
|
+
if (options.onAPIError?.onError) {
|
|
255
|
+
options.onAPIError.onError(e, ctx);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
const optLogLevel = options.logger?.level;
|
|
260
|
+
const log =
|
|
261
|
+
optLogLevel === 'error' ||
|
|
262
|
+
optLogLevel === 'warn' ||
|
|
263
|
+
optLogLevel === 'debug'
|
|
264
|
+
? logger
|
|
265
|
+
: undefined;
|
|
266
|
+
if (options.logger?.disabled !== true) {
|
|
267
|
+
if (
|
|
268
|
+
e &&
|
|
269
|
+
typeof e === 'object' &&
|
|
270
|
+
'message' in e &&
|
|
271
|
+
typeof e.message === 'string' &&
|
|
272
|
+
(e.message.includes('no column') ||
|
|
273
|
+
e.message.includes('column') ||
|
|
274
|
+
e.message.includes('relation') ||
|
|
275
|
+
e.message.includes('table') ||
|
|
276
|
+
e.message.includes('does not exist'))
|
|
277
|
+
) {
|
|
278
|
+
ctx.logger?.error(e.message);
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if (e instanceof APIError) {
|
|
283
|
+
if (e.status === 'INTERNAL_SERVER_ERROR') {
|
|
284
|
+
ctx.logger.error(e.status, e);
|
|
285
|
+
}
|
|
286
|
+
log?.error(e.message);
|
|
287
|
+
} else {
|
|
288
|
+
ctx.logger?.error(
|
|
289
|
+
e && typeof e === 'object' && 'name' in e ? (e.name as string) : '',
|
|
290
|
+
e
|
|
291
|
+
);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
return routerInstance;
|
|
298
|
+
};
|
|
299
|
+
|
|
300
|
+
// export * from './routes';
|
|
301
|
+
// export * from './middlewares';
|
|
302
|
+
export * from './call';
|
|
303
|
+
export { APIError } from 'better-call';
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* C15T Middleware Exports
|
|
3
|
+
*
|
|
4
|
+
* This barrel file exports all middlewares used by the C15T consent management system.
|
|
5
|
+
* Middlewares handle cross-cutting concerns like security, validation, and context
|
|
6
|
+
* enrichment for API endpoints.
|
|
7
|
+
*
|
|
8
|
+
* @module middlewares
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* The middlewares in this directory implement various security and validation
|
|
12
|
+
* requirements for the consent management API. They can be applied globally to
|
|
13
|
+
* all routes or selectively to specific endpoint groups.
|
|
14
|
+
*
|
|
15
|
+
* Currently included middlewares:
|
|
16
|
+
* - Origin check middleware: Validates URLs against trusted origins to prevent CSRF
|
|
17
|
+
* and open redirect vulnerabilities
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* // Import all middlewares
|
|
22
|
+
* import { originCheckMiddleware, originCheck } from '~/api/middlewares';
|
|
23
|
+
*
|
|
24
|
+
* // Apply middleware to a router
|
|
25
|
+
* const router = createRouter(endpoints, {
|
|
26
|
+
* routerMiddleware: [
|
|
27
|
+
* {
|
|
28
|
+
* path: '/**',
|
|
29
|
+
* middleware: originCheckMiddleware
|
|
30
|
+
* }
|
|
31
|
+
* ]
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // Create a targeted middleware for a specific field
|
|
35
|
+
* const validateReturnUrl = originCheck(ctx => ctx.body?.returnUrl);
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export * from './origin-check';
|