@c15t/backend 0.0.1-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +11 -0
- package/.turbo/turbo-check-types.log +5 -0
- package/.turbo/turbo-fmt.log +7 -0
- package/.turbo/turbo-lint.log +6 -0
- package/.turbo/turbo-test.log +26 -0
- package/README-next.md +223 -0
- package/README.md +164 -0
- package/dist/api/call.d.ts +176 -0
- package/dist/api/call.d.ts.map +1 -0
- package/dist/api/index.d.ts +935 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/middlewares/index.d.ts +39 -0
- package/dist/api/middlewares/index.d.ts.map +1 -0
- package/dist/api/middlewares/origin-check.d.ts +82 -0
- package/dist/api/middlewares/origin-check.d.ts.map +1 -0
- package/dist/api/middlewares/validate-context.d.ts +38 -0
- package/dist/api/middlewares/validate-context.d.ts.map +1 -0
- package/dist/api/routes/__tests__/consent.test.d.ts +2 -0
- package/dist/api/routes/__tests__/consent.test.d.ts.map +1 -0
- package/dist/api/routes/__tests__/status.test.d.ts +2 -0
- package/dist/api/routes/__tests__/status.test.d.ts.map +1 -0
- package/dist/api/routes/error.d.ts +57 -0
- package/dist/api/routes/error.d.ts.map +1 -0
- package/dist/api/routes/generate-consent-receipt.d.ts +130 -0
- package/dist/api/routes/generate-consent-receipt.d.ts.map +1 -0
- package/dist/api/routes/get-consent-history.d.ts +133 -0
- package/dist/api/routes/get-consent-history.d.ts.map +1 -0
- package/dist/api/routes/get-consent-policy.d.ts +164 -0
- package/dist/api/routes/get-consent-policy.d.ts.map +1 -0
- package/dist/api/routes/get-consent.d.ts +148 -0
- package/dist/api/routes/get-consent.d.ts.map +1 -0
- package/dist/api/routes/index.d.ts +339 -0
- package/dist/api/routes/index.d.ts.map +1 -0
- package/dist/api/routes/ok.d.ts +87 -0
- package/dist/api/routes/ok.d.ts.map +1 -0
- package/dist/api/routes/set-consent.d.ts +245 -0
- package/dist/api/routes/set-consent.d.ts.map +1 -0
- package/dist/api/routes/show-consent-banner.d.ts +127 -0
- package/dist/api/routes/show-consent-banner.d.ts.map +1 -0
- package/dist/api/routes/status.d.ts +61 -0
- package/dist/api/routes/status.d.ts.map +1 -0
- package/dist/api/routes/verify-consent.d.ts +179 -0
- package/dist/api/routes/verify-consent.d.ts.map +1 -0
- package/dist/api/routes/withdraw-consent.d.ts +194 -0
- package/dist/api/routes/withdraw-consent.d.ts.map +1 -0
- package/dist/api/to-endpoints.d.ts +35 -0
- package/dist/api/to-endpoints.d.ts.map +1 -0
- package/dist/client/index.cjs +139 -0
- package/dist/client/index.d.ts +203 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +106 -0
- package/dist/client/types.d.ts +431 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/core.d.ts +124 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.test.d.ts +2 -0
- package/dist/core.test.d.ts.map +1 -0
- package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts +122 -0
- package/dist/db/adapters/drizzle-adapter/drizzle-adapter.d.ts.map +1 -0
- package/dist/db/adapters/drizzle-adapter/index.d.ts +2 -0
- package/dist/db/adapters/drizzle-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/drizzle.cjs +1531 -0
- package/dist/db/adapters/drizzle.js +1489 -0
- package/dist/db/adapters/kysely-adapter/dialect.d.ts +72 -0
- package/dist/db/adapters/kysely-adapter/dialect.d.ts.map +1 -0
- package/dist/db/adapters/kysely-adapter/index.d.ts +4 -0
- package/dist/db/adapters/kysely-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts +98 -0
- package/dist/db/adapters/kysely-adapter/kysely-adapter.d.ts.map +1 -0
- package/dist/db/adapters/kysely-adapter/types.d.ts +281 -0
- package/dist/db/adapters/kysely-adapter/types.d.ts.map +1 -0
- package/dist/db/adapters/kysely.cjs +1551 -0
- package/dist/db/adapters/kysely.js +1508 -0
- package/dist/db/adapters/memory-adapter/index.d.ts +2 -0
- package/dist/db/adapters/memory-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/memory-adapter/memory-adapter.d.ts +56 -0
- package/dist/db/adapters/memory-adapter/memory-adapter.d.ts.map +1 -0
- package/dist/db/adapters/memory.cjs +1391 -0
- package/dist/db/adapters/memory.js +1349 -0
- package/dist/db/adapters/prisma-adapter/index.d.ts +2 -0
- package/dist/db/adapters/prisma-adapter/index.d.ts.map +1 -0
- package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts +143 -0
- package/dist/db/adapters/prisma-adapter/prisma-adapter.d.ts.map +1 -0
- package/dist/db/adapters/prisma.cjs +1503 -0
- package/dist/db/adapters/prisma.js +1461 -0
- package/dist/db/adapters/types.d.ts +154 -0
- package/dist/db/adapters/types.d.ts.map +1 -0
- package/dist/db/adapters/utils.d.ts +36 -0
- package/dist/db/adapters/utils.d.ts.map +1 -0
- package/dist/db/core/fields/field-factory.d.ts +383 -0
- package/dist/db/core/fields/field-factory.d.ts.map +1 -0
- package/dist/db/core/fields/field-inference.d.ts +218 -0
- package/dist/db/core/fields/field-inference.d.ts.map +1 -0
- package/dist/db/core/fields/field-options-integration.d.ts +90 -0
- package/dist/db/core/fields/field-options-integration.d.ts.map +1 -0
- package/dist/db/core/fields/field-types.d.ts +182 -0
- package/dist/db/core/fields/field-types.d.ts.map +1 -0
- package/dist/db/core/fields/id-generator.d.ts +19 -0
- package/dist/db/core/fields/id-generator.d.ts.map +1 -0
- package/dist/db/core/fields/index.d.ts +8 -0
- package/dist/db/core/fields/index.d.ts.map +1 -0
- package/dist/db/core/fields/superjson-utils.d.ts +34 -0
- package/dist/db/core/fields/superjson-utils.d.ts.map +1 -0
- package/dist/db/core/fields/zod-fields.d.ts +1011 -0
- package/dist/db/core/fields/zod-fields.d.ts.map +1 -0
- package/dist/db/core/get-schema.d.ts +36 -0
- package/dist/db/core/get-schema.d.ts.map +1 -0
- package/dist/db/core/types.d.ts +41 -0
- package/dist/db/core/types.d.ts.map +1 -0
- package/dist/db/create-registry.d.ts +760 -0
- package/dist/db/create-registry.d.ts.map +1 -0
- package/dist/db/hooks/create-hooks.d.ts +32 -0
- package/dist/db/hooks/create-hooks.d.ts.map +1 -0
- package/dist/db/hooks/index.d.ts +40 -0
- package/dist/db/hooks/index.d.ts.map +1 -0
- package/dist/db/hooks/types.d.ts +133 -0
- package/dist/db/hooks/types.d.ts.map +1 -0
- package/dist/db/hooks/update-hooks.d.ts +33 -0
- package/dist/db/hooks/update-hooks.d.ts.map +1 -0
- package/dist/db/hooks/update-many-hooks.d.ts +55 -0
- package/dist/db/hooks/update-many-hooks.d.ts.map +1 -0
- package/dist/db/hooks/utils.d.ts +62 -0
- package/dist/db/hooks/utils.d.ts.map +1 -0
- package/dist/db/hooks/with-hooks-factory.d.ts +33 -0
- package/dist/db/hooks/with-hooks-factory.d.ts.map +1 -0
- package/dist/db/index.cjs +2458 -0
- package/dist/db/index.d.ts +11 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +2404 -0
- package/dist/db/migration/get-migration.d.ts +32 -0
- package/dist/db/migration/get-migration.d.ts.map +1 -0
- package/dist/db/migration/get-schema/get-schema.d.ts +27 -0
- package/dist/db/migration/get-schema/get-schema.d.ts.map +1 -0
- package/dist/db/migration/get-schema/index.d.ts +21 -0
- package/dist/db/migration/get-schema/index.d.ts.map +1 -0
- package/dist/db/migration/get-schema/process-fields.d.ts +16 -0
- package/dist/db/migration/get-schema/process-fields.d.ts.map +1 -0
- package/dist/db/migration/get-schema/process-tables.d.ts +13 -0
- package/dist/db/migration/get-schema/process-tables.d.ts.map +1 -0
- package/dist/db/migration/get-schema/types.d.ts +17 -0
- package/dist/db/migration/get-schema/types.d.ts.map +1 -0
- package/dist/db/migration/index.cjs +1613 -0
- package/dist/db/migration/index.d.ts +14 -0
- package/dist/db/migration/index.d.ts.map +1 -0
- package/dist/db/migration/index.js +1571 -0
- package/dist/db/migration/migration-builders.d.ts +28 -0
- package/dist/db/migration/migration-builders.d.ts.map +1 -0
- package/dist/db/migration/migration-execution.d.ts +12 -0
- package/dist/db/migration/migration-execution.d.ts.map +1 -0
- package/dist/db/migration/schema-comparison.d.ts +54 -0
- package/dist/db/migration/schema-comparison.d.ts.map +1 -0
- package/dist/db/migration/type-mapping.d.ts +86 -0
- package/dist/db/migration/type-mapping.d.ts.map +1 -0
- package/dist/db/migration/types.d.ts +37 -0
- package/dist/db/migration/types.d.ts.map +1 -0
- package/dist/db/schema/audit-log/index.d.ts +4 -0
- package/dist/db/schema/audit-log/index.d.ts.map +1 -0
- package/dist/db/schema/audit-log/registry.d.ts +128 -0
- package/dist/db/schema/audit-log/registry.d.ts.map +1 -0
- package/dist/db/schema/audit-log/schema.d.ts +67 -0
- package/dist/db/schema/audit-log/schema.d.ts.map +1 -0
- package/dist/db/schema/audit-log/table.d.ts +175 -0
- package/dist/db/schema/audit-log/table.d.ts.map +1 -0
- package/dist/db/schema/audit-log/types.d.ts +29 -0
- package/dist/db/schema/audit-log/types.d.ts.map +1 -0
- package/dist/db/schema/consent/index.d.ts +4 -0
- package/dist/db/schema/consent/index.d.ts.map +1 -0
- package/dist/db/schema/consent/registry.d.ts +318 -0
- package/dist/db/schema/consent/registry.d.ts.map +1 -0
- package/dist/db/schema/consent/schema.d.ts +135 -0
- package/dist/db/schema/consent/schema.d.ts.map +1 -0
- package/dist/db/schema/consent/table.d.ts +245 -0
- package/dist/db/schema/consent/table.d.ts.map +1 -0
- package/dist/db/schema/consent/types.d.ts +37 -0
- package/dist/db/schema/consent/types.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/index.d.ts +4 -0
- package/dist/db/schema/consent-geo-location/index.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/registry.d.ts +96 -0
- package/dist/db/schema/consent-geo-location/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/schema.d.ts +71 -0
- package/dist/db/schema/consent-geo-location/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/table.d.ts +167 -0
- package/dist/db/schema/consent-geo-location/table.d.ts.map +1 -0
- package/dist/db/schema/consent-geo-location/types.d.ts +21 -0
- package/dist/db/schema/consent-geo-location/types.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/index.d.ts +4 -0
- package/dist/db/schema/consent-policy/index.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/registry.d.ts +186 -0
- package/dist/db/schema/consent-policy/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/schema.d.ts +68 -0
- package/dist/db/schema/consent-policy/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/table.d.ts +147 -0
- package/dist/db/schema/consent-policy/table.d.ts.map +1 -0
- package/dist/db/schema/consent-policy/types.d.ts +28 -0
- package/dist/db/schema/consent-policy/types.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/index.d.ts +4 -0
- package/dist/db/schema/consent-purpose/index.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/registry.d.ts +136 -0
- package/dist/db/schema/consent-purpose/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/schema.d.ts +79 -0
- package/dist/db/schema/consent-purpose/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/table.d.ts +161 -0
- package/dist/db/schema/consent-purpose/table.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose/types.d.ts +16 -0
- package/dist/db/schema/consent-purpose/types.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/index.d.ts +4 -0
- package/dist/db/schema/consent-purpose-junction/index.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/registry.d.ts +109 -0
- package/dist/db/schema/consent-purpose-junction/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/schema.d.ts +57 -0
- package/dist/db/schema/consent-purpose-junction/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/table.d.ts +138 -0
- package/dist/db/schema/consent-purpose-junction/table.d.ts.map +1 -0
- package/dist/db/schema/consent-purpose-junction/types.d.ts +14 -0
- package/dist/db/schema/consent-purpose-junction/types.d.ts.map +1 -0
- package/dist/db/schema/consent-record/index.d.ts +4 -0
- package/dist/db/schema/consent-record/index.d.ts.map +1 -0
- package/dist/db/schema/consent-record/registry.d.ts +119 -0
- package/dist/db/schema/consent-record/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-record/schema.d.ts +57 -0
- package/dist/db/schema/consent-record/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-record/table.d.ts +123 -0
- package/dist/db/schema/consent-record/table.d.ts.map +1 -0
- package/dist/db/schema/consent-record/types.d.ts +21 -0
- package/dist/db/schema/consent-record/types.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/index.d.ts +4 -0
- package/dist/db/schema/consent-withdrawal/index.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/registry.d.ts +134 -0
- package/dist/db/schema/consent-withdrawal/registry.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/schema.d.ts +67 -0
- package/dist/db/schema/consent-withdrawal/schema.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/table.d.ts +170 -0
- package/dist/db/schema/consent-withdrawal/table.d.ts.map +1 -0
- package/dist/db/schema/consent-withdrawal/types.d.ts +28 -0
- package/dist/db/schema/consent-withdrawal/types.d.ts.map +1 -0
- package/dist/db/schema/definition.d.ts +1100 -0
- package/dist/db/schema/definition.d.ts.map +1 -0
- package/dist/db/schema/domain/index.d.ts +4 -0
- package/dist/db/schema/domain/index.d.ts.map +1 -0
- package/dist/db/schema/domain/registry.d.ts +169 -0
- package/dist/db/schema/domain/registry.d.ts.map +1 -0
- package/dist/db/schema/domain/schema.d.ts +60 -0
- package/dist/db/schema/domain/schema.d.ts.map +1 -0
- package/dist/db/schema/domain/table.d.ts +140 -0
- package/dist/db/schema/domain/table.d.ts.map +1 -0
- package/dist/db/schema/domain/types.d.ts +27 -0
- package/dist/db/schema/domain/types.d.ts.map +1 -0
- package/dist/db/schema/geo-location/index.d.ts +4 -0
- package/dist/db/schema/geo-location/index.d.ts.map +1 -0
- package/dist/db/schema/geo-location/registry.d.ts +114 -0
- package/dist/db/schema/geo-location/registry.d.ts.map +1 -0
- package/dist/db/schema/geo-location/schema.d.ts +58 -0
- package/dist/db/schema/geo-location/schema.d.ts.map +1 -0
- package/dist/db/schema/geo-location/table.d.ts +132 -0
- package/dist/db/schema/geo-location/table.d.ts.map +1 -0
- package/dist/db/schema/geo-location/types.d.ts +17 -0
- package/dist/db/schema/geo-location/types.d.ts.map +1 -0
- package/dist/db/schema/index.d.ts +85 -0
- package/dist/db/schema/index.d.ts.map +1 -0
- package/dist/db/schema/parser.d.ts +183 -0
- package/dist/db/schema/parser.d.ts.map +1 -0
- package/dist/db/schema/schemas.d.ts +383 -0
- package/dist/db/schema/schemas.d.ts.map +1 -0
- package/dist/db/schema/subject/index.d.ts +4 -0
- package/dist/db/schema/subject/index.d.ts.map +1 -0
- package/dist/db/schema/subject/registry.d.ts +141 -0
- package/dist/db/schema/subject/registry.d.ts.map +1 -0
- package/dist/db/schema/subject/schema.d.ts +56 -0
- package/dist/db/schema/subject/schema.d.ts.map +1 -0
- package/dist/db/schema/subject/table.d.ts +136 -0
- package/dist/db/schema/subject/table.d.ts.map +1 -0
- package/dist/db/schema/subject/types.d.ts +22 -0
- package/dist/db/schema/subject/types.d.ts.map +1 -0
- package/dist/db/schema/types.d.ts +136 -0
- package/dist/db/schema/types.d.ts.map +1 -0
- package/dist/db/utils/adapter-factory.d.ts +21 -0
- package/dist/db/utils/adapter-factory.d.ts.map +1 -0
- package/dist/db/utils/index.d.ts +10 -0
- package/dist/db/utils/index.d.ts.map +1 -0
- package/dist/db/utils.d.ts +4 -0
- package/dist/db/utils.d.ts.map +1 -0
- package/dist/error/codes.cjs +68 -0
- package/dist/error/codes.d.ts +175 -0
- package/dist/error/codes.d.ts.map +1 -0
- package/dist/error/codes.js +35 -0
- package/dist/error/error.d.ts +79 -0
- package/dist/error/error.d.ts.map +1 -0
- package/dist/error/index.cjs +172 -0
- package/dist/error/index.d.ts +9 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +129 -0
- package/dist/error/logging.d.ts +25 -0
- package/dist/error/logging.d.ts.map +1 -0
- package/dist/error/pipeline.d.ts +19 -0
- package/dist/error/pipeline.d.ts.map +1 -0
- package/dist/error/recovery.d.ts +22 -0
- package/dist/error/recovery.d.ts.map +1 -0
- package/dist/error/results.d.ts +56 -0
- package/dist/error/results.d.ts.map +1 -0
- package/dist/index.cjs +4777 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4708 -0
- package/dist/init.d.ts +52 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.test.d.ts +2 -0
- package/dist/init.test.d.ts.map +1 -0
- package/dist/integrations/index.cjs +281 -0
- package/dist/integrations/index.d.ts +7 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +248 -0
- package/dist/integrations/next.cjs +131 -0
- package/dist/integrations/next.d.ts +29 -0
- package/dist/integrations/next.d.ts.map +1 -0
- package/dist/integrations/next.js +99 -0
- package/dist/integrations/react.cjs +182 -0
- package/dist/integrations/react.d.ts +257 -0
- package/dist/integrations/react.d.ts.map +1 -0
- package/dist/integrations/react.js +150 -0
- package/dist/plugins/geo/index.d.ts +2 -0
- package/dist/plugins/geo/index.d.ts.map +1 -0
- package/dist/test/utils.d.ts +65 -0
- package/dist/test/utils.d.ts.map +1 -0
- package/dist/types/api.d.ts +89 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/context.d.ts +205 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/helper.d.ts +78 -0
- package/dist/types/helper.d.ts.map +1 -0
- package/dist/types/index.cjs +19 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +0 -0
- package/dist/types/options.d.ts +172 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/plugins.d.ts +442 -0
- package/dist/types/plugins.d.ts.map +1 -0
- package/dist/utils/env.d.ts +77 -0
- package/dist/utils/env.d.ts.map +1 -0
- package/dist/utils/hide-metadata.d.ts +22 -0
- package/dist/utils/hide-metadata.d.ts.map +1 -0
- package/dist/utils/index.cjs +268 -0
- package/dist/utils/index.d.ts +18 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +210 -0
- package/dist/utils/ip.d.ts +10 -0
- package/dist/utils/ip.d.ts.map +1 -0
- package/dist/utils/json.d.ts +14 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +108 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/url.d.ts +87 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/wildcard.d.ts +46 -0
- package/dist/utils/wildcard.d.ts.map +1 -0
- package/knip.json +37 -0
- package/package.json +146 -0
- package/rslib.config.ts +104 -0
- package/src/api/call.ts +177 -0
- package/src/api/index.ts +303 -0
- package/src/api/middlewares/index.ts +38 -0
- package/src/api/middlewares/origin-check.ts +260 -0
- package/src/api/middlewares/validate-context.ts +175 -0
- package/src/api/routes/__tests__/consent.test.ts +270 -0
- package/src/api/routes/__tests__/status.test.ts +36 -0
- package/src/api/routes/error.ts +130 -0
- package/src/api/routes/generate-consent-receipt.ts +244 -0
- package/src/api/routes/get-consent-history.ts +128 -0
- package/src/api/routes/get-consent-policy.ts +327 -0
- package/src/api/routes/get-consent.ts +230 -0
- package/src/api/routes/index.ts +12 -0
- package/src/api/routes/ok.ts +45 -0
- package/src/api/routes/set-consent.ts +328 -0
- package/src/api/routes/show-consent-banner.ts +149 -0
- package/src/api/routes/status.ts +62 -0
- package/src/api/routes/verify-consent.ts +272 -0
- package/src/api/routes/withdraw-consent.ts +293 -0
- package/src/api/to-endpoints.ts +371 -0
- package/src/client/index.ts +471 -0
- package/src/client/types.ts +458 -0
- package/src/core.test.ts +303 -0
- package/src/core.ts +267 -0
- package/src/db/adapters/drizzle-adapter/drizzle-adapter.ts +711 -0
- package/src/db/adapters/drizzle-adapter/index.ts +1 -0
- package/src/db/adapters/kysely-adapter/dialect.ts +192 -0
- package/src/db/adapters/kysely-adapter/index.ts +3 -0
- package/src/db/adapters/kysely-adapter/kysely-adapter.ts +1168 -0
- package/src/db/adapters/kysely-adapter/types.ts +307 -0
- package/src/db/adapters/memory-adapter/index.ts +1 -0
- package/src/db/adapters/memory-adapter/memory-adapter.ts +648 -0
- package/src/db/adapters/prisma-adapter/index.ts +1 -0
- package/src/db/adapters/prisma-adapter/prisma-adapter.ts +586 -0
- package/src/db/adapters/types.ts +203 -0
- package/src/db/adapters/utils.ts +51 -0
- package/src/db/core/fields/field-factory.ts +804 -0
- package/src/db/core/fields/field-inference.ts +298 -0
- package/src/db/core/fields/field-options-integration.ts +135 -0
- package/src/db/core/fields/field-types.ts +233 -0
- package/src/db/core/fields/id-generator.ts +57 -0
- package/src/db/core/fields/index.ts +56 -0
- package/src/db/core/fields/superjson-utils.ts +155 -0
- package/src/db/core/fields/zod-fields.ts +269 -0
- package/src/db/core/get-schema.ts +102 -0
- package/src/db/core/types.ts +52 -0
- package/src/db/create-registry.ts +31 -0
- package/src/db/hooks/create-hooks.ts +88 -0
- package/src/db/hooks/index.ts +39 -0
- package/src/db/hooks/types.ts +164 -0
- package/src/db/hooks/update-hooks.ts +91 -0
- package/src/db/hooks/update-many-hooks.ts +176 -0
- package/src/db/hooks/utils.ts +151 -0
- package/src/db/hooks/with-hooks-factory.ts +68 -0
- package/src/db/index.ts +32 -0
- package/src/db/migration/get-migration.ts +89 -0
- package/src/db/migration/get-schema/get-schema.ts +44 -0
- package/src/db/migration/get-schema/index.ts +20 -0
- package/src/db/migration/get-schema/process-fields.ts +66 -0
- package/src/db/migration/get-schema/process-tables.ts +68 -0
- package/src/db/migration/get-schema/types.ts +18 -0
- package/src/db/migration/index.ts +18 -0
- package/src/db/migration/migration-builders.ts +170 -0
- package/src/db/migration/migration-execution.ts +79 -0
- package/src/db/migration/schema-comparison.ts +216 -0
- package/src/db/migration/type-mapping.ts +255 -0
- package/src/db/migration/types.ts +46 -0
- package/src/db/schema/audit-log/index.ts +3 -0
- package/src/db/schema/audit-log/registry.ts +228 -0
- package/src/db/schema/audit-log/schema.ts +46 -0
- package/src/db/schema/audit-log/table.ts +185 -0
- package/src/db/schema/audit-log/types.ts +29 -0
- package/src/db/schema/consent/index.ts +3 -0
- package/src/db/schema/consent/registry.ts +381 -0
- package/src/db/schema/consent/schema.ts +65 -0
- package/src/db/schema/consent/table.ts +220 -0
- package/src/db/schema/consent/types.ts +39 -0
- package/src/db/schema/consent-geo-location/index.ts +3 -0
- package/src/db/schema/consent-geo-location/registry.ts +124 -0
- package/src/db/schema/consent-geo-location/schema.ts +51 -0
- package/src/db/schema/consent-geo-location/table.ts +169 -0
- package/src/db/schema/consent-geo-location/types.ts +21 -0
- package/src/db/schema/consent-policy/index.ts +3 -0
- package/src/db/schema/consent-policy/registry.ts +313 -0
- package/src/db/schema/consent-policy/schema.ts +47 -0
- package/src/db/schema/consent-policy/table.ts +141 -0
- package/src/db/schema/consent-policy/types.ts +28 -0
- package/src/db/schema/consent-purpose/index.ts +3 -0
- package/src/db/schema/consent-purpose/registry.ts +188 -0
- package/src/db/schema/consent-purpose/schema.ts +58 -0
- package/src/db/schema/consent-purpose/table.ts +154 -0
- package/src/db/schema/consent-purpose/types.ts +16 -0
- package/src/db/schema/consent-purpose-junction/index.ts +3 -0
- package/src/db/schema/consent-purpose-junction/registry.ts +189 -0
- package/src/db/schema/consent-purpose-junction/schema.ts +49 -0
- package/src/db/schema/consent-purpose-junction/table.ts +142 -0
- package/src/db/schema/consent-purpose-junction/types.ts +14 -0
- package/src/db/schema/consent-record/index.ts +3 -0
- package/src/db/schema/consent-record/registry.ts +209 -0
- package/src/db/schema/consent-record/schema.ts +42 -0
- package/src/db/schema/consent-record/table.ts +124 -0
- package/src/db/schema/consent-record/types.ts +21 -0
- package/src/db/schema/consent-withdrawal/index.ts +3 -0
- package/src/db/schema/consent-withdrawal/registry.ts +219 -0
- package/src/db/schema/consent-withdrawal/schema.ts +48 -0
- package/src/db/schema/consent-withdrawal/table.ts +181 -0
- package/src/db/schema/consent-withdrawal/types.ts +29 -0
- package/src/db/schema/definition.ts +196 -0
- package/src/db/schema/domain/index.ts +3 -0
- package/src/db/schema/domain/registry.ts +272 -0
- package/src/db/schema/domain/schema.ts +43 -0
- package/src/db/schema/domain/table.ts +137 -0
- package/src/db/schema/domain/types.ts +27 -0
- package/src/db/schema/geo-location/index.ts +3 -0
- package/src/db/schema/geo-location/registry.ts +159 -0
- package/src/db/schema/geo-location/schema.ts +45 -0
- package/src/db/schema/geo-location/table.ts +148 -0
- package/src/db/schema/geo-location/types.ts +18 -0
- package/src/db/schema/index.ts +96 -0
- package/src/db/schema/parser.ts +417 -0
- package/src/db/schema/schemas.ts +35 -0
- package/src/db/schema/subject/index.ts +3 -0
- package/src/db/schema/subject/registry.ts +371 -0
- package/src/db/schema/subject/schema.ts +41 -0
- package/src/db/schema/subject/table.ts +139 -0
- package/src/db/schema/subject/types.ts +22 -0
- package/src/db/schema/types.ts +154 -0
- package/src/db/utils/adapter-factory.ts +64 -0
- package/src/db/utils/index.ts +10 -0
- package/src/db/utils.ts +42 -0
- package/src/docs/ADVANCED_JSON_HANDLING.md +99 -0
- package/src/docs/neverthrow.md +171 -0
- package/src/error/codes.ts +201 -0
- package/src/error/error.ts +145 -0
- package/src/error/index.ts +23 -0
- package/src/error/logging.ts +52 -0
- package/src/error/pipeline.ts +57 -0
- package/src/error/recovery.ts +45 -0
- package/src/error/results.ts +100 -0
- package/src/index.ts +79 -0
- package/src/init.test.ts +235 -0
- package/src/init.ts +261 -0
- package/src/integrations/index.ts +10 -0
- package/src/integrations/next.ts +136 -0
- package/src/integrations/react.ts +567 -0
- package/src/plugins/geo/index.ts +563 -0
- package/src/test/utils.ts +244 -0
- package/src/types/api.ts +101 -0
- package/src/types/context.ts +235 -0
- package/src/types/helper.ts +87 -0
- package/src/types/index.ts +5 -0
- package/src/types/options.ts +189 -0
- package/src/types/plugins.ts +538 -0
- package/src/utils/env.ts +103 -0
- package/src/utils/hide-metadata.ts +21 -0
- package/src/utils/index.ts +17 -0
- package/src/utils/ip.ts +45 -0
- package/src/utils/json.ts +19 -0
- package/src/utils/logger.ts +252 -0
- package/src/utils/url.ts +194 -0
- package/src/utils/wildcard.ts +253 -0
- package/tsconfig.json +12 -0
- package/vitest.config.ts +14 -0
package/src/utils/env.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment variables object
|
|
3
|
+
*
|
|
4
|
+
* Provides access to environment variables in a way that works in both
|
|
5
|
+
* browser and Node.js environments. In Node.js, this will be process.env,
|
|
6
|
+
* and in browsers, it will be an empty object.
|
|
7
|
+
*
|
|
8
|
+
* @returns An object containing environment variables accessible in the current runtime
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* // Access an environment variable
|
|
13
|
+
* const apiKey = env.API_KEY;
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export const env = typeof process !== 'undefined' ? process.env : {};
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Determines if the application is running in production mode
|
|
20
|
+
*
|
|
21
|
+
* Checks if NODE_ENV is set to 'production'. This is useful for
|
|
22
|
+
* conditionally enabling or disabling features based on the environment.
|
|
23
|
+
*
|
|
24
|
+
* @returns Boolean indicating whether the application is running in production mode
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```ts
|
|
28
|
+
* // Conditionally execute code based on environment
|
|
29
|
+
* if (isProduction) {
|
|
30
|
+
* // Production-only code
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export const isProduction =
|
|
35
|
+
typeof process !== 'undefined' && process.env.NODE_ENV === 'production';
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Determines if the application is running in development mode
|
|
39
|
+
*
|
|
40
|
+
* Checks if NODE_ENV is set to 'development'. This is useful for
|
|
41
|
+
* conditionally enabling debugging features in development environments.
|
|
42
|
+
*
|
|
43
|
+
* @returns Boolean indicating whether the application is running in development mode
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* // Enable development-only features
|
|
48
|
+
* if (isDevelopment) {
|
|
49
|
+
* enableDebugTools();
|
|
50
|
+
* }
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export const isDevelopment =
|
|
54
|
+
typeof process !== 'undefined' && process.env.NODE_ENV === 'development';
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Converts a string or boolean value to a boolean
|
|
58
|
+
*
|
|
59
|
+
* @param val - The value to convert to boolean
|
|
60
|
+
* @returns `false` if the value is falsy or the string 'false', otherwise `true`
|
|
61
|
+
*
|
|
62
|
+
* @example
|
|
63
|
+
* ```ts
|
|
64
|
+
* toBoolean('true'); // true
|
|
65
|
+
* toBoolean('false'); // false
|
|
66
|
+
* toBoolean(undefined); // false
|
|
67
|
+
* toBoolean(true); // true
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @internal Used for environment variable parsing
|
|
71
|
+
*/
|
|
72
|
+
function toBoolean(val: boolean | string | undefined) {
|
|
73
|
+
return val ? val !== 'false' : false;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* The current Node.js environment value
|
|
78
|
+
*
|
|
79
|
+
* Retrieves the NODE_ENV environment variable value if available,
|
|
80
|
+
* otherwise returns an empty string.
|
|
81
|
+
*
|
|
82
|
+
* @returns The current NODE_ENV value or empty string if not set
|
|
83
|
+
*/
|
|
84
|
+
export const nodeENV =
|
|
85
|
+
(typeof process !== 'undefined' && process.env && process.env.NODE_ENV) || '';
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Determines if the application is running in test mode
|
|
89
|
+
*
|
|
90
|
+
* Checks if NODE_ENV is set to 'test' or if the TEST environment
|
|
91
|
+
* variable is truthy and not 'false'.
|
|
92
|
+
*
|
|
93
|
+
* @returns Boolean indicating whether the application is running in test mode
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* // Skip expensive operations in tests
|
|
98
|
+
* if (!isTest) {
|
|
99
|
+
* runExpensiveOperation();
|
|
100
|
+
* }
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
export const isTest = nodeENV === 'test' || toBoolean(env.TEST);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Constant metadata flag to identify non-action objects
|
|
3
|
+
*
|
|
4
|
+
* This constant provides metadata that can be attached to objects to indicate
|
|
5
|
+
* they should not be treated as actions by the system. The value is explicitly
|
|
6
|
+
* typed as a const assertion to ensure type safety.
|
|
7
|
+
*
|
|
8
|
+
* @see Used to differentiate between actionable and non-actionable objects in the system
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* // Mark an object as not being an action
|
|
13
|
+
* const nonActionObject = {
|
|
14
|
+
* ...HIDE_METADATA,
|
|
15
|
+
* // other properties
|
|
16
|
+
* };
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export const HIDE_METADATA = {
|
|
20
|
+
isAction: false as const,
|
|
21
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* c15t Utility Functions
|
|
3
|
+
*
|
|
4
|
+
* This module serves as the main entry point for all utility functions used in the c15t
|
|
5
|
+
* consent management system. It re-exports utilities from specialized modules for easier access.
|
|
6
|
+
*
|
|
7
|
+
* Import utilities from this module for a cleaner import structure:
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { generateId, encrypt, formatDate } from '../utils';
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export * from './env';
|
|
14
|
+
export * from './hide-metadata';
|
|
15
|
+
export * from './logger';
|
|
16
|
+
export * from './url';
|
|
17
|
+
export * from './json';
|
package/src/utils/ip.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { C15TOptions } from '~/types';
|
|
2
|
+
import { isTest } from './env';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Gets the client IP address from request headers
|
|
6
|
+
*
|
|
7
|
+
* @param req - The request object or headers
|
|
8
|
+
* @param options - C15T options containing IP address configuration
|
|
9
|
+
* @returns The client IP address or null if tracking is disabled
|
|
10
|
+
*/
|
|
11
|
+
export function getIp(
|
|
12
|
+
req: Request | Headers,
|
|
13
|
+
options: C15TOptions
|
|
14
|
+
): string | null {
|
|
15
|
+
if (options.advanced?.ipAddress?.disableIpTracking) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const testIP = '127.0.0.1';
|
|
19
|
+
if (isTest) {
|
|
20
|
+
return testIP;
|
|
21
|
+
}
|
|
22
|
+
const ipHeaders = options.advanced?.ipAddress?.ipAddressHeaders;
|
|
23
|
+
const keys = ipHeaders || [
|
|
24
|
+
'x-client-ip',
|
|
25
|
+
'x-forwarded-for',
|
|
26
|
+
'cf-connecting-ip',
|
|
27
|
+
'fastly-client-ip',
|
|
28
|
+
'x-real-ip',
|
|
29
|
+
'x-cluster-client-ip',
|
|
30
|
+
'x-forwarded',
|
|
31
|
+
'forwarded-for',
|
|
32
|
+
'forwarded',
|
|
33
|
+
];
|
|
34
|
+
const headers = req instanceof Request ? req.headers : req;
|
|
35
|
+
for (const key of keys) {
|
|
36
|
+
const value = headers.get(key);
|
|
37
|
+
if (value) {
|
|
38
|
+
const ip = value.split(',')[0]?.trim();
|
|
39
|
+
if (ip) {
|
|
40
|
+
return ip;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SuperJSONValue } from 'node_modules/superjson/dist/types';
|
|
2
|
+
import superjson from 'superjson';
|
|
3
|
+
/**
|
|
4
|
+
* Parse a JSON string using SuperJSON
|
|
5
|
+
* @param json - The JSON string to parse
|
|
6
|
+
* @returns The parsed JSON value
|
|
7
|
+
*/
|
|
8
|
+
export function parseJson(json: SuperJSONValue) {
|
|
9
|
+
return superjson.parse(json);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Stringify a value using SuperJSON
|
|
14
|
+
* @param value - The value to stringify
|
|
15
|
+
* @returns The stringified value
|
|
16
|
+
*/
|
|
17
|
+
export function stringifyJson(value: SuperJSONValue) {
|
|
18
|
+
return superjson.stringify(value);
|
|
19
|
+
}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents the available log severity levels
|
|
3
|
+
*
|
|
4
|
+
* These levels determine the priority and visibility of log messages.
|
|
5
|
+
* The order from highest to lowest severity is typically:
|
|
6
|
+
* error > warn > info > success > debug
|
|
7
|
+
*/
|
|
8
|
+
export type LogLevel = 'info' | 'success' | 'warn' | 'error' | 'debug';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Array of all available log levels in order of importance
|
|
12
|
+
*
|
|
13
|
+
* This const array ensures type safety when working with log levels
|
|
14
|
+
* and provides a reference for level comparisons.
|
|
15
|
+
*/
|
|
16
|
+
export const levels = ['info', 'success', 'warn', 'error', 'debug'] as const;
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Determines if a log message should be published based on configured log level
|
|
20
|
+
*
|
|
21
|
+
* @param currentLogLevel - The configured log level threshold for the logger
|
|
22
|
+
* @param logLevel - The level of the message being evaluated
|
|
23
|
+
* @returns Boolean indicating whether the message should be published
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```ts
|
|
27
|
+
* // Only publish if error level is at or above the current log level
|
|
28
|
+
* if (shouldPublishLog('warn', 'error')) {
|
|
29
|
+
* // This will return true as error is more severe than warn
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function shouldPublishLog(
|
|
34
|
+
currentLogLevel: LogLevel,
|
|
35
|
+
logLevel: LogLevel
|
|
36
|
+
): boolean {
|
|
37
|
+
return levels.indexOf(logLevel) <= levels.indexOf(currentLogLevel);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Configuration interface for logger instances
|
|
42
|
+
*
|
|
43
|
+
* Provides options to customize logger behavior including
|
|
44
|
+
* disabling logs, setting log levels, and custom log handlers.
|
|
45
|
+
*/
|
|
46
|
+
export interface Logger {
|
|
47
|
+
/**
|
|
48
|
+
* Whether logging is disabled
|
|
49
|
+
*
|
|
50
|
+
* When true, no logs will be published regardless of log level
|
|
51
|
+
*/
|
|
52
|
+
disabled?: boolean;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The minimum log level to publish
|
|
56
|
+
*
|
|
57
|
+
* Only logs with this level or higher severity will be published
|
|
58
|
+
* Note that 'success' is excluded as it's typically handled as 'info'
|
|
59
|
+
*/
|
|
60
|
+
level?: Exclude<LogLevel, 'success'>;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Custom log handler function
|
|
64
|
+
*
|
|
65
|
+
* When provided, this function will be called instead of console methods
|
|
66
|
+
*
|
|
67
|
+
* @param level - The severity level of the log message
|
|
68
|
+
* @param message - The message to log
|
|
69
|
+
* @param args - Additional data to include in the log
|
|
70
|
+
*/
|
|
71
|
+
log?: (
|
|
72
|
+
level: Exclude<LogLevel, 'success'>,
|
|
73
|
+
message: string,
|
|
74
|
+
...args: unknown[]
|
|
75
|
+
) => void;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Type representing the parameters for log handlers
|
|
80
|
+
*
|
|
81
|
+
* This utility type extracts parameter types from the Logger.log function,
|
|
82
|
+
* excluding the first parameter (log level).
|
|
83
|
+
*/
|
|
84
|
+
export type LogHandlerParams = Parameters<NonNullable<Logger['log']>> extends [
|
|
85
|
+
LogLevel,
|
|
86
|
+
...infer Rest,
|
|
87
|
+
]
|
|
88
|
+
? Rest
|
|
89
|
+
: never;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* ANSI color codes for terminal output formatting
|
|
93
|
+
*
|
|
94
|
+
* Used to add color and styling to log messages in terminal environments
|
|
95
|
+
*
|
|
96
|
+
* @internal
|
|
97
|
+
*/
|
|
98
|
+
const colors = {
|
|
99
|
+
reset: '\x1b[0m',
|
|
100
|
+
bright: '\x1b[1m',
|
|
101
|
+
dim: '\x1b[2m',
|
|
102
|
+
underscore: '\x1b[4m',
|
|
103
|
+
blink: '\x1b[5m',
|
|
104
|
+
reverse: '\x1b[7m',
|
|
105
|
+
hidden: '\x1b[8m',
|
|
106
|
+
fg: {
|
|
107
|
+
black: '\x1b[30m',
|
|
108
|
+
red: '\x1b[31m',
|
|
109
|
+
green: '\x1b[32m',
|
|
110
|
+
yellow: '\x1b[33m',
|
|
111
|
+
blue: '\x1b[34m',
|
|
112
|
+
magenta: '\x1b[35m',
|
|
113
|
+
cyan: '\x1b[36m',
|
|
114
|
+
white: '\x1b[37m',
|
|
115
|
+
},
|
|
116
|
+
bg: {
|
|
117
|
+
black: '\x1b[40m',
|
|
118
|
+
red: '\x1b[41m',
|
|
119
|
+
green: '\x1b[42m',
|
|
120
|
+
yellow: '\x1b[43m',
|
|
121
|
+
blue: '\x1b[44m',
|
|
122
|
+
magenta: '\x1b[45m',
|
|
123
|
+
cyan: '\x1b[46m',
|
|
124
|
+
white: '\x1b[47m',
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Mapping of log levels to their corresponding colors
|
|
130
|
+
*
|
|
131
|
+
* @internal
|
|
132
|
+
*/
|
|
133
|
+
const levelColors: Record<LogLevel, string> = {
|
|
134
|
+
info: colors.fg.blue,
|
|
135
|
+
success: colors.fg.green,
|
|
136
|
+
warn: colors.fg.yellow,
|
|
137
|
+
error: colors.fg.red,
|
|
138
|
+
debug: colors.fg.magenta,
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Formats a log message with timestamp, level indicator, and styling
|
|
143
|
+
*
|
|
144
|
+
* @param level - The severity level of the message
|
|
145
|
+
* @param message - The message content to format
|
|
146
|
+
* @returns The formatted message string with ANSI color codes
|
|
147
|
+
*
|
|
148
|
+
* @internal
|
|
149
|
+
*/
|
|
150
|
+
const formatMessage = (level: LogLevel, message: string): string => {
|
|
151
|
+
const timestamp = new Date().toISOString();
|
|
152
|
+
return `${colors.dim}${timestamp}${colors.reset} ${
|
|
153
|
+
levelColors[level]
|
|
154
|
+
}${level.toUpperCase()}${colors.reset} ${colors.bright}[c15t]:${
|
|
155
|
+
colors.reset
|
|
156
|
+
} ${message}`;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Creates a configured logger instance with methods for each log level
|
|
161
|
+
*
|
|
162
|
+
* @param options - Configuration options for the logger
|
|
163
|
+
* @returns An object with methods for each log level
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```ts
|
|
167
|
+
* // Create a logger that only shows warnings and errors
|
|
168
|
+
* const logger = createLogger({ level: 'warn' });
|
|
169
|
+
*
|
|
170
|
+
* // These will be output
|
|
171
|
+
* logger.error('This is an error');
|
|
172
|
+
* logger.warn('This is a warning');
|
|
173
|
+
*
|
|
174
|
+
* // These will be suppressed
|
|
175
|
+
* logger.info('This info won\'t be shown');
|
|
176
|
+
* logger.debug('This debug message won\'t be shown');
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
export const createLogger = (
|
|
180
|
+
options?: Logger
|
|
181
|
+
): Record<LogLevel, (...params: LogHandlerParams) => void> => {
|
|
182
|
+
const enabled = options?.disabled !== true;
|
|
183
|
+
const logLevel = options?.level ?? 'error';
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Internal function that handles the actual logging logic
|
|
187
|
+
*
|
|
188
|
+
* @param level - The severity level of the log
|
|
189
|
+
* @param message - The message to log
|
|
190
|
+
* @param args - Additional data to include in the log
|
|
191
|
+
*
|
|
192
|
+
* @internal
|
|
193
|
+
*/
|
|
194
|
+
const LogFunc = (
|
|
195
|
+
level: LogLevel,
|
|
196
|
+
message: string,
|
|
197
|
+
args: unknown[] = []
|
|
198
|
+
): void => {
|
|
199
|
+
if (!enabled || !shouldPublishLog(logLevel, level)) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
const formattedMessage = formatMessage(level, message);
|
|
204
|
+
|
|
205
|
+
if (!options || typeof options.log !== 'function') {
|
|
206
|
+
if (level === 'error') {
|
|
207
|
+
// biome-ignore lint/suspicious/noConsole: Logger implementation
|
|
208
|
+
console.error(formattedMessage, ...args);
|
|
209
|
+
} else if (level === 'warn') {
|
|
210
|
+
// biome-ignore lint/suspicious/noConsole: Logger implementation
|
|
211
|
+
console.warn(formattedMessage, ...args);
|
|
212
|
+
} else if (level === 'info') {
|
|
213
|
+
// biome-ignore lint/suspicious/noConsole: Logger implementation
|
|
214
|
+
// biome-ignore lint/suspicious/noConsoleLog: Logger implementation
|
|
215
|
+
console.log(formattedMessage, ...args);
|
|
216
|
+
} else if (level === 'debug') {
|
|
217
|
+
// biome-ignore lint/suspicious/noConsole: Logger implementation
|
|
218
|
+
console.debug(formattedMessage, ...args);
|
|
219
|
+
} else if (level === 'success') {
|
|
220
|
+
// biome-ignore lint/suspicious/noConsole: Logger implementation
|
|
221
|
+
// biome-ignore lint/suspicious/noConsoleLog: Logger implementation
|
|
222
|
+
console.log(formattedMessage, ...args);
|
|
223
|
+
}
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
options.log(level === 'success' ? 'info' : level, message, ...args);
|
|
228
|
+
};
|
|
229
|
+
|
|
230
|
+
return Object.fromEntries(
|
|
231
|
+
levels.map((level) => [
|
|
232
|
+
level,
|
|
233
|
+
(...[message, ...args]: LogHandlerParams) =>
|
|
234
|
+
LogFunc(level, message, args),
|
|
235
|
+
])
|
|
236
|
+
) as Record<LogLevel, (...params: LogHandlerParams) => void>;
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Default logger instance with standard configuration
|
|
241
|
+
*
|
|
242
|
+
* Ready-to-use logger with default settings (logs errors only)
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```ts
|
|
246
|
+
* import { logger } from './logger';
|
|
247
|
+
*
|
|
248
|
+
* logger.error('Something went wrong');
|
|
249
|
+
* logger.info('This won\'t be shown with default settings');
|
|
250
|
+
* ```
|
|
251
|
+
*/
|
|
252
|
+
export const logger = createLogger();
|
package/src/utils/url.ts
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { BASE_ERROR_CODES, C15TError } from '~/error';
|
|
2
|
+
import { env } from '../utils/env';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Regular expression to match trailing slashes in URLs
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
const TRAILING_SLASHES_REGEX = /\/+$/;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Checks if a URL contains a path component other than root
|
|
13
|
+
*
|
|
14
|
+
* @param url - The URL to check for path components
|
|
15
|
+
* @returns Boolean indicating whether the URL has a non-root path
|
|
16
|
+
*
|
|
17
|
+
* @throws {C15TError} When the provided URL is invalid
|
|
18
|
+
*
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
function checkHasPath(url: string): boolean {
|
|
22
|
+
try {
|
|
23
|
+
const parsedUrl = new URL(url);
|
|
24
|
+
return parsedUrl.pathname !== '/';
|
|
25
|
+
} catch {
|
|
26
|
+
throw new C15TError(
|
|
27
|
+
`Invalid base URL: ${url}. Please provide a valid base URL.`,
|
|
28
|
+
{
|
|
29
|
+
code: BASE_ERROR_CODES.BAD_REQUEST,
|
|
30
|
+
status: 400,
|
|
31
|
+
data: {
|
|
32
|
+
url,
|
|
33
|
+
},
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Appends a path to a URL if it doesn't already have one
|
|
41
|
+
*
|
|
42
|
+
* This function ensures a URL has a path component by adding the
|
|
43
|
+
* specified path if the URL only has a root path.
|
|
44
|
+
*
|
|
45
|
+
* @param url - The base URL to potentially add a path to
|
|
46
|
+
* @param path - The path to append if needed (defaults to '/api/auth')
|
|
47
|
+
* @returns The URL with the path component
|
|
48
|
+
*
|
|
49
|
+
* @throws {C15TError} When the provided URL is invalid
|
|
50
|
+
*
|
|
51
|
+
* @internal
|
|
52
|
+
*/
|
|
53
|
+
function withPath(url: string, path = '/api/auth') {
|
|
54
|
+
const hasPath = checkHasPath(url);
|
|
55
|
+
if (hasPath) {
|
|
56
|
+
return url;
|
|
57
|
+
}
|
|
58
|
+
const pathWithSlash = path.startsWith('/') ? path : `/${path}`;
|
|
59
|
+
return `${url.replace(TRAILING_SLASHES_REGEX, '')}${pathWithSlash}`;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Determines the base URL for API requests
|
|
64
|
+
*
|
|
65
|
+
* Attempts to derive a base URL from multiple sources in the following order:
|
|
66
|
+
* 1. The provided URL parameter
|
|
67
|
+
* 2. Various environment variables
|
|
68
|
+
* 3. Current window location (if in browser)
|
|
69
|
+
*
|
|
70
|
+
* @param url - Optional explicit URL to use
|
|
71
|
+
* @param path - Optional path to append to the URL if it doesn't have one
|
|
72
|
+
* @returns The determined base URL or undefined if unable to determine
|
|
73
|
+
*
|
|
74
|
+
* @throws {C15TError} When the provided URL is invalid
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```ts
|
|
78
|
+
* // Get the base URL with default path ('/api/auth')
|
|
79
|
+
* const baseUrl = getBaseURL();
|
|
80
|
+
*
|
|
81
|
+
* // Get the base URL with custom path
|
|
82
|
+
* const apiUrl = getBaseURL(undefined, '/api/v2');
|
|
83
|
+
*
|
|
84
|
+
* // Use an explicit URL
|
|
85
|
+
* const customUrl = getBaseURL('https://example.com');
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export function getBaseURL(url?: string, path?: string) {
|
|
89
|
+
if (url) {
|
|
90
|
+
return withPath(url, path);
|
|
91
|
+
}
|
|
92
|
+
const fromEnv =
|
|
93
|
+
env.C15T_URL ||
|
|
94
|
+
env.NEXT_PUBLIC_C15T_URL ||
|
|
95
|
+
env.PUBLIC_C15T_URL ||
|
|
96
|
+
env.NUXT_PUBLIC_C15T_URL ||
|
|
97
|
+
env.NUXT_PUBLIC_AUTH_URL ||
|
|
98
|
+
(env.BASE_URL !== '/' ? env.BASE_URL : undefined);
|
|
99
|
+
|
|
100
|
+
if (fromEnv) {
|
|
101
|
+
return withPath(fromEnv, path);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if (typeof window !== 'undefined' && window.location) {
|
|
105
|
+
return withPath(window.location.origin, path);
|
|
106
|
+
}
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Extracts the origin component from a URL
|
|
112
|
+
*
|
|
113
|
+
* @param url - The URL to extract the origin from
|
|
114
|
+
* @returns The origin of the URL or null if invalid
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* getOrigin('https://example.com/path'); // 'https://example.com'
|
|
119
|
+
* getOrigin('invalid-url'); // null
|
|
120
|
+
* ```
|
|
121
|
+
*/
|
|
122
|
+
export function getOrigin(url: string) {
|
|
123
|
+
try {
|
|
124
|
+
const parsedUrl = new URL(url);
|
|
125
|
+
return parsedUrl.origin;
|
|
126
|
+
} catch {
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Extracts the protocol component from a URL
|
|
133
|
+
*
|
|
134
|
+
* @param url - The URL to extract the protocol from
|
|
135
|
+
* @returns The protocol of the URL (including colon) or null if invalid
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* getProtocol('https://example.com'); // 'https:'
|
|
140
|
+
* getProtocol('http://example.com'); // 'http:'
|
|
141
|
+
* getProtocol('invalid-url'); // null
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
export function getProtocol(url: string) {
|
|
145
|
+
try {
|
|
146
|
+
const parsedUrl = new URL(url);
|
|
147
|
+
return parsedUrl.protocol;
|
|
148
|
+
} catch {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Checks if a string is a valid URL with a protocol
|
|
155
|
+
*
|
|
156
|
+
* Determines if the URL includes a protocol component (e.g., 'http://', 'https://'),
|
|
157
|
+
* which indicates it's a fully qualified URL rather than a relative path.
|
|
158
|
+
*
|
|
159
|
+
* @param url - The URL string to check
|
|
160
|
+
* @returns Boolean indicating whether the URL includes a protocol
|
|
161
|
+
*
|
|
162
|
+
* @example
|
|
163
|
+
* ```ts
|
|
164
|
+
* checkURLValidity('https://example.com'); // true
|
|
165
|
+
* checkURLValidity('example.com'); // false (no protocol)
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export const checkURLValidity = (url: string) => {
|
|
169
|
+
const urlPattern = url.includes('://');
|
|
170
|
+
return urlPattern;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Extracts the host component from a URL
|
|
175
|
+
*
|
|
176
|
+
* If the URL is a fully qualified URL with a protocol, it parses the host correctly.
|
|
177
|
+
* If not, it assumes the entire string is the host.
|
|
178
|
+
*
|
|
179
|
+
* @param url - The URL to extract the host from
|
|
180
|
+
* @returns The host component of the URL
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```ts
|
|
184
|
+
* getHost('https://example.com/path'); // 'example.com'
|
|
185
|
+
* getHost('example.com'); // 'example.com'
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
export function getHost(url: string) {
|
|
189
|
+
if (url.includes('://')) {
|
|
190
|
+
const parsedUrl = new URL(url);
|
|
191
|
+
return parsedUrl.host;
|
|
192
|
+
}
|
|
193
|
+
return url;
|
|
194
|
+
}
|