Explorar o código

Merge pull request #25404 from overleaf/mf-send-subscription-analytics-events

[web] Send analytics events and user properties when user start subscription using Stripe

GitOrigin-RevId: 9028397a5cb256df506e14beb1705191c9ae3f7f
M Fahru hai 1 ano
pai
achega
75ce58d0c6

+ 9 - 0
services/web/app/src/Features/Subscription/RecurlyEventHandler.js

@@ -66,6 +66,7 @@ async function _sendSubscriptionResumedEvent(userId, eventData) {
     {
     {
       plan_code: planCode,
       plan_code: planCode,
       subscriptionId,
       subscriptionId,
+      payment_provider: 'recurly',
     }
     }
   )
   )
   AnalyticsManager.setUserPropertyForUserInBackground(
   AnalyticsManager.setUserPropertyForUserInBackground(
@@ -87,6 +88,7 @@ async function _sendSubscriptionPausedEvent(userId, eventData) {
       pause_length: pauseLength,
       pause_length: pauseLength,
       plan_code: planCode,
       plan_code: planCode,
       subscriptionId,
       subscriptionId,
+      payment_provider: 'recurly',
     }
     }
   )
   )
   AnalyticsManager.setUserPropertyForUserInBackground(
   AnalyticsManager.setUserPropertyForUserInBackground(
@@ -108,6 +110,7 @@ async function _sendSubscriptionStartedEvent(userId, eventData) {
       is_trial: isTrial,
       is_trial: isTrial,
       has_ai_add_on: hasAiAddOn,
       has_ai_add_on: hasAiAddOn,
       subscriptionId,
       subscriptionId,
+      payment_provider: 'recurly',
     }
     }
   )
   )
   AnalyticsManager.setUserPropertyForUserInBackground(
   AnalyticsManager.setUserPropertyForUserInBackground(
@@ -154,6 +157,7 @@ async function _sendSubscriptionUpdatedEvent(userId, eventData) {
       is_trial: isTrial,
       is_trial: isTrial,
       has_ai_add_on: hasAiAddOn,
       has_ai_add_on: hasAiAddOn,
       subscriptionId,
       subscriptionId,
+      payment_provider: 'recurly',
     }
     }
   )
   )
   AnalyticsManager.setUserPropertyForUserInBackground(
   AnalyticsManager.setUserPropertyForUserInBackground(
@@ -185,6 +189,7 @@ async function _sendSubscriptionCancelledEvent(userId, eventData) {
       is_trial: isTrial,
       is_trial: isTrial,
       has_ai_add_on: hasAiAddOn,
       has_ai_add_on: hasAiAddOn,
       subscriptionId,
       subscriptionId,
+      payment_provider: 'recurly',
     }
     }
   )
   )
   AnalyticsManager.setUserPropertyForUserInBackground(
   AnalyticsManager.setUserPropertyForUserInBackground(
@@ -211,6 +216,7 @@ async function _sendSubscriptionExpiredEvent(userId, eventData) {
       is_trial: isTrial,
       is_trial: isTrial,
       has_ai_add_on: hasAiAddOn,
       has_ai_add_on: hasAiAddOn,
       subscriptionId,
       subscriptionId,
+      payment_provider: 'recurly',
     }
     }
   )
   )
   AnalyticsManager.setUserPropertyForUserInBackground(
   AnalyticsManager.setUserPropertyForUserInBackground(
@@ -242,6 +248,7 @@ async function _sendSubscriptionRenewedEvent(userId, eventData) {
       is_trial: isTrial,
       is_trial: isTrial,
       has_ai_add_on: hasAiAddOn,
       has_ai_add_on: hasAiAddOn,
       subscriptionId,
       subscriptionId,
+      payment_provider: 'recurly',
     }
     }
   )
   )
   AnalyticsManager.setUserPropertyForUserInBackground(
   AnalyticsManager.setUserPropertyForUserInBackground(
@@ -272,6 +279,7 @@ async function _sendSubscriptionReactivatedEvent(userId, eventData) {
       quantity,
       quantity,
       has_ai_add_on: hasAiAddOn,
       has_ai_add_on: hasAiAddOn,
       subscriptionId,
       subscriptionId,
+      payment_provider: 'recurly',
     }
     }
   )
   )
   AnalyticsManager.setUserPropertyForUserInBackground(
   AnalyticsManager.setUserPropertyForUserInBackground(
@@ -318,6 +326,7 @@ async function _sendInvoicePaidEvent(userId, eventData) {
       taxInCents,
       taxInCents,
       country,
       country,
       collectionMethod,
       collectionMethod,
+      payment_provider: 'recurly',
       ...subscriptionIds,
       ...subscriptionIds,
     }
     }
   )
   )

+ 8 - 0
services/web/test/unit/src/Subscription/RecurlyEventHandlerTests.js

@@ -62,6 +62,7 @@ describe('RecurlyEventHandler', function () {
         is_trial: true,
         is_trial: true,
         has_ai_add_on: false,
         has_ai_add_on: false,
         subscriptionId: this.eventData.subscription.uuid,
         subscriptionId: this.eventData.subscription.uuid,
+        payment_provider: 'recurly',
       }
       }
     )
     )
     sinon.assert.calledWith(
     sinon.assert.calledWith(
@@ -116,6 +117,7 @@ describe('RecurlyEventHandler', function () {
         is_trial: false,
         is_trial: false,
         has_ai_add_on: false,
         has_ai_add_on: false,
         subscriptionId: this.eventData.subscription.uuid,
         subscriptionId: this.eventData.subscription.uuid,
+        payment_provider: 'recurly',
       }
       }
     )
     )
     sinon.assert.calledWith(
     sinon.assert.calledWith(
@@ -149,6 +151,7 @@ describe('RecurlyEventHandler', function () {
         is_trial: true,
         is_trial: true,
         has_ai_add_on: false,
         has_ai_add_on: false,
         subscriptionId: this.eventData.subscription.uuid,
         subscriptionId: this.eventData.subscription.uuid,
+        payment_provider: 'recurly',
       }
       }
     )
     )
     sinon.assert.calledWith(
     sinon.assert.calledWith(
@@ -187,6 +190,7 @@ describe('RecurlyEventHandler', function () {
         is_trial: true,
         is_trial: true,
         has_ai_add_on: false,
         has_ai_add_on: false,
         subscriptionId: this.eventData.subscription.uuid,
         subscriptionId: this.eventData.subscription.uuid,
+        payment_provider: 'recurly',
       }
       }
     )
     )
     sinon.assert.calledWith(
     sinon.assert.calledWith(
@@ -219,6 +223,7 @@ describe('RecurlyEventHandler', function () {
         is_trial: true,
         is_trial: true,
         has_ai_add_on: false,
         has_ai_add_on: false,
         subscriptionId: this.eventData.subscription.uuid,
         subscriptionId: this.eventData.subscription.uuid,
+        payment_provider: 'recurly',
       }
       }
     )
     )
     sinon.assert.calledWith(
     sinon.assert.calledWith(
@@ -256,6 +261,7 @@ describe('RecurlyEventHandler', function () {
         is_trial: true,
         is_trial: true,
         has_ai_add_on: false,
         has_ai_add_on: false,
         subscriptionId: this.eventData.subscription.uuid,
         subscriptionId: this.eventData.subscription.uuid,
+        payment_provider: 'recurly',
       }
       }
     )
     )
   })
   })
@@ -274,6 +280,7 @@ describe('RecurlyEventHandler', function () {
         quantity: 1,
         quantity: 1,
         has_ai_add_on: false,
         has_ai_add_on: false,
         subscriptionId: this.eventData.subscription.uuid,
         subscriptionId: this.eventData.subscription.uuid,
+        payment_provider: 'recurly',
       }
       }
     )
     )
   })
   })
@@ -313,6 +320,7 @@ describe('RecurlyEventHandler', function () {
         collectionMethod: invoice.collection_method,
         collectionMethod: invoice.collection_method,
         subscriptionId1: invoice.subscription_ids[0],
         subscriptionId1: invoice.subscription_ids[0],
         subscriptionId2: invoice.subscription_ids[1],
         subscriptionId2: invoice.subscription_ids[1],
+        payment_provider: 'recurly',
       }
       }
     )
     )
   })
   })

+ 3 - 2
services/web/types/stripe/webhook-event.ts

@@ -1,3 +1,5 @@
+import Stripe from 'stripe'
+
 type StripeWebhookEventType =
 type StripeWebhookEventType =
   | 'customer.subscription.created'
   | 'customer.subscription.created'
   | 'customer.subscription.updated'
   | 'customer.subscription.updated'
@@ -6,8 +8,7 @@ type StripeWebhookEventType =
 export type CustomerSubscriptionWebhookEvent = {
 export type CustomerSubscriptionWebhookEvent = {
   type: StripeWebhookEventType
   type: StripeWebhookEventType
   data: {
   data: {
-    object: {
-      id: string
+    object: Stripe.Subscription & {
       metadata: {
       metadata: {
         adminUserId?: string
         adminUserId?: string
       }
       }