/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import * as z from "zod/v3"; import { remap as remap$ } from "../../lib/primitives.js"; /** * The unique IDs of the tags assigned to the short link. */ export type UpsertLinkTagIds = string | Array; /** * The unique name of the tags assigned to the short link (case insensitive). */ export type UpsertLinkTagNames = string | Array; export type UpsertLinkTestVariants = { url: string; percentage: number; }; export type UpsertLinkRequestBody = { /** * The destination URL of the short link. */ url: string; /** * The domain of the short link (without protocol). If not provided, the primary domain for the workspace will be used (or `dub.sh` if the workspace has no domains). */ domain?: string | undefined; /** * The short link slug. If not provided, a random 7-character slug will be generated. */ key?: string | undefined; /** * The length of the short link slug. Defaults to 7 if not provided. When used with `prefix`, the total length of the key will be `prefix.length + keyLength`. */ keyLength?: number | undefined; /** * The ID of the link in your database. If set, it can be used to identify the link in future API requests (must be prefixed with 'ext_' when passed as a query parameter). This key is unique across your workspace. */ externalId?: string | null | undefined; /** * The ID of the tenant that created the link inside your system. If set, it can be used to fetch all links for a tenant. */ tenantId?: string | null | undefined; /** * The ID of the program the short link is associated with. */ programId?: string | null | undefined; /** * The ID of the partner the short link is associated with. */ partnerId?: string | null | undefined; /** * The prefix of the short link slug for randomly-generated keys (e.g. if prefix is `/c/`, generated keys will be in the `/c/:key` format). Will be ignored if `key` is provided. */ prefix?: string | undefined; /** * Whether to track conversions for the short link. Defaults to `false` if not provided. */ trackConversion?: boolean | undefined; /** * Whether the short link is archived. Defaults to `false` if not provided. */ archived?: boolean | undefined; /** * The unique IDs of the tags assigned to the short link. */ tagIds?: string | Array | undefined; /** * The unique name of the tags assigned to the short link (case insensitive). */ tagNames?: string | Array | undefined; /** * The unique ID existing folder to assign the short link to. */ folderId?: string | null | undefined; /** * The comments for the short link. */ comments?: string | null | undefined; /** * The date and time when the short link will expire at. */ expiresAt?: string | null | undefined; /** * The URL to redirect to when the short link has expired. */ expiredUrl?: string | null | undefined; /** * The password required to access the destination URL of the short link. */ password?: string | null | undefined; /** * Whether the short link uses Custom Link Previews feature. Defaults to `false` if not provided. */ proxy?: boolean | undefined; /** * The custom link preview title (og:title). Will be used for Custom Link Previews if `proxy` is true. Learn more: https://d.to/og */ title?: string | null | undefined; /** * The custom link preview description (og:description). Will be used for Custom Link Previews if `proxy` is true. Learn more: https://d.to/og */ description?: string | null | undefined; /** * The custom link preview image (og:image). Will be used for Custom Link Previews if `proxy` is true. Learn more: https://d.to/og */ image?: string | null | undefined; /** * The custom link preview video (og:video). Will be used for Custom Link Previews if `proxy` is true. Learn more: https://d.to/og */ video?: string | null | undefined; /** * Whether the short link uses link cloaking. Defaults to `false` if not provided. */ rewrite?: boolean | undefined; /** * The iOS destination URL for the short link for iOS device targeting. */ ios?: string | null | undefined; /** * The Android destination URL for the short link for Android device targeting. */ android?: string | null | undefined; /** * Geo targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. See https://d.to/geo for more information. */ geo?: { [k: string]: string } | null | undefined; /** * Allow search engines to index your short link. Defaults to `false` if not provided. Learn more: https://d.to/noindex */ doIndex?: boolean | undefined; /** * The UTM source of the short link. If set, this will populate or override the UTM source in the destination URL. */ utmSource?: string | null | undefined; /** * The UTM medium of the short link. If set, this will populate or override the UTM medium in the destination URL. */ utmMedium?: string | null | undefined; /** * The UTM campaign of the short link. If set, this will populate or override the UTM campaign in the destination URL. */ utmCampaign?: string | null | undefined; /** * The UTM term of the short link. If set, this will populate or override the UTM term in the destination URL. */ utmTerm?: string | null | undefined; /** * The UTM content of the short link. If set, this will populate or override the UTM content in the destination URL. */ utmContent?: string | null | undefined; /** * The referral tag of the short link. If set, this will populate or override the `ref` query parameter in the destination URL. */ ref?: string | null | undefined; /** * An array of webhook IDs to trigger when the link is clicked. These webhooks will receive click event data. */ webhookIds?: Array | null | undefined; /** * An array of A/B test URLs and the percentage of traffic to send to each URL. */ testVariants?: Array | null | undefined; /** * The date and time when the tests started. */ testStartedAt?: string | null | undefined; /** * The date and time when the tests were or will be completed. */ testCompletedAt?: string | null | undefined; /** * Deprecated: Use `dashboard` instead. Whether the short link's stats are publicly accessible. Defaults to `false` if not provided. * * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. */ publicStats?: boolean | undefined; /** * Deprecated: Use `tagIds` instead. The unique ID of the tag assigned to the short link. * * @deprecated field: This will be removed in a future release, please migrate away from it as soon as possible. */ tagId?: string | null | undefined; }; /** @internal */ export type UpsertLinkTagIds$Outbound = string | Array; /** @internal */ export const UpsertLinkTagIds$outboundSchema: z.ZodType< UpsertLinkTagIds$Outbound, z.ZodTypeDef, UpsertLinkTagIds > = z.union([z.string(), z.array(z.string())]); export function upsertLinkTagIdsToJSON( upsertLinkTagIds: UpsertLinkTagIds, ): string { return JSON.stringify( UpsertLinkTagIds$outboundSchema.parse(upsertLinkTagIds), ); } /** @internal */ export type UpsertLinkTagNames$Outbound = string | Array; /** @internal */ export const UpsertLinkTagNames$outboundSchema: z.ZodType< UpsertLinkTagNames$Outbound, z.ZodTypeDef, UpsertLinkTagNames > = z.union([z.string(), z.array(z.string())]); export function upsertLinkTagNamesToJSON( upsertLinkTagNames: UpsertLinkTagNames, ): string { return JSON.stringify( UpsertLinkTagNames$outboundSchema.parse(upsertLinkTagNames), ); } /** @internal */ export type UpsertLinkTestVariants$Outbound = { url: string; percentage: number; }; /** @internal */ export const UpsertLinkTestVariants$outboundSchema: z.ZodType< UpsertLinkTestVariants$Outbound, z.ZodTypeDef, UpsertLinkTestVariants > = z.object({ url: z.string(), percentage: z.number(), }); export function upsertLinkTestVariantsToJSON( upsertLinkTestVariants: UpsertLinkTestVariants, ): string { return JSON.stringify( UpsertLinkTestVariants$outboundSchema.parse(upsertLinkTestVariants), ); } /** @internal */ export type UpsertLinkRequestBody$Outbound = { url: string; domain?: string | undefined; key?: string | undefined; keyLength?: number | undefined; externalId?: string | null | undefined; tenantId?: string | null | undefined; programId?: string | null | undefined; partnerId?: string | null | undefined; prefix?: string | undefined; trackConversion?: boolean | undefined; archived?: boolean | undefined; tagIds?: string | Array | undefined; tagNames?: string | Array | undefined; folderId?: string | null | undefined; comments?: string | null | undefined; expiresAt?: string | null | undefined; expiredUrl?: string | null | undefined; password?: string | null | undefined; proxy?: boolean | undefined; title?: string | null | undefined; description?: string | null | undefined; image?: string | null | undefined; video?: string | null | undefined; rewrite?: boolean | undefined; ios?: string | null | undefined; android?: string | null | undefined; geo?: { [k: string]: string } | null | undefined; doIndex?: boolean | undefined; utm_source?: string | null | undefined; utm_medium?: string | null | undefined; utm_campaign?: string | null | undefined; utm_term?: string | null | undefined; utm_content?: string | null | undefined; ref?: string | null | undefined; webhookIds?: Array | null | undefined; testVariants?: Array | null | undefined; testStartedAt?: string | null | undefined; testCompletedAt?: string | null | undefined; publicStats?: boolean | undefined; tagId?: string | null | undefined; }; /** @internal */ export const UpsertLinkRequestBody$outboundSchema: z.ZodType< UpsertLinkRequestBody$Outbound, z.ZodTypeDef, UpsertLinkRequestBody > = z.object({ url: z.string(), domain: z.string().optional(), key: z.string().optional(), keyLength: z.number().optional(), externalId: z.nullable(z.string()).optional(), tenantId: z.nullable(z.string()).optional(), programId: z.nullable(z.string()).optional(), partnerId: z.nullable(z.string()).optional(), prefix: z.string().optional(), trackConversion: z.boolean().optional(), archived: z.boolean().optional(), tagIds: z.union([z.string(), z.array(z.string())]).optional(), tagNames: z.union([z.string(), z.array(z.string())]).optional(), folderId: z.nullable(z.string()).optional(), comments: z.nullable(z.string()).optional(), expiresAt: z.nullable(z.string()).optional(), expiredUrl: z.nullable(z.string()).optional(), password: z.nullable(z.string()).optional(), proxy: z.boolean().optional(), title: z.nullable(z.string()).optional(), description: z.nullable(z.string()).optional(), image: z.nullable(z.string()).optional(), video: z.nullable(z.string()).optional(), rewrite: z.boolean().optional(), ios: z.nullable(z.string()).optional(), android: z.nullable(z.string()).optional(), geo: z.nullable(z.record(z.string())).optional(), doIndex: z.boolean().optional(), utmSource: z.nullable(z.string()).optional(), utmMedium: z.nullable(z.string()).optional(), utmCampaign: z.nullable(z.string()).optional(), utmTerm: z.nullable(z.string()).optional(), utmContent: z.nullable(z.string()).optional(), ref: z.nullable(z.string()).optional(), webhookIds: z.nullable(z.array(z.string())).optional(), testVariants: z.nullable( z.array(z.lazy(() => UpsertLinkTestVariants$outboundSchema)), ).optional(), testStartedAt: z.nullable(z.string()).optional(), testCompletedAt: z.nullable(z.string()).optional(), publicStats: z.boolean().optional(), tagId: z.nullable(z.string()).optional(), }).transform((v) => { return remap$(v, { utmSource: "utm_source", utmMedium: "utm_medium", utmCampaign: "utm_campaign", utmTerm: "utm_term", utmContent: "utm_content", }); }); export function upsertLinkRequestBodyToJSON( upsertLinkRequestBody: UpsertLinkRequestBody, ): string { return JSON.stringify( UpsertLinkRequestBody$outboundSchema.parse(upsertLinkRequestBody), ); }