Filemedium importancegenerated

growthbook_experiment_event.ts

types/generated/events_mono/growthbook/v1/growthbook_experiment_event.ts

No strong subsystem tag
224
Lines
7591
Bytes
1
Exports
2
Imports
10
Keywords

What this is

This page documents one file from the repository and includes its full source so you can read it without leaving the docs site.

Beginner explanation

This file is one piece of the larger system. Its name, directory, imports, and exports show where it fits. Start by reading the exports and related files first.

How it is used

Start from the exports list and related files. Those are the easiest clues for where this file fits into the system.

Expert explanation

Architecturally, this file intersects with general runtime concerns. It contains 224 lines, 2 detected imports, and 1 detected exports.

Important relationships

  • No related files detected.

Detected exports

  • GrowthbookExperimentEvent

Keywords

objectmessagetimestampglobalthisauthissetgrowthbookexperimenteventexperiment_idvariation_idenvironment

Detected imports

  • ../../../google/protobuf/timestamp.js
  • ../../common/v1/auth.js

Source notes

This page embeds the full file contents. Small or leaf files are still indexed honestly instead of being over-explained.

Open parent directory

Full source

// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
// versions:
//   protoc-gen-ts_proto  v2.6.1
//   protoc               unknown
// source: events_mono/growthbook/v1/growthbook_experiment_event.proto

/* eslint-disable */
import { Timestamp } from '../../../google/protobuf/timestamp.js'
import { PublicApiAuth } from '../../common/v1/auth.js'

/**
 * GrowthBook experiment assignment event
 * This event tracks when a user is exposed to an experiment variant
 * See: https://docs.growthbook.io/guide/bigquery
 */
export interface GrowthbookExperimentEvent {
  /** Unique event identifier (for deduplication) */
  event_id?: string | undefined
  /** When user was exposed to experiment (maps to GrowthBook's timestamp column) */
  timestamp?: Date | undefined
  /** Experiment tracking key (maps to GrowthBook's experiment_id column) */
  experiment_id?: string | undefined
  /** Variation index: 0=control, 1+=variants (maps to GrowthBook's variation_id column) */
  variation_id?: number | undefined
  /** Environment where assignment occurred */
  environment?: string | undefined
  /** User attributes at time of assignment */
  user_attributes?: string | undefined
  /** Experiment metadata */
  experiment_metadata?: string | undefined
  /** Device identifier for the client */
  device_id?: string | undefined
  /** Authentication context automatically injected by the API */
  auth?: PublicApiAuth | undefined
  /** Session identifier for tracking user sessions */
  session_id?: string | undefined
  /** Anonymous identifier for unauthenticated users */
  anonymous_id?: string | undefined
  /** Event metadata variables (automatically populated by internal-tools-common event_logging library) */
  event_metadata_vars?: string | undefined
}

function createBaseGrowthbookExperimentEvent(): GrowthbookExperimentEvent {
  return {
    event_id: '',
    timestamp: undefined,
    experiment_id: '',
    variation_id: 0,
    environment: '',
    user_attributes: '',
    experiment_metadata: '',
    device_id: '',
    auth: undefined,
    session_id: '',
    anonymous_id: '',
    event_metadata_vars: '',
  }
}

export const GrowthbookExperimentEvent: MessageFns<GrowthbookExperimentEvent> =
  {
    fromJSON(object: any): GrowthbookExperimentEvent {
      return {
        event_id: isSet(object.event_id)
          ? globalThis.String(object.event_id)
          : '',
        timestamp: isSet(object.timestamp)
          ? fromJsonTimestamp(object.timestamp)
          : undefined,
        experiment_id: isSet(object.experiment_id)
          ? globalThis.String(object.experiment_id)
          : '',
        variation_id: isSet(object.variation_id)
          ? globalThis.Number(object.variation_id)
          : 0,
        environment: isSet(object.environment)
          ? globalThis.String(object.environment)
          : '',
        user_attributes: isSet(object.user_attributes)
          ? globalThis.String(object.user_attributes)
          : '',
        experiment_metadata: isSet(object.experiment_metadata)
          ? globalThis.String(object.experiment_metadata)
          : '',
        device_id: isSet(object.device_id)
          ? globalThis.String(object.device_id)
          : '',
        auth: isSet(object.auth)
          ? PublicApiAuth.fromJSON(object.auth)
          : undefined,
        session_id: isSet(object.session_id)
          ? globalThis.String(object.session_id)
          : '',
        anonymous_id: isSet(object.anonymous_id)
          ? globalThis.String(object.anonymous_id)
          : '',
        event_metadata_vars: isSet(object.event_metadata_vars)
          ? globalThis.String(object.event_metadata_vars)
          : '',
      }
    },

    toJSON(message: GrowthbookExperimentEvent): unknown {
      const obj: any = {}
      if (message.event_id !== undefined) {
        obj.event_id = message.event_id
      }
      if (message.timestamp !== undefined) {
        obj.timestamp = message.timestamp.toISOString()
      }
      if (message.experiment_id !== undefined) {
        obj.experiment_id = message.experiment_id
      }
      if (message.variation_id !== undefined) {
        obj.variation_id = Math.round(message.variation_id)
      }
      if (message.environment !== undefined) {
        obj.environment = message.environment
      }
      if (message.user_attributes !== undefined) {
        obj.user_attributes = message.user_attributes
      }
      if (message.experiment_metadata !== undefined) {
        obj.experiment_metadata = message.experiment_metadata
      }
      if (message.device_id !== undefined) {
        obj.device_id = message.device_id
      }
      if (message.auth !== undefined) {
        obj.auth = PublicApiAuth.toJSON(message.auth)
      }
      if (message.session_id !== undefined) {
        obj.session_id = message.session_id
      }
      if (message.anonymous_id !== undefined) {
        obj.anonymous_id = message.anonymous_id
      }
      if (message.event_metadata_vars !== undefined) {
        obj.event_metadata_vars = message.event_metadata_vars
      }
      return obj
    },

    create<I extends Exact<DeepPartial<GrowthbookExperimentEvent>, I>>(
      base?: I,
    ): GrowthbookExperimentEvent {
      return GrowthbookExperimentEvent.fromPartial(base ?? ({} as any))
    },
    fromPartial<I extends Exact<DeepPartial<GrowthbookExperimentEvent>, I>>(
      object: I,
    ): GrowthbookExperimentEvent {
      const message = createBaseGrowthbookExperimentEvent()
      message.event_id = object.event_id ?? ''
      message.timestamp = object.timestamp ?? undefined
      message.experiment_id = object.experiment_id ?? ''
      message.variation_id = object.variation_id ?? 0
      message.environment = object.environment ?? ''
      message.user_attributes = object.user_attributes ?? ''
      message.experiment_metadata = object.experiment_metadata ?? ''
      message.device_id = object.device_id ?? ''
      message.auth =
        object.auth !== undefined && object.auth !== null
          ? PublicApiAuth.fromPartial(object.auth)
          : undefined
      message.session_id = object.session_id ?? ''
      message.anonymous_id = object.anonymous_id ?? ''
      message.event_metadata_vars = object.event_metadata_vars ?? ''
      return message
    },
  }

type Builtin =
  | Date
  | Function
  | Uint8Array
  | string
  | number
  | boolean
  | undefined

type DeepPartial<T> = T extends Builtin
  ? T
  : T extends globalThis.Array<infer U>
    ? globalThis.Array<DeepPartial<U>>
    : T extends ReadonlyArray<infer U>
      ? ReadonlyArray<DeepPartial<U>>
      : T extends {}
        ? { [K in keyof T]?: DeepPartial<T[K]> }
        : Partial<T>

type KeysOfUnion<T> = T extends T ? keyof T : never
type Exact<P, I extends P> = P extends Builtin
  ? P
  : P & { [K in keyof P]: Exact<P[K], I[K]> } & {
      [K in Exclude<keyof I, KeysOfUnion<P>>]: never
    }

function fromTimestamp(t: Timestamp): Date {
  let millis = (t.seconds || 0) * 1_000
  millis += (t.nanos || 0) / 1_000_000
  return new globalThis.Date(millis)
}

function fromJsonTimestamp(o: any): Date {
  if (o instanceof globalThis.Date) {
    return o
  } else if (typeof o === 'string') {
    return new globalThis.Date(o)
  } else {
    return fromTimestamp(Timestamp.fromJSON(o))
  }
}

function isSet(value: any): boolean {
  return value !== null && value !== undefined
}

interface MessageFns<T> {
  fromJSON(object: any): T
  toJSON(message: T): unknown
  create<I extends Exact<DeepPartial<T>, I>>(base?: I): T
  fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T
}