@type t() :: %VRChat.Model.ProductListing{
active: boolean(),
archived: boolean(),
buyerRefundable: boolean(),
created: DateTime.t(),
description: String.t(),
displayName: String.t(),
duration: integer() | nil,
durationType: String.t() | nil,
groupIcon: String.t(),
groupId: String.t(),
groupName: String.t(),
hydratedProducts: [VRChat.Model.Product.t()] | nil,
id: String.t(),
imageId: String.t(),
instant: boolean(),
listingType: VRChat.Model.ProductListingType.t(),
listingVariants: [VRChat.Model.ProductListingVariant.t()],
permanent: boolean(),
priceTokens: integer(),
productIds: [String.t()],
productType: VRChat.Model.ProductType.t(),
products: [map()],
quantifiable: boolean() | nil,
recurrable: boolean(),
refundable: boolean(),
sellerDisplayName: String.t(),
sellerId: String.t(),
stackable: boolean(),
storeIds: [String.t()],
tags: [String.t()],
updated: DateTime.t() | nil
}