@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/schema/index.js
CHANGED
|
@@ -22,32 +22,20 @@ const COMMON_TIMEZONES = {
|
|
|
22
22
|
};
|
|
23
23
|
(0, __WEBPACK_EXTERNAL_MODULE_base_x_aeb88370__["default"])('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
|
|
24
24
|
const fieldConfigSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
25
|
-
required: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
26
|
-
returned: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
27
|
-
input: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
28
|
-
defaultValue: __WEBPACK_EXTERNAL_MODULE_zod__.z.
|
|
29
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
|
|
30
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
|
|
31
|
-
]).optional(),
|
|
25
|
+
required: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
26
|
+
returned: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
27
|
+
input: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
28
|
+
defaultValue: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
|
|
32
29
|
transform: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
33
|
-
input: __WEBPACK_EXTERNAL_MODULE_zod__.z
|
|
34
|
-
|
|
35
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.promise(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
|
|
36
|
-
])).optional(),
|
|
37
|
-
output: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
|
|
38
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
|
|
39
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.promise(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
|
|
40
|
-
])).optional()
|
|
30
|
+
input: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
|
|
31
|
+
output: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional()
|
|
41
32
|
}).optional(),
|
|
42
|
-
validator: __WEBPACK_EXTERNAL_MODULE_zod__.z
|
|
43
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
44
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z["null"]()
|
|
45
|
-
])).optional(),
|
|
33
|
+
validator: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
|
|
46
34
|
unique: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
|
|
47
35
|
indexed: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
|
|
48
|
-
sortable: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
36
|
+
sortable: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
49
37
|
fieldName: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
50
|
-
bigint: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
38
|
+
bigint: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false)
|
|
51
39
|
});
|
|
52
40
|
const stringFieldSchema = fieldConfigSchema.extend({
|
|
53
41
|
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string'),
|
|
@@ -67,18 +55,18 @@ const dateFieldSchema = fieldConfigSchema.extend({
|
|
|
67
55
|
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('date'),
|
|
68
56
|
minDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
|
|
69
57
|
maxDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
|
|
70
|
-
dateOnly: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
71
|
-
format: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional()
|
|
58
|
+
dateOnly: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
|
|
59
|
+
format: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional()
|
|
72
60
|
});
|
|
73
61
|
const timezoneFieldSchema = fieldConfigSchema.extend({
|
|
74
62
|
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('timezone'),
|
|
75
|
-
validateTimezone: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
63
|
+
validateTimezone: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
76
64
|
suggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional(),
|
|
77
|
-
restrictToSuggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
65
|
+
restrictToSuggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false)
|
|
78
66
|
});
|
|
79
67
|
const jsonFieldSchema = fieldConfigSchema.extend({
|
|
80
68
|
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('json'),
|
|
81
|
-
validateJson: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
69
|
+
validateJson: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true)
|
|
82
70
|
});
|
|
83
71
|
const stringArrayFieldSchema = fieldConfigSchema.extend({
|
|
84
72
|
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string[]')
|
|
@@ -96,6 +84,125 @@ __WEBPACK_EXTERNAL_MODULE_zod__.z.discriminatedUnion('type', [
|
|
|
96
84
|
stringArrayFieldSchema,
|
|
97
85
|
numberArrayFieldSchema
|
|
98
86
|
]);
|
|
87
|
+
async function processHooks(data, model, operation, phase, hooks, context) {
|
|
88
|
+
let currentData = {
|
|
89
|
+
...data
|
|
90
|
+
};
|
|
91
|
+
for (const hookSet of hooks){
|
|
92
|
+
const modelHooks = hookSet[model];
|
|
93
|
+
if (!modelHooks) continue;
|
|
94
|
+
const operationHooks = modelHooks[operation];
|
|
95
|
+
if (!operationHooks) continue;
|
|
96
|
+
const hookFn = operationHooks[phase];
|
|
97
|
+
if (hookFn) if ('before' === phase) {
|
|
98
|
+
const result = await hookFn(currentData, context);
|
|
99
|
+
if (result && 'object' == typeof result && 'kind' in result) switch(result.kind){
|
|
100
|
+
case 'abort':
|
|
101
|
+
return null;
|
|
102
|
+
case 'transform':
|
|
103
|
+
{
|
|
104
|
+
const transformData = result.data;
|
|
105
|
+
currentData = {
|
|
106
|
+
...currentData,
|
|
107
|
+
...transformData
|
|
108
|
+
};
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
default:
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
} else await hookFn(currentData, context);
|
|
115
|
+
}
|
|
116
|
+
return currentData;
|
|
117
|
+
}
|
|
118
|
+
async function processAfterHooksForMany(records, model, hooks, context) {
|
|
119
|
+
if (!records.length) return;
|
|
120
|
+
for (const record of records)await processHooks(record, model, 'update', 'after', hooks, context);
|
|
121
|
+
}
|
|
122
|
+
async function create_hooks_createWithHooks(adapter, ctx, props) {
|
|
123
|
+
const { data, model, customFn, context } = props;
|
|
124
|
+
const hooks = ctx.hooks || [];
|
|
125
|
+
const transformedData = await processHooks(data, model, 'create', 'before', hooks, context);
|
|
126
|
+
if (null === transformedData) return null;
|
|
127
|
+
let created = null;
|
|
128
|
+
if (customFn) {
|
|
129
|
+
created = await customFn.fn(transformedData);
|
|
130
|
+
if (!customFn.executeMainFn && created) return created;
|
|
131
|
+
}
|
|
132
|
+
if (!created) created = await adapter.create({
|
|
133
|
+
model: model,
|
|
134
|
+
data: transformedData
|
|
135
|
+
});
|
|
136
|
+
if (created) await processHooks(created, model, 'create', 'after', hooks, context);
|
|
137
|
+
return created;
|
|
138
|
+
}
|
|
139
|
+
async function update_hooks_updateWithHooks(adapter, ctx, props) {
|
|
140
|
+
const { data, where, model, customFn, context } = props;
|
|
141
|
+
const hooks = ctx.hooks || [];
|
|
142
|
+
const transformedData = await processHooks(data, model, 'update', 'before', hooks, context);
|
|
143
|
+
if (null === transformedData) return null;
|
|
144
|
+
let updated = null;
|
|
145
|
+
if (customFn) {
|
|
146
|
+
const result = await customFn.fn(transformedData);
|
|
147
|
+
updated = result;
|
|
148
|
+
if (!customFn.executeMainFn && updated) return updated;
|
|
149
|
+
}
|
|
150
|
+
if (!updated) updated = await adapter.update({
|
|
151
|
+
model: model,
|
|
152
|
+
update: transformedData,
|
|
153
|
+
where
|
|
154
|
+
});
|
|
155
|
+
if (updated) await processHooks(updated, model, 'update', 'after', hooks, context);
|
|
156
|
+
return updated;
|
|
157
|
+
}
|
|
158
|
+
async function executeCustomFunction(data, customFn) {
|
|
159
|
+
if (!customFn) return {
|
|
160
|
+
result: null,
|
|
161
|
+
shouldContinue: true
|
|
162
|
+
};
|
|
163
|
+
const result = await customFn.fn(data);
|
|
164
|
+
const shouldContinue = !result || !!customFn.executeMainFn;
|
|
165
|
+
return {
|
|
166
|
+
result,
|
|
167
|
+
shouldContinue
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
function processUpdateManyResult(result) {
|
|
171
|
+
if (Array.isArray(result)) return result;
|
|
172
|
+
if ('number' == typeof result && result > 0) return [];
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
async function updateManyWithHooks(adapter, ctx, props) {
|
|
176
|
+
const { data, where, model, customFn, context } = props;
|
|
177
|
+
const hooks = ctx.hooks || [];
|
|
178
|
+
const transformedData = await processHooks(data, model, 'update', 'before', hooks, context);
|
|
179
|
+
if (null === transformedData) return null;
|
|
180
|
+
const { result: customResult, shouldContinue } = await executeCustomFunction(transformedData, customFn);
|
|
181
|
+
if (customResult && !shouldContinue) return customResult;
|
|
182
|
+
let updated = customResult;
|
|
183
|
+
if (!updated) {
|
|
184
|
+
const adapterResult = await adapter.updateMany({
|
|
185
|
+
model: model,
|
|
186
|
+
update: transformedData,
|
|
187
|
+
where
|
|
188
|
+
});
|
|
189
|
+
updated = processUpdateManyResult(adapterResult);
|
|
190
|
+
}
|
|
191
|
+
if (updated && updated.length > 0) await processAfterHooksForMany(updated, model, hooks, context);
|
|
192
|
+
return updated;
|
|
193
|
+
}
|
|
194
|
+
function getWithHooks(adapter, ctx) {
|
|
195
|
+
return {
|
|
196
|
+
createWithHooks: ({ data, model, customFn, context })=>create_hooks_createWithHooks(adapter, ctx, {
|
|
197
|
+
data,
|
|
198
|
+
model,
|
|
199
|
+
customFn,
|
|
200
|
+
context
|
|
201
|
+
}),
|
|
202
|
+
updateWithHooks: (props)=>update_hooks_updateWithHooks(adapter, ctx, props),
|
|
203
|
+
updateManyWithHooks: (props)=>updateManyWithHooks(adapter, ctx, props)
|
|
204
|
+
};
|
|
205
|
+
}
|
|
99
206
|
const error_codes_ERROR_CODES = Object.freeze({
|
|
100
207
|
NOT_FOUND: 'Resource not found',
|
|
101
208
|
BAD_REQUEST: 'Bad request',
|
|
@@ -285,9 +392,9 @@ const auditLogSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
|
285
392
|
subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
286
393
|
ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
287
394
|
userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
288
|
-
changes: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
289
|
-
metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
290
|
-
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
395
|
+
changes: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
396
|
+
metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
397
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
291
398
|
});
|
|
292
399
|
function getAuditLogTable(options, auditLogFields) {
|
|
293
400
|
const auditLogConfig = options.tables?.auditLog;
|
|
@@ -386,6 +493,128 @@ function getAuditLogTable(options, auditLogFields) {
|
|
|
386
493
|
order: 5
|
|
387
494
|
};
|
|
388
495
|
}
|
|
496
|
+
const consentSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
497
|
+
id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
498
|
+
subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
499
|
+
domainId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
500
|
+
purposeIds: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()),
|
|
501
|
+
metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).nullable().optional(),
|
|
502
|
+
policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
503
|
+
ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
504
|
+
userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
505
|
+
status: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
|
|
506
|
+
'active',
|
|
507
|
+
'withdrawn',
|
|
508
|
+
'expired'
|
|
509
|
+
]).prefault('active'),
|
|
510
|
+
withdrawalReason: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
511
|
+
givenAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
512
|
+
validUntil: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
|
|
513
|
+
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true)
|
|
514
|
+
});
|
|
515
|
+
function getConsentTable(options, consentFields) {
|
|
516
|
+
const consentConfig = options.tables?.consent;
|
|
517
|
+
const subjectConfig = options.tables?.subject;
|
|
518
|
+
const domainConfig = options.tables?.domain;
|
|
519
|
+
const policyConfig = options.tables?.consentPolicy;
|
|
520
|
+
return {
|
|
521
|
+
entityName: consentConfig?.entityName || 'consent',
|
|
522
|
+
entityPrefix: consentConfig?.entityPrefix || 'cns',
|
|
523
|
+
schema: consentSchema,
|
|
524
|
+
fields: {
|
|
525
|
+
subjectId: {
|
|
526
|
+
type: 'string',
|
|
527
|
+
required: true,
|
|
528
|
+
fieldName: consentConfig?.fields?.subjectId || 'subjectId',
|
|
529
|
+
references: {
|
|
530
|
+
model: subjectConfig?.entityName || 'subject',
|
|
531
|
+
field: 'id'
|
|
532
|
+
}
|
|
533
|
+
},
|
|
534
|
+
domainId: {
|
|
535
|
+
type: 'string',
|
|
536
|
+
required: true,
|
|
537
|
+
fieldName: consentConfig?.fields?.domainId || 'domainId',
|
|
538
|
+
references: {
|
|
539
|
+
model: domainConfig?.entityName || 'domain',
|
|
540
|
+
field: 'id'
|
|
541
|
+
}
|
|
542
|
+
},
|
|
543
|
+
purposeIds: {
|
|
544
|
+
type: 'json',
|
|
545
|
+
required: false,
|
|
546
|
+
fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
|
|
547
|
+
},
|
|
548
|
+
metadata: {
|
|
549
|
+
type: 'json',
|
|
550
|
+
required: false,
|
|
551
|
+
fieldName: consentConfig?.fields?.metadata || 'metadata'
|
|
552
|
+
},
|
|
553
|
+
policyId: {
|
|
554
|
+
type: 'string',
|
|
555
|
+
required: false,
|
|
556
|
+
fieldName: consentConfig?.fields?.policyId || 'policyId',
|
|
557
|
+
references: {
|
|
558
|
+
model: policyConfig?.entityName || 'consentPolicy',
|
|
559
|
+
field: 'id'
|
|
560
|
+
}
|
|
561
|
+
},
|
|
562
|
+
ipAddress: {
|
|
563
|
+
type: 'string',
|
|
564
|
+
required: false,
|
|
565
|
+
fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
|
|
566
|
+
},
|
|
567
|
+
userAgent: {
|
|
568
|
+
type: 'string',
|
|
569
|
+
required: false,
|
|
570
|
+
fieldName: consentConfig?.fields?.userAgent || 'userAgent'
|
|
571
|
+
},
|
|
572
|
+
status: {
|
|
573
|
+
type: 'string',
|
|
574
|
+
defaultValue: ()=>'active',
|
|
575
|
+
required: true,
|
|
576
|
+
fieldName: consentConfig?.fields?.status || 'status'
|
|
577
|
+
},
|
|
578
|
+
withdrawalReason: {
|
|
579
|
+
type: 'string',
|
|
580
|
+
required: false,
|
|
581
|
+
fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
|
|
582
|
+
},
|
|
583
|
+
givenAt: {
|
|
584
|
+
type: 'date',
|
|
585
|
+
defaultValue: ()=>new Date(),
|
|
586
|
+
required: true,
|
|
587
|
+
fieldName: consentConfig?.fields?.givenAt || 'givenAt'
|
|
588
|
+
},
|
|
589
|
+
validUntil: {
|
|
590
|
+
type: 'date',
|
|
591
|
+
required: false,
|
|
592
|
+
fieldName: consentConfig?.fields?.validUntil || 'validUntil',
|
|
593
|
+
transform: {
|
|
594
|
+
input: (val, data)=>{
|
|
595
|
+
if (val) return val;
|
|
596
|
+
const expiresIn = consentConfig?.expiresIn || 31536000;
|
|
597
|
+
const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
|
|
598
|
+
if (expiresIn > 0) {
|
|
599
|
+
const validUntil = new Date(givenAt);
|
|
600
|
+
validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
|
|
601
|
+
return validUntil;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
},
|
|
606
|
+
isActive: {
|
|
607
|
+
type: 'boolean',
|
|
608
|
+
defaultValue: true,
|
|
609
|
+
required: true,
|
|
610
|
+
fieldName: consentConfig?.fields?.isActive || 'isActive'
|
|
611
|
+
},
|
|
612
|
+
...consentFields || {},
|
|
613
|
+
...consentConfig?.additionalFields || {}
|
|
614
|
+
},
|
|
615
|
+
order: 3
|
|
616
|
+
};
|
|
617
|
+
}
|
|
389
618
|
const PolicyTypeSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
|
|
390
619
|
'cookie_banner',
|
|
391
620
|
'privacy_policy',
|
|
@@ -404,9 +633,9 @@ const consentPolicySchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
|
404
633
|
expirationDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
|
|
405
634
|
content: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
406
635
|
contentHash: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
407
|
-
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
408
|
-
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
409
|
-
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
636
|
+
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
637
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
638
|
+
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
410
639
|
});
|
|
411
640
|
function getConsentPolicyTable(options, policyFields) {
|
|
412
641
|
const consentPolicyConfig = options.tables?.consentPolicy;
|
|
@@ -473,12 +702,12 @@ const purposeSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
|
473
702
|
code: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
474
703
|
name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
475
704
|
description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
476
|
-
isEssential: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
705
|
+
isEssential: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
|
|
477
706
|
dataCategory: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullish(),
|
|
478
707
|
legalBasis: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullish(),
|
|
479
|
-
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
480
|
-
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
481
|
-
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
708
|
+
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
709
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
710
|
+
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
482
711
|
});
|
|
483
712
|
function getPurposeTable(options, purposeFields) {
|
|
484
713
|
const purposeConfig = options.tables?.consentPurpose;
|
|
@@ -547,9 +776,9 @@ const consentRecordSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
|
547
776
|
subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
548
777
|
consentId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
549
778
|
actionType: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
550
|
-
details: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
551
|
-
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
552
|
-
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
779
|
+
details: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
780
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
781
|
+
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
553
782
|
});
|
|
554
783
|
function getConsentRecordTable(options, recordFields) {
|
|
555
784
|
const recordConfig = options.tables?.record;
|
|
@@ -600,137 +829,15 @@ function getConsentRecordTable(options, recordFields) {
|
|
|
600
829
|
order: 4
|
|
601
830
|
};
|
|
602
831
|
}
|
|
603
|
-
const
|
|
832
|
+
const domainSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
604
833
|
id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
status: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
|
|
613
|
-
'active',
|
|
614
|
-
'withdrawn',
|
|
615
|
-
'expired'
|
|
616
|
-
]).default('active'),
|
|
617
|
-
withdrawalReason: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
618
|
-
givenAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
|
|
619
|
-
validUntil: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
|
|
620
|
-
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true)
|
|
621
|
-
});
|
|
622
|
-
function getConsentTable(options, consentFields) {
|
|
623
|
-
const consentConfig = options.tables?.consent;
|
|
624
|
-
const subjectConfig = options.tables?.subject;
|
|
625
|
-
const domainConfig = options.tables?.domain;
|
|
626
|
-
const policyConfig = options.tables?.consentPolicy;
|
|
627
|
-
return {
|
|
628
|
-
entityName: consentConfig?.entityName || 'consent',
|
|
629
|
-
entityPrefix: consentConfig?.entityPrefix || 'cns',
|
|
630
|
-
schema: consentSchema,
|
|
631
|
-
fields: {
|
|
632
|
-
subjectId: {
|
|
633
|
-
type: 'string',
|
|
634
|
-
required: true,
|
|
635
|
-
fieldName: consentConfig?.fields?.subjectId || 'subjectId',
|
|
636
|
-
references: {
|
|
637
|
-
model: subjectConfig?.entityName || 'subject',
|
|
638
|
-
field: 'id'
|
|
639
|
-
}
|
|
640
|
-
},
|
|
641
|
-
domainId: {
|
|
642
|
-
type: 'string',
|
|
643
|
-
required: true,
|
|
644
|
-
fieldName: consentConfig?.fields?.domainId || 'domainId',
|
|
645
|
-
references: {
|
|
646
|
-
model: domainConfig?.entityName || 'domain',
|
|
647
|
-
field: 'id'
|
|
648
|
-
}
|
|
649
|
-
},
|
|
650
|
-
purposeIds: {
|
|
651
|
-
type: 'json',
|
|
652
|
-
required: false,
|
|
653
|
-
fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
|
|
654
|
-
},
|
|
655
|
-
metadata: {
|
|
656
|
-
type: 'json',
|
|
657
|
-
required: false,
|
|
658
|
-
fieldName: consentConfig?.fields?.metadata || 'metadata'
|
|
659
|
-
},
|
|
660
|
-
policyId: {
|
|
661
|
-
type: 'string',
|
|
662
|
-
required: false,
|
|
663
|
-
fieldName: consentConfig?.fields?.policyId || 'policyId',
|
|
664
|
-
references: {
|
|
665
|
-
model: policyConfig?.entityName || 'consentPolicy',
|
|
666
|
-
field: 'id'
|
|
667
|
-
}
|
|
668
|
-
},
|
|
669
|
-
ipAddress: {
|
|
670
|
-
type: 'string',
|
|
671
|
-
required: false,
|
|
672
|
-
fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
|
|
673
|
-
},
|
|
674
|
-
userAgent: {
|
|
675
|
-
type: 'string',
|
|
676
|
-
required: false,
|
|
677
|
-
fieldName: consentConfig?.fields?.userAgent || 'userAgent'
|
|
678
|
-
},
|
|
679
|
-
status: {
|
|
680
|
-
type: 'string',
|
|
681
|
-
defaultValue: ()=>'active',
|
|
682
|
-
required: true,
|
|
683
|
-
fieldName: consentConfig?.fields?.status || 'status'
|
|
684
|
-
},
|
|
685
|
-
withdrawalReason: {
|
|
686
|
-
type: 'string',
|
|
687
|
-
required: false,
|
|
688
|
-
fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
|
|
689
|
-
},
|
|
690
|
-
givenAt: {
|
|
691
|
-
type: 'date',
|
|
692
|
-
defaultValue: ()=>new Date(),
|
|
693
|
-
required: true,
|
|
694
|
-
fieldName: consentConfig?.fields?.givenAt || 'givenAt'
|
|
695
|
-
},
|
|
696
|
-
validUntil: {
|
|
697
|
-
type: 'date',
|
|
698
|
-
required: false,
|
|
699
|
-
fieldName: consentConfig?.fields?.validUntil || 'validUntil',
|
|
700
|
-
transform: {
|
|
701
|
-
input: (val, data)=>{
|
|
702
|
-
if (val) return val;
|
|
703
|
-
const expiresIn = consentConfig?.expiresIn || 31536000;
|
|
704
|
-
const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
|
|
705
|
-
if (expiresIn > 0) {
|
|
706
|
-
const validUntil = new Date(givenAt);
|
|
707
|
-
validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
|
|
708
|
-
return validUntil;
|
|
709
|
-
}
|
|
710
|
-
}
|
|
711
|
-
}
|
|
712
|
-
},
|
|
713
|
-
isActive: {
|
|
714
|
-
type: 'boolean',
|
|
715
|
-
defaultValue: true,
|
|
716
|
-
required: true,
|
|
717
|
-
fieldName: consentConfig?.fields?.isActive || 'isActive'
|
|
718
|
-
},
|
|
719
|
-
...consentFields || {},
|
|
720
|
-
...consentConfig?.additionalFields || {}
|
|
721
|
-
},
|
|
722
|
-
order: 3
|
|
723
|
-
};
|
|
724
|
-
}
|
|
725
|
-
const domainSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
726
|
-
id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
727
|
-
name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().min(1),
|
|
728
|
-
description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
729
|
-
allowedOrigins: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional().default([]),
|
|
730
|
-
isVerified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
|
|
731
|
-
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
|
|
732
|
-
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
|
|
733
|
-
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date())
|
|
834
|
+
name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().min(1),
|
|
835
|
+
description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
836
|
+
allowedOrigins: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional().prefault([]),
|
|
837
|
+
isVerified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
838
|
+
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
839
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
840
|
+
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
734
841
|
});
|
|
735
842
|
function getDomainTable(options, domainFields) {
|
|
736
843
|
const domainConfig = options.tables?.domain;
|
|
@@ -787,12 +894,12 @@ function getDomainTable(options, domainFields) {
|
|
|
787
894
|
}
|
|
788
895
|
const subjectSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
789
896
|
id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
790
|
-
isIdentified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
897
|
+
isIdentified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
|
|
791
898
|
externalId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
792
899
|
identityProvider: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
793
900
|
lastIpAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
794
|
-
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
795
|
-
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
901
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
902
|
+
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
796
903
|
});
|
|
797
904
|
function getSubjectTable(options, subjectFields) {
|
|
798
905
|
const subjectConfig = options.tables?.subject;
|
|
@@ -889,157 +996,6 @@ function validateEntityOutput(tableName, data, options) {
|
|
|
889
996
|
throw error;
|
|
890
997
|
}
|
|
891
998
|
}
|
|
892
|
-
function subjectRegistry({ adapter, ...ctx }) {
|
|
893
|
-
const { createWithHooks } = getWithHooks(adapter, ctx);
|
|
894
|
-
return {
|
|
895
|
-
createSubject: async (subject, context)=>{
|
|
896
|
-
const createdSubject = await createWithHooks({
|
|
897
|
-
data: {
|
|
898
|
-
createdAt: new Date(),
|
|
899
|
-
updatedAt: new Date(),
|
|
900
|
-
...subject
|
|
901
|
-
},
|
|
902
|
-
model: 'subject',
|
|
903
|
-
customFn: void 0,
|
|
904
|
-
context
|
|
905
|
-
});
|
|
906
|
-
return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
|
|
907
|
-
},
|
|
908
|
-
findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
|
|
909
|
-
if (subjectId && externalSubjectId) {
|
|
910
|
-
const [subjectById, subjectByExternalId] = await Promise.all([
|
|
911
|
-
this.findSubjectById(subjectId),
|
|
912
|
-
this.findSubjectByExternalId(externalSubjectId)
|
|
913
|
-
]);
|
|
914
|
-
if (!subjectById || !subjectByExternalId) {
|
|
915
|
-
ctx.logger?.error('Subject validation failed: One or both subjects not found', {
|
|
916
|
-
providedSubjectId: subjectId,
|
|
917
|
-
providedExternalId: externalSubjectId,
|
|
918
|
-
subjectByIdFound: !!subjectById,
|
|
919
|
-
subjectByExternalIdFound: !!subjectByExternalId
|
|
920
|
-
});
|
|
921
|
-
throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
|
|
922
|
-
code: error_codes_ERROR_CODES.NOT_FOUND,
|
|
923
|
-
status: 404,
|
|
924
|
-
meta: {
|
|
925
|
-
providedSubjectId: subjectId,
|
|
926
|
-
providedExternalId: externalSubjectId
|
|
927
|
-
}
|
|
928
|
-
});
|
|
929
|
-
}
|
|
930
|
-
if (subjectById.id !== subjectByExternalId.id) {
|
|
931
|
-
ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
|
|
932
|
-
providedSubjectId: subjectId,
|
|
933
|
-
providedExternalId: externalSubjectId,
|
|
934
|
-
subjectByIdId: subjectById.id,
|
|
935
|
-
subjectByExternalIdId: subjectByExternalId.id
|
|
936
|
-
});
|
|
937
|
-
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.', {
|
|
938
|
-
code: error_codes_ERROR_CODES.CONFLICT,
|
|
939
|
-
status: 409,
|
|
940
|
-
meta: {
|
|
941
|
-
providedSubjectId: subjectId,
|
|
942
|
-
providedExternalId: externalSubjectId,
|
|
943
|
-
subjectByIdId: subjectById.id,
|
|
944
|
-
subjectByExternalIdId: subjectByExternalId.id
|
|
945
|
-
}
|
|
946
|
-
});
|
|
947
|
-
}
|
|
948
|
-
return subjectById;
|
|
949
|
-
}
|
|
950
|
-
if (subjectId) {
|
|
951
|
-
const subject = await this.findSubjectById(subjectId);
|
|
952
|
-
if (subject) return subject;
|
|
953
|
-
throw new error_class_DoubleTieError('Subject not found by subjectId', {
|
|
954
|
-
code: error_codes_ERROR_CODES.NOT_FOUND,
|
|
955
|
-
status: 404
|
|
956
|
-
});
|
|
957
|
-
}
|
|
958
|
-
if (externalSubjectId) try {
|
|
959
|
-
const subject = await this.findSubjectByExternalId(externalSubjectId);
|
|
960
|
-
if (subject) {
|
|
961
|
-
ctx.logger?.debug('Found existing subject by external ID', {
|
|
962
|
-
externalSubjectId
|
|
963
|
-
});
|
|
964
|
-
return subject;
|
|
965
|
-
}
|
|
966
|
-
ctx.logger?.info('Creating new subject with external ID', {
|
|
967
|
-
externalSubjectId
|
|
968
|
-
});
|
|
969
|
-
return await this.createSubject({
|
|
970
|
-
externalId: externalSubjectId,
|
|
971
|
-
identityProvider: 'external',
|
|
972
|
-
lastIpAddress: ipAddress,
|
|
973
|
-
isIdentified: true
|
|
974
|
-
}, context);
|
|
975
|
-
} catch (error) {
|
|
976
|
-
if (error instanceof Error && error.message.includes('unique constraint')) {
|
|
977
|
-
ctx.logger?.info('Handling duplicate key violation for external ID', {
|
|
978
|
-
externalSubjectId
|
|
979
|
-
});
|
|
980
|
-
const subject = await this.findSubjectByExternalId(externalSubjectId);
|
|
981
|
-
if (subject) return subject;
|
|
982
|
-
}
|
|
983
|
-
ctx.logger?.error('Failed to create or find subject with external ID', {
|
|
984
|
-
externalSubjectId,
|
|
985
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
986
|
-
});
|
|
987
|
-
throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
|
|
988
|
-
code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
989
|
-
status: 500,
|
|
990
|
-
meta: {
|
|
991
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
992
|
-
}
|
|
993
|
-
});
|
|
994
|
-
}
|
|
995
|
-
try {
|
|
996
|
-
ctx.logger?.info('Creating new anonymous subject');
|
|
997
|
-
return await this.createSubject({
|
|
998
|
-
externalId: null,
|
|
999
|
-
identityProvider: 'anonymous',
|
|
1000
|
-
lastIpAddress: ipAddress,
|
|
1001
|
-
isIdentified: false
|
|
1002
|
-
}, context);
|
|
1003
|
-
} catch (error) {
|
|
1004
|
-
ctx.logger?.error('Failed to create anonymous subject', {
|
|
1005
|
-
ipAddress,
|
|
1006
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1007
|
-
});
|
|
1008
|
-
throw new error_class_DoubleTieError('Failed to create anonymous subject', {
|
|
1009
|
-
code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
1010
|
-
status: 500,
|
|
1011
|
-
meta: {
|
|
1012
|
-
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1013
|
-
}
|
|
1014
|
-
});
|
|
1015
|
-
}
|
|
1016
|
-
},
|
|
1017
|
-
findSubjectById: async (subjectId)=>{
|
|
1018
|
-
const subject = await adapter.findOne({
|
|
1019
|
-
model: 'subject',
|
|
1020
|
-
where: [
|
|
1021
|
-
{
|
|
1022
|
-
field: 'id',
|
|
1023
|
-
value: subjectId
|
|
1024
|
-
}
|
|
1025
|
-
]
|
|
1026
|
-
});
|
|
1027
|
-
return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
|
|
1028
|
-
},
|
|
1029
|
-
findSubjectByExternalId: async (externalId)=>{
|
|
1030
|
-
const subject = await adapter.findOne({
|
|
1031
|
-
model: 'subject',
|
|
1032
|
-
where: [
|
|
1033
|
-
{
|
|
1034
|
-
field: 'externalId',
|
|
1035
|
-
value: externalId
|
|
1036
|
-
}
|
|
1037
|
-
]
|
|
1038
|
-
});
|
|
1039
|
-
return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
|
|
1040
|
-
}
|
|
1041
|
-
};
|
|
1042
|
-
}
|
|
1043
999
|
function consentRegistry({ adapter, ...ctx }) {
|
|
1044
1000
|
const { createWithHooks, updateWithHooks } = getWithHooks(adapter, ctx);
|
|
1045
1001
|
const registry = {
|
|
@@ -1315,123 +1271,155 @@ function domainRegistry({ adapter, ...ctx }) {
|
|
|
1315
1271
|
};
|
|
1316
1272
|
return registry;
|
|
1317
1273
|
}
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
...data
|
|
1321
|
-
};
|
|
1322
|
-
for (const hookSet of hooks){
|
|
1323
|
-
const modelHooks = hookSet[model];
|
|
1324
|
-
if (!modelHooks) continue;
|
|
1325
|
-
const operationHooks = modelHooks[operation];
|
|
1326
|
-
if (!operationHooks) continue;
|
|
1327
|
-
const hookFn = operationHooks[phase];
|
|
1328
|
-
if (hookFn) if ('before' === phase) {
|
|
1329
|
-
const result = await hookFn(currentData, context);
|
|
1330
|
-
if (result && 'object' == typeof result && 'kind' in result) switch(result.kind){
|
|
1331
|
-
case 'abort':
|
|
1332
|
-
return null;
|
|
1333
|
-
case 'transform':
|
|
1334
|
-
{
|
|
1335
|
-
const transformData = result.data;
|
|
1336
|
-
currentData = {
|
|
1337
|
-
...currentData,
|
|
1338
|
-
...transformData
|
|
1339
|
-
};
|
|
1340
|
-
break;
|
|
1341
|
-
}
|
|
1342
|
-
default:
|
|
1343
|
-
break;
|
|
1344
|
-
}
|
|
1345
|
-
} else await hookFn(currentData, context);
|
|
1346
|
-
}
|
|
1347
|
-
return currentData;
|
|
1348
|
-
}
|
|
1349
|
-
async function processAfterHooksForMany(records, model, hooks, context) {
|
|
1350
|
-
if (!records.length) return;
|
|
1351
|
-
for (const record of records)await processHooks(record, model, 'update', 'after', hooks, context);
|
|
1352
|
-
}
|
|
1353
|
-
async function create_hooks_createWithHooks(adapter, ctx, props) {
|
|
1354
|
-
const { data, model, customFn, context } = props;
|
|
1355
|
-
const hooks = ctx.hooks || [];
|
|
1356
|
-
const transformedData = await processHooks(data, model, 'create', 'before', hooks, context);
|
|
1357
|
-
if (null === transformedData) return null;
|
|
1358
|
-
let created = null;
|
|
1359
|
-
if (customFn) {
|
|
1360
|
-
created = await customFn.fn(transformedData);
|
|
1361
|
-
if (!customFn.executeMainFn && created) return created;
|
|
1362
|
-
}
|
|
1363
|
-
if (!created) created = await adapter.create({
|
|
1364
|
-
model: model,
|
|
1365
|
-
data: transformedData
|
|
1366
|
-
});
|
|
1367
|
-
if (created) await processHooks(created, model, 'create', 'after', hooks, context);
|
|
1368
|
-
return created;
|
|
1369
|
-
}
|
|
1370
|
-
async function update_hooks_updateWithHooks(adapter, ctx, props) {
|
|
1371
|
-
const { data, where, model, customFn, context } = props;
|
|
1372
|
-
const hooks = ctx.hooks || [];
|
|
1373
|
-
const transformedData = await processHooks(data, model, 'update', 'before', hooks, context);
|
|
1374
|
-
if (null === transformedData) return null;
|
|
1375
|
-
let updated = null;
|
|
1376
|
-
if (customFn) {
|
|
1377
|
-
const result = await customFn.fn(transformedData);
|
|
1378
|
-
updated = result;
|
|
1379
|
-
if (!customFn.executeMainFn && updated) return updated;
|
|
1380
|
-
}
|
|
1381
|
-
if (!updated) updated = await adapter.update({
|
|
1382
|
-
model: model,
|
|
1383
|
-
update: transformedData,
|
|
1384
|
-
where
|
|
1385
|
-
});
|
|
1386
|
-
if (updated) await processHooks(updated, model, 'update', 'after', hooks, context);
|
|
1387
|
-
return updated;
|
|
1388
|
-
}
|
|
1389
|
-
async function executeCustomFunction(data, customFn) {
|
|
1390
|
-
if (!customFn) return {
|
|
1391
|
-
result: null,
|
|
1392
|
-
shouldContinue: true
|
|
1393
|
-
};
|
|
1394
|
-
const result = await customFn.fn(data);
|
|
1395
|
-
const shouldContinue = !result || !!customFn.executeMainFn;
|
|
1396
|
-
return {
|
|
1397
|
-
result,
|
|
1398
|
-
shouldContinue
|
|
1399
|
-
};
|
|
1400
|
-
}
|
|
1401
|
-
function processUpdateManyResult(result) {
|
|
1402
|
-
if (Array.isArray(result)) return result;
|
|
1403
|
-
if ('number' == typeof result && result > 0) return [];
|
|
1404
|
-
return null;
|
|
1405
|
-
}
|
|
1406
|
-
async function updateManyWithHooks(adapter, ctx, props) {
|
|
1407
|
-
const { data, where, model, customFn, context } = props;
|
|
1408
|
-
const hooks = ctx.hooks || [];
|
|
1409
|
-
const transformedData = await processHooks(data, model, 'update', 'before', hooks, context);
|
|
1410
|
-
if (null === transformedData) return null;
|
|
1411
|
-
const { result: customResult, shouldContinue } = await executeCustomFunction(transformedData, customFn);
|
|
1412
|
-
if (customResult && !shouldContinue) return customResult;
|
|
1413
|
-
let updated = customResult;
|
|
1414
|
-
if (!updated) {
|
|
1415
|
-
const adapterResult = await adapter.updateMany({
|
|
1416
|
-
model: model,
|
|
1417
|
-
update: transformedData,
|
|
1418
|
-
where
|
|
1419
|
-
});
|
|
1420
|
-
updated = processUpdateManyResult(adapterResult);
|
|
1421
|
-
}
|
|
1422
|
-
if (updated && updated.length > 0) await processAfterHooksForMany(updated, model, hooks, context);
|
|
1423
|
-
return updated;
|
|
1424
|
-
}
|
|
1425
|
-
function getWithHooks(adapter, ctx) {
|
|
1274
|
+
function subjectRegistry({ adapter, ...ctx }) {
|
|
1275
|
+
const { createWithHooks } = getWithHooks(adapter, ctx);
|
|
1426
1276
|
return {
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1277
|
+
createSubject: async (subject, context)=>{
|
|
1278
|
+
const createdSubject = await createWithHooks({
|
|
1279
|
+
data: {
|
|
1280
|
+
createdAt: new Date(),
|
|
1281
|
+
updatedAt: new Date(),
|
|
1282
|
+
...subject
|
|
1283
|
+
},
|
|
1284
|
+
model: 'subject',
|
|
1285
|
+
customFn: void 0,
|
|
1431
1286
|
context
|
|
1432
|
-
})
|
|
1433
|
-
|
|
1434
|
-
|
|
1287
|
+
});
|
|
1288
|
+
return createdSubject ? validateEntityOutput('subject', createdSubject, ctx.options) : null;
|
|
1289
|
+
},
|
|
1290
|
+
findOrCreateSubject: async function({ subjectId, externalSubjectId, ipAddress = 'unknown', context }) {
|
|
1291
|
+
if (subjectId && externalSubjectId) {
|
|
1292
|
+
const [subjectById, subjectByExternalId] = await Promise.all([
|
|
1293
|
+
this.findSubjectById(subjectId),
|
|
1294
|
+
this.findSubjectByExternalId(externalSubjectId)
|
|
1295
|
+
]);
|
|
1296
|
+
if (!subjectById || !subjectByExternalId) {
|
|
1297
|
+
ctx.logger?.error('Subject validation failed: One or both subjects not found', {
|
|
1298
|
+
providedSubjectId: subjectId,
|
|
1299
|
+
providedExternalId: externalSubjectId,
|
|
1300
|
+
subjectByIdFound: !!subjectById,
|
|
1301
|
+
subjectByExternalIdFound: !!subjectByExternalId
|
|
1302
|
+
});
|
|
1303
|
+
throw new error_class_DoubleTieError('The specified subject could not be found. Please verify the subject identifiers and try again.', {
|
|
1304
|
+
code: error_codes_ERROR_CODES.NOT_FOUND,
|
|
1305
|
+
status: 404,
|
|
1306
|
+
meta: {
|
|
1307
|
+
providedSubjectId: subjectId,
|
|
1308
|
+
providedExternalId: externalSubjectId
|
|
1309
|
+
}
|
|
1310
|
+
});
|
|
1311
|
+
}
|
|
1312
|
+
if (subjectById.id !== subjectByExternalId.id) {
|
|
1313
|
+
ctx.logger?.warn('Subject validation failed: IDs do not match the same subject', {
|
|
1314
|
+
providedSubjectId: subjectId,
|
|
1315
|
+
providedExternalId: externalSubjectId,
|
|
1316
|
+
subjectByIdId: subjectById.id,
|
|
1317
|
+
subjectByExternalIdId: subjectByExternalId.id
|
|
1318
|
+
});
|
|
1319
|
+
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.', {
|
|
1320
|
+
code: error_codes_ERROR_CODES.CONFLICT,
|
|
1321
|
+
status: 409,
|
|
1322
|
+
meta: {
|
|
1323
|
+
providedSubjectId: subjectId,
|
|
1324
|
+
providedExternalId: externalSubjectId,
|
|
1325
|
+
subjectByIdId: subjectById.id,
|
|
1326
|
+
subjectByExternalIdId: subjectByExternalId.id
|
|
1327
|
+
}
|
|
1328
|
+
});
|
|
1329
|
+
}
|
|
1330
|
+
return subjectById;
|
|
1331
|
+
}
|
|
1332
|
+
if (subjectId) {
|
|
1333
|
+
const subject = await this.findSubjectById(subjectId);
|
|
1334
|
+
if (subject) return subject;
|
|
1335
|
+
throw new error_class_DoubleTieError('Subject not found by subjectId', {
|
|
1336
|
+
code: error_codes_ERROR_CODES.NOT_FOUND,
|
|
1337
|
+
status: 404
|
|
1338
|
+
});
|
|
1339
|
+
}
|
|
1340
|
+
if (externalSubjectId) try {
|
|
1341
|
+
const subject = await this.findSubjectByExternalId(externalSubjectId);
|
|
1342
|
+
if (subject) {
|
|
1343
|
+
ctx.logger?.debug('Found existing subject by external ID', {
|
|
1344
|
+
externalSubjectId
|
|
1345
|
+
});
|
|
1346
|
+
return subject;
|
|
1347
|
+
}
|
|
1348
|
+
ctx.logger?.info('Creating new subject with external ID', {
|
|
1349
|
+
externalSubjectId
|
|
1350
|
+
});
|
|
1351
|
+
return await this.createSubject({
|
|
1352
|
+
externalId: externalSubjectId,
|
|
1353
|
+
identityProvider: 'external',
|
|
1354
|
+
lastIpAddress: ipAddress,
|
|
1355
|
+
isIdentified: true
|
|
1356
|
+
}, context);
|
|
1357
|
+
} catch (error) {
|
|
1358
|
+
if (error instanceof Error && error.message.includes('unique constraint')) {
|
|
1359
|
+
ctx.logger?.info('Handling duplicate key violation for external ID', {
|
|
1360
|
+
externalSubjectId
|
|
1361
|
+
});
|
|
1362
|
+
const subject = await this.findSubjectByExternalId(externalSubjectId);
|
|
1363
|
+
if (subject) return subject;
|
|
1364
|
+
}
|
|
1365
|
+
ctx.logger?.error('Failed to create or find subject with external ID', {
|
|
1366
|
+
externalSubjectId,
|
|
1367
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1368
|
+
});
|
|
1369
|
+
throw new error_class_DoubleTieError('Failed to create or find subject with external ID', {
|
|
1370
|
+
code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
1371
|
+
status: 500,
|
|
1372
|
+
meta: {
|
|
1373
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1374
|
+
}
|
|
1375
|
+
});
|
|
1376
|
+
}
|
|
1377
|
+
try {
|
|
1378
|
+
ctx.logger?.info('Creating new anonymous subject');
|
|
1379
|
+
return await this.createSubject({
|
|
1380
|
+
externalId: null,
|
|
1381
|
+
identityProvider: 'anonymous',
|
|
1382
|
+
lastIpAddress: ipAddress,
|
|
1383
|
+
isIdentified: false
|
|
1384
|
+
}, context);
|
|
1385
|
+
} catch (error) {
|
|
1386
|
+
ctx.logger?.error('Failed to create anonymous subject', {
|
|
1387
|
+
ipAddress,
|
|
1388
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1389
|
+
});
|
|
1390
|
+
throw new error_class_DoubleTieError('Failed to create anonymous subject', {
|
|
1391
|
+
code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
1392
|
+
status: 500,
|
|
1393
|
+
meta: {
|
|
1394
|
+
error: error instanceof Error ? error.message : 'Unknown error'
|
|
1395
|
+
}
|
|
1396
|
+
});
|
|
1397
|
+
}
|
|
1398
|
+
},
|
|
1399
|
+
findSubjectById: async (subjectId)=>{
|
|
1400
|
+
const subject = await adapter.findOne({
|
|
1401
|
+
model: 'subject',
|
|
1402
|
+
where: [
|
|
1403
|
+
{
|
|
1404
|
+
field: 'id',
|
|
1405
|
+
value: subjectId
|
|
1406
|
+
}
|
|
1407
|
+
]
|
|
1408
|
+
});
|
|
1409
|
+
return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
|
|
1410
|
+
},
|
|
1411
|
+
findSubjectByExternalId: async (externalId)=>{
|
|
1412
|
+
const subject = await adapter.findOne({
|
|
1413
|
+
model: 'subject',
|
|
1414
|
+
where: [
|
|
1415
|
+
{
|
|
1416
|
+
field: 'externalId',
|
|
1417
|
+
value: externalId
|
|
1418
|
+
}
|
|
1419
|
+
]
|
|
1420
|
+
});
|
|
1421
|
+
return subject ? validateEntityOutput('subject', subject, ctx.options) : null;
|
|
1422
|
+
}
|
|
1435
1423
|
};
|
|
1436
1424
|
}
|
|
1437
1425
|
function auditLogRegistry({ adapter, ...ctx }) {
|