#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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

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.

Compare on GitHub

View on GitHubAdd to my skills

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>/
2kGitHub stars
2stars in 7 days
6skills in this repository
314commits in 30 days

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

Aug 2, 2026Nov 5, 20262,019

Individual skills in this repository

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 tokens

Always available to the agent

SKILL.md

625 tokens

When the skill is activated

Reference documents

38,943 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Before writing code
  2. Rules
  3. Customize with the smallest change
  4. Finish with a check

Scripts executed separately

  • package.json
  • rslib.config.ts
  • scripts/build-styles.ts
  • scripts/copy-styles.ts
  • scripts/iab-bundle-boundary.ts
  • scripts/mode-bundle-boundary.ts
  • scripts/prune-stylesheet.ts
  • src/__tests__/auto-init.test.ts
  • src/__tests__/banner-corner.browser.test.ts
  • src/__tests__/clear-on-revocation.test.ts
  • src/__tests__/client-lifecycle.test.ts
  • src/__tests__/client.test.ts
  • src/__tests__/conformance.test.ts
  • src/__tests__/csp-nonce.browser.test.ts
  • src/__tests__/devtools.test.ts
  • src/__tests__/dialog-motion.browser.test.ts
  • src/__tests__/dialog-surface.test.ts
  • src/__tests__/esm-modes.test.ts
  • src/__tests__/external-source.test.ts
  • src/__tests__/fixtures/factory-init.ts
  • src/__tests__/fixtures/storage-sync-page.ts
  • src/__tests__/fixtures/subject-conflict-page.ts
  • src/__tests__/fixtures/ui-csp-page.ts
  • src/__tests__/gated-scripts.browser.test.ts
  • src/__tests__/gated-scripts.test.ts
  • src/__tests__/global-events.test.ts
  • src/__tests__/gpp.test.ts
  • src/__tests__/gtm-template.test.ts
  • src/__tests__/host-visibility.browser.test.ts
  • src/__tests__/iab-additional-consent.test.ts
  • src/__tests__/iab-config.test.ts
  • src/__tests__/iab-disclosures.test.ts
  • src/__tests__/iab-policy.test.ts
  • src/__tests__/iab-toggles.test.ts
  • src/__tests__/iab-unavailable.test.ts
  • src/__tests__/iab.browser.test.ts
  • src/__tests__/iab.test.ts
  • src/__tests__/legal-links.test.ts
  • src/__tests__/manifest.test.ts
  • src/__tests__/manual-init.test.ts
  • src/__tests__/mode-entries.test.ts
  • src/__tests__/mode-globals.test.ts
  • src/__tests__/no-records-warning.test.ts
  • src/__tests__/part-styling.browser.test.ts
  • src/__tests__/postcss-tailwind3-entry.test.ts
  • src/__tests__/queue-replay.test.ts
  • src/__tests__/storage-sync.browser.test.ts
  • src/__tests__/stylesheet-prune.test.ts
  • src/__tests__/subject-conflict.browser.test.ts
  • src/__tests__/subject-id.test.ts
  • src/__tests__/switch-direction.browser.test.ts
  • src/__tests__/trigger-devtools.test.ts
  • src/__tests__/trigger-motion.browser.test.ts
  • src/__tests__/ui.test.ts
  • src/__tests__/vendor-consent.test.ts
  • src/auto-init.ts
  • src/client-base.ts
  • src/client.ts
  • src/create-runtime-static.ts
  • src/create-runtime.ts
  • src/deferred.ts
  • src/devtools-mount.ts
  • src/devtools.ts
  • src/entries/cdn-devtools.ts
  • src/entries/cdn-gpp.ts
  • src/entries/cdn-headless.ts
  • src/entries/cdn-iab.ts
  • src/entries/cdn-local.ts
  • src/entries/cdn-offline.ts
  • src/entries/cdn.ts
  • src/gated-scripts.ts
  • src/global-base.ts
  • src/global.ts
  • src/gpp.ts
  • src/has-decided.ts
  • src/headless.ts
  • src/hosted-client.ts
  • src/hosted-global.ts
  • src/hosted.ts
  • src/iab.ts
  • src/iab/mount.ts
  • src/iab/preferences.ts
  • src/iab/styles.ts
  • src/iab/surface.ts
  • src/iab/vendor-disclosures.ts
  • src/index.ts
  • src/no-records-warning.ts
  • src/offline-client.ts
  • src/offline-global.ts
  • src/offline.ts
  • src/policy-rules.ts
  • src/postcss-tailwind3.ts
  • src/script-tag-client.ts
  • src/transports/hosted.ts
  • src/transports/manifest.ts
  • src/transports/offline.ts
  • src/types.ts
  • src/ui/actions.ts
  • src/ui/banner.ts
  • src/ui/branding.ts
  • src/ui/copy.ts
  • src/ui/dialog-surface.ts
  • src/ui/dialog.ts
  • src/ui/dom.ts
  • src/ui/mount.ts
  • src/ui/slots.ts
  • src/ui/surface.ts
  • src/ui/trigger-toolbar.ts
  • src/ui/trigger.ts
  • src/ui/vendor-list.ts
  • src/ui/widget.ts
  • vitest.config.ts

Files

  • .gitignoreasset149 bytes
  • AGENTS.mddoc31,435 bytes
  • CHANGELOG.mddoc102,383 bytes
  • README.mddoc10,045 bytes
  • SKILL.mdcore2,765 bytes
  • docs/integrations/cloudflare-zaraz.mddoc15,042 bytes
  • gtm-template/README.mddoc2,071 bytes
  • gtm-template/template.tplasset36,653 bytes
  • knip.jsonasset482 bytes
  • package.jsonruns4,146 bytes
  • readme.jsonasset3,714 bytes
  • rslib.config.tsruns4,190 bytes
  • scripts/build-styles.tsruns4,059 bytes
  • scripts/copy-styles.tsruns979 bytes
  • scripts/iab-bundle-boundary.tsruns726 bytes
  • scripts/mode-bundle-boundary.tsruns2,591 bytes
  • scripts/prune-stylesheet.tsruns6,258 bytes
  • src/__tests__/auto-init.test.tsruns10,958 bytes
  • src/__tests__/banner-corner.browser.test.tsruns1,971 bytes
  • src/__tests__/clear-on-revocation.test.tsruns2,937 bytes
  • src/__tests__/client-lifecycle.test.tsruns2,756 bytes
  • src/__tests__/client.test.tsruns18,760 bytes
  • src/__tests__/conformance.test.tsruns2,663 bytes
  • src/__tests__/csp-nonce.browser.test.tsruns1,990 bytes
  • src/__tests__/devtools.test.tsruns3,291 bytes
  • src/__tests__/dialog-motion.browser.test.tsruns2,069 bytes
  • src/__tests__/dialog-surface.test.tsruns3,228 bytes
  • src/__tests__/esm-modes.test.tsruns5,037 bytes
  • src/__tests__/external-source.test.tsruns1,809 bytes
  • src/__tests__/fixtures/factory-init.tsruns1,692 bytes
  • src/__tests__/fixtures/gated-scripts-csp.htmlasset226 bytes
  • src/__tests__/fixtures/gated-scripts-strict-dynamic.htmlasset609 bytes
  • src/__tests__/fixtures/storage-sync-page.tsruns1,312 bytes
  • src/__tests__/fixtures/storage-sync.htmlasset485 bytes
  • src/__tests__/fixtures/subject-conflict-page.tsruns3,326 bytes
  • src/__tests__/fixtures/subject-conflict.htmlasset489 bytes
  • src/__tests__/fixtures/ui-csp-page.tsruns1,419 bytes
  • src/__tests__/fixtures/ui-csp.htmlasset323 bytes
  • src/__tests__/gated-scripts.browser.test.tsruns4,437 bytes
  • src/__tests__/gated-scripts.test.tsruns12,146 bytes
  • src/__tests__/global-events.test.tsruns7,130 bytes
  • src/__tests__/gpp.test.tsruns4,001 bytes
  • src/__tests__/gtm-template.test.tsruns24,714 bytes
  • src/__tests__/host-visibility.browser.test.tsruns1,755 bytes
  • src/__tests__/iab-additional-consent.test.tsruns6,090 bytes
  • src/__tests__/iab-config.test.tsruns6,174 bytes
  • src/__tests__/iab-disclosures.test.tsruns6,825 bytes
  • src/__tests__/iab-policy.test.tsruns7,082 bytes
  • src/__tests__/iab-toggles.test.tsruns9,029 bytes
  • src/__tests__/iab-unavailable.test.tsruns5,590 bytes
  • src/__tests__/iab.browser.test.tsruns4,521 bytes
  • src/__tests__/iab.test.tsruns15,944 bytes
  • src/__tests__/legal-links.test.tsruns4,437 bytes
  • src/__tests__/manifest.test.tsruns23,124 bytes
  • src/__tests__/manual-init.test.tsruns5,845 bytes
  • src/__tests__/mode-entries.test.tsruns16,515 bytes
  • src/__tests__/mode-globals.test.tsruns13,128 bytes
  • src/__tests__/no-records-warning.test.tsruns4,108 bytes
  • src/__tests__/part-styling.browser.test.tsruns5,149 bytes
  • src/__tests__/postcss-tailwind3-entry.test.tsruns829 bytes
  • src/__tests__/queue-replay.test.tsruns8,391 bytes
  • src/__tests__/storage-sync.browser.test.tsruns3,301 bytes
  • src/__tests__/stylesheet-prune.test.tsruns5,230 bytes
  • src/__tests__/subject-conflict.browser.test.tsruns4,460 bytes
  • src/__tests__/subject-id.test.tsruns6,407 bytes
  • src/__tests__/switch-direction.browser.test.tsruns2,736 bytes
  • src/__tests__/trigger-devtools.test.tsruns6,582 bytes
  • src/__tests__/trigger-motion.browser.test.tsruns1,917 bytes
  • src/__tests__/ui.test.tsruns33,185 bytes
  • src/__tests__/vendor-consent.test.tsruns14,453 bytes
  • src/auto-init.tsruns7,640 bytes
  • src/client-base.tsruns20,089 bytes
  • src/client.tsruns1,722 bytes
  • src/create-runtime-static.tsruns1,728 bytes
  • src/create-runtime.tsruns1,486 bytes
  • src/deferred.tsruns1,119 bytes
  • src/devtools-mount.tsruns2,004 bytes
  • src/devtools.tsruns1,818 bytes
  • src/entries/cdn-devtools.tsruns2,613 bytes
  • src/entries/cdn-gpp.tsruns1,568 bytes
  • src/entries/cdn-headless.tsruns426 bytes
  • src/entries/cdn-iab.tsruns757 bytes
  • src/entries/cdn-local.tsruns573 bytes
  • src/entries/cdn-offline.tsruns811 bytes
  • src/entries/cdn.tsruns613 bytes
  • src/gated-scripts.tsruns10,779 bytes
  • src/global-base.tsruns18,555 bytes
  • src/global.tsruns1,332 bytes
  • src/gpp.tsruns1,406 bytes
  • src/has-decided.tsruns510 bytes
  • src/headless.tsruns2,736 bytes
  • src/hosted-client.tsruns1,890 bytes
  • src/hosted-global.tsruns1,057 bytes
  • src/hosted.tsruns2,115 bytes
  • src/iab.tsruns1,622 bytes
  • src/iab/mount.tsruns770 bytes
  • src/iab/preferences.tsruns19,251 bytes
  • src/iab/styles.tsruns2,336 bytes
  • src/iab/surface.tsruns12,858 bytes
  • src/iab/vendor-disclosures.tsruns5,504 bytes
  • src/index.tsruns3,000 bytes
  • src/no-records-warning.tsruns1,648 bytes
  • src/offline-client.tsruns1,850 bytes
  • src/offline-global.tsruns1,161 bytes
  • src/offline.tsruns2,187 bytes
  • src/policy-rules.tsruns1,095 bytes
  • src/postcss-tailwind3.tsruns616 bytes
  • src/script-tag-client.tsruns2,790 bytes
  • src/transports/hosted.tsruns2,431 bytes
  • src/transports/manifest.tsruns3,375 bytes
  • src/transports/offline.tsruns324 bytes
  • src/types.tsruns21,653 bytes
  • src/ui/actions.tsruns3,465 bytes
  • src/ui/banner.tsruns9,895 bytes
  • src/ui/branding.tsruns5,370 bytes
  • src/ui/copy.tsruns1,717 bytes
  • src/ui/dialog-surface.tsruns3,749 bytes
  • src/ui/dialog.tsruns9,392 bytes
  • src/ui/dom.tsruns5,148 bytes
  • src/ui/mount.tsruns9,207 bytes
  • src/ui/slots.tsruns3,153 bytes
  • src/ui/surface.tsruns2,908 bytes
  • src/ui/trigger-toolbar.tsruns4,943 bytes
  • src/ui/trigger.tsruns11,171 bytes
  • src/ui/vendor-list.tsruns10,421 bytes
  • src/ui/widget.tsruns13,465 bytes
  • tsconfig.jsonasset349 bytes
  • vitest.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 GitHub

Skills 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

  1. #516 on Oct 31
  2. #518 on Nov 1
  3. #524 on Nov 2
  4. #526 on Nov 3
  5. #528 from Nov 4 to Nov 5
  6. #529 since Nov 6
68 earlier periods
  1. #370 on Aug 2
  2. #387 on Aug 6
  3. #380 on Aug 9
  4. #392 on Aug 10
  5. #393 on Aug 11
  6. #386 on Aug 12
  7. #392 on Aug 13
  8. #394 on Aug 14
  9. #392 on Aug 15
  10. #399 on Aug 16
  11. #409 on Aug 19
  12. #406 on Aug 21
  13. #412 on Aug 23
  14. #409 on Aug 24
  15. #414 on Aug 25
  16. #413 on Aug 26
  17. #422 on Aug 28
  18. #416 on Aug 29
  19. #427 on Sep 1
  20. #425 on Sep 3
  21. #414 on Sep 4
  22. #429 on Sep 7
  23. #433 from Sep 8 to Sep 9
  24. #434 from Sep 10 to Sep 11
  25. #431 on Sep 12
  26. #444 on Sep 14
  27. #441 on Sep 15
  28. #446 on Sep 16
  29. #440 on Sep 17
  30. #448 on Sep 18
  31. #447 on Sep 20
  32. #450 on Sep 21
  33. #455 on Sep 22
  34. #447 on Sep 23
  35. #441 on Sep 24
  36. #440 on Sep 25
  37. #435 on Sep 26
  38. #448 on Sep 27
  39. #456 on Sep 28
  40. #461 on Sep 29
  41. #459 on Sep 30
  42. #456 on Oct 1
  43. #451 on Oct 2
  44. #440 on Oct 3
  45. #434 on Oct 4
  46. #446 on Oct 5
  47. #456 on Oct 6
  48. #460 on Oct 7
  49. #469 on Oct 8
  50. #470 on Oct 9
  51. #464 on Oct 10
  52. #466 on Oct 11
  53. #472 on Oct 12
  54. #467 on Oct 13
  55. #471 on Oct 14
  56. #473 on Oct 15
  57. #478 on Oct 16
  58. #468 on Oct 17
  59. #472 on Oct 18
  60. #486 from Oct 19 to Oct 20
  61. #490 on Oct 21
  62. #487 on Oct 22
  63. #480 on Oct 23
  64. #469 on Oct 24
  65. #508 on Oct 25
  66. #513 on Oct 28
  67. #514 on Oct 29
  68. #515 on Oct 30

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 3, 2026

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

  • Network accessline 1
    { 	"$schema": "https://unpkg.com/knip@latest/schema.json",
  • Network accessline 2
    "$schema": "https://unpkg.com/knip@latest/schema.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

  • Executable scriptline 1
    Executable file
  • Network accessline 15
    const SVG_NS = 'http://www.w3.org/2000/svg';

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

  • Executable scriptline 1
    Executable file
  • Network accessline 6
    const SVG_NS = 'http://www.w3.org/2000/svg';

packages/browser/src/ui/trigger.ts

  • Executable scriptline 1
    Executable file

packages/browser/src/ui/vendor-list.ts

  • Executable scriptline 1
    Executable file
  • Network accessline 8
    const SVG_NS = 'http://www.w3.org/2000/svg';

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

  • Network accessline 1
    { 	"$schema": "https://unpkg.com/knip@latest/schema.json",
  • Network accessline 2
    "$schema": "https://unpkg.com/knip@latest/schema.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

  • Network accessline 1
    { 	"$schema": "https://unpkg.com/knip@latest/schema.json",
  • Network accessline 2
    "$schema": "https://unpkg.com/knip@latest/schema.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

  • Executable scriptline 1
    Executable file
  • Network accessline 15
    const META = { id: 89, name: 'Meta', policyUrl: 'https://meta.example/p' };
  • Network accessline 16
    const reference = { providers: [89], url: 'https://lists.example/ac' };

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

  • Executable scriptline 1
    Executable file
  • Network accessline 6
    const url = 'https://gvl.test/list';

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

  • Executable scriptline 1
    Executable file
  • Access to secretsline 37
    [Credential-related source omitted]

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

  • Executable scriptline 1
    Executable file
  • Access to secretsline 208
    [Credential-related source omitted]
  • Access to secretsline 209
    [Credential-related source omitted]

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

  • Executable scriptline 1
    Executable file
  • Network accessline 345
    input, 					method, 					replay: () => resolve(window.fetch(input, init)),
  • Network accessline 346
    method, 					replay: () => resolve(window.fetch(input, init)), 				});
  • Network accessline 347
    replay: () => resolve(window.fetch(input, init)),

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

  • Executable scriptline 1
    Executable file
  • Access to secretsline 235
    [Credential-related source omitted]

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

  • Executable scriptline 1
    Executable file
  • Access to secretsline 4
    [Credential-related source omitted]
  • Access to secretsline 250
    [Credential-related source omitted]

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

  • Executable scriptline 1
    Executable file
  • Access to secretsline 545
    [Credential-related source omitted]

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

  • Executable scriptline 1
    Executable file
  • Access to secretsline 69
    [Credential-related source omitted]
  • Access to secretsline 433
    [Credential-related source omitted]
  • Access to secretsline 644
    [Credential-related source omitted]

packages/core/src/modules/persistence/record-codec.ts

  • Executable scriptline 1
    Executable file

packages/core/src/modules/persistence/record-storage.ts

  • Executable scriptline 1
    Executable file
  • Access to secretsline 580
    [Credential-related source omitted]
  • Access to secretsline 673
    [Credential-related source omitted]
  • Access to secretsline 703
    [Credential-related source omitted]
  • Access to secretsline 1013
    [Credential-related source omitted]

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

  • Executable scriptline 1
    Executable file
  • Access to secretsline 121
    [Credential-related source omitted]

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

  • Executable scriptline 1
    Executable file
  • Network accessline 12
    category: 'marketing', 	id: 's1', 	src: 'https://example.com/s.js',
  • Network accessline 13
    id: 's1', 	src: 'https://example.com/s.js', };
  • Network accessline 14
    src: 'https://example.com/s.js',

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

  • Executable scriptline 1
    Executable file
  • Network accessline 265
    category: 'marketing', 					id: 'pixel', 					src: 'https://example.com/pixel.js',
  • Network accessline 266
    id: 'pixel', 					src: 'https://example.com/pixel.js', 					vendor: 'pixel-co',
  • Network accessline 267
    src: 'https://example.com/pixel.js',

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

  • Executable scriptline 1
    Executable file
  • Network accessline 23
    test.each(['api/c15t', '', 'https://example.com/api/c15t', 42])(

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

  • Executable scriptline 1
    Executable file
  • Access to secretsline 55
    [Credential-related source omitted]

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

  • Executable scriptline 1
    Executable file
  • Dangerous shell operationline 35
    'ar bg bn cs cy da de el es et fi fr ga gu he hi hr ht hu id is it ja kn ko lb lt lv ml mr ms mt nb nl nn pa pl pt rm ro ru sk sl sv ta te th tr ur vi yi zh'.split(

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

  • Network accessline 1
    { 	"$schema": "https://unpkg.com/knip@latest/schema.json",
  • Network accessline 2
    "$schema": "https://unpkg.com/knip@latest/schema.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

  • Executable scriptline 1
    Executable file
  • Network accessline 34
    category: 'marketing', 		id: 'tag', 		src: 'https://example.com/tag.js',
  • Network accessline 35
    id: 'tag', 		src: 'https://example.com/tag.js', 	},
  • Network accessline 36
    src: 'https://example.com/tag.js',

packages/nextjs/src/__tests__/root-script-loader-preload-consent-source.test.tsx

  • Executable scriptline 1
    Executable file
  • Network accessline 41
    category: 'marketing', 	id: 'pixel', 	src: 'https://example.com/pixel.js',
  • Network accessline 42
    id: 'pixel', 	src: 'https://example.com/pixel.js', };
  • Network accessline 43
    src: 'https://example.com/pixel.js',

packages/nextjs/src/__tests__/root-script-loader-preload-disabled.test.tsx

  • Executable scriptline 1
    Executable file
  • Network accessline 34
    category: 'marketing', 		id: 'pixel', 		src: 'https://example.com/pixel.js',
  • Network accessline 35
    id: 'pixel', 		src: 'https://example.com/pixel.js', 	},
  • Network accessline 36
    src: 'https://example.com/pixel.js',

packages/nextjs/src/__tests__/root-script-loader-preload-side-effects.test.tsx

  • Executable scriptline 1
    Executable file
  • Network accessline 159
    category: 'marketing', 						id: 'pixel', 						src: 'https://example.com/pixel.js',
  • Network accessline 160
    id: 'pixel', 						src: 'https://example.com/pixel.js', 					},
  • Network accessline 161
    src: 'https://example.com/pixel.js',

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

  • Network accessline 1
    { 	"$schema": "https://unpkg.com/knip@latest/schema.json",
  • Network accessline 2
    "$schema": "https://unpkg.com/knip@latest/schema.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

  • Executable scriptline 1
    Executable file
  • Access to secretsline 65
    [Credential-related source omitted]

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

  • Executable scriptline 1
    Executable file
  • Network accessline 36
    ), 						} as never, 						'https://consent.example.com/gvl'
  • Network accessline 37
    } as never, 						'https://consent.example.com/gvl' 					)
  • Network accessline 38
    'https://consent.example.com/gvl'

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

  • Executable scriptline 1
    Executable file
  • Network accessline 42
    const FRAME_URL = 'https://frames.c15t.test/embed';

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

  • Executable scriptline 1
    Executable file
  • Network accessline 25
    const BACKEND = 'https://consent.example/api/c15t';

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

  • Executable scriptline 1
    Executable file
  • Network accessline 136
    category: 'marketing', 		id: 'pixel', 		src: 'https://example.com/pixel.js',
  • Network accessline 137
    id: 'pixel', 		src: 'https://example.com/pixel.js', 	},
  • Network accessline 138
    src: 'https://example.com/pixel.js',

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

  • Executable scriptline 1
    Executable file
  • Network accessline 9
    ) => ( 	<svg 		xmlns="http://www.w3.org/2000/svg"
  • Network accessline 10
    <svg 		xmlns="http://www.w3.org/2000/svg" 		viewBox="0 0 24 24"
  • Network accessline 11
    xmlns="http://www.w3.org/2000/svg"

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

  • Executable scriptline 1
    Executable file
  • Network accessline 114
    try { 		const response = await fetch(`${normalizedURL}/init`, {
  • Network accessline 115
    const response = await fetch(`${normalizedURL}/init`, {

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

and 448 more

Only the first 500 facts are listed.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativePath .claude/skills/c15t.claude/skills/<skill-name>/
CodexNativeManifest .agents/skills/vercel-composition-patterns/AGENTS.md.agents/skills/<skill-name>/
CursorNativePath .cursor/mcp.json.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md packages/browser/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotNativePath .github/skills/c15t.github/skills/<skill-name>/
OpenCodeCompatibleStandard 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.

c15t/c15t: #529 on hotskills, 2k stars

[![c15t/c15t on hotskills](https://hotskills.dev/badge/c15t-c15t.svg)](https://hotskills.dev/skill/c15t-c15t/)