@sellout/models 0.0.57 → 0.0.59

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 (343) hide show
  1. package/.dist/enums/OrderDeliveryMethodEnum.d.ts +5 -0
  2. package/.dist/enums/OrderDeliveryMethodEnum.js +11 -0
  3. package/.dist/enums/OrderDeliveryMethodEnum.js.map +1 -0
  4. package/.dist/enums/PaymentMethodTypeEnum.d.ts +5 -0
  5. package/.dist/enums/PaymentMethodTypeEnum.js +10 -0
  6. package/.dist/enums/PaymentMethodTypeEnum.js.map +1 -0
  7. package/.dist/graphql/fragments/event.fragment.js +3 -0
  8. package/.dist/graphql/fragments/event.fragment.js.map +1 -1
  9. package/.dist/graphql/links/debounceLink.d.ts +3 -0
  10. package/.dist/graphql/links/debounceLink.js +9 -0
  11. package/.dist/graphql/links/debounceLink.js.map +1 -0
  12. package/.dist/graphql/mutations/acceptRole.mutation.d.ts +2 -0
  13. package/.dist/graphql/mutations/acceptRole.mutation.js +21 -0
  14. package/.dist/graphql/mutations/acceptRole.mutation.js.map +1 -0
  15. package/.dist/graphql/mutations/attachStripePaymentMethod.mutation.d.ts +2 -0
  16. package/.dist/graphql/mutations/attachStripePaymentMethod.mutation.js +13 -0
  17. package/.dist/graphql/mutations/attachStripePaymentMethod.mutation.js.map +1 -0
  18. package/.dist/graphql/mutations/createArtist.mutation.js +0 -8
  19. package/.dist/graphql/mutations/createArtist.mutation.js.map +1 -1
  20. package/.dist/graphql/mutations/createEvent.mutation.js +0 -2
  21. package/.dist/graphql/mutations/createEvent.mutation.js.map +1 -1
  22. package/.dist/graphql/mutations/createOrder.mutation.d.ts +2 -0
  23. package/.dist/graphql/mutations/createOrder.mutation.js +60 -0
  24. package/.dist/graphql/mutations/createOrder.mutation.js.map +1 -0
  25. package/.dist/graphql/mutations/createOrganizationFee.mutation.d.ts +2 -0
  26. package/.dist/graphql/mutations/createOrganizationFee.mutation.js +30 -0
  27. package/.dist/graphql/mutations/createOrganizationFee.mutation.js.map +1 -0
  28. package/.dist/graphql/mutations/createPlatformFee.mutation.d.ts +2 -0
  29. package/.dist/graphql/mutations/createPlatformFee.mutation.js +30 -0
  30. package/.dist/graphql/mutations/createPlatformFee.mutation.js.map +1 -0
  31. package/.dist/graphql/mutations/createRole.mutation.d.ts +2 -0
  32. package/.dist/graphql/mutations/createRole.mutation.js +19 -0
  33. package/.dist/graphql/mutations/createRole.mutation.js.map +1 -0
  34. package/.dist/graphql/mutations/createStripeSetupIntent.mutation.d.ts +2 -0
  35. package/.dist/graphql/mutations/createStripeSetupIntent.mutation.js +13 -0
  36. package/.dist/graphql/mutations/createStripeSetupIntent.mutation.js.map +1 -0
  37. package/.dist/graphql/mutations/createStripeTerminalConnectionToken.mutation.d.ts +2 -0
  38. package/.dist/graphql/mutations/createStripeTerminalConnectionToken.mutation.js +13 -0
  39. package/.dist/graphql/mutations/createStripeTerminalConnectionToken.mutation.js.map +1 -0
  40. package/.dist/graphql/mutations/createVenue.mutation.d.ts +2 -0
  41. package/.dist/graphql/mutations/createVenue.mutation.js +35 -0
  42. package/.dist/graphql/mutations/createVenue.mutation.js.map +1 -0
  43. package/.dist/graphql/mutations/createWebFlowSite.mutation.d.ts +2 -0
  44. package/.dist/graphql/mutations/createWebFlowSite.mutation.js +42 -0
  45. package/.dist/graphql/mutations/createWebFlowSite.mutation.js.map +1 -0
  46. package/.dist/graphql/mutations/deleteOrganizationFee.mutation.d.ts +2 -0
  47. package/.dist/graphql/mutations/deleteOrganizationFee.mutation.js +13 -0
  48. package/.dist/graphql/mutations/deleteOrganizationFee.mutation.js.map +1 -0
  49. package/.dist/graphql/mutations/deletePlatformFee.mutation.d.ts +2 -0
  50. package/.dist/graphql/mutations/deletePlatformFee.mutation.js +13 -0
  51. package/.dist/graphql/mutations/deletePlatformFee.mutation.js.map +1 -0
  52. package/.dist/graphql/mutations/deleteRole.mutation.d.ts +2 -0
  53. package/.dist/graphql/mutations/deleteRole.mutation.js +13 -0
  54. package/.dist/graphql/mutations/deleteRole.mutation.js.map +1 -0
  55. package/.dist/graphql/mutations/deleteStripeTerminalReader.mutation.d.ts +2 -0
  56. package/.dist/graphql/mutations/deleteStripeTerminalReader.mutation.js +13 -0
  57. package/.dist/graphql/mutations/deleteStripeTerminalReader.mutation.js.map +1 -0
  58. package/.dist/graphql/mutations/deleteUnverifiedUser.mutation.d.ts +2 -0
  59. package/.dist/graphql/mutations/deleteUnverifiedUser.mutation.js +14 -0
  60. package/.dist/graphql/mutations/deleteUnverifiedUser.mutation.js.map +1 -0
  61. package/.dist/graphql/mutations/forgotPassword.mutation.d.ts +2 -0
  62. package/.dist/graphql/mutations/forgotPassword.mutation.js +13 -0
  63. package/.dist/graphql/mutations/forgotPassword.mutation.js.map +1 -0
  64. package/.dist/graphql/mutations/login.mutation.d.ts +2 -0
  65. package/.dist/graphql/mutations/login.mutation.js +23 -0
  66. package/.dist/graphql/mutations/login.mutation.js.map +1 -0
  67. package/.dist/graphql/mutations/register.mutation.d.ts +2 -0
  68. package/.dist/graphql/mutations/register.mutation.js +23 -0
  69. package/.dist/graphql/mutations/register.mutation.js.map +1 -0
  70. package/.dist/graphql/mutations/registerStripeTerminalReader.mutation.d.ts +2 -0
  71. package/.dist/graphql/mutations/registerStripeTerminalReader.mutation.js +21 -0
  72. package/.dist/graphql/mutations/registerStripeTerminalReader.mutation.js.map +1 -0
  73. package/.dist/graphql/mutations/remapWebFlowSite.mutation.d.ts +2 -0
  74. package/.dist/graphql/mutations/remapWebFlowSite.mutation.js +40 -0
  75. package/.dist/graphql/mutations/remapWebFlowSite.mutation.js.map +1 -0
  76. package/.dist/graphql/mutations/sendUserPhoneAuthentication.mutation.d.ts +2 -0
  77. package/.dist/graphql/mutations/sendUserPhoneAuthentication.mutation.js +13 -0
  78. package/.dist/graphql/mutations/sendUserPhoneAuthentication.mutation.js.map +1 -0
  79. package/.dist/graphql/mutations/setUserOrgContextId.d.ts +2 -0
  80. package/.dist/graphql/mutations/setUserOrgContextId.js +15 -0
  81. package/.dist/graphql/mutations/setUserOrgContextId.js.map +1 -0
  82. package/.dist/graphql/mutations/setUserOrgContextId.mutation.d.ts +2 -0
  83. package/.dist/graphql/mutations/setUserOrgContextId.mutation.js +15 -0
  84. package/.dist/graphql/mutations/setUserOrgContextId.mutation.js.map +1 -0
  85. package/.dist/graphql/mutations/setUserPassword.mutation.d.ts +2 -0
  86. package/.dist/graphql/mutations/setUserPassword.mutation.js +15 -0
  87. package/.dist/graphql/mutations/setUserPassword.mutation.js.map +1 -0
  88. package/.dist/graphql/mutations/updateArtist.mutation.js +0 -8
  89. package/.dist/graphql/mutations/updateArtist.mutation.js.map +1 -1
  90. package/.dist/graphql/mutations/updateEvent.mutation.js +0 -2
  91. package/.dist/graphql/mutations/updateEvent.mutation.js.map +1 -1
  92. package/.dist/graphql/mutations/updateOrganizationFee.mutation.d.ts +2 -0
  93. package/.dist/graphql/mutations/updateOrganizationFee.mutation.js +30 -0
  94. package/.dist/graphql/mutations/updateOrganizationFee.mutation.js.map +1 -0
  95. package/.dist/graphql/mutations/updatePlatformFee.mutation.d.ts +2 -0
  96. package/.dist/graphql/mutations/updatePlatformFee.mutation.js +30 -0
  97. package/.dist/graphql/mutations/updatePlatformFee.mutation.js.map +1 -0
  98. package/.dist/graphql/mutations/updateVenue.mutation.d.ts +2 -0
  99. package/.dist/graphql/mutations/updateVenue.mutation.js +35 -0
  100. package/.dist/graphql/mutations/updateVenue.mutation.js.map +1 -0
  101. package/.dist/graphql/mutations/verifyUserPhoneAuthentication.mutation.d.ts +2 -0
  102. package/.dist/graphql/mutations/verifyUserPhoneAuthentication.mutation.js +15 -0
  103. package/.dist/graphql/mutations/verifyUserPhoneAuthentication.mutation.js.map +1 -0
  104. package/.dist/graphql/queries/analytics.query.d.ts +2 -0
  105. package/.dist/graphql/queries/analytics.query.js +30 -0
  106. package/.dist/graphql/queries/analytics.query.js.map +1 -0
  107. package/.dist/graphql/queries/artist.query.js +0 -8
  108. package/.dist/graphql/queries/artist.query.js.map +1 -1
  109. package/.dist/graphql/queries/artists.query.js +0 -8
  110. package/.dist/graphql/queries/artists.query.js.map +1 -1
  111. package/.dist/graphql/queries/customerProfile.d.ts +2 -0
  112. package/.dist/graphql/queries/customerProfile.js +42 -0
  113. package/.dist/graphql/queries/customerProfile.js.map +1 -0
  114. package/.dist/graphql/queries/customerProfile.query.d.ts +2 -0
  115. package/.dist/graphql/queries/customerProfile.query.js +25 -0
  116. package/.dist/graphql/queries/customerProfile.query.js.map +1 -0
  117. package/.dist/graphql/queries/event.query.js +3 -2
  118. package/.dist/graphql/queries/event.query.js.map +1 -1
  119. package/.dist/graphql/queries/events.query.js +2 -7
  120. package/.dist/graphql/queries/events.query.js.map +1 -1
  121. package/.dist/graphql/queries/listStripeTerminalReaders.query.d.ts +2 -0
  122. package/.dist/graphql/queries/listStripeTerminalReaders.query.js +21 -0
  123. package/.dist/graphql/queries/listStripeTerminalReaders.query.js.map +1 -0
  124. package/.dist/graphql/queries/orders.query.js +14 -0
  125. package/.dist/graphql/queries/orders.query.js.map +1 -1
  126. package/.dist/graphql/queries/organization.query.d.ts +2 -0
  127. package/.dist/graphql/queries/organization.query.js +49 -0
  128. package/.dist/graphql/queries/organization.query.js.map +1 -0
  129. package/.dist/graphql/queries/organizationFees.query.d.ts +2 -0
  130. package/.dist/graphql/queries/organizationFees.query.js +30 -0
  131. package/.dist/graphql/queries/organizationFees.query.js.map +1 -0
  132. package/.dist/graphql/queries/organizations.d.ts +2 -0
  133. package/.dist/graphql/queries/organizations.js +49 -0
  134. package/.dist/graphql/queries/organizations.js.map +1 -0
  135. package/.dist/graphql/queries/organizations.query.d.ts +2 -0
  136. package/.dist/graphql/queries/organizations.query.js +49 -0
  137. package/.dist/graphql/queries/organizations.query.js.map +1 -0
  138. package/.dist/graphql/queries/platformFees.query.d.ts +2 -0
  139. package/.dist/graphql/queries/platformFees.query.js +30 -0
  140. package/.dist/graphql/queries/platformFees.query.js.map +1 -0
  141. package/.dist/graphql/queries/profile.query.js +4 -1
  142. package/.dist/graphql/queries/profile.query.js.map +1 -1
  143. package/.dist/graphql/queries/profiles.query.js +1 -8
  144. package/.dist/graphql/queries/profiles.query.js.map +1 -1
  145. package/.dist/graphql/queries/publicEvent.query.d.ts +2 -0
  146. package/.dist/graphql/queries/publicEvent.query.js +57 -0
  147. package/.dist/graphql/queries/publicEvent.query.js.map +1 -0
  148. package/.dist/graphql/queries/role.query.d.ts +2 -0
  149. package/.dist/graphql/queries/role.query.js +32 -0
  150. package/.dist/graphql/queries/role.query.js.map +1 -0
  151. package/.dist/graphql/queries/seating.query.d.ts +2 -0
  152. package/.dist/graphql/queries/seating.query.js +20 -0
  153. package/.dist/graphql/queries/seating.query.js.map +1 -0
  154. package/.dist/graphql/queries/userExists.query.d.ts +2 -0
  155. package/.dist/graphql/queries/userExists.query.js +18 -0
  156. package/.dist/graphql/queries/userExists.query.js.map +1 -0
  157. package/.dist/graphql/queries/userProfile.query.d.ts +2 -0
  158. package/.dist/graphql/queries/userProfile.query.js +33 -0
  159. package/.dist/graphql/queries/userProfile.query.js.map +1 -0
  160. package/.dist/graphql/queries/userRoles.query.d.ts +2 -0
  161. package/.dist/graphql/queries/userRoles.query.js +34 -0
  162. package/.dist/graphql/queries/userRoles.query.js.map +1 -0
  163. package/.dist/graphql/queries/venue.query.js +1 -2
  164. package/.dist/graphql/queries/venue.query.js.map +1 -1
  165. package/.dist/graphql/queries/venues.query.js +23 -36
  166. package/.dist/graphql/queries/venues.query.js.map +1 -1
  167. package/.dist/graphql/queries/webFlowSites.query.d.ts +2 -0
  168. package/.dist/graphql/queries/webFlowSites.query.js +24 -0
  169. package/.dist/graphql/queries/webFlowSites.query.js.map +1 -0
  170. package/.dist/interfaces/IAnalytics.d.ts +60 -0
  171. package/.dist/interfaces/IAnalytics.js +76 -0
  172. package/.dist/interfaces/IAnalytics.js.map +1 -0
  173. package/.dist/interfaces/IArtist.d.ts +0 -2
  174. package/.dist/interfaces/IArtist.js.map +1 -1
  175. package/.dist/interfaces/IEvent.d.ts +14 -2
  176. package/.dist/interfaces/IEvent.js.map +1 -1
  177. package/.dist/interfaces/IEventCustomField.d.ts +5 -2
  178. package/.dist/interfaces/IEventCustomField.js +2 -0
  179. package/.dist/interfaces/IEventCustomField.js.map +1 -1
  180. package/.dist/interfaces/IEventUpgrade.d.ts +1 -0
  181. package/.dist/interfaces/IFee.d.ts +3 -1
  182. package/.dist/interfaces/IFee.js +2 -4
  183. package/.dist/interfaces/IFee.js.map +1 -1
  184. package/.dist/interfaces/IOrder.d.ts +4 -0
  185. package/.dist/interfaces/IOrder.js.map +1 -1
  186. package/.dist/interfaces/IOrderState.d.ts +5 -5
  187. package/.dist/interfaces/IOrderState.js +5 -14
  188. package/.dist/interfaces/IOrderState.js.map +1 -1
  189. package/.dist/interfaces/IOrderTicket.d.ts +2 -0
  190. package/.dist/interfaces/IOrderTicket.js.map +1 -1
  191. package/.dist/interfaces/IOrderType.d.ts +1 -1
  192. package/.dist/interfaces/IOrderType.js +1 -1
  193. package/.dist/interfaces/IOrderType.js.map +1 -1
  194. package/.dist/interfaces/IOrderUpgrade.d.ts +2 -1
  195. package/.dist/interfaces/IPagination.d.ts +9 -0
  196. package/.dist/interfaces/IPagination.js +10 -0
  197. package/.dist/interfaces/IPagination.js.map +1 -1
  198. package/.dist/interfaces/IPayment.d.ts +13 -0
  199. package/.dist/interfaces/IPayment.js +3 -0
  200. package/.dist/interfaces/IPayment.js.map +1 -0
  201. package/.dist/interfaces/IRole.d.ts +15 -7
  202. package/.dist/interfaces/IRole.js +24 -0
  203. package/.dist/interfaces/IRole.js.map +1 -1
  204. package/.dist/interfaces/ISecondaryEmail.d.ts +4 -0
  205. package/.dist/interfaces/ISecondaryEmail.js +3 -0
  206. package/.dist/interfaces/ISecondaryEmail.js.map +1 -0
  207. package/.dist/interfaces/IStripeCustomer.d.ts +6 -0
  208. package/.dist/interfaces/IStripeCustomer.js +3 -0
  209. package/.dist/interfaces/IStripeCustomer.js.map +1 -0
  210. package/.dist/interfaces/IStripeSource.d.ts +10 -0
  211. package/.dist/interfaces/IStripeSource.js +3 -0
  212. package/.dist/interfaces/IStripeSource.js.map +1 -0
  213. package/.dist/interfaces/IStripeTerminalReader.d.ts +9 -0
  214. package/.dist/interfaces/IStripeTerminalReader.js +3 -0
  215. package/.dist/interfaces/IStripeTerminalReader.js.map +1 -0
  216. package/.dist/interfaces/ITicketTier.d.ts +2 -2
  217. package/.dist/interfaces/ITicketType.d.ts +1 -0
  218. package/.dist/interfaces/IUserProfile.d.ts +6 -2
  219. package/.dist/interfaces/IVenue.d.ts +2 -6
  220. package/.dist/schemas/Artist.d.ts +4 -130
  221. package/.dist/schemas/Artist.js +4 -2
  222. package/.dist/schemas/Artist.js.map +1 -1
  223. package/.dist/schemas/Event.d.ts +15 -0
  224. package/.dist/schemas/Event.js +15 -0
  225. package/.dist/schemas/Event.js.map +1 -1
  226. package/.dist/schemas/Order.d.ts +83 -0
  227. package/.dist/schemas/Order.js +84 -0
  228. package/.dist/schemas/Order.js.map +1 -1
  229. package/.dist/schemas/SecondaryEmail.d.ts +12 -0
  230. package/.dist/schemas/SecondaryEmail.js +14 -0
  231. package/.dist/schemas/SecondaryEmail.js.map +1 -0
  232. package/.dist/schemas/UserProfile.d.ts +0 -130
  233. package/.dist/schemas/UserProfile.js +0 -2
  234. package/.dist/schemas/UserProfile.js.map +1 -1
  235. package/.dist/schemas/Venue.d.ts +4 -141
  236. package/.dist/schemas/Venue.js +4 -15
  237. package/.dist/schemas/Venue.js.map +1 -1
  238. package/.dist/sellout-proto.js +29977 -22900
  239. package/.dist/utils/AnalyticsUtil.d.ts +37 -0
  240. package/.dist/utils/AnalyticsUtil.js +557 -0
  241. package/.dist/utils/AnalyticsUtil.js.map +1 -0
  242. package/.dist/utils/EventUtil.d.ts +35 -12
  243. package/.dist/utils/EventUtil.js +80 -15
  244. package/.dist/utils/EventUtil.js.map +1 -1
  245. package/.dist/utils/FeeUtil.d.ts +4 -4
  246. package/.dist/utils/FeeUtil.js +4 -4
  247. package/.dist/utils/FeeUtil.js.map +1 -1
  248. package/package.json +6 -5
  249. package/src/enums/OrderDeliveryMethodEnum.ts +5 -0
  250. package/src/enums/PaymentMethodTypeEnum.ts +5 -0
  251. package/src/graphql/fragments/event.fragment.ts +3 -0
  252. package/src/graphql/links/debounceLink.ts +4 -0
  253. package/src/graphql/mutations/acceptRole.mutation.ts +17 -0
  254. package/src/graphql/mutations/attachStripePaymentMethod.mutation.ts +9 -0
  255. package/src/graphql/mutations/createArtist.mutation.ts +0 -8
  256. package/src/graphql/mutations/createEvent.mutation.ts +0 -2
  257. package/src/graphql/mutations/createOrder.mutation.ts +56 -0
  258. package/src/graphql/mutations/createOrganizationFee.mutation.ts +26 -0
  259. package/src/graphql/mutations/createPlatformFee.mutation.ts +26 -0
  260. package/src/graphql/mutations/createRole.mutation.ts +15 -0
  261. package/src/graphql/mutations/createStripeSetupIntent.mutation.ts +9 -0
  262. package/src/graphql/mutations/createStripeTerminalConnectionToken.mutation.ts +9 -0
  263. package/src/graphql/mutations/createVenue.mutation.ts +31 -0
  264. package/src/graphql/mutations/createWebFlowSite.mutation.ts +38 -0
  265. package/src/graphql/mutations/deleteOrganizationFee.mutation.ts +9 -0
  266. package/src/graphql/mutations/deletePlatformFee.mutation.ts +9 -0
  267. package/src/graphql/mutations/deleteRole.mutation.ts +9 -0
  268. package/src/graphql/mutations/deleteStripeTerminalReader.mutation.ts +9 -0
  269. package/src/graphql/mutations/deleteUnverifiedUser.mutation.ts +10 -0
  270. package/src/graphql/mutations/registerStripeTerminalReader.mutation.ts +17 -0
  271. package/src/graphql/mutations/remapWebFlowSite.mutation.ts +36 -0
  272. package/src/graphql/mutations/sendUserPhoneAuthentication.mutation.ts +9 -0
  273. package/src/graphql/mutations/setUserOrgContextId.mutation.ts +11 -0
  274. package/src/graphql/mutations/setUserPassword.mutation.ts +11 -0
  275. package/src/graphql/mutations/updateArtist.mutation.ts +0 -8
  276. package/src/graphql/mutations/updateEvent.mutation.ts +0 -2
  277. package/src/graphql/mutations/updateOrganizationFee.mutation.ts +26 -0
  278. package/src/graphql/mutations/updatePlatformFee.mutation.ts +26 -0
  279. package/src/graphql/mutations/updateVenue.mutation.ts +31 -0
  280. package/src/graphql/mutations/verifyUserPhoneAuthentication.mutation.ts +11 -0
  281. package/src/graphql/queries/analytics.query.ts +26 -0
  282. package/src/graphql/queries/artist.query.ts +0 -8
  283. package/src/graphql/queries/artists.query.ts +0 -8
  284. package/src/graphql/queries/customerProfile.query.ts +21 -0
  285. package/src/graphql/queries/event.query.ts +3 -2
  286. package/src/graphql/queries/events.query.ts +2 -7
  287. package/src/graphql/queries/listStripeTerminalReaders.query.ts +17 -0
  288. package/src/graphql/queries/orders.query.ts +14 -0
  289. package/src/graphql/queries/organizationFees.query.ts +26 -0
  290. package/src/graphql/queries/organizations.query.ts +45 -0
  291. package/src/graphql/queries/platformFees.query.ts +26 -0
  292. package/src/graphql/queries/profile.query.ts +4 -1
  293. package/src/graphql/queries/profiles.query.ts +1 -8
  294. package/src/graphql/queries/publicEvent.query.ts +53 -0
  295. package/src/graphql/queries/role.query.ts +28 -0
  296. package/src/graphql/queries/seating.query.ts +16 -0
  297. package/src/graphql/queries/userExists.query.ts +14 -0
  298. package/src/graphql/queries/userProfile.query.ts +29 -0
  299. package/src/graphql/queries/userRoles.query.ts +30 -0
  300. package/src/graphql/queries/venue.query.ts +1 -2
  301. package/src/graphql/queries/venues.query.ts +23 -36
  302. package/src/graphql/queries/webFlowSites.query.ts +20 -0
  303. package/src/interfaces/IAnalytics.ts +96 -0
  304. package/src/interfaces/IArtist.ts +0 -2
  305. package/src/interfaces/IEvent.ts +17 -2
  306. package/src/interfaces/IEventCustomField.ts +4 -1
  307. package/src/interfaces/IEventUpgrade.ts +1 -0
  308. package/src/interfaces/IFee.ts +2 -4
  309. package/src/interfaces/IOrder.ts +8 -4
  310. package/src/interfaces/IOrderState.ts +5 -14
  311. package/src/interfaces/IOrderTicket.ts +2 -0
  312. package/src/interfaces/IOrderType.ts +1 -1
  313. package/src/interfaces/IOrderUpgrade.ts +2 -1
  314. package/src/interfaces/IPagination.ts +11 -0
  315. package/src/interfaces/IPayment.ts +13 -0
  316. package/src/interfaces/IRole.ts +26 -8
  317. package/src/interfaces/IStripeCustomer.ts +7 -0
  318. package/src/interfaces/IStripeSource.ts +10 -0
  319. package/src/interfaces/IStripeTerminalReader.ts +9 -0
  320. package/src/interfaces/ITicketTier.ts +2 -2
  321. package/src/interfaces/ITicketType.ts +1 -0
  322. package/src/interfaces/IUserProfile.ts +8 -2
  323. package/src/interfaces/IVenue.ts +2 -6
  324. package/src/proto/artist.proto +1 -2
  325. package/src/proto/broadcast.proto +0 -13
  326. package/src/proto/common.proto +15 -0
  327. package/src/proto/event.proto +4 -1
  328. package/src/proto/order.proto +78 -4
  329. package/src/proto/stripe.proto +135 -0
  330. package/src/proto/venue.proto +7 -10
  331. package/src/schemas/Artist.ts +4 -2
  332. package/src/schemas/Event.ts +15 -0
  333. package/src/schemas/Order.ts +85 -0
  334. package/src/schemas/UserProfile.ts +0 -2
  335. package/src/schemas/Venue.ts +4 -15
  336. package/src/utils/AnalyticsUtil.ts +838 -0
  337. package/src/utils/EventUtil.ts +110 -44
  338. package/src/utils/FeeUtil.ts +4 -4
  339. package/src/utils/fee-util-broken-but-why +36 -0
  340. package/src/interfaces/IMetrics.ts +0 -33
  341. /package/src/graphql/mutations/{forgotPassword.ts → forgotPassword.mutation.ts} +0 -0
  342. /package/src/graphql/mutations/{login.ts → login.mutation.ts} +0 -0
  343. /package/src/graphql/mutations/{register.ts → register.mutation.ts} +0 -0
@@ -0,0 +1,838 @@
1
+ import IAnalytics, {
2
+ AnalyticsDurationEnum,
3
+ AnalyticsIntervalEnum,
4
+ AnalyticsTypeEnum,
5
+ AnalyticsValueTypeEnum,
6
+ ICoordinate,
7
+ } from "../interfaces/IAnalytics";
8
+ import IOrder from "../interfaces/IOrder";
9
+ import IOrderTicket from "../interfaces/IOrderTicket";
10
+ import IOrderUpgrade from "../interfaces/IOrderUpgrade";
11
+ import { OrderTypeEnum } from "../interfaces/IOrderType";
12
+ import * as Time from "@sellout/utils/.dist/time";
13
+ import * as Price from '@sellout/utils/.dist/price';
14
+
15
+ interface IDuration {
16
+ startsAt: number;
17
+ endsAt: number;
18
+ }
19
+
20
+ const sum = (array: number[]) => (array.length ? array.pop() + sum(array) : 0);
21
+
22
+ const makeArray = (intervalNum: number) => new Array(intervalNum).fill(0);
23
+
24
+ type SumFn = (orders: IOrder[]) => number;
25
+
26
+ const makeCoordinates = (
27
+ orders: IOrder[],
28
+ intervalInfo: IntervalInfo,
29
+ sumFn: SumFn
30
+ ) => {
31
+ const { startDate, intervalLength, intervalNum, interval } = intervalInfo;
32
+
33
+ const coordinates = makeArray(intervalNum).map((_, index) => {
34
+ // set x to beginning second of interval
35
+ let x: number;
36
+ switch(interval) {
37
+ case AnalyticsIntervalEnum.Hour:
38
+ x = Time.getStartOfHour(index * intervalLength + startDate);
39
+ break;
40
+ case AnalyticsIntervalEnum.Day:
41
+ x = Time.getStartOfDay(index * intervalLength + startDate);
42
+ break;
43
+ case AnalyticsIntervalEnum.Week:
44
+ x = Time.getStartOfWeek(index * intervalLength + startDate);
45
+ break;
46
+ case AnalyticsIntervalEnum.Month:
47
+ x = Time.getStartOfMonth(index * intervalLength + startDate);
48
+ break;
49
+ case AnalyticsIntervalEnum.Year:
50
+ x = Time.getStartOfYear(index * intervalLength + startDate);
51
+ break;
52
+ default:
53
+ x = Time.getStartOfDay(index * intervalLength + startDate);
54
+ break;
55
+ }
56
+
57
+ const y = sumFn(orders
58
+ .filter((order) => {
59
+ const createdAt = order.createdAt as number;
60
+ return x <= createdAt && createdAt < x + intervalLength;
61
+ }));
62
+
63
+ return {
64
+ x,
65
+ y,
66
+ };
67
+ });
68
+
69
+ // quick solution to remove duplicated coordinates
70
+ // real issue is probably above..
71
+ const uniqueCoords = Array.from(new Set(coordinates.map(a => a.x)))
72
+ .map(x => {
73
+ return coordinates.find(a => a.x === x)
74
+ });
75
+ return uniqueCoords as ICoordinate[];
76
+ };
77
+
78
+ const makeAnalytics = (
79
+ type: AnalyticsTypeEnum,
80
+ orders: IOrder[],
81
+ intervalInfo: IntervalInfo,
82
+ valueType: AnalyticsValueTypeEnum,
83
+ coordinatesSumFn: SumFn,
84
+ segmentTypes?: string[],
85
+ segmentCoordinatesHOSumFn?: (segmentType: string) => SumFn
86
+ ) => {
87
+ const { interval, intervalOptions } = intervalInfo;
88
+ const segments =
89
+ segmentTypes?.map(
90
+ (segmentType: string): IAnalytics => {
91
+ const coordinates = segmentCoordinatesHOSumFn
92
+ ? makeCoordinates(
93
+ orders,
94
+ intervalInfo,
95
+ segmentCoordinatesHOSumFn(segmentType)
96
+ )
97
+ : [];
98
+
99
+ const segment: IAnalytics = {
100
+ label: segmentType,
101
+ interval: interval,
102
+ intervalOptions: intervalOptions,
103
+ coordinates,
104
+ segments: [],
105
+ type: valueType,
106
+ };
107
+
108
+ return segment;
109
+ }
110
+ ) ?? [];
111
+
112
+ const coordinates = makeCoordinates(orders, intervalInfo, coordinatesSumFn);
113
+
114
+ const analytics: IAnalytics = {
115
+ label: type,
116
+ interval: interval,
117
+ intervalOptions: intervalOptions,
118
+ coordinates,
119
+ segments,
120
+ type: valueType,
121
+ };
122
+
123
+ return analytics;
124
+ };
125
+
126
+ const intervalMap = {
127
+ [AnalyticsIntervalEnum.Hour]: 60 * 60,
128
+ [AnalyticsIntervalEnum.Day]: 60 * 60 * 24,
129
+ [AnalyticsIntervalEnum.Week]: 60 * 60 * 24 * 7,
130
+ [AnalyticsIntervalEnum.Month]: 60 * 60 * 24 * 30,
131
+ [AnalyticsIntervalEnum.Year]: 60 * 60 * 24 * 365,
132
+ };
133
+
134
+ const orderedIntervals = [
135
+ AnalyticsIntervalEnum.Hour,
136
+ AnalyticsIntervalEnum.Day,
137
+ AnalyticsIntervalEnum.Week,
138
+ AnalyticsIntervalEnum.Month,
139
+ AnalyticsIntervalEnum.Year,
140
+ ];
141
+
142
+ const maxDuration = (interval: AnalyticsIntervalEnum): number => {
143
+ return intervalMap[interval] * 60;
144
+ }
145
+
146
+ const getIntervalFromDuration = (duration: number): AnalyticsIntervalEnum => {
147
+ const maxHour = maxDuration(AnalyticsIntervalEnum.Hour);
148
+ const maxDay = maxDuration(AnalyticsIntervalEnum.Day);
149
+ const maxWeek = maxDuration(AnalyticsIntervalEnum.Week);
150
+ const maxMonth = maxDuration(AnalyticsIntervalEnum.Month);
151
+
152
+ if(duration <= maxHour) {
153
+ return AnalyticsIntervalEnum.Hour;
154
+ } else if(duration <= maxDay) {
155
+ return AnalyticsIntervalEnum.Day;
156
+ } else if(duration <= maxWeek) {
157
+ return AnalyticsIntervalEnum.Week
158
+ } else if(duration <= maxMonth) {
159
+ return AnalyticsIntervalEnum.Month;
160
+ } else {
161
+ return AnalyticsIntervalEnum.Year;
162
+ }
163
+ }
164
+
165
+ type IntervalInfo = {
166
+ startDate: number;
167
+ endDate: number;
168
+ duration: number;
169
+ interval: AnalyticsIntervalEnum;
170
+ intervalOptions: AnalyticsIntervalEnum[];
171
+ intervalLength: number;
172
+ intervalNum: number;
173
+ };
174
+
175
+ const getIntervalInfo = (
176
+ orders: IOrder[],
177
+ startDate?: number,
178
+ endDate?: number,
179
+ interval?: AnalyticsIntervalEnum,
180
+ ): IntervalInfo => {
181
+ startDate = startDate || orders[orders.length - 1]?.createdAt as number || Time.getStartOfCurrentDay();
182
+ endDate = endDate || orders[0]?.createdAt as number || Time.getEndOfCurrentDay();
183
+
184
+ const duration = endDate - startDate; // duration in seconds
185
+
186
+ if(!interval) {
187
+ interval = getIntervalFromDuration(duration);
188
+ }
189
+
190
+ const intervalLength = intervalMap[interval];
191
+ const intervalNum = Math.ceil(duration / intervalLength);
192
+ const intervalOptions = [interval];
193
+ const altIntervalIndex = orderedIntervals.indexOf(interval) + 1;
194
+ const altInterval = orderedIntervals[altIntervalIndex];
195
+ if (altInterval) intervalOptions.push(altInterval);
196
+
197
+ return {
198
+ startDate,
199
+ endDate,
200
+ duration,
201
+ interval,
202
+ intervalOptions,
203
+ intervalLength,
204
+ intervalNum,
205
+ };
206
+ };
207
+
208
+ export default {
209
+ fromOrders(
210
+ type: AnalyticsTypeEnum,
211
+ orders: IOrder[],
212
+ showSegments: boolean,
213
+ startDate?: number,
214
+ endDate?: number,
215
+ interval?: AnalyticsIntervalEnum,
216
+ ): IAnalytics {
217
+
218
+ const intervalInfo = getIntervalInfo(orders, startDate, endDate, interval);
219
+
220
+ switch (type) {
221
+ case AnalyticsTypeEnum.Overview:
222
+ return this.overview(type, orders, intervalInfo);
223
+
224
+ case AnalyticsTypeEnum.TotalSales:
225
+ return this.totalSales(type, orders, intervalInfo, showSegments);
226
+
227
+ case AnalyticsTypeEnum.TicketSales:
228
+ return this.ticketSales(type, orders, intervalInfo, showSegments);
229
+
230
+ case AnalyticsTypeEnum.TicketsSold:
231
+ return this.ticketsSold(type, orders, intervalInfo, showSegments);
232
+
233
+ case AnalyticsTypeEnum.TicketComps:
234
+ return this.ticketComps(type, orders, intervalInfo, showSegments);
235
+
236
+ case AnalyticsTypeEnum.UpgradeSales:
237
+ return this.upgradeSales(type, orders, intervalInfo, showSegments);
238
+
239
+ case AnalyticsTypeEnum.UpgradesSold:
240
+ return this.upgradesSold(type, orders, intervalInfo, showSegments);
241
+
242
+ case AnalyticsTypeEnum.TicketComps:
243
+ return this.ticketComps(type, orders, intervalInfo, showSegments);
244
+
245
+ case AnalyticsTypeEnum.Promotions:
246
+ return this.promotions(type, orders, intervalInfo, showSegments);
247
+
248
+ case AnalyticsTypeEnum.TotalOrders:
249
+ return this.totalOrders(type, orders, intervalInfo);
250
+
251
+ default:
252
+ return {
253
+ label: type,
254
+ interval: interval,
255
+ intervalOptions: [],
256
+ coordinates: [{ x: 0, y: 0}],
257
+ segments: [],
258
+ type: AnalyticsValueTypeEnum.Quantity,
259
+ } as IAnalytics;
260
+ }
261
+ },
262
+
263
+ overview(
264
+ type: AnalyticsTypeEnum,
265
+ orders: IOrder[],
266
+ intervalInfo: IntervalInfo,
267
+ ): IAnalytics {
268
+ const coordinatesSumFn = (orders: IOrder[]) =>
269
+ orders
270
+ .filter(order => order.type === OrderTypeEnum.Paid)
271
+ .reduce((cur, order) => cur + sum(order.tickets.map(ticket => ticket.price)) + sum(order.upgrades.map(upgrade => upgrade.price)), 0);
272
+
273
+ const coordinates = makeCoordinates(orders, intervalInfo, coordinatesSumFn);
274
+ const { interval, intervalOptions } = intervalInfo;
275
+
276
+
277
+ let segments: IAnalytics[] = [];
278
+ const coordinatesSumFn2 = (orders: IOrder[]) =>
279
+ orders
280
+ .filter(order => order.type === OrderTypeEnum.Paid)
281
+ .reduce((cur, order) => cur + order.tickets.length, 0);
282
+ const segmentCoordinates = makeCoordinates(orders, intervalInfo, coordinatesSumFn2);
283
+ let segment: IAnalytics = {
284
+ label: 'Tickets Sold',
285
+ interval: interval,
286
+ intervalOptions: intervalOptions,
287
+ coordinates: segmentCoordinates,
288
+ segments: [],
289
+ type: AnalyticsValueTypeEnum.Quantity,
290
+ };
291
+ segments.push(segment);
292
+ const coordinatesSumFn3 = (orders: IOrder[]) => orders.length;
293
+ const segmentCoordinates2 = makeCoordinates(orders, intervalInfo, coordinatesSumFn3);
294
+ segment = {
295
+ label: 'Orders',
296
+ interval: interval,
297
+ intervalOptions: intervalOptions,
298
+ coordinates: segmentCoordinates2,
299
+ segments: [],
300
+ type: AnalyticsValueTypeEnum.Quantity,
301
+ };
302
+ segments.push(segment);
303
+
304
+ const analytics: IAnalytics = {
305
+ label: 'Total Sales',
306
+ interval: interval,
307
+ intervalOptions: intervalOptions,
308
+ coordinates,
309
+ segments,
310
+ type: AnalyticsValueTypeEnum.Currency,
311
+ };
312
+
313
+ return analytics;
314
+ },
315
+
316
+ totalSales(
317
+ type: AnalyticsTypeEnum,
318
+ orders: IOrder[],
319
+ intervalInfo: IntervalInfo,
320
+ showSegments: boolean,
321
+ ): IAnalytics {
322
+ const coordinatesSumFn = (orders: IOrder[]) =>
323
+ orders
324
+ .filter(order => order.type === OrderTypeEnum.Paid)
325
+ .reduce((cur, order) => cur + sum(order.tickets.map(ticket => ticket.price)) + sum(order.upgrades.map(upgrade => upgrade.price)), 0);
326
+
327
+ let segmentTypes;
328
+ let segmentCoordinatesHOSumFn;
329
+ // if (showSegments) {
330
+ // segmentTypes = Object.keys(
331
+ // orders
332
+ // .reduce((cur, next: IOrder) => {
333
+ // return cur.concat(next.tickets);
334
+ // }, [] as IOrderTicket[])
335
+ // .reduce((cur, next: IOrderTicket) => {
336
+ // cur[next.name] = true;
337
+ // return cur;
338
+ // }, {})
339
+ // );
340
+
341
+ // segmentCoordinatesHOSumFn = (segmentType: string) => (orders: IOrder[]) =>
342
+ // orders
343
+ // .filter(order => order.type === OrderTypeEnum.Paid)
344
+ // .reduce((cur, order) => cur + sum(
345
+ // order.tickets
346
+ // .filter((ticket) => ticket.name === segmentType)
347
+ // .map((ticket) => ticket.price)), 0);
348
+ // }
349
+
350
+
351
+ return makeAnalytics(
352
+ type,
353
+ orders,
354
+ intervalInfo,
355
+ AnalyticsValueTypeEnum.Currency,
356
+ coordinatesSumFn,
357
+ segmentTypes,
358
+ segmentCoordinatesHOSumFn
359
+ );
360
+ },
361
+
362
+ ticketSales(
363
+ type: AnalyticsTypeEnum,
364
+ orders: IOrder[],
365
+ intervalInfo: IntervalInfo,
366
+ showSegments: boolean,
367
+ ): IAnalytics {
368
+ const coordinatesSumFn = (orders: IOrder[]) =>
369
+ orders
370
+ .filter(order => order.type === OrderTypeEnum.Paid)
371
+ .reduce((cur, order) => cur + sum(order.tickets.map(ticket => ticket.price)), 0);
372
+
373
+ let segmentTypes;
374
+ let segmentCoordinatesHOSumFn;
375
+ if (showSegments) {
376
+ segmentTypes = Object.keys(
377
+ orders
378
+ .reduce((cur, next: IOrder) => {
379
+ return cur.concat(next.tickets);
380
+ }, [] as IOrderTicket[])
381
+ .reduce((cur, next: IOrderTicket) => {
382
+ cur[next.name] = true;
383
+ return cur;
384
+ }, {})
385
+ );
386
+
387
+ segmentCoordinatesHOSumFn = (segmentType: string) => (orders: IOrder[]) =>
388
+ orders
389
+ .filter(order => order.type === OrderTypeEnum.Paid)
390
+ .reduce((cur, order) => cur + sum(
391
+ order.tickets
392
+ .filter((ticket) => ticket.name === segmentType)
393
+ .map((ticket) => ticket.price)), 0);
394
+ }
395
+
396
+ return makeAnalytics(
397
+ type,
398
+ orders,
399
+ intervalInfo,
400
+ AnalyticsValueTypeEnum.Currency,
401
+ coordinatesSumFn,
402
+ segmentTypes,
403
+ segmentCoordinatesHOSumFn
404
+ );
405
+ },
406
+
407
+ ticketsSold(
408
+ type: AnalyticsTypeEnum,
409
+ orders: IOrder[],
410
+ intervalInfo: IntervalInfo,
411
+ showSegments: boolean,
412
+ ): IAnalytics {
413
+ const coordinatesSumFn = (orders: IOrder[]) =>
414
+ orders
415
+ .filter(order => order.type === OrderTypeEnum.Paid)
416
+ .reduce((cur, order) => cur + order.tickets.length, 0);
417
+
418
+ let segmentTypes;
419
+ let segmentCoordinatesHOSumFn;
420
+ if (showSegments) {
421
+ segmentTypes = Object.keys(
422
+ orders
423
+ .reduce((cur, next: IOrder) => {
424
+ return cur.concat(next.tickets);
425
+ }, [] as IOrderTicket[])
426
+ .reduce((cur, next: IOrderTicket) => {
427
+ cur[next.name] = true;
428
+ return cur;
429
+ }, {})
430
+ );
431
+
432
+ segmentCoordinatesHOSumFn = (segmentType: string) => (orders: IOrder[]) =>
433
+ orders
434
+ .filter(order => order.type === OrderTypeEnum.Paid)
435
+ .reduce((cur, order) =>
436
+ cur + order.tickets.filter((ticket) => ticket.name === segmentType).length, 0);
437
+ }
438
+
439
+ return makeAnalytics(
440
+ type,
441
+ orders,
442
+ intervalInfo,
443
+ AnalyticsValueTypeEnum.Quantity,
444
+ coordinatesSumFn,
445
+ segmentTypes,
446
+ segmentCoordinatesHOSumFn
447
+ );
448
+ },
449
+
450
+ ticketComps(
451
+ type: AnalyticsTypeEnum,
452
+ orders: IOrder[],
453
+ intervalInfo: IntervalInfo,
454
+ showSegments: boolean,
455
+ ): IAnalytics {
456
+ const coordinatesSumFn = (orders: IOrder[]) =>
457
+ orders
458
+ .filter(order => order.type === OrderTypeEnum.Complimentary)
459
+ .reduce((cur, order) => cur + order.tickets.length, 0);
460
+
461
+ let segmentTypes;
462
+ let segmentCoordinatesHOSumFn;
463
+ if (showSegments) {
464
+ segmentTypes = Object.keys(
465
+ orders
466
+ .reduce((cur, next: IOrder) => {
467
+ return cur.concat(next.tickets);
468
+ }, [] as IOrderTicket[])
469
+ .reduce((cur, next: IOrderTicket) => {
470
+ cur[next.name] = true;
471
+ return cur;
472
+ }, {})
473
+ );
474
+
475
+ segmentCoordinatesHOSumFn = (segmentType: string) => (orders: IOrder[]) =>
476
+ orders
477
+ .filter(order => order.type === OrderTypeEnum.Complimentary)
478
+ .reduce((cur, order) =>
479
+ cur + order.tickets.filter((ticket) => ticket.name === segmentType).length, 0);
480
+ }
481
+
482
+
483
+ return makeAnalytics(
484
+ type,
485
+ orders,
486
+ intervalInfo,
487
+ AnalyticsValueTypeEnum.Quantity,
488
+ coordinatesSumFn,
489
+ segmentTypes,
490
+ segmentCoordinatesHOSumFn
491
+ );
492
+ },
493
+
494
+ upgradeSales(
495
+ type: AnalyticsTypeEnum,
496
+ orders: IOrder[],
497
+ intervalInfo: IntervalInfo,
498
+ showSegments: boolean,
499
+ ): IAnalytics {
500
+ const coordinatesSumFn = (orders: IOrder[]) =>
501
+ orders
502
+ .filter(order => order.type === OrderTypeEnum.Paid)
503
+ .reduce((cur, order) => cur + sum(order.upgrades.map(upgrade => upgrade.price)), 0);
504
+
505
+ let segmentTypes;
506
+ let segmentCoordinatesHOSumFn;
507
+ if (showSegments) {
508
+ segmentTypes = Object.keys(
509
+ orders
510
+ .reduce((cur, next: IOrder) => {
511
+ return cur.concat(next.upgrades);
512
+ }, [] as IOrderUpgrade[])
513
+ .reduce((cur, next: IOrderUpgrade) => {
514
+ cur[next.name] = true;
515
+ return cur;
516
+ }, {})
517
+ );
518
+
519
+ segmentCoordinatesHOSumFn = (segmentType: string) => (orders: IOrder[]) =>
520
+ orders
521
+ .filter(order => order.type === OrderTypeEnum.Paid)
522
+ .reduce((cur, order) => cur + sum(
523
+ order.upgrades
524
+ .filter((upgrade) => upgrade.name === segmentType)
525
+ .map((upgrade) => upgrade.price)), 0);
526
+ }
527
+
528
+
529
+ return makeAnalytics(
530
+ type,
531
+ orders,
532
+ intervalInfo,
533
+ AnalyticsValueTypeEnum.Currency,
534
+ coordinatesSumFn,
535
+ segmentTypes,
536
+ segmentCoordinatesHOSumFn
537
+ );
538
+ },
539
+
540
+ upgradesSold(
541
+ type: AnalyticsTypeEnum,
542
+ orders: IOrder[],
543
+ intervalInfo: IntervalInfo,
544
+ showSegments: boolean,
545
+ ): IAnalytics {
546
+ const coordinatesSumFn = (orders: IOrder[]) =>
547
+ orders
548
+ .filter(order => order.type === OrderTypeEnum.Paid)
549
+ .reduce((cur, order) => cur + order.upgrades.length, 0);
550
+
551
+ let segmentTypes;
552
+ let segmentCoordinatesHOSumFn;
553
+ if (showSegments) {
554
+ segmentTypes = Object.keys(
555
+ orders
556
+ .reduce((cur, next: IOrder) => {
557
+ return cur.concat(next.upgrades);
558
+ }, [] as IOrderUpgrade[])
559
+ .reduce((cur, next: IOrderUpgrade) => {
560
+ cur[next.name] = true;
561
+ return cur;
562
+ }, {})
563
+ );
564
+
565
+ segmentCoordinatesHOSumFn = (segmentType: string) => (orders: IOrder[]) =>
566
+ orders
567
+ .filter(order => order.type === OrderTypeEnum.Paid)
568
+ .reduce((cur, order) =>
569
+ cur + order.upgrades.filter((upgrade) => upgrade.name === segmentType).length, 0);
570
+ }
571
+
572
+ return makeAnalytics(
573
+ type,
574
+ orders,
575
+ intervalInfo,
576
+ AnalyticsValueTypeEnum.Quantity,
577
+ coordinatesSumFn,
578
+ segmentTypes,
579
+ segmentCoordinatesHOSumFn
580
+ );
581
+ },
582
+
583
+ upgradeComps(
584
+ type: AnalyticsTypeEnum,
585
+ orders: IOrder[],
586
+ intervalInfo: IntervalInfo,
587
+ showSegments: boolean,
588
+ ): IAnalytics {
589
+ const coordinatesSumFn = (orders: IOrder[]) =>
590
+ orders
591
+ .reduce((cur, order) =>
592
+ cur + order.upgrades.filter(upgrade => upgrade.price === 0).length,
593
+ 0);
594
+
595
+ let segmentTypes;
596
+ let segmentCoordinatesHOSumFn;
597
+ if (showSegments) {
598
+ segmentTypes = Object.keys(
599
+ orders
600
+ .reduce((cur, next: IOrder) => {
601
+ return cur.concat(next.tickets);
602
+ }, [] as IOrderTicket[])
603
+ .reduce((cur, next: IOrderTicket) => {
604
+ cur[next.name] = true;
605
+ return cur;
606
+ }, {})
607
+ );
608
+
609
+ segmentCoordinatesHOSumFn = (segmentType: string) => (orders: IOrder[]) =>
610
+ orders
611
+ .reduce((cur, order) =>
612
+ cur + order.upgrades.filter((upgrade) => upgrade.name === segmentType && upgrade.price === 0).length, 0);
613
+ }
614
+
615
+ return makeAnalytics(
616
+ type,
617
+ orders,
618
+ intervalInfo,
619
+ AnalyticsValueTypeEnum.Quantity,
620
+ coordinatesSumFn,
621
+ segmentTypes,
622
+ segmentCoordinatesHOSumFn
623
+ );
624
+ },
625
+
626
+ promotions(
627
+ type: AnalyticsTypeEnum,
628
+ orders: IOrder[],
629
+ intervalInfo: IntervalInfo,
630
+ showSegments: boolean,
631
+ ): IAnalytics {
632
+ const coordinatesSumFn = (orders: IOrder[]) =>
633
+ orders.filter(order => Boolean(order.promotionCode))
634
+ .length
635
+
636
+ let segmentTypes;
637
+ let segmentCoordinatesHOSumFn;
638
+ if (showSegments) {
639
+ segmentTypes = Object.keys(
640
+ orders.reduce((cur, next: IOrder) => {
641
+ if (next.promotionCode) cur[next.promotionCode] = true;
642
+ return cur;
643
+ }, {})
644
+ );
645
+
646
+ segmentCoordinatesHOSumFn = (segmentType: string) => (orders: IOrder[]) =>
647
+ orders
648
+ .filter(order => order.promotionCode === segmentType)
649
+ .length;
650
+ }
651
+
652
+ return makeAnalytics(
653
+ type,
654
+ orders,
655
+ intervalInfo,
656
+ AnalyticsValueTypeEnum.Quantity,
657
+ coordinatesSumFn,
658
+ segmentTypes,
659
+ segmentCoordinatesHOSumFn
660
+ );
661
+ },
662
+
663
+ totalOrders(
664
+ type: AnalyticsTypeEnum,
665
+ orders: IOrder[],
666
+ intervalInfo: IntervalInfo,
667
+ ): IAnalytics {
668
+ const coordinatesSumFn = (orders: IOrder[]) => orders.length;
669
+
670
+ return makeAnalytics(
671
+ type,
672
+ orders,
673
+ intervalInfo,
674
+ AnalyticsValueTypeEnum.Quantity,
675
+ coordinatesSumFn
676
+ );
677
+ },
678
+
679
+ // Returns start and end date
680
+ durationToUnix(duration: AnalyticsDurationEnum): IDuration {
681
+ type DurationEnumToDurationMap = Record<
682
+ AnalyticsDurationEnum,
683
+ () => IDuration
684
+ >;
685
+
686
+ const durations: DurationEnumToDurationMap = {
687
+ [AnalyticsDurationEnum.AllTime]: () => {
688
+ const duration: IDuration = {
689
+ startsAt: 0,
690
+ endsAt: 0,
691
+ };
692
+ return duration;
693
+ },
694
+ [AnalyticsDurationEnum.Today]: () => {
695
+ const duration: IDuration = {
696
+ startsAt: Time.getStartOfCurrentDay(),
697
+ endsAt: Time.getEndOfCurrentDay()
698
+ };
699
+ return duration;
700
+ },
701
+ [AnalyticsDurationEnum.OneWeek]: () => {
702
+ const duration: IDuration = {
703
+ startsAt: Time.now() - Time.DAY * 7,
704
+ endsAt: Time.now(),
705
+ };
706
+ return duration;
707
+ },
708
+ [AnalyticsDurationEnum.OneMonth]: () => {
709
+ const duration: IDuration = {
710
+ startsAt: Time.now() - Time.DAY * 30,
711
+ endsAt: Time.now(),
712
+ };
713
+ return duration;
714
+ },
715
+ [AnalyticsDurationEnum.MonthToDate]: () => {
716
+ const duration: IDuration = {
717
+ startsAt: Time.getStartOfCurrentMonth(),
718
+ endsAt: Time.now(),
719
+ };
720
+ return duration;
721
+ },
722
+ [AnalyticsDurationEnum.YearToDate]: () => {
723
+ const duration: IDuration = {
724
+ startsAt: Time.getStartOfCurrentYear(),
725
+ endsAt: Time.now(),
726
+ };
727
+ return duration;
728
+ },
729
+ [AnalyticsDurationEnum.OneYear]: () => {
730
+ const duration: IDuration = {
731
+ startsAt: Time.now() - Time.DAY * 365,
732
+ endsAt: Time.now(),
733
+ };
734
+ return duration;
735
+ },
736
+ [AnalyticsDurationEnum.Custom]: () => {
737
+ const duration: IDuration = {
738
+ startsAt: 0,
739
+ endsAt: 0,
740
+ };
741
+ return duration;
742
+ },
743
+ };
744
+
745
+ return durations[duration]();
746
+ },
747
+
748
+ // Returns available intervals
749
+ durationIntervals(interval: AnalyticsDurationEnum): AnalyticsIntervalEnum[] {
750
+ type AnalyticsDurationToIntervalMap = Record<
751
+ AnalyticsDurationEnum,
752
+ () => AnalyticsIntervalEnum[]
753
+ >;
754
+
755
+ const intervals: AnalyticsDurationToIntervalMap = {
756
+ [AnalyticsDurationEnum.AllTime]: (): AnalyticsIntervalEnum[] => {
757
+ return [];
758
+ },
759
+ [AnalyticsDurationEnum.Today]: (): AnalyticsIntervalEnum[] => {
760
+ return [AnalyticsIntervalEnum.Hour];
761
+ },
762
+ [AnalyticsDurationEnum.OneWeek]: (): AnalyticsIntervalEnum[] => {
763
+ return [AnalyticsIntervalEnum.Day];
764
+ },
765
+ [AnalyticsDurationEnum.OneMonth]: (): AnalyticsIntervalEnum[] => {
766
+ return [AnalyticsIntervalEnum.Day, AnalyticsIntervalEnum.Week];
767
+ },
768
+ [AnalyticsDurationEnum.MonthToDate]: (): AnalyticsIntervalEnum[] => {
769
+ return [AnalyticsIntervalEnum.Day, AnalyticsIntervalEnum.Week];
770
+ },
771
+ [AnalyticsDurationEnum.YearToDate]: (): AnalyticsIntervalEnum[] => {
772
+ return [AnalyticsIntervalEnum.Week, AnalyticsIntervalEnum.Month];
773
+ },
774
+ [AnalyticsDurationEnum.OneYear]: (): AnalyticsIntervalEnum[] => {
775
+ return [AnalyticsIntervalEnum.Week, AnalyticsIntervalEnum.Month];
776
+ },
777
+ [AnalyticsDurationEnum.Custom]: (): AnalyticsIntervalEnum[] => {
778
+ return [];
779
+ },
780
+ };
781
+
782
+ return intervals[interval]();
783
+ },
784
+
785
+ getDateFormat(time: any, interval: AnalyticsIntervalEnum) {
786
+ switch(interval) {
787
+ case AnalyticsIntervalEnum.Hour:
788
+ return Time.format(time, 'h:mma');
789
+ case AnalyticsIntervalEnum.Day:
790
+ return Time.format(time, 'MMM DD');
791
+ case AnalyticsIntervalEnum.Week:
792
+ return `${Time.format(time, 'MMM DD')} - ${Time.format(time + (Time.DAY * 7), 'MMM DD')}`;
793
+ case AnalyticsIntervalEnum.Month:
794
+ return Time.format(time, 'MMM YYYY');
795
+ case AnalyticsIntervalEnum.Year:
796
+ return Time.format(time, 'YYYY');
797
+ default:
798
+ return Time.format(time, 'MMM DD');
799
+ }
800
+ },
801
+
802
+ getTotalValue(coords: ICoordinate[]) {
803
+ if (!coords) {
804
+ return 0;
805
+ }
806
+ return coords.reduce((acc, next) => {
807
+ return acc += next.y;
808
+ }, 0);
809
+ },
810
+
811
+ getDisplayMetric(data: IAnalytics, hoverIndex?: number) {
812
+ let val = 0;
813
+ if (data.coordinates) {
814
+ if (hoverIndex === undefined) {
815
+ val = this.getTotalValue(data.coordinates);
816
+ } else {
817
+ let coord = data?.coordinates.find((coord: ICoordinate) => coord.x === hoverIndex);
818
+ if (coord) val = coord.y;
819
+ }
820
+ }
821
+ if (data.type === AnalyticsValueTypeEnum.Currency) {
822
+ return `$${Price.output(val)}`;
823
+ }
824
+ return val?.toString();
825
+ },
826
+
827
+ getMaxXVal(dataArray: ICoordinate[]) {
828
+ return dataArray.reduce((max: number, p: ICoordinate) => p.x > max ? p.x : max, 0);
829
+ },
830
+
831
+ getMinXVal(dataArray: ICoordinate[]) {
832
+ return dataArray.reduce((min: number, p: ICoordinate) => p.x < min ? p.x : min, Infinity)
833
+ },
834
+
835
+ getMaxYVal(dataArray: ICoordinate[]) {
836
+ return dataArray.reduce((max: number, p: ICoordinate) => p.y > max ? p.y : max, 0);
837
+ }
838
+ };