|
|
@@ -0,0 +1,55 @@
|
|
|
+// @ts-check
|
|
|
+import settings from '@overleaf/settings'
|
|
|
+import recurly from 'recurly'
|
|
|
+
|
|
|
+const ADD_ON_CODE = process.argv[2]
|
|
|
+
|
|
|
+async function main() {
|
|
|
+ if (!ADD_ON_CODE) {
|
|
|
+ console.error('Missing add-on code')
|
|
|
+ console.error(
|
|
|
+ 'Usage: node scripts/recurly/generate_addon_prices.mjs ADD_ON_CODE'
|
|
|
+ )
|
|
|
+ process.exit(1)
|
|
|
+ }
|
|
|
+
|
|
|
+ const localizedAddOnsPricing = {}
|
|
|
+
|
|
|
+ const monthlyPlan = await getPlan(ADD_ON_CODE)
|
|
|
+ if (monthlyPlan == null) {
|
|
|
+ console.error(`Monthly plan missing in Recurly: ${ADD_ON_CODE}`)
|
|
|
+ process.exit(1)
|
|
|
+ }
|
|
|
+ for (const { currency, unitAmount } of monthlyPlan.currencies ?? []) {
|
|
|
+ if (!localizedAddOnsPricing[currency]) {
|
|
|
+ localizedAddOnsPricing[currency] = { [ADD_ON_CODE]: {} }
|
|
|
+ }
|
|
|
+ localizedAddOnsPricing[currency][ADD_ON_CODE].monthly = unitAmount
|
|
|
+ }
|
|
|
+
|
|
|
+ const annualPlan = await getPlan(`${ADD_ON_CODE}-annual`)
|
|
|
+ if (annualPlan == null) {
|
|
|
+ console.error(`Annual plan missing in Recurly: ${ADD_ON_CODE}-annual`)
|
|
|
+ process.exit(1)
|
|
|
+ }
|
|
|
+ for (const { currency, unitAmount } of annualPlan.currencies ?? []) {
|
|
|
+ if (!localizedAddOnsPricing[currency]) {
|
|
|
+ localizedAddOnsPricing[currency] = { [ADD_ON_CODE]: {} }
|
|
|
+ }
|
|
|
+ localizedAddOnsPricing[currency][ADD_ON_CODE].annual = unitAmount
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log(JSON.stringify({ localizedAddOnsPricing }, null, 2))
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * Get a plan configuration from Recurly
|
|
|
+ *
|
|
|
+ * @param {string} planCode
|
|
|
+ */
|
|
|
+async function getPlan(planCode) {
|
|
|
+ const recurlyClient = new recurly.Client(settings.apis.recurly.apiKey)
|
|
|
+ return await recurlyClient.getPlan(`code-${planCode}`)
|
|
|
+}
|
|
|
+
|
|
|
+await main()
|