export type ColumnNames = 'DealInfo.AvailabilityEndDate' | 'DealInfo.AvailabilityEndTime' | 'DealInfo.AvailabilityStartDate' | 'DealInfo.AvailabilityStartTime' | 'DealInfo.CPM' | 'DealInfo.CreateDate' | 'DealInfo.CreateTime' | 'DealInfo.DeleteTime' | 'DealInfo.FlashSale' | 'DealInfo.ID' | 'DealInfo.Impressions' | 'DealInfo.IsPublished' | 'DealInfo.Listed' | 'DealInfo.Name' | 'DealInfo.OfferingID' | 'DealInfo.ProgramCount' | 'DealInfo.RunEndTime' | 'DealInfo.RunStartTime' | 'DealInfo.Status' | 'DealInfo.UpdateTime' | 'Engagement.Day' | 'Engagement.DealId' | 'Engagement.Month' | 'Engagement.OfferingPageViews' | 'Engagement.ProgramId' | 'Engagement.ProgramPageViews' | 'Engagement.Quarter' | 'Engagement.SearchedTerm' | 'Engagement.SearchResultClicks' | 'Engagement.SearchResultViews' | 'Engagement.SearchTermCTR' | 'Engagement.Week' | 'Engagement.Year' | 'Filters.DealName' | 'Filters.FormatName' | 'Filters.Genre' | 'Filters.OfferingID' | 'Filters.ProgramCount' | 'Filters.ProgramGenreID' | 'Filters.ProgramID' | 'Filters.ProgramName' | 'Filters.ProgramRating' | 'Filters.ProgramRatingID' | 'Inventory.AverageDealsSold' | 'Inventory.AverageInventorySold' | 'Inventory.AverageSales' | 'Inventory.AverageSellThroughRate' | 'Inventory.BuyerCount' | 'Inventory.Day' | 'Inventory.DealCount' | 'Inventory.DealId' | 'Inventory.Impressions' | 'Inventory.Month' | 'Inventory.Quarter' | 'Inventory.RemainingImpressions' | 'Inventory.RemainingImpressionsRate' | 'Inventory.RevenuePerBuyer' | 'Inventory.Sales' | 'Inventory.SellThroughRate' | 'Inventory.SoldImpressions' | 'Inventory.Week' | 'Inventory.Year' | 'ProgramGenreInfo.Name' | 'ProgramGenreInfo.ProgramGenreID' | 'ProgramInfo.CreateTime' | 'ProgramInfo.DefaultCPM' | 'ProgramInfo.DeleteTime' | 'ProgramInfo.IsPublished' | 'ProgramInfo.Name' | 'ProgramInfo.NetworkID' | 'ProgramInfo.NumberOfSeasons' | 'ProgramInfo.ProgramFormat' | 'ProgramInfo.ProgramGenre' | 'ProgramInfo.ProgramGenreID' | 'ProgramInfo.ProgramID' | 'ProgramInfo.ProgramRating' | 'ProgramInfo.ProgramRatingID' | 'ProgramInfo.UpdateTime' | 'ProgramRatingInfo.Name' | 'ProgramRatingInfo.ProgramFormat' | 'ProgramRatingInfo.ProgramRatingID' | 'Purchase.Day' | 'Purchase.Month' | 'Purchase.PurchaseConversionRate' | 'Purchase.Quarter' | 'Purchase.Week' | 'Purchase.Year' | 'Sales.CreateTime' | 'Sales.Day' | 'Sales.DealId' | 'Sales.DealOrderValue' | 'Sales.FlightEndTime' | 'Sales.FlightStartTime' | 'Sales.Impressions' | 'Sales.Month' | 'Sales.PublisherId' | 'Sales.Quarter' | 'Sales.Week' | 'Sales.Year' | 'SellerNetworkInfo.Description' | 'SellerNetworkInfo.Network' | 'SellerNetworkInfo.NetworkID' | 'SellerNetworkInfo.PublisherID'; export type MSSGetRequest = {key?: string | undefined, allownull?: boolean | undefined, data: Array, sum?: Array | undefined, filter?: string | undefined, begin: string, end?: string | undefined, oid: Array, format?: ('human' | 'json' | 'csv' | 'excel') | undefined, formatdata?: boolean | undefined, fullname?: boolean | undefined, includetoday?: boolean | undefined, period?: ('day' | 'week' | 'month' | 'year') | undefined, limit?: number | undefined, offset?: number | undefined, sort?: Array | undefined, accounttypes?: (Array<1 | 2 | 3 | 4 | 5 | 6 | 7>) | undefined, dataColumns?: Array | undefined}; export type GetApiSelectApidataArgs = {query: MSSGetRequest}; export type GetApiSelectApidataOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; /** * MSS Get Data Query * * GET /select/apidata */ export const getApiSelectApidata = async (args: GetApiSelectApidataArgs, options?: GetApiSelectApidataOptions) => { const {baseUrl = "https://api3.mountain.com", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "*/*") if (args.query != null) query.append("query", JSON.stringify(args.query)) const url = `${baseUrl.replace(/\/+$/, '')}/select/apidata${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return res.blob() };