mirror of
https://github.com/Comfy-Org/ComfyUI_frontend.git
synced 2026-02-19 06:20:10 +00:00
Implement Impact telemetry and checkout attribution through cloud
subscription checkout flows.
This PR adds Impact.com tracking support and carries attribution context
from landing-page visits into subscription checkout requests so
conversion attribution can be validated end-to-end.
- Register a new `ImpactTelemetryProvider` during cloud telemetry
initialization.
- Initialize the Impact queue/runtime (`ire`) and load the Universal
Tracking Tag script once.
- Invoke `ire('identify', ...)` on page views with dynamic `customerId`
and SHA-1 `customerEmail` (or empty strings when unknown).
- Expand checkout attribution capture to include `im_ref`, UTM fields,
and Google click IDs, with local persistence across navigation.
- Attempt `ire('generateClickId')` with a timeout and fall back to
URL/local attribution when unavailable.
- Include attribution payloads in checkout creation requests for both:
- `/customers/cloud-subscription-checkout`
- `/customers/cloud-subscription-checkout/{tier}`
- Extend begin-checkout telemetry metadata typing to include attribution
fields.
- Add focused unit coverage for provider behavior, attribution
persistence/fallback logic, and checkout request payloads.
Tradeoffs / constraints:
- Attribution collection is treated as best-effort in tiered checkout
flow to avoid blocking purchases.
- Backend checkout handlers must accept and process the additional JSON
attribution fields.
## Screenshots
<img width="908" height="208" alt="image"
src="https://github.com/user-attachments/assets/03c16d60-ffda-40c9-9bd6-8914d841be50"/>
<img width="1144" height="460" alt="image"
src="https://github.com/user-attachments/assets/74b97fde-ce0a-43e6-838e-9a4aba484488"/>
<img width="1432" height="320" alt="image"
src="https://github.com/user-attachments/assets/30c22a9f-7bd8-409f-b0ef-e4d02343780a"/>
<img width="341" height="135" alt="image"
src="https://github.com/user-attachments/assets/f6d918ae-5f80-45e0-855a-601abea61dec"/>
60 lines
1.5 KiB
TypeScript
60 lines
1.5 KiB
TypeScript
declare const __COMFYUI_FRONTEND_VERSION__: string
|
|
declare const __SENTRY_ENABLED__: boolean
|
|
declare const __SENTRY_DSN__: string
|
|
declare const __ALGOLIA_APP_ID__: string
|
|
declare const __ALGOLIA_API_KEY__: string
|
|
declare const __USE_PROD_CONFIG__: boolean
|
|
|
|
interface ImpactQueueFunction {
|
|
(...args: unknown[]): void
|
|
a?: unknown[][]
|
|
}
|
|
|
|
interface Window {
|
|
__CONFIG__: {
|
|
gtm_container_id?: string
|
|
mixpanel_token?: string
|
|
require_whitelist?: boolean
|
|
subscription_required?: boolean
|
|
max_upload_size?: number
|
|
comfy_api_base_url?: string
|
|
comfy_platform_base_url?: string
|
|
firebase_config?: {
|
|
apiKey: string
|
|
authDomain: string
|
|
databaseURL?: string
|
|
projectId: string
|
|
storageBucket: string
|
|
messagingSenderId: string
|
|
appId: string
|
|
measurementId?: string
|
|
}
|
|
server_health_alert?: {
|
|
message: string
|
|
tooltip?: string
|
|
severity?: 'info' | 'warning' | 'error'
|
|
badge?: string
|
|
}
|
|
}
|
|
__ga_identity__?: {
|
|
client_id?: string
|
|
session_id?: string
|
|
session_number?: string
|
|
}
|
|
dataLayer?: Array<Record<string, unknown>>
|
|
ire_o?: string
|
|
ire?: ImpactQueueFunction
|
|
}
|
|
|
|
interface Navigator {
|
|
/**
|
|
* Used by the electron API. This is a WICG non-standard API, but is guaranteed to exist in Electron.
|
|
* It is `undefined` in Firefox and older browsers.
|
|
* @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/windowControlsOverlay
|
|
*/
|
|
windowControlsOverlay?: {
|
|
/** When `true`, the window is using custom window style. */
|
|
visible: boolean
|
|
}
|
|
}
|