You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.1 KiB
57 lines
1.1 KiB
const ms = require('ms');
|
|
|
|
const Now = require('../lib');
|
|
|
|
async function parsePlan(json) {
|
|
const { subscription } = json
|
|
let id;
|
|
let until;
|
|
let name
|
|
|
|
if (subscription) {
|
|
const planItems = subscription.items.data;
|
|
const mainPlan = planItems.find(d => d.plan.metadata.is_main_plan === '1');
|
|
|
|
if (mainPlan) {
|
|
id = mainPlan.plan.id
|
|
name = mainPlan.plan.name
|
|
if (subscription.cancel_at_period_end) {
|
|
until = ms(
|
|
new Date(subscription.current_period_end * 1000) - new Date(),
|
|
{ long: true }
|
|
);
|
|
}
|
|
} else {
|
|
id = 'oss'
|
|
}
|
|
} else {
|
|
id = 'oss';
|
|
}
|
|
|
|
return { id, name, until };
|
|
}
|
|
|
|
module.exports = class Plans extends Now {
|
|
async getCurrent() {
|
|
const res = await this._fetch('/plan');
|
|
const json = await res.json()
|
|
return parsePlan(json);
|
|
}
|
|
|
|
async set(plan) {
|
|
const res = await this._fetch('/plan', {
|
|
method: 'PUT',
|
|
body: { plan }
|
|
});
|
|
|
|
const json = await res.json()
|
|
|
|
if (res.ok) {
|
|
return parsePlan(json);
|
|
}
|
|
|
|
const err = new Error(json.error.message);
|
|
err.code = json.error.code
|
|
throw err;
|
|
}
|
|
};
|
|
|