@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
|
@@ -1,128 +1,12 @@
|
|
|
1
|
-
import * as __WEBPACK_EXTERNAL_MODULE_superjson__ from "superjson";
|
|
2
|
-
import * as __WEBPACK_EXTERNAL_MODULE_base_x_aeb88370__ from "base-x";
|
|
3
|
-
import * as __WEBPACK_EXTERNAL_MODULE_zod__ from "zod";
|
|
4
1
|
import "neverthrow";
|
|
5
2
|
import * as __WEBPACK_EXTERNAL_MODULE__orpc_server_0dae8408__ from "@orpc/server";
|
|
6
3
|
import * as __WEBPACK_EXTERNAL_MODULE__opentelemetry_api_87359e78__ from "@opentelemetry/api";
|
|
7
4
|
import * as __WEBPACK_EXTERNAL_MODULE__doubletie_logger_91c58a8f__ from "@doubletie/logger";
|
|
8
|
-
import * as
|
|
5
|
+
import * as __WEBPACK_EXTERNAL_MODULE_base_x_aeb88370__ from "base-x";
|
|
6
|
+
import * as __WEBPACK_EXTERNAL_MODULE_zod__ from "zod";
|
|
9
7
|
import * as __WEBPACK_EXTERNAL_MODULE_kysely__ from "kysely";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
if (null == inputValue && field.defaultValue) {
|
|
13
|
-
if ('function' == typeof field.defaultValue) return field.defaultValue();
|
|
14
|
-
return field.defaultValue;
|
|
15
|
-
}
|
|
16
|
-
return inputValue;
|
|
17
|
-
}
|
|
18
|
-
const COMMON_TIMEZONES = {
|
|
19
|
-
UTC: 'UTC',
|
|
20
|
-
GMT: 'GMT',
|
|
21
|
-
EASTERN: 'America/New_York',
|
|
22
|
-
CENTRAL: 'America/Chicago',
|
|
23
|
-
MOUNTAIN: 'America/Denver',
|
|
24
|
-
PACIFIC: 'America/Los_Angeles',
|
|
25
|
-
LONDON: 'Europe/London',
|
|
26
|
-
PARIS: 'Europe/Paris',
|
|
27
|
-
BERLIN: 'Europe/Berlin',
|
|
28
|
-
TOKYO: 'Asia/Tokyo',
|
|
29
|
-
SHANGHAI: 'Asia/Shanghai',
|
|
30
|
-
SINGAPORE: 'Asia/Singapore',
|
|
31
|
-
SYDNEY: 'Australia/Sydney',
|
|
32
|
-
SAO_PAULO: 'America/Sao_Paulo'
|
|
33
|
-
};
|
|
34
|
-
const b58 = (0, __WEBPACK_EXTERNAL_MODULE_base_x_aeb88370__["default"])('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
|
|
35
|
-
function generateId(prefix) {
|
|
36
|
-
const buf = crypto.getRandomValues(new Uint8Array(20));
|
|
37
|
-
const EPOCH_TIMESTAMP = 1700000000000;
|
|
38
|
-
const t = Date.now() - EPOCH_TIMESTAMP;
|
|
39
|
-
const high = Math.floor(t / 0x100000000);
|
|
40
|
-
const low = t >>> 0;
|
|
41
|
-
buf[0] = high >>> 24 & 255;
|
|
42
|
-
buf[1] = high >>> 16 & 255;
|
|
43
|
-
buf[2] = high >>> 8 & 255;
|
|
44
|
-
buf[3] = 255 & high;
|
|
45
|
-
buf[4] = low >>> 24 & 255;
|
|
46
|
-
buf[5] = low >>> 16 & 255;
|
|
47
|
-
buf[6] = low >>> 8 & 255;
|
|
48
|
-
buf[7] = 255 & low;
|
|
49
|
-
return `${prefix}_${b58.encode(buf)}`;
|
|
50
|
-
}
|
|
51
|
-
const fieldConfigSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
52
|
-
required: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
|
|
53
|
-
returned: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
|
|
54
|
-
input: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
|
|
55
|
-
defaultValue: __WEBPACK_EXTERNAL_MODULE_zod__.z.union([
|
|
56
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
|
|
57
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
|
|
58
|
-
]).optional(),
|
|
59
|
-
transform: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
60
|
-
input: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
|
|
61
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
|
|
62
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.promise(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
|
|
63
|
-
])).optional(),
|
|
64
|
-
output: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
|
|
65
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.any(),
|
|
66
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.promise(__WEBPACK_EXTERNAL_MODULE_zod__.z.any())
|
|
67
|
-
])).optional()
|
|
68
|
-
}).optional(),
|
|
69
|
-
validator: __WEBPACK_EXTERNAL_MODULE_zod__.z["function"]().args(__WEBPACK_EXTERNAL_MODULE_zod__.z.any()).returns(__WEBPACK_EXTERNAL_MODULE_zod__.z.union([
|
|
70
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
71
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z["null"]()
|
|
72
|
-
])).optional(),
|
|
73
|
-
unique: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
|
|
74
|
-
indexed: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
|
|
75
|
-
sortable: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
|
|
76
|
-
fieldName: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
77
|
-
bigint: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false)
|
|
78
|
-
});
|
|
79
|
-
const stringFieldSchema = fieldConfigSchema.extend({
|
|
80
|
-
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string'),
|
|
81
|
-
minLength: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional(),
|
|
82
|
-
maxLength: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional(),
|
|
83
|
-
pattern: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional()
|
|
84
|
-
});
|
|
85
|
-
const numberFieldSchema = fieldConfigSchema.extend({
|
|
86
|
-
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('number'),
|
|
87
|
-
min: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional(),
|
|
88
|
-
max: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional()
|
|
89
|
-
});
|
|
90
|
-
const booleanFieldSchema = fieldConfigSchema.extend({
|
|
91
|
-
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('boolean')
|
|
92
|
-
});
|
|
93
|
-
const dateFieldSchema = fieldConfigSchema.extend({
|
|
94
|
-
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('date'),
|
|
95
|
-
minDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
|
|
96
|
-
maxDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
|
|
97
|
-
dateOnly: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false),
|
|
98
|
-
format: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional()
|
|
99
|
-
});
|
|
100
|
-
const timezoneFieldSchema = fieldConfigSchema.extend({
|
|
101
|
-
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('timezone'),
|
|
102
|
-
validateTimezone: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true),
|
|
103
|
-
suggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional(),
|
|
104
|
-
restrictToSuggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(false)
|
|
105
|
-
});
|
|
106
|
-
const jsonFieldSchema = fieldConfigSchema.extend({
|
|
107
|
-
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('json'),
|
|
108
|
-
validateJson: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true)
|
|
109
|
-
});
|
|
110
|
-
const stringArrayFieldSchema = fieldConfigSchema.extend({
|
|
111
|
-
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string[]')
|
|
112
|
-
});
|
|
113
|
-
const numberArrayFieldSchema = fieldConfigSchema.extend({
|
|
114
|
-
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('number[]')
|
|
115
|
-
});
|
|
116
|
-
__WEBPACK_EXTERNAL_MODULE_zod__.z.discriminatedUnion('type', [
|
|
117
|
-
stringFieldSchema,
|
|
118
|
-
numberFieldSchema,
|
|
119
|
-
booleanFieldSchema,
|
|
120
|
-
dateFieldSchema,
|
|
121
|
-
timezoneFieldSchema,
|
|
122
|
-
jsonFieldSchema,
|
|
123
|
-
stringArrayFieldSchema,
|
|
124
|
-
numberArrayFieldSchema
|
|
125
|
-
]);
|
|
8
|
+
import * as __WEBPACK_EXTERNAL_MODULE_superjson__ from "superjson";
|
|
9
|
+
import * as __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__ from "drizzle-orm";
|
|
126
10
|
const error_codes_ERROR_CODES = Object.freeze({
|
|
127
11
|
NOT_FOUND: 'Resource not found',
|
|
128
12
|
BAD_REQUEST: 'Bad request',
|
|
@@ -304,6 +188,111 @@ class error_class_DoubleTieError extends __WEBPACK_EXTERNAL_MODULE__orpc_server_
|
|
|
304
188
|
return formattedMessage;
|
|
305
189
|
}
|
|
306
190
|
}
|
|
191
|
+
let globalLogger;
|
|
192
|
+
function getLogger(options) {
|
|
193
|
+
if (!globalLogger) globalLogger = (0, __WEBPACK_EXTERNAL_MODULE__doubletie_logger_91c58a8f__.createLogger)({
|
|
194
|
+
level: 'info',
|
|
195
|
+
appName: 'c15t',
|
|
196
|
+
...options
|
|
197
|
+
});
|
|
198
|
+
return globalLogger;
|
|
199
|
+
}
|
|
200
|
+
const COMMON_TIMEZONES = {
|
|
201
|
+
UTC: 'UTC',
|
|
202
|
+
GMT: 'GMT',
|
|
203
|
+
EASTERN: 'America/New_York',
|
|
204
|
+
CENTRAL: 'America/Chicago',
|
|
205
|
+
MOUNTAIN: 'America/Denver',
|
|
206
|
+
PACIFIC: 'America/Los_Angeles',
|
|
207
|
+
LONDON: 'Europe/London',
|
|
208
|
+
PARIS: 'Europe/Paris',
|
|
209
|
+
BERLIN: 'Europe/Berlin',
|
|
210
|
+
TOKYO: 'Asia/Tokyo',
|
|
211
|
+
SHANGHAI: 'Asia/Shanghai',
|
|
212
|
+
SINGAPORE: 'Asia/Singapore',
|
|
213
|
+
SYDNEY: 'Australia/Sydney',
|
|
214
|
+
SAO_PAULO: 'America/Sao_Paulo'
|
|
215
|
+
};
|
|
216
|
+
const b58 = (0, __WEBPACK_EXTERNAL_MODULE_base_x_aeb88370__["default"])('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz');
|
|
217
|
+
function generateId(prefix) {
|
|
218
|
+
const buf = crypto.getRandomValues(new Uint8Array(20));
|
|
219
|
+
const EPOCH_TIMESTAMP = 1700000000000;
|
|
220
|
+
const t = Date.now() - EPOCH_TIMESTAMP;
|
|
221
|
+
const high = Math.floor(t / 0x100000000);
|
|
222
|
+
const low = t >>> 0;
|
|
223
|
+
buf[0] = high >>> 24 & 255;
|
|
224
|
+
buf[1] = high >>> 16 & 255;
|
|
225
|
+
buf[2] = high >>> 8 & 255;
|
|
226
|
+
buf[3] = 255 & high;
|
|
227
|
+
buf[4] = low >>> 24 & 255;
|
|
228
|
+
buf[5] = low >>> 16 & 255;
|
|
229
|
+
buf[6] = low >>> 8 & 255;
|
|
230
|
+
buf[7] = 255 & low;
|
|
231
|
+
return `${prefix}_${b58.encode(buf)}`;
|
|
232
|
+
}
|
|
233
|
+
const fieldConfigSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
234
|
+
required: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
235
|
+
returned: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
236
|
+
input: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
237
|
+
defaultValue: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
|
|
238
|
+
transform: __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
239
|
+
input: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
|
|
240
|
+
output: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional()
|
|
241
|
+
}).optional(),
|
|
242
|
+
validator: __WEBPACK_EXTERNAL_MODULE_zod__.z.any().optional(),
|
|
243
|
+
unique: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
|
|
244
|
+
indexed: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().optional(),
|
|
245
|
+
sortable: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
246
|
+
fieldName: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
247
|
+
bigint: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false)
|
|
248
|
+
});
|
|
249
|
+
const stringFieldSchema = fieldConfigSchema.extend({
|
|
250
|
+
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string'),
|
|
251
|
+
minLength: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional(),
|
|
252
|
+
maxLength: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional(),
|
|
253
|
+
pattern: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional()
|
|
254
|
+
});
|
|
255
|
+
const numberFieldSchema = fieldConfigSchema.extend({
|
|
256
|
+
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('number'),
|
|
257
|
+
min: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional(),
|
|
258
|
+
max: __WEBPACK_EXTERNAL_MODULE_zod__.z.number().optional()
|
|
259
|
+
});
|
|
260
|
+
const booleanFieldSchema = fieldConfigSchema.extend({
|
|
261
|
+
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('boolean')
|
|
262
|
+
});
|
|
263
|
+
const dateFieldSchema = fieldConfigSchema.extend({
|
|
264
|
+
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('date'),
|
|
265
|
+
minDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
|
|
266
|
+
maxDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().optional(),
|
|
267
|
+
dateOnly: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
|
|
268
|
+
format: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional()
|
|
269
|
+
});
|
|
270
|
+
const timezoneFieldSchema = fieldConfigSchema.extend({
|
|
271
|
+
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('timezone'),
|
|
272
|
+
validateTimezone: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
273
|
+
suggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional(),
|
|
274
|
+
restrictToSuggestedValues: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false)
|
|
275
|
+
});
|
|
276
|
+
const jsonFieldSchema = fieldConfigSchema.extend({
|
|
277
|
+
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('json'),
|
|
278
|
+
validateJson: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true)
|
|
279
|
+
});
|
|
280
|
+
const stringArrayFieldSchema = fieldConfigSchema.extend({
|
|
281
|
+
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('string[]')
|
|
282
|
+
});
|
|
283
|
+
const numberArrayFieldSchema = fieldConfigSchema.extend({
|
|
284
|
+
type: __WEBPACK_EXTERNAL_MODULE_zod__.z.literal('number[]')
|
|
285
|
+
});
|
|
286
|
+
__WEBPACK_EXTERNAL_MODULE_zod__.z.discriminatedUnion('type', [
|
|
287
|
+
stringFieldSchema,
|
|
288
|
+
numberFieldSchema,
|
|
289
|
+
booleanFieldSchema,
|
|
290
|
+
dateFieldSchema,
|
|
291
|
+
timezoneFieldSchema,
|
|
292
|
+
jsonFieldSchema,
|
|
293
|
+
stringArrayFieldSchema,
|
|
294
|
+
numberArrayFieldSchema
|
|
295
|
+
]);
|
|
307
296
|
const schema_auditLogSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
308
297
|
id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
309
298
|
entityType: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
@@ -312,9 +301,9 @@ const schema_auditLogSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
|
312
301
|
subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
313
302
|
ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
314
303
|
userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
315
|
-
changes: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
316
|
-
metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
317
|
-
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
304
|
+
changes: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
305
|
+
metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
306
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
318
307
|
});
|
|
319
308
|
function getAuditLogTable(options, auditLogFields) {
|
|
320
309
|
const auditLogConfig = options.tables?.auditLog;
|
|
@@ -413,49 +402,171 @@ function getAuditLogTable(options, auditLogFields) {
|
|
|
413
402
|
order: 5
|
|
414
403
|
};
|
|
415
404
|
}
|
|
416
|
-
const
|
|
417
|
-
'cookie_banner',
|
|
418
|
-
'privacy_policy',
|
|
419
|
-
'dpa',
|
|
420
|
-
'terms_and_conditions',
|
|
421
|
-
'marketing_communications',
|
|
422
|
-
'age_verification',
|
|
423
|
-
'other'
|
|
424
|
-
]);
|
|
425
|
-
const schema_consentPolicySchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
405
|
+
const schema_consentSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
426
406
|
id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
407
|
+
subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
408
|
+
domainId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
409
|
+
purposeIds: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()),
|
|
410
|
+
metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).nullable().optional(),
|
|
411
|
+
policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
412
|
+
ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
413
|
+
userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
414
|
+
status: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
|
|
415
|
+
'active',
|
|
416
|
+
'withdrawn',
|
|
417
|
+
'expired'
|
|
418
|
+
]).prefault('active'),
|
|
419
|
+
withdrawalReason: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
420
|
+
givenAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
421
|
+
validUntil: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
|
|
422
|
+
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true)
|
|
437
423
|
});
|
|
438
|
-
function
|
|
439
|
-
const
|
|
424
|
+
function getConsentTable(options, consentFields) {
|
|
425
|
+
const consentConfig = options.tables?.consent;
|
|
426
|
+
const subjectConfig = options.tables?.subject;
|
|
427
|
+
const domainConfig = options.tables?.domain;
|
|
428
|
+
const policyConfig = options.tables?.consentPolicy;
|
|
440
429
|
return {
|
|
441
|
-
entityName:
|
|
442
|
-
entityPrefix:
|
|
443
|
-
schema:
|
|
430
|
+
entityName: consentConfig?.entityName || 'consent',
|
|
431
|
+
entityPrefix: consentConfig?.entityPrefix || 'cns',
|
|
432
|
+
schema: schema_consentSchema,
|
|
444
433
|
fields: {
|
|
445
|
-
|
|
434
|
+
subjectId: {
|
|
446
435
|
type: 'string',
|
|
447
436
|
required: true,
|
|
448
|
-
fieldName:
|
|
437
|
+
fieldName: consentConfig?.fields?.subjectId || 'subjectId',
|
|
438
|
+
references: {
|
|
439
|
+
model: subjectConfig?.entityName || 'subject',
|
|
440
|
+
field: 'id'
|
|
441
|
+
}
|
|
449
442
|
},
|
|
450
|
-
|
|
443
|
+
domainId: {
|
|
451
444
|
type: 'string',
|
|
452
445
|
required: true,
|
|
453
|
-
fieldName:
|
|
446
|
+
fieldName: consentConfig?.fields?.domainId || 'domainId',
|
|
447
|
+
references: {
|
|
448
|
+
model: domainConfig?.entityName || 'domain',
|
|
449
|
+
field: 'id'
|
|
450
|
+
}
|
|
454
451
|
},
|
|
455
|
-
|
|
456
|
-
type: '
|
|
457
|
-
required:
|
|
458
|
-
fieldName:
|
|
452
|
+
purposeIds: {
|
|
453
|
+
type: 'json',
|
|
454
|
+
required: false,
|
|
455
|
+
fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
|
|
456
|
+
},
|
|
457
|
+
metadata: {
|
|
458
|
+
type: 'json',
|
|
459
|
+
required: false,
|
|
460
|
+
fieldName: consentConfig?.fields?.metadata || 'metadata'
|
|
461
|
+
},
|
|
462
|
+
policyId: {
|
|
463
|
+
type: 'string',
|
|
464
|
+
required: false,
|
|
465
|
+
fieldName: consentConfig?.fields?.policyId || 'policyId',
|
|
466
|
+
references: {
|
|
467
|
+
model: policyConfig?.entityName || 'consentPolicy',
|
|
468
|
+
field: 'id'
|
|
469
|
+
}
|
|
470
|
+
},
|
|
471
|
+
ipAddress: {
|
|
472
|
+
type: 'string',
|
|
473
|
+
required: false,
|
|
474
|
+
fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
|
|
475
|
+
},
|
|
476
|
+
userAgent: {
|
|
477
|
+
type: 'string',
|
|
478
|
+
required: false,
|
|
479
|
+
fieldName: consentConfig?.fields?.userAgent || 'userAgent'
|
|
480
|
+
},
|
|
481
|
+
status: {
|
|
482
|
+
type: 'string',
|
|
483
|
+
defaultValue: ()=>'active',
|
|
484
|
+
required: true,
|
|
485
|
+
fieldName: consentConfig?.fields?.status || 'status'
|
|
486
|
+
},
|
|
487
|
+
withdrawalReason: {
|
|
488
|
+
type: 'string',
|
|
489
|
+
required: false,
|
|
490
|
+
fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
|
|
491
|
+
},
|
|
492
|
+
givenAt: {
|
|
493
|
+
type: 'date',
|
|
494
|
+
defaultValue: ()=>new Date(),
|
|
495
|
+
required: true,
|
|
496
|
+
fieldName: consentConfig?.fields?.givenAt || 'givenAt'
|
|
497
|
+
},
|
|
498
|
+
validUntil: {
|
|
499
|
+
type: 'date',
|
|
500
|
+
required: false,
|
|
501
|
+
fieldName: consentConfig?.fields?.validUntil || 'validUntil',
|
|
502
|
+
transform: {
|
|
503
|
+
input: (val, data)=>{
|
|
504
|
+
if (val) return val;
|
|
505
|
+
const expiresIn = consentConfig?.expiresIn || 31536000;
|
|
506
|
+
const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
|
|
507
|
+
if (expiresIn > 0) {
|
|
508
|
+
const validUntil = new Date(givenAt);
|
|
509
|
+
validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
|
|
510
|
+
return validUntil;
|
|
511
|
+
}
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
},
|
|
515
|
+
isActive: {
|
|
516
|
+
type: 'boolean',
|
|
517
|
+
defaultValue: true,
|
|
518
|
+
required: true,
|
|
519
|
+
fieldName: consentConfig?.fields?.isActive || 'isActive'
|
|
520
|
+
},
|
|
521
|
+
...consentFields || {},
|
|
522
|
+
...consentConfig?.additionalFields || {}
|
|
523
|
+
},
|
|
524
|
+
order: 3
|
|
525
|
+
};
|
|
526
|
+
}
|
|
527
|
+
const PolicyTypeSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
|
|
528
|
+
'cookie_banner',
|
|
529
|
+
'privacy_policy',
|
|
530
|
+
'dpa',
|
|
531
|
+
'terms_and_conditions',
|
|
532
|
+
'marketing_communications',
|
|
533
|
+
'age_verification',
|
|
534
|
+
'other'
|
|
535
|
+
]);
|
|
536
|
+
const schema_consentPolicySchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
537
|
+
id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
538
|
+
version: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
539
|
+
type: PolicyTypeSchema,
|
|
540
|
+
name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
541
|
+
effectiveDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date(),
|
|
542
|
+
expirationDate: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
|
|
543
|
+
content: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
544
|
+
contentHash: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
545
|
+
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
546
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
547
|
+
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
548
|
+
});
|
|
549
|
+
function getConsentPolicyTable(options, policyFields) {
|
|
550
|
+
const consentPolicyConfig = options.tables?.consentPolicy;
|
|
551
|
+
return {
|
|
552
|
+
entityName: consentPolicyConfig?.entityName || 'consentPolicy',
|
|
553
|
+
entityPrefix: consentPolicyConfig?.entityPrefix || 'pol',
|
|
554
|
+
schema: schema_consentPolicySchema,
|
|
555
|
+
fields: {
|
|
556
|
+
version: {
|
|
557
|
+
type: 'string',
|
|
558
|
+
required: true,
|
|
559
|
+
fieldName: consentPolicyConfig?.fields?.version || 'version'
|
|
560
|
+
},
|
|
561
|
+
type: {
|
|
562
|
+
type: 'string',
|
|
563
|
+
required: true,
|
|
564
|
+
fieldName: consentPolicyConfig?.fields?.type || 'type'
|
|
565
|
+
},
|
|
566
|
+
name: {
|
|
567
|
+
type: 'string',
|
|
568
|
+
required: true,
|
|
569
|
+
fieldName: consentPolicyConfig?.fields?.name || 'name'
|
|
459
570
|
},
|
|
460
571
|
effectiveDate: {
|
|
461
572
|
type: 'date',
|
|
@@ -500,12 +611,12 @@ const schema_purposeSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
|
500
611
|
code: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
501
612
|
name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
502
613
|
description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
503
|
-
isEssential: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
614
|
+
isEssential: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
|
|
504
615
|
dataCategory: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullish(),
|
|
505
616
|
legalBasis: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullish(),
|
|
506
|
-
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
507
|
-
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
508
|
-
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
617
|
+
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
618
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
619
|
+
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
509
620
|
});
|
|
510
621
|
function getPurposeTable(options, purposeFields) {
|
|
511
622
|
const purposeConfig = options.tables?.consentPurpose;
|
|
@@ -574,9 +685,9 @@ const schema_consentRecordSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
|
574
685
|
subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
575
686
|
consentId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
576
687
|
actionType: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
577
|
-
details: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
578
|
-
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
579
|
-
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
688
|
+
details: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.string(), __WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).optional(),
|
|
689
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
690
|
+
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
580
691
|
});
|
|
581
692
|
function getConsentRecordTable(options, recordFields) {
|
|
582
693
|
const recordConfig = options.tables?.record;
|
|
@@ -627,137 +738,15 @@ function getConsentRecordTable(options, recordFields) {
|
|
|
627
738
|
order: 4
|
|
628
739
|
};
|
|
629
740
|
}
|
|
630
|
-
const schema_consentSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
631
|
-
id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
632
|
-
subjectId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
633
|
-
domainId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
634
|
-
purposeIds: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()),
|
|
635
|
-
metadata: __WEBPACK_EXTERNAL_MODULE_zod__.z.record(__WEBPACK_EXTERNAL_MODULE_zod__.z.unknown()).nullable().optional(),
|
|
636
|
-
policyId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
637
|
-
ipAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
638
|
-
userAgent: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
639
|
-
status: __WEBPACK_EXTERNAL_MODULE_zod__.z["enum"]([
|
|
640
|
-
'active',
|
|
641
|
-
'withdrawn',
|
|
642
|
-
'expired'
|
|
643
|
-
]).default('active'),
|
|
644
|
-
withdrawalReason: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
645
|
-
givenAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().default(()=>new Date()),
|
|
646
|
-
validUntil: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().nullable().optional(),
|
|
647
|
-
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().default(true)
|
|
648
|
-
});
|
|
649
|
-
function getConsentTable(options, consentFields) {
|
|
650
|
-
const consentConfig = options.tables?.consent;
|
|
651
|
-
const subjectConfig = options.tables?.subject;
|
|
652
|
-
const domainConfig = options.tables?.domain;
|
|
653
|
-
const policyConfig = options.tables?.consentPolicy;
|
|
654
|
-
return {
|
|
655
|
-
entityName: consentConfig?.entityName || 'consent',
|
|
656
|
-
entityPrefix: consentConfig?.entityPrefix || 'cns',
|
|
657
|
-
schema: schema_consentSchema,
|
|
658
|
-
fields: {
|
|
659
|
-
subjectId: {
|
|
660
|
-
type: 'string',
|
|
661
|
-
required: true,
|
|
662
|
-
fieldName: consentConfig?.fields?.subjectId || 'subjectId',
|
|
663
|
-
references: {
|
|
664
|
-
model: subjectConfig?.entityName || 'subject',
|
|
665
|
-
field: 'id'
|
|
666
|
-
}
|
|
667
|
-
},
|
|
668
|
-
domainId: {
|
|
669
|
-
type: 'string',
|
|
670
|
-
required: true,
|
|
671
|
-
fieldName: consentConfig?.fields?.domainId || 'domainId',
|
|
672
|
-
references: {
|
|
673
|
-
model: domainConfig?.entityName || 'domain',
|
|
674
|
-
field: 'id'
|
|
675
|
-
}
|
|
676
|
-
},
|
|
677
|
-
purposeIds: {
|
|
678
|
-
type: 'json',
|
|
679
|
-
required: false,
|
|
680
|
-
fieldName: consentConfig?.fields?.purposeIds || 'purposeIds'
|
|
681
|
-
},
|
|
682
|
-
metadata: {
|
|
683
|
-
type: 'json',
|
|
684
|
-
required: false,
|
|
685
|
-
fieldName: consentConfig?.fields?.metadata || 'metadata'
|
|
686
|
-
},
|
|
687
|
-
policyId: {
|
|
688
|
-
type: 'string',
|
|
689
|
-
required: false,
|
|
690
|
-
fieldName: consentConfig?.fields?.policyId || 'policyId',
|
|
691
|
-
references: {
|
|
692
|
-
model: policyConfig?.entityName || 'consentPolicy',
|
|
693
|
-
field: 'id'
|
|
694
|
-
}
|
|
695
|
-
},
|
|
696
|
-
ipAddress: {
|
|
697
|
-
type: 'string',
|
|
698
|
-
required: false,
|
|
699
|
-
fieldName: consentConfig?.fields?.ipAddress || 'ipAddress'
|
|
700
|
-
},
|
|
701
|
-
userAgent: {
|
|
702
|
-
type: 'string',
|
|
703
|
-
required: false,
|
|
704
|
-
fieldName: consentConfig?.fields?.userAgent || 'userAgent'
|
|
705
|
-
},
|
|
706
|
-
status: {
|
|
707
|
-
type: 'string',
|
|
708
|
-
defaultValue: ()=>'active',
|
|
709
|
-
required: true,
|
|
710
|
-
fieldName: consentConfig?.fields?.status || 'status'
|
|
711
|
-
},
|
|
712
|
-
withdrawalReason: {
|
|
713
|
-
type: 'string',
|
|
714
|
-
required: false,
|
|
715
|
-
fieldName: consentConfig?.fields?.withdrawalReason || 'withdrawalReason'
|
|
716
|
-
},
|
|
717
|
-
givenAt: {
|
|
718
|
-
type: 'date',
|
|
719
|
-
defaultValue: ()=>new Date(),
|
|
720
|
-
required: true,
|
|
721
|
-
fieldName: consentConfig?.fields?.givenAt || 'givenAt'
|
|
722
|
-
},
|
|
723
|
-
validUntil: {
|
|
724
|
-
type: 'date',
|
|
725
|
-
required: false,
|
|
726
|
-
fieldName: consentConfig?.fields?.validUntil || 'validUntil',
|
|
727
|
-
transform: {
|
|
728
|
-
input: (val, data)=>{
|
|
729
|
-
if (val) return val;
|
|
730
|
-
const expiresIn = consentConfig?.expiresIn || 31536000;
|
|
731
|
-
const givenAt = data.givenAt instanceof Date ? data.givenAt : new Date();
|
|
732
|
-
if (expiresIn > 0) {
|
|
733
|
-
const validUntil = new Date(givenAt);
|
|
734
|
-
validUntil.setSeconds(validUntil.getSeconds() + expiresIn);
|
|
735
|
-
return validUntil;
|
|
736
|
-
}
|
|
737
|
-
}
|
|
738
|
-
}
|
|
739
|
-
},
|
|
740
|
-
isActive: {
|
|
741
|
-
type: 'boolean',
|
|
742
|
-
defaultValue: true,
|
|
743
|
-
required: true,
|
|
744
|
-
fieldName: consentConfig?.fields?.isActive || 'isActive'
|
|
745
|
-
},
|
|
746
|
-
...consentFields || {},
|
|
747
|
-
...consentConfig?.additionalFields || {}
|
|
748
|
-
},
|
|
749
|
-
order: 3
|
|
750
|
-
};
|
|
751
|
-
}
|
|
752
741
|
const schema_domainSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
753
742
|
id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
754
743
|
name: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().min(1),
|
|
755
744
|
description: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
756
|
-
allowedOrigins: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional().
|
|
757
|
-
isVerified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
758
|
-
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
759
|
-
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
760
|
-
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
745
|
+
allowedOrigins: __WEBPACK_EXTERNAL_MODULE_zod__.z.array(__WEBPACK_EXTERNAL_MODULE_zod__.z.string()).optional().prefault([]),
|
|
746
|
+
isVerified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
747
|
+
isActive: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(true),
|
|
748
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
749
|
+
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
761
750
|
});
|
|
762
751
|
function getDomainTable(options, domainFields) {
|
|
763
752
|
const domainConfig = options.tables?.domain;
|
|
@@ -814,12 +803,12 @@ function getDomainTable(options, domainFields) {
|
|
|
814
803
|
}
|
|
815
804
|
const schema_subjectSchema = __WEBPACK_EXTERNAL_MODULE_zod__.z.object({
|
|
816
805
|
id: __WEBPACK_EXTERNAL_MODULE_zod__.z.string(),
|
|
817
|
-
isIdentified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().
|
|
806
|
+
isIdentified: __WEBPACK_EXTERNAL_MODULE_zod__.z.boolean().prefault(false),
|
|
818
807
|
externalId: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().nullable().optional(),
|
|
819
808
|
identityProvider: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
820
809
|
lastIpAddress: __WEBPACK_EXTERNAL_MODULE_zod__.z.string().optional(),
|
|
821
|
-
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
822
|
-
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().
|
|
810
|
+
createdAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date()),
|
|
811
|
+
updatedAt: __WEBPACK_EXTERNAL_MODULE_zod__.z.date().prefault(()=>new Date())
|
|
823
812
|
});
|
|
824
813
|
function getSubjectTable(options, subjectFields) {
|
|
825
814
|
const subjectConfig = options.tables?.subject;
|
|
@@ -898,28 +887,177 @@ const getConsentTables = (options)=>{
|
|
|
898
887
|
...pluginTables
|
|
899
888
|
};
|
|
900
889
|
};
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
switch(operator){
|
|
910
|
-
case 'starts_with':
|
|
911
|
-
return 'startsWith';
|
|
912
|
-
case 'ends_with':
|
|
913
|
-
return 'endsWith';
|
|
914
|
-
default:
|
|
915
|
-
return operator;
|
|
916
|
-
}
|
|
917
|
-
}
|
|
918
|
-
function getEntityName(model) {
|
|
919
|
-
return schema[model].entityName;
|
|
890
|
+
function dialect_getDatabaseType(db) {
|
|
891
|
+
if (!db) return null;
|
|
892
|
+
if ('dialect' in db) return dialect_getDatabaseType(db.dialect);
|
|
893
|
+
if (db && 'object' == typeof db && 'createDriver' in db) {
|
|
894
|
+
if (db instanceof __WEBPACK_EXTERNAL_MODULE_kysely__.SqliteDialect) return 'sqlite';
|
|
895
|
+
if (db instanceof __WEBPACK_EXTERNAL_MODULE_kysely__.MysqlDialect) return 'mysql';
|
|
896
|
+
if (db instanceof __WEBPACK_EXTERNAL_MODULE_kysely__.PostgresDialect) return 'postgres';
|
|
897
|
+
if (db instanceof __WEBPACK_EXTERNAL_MODULE_kysely__.MssqlDialect) return 'mssql';
|
|
920
898
|
}
|
|
921
|
-
|
|
899
|
+
if (db && 'object' == typeof db && 'aggregate' in db) return 'sqlite';
|
|
900
|
+
if (db && 'object' == typeof db && 'getConnection' in db) return 'mysql';
|
|
901
|
+
if (db && 'object' == typeof db && 'connect' in db) return 'postgres';
|
|
902
|
+
return null;
|
|
903
|
+
}
|
|
904
|
+
const createKyselyAdapter = async (config)=>{
|
|
905
|
+
const db = config.database;
|
|
906
|
+
if (!db) return {
|
|
907
|
+
kysely: null,
|
|
908
|
+
databaseType: null
|
|
909
|
+
};
|
|
910
|
+
if (db && 'object' == typeof db && 'db' in db) {
|
|
911
|
+
const kyselyConfig = db;
|
|
912
|
+
return {
|
|
913
|
+
kysely: kyselyConfig.db,
|
|
914
|
+
databaseType: kyselyConfig.type
|
|
915
|
+
};
|
|
916
|
+
}
|
|
917
|
+
if (db && 'object' == typeof db && 'dialect' in db) {
|
|
918
|
+
const dialectConfig = db;
|
|
919
|
+
return {
|
|
920
|
+
kysely: new __WEBPACK_EXTERNAL_MODULE_kysely__.Kysely({
|
|
921
|
+
dialect: dialectConfig.dialect
|
|
922
|
+
}),
|
|
923
|
+
databaseType: dialectConfig.type
|
|
924
|
+
};
|
|
925
|
+
}
|
|
926
|
+
let dialect;
|
|
927
|
+
const databaseType = dialect_getDatabaseType(db);
|
|
928
|
+
if (db && 'object' == typeof db && 'createDriver' in db) dialect = db;
|
|
929
|
+
if (db && 'object' == typeof db && 'aggregate' in db) dialect = new __WEBPACK_EXTERNAL_MODULE_kysely__.SqliteDialect({
|
|
930
|
+
database: db
|
|
931
|
+
});
|
|
932
|
+
if (db && 'object' == typeof db && 'getConnection' in db) dialect = new __WEBPACK_EXTERNAL_MODULE_kysely__.MysqlDialect({
|
|
933
|
+
pool: db
|
|
934
|
+
});
|
|
935
|
+
if (db && 'object' == typeof db && 'connect' in db) dialect = new __WEBPACK_EXTERNAL_MODULE_kysely__.PostgresDialect({
|
|
936
|
+
pool: db
|
|
937
|
+
});
|
|
938
|
+
return {
|
|
939
|
+
kysely: dialect ? new __WEBPACK_EXTERNAL_MODULE_kysely__.Kysely({
|
|
940
|
+
dialect
|
|
941
|
+
}) : null,
|
|
942
|
+
databaseType
|
|
943
|
+
};
|
|
944
|
+
};
|
|
945
|
+
function applyDefaultValue(inputValue, field, operation) {
|
|
946
|
+
if ('update' === operation) return inputValue;
|
|
947
|
+
if (null == inputValue && field.defaultValue) {
|
|
948
|
+
if ('function' == typeof field.defaultValue) return field.defaultValue();
|
|
949
|
+
return field.defaultValue;
|
|
950
|
+
}
|
|
951
|
+
return inputValue;
|
|
952
|
+
}
|
|
953
|
+
const createEntityTransformer = (db, config, options)=>{
|
|
954
|
+
const schema = getConsentTables(options);
|
|
955
|
+
function getField(model, field) {
|
|
956
|
+
if ('id' === field) return field;
|
|
957
|
+
const f = schema[model].fields[field];
|
|
958
|
+
return f.fieldName || field;
|
|
959
|
+
}
|
|
960
|
+
function getSchema(entityName) {
|
|
961
|
+
const schema = config.schema || db._.fullSchema;
|
|
962
|
+
if (!schema) throw new error_class_DoubleTieError('The schema could not be found. Please ensure the schema is properly configured in the adapter.', {
|
|
963
|
+
code: error_codes_ERROR_CODES.DATABASE_CONNECTION_ERROR,
|
|
964
|
+
status: 500,
|
|
965
|
+
meta: {
|
|
966
|
+
provider: config.provider
|
|
967
|
+
}
|
|
968
|
+
});
|
|
969
|
+
const model = getEntityName(entityName);
|
|
970
|
+
const schemaModel = schema[model];
|
|
971
|
+
if (!schemaModel) throw new error_class_DoubleTieError(`The model "${model}" does not exist in the schema. Please verify the model name and ensure it is defined in your schema.`, {
|
|
972
|
+
code: error_codes_ERROR_CODES.DATABASE_QUERY_ERROR,
|
|
973
|
+
status: 404,
|
|
974
|
+
meta: {
|
|
975
|
+
model,
|
|
976
|
+
availableModels: Object.keys(schema)
|
|
977
|
+
}
|
|
978
|
+
});
|
|
979
|
+
return schemaModel;
|
|
980
|
+
}
|
|
981
|
+
const getEntityName = (model)=>{
|
|
982
|
+
if (schema[model].entityName !== model) return schema[model].entityName;
|
|
983
|
+
if (config.usePlural) return `${model}s`;
|
|
984
|
+
return model;
|
|
985
|
+
};
|
|
986
|
+
function convertWhereClause(where, model) {
|
|
987
|
+
const schemaModel = getSchema(model);
|
|
988
|
+
if (!where) return [];
|
|
989
|
+
if (1 === where.length) {
|
|
990
|
+
const w = where[0];
|
|
991
|
+
if (!w) return [];
|
|
992
|
+
const field = getField(model, w.field);
|
|
993
|
+
if (!schemaModel[field]) throw new error_class_DoubleTieError(`The field "${field}" does not exist in model "${model}". Please verify the field name and ensure it is defined in your schema.`, {
|
|
994
|
+
code: error_codes_ERROR_CODES.DATABASE_QUERY_ERROR,
|
|
995
|
+
status: 404,
|
|
996
|
+
meta: {
|
|
997
|
+
model,
|
|
998
|
+
field,
|
|
999
|
+
availableFields: Object.keys(schemaModel)
|
|
1000
|
+
}
|
|
1001
|
+
});
|
|
1002
|
+
if ('in' === w.operator) {
|
|
1003
|
+
if (!Array.isArray(w.value)) throw new error_class_DoubleTieError(`The value for the field "${field}" must be an array when using the "in" operator.`, {
|
|
1004
|
+
code: error_codes_ERROR_CODES.BAD_REQUEST,
|
|
1005
|
+
status: 400,
|
|
1006
|
+
meta: {
|
|
1007
|
+
field,
|
|
1008
|
+
operator: w.operator,
|
|
1009
|
+
expectedType: 'array',
|
|
1010
|
+
actualType: typeof w.value
|
|
1011
|
+
}
|
|
1012
|
+
});
|
|
1013
|
+
return [
|
|
1014
|
+
(0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.inArray)(schemaModel[field], w.value)
|
|
1015
|
+
];
|
|
1016
|
+
}
|
|
1017
|
+
if ('contains' === w.operator) return [
|
|
1018
|
+
(0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.like)(schemaModel[field], `%${w.value}%`)
|
|
1019
|
+
];
|
|
1020
|
+
if ('starts_with' === w.operator) return [
|
|
1021
|
+
(0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.like)(schemaModel[field], `${w.value}%`)
|
|
1022
|
+
];
|
|
1023
|
+
if ('ends_with' === w.operator) return [
|
|
1024
|
+
(0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.like)(schemaModel[field], `%${w.value}`)
|
|
1025
|
+
];
|
|
1026
|
+
return [
|
|
1027
|
+
(0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.eq)(schemaModel[field], w.value)
|
|
1028
|
+
];
|
|
1029
|
+
}
|
|
1030
|
+
const andGroup = where.filter((w)=>'AND' === w.connector || !w.connector);
|
|
1031
|
+
const orGroup = where.filter((w)=>'OR' === w.connector);
|
|
1032
|
+
const andClause = (0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.and)(...andGroup.map((w)=>{
|
|
1033
|
+
const field = getField(model, w.field);
|
|
1034
|
+
if ('in' === w.operator) {
|
|
1035
|
+
if (!Array.isArray(w.value)) throw new error_class_DoubleTieError(`The value for the field "${field}" must be an array when using the "in" operator.`, {
|
|
1036
|
+
code: error_codes_ERROR_CODES.BAD_REQUEST,
|
|
1037
|
+
status: 400,
|
|
1038
|
+
meta: {
|
|
1039
|
+
field,
|
|
1040
|
+
operator: w.operator,
|
|
1041
|
+
expectedType: 'array',
|
|
1042
|
+
actualType: typeof w.value
|
|
1043
|
+
}
|
|
1044
|
+
});
|
|
1045
|
+
return (0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.inArray)(schemaModel[field], w.value);
|
|
1046
|
+
}
|
|
1047
|
+
return (0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.eq)(schemaModel[field], w.value);
|
|
1048
|
+
}));
|
|
1049
|
+
const orClause = (0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.or)(...orGroup.map((w)=>{
|
|
1050
|
+
const field = getField(model, w.field);
|
|
1051
|
+
return (0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.eq)(schemaModel[field], w.value);
|
|
1052
|
+
}));
|
|
1053
|
+
const clause = [];
|
|
1054
|
+
if (andGroup.length && andClause) clause.push(andClause);
|
|
1055
|
+
if (orGroup.length && orClause) clause.push(orClause);
|
|
1056
|
+
return clause;
|
|
1057
|
+
}
|
|
1058
|
+
const useDatabaseGeneratedId = options?.advanced?.generateId === false;
|
|
922
1059
|
return {
|
|
1060
|
+
getSchema,
|
|
923
1061
|
transformInput (data, model, action) {
|
|
924
1062
|
const transformedData = useDatabaseGeneratedId || 'update' === action ? {} : {
|
|
925
1063
|
id: options.advanced?.generateId ? options.advanced.generateId({
|
|
@@ -929,7 +1067,7 @@ const createEntityTransformer = (_config, options)=>{
|
|
|
929
1067
|
const fields = schema[model].fields;
|
|
930
1068
|
for(const field in fields)if (Object.hasOwn(fields, field)) {
|
|
931
1069
|
const value = data[field];
|
|
932
|
-
if (void 0 === value &&
|
|
1070
|
+
if (void 0 === value && !fields[field].defaultValue) continue;
|
|
933
1071
|
transformedData[fields[field].fieldName || field] = applyDefaultValue(value, fields[field], action);
|
|
934
1072
|
}
|
|
935
1073
|
return transformedData;
|
|
@@ -948,175 +1086,116 @@ const createEntityTransformer = (_config, options)=>{
|
|
|
948
1086
|
}
|
|
949
1087
|
return transformedData;
|
|
950
1088
|
},
|
|
951
|
-
convertWhereClause
|
|
952
|
-
|
|
953
|
-
if (
|
|
954
|
-
const
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
1089
|
+
convertWhereClause,
|
|
1090
|
+
withReturning: async (model, builder, data, where)=>{
|
|
1091
|
+
if ('mysql' !== config.provider) {
|
|
1092
|
+
const c = await builder.returning();
|
|
1093
|
+
return c[0];
|
|
1094
|
+
}
|
|
1095
|
+
await builder.execute();
|
|
1096
|
+
const schemaModel = getSchema(model);
|
|
1097
|
+
const builderVal = builder.config?.values;
|
|
1098
|
+
if (where?.length) {
|
|
1099
|
+
const clause = convertWhereClause(where, model);
|
|
1100
|
+
const res = await db.select().from(schemaModel).where(...clause);
|
|
1101
|
+
return res[0];
|
|
1102
|
+
}
|
|
1103
|
+
if (builderVal) {
|
|
1104
|
+
const tId = builderVal[0]?.id.value;
|
|
1105
|
+
const res = await db.select().from(schemaModel).where((0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.eq)(schemaModel.id, tId));
|
|
1106
|
+
return res[0];
|
|
1107
|
+
}
|
|
1108
|
+
if (data.id) {
|
|
1109
|
+
const res = await db.select().from(schemaModel).where((0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.eq)(schemaModel.id, data.id));
|
|
1110
|
+
return res[0];
|
|
961
1111
|
}
|
|
962
|
-
const and = where.filter((w)=>'AND' === w.connector || !w.connector);
|
|
963
|
-
const or = where.filter((w)=>'OR' === w.connector);
|
|
964
|
-
const andClause = and.map((w)=>({
|
|
965
|
-
[getField(model, w.field)]: 'eq' !== w.operator && w.operator ? {
|
|
966
|
-
[operatorToPrismaOperator(w.operator)]: w.value
|
|
967
|
-
} : w.value
|
|
968
|
-
}));
|
|
969
|
-
const orClause = or.map((w)=>({
|
|
970
|
-
[getField(model, w.field)]: {
|
|
971
|
-
[w.operator || 'eq']: w.value
|
|
972
|
-
}
|
|
973
|
-
}));
|
|
974
|
-
return {
|
|
975
|
-
...andClause.length ? {
|
|
976
|
-
AND: andClause
|
|
977
|
-
} : {},
|
|
978
|
-
...orClause.length ? {
|
|
979
|
-
OR: orClause
|
|
980
|
-
} : {}
|
|
981
|
-
};
|
|
982
|
-
},
|
|
983
|
-
convertSelect: (select, model)=>{
|
|
984
|
-
if (!select || !model) return;
|
|
985
|
-
return select.reduce((prev, cur)=>{
|
|
986
|
-
const field = getField(model, cur);
|
|
987
|
-
return Object.assign({}, prev, {
|
|
988
|
-
[field]: true
|
|
989
|
-
});
|
|
990
|
-
}, {});
|
|
991
1112
|
},
|
|
992
|
-
|
|
993
|
-
|
|
1113
|
+
getField,
|
|
1114
|
+
getEntityName
|
|
994
1115
|
};
|
|
995
1116
|
};
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
1117
|
+
function checkMissingFields(schema, model, values) {
|
|
1118
|
+
if (!schema) throw new error_class_DoubleTieError('The schema could not be found. Please ensure the schema is properly configured in the adapter.', {
|
|
1119
|
+
code: error_codes_ERROR_CODES.DATABASE_CONNECTION_ERROR,
|
|
1120
|
+
status: 500
|
|
1121
|
+
});
|
|
1122
|
+
for(const key in values)if (!schema[key]) throw new error_class_DoubleTieError(`The field "${key}" does not exist in the "${model}" schema. Please update your drizzle schema or re-generate using "npx @c15t/cli generate".`);
|
|
1123
|
+
}
|
|
1124
|
+
const drizzleAdapter = (db, config)=>(options)=>{
|
|
1125
|
+
const { transformInput, transformOutput, convertWhereClause, getSchema, withReturning, getField, getEntityName } = createEntityTransformer(db, config, options);
|
|
999
1126
|
return {
|
|
1000
|
-
id: '
|
|
1127
|
+
id: 'drizzle',
|
|
1001
1128
|
async create (data) {
|
|
1002
|
-
const { model, data: values
|
|
1129
|
+
const { model, data: values } = data;
|
|
1003
1130
|
const transformed = transformInput(values, model, 'create');
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
availableModels: Object.keys(prisma).filter((key)=>!key.startsWith('$') && !key.startsWith('_'))
|
|
1010
|
-
}
|
|
1011
|
-
});
|
|
1012
|
-
const result = await db[getEntityName(model)].create({
|
|
1013
|
-
data: transformed,
|
|
1014
|
-
select: convertSelect(select, model)
|
|
1015
|
-
});
|
|
1016
|
-
return transformOutput(result, model, select);
|
|
1131
|
+
const schemaModel = getSchema(model);
|
|
1132
|
+
checkMissingFields(schemaModel, getEntityName(model), transformed);
|
|
1133
|
+
const builder = db.insert(schemaModel).values(transformed);
|
|
1134
|
+
const returned = await withReturning(model, builder, transformed);
|
|
1135
|
+
return transformOutput(returned, model);
|
|
1017
1136
|
},
|
|
1018
1137
|
async findOne (data) {
|
|
1019
1138
|
const { model, where, select } = data;
|
|
1020
|
-
const
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
model,
|
|
1026
|
-
availableModels: Object.keys(prisma).filter((key)=>!key.startsWith('$') && !key.startsWith('_'))
|
|
1027
|
-
}
|
|
1028
|
-
});
|
|
1029
|
-
const result = await db[getEntityName(model)].findFirst({
|
|
1030
|
-
where: whereClause,
|
|
1031
|
-
select: convertSelect(select, model)
|
|
1032
|
-
});
|
|
1033
|
-
return transformOutput(result, model, select);
|
|
1139
|
+
const schemaModel = getSchema(model);
|
|
1140
|
+
const clause = convertWhereClause(where, model);
|
|
1141
|
+
const res = await db.select().from(schemaModel).where(...clause);
|
|
1142
|
+
if (!res.length) return null;
|
|
1143
|
+
return transformOutput(res[0], model, select);
|
|
1034
1144
|
},
|
|
1035
1145
|
async findMany (data) {
|
|
1036
|
-
const { model, where, limit, offset
|
|
1037
|
-
const
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
}
|
|
1045
|
-
});
|
|
1046
|
-
const result = await db[getEntityName(model)].findMany({
|
|
1047
|
-
where: whereClause,
|
|
1048
|
-
take: limit || 100,
|
|
1049
|
-
skip: offset || 0,
|
|
1050
|
-
...sortBy?.field ? {
|
|
1051
|
-
orderBy: {
|
|
1052
|
-
[getField(model, sortBy.field)]: 'desc' === sortBy.direction ? 'desc' : 'asc'
|
|
1053
|
-
}
|
|
1054
|
-
} : {}
|
|
1055
|
-
});
|
|
1056
|
-
return result.map((r)=>transformOutput(r, model));
|
|
1146
|
+
const { model, where, sortBy, limit, offset } = data;
|
|
1147
|
+
const schemaModel = getSchema(model);
|
|
1148
|
+
const clause = where ? convertWhereClause(where, model) : [];
|
|
1149
|
+
const sortFn = sortBy?.direction === 'desc' ? __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.desc : __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.asc;
|
|
1150
|
+
const builder = db.select().from(schemaModel).limit(limit || 100).offset(offset || 0);
|
|
1151
|
+
if (sortBy?.field) builder.orderBy(sortFn(schemaModel[getField(model, sortBy?.field)]));
|
|
1152
|
+
const res = await builder.where(...clause);
|
|
1153
|
+
return res.map((r)=>transformOutput(r, model));
|
|
1057
1154
|
},
|
|
1058
1155
|
async count (data) {
|
|
1059
1156
|
const { model, where } = data;
|
|
1060
|
-
const
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
availableModels: Object.keys(prisma).filter((key)=>!key.startsWith('$') && !key.startsWith('_'))
|
|
1067
|
-
}
|
|
1068
|
-
});
|
|
1069
|
-
const result = await db[getEntityName(model)].count({
|
|
1070
|
-
where: whereClause
|
|
1071
|
-
});
|
|
1072
|
-
return result;
|
|
1157
|
+
const schemaModel = getSchema(model);
|
|
1158
|
+
const clause = where ? convertWhereClause(where, model) : [];
|
|
1159
|
+
const res = await db.select({
|
|
1160
|
+
count: (0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.count)()
|
|
1161
|
+
}).from(schemaModel).where(...clause);
|
|
1162
|
+
return res[0].count;
|
|
1073
1163
|
},
|
|
1074
1164
|
async update (data) {
|
|
1075
1165
|
const { model, where, update } = data;
|
|
1076
|
-
const
|
|
1166
|
+
const schemaModel = getSchema(model);
|
|
1167
|
+
const clause = convertWhereClause(where, model);
|
|
1077
1168
|
const transformed = transformInput(update, model, 'update');
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
where: whereClause,
|
|
1081
|
-
data: transformed
|
|
1082
|
-
});
|
|
1083
|
-
return transformOutput(result, model);
|
|
1084
|
-
} catch {
|
|
1085
|
-
return null;
|
|
1086
|
-
}
|
|
1169
|
+
const result = await db.update(schemaModel).set(transformed).where(clause).returning();
|
|
1170
|
+
return result.length ? transformOutput(result[0], model) : null;
|
|
1087
1171
|
},
|
|
1088
1172
|
async updateMany (data) {
|
|
1089
|
-
const { model, where, update } = data;
|
|
1090
|
-
const
|
|
1091
|
-
const
|
|
1092
|
-
const
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
return result ? result.count : 0;
|
|
1173
|
+
const { model, where, update: values } = data;
|
|
1174
|
+
const schemaModel = getSchema(model);
|
|
1175
|
+
const clause = convertWhereClause(where, model);
|
|
1176
|
+
const transformed = transformInput(values, model, 'update');
|
|
1177
|
+
const builder = db.update(schemaModel).set(transformed).where(...clause);
|
|
1178
|
+
const res = await builder;
|
|
1179
|
+
return res ? res.changes : 0;
|
|
1097
1180
|
},
|
|
1098
1181
|
async delete (data) {
|
|
1099
1182
|
const { model, where } = data;
|
|
1100
|
-
const
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
});
|
|
1105
|
-
} catch {}
|
|
1183
|
+
const schemaModel = getSchema(model);
|
|
1184
|
+
const clause = convertWhereClause(where, model);
|
|
1185
|
+
const builder = db.delete(schemaModel).where(...clause);
|
|
1186
|
+
await builder;
|
|
1106
1187
|
},
|
|
1107
1188
|
async deleteMany (data) {
|
|
1108
1189
|
const { model, where } = data;
|
|
1109
|
-
const
|
|
1110
|
-
const
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
return result ? result.count : 0;
|
|
1190
|
+
const schemaModel = getSchema(model);
|
|
1191
|
+
const clause = convertWhereClause(where, model);
|
|
1192
|
+
const result = await db.delete(schemaModel).where(clause);
|
|
1193
|
+
return result ? result.rowCount : 0;
|
|
1114
1194
|
},
|
|
1115
1195
|
async transaction (data) {
|
|
1116
1196
|
const { callback } = data;
|
|
1117
|
-
return db
|
|
1118
|
-
const
|
|
1119
|
-
const transactionAdapter = prismaAdapter(txClient, config)(options);
|
|
1197
|
+
return await db.transaction(async (tx)=>{
|
|
1198
|
+
const transactionAdapter = drizzleAdapter(tx, config)(options);
|
|
1120
1199
|
return await callback(transactionAdapter);
|
|
1121
1200
|
});
|
|
1122
1201
|
},
|
|
@@ -1303,114 +1382,28 @@ const memoryAdapter = (db)=>(options)=>{
|
|
|
1303
1382
|
}
|
|
1304
1383
|
};
|
|
1305
1384
|
};
|
|
1306
|
-
const
|
|
1385
|
+
const prisma_adapter_createEntityTransformer = (_config, options)=>{
|
|
1307
1386
|
const schema = getConsentTables(options);
|
|
1308
1387
|
function getField(model, field) {
|
|
1309
1388
|
if ('id' === field) return field;
|
|
1310
1389
|
const f = schema[model].fields[field];
|
|
1311
1390
|
return f.fieldName || field;
|
|
1312
1391
|
}
|
|
1313
|
-
function
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
});
|
|
1322
|
-
const model = getEntityName(entityName);
|
|
1323
|
-
const schemaModel = schema[model];
|
|
1324
|
-
if (!schemaModel) throw new error_class_DoubleTieError(`The model "${model}" does not exist in the schema. Please verify the model name and ensure it is defined in your schema.`, {
|
|
1325
|
-
code: error_codes_ERROR_CODES.DATABASE_QUERY_ERROR,
|
|
1326
|
-
status: 404,
|
|
1327
|
-
meta: {
|
|
1328
|
-
model,
|
|
1329
|
-
availableModels: Object.keys(schema)
|
|
1330
|
-
}
|
|
1331
|
-
});
|
|
1332
|
-
return schemaModel;
|
|
1333
|
-
}
|
|
1334
|
-
const getEntityName = (model)=>{
|
|
1335
|
-
if (schema[model].entityName !== model) return schema[model].entityName;
|
|
1336
|
-
if (config.usePlural) return `${model}s`;
|
|
1337
|
-
return model;
|
|
1338
|
-
};
|
|
1339
|
-
function convertWhereClause(where, model) {
|
|
1340
|
-
const schemaModel = getSchema(model);
|
|
1341
|
-
if (!where) return [];
|
|
1342
|
-
if (1 === where.length) {
|
|
1343
|
-
const w = where[0];
|
|
1344
|
-
if (!w) return [];
|
|
1345
|
-
const field = getField(model, w.field);
|
|
1346
|
-
if (!schemaModel[field]) throw new error_class_DoubleTieError(`The field "${field}" does not exist in model "${model}". Please verify the field name and ensure it is defined in your schema.`, {
|
|
1347
|
-
code: error_codes_ERROR_CODES.DATABASE_QUERY_ERROR,
|
|
1348
|
-
status: 404,
|
|
1349
|
-
meta: {
|
|
1350
|
-
model,
|
|
1351
|
-
field,
|
|
1352
|
-
availableFields: Object.keys(schemaModel)
|
|
1353
|
-
}
|
|
1354
|
-
});
|
|
1355
|
-
if ('in' === w.operator) {
|
|
1356
|
-
if (!Array.isArray(w.value)) throw new error_class_DoubleTieError(`The value for the field "${field}" must be an array when using the "in" operator.`, {
|
|
1357
|
-
code: error_codes_ERROR_CODES.BAD_REQUEST,
|
|
1358
|
-
status: 400,
|
|
1359
|
-
meta: {
|
|
1360
|
-
field,
|
|
1361
|
-
operator: w.operator,
|
|
1362
|
-
expectedType: 'array',
|
|
1363
|
-
actualType: typeof w.value
|
|
1364
|
-
}
|
|
1365
|
-
});
|
|
1366
|
-
return [
|
|
1367
|
-
(0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.inArray)(schemaModel[field], w.value)
|
|
1368
|
-
];
|
|
1369
|
-
}
|
|
1370
|
-
if ('contains' === w.operator) return [
|
|
1371
|
-
(0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.like)(schemaModel[field], `%${w.value}%`)
|
|
1372
|
-
];
|
|
1373
|
-
if ('starts_with' === w.operator) return [
|
|
1374
|
-
(0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.like)(schemaModel[field], `${w.value}%`)
|
|
1375
|
-
];
|
|
1376
|
-
if ('ends_with' === w.operator) return [
|
|
1377
|
-
(0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.like)(schemaModel[field], `%${w.value}`)
|
|
1378
|
-
];
|
|
1379
|
-
return [
|
|
1380
|
-
(0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.eq)(schemaModel[field], w.value)
|
|
1381
|
-
];
|
|
1392
|
+
function operatorToPrismaOperator(operator) {
|
|
1393
|
+
switch(operator){
|
|
1394
|
+
case 'starts_with':
|
|
1395
|
+
return 'startsWith';
|
|
1396
|
+
case 'ends_with':
|
|
1397
|
+
return 'endsWith';
|
|
1398
|
+
default:
|
|
1399
|
+
return operator;
|
|
1382
1400
|
}
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
const field = getField(model, w.field);
|
|
1387
|
-
if ('in' === w.operator) {
|
|
1388
|
-
if (!Array.isArray(w.value)) throw new error_class_DoubleTieError(`The value for the field "${field}" must be an array when using the "in" operator.`, {
|
|
1389
|
-
code: error_codes_ERROR_CODES.BAD_REQUEST,
|
|
1390
|
-
status: 400,
|
|
1391
|
-
meta: {
|
|
1392
|
-
field,
|
|
1393
|
-
operator: w.operator,
|
|
1394
|
-
expectedType: 'array',
|
|
1395
|
-
actualType: typeof w.value
|
|
1396
|
-
}
|
|
1397
|
-
});
|
|
1398
|
-
return (0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.inArray)(schemaModel[field], w.value);
|
|
1399
|
-
}
|
|
1400
|
-
return (0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.eq)(schemaModel[field], w.value);
|
|
1401
|
-
}));
|
|
1402
|
-
const orClause = (0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.or)(...orGroup.map((w)=>{
|
|
1403
|
-
const field = getField(model, w.field);
|
|
1404
|
-
return (0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.eq)(schemaModel[field], w.value);
|
|
1405
|
-
}));
|
|
1406
|
-
const clause = [];
|
|
1407
|
-
if (andGroup.length && andClause) clause.push(andClause);
|
|
1408
|
-
if (orGroup.length && orClause) clause.push(orClause);
|
|
1409
|
-
return clause;
|
|
1401
|
+
}
|
|
1402
|
+
function getEntityName(model) {
|
|
1403
|
+
return schema[model].entityName;
|
|
1410
1404
|
}
|
|
1411
1405
|
const useDatabaseGeneratedId = options?.advanced?.generateId === false;
|
|
1412
1406
|
return {
|
|
1413
|
-
getSchema,
|
|
1414
1407
|
transformInput (data, model, action) {
|
|
1415
1408
|
const transformedData = useDatabaseGeneratedId || 'update' === action ? {} : {
|
|
1416
1409
|
id: options.advanced?.generateId ? options.advanced.generateId({
|
|
@@ -1420,7 +1413,7 @@ const drizzle_adapter_createEntityTransformer = (db, config, options)=>{
|
|
|
1420
1413
|
const fields = schema[model].fields;
|
|
1421
1414
|
for(const field in fields)if (Object.hasOwn(fields, field)) {
|
|
1422
1415
|
const value = data[field];
|
|
1423
|
-
if (void 0 === value && !fields[field].defaultValue) continue;
|
|
1416
|
+
if (void 0 === value && (!fields[field].defaultValue || 'update' === action)) continue;
|
|
1424
1417
|
transformedData[fields[field].fieldName || field] = applyDefaultValue(value, fields[field], action);
|
|
1425
1418
|
}
|
|
1426
1419
|
return transformedData;
|
|
@@ -1439,210 +1432,181 @@ const drizzle_adapter_createEntityTransformer = (db, config, options)=>{
|
|
|
1439
1432
|
}
|
|
1440
1433
|
return transformedData;
|
|
1441
1434
|
},
|
|
1442
|
-
convertWhereClause,
|
|
1443
|
-
|
|
1444
|
-
if (
|
|
1445
|
-
const
|
|
1446
|
-
return
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
const clause = convertWhereClause(where, model);
|
|
1453
|
-
const res = await db.select().from(schemaModel).where(...clause);
|
|
1454
|
-
return res[0];
|
|
1455
|
-
}
|
|
1456
|
-
if (builderVal) {
|
|
1457
|
-
const tId = builderVal[0]?.id.value;
|
|
1458
|
-
const res = await db.select().from(schemaModel).where((0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.eq)(schemaModel.id, tId));
|
|
1459
|
-
return res[0];
|
|
1460
|
-
}
|
|
1461
|
-
if (data.id) {
|
|
1462
|
-
const res = await db.select().from(schemaModel).where((0, __WEBPACK_EXTERNAL_MODULE_drizzle_orm_51e552b8__.eq)(schemaModel.id, data.id));
|
|
1463
|
-
return res[0];
|
|
1435
|
+
convertWhereClause (model, where) {
|
|
1436
|
+
if (!where) return {};
|
|
1437
|
+
if (1 === where.length) {
|
|
1438
|
+
const w = where[0];
|
|
1439
|
+
if (!w) return;
|
|
1440
|
+
return {
|
|
1441
|
+
[getField(model, w.field)]: 'eq' !== w.operator && w.operator ? {
|
|
1442
|
+
[operatorToPrismaOperator(w.operator)]: w.value
|
|
1443
|
+
} : w.value
|
|
1444
|
+
};
|
|
1464
1445
|
}
|
|
1446
|
+
const and = where.filter((w)=>'AND' === w.connector || !w.connector);
|
|
1447
|
+
const or = where.filter((w)=>'OR' === w.connector);
|
|
1448
|
+
const andClause = and.map((w)=>({
|
|
1449
|
+
[getField(model, w.field)]: 'eq' !== w.operator && w.operator ? {
|
|
1450
|
+
[operatorToPrismaOperator(w.operator)]: w.value
|
|
1451
|
+
} : w.value
|
|
1452
|
+
}));
|
|
1453
|
+
const orClause = or.map((w)=>({
|
|
1454
|
+
[getField(model, w.field)]: {
|
|
1455
|
+
[w.operator || 'eq']: w.value
|
|
1456
|
+
}
|
|
1457
|
+
}));
|
|
1458
|
+
return {
|
|
1459
|
+
...andClause.length ? {
|
|
1460
|
+
AND: andClause
|
|
1461
|
+
} : {},
|
|
1462
|
+
...orClause.length ? {
|
|
1463
|
+
OR: orClause
|
|
1464
|
+
} : {}
|
|
1465
|
+
};
|
|
1465
1466
|
},
|
|
1466
|
-
|
|
1467
|
-
|
|
1467
|
+
convertSelect: (select, model)=>{
|
|
1468
|
+
if (!select || !model) return;
|
|
1469
|
+
return select.reduce((prev, cur)=>{
|
|
1470
|
+
const field = getField(model, cur);
|
|
1471
|
+
return Object.assign({}, prev, {
|
|
1472
|
+
[field]: true
|
|
1473
|
+
});
|
|
1474
|
+
}, {});
|
|
1475
|
+
},
|
|
1476
|
+
getEntityName,
|
|
1477
|
+
getField
|
|
1468
1478
|
};
|
|
1469
1479
|
};
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
status: 500
|
|
1474
|
-
});
|
|
1475
|
-
for(const key in values)if (!schema[key]) throw new error_class_DoubleTieError(`The field "${key}" does not exist in the "${model}" schema. Please update your drizzle schema or re-generate using "npx @c15t/cli generate".`);
|
|
1476
|
-
}
|
|
1477
|
-
const drizzleAdapter = (db, config)=>(options)=>{
|
|
1478
|
-
const { transformInput, transformOutput, convertWhereClause, getSchema, withReturning, getField, getEntityName } = drizzle_adapter_createEntityTransformer(db, config, options);
|
|
1480
|
+
const prismaAdapter = (prisma, config)=>(options)=>{
|
|
1481
|
+
const db = prisma;
|
|
1482
|
+
const { transformInput, transformOutput, convertWhereClause, convertSelect, getEntityName, getField } = prisma_adapter_createEntityTransformer(config, options);
|
|
1479
1483
|
return {
|
|
1480
|
-
id: '
|
|
1484
|
+
id: 'prisma',
|
|
1481
1485
|
async create (data) {
|
|
1482
|
-
const { model, data: values } = data;
|
|
1486
|
+
const { model, data: values, select } = data;
|
|
1483
1487
|
const transformed = transformInput(values, model, 'create');
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1488
|
+
if (!db[getEntityName(model)]) throw new error_class_DoubleTieError(`The model "${model}" does not exist in the Prisma client. Please verify the model name and ensure it is defined in your Prisma schema.`, {
|
|
1489
|
+
code: error_codes_ERROR_CODES.DATABASE_QUERY_ERROR,
|
|
1490
|
+
status: 500,
|
|
1491
|
+
meta: {
|
|
1492
|
+
model,
|
|
1493
|
+
availableModels: Object.keys(prisma).filter((key)=>!key.startsWith('$') && !key.startsWith('_'))
|
|
1494
|
+
}
|
|
1495
|
+
});
|
|
1496
|
+
const result = await db[getEntityName(model)].create({
|
|
1497
|
+
data: transformed,
|
|
1498
|
+
select: convertSelect(select, model)
|
|
1499
|
+
});
|
|
1500
|
+
return transformOutput(result, model, select);
|
|
1489
1501
|
},
|
|
1490
1502
|
async findOne (data) {
|
|
1491
1503
|
const { model, where, select } = data;
|
|
1492
|
-
const
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
|
|
1496
|
-
|
|
1504
|
+
const whereClause = convertWhereClause(model, where);
|
|
1505
|
+
if (!db[getEntityName(model)]) throw new error_class_DoubleTieError(`The model "${model}" does not exist in the Prisma client. Please verify the model name and ensure it is defined in your Prisma schema.`, {
|
|
1506
|
+
code: error_codes_ERROR_CODES.DATABASE_QUERY_ERROR,
|
|
1507
|
+
status: 500,
|
|
1508
|
+
meta: {
|
|
1509
|
+
model,
|
|
1510
|
+
availableModels: Object.keys(prisma).filter((key)=>!key.startsWith('$') && !key.startsWith('_'))
|
|
1511
|
+
}
|
|
1512
|
+
});
|
|
1513
|
+
const result = await db[getEntityName(model)].findFirst({
|
|
1514
|
+
where: whereClause,
|
|
1515
|
+
select: convertSelect(select, model)
|
|
1516
|
+
});
|
|
1517
|
+
return transformOutput(result, model, select);
|
|
1497
1518
|
},
|
|
1498
1519
|
async findMany (data) {
|
|
1499
|
-
const { model, where,
|
|
1500
|
-
const
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1520
|
+
const { model, where, limit, offset, sortBy } = data;
|
|
1521
|
+
const whereClause = convertWhereClause(model, where);
|
|
1522
|
+
if (!db[getEntityName(model)]) throw new error_class_DoubleTieError(`The model "${model}" does not exist in the Prisma client. Please verify the model name and ensure it is defined in your Prisma schema.`, {
|
|
1523
|
+
code: error_codes_ERROR_CODES.DATABASE_QUERY_ERROR,
|
|
1524
|
+
status: 500,
|
|
1525
|
+
meta: {
|
|
1526
|
+
model,
|
|
1527
|
+
availableModels: Object.keys(prisma).filter((key)=>!key.startsWith('$') && !key.startsWith('_'))
|
|
1528
|
+
}
|
|
1529
|
+
});
|
|
1530
|
+
const result = await db[getEntityName(model)].findMany({
|
|
1531
|
+
where: whereClause,
|
|
1532
|
+
take: limit || 100,
|
|
1533
|
+
skip: offset || 0,
|
|
1534
|
+
...sortBy?.field ? {
|
|
1535
|
+
orderBy: {
|
|
1536
|
+
[getField(model, sortBy.field)]: 'desc' === sortBy.direction ? 'desc' : 'asc'
|
|
1537
|
+
}
|
|
1538
|
+
} : {}
|
|
1539
|
+
});
|
|
1540
|
+
return result.map((r)=>transformOutput(r, model));
|
|
1507
1541
|
},
|
|
1508
1542
|
async count (data) {
|
|
1509
1543
|
const { model, where } = data;
|
|
1510
|
-
const
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1544
|
+
const whereClause = convertWhereClause(model, where);
|
|
1545
|
+
if (!db[getEntityName(model)]) throw new error_class_DoubleTieError(`The model "${model}" does not exist in the Prisma client. Please verify the model name and ensure it is defined in your Prisma schema.`, {
|
|
1546
|
+
code: error_codes_ERROR_CODES.DATABASE_QUERY_ERROR,
|
|
1547
|
+
status: 500,
|
|
1548
|
+
meta: {
|
|
1549
|
+
model,
|
|
1550
|
+
availableModels: Object.keys(prisma).filter((key)=>!key.startsWith('$') && !key.startsWith('_'))
|
|
1551
|
+
}
|
|
1552
|
+
});
|
|
1553
|
+
const result = await db[getEntityName(model)].count({
|
|
1554
|
+
where: whereClause
|
|
1555
|
+
});
|
|
1556
|
+
return result;
|
|
1516
1557
|
},
|
|
1517
1558
|
async update (data) {
|
|
1518
1559
|
const { model, where, update } = data;
|
|
1519
|
-
const
|
|
1520
|
-
const clause = convertWhereClause(where, model);
|
|
1560
|
+
const whereClause = convertWhereClause(model, where);
|
|
1521
1561
|
const transformed = transformInput(update, model, 'update');
|
|
1522
|
-
|
|
1523
|
-
|
|
1562
|
+
try {
|
|
1563
|
+
const result = await db[getEntityName(model)].update({
|
|
1564
|
+
where: whereClause,
|
|
1565
|
+
data: transformed
|
|
1566
|
+
});
|
|
1567
|
+
return transformOutput(result, model);
|
|
1568
|
+
} catch {
|
|
1569
|
+
return null;
|
|
1570
|
+
}
|
|
1524
1571
|
},
|
|
1525
1572
|
async updateMany (data) {
|
|
1526
|
-
const { model, where, update
|
|
1527
|
-
const
|
|
1528
|
-
const
|
|
1529
|
-
const
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1573
|
+
const { model, where, update } = data;
|
|
1574
|
+
const whereClause = convertWhereClause(model, where);
|
|
1575
|
+
const transformed = transformInput(update, model, 'update');
|
|
1576
|
+
const result = await db[getEntityName(model)].updateMany({
|
|
1577
|
+
where: whereClause,
|
|
1578
|
+
data: transformed
|
|
1579
|
+
});
|
|
1580
|
+
return result ? result.count : 0;
|
|
1533
1581
|
},
|
|
1534
1582
|
async delete (data) {
|
|
1535
1583
|
const { model, where } = data;
|
|
1536
|
-
const
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1584
|
+
const whereClause = convertWhereClause(model, where);
|
|
1585
|
+
try {
|
|
1586
|
+
await db[getEntityName(model)].delete({
|
|
1587
|
+
where: whereClause
|
|
1588
|
+
});
|
|
1589
|
+
} catch {}
|
|
1540
1590
|
},
|
|
1541
1591
|
async deleteMany (data) {
|
|
1542
1592
|
const { model, where } = data;
|
|
1543
|
-
const
|
|
1544
|
-
const
|
|
1545
|
-
|
|
1546
|
-
|
|
1593
|
+
const whereClause = convertWhereClause(model, where);
|
|
1594
|
+
const result = await db[getEntityName(model)].deleteMany({
|
|
1595
|
+
where: whereClause
|
|
1596
|
+
});
|
|
1597
|
+
return result ? result.count : 0;
|
|
1547
1598
|
},
|
|
1548
1599
|
async transaction (data) {
|
|
1549
1600
|
const { callback } = data;
|
|
1550
|
-
return
|
|
1551
|
-
const
|
|
1601
|
+
return db.$transaction(async (tx)=>{
|
|
1602
|
+
const txClient = tx;
|
|
1603
|
+
const transactionAdapter = prismaAdapter(txClient, config)(options);
|
|
1552
1604
|
return await callback(transactionAdapter);
|
|
1553
1605
|
});
|
|
1554
1606
|
},
|
|
1555
1607
|
options: config
|
|
1556
1608
|
};
|
|
1557
1609
|
};
|
|
1558
|
-
function dialect_getDatabaseType(db) {
|
|
1559
|
-
if (!db) return null;
|
|
1560
|
-
if ('dialect' in db) return dialect_getDatabaseType(db.dialect);
|
|
1561
|
-
if (db && 'object' == typeof db && 'createDriver' in db) {
|
|
1562
|
-
if (db instanceof __WEBPACK_EXTERNAL_MODULE_kysely__.SqliteDialect) return 'sqlite';
|
|
1563
|
-
if (db instanceof __WEBPACK_EXTERNAL_MODULE_kysely__.MysqlDialect) return 'mysql';
|
|
1564
|
-
if (db instanceof __WEBPACK_EXTERNAL_MODULE_kysely__.PostgresDialect) return 'postgres';
|
|
1565
|
-
if (db instanceof __WEBPACK_EXTERNAL_MODULE_kysely__.MssqlDialect) return 'mssql';
|
|
1566
|
-
}
|
|
1567
|
-
if (db && 'object' == typeof db && 'aggregate' in db) return 'sqlite';
|
|
1568
|
-
if (db && 'object' == typeof db && 'getConnection' in db) return 'mysql';
|
|
1569
|
-
if (db && 'object' == typeof db && 'connect' in db) return 'postgres';
|
|
1570
|
-
return null;
|
|
1571
|
-
}
|
|
1572
|
-
const createKyselyAdapter = async (config)=>{
|
|
1573
|
-
const db = config.database;
|
|
1574
|
-
if (!db) return {
|
|
1575
|
-
kysely: null,
|
|
1576
|
-
databaseType: null
|
|
1577
|
-
};
|
|
1578
|
-
if (db && 'object' == typeof db && 'db' in db) {
|
|
1579
|
-
const kyselyConfig = db;
|
|
1580
|
-
return {
|
|
1581
|
-
kysely: kyselyConfig.db,
|
|
1582
|
-
databaseType: kyselyConfig.type
|
|
1583
|
-
};
|
|
1584
|
-
}
|
|
1585
|
-
if (db && 'object' == typeof db && 'dialect' in db) {
|
|
1586
|
-
const dialectConfig = db;
|
|
1587
|
-
return {
|
|
1588
|
-
kysely: new __WEBPACK_EXTERNAL_MODULE_kysely__.Kysely({
|
|
1589
|
-
dialect: dialectConfig.dialect
|
|
1590
|
-
}),
|
|
1591
|
-
databaseType: dialectConfig.type
|
|
1592
|
-
};
|
|
1593
|
-
}
|
|
1594
|
-
let dialect;
|
|
1595
|
-
const databaseType = dialect_getDatabaseType(db);
|
|
1596
|
-
if (db && 'object' == typeof db && 'createDriver' in db) dialect = db;
|
|
1597
|
-
if (db && 'object' == typeof db && 'aggregate' in db) dialect = new __WEBPACK_EXTERNAL_MODULE_kysely__.SqliteDialect({
|
|
1598
|
-
database: db
|
|
1599
|
-
});
|
|
1600
|
-
if (db && 'object' == typeof db && 'getConnection' in db) dialect = new __WEBPACK_EXTERNAL_MODULE_kysely__.MysqlDialect({
|
|
1601
|
-
pool: db
|
|
1602
|
-
});
|
|
1603
|
-
if (db && 'object' == typeof db && 'connect' in db) dialect = new __WEBPACK_EXTERNAL_MODULE_kysely__.PostgresDialect({
|
|
1604
|
-
pool: db
|
|
1605
|
-
});
|
|
1606
|
-
return {
|
|
1607
|
-
kysely: dialect ? new __WEBPACK_EXTERNAL_MODULE_kysely__.Kysely({
|
|
1608
|
-
dialect
|
|
1609
|
-
}) : null,
|
|
1610
|
-
databaseType
|
|
1611
|
-
};
|
|
1612
|
-
};
|
|
1613
|
-
let globalLogger;
|
|
1614
|
-
function getLogger(options) {
|
|
1615
|
-
if (!globalLogger) globalLogger = (0, __WEBPACK_EXTERNAL_MODULE__doubletie_logger_91c58a8f__.createLogger)({
|
|
1616
|
-
level: 'info',
|
|
1617
|
-
appName: 'c15t',
|
|
1618
|
-
...options
|
|
1619
|
-
});
|
|
1620
|
-
return globalLogger;
|
|
1621
|
-
}
|
|
1622
|
-
async function getAdapter(options) {
|
|
1623
|
-
const logger = getLogger({
|
|
1624
|
-
appName: options.appName ?? 'c15t',
|
|
1625
|
-
...options.logger
|
|
1626
|
-
});
|
|
1627
|
-
if (!options.database) {
|
|
1628
|
-
const tables = getConsentTables(options);
|
|
1629
|
-
const memoryDB = Object.keys(tables).reduce((acc, key)=>{
|
|
1630
|
-
acc[key] = [];
|
|
1631
|
-
return acc;
|
|
1632
|
-
}, {});
|
|
1633
|
-
logger.warn('No database configuration provided. Using memory adapter in development');
|
|
1634
|
-
return memoryAdapter(memoryDB)(options);
|
|
1635
|
-
}
|
|
1636
|
-
if ('function' == typeof options.database) return options.database(options);
|
|
1637
|
-
const { kysely, databaseType } = await createKyselyAdapter(options);
|
|
1638
|
-
if (!kysely) throw new error_class_DoubleTieError('Failed to initialize database adapter', {
|
|
1639
|
-
code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
1640
|
-
status: 500
|
|
1641
|
-
});
|
|
1642
|
-
return kyselyAdapter(kysely, {
|
|
1643
|
-
type: databaseType || 'sqlite'
|
|
1644
|
-
})(options);
|
|
1645
|
-
}
|
|
1646
1610
|
const kysely_adapter_createEntityTransformer = (db, options, config)=>{
|
|
1647
1611
|
const schema = getConsentTables(options);
|
|
1648
1612
|
function getField(model, field) {
|
|
@@ -1981,4 +1945,28 @@ const kyselyAdapter = (db, config)=>(opts)=>{
|
|
|
1981
1945
|
options: config
|
|
1982
1946
|
};
|
|
1983
1947
|
};
|
|
1948
|
+
async function getAdapter(options) {
|
|
1949
|
+
const logger = getLogger({
|
|
1950
|
+
appName: options.appName ?? 'c15t',
|
|
1951
|
+
...options.logger
|
|
1952
|
+
});
|
|
1953
|
+
if (!options.database) {
|
|
1954
|
+
const tables = getConsentTables(options);
|
|
1955
|
+
const memoryDB = Object.keys(tables).reduce((acc, key)=>{
|
|
1956
|
+
acc[key] = [];
|
|
1957
|
+
return acc;
|
|
1958
|
+
}, {});
|
|
1959
|
+
logger.warn('No database configuration provided. Using memory adapter in development');
|
|
1960
|
+
return memoryAdapter(memoryDB)(options);
|
|
1961
|
+
}
|
|
1962
|
+
if ('function' == typeof options.database) return options.database(options);
|
|
1963
|
+
const { kysely, databaseType } = await createKyselyAdapter(options);
|
|
1964
|
+
if (!kysely) throw new error_class_DoubleTieError('Failed to initialize database adapter', {
|
|
1965
|
+
code: error_codes_ERROR_CODES.INTERNAL_SERVER_ERROR,
|
|
1966
|
+
status: 500
|
|
1967
|
+
});
|
|
1968
|
+
return kyselyAdapter(kysely, {
|
|
1969
|
+
type: databaseType || 'sqlite'
|
|
1970
|
+
})(options);
|
|
1971
|
+
}
|
|
1984
1972
|
export { applyDefaultValue, createKyselyAdapter, drizzleAdapter, getAdapter, kyselyAdapter, memoryAdapter, prismaAdapter };
|