@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.
99 lines • 5.39 kB
JavaScript
/**
* AdvancedBilling
*
* This file was automatically generated for Maxio by APIMATIC v3.0 ( https://www.apimatic.io ).
*/
import { subscriptionMigrationPreviewRequestSchema, } from '../models/subscriptionMigrationPreviewRequest.js';
import { subscriptionMigrationPreviewResponseSchema, } from '../models/subscriptionMigrationPreviewResponse.js';
import { subscriptionProductMigrationRequestSchema, } from '../models/subscriptionProductMigrationRequest.js';
import { subscriptionResponseSchema, } from '../models/subscriptionResponse.js';
import { number, optional } from '../schema.js';
import { BaseController } from './baseController.js';
import { ErrorListResponseError } from '../errors/errorListResponseError.js';
export class SubscriptionProductsController extends BaseController {
/**
* Migrates a subscription to a different product.
*
* In order to create a migration, you must pass the `product_id` or `product_handle` in the object
* when you send a POST request. You may also pass either a `product_price_point_id` or
* `product_price_point_handle` to choose which price point the subscription is moved to. If no price
* point identifier is passed the subscription will be moved to the products default price point. The
* response will be the updated subscription.
*
* ## Valid Subscriptions
*
* Subscriptions should be in the `active` or `trialing` state in order to be migrated.
*
* (For backwards compatibility reasons, it is possible to migrate a subscription that is in the
* `trial_ended` state via the API, however this is not recommended. Since `trial_ended` is an end-of-
* life state, the subscription should be canceled, the product changed, and then the subscription can
* be reactivated.)
*
* ## Migrations Documentation
*
* Full documentation on how to record Migrations in the Advanced Billing UI can be located
* [here](https://maxio.zendesk.com/hc/en-us/articles/24181589372429-Data-Migration-to-Advanced-
* Billing).
*
* ## Failed Migrations
*
* Important note: One of the most common ways that a migration can fail is when the attempt is made to
* migrate a subscription to its current product.
*
* ## 3D Secure (3DS) Authentication post-authentication flow
*
* When a payment requires 3DS Authentication to adhere to Strong Customer Authentication (SCA), the
* request enters a post-authentication flow where a 422 Unprocessable Entity status is returned with
* an action_link that will direct the customer through 3DS Authentication.
*
* See the [3D Secure Post-Authentication Flow](https://docs.maxio.com/hc/en-us/articles/44277749524365-
* 3D-Secure-Post-Authentication-Flow) article in the product documentation to learn how to manage the
* redirect flow.
*
* @param subscriptionId The Chargify id of the subscription.
* @param body
* @return Response from the API call
*/
async migrateSubscriptionProduct(subscriptionId, body, requestOptions) {
const req = this.createRequest('POST');
const mapped = req.prepareArgs({
subscriptionId: [subscriptionId, number()],
body: [body, optional(subscriptionProductMigrationRequestSchema)],
});
req.header('Content-Type', 'application/json');
req.json(mapped.body);
req.appendTemplatePath `/subscriptions/${mapped.subscriptionId}/migrations.json`;
req.throwOn(422, ErrorListResponseError, true, "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.");
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(subscriptionResponseSchema, requestOptions);
}
/**
* Previews the charges resulting from migrating a subscription to a different product.
*
* ## Previewing a future date
* It is also possible to preview the migration for a date in the future, as long as it's still within
* the subscription's current billing period, by passing a `proration_date` along with the request (e.g.
* , `"proration_date": "2020-12-18T18:25:43.511Z"`).
*
* This will calculate the prorated adjustment, charge, payment and credit applied values assuming the
* migration is done at that date in the future as opposed to right now.
*
* @param subscriptionId The Chargify id of the subscription.
* @param body
* @return Response from the API call
*/
async previewSubscriptionProductMigration(subscriptionId, body, requestOptions) {
const req = this.createRequest('POST');
const mapped = req.prepareArgs({
subscriptionId: [subscriptionId, number()],
body: [body, optional(subscriptionMigrationPreviewRequestSchema)],
});
req.header('Content-Type', 'application/json');
req.json(mapped.body);
req.appendTemplatePath `/subscriptions/${mapped.subscriptionId}/migrations/preview.json`;
req.throwOn(422, ErrorListResponseError, true, "HTTP Response Not OK. Status code: {$statusCode}. Response: '{$response.body}'.");
req.authenticate([{ basicAuth: true }]);
return req.callAsJson(subscriptionMigrationPreviewResponseSchema, requestOptions);
}
}
//# sourceMappingURL=subscriptionProductsController.js.map