@c15t/backend 1.5.0 → 1.6.0
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 +63 -37
- package/CHANGELOG.md +4 -209
- package/README.md +86 -164
- package/dist/contracts/consent/index.d.ts +103 -615
- package/dist/contracts/consent/index.d.ts.map +1 -1
- package/dist/contracts/consent/post.contract.d.ts +42 -140
- package/dist/contracts/consent/post.contract.d.ts.map +1 -1
- package/dist/contracts/consent/show-banner.contract.d.ts +28 -376
- package/dist/contracts/consent/show-banner.contract.d.ts.map +1 -1
- package/dist/contracts/consent/verify.contract.d.ts +33 -99
- package/dist/contracts/consent/verify.contract.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +222 -1356
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/meta/index.d.ts +8 -63
- package/dist/contracts/meta/index.d.ts.map +1 -1
- package/dist/contracts/meta/status.contract.d.ts +8 -63
- package/dist/contracts/meta/status.contract.d.ts.map +1 -1
- package/dist/contracts/shared/jurisdiction.schema.d.ts +21 -9
- package/dist/contracts/shared/jurisdiction.schema.d.ts.map +1 -1
- package/dist/contracts.cjs +100 -106
- package/dist/contracts.js +100 -106
- package/dist/core.cjs +681 -681
- package/dist/core.d.ts +118 -678
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +634 -637
- package/dist/handlers/consent/index.d.ts +103 -615
- package/dist/handlers/consent/index.d.ts.map +1 -1
- package/dist/handlers/consent/post.handler.d.ts +42 -140
- package/dist/handlers/consent/post.handler.d.ts.map +1 -1
- package/dist/handlers/consent/show-banner/handler.d.ts +28 -376
- package/dist/handlers/consent/show-banner/handler.d.ts.map +1 -1
- package/dist/handlers/consent/show-banner/translations.d.ts.map +1 -1
- package/dist/handlers/consent/verify.handler.d.ts +33 -99
- package/dist/handlers/consent/verify.handler.d.ts.map +1 -1
- package/dist/handlers/meta/index.d.ts +8 -63
- package/dist/handlers/meta/index.d.ts.map +1 -1
- package/dist/handlers/meta/status.handler.d.ts +8 -63
- package/dist/handlers/meta/status.handler.d.ts.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/middleware/openapi/index.d.ts +2 -2
- package/dist/middleware/openapi/index.d.ts.map +1 -1
- package/dist/pkgs/data-model/fields/index.cjs +14 -26
- package/dist/pkgs/data-model/fields/index.d.ts +4 -4
- package/dist/pkgs/data-model/fields/index.d.ts.map +1 -1
- package/dist/pkgs/data-model/fields/index.js +14 -26
- package/dist/pkgs/data-model/fields/zod-fields.d.ts +195 -871
- package/dist/pkgs/data-model/fields/zod-fields.d.ts.map +1 -1
- package/dist/pkgs/data-model/hooks/index.d.ts +2 -2
- package/dist/pkgs/data-model/hooks/index.d.ts.map +1 -1
- package/dist/pkgs/data-model/index.cjs +346 -358
- package/dist/pkgs/data-model/index.d.ts +1 -1
- package/dist/pkgs/data-model/index.d.ts.map +1 -1
- package/dist/pkgs/data-model/index.js +345 -357
- package/dist/pkgs/data-model/schema/index.cjs +346 -358
- package/dist/pkgs/data-model/schema/index.d.ts +1 -1
- package/dist/pkgs/data-model/schema/index.d.ts.map +1 -1
- package/dist/pkgs/data-model/schema/index.js +345 -357
- package/dist/pkgs/data-model/schema/schemas.d.ts +2 -2
- package/dist/pkgs/data-model/schema/schemas.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.d.ts +3 -0
- package/dist/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.cjs +158 -170
- package/dist/pkgs/db-adapters/adapters/drizzle-adapter/index.js +157 -169
- package/dist/pkgs/db-adapters/adapters/index.d.ts +2 -2
- package/dist/pkgs/db-adapters/adapters/index.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.cjs +215 -227
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.d.ts +2 -2
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/index.js +213 -225
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.d.ts +2 -0
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts +1 -1
- package/dist/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/adapters/memory-adapter/index.cjs +158 -170
- package/dist/pkgs/db-adapters/adapters/memory-adapter/index.js +157 -169
- package/dist/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.d.ts +3 -0
- package/dist/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.cjs +243 -255
- package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.d.ts +1 -1
- package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/adapters/prisma-adapter/index.js +241 -253
- package/dist/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.d.ts +3 -0
- package/dist/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/index.cjs +714 -726
- package/dist/pkgs/db-adapters/index.d.ts +6 -6
- package/dist/pkgs/db-adapters/index.d.ts.map +1 -1
- package/dist/pkgs/db-adapters/index.js +708 -720
- package/dist/pkgs/migrations/get-migration.d.ts.map +1 -1
- package/dist/pkgs/migrations/get-schema/get-schema.d.ts.map +1 -1
- package/dist/pkgs/migrations/get-schema/process-tables.d.ts.map +1 -1
- package/dist/pkgs/migrations/index.cjs +236 -248
- package/dist/pkgs/migrations/index.d.ts +4 -4
- package/dist/pkgs/migrations/index.d.ts.map +1 -1
- package/dist/pkgs/migrations/index.js +235 -247
- package/dist/pkgs/results/index.cjs +67 -67
- package/dist/pkgs/results/index.d.ts +5 -5
- package/dist/pkgs/results/index.d.ts.map +1 -1
- package/dist/pkgs/results/index.js +67 -67
- package/dist/pkgs/results/orpc-error-handler.d.ts +1 -1
- package/dist/pkgs/results/orpc-error-handler.d.ts.map +1 -1
- package/dist/pkgs/types/index.d.ts +1 -2
- package/dist/pkgs/types/index.d.ts.map +1 -1
- package/dist/pkgs/types/options.d.ts +9 -2
- package/dist/pkgs/types/options.d.ts.map +1 -1
- package/dist/pkgs/utils/index.d.ts +1 -1
- package/dist/pkgs/utils/index.d.ts.map +1 -1
- package/dist/pkgs/utils/logger.d.ts +1 -1
- package/dist/pkgs/utils/logger.d.ts.map +1 -1
- package/dist/router.cjs +114 -117
- package/dist/router.d.ts +111 -678
- package/dist/router.d.ts.map +1 -1
- package/dist/router.js +114 -117
- package/dist/schema/audit-log/schema.d.ts +2 -24
- package/dist/schema/audit-log/schema.d.ts.map +1 -1
- package/dist/schema/audit-log/table.d.ts +2 -24
- package/dist/schema/audit-log/table.d.ts.map +1 -1
- package/dist/schema/consent/registry.d.ts +8 -8
- package/dist/schema/consent/schema.d.ts +9 -33
- package/dist/schema/consent/schema.d.ts.map +1 -1
- package/dist/schema/consent/table.d.ts +9 -33
- package/dist/schema/consent/table.d.ts.map +1 -1
- package/dist/schema/consent-policy/registry.d.ts +20 -20
- package/dist/schema/consent-policy/schema.d.ts +22 -30
- package/dist/schema/consent-policy/schema.d.ts.map +1 -1
- package/dist/schema/consent-policy/table.d.ts +13 -29
- package/dist/schema/consent-policy/table.d.ts.map +1 -1
- package/dist/schema/consent-purpose/registry.d.ts +6 -6
- package/dist/schema/consent-purpose/schema.d.ts +5 -27
- package/dist/schema/consent-purpose/schema.d.ts.map +1 -1
- package/dist/schema/consent-purpose/table.d.ts +5 -27
- package/dist/schema/consent-purpose/table.d.ts.map +1 -1
- package/dist/schema/consent-record/schema.d.ts +3 -19
- package/dist/schema/consent-record/schema.d.ts.map +1 -1
- package/dist/schema/consent-record/table.d.ts +3 -19
- package/dist/schema/consent-record/table.d.ts.map +1 -1
- package/dist/schema/create-registry.d.ts +58 -58
- package/dist/schema/definition.d.ts +42 -176
- package/dist/schema/definition.d.ts.map +1 -1
- package/dist/schema/domain/registry.d.ts +20 -20
- package/dist/schema/domain/schema.d.ts +6 -24
- package/dist/schema/domain/schema.d.ts.map +1 -1
- package/dist/schema/domain/table.d.ts +6 -24
- package/dist/schema/domain/table.d.ts.map +1 -1
- package/dist/schema/index.cjs +426 -438
- package/dist/schema/index.d.ts +12 -12
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +426 -438
- package/dist/schema/schemas.d.ts +42 -176
- package/dist/schema/schemas.d.ts.map +1 -1
- package/dist/schema/subject/registry.d.ts +4 -4
- package/dist/schema/subject/schema.d.ts +4 -20
- package/dist/schema/subject/schema.d.ts.map +1 -1
- package/dist/schema/subject/table.d.ts +4 -20
- package/dist/schema/subject/table.d.ts.map +1 -1
- package/dist/schema/types.d.ts +1 -1
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/testing/contract-testing.d.ts +3 -2
- package/dist/testing/contract-testing.d.ts.map +1 -1
- package/dist/types/index.d.ts +5 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/options.d.ts +2 -2
- package/dist/types/options.d.ts.map +1 -1
- package/dist/v2/contracts/consent/index.d.ts +260 -0
- package/dist/v2/contracts/consent/index.d.ts.map +1 -0
- package/dist/v2/contracts/consent/index.test.d.ts +2 -0
- package/dist/v2/contracts/consent/index.test.d.ts.map +1 -0
- package/dist/v2/contracts/consent/post.contract.d.ts +114 -0
- package/dist/v2/contracts/consent/post.contract.d.ts.map +1 -0
- package/dist/v2/contracts/consent/post.contract.test.d.ts +2 -0
- package/dist/v2/contracts/consent/post.contract.test.d.ts.map +1 -0
- package/dist/v2/contracts/consent/show-banner.contract.d.ts +68 -0
- package/dist/v2/contracts/consent/show-banner.contract.d.ts.map +1 -0
- package/dist/v2/contracts/consent/show-banner.contract.test.d.ts +2 -0
- package/dist/v2/contracts/consent/show-banner.contract.test.d.ts.map +1 -0
- package/dist/v2/contracts/consent/verify.contract.d.ts +81 -0
- package/dist/v2/contracts/consent/verify.contract.d.ts.map +1 -0
- package/dist/v2/contracts/consent/verify.contract.test.d.ts +2 -0
- package/dist/v2/contracts/consent/verify.contract.test.d.ts.map +1 -0
- package/dist/v2/contracts/index.cjs +644 -0
- package/dist/v2/contracts/index.d.ts +563 -0
- package/dist/v2/contracts/index.d.ts.map +1 -0
- package/dist/v2/contracts/index.js +607 -0
- package/dist/v2/contracts/meta/index.d.ts +19 -0
- package/dist/v2/contracts/meta/index.d.ts.map +1 -0
- package/dist/v2/contracts/meta/index.test.d.ts +2 -0
- package/dist/v2/contracts/meta/index.test.d.ts.map +1 -0
- package/dist/v2/contracts/meta/status.contract.d.ts +18 -0
- package/dist/v2/contracts/meta/status.contract.d.ts.map +1 -0
- package/dist/v2/contracts/meta/status.contract.test.d.ts +2 -0
- package/dist/v2/contracts/meta/status.contract.test.d.ts.map +1 -0
- package/dist/v2/contracts/shared/jurisdiction.schema.d.ts +36 -0
- package/dist/v2/contracts/shared/jurisdiction.schema.d.ts.map +1 -0
- package/dist/v2/contracts/test.utils.d.ts +38 -0
- package/dist/v2/contracts/test.utils.d.ts.map +1 -0
- package/dist/v2/core.cjs +2181 -0
- package/dist/v2/core.d.ts +364 -0
- package/dist/v2/core.d.ts.map +1 -0
- package/dist/v2/core.js +2130 -0
- package/dist/v2/db/adapters/drizzle.cjs +36 -0
- package/dist/v2/db/adapters/drizzle.d.ts +2 -0
- package/dist/v2/db/adapters/drizzle.d.ts.map +1 -0
- package/dist/v2/db/adapters/drizzle.js +3 -0
- package/dist/v2/db/adapters/index.cjs +18 -0
- package/dist/v2/db/adapters/index.d.ts +2 -0
- package/dist/v2/db/adapters/index.d.ts.map +1 -0
- package/dist/v2/db/adapters/index.js +0 -0
- package/dist/v2/db/adapters/kysely.cjs +36 -0
- package/dist/v2/db/adapters/kysely.d.ts +2 -0
- package/dist/v2/db/adapters/kysely.d.ts.map +1 -0
- package/dist/v2/db/adapters/kysely.js +3 -0
- package/dist/v2/db/adapters/mongo.cjs +36 -0
- package/dist/v2/db/adapters/mongo.d.ts +2 -0
- package/dist/v2/db/adapters/mongo.d.ts.map +1 -0
- package/dist/v2/db/adapters/mongo.js +3 -0
- package/dist/v2/db/adapters/prisma.cjs +36 -0
- package/dist/v2/db/adapters/prisma.d.ts +2 -0
- package/dist/v2/db/adapters/prisma.d.ts.map +1 -0
- package/dist/v2/db/adapters/prisma.js +3 -0
- package/dist/v2/db/adapters/typeorm.cjs +36 -0
- package/dist/v2/db/adapters/typeorm.d.ts +2 -0
- package/dist/v2/db/adapters/typeorm.d.ts.map +1 -0
- package/dist/v2/db/adapters/typeorm.js +3 -0
- package/dist/v2/db/migrator/index.cjs +61 -0
- package/dist/v2/db/migrator/index.d.ts +29 -0
- package/dist/v2/db/migrator/index.d.ts.map +1 -0
- package/dist/v2/db/migrator/index.js +27 -0
- package/dist/v2/db/registry/audit-log.d.ts +21 -0
- package/dist/v2/db/registry/audit-log.d.ts.map +1 -0
- package/dist/v2/db/registry/audit-log.test.d.ts +2 -0
- package/dist/v2/db/registry/audit-log.test.d.ts.map +1 -0
- package/dist/v2/db/registry/consent-policy.d.ts +29 -0
- package/dist/v2/db/registry/consent-policy.d.ts.map +1 -0
- package/dist/v2/db/registry/consent-policy.test.d.ts +2 -0
- package/dist/v2/db/registry/consent-policy.test.d.ts.map +1 -0
- package/dist/v2/db/registry/consent-purpose.d.ts +16 -0
- package/dist/v2/db/registry/consent-purpose.d.ts.map +1 -0
- package/dist/v2/db/registry/consent-purpose.test.d.ts +2 -0
- package/dist/v2/db/registry/consent-purpose.test.d.ts.map +1 -0
- package/dist/v2/db/registry/consent.d.ts +20 -0
- package/dist/v2/db/registry/consent.d.ts.map +1 -0
- package/dist/v2/db/registry/consent.test.d.ts +2 -0
- package/dist/v2/db/registry/consent.test.d.ts.map +1 -0
- package/dist/v2/db/registry/domain.d.ts +24 -0
- package/dist/v2/db/registry/domain.d.ts.map +1 -0
- package/dist/v2/db/registry/domain.test.d.ts +2 -0
- package/dist/v2/db/registry/domain.test.d.ts.map +1 -0
- package/dist/v2/db/registry/index.d.ts +102 -0
- package/dist/v2/db/registry/index.d.ts.map +1 -0
- package/dist/v2/db/registry/subject.d.ts +18 -0
- package/dist/v2/db/registry/subject.d.ts.map +1 -0
- package/dist/v2/db/registry/subject.test.d.ts +2 -0
- package/dist/v2/db/registry/subject.test.d.ts.map +1 -0
- package/dist/v2/db/registry/types.d.ts +10 -0
- package/dist/v2/db/registry/types.d.ts.map +1 -0
- package/dist/v2/db/registry/utils/generate-id.d.ts +25 -0
- package/dist/v2/db/registry/utils/generate-id.d.ts.map +1 -0
- package/dist/v2/db/registry/utils/generate-id.test.d.ts +2 -0
- package/dist/v2/db/registry/utils/generate-id.test.d.ts.map +1 -0
- package/dist/v2/db/registry/utils.d.ts +25 -0
- package/dist/v2/db/registry/utils.d.ts.map +1 -0
- package/dist/v2/db/schema/1.0.0/audit-log.d.ts +29 -0
- package/dist/v2/db/schema/1.0.0/audit-log.d.ts.map +1 -0
- package/dist/v2/db/schema/1.0.0/consent-policy.d.ts +45 -0
- package/dist/v2/db/schema/1.0.0/consent-policy.d.ts.map +1 -0
- package/dist/v2/db/schema/1.0.0/consent-purpose.d.ts +27 -0
- package/dist/v2/db/schema/1.0.0/consent-purpose.d.ts.map +1 -0
- package/dist/v2/db/schema/1.0.0/consent-record.d.ts +19 -0
- package/dist/v2/db/schema/1.0.0/consent-record.d.ts.map +1 -0
- package/dist/v2/db/schema/1.0.0/consent.d.ts +42 -0
- package/dist/v2/db/schema/1.0.0/consent.d.ts.map +1 -0
- package/dist/v2/db/schema/1.0.0/domain.d.ts +23 -0
- package/dist/v2/db/schema/1.0.0/domain.d.ts.map +1 -0
- package/dist/v2/db/schema/1.0.0/index.d.ts +1513 -0
- package/dist/v2/db/schema/1.0.0/index.d.ts.map +1 -0
- package/dist/v2/db/schema/1.0.0/subject.d.ts +23 -0
- package/dist/v2/db/schema/1.0.0/subject.d.ts.map +1 -0
- package/dist/v2/db/schema/index.cjs +326 -0
- package/dist/v2/db/schema/index.d.ts +1507 -0
- package/dist/v2/db/schema/index.d.ts.map +1 -0
- package/dist/v2/db/schema/index.js +241 -0
- package/dist/v2/define-config.cjs +36 -0
- package/dist/v2/define-config.d.ts +5 -0
- package/dist/v2/define-config.d.ts.map +1 -0
- package/dist/v2/define-config.js +2 -0
- package/dist/v2/handlers/consent/index.d.ts +260 -0
- package/dist/v2/handlers/consent/index.d.ts.map +1 -0
- package/dist/v2/handlers/consent/post.handler.d.ts +136 -0
- package/dist/v2/handlers/consent/post.handler.d.ts.map +1 -0
- package/dist/v2/handlers/consent/show-banner/geo.d.ts +10 -0
- package/dist/v2/handlers/consent/show-banner/geo.d.ts.map +1 -0
- package/dist/v2/handlers/consent/show-banner/geo.test.d.ts +2 -0
- package/dist/v2/handlers/consent/show-banner/geo.test.d.ts.map +1 -0
- package/dist/v2/handlers/consent/show-banner/handler.d.ts +71 -0
- package/dist/v2/handlers/consent/show-banner/handler.d.ts.map +1 -0
- package/dist/v2/handlers/consent/show-banner/handler.test.d.ts +2 -0
- package/dist/v2/handlers/consent/show-banner/handler.test.d.ts.map +1 -0
- package/dist/v2/handlers/consent/show-banner/translations.d.ts +13 -0
- package/dist/v2/handlers/consent/show-banner/translations.d.ts.map +1 -0
- package/dist/v2/handlers/consent/show-banner/translations.test.d.ts +2 -0
- package/dist/v2/handlers/consent/show-banner/translations.test.d.ts.map +1 -0
- package/dist/v2/handlers/consent/verify.handler.d.ts +103 -0
- package/dist/v2/handlers/consent/verify.handler.d.ts.map +1 -0
- package/dist/v2/handlers/meta/index.d.ts +19 -0
- package/dist/v2/handlers/meta/index.d.ts.map +1 -0
- package/dist/v2/handlers/meta/status.handler.d.ts +17 -0
- package/dist/v2/handlers/meta/status.handler.d.ts.map +1 -0
- package/dist/v2/init.d.ts +3 -0
- package/dist/v2/init.d.ts.map +1 -0
- package/dist/v2/init.test.d.ts +2 -0
- package/dist/v2/init.test.d.ts.map +1 -0
- package/dist/v2/middleware/cors/cors.d.ts +37 -0
- package/dist/v2/middleware/cors/cors.d.ts.map +1 -0
- package/dist/v2/middleware/cors/cors.test.d.ts +2 -0
- package/dist/v2/middleware/cors/cors.test.d.ts.map +1 -0
- package/dist/v2/middleware/cors/index.d.ts +30 -0
- package/dist/v2/middleware/cors/index.d.ts.map +1 -0
- package/dist/v2/middleware/cors/is-origin-trusted.d.ts +49 -0
- package/dist/v2/middleware/cors/is-origin-trusted.d.ts.map +1 -0
- package/dist/v2/middleware/cors/is-origin-trusted.test.d.ts +2 -0
- package/dist/v2/middleware/cors/is-origin-trusted.test.d.ts.map +1 -0
- package/dist/v2/middleware/cors/process-cors.d.ts +31 -0
- package/dist/v2/middleware/cors/process-cors.d.ts.map +1 -0
- package/dist/v2/middleware/openapi/config.d.ts +28 -0
- package/dist/v2/middleware/openapi/config.d.ts.map +1 -0
- package/dist/v2/middleware/openapi/handlers.d.ts +29 -0
- package/dist/v2/middleware/openapi/handlers.d.ts.map +1 -0
- package/dist/v2/middleware/openapi/index.d.ts +11 -0
- package/dist/v2/middleware/openapi/index.d.ts.map +1 -0
- package/dist/v2/middleware/process-ip/index.d.ts +3 -0
- package/dist/v2/middleware/process-ip/index.d.ts.map +1 -0
- package/dist/v2/router.cjs +1275 -0
- package/dist/v2/router.d.ts +280 -0
- package/dist/v2/router.d.ts.map +1 -0
- package/dist/v2/router.js +1231 -0
- package/dist/v2/types/api.d.ts +27 -0
- package/dist/v2/types/api.d.ts.map +1 -0
- package/dist/v2/types/index.cjs +40 -0
- package/dist/v2/types/index.d.ts +104 -0
- package/dist/v2/types/index.d.ts.map +1 -0
- package/dist/v2/types/index.js +6 -0
- package/dist/v2/utils/create-telemetry-options.d.ts +28 -0
- package/dist/v2/utils/create-telemetry-options.d.ts.map +1 -0
- package/dist/v2/utils/env.d.ts +60 -0
- package/dist/v2/utils/env.d.ts.map +1 -0
- package/dist/v2/utils/index.d.ts +3 -0
- package/dist/v2/utils/index.d.ts.map +1 -0
- package/dist/v2/utils/logger.d.ts +16 -0
- package/dist/v2/utils/logger.d.ts.map +1 -0
- package/dist/version.d.ts +1 -1
- package/package.json +106 -15
- package/readme.json +30 -0
- package/rslib.config.ts +13 -14
- package/src/__tests__/server.test.ts +1 -1
- package/src/contracts/consent/post.contract.test.ts +3 -8
- package/src/contracts/consent/post.contract.ts +13 -13
- package/src/contracts/consent/show-banner.contract.test.ts +9 -0
- package/src/contracts/consent/show-banner.contract.ts +2 -0
- package/src/contracts/consent/verify.contract.ts +19 -23
- package/src/core.ts +7 -0
- package/src/handlers/consent/show-banner/handler.ts +12 -9
- package/src/handlers/consent/show-banner/translations.ts +2 -2
- package/src/init.ts +9 -6
- package/src/middleware/openapi/index.ts +2 -2
- package/src/pkgs/api-router/hooks/__tests__/processor.test.ts +1 -1
- package/src/pkgs/data-model/fields/index.ts +17 -22
- package/src/pkgs/data-model/fields/zod-fields.ts +14 -26
- package/src/pkgs/data-model/hooks/index.ts +3 -2
- package/src/pkgs/data-model/index.ts +2 -4
- package/src/pkgs/data-model/schema/index.ts +6 -7
- package/src/pkgs/data-model/schema/schemas.ts +3 -3
- package/src/pkgs/db-adapters/adapters/drizzle-adapter/drizzle-adapter.ts +4 -1
- package/src/pkgs/db-adapters/adapters/index.ts +2 -2
- package/src/pkgs/db-adapters/adapters/kysely-adapter/index.ts +4 -4
- package/src/pkgs/db-adapters/adapters/kysely-adapter/kysely-adapter.ts +4 -5
- package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/postgres.test.ts +2 -4
- package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/sqlite.test.ts +2 -3
- package/src/pkgs/db-adapters/adapters/kysely-adapter/tests/test-utils.ts +1 -6
- package/src/pkgs/db-adapters/adapters/memory-adapter/memory-adapter.ts +4 -1
- package/src/pkgs/db-adapters/adapters/prisma-adapter/index.ts +1 -1
- package/src/pkgs/db-adapters/adapters/prisma-adapter/prisma-adapter.ts +5 -2
- package/src/pkgs/db-adapters/index.ts +12 -13
- package/src/pkgs/migrations/get-migration.ts +4 -2
- package/src/pkgs/migrations/get-schema/get-schema.ts +0 -1
- package/src/pkgs/migrations/get-schema/process-fields.ts +1 -1
- package/src/pkgs/migrations/get-schema/process-tables.ts +0 -2
- package/src/pkgs/migrations/index.ts +7 -8
- package/src/pkgs/results/__tests__/error-codes.test.ts +2 -2
- package/src/pkgs/results/index.ts +22 -27
- package/src/pkgs/results/orpc-error-handler.ts +1 -1
- package/src/pkgs/results/results/result-helpers.ts +1 -1
- package/src/pkgs/types/index.ts +4 -4
- package/src/pkgs/types/options.ts +10 -3
- package/src/pkgs/utils/index.ts +1 -1
- package/src/pkgs/utils/logger.ts +1 -1
- package/src/schema/audit-log/schema.ts +3 -3
- package/src/schema/consent/schema.ts +4 -4
- package/src/schema/consent-policy/schema.ts +3 -3
- package/src/schema/consent-purpose/schema.ts +4 -4
- package/src/schema/consent-record/schema.ts +3 -3
- package/src/schema/definition.ts +1 -1
- package/src/schema/domain/schema.ts +5 -5
- package/src/schema/index.ts +14 -17
- package/src/schema/subject/schema.ts +3 -3
- package/src/schema/types.ts +1 -1
- package/src/testing/contract-testing.ts +15 -52
- package/src/types/index.ts +8 -8
- package/src/types/options.ts +2 -3
- package/src/v2/contracts/consent/index.test.ts +5 -0
- package/src/v2/contracts/consent/index.ts +9 -0
- package/src/v2/contracts/consent/post.contract.test.ts +521 -0
- package/src/v2/contracts/consent/post.contract.ts +155 -0
- package/src/v2/contracts/consent/show-banner.contract.test.ts +252 -0
- package/src/v2/contracts/consent/show-banner.contract.ts +73 -0
- package/src/v2/contracts/consent/verify.contract.test.ts +185 -0
- package/src/v2/contracts/consent/verify.contract.ts +122 -0
- package/src/v2/contracts/index.ts +20 -0
- package/src/v2/contracts/meta/index.test.ts +5 -0
- package/src/v2/contracts/meta/index.ts +5 -0
- package/src/v2/contracts/meta/status.contract.test.ts +226 -0
- package/src/v2/contracts/meta/status.contract.ts +34 -0
- package/src/v2/contracts/shared/jurisdiction.schema.ts +30 -0
- package/src/v2/contracts/test.utils.ts +400 -0
- package/src/v2/core.ts +379 -0
- package/src/v2/db/adapters/drizzle.ts +1 -0
- package/src/v2/db/adapters/index.ts +1 -0
- package/src/v2/db/adapters/kysely.ts +1 -0
- package/src/v2/db/adapters/mongo.ts +1 -0
- package/src/v2/db/adapters/prisma.ts +1 -0
- package/src/v2/db/adapters/typeorm.ts +1 -0
- package/src/v2/db/migrator/index.ts +80 -0
- package/src/v2/db/registry/audit-log.test.ts +77 -0
- package/src/v2/db/registry/audit-log.ts +46 -0
- package/src/v2/db/registry/consent-policy.test.ts +778 -0
- package/src/v2/db/registry/consent-policy.ts +74 -0
- package/src/v2/db/registry/consent-purpose.test.ts +485 -0
- package/src/v2/db/registry/consent-purpose.ts +41 -0
- package/src/v2/db/registry/consent.test.ts +843 -0
- package/src/v2/db/registry/consent.ts +42 -0
- package/src/v2/db/registry/domain.test.ts +463 -0
- package/src/v2/db/registry/domain.ts +51 -0
- package/src/v2/db/registry/index.ts +18 -0
- package/src/v2/db/registry/subject.test.ts +497 -0
- package/src/v2/db/registry/subject.ts +101 -0
- package/src/v2/db/registry/types.ts +10 -0
- package/src/v2/db/registry/utils/generate-id.test.ts +217 -0
- package/src/v2/db/registry/utils/generate-id.ts +134 -0
- package/src/v2/db/registry/utils.ts +134 -0
- package/src/v2/db/schema/1.0.0/audit-log.ts +32 -0
- package/src/v2/db/schema/1.0.0/consent-policy.ts +41 -0
- package/src/v2/db/schema/1.0.0/consent-purpose.ts +30 -0
- package/src/v2/db/schema/1.0.0/consent-record.ts +22 -0
- package/src/v2/db/schema/1.0.0/consent.ts +38 -0
- package/src/v2/db/schema/1.0.0/domain.ts +26 -0
- package/src/v2/db/schema/1.0.0/index.ts +56 -0
- package/src/v2/db/schema/1.0.0/subject.ts +26 -0
- package/src/v2/db/schema/index.ts +9 -0
- package/src/v2/define-config.ts +5 -0
- package/src/v2/handlers/consent/index.ts +9 -0
- package/src/v2/handlers/consent/post.handler.ts +254 -0
- package/src/v2/handlers/consent/show-banner/geo.test.ts +281 -0
- package/src/v2/handlers/consent/show-banner/geo.ts +96 -0
- package/src/v2/handlers/consent/show-banner/handler.test.ts +374 -0
- package/src/v2/handlers/consent/show-banner/handler.ts +123 -0
- package/src/v2/handlers/consent/show-banner/translations.test.ts +121 -0
- package/src/v2/handlers/consent/show-banner/translations.ts +79 -0
- package/src/v2/handlers/consent/verify.handler.ts +288 -0
- package/src/v2/handlers/meta/index.ts +5 -0
- package/src/v2/handlers/meta/status.handler.ts +43 -0
- package/src/v2/init.test.ts +114 -0
- package/src/v2/init.ts +126 -0
- package/src/v2/middleware/cors/cors.test.ts +111 -0
- package/src/v2/middleware/cors/cors.ts +192 -0
- package/src/v2/middleware/cors/index.ts +30 -0
- package/src/v2/middleware/cors/is-origin-trusted.test.ts +104 -0
- package/src/v2/middleware/cors/is-origin-trusted.ts +126 -0
- package/src/v2/middleware/cors/process-cors.ts +91 -0
- package/src/v2/middleware/openapi/config.ts +27 -0
- package/src/v2/middleware/openapi/handlers.ts +132 -0
- package/src/v2/middleware/openapi/index.ts +11 -0
- package/src/v2/middleware/process-ip/index.ts +39 -0
- package/src/v2/router.ts +8 -0
- package/src/v2/types/api.ts +32 -0
- package/src/v2/types/index.ts +121 -0
- package/src/v2/utils/create-telemetry-options.ts +115 -0
- package/src/v2/utils/env.ts +84 -0
- package/src/v2/utils/index.ts +2 -0
- package/src/v2/utils/logger.ts +38 -0
- package/src/version.ts +1 -1
- package/vitest.config.ts +11 -2
package/dist/core.cjs
CHANGED
|
@@ -33,6 +33,7 @@ var __webpack_require__ = {};
|
|
|
33
33
|
var __webpack_exports__ = {};
|
|
34
34
|
__webpack_require__.r(__webpack_exports__);
|
|
35
35
|
__webpack_require__.d(__webpack_exports__, {
|
|
36
|
+
version: ()=>version,
|
|
36
37
|
c15tInstance: ()=>c15tInstance
|
|
37
38
|
});
|
|
38
39
|
const logger_namespaceObject = require("@doubletie/logger");
|
|
@@ -224,6 +225,19 @@ class error_class_DoubleTieError extends server_namespaceObject.ORPCError {
|
|
|
224
225
|
return formattedMessage;
|
|
225
226
|
}
|
|
226
227
|
}
|
|
228
|
+
function createTelemetryOptions(appName = 'c15t', telemetryConfig) {
|
|
229
|
+
const serviceVersion = process.env.npm_package_version || '1.0.0';
|
|
230
|
+
const config = {
|
|
231
|
+
disabled: telemetryConfig?.disabled ?? false,
|
|
232
|
+
tracer: telemetryConfig?.tracer,
|
|
233
|
+
defaultAttributes: {
|
|
234
|
+
...telemetryConfig?.defaultAttributes || {},
|
|
235
|
+
'service.name': String(appName),
|
|
236
|
+
'service.version': serviceVersion
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
return config;
|
|
240
|
+
}
|
|
227
241
|
function fail(message, options) {
|
|
228
242
|
const error = new error_class_DoubleTieError(message, options);
|
|
229
243
|
tracing_withSpan('create_error_result', async (span)=>{
|
|
@@ -274,32 +288,22 @@ function promiseToResult(promise, errorCode = error_codes_ERROR_CODES.UNKNOWN_ER
|
|
|
274
288
|
return result;
|
|
275
289
|
});
|
|
276
290
|
}
|
|
277
|
-
function createTelemetryOptions(appName = 'c15t', telemetryConfig) {
|
|
278
|
-
const serviceVersion = process.env.npm_package_version || '1.0.0';
|
|
279
|
-
const config = {
|
|
280
|
-
disabled: telemetryConfig?.disabled ?? false,
|
|
281
|
-
tracer: telemetryConfig?.tracer,
|
|
282
|
-
defaultAttributes: {
|
|
283
|
-
...telemetryConfig?.defaultAttributes || {},
|
|
284
|
-
'service.name': String(appName),
|
|
285
|
-
'service.version': serviceVersion
|
|
286
|
-
}
|
|
287
|
-
};
|
|
288
|
-
return config;
|
|
289
|
-
}
|
|
290
291
|
const resources_namespaceObject = require("@opentelemetry/resources");
|
|
291
292
|
const sdk_node_namespaceObject = require("@opentelemetry/sdk-node");
|
|
292
293
|
const sdk_trace_base_namespaceObject = require("@opentelemetry/sdk-trace-base");
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
if (
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
294
|
+
let globalLogger;
|
|
295
|
+
function getLogger(options) {
|
|
296
|
+
if (!globalLogger) globalLogger = (0, logger_namespaceObject.createLogger)({
|
|
297
|
+
level: 'info',
|
|
298
|
+
appName: 'c15t',
|
|
299
|
+
...options
|
|
300
|
+
});
|
|
301
|
+
return globalLogger;
|
|
302
|
+
}
|
|
303
|
+
function initLogger(options) {
|
|
304
|
+
globalLogger = (0, logger_namespaceObject.createLogger)(options);
|
|
305
|
+
return globalLogger;
|
|
300
306
|
}
|
|
301
|
-
const external_superjson_namespaceObject = require("superjson");
|
|
302
|
-
var external_superjson_default = /*#__PURE__*/ __webpack_require__.n(external_superjson_namespaceObject);
|
|
303
307
|
const COMMON_TIMEZONES = {
|
|
304
308
|
UTC: 'UTC',
|
|
305
309
|
GMT: 'GMT',
|
|
@@ -337,32 +341,20 @@ function id_generator_generateId(prefix) {
|
|
|
337
341
|
}
|
|
338
342
|
const external_zod_namespaceObject = require("zod");
|
|
339
343
|
const fieldConfigSchema = external_zod_namespaceObject.z.object({
|
|
340
|
-
required: external_zod_namespaceObject.z.boolean().
|
|
341
|
-
returned: external_zod_namespaceObject.z.boolean().
|
|
342
|
-
input: external_zod_namespaceObject.z.boolean().
|
|
343
|
-
defaultValue: external_zod_namespaceObject.z.
|
|
344
|
-
external_zod_namespaceObject.z.any(),
|
|
345
|
-
external_zod_namespaceObject.z["function"]().returns(external_zod_namespaceObject.z.any())
|
|
346
|
-
]).optional(),
|
|
344
|
+
required: external_zod_namespaceObject.z.boolean().prefault(true),
|
|
345
|
+
returned: external_zod_namespaceObject.z.boolean().prefault(true),
|
|
346
|
+
input: external_zod_namespaceObject.z.boolean().prefault(true),
|
|
347
|
+
defaultValue: external_zod_namespaceObject.z.any().optional(),
|
|
347
348
|
transform: external_zod_namespaceObject.z.object({
|
|
348
|
-
input: external_zod_namespaceObject.z
|
|
349
|
-
|
|
350
|
-
external_zod_namespaceObject.z.promise(external_zod_namespaceObject.z.any())
|
|
351
|
-
])).optional(),
|
|
352
|
-
output: external_zod_namespaceObject.z["function"]().args(external_zod_namespaceObject.z.any()).returns(external_zod_namespaceObject.z.union([
|
|
353
|
-
external_zod_namespaceObject.z.any(),
|
|
354
|
-
external_zod_namespaceObject.z.promise(external_zod_namespaceObject.z.any())
|
|
355
|
-
])).optional()
|
|
349
|
+
input: external_zod_namespaceObject.z.any().optional(),
|
|
350
|
+
output: external_zod_namespaceObject.z.any().optional()
|
|
356
351
|
}).optional(),
|
|
357
|
-
validator: external_zod_namespaceObject.z
|
|
358
|
-
external_zod_namespaceObject.z.string(),
|
|
359
|
-
external_zod_namespaceObject.z["null"]()
|
|
360
|
-
])).optional(),
|
|
352
|
+
validator: external_zod_namespaceObject.z.any().optional(),
|
|
361
353
|
unique: external_zod_namespaceObject.z.boolean().optional(),
|
|
362
354
|
indexed: external_zod_namespaceObject.z.boolean().optional(),
|
|
363
|
-
sortable: external_zod_namespaceObject.z.boolean().
|
|
355
|
+
sortable: external_zod_namespaceObject.z.boolean().prefault(true),
|
|
364
356
|
fieldName: external_zod_namespaceObject.z.string().optional(),
|
|
365
|
-
bigint: external_zod_namespaceObject.z.boolean().
|
|
357
|
+
bigint: external_zod_namespaceObject.z.boolean().prefault(false)
|
|
366
358
|
});
|
|
367
359
|
const stringFieldSchema = fieldConfigSchema.extend({
|
|
368
360
|
type: external_zod_namespaceObject.z.literal('string'),
|
|
@@ -382,18 +374,18 @@ const dateFieldSchema = fieldConfigSchema.extend({
|
|
|
382
374
|
type: external_zod_namespaceObject.z.literal('date'),
|
|
383
375
|
minDate: external_zod_namespaceObject.z.date().optional(),
|
|
384
376
|
maxDate: external_zod_namespaceObject.z.date().optional(),
|
|
385
|
-
dateOnly: external_zod_namespaceObject.z.boolean().
|
|
386
|
-
format: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional()
|
|
377
|
+
dateOnly: external_zod_namespaceObject.z.boolean().prefault(false),
|
|
378
|
+
format: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional()
|
|
387
379
|
});
|
|
388
380
|
const timezoneFieldSchema = fieldConfigSchema.extend({
|
|
389
381
|
type: external_zod_namespaceObject.z.literal('timezone'),
|
|
390
|
-
validateTimezone: external_zod_namespaceObject.z.boolean().
|
|
382
|
+
validateTimezone: external_zod_namespaceObject.z.boolean().prefault(true),
|
|
391
383
|
suggestedValues: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional(),
|
|
392
|
-
restrictToSuggestedValues: external_zod_namespaceObject.z.boolean().
|
|
384
|
+
restrictToSuggestedValues: external_zod_namespaceObject.z.boolean().prefault(false)
|
|
393
385
|
});
|
|
394
386
|
const jsonFieldSchema = fieldConfigSchema.extend({
|
|
395
387
|
type: external_zod_namespaceObject.z.literal('json'),
|
|
396
|
-
validateJson: external_zod_namespaceObject.z.boolean().
|
|
388
|
+
validateJson: external_zod_namespaceObject.z.boolean().prefault(true)
|
|
397
389
|
});
|
|
398
390
|
const stringArrayFieldSchema = fieldConfigSchema.extend({
|
|
399
391
|
type: external_zod_namespaceObject.z.literal('string[]')
|
|
@@ -411,6 +403,125 @@ external_zod_namespaceObject.z.discriminatedUnion('type', [
|
|
|
411
403
|
stringArrayFieldSchema,
|
|
412
404
|
numberArrayFieldSchema
|
|
413
405
|
]);
|
|
406
|
+
async function processHooks(data, model, operation, phase, hooks, context) {
|
|
407
|
+
let currentData = {
|
|
408
|
+
...data
|
|
409
|
+
};
|
|
410
|
+
for (const hookSet of hooks){
|
|
411
|
+
const modelHooks = hookSet[model];
|
|
412
|
+
if (!modelHooks) continue;
|
|
413
|
+
const operationHooks = modelHooks[operation];
|
|
414
|
+
if (!operationHooks) continue;
|
|
415
|
+
const hookFn = operationHooks[phase];
|
|
416
|
+
if (hookFn) if ('before' === phase) {
|
|
417
|
+
const result = await hookFn(currentData, context);
|
|
418
|
+
if (result && 'object' == typeof result && 'kind' in result) switch(result.kind){
|
|
419
|
+
case 'abort':
|
|
420
|
+
return null;
|
|
421
|
+
case 'transform':
|
|
422
|
+
{
|
|
423
|
+
const transformData = result.data;
|
|
424
|
+
currentData = {
|
|
425
|
+
...currentData,
|
|
426
|
+
...transformData
|
|
427
|
+
};
|
|
428
|
+
break;
|
|
429
|
+
}
|
|
430
|
+
default:
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
} else await hookFn(currentData, context);
|
|
434
|
+
}
|
|
435
|
+
return currentData;
|
|
436
|
+
}
|
|
437
|
+
async function processAfterHooksForMany(records, model, hooks, context) {
|
|
438
|
+
if (!records.length) return;
|
|
439
|
+
for (const record of records)await processHooks(record, model, 'update', 'after', hooks, context);
|
|
440
|
+
}
|
|
441
|
+
async function create_hooks_createWithHooks(adapter, ctx, props) {
|
|
442
|
+
const { data, model, customFn, context } = props;
|
|
443
|
+
const hooks = ctx.hooks || [];
|
|
444
|
+
const transformedData = await processHooks(data, model, 'create', 'before', hooks, context);
|
|
445
|
+
if (null === transformedData) return null;
|
|
446
|
+
let created = null;
|
|
447
|
+
if (customFn) {
|
|
448
|
+
created = await customFn.fn(transformedData);
|
|
449
|
+
if (!customFn.executeMainFn && created) return created;
|
|
450
|
+
}
|
|
451
|
+
if (!created) created = await adapter.create({
|
|
452
|
+
model: model,
|
|
453
|
+
data: transformedData
|
|
454
|
+
});
|
|
455
|
+
if (created) await processHooks(created, model, 'create', 'after', hooks, context);
|
|
456
|
+
return created;
|
|
457
|
+
}
|
|
458
|
+
async function update_hooks_updateWithHooks(adapter, ctx, props) {
|
|
459
|
+
const { data, where, model, customFn, context } = props;
|
|
460
|
+
const hooks = ctx.hooks || [];
|
|
461
|
+
const transformedData = await processHooks(data, model, 'update', 'before', hooks, context);
|
|
462
|
+
if (null === transformedData) return null;
|
|
463
|
+
let updated = null;
|
|
464
|
+
if (customFn) {
|
|
465
|
+
const result = await customFn.fn(transformedData);
|
|
466
|
+
updated = result;
|
|
467
|
+
if (!customFn.executeMainFn && updated) return updated;
|
|
468
|
+
}
|
|
469
|
+
if (!updated) updated = await adapter.update({
|
|
470
|
+
model: model,
|
|
471
|
+
update: transformedData,
|
|
472
|
+
where
|
|
473
|
+
});
|
|
474
|
+
if (updated) await processHooks(updated, model, 'update', 'after', hooks, context);
|
|
475
|
+
return updated;
|
|
476
|
+
}
|
|
477
|
+
async function executeCustomFunction(data, customFn) {
|
|
478
|
+
if (!customFn) return {
|
|
479
|
+
result: null,
|
|
480
|
+
shouldContinue: true
|
|
481
|
+
};
|
|
482
|
+
const result = await customFn.fn(data);
|
|
483
|
+
const shouldContinue = !result || !!customFn.executeMainFn;
|
|
484
|
+
return {
|
|
485
|
+
result,
|
|
486
|
+
shouldContinue
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
function processUpdateManyResult(result) {
|
|
490
|
+
if (Array.isArray(result)) return result;
|
|
491
|
+
if ('number' == typeof result && result > 0) return [];
|
|
492
|
+
return null;
|
|
493
|
+
}
|
|
494
|
+
async function updateManyWithHooks(adapter, ctx, props) {
|
|
495
|
+
const { data, where, model, customFn, context } = props;
|
|
496
|
+
const hooks = ctx.hooks || [];
|
|
497
|
+
const transformedData = await processHooks(data, model, 'update', 'before', hooks, context);
|
|
498
|
+
if (null === transformedData) return null;
|
|
499
|
+
const { result: customResult, shouldContinue } = await executeCustomFunction(transformedData, customFn);
|
|
500
|
+
if (customResult && !shouldContinue) return customResult;
|
|
501
|
+
let updated = customResult;
|
|
502
|
+
if (!updated) {
|
|
503
|
+
const adapterResult = await adapter.updateMany({
|
|
504
|
+
model: model,
|
|
505
|
+
update: transformedData,
|
|
506
|
+
where
|
|
507
|
+
});
|
|
508
|
+
updated = processUpdateManyResult(adapterResult);
|
|
509
|
+
}
|
|
510
|
+
if (updated && updated.length > 0) await processAfterHooksForMany(updated, model, hooks, context);
|
|
511
|
+
return updated;
|
|
512
|
+
}
|
|
513
|
+
function getWithHooks(adapter, ctx) {
|
|
514
|
+
return {
|
|
515
|
+
createWithHooks: ({ data, model, customFn, context })=>create_hooks_createWithHooks(adapter, ctx, {
|
|
516
|
+
data,
|
|
517
|
+
model,
|
|
518
|
+
customFn,
|
|
519
|
+
context
|
|
520
|
+
}),
|
|
521
|
+
updateWithHooks: (props)=>update_hooks_updateWithHooks(adapter, ctx, props),
|
|
522
|
+
updateManyWithHooks: (props)=>updateManyWithHooks(adapter, ctx, props)
|
|
523
|
+
};
|
|
524
|
+
}
|
|
414
525
|
const schema_auditLogSchema = external_zod_namespaceObject.z.object({
|
|
415
526
|
id: external_zod_namespaceObject.z.string(),
|
|
416
527
|
entityType: external_zod_namespaceObject.z.string(),
|
|
@@ -419,9 +530,9 @@ const schema_auditLogSchema = external_zod_namespaceObject.z.object({
|
|
|
419
530
|
subjectId: external_zod_namespaceObject.z.string().optional(),
|
|
420
531
|
ipAddress: external_zod_namespaceObject.z.string().optional(),
|
|
421
532
|
userAgent: external_zod_namespaceObject.z.string().optional(),
|
|
422
|
-
changes: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
|
|
423
|
-
metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
|
|
424
|
-
createdAt: external_zod_namespaceObject.z.date().
|
|
533
|
+
changes: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
|
|
534
|
+
metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
|
|
535
|
+
createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
|
|
425
536
|
});
|
|
426
537
|
function getAuditLogTable(options, auditLogFields) {
|
|
427
538
|
const auditLogConfig = options.tables?.auditLog;
|
|
@@ -520,66 +631,188 @@ function getAuditLogTable(options, auditLogFields) {
|
|
|
520
631
|
order: 5
|
|
521
632
|
};
|
|
522
633
|
}
|
|
523
|
-
const
|
|
524
|
-
'cookie_banner',
|
|
525
|
-
'privacy_policy',
|
|
526
|
-
'dpa',
|
|
527
|
-
'terms_and_conditions',
|
|
528
|
-
'marketing_communications',
|
|
529
|
-
'age_verification',
|
|
530
|
-
'other'
|
|
531
|
-
]);
|
|
532
|
-
const schema_consentPolicySchema = external_zod_namespaceObject.z.object({
|
|
634
|
+
const schema_consentSchema = external_zod_namespaceObject.z.object({
|
|
533
635
|
id: external_zod_namespaceObject.z.string(),
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
636
|
+
subjectId: external_zod_namespaceObject.z.string(),
|
|
637
|
+
domainId: external_zod_namespaceObject.z.string(),
|
|
638
|
+
purposeIds: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
|
|
639
|
+
metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).nullable().optional(),
|
|
640
|
+
policyId: external_zod_namespaceObject.z.string().optional(),
|
|
641
|
+
ipAddress: external_zod_namespaceObject.z.string().nullable().optional(),
|
|
642
|
+
userAgent: external_zod_namespaceObject.z.string().nullable().optional(),
|
|
643
|
+
status: external_zod_namespaceObject.z["enum"]([
|
|
644
|
+
'active',
|
|
645
|
+
'withdrawn',
|
|
646
|
+
'expired'
|
|
647
|
+
]).prefault('active'),
|
|
648
|
+
withdrawalReason: external_zod_namespaceObject.z.string().nullable().optional(),
|
|
649
|
+
givenAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
|
|
650
|
+
validUntil: external_zod_namespaceObject.z.date().nullable().optional(),
|
|
651
|
+
isActive: external_zod_namespaceObject.z.boolean().prefault(true)
|
|
544
652
|
});
|
|
545
|
-
function
|
|
546
|
-
const
|
|
653
|
+
function getConsentTable(options, consentFields) {
|
|
654
|
+
const consentConfig = options.tables?.consent;
|
|
655
|
+
const subjectConfig = options.tables?.subject;
|
|
656
|
+
const domainConfig = options.tables?.domain;
|
|
657
|
+
const policyConfig = options.tables?.consentPolicy;
|
|
547
658
|
return {
|
|
548
|
-
entityName:
|
|
549
|
-
entityPrefix:
|
|
550
|
-
schema:
|
|
659
|
+
entityName: consentConfig?.entityName || 'consent',
|
|
660
|
+
entityPrefix: consentConfig?.entityPrefix || 'cns',
|
|
661
|
+
schema: schema_consentSchema,
|
|
551
662
|
fields: {
|
|
552
|
-
|
|
553
|
-
type: 'string',
|
|
554
|
-
required: true,
|
|
555
|
-
fieldName: consentPolicyConfig?.fields?.version || 'version'
|
|
556
|
-
},
|
|
557
|
-
type: {
|
|
663
|
+
subjectId: {
|
|
558
664
|
type: 'string',
|
|
559
665
|
required: true,
|
|
560
|
-
fieldName:
|
|
666
|
+
fieldName: consentConfig?.fields?.subjectId || 'subjectId',
|
|
667
|
+
references: {
|
|
668
|
+
model: subjectConfig?.entityName || 'subject',
|
|
669
|
+
field: 'id'
|
|
670
|
+
}
|
|
561
671
|
},
|
|
562
|
-
|
|
672
|
+
domainId: {
|
|
563
673
|
type: 'string',
|
|
564
674
|
required: true,
|
|
565
|
-
fieldName:
|
|
675
|
+
fieldName: consentConfig?.fields?.domainId || 'domainId',
|
|
676
|
+
references: {
|
|
677
|
+
model: domainConfig?.entityName || 'domain',
|
|
678
|
+
field: 'id'
|
|
679
|
+
}
|
|
566
680
|
},
|
|
567
|
-
|
|
568
|
-
type: '
|
|
569
|
-
required:
|
|
570
|
-
fieldName:
|
|
681
|
+
purposeIds: {
|
|
682
|
+
type: 'json',
|
|
683
|
+
required: false,
|
|
684
|
+
fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
|
|
571
685
|
},
|
|
572
|
-
|
|
573
|
-
type: '
|
|
686
|
+
metadata: {
|
|
687
|
+
type: 'json',
|
|
574
688
|
required: false,
|
|
575
|
-
fieldName:
|
|
689
|
+
fieldName: consentConfig?.fields?.metadata || 'metadata'
|
|
576
690
|
},
|
|
577
|
-
|
|
691
|
+
policyId: {
|
|
578
692
|
type: 'string',
|
|
579
|
-
required:
|
|
580
|
-
fieldName:
|
|
693
|
+
required: false,
|
|
694
|
+
fieldName: consentConfig?.fields?.policyId || 'policyId',
|
|
695
|
+
references: {
|
|
696
|
+
model: policyConfig?.entityName || 'consentPolicy',
|
|
697
|
+
field: 'id'
|
|
698
|
+
}
|
|
581
699
|
},
|
|
582
|
-
|
|
700
|
+
ipAddress: {
|
|
701
|
+
type: 'string',
|
|
702
|
+
required: false,
|
|
703
|
+
fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
|
|
704
|
+
},
|
|
705
|
+
userAgent: {
|
|
706
|
+
type: 'string',
|
|
707
|
+
required: false,
|
|
708
|
+
fieldName: consentConfig?.fields?.userAgent || 'userAgent'
|
|
709
|
+
},
|
|
710
|
+
status: {
|
|
711
|
+
type: 'string',
|
|
712
|
+
defaultValue: ()=>'active',
|
|
713
|
+
required: true,
|
|
714
|
+
fieldName: consentConfig?.fields?.status || 'status'
|
|
715
|
+
},
|
|
716
|
+
withdrawalReason: {
|
|
717
|
+
type: 'string',
|
|
718
|
+
required: false,
|
|
719
|
+
fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
|
|
720
|
+
},
|
|
721
|
+
givenAt: {
|
|
722
|
+
type: 'date',
|
|
723
|
+
defaultValue: ()=>new Date(),
|
|
724
|
+
required: true,
|
|
725
|
+
fieldName: consentConfig?.fields?.givenAt || 'givenAt'
|
|
726
|
+
},
|
|
727
|
+
validUntil: {
|
|
728
|
+
type: 'date',
|
|
729
|
+
required: false,
|
|
730
|
+
fieldName: consentConfig?.fields?.validUntil || 'validUntil',
|
|
731
|
+
transform: {
|
|
732
|
+
input: (val, data)=>{
|
|
733
|
+
if (val) return val;
|
|
734
|
+
const expiresIn = consentConfig?.expiresIn || 31536000;
|
|
735
|
+
const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
|
|
736
|
+
if (expiresIn > 0) {
|
|
737
|
+
const validUntil = new Date(givenAt);
|
|
738
|
+
validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
|
|
739
|
+
return validUntil;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
},
|
|
744
|
+
isActive: {
|
|
745
|
+
type: 'boolean',
|
|
746
|
+
defaultValue: true,
|
|
747
|
+
required: true,
|
|
748
|
+
fieldName: consentConfig?.fields?.isActive || 'isActive'
|
|
749
|
+
},
|
|
750
|
+
...consentFields || {},
|
|
751
|
+
...consentConfig?.additionalFields || {}
|
|
752
|
+
},
|
|
753
|
+
order: 3
|
|
754
|
+
};
|
|
755
|
+
}
|
|
756
|
+
const PolicyTypeSchema = external_zod_namespaceObject.z["enum"]([
|
|
757
|
+
'cookie_banner',
|
|
758
|
+
'privacy_policy',
|
|
759
|
+
'dpa',
|
|
760
|
+
'terms_and_conditions',
|
|
761
|
+
'marketing_communications',
|
|
762
|
+
'age_verification',
|
|
763
|
+
'other'
|
|
764
|
+
]);
|
|
765
|
+
const schema_consentPolicySchema = external_zod_namespaceObject.z.object({
|
|
766
|
+
id: external_zod_namespaceObject.z.string(),
|
|
767
|
+
version: external_zod_namespaceObject.z.string(),
|
|
768
|
+
type: PolicyTypeSchema,
|
|
769
|
+
name: external_zod_namespaceObject.z.string(),
|
|
770
|
+
effectiveDate: external_zod_namespaceObject.z.date(),
|
|
771
|
+
expirationDate: external_zod_namespaceObject.z.date().nullable().optional(),
|
|
772
|
+
content: external_zod_namespaceObject.z.string(),
|
|
773
|
+
contentHash: external_zod_namespaceObject.z.string(),
|
|
774
|
+
isActive: external_zod_namespaceObject.z.boolean().prefault(true),
|
|
775
|
+
createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
|
|
776
|
+
updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
|
|
777
|
+
});
|
|
778
|
+
function getConsentPolicyTable(options, policyFields) {
|
|
779
|
+
const consentPolicyConfig = options.tables?.consentPolicy;
|
|
780
|
+
return {
|
|
781
|
+
entityName: consentPolicyConfig?.entityName || 'consentPolicy',
|
|
782
|
+
entityPrefix: consentPolicyConfig?.entityPrefix || 'pol',
|
|
783
|
+
schema: schema_consentPolicySchema,
|
|
784
|
+
fields: {
|
|
785
|
+
version: {
|
|
786
|
+
type: 'string',
|
|
787
|
+
required: true,
|
|
788
|
+
fieldName: consentPolicyConfig?.fields?.version || 'version'
|
|
789
|
+
},
|
|
790
|
+
type: {
|
|
791
|
+
type: 'string',
|
|
792
|
+
required: true,
|
|
793
|
+
fieldName: consentPolicyConfig?.fields?.type || 'type'
|
|
794
|
+
},
|
|
795
|
+
name: {
|
|
796
|
+
type: 'string',
|
|
797
|
+
required: true,
|
|
798
|
+
fieldName: consentPolicyConfig?.fields?.name || 'name'
|
|
799
|
+
},
|
|
800
|
+
effectiveDate: {
|
|
801
|
+
type: 'date',
|
|
802
|
+
required: true,
|
|
803
|
+
fieldName: consentPolicyConfig?.fields?.effectiveDate || 'effectiveDate'
|
|
804
|
+
},
|
|
805
|
+
expirationDate: {
|
|
806
|
+
type: 'date',
|
|
807
|
+
required: false,
|
|
808
|
+
fieldName: consentPolicyConfig?.fields?.expirationDate || 'expirationDate'
|
|
809
|
+
},
|
|
810
|
+
content: {
|
|
811
|
+
type: 'string',
|
|
812
|
+
required: true,
|
|
813
|
+
fieldName: consentPolicyConfig?.fields?.content || 'content'
|
|
814
|
+
},
|
|
815
|
+
contentHash: {
|
|
583
816
|
type: 'string',
|
|
584
817
|
required: true,
|
|
585
818
|
fieldName: consentPolicyConfig?.fields?.contentHash || 'contentHash'
|
|
@@ -607,12 +840,12 @@ const schema_purposeSchema = external_zod_namespaceObject.z.object({
|
|
|
607
840
|
code: external_zod_namespaceObject.z.string(),
|
|
608
841
|
name: external_zod_namespaceObject.z.string(),
|
|
609
842
|
description: external_zod_namespaceObject.z.string(),
|
|
610
|
-
isEssential: external_zod_namespaceObject.z.boolean().
|
|
843
|
+
isEssential: external_zod_namespaceObject.z.boolean().prefault(false),
|
|
611
844
|
dataCategory: external_zod_namespaceObject.z.string().nullish(),
|
|
612
845
|
legalBasis: external_zod_namespaceObject.z.string().nullish(),
|
|
613
|
-
isActive: external_zod_namespaceObject.z.boolean().
|
|
614
|
-
createdAt: external_zod_namespaceObject.z.date().
|
|
615
|
-
updatedAt: external_zod_namespaceObject.z.date().
|
|
846
|
+
isActive: external_zod_namespaceObject.z.boolean().prefault(true),
|
|
847
|
+
createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
|
|
848
|
+
updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
|
|
616
849
|
});
|
|
617
850
|
function getPurposeTable(options, purposeFields) {
|
|
618
851
|
const purposeConfig = options.tables?.consentPurpose;
|
|
@@ -681,9 +914,9 @@ const schema_consentRecordSchema = external_zod_namespaceObject.z.object({
|
|
|
681
914
|
subjectId: external_zod_namespaceObject.z.string(),
|
|
682
915
|
consentId: external_zod_namespaceObject.z.string().optional(),
|
|
683
916
|
actionType: external_zod_namespaceObject.z.string(),
|
|
684
|
-
details: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
|
|
685
|
-
createdAt: external_zod_namespaceObject.z.date().
|
|
686
|
-
updatedAt: external_zod_namespaceObject.z.date().
|
|
917
|
+
details: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
|
|
918
|
+
createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
|
|
919
|
+
updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
|
|
687
920
|
});
|
|
688
921
|
function getConsentRecordTable(options, recordFields) {
|
|
689
922
|
const recordConfig = options.tables?.record;
|
|
@@ -734,137 +967,15 @@ function getConsentRecordTable(options, recordFields) {
|
|
|
734
967
|
order: 4
|
|
735
968
|
};
|
|
736
969
|
}
|
|
737
|
-
const schema_consentSchema = external_zod_namespaceObject.z.object({
|
|
738
|
-
id: external_zod_namespaceObject.z.string(),
|
|
739
|
-
subjectId: external_zod_namespaceObject.z.string(),
|
|
740
|
-
domainId: external_zod_namespaceObject.z.string(),
|
|
741
|
-
purposeIds: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
|
|
742
|
-
metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).nullable().optional(),
|
|
743
|
-
policyId: external_zod_namespaceObject.z.string().optional(),
|
|
744
|
-
ipAddress: external_zod_namespaceObject.z.string().nullable().optional(),
|
|
745
|
-
userAgent: external_zod_namespaceObject.z.string().nullable().optional(),
|
|
746
|
-
status: external_zod_namespaceObject.z["enum"]([
|
|
747
|
-
'active',
|
|
748
|
-
'withdrawn',
|
|
749
|
-
'expired'
|
|
750
|
-
]).default('active'),
|
|
751
|
-
withdrawalReason: external_zod_namespaceObject.z.string().nullable().optional(),
|
|
752
|
-
givenAt: external_zod_namespaceObject.z.date().default(()=>new Date()),
|
|
753
|
-
validUntil: external_zod_namespaceObject.z.date().nullable().optional(),
|
|
754
|
-
isActive: external_zod_namespaceObject.z.boolean().default(true)
|
|
755
|
-
});
|
|
756
|
-
function getConsentTable(options, consentFields) {
|
|
757
|
-
const consentConfig = options.tables?.consent;
|
|
758
|
-
const subjectConfig = options.tables?.subject;
|
|
759
|
-
const domainConfig = options.tables?.domain;
|
|
760
|
-
const policyConfig = options.tables?.consentPolicy;
|
|
761
|
-
return {
|
|
762
|
-
entityName: consentConfig?.entityName || 'consent',
|
|
763
|
-
entityPrefix: consentConfig?.entityPrefix || 'cns',
|
|
764
|
-
schema: schema_consentSchema,
|
|
765
|
-
fields: {
|
|
766
|
-
subjectId: {
|
|
767
|
-
type: 'string',
|
|
768
|
-
required: true,
|
|
769
|
-
fieldName: consentConfig?.fields?.subjectId || 'subjectId',
|
|
770
|
-
references: {
|
|
771
|
-
model: subjectConfig?.entityName || 'subject',
|
|
772
|
-
field: 'id'
|
|
773
|
-
}
|
|
774
|
-
},
|
|
775
|
-
domainId: {
|
|
776
|
-
type: 'string',
|
|
777
|
-
required: true,
|
|
778
|
-
fieldName: consentConfig?.fields?.domainId || 'domainId',
|
|
779
|
-
references: {
|
|
780
|
-
model: domainConfig?.entityName || 'domain',
|
|
781
|
-
field: 'id'
|
|
782
|
-
}
|
|
783
|
-
},
|
|
784
|
-
purposeIds: {
|
|
785
|
-
type: 'json',
|
|
786
|
-
required: false,
|
|
787
|
-
fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
|
|
788
|
-
},
|
|
789
|
-
metadata: {
|
|
790
|
-
type: 'json',
|
|
791
|
-
required: false,
|
|
792
|
-
fieldName: consentConfig?.fields?.metadata || 'metadata'
|
|
793
|
-
},
|
|
794
|
-
policyId: {
|
|
795
|
-
type: 'string',
|
|
796
|
-
required: false,
|
|
797
|
-
fieldName: consentConfig?.fields?.policyId || 'policyId',
|
|
798
|
-
references: {
|
|
799
|
-
model: policyConfig?.entityName || 'consentPolicy',
|
|
800
|
-
field: 'id'
|
|
801
|
-
}
|
|
802
|
-
},
|
|
803
|
-
ipAddress: {
|
|
804
|
-
type: 'string',
|
|
805
|
-
required: false,
|
|
806
|
-
fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
|
|
807
|
-
},
|
|
808
|
-
userAgent: {
|
|
809
|
-
type: 'string',
|
|
810
|
-
required: false,
|
|
811
|
-
fieldName: consentConfig?.fields?.userAgent || 'userAgent'
|
|
812
|
-
},
|
|
813
|
-
status: {
|
|
814
|
-
type: 'string',
|
|
815
|
-
defaultValue: ()=>'active',
|
|
816
|
-
required: true,
|
|
817
|
-
fieldName: consentConfig?.fields?.status || 'status'
|
|
818
|
-
},
|
|
819
|
-
withdrawalReason: {
|
|
820
|
-
type: 'string',
|
|
821
|
-
required: false,
|
|
822
|
-
fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
|
|
823
|
-
},
|
|
824
|
-
givenAt: {
|
|
825
|
-
type: 'date',
|
|
826
|
-
defaultValue: ()=>new Date(),
|
|
827
|
-
required: true,
|
|
828
|
-
fieldName: consentConfig?.fields?.givenAt || 'givenAt'
|
|
829
|
-
},
|
|
830
|
-
validUntil: {
|
|
831
|
-
type: 'date',
|
|
832
|
-
required: false,
|
|
833
|
-
fieldName: consentConfig?.fields?.validUntil || 'validUntil',
|
|
834
|
-
transform: {
|
|
835
|
-
input: (val, data)=>{
|
|
836
|
-
if (val) return val;
|
|
837
|
-
const expiresIn = consentConfig?.expiresIn || 31536000;
|
|
838
|
-
const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
|
|
839
|
-
if (expiresIn > 0) {
|
|
840
|
-
const validUntil = new Date(givenAt);
|
|
841
|
-
validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
|
|
842
|
-
return validUntil;
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
}
|
|
846
|
-
},
|
|
847
|
-
isActive: {
|
|
848
|
-
type: 'boolean',
|
|
849
|
-
defaultValue: true,
|
|
850
|
-
required: true,
|
|
851
|
-
fieldName: consentConfig?.fields?.isActive || 'isActive'
|
|
852
|
-
},
|
|
853
|
-
...consentFields || {},
|
|
854
|
-
...consentConfig?.additionalFields || {}
|
|
855
|
-
},
|
|
856
|
-
order: 3
|
|
857
|
-
};
|
|
858
|
-
}
|
|
859
970
|
const schema_domainSchema = external_zod_namespaceObject.z.object({
|
|
860
971
|
id: external_zod_namespaceObject.z.string(),
|
|
861
972
|
name: external_zod_namespaceObject.z.string().min(1),
|
|
862
973
|
description: external_zod_namespaceObject.z.string().optional(),
|
|
863
|
-
allowedOrigins: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional().
|
|
864
|
-
isVerified: external_zod_namespaceObject.z.boolean().
|
|
865
|
-
isActive: external_zod_namespaceObject.z.boolean().
|
|
866
|
-
createdAt: external_zod_namespaceObject.z.date().
|
|
867
|
-
updatedAt: external_zod_namespaceObject.z.date().
|
|
974
|
+
allowedOrigins: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional().prefault([]),
|
|
975
|
+
isVerified: external_zod_namespaceObject.z.boolean().prefault(true),
|
|
976
|
+
isActive: external_zod_namespaceObject.z.boolean().prefault(true),
|
|
977
|
+
createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
|
|
978
|
+
updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
|
|
868
979
|
});
|
|
869
980
|
function getDomainTable(options, domainFields) {
|
|
870
981
|
const domainConfig = options.tables?.domain;
|
|
@@ -921,12 +1032,12 @@ function getDomainTable(options, domainFields) {
|
|
|
921
1032
|
}
|
|
922
1033
|
const schema_subjectSchema = external_zod_namespaceObject.z.object({
|
|
923
1034
|
id: external_zod_namespaceObject.z.string(),
|
|
924
|
-
isIdentified: external_zod_namespaceObject.z.boolean().
|
|
1035
|
+
isIdentified: external_zod_namespaceObject.z.boolean().prefault(false),
|
|
925
1036
|
externalId: external_zod_namespaceObject.z.string().nullable().optional(),
|
|
926
1037
|
identityProvider: external_zod_namespaceObject.z.string().optional(),
|
|
927
1038
|
lastIpAddress: external_zod_namespaceObject.z.string().optional(),
|
|
928
|
-
createdAt: external_zod_namespaceObject.z.date().
|
|
929
|
-
updatedAt: external_zod_namespaceObject.z.date().
|
|
1039
|
+
createdAt: external_zod_namespaceObject.z.date().prefault(()=>new Date()),
|
|
1040
|
+
updatedAt: external_zod_namespaceObject.z.date().prefault(()=>new Date())
|
|
930
1041
|
});
|
|
931
1042
|
function getSubjectTable(options, subjectFields) {
|
|
932
1043
|
const subjectConfig = options.tables?.subject;
|
|
@@ -966,213 +1077,62 @@ function getSubjectTable(options, subjectFields) {
|
|
|
966
1077
|
type: 'date',
|
|
967
1078
|
defaultValue: ()=>new Date(),
|
|
968
1079
|
required: true,
|
|
969
|
-
fieldName: subjectConfig?.fields?.updatedAt || 'updatedAt'
|
|
970
|
-
},
|
|
971
|
-
subjectTimezone: {
|
|
972
|
-
type: 'timezone',
|
|
973
|
-
required: false,
|
|
974
|
-
defaultValue: COMMON_TIMEZONES.UTC,
|
|
975
|
-
fieldName: subjectConfig?.fields?.subjectTimezone || 'subjectTimezone'
|
|
976
|
-
},
|
|
977
|
-
...subjectFields || {},
|
|
978
|
-
...subjectConfig?.additionalFields || {}
|
|
979
|
-
},
|
|
980
|
-
order: 1
|
|
981
|
-
};
|
|
982
|
-
}
|
|
983
|
-
const definition_getConsentTables = (options)=>{
|
|
984
|
-
const pluginSchema = options.plugins?.reduce((acc, plugin)=>{
|
|
985
|
-
const schema = plugin.schema;
|
|
986
|
-
if (!schema) return acc;
|
|
987
|
-
for (const [key, value] of Object.entries(schema))acc[key] = {
|
|
988
|
-
fields: {
|
|
989
|
-
...acc[key]?.fields,
|
|
990
|
-
...value.fields
|
|
991
|
-
},
|
|
992
|
-
entityName: key
|
|
993
|
-
};
|
|
994
|
-
return acc;
|
|
995
|
-
}, {});
|
|
996
|
-
const { subject, consentPurpose, consentPolicy, domain, geoLocation, consent, consentPurposeJunction, record, consentGeoLocation, consentWithdrawal, auditLog, ...pluginTables } = pluginSchema || {};
|
|
997
|
-
return {
|
|
998
|
-
subject: getSubjectTable(options, subject?.fields),
|
|
999
|
-
consentPurpose: getPurposeTable(options, consentPurpose?.fields),
|
|
1000
|
-
consentPolicy: getConsentPolicyTable(options, consentPolicy?.fields),
|
|
1001
|
-
domain: getDomainTable(options, domain?.fields),
|
|
1002
|
-
consent: getConsentTable(options, consent?.fields),
|
|
1003
|
-
consentRecord: getConsentRecordTable(options, record?.fields),
|
|
1004
|
-
auditLog: getAuditLogTable(options, auditLog?.fields),
|
|
1005
|
-
...pluginTables
|
|
1006
|
-
};
|
|
1007
|
-
};
|
|
1008
|
-
function validateEntityOutput(tableName, data, options) {
|
|
1009
|
-
const tables = definition_getConsentTables(options);
|
|
1010
|
-
const table = tables[tableName];
|
|
1011
|
-
if (!table) throw new Error(`Table ${tableName} not found`);
|
|
1012
|
-
const processedData = {
|
|
1013
|
-
...data
|
|
1014
|
-
};
|
|
1015
|
-
for (const [field, def] of Object.entries(table.fields))if ('date' === def.type && 'string' == typeof processedData[field]) processedData[field] = new Date(processedData[field]);
|
|
1016
|
-
try {
|
|
1017
|
-
return table.schema.parse(processedData);
|
|
1018
|
-
} catch (error) {
|
|
1019
|
-
if (error instanceof external_zod_namespaceObject.ZodError) logger_namespaceObject.logger.error(`[validateEntityOutput] Validation failed for table ${String(tableName)}`, {
|
|
1020
|
-
table,
|
|
1021
|
-
issues: error.issues
|
|
1022
|
-
});
|
|
1023
|
-
throw error;
|
|
1024
|
-
}
|
|
1025
|
-
}
|
|
1026
|
-
function subjectRegistry({ adapter, ...ctx }) {
|
|
1027
|
-
const { createWithHooks } = getWithHooks(adapter, ctx);
|
|
1028
|
-
return {
|
|
1029
|
-
createSubject: async (subject, context)=>{
|
|
1030
|
-
const createdSubject = await createWithHooks({
|
|
1031
|
-
data: {
|
|
1032
|
-
createdAt: new Date(),
|
|
1033
|
-
updatedAt: new Date(),
|
|
1034
|
-
...subject
|
|
1035
|
-
},
|
|
1036
|
-
model: 'subject',
|
|
1037
|
-
customFn: void 0,
|
|
1038
|
-
context
|
|
1039
|
-
});
|
|
1040
|
-
return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
|
|
1041
|
-
},
|
|
1042
|
-
findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
|
|
1043
|
-
if (subjectId && externalSubjectId) {
|
|
1044
|
-
const [subjectById, subjectByExternalId] = await Promise.all([
|
|
1045
|
-
this.findSubjectById(subjectId),
|
|
1046
|
-
this.findSubjectByExternalId(externalSubjectId)
|
|
1047
|
-
]);
|
|
1048
|
-
if (!subjectById || !subjectByExternalId) {
|
|
1049
|
-
ctx.logger?.error('Subject validation failed: One or both subjects not found', {
|
|
1050
|
-
providedSubjectId: subjectId,
|
|
1051
|
-
providedExternalId: externalSubjectId,
|
|
1052
|
-
subjectByIdFound: !!subjectById,
|
|
1053
|
-
subjectByExternalIdFound: !!subjectByExternalId
|
|
1054
|
-
});
|
|
1055
|
-
throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
|
|
1056
|
-
code: error_codes_ERROR_CODES.NOT_FOUND,
|
|
1057
|
-
status: 404,
|
|
1058
|
-
meta: {
|
|
1059
|
-
providedSubjectId: subjectId,
|
|
1060
|
-
providedExternalId: externalSubjectId
|
|
1061
|
-
}
|
|
1062
|
-
});
|
|
1063
|
-
}
|
|
1064
|
-
if (subjectById.id !== subjectByExternalId.id) {
|
|
1065
|
-
ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
|
|
1066
|
-
providedSubjectId: subjectId,
|
|
1067
|
-
providedExternalId: externalSubjectId,
|
|
1068
|
-
subjectByIdId: subjectById.id,
|
|
1069
|
-
subjectByExternalIdId: subjectByExternalId.id
|
|
1070
|
-
});
|
|
1071
|
-
throw new error_class_DoubleTieError('The provided subjectId and externalSubjectId do not match the same subject. Please ensure both identifiers refer to the same subject.', {
|
|
1072
|
-
code: error_codes_ERROR_CODES.CONFLICT,
|
|
1073
|
-
status: 409,
|
|
1074
|
-
meta: {
|
|
1075
|
-
providedSubjectId: subjectId,
|
|
1076
|
-
providedExternalId: externalSubjectId,
|
|
1077
|
-
subjectByIdId: subjectById.id,
|
|
1078
|
-
subjectByExternalIdId: subjectByExternalId.id
|
|
1079
|
-
}
|
|
1080
|
-
});
|
|
1081
|
-
}
|
|
1082
|
-
return subjectById;
|
|
1083
|
-
}
|
|
1084
|
-
if (subjectId) {
|
|
1085
|
-
const subject = await this.findSubjectById(subjectId);
|
|
1086
|
-
if (subject) return subject;
|
|
1087
|
-
throw new error_class_DoubleTieError('Subject not found by subjectId', {
|
|
1088
|
-
code: error_codes_ERROR_CODES.NOT_FOUND,
|
|
1089
|
-
status: 404
|
|
1090
|
-
});
|
|
1091
|
-
}
|
|
1092
|
-
if (externalSubjectId) try {
|
|
1093
|
-
const subject = await this.findSubjectByExternalId(externalSubjectId);
|
|
1094
|
-
if (subject) {
|
|
1095
|
-
ctx.logger?.debug('Found existing subject by external ID', {
|
|
1096
|
-
externalSubjectId
|
|
1097
|
-
});
|
|
1098
|
-
return subject;
|
|
1099
|
-
}
|
|
1100
|
-
ctx.logger?.info('Creating new subject with external ID', {
|
|
1101
|
-
externalSubjectId
|
|
1102
|
-
});
|
|
1103
|
-
return await this.createSubject({
|
|
1104
|
-
externalId: externalSubjectId,
|
|
1105
|
-
identityProvider: 'external',
|
|
1106
|
-
lastIpAddress: ipAddress,
|
|
1107
|
-
isIdentified: true
|
|
1108
|
-
}, context);
|
|
1109
|
-
} catch (error) {
|
|
1110
|
-
if (error instanceof Error && error.message.includes('unique constraint')) {
|
|
1111
|
-
ctx.logger?.info('Handling duplicate key violation for external ID', {
|
|
1112
|
-
externalSubjectId
|
|
1113
|
-
});
|
|
1114
|
-
const subject = await this.findSubjectByExternalId(externalSubjectId);
|
|
1115
|
-
if (subject) return subject;
|
|
1116
|
-
}
|
|
1117
|
-
ctx.logger?.error('Failed to create or find subject with external ID', {
|
|
1118
|
-
externalSubjectId,
|
|
1119
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1120
|
-
});
|
|
1121
|
-
throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
|
|
1122
|
-
code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
1123
|
-
status: 500,
|
|
1124
|
-
meta: {
|
|
1125
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1126
|
-
}
|
|
1127
|
-
});
|
|
1128
|
-
}
|
|
1129
|
-
try {
|
|
1130
|
-
ctx.logger?.info('Creating new anonymous subject');
|
|
1131
|
-
return await this.createSubject({
|
|
1132
|
-
externalId: null,
|
|
1133
|
-
identityProvider: 'anonymous',
|
|
1134
|
-
lastIpAddress: ipAddress,
|
|
1135
|
-
isIdentified: false
|
|
1136
|
-
}, context);
|
|
1137
|
-
} catch (error) {
|
|
1138
|
-
ctx.logger?.error('Failed to create anonymous subject', {
|
|
1139
|
-
ipAddress,
|
|
1140
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1141
|
-
});
|
|
1142
|
-
throw new error_class_DoubleTieError('Failed to create anonymous subject', {
|
|
1143
|
-
code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
1144
|
-
status: 500,
|
|
1145
|
-
meta: {
|
|
1146
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1147
|
-
}
|
|
1148
|
-
});
|
|
1149
|
-
}
|
|
1150
|
-
},
|
|
1151
|
-
findSubjectById: async (subjectId)=>{
|
|
1152
|
-
const subject = await adapter.findOne({
|
|
1153
|
-
model: 'subject',
|
|
1154
|
-
where: [
|
|
1155
|
-
{
|
|
1156
|
-
field: 'id',
|
|
1157
|
-
value: subjectId
|
|
1158
|
-
}
|
|
1159
|
-
]
|
|
1160
|
-
});
|
|
1161
|
-
return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
|
|
1080
|
+
fieldName: subjectConfig?.fields?.updatedAt || 'updatedAt'
|
|
1081
|
+
},
|
|
1082
|
+
subjectTimezone: {
|
|
1083
|
+
type: 'timezone',
|
|
1084
|
+
required: false,
|
|
1085
|
+
defaultValue: COMMON_TIMEZONES.UTC,
|
|
1086
|
+
fieldName: subjectConfig?.fields?.subjectTimezone || 'subjectTimezone'
|
|
1087
|
+
},
|
|
1088
|
+
...subjectFields || {},
|
|
1089
|
+
...subjectConfig?.additionalFields || {}
|
|
1162
1090
|
},
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1091
|
+
order: 1
|
|
1092
|
+
};
|
|
1093
|
+
}
|
|
1094
|
+
const definition_getConsentTables = (options)=>{
|
|
1095
|
+
const pluginSchema = options.plugins?.reduce((acc, plugin)=>{
|
|
1096
|
+
const schema = plugin.schema;
|
|
1097
|
+
if (!schema) return acc;
|
|
1098
|
+
for (const [key, value] of Object.entries(schema))acc[key] = {
|
|
1099
|
+
fields: {
|
|
1100
|
+
...acc[key]?.fields,
|
|
1101
|
+
...value.fields
|
|
1102
|
+
},
|
|
1103
|
+
entityName: key
|
|
1104
|
+
};
|
|
1105
|
+
return acc;
|
|
1106
|
+
}, {});
|
|
1107
|
+
const { subject, consentPurpose, consentPolicy, domain, geoLocation, consent, consentPurposeJunction, record, consentGeoLocation, consentWithdrawal, auditLog, ...pluginTables } = pluginSchema || {};
|
|
1108
|
+
return {
|
|
1109
|
+
subject: getSubjectTable(options, subject?.fields),
|
|
1110
|
+
consentPurpose: getPurposeTable(options, consentPurpose?.fields),
|
|
1111
|
+
consentPolicy: getConsentPolicyTable(options, consentPolicy?.fields),
|
|
1112
|
+
domain: getDomainTable(options, domain?.fields),
|
|
1113
|
+
consent: getConsentTable(options, consent?.fields),
|
|
1114
|
+
consentRecord: getConsentRecordTable(options, record?.fields),
|
|
1115
|
+
auditLog: getAuditLogTable(options, auditLog?.fields),
|
|
1116
|
+
...pluginTables
|
|
1175
1117
|
};
|
|
1118
|
+
};
|
|
1119
|
+
function validateEntityOutput(tableName, data, options) {
|
|
1120
|
+
const tables = definition_getConsentTables(options);
|
|
1121
|
+
const table = tables[tableName];
|
|
1122
|
+
if (!table) throw new Error(`Table ${tableName} not found`);
|
|
1123
|
+
const processedData = {
|
|
1124
|
+
...data
|
|
1125
|
+
};
|
|
1126
|
+
for (const [field, def] of Object.entries(table.fields))if ('date' === def.type && 'string' == typeof processedData[field]) processedData[field] = new Date(processedData[field]);
|
|
1127
|
+
try {
|
|
1128
|
+
return table.schema.parse(processedData);
|
|
1129
|
+
} catch (error) {
|
|
1130
|
+
if (error instanceof external_zod_namespaceObject.ZodError) logger_namespaceObject.logger.error(`[validateEntityOutput] Validation failed for table ${String(tableName)}`, {
|
|
1131
|
+
table,
|
|
1132
|
+
issues: error.issues
|
|
1133
|
+
});
|
|
1134
|
+
throw error;
|
|
1135
|
+
}
|
|
1176
1136
|
}
|
|
1177
1137
|
function consentRegistry({ adapter, ...ctx }) {
|
|
1178
1138
|
const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
|
|
@@ -1449,146 +1409,236 @@ function domainRegistry({ adapter, ...ctx }) {
|
|
|
1449
1409
|
};
|
|
1450
1410
|
return registry;
|
|
1451
1411
|
}
|
|
1452
|
-
function
|
|
1412
|
+
function subjectRegistry({ adapter, ...ctx }) {
|
|
1453
1413
|
const { createWithHooks } = getWithHooks(adapter, ctx);
|
|
1454
1414
|
return {
|
|
1455
|
-
|
|
1456
|
-
const
|
|
1415
|
+
createSubject: async (subject, context)=>{
|
|
1416
|
+
const createdSubject = await createWithHooks({
|
|
1457
1417
|
data: {
|
|
1458
1418
|
createdAt: new Date(),
|
|
1459
|
-
|
|
1419
|
+
updatedAt: new Date(),
|
|
1420
|
+
...subject
|
|
1460
1421
|
},
|
|
1461
|
-
model: '
|
|
1422
|
+
model: 'subject',
|
|
1462
1423
|
customFn: void 0,
|
|
1463
1424
|
context
|
|
1464
1425
|
});
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1426
|
+
return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
|
|
1427
|
+
},
|
|
1428
|
+
findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
|
|
1429
|
+
if (subjectId && externalSubjectId) {
|
|
1430
|
+
const [subjectById, subjectByExternalId] = await Promise.all([
|
|
1431
|
+
this.findSubjectById(subjectId),
|
|
1432
|
+
this.findSubjectByExternalId(externalSubjectId)
|
|
1433
|
+
]);
|
|
1434
|
+
if (!subjectById || !subjectByExternalId) {
|
|
1435
|
+
ctx.logger?.error('Subject validation failed: One or both subjects not found', {
|
|
1436
|
+
providedSubjectId: subjectId,
|
|
1437
|
+
providedExternalId: externalSubjectId,
|
|
1438
|
+
subjectByIdFound: !!subjectById,
|
|
1439
|
+
subjectByExternalIdFound: !!subjectByExternalId
|
|
1440
|
+
});
|
|
1441
|
+
throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
|
|
1442
|
+
code: error_codes_ERROR_CODES.NOT_FOUND,
|
|
1443
|
+
status: 404,
|
|
1444
|
+
meta: {
|
|
1445
|
+
providedSubjectId: subjectId,
|
|
1446
|
+
providedExternalId: externalSubjectId
|
|
1447
|
+
}
|
|
1448
|
+
});
|
|
1449
|
+
}
|
|
1450
|
+
if (subjectById.id !== subjectByExternalId.id) {
|
|
1451
|
+
ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
|
|
1452
|
+
providedSubjectId: subjectId,
|
|
1453
|
+
providedExternalId: externalSubjectId,
|
|
1454
|
+
subjectByIdId: subjectById.id,
|
|
1455
|
+
subjectByExternalIdId: subjectByExternalId.id
|
|
1456
|
+
});
|
|
1457
|
+
throw new error_class_DoubleTieError('The provided subjectId and externalSubjectId do not match the same subject. Please ensure both identifiers refer to the same subject.', {
|
|
1458
|
+
code: error_codes_ERROR_CODES.CONFLICT,
|
|
1459
|
+
status: 409,
|
|
1460
|
+
meta: {
|
|
1461
|
+
providedSubjectId: subjectId,
|
|
1462
|
+
providedExternalId: externalSubjectId,
|
|
1463
|
+
subjectByIdId: subjectById.id,
|
|
1464
|
+
subjectByExternalIdId: subjectByExternalId.id
|
|
1465
|
+
}
|
|
1466
|
+
});
|
|
1467
|
+
}
|
|
1468
|
+
return subjectById;
|
|
1469
|
+
}
|
|
1470
|
+
if (subjectId) {
|
|
1471
|
+
const subject = await this.findSubjectById(subjectId);
|
|
1472
|
+
if (subject) return subject;
|
|
1473
|
+
throw new error_class_DoubleTieError('Subject not found by subjectId', {
|
|
1474
|
+
code: error_codes_ERROR_CODES.NOT_FOUND,
|
|
1475
|
+
status: 404
|
|
1476
|
+
});
|
|
1477
|
+
}
|
|
1478
|
+
if (externalSubjectId) try {
|
|
1479
|
+
const subject = await this.findSubjectByExternalId(externalSubjectId);
|
|
1480
|
+
if (subject) {
|
|
1481
|
+
ctx.logger?.debug('Found existing subject by external ID', {
|
|
1482
|
+
externalSubjectId
|
|
1483
|
+
});
|
|
1484
|
+
return subject;
|
|
1485
|
+
}
|
|
1486
|
+
ctx.logger?.info('Creating new subject with external ID', {
|
|
1487
|
+
externalSubjectId
|
|
1488
|
+
});
|
|
1489
|
+
return await this.createSubject({
|
|
1490
|
+
externalId: externalSubjectId,
|
|
1491
|
+
identityProvider: 'external',
|
|
1492
|
+
lastIpAddress: ipAddress,
|
|
1493
|
+
isIdentified: true
|
|
1494
|
+
}, context);
|
|
1495
|
+
} catch (error) {
|
|
1496
|
+
if (error instanceof Error && error.message.includes('unique constraint')) {
|
|
1497
|
+
ctx.logger?.info('Handling duplicate key violation for external ID', {
|
|
1498
|
+
externalSubjectId
|
|
1499
|
+
});
|
|
1500
|
+
const subject = await this.findSubjectByExternalId(externalSubjectId);
|
|
1501
|
+
if (subject) return subject;
|
|
1502
|
+
}
|
|
1503
|
+
ctx.logger?.error('Failed to create or find subject with external ID', {
|
|
1504
|
+
externalSubjectId,
|
|
1505
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1506
|
+
});
|
|
1507
|
+
throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
|
|
1508
|
+
code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
1509
|
+
status: 500,
|
|
1510
|
+
meta: {
|
|
1511
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1496
1512
|
}
|
|
1497
|
-
|
|
1498
|
-
break;
|
|
1513
|
+
});
|
|
1499
1514
|
}
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
}
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
}
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
result: null,
|
|
1547
|
-
shouldContinue: true
|
|
1515
|
+
try {
|
|
1516
|
+
ctx.logger?.info('Creating new anonymous subject');
|
|
1517
|
+
return await this.createSubject({
|
|
1518
|
+
externalId: null,
|
|
1519
|
+
identityProvider: 'anonymous',
|
|
1520
|
+
lastIpAddress: ipAddress,
|
|
1521
|
+
isIdentified: false
|
|
1522
|
+
}, context);
|
|
1523
|
+
} catch (error) {
|
|
1524
|
+
ctx.logger?.error('Failed to create anonymous subject', {
|
|
1525
|
+
ipAddress,
|
|
1526
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1527
|
+
});
|
|
1528
|
+
throw new error_class_DoubleTieError('Failed to create anonymous subject', {
|
|
1529
|
+
code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
1530
|
+
status: 500,
|
|
1531
|
+
meta: {
|
|
1532
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1533
|
+
}
|
|
1534
|
+
});
|
|
1535
|
+
}
|
|
1536
|
+
},
|
|
1537
|
+
findSubjectById: async (subjectId)=>{
|
|
1538
|
+
const subject = await adapter.findOne({
|
|
1539
|
+
model: 'subject',
|
|
1540
|
+
where: [
|
|
1541
|
+
{
|
|
1542
|
+
field: 'id',
|
|
1543
|
+
value: subjectId
|
|
1544
|
+
}
|
|
1545
|
+
]
|
|
1546
|
+
});
|
|
1547
|
+
return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
|
|
1548
|
+
},
|
|
1549
|
+
findSubjectByExternalId: async (externalId)=>{
|
|
1550
|
+
const subject = await adapter.findOne({
|
|
1551
|
+
model: 'subject',
|
|
1552
|
+
where: [
|
|
1553
|
+
{
|
|
1554
|
+
field: 'externalId',
|
|
1555
|
+
value: externalId
|
|
1556
|
+
}
|
|
1557
|
+
]
|
|
1558
|
+
});
|
|
1559
|
+
return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
|
|
1560
|
+
}
|
|
1548
1561
|
};
|
|
1549
|
-
|
|
1550
|
-
|
|
1562
|
+
}
|
|
1563
|
+
function auditLogRegistry({ adapter, ...ctx }) {
|
|
1564
|
+
const { createWithHooks } = getWithHooks(adapter, ctx);
|
|
1551
1565
|
return {
|
|
1552
|
-
|
|
1553
|
-
|
|
1566
|
+
createAuditLog: async (auditLog, context)=>{
|
|
1567
|
+
const createdLog = await createWithHooks({
|
|
1568
|
+
data: {
|
|
1569
|
+
createdAt: new Date(),
|
|
1570
|
+
...auditLog
|
|
1571
|
+
},
|
|
1572
|
+
model: 'auditLog',
|
|
1573
|
+
customFn: void 0,
|
|
1574
|
+
context
|
|
1575
|
+
});
|
|
1576
|
+
if (!createdLog) throw new error_class_DoubleTieError('Failed to create audit log - operation returned null', {
|
|
1577
|
+
code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
1578
|
+
status: 500
|
|
1579
|
+
});
|
|
1580
|
+
return createdLog;
|
|
1581
|
+
}
|
|
1554
1582
|
};
|
|
1555
1583
|
}
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
if (
|
|
1584
|
+
const external_kysely_namespaceObject = require("kysely");
|
|
1585
|
+
function getDatabaseType(db) {
|
|
1586
|
+
if (!db) return null;
|
|
1587
|
+
if ('dialect' in db) return getDatabaseType(db.dialect);
|
|
1588
|
+
if (db && 'object' == typeof db && 'createDriver' in db) {
|
|
1589
|
+
if (db instanceof external_kysely_namespaceObject.SqliteDialect) return 'sqlite';
|
|
1590
|
+
if (db instanceof external_kysely_namespaceObject.MysqlDialect) return 'mysql';
|
|
1591
|
+
if (db instanceof external_kysely_namespaceObject.PostgresDialect) return 'postgres';
|
|
1592
|
+
if (db instanceof external_kysely_namespaceObject.MssqlDialect) return 'mssql';
|
|
1593
|
+
}
|
|
1594
|
+
if (db && 'object' == typeof db && 'aggregate' in db) return 'sqlite';
|
|
1595
|
+
if (db && 'object' == typeof db && 'getConnection' in db) return 'mysql';
|
|
1596
|
+
if (db && 'object' == typeof db && 'connect' in db) return 'postgres';
|
|
1559
1597
|
return null;
|
|
1560
1598
|
}
|
|
1561
|
-
|
|
1562
|
-
const
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
if (
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
where
|
|
1574
|
-
});
|
|
1575
|
-
updated = processUpdateManyResult(adapterResult);
|
|
1599
|
+
const createKyselyAdapter = async (config)=>{
|
|
1600
|
+
const db = config.database;
|
|
1601
|
+
if (!db) return {
|
|
1602
|
+
kysely: null,
|
|
1603
|
+
databaseType: null
|
|
1604
|
+
};
|
|
1605
|
+
if (db && 'object' == typeof db && 'db' in db) {
|
|
1606
|
+
const kyselyConfig = db;
|
|
1607
|
+
return {
|
|
1608
|
+
kysely: kyselyConfig.db,
|
|
1609
|
+
databaseType: kyselyConfig.type
|
|
1610
|
+
};
|
|
1576
1611
|
}
|
|
1577
|
-
if (
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
createWithHooks: ({ data, model, customFn, context })=>create_hooks_createWithHooks(adapter, ctx, {
|
|
1583
|
-
data,
|
|
1584
|
-
model,
|
|
1585
|
-
customFn,
|
|
1586
|
-
context
|
|
1612
|
+
if (db && 'object' == typeof db && 'dialect' in db) {
|
|
1613
|
+
const dialectConfig = db;
|
|
1614
|
+
return {
|
|
1615
|
+
kysely: new external_kysely_namespaceObject.Kysely({
|
|
1616
|
+
dialect: dialectConfig.dialect
|
|
1587
1617
|
}),
|
|
1588
|
-
|
|
1589
|
-
|
|
1618
|
+
databaseType: dialectConfig.type
|
|
1619
|
+
};
|
|
1620
|
+
}
|
|
1621
|
+
let dialect;
|
|
1622
|
+
const databaseType = getDatabaseType(db);
|
|
1623
|
+
if (db && 'object' == typeof db && 'createDriver' in db) dialect = db;
|
|
1624
|
+
if (db && 'object' == typeof db && 'aggregate' in db) dialect = new external_kysely_namespaceObject.SqliteDialect({
|
|
1625
|
+
database: db
|
|
1626
|
+
});
|
|
1627
|
+
if (db && 'object' == typeof db && 'getConnection' in db) dialect = new external_kysely_namespaceObject.MysqlDialect({
|
|
1628
|
+
pool: db
|
|
1629
|
+
});
|
|
1630
|
+
if (db && 'object' == typeof db && 'connect' in db) dialect = new external_kysely_namespaceObject.PostgresDialect({
|
|
1631
|
+
pool: db
|
|
1632
|
+
});
|
|
1633
|
+
return {
|
|
1634
|
+
kysely: dialect ? new external_kysely_namespaceObject.Kysely({
|
|
1635
|
+
dialect
|
|
1636
|
+
}) : null,
|
|
1637
|
+
databaseType
|
|
1590
1638
|
};
|
|
1591
|
-
}
|
|
1639
|
+
};
|
|
1640
|
+
const external_superjson_namespaceObject = require("superjson");
|
|
1641
|
+
var external_superjson_default = /*#__PURE__*/ __webpack_require__.n(external_superjson_namespaceObject);
|
|
1592
1642
|
const createEntityTransformer = (db, options, config)=>{
|
|
1593
1643
|
const schema = definition_getConsentTables(options);
|
|
1594
1644
|
function getField(model, field) {
|
|
@@ -1927,62 +1977,14 @@ const kyselyAdapter = (db, config)=>(opts)=>{
|
|
|
1927
1977
|
options: config
|
|
1928
1978
|
};
|
|
1929
1979
|
};
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
if (
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
if (db instanceof external_kysely_namespaceObject.SqliteDialect) return 'sqlite';
|
|
1936
|
-
if (db instanceof external_kysely_namespaceObject.MysqlDialect) return 'mysql';
|
|
1937
|
-
if (db instanceof external_kysely_namespaceObject.PostgresDialect) return 'postgres';
|
|
1938
|
-
if (db instanceof external_kysely_namespaceObject.MssqlDialect) return 'mssql';
|
|
1980
|
+
function utils_applyDefaultValue(inputValue, field, operation) {
|
|
1981
|
+
if ('update' === operation) return inputValue;
|
|
1982
|
+
if (null == inputValue && field.defaultValue) {
|
|
1983
|
+
if ('function' == typeof field.defaultValue) return field.defaultValue();
|
|
1984
|
+
return field.defaultValue;
|
|
1939
1985
|
}
|
|
1940
|
-
|
|
1941
|
-
if (db && 'object' == typeof db && 'getConnection' in db) return 'mysql';
|
|
1942
|
-
if (db && 'object' == typeof db && 'connect' in db) return 'postgres';
|
|
1943
|
-
return null;
|
|
1986
|
+
return inputValue;
|
|
1944
1987
|
}
|
|
1945
|
-
const createKyselyAdapter = async (config)=>{
|
|
1946
|
-
const db = config.database;
|
|
1947
|
-
if (!db) return {
|
|
1948
|
-
kysely: null,
|
|
1949
|
-
databaseType: null
|
|
1950
|
-
};
|
|
1951
|
-
if (db && 'object' == typeof db && 'db' in db) {
|
|
1952
|
-
const kyselyConfig = db;
|
|
1953
|
-
return {
|
|
1954
|
-
kysely: kyselyConfig.db,
|
|
1955
|
-
databaseType: kyselyConfig.type
|
|
1956
|
-
};
|
|
1957
|
-
}
|
|
1958
|
-
if (db && 'object' == typeof db && 'dialect' in db) {
|
|
1959
|
-
const dialectConfig = db;
|
|
1960
|
-
return {
|
|
1961
|
-
kysely: new external_kysely_namespaceObject.Kysely({
|
|
1962
|
-
dialect: dialectConfig.dialect
|
|
1963
|
-
}),
|
|
1964
|
-
databaseType: dialectConfig.type
|
|
1965
|
-
};
|
|
1966
|
-
}
|
|
1967
|
-
let dialect;
|
|
1968
|
-
const databaseType = getDatabaseType(db);
|
|
1969
|
-
if (db && 'object' == typeof db && 'createDriver' in db) dialect = db;
|
|
1970
|
-
if (db && 'object' == typeof db && 'aggregate' in db) dialect = new external_kysely_namespaceObject.SqliteDialect({
|
|
1971
|
-
database: db
|
|
1972
|
-
});
|
|
1973
|
-
if (db && 'object' == typeof db && 'getConnection' in db) dialect = new external_kysely_namespaceObject.MysqlDialect({
|
|
1974
|
-
pool: db
|
|
1975
|
-
});
|
|
1976
|
-
if (db && 'object' == typeof db && 'connect' in db) dialect = new external_kysely_namespaceObject.PostgresDialect({
|
|
1977
|
-
pool: db
|
|
1978
|
-
});
|
|
1979
|
-
return {
|
|
1980
|
-
kysely: dialect ? new external_kysely_namespaceObject.Kysely({
|
|
1981
|
-
dialect
|
|
1982
|
-
}) : null,
|
|
1983
|
-
databaseType
|
|
1984
|
-
};
|
|
1985
|
-
};
|
|
1986
1988
|
const memory_adapter_createEntityTransformer = (options)=>{
|
|
1987
1989
|
const schema = definition_getConsentTables(options);
|
|
1988
1990
|
function getField(model, field) {
|
|
@@ -2163,20 +2165,6 @@ const memoryAdapter = (db)=>(options)=>{
|
|
|
2163
2165
|
}
|
|
2164
2166
|
};
|
|
2165
2167
|
};
|
|
2166
|
-
require("drizzle-orm");
|
|
2167
|
-
let globalLogger;
|
|
2168
|
-
function getLogger(options) {
|
|
2169
|
-
if (!globalLogger) globalLogger = (0, logger_namespaceObject.createLogger)({
|
|
2170
|
-
level: 'info',
|
|
2171
|
-
appName: 'c15t',
|
|
2172
|
-
...options
|
|
2173
|
-
});
|
|
2174
|
-
return globalLogger;
|
|
2175
|
-
}
|
|
2176
|
-
function initLogger(options) {
|
|
2177
|
-
globalLogger = (0, logger_namespaceObject.createLogger)(options);
|
|
2178
|
-
return globalLogger;
|
|
2179
|
-
}
|
|
2180
2168
|
async function getAdapter(options) {
|
|
2181
2169
|
const logger = getLogger({
|
|
2182
2170
|
appName: options.appName ?? 'c15t',
|
|
@@ -2201,6 +2189,7 @@ async function getAdapter(options) {
|
|
|
2201
2189
|
type: databaseType || 'sqlite'
|
|
2202
2190
|
})(options);
|
|
2203
2191
|
}
|
|
2192
|
+
require("drizzle-orm");
|
|
2204
2193
|
const env = 'undefined' != typeof process ? process.env : {};
|
|
2205
2194
|
'undefined' != typeof process && process.env.NODE_ENV;
|
|
2206
2195
|
function toBoolean(val) {
|
|
@@ -2235,7 +2224,7 @@ function getBaseURL(url, path) {
|
|
|
2235
2224
|
if (fromEnv) return withPath(fromEnv, path);
|
|
2236
2225
|
}
|
|
2237
2226
|
var package_namespaceObject = {
|
|
2238
|
-
i8: "1.
|
|
2227
|
+
i8: "1.6.0"
|
|
2239
2228
|
};
|
|
2240
2229
|
const createRegistry = (ctx)=>({
|
|
2241
2230
|
...auditLogRegistry(ctx),
|
|
@@ -2267,7 +2256,7 @@ const init = async (options)=>{
|
|
|
2267
2256
|
logger.info('Telemetry is disabled by configuration');
|
|
2268
2257
|
telemetryInitialized = false;
|
|
2269
2258
|
} else {
|
|
2270
|
-
const resource =
|
|
2259
|
+
const resource = (0, resources_namespaceObject.resourceFromAttributes)({
|
|
2271
2260
|
'service.name': String(appName),
|
|
2272
2261
|
'service.version': String(package_namespaceObject.i8 || '1.0.0'),
|
|
2273
2262
|
...telemetryOptions?.defaultAttributes || {}
|
|
@@ -2515,7 +2504,7 @@ const processCors = (request, context, trustedOrigins)=>{
|
|
|
2515
2504
|
}
|
|
2516
2505
|
return context;
|
|
2517
2506
|
};
|
|
2518
|
-
const version = '1.
|
|
2507
|
+
const version = '1.6.0';
|
|
2519
2508
|
const createOpenAPIConfig = (options)=>{
|
|
2520
2509
|
const basePath = options.basePath || '';
|
|
2521
2510
|
return {
|
|
@@ -2550,11 +2539,11 @@ const baseConsentSchema = external_zod_namespaceObject.z.object({
|
|
|
2550
2539
|
externalSubjectId: external_zod_namespaceObject.z.string().optional(),
|
|
2551
2540
|
domain: external_zod_namespaceObject.z.string(),
|
|
2552
2541
|
type: PolicyTypeSchema,
|
|
2553
|
-
metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional()
|
|
2542
|
+
metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional()
|
|
2554
2543
|
});
|
|
2555
2544
|
const cookieBannerSchema = baseConsentSchema.extend({
|
|
2556
2545
|
type: external_zod_namespaceObject.z.literal('cookie_banner'),
|
|
2557
|
-
preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.boolean())
|
|
2546
|
+
preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.boolean())
|
|
2558
2547
|
});
|
|
2559
2548
|
const policyBasedSchema = baseConsentSchema.extend({
|
|
2560
2549
|
type: external_zod_namespaceObject.z["enum"]([
|
|
@@ -2563,7 +2552,7 @@ const policyBasedSchema = baseConsentSchema.extend({
|
|
|
2563
2552
|
'terms_and_conditions'
|
|
2564
2553
|
]),
|
|
2565
2554
|
policyId: external_zod_namespaceObject.z.string().optional(),
|
|
2566
|
-
preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.boolean()).optional()
|
|
2555
|
+
preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.boolean()).optional()
|
|
2567
2556
|
});
|
|
2568
2557
|
const otherConsentSchema = baseConsentSchema.extend({
|
|
2569
2558
|
type: external_zod_namespaceObject.z["enum"]([
|
|
@@ -2571,7 +2560,7 @@ const otherConsentSchema = baseConsentSchema.extend({
|
|
|
2571
2560
|
'age_verification',
|
|
2572
2561
|
'other'
|
|
2573
2562
|
]),
|
|
2574
|
-
preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.boolean()).optional()
|
|
2563
|
+
preferences: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.boolean()).optional()
|
|
2575
2564
|
});
|
|
2576
2565
|
const postConsentContract = contract_namespaceObject.oc.route({
|
|
2577
2566
|
method: 'POST',
|
|
@@ -2610,64 +2599,64 @@ Use this endpoint to record user consent and maintain a compliant consent manage
|
|
|
2610
2599
|
}).errors({
|
|
2611
2600
|
INPUT_VALIDATION_FAILED: {
|
|
2612
2601
|
status: 422,
|
|
2613
|
-
message: 'Invalid input parameters',
|
|
2614
2602
|
data: external_zod_namespaceObject.z.object({
|
|
2615
2603
|
formErrors: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
|
|
2616
2604
|
fieldErrors: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()))
|
|
2617
|
-
})
|
|
2605
|
+
}),
|
|
2606
|
+
error: 'Invalid input parameters'
|
|
2618
2607
|
},
|
|
2619
2608
|
SUBJECT_CREATION_FAILED: {
|
|
2620
2609
|
status: 400,
|
|
2621
|
-
message: 'Failed to create or find subject',
|
|
2622
2610
|
data: external_zod_namespaceObject.z.object({
|
|
2623
2611
|
subjectId: external_zod_namespaceObject.z.string().optional(),
|
|
2624
2612
|
externalSubjectId: external_zod_namespaceObject.z.string().optional()
|
|
2625
|
-
})
|
|
2613
|
+
}),
|
|
2614
|
+
error: 'Failed to create or find subject'
|
|
2626
2615
|
},
|
|
2627
2616
|
DOMAIN_CREATION_FAILED: {
|
|
2628
2617
|
status: 500,
|
|
2629
|
-
message: 'Failed to create or find domain',
|
|
2630
2618
|
data: external_zod_namespaceObject.z.object({
|
|
2631
2619
|
domain: external_zod_namespaceObject.z.string()
|
|
2632
|
-
})
|
|
2620
|
+
}),
|
|
2621
|
+
error: 'Failed to create or find domain'
|
|
2633
2622
|
},
|
|
2634
2623
|
POLICY_NOT_FOUND: {
|
|
2635
2624
|
status: 404,
|
|
2636
|
-
message: 'Policy not found',
|
|
2637
2625
|
data: external_zod_namespaceObject.z.object({
|
|
2638
2626
|
policyId: external_zod_namespaceObject.z.string(),
|
|
2639
2627
|
type: external_zod_namespaceObject.z.string()
|
|
2640
|
-
})
|
|
2628
|
+
}),
|
|
2629
|
+
error: 'Policy not found'
|
|
2641
2630
|
},
|
|
2642
2631
|
POLICY_INACTIVE: {
|
|
2643
2632
|
status: 409,
|
|
2644
|
-
message: 'Policy is not active',
|
|
2645
2633
|
data: external_zod_namespaceObject.z.object({
|
|
2646
2634
|
policyId: external_zod_namespaceObject.z.string(),
|
|
2647
2635
|
type: external_zod_namespaceObject.z.string()
|
|
2648
|
-
})
|
|
2636
|
+
}),
|
|
2637
|
+
error: 'Policy is not active'
|
|
2649
2638
|
},
|
|
2650
2639
|
POLICY_CREATION_FAILED: {
|
|
2651
2640
|
status: 500,
|
|
2652
|
-
message: 'Failed to create or find policy',
|
|
2653
2641
|
data: external_zod_namespaceObject.z.object({
|
|
2654
2642
|
type: external_zod_namespaceObject.z.string()
|
|
2655
|
-
})
|
|
2643
|
+
}),
|
|
2644
|
+
error: 'Failed to create or find policy'
|
|
2656
2645
|
},
|
|
2657
2646
|
PURPOSE_CREATION_FAILED: {
|
|
2658
2647
|
status: 500,
|
|
2659
|
-
message: 'Failed to create consent purpose',
|
|
2660
2648
|
data: external_zod_namespaceObject.z.object({
|
|
2661
2649
|
purposeCode: external_zod_namespaceObject.z.string()
|
|
2662
|
-
})
|
|
2650
|
+
}),
|
|
2651
|
+
error: 'Failed to create consent purpose'
|
|
2663
2652
|
},
|
|
2664
2653
|
CONSENT_CREATION_FAILED: {
|
|
2665
2654
|
status: 500,
|
|
2666
|
-
message: 'Failed to create consent record',
|
|
2667
2655
|
data: external_zod_namespaceObject.z.object({
|
|
2668
2656
|
subjectId: external_zod_namespaceObject.z.string(),
|
|
2669
2657
|
domain: external_zod_namespaceObject.z.string()
|
|
2670
|
-
})
|
|
2658
|
+
}),
|
|
2659
|
+
error: 'Failed to create consent record'
|
|
2671
2660
|
}
|
|
2672
2661
|
}).input(external_zod_namespaceObject.z.discriminatedUnion('type', [
|
|
2673
2662
|
cookieBannerSchema,
|
|
@@ -2682,9 +2671,14 @@ Use this endpoint to record user consent and maintain a compliant consent manage
|
|
|
2682
2671
|
type: PolicyTypeSchema,
|
|
2683
2672
|
status: external_zod_namespaceObject.z.string(),
|
|
2684
2673
|
recordId: external_zod_namespaceObject.z.string(),
|
|
2685
|
-
metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.unknown()).optional(),
|
|
2674
|
+
metadata: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.unknown()).optional(),
|
|
2686
2675
|
givenAt: external_zod_namespaceObject.z.date()
|
|
2687
2676
|
}));
|
|
2677
|
+
const types_branding = [
|
|
2678
|
+
'c15t',
|
|
2679
|
+
'consent',
|
|
2680
|
+
'none'
|
|
2681
|
+
];
|
|
2688
2682
|
const JurisdictionMessages = {
|
|
2689
2683
|
GDPR: 'GDPR or equivalent regulations require a cookie banner.',
|
|
2690
2684
|
CH: 'Switzerland requires similar data protection measures.',
|
|
@@ -2770,20 +2764,21 @@ Use this endpoint to implement geo-targeted consent banners and ensure complianc
|
|
|
2770
2764
|
translations: external_zod_namespaceObject.z.object({
|
|
2771
2765
|
language: external_zod_namespaceObject.z.string(),
|
|
2772
2766
|
translations: TranslationsSchema
|
|
2773
|
-
})
|
|
2767
|
+
}),
|
|
2768
|
+
branding: external_zod_namespaceObject.z["enum"](types_branding)
|
|
2774
2769
|
}));
|
|
2775
|
-
const verifyConsentInputSchema = external_zod_namespaceObject.z.
|
|
2770
|
+
const verifyConsentInputSchema = external_zod_namespaceObject.z.strictObject({
|
|
2776
2771
|
subjectId: external_zod_namespaceObject.z.string().optional(),
|
|
2777
2772
|
externalSubjectId: external_zod_namespaceObject.z.string().optional(),
|
|
2778
2773
|
domain: external_zod_namespaceObject.z.string(),
|
|
2779
2774
|
type: PolicyTypeSchema,
|
|
2780
2775
|
policyId: external_zod_namespaceObject.z.string().optional(),
|
|
2781
2776
|
preferences: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional()
|
|
2782
|
-
})
|
|
2783
|
-
const verify_contract_consentSchema = external_zod_namespaceObject.z.
|
|
2777
|
+
});
|
|
2778
|
+
const verify_contract_consentSchema = external_zod_namespaceObject.z.looseObject({
|
|
2784
2779
|
id: external_zod_namespaceObject.z.string(),
|
|
2785
2780
|
purposeIds: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string())
|
|
2786
|
-
})
|
|
2781
|
+
});
|
|
2787
2782
|
const verifyConsentContract = contract_namespaceObject.oc.route({
|
|
2788
2783
|
method: 'POST',
|
|
2789
2784
|
path: '/consent/verify',
|
|
@@ -2811,58 +2806,58 @@ Use this endpoint to ensure compliance with privacy regulations and to verify us
|
|
|
2811
2806
|
}).errors({
|
|
2812
2807
|
INPUT_VALIDATION_FAILED: {
|
|
2813
2808
|
status: 422,
|
|
2814
|
-
message: 'Invalid input parameters',
|
|
2815
2809
|
data: external_zod_namespaceObject.z.object({
|
|
2816
2810
|
formErrors: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
|
|
2817
2811
|
fieldErrors: external_zod_namespaceObject.z.record(external_zod_namespaceObject.z.string(), external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()).optional())
|
|
2818
|
-
})
|
|
2812
|
+
}),
|
|
2813
|
+
error: 'Invalid input parameters'
|
|
2819
2814
|
},
|
|
2820
2815
|
SUBJECT_NOT_FOUND: {
|
|
2821
2816
|
status: 404,
|
|
2822
|
-
message: 'Subject not found',
|
|
2823
2817
|
data: external_zod_namespaceObject.z.object({
|
|
2824
2818
|
subjectId: external_zod_namespaceObject.z.string().optional(),
|
|
2825
2819
|
externalSubjectId: external_zod_namespaceObject.z.string().optional()
|
|
2826
|
-
})
|
|
2820
|
+
}),
|
|
2821
|
+
error: 'Subject not found'
|
|
2827
2822
|
},
|
|
2828
2823
|
DOMAIN_NOT_FOUND: {
|
|
2829
2824
|
status: 404,
|
|
2830
|
-
message: 'Domain not found',
|
|
2831
2825
|
data: external_zod_namespaceObject.z.object({
|
|
2832
2826
|
domain: external_zod_namespaceObject.z.string()
|
|
2833
|
-
})
|
|
2827
|
+
}),
|
|
2828
|
+
error: 'Domain not found'
|
|
2834
2829
|
},
|
|
2835
2830
|
POLICY_NOT_FOUND: {
|
|
2836
2831
|
status: 404,
|
|
2837
|
-
message: 'Policy not found or invalid',
|
|
2838
2832
|
data: external_zod_namespaceObject.z.object({
|
|
2839
2833
|
policyId: external_zod_namespaceObject.z.string(),
|
|
2840
2834
|
type: external_zod_namespaceObject.z.string()
|
|
2841
|
-
})
|
|
2835
|
+
}),
|
|
2836
|
+
error: 'Policy not found or invalid'
|
|
2842
2837
|
},
|
|
2843
2838
|
PURPOSES_NOT_FOUND: {
|
|
2844
2839
|
status: 404,
|
|
2845
|
-
message: 'Could not find all specified purposes',
|
|
2846
2840
|
data: external_zod_namespaceObject.z.object({
|
|
2847
2841
|
preferences: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string()),
|
|
2848
2842
|
foundPurposes: external_zod_namespaceObject.z.array(external_zod_namespaceObject.z.string())
|
|
2849
|
-
})
|
|
2843
|
+
}),
|
|
2844
|
+
error: 'Could not find all specified purposes'
|
|
2850
2845
|
},
|
|
2851
2846
|
COOKIE_BANNER_PREFERENCES_REQUIRED: {
|
|
2852
2847
|
status: 400,
|
|
2853
|
-
message: 'Preferences are required for cookie banner consent',
|
|
2854
2848
|
data: external_zod_namespaceObject.z.object({
|
|
2855
2849
|
type: external_zod_namespaceObject.z.literal('cookie_banner')
|
|
2856
|
-
})
|
|
2850
|
+
}),
|
|
2851
|
+
error: 'Preferences are required for cookie banner consent'
|
|
2857
2852
|
},
|
|
2858
2853
|
NO_CONSENT_FOUND: {
|
|
2859
2854
|
status: 404,
|
|
2860
|
-
message: 'No consent found for the given policy',
|
|
2861
2855
|
data: external_zod_namespaceObject.z.object({
|
|
2862
2856
|
policyId: external_zod_namespaceObject.z.string(),
|
|
2863
2857
|
subjectId: external_zod_namespaceObject.z.string(),
|
|
2864
2858
|
domainId: external_zod_namespaceObject.z.string()
|
|
2865
|
-
})
|
|
2859
|
+
}),
|
|
2860
|
+
error: 'No consent found for the given policy'
|
|
2866
2861
|
}
|
|
2867
2862
|
}).input(verifyConsentInputSchema).output(external_zod_namespaceObject.z.object({
|
|
2868
2863
|
isValid: external_zod_namespaceObject.z.boolean(),
|
|
@@ -3227,11 +3222,11 @@ function getTranslations(acceptLanguage, customTranslations) {
|
|
|
3227
3222
|
};
|
|
3228
3223
|
}
|
|
3229
3224
|
function getHeaders(headers) {
|
|
3230
|
-
if (!headers)
|
|
3231
|
-
|
|
3232
|
-
|
|
3233
|
-
|
|
3234
|
-
}
|
|
3225
|
+
if (!headers) return {
|
|
3226
|
+
countryCode: null,
|
|
3227
|
+
regionCode: null,
|
|
3228
|
+
acceptLanguage: null
|
|
3229
|
+
};
|
|
3235
3230
|
const normalizeHeader = (value)=>{
|
|
3236
3231
|
if (!value) return null;
|
|
3237
3232
|
return Array.isArray(value) ? value[0] ?? null : value;
|
|
@@ -3245,17 +3240,18 @@ function getHeaders(headers) {
|
|
|
3245
3240
|
acceptLanguage
|
|
3246
3241
|
};
|
|
3247
3242
|
}
|
|
3248
|
-
function buildResponse({ shouldShowBanner, jurisdiction, location, acceptLanguage, customTranslations }) {
|
|
3243
|
+
function buildResponse({ shouldShowBanner, jurisdiction, location, acceptLanguage, customTranslations, branding = 'c15t' }) {
|
|
3249
3244
|
return {
|
|
3250
3245
|
showConsentBanner: shouldShowBanner,
|
|
3251
3246
|
jurisdiction,
|
|
3252
3247
|
location,
|
|
3253
|
-
translations: getTranslations(acceptLanguage, customTranslations)
|
|
3248
|
+
translations: getTranslations(acceptLanguage, customTranslations),
|
|
3249
|
+
branding
|
|
3254
3250
|
};
|
|
3255
3251
|
}
|
|
3256
3252
|
const handler_showConsentBanner = os.consent.showBanner.handler(({ context })=>{
|
|
3257
3253
|
const typedContext = context;
|
|
3258
|
-
const { customTranslations, disableGeoLocation } = typedContext.options.advanced ?? {};
|
|
3254
|
+
const { customTranslations, disableGeoLocation, branding } = typedContext.options.advanced ?? {};
|
|
3259
3255
|
const { countryCode, regionCode, acceptLanguage } = getHeaders(typedContext.headers);
|
|
3260
3256
|
if (disableGeoLocation) return buildResponse({
|
|
3261
3257
|
shouldShowBanner: true,
|
|
@@ -3268,7 +3264,8 @@ const handler_showConsentBanner = os.consent.showBanner.handler(({ context })=>{
|
|
|
3268
3264
|
regionCode: null
|
|
3269
3265
|
},
|
|
3270
3266
|
acceptLanguage,
|
|
3271
|
-
customTranslations
|
|
3267
|
+
customTranslations,
|
|
3268
|
+
branding
|
|
3272
3269
|
});
|
|
3273
3270
|
const { showConsentBanner, jurisdictionCode, message } = checkJurisdiction(countryCode);
|
|
3274
3271
|
return buildResponse({
|
|
@@ -3282,7 +3279,8 @@ const handler_showConsentBanner = os.consent.showBanner.handler(({ context })=>{
|
|
|
3282
3279
|
regionCode
|
|
3283
3280
|
},
|
|
3284
3281
|
acceptLanguage,
|
|
3285
|
-
customTranslations
|
|
3282
|
+
customTranslations,
|
|
3283
|
+
branding
|
|
3286
3284
|
});
|
|
3287
3285
|
});
|
|
3288
3286
|
const verifyConsent = os.consent.verify.handler(async ({ input, context })=>{
|
|
@@ -3824,8 +3822,10 @@ const c15tInstance = (options)=>{
|
|
|
3824
3822
|
};
|
|
3825
3823
|
};
|
|
3826
3824
|
exports.c15tInstance = __webpack_exports__.c15tInstance;
|
|
3825
|
+
exports.version = __webpack_exports__.version;
|
|
3827
3826
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
3828
|
-
"c15tInstance"
|
|
3827
|
+
"c15tInstance",
|
|
3828
|
+
"version"
|
|
3829
3829
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
3830
3830
|
Object.defineProperty(exports, '__esModule', {
|
|
3831
3831
|
value: true
|