#529 by GitHub stars
c15t/c15t
Open-source cookie consent manager and GDPR cookie banner for React, Next.js, Vue and JavaScript. Google Consent Mode v2 and IAB TCF.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
packages/backend/SKILL.md
Week of Nov 2, 2026 · +0 / −32 lines
Before Not checked yet → After Not checked yet
814c839ea50c → 0ae883c23306
SKILL.md was removed.
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 814c839ea50c
No earlier version was observed for comparison.
packages/browser/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
814c839ea50c → 0ae883c23306
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 814c839ea50c
No earlier version was observed for comparison.
packages/c15t/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
814c839ea50c → 0ae883c23306
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 814c839ea50c
No earlier version was observed for comparison.
packages/cli/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
814c839ea50c → 0ae883c23306
A local comparison is unavailable. You can inspect the recorded versions on GitHub.
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 814c839ea50c
No earlier version was observed for comparison.
packages/core/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
814c839ea50c → 0ae883c23306
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 814c839ea50c
No earlier version was observed for comparison.
packages/nextjs/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
814c839ea50c → 0ae883c23306
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 814c839ea50c
No earlier version was observed for comparison.
packages/react/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
814c839ea50c → 0ae883c23306
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 814c839ea50c
No earlier version was observed for comparison.
packages/scripts/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Not checked yet → After Network or broad shell
814c839ea50c → 0ae883c23306
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 814c839ea50c
No earlier version was observed for comparison.
Verified commit 0ae883c23306c0ff60eeef26a6cedaa259cc98e1
git clone --filter=blob:none --no-checkout https://github.com/c15t/c15t.git .hotskills/c15t-c15t && git -C .hotskills/c15t-c15t checkout --detach 0ae883c23306c0ff60eeef26a6cedaa259cc98e1
# Copy each selected skill directory from .hotskills/c15t-c15t into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/c15t/c15t.git .hotskills/c15t-c15t && git -C .hotskills/c15t-c15t checkout --detach 0ae883c23306c0ff60eeef26a6cedaa259cc98e1
# Copy each selected skill directory from .hotskills/c15t-c15t into .agents/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/c15t/c15t.git .hotskills/c15t-c15t && git -C .hotskills/c15t-c15t checkout --detach 0ae883c23306c0ff60eeef26a6cedaa259cc98e1
# Copy each selected skill directory from .hotskills/c15t-c15t into .cursor/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/c15t/c15t.git .hotskills/c15t-c15t && git -C .hotskills/c15t-c15t checkout --detach 0ae883c23306c0ff60eeef26a6cedaa259cc98e1
# Copy each selected skill directory from .hotskills/c15t-c15t into .github/skills/<skill-name>/Heat
3.1- Star growth, last 7 daysAhead of 37% of tracked repositories
- Star growth, last 24 hoursAhead of 5% of tracked repositories
- Rank movement, last 7 daysAhead of 21% of tracked repositories
- Commits, last 30 daysAhead of 98% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
Individual skills in this repository
- c15t-browser
packages/browser - c15t
packages/c15t - c15t-core
packages/core - c15t-nextjs
packages/nextjs - c15t-react
packages/react - c15t-scripts
packages/scripts
How it works
c15t-browser
When your agent uses it
Set up, customize or debug c15t consent management with @c15t/browser. Use when the site is plain HTML, a CMS, a page builder or a static site generator, or a bundled app without a UI framework, or when a task mentions a cookie banner, consent dialog, GDPR or CCPA prompts, blocking analytics until consent, Google Consent Mode or IAB TCF.
What it loads into context
Frontmatter
88 tokensAlways available to the agent
SKILL.md
625 tokensWhen the skill is activated
Reference documents
38,943 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Before writing code
- Rules
- Customize with the smallest change
- Finish with a check
Scripts executed separately
package.jsonrslib.config.tsscripts/build-styles.tsscripts/copy-styles.tsscripts/iab-bundle-boundary.tsscripts/mode-bundle-boundary.tsscripts/prune-stylesheet.tssrc/__tests__/auto-init.test.tssrc/__tests__/banner-corner.browser.test.tssrc/__tests__/clear-on-revocation.test.tssrc/__tests__/client-lifecycle.test.tssrc/__tests__/client.test.tssrc/__tests__/conformance.test.tssrc/__tests__/csp-nonce.browser.test.tssrc/__tests__/devtools.test.tssrc/__tests__/dialog-motion.browser.test.tssrc/__tests__/dialog-surface.test.tssrc/__tests__/esm-modes.test.tssrc/__tests__/external-source.test.tssrc/__tests__/fixtures/factory-init.tssrc/__tests__/fixtures/storage-sync-page.tssrc/__tests__/fixtures/subject-conflict-page.tssrc/__tests__/fixtures/ui-csp-page.tssrc/__tests__/gated-scripts.browser.test.tssrc/__tests__/gated-scripts.test.tssrc/__tests__/global-events.test.tssrc/__tests__/gpp.test.tssrc/__tests__/gtm-template.test.tssrc/__tests__/host-visibility.browser.test.tssrc/__tests__/iab-additional-consent.test.tssrc/__tests__/iab-config.test.tssrc/__tests__/iab-disclosures.test.tssrc/__tests__/iab-policy.test.tssrc/__tests__/iab-toggles.test.tssrc/__tests__/iab-unavailable.test.tssrc/__tests__/iab.browser.test.tssrc/__tests__/iab.test.tssrc/__tests__/legal-links.test.tssrc/__tests__/manifest.test.tssrc/__tests__/manual-init.test.tssrc/__tests__/mode-entries.test.tssrc/__tests__/mode-globals.test.tssrc/__tests__/no-records-warning.test.tssrc/__tests__/part-styling.browser.test.tssrc/__tests__/postcss-tailwind3-entry.test.tssrc/__tests__/queue-replay.test.tssrc/__tests__/storage-sync.browser.test.tssrc/__tests__/stylesheet-prune.test.tssrc/__tests__/subject-conflict.browser.test.tssrc/__tests__/subject-id.test.tssrc/__tests__/switch-direction.browser.test.tssrc/__tests__/trigger-devtools.test.tssrc/__tests__/trigger-motion.browser.test.tssrc/__tests__/ui.test.tssrc/__tests__/vendor-consent.test.tssrc/auto-init.tssrc/client-base.tssrc/client.tssrc/create-runtime-static.tssrc/create-runtime.tssrc/deferred.tssrc/devtools-mount.tssrc/devtools.tssrc/entries/cdn-devtools.tssrc/entries/cdn-gpp.tssrc/entries/cdn-headless.tssrc/entries/cdn-iab.tssrc/entries/cdn-local.tssrc/entries/cdn-offline.tssrc/entries/cdn.tssrc/gated-scripts.tssrc/global-base.tssrc/global.tssrc/gpp.tssrc/has-decided.tssrc/headless.tssrc/hosted-client.tssrc/hosted-global.tssrc/hosted.tssrc/iab.tssrc/iab/mount.tssrc/iab/preferences.tssrc/iab/styles.tssrc/iab/surface.tssrc/iab/vendor-disclosures.tssrc/index.tssrc/no-records-warning.tssrc/offline-client.tssrc/offline-global.tssrc/offline.tssrc/policy-rules.tssrc/postcss-tailwind3.tssrc/script-tag-client.tssrc/transports/hosted.tssrc/transports/manifest.tssrc/transports/offline.tssrc/types.tssrc/ui/actions.tssrc/ui/banner.tssrc/ui/branding.tssrc/ui/copy.tssrc/ui/dialog-surface.tssrc/ui/dialog.tssrc/ui/dom.tssrc/ui/mount.tssrc/ui/slots.tssrc/ui/surface.tssrc/ui/trigger-toolbar.tssrc/ui/trigger.tssrc/ui/vendor-list.tssrc/ui/widget.tsvitest.config.ts
Files
.gitignoreasset149 bytesAGENTS.mddoc31,435 bytesCHANGELOG.mddoc102,383 bytesREADME.mddoc10,045 bytesSKILL.mdcore2,765 bytesdocs/integrations/cloudflare-zaraz.mddoc15,042 bytesgtm-template/README.mddoc2,071 bytesgtm-template/template.tplasset36,653 bytesknip.jsonasset482 bytespackage.jsonruns4,146 bytesreadme.jsonasset3,714 bytesrslib.config.tsruns4,190 bytesscripts/build-styles.tsruns4,059 bytesscripts/copy-styles.tsruns979 bytesscripts/iab-bundle-boundary.tsruns726 bytesscripts/mode-bundle-boundary.tsruns2,591 bytesscripts/prune-stylesheet.tsruns6,258 bytessrc/__tests__/auto-init.test.tsruns10,958 bytessrc/__tests__/banner-corner.browser.test.tsruns1,971 bytessrc/__tests__/clear-on-revocation.test.tsruns2,937 bytessrc/__tests__/client-lifecycle.test.tsruns2,756 bytessrc/__tests__/client.test.tsruns18,760 bytessrc/__tests__/conformance.test.tsruns2,663 bytessrc/__tests__/csp-nonce.browser.test.tsruns1,990 bytessrc/__tests__/devtools.test.tsruns3,291 bytessrc/__tests__/dialog-motion.browser.test.tsruns2,069 bytessrc/__tests__/dialog-surface.test.tsruns3,228 bytessrc/__tests__/esm-modes.test.tsruns5,037 bytessrc/__tests__/external-source.test.tsruns1,809 bytessrc/__tests__/fixtures/factory-init.tsruns1,692 bytessrc/__tests__/fixtures/gated-scripts-csp.htmlasset226 bytessrc/__tests__/fixtures/gated-scripts-strict-dynamic.htmlasset609 bytessrc/__tests__/fixtures/storage-sync-page.tsruns1,312 bytessrc/__tests__/fixtures/storage-sync.htmlasset485 bytessrc/__tests__/fixtures/subject-conflict-page.tsruns3,326 bytessrc/__tests__/fixtures/subject-conflict.htmlasset489 bytessrc/__tests__/fixtures/ui-csp-page.tsruns1,419 bytessrc/__tests__/fixtures/ui-csp.htmlasset323 bytessrc/__tests__/gated-scripts.browser.test.tsruns4,437 bytessrc/__tests__/gated-scripts.test.tsruns12,146 bytessrc/__tests__/global-events.test.tsruns7,130 bytessrc/__tests__/gpp.test.tsruns4,001 bytessrc/__tests__/gtm-template.test.tsruns24,714 bytessrc/__tests__/host-visibility.browser.test.tsruns1,755 bytessrc/__tests__/iab-additional-consent.test.tsruns6,090 bytessrc/__tests__/iab-config.test.tsruns6,174 bytessrc/__tests__/iab-disclosures.test.tsruns6,825 bytessrc/__tests__/iab-policy.test.tsruns7,082 bytessrc/__tests__/iab-toggles.test.tsruns9,029 bytessrc/__tests__/iab-unavailable.test.tsruns5,590 bytessrc/__tests__/iab.browser.test.tsruns4,521 bytessrc/__tests__/iab.test.tsruns15,944 bytessrc/__tests__/legal-links.test.tsruns4,437 bytessrc/__tests__/manifest.test.tsruns23,124 bytessrc/__tests__/manual-init.test.tsruns5,845 bytessrc/__tests__/mode-entries.test.tsruns16,515 bytessrc/__tests__/mode-globals.test.tsruns13,128 bytessrc/__tests__/no-records-warning.test.tsruns4,108 bytessrc/__tests__/part-styling.browser.test.tsruns5,149 bytessrc/__tests__/postcss-tailwind3-entry.test.tsruns829 bytessrc/__tests__/queue-replay.test.tsruns8,391 bytessrc/__tests__/storage-sync.browser.test.tsruns3,301 bytessrc/__tests__/stylesheet-prune.test.tsruns5,230 bytessrc/__tests__/subject-conflict.browser.test.tsruns4,460 bytessrc/__tests__/subject-id.test.tsruns6,407 bytessrc/__tests__/switch-direction.browser.test.tsruns2,736 bytessrc/__tests__/trigger-devtools.test.tsruns6,582 bytessrc/__tests__/trigger-motion.browser.test.tsruns1,917 bytessrc/__tests__/ui.test.tsruns33,185 bytessrc/__tests__/vendor-consent.test.tsruns14,453 bytessrc/auto-init.tsruns7,640 bytessrc/client-base.tsruns20,089 bytessrc/client.tsruns1,722 bytessrc/create-runtime-static.tsruns1,728 bytessrc/create-runtime.tsruns1,486 bytessrc/deferred.tsruns1,119 bytessrc/devtools-mount.tsruns2,004 bytessrc/devtools.tsruns1,818 bytessrc/entries/cdn-devtools.tsruns2,613 bytessrc/entries/cdn-gpp.tsruns1,568 bytessrc/entries/cdn-headless.tsruns426 bytessrc/entries/cdn-iab.tsruns757 bytessrc/entries/cdn-local.tsruns573 bytessrc/entries/cdn-offline.tsruns811 bytessrc/entries/cdn.tsruns613 bytessrc/gated-scripts.tsruns10,779 bytessrc/global-base.tsruns18,555 bytessrc/global.tsruns1,332 bytessrc/gpp.tsruns1,406 bytessrc/has-decided.tsruns510 bytessrc/headless.tsruns2,736 bytessrc/hosted-client.tsruns1,890 bytessrc/hosted-global.tsruns1,057 bytessrc/hosted.tsruns2,115 bytessrc/iab.tsruns1,622 bytessrc/iab/mount.tsruns770 bytessrc/iab/preferences.tsruns19,251 bytessrc/iab/styles.tsruns2,336 bytessrc/iab/surface.tsruns12,858 bytessrc/iab/vendor-disclosures.tsruns5,504 bytessrc/index.tsruns3,000 bytessrc/no-records-warning.tsruns1,648 bytessrc/offline-client.tsruns1,850 bytessrc/offline-global.tsruns1,161 bytessrc/offline.tsruns2,187 bytessrc/policy-rules.tsruns1,095 bytessrc/postcss-tailwind3.tsruns616 bytessrc/script-tag-client.tsruns2,790 bytessrc/transports/hosted.tsruns2,431 bytessrc/transports/manifest.tsruns3,375 bytessrc/transports/offline.tsruns324 bytessrc/types.tsruns21,653 bytessrc/ui/actions.tsruns3,465 bytessrc/ui/banner.tsruns9,895 bytessrc/ui/branding.tsruns5,370 bytessrc/ui/copy.tsruns1,717 bytessrc/ui/dialog-surface.tsruns3,749 bytessrc/ui/dialog.tsruns9,392 bytessrc/ui/dom.tsruns5,148 bytessrc/ui/mount.tsruns9,207 bytessrc/ui/slots.tsruns3,153 bytessrc/ui/surface.tsruns2,908 bytessrc/ui/trigger-toolbar.tsruns4,943 bytessrc/ui/trigger.tsruns11,171 bytessrc/ui/vendor-list.tsruns10,421 bytessrc/ui/widget.tsruns13,465 bytestsconfig.jsonasset349 bytesvitest.config.tsruns5,802 bytes
Read SKILL.md
# c15t with @c15t/browser
The Markdown under `./docs` matches the installed version. Read it before writing code: v3 renamed most v2 APIs, so remembered examples are usually wrong.
## Before writing code
1. Find the framework, router, rendering mode (server, static, cached or single-page) and host in the project. Check the framework config and route files for settings that prerender or cache pages.
2. Pick the matching row in [Choose your setup](./docs/concepts/choose-your-setup.md).
3. Follow that guide from start to finish: [HTML script tag](./docs/frameworks/html/quickstart.md), [JavaScript](./docs/frameworks/javascript/quickstart.md).
## Rules
- Install with a `<script>` tag for `@c15t/browser` from jsDelivr, or `npm install @c15t/browser`. Keep every c15t package on the same release.
- The backend URL comes from the user's Inth project or self-hosted backend. It is public configuration. Never invent one; ask for it or read it from the environment.View the complete source on GitHubc15t
When your agent uses it
Set up, customize or debug c15t consent management with the c15t umbrella package. Use when the project uses c15t with Next.js, React, TanStack Start, Vue, Nuxt, Astro or plain JavaScript, or when a task mentions a cookie banner, consent dialog, GDPR or CCPA prompts, blocking analytics until consent, Google Consent Mode or IAB TCF.
What it loads into context
Frontmatter
88 tokensAlways available to the agent
SKILL.md
737 tokensWhen the skill is activated
Reference documents
72,503 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Before writing code
- Rules
- Customize with the smallest change
- Finish with a check
Scripts executed separately
__tests__/facade-parity.test.ts__tests__/parity-runner.mjspackage.jsonscripts/copy-distribution-css.tsshims/astro.d.tsshims/astro.jsshims/astro/api.d.tsshims/astro/api.jsshims/astro/client.d.tsshims/astro/client.jsshims/astro/components.d.tsshims/astro/components.jsshims/astro/components/consent-script.astro.d.tsshims/astro/components/consent-script.astro.jsshims/astro/components/iab-panel.astro.d.tsshims/astro/components/iab-panel.astro.jsshims/astro/components/iab-prompt.astro.d.tsshims/astro/components/iab-prompt.astro.jsshims/astro/components/panel-link.astro.d.tsshims/astro/components/panel-link.astro.jsshims/astro/components/panel.astro.d.tsshims/astro/components/panel.astro.jsshims/astro/components/prompt-deferred.astro.d.tsshims/astro/components/prompt-deferred.astro.jsshims/astro/components/prompt.astro.d.tsshims/astro/components/prompt.astro.jsshims/astro/middleware.d.tsshims/astro/middleware.jsshims/astro/server.d.tsshims/astro/server.jsshims/astro/ui/react.d.tsshims/astro/ui/react.jsshims/astro/ui/svelte.d.tsshims/astro/ui/svelte.jsshims/astro/ui/vue.d.tsshims/astro/ui/vue.jsshims/build.d.tsshims/build.jsshims/consent-categories.d.tsshims/consent-categories.jsshims/consent-record.d.tsshims/consent-record.jsshims/events.d.tsshims/events.jsshims/experiment.d.tsshims/experiment.jsshims/generated.d.tsshims/generated.jsshims/index.d.tsshims/index.jsshims/libs/generate-subject-id.d.tsshims/libs/generate-subject-id.jsshims/modes.d.tsshims/modes.jsshims/modules/clear-on-revocation.d.tsshims/modules/clear-on-revocation.jsshims/modules/iframe-blocker.d.tsshims/modules/iframe-blocker.jsshims/modules/network-blocker.d.tsshims/modules/network-blocker.jsshims/modules/network-hold.d.tsshims/modules/network-hold.jsshims/modules/persistence.d.tsshims/modules/persistence.jsshims/modules/script-loader.d.tsshims/modules/script-loader.jsshims/modules/window-debug.d.tsshims/modules/window-debug.jsshims/next.d.tsshims/next.jsshims/next/api.d.tsshims/next/api.jsshims/next/build.d.tsshims/next/build.jsshims/next/components/panel-link.d.tsshims/next/components/panel-link.jsshims/next/devtools.d.tsshims/next/devtools.jsshims/next/headless.d.tsshims/next/headless.jsshims/next/middleware.d.tsshims/next/middleware.jsshims/next/pages.d.tsshims/next/pages.jsshims/next/proxy.d.tsshims/next/proxy.jsshims/next/server.d.tsshims/next/server.jsshims/next/static.d.tsshims/next/static.jsshims/postcss-tailwind3.d.tsshims/postcss-tailwind3.jsshims/preference-draft.d.tsshims/preference-draft.jsshims/react.d.tsshims/react.jsshims/react/components/consent-gate.d.tsshims/react/components/consent-gate.jsshims/react/components/frame.d.tsshims/react/components/frame.jsshims/react/components/panel-link.d.tsshims/react/components/panel-link.jsshims/react/components/panel-trigger.d.tsshims/react/components/panel-trigger.jsshims/react/components/panel.d.tsshims/react/components/panel.jsshims/react/components/preferences.d.tsshims/react/components/preferences.jsshims/react/components/prompt.d.tsshims/react/components/prompt.jsshims/react/consent-gate.d.tsshims/react/consent-gate.jsshims/react/context.d.tsshims/react/context.jsshims/react/devtools.d.tsshims/react/devtools.jsshims/react/draft.d.tsshims/react/draft.jsshims/react/frame.d.tsshims/react/frame.jsshims/react/gpp.d.tsshims/react/gpp.jsshims/react/headless.d.tsshims/react/headless.jsshims/react/hooks.d.tsshims/react/hooks.jsshims/react/iab.d.tsshims/react/iab.jsshims/react/modes.d.tsshims/react/modes.jsshims/react/module-hooks.d.tsshims/react/module-hooks.jsshims/react/module-hooks/iframe-blocker.d.tsshims/react/module-hooks/iframe-blocker.jsshims/react/module-hooks/network-blocker.d.tsshims/react/module-hooks/network-blocker.jsshims/react/module-hooks/persistence.d.tsshims/react/module-hooks/persistence.jsshims/react/module-hooks/script-loader.d.tsshims/react/module-hooks/script-loader.jsshims/react/panel-link.d.tsshims/react/panel-link.jsshims/react/panel-trigger.d.tsshims/react/panel-trigger.jsshims/react/panel.d.tsshims/react/panel.jsshims/react/preferences.d.tsshims/react/preferences.jsshims/react/primitives.d.tsshims/react/primitives.jsshims/react/primitives/accordion.d.tsshims/react/primitives/accordion.jsshims/react/primitives/button.d.tsshims/react/primitives/button.jsshims/react/primitives/collapsible.d.tsshims/react/primitives/collapsible.jsshims/react/primitives/dialog.d.tsshims/react/primitives/dialog.jsshims/react/primitives/preference-item.d.tsshims/react/primitives/preference-item.jsshims/react/primitives/switch.d.tsshims/react/primitives/switch.jsshims/react/primitives/tabs.d.tsshims/react/primitives/tabs.jsshims/react/prompt.d.tsshims/react/prompt.jsshims/react/provider.d.tsshims/react/provider.jsshims/react/server.d.tsshims/react/server.jsshims/react/theme.d.tsshims/react/theme.jsshims/react/types.d.tsshims/react/types.jsshims/react/utils.d.tsshims/react/utils.jsshims/runtime.d.tsshims/runtime.jsshims/runtime/client-mode.d.tsshims/runtime/client-mode.jsshims/runtime/controls.d.tsshims/runtime/controls.jsshims/runtime/on-demand-factories.d.tsshims/runtime/on-demand-factories.jsshims/runtime/on-demand.d.tsshims/runtime/on-demand.jsshims/runtime/provider.d.tsshims/runtime/provider.jsshims/runtime/script-server-start.d.tsshims/runtime/script-server-start.jsshims/server.d.tsshims/server.jsshims/static.d.tsshims/static.jsshims/surface-actions.d.tsshims/surface-actions.jsshims/svelte.d.tsshims/svelte.jsshims/svelte/devtools.d.tsshims/svelte/devtools.jsshims/svelte/headless.d.tsshims/svelte/headless.jsshims/svelte/kit.d.tsshims/svelte/kit.jsshims/svelte/kit/locals.d.tsshims/svelte/server.d.tsshims/svelte/server.jsshims/svelte/vite.d.tsshims/svelte/vite.jsshims/tanstack-start.d.tsshims/tanstack-start.jsshims/tanstack-start/api.d.tsshims/tanstack-start/api.jsshims/tanstack-start/build.d.tsshims/tanstack-start/build.jsshims/tanstack-start/components/panel-link.d.tsshims/tanstack-start/components/panel-link.jsshims/tanstack-start/headless.d.tsshims/tanstack-start/headless.jsshims/tanstack-start/middleware.d.tsshims/tanstack-start/middleware.jsshims/tanstack-start/server.d.tsshims/tanstack-start/server.jsshims/tanstack-start/static.d.tsshims/tanstack-start/static.jsshims/transports.d.tsshims/transports.jsshims/transports/manifest-browser.d.tsshims/transports/manifest-browser.jsshims/transports/manifest-cache.d.tsshims/transports/manifest-cache.jsshims/transports/manifest-location.d.tsshims/transports/manifest-location.jsshims/transports/manifest.d.tsshims/transports/manifest.jsshims/vue.d.tsshims/vue.jsshims/vue/composables/activeUI.d.tsshims/vue/composables/activeUI.jsshims/vue/composables/component.d.tsshims/vue/composables/component.jsshims/vue/composables/config.d.tsshims/vue/composables/config.jsshims/vue/composables/consent.d.tsshims/vue/composables/consent.jsshims/vue/composables/draft.d.tsshims/vue/composables/draft.jsshims/vue/composables/event-dispatcher.d.tsshims/vue/composables/event-dispatcher.jsshims/vue/composables/experiment.d.tsshims/vue/composables/experiment.jsshims/vue/composables/iab-translations.d.tsshims/vue/composables/iab-translations.jsshims/vue/composables/iabSelection.d.tsshims/vue/composables/iabSelection.jsshims/vue/composables/index.d.tsshims/vue/composables/index.jsshims/vue/composables/init.d.tsshims/vue/composables/init.jsshims/vue/composables/kernel.d.tsshims/vue/composables/kernel.jsshims/vue/composables/language.d.tsshims/vue/composables/language.jsshims/vue/composables/region.d.tsshims/vue/composables/region.jsshims/vue/composables/stubs/cookie.d.tsshims/vue/composables/stubs/cookie.jsshims/vue/composables/stubs/fetch.d.tsshims/vue/composables/stubs/fetch.jsshims/vue/composables/stubs/requestHeaders.d.tsshims/vue/composables/stubs/requestHeaders.jsshims/vue/composables/stubs/state.d.tsshims/vue/composables/stubs/state.jsshims/vue/composables/use-consent-policy-actions.d.tsshims/vue/composables/use-consent-policy-actions.jsshims/vue/composables/use-consent-scroll-lock.d.tsshims/vue/composables/use-consent-scroll-lock.jsshims/vue/composables/use-devtools-launcher.d.tsshims/vue/composables/use-devtools-launcher.jsshims/vue/composables/use-draggable.d.tsshims/vue/composables/use-draggable.jsshims/vue/composables/use-late-entry.d.tsshims/vue/composables/use-late-entry.jsshims/vue/composables/use-local-storage-ref.d.tsshims/vue/composables/use-local-storage-ref.jsshims/vue/composables/use-mounted.d.tsshims/vue/composables/use-mounted.jsshims/vue/composables/use-surface-translations.d.tsshims/vue/composables/use-surface-translations.jsshims/vue/composables/use-window-size.d.tsshims/vue/composables/use-window-size.jsshims/vue/devtools.d.tsshims/vue/devtools.jsshims/vue/runtime/color-scheme.d.tsshims/vue/runtime/color-scheme.jsshims/vue/runtime/components/actions.d.vue.tsshims/vue/runtime/components/actions.vue.d.tsshims/vue/runtime/components/branding-icon.d.vue.tsshims/vue/runtime/components/branding-icon.vue.d.tsshims/vue/runtime/components/button.d.vue.tsshims/vue/runtime/components/button.vue.d.tsshims/vue/runtime/components/consent-actions.vue.d.tsshims/vue/runtime/components/consent-actions.vue.jsshims/vue/runtime/components/consent-branding-icon.vue.d.tsshims/vue/runtime/components/consent-branding-icon.vue.jsshims/vue/runtime/components/consent-button.vue.d.tsshims/vue/runtime/components/consent-button.vue.jsshims/vue/runtime/components/consent-description.vue.d.tsshims/vue/runtime/components/consent-description.vue.jsshims/vue/runtime/components/consent-dialog-link.d.vue.tsshims/vue/runtime/components/consent-dialog-link.vue.d.tsshims/vue/runtime/components/consent-gate.d.vue.tsshims/vue/runtime/components/consent-gate.vue.d.tsshims/vue/runtime/components/consent-gate.vue.jsshims/vue/runtime/components/consent-legal-links.vue.d.tsshims/vue/runtime/components/consent-legal-links.vue.jsshims/vue/runtime/components/consent-link.vue.d.tsshims/vue/runtime/components/consent-link.vue.jsshims/vue/runtime/components/consent-root.vue.d.tsshims/vue/runtime/components/consent-root.vue.jsshims/vue/runtime/components/consent-switch.vue.d.tsshims/vue/runtime/components/consent-switch.vue.jsshims/vue/runtime/components/consent-tag.vue.d.tsshims/vue/runtime/components/consent-tag.vue.jsshims/vue/runtime/components/description-content.d.vue.tsshims/vue/runtime/components/description-content.vue.d.tsshims/vue/runtime/components/description.d.vue.tsshims/vue/runtime/components/description.vue.d.tsshims/vue/runtime/components/early-tap-script.d.tsshims/vue/runtime/components/early-tap-script.jsshims/vue/runtime/components/iab-feature-item.d.vue.tsshims/vue/runtime/components/iab-feature-item.vue.d.tsshims/vue/runtime/components/iab-panel.d.vue.tsshims/vue/runtime/components/iab-panel.vue.d.tsshims/vue/runtime/components/iab-panel.vue.jsshims/vue/runtime/components/iab-prompt.d.vue.tsshims/vue/runtime/components/iab-prompt.vue.d.tsshims/vue/runtime/components/iab-prompt.vue.jsshims/vue/runtime/components/iab-purpose-item.d.vue.tsshims/vue/runtime/components/iab-purpose-item.vue.d.tsshims/vue/runtime/components/iab-stack-item.d.vue.tsshims/vue/runtime/components/iab-stack-item.vue.d.tsshims/vue/runtime/components/iab-vendor-list.d.vue.tsshims/vue/runtime/components/iab-vendor-list.vue.d.tsshims/vue/runtime/components/icons/chevron-right-icon.d.vue.tsshims/vue/runtime/components/icons/chevron-right-icon.vue.d.tsshims/vue/runtime/components/icons/globe-icon.d.vue.tsshims/vue/runtime/components/icons/globe-icon.vue.d.tsshims/vue/runtime/components/icons/legitimate-interest-icon.d.vue.tsshims/vue/runtime/components/icons/legitimate-interest-icon.vue.d.tsshims/vue/runtime/components/icons/lock-icon.d.vue.tsshims/vue/runtime/components/icons/lock-icon.vue.d.tsshims/vue/runtime/components/index.d.tsshims/vue/runtime/components/index.jsshims/vue/runtime/components/lazy-surfaces.d.tsshims/vue/runtime/components/lazy-surfaces.jsshims/vue/runtime/components/legal-links.d.vue.tsshims/vue/runtime/components/legal-links.vue.d.tsshims/vue/runtime/components/link.d.vue.tsshims/vue/runtime/components/link.vue.d.tsshims/vue/runtime/components/manager.d.vue.tsshims/vue/runtime/components/manager.vue.d.tsshims/vue/runtime/components/manager.vue.jsshims/vue/runtime/components/nuxt-consent-root.vue.d.tsshims/vue/runtime/components/nuxt-consent-root.vue.jsshims/vue/runtime/components/nuxt-root.d.vue.tsshims/vue/runtime/components/nuxt-root.vue.d.tsshims/vue/runtime/components/panel-link.vue.d.tsshims/vue/runtime/components/panel-link.vue.jsshims/vue/runtime/components/panel-trigger.d.vue.tsshims/vue/runtime/components/panel-trigger.vue.d.tsshims/vue/runtime/components/panel-trigger.vue.jsshims/vue/runtime/components/preferences-manager-context.d.tsshims/vue/runtime/components/preferences-manager-context.jsshims/vue/runtime/components/preferences-manager-context.js.d.tsshims/vue/runtime/components/preferences-manager-context.js.jsshims/vue/runtime/components/preferences.d.vue.tsshims/vue/runtime/components/preferences.vue.d.tsshims/vue/runtime/components/preferences.vue.jsshims/vue/runtime/components/prompt.d.vue.tsshims/vue/runtime/components/prompt.vue.d.tsshims/vue/runtime/components/prompt.vue.jsshims/vue/runtime/components/root.d.vue.tsshims/vue/runtime/components/root.vue.d.tsshims/vue/runtime/components/switch.d.vue.tsshims/vue/runtime/components/switch.vue.d.tsshims/vue/runtime/components/tag.d.vue.tsshims/vue/runtime/components/tag.vue.d.tsshims/vue/runtime/components/trigger-icon.d.vue.tsshims/vue/runtime/components/trigger-icon.vue.d.tsshims/vue/runtime/components/vendor-list.d.vue.tsshims/vue/runtime/components/vendor-list.vue.d.tsshims/vue/runtime/composables/activeUI.d.tsshims/vue/runtime/composables/activeUI.jsshims/vue/runtime/composables/component.d.tsshims/vue/runtime/composables/component.jsshims/vue/runtime/composables/config.d.tsshims/vue/runtime/composables/config.jsshims/vue/runtime/composables/consent.d.tsshims/vue/runtime/composables/consent.jsshims/vue/runtime/composables/draft.d.tsshims/vue/runtime/composables/draft.jsshims/vue/runtime/composables/event-dispatcher.d.tsshims/vue/runtime/composables/event-dispatcher.jsshims/vue/runtime/composables/experiment.d.tsshims/vue/runtime/composables/experiment.jsshims/vue/runtime/composables/iab-translations.d.tsshims/vue/runtime/composables/iab-translations.jsshims/vue/runtime/composables/iabSelection.d.tsshims/vue/runtime/composables/iabSelection.jsshims/vue/runtime/composables/index.d.tsshims/vue/runtime/composables/index.jsshims/vue/runtime/composables/init.d.tsshims/vue/runtime/composables/init.jsshims/vue/runtime/composables/kernel.d.tsshims/vue/runtime/composables/kernel.jsshims/vue/runtime/composables/language.d.tsshims/vue/runtime/composables/language.jsshims/vue/runtime/composables/region.d.tsshims/vue/runtime/composables/region.jsshims/vue/runtime/composables/stubs/cookie.d.tsshims/vue/runtime/composables/stubs/cookie.jsshims/vue/runtime/composables/stubs/fetch.d.tsshims/vue/runtime/composables/stubs/fetch.jsshims/vue/runtime/composables/stubs/requestHeaders.d.tsshims/vue/runtime/composables/stubs/requestHeaders.jsshims/vue/runtime/composables/stubs/state.d.tsshims/vue/runtime/composables/stubs/state.jsshims/vue/runtime/composables/use-consent-policy-actions.d.tsshims/vue/runtime/composables/use-consent-policy-actions.jsshims/vue/runtime/composables/use-consent-scroll-lock.d.tsshims/vue/runtime/composables/use-consent-scroll-lock.jsshims/vue/runtime/composables/use-devtools-launcher.d.tsshims/vue/runtime/composables/use-devtools-launcher.jsshims/vue/runtime/composables/use-draggable.d.tsshims/vue/runtime/composables/use-draggable.jsshims/vue/runtime/composables/use-late-entry.d.tsshims/vue/runtime/composables/use-late-entry.jsshims/vue/runtime/composables/use-local-storage-ref.d.tsshims/vue/runtime/composables/use-local-storage-ref.jsshims/vue/runtime/composables/use-mounted.d.tsshims/vue/runtime/composables/use-mounted.jsshims/vue/runtime/composables/use-surface-translations.d.tsshims/vue/runtime/composables/use-surface-translations.jsshims/vue/runtime/composables/use-window-size.d.tsshims/vue/runtime/composables/use-window-size.jsshims/vue/runtime/config.d.tsshims/vue/runtime/config.jsshims/vue/runtime/devtools/bridge.d.tsshims/vue/runtime/devtools/bridge.jsshims/vue/runtime/devtools/constants.d.tsshims/vue/runtime/devtools/constants.jsshims/vue/runtime/devtools/page.d.tsshims/vue/runtime/devtools/page.jsshims/vue/runtime/devtools/plugin.nuxt.d.tsshims/vue/runtime/devtools/plugin.nuxt.jsshims/vue/runtime/devtools/services.d.tsshims/vue/runtime/devtools/services.jsshims/vue/runtime/kernel.d.tsshims/vue/runtime/kernel.jsshims/vue/runtime/modes.d.tsshims/vue/runtime/modes.jsshims/vue/runtime/nuxt-mode.d.tsshims/vue/runtime/nuxt-mode.jsshims/vue/runtime/plugin.nuxt.d.tsshims/vue/runtime/plugin.nuxt.jsshims/vue/runtime/primitives/accordion-content.d.vue.tsshims/vue/runtime/primitives/accordion-content.vue.d.tsshims/vue/runtime/primitives/accordion-item.d.vue.tsshims/vue/runtime/primitives/accordion-item.vue.d.tsshims/vue/runtime/primitives/accordion-root.d.vue.tsshims/vue/runtime/primitives/accordion-root.vue.d.tsshims/vue/runtime/primitives/accordion-trigger.d.tsshims/vue/runtime/primitives/accordion-trigger.jsshims/vue/runtime/primitives/dialog-content.d.vue.tsshims/vue/runtime/primitives/dialog-content.vue.d.tsshims/vue/runtime/primitives/dialog-overlay.d.vue.tsshims/vue/runtime/primitives/dialog-overlay.vue.d.tsshims/vue/runtime/primitives/dialog-portal.d.vue.tsshims/vue/runtime/primitives/dialog-portal.vue.d.tsshims/vue/runtime/primitives/dialog-root.d.vue.tsshims/vue/runtime/primitives/dialog-root.vue.d.tsshims/vue/runtime/primitives/focus-scope.d.vue.tsshims/vue/runtime/primitives/focus-scope.vue.d.tsshims/vue/runtime/primitives/index.d.tsshims/vue/runtime/primitives/index.jsshims/vue/runtime/primitives/keys.d.tsshims/vue/runtime/primitives/keys.jsshims/vue/runtime/primitives/preference-item/context.d.tsshims/vue/runtime/primitives/preference-item/context.jsshims/vue/runtime/primitives/preference-item/preference-item-auxiliary.d.vue.tsshims/vue/runtime/primitives/preference-item/preference-item-auxiliary.vue.d.tsshims/vue/runtime/primitives/preference-item/preference-item-content.d.vue.tsshims/vue/runtime/primitives/preference-item/preference-item-content.vue.d.tsshims/vue/runtime/primitives/preference-item/preference-item-control.d.vue.tsshims/vue/runtime/primitives/preference-item/preference-item-control.vue.d.tsshims/vue/runtime/primitives/preference-item/preference-item-header.d.vue.tsshims/vue/runtime/primitives/preference-item/preference-item-header.vue.d.tsshims/vue/runtime/primitives/preference-item/preference-item-leading.d.vue.tsshims/vue/runtime/primitives/preference-item/preference-item-leading.vue.d.tsshims/vue/runtime/primitives/preference-item/preference-item-meta.d.vue.tsshims/vue/runtime/primitives/preference-item/preference-item-meta.vue.d.tsshims/vue/runtime/primitives/preference-item/preference-item-root.d.vue.tsshims/vue/runtime/primitives/preference-item/preference-item-root.vue.d.tsshims/vue/runtime/primitives/preference-item/preference-item-title.d.vue.tsshims/vue/runtime/primitives/preference-item/preference-item-title.vue.d.tsshims/vue/runtime/primitives/preference-item/preference-item-trigger.d.vue.tsshims/vue/runtime/primitives/preference-item/preference-item-trigger.vue.d.tsshims/vue/runtime/primitives/preference-item/variants.d.tsshims/vue/runtime/primitives/preference-item/variants.jsshims/vue/runtime/primitives/switch-root.d.vue.tsshims/vue/runtime/primitives/switch-root.vue.d.tsshims/vue/runtime/primitives/switch-thumb.d.vue.tsshims/vue/runtime/primitives/switch-thumb.vue.d.tsshims/vue/runtime/primitives/switch-variants.d.tsshims/vue/runtime/primitives/switch-variants.jsshims/vue/runtime/primitives/tabs/context.d.tsshims/vue/runtime/primitives/tabs/context.jsshims/vue/runtime/primitives/tabs/tabs-content.d.vue.tsshims/vue/runtime/primitives/tabs/tabs-content.vue.d.tsshims/vue/runtime/primitives/tabs/tabs-list.d.vue.tsshims/vue/runtime/primitives/tabs/tabs-list.vue.d.tsshims/vue/runtime/primitives/tabs/tabs-root.d.vue.tsshims/vue/runtime/primitives/tabs/tabs-root.vue.d.tsshims/vue/runtime/primitives/tabs/tabs-trigger.d.vue.tsshims/vue/runtime/primitives/tabs/tabs-trigger.vue.d.tsshims/vue/runtime/primitives/use-focus-trap.d.tsshims/vue/runtime/primitives/use-focus-trap.jsshims/vue/runtime/root-overrides.d.tsshims/vue/runtime/root-overrides.jsshims/vue/runtime/server-consent.d.tsshims/vue/runtime/server-consent.jsshims/vue/runtime/server/build-options.d.tsshims/vue/runtime/server/build-options.jsshims/vue/runtime/server/build-options.nuxt.d.tsshims/vue/runtime/server/build-options.nuxt.jsshims/vue/runtime/server/consent-route.d.tsshims/vue/runtime/server/consent-route.jsshims/vue/runtime/server/devtools.get.d.tsshims/vue/runtime/server/devtools.get.jsshims/vue/runtime/server/init-prefetch.d.tsshims/vue/runtime/server/init-prefetch.jsshims/vue/runtime/server/init-prefetch.nuxt.d.tsshims/vue/runtime/server/init-prefetch.nuxt.jsshims/vue/runtime/server/inth-project-url.d.tsshims/vue/runtime/server/inth-project-url.jsshims/vue/runtime/server/inth-project-url.nuxt.d.tsshims/vue/runtime/server/inth-project-url.nuxt.jsshims/vue/runtime/server/local-fetch.d.tsshims/vue/runtime/server/local-fetch.jsshims/vue/runtime/server/route-factories.d.tsshims/vue/runtime/server/route-factories.jsshims/vue/runtime/server/server-fetch.d.tsshims/vue/runtime/server/server-fetch.jsshims/vue/runtime/shared-render.d.tsshims/vue/runtime/shared-render.jsshims/vue/runtime/theme-tokens.d.tsshims/vue/runtime/theme-tokens.jsshims/vue/runtime/utils/slot-attrs.d.tsshims/vue/runtime/utils/slot-attrs.jsshims/vue/runtime/utils/symbols.d.tsshims/vue/runtime/utils/symbols.jsshims/vue/runtime/vue/stubs.d.tsshims/vue/runtime/vue/stubs.jsshims/vue/vite.d.tsshims/vue/vite.jsshims/vue/vue-plugin.d.tsshims/vue/vue-plugin.jsvitest.config.ts
Files
AGENTS.mddoc84,844 bytesCHANGELOG.mddoc187,165 bytesREADME.mddoc12,148 bytesSKILL.mdcore3,138 bytes__tests__/facade-parity.test.tsruns12,234 bytes__tests__/parity-runner.mjsruns3,991 bytesdocs/integrations/cloudflare-zaraz.mddoc14,872 bytesknip.jsonasset483 bytespackage.jsonruns27,243 bytesreadme.jsonasset5,949 bytesscripts/copy-distribution-css.tsruns2,099 bytesshims/astro.d.tsruns138 bytesshims/astro.jsruns138 bytesshims/astro/api.d.tsruns103 bytesshims/astro/api.jsruns103 bytesshims/astro/client.d.tsruns106 bytesshims/astro/client.jsruns106 bytesshims/astro/components.d.tsruns110 bytesshims/astro/components.jsruns110 bytesshims/astro/components/consent-script.astro.d.tsruns141 bytesshims/astro/components/consent-script.astro.jsruns141 bytesshims/astro/components/iab-panel.astro.d.tsruns145 bytesshims/astro/components/iab-panel.astro.jsruns145 bytesshims/astro/components/iab-prompt.astro.d.tsruns145 bytesshims/astro/components/iab-prompt.astro.jsruns145 bytesshims/astro/components/panel-link.astro.d.tsruns146 bytesshims/astro/components/panel-link.astro.jsruns146 bytesshims/astro/components/panel.astro.d.tsruns141 bytesshims/astro/components/panel.astro.jsruns141 bytesshims/astro/components/prompt-deferred.astro.d.tsruns150 bytesshims/astro/components/prompt-deferred.astro.jsruns150 bytesshims/astro/components/prompt.astro.d.tsruns141 bytesshims/astro/components/prompt.astro.jsruns141 bytesshims/astro/middleware.d.tsruns160 bytesshims/astro/middleware.jsruns160 bytesshims/astro/server.d.tsruns106 bytesshims/astro/server.jsruns106 bytesshims/astro/ui/react.d.tsruns108 bytesshims/astro/ui/react.jsruns108 bytesshims/astro/ui/svelte.d.tsruns109 bytesshims/astro/ui/svelte.jsruns109 bytesshims/astro/ui/vue.d.tsruns106 bytesshims/astro/ui/vue.jsruns106 bytesshims/build.d.tsruns104 bytesshims/build.jsruns104 bytesshims/consent-categories.d.tsruns117 bytesshims/consent-categories.jsruns117 bytesshims/consent-record.d.tsruns113 bytesshims/consent-record.jsruns113 bytesshims/events.d.tsruns105 bytesshims/events.jsruns105 bytesshims/experiment.d.tsruns109 bytesshims/experiment.jsruns109 bytesshims/generated.d.tsruns108 bytesshims/generated.jsruns108 bytesshims/index.d.tsruns98 bytesshims/index.jsruns98 bytesshims/libs/generate-subject-id.d.tsruns123 bytesshims/libs/generate-subject-id.jsruns123 bytesshims/modes.d.tsruns104 bytesshims/modes.jsruns104 bytesshims/modules/clear-on-revocation.d.tsruns126 bytesshims/modules/clear-on-revocation.jsruns126 bytesshims/modules/iframe-blocker.d.tsruns121 bytesshims/modules/iframe-blocker.jsruns121 bytesshims/modules/network-blocker.d.tsruns122 bytesshims/modules/network-blocker.jsruns122 bytesshims/modules/network-hold.d.tsruns119 bytesshims/modules/network-hold.jsruns119 bytesshims/modules/persistence.d.tsruns118 bytesshims/modules/persistence.jsruns118 bytesshims/modules/script-loader.d.tsruns120 bytesshims/modules/script-loader.jsruns120 bytesshims/modules/window-debug.d.tsruns119 bytesshims/modules/window-debug.jsruns119 bytesshims/next.d.tsruns100 bytesshims/next.jsruns100 bytesshims/next/api.d.tsruns104 bytesshims/next/api.jsruns104 bytesshims/next/build.d.tsruns106 bytesshims/next/build.jsruns106 bytesshims/next/components/panel-link.d.tsruns131 bytesshims/next/components/panel-link.jsruns146 bytesshims/next/devtools.d.tsruns109 bytesshims/next/devtools.jsruns124 bytesshims/next/headless.d.tsruns109 bytesshims/next/headless.jsruns109 bytesshims/next/middleware.d.tsruns111 bytesshims/next/middleware.jsruns111 bytesshims/next/pages.d.tsruns106 bytesshims/next/pages.jsruns106 bytesshims/next/proxy.d.tsruns106 bytesshims/next/proxy.jsruns106 bytesshims/next/server.d.tsruns107 bytesshims/next/server.jsruns107 bytesshims/next/static.d.tsruns107 bytesshims/next/static.jsruns107 bytesshims/postcss-tailwind3.d.tsruns168 bytesshims/postcss-tailwind3.jsruns168 bytesshims/preference-draft.d.tsruns115 bytesshims/preference-draft.jsruns115 bytesshims/react.d.tsruns274 bytesshims/react.jsruns169 bytesshims/react/components/consent-gate.d.tsruns123 bytesshims/react/components/consent-gate.jsruns138 bytesshims/react/components/frame.d.tsruns116 bytesshims/react/components/frame.jsruns131 bytesshims/react/components/panel-link.d.tsruns130 bytesshims/react/components/panel-link.jsruns145 bytesshims/react/components/panel-trigger.d.tsruns133 bytesshims/react/components/panel-trigger.jsruns148 bytesshims/react/components/panel.d.tsruns190 bytesshims/react/components/panel.jsruns205 bytesshims/react/components/preferences.d.tsruns190 bytesshims/react/components/preferences.jsruns205 bytesshims/react/components/prompt.d.tsruns190 bytesshims/react/components/prompt.jsruns205 bytesshims/react/consent-gate.d.tsruns112 bytesshims/react/consent-gate.jsruns127 bytesshims/react/context.d.tsruns107 bytesshims/react/context.jsruns107 bytesshims/react/devtools.d.tsruns108 bytesshims/react/devtools.jsruns123 bytesshims/react/draft.d.tsruns105 bytesshims/react/draft.jsruns120 bytesshims/react/frame.d.tsruns105 bytesshims/react/frame.jsruns120 bytesshims/react/gpp.d.tsruns103 bytesshims/react/gpp.jsruns118 bytesshims/react/headless.d.tsruns108 bytesshims/react/headless.jsruns108 bytesshims/react/hooks.d.tsruns105 bytesshims/react/hooks.jsruns105 bytesshims/react/iab.d.tsruns103 bytesshims/react/iab.jsruns103 bytesshims/react/modes.d.tsruns105 bytesshims/react/modes.jsruns105 bytesshims/react/module-hooks.d.tsruns112 bytesshims/react/module-hooks.jsruns127 bytesshims/react/module-hooks/iframe-blocker.d.tsruns127 bytesshims/react/module-hooks/iframe-blocker.jsruns142 bytesshims/react/module-hooks/network-blocker.d.tsruns128 bytesshims/react/module-hooks/network-blocker.jsruns143 bytesshims/react/module-hooks/persistence.d.tsruns124 bytesshims/react/module-hooks/persistence.jsruns139 bytesshims/react/module-hooks/script-loader.d.tsruns126 bytesshims/react/module-hooks/script-loader.jsruns141 bytesshims/react/panel-link.d.tsruns119 bytesshims/react/panel-link.jsruns134 bytesshims/react/panel-trigger.d.tsruns122 bytesshims/react/panel-trigger.jsruns137 bytesshims/react/panel.d.tsruns114 bytesshims/react/panel.jsruns129 bytesshims/react/preferences.d.tsruns114 bytesshims/react/preferences.jsruns129 bytesshims/react/primitives.d.tsruns110 bytesshims/react/primitives.jsruns110 bytesshims/react/primitives/accordion.d.tsruns120 bytesshims/react/primitives/accordion.jsruns120 bytesshims/react/primitives/button.d.tsruns117 bytesshims/react/primitives/button.jsruns117 bytesshims/react/primitives/collapsible.d.tsruns122 bytesshims/react/primitives/collapsible.jsruns122 bytesshims/react/primitives/dialog.d.tsruns117 bytesshims/react/primitives/dialog.jsruns117 bytesshims/react/primitives/preference-item.d.tsruns126 bytesshims/react/primitives/preference-item.jsruns126 bytesshims/react/primitives/switch.d.tsruns117 bytesshims/react/primitives/switch.jsruns117 bytesshims/react/primitives/tabs.d.tsruns115 bytesshims/react/primitives/tabs.jsruns115 bytesshims/react/prompt.d.tsruns114 bytesshims/react/prompt.jsruns129 bytesshims/react/provider.d.tsruns108 bytesshims/react/provider.jsruns123 bytesshims/react/server.d.tsruns106 bytesshims/react/server.jsruns106 bytesshims/react/theme.d.tsruns105 bytesshims/react/theme.jsruns105 bytesshims/react/types.d.tsruns105 bytesshims/react/types.jsruns105 bytesshims/react/utils.d.tsruns105 bytesshims/react/utils.jsruns105 bytesshims/runtime.d.tsruns106 bytesshims/runtime.jsruns106 bytesshims/runtime/client-mode.d.tsruns118 bytesshims/runtime/client-mode.jsruns118 bytesshims/runtime/controls.d.tsruns115 bytesshims/runtime/controls.jsruns115 bytesshims/runtime/on-demand-factories.d.tsruns126 bytesshims/runtime/on-demand-factories.jsruns126 bytesshims/runtime/on-demand.d.tsruns116 bytesshims/runtime/on-demand.jsruns116 bytesshims/runtime/provider.d.tsruns115 bytesshims/runtime/provider.jsruns115 bytesshims/runtime/script-server-start.d.tsruns126 bytesshims/runtime/script-server-start.jsruns126 bytesshims/server.d.tsruns105 bytesshims/server.jsruns105 bytesshims/static.d.tsruns105 bytesshims/static.jsruns105 bytesshims/surface-actions.d.tsruns114 bytesshims/surface-actions.jsruns114 bytesshims/svelte.d.tsruns100 bytesshims/svelte.jsruns100 bytesshims/svelte/devtools.d.tsruns158 bytesshims/svelte/devtools.jsruns158 bytesshims/svelte/headless.d.tsruns109 bytesshims/svelte/headless.jsruns109 bytesshims/svelte/kit.d.tsruns104 bytesshims/svelte/kit.jsruns104 bytesshims/svelte/kit/locals.d.tsruns111 bytesshims/svelte/server.d.tsruns107 bytesshims/svelte/server.jsruns107 bytesshims/svelte/vite.d.tsruns105 bytesshims/svelte/vite.jsruns105 bytesshims/tanstack-start.d.tsruns108 bytesshims/tanstack-start.jsruns108 bytesshims/tanstack-start/api.d.tsruns112 bytesshims/tanstack-start/api.jsruns112 bytesshims/tanstack-start/build.d.tsruns114 bytesshims/tanstack-start/build.jsruns114 bytesshims/tanstack-start/components/panel-link.d.tsruns139 bytesshims/tanstack-start/components/panel-link.jsruns154 bytesshims/tanstack-start/headless.d.tsruns117 bytesshims/tanstack-start/headless.jsruns117 bytesshims/tanstack-start/middleware.d.tsruns119 bytesshims/tanstack-start/middleware.jsruns119 bytesshims/tanstack-start/server.d.tsruns115 bytesshims/tanstack-start/server.jsruns115 bytesshims/tanstack-start/static.d.tsruns115 bytesshims/tanstack-start/static.jsruns115 bytesshims/transports.d.tsruns109 bytesshims/transports.jsruns109 bytesshims/transports/manifest-browser.d.tsruns126 bytesshims/transports/manifest-browser.jsruns126 bytesshims/transports/manifest-cache.d.tsruns124 bytesshims/transports/manifest-cache.jsruns124 bytesshims/transports/manifest-location.d.tsruns127 bytesshims/transports/manifest-location.jsruns127 bytesshims/transports/manifest.d.tsruns118 bytesshims/transports/manifest.jsruns118 bytesshims/vue.d.tsruns134 bytesshims/vue.jsruns134 bytesshims/vue/composables/activeUI.d.tsruns121 bytesshims/vue/composables/activeUI.jsruns121 bytesshims/vue/composables/component.d.tsruns122 bytesshims/vue/composables/component.jsruns122 bytesshims/vue/composables/config.d.tsruns119 bytesshims/vue/composables/config.jsruns119 bytesshims/vue/composables/consent.d.tsruns120 bytesshims/vue/composables/consent.jsruns120 bytesshims/vue/composables/draft.d.tsruns118 bytesshims/vue/composables/draft.jsruns118 bytesshims/vue/composables/event-dispatcher.d.tsruns129 bytesshims/vue/composables/event-dispatcher.jsruns129 bytesshims/vue/composables/experiment.d.tsruns123 bytesshims/vue/composables/experiment.jsruns123 bytesshims/vue/composables/iab-translations.d.tsruns129 bytesshims/vue/composables/iab-translations.jsruns129 bytesshims/vue/composables/iabSelection.d.tsruns125 bytesshims/vue/composables/iabSelection.jsruns125 bytesshims/vue/composables/index.d.tsruns118 bytesshims/vue/composables/index.jsruns118 bytesshims/vue/composables/init.d.tsruns117 bytesshims/vue/composables/init.jsruns117 bytesshims/vue/composables/kernel.d.tsruns119 bytesshims/vue/composables/kernel.jsruns119 bytesshims/vue/composables/language.d.tsruns121 bytesshims/vue/composables/language.jsruns121 bytesshims/vue/composables/region.d.tsruns119 bytesshims/vue/composables/region.jsruns119 bytesshims/vue/composables/stubs/cookie.d.tsruns125 bytesshims/vue/composables/stubs/cookie.jsruns125 bytesshims/vue/composables/stubs/fetch.d.tsruns124 bytesshims/vue/composables/stubs/fetch.jsruns124 bytesshims/vue/composables/stubs/requestHeaders.d.tsruns133 bytesshims/vue/composables/stubs/requestHeaders.jsruns133 bytesshims/vue/composables/stubs/state.d.tsruns124 bytesshims/vue/composables/stubs/state.jsruns124 bytesshims/vue/composables/use-consent-policy-actions.d.tsruns139 bytesshims/vue/composables/use-consent-policy-actions.jsruns139 bytesshims/vue/composables/use-consent-scroll-lock.d.tsruns136 bytesshims/vue/composables/use-consent-scroll-lock.jsruns136 bytesshims/vue/composables/use-devtools-launcher.d.tsruns134 bytesshims/vue/composables/use-devtools-launcher.jsruns134 bytesshims/vue/composables/use-draggable.d.tsruns126 bytesshims/vue/composables/use-draggable.jsruns126 bytesshims/vue/composables/use-late-entry.d.tsruns127 bytesshims/vue/composables/use-late-entry.jsruns127 bytesshims/vue/composables/use-local-storage-ref.d.tsruns134 bytesshims/vue/composables/use-local-storage-ref.jsruns134 bytesshims/vue/composables/use-mounted.d.tsruns124 bytesshims/vue/composables/use-mounted.jsruns124 bytesshims/vue/composables/use-surface-translations.d.tsruns137 bytesshims/vue/composables/use-surface-translations.jsruns137 bytesshims/vue/composables/use-window-size.d.tsruns128 bytesshims/vue/composables/use-window-size.jsruns128 bytesshims/vue/devtools.d.tsruns152 bytesshims/vue/devtools.jsruns152 bytesshims/vue/runtime/color-scheme.d.tsruns121 bytesshims/vue/runtime/color-scheme.jsruns121 bytesshims/vue/runtime/components/actions.d.vue.tsruns196 bytesshims/vue/runtime/components/actions.vueasset181 bytesshims/vue/runtime/components/actions.vue.d.tsruns196 bytesshims/vue/runtime/components/branding-icon.d.vue.tsruns208 bytesshims/vue/runtime/components/branding-icon.vueasset187 bytesshims/vue/runtime/components/branding-icon.vue.d.tsruns208 bytesshims/vue/runtime/components/button.d.vue.tsruns194 bytesshims/vue/runtime/components/button.vueasset180 bytesshims/vue/runtime/components/button.vue.d.tsruns194 bytesshims/vue/runtime/components/consent-actions.vue.d.tsruns212 bytesshims/vue/runtime/components/consent-actions.vue.jsruns212 bytesshims/vue/runtime/components/consent-branding-icon.vue.d.tsruns224 bytesshims/vue/runtime/components/consent-branding-icon.vue.jsruns224 bytesshims/vue/runtime/components/consent-button.vue.d.tsruns210 bytesshims/vue/runtime/components/consent-button.vue.jsruns210 bytesshims/vue/runtime/components/consent-description.vue.d.tsruns220 bytesshims/vue/runtime/components/consent-description.vue.jsruns220 bytesshims/vue/runtime/components/consent-dialog-link.d.vue.tsruns220 bytesshims/vue/runtime/components/consent-dialog-link.vueasset193 bytesshims/vue/runtime/components/consent-dialog-link.vue.d.tsruns220 bytesshims/vue/runtime/components/consent-gate.d.vue.tsruns206 bytesshims/vue/runtime/components/consent-gate.vueasset186 bytesshims/vue/runtime/components/consent-gate.vue.d.tsruns206 bytesshims/vue/runtime/components/consent-gate.vue.jsruns206 bytesshims/vue/runtime/components/consent-legal-links.vue.d.tsruns220 bytesshims/vue/runtime/components/consent-legal-links.vue.jsruns220 bytesshims/vue/runtime/components/consent-link.vue.d.tsruns206 bytesshims/vue/runtime/components/consent-link.vue.jsruns206 bytesshims/vue/runtime/components/consent-root.vue.d.tsruns206 bytesshims/vue/runtime/components/consent-root.vue.jsruns206 bytesshims/vue/runtime/components/consent-switch.vue.d.tsruns210 bytesshims/vue/runtime/components/consent-switch.vue.jsruns210 bytesshims/vue/runtime/components/consent-tag.vue.d.tsruns204 bytesshims/vue/runtime/components/consent-tag.vue.jsruns204 bytesshims/vue/runtime/components/description-content.d.vue.tsruns220 bytesshims/vue/runtime/components/description-content.vueasset193 bytesshims/vue/runtime/components/description-content.vue.d.tsruns220 bytesshims/vue/runtime/components/description.d.vue.tsruns204 bytesshims/vue/runtime/components/description.vueasset185 bytesshims/vue/runtime/components/description.vue.d.tsruns204 bytesshims/vue/runtime/components/early-tap-script.d.tsruns212 bytesshims/vue/runtime/components/early-tap-script.jsruns212 bytesshims/vue/runtime/components/iab-feature-item.d.vue.tsruns214 bytesshims/vue/runtime/components/iab-feature-item.vueasset190 bytesshims/vue/runtime/components/iab-feature-item.vue.d.tsruns214 bytesshims/vue/runtime/components/iab-panel.d.vue.tsruns200 bytesshims/vue/runtime/components/iab-panel.vueasset183 bytesshims/vue/runtime/components/iab-panel.vue.d.tsruns218 bytesshims/vue/runtime/components/iab-panel.vue.jsruns218 bytesshims/vue/runtime/components/iab-prompt.d.vue.tsruns202 bytesshims/vue/runtime/components/iab-prompt.vueasset184 bytesshims/vue/runtime/components/iab-prompt.vue.d.tsruns218 bytesshims/vue/runtime/components/iab-prompt.vue.jsruns218 bytesshims/vue/runtime/components/iab-purpose-item.d.vue.tsruns214 bytesshims/vue/runtime/components/iab-purpose-item.vueasset190 bytesshims/vue/runtime/components/iab-purpose-item.vue.d.tsruns214 bytesshims/vue/runtime/components/iab-stack-item.d.vue.tsruns210 bytesshims/vue/runtime/components/iab-stack-item.vueasset188 bytesshims/vue/runtime/components/iab-stack-item.vue.d.tsruns210 bytesshims/vue/runtime/components/iab-vendor-list.d.vue.tsruns212 bytesshims/vue/runtime/components/iab-vendor-list.vueasset189 bytesshims/vue/runtime/components/iab-vendor-list.vue.d.tsruns212 bytesshims/vue/runtime/components/icons/chevron-right-icon.d.vue.tsruns230 bytesshims/vue/runtime/components/icons/chevron-right-icon.vueasset198 bytesshims/vue/runtime/components/icons/chevron-right-icon.vue.d.tsruns230 bytesshims/vue/runtime/components/icons/globe-icon.d.vue.tsruns214 bytesshims/vue/runtime/components/icons/globe-icon.vueasset190 bytesshims/vue/runtime/components/icons/globe-icon.vue.d.tsruns214 bytesshims/vue/runtime/components/icons/legitimate-interest-icon.d.vue.tsruns242 bytesshims/vue/runtime/components/icons/legitimate-interest-icon.vueasset204 bytesshims/vue/runtime/components/icons/legitimate-interest-icon.vue.d.tsruns242 bytesshims/vue/runtime/components/icons/lock-icon.d.vue.tsruns212 bytesshims/vue/runtime/components/icons/lock-icon.vueasset189 bytesshims/vue/runtime/components/icons/lock-icon.vue.d.tsruns212 bytesshims/vue/runtime/components/index.d.tsruns125 bytesshims/vue/runtime/components/index.jsruns125 bytesshims/vue/runtime/components/lazy-surfaces.d.tsruns133 bytesshims/vue/runtime/components/lazy-surfaces.jsruns133 bytesshims/vue/runtime/components/legal-links.d.vue.tsruns204 bytesshims/vue/runtime/components/legal-links.vueasset185 bytesshims/vue/runtime/components/legal-links.vue.d.tsruns204 bytesshims/vue/runtime/components/link.d.vue.tsruns190 bytesshims/vue/runtime/components/link.vueasset178 bytesshims/vue/runtime/components/link.vue.d.tsruns190 bytesshims/vue/runtime/components/manager.d.vue.tsruns196 bytesshims/vue/runtime/components/manager.vueasset181 bytesshims/vue/runtime/components/manager.vue.d.tsruns212 bytesshims/vue/runtime/components/manager.vue.jsruns212 bytesshims/vue/runtime/components/nuxt-consent-root.vue.d.tsruns216 bytesshims/vue/runtime/components/nuxt-consent-root.vue.jsruns216 bytesshims/vue/runtime/components/nuxt-root.d.vue.tsruns200 bytesshims/vue/runtime/components/nuxt-root.vueasset183 bytesshims/vue/runtime/components/nuxt-root.vue.d.tsruns200 bytesshims/vue/runtime/components/panel-link.vue.d.tsruns220 bytesshims/vue/runtime/components/panel-link.vue.jsruns220 bytesshims/vue/runtime/components/panel-trigger.d.vue.tsruns208 bytesshims/vue/runtime/components/panel-trigger.vueasset187 bytesshims/vue/runtime/components/panel-trigger.vue.d.tsruns226 bytesshims/vue/runtime/components/panel-trigger.vue.jsruns226 bytesshims/vue/runtime/components/preferences-manager-context.d.tsruns147 bytesshims/vue/runtime/components/preferences-manager-context.jsruns147 bytesshims/vue/runtime/components/preferences-manager-context.js.d.tsruns150 bytesshims/vue/runtime/components/preferences-manager-context.js.jsruns150 bytesshims/vue/runtime/components/preferences.d.vue.tsruns204 bytesshims/vue/runtime/components/preferences.vueasset185 bytesshims/vue/runtime/components/preferences.vue.d.tsruns210 bytesshims/vue/runtime/components/preferences.vue.jsruns210 bytesshims/vue/runtime/components/prompt.d.vue.tsruns194 bytesshims/vue/runtime/components/prompt.vueasset180 bytesshims/vue/runtime/components/prompt.vue.d.tsruns210 bytesshims/vue/runtime/components/prompt.vue.jsruns210 bytesshims/vue/runtime/components/root.d.vue.tsruns190 bytesshims/vue/runtime/components/root.vueasset178 bytesshims/vue/runtime/components/root.vue.d.tsruns190 bytesshims/vue/runtime/components/switch.d.vue.tsruns194 bytesshims/vue/runtime/components/switch.vueasset180 bytesshims/vue/runtime/components/switch.vue.d.tsruns194 bytesshims/vue/runtime/components/tag.d.vue.tsruns188 bytesshims/vue/runtime/components/tag.vueasset177 bytesshims/vue/runtime/components/tag.vue.d.tsruns188 bytesshims/vue/runtime/components/trigger-icon.d.vue.tsruns206 bytesshims/vue/runtime/components/trigger-icon.vueasset186 bytesshims/vue/runtime/components/trigger-icon.vue.d.tsruns206 bytesshims/vue/runtime/components/vendor-list.d.vue.tsruns204 bytesshims/vue/runtime/components/vendor-list.vueasset185 bytesshims/vue/runtime/components/vendor-list.vue.d.tsruns204 bytesshims/vue/runtime/composables/activeUI.d.tsruns129 bytesshims/vue/runtime/composables/activeUI.jsruns129 bytesshims/vue/runtime/composables/component.d.tsruns130 bytesshims/vue/runtime/composables/component.jsruns130 bytesshims/vue/runtime/composables/config.d.tsruns127 bytesshims/vue/runtime/composables/config.jsruns127 bytesshims/vue/runtime/composables/consent.d.tsruns128 bytesshims/vue/runtime/composables/consent.jsruns128 bytesshims/vue/runtime/composables/draft.d.tsruns126 bytesshims/vue/runtime/composables/draft.jsruns126 bytesshims/vue/runtime/composables/event-dispatcher.d.tsruns137 bytesshims/vue/runtime/composables/event-dispatcher.jsruns137 bytesshims/vue/runtime/composables/experiment.d.tsruns131 bytesshims/vue/runtime/composables/experiment.jsruns131 bytesshims/vue/runtime/composables/iab-translations.d.tsruns137 bytesshims/vue/runtime/composables/iab-translations.jsruns137 bytesshims/vue/runtime/composables/iabSelection.d.tsruns133 bytesshims/vue/runtime/composables/iabSelection.jsruns133 bytesshims/vue/runtime/composables/index.d.tsruns126 bytesshims/vue/runtime/composables/index.jsruns126 bytesshims/vue/runtime/composables/init.d.tsruns125 bytesshims/vue/runtime/composables/init.jsruns125 bytesshims/vue/runtime/composables/kernel.d.tsruns127 bytesshims/vue/runtime/composables/kernel.jsruns127 bytesshims/vue/runtime/composables/language.d.tsruns129 bytesshims/vue/runtime/composables/language.jsruns129 bytesshims/vue/runtime/composables/region.d.tsruns127 bytesshims/vue/runtime/composables/region.jsruns127 bytesshims/vue/runtime/composables/stubs/cookie.d.tsruns133 bytesshims/vue/runtime/composables/stubs/cookie.jsruns133 bytesshims/vue/runtime/composables/stubs/fetch.d.tsruns132 bytesshims/vue/runtime/composables/stubs/fetch.jsruns132 bytesshims/vue/runtime/composables/stubs/requestHeaders.d.tsruns141 bytesshims/vue/runtime/composables/stubs/requestHeaders.jsruns141 bytesshims/vue/runtime/composables/stubs/state.d.tsruns132 bytesshims/vue/runtime/composables/stubs/state.jsruns132 bytesshims/vue/runtime/composables/use-consent-policy-actions.d.tsruns147 bytesshims/vue/runtime/composables/use-consent-policy-actions.jsruns147 bytesshims/vue/runtime/composables/use-consent-scroll-lock.d.tsruns144 bytesshims/vue/runtime/composables/use-consent-scroll-lock.jsruns144 bytesshims/vue/runtime/composables/use-devtools-launcher.d.tsruns142 bytesshims/vue/runtime/composables/use-devtools-launcher.jsruns142 bytesshims/vue/runtime/composables/use-draggable.d.tsruns134 bytesshims/vue/runtime/composables/use-draggable.jsruns134 bytesshims/vue/runtime/composables/use-late-entry.d.tsruns135 bytesshims/vue/runtime/composables/use-late-entry.jsruns135 bytesshims/vue/runtime/composables/use-local-storage-ref.d.tsruns142 bytesshims/vue/runtime/composables/use-local-storage-ref.jsruns142 bytesshims/vue/runtime/composables/use-mounted.d.tsruns132 bytesshims/vue/runtime/composables/use-mounted.jsruns132 bytesshims/vue/runtime/composables/use-surface-translations.d.tsruns145 bytesshims/vue/runtime/composables/use-surface-translations.jsruns145 bytesshims/vue/runtime/composables/use-window-size.d.tsruns136 bytesshims/vue/runtime/composables/use-window-size.jsruns136 bytesshims/vue/runtime/config.d.tsruns115 bytesshims/vue/runtime/config.jsruns115 bytesshims/vue/runtime/devtools/bridge.d.tsruns124 bytesshims/vue/runtime/devtools/bridge.jsruns124 bytesshims/vue/runtime/devtools/constants.d.tsruns127 bytesshims/vue/runtime/devtools/constants.jsruns127 bytesshims/vue/runtime/devtools/page.d.tsruns122 bytesshims/vue/runtime/devtools/page.jsruns122 bytesshims/vue/runtime/devtools/plugin.nuxt.d.tsruns198 bytesshims/vue/runtime/devtools/plugin.nuxt.jsruns198 bytesshims/vue/runtime/devtools/services.d.tsruns126 bytesshims/vue/runtime/devtools/services.jsruns126 bytesshims/vue/runtime/kernel.d.tsruns115 bytesshims/vue/runtime/kernel.jsruns115 bytesshims/vue/runtime/modes.d.tsruns114 bytesshims/vue/runtime/modes.jsruns114 bytesshims/vue/runtime/nuxt-mode.d.tsruns118 bytesshims/vue/runtime/nuxt-mode.jsruns118 bytesshims/vue/runtime/plugin.nuxt.d.tsruns180 bytesshims/vue/runtime/plugin.nuxt.jsruns180 bytesshims/vue/runtime/primitives/accordion-content.d.vue.tsruns216 bytesshims/vue/runtime/primitives/accordion-content.vueasset191 bytesshims/vue/runtime/primitives/accordion-content.vue.d.tsruns216 bytesshims/vue/runtime/primitives/accordion-item.d.vue.tsruns210 bytesshims/vue/runtime/primitives/accordion-item.vueasset188 bytesshims/vue/runtime/primitives/accordion-item.vue.d.tsruns210 bytesshims/vue/runtime/primitives/accordion-root.d.vue.tsruns210 bytesshims/vue/runtime/primitives/accordion-root.vueasset188 bytesshims/vue/runtime/primitives/accordion-root.vue.d.tsruns210 bytesshims/vue/runtime/primitives/accordion-trigger.d.tsruns137 bytesshims/vue/runtime/primitives/accordion-trigger.jsruns137 bytesshims/vue/runtime/primitives/dialog-content.d.vue.tsruns210 bytesshims/vue/runtime/primitives/dialog-content.vueasset188 bytesshims/vue/runtime/primitives/dialog-content.vue.d.tsruns210 bytesshims/vue/runtime/primitives/dialog-overlay.d.vue.tsruns210 bytesshims/vue/runtime/primitives/dialog-overlay.vueasset188 bytesshims/vue/runtime/primitives/dialog-overlay.vue.d.tsruns210 bytesshims/vue/runtime/primitives/dialog-portal.d.vue.tsruns208 bytesshims/vue/runtime/primitives/dialog-portal.vueasset187 bytesshims/vue/runtime/primitives/dialog-portal.vue.d.tsruns208 bytesshims/vue/runtime/primitives/dialog-root.d.vue.tsruns204 bytesshims/vue/runtime/primitives/dialog-root.vueasset185 bytesshims/vue/runtime/primitives/dialog-root.vue.d.tsruns204 bytesshims/vue/runtime/primitives/focus-scope.d.vue.tsruns204 bytesshims/vue/runtime/primitives/focus-scope.vueasset185 bytesshims/vue/runtime/primitives/focus-scope.vue.d.tsruns204 bytesshims/vue/runtime/primitives/index.d.tsruns125 bytesshims/vue/runtime/primitives/index.jsruns125 bytesshims/vue/runtime/primitives/keys.d.tsruns124 bytesshims/vue/runtime/primitives/keys.jsruns124 bytesshims/vue/runtime/primitives/preference-item/context.d.tsruns143 bytesshims/vue/runtime/primitives/preference-item/context.jsruns143 bytesshims/vue/runtime/primitives/preference-item/preference-item-auxiliary.d.vue.tsruns264 bytesshims/vue/runtime/primitives/preference-item/preference-item-auxiliary.vueasset215 bytesshims/vue/runtime/primitives/preference-item/preference-item-auxiliary.vue.d.tsruns264 bytesshims/vue/runtime/primitives/preference-item/preference-item-content.d.vue.tsruns260 bytesshims/vue/runtime/primitives/preference-item/preference-item-content.vueasset213 bytesshims/vue/runtime/primitives/preference-item/preference-item-content.vue.d.tsruns260 bytesshims/vue/runtime/primitives/preference-item/preference-item-control.d.vue.tsruns260 bytesshims/vue/runtime/primitives/preference-item/preference-item-control.vueasset213 bytesshims/vue/runtime/primitives/preference-item/preference-item-control.vue.d.tsruns260 bytesshims/vue/runtime/primitives/preference-item/preference-item-header.d.vue.tsruns258 bytesshims/vue/runtime/primitives/preference-item/preference-item-header.vueasset212 bytesshims/vue/runtime/primitives/preference-item/preference-item-header.vue.d.tsruns258 bytesshims/vue/runtime/primitives/preference-item/preference-item-leading.d.vue.tsruns260 bytesshims/vue/runtime/primitives/preference-item/preference-item-leading.vueasset213 bytesshims/vue/runtime/primitives/preference-item/preference-item-leading.vue.d.tsruns260 bytesshims/vue/runtime/primitives/preference-item/preference-item-meta.d.vue.tsruns254 bytesshims/vue/runtime/primitives/preference-item/preference-item-meta.vueasset210 bytesshims/vue/runtime/primitives/preference-item/preference-item-meta.vue.d.tsruns254 bytesshims/vue/runtime/primitives/preference-item/preference-item-root.d.vue.tsruns254 bytesshims/vue/runtime/primitives/preference-item/preference-item-root.vueasset210 bytesshims/vue/runtime/primitives/preference-item/preference-item-root.vue.d.tsruns254 bytesshims/vue/runtime/primitives/preference-item/preference-item-title.d.vue.tsruns256 bytesshims/vue/runtime/primitives/preference-item/preference-item-title.vueasset211 bytesshims/vue/runtime/primitives/preference-item/preference-item-title.vue.d.tsruns256 bytesshims/vue/runtime/primitives/preference-item/preference-item-trigger.d.vue.tsruns260 bytesshims/vue/runtime/primitives/preference-item/preference-item-trigger.vueasset213 bytesshims/vue/runtime/primitives/preference-item/preference-item-trigger.vue.d.tsruns260 bytesshims/vue/runtime/primitives/preference-item/variants.d.tsruns144 bytesshims/vue/runtime/primitives/preference-item/variants.jsruns144 bytesshims/vue/runtime/primitives/switch-root.d.vue.tsruns204 bytesshims/vue/runtime/primitives/switch-root.vueasset185 bytesshims/vue/runtime/primitives/switch-root.vue.d.tsruns204 bytesshims/vue/runtime/primitives/switch-thumb.d.vue.tsruns206 bytesshims/vue/runtime/primitives/switch-thumb.vueasset186 bytesshims/vue/runtime/primitives/switch-thumb.vue.d.tsruns206 bytesshims/vue/runtime/primitives/switch-variants.d.tsruns135 bytesshims/vue/runtime/primitives/switch-variants.jsruns135 bytesshims/vue/runtime/primitives/tabs/context.d.tsruns132 bytesshims/vue/runtime/primitives/tabs/context.jsruns132 bytesshims/vue/runtime/primitives/tabs/tabs-content.d.vue.tsruns216 bytesshims/vue/runtime/primitives/tabs/tabs-content.vueasset191 bytesshims/vue/runtime/primitives/tabs/tabs-content.vue.d.tsruns216 bytesshims/vue/runtime/primitives/tabs/tabs-list.d.vue.tsruns210 bytesshims/vue/runtime/primitives/tabs/tabs-list.vueasset188 bytesshims/vue/runtime/primitives/tabs/tabs-list.vue.d.tsruns210 bytesshims/vue/runtime/primitives/tabs/tabs-root.d.vue.tsruns210 bytesshims/vue/runtime/primitives/tabs/tabs-root.vueasset188 bytesshims/vue/runtime/primitives/tabs/tabs-root.vue.d.tsruns210 bytesshims/vue/runtime/primitives/tabs/tabs-trigger.d.vue.tsruns216 bytesshims/vue/runtime/primitives/tabs/tabs-trigger.vueasset191 bytesshims/vue/runtime/primitives/tabs/tabs-trigger.vue.d.tsruns216 bytesshims/vue/runtime/primitives/use-focus-trap.d.tsruns134 bytesshims/vue/runtime/primitives/use-focus-trap.jsruns134 bytesshims/vue/runtime/root-overrides.d.tsruns123 bytesshims/vue/runtime/root-overrides.jsruns123 bytesshims/vue/runtime/server-consent.d.tsruns123 bytesshims/vue/runtime/server-consent.jsruns123 bytesshims/vue/runtime/server/build-options.d.tsruns129 bytesshims/vue/runtime/server/build-options.jsruns129 bytesshims/vue/runtime/server/build-options.nuxt.d.tsruns208 bytesshims/vue/runtime/server/build-options.nuxt.jsruns208 bytesshims/vue/runtime/server/consent-route.d.tsruns198 bytesshims/vue/runtime/server/consent-route.jsruns198 bytesshims/vue/runtime/server/devtools.get.d.tsruns196 bytesshims/vue/runtime/server/devtools.get.jsruns196 bytesshims/vue/runtime/server/init-prefetch.d.tsruns129 bytesshims/vue/runtime/server/init-prefetch.jsruns129 bytesshims/vue/runtime/server/init-prefetch.nuxt.d.tsruns208 bytesshims/vue/runtime/server/init-prefetch.nuxt.jsruns208 bytesshims/vue/runtime/server/inth-project-url.d.tsruns132 bytesshims/vue/runtime/server/inth-project-url.jsruns132 bytesshims/vue/runtime/server/inth-project-url.nuxt.d.tsruns214 bytesshims/vue/runtime/server/inth-project-url.nuxt.jsruns214 bytesshims/vue/runtime/server/local-fetch.d.tsruns127 bytesshims/vue/runtime/server/local-fetch.jsruns127 bytesshims/vue/runtime/server/route-factories.d.tsruns131 bytesshims/vue/runtime/server/route-factories.jsruns131 bytesshims/vue/runtime/server/server-fetch.d.tsruns128 bytesshims/vue/runtime/server/server-fetch.jsruns128 bytesshims/vue/runtime/shared-render.d.tsruns122 bytesshims/vue/runtime/shared-render.jsruns122 bytesshims/vue/runtime/theme-tokens.d.tsruns121 bytesshims/vue/runtime/theme-tokens.jsruns121 bytesshims/vue/runtime/utils/slot-attrs.d.tsruns125 bytesshims/vue/runtime/utils/slot-attrs.jsruns125 bytesshims/vue/runtime/utils/symbols.d.tsruns122 bytesshims/vue/runtime/utils/symbols.jsruns122 bytesshims/vue/runtime/vue/stubs.d.tsruns118 bytesshims/vue/runtime/vue/stubs.jsruns118 bytesshims/vue/vite.d.tsruns102 bytesshims/vue/vite.jsruns102 bytesshims/vue/vue-plugin.d.tsruns108 bytesshims/vue/vue-plugin.jsruns108 bytesvitest.config.tsruns423 bytes
Read SKILL.md
# c15t (umbrella package)
The Markdown under `./docs` matches the installed version. Read it before writing code: v3 renamed most v2 APIs, so remembered examples are usually wrong.
## Before writing code
1. Find the framework, router, rendering mode (server, static, cached or single-page) and host in the project. Check the framework config and route files for settings that prerender or cache pages.
2. Pick the matching row in [Choose your setup](./docs/concepts/choose-your-setup.md).
3. Follow that guide from start to finish: [Next.js](./docs/frameworks/next/quickstart.md), [TanStack Start](./docs/frameworks/tanstack-start/quickstart.md), [React](./docs/frameworks/react/quickstart.md), [Nuxt](./docs/frameworks/nuxt/quickstart.md), [Vue](./docs/frameworks/vue/quickstart.md), [Astro](./docs/frameworks/astro/quickstart.md), [Svelte](./docs/frameworks/svelte/quickstart.md), [SvelteKit](./docs/frameworks/sveltekit/quickstart.md), [HTML script tag](./docs/frameworks/html/quickstart.md), [JavaScript](./docs/frameworks/javascript/quickstart.md).
## Rules
- Install with `npm install c15t` and import the framework subpath, such as `c15t/next`. Keep every c15t package on the same release.
- The backend URL comes from the user's Inth project or self-hosted backend. It is public configuration. Never invent one; ask for it or read it from the environment.View the complete source on GitHubc15t-core
When your agent uses it
Set up, customize or debug c15t consent management with @c15t/core. Use when the project uses the headless c15t engine, `createConsentRuntime` or custom consent UI, or when a task mentions a cookie banner, consent dialog, GDPR or CCPA prompts, blocking analytics until consent, Google Consent Mode or IAB TCF.
What it loads into context
Frontmatter
82 tokensAlways available to the agent
SKILL.md
616 tokensWhen the skill is activated
Reference documents
58,950 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Before writing code
- Rules
- Customize with the smallest change
- Finish with a check
Scripts executed separately
package.jsonrslib.config.tssrc/__tests__/ad-tech-provider-cache.test.tssrc/__tests__/build.test.tssrc/__tests__/client-policy-graph.test.tssrc/__tests__/events.test.tssrc/__tests__/fixtures/cors-safelist.tssrc/__tests__/fixtures/kernel-fixtures.tssrc/__tests__/gvl-cache-entrypoints.test.tssrc/__tests__/gvl-cache.test.tssrc/__tests__/gvl-reference.test.tssrc/__tests__/hosted-record-graph.test.tssrc/__tests__/iab-unavailable.test.tssrc/__tests__/init-output-policy-proof.test.tssrc/__tests__/init-output.test.tssrc/__tests__/kernel.test.tssrc/__tests__/manifest-browser.test.tssrc/__tests__/manifest-cache.test.tssrc/__tests__/mode.test.tssrc/__tests__/offline-language-entry.test.tssrc/__tests__/offline-transport.test.tssrc/__tests__/policy-wire-transport.test.tssrc/__tests__/production-warnings.test.tssrc/__tests__/rich-init.test.tssrc/__tests__/static.test.tssrc/__tests__/surface-actions.test.tssrc/__tests__/transport.test.tssrc/build.tssrc/consent-record/__tests__/evaluate.test.tssrc/consent-record/__tests__/evaluation-policy.test.tssrc/consent-record/__tests__/fixtures.tssrc/consent-record/__tests__/normalize.test.tssrc/consent-record/__tests__/record.test.tssrc/consent-record/__tests__/validation-boundaries.test.tssrc/consent-record/evaluate.tssrc/consent-record/evaluation-policy.tssrc/consent-record/index.tssrc/consent-record/normalize.tssrc/consent-record/record.tssrc/consent-record/types.tssrc/consent-record/validation.tssrc/consent/compliance.tssrc/consent/consent-types.tssrc/derive-surface.tssrc/events.tssrc/experiment.tssrc/generated.tssrc/index.tssrc/kernel/__tests__/browser-outbox-store.test.tssrc/kernel/__tests__/commands.test.tssrc/kernel/__tests__/configured-categories.test.tssrc/kernel/__tests__/consent-model.test.tssrc/kernel/__tests__/default-isolation.test.tssrc/kernel/__tests__/events.test.tssrc/kernel/__tests__/identity-privacy-races.test.tssrc/kernel/__tests__/init-record-races.test.tssrc/kernel/__tests__/init-response.test.tssrc/kernel/__tests__/listener-isolation.test.tssrc/kernel/__tests__/none-model.test.tssrc/kernel/__tests__/patch.test.tssrc/kernel/__tests__/save-outbox-chunk.test.tssrc/kernel/__tests__/save-outbox.test.tssrc/kernel/__tests__/setters.test.tssrc/kernel/__tests__/snapshot-freezing.test.tssrc/kernel/__tests__/snapshot.test.tssrc/kernel/__tests__/supersession-additional-consent.test.tssrc/kernel/__tests__/surface-shown.test.tssrc/kernel/__tests__/unchanged-commit.test.tssrc/kernel/__tests__/vendor-choice.test.tssrc/kernel/__tests__/without-structured-clone.test.tssrc/kernel/choice.tssrc/kernel/clear-records.tssrc/kernel/dispatch.tssrc/kernel/events.tssrc/kernel/external-permissions.tssrc/kernel/index.tssrc/kernel/init-lifecycle.tssrc/kernel/internals.tssrc/kernel/patch.tssrc/kernel/record-validation.tssrc/kernel/records.tssrc/kernel/runtime.tssrc/kernel/save-outbox/index.tssrc/kernel/save-outbox/queue-tools.tssrc/kernel/save-outbox/queue.tssrc/kernel/save-outbox/store.tssrc/kernel/save-outbox/supersession.tssrc/kernel/save-outbox/warn.tssrc/kernel/setters.tssrc/kernel/snapshot.tssrc/libs/__tests__/consent-copy.test.tssrc/libs/__tests__/copy-plain-data.test.tssrc/libs/__tests__/experiment-assignment.test.tssrc/libs/__tests__/experiment.test.tssrc/libs/__tests__/failed-response.test.tssrc/libs/__tests__/generate-subject-id.test.tssrc/libs/__tests__/generate-subject-id.vectors.test.tssrc/libs/__tests__/global-privacy-control.test.tssrc/libs/__tests__/no-records-warning.test.tssrc/libs/__tests__/presentation.test.tssrc/libs/__tests__/session-report.test.tssrc/libs/__tests__/vendors.test.tssrc/libs/cache-directive.tssrc/libs/consent-copy.tssrc/libs/cookie/__tests__/cookie-storage.test.tssrc/libs/cookie/__tests__/read-stored-consent.test.tssrc/libs/cookie/domain-utils.tssrc/libs/cookie/index.tssrc/libs/cookie/key-mapping.tssrc/libs/cookie/operations.tssrc/libs/cookie/serialization.tssrc/libs/cookie/storage.tssrc/libs/cookie/types.tssrc/libs/copy-plain-data.tssrc/libs/experiment-assignment.tssrc/libs/experiment-engine.tssrc/libs/experiment-record.tssrc/libs/experiment-storage.tssrc/libs/experiment.tssrc/libs/failed-response.tssrc/libs/freeze-data.tssrc/libs/generate-subject-id.tssrc/libs/global-privacy-control.tssrc/libs/has.tssrc/libs/iab-banner-summary.tssrc/libs/iab-unavailable.tssrc/libs/is-production.tssrc/libs/journey.tssrc/libs/manifest-cache-runtime.tssrc/libs/network-blocker/types.tssrc/libs/no-records-warning.tssrc/libs/policy-actions.tssrc/libs/prefetch/__tests__/hosted-reuse.test.tssrc/libs/prefetch/__tests__/prefetch.test.tssrc/libs/prefetch/index.tssrc/libs/prefetch/prefetch.tssrc/libs/prefetch/types.tssrc/libs/prefetch/window-key.tssrc/libs/request-context-headers.tssrc/libs/request-context.tssrc/libs/script-loader/debug.tssrc/libs/script-loader/types.tssrc/libs/session-report.tssrc/libs/storage-keys.tssrc/libs/vendors.tssrc/modes.tssrc/modules/__tests__/category-discovery.test.tssrc/modules/__tests__/effective-gates.test.tssrc/modules/__tests__/has.test.tssrc/modules/__tests__/iab-controls.test.tssrc/modules/__tests__/revocation-reload.server.test.tssrc/modules/__tests__/revocation-reload.test.tssrc/modules/__tests__/vendor-allowed.test.tssrc/modules/__tests__/vendor-gate.test.tssrc/modules/clear-on-revocation/__tests__/clear-on-revocation.test.tssrc/modules/clear-on-revocation/clear.tssrc/modules/clear-on-revocation/index.tssrc/modules/clear-on-revocation/targets.tssrc/modules/clear-on-revocation/tools.tssrc/modules/clear-on-revocation/types.tssrc/modules/has.tssrc/modules/iab-controls.tssrc/modules/iframe-blocker/__tests__/body-swap.test.tssrc/modules/iframe-blocker/__tests__/iframe-blocker.test.tssrc/modules/iframe-blocker/__tests__/reconcile.test.tssrc/modules/iframe-blocker/__tests__/vendor-reconcile.test.tssrc/modules/iframe-blocker/index.tssrc/modules/iframe-blocker/reconcile.tssrc/modules/iframe-blocker/types.tssrc/modules/loader-and-blocker.tssrc/modules/network-blocker/__tests__/decide.test.tssrc/modules/network-blocker/__tests__/hold.test.tssrc/modules/network-blocker/__tests__/network-blocker.test.tssrc/modules/network-blocker/__tests__/patch-fetch.test.tssrc/modules/network-blocker/__tests__/url.test.tssrc/modules/network-blocker/__tests__/vendor-decide.test.tssrc/modules/network-blocker/blocker.tssrc/modules/network-blocker/decide.tssrc/modules/network-blocker/hold.tssrc/modules/network-blocker/index.tssrc/modules/network-blocker/patch-fetch.tssrc/modules/network-blocker/patch-xhr.tssrc/modules/network-blocker/tools.tssrc/modules/network-blocker/types.tssrc/modules/network-blocker/url.tssrc/modules/persistence/__tests__/aux-codec.test.tssrc/modules/persistence/__tests__/codec-tables.test.tssrc/modules/persistence/__tests__/combined-subject-identity.test.tssrc/modules/persistence/__tests__/hydrate.test.tssrc/modules/persistence/__tests__/hydration-read-only.test.tssrc/modules/persistence/__tests__/lazy-writer.test.tssrc/modules/persistence/__tests__/listener-failure.test.tssrc/modules/persistence/__tests__/necessary-subject.test.tssrc/modules/persistence/__tests__/persistence.test.tssrc/modules/persistence/__tests__/projection-merge.test.tssrc/modules/persistence/__tests__/public-stored-records.test.tssrc/modules/persistence/__tests__/record-codec-bytes.test.tssrc/modules/persistence/__tests__/record-codec.test.tssrc/modules/persistence/__tests__/record-storage.test.tssrc/modules/persistence/__tests__/record-writes.tssrc/modules/persistence/__tests__/schedule.test.tssrc/modules/persistence/__tests__/startup-save.test.tssrc/modules/persistence/__tests__/storage-access.test.tssrc/modules/persistence/__tests__/subject-id.test.tssrc/modules/persistence/__tests__/vendor-codec.test.tssrc/modules/persistence/__tests__/vendor-persistence.test.tssrc/modules/persistence/__tests__/write.test.tssrc/modules/persistence/clear.tssrc/modules/persistence/epoch.tssrc/modules/persistence/hydrate.tssrc/modules/persistence/index.tssrc/modules/persistence/mount.tssrc/modules/persistence/record-codec.tssrc/modules/persistence/record-storage.tssrc/modules/persistence/tools.tssrc/modules/persistence/types.tssrc/modules/persistence/writer-loader-static.tssrc/modules/persistence/writer-loader.tssrc/modules/persistence/writer/encode.tssrc/modules/persistence/writer/reconcile.tssrc/modules/persistence/writer/schedule.tssrc/modules/persistence/writer/store.tssrc/modules/persistence/writer/types.tssrc/modules/persistence/writer/write.tssrc/modules/persistence/writer/writer.tssrc/modules/revocation-reload.tssrc/modules/script-loader/__tests__/current-consent.test.tssrc/modules/script-loader/__tests__/eligibility.test.tssrc/modules/script-loader/__tests__/lifecycle-regressions.test.tssrc/modules/script-loader/__tests__/mount.test.tssrc/modules/script-loader/__tests__/normalize.test.tssrc/modules/script-loader/__tests__/replacement-completion.test.tssrc/modules/script-loader/__tests__/resource-retention.test.tssrc/modules/script-loader/__tests__/script-loader.test.tssrc/modules/script-loader/__tests__/vendor-eligibility.test.tssrc/modules/script-loader/callback-only.tssrc/modules/script-loader/callbacks.tssrc/modules/script-loader/debug.tssrc/modules/script-loader/diagnostics.tssrc/modules/script-loader/eligibility.tssrc/modules/script-loader/index.tssrc/modules/script-loader/loader.tssrc/modules/script-loader/mount.tssrc/modules/script-loader/normalize.tssrc/modules/script-loader/tools.tssrc/modules/script-loader/types.tssrc/modules/window-debug/__tests__/window-debug.test.tssrc/modules/window-debug/index.tssrc/modules/window-debug/types.tssrc/options/callbacks.tssrc/options/iab-tcf.tssrc/options/iab.tssrc/options/index.tssrc/options/legal-links.tssrc/options/overrides.tssrc/options/ssr.tssrc/options/user.tssrc/policy.tssrc/preference-draft/__tests__/preference-draft.test.tssrc/preference-draft/index.tssrc/runtime/__tests__/clear-on-revocation.test.tssrc/runtime/__tests__/client-mode-boundary.test.tssrc/runtime/__tests__/client-mode.test.tssrc/runtime/__tests__/consent-runtime.test.tssrc/runtime/__tests__/experiment.test.tssrc/runtime/__tests__/external-source.test.tssrc/runtime/__tests__/gpp.test.tssrc/runtime/__tests__/hosted-persistence.test.tssrc/runtime/__tests__/iab-mount.test.tssrc/runtime/__tests__/iab-options.test.tssrc/runtime/__tests__/journey.test.tssrc/runtime/__tests__/lazy-iab.test.tssrc/runtime/__tests__/necessary-only-scope.test.tssrc/runtime/__tests__/on-demand.test.tssrc/runtime/__tests__/provider-runtime.test.tssrc/runtime/__tests__/provider-update-chunk.test.tssrc/runtime/__tests__/runtime-callbacks.test.tssrc/runtime/__tests__/script-loader-preload-side-effects.test.tssrc/runtime/__tests__/script-loader-preload.test.tssrc/runtime/__tests__/script-server-start-parity.test.tssrc/runtime/__tests__/script-server-start.test.tssrc/runtime/__tests__/storage-reconciliation.test.tssrc/runtime/assemble.tssrc/runtime/callbacks.tssrc/runtime/client-mode.tssrc/runtime/controls.tssrc/runtime/gpp-mount.tssrc/runtime/iab-mount.tssrc/runtime/iab-options.tssrc/runtime/index.tssrc/runtime/journey.tssrc/runtime/lazy-hosted.tssrc/runtime/lazy-iab.tssrc/runtime/lazy-manifest-browser.tssrc/runtime/lazy-module.tssrc/runtime/lazy-offline.tssrc/runtime/on-demand-clear-on-revocation.tssrc/runtime/on-demand-consent-source.tssrc/runtime/on-demand-factories.tssrc/runtime/on-demand-loader-and-blocker.tssrc/runtime/on-demand-modules.tssrc/runtime/on-demand-network-blocker.tssrc/runtime/on-demand-script-loader.tssrc/runtime/on-demand.tssrc/runtime/provider-runtime.tssrc/runtime/provider-update.tssrc/runtime/provider.tssrc/runtime/runtime-kernel.tssrc/runtime/runtime-with-modules.tssrc/runtime/script-loader-preload.tssrc/runtime/script-server-start.tssrc/runtime/stream-mode.tssrc/runtime/streamed-init.tssrc/runtime/streamed-prefetch.tssrc/runtime/types.tssrc/server/__tests__/consent-proxy.test.tssrc/server/__tests__/consent-route.test.tssrc/server/__tests__/gvl-cache.test.tssrc/server/__tests__/request-consent.test.tssrc/server/__tests__/request-origin.test.tssrc/server/__tests__/request-subject.test.tssrc/server/__tests__/route-prefix.test.tssrc/server/consent-proxy.tssrc/server/consent-route.tssrc/server/gvl-cache.tssrc/server/index.tssrc/server/request-consent.tssrc/server/request-origin.tssrc/server/request-subject.tssrc/server/route-prefix.tssrc/server/static-manifest.tssrc/static.tssrc/surface-actions/__tests__/early-taps.test.tssrc/surface-actions/blanket.tssrc/surface-actions/early-tap-script.tssrc/surface-actions/early-taps.tssrc/surface-actions/iab-save.tssrc/surface-actions/index.tssrc/surface-actions/rules.tssrc/surface-actions/save.tssrc/translations/index.tssrc/transports/__tests__/subject-body.test.tssrc/transports/__tests__/vendor-transport.test.tssrc/transports/ad-tech-provider-cache.tssrc/transports/contract.tssrc/transports/custom.tssrc/transports/decision-inputs.tssrc/transports/early-init-modes.tssrc/transports/gvl-cache.tssrc/transports/gvl-reference.tssrc/transports/hosted-init-request.tssrc/transports/hosted-modes.tssrc/transports/hosted-records.tssrc/transports/hosted.tssrc/transports/index.tssrc/transports/init-output.tssrc/transports/manifest-browser-iab.tssrc/transports/manifest-browser-languages.tssrc/transports/manifest-browser-location.tssrc/transports/manifest-browser-packs.tssrc/transports/manifest-browser-remote.tssrc/transports/manifest-browser-resolve.tssrc/transports/manifest-browser.tssrc/transports/manifest-cache.tssrc/transports/manifest-request.tssrc/transports/manifest.tssrc/transports/mode.tssrc/transports/offline.tssrc/transports/save-rejection.tssrc/transports/subject-body.tssrc/transports/subject-record.tssrc/transports/version-header.tssrc/types.tsvitest.config.tsvitest.setup.ts
Files
.npmignoreasset68 bytesAGENTS.mddoc27,311 bytesCHANGELOG.mddoc189,058 bytesREADME.mddoc9,248 bytesSKILL.mdcore2,764 bytesdocs/integrations/cloudflare-zaraz.mddoc15,058 bytesknip.jsonasset1,000 bytespackage.jsonruns8,205 bytesreadme.jsonasset2,944 bytesrslib.config.tsruns4,483 bytessrc/__tests__/ad-tech-provider-cache.test.tsruns7,373 bytessrc/__tests__/build.test.tsruns45,144 bytessrc/__tests__/client-policy-graph.test.tsruns3,828 bytessrc/__tests__/events.test.tsruns5,809 bytessrc/__tests__/fixtures/cors-safelist.tsruns2,724 bytessrc/__tests__/fixtures/kernel-fixtures.tsruns4,422 bytessrc/__tests__/gvl-cache-entrypoints.test.tsruns3,773 bytessrc/__tests__/gvl-cache.test.tsruns3,230 bytessrc/__tests__/gvl-reference.test.tsruns4,335 bytessrc/__tests__/hosted-record-graph.test.tsruns6,336 bytessrc/__tests__/iab-unavailable.test.tsruns3,448 bytessrc/__tests__/init-output-policy-proof.test.tsruns2,772 bytessrc/__tests__/init-output.test.tsruns9,069 bytessrc/__tests__/kernel.test.tsruns7,474 bytessrc/__tests__/manifest-browser.test.tsruns16,715 bytessrc/__tests__/manifest-cache.test.tsruns75,977 bytessrc/__tests__/mode.test.tsruns9,151 bytessrc/__tests__/offline-language-entry.test.tsruns1,245 bytessrc/__tests__/offline-transport.test.tsruns10,702 bytessrc/__tests__/policy-wire-transport.test.tsruns25,677 bytessrc/__tests__/production-warnings.test.tsruns2,600 bytessrc/__tests__/rich-init.test.tsruns10,862 bytessrc/__tests__/static.test.tsruns5,586 bytessrc/__tests__/surface-actions.test.tsruns13,771 bytessrc/__tests__/transport.test.tsruns95,122 bytessrc/build.tsruns39,176 bytessrc/consent-record/__tests__/evaluate.test.tsruns27,939 bytessrc/consent-record/__tests__/evaluation-policy.test.tsruns2,907 bytessrc/consent-record/__tests__/fixtures.tsruns1,599 bytessrc/consent-record/__tests__/normalize.test.tsruns10,131 bytessrc/consent-record/__tests__/record.test.tsruns7,959 bytessrc/consent-record/__tests__/validation-boundaries.test.tsruns7,684 bytessrc/consent-record/design-note.mddoc4,325 bytessrc/consent-record/evaluate.tsruns13,971 bytessrc/consent-record/evaluation-policy.tsruns5,579 bytessrc/consent-record/index.tsruns1,645 bytessrc/consent-record/normalize.tsruns5,858 bytessrc/consent-record/record.tsruns3,739 bytessrc/consent-record/types.tsruns6,696 bytessrc/consent-record/validation.tsruns7,196 bytessrc/consent/compliance.tsruns1,757 bytessrc/consent/consent-types.tsruns9,435 bytessrc/derive-surface.tsruns1,424 bytessrc/events.tsruns10,359 bytessrc/experiment.tsruns1,603 bytessrc/generated.tsruns1,293 bytessrc/index.tsruns10,215 bytessrc/kernel/__tests__/browser-outbox-store.test.tsruns11,572 bytessrc/kernel/__tests__/commands.test.tsruns5,853 bytessrc/kernel/__tests__/configured-categories.test.tsruns2,642 bytessrc/kernel/__tests__/consent-model.test.tsruns29,719 bytessrc/kernel/__tests__/default-isolation.test.tsruns3,121 bytessrc/kernel/__tests__/events.test.tsruns1,595 bytessrc/kernel/__tests__/identity-privacy-races.test.tsruns1,972 bytessrc/kernel/__tests__/init-record-races.test.tsruns4,088 bytessrc/kernel/__tests__/init-response.test.tsruns11,536 bytessrc/kernel/__tests__/listener-isolation.test.tsruns15,390 bytessrc/kernel/__tests__/none-model.test.tsruns2,856 bytessrc/kernel/__tests__/patch.test.tsruns4,745 bytessrc/kernel/__tests__/save-outbox-chunk.test.tsruns1,274 bytessrc/kernel/__tests__/save-outbox.test.tsruns66,285 bytessrc/kernel/__tests__/setters.test.tsruns5,785 bytessrc/kernel/__tests__/snapshot-freezing.test.tsruns4,621 bytessrc/kernel/__tests__/snapshot.test.tsruns5,835 bytessrc/kernel/__tests__/supersession-additional-consent.test.tsruns1,695 bytessrc/kernel/__tests__/surface-shown.test.tsruns11,699 bytessrc/kernel/__tests__/unchanged-commit.test.tsruns12,482 bytessrc/kernel/__tests__/vendor-choice.test.tsruns34,651 bytessrc/kernel/__tests__/without-structured-clone.test.tsruns1,285 bytessrc/kernel/choice.tsruns37,699 bytessrc/kernel/clear-records.tsruns1,546 bytessrc/kernel/dispatch.tsruns7,802 bytessrc/kernel/events.tsruns2,153 bytessrc/kernel/external-permissions.tsruns750 bytessrc/kernel/index.tsruns6,364 bytessrc/kernel/init-lifecycle.tsruns24,529 bytessrc/kernel/internals.tsruns2,512 bytessrc/kernel/patch.tsruns14,367 bytessrc/kernel/record-validation.tsruns7,214 bytessrc/kernel/records.tsruns6,894 bytessrc/kernel/runtime.tsruns13,465 bytessrc/kernel/save-outbox/index.tsruns16,179 bytessrc/kernel/save-outbox/queue-tools.tsruns1,152 bytessrc/kernel/save-outbox/queue.tsruns29,166 bytessrc/kernel/save-outbox/store.tsruns6,152 bytessrc/kernel/save-outbox/supersession.tsruns4,694 bytessrc/kernel/save-outbox/warn.tsruns611 bytessrc/kernel/setters.tsruns7,805 bytessrc/kernel/snapshot.tsruns13,135 bytessrc/libs/__tests__/consent-copy.test.tsruns1,801 bytessrc/libs/__tests__/copy-plain-data.test.tsruns1,348 bytessrc/libs/__tests__/experiment-assignment.test.tsruns13,001 bytessrc/libs/__tests__/experiment.test.tsruns11,197 bytessrc/libs/__tests__/failed-response.test.tsruns3,073 bytessrc/libs/__tests__/generate-subject-id.test.tsruns4,901 bytessrc/libs/__tests__/generate-subject-id.vectors.test.tsruns4,015 bytessrc/libs/__tests__/global-privacy-control.test.tsruns3,590 bytessrc/libs/__tests__/no-records-warning.test.tsruns3,079 bytessrc/libs/__tests__/presentation.test.tsruns14,821 bytessrc/libs/__tests__/session-report.test.tsruns15,584 bytessrc/libs/__tests__/vendors.test.tsruns24,668 bytessrc/libs/cache-directive.tsruns1,086 bytessrc/libs/consent-copy.tsruns4,105 bytessrc/libs/cookie/__tests__/cookie-storage.test.tsruns9,720 bytessrc/libs/cookie/__tests__/read-stored-consent.test.tsruns4,120 bytessrc/libs/cookie/domain-utils.tsruns2,356 bytessrc/libs/cookie/index.tsruns888 bytessrc/libs/cookie/key-mapping.tsruns2,398 bytessrc/libs/cookie/operations.tsruns8,394 bytessrc/libs/cookie/serialization.tsruns6,484 bytessrc/libs/cookie/storage.tsruns1,133 bytessrc/libs/cookie/types.tsruns3,011 bytessrc/libs/copy-plain-data.tsruns902 bytessrc/libs/experiment-assignment.tsruns7,329 bytessrc/libs/experiment-engine.tsruns5,616 bytessrc/libs/experiment-record.tsruns1,104 bytessrc/libs/experiment-storage.tsruns4,310 bytessrc/libs/experiment.tsruns24,503 bytessrc/libs/failed-response.tsruns6,036 bytessrc/libs/freeze-data.tsruns362 bytessrc/libs/generate-subject-id.tsruns3,828 bytessrc/libs/global-privacy-control.tsruns929 bytessrc/libs/has.tsruns7,433 bytessrc/libs/iab-banner-summary.tsruns6,106 bytessrc/libs/iab-unavailable.tsruns2,675 bytessrc/libs/is-production.tsruns931 bytessrc/libs/journey.tsruns9,442 bytessrc/libs/manifest-cache-runtime.tsruns45,913 bytessrc/libs/network-blocker/types.tsruns3,904 bytessrc/libs/no-records-warning.tsruns1,870 bytessrc/libs/policy-actions.tsruns15,698 bytessrc/libs/prefetch/__tests__/hosted-reuse.test.tsruns10,196 bytessrc/libs/prefetch/__tests__/prefetch.test.tsruns18,938 bytessrc/libs/prefetch/index.tsruns566 bytessrc/libs/prefetch/prefetch.tsruns14,957 bytessrc/libs/prefetch/types.tsruns1,809 bytessrc/libs/prefetch/window-key.tsruns793 bytessrc/libs/request-context-headers.tsruns3,289 bytessrc/libs/request-context.tsruns3,853 bytessrc/libs/script-loader/debug.tsruns1,364 bytessrc/libs/script-loader/types.tsruns17,346 bytessrc/libs/session-report.tsruns10,520 bytessrc/libs/storage-keys.tsruns2,549 bytessrc/libs/vendors.tsruns24,885 bytessrc/modes.tsruns6,715 bytessrc/modules/__tests__/category-discovery.test.tsruns4,105 bytessrc/modules/__tests__/effective-gates.test.tsruns14,256 bytessrc/modules/__tests__/has.test.tsruns9,962 bytessrc/modules/__tests__/iab-controls.test.tsruns1,785 bytessrc/modules/__tests__/revocation-reload.server.test.tsruns787 bytessrc/modules/__tests__/revocation-reload.test.tsruns7,284 bytessrc/modules/__tests__/vendor-allowed.test.tsruns4,660 bytessrc/modules/__tests__/vendor-gate.test.tsruns5,034 bytessrc/modules/clear-on-revocation/__tests__/clear-on-revocation.test.tsruns12,886 bytessrc/modules/clear-on-revocation/clear.tsruns2,674 bytessrc/modules/clear-on-revocation/index.tsruns1,136 bytessrc/modules/clear-on-revocation/targets.tsruns4,853 bytessrc/modules/clear-on-revocation/tools.tsruns999 bytessrc/modules/clear-on-revocation/types.tsruns2,507 bytessrc/modules/has.tsruns16,503 bytessrc/modules/iab-controls.tsruns2,903 bytessrc/modules/iframe-blocker/__tests__/body-swap.test.tsruns1,920 bytessrc/modules/iframe-blocker/__tests__/iframe-blocker.test.tsruns12,725 bytessrc/modules/iframe-blocker/__tests__/reconcile.test.tsruns6,141 bytessrc/modules/iframe-blocker/__tests__/vendor-reconcile.test.tsruns13,463 bytessrc/modules/iframe-blocker/index.tsruns9,595 bytessrc/modules/iframe-blocker/reconcile.tsruns8,055 bytessrc/modules/iframe-blocker/types.tsruns554 bytessrc/modules/loader-and-blocker.tsruns905 bytessrc/modules/network-blocker/__tests__/decide.test.tsruns2,954 bytessrc/modules/network-blocker/__tests__/hold.test.tsruns13,011 bytessrc/modules/network-blocker/__tests__/network-blocker.test.tsruns9,909 bytessrc/modules/network-blocker/__tests__/patch-fetch.test.tsruns2,903 bytessrc/modules/network-blocker/__tests__/url.test.tsruns2,882 bytessrc/modules/network-blocker/__tests__/vendor-decide.test.tsruns2,803 bytessrc/modules/network-blocker/blocker.tsruns6,770 bytessrc/modules/network-blocker/decide.tsruns1,263 bytessrc/modules/network-blocker/hold.tsruns13,021 bytessrc/modules/network-blocker/index.tsruns933 bytessrc/modules/network-blocker/patch-fetch.tsruns2,679 bytessrc/modules/network-blocker/patch-xhr.tsruns3,369 bytessrc/modules/network-blocker/tools.tsruns1,119 bytessrc/modules/network-blocker/types.tsruns2,875 bytessrc/modules/network-blocker/url.tsruns3,003 bytessrc/modules/persistence/__tests__/aux-codec.test.tsruns1,594 bytessrc/modules/persistence/__tests__/codec-tables.test.tsruns1,067 bytessrc/modules/persistence/__tests__/combined-subject-identity.test.tsruns22,233 bytessrc/modules/persistence/__tests__/hydrate.test.tsruns6,183 bytessrc/modules/persistence/__tests__/hydration-read-only.test.tsruns13,677 bytessrc/modules/persistence/__tests__/lazy-writer.test.tsruns43,482 bytessrc/modules/persistence/__tests__/listener-failure.test.tsruns2,723 bytessrc/modules/persistence/__tests__/necessary-subject.test.tsruns55,169 bytessrc/modules/persistence/__tests__/persistence.test.tsruns15,723 bytessrc/modules/persistence/__tests__/projection-merge.test.tsruns10,857 bytessrc/modules/persistence/__tests__/public-stored-records.test.tsruns1,201 bytessrc/modules/persistence/__tests__/record-codec-bytes.test.tsruns8,240 bytessrc/modules/persistence/__tests__/record-codec.test.tsruns11,720 bytessrc/modules/persistence/__tests__/record-storage.test.tsruns25,641 bytessrc/modules/persistence/__tests__/record-writes.tsruns548 bytessrc/modules/persistence/__tests__/schedule.test.tsruns1,704 bytessrc/modules/persistence/__tests__/startup-save.test.tsruns3,950 bytessrc/modules/persistence/__tests__/storage-access.test.tsruns17,688 bytessrc/modules/persistence/__tests__/subject-id.test.tsruns17,482 bytessrc/modules/persistence/__tests__/vendor-codec.test.tsruns7,662 bytessrc/modules/persistence/__tests__/vendor-persistence.test.tsruns22,866 bytessrc/modules/persistence/__tests__/write.test.tsruns2,687 bytessrc/modules/persistence/clear.tsruns6,166 bytessrc/modules/persistence/epoch.tsruns3,457 bytessrc/modules/persistence/hydrate.tsruns14,273 bytessrc/modules/persistence/index.tsruns7,488 bytessrc/modules/persistence/mount.tsruns32,966 bytessrc/modules/persistence/record-codec.tsruns26,346 bytessrc/modules/persistence/record-storage.tsruns34,545 bytessrc/modules/persistence/tools.tsruns1,338 bytessrc/modules/persistence/types.tsruns3,816 bytessrc/modules/persistence/writer-loader-static.tsruns709 bytessrc/modules/persistence/writer-loader.tsruns3,822 bytessrc/modules/persistence/writer/encode.tsruns9,135 bytessrc/modules/persistence/writer/reconcile.tsruns26,406 bytessrc/modules/persistence/writer/schedule.tsruns1,815 bytessrc/modules/persistence/writer/store.tsruns9,913 bytessrc/modules/persistence/writer/types.tsruns4,088 bytessrc/modules/persistence/writer/write.tsruns4,134 bytessrc/modules/persistence/writer/writer.tsruns15,652 bytessrc/modules/revocation-reload.tsruns5,337 bytessrc/modules/script-loader/__tests__/current-consent.test.tsruns14,069 bytessrc/modules/script-loader/__tests__/eligibility.test.tsruns3,773 bytessrc/modules/script-loader/__tests__/lifecycle-regressions.test.tsruns40,710 bytessrc/modules/script-loader/__tests__/mount.test.tsruns26,527 bytessrc/modules/script-loader/__tests__/normalize.test.tsruns3,502 bytessrc/modules/script-loader/__tests__/replacement-completion.test.tsruns2,326 bytessrc/modules/script-loader/__tests__/resource-retention.test.tsruns8,403 bytessrc/modules/script-loader/__tests__/script-loader.test.tsruns33,585 bytessrc/modules/script-loader/__tests__/vendor-eligibility.test.tsruns6,763 bytessrc/modules/script-loader/callback-only.tsruns443 bytessrc/modules/script-loader/callbacks.tsruns3,505 bytessrc/modules/script-loader/debug.tsruns1,820 bytessrc/modules/script-loader/diagnostics.tsruns3,133 bytessrc/modules/script-loader/eligibility.tsruns2,984 bytessrc/modules/script-loader/index.tsruns2,633 bytessrc/modules/script-loader/loader.tsruns18,324 bytessrc/modules/script-loader/mount.tsruns27,907 bytessrc/modules/script-loader/normalize.tsruns4,069 bytessrc/modules/script-loader/tools.tsruns1,106 bytessrc/modules/script-loader/types.tsruns5,786 bytessrc/modules/window-debug/__tests__/window-debug.test.tsruns3,584 bytessrc/modules/window-debug/index.tsruns3,719 bytessrc/modules/window-debug/types.tsruns1,951 bytessrc/options/callbacks.tsruns2,414 bytessrc/options/iab-tcf.tsruns9,996 bytessrc/options/iab.tsruns3,695 bytessrc/options/index.tsruns677 bytessrc/options/legal-links.tsruns515 bytessrc/options/overrides.tsruns502 bytessrc/options/ssr.tsruns1,648 bytessrc/options/user.tsruns765 bytessrc/policy.tsruns7,650 bytessrc/preference-draft/__tests__/preference-draft.test.tsruns19,299 bytessrc/preference-draft/index.tsruns17,879 bytessrc/runtime/__tests__/clear-on-revocation.test.tsruns6,152 bytessrc/runtime/__tests__/client-mode-boundary.test.tsruns5,715 bytessrc/runtime/__tests__/client-mode.test.tsruns18,793 bytessrc/runtime/__tests__/consent-runtime.test.tsruns43,439 bytessrc/runtime/__tests__/experiment.test.tsruns13,103 bytessrc/runtime/__tests__/external-source.test.tsruns9,420 bytessrc/runtime/__tests__/gpp.test.tsruns3,494 bytessrc/runtime/__tests__/hosted-persistence.test.tsruns10,754 bytessrc/runtime/__tests__/iab-mount.test.tsruns959 bytessrc/runtime/__tests__/iab-options.test.tsruns672 bytessrc/runtime/__tests__/journey.test.tsruns25,446 bytessrc/runtime/__tests__/lazy-iab.test.tsruns4,532 bytessrc/runtime/__tests__/necessary-only-scope.test.tsruns6,410 bytessrc/runtime/__tests__/on-demand.test.tsruns12,843 bytessrc/runtime/__tests__/provider-runtime.test.tsruns40,607 bytessrc/runtime/__tests__/provider-update-chunk.test.tsruns3,684 bytessrc/runtime/__tests__/runtime-callbacks.test.tsruns4,272 bytessrc/runtime/__tests__/script-loader-preload-side-effects.test.tsruns10,375 bytessrc/runtime/__tests__/script-loader-preload.test.tsruns18,720 bytessrc/runtime/__tests__/script-server-start-parity.test.tsruns7,531 bytessrc/runtime/__tests__/script-server-start.test.tsruns25,246 bytessrc/runtime/__tests__/storage-reconciliation.test.tsruns44,861 bytessrc/runtime/assemble.tsruns16,057 bytessrc/runtime/callbacks.tsruns1,583 bytessrc/runtime/client-mode.tsruns20,925 bytessrc/runtime/controls.tsruns1,915 bytessrc/runtime/gpp-mount.tsruns1,547 bytessrc/runtime/iab-mount.tsruns2,954 bytessrc/runtime/iab-options.tsruns1,055 bytessrc/runtime/index.tsruns6,821 bytessrc/runtime/journey.tsruns9,074 bytessrc/runtime/lazy-hosted.tsruns525 bytessrc/runtime/lazy-iab.tsruns4,776 bytessrc/runtime/lazy-manifest-browser.tsruns344 bytessrc/runtime/lazy-module.tsruns6,375 bytessrc/runtime/lazy-offline.tsruns372 bytessrc/runtime/on-demand-clear-on-revocation.tsruns1,169 bytessrc/runtime/on-demand-consent-source.tsruns1,156 bytessrc/runtime/on-demand-factories.tsruns1,627 bytessrc/runtime/on-demand-loader-and-blocker.tsruns2,077 bytessrc/runtime/on-demand-modules.tsruns3,411 bytessrc/runtime/on-demand-network-blocker.tsruns1,287 bytessrc/runtime/on-demand-script-loader.tsruns1,386 bytessrc/runtime/on-demand.tsruns1,345 bytessrc/runtime/provider-runtime.tsruns23,325 bytessrc/runtime/provider-update.tsruns12,452 bytessrc/runtime/provider.tsruns2,041 bytessrc/runtime/runtime-kernel.tsruns12,038 bytessrc/runtime/runtime-with-modules.tsruns1,803 bytessrc/runtime/script-loader-preload.tsruns8,356 bytessrc/runtime/script-server-start.tsruns17,305 bytessrc/runtime/stream-mode.tsruns4,921 bytessrc/runtime/streamed-init.tsruns4,519 bytessrc/runtime/streamed-prefetch.tsruns1,774 bytessrc/runtime/types.tsruns34,964 bytessrc/server/__tests__/consent-proxy.test.tsruns10,856 bytessrc/server/__tests__/consent-route.test.tsruns50,812 bytessrc/server/__tests__/gvl-cache.test.tsruns4,574 bytessrc/server/__tests__/request-consent.test.tsruns36,294 bytessrc/server/__tests__/request-origin.test.tsruns5,419 bytessrc/server/__tests__/request-subject.test.tsruns12,034 bytessrc/server/__tests__/route-prefix.test.tsruns1,190 bytessrc/server/consent-proxy.tsruns21,061 bytessrc/server/consent-route.tsruns38,216 bytessrc/server/gvl-cache.tsruns3,153 bytessrc/server/index.tsruns2,640 bytessrc/server/request-consent.tsruns39,437 bytessrc/server/request-origin.tsruns9,660 bytessrc/server/request-subject.tsruns10,245 bytessrc/server/route-prefix.tsruns1,855 bytessrc/server/static-manifest.tsruns5,018 bytessrc/static.tsruns6,863 bytessrc/surface-actions/__tests__/early-taps.test.tsruns13,619 bytessrc/surface-actions/blanket.tsruns1,607 bytessrc/surface-actions/early-tap-script.tsruns3,093 bytessrc/surface-actions/early-taps.tsruns7,534 bytessrc/surface-actions/iab-save.tsruns1,585 bytessrc/surface-actions/index.tsruns2,289 bytessrc/surface-actions/rules.tsruns2,985 bytessrc/surface-actions/save.tsruns2,330 bytessrc/translations/index.tsruns7,440 bytessrc/transports/__tests__/subject-body.test.tsruns1,567 bytessrc/transports/__tests__/vendor-transport.test.tsruns8,379 bytessrc/transports/ad-tech-provider-cache.tsruns8,093 bytessrc/transports/contract.tsruns1,495 bytessrc/transports/custom.tsruns1,061 bytessrc/transports/decision-inputs.tsruns4,340 bytessrc/transports/early-init-modes.tsruns1,474 bytessrc/transports/gvl-cache.tsruns3,880 bytessrc/transports/gvl-reference.tsruns4,849 bytessrc/transports/hosted-init-request.tsruns3,357 bytessrc/transports/hosted-modes.tsruns1,452 bytessrc/transports/hosted-records.tsruns9,089 bytessrc/transports/hosted.tsruns13,874 bytessrc/transports/index.tsruns2,227 bytessrc/transports/init-output.tsruns14,900 bytessrc/transports/manifest-browser-iab.tsruns1,776 bytessrc/transports/manifest-browser-languages.tsruns3,811 bytessrc/transports/manifest-browser-location.tsruns4,463 bytessrc/transports/manifest-browser-packs.tsruns1,969 bytessrc/transports/manifest-browser-remote.tsruns2,424 bytessrc/transports/manifest-browser-resolve.tsruns5,199 bytessrc/transports/manifest-browser.tsruns18,500 bytessrc/transports/manifest-cache.tsruns3,888 bytessrc/transports/manifest-request.tsruns973 bytessrc/transports/manifest.tsruns18,694 bytessrc/transports/mode.tsruns6,358 bytessrc/transports/offline.tsruns11,759 bytessrc/transports/save-rejection.tsruns5,515 bytessrc/transports/subject-body.tsruns7,533 bytessrc/transports/subject-record.tsruns10,471 bytessrc/transports/version-header.tsruns3,651 bytessrc/types.tsruns39,371 bytestsconfig.jsonasset606 bytestsconfig.test.jsonasset326 bytesvitest.config.tsruns734 bytesvitest.setup.tsruns2,949 bytes
Read SKILL.md
# c15t with @c15t/core
The Markdown under `./docs` matches the installed version. Read it before writing code: v3 renamed most v2 APIs, so remembered examples are usually wrong.
## Before writing code
1. Find the framework, router, rendering mode (server, static, cached or single-page) and host in the project. Check the framework config and route files for settings that prerender or cache pages.
2. Pick the matching row in [Choose your setup](./docs/concepts/choose-your-setup.md).
3. Follow that guide from start to finish: [JavaScript](./docs/frameworks/javascript/quickstart.md).
## Rules
- Install with `npm install c15t`. Keep every c15t package on the same release. New apps install `c15t` and import its framework subpath. An app that already depends on this scoped package can keep importing from it, but should not install both.
- The backend URL comes from the user's Inth project or self-hosted backend. It is public configuration. Never invent one; ask for it or read it from the environment.View the complete source on GitHubc15t-nextjs
When your agent uses it
Set up, customize or debug c15t consent management with @c15t/nextjs. Use when the project is a Next.js app with the App Router, Pages Router or static export, or when a task mentions a cookie banner, consent dialog, GDPR or CCPA prompts, blocking analytics until consent, Google Consent Mode or IAB TCF.
What it loads into context
Frontmatter
82 tokensAlways available to the agent
SKILL.md
628 tokensWhen the skill is activated
Reference documents
46,519 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Before writing code
- Rules
- Customize with the smallest change
- Finish with a check
Scripts executed separately
package.jsonrslib.config.tsscripts/generate-distribution-css.tssrc/__tests__/api.test.tssrc/__tests__/build.test.tssrc/__tests__/client-mode.test.tssrc/__tests__/config-browser.test.tssrc/__tests__/config.test.tssrc/__tests__/conformance.test.tsxsrc/__tests__/consent-dialog-link-entry.test.tssrc/__tests__/consent-route.test.tssrc/__tests__/devtools.test.tssrc/__tests__/end-to-end.test.tsxsrc/__tests__/generated-manifest-default.test.tssrc/__tests__/manifest-fixture.tssrc/__tests__/pages.test.tssrc/__tests__/policy-driver-evidence.test.tsxsrc/__tests__/policy-driver.tsxsrc/__tests__/policy-fixture.tssrc/__tests__/postcss-tailwind3-entry.test.tssrc/__tests__/proxy.test.tssrc/__tests__/react-server-entry.test.tssrc/__tests__/request-context.test.tssrc/__tests__/resolve-consent.test.tssrc/__tests__/root-missing-config.test.tsxsrc/__tests__/root-modules.test.tsxsrc/__tests__/root-offline-mode.test.tsxsrc/__tests__/root-script-loader-preload-always-load.test.tsxsrc/__tests__/root-script-loader-preload-consent-source.test.tsxsrc/__tests__/root-script-loader-preload-disabled.test.tsxsrc/__tests__/root-script-loader-preload-side-effects.test.tsxsrc/__tests__/root-script-loader-preload.test.tsxsrc/__tests__/root-server-start.test.tsxsrc/__tests__/root-streamed-resolver.test.tsxsrc/__tests__/root-update-chunk.test.tsxsrc/__tests__/root-user-config-options.test.tsxsrc/__tests__/root-user-config.test.tsxsrc/__tests__/root.test.tsxsrc/__tests__/server.test.tssrc/__tests__/ssr-policy.test.tsxsrc/__tests__/static.test.tssrc/api.tssrc/build.tssrc/client-components.tssrc/client-mode.tssrc/components/consent-dialog-link.tssrc/config.tssrc/consent-source.tssrc/devtools.tssrc/generated-manifest-module.d.tssrc/generated-manifest.tssrc/headless.tssrc/index.react-server.tssrc/index.tssrc/middleware.tssrc/node-bridge.tssrc/pages.tssrc/postcss-tailwind3.tssrc/proxy.tssrc/root.tsxsrc/server.tssrc/static.tssrc/types.tssrc/user-config.tsvitest.config.ts
Files
.gitignoreasset54 bytes.npmignoreasset99 bytesAGENTS.mddoc28,999 bytesCHANGELOG.mddoc131,853 bytesREADME.mddoc9,847 bytesSKILL.mdcore2,777 bytesdocs/integrations/cloudflare-zaraz.mddoc15,058 bytesiab/styles.cssasset34 bytesiab/styles.tw3.cssasset38 bytesknip.jsonasset614 bytespackage.jsonruns5,246 bytesreadme.jsonasset3,522 bytesrslib.config.tsruns894 bytesscripts/generate-distribution-css.tsruns176 bytessrc/__tests__/api.test.tsruns5,378 bytessrc/__tests__/build.test.tsruns19,333 bytessrc/__tests__/client-mode.test.tsruns2,375 bytessrc/__tests__/config-browser.test.tsruns682 bytessrc/__tests__/config.test.tsruns4,187 bytessrc/__tests__/conformance.test.tsxruns392 bytessrc/__tests__/consent-dialog-link-entry.test.tsruns791 bytessrc/__tests__/consent-route.test.tsruns4,039 bytessrc/__tests__/devtools.test.tsruns636 bytessrc/__tests__/end-to-end.test.tsxruns18,241 bytessrc/__tests__/generated-manifest-default.test.tsruns3,373 bytessrc/__tests__/manifest-fixture.tsruns1,467 bytessrc/__tests__/pages.test.tsruns23,720 bytessrc/__tests__/policy-driver-evidence.test.tsxruns1,324 bytessrc/__tests__/policy-driver.tsxruns524 bytessrc/__tests__/policy-fixture.tsruns1,360 bytessrc/__tests__/postcss-tailwind3-entry.test.tsruns834 bytessrc/__tests__/proxy.test.tsruns6,348 bytessrc/__tests__/react-server-entry.test.tsruns2,137 bytessrc/__tests__/request-context.test.tsruns1,745 bytessrc/__tests__/resolve-consent.test.tsruns10,792 bytessrc/__tests__/root-missing-config.test.tsxruns2,486 bytessrc/__tests__/root-modules.test.tsxruns4,010 bytessrc/__tests__/root-offline-mode.test.tsxruns2,167 bytessrc/__tests__/root-script-loader-preload-always-load.test.tsxruns2,300 bytessrc/__tests__/root-script-loader-preload-consent-source.test.tsxruns3,410 bytessrc/__tests__/root-script-loader-preload-disabled.test.tsxruns2,516 bytessrc/__tests__/root-script-loader-preload-side-effects.test.tsxruns4,767 bytessrc/__tests__/root-script-loader-preload.test.tsxruns8,096 bytessrc/__tests__/root-server-start.test.tsxruns8,735 bytessrc/__tests__/root-streamed-resolver.test.tsxruns2,091 bytessrc/__tests__/root-update-chunk.test.tsxruns1,469 bytessrc/__tests__/root-user-config-options.test.tsxruns2,319 bytessrc/__tests__/root-user-config.test.tsxruns3,597 bytessrc/__tests__/root.test.tsxruns2,957 bytessrc/__tests__/server.test.tsruns11,848 bytessrc/__tests__/ssr-policy.test.tsxruns12,702 bytessrc/__tests__/static.test.tsruns4,039 bytessrc/api.tsruns8,895 bytessrc/build.tsruns16,929 bytessrc/client-components.tsruns644 bytessrc/client-mode.tsruns4,701 bytessrc/components/consent-dialog-link.tsruns314 bytessrc/config.tsruns10,129 bytessrc/consent-source.tsruns5,460 bytessrc/devtools.tsruns127 bytessrc/generated-manifest-module.d.tsruns658 bytessrc/generated-manifest.tsruns783 bytessrc/headless.tsruns151 bytessrc/iab/styles.cssasset389 bytessrc/iab/styles.tw3.cssasset455 bytessrc/index.react-server.tsruns1,578 bytessrc/index.tsruns1,777 bytessrc/middleware.tsruns637 bytessrc/node-bridge.tsruns4,735 bytessrc/pages.tsruns11,126 bytessrc/postcss-tailwind3.tsruns763 bytessrc/proxy.tsruns5,748 bytessrc/root.tsxruns11,977 bytessrc/server.tsruns12,520 bytessrc/static.tsruns1,165 bytessrc/styles.cssasset289 bytessrc/styles.tw3.cssasset410 bytessrc/types.tsruns2,459 bytessrc/user-config.tsruns841 bytesstyles.cssasset29 bytesstyles.tw3.cssasset33 bytestsconfig.jsonasset597 bytestsconfig.tests.jsonasset311 bytesvitest.config.tsruns7,586 bytes
Read SKILL.md
# c15t with @c15t/nextjs
The Markdown under `./docs` matches the installed version. Read it before writing code: v3 renamed most v2 APIs, so remembered examples are usually wrong.
## Before writing code
1. Find the framework, router, rendering mode (server, static, cached or single-page) and host in the project. Check the framework config and route files for settings that prerender or cache pages.
2. Pick the matching row in [Choose your setup](./docs/concepts/choose-your-setup.md).
3. Follow that guide from start to finish: [Next.js](./docs/frameworks/next/quickstart.md).
## Rules
- Install with `npm install c15t` and import `c15t/next`. Keep every c15t package on the same release. New apps install `c15t` and import its framework subpath. An app that already depends on this scoped package can keep importing from it, but should not install both.
- The backend URL comes from the user's Inth project or self-hosted backend. It is public configuration. Never invent one; ask for it or read it from the environment.View the complete source on GitHubc15t-react
When your agent uses it
Set up, customize or debug c15t consent management with @c15t/react. Use when the project is a React app, such as Vite or React Router, or when a task mentions a cookie banner, consent dialog, GDPR or CCPA prompts, blocking analytics until consent, Google Consent Mode or IAB TCF.
What it loads into context
Frontmatter
76 tokensAlways available to the agent
SKILL.md
617 tokensWhen the skill is activated
Reference documents
49,857 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Before writing code
- Rules
- Customize with the smallest change
- Finish with a check
Scripts executed separately
package.jsonpublic/mockServiceWorker.jsrslib.config.tsscripts/generate-distribution-css.tssrc/__tests__/aggregate-dialog.test.tsxsrc/__tests__/astro-iab-loader.test.tsxsrc/__tests__/branding-logo-module.test.tssrc/__tests__/category-discovery.test.tsxsrc/__tests__/clear-on-revocation-remount.test.tsxsrc/__tests__/clear-on-revocation.test.tsxsrc/__tests__/client-policy-imports.test.tssrc/__tests__/component-fixture-provider.tsxsrc/__tests__/conformance.test.tsxsrc/__tests__/consent-markup.tssrc/__tests__/consent-state-fixture.tssrc/__tests__/core-exports.type-test.tssrc/__tests__/devtools.test.tsxsrc/__tests__/dialog-scroll.test.tsxsrc/__tests__/dialog-stylesheet.test.tsxsrc/__tests__/draft.test.tsxsrc/__tests__/event-dispatcher.test.tsxsrc/__tests__/experiment.test.tsxsrc/__tests__/external-iab-actions.test.tsxsrc/__tests__/external-runtime-draft.test.tsxsrc/__tests__/external-runtime-provider.test.tsxsrc/__tests__/external-runtime-remount.test.tsxsrc/__tests__/external-source.test.tsxsrc/__tests__/framework-conformance.tsxsrc/__tests__/framework-policy-driver.tsxsrc/__tests__/framework-root.tssrc/__tests__/gpp.test.tsxsrc/__tests__/hooks.test.tsxsrc/__tests__/iab-dialog-deferred.test.tsxsrc/__tests__/iab-dialog-warming.test.tsxsrc/__tests__/iab-policy-guard-provider.test.tsxsrc/__tests__/iab-policy-guard.test.tsxsrc/__tests__/iab-presentation.test.tsxsrc/__tests__/iab-provider-kernel-switch.test.tsxsrc/__tests__/idle-dialog-warming.test.tsxsrc/__tests__/iframe-blocker-on-demand.test.tsxsrc/__tests__/module-requests.tssrc/__tests__/network-blocker-early.test.tsxsrc/__tests__/network-blocker-unmount.test.tsxsrc/__tests__/pending-save.test.tsxsrc/__tests__/policy-driver-smoke.test.tsxsrc/__tests__/policy-driver.tsxsrc/__tests__/policy-fixture.tssrc/__tests__/policy-presentation.test.tsxsrc/__tests__/postcss-tailwind3-entry.test.tssrc/__tests__/provider-early-init-registered.test.tsxsrc/__tests__/provider-early-init.test.tsxsrc/__tests__/provider-modules.test.tsxsrc/__tests__/provider-prefetch-promise.test.tsxsrc/__tests__/provider-runtime-lifecycle.test.tsxsrc/__tests__/provider-update-chunk.test.tsxsrc/__tests__/provider-update-failure.test.tsxsrc/__tests__/provider.test.tsxsrc/__tests__/quickstart-remount.test.tsxsrc/__tests__/quickstart.test.tsxsrc/__tests__/render-count-bench.test.tsxsrc/__tests__/revocation-reload.test.tsxsrc/__tests__/scoped-notice-save.test.tsxsrc/__tests__/script-loader-at-mount.test.tsxsrc/__tests__/selector-hooks-scope.test.tsxsrc/__tests__/set-language.test.tsxsrc/__tests__/showcase-support-chat.test.tsxsrc/__tests__/spa-modes.test.tssrc/__tests__/split-entry-deferral.test.tsxsrc/__tests__/stable-context-providers.tsxsrc/__tests__/streamed-banner.test.tsxsrc/__tests__/streamed-headless-banner.test.tsxsrc/__tests__/streamed-ssr-harness.tsxsrc/__tests__/switch-theme.test.tsxsrc/__tests__/theme-exports.type-test.tssrc/__tests__/theme-slots.test.tsxsrc/__tests__/theme-ssr.test.tsxsrc/__tests__/theme-tokens.test.tsxsrc/__tests__/ui-source.test.tsxsrc/__tests__/use-network-blocker-early.test.tsxsrc/__tests__/vendor-options.test.tsxsrc/aggregate-components.tsxsrc/chunk-warming.tssrc/component-hooks/__tests__/use-consent-dialog-trigger.test.tsxsrc/component-hooks/__tests__/use-consent-gate.test.tsxsrc/component-hooks/__tests__/use-consent-labels.test.tsxsrc/component-hooks/__tests__/use-consent-text-direction.test.tsxsrc/component-hooks/__tests__/use-headless-consent-ui.test.tsxsrc/component-hooks/__tests__/use-translations.test.tsxsrc/component-hooks/__tests__/use-vendors-listed-under.test.tsxsrc/component-hooks/use-consent-gate.tssrc/component-hooks/use-consent-labels.tssrc/component-hooks/use-consent-text-direction.tssrc/component-hooks/use-headless-consent-ui.tssrc/component-hooks/use-headless-iab-consent-ui.tssrc/component-hooks/use-panel-trigger.tssrc/component-hooks/use-translations.tssrc/component-hooks/use-vendors-listed-under.tssrc/components/__tests__/active-ui-transitions.e2e.test.tsxsrc/components/__tests__/consent-flow.e2e.test.tsxsrc/components/__tests__/models-prop.e2e.test.tsxsrc/components/__tests__/no-policy-surfaces.test.tsxsrc/components/__tests__/none-model-surfaces.test.tsxsrc/components/__tests__/theme-regressions.test.tsxsrc/components/__tests__/theme-slot-contract.test.tsxsrc/components/__tests__/ui-source-tracking.e2e.test.tsxsrc/components/consent-gate/__tests__/consent-gate-placeholder.test.tsxsrc/components/consent-gate/__tests__/consent-gate-renders.test.tsxsrc/components/consent-gate/__tests__/frame-deprecation.test.tsxsrc/components/consent-gate/atoms.tsxsrc/components/consent-gate/consent-gate.tsxsrc/components/consent-gate/frame.tsxsrc/components/consent-gate/index.tssrc/components/consent-gate/types.tssrc/components/consent-preferences-link/__tests__/consent-preferences-link.test.tsxsrc/components/consent-preferences-link/consent-preferences-link.tsxsrc/components/consent-preferences-link/index.tssrc/components/iab-panel/__tests__/features-section.test.tsxsrc/components/iab-panel/__tests__/preference-center.test.tsxsrc/components/iab-panel/__tests__/purpose-item.test.tsxsrc/components/iab-panel/__tests__/purposes-tab.test.tsxsrc/components/iab-panel/__tests__/vendors-tab.test.tsxsrc/components/iab-panel/atoms/ad-tech-provider-section.tsxsrc/components/iab-panel/atoms/card.tsxsrc/components/iab-panel/atoms/content.tsxsrc/components/iab-panel/atoms/feature-item.tsxsrc/components/iab-panel/atoms/footer.tsxsrc/components/iab-panel/atoms/header.tsxsrc/components/iab-panel/atoms/overlay.tsxsrc/components/iab-panel/atoms/purpose-item.tsxsrc/components/iab-panel/atoms/root.tsxsrc/components/iab-panel/atoms/stack-item.tsxsrc/components/iab-panel/atoms/tabs.tsxsrc/components/iab-panel/atoms/vendor-list.tsxsrc/components/iab-panel/hooks/use-display-model.tssrc/components/iab-panel/hooks/use-gvl-data.tssrc/components/iab-panel/iab-panel.tsxsrc/components/iab-panel/index.tssrc/components/iab-panel/types.tssrc/components/iab-panel/use-iab-translations.tssrc/components/iab-prompt/__tests__/iab-consent-banner.test.tsxsrc/components/iab-prompt/atoms/button-group.tsxsrc/components/iab-prompt/atoms/card.tsxsrc/components/iab-prompt/atoms/description.tsxsrc/components/iab-prompt/atoms/footer.tsxsrc/components/iab-prompt/atoms/header.tsxsrc/components/iab-prompt/atoms/overlay.tsxsrc/components/iab-prompt/atoms/root.tsxsrc/components/iab-prompt/atoms/title.tsxsrc/components/iab-prompt/iab-prompt.tsxsrc/components/iab-prompt/index.tssrc/components/iab/__tests__/e2e-setup.tssrc/components/iab/__tests__/fixtures/mock-consent-state.tssrc/components/iab/__tests__/iab-banner.e2e.test.tsxsrc/components/iab/__tests__/iab-consent-flow.e2e.test.tsxsrc/components/iab/__tests__/iab-events.e2e.test.tsxsrc/components/iab/__tests__/iab-gvl.e2e.test.tsxsrc/components/iab/__tests__/iab-preference-center.e2e.test.tsxsrc/components/iab/__tests__/iab-storage.e2e.test.tsxsrc/components/iab/__tests__/iab-stub.e2e.test.tsxsrc/components/iab/__tests__/iab-tcfapi.e2e.test.tsxsrc/components/iab/__tests__/msw-handlers.tssrc/components/panel-link/index.tssrc/components/panel-trigger/__tests__/consent-dialog-trigger-devtools-toolbar.test.tsxsrc/components/panel-trigger/__tests__/consent-dialog-trigger-devtools.test.tsxsrc/components/panel-trigger/__tests__/consent-dialog-trigger-rights.test.tsxsrc/components/panel-trigger/__tests__/consent-dialog-trigger-toolbar-loading.test.tsxsrc/components/panel-trigger/__tests__/consent-dialog-trigger-toolbar.test.tsxsrc/components/panel-trigger/__tests__/panel-trigger.type-test.tsxsrc/components/panel-trigger/__tests__/trigger-disable-animation.test.tsxsrc/components/panel-trigger/atoms/button.tsxsrc/components/panel-trigger/atoms/icon.tsxsrc/components/panel-trigger/atoms/root.tsxsrc/components/panel-trigger/atoms/text.tsxsrc/components/panel-trigger/atoms/toolbar.tsxsrc/components/panel-trigger/atoms/trigger-icons.tsxsrc/components/panel-trigger/index.tssrc/components/panel-trigger/panel-trigger-toolbar.tsxsrc/components/panel-trigger/panel-trigger.tsxsrc/components/panel-trigger/toolbar-loader.tssrc/components/panel-trigger/types.tssrc/components/panel-trigger/use-draggable.tssrc/components/panel/atoms/card.tsxsrc/components/panel/atoms/overlay.tsxsrc/components/panel/atoms/root.tsxsrc/components/panel/index.tssrc/components/panel/panel.tsxsrc/components/preferences/__tests__/category-order.test.tsxsrc/components/preferences/__tests__/policy-actions.test.tsxsrc/components/preferences/__tests__/restriction-notice.test.tsxsrc/components/preferences/__tests__/vendor-list.test.tsxsrc/components/preferences/atoms/accordion.tsxsrc/components/preferences/atoms/button.tsxsrc/components/preferences/atoms/footer.tsxsrc/components/preferences/atoms/root.tsxsrc/components/preferences/atoms/vendor-list.tsxsrc/components/preferences/index.tssrc/components/preferences/policy-actions.tsxsrc/components/preferences/preferences.tsxsrc/components/preferences/types.tssrc/components/prompt/__tests__/consent-banner-compose.test.tsxsrc/components/prompt/__tests__/consent-banner-footer-layout.test.tsxsrc/components/prompt/__tests__/consent-banner-hit-area.test.tsxsrc/components/prompt/__tests__/consent-banner-notice.test.tsxsrc/components/prompt/__tests__/consent-banner-policy-ordering.test.tsxsrc/components/prompt/__tests__/consent-banner-variants.test.tsxsrc/components/prompt/__tests__/customize-warming.test.tsxsrc/components/prompt/__tests__/policy-actions.test.tsxsrc/components/prompt/__tests__/presentation-behavior.test.tsxsrc/components/prompt/atoms/early-tap-script.tsxsrc/components/prompt/atoms/overlay.tsxsrc/components/prompt/atoms/root.tsxsrc/components/prompt/components.tsxsrc/components/prompt/error-boundary.tsxsrc/components/prompt/index.tssrc/components/prompt/policy-actions.tsxsrc/components/prompt/prompt.tsxsrc/components/prompt/surface-context.tssrc/components/prompt/use-banner-copy.tssrc/components/shared/__tests__/deferred-surface-styles.test.tsxsrc/components/shared/__tests__/iab-surface-styles.test.tsxsrc/components/shared/__tests__/streamed-surface.test.tssrc/components/shared/__tests__/surface-styles.test.tsxsrc/components/shared/dialog-sheets.tssrc/components/shared/first-paint-sheets.tssrc/components/shared/iab-dialog-sheets.tssrc/components/shared/iab-first-paint-sheets.tssrc/components/shared/libs/__tests__/slot.test.tsxsrc/components/shared/libs/compose-refs.tssrc/components/shared/libs/polymorphic.tssrc/components/shared/libs/recursive-clone-children.tsxsrc/components/shared/libs/slot.tsxsrc/components/shared/libs/use-controllable-state.tssrc/components/shared/policy-actions.tsxsrc/components/shared/primitives/box.tsxsrc/components/shared/primitives/button.tsxsrc/components/shared/primitives/button.types.tssrc/components/shared/primitives/legal-links/index.tsxsrc/components/shared/streamed-surface.tsxsrc/components/shared/surface-styles.tsxsrc/components/shared/ui/__tests__/branding.test.tsxsrc/components/shared/ui/__tests__/primitives.test.tsxsrc/components/shared/ui/accordion/accordion.tsxsrc/components/shared/ui/accordion/accordion.types.tssrc/components/shared/ui/accordion/index.tssrc/components/shared/ui/animated-collapse/animated-collapse.tsxsrc/components/shared/ui/animated-collapse/index.tssrc/components/shared/ui/branding.tsxsrc/components/shared/ui/button/button.tsxsrc/components/shared/ui/button/button.types.tssrc/components/shared/ui/button/index.tssrc/components/shared/ui/collapsible/collapsible.tsxsrc/components/shared/ui/collapsible/index.tssrc/components/shared/ui/dialog/dialog.tsxsrc/components/shared/ui/dialog/index.tssrc/components/shared/ui/icon.tsxsrc/components/shared/ui/logo.tsxsrc/components/shared/ui/preference-item/index.tssrc/components/shared/ui/preference-item/preference-item.tsxsrc/components/shared/ui/switch/index.tssrc/components/shared/ui/switch/switch.tsxsrc/components/shared/ui/switch/switch.types.tssrc/components/shared/ui/tabs/index.tssrc/components/shared/ui/tabs/tabs.tsxsrc/consent-gate.tssrc/consent-theme.tsxsrc/context.tssrc/context/consent-tracking-context.tssrc/context/iab-context-value.tssrc/context/index.tssrc/context/theme-context.tssrc/declaration.d.tssrc/devtools-launcher.tssrc/devtools.tsxsrc/draft-context.tssrc/draft.tsxsrc/event-dispatcher.tssrc/external-iab-context.tsxsrc/gpp.tsxsrc/headless.tssrc/hooks.tssrc/hooks/__tests__/use-color-scheme.test.tsxsrc/hooks/__tests__/use-focus-trap.test.tsxsrc/hooks/__tests__/use-late-entry.test.tsxsrc/hooks/__tests__/use-scroll-lock.test.tsxsrc/hooks/__tests__/use-styles.test.tsxsrc/hooks/__tests__/use-theme.test.tsxsrc/hooks/use-color-scheme.tssrc/hooks/use-committed-ref.tssrc/hooks/use-component-config.tssrc/hooks/use-focus-trap.tssrc/hooks/use-headless-iab-consent-ui.tssrc/hooks/use-iab-manager.tssrc/hooks/use-iab-policy-guard.tssrc/hooks/use-is-hydrated.tssrc/hooks/use-late-entry.tssrc/hooks/use-reduced-motion.tssrc/hooks/use-scroll-lock.tssrc/hooks/use-text-direction.tssrc/hooks/use-theme.tssrc/iab-context.tsxsrc/iab-dialog-deferred.tsxsrc/iab.tssrc/index-parts/consent-banner.tssrc/index-parts/consent-dialog-link.tssrc/index-parts/consent-dialog-trigger.tssrc/index-parts/consent-dialog.tssrc/index-parts/consent-gate.tssrc/index-parts/core.tssrc/index-parts/draft.tssrc/index-parts/event-dispatcher.tssrc/index-parts/frame.tssrc/index-parts/hooks.tssrc/index-parts/hosted.tssrc/index-parts/module-hooks.tssrc/index-parts/offline.tssrc/index-parts/presets.tssrc/index-parts/provider.tssrc/index-parts/theme.tssrc/index-parts/translations.tssrc/index.tssrc/kernel-selector.tssrc/modes.tssrc/module-hooks.tssrc/module-hooks/iframe-blocker.tssrc/module-hooks/network-blocker.tssrc/module-hooks/network-hold.tssrc/module-hooks/persistence.tssrc/module-hooks/script-loader.tssrc/module-hooks/shared.tssrc/panel-link.tssrc/panel-trigger.tssrc/panel.tssrc/postcss-tailwind3.tssrc/preferences.tssrc/primitives.tssrc/primitives/accordion.tssrc/primitives/button.tssrc/primitives/collapsible.tssrc/primitives/dialog.tssrc/primitives/preference-item.tssrc/primitives/switch.tssrc/primitives/tabs.tssrc/prompt.tssrc/provider.tsxsrc/server/fetch-ssr-data.test.tssrc/server/fetch-ssr-data.tssrc/server/headers.test.tssrc/server/headers.tssrc/server/index.tssrc/server/init-cache-key.test.tssrc/server/init-cache-key.tssrc/server/normalize-url.test.tssrc/server/normalize-url.tssrc/server/types.tssrc/test-setup.browser.tssrc/theme-provider.tsxsrc/transports/hosted.tssrc/transports/manifest.tssrc/transports/offline.tssrc/types/index.tssrc/types/manager.tssrc/types/slots.tssrc/types/theme/index.tssrc/types/theme/style-types.tssrc/ui-config-context.tssrc/utils/__tests__/deferred-module.test.tsxsrc/utils/__tests__/theme-utils.test.tssrc/utils/cn.tssrc/utils/default-translation-config.tssrc/utils/deferred-module.tsxsrc/utils/index.tssrc/utils/merge-slot-props.tssrc/utils/merge-styles.tssrc/utils/theme-utils.tsvitest.config.ts
Files
.npmignoreasset68 bytesAGENTS.mddoc27,004 bytesCHANGELOG.mddoc152,216 bytesREADME.mddoc9,084 bytesSKILL.mdcore2,751 bytesdocs/integrations/cloudflare-zaraz.mddoc15,042 bytesiab/styles.cssasset34 bytesiab/styles.tw3.cssasset38 bytesknip.jsonasset1,413 bytespackage.jsonruns8,901 bytespublic/mockServiceWorker.jsruns8,661 bytesreadme.jsonasset2,738 bytesrslib.config.tsruns781 bytesscripts/generate-distribution-css.tsruns176 bytessrc/__tests__/aggregate-dialog.test.tsxruns2,226 bytessrc/__tests__/astro-iab-loader.test.tsxruns2,241 bytessrc/__tests__/branding-logo-module.test.tsruns1,291 bytessrc/__tests__/category-discovery.test.tsxruns8,946 bytessrc/__tests__/clear-on-revocation-remount.test.tsxruns3,377 bytessrc/__tests__/clear-on-revocation.test.tsxruns4,722 bytessrc/__tests__/client-policy-imports.test.tsruns1,839 bytessrc/__tests__/component-fixture-provider.tsxruns2,360 bytessrc/__tests__/conformance.test.tsxruns13,064 bytessrc/__tests__/consent-markup.tsruns673 bytessrc/__tests__/consent-state-fixture.tsruns680 bytessrc/__tests__/core-exports.type-test.tsruns896 bytessrc/__tests__/devtools.test.tsxruns20,891 bytessrc/__tests__/dialog-scroll.test.tsxruns3,273 bytessrc/__tests__/dialog-stylesheet.test.tsxruns2,476 bytessrc/__tests__/draft.test.tsxruns7,637 bytessrc/__tests__/event-dispatcher.test.tsxruns2,665 bytessrc/__tests__/experiment.test.tsxruns15,784 bytessrc/__tests__/external-iab-actions.test.tsxruns7,945 bytessrc/__tests__/external-runtime-draft.test.tsxruns7,379 bytessrc/__tests__/external-runtime-provider.test.tsxruns6,469 bytessrc/__tests__/external-runtime-remount.test.tsxruns1,512 bytessrc/__tests__/external-source.test.tsxruns3,955 bytessrc/__tests__/framework-conformance.tsxruns14,650 bytessrc/__tests__/framework-policy-driver.tsxruns28,035 bytessrc/__tests__/framework-root.tsruns487 bytessrc/__tests__/gpp.test.tsxruns3,867 bytessrc/__tests__/hooks.test.tsxruns14,762 bytessrc/__tests__/iab-dialog-deferred.test.tsxruns7,879 bytessrc/__tests__/iab-dialog-warming.test.tsxruns6,211 bytessrc/__tests__/iab-policy-guard-provider.test.tsxruns2,237 bytessrc/__tests__/iab-policy-guard.test.tsxruns5,736 bytessrc/__tests__/iab-presentation.test.tsxruns13,274 bytessrc/__tests__/iab-provider-kernel-switch.test.tsxruns15,503 bytessrc/__tests__/idle-dialog-warming.test.tsxruns5,961 bytessrc/__tests__/iframe-blocker-on-demand.test.tsxruns11,783 bytessrc/__tests__/module-requests.tsruns669 bytessrc/__tests__/network-blocker-early.test.tsxruns3,147 bytessrc/__tests__/network-blocker-unmount.test.tsxruns3,733 bytessrc/__tests__/pending-save.test.tsxruns9,463 bytessrc/__tests__/policy-driver-smoke.test.tsxruns3,146 bytessrc/__tests__/policy-driver.tsxruns25,809 bytessrc/__tests__/policy-fixture.tsruns1,387 bytessrc/__tests__/policy-presentation.test.tsxruns14,606 bytessrc/__tests__/postcss-tailwind3-entry.test.tsruns827 bytessrc/__tests__/provider-early-init-registered.test.tsxruns6,944 bytessrc/__tests__/provider-early-init.test.tsxruns28,876 bytessrc/__tests__/provider-modules.test.tsxruns4,313 bytessrc/__tests__/provider-prefetch-promise.test.tsxruns5,838 bytessrc/__tests__/provider-runtime-lifecycle.test.tsxruns6,374 bytessrc/__tests__/provider-update-chunk.test.tsxruns1,625 bytessrc/__tests__/provider-update-failure.test.tsxruns2,098 bytessrc/__tests__/provider.test.tsxruns25,458 bytessrc/__tests__/quickstart-remount.test.tsxruns2,932 bytessrc/__tests__/quickstart.test.tsxruns2,514 bytessrc/__tests__/render-count-bench.test.tsxruns3,540 bytessrc/__tests__/revocation-reload.test.tsxruns2,302 bytessrc/__tests__/scoped-notice-save.test.tsxruns4,979 bytessrc/__tests__/script-loader-at-mount.test.tsxruns6,546 bytessrc/__tests__/selector-hooks-scope.test.tsxruns4,196 bytessrc/__tests__/set-language.test.tsxruns6,251 bytessrc/__tests__/showcase-support-chat.test.tsxruns2,291 bytessrc/__tests__/spa-modes.test.tsruns2,972 bytessrc/__tests__/split-entry-deferral.test.tsxruns2,850 bytessrc/__tests__/stable-context-providers.tsxruns1,662 bytessrc/__tests__/streamed-banner.test.tsxruns15,290 bytessrc/__tests__/streamed-headless-banner.test.tsxruns4,957 bytessrc/__tests__/streamed-ssr-harness.tsxruns6,767 bytessrc/__tests__/switch-theme.test.tsxruns3,034 bytessrc/__tests__/theme-exports.type-test.tsruns535 bytessrc/__tests__/theme-slots.test.tsxruns5,175 bytessrc/__tests__/theme-ssr.test.tsxruns8,485 bytessrc/__tests__/theme-tokens.test.tsxruns3,764 bytessrc/__tests__/ui-source.test.tsxruns1,898 bytessrc/__tests__/use-network-blocker-early.test.tsxruns8,839 bytessrc/__tests__/vendor-options.test.tsxruns23,115 bytessrc/aggregate-components.tsxruns3,611 bytessrc/chunk-warming.tsruns4,901 bytessrc/component-hooks/__tests__/use-consent-dialog-trigger.test.tsxruns3,352 bytessrc/component-hooks/__tests__/use-consent-gate.test.tsxruns7,699 bytessrc/component-hooks/__tests__/use-consent-labels.test.tsxruns1,972 bytessrc/component-hooks/__tests__/use-consent-text-direction.test.tsxruns1,441 bytessrc/component-hooks/__tests__/use-headless-consent-ui.test.tsxruns5,581 bytessrc/component-hooks/__tests__/use-translations.test.tsxruns5,770 bytessrc/component-hooks/__tests__/use-vendors-listed-under.test.tsxruns2,653 bytessrc/component-hooks/use-consent-gate.tsruns6,410 bytessrc/component-hooks/use-consent-labels.tsruns1,533 bytessrc/component-hooks/use-consent-text-direction.tsruns936 bytessrc/component-hooks/use-headless-consent-ui.tsruns4,452 bytessrc/component-hooks/use-headless-iab-consent-ui.tsruns2,338 bytessrc/component-hooks/use-panel-trigger.tsruns1,756 bytessrc/component-hooks/use-translations.tsruns544 bytessrc/component-hooks/use-vendors-listed-under.tsruns1,535 bytessrc/components/__tests__/active-ui-transitions.e2e.test.tsxruns12,835 bytessrc/components/__tests__/consent-flow.e2e.test.tsxruns15,825 bytessrc/components/__tests__/models-prop.e2e.test.tsxruns6,444 bytessrc/components/__tests__/no-policy-surfaces.test.tsxruns5,205 bytessrc/components/__tests__/none-model-surfaces.test.tsxruns5,906 bytessrc/components/__tests__/theme-regressions.test.tsxruns10,320 bytessrc/components/__tests__/theme-slot-contract.test.tsxruns4,792 bytessrc/components/__tests__/ui-source-tracking.e2e.test.tsxruns7,167 bytessrc/components/consent-gate/__tests__/consent-gate-placeholder.test.tsxruns8,067 bytessrc/components/consent-gate/__tests__/consent-gate-renders.test.tsxruns1,774 bytessrc/components/consent-gate/__tests__/frame-deprecation.test.tsxruns1,676 bytessrc/components/consent-gate/atoms.tsxruns3,205 bytessrc/components/consent-gate/consent-gate.tsxruns1,826 bytessrc/components/consent-gate/frame.tsxruns2,932 bytessrc/components/consent-gate/index.tsruns1,331 bytessrc/components/consent-gate/types.tsruns1,217 bytessrc/components/consent-preferences-link/__tests__/consent-preferences-link.test.tsxruns3,513 bytessrc/components/consent-preferences-link/consent-preferences-link.tsxruns1,460 bytessrc/components/consent-preferences-link/index.tsruns111 bytessrc/components/iab-panel/__tests__/features-section.test.tsxruns5,408 bytessrc/components/iab-panel/__tests__/preference-center.test.tsxruns11,894 bytessrc/components/iab-panel/__tests__/purpose-item.test.tsxruns2,829 bytessrc/components/iab-panel/__tests__/purposes-tab.test.tsxruns6,425 bytessrc/components/iab-panel/__tests__/vendors-tab.test.tsxruns15,776 bytessrc/components/iab-panel/atoms/ad-tech-provider-section.tsxruns4,915 bytessrc/components/iab-panel/atoms/card.tsxruns2,703 bytessrc/components/iab-panel/atoms/content.tsxruns904 bytessrc/components/iab-panel/atoms/feature-item.tsxruns5,826 bytessrc/components/iab-panel/atoms/footer.tsxruns3,092 bytessrc/components/iab-panel/atoms/header.tsxruns2,794 bytessrc/components/iab-panel/atoms/overlay.tsxruns2,290 bytessrc/components/iab-panel/atoms/purpose-item.tsxruns19,729 bytessrc/components/iab-panel/atoms/root.tsxruns5,055 bytessrc/components/iab-panel/atoms/stack-item.tsxruns6,298 bytessrc/components/iab-panel/atoms/tabs.tsxruns2,385 bytessrc/components/iab-panel/atoms/vendor-list.tsxruns25,976 bytessrc/components/iab-panel/hooks/use-display-model.tsruns885 bytessrc/components/iab-panel/hooks/use-gvl-data.tsruns882 bytessrc/components/iab-panel/iab-panel.tsxruns31,210 bytessrc/components/iab-panel/index.tsruns4,382 bytessrc/components/iab-panel/types.tsruns335 bytessrc/components/iab-panel/use-iab-translations.tsruns4,174 bytessrc/components/iab-prompt/__tests__/iab-consent-banner.test.tsxruns8,989 bytessrc/components/iab-prompt/atoms/button-group.tsxruns1,318 bytessrc/components/iab-prompt/atoms/card.tsxruns1,873 bytessrc/components/iab-prompt/atoms/description.tsxruns806 bytessrc/components/iab-prompt/atoms/footer.tsxruns1,263 bytessrc/components/iab-prompt/atoms/header.tsxruns1,285 bytessrc/components/iab-prompt/atoms/overlay.tsxruns2,155 bytessrc/components/iab-prompt/atoms/root.tsxruns5,129 bytessrc/components/iab-prompt/atoms/title.tsxruns743 bytessrc/components/iab-prompt/iab-prompt.tsxruns9,303 bytessrc/components/iab-prompt/index.tsruns4,064 bytessrc/components/iab/__tests__/e2e-setup.tsruns8,010 bytessrc/components/iab/__tests__/fixtures/mock-consent-state.tsruns10,172 bytessrc/components/iab/__tests__/iab-banner.e2e.test.tsxruns7,295 bytessrc/components/iab/__tests__/iab-consent-flow.e2e.test.tsxruns7,899 bytessrc/components/iab/__tests__/iab-events.e2e.test.tsxruns11,593 bytessrc/components/iab/__tests__/iab-gvl.e2e.test.tsxruns7,389 bytessrc/components/iab/__tests__/iab-preference-center.e2e.test.tsxruns2,003 bytessrc/components/iab/__tests__/iab-storage.e2e.test.tsxruns9,253 bytessrc/components/iab/__tests__/iab-stub.e2e.test.tsxruns7,809 bytessrc/components/iab/__tests__/iab-tcfapi.e2e.test.tsxruns10,600 bytessrc/components/iab/__tests__/msw-handlers.tsruns1,661 bytessrc/components/panel-link/index.tsruns137 bytessrc/components/panel-trigger/__tests__/consent-dialog-trigger-devtools-toolbar.test.tsxruns1,786 bytessrc/components/panel-trigger/__tests__/consent-dialog-trigger-devtools.test.tsxruns4,569 bytessrc/components/panel-trigger/__tests__/consent-dialog-trigger-rights.test.tsxruns8,140 bytessrc/components/panel-trigger/__tests__/consent-dialog-trigger-toolbar-loading.test.tsxruns2,013 bytessrc/components/panel-trigger/__tests__/consent-dialog-trigger-toolbar.test.tsxruns10,265 bytessrc/components/panel-trigger/__tests__/panel-trigger.type-test.tsxruns877 bytessrc/components/panel-trigger/__tests__/trigger-disable-animation.test.tsxruns1,919 bytessrc/components/panel-trigger/atoms/button.tsxruns4,035 bytessrc/components/panel-trigger/atoms/icon.tsxruns2,558 bytessrc/components/panel-trigger/atoms/root.tsxruns4,517 bytessrc/components/panel-trigger/atoms/text.tsxruns1,368 bytessrc/components/panel-trigger/atoms/toolbar.tsxruns12,550 bytessrc/components/panel-trigger/atoms/trigger-icons.tsxruns2,864 bytessrc/components/panel-trigger/index.tsruns896 bytessrc/components/panel-trigger/panel-trigger-toolbar.tsxruns2,952 bytessrc/components/panel-trigger/panel-trigger.tsxruns6,135 bytessrc/components/panel-trigger/toolbar-loader.tsruns1,716 bytessrc/components/panel-trigger/types.tsruns5,784 bytessrc/components/panel-trigger/use-draggable.tsruns6,701 bytessrc/components/panel/atoms/card.tsxruns8,911 bytessrc/components/panel/atoms/overlay.tsxruns4,321 bytessrc/components/panel/atoms/root.tsxruns10,499 bytessrc/components/panel/index.tsruns4,256 bytessrc/components/panel/panel.tsxruns4,325 bytessrc/components/preferences/__tests__/category-order.test.tsxruns1,914 bytessrc/components/preferences/__tests__/policy-actions.test.tsxruns8,133 bytessrc/components/preferences/__tests__/restriction-notice.test.tsxruns3,334 bytessrc/components/preferences/__tests__/vendor-list.test.tsxruns14,711 bytessrc/components/preferences/atoms/accordion.tsxruns11,585 bytessrc/components/preferences/atoms/button.tsxruns3,326 bytessrc/components/preferences/atoms/footer.tsxruns1,836 bytessrc/components/preferences/atoms/root.tsxruns4,947 bytessrc/components/preferences/atoms/vendor-list.tsxruns7,580 bytessrc/components/preferences/index.tsruns5,019 bytessrc/components/preferences/policy-actions.tsxruns2,709 bytessrc/components/preferences/preferences.tsxruns1,649 bytessrc/components/preferences/types.tsruns1,689 bytessrc/components/prompt/__tests__/consent-banner-compose.test.tsxruns8,816 bytessrc/components/prompt/__tests__/consent-banner-footer-layout.test.tsxruns2,932 bytessrc/components/prompt/__tests__/consent-banner-hit-area.test.tsxruns4,227 bytessrc/components/prompt/__tests__/consent-banner-notice.test.tsxruns6,470 bytessrc/components/prompt/__tests__/consent-banner-policy-ordering.test.tsxruns6,675 bytessrc/components/prompt/__tests__/consent-banner-variants.test.tsxruns6,329 bytessrc/components/prompt/__tests__/customize-warming.test.tsxruns4,492 bytessrc/components/prompt/__tests__/policy-actions.test.tsxruns8,640 bytessrc/components/prompt/__tests__/presentation-behavior.test.tsxruns3,953 bytessrc/components/prompt/atoms/early-tap-script.tsxruns2,827 bytessrc/components/prompt/atoms/overlay.tsxruns3,617 bytessrc/components/prompt/atoms/root.tsxruns12,779 bytessrc/components/prompt/components.tsxruns17,429 bytessrc/components/prompt/error-boundary.tsxruns2,396 bytessrc/components/prompt/index.tsruns5,281 bytessrc/components/prompt/policy-actions.tsxruns2,761 bytessrc/components/prompt/prompt.tsxruns12,043 bytessrc/components/prompt/surface-context.tsruns1,526 bytessrc/components/prompt/use-banner-copy.tsruns1,019 bytessrc/components/shared/__tests__/deferred-surface-styles.test.tsxruns5,305 bytessrc/components/shared/__tests__/iab-surface-styles.test.tsxruns6,879 bytessrc/components/shared/__tests__/streamed-surface.test.tsruns1,622 bytessrc/components/shared/__tests__/surface-styles.test.tsxruns4,716 bytessrc/components/shared/dialog-sheets.tsruns490 bytessrc/components/shared/first-paint-sheets.tsruns355 bytessrc/components/shared/iab-dialog-sheets.tsruns441 bytessrc/components/shared/iab-first-paint-sheets.tsruns363 bytessrc/components/shared/libs/__tests__/slot.test.tsxruns1,880 bytessrc/components/shared/libs/compose-refs.tsruns1,205 bytessrc/components/shared/libs/polymorphic.tsruns600 bytessrc/components/shared/libs/recursive-clone-children.tsxruns1,772 bytessrc/components/shared/libs/slot.tsxruns2,828 bytessrc/components/shared/libs/use-controllable-state.tsruns728 bytessrc/components/shared/policy-actions.tsxruns3,247 bytessrc/components/shared/primitives/box.tsxruns2,291 bytessrc/components/shared/primitives/button.tsxruns12,180 bytessrc/components/shared/primitives/button.types.tsruns1,496 bytessrc/components/shared/primitives/legal-links/index.tsxruns4,492 bytessrc/components/shared/streamed-surface.tsxruns4,244 bytessrc/components/shared/surface-styles.tsxruns7,425 bytessrc/components/shared/ui/__tests__/branding.test.tsxruns8,887 bytessrc/components/shared/ui/__tests__/primitives.test.tsxruns31,396 bytessrc/components/shared/ui/accordion/accordion.tsxruns12,031 bytessrc/components/shared/ui/accordion/accordion.types.tsruns420 bytessrc/components/shared/ui/accordion/index.tsruns64 bytessrc/components/shared/ui/animated-collapse/animated-collapse.tsxruns6,795 bytessrc/components/shared/ui/animated-collapse/index.tsruns122 bytessrc/components/shared/ui/branding.tsxruns4,381 bytessrc/components/shared/ui/button/button.tsxruns5,175 bytessrc/components/shared/ui/button/button.types.tsruns1,853 bytessrc/components/shared/ui/button/index.tsruns58 bytessrc/components/shared/ui/collapsible/collapsible.tsxruns5,638 bytessrc/components/shared/ui/collapsible/index.tsruns31 bytessrc/components/shared/ui/dialog/dialog.tsxruns7,608 bytessrc/components/shared/ui/dialog/index.tsruns26 bytessrc/components/shared/ui/icon.tsxruns981 bytessrc/components/shared/ui/logo.tsxruns3,282 bytessrc/components/shared/ui/preference-item/index.tsruns35 bytessrc/components/shared/ui/preference-item/preference-item.tsxruns11,843 bytessrc/components/shared/ui/switch/index.tsruns163 bytessrc/components/shared/ui/switch/switch.tsxruns3,592 bytessrc/components/shared/ui/switch/switch.types.tsruns321 bytessrc/components/shared/ui/tabs/index.tsruns24 bytessrc/components/shared/ui/tabs/tabs.tsxruns8,212 bytessrc/consent-gate.tsruns286 bytessrc/consent-theme.tsxruns2,067 bytessrc/context.tsruns1,982 bytessrc/context/consent-tracking-context.tsruns1,602 bytessrc/context/iab-context-value.tsruns1,576 bytessrc/context/index.tsruns387 bytessrc/context/theme-context.tsruns2,019 bytessrc/declaration.d.tsruns112 bytessrc/devtools-launcher.tsruns3,227 bytessrc/devtools.tsxruns9,710 bytessrc/draft-context.tsruns4,222 bytessrc/draft.tsxruns8,142 bytessrc/event-dispatcher.tsruns1,932 bytessrc/external-iab-context.tsxruns4,667 bytessrc/gpp.tsxruns2,379 bytessrc/headless.tsruns2,089 bytessrc/hooks.tsruns17,642 bytessrc/hooks/__tests__/use-color-scheme.test.tsxruns3,410 bytessrc/hooks/__tests__/use-focus-trap.test.tsxruns5,930 bytessrc/hooks/__tests__/use-late-entry.test.tsxruns3,188 bytessrc/hooks/__tests__/use-scroll-lock.test.tsxruns10,348 bytessrc/hooks/__tests__/use-styles.test.tsxruns1,709 bytessrc/hooks/__tests__/use-theme.test.tsxruns2,384 bytessrc/hooks/use-color-scheme.tsruns531 bytessrc/hooks/use-committed-ref.tsruns1,306 bytessrc/hooks/use-component-config.tsruns2,640 bytessrc/hooks/use-focus-trap.tsruns1,050 bytessrc/hooks/use-headless-iab-consent-ui.tsruns5,252 bytessrc/hooks/use-iab-manager.tsruns1,586 bytessrc/hooks/use-iab-policy-guard.tsruns2,713 bytessrc/hooks/use-is-hydrated.tsruns535 bytessrc/hooks/use-late-entry.tsruns1,203 bytessrc/hooks/use-reduced-motion.tsruns1,584 bytessrc/hooks/use-scroll-lock.tsruns770 bytessrc/hooks/use-text-direction.tsruns490 bytessrc/hooks/use-theme.tsruns2,234 bytessrc/iab-context.tsxruns11,225 bytessrc/iab-dialog-deferred.tsxruns6,260 bytessrc/iab.tsruns1,245 bytessrc/iab/styles.cssasset367 bytessrc/iab/styles.tw3.cssasset447 bytessrc/index-parts/consent-banner.tsruns376 bytessrc/index-parts/consent-dialog-link.tsruns359 bytessrc/index-parts/consent-dialog-trigger.tsruns397 bytessrc/index-parts/consent-dialog.tsruns369 bytessrc/index-parts/consent-gate.tsruns355 bytessrc/index-parts/core.tsruns355 bytessrc/index-parts/draft.tsruns383 bytessrc/index-parts/event-dispatcher.tsruns355 bytessrc/index-parts/frame.tsruns355 bytessrc/index-parts/hooks.tsruns1,178 bytessrc/index-parts/hosted.tsruns334 bytessrc/index-parts/module-hooks.tsruns406 bytessrc/index-parts/offline.tsruns353 bytessrc/index-parts/presets.tsruns345 bytessrc/index-parts/provider.tsruns344 bytessrc/index-parts/theme.tsruns392 bytessrc/index-parts/translations.tsruns368 bytessrc/index.tsruns4,323 bytessrc/kernel-selector.tsruns4,490 bytessrc/modes.tsruns1,126 bytessrc/module-hooks.tsruns632 bytessrc/module-hooks/iframe-blocker.tsruns9,119 bytessrc/module-hooks/network-blocker.tsruns3,707 bytessrc/module-hooks/network-hold.tsruns4,245 bytessrc/module-hooks/persistence.tsruns1,364 bytessrc/module-hooks/script-loader.tsruns2,260 bytessrc/module-hooks/shared.tsruns423 bytessrc/panel-link.tsruns108 bytessrc/panel-trigger.tsruns669 bytessrc/panel.tsruns628 bytessrc/postcss-tailwind3.tsruns610 bytessrc/preferences.tsruns641 bytessrc/primitives.tsruns549 bytessrc/primitives/accordion.tsruns51 bytessrc/primitives/button.tsruns48 bytessrc/primitives/collapsible.tsruns53 bytessrc/primitives/dialog.tsruns48 bytessrc/primitives/preference-item.tsruns57 bytessrc/primitives/switch.tsruns48 bytessrc/primitives/tabs.tsruns46 bytessrc/prompt.tsruns129 bytessrc/provider.tsxruns40,384 bytessrc/server/fetch-ssr-data.test.tsruns7,426 bytessrc/server/fetch-ssr-data.tsruns8,283 bytessrc/server/headers.test.tsruns5,709 bytessrc/server/headers.tsruns2,764 bytessrc/server/index.tsruns1,058 bytessrc/server/init-cache-key.test.tsruns1,922 bytessrc/server/init-cache-key.tsruns1,276 bytessrc/server/normalize-url.test.tsruns5,555 bytessrc/server/normalize-url.tsruns3,195 bytessrc/server/types.tsruns1,961 bytessrc/styles.cssasset282 bytessrc/styles.tw3.cssasset403 bytessrc/test-setup.browser.tsruns1,689 bytessrc/theme-provider.tsxruns701 bytessrc/transports/hosted.tsruns2,345 bytessrc/transports/manifest.tsruns3,304 bytessrc/transports/offline.tsruns416 bytessrc/types/index.tsruns77 bytessrc/types/manager.tsruns505 bytessrc/types/slots.tsruns375 bytessrc/types/theme/index.tsruns31 bytessrc/types/theme/style-types.tsruns1,764 bytessrc/ui-config-context.tsruns1,130 bytessrc/utils/__tests__/deferred-module.test.tsxruns7,007 bytessrc/utils/__tests__/theme-utils.test.tsruns721 bytessrc/utils/cn.tsruns281 bytessrc/utils/default-translation-config.tsruns274 bytessrc/utils/deferred-module.tsxruns3,709 bytessrc/utils/index.tsruns131 bytessrc/utils/merge-slot-props.tsruns2,033 bytessrc/utils/merge-styles.tsruns670 bytessrc/utils/theme-utils.tsruns1,571 bytesstyles.cssasset29 bytesstyles.tw3.cssasset33 bytestsconfig.jsonasset1,415 bytestsconfig.type-tests.jsonasset231 bytesvitest.config.tsruns6,952 bytes
Read SKILL.md
# c15t with @c15t/react
The Markdown under `./docs` matches the installed version. Read it before writing code: v3 renamed most v2 APIs, so remembered examples are usually wrong.
## Before writing code
1. Find the framework, router, rendering mode (server, static, cached or single-page) and host in the project. Check the framework config and route files for settings that prerender or cache pages.
2. Pick the matching row in [Choose your setup](./docs/concepts/choose-your-setup.md).
3. Follow that guide from start to finish: [React](./docs/frameworks/react/quickstart.md).
## Rules
- Install with `npm install c15t` and import `c15t/react`. Keep every c15t package on the same release. New apps install `c15t` and import its framework subpath. An app that already depends on this scoped package can keep importing from it, but should not install both.
- The backend URL comes from the user's Inth project or self-hosted backend. It is public configuration. Never invent one; ask for it or read it from the environment.View the complete source on GitHubc15t-scripts
When your agent uses it
Set up, customize or debug c15t consent management with @c15t/scripts. Use when the project imports the deprecated `@c15t/scripts` vendor helpers, or loads analytics, pixels, tag managers or embeds that must wait for consent, or when a task mentions a cookie banner, consent dialog, GDPR or CCPA prompts, blocking analytics until consent, Google Consent Mode or IAB TCF.
What it loads into context
Frontmatter
93 tokensAlways available to the agent
SKILL.md
587 tokensWhen the skill is activated
Reference documents
56,113 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Before writing code
- Rules
- Customize with the smallest change
- Finish with a check
Scripts executed separately
__tests__/compatibility.fixture.ts__tests__/compatibility.test.tsbuild-compat.tspackage.jsonvitest.config.ts
Files
AGENTS.mddoc28,719 bytesCHANGELOG.mddoc36,754 bytesREADME.mddoc6,555 bytesSKILL.mdcore2,637 bytes__tests__/compatibility.fixture.tsruns724 bytes__tests__/compatibility.test.tsruns1,768 bytesbuild-compat.tsruns1,529 bytesdocs/README.mddoc28,044 bytesdocs/integrations/building-integrations.mddoc9,529 bytesdocs/integrations/cloudflare-zaraz.mddoc14,962 bytesdocs/integrations/google-maps.mddoc13,643 bytesdocs/integrations/google-tag-manager.mddoc22,880 bytesdocs/integrations/google-tag.mddoc16,949 bytesdocs/integrations/intercom.mddoc12,486 bytesdocs/integrations/meta-pixel.mddoc13,852 bytesdocs/integrations/openai-pixel.mddoc14,623 bytesdocs/integrations/overview.mddoc30,375 bytespackage.jsonruns1,179 bytesreadme.jsonasset831 bytestsconfig.jsonasset301 bytesvitest.config.tsruns153 bytes
Read SKILL.md
# c15t with @c15t/scripts
The Markdown under `./docs` matches the installed version. Read it before writing code: v3 renamed most v2 APIs, so remembered examples are usually wrong.
## Before writing code
1. Find the framework, router, rendering mode (server, static, cached or single-page) and host in the project. Check the framework config and route files for settings that prerender or cache pages.
2. Pick the matching row in [Choose your setup](./docs/concepts/choose-your-setup.md).
## Rules
- Install with `npm install @c15t/integrations` alongside `c15t`, replacing the deprecated `@c15t/scripts`. Keep every c15t package on the same release.
- The backend URL comes from the user's Inth project or self-hosted backend. It is public configuration. Never invent one; ask for it or read it from the environment.
- Register analytics, pixels and embeds through c15t and remove the vendor's own loader or plugin. With a bundler, use `@c15t/integrations` helpers and `ConsentGate`. On a plain HTML page, change the vendor's `<script>` to `type="text/plain"` with `data-c15t-category`. A banner does not block code loaded elsewhere.View the complete source on GitHubSkills included
- c15t-browser
- c15t
- c15t-core
- c15t-nextjs
- c15t-react
- c15t-scripts
Repository facts
- License
- Apache-2.0
- Created
- Jan 13, 2025
- Last pushed
- Nov 5, 2026
- Forks
- 269
- Open issues
- 7
- Project activity
- Active
Rank over the last 12 weeks
Now #529 · best #392 · down 69 in 30 days
- #516 on Oct 31
- #518 on Nov 1
- #524 on Nov 2
- #526 on Nov 3
- #528 from Nov 4 to Nov 5
- #529 since Nov 6
68 earlier periods
- #370 on Aug 2
- #387 on Aug 6
- #380 on Aug 9
- #392 on Aug 10
- #393 on Aug 11
- #386 on Aug 12
- #392 on Aug 13
- #394 on Aug 14
- #392 on Aug 15
- #399 on Aug 16
- #409 on Aug 19
- #406 on Aug 21
- #412 on Aug 23
- #409 on Aug 24
- #414 on Aug 25
- #413 on Aug 26
- #422 on Aug 28
- #416 on Aug 29
- #427 on Sep 1
- #425 on Sep 3
- #414 on Sep 4
- #429 on Sep 7
- #433 from Sep 8 to Sep 9
- #434 from Sep 10 to Sep 11
- #431 on Sep 12
- #444 on Sep 14
- #441 on Sep 15
- #446 on Sep 16
- #440 on Sep 17
- #448 on Sep 18
- #447 on Sep 20
- #450 on Sep 21
- #455 on Sep 22
- #447 on Sep 23
- #441 on Sep 24
- #440 on Sep 25
- #435 on Sep 26
- #448 on Sep 27
- #456 on Sep 28
- #461 on Sep 29
- #459 on Sep 30
- #456 on Oct 1
- #451 on Oct 2
- #440 on Oct 3
- #434 on Oct 4
- #446 on Oct 5
- #456 on Oct 6
- #460 on Oct 7
- #469 on Oct 8
- #470 on Oct 9
- #464 on Oct 10
- #466 on Oct 11
- #472 on Oct 12
- #467 on Oct 13
- #471 on Oct 14
- #473 on Oct 15
- #478 on Oct 16
- #468 on Oct 17
- #472 on Oct 18
- #486 from Oct 19 to Oct 20
- #490 on Oct 21
- #487 on Oct 22
- #480 on Oct 23
- #469 on Oct 24
- #508 on Oct 25
- #513 on Oct 28
- #514 on Oct 29
- #515 on Oct 30
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 3, 2026
- No broad tool permissions
- 2 dangerous shell commandsin 2 files: core/src/__tests__/production-warnings.test.ts:56 core/src/transports/manifest-browser-resolve.ts:35
- 4,025 network referencesin 240 files: core/src/__tests__/transport.test.ts:51 core/src/__tests__/build.test.ts:43 core/src/modules/script-loader/__tests__/lifecycle-regressions.test.ts:37 and 237 more
- 2 obfuscation signalsin 2 files: core/src/libs/prefetch/prefetch.ts:363 core/src/runtime/script-server-start.ts:231
- No instruction overrides
- 1,501 executable scriptsin 1,501 files: browser/package.json:1 browser/rslib.config.ts:1 browser/scripts/build-styles.ts:1 and 1,498 more
- 86 references to secretsin 29 files: core/CHANGELOG.md:111 core/src/modules/persistence/__tests__/subject-id.test.ts:71 nextjs/CHANGELOG.md:63 and 26 more
- No requests to vote in Hot
Show all 5,616 signals by file
packages/browser/AGENTS.md
- Network accessline 22
[Documentation index](https://c15t.com/docs/llms.txt) · [Full Markdown context](https://c15t.com/llms-full.txt). Prefer the index and individual pages for focused tasks.
packages/browser/CHANGELOG.md
- Network accessline 346
self-hosted backend records it in a new `consent.addtlConsent` column. Run the backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 347
backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. The backend keeps serving the last list it loaded when that endpoint fails. - Network accessline 348
`https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 424
self-hosted backend records it in a new `consent.addtlConsent` column. Run the backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 425
backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. The backend keeps serving the last list it loaded when that endpoint fails. - Network accessline 426
`https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 437
c15t v3 is stable and published under the `latest` tag. See the [3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 438
[3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 1095
<script src="https://cdn.jsdelivr.net/npm/@c15t/browser@alpha/dist/c15t.js" data-disable-animation></script> - Network accessline 1309
See [keep open tabs in step](https://c15t.com/docs/guides/consent-state#keep-open-tabs-in-step).
packages/browser/README.md
- Network accessline 1
<p align="center"> <a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fbrowser" target="_blank" rel="noopener noreferrer"> - Network accessline 2
<a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fbrowser" target="_blank" rel="noopener noreferrer"> - Access to secretsline 10
[Credential-related source omitted] - Network accessline 12
<p> <a href="https://www.npmjs.com/package/@c15t/browser"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/%40c15t%2Fbrowser.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/%40c15t%2Fb - Network accessline 13
<a href="https://www.npmjs.com/package/@c15t/browser"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/%40c15t%2Fbrowser.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/%40c15t%2Fbrows - Network accessline 14
<a href="https://github.com/c15t/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/stars.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15t/c15t/stars.svg?varian - Network accessline 15
<a href="https://github.com/c15t/c15t/blob/main/LICENSE.md"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/license.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15 - Network accessline 16
<a href="https://c15t.link/discord"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/discord/1312171102268690493.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/discord/1312171102268690493.svg - Network accessline 17
<a href="https://skills.sh/c15t/skills/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/skills/c15t/skills/c15t.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/skills/c15t/skills/c15t.sv - Network accessline 18
<a href="https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fbrowser"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/badge/Made%20By-Inth-ffc803.svg?color=ffc80 - Network accessline 23
c15t is used by [2,100+ sites](https://www.wappalyzer.com/technologies/cookie-compliance/c15t/), including expo.dev, zed.dev, unkey.dev, mintlify.com, and sazabi.com. - Network accessline 37
- A page where you can add a `<script>` tag - An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend - Network accessline 38
- An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend - Network accessline 45
<script src="https://cdn.jsdelivr.net/npm/@c15t/browser/dist/c15t.js" - Network accessline 46
src="https://cdn.jsdelivr.net/npm/@c15t/browser/dist/c15t.js" - Network accessline 63
2. Change vendor tags to `type="text/plain"` with `data-c15t-category="measurement"` so they load when the resolved policy allows that category 3. Link to `#c15t-preferences` so visitors can reopen the preference dialog 4. For every attribu - Network accessline 65
4. For every attribute and method, see the [HTML docs](https://c15t.com/docs/frameworks/html/attributes-and-api) - Network accessline 78
c15t needs a backend to serve policies and keep consent records. [Inth](https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fbrowser) runs it for you. It stores every choice with its region and pol - Network accessline 86
See the [documentation](https://c15t.com/docs/frameworks/html/quickstart) for guides, API reference, and examples. - Network accessline 93
| `c15t.local.js` | Local mode, for development and tests: choices stay in the browser, with local policy rules, and c15t keeps no server-side record of consent. Before 3.2.0 this file was `c15t.offline.js` | | `c15t.headless.js` | The runt - Network accessline 94
| `c15t.headless.js` | The runtime without UI, for your own banner. Can inline or fetch the backend's cacheable `/manifest` | | `c15t.iab.js` | IAB TCF 2.4. Configure `iab` with your registered CMP ID and vendor list. See the [IAB example]( - Network accessline 95
| `c15t.iab.js` | IAB TCF 2.4. Configure `iab` with your registered CMP ID and vendor list. See the [IAB example](https://c15t.com/docs/frameworks/html/iab) | - Network accessline 103
On the web, every page of the [c15t docs](https://c15t.com/docs) has a Markdown version, and [llms.txt](https://c15t.com/docs/llms.txt) lists them all. Install the c15t agent skills with `npx skills add c15t/skills`. - Network accessline 107
- Join our [Discord community](https://c15t.link/discord) - Network accessline 108
- Open an issue on our [GitHub repository](https://github.com/c15t/c15t/issues) - Network accessline 109
- Visit [inth.com](https://inth.com) and use the chat widget - Network accessline 114
- Read the [contribution guidelines](https://c15t.com/docs/oss/contributing) before you open a pull request - Network accessline 115
- Follow the [code of conduct](https://c15t.com/docs/oss/code-of-conduct) - Network accessline 119
Do not open a public issue for a security vulnerability. Report it privately through [GitHub's vulnerability reporting](https://github.com/c15t/c15t/security/advisories/new). We examine every valid report. - Network accessline 127
[Apache License 2.0](https://github.com/c15t/c15t/blob/main/LICENSE.md) - Network accessline 131
**Built by [Inth](https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fbrowser)**
packages/browser/docs/integrations/cloudflare-zaraz.md
- Network accessline 40
after the first synchronization. DOM-ready, timer and click triggers you add in Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 41
Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) and [pageview settings](https://developers.cloudflare.com/zaraz/reference/setti - Network accessline 42
[purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 43
and [pageview settings](https://developers.cloudflare.com/zaraz/reference/settings/). - Network accessline 73
for tools that Zaraz already runs, including a separate `@c15t/integrations` helper for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) - Network accessline 74
for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) once. - Network accessline 75
[Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) - Network accessline 80
Complete your [framework quickstart](https://c15t.com/docs/frameworks) first. Keep its Inth - Network accessline 106
keeps passing only `state`. App Router, Pages Router and static export all read the same file. See [Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts). - Network accessline 108
[Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts). - Network accessline 112
Import the configuration into your root route and pass it to the existing `ConsentRoot` as a top-level prop. Keep the loader from the [TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 114
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 123
A server function's return value must be serializable, and script configurations carry callbacks. See [TanStack Start scripts](https://c15t.com/docs/frameworks/tanstack-start/scripts). - Network accessline 125
[TanStack Start scripts](https://c15t.com/docs/frameworks/tanstack-start/scripts). - Network accessline 138
`mode` is the `manifest()` value from the [React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 139
[React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 141
[React scripts and embeds](https://c15t.com/docs/frameworks/react/scripts). - Network accessline 159
`nuxt.config.ts`, which reaches the browser as JSON and drops the vendor callbacks. Write the vendor IDs into `consent-scripts.ts`. See [Nuxt scripts and embeds](https://c15t.com/docs/frameworks/nuxt/scripts). - Network accessline 161
[Nuxt scripts and embeds](https://c15t.com/docs/frameworks/nuxt/scripts). - Network accessline 178
script loader when the app mounts, after it has applied the visitor's stored choice. Do not also call `createScriptLoader` from a component. See [Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts). - Network accessline 180
[Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts). - Network accessline 184
Add the scripts to the client entrypoint from the [Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 185
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 218
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart). - Network accessline 223
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 224
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart).
packages/browser/gtm-template/README.md
- Network accessline 8
The `googleTagManager` helper stays the recommended setup. The template exists for the gallery listing and for sites that manage scripts only through GTM. See the [Google Tag Manager docs](https://c15t.com/docs/integrations/google-tag-manag - Network accessline 10
the [Google Tag Manager docs](https://c15t.com/docs/integrations/google-tag-manager#use-the-gtm-template-instead). - Network accessline 29
The gallery reads templates from a public GitHub repository with `template.tpl`, `metadata.yaml` and a `LICENSE` at its root. [`inthhq/c15t-gtm-template`](https://github.com/inthhq/c15t-gtm-template) is - Network accessline 30
`template.tpl`, `metadata.yaml` and a `LICENSE` at its root. [`inthhq/c15t-gtm-template`](https://github.com/inthhq/c15t-gtm-template) is that repository. Keep it as a copy of this directory: - Network accessline 31
[`inthhq/c15t-gtm-template`](https://github.com/inthhq/c15t-gtm-template) is - Network accessline 40
homepage: https://c15t.com - Network accessline 41
documentation: https://c15t.com/docs/integrations/google-tag-manager - Network accessline 50
The template was first submitted from the [standalone gallery](https://tagmanager.google.com/gallery/) through - Network accessline 51
[standalone gallery](https://tagmanager.google.com/gallery/) through
packages/browser/gtm-template/template.tpl
- Network accessline 3
By creating or modifying this file you agree to Google Tag Manager's Community Template Gallery Developer Terms of Service available at https://developers.google.com/tag-manager/gallery-tos (or such other URL as - Network accessline 4
Template Gallery Developer Terms of Service available at https://developers.google.com/tag-manager/gallery-tos (or such other URL as Google may provide), as modified from time to time. - Network accessline 5
https://developers.google.com/tag-manager/gallery-tos (or such other URL as - Network accessline 46
"displayName": "c15t script URL", "simpleValueType": true, "valueHint": "https://your-project.inth.app/c15t.js", - Network accessline 47
"simpleValueType": true, "valueHint": "https://your-project.inth.app/c15t.js", "valueValidators": [ - Network accessline 48
"valueHint": "https://your-project.inth.app/c15t.js", - Network accessline 54
"type": "REGEX", "args": [ "^https://([a-z0-9-]+\\.inth\\.app/c15t(\\.headless|\\.iab)?|cdn\\.jsdelivr\\.net/npm/@c15t/browser@[0-9]+\\.[0-9]+\\.[0-9]+(-[0-9A-Za-z.-]+)?/dist/c15t(\\.local|\\.offline|\\.headless|\\.iab)?)\ - Network accessline 55
"args": [ "^https://([a-z0-9-]+\\.inth\\.app/c15t(\\.headless|\\.iab)?|cdn\\.jsdelivr\\.net/npm/@c15t/browser@[0-9]+\\.[0-9]+\\.[0-9]+(-[0-9A-Za-z.-]+)?/dist/c15t(\\.local|\\.offline|\\.headless|\\.iab)?)\\.js$" ], - Network accessline 56
"^https://([a-z0-9-]+\\.inth\\.app/c15t(\\.headless|\\.iab)?|cdn\\.jsdelivr\\.net/npm/@c15t/browser@[0-9]+\\.[0-9]+\\.[0-9]+(-[0-9A-Za-z.-]+)?/dist/c15t(\\.local|\\.offline|\\.headless|\\.iab)?)\\.js$" - Network accessline 66
} ], "help": "Your Inth project URL with /c15t.js on the end, such as https://your-project.inth.app/c15t.js. You can also load an exact version from jsDelivr, such as https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js. Ta - Network accessline 67
], "help": "Your Inth project URL with /c15t.js on the end, such as https://your-project.inth.app/c15t.js. You can also load an exact version from jsDelivr, such as https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js. Tags suc - Network accessline 68
"help": "Your Inth project URL with /c15t.js on the end, such as https://your-project.inth.app/c15t.js. You can also load an exact version from jsDelivr, such as https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js. Tags such as la - Network accessline 73
"displayName": "Backend URL", "simpleValueType": true, "valueHint": "https://your-project.inth.app", - Network accessline 74
"simpleValueType": true, "valueHint": "https://your-project.inth.app", "enablingConditions": [ - Network accessline 75
"valueHint": "https://your-project.inth.app", - Network accessline 625
{ "type": 1, "string": "https://*.inth.app/c15t*" - Network accessline 626
"type": 1, "string": "https://*.inth.app/c15t*" }, - Network accessline 627
"string": "https://*.inth.app/c15t*" - Network accessline 629
{ "type": 1, "string": "https://cdn.jsdelivr.net/npm/@c15t/browser@*" - Network accessline 630
"type": 1, "string": "https://cdn.jsdelivr.net/npm/@c15t/browser@*" } - Network accessline 631
"string": "https://cdn.jsdelivr.net/npm/@c15t/browser@*" - Network accessline 972
runCode({ loadScript: true, scriptUrl: 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', - Network accessline 973
loadScript: true, scriptUrl: 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', backendUrl: 'https://your-project.inth.app', - Network accessline 974
scriptUrl: 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', - Network accessline 975
backendUrl: 'https://your-project.inth.app', - Network accessline 979
assertThat(calls[0]).isEqualTo(['config', { backendURL: 'https://your-project.inth.app' }]); - Network accessline 981
assertThat(calls[2][1]).isEqualTo('consent'); assertThat(injected).isEqualTo( 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js'); - Network accessline 982
assertThat(injected).isEqualTo( 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js'); assertApi('gtmOnSuccess').wasCalled(); - Network accessline 983
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js'); - Network accessline 993
runCode({ loadScript: true, scriptUrl: 'https://your-project.inth.app/c15t.js', - Network accessline 994
loadScript: true, scriptUrl: 'https://your-project.inth.app/c15t.js', categoryMeasurement: true, - Network accessline 995
scriptUrl: 'https://your-project.inth.app/c15t.js', - Network accessline 1013
runCode({ loadScript: true, scriptUrl: 'https://your-project.inth.app/c15t.js', - Network accessline 1014
loadScript: true, scriptUrl: 'https://your-project.inth.app/c15t.js', waitForUpdate: '500' - Network accessline 1015
scriptUrl: 'https://your-project.inth.app/c15t.js', - Network accessline 1027
runCode({ loadScript: true, scriptUrl: 'https://your-project.inth.app/c15t.js', - Network accessline 1028
loadScript: true, scriptUrl: 'https://your-project.inth.app/c15t.js', waitForUpdate: '500' - Network accessline 1029
scriptUrl: 'https://your-project.inth.app/c15t.js', - Network accessline 1041
runCode({ loadScript: true, scriptUrl: 'https://example.com/c15t.js', - Network accessline 1042
loadScript: true, scriptUrl: 'https://example.com/c15t.js', waitForUpdate: '500' - Network accessline 1043
scriptUrl: 'https://example.com/c15t.js', - Network accessline 1056
runCode({ loadScript: true, scriptUrl: 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', - Network accessline 1057
loadScript: true, scriptUrl: 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', backendUrl: '', - Network accessline 1058
scriptUrl: 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', - Network accessline 1072
runCode({ loadScript: true, scriptUrl: 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.offline.js', - Network accessline 1073
loadScript: true, scriptUrl: 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.offline.js', backendUrl: 'https://your-project.inth.app', - Network accessline 1074
scriptUrl: 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.offline.js', - Network accessline 1075
backendUrl: 'https://your-project.inth.app', - Network accessline 1103
const mockData = { loadScript: true, scriptUrl: 'https://your-project.inth.app/c15t.js', - Network accessline 1104
loadScript: true, scriptUrl: 'https://your-project.inth.app/c15t.js', waitForUpdate: '500' - Network accessline 1105
scriptUrl: 'https://your-project.inth.app/c15t.js', - Network accessline 1131
Source: https://github.com/c15t/c15t/tree/canary/packages/browser/gtm-template
packages/browser/knip.json
packages/browser/package.json
- Executable scriptline 1
Executable file - Network accessline 30
"wordpress" ], "homepage": "https://c15t.com/docs/frameworks/html/quickstart", - Network accessline 31
], "homepage": "https://c15t.com/docs/frameworks/html/quickstart", "bugs": { - Network accessline 32
"homepage": "https://c15t.com/docs/frameworks/html/quickstart", - Network accessline 33
"bugs": { "url": "https://github.com/c15t/c15t/issues" }, - Network accessline 34
"url": "https://github.com/c15t/c15t/issues" - Network accessline 37
"repository": { "type": "git", "url": "https://github.com/c15t/c15t.git", - Network accessline 38
"type": "git", "url": "https://github.com/c15t/c15t.git", "directory": "packages/browser" - Network accessline 39
"url": "https://github.com/c15t/c15t.git",
packages/browser/readme.json
- Access to secretsline 2
[Credential-related source omitted] - Network accessline 13
"prerequisites": [ "A page where you can add a `<script>` tag", "An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" - Network accessline 14
"A page where you can add a `<script>` tag", "An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" ], - Network accessline 15
"An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" - Network accessline 19
"Paste before `</head>`, with the backend URL from your Inth project:", "", "```html\n<script\n src=\"https://cdn.jsdelivr.net/npm/@c15t/browser/dist/c15t.js\"\n data-backend-url=\"YOUR_INTH_BACKEND_URL\"\n defer\n></script>\n```", - Network accessline 20
"", "```html\n<script\n src=\"https://cdn.jsdelivr.net/npm/@c15t/browser/dist/c15t.js\"\n data-backend-url=\"YOUR_INTH_BACKEND_URL\"\n defer\n></script>\n```", "", - Network accessline 21
"```html\n<script\n src=\"https://cdn.jsdelivr.net/npm/@c15t/browser/dist/c15t.js\"\n data-backend-url=\"YOUR_INTH_BACKEND_URL\"\n defer\n></script>\n```", - Network accessline 31
"Change vendor tags to `type=\"text/plain\"` with `data-c15t-category=\"measurement\"` so they load when the resolved policy allows that category", "Link to `#c15t-preferences` so visitors can reopen the preference dialog", "For every a - Network accessline 32
"Link to `#c15t-preferences` so visitors can reopen the preference dialog", "For every attribute and method, see the [HTML docs](https://c15t.com/docs/frameworks/html/attributes-and-api)", "```js\nwindow.c15t = window.c15t || [];\nc15t. - Network accessline 33
"For every attribute and method, see the [HTML docs](https://c15t.com/docs/frameworks/html/attributes-and-api)", - Network accessline 34
"```js\nwindow.c15t = window.c15t || [];\nc15t.push(['on', 'consent', () => {\n if (c15t.has('measurement')) {\n startAnalytics();\n }\n}]);\n```" ], "docsLink": "https://c15t.com/docs/frameworks/html/quickstart", - Network accessline 35
], "docsLink": "https://c15t.com/docs/frameworks/html/quickstart", "quickStartLink": "https://c15t.com/docs/frameworks/html/quickstart", - Network accessline 36
"docsLink": "https://c15t.com/docs/frameworks/html/quickstart", - Network accessline 37
"quickStartLink": "https://c15t.com/docs/frameworks/html/quickstart", - Network accessline 38
"showCLIGeneration": false, "customSections": { "Which Script to Load": "| File | Use it for |\n| --- | --- |\n| `c15t.js` | Production, with Inth. Set `data-backend-url` to your project's backend URL |\n| `c15t.local.js` | Local mode, f - Network accessline 39
"customSections": { "Which Script to Load": "| File | Use it for |\n| --- | --- |\n| `c15t.js` | Production, with Inth. Set `data-backend-url` to your project's backend URL |\n| `c15t.local.js` | Local mode, for development and tests: cho - Network accessline 40
"Which Script to Load": "| File | Use it for |\n| --- | --- |\n| `c15t.js` | Production, with Inth. Set `data-backend-url` to your project's backend URL |\n| `c15t.local.js` | Local mode, for development and tests: choices stay in the brows
packages/browser/rslib.config.ts
- Executable scriptline 1
Executable file
packages/browser/scripts/build-styles.ts
- Executable scriptline 1
Executable file
packages/browser/scripts/copy-styles.ts
- Executable scriptline 1
Executable file
packages/browser/scripts/iab-bundle-boundary.ts
- Executable scriptline 1
Executable file
packages/browser/scripts/mode-bundle-boundary.ts
- Executable scriptline 1
Executable file
packages/browser/scripts/prune-stylesheet.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/auto-init.test.ts
- Executable scriptline 1
Executable file - Network accessline 43
const options = readScriptOptions( scriptWith({ 'data-backend-url': 'https://x.c15t.dev', - Network accessline 44
scriptWith({ 'data-backend-url': 'https://x.c15t.dev', 'data-categories': 'measurement, marketing', - Network accessline 45
'data-backend-url': 'https://x.c15t.dev', - Network accessline 56
expect(options).toEqual({ backendURL: 'https://x.c15t.dev', - Network accessline 57
backendURL: 'https://x.c15t.dev', - Network accessline 156
const { manual, options } = readPageOptions( scriptWith({ 'data-backend-url': 'https://x.c15t.dev', - Network accessline 157
scriptWith({ 'data-backend-url': 'https://x.c15t.dev', 'data-color-scheme': 'light', - Network accessline 158
'data-backend-url': 'https://x.c15t.dev', - Network accessline 167
expect(manual).toBe(false); expect(options).toEqual({ backendURL: 'https://x.c15t.dev', - Network accessline 168
expect(options).toEqual({ backendURL: 'https://x.c15t.dev', consentCategories: ['measurement'], - Network accessline 169
backendURL: 'https://x.c15t.dev',
packages/browser/src/__tests__/banner-corner.browser.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/clear-on-revocation.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/client-lifecycle.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/client.test.ts
- Executable scriptline 1
Executable file - Network accessline 335
const client = createConsentClient( { backendURL: 'https://example.test' }, - Network accessline 336
{ backendURL: 'https://example.test' }, - Network accessline 551
const iframe = document.createElement('iframe'); iframe.setAttribute('data-category', 'marketing'); iframe.setAttribute('src', 'https://example.com/embed'); - Network accessline 552
iframe.setAttribute('data-category', 'marketing'); iframe.setAttribute('src', 'https://example.com/embed'); document.body.append(iframe); - Network accessline 553
iframe.setAttribute('src', 'https://example.com/embed'); - Network accessline 557
}); await client.ready(); expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); - Network accessline 559
expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); - Network accessline 565
expect(iframe.getAttribute('src')).toBeNull(); client.processIframes(); expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); - Network accessline 566
client.processIframes(); expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); }); - Network accessline 567
expect(iframe.getAttribute('src')).toBe('https://example.com/embed');
packages/browser/src/__tests__/conformance.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/csp-nonce.browser.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/devtools.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/dialog-motion.browser.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/dialog-surface.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/esm-modes.test.ts
- Executable scriptline 1
Executable file - Network accessline 24
}; const buildOutput = { backendURL: 'https://built.example', - Network accessline 25
const buildOutput = { backendURL: 'https://built.example', snapshot: builtManifest, - Network accessline 26
backendURL: 'https://built.example', - Network accessline 42
it('reports the factory kind as the mode', () => { const client = createConsentClient({ mode: hosted({ backendURL: 'https://backend.example' }), - Network accessline 43
const client = createConsentClient({ mode: hosted({ backendURL: 'https://backend.example' }), ui: false, - Network accessline 44
mode: hosted({ backendURL: 'https://backend.example' }), - Network accessline 61
withBuildDefaults({ manifestURL: '/api/c15t/manifest' }, buildOutput) ).toEqual({ backendURL: 'https://built.example', - Network accessline 62
).toEqual({ backendURL: 'https://built.example', manifestURL: '/api/c15t/manifest', - Network accessline 63
backendURL: 'https://built.example', - Network accessline 65
}); expect( withBuildDefaults({ backendURL: 'https://own.example' }, buildOutput) - Network accessline 66
expect( withBuildDefaults({ backendURL: 'https://own.example' }, buildOutput) .backendURL - Network accessline 67
withBuildDefaults({ backendURL: 'https://own.example' }, buildOutput) - Network accessline 68
.backendURL ).toBe('https://own.example'); }); - Network accessline 69
).toBe('https://own.example'); - Network accessline 73
const mode = browserManifest( withBuildDefaults( { manifestURL: 'https://cdn.example/policy.json' }, - Network accessline 74
withBuildDefaults( { manifestURL: 'https://cdn.example/policy.json' }, buildOutput - Network accessline 75
{ manifestURL: 'https://cdn.example/policy.json' }, - Network accessline 77
) ); expect(mode.backendURL).toBe('https://built.example'); - Network accessline 78
); expect(mode.backendURL).toBe('https://built.example'); expect(mode.manifestURL).toBe('https://cdn.example/policy.json'); - Network accessline 79
expect(mode.backendURL).toBe('https://built.example'); - Network accessline 80
expect(mode.manifestURL).toBe('https://cdn.example/policy.json'); - Network accessline 95
describe('hosted() from @c15t/browser', () => { it('defaults to the backend URL the build read', () => { expect(hostedWithBuild({}, 'https://built.example').backendURL).toBe( - Network accessline 96
it('defaults to the backend URL the build read', () => { expect(hostedWithBuild({}, 'https://built.example').backendURL).toBe( 'https://built.example' - Network accessline 97
expect(hostedWithBuild({}, 'https://built.example').backendURL).toBe( - Network accessline 98
'https://built.example' - Network accessline 99
); expect( hostedWithBuild({ backendURL: '/api/c15t' }, 'https://built.example') - Network accessline 100
expect( hostedWithBuild({ backendURL: '/api/c15t' }, 'https://built.example') .backendURL - Network accessline 101
hostedWithBuild({ backendURL: '/api/c15t' }, 'https://built.example')
packages/browser/src/__tests__/external-source.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/fixtures/factory-init.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/fixtures/storage-sync-page.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/fixtures/subject-conflict-page.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/fixtures/ui-csp-page.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/gated-scripts.browser.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/gated-scripts.test.ts
- Executable scriptline 1
Executable file - Network accessline 170
const externalScript = (category = 'necessary', asynchronous = false) => { const script = inertScript(category, ''); script.src = 'https://example.test/vendor.js'; - Network accessline 171
const script = inertScript(category, ''); script.src = 'https://example.test/vendor.js'; if (asynchronous) { - Network accessline 172
script.src = 'https://example.test/vendor.js';
packages/browser/src/__tests__/global-events.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/gpp.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/gtm-template.test.ts
- Executable scriptline 1
Executable file - Network accessline 337
const inthUrl = 'https://acme.inth.app/c15t.js'; - Network accessline 478
const result = page.run({ ...tagData, backendUrl: 'https://acme.inth.app', - Network accessline 479
...tagData, backendUrl: 'https://acme.inth.app', }); - Network accessline 480
backendUrl: 'https://acme.inth.app', - Network accessline 525
page.run({ ...tagData, backendUrl: 'https://acme.inth.app', - Network accessline 526
...tagData, backendUrl: 'https://acme.inth.app', scriptUrl: - Network accessline 527
backendUrl: 'https://acme.inth.app', - Network accessline 528
scriptUrl: 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', }); - Network accessline 529
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', - Network accessline 532
expect(queued[0]).toEqual([ 'config', { backendURL: 'https://acme.inth.app' }, - Network accessline 533
'config', { backendURL: 'https://acme.inth.app' }, ]); - Network accessline 534
{ backendURL: 'https://acme.inth.app' }, - Network accessline 612
it.each([ ['https://acme.inth.app/c15t.js', true], - Network accessline 613
['https://acme.inth.app/c15t.js', true], - Network accessline 614
['https://acme.inth.app/c15t.headless.js', true], - Network accessline 615
['https://acme.inth.app/c15t.iab.js', true], - Network accessline 616
['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', true], - Network accessline 617
[ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.offline.js', true, - Network accessline 618
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.offline.js', - Network accessline 620
], [ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.2.0/dist/c15t.local.js', - Network accessline 621
[ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.2.0/dist/c15t.local.js', true, - Network accessline 622
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.2.0/dist/c15t.local.js', - Network accessline 623
true, ], ['https://example.com/c15t.js', false], - Network accessline 624
], ['https://example.com/c15t.js', false], ['https://acme.inth.app.example.com/c15t.js', false], - Network accessline 625
['https://example.com/c15t.js', false], - Network accessline 626
['https://acme.inth.app.example.com/c15t.js', false], - Network accessline 627
['https://inth.app/c15t.js', false], - Network accessline 628
['https://acme.inth.app/other.js', false], - Network accessline 629
['https://acme.inth.app/assets/c15t.js', false], - Network accessline 630
['http://acme.inth.app/c15t.js', false], - Network accessline 631
['https://acme.inth.app/c15t.js?v=1', false], - Network accessline 632
['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/other.js', false], - Network accessline 633
[ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.gpp.js', false, - Network accessline 634
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.gpp.js', - Network accessline 636
], [ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.devtools.js', - Network accessline 637
[ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.devtools.js', false, - Network accessline 638
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.devtools.js', - Network accessline 639
false, ], ['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/c15t.js', false], - Network accessline 640
], ['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/c15t.js', false], ['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/x/dist/c15t.js', false], - Network accessline 641
['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/c15t.js', false], - Network accessline 642
['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/x/dist/c15t.js', false], - Network accessline 643
['https://acme.inth.app/c15t/c15t.js', false], - Network accessline 644
['https://acme.inth.app/c15t.gpp.js', false], - Network accessline 645
['https://acme.inth.app/c15t.offline.js', false], - Network accessline 646
['https://acme.inth.app/c15t.local.js', false], - Network accessline 647
[ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.2.0-canary.4/dist/c15t.headless.js', true, - Network accessline 648
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.2.0-canary.4/dist/c15t.headless.js', - Network accessline 649
true, ], ['https://cdn.jsdelivr.net/npm/@c15t/browser@latest/dist/c15t.js', false], - Network accessline 650
], ['https://cdn.jsdelivr.net/npm/@c15t/browser@latest/dist/c15t.js', false], ['https://cdn.jsdelivr.net/npm/@c15t/browser@3/dist/c15t.js', false], - Network accessline 651
['https://cdn.jsdelivr.net/npm/@c15t/browser@latest/dist/c15t.js', false], - Network accessline 652
['https://cdn.jsdelivr.net/npm/@c15t/browser@3/dist/c15t.js', false], - Network accessline 653
['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1/dist/c15t.js', false], - Network accessline 654
['https://cdn.jsdelivr.net/npm/@c15t/browser@^3.1.0/dist/c15t.js', false], - Network accessline 655
['https://cdn.jsdelivr.net/npm/@c15t/browser@~3.1.0/dist/c15t.js', false], - Network accessline 656
['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.x/dist/c15t.js', false], - Network accessline 657
['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0.1/dist/c15t.js', false], - Network accessline 658
['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0-/dist/c15t.js', false], - Network accessline 662
const backendUrl = scriptUrl.endsWith('/dist/c15t.js') ? 'https://acme.inth.app' - Network accessline 663
? 'https://acme.inth.app' - Network accessline 671
it.each([ [ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', - Network accessline 672
[ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', '', - Network accessline 673
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.js', - Network accessline 676
], [ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.offline.js', - Network accessline 677
[ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.offline.js', 'https://acme.inth.app', - Network accessline 678
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.offline.js', - Network accessline 679
'https://acme.inth.app', - Network accessline 681
], [ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.2.0/dist/c15t.local.js', - Network accessline 682
[ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.2.0/dist/c15t.local.js', 'https://acme.inth.app', - Network accessline 683
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.2.0/dist/c15t.local.js', - Network accessline 684
'https://acme.inth.app', - Network accessline 697
it.each([ ['https://acme.inth.app/c15t.js', ''], - Network accessline 698
['https://acme.inth.app/c15t.js', ''], - Network accessline 699
['https://acme.inth.app/c15t.js', 'https://other.inth.app'], - Network accessline 700
[ 'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.headless.js', '', - Network accessline 701
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.headless.js', - Network accessline 702
'', ], ['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.iab.js', ''], - Network accessline 703
], ['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.iab.js', ''], ])('loads %s with Backend URL "%s"', (scriptUrl, backendUrl) => { - Network accessline 704
['https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.iab.js', ''], - Network accessline 723
for (const url of [ 'https://acme.inth.app/c15t.js', - Network accessline 724
'https://acme.inth.app/c15t.js', - Network accessline 725
'https://acme.inth.app/c15t.iab.js', - Network accessline 726
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.offline.js', - Network accessline 727
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.2.0/dist/c15t.local.js', - Network accessline 728
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.headless.js', - Network accessline 729
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.2.0-canary.4/dist/c15t.js', - Network accessline 732
} for (const url of [ 'https://example.com/c15t.js', - Network accessline 733
for (const url of [ 'https://example.com/c15t.js', 'https://acme.inth.app.example.com/c15t.js', - Network accessline 734
'https://example.com/c15t.js', - Network accessline 735
'https://acme.inth.app.example.com/c15t.js', - Network accessline 736
'https://acme.inth.app/c15t.gpp.js', - Network accessline 737
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1.0/dist/c15t.devtools.js', - Network accessline 738
'https://acme.inth.app/c15t.offline.js', - Network accessline 739
'https://acme.inth.app/c15t.local.js', - Network accessline 740
'https://cdn.jsdelivr.net/npm/@c15t/browser@latest/dist/c15t.js', - Network accessline 741
'https://cdn.jsdelivr.net/npm/@c15t/browser@3.1/dist/c15t.js',
packages/browser/src/__tests__/host-visibility.browser.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/iab-additional-consent.test.ts
- Executable scriptline 1
Executable file - Network accessline 32
id: 89, name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', - Network accessline 33
name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', }, - Network accessline 34
policyUrl: 'https://ads.example/privacy', - Network accessline 55
const client = init({ iab: { additionalConsent: { providers: [89], url: 'https://lists.example/ac' }, - Network accessline 56
iab: { additionalConsent: { providers: [89], url: 'https://lists.example/ac' }, cmpId: 28, - Network accessline 57
additionalConsent: { providers: [89], url: 'https://lists.example/ac' }, - Network accessline 79
expect(row?.textContent).toContain('Example Ad Tech'); expect(row?.querySelector('a')?.getAttribute('href')).toBe( 'https://ads.example/privacy' - Network accessline 80
expect(row?.querySelector('a')?.getAttribute('href')).toBe( 'https://ads.example/privacy' ); - Network accessline 81
'https://ads.example/privacy' - Network accessline 127
id: 89, name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', - Network accessline 128
name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', }, - Network accessline 129
policyUrl: 'https://ads.example/privacy', - Network accessline 147
id: 89, name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', - Network accessline 148
name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', }, - Network accessline 149
policyUrl: 'https://ads.example/privacy', - Network accessline 152
id: 2577, name: 'Second Ad Tech', policyUrl: 'https://second.example/privacy', - Network accessline 153
name: 'Second Ad Tech', policyUrl: 'https://second.example/privacy', }, - Network accessline 154
policyUrl: 'https://second.example/privacy', - Network accessline 198
id: 89, name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', - Network accessline 199
name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', }, - Network accessline 200
policyUrl: 'https://ads.example/privacy',
packages/browser/src/__tests__/iab-config.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/iab-disclosures.test.ts
- Executable scriptline 1
Executable file - Network accessline 19
stdRetention: 30, }, deviceStorageDisclosureUrl: 'https://example.test/storage', - Network accessline 20
}, deviceStorageDisclosureUrl: 'https://example.test/storage', features: [1], - Network accessline 21
deviceStorageDisclosureUrl: 'https://example.test/storage', - Network accessline 31
{ langId: 'en', legIntClaim: 'https://example.test/en/interest', - Network accessline 32
langId: 'en', legIntClaim: 'https://example.test/en/interest', privacy: 'https://example.test/en/privacy', - Network accessline 33
legIntClaim: 'https://example.test/en/interest', - Network accessline 34
privacy: 'https://example.test/en/privacy', - Network accessline 36
{ langId: 'fr', legIntClaim: 'https://example.test/fr/interest', - Network accessline 37
langId: 'fr', legIntClaim: 'https://example.test/fr/interest', privacy: 'https://example.test/fr/privacy', - Network accessline 38
legIntClaim: 'https://example.test/fr/interest', - Network accessline 39
privacy: 'https://example.test/fr/privacy', - Network accessline 123
expect(element.textContent).toContain('Non-Cookie Access'); expect( element.querySelector('a[href="https://example.test/storage"]') - Network accessline 124
expect( element.querySelector('a[href="https://example.test/storage"]') ).not.toBeNull(); - Network accessline 125
element.querySelector('a[href="https://example.test/storage"]') - Network accessline 131
const links = [...element.querySelectorAll('a')]; expect(links.map((link) => link.href)).toEqual([ 'https://example.test/fr/privacy', - Network accessline 132
expect(links.map((link) => link.href)).toEqual([ 'https://example.test/fr/privacy', 'https://example.test/fr/interest', - Network accessline 133
'https://example.test/fr/privacy', - Network accessline 134
'https://example.test/fr/interest', - Network accessline 135
'https://example.test/storage', - Network accessline 155
langId: 'en', legIntClaim: '/interest', privacy: 'https://example.test/safe', - Network accessline 156
legIntClaim: '/interest', privacy: 'https://example.test/safe', }, - Network accessline 157
privacy: 'https://example.test/safe', - Network accessline 163
); expect([...element.querySelectorAll('a')].map((link) => link.href)).toEqual( ['https://example.test/safe'] - Network accessline 164
expect([...element.querySelectorAll('a')].map((link) => link.href)).toEqual( ['https://example.test/safe'] ); - Network accessline 165
['https://example.test/safe'] - Network accessline 173
id: 'custom', name: 'Custom Partner', privacyPolicyUrl: 'https://example.test/custom', - Network accessline 174
name: 'Custom Partner', privacyPolicyUrl: 'https://example.test/custom', purposes: [1], - Network accessline 175
privacyPolicyUrl: 'https://example.test/custom',
packages/browser/src/__tests__/iab-policy.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/iab-toggles.test.ts
- Executable scriptline 1
Executable file - Network accessline 94
id: 'custom-consent', name: 'Custom consent partner', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 95
name: 'Custom consent partner', privacyPolicyUrl: 'https://example.com/privacy', purposes: [2], - Network accessline 96
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 101
legIntPurposes: [2], name: 'Custom LI partner', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 102
name: 'Custom LI partner', privacyPolicyUrl: 'https://example.com/privacy', purposes: [], - Network accessline 103
privacyPolicyUrl: 'https://example.com/privacy',
packages/browser/src/__tests__/iab-unavailable.test.ts
- Executable scriptline 1
Executable file - Network accessline 52
return ( gvl === 'reference' ? deferInitGvl(body as never, 'https://consent.example.com/gvl') - Network accessline 53
gvl === 'reference' ? deferInitGvl(body as never, 'https://consent.example.com/gvl') : body - Network accessline 54
? deferInitGvl(body as never, 'https://consent.example.com/gvl')
packages/browser/src/__tests__/iab.browser.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/iab.test.ts
- Executable scriptline 1
Executable file - Network accessline 56
); const client = init({ iab: { cmpId: 28, gvlURL: 'https://example.test/gvl.json' }, - Network accessline 57
const client = init({ iab: { cmpId: 28, gvlURL: 'https://example.test/gvl.json' }, mode: 'offline', - Network accessline 58
iab: { cmpId: 28, gvlURL: 'https://example.test/gvl.json' }, - Network accessline 76
); const client = init({ iab: { cmpId: 28, gvlURL: 'https://example.test/gvl.json' }, - Network accessline 77
const client = init({ iab: { cmpId: 28, gvlURL: 'https://example.test/gvl.json' }, mode: 'offline', - Network accessline 78
iab: { cmpId: 28, gvlURL: 'https://example.test/gvl.json' }, - Network accessline 314
expect(panel?.hidden).toBe(false); expect(query(client, 'iab-vendor-755').querySelector('a')?.href).toBe( 'https://policies.google.com/privacy' - Network accessline 315
expect(query(client, 'iab-vendor-755').querySelector('a')?.href).toBe( 'https://policies.google.com/privacy' ); - Network accessline 316
'https://policies.google.com/privacy' - Network accessline 430
vi.stubGlobal('fetch', vi.fn().mockRejectedValue(new Error('offline'))); const client = init({ iab: { cmpId: 28, gvlURL: 'https://example.test/gvl.json' }, - Network accessline 431
const client = init({ iab: { cmpId: 28, gvlURL: 'https://example.test/gvl.json' }, mode: 'offline', - Network accessline 432
iab: { cmpId: 28, gvlURL: 'https://example.test/gvl.json' },
packages/browser/src/__tests__/legal-links.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/manifest.test.ts
- Executable scriptline 1
Executable file - Network accessline 215
consentCategories: ['measurement'], mode: manifest({ backendURL: 'https://example.test', - Network accessline 216
mode: manifest({ backendURL: 'https://example.test', fetch: fetchSpy, - Network accessline 217
backendURL: 'https://example.test', fetch: fetchSpy, snapshot: inlineManifest, - Network accessline 382
const inline = (fetchSpy: typeof fetch) => manifest({ backendURL: 'https://example.test', - Network accessline 383
manifest({ backendURL: 'https://example.test', fetch: fetchSpy, - Network accessline 384
backendURL: 'https://example.test', fetch: fetchSpy, snapshot: sameBannerEverywhereManifest, - Network accessline 448
fetchSpy: typeof fetch ) => ({ backendURL: 'https://example.test', - Network accessline 449
) => ({ backendURL: 'https://example.test', fetch: fetchSpy, - Network accessline 450
backendURL: 'https://example.test', fetch: fetchSpy, snapshot: inlineManifest, - Network accessline 484
consentCategories: ['measurement'], mode: manifest({ backendURL: 'https://example.test', - Network accessline 485
mode: manifest({ backendURL: 'https://example.test', fetch: fetchSpy, - Network accessline 486
backendURL: 'https://example.test', fetch: fetchSpy, snapshot: everywhereManifest, - Network accessline 498
expect(String(fetchSpy.mock.calls[0]?.[0])).toBe( 'https://example.test/subjects' - Network accessline 499
'https://example.test/subjects' - Network accessline 509
const client = createConsentClient({ mode: manifest({ backendURL: 'https://example.test', - Network accessline 510
mode: manifest({ backendURL: 'https://example.test', fetch: fetchSpy, - Network accessline 511
backendURL: 'https://example.test', fetch: fetchSpy, snapshot: { - Network accessline 534
const fetchSpy = vi.fn<typeof fetch>((input) => Promise.resolve( String(input) === 'https://example.test/api/manifest' - Network accessline 535
Promise.resolve( String(input) === 'https://example.test/api/manifest' ? new Response(JSON.stringify(everywhereManifest)) - Network accessline 536
String(input) === 'https://example.test/api/manifest' - Network accessline 541
const client = createConsentClient({ mode: manifest({ backendURL: 'https://example.test/api/', - Network accessline 542
mode: manifest({ backendURL: 'https://example.test/api/', fetch: fetchSpy, - Network accessline 543
backendURL: 'https://example.test/api/', fetch: fetchSpy, snapshot: undefined, - Network accessline 550
await client.ready(); expect(fetchSpy.mock.calls.map(([input]) => pathOf(input))).toEqual([ 'https://example.test/api/manifest', - Network accessline 551
expect(fetchSpy.mock.calls.map(([input]) => pathOf(input))).toEqual([ 'https://example.test/api/manifest', ]); - Network accessline 552
'https://example.test/api/manifest', - Network accessline 556
it.each([ 'https://cdn.example.test/consent.json', - Network accessline 557
'https://cdn.example.test/consent.json', - Network accessline 558
'/consent.json', 'https://cdn.example.test/manifest.json?revision=1', 'https://manifest', - Network accessline 559
'https://cdn.example.test/manifest.json?revision=1', - Network accessline 560
'https://manifest', - Network accessline 587
it.each(['', 'https://api.example.test/c15t/'])( - Network accessline 588
'uses the explicit backend %j for CDN manifest geo and saves', async (backendURL) => { const manifestURL = 'https://cdn.example.test/consent.json'; - Network accessline 589
async (backendURL) => { const manifestURL = 'https://cdn.example.test/consent.json'; const expectedBackend = backendURL.replace(/\/$/u, ''); - Network accessline 590
const manifestURL = 'https://cdn.example.test/consent.json'; const expectedBackend = backendURL.replace(/\/$/u, ''); const fetchSpy = vi.fn<typeof fetch>((input) => { - Network accessline 646
consentCategories: ['measurement'], mode: manifest({ backendURL: 'https://x.c15t.dev', - Network accessline 647
mode: manifest({ backendURL: 'https://x.c15t.dev', fetch: fetchSpy, - Network accessline 648
backendURL: 'https://x.c15t.dev', fetch: fetchSpy, snapshot: everywhereManifest, - Network accessline 671
{ mode: manifest({ backendURL: 'https://x.c15t.dev', - Network accessline 672
mode: manifest({ backendURL: 'https://x.c15t.dev', fetch: fetchSpy, - Network accessline 673
backendURL: 'https://x.c15t.dev', fetch: fetchSpy, snapshot: geoManifest, - Network accessline 693
{ mode: manifest({ backendURL: 'https://x.c15t.dev', - Network accessline 694
mode: manifest({ backendURL: 'https://x.c15t.dev', fetch: fetchSpy, - Network accessline 695
backendURL: 'https://x.c15t.dev', fetch: fetchSpy, snapshot: geoManifest, - Network accessline 716
['./api/manifest', './api'], [ 'https://api.example.test/c15t/manifest?revision=1', - Network accessline 717
[ 'https://api.example.test/c15t/manifest?revision=1', 'https://api.example.test/c15t', - Network accessline 718
'https://api.example.test/c15t/manifest?revision=1', - Network accessline 719
'https://api.example.test/c15t', - Network accessline 759
mode: manifest({ fetch: fetchSpy, manifestURL: 'https://x.c15t.dev/manifest', - Network accessline 760
fetch: fetchSpy, manifestURL: 'https://x.c15t.dev/manifest', }), - Network accessline 761
manifestURL: 'https://x.c15t.dev/manifest', - Network accessline 776
expect(fetchSpy).toHaveBeenCalledOnce(); expect(pathOf(fetchSpy.mock.calls[0]?.[0])).toBe( 'https://x.c15t.dev/manifest' - Network accessline 777
expect(pathOf(fetchSpy.mock.calls[0]?.[0])).toBe( 'https://x.c15t.dev/manifest' ); - Network accessline 778
'https://x.c15t.dev/manifest'
packages/browser/src/__tests__/manual-init.test.ts
- Executable scriptline 1
Executable file - Network accessline 28
} { const script = scriptWith({ 'data-backend-url': 'https://original.c15t.dev', - Network accessline 29
const script = scriptWith({ 'data-backend-url': 'https://original.c15t.dev', 'data-categories': 'measurement', - Network accessline 30
'data-backend-url': 'https://original.c15t.dev', - Network accessline 62
context === 'inline script' ? scriptWith({ 'data-backend-url': 'https://unrelated.c15t.dev', - Network accessline 63
? scriptWith({ 'data-backend-url': 'https://unrelated.c15t.dev', 'data-categories': 'marketing', - Network accessline 64
'data-backend-url': 'https://unrelated.c15t.dev', - Network accessline 73
expect(client.mode).toBe('hosted'); expect(client.options).toMatchObject({ backendURL: 'https://original.c15t.dev', - Network accessline 74
expect(client.options).toMatchObject({ backendURL: 'https://original.c15t.dev', consentCategories: ['measurement'], - Network accessline 75
backendURL: 'https://original.c15t.dev', - Network accessline 83
it('captures attributes before the bundle tag is changed and removed', () => { const { api, currentScript, script } = installManual(); script.setAttribute('data-backend-url', 'https://changed.c15t.dev'); - Network accessline 84
const { api, currentScript, script } = installManual(); script.setAttribute('data-backend-url', 'https://changed.c15t.dev'); script.remove(); - Network accessline 85
script.setAttribute('data-backend-url', 'https://changed.c15t.dev'); - Network accessline 89
expect(api.init().options.backendURL).toBe('https://original.c15t.dev'); - Network accessline 92
it('layers queued config and explicit init options over the captured tag', () => { const queuedOptions: ConsentClientOptions = { backendURL: 'https://queued.c15t.dev', - Network accessline 93
const queuedOptions: ConsentClientOptions = { backendURL: 'https://queued.c15t.dev', consentCategories: ['marketing'], - Network accessline 94
backendURL: 'https://queued.c15t.dev', - Network accessline 103
const client = api.init({ backendURL: 'https://explicit.c15t.dev', - Network accessline 104
backendURL: 'https://explicit.c15t.dev', - Network accessline 108
expect(client.mode).toBe('hosted'); expect(client.options).toMatchObject({ backendURL: 'https://explicit.c15t.dev', - Network accessline 109
expect(client.options).toMatchObject({ backendURL: 'https://explicit.c15t.dev', consentCategories: ['measurement', 'marketing'], - Network accessline 110
backendURL: 'https://explicit.c15t.dev', - Network accessline 119
currentScript.mockReturnValue( scriptWith({ 'data-backend-url': 'https://duplicate.c15t.dev', - Network accessline 120
scriptWith({ 'data-backend-url': 'https://duplicate.c15t.dev', 'data-manual': '', - Network accessline 121
'data-backend-url': 'https://duplicate.c15t.dev', - Network accessline 131
expect(duplicate).toBe(api); expect(duplicate.init().options.backendURL).toBe( 'https://original.c15t.dev' - Network accessline 132
expect(duplicate.init().options.backendURL).toBe( 'https://original.c15t.dev' ); - Network accessline 133
'https://original.c15t.dev' - Network accessline 141
'config', { backendURL: 'https://queued.c15t.dev', - Network accessline 142
{ backendURL: 'https://queued.c15t.dev', mode: 'hosted', - Network accessline 143
backendURL: 'https://queued.c15t.dev', - Network accessline 149
const { api, currentScript } = installManual(); currentScript.mockReturnValue(null); api.init({ backendURL: 'https://first.c15t.dev' }); - Network accessline 150
currentScript.mockReturnValue(null); api.init({ backendURL: 'https://first.c15t.dev' }); api.dispose(); - Network accessline 151
api.init({ backendURL: 'https://first.c15t.dev' }); - Network accessline 154
const restored = api.init(); expect(restored.options).toMatchObject({ backendURL: 'https://queued.c15t.dev', - Network accessline 155
expect(restored.options).toMatchObject({ backendURL: 'https://queued.c15t.dev', mode: 'hosted', - Network accessline 156
backendURL: 'https://queued.c15t.dev', - Network accessline 162
const overridden = api.init({ backendURL: 'https://explicit.c15t.dev' }); - Network accessline 163
expect(overridden.options).toMatchObject({ backendURL: 'https://explicit.c15t.dev', mode: 'hosted', - Network accessline 164
backendURL: 'https://explicit.c15t.dev',
packages/browser/src/__tests__/mode-entries.test.ts
- Executable scriptline 1
Executable file - Network accessline 48
const createOfflineClient: typeof createOfflineEntryClient = (options) => createOfflineEntryClient({ acknowledgeNoRecords: true, ...options }); const backendURL = 'https://consent.example.test'; - Network accessline 49
createOfflineEntryClient({ acknowledgeNoRecords: true, ...options }); const backendURL = 'https://consent.example.test'; const authoredRule: PolicyRule = { - Network accessline 50
const backendURL = 'https://consent.example.test';
packages/browser/src/__tests__/mode-globals.test.ts
- Executable scriptline 1
Executable file - Network accessline 64
return { ...(mode === 'hosted' ? { backendURL: 'https://consent.example.test' } - Network accessline 65
...(mode === 'hosted' ? { backendURL: 'https://consent.example.test' } : { acknowledgeNoRecords: true, policyRules: [policy] }), - Network accessline 66
? { backendURL: 'https://consent.example.test' } - Network accessline 144
const script = scriptWith({ ...(mode === 'hosted' ? { 'data-backend-url': 'https://consent.example.test' } - Network accessline 145
...(mode === 'hosted' ? { 'data-backend-url': 'https://consent.example.test' } : { - Network accessline 146
? { 'data-backend-url': 'https://consent.example.test' } - Network accessline 234
).toEqual( mode === 'hosted' ? [{ method: 'POST', url: 'https://consent.example.test/subjects' }] - Network accessline 235
mode === 'hosted' ? [{ method: 'POST', url: 'https://consent.example.test/subjects' }] : [] - Network accessline 236
? [{ method: 'POST', url: 'https://consent.example.test/subjects' }] - Network accessline 335
]; vi.spyOn(document, 'currentScript', 'get').mockReturnValue( scriptWith({ 'data-backend-url': 'https://consent.example.test' }) - Network accessline 336
vi.spyOn(document, 'currentScript', 'get').mockReturnValue( scriptWith({ 'data-backend-url': 'https://consent.example.test' }) ); - Network accessline 337
scriptWith({ 'data-backend-url': 'https://consent.example.test' }) - Network accessline 373
vi.spyOn(document, 'currentScript', 'get').mockReturnValue( scriptWith({ 'data-backend-url': 'https://consent.example.test', - Network accessline 374
scriptWith({ 'data-backend-url': 'https://consent.example.test', 'data-manual': '', - Network accessline 375
'data-backend-url': 'https://consent.example.test', - Network accessline 417
[ 'config', { backendURL: 'https://consent.example.test', ui: false, ...options }, - Network accessline 418
'config', { backendURL: 'https://consent.example.test', ui: false, ...options }, ], - Network accessline 419
{ backendURL: 'https://consent.example.test', ui: false, ...options },
packages/browser/src/__tests__/no-records-warning.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/part-styling.browser.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/postcss-tailwind3-entry.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/queue-replay.test.ts
- Executable scriptline 1
Executable file - Network accessline 127
const iframe = document.createElement('iframe'); iframe.setAttribute('data-category', 'measurement'); iframe.setAttribute('src', 'https://example.com/embed'); - Network accessline 128
iframe.setAttribute('data-category', 'measurement'); iframe.setAttribute('src', 'https://example.com/embed'); document.body.append(iframe); - Network accessline 129
iframe.setAttribute('src', 'https://example.com/embed');
packages/browser/src/__tests__/storage-sync.browser.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/stylesheet-prune.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/subject-conflict.browser.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/subject-id.test.ts
- Executable scriptline 1
Executable file - Network accessline 92
consentCategories: ['marketing', 'measurement'], mode: manifest({ backendURL: 'https://backend.test', - Network accessline 93
mode: manifest({ backendURL: 'https://backend.test', fetch: backend, - Network accessline 94
backendURL: 'https://backend.test', fetch: backend, snapshot,
packages/browser/src/__tests__/switch-direction.browser.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/trigger-devtools.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/trigger-motion.browser.test.ts
- Executable scriptline 1
Executable file
packages/browser/src/__tests__/ui.test.ts
- Executable scriptline 1
Executable file - Network accessline 1027
it('links stylesheetURLs inside the UI root with the configured nonce', async () => { const { root } = await mount( { stylesheetURLs: ['/brand.css', 'https://cdn.example/brand.css'] }, - Network accessline 1028
const { root } = await mount( { stylesheetURLs: ['/brand.css', 'https://cdn.example/brand.css'] }, { nonce: 'page-nonce' } - Network accessline 1029
{ stylesheetURLs: ['/brand.css', 'https://cdn.example/brand.css'] }, - Network accessline 1036
expect(links.map((link) => link.getAttribute('href'))).toEqual([ '/brand.css', 'https://cdn.example/brand.css', - Network accessline 1037
'/brand.css', 'https://cdn.example/brand.css', ]); - Network accessline 1038
'https://cdn.example/brand.css',
packages/browser/src/__tests__/vendor-consent.test.ts
- Executable scriptline 1
Executable file - Network accessline 15
id: 'posthog', name: 'PostHog', privacyPolicyUrl: 'https://posthog.com/privacy', - Network accessline 16
name: 'PostHog', privacyPolicyUrl: 'https://posthog.com/privacy', }, - Network accessline 17
privacyPolicyUrl: 'https://posthog.com/privacy', - Network accessline 21
id: 'youtube', name: 'YouTube', privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 22
name: 'YouTube', privacyPolicyUrl: 'https://policies.google.com/privacy', }, - Network accessline 23
privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 27
id: 'x-pixel', name: 'X Pixel', privacyPolicyUrl: 'https://x.com/en/privacy', - Network accessline 28
name: 'X Pixel', privacyPolicyUrl: 'https://x.com/en/privacy', }, - Network accessline 29
privacyPolicyUrl: 'https://x.com/en/privacy', - Network accessline 258
expect(content.textContent).toContain('Product analytics.'); expect(content.querySelector('a')?.getAttribute('href')).toBe( 'https://posthog.com/privacy' - Network accessline 259
expect(content.querySelector('a')?.getAttribute('href')).toBe( 'https://posthog.com/privacy' ); - Network accessline 260
'https://posthog.com/privacy' - Network accessline 283
category: 'measurement', id: 'posthog', src: 'https://example.invalid/posthog.js', - Network accessline 284
id: 'posthog', src: 'https://example.invalid/posthog.js', vendor: 'posthog', - Network accessline 285
src: 'https://example.invalid/posthog.js', - Network accessline 287
vendorDetails: { name: 'PostHog', privacyPolicyUrl: 'https://posthog.com/privacy', - Network accessline 288
name: 'PostHog', privacyPolicyUrl: 'https://posthog.com/privacy', }, - Network accessline 289
privacyPolicyUrl: 'https://posthog.com/privacy', - Network accessline 422
it('keeps a frame paused while its vendor is off', async () => { const frame = document.createElement('iframe'); frame.setAttribute('data-src', 'https://example.test/embed'); - Network accessline 423
const frame = document.createElement('iframe'); frame.setAttribute('data-src', 'https://example.test/embed'); frame.setAttribute('data-category', 'measurement'); - Network accessline 424
frame.setAttribute('data-src', 'https://example.test/embed'); - Network accessline 435
await client.save({ measurement: true, vendors: { posthog: true } }); await vi.waitFor(() => expect(frame.getAttribute('src')).toBe('https://example.test/embed') - Network accessline 436
await vi.waitFor(() => expect(frame.getAttribute('src')).toBe('https://example.test/embed') ); - Network accessline 437
expect(frame.getAttribute('src')).toBe('https://example.test/embed')
packages/browser/src/auto-init.ts
- Executable scriptline 1
Executable file - Network accessline 90
* * ```html * <script src="https://cdn.jsdelivr.net/npm/@c15t/browser/dist/c15t.js" - Network accessline 91
* ```html * <script src="https://cdn.jsdelivr.net/npm/@c15t/browser/dist/c15t.js" * data-backend-url="https://your-instance.c15t.dev" - Network accessline 92
* <script src="https://cdn.jsdelivr.net/npm/@c15t/browser/dist/c15t.js" - Network accessline 93
* data-backend-url="https://your-instance.c15t.dev"
packages/browser/src/client-base.ts
- Executable scriptline 1
Executable file
packages/browser/src/client.ts
- Executable scriptline 1
Executable file
packages/browser/src/create-runtime-static.ts
- Executable scriptline 1
Executable file
packages/browser/src/create-runtime.ts
- Executable scriptline 1
Executable file
packages/browser/src/deferred.ts
- Executable scriptline 1
Executable file
packages/browser/src/devtools-mount.ts
- Executable scriptline 1
Executable file
packages/browser/src/devtools.ts
- Executable scriptline 1
Executable file - Network accessline 13
* * const client = init({ * mode: hosted({ backendURL: 'https://your-instance.c15t.dev' }), - Network accessline 14
* const client = init({ * mode: hosted({ backendURL: 'https://your-instance.c15t.dev' }), * }); - Network accessline 15
* mode: hosted({ backendURL: 'https://your-instance.c15t.dev' }),
packages/browser/src/entries/cdn-devtools.ts
- Executable scriptline 1
Executable file
packages/browser/src/entries/cdn-gpp.ts
- Executable scriptline 1
Executable file
packages/browser/src/entries/cdn-headless.ts
- Executable scriptline 1
Executable file
packages/browser/src/entries/cdn-iab.ts
- Executable scriptline 1
Executable file
packages/browser/src/entries/cdn-local.ts
- Executable scriptline 1
Executable file
packages/browser/src/entries/cdn-offline.ts
- Executable scriptline 1
Executable file
packages/browser/src/entries/cdn.ts
- Executable scriptline 1
Executable file
packages/browser/src/gated-scripts.ts
- Executable scriptline 1
Executable file
packages/browser/src/global-base.ts
- Executable scriptline 1
Executable file
packages/browser/src/global.ts
- Executable scriptline 1
Executable file
packages/browser/src/gpp.ts
- Executable scriptline 1
Executable file - Network accessline 10
* * const client = init({ * mode: hosted({ backendURL: 'https://your-instance.c15t.dev' }), - Network accessline 11
* const client = init({ * mode: hosted({ backendURL: 'https://your-instance.c15t.dev' }), * }); - Network accessline 12
* mode: hosted({ backendURL: 'https://your-instance.c15t.dev' }),
packages/browser/src/has-decided.ts
- Executable scriptline 1
Executable file
packages/browser/src/headless.ts
- Executable scriptline 1
Executable file - Network accessline 10
* import { hosted, init } from '@c15t/browser/headless'; * * const c15t = init({ mode: hosted({ backendURL: 'https://your-instance.c15t.dev' }) }); - Network accessline 11
* * const c15t = init({ mode: hosted({ backendURL: 'https://your-instance.c15t.dev' }) }); * c15t.on('ui', (surface) => banner.hidden = surface !== 'banner'); - Network accessline 12
* const c15t = init({ mode: hosted({ backendURL: 'https://your-instance.c15t.dev' }) });
packages/browser/src/hosted-client.ts
- Executable scriptline 1
Executable file
packages/browser/src/hosted-global.ts
- Executable scriptline 1
Executable file
packages/browser/src/hosted.ts
- Executable scriptline 1
Executable file
packages/browser/src/iab.ts
- Executable scriptline 1
Executable file
packages/browser/src/iab/mount.ts
- Executable scriptline 1
Executable file
packages/browser/src/iab/preferences.ts
- Executable scriptline 1
Executable file
packages/browser/src/iab/styles.ts
- Executable scriptline 1
Executable file
packages/browser/src/iab/surface.ts
- Executable scriptline 1
Executable file
packages/browser/src/iab/vendor-disclosures.ts
- Executable scriptline 1
Executable file
packages/browser/src/index.ts
- Executable scriptline 1
Executable file
packages/browser/src/no-records-warning.ts
- Executable scriptline 1
Executable file
packages/browser/src/offline-client.ts
- Executable scriptline 1
Executable file
packages/browser/src/offline-global.ts
- Executable scriptline 1
Executable file
packages/browser/src/offline.ts
- Executable scriptline 1
Executable file
packages/browser/src/policy-rules.ts
- Executable scriptline 1
Executable file
packages/browser/src/postcss-tailwind3.ts
- Executable scriptline 1
Executable file
packages/browser/src/script-tag-client.ts
- Executable scriptline 1
Executable file
packages/browser/src/transports/hosted.ts
- Executable scriptline 1
Executable file - Network accessline 63
* import { hosted, init } from '@c15t/browser'; * * init({ mode: hosted({ backendURL: 'https://your-project.inth.app' }) }); - Network accessline 64
* * init({ mode: hosted({ backendURL: 'https://your-project.inth.app' }) }); * ``` - Network accessline 65
* init({ mode: hosted({ backendURL: 'https://your-project.inth.app' }) });
packages/browser/src/transports/manifest.ts
- Executable scriptline 1
Executable file
packages/browser/src/transports/offline.ts
- Executable scriptline 1
Executable file
packages/browser/src/types.ts
- Executable scriptline 1
Executable file
packages/browser/src/ui/actions.ts
- Executable scriptline 1
Executable file
packages/browser/src/ui/banner.ts
- Executable scriptline 1
Executable file
packages/browser/src/ui/branding.ts
- Executable scriptline 1
Executable file - Network accessline 72
const href = resolved === 'inth' ? `https://inth.com${refParam}` - Network accessline 73
resolved === 'inth' ? `https://inth.com${refParam}` : `https://c15t.com${refParam}`; - Network accessline 74
? `https://inth.com${refParam}` - Network accessline 75
: `https://c15t.com${refParam}`;
packages/browser/src/ui/copy.ts
- Executable scriptline 1
Executable file
packages/browser/src/ui/dialog-surface.ts
- Executable scriptline 1
Executable file
packages/browser/src/ui/dialog.ts
- Executable scriptline 1
Executable file
packages/browser/src/ui/dom.ts
packages/browser/src/ui/mount.ts
- Executable scriptline 1
Executable file - Network accessline 162
* ```ts * const client = createConsentClient({ * mode: hosted({ backendURL: 'https://x.c15t.dev' }), - Network accessline 163
* const client = createConsentClient({ * mode: hosted({ backendURL: 'https://x.c15t.dev' }), * }); - Network accessline 164
* mode: hosted({ backendURL: 'https://x.c15t.dev' }),
packages/browser/src/ui/slots.ts
- Executable scriptline 1
Executable file
packages/browser/src/ui/surface.ts
- Executable scriptline 1
Executable file
packages/browser/src/ui/trigger-toolbar.ts
packages/browser/src/ui/trigger.ts
- Executable scriptline 1
Executable file
packages/browser/src/ui/vendor-list.ts
packages/browser/src/ui/widget.ts
- Executable scriptline 1
Executable file
packages/browser/vitest.config.ts
- Executable scriptline 1
Executable file
packages/c15t/AGENTS.md
- Network accessline 24
[Documentation index](https://c15t.com/docs/llms.txt) · [Full Markdown context](https://c15t.com/llms-full.txt). Prefer the index and individual pages for focused tasks.
packages/c15t/CHANGELOG.md
- Access to secretsline 69
[Credential-related source omitted] - Access to secretsline 88
[Credential-related source omitted] - Access to secretsline 90
[Credential-related source omitted] - Access to secretsline 91
[Credential-related source omitted] - Access to secretsline 357
[Credential-related source omitted] - Access to secretsline 376
[Credential-related source omitted] - Access to secretsline 378
[Credential-related source omitted] - Access to secretsline 379
[Credential-related source omitted] - Network accessline 578
c15t v3 is stable and published under the `latest` tag. See the [3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 579
[3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 689
manifest(); // { type: 'manifest' } manifest({ resolve: 'browser', geoURL: '/api/geo' }); hosted({ backendURL: 'https://your-project.inth.app' }); - Network accessline 690
manifest({ resolve: 'browser', geoURL: '/api/geo' }); hosted({ backendURL: 'https://your-project.inth.app' }); offline({ policyRules }); - Network accessline 691
hosted({ backendURL: 'https://your-project.inth.app' }); - Network accessline 1364
export const consentOptions = { backendURL: 'https://your-project.inth.app', - Network accessline 1365
backendURL: 'https://your-project.inth.app', - Network accessline 2113
The init route takes `GET` from the same call. You can pass options instead of a config, for example `createNextConsentRouteHandlers({ backendURL: 'https://your-project.inth.app' })`. - Network accessline 2354
See [keep open tabs in step](https://c15t.com/docs/guides/consent-state#keep-open-tabs-in-step). - Network accessline 2515
- Pass `waitUntil` to Next.js `resolveConsent`, or `onBackgroundRevalidate` to TanStack Start `resolveConsent`, so serverless platforms keep a manifest request alive after the render stops waiting for it. - Code that retried the manifest ca - Network accessline 2517
- Next.js `resolveConsent` now refuses to forward `forwardHeaders` credentials to a plain `http://` manifest URL on a host other than loopback, matching the route handlers; the render falls back to the baseline state and reports the error.
packages/c15t/README.md
- Network accessline 1
<p align="center"> <a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=c15t" target="_blank" rel="noopener noreferrer"> - Network accessline 2
<a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=c15t" target="_blank" rel="noopener noreferrer"> - Network accessline 12
<p> <a href="https://www.npmjs.com/package/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/c15t.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/c15t.svg?variant=outline&mode=lig - Network accessline 13
<a href="https://www.npmjs.com/package/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/c15t.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/c15t.svg?variant=outline&mode=light" - Network accessline 14
<a href="https://github.com/c15t/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/stars.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15t/c15t/stars.svg?varian - Network accessline 15
<a href="https://github.com/c15t/c15t/blob/main/LICENSE.md"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/license.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15 - Network accessline 16
<a href="https://c15t.link/discord"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/discord/1312171102268690493.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/discord/1312171102268690493.svg - Network accessline 17
<a href="https://skills.sh/c15t/skills/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/skills/c15t/skills/c15t.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/skills/c15t/skills/c15t.sv - Network accessline 18
<a href="https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/badge/Made%20By-Inth-ffc803.svg?color=ffc803&labelTextCo - Network accessline 21
c15t is the open standard for cookie banners. It's an open-source cookie consent manager and consent management platform (CMP). One package gives you a GDPR cookie banner, a preference dialog, and consent-gated scripts for React, Next.js, V - Network accessline 23
c15t is used by [2,100+ sites](https://www.wappalyzer.com/technologies/cookie-compliance/c15t/), including expo.dev, zed.dev, unkey.dev, mintlify.com, and sazabi.com. - Network accessline 37
| Framework | Import from | Quickstart | | --- | --- | --- | | JavaScript, headless | `c15t`, `c15t/runtime` | [Headless runtime](https://c15t.com/docs/frameworks/javascript/headless) | - Network accessline 38
| --- | --- | --- | | JavaScript, headless | `c15t`, `c15t/runtime` | [Headless runtime](https://c15t.com/docs/frameworks/javascript/headless) | | React 18 and 19 (Vite, React Router) | `c15t/react` | [React](https://c15t.com/docs/framework - Network accessline 39
| JavaScript, headless | `c15t`, `c15t/runtime` | [Headless runtime](https://c15t.com/docs/frameworks/javascript/headless) | - Network accessline 40
| React 18 and 19 (Vite, React Router) | `c15t/react` | [React](https://c15t.com/docs/frameworks/react/quickstart) | - Network accessline 41
| Next.js 15 and 16 (App Router, Pages Router) | `c15t/next` | [Next.js](https://c15t.com/docs/frameworks/next/quickstart) | - Network accessline 42
| Vue 3 | `c15t/vue/vue-plugin` | [Vue](https://c15t.com/docs/frameworks/vue/quickstart) | - Network accessline 43
| Nuxt 3 and 4 | `c15t/vue` (Nuxt module) | [Nuxt](https://c15t.com/docs/frameworks/nuxt/quickstart) | - Network accessline 44
| Astro 5, 6, and 7 | `c15t/astro` | [Astro](https://c15t.com/docs/frameworks/astro/quickstart) | - Network accessline 45
| TanStack Start | `c15t/tanstack-start` | [TanStack Start](https://c15t.com/docs/frameworks/tanstack-start/quickstart) | - Network accessline 46
| Svelte 5 and SvelteKit | `c15t/svelte` | [Svelte](https://c15t.com/docs/frameworks/svelte/quickstart), [SvelteKit](https://c15t.com/docs/frameworks/sveltekit/quickstart) | - Network accessline 47
| Script tag, no build step (Webflow, WordPress, Framer, Squarespace) | [`@c15t/browser`](https://www.npmjs.com/package/@c15t/browser), a separate install | [HTML](https://c15t.com/docs/frameworks/html/quickstart) | - Network accessline 49
Not sure which one fits? [Choose your setup](https://c15t.com/docs/concepts/choose-your-setup) compares the options by framework, rendering mode, and hosting. - Network accessline 53
c15t needs a backend to serve policies and keep consent records. [Inth](https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=c15t) runs it for you. It stores every choice with its region and policy version, - Network accessline 61
- Node.js 20.19 or later - An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend - Network accessline 62
- An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend - Network accessline 93
const options = { mode: hosted({ backendURL: 'https://your-project.inth.app' }), - Network accessline 94
mode: hosted({ backendURL: 'https://your-project.inth.app' }), - Network accessline 110
See the [documentation](https://c15t.com/docs) for guides, API reference, and examples. - Network accessline 114
| `c15t` subpath | Same code as | | --- | --- | | `c15t`, `c15t/runtime`, `c15t/build` | [`@c15t/core`](https://www.npmjs.com/package/@c15t/core) | - Network accessline 115
| --- | --- | | `c15t`, `c15t/runtime`, `c15t/build` | [`@c15t/core`](https://www.npmjs.com/package/@c15t/core) | | `c15t/react` | [`@c15t/react`](https://www.npmjs.com/package/@c15t/react) | - Network accessline 116
| `c15t`, `c15t/runtime`, `c15t/build` | [`@c15t/core`](https://www.npmjs.com/package/@c15t/core) | - Network accessline 117
| `c15t/react` | [`@c15t/react`](https://www.npmjs.com/package/@c15t/react) | - Network accessline 118
| `c15t/next` | [`@c15t/nextjs`](https://www.npmjs.com/package/@c15t/nextjs) | - Network accessline 119
| `c15t/vue` | [`@c15t/vue`](https://www.npmjs.com/package/@c15t/vue) | - Network accessline 120
| `c15t/astro` | [`@c15t/astro`](https://www.npmjs.com/package/@c15t/astro) | - Network accessline 121
| `c15t/tanstack-start` | [`@c15t/tanstack-start`](https://www.npmjs.com/package/@c15t/tanstack-start) | - Network accessline 127
- [@c15t/integrations](https://www.npmjs.com/package/@c15t/integrations): consent-aware loaders for Google Tag Manager, GA4, Meta Pixel, PostHog, and 40+ other vendors - Network accessline 128
- [@c15t/iab](https://www.npmjs.com/package/@c15t/iab): IAB TCF 2.4 and GPP for programmatic advertising - Network accessline 129
- [@c15t/node-sdk](https://www.npmjs.com/package/@c15t/node-sdk): read and write consent records from your server - Network accessline 130
- [Inth CLI](https://www.npmjs.com/package/@inth/cli): run `inth c15t` to set up c15t with a coding agent or quickstart files - Network accessline 136
On the web, every page of the [c15t docs](https://c15t.com/docs) has a Markdown version, and [llms.txt](https://c15t.com/docs/llms.txt) lists them all. Install the c15t agent skills with `npx skills add c15t/skills`. - Network accessline 140
- Join our [Discord community](https://c15t.link/discord) - Network accessline 141
- Open an issue on our [GitHub repository](https://github.com/c15t/c15t/issues) - Network accessline 142
- Visit [inth.com](https://inth.com) and use the chat widget - Network accessline 147
- Read the [contribution guidelines](https://c15t.com/docs/oss/contributing) before you open a pull request - Network accessline 148
- Follow the [code of conduct](https://c15t.com/docs/oss/code-of-conduct) - Network accessline 152
Do not open a public issue for a security vulnerability. Report it privately through [GitHub's vulnerability reporting](https://github.com/c15t/c15t/security/advisories/new). We examine every valid report. - Network accessline 160
[Apache License 2.0](https://github.com/c15t/c15t/blob/main/LICENSE.md) - Network accessline 164
**Built by [Inth](https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=c15t)**
packages/c15t/__tests__/facade-parity.test.ts
- Executable scriptline 1
Executable file
packages/c15t/__tests__/parity-runner.mjs
- Executable scriptline 1
Executable file
packages/c15t/docs/integrations/cloudflare-zaraz.md
- Network accessline 40
after the first synchronization. DOM-ready, timer and click triggers you add in Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 41
Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) and [pageview settings](https://developers.cloudflare.com/zaraz/reference/setti - Network accessline 42
[purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 43
and [pageview settings](https://developers.cloudflare.com/zaraz/reference/settings/). - Network accessline 73
for tools that Zaraz already runs, including a separate `@c15t/integrations` helper for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) - Network accessline 74
for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) once. - Network accessline 75
[Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/)
packages/c15t/knip.json
packages/c15t/package.json
- Executable scriptline 1
Executable file - Network accessline 17
"vue" ], "homepage": "https://c15t.com", - Network accessline 18
], "homepage": "https://c15t.com", "bugs": { - Network accessline 19
"homepage": "https://c15t.com", - Network accessline 20
"bugs": { "url": "https://github.com/c15t/c15t/issues" }, - Network accessline 21
"url": "https://github.com/c15t/c15t/issues" - Network accessline 24
"repository": { "type": "git", "url": "https://github.com/c15t/c15t.git", - Network accessline 25
"type": "git", "url": "https://github.com/c15t/c15t.git", "directory": "packages/c15t" - Network accessline 26
"url": "https://github.com/c15t/c15t.git",
packages/c15t/readme.json
- Network accessline 1
{ "title": "c15t: The Open Standard for Cookie Banners", "description": "c15t is the open standard for cookie banners. It's an open-source cookie consent manager and consent management platform (CMP). One package gives you a GDPR cookie b - Network accessline 2
"title": "c15t: The Open Standard for Cookie Banners", "description": "c15t is the open standard for cookie banners. It's an open-source cookie consent manager and consent management platform (CMP). One package gives you a GDPR cookie bann - Network accessline 3
"description": "c15t is the open standard for cookie banners. It's an open-source cookie consent manager and consent management platform (CMP). One package gives you a GDPR cookie banner, a preference dialog, and consent-gated scripts for R - Network accessline 12
], "leadSections": { "Supported Frameworks": "| Framework | Import from | Quickstart |\n| --- | --- | --- |\n| JavaScript, headless | `c15t`, `c15t/runtime` | [Headless runtime](https://c15t.com/docs/frameworks/javascript/headless) |\n| - Network accessline 13
"leadSections": { "Supported Frameworks": "| Framework | Import from | Quickstart |\n| --- | --- | --- |\n| JavaScript, headless | `c15t`, `c15t/runtime` | [Headless runtime](https://c15t.com/docs/frameworks/javascript/headless) |\n| Reac - Network accessline 14
"Supported Frameworks": "| Framework | Import from | Quickstart |\n| --- | --- | --- |\n| JavaScript, headless | `c15t`, `c15t/runtime` | [Headless runtime](https://c15t.com/docs/frameworks/javascript/headless) |\n| React 18 and 19 (Vite, R - Network accessline 16
"prerequisites": [ "Node.js 20.19 or later", "An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" - Network accessline 17
"Node.js 20.19 or later", "An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" ], - Network accessline 18
"An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" - Network accessline 29
"Wrap your app in `ConsentProvider` with the backend URL from your Inth project, and add the banner, the dialog, and a link that opens the dialog again", "Add vendor loaders to `scripts` to apply category permissions and vendor consent AP - Network accessline 30
"Add vendor loaders to `scripts` to apply category permissions and vendor consent APIs", "```tsx\n// src/consent.tsx (React)\nimport { posthog } from '@c15t/integrations/posthog'\nimport {\n ConsentBanner,\n ConsentDialog,\n ConsentDia - Network accessline 31
"```tsx\n// src/consent.tsx (React)\nimport { posthog } from '@c15t/integrations/posthog'\nimport {\n ConsentBanner,\n ConsentDialog,\n ConsentDialogLink,\n ConsentProvider,\n hosted,\n} from 'c15t/react'\nimport type { ReactNode } fro - Network accessline 32
], "docsLink": "https://c15t.com/docs", "quickStartLink": "https://c15t.com/docs/concepts/choose-your-setup", - Network accessline 33
"docsLink": "https://c15t.com/docs", - Network accessline 34
"quickStartLink": "https://c15t.com/docs/concepts/choose-your-setup", - Network accessline 35
"showCLIGeneration": false, "customSections": { "Package Map": "| `c15t` subpath | Same code as |\n| --- | --- |\n| `c15t`, `c15t/runtime`, `c15t/build` | [`@c15t/core`](https://www.npmjs.com/package/@c15t/core) |\n| `c15t/react` | [`@c1 - Network accessline 36
"customSections": { "Package Map": "| `c15t` subpath | Same code as |\n| --- | --- |\n| `c15t`, `c15t/runtime`, `c15t/build` | [`@c15t/core`](https://www.npmjs.com/package/@c15t/core) |\n| `c15t/react` | [`@c15t/react`](https://www.npmjs. - Network accessline 37
"Package Map": "| `c15t` subpath | Same code as |\n| --- | --- |\n| `c15t`, `c15t/runtime`, `c15t/build` | [`@c15t/core`](https://www.npmjs.com/package/@c15t/core) |\n| `c15t/react` | [`@c15t/react`](https://www.npmjs.com/package/@c15t/reac - Network accessline 38
"Related Packages": "- [@c15t/integrations](https://www.npmjs.com/package/@c15t/integrations): consent-aware loaders for Google Tag Manager, GA4, Meta Pixel, PostHog, and 40+ other vendors\n- [@c15t/iab](https://www.npmjs.com/package/@c15t/
packages/c15t/scripts/copy-distribution-css.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/api.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/api.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/client.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/client.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/consent-script.astro.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/consent-script.astro.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/iab-panel.astro.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/iab-panel.astro.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/iab-prompt.astro.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/iab-prompt.astro.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/panel-link.astro.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/panel-link.astro.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/panel.astro.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/panel.astro.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/prompt-deferred.astro.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/prompt-deferred.astro.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/prompt.astro.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/components/prompt.astro.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/middleware.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/middleware.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/server.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/server.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/ui/react.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/ui/react.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/ui/svelte.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/ui/svelte.js
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/ui/vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/astro/ui/vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/build.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/build.js
- Executable scriptline 1
Executable file
packages/c15t/shims/consent-categories.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/consent-categories.js
- Executable scriptline 1
Executable file
packages/c15t/shims/consent-record.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/consent-record.js
- Executable scriptline 1
Executable file
packages/c15t/shims/events.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/events.js
- Executable scriptline 1
Executable file
packages/c15t/shims/experiment.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/experiment.js
- Executable scriptline 1
Executable file
packages/c15t/shims/generated.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/generated.js
- Executable scriptline 1
Executable file
packages/c15t/shims/index.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/index.js
- Executable scriptline 1
Executable file
packages/c15t/shims/libs/generate-subject-id.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/libs/generate-subject-id.js
- Executable scriptline 1
Executable file
packages/c15t/shims/modes.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/modes.js
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/clear-on-revocation.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/clear-on-revocation.js
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/iframe-blocker.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/iframe-blocker.js
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/network-blocker.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/network-blocker.js
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/network-hold.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/network-hold.js
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/persistence.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/persistence.js
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/script-loader.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/script-loader.js
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/window-debug.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/modules/window-debug.js
- Executable scriptline 1
Executable file
packages/c15t/shims/next.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/next.js
- Executable scriptline 1
Executable file
packages/c15t/shims/next/api.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/next/api.js
- Executable scriptline 1
Executable file
packages/c15t/shims/next/build.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/next/build.js
- Executable scriptline 1
Executable file
packages/c15t/shims/next/components/panel-link.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/next/components/panel-link.js
- Executable scriptline 1
Executable file
packages/c15t/shims/next/devtools.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/next/devtools.js
- Executable scriptline 1
Executable file
packages/c15t/shims/next/headless.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/next/headless.js
- Executable scriptline 1
Executable file
packages/c15t/shims/next/middleware.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/next/middleware.js
- Executable scriptline 1
Executable file
packages/c15t/shims/next/pages.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/next/pages.js
- Executable scriptline 1
Executable file
packages/c15t/shims/next/proxy.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/next/proxy.js
- Executable scriptline 1
Executable file
packages/c15t/shims/next/server.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/next/server.js
- Executable scriptline 1
Executable file
packages/c15t/shims/next/static.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/next/static.js
- Executable scriptline 1
Executable file
packages/c15t/shims/postcss-tailwind3.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/postcss-tailwind3.js
- Executable scriptline 1
Executable file
packages/c15t/shims/preference-draft.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/preference-draft.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/consent-gate.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/consent-gate.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/frame.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/frame.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/panel-link.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/panel-link.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/panel-trigger.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/panel-trigger.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/panel.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/panel.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/preferences.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/preferences.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/prompt.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/components/prompt.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/consent-gate.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/consent-gate.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/context.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/context.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/devtools.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/devtools.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/draft.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/draft.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/frame.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/frame.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/gpp.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/gpp.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/headless.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/headless.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/hooks.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/hooks.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/iab.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/iab.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/modes.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/modes.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/module-hooks.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/module-hooks.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/module-hooks/iframe-blocker.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/module-hooks/iframe-blocker.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/module-hooks/network-blocker.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/module-hooks/network-blocker.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/module-hooks/persistence.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/module-hooks/persistence.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/module-hooks/script-loader.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/module-hooks/script-loader.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/panel-link.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/panel-link.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/panel-trigger.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/panel-trigger.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/panel.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/panel.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/preferences.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/preferences.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/accordion.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/accordion.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/button.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/button.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/collapsible.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/collapsible.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/dialog.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/dialog.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/preference-item.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/preference-item.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/switch.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/switch.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/tabs.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/primitives/tabs.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/prompt.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/prompt.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/provider.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/provider.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/server.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/server.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/theme.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/theme.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/types.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/types.js
- Executable scriptline 1
Executable file
packages/c15t/shims/react/utils.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/react/utils.js
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime.js
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/client-mode.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/client-mode.js
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/controls.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/controls.js
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/on-demand-factories.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/on-demand-factories.js
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/on-demand.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/on-demand.js
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/provider.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/provider.js
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/script-server-start.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/runtime/script-server-start.js
- Executable scriptline 1
Executable file
packages/c15t/shims/server.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/server.js
- Executable scriptline 1
Executable file
packages/c15t/shims/static.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/static.js
- Executable scriptline 1
Executable file
packages/c15t/shims/surface-actions.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/surface-actions.js
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte.js
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte/devtools.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte/devtools.js
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte/headless.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte/headless.js
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte/kit.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte/kit.js
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte/kit/locals.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte/server.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte/server.js
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte/vite.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/svelte/vite.js
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start.js
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/api.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/api.js
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/build.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/build.js
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/components/panel-link.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/components/panel-link.js
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/headless.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/headless.js
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/middleware.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/middleware.js
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/server.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/server.js
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/static.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/tanstack-start/static.js
- Executable scriptline 1
Executable file
packages/c15t/shims/transports.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/transports.js
- Executable scriptline 1
Executable file
packages/c15t/shims/transports/manifest-browser.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/transports/manifest-browser.js
- Executable scriptline 1
Executable file
packages/c15t/shims/transports/manifest-cache.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/transports/manifest-cache.js
- Executable scriptline 1
Executable file
packages/c15t/shims/transports/manifest-location.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/transports/manifest-location.js
- Executable scriptline 1
Executable file
packages/c15t/shims/transports/manifest.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/transports/manifest.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/activeUI.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/activeUI.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/component.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/component.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/config.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/config.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/consent.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/consent.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/draft.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/draft.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/event-dispatcher.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/event-dispatcher.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/experiment.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/experiment.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/iab-translations.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/iab-translations.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/iabSelection.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/iabSelection.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/index.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/index.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/init.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/init.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/kernel.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/kernel.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/language.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/language.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/region.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/region.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/stubs/cookie.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/stubs/cookie.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/stubs/fetch.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/stubs/fetch.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/stubs/requestHeaders.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/stubs/requestHeaders.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/stubs/state.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/stubs/state.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-consent-policy-actions.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-consent-policy-actions.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-consent-scroll-lock.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-consent-scroll-lock.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-devtools-launcher.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-devtools-launcher.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-draggable.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-draggable.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-late-entry.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-late-entry.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-local-storage-ref.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-local-storage-ref.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-mounted.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-mounted.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-surface-translations.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-surface-translations.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-window-size.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/composables/use-window-size.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/devtools.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/devtools.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/color-scheme.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/color-scheme.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/actions.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/actions.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/branding-icon.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/branding-icon.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/button.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/button.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-actions.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-actions.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-branding-icon.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-branding-icon.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-button.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-button.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-description.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-description.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-dialog-link.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-dialog-link.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-gate.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-gate.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-gate.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-legal-links.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-legal-links.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-link.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-link.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-root.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-root.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-switch.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-switch.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-tag.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/consent-tag.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/description-content.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/description-content.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/description.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/description.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/early-tap-script.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/early-tap-script.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-feature-item.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-feature-item.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-panel.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-panel.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-panel.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-prompt.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-prompt.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-prompt.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-purpose-item.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-purpose-item.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-stack-item.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-stack-item.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-vendor-list.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/iab-vendor-list.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/icons/chevron-right-icon.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/icons/chevron-right-icon.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/icons/globe-icon.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/icons/globe-icon.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/icons/legitimate-interest-icon.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/icons/legitimate-interest-icon.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/icons/lock-icon.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/icons/lock-icon.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/index.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/index.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/lazy-surfaces.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/lazy-surfaces.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/legal-links.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/legal-links.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/link.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/link.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/manager.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/manager.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/manager.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/nuxt-consent-root.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/nuxt-consent-root.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/nuxt-root.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/nuxt-root.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/panel-link.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/panel-link.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/panel-trigger.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/panel-trigger.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/panel-trigger.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/preferences-manager-context.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/preferences-manager-context.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/preferences-manager-context.js.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/preferences-manager-context.js.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/preferences.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/preferences.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/preferences.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/prompt.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/prompt.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/prompt.vue.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/root.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/root.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/switch.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/switch.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/tag.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/tag.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/trigger-icon.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/trigger-icon.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/vendor-list.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/components/vendor-list.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/activeUI.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/activeUI.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/component.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/component.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/config.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/config.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/consent.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/consent.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/draft.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/draft.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/event-dispatcher.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/event-dispatcher.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/experiment.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/experiment.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/iab-translations.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/iab-translations.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/iabSelection.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/iabSelection.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/index.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/index.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/init.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/init.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/kernel.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/kernel.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/language.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/language.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/region.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/region.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/stubs/cookie.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/stubs/cookie.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/stubs/fetch.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/stubs/fetch.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/stubs/requestHeaders.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/stubs/requestHeaders.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/stubs/state.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/stubs/state.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-consent-policy-actions.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-consent-policy-actions.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-consent-scroll-lock.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-consent-scroll-lock.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-devtools-launcher.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-devtools-launcher.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-draggable.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-draggable.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-late-entry.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-late-entry.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-local-storage-ref.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-local-storage-ref.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-mounted.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-mounted.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-surface-translations.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-surface-translations.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-window-size.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/composables/use-window-size.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/config.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/config.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/devtools/bridge.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/devtools/bridge.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/devtools/constants.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/devtools/constants.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/devtools/page.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/devtools/page.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/devtools/plugin.nuxt.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/devtools/plugin.nuxt.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/devtools/services.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/devtools/services.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/kernel.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/kernel.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/modes.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/modes.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/nuxt-mode.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/nuxt-mode.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/plugin.nuxt.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/plugin.nuxt.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/accordion-content.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/accordion-content.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/accordion-item.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/accordion-item.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/accordion-root.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/accordion-root.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/accordion-trigger.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/accordion-trigger.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/dialog-content.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/dialog-content.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/dialog-overlay.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/dialog-overlay.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/dialog-portal.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/dialog-portal.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/dialog-root.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/dialog-root.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/focus-scope.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/focus-scope.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/index.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/index.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/keys.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/keys.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/context.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/context.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-auxiliary.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-auxiliary.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-content.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-content.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-control.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-control.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-header.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-header.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-leading.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-leading.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-meta.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-meta.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-root.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-root.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-title.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-title.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-trigger.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/preference-item-trigger.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/variants.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/preference-item/variants.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/switch-root.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/switch-root.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/switch-thumb.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/switch-thumb.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/switch-variants.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/switch-variants.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/tabs/context.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/tabs/context.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/tabs/tabs-content.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/tabs/tabs-content.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/tabs/tabs-list.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/tabs/tabs-list.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/tabs/tabs-root.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/tabs/tabs-root.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/tabs/tabs-trigger.d.vue.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/tabs/tabs-trigger.vue.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/use-focus-trap.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/primitives/use-focus-trap.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/root-overrides.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/root-overrides.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server-consent.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server-consent.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/build-options.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/build-options.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/build-options.nuxt.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/build-options.nuxt.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/consent-route.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/consent-route.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/devtools.get.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/devtools.get.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/init-prefetch.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/init-prefetch.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/init-prefetch.nuxt.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/init-prefetch.nuxt.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/inth-project-url.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/inth-project-url.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/inth-project-url.nuxt.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/inth-project-url.nuxt.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/local-fetch.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/local-fetch.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/route-factories.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/route-factories.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/server-fetch.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/server/server-fetch.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/shared-render.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/shared-render.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/theme-tokens.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/theme-tokens.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/utils/slot-attrs.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/utils/slot-attrs.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/utils/symbols.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/utils/symbols.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/vue/stubs.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/runtime/vue/stubs.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/vite.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/vite.js
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/vue-plugin.d.ts
- Executable scriptline 1
Executable file
packages/c15t/shims/vue/vue-plugin.js
- Executable scriptline 1
Executable file
packages/c15t/vitest.config.ts
- Executable scriptline 1
Executable file
packages/core/AGENTS.md
- Network accessline 22
[Documentation index](https://c15t.com/docs/llms.txt) · [Full Markdown context](https://c15t.com/llms-full.txt). Prefer the index and individual pages for focused tasks.
packages/core/CHANGELOG.md
- Access to secretsline 111
[Credential-related source omitted] - Access to secretsline 130
[Credential-related source omitted] - Access to secretsline 132
[Credential-related source omitted] - Access to secretsline 133
[Credential-related source omitted] - Access to secretsline 568
[Credential-related source omitted] - Access to secretsline 587
[Credential-related source omitted] - Access to secretsline 589
[Credential-related source omitted] - Access to secretsline 590
[Credential-related source omitted] - Network accessline 763
self-hosted backend records it in a new `consent.addtlConsent` column. Run the backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 764
backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. The backend keeps serving the last list it loaded when that endpoint fails. - Network accessline 765
`https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 840
self-hosted backend records it in a new `consent.addtlConsent` column. Run the backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 841
backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. The backend keeps serving the last list it loaded when that endpoint fails. - Network accessline 842
`https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 862
c15t v3 is stable and published under the `latest` tag. See the [3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 863
[3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 916
manifest(); // { type: 'manifest' } manifest({ resolve: 'browser', geoURL: '/api/geo' }); hosted({ backendURL: 'https://your-project.inth.app' }); - Network accessline 917
manifest({ resolve: 'browser', geoURL: '/api/geo' }); hosted({ backendURL: 'https://your-project.inth.app' }); offline({ policyRules }); - Network accessline 918
hosted({ backendURL: 'https://your-project.inth.app' }); - Access to secretsline 1861
[Credential-related source omitted] - Network accessline 2149
See [keep open tabs in step](https://c15t.com/docs/guides/consent-state#keep-open-tabs-in-step). - Network accessline 2214
- Pass `waitUntil` to Next.js `resolveConsent`, or `onBackgroundRevalidate` to TanStack Start `resolveConsent`, so serverless platforms keep a manifest request alive after the render stops waiting for it. - Code that retried the manifest ca - Network accessline 2216
- Next.js `resolveConsent` now refuses to forward `forwardHeaders` credentials to a plain `http://` manifest URL on a host other than loopback, matching the route handlers; the render falls back to the baseline state and reports the error. - Access to secretsline 2265
[Credential-related source omitted] - Network accessline 2319
- 184b491: Read the [c15t 2.3.0 changelog](https://c15t.com/changelog/2.3.0) for the complete release notes and upgrade context. - Network accessline 2358
Fix `www` handling in CORS origin matching. `*.example.com` now accepts `https://www.example.com`, and a schemeless `www.example.com` entry accepts both the apex and `www` forms. - Network accessline 2371
- Read the [c15t 2.2.0 changelog](https://c15t.com/changelog/2.2.0) for the complete release notes and upgrade context. - Network accessline 2467
- 32617c9: Changelog available at https://c15t.com/changelog/2.0.0 - Network accessline 2660
- 126a78b: https://c15t.com/changelog/2.0.0-rc.0 - Network accessline 2692
- 6c28663: Full Changelog: https://c15t.com/changelog/1.8.3 - Network accessline 2722
https://c15t.com/changelog/1.8.2 - Network accessline 2746
- 68a7324: Full Changelog: https://c15t.com/changelog/1.8.0 - Network accessline 2793
- aa16d03: You can find the full changelog at https://c15t.com/changelog/1.7.0 - Network accessline 2823
- 84ab0c7: For a full detailed changelog see the [v1.6.0 release notes](https://c15t.com/changelog/1.6.0).
packages/core/README.md
- Network accessline 1
<p align="center"> <a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fcore" target="_blank" rel="noopener noreferrer"> - Network accessline 2
<a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fcore" target="_blank" rel="noopener noreferrer"> - Network accessline 12
<p> <a href="https://www.npmjs.com/package/@c15t/core"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/%40c15t%2Fcore.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/%40c15t%2Fcore.sv - Network accessline 13
<a href="https://www.npmjs.com/package/@c15t/core"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/%40c15t%2Fcore.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/%40c15t%2Fcore.svg?va - Network accessline 14
<a href="https://github.com/c15t/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/stars.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15t/c15t/stars.svg?varian - Network accessline 15
<a href="https://github.com/c15t/c15t/blob/main/LICENSE.md"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/license.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15 - Network accessline 16
<a href="https://c15t.link/discord"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/discord/1312171102268690493.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/discord/1312171102268690493.svg - Network accessline 17
<a href="https://skills.sh/c15t/skills/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/skills/c15t/skills/c15t.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/skills/c15t/skills/c15t.sv - Network accessline 18
<a href="https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fcore"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/badge/Made%20By-Inth-ffc803.svg?color=ffc803&l - Network accessline 23
c15t is used by [2,100+ sites](https://www.wappalyzer.com/technologies/cookie-compliance/c15t/), including expo.dev, zed.dev, unkey.dev, mintlify.com, and sazabi.com. - Network accessline 36
- Node.js 20.19 or later - An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend - Network accessline 37
- An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend - Network accessline 45
The [`c15t`](https://www.npmjs.com/package/c15t) package ships the same engine at `c15t` and `c15t/runtime`, plus every framework adapter. - Network accessline 51
3. Render your banner from `runtime.kernel.getSnapshot()` and update it from `runtime.kernel.subscribe()` 4. Record choices with `runtime.kernel.commands.save('all')`, `save('none')`, or an object such as `{ measurement: true }` 5. For the - Network accessline 53
5. For the full walkthrough, see the [headless runtime guide](https://c15t.com/docs/frameworks/javascript/headless) - Network accessline 60
export const runtime = createConsentRuntime({ mode: hosted({ backendURL: 'https://your-project.inth.app' }), - Network accessline 61
mode: hosted({ backendURL: 'https://your-project.inth.app' }), - Network accessline 67
c15t needs a backend to serve policies and keep consent records. [Inth](https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fcore) runs it for you. It stores every choice with its region and policy - Network accessline 75
See the [documentation](https://c15t.com/docs/frameworks/javascript/headless) for guides, API reference, and examples. - Network accessline 79
- [c15t](https://www.npmjs.com/package/c15t): this engine plus the React, Next.js, Vue, Nuxt, Astro, and TanStack Start adapters in one install - Network accessline 80
- [@c15t/browser](https://www.npmjs.com/package/@c15t/browser): a stock banner and preference dialog for plain JavaScript and script-tag sites - Network accessline 81
- [@c15t/integrations](https://www.npmjs.com/package/@c15t/integrations): consent-aware analytics, tag manager, pixel, and widget loaders - Network accessline 87
On the web, every page of the [c15t docs](https://c15t.com/docs) has a Markdown version, and [llms.txt](https://c15t.com/docs/llms.txt) lists them all. Install the c15t agent skills with `npx skills add c15t/skills`. - Network accessline 91
- Join our [Discord community](https://c15t.link/discord) - Network accessline 92
- Open an issue on our [GitHub repository](https://github.com/c15t/c15t/issues) - Network accessline 93
- Visit [inth.com](https://inth.com) and use the chat widget - Network accessline 98
- Read the [contribution guidelines](https://c15t.com/docs/oss/contributing) before you open a pull request - Network accessline 99
- Follow the [code of conduct](https://c15t.com/docs/oss/code-of-conduct) - Network accessline 103
Do not open a public issue for a security vulnerability. Report it privately through [GitHub's vulnerability reporting](https://github.com/c15t/c15t/security/advisories/new). We examine every valid report. - Network accessline 111
[Apache License 2.0](https://github.com/c15t/c15t/blob/main/LICENSE.md) - Network accessline 115
**Built by [Inth](https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fcore)**
packages/core/docs/integrations/cloudflare-zaraz.md
- Network accessline 40
after the first synchronization. DOM-ready, timer and click triggers you add in Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 41
Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) and [pageview settings](https://developers.cloudflare.com/zaraz/reference/setti - Network accessline 42
[purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 43
and [pageview settings](https://developers.cloudflare.com/zaraz/reference/settings/). - Network accessline 73
for tools that Zaraz already runs, including a separate `@c15t/integrations` helper for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) - Network accessline 74
for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) once. - Network accessline 75
[Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) - Network accessline 80
Complete your [framework quickstart](https://c15t.com/docs/frameworks) first. Keep its Inth - Network accessline 106
keeps passing only `state`. App Router, Pages Router and static export all read the same file. See [Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts). - Network accessline 108
[Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts). - Network accessline 112
Import the configuration into your root route and pass it to the existing `ConsentRoot` as a top-level prop. Keep the loader from the [TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 114
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 123
A server function's return value must be serializable, and script configurations carry callbacks. See [TanStack Start scripts](https://c15t.com/docs/frameworks/tanstack-start/scripts). - Network accessline 125
[TanStack Start scripts](https://c15t.com/docs/frameworks/tanstack-start/scripts). - Network accessline 138
`mode` is the `manifest()` value from the [React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 139
[React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 141
[React scripts and embeds](https://c15t.com/docs/frameworks/react/scripts). - Network accessline 159
`nuxt.config.ts`, which reaches the browser as JSON and drops the vendor callbacks. Write the vendor IDs into `consent-scripts.ts`. See [Nuxt scripts and embeds](https://c15t.com/docs/frameworks/nuxt/scripts). - Network accessline 161
[Nuxt scripts and embeds](https://c15t.com/docs/frameworks/nuxt/scripts). - Network accessline 178
script loader when the app mounts, after it has applied the visitor's stored choice. Do not also call `createScriptLoader` from a component. See [Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts). - Network accessline 180
[Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts). - Network accessline 184
Add the scripts to the client entrypoint from the [Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 185
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 218
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart). - Network accessline 223
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 224
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 258
once that category is allowed, and reloads the page when the visitor withdraws it. Helper options on this page, such as `loadMode`, do not apply to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/scripts). - Network accessline 260
to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/scripts).
packages/core/knip.json
packages/core/package.json
- Executable scriptline 1
Executable file - Network accessline 36
"typescript" ], "homepage": "https://c15t.com/docs/frameworks/javascript/quickstart", - Network accessline 37
], "homepage": "https://c15t.com/docs/frameworks/javascript/quickstart", "bugs": { - Network accessline 38
"homepage": "https://c15t.com/docs/frameworks/javascript/quickstart", - Network accessline 39
"bugs": { "url": "https://github.com/c15t/c15t/issues" }, - Network accessline 40
"url": "https://github.com/c15t/c15t/issues" - Network accessline 43
"repository": { "type": "git", "url": "https://github.com/c15t/c15t.git", - Network accessline 44
"type": "git", "url": "https://github.com/c15t/c15t.git", "directory": "packages/core" - Network accessline 45
"url": "https://github.com/c15t/c15t.git",
packages/core/readme.json
- Network accessline 12
"prerequisites": [ "Node.js 20.19 or later", "An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" - Network accessline 13
"Node.js 20.19 or later", "An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" ], - Network accessline 14
"An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" - Network accessline 18
"```bash\npnpm add @c15t/core\n```", "", "The [`c15t`](https://www.npmjs.com/package/c15t) package ships the same engine at `c15t` and `c15t/runtime`, plus every framework adapter." - Network accessline 19
"", "The [`c15t`](https://www.npmjs.com/package/c15t) package ships the same engine at `c15t` and `c15t/runtime`, plus every framework adapter." ], - Network accessline 20
"The [`c15t`](https://www.npmjs.com/package/c15t) package ships the same engine at `c15t` and `c15t/runtime`, plus every framework adapter." - Network accessline 25
"Render your banner from `runtime.kernel.getSnapshot()` and update it from `runtime.kernel.subscribe()`", "Record choices with `runtime.kernel.commands.save('all')`, `save('none')`, or an object such as `{ measurement: true }`", "For th - Network accessline 26
"Record choices with `runtime.kernel.commands.save('all')`, `save('none')`, or an object such as `{ measurement: true }`", "For the full walkthrough, see the [headless runtime guide](https://c15t.com/docs/frameworks/javascript/headless)", - Network accessline 27
"For the full walkthrough, see the [headless runtime guide](https://c15t.com/docs/frameworks/javascript/headless)", - Network accessline 28
"```ts\n// src/consent-runtime.ts\nimport { hosted } from '@c15t/core'\nimport { createConsentRuntime } from '@c15t/core/runtime'\n\nexport const runtime = createConsentRuntime({\n mode: hosted({ backendURL: 'https://your-project.inth.app' - Network accessline 29
], "docsLink": "https://c15t.com/docs/frameworks/javascript/headless", "quickStartLink": "https://c15t.com/docs/frameworks/javascript/headless", - Network accessline 30
"docsLink": "https://c15t.com/docs/frameworks/javascript/headless", - Network accessline 31
"quickStartLink": "https://c15t.com/docs/frameworks/javascript/headless", - Network accessline 32
"githubLink": "https://github.com/c15t/c15t", - Network accessline 33
"showCLIGeneration": false, "customSections": { "Related Packages": "- [c15t](https://www.npmjs.com/package/c15t): this engine plus the React, Next.js, Vue, Nuxt, Astro, and TanStack Start adapters in one install\n- [@c15t/browser](https - Network accessline 34
"customSections": { "Related Packages": "- [c15t](https://www.npmjs.com/package/c15t): this engine plus the React, Next.js, Vue, Nuxt, Astro, and TanStack Start adapters in one install\n- [@c15t/browser](https://www.npmjs.com/package/@c15 - Network accessline 35
"Related Packages": "- [c15t](https://www.npmjs.com/package/c15t): this engine plus the React, Next.js, Vue, Nuxt, Astro, and TanStack Start adapters in one install\n- [@c15t/browser](https://www.npmjs.com/package/@c15t/browser): a stock ba
packages/core/rslib.config.ts
- Executable scriptline 1
Executable file
packages/core/src/__tests__/ad-tech-provider-cache.test.ts
packages/core/src/__tests__/build.test.ts
- Executable scriptline 1
Executable file - Network accessline 43
const optionsFor = (rootDir: string) => ({ backendURL: 'https://consent.example.com', fetch: vi - Network accessline 44
backendURL: 'https://consent.example.com', fetch: vi .fn<typeof globalThis.fetch>() - Network accessline 104
); expect(code).toContain('build-test'); expect(code).toContain('https://consent.example.com'); - Network accessline 105
expect(code).toContain('build-test'); expect(code).toContain('https://consent.example.com'); expect(options.fetch).toHaveBeenCalledTimes(1); - Network accessline 106
expect(code).toContain('https://consent.example.com'); expect(options.fetch).toHaveBeenCalledTimes(1); await expect(stat(join(root, 'src/c15t-manifest.ts'))).rejects.toThrow(); - Network accessline 127
); expect(options.fetch).not.toHaveBeenCalled(); expect(code).toContain('https://consent.example.com'); - Network accessline 128
expect(options.fetch).not.toHaveBeenCalled(); expect(code).toContain('https://consent.example.com'); const withoutURL = await buildEntry( - Network accessline 129
expect(code).toContain('https://consent.example.com'); - Network accessline 185
expect(options.fetch).not.toHaveBeenCalled(); expect(code).not.toContain('__c15t_build_snapshot__'); expect(code).toContain('https://consent.example.com'); - Network accessline 187
expect(code).toContain('https://consent.example.com'); - Network accessline 218
expect(client).toContain('https://consent.example.com'); - Network accessline 246
expect(source?.includes('build-test')).toBe(included); expect(source).toContain( 'export const backendURL = "https://consent.example.com";' - Network accessline 247
expect(source).toContain( 'export const backendURL = "https://consent.example.com";' ); - Network accessline 248
'export const backendURL = "https://consent.example.com";' - Access to secretsline 340
[Credential-related source omitted] - Network accessline 342
await writeFile( join(root, '.env.production'), 'VITE_C15T_BACKEND_URL="https://env.example.com/api"\n' - Network accessline 343
join(root, '.env.production'), 'VITE_C15T_BACKEND_URL="https://env.example.com/api"\n' ); - Network accessline 344
'VITE_C15T_BACKEND_URL="https://env.example.com/api"\n' ); const { fetch } = optionsFor(root); - Network accessline 353
root, }); expect(env.VITE_C15T_BACKEND_URL).toBe('https://env.example.com/api'); - Network accessline 354
}); expect(env.VITE_C15T_BACKEND_URL).toBe('https://env.example.com/api'); expect( - Network accessline 355
expect(env.VITE_C15T_BACKEND_URL).toBe('https://env.example.com/api'); - Network accessline 359
plugin.resolveId(GENERATED_MODULE_IDS[0]) as string ) ).toContain('export const backendURL = "https://env.example.com/api";'); - Network accessline 360
) ).toContain('export const backendURL = "https://env.example.com/api";'); expect(fetch).toHaveBeenCalledWith( - Network accessline 361
).toContain('export const backendURL = "https://env.example.com/api";'); expect(fetch).toHaveBeenCalledWith( 'https://env.example.com/api/manifest', - Network accessline 362
expect(fetch).toHaveBeenCalledWith( 'https://env.example.com/api/manifest', expect.any(Object) - Network accessline 363
'https://env.example.com/api/manifest', - Network accessline 389
test('alone gives the backend URL and sets VITE_C15T_BACKEND_URL', async () => { const env: Record<string, unknown> = { VITE_INTH_PROJECT_URL: 'https://inth.example.com', - Network accessline 390
const env: Record<string, unknown> = { VITE_INTH_PROJECT_URL: 'https://inth.example.com', }; - Network accessline 391
VITE_INTH_PROJECT_URL: 'https://inth.example.com', }; const { fetch, source } = await resolveBackendURL(env); - Network accessline 393
const { fetch, source } = await resolveBackendURL(env); expect(source).toContain( 'export const backendURL = "https://inth.example.com";' - Network accessline 394
expect(source).toContain( 'export const backendURL = "https://inth.example.com";' ); - Network accessline 395
'export const backendURL = "https://inth.example.com";' - Network accessline 396
); expect(env.VITE_C15T_BACKEND_URL).toBe('https://inth.example.com'); expect(fetch).toHaveBeenCalledWith( - Network accessline 397
expect(env.VITE_C15T_BACKEND_URL).toBe('https://inth.example.com'); expect(fetch).toHaveBeenCalledWith( 'https://inth.example.com/manifest', - Network accessline 398
expect(fetch).toHaveBeenCalledWith( 'https://inth.example.com/manifest', expect.any(Object) - Network accessline 399
'https://inth.example.com/manifest', - Network accessline 404
test('loses to VITE_C15T_BACKEND_URL when both are set', async () => { const { source } = await resolveBackendURL({ VITE_C15T_BACKEND_URL: 'https://c15t.example.com', - Network accessline 405
const { source } = await resolveBackendURL({ VITE_C15T_BACKEND_URL: 'https://c15t.example.com', VITE_INTH_PROJECT_URL: 'https://inth.example.com', - Network accessline 406
VITE_C15T_BACKEND_URL: 'https://c15t.example.com', - Network accessline 407
VITE_INTH_PROJECT_URL: 'https://inth.example.com', - Network accessline 408
}); expect(source).toContain( 'export const backendURL = "https://c15t.example.com";' - Network accessline 409
expect(source).toContain( 'export const backendURL = "https://c15t.example.com";' ); - Network accessline 410
'export const backendURL = "https://c15t.example.com";' - Network accessline 414
test('an explicit backendURL beats both variables', async () => { const env: Record<string, unknown> = { VITE_C15T_BACKEND_URL: 'https://c15t.example.com', - Network accessline 415
const env: Record<string, unknown> = { VITE_C15T_BACKEND_URL: 'https://c15t.example.com', VITE_INTH_PROJECT_URL: 'https://inth.example.com', - Network accessline 416
VITE_C15T_BACKEND_URL: 'https://c15t.example.com', - Network accessline 417
VITE_INTH_PROJECT_URL: 'https://inth.example.com', - Network accessline 418
}; const { source } = await resolveBackendURL(env, { backendURL: 'https://option.example.com', - Network accessline 419
const { source } = await resolveBackendURL(env, { backendURL: 'https://option.example.com', }); - Network accessline 420
backendURL: 'https://option.example.com', - Network accessline 421
}); expect(source).toContain( 'export const backendURL = "https://option.example.com";' - Network accessline 422
expect(source).toContain( 'export const backendURL = "https://option.example.com";' ); - Network accessline 423
'export const backendURL = "https://option.example.com";' - Network accessline 458
const devOnly = createLogger(); await load( consentManifest({ backendURL: 'https://consent.example.com', fetch }), - Network accessline 459
await load( consentManifest({ backendURL: 'https://consent.example.com', fetch }), devOnly, - Network accessline 460
consentManifest({ backendURL: 'https://consent.example.com', fetch }), - Network accessline 465
expect(devOnly.warn).not.toHaveBeenCalled(); await load( consentManifest({ backendURL: 'https://consent.example.com', fetch }), - Network accessline 466
await load( consentManifest({ backendURL: 'https://consent.example.com', fetch }), logger - Network accessline 467
consentManifest({ backendURL: 'https://consent.example.com', fetch }), - Network accessline 614
expect(tag).toBeGreaterThan(html.indexOf('<meta charset="UTF-8" />')); expect(tag).toBeLessThan(html.indexOf('rel="stylesheet"')); expect(html).toContain('"backendURL":"https://consent.example.com"'); - Network accessline 615
expect(tag).toBeLessThan(html.indexOf('rel="stylesheet"')); expect(html).toContain('"backendURL":"https://consent.example.com"'); expect(html).toContain('"journey":"auto"'); - Network accessline 616
expect(html).toContain('"backendURL":"https://consent.example.com"'); expect(html).toContain('"journey":"auto"'); expect(options.fetch).not.toHaveBeenCalled(); - Network accessline 743
test('a page without a <head> keeps the script after the doctype', () => { const plugin = createConsentManifestPlugin( { backendURL: 'https://consent.example.com' }, - Network accessline 744
const plugin = createConsentManifestPlugin( { backendURL: 'https://consent.example.com' }, { envNames: [], label: 'test' } - Network accessline 745
{ backendURL: 'https://consent.example.com' }, - Network accessline 779
const logger = createLogger(); const plugin = createConsentManifestPlugin( { backendURL: 'https://consent.example.com' }, - Network accessline 780
const plugin = createConsentManifestPlugin( { backendURL: 'https://consent.example.com' }, { envNames: [], label: 'test', serverRendered: true } - Network accessline 781
{ backendURL: 'https://consent.example.com' }, - Network accessline 852
expect(server).toContain('"revision": "build-test"'); expect(server).toContain( 'export const backendURL = "https://consent.example.com";' - Network accessline 853
expect(server).toContain( 'export const backendURL = "https://consent.example.com";' ); - Network accessline 854
'export const backendURL = "https://consent.example.com";' - Network accessline 878
); expect({ ...(await import(server)) }).toEqual({ backendURL: 'https://consent.example.com', - Network accessline 879
expect({ ...(await import(server)) }).toEqual({ backendURL: 'https://consent.example.com', snapshot: MANIFEST_FIXTURE, - Network accessline 880
backendURL: 'https://consent.example.com', - Network accessline 906
test.each([ ['https://consent.example.com', 'https://consent.example.com/manifest'], - Network accessline 907
['https://consent.example.com', 'https://consent.example.com/manifest'], - Network accessline 908
['https://consent.example.com/', 'https://consent.example.com/manifest'], - Network accessline 909
[ 'https://consent.example.com/api/c15t///', 'https://consent.example.com/api/c15t/manifest', - Network accessline 910
'https://consent.example.com/api/c15t///', - Network accessline 911
'https://consent.example.com/api/c15t/manifest', - Network accessline 912
], [ 'https://consent.example.com/api/?key=x#config', - Network accessline 913
[ 'https://consent.example.com/api/?key=x#config', 'https://consent.example.com/api/manifest?key=x#config', - Network accessline 914
'https://consent.example.com/api/?key=x#config', - Network accessline 915
'https://consent.example.com/api/manifest?key=x#config', - Network accessline 974
const { error, root } = await write({ fetch }); expect(error?.message).toBe( "test/build: could not fetch the consent manifest from https://consent.example.com/manifest during the build (fetch failed: connect ECONNREFUSED 127.0.0.1:9). - Network accessline 975
expect(error?.message).toBe( "test/build: could not fetch the consent manifest from https://consent.example.com/manifest during the build (fetch failed: connect ECONNREFUSED 127.0.0.1:9). Set `C15T_ON_BUILD_ERROR=runtime` (or `onBuildErr - Network accessline 976
"test/build: could not fetch the consent manifest from https://consent.example.com/manifest during the build (fetch failed: connect ECONNREFUSED 127.0.0.1:9). Set `C15T_ON_BUILD_ERROR=runtime` (or `onBuildError: 'runtime'`) to deploy with r - Network accessline 986
expect(source).toContain(STUB); expect(logger.warn).toHaveBeenCalledWith( 'could not fetch the consent manifest from https://consent.example.com/manifest during dev (fetch failed: connect ECONNREFUSED 127.0.0.1:9). The server fetches i - Network accessline 987
expect(logger.warn).toHaveBeenCalledWith( 'could not fetch the consent manifest from https://consent.example.com/manifest during dev (fetch failed: connect ECONNREFUSED 127.0.0.1:9). The server fetches it at runtime instead. A production - Network accessline 988
'could not fetch the consent manifest from https://consent.example.com/manifest during dev (fetch failed: connect ECONNREFUSED 127.0.0.1:9). The server fetches it at runtime instead. A production build stops on this error.' - Network accessline 1115
test('keeps an explicit manifest URL intact, including its query', async () => { const options = optionsFor(await createRoot()); const manifestURL = 'https://consent.example.com/public.json?version=2'; - Network accessline 1116
const options = optionsFor(await createRoot()); const manifestURL = 'https://consent.example.com/public.json?version=2'; await loadBuildManifest({ ...options, manifestURL }, 'test/build'); - Network accessline 1117
const manifestURL = 'https://consent.example.com/public.json?version=2'; await loadBuildManifest({ ...options, manifestURL }, 'test/build'); expect(options.fetch).toHaveBeenCalledWith(manifestURL, expect.any(Object)); - Network accessline 1125
await loadBuildManifest( { backendURL: 'https://consent.example.com/api/', - Network accessline 1126
{ backendURL: 'https://consent.example.com/api/', fetch: options.fetch, - Network accessline 1127
backendURL: 'https://consent.example.com/api/', fetch: options.fetch, }, - Network accessline 1132
).toEqual(MANIFEST_FIXTURE); expect(options.fetch).toHaveBeenCalledWith( 'https://consent.example.com/api/manifest', - Network accessline 1133
expect(options.fetch).toHaveBeenCalledWith( 'https://consent.example.com/api/manifest', expect.any(Object) - Network accessline 1134
'https://consent.example.com/api/manifest', - Access to secretsline 1271
[Credential-related source omitted] - Network accessline 1273
await writeFile( join(root, '.env'), 'NEXT_PUBLIC_C15T_BACKEND_URL=https://c15t.example.com\n' - Network accessline 1274
[Credential-related source omitted] - Access to secretsline 1274
[Credential-related source omitted] - Network accessline 1275
'NEXT_PUBLIC_C15T_BACKEND_URL=https://c15t.example.com\n' - Network accessline 1276
); vi.stubEnv('NEXT_PUBLIC_INTH_PROJECT_URL', 'https://inth.example.com'); expect( - Network accessline 1277
vi.stubEnv('NEXT_PUBLIC_INTH_PROJECT_URL', 'https://inth.example.com'); - Network accessline 1281
{ root } ) ).toBe('https://c15t.example.com'); - Network accessline 1282
) ).toBe('https://c15t.example.com'); }); - Network accessline 1283
).toBe('https://c15t.example.com'); - Network accessline 1288
await writeFile( join(root, '.env'), 'NEXT_PUBLIC_C15T_BACKEND_URL=\nNEXT_PUBLIC_INTH_PROJECT_URL=https://inth.example.com\n' - Network accessline 1289
[Credential-related source omitted] - Access to secretsline 1289
[Credential-related source omitted] - Network accessline 1290
'NEXT_PUBLIC_C15T_BACKEND_URL=\nNEXT_PUBLIC_INTH_PROJECT_URL=https://inth.example.com\n' - Network accessline 1295
{ root } ) ).toBe('https://inth.example.com'); - Network accessline 1296
) ).toBe('https://inth.example.com'); }); - Network accessline 1297
).toBe('https://inth.example.com'); - Network accessline 1301
describe('readBuildEnv quoting', () => { test.each([ ['"https://api.example" # production'], - Network accessline 1302
test.each([ ['"https://api.example" # production'], ["'https://api.example' # production"], - Network accessline 1303
['"https://api.example" # production'], - Network accessline 1304
["'https://api.example' # production"], - Network accessline 1305
['"https://api.example"'], - Network accessline 1306
['https://api.example # production'], - Network accessline 1307
['https://api.example#production'], - Network accessline 1308
['https://api.example'], - Network accessline 1311
[Credential-related source omitted] - Access to secretsline 1311
[Credential-related source omitted] - Network accessline 1312
expect(readBuildEnv(['PUBLIC_C15T_BACKEND_URL'], { root })).toBe( 'https://api.example' ); - Network accessline 1313
'https://api.example' - Network accessline 1322
test.each([ [ref('BASE'), 'https://api.example'], - Network accessline 1323
[ref('BASE'), 'https://api.example'], - Network accessline 1324
['$BASE', 'https://api.example'], - Network accessline 1325
[`${ref('BASE')}/c15t`, 'https://api.example/c15t'], - Access to secretsline 1327
[Credential-related source omitted] - Network accessline 1329
await writeFile( join(root, '.env'), `BASE=https://api.example\nPUBLIC_C15T_BACKEND_URL=${value}\n` - Network accessline 1330
[Credential-related source omitted] - Access to secretsline 1330
[Credential-related source omitted] - Network accessline 1331
`BASE=https://api.example\nPUBLIC_C15T_BACKEND_URL=${value}\n` - Network accessline 1338
await writeFile( join(root, '.env'), `BASE=https://file.example\nPUBLIC_C15T_BACKEND_URL=${ref('BASE')}\n` - Network accessline 1339
[Credential-related source omitted] - Access to secretsline 1339
[Credential-related source omitted] - Network accessline 1340
`BASE=https://file.example\nPUBLIC_C15T_BACKEND_URL=${ref('BASE')}\n` - Network accessline 1341
); vi.stubEnv('BASE', 'https://process.example'); expect(readBuildEnv(['PUBLIC_C15T_BACKEND_URL'], { root })).toBe( - Network accessline 1342
vi.stubEnv('BASE', 'https://process.example'); - Network accessline 1343
expect(readBuildEnv(['PUBLIC_C15T_BACKEND_URL'], { root })).toBe( 'https://process.example' ); - Network accessline 1344
'https://process.example'
packages/core/src/__tests__/client-policy-graph.test.ts
- Executable scriptline 1
Executable file
packages/core/src/__tests__/events.test.ts
- Executable scriptline 1
Executable file
packages/core/src/__tests__/fixtures/cors-safelist.ts
- Executable scriptline 1
Executable file - Network accessline 8
* and so never reaches the backend) fails it. * * @see https://fetch.spec.whatwg.org/#cors-safelisted-request-header - Network accessline 9
* * @see https://fetch.spec.whatwg.org/#cors-safelisted-request-header */ - Network accessline 10
* @see https://fetch.spec.whatwg.org/#cors-safelisted-request-header
packages/core/src/__tests__/fixtures/kernel-fixtures.ts
- Executable scriptline 1
Executable file
packages/core/src/__tests__/gvl-cache-entrypoints.test.ts
packages/core/src/__tests__/gvl-cache.test.ts
- Executable scriptline 1
Executable file - Network accessline 29
language: 'en', now: 0, url: 'https://gvl.example', - Network accessline 30
now: 0, url: 'https://gvl.example', }); - Network accessline 31
url: 'https://gvl.example', - Network accessline 36
language: 'en', now: 3_599_000, url: 'https://gvl.example', - Network accessline 37
now: 3_599_000, url: 'https://gvl.example', }); - Network accessline 38
url: 'https://gvl.example', }); expect(fetch).toHaveBeenCalledTimes(1); - Network accessline 44
language: 'en', now: 3_601_000, url: 'https://gvl.example', - Network accessline 45
now: 3_601_000, url: 'https://gvl.example', }); - Network accessline 46
url: 'https://gvl.example', }); expect(fetch).toHaveBeenCalledTimes(2); - Network accessline 58
language: 'de', now: 0, url: 'https://gvl.example', - Network accessline 59
now: 0, url: 'https://gvl.example', }), - Network accessline 60
url: 'https://gvl.example', - Network accessline 65
language: 'de', now: 0, url: 'https://gvl.example', - Network accessline 66
now: 0, url: 'https://gvl.example', }), - Network accessline 67
url: 'https://gvl.example', - Network accessline 72
language: 'fr', now: 0, url: 'https://gvl.example', - Network accessline 73
now: 0, url: 'https://gvl.example', }), - Network accessline 74
url: 'https://gvl.example', - Network accessline 91
language: 'en', now: 0, url: 'https://gvl.example', - Network accessline 92
now: 0, url: 'https://gvl.example', }); - Network accessline 93
url: 'https://gvl.example', - Network accessline 99
language: 'en', now: 20_000, url: 'https://gvl.example', - Network accessline 100
now: 20_000, url: 'https://gvl.example', }); - Network accessline 101
url: 'https://gvl.example', - Network accessline 109
language: 'en', now: 0, url: 'https://gvl.example', - Network accessline 110
now: 0, url: 'https://gvl.example', }) - Network accessline 111
url: 'https://gvl.example', - Network accessline 123
language: 'en', now: 0, url: 'https://gvl.example', - Network accessline 124
now: 0, url: 'https://gvl.example', }) - Network accessline 125
url: 'https://gvl.example', - Network accessline 131
language: 'en', now: 1000, url: 'https://gvl.example', - Network accessline 132
now: 1000, url: 'https://gvl.example', }); - Network accessline 133
url: 'https://gvl.example', }); expect(fetch).toHaveBeenCalledTimes(1); - Network accessline 140
language: 'en', now: 2000, url: 'https://gvl.example', - Network accessline 141
now: 2000, url: 'https://gvl.example', }); - Network accessline 142
url: 'https://gvl.example', }); expect(fetch).toHaveBeenCalledTimes(2);
packages/core/src/__tests__/gvl-reference.test.ts
- Executable scriptline 1
Executable file - Network accessline 22
const url = createGvlReferenceURL('/privacy/init', gvl, language); const response = await serveGvlReference( new Request(`https://app.test${url}`), - Network accessline 23
const response = await serveGvlReference( new Request(`https://app.test${url}`), load - Network accessline 24
new Request(`https://app.test${url}`), - Network accessline 39
( await serveGvlReference( new Request(`https://app.test/init${query}`), - Network accessline 40
await serveGvlReference( new Request(`https://app.test/init${query}`), load - Network accessline 41
new Request(`https://app.test/init${query}`), - Network accessline 49
test('never caches a different version under the requested version', async () => { const response = await serveGvlReference( new Request('https://app.test/init?c15t-gvl=41'), - Network accessline 50
const response = await serveGvlReference( new Request('https://app.test/init?c15t-gvl=41'), () => Promise.resolve(gvl) - Network accessline 51
new Request('https://app.test/init?c15t-gvl=41'), - Network accessline 58
const load = vi.fn(); expect( await serveGvlReference(new Request('https://app.test/init'), load) - Network accessline 59
expect( await serveGvlReference(new Request('https://app.test/init'), load) ).toBeNull(); - Network accessline 60
await serveGvlReference(new Request('https://app.test/init'), load) - Network accessline 105
legIntPurposes: [], name: 'Custom vendor', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 106
name: 'Custom vendor', privacyPolicyUrl: 'https://example.com/privacy', purposes: [], - Network accessline 107
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 130
const input = { adTechProviders: [ { id: 89, name: 'First', policyUrl: 'https://first.example/privacy' }, - Network accessline 131
adTechProviders: [ { id: 89, name: 'First', policyUrl: 'https://first.example/privacy' }, { id: 2577, name: 'Second', policyUrl: 'https://second.example/p' }, - Network accessline 132
{ id: 89, name: 'First', policyUrl: 'https://first.example/privacy' }, - Network accessline 133
{ id: 2577, name: 'Second', policyUrl: 'https://second.example/p' },
packages/core/src/__tests__/hosted-record-graph.test.ts
- Executable scriptline 1
Executable file - Network accessline 149
); const records = createHostedRecordTransport({ backendURL: 'https://consent.example.com/', - Network accessline 150
const records = createHostedRecordTransport({ backendURL: 'https://consent.example.com/', domain: 'example.com', - Network accessline 151
backendURL: 'https://consent.example.com/', domain: 'example.com', fetch, - Network accessline 168
expect(result).toEqual({ ok: true, subjectId: 'sub_1' }); const [url, init] = fetch.mock.calls[0] as unknown as [string, RequestInit]; expect(url).toBe('https://consent.example.com/subjects'); - Network accessline 169
const [url, init] = fetch.mock.calls[0] as unknown as [string, RequestInit]; expect(url).toBe('https://consent.example.com/subjects'); expect(JSON.parse(String(init.body))).toMatchObject({ - Network accessline 170
expect(url).toBe('https://consent.example.com/subjects');
packages/core/src/__tests__/iab-unavailable.test.ts
- Executable scriptline 1
Executable file
packages/core/src/__tests__/init-output-policy-proof.test.ts
- Executable scriptline 1
Executable file
packages/core/src/__tests__/init-output.test.ts
- Executable scriptline 1
Executable file - Network accessline 155
test('Additional Consent providers survive the server round trip', () => { const adTechProviders = [ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' }, - Network accessline 156
const adTechProviders = [ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' }, ]; - Network accessline 157
{ id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' },
packages/core/src/__tests__/kernel.test.ts
- Executable scriptline 1
Executable file
packages/core/src/__tests__/manifest-browser.test.ts
- Executable scriptline 1
Executable file - Network accessline 54
test('carries its options as data and reports the manifest kind', () => { const mode = manifest({ backendURL: 'https://backend.example', - Network accessline 55
const mode = manifest({ backendURL: 'https://backend.example', snapshot: everywhereManifest, - Network accessline 56
backendURL: 'https://backend.example', - Network accessline 74
const fetchSpy = vi.fn<typeof fetch>(); const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 75
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 76
backendURL: 'https://backend.example', fetch: fetchSpy, snapshot: everywhereManifest, - Network accessline 92
test('loads the base copy of every bundled language', async () => { const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 93
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', snapshot: everywhereManifest, - Network accessline 94
backendURL: 'https://backend.example', - Network accessline 112
); const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 113
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 114
backendURL: 'https://backend.example', fetch: fetchSpy, snapshot: { - Network accessline 118
iab: { enabled: true, gvl: { url: 'https://gvl.example/vendor-list', version: 42 }, - Network accessline 119
enabled: true, gvl: { url: 'https://gvl.example/vendor-list', version: 42 }, }, - Network accessline 120
gvl: { url: 'https://gvl.example/vendor-list', version: 42 }, - Network accessline 137
expect(fetchSpy).toHaveBeenCalledWith( 'https://gvl.example/vendor-list', - Network accessline 138
'https://gvl.example/vendor-list', - Network accessline 148
const providers = { providers: { '89': { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 149
providers: { '89': { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, }, - Network accessline 150
'89': { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 154
Promise.resolve( jsonResponse( String(input).startsWith('https://lists.example/ac-browser') - Network accessline 155
jsonResponse( String(input).startsWith('https://lists.example/ac-browser') ? providers - Network accessline 156
String(input).startsWith('https://lists.example/ac-browser') - Network accessline 161
); const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 162
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 163
backendURL: 'https://backend.example', fetch: fetchSpy, snapshot: { - Network accessline 168
additionalConsent: { providers: [89], url: 'https://lists.example/ac-browser', - Network accessline 169
providers: [89], url: 'https://lists.example/ac-browser', }, - Network accessline 170
url: 'https://lists.example/ac-browser', - Network accessline 171
}, enabled: true, gvl: { url: 'https://gvl.example/vendor-list', version: 42 }, - Network accessline 172
enabled: true, gvl: { url: 'https://gvl.example/vendor-list', version: 42 }, }, - Network accessline 173
gvl: { url: 'https://gvl.example/vendor-list', version: 42 }, - Network accessline 190
expect(response?.adTechProviders).toEqual([ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 191
{ id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 194
const providerRequest = fetchSpy.mock.calls.find(([input]) => String(input).startsWith('https://lists.example/ac-browser') - Network accessline 195
String(input).startsWith('https://lists.example/ac-browser') - Network accessline 202
test('withdraws ad tech providers once the manifest stops listing them', async () => { const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 203
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', fetch: vi.fn<typeof fetch>(() => - Network accessline 204
backendURL: 'https://backend.example', fetch: vi.fn<typeof fetch>(() => Promise.resolve(jsonResponse({ vendorListVersion: 42, vendors: {} })) - Network accessline 210
iab: { enabled: true, gvl: { url: 'https://gvl.example/vendor-list', version: 42 }, - Network accessline 211
enabled: true, gvl: { url: 'https://gvl.example/vendor-list', version: 42 }, }, - Network accessline 212
gvl: { url: 'https://gvl.example/vendor-list', version: 42 }, - Network accessline 239
); const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 240
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 241
backendURL: 'https://backend.example', fetch: fetchSpy, geoURL: '/geo', - Network accessline 257
); const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 258
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 259
backendURL: 'https://backend.example', fetch: fetchSpy, snapshot: geoManifest, - Network accessline 266
expect(String(fetchSpy.mock.calls[0]?.[0])).toContain( 'https://backend.example/init' - Network accessline 267
'https://backend.example/init' - Network accessline 274
); const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 275
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 276
backendURL: 'https://backend.example', fetch: fetchSpy, snapshot: { - Network accessline 302
const fetchSpy = vi.fn<typeof fetch>(); const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 303
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 304
backendURL: 'https://backend.example', fetch: fetchSpy, initFallback: false, - Network accessline 322
fetch: fetchSpy, headers: { 'x-test': '1' }, manifestURL: 'https://backend.example/manifest', - Network accessline 323
headers: { 'x-test': '1' }, manifestURL: 'https://backend.example/manifest', }); - Network accessline 324
manifestURL: 'https://backend.example/manifest', - Network accessline 330
expect(fetchSpy).toHaveBeenCalledTimes(1); const [url, init] = fetchSpy.mock.calls[0] ?? []; expect(url).toBe('https://backend.example/manifest'); - Network accessline 331
const [url, init] = fetchSpy.mock.calls[0] ?? []; expect(url).toBe('https://backend.example/manifest'); expect(init?.credentials).toBe('include'); - Network accessline 332
expect(url).toBe('https://backend.example/manifest'); - Network accessline 400
const fetchSpy = vi.fn<typeof fetch>(); const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 401
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 402
backendURL: 'https://backend.example', fetch: fetchSpy, snapshot: sameBannerEverywhere, - Network accessline 415
const fetchSpy = vi.fn<typeof fetch>(); const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 416
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 417
backendURL: 'https://backend.example', fetch: fetchSpy, geoURL: '/geo', - Network accessline 432
const transport = createBrowserManifestTransport( { backendURL: 'https://backend.example', - Network accessline 433
{ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 434
backendURL: 'https://backend.example', fetch: fetchSpy, snapshot: sameBannerEverywhere, - Network accessline 452
); const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', - Network accessline 453
const transport = createBrowserManifestTransport({ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 454
backendURL: 'https://backend.example', fetch: fetchSpy, snapshot: bannerSomewhere, - Network accessline 466
describe('withEarlyInit()', () => { const options = (snapshot: ConsentManifest, fetchSpy: typeof fetch) => ({ backendURL: 'https://backend.example', - Network accessline 467
const options = (snapshot: ConsentManifest, fetchSpy: typeof fetch) => ({ backendURL: 'https://backend.example', fetch: fetchSpy, - Network accessline 468
backendURL: 'https://backend.example', fetch: fetchSpy, snapshot, - Network accessline 485
const fetched = earlyInitModes.get( withEarlyInit( manifest({ fetch: fetchSpy, manifestURL: 'https://x.test/manifest' }) - Network accessline 486
withEarlyInit( manifest({ fetch: fetchSpy, manifestURL: 'https://x.test/manifest' }) ) - Network accessline 487
manifest({ fetch: fetchSpy, manifestURL: 'https://x.test/manifest' })
packages/core/src/__tests__/manifest-cache.test.ts
- Executable scriptline 1
Executable file - Network accessline 46
const SOURCE_URL = 'https://backend.example/manifest'; - Network accessline 48
const minimalManifest = { revision: 'r1', schemaVersion: 1 }; const URL_UNDER_TEST = 'https://consent.example.com/manifest'; - Network accessline 49
const URL_UNDER_TEST = 'https://consent.example.com/manifest'; - Network accessline 50
const PROTECTED_URL = 'https://api.test/manifest'; - Network accessline 388
expect( resolveManifestSourceURL({ backendURL: 'https://backend.example', - Network accessline 389
resolveManifestSourceURL({ backendURL: 'https://backend.example', manifestURL: 'https://cdn.example/manifest.json', - Network accessline 390
backendURL: 'https://backend.example', - Network accessline 391
manifestURL: 'https://cdn.example/manifest.json', - Network accessline 392
}) ).toBe('https://cdn.example/manifest.json'); expect(resolveManifestSourceURL({ backendURL: '/api/c15t/' })).toBe( - Network accessline 393
).toBe('https://cdn.example/manifest.json'); - Network accessline 739
fetch: fetchMock, headers: { cookie: 'c15t=abc' }, sourceURL: 'http://backend.example/manifest', - Network accessline 740
headers: { cookie: 'c15t=abc' }, sourceURL: 'http://backend.example/manifest', }) - Network accessline 741
sourceURL: 'http://backend.example/manifest', - Network accessline 748
fetch: fetchMock, headers: { cookie: 'c15t=abc' }, sourceURL: 'http://localhost:3010/manifest', - Network accessline 749
headers: { cookie: 'c15t=abc' }, sourceURL: 'http://localhost:3010/manifest', }); - Network accessline 750
sourceURL: 'http://localhost:3010/manifest', - Network accessline 946
[Credential-related source omitted] - Network accessline 947
[Credential-related source omitted] - Network accessline 948
sourceURL: 'http://backend.example/manifest', - Network accessline 955
[Credential-related source omitted] - Network accessline 956
[Credential-related source omitted] - Network accessline 957
sourceURL: 'https://backend.example/manifest', - Network accessline 2605
for (let index = 0; index < 1000; index += 1) { cache.set( `https://c.example/manifest?language=aa-${index}`, - Network accessline 2606
cache.set( `https://c.example/manifest?language=aa-${index}`, boundsEntry(BOUNDS_FUTURE) - Network accessline 2607
`https://c.example/manifest?language=aa-${index}`, - Network accessline 2611
let size = 0; for (let index = 992; index < 1000; index += 1) { if (cache.get(`https://c.example/manifest?language=aa-${index}`)) { - Network accessline 2612
for (let index = 992; index < 1000; index += 1) { if (cache.get(`https://c.example/manifest?language=aa-${index}`)) { size += 1; - Network accessline 2613
if (cache.get(`https://c.example/manifest?language=aa-${index}`)) { - Network accessline 2617
expect(size).toBe(8); expect( cache.get('https://c.example/manifest?language=aa-0') - Network accessline 2618
expect( cache.get('https://c.example/manifest?language=aa-0') ).toBeUndefined(); - Network accessline 2619
cache.get('https://c.example/manifest?language=aa-0')
packages/core/src/__tests__/mode.test.ts
- Executable scriptline 1
Executable file - Network accessline 99
const mode = hosted({ assertDecisionInputs: true, backendURL: 'https://backend.example', - Network accessline 100
assertDecisionInputs: true, backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 101
backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof globalThis.fetch, initURL: '/api/consent/init', - Network accessline 110
expect( fetchSpy.mock.calls.map(([url]) => String(url).split('?')[0]) ).toEqual(['/api/consent/init', 'https://backend.example/subjects']); - Network accessline 111
fetchSpy.mock.calls.map(([url]) => String(url).split('?')[0]) ).toEqual(['/api/consent/init', 'https://backend.example/subjects']); const body = JSON.parse(String(fetchSpy.mock.calls[1]?.[1]?.body)); - Network accessline 112
).toEqual(['/api/consent/init', 'https://backend.example/subjects']); - Network accessline 158
fetchSpy.mockClear(); const transport = hosted({ backendURL: 'https://backend.example', - Network accessline 159
const transport = hosted({ backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 160
backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof globalThis.fetch, ...options, - Network accessline 183
const initialData = Promise.resolve(undefined); const options = { backendURL: 'https://old.example', - Network accessline 184
const options = { backendURL: 'https://old.example', fetch: fetchSpy as typeof globalThis.fetch, - Network accessline 185
backendURL: 'https://old.example', fetch: fetchSpy as typeof globalThis.fetch, headers: { 'accept-language': 'de' }, - Network accessline 189
}; const mode = hosted(options); options.backendURL = 'https://new.example'; - Network accessline 190
const mode = hosted(options); options.backendURL = 'https://new.example'; options.headers['accept-language'] = 'fr'; - Network accessline 191
options.backendURL = 'https://new.example'; - Network accessline 194
expect(readHostedMode(mode)).toEqual({ backendURL: 'https://old.example', fetch: fetchSpy, - Network accessline 195
backendURL: 'https://old.example', fetch: fetchSpy, headers: { 'accept-language': 'de' }, - Network accessline 198
initialData, }); expect(mode.backendURL).toBe('https://old.example'); - Network accessline 199
}); expect(mode.backendURL).toBe('https://old.example'); expect(readHostedMode(mode)?.fetch).toBe(fetchSpy); - Network accessline 200
expect(mode.backendURL).toBe('https://old.example'); expect(readHostedMode(mode)?.fetch).toBe(fetchSpy); expect(readHostedMode(mode)?.initialData).toBe(initialData); - Network accessline 212
RequestInit & { headers: Record<string, string> }, ][]) { expect(url.split('?')[0]).toBe('https://old.example/init'); - Network accessline 213
][]) { expect(url.split('?')[0]).toBe('https://old.example/init'); expect(init.headers['accept-language']).toBe('de'); - Network accessline 214
expect(url.split('?')[0]).toBe('https://old.example/init'); - Network accessline 249
modes.manifest(), modes.manifest({ resolve: 'browser', snapshot }), modes.hosted({ backendURL: 'https://backend.example' }), - Network accessline 250
modes.manifest({ resolve: 'browser', snapshot }), modes.hosted({ backendURL: 'https://backend.example' }), modes.offline({ policyRules: [optInRule({ id: 'everywhere' })] }), - Network accessline 251
modes.hosted({ backendURL: 'https://backend.example' }),
packages/core/src/__tests__/offline-language-entry.test.ts
- Executable scriptline 1
Executable file
packages/core/src/__tests__/offline-transport.test.ts
- Executable scriptline 1
Executable file
packages/core/src/__tests__/policy-wire-transport.test.ts
- Executable scriptline 1
Executable file - Network accessline 760
build: (fetch: typeof globalThis.fetch) => createHostedTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 761
createHostedTransport({ backendURL: 'https://api.example.com/c15t', fetch, - Network accessline 762
backendURL: 'https://api.example.com/c15t', fetch, }), - Network accessline 768
build: (fetch: typeof globalThis.fetch) => createManifestTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 769
createManifestTransport({ backendURL: 'https://api.example.com/c15t', fetch, - Network accessline 770
backendURL: 'https://api.example.com/c15t', fetch, snapshot: manifest, - Network accessline 801
await transport.identify(user, 'sub_test'); expect(fetchSpy.mock.calls[1]?.[0]).toBe( 'https://api.example.com/c15t/subjects/sub_test' - Network accessline 802
expect(fetchSpy.mock.calls[1]?.[0]).toBe( 'https://api.example.com/c15t/subjects/sub_test' ); - Network accessline 803
'https://api.example.com/c15t/subjects/sub_test' - Network accessline 825
const transport = createManifestTransport({ fetch: fetchSpy as unknown as typeof globalThis.fetch, manifestURL: 'https://api.example.com/c15t/manifest', - Network accessline 826
fetch: fetchSpy as unknown as typeof globalThis.fetch, manifestURL: 'https://api.example.com/c15t/manifest', }); - Network accessline 827
manifestURL: 'https://api.example.com/c15t/manifest', - Network accessline 850
); const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 851
const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 852
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, snapshot: {
packages/core/src/__tests__/production-warnings.test.ts
- Executable scriptline 1
Executable file - Network accessline 29
category: 'functionality', id: 'chat', src: 'https://chat.example.test/loader.js', - Network accessline 30
id: 'chat', src: 'https://chat.example.test/loader.js', vendor: 'chat-widget', - Network accessline 31
src: 'https://chat.example.test/loader.js', - Dangerous shell operationline 56
runInNewContext(code, {
packages/core/src/__tests__/rich-init.test.ts
- Executable scriptline 1
Executable file - Network accessline 195
test('Additional Consent providers land on snapshot.iab and survive a response without them', async () => { const adTechProviders = [ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' }, - Network accessline 196
const adTechProviders = [ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' }, ]; - Network accessline 197
{ id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' },
packages/core/src/__tests__/static.test.ts
- Executable scriptline 1
Executable file - Network accessline 101
fetch, geo: { countryCode: 'DE' }, geoURL: 'https://geo.test/context', - Network accessline 102
geo: { countryCode: 'DE' }, geoURL: 'https://geo.test/context', language: 'en', - Network accessline 103
geoURL: 'https://geo.test/context', - Network accessline 114
const resolution = createStaticConsentResolver({ fetch, geoURL: 'https://geo.test/context', - Network accessline 115
fetch, geoURL: 'https://geo.test/context', language: 'en', - Network accessline 116
geoURL: 'https://geo.test/context', - Network accessline 125
expect(resolved.location).toEqual({ countryCode: 'US', regionCode: 'CA' }); expect(fetch).toHaveBeenCalledWith( 'https://geo.test/context', - Network accessline 126
expect(fetch).toHaveBeenCalledWith( 'https://geo.test/context', expect.objectContaining({ method: 'GET' }) - Network accessline 127
'https://geo.test/context', - Network accessline 140
const resolution = createStaticConsentResolver({ fetch, geoURL: 'https://geo.test/context', - Network accessline 141
fetch, geoURL: 'https://geo.test/context', language: 'en', - Network accessline 142
geoURL: 'https://geo.test/context', - Network accessline 164
const fetched = createStaticConsentResolver({ fetch: geoResponse(geo), geoURL: 'https://geo.test/context', - Network accessline 165
fetch: geoResponse(geo), geoURL: 'https://geo.test/context', language: 'en', - Network accessline 166
geoURL: 'https://geo.test/context', - Network accessline 174
const resolution = createStaticConsentResolver({ fetch: geoResponse({ country: 1, countryCode: ' US ', regionCode: 'CA' }), geoURL: 'https://geo.test/context', - Network accessline 175
fetch: geoResponse({ country: 1, countryCode: ' US ', regionCode: 'CA' }), geoURL: 'https://geo.test/context', language: 'en', - Network accessline 176
geoURL: 'https://geo.test/context',
packages/core/src/__tests__/surface-actions.test.ts
- Executable scriptline 1
Executable file
packages/core/src/__tests__/transport.test.ts
- Executable scriptline 1
Executable file - Network accessline 51
const queryOf = (url: unknown): URLSearchParams => new URL(String(url), 'http://c15t.test').searchParams; - Network accessline 52
new URL(String(url), 'http://c15t.test').searchParams; - Network accessline 60
legIntPurposes: [2], name: 'Internal Analytics', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 61
name: 'Internal Analytics', privacyPolicyUrl: 'https://example.com/privacy', purposes: [1, 7], - Network accessline 62
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 146
id: 'internal-analytics', name: 'Internal analytics', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 147
name: 'Internal analytics', privacyPolicyUrl: 'https://example.com/privacy', purposes: [1], - Network accessline 148
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 151
], enabled: true, gvl: { url: 'https://gvl.example.com', version: 42 }, - Network accessline 152
enabled: true, gvl: { url: 'https://gvl.example.com', version: 42 }, }, - Network accessline 153
gvl: { url: 'https://gvl.example.com', version: 42 }, - Network accessline 854
const answer = (status: number, cause?: Record<string, string>) => createHostedTransport({ backendURL: 'https://backend.test', - Network accessline 855
createHostedTransport({ backendURL: 'https://backend.test', domain: 'example.com', - Network accessline 856
backendURL: 'https://backend.test', domain: 'example.com', fetch: respond(status, cause), - Network accessline 870
const transport = createManifestTransport({ backendURL: 'https://backend.test', - Network accessline 871
backendURL: 'https://backend.test', domain: 'example.com', fetch: respond(status, { code }), - Network accessline 884
test('the manifest transport keeps a 500 retryable', async () => { const transport = createManifestTransport({ backendURL: 'https://backend.test', - Network accessline 885
const transport = createManifestTransport({ backendURL: 'https://backend.test', domain: 'example.com', - Network accessline 886
backendURL: 'https://backend.test', domain: 'example.com', fetch: respond(500, { code: 'DATABASE_ERROR' }), - Network accessline 920
test('a permanent code at the top level of the body is also a refusal', async () => { const transport = createHostedTransport({ backendURL: 'https://backend.test', - Network accessline 921
const transport = createHostedTransport({ backendURL: 'https://backend.test', domain: 'example.com', - Network accessline 922
backendURL: 'https://backend.test', domain: 'example.com', fetch: (() => - Network accessline 955
async (body, code, reason, said) => { const transport = createHostedTransport({ backendURL: 'https://backend.test', - Network accessline 956
const transport = createHostedTransport({ backendURL: 'https://backend.test', domain: 'example.com', - Network accessline 957
backendURL: 'https://backend.test', domain: 'example.com', fetch: (() => - Network accessline 1070
}, transport: createHostedTransport({ backendURL: 'https://backend.example', - Network accessline 1071
transport: createHostedTransport({ backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 1072
backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, }), - Network accessline 1077
await kernel.commands.init(); const [url, init] = fetchSpy.mock.calls.at(-1) ?? []; expect(withoutQuery(url)).toBe('https://backend.example/init'); - Network accessline 1078
const [url, init] = fetchSpy.mock.calls.at(-1) ?? []; expect(withoutQuery(url)).toBe('https://backend.example/init'); expect(corsPreflightReasons(init)).toEqual([]); - Network accessline 1079
expect(withoutQuery(url)).toBe('https://backend.example/init'); - Network accessline 1084
test('the early init a framework sends before the transport loads needs none either', () => { const request = createHostedInitRequest({ backendURL: 'https://backend.example', - Network accessline 1085
const request = createHostedInitRequest({ backendURL: 'https://backend.example', experiment: { arm: 'b', id: 'x' }, - Network accessline 1086
backendURL: 'https://backend.example', - Network accessline 1115
const request = createHostedInitRequest({ backendURL: 'https://backend.example', - Network accessline 1116
backendURL: 'https://backend.example', - Network accessline 1132
const request = createHostedInitRequest({ backendURL: 'https://backend.example', - Network accessline 1133
backendURL: 'https://backend.example', - Network accessline 1144
const fetchSpy = respondWithInit(); const transport = createHostedTransport({ backendURL: 'https://backend.example', - Network accessline 1145
const transport = createHostedTransport({ backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 1146
backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, headers: { 'cf-ipcountry': 'DE' }, - Network accessline 1157
const fetchSpy = respondWithInit(); const transport = createHostedTransport({ backendURL: 'https://backend.example', - Network accessline 1158
const transport = createHostedTransport({ backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 1159
backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, }); - Network accessline 1191
const fetchSpy = respondWithInit(); const transport = createHostedTransport({ backendURL: 'https://backend.example', - Network accessline 1192
const transport = createHostedTransport({ backendURL: 'https://backend.example', credentials: 'include', - Network accessline 1193
backendURL: 'https://backend.example', credentials: 'include', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 1211
); const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t/', - Network accessline 1212
const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t/', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 1213
backendURL: 'https://api.example.com/c15t/', fetch: fetchSpy as unknown as typeof globalThis.fetch, }); - Network accessline 1226
expect(withoutQuery(url)).toBe('https://api.example.com/c15t/init'); - Network accessline 1371
kind === 'hosted' ? createHostedTransport({ backendURL: 'https://backend.test', - Network accessline 1372
? createHostedTransport({ backendURL: 'https://backend.test', fetch: fetchFor(status), - Network accessline 1373
backendURL: 'https://backend.test', fetch: fetchFor(status), }) - Network accessline 1375
}) : createManifestTransport({ backendURL: 'https://backend.test', - Network accessline 1376
: createManifestTransport({ backendURL: 'https://backend.test', domain: 'example.com', - Network accessline 1377
backendURL: 'https://backend.test', domain: 'example.com', fetch: fetchFor(status), - Network accessline 1408
const transport = kind === 'hosted' ? createHostedTransport({ backendURL: 'https://backend.test', fetch }) - Network accessline 1409
kind === 'hosted' ? createHostedTransport({ backendURL: 'https://backend.test', fetch }) : createManifestTransport({ - Network accessline 1410
? createHostedTransport({ backendURL: 'https://backend.test', fetch }) - Network accessline 1411
: createManifestTransport({ backendURL: 'https://backend.test', domain: 'example.com', - Network accessline 1412
backendURL: 'https://backend.test', domain: 'example.com', fetch, - Network accessline 1452
); const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 1453
const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 1454
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, initURL: '/api/c15t/init', - Network accessline 1480
expect(fetchSpy.mock.calls.map(([url]) => withoutQuery(url))).toEqual([ '/api/c15t/init', 'https://api.example.com/c15t/subjects', - Network accessline 1481
'/api/c15t/init', 'https://api.example.com/c15t/subjects', ]); - Network accessline 1482
'https://api.example.com/c15t/subjects', - Network accessline 1607
const transport = createHostedTransport({ assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', - Network accessline 1608
assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 1609
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, headers: { 'sec-gpc': '1' }, - Network accessline 1636
expect(fetchSpy.mock.calls.map(([url]) => withoutQuery(url))).toEqual([ '/internal/consent/init', 'https://api.example.com/c15t/subjects', - Network accessline 1637
'/internal/consent/init', 'https://api.example.com/c15t/subjects', ]); - Network accessline 1638
'https://api.example.com/c15t/subjects', - Network accessline 1828
initialPolicyPending: true, transport: createHostedTransport({ backendURL: 'https://backend.test', - Network accessline 1829
transport: createHostedTransport({ backendURL: 'https://backend.test', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 1830
backendURL: 'https://backend.test', fetch: fetchSpy as unknown as typeof globalThis.fetch, }), - Network accessline 1861
const fetchGvl = vi.fn().mockResolvedValue(list); const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 1862
const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', deferGvl, - Network accessline 1863
backendURL: 'https://api.example.com/c15t', - Network accessline 1877
const fetchGvl = vi.fn().mockResolvedValue(REALISTIC_INIT_OUTPUT.gvl); const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 1878
const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', fetch: vi.fn() as unknown as typeof globalThis.fetch, - Network accessline 1879
backendURL: 'https://api.example.com/c15t', fetch: vi.fn() as unknown as typeof globalThis.fetch, fetchGvl, - Network accessline 1915
fetch: expect.any(Function), language: 'de', reference: { url: 'https://gvl.example.com', version: 42 }, - Network accessline 1916
language: 'de', reference: { url: 'https://gvl.example.com', version: 42 }, }); - Network accessline 1917
reference: { url: 'https://gvl.example.com', version: 42 }, - Network accessline 1923
Response.json({ providers: { '89': { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 1924
providers: { '89': { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, }, - Network accessline 1925
'89': { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 1928
); const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 1929
const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 1930
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, fetchGvl: vi.fn().mockResolvedValue(REALISTIC_INIT_OUTPUT.gvl), - Network accessline 1938
additionalConsent: { providers: [89, 404], url: 'https://lists.example/ac-manifest', - Network accessline 1939
providers: [89, 404], url: 'https://lists.example/ac-manifest', }, - Network accessline 1940
url: 'https://lists.example/ac-manifest', - Network accessline 1948
expect(response?.adTechProviders).toEqual([ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 1949
{ id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 1950
]); expect(fetchSpy).toHaveBeenCalledWith( 'https://lists.example/ac-manifest?providerIds=89%2C404', - Network accessline 1951
expect(fetchSpy).toHaveBeenCalledWith( 'https://lists.example/ac-manifest?providerIds=89%2C404', expect.objectContaining({ method: 'GET' }) - Network accessline 1952
'https://lists.example/ac-manifest?providerIds=89%2C404', - Network accessline 1958
[ 'the backend', 'https://api.example.com/c15t', - Network accessline 1959
'the backend', 'https://api.example.com/c15t', '/api/additional-consent', - Network accessline 1960
'https://api.example.com/c15t', - Network accessline 1961
'/api/additional-consent', 'https://api.example.com/api/additional-consent?providerIds=89', ], - Network accessline 1962
'https://api.example.com/api/additional-consent?providerIds=89', - Network accessline 1974
Response.json({ providers: { '89': { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 1975
providers: { '89': { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, }, - Network accessline 1976
'89': { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 2000
const init = (snapshot: ConsentManifest, fetch: typeof globalThis.fetch) => createManifestTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 2001
createManifestTransport({ backendURL: 'https://api.example.com/c15t', fetch, - Network accessline 2002
backendURL: 'https://api.example.com/c15t', fetch, fetchGvl: vi.fn().mockResolvedValue(REALISTIC_INIT_OUTPUT.gvl), - Network accessline 2023
additionalConsent: { providers: [89], url: 'https://lists.example/ac-down', - Network accessline 2024
providers: [89], url: 'https://lists.example/ac-down', }, - Network accessline 2025
url: 'https://lists.example/ac-down', - Network accessline 2056
region: 'BE', }, manifestURL: 'https://api.example.com/c15t/manifest', - Network accessline 2057
}, manifestURL: 'https://api.example.com/c15t/manifest', }); - Network accessline 2058
manifestURL: 'https://api.example.com/c15t/manifest', - Network accessline 2093
expect(fetchSpy).toHaveBeenNthCalledWith( 1, 'https://api.example.com/c15t/manifest', - Network accessline 2094
1, 'https://api.example.com/c15t/manifest', expect.objectContaining({ method: 'GET' }) - Network accessline 2095
'https://api.example.com/c15t/manifest', - Network accessline 2097
); const [subjectsUrl, subjectsInit] = fetchSpy.mock.calls[1] ?? []; expect(subjectsUrl).toBe('https://api.example.com/c15t/subjects'); - Network accessline 2098
const [subjectsUrl, subjectsInit] = fetchSpy.mock.calls[1] ?? []; expect(subjectsUrl).toBe('https://api.example.com/c15t/subjects'); const body = JSON.parse((subjectsInit as RequestInit).body as string); - Network accessline 2099
expect(subjectsUrl).toBe('https://api.example.com/c15t/subjects'); - Network accessline 2128
); const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 2129
const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2130
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, initialInit: REALISTIC_INIT_OUTPUT, - Network accessline 2186
}; const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 2187
const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2188
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, inputs: { - Network accessline 2251
}, transport: createHostedTransport({ backendURL: 'https://backend.example', - Network accessline 2252
transport: createHostedTransport({ backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 2253
backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, }), - Network accessline 2283
const kernel = createConsentKernel({ transport: createHostedTransport({ backendURL: 'https://backend.example', - Network accessline 2284
transport: createHostedTransport({ backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 2285
backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, }), - Network accessline 2323
const kernel = createConsentKernel({ transport: createManifestTransport({ backendURL: 'https://backend.example', - Network accessline 2324
transport: createManifestTransport({ backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 2325
backendURL: 'https://backend.example', fetch: fetchSpy as unknown as typeof fetch, inputs: { country: 'DE', language: 'de', region: 'BE' }, - Network accessline 2326
fetch: fetchSpy as unknown as typeof fetch, inputs: { country: 'DE', language: 'de', region: 'BE' }, manifestURL: 'https://cdn.example/manifest', - Network accessline 2327
inputs: { country: 'DE', language: 'de', region: 'BE' }, manifestURL: 'https://cdn.example/manifest', }), - Network accessline 2328
manifestURL: 'https://cdn.example/manifest', - Network accessline 2367
const transport = createHostedTransport({ assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', - Network accessline 2368
assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2369
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, headers: { 'sec-gpc': '1' }, - Network accessline 2400
}); const [saveURL, saveInit] = fetchSpy.mock.calls[0] ?? []; expect(saveURL).toBe('https://api.example.com/c15t/subjects'); - Network accessline 2401
const [saveURL, saveInit] = fetchSpy.mock.calls[0] ?? []; expect(saveURL).toBe('https://api.example.com/c15t/subjects'); expect(JSON.parse((saveInit as RequestInit).body as string)).toMatchObject({ - Network accessline 2402
expect(saveURL).toBe('https://api.example.com/c15t/subjects'); - Network accessline 2426
); const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 2427
const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2428
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, initialData, - Network accessline 2457
const transport = createHostedTransport({ assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', - Network accessline 2458
assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2459
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, initURL: '/api/c15t/init', - Network accessline 2499
); const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 2500
const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2501
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, initURL: '/api/c15t/init', - Network accessline 2533
const transport = createHostedTransport({ assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', - Network accessline 2534
assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', decisionInputs: { - Network accessline 2535
backendURL: 'https://api.example.com/c15t', - Network accessline 2581
); const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 2582
const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', decisionInputs: { - Network accessline 2583
backendURL: 'https://api.example.com/c15t', - Network accessline 2631
const transport = createHostedTransport({ assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', - Network accessline 2632
assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2633
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, initURL: '/internal/consent/init', - Network accessline 2729
const transport = createHostedTransport({ assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', - Network accessline 2730
assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2731
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, initURL: '/internal/consent/init', - Network accessline 2770
const transport = createHostedTransport({ assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', - Network accessline 2771
assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2772
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, initURL: '/internal/consent/init', - Network accessline 2852
const transport = createHostedTransport({ assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', - Network accessline 2853
assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2854
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, initURL: '/internal/consent/init', - Network accessline 2882
const transport = createHostedTransport({ assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', - Network accessline 2883
assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2884
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, initURL: '/internal/consent/init', - Network accessline 2925
const transport = createHostedTransport({ assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', - Network accessline 2926
assertDecisionInputs: true, backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 2927
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, initURL: '/internal/consent/init', - Network accessline 2996
const fetchSpy = respond(); const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 2997
const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 2998
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, }); - Network accessline 3026
const fetchSpy = respond(); const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 3027
const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 3028
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, }); - Network accessline 3031
await transport.init({ overrides: {}, user: null }); const url = String(fetchSpy.mock.calls[0]?.[0]); expect(withoutQuery(url)).toBe('https://api.example.com/c15t/init'); - Network accessline 3032
const url = String(fetchSpy.mock.calls[0]?.[0]); expect(withoutQuery(url)).toBe('https://api.example.com/c15t/init'); expect([...queryOf(url).keys()]).toEqual(['v', 'contract']); - Network accessline 3033
expect(withoutQuery(url)).toBe('https://api.example.com/c15t/init'); - Network accessline 3038
const fetchSpy = respond(); const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 3039
const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 3040
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, initURL: '/api/consent/init?site=shop', - Network accessline 3058
const fetchSpy = respond(); const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 3059
const transport = createHostedTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 3060
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, }); - Network accessline 3067
const [url, init] = fetchSpy.mock.calls[0] ?? []; expect(url).toBe( `https://api.example.com/c15t/subjects?journey=${JOURNEY_ID}&journeyScope=page` - Network accessline 3068
expect(url).toBe( `https://api.example.com/c15t/subjects?journey=${JOURNEY_ID}&journeyScope=page` ); - Network accessline 3069
`https://api.example.com/c15t/subjects?journey=${JOURNEY_ID}&journeyScope=page` - Network accessline 3073
await transport.save(savePayload); expect(fetchSpy.mock.calls[1]?.[0]).toBe( 'https://api.example.com/c15t/subjects' - Network accessline 3074
expect(fetchSpy.mock.calls[1]?.[0]).toBe( 'https://api.example.com/c15t/subjects' ); - Network accessline 3075
'https://api.example.com/c15t/subjects' - Network accessline 3080
const fetchSpy = respond(); const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 3081
const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 3082
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, snapshot: MANIFEST_FIXTURE, - Network accessline 3093
await transport.save?.({ ...savePayload, journey }); expect(fetchSpy.mock.calls.at(-1)?.[0]).toBe( 'https://api.example.com/c15t/subjects' - Network accessline 3094
expect(fetchSpy.mock.calls.at(-1)?.[0]).toBe( 'https://api.example.com/c15t/subjects' ); - Network accessline 3095
'https://api.example.com/c15t/subjects' - Network accessline 3100
const fetchSpy = respond(); const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 3101
const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 3102
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, report: { adapter: '@c15t/test', source: 'route' }, - Network accessline 3121
const fetchSpy = respond(); const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', - Network accessline 3122
const transport = createManifestTransport({ backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, - Network accessline 3123
backendURL: 'https://api.example.com/c15t', fetch: fetchSpy as unknown as typeof fetch, snapshot: MANIFEST_FIXTURE, - Network accessline 3130
}); expect(fetchSpy.mock.calls[0]?.[0]).toBe( `https://api.example.com/c15t/subjects?journey=${JOURNEY_ID}&journeyScope=tab` - Network accessline 3131
expect(fetchSpy.mock.calls[0]?.[0]).toBe( `https://api.example.com/c15t/subjects?journey=${JOURNEY_ID}&journeyScope=tab` ); - Network accessline 3132
`https://api.example.com/c15t/subjects?journey=${JOURNEY_ID}&journeyScope=tab`
packages/core/src/build.ts
- Executable scriptline 1
Executable file - Network accessline 158
// A quoted value ends at its closing quote, so a comment after it, // as in `KEY="https://x" # note`, is dropped with the quotes. - Network accessline 159
// as in `KEY="https://x" # note`, is dropped with the quotes. - Access to secretsline 198
[Credential-related source omitted]
packages/core/src/consent-record/__tests__/evaluate.test.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/__tests__/evaluation-policy.test.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/__tests__/fixtures.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/__tests__/normalize.test.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/__tests__/record.test.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/__tests__/validation-boundaries.test.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/evaluate.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/evaluation-policy.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/index.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/normalize.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/record.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/types.ts
- Executable scriptline 1
Executable file
packages/core/src/consent-record/validation.ts
- Executable scriptline 1
Executable file
packages/core/src/consent/compliance.ts
- Executable scriptline 1
Executable file
packages/core/src/consent/consent-types.ts
- Executable scriptline 1
Executable file
packages/core/src/derive-surface.ts
- Executable scriptline 1
Executable file
packages/core/src/events.ts
- Executable scriptline 1
Executable file
packages/core/src/experiment.ts
- Executable scriptline 1
Executable file
packages/core/src/generated.ts
- Executable scriptline 1
Executable file
packages/core/src/index.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/browser-outbox-store.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/commands.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/configured-categories.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/consent-model.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/default-isolation.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/events.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/identity-privacy-races.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/init-record-races.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/init-response.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/listener-isolation.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/none-model.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/patch.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/save-outbox-chunk.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/save-outbox.test.ts
- Executable scriptline 1
Executable file - Network accessline 728
initialRecords: { subject: { subjectId: 'sub_fixed' } }, transport: createHostedTransport({ backendURL: 'https://backend.test', - Network accessline 729
transport: createHostedTransport({ backendURL: 'https://backend.test', fetch: fetchSpy, - Network accessline 730
backendURL: 'https://backend.test', fetch: fetchSpy, }),
packages/core/src/kernel/__tests__/setters.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/snapshot-freezing.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/snapshot.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/supersession-additional-consent.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/surface-shown.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/unchanged-commit.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/__tests__/vendor-choice.test.ts
- Executable scriptline 1
Executable file - Network accessline 38
name: 'Meta Pixel', presentable: true, privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 39
presentable: true, privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', source: 'config', - Network accessline 40
privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 46
name: 'Google Analytics', presentable: true, privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 47
presentable: true, privacyPolicyUrl: 'https://policies.google.com/privacy', source: 'config', - Network accessline 48
privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 55
name: 'CDN', presentable: true, privacyPolicyUrl: 'https://cdn.example/privacy', - Network accessline 56
presentable: true, privacyPolicyUrl: 'https://cdn.example/privacy', source: 'config', - Network accessline 57
privacyPolicyUrl: 'https://cdn.example/privacy', - Network accessline 168
name: 'Meta Pixel', presentable: true, privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 169
presentable: true, privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', source: 'config', - Network accessline 170
privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 197
name: 'Meta (backend)', presentable: true, privacyPolicyUrl: 'https://example.com/backend', - Network accessline 198
presentable: true, privacyPolicyUrl: 'https://example.com/backend', source: 'manifest', - Network accessline 199
privacyPolicyUrl: 'https://example.com/backend', - Network accessline 881
id: 'meta-pixel', name: 'Meta (backend)', privacyPolicyUrl: 'https://example.com/backend', - Network accessline 882
name: 'Meta (backend)', privacyPolicyUrl: 'https://example.com/backend', }, - Network accessline 883
privacyPolicyUrl: 'https://example.com/backend', - Network accessline 887
id: 'intercom', name: 'Intercom', privacyPolicyUrl: 'https://www.intercom.com/legal/privacy', - Network accessline 888
name: 'Intercom', privacyPolicyUrl: 'https://www.intercom.com/legal/privacy', }, - Network accessline 889
privacyPolicyUrl: 'https://www.intercom.com/legal/privacy', - Network accessline 971
name: 'Old', presentable: true, privacyPolicyUrl: 'https://example.com/old', - Network accessline 972
presentable: true, privacyPolicyUrl: 'https://example.com/old', source: 'manifest', - Network accessline 973
privacyPolicyUrl: 'https://example.com/old', - Network accessline 985
id: 'intercom', name: 'Intercom', privacyPolicyUrl: 'https://www.intercom.com/legal/privacy', - Network accessline 986
name: 'Intercom', privacyPolicyUrl: 'https://www.intercom.com/legal/privacy', }, - Network accessline 987
privacyPolicyUrl: 'https://www.intercom.com/legal/privacy', - Network accessline 1011
id: 'intercom', name: 'Intercom', privacyPolicyUrl: 'https://www.intercom.com/legal/privacy', - Network accessline 1012
name: 'Intercom', privacyPolicyUrl: 'https://www.intercom.com/legal/privacy', }, - Network accessline 1013
privacyPolicyUrl: 'https://www.intercom.com/legal/privacy',
packages/core/src/kernel/__tests__/without-structured-clone.test.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/choice.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/clear-records.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/dispatch.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/events.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/external-permissions.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/index.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/init-lifecycle.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/internals.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/patch.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/record-validation.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/records.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/runtime.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/save-outbox/index.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/save-outbox/queue-tools.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/save-outbox/queue.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/save-outbox/store.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/save-outbox/supersession.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/save-outbox/warn.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/setters.ts
- Executable scriptline 1
Executable file
packages/core/src/kernel/snapshot.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/__tests__/consent-copy.test.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/__tests__/copy-plain-data.test.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/__tests__/experiment-assignment.test.ts
- Executable scriptline 1
Executable file - Access to secretsline 81
[Credential-related source omitted] - Access to secretsline 264
[Credential-related source omitted] - Access to secretsline 380
[Credential-related source omitted] - Access to secretsline 394
[Credential-related source omitted] - Access to secretsline 402
[Credential-related source omitted]
packages/core/src/libs/__tests__/experiment.test.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/__tests__/failed-response.test.ts
- Executable scriptline 1
Executable file - Network accessline 15
code: 'CONSENT_SESSIONS_EXHAUSTED', message: 'This project is out of consent sessions. Upgrade at https://dashboard.example.com/billing.', - Network accessline 16
message: 'This project is out of consent sessions. Upgrade at https://dashboard.example.com/billing.', }, - Network accessline 17
'This project is out of consent sessions. Upgrade at https://dashboard.example.com/billing.', - Network accessline 24
expect(error.message).toBe( 'c15t hosted transport: /init responded 402: This project is out of consent sessions. Upgrade at https://dashboard.example.com/billing. (CONSENT_SESSIONS_EXHAUSTED)' - Network accessline 25
'c15t hosted transport: /init responded 402: This project is out of consent sessions. Upgrade at https://dashboard.example.com/billing. (CONSENT_SESSIONS_EXHAUSTED)'
packages/core/src/libs/__tests__/generate-subject-id.test.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/__tests__/generate-subject-id.vectors.test.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/__tests__/global-privacy-control.test.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/__tests__/no-records-warning.test.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/__tests__/presentation.test.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/__tests__/session-report.test.ts
- Executable scriptline 1
Executable file - Network accessline 45
) => { const transport = createManifestTransport({ backendURL: 'https://consent.example.com', - Network accessline 46
const transport = createManifestTransport({ backendURL: 'https://consent.example.com', snapshot: manifest, - Network accessline 47
backendURL: 'https://consent.example.com', - Network accessline 110
expect( resolveSessionReportBackendURL({ backendURL: 'https://consent.example.com/', - Network accessline 111
resolveSessionReportBackendURL({ backendURL: 'https://consent.example.com/', }) - Network accessline 112
backendURL: 'https://consent.example.com/', - Network accessline 114
).toBe('https://consent.example.com'); - Network accessline 163
describe('reportConsentSession', () => { const JOURNEY_ID = '3b241101-e2bb-4255-8caf-4136c566a962'; const journeyURL = `https://shop.example.com/api/c15t/init?journey=${JOURNEY_ID}&journeyScope=page&stored=1`; - Network accessline 165
const journeyURL = `https://shop.example.com/api/c15t/init?journey=${JOURNEY_ID}&journeyScope=page&stored=1`; - Network accessline 171
.mockResolvedValue(new Response(null, { status: 204 })); await reportConsentSession({ backendURL: 'https://consent.example.com', - Network accessline 172
await reportConsentSession({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 173
backendURL: 'https://consent.example.com', fetch: fetchSpy, headers: new Headers({ origin: 'https://www.example.org' }), - Network accessline 174
fetch: fetchSpy, headers: new Headers({ origin: 'https://www.example.org' }), init: init as never, - Network accessline 175
headers: new Headers({ origin: 'https://www.example.org' }), - Network accessline 199
} as const; await reportConsentSession({ backendURL: 'https://consent.example.com', - Network accessline 200
await reportConsentSession({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 201
backendURL: 'https://consent.example.com', fetch: fetchSpy, init: init as never, - Network accessline 222
await reportConsentSession({ adapter: '@c15t/svelte', backendURL: 'https://consent.example.com', - Network accessline 223
adapter: '@c15t/svelte', backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 224
backendURL: 'https://consent.example.com', fetch: fetchSpy, headers: new Headers({ - Network accessline 240
expect(registered).toHaveLength(1); const [url, request] = fetchSpy.mock.calls[0] as [string, RequestInit]; expect(url).toBe('https://consent.example.com/sessions'); - Network accessline 241
const [url, request] = fetchSpy.mock.calls[0] as [string, RequestInit]; expect(url).toBe('https://consent.example.com/sessions'); expect(request.method).toBe('POST'); - Network accessline 242
expect(url).toBe('https://consent.example.com/sessions'); - Network accessline 261
await expect( reportConsentSession({ backendURL: 'https://consent.example.com', - Network accessline 262
reportConsentSession({ backendURL: 'https://consent.example.com', fetch: failing, - Network accessline 263
backendURL: 'https://consent.example.com', fetch: failing, init: init as never, - Network accessline 304
const fetchSpy = vi.fn(); await reportConsentSession({ backendURL: 'https://consent.example.com', - Network accessline 305
await reportConsentSession({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 306
backendURL: 'https://consent.example.com', fetch: fetchSpy, headers: new Headers({ 'next-router-prefetch': '1' }), - Network accessline 323
await expect( reportConsentSession({ backendURL: 'https://consent.example.com', - Network accessline 324
reportConsentSession({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 325
backendURL: 'https://consent.example.com', fetch: fetchSpy, init: init as never, - Network accessline 348
const registered: Promise<void>[] = []; const transport = createManifestTransport({ backendURL: 'https://consent.example.com', - Network accessline 349
const transport = createManifestTransport({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 350
backendURL: 'https://consent.example.com', fetch: fetchSpy, report: { - Network accessline 385
await expect( reportConsentSession({ backendURL: 'https://consent.example.com', - Network accessline 386
reportConsentSession({ backendURL: 'https://consent.example.com', fetch: refused, - Network accessline 387
backendURL: 'https://consent.example.com', fetch: refused, init: init as never, - Network accessline 404
await expect( reportConsentSession({ backendURL: 'https://consent.example.com', - Network accessline 405
reportConsentSession({ backendURL: 'https://consent.example.com', fetch: timedOut as unknown as typeof globalThis.fetch, - Network accessline 406
backendURL: 'https://consent.example.com', fetch: timedOut as unknown as typeof globalThis.fetch, init: init as never, - Network accessline 418
const registered: Promise<void>[] = []; const returned = reportConsentSession({ backendURL: 'https://consent.example.com', - Network accessline 419
const returned = reportConsentSession({ backendURL: 'https://consent.example.com', fetch: vi.fn().mockResolvedValue(new Response(null, { status: 204 })), - Network accessline 420
backendURL: 'https://consent.example.com', fetch: vi.fn().mockResolvedValue(new Response(null, { status: 204 })), init: init as never, - Network accessline 437
.mockResolvedValue(new Response(null, { status: 204 })); await reportConsentSession({ backendURL: 'https://consent.example.com', - Network accessline 438
await reportConsentSession({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 439
backendURL: 'https://consent.example.com', fetch: fetchSpy, init: init as never, - Network accessline 448
await reportConsentSession({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 449
backendURL: 'https://consent.example.com', fetch: fetchSpy, init: init as never, - Network accessline 474
const transport = createManifestTransport({ fetch: fetchSpy, manifestURL: 'https://cdn.example.com/tenant.json', - Network accessline 475
fetch: fetchSpy, manifestURL: 'https://cdn.example.com/tenant.json', report: { source: 'render' }, - Network accessline 476
manifestURL: 'https://cdn.example.com/tenant.json', - Network accessline 491
.mockResolvedValue(new Response(null, { status: 204 })); const transport = createManifestTransport({ backendURL: 'https://consent.example.com', - Network accessline 492
const transport = createManifestTransport({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 493
backendURL: 'https://consent.example.com', fetch: fetchSpy, headers: { cookie: 'c15t=secret', 'x-forwarded-for': '203.0.113.42' }, - Network accessline 509
const call = fetchSpy.mock.calls.find( ([url]) => url === 'https://consent.example.com/sessions' - Network accessline 510
([url]) => url === 'https://consent.example.com/sessions' - Network accessline 529
const fetchSpy = vi.fn(); const transport = createManifestTransport({ backendURL: 'https://consent.example.com', - Network accessline 530
const transport = createManifestTransport({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 531
backendURL: 'https://consent.example.com', fetch: fetchSpy, snapshot: manifest,
packages/core/src/libs/__tests__/vendors.test.ts
- Executable scriptline 1
Executable file - Network accessline 21
id: 'meta-pixel', name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 22
name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', }; - Network accessline 23
privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 44
id: 'google-analytics', name: 'Google Analytics', privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 45
name: 'Google Analytics', privacyPolicyUrl: 'https://policies.google.com/privacy', }, - Network accessline 46
privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 167
description: 'Records how visitors use the site.', name: 'Hotjar', privacyPolicyUrl: 'https://www.hotjar.com/legal/policies/privacy/', - Network accessline 168
name: 'Hotjar', privacyPolicyUrl: 'https://www.hotjar.com/legal/policies/privacy/', }; - Network accessline 169
privacyPolicyUrl: 'https://www.hotjar.com/legal/policies/privacy/', - Network accessline 257
id: 'hotjar', name: 'Session recordings', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 258
name: 'Session recordings', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 259
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 274
id: 'hotjar', name: 'Session recordings', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 275
name: 'Session recordings', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 276
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 293
id: 'hotjar', name: 'Session recordings', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 294
name: 'Session recordings', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 295
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 666
name: 'Meta Pixel', presentable: true, privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 667
presentable: true, privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', source: 'config', - Network accessline 668
privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 715
name: 'Shared', presentable: true, privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 716
presentable: true, privacyPolicyUrl: 'https://example.com/privacy', source: 'config', - Network accessline 717
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 723
name: 'Contextual', presentable: true, privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 724
presentable: true, privacyPolicyUrl: 'https://example.com/privacy', source: 'config', - Network accessline 725
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 738
name: 'Fixed', presentable: true, privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 739
presentable: true, privacyPolicyUrl: 'https://example.com/privacy', source: 'config', - Network accessline 740
privacyPolicyUrl: 'https://example.com/privacy',
packages/core/src/libs/cache-directive.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/consent-copy.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/cookie/__tests__/cookie-storage.test.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/cookie/__tests__/read-stored-consent.test.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/cookie/domain-utils.ts
packages/core/src/libs/cookie/index.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/cookie/key-mapping.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/cookie/operations.ts
packages/core/src/libs/cookie/serialization.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/cookie/storage.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/cookie/types.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/copy-plain-data.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/experiment-assignment.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/experiment-engine.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/experiment-record.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/experiment-storage.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/experiment.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/failed-response.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/freeze-data.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/generate-subject-id.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/global-privacy-control.ts
- Executable scriptline 1
Executable file - Network accessline 9
* of the client-side `navigator.globalPrivacyControl` flag. * * @see https://globalprivacycontrol.org/ for the GPC specification. - Network accessline 10
* * @see https://globalprivacycontrol.org/ for the GPC specification. * - Network accessline 11
* @see https://globalprivacycontrol.org/ for the GPC specification.
packages/core/src/libs/has.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/iab-banner-summary.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/iab-unavailable.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/is-production.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/journey.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/manifest-cache-runtime.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/network-blocker/types.ts
- Executable scriptline 1
Executable file - Network accessline 53
* * will only match URLs like: * - "https://www.google-analytics.com/collect" - Network accessline 54
* will only match URLs like: * - "https://www.google-analytics.com/collect" * - "https://google-analytics.com/r/collect?v=1" - Network accessline 55
* - "https://www.google-analytics.com/collect" - Network accessline 56
* - "https://google-analytics.com/r/collect?v=1"
packages/core/src/libs/no-records-warning.ts
- Executable scriptline 1
Executable file - Network accessline 10
export const NO_RECORDS_WARNING = '[c15t] Local mode keeps consent only in this browser. c15t keeps no server-side record of consent. If you rely on consent under GDPR, Article 7(1) requires you to demonstrate it. Keep your own consent rec - Network accessline 11
'[c15t] Local mode keeps consent only in this browser. c15t keeps no server-side record of consent. If you rely on consent under GDPR, Article 7(1) requires you to demonstrate it. Keep your own consent records or use a c15t backend. Local m
packages/core/src/libs/policy-actions.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/prefetch/__tests__/hosted-reuse.test.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/prefetch/__tests__/prefetch.test.ts
- Executable scriptline 1
Executable file - Network accessline 34
it.each([ { backendURL: '/api/c15t/' }, { backendURL: 'https://consent.example.com', credentials: 'omit' as const }, - Network accessline 35
{ backendURL: '/api/c15t/' }, { backendURL: 'https://consent.example.com', credentials: 'omit' as const }, { - Network accessline 36
{ backendURL: 'https://consent.example.com', credentials: 'omit' as const }, - Network accessline 119
window.eval( buildPrefetchScript({ backendURL: 'https://consent.example.com', - Network accessline 120
buildPrefetchScript({ backendURL: 'https://consent.example.com', overrides: { country: 'DE', gpc: false, language: 'de', region: 'BE' }, - Network accessline 121
backendURL: 'https://consent.example.com', - Network accessline 137
vi.stubGlobal('fetch', fetch); const options = { backendURL: 'https://consent.example.com', - Network accessline 138
const options = { backendURL: 'https://consent.example.com', journey: false as const, - Network accessline 139
backendURL: 'https://consent.example.com', - Network accessline 418
const third = new URL(String(fetch.mock.calls[2]?.[0])); expect(`${third.origin}${third.pathname}`).toBe( 'http://localhost:3000/api/third/init' - Network accessline 419
expect(`${third.origin}${third.pathname}`).toBe( 'http://localhost:3000/api/third/init' ); - Network accessline 420
'http://localhost:3000/api/third/init'
packages/core/src/libs/prefetch/index.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/prefetch/prefetch.ts
- Executable scriptline 1
Executable file - Network accessline 196
: config.url; const url = journey ? appendJourneyParams(withArm, journey) : withArm; const response = await fetch(url, { - Network accessline 197
const url = journey ? appendJourneyParams(withArm, journey) : withArm; const response = await fetch(url, { credentials: config.credentials, - Network accessline 198
const response = await fetch(url, { - Network accessline 363
[Credential-related source omitted] - Possible obfuscationline 363
[Credential-related source omitted] - Access to secretsline 363
[Credential-related source omitted]
packages/core/src/libs/prefetch/types.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/prefetch/window-key.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/request-context-headers.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/request-context.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/script-loader/debug.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/script-loader/types.ts
- Executable scriptline 1
Executable file - Network accessline 198
* const gtmScript: Script = { * id: 'google-tag-manager', * src: 'https://www.googletagmanager.com/gtm.js?id=GTM-XXXX', - Network accessline 199
* id: 'google-tag-manager', * src: 'https://www.googletagmanager.com/gtm.js?id=GTM-XXXX', * category: 'measurement', // Category is still required but won't gate loading - Network accessline 200
* src: 'https://www.googletagmanager.com/gtm.js?id=GTM-XXXX', - Network accessline 265
* const script: Script = { * id: 'my-script', * src: 'https://example.com/script.js', - Network accessline 266
* id: 'my-script', * src: 'https://example.com/script.js', * category: 'analytics', - Network accessline 267
* src: 'https://example.com/script.js', - Network accessline 311
* const script: Script = { * id: 'analytics', * src: 'https://analytics.example.com/script.js', - Network accessline 312
* id: 'analytics', * src: 'https://analytics.example.com/script.js', * category: 'analytics', - Network accessline 313
* src: 'https://analytics.example.com/script.js', - Network accessline 366
* const script: Script = { * id: 'meta-pixel', * src: 'https://connect.facebook.net/en_US/fbevents.js', - Network accessline 367
* id: 'meta-pixel', * src: 'https://connect.facebook.net/en_US/fbevents.js', * category: 'marketing', - Network accessline 368
* src: 'https://connect.facebook.net/en_US/fbevents.js', - Network accessline 384
* const script: Script = { * id: 'meta-pixel', * src: 'https://connect.facebook.net/en_US/fbevents.js', - Network accessline 385
* id: 'meta-pixel', * src: 'https://connect.facebook.net/en_US/fbevents.js', * category: 'marketing', - Network accessline 386
* src: 'https://connect.facebook.net/en_US/fbevents.js', - Network accessline 389
* vendorDetails: { * name: 'Meta Pixel', * privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 390
* name: 'Meta Pixel', * privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', * }, - Network accessline 391
* privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 407
* const script: Script = { * id: 'google-analytics', * src: 'https://www.googletagmanager.com/gtag/js', - Network accessline 408
* id: 'google-analytics', * src: 'https://www.googletagmanager.com/gtag/js', * category: 'measurement', - Network accessline 409
* src: 'https://www.googletagmanager.com/gtag/js', - Network accessline 425
* const script: Script = { * id: 'ad-script', * src: 'https://ads.example.com/script.js', - Network accessline 426
* id: 'ad-script', * src: 'https://ads.example.com/script.js', * category: 'marketing', - Network accessline 427
* src: 'https://ads.example.com/script.js', - Network accessline 444
* const script: Script = { * id: 'analytics', * src: 'https://analytics.example.com/script.js', - Network accessline 445
* id: 'analytics', * src: 'https://analytics.example.com/script.js', * category: 'measurement', - Network accessline 446
* src: 'https://analytics.example.com/script.js', - Network accessline 464
* const script: Script = { * id: 'location-tracker', * src: 'https://geo.example.com/tracker.js', - Network accessline 465
* id: 'location-tracker', * src: 'https://geo.example.com/tracker.js', * category: 'measurement', - Network accessline 466
* src: 'https://geo.example.com/tracker.js',
packages/core/src/libs/session-report.ts
- Executable scriptline 1
Executable file - Network accessline 230
* reportConsentSession({ * adapter: '@c15t/nextjs', * backendURL: 'https://consent.example.com', - Network accessline 231
* adapter: '@c15t/nextjs', * backendURL: 'https://consent.example.com', * headers: request.headers, - Network accessline 232
* backendURL: 'https://consent.example.com',
packages/core/src/libs/storage-keys.ts
- Executable scriptline 1
Executable file
packages/core/src/libs/vendors.ts
- Executable scriptline 1
Executable file
packages/core/src/modes.ts
- Executable scriptline 1
Executable file - Network accessline 119
* * @defaultValue false * @see https://c15t.com/docs/concepts/modes - Network accessline 120
* @defaultValue false * @see https://c15t.com/docs/concepts/modes */ - Network accessline 121
* @see https://c15t.com/docs/concepts/modes - Network accessline 167
* import { hosted } from '@c15t/core/modes'; * * const mode = hosted({ backendURL: 'https://your-project.inth.app' }); - Network accessline 168
* * const mode = hosted({ backendURL: 'https://your-project.inth.app' }); * ``` - Network accessline 169
* const mode = hosted({ backendURL: 'https://your-project.inth.app' });
packages/core/src/modules/__tests__/category-discovery.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/__tests__/effective-gates.test.ts
- Executable scriptline 1
Executable file - Network accessline 101
const iframe = document.createElement('iframe'); iframe.setAttribute('data-category', 'measurement'); iframe.setAttribute('data-src', 'https://example.test/embed'); - Network accessline 102
iframe.setAttribute('data-category', 'measurement'); iframe.setAttribute('data-src', 'https://example.test/embed'); document.body.appendChild(iframe); - Network accessline 103
iframe.setAttribute('data-src', 'https://example.test/embed'); - Network accessline 110
category: 'measurement', id: 'analytics', src: 'https://example.test/a.js', - Network accessline 111
id: 'analytics', src: 'https://example.test/a.js', }, - Network accessline 112
src: 'https://example.test/a.js', - Network accessline 122
expect(document.querySelector('script')).toBeNull(); expect(iframe.hasAttribute('src')).toBe(false); expect(iframe.getAttribute('data-src')).toBe('https://example.test/embed'); - Network accessline 123
expect(iframe.hasAttribute('src')).toBe(false); expect(iframe.getAttribute('data-src')).toBe('https://example.test/embed'); await kernel.commands.save({ measurement: true }); - Network accessline 124
expect(iframe.getAttribute('data-src')).toBe('https://example.test/embed'); - Network accessline 125
await kernel.commands.save({ measurement: true }); expect(document.querySelector('script')).not.toBeNull(); expect(iframe.getAttribute('src')).toBe('https://example.test/embed'); - Network accessline 126
expect(document.querySelector('script')).not.toBeNull(); expect(iframe.getAttribute('src')).toBe('https://example.test/embed'); }); - Network accessline 127
expect(iframe.getAttribute('src')).toBe('https://example.test/embed'); - Network accessline 138
disposers.push(blocker.dispose); vi.setSystemTime(NOW + DAY); expect((await globalThis.fetch('https://example.test/events')).status).toBe( - Network accessline 139
vi.setSystemTime(NOW + DAY); expect((await globalThis.fetch('https://example.test/events')).status).toBe( 451 - Network accessline 140
expect((await globalThis.fetch('https://example.test/events')).status).toBe( - Network accessline 145
const error = vi.fn(); xhr.addEventListener('error', error); xhr.open('POST', 'https://example.test/events'); - Network accessline 146
xhr.addEventListener('error', error); xhr.open('POST', 'https://example.test/events'); xhr.send(); - Network accessline 147
xhr.open('POST', 'https://example.test/events');
packages/core/src/modules/__tests__/has.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/__tests__/iab-controls.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/__tests__/revocation-reload.server.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/__tests__/revocation-reload.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/__tests__/vendor-allowed.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/__tests__/vendor-gate.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/clear-on-revocation/__tests__/clear-on-revocation.test.ts
- Network accessline 1
/* * @vitest-environment jsdom * @vitest-environment-options {"url":"https://app.example.com/shop/cart"} - Executable scriptline 1
Executable file - Network accessline 2
* @vitest-environment jsdom * @vitest-environment-options {"url":"https://app.example.com/shop/cart"} */ - Network accessline 3
* @vitest-environment-options {"url":"https://app.example.com/shop/cart"}
packages/core/src/modules/clear-on-revocation/clear.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/clear-on-revocation/index.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/clear-on-revocation/targets.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/clear-on-revocation/tools.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/clear-on-revocation/types.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/has.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/iab-controls.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/iframe-blocker/__tests__/body-swap.test.ts
- Executable scriptline 1
Executable file - Network accessline 41
swapBody( [ '<iframe data-category="marketing" data-src="https://embed.example/granted"></iframe>', - Network accessline 42
[ '<iframe data-category="marketing" data-src="https://embed.example/granted"></iframe>', '<iframe data-category="measurement" src="https://embed.example/denied"></iframe>', - Network accessline 43
'<iframe data-category="marketing" data-src="https://embed.example/granted"></iframe>', - Network accessline 44
'<iframe data-category="measurement" src="https://embed.example/denied"></iframe>', - Network accessline 49
const [granted, denied] = Array.from(document.querySelectorAll('iframe')); expect(granted?.getAttribute('src')).toBe('https://embed.example/granted'); - Network accessline 50
expect(granted?.getAttribute('src')).toBe('https://embed.example/granted'); - Network accessline 54
document.body.insertAdjacentHTML( 'beforeend', '<iframe data-category="measurement" src="https://embed.example/late"></iframe>' - Network accessline 55
'beforeend', '<iframe data-category="measurement" src="https://embed.example/late"></iframe>' ); - Network accessline 56
'<iframe data-category="measurement" src="https://embed.example/late"></iframe>'
packages/core/src/modules/iframe-blocker/__tests__/iframe-blocker.test.ts
- Executable scriptline 1
Executable file - Network accessline 55
}, nodeType: 1, ownerDocument: { baseURI: 'https://site.example/' }, - Network accessline 56
nodeType: 1, ownerDocument: { baseURI: 'https://site.example/' }, querySelectorAll() { - Network accessline 57
ownerDocument: { baseURI: 'https://site.example/' }, - Network accessline 122
describe('iframe-blocker: initial scan', () => { test('iframes without data-category are left alone', () => { const iframe = createStubIframe(undefined, 'https://example.com/'); - Network accessline 123
test('iframes without data-category are left alone', () => { const iframe = createStubIframe(undefined, 'https://example.com/'); body.children.push(iframe); - Network accessline 124
const iframe = createStubIframe(undefined, 'https://example.com/'); - Network accessline 127
const kernel = createConsentKernel(); createIframeBlocker({ kernel }); expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 128
createIframeBlocker({ kernel }); expect(iframe.getAttribute('src')).toBe('https://example.com/'); }); - Network accessline 129
expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 134
'marketing', undefined, 'https://example.com/' - Network accessline 135
undefined, 'https://example.com/' ); - Network accessline 136
'https://example.com/' - Network accessline 145
expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 149
test('not consented + src → removes src', () => { const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 150
const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 160
describe('iframe-blocker: reacts to consent changes', () => { test('revoke clears src', () => { const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 161
test('revoke clears src', () => { const iframe = createStubIframe('marketing', 'https://example.com/'); body.children.push(iframe); - Network accessline 162
const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 168
createIframeBlocker({ kernel }); expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 169
expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 177
'marketing', undefined, 'https://example.com/' - Network accessline 178
undefined, 'https://example.com/' ); - Network accessline 179
'https://example.com/' - Network accessline 186
expect(iframe.getAttribute('src')).toBeNull(); expect(iframe.getAttribute('data-src')).toBe('https://example.com/'); - Network accessline 187
expect(iframe.getAttribute('data-src')).toBe('https://example.com/'); - Network accessline 189
void kernel.commands.save({ marketing: true }); expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 190
expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 199
const iframe = createStubIframe('marketing', 'https://late.example.com/'); - Network accessline 212
'marketing', undefined, 'https://late.example.com/' - Network accessline 213
undefined, 'https://late.example.com/' ); - Network accessline 214
'https://late.example.com/' - Network accessline 218
expect(iframe.getAttribute('src')).toBe('https://late.example.com/'); - Network accessline 238
const createUnreadableIframe = function createUnreadableIframe(): StubIframe { return { ...createStubIframe('marketing', 'https://unreadable.example/'), - Network accessline 239
return { ...createStubIframe('marketing', 'https://unreadable.example/'), getAttribute() { - Network accessline 240
...createStubIframe('marketing', 'https://unreadable.example/'), - Network accessline 251
}); const invalid = createStubIframe('bogus', 'https://bogus.example.com/'); - Network accessline 252
const invalid = createStubIframe('bogus', 'https://bogus.example.com/'); - Network accessline 253
const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 268
}); const iframe = createStubIframe(undefined, 'https://example.com/'); - Network accessline 269
const iframe = createStubIframe(undefined, 'https://example.com/'); - Network accessline 293
}); const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 294
const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 298
}); createIframeBlocker({ kernel }); expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 300
expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 302
body.children.unshift( createStubIframe('bogus', 'https://bogus.example.com/') - Network accessline 303
createStubIframe('bogus', 'https://bogus.example.com/') - Network accessline 318
test('gates the iframes next to a node page script cannot read', () => { createIframeBlocker({ kernel: createConsentKernel() }); const before = createStubIframe('marketing', 'https://before.example/'); - Network accessline 319
createIframeBlocker({ kernel: createConsentKernel() }); const before = createStubIframe('marketing', 'https://before.example/'); const after = createStubIframe('marketing', 'https://after.example/'); - Network accessline 320
const before = createStubIframe('marketing', 'https://before.example/'); - Network accessline 321
const after = createStubIframe('marketing', 'https://after.example/'); - Network accessline 335
tagName: 'DIV', }; const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 337
const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 346
}); createIframeBlocker({ kernel: createConsentKernel() }); const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 348
const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 350
expect(() => dispatchBatch([ createStubIframe('bogus', 'https://bogus.example.com/'), - Network accessline 351
dispatchBatch([ createStubIframe('bogus', 'https://bogus.example.com/'), iframe, - Network accessline 352
createStubIframe('bogus', 'https://bogus.example.com/'), - Network accessline 360
describe('iframe-blocker: an unreadable iframe on the page', () => { test('does not stop the initial scan from gating the other iframes', () => { const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 361
test('does not stop the initial scan from gating the other iframes', () => { const iframe = createStubIframe('marketing', 'https://example.com/'); body.children.push(createUnreadableIframe(), iframe); - Network accessline 362
const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 372
describe('iframe-blocker: dispose', () => { test('disconnects observer and kernel subscription', () => { const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 373
test('disconnects observer and kernel subscription', () => { const iframe = createStubIframe('marketing', 'https://example.com/'); body.children.push(iframe); - Network accessline 374
const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 380
const blocker = createIframeBlocker({ kernel }); expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 381
expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 386
iframe.setAttribute('src', 'https://example.com/'); - Network accessline 387
void kernel.commands.save({ marketing: false }); expect(iframe.getAttribute('src')).toBe('https://example.com/'); }); - Network accessline 388
expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 400
describe('iframe-blocker: disableAutomaticBlocking', () => { test('skips initial scan and observer', () => { const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 401
test('skips initial scan and observer', () => { const iframe = createStubIframe('marketing', 'https://example.com/'); body.children.push(iframe); - Network accessline 402
const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 409
expect(iframe.getAttribute('src')).toBe('https://example.com/'); - Network accessline 412
test('processAllIframes() still runs manually', () => { const iframe = createStubIframe('marketing', 'https://example.com/'); - Network accessline 413
const iframe = createStubIframe('marketing', 'https://example.com/');
packages/core/src/modules/iframe-blocker/__tests__/reconcile.test.ts
- Executable scriptline 1
Executable file - Network accessline 60
const iframe = makeIframe({ 'data-category': 'marketing', 'data-src': 'https://example.com/embed', - Network accessline 61
'data-category': 'marketing', 'data-src': 'https://example.com/embed', }); - Network accessline 62
'data-src': 'https://example.com/embed', - Network accessline 63
}); reconcileIframe(iframe, buildReconcilePass(snap)); expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); - Network accessline 64
reconcileIframe(iframe, buildReconcilePass(snap)); expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); expect(iframe.getAttribute('data-src')).toBeNull(); - Network accessline 65
expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); - Network accessline 77
'java\rscript:parent.__iframeProbe = true;void 0', 'data:text/html,<script>parent.__iframeProbe = true</script>', 'blob:https://example.com/untrusted', - Network accessline 78
'data:text/html,<script>parent.__iframeProbe = true</script>', 'blob:https://example.com/untrusted', 'about:blank', - Network accessline 79
'blob:https://example.com/untrusted', - Network accessline 80
'about:blank', 'https://[invalid', ])('keeps unsafe or malformed data-src blocked: %j', (dataSrc) => { - Network accessline 81
'https://[invalid', - Network accessline 95
test.each([ ['https://example.com/embed', 'https://example.com/embed'], - Network accessline 96
['https://example.com/embed', 'https://example.com/embed'], - Network accessline 97
['http://example.com/embed', 'http://example.com/embed'], - Network accessline 98
['//example.com/embed', 'https://example.com/embed'], - Network accessline 99
['/embed', 'https://site.example/embed'], - Network accessline 100
['../embed', 'https://site.example/embed'], - Network accessline 101
['embed', 'https://site.example/content/embed'], - Network accessline 105
const ownerDocument = document.implementation.createHTMLDocument(); const base = ownerDocument.createElement('base'); base.href = 'https://site.example/content/'; - Network accessline 106
const base = ownerDocument.createElement('base'); base.href = 'https://site.example/content/'; ownerDocument.head.appendChild(base); - Network accessline 107
base.href = 'https://site.example/content/'; - Network accessline 124
const iframe = makeIframe({ 'data-category': 'marketing', src: 'https://example.com/embed', - Network accessline 125
'data-category': 'marketing', src: 'https://example.com/embed', }); - Network accessline 126
src: 'https://example.com/embed', - Network accessline 144
const iframe = makeIframe({ 'data-category': 'totally-fake', src: 'https://example.com/embed', - Network accessline 145
'data-category': 'totally-fake', src: 'https://example.com/embed', }); - Network accessline 146
src: 'https://example.com/embed', - Network accessline 156
test('is a no-op when iframe has no data-category', () => { const snap = createConsentKernel().getSnapshot(); const iframe = makeIframe({ src: 'https://example.com/embed' }); - Network accessline 157
const snap = createConsentKernel().getSnapshot(); const iframe = makeIframe({ src: 'https://example.com/embed' }); reconcileIframe(iframe, buildReconcilePass(snap)); - Network accessline 158
const iframe = makeIframe({ src: 'https://example.com/embed' }); - Network accessline 159
reconcileIframe(iframe, buildReconcilePass(snap)); expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); }); - Network accessline 160
expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); - Network accessline 167
const iframe = makeIframe({ 'data-category': 'marketing', 'data-src': 'https://example.com/queued', - Network accessline 168
'data-category': 'marketing', 'data-src': 'https://example.com/queued', src: 'https://example.com/already', - Network accessline 169
'data-src': 'https://example.com/queued', - Network accessline 170
src: 'https://example.com/already', - Network accessline 171
}); reconcileIframe(iframe, buildReconcilePass(snap)); expect(iframe.getAttribute('src')).toBe('https://example.com/already'); - Network accessline 172
reconcileIframe(iframe, buildReconcilePass(snap)); expect(iframe.getAttribute('src')).toBe('https://example.com/already'); expect(iframe.getAttribute('data-src')).toBe('https://example.com/queued'); - Network accessline 173
expect(iframe.getAttribute('src')).toBe('https://example.com/already'); - Network accessline 174
expect(iframe.getAttribute('data-src')).toBe('https://example.com/queued');
packages/core/src/modules/iframe-blocker/__tests__/vendor-reconcile.test.ts
- Executable scriptline 1
Executable file - Network accessline 54
'data-category': 'marketing', 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 55
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 56
src: 'https://www.youtube.com/embed/x', - Network accessline 62
expect(iframe.getAttribute('src')).toBeNull(); expect(iframe.getAttribute('data-src')).toBe( 'https://www.youtube.com/embed/x' - Network accessline 63
expect(iframe.getAttribute('data-src')).toBe( 'https://www.youtube.com/embed/x' ); - Network accessline 64
'https://www.youtube.com/embed/x' - Network accessline 69
const iframe = makeIframe({ 'data-category': 'marketing', 'data-src': 'https://www.youtube.com/embed/x', - Network accessline 70
'data-category': 'marketing', 'data-src': 'https://www.youtube.com/embed/x', 'data-vendor': 'never-declared', - Network accessline 71
'data-src': 'https://www.youtube.com/embed/x', - Network accessline 75
reconcileIframe(iframe, buildReconcilePass(kernelFor([]).getSnapshot())) ).not.toThrow(); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 76
).not.toThrow(); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); }); - Network accessline 77
expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 81
const denied = makeIframe({ 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 82
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 83
src: 'https://www.youtube.com/embed/x', - Network accessline 91
const granted = makeIframe({ 'data-src': 'https://www.youtube.com/embed/y', - Network accessline 92
'data-src': 'https://www.youtube.com/embed/y', - Network accessline 94
}); reconcileIframe(granted, buildReconcilePass(kernelFor([]).getSnapshot())); expect(granted.getAttribute('src')).toBe('https://www.youtube.com/embed/y'); - Network accessline 95
reconcileIframe(granted, buildReconcilePass(kernelFor([]).getSnapshot())); expect(granted.getAttribute('src')).toBe('https://www.youtube.com/embed/y'); }); - Network accessline 96
expect(granted.getAttribute('src')).toBe('https://www.youtube.com/embed/y'); - Network accessline 122
const iframe = makeIframe({ 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 123
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 124
src: 'https://www.youtube.com/embed/x', - Network accessline 125
}); reconcileIframe(iframe, buildReconcilePass(kernel.getSnapshot())); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 126
reconcileIframe(iframe, buildReconcilePass(kernel.getSnapshot())); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); kernel.dispose(); - Network accessline 127
expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 142
const iframe = makeIframe({ 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 143
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 144
src: 'https://www.youtube.com/embed/x', - Network accessline 148
expect(iframe.getAttribute('src')).toBeNull(); expect(iframe.getAttribute('data-src')).toBe( 'https://www.youtube.com/embed/x' - Network accessline 149
expect(iframe.getAttribute('data-src')).toBe( 'https://www.youtube.com/embed/x' ); - Network accessline 150
'https://www.youtube.com/embed/x' - Network accessline 154
kernel.hydrate({ now: NOW, vendorChoice: null }); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 155
expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 162
const iframe = makeIframe({ 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 163
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 164
src: 'https://www.youtube.com/embed/x', - Network accessline 168
iframe.removeAttribute('data-vendor'); reconcileIframe(iframe, buildReconcilePass(kernel.getSnapshot())); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 169
reconcileIframe(iframe, buildReconcilePass(kernel.getSnapshot())); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); expect(iframe.getAttribute('data-src')).toBeNull(); - Network accessline 170
expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 176
test('an iframe that was never gated is left alone', () => { const iframe = makeIframe({ 'data-src': 'https://example.com/lazy' }); - Network accessline 177
const iframe = makeIframe({ 'data-src': 'https://example.com/lazy' }); - Network accessline 178
reconcileIframe(iframe, buildReconcilePass(kernelFor([]).getSnapshot())); expect(iframe.getAttribute('src')).toBeNull(); expect(iframe.getAttribute('data-src')).toBe('https://example.com/lazy'); - Network accessline 179
expect(iframe.getAttribute('src')).toBeNull(); expect(iframe.getAttribute('data-src')).toBe('https://example.com/lazy'); }); - Network accessline 180
expect(iframe.getAttribute('data-src')).toBe('https://example.com/lazy'); - Network accessline 190
iframe.setAttribute('data-src', 'https://www.youtube.com/embed/late'); - Network accessline 195
test("a denied iframe with only an author's data-src is not marked as paused", () => { const iframe = makeIframe({ 'data-src': 'https://www.youtube.com/embed/lazy', - Network accessline 196
const iframe = makeIframe({ 'data-src': 'https://www.youtube.com/embed/lazy', 'data-vendor': 'youtube', - Network accessline 197
'data-src': 'https://www.youtube.com/embed/lazy', - Network accessline 219
'data-category': 'marketing', 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 220
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 221
src: 'https://www.youtube.com/embed/x', - Network accessline 238
'data-category': 'marketing', 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 239
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 240
src: 'https://www.youtube.com/embed/x', - Network accessline 269
'data-category': 'marketing', 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 270
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 271
src: 'https://www.youtube.com/embed/x', - Network accessline 301
'data-category': 'marketing', 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 302
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 303
src: 'https://www.youtube.com/embed/x', - Network accessline 327
'data-category': 'marketing', 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 328
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 329
src: 'https://www.youtube.com/embed/x', - Network accessline 332
'data-category': 'marketing', 'data-vendor': 'vimeo', src: 'https://player.vimeo.com/video/x', - Network accessline 333
'data-vendor': 'vimeo', src: 'https://player.vimeo.com/video/x', }); - Network accessline 334
src: 'https://player.vimeo.com/video/x', - Network accessline 359
'data-category': 'marketing', 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 360
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 361
src: 'https://www.youtube.com/embed/x', - Network accessline 362
}); const blocker = createIframeBlocker({ kernel }); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 363
const blocker = createIframeBlocker({ kernel }); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); kernel.hydrate({ - Network accessline 364
expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 369
expect(iframe.getAttribute('src')).toBeNull(); kernel.hydrate({ now: NOW, vendorChoice: null }); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 370
kernel.hydrate({ now: NOW, vendorChoice: null }); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); blocker.dispose(); - Network accessline 371
expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 379
'data-category': 'marketing', 'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', - Network accessline 380
'data-vendor': 'youtube', src: 'https://www.youtube.com/embed/x', }); - Network accessline 381
src: 'https://www.youtube.com/embed/x', - Network accessline 395
], }); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); - Network accessline 396
}); expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x'); blocker.dispose(); - Network accessline 397
expect(iframe.getAttribute('src')).toBe('https://www.youtube.com/embed/x');
packages/core/src/modules/iframe-blocker/index.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/iframe-blocker/reconcile.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/iframe-blocker/types.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/loader-and-blocker.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/network-blocker/__tests__/decide.test.ts
- Executable scriptline 1
Executable file - Network accessline 22
const snap = createConsentKernel().getSnapshot(); const decision = evaluateBlock( new URL('https://allowed.example/foo'), - Network accessline 23
const decision = evaluateBlock( new URL('https://allowed.example/foo'), 'GET', - Network accessline 24
new URL('https://allowed.example/foo'), - Network accessline 34
const snap = createConsentKernel().getSnapshot(); const decision = evaluateBlock( new URL('https://tracker.example/foo'), - Network accessline 35
const decision = evaluateBlock( new URL('https://tracker.example/foo'), 'GET', - Network accessline 36
new URL('https://tracker.example/foo'), - Network accessline 49
}).getSnapshot(); const decision = evaluateBlock( new URL('https://tracker.example/foo'), - Network accessline 50
const decision = evaluateBlock( new URL('https://tracker.example/foo'), 'GET', - Network accessline 51
new URL('https://tracker.example/foo'), - Network accessline 63
const ruleB = makeRule({ id: 'b' }); const decision = evaluateBlock( new URL('https://tracker.example/foo'), - Network accessline 64
const decision = evaluateBlock( new URL('https://tracker.example/foo'), 'GET', - Network accessline 65
new URL('https://tracker.example/foo'), - Network accessline 76
const rule = makeRule({ pathIncludes: 'track' }); const blocked = evaluateBlock( new URL('https://tracker.example/api/track'), - Network accessline 77
const blocked = evaluateBlock( new URL('https://tracker.example/api/track'), 'GET', - Network accessline 78
new URL('https://tracker.example/api/track'), - Network accessline 83
); const passed = evaluateBlock( new URL('https://tracker.example/api/health'), - Network accessline 84
const passed = evaluateBlock( new URL('https://tracker.example/api/health'), 'GET', - Network accessline 85
new URL('https://tracker.example/api/health'), - Network accessline 97
const rule = makeRule({ methods: ['POST'] }); const blocked = evaluateBlock( new URL('https://tracker.example/'), - Network accessline 98
const blocked = evaluateBlock( new URL('https://tracker.example/'), 'POST', - Network accessline 99
new URL('https://tracker.example/'), - Network accessline 104
); const passed = evaluateBlock( new URL('https://tracker.example/'), - Network accessline 105
const passed = evaluateBlock( new URL('https://tracker.example/'), 'GET', - Network accessline 106
new URL('https://tracker.example/'),
packages/core/src/modules/network-blocker/__tests__/hold.test.ts
- Executable scriptline 1
Executable file - Network accessline 89
const held = window.fetch('https://tracker.example/collect', { - Network accessline 90
method: 'POST', }); await window.fetch('https://api.example/data'); - Network accessline 91
}); await window.fetch('https://api.example/data'); await flush(); - Network accessline 92
await window.fetch('https://api.example/data'); - Network accessline 93
await flush(); expect(original).toHaveBeenCalledOnce(); expect(original.mock.calls[0]?.[0]).toBe('https://api.example/data'); - Network accessline 95
expect(original.mock.calls[0]?.[0]).toBe('https://api.example/data'); - Network accessline 104
const pending = pendingKernel(); holdNetworkRequests(rules); const held = window.fetch('https://tracker.example/collect'); - Network accessline 106
const held = window.fetch('https://tracker.example/collect'); - Network accessline 115
expect((await held).status).toBe(200); expect(original).toHaveBeenCalledWith( 'https://tracker.example/collect', - Network accessline 116
expect(original).toHaveBeenCalledWith( 'https://tracker.example/collect', undefined - Network accessline 117
'https://tracker.example/collect', - Network accessline 123
const pending = pendingKernel(); holdNetworkRequests(rules); const held = window.fetch('https://tracker.example/collect'); - Network accessline 124
holdNetworkRequests(rules); const held = window.fetch('https://tracker.example/collect'); blocker = createNetworkBlocker({ kernel: pending.kernel, rules }); - Network accessline 125
const held = window.fetch('https://tracker.example/collect'); - Network accessline 135
const pending = pendingKernel(); blocker = createNetworkBlocker({ kernel: pending.kernel, rules }); const waiting = window.fetch('https://tracker.example/collect'); - Network accessline 137
const waiting = window.fetch('https://tracker.example/collect'); - Network accessline 148
const onError = vi.fn(); xhr.addEventListener('error', onError); xhr.open('POST', 'https://tracker.example/collect'); - Network accessline 149
xhr.addEventListener('error', onError); xhr.open('POST', 'https://tracker.example/collect'); xhr.send(); - Network accessline 150
xhr.open('POST', 'https://tracker.example/collect'); - Network accessline 161
holdNetworkRequests(rules); const xhr = new XMLHttpRequest(); xhr.open('GET', 'https://tracker.example/collect', false); - Network accessline 163
xhr.open('GET', 'https://tracker.example/collect', false); - Network accessline 176
expect((await window.fetch('https://tracker.example/collect')).status).toBe( - Network accessline 200
const first = holdNetworkRequests(rules); const second = holdNetworkRequests(otherRules); const tracker = window.fetch('https://tracker.example/collect'); - Network accessline 201
const second = holdNetworkRequests(otherRules); const tracker = window.fetch('https://tracker.example/collect'); const ads = window.fetch('https://ads.example/pixel'); - Network accessline 202
const tracker = window.fetch('https://tracker.example/collect'); - Network accessline 203
const ads = window.fetch('https://ads.example/pixel'); - Network accessline 210
expect((await ads).status).toBe(200); expect(original).toHaveBeenCalledOnce(); expect(original.mock.calls[0]?.[0]).toBe('https://ads.example/pixel'); - Network accessline 212
expect(original.mock.calls[0]?.[0]).toBe('https://ads.example/pixel'); - Network accessline 220
const first = holdNetworkRequests(rules); const second = holdNetworkRequests(otherRules); const tracker = window.fetch('https://tracker.example/collect'); - Network accessline 221
const second = holdNetworkRequests(otherRules); const tracker = window.fetch('https://tracker.example/collect'); const ads = window.fetch('https://ads.example/pixel'); - Network accessline 222
const tracker = window.fetch('https://tracker.example/collect'); - Network accessline 223
const ads = window.fetch('https://ads.example/pixel'); - Network accessline 238
const late = window.fetch('https://ads.example/late'); - Network accessline 254
const first = holdNetworkRequests(rules); const second = holdNetworkRequests(otherRules); const tracker = window.fetch('https://tracker.example/collect'); - Network accessline 255
const second = holdNetworkRequests(otherRules); const tracker = window.fetch('https://tracker.example/collect'); const xhr = new XMLHttpRequest(); - Network accessline 256
const tracker = window.fetch('https://tracker.example/collect'); - Network accessline 258
const onError = vi.fn(); xhr.addEventListener('error', onError); xhr.open('POST', 'https://tracker.example/collect'); - Network accessline 259
xhr.addEventListener('error', onError); xhr.open('POST', 'https://tracker.example/collect'); xhr.send(); - Network accessline 260
xhr.open('POST', 'https://tracker.example/collect'); - Network accessline 261
xhr.send(); let adsSettled = false; const ads = window.fetch('https://ads.example/pixel').finally(() => { - Network accessline 262
let adsSettled = false; const ads = window.fetch('https://ads.example/pixel').finally(() => { adsSettled = true; - Network accessline 263
const ads = window.fetch('https://ads.example/pixel').finally(() => { - Network accessline 290
const first = holdNetworkRequests(rules); const second = holdNetworkRequests(otherRules); const tracker = window.fetch('https://tracker.example/collect'); - Network accessline 291
const second = holdNetworkRequests(otherRules); const tracker = window.fetch('https://tracker.example/collect'); let adsSettled = false; - Network accessline 292
const tracker = window.fetch('https://tracker.example/collect'); - Network accessline 293
let adsSettled = false; const ads = window.fetch('https://ads.example/pixel').finally(() => { adsSettled = true; - Network accessline 294
const ads = window.fetch('https://ads.example/pixel').finally(() => { - Network accessline 305
expect((await window.fetch('https://tracker.example/later')).status).toBe( - Network accessline 309
const onError = vi.fn(); xhr.addEventListener('error', onError); xhr.open('POST', 'https://tracker.example/collect'); - Network accessline 310
xhr.addEventListener('error', onError); xhr.open('POST', 'https://tracker.example/collect'); xhr.send(); - Network accessline 311
xhr.open('POST', 'https://tracker.example/collect'); - Network accessline 313
expect(onError).toHaveBeenCalledOnce(); const sync = new XMLHttpRequest(); sync.open('GET', 'https://tracker.example/collect', false); - Network accessline 314
const sync = new XMLHttpRequest(); sync.open('GET', 'https://tracker.example/collect', false); expect(() => sync.send()).toThrow('Request blocked by consent'); - Network accessline 315
sync.open('GET', 'https://tracker.example/collect', false); - Network accessline 319
expect(adsSettled).toBe(false); expect(first.held).toBe(true); await window.fetch('https://cdn.example/app.js'); - Network accessline 320
expect(first.held).toBe(true); await window.fetch('https://cdn.example/app.js'); expect(original).toHaveBeenCalledOnce(); - Network accessline 321
await window.fetch('https://cdn.example/app.js'); - Network accessline 330
const hold = holdNetworkRequests(rules); hold.fail(); expect((await window.fetch('https://tracker.example/collect')).status).toBe( - Network accessline 331
hold.fail(); expect((await window.fetch('https://tracker.example/collect')).status).toBe( 451 - Network accessline 332
expect((await window.fetch('https://tracker.example/collect')).status).toBe( - Network accessline 340
expect(hold.held).toBe(false); expect((await window.fetch('https://tracker.example/collect')).status).toBe( - Network accessline 341
expect((await window.fetch('https://tracker.example/collect')).status).toBe( - Network accessline 355
expect(hold.held).toBe(false); hold.release()(); expect((await window.fetch('https://tracker.example/collect')).status).toBe( - Network accessline 356
hold.release()(); expect((await window.fetch('https://tracker.example/collect')).status).toBe( 451 - Network accessline 357
expect((await window.fetch('https://tracker.example/collect')).status).toBe( - Network accessline 365
test('fails held requests as blocked instead of sending them', async () => { holdNetworkRequests(rules); const held = window.fetch('https://tracker.example/collect'); - Network accessline 366
holdNetworkRequests(rules); const held = window.fetch('https://tracker.example/collect'); const xhr = new XMLHttpRequest(); - Network accessline 367
const held = window.fetch('https://tracker.example/collect'); - Network accessline 369
const onError = vi.fn(); xhr.addEventListener('error', onError); xhr.open('POST', 'https://tracker.example/collect'); - Network accessline 370
xhr.addEventListener('error', onError); xhr.open('POST', 'https://tracker.example/collect'); xhr.send(); - Network accessline 371
xhr.open('POST', 'https://tracker.example/collect'); - Network accessline 392
holdNetworkRequests(ads); holdNetworkRequests(rules); const own = window.fetch('https://tracker.example/collect'); - Network accessline 393
holdNetworkRequests(rules); const own = window.fetch('https://tracker.example/collect'); let adsSettled = false; - Network accessline 394
const own = window.fetch('https://tracker.example/collect'); - Network accessline 395
let adsSettled = false; const other = window.fetch('https://ads.example/pixel').finally(() => { adsSettled = true; - Network accessline 396
const other = window.fetch('https://ads.example/pixel').finally(() => {
packages/core/src/modules/network-blocker/__tests__/network-blocker.test.ts
- Executable scriptline 1
Executable file - Network accessline 80
return Promise.resolve(new Response('ok', { status: 200 })); }, location: { href: 'https://app.example.com/' }, - Network accessline 81
}, location: { href: 'https://app.example.com/' }, }; - Network accessline 82
location: { href: 'https://app.example.com/' }, - Network accessline 103
const response = await window.fetch( - Network accessline 104
'https://www.google-analytics.com/collect' - Network accessline 121
const response = await window.fetch( - Network accessline 122
'https://www.google-analytics.com/collect' - Network accessline 137
const first = await window.fetch( - Network accessline 138
'https://www.google-analytics.com/collect' - Network accessline 144
const second = await window.fetch( - Network accessline 145
'https://www.google-analytics.com/collect' - Network accessline 156
rules: [{ category: 'marketing', domain: 'example.com' }], }); const res = await window.fetch('https://sub.example.com/x'); - Network accessline 157
}); const res = await window.fetch('https://sub.example.com/x'); expect(res.status).toBe(451); - Network accessline 158
const res = await window.fetch('https://sub.example.com/x'); - Network accessline 166
rules: [{ category: 'marketing', domain: 'example.com' }], }); const res = await window.fetch('https://example.org/x'); - Network accessline 167
}); const res = await window.fetch('https://example.org/x'); expect(res.status).toBe(200); - Network accessline 168
const res = await window.fetch('https://example.org/x'); - Network accessline 185
const collect = await window.fetch('https://example.com/collect'); - Network accessline 188
const other = await window.fetch('https://example.com/other'); - Network accessline 205
const get = await window.fetch('https://example.com/x'); - Network accessline 208
const post = await window.fetch('https://example.com/x', { - Network accessline 226
await window.fetch('https://example.com/x'); - Network accessline 243
await window.fetch('https://example.com/x'); - Network accessline 256
const blocked = await window.fetch('https://example.com/x'); - Network accessline 259
blocker.setEnabled(false); const allowed = await window.fetch('https://example.com/x'); - Network accessline 260
const allowed = await window.fetch('https://example.com/x'); - Network accessline 272
expect((await window.fetch('https://example.com/x')).status).toBe(451); - Network accessline 274
blocker.updateRules([{ category: 'marketing', domain: 'other.com' }]); expect((await window.fetch('https://example.com/x')).status).toBe(200); - Network accessline 275
expect((await window.fetch('https://example.com/x')).status).toBe(200); - Network accessline 276
expect((await window.fetch('https://other.com/x')).status).toBe(451); - Network accessline 300
const res = await window.fetch('https://example.com/x'); - Network accessline 313
const res = await window.fetch('https://example.com/x'); - Network accessline 344
const res = await window.fetch('https://example.com/x');
packages/core/src/modules/network-blocker/__tests__/patch-fetch.test.ts
- Executable scriptline 1
Executable file - Network accessline 32
const response = await window.fetch('https://tracker.example/'); - Network accessline 53
await window.fetch('https://tracker.example/'); - Network accessline 72
await window.fetch('https://allowed.example/'); - Network accessline 94
const response = await window.fetch('https://tracker.example/');
packages/core/src/modules/network-blocker/__tests__/url.test.ts
- Executable scriptline 1
Executable file - Network accessline 31
describe('parseUrl', () => { test('passes through URL instances', () => { const url = new URL('https://example.com/'); - Network accessline 32
test('passes through URL instances', () => { const url = new URL('https://example.com/'); expect(parseUrl(url)).toBe(url); - Network accessline 33
const url = new URL('https://example.com/'); - Network accessline 37
test('handles absolute URL strings', () => { const result = parseUrl('https://example.com/foo'); - Network accessline 38
const result = parseUrl('https://example.com/foo'); - Network accessline 45
expect(parseUrl('http://[::1')).toBeNull();
packages/core/src/modules/network-blocker/__tests__/vendor-decide.test.ts
- Executable scriptline 1
Executable file - Network accessline 49
expect( evaluateBlock( new URL('https://www.facebook.com/tr'), - Network accessline 50
evaluateBlock( new URL('https://www.facebook.com/tr'), 'GET', - Network accessline 51
new URL('https://www.facebook.com/tr'), - Network accessline 58
expect( evaluateBlock( new URL('https://ad.doubleclick.net/x'), - Network accessline 59
evaluateBlock( new URL('https://ad.doubleclick.net/x'), 'GET', - Network accessline 60
new URL('https://ad.doubleclick.net/x'),
packages/core/src/modules/network-blocker/blocker.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/network-blocker/decide.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/network-blocker/hold.ts
packages/core/src/modules/network-blocker/index.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/network-blocker/patch-fetch.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/network-blocker/patch-xhr.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/network-blocker/tools.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/network-blocker/types.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/network-blocker/url.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/aux-codec.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/codec-tables.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/combined-subject-identity.test.ts
- Executable scriptline 1
Executable file - Network accessline 178
const subject = resolveRequestSubject({ now: Date.now(), request: { cookie: document.cookie, url: 'http://localhost/' }, - Network accessline 179
now: Date.now(), request: { cookie: document.cookie, url: 'http://localhost/' }, storage, - Network accessline 180
request: { cookie: document.cookie, url: 'http://localhost/' },
packages/core/src/modules/persistence/__tests__/hydrate.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/hydration-read-only.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/lazy-writer.test.ts
packages/core/src/modules/persistence/__tests__/listener-failure.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/necessary-subject.test.ts
- Executable scriptline 1
Executable file - Access to secretsline 436
[Credential-related source omitted] - Access to secretsline 494
[Credential-related source omitted] - Network accessline 691
const subject = resolveRequestSubject({ now: Date.now(), request: { cookie: document.cookie, url: 'https://example.com/' }, - Network accessline 692
now: Date.now(), request: { cookie: document.cookie, url: 'https://example.com/' }, }); - Network accessline 693
request: { cookie: document.cookie, url: 'https://example.com/' }, - Network accessline 889
const subject = resolveRequestSubject({ now, request: { cookie: document.cookie, url: 'https://example.com/' }, - Network accessline 890
now, request: { cookie: document.cookie, url: 'https://example.com/' }, }); - Network accessline 891
request: { cookie: document.cookie, url: 'https://example.com/' }, - Network accessline 947
name: 'Meta Pixel', presentable: true, privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 948
presentable: true, privacyPolicyUrl: 'https://example.com/privacy', source: 'config', - Network accessline 949
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 988
const subject = resolveRequestSubject({ now: Date.now(), request: { cookie: document.cookie, url: 'https://example.com/' }, - Network accessline 989
now: Date.now(), request: { cookie: document.cookie, url: 'https://example.com/' }, }); - Network accessline 990
request: { cookie: document.cookie, url: 'https://example.com/' }, - Network accessline 1101
name: 'Meta Pixel', presentable: true, privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 1102
presentable: true, privacyPolicyUrl: 'https://example.com/privacy', source: 'config', - Network accessline 1103
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 1559
name: 'Meta Pixel', presentable: true, privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 1560
presentable: true, privacyPolicyUrl: 'https://example.com/privacy', source: 'config', - Network accessline 1561
privacyPolicyUrl: 'https://example.com/privacy',
packages/core/src/modules/persistence/__tests__/persistence.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/projection-merge.test.ts
packages/core/src/modules/persistence/__tests__/public-stored-records.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/record-codec-bytes.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/record-codec.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/record-storage.test.ts
packages/core/src/modules/persistence/__tests__/record-writes.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/schedule.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/startup-save.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/storage-access.test.ts
- Executable scriptline 1
Executable file - Network accessline 328
const subject = resolveRequestSubject({ now: Date.now(), request: { cookie: document.cookie, url: 'https://example.com/' }, - Network accessline 329
now: Date.now(), request: { cookie: document.cookie, url: 'https://example.com/' }, }); - Network accessline 330
request: { cookie: document.cookie, url: 'https://example.com/' }, - Network accessline 370
name: 'Meta Pixel', presentable: true, privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 371
presentable: true, privacyPolicyUrl: 'https://example.com/privacy', source: 'config' as const, - Network accessline 372
privacyPolicyUrl: 'https://example.com/privacy',
packages/core/src/modules/persistence/__tests__/subject-id.test.ts
- Executable scriptline 1
Executable file - Access to secretsline 71
[Credential-related source omitted] - Access to secretsline 224
[Credential-related source omitted] - Access to secretsline 230
[Credential-related source omitted] - Access to secretsline 255
[Credential-related source omitted] - Network accessline 316
const subject = resolveRequestSubject({ now: NOW, request: { cookie: document.cookie, url: 'https://example.com/' }, - Network accessline 317
now: NOW, request: { cookie: document.cookie, url: 'https://example.com/' }, }); - Network accessline 318
request: { cookie: document.cookie, url: 'https://example.com/' }, - Access to secretsline 354
[Credential-related source omitted] - Access to secretsline 371
[Credential-related source omitted] - Access to secretsline 399
[Credential-related source omitted] - Access to secretsline 433
[Credential-related source omitted] - Access to secretsline 452
[Credential-related source omitted] - Network accessline 494
name: 'Meta Pixel', presentable: true, privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 495
presentable: true, privacyPolicyUrl: 'https://example.com/privacy', source: 'config', - Network accessline 496
privacyPolicyUrl: 'https://example.com/privacy',
packages/core/src/modules/persistence/__tests__/vendor-codec.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/__tests__/vendor-persistence.test.ts
- Executable scriptline 1
Executable file - Network accessline 38
name: 'Meta Pixel', presentable: true, privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 39
presentable: true, privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', source: 'config', - Network accessline 40
privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Access to secretsline 195
[Credential-related source omitted] - Network accessline 375
const subject = resolveRequestSubject({ now: NOW, request: { cookie: document.cookie, url: 'https://example.com/' }, - Network accessline 376
now: NOW, request: { cookie: document.cookie, url: 'https://example.com/' }, }); - Network accessline 377
request: { cookie: document.cookie, url: 'https://example.com/' },
packages/core/src/modules/persistence/__tests__/write.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/clear.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/epoch.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/hydrate.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/index.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/mount.ts
packages/core/src/modules/persistence/record-codec.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/record-storage.ts
packages/core/src/modules/persistence/tools.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/types.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/writer-loader-static.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/writer-loader.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/writer/encode.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/writer/reconcile.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/writer/schedule.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/writer/store.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/writer/types.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/persistence/writer/write.ts
packages/core/src/modules/persistence/writer/writer.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/revocation-reload.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/__tests__/current-consent.test.ts
- Executable scriptline 1
Executable file - Network accessline 307
onError: completion, onLoad: completion, src: 'https://example.invalid/current-consent.js', - Network accessline 308
onLoad: completion, src: 'https://example.invalid/current-consent.js', }), - Network accessline 309
src: 'https://example.invalid/current-consent.js',
packages/core/src/modules/script-loader/__tests__/eligibility.test.ts
- Executable scriptline 1
Executable file - Network accessline 51
category: 'marketing', id: 's', src: 'https://x.example/s.js', - Network accessline 52
id: 's', src: 'https://x.example/s.js', }, - Network accessline 53
src: 'https://x.example/s.js', - Network accessline 77
category: 'marketing', id: 's', src: 'https://x.example/s.js', - Network accessline 78
id: 's', src: 'https://x.example/s.js', vendorId: 'v1', - Network accessline 79
src: 'https://x.example/s.js', - Network accessline 95
const pass = buildReconcilePass(snap, scriptLoaderTools); const [entry] = normalizeScripts( [{ category: 'marketing', id: 's', src: 'https://x.example/s.js' }], - Network accessline 96
const [entry] = normalizeScripts( [{ category: 'marketing', id: 's', src: 'https://x.example/s.js' }], scriptLoaderTools.isVendorId - Network accessline 97
[{ category: 'marketing', id: 's', src: 'https://x.example/s.js' }], - Network accessline 108
const pass = buildReconcilePass(snap, scriptLoaderTools); const [entry] = normalizeScripts( [{ category: 'marketing', id: 's', src: 'https://x.example/s.js' }], - Network accessline 109
const [entry] = normalizeScripts( [{ category: 'marketing', id: 's', src: 'https://x.example/s.js' }], scriptLoaderTools.isVendorId - Network accessline 110
[{ category: 'marketing', id: 's', src: 'https://x.example/s.js' }], - Network accessline 123
category: 'analytics' as Script['category'], id: 's', src: 'https://x.example/s.js', - Network accessline 124
id: 's', src: 'https://x.example/s.js', }; - Network accessline 125
src: 'https://x.example/s.js',
packages/core/src/modules/script-loader/__tests__/lifecycle-regressions.test.ts
- Executable scriptline 1
Executable file - Network accessline 37
onConsentChange, onDispose, src: 'https://example.com/original.js', - Network accessline 38
onDispose, src: 'https://example.com/original.js', }, - Network accessline 39
src: 'https://example.com/original.js', - Network accessline 48
category: 'marketing', id: 'new-first', src: 'https://example.com/new.js', - Network accessline 49
id: 'new-first', src: 'https://example.com/new.js', }, - Network accessline 50
src: 'https://example.com/new.js', - Network accessline 81
category: 'measurement', id: 'invalid-initial', src: 'https://example.com/invalid.js', - Network accessline 82
id: 'invalid-initial', src: 'https://example.com/invalid.js', validate: () => { - Network accessline 83
src: 'https://example.com/invalid.js', - Network accessline 101
onLoad, persistAfterConsentRevoked: 'loaded', src: 'https://example.com/vendor.js', - Network accessline 102
persistAfterConsentRevoked: 'loaded', src: 'https://example.com/vendor.js', }); - Network accessline 103
src: 'https://example.com/vendor.js', - Network accessline 136
onConsentChange, persistAfterConsentRevoked, src: 'https://example.com/vendor.js', - Network accessline 137
persistAfterConsentRevoked, src: 'https://example.com/vendor.js', }; - Network accessline 138
src: 'https://example.com/vendor.js', - Network accessline 156
onLoad, persistAfterConsentRevoked: true, src: 'https://example.com/vendor.js', - Network accessline 157
persistAfterConsentRevoked: true, src: 'https://example.com/vendor.js', }; - Network accessline 158
src: 'https://example.com/vendor.js', - Network accessline 178
id: 'first-resource', resourceKey: 'shared-batch', src: 'https://example.com/shared.js', - Network accessline 179
resourceKey: 'shared-batch', src: 'https://example.com/shared.js', }; - Network accessline 180
src: 'https://example.com/shared.js', - Network accessline 210
onError: firstError, resourceKey: 'shared-pending-error', src: 'https://example.com/shared.js', - Network accessline 211
resourceKey: 'shared-pending-error', src: 'https://example.com/shared.js', }; - Network accessline 212
src: 'https://example.com/shared.js', - Network accessline 261
onLoad: firstLoad, resourceKey: 'shared-existing', src: 'https://example.com/shared.js', - Network accessline 262
resourceKey: 'shared-existing', src: 'https://example.com/shared.js', }; - Network accessline 263
src: 'https://example.com/shared.js', - Network accessline 287
onLoad: firstCompletion, resourceKey: 'completed-consent', src: 'https://example.com/shared.js', - Network accessline 288
resourceKey: 'completed-consent', src: 'https://example.com/shared.js', }; - Network accessline 289
src: 'https://example.com/shared.js', - Network accessline 325
id: 'completed-owner', resourceKey: 'completed-loaders', src: 'https://example.com/shared.js', - Network accessline 326
resourceKey: 'completed-loaders', src: 'https://example.com/shared.js', }; - Network accessline 327
src: 'https://example.com/shared.js', - Network accessline 382
id: 'completed-dispose-first', resourceKey: 'completed-dispose', src: 'https://example.com/shared.js', - Network accessline 383
resourceKey: 'completed-dispose', src: 'https://example.com/shared.js', }; - Network accessline 384
src: 'https://example.com/shared.js', - Network accessline 400
id: 'completed-remount-first', resourceKey: 'completed-remount', src: 'https://example.com/shared.js', - Network accessline 401
resourceKey: 'completed-remount', src: 'https://example.com/shared.js', }; - Network accessline 402
src: 'https://example.com/shared.js', - Network accessline 426
id: 'completed-current-first', resourceKey: 'completed-current', src: 'https://example.com/shared.js', - Network accessline 427
resourceKey: 'completed-current', src: 'https://example.com/shared.js', }; - Network accessline 428
src: 'https://example.com/shared.js', - Network accessline 465
persistAfterConsentRevoked, resourceKey: 'shared-consent', src: 'https://example.com/shared.js', - Network accessline 466
resourceKey: 'shared-consent', src: 'https://example.com/shared.js', }; - Network accessline 467
src: 'https://example.com/shared.js', - Network accessline 500
id: 'transfer-first', resourceKey: 'shared-multi-transfer', src: 'https://example.com/shared.js', - Network accessline 501
resourceKey: 'shared-multi-transfer', src: 'https://example.com/shared.js', }; - Network accessline 502
src: 'https://example.com/shared.js', - Network accessline 531
id: 'resource-key', resourceKey: 'vendor-bundle-one', src: 'https://example.com/one.js', - Network accessline 532
resourceKey: 'vendor-bundle-one', src: 'https://example.com/one.js', }; - Network accessline 533
src: 'https://example.com/one.js', - Network accessline 539
onLoad: secondLoad, resourceKey: 'vendor-bundle-two', src: 'https://example.com/two.js', - Network accessline 540
resourceKey: 'vendor-bundle-two', src: 'https://example.com/two.js', }, - Network accessline 541
src: 'https://example.com/two.js', - Network accessline 545
const elements = [...document.head.querySelectorAll('script')]; expect(elements.map((element) => element.src)).toEqual([ 'https://example.com/one.js', - Network accessline 546
expect(elements.map((element) => element.src)).toEqual([ 'https://example.com/one.js', 'https://example.com/two.js', - Network accessline 547
'https://example.com/one.js', - Network accessline 548
'https://example.com/two.js', - Network accessline 570
onLoad: loaded, resourceKey: 'before', src: 'https://example.com/vendor.js', - Network accessline 571
resourceKey: 'before', src: 'https://example.com/vendor.js', }; - Network accessline 572
src: 'https://example.com/vendor.js', - Network accessline 592
category: 'measurement', id: 'shared-download', src: 'https://example.com/vendor.js', - Network accessline 593
id: 'shared-download', src: 'https://example.com/vendor.js', }; - Network accessline 594
src: 'https://example.com/vendor.js', - Network accessline 619
id: 'shared-error', onError: error, src: 'https://example.com/vendor.js', - Network accessline 620
onError: error, src: 'https://example.com/vendor.js', }; - Network accessline 621
src: 'https://example.com/vendor.js', - Network accessline 645
onLoad: load, persistAfterConsentRevoked: true, src: 'https://example.com/vendor.js', - Network accessline 646
persistAfterConsentRevoked: true, src: 'https://example.com/vendor.js', }; - Network accessline 647
src: 'https://example.com/vendor.js', - Network accessline 670
onBeforeLoad: () => initialize(), onConsentChange: ({ hasConsent }) => consent(hasConsent), src: 'https://example.com/vendor.js', - Network accessline 671
onConsentChange: ({ hasConsent }) => consent(hasConsent), src: 'https://example.com/vendor.js', }); - Network accessline 672
src: 'https://example.com/vendor.js', - Network accessline 694
onLoad: previousLoad, resourceKey: 'stable-dispose-resource', src: 'https://example.com/vendor.js', - Network accessline 695
resourceKey: 'stable-dispose-resource', src: 'https://example.com/vendor.js', }; - Network accessline 696
src: 'https://example.com/vendor.js', - Network accessline 733
onBeforeLoad: prepare, onDispose: cleanup, src: 'https://example.com/vendor.js', - Network accessline 734
onDispose: cleanup, src: 'https://example.com/vendor.js', }; - Network accessline 735
src: 'https://example.com/vendor.js', - Network accessline 765
onDispose: previousCleanup, onLoad: previousLoad, src: 'https://example.com/vendor.js', - Network accessline 766
onLoad: previousLoad, src: 'https://example.com/vendor.js', }; - Network accessline 767
src: 'https://example.com/vendor.js', - Network accessline 811
onBeforeLoad: initialize, onDispose: cleanup, src: 'https://example.com/vendor.js', - Network accessline 812
onDispose: cleanup, src: 'https://example.com/vendor.js', }); - Network accessline 813
src: 'https://example.com/vendor.js', - Network accessline 839
onBeforeLoad: initialize, onDispose: cleanup, src: 'https://example.com/vendor.js', - Network accessline 840
onDispose: cleanup, src: 'https://example.com/vendor.js', }); - Network accessline 841
src: 'https://example.com/vendor.js', - Network accessline 865
onDispose: cleanup, persistAfterConsentRevoked: true, src: 'https://example.com/vendor.js', - Network accessline 866
persistAfterConsentRevoked: true, src: 'https://example.com/vendor.js', }); - Network accessline 867
src: 'https://example.com/vendor.js', - Network accessline 905
id: 'changed-disposer', onDispose: cleanup, src: 'https://example.com/vendor.js', - Network accessline 906
onDispose: cleanup, src: 'https://example.com/vendor.js', }; - Network accessline 907
src: 'https://example.com/vendor.js', - Network accessline 945
id: 'retained', persistAfterConsentRevoked: true, src: 'https://example.com/old.js', - Network accessline 946
persistAfterConsentRevoked: true, src: 'https://example.com/old.js', }; - Network accessline 947
src: 'https://example.com/old.js', - Network accessline 957
action === 'remove' ? [] : [{ ...script, src: 'https://example.com/new.js' }] - Network accessline 958
? [] : [{ ...script, src: 'https://example.com/new.js' }] ); - Network accessline 959
: [{ ...script, src: 'https://example.com/new.js' }] - Network accessline 963
void kernel.commands.save({ measurement: true }); expect(Array.from(document.scripts, (node) => node.src)).toEqual( action === 'replace' ? ['https://example.com/new.js'] : [] - Network accessline 964
expect(Array.from(document.scripts, (node) => node.src)).toEqual( action === 'replace' ? ['https://example.com/new.js'] : [] ); - Network accessline 965
action === 'replace' ? ['https://example.com/new.js'] : [] - Network accessline 1011
const foreign = document.createElement('script'); foreign.id = 'c15t-script-borrowed'; foreign.src = 'https://example.com/foreign.js'; - Network accessline 1012
foreign.id = 'c15t-script-borrowed'; foreign.src = 'https://example.com/foreign.js'; document.head.appendChild(foreign); - Network accessline 1013
foreign.src = 'https://example.com/foreign.js'; - Network accessline 1080
onDispose: cleanup, persistAfterConsentRevoked: true, src: 'https://example.com/old.js', - Network accessline 1081
persistAfterConsentRevoked: true, src: 'https://example.com/old.js', }; - Network accessline 1082
src: 'https://example.com/old.js', - Network accessline 1093
action === 'remove' ? [] : [{ ...script, src: 'https://example.com/new.js' }] - Network accessline 1094
? [] : [{ ...script, src: 'https://example.com/new.js' }] ); - Network accessline 1095
: [{ ...script, src: 'https://example.com/new.js' }] - Network accessline 1143
onError: oldCallback, onLoad: oldCallback, src: 'https://example.com/vendor.js', - Network accessline 1144
onLoad: oldCallback, src: 'https://example.com/vendor.js', }; - Network accessline 1145
src: 'https://example.com/vendor.js', - Network accessline 1184
id: 'disable-retention', persistAfterConsentRevoked: true, src: 'https://example.com/vendor.js', - Network accessline 1185
persistAfterConsentRevoked: true, src: 'https://example.com/vendor.js', }; - Network accessline 1186
src: 'https://example.com/vendor.js', - Network accessline 1210
category: 'necessary', id: 'completion-replaced', src: 'https://example.com/new.js', - Network accessline 1211
id: 'completion-replaced', src: 'https://example.com/new.js', }; - Network accessline 1212
src: 'https://example.com/new.js', - Network accessline 1218
onError: replace, onLoad: replace, src: 'https://example.com/old.js', - Network accessline 1219
onLoad: replace, src: 'https://example.com/old.js', }, - Network accessline 1220
src: 'https://example.com/old.js', - Network accessline 1242
id: 'remove-on-load', onLoad: ({ element }) => element?.remove(), src: 'https://example.com/vendor.js', - Network accessline 1243
onLoad: ({ element }) => element?.remove(), src: 'https://example.com/vendor.js', }, - Network accessline 1244
src: 'https://example.com/vendor.js',
packages/core/src/modules/script-loader/__tests__/mount.test.ts
- Executable scriptline 1
Executable file - Network accessline 59
const config = source === 'remote' ? { src: 'https://example.com/vendor.js' } - Network accessline 60
source === 'remote' ? { src: 'https://example.com/vendor.js' } : { textContent: 'void 0;' }; - Network accessline 61
? { src: 'https://example.com/vendor.js' } - Network accessline 84
id: 'second', onBeforeLoad: ({ element }) => { element?.setAttribute('src', 'https://example.com/vendor.js'); - Network accessline 85
onBeforeLoad: ({ element }) => { element?.setAttribute('src', 'https://example.com/vendor.js'); }, - Network accessline 86
element?.setAttribute('src', 'https://example.com/vendor.js'); - Network accessline 122
onBeforeLoad: ({ element }) => element?.removeAttribute('src'), onLoad, src: 'https://example.com/already-loaded.js', - Network accessline 123
onLoad, src: 'https://example.com/already-loaded.js', }, - Network accessline 124
src: 'https://example.com/already-loaded.js', - Network accessline 148
category: 'necessary', id: 'inherits', src: 'https://example.com/a.js', - Network accessline 149
id: 'inherits', src: 'https://example.com/a.js', }, - Network accessline 150
src: 'https://example.com/a.js', - Network accessline 160
id: 'own', nonce: 'script-nonce', src: 'https://example.com/b.js', - Network accessline 161
nonce: 'script-nonce', src: 'https://example.com/b.js', }, - Network accessline 162
src: 'https://example.com/b.js', - Network accessline 196
category: 'marketing', id: 's', src: 'https://x/s.js', - Network accessline 197
id: 's', src: 'https://x/s.js', textContent: 'console.log(1);', - Network accessline 198
src: 'https://x/s.js', - Network accessline 248
id: 'runtime-check', onBeforeLoad, src: 'https://example.com/sdk.js', - Network accessline 249
onBeforeLoad, src: 'https://example.com/sdk.js', }; - Network accessline 250
src: 'https://example.com/sdk.js', - Network accessline 291
category: 'marketing', id: 's', src: 'https://x/s.js', - Network accessline 292
id: 's', src: 'https://x/s.js', }; - Network accessline 293
src: 'https://x/s.js', - Network accessline 307
category: 'marketing', id: 's', src: 'https://x/s.js', - Network accessline 308
id: 's', src: 'https://x/s.js', }; - Network accessline 309
src: 'https://x/s.js', - Network accessline 326
onBeforeLoad, onConsentChange, src: 'https://x/s.js', - Network accessline 327
onConsentChange, src: 'https://x/s.js', }; - Network accessline 328
src: 'https://x/s.js', - Network accessline 381
id: 's', persistAfterConsentRevoked: 'loaded', src: 'https://x/s.js', - Network accessline 382
persistAfterConsentRevoked: 'loaded', src: 'https://x/s.js', }; - Network accessline 383
src: 'https://x/s.js', - Network accessline 399
const element = startOnServer( 'mutable-server', 'https://example.com/server.js' - Network accessline 400
'mutable-server', 'https://example.com/server.js' ); - Network accessline 401
'https://example.com/server.js' - Network accessline 437
onBeforeLoad, onLoad, src: 'https://x/s.js', - Network accessline 438
onLoad, src: 'https://x/s.js', }; - Network accessline 439
src: 'https://x/s.js', - Network accessline 456
test('adopts the element started for its resourceKey, not its id', () => { const { deps } = makeDeps(); const other = startOnServer('s', 'https://x/other.js'); - Network accessline 457
const { deps } = makeDeps(); const other = startOnServer('s', 'https://x/other.js'); const own = startOnServer('shared', 'https://x/s.js'); - Network accessline 458
const other = startOnServer('s', 'https://x/other.js'); - Network accessline 459
const own = startOnServer('shared', 'https://x/s.js'); - Network accessline 478
id: 's', onLoad, src: 'https://x/s.js', - Network accessline 479
onLoad, src: 'https://x/s.js', }; - Network accessline 480
src: 'https://x/s.js', - Network accessline 494
category: 'marketing', id: 's', src: 'https://x/s.js', - Network accessline 495
id: 's', src: 'https://x/s.js', }; - Network accessline 496
src: 'https://x/s.js', - Network accessline 498
const started = startOnServer('s', 'https://x/old.js'); - Network accessline 505
expect.objectContaining({ action: 'already_loaded', data: { serverSrc: 'https://x/old.js' }, - Network accessline 506
action: 'already_loaded', data: { serverSrc: 'https://x/old.js' }, }) - Network accessline 507
data: { serverSrc: 'https://x/old.js' }, - Network accessline 539
category: 'marketing', id: 's', src: 'https://x/s.js', - Network accessline 540
id: 's', src: 'https://x/s.js', ...extra, - Network accessline 541
src: 'https://x/s.js', - Network accessline 614
const startHeld = function startHeld(): HTMLScriptElement { const element = document.createElement('script'); element.setAttribute('src', 'https://x/s.js'); - Network accessline 615
const element = document.createElement('script'); element.setAttribute('src', 'https://x/s.js'); Object.assign(element, { __c15tHeld: true }); - Network accessline 616
element.setAttribute('src', 'https://x/s.js'); - Network accessline 667
onBeforeLoad, onConsentChange, src: 'https://x/s.js', - Network accessline 668
onConsentChange, src: 'https://x/s.js', }; - Network accessline 669
src: 'https://x/s.js', - Network accessline 692
onConsentChange: (info) => calls.push(['onConsentChange', info.hasConsent]), src: 'https://x/s.js', - Network accessline 693
calls.push(['onConsentChange', info.hasConsent]), src: 'https://x/s.js', }; - Network accessline 694
src: 'https://x/s.js', - Network accessline 708
category: 'marketing', id: 's', src: 'https://x/s.js', - Network accessline 709
id: 's', src: 'https://x/s.js', ...extra, - Network accessline 710
src: 'https://x/s.js', - Network accessline 764
const element = startOnServer( 'shared', 'https://x/s.js', - Network accessline 765
'shared', 'https://x/s.js', undefined, - Network accessline 766
'https://x/s.js', - Network accessline 771
unmountScript( deps, { ...shared, id: 'skipped', src: 'https://x/s.js' }, - Network accessline 772
deps, { ...shared, id: 'skipped', src: 'https://x/s.js' }, snapshot, - Network accessline 773
{ ...shared, id: 'skipped', src: 'https://x/s.js' }, - Network accessline 777
mountScript( deps, { ...shared, id: 'runs', src: 'https://x/s.js' }, - Network accessline 778
deps, { ...shared, id: 'runs', src: 'https://x/s.js' }, snapshot, - Network accessline 779
{ ...shared, id: 'runs', src: 'https://x/s.js' }, - Network accessline 798
id: 's', persistAfterConsentRevoked: true, src: 'https://x/s.js', - Network accessline 799
persistAfterConsentRevoked: true, src: 'https://x/s.js', }; - Network accessline 800
src: 'https://x/s.js', - Network accessline 815
category: 'marketing', id: 's', src: 'https://x/s.js', - Network accessline 816
id: 's', src: 'https://x/s.js', }; - Network accessline 817
src: 'https://x/s.js', - Network accessline 831
category: 'marketing', id: 's', src: 'https://x/s.js', - Network accessline 832
id: 's', src: 'https://x/s.js', }; - Network accessline 833
src: 'https://x/s.js', - Network accessline 851
category: 'marketing', id: 'never', src: 'https://x/s.js', - Network accessline 852
id: 'never', src: 'https://x/s.js', }; - Network accessline 853
src: 'https://x/s.js', - Network accessline 865
mountScript( deps, { category: 'marketing', id: 's1', src: 'https://x/s1.js' }, - Network accessline 866
deps, { category: 'marketing', id: 's1', src: 'https://x/s1.js' }, snap, - Network accessline 867
{ category: 'marketing', id: 's1', src: 'https://x/s1.js' }, - Network accessline 881
mountScript( deps, { category: 'marketing', id: 'h1', src: 'https://x/h1.js' }, - Network accessline 882
deps, { category: 'marketing', id: 'h1', src: 'https://x/h1.js' }, snap, - Network accessline 883
{ category: 'marketing', id: 'h1', src: 'https://x/h1.js' }, - Network accessline 888
mountScript( deps, { category: 'marketing', id: 'h2', src: 'https://x/h2.js' }, - Network accessline 889
deps, { category: 'marketing', id: 'h2', src: 'https://x/h2.js' }, snap, - Network accessline 890
{ category: 'marketing', id: 'h2', src: 'https://x/h2.js' }, - Network accessline 898
category: 'marketing', id: 'b1', src: 'https://x/b1.js', - Network accessline 899
id: 'b1', src: 'https://x/b1.js', target: 'body', - Network accessline 900
src: 'https://x/b1.js',
packages/core/src/modules/script-loader/__tests__/normalize.test.ts
packages/core/src/modules/script-loader/__tests__/replacement-completion.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/__tests__/resource-retention.test.ts
- Executable scriptline 1
Executable file - Network accessline 42
onDispose, persistAfterDispose, src: 'https://example.com/sdk.js', - Network accessline 43
persistAfterDispose, src: 'https://example.com/sdk.js', }, - Network accessline 44
src: 'https://example.com/sdk.js', - Network accessline 58
id: 'shared-retention', persistAfterDispose, src: 'https://example.com/sdk.js', - Network accessline 59
persistAfterDispose, src: 'https://example.com/sdk.js', }); - Network accessline 60
src: 'https://example.com/sdk.js', - Network accessline 79
id: 'shared-non-owner-retention', persistAfterDispose, src: 'https://example.com/sdk.js', - Network accessline 80
persistAfterDispose, src: 'https://example.com/sdk.js', }); - Network accessline 81
src: 'https://example.com/sdk.js', - Network accessline 98
id: 'shared-revocation', persistAfterDispose, src: 'https://example.com/sdk.js', - Network accessline 99
persistAfterDispose, src: 'https://example.com/sdk.js', }); - Network accessline 100
src: 'https://example.com/sdk.js', - Network accessline 122
onLoad: oldLoad, persistAfterDispose: true, src: 'https://example.com/sdk.js', - Network accessline 123
persistAfterDispose: true, src: 'https://example.com/sdk.js', }; - Network accessline 124
src: 'https://example.com/sdk.js', - Network accessline 205
onLoad: oldLoad, persistAfterDispose: true, src: 'https://example.com/sdk.js', - Network accessline 206
persistAfterDispose: true, src: 'https://example.com/sdk.js', }; - Network accessline 207
src: 'https://example.com/sdk.js', - Network accessline 226
id: 'retained-dispose-only', persistAfterDispose: true, src: 'https://example.com/sdk.js', - Network accessline 227
persistAfterDispose: true, src: 'https://example.com/sdk.js', }, - Network accessline 228
src: 'https://example.com/sdk.js', - Network accessline 239
onDispose: vi.fn(), persistAfterDispose: true, src: 'https://example.com/sdk.js', - Network accessline 240
persistAfterDispose: true, src: 'https://example.com/sdk.js', }; - Network accessline 241
src: 'https://example.com/sdk.js', - Network accessline 253
id: 'retained-new-owner', persistAfterDispose: true, src: 'https://example.com/sdk.js', - Network accessline 254
persistAfterDispose: true, src: 'https://example.com/sdk.js', }; - Network accessline 255
src: 'https://example.com/sdk.js',
packages/core/src/modules/script-loader/__tests__/script-loader.test.ts
- Executable scriptline 1
Executable file - Network accessline 160
kernel, scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 161
scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, ], - Network accessline 162
{ category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 166
expect(head.children).toHaveLength(1); expect(head.children[0]?.src).toBe('https://example.com/gtm.js'); - Network accessline 167
expect(head.children[0]?.src).toBe('https://example.com/gtm.js'); - Network accessline 173
kernel, scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 174
scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, ], - Network accessline 175
{ category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 194
kernel, scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 195
scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, ], - Network accessline 196
{ category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 213
kernel, scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 214
scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, ], - Network accessline 215
{ category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 232
category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js', - Network accessline 233
id: 'gtm', src: 'https://example.com/gtm.js', }; - Network accessline 234
src: 'https://example.com/gtm.js', - Network accessline 248
category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js', - Network accessline 249
id: 'gtm', src: 'https://example.com/gtm.js', }; - Network accessline 250
src: 'https://example.com/gtm.js', - Network accessline 267
category: 'marketing', id: 'shared-anon', src: 'https://example.com/shared.js', - Network accessline 268
id: 'shared-anon', src: 'https://example.com/shared.js', }; - Network accessline 269
src: 'https://example.com/shared.js', - Network accessline 299
category: 'marketing', id: 'shared-stable', src: 'https://example.com/shared-stable.js', - Network accessline 300
id: 'shared-stable', src: 'https://example.com/shared-stable.js', }; - Network accessline 301
src: 'https://example.com/shared-stable.js', - Network accessline 330
onBeforeLoad, onConsentChange, src: 'https://example.com/google.js', - Network accessline 331
onConsentChange, src: 'https://example.com/google.js', }, - Network accessline 332
src: 'https://example.com/google.js', - Network accessline 368
category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js', - Network accessline 369
id: 'gtm', src: 'https://example.com/gtm.js', }, - Network accessline 370
src: 'https://example.com/gtm.js', - Network accessline 391
onBeforeLoad, onConsentChange, src: 'https://example.com/sdk.js', - Network accessline 392
onConsentChange, src: 'https://example.com/sdk.js', }, - Network accessline 393
src: 'https://example.com/sdk.js', - Network accessline 421
onConsentChange, onDispose, src: 'https://example.com/observed.js', - Network accessline 422
onDispose, src: 'https://example.com/observed.js', vendor: 'observed-vendor', - Network accessline 423
src: 'https://example.com/observed.js', - Network accessline 473
onConsentChange, persistAfterConsentRevoked: true, src: 'https://example.com/pixel.js', - Network accessline 474
persistAfterConsentRevoked: true, src: 'https://example.com/pixel.js', }, - Network accessline 475
src: 'https://example.com/pixel.js', - Network accessline 507
id: 'gtm', persistAfterConsentRevoked: true, src: 'https://example.com/gtm.js', - Network accessline 508
persistAfterConsentRevoked: true, src: 'https://example.com/gtm.js', }, - Network accessline 509
src: 'https://example.com/gtm.js', - Network accessline 528
category: 'necessary', id: 'runtime-check', src: 'https://example.com/sdk.js', - Network accessline 529
id: 'runtime-check', src: 'https://example.com/sdk.js', }; - Network accessline 530
src: 'https://example.com/sdk.js', - Network accessline 571
id: 'existing-runtime', onLoad, src: 'https://example.com/sdk.js', - Network accessline 572
onLoad, src: 'https://example.com/sdk.js', }, - Network accessline 573
src: 'https://example.com/sdk.js', - Network accessline 622
onBeforeLoad: () => order.push('before'), onLoad: () => order.push('load'), src: 'https://example.com/ga.js', - Network accessline 623
onLoad: () => order.push('load'), src: 'https://example.com/ga.js', }, - Network accessline 624
src: 'https://example.com/ga.js', - Network accessline 668
id: 'gtm', onConsentChange, src: 'https://example.com/gtm.js', - Network accessline 669
onConsentChange, src: 'https://example.com/gtm.js', }, - Network accessline 670
src: 'https://example.com/gtm.js', - Network accessline 691
id: 'gtm', onConsentChange, src: 'https://example.com/gtm.js', - Network accessline 692
onConsentChange, src: 'https://example.com/gtm.js', }, - Network accessline 693
src: 'https://example.com/gtm.js', - Network accessline 710
kernel, scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 711
scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, ], - Network accessline 712
{ category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 734
category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js', - Network accessline 735
id: 'gtm', src: 'https://example.com/gtm.js', }, - Network accessline 736
src: 'https://example.com/gtm.js', - Network accessline 753
category: { and: ['measurement', 'marketing'] }, id: 's', src: 'https://example.com/s.js', - Network accessline 754
id: 's', src: 'https://example.com/s.js', }, - Network accessline 755
src: 'https://example.com/s.js', - Network accessline 771
category: { or: ['measurement', 'marketing'] }, id: 's', src: 'https://example.com/s.js', - Network accessline 772
id: 's', src: 'https://example.com/s.js', }, - Network accessline 773
src: 'https://example.com/s.js', - Network accessline 791
category: { not: 'marketing' }, id: 's', src: 'https://example.com/s.js', - Network accessline 792
id: 's', src: 'https://example.com/s.js', }, - Network accessline 793
src: 'https://example.com/s.js', - Network accessline 820
category: 'marketing', id: 'vendor-script', src: 'https://example.com/v.js', - Network accessline 821
id: 'vendor-script', src: 'https://example.com/v.js', vendorId: 755, - Network accessline 822
src: 'https://example.com/v.js', - Network accessline 859
kernel, scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 860
scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, ], - Network accessline 861
{ category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 868
category: 'measurement', id: 'ga', src: 'https://example.com/ga.js', - Network accessline 869
id: 'ga', src: 'https://example.com/ga.js', }, - Network accessline 870
src: 'https://example.com/ga.js', - Network accessline 874
expect(head.children).toHaveLength(1); expect(head.children[0]?.src).toBe('https://example.com/ga.js'); - Network accessline 875
expect(head.children[0]?.src).toBe('https://example.com/ga.js'); - Network accessline 939
id: 'replace', persistAfterConsentRevoked: true, src: 'https://example.com/old.js', - Network accessline 940
persistAfterConsentRevoked: true, src: 'https://example.com/old.js', }; - Network accessline 941
src: 'https://example.com/old.js', - Network accessline 942
}; const loader = createScriptLoader({ kernel, scripts: [script] }); loader.updateScripts([{ ...script, src: 'https://example.com/new.js' }]); - Network accessline 943
const loader = createScriptLoader({ kernel, scripts: [script] }); loader.updateScripts([{ ...script, src: 'https://example.com/new.js' }]); expect(head.children).toHaveLength(1); - Network accessline 944
loader.updateScripts([{ ...script, src: 'https://example.com/new.js' }]); - Network accessline 945
expect(head.children).toHaveLength(1); expect(head.children[0]?.src).toBe('https://example.com/new.js'); loader.dispose(); - Network accessline 946
expect(head.children[0]?.src).toBe('https://example.com/new.js'); - Network accessline 1077
id: 'later', onLoad: laterLoad, src: 'https://example.com/later.js', - Network accessline 1078
onLoad: laterLoad, src: 'https://example.com/later.js', }, - Network accessline 1079
src: 'https://example.com/later.js', - Network accessline 1129
id: 'pending', onDispose: pending, src: 'https://example.com/pending.js', - Network accessline 1130
onDispose: pending, src: 'https://example.com/pending.js', }, - Network accessline 1131
src: 'https://example.com/pending.js', - Network accessline 1175
expect(errors).toEqual(['broken']); loader.updateScripts([ { category: 'necessary', id: 'late', src: 'https://example.com/late.js' }, - Network accessline 1176
loader.updateScripts([ { category: 'necessary', id: 'late', src: 'https://example.com/late.js' }, ]); - Network accessline 1177
{ category: 'necessary', id: 'late', src: 'https://example.com/late.js' }, - Network accessline 1188
kernel, scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 1189
scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, ], - Network accessline 1190
{ category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 1213
onDebug: (e) => events.push(`${e.action}:${e.scriptId}`), scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, - Network accessline 1214
scripts: [ { category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' }, ], - Network accessline 1215
{ category: 'marketing', id: 'gtm', src: 'https://example.com/gtm.js' },
packages/core/src/modules/script-loader/__tests__/vendor-eligibility.test.ts
- Executable scriptline 1
Executable file - Network accessline 43
category: 'marketing', id: 'meta', src: 'https://connect.facebook.net/en_US/fbevents.js', - Network accessline 44
id: 'meta', src: 'https://connect.facebook.net/en_US/fbevents.js', vendor: 'meta-pixel', - Network accessline 45
src: 'https://connect.facebook.net/en_US/fbevents.js',
packages/core/src/modules/script-loader/callback-only.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/callbacks.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/debug.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/diagnostics.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/eligibility.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/index.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/loader.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/mount.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/normalize.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/tools.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/script-loader/types.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/window-debug/__tests__/window-debug.test.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/window-debug/index.ts
- Executable scriptline 1
Executable file
packages/core/src/modules/window-debug/types.ts
- Executable scriptline 1
Executable file
packages/core/src/options/callbacks.ts
- Executable scriptline 1
Executable file
packages/core/src/options/iab-tcf.ts
- Executable scriptline 1
Executable file - Network accessline 5
* Based on IAB TCF v2.4 specification. * * @see https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework - Network accessline 6
* * @see https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework * @packageDocumentation - Network accessline 7
* @see https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework
packages/core/src/options/iab.ts
- Executable scriptline 1
Executable file - Network accessline 19
* Provider list endpoint. Receives `?providerIds=1,2,3` and returns * `{ providers: { [id]: { id, name, policyUrl } } }`. * Default: `https://gvl.inth.app/additional-consent`. - Network accessline 20
* `{ providers: { [id]: { id, name, policyUrl } } }`. * Default: `https://gvl.inth.app/additional-consent`. */ - Network accessline 21
* Default: `https://gvl.inth.app/additional-consent`.
packages/core/src/options/index.ts
- Executable scriptline 1
Executable file
packages/core/src/options/legal-links.ts
- Executable scriptline 1
Executable file
packages/core/src/options/overrides.ts
- Executable scriptline 1
Executable file
packages/core/src/options/ssr.ts
- Executable scriptline 1
Executable file
packages/core/src/options/user.ts
- Executable scriptline 1
Executable file
packages/core/src/policy.ts
- Executable scriptline 1
Executable file
packages/core/src/preference-draft/__tests__/preference-draft.test.ts
- Executable scriptline 1
Executable file - Network accessline 40
name: id, presentable: true, privacyPolicyUrl: `https://${id}.example/privacy`, - Network accessline 41
presentable: true, privacyPolicyUrl: `https://${id}.example/privacy`, source: 'config', - Network accessline 42
privacyPolicyUrl: `https://${id}.example/privacy`,
packages/core/src/preference-draft/index.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/clear-on-revocation.test.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/client-mode-boundary.test.ts
- Executable scriptline 1
Executable file - Network accessline 129
export const mode = clientMode(${mode}, { backendURL: 'https://your-project.inth.app', - Network accessline 130
backendURL: 'https://your-project.inth.app', - Network accessline 137
['manifest()', 'manifest()'], ["manifest({ resolve: 'browser' })", "manifest({ resolve: 'browser' })"], ['hosted()', "hosted({ backendURL: 'https://other.example' })"], - Network accessline 138
["manifest({ resolve: 'browser' })", "manifest({ resolve: 'browser' })"], ['hosted()', "hosted({ backendURL: 'https://other.example' })"], ['offline()', 'offline()'], - Network accessline 139
['hosted()', "hosted({ backendURL: 'https://other.example' })"],
packages/core/src/runtime/__tests__/client-mode.test.ts
- Executable scriptline 1
Executable file - Network accessline 92
type: 'offline', }); expect(clientMode(hosted({ backendURL: 'https://a.example' })).kind).toBe( - Network accessline 93
}); expect(clientMode(hosted({ backendURL: 'https://a.example' })).kind).toBe( 'hosted' - Network accessline 94
expect(clientMode(hosted({ backendURL: 'https://a.example' })).kind).toBe( - Network accessline 102
test('manifest() re-inits through the route prefix and asserts the decision', async () => { const mode = clientMode(manifest(), { backendURL: 'https://backend.example', - Network accessline 103
const mode = clientMode(manifest(), { backendURL: 'https://backend.example', routePrefix: '/api/c15t/', - Network accessline 104
backendURL: 'https://backend.example', - Network accessline 119
test('manifest() without a route prefix inits against the backend, unasserted', async () => { const transport = clientMode(manifest(), { backendURL: 'https://backend.example', - Network accessline 120
const transport = clientMode(manifest(), { backendURL: 'https://backend.example', })(context); - Network accessline 121
backendURL: 'https://backend.example', - Network accessline 127
expect(pathOf(fetchSpy.mock.calls[0]?.[0])).toBe( 'https://backend.example/init' - Network accessline 128
'https://backend.example/init' - Network accessline 172
test("hosted() prefers the mode's own backend URL", async () => { const transport = clientMode( hosted({ backendURL: 'https://mode.example' }), - Network accessline 173
const transport = clientMode( hosted({ backendURL: 'https://mode.example' }), { backendURL: 'https://config.example', routePrefix: '/api/c15t' } - Network accessline 174
hosted({ backendURL: 'https://mode.example' }), - Network accessline 175
{ backendURL: 'https://config.example', routePrefix: '/api/c15t' } - Network accessline 181
expect(pathOf(fetchSpy.mock.calls[0]?.[0])).toBe( 'https://mode.example/init' - Network accessline 182
'https://mode.example/init' - Network accessline 213
); const transport = lazyHosted( { backendURL: 'https://backend.example' }, - Network accessline 214
const transport = lazyHosted( { backendURL: 'https://backend.example' }, load - Network accessline 215
{ backendURL: 'https://backend.example' }, - Network accessline 226
expect(load).not.toHaveBeenCalled(); expect(String(fetchSpy.mock.calls[0]?.[0])).toBe( 'https://backend.example/subjects' - Network accessline 227
expect(String(fetchSpy.mock.calls[0]?.[0])).toBe( 'https://backend.example/subjects' ); - Network accessline 228
'https://backend.example/subjects' - Network accessline 249
}); const transport = lazyHosted( { backendURL: 'https://backend.example' }, - Network accessline 250
const transport = lazyHosted( { backendURL: 'https://backend.example' }, load - Network accessline 251
{ backendURL: 'https://backend.example' }, - Network accessline 262
const sent = new URL(String(url)); expect(`${sent.origin}${sent.pathname}`).toBe( 'https://backend.example/init' - Network accessline 263
expect(`${sent.origin}${sent.pathname}`).toBe( 'https://backend.example/init' ); - Network accessline 264
'https://backend.example/init' - Network accessline 288
); await primePrefetchedInitialData({ backendURL: 'https://backend.example', - Network accessline 289
await primePrefetchedInitialData({ backendURL: 'https://backend.example', journey: false, - Network accessline 290
backendURL: 'https://backend.example', - Network accessline 292
}); const transport = lazyHosted( { backendURL: 'https://backend.example' }, - Network accessline 293
const transport = lazyHosted( { backendURL: 'https://backend.example' }, () => Promise.resolve({ createHostedTransport }) - Network accessline 294
{ backendURL: 'https://backend.example' }, - Network accessline 312
); const transport = lazyHosted( { backendURL: 'https://backend.example' }, - Network accessline 313
const transport = lazyHosted( { backendURL: 'https://backend.example' }, () => Promise.resolve({ createHostedTransport }) - Network accessline 314
{ backendURL: 'https://backend.example' }, - Network accessline 330
const transport = lazyHosted( { backendURL: 'https://backend.example', - Network accessline 331
{ backendURL: 'https://backend.example', headers: { 'accept-language': 'de' }, - Network accessline 332
backendURL: 'https://backend.example', - Network accessline 348
test('the first init reads initialData and sends no /init', async () => { const transport = clientMode(manifest(), { backendURL: 'https://backend.example', - Network accessline 349
const transport = clientMode(manifest(), { backendURL: 'https://backend.example', initialData: Promise.resolve({ - Network accessline 350
backendURL: 'https://backend.example', - Network accessline 430
); const transport = clientMode(manifest({ resolve: 'browser' }), { backendURL: 'https://backend.example', - Network accessline 431
const transport = clientMode(manifest({ resolve: 'browser' }), { backendURL: 'https://backend.example', routePrefix: '/api/c15t', - Network accessline 432
backendURL: 'https://backend.example', - Network accessline 435
const built = lazyBrowserManifest( { backendURL: 'https://backend.example', - Network accessline 436
{ backendURL: 'https://backend.example', manifestURL: '/api/c15t/manifest', - Network accessline 437
backendURL: 'https://backend.example', - Network accessline 474
lazyBrowserManifest( { backendURL: 'https://backend.example', - Network accessline 475
{ backendURL: 'https://backend.example', manifestURL: '/api/c15t/manifest', - Network accessline 476
backendURL: 'https://backend.example', - Network accessline 579
test('a snapshot needs no manifest request', async () => { const transport = lazyBrowserManifest( { backendURL: 'https://backend.example', snapshot: everywhereManifest }, - Network accessline 580
const transport = lazyBrowserManifest( { backendURL: 'https://backend.example', snapshot: everywhereManifest }, () => Promise.resolve({ createBrowserManifestTransport }) - Network accessline 581
{ backendURL: 'https://backend.example', snapshot: everywhereManifest },
packages/core/src/runtime/__tests__/consent-runtime.test.ts
- Executable scriptline 1
Executable file - Network accessline 181
name: 'Google Analytics', presentable: true, privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 182
presentable: true, privacyPolicyUrl: 'https://policies.google.com/privacy', source: 'manifest', - Network accessline 183
privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 192
category: 'marketing', id: 'meta', src: 'https://example.com/meta.js', - Network accessline 193
id: 'meta', src: 'https://example.com/meta.js', vendor: 'meta-pixel', - Network accessline 194
src: 'https://example.com/meta.js', - Network accessline 201
id: 'meta-pixel', name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 202
name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', }, - Network accessline 203
privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 783
const iframe = document.createElement('iframe'); iframe.setAttribute('data-category', 'marketing'); iframe.setAttribute('src', 'https://example.com/embed'); - Network accessline 784
iframe.setAttribute('data-category', 'marketing'); iframe.setAttribute('src', 'https://example.com/embed'); document.body.append(iframe); - Network accessline 785
iframe.setAttribute('src', 'https://example.com/embed'); - Network accessline 792
runtime.processIframes(); expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); - Network accessline 793
expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); - Network accessline 795
runtime.start(); expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); - Network accessline 796
expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); - Network accessline 797
runtime.processIframes(); expect(iframe.getAttribute('src')).toBeNull(); expect(iframe.getAttribute('data-src')).toBe('https://example.com/embed'); - Network accessline 799
expect(iframe.getAttribute('data-src')).toBe('https://example.com/embed'); - Network accessline 801
runtime.dispose(); iframe.setAttribute('src', 'https://example.com/embed'); - Network accessline 802
iframe.setAttribute('src', 'https://example.com/embed'); - Network accessline 803
runtime.processIframes(); expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); iframe.remove(); - Network accessline 804
expect(iframe.getAttribute('src')).toBe('https://example.com/embed'); - Network accessline 822
const early = window.fetch('https://tracker.example/collect'); - Network accessline 850
let settled = false; const early = window .fetch('https://tracker.example/collect') - Network accessline 851
const early = window .fetch('https://tracker.example/collect') .finally(() => { - Network accessline 852
.fetch('https://tracker.example/collect') - Network accessline 999
prefetch: RESOLVED_PREFETCH, }); const own = window.fetch('https://tracker.example/collect'); - Network accessline 1000
}); const own = window.fetch('https://tracker.example/collect'); const ads = settles(window.fetch('https://ads.example/pixel')); - Network accessline 1001
const own = window.fetch('https://tracker.example/collect'); - Network accessline 1002
const ads = settles(window.fetch('https://ads.example/pixel')); - Network accessline 1032
prefetch: RESOLVED_PREFETCH, }); const ads = settles(window.fetch('https://ads.example/pixel')); - Network accessline 1033
}); const ads = settles(window.fetch('https://ads.example/pixel')); await tick(); - Network accessline 1034
const ads = settles(window.fetch('https://ads.example/pixel')); - Network accessline 1041
expect(ads.settled).toBe(false); expect(network).not.toHaveBeenCalledWith( 'https://ads.example/pixel', - Network accessline 1042
expect(network).not.toHaveBeenCalledWith( 'https://ads.example/pixel', undefined - Network accessline 1043
'https://ads.example/pixel', - Network accessline 1094
const blocker = failingBlocker(); const runtime = startWith(blocker.createNetworkBlocker); const held = window.fetch('https://tracker.example/collect'); - Network accessline 1095
const runtime = startWith(blocker.createNetworkBlocker); const held = window.fetch('https://tracker.example/collect'); const early = settles(held); - Network accessline 1096
const held = window.fetch('https://tracker.example/collect'); - Network accessline 1106
expect(early.settled).toBe(true); expect((await held).status).toBe(451); const later = window.fetch('https://tracker.example/collect'); - Network accessline 1107
expect((await held).status).toBe(451); const later = window.fetch('https://tracker.example/collect'); const late = settles(later); - Network accessline 1108
const later = window.fetch('https://tracker.example/collect'); - Network accessline 1116
await window.fetch('https://cdn.example/app.js'); - Network accessline 1140
expect( (await window.fetch('https://tracker.example/collect')).status - Network accessline 1141
(await window.fetch('https://tracker.example/collect')).status - Network accessline 1152
await window.fetch('https://tracker.example/collect'); - Network accessline 1153
expect(network).toHaveBeenCalledWith( 'https://tracker.example/collect', undefined - Network accessline 1154
'https://tracker.example/collect',
packages/core/src/runtime/__tests__/experiment.test.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/external-source.test.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/gpp.test.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/hosted-persistence.test.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/iab-mount.test.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/iab-options.test.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/journey.test.ts
- Executable scriptline 1
Executable file - Network accessline 52
const fakeFetch: typeof globalThis.fetch = (input, init) => { const url = new URL(String(input), 'https://shop.example.com'); - Network accessline 53
const url = new URL(String(input), 'https://shop.example.com'); requests.push({ journey: readJourneyParams(url), - Network accessline 54
requests.push({ - Network accessline 80
const backend = () => hosted({ backendURL: 'https://consent.example.com', fetch: fakeFetch }); - Network accessline 81
hosted({ backendURL: 'https://consent.example.com', fetch: fakeFetch }); - Network accessline 84
const pageBackend = () => hosted({ backendURL: 'https://consent.example.com' }); - Network accessline 86
const init = () => requests.filter((request) => request.path === '/init'); - Network accessline 87
const saves = () => requests.filter((request) => request.path === '/subjects'); - Network accessline 236
const runtime = await load({ journey: false }); await runtime.kernel.commands.save('all'); expect(requests.map((request) => request.journey)).toEqual([null, null]); - Network accessline 237
await runtime.kernel.commands.save('all'); expect(requests.map((request) => request.journey)).toEqual([null, null]); }); - Network accessline 238
expect(requests.map((request) => request.journey)).toEqual([null, null]); - Network accessline 629
try { window.eval( buildPrefetchScript({ backendURL: 'https://consent.example.com' }) - Network accessline 630
window.eval( buildPrefetchScript({ backendURL: 'https://consent.example.com' }) ); - Network accessline 631
buildPrefetchScript({ backendURL: 'https://consent.example.com' }) - Network accessline 651
try { window.eval( buildPrefetchScript({ backendURL: 'https://consent.example.com' }) - Network accessline 652
window.eval( buildPrefetchScript({ backendURL: 'https://consent.example.com' }) ); - Network accessline 653
buildPrefetchScript({ backendURL: 'https://consent.example.com' }) - Network accessline 670
window.eval( buildPrefetchScript({ backendURL: 'https://consent.example.com', - Network accessline 671
buildPrefetchScript({ backendURL: 'https://consent.example.com', journey: 'tab', - Network accessline 672
backendURL: 'https://consent.example.com', - Network accessline 690
window.eval( buildPrefetchScript({ backendURL: 'https://consent.example.com', - Network accessline 691
buildPrefetchScript({ backendURL: 'https://consent.example.com', journey: false, - Network accessline 692
backendURL: 'https://consent.example.com',
packages/core/src/runtime/__tests__/lazy-iab.test.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/necessary-only-scope.test.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/on-demand.test.ts
- Executable scriptline 1
Executable file - Network accessline 119
}, }); const early = window.fetch('https://tracker.example/collect'); - Network accessline 120
}); const early = window.fetch('https://tracker.example/collect'); runtime.start(); - Network accessline 121
const early = window.fetch('https://tracker.example/collect'); - Network accessline 218
); runtimes.push(runtime); const early = window.fetch('https://tracker.example/collect'); - Network accessline 219
runtimes.push(runtime); const early = window.fetch('https://tracker.example/collect'); runtime.start(); - Network accessline 220
const early = window.fetch('https://tracker.example/collect');
packages/core/src/runtime/__tests__/provider-runtime.test.ts
- Executable scriptline 1
Executable file - Network accessline 178
networkBlocker: { rules: next as never }, }); const request = window.fetch('https://next.example/pixel'); - Network accessline 179
}); const request = window.fetch('https://next.example/pixel'); await Promise.resolve(); - Network accessline 180
const request = window.fetch('https://next.example/pixel'); - Network accessline 188
await request; expect(network).toHaveBeenCalledWith( 'https://next.example/pixel', - Network accessline 189
expect(network).toHaveBeenCalledWith( 'https://next.example/pixel', undefined - Network accessline 190
'https://next.example/pixel', - Network accessline 220
}, }); const request = window.fetch('https://tracker.example/collect'); - Network accessline 221
}); const request = window.fetch('https://tracker.example/collect'); let settled = false; - Network accessline 222
const request = window.fetch('https://tracker.example/collect'); - Network accessline 261
}, }); const request = window.fetch('https://next.example/collect'); - Network accessline 262
}); const request = window.fetch('https://next.example/collect'); let settled = false; - Network accessline 263
const request = window.fetch('https://next.example/collect'); - Network accessline 508
const response = await window.fetch('https://ads.example/pixel'); - Network accessline 538
}, }); const request = window.fetch('https://next.example/pixel'); - Network accessline 539
}); const request = window.fetch('https://next.example/pixel'); await new Promise((resolve) => { - Network accessline 540
const request = window.fetch('https://next.example/pixel'); - Network accessline 810
const sent = window.fetch('https://ads.example/pixel'); - Network accessline 814
runtime.setEnabled(true); const held = window.fetch('https://ads.example/pixel'); - Network accessline 815
const held = window.fetch('https://ads.example/pixel');
packages/core/src/runtime/__tests__/provider-update-chunk.test.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/runtime-callbacks.test.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/__tests__/script-loader-preload-side-effects.test.ts
packages/core/src/runtime/__tests__/script-loader-preload.test.ts
- Executable scriptline 1
Executable file - Network accessline 40
category: 'marketing', id: 'pixel', src: 'https://example.com/pixel.js', - Network accessline 41
id: 'pixel', src: 'https://example.com/pixel.js', }; - Network accessline 42
src: 'https://example.com/pixel.js', - Network accessline 291
id: 'pixel-co', name: 'Pixel Co', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 292
name: 'Pixel Co', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 293
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 492
id: 'pixel-co', name: 'Pixel Co', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 493
name: 'Pixel Co', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 494
privacyPolicyUrl: 'https://example.com/privacy',
packages/core/src/runtime/__tests__/script-server-start-parity.test.ts
- Executable scriptline 1
Executable file - Network accessline 29
const SRC = 'https://cdn.example.com/pixel.js'; - Network accessline 110
id: 'acme', name: 'Acme', privacyPolicyUrl: 'https://acme.example/privacy', - Network accessline 111
name: 'Acme', privacyPolicyUrl: 'https://acme.example/privacy', }, - Network accessline 112
privacyPolicyUrl: 'https://acme.example/privacy',
packages/core/src/runtime/__tests__/script-server-start.test.ts
- Executable scriptline 1
Executable file - Network accessline 42
code: 'window.__c15tSetup=(window.__c15tSetup||0)+1', }), src: 'https://cdn.example.com/pixel.js', - Network accessline 43
}), src: 'https://cdn.example.com/pixel.js', }; - Network accessline 44
src: 'https://cdn.example.com/pixel.js', - Network accessline 161
id: 'failed-predicate', serverStart: hasServerStart ? serverStart : undefined, src: 'https://cdn.example.com/failed.js', - Network accessline 162
serverStart: hasServerStart ? serverStart : undefined, src: 'https://cdn.example.com/failed.js', }, - Network accessline 163
src: 'https://cdn.example.com/failed.js', - Network accessline 226
const hero = document.createElement('img'); hero.setAttribute('fetchpriority', 'high'); hero.src = 'https://cdn.example.com/hero.jpg'; - Network accessline 227
hero.setAttribute('fetchpriority', 'high'); hero.src = 'https://cdn.example.com/hero.jpg'; document.body.append(hero); - Network accessline 228
hero.src = 'https://cdn.example.com/hero.jpg'; - Network accessline 392
id, serverStart: () => ({ code: '', prelude }), src: `https://cdn.example.com/${id}.js`, - Network accessline 393
serverStart: () => ({ code: '', prelude }), src: `https://cdn.example.com/${id}.js`, }); - Network accessline 394
src: `https://cdn.example.com/${id}.js`, - Network accessline 750
mode, prefetch: prefetchFor({ marketing: true }), scripts: [{ ...pixel, src: 'https://x.test/</script><b>.js' }], - Network accessline 751
prefetch: prefetchFor({ marketing: true }), scripts: [{ ...pixel, src: 'https://x.test/</script><b>.js' }], }); - Network accessline 752
scripts: [{ ...pixel, src: 'https://x.test/</script><b>.js' }],
packages/core/src/runtime/__tests__/storage-reconciliation.test.ts
- Executable scriptline 1
Executable file - Network accessline 528
id: 'analytics-one', name: 'Analytics One', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 529
name: 'Analytics One', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 530
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 667
id: 'analytics-one', name: 'Analytics One', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 668
name: 'Analytics One', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 669
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 742
id: 'analytics-one', name: 'Analytics One', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 743
name: 'Analytics One', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 744
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 1060
id: 'analytics-one', name: 'Analytics One', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 1061
name: 'Analytics One', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 1062
privacyPolicyUrl: 'https://example.com/privacy',
packages/core/src/runtime/assemble.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/callbacks.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/client-mode.ts
- Executable scriptline 1
Executable file - Network accessline 177
init: EarlyRequest['init'] ): EarlyRequest { const response = fetch(url, init); - Network accessline 178
): EarlyRequest { const response = fetch(url, init); void (async () => { - Network accessline 179
const response = fetch(url, init); - Network accessline 219
return response; } return fetch(input, init); - Network accessline 220
} return fetch(input, init); }; - Network accessline 221
return fetch(input, init); - Network accessline 526
* * const mode = clientMode(manifest(), { * backendURL: 'https://your-project.inth.app', - Network accessline 527
* const mode = clientMode(manifest(), { * backendURL: 'https://your-project.inth.app', * routePrefix: '/api/c15t', - Network accessline 528
* backendURL: 'https://your-project.inth.app',
packages/core/src/runtime/controls.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/gpp-mount.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/iab-mount.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/iab-options.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/index.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/journey.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/lazy-hosted.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/lazy-iab.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/lazy-manifest-browser.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/lazy-module.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/lazy-offline.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/on-demand-clear-on-revocation.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/on-demand-consent-source.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/on-demand-factories.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/on-demand-loader-and-blocker.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/on-demand-modules.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/on-demand-network-blocker.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/on-demand-script-loader.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/on-demand.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/provider-runtime.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/provider-update.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/provider.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/runtime-kernel.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/runtime-with-modules.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/script-loader-preload.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/script-server-start.ts
- Executable scriptline 1
Executable file - Possible obfuscationline 231
return `var D=${inlineJSON(snapshot.nextDeadline)},S=${inlineJSON(seed.categories)},V=${seed.vendorsAt},M=${inlineJSON(seed.earliest)},N=${inlineJSON(names)},F=${inlineJSON(fields)},K=${inlineJSON({ consent: keys.consent, epoch: keys.epoch,
packages/core/src/runtime/stream-mode.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/streamed-init.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/streamed-prefetch.ts
- Executable scriptline 1
Executable file
packages/core/src/runtime/types.ts
- Executable scriptline 1
Executable file - Network accessline 688
* ```ts * // The response sets the consent cookie; no browser event reports it. * await fetch('/account/restore-consent', { method: 'POST' }); - Network accessline 689
[Credential-related source omitted] - Access to secretsline 689
[Credential-related source omitted] - Network accessline 690
* await fetch('/account/restore-consent', { method: 'POST' });
packages/core/src/server/__tests__/consent-proxy.test.ts
- Executable scriptline 1
Executable file - Network accessline 13
const BACKEND = 'https://consent.example.com'; - Network accessline 54
options, path, request: new Request(`https://shop.example/api/c15t/${path}?q=1`, { - Network accessline 55
path, request: new Request(`https://shop.example/api/c15t/${path}?q=1`, { body: init.body, - Network accessline 56
request: new Request(`https://shop.example/api/c15t/${path}?q=1`, { - Network accessline 194
test('sends only public headers to a remote http backend', async () => { const { calls, response } = forward('subjects', { backendURL: 'http://consent.example.com', - Network accessline 195
const { calls, response } = forward('subjects', { backendURL: 'http://consent.example.com', headers: { - Network accessline 196
backendURL: 'http://consent.example.com', - Network accessline 217
}; const remote = forward('subjects', { backendURL: 'http://consent.example.com', - Network accessline 218
const remote = forward('subjects', { backendURL: 'http://consent.example.com', forwarding, - Network accessline 219
backendURL: 'http://consent.example.com', - Network accessline 221
}); const loopback = forward('subjects', { backendURL: 'http://localhost:8787', - Network accessline 222
const loopback = forward('subjects', { backendURL: 'http://localhost:8787', forwarding, - Network accessline 223
backendURL: 'http://localhost:8787', - Network accessline 237
test('still sends named cookies to a loopback http backend', async () => { const { calls, response } = forward('subjects', { backendURL: 'http://localhost:8787', - Network accessline 238
const { calls, response } = forward('subjects', { backendURL: 'http://localhost:8787', headers: { cookie: 'tenant=acme' }, - Network accessline 239
backendURL: 'http://localhost:8787', - Network accessline 292
options, path: 'subjects', request: new Request('https://shop.example/api/c15t/subjects', { - Network accessline 293
path: 'subjects', request: new Request('https://shop.example/api/c15t/subjects', { method: 'POST', - Network accessline 294
request: new Request('https://shop.example/api/c15t/subjects', { - Network accessline 329
[Credential-related source omitted] - Network accessline 330
[Credential-related source omitted] - Network accessline 331
'http://consent.example.com/manifest' - Network accessline 340
); expect( stripIdentityForCleartext(headers, 'http://127.0.0.1:8787/manifest') - Network accessline 341
expect( stripIdentityForCleartext(headers, 'http://127.0.0.1:8787/manifest') ).toBe(headers); - Network accessline 342
stripIdentityForCleartext(headers, 'http://127.0.0.1:8787/manifest')
packages/core/src/server/__tests__/consent-route.test.ts
- Executable scriptline 1
Executable file - Network accessline 30
const BACKEND = 'https://consent.example.com'; - Network accessline 31
const APP = 'https://app.example.com'; - Network accessline 32
const GVL_URL = 'https://gvl.example/vendor-list.json'; - Network accessline 225
await route({ fetch: fromManifestURL, manifestURL: 'https://cdn.example.com/m.json', - Network accessline 226
fetch: fromManifestURL, manifestURL: 'https://cdn.example.com/m.json', })(request('/api/c15t/manifest')); - Network accessline 227
manifestURL: 'https://cdn.example.com/m.json', - Network accessline 229
expect(calledURLs(fromBackend)).toEqual([`${BACKEND}/manifest`]); expect(calledURLs(fromManifestURL)).toEqual([ 'https://cdn.example.com/m.json', - Network accessline 230
expect(calledURLs(fromManifestURL)).toEqual([ 'https://cdn.example.com/m.json', ]); - Network accessline 231
'https://cdn.example.com/m.json', - Network accessline 258
); expect(calledURLs(fetch)).toEqual([ 'https://public.example/consent-backend/manifest', - Network accessline 259
expect(calledURLs(fetch)).toEqual([ 'https://public.example/consent-backend/manifest', ]); - Network accessline 260
'https://public.example/consent-backend/manifest', - Network accessline 266
const localFetch = upstream(); await route({ backendURL: '/api/self-host', fetch })( new Request('http://evil.example/api/c15t/manifest'), - Network accessline 267
await route({ backendURL: '/api/self-host', fetch })( new Request('http://evil.example/api/c15t/manifest'), { localFetch, route: 'manifest' } - Network accessline 268
new Request('http://evil.example/api/c15t/manifest'), - Network accessline 519
const fetch = upstream(); const response = await route({ backendURL: 'http://backend.example', - Network accessline 520
const response = await route({ backendURL: 'http://backend.example', fetch, - Network accessline 521
backendURL: 'http://backend.example', fetch, proxy: { forwardHeaders: ['x-api-key', 'accept-language'] }, - Network accessline 690
describe('Google Additional Consent providers', () => { const AC_URL = 'https://lists.example/ac-route'; - Network accessline 691
const AC_URL = 'https://lists.example/ac-route'; - Network accessline 708
id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy', - Network accessline 709
name: 'Meta', policyUrl: 'https://meta.example/privacy', }, - Network accessline 710
policyUrl: 'https://meta.example/privacy', - Network accessline 724
const body = (await response.json()) as InitOutput; expect(body.adTechProviders).toEqual([ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' }, - Network accessline 725
expect(body.adTechProviders).toEqual([ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' }, ]); - Network accessline 726
{ id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' }, - Network accessline 766
id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy', - Network accessline 767
name: 'Meta', policyUrl: 'https://meta.example/privacy', }, - Network accessline 768
policyUrl: 'https://meta.example/privacy', - Network accessline 1264
await handle( request(`/api/c15t/init${query}`, { headers: { origin: 'https://www.example.org' }, - Network accessline 1265
request(`/api/c15t/init${query}`, { headers: { origin: 'https://www.example.org' }, }) - Network accessline 1266
headers: { origin: 'https://www.example.org' }, - Network accessline 1267
}) ); expect(lastInitOrigin()).toBe('https://www.example.org'); - Network accessline 1269
expect(lastInitOrigin()).toBe('https://www.example.org'); - Network accessline 1278
id: 'acme', name: 'Acme', privacyPolicyUrl: 'https://acme.example/privacy', - Network accessline 1279
name: 'Acme', privacyPolicyUrl: 'https://acme.example/privacy', }; - Network accessline 1280
privacyPolicyUrl: 'https://acme.example/privacy', }; const fetch = backendInit({ - Network accessline 1530
const localFetch = vi.fn<ManifestFetch>(() => Promise.resolve(json({}))); await route({ backendURL: '/api/self-host', proxy: true })( new Request('http://evil.example/api/c15t/subjects', { method: 'POST' }), - Network accessline 1531
await route({ backendURL: '/api/self-host', proxy: true })( new Request('http://evil.example/api/c15t/subjects', { method: 'POST' }), { localFetch, path: 'subjects' } - Network accessline 1532
new Request('http://evil.example/api/c15t/subjects', { method: 'POST' }),
packages/core/src/server/__tests__/gvl-cache.test.ts
- Executable scriptline 1
Executable file - Network accessline 13
const GVL_URL = 'https://vendorlist.example.com/v3/vendor-list.json'; - Network accessline 31
let calls = 0; const gvl = await fetchCachedGvl({ fetch() { - Network accessline 32
const gvl = await fetchCachedGvl({ fetch() { calls += 1; - Network accessline 33
fetch() {
packages/core/src/server/__tests__/request-consent.test.ts
- Executable scriptline 1
Executable file - Network accessline 31
const BACKEND = 'https://consent.example.com'; - Network accessline 32
const APP = 'https://app.example.com'; - Network accessline 33
const GVL_URL = 'https://gvl.example/vendor-list.json'; - Network accessline 295
}); expect(target(fetch.mock.calls[0]?.[0])).toBe( 'https://edge.example/consent/init' - Network accessline 296
expect(target(fetch.mock.calls[0]?.[0])).toBe( 'https://edge.example/consent/init' ); - Network accessline 297
'https://edge.example/consent/init' - Network accessline 565
const fetch = upstream(); await render({ backendURL: 'http://consent.internal', - Network accessline 566
await render({ backendURL: 'http://consent.internal', fetch, - Network accessline 567
backendURL: 'http://consent.internal', fetch, forwardHeaders: ['x-tenant'], - Network accessline 581
const fetch = upstream(); await render({ backendURL: 'http://localhost:8787', - Network accessline 582
await render({ backendURL: 'http://localhost:8787', fetch, - Network accessline 583
backendURL: 'http://localhost:8787', fetch, headers: visitor, - Network accessline 620
const cleartext = upstream(); await render({ backendURL: 'http://consent.internal', - Network accessline 621
await render({ backendURL: 'http://consent.internal', cookieNames: ['session'], - Network accessline 622
backendURL: 'http://consent.internal', cookieNames: ['session'], fetch: cleartext, - Network accessline 670
test('manifest mode resolves Google Additional Consent providers into state', async () => { const acURL = 'https://lists.example/ac-render'; - Network accessline 671
const acURL = 'https://lists.example/ac-render'; - Network accessline 685
id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy', - Network accessline 686
name: 'Meta', policyUrl: 'https://meta.example/privacy', }, - Network accessline 687
policyUrl: 'https://meta.example/privacy', - Network accessline 699
}); expect(state.initialIab?.adTechProviders).toEqual([ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' }, - Network accessline 700
expect(state.initialIab?.adTechProviders).toEqual([ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' }, ]); - Network accessline 701
{ id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy' }, - Network accessline 719
id: 89, name: 'Meta', policyUrl: 'https://meta.example/privacy', - Network accessline 720
name: 'Meta', policyUrl: 'https://meta.example/privacy', }, - Network accessline 721
policyUrl: 'https://meta.example/privacy', - Access to secretsline 1003
[Credential-related source omitted] - Network accessline 1050
fetch, forwardHeaders: ['origin'], headers: { origin: 'https://shop.example.net' }, - Network accessline 1051
forwardHeaders: ['origin'], headers: { origin: 'https://shop.example.net' }, }); - Network accessline 1052
headers: { origin: 'https://shop.example.net' }, }); expect(sentHeaders(fetch, '/init').get('origin')).toBe( - Network accessline 1053
}); expect(sentHeaders(fetch, '/init').get('origin')).toBe( 'https://shop.example.net' - Network accessline 1054
expect(sentHeaders(fetch, '/init').get('origin')).toBe( 'https://shop.example.net' ); - Network accessline 1055
'https://shop.example.net'
packages/core/src/server/__tests__/request-origin.test.ts
- Executable scriptline 1
Executable file - Network accessline 15
test('returns absolute URLs normalized, whatever the request says', () => { expect( resolveRequestBackendURL('https://consent.example.com/', { - Network accessline 16
expect( resolveRequestBackendURL('https://consent.example.com/', { headers: new Headers(FORGED), - Network accessline 17
resolveRequestBackendURL('https://consent.example.com/', { - Network accessline 18
headers: new Headers(FORGED), }) ).toBe('https://consent.example.com'); - Network accessline 19
}) ).toBe('https://consent.example.com'); }); - Network accessline 20
).toBe('https://consent.example.com'); - Network accessline 24
expect( resolveRequestBackendURL('/api/c15t/', { requestURL: 'http://localhost:5173/some/page?x=1', - Network accessline 25
resolveRequestBackendURL('/api/c15t/', { requestURL: 'http://localhost:5173/some/page?x=1', }) - Network accessline 26
requestURL: 'http://localhost:5173/some/page?x=1', - Network accessline 27
}) ).toBe('http://localhost:5173/api/c15t'); }); - Network accessline 28
).toBe('http://localhost:5173/api/c15t'); - Network accessline 33
resolveRequestBackendURL('/api/c15t', { headers: new Headers(FORGED), requestURL: 'https://app.example.com/', - Network accessline 34
headers: new Headers(FORGED), requestURL: 'https://app.example.com/', }) - Network accessline 35
requestURL: 'https://app.example.com/', - Network accessline 36
}) ).toBe('https://app.example.com/api/c15t'); expect( - Network accessline 37
).toBe('https://app.example.com/api/c15t'); - Network accessline 40
headers: new Headers({ ...FORGED, host: 'app.example.com' }), }) ).toBe('https://app.example.com/api/c15t'); - Network accessline 41
}) ).toBe('https://app.example.com/api/c15t'); }); - Network accessline 42
).toBe('https://app.example.com/api/c15t'); - Network accessline 48
headers: { host: 'localhost:3000' }, }) ).toBe('http://localhost:3000/api/c15t'); - Network accessline 49
}) ).toBe('http://localhost:3000/api/c15t'); expect( - Network accessline 50
).toBe('http://localhost:3000/api/c15t'); - Network accessline 53
headers: { host: '127.0.0.1:3000' }, }) ).toBe('http://127.0.0.1:3000/api/c15t'); - Network accessline 54
}) ).toBe('http://127.0.0.1:3000/api/c15t'); expect( - Network accessline 55
).toBe('http://127.0.0.1:3000/api/c15t'); - Network accessline 58
headers: { host: 'app:3000' }, }) ).toBe('http://app:3000/api/c15t'); - Network accessline 59
}) ).toBe('http://app:3000/api/c15t'); expect( - Network accessline 60
).toBe('http://app:3000/api/c15t'); - Network accessline 63
headers: { host: 'app.example.com' }, }) ).toBe('https://app.example.com/api/c15t'); - Network accessline 64
}) ).toBe('https://app.example.com/api/c15t'); }); - Network accessline 65
).toBe('https://app.example.com/api/c15t'); - Network accessline 69
expect( resolveRequestBackendURL('/api/c15t', { headers: new Headers({ referer: 'https://attacker.example/' }), - Network accessline 70
resolveRequestBackendURL('/api/c15t', { headers: new Headers({ referer: 'https://attacker.example/' }), }) - Network accessline 71
headers: new Headers({ referer: 'https://attacker.example/' }), - Network accessline 81
'x-forwarded-proto': 'https', }), requestURL: 'http://127.0.0.1:3000/', - Network accessline 82
}), requestURL: 'http://127.0.0.1:3000/', trustForwardedHeaders: true, - Network accessline 83
requestURL: 'http://127.0.0.1:3000/', - Network accessline 84
trustForwardedHeaders: true, }) ).toBe('https://edge.example.com/api/c15t'); - Network accessline 85
}) ).toBe('https://edge.example.com/api/c15t'); expect( - Network accessline 86
).toBe('https://edge.example.com/api/c15t'); - Network accessline 90
forwarded: 'for=1.2.3.4;host="edge.example.com";proto=https', }), requestURL: 'http://127.0.0.1:3000/', - Network accessline 91
}), requestURL: 'http://127.0.0.1:3000/', trustForwardedHeaders: true, - Network accessline 92
requestURL: 'http://127.0.0.1:3000/', - Network accessline 93
trustForwardedHeaders: true, }) ).toBe('https://edge.example.com/api/c15t'); - Network accessline 94
}) ).toBe('https://edge.example.com/api/c15t'); }); - Network accessline 95
).toBe('https://edge.example.com/api/c15t'); - Network accessline 99
const headers = { host: 'localhost:3000', 'x-forwarded-proto': 'https' }; expect(resolveRequestBackendURL('/api/c15t', { headers })).toBe( 'http://localhost:3000/api/c15t' - Network accessline 100
expect(resolveRequestBackendURL('/api/c15t', { headers })).toBe( 'http://localhost:3000/api/c15t' ); - Network accessline 101
'http://localhost:3000/api/c15t' - Network accessline 106
trustForwardedHeaders: true, }) ).toBe('https://localhost:3000/api/c15t'); - Network accessline 107
}) ).toBe('https://localhost:3000/api/c15t'); expect( - Network accessline 108
).toBe('https://localhost:3000/api/c15t'); - Network accessline 110
resolveRequestBackendURL('/api/c15t', { headers: new Headers({ 'x-forwarded-ssl': 'on' }), requestURL: 'http://app.example.com/page', - Network accessline 111
headers: new Headers({ 'x-forwarded-ssl': 'on' }), requestURL: 'http://app.example.com/page', trustForwardedHeaders: true, - Network accessline 112
requestURL: 'http://app.example.com/page', - Network accessline 113
trustForwardedHeaders: true, }) ).toBe('https://app.example.com/api/c15t'); - Network accessline 114
}) ).toBe('https://app.example.com/api/c15t'); }); - Network accessline 115
).toBe('https://app.example.com/api/c15t'); - Network accessline 131
test('keeps the result on the request origin', () => { const options = { requestURL: 'https://app.example.com/' }; - Network accessline 132
const options = { requestURL: 'https://app.example.com/' }; - Network accessline 138
resolveRequestBackendURL('/\\attacker.example/api', options) ?? '' ).origin ).toBe('https://app.example.com'); - Network accessline 139
).origin ).toBe('https://app.example.com'); expect(resolveRequestBackendURL('api/c15t', options)).toBeNull(); - Network accessline 140
).toBe('https://app.example.com'); - Network accessline 155
headers: { host: ['app.example.com', 'other.example'] }, }) ).toBe('https://app.example.com'); - Network accessline 156
}) ).toBe('https://app.example.com'); }); - Network accessline 157
).toBe('https://app.example.com'); - Network accessline 165
headers: { HOST: ['app.example.com', 'other.example'] }, }) ).toBe('https://app.example.com'); - Network accessline 166
}) ).toBe('https://app.example.com'); const headers = { - Network accessline 167
).toBe('https://app.example.com'); - Network accessline 171
'X-Forwarded-Host': 'attacker.example', }; expect(resolveRequestOrigin({ headers })).toBe('https://app.example.com'); - Network accessline 172
}; expect(resolveRequestOrigin({ headers })).toBe('https://app.example.com'); expect( - Network accessline 173
expect(resolveRequestOrigin({ headers })).toBe('https://app.example.com'); - Network accessline 175
resolveRequestOrigin({ headers, requestURL: 'http://localhost:5173/page', - Network accessline 176
headers, requestURL: 'http://localhost:5173/page', }) - Network accessline 177
requestURL: 'http://localhost:5173/page', - Network accessline 178
}) ).toBe('http://localhost:5173'); expect(resolveRequestOrigin({ headers, trustForwardedHeaders: true })).toBe( - Network accessline 179
).toBe('http://localhost:5173'); - Network accessline 180
expect(resolveRequestOrigin({ headers, trustForwardedHeaders: true })).toBe( 'http://attacker.example' ); - Network accessline 181
'http://attacker.example'
packages/core/src/server/__tests__/request-subject.test.ts
- Executable scriptline 1
Executable file - Network accessline 16
request: { headers: new Headers(cookie ? { cookie } : {}), url: 'https://app.example.com/pricing', - Network accessline 17
headers: new Headers(cookie ? { cookie } : {}), url: 'https://app.example.com/pricing', ...extra.request, - Network accessline 18
url: 'https://app.example.com/pricing', - Access to secretsline 72
[Credential-related source omitted] - Network accessline 158
test('the cookie follows the storage configuration the browser uses', () => { const custom = resolve(undefined, { request: { url: 'http://app.example.com/' }, - Network accessline 159
const custom = resolve(undefined, { request: { url: 'http://app.example.com/' }, storage: { defaultExpiryDays: 30, storageKey: 'consent' }, - Network accessline 160
request: { url: 'http://app.example.com/' }, - Network accessline 267
true, ], ['the request URL', { url: 'https://a.b;samesite=none/' }, false], - Network accessline 268
], ['the request URL', { url: 'https://a.b;samesite=none/' }, false], ] as const)( - Network accessline 269
['the request URL', { url: 'https://a.b;samesite=none/' }, false],
packages/core/src/server/__tests__/route-prefix.test.ts
packages/core/src/server/consent-proxy.ts
- Executable scriptline 1
Executable file - Access to secretsline 563
[Credential-related source omitted] - Network accessline 574
* return forwardConsentRequest({ * adapter: '@c15t/example', * backendURL: 'https://consent.example.com', - Network accessline 575
* adapter: '@c15t/example', * backendURL: 'https://consent.example.com', * forwarding: { host: url.host, proto: 'https' }, - Network accessline 576
* backendURL: 'https://consent.example.com',
packages/core/src/server/consent-route.ts
- Executable scriptline 1
Executable file - Network accessline 115
* cleartext rules treat the in-process hop as local. */ const IN_PROCESS_ORIGIN = 'http://localhost'; - Network accessline 117
const IN_PROCESS_ORIGIN = 'http://localhost'; - Network accessline 653
* const handle = createConsentRouteHandler({ * adapter: '@c15t/example', * backendURL: 'https://consent.example.com', - Network accessline 654
* adapter: '@c15t/example', * backendURL: 'https://consent.example.com', * }); - Network accessline 655
* backendURL: 'https://consent.example.com',
packages/core/src/server/gvl-cache.ts
- Executable scriptline 1
Executable file
packages/core/src/server/index.ts
- Executable scriptline 1
Executable file
packages/core/src/server/request-consent.ts
- Executable scriptline 1
Executable file - Network accessline 608
* Never contacted; loopback so the cleartext rules treat it as local. */ const IN_PROCESS_ORIGIN = 'http://localhost'; - Network accessline 610
const IN_PROCESS_ORIGIN = 'http://localhost'; - Network accessline 644
* const state = await resolveRequestConsent({ * adapter: '@c15t/example', * backendURL: 'https://consent.example.com', - Network accessline 645
* adapter: '@c15t/example', * backendURL: 'https://consent.example.com', * mode: 'manifest', - Network accessline 646
* backendURL: 'https://consent.example.com', - Network accessline 1083
response = await target.fetch(
packages/core/src/server/request-origin.ts
- Executable scriptline 1
Executable file - Network accessline 124
let hostname: string; try { hostname = new URL(`http://${host}`).hostname.toLowerCase(); - Network accessline 125
try { hostname = new URL(`http://${host}`).hostname.toLowerCase(); } catch { - Network accessline 126
hostname = new URL(`http://${host}`).hostname.toLowerCase(); - Network accessline 215
* * @param options - The request URL, headers, and forwarding trust. * @returns An origin such as `https://app.example.com`, or `null` when the - Network accessline 216
* @param options - The request URL, headers, and forwarding trust. * @returns An origin such as `https://app.example.com`, or `null` when the * request carries none. - Network accessline 217
* @returns An origin such as `https://app.example.com`, or `null` when the - Network accessline 220
* ```ts * resolveRequestOrigin({ requestURL: event.url }); * // 'http://localhost:5173' - Network accessline 221
* resolveRequestOrigin({ requestURL: event.url }); * // 'http://localhost:5173' * ``` - Network accessline 222
* // 'http://localhost:5173' - Network accessline 266
* * resolveRequestBackendURL('/api/c15t', { requestURL: request.url }); * // 'https://app.example.com/api/c15t' - Network accessline 267
* resolveRequestBackendURL('/api/c15t', { requestURL: request.url }); * // 'https://app.example.com/api/c15t' * ``` - Network accessline 268
* // 'https://app.example.com/api/c15t'
packages/core/src/server/request-subject.ts
- Executable scriptline 1
Executable file - Access to secretsline 81
[Credential-related source omitted] - Access to secretsline 100
[Credential-related source omitted] - Access to secretsline 107
[Credential-related source omitted] - Access to secretsline 203
[Credential-related source omitted] - Access to secretsline 242
[Credential-related source omitted] - Access to secretsline 243
[Credential-related source omitted] - Network accessline 260
* const subject = resolveRequestSubject({ request: { headers, url } }); * if (subject?.setCookie) { * // A response from fetch() or Response.redirect() has immutable - Network accessline 261
* if (subject?.setCookie) { * // A response from fetch() or Response.redirect() has immutable * // headers, so the cookie goes on a copy. - Network accessline 262
* // A response from fetch() or Response.redirect() has immutable
packages/core/src/server/route-prefix.ts
- Executable scriptline 1
Executable file
packages/core/src/server/static-manifest.ts
- Executable scriptline 1
Executable file
packages/core/src/static.ts
- Executable scriptline 1
Executable file
packages/core/src/surface-actions/__tests__/early-taps.test.ts
- Executable scriptline 1
Executable file
packages/core/src/surface-actions/blanket.ts
- Executable scriptline 1
Executable file
packages/core/src/surface-actions/early-tap-script.ts
packages/core/src/surface-actions/early-taps.ts
- Executable scriptline 1
Executable file
packages/core/src/surface-actions/iab-save.ts
- Executable scriptline 1
Executable file
packages/core/src/surface-actions/index.ts
- Executable scriptline 1
Executable file
packages/core/src/surface-actions/rules.ts
- Executable scriptline 1
Executable file
packages/core/src/surface-actions/save.ts
- Executable scriptline 1
Executable file
packages/core/src/translations/index.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/__tests__/subject-body.test.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/__tests__/vendor-transport.test.ts
- Executable scriptline 1
Executable file - Network accessline 225
id: 'meta-pixel', name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 226
name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', }, - Network accessline 227
privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/',
packages/core/src/transports/ad-tech-provider-cache.ts
- Executable scriptline 1
Executable file - Network accessline 198
const run = (async () => { try { const response = await options.fetch( - Network accessline 199
try { const response = await options.fetch( adTechProviderListUrl(options.reference.url, ids), - Network accessline 200
const response = await options.fetch(
packages/core/src/transports/contract.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/custom.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/decision-inputs.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/early-init-modes.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/gvl-cache.ts
- Executable scriptline 1
Executable file - Network accessline 103
const run = (async () => { try { const response = await options.fetch(options.url, { - Network accessline 104
try { const response = await options.fetch(options.url, { headers: { 'accept-language': options.language, ...options.headers }, - Network accessline 105
const response = await options.fetch(options.url, {
packages/core/src/transports/gvl-reference.ts
- Executable scriptline 1
Executable file - Network accessline 94
language: string ): string => { const url = new URL(initURL, 'http://c15t.local'); - Network accessline 95
): string => { const url = new URL(initURL, 'http://c15t.local'); url.searchParams.set('c15t-gvl', String(gvl.vendorListVersion)); - Network accessline 96
const url = new URL(initURL, 'http://c15t.local');
packages/core/src/transports/hosted-init-request.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/hosted-modes.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/hosted-records.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/hosted.ts
- Executable scriptline 1
Executable file - Network accessline 5
* Isomorphic: works in Node, RSC, edge, and browser. No top-level * `window` / `document` access. `fetch` is injectable for tests and * for consumers whose runtime has a specific fetch (Node 18 is fine - Network accessline 6
* `window` / `document` access. `fetch` is injectable for tests and * for consumers whose runtime has a specific fetch (Node 18 is fine * globally; Cloudflare Workers is fine globally; some edge hosts may - Network accessline 7
* for consumers whose runtime has a specific fetch (Node 18 is fine
packages/core/src/transports/index.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/init-output.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/manifest-browser-iab.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/manifest-browser-languages.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/manifest-browser-location.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/manifest-browser-packs.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/manifest-browser-remote.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/manifest-browser-resolve.ts
packages/core/src/transports/manifest-browser.ts
- Executable scriptline 1
Executable file - Network accessline 108
const parsed = new URL(trimmed, 'https://c15t.invalid'); - Network accessline 476
* import { manifest } from '@c15t/core/transports/manifest-browser'; * * const mode = manifest({ backendURL: 'https://your-project.inth.app' }); - Network accessline 477
* * const mode = manifest({ backendURL: 'https://your-project.inth.app' }); * ``` - Network accessline 478
* const mode = manifest({ backendURL: 'https://your-project.inth.app' });
packages/core/src/transports/manifest-cache.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/manifest-request.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/manifest.ts
- Executable scriptline 1
Executable file - Network accessline 348
* * const transport = createManifestTransport({ * manifestURL: 'https://api.example.com/c15t/manifest', - Network accessline 349
* const transport = createManifestTransport({ * manifestURL: 'https://api.example.com/c15t/manifest', * inputs: { country: 'DE', language: 'de', region: null }, - Network accessline 350
* manifestURL: 'https://api.example.com/c15t/manifest',
packages/core/src/transports/mode.ts
- Executable scriptline 1
Executable file - Network accessline 140
* // assert the decision because `initURL` is set. * const sameOriginInit = hosted({ * backendURL: 'https://consent.example.com', - Network accessline 141
* const sameOriginInit = hosted({ * backendURL: 'https://consent.example.com', * initURL: '/api/consent/init', - Network accessline 142
* backendURL: 'https://consent.example.com',
packages/core/src/transports/offline.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/save-rejection.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/subject-body.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/subject-record.ts
- Executable scriptline 1
Executable file
packages/core/src/transports/version-header.ts
- Executable scriptline 1
Executable file
packages/core/src/types.ts
- Executable scriptline 1
Executable file
packages/core/vitest.config.ts
- Executable scriptline 1
Executable file
packages/core/vitest.setup.ts
- Executable scriptline 1
Executable file - Network accessline 49
location: { hash: '', href: 'https://test.example.com/', - Network accessline 50
hash: '', href: 'https://test.example.com/', origin: 'https://test.example.com', - Network accessline 51
href: 'https://test.example.com/', - Network accessline 52
origin: 'https://test.example.com',
packages/nextjs/AGENTS.md
- Network accessline 25
[Documentation index](https://c15t.com/docs/llms.txt) · [Full Markdown context](https://c15t.com/llms-full.txt). Prefer the index and individual pages for focused tasks.
packages/nextjs/CHANGELOG.md
- Access to secretsline 63
[Credential-related source omitted] - Access to secretsline 82
[Credential-related source omitted] - Access to secretsline 84
[Credential-related source omitted] - Access to secretsline 85
[Credential-related source omitted] - Access to secretsline 329
[Credential-related source omitted] - Access to secretsline 348
[Credential-related source omitted] - Access to secretsline 350
[Credential-related source omitted] - Access to secretsline 351
[Credential-related source omitted] - Network accessline 516
c15t v3 is stable and published under the `latest` tag. See the [3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 517
[3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 1115
The init route takes `GET` from the same call. You can pass options instead of a config, for example `createNextConsentRouteHandlers({ backendURL: 'https://your-project.inth.app' })`. - Network accessline 1270
See [keep open tabs in step](https://c15t.com/docs/guides/consent-state#keep-open-tabs-in-step). - Network accessline 1360
- Pass `waitUntil` to Next.js `resolveConsent`, or `onBackgroundRevalidate` to TanStack Start `resolveConsent`, so serverless platforms keep a manifest request alive after the render stops waiting for it. - Code that retried the manifest ca - Network accessline 1362
- Next.js `resolveConsent` now refuses to forward `forwardHeaders` credentials to a plain `http://` manifest URL on a host other than loopback, matching the route handlers; the render falls back to the baseline state and reports the error. - Access to secretsline 1415
[Credential-related source omitted] - Network accessline 1494
- 184b491: Read the [c15t 2.3.0 changelog](https://c15t.com/changelog/2.3.0) for the complete release notes and upgrade context. - Network accessline 1523
Fix `www` handling in CORS origin matching. `*.example.com` now accepts `https://www.example.com`, and a schemeless `www.example.com` entry accepts both the apex and `www` forms. - Network accessline 1538
- Read the [c15t 2.2.0 changelog](https://c15t.com/changelog/2.2.0) for the complete release notes and upgrade context. - Network accessline 1658
- 32617c9: Changelog available at https://c15t.com/changelog/2.0.0 - Network accessline 1867
- 126a78b: https://c15t.com/changelog/2.0.0-rc.0 - Network accessline 1947
- 68a7324: Full Changelog: https://c15t.com/changelog/1.8.0 - Network accessline 1989
- aa16d03: You can find the full changelog at https://c15t.com/changelog/1.7.0 - Network accessline 2029
- 84ab0c7: For a full detailed changelog see the [v1.6.0 release notes](https://c15t.com/changelog/1.6.0).
packages/nextjs/README.md
- Network accessline 1
<p align="center"> <a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fnextjs" target="_blank" rel="noopener noreferrer"> - Network accessline 2
<a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fnextjs" target="_blank" rel="noopener noreferrer"> - Network accessline 12
<p> <a href="https://www.npmjs.com/package/@c15t/nextjs"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/%40c15t%2Fnextjs.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/%40c15t%2Fnex - Network accessline 13
<a href="https://www.npmjs.com/package/@c15t/nextjs"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/%40c15t%2Fnextjs.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/%40c15t%2Fnextjs. - Network accessline 14
<a href="https://github.com/c15t/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/stars.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15t/c15t/stars.svg?varian - Network accessline 15
<a href="https://github.com/c15t/c15t/blob/main/LICENSE.md"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/license.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15 - Network accessline 16
<a href="https://c15t.link/discord"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/discord/1312171102268690493.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/discord/1312171102268690493.svg - Network accessline 17
<a href="https://skills.sh/c15t/skills/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/skills/c15t/skills/c15t.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/skills/c15t/skills/c15t.sv - Network accessline 18
<a href="https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fnextjs"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/badge/Made%20By-Inth-ffc803.svg?color=ffc803 - Network accessline 23
c15t is used by [2,100+ sites](https://www.wappalyzer.com/technologies/cookie-compliance/c15t/), including expo.dev, zed.dev, unkey.dev, mintlify.com, and sazabi.com. - Network accessline 39
- React 18 or 19 - Node.js 20.19 or later - An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend - Network accessline 41
- An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend - Network accessline 56
Using several c15t packages? Install [`c15t`](https://www.npmjs.com/package/c15t) and import `c15t/next` instead. It is the same code. - Network accessline 114
5. For the full setup, see the [Next.js quickstart](https://c15t.com/docs/frameworks/next/quickstart) - Network accessline 118
c15t needs a backend to serve policies and keep consent records. [Inth](https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fnextjs) runs it for you. It stores every choice with its region and poli - Network accessline 126
See the [documentation](https://c15t.com/docs/frameworks/next/quickstart) for guides, API reference, and examples. - Network accessline 132
On the web, every page of the [c15t docs](https://c15t.com/docs) has a Markdown version, and [llms.txt](https://c15t.com/docs/llms.txt) lists them all. Install the c15t agent skills with `npx skills add c15t/skills`. - Network accessline 136
- Join our [Discord community](https://c15t.link/discord) - Network accessline 137
- Open an issue on our [GitHub repository](https://github.com/c15t/c15t/issues) - Network accessline 138
- Visit [inth.com](https://inth.com) and use the chat widget - Network accessline 143
- Read the [contribution guidelines](https://c15t.com/docs/oss/contributing) before you open a pull request - Network accessline 144
- Follow the [code of conduct](https://c15t.com/docs/oss/code-of-conduct) - Network accessline 148
Do not open a public issue for a security vulnerability. Report it privately through [GitHub's vulnerability reporting](https://github.com/c15t/c15t/security/advisories/new). We examine every valid report. - Network accessline 156
[Apache License 2.0](https://github.com/c15t/c15t/blob/main/LICENSE.md) - Network accessline 160
**Built by [Inth](https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fnextjs)**
packages/nextjs/docs/integrations/cloudflare-zaraz.md
- Network accessline 40
after the first synchronization. DOM-ready, timer and click triggers you add in Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 41
Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) and [pageview settings](https://developers.cloudflare.com/zaraz/reference/setti - Network accessline 42
[purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 43
and [pageview settings](https://developers.cloudflare.com/zaraz/reference/settings/). - Network accessline 73
for tools that Zaraz already runs, including a separate `@c15t/integrations` helper for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) - Network accessline 74
for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) once. - Network accessline 75
[Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) - Network accessline 80
Complete your [framework quickstart](https://c15t.com/docs/frameworks) first. Keep its Inth - Network accessline 112
Import the configuration into your root route and pass it to the existing `ConsentRoot` as a top-level prop. Keep the loader from the [TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 114
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 123
A server function's return value must be serializable, and script configurations carry callbacks. See [TanStack Start scripts](https://c15t.com/docs/frameworks/tanstack-start/scripts). - Network accessline 125
[TanStack Start scripts](https://c15t.com/docs/frameworks/tanstack-start/scripts). - Network accessline 138
`mode` is the `manifest()` value from the [React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 139
[React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 141
[React scripts and embeds](https://c15t.com/docs/frameworks/react/scripts). - Network accessline 159
`nuxt.config.ts`, which reaches the browser as JSON and drops the vendor callbacks. Write the vendor IDs into `consent-scripts.ts`. See [Nuxt scripts and embeds](https://c15t.com/docs/frameworks/nuxt/scripts). - Network accessline 161
[Nuxt scripts and embeds](https://c15t.com/docs/frameworks/nuxt/scripts). - Network accessline 178
script loader when the app mounts, after it has applied the visitor's stored choice. Do not also call `createScriptLoader` from a component. See [Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts). - Network accessline 180
[Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts). - Network accessline 184
Add the scripts to the client entrypoint from the [Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 185
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 218
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart). - Network accessline 223
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 224
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 258
once that category is allowed, and reloads the page when the visitor withdraws it. Helper options on this page, such as `loadMode`, do not apply to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/scripts). - Network accessline 260
to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/scripts). - Network accessline 278
A kernel you create yourself needs a loader from `c15t/modules/script-loader`. Attach one loader per kernel. See [JavaScript scripts](https://c15t.com/docs/frameworks/javascript/scripts). - Network accessline 280
[JavaScript scripts](https://c15t.com/docs/frameworks/javascript/scripts).
packages/nextjs/knip.json
packages/nextjs/package.json
- Executable scriptline 1
Executable file - Network accessline 43
"typescript" ], "homepage": "https://c15t.com/docs/frameworks/next/quickstart", - Network accessline 44
], "homepage": "https://c15t.com/docs/frameworks/next/quickstart", "bugs": { - Network accessline 45
"homepage": "https://c15t.com/docs/frameworks/next/quickstart", - Network accessline 46
"bugs": { "url": "https://github.com/c15t/c15t/issues" }, - Network accessline 47
"url": "https://github.com/c15t/c15t/issues" - Network accessline 50
"repository": { "type": "git", "url": "https://github.com/c15t/c15t.git", - Network accessline 51
"type": "git", "url": "https://github.com/c15t/c15t.git", "directory": "packages/nextjs" - Network accessline 52
"url": "https://github.com/c15t/c15t.git",
packages/nextjs/readme.json
- Network accessline 16
"React 18 or 19", "Node.js 20.19 or later", "An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" - Network accessline 17
"Node.js 20.19 or later", "An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" ], - Network accessline 18
"An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" - Network accessline 26
"```css\n/* app/globals.css */\n@import \"@c15t/nextjs/styles.css\";\n```", "", "Using several c15t packages? Install [`c15t`](https://www.npmjs.com/package/c15t) and import `c15t/next` instead. It is the same code." - Network accessline 27
"", "Using several c15t packages? Install [`c15t`](https://www.npmjs.com/package/c15t) and import `c15t/next` instead. It is the same code." ], - Network accessline 28
"Using several c15t packages? Install [`c15t`](https://www.npmjs.com/package/c15t) and import `c15t/next` instead. It is the same code." - Network accessline 36
"Render `ConsentRoot` with `ConsentBanner` and `ConsentDialog` in the root layout, and pass it `resolveConsent()`", "```tsx\n// app/layout.tsx\nimport {\n ConsentBanner,\n ConsentDialog,\n ConsentDialogLink,\n ConsentRoot,\n} from '@c - Network accessline 37
"```tsx\n// app/layout.tsx\nimport {\n ConsentBanner,\n ConsentDialog,\n ConsentDialogLink,\n ConsentRoot,\n} from '@c15t/nextjs'\nimport { resolveConsent } from '@c15t/nextjs/server'\nimport type { ReactNode } from 'react'\n\nimport '. - Network accessline 38
"For the full setup, see the [Next.js quickstart](https://c15t.com/docs/frameworks/next/quickstart)" - Network accessline 39
], "docsLink": "https://c15t.com/docs/frameworks/next/quickstart", "quickStartLink": "https://c15t.com/docs/frameworks/next/quickstart", - Network accessline 40
"docsLink": "https://c15t.com/docs/frameworks/next/quickstart", - Network accessline 41
"quickStartLink": "https://c15t.com/docs/frameworks/next/quickstart",
packages/nextjs/rslib.config.ts
- Executable scriptline 1
Executable file
packages/nextjs/scripts/generate-distribution-css.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/api.test.ts
- Executable scriptline 1
Executable file - Network accessline 37
const fetch = vi.fn<typeof globalThis.fetch>(); const { GET } = createConsentRoute({ backendURL: 'https://consent.example.com', - Network accessline 38
const { GET } = createConsentRoute({ backendURL: 'https://consent.example.com', fetch, - Network accessline 39
backendURL: 'https://consent.example.com', fetch, reportSessions: false, - Network accessline 42
snapshot: MANIFEST_FIXTURE, }); const served = await call(GET, 'https://app.example.com/api/c15t/manifest'); - Network accessline 43
}); const served = await call(GET, 'https://app.example.com/api/c15t/manifest'); expect(await served.json()).toEqual(MANIFEST_FIXTURE); - Network accessline 44
const served = await call(GET, 'https://app.example.com/api/c15t/manifest'); - Network accessline 51
const response = await call( GET, 'https://app.example.com/api/c15t/init', - Network accessline 52
GET, 'https://app.example.com/api/c15t/init', { - Network accessline 53
'https://app.example.com/api/c15t/init', - Network accessline 70
const fetch = manifestFetch(); const { GET } = createConsentRoute({ backendURL: 'https://consent.example.com', - Network accessline 71
const { GET } = createConsentRoute({ backendURL: 'https://consent.example.com', fetch, - Network accessline 72
backendURL: 'https://consent.example.com', fetch, manifestRevalidateSeconds: 120, - Network accessline 78
const init = await call(GET, 'https://app.example.com/api/c15t/init', { - Network accessline 81
const served = await call( GET, 'https://app.example.com/api/c15t/manifest', - Network accessline 82
GET, 'https://app.example.com/api/c15t/manifest', { headers: { 'if-none-match': '"manifest-revision"' } } - Network accessline 83
'https://app.example.com/api/c15t/manifest', - Network accessline 92
expect(fetch).toHaveBeenCalledTimes(1); expect(fetch).toHaveBeenCalledWith( 'https://consent.example.com/manifest', - Network accessline 93
expect(fetch).toHaveBeenCalledWith( 'https://consent.example.com/manifest', expect.objectContaining({ next: { revalidate: 120 } }) - Network accessline 94
'https://consent.example.com/manifest', - Network accessline 101
const registered: Promise<void>[] = []; const { GET } = createConsentRoute({ backendURL: 'https://consent.example.com', - Network accessline 102
const { GET } = createConsentRoute({ backendURL: 'https://consent.example.com', fetch, - Network accessline 103
backendURL: 'https://consent.example.com', fetch, onBackgroundRevalidate: (task) => { - Network accessline 107
}, }); await call(GET, 'https://app.example.com/api/c15t/init'); - Network accessline 108
}); await call(GET, 'https://app.example.com/api/c15t/init'); expect(registered).toHaveLength(1); - Network accessline 109
await call(GET, 'https://app.example.com/api/c15t/init'); - Network accessline 111
await registered[0]; expect(fetch).toHaveBeenLastCalledWith( 'https://consent.example.com/sessions', - Network accessline 112
expect(fetch).toHaveBeenLastCalledWith( 'https://consent.example.com/sessions', expect.objectContaining({ method: 'POST' }) - Network accessline 113
'https://consent.example.com/sessions', - Network accessline 119
const fetch = manifestFetch(); const config = defineConsentConfig({ backendURL: 'https://consent.example.com/api/c15t', - Network accessline 120
const config = defineConsentConfig({ backendURL: 'https://consent.example.com/api/c15t', mode: manifest({ resolve: 'browser', source: 'runtime' }), - Network accessline 121
backendURL: 'https://consent.example.com/api/c15t', - Network accessline 124
}); const { GET } = createConsentRoute({ config, fetch }); await call(GET, 'https://app.example.com/api/consent/manifest'); - Network accessline 125
const { GET } = createConsentRoute({ config, fetch }); await call(GET, 'https://app.example.com/api/consent/manifest'); expect(fetch.mock.calls[0]?.[0]).toBe( - Network accessline 126
await call(GET, 'https://app.example.com/api/consent/manifest'); expect(fetch.mock.calls[0]?.[0]).toBe( 'https://consent.example.com/api/c15t/manifest' - Network accessline 127
expect(fetch.mock.calls[0]?.[0]).toBe( 'https://consent.example.com/api/c15t/manifest' ); - Network accessline 128
'https://consent.example.com/api/c15t/manifest' - Network accessline 133
const fetch = manifestFetch(); const config = defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 134
const config = defineConsentConfig({ backendURL: 'https://consent.example.com', mode: manifest({ manifestURL: 'https://cdn.example.com/policy.json' }), - Network accessline 135
backendURL: 'https://consent.example.com', - Network accessline 136
mode: manifest({ manifestURL: 'https://cdn.example.com/policy.json' }), }); const { GET } = createConsentRoute({ config, fetch }); - Network accessline 137
}); const { GET } = createConsentRoute({ config, fetch }); await call(GET, 'https://app.example.com/api/c15t/manifest'); - Network accessline 138
const { GET } = createConsentRoute({ config, fetch }); await call(GET, 'https://app.example.com/api/c15t/manifest'); expect(fetch.mock.calls[0]?.[0]).toBe( - Network accessline 139
await call(GET, 'https://app.example.com/api/c15t/manifest'); expect(fetch.mock.calls[0]?.[0]).toBe( 'https://cdn.example.com/policy.json' - Network accessline 140
expect(fetch.mock.calls[0]?.[0]).toBe( 'https://cdn.example.com/policy.json' ); - Network accessline 141
'https://cdn.example.com/policy.json' - Network accessline 146
const { GET } = createConsentRoute({}); await expect( call(GET, 'https://app.example.com/api/c15t/init') - Network accessline 147
await expect( call(GET, 'https://app.example.com/api/c15t/init') ).rejects.toThrow('@c15t/nextjs: pass backendURL or manifestURL.'); - Network accessline 148
call(GET, 'https://app.example.com/api/c15t/init')
packages/nextjs/src/__tests__/build.test.ts
- Executable scriptline 1
Executable file - Network accessline 52
const optionsFor = () => ({ backendURL: 'https://consent.example.com', fetch: vi - Network accessline 53
backendURL: 'https://consent.example.com', fetch: vi .fn<typeof globalThis.fetch>() - Network accessline 84
const source = await readServerModule(root); expect(source).toContain( 'export const backendURL = "https://consent.example.com";' - Network accessline 85
expect(source).toContain( 'export const backendURL = "https://consent.example.com";' ); - Network accessline 86
'export const backendURL = "https://consent.example.com";' - Network accessline 97
expect(options.fetch).toHaveBeenCalledTimes(1); expect(options.fetch).toHaveBeenCalledWith( 'https://consent.example.com/manifest', - Network accessline 98
expect(options.fetch).toHaveBeenCalledWith( 'https://consent.example.com/manifest', expect.any(Object) - Network accessline 99
'https://consent.example.com/manifest', - Network accessline 240
wrapped('phase-production-build', { defaultConfig: {} }) ).rejects.toThrow( "@c15t/nextjs/build: could not fetch the consent manifest from https://consent.example.com/manifest during the build (backend unavailable). Set `C15T_ON_BUILD_ - Network accessline 241
).rejects.toThrow( "@c15t/nextjs/build: could not fetch the consent manifest from https://consent.example.com/manifest during the build (backend unavailable). Set `C15T_ON_BUILD_ERROR=runtime` (or `onBuildError: 'runtime'`) to deploy wit - Network accessline 242
"@c15t/nextjs/build: could not fetch the consent manifest from https://consent.example.com/manifest during the build (backend unavailable). Set `C15T_ON_BUILD_ERROR=runtime` (or `onBuildError: 'runtime'`) to deploy with runtime fetching." - Network accessline 260
expect(warn).toHaveBeenCalledWith( expect.stringContaining( '@c15t/nextjs/build: could not fetch the consent manifest from https://consent.example.com/manifest during dev (backend unavailable)' - Network accessline 261
expect.stringContaining( '@c15t/nextjs/build: could not fetch the consent manifest from https://consent.example.com/manifest during dev (backend unavailable)' ) - Network accessline 262
'@c15t/nextjs/build: could not fetch the consent manifest from https://consent.example.com/manifest during dev (backend unavailable)' - Network accessline 287
test('reads NEXT_PUBLIC_C15T_BACKEND_URL when backendURL is left out', async () => { vi.stubEnv('NEXT_PUBLIC_C15T_BACKEND_URL', 'https://env.example.com/api'); - Network accessline 288
vi.stubEnv('NEXT_PUBLIC_C15T_BACKEND_URL', 'https://env.example.com/api'); const root = await createRoot(); const { fetch } = optionsFor(); - Network accessline 293
}); expect(fetch).toHaveBeenCalledWith( 'https://env.example.com/api/manifest', - Network accessline 294
expect(fetch).toHaveBeenCalledWith( 'https://env.example.com/api/manifest', expect.any(Object) - Network accessline 295
'https://env.example.com/api/manifest', - Network accessline 297
); expect(await readServerModule(root)).toContain( 'export const backendURL = "https://env.example.com/api";' - Network accessline 298
expect(await readServerModule(root)).toContain( 'export const backendURL = "https://env.example.com/api";' ); - Network accessline 299
'export const backendURL = "https://env.example.com/api";' - Network accessline 303
describe('NEXT_PUBLIC_INTH_PROJECT_URL', () => { const INTH = 'https://inth.example.com'; - Network accessline 304
const INTH = 'https://inth.example.com'; - Network accessline 305
const C15T = 'https://c15t.example.com'; - Access to secretsline 335
[Credential-related source omitted] - Access to secretsline 340
[Credential-related source omitted] - Network accessline 370
await writeFile( join(root, 'c15t.config.ts'), "export default { backendURL: 'https://config.example.com' };\n" - Network accessline 371
join(root, 'c15t.config.ts'), "export default { backendURL: 'https://config.example.com' };\n" ); - Network accessline 372
"export default { backendURL: 'https://config.example.com' };\n" ); const { fetch } = optionsFor(); - Network accessline 375
await build({ fetch }); expect(fetch).toHaveBeenCalledWith( 'https://config.example.com/manifest', - Network accessline 376
expect(fetch).toHaveBeenCalledWith( 'https://config.example.com/manifest', expect.any(Object) - Network accessline 377
'https://config.example.com/manifest', - Network accessline 379
); expect( defineConsentConfig({ backendURL: 'https://config.example.com' }) - Network accessline 380
expect( defineConsentConfig({ backendURL: 'https://config.example.com' }) .backendURL - Network accessline 381
defineConsentConfig({ backendURL: 'https://config.example.com' }) - Network accessline 383
).toBe('https://config.example.com'); - Network accessline 385
fetch.mockClear(); await build({ backendURL: 'https://option.example.com', fetch }); - Network accessline 386
await build({ backendURL: 'https://option.example.com', fetch }); - Network accessline 387
expect(fetch).toHaveBeenCalledWith( 'https://option.example.com/manifest', expect.any(Object) - Network accessline 388
'https://option.example.com/manifest', - Network accessline 417
[ 'an absolute manifest({ manifestURL })', "{ mode: { type: 'manifest', manifestURL: 'https://cdn.example/policy.json' } }", - Network accessline 418
'an absolute manifest({ manifestURL })', "{ mode: { type: 'manifest', manifestURL: 'https://cdn.example/policy.json' } }", 'absolute manifest({ manifestURL })', - Network accessline 419
"{ mode: { type: 'manifest', manifestURL: 'https://cdn.example/policy.json' } }", - Network accessline 471
{ C15T_CONSENT_ROUTE_PREFIX: '/api/consent' }, ], ["routePrefix: 'https://consent.example.com/c15t'", undefined], - Network accessline 472
], ["routePrefix: 'https://consent.example.com/c15t'", undefined], ['no routePrefix', undefined], - Network accessline 473
["routePrefix: 'https://consent.example.com/c15t'", undefined], - Network accessline 480
await writeFile( join(root, 'c15t.config.ts'), `export default { ${body}backendURL: 'https://consent.example.com' };\n` - Network accessline 481
join(root, 'c15t.config.ts'), `export default { ${body}backendURL: 'https://consent.example.com' };\n` ); - Network accessline 482
`export default { ${body}backendURL: 'https://consent.example.com' };\n` - Network accessline 494
await writeFile( join(root, 'c15t.config.ts'), "export default { backendURL: 'https://config.example.com' };\n" - Network accessline 495
join(root, 'c15t.config.ts'), "export default { backendURL: 'https://config.example.com' };\n" ); - Network accessline 496
"export default { backendURL: 'https://config.example.com' };\n" ); const { fetch } = optionsFor(); - Network accessline 501
}); expect(fetch).toHaveBeenCalledWith( 'https://config.example.com/manifest', - Network accessline 502
expect(fetch).toHaveBeenCalledWith( 'https://config.example.com/manifest', expect.any(Object) - Network accessline 503
'https://config.example.com/manifest', - Network accessline 505
); expect(await readServerModule(root)).toContain( 'export const backendURL = "https://config.example.com";' - Network accessline 506
expect(await readServerModule(root)).toContain( 'export const backendURL = "https://config.example.com";' ); - Network accessline 507
'export const backendURL = "https://config.example.com";'
packages/nextjs/src/__tests__/client-mode.test.ts
- Executable scriptline 1
Executable file - Network accessline 11
test('manifest() by default, carrying its data', () => { const mode = createClientMode(undefined, { backendURL: 'https://consent.example.com', - Network accessline 12
const mode = createClientMode(undefined, { backendURL: 'https://consent.example.com', }); - Network accessline 13
backendURL: 'https://consent.example.com', - Network accessline 24
] as const)('%o reports kind %s', (data, kind) => { const mode = createClientMode(data, { backendURL: 'https://consent.example.com', - Network accessline 25
const mode = createClientMode(data, { backendURL: 'https://consent.example.com', }); - Network accessline 26
backendURL: 'https://consent.example.com', - Network accessline 42
); expect( createClientMode(hosted({ backendURL: 'https://h.example.com' }), {}).kind - Network accessline 43
expect( createClientMode(hosted({ backendURL: 'https://h.example.com' }), {}).kind ).toBe('hosted'); - Network accessline 44
createClientMode(hosted({ backendURL: 'https://h.example.com' }), {}).kind
packages/nextjs/src/__tests__/config-browser.test.ts
- Executable scriptline 1
Executable file - Network accessline 10
test('normalizes without checking', () => { const config = defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 11
const config = defineConsentConfig({ backendURL: 'https://consent.example.com', journey: 'session' as never, - Network accessline 12
backendURL: 'https://consent.example.com', - Network accessline 17
expect(config).toEqual({ backendURL: 'https://consent.example.com', - Network accessline 18
backendURL: 'https://consent.example.com',
packages/nextjs/src/__tests__/config.test.ts
- Executable scriptline 1
Executable file - Network accessline 20
]; const config = defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 21
const config = defineConsentConfig({ backendURL: 'https://consent.example.com', journey: 'tab', - Network accessline 22
backendURL: 'https://consent.example.com', - Network accessline 29
expect(config).toEqual({ backendURL: 'https://consent.example.com', - Network accessline 30
backendURL: 'https://consent.example.com', - Network accessline 39
test('reads the backend URL from NEXT_PUBLIC_C15T_BACKEND_URL', () => { vi.stubEnv('NEXT_PUBLIC_C15T_BACKEND_URL', 'https://env.example.com'); - Network accessline 40
vi.stubEnv('NEXT_PUBLIC_C15T_BACKEND_URL', 'https://env.example.com'); - Network accessline 42
expect(defineConsentConfig().backendURL).toBe('https://env.example.com'); - Network accessline 58
expect(() => defineConsentConfig({ mode: hosted({ backendURL: 'https://consent.example.com' }), - Network accessline 59
defineConsentConfig({ mode: hosted({ backendURL: 'https://consent.example.com' }), }) - Network accessline 60
mode: hosted({ backendURL: 'https://consent.example.com' }), - Network accessline 72
expect(() => defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 73
defineConsentConfig({ backendURL: 'https://consent.example.com', proxy: true, - Network accessline 74
backendURL: 'https://consent.example.com', - Network accessline 80
expect( defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 81
defineConsentConfig({ backendURL: 'https://consent.example.com', proxy: true, - Network accessline 82
backendURL: 'https://consent.example.com', - Network accessline 85
}) ).toMatchObject({ backendURL: 'https://consent.example.com', - Network accessline 86
).toMatchObject({ backendURL: 'https://consent.example.com', proxy: true, - Network accessline 87
backendURL: 'https://consent.example.com', - Network accessline 97
expect(() => defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 98
defineConsentConfig({ backendURL: 'https://consent.example.com', proxy, - Network accessline 99
backendURL: 'https://consent.example.com', - Network accessline 113
backendURL: '/api/c15t', mode: manifest({ manifestURL: 'http://localhost:3000/api/consent/manifest', - Network accessline 114
mode: manifest({ manifestURL: 'http://localhost:3000/api/consent/manifest', }), - Network accessline 115
manifestURL: 'http://localhost:3000/api/consent/manifest',
packages/nextjs/src/__tests__/conformance.test.tsx
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/consent-dialog-link-entry.test.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/consent-route.test.ts
- Executable scriptline 1
Executable file - Network accessline 37
const fetch = upstream(); const { GET } = createConsentRoute({ backendURL: 'https://consent.example.com', - Network accessline 38
const { GET } = createConsentRoute({ backendURL: 'https://consent.example.com', fetch, - Network accessline 39
backendURL: 'https://consent.example.com', fetch, reportSessions: false, - Network accessline 44
const manifest = await GET( new Request('https://app.example.com/api/c15t/manifest'), - Network accessline 45
new Request('https://app.example.com/api/c15t/manifest'), - Network accessline 50
const init = await GET( new Request('https://app.example.com/api/c15t/init', { - Network accessline 51
new Request('https://app.example.com/api/c15t/init', { - Network accessline 62
const fetch = upstream(); const { GET } = createConsentRoute({ backendURL: 'https://consent.example.com', - Network accessline 63
const { GET } = createConsentRoute({ backendURL: 'https://consent.example.com', fetch, - Network accessline 64
backendURL: 'https://consent.example.com', fetch, }); - Network accessline 69
[['foo'], ['subjects'], ['manifest', 'extra']].map((segments) => GET( new Request(`https://app.example.com/api/c15t/${segments.join('/')}`), - Network accessline 70
GET( new Request(`https://app.example.com/api/c15t/${segments.join('/')}`), params(...segments) - Network accessline 71
new Request(`https://app.example.com/api/c15t/${segments.join('/')}`), - Network accessline 85
const { GET } = createConsentRoute({ config: defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 86
config: defineConsentConfig({ backendURL: 'https://consent.example.com', routePrefix: '/api/c15t', - Network accessline 87
backendURL: 'https://consent.example.com', - Network accessline 92
await GET( new Request('https://app.example.com/api/c15t/manifest'), - Network accessline 93
new Request('https://app.example.com/api/c15t/manifest'), - Network accessline 95
); expect(String(fetch.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/manifest' - Network accessline 96
expect(String(fetch.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/manifest' ); - Network accessline 97
'https://consent.example.com/manifest' - Network accessline 102
const fetch = upstream(); const handlers = createConsentRoute({ backendURL: 'https://consent.example.com', - Network accessline 103
const handlers = createConsentRoute({ backendURL: 'https://consent.example.com', fetch, - Network accessline 104
backendURL: 'https://consent.example.com', fetch, proxy: true, - Network accessline 109
const response = await handlers.POST( new Request('https://app.example.com/api/c15t/subjects', { - Network accessline 110
new Request('https://app.example.com/api/c15t/subjects', { - Network accessline 118
expect(response.status).toBe(201); expect(String(fetch.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/subjects' - Network accessline 119
expect(String(fetch.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/subjects' ); - Network accessline 120
'https://consent.example.com/subjects' - Network accessline 126
expect(() => createConsentRoute({ backendURL: 'https://consent.example.com', - Network accessline 127
createConsentRoute({ backendURL: 'https://consent.example.com', config: { routePrefix: '/' }, - Network accessline 128
backendURL: 'https://consent.example.com', - Network accessline 134
expect(() => createPagesConsentRoute({ backendURL: 'https://consent.example.com', - Network accessline 135
createPagesConsentRoute({ backendURL: 'https://consent.example.com', config: { routePrefix: '/' }, - Network accessline 136
backendURL: 'https://consent.example.com',
packages/nextjs/src/__tests__/devtools.test.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/end-to-end.test.tsx
- Executable scriptline 1
Executable file - Network accessline 118
<ConsentRoot state={{}} config={{ backendURL: 'http://bench.example.com/api/c15t' }} - Network accessline 119
state={{}} config={{ backendURL: 'http://bench.example.com/api/c15t' }} persistence={false} - Network accessline 120
config={{ backendURL: 'http://bench.example.com/api/c15t' }} - Network accessline 181
<ConsentRoot state={{}} config={{ backendURL: 'http://bench.example.com/api/c15t' }} - Network accessline 182
state={{}} config={{ backendURL: 'http://bench.example.com/api/c15t' }} options={{ enabled: false }} - Network accessline 183
config={{ backendURL: 'http://bench.example.com/api/c15t' }} - Network accessline 232
<ConsentRoot state={state} config={{ backendURL: 'http://bench.example.com/api/c15t' }} - Network accessline 233
state={state} config={{ backendURL: 'http://bench.example.com/api/c15t' }} persistence={false} - Network accessline 234
config={{ backendURL: 'http://bench.example.com/api/c15t' }} - Network accessline 290
'saves post to the backend', undefined, 'https://consent.example.com/subjects', - Network accessline 291
undefined, 'https://consent.example.com/subjects', undefined, - Network accessline 292
'https://consent.example.com/subjects', - Network accessline 303
true, '/api/consent/subjects', hosted({ backendURL: 'https://hosted.example.com' }), - Network accessline 304
'/api/consent/subjects', hosted({ backendURL: 'https://hosted.example.com' }), ], - Network accessline 305
hosted({ backendURL: 'https://hosted.example.com' }), - Network accessline 336
state={{}} config={defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 337
config={defineConsentConfig({ backendURL: 'https://consent.example.com', mode, - Network accessline 338
backendURL: 'https://consent.example.com', - Network accessline 407
state={{ initialOverrides: { country: 'DE' } }} config={defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 408
config={defineConsentConfig({ backendURL: 'https://consent.example.com', mode: manifest({ resolve: 'browser' }), - Network accessline 409
backendURL: 'https://consent.example.com', - Network accessline 424
expect(fetchSpy.mock.calls.map(([url]) => pathOf(url))).toEqual([ '/api/consent/manifest', 'https://consent.example.com/subjects', - Network accessline 425
'/api/consent/manifest', 'https://consent.example.com/subjects', ]); - Network accessline 426
'https://consent.example.com/subjects', - Network accessline 456
state={{ initialOverrides: { country: 'US' } }} config={defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 457
config={defineConsentConfig({ backendURL: 'https://consent.example.com', mode: manifest({ resolve: 'browser' }), - Network accessline 458
backendURL: 'https://consent.example.com', - Network accessline 471
expect(fetchSpy.mock.calls.map(([url]) => pathOf(url))).toEqual([ '/api/consent/manifest', 'https://consent.example.com/init', - Network accessline 472
'/api/consent/manifest', 'https://consent.example.com/init', ]); - Network accessline 473
'https://consent.example.com/init', - Network accessline 497
state={{}} config={defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 498
config={defineConsentConfig({ backendURL: 'https://consent.example.com', })} - Network accessline 499
backendURL: 'https://consent.example.com', - Network accessline 509
.toHaveTextContent('gdpr|DE|false'); expect(pathOf(fetchSpy.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/init' - Network accessline 510
expect(pathOf(fetchSpy.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/init' ); - Network accessline 511
'https://consent.example.com/init' - Network accessline 538
state={{}} config={defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 539
config={defineConsentConfig({ backendURL: 'https://consent.example.com', journey: false, - Network accessline 540
backendURL: 'https://consent.example.com', - Network accessline 577
}} config={defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 578
config={defineConsentConfig({ backendURL: 'https://consent.example.com', })} - Network accessline 579
backendURL: 'https://consent.example.com', - Network accessline 587
await vi.waitFor(() => expect(fetchSpy).toHaveBeenCalled()); expect(pathOf(fetchSpy.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/subjects' - Network accessline 588
expect(pathOf(fetchSpy.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/subjects' ); - Network accessline 589
'https://consent.example.com/subjects' - Network accessline 610
state={{}} config={defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 611
config={defineConsentConfig({ backendURL: 'https://consent.example.com', routePrefix: '/api/consent', - Network accessline 612
backendURL: 'https://consent.example.com',
packages/nextjs/src/__tests__/generated-manifest-default.test.ts
- Executable scriptline 1
Executable file - Network accessline 16
vi.mock('@c15t/nextjs/generated-manifest', async () => ({ backendURL: 'https://consent.example.com', - Network accessline 17
backendURL: 'https://consent.example.com', - Network accessline 21
const config = defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 22
backendURL: 'https://consent.example.com', - Network accessline 44
const response = await GET( new Request('https://app.example.com/api/c15t/manifest'), - Network accessline 45
new Request('https://app.example.com/api/c15t/manifest'), - Network accessline 75
const { GET } = createConsentRoute({ config: defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 76
config: defineConsentConfig({ backendURL: 'https://consent.example.com', mode: manifest({ source: 'runtime' }), - Network accessline 77
backendURL: 'https://consent.example.com', - Network accessline 82
const response = await GET( new Request('https://app.example.com/api/c15t/manifest'), - Network accessline 83
new Request('https://app.example.com/api/c15t/manifest'), - Network accessline 87
expect(await response.json()).toMatchObject({ revision: 'live' }); expect(String(fetch.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/manifest' - Network accessline 88
expect(String(fetch.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/manifest' ); - Network accessline 89
'https://consent.example.com/manifest' - Network accessline 96
); const { GET } = createConsentRoute({ manifestURL: 'https://cdn.example.com/manifest.json', - Network accessline 97
const { GET } = createConsentRoute({ manifestURL: 'https://cdn.example.com/manifest.json', }); - Network accessline 98
manifestURL: 'https://cdn.example.com/manifest.json', - Network accessline 101
const response = await GET( new Request('https://app.example.com/api/c15t/manifest'), - Network accessline 102
new Request('https://app.example.com/api/c15t/manifest'),
packages/nextjs/src/__tests__/manifest-fixture.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/pages.test.ts
- Executable scriptline 1
Executable file - Network accessline 84
) { const sink = createResponseSink(); const path = new URL(request.url, 'https://app.example.com').pathname; - Network accessline 85
const sink = createResponseSink(); const path = new URL(request.url, 'https://app.example.com').pathname; await route( - Network accessline 86
const path = new URL(request.url, 'https://app.example.com').pathname; - Network accessline 113
const fetch = vi.fn<typeof globalThis.fetch>(); const state = await resolveConsent({ backendURL: 'https://consent.example.com', - Network accessline 114
const state = await resolveConsent({ backendURL: 'https://consent.example.com', fetch, - Network accessline 115
backendURL: 'https://consent.example.com', fetch, reportSessions: false, - Network accessline 133
const fetch = vi.fn<typeof globalThis.fetch>(); const route = createPagesConsentRoute({ backendURL: 'https://consent.example.com', - Network accessline 134
const route = createPagesConsentRoute({ backendURL: 'https://consent.example.com', fetch, - Network accessline 135
backendURL: 'https://consent.example.com', fetch, reportSessions: false, - Network accessline 268
expect(String(url).split('?')[0]).toBe( 'https://app.example.com/api/self-host/init' - Network accessline 269
'https://app.example.com/api/self-host/init' - Network accessline 304
const [url] = fetchSpy.mock.calls[0] ?? []; expect(url).toBe('https://app.example.com/api/consent/manifest'); - Network accessline 305
expect(url).toBe('https://app.example.com/api/consent/manifest'); - Network accessline 336
expect(String(fetchSpy.mock.calls[0]?.[0]).split('?')[0]).toBe( 'https://app.example.com/api/c15t/init' - Network accessline 337
'https://app.example.com/api/c15t/init' - Network accessline 365
const [url] = fetchSpy.mock.calls[0] ?? []; expect(new URL(String(url)).origin).toBe('https://app.example.com'); - Network accessline 366
expect(new URL(String(url)).origin).toBe('https://app.example.com'); - Network accessline 383
expect(request.method).toBe('POST'); expect(request.url).toBe( 'https://app.example.com/api/consent/manifest?language=de' - Network accessline 384
expect(request.url).toBe( 'https://app.example.com/api/consent/manifest?language=de' ); - Network accessline 385
'https://app.example.com/api/consent/manifest?language=de' - Network accessline 396
url: '/api/c15t/init', }); expect(request.url).toBe('https://app.example.com/api/c15t/init'); - Network accessline 397
}); expect(request.url).toBe('https://app.example.com/api/c15t/init'); expect(await request.json()).toEqual({ a: 1 }); - Network accessline 398
expect(request.url).toBe('https://app.example.com/api/c15t/init'); - Network accessline 411
); const route = createPagesConsentRoute({ backendURL: 'https://consent.example.com/api/c15t', - Network accessline 412
const route = createPagesConsentRoute({ backendURL: 'https://consent.example.com/api/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 413
backendURL: 'https://consent.example.com/api/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, }); - Network accessline 422
expect(fetchSpy).toHaveBeenCalledWith( 'https://consent.example.com/api/c15t/manifest?language=de', - Network accessline 423
'https://consent.example.com/api/c15t/manifest?language=de', - Network accessline 441
); const route = createPagesConsentRoute({ backendURL: 'https://consent.example.com/api/c15t', - Network accessline 442
const route = createPagesConsentRoute({ backendURL: 'https://consent.example.com/api/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, - Network accessline 443
backendURL: 'https://consent.example.com/api/c15t', fetch: fetchSpy as unknown as typeof globalThis.fetch, }); - Network accessline 471
); const consentConfig = defineConsentConfig({ backendURL: 'https://consent.example.com/api/c15t', - Network accessline 472
const consentConfig = defineConsentConfig({ backendURL: 'https://consent.example.com/api/c15t', routePrefix: '/api/consent', - Network accessline 473
backendURL: 'https://consent.example.com/api/c15t', - Network accessline 502
.map(([url]) => url) .filter((url) => !String(url).endsWith('/sessions')) ).toEqual(['https://consent.example.com/api/c15t/manifest']); - Network accessline 503
.filter((url) => !String(url).endsWith('/sessions')) ).toEqual(['https://consent.example.com/api/c15t/manifest']); expect(sink.res.statusCode).toBe(200); - Network accessline 504
).toEqual(['https://consent.example.com/api/c15t/manifest']); - Network accessline 514
); const options = { backendURL: 'https://consent.example.com', - Network accessline 515
const options = { backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 516
backendURL: 'https://consent.example.com', fetch: fetchSpy, reportSessions: false, - Network accessline 549
expect(JSON.parse(sink.text())).toEqual({ ok: true, subjectId: 'sub_1' }); const [url, init] = fetchSpy.mock.calls[0] ?? []; expect(String(url)).toBe('https://consent.example.com/subjects'); - Network accessline 550
const [url, init] = fetchSpy.mock.calls[0] ?? []; expect(String(url)).toBe('https://consent.example.com/subjects'); expect(init?.method).toBe('POST'); - Network accessline 551
expect(String(url)).toBe('https://consent.example.com/subjects'); - Network accessline 559
test('one catch-all API route serves manifest and init and 404s the rest', async () => { const route = createPagesConsentRoute({ backendURL: 'https://consent.example.com', - Network accessline 560
const route = createPagesConsentRoute({ backendURL: 'https://consent.example.com', reportSessions: false, - Network accessline 561
backendURL: 'https://consent.example.com', - Network accessline 619
test('adds the visitor state as a JSON-safe consent prop', async () => { const result = await withConsentProps(undefined, { backendURL: 'https://consent.example.com', - Network accessline 620
const result = await withConsentProps(undefined, { backendURL: 'https://consent.example.com', reportSessions: false, - Network accessline 621
backendURL: 'https://consent.example.com',
packages/nextjs/src/__tests__/policy-driver-evidence.test.tsx
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/policy-driver.tsx
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/policy-fixture.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/postcss-tailwind3-entry.test.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/proxy.test.ts
- Executable scriptline 1
Executable file - Network accessline 14
const request = (headers: Record<string, string> = {}) => new NextRequest('https://app.example.com/pricing', { headers }); - Network accessline 15
new NextRequest('https://app.example.com/pricing', { headers }); - Network accessline 73
test('the public manifest gets no subject cookie, and the geo headers still go through', async () => { clearManifestCache(); const url = 'https://app.example.com/api/c15t/manifest'; - Network accessline 74
clearManifestCache(); const url = 'https://app.example.com/api/c15t/manifest'; const proxied = c15tProxy( - Network accessline 75
const url = 'https://app.example.com/api/c15t/manifest'; - Network accessline 85
const { GET } = createConsentRoute({ backendURL: 'https://consent.example.com', fetch: vi.fn<typeof globalThis.fetch>().mockResolvedValue( - Network accessline 86
backendURL: 'https://consent.example.com', fetch: vi.fn<typeof globalThis.fetch>().mockResolvedValue( Response.json(MANIFEST_FIXTURE, { - Network accessline 109
const proxyFor = (path: string) => { const page = new NextRequest(`https://app.example.com${path}`, { - Network accessline 110
const page = new NextRequest(`https://app.example.com${path}`, { - Network accessline 144
test('a page whose path only starts like the route still gets one', () => { const response = c15tProxy( new NextRequest('https://app.example.com/api/c15t-docs') - Network accessline 145
const response = c15tProxy( new NextRequest('https://app.example.com/api/c15t-docs') ); - Network accessline 146
new NextRequest('https://app.example.com/api/c15t-docs') - Network accessline 154
try { const routed = c15tProxy( new NextRequest('https://app.example.com/api/consent/manifest', { - Network accessline 155
const routed = c15tProxy( new NextRequest('https://app.example.com/api/consent/manifest', { headers: { 'cf-ipcountry': 'DE' }, - Network accessline 156
new NextRequest('https://app.example.com/api/consent/manifest', { - Network accessline 164
for (const path of ['/api/consent-docs', '/api/c15t/page']) { const page = c15tProxy( new NextRequest(`https://app.example.com${path}`) - Network accessline 165
const page = c15tProxy( new NextRequest(`https://app.example.com${path}`) ); - Network accessline 166
new NextRequest(`https://app.example.com${path}`)
packages/nextjs/src/__tests__/react-server-entry.test.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/request-context.test.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/resolve-consent.test.ts
- Executable scriptline 1
Executable file - Network accessline 82
const state = await resolveConsent({ config: defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 83
config: defineConsentConfig({ backendURL: 'https://consent.example.com', routePrefix: '/api/consent', - Network accessline 84
backendURL: 'https://consent.example.com', - Network accessline 90
}); expect(fetch.mock.calls.map(([input]) => String(input))).toEqual([ 'https://consent.example.com/manifest', - Network accessline 91
expect(fetch.mock.calls.map(([input]) => String(input))).toEqual([ 'https://consent.example.com/manifest', ]); - Network accessline 92
'https://consent.example.com/manifest', ]); expect(fetch.mock.calls[0]?.[1]).toMatchObject({ - Network accessline 104
const tab = backend(); const started = await resolveConsent({ config: hostedAt('https://consent.example.com', { journey: 'tab' }), - Network accessline 105
const started = await resolveConsent({ config: hostedAt('https://consent.example.com', { journey: 'tab' }), fetch: tab, - Network accessline 106
config: hostedAt('https://consent.example.com', { journey: 'tab' }), fetch: tab, request: requestOf({}), - Network accessline 115
for (const options of [ { config: hostedAt('https://consent.example.com', { journey: false }) }, - Network accessline 116
{ config: hostedAt('https://consent.example.com', { journey: false }) }, - Network accessline 117
{ config: hostedAt('https://consent.example.com'), reportSessions: false, - Network accessline 118
config: hostedAt('https://consent.example.com'), - Network accessline 130
expect(state.journey).toBeNull(); expect(String(off.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/init' - Network accessline 131
expect(String(off.mock.calls[0]?.[0])).toBe( 'https://consent.example.com/init' ); - Network accessline 132
'https://consent.example.com/init' - Network accessline 139
await resolveConsent({ config: defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 140
config: defineConsentConfig({ backendURL: 'https://consent.example.com', proxy: true, - Network accessline 141
backendURL: 'https://consent.example.com', - Network accessline 148
}); expect(manifestFetch.mock.calls.map(([input]) => String(input))).toEqual([ 'https://consent.example.com/manifest', - Network accessline 149
expect(manifestFetch.mock.calls.map(([input]) => String(input))).toEqual([ 'https://consent.example.com/manifest', ]); - Network accessline 150
'https://consent.example.com/manifest', - Network accessline 153
const initFetch = backend(); await resolveConsent({ config: hostedAt('https://consent.example.com', { - Network accessline 154
await resolveConsent({ config: hostedAt('https://consent.example.com', { proxy: true, - Network accessline 155
config: hostedAt('https://consent.example.com', { - Network accessline 161
}); expect(String(initFetch.mock.calls[0]?.[0]).split('?')[0]).toBe( 'https://consent.example.com/init' - Network accessline 162
expect(String(initFetch.mock.calls[0]?.[0]).split('?')[0]).toBe( 'https://consent.example.com/init' ); - Network accessline 163
'https://consent.example.com/init' - Network accessline 168
const fetch = backend(); const state = await resolveConsent({ config: hostedAt('https://consent.example.com'), - Network accessline 169
const state = await resolveConsent({ config: hostedAt('https://consent.example.com'), country: 'FR', - Network accessline 170
config: hostedAt('https://consent.example.com'), country: 'FR', fetch, - Network accessline 176
expect(String(fetch.mock.calls[0]?.[0]).split('?')[0]).toBe( 'https://consent.example.com/init' - Network accessline 177
'https://consent.example.com/init' ); expect(fetch.mock.calls[0]?.[1]?.cache).toBe('no-store'); - Network accessline 196
expect( fetch.mock.calls.map(([input]) => String(input).split('?')[0]) ).toEqual(['https://app.example.com/api/c15t/init']); - Network accessline 197
fetch.mock.calls.map(([input]) => String(input).split('?')[0]) ).toEqual(['https://app.example.com/api/c15t/init']); const headers = new Headers(fetch.mock.calls[0]?.[1]?.headers); - Network accessline 198
).toEqual(['https://app.example.com/api/c15t/init']); const headers = new Headers(fetch.mock.calls[0]?.[1]?.headers); expect(headers.get('x-c15t-country')).toBe('DE'); - Network accessline 222
expect(nested.initialPolicyResolution).toBeUndefined(); expect(String(warn.mock.calls[0]?.[0])).toContain( 'https://app.example.com/api/c15t/init' - Network accessline 223
expect(String(warn.mock.calls[0]?.[0])).toContain( 'https://app.example.com/api/c15t/init' ); - Network accessline 224
'https://app.example.com/api/c15t/init' - Network accessline 241
expect(state.initialPolicyResolution).toBeUndefined(); expect(String(warn.mock.calls[0]?.[0])).toContain( 'https://app.example.com/api/c15t/manifest' - Network accessline 242
expect(String(warn.mock.calls[0]?.[0])).toContain( 'https://app.example.com/api/c15t/manifest' ); - Network accessline 243
'https://app.example.com/api/c15t/manifest' - Network accessline 246
const resolved = await resolveConsent({ backendURL: 'https://consent.example.com', - Network accessline 247
backendURL: 'https://consent.example.com', config, fetch, - Network accessline 252
}); expect(fetch.mock.calls.map(([input]) => String(input))).toEqual([ 'https://consent.example.com/manifest', - Network accessline 253
expect(fetch.mock.calls.map(([input]) => String(input))).toEqual([ 'https://consent.example.com/manifest', ]); - Network accessline 254
'https://consent.example.com/manifest', - Network accessline 260
await expect( resolveConsent({ backendURL: 'https://consent.example.com', - Network accessline 261
resolveConsent({ backendURL: 'https://consent.example.com', config: { routePrefix: '/' }, - Network accessline 262
backendURL: 'https://consent.example.com', - Network accessline 272
await expect( resolveConsent({ backendURL: 'https://consent.example.com', - Network accessline 273
resolveConsent({ backendURL: 'https://consent.example.com', config: { routePrefix: 'api/c15t' }, - Network accessline 274
backendURL: 'https://consent.example.com', - Network accessline 288
const onError = vi.fn(); await resolveConsent({ config: hostedAt('https://consent.example.com'), - Network accessline 289
await resolveConsent({ config: hostedAt('https://consent.example.com'), fetch: failing, - Network accessline 290
config: hostedAt('https://consent.example.com'), fetch: failing, onError, - Network accessline 297
vi.stubGlobal('process', { env: { NODE_ENV: 'production' } }); await resolveConsent({ config: hostedAt('https://consent.example.com'), - Network accessline 298
await resolveConsent({ config: hostedAt('https://consent.example.com'), fetch: failing, - Network accessline 299
config: hostedAt('https://consent.example.com'), fetch: failing, request: requestOf({}), - Network accessline 314
const fetch = backend(); const state = await resolveConsent({ config: hostedAt('https://consent.example.com'), - Network accessline 315
const state = await resolveConsent({ config: hostedAt('https://consent.example.com'), experiment, - Network accessline 316
config: hostedAt('https://consent.example.com'), experiment, fetch,
packages/nextjs/src/__tests__/root-missing-config.test.tsx
- Executable scriptline 1
Executable file - Network accessline 31
test('stays quiet with a config prop', async () => { const warn = vi.spyOn(console, 'warn').mockImplementation(() => undefined); await renderRoot({ config: { backendURL: 'https://consent.example.com' } }); - Network accessline 33
await renderRoot({ config: { backendURL: 'https://consent.example.com' } }); - Network accessline 40
vi.stubGlobal('process', { env: { NEXT_PUBLIC_C15T_BACKEND_URL: 'https://consent.example.com', - Network accessline 41
env: { NEXT_PUBLIC_C15T_BACKEND_URL: 'https://consent.example.com', NODE_ENV: 'development', - Network accessline 42
NEXT_PUBLIC_C15T_BACKEND_URL: 'https://consent.example.com',
packages/nextjs/src/__tests__/root-modules.test.tsx
- Executable scriptline 1
Executable file - Network accessline 28
category: 'marketing', id: 'test-script', src: 'https://example.com/test.js', - Network accessline 29
id: 'test-script', src: 'https://example.com/test.js', }, - Network accessline 30
src: 'https://example.com/test.js', - Network accessline 42
() => { const scripts = document.head.querySelectorAll( 'script[src="https://example.com/test.js"]' - Network accessline 43
const scripts = document.head.querySelectorAll( 'script[src="https://example.com/test.js"]' ); - Network accessline 44
'script[src="https://example.com/test.js"]' - Network accessline 104
id: 'meta-pixel', name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 105
name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', }, - Network accessline 106
privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/',
packages/nextjs/src/__tests__/root-offline-mode.test.tsx
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/root-script-loader-preload-always-load.test.tsx
packages/nextjs/src/__tests__/root-script-loader-preload-consent-source.test.tsx
packages/nextjs/src/__tests__/root-script-loader-preload-disabled.test.tsx
packages/nextjs/src/__tests__/root-script-loader-preload-side-effects.test.tsx
packages/nextjs/src/__tests__/root-script-loader-preload.test.tsx
- Executable scriptline 1
Executable file - Network accessline 44
category: 'marketing', id: 'pixel', src: 'https://example.com/pixel.js', - Network accessline 45
id: 'pixel', src: 'https://example.com/pixel.js', }; - Network accessline 46
src: 'https://example.com/pixel.js', - Network accessline 143
id: 'pixel-co', name: 'Pixel Co', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 144
name: 'Pixel Co', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 145
privacyPolicyUrl: 'https://example.com/privacy', - Access to secretsline 178
[Credential-related source omitted]
packages/nextjs/src/__tests__/root-server-start.test.tsx
- Executable scriptline 1
Executable file - Network accessline 22
id: 'pixel', serverStart: () => ({ code: '' }), src: 'https://cdn.example.com/pixel.js', - Network accessline 23
serverStart: () => ({ code: '' }), src: 'https://cdn.example.com/pixel.js', }; - Network accessline 24
src: 'https://cdn.example.com/pixel.js',
packages/nextjs/src/__tests__/root-streamed-resolver.test.tsx
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/root-update-chunk.test.tsx
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/root-user-config-options.test.tsx
- Executable scriptline 1
Executable file - Network accessline 21
vi.mock('@c15t/nextjs/user-config', () => ({ default: { backendURL: 'https://consent.example.com', - Network accessline 22
default: { backendURL: 'https://consent.example.com', options: { - Network accessline 23
backendURL: 'https://consent.example.com',
packages/nextjs/src/__tests__/root-user-config.test.tsx
- Executable scriptline 1
Executable file - Network accessline 15
vi.mock('@c15t/nextjs/user-config', () => ({ default: { backendURL: 'https://consent.example.com', - Network accessline 16
default: { backendURL: 'https://consent.example.com', routePrefix: '/api/consent', - Network accessline 17
backendURL: 'https://consent.example.com', - Network accessline 21
category: 'marketing', id: 'config-script', src: 'https://example.com/from-config.js', - Network accessline 22
id: 'config-script', src: 'https://example.com/from-config.js', }, - Network accessline 23
src: 'https://example.com/from-config.js', - Network accessline 50
await expect.element(screen.getByText('config root')).toBeInTheDocument(); await vi.waitFor(() => expect(scriptCount('https://example.com/from-config.js')).toBe(1) - Network accessline 51
await vi.waitFor(() => expect(scriptCount('https://example.com/from-config.js')).toBe(1) ); - Network accessline 52
expect(scriptCount('https://example.com/from-config.js')).toBe(1) - Network accessline 63
category: 'marketing', id: 'prop-script', src: 'https://example.com/from-props.js', - Network accessline 64
id: 'prop-script', src: 'https://example.com/from-props.js', }, - Network accessline 65
src: 'https://example.com/from-props.js', - Network accessline 73
await expect.element(screen.getByText('prop root')).toBeInTheDocument(); await vi.waitFor(() => expect(scriptCount('https://example.com/from-props.js')).toBe(1) - Network accessline 74
await vi.waitFor(() => expect(scriptCount('https://example.com/from-props.js')).toBe(1) ); - Network accessline 75
expect(scriptCount('https://example.com/from-props.js')).toBe(1) - Network accessline 76
); expect(scriptCount('https://example.com/from-config.js')).toBe(0); }); - Network accessline 77
expect(scriptCount('https://example.com/from-config.js')).toBe(0); - Network accessline 124
expect( fetch.mock.calls.map(([input]) => String(input).split('?')[0]) ).toEqual(['/api/consent/init', 'https://consent.example.com/subjects']) - Network accessline 125
fetch.mock.calls.map(([input]) => String(input).split('?')[0]) ).toEqual(['/api/consent/init', 'https://consent.example.com/subjects']) ); - Network accessline 126
).toEqual(['/api/consent/init', 'https://consent.example.com/subjects'])
packages/nextjs/src/__tests__/root.test.tsx
- Executable scriptline 1
Executable file
packages/nextjs/src/__tests__/server.test.ts
- Executable scriptline 1
Executable file - Network accessline 260
baseResolveConsent({ config: defineConsentConfig({ backendURL: 'https://consent.example.com', - Network accessline 261
config: defineConsentConfig({ backendURL: 'https://consent.example.com', mode: hosted(), - Network accessline 262
backendURL: 'https://consent.example.com', - Network accessline 300
const state = await resolveConsent({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 301
backendURL: 'https://consent.example.com', fetch: fetchSpy, snapshot: MANIFEST_FIXTURE, - Network accessline 315
expect(fetchSpy).toHaveBeenCalledTimes(1); const [url, init] = fetchSpy.mock.calls[0] as [string, RequestInit]; expect(url).toBe('https://consent.example.com/sessions'); - Network accessline 316
const [url, init] = fetchSpy.mock.calls[0] as [string, RequestInit]; expect(url).toBe('https://consent.example.com/sessions'); const headers = init.headers as Record<string, string>; - Network accessline 317
expect(url).toBe('https://consent.example.com/sessions'); - Network accessline 334
headerStore.set('x-vercel-ip-country', 'DE'); await resolveConsent({ backendURL: 'https://consent.example.com', - Network accessline 335
await resolveConsent({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 336
backendURL: 'https://consent.example.com', fetch: fetchSpy, snapshot: MANIFEST_FIXTURE, - Network accessline 344
const fetchSpy = vi.fn(); await resolveConsent({ backendURL: 'https://consent.example.com', - Network accessline 345
await resolveConsent({ backendURL: 'https://consent.example.com', fetch: fetchSpy, - Network accessline 346
backendURL: 'https://consent.example.com', fetch: fetchSpy, reportSessions: false,
packages/nextjs/src/__tests__/ssr-policy.test.tsx
- Executable scriptline 1
Executable file - Network accessline 159
); const config = await resolveConsent({ config: { backendURL: 'https://consent.example.com', mode: hosted() }, - Network accessline 160
const config = await resolveConsent({ config: { backendURL: 'https://consent.example.com', mode: hosted() }, cookieName: storageKey, - Network accessline 161
config: { backendURL: 'https://consent.example.com', mode: hosted() }, cookieName: storageKey, fetch,
packages/nextjs/src/__tests__/static.test.ts
- Executable scriptline 1
Executable file - Network accessline 48
const resolution = createStaticConsentResolver({ fetch: fetchSpy as unknown as typeof globalThis.fetch, geoURL: 'https://geo.example.com/context', - Network accessline 49
fetch: fetchSpy as unknown as typeof globalThis.fetch, geoURL: 'https://geo.example.com/context', language: 'en', - Network accessline 50
geoURL: 'https://geo.example.com/context', - Network accessline 71
const resolver = createStaticConsentResolver({ fetch: vi.fn().mockRejectedValue(new Error('offline')), geoURL: 'https://example.com/geo', - Network accessline 72
fetch: vi.fn().mockRejectedValue(new Error('offline')), geoURL: 'https://example.com/geo', manifest, - Network accessline 73
geoURL: 'https://example.com/geo', - Network accessline 96
exportName: 'testManifest', fetch: fetchSpy as unknown as typeof globalThis.fetch, manifestURL: 'https://consent.example.com/manifest', - Network accessline 97
fetch: fetchSpy as unknown as typeof globalThis.fetch, manifestURL: 'https://consent.example.com/manifest', }); - Network accessline 98
manifestURL: 'https://consent.example.com/manifest', - Network accessline 115
exportName, fetch, manifestURL: 'https://api.test/manifest', - Network accessline 116
fetch, manifestURL: 'https://api.test/manifest', }) - Network accessline 117
manifestURL: 'https://api.test/manifest', - Network accessline 127
.mockResolvedValue(Response.json(MANIFEST_FIXTURE)), importSource: 'c15t/next/static', manifestURL: 'https://api.test/manifest', - Network accessline 128
importSource: 'c15t/next/static', manifestURL: 'https://api.test/manifest', }); - Network accessline 129
manifestURL: 'https://api.test/manifest',
packages/nextjs/src/api.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/build.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/client-components.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/client-mode.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/components/consent-dialog-link.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/config.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/consent-source.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/devtools.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/generated-manifest-module.d.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/generated-manifest.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/headless.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/index.react-server.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/index.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/middleware.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/node-bridge.ts
- Executable scriptline 1
Executable file - Network accessline 115
const origin = resolveRequestOrigin({ headers: req.headers, trustForwardedHeaders }) ?? 'http://localhost'; - Network accessline 116
resolveRequestOrigin({ headers: req.headers, trustForwardedHeaders }) ?? 'http://localhost'; const url = new URL(req.url ?? '/', origin); - Network accessline 117
'http://localhost';
packages/nextjs/src/pages.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/postcss-tailwind3.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/proxy.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/root.tsx
- Executable scriptline 1
Executable file
packages/nextjs/src/server.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/static.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/types.ts
- Executable scriptline 1
Executable file
packages/nextjs/src/user-config.ts
- Executable scriptline 1
Executable file
packages/nextjs/vitest.config.ts
- Executable scriptline 1
Executable file
packages/react/AGENTS.md
- Network accessline 22
[Documentation index](https://c15t.com/docs/llms.txt) · [Full Markdown context](https://c15t.com/llms-full.txt). Prefer the index and individual pages for focused tasks.
packages/react/CHANGELOG.md
- Network accessline 349
self-hosted backend records it in a new `consent.addtlConsent` column. Run the backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 350
backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. The backend keeps serving the last list it loaded when that endpoint fails. - Network accessline 351
`https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 413
self-hosted backend records it in a new `consent.addtlConsent` column. Run the backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 414
backend migrations to add the column. Provider names and policy links load from `https://gvl.inth.app/additional-consent` unless an endpoint is configured. The backend keeps serving the last list it loaded when that endpoint fails. - Network accessline 415
`https://gvl.inth.app/additional-consent` unless an endpoint is configured. - Network accessline 426
c15t v3 is stable and published under the `latest` tag. See the [3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 427
[3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 1325
See [keep open tabs in step](https://c15t.com/docs/guides/consent-state#keep-open-tabs-in-step). - Network accessline 1665
- 184b491: Read the [c15t 2.3.0 changelog](https://c15t.com/changelog/2.3.0) for the complete release notes and upgrade context. - Network accessline 1704
Fix `www` handling in CORS origin matching. `*.example.com` now accepts `https://www.example.com`, and a schemeless `www.example.com` entry accepts both the apex and `www` forms. - Network accessline 1718
- Read the [c15t 2.2.0 changelog](https://c15t.com/changelog/2.2.0) for the complete release notes and upgrade context. - Network accessline 1845
- 32617c9: Changelog available at https://c15t.com/changelog/2.0.0 - Network accessline 2133
- 126a78b: https://c15t.com/changelog/2.0.0-rc.0 - Network accessline 2145
- 6c28663: Full Changelog: https://c15t.com/changelog/1.8.3 - Network accessline 2181
https://c15t.com/changelog/1.8.2 - Network accessline 2225
- 68a7324: Full Changelog: https://c15t.com/changelog/1.8.0 - Network accessline 2271
- aa16d03: You can find the full changelog at https://c15t.com/changelog/1.7.0 - Network accessline 2309
- 84ab0c7: For a full detailed changelog see the [v1.6.0 release notes](https://c15t.com/changelog/1.6.0).
packages/react/README.md
- Network accessline 1
<p align="center"> <a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Freact" target="_blank" rel="noopener noreferrer"> - Network accessline 2
<a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Freact" target="_blank" rel="noopener noreferrer"> - Network accessline 12
<p> <a href="https://www.npmjs.com/package/@c15t/react"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/%40c15t%2Freact.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/%40c15t%2Freact - Network accessline 13
<a href="https://www.npmjs.com/package/@c15t/react"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/%40c15t%2Freact.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/%40c15t%2Freact.svg - Network accessline 14
<a href="https://github.com/c15t/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/stars.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15t/c15t/stars.svg?varian - Network accessline 15
<a href="https://github.com/c15t/c15t/blob/main/LICENSE.md"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/license.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15 - Network accessline 16
<a href="https://c15t.link/discord"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/discord/1312171102268690493.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/discord/1312171102268690493.svg - Network accessline 17
<a href="https://skills.sh/c15t/skills/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/skills/c15t/skills/c15t.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/skills/c15t/skills/c15t.sv - Network accessline 18
<a href="https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Freact"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/badge/Made%20By-Inth-ffc803.svg?color=ffc803& - Network accessline 23
c15t is used by [2,100+ sites](https://www.wappalyzer.com/technologies/cookie-compliance/c15t/), including expo.dev, zed.dev, unkey.dev, mintlify.com, and sazabi.com. - Network accessline 36
- React 18 or 19 - Node.js 20.19 or later - An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend - Network accessline 38
- An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend - Network accessline 55
Using several c15t packages? Install [`c15t`](https://www.npmjs.com/package/c15t) and import `c15t/react` instead. It is the same code. - Network accessline 73
const mode = hosted({ backendURL: 'https://your-project.inth.app' }) - Network accessline 85
3. For the full setup, see the [React quickstart](https://c15t.com/docs/frameworks/react/quickstart) - Network accessline 89
c15t needs a backend to serve policies and keep consent records. [Inth](https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Freact) runs it for you. It stores every choice with its region and polic - Network accessline 97
See the [documentation](https://c15t.com/docs/frameworks/react/quickstart) for guides, API reference, and examples. - Network accessline 103
On the web, every page of the [c15t docs](https://c15t.com/docs) has a Markdown version, and [llms.txt](https://c15t.com/docs/llms.txt) lists them all. Install the c15t agent skills with `npx skills add c15t/skills`. - Network accessline 107
- Join our [Discord community](https://c15t.link/discord) - Network accessline 108
- Open an issue on our [GitHub repository](https://github.com/c15t/c15t/issues) - Network accessline 109
- Visit [inth.com](https://inth.com) and use the chat widget - Network accessline 114
- Read the [contribution guidelines](https://c15t.com/docs/oss/contributing) before you open a pull request - Network accessline 115
- Follow the [code of conduct](https://c15t.com/docs/oss/code-of-conduct) - Network accessline 119
Do not open a public issue for a security vulnerability. Report it privately through [GitHub's vulnerability reporting](https://github.com/c15t/c15t/security/advisories/new). We examine every valid report. - Network accessline 127
[Apache License 2.0](https://github.com/c15t/c15t/blob/main/LICENSE.md) - Network accessline 131
**Built by [Inth](https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Freact)**
packages/react/docs/integrations/cloudflare-zaraz.md
- Network accessline 40
after the first synchronization. DOM-ready, timer and click triggers you add in Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 41
Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) and [pageview settings](https://developers.cloudflare.com/zaraz/reference/setti - Network accessline 42
[purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 43
and [pageview settings](https://developers.cloudflare.com/zaraz/reference/settings/). - Network accessline 73
for tools that Zaraz already runs, including a separate `@c15t/integrations` helper for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) - Network accessline 74
for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) once. - Network accessline 75
[Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) - Network accessline 80
Complete your [framework quickstart](https://c15t.com/docs/frameworks) first. Keep its Inth - Network accessline 106
keeps passing only `state`. App Router, Pages Router and static export all read the same file. See [Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts). - Network accessline 108
[Next.js scripts and embeds](https://c15t.com/docs/frameworks/next/scripts). - Network accessline 112
Import the configuration into your root route and pass it to the existing `ConsentRoot` as a top-level prop. Keep the loader from the [TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 114
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 123
A server function's return value must be serializable, and script configurations carry callbacks. See [TanStack Start scripts](https://c15t.com/docs/frameworks/tanstack-start/scripts). - Network accessline 125
[TanStack Start scripts](https://c15t.com/docs/frameworks/tanstack-start/scripts). - Network accessline 159
`nuxt.config.ts`, which reaches the browser as JSON and drops the vendor callbacks. Write the vendor IDs into `consent-scripts.ts`. See [Nuxt scripts and embeds](https://c15t.com/docs/frameworks/nuxt/scripts). - Network accessline 161
[Nuxt scripts and embeds](https://c15t.com/docs/frameworks/nuxt/scripts). - Network accessline 178
script loader when the app mounts, after it has applied the visitor's stored choice. Do not also call `createScriptLoader` from a component. See [Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts). - Network accessline 180
[Vue scripts and embeds](https://c15t.com/docs/frameworks/vue/scripts). - Network accessline 184
Add the scripts to the client entrypoint from the [Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 185
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 218
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart). - Network accessline 223
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 224
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 258
once that category is allowed, and reloads the page when the visitor withdraws it. Helper options on this page, such as `loadMode`, do not apply to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/scripts). - Network accessline 260
to a pasted snippet. See [HTML scripts](https://c15t.com/docs/frameworks/html/scripts). - Network accessline 278
A kernel you create yourself needs a loader from `c15t/modules/script-loader`. Attach one loader per kernel. See [JavaScript scripts](https://c15t.com/docs/frameworks/javascript/scripts). - Network accessline 280
[JavaScript scripts](https://c15t.com/docs/frameworks/javascript/scripts).
packages/react/knip.json
packages/react/package.json
- Executable scriptline 1
Executable file - Network accessline 16
"react-cookie-consent" ], "homepage": "https://c15t.com/docs/frameworks/react/quickstart", - Network accessline 17
], "homepage": "https://c15t.com/docs/frameworks/react/quickstart", "bugs": { - Network accessline 18
"homepage": "https://c15t.com/docs/frameworks/react/quickstart", - Network accessline 19
"bugs": { "url": "https://github.com/c15t/c15t/issues" }, - Network accessline 20
"url": "https://github.com/c15t/c15t/issues" - Network accessline 23
"repository": { "type": "git", "url": "https://github.com/c15t/c15t.git", - Network accessline 24
"type": "git", "url": "https://github.com/c15t/c15t.git", "directory": "packages/react" - Network accessline 25
"url": "https://github.com/c15t/c15t.git",
packages/react/public/mockServiceWorker.js
- Executable scriptline 1
Executable file - Network accessline 4
/** * Mock Service Worker. * @see https://github.com/mswjs/msw - Network accessline 5
* Mock Service Worker. * @see https://github.com/mswjs/msw * - Please do NOT modify this file. - Network accessline 6
* @see https://github.com/mswjs/msw - Network accessline 238
return fetch(requestClone, { headers });
packages/react/readme.json
- Network accessline 13
"React 18 or 19", "Node.js 20.19 or later", "An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" - Network accessline 14
"Node.js 20.19 or later", "An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" ], - Network accessline 15
"An [Inth project](https://inth.com) (free sign-up). For development and tests, local mode needs no backend" - Network accessline 25
"If you use the prebuilt IAB TCF UI, also import `@c15t/react/iab/styles.css`. It is published separately so apps without IAB do not ship those styles.", "", "Using several c15t packages? Install [`c15t`](https://www.npmjs.com/package/c - Network accessline 26
"", "Using several c15t packages? Install [`c15t`](https://www.npmjs.com/package/c15t) and import `c15t/react` instead. It is the same code." ], - Network accessline 27
"Using several c15t packages? Install [`c15t`](https://www.npmjs.com/package/c15t) and import `c15t/react` instead. It is the same code." - Network accessline 30
"Wrap your app in `ConsentProvider` with the backend URL from your Inth project", "Render `ConsentBanner`, `ConsentDialog` and `ConsentDialogLink` inside the provider, and mount it once for the life of the app", "```tsx\n// src/consent. - Network accessline 31
"Render `ConsentBanner`, `ConsentDialog` and `ConsentDialogLink` inside the provider, and mount it once for the life of the app", "```tsx\n// src/consent.tsx\nimport {\n ConsentBanner,\n ConsentDialog,\n ConsentDialogLink,\n ConsentPr - Network accessline 32
"```tsx\n// src/consent.tsx\nimport {\n ConsentBanner,\n ConsentDialog,\n ConsentDialogLink,\n ConsentProvider,\n hosted,\n} from '@c15t/react'\nimport type { ReactNode } from 'react'\n\nconst mode = hosted({ backendURL: 'https://your- - Network accessline 33
"For the full setup, see the [React quickstart](https://c15t.com/docs/frameworks/react/quickstart)" - Network accessline 34
], "docsLink": "https://c15t.com/docs/frameworks/react/quickstart", "quickStartLink": "https://c15t.com/docs/frameworks/react/quickstart", - Network accessline 35
"docsLink": "https://c15t.com/docs/frameworks/react/quickstart", - Network accessline 36
"quickStartLink": "https://c15t.com/docs/frameworks/react/quickstart",
packages/react/rslib.config.ts
- Executable scriptline 1
Executable file
packages/react/scripts/generate-distribution-css.ts
- Executable scriptline 1
Executable file
packages/react/src/__tests__/aggregate-dialog.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/astro-iab-loader.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/branding-logo-module.test.ts
- Executable scriptline 1
Executable file
packages/react/src/__tests__/category-discovery.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/clear-on-revocation-remount.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/clear-on-revocation.test.tsx
packages/react/src/__tests__/client-policy-imports.test.ts
- Executable scriptline 1
Executable file
packages/react/src/__tests__/component-fixture-provider.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/conformance.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/consent-markup.ts
- Executable scriptline 1
Executable file
packages/react/src/__tests__/consent-state-fixture.ts
- Executable scriptline 1
Executable file
packages/react/src/__tests__/core-exports.type-test.ts
- Executable scriptline 1
Executable file
packages/react/src/__tests__/devtools.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/dialog-scroll.test.tsx
- Executable scriptline 1
Executable file - Network accessline 21
id: `vendor-${index}`, name: `Vendor ${index}`, privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 22
name: `Vendor ${index}`, privacyPolicyUrl: 'https://example.com/privacy', })); - Network accessline 23
privacyPolicyUrl: 'https://example.com/privacy',
packages/react/src/__tests__/dialog-stylesheet.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/draft.test.tsx
- Executable scriptline 1
Executable file - Network accessline 125
id: 'meta-pixel', name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 126
name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', }; - Network accessline 127
privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/',
packages/react/src/__tests__/event-dispatcher.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/experiment.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/external-iab-actions.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/external-runtime-draft.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/external-runtime-provider.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/external-runtime-remount.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/external-source.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/framework-conformance.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/framework-policy-driver.tsx
- Executable scriptline 1
Executable file - Network accessline 468
mode: custom({ init: () => { requests.push({ kind: 'init', payload: null }); - Network accessline 469
init: () => { requests.push({ kind: 'init', payload: null }); return failTransport - Network accessline 470
requests.push({ kind: 'init', payload: null }); - Network accessline 474
}, save: (payload) => { requests.push({ kind: 'consent', payload }); - Network accessline 475
save: (payload) => { requests.push({ kind: 'consent', payload }); return Promise.resolve({ - Network accessline 476
requests.push({ kind: 'consent', payload }); - Network accessline 807
if (setup.probeGates) { networkAttempts += 1; await window.fetch('https://c15t-policy-probe.invalid/collect'); - Network accessline 808
networkAttempts += 1; await window.fetch('https://c15t-policy-probe.invalid/collect'); } - Network accessline 809
await window.fetch('https://c15t-policy-probe.invalid/collect');
packages/react/src/__tests__/framework-root.ts
- Executable scriptline 1
Executable file
packages/react/src/__tests__/gpp.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/hooks.test.tsx
- Executable scriptline 1
Executable file - Network accessline 414
}); expect(window.fetch).toBe(fetch.fetchStub); expect((await window.fetch('https://example.com/x')).status).toBe(200); - Network accessline 415
expect(window.fetch).toBe(fetch.fetchStub); expect((await window.fetch('https://example.com/x')).status).toBe(200); expect(fetch.fetchStub).toHaveBeenCalledOnce(); - Network accessline 416
expect((await window.fetch('https://example.com/x')).status).toBe(200); - Network accessline 443
expect(window.fetch).not.toBe(fetch.fetchStub); }); expect((await window.fetch('https://first.example.com/x')).status).toBe( - Network accessline 444
}); expect((await window.fetch('https://first.example.com/x')).status).toBe( 451 - Network accessline 445
expect((await window.fetch('https://first.example.com/x')).status).toBe( - Network accessline 446
451 ); expect((await window.fetch('https://second.example.com/x')).status).toBe( - Network accessline 447
); expect((await window.fetch('https://second.example.com/x')).status).toBe( 200 - Network accessline 448
expect((await window.fetch('https://second.example.com/x')).status).toBe( - Network accessline 469
const late = window.fetch('https://second.example.com/x'); - Network accessline 470
expect((await late).status).toBe(451); expect((await window.fetch('https://first.example.com/x')).status).toBe( 200 - Network accessline 471
expect((await window.fetch('https://first.example.com/x')).status).toBe( - Network accessline 499
expect((await window.fetch('https://example.com/x')).status).toBe(200);
packages/react/src/__tests__/iab-dialog-deferred.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/iab-dialog-warming.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/iab-policy-guard-provider.test.tsx
packages/react/src/__tests__/iab-policy-guard.test.tsx
- Executable scriptline 1
Executable file - Network accessline 80
Promise.resolve( gvl === 'reference' ? deferInitGvl(body as never, 'https://consent.example.com/gvl') - Network accessline 81
gvl === 'reference' ? deferInitGvl(body as never, 'https://consent.example.com/gvl') : body - Network accessline 82
? deferInitGvl(body as never, 'https://consent.example.com/gvl')
packages/react/src/__tests__/iab-presentation.test.tsx
- Executable scriptline 1
Executable file - Network accessline 192
id: 'publisher', name: 'Publisher', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 193
name: 'Publisher', privacyPolicyUrl: 'https://example.com/privacy', purposes: [1], - Network accessline 194
privacyPolicyUrl: 'https://example.com/privacy',
packages/react/src/__tests__/iab-provider-kernel-switch.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/idle-dialog-warming.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/iframe-blocker-on-demand.test.tsx
packages/react/src/__tests__/module-requests.ts
- Executable scriptline 1
Executable file
packages/react/src/__tests__/network-blocker-early.test.tsx
- Executable scriptline 1
Executable file - Network accessline 11
const TRACKER = 'https://tracker.example/collect'; - Network accessline 37
useEffect(() => { statuses.push( window.fetch(`${TRACKER}?when=${label}`).then(({ status }) => status) - Network accessline 38
statuses.push( window.fetch(`${TRACKER}?when=${label}`).then(({ status }) => status) ); - Network accessline 39
window.fetch(`${TRACKER}?when=${label}`).then(({ status }) => status)
packages/react/src/__tests__/network-blocker-unmount.test.tsx
- Executable scriptline 1
Executable file - Network accessline 42
const TRACKER = 'https://tracker.example/collect'; - Network accessline 61
const Beacon = ({ requests }: { requests: Promise<Response>[] }) => { useEffect(() => { requests.push(window.fetch(TRACKER)); - Network accessline 62
useEffect(() => { requests.push(window.fetch(TRACKER)); }, [requests]); - Network accessline 63
requests.push(window.fetch(TRACKER)); - Network accessline 75
holdNetworkRequests([{ category: 'marketing', domain: 'ads.example' }]); let adsSettled = false; const ads = window.fetch('https://ads.example/pixel').finally(() => { - Network accessline 76
let adsSettled = false; const ads = window.fetch('https://ads.example/pixel').finally(() => { adsSettled = true; - Network accessline 77
const ads = window.fetch('https://ads.example/pixel').finally(() => {
packages/react/src/__tests__/pending-save.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/policy-driver-smoke.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/policy-driver.tsx
- Executable scriptline 1
Executable file - Network accessline 421
mode: custom({ init: () => { requests.push({ kind: 'init', payload: null }); - Network accessline 422
init: () => { requests.push({ kind: 'init', payload: null }); return failTransport - Network accessline 423
requests.push({ kind: 'init', payload: null }); - Network accessline 427
}, save: (payload) => { requests.push({ kind: 'consent', payload }); - Network accessline 428
save: (payload) => { requests.push({ kind: 'consent', payload }); return Promise.resolve({ - Network accessline 429
requests.push({ kind: 'consent', payload }); - Network accessline 745
if (setup.probeGates) { networkAttempts += 1; await window.fetch('https://c15t-policy-probe.invalid/collect'); - Network accessline 746
networkAttempts += 1; await window.fetch('https://c15t-policy-probe.invalid/collect'); } - Network accessline 747
await window.fetch('https://c15t-policy-probe.invalid/collect');
packages/react/src/__tests__/policy-fixture.ts
- Executable scriptline 1
Executable file
packages/react/src/__tests__/policy-presentation.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/postcss-tailwind3-entry.test.ts
- Executable scriptline 1
Executable file
packages/react/src/__tests__/provider-early-init-registered.test.tsx
packages/react/src/__tests__/provider-early-init.test.tsx
- Executable scriptline 1
Executable file - Network accessline 34
const BACKEND = 'https://consent.example/api/c15t'; - Network accessline 65
(url: string, init: RequestInit & { headers: Record<string, string> }) => new Promise<Response>((resolve, reject) => { requests.push({ - Network accessline 66
new Promise<Response>((resolve, reject) => { requests.push({ country: new URL(url, window.location.href).searchParams.get( - Network accessline 67
requests.push({ - Network accessline 360
shared.backendURL = 'https://other.example/api/c15t'; - Network accessline 482
await vi.waitFor(() => expect(initCalls()).toHaveLength(2)); expect(requests.map(({ country }) => country)).toEqual(['DE', 'FR']); - Network accessline 483
expect(requests.map(({ country }) => country)).toEqual(['DE', 'FR']); - Network accessline 528
expect(seen[0]).toBe(1); await vi.waitFor(() => expect(initCalls()).toHaveLength(2)); expect(requests.map(({ country }) => country)).toEqual(['DE', 'FR']); - Network accessline 529
await vi.waitFor(() => expect(initCalls()).toHaveLength(2)); expect(requests.map(({ country }) => country)).toEqual(['DE', 'FR']); requests[0]?.respond('for-de'); - Network accessline 530
expect(requests.map(({ country }) => country)).toEqual(['DE', 'FR']); - Network accessline 663
await vi.waitFor(() => expect(kernels.get('FR')).toBeDefined()); await vi.waitFor(() => expect(initCalls()).toHaveLength(2)); expect(requests.map(({ country }) => country)).toEqual(['DE', 'FR']); - Network accessline 665
expect(requests.map(({ country }) => country)).toEqual(['DE', 'FR']);
packages/react/src/__tests__/provider-modules.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/provider-prefetch-promise.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/provider-runtime-lifecycle.test.tsx
- Executable scriptline 1
Executable file - Network accessline 21
const TRACKER = 'https://tracker.example/collect'; - Network accessline 84
await vi.waitFor(async () => { const response = await window.fetch(`${TRACKER}?when=late`); - Network accessline 85
const response = await window.fetch(`${TRACKER}?when=late`); - Network accessline 144
); resume(); const late = window.fetch(`${TRACKER}?when=late`); - Network accessline 146
const late = window.fetch(`${TRACKER}?when=late`); - Network accessline 188
let sent = false; const held = window.fetch(TRACKER).then((response) => { - Network accessline 189
const held = window.fetch(TRACKER).then((response) => {
packages/react/src/__tests__/provider-update-chunk.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/provider-update-failure.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/provider.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/quickstart-remount.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/quickstart.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/render-count-bench.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/revocation-reload.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/scoped-notice-save.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/script-loader-at-mount.test.tsx
packages/react/src/__tests__/selector-hooks-scope.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/set-language.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/showcase-support-chat.test.tsx
- Executable scriptline 1
Executable file - Network accessline 52
category: 'functionality', id: 'crisp', src: 'https://example.invalid/crisp.js', - Network accessline 53
id: 'crisp', src: 'https://example.invalid/crisp.js', vendor: 'crisp', - Network accessline 54
src: 'https://example.invalid/crisp.js', - Network accessline 56
vendorDetails: { name: 'Crisp', privacyPolicyUrl: 'https://crisp.chat/en/privacy/', - Network accessline 57
name: 'Crisp', privacyPolicyUrl: 'https://crisp.chat/en/privacy/', }, - Network accessline 58
privacyPolicyUrl: 'https://crisp.chat/en/privacy/',
packages/react/src/__tests__/spa-modes.test.ts
- Executable scriptline 1
Executable file - Network accessline 18
schemaVersion: 2, }; const build = { backendURL: 'https://built.example', snapshot: built }; - Network accessline 20
const build = { backendURL: 'https://built.example', snapshot: built }; - Network accessline 23
test('uses the snapshot and backend URL the build downloaded', () => { expect(withBuildDefaults({}, build)).toEqual({ backendURL: 'https://built.example', - Network accessline 24
expect(withBuildDefaults({}, build)).toEqual({ backendURL: 'https://built.example', snapshot: built, - Network accessline 25
backendURL: 'https://built.example', - Network accessline 36
).toBeUndefined(); expect(withBuildDefaults({ manifestURL: '/c15t/manifest' }, build)).toEqual( { backendURL: 'https://built.example', manifestURL: '/c15t/manifest' } - Network accessline 37
expect(withBuildDefaults({ manifestURL: '/c15t/manifest' }, build)).toEqual( { backendURL: 'https://built.example', manifestURL: '/c15t/manifest' } ); - Network accessline 38
{ backendURL: 'https://built.example', manifestURL: '/c15t/manifest' } - Network accessline 46
const mode = browserManifest( withBuildDefaults( { manifestURL: 'https://cdn.example/policy.json' }, - Network accessline 47
withBuildDefaults( { manifestURL: 'https://cdn.example/policy.json' }, build - Network accessline 48
{ manifestURL: 'https://cdn.example/policy.json' }, - Network accessline 53
expect(mode.backendURL).toBe('https://built.example'); - Network accessline 54
expect(mode.manifestURL).toBe('https://cdn.example/policy.json'); - Network accessline 71
describe('hosted() from c15t/react', () => { test('defaults to the backend URL the build read', () => { expect(hostedWithBuild({}, 'https://built.example').backendURL).toBe( - Network accessline 72
test('defaults to the backend URL the build read', () => { expect(hostedWithBuild({}, 'https://built.example').backendURL).toBe( 'https://built.example' - Network accessline 73
expect(hostedWithBuild({}, 'https://built.example').backendURL).toBe( - Network accessline 74
'https://built.example' - Network accessline 75
); expect( hostedWithBuild({ backendURL: '/api/c15t' }, 'https://built.example') - Network accessline 76
expect( hostedWithBuild({ backendURL: '/api/c15t' }, 'https://built.example') .backendURL - Network accessline 77
hostedWithBuild({ backendURL: '/api/c15t' }, 'https://built.example')
packages/react/src/__tests__/split-entry-deferral.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/stable-context-providers.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/streamed-banner.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/streamed-headless-banner.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/streamed-ssr-harness.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/switch-theme.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/theme-exports.type-test.ts
- Executable scriptline 1
Executable file
packages/react/src/__tests__/theme-slots.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/theme-ssr.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/theme-tokens.test.tsx
- Executable scriptline 1
Executable file - Network accessline 67
category: 'marketing', id: 'nonce-script', src: 'https://example.com/nonce.js', - Network accessline 68
id: 'nonce-script', src: 'https://example.com/nonce.js', }, - Network accessline 69
src: 'https://example.com/nonce.js', - Network accessline 80
expect( document.head.querySelector<HTMLScriptElement>( 'script[src="https://example.com/nonce.js"]' - Network accessline 81
document.head.querySelector<HTMLScriptElement>( 'script[src="https://example.com/nonce.js"]' )?.nonce - Network accessline 82
'script[src="https://example.com/nonce.js"]'
packages/react/src/__tests__/ui-source.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/__tests__/use-network-blocker-early.test.tsx
- Executable scriptline 1
Executable file - Network accessline 16
const TRACKER = 'https://tracker.example/collect'; - Network accessline 46
useEffect(() => { statuses.push( window.fetch(`${TRACKER}?when=${label}`).then(({ status }) => status) - Network accessline 47
statuses.push( window.fetch(`${TRACKER}?when=${label}`).then(({ status }) => status) ); - Network accessline 48
window.fetch(`${TRACKER}?when=${label}`).then(({ status }) => status) - Network accessline 140
const late = await window.fetch(`${TRACKER}?when=late`); - Network accessline 173
); resume(); const late = window.fetch(`${TRACKER}?when=late`); - Network accessline 175
const late = window.fetch(`${TRACKER}?when=late`); - Network accessline 217
let sent = false; const held = window.fetch(TRACKER).then((response) => { - Network accessline 218
const held = window.fetch(TRACKER).then((response) => { - Network accessline 271
holdNetworkRequests([{ category: 'marketing', domain: 'ads.example' }]); let adsSettled = false; const ads = window.fetch('https://ads.example/pixel').finally(() => { - Network accessline 272
let adsSettled = false; const ads = window.fetch('https://ads.example/pixel').finally(() => { adsSettled = true; - Network accessline 273
const ads = window.fetch('https://ads.example/pixel').finally(() => {
packages/react/src/__tests__/vendor-options.test.tsx
- Executable scriptline 1
Executable file - Network accessline 22
id: 'meta-pixel', name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 23
name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', }; - Network accessline 24
privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/',
packages/react/src/aggregate-components.tsx
- Executable scriptline 1
Executable file
packages/react/src/chunk-warming.ts
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/__tests__/use-consent-dialog-trigger.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/__tests__/use-consent-gate.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/__tests__/use-consent-labels.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/__tests__/use-consent-text-direction.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/__tests__/use-headless-consent-ui.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/__tests__/use-translations.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/__tests__/use-vendors-listed-under.test.tsx
- Executable scriptline 1
Executable file - Network accessline 15
category: 'measurement' as const, id: 'posthog', src: 'https://example.invalid/posthog.js', - Network accessline 16
id: 'posthog', src: 'https://example.invalid/posthog.js', vendor: 'posthog', - Network accessline 17
src: 'https://example.invalid/posthog.js', - Network accessline 19
vendorDetails: { name: 'PostHog', privacyPolicyUrl: 'https://posthog.com/privacy', - Network accessline 20
name: 'PostHog', privacyPolicyUrl: 'https://posthog.com/privacy', }, - Network accessline 21
privacyPolicyUrl: 'https://posthog.com/privacy', - Network accessline 27
id: 'google-analytics', name: 'Google Analytics', privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 28
name: 'Google Analytics', privacyPolicyUrl: 'https://policies.google.com/privacy', }; - Network accessline 29
privacyPolicyUrl: 'https://policies.google.com/privacy',
packages/react/src/component-hooks/use-consent-gate.ts
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/use-consent-labels.ts
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/use-consent-text-direction.ts
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/use-headless-consent-ui.ts
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/use-headless-iab-consent-ui.ts
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/use-panel-trigger.ts
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/use-translations.ts
- Executable scriptline 1
Executable file
packages/react/src/component-hooks/use-vendors-listed-under.ts
- Executable scriptline 1
Executable file
packages/react/src/components/__tests__/active-ui-transitions.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/__tests__/consent-flow.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/__tests__/models-prop.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/__tests__/no-policy-surfaces.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/__tests__/none-model-surfaces.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/__tests__/theme-regressions.test.tsx
- Executable scriptline 1
Executable file - Network accessline 281
id: 89, name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', - Network accessline 282
name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', }, - Network accessline 283
policyUrl: 'https://ads.example/privacy', - Network accessline 317
id: 89, name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', - Network accessline 318
name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', }, - Network accessline 319
policyUrl: 'https://ads.example/privacy',
packages/react/src/components/__tests__/theme-slot-contract.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/__tests__/ui-source-tracking.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/consent-gate/__tests__/consent-gate-placeholder.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/consent-gate/__tests__/consent-gate-renders.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/consent-gate/__tests__/frame-deprecation.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/consent-gate/atoms.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/consent-gate/consent-gate.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/consent-gate/frame.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/consent-gate/index.ts
- Executable scriptline 1
Executable file - Network accessline 17
* ```tsx * <ConsentGate category="marketing"> * <iframe src="https://www.youtube.com/embed/MtN1YnoL46Q?si=JYIFKdENwls43H-r" /> - Network accessline 18
* <ConsentGate category="marketing"> * <iframe src="https://www.youtube.com/embed/MtN1YnoL46Q?si=JYIFKdENwls43H-r" /> * </ConsentGate> - Network accessline 19
* <iframe src="https://www.youtube.com/embed/MtN1YnoL46Q?si=JYIFKdENwls43H-r" />
packages/react/src/components/consent-gate/types.ts
- Executable scriptline 1
Executable file
packages/react/src/components/consent-preferences-link/__tests__/consent-preferences-link.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/consent-preferences-link/consent-preferences-link.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/consent-preferences-link/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/__tests__/features-section.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/__tests__/preference-center.test.tsx
- Executable scriptline 1
Executable file - Network accessline 176
specialFeatures: [1], specialPurposes: [1], urls: [{ langId: 'en', privacy: 'https://test.com/privacy' }], - Network accessline 177
specialPurposes: [1], urls: [{ langId: 'en', privacy: 'https://test.com/privacy' }], usesCookies: true, - Network accessline 178
urls: [{ langId: 'en', privacy: 'https://test.com/privacy' }], - Network accessline 191
specialFeatures: [1, 2], specialPurposes: [1, 2], urls: [{ langId: 'en', privacy: 'https://policies.google.com/privacy' }], - Network accessline 192
specialPurposes: [1, 2], urls: [{ langId: 'en', privacy: 'https://policies.google.com/privacy' }], usesCookies: true, - Network accessline 193
urls: [{ langId: 'en', privacy: 'https://policies.google.com/privacy' }],
packages/react/src/components/iab-panel/__tests__/purpose-item.test.tsx
- Executable scriptline 1
Executable file - Network accessline 15
const providerOnlyPurpose = { adTechProviders: [ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 16
adTechProviders: [ { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, { id: 2677, name: 'Seedtag', policyUrl: 'https://seedtag.example/p' }, - Network accessline 17
{ id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' }, - Network accessline 18
{ id: 2677, name: 'Seedtag', policyUrl: 'https://seedtag.example/p' }, - Network accessline 87
await expect .element(screen.getByRole('link', { name: 'Seedtag' })) .toHaveAttribute('href', 'https://seedtag.example/p'); - Network accessline 88
.element(screen.getByRole('link', { name: 'Seedtag' })) .toHaveAttribute('href', 'https://seedtag.example/p'); }); - Network accessline 89
.toHaveAttribute('href', 'https://seedtag.example/p');
packages/react/src/components/iab-panel/__tests__/purposes-tab.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/__tests__/vendors-tab.test.tsx
- Executable scriptline 1
Executable file - Network accessline 120
specialFeatures: [], specialPurposes: [1], urls: [{ langId: 'en', privacy: 'https://vendor1.com/privacy' }], - Network accessline 121
specialPurposes: [1], urls: [{ langId: 'en', privacy: 'https://vendor1.com/privacy' }], usesCookies: true, - Network accessline 122
urls: [{ langId: 'en', privacy: 'https://vendor1.com/privacy' }], - Network accessline 135
specialFeatures: [], specialPurposes: [1], urls: [{ langId: 'en', privacy: 'https://indexexchange.com/privacy' }], - Network accessline 136
specialPurposes: [1], urls: [{ langId: 'en', privacy: 'https://indexexchange.com/privacy' }], usesCookies: true, - Network accessline 137
urls: [{ langId: 'en', privacy: 'https://indexexchange.com/privacy' }], - Network accessline 150
specialFeatures: [1], specialPurposes: [1], urls: [{ langId: 'en', privacy: 'https://policies.google.com/privacy' }], - Network accessline 151
specialPurposes: [1], urls: [{ langId: 'en', privacy: 'https://policies.google.com/privacy' }], usesCookies: true, - Network accessline 152
urls: [{ langId: 'en', privacy: 'https://policies.google.com/privacy' }], - Network accessline 295
); expect(policyLink.getAttribute('href')).toBe( 'https://indexexchange.com/privacy' - Network accessline 296
expect(policyLink.getAttribute('href')).toBe( 'https://indexexchange.com/privacy' ); - Network accessline 297
'https://indexexchange.com/privacy' - Network accessline 527
const gvlFetch = globalThis.fetch; globalThis.fetch = vi.fn((input: RequestInfo | URL) => String(input).startsWith('https://lists.example/ac') - Network accessline 528
globalThis.fetch = vi.fn((input: RequestInfo | URL) => String(input).startsWith('https://lists.example/ac') ? Promise.resolve( - Network accessline 529
String(input).startsWith('https://lists.example/ac') - Network accessline 534
id: 89, name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', - Network accessline 535
name: 'Example Ad Tech', policyUrl: 'https://ads.example/privacy', }, - Network accessline 536
policyUrl: 'https://ads.example/privacy', - Network accessline 550
additionalConsent: { providers: [89], url: 'https://lists.example/ac', - Network accessline 551
providers: [89], url: 'https://lists.example/ac', }, - Network accessline 552
url: 'https://lists.example/ac', - Network accessline 578
expect(row.textContent).toContain('Example Ad Tech'); expect(row.querySelector('a')?.getAttribute('href')).toBe( 'https://ads.example/privacy' - Network accessline 579
expect(row.querySelector('a')?.getAttribute('href')).toBe( 'https://ads.example/privacy' ); - Network accessline 580
'https://ads.example/privacy'
packages/react/src/components/iab-panel/atoms/ad-tech-provider-section.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/atoms/card.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/atoms/content.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/atoms/feature-item.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/atoms/footer.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/atoms/header.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/atoms/overlay.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/atoms/purpose-item.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/atoms/root.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/atoms/stack-item.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/atoms/tabs.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/atoms/vendor-list.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/hooks/use-display-model.ts
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/hooks/use-gvl-data.ts
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/iab-panel.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/types.ts
- Executable scriptline 1
Executable file
packages/react/src/components/iab-panel/use-iab-translations.ts
- Executable scriptline 1
Executable file
packages/react/src/components/iab-prompt/__tests__/iab-consent-banner.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-prompt/atoms/button-group.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-prompt/atoms/card.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-prompt/atoms/description.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-prompt/atoms/footer.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-prompt/atoms/header.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-prompt/atoms/overlay.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-prompt/atoms/root.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-prompt/atoms/title.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-prompt/iab-prompt.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab-prompt/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/iab/__tests__/e2e-setup.ts
- Executable scriptline 1
Executable file
packages/react/src/components/iab/__tests__/fixtures/mock-consent-state.ts
- Executable scriptline 1
Executable file - Network accessline 186
specialFeatures: [1], specialPurposes: [1, 2], urls: [{ langId: 'en', privacy: 'https://vdx.tv/privacy/' }], - Network accessline 187
specialPurposes: [1, 2], urls: [{ langId: 'en', privacy: 'https://vdx.tv/privacy/' }], usesCookies: true, - Network accessline 188
urls: [{ langId: 'en', privacy: 'https://vdx.tv/privacy/' }], - Network accessline 202
specialPurposes: [1, 2], urls: [ { langId: 'en', privacy: 'https://www.indexexchange.com/privacy/' }, - Network accessline 203
urls: [ { langId: 'en', privacy: 'https://www.indexexchange.com/privacy/' }, ], - Network accessline 204
{ langId: 'en', privacy: 'https://www.indexexchange.com/privacy/' }, - Network accessline 221
{ langId: 'en', privacy: 'https://www.captifytechnologies.com/privacy-notice/', - Network accessline 222
langId: 'en', privacy: 'https://www.captifytechnologies.com/privacy-notice/', }, - Network accessline 223
privacy: 'https://www.captifytechnologies.com/privacy-notice/', - Network accessline 238
specialFeatures: [1, 2], specialPurposes: [1, 2], urls: [{ langId: 'en', privacy: 'https://policies.google.com/privacy' }], - Network accessline 239
specialPurposes: [1, 2], urls: [{ langId: 'en', privacy: 'https://policies.google.com/privacy' }], usesCookies: true, - Network accessline 240
urls: [{ langId: 'en', privacy: 'https://policies.google.com/privacy' }], - Network accessline 417
legIntPurposes: [9], name: 'Custom Analytics Provider', privacyPolicyUrl: 'https://analytics.example.com/privacy', - Network accessline 418
name: 'Custom Analytics Provider', privacyPolicyUrl: 'https://analytics.example.com/privacy', purposes: [1, 7, 8, 10], - Network accessline 419
privacyPolicyUrl: 'https://analytics.example.com/privacy',
packages/react/src/components/iab/__tests__/iab-banner.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab/__tests__/iab-consent-flow.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab/__tests__/iab-events.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab/__tests__/iab-gvl.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab/__tests__/iab-preference-center.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab/__tests__/iab-storage.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab/__tests__/iab-stub.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab/__tests__/iab-tcfapi.e2e.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/iab/__tests__/msw-handlers.ts
- Executable scriptline 1
Executable file - Network accessline 16
http.get('https://gvl.inth.app*', ({ request }) => { - Network accessline 41
* Handler that returns 204 (non-IAB region) */ export const nonIABRegionHandler = http.get('https://gvl.inth.app*', () => { - Network accessline 42
*/ export const nonIABRegionHandler = http.get('https://gvl.inth.app*', () => { console.log('[MSW] Returning 204 (non-IAB region)'); - Network accessline 43
export const nonIABRegionHandler = http.get('https://gvl.inth.app*', () => { - Network accessline 49
* Handler that returns an error */ export const errorHandler = http.get('https://gvl.inth.app*', () => { - Network accessline 50
*/ export const errorHandler = http.get('https://gvl.inth.app*', () => { console.log('[MSW] Returning error'); - Network accessline 51
export const errorHandler = http.get('https://gvl.inth.app*', () => { - Network accessline 57
* Handler that returns invalid GVL data */ export const invalidGVLHandler = http.get('https://gvl.inth.app*', () => { - Network accessline 58
*/ export const invalidGVLHandler = http.get('https://gvl.inth.app*', () => { console.log('[MSW] Returning invalid GVL'); - Network accessline 59
export const invalidGVLHandler = http.get('https://gvl.inth.app*', () => {
packages/react/src/components/panel-link/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/__tests__/consent-dialog-trigger-devtools-toolbar.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/__tests__/consent-dialog-trigger-devtools.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/__tests__/consent-dialog-trigger-rights.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/__tests__/consent-dialog-trigger-toolbar-loading.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/__tests__/consent-dialog-trigger-toolbar.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/__tests__/panel-trigger.type-test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/__tests__/trigger-disable-animation.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/atoms/button.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/atoms/icon.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/atoms/root.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/atoms/text.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/atoms/toolbar.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/atoms/trigger-icons.tsx
- Executable scriptline 1
Executable file - Network accessline 20
}: SVGProps<SVGSVGElement> & IconProps) => ( <svg xmlns="http://www.w3.org/2000/svg" - Network accessline 21
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" - Network accessline 22
xmlns="http://www.w3.org/2000/svg" - Network accessline 53
}: SVGProps<SVGSVGElement> & IconProps) => ( <svg xmlns="http://www.w3.org/2000/svg" - Network accessline 54
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" - Network accessline 55
xmlns="http://www.w3.org/2000/svg" - Network accessline 79
export const DevToolsIcon = (props: SVGProps<SVGSVGElement>) => ( <svg xmlns="http://www.w3.org/2000/svg" - Network accessline 80
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" - Network accessline 81
xmlns="http://www.w3.org/2000/svg"
packages/react/src/components/panel-trigger/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/panel-trigger-toolbar.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/panel-trigger.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/toolbar-loader.ts
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/types.ts
- Executable scriptline 1
Executable file
packages/react/src/components/panel-trigger/use-draggable.ts
- Executable scriptline 1
Executable file
packages/react/src/components/panel/atoms/card.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel/atoms/overlay.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel/atoms/root.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/panel/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/panel/panel.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/__tests__/category-order.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/__tests__/policy-actions.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/__tests__/restriction-notice.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/__tests__/vendor-list.test.tsx
- Executable scriptline 1
Executable file - Network accessline 29
id: 'meta-pixel', name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 30
name: 'Meta Pixel', privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', }, - Network accessline 31
privacyPolicyUrl: 'https://www.facebook.com/privacy/policy/', - Network accessline 35
id: 'google-ads', name: 'Google Ads', privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 36
name: 'Google Ads', privacyPolicyUrl: 'https://policies.google.com/privacy', }, - Network accessline 37
privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 41
id: 'google-analytics', name: 'Google Analytics', privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 42
name: 'Google Analytics', privacyPolicyUrl: 'https://policies.google.com/privacy', }, - Network accessline 43
privacyPolicyUrl: 'https://policies.google.com/privacy', - Network accessline 47
id: 'shared-vendor', name: 'Shared Vendor', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 48
name: 'Shared Vendor', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 49
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 53
id: 'negated-vendor', name: 'Negated Vendor', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 54
name: 'Negated Vendor', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 55
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 60
id: 'fixed-vendor', name: 'Fixed Vendor', privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 61
name: 'Fixed Vendor', privacyPolicyUrl: 'https://example.com/privacy', }, - Network accessline 62
privacyPolicyUrl: 'https://example.com/privacy', - Network accessline 366
category: 'measurement' as const, id: 'posthog', src: 'https://example.invalid/posthog.js', - Network accessline 367
id: 'posthog', src: 'https://example.invalid/posthog.js', vendor: 'posthog', - Network accessline 368
src: 'https://example.invalid/posthog.js', - Network accessline 370
vendorDetails: { name: 'PostHog', privacyPolicyUrl: 'https://posthog.com/privacy', - Network accessline 371
name: 'PostHog', privacyPolicyUrl: 'https://posthog.com/privacy', }, - Network accessline 372
privacyPolicyUrl: 'https://posthog.com/privacy',
packages/react/src/components/preferences/atoms/accordion.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/atoms/button.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/atoms/footer.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/atoms/root.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/atoms/vendor-list.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/policy-actions.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/preferences.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/preferences/types.ts
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/__tests__/consent-banner-compose.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/__tests__/consent-banner-footer-layout.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/__tests__/consent-banner-hit-area.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/__tests__/consent-banner-notice.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/__tests__/consent-banner-policy-ordering.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/__tests__/consent-banner-variants.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/__tests__/customize-warming.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/__tests__/policy-actions.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/__tests__/presentation-behavior.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/atoms/early-tap-script.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/atoms/overlay.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/atoms/root.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/components.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/error-boundary.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/policy-actions.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/prompt.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/surface-context.ts
- Executable scriptline 1
Executable file
packages/react/src/components/prompt/use-banner-copy.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/__tests__/deferred-surface-styles.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/__tests__/iab-surface-styles.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/__tests__/streamed-surface.test.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/__tests__/surface-styles.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/dialog-sheets.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/first-paint-sheets.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/iab-dialog-sheets.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/iab-first-paint-sheets.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/libs/__tests__/slot.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/libs/compose-refs.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/libs/polymorphic.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/libs/recursive-clone-children.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/libs/slot.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/libs/use-controllable-state.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/policy-actions.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/primitives/box.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/primitives/button.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/primitives/button.types.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/primitives/legal-links/index.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/streamed-surface.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/surface-styles.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/__tests__/branding.test.tsx
- Executable scriptline 1
Executable file - Network accessline 270
) ); expect(markup).toContain('href="https://c15t.com"'); - Network accessline 271
); expect(markup).toContain('href="https://c15t.com"'); expect(markup).not.toContain('?ref='); - Network accessline 272
expect(markup).toContain('href="https://c15t.com"'); - Network accessline 285
expect(link).toHaveAttribute( 'href', `https://c15t.com?ref=${window.location.hostname}` - Network accessline 286
'href', `https://c15t.com?ref=${window.location.hostname}` ); - Network accessline 287
`https://c15t.com?ref=${window.location.hostname}`
packages/react/src/components/shared/ui/__tests__/primitives.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/accordion/accordion.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/accordion/accordion.types.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/accordion/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/animated-collapse/animated-collapse.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/animated-collapse/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/branding.tsx
- Executable scriptline 1
Executable file - Network accessline 60
): string { return resolveBranding(branding) === 'inth' ? `https://inth.com${refParam}` - Network accessline 61
return resolveBranding(branding) === 'inth' ? `https://inth.com${refParam}` : `https://c15t.com${refParam}`; - Network accessline 62
? `https://inth.com${refParam}` - Network accessline 63
: `https://c15t.com${refParam}`;
packages/react/src/components/shared/ui/button/button.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/button/button.types.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/button/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/collapsible/collapsible.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/collapsible/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/dialog/dialog.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/dialog/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/icon.tsx
packages/react/src/components/shared/ui/logo.tsx
- Executable scriptline 1
Executable file - Network accessline 16
}: SVGProps<SVGSVGElement> & IconProps) => ( <svg xmlns="http://www.w3.org/2000/svg" - Network accessline 17
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 446 445" - Network accessline 18
xmlns="http://www.w3.org/2000/svg" - Network accessline 35
}: SVGProps<SVGSVGElement> & IconProps) => ( <svg xmlns="http://www.w3.org/2000/svg" - Network accessline 36
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 88 90" - Network accessline 37
xmlns="http://www.w3.org/2000/svg"
packages/react/src/components/shared/ui/preference-item/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/preference-item/preference-item.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/switch/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/switch/switch.tsx
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/switch/switch.types.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/tabs/index.ts
- Executable scriptline 1
Executable file
packages/react/src/components/shared/ui/tabs/tabs.tsx
- Executable scriptline 1
Executable file
packages/react/src/consent-gate.ts
- Executable scriptline 1
Executable file
packages/react/src/consent-theme.tsx
- Executable scriptline 1
Executable file
packages/react/src/context.ts
- Executable scriptline 1
Executable file
packages/react/src/context/consent-tracking-context.ts
- Executable scriptline 1
Executable file
packages/react/src/context/iab-context-value.ts
- Executable scriptline 1
Executable file
packages/react/src/context/index.ts
- Executable scriptline 1
Executable file
packages/react/src/context/theme-context.ts
- Executable scriptline 1
Executable file
packages/react/src/declaration.d.ts
- Executable scriptline 1
Executable file
packages/react/src/devtools-launcher.ts
- Executable scriptline 1
Executable file
packages/react/src/devtools.tsx
- Executable scriptline 1
Executable file
packages/react/src/draft-context.ts
- Executable scriptline 1
Executable file
packages/react/src/draft.tsx
- Executable scriptline 1
Executable file
packages/react/src/event-dispatcher.ts
- Executable scriptline 1
Executable file
packages/react/src/external-iab-context.tsx
- Executable scriptline 1
Executable file
packages/react/src/gpp.tsx
- Executable scriptline 1
Executable file
packages/react/src/headless.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/__tests__/use-color-scheme.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/hooks/__tests__/use-focus-trap.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/hooks/__tests__/use-late-entry.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/hooks/__tests__/use-scroll-lock.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/hooks/__tests__/use-styles.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/hooks/__tests__/use-theme.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-color-scheme.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-committed-ref.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-component-config.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-focus-trap.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-headless-iab-consent-ui.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-iab-manager.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-iab-policy-guard.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-is-hydrated.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-late-entry.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-reduced-motion.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-scroll-lock.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-text-direction.ts
- Executable scriptline 1
Executable file
packages/react/src/hooks/use-theme.ts
- Executable scriptline 1
Executable file
packages/react/src/iab-context.tsx
- Executable scriptline 1
Executable file
packages/react/src/iab-dialog-deferred.tsx
- Executable scriptline 1
Executable file
packages/react/src/iab.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/consent-banner.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/consent-dialog-link.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/consent-dialog-trigger.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/consent-dialog.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/consent-gate.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/core.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/draft.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/event-dispatcher.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/frame.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/hooks.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/hosted.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/module-hooks.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/offline.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/presets.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/provider.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/theme.ts
- Executable scriptline 1
Executable file
packages/react/src/index-parts/translations.ts
- Executable scriptline 1
Executable file
packages/react/src/index.ts
- Executable scriptline 1
Executable file
packages/react/src/kernel-selector.ts
- Executable scriptline 1
Executable file
packages/react/src/modes.ts
- Executable scriptline 1
Executable file
packages/react/src/module-hooks.ts
- Executable scriptline 1
Executable file
packages/react/src/module-hooks/iframe-blocker.ts
- Executable scriptline 1
Executable file
packages/react/src/module-hooks/network-blocker.ts
- Executable scriptline 1
Executable file
packages/react/src/module-hooks/network-hold.ts
- Executable scriptline 1
Executable file
packages/react/src/module-hooks/persistence.ts
- Executable scriptline 1
Executable file
packages/react/src/module-hooks/script-loader.ts
- Executable scriptline 1
Executable file
packages/react/src/module-hooks/shared.ts
- Executable scriptline 1
Executable file
packages/react/src/panel-link.ts
- Executable scriptline 1
Executable file
packages/react/src/panel-trigger.ts
- Executable scriptline 1
Executable file
packages/react/src/panel.ts
- Executable scriptline 1
Executable file
packages/react/src/postcss-tailwind3.ts
- Executable scriptline 1
Executable file
packages/react/src/preferences.ts
- Executable scriptline 1
Executable file
packages/react/src/primitives.ts
- Executable scriptline 1
Executable file
packages/react/src/primitives/accordion.ts
- Executable scriptline 1
Executable file
packages/react/src/primitives/button.ts
- Executable scriptline 1
Executable file
packages/react/src/primitives/collapsible.ts
- Executable scriptline 1
Executable file
packages/react/src/primitives/dialog.ts
- Executable scriptline 1
Executable file
packages/react/src/primitives/preference-item.ts
- Executable scriptline 1
Executable file
packages/react/src/primitives/switch.ts
- Executable scriptline 1
Executable file
packages/react/src/primitives/tabs.ts
- Executable scriptline 1
Executable file
packages/react/src/prompt.ts
- Executable scriptline 1
Executable file
packages/react/src/provider.tsx
- Executable scriptline 1
Executable file - Network accessline 1088
} console.warn( 'c15t: `theme` tokens are no longer turned into CSS in the browser. Render <ConsentTheme theme={theme} /> on the server, or put the CSS from generateThemeCSS() in your stylesheet. See https://c15t.com/docs/frameworks/re - Network accessline 1089
console.warn( 'c15t: `theme` tokens are no longer turned into CSS in the browser. Render <ConsentTheme theme={theme} /> on the server, or put the CSS from generateThemeCSS() in your stylesheet. See https://c15t.com/docs/frameworks/react/ - Network accessline 1090
'c15t: `theme` tokens are no longer turned into CSS in the browser. Render <ConsentTheme theme={theme} /> on the server, or put the CSS from generateThemeCSS() in your stylesheet. See https://c15t.com/docs/frameworks/react/customize'
packages/react/src/server/fetch-ssr-data.test.ts
- Executable scriptline 1
Executable file - Network accessline 57
}); expect(result?.metadata?.requestContext).toEqual({ backendURL: 'https://example.com/api/c15t', - Network accessline 58
expect(result?.metadata?.requestContext).toEqual({ backendURL: 'https://example.com/api/c15t', country: 'US', - Network accessline 59
backendURL: 'https://example.com/api/c15t', - Network accessline 113
await fetchSSRData({ backendURL: 'https://consent.example.com/api/c15t', - Network accessline 114
backendURL: 'https://consent.example.com/api/c15t', - Network accessline 118
expect(fetchMock).toHaveBeenCalledWith( 'https://consent.example.com/api/c15t/init', - Network accessline 119
'https://consent.example.com/api/c15t/init', - Network accessline 140
expect(fetchMock).toHaveBeenCalledWith( 'https://example.com/api/c15t/init', - Network accessline 141
'https://example.com/api/c15t/init', - Network accessline 164
expect(fetchMock).toHaveBeenCalledWith( 'https://example.com/api/c15t/init', - Network accessline 165
'https://example.com/api/c15t/init', - Network accessline 179
const result = await fetchSSRData({ backendURL: 'https://consent.example.com', - Network accessline 180
backendURL: 'https://consent.example.com', - Network accessline 196
await Promise.all([ fetchSSRData({ backendURL: 'https://consent.example.com/api/c15t', - Network accessline 197
fetchSSRData({ backendURL: 'https://consent.example.com/api/c15t', headers, - Network accessline 198
backendURL: 'https://consent.example.com/api/c15t', - Network accessline 200
}), fetchSSRData({ backendURL: 'https://consent.example.com/api/c15t', - Network accessline 201
fetchSSRData({ backendURL: 'https://consent.example.com/api/c15t', headers, - Network accessline 202
backendURL: 'https://consent.example.com/api/c15t', - Network accessline 218
const result = await fetchSSRData({ backendURL: 'https://consent.example.com/api/c15t', - Network accessline 219
backendURL: 'https://consent.example.com/api/c15t', - Network accessline 231
}, requestContext: { backendURL: 'https://consent.example.com/api/c15t', - Network accessline 232
requestContext: { backendURL: 'https://consent.example.com/api/c15t', country: 'US', - Network accessline 233
backendURL: 'https://consent.example.com/api/c15t', - Network accessline 270
expect(result?.metadata?.requestContext).toEqual({ backendURL: 'https://example.com/api/c15t', - Network accessline 271
backendURL: 'https://example.com/api/c15t', - Network accessline 288
const result = await fetchSSRData({ backendURL: 'https://consent.example.com/api/c15t', - Network accessline 289
backendURL: 'https://consent.example.com/api/c15t',
packages/react/src/server/fetch-ssr-data.ts
packages/react/src/server/headers.test.ts
- Executable scriptline 1
Executable file
packages/react/src/server/headers.ts
- Executable scriptline 1
Executable file
packages/react/src/server/index.ts
- Executable scriptline 1
Executable file
packages/react/src/server/init-cache-key.test.ts
- Executable scriptline 1
Executable file - Network accessline 14
const key = createSSRInitCacheKey({ headers, normalizedURL: 'https://example.com/api/c15t', - Network accessline 15
headers, normalizedURL: 'https://example.com/api/c15t', }); - Network accessline 16
normalizedURL: 'https://example.com/api/c15t', - Network accessline 22
gpc: '1', language: 'en-US,en;q=0.9', normalizedURL: 'https://example.com/api/c15t', - Network accessline 23
language: 'en-US,en;q=0.9', normalizedURL: 'https://example.com/api/c15t', region: 'CA', - Network accessline 24
normalizedURL: 'https://example.com/api/c15t', - Network accessline 38
const key = createSSRInitCacheKey({ headers, normalizedURL: 'https://example.com/api/c15t', - Network accessline 39
headers, normalizedURL: 'https://example.com/api/c15t', overrides: { - Network accessline 40
normalizedURL: 'https://example.com/api/c15t', - Network accessline 51
gpc: '0', language: 'de-DE,de;q=0.9', normalizedURL: 'https://example.com/api/c15t', - Network accessline 52
language: 'de-DE,de;q=0.9', normalizedURL: 'https://example.com/api/c15t', region: 'BE', - Network accessline 53
normalizedURL: 'https://example.com/api/c15t', - Network accessline 68
const firstKey = createSSRInitCacheKey({ headers: firstHeaders, normalizedURL: 'https://example.com/api/c15t', - Network accessline 69
headers: firstHeaders, normalizedURL: 'https://example.com/api/c15t', }); - Network accessline 70
normalizedURL: 'https://example.com/api/c15t', - Network accessline 72
const secondKey = createSSRInitCacheKey({ headers: secondHeaders, normalizedURL: 'https://example.com/api/c15t', - Network accessline 73
headers: secondHeaders, normalizedURL: 'https://example.com/api/c15t', }); - Network accessline 74
normalizedURL: 'https://example.com/api/c15t',
packages/react/src/server/init-cache-key.ts
- Executable scriptline 1
Executable file
packages/react/src/server/normalize-url.test.ts
- Executable scriptline 1
Executable file - Network accessline 6
it('should validate absolute URLs correctly', () => { const validAbsoluteURLs = [ 'http://example.com', - Network accessline 7
const validAbsoluteURLs = [ 'http://example.com', 'https://example.com', - Network accessline 8
'http://example.com', - Network accessline 9
'https://example.com', - Network accessline 10
'http://localhost:3000', - Network accessline 11
'https://api.example.com/path', - Network accessline 22
const testCases = [ { expected: 'https://my-instance.c15t.dev', - Network accessline 23
{ expected: 'https://my-instance.c15t.dev', input: 'https://my-instance.c15t.dev/', - Network accessline 24
expected: 'https://my-instance.c15t.dev', - Network accessline 25
input: 'https://my-instance.c15t.dev/', - Network accessline 26
}, { expected: 'https://example.com', input: 'https://example.com/' }, { expected: 'http://localhost:3000', input: 'http://localhost:3000/' }, - Network accessline 27
{ expected: 'https://example.com', input: 'https://example.com/' }, - Network accessline 28
{ expected: 'http://localhost:3000', input: 'http://localhost:3000/' }, - Network accessline 29
{ expected: 'https://api.example.com/path', input: 'https://api.example.com/path/', - Network accessline 30
expected: 'https://api.example.com/path', - Network accessline 31
input: 'https://api.example.com/path/', - Network accessline 103
it('should return absolute URLs unchanged', () => { const absoluteURL = 'https://example.com/api'; - Network accessline 104
const absoluteURL = 'https://example.com/api'; - Network accessline 112
const testCases = [ { expected: 'https://my-instance.c15t.dev', - Network accessline 113
{ expected: 'https://my-instance.c15t.dev', input: 'https://my-instance.c15t.dev/', - Network accessline 114
expected: 'https://my-instance.c15t.dev', - Network accessline 115
input: 'https://my-instance.c15t.dev/', - Network accessline 116
}, { expected: 'https://example.com/api', - Network accessline 117
{ expected: 'https://example.com/api', input: 'https://example.com/api/', - Network accessline 118
expected: 'https://example.com/api', - Network accessline 119
input: 'https://example.com/api/', - Network accessline 138
const result = normalizeBackendURL('/api/c15t', headers); expect(result).toBe('https://example.com/api/c15t'); - Network accessline 139
expect(result).toBe('https://example.com/api/c15t'); - Network accessline 149
trustForwardedHeaders: true, }); expect(result).toBe('https://example.com/api/c15t'); - Network accessline 150
}); expect(result).toBe('https://example.com/api/c15t'); }); - Network accessline 151
expect(result).toBe('https://example.com/api/c15t'); - Network accessline 155
const testCases = [ { expected: 'https://my-instance.c15t.dev/api/c15t', - Network accessline 156
{ expected: 'https://my-instance.c15t.dev/api/c15t', input: '/api/c15t/', - Network accessline 157
expected: 'https://my-instance.c15t.dev/api/c15t', - Network accessline 158
input: '/api/c15t/', }, { expected: 'https://my-instance.c15t.dev/api', input: '/api/' }, - Network accessline 159
}, { expected: 'https://my-instance.c15t.dev/api', input: '/api/' }, ]; - Network accessline 160
{ expected: 'https://my-instance.c15t.dev/api', input: '/api/' }, - Network accessline 174
const result = normalizeBackendURL('/api/c15t', headers); expect(result).toBe('http://localhost:3000/api/c15t'); - Network accessline 175
expect(result).toBe('http://localhost:3000/api/c15t'); - Network accessline 178
it('should not use the referer', () => { const headers = createMockHeaders({ referer: 'https://example.com/some/path', - Network accessline 179
const headers = createMockHeaders({ referer: 'https://example.com/some/path', }); - Network accessline 180
referer: 'https://example.com/some/path',
packages/react/src/server/normalize-url.ts
- Executable scriptline 1
Executable file - Network accessline 22
* @example * ```ts * validateBackendURL('https://api.example.com/'); - Network accessline 23
* ```ts * validateBackendURL('https://api.example.com/'); * // Returns: { isAbsolute: true, normalizedURL: 'https://api.example.com' } - Network accessline 24
* validateBackendURL('https://api.example.com/'); - Network accessline 25
* // Returns: { isAbsolute: true, normalizedURL: 'https://api.example.com' } - Network accessline 59
throw new Error( `Invalid URL format: ${backendURL}. URL must be absolute (https://...) or relative starting with (/)` - Network accessline 60
`Invalid URL format: ${backendURL}. URL must be absolute (https://...) or relative starting with (/)` - Network accessline 85
* * // Absolute URL - returns as-is * normalizeBackendURL('https://api.example.com/', headers); - Network accessline 86
* // Absolute URL - returns as-is * normalizeBackendURL('https://api.example.com/', headers); * // Returns: 'https://api.example.com' - Network accessline 87
* normalizeBackendURL('https://api.example.com/', headers); - Network accessline 88
* // Returns: 'https://api.example.com' - Network accessline 90
* // Relative URL - resolved from the host header * normalizeBackendURL('/api/consent', headers); * // Returns: 'https://example.com/api/consent' (for `host: example.com`) - Network accessline 91
* normalizeBackendURL('/api/consent', headers); * // Returns: 'https://example.com/api/consent' (for `host: example.com`) * ``` - Network accessline 92
* // Returns: 'https://example.com/api/consent' (for `host: example.com`)
packages/react/src/server/types.ts
- Executable scriptline 1
Executable file - Network accessline 14
/** * The backend URL to fetch consent data from. * Can be absolute (https://...) or relative (/api/consent). A relative - Network accessline 15
* The backend URL to fetch consent data from. * Can be absolute (https://...) or relative (/api/consent). A relative * URL resolves against the request's `host` header. - Network accessline 16
* Can be absolute (https://...) or relative (/api/consent). A relative
packages/react/src/test-setup.browser.ts
- Executable scriptline 1
Executable file
packages/react/src/theme-provider.tsx
- Executable scriptline 1
Executable file
packages/react/src/transports/hosted.ts
- Executable scriptline 1
Executable file
packages/react/src/transports/manifest.ts
- Executable scriptline 1
Executable file
packages/react/src/transports/offline.ts
- Executable scriptline 1
Executable file
packages/react/src/types/index.ts
- Executable scriptline 1
Executable file
packages/react/src/types/manager.ts
- Executable scriptline 1
Executable file
packages/react/src/types/slots.ts
- Executable scriptline 1
Executable file
packages/react/src/types/theme/index.ts
- Executable scriptline 1
Executable file
packages/react/src/types/theme/style-types.ts
- Executable scriptline 1
Executable file
packages/react/src/ui-config-context.ts
- Executable scriptline 1
Executable file
packages/react/src/utils/__tests__/deferred-module.test.tsx
- Executable scriptline 1
Executable file
packages/react/src/utils/__tests__/theme-utils.test.ts
- Executable scriptline 1
Executable file
packages/react/src/utils/cn.ts
- Executable scriptline 1
Executable file
packages/react/src/utils/default-translation-config.ts
- Executable scriptline 1
Executable file
packages/react/src/utils/deferred-module.tsx
- Executable scriptline 1
Executable file
packages/react/src/utils/index.ts
- Executable scriptline 1
Executable file
packages/react/src/utils/merge-slot-props.ts
- Executable scriptline 1
Executable file
packages/react/src/utils/merge-styles.ts
- Executable scriptline 1
Executable file
packages/react/src/utils/theme-utils.ts
- Executable scriptline 1
Executable file
packages/react/vitest.config.ts
- Executable scriptline 1
Executable file
packages/scripts/AGENTS.md
- Network accessline 24
[Documentation index](https://c15t.com/docs/llms.txt) · [Full Markdown context](https://c15t.com/llms-full.txt). Prefer the index and individual pages for focused tasks.
packages/scripts/CHANGELOG.md
- Network accessline 47
`gorgiasChat()` from `@c15t/integrations/gorgias` loads Gorgias Chat only after `functionality` consent. Without `measurement` consent it turns off the widget's Segment analytics. Gorgias has no shutdown API, so revocation relies on c15t's - Network accessline 71
`zendeskWidget()` from `@c15t/integrations/zendesk` loads Zendesk Messaging only after `functionality` consent. It sets Zendesk's cookie range to `all` with measurement consent and `functional` without it. On revocation it sends `none`, whi - Network accessline 102
`ada()` from `@c15t/integrations/ada` imports the Ada Messaging Web SDK only after `functionality` consent. On revocation it calls Ada's `stop()`, which removes the widget but keeps stored conversations. The CLI can add it during setup. See - Network accessline 197
`zendeskWidget()` from `@c15t/integrations/zendesk` loads Zendesk Messaging only after `functionality` consent. It sets Zendesk's cookie range to `all` with measurement consent and `functional` without it. On revocation it sends `none`, whi - Network accessline 209
`gorgiasChat()` from `@c15t/integrations/gorgias` loads Gorgias Chat only after `functionality` consent. Without `measurement` consent it turns off the widget's Segment analytics. Gorgias has no shutdown API, so revocation relies on c15t's - Network accessline 229
`ada()` from `@c15t/integrations/ada` imports the Ada Messaging Web SDK only after `functionality` consent. On revocation it calls Ada's `stop()`, which removes the widget but keeps stored conversations. The CLI can add it during setup. See - Network accessline 253
c15t v3 is stable and published under the `latest` tag. See the [3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 254
[3.0.0 changelog](https://c15t.com/changelog/3.0.0) for new features, breaking - Network accessline 396
- 184b491: Read the [c15t 2.3.0 changelog](https://c15t.com/changelog/2.3.0) for the complete release notes and upgrade context. - Network accessline 414
- Read the [c15t 2.2.0 changelog](https://c15t.com/changelog/2.2.0) for the complete release notes and upgrade context. - Network accessline 486
- 32617c9: Changelog available at https://c15t.com/changelog/2.0.0 - Network accessline 530
- 126a78b: https://c15t.com/changelog/2.0.0-rc.0 - Network accessline 536
- 68a7324: Full Changelog: https://c15t.com/changelog/1.8.0 - Network accessline 549
- aa16d03: You can find the full changelog at https://c15t.com/changelog/1.7.0 - Network accessline 561
- 84ab0c7: For a full detailed changelog see the [v1.6.0 release notes](https://c15t.com/changelog/1.6.0).
packages/scripts/README.md
- Network accessline 1
<p align="center"> <a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fscripts" target="_blank" rel="noopener noreferrer"> - Network accessline 2
<a href="https://c15t.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fscripts" target="_blank" rel="noopener noreferrer"> - Network accessline 12
<p> <a href="https://www.npmjs.com/package/@c15t/scripts"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/%40c15t%2Fscripts.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/%40c15t%2Fs - Network accessline 13
<a href="https://www.npmjs.com/package/@c15t/scripts"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/npm/%40c15t%2Fscripts.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/npm/%40c15t%2Fscrip - Network accessline 14
<a href="https://github.com/c15t/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/stars.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15t/c15t/stars.svg?varian - Network accessline 15
<a href="https://github.com/c15t/c15t/blob/main/LICENSE.md"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/github/c15t/c15t/license.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/github/c15 - Network accessline 16
<a href="https://c15t.link/discord"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/discord/1312171102268690493.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/discord/1312171102268690493.svg - Network accessline 17
<a href="https://skills.sh/c15t/skills/c15t"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/skills/c15t/skills/c15t.svg?variant=outline&mode=dark"><img src="https://shieldcn.dev/skills/c15t/skills/c15t.sv - Network accessline 18
<a href="https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fscripts"><picture><source media="(prefers-color-scheme: dark)" srcset="https://shieldcn.dev/badge/Made%20By-Inth-ffc803.svg?color=ffc80 - Network accessline 23
c15t is used by [2,100+ sites](https://www.wappalyzer.com/technologies/cookie-compliance/c15t/), including expo.dev, zed.dev, unkey.dev, mintlify.com, and sazabi.com. - Network accessline 27
See the [documentation](https://c15t.com/docs/cli/commands/codemods#rename-c15tscripts-imports) for guides, API reference, and examples. - Network accessline 43
On the web, every page of the [c15t docs](https://c15t.com/docs) has a Markdown version, and [llms.txt](https://c15t.com/docs/llms.txt) lists them all. Install the c15t agent skills with `npx skills add c15t/skills`. - Network accessline 47
- Join our [Discord community](https://c15t.link/discord) - Network accessline 48
- Open an issue on our [GitHub repository](https://github.com/c15t/c15t/issues) - Network accessline 49
- Visit [inth.com](https://inth.com) and use the chat widget - Network accessline 54
- Read the [contribution guidelines](https://c15t.com/docs/oss/contributing) before you open a pull request - Network accessline 55
- Follow the [code of conduct](https://c15t.com/docs/oss/code-of-conduct) - Network accessline 59
Do not open a public issue for a security vulnerability. Report it privately through [GitHub's vulnerability reporting](https://github.com/c15t/c15t/security/advisories/new). We examine every valid report. - Network accessline 67
[Apache License 2.0](https://github.com/c15t/c15t/blob/main/LICENSE.md) - Network accessline 71
**Built by [Inth](https://inth.com?utm_source=npm&utm_medium=readme&utm_campaign=oss_readme&utm_content=%40c15t%2Fscripts)**
packages/scripts/__tests__/compatibility.fixture.ts
- Executable scriptline 1
Executable file
packages/scripts/__tests__/compatibility.test.ts
- Executable scriptline 1
Executable file
packages/scripts/build-compat.ts
- Executable scriptline 1
Executable file
packages/scripts/docs/README.md
- Network accessline 24
[Documentation index](https://c15t.com/docs/llms.txt) · [Full Markdown context](https://c15t.com/llms-full.txt). Prefer the index and individual pages for focused tasks.
packages/scripts/docs/integrations/building-integrations.md
- Network accessline 18
id: 'example-analytics', category: 'measurement', src: 'https://analytics.example.com/sdk.js', - Network accessline 19
category: 'measurement', src: 'https://analytics.example.com/sdk.js', onLoad() { - Network accessline 20
src: 'https://analytics.example.com/sdk.js', - Network accessline 69
id: 'example-consent-mode', category: 'marketing', src: 'https://tags.example.com/tag.js', - Network accessline 70
category: 'marketing', src: 'https://tags.example.com/tag.js', alwaysLoad: true, - Network accessline 71
src: 'https://tags.example.com/tag.js', - Network accessline 97
id: 'example-pixel', category: 'marketing', src: 'https://pixel.example.com/pixel.js', - Network accessline 98
category: 'marketing', src: 'https://pixel.example.com/pixel.js', persistAfterConsentRevoked: true, - Network accessline 99
src: 'https://pixel.example.com/pixel.js',
packages/scripts/docs/integrations/cloudflare-zaraz.md
- Network accessline 40
after the first synchronization. DOM-ready, timer and click triggers you add in Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 41
Zaraz can still run before the bridge starts; audit them. Cloudflare documents [purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) and [pageview settings](https://developers.cloudflare.com/zaraz/reference/setti - Network accessline 42
[purpose assignment](https://developers.cloudflare.com/zaraz/consent-management/) - Network accessline 43
and [pageview settings](https://developers.cloudflare.com/zaraz/reference/settings/). - Network accessline 73
for tools that Zaraz already runs, including a separate `@c15t/integrations` helper for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) - Network accessline 74
for the same tool. If Zaraz auto-injection is off, load [Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) once. - Network accessline 75
[Zaraz manually](https://developers.cloudflare.com/zaraz/advanced/load-zaraz-manually/) - Network accessline 80
Complete your [framework quickstart](https://c15t.com/docs/frameworks) first. Keep its Inth - Network accessline 112
Import the configuration into your root route and pass it to the existing `ConsentRoot` as a top-level prop. Keep the loader from the [TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 114
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 138
`mode` is the `manifest()` value from the [React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 139
[React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 184
Add the scripts to the client entrypoint from the [Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 185
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 218
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart). - Network accessline 223
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 224
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart).
packages/scripts/docs/integrations/google-maps.md
- Network accessline 28
export const embedCategory = 'functionality' as const; export const embedURL = 'https://www.google.com/maps/embed?pb=YOUR_EMBED_PARAMETERS'; - Network accessline 29
export const embedURL = 'https://www.google.com/maps/embed?pb=YOUR_EMBED_PARAMETERS'; export const embedTitle = 'Map showing our office location'; - Network accessline 30
'https://www.google.com/maps/embed?pb=YOUR_EMBED_PARAMETERS'; - Network accessline 40
Create `src/embed-config.ts` using the configuration on this page, then select your framework. Keep the existing [consent setup](https://c15t.com/docs/frameworks), its policy - Network accessline 41
your framework. Keep the existing [consent setup](https://c15t.com/docs/frameworks), its policy
packages/scripts/docs/integrations/google-tag-manager.md
- Network accessline 49
Complete your [framework quickstart](https://c15t.com/docs/frameworks) first. Keep its Inth - Network accessline 81
Import the configuration into your root route and pass it to the existing `ConsentRoot` as a top-level prop. Keep the loader from the [TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 83
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 107
`mode` is the `manifest()` value from the [React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 108
[React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 153
Add the scripts to the client entrypoint from the [Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 154
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 187
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart). - Network accessline 192
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 193
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 315
`gtag('consent', 'update', ...)`. Google's tags then adjust what they store and send; see Google's [Consent Mode overview](https://developers.google.com/tag-platform/security/concepts/consent-mode). - Network accessline 317
[Consent Mode overview](https://developers.google.com/tag-platform/security/concepts/consent-mode). - Network accessline 371
1. In GTM, open Templates, search the gallery for **c15t Consent Management** and add it. If it is not listed yet, download [`template.tpl`](https://github.com/c15t/c15t/blob/canary/packages/browser/gtm-template/template.tpl), - Network accessline 372
Management** and add it. If it is not listed yet, download [`template.tpl`](https://github.com/c15t/c15t/blob/canary/packages/browser/gtm-template/template.tpl), then under Tag Templates choose New, open the ⋮ menu, choose Import and - Network accessline 373
[`template.tpl`](https://github.com/c15t/c15t/blob/canary/packages/browser/gtm-template/template.tpl), - Network accessline 377
trigger, so it runs before your other tags. 3. Set **c15t script URL** to one of: * `https://your-project.inth.app/c15t.js` for an Inth project, which - Network accessline 378
3. Set **c15t script URL** to one of: * `https://your-project.inth.app/c15t.js` for an Inth project, which serves the script with its backend URL already set. - Network accessline 379
* `https://your-project.inth.app/c15t.js` for an Inth project, which - Network accessline 380
serves the script with its backend URL already set. * `https://cdn.jsdelivr.net/npm/@c15t/browser@<version>/dist/c15t.js`, with **Backend URL** set to your backend. The tag fails without it. - Network accessline 381
* `https://cdn.jsdelivr.net/npm/@c15t/browser@<version>/dist/c15t.js`, - Network accessline 382
with **Backend URL** set to your backend. The tag fails without it. * `https://cdn.jsdelivr.net/npm/@c15t/browser@<version>/dist/c15t.local.js` for local mode, with **Backend URL** left blank. This file needs - Network accessline 383
* `https://cdn.jsdelivr.net/npm/@c15t/browser@<version>/dist/c15t.local.js`
packages/scripts/docs/integrations/google-tag.md
- Network accessline 46
Complete your [framework quickstart](https://c15t.com/docs/frameworks) first. Keep its Inth - Network accessline 78
Import the configuration into your root route and pass it to the existing `ConsentRoot` as a top-level prop. Keep the loader from the [TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 80
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 104
`mode` is the `manifest()` value from the [React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 105
[React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 150
Add the scripts to the client entrypoint from the [Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 151
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 184
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart). - Network accessline 189
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 190
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 302
`gtag('consent', 'update', ...)`. Google's tags then adjust what they store and send; see Google's [Consent Mode overview](https://developers.google.com/tag-platform/security/concepts/consent-mode). - Network accessline 304
[Consent Mode overview](https://developers.google.com/tag-platform/security/concepts/consent-mode).
packages/scripts/docs/integrations/intercom.md
- Network accessline 39
Complete your [framework quickstart](https://c15t.com/docs/frameworks) first. Keep its Inth - Network accessline 71
Import the configuration into your root route and pass it to the existing `ConsentRoot` as a top-level prop. Keep the loader from the [TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 73
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 97
`mode` is the `manifest()` value from the [React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 98
[React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 143
Add the scripts to the client entrypoint from the [Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 144
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 177
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart). - Network accessline 182
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 183
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 244
| ----------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | | `appId` | Required - Network accessline 245
| `appId` | Required | Sets `app_id` and the loader URL. The helper trims it. Empty or whitespace-only values log an error and the script does not load. | | `apiBase` | `https://api-iam.interco - Network accessline 246
| `apiBase` | `https://api-iam.intercom.io` | Regional API base. `INTERCOM_API_BASES` from `@c15t/integrations/intercom` lists `us`, `eu` and `au`. | - Network accessline 248
| `scriptSrc` | `https://widget.intercom.io/widget/<appId>` | Loader URL override. A blank value falls back to the default. |
packages/scripts/docs/integrations/meta-pixel.md
- Network accessline 40
Complete your [framework quickstart](https://c15t.com/docs/frameworks) first. Keep its Inth - Network accessline 72
Import the configuration into your root route and pass it to the existing `ConsentRoot` as a top-level prop. Keep the loader from the [TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 74
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 98
`mode` is the `manifest()` value from the [React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 99
[React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 144
Add the scripts to the client entrypoint from the [Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 145
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 178
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart). - Network accessline 183
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 184
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 248
| `trackPageView` | `true` | Queues `fbq('track', 'PageView')` after `init`. Set `false` to send page views yourself. - Network accessline 250
| `scriptSrc` | `https://connect.facebook.net/en_US/fbevents.js` | Loader URL override. A blank value falls back to the default.
packages/scripts/docs/integrations/openai-pixel.md
- Network accessline 43
Complete your [framework quickstart](https://c15t.com/docs/frameworks) first. Keep its Inth - Network accessline 75
Import the configuration into your root route and pass it to the existing `ConsentRoot` as a top-level prop. Keep the loader from the [TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 77
[TanStack Start quickstart](https://c15t.com/docs/frameworks/tanstack-start/quickstart): - Network accessline 101
`mode` is the `manifest()` value from the [React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 102
[React quickstart](https://c15t.com/docs/frameworks/react/quickstart). Keep the banner, - Network accessline 147
Add the scripts to the client entrypoint from the [Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 148
[Astro quickstart](https://c15t.com/docs/frameworks/astro/quickstart), `src/c15t.client.ts`, - Network accessline 181
Retain the styles and consent UI from the [Svelte quickstart](https://c15t.com/docs/frameworks/svelte/quickstart). - Network accessline 186
Add the scripts to the existing `ConsentRoot` in the root layout. Keep the handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 187
handle and the layout load from the [SvelteKit quickstart](https://c15t.com/docs/frameworks/sveltekit/quickstart). - Network accessline 250
| `debug` | `false` | Logs SDK activity, including queued and dropped events, to the browser console. - Network accessline 252
| `scriptSrc` | `https://bzrcdn.openai.com/sdk/oaiq.min.js` | SDK URL override. A blank value falls back to the default. - Network accessline 254
c15t forwards `user` unchanged. Normalize and hash identifiers yourself as OpenAI's [user data rules](https://developers.openai.com/ads/measurement-pixel#send-user-data) - Network accessline 255
OpenAI's [user data rules](https://developers.openai.com/ads/measurement-pixel#send-user-data) describe. If user data arrives after initialization, call - Network accessline 256
[user data rules](https://developers.openai.com/ads/measurement-pixel#send-user-data) - Network accessline 307
Set `debug: true` while you test. After you allow marketing, `oaiq.min.js` loads from `bzrcdn.openai.com`. Trigger one guarded event and check that a request to `https://bzr.openai.com/v1/sdk/events` succeeds and the event - Network accessline 308
loads from `bzrcdn.openai.com`. Trigger one guarded event and check that a request to `https://bzr.openai.com/v1/sdk/events` succeeds and the event appears in Event Stream in Ads Manager. An accepted request confirms delivery, - Network accessline 309
request to `https://bzr.openai.com/v1/sdk/events` succeeds and the event - Network accessline 314
If your site sets a Content Security Policy, allow `https://bzrcdn.openai.com` - Network accessline 315
in `script-src`, both `https://bzr.openai.com` and `https://bzrcdn.openai.com` - Network accessline 316
in `connect-src`, and `https://bzr.openai.com` in `img-src`.
packages/scripts/docs/integrations/overview.md
- Network accessline 14
Each vendor helper in `@c15t/integrations` returns a script configuration that you register with your c15t provider. Importing a helper installs nothing on its own. Set up consent with your [framework quickstart](https://c15t.com/docs/frame - Network accessline 15
register with your c15t provider. Importing a helper installs nothing on its own. Set up consent with your [framework quickstart](https://c15t.com/docs/frameworks) first, then follow the vendor guide. - Network accessline 16
own. Set up consent with your [framework quickstart](https://c15t.com/docs/frameworks) first, - Network accessline 191
| Framework | Vendor consent | Clear on revocation | | -------------- | -------------------------- - Network accessline 192
| -------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | Next.js | [Vendor consent](https://c - Network accessline 193
| Next.js | [Vendor consent](https://c15t.com/docs/frameworks/next/vendor-consent) | [Clear on revocation](https://c15t.com/docs/frameworks/next/clear-on-revocation) | - Network accessline 194
| TanStack Start | [Vendor consent](https://c15t.com/docs/frameworks/tanstack-start/vendor-consent) | [Clear on revocation](https://c15t.com/docs/frameworks/tanstack-start/clear-on-revocation) | - Network accessline 195
| React | [Vendor consent](https://c15t.com/docs/frameworks/react/vendor-consent) | [Clear on revocation](https://c15t.com/docs/frameworks/react/clear-on-revocation) | - Network accessline 196
| Nuxt | [Vendor consent](https://c15t.com/docs/frameworks/nuxt/vendor-consent) | [Clear on revocation](https://c15t.com/docs/frameworks/nuxt/clear-on-revocation) | - Network accessline 197
| Vue | [Vendor consent](https://c15t.com/docs/frameworks/vue/vendor-consent) | [Clear on revocation](https://c15t.com/docs/frameworks/vue/clear-on-revocation) | - Network accessline 198
| Astro | [Vendor consent](https://c15t.com/docs/frameworks/astro/vendor-consent) | [Clear on revocation](https://c15t.com/docs/frameworks/astro/clear-on-revocation) | - Network accessline 199
| Svelte | [Vendor consent](https://c15t.com/docs/frameworks/svelte/vendor-consent) | [Clear on revocation](https://c15t.com/docs/frameworks/svelte/clear-on-revocation) | - Network accessline 200
| SvelteKit | [Vendor consent](https://c15t.com/docs/frameworks/sveltekit/vendor-consent) | [Clear on revocation](https://c15t.com/docs/frameworks/sveltekit/clear-on-revocation) | - Network accessline 201
| HTML | [Vendor consent](https://c15t.com/docs/frameworks/html/vendor-consent) | [Clear on revocation](https://c15t.com/docs/frameworks/html/clear-on-revocation) | - Network accessline 202
| JavaScript | [Vendor consent](https://c15t.com/docs/frameworks/javascript/vendor-consent) | [Clear on revocation](https://c15t.com/docs/frameworks/javascript/clear-on-revocation) |
packages/scripts/package.json
- Executable scriptline 1
Executable file - Network accessline 3
"version": "3.1.2", "description": "Deprecated v3 compatibility package for @c15t/integrations. Migrate before v4.", "homepage": "https://c15t.com/docs/cli/commands/codemods#rename-c15tscripts-imports", - Network accessline 4
"description": "Deprecated v3 compatibility package for @c15t/integrations. Migrate before v4.", "homepage": "https://c15t.com/docs/cli/commands/codemods#rename-c15tscripts-imports", "bugs": { - Network accessline 5
"homepage": "https://c15t.com/docs/cli/commands/codemods#rename-c15tscripts-imports", - Network accessline 6
"bugs": { "url": "https://github.com/c15t/c15t/issues" }, - Network accessline 7
"url": "https://github.com/c15t/c15t/issues" - Network accessline 10
"repository": { "type": "git", "url": "https://github.com/c15t/c15t.git", - Network accessline 11
"type": "git", "url": "https://github.com/c15t/c15t.git", "directory": "packages/scripts" - Network accessline 12
"url": "https://github.com/c15t/c15t.git",
packages/scripts/readme.json
- Network accessline 2
"title": "@c15t/scripts: v3 compatibility package", "description": "Deprecated compatibility package for @c15t/integrations. Existing imports keep working throughout v3. Compatibility ends in v4.", "docsLink": "https://c15t.com/docs/cli/c - Network accessline 3
"description": "Deprecated compatibility package for @c15t/integrations. Existing imports keep working throughout v3. Compatibility ends in v4.", "docsLink": "https://c15t.com/docs/cli/commands/codemods#rename-c15tscripts-imports", "showC - Network accessline 4
"docsLink": "https://c15t.com/docs/cli/commands/codemods#rename-c15tscripts-imports",
packages/scripts/vitest.config.ts
- Executable scriptline 1
Executable file
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 2 facts
- Contacts c15t.com, which SKILL.md, the README and the plugin manifest do not mentionbrowser/package.json:32High confidence
- Contacts github.com, which SKILL.md, the README and the plugin manifest do not mentionbrowser/package.json:34High confidence
Signal confidence: 498 facts
- Network access in prose of documentationbrowser/AGENTS.md:22Low confidence
- Network access in prose of documentationbrowser/CHANGELOG.md:346Low confidence
- Network access in prose of documentationbrowser/CHANGELOG.md:347Low confidence
- Network access in prose of documentationbrowser/CHANGELOG.md:348Low confidence
- Network access in prose of documentationbrowser/CHANGELOG.md:424Low confidence
- Network access in prose of documentationbrowser/CHANGELOG.md:425Low confidence
- Network access in prose of documentationbrowser/CHANGELOG.md:426Low confidence
- Network access in prose of documentationbrowser/CHANGELOG.md:437Low confidence
- Network access in prose of documentationbrowser/CHANGELOG.md:438Low confidence
- Network access in code of documentationbrowser/CHANGELOG.md:1095Low confidence
- Network access in prose of documentationbrowser/CHANGELOG.md:1309Low confidence
- Network access in prose of documentationbrowser/README.md:1Low confidence
- Network access in prose of documentationbrowser/README.md:2Low confidence
- Access to secrets in prose of documentationbrowser/README.md:10Low confidence
- Network access in prose of documentationbrowser/README.md:12Low confidence
- Network access in prose of documentationbrowser/README.md:13Low confidence
- Network access in prose of documentationbrowser/README.md:14Low confidence
- Network access in prose of documentationbrowser/README.md:15Low confidence
- Network access in prose of documentationbrowser/README.md:16Low confidence
- Network access in prose of documentationbrowser/README.md:17Low confidence
- Network access in prose of documentationbrowser/README.md:18Low confidence
- Network access in prose of documentationbrowser/README.md:23Low confidence
- Network access in prose of documentationbrowser/README.md:37Low confidence
- Network access in prose of documentationbrowser/README.md:38Low confidence
- Network access in code of documentationbrowser/README.md:45Low confidence
- Network access in code of documentationbrowser/README.md:46Low confidence
- Network access in prose of documentationbrowser/README.md:63Low confidence
- Network access in prose of documentationbrowser/README.md:65Low confidence
- Network access in prose of documentationbrowser/README.md:78Low confidence
- Network access in prose of documentationbrowser/README.md:86Low confidence
- Network access in prose of documentationbrowser/README.md:93Low confidence
- Network access in prose of documentationbrowser/README.md:94Low confidence
- Network access in prose of documentationbrowser/README.md:95Low confidence
- Network access in prose of documentationbrowser/README.md:103Low confidence
- Network access in prose of documentationbrowser/README.md:107Low confidence
- Network access in prose of documentationbrowser/README.md:108Low confidence
- Network access in prose of documentationbrowser/README.md:109Low confidence
- Network access in prose of documentationbrowser/README.md:114Low confidence
- Network access in prose of documentationbrowser/README.md:115Low confidence
- Network access in prose of documentationbrowser/README.md:119Low confidence
- Network access in prose of documentationbrowser/README.md:127Low confidence
- Network access in prose of documentationbrowser/README.md:131Low confidence
- Network access in prose of documentationbrowser/docs/integrations/cloudflare-zaraz.md:40Low confidence
- Network access in prose of documentationbrowser/docs/integrations/cloudflare-zaraz.md:41Low confidence
- Network access in prose of documentationbrowser/docs/integrations/cloudflare-zaraz.md:42Low confidence
- Network access in prose of documentationbrowser/docs/integrations/cloudflare-zaraz.md:43Low confidence
- Network access in prose of documentationbrowser/docs/integrations/cloudflare-zaraz.md:73Low confidence
- Network access in prose of documentationbrowser/docs/integrations/cloudflare-zaraz.md:74Low confidence
- Network access in prose of documentationbrowser/docs/integrations/cloudflare-zaraz.md:75Low confidence
- Network access in prose of documentationbrowser/docs/integrations/cloudflare-zaraz.md:80Low confidence
and 448 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Path .claude/skills/c15t | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest .agents/skills/vercel-composition-patterns/AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Native | Path .cursor/mcp.json | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md packages/browser/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Native | Path .github/skills/c15t | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md packages/browser/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Explore alternatives and comparisons
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/c15t-c15t/)