@c15t/backend 2.0.0-rc.1 → 2.0.0-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/README.md +3 -3
- package/dist/302.js +473 -0
- package/dist/583.js +540 -0
- package/dist/915.js +1771 -0
- package/dist/cache.cjs +5 -5
- package/dist/cache.js +4 -415
- package/dist/core.cjs +1356 -120
- package/dist/core.js +163 -1981
- package/dist/db/adapters/drizzle.cjs +1 -1
- package/dist/db/adapters/drizzle.js +1 -2
- package/dist/db/adapters/kysely.cjs +1 -1
- package/dist/db/adapters/kysely.js +1 -2
- package/dist/db/adapters/mongo.cjs +1 -1
- package/dist/db/adapters/mongo.js +1 -2
- package/dist/db/adapters/prisma.cjs +1 -1
- package/dist/db/adapters/prisma.js +1 -2
- package/dist/db/adapters/typeorm.cjs +1 -1
- package/dist/db/adapters/typeorm.js +1 -2
- package/dist/db/adapters.cjs +1 -1
- package/dist/db/migrator.cjs +1 -1
- package/dist/db/schema.cjs +43 -3
- package/dist/db/schema.js +35 -4
- package/dist/define-config.cjs +1 -1
- package/dist/edge.cjs +1106 -0
- package/dist/edge.js +190 -0
- package/dist/router.cjs +885 -123
- package/dist/router.js +1 -1507
- package/dist/{types.cjs → types/index.cjs} +1 -1
- package/{dist → dist-types}/cache/adapters/cloudflare-kv.d.ts +0 -1
- package/{dist → dist-types}/cache/adapters/index.d.ts +0 -1
- package/{dist → dist-types}/cache/adapters/memory.d.ts +0 -1
- package/{dist → dist-types}/cache/adapters/upstash-redis.d.ts +0 -1
- package/{dist → dist-types}/cache/gvl-resolver.d.ts +0 -1
- package/{dist → dist-types}/cache/index.d.ts +0 -1
- package/{dist → dist-types}/cache/keys.d.ts +0 -1
- package/{dist → dist-types}/cache/types.d.ts +0 -1
- package/{dist → dist-types}/core.d.ts +8 -1
- package/{dist → dist-types}/db/migrator/index.d.ts +0 -1
- package/dist-types/db/registry/consent-policy.d.ts +78 -0
- package/{dist → dist-types}/db/registry/consent-purpose.d.ts +0 -1
- package/{dist → dist-types}/db/registry/domain.d.ts +0 -1
- package/dist-types/db/registry/index.d.ts +118 -0
- package/dist-types/db/registry/runtime-policy-decision.d.ts +60 -0
- package/{dist → dist-types}/db/registry/subject.d.ts +0 -2
- package/{dist → dist-types}/db/registry/types.d.ts +1 -1
- package/{dist → dist-types}/db/registry/utils/generate-id.d.ts +0 -1
- package/{dist → dist-types}/db/registry/utils.d.ts +0 -1
- package/{dist → dist-types}/db/schema/1.0.0/audit-log.d.ts +0 -1
- package/{dist → dist-types}/db/schema/1.0.0/consent-policy.d.ts +0 -1
- package/{dist → dist-types}/db/schema/1.0.0/consent-purpose.d.ts +0 -1
- package/{dist → dist-types}/db/schema/1.0.0/consent-record.d.ts +0 -1
- package/{dist → dist-types}/db/schema/1.0.0/consent.d.ts +1 -2
- package/{dist → dist-types}/db/schema/1.0.0/domain.d.ts +0 -1
- package/{dist → dist-types}/db/schema/1.0.0/index.d.ts +0 -32
- package/{dist → dist-types}/db/schema/1.0.0/subject.d.ts +0 -2
- package/{dist → dist-types}/db/schema/2.0.0/audit-log.d.ts +1 -2
- package/{dist → dist-types}/db/schema/2.0.0/consent-policy.d.ts +3 -3
- package/{dist → dist-types}/db/schema/2.0.0/consent-purpose.d.ts +1 -2
- package/{dist → dist-types}/db/schema/2.0.0/consent.d.ts +7 -2
- package/{dist → dist-types}/db/schema/2.0.0/domain.d.ts +1 -2
- package/{dist → dist-types}/db/schema/2.0.0/index.d.ts +455 -28
- package/dist-types/db/schema/2.0.0/runtime-policy-decision.d.ts +23 -0
- package/{dist → dist-types}/db/schema/2.0.0/subject.d.ts +1 -3
- package/{dist → dist-types}/db/schema/index.d.ts +908 -86
- package/{dist → dist-types}/db/tenant-scope.d.ts +0 -1
- package/dist-types/define-config.d.ts +17 -0
- package/dist-types/edge/index.d.ts +5 -0
- package/dist-types/edge/init-handler.d.ts +40 -0
- package/dist-types/edge/resolve-consent.d.ts +80 -0
- package/dist-types/edge/types.d.ts +13 -0
- package/{dist → dist-types}/handlers/consent/check.handler.d.ts +0 -1
- package/{src/handlers/consent/index.ts → dist-types/handlers/consent/index.d.ts} +0 -1
- package/{dist → dist-types}/handlers/init/geo.d.ts +2 -3
- package/{dist → dist-types}/handlers/init/index.d.ts +2 -3
- package/dist-types/handlers/init/policy.d.ts +26 -0
- package/dist-types/handlers/init/resolve-init.d.ts +44 -0
- package/dist-types/handlers/init/translations.d.ts +48 -0
- package/dist-types/handlers/legal-document/current.handler.d.ts +11 -0
- package/dist-types/handlers/legal-document/snapshot.d.ts +39 -0
- package/dist-types/handlers/policy/snapshot.d.ts +99 -0
- package/{src/handlers/status/index.ts → dist-types/handlers/status/index.d.ts} +0 -1
- package/{dist → dist-types}/handlers/status/status.handler.d.ts +0 -1
- package/{dist → dist-types}/handlers/subject/get.handler.d.ts +3 -2
- package/{src/handlers/subject/index.ts → dist-types/handlers/subject/index.d.ts} +0 -1
- package/{dist → dist-types}/handlers/subject/list.handler.d.ts +3 -2
- package/{dist → dist-types}/handlers/subject/patch.handler.d.ts +0 -2
- package/{dist → dist-types}/handlers/subject/post.handler.d.ts +12 -1
- package/{dist → dist-types}/handlers/utils/consent-enrichment.d.ts +3 -1
- package/{dist → dist-types}/init.d.ts +4 -7
- package/{dist → dist-types}/middleware/auth/index.d.ts +0 -1
- package/{dist → dist-types}/middleware/auth/validate-api-key.d.ts +0 -1
- package/{dist → dist-types}/middleware/cors/cors.d.ts +0 -1
- package/{src/middleware/cors/index.ts → dist-types/middleware/cors/index.d.ts} +0 -1
- package/{dist → dist-types}/middleware/cors/is-origin-trusted.d.ts +0 -1
- package/{dist → dist-types}/middleware/cors/process-cors.d.ts +0 -1
- package/{dist → dist-types}/middleware/openapi/config.d.ts +0 -1
- package/{dist → dist-types}/middleware/openapi/handlers.d.ts +0 -1
- package/{src/middleware/openapi/index.ts → dist-types/middleware/openapi/index.d.ts} +0 -1
- package/{dist → dist-types}/middleware/process-ip/index.d.ts +0 -1
- package/dist-types/policies/builder.d.ts +127 -0
- package/dist-types/policies/defaults.d.ts +2 -0
- package/dist-types/policies/matchers.d.ts +3 -0
- package/{dist → dist-types}/router.d.ts +0 -1
- package/{dist → dist-types}/routes/consent.d.ts +0 -1
- package/{dist → dist-types}/routes/index.d.ts +1 -1
- package/{dist → dist-types}/routes/init.d.ts +0 -1
- package/dist-types/routes/legal-document.d.ts +7 -0
- package/{dist → dist-types}/routes/status.d.ts +0 -1
- package/{dist → dist-types}/routes/subject.d.ts +0 -1
- package/{dist → dist-types}/types/api.d.ts +0 -1
- package/dist-types/types/index.d.ts +464 -0
- package/dist-types/utils/background.d.ts +6 -0
- package/{dist → dist-types}/utils/create-telemetry-options.d.ts +1 -2
- package/{dist → dist-types}/utils/env.d.ts +0 -1
- package/{dist → dist-types}/utils/extract-error-message.d.ts +0 -1
- package/{dist → dist-types}/utils/instrumentation.d.ts +2 -3
- package/{dist → dist-types}/utils/logger.d.ts +0 -1
- package/{dist → dist-types}/utils/metrics.d.ts +0 -1
- package/dist-types/version.d.ts +1 -0
- package/docs/README.md +49 -0
- package/docs/api/configuration.md +208 -0
- package/docs/api/endpoints.md +211 -0
- package/docs/guides/caching.md +85 -0
- package/docs/guides/database-setup.md +128 -0
- package/docs/guides/edge-deployment.md +251 -0
- package/docs/guides/framework-integration.md +142 -0
- package/docs/guides/iab-tcf.md +89 -0
- package/docs/guides/observability.md +96 -0
- package/docs/guides/policy-packs.md +396 -0
- package/docs/quickstart.md +129 -0
- package/package.json +51 -37
- package/.turbo/turbo-build.log +0 -49
- package/CHANGELOG.md +0 -99
- package/dist/cache/adapters/cloudflare-kv.d.ts.map +0 -1
- package/dist/cache/adapters/index.d.ts.map +0 -1
- package/dist/cache/adapters/memory.d.ts.map +0 -1
- package/dist/cache/adapters/upstash-redis.d.ts.map +0 -1
- package/dist/cache/gvl-resolver.d.ts.map +0 -1
- package/dist/cache/index.d.ts.map +0 -1
- package/dist/cache/keys.d.ts.map +0 -1
- package/dist/cache/types.d.ts.map +0 -1
- package/dist/core.d.ts.map +0 -1
- package/dist/db/adapters/drizzle.d.ts +0 -2
- package/dist/db/adapters/drizzle.d.ts.map +0 -1
- package/dist/db/adapters/index.d.ts +0 -2
- package/dist/db/adapters/index.d.ts.map +0 -1
- package/dist/db/adapters/kysely.d.ts +0 -2
- package/dist/db/adapters/kysely.d.ts.map +0 -1
- package/dist/db/adapters/mongo.d.ts +0 -2
- package/dist/db/adapters/mongo.d.ts.map +0 -1
- package/dist/db/adapters/prisma.d.ts +0 -2
- package/dist/db/adapters/prisma.d.ts.map +0 -1
- package/dist/db/adapters/typeorm.d.ts +0 -2
- package/dist/db/adapters/typeorm.d.ts.map +0 -1
- package/dist/db/migrator/index.d.ts.map +0 -1
- package/dist/db/registry/consent-policy.d.ts +0 -23
- package/dist/db/registry/consent-policy.d.ts.map +0 -1
- package/dist/db/registry/consent-purpose.d.ts.map +0 -1
- package/dist/db/registry/domain.d.ts.map +0 -1
- package/dist/db/registry/index.d.ts +0 -57
- package/dist/db/registry/index.d.ts.map +0 -1
- package/dist/db/registry/subject.d.ts.map +0 -1
- package/dist/db/registry/types.d.ts.map +0 -1
- package/dist/db/registry/utils/generate-id.d.ts.map +0 -1
- package/dist/db/registry/utils.d.ts.map +0 -1
- package/dist/db/schema/1.0.0/audit-log.d.ts.map +0 -1
- package/dist/db/schema/1.0.0/consent-policy.d.ts.map +0 -1
- package/dist/db/schema/1.0.0/consent-purpose.d.ts.map +0 -1
- package/dist/db/schema/1.0.0/consent-record.d.ts.map +0 -1
- package/dist/db/schema/1.0.0/consent.d.ts.map +0 -1
- package/dist/db/schema/1.0.0/domain.d.ts.map +0 -1
- package/dist/db/schema/1.0.0/index.d.ts.map +0 -1
- package/dist/db/schema/1.0.0/subject.d.ts.map +0 -1
- package/dist/db/schema/2.0.0/audit-log.d.ts.map +0 -1
- package/dist/db/schema/2.0.0/consent-policy.d.ts.map +0 -1
- package/dist/db/schema/2.0.0/consent-purpose.d.ts.map +0 -1
- package/dist/db/schema/2.0.0/consent.d.ts.map +0 -1
- package/dist/db/schema/2.0.0/domain.d.ts.map +0 -1
- package/dist/db/schema/2.0.0/index.d.ts.map +0 -1
- package/dist/db/schema/2.0.0/subject.d.ts.map +0 -1
- package/dist/db/schema/index.d.ts.map +0 -1
- package/dist/db/tenant-scope.d.ts.map +0 -1
- package/dist/define-config.d.ts +0 -5
- package/dist/define-config.d.ts.map +0 -1
- package/dist/handlers/consent/check.handler.d.ts.map +0 -1
- package/dist/handlers/consent/index.d.ts +0 -12
- package/dist/handlers/consent/index.d.ts.map +0 -1
- package/dist/handlers/init/geo.d.ts.map +0 -1
- package/dist/handlers/init/index.d.ts.map +0 -1
- package/dist/handlers/init/translations.d.ts +0 -28
- package/dist/handlers/init/translations.d.ts.map +0 -1
- package/dist/handlers/status/index.d.ts +0 -7
- package/dist/handlers/status/index.d.ts.map +0 -1
- package/dist/handlers/status/status.handler.d.ts.map +0 -1
- package/dist/handlers/subject/get.handler.d.ts.map +0 -1
- package/dist/handlers/subject/index.d.ts +0 -10
- package/dist/handlers/subject/index.d.ts.map +0 -1
- package/dist/handlers/subject/list.handler.d.ts.map +0 -1
- package/dist/handlers/subject/patch.handler.d.ts.map +0 -1
- package/dist/handlers/subject/post.handler.d.ts.map +0 -1
- package/dist/handlers/utils/consent-enrichment.d.ts.map +0 -1
- package/dist/init.d.ts.map +0 -1
- package/dist/middleware/auth/index.d.ts.map +0 -1
- package/dist/middleware/auth/validate-api-key.d.ts.map +0 -1
- package/dist/middleware/cors/cors.d.ts.map +0 -1
- package/dist/middleware/cors/index.d.ts +0 -30
- package/dist/middleware/cors/index.d.ts.map +0 -1
- package/dist/middleware/cors/is-origin-trusted.d.ts.map +0 -1
- package/dist/middleware/cors/process-cors.d.ts.map +0 -1
- package/dist/middleware/openapi/config.d.ts.map +0 -1
- package/dist/middleware/openapi/handlers.d.ts.map +0 -1
- package/dist/middleware/openapi/index.d.ts +0 -12
- package/dist/middleware/openapi/index.d.ts.map +0 -1
- package/dist/middleware/process-ip/index.d.ts.map +0 -1
- package/dist/router.d.ts.map +0 -1
- package/dist/routes/consent.d.ts.map +0 -1
- package/dist/routes/index.d.ts.map +0 -1
- package/dist/routes/init.d.ts.map +0 -1
- package/dist/routes/status.d.ts.map +0 -1
- package/dist/routes/subject.d.ts.map +0 -1
- package/dist/types/api.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -255
- package/dist/types/index.d.ts.map +0 -1
- package/dist/utils/create-telemetry-options.d.ts.map +0 -1
- package/dist/utils/env.d.ts.map +0 -1
- package/dist/utils/extract-error-message.d.ts.map +0 -1
- package/dist/utils/index.d.ts +0 -4
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/instrumentation.d.ts.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/metrics.d.ts.map +0 -1
- package/dist/version.d.ts +0 -2
- package/dist/version.d.ts.map +0 -1
- package/knip.json +0 -31
- package/rslib.config.ts +0 -93
- package/src/cache/adapters/cloudflare-kv.ts +0 -71
- package/src/cache/adapters/index.ts +0 -22
- package/src/cache/adapters/memory.ts +0 -111
- package/src/cache/adapters/upstash-redis.ts +0 -113
- package/src/cache/gvl-resolver.ts +0 -289
- package/src/cache/index.ts +0 -34
- package/src/cache/keys.ts +0 -68
- package/src/cache/types.ts +0 -66
- package/src/core.ts +0 -368
- package/src/db/migrator/index.ts +0 -80
- package/src/db/registry/consent-policy.test.ts +0 -451
- package/src/db/registry/consent-policy.ts +0 -82
- package/src/db/registry/consent-purpose.test.ts +0 -428
- package/src/db/registry/consent-purpose.ts +0 -61
- package/src/db/registry/domain.test.ts +0 -445
- package/src/db/registry/domain.ts +0 -91
- package/src/db/registry/index.ts +0 -14
- package/src/db/registry/subject.test.ts +0 -388
- package/src/db/registry/subject.ts +0 -129
- package/src/db/registry/types.ts +0 -10
- package/src/db/registry/utils/generate-id.test.ts +0 -216
- package/src/db/registry/utils/generate-id.ts +0 -133
- package/src/db/registry/utils.ts +0 -133
- package/src/db/schema/1.0.0/audit-log.ts +0 -15
- package/src/db/schema/1.0.0/consent-policy.ts +0 -14
- package/src/db/schema/1.0.0/consent-purpose.ts +0 -14
- package/src/db/schema/1.0.0/consent-record.ts +0 -10
- package/src/db/schema/1.0.0/consent.ts +0 -20
- package/src/db/schema/1.0.0/domain.ts +0 -12
- package/src/db/schema/1.0.0/index.ts +0 -48
- package/src/db/schema/1.0.0/subject.ts +0 -12
- package/src/db/schema/2.0.0/audit-log.ts +0 -18
- package/src/db/schema/2.0.0/consent-policy.ts +0 -28
- package/src/db/schema/2.0.0/consent-purpose.ts +0 -12
- package/src/db/schema/2.0.0/consent.ts +0 -26
- package/src/db/schema/2.0.0/domain.ts +0 -12
- package/src/db/schema/2.0.0/index.ts +0 -47
- package/src/db/schema/2.0.0/subject.ts +0 -14
- package/src/db/schema/index.ts +0 -15
- package/src/db/tenant-scope.test.ts +0 -750
- package/src/db/tenant-scope.ts +0 -103
- package/src/define-config.ts +0 -5
- package/src/handlers/consent/check.handler.ts +0 -126
- package/src/handlers/init/geo.test.ts +0 -317
- package/src/handlers/init/geo.ts +0 -195
- package/src/handlers/init/index.test.ts +0 -205
- package/src/handlers/init/index.ts +0 -114
- package/src/handlers/init/translations.test.ts +0 -121
- package/src/handlers/init/translations.ts +0 -72
- package/src/handlers/status/status.handler.test.ts +0 -155
- package/src/handlers/status/status.handler.ts +0 -51
- package/src/handlers/subject/get.handler.ts +0 -93
- package/src/handlers/subject/list.handler.ts +0 -93
- package/src/handlers/subject/patch.handler.ts +0 -122
- package/src/handlers/subject/post.handler.test.ts +0 -294
- package/src/handlers/subject/post.handler.ts +0 -254
- package/src/handlers/utils/consent-enrichment.test.ts +0 -380
- package/src/handlers/utils/consent-enrichment.ts +0 -218
- package/src/init.test.ts +0 -126
- package/src/init.ts +0 -87
- package/src/middleware/auth/index.ts +0 -11
- package/src/middleware/auth/validate-api-key.test.ts +0 -86
- package/src/middleware/auth/validate-api-key.ts +0 -107
- package/src/middleware/cors/cors.test.ts +0 -135
- package/src/middleware/cors/cors.ts +0 -186
- package/src/middleware/cors/is-origin-trusted.test.ts +0 -164
- package/src/middleware/cors/is-origin-trusted.ts +0 -130
- package/src/middleware/cors/process-cors.ts +0 -91
- package/src/middleware/openapi/config.ts +0 -29
- package/src/middleware/openapi/handlers.ts +0 -34
- package/src/middleware/process-ip/index.test.ts +0 -195
- package/src/middleware/process-ip/index.ts +0 -199
- package/src/router.ts +0 -15
- package/src/routes/consent.ts +0 -52
- package/src/routes/index.ts +0 -10
- package/src/routes/init.ts +0 -102
- package/src/routes/status.ts +0 -46
- package/src/routes/subject.ts +0 -152
- package/src/types/api.ts +0 -48
- package/src/types/index.ts +0 -288
- package/src/utils/create-telemetry-options.test.ts +0 -302
- package/src/utils/create-telemetry-options.ts +0 -229
- package/src/utils/env.ts +0 -84
- package/src/utils/extract-error-message.ts +0 -21
- package/src/utils/instrumentation.test.ts +0 -185
- package/src/utils/instrumentation.ts +0 -196
- package/src/utils/logger.ts +0 -41
- package/src/utils/metrics.test.ts +0 -323
- package/src/utils/metrics.ts +0 -402
- package/src/utils/telemetry-pii.test.ts +0 -325
- package/src/version.ts +0 -2
- package/tsconfig.json +0 -11
- package/vitest.config.ts +0 -28
- /package/dist/{types.js → types/index.js} +0 -0
- /package/{src/db/adapters/drizzle.ts → dist-types/db/adapters/drizzle.d.ts} +0 -0
- /package/{src/db/adapters/index.ts → dist-types/db/adapters/index.d.ts} +0 -0
- /package/{src/db/adapters/kysely.ts → dist-types/db/adapters/kysely.d.ts} +0 -0
- /package/{src/db/adapters/mongo.ts → dist-types/db/adapters/mongo.d.ts} +0 -0
- /package/{src/db/adapters/prisma.ts → dist-types/db/adapters/prisma.d.ts} +0 -0
- /package/{src/db/adapters/typeorm.ts → dist-types/db/adapters/typeorm.d.ts} +0 -0
- /package/{src/utils/index.ts → dist-types/utils/index.d.ts} +0 -0
package/src/utils/metrics.ts
DELETED
|
@@ -1,402 +0,0 @@
|
|
|
1
|
-
import type { Counter, Histogram, Meter } from '@opentelemetry/api';
|
|
2
|
-
import type { C15TOptions } from '../types';
|
|
3
|
-
import { getMeter, isTelemetryEnabled } from './create-telemetry-options';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Geographic attributes for consent metrics
|
|
7
|
-
*/
|
|
8
|
-
export interface GeoAttributes {
|
|
9
|
-
/** Legal framework (GDPR, CCPA, LGPD, etc.) */
|
|
10
|
-
jurisdiction?: string;
|
|
11
|
-
/** ISO country code (US, DE, FR, etc.) */
|
|
12
|
-
country?: string;
|
|
13
|
-
/** State/province code (CA, BY, etc.) */
|
|
14
|
-
region?: string;
|
|
15
|
-
/** Index signature for additional attributes */
|
|
16
|
-
[key: string]: string | number | boolean | undefined;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Consent metric attributes
|
|
21
|
-
*/
|
|
22
|
-
export interface ConsentMetricAttributes extends GeoAttributes {
|
|
23
|
-
/** Consent type (cookie_banner, privacy_policy, etc.) */
|
|
24
|
-
type: string;
|
|
25
|
-
/** Consent status (accepted, rejected, partial) */
|
|
26
|
-
status?: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* HTTP metric attributes
|
|
31
|
-
*/
|
|
32
|
-
export interface HttpMetricAttributes {
|
|
33
|
-
/** HTTP method */
|
|
34
|
-
method: string;
|
|
35
|
-
/** Route pattern (e.g., /subjects/:id) */
|
|
36
|
-
route: string;
|
|
37
|
-
/** HTTP status code */
|
|
38
|
-
status: number;
|
|
39
|
-
/** Error type if applicable */
|
|
40
|
-
errorType?: string;
|
|
41
|
-
/** Index signature for additional attributes */
|
|
42
|
-
[key: string]: string | number | boolean | undefined;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/**
|
|
46
|
-
* Database metric attributes
|
|
47
|
-
*/
|
|
48
|
-
export interface DbMetricAttributes {
|
|
49
|
-
/** Operation type (find, create, update, delete) */
|
|
50
|
-
operation: string;
|
|
51
|
-
/** Entity type (consent, subject, audit_log, etc.) */
|
|
52
|
-
entity: string;
|
|
53
|
-
/** Error type if applicable */
|
|
54
|
-
errorType?: string;
|
|
55
|
-
/** Index signature for additional attributes */
|
|
56
|
-
[key: string]: string | number | boolean | undefined;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Cache metric attributes
|
|
61
|
-
*/
|
|
62
|
-
export interface CacheMetricAttributes {
|
|
63
|
-
/** Cache layer (bundled, memory, external) */
|
|
64
|
-
layer: 'bundled' | 'memory' | 'external';
|
|
65
|
-
/** Operation type (get, set, delete) */
|
|
66
|
-
operation?: string;
|
|
67
|
-
/** Index signature for additional attributes */
|
|
68
|
-
[key: string]: string | number | boolean | undefined;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* GVL fetch metric attributes
|
|
73
|
-
*/
|
|
74
|
-
export interface GvlMetricAttributes {
|
|
75
|
-
/** Language code */
|
|
76
|
-
language: string;
|
|
77
|
-
/** Source of the data (cache, fetch) */
|
|
78
|
-
source?: 'cache' | 'fetch';
|
|
79
|
-
/** HTTP status code if fetched */
|
|
80
|
-
status?: number;
|
|
81
|
-
/** Error type if applicable */
|
|
82
|
-
errorType?: string;
|
|
83
|
-
/** Index signature for additional attributes */
|
|
84
|
-
[key: string]: string | number | boolean | undefined;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* C15T Metrics container
|
|
89
|
-
* Holds all metric instruments for the c15t backend
|
|
90
|
-
*/
|
|
91
|
-
export interface C15TMetrics {
|
|
92
|
-
// Business metrics
|
|
93
|
-
readonly consentCreated: Counter;
|
|
94
|
-
readonly consentAccepted: Counter;
|
|
95
|
-
readonly consentRejected: Counter;
|
|
96
|
-
readonly subjectCreated: Counter;
|
|
97
|
-
readonly subjectLinked: Counter;
|
|
98
|
-
readonly consentCheckCount: Counter;
|
|
99
|
-
readonly initCount: Counter;
|
|
100
|
-
|
|
101
|
-
// HTTP metrics
|
|
102
|
-
readonly httpRequestDuration: Histogram;
|
|
103
|
-
readonly httpRequestCount: Counter;
|
|
104
|
-
readonly httpErrorCount: Counter;
|
|
105
|
-
|
|
106
|
-
// Database metrics
|
|
107
|
-
readonly dbQueryDuration: Histogram;
|
|
108
|
-
readonly dbQueryCount: Counter;
|
|
109
|
-
readonly dbErrorCount: Counter;
|
|
110
|
-
|
|
111
|
-
// Cache metrics
|
|
112
|
-
readonly cacheHit: Counter;
|
|
113
|
-
readonly cacheMiss: Counter;
|
|
114
|
-
readonly cacheLatency: Histogram;
|
|
115
|
-
|
|
116
|
-
// GVL metrics
|
|
117
|
-
readonly gvlFetchDuration: Histogram;
|
|
118
|
-
readonly gvlFetchCount: Counter;
|
|
119
|
-
readonly gvlFetchError: Counter;
|
|
120
|
-
|
|
121
|
-
// Helper methods
|
|
122
|
-
recordConsentCreated(attributes: ConsentMetricAttributes): void;
|
|
123
|
-
recordConsentAccepted(
|
|
124
|
-
attributes: Omit<ConsentMetricAttributes, 'status'>
|
|
125
|
-
): void;
|
|
126
|
-
recordConsentRejected(
|
|
127
|
-
attributes: Omit<ConsentMetricAttributes, 'status'>
|
|
128
|
-
): void;
|
|
129
|
-
recordSubjectCreated(attributes: GeoAttributes & { domain?: string }): void;
|
|
130
|
-
recordSubjectLinked(identityProvider?: string): void;
|
|
131
|
-
recordConsentCheck(type: string, found: boolean): void;
|
|
132
|
-
recordInit(attributes: GeoAttributes): void;
|
|
133
|
-
recordHttpRequest(attributes: HttpMetricAttributes, durationMs: number): void;
|
|
134
|
-
recordDbQuery(attributes: DbMetricAttributes, durationMs: number): void;
|
|
135
|
-
recordDbError(attributes: DbMetricAttributes): void;
|
|
136
|
-
recordCacheHit(layer: CacheMetricAttributes['layer']): void;
|
|
137
|
-
recordCacheMiss(layer: CacheMetricAttributes['layer']): void;
|
|
138
|
-
recordCacheLatency(
|
|
139
|
-
attributes: CacheMetricAttributes,
|
|
140
|
-
durationMs: number
|
|
141
|
-
): void;
|
|
142
|
-
recordGvlFetch(attributes: GvlMetricAttributes, durationMs: number): void;
|
|
143
|
-
recordGvlError(attributes: GvlMetricAttributes): void;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Sanitize attributes - remove undefined values and convert to strings
|
|
148
|
-
*/
|
|
149
|
-
function sanitizeAttributes<
|
|
150
|
-
T extends Record<string, string | number | boolean | undefined>,
|
|
151
|
-
>(attrs: T): Record<string, string | number | boolean> {
|
|
152
|
-
return Object.fromEntries(
|
|
153
|
-
Object.entries(attrs).filter(([_, v]) => v !== undefined && v !== null) as [
|
|
154
|
-
string,
|
|
155
|
-
string | number | boolean,
|
|
156
|
-
][]
|
|
157
|
-
);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Create a C15TMetrics instance from an OpenTelemetry Meter.
|
|
162
|
-
*
|
|
163
|
-
* @param meter - OpenTelemetry Meter to create instruments from
|
|
164
|
-
* @returns C15TMetrics object with all instruments and helper methods
|
|
165
|
-
*/
|
|
166
|
-
function createMetrics(meter: Meter): C15TMetrics {
|
|
167
|
-
// Business metrics - High value for c15t
|
|
168
|
-
const consentCreated = meter.createCounter('c15t.consent.created', {
|
|
169
|
-
description: 'Number of consent submissions',
|
|
170
|
-
unit: '1',
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
const consentAccepted = meter.createCounter('c15t.consent.accepted', {
|
|
174
|
-
description: 'Number of consents accepted',
|
|
175
|
-
unit: '1',
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
const consentRejected = meter.createCounter('c15t.consent.rejected', {
|
|
179
|
-
description: 'Number of consents rejected',
|
|
180
|
-
unit: '1',
|
|
181
|
-
});
|
|
182
|
-
|
|
183
|
-
const subjectCreated = meter.createCounter('c15t.subject.created', {
|
|
184
|
-
description: 'Number of new subjects created',
|
|
185
|
-
unit: '1',
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
const subjectLinked = meter.createCounter('c15t.subject.linked', {
|
|
189
|
-
description: 'Number of subjects linked to external ID',
|
|
190
|
-
unit: '1',
|
|
191
|
-
});
|
|
192
|
-
|
|
193
|
-
const consentCheckCount = meter.createCounter('c15t.consent_check.count', {
|
|
194
|
-
description: 'Number of cross-device consent checks',
|
|
195
|
-
unit: '1',
|
|
196
|
-
});
|
|
197
|
-
|
|
198
|
-
const initCount = meter.createCounter('c15t.init.count', {
|
|
199
|
-
description: 'Number of init endpoint calls',
|
|
200
|
-
unit: '1',
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
// HTTP metrics
|
|
204
|
-
const httpRequestDuration = meter.createHistogram(
|
|
205
|
-
'c15t.http.request.duration',
|
|
206
|
-
{
|
|
207
|
-
description: 'HTTP request latency',
|
|
208
|
-
unit: 'ms',
|
|
209
|
-
}
|
|
210
|
-
);
|
|
211
|
-
|
|
212
|
-
const httpRequestCount = meter.createCounter('c15t.http.request.count', {
|
|
213
|
-
description: 'Number of HTTP requests',
|
|
214
|
-
unit: '1',
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
const httpErrorCount = meter.createCounter('c15t.http.error.count', {
|
|
218
|
-
description: 'Number of HTTP errors',
|
|
219
|
-
unit: '1',
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
// Database metrics
|
|
223
|
-
const dbQueryDuration = meter.createHistogram('c15t.db.query.duration', {
|
|
224
|
-
description: 'Database query latency',
|
|
225
|
-
unit: 'ms',
|
|
226
|
-
});
|
|
227
|
-
|
|
228
|
-
const dbQueryCount = meter.createCounter('c15t.db.query.count', {
|
|
229
|
-
description: 'Number of database queries',
|
|
230
|
-
unit: '1',
|
|
231
|
-
});
|
|
232
|
-
|
|
233
|
-
const dbErrorCount = meter.createCounter('c15t.db.error.count', {
|
|
234
|
-
description: 'Number of database errors',
|
|
235
|
-
unit: '1',
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
// Cache metrics
|
|
239
|
-
const cacheHit = meter.createCounter('c15t.cache.hit', {
|
|
240
|
-
description: 'Number of cache hits',
|
|
241
|
-
unit: '1',
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
const cacheMiss = meter.createCounter('c15t.cache.miss', {
|
|
245
|
-
description: 'Number of cache misses',
|
|
246
|
-
unit: '1',
|
|
247
|
-
});
|
|
248
|
-
|
|
249
|
-
const cacheLatency = meter.createHistogram('c15t.cache.latency', {
|
|
250
|
-
description: 'Cache operation latency',
|
|
251
|
-
unit: 'ms',
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
// GVL metrics
|
|
255
|
-
const gvlFetchDuration = meter.createHistogram('c15t.gvl.fetch.duration', {
|
|
256
|
-
description: 'GVL fetch latency',
|
|
257
|
-
unit: 'ms',
|
|
258
|
-
});
|
|
259
|
-
|
|
260
|
-
const gvlFetchCount = meter.createCounter('c15t.gvl.fetch.count', {
|
|
261
|
-
description: 'Number of GVL fetches',
|
|
262
|
-
unit: '1',
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
const gvlFetchError = meter.createCounter('c15t.gvl.fetch.error', {
|
|
266
|
-
description: 'Number of GVL fetch errors',
|
|
267
|
-
unit: '1',
|
|
268
|
-
});
|
|
269
|
-
|
|
270
|
-
return {
|
|
271
|
-
// Instruments
|
|
272
|
-
consentCreated,
|
|
273
|
-
consentAccepted,
|
|
274
|
-
consentRejected,
|
|
275
|
-
subjectCreated,
|
|
276
|
-
subjectLinked,
|
|
277
|
-
consentCheckCount,
|
|
278
|
-
initCount,
|
|
279
|
-
httpRequestDuration,
|
|
280
|
-
httpRequestCount,
|
|
281
|
-
httpErrorCount,
|
|
282
|
-
dbQueryDuration,
|
|
283
|
-
dbQueryCount,
|
|
284
|
-
dbErrorCount,
|
|
285
|
-
cacheHit,
|
|
286
|
-
cacheMiss,
|
|
287
|
-
cacheLatency,
|
|
288
|
-
gvlFetchDuration,
|
|
289
|
-
gvlFetchCount,
|
|
290
|
-
gvlFetchError,
|
|
291
|
-
|
|
292
|
-
// Helper methods
|
|
293
|
-
recordConsentCreated(attributes: ConsentMetricAttributes): void {
|
|
294
|
-
consentCreated.add(1, sanitizeAttributes(attributes));
|
|
295
|
-
},
|
|
296
|
-
|
|
297
|
-
recordConsentAccepted(
|
|
298
|
-
attributes: Omit<ConsentMetricAttributes, 'status'>
|
|
299
|
-
): void {
|
|
300
|
-
consentAccepted.add(1, sanitizeAttributes(attributes));
|
|
301
|
-
},
|
|
302
|
-
|
|
303
|
-
recordConsentRejected(
|
|
304
|
-
attributes: Omit<ConsentMetricAttributes, 'status'>
|
|
305
|
-
): void {
|
|
306
|
-
consentRejected.add(1, sanitizeAttributes(attributes));
|
|
307
|
-
},
|
|
308
|
-
|
|
309
|
-
recordSubjectCreated(
|
|
310
|
-
attributes: GeoAttributes & { domain?: string }
|
|
311
|
-
): void {
|
|
312
|
-
subjectCreated.add(1, sanitizeAttributes(attributes));
|
|
313
|
-
},
|
|
314
|
-
|
|
315
|
-
recordSubjectLinked(identityProvider?: string): void {
|
|
316
|
-
subjectLinked.add(1, {
|
|
317
|
-
identityProvider: identityProvider || 'unknown',
|
|
318
|
-
});
|
|
319
|
-
},
|
|
320
|
-
|
|
321
|
-
recordConsentCheck(type: string, found: boolean): void {
|
|
322
|
-
consentCheckCount.add(1, { type, found: String(found) });
|
|
323
|
-
},
|
|
324
|
-
|
|
325
|
-
recordInit(attributes: GeoAttributes): void {
|
|
326
|
-
initCount.add(1, sanitizeAttributes(attributes));
|
|
327
|
-
},
|
|
328
|
-
|
|
329
|
-
recordHttpRequest(
|
|
330
|
-
attributes: HttpMetricAttributes,
|
|
331
|
-
durationMs: number
|
|
332
|
-
): void {
|
|
333
|
-
const attrs = sanitizeAttributes(attributes);
|
|
334
|
-
httpRequestCount.add(1, attrs);
|
|
335
|
-
httpRequestDuration.record(durationMs, attrs);
|
|
336
|
-
|
|
337
|
-
if (attributes.status >= 400) {
|
|
338
|
-
httpErrorCount.add(1, attrs);
|
|
339
|
-
}
|
|
340
|
-
},
|
|
341
|
-
|
|
342
|
-
recordDbQuery(attributes: DbMetricAttributes, durationMs: number): void {
|
|
343
|
-
const attrs = sanitizeAttributes(attributes);
|
|
344
|
-
dbQueryCount.add(1, attrs);
|
|
345
|
-
dbQueryDuration.record(durationMs, attrs);
|
|
346
|
-
},
|
|
347
|
-
|
|
348
|
-
recordDbError(attributes: DbMetricAttributes): void {
|
|
349
|
-
dbErrorCount.add(1, sanitizeAttributes(attributes));
|
|
350
|
-
},
|
|
351
|
-
|
|
352
|
-
recordCacheHit(layer: CacheMetricAttributes['layer']): void {
|
|
353
|
-
cacheHit.add(1, { layer });
|
|
354
|
-
},
|
|
355
|
-
|
|
356
|
-
recordCacheMiss(layer: CacheMetricAttributes['layer']): void {
|
|
357
|
-
cacheMiss.add(1, { layer });
|
|
358
|
-
},
|
|
359
|
-
|
|
360
|
-
recordCacheLatency(
|
|
361
|
-
attributes: CacheMetricAttributes,
|
|
362
|
-
durationMs: number
|
|
363
|
-
): void {
|
|
364
|
-
cacheLatency.record(durationMs, sanitizeAttributes(attributes));
|
|
365
|
-
},
|
|
366
|
-
|
|
367
|
-
recordGvlFetch(attributes: GvlMetricAttributes, durationMs: number): void {
|
|
368
|
-
const attrs = sanitizeAttributes(attributes);
|
|
369
|
-
gvlFetchCount.add(1, attrs);
|
|
370
|
-
gvlFetchDuration.record(durationMs, attrs);
|
|
371
|
-
},
|
|
372
|
-
|
|
373
|
-
recordGvlError(attributes: GvlMetricAttributes): void {
|
|
374
|
-
gvlFetchError.add(1, sanitizeAttributes(attributes));
|
|
375
|
-
},
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
// Lazy-initialized metric instances
|
|
380
|
-
let metricsInstance: C15TMetrics | null = null;
|
|
381
|
-
|
|
382
|
-
/**
|
|
383
|
-
* Get or create the metrics instance for the c15t backend.
|
|
384
|
-
* Returns null if telemetry is not enabled.
|
|
385
|
-
*
|
|
386
|
-
* @param options - C15T options for telemetry configuration
|
|
387
|
-
* @returns C15TMetrics instance or null if telemetry is disabled
|
|
388
|
-
*/
|
|
389
|
-
export function getMetrics(options?: C15TOptions): C15TMetrics | null {
|
|
390
|
-
if (metricsInstance) return metricsInstance;
|
|
391
|
-
if (!isTelemetryEnabled(options)) return null;
|
|
392
|
-
|
|
393
|
-
metricsInstance = createMetrics(getMeter(options));
|
|
394
|
-
return metricsInstance;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
/**
|
|
398
|
-
* Reset the metrics instance (useful for testing)
|
|
399
|
-
*/
|
|
400
|
-
export function resetMetrics(): void {
|
|
401
|
-
metricsInstance = null;
|
|
402
|
-
}
|