Compare commits
1 Commits
fix/openap
...
cloud/free
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b323c463a |
@@ -1,3 +1,5 @@
|
|||||||
|
import type { Subscription } from "@better-auth/stripe";
|
||||||
|
import type Stripe from "stripe";
|
||||||
import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
|
import { PutObjectCommand, S3Client } from "@aws-sdk/client-s3";
|
||||||
import { stripe } from "@better-auth/stripe";
|
import { stripe } from "@better-auth/stripe";
|
||||||
import { ChatOrPushProviderEnum } from "@novu/api/models/components";
|
import { ChatOrPushProviderEnum } from "@novu/api/models/components";
|
||||||
@@ -179,19 +181,17 @@ export const initAuth = (db: dbClient) => {
|
|||||||
freeTrial: {
|
freeTrial: {
|
||||||
days: 14,
|
days: 14,
|
||||||
onTrialStart: async (subscription) => {
|
onTrialStart: async (subscription) => {
|
||||||
// Called when a trial starts
|
await triggerWorkflow(db, "trial-start", subscription);
|
||||||
// @todo: send trial start email
|
|
||||||
// await sendTrialStartEmail(subscription.referenceId);
|
|
||||||
},
|
},
|
||||||
onTrialEnd: async ({ subscription }, request) => {
|
onTrialEnd: async ({ subscription }) => {
|
||||||
// Called when a trial ends
|
await triggerWorkflow(db, "trial-end", subscription);
|
||||||
// @todo: send trial end email
|
|
||||||
// await sendTrialEndEmail(user.email);
|
|
||||||
},
|
},
|
||||||
onTrialExpired: async (subscription) => {
|
onTrialExpired: async (subscription) => {
|
||||||
// Called when a trial expires without conversion
|
await triggerWorkflow(
|
||||||
// @todo: send trial expired email
|
db,
|
||||||
// await sendTrialExpiredEmail(subscription.referenceId);
|
"trial-expired",
|
||||||
|
subscription,
|
||||||
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -203,19 +203,17 @@ export const initAuth = (db: dbClient) => {
|
|||||||
freeTrial: {
|
freeTrial: {
|
||||||
days: 14,
|
days: 14,
|
||||||
onTrialStart: async (subscription) => {
|
onTrialStart: async (subscription) => {
|
||||||
// Called when a trial starts
|
await triggerWorkflow(db, "trial-start", subscription);
|
||||||
// @todo: send trial start email
|
|
||||||
// await sendTrialStartEmail(subscription.referenceId);
|
|
||||||
},
|
},
|
||||||
onTrialEnd: async ({ subscription }, request) => {
|
onTrialEnd: async ({ subscription }) => {
|
||||||
// Called when a trial ends
|
await triggerWorkflow(db, "trial-end", subscription);
|
||||||
// @todo: send trial end email
|
|
||||||
// await sendTrialEndEmail(user.email);
|
|
||||||
},
|
},
|
||||||
onTrialExpired: async (subscription) => {
|
onTrialExpired: async (subscription) => {
|
||||||
// Called when a trial expires without conversion
|
await triggerWorkflow(
|
||||||
// @todo: send trial expired email
|
db,
|
||||||
// await sendTrialExpiredEmail(subscription.referenceId);
|
"trial-expired",
|
||||||
|
subscription,
|
||||||
|
);
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@@ -474,3 +472,34 @@ export const initAuth = (db: dbClient) => {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
async function triggerWorkflow(
|
||||||
|
db: dbClient,
|
||||||
|
workflowId: string,
|
||||||
|
subscription: Subscription,
|
||||||
|
cancellationDetails?: Stripe.Subscription.CancellationDetails | null,
|
||||||
|
) {
|
||||||
|
try {
|
||||||
|
if (!subscription.stripeCustomerId || !notificationClient) return;
|
||||||
|
|
||||||
|
const user = await userRepo.getByStripeCustomerId(
|
||||||
|
db,
|
||||||
|
subscription.stripeCustomerId,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!user || !notificationClient) return;
|
||||||
|
|
||||||
|
await notificationClient.trigger({
|
||||||
|
to: {
|
||||||
|
subscriberId: user.id,
|
||||||
|
},
|
||||||
|
payload: {
|
||||||
|
...subscription,
|
||||||
|
cancellationDetails,
|
||||||
|
},
|
||||||
|
workflowId,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error triggering workflow", error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -28,6 +28,15 @@ export const getById = async (db: dbClient, userId: string) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getByStripeCustomerId = async (
|
||||||
|
db: dbClient,
|
||||||
|
stripeCustomerId: string,
|
||||||
|
) => {
|
||||||
|
return await db.query.users.findFirst({
|
||||||
|
where: eq(users.stripeCustomerId, stripeCustomerId),
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
export const getByEmail = (db: dbClient, email: string) => {
|
export const getByEmail = (db: dbClient, email: string) => {
|
||||||
return db.query.users.findFirst({
|
return db.query.users.findFirst({
|
||||||
columns: {
|
columns: {
|
||||||
|
|||||||
@@ -71,4 +71,13 @@ export const updateSubscriptionSeats = async (
|
|||||||
return updatedSubscription;
|
return updatedSubscription;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getCancellationDetails = async (
|
||||||
|
stripeSubscriptionId: string,
|
||||||
|
): Promise<Stripe.Subscription.CancellationDetails | null> => {
|
||||||
|
const stripe = createStripeClient();
|
||||||
|
const stripeSubscription =
|
||||||
|
await stripe.subscriptions.retrieve(stripeSubscriptionId);
|
||||||
|
return stripeSubscription.cancellation_details ?? null;
|
||||||
|
};
|
||||||
|
|
||||||
export { createStripeClient };
|
export { createStripeClient };
|
||||||
|
|||||||
Reference in New Issue
Block a user