{"version":3,"sources":["../../src/schema/index.ts"],"sourcesContent":["import {\n  enum as _enum,\n  null as _null,\n  array,\n  boolean,\n  coerce,\n  email,\n  iso,\n  maxLength,\n  minLength,\n  number,\n  object,\n  optional,\n  pipe,\n  record,\n  refine,\n  regex,\n  string,\n  transform,\n  trim,\n  union,\n  url,\n  uuid,\n  type z,\n} from 'zod/mini';\nimport type { Environment, Platform } from '../track/types';\n\nconst items = array(\n  record(\n    string().check(trim(), minLength(1), maxLength(128)),\n    union([string().check(maxLength(512)), number(), boolean(), _null()])\n  )\n);\n\nexport const ALL_PLATFORMS = [\n  'ios',\n  'android',\n  'web',\n  'macos',\n  'windows',\n  'linux',\n  'unknown',\n] as const satisfies Platform[];\n\nexport const ALL_ENVIRONMENTS = ['development', 'production'] as const satisfies Environment[];\n\nexport const tagsSchema = object({\n  os: optional(string()),\n  os_name: optional(string()),\n  os_version: optional(string()),\n  browser: optional(string()),\n  browser_name: optional(string()),\n  browser_version: optional(string()),\n  platform: _enum(ALL_PLATFORMS),\n  device: optional(string()),\n  device_id: optional(string().check(trim(), minLength(1), maxLength(36))),\n  device_type: optional(string()),\n  device_vendor: optional(string()),\n  device_pixel_ratio: optional(number()),\n  screen_width: optional(number()),\n  screen_height: optional(number()),\n  screen_resolution: optional(\n    pipe(\n      string().check(regex(/^\\d+x\\d+$/)),\n      transform((v) => v as `${number}x${number}`)\n    )\n  ),\n  release: optional(string()),\n  language: optional(string()),\n  time_zone: optional(string()),\n  environment: _enum(ALL_ENVIRONMENTS),\n  source_url: optional(string()),\n  source: optional(_enum(['web', 'app', 'offline'])),\n  // app info\n  advertising_id: optional(string()),\n  install_referrer: optional(string()),\n  // meta ads\n  fbc: optional(string()),\n  fbp: optional(string()),\n  fbclid: optional(string()),\n  ad_id: optional(string()),\n  ad_name: optional(string()),\n  adset_id: optional(string()),\n  adset_name: optional(string()),\n  campaign_id: optional(string()),\n  campaign_name: optional(string()),\n  placement: optional(string()),\n  site_source_name: optional(string()),\n  // google ads\n  gclid: optional(string()),\n  gclsrc: optional(string()),\n  gad_source: optional(string()),\n  gad_campaignid: optional(string()),\n  // reddit ads\n  rdt_cid: optional(string()),\n  rdt_uuid: optional(string()),\n  // click ids\n  dclid: optional(string()),\n  ko_click_id: optional(string()),\n  li_fat_id: optional(string()),\n  msclkid: optional(string()),\n  sccid: optional(string()),\n  ttclid: optional(string()),\n  twclid: optional(string()),\n  wbraid: optional(string()),\n  yclid: optional(string()),\n  // utm params\n  utm_source: optional(string()),\n  utm_medium: optional(string()),\n  utm_campaign: optional(string()),\n  utm_term: optional(string()),\n  utm_content: optional(string()),\n  utm_id: optional(string()),\n  utm_source_platform: optional(string()),\n  utm_creative_format: optional(string()),\n  utm_marketing_tactic: optional(string()),\n});\n\nexport const propertiesSchema = optional(\n  record(\n    string().check(trim(), minLength(1), maxLength(128)),\n    union([string().check(maxLength(512)), number(), boolean(), _null(), items])\n  ).check(refine((data) => Object.keys(data).length <= 64))\n);\n\n/** @deprecated */\nexport const createTrackEventSchemaV1 = array(\n  object({\n    name: string().check(trim(), minLength(1), maxLength(64)),\n    visitor_id: coerce.bigint(),\n    session_id: uuid(),\n    platform: _enum(ALL_PLATFORMS),\n    environment: _enum(ALL_ENVIRONMENTS),\n    timestamp: iso.datetime(),\n    tags: tagsSchema,\n    properties: propertiesSchema,\n  })\n).check(minLength(1), maxLength(100));\n\nexport const createTrackEventSchema = array(\n  object({\n    name: string().check(trim(), minLength(1), maxLength(64)),\n    visitor_id: uuid(),\n    session_id: uuid(),\n    platform: _enum(ALL_PLATFORMS),\n    environment: _enum(ALL_ENVIRONMENTS),\n    timestamp: iso.datetime(),\n    tags: tagsSchema,\n    properties: propertiesSchema,\n  })\n).check(minLength(1), maxLength(100));\n\nexport const createVisitorSchema = object({\n  device_id: string().check(trim(), minLength(1), maxLength(36)),\n  platform: _enum(ALL_PLATFORMS),\n  environment: _enum(ALL_ENVIRONMENTS),\n  properties: optional(\n    record(\n      string().check(trim(), minLength(1), maxLength(128)),\n      union([string().check(maxLength(512)), number(), boolean(), _null()])\n    ).check(refine((data) => Object.keys(data).length <= 64))\n  ),\n});\n\nexport const updateVisitorSchema = object({\n  user_id: optional(uuid()),\n  distinct_id: optional(string().check(trim(), minLength(1), maxLength(36))),\n  properties: optional(\n    record(\n      string().check(trim(), minLength(1), maxLength(128)),\n      union([string().check(maxLength(512)), number(), boolean(), _null()])\n    ).check(refine((data) => Object.keys(data).length <= 64))\n  ),\n});\n\nexport const createFeedbackSchema = object({\n  name: string().check(minLength(1), maxLength(256)),\n  email: email().check(maxLength(320)),\n  message: string().check(minLength(1), maxLength(65536)),\n});\n\nconst noEmptyString = pipe(\n  string().check(maxLength(256)),\n  transform((v) => (v ? v : undefined))\n);\n\n/**\n * The schema for creating a link.\n * @see https://support.google.com/analytics/answer/10917952\n * */\nexport const createLinkSchema = object({\n  /** The URL that the user is redirected to. */\n  url: url().check(minLength(1), maxLength(1024)), // required\n\n  /**\n   * Campaign ID. Used to identify a specific campaign or promotion. This is a required key for GA4\n   * data import. Use the same IDs that you use when uploading campaign cost data.\n   */\n  utm_id: optional(noEmptyString),\n\n  /** Referrer, for example: google, newsletter4, billboard */\n  utm_source: string().check(minLength(1), maxLength(256)), // required\n\n  /** Marketing medium, for example: cpc, banner, email */\n  utm_medium: string().check(minLength(1), maxLength(256)), // required\n\n  /** Product, slogan, promo code, for example: spring_sale */\n  utm_campaign: string().check(minLength(1), maxLength(256)), // required\n\n  /** Paid keyword */\n  utm_term: optional(noEmptyString),\n\n  /**\n   * Use to differentiate creatives. For example, if you have two call-to-action links within the\n   * same email message, you can use utm_content and set different values for each so you can tell\n   * which version is more effective.\n   */\n  utm_content: optional(noEmptyString),\n\n  /**\n   * The platform responsible for directing traffic to a given Analytics property (such as a buying\n   * platform that sets budgets and targeting criteria or a platform that manages organic traffic\n   * data). For example: Search Ads 360 or Display & Video 360.\n   */\n  utm_source_platform: optional(noEmptyString),\n\n  /**\n   * Type of creative, for example: display, native, video, search, utm_creative_format is not\n   * currently reported in Google Analytics 4 properties.\n   */\n  utm_creative_format: optional(noEmptyString),\n\n  /**\n   * Targeting criteria applied to a campaign, for example: remarketing, prospecting,\n   * utm_marketing_tactic is not currently reported in Google Analytics 4 properties.\n   * */\n  utm_marketing_tactic: optional(noEmptyString),\n});\n\nexport type CreateTrackEventDTO = z.output<typeof createTrackEventSchema>;\nexport type CreateFeedbackDTO = z.output<typeof createFeedbackSchema>;\nexport type CreateLinkDTO = z.output<typeof createLinkSchema>;\nexport type CreateVisitorDTO = z.output<typeof createVisitorSchema>;\nexport type UpdateVisitorDTO = z.output<typeof updateVisitorSchema>;\n"],"mappings":"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","names":["_null","_enum"]}