/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import * as z from "zod/v4-mini"; import { remap as remap$ } from "../../lib/primitives.js"; import { WindowSize, WindowSize$outboundSchema } from "./window-size.js"; export type GetUsageByMeterRequest = { /** * BillingAnchor enables custom monthly billing periods for meter usage aggregation. * * @remarks * * Usage guidelines: * - Only effective when WindowSize = "MONTH" * - For other window sizes (DAY, HOUR, WEEK), this field is ignored * - When nil, uses standard calendar months (1st to 1st) * - When provided, creates custom monthly periods (e.g., 5th to 5th) * * Common use cases: * - Subscription billing periods that don't align with calendar months * - Customer-specific billing cycles (e.g., signed up on 15th) * - Multi-tenant systems with different billing anchor dates * * Example: If BillingAnchor = "2024-03-05T14:30:45Z" and WindowSize = "MONTH": * - March period: 2024-03-05 14:30:45 to 2024-04-05 14:30:45 * - April period: 2024-04-05 14:30:45 to 2024-05-05 14:30:45 */ billingAnchor?: Date | undefined; bucketSize?: WindowSize | undefined; customerId?: string | undefined; endTime?: Date | undefined; externalCustomerId?: string | undefined; filters?: { [k: string]: Array } | undefined; meterId: string; startTime?: Date | undefined; timezone?: string | undefined; windowSize?: WindowSize | undefined; }; /** @internal */ export type GetUsageByMeterRequest$Outbound = { billing_anchor?: string | undefined; bucket_size?: string | undefined; customer_id?: string | undefined; end_time?: string | undefined; external_customer_id?: string | undefined; filters?: { [k: string]: Array } | undefined; meter_id: string; start_time?: string | undefined; timezone?: string | undefined; window_size?: string | undefined; }; /** @internal */ export const GetUsageByMeterRequest$outboundSchema: z.ZodMiniType< GetUsageByMeterRequest$Outbound, GetUsageByMeterRequest > = z.pipe( z.object({ billingAnchor: z.optional( z.pipe(z.date(), z.transform(v => v.toISOString())), ), bucketSize: z.optional(WindowSize$outboundSchema), customerId: z.optional(z.string()), endTime: z.optional(z.pipe(z.date(), z.transform(v => v.toISOString()))), externalCustomerId: z.optional(z.string()), filters: z.optional(z.record(z.string(), z.array(z.string()))), meterId: z.string(), startTime: z.optional(z.pipe(z.date(), z.transform(v => v.toISOString()))), timezone: z.optional(z.string()), windowSize: z.optional(WindowSize$outboundSchema), }), z.transform((v) => { return remap$(v, { billingAnchor: "billing_anchor", bucketSize: "bucket_size", customerId: "customer_id", endTime: "end_time", externalCustomerId: "external_customer_id", meterId: "meter_id", startTime: "start_time", windowSize: "window_size", }); }), ); export function getUsageByMeterRequestToJSON( getUsageByMeterRequest: GetUsageByMeterRequest, ): string { return JSON.stringify( GetUsageByMeterRequest$outboundSchema.parse(getUsageByMeterRequest), ); }