{"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":[]}