@oneuptime/common 12.0.17 → 12.0.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/Models/DatabaseModels/EnterpriseLicense.ts +23 -0
  2. package/Models/DatabaseModels/Index.ts +4 -2
  3. package/Models/DatabaseModels/Monitor.ts +39 -9
  4. package/Models/DatabaseModels/UserMicrosoftTeams.ts +344 -0
  5. package/Models/DatabaseModels/UserNotificationRule.ts +144 -8
  6. package/Models/DatabaseModels/UserNotificationSetting.ts +34 -0
  7. package/Models/DatabaseModels/UserOnCallLogTimeline.ts +95 -0
  8. package/Models/DatabaseModels/UserSlack.ts +341 -0
  9. package/Models/DatabaseModels/WorkspaceProjectAuthToken.ts +9 -0
  10. package/Server/API/UserMicrosoftTeamsAPI.ts +127 -0
  11. package/Server/API/UserSlackAPI.ts +125 -0
  12. package/Server/EnvironmentConfig.ts +12 -107
  13. package/Server/Infrastructure/Postgres/SchemaMigrations/1788700000000-RemoveMarketingConversionUploadState.ts +33 -0
  14. package/Server/Infrastructure/Postgres/SchemaMigrations/1788800000000-DropMarketingConversionAddEnterpriseLicenseEmail.ts +51 -0
  15. package/Server/Infrastructure/Postgres/SchemaMigrations/1788900000000-RedactStoredMonitorIngestSecrets.ts +117 -0
  16. package/Server/Infrastructure/Postgres/SchemaMigrations/1789000000000-AddUserSlackAndMicrosoftTeams.ts +197 -0
  17. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +8 -0
  18. package/Server/Infrastructure/Queue.ts +7 -0
  19. package/Server/Services/BillingService.ts +8 -0
  20. package/Server/Services/EnterpriseLicenseService.ts +60 -0
  21. package/Server/Services/Index.ts +6 -2
  22. package/Server/Services/LlmLogService.ts +25 -9
  23. package/Server/Services/OnCallReadinessService.ts +86 -2
  24. package/Server/Services/ProjectService.ts +67 -0
  25. package/Server/Services/UserMicrosoftTeamsService.ts +208 -0
  26. package/Server/Services/UserNotificationMethodAdminService.ts +167 -5
  27. package/Server/Services/UserNotificationRuleAdminService.ts +40 -6
  28. package/Server/Services/UserNotificationRuleService.ts +589 -11
  29. package/Server/Services/UserNotificationSettingService.ts +138 -0
  30. package/Server/Services/UserService.ts +28 -0
  31. package/Server/Services/UserSlackService.ts +218 -0
  32. package/Server/Services/WorkspaceProjectAuthTokenService.ts +67 -1
  33. package/Server/Services/WorkspaceUserAuthTokenService.ts +73 -0
  34. package/Server/Services/WorkspaceUserNotificationService.ts +190 -0
  35. package/Server/Utils/Marketing/MarketingEventUtil.ts +145 -0
  36. package/Server/Utils/Marketing/MarketingEventWebhook.ts +114 -0
  37. package/Server/Utils/Monitor/MonitorLogUtil.ts +14 -1
  38. package/Server/Utils/Monitor/MonitorPayloadRedaction.ts +321 -0
  39. package/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.ts +191 -4
  40. package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +22 -14
  41. package/Tests/App/Dashboard/AdminUserNotificationMethodsPage.test.tsx +22 -11
  42. package/Tests/App/Dashboard/OnCallPreventionGuards.test.tsx +37 -1
  43. package/Tests/App/Dashboard/OnCallRulesTable.test.tsx +18 -10
  44. package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +17 -0
  45. package/Tests/Models/DatabaseModels/DomainRoleTierCoverage.test.ts +27 -1
  46. package/Tests/Models/DatabaseModels/MonitorSecretKeyColumnAccessControl.test.ts +214 -0
  47. package/Tests/Server/API/OnCallReadinessAPI.test.ts +145 -26
  48. package/Tests/Server/API/UserNotificationMethodAdminAPI.test.ts +2 -2
  49. package/Tests/Server/Services/AIServiceDailyBudget.test.ts +11 -1
  50. package/Tests/Server/Services/AdminRuleEditGuards.test.ts +22 -8
  51. package/Tests/Server/Services/BillingService.test.ts +20 -0
  52. package/Tests/Server/Services/DeliverNotificationForRuleExtraction.test.ts +18 -2
  53. package/Tests/Server/Services/EpisodeRuleSeverityRepair.test.ts +5 -1
  54. package/Tests/Server/Services/LlmLogServiceTokenAggregateParams.test.ts +640 -0
  55. package/Tests/Server/Services/NotificationChannelEventCoverage.test.ts +246 -22
  56. package/Tests/Server/Services/NotificationDeletionImpact.test.ts +136 -8
  57. package/Tests/Server/Services/OnCallNotificationFallback.test.ts +191 -8
  58. package/Tests/Server/Services/OnCallReadinessService.test.ts +343 -18
  59. package/Tests/Server/Services/SeverityRuleBackfill.test.ts +5 -1
  60. package/Tests/Server/Services/UserMicrosoftTeamsService.test.ts +343 -0
  61. package/Tests/Server/Services/UserNotificationMethodAdminService.test.ts +209 -8
  62. package/Tests/Server/Services/UserNotificationRuleAdminGuards.test.ts +22 -6
  63. package/Tests/Server/Services/UserNotificationRuleDefaultCreation.test.ts +12 -6
  64. package/Tests/Server/Services/UserNotificationRuleExecuteItem.test.ts +37 -3
  65. package/Tests/Server/Services/UserNotificationRuleWorkspaceDelivery.test.ts +669 -0
  66. package/Tests/Server/Services/UserNotificationSettingWorkspaceChannels.test.ts +410 -0
  67. package/Tests/Server/Services/UserSlackService.test.ts +407 -0
  68. package/Tests/Server/Services/WorkspaceProjectAuthTokenDisconnectCascade.test.ts +224 -0
  69. package/Tests/Server/Services/WorkspaceUserAuthTokenNotificationMethodCascade.test.ts +189 -0
  70. package/Tests/Server/Services/WorkspaceUserNotificationService.test.ts +496 -0
  71. package/Tests/Server/Types/Database/Permissions/AdminNotificationRuleAccess.test.ts +30 -17
  72. package/Tests/Server/Types/Database/Permissions/CreateOwnershipScoping.test.ts +8 -3
  73. package/Tests/Server/Types/Database/Permissions/OwnerOnlyColumns.test.ts +72 -3
  74. package/Tests/Server/Types/Database/Permissions/UserNotificationRuleScoping.test.ts +22 -18
  75. package/Tests/Server/Types/Database/Permissions/WorkspaceMethodStampedColumnCreate.test.ts +178 -0
  76. package/Tests/Server/Utils/Marketing/MarketingEventUtil.test.ts +259 -0
  77. package/Tests/Server/Utils/Marketing/MarketingEventWebhook.test.ts +257 -0
  78. package/Tests/Server/Utils/Monitor/MonitorLogUtilRedaction.test.ts +300 -0
  79. package/Tests/Server/Utils/Monitor/MonitorPayloadRedaction.test.ts +381 -0
  80. package/Tests/Server/Utils/Runbook/RunbookExecutePermission.test.ts +228 -0
  81. package/Tests/Server/Utils/SessionReplay/SessionReplayErasureTombstone.test.ts +189 -0
  82. package/Tests/Server/Utils/SessionReplay/SessionReplayUsage.test.ts +205 -0
  83. package/Tests/Server/Utils/Telemetry/AppMetrics.test.ts +275 -0
  84. package/Tests/Server/Utils/Telemetry/TelemetryContext.test.ts +279 -0
  85. package/Tests/Server/Utils/Workspace/MicrosoftTeamsDirectMessage.test.ts +454 -0
  86. package/Tests/Types/Kubernetes/KubernetesObjectParsers.test.ts +794 -0
  87. package/Tests/Types/Kubernetes/KubernetesRightSizing.test.ts +53 -0
  88. package/Tests/Types/Measurement/MeasurementAggregationType.test.ts +100 -0
  89. package/Tests/Types/Monitor/MonitorStepConfigHelpers.test.ts +114 -0
  90. package/Tests/Types/Workspace/WorkspaceType.test.ts +53 -0
  91. package/Tests/UI/Utils/NotificationMethodUtil.test.ts +137 -9
  92. package/Tests/UI/Utils/PermissionGate.test.ts +105 -0
  93. package/Tests/Utils/Dashboard/Components/DashboardComponentDefaults.test.ts +257 -0
  94. package/Types/Billing/PayAsYouGoPricing.ts +1 -1
  95. package/Types/Marketing/MarketingEvent.ts +97 -0
  96. package/UI/Utils/NotificationMethodUtil.ts +41 -1
  97. package/UI/Utils/PermissionGate.ts +56 -0
  98. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js +24 -0
  99. package/build/dist/Models/DatabaseModels/EnterpriseLicense.js.map +1 -1
  100. package/build/dist/Models/DatabaseModels/Index.js +4 -2
  101. package/build/dist/Models/DatabaseModels/Index.js.map +1 -1
  102. package/build/dist/Models/DatabaseModels/Monitor.js +39 -9
  103. package/build/dist/Models/DatabaseModels/Monitor.js.map +1 -1
  104. package/build/dist/Models/DatabaseModels/UserMicrosoftTeams.js +363 -0
  105. package/build/dist/Models/DatabaseModels/UserMicrosoftTeams.js.map +1 -0
  106. package/build/dist/Models/DatabaseModels/UserNotificationRule.js +145 -8
  107. package/build/dist/Models/DatabaseModels/UserNotificationRule.js.map +1 -1
  108. package/build/dist/Models/DatabaseModels/UserNotificationSetting.js +38 -0
  109. package/build/dist/Models/DatabaseModels/UserNotificationSetting.js.map +1 -1
  110. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js +96 -0
  111. package/build/dist/Models/DatabaseModels/UserOnCallLogTimeline.js.map +1 -1
  112. package/build/dist/Models/DatabaseModels/UserSlack.js +361 -0
  113. package/build/dist/Models/DatabaseModels/UserSlack.js.map +1 -0
  114. package/build/dist/Models/DatabaseModels/WorkspaceProjectAuthToken.js.map +1 -1
  115. package/build/dist/Server/API/UserMicrosoftTeamsAPI.js +82 -0
  116. package/build/dist/Server/API/UserMicrosoftTeamsAPI.js.map +1 -0
  117. package/build/dist/Server/API/UserSlackAPI.js +81 -0
  118. package/build/dist/Server/API/UserSlackAPI.js.map +1 -0
  119. package/build/dist/Server/EnvironmentConfig.js +10 -70
  120. package/build/dist/Server/EnvironmentConfig.js.map +1 -1
  121. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788700000000-RemoveMarketingConversionUploadState.js +26 -0
  122. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788700000000-RemoveMarketingConversionUploadState.js.map +1 -0
  123. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788800000000-DropMarketingConversionAddEnterpriseLicenseEmail.js +37 -0
  124. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788800000000-DropMarketingConversionAddEnterpriseLicenseEmail.js.map +1 -0
  125. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788900000000-RedactStoredMonitorIngestSecrets.js +106 -0
  126. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1788900000000-RedactStoredMonitorIngestSecrets.js.map +1 -0
  127. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789000000000-AddUserSlackAndMicrosoftTeams.js +78 -0
  128. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1789000000000-AddUserSlackAndMicrosoftTeams.js.map +1 -0
  129. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +8 -0
  130. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  131. package/build/dist/Server/Infrastructure/Queue.js +7 -0
  132. package/build/dist/Server/Infrastructure/Queue.js.map +1 -1
  133. package/build/dist/Server/Services/BillingService.js +6 -0
  134. package/build/dist/Server/Services/BillingService.js.map +1 -1
  135. package/build/dist/Server/Services/EnterpriseLicenseService.js +65 -0
  136. package/build/dist/Server/Services/EnterpriseLicenseService.js.map +1 -1
  137. package/build/dist/Server/Services/Index.js +6 -2
  138. package/build/dist/Server/Services/Index.js.map +1 -1
  139. package/build/dist/Server/Services/LlmLogService.js +25 -9
  140. package/build/dist/Server/Services/LlmLogService.js.map +1 -1
  141. package/build/dist/Server/Services/OnCallReadinessService.js +74 -2
  142. package/build/dist/Server/Services/OnCallReadinessService.js.map +1 -1
  143. package/build/dist/Server/Services/ProjectService.js +56 -0
  144. package/build/dist/Server/Services/ProjectService.js.map +1 -1
  145. package/build/dist/Server/Services/UserMicrosoftTeamsService.js +183 -0
  146. package/build/dist/Server/Services/UserMicrosoftTeamsService.js.map +1 -0
  147. package/build/dist/Server/Services/UserNotificationMethodAdminService.js +138 -2
  148. package/build/dist/Server/Services/UserNotificationMethodAdminService.js.map +1 -1
  149. package/build/dist/Server/Services/UserNotificationRuleAdminService.js +32 -4
  150. package/build/dist/Server/Services/UserNotificationRuleAdminService.js.map +1 -1
  151. package/build/dist/Server/Services/UserNotificationRuleService.js +499 -67
  152. package/build/dist/Server/Services/UserNotificationRuleService.js.map +1 -1
  153. package/build/dist/Server/Services/UserNotificationSettingService.js +118 -0
  154. package/build/dist/Server/Services/UserNotificationSettingService.js.map +1 -1
  155. package/build/dist/Server/Services/UserService.js +26 -1
  156. package/build/dist/Server/Services/UserService.js.map +1 -1
  157. package/build/dist/Server/Services/UserSlackService.js +195 -0
  158. package/build/dist/Server/Services/UserSlackService.js.map +1 -0
  159. package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js +64 -1
  160. package/build/dist/Server/Services/WorkspaceProjectAuthTokenService.js.map +1 -1
  161. package/build/dist/Server/Services/WorkspaceUserAuthTokenService.js +70 -0
  162. package/build/dist/Server/Services/WorkspaceUserAuthTokenService.js.map +1 -1
  163. package/build/dist/Server/Services/WorkspaceUserNotificationService.js +129 -0
  164. package/build/dist/Server/Services/WorkspaceUserNotificationService.js.map +1 -0
  165. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js +94 -0
  166. package/build/dist/Server/Utils/Marketing/MarketingEventUtil.js.map +1 -0
  167. package/build/dist/Server/Utils/Marketing/MarketingEventWebhook.js +93 -0
  168. package/build/dist/Server/Utils/Marketing/MarketingEventWebhook.js.map +1 -0
  169. package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js +12 -1
  170. package/build/dist/Server/Utils/Monitor/MonitorLogUtil.js.map +1 -1
  171. package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js +233 -0
  172. package/build/dist/Server/Utils/Monitor/MonitorPayloadRedaction.js.map +1 -0
  173. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js +141 -4
  174. package/build/dist/Server/Utils/Workspace/MicrosoftTeams/MicrosoftTeams.js.map +1 -1
  175. package/build/dist/Types/Billing/PayAsYouGoPricing.js +1 -1
  176. package/build/dist/Types/Billing/PayAsYouGoPricing.js.map +1 -1
  177. package/build/dist/Types/Marketing/MarketingEvent.js +43 -0
  178. package/build/dist/Types/Marketing/MarketingEvent.js.map +1 -0
  179. package/build/dist/UI/Utils/NotificationMethodUtil.js +33 -1
  180. package/build/dist/UI/Utils/NotificationMethodUtil.js.map +1 -1
  181. package/build/dist/UI/Utils/PermissionGate.js +32 -0
  182. package/build/dist/UI/Utils/PermissionGate.js.map +1 -1
  183. package/package.json +1 -1
  184. package/Models/DatabaseModels/MarketingConversion.ts +0 -410
  185. package/Server/Services/MarketingConversionService.ts +0 -10
  186. package/Server/Utils/Marketing/ConversionUploadProvider.ts +0 -215
  187. package/Server/Utils/Marketing/ConversionUploadProviders.ts +0 -22
  188. package/Server/Utils/Marketing/Providers/GoogleAds.ts +0 -333
  189. package/Server/Utils/Marketing/Providers/LinkedIn.ts +0 -185
  190. package/Server/Utils/Marketing/Providers/Meta.ts +0 -182
  191. package/Server/Utils/Marketing/Providers/MicrosoftAds.ts +0 -223
  192. package/Server/Utils/Marketing/Providers/Reddit.ts +0 -208
  193. package/Tests/Server/Utils/Marketing/AdUploadableConversionTypes.test.ts +0 -315
  194. package/Tests/Server/Utils/Marketing/ConversionUploadProvider.test.ts +0 -300
  195. package/Tests/Server/Utils/Marketing/GoogleAds.test.ts +0 -592
  196. package/Tests/Server/Utils/Marketing/LinkedIn.test.ts +0 -282
  197. package/Tests/Server/Utils/Marketing/Meta.test.ts +0 -304
  198. package/Tests/Server/Utils/Marketing/MicrosoftAds.test.ts +0 -263
  199. package/Tests/Server/Utils/Marketing/Reddit.test.ts +0 -259
  200. package/Types/Marketing/MarketingConversion.ts +0 -53
  201. package/build/dist/Models/DatabaseModels/MarketingConversion.js +0 -445
  202. package/build/dist/Models/DatabaseModels/MarketingConversion.js.map +0 -1
  203. package/build/dist/Server/Services/MarketingConversionService.js +0 -9
  204. package/build/dist/Server/Services/MarketingConversionService.js.map +0 -1
  205. package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js +0 -93
  206. package/build/dist/Server/Utils/Marketing/ConversionUploadProvider.js.map +0 -1
  207. package/build/dist/Server/Utils/Marketing/ConversionUploadProviders.js +0 -20
  208. package/build/dist/Server/Utils/Marketing/ConversionUploadProviders.js.map +0 -1
  209. package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js +0 -221
  210. package/build/dist/Server/Utils/Marketing/Providers/GoogleAds.js.map +0 -1
  211. package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js +0 -137
  212. package/build/dist/Server/Utils/Marketing/Providers/LinkedIn.js.map +0 -1
  213. package/build/dist/Server/Utils/Marketing/Providers/Meta.js +0 -133
  214. package/build/dist/Server/Utils/Marketing/Providers/Meta.js.map +0 -1
  215. package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js +0 -143
  216. package/build/dist/Server/Utils/Marketing/Providers/MicrosoftAds.js.map +0 -1
  217. package/build/dist/Server/Utils/Marketing/Providers/Reddit.js +0 -145
  218. package/build/dist/Server/Utils/Marketing/Providers/Reddit.js.map +0 -1
  219. package/build/dist/Types/Marketing/MarketingConversion.js +0 -52
  220. package/build/dist/Types/Marketing/MarketingConversion.js.map +0 -1
@@ -1,445 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import BaseModel from "./DatabaseBaseModel/DatabaseBaseModel";
11
- import Route from "../../Types/API/Route";
12
- import ColumnAccessControl from "../../Types/Database/AccessControl/ColumnAccessControl";
13
- import TableAccessControl from "../../Types/Database/AccessControl/TableAccessControl";
14
- import ColumnLength from "../../Types/Database/ColumnLength";
15
- import ColumnType from "../../Types/Database/ColumnType";
16
- import CrudApiEndpoint from "../../Types/Database/CrudApiEndpoint";
17
- import TableColumn from "../../Types/Database/TableColumn";
18
- import TableColumnType from "../../Types/Database/TableColumnType";
19
- import TableMetadata from "../../Types/Database/TableMetadata";
20
- import IconProp from "../../Types/Icon/IconProp";
21
- import ObjectID from "../../Types/ObjectID";
22
- import { Column, Entity, Index } from "typeorm";
23
- /*
24
- * Internal table (no API access) recording server-confirmed conversions —
25
- * signups, booked meetings and paid subscriptions — together with the
26
- * attribution the converting visitor carried (ad click IDs, UTM parameters,
27
- * first touch) and the status of uploading them to ad platforms. Browser
28
- * analytics never write this table: rows are written by the Cal.com webhook and
29
- * the MarketingConversions worker job, which also reads it.
30
- *
31
- * This table is deliberately not a CRM. Contact, account and deal records live
32
- * in Revenue, and nothing here creates or advances them — a booked meeting is
33
- * a measured conversion, not a qualified opportunity.
34
- */
35
- let MarketingConversion = class MarketingConversion extends BaseModel {
36
- constructor() {
37
- super(...arguments);
38
- this.conversionType = undefined;
39
- this.userId = undefined;
40
- this.projectId = undefined;
41
- this.email = undefined;
42
- this.clickIds = undefined;
43
- this.conversionAt = undefined;
44
- this.conversionValueInUSDCents = undefined;
45
- this.uploadState = undefined;
46
- /*
47
- * Last-touch UTM parameters, copied from the User or Project this conversion
48
- * belongs to, or read from Cal booking metadata for a booked meeting.
49
- *
50
- * The ledger carried only clickIds until now, which meant the only thing
51
- * that could answer "how many demos did this campaign produce" was the ad
52
- * platform, and only for clicks it had auto-tagged. Any campaign delivering
53
- * UTMs without a click id — a newsletter, a sponsorship, a conference link —
54
- * was invisible in OneUptime's own data. These columns are what make the
55
- * ledger reportable on its own.
56
- */
57
- this.utmCampaign = undefined;
58
- this.utmSource = undefined;
59
- this.utmMedium = undefined;
60
- this.utmTerm = undefined;
61
- this.utmContent = undefined;
62
- this.utmUrl = undefined;
63
- this.firstTouchAttribution = undefined;
64
- /*
65
- * SHA-256 of the lowercased, trimmed email (Common/Server/Utils/Attribution).
66
- *
67
- * Two jobs, and it is the same value for both. Ad platforms that support
68
- * enhanced matching want exactly this digest, and it is the only key that
69
- * can join a booked meeting to the signup it produced weeks later: a
70
- * MeetingBooked row has no userId, a SignUp row has no booking, and the
71
- * person may well have used a different device for each. Indexed because
72
- * the chain-linking pass looks conversions up by it.
73
- */
74
- this.emailHash = undefined;
75
- /*
76
- * The earlier conversion by the same person that this one followed.
77
- *
78
- * Set by the MarketingConversions worker, never by a writer: the writers see
79
- * one moment each and cannot know what came before it. A paid subscription
80
- * pointing at a booked meeting is what makes "revenue this demo campaign
81
- * produced" answerable — without it the ledger holds four unrelated rows for
82
- * one customer journey.
83
- */
84
- this.attributedToConversionId = undefined;
85
- }
86
- };
87
- __decorate([
88
- ColumnAccessControl({
89
- create: [],
90
- read: [],
91
- update: [],
92
- }),
93
- TableColumn({
94
- type: TableColumnType.ShortText,
95
- required: true,
96
- title: "Conversion Type",
97
- description: "SignUp, MeetingBooked or PaidSubscription.",
98
- }),
99
- Column({
100
- type: ColumnType.ShortText,
101
- length: ColumnLength.ShortText,
102
- nullable: false,
103
- }),
104
- __metadata("design:type", String)
105
- ], MarketingConversion.prototype, "conversionType", void 0);
106
- __decorate([
107
- ColumnAccessControl({
108
- create: [],
109
- read: [],
110
- update: [],
111
- }),
112
- Index("idx_marketing_conversion_user_id"),
113
- TableColumn({
114
- type: TableColumnType.ObjectID,
115
- required: false,
116
- title: "User ID",
117
- description: "User this conversion belongs to (SignUp conversions). Null when the conversion has no OneUptime user yet, as with a booked meeting.",
118
- }),
119
- Column({
120
- type: ColumnType.ObjectID,
121
- nullable: true,
122
- transformer: ObjectID.getDatabaseTransformer(),
123
- }),
124
- __metadata("design:type", ObjectID)
125
- ], MarketingConversion.prototype, "userId", void 0);
126
- __decorate([
127
- ColumnAccessControl({
128
- create: [],
129
- read: [],
130
- update: [],
131
- }),
132
- Index("idx_marketing_conversion_project_id"),
133
- TableColumn({
134
- type: TableColumnType.ObjectID,
135
- required: false,
136
- title: "Project ID",
137
- description: "Project this conversion belongs to (PaidSubscription conversions).",
138
- }),
139
- Column({
140
- type: ColumnType.ObjectID,
141
- nullable: true,
142
- transformer: ObjectID.getDatabaseTransformer(),
143
- }),
144
- __metadata("design:type", ObjectID)
145
- ], MarketingConversion.prototype, "projectId", void 0);
146
- __decorate([
147
- ColumnAccessControl({
148
- create: [],
149
- read: [],
150
- update: [],
151
- }),
152
- TableColumn({
153
- type: TableColumnType.ShortText,
154
- required: false,
155
- title: "Email",
156
- description: "Email of the converting user. Never sent anywhere in the clear: every ad platform receives the SHA-256 in emailHash instead.",
157
- }),
158
- Column({
159
- type: ColumnType.ShortText,
160
- length: ColumnLength.ShortText,
161
- nullable: true,
162
- }),
163
- __metadata("design:type", Object)
164
- ], MarketingConversion.prototype, "email", void 0);
165
- __decorate([
166
- ColumnAccessControl({
167
- create: [],
168
- read: [],
169
- update: [],
170
- }),
171
- TableColumn({
172
- type: TableColumnType.JSON,
173
- required: true,
174
- title: "Click IDs",
175
- description: "Ad click identifiers (gclid, wbraid, gbraid, fbclid, ...) captured for this conversion.",
176
- }),
177
- Column({
178
- type: ColumnType.JSON,
179
- nullable: false,
180
- }),
181
- __metadata("design:type", Object)
182
- ], MarketingConversion.prototype, "clickIds", void 0);
183
- __decorate([
184
- ColumnAccessControl({
185
- create: [],
186
- read: [],
187
- update: [],
188
- }),
189
- TableColumn({
190
- type: TableColumnType.Date,
191
- required: true,
192
- title: "Conversion At",
193
- description: "When the conversion happened.",
194
- }),
195
- Column({
196
- type: ColumnType.Date,
197
- nullable: false,
198
- }),
199
- __metadata("design:type", Date)
200
- ], MarketingConversion.prototype, "conversionAt", void 0);
201
- __decorate([
202
- ColumnAccessControl({
203
- create: [],
204
- read: [],
205
- update: [],
206
- }),
207
- TableColumn({
208
- type: TableColumnType.Number,
209
- required: false,
210
- title: "Conversion Value (USD Cents)",
211
- description: "Conversion value in USD cents (monthly recurring revenue for paid subscriptions). Null when unknown (custom pricing) or not applicable (signups, booked meetings).",
212
- }),
213
- Column({
214
- type: ColumnType.Number,
215
- nullable: true,
216
- }),
217
- __metadata("design:type", Object)
218
- ], MarketingConversion.prototype, "conversionValueInUSDCents", void 0);
219
- __decorate([
220
- ColumnAccessControl({
221
- create: [],
222
- read: [],
223
- update: [],
224
- }),
225
- TableColumn({
226
- type: TableColumnType.JSON,
227
- required: false,
228
- title: "Upload State",
229
- description: "Per-ad-platform upload state, keyed by provider (google, meta, microsoft, linkedin, reddit, ...): { status: Uploaded|Failed|Skipped, attempts, error, uploadedAt }. Absent key or absent status means pending.",
230
- }),
231
- Column({
232
- type: ColumnType.JSON,
233
- nullable: true,
234
- }),
235
- __metadata("design:type", Object)
236
- ], MarketingConversion.prototype, "uploadState", void 0);
237
- __decorate([
238
- ColumnAccessControl({
239
- create: [],
240
- read: [],
241
- update: [],
242
- }),
243
- Index("idx_marketing_conversion_utm_campaign"),
244
- TableColumn({
245
- type: TableColumnType.LongText,
246
- required: false,
247
- title: "UTM Campaign",
248
- description: "Last-touch utm_campaign for this conversion.",
249
- }),
250
- Column({
251
- type: ColumnType.LongText,
252
- length: ColumnLength.LongText,
253
- nullable: true,
254
- }),
255
- __metadata("design:type", Object)
256
- ], MarketingConversion.prototype, "utmCampaign", void 0);
257
- __decorate([
258
- ColumnAccessControl({
259
- create: [],
260
- read: [],
261
- update: [],
262
- }),
263
- Index("idx_marketing_conversion_utm_source"),
264
- TableColumn({
265
- type: TableColumnType.LongText,
266
- required: false,
267
- title: "UTM Source",
268
- description: "Last-touch utm_source for this conversion.",
269
- }),
270
- Column({
271
- type: ColumnType.LongText,
272
- length: ColumnLength.LongText,
273
- nullable: true,
274
- }),
275
- __metadata("design:type", Object)
276
- ], MarketingConversion.prototype, "utmSource", void 0);
277
- __decorate([
278
- ColumnAccessControl({
279
- create: [],
280
- read: [],
281
- update: [],
282
- }),
283
- TableColumn({
284
- type: TableColumnType.LongText,
285
- required: false,
286
- title: "UTM Medium",
287
- description: "Last-touch utm_medium for this conversion.",
288
- }),
289
- Column({
290
- type: ColumnType.LongText,
291
- length: ColumnLength.LongText,
292
- nullable: true,
293
- }),
294
- __metadata("design:type", Object)
295
- ], MarketingConversion.prototype, "utmMedium", void 0);
296
- __decorate([
297
- ColumnAccessControl({
298
- create: [],
299
- read: [],
300
- update: [],
301
- }),
302
- TableColumn({
303
- type: TableColumnType.LongText,
304
- required: false,
305
- title: "UTM Term",
306
- description: "Last-touch utm_term for this conversion.",
307
- }),
308
- Column({
309
- type: ColumnType.LongText,
310
- length: ColumnLength.LongText,
311
- nullable: true,
312
- }),
313
- __metadata("design:type", Object)
314
- ], MarketingConversion.prototype, "utmTerm", void 0);
315
- __decorate([
316
- ColumnAccessControl({
317
- create: [],
318
- read: [],
319
- update: [],
320
- }),
321
- TableColumn({
322
- type: TableColumnType.LongText,
323
- required: false,
324
- title: "UTM Content",
325
- description: "Last-touch utm_content for this conversion.",
326
- }),
327
- Column({
328
- type: ColumnType.LongText,
329
- length: ColumnLength.LongText,
330
- nullable: true,
331
- }),
332
- __metadata("design:type", Object)
333
- ], MarketingConversion.prototype, "utmContent", void 0);
334
- __decorate([
335
- ColumnAccessControl({
336
- create: [],
337
- read: [],
338
- update: [],
339
- }),
340
- TableColumn({
341
- type: TableColumnType.LongText,
342
- required: false,
343
- title: "UTM URL",
344
- description: "Landing URL of the attributed visit. The only attribution a campaign leaves when its link carried a click id and no UTMs at all, as Google Ads auto-tagging does.",
345
- }),
346
- Column({
347
- type: ColumnType.LongText,
348
- length: ColumnLength.LongText,
349
- nullable: true,
350
- }),
351
- __metadata("design:type", Object)
352
- ], MarketingConversion.prototype, "utmUrl", void 0);
353
- __decorate([
354
- ColumnAccessControl({
355
- create: [],
356
- read: [],
357
- update: [],
358
- }),
359
- TableColumn({
360
- type: TableColumnType.JSON,
361
- required: false,
362
- title: "First Touch Attribution",
363
- description: "UTM parameters, click IDs, landing URL and referrer from the visitor's first attributed visit. The utm* columns above hold last-touch values.",
364
- }),
365
- Column({
366
- type: ColumnType.JSON,
367
- nullable: true,
368
- }),
369
- __metadata("design:type", Object)
370
- ], MarketingConversion.prototype, "firstTouchAttribution", void 0);
371
- __decorate([
372
- ColumnAccessControl({
373
- create: [],
374
- read: [],
375
- update: [],
376
- }),
377
- Index("idx_marketing_conversion_email_hash"),
378
- TableColumn({
379
- type: TableColumnType.ShortText,
380
- required: false,
381
- title: "Email Hash",
382
- description: "SHA-256 of the normalized (trimmed, lowercased) email. Used for ad-platform enhanced matching and to join conversions by the same person across the demo/signup boundary.",
383
- }),
384
- Column({
385
- type: ColumnType.ShortText,
386
- length: ColumnLength.ShortText,
387
- nullable: true,
388
- }),
389
- __metadata("design:type", Object)
390
- ], MarketingConversion.prototype, "emailHash", void 0);
391
- __decorate([
392
- ColumnAccessControl({
393
- create: [],
394
- read: [],
395
- update: [],
396
- }),
397
- Index("idx_marketing_conversion_attributed_to"),
398
- TableColumn({
399
- type: TableColumnType.ObjectID,
400
- required: false,
401
- title: "Attributed To Conversion ID",
402
- description: "The earliest earlier conversion by the same person (matched on emailHash) that this conversion followed. Null when this is the first conversion in the chain.",
403
- }),
404
- Column({
405
- type: ColumnType.ObjectID,
406
- nullable: true,
407
- transformer: ObjectID.getDatabaseTransformer(),
408
- }),
409
- __metadata("design:type", Object)
410
- ], MarketingConversion.prototype, "attributedToConversionId", void 0);
411
- MarketingConversion = __decorate([
412
- TableAccessControl({
413
- create: [],
414
- read: [],
415
- update: [],
416
- delete: [],
417
- }),
418
- CrudApiEndpoint(new Route("/marketing-conversion")),
419
- TableMetadata({
420
- tableName: "MarketingConversion",
421
- singularName: "Marketing Conversion",
422
- pluralName: "Marketing Conversions",
423
- icon: IconProp.ChartBar,
424
- tableDescription: "Server-confirmed conversions (signups, meetings booked, paid subscriptions), the campaign attribution each carried, and their upload status to ad platforms for offline conversion tracking.",
425
- }),
426
- Entity({
427
- name: "MarketingConversion",
428
- })
429
- /*
430
- * One conversion of each type per user/project. Postgres treats NULLs as
431
- * distinct, so these indexes only constrain rows that actually carry a user or
432
- * project id — conversion types with neither (a booked meeting from an
433
- * anonymous visitor) are de-duplicated by their deterministic primary key
434
- * instead.
435
- */
436
- ,
437
- Index("uq_marketing_conversion_type_user", ["conversionType", "userId"], {
438
- unique: true,
439
- }),
440
- Index("uq_marketing_conversion_type_project", ["conversionType", "projectId"], {
441
- unique: true,
442
- })
443
- ], MarketingConversion);
444
- export default MarketingConversion;
445
- //# sourceMappingURL=MarketingConversion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarketingConversion.js","sourceRoot":"","sources":["../../../../Models/DatabaseModels/MarketingConversion.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import DatabaseService from "./DatabaseService";
2
- import MarketingConversion from "../../Models/DatabaseModels/MarketingConversion";
3
- export class Service extends DatabaseService {
4
- constructor() {
5
- super(MarketingConversion);
6
- }
7
- }
8
- export default new Service();
9
- //# sourceMappingURL=MarketingConversionService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MarketingConversionService.js","sourceRoot":"","sources":["../../../../Server/Services/MarketingConversionService.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,mBAAmB,MAAM,iDAAiD,CAAC;AAElF,MAAM,OAAO,OAAQ,SAAQ,eAAoC;IAC/D;QACE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC7B,CAAC;CACF;AAED,eAAe,IAAI,OAAO,EAAE,CAAC"}
@@ -1,93 +0,0 @@
1
- import { AxiosError } from "axios";
2
- import Attribution from "../Attribution";
3
- import { AdUploadableMarketingConversionTypes, LeadMarketingConversionTypes, MarketingConversionType, } from "../../../Types/Marketing/MarketingConversion";
4
- export default class ConversionUploadProvider {
5
- constructor() {
6
- /*
7
- * Max conversions this provider accepts in one upload() call. Providers
8
- * that issue one HTTP request per conversion must keep this small so a
9
- * single run finishes well inside the worker job timeout.
10
- */
11
- this.maxBatchSize = 500;
12
- }
13
- /*
14
- * Screens conversion types the ledger records but no ad platform has a
15
- * mapping for, before any provider sees them.
16
- */
17
- getSkipReason(conversion) {
18
- if (!AdUploadableMarketingConversionTypes.includes(conversion.conversionType)) {
19
- return {
20
- reason: `Conversion type ${conversion.conversionType || "unknown"} has no ad platform conversion mapping`,
21
- isPermanent: true,
22
- };
23
- }
24
- return this.getProviderSkipReason(conversion);
25
- }
26
- getClickId(conversion, clickIdKey) {
27
- const clickIds = conversion.clickIds || {};
28
- const value = clickIds[clickIdKey];
29
- return typeof value === "string" && value ? value : undefined;
30
- }
31
- /*
32
- * The hashed email this conversion can be matched on, or undefined.
33
- *
34
- * Prefers the stored emailHash and falls back to hashing the email column,
35
- * so rows written before emailHash existed still match. Both paths go
36
- * through Attribution so the digest is identical whichever one produced it.
37
- */
38
- getHashedEmail(conversion) {
39
- if (conversion.emailHash) {
40
- return conversion.emailHash;
41
- }
42
- return Attribution.hashEmail(conversion.email) || undefined;
43
- }
44
- /*
45
- * Resolve a per-type value, or undefined when the column holds a string that
46
- * is not a known conversion type. The column is a plain varchar, so this
47
- * cannot be assumed away even though the mapping itself is exhaustive.
48
- */
49
- resolveByConversionType(conversion, mapping) {
50
- const conversionType = conversion.conversionType;
51
- if (!Object.values(MarketingConversionType).includes(conversionType)) {
52
- return undefined;
53
- }
54
- return mapping[conversionType];
55
- }
56
- /*
57
- * A sales-led lead (booked meeting, enterprise licence request) rather than
58
- * a completed transaction.
59
- */
60
- isLead(conversion) {
61
- return LeadMarketingConversionTypes.includes(conversion.conversionType);
62
- }
63
- /*
64
- * The revenue to report for this conversion, in USD.
65
- *
66
- * Leads return undefined regardless of what the row holds. A booked meeting
67
- * is not money, and reporting one as revenue would let a bidding algorithm
68
- * optimise towards booking meetings that never close.
69
- */
70
- getValueInUSD(conversion) {
71
- if (this.isLead(conversion)) {
72
- return undefined;
73
- }
74
- if (conversion.conversionValueInUSDCents === undefined ||
75
- conversion.conversionValueInUSDCents === null ||
76
- conversion.conversionValueInUSDCents <= 0) {
77
- return undefined;
78
- }
79
- return conversion.conversionValueInUSDCents / 100;
80
- }
81
- isOlderThanDays(conversion, days) {
82
- const conversionAt = conversion.conversionAt || new Date();
83
- return Date.now() - conversionAt.getTime() > days * 24 * 60 * 60 * 1000;
84
- }
85
- static getErrorMessage(err) {
86
- var _a, _b;
87
- if (err instanceof AxiosError) {
88
- return `HTTP ${((_a = err.response) === null || _a === void 0 ? void 0 : _a.status) || "?"}: ${JSON.stringify(((_b = err.response) === null || _b === void 0 ? void 0 : _b.data) || err.message).slice(0, 900)}`;
89
- }
90
- return (err === null || err === void 0 ? void 0 : err.message) || "Unknown error";
91
- }
92
- }
93
- //# sourceMappingURL=ConversionUploadProvider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConversionUploadProvider.js","sourceRoot":"","sources":["../../../../../Server/Utils/Marketing/ConversionUploadProvider.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import GoogleAdsProvider from "./Providers/GoogleAds";
2
- import LinkedInProvider from "./Providers/LinkedIn";
3
- import MetaProvider from "./Providers/Meta";
4
- import MicrosoftAdsProvider from "./Providers/MicrosoftAds";
5
- import RedditProvider from "./Providers/Reddit";
6
- /*
7
- * All ad platforms OneUptime can upload offline conversions to. To add a
8
- * platform: implement ConversionUploadProvider (one file under Providers/),
9
- * add its env config to EnvironmentConfig, and list it here — no schema or
10
- * worker changes needed. Unconfigured providers are ignored at runtime.
11
- */
12
- const AllConversionUploadProviders = [
13
- new GoogleAdsProvider(),
14
- new MetaProvider(),
15
- new MicrosoftAdsProvider(),
16
- new LinkedInProvider(),
17
- new RedditProvider(),
18
- ];
19
- export default AllConversionUploadProviders;
20
- //# sourceMappingURL=ConversionUploadProviders.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ConversionUploadProviders.js","sourceRoot":"","sources":["../../../../../Server/Utils/Marketing/ConversionUploadProviders.ts"],"names":[],"mappings":"AACA,OAAO,iBAAiB,MAAM,uBAAuB,CAAC;AACtD,OAAO,gBAAgB,MAAM,sBAAsB,CAAC;AACpD,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,oBAAoB,MAAM,0BAA0B,CAAC;AAC5D,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,4BAA4B,GAAoC;IACpE,IAAI,iBAAiB,EAAE;IACvB,IAAI,YAAY,EAAE;IAClB,IAAI,oBAAoB,EAAE;IAC1B,IAAI,gBAAgB,EAAE;IACtB,IAAI,cAAc,EAAE;CACrB,CAAC;AAEF,eAAe,4BAA4B,CAAC"}