Skip to content

consentpro-types

1.3.0

Minor Changes

  • a580774: Add POST /v3/projects/:id/transfer, which moves a project to another organization after verifying the caller belongs to the target (via the Auth0 Management API, failing closed if it can't be verified). PATCH /v3/projects/:id is now rename-only — display_name is required and org_id is no longer accepted there, so the cross-organization move has a single authorized path.

Patch Changes

  • fecdc78: Drive the custom-site "Powered by Consent Pro" mark from the project's own config.

    The mark was decided entirely by plan tier: the served script inlined window.fs_consent_pro_attribution = true for free-tier sites and nothing else ever set it, so a paid custom site never showed it and the app's "Hide Consent Pro logo" toggle changed nothing outside the in-app preview. Preview links were worse — applyStored reassigns the global from the fetched payload, which never carries attribution, so a preview dropped the mark even on the free tier.

    consentpro-types

    • ConsentProV2RuntimeConfiguration gains hideBranding, carried through to the sanitized client config.

    server

    • projectConfigToRuntime maps banner_settings.hide_branding onto it, so it ships with every publish and with the preview config.

    consentpro-v2

    • Custom sites resolve showAttribution from that config, defaulting to showing the mark. The free tier's license-derived global still wins, so a free site cannot switch it off.
  • d3e426d: Link the custom-site banner to the project's own privacy policy, or show no link at all.

    The custom-platform banner always rendered a dead <a href="#">Privacy Policy</a>: the project's privacy-policy URL never reached the runtime.

    consentpro-dictionary

    • getConsentCopy returns messageHtmlWithoutPrivacyLink alongside messageHtml — the same message with the whole privacy sentence removed, cut from the tokenized template so every locale ends on its own sentence terminator. messageHtml is unchanged.

    server / consentpro-types

    • privacy_page_url maps to legal.privacyPolicyUrl, and sanitizeConfigForClient publishes that one field. cookiePolicyUrl and contactEmail stay server-side.

    consentpro-v2

    • The custom-site banner points the anchor at the configured URL (normalized through new URL() and restricted to http(s), opened in a new tab), and drops the privacy sentence when no URL is configured.
  • d7331e4: Style the preferences toggle and the dialog backdrop from the web app.

    web-app

    • The Open preferences colours card now carries Toggle Inactive Track, Toggle Active Track (the former "Preferences Checkbox"), Toggle Circular Handle and Preferences Overlay. Left on their defaults the columns stay null, so an existing banner looks exactly as before.
    • ColorField takes an alpha prop: an opacity track under the hue slider, a checkerboard behind every swatch, and a hex field that accepts #rrggbbaa. Only the overlay opts in — a colour that paints a surface has nothing to be translucent over.
    • The overlay starts at no backdrop (#00000000). Choosing a colour on a transparent field lands at 20% opacity rather than staying invisible; the opacity track can still take it back to nothing.

    web-components

    • ConsentPreferencesDialog's backdrop default drops from 10% black to transparent: a dialog washes the page only where a site asks for it. The backdrop box is unchanged otherwise, so click-to-close still works, and any site setting --consentpro-color-overlay is unaffected.

    server / consentpro-types

    • checkbox_inactive_color, checkbox_handle_color and preferences_overlay_color are read, validated and saved on banner_settings and banner_instances, and published as checkboxInactive, checkboxHandle and preferencesOverlay. The overlay column validates #rrggbb or #rrggbbaa; the rest stay six digits.

    consentpro-v2

    • Maps those to --consentpro-color-toggle-off, --consentpro-color-toggle-thumb and --consentpro-color-overlay. The handle keeps whatever colour is picked in both switch states — nothing recolours it from the track any more.
  • 2ebb655: Add project-scoped scan schedules on /v3/projects/:id/schedule and a Schedule scan dialog on the Cookies page. Scheduled runs now keep the project UUID so they show up in project scan history.

1.2.1

Patch Changes

  • 6757be6: Honor a GPC signal that post-dates a visitor's stored consent.

    Previously the GPC signal only decided the defaults, so a visitor who consented first and enabled GPC afterwards kept their old consent indefinitely — while the banner still claimed the signal had been honored. The signal is now treated as a live opt-out request that wins over consent saved before it arrived, and a consent given knowingly after the signal was honored wins in turn (CCPA § 7025(c)(3)). The most recent expression of the visitor's preference governs.

    consentpro-v2

    • The consent cookie gains gpcHonoredAt: when the runtime first observed the signal that was still active as of that write. It is stamped on every write made while the signal is present and cleared on writes made while it is absent, which is what distinguishes consent given before the signal from consent given knowingly after it. Browsers expose no "enabled at" timestamp, so this is the only recency information available.
    • On page load, a stored consent that still grants a non-essential category and predates the signal is revoked before blocking, trackers and analytics initialize — so no tracker ever sees the stale consent, and cookies set under the revoked categories are cleaned up on the same load. A consent record is written with action: 'reject_all' and source: 'gpc', and is never collapsed into a consent the visitor gives in the second that follows: a processed opt-out request is a compliance event in its own right, not an intermediate state.
    • The revocation runs only on pages the resolved instance is configured for. On an excluded page nothing can block a tracker or clean up a cookie, so recording an opt-out there would claim an enforcement that never happened; the stored consent is left untouched until the visitor reaches a managed page.
    • Consent records now carry the id, action and source captured when the write happened, instead of reading them from the stores when the debounced request fires. Previously any two writes inside a second could hand the first record the second one's attribution.
    • The banner is re-shown once on the page load where a category was actually revoked, so the visitor is told their saved preferences changed and gets the chance to consent knowingly instead.
    • fs-consent-gpc now reflects whether the signal is being processed, not merely present, and updates live: it flips to "false" the moment a visitor accepts while a signal is active, hiding [fs-consent-element="gpc-honored"] rather than leaving a claim in place that is no longer true. This matters for § 7025(c)(6), which as of 1 January 2026 requires displaying whether the signal was processed.
    • Scope is unchanged: only Opt-Out and Do Not Sell instances. Opt-In consent is never revoked, and fs-consent-gpc stays "false" on those instances: the attribute now tracks the same condition the behavior does, so it never claims a signal was processed where nothing acts on one.
    • A stored consent whose gpcHonoredAt equals its own timestamp counts as a knowing override rather than a consent the signal outranks. The two can only match when they were written together, which a consent predating the signal never is — and a custom integration writing the cookie by hand can land both in the same millisecond.
    • FinsweetConsentPro.consents.set() now stamps action: 'submit' and source: 'api', like every other write path. Previously it inherited whatever wrote the consent before it, which with GPC in play would have recorded a site's own API call as a GPC-driven opt-out. It also means API-driven consent is recorded at all, where before the missing action caused the record to be dropped.

    Existing GPC visitors who had granted consent are opted out once, on their next page view, and see the banner that one time.

    documentation

    • developer/custom-integration.md documents gpcHonoredAt and shows how to carry it forward when writing the cookie by hand. A custom integration that omits the stamp while a signal is active writes a consent that Consent Pro cannot distinguish from one given before the signal, and revokes on the visitor's next Webflow page view.

    consentpro-types / server

    • ConsentSource and ConsentRecordSchema.source accept 'gpc'. The consents endpoint validates against that enum, so without this the GPC records would be rejected and silently dropped.

1.2.0

Minor Changes

  • 55656ae: Add optional public hostname and path prefix so reverse-proxied sites publish a hostname.json for the visitor host and expose the site information the runtime uses to compose public URLs.

    The Webflow domain is unchanged. Custom-domain sites publish publicHostname and, when mounted under a prefix, pathPrefix. The runtime composes these with locale subdirectories and page slugs. Sites without these settings are unaffected.

Patch Changes

  • 4afc228: Remove the dictionary-matched-review confirmation step. Trackers matched against our verified database now publish immediately without requiring manual confirmation, reducing steps to live. The "Confirm matched trackers from our verified database" action item group is removed from the UI, and any pre-existing resolved/unresolved rows of this type stop being surfaced.

1.1.5

Patch Changes

  • 3ea0afe: Ensure a project record per site, and dual-write core config to D1.

    server

    • New services/v2/projects: ensureProject, getProjectUuidBySiteId, linkSiteAuthorizationProject. Project creation is idempotent and race-safe, and revives a soft-deleted project on re-authorization.
    • The Webflow OAuth callback creates the project and stamps it onto the site authorization on first authorization. Failures are logged and never block authorization.
    • Temporary R2 → D1 dual-write (configurator/temporary-d1-mirror): saveCoreConfig and site migration mirror the core runtime config into project_configs, webflow_project_configs, banner_instances, config_providers and config_trackers. R2 stays the source of truth and the mirror soft-fails, so a D1 error can never fail a publish. Sites only begin mirroring once they have a project row, so existing sites stay unmirrored until they re-authorize.
    • project_uuid is stamped on scans, scan schedules, action item resolutions, policy profiles and policy documents, without overwriting a value that is already set.
    • Schema: project_uuid foreign keys move from ON DELETE set null to ON DELETE cascade, and project_configs gains locales.
    • Migrations 0038 (adds project_configs.locales) and 0039 (the foreign key change). 0039 is hand-written rather than drizzle-generated: the generated table rebuild issues DROP TABLE, which on D1 fires the pre-existing policy_documentspolicy_profiles cascade and empties the table, because D1 runs each migration inside a transaction where PRAGMA foreign_keys=OFF is silently ignored. It uses ALTER TABLE DROP COLUMN / ADD COLUMN instead, so no table is ever dropped. Side effect: project_uuid becomes the last column on the six affected tables.

    consentpro-v2

    • The consent cookie is now always written with sameSite: 'lax', and secure is derived from location.protocol instead of configuration. storage.sameSite and storage.secure are no longer read by the v2 runtime.

    consentpro-types

    • ConsentV2TrackerDefinition gains an optional name for cookie trackers and an optional key for local-storage / session-storage trackers.

1.1.4

Patch Changes

  • 3fb6710: UX improvements: regions, banners, and action items.

  • 81c0689: Remove site-level notification recipient lists. Scheduled scans again use a per-schedule email, and transactional emails (exports, proofs, scan updates) go to the signed-in session email.

1.1.3

Patch Changes

  • 2487ddd: feat: report image trackers and cookie attribution

1.1.2

Patch Changes

  • 5407450: fix cookie declaration hydration
  • e46032c: fix: Polish policy status transitions
    • Regenerating a policy now clears the persisted last_status, so policies that previously showed the Not Found status correctly transition back to Ready to Publish / Published once the element is re-injected onto the canvas.
    • Clicking Save as Draft on an already-generated policy (e.g. one with status Ready to Publish) now reverts the document to Draft state by clearing generated_at and last_status.
    • Policies flagged as Not Found are now automatically re-verified against the canvas when the Policies view loads. If the user restored a deleted element outside the view (e.g. via Webflow's undo), the status resets to the resolved value (Ready to Publish / Published / Update Needed) without requiring manual action.

1.1.1

Patch Changes

  • 1a79dde: whitelist _cfuvid tracker and add language to ConsentProV2InstanceSettings

1.1.0

Minor Changes

  • 6509630: feat: disable scroll behavior controls

1.0.0

Major Changes

  • e9bd587: NEW: Consent Pro V2 with Geolocation, Improved GTM handling and Instances Support

Patch Changes

  • 2b400f7: Update scan schedule UI experience, introduce an email recipient field
  • 5b5fdd7: fix: sanitize published configs correctly

0.0.12

Patch Changes

  • 05189c5: fix: update handling for domains list in a project

0.0.11

Patch Changes

  • c89966b: chore: global banner updates and animation library

0.0.10

Patch Changes

  • 8a9a493: add feature to support externally hosted banners and global banners with CSS imports

0.0.9

Patch Changes

  • a37ec60: chore: update consent pro api to support legacy components api for cookie consent targets

0.0.8

Patch Changes

  • 28a6a2d: Cleanup an update release runtime branch name

0.0.7

Patch Changes

  • 4804467: feat: update consent pro for new migration

0.0.6

Patch Changes

  • 077f9a4: cleanup console message

0.0.5

Patch Changes

  • aa8257a: chore: update release sync branches ci with a release-runtime-v** naming strategy

0.0.4

Patch Changes

  • b5be59c: chore: update release

0.0.3

Patch Changes

  • 1b689fc: chore: update release pipeline for branch auto sync

0.0.2

Patch Changes

  • c20f5c9: chore: improve legacy config management and handling

0.0.1

Patch Changes

  • 3152bd4: chore: update webflow hooks, configurator handling and runtime scripts