Skip to content

Commit f5a7786

Browse files
authored
Merge pull request #12 from WorldBrain/feature/pioneer-addon-variable-donation
Pioneer add-on, enables beta feature use
2 parents f894eb9 + 7381347 commit f5a7786

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

firebase/functions/src/subscriptions/index.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,20 @@ export const getCheckoutLink = functions.https.onCall(
3434
const checkoutOptions = {
3535
subscription: { plan_id: data.planId },
3636
customer: getUser(context),
37-
"redirect_url": undefined,
37+
redirect_url: undefined,
38+
addons: {},
3839
}
3940

40-
if (data["redirect_url"]) {
41-
checkoutOptions["redirect_url"] = data["redirect_url"]
41+
if (data.redirect_url) {
42+
checkoutOptions.redirect_url = data.redirect_url
43+
}
44+
45+
if (data?.pioneerDonationAmount) {
46+
checkoutOptions.addons = [{
47+
"id": "pioneer",
48+
unit_price: Math.max(data.pioneerDonationAmount * 100,100),
49+
quantity: 1,
50+
}]
4251
}
4352

4453
const result = await chargebee.hosted_page

firebase/functions/src/subscriptions/subscriptions.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,21 @@ export const refreshUserSubscriptionStatus = async (userId: string, { getSubscri
7575
// N.B. In case a user has more than one subscription to the same plan,
7676
// (e.g. newly configured plan or an old trial) make sure that the furthest expiry date is set.
7777
if (existingSubscription == null || existingSubscription.expiry < expiry) {
78+
79+
const donationAddOnObject = entry.subscription?.addons?.find(
80+
(addOn: any) => addOn.id === 'pioneer'
81+
)
82+
const donation = (donationAddOnObject) ? {
83+
donation: donationAddOnObject.unit_price * donationAddOnObject.amount
84+
} : {}
85+
7886
// Set subscription specific expiry and status
7987
claims.subscriptions[subPlanId] = {
8088
expiry,
8189
status: entry.subscription.status,
90+
...donation
8291
}
92+
8393
// Update overall subscription status
8494
claims.subscriptionStatus = entry.subscription.status
8595
claims.subscriptionExpiry = expiry
@@ -91,6 +101,7 @@ export const refreshUserSubscriptionStatus = async (userId: string, { getSubscri
91101

92102

93103
setFeaturesFromSubscriptions(claims);
104+
setFeaturesIfDonated(claims);
94105

95106
// N.B. Claims are always reset, not additive
96107
// console.log(`setCustomUserClaims(${userId},${JSON.stringify(claims)})`)
@@ -112,6 +123,15 @@ const setFeaturesFromSubscriptions = (claims: Claims) => {
112123
}
113124
}
114125

126+
const setFeaturesIfDonated = (claims: Claims) => {
127+
for (const subscriptionKey of Object.keys(claims.subscriptions)) {
128+
const subscription = claims.subscriptions[subscriptionKey as UserPlan]
129+
if (subscription && (subscription?.donation ?? 0) > 0){
130+
claims.features.beta = { expiry: subscription.expiry }
131+
}
132+
}
133+
}
134+
115135
export const subscriptionToFeatures = new Map<UserPlan, UserFeature[]>([
116136
["pro-yearly", ['backup', 'sync']],
117137
["pro-monthly", ['backup', 'sync']],

0 commit comments

Comments
 (0)