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

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
}
}