@maxio-com/advanced-billing-sdk
Version:
Ultimate billing and pricing flexibility for B2B SaaS. Maxio integrates directly into your product, so you can seamlessly manage your product catalog, bill customers, and collect payments.
341 lines • 21.5 kB
JavaScript
/**
* AdvancedBilling
*
* This file was automatically generated for Maxio by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
import { commaPrefix } from '../core';
import { componentCurrencyPricesResponseSchema, } from '../models/componentCurrencyPricesResponse';
import { componentPricePointResponseSchema, } from '../models/componentPricePointResponse';
import { componentPricePointsResponseSchema, } from '../models/componentPricePointsResponse';
import { componentResponseSchema, } from '../models/componentResponse';
import { archiveComponentPricePointComponentIdSchema, } from '../models/containers/archiveComponentPricePointComponentId';
import { archiveComponentPricePointPricePointIdSchema, } from '../models/containers/archiveComponentPricePointPricePointId';
import { readComponentPricePointComponentIdSchema, } from '../models/containers/readComponentPricePointComponentId';
import { readComponentPricePointPricePointIdSchema, } from '../models/containers/readComponentPricePointPricePointId';
import { updateComponentPricePointComponentIdSchema, } from '../models/containers/updateComponentPricePointComponentId';
import { updateComponentPricePointPricePointIdSchema, } from '../models/containers/updateComponentPricePointPricePointId';
import { createComponentPricePointRequestSchema, } from '../models/createComponentPricePointRequest';
import { createComponentPricePointsRequestSchema, } from '../models/createComponentPricePointsRequest';
import { createCurrencyPricesRequestSchema, } from '../models/createCurrencyPricesRequest';
import { listComponentsPricePointsIncludeSchema, } from '../models/listComponentsPricePointsInclude';
import { listComponentsPricePointsResponseSchema, } from '../models/listComponentsPricePointsResponse';
import { listPricePointsFilterSchema, } from '../models/listPricePointsFilter';
import { pricePointTypeSchema } from '../models/pricePointType';
import { sortingDirectionSchema, } from '../models/sortingDirection';
import { updateComponentPricePointRequestSchema, } from '../models/updateComponentPricePointRequest';
import { updateCurrencyPricesRequestSchema, } from '../models/updateCurrencyPricesRequest';
import { array, boolean, number, optional, string } from '../schema';
import { BaseController } from './baseController';
import { ErrorArrayMapResponseError } from '../errors/errorArrayMapResponseError';
import { ErrorListResponseError } from '../errors/errorListResponseError';
export class ComponentPricePointsController extends BaseController {
/**
* Sets a new default price point for the component. This new default will apply to all new
* subscriptions going forward - existing subscriptions will remain on their current price point.
*
* See [Price Points Documentation](https://maxio.zendesk.com/hc/en-us/articles/24261191737101-Price-
* Points-Components) for more information on price points and moving subscriptions between price
* points.
*
* Note: Custom price points are not able to be set as the default for a component.
*
* @param componentId The Advanced Billing id of the component to which the price point belongs
* @param pricePointId The Advanced Billing id of the price point
* @return Response from the API call
*/
async promoteComponentPricePointToDefault(componentId, pricePointId, requestOptions) {
const req = this.createRequest('PUT');
const mapped = req.prepareArgs({
componentId: [componentId, number()],
pricePointId: [pricePointId, number()],
});
req.appendTemplatePath `/components/${mapped.componentId}/price_points/${mapped.pricePointId}/default.json`;
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(componentResponseSchema, requestOptions);
}
/**
* This endpoint can be used to create a new price point for an existing component.
*
* @param componentId The Advanced Billing id of the component
* @param body
* @return Response from the API call
*/
async createComponentPricePoint(componentId, body, requestOptions) {
const req = this.createRequest('POST');
const mapped = req.prepareArgs({
componentId: [componentId, number()],
body: [body, optional(createComponentPricePointRequestSchema)],
});
req.header('Content-Type', 'application/json');
req.json(mapped.body);
req.appendTemplatePath `/components/${mapped.componentId}/price_points.json`;
req.throwOn(422, ErrorArrayMapResponseError, true, "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.");
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(componentPricePointResponseSchema, requestOptions);
}
/**
* Use this endpoint to read current price points that are associated with a component.
*
* You may specify the component by using either the numeric id or the `handle:gold` syntax.
*
* When fetching a component's price points, if you have defined multiple currencies at the site level,
* you can optionally pass the `?currency_prices=true` query param to include an array of currency
* price data in the response.
*
* If the price point is set to `use_site_exchange_rate: true`, it will return pricing based on the
* current exchange rate. If the flag is set to false, it will return all of the defined prices for
* each currency.
*
* @param componentId The Advanced Billing id of the component
* @param currencyPrices Include an array of currency price data
* @param page Result records are organized in pages. By default, the first page of
* results is displayed. The page parameter specifies a page number of
* results to fetch. You can start navigating through the pages to consume
* the results. You do this by passing in a page parameter. Retrieve the
* next page by adding ?page=2 to the query string. If there are no
* results to return, then an empty result set will be returned. Use in
* query `page=1`.
* @param perPage This parameter indicates how many records to fetch in each request.
* Default value is 20. The maximum allowed values is 200; any per_page
* value over 200 will be changed to 200. Use in query `per_page=200`.
* @param filterType Use in query: `filter[type]=catalog,default`.
* @return Response from the API call
*/
async listComponentPricePoints({ componentId, currencyPrices, page, perPage, filterType, }, requestOptions) {
const req = this.createRequest('GET');
const mapped = req.prepareArgs({
componentId: [componentId, number()],
currencyPrices: [currencyPrices, optional(boolean())],
page: [page, optional(number())],
perPage: [perPage, optional(number())],
filterType: [filterType, optional(array(pricePointTypeSchema))],
});
req.query('currency_prices', mapped.currencyPrices, commaPrefix);
req.query('page', mapped.page, commaPrefix);
req.query('per_page', mapped.perPage, commaPrefix);
req.query('filter[type]', mapped.filterType, commaPrefix);
req.appendTemplatePath `/components/${mapped.componentId}/price_points.json`;
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(componentPricePointsResponseSchema, requestOptions);
}
/**
* Use this endpoint to create multiple component price points in one request.
*
* @param componentId The Advanced Billing id of the component for
* which you want to fetch price points.
* @param body
* @return Response from the API call
*/
async bulkCreateComponentPricePoints(componentId, body, requestOptions) {
const req = this.createRequest('POST');
const mapped = req.prepareArgs({
componentId: [componentId, string()],
body: [body, optional(createComponentPricePointsRequestSchema)],
});
req.header('Content-Type', 'application/json');
req.json(mapped.body);
req.appendTemplatePath `/components/${mapped.componentId}/price_points/bulk.json`;
req.throwOn(422, ErrorListResponseError, true, "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.");
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(componentPricePointsResponseSchema, requestOptions);
}
/**
* When updating a price point, it's prices can be updated as well by creating new prices or editing /
* removing existing ones.
*
* Passing in a price bracket without an `id` will attempt to create a new price.
*
* Including an `id` will update the corresponding price, and including the `_destroy` flag set to true
* along with the `id` will remove that price.
*
* Note: Custom price points cannot be updated directly. They must be edited through the Subscription.
*
* @param componentId The id or handle of the component. When using
* the handle, it must be prefixed with `handle:`.
* Example: `123` for an integer ID, or `handle:
* example-product-handle` for a string handle.
* @param pricePointId The id or handle of the price point. When using
* the handle, it must be prefixed with `handle:`.
* Example: `123` for an integer ID, or `handle:
* example-price_point-handle` for a string handle.
* @param body
* @return Response from the API call
*/
async updateComponentPricePoint(componentId, pricePointId, body, requestOptions) {
const req = this.createRequest('PUT');
const mapped = req.prepareArgs({
componentId: [componentId, updateComponentPricePointComponentIdSchema],
pricePointId: [pricePointId, updateComponentPricePointPricePointIdSchema],
body: [body, optional(updateComponentPricePointRequestSchema)],
});
req.header('Content-Type', 'application/json');
req.json(mapped.body);
req.appendTemplatePath `/components/${mapped.componentId}/price_points/${mapped.pricePointId}.json`;
req.throwOn(422, ErrorArrayMapResponseError, true, "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.");
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(componentPricePointResponseSchema, requestOptions);
}
/**
* Use this endpoint to retrieve details for a specific component price point. You can achieve this by
* using either the component price point ID or handle.
*
* @param componentId The id or handle of the component. When using the
* handle, it must be prefixed with `handle:`. Example:
* `123` for an integer ID, or `handle:example-product-
* handle` for a string handle.
* @param pricePointId The id or handle of the price point. When using the
* handle, it must be prefixed with `handle:`. Example:
* `123` for an integer ID, or `handle:example-
* price_point-handle` for a string handle.
* @param currencyPrices Include an array of currency price data
* @return Response from the API call
*/
async readComponentPricePoint(componentId, pricePointId, currencyPrices, requestOptions) {
const req = this.createRequest('GET');
const mapped = req.prepareArgs({
componentId: [componentId, readComponentPricePointComponentIdSchema],
pricePointId: [pricePointId, readComponentPricePointPricePointIdSchema],
currencyPrices: [currencyPrices, optional(boolean())],
});
req.query('currency_prices', mapped.currencyPrices, commaPrefix);
req.appendTemplatePath `/components/${mapped.componentId}/price_points/${mapped.pricePointId}.json`;
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(componentPricePointResponseSchema, requestOptions);
}
/**
* A price point can be archived at any time. Subscriptions using a price point that has been archived
* will continue using it until they're moved to another price point.
*
* @param componentId The id or handle of the component. When using the
* handle, it must be prefixed with `handle:`.
* Example: `123` for an integer ID, or `handle:
* example-product-handle` for a string handle.
* @param pricePointId The id or handle of the price point. When using
* the handle, it must be prefixed with `handle:`.
* Example: `123` for an integer ID, or `handle:
* example-price_point-handle` for a string handle.
* @return Response from the API call
*/
async archiveComponentPricePoint(componentId, pricePointId, requestOptions) {
const req = this.createRequest('DELETE');
const mapped = req.prepareArgs({
componentId: [componentId, archiveComponentPricePointComponentIdSchema],
pricePointId: [
pricePointId,
archiveComponentPricePointPricePointIdSchema,
],
});
req.appendTemplatePath `/components/${mapped.componentId}/price_points/${mapped.pricePointId}.json`;
req.throwOn(422, ErrorListResponseError, true, "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.");
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(componentPricePointResponseSchema, requestOptions);
}
/**
* Use this endpoint to unarchive a component price point.
*
* @param componentId The Advanced Billing id of the component to which the price point belongs
* @param pricePointId The Advanced Billing id of the price point
* @return Response from the API call
*/
async unarchiveComponentPricePoint(componentId, pricePointId, requestOptions) {
const req = this.createRequest('PUT');
const mapped = req.prepareArgs({
componentId: [componentId, number()],
pricePointId: [pricePointId, number()],
});
req.appendTemplatePath `/components/${mapped.componentId}/price_points/${mapped.pricePointId}/unarchive.json`;
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(componentPricePointResponseSchema, requestOptions);
}
/**
* This endpoint allows you to create currency prices for a given currency that has been defined on the
* site level in your settings.
*
* When creating currency prices, they need to mirror the structure of your primary pricing. For each
* price level defined on the component price point, there should be a matching price level created in
* the given currency.
*
* Note: Currency Prices are not able to be created for custom price points.
*
* @param pricePointId The Advanced Billing id of the price point
* @param body
* @return Response from the API call
*/
async createCurrencyPrices(pricePointId, body, requestOptions) {
const req = this.createRequest('POST');
const mapped = req.prepareArgs({
pricePointId: [pricePointId, number()],
body: [body, optional(createCurrencyPricesRequestSchema)],
});
req.header('Content-Type', 'application/json');
req.json(mapped.body);
req.appendTemplatePath `/price_points/${mapped.pricePointId}/currency_prices.json`;
req.throwOn(422, ErrorArrayMapResponseError, true, "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.");
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(componentCurrencyPricesResponseSchema, requestOptions);
}
/**
* This endpoint allows you to update currency prices for a given currency that has been defined on the
* site level in your settings.
*
* Note: Currency Prices are not able to be updated for custom price points.
*
* @param pricePointId The Advanced Billing id of the price point
* @param body
* @return Response from the API call
*/
async updateCurrencyPrices(pricePointId, body, requestOptions) {
const req = this.createRequest('PUT');
const mapped = req.prepareArgs({
pricePointId: [pricePointId, number()],
body: [body, optional(updateCurrencyPricesRequestSchema)],
});
req.header('Content-Type', 'application/json');
req.json(mapped.body);
req.appendTemplatePath `/price_points/${mapped.pricePointId}/currency_prices.json`;
req.throwOn(422, ErrorArrayMapResponseError, true, "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.");
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(componentCurrencyPricesResponseSchema, requestOptions);
}
/**
* This method allows to retrieve a list of Components Price Points belonging to a Site.
*
* @param include Allows including additional data in the response. Use in
* query: `include=currency_prices`.
* @param page Result records are organized in pages. By default, the first
* page of results is displayed. The page parameter specifies a
* page number of results to fetch. You can start navigating
* through the pages to consume the results. You do this by
* passing in a page parameter. Retrieve the next page by adding
* ?page=2 to the query string. If there are no results to
* return, then an empty result set will be returned. Use in
* query `page=1`.
* @param perPage This parameter indicates how many records to fetch in each
* request. Default value is 20. The maximum allowed values is
* 200; any per_page value over 200 will be changed to 200. Use
* in query `per_page=200`.
* @param direction Controls the order in which results are returned. Use in
* query `direction=asc`.
* @param filter Filter to use for List PricePoints operations
* @return Response from the API call
*/
async listAllComponentPricePoints({ include, page, perPage, direction, filter, }, requestOptions) {
const req = this.createRequest('GET', '/components_price_points.json');
const mapped = req.prepareArgs({
include: [include, optional(listComponentsPricePointsIncludeSchema)],
page: [page, optional(number())],
perPage: [perPage, optional(number())],
direction: [direction, optional(sortingDirectionSchema)],
filter: [filter, optional(listPricePointsFilterSchema)],
});
req.query('include', mapped.include, commaPrefix);
req.query('page', mapped.page, commaPrefix);
req.query('per_page', mapped.perPage, commaPrefix);
req.query('direction', mapped.direction, commaPrefix);
req.query('filter', mapped.filter, commaPrefix);
req.throwOn(422, ErrorListResponseError, true, "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.");
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(listComponentsPricePointsResponseSchema, requestOptions);
}
}
//# sourceMappingURL=componentPricePointsController.js.map