@bash-app/bash-common 30.424.0 → 30.427.0

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 (472) hide show
  1. package/dist/__tests__/agePolicy.test.js +6 -6
  2. package/dist/__tests__/agePolicy.test.js.map +1 -1
  3. package/dist/__tests__/bashEventCancellationPolicy.test.js +2 -2
  4. package/dist/__tests__/bashEventCancellationPolicy.test.js.map +1 -1
  5. package/dist/__tests__/bashSectionTitleForBashType.test.js +3 -3
  6. package/dist/__tests__/definitionsHelpers.test.js +1 -1
  7. package/dist/__tests__/definitionsHelpers.test.js.map +1 -1
  8. package/dist/__tests__/entertainmentNotableVenues.test.js +1 -1
  9. package/dist/__tests__/entertainmentNotableVenues.test.js.map +1 -1
  10. package/dist/__tests__/hostCrmCrowdPulse.test.js +1 -1
  11. package/dist/__tests__/hostCrmSegments.test.js +2 -2
  12. package/dist/__tests__/hostCrmSegments.test.js.map +1 -1
  13. package/dist/__tests__/hostPromoter.test.js +1 -1
  14. package/dist/__tests__/influencerAudience.test.js +1 -1
  15. package/dist/__tests__/influencerAudience.test.js.map +1 -1
  16. package/dist/__tests__/promoterCompetitionUtils.test.js +3 -3
  17. package/dist/__tests__/promoterCompetitionUtils.test.js.map +1 -1
  18. package/dist/__tests__/scenePulse.test.js +1 -1
  19. package/dist/__tests__/seatMap.test.js +1 -1
  20. package/dist/__tests__/seatMap.test.js.map +1 -1
  21. package/dist/__tests__/ticketAdmission.test.d.ts +1 -1
  22. package/dist/__tests__/ticketAdmission.test.js +1 -1
  23. package/dist/accessScreening.js +1 -1
  24. package/dist/aiApproval.d.ts +3 -3
  25. package/dist/aiApproval.js +3 -3
  26. package/dist/appleIapProducts.d.ts +1 -1
  27. package/dist/appleIapProducts.d.ts.map +1 -1
  28. package/dist/appleIapProducts.js +1 -1
  29. package/dist/appleIapProducts.js.map +1 -1
  30. package/dist/applicationFunnel.d.ts +1 -1
  31. package/dist/applicationFunnel.js +1 -1
  32. package/dist/audienceImport.d.ts +2 -2
  33. package/dist/audienceImport.d.ts.map +1 -1
  34. package/dist/audienceImport.js +2 -2
  35. package/dist/audienceImport.js.map +1 -1
  36. package/dist/bashEventCancellationPolicy.js +3 -3
  37. package/dist/bashEventCancellationPolicy.js.map +1 -1
  38. package/dist/budgetApproval.d.ts +1 -1
  39. package/dist/budgetApproval.js +1 -1
  40. package/dist/causeTags.js +4 -4
  41. package/dist/causeTags.js.map +1 -1
  42. package/dist/competitionIdeas.js +12 -12
  43. package/dist/competitionIdeas.js.map +1 -1
  44. package/dist/competitionValidation.d.ts +1 -1
  45. package/dist/competitionValidation.d.ts.map +1 -1
  46. package/dist/competitionValidation.js +1 -1
  47. package/dist/competitionValidation.js.map +1 -1
  48. package/dist/definitions.d.ts +35 -35
  49. package/dist/definitions.d.ts.map +1 -1
  50. package/dist/definitions.js +30 -30
  51. package/dist/definitions.js.map +1 -1
  52. package/dist/discoveryScope.d.ts +2 -2
  53. package/dist/discoveryScope.js +2 -2
  54. package/dist/entertainmentNotableVenues.js +1 -1
  55. package/dist/entertainmentNotableVenues.js.map +1 -1
  56. package/dist/extendedSchemas.d.ts +150 -150
  57. package/dist/extendedSchemas.d.ts.map +1 -1
  58. package/dist/extendedSchemas.js +11 -11
  59. package/dist/extendedSchemas.js.map +1 -1
  60. package/dist/fundingMeter.d.ts +1 -1
  61. package/dist/fundingMeter.js +1 -1
  62. package/dist/giveaway.d.ts +2 -2
  63. package/dist/giveaway.d.ts.map +1 -1
  64. package/dist/giveaway.js +2 -2
  65. package/dist/giveaway.js.map +1 -1
  66. package/dist/guestPartySize.js +3 -3
  67. package/dist/guestPartySize.js.map +1 -1
  68. package/dist/home.d.ts +1 -1
  69. package/dist/homepageSyntheticRows.d.ts +2 -2
  70. package/dist/homepageSyntheticRows.d.ts.map +1 -1
  71. package/dist/homepageSyntheticRows.js +2 -2
  72. package/dist/homepageSyntheticRows.js.map +1 -1
  73. package/dist/hostCrmAutomation.d.ts +11 -11
  74. package/dist/hostCrmAutomation.d.ts.map +1 -1
  75. package/dist/hostCrmAutomation.js +9 -9
  76. package/dist/hostCrmAutomation.js.map +1 -1
  77. package/dist/hostCrmConstants.d.ts +1 -1
  78. package/dist/hostCrmConstants.d.ts.map +1 -1
  79. package/dist/hostCrmConstants.js +1 -1
  80. package/dist/hostCrmConstants.js.map +1 -1
  81. package/dist/hostCrmCrowdPulse.d.ts +2 -2
  82. package/dist/hostCrmCrowdPulse.d.ts.map +1 -1
  83. package/dist/hostCrmCrowdPulse.js +1 -1
  84. package/dist/hostCrmInsights.d.ts +3 -3
  85. package/dist/hostCrmLastBashProof.d.ts +2 -2
  86. package/dist/hostCrmLastBashProof.d.ts.map +1 -1
  87. package/dist/hostCrmLastBashProof.js +1 -1
  88. package/dist/hostCrmSegments.d.ts +10 -10
  89. package/dist/hostCrmSegments.d.ts.map +1 -1
  90. package/dist/hostCrmSegments.js +2 -2
  91. package/dist/hostCrmSegments.js.map +1 -1
  92. package/dist/hostPromoter.d.ts +1 -1
  93. package/dist/hostPromoter.d.ts.map +1 -1
  94. package/dist/hostPromoter.js +1 -1
  95. package/dist/hostPromoter.js.map +1 -1
  96. package/dist/icebreakerPrompts.js +2 -2
  97. package/dist/icebreakerPrompts.js.map +1 -1
  98. package/dist/index.js +1 -1
  99. package/dist/index.js.map +1 -1
  100. package/dist/influencerAudience.js +3 -3
  101. package/dist/influencerAudience.js.map +1 -1
  102. package/dist/liveActivity/liveActivityTypes.d.ts +10 -10
  103. package/dist/liveActivity/liveActivityTypes.d.ts.map +1 -1
  104. package/dist/liveActivity/liveActivityTypes.js +2 -2
  105. package/dist/liveActivity/liveActivityTypes.js.map +1 -1
  106. package/dist/locationShare.d.ts +2 -2
  107. package/dist/locationShare.d.ts.map +1 -1
  108. package/dist/locationShare.js +2 -2
  109. package/dist/locationShare.js.map +1 -1
  110. package/dist/membershipDefinitions.d.ts +5 -5
  111. package/dist/membershipDefinitions.d.ts.map +1 -1
  112. package/dist/membershipDefinitions.js +21 -21
  113. package/dist/membershipDefinitions.js.map +1 -1
  114. package/dist/mirroredPrismaEnums.d.ts +6 -6
  115. package/dist/mirroredPrismaEnums.js +6 -6
  116. package/dist/onSaleCapabilityRecommendations.d.ts +1 -1
  117. package/dist/onSaleCapabilityRecommendations.js +1 -1
  118. package/dist/partnerStoreTypes.d.ts +1 -1
  119. package/dist/partnerStoreTypes.d.ts.map +1 -1
  120. package/dist/productLaunch.d.ts +2 -2
  121. package/dist/productLaunch.d.ts.map +1 -1
  122. package/dist/productLaunch.js +2 -2
  123. package/dist/productLaunch.js.map +1 -1
  124. package/dist/relationshipHealth.d.ts +3 -3
  125. package/dist/relationshipHealth.d.ts.map +1 -1
  126. package/dist/relationshipHealth.js +3 -3
  127. package/dist/relationshipHealth.js.map +1 -1
  128. package/dist/scenePulse.d.ts +2 -2
  129. package/dist/scenePulse.js +1 -1
  130. package/dist/seatMap.d.ts +1 -1
  131. package/dist/seatMap.d.ts.map +1 -1
  132. package/dist/seatMap.js +2 -2
  133. package/dist/seatMap.js.map +1 -1
  134. package/dist/seatMapBestAvailable.js +2 -2
  135. package/dist/seatMapBestAvailable.js.map +1 -1
  136. package/dist/serviceTypeLabels.d.ts +3 -3
  137. package/dist/serviceTypeLabels.js +3 -3
  138. package/dist/sideQuestIdeas.js +8 -8
  139. package/dist/sideQuestIdeas.js.map +1 -1
  140. package/dist/sideQuestTypes.js +2 -2
  141. package/dist/sideQuestTypes.js.map +1 -1
  142. package/dist/sms/smsTemplates.d.ts +1 -1
  143. package/dist/sms/smsTemplates.js +1 -1
  144. package/dist/stripeListingSubscriptionMessages.d.ts +1 -1
  145. package/dist/stripeListingSubscriptionMessages.js +1 -1
  146. package/dist/targetAudienceLabels.d.ts +1 -1
  147. package/dist/targetAudienceLabels.js +1 -1
  148. package/dist/ticketBnplPaymentMethods.d.ts +3 -3
  149. package/dist/ticketBnplPaymentMethods.d.ts.map +1 -1
  150. package/dist/ticketBnplPaymentMethods.js +2 -2
  151. package/dist/userReportTypes.d.ts +1 -1
  152. package/dist/userReportTypes.d.ts.map +1 -1
  153. package/dist/userReportTypes.js +1 -1
  154. package/dist/userReportTypes.js.map +1 -1
  155. package/dist/userTaste.d.ts +2 -2
  156. package/dist/userTaste.d.ts.map +1 -1
  157. package/dist/userTaste.js +2 -2
  158. package/dist/userTaste.js.map +1 -1
  159. package/dist/utils/__tests__/badgeUtils.test.js +5 -5
  160. package/dist/utils/__tests__/badgeUtils.test.js.map +1 -1
  161. package/dist/utils/__tests__/bashPointsPaymentUtils.test.js +4 -4
  162. package/dist/utils/__tests__/bashPointsPaymentUtils.test.js.map +1 -1
  163. package/dist/utils/__tests__/contentFilterUtils.test.js +23 -23
  164. package/dist/utils/__tests__/contentFilterUtils.test.js.map +1 -1
  165. package/dist/utils/__tests__/dateTimeUtils.test.js +1 -1
  166. package/dist/utils/__tests__/displayDateUtils.test.js +1 -1
  167. package/dist/utils/__tests__/flyerUtils.test.js +1 -1
  168. package/dist/utils/__tests__/flyerUtils.test.js.map +1 -1
  169. package/dist/utils/__tests__/getBackendHost.test.js +8 -8
  170. package/dist/utils/__tests__/getBackendHost.test.js.map +1 -1
  171. package/dist/utils/__tests__/getFrontendHost.native.test.js +1 -1
  172. package/dist/utils/__tests__/getFrontendHost.native.test.js.map +1 -1
  173. package/dist/utils/__tests__/getFrontendHost.test.js +9 -9
  174. package/dist/utils/__tests__/getFrontendHost.test.js.map +1 -1
  175. package/dist/utils/__tests__/guestSurface.test.js +1 -0
  176. package/dist/utils/__tests__/guestSurface.test.js.map +1 -1
  177. package/dist/utils/__tests__/organizationEntitlements.test.js +1 -1
  178. package/dist/utils/__tests__/organizationEntitlements.test.js.map +1 -1
  179. package/dist/utils/__tests__/paymentUtils.test.js +7 -7
  180. package/dist/utils/__tests__/paymentUtils.test.js.map +1 -1
  181. package/dist/utils/__tests__/promoCodesUtils.test.js +2 -2
  182. package/dist/utils/__tests__/promoCodesUtils.test.js.map +1 -1
  183. package/dist/utils/__tests__/qrCodeUtils.test.js +4 -4
  184. package/dist/utils/__tests__/qrCodeUtils.test.js.map +1 -1
  185. package/dist/utils/__tests__/recurrenceUtils.test.js +18 -0
  186. package/dist/utils/__tests__/recurrenceUtils.test.js.map +1 -1
  187. package/dist/utils/__tests__/reviewDimensionUtils.test.js +1 -1
  188. package/dist/utils/__tests__/reviewDimensionUtils.test.js.map +1 -1
  189. package/dist/utils/__tests__/stripeAccountUtils.test.js +1 -1
  190. package/dist/utils/__tests__/ticketPrintPostageUtils.test.js +1 -1
  191. package/dist/utils/__tests__/ticketPrintPostageUtils.test.js.map +1 -1
  192. package/dist/utils/addressUtils.js +1 -1
  193. package/dist/utils/addressUtils.js.map +1 -1
  194. package/dist/utils/apiUtils.js +1 -1
  195. package/dist/utils/apiUtils.js.map +1 -1
  196. package/dist/utils/birthdayExperienceQuality.d.ts +1 -1
  197. package/dist/utils/birthdayExperienceQuality.js +4 -4
  198. package/dist/utils/birthdayExperienceQuality.js.map +1 -1
  199. package/dist/utils/blogUtils.d.ts +1 -1
  200. package/dist/utils/blogUtils.d.ts.map +1 -1
  201. package/dist/utils/blogUtils.js +2 -2
  202. package/dist/utils/blogUtils.js.map +1 -1
  203. package/dist/utils/discountEngine/discountCalculator.js +1 -1
  204. package/dist/utils/discountEngine/discountCalculator.js.map +1 -1
  205. package/dist/utils/displayDateUtils.d.ts +2 -2
  206. package/dist/utils/displayDateUtils.d.ts.map +1 -1
  207. package/dist/utils/displayDateUtils.js +2 -2
  208. package/dist/utils/displayDateUtils.js.map +1 -1
  209. package/dist/utils/entertainmentDrawFit.d.ts +1 -1
  210. package/dist/utils/entertainmentDrawFit.js +1 -1
  211. package/dist/utils/eventTimezoneIana.d.ts +1 -1
  212. package/dist/utils/eventTimezoneIana.js +4 -4
  213. package/dist/utils/eventTimezoneIana.js.map +1 -1
  214. package/dist/utils/flyerUtils.d.ts +2 -2
  215. package/dist/utils/flyerUtils.d.ts.map +1 -1
  216. package/dist/utils/flyerUtils.js +3 -3
  217. package/dist/utils/flyerUtils.js.map +1 -1
  218. package/dist/utils/groupTicketCartUtils.js +1 -1
  219. package/dist/utils/groupTicketCartUtils.js.map +1 -1
  220. package/dist/utils/guestSurface.d.ts +2 -2
  221. package/dist/utils/guestSurface.d.ts.map +1 -1
  222. package/dist/utils/guestSurface.js +8 -5
  223. package/dist/utils/guestSurface.js.map +1 -1
  224. package/dist/utils/lobFlyerUtils.d.ts +2 -2
  225. package/dist/utils/lobFlyerUtils.js +2 -2
  226. package/dist/utils/luxonUtils.d.ts +4 -4
  227. package/dist/utils/luxonUtils.js +5 -5
  228. package/dist/utils/luxonUtils.js.map +1 -1
  229. package/dist/utils/moodTrackUtils.d.ts +1 -1
  230. package/dist/utils/moodTrackUtils.js +1 -1
  231. package/dist/utils/nonprofitUtils.d.ts +3 -3
  232. package/dist/utils/nonprofitUtils.js +2 -2
  233. package/dist/utils/orgPromotionalPackageUtils.d.ts +1 -1
  234. package/dist/utils/orgPromotionalPackageUtils.js +1 -1
  235. package/dist/utils/organizationEntitlements.d.ts +4 -4
  236. package/dist/utils/organizationEntitlements.js +3 -3
  237. package/dist/utils/paymentUtils.d.ts +10 -10
  238. package/dist/utils/paymentUtils.js +9 -9
  239. package/dist/utils/promoterCompetitionUtils.d.ts +4 -4
  240. package/dist/utils/promoterCompetitionUtils.d.ts.map +1 -1
  241. package/dist/utils/promoterCompetitionUtils.js +7 -7
  242. package/dist/utils/promoterCompetitionUtils.js.map +1 -1
  243. package/dist/utils/promotionBlastUtils.d.ts +1 -1
  244. package/dist/utils/promotionBlastUtils.js +4 -4
  245. package/dist/utils/promotionBlastUtils.js.map +1 -1
  246. package/dist/utils/qrCodeUtils.d.ts +3 -3
  247. package/dist/utils/qrCodeUtils.d.ts.map +1 -1
  248. package/dist/utils/qrCodeUtils.js +3 -3
  249. package/dist/utils/qrCodeUtils.js.map +1 -1
  250. package/dist/utils/recurrenceUtils.d.ts +7 -4
  251. package/dist/utils/recurrenceUtils.d.ts.map +1 -1
  252. package/dist/utils/recurrenceUtils.js +32 -5
  253. package/dist/utils/recurrenceUtils.js.map +1 -1
  254. package/dist/utils/reputationUtils.d.ts +2 -2
  255. package/dist/utils/reputationUtils.d.ts.map +1 -1
  256. package/dist/utils/reputationUtils.js +1 -1
  257. package/dist/utils/reputationUtils.js.map +1 -1
  258. package/dist/utils/reviewDimensionUtils.d.ts +2 -2
  259. package/dist/utils/reviewDimensionUtils.d.ts.map +1 -1
  260. package/dist/utils/reviewDimensionUtils.js +1 -1
  261. package/dist/utils/reviewDimensionUtils.js.map +1 -1
  262. package/dist/utils/service/__tests__/billingCapUtils.test.js +3 -3
  263. package/dist/utils/service/__tests__/billingCapUtils.test.js.map +1 -1
  264. package/dist/utils/service/__tests__/eventPromoterPhase3.test.js +1 -1
  265. package/dist/utils/service/__tests__/eventPromoterUtils.test.js +1 -1
  266. package/dist/utils/service/__tests__/eventPromoterUtils.test.js.map +1 -1
  267. package/dist/utils/service/__tests__/frontendServiceBookingUtils.test.js +2 -2
  268. package/dist/utils/service/__tests__/frontendServiceBookingUtils.test.js.map +1 -1
  269. package/dist/utils/service/__tests__/serviceBookingExposureUtils.test.js +1 -1
  270. package/dist/utils/service/__tests__/serviceBookingExposureUtils.test.js.map +1 -1
  271. package/dist/utils/service/__tests__/serviceBookingStatusUtils.test.js +2 -2
  272. package/dist/utils/service/__tests__/serviceBookingStatusUtils.test.js.map +1 -1
  273. package/dist/utils/service/__tests__/serviceRateUtils.test.js +6 -6
  274. package/dist/utils/service/__tests__/serviceRateUtils.test.js.map +1 -1
  275. package/dist/utils/service/apiServiceBookingApiUtils.js +1 -1
  276. package/dist/utils/service/apiServiceBookingApiUtils.js.map +1 -1
  277. package/dist/utils/service/billingCapUtils.d.ts +5 -5
  278. package/dist/utils/service/billingCapUtils.js +5 -5
  279. package/dist/utils/service/cancellationPolicyRefundResolver.d.ts +1 -1
  280. package/dist/utils/service/cancellationPolicyRefundResolver.d.ts.map +1 -1
  281. package/dist/utils/service/eventPromoterUtils.d.ts +17 -17
  282. package/dist/utils/service/eventPromoterUtils.d.ts.map +1 -1
  283. package/dist/utils/service/eventPromoterUtils.js +11 -11
  284. package/dist/utils/service/eventPromoterUtils.js.map +1 -1
  285. package/dist/utils/service/foodAndBeverageQuote.d.ts +8 -8
  286. package/dist/utils/service/foodAndBeverageQuote.js +8 -8
  287. package/dist/utils/service/offerAllowListUtils.d.ts +1 -1
  288. package/dist/utils/service/offerComparisonUtils.d.ts +6 -6
  289. package/dist/utils/service/offerComparisonUtils.js +2 -2
  290. package/dist/utils/service/offerComparisonUtils.js.map +1 -1
  291. package/dist/utils/service/serviceBookingExposureUtils.d.ts +7 -7
  292. package/dist/utils/service/serviceBookingExposureUtils.js +5 -5
  293. package/dist/utils/service/serviceBookingExposureUtils.js.map +1 -1
  294. package/dist/utils/service/serviceFeaturedSortUtils.js +2 -2
  295. package/dist/utils/service/serviceFeaturedSortUtils.js.map +1 -1
  296. package/dist/utils/service/serviceListingMediaUtils.d.ts +2 -2
  297. package/dist/utils/service/serviceListingMediaUtils.d.ts.map +1 -1
  298. package/dist/utils/service/serviceListingMediaUtils.js +2 -2
  299. package/dist/utils/service/serviceListingMediaUtils.js.map +1 -1
  300. package/dist/utils/service/serviceUtils.js +2 -2
  301. package/dist/utils/service/serviceUtils.js.map +1 -1
  302. package/dist/utils/service/unifiedPricingResolver.d.ts +5 -5
  303. package/dist/utils/service/unifiedPricingResolver.d.ts.map +1 -1
  304. package/dist/utils/service/venueSettlementUtils.d.ts +2 -2
  305. package/dist/utils/service/venueSettlementUtils.js +3 -3
  306. package/dist/utils/service/venueSettlementUtils.js.map +1 -1
  307. package/dist/utils/service/volunteerCompensationUtils.d.ts +2 -2
  308. package/dist/utils/service/volunteerCompensationUtils.js +1 -1
  309. package/dist/utils/service/volunteerCompensationUtils.js.map +1 -1
  310. package/dist/utils/slugUtils.d.ts +1 -1
  311. package/dist/utils/slugUtils.js +1 -1
  312. package/dist/utils/ticketPrintPostageUtils.d.ts +4 -4
  313. package/dist/utils/ticketPrintPostageUtils.js +5 -5
  314. package/dist/utils/ticketPrintPostageUtils.js.map +1 -1
  315. package/dist/utils/ticketTierSchedule.d.ts +1 -1
  316. package/dist/utils/ticketTierSchedule.js +4 -4
  317. package/dist/utils/ticketTierSchedule.js.map +1 -1
  318. package/dist/utils/trustScoreUtils.d.ts +1 -1
  319. package/dist/utils/trustScoreUtils.js +1 -1
  320. package/dist/utils/urlUtils.d.ts +2 -2
  321. package/dist/utils/urlUtils.js +2 -2
  322. package/dist/utils/userUtils.d.ts +4 -4
  323. package/dist/utils/userUtils.js +3 -3
  324. package/dist/utils/venueLoyalty/__tests__/eligibilityUtils.test.js +1 -1
  325. package/dist/utils/venueLoyalty/__tests__/redemptionCodeUtils.test.js +1 -1
  326. package/dist/utils/venueLoyalty/redemptionCodeUtils.d.ts +3 -3
  327. package/dist/utils/venueLoyalty/redemptionCodeUtils.js +3 -3
  328. package/dist/venueLoyaltyRedemption.d.ts +2 -2
  329. package/dist/venueLoyaltyRedemption.js +1 -1
  330. package/dist/venueMatch.d.ts +4 -4
  331. package/dist/venueMatch.d.ts.map +1 -1
  332. package/dist/venueMatch.js +1 -1
  333. package/dist/venueMatch.js.map +1 -1
  334. package/package.json +1 -1
  335. package/prisma/schema.prisma +3 -3
  336. package/src/__tests__/agePolicy.test.ts +6 -6
  337. package/src/__tests__/bashEventCancellationPolicy.test.ts +2 -2
  338. package/src/__tests__/bashSectionTitleForBashType.test.ts +3 -3
  339. package/src/__tests__/definitionsHelpers.test.ts +1 -1
  340. package/src/__tests__/entertainmentNotableVenues.test.ts +1 -1
  341. package/src/__tests__/hostCrmCrowdPulse.test.ts +1 -1
  342. package/src/__tests__/hostCrmSegments.test.ts +2 -2
  343. package/src/__tests__/hostPromoter.test.ts +1 -1
  344. package/src/__tests__/influencerAudience.test.ts +1 -1
  345. package/src/__tests__/promoterCompetitionUtils.test.ts +3 -3
  346. package/src/__tests__/scenePulse.test.ts +1 -1
  347. package/src/__tests__/seatMap.test.ts +1 -1
  348. package/src/__tests__/ticketAdmission.test.ts +1 -1
  349. package/src/accessScreening.ts +1 -1
  350. package/src/aiApproval.ts +3 -3
  351. package/src/appleIapProducts.ts +1 -1
  352. package/src/applicationFunnel.ts +1 -1
  353. package/src/audienceImport.ts +2 -2
  354. package/src/bashEventCancellationPolicy.ts +3 -3
  355. package/src/budgetApproval.ts +1 -1
  356. package/src/causeTags.ts +4 -4
  357. package/src/competitionIdeas.ts +12 -12
  358. package/src/competitionValidation.ts +1 -1
  359. package/src/definitions.ts +42 -42
  360. package/src/discoveryScope.ts +2 -2
  361. package/src/entertainmentNotableVenues.ts +1 -1
  362. package/src/extendedSchemas.ts +41 -41
  363. package/src/fundingMeter.ts +1 -1
  364. package/src/giveaway.ts +2 -2
  365. package/src/guestPartySize.ts +3 -3
  366. package/src/home.ts +1 -1
  367. package/src/homepageSyntheticRows.ts +2 -2
  368. package/src/hostCrmAutomation.ts +11 -11
  369. package/src/hostCrmConstants.ts +1 -1
  370. package/src/hostCrmCrowdPulse.ts +2 -2
  371. package/src/hostCrmInsights.ts +3 -3
  372. package/src/hostCrmLastBashProof.ts +2 -2
  373. package/src/hostCrmSegments.ts +12 -12
  374. package/src/hostPromoter.ts +1 -1
  375. package/src/icebreakerPrompts.ts +2 -2
  376. package/src/index.ts +1 -1
  377. package/src/influencerAudience.ts +3 -3
  378. package/src/liveActivity/liveActivityTypes.ts +10 -10
  379. package/src/locationShare.ts +2 -2
  380. package/src/membershipDefinitions.ts +21 -21
  381. package/src/mirroredPrismaEnums.ts +6 -6
  382. package/src/onSaleCapabilityRecommendations.ts +1 -1
  383. package/src/partnerStoreTypes.ts +1 -1
  384. package/src/productLaunch.ts +2 -2
  385. package/src/relationshipHealth.ts +5 -5
  386. package/src/scenePulse.ts +2 -2
  387. package/src/seatMap.ts +3 -3
  388. package/src/seatMapBestAvailable.ts +2 -2
  389. package/src/serviceTypeLabels.ts +3 -3
  390. package/src/sideQuestIdeas.ts +8 -8
  391. package/src/sideQuestTypes.ts +2 -2
  392. package/src/sms/smsTemplates.ts +1 -1
  393. package/src/stripeListingSubscriptionMessages.ts +1 -1
  394. package/src/targetAudienceLabels.ts +1 -1
  395. package/src/ticketBnplPaymentMethods.ts +3 -3
  396. package/src/userReportTypes.ts +1 -1
  397. package/src/userTaste.ts +2 -2
  398. package/src/utils/__tests__/badgeUtils.test.ts +5 -5
  399. package/src/utils/__tests__/bashPointsPaymentUtils.test.ts +4 -4
  400. package/src/utils/__tests__/contentFilterUtils.test.ts +23 -23
  401. package/src/utils/__tests__/dateTimeUtils.test.ts +1 -1
  402. package/src/utils/__tests__/displayDateUtils.test.ts +1 -1
  403. package/src/utils/__tests__/flyerUtils.test.ts +1 -1
  404. package/src/utils/__tests__/getBackendHost.test.ts +8 -8
  405. package/src/utils/__tests__/getFrontendHost.native.test.ts +1 -1
  406. package/src/utils/__tests__/getFrontendHost.test.ts +9 -9
  407. package/src/utils/__tests__/guestSurface.test.ts +1 -0
  408. package/src/utils/__tests__/organizationEntitlements.test.ts +1 -1
  409. package/src/utils/__tests__/paymentUtils.test.ts +7 -7
  410. package/src/utils/__tests__/promoCodesUtils.test.ts +2 -2
  411. package/src/utils/__tests__/qrCodeUtils.test.ts +4 -4
  412. package/src/utils/__tests__/recurrenceUtils.test.ts +26 -0
  413. package/src/utils/__tests__/reviewDimensionUtils.test.ts +1 -1
  414. package/src/utils/__tests__/stripeAccountUtils.test.ts +1 -1
  415. package/src/utils/__tests__/ticketPrintPostageUtils.test.ts +1 -1
  416. package/src/utils/addressUtils.ts +1 -1
  417. package/src/utils/apiUtils.ts +1 -1
  418. package/src/utils/birthdayExperienceQuality.ts +4 -4
  419. package/src/utils/blogUtils.ts +2 -2
  420. package/src/utils/discountEngine/discountCalculator.ts +1 -1
  421. package/src/utils/displayDateUtils.ts +2 -2
  422. package/src/utils/entertainmentDrawFit.ts +1 -1
  423. package/src/utils/eventTimezoneIana.ts +4 -4
  424. package/src/utils/flyerUtils.ts +3 -3
  425. package/src/utils/groupTicketCartUtils.ts +1 -1
  426. package/src/utils/guestSurface.ts +8 -6
  427. package/src/utils/lobFlyerUtils.ts +2 -2
  428. package/src/utils/luxonUtils.ts +5 -5
  429. package/src/utils/moodTrackUtils.ts +1 -1
  430. package/src/utils/nonprofitUtils.ts +3 -3
  431. package/src/utils/orgPromotionalPackageUtils.ts +1 -1
  432. package/src/utils/organizationEntitlements.ts +4 -4
  433. package/src/utils/paymentUtils.ts +10 -10
  434. package/src/utils/promoterCompetitionUtils.ts +8 -8
  435. package/src/utils/promotionBlastUtils.ts +4 -4
  436. package/src/utils/qrCodeUtils.ts +3 -3
  437. package/src/utils/recurrenceUtils.ts +33 -5
  438. package/src/utils/reputationUtils.ts +3 -3
  439. package/src/utils/reviewDimensionUtils.ts +2 -2
  440. package/src/utils/service/__tests__/billingCapUtils.test.ts +3 -3
  441. package/src/utils/service/__tests__/eventPromoterPhase3.test.ts +1 -1
  442. package/src/utils/service/__tests__/eventPromoterUtils.test.ts +1 -1
  443. package/src/utils/service/__tests__/frontendServiceBookingUtils.test.ts +2 -2
  444. package/src/utils/service/__tests__/serviceBookingExposureUtils.test.ts +1 -1
  445. package/src/utils/service/__tests__/serviceBookingStatusUtils.test.ts +2 -2
  446. package/src/utils/service/__tests__/serviceRateUtils.test.ts +6 -6
  447. package/src/utils/service/apiServiceBookingApiUtils.ts +1 -1
  448. package/src/utils/service/billingCapUtils.ts +5 -5
  449. package/src/utils/service/cancellationPolicyRefundResolver.ts +1 -1
  450. package/src/utils/service/eventPromoterUtils.ts +27 -27
  451. package/src/utils/service/foodAndBeverageQuote.ts +8 -8
  452. package/src/utils/service/offerAllowListUtils.ts +1 -1
  453. package/src/utils/service/offerComparisonUtils.ts +8 -8
  454. package/src/utils/service/serviceBookingExposureUtils.ts +8 -8
  455. package/src/utils/service/serviceBookingTypes.ts +2 -2
  456. package/src/utils/service/serviceFeaturedSortUtils.ts +2 -2
  457. package/src/utils/service/serviceListingMediaUtils.ts +2 -2
  458. package/src/utils/service/serviceUtils.ts +2 -2
  459. package/src/utils/service/unifiedPricingResolver.ts +5 -5
  460. package/src/utils/service/venueSettlementUtils.ts +3 -3
  461. package/src/utils/service/volunteerCompensationUtils.ts +3 -3
  462. package/src/utils/slugUtils.ts +1 -1
  463. package/src/utils/ticketPrintPostageUtils.ts +5 -5
  464. package/src/utils/ticketTierSchedule.ts +4 -4
  465. package/src/utils/trustScoreUtils.ts +1 -1
  466. package/src/utils/urlUtils.ts +2 -2
  467. package/src/utils/userUtils.ts +4 -4
  468. package/src/utils/venueLoyalty/__tests__/eligibilityUtils.test.ts +1 -1
  469. package/src/utils/venueLoyalty/__tests__/redemptionCodeUtils.test.ts +1 -1
  470. package/src/utils/venueLoyalty/redemptionCodeUtils.ts +3 -3
  471. package/src/venueLoyaltyRedemption.ts +2 -2
  472. package/src/venueMatch.ts +4 -4
@@ -22,7 +22,7 @@ export function getBlogDetailUrl(blogId: string, slug?: string, title?: string):
22
22
  }
23
23
  }
24
24
 
25
- /** Prisma default IDs are CUID / CUID2-like: start with `c`, 21–33 chars. */
25
+ /** Prisma default IDs are CUID / CUID2-like: start with `c`, 21 to 33 chars. */
26
26
  export function looksLikePrismaCuid(id: string): boolean {
27
27
  return /^c[a-z0-9]{20,32}$/i.test(id);
28
28
  }
@@ -41,7 +41,7 @@ export function parseBlogUrlParams(blogIdSlug: string): { id: string; slug?: str
41
41
  const slug = blogIdSlug.substring(hyphenIndex + 1);
42
42
 
43
43
  // Sitemap and SPA links use `/blog/:slug`. Only split id-slug when the
44
- // prefix is a Prisma CUID — otherwise "bash-community-vs-eventbrite"
44
+ // prefix is a Prisma CUID. Otherwise "bash-community-vs-eventbrite"
45
45
  // would be parsed as id "bash".
46
46
  if (looksLikePrismaCuid(id)) {
47
47
  return { id, slug };
@@ -58,7 +58,7 @@ export const calculatePromoCodeDiscount = (
58
58
  amountDiscounted,
59
59
  originalPrice: originalTotal,
60
60
  finalPrice,
61
- // Attribution = promoter's User id only (never Promoter row id — breaks dashboards).
61
+ // Attribution = promoter's User id only (never Promoter row id. Breaks dashboards).
62
62
  // Omit if promoter pending signup (no userId yet) or relation not loaded.
63
63
  ...(promoCode.promoterId &&
64
64
  promoCode.promoter?.userId && {
@@ -4,7 +4,7 @@
4
4
  * No Luxon dependency to avoid timezone behavior changes for UTC ISO strings.
5
5
  */
6
6
 
7
- /** "Mar 7, 2026" — standard short display date for UI components. Formats in browser local timezone. */
7
+ /** "Mar 7, 2026". Standard short display date for UI components. Formats in browser local timezone. */
8
8
  export function formatShortDate(
9
9
  date: Date | string | null | undefined,
10
10
  fallback = 'Date TBD'
@@ -19,7 +19,7 @@ export function formatShortDate(
19
19
  });
20
20
  }
21
21
 
22
- /** "March 7, 2026" — long display date for blog/billing UI. Formats in browser local timezone. */
22
+ /** "March 7, 2026". Long display date for blog/billing UI. Formats in browser local timezone. */
23
23
  export function formatLongDate(
24
24
  date: Date | string | null | undefined,
25
25
  fallback = ''
@@ -59,7 +59,7 @@ export interface DrawCapacityFitResult {
59
59
  }
60
60
 
61
61
  /**
62
- * Score how well an entertainer's draw fits a venue's capacity (0–15 points).
62
+ * Score how well an entertainer's draw fits a venue's capacity (0 to 15 points).
63
63
  * Partial credit when only one side has data.
64
64
  */
65
65
  export function scoreDrawCapacityFit(
@@ -92,7 +92,7 @@ export function isValidIanaTimezone(timezone: string | null | undefined): boolea
92
92
  // Newer ICU accepts offset ids (`+05:00`) as timeZone; those are not IANA names.
93
93
  if (/^[+-]\d{1,2}(?::?\d{2})?$/.test(t)) return false;
94
94
 
95
- // Intl throws RangeError for unknown IANA ids — no luxon needed.
95
+ // Intl throws RangeError for unknown IANA ids. No luxon needed.
96
96
  try {
97
97
  Intl.DateTimeFormat(undefined, { timeZone: t });
98
98
  return true;
@@ -121,7 +121,7 @@ export function getIanaTimezoneFromCoordinates(
121
121
  return null;
122
122
  }
123
123
 
124
- // Null Island / indeterminate — do not guess a zone from (0, 0).
124
+ // Null Island / indeterminate. Do not guess a zone from (0, 0).
125
125
  if (latitude === 0 && longitude === 0) {
126
126
  return null;
127
127
  }
@@ -144,7 +144,7 @@ export function getIanaTimezoneFromCoordinates(
144
144
  return "America/Anchorage";
145
145
  }
146
146
 
147
- // Continental US — fixed west-to-east bands (avoids misclassifying Mountain vs Central)
147
+ // Continental US. Fixed west-to-east bands (avoids misclassifying Mountain vs Central)
148
148
  if (latitude >= 18.9 && latitude <= 71.5388) {
149
149
  if (longitude <= -114) {
150
150
  return "America/Los_Angeles";
@@ -332,7 +332,7 @@ export type ResolveEventTimezoneForDisplayArgs = InferEventTimezoneArgs & {
332
332
 
333
333
  /**
334
334
  * For public surfaces (e.g. BashCard): prefer geographic inference when location
335
- * data is available — it is more reliable than the stored timezone which may have
335
+ * data is available. It is more reliable than the stored timezone which may have
336
336
  * been set by AI or defaulted incorrectly. Falls back to the stored IANA only when
337
337
  * geographic inference produces no opinion (returns UTC). Never uses the viewer's
338
338
  * device timezone.
@@ -7,7 +7,7 @@ export const FLYER_EDDM_HEIGHT_IN = 11;
7
7
  export const FLYER_EDDM_MIN_WIDTH_IN = 6.125;
8
8
  export const FLYER_EDDM_MIN_HEIGHT_IN = 11;
9
9
 
10
- /** USPS EDDM Retail per-piece postage (2026 — verify periodically). */
10
+ /** USPS EDDM Retail per-piece postage (2026. Verify periodically). */
11
11
  export const USPS_EDDM_RETAIL_PER_PIECE_CENTS = 24.7;
12
12
 
13
13
  /**
@@ -57,7 +57,7 @@ export const FLYER_PRICING_TIERS: FlyerTierQuote[] = [
57
57
  },
58
58
  ];
59
59
 
60
- /** Default sponsor slot list prices (Utah / intermountain — cents). */
60
+ /** Default sponsor slot list prices (Utah / intermountain. Cents). */
61
61
  export const FLYER_SPONSOR_DEFAULT_FEATURED_CENTS = 10000;
62
62
  export const FLYER_SPONSOR_DEFAULT_SUPPORTING_CENTS = 5000;
63
63
  export const FLYER_SPONSOR_BUSINESS_NAME_MAX_LENGTH = 48;
@@ -143,7 +143,7 @@ export function quoteFlyerTierForHouseholds(
143
143
  return tier;
144
144
  }
145
145
  }
146
- // Above metro max — use metro as ceiling for MVP
146
+ // Above metro max. Use metro as ceiling for MVP
147
147
  const last = FLYER_PRICING_TIERS[FLYER_PRICING_TIERS.length - 1];
148
148
  if (totalHouseholds > last.maxHouseholds) {
149
149
  return last;
@@ -22,7 +22,7 @@ export function validateGroupTicketCartForTiers(
22
22
  if (packageQty < 1) {
23
23
  return {
24
24
  ok: false,
25
- message: `${tier.title} is a group package — select one package to buy.`,
25
+ message: `${tier.title} is a group package. Select one package to buy.`,
26
26
  };
27
27
  }
28
28
  if (packageQty > 1) {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Curated guest visibility — shared policy resolver for API + bash-app.
2
+ * Curated guest visibility. Shared policy resolver for API + bash-app.
3
3
  * Three layers compose: event teaser policy, per-guest visibility, viewer roster depth.
4
4
  */
5
5
 
@@ -72,7 +72,7 @@ export type GuestSurfacePayload = {
72
72
  attendeeVisibilityByUserId?: Record<string, AttendeeVisibility>;
73
73
  /** Event has public guest list enabled on bash detail */
74
74
  attendeeListPublic?: boolean;
75
- /** Preview | Public | TicketHolders — supersedes attendeeListPublic when set */
75
+ /** Preview | Public | TicketHolders. Supersedes attendeeListPublic when set */
76
76
  attendeeListAccess?: string | null;
77
77
  /**
78
78
  * When set, the viewer sees a blurred preview and must RSVP (or buy a ticket)
@@ -129,7 +129,9 @@ export function resolveAttendeeListAccess(event: {
129
129
  if (raw === "Public" || raw === "TicketHolders" || raw === "Preview" || raw === "RsvpGoing") {
130
130
  return raw;
131
131
  }
132
- return event.attendeeListPublic ? "Public" : "Preview";
132
+ // Explicit legacy "not public" stays a curated preview. Unset means Public.
133
+ if (event.attendeeListPublic === false) return "Preview";
134
+ return "Public";
133
135
  }
134
136
 
135
137
  /** Legacy showAttendees=false → Hidden; otherwise honour attendeeDisplayMode string. */
@@ -200,7 +202,7 @@ export function resolveGuestSurfacePolicy(
200
202
  showNetworkSlice: false,
201
203
  rosterDepth: "None",
202
204
  previewLimit: 5,
203
- /** Named faces for avatar stack + overflow (+N) tooltip — not only the 5 visible bubbles. */
205
+ /** Named faces for avatar stack + overflow (+N) tooltip. Not only the 5 visible bubbles. */
204
206
  apiPreviewLimit: 60,
205
207
  effectiveMode: eventMode,
206
208
  };
@@ -214,7 +216,7 @@ export function resolveGuestSurfacePolicy(
214
216
  showNetworkSlice: isAuthenticated,
215
217
  rosterDepth: effectiveDepth,
216
218
  previewLimit: 5,
217
- /** Named faces for avatar stack + overflow (+N) tooltip — not only the 5 visible bubbles. */
219
+ /** Named faces for avatar stack + overflow (+N) tooltip. Not only the 5 visible bubbles. */
218
220
  apiPreviewLimit: 60,
219
221
  effectiveMode: eventMode,
220
222
  };
@@ -246,7 +248,7 @@ export function resolveGuestSurfacePolicy(
246
248
  showNetworkSlice,
247
249
  rosterDepth: effectiveDepth,
248
250
  previewLimit: 5,
249
- /** Named faces for avatar stack + overflow (+N) tooltip — not only the 5 visible bubbles. */
251
+ /** Named faces for avatar stack + overflow (+N) tooltip. Not only the 5 visible bubbles. */
250
252
  apiPreviewLimit: 60,
251
253
  effectiveMode: eventMode,
252
254
  };
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Lob addressed postcard economics and trim sizes.
3
3
  *
4
- * Do not use EDDM (`flyerUtils.ts`) per-piece rates for Lob — different product.
4
+ * Do not use EDDM (`flyerUtils.ts`) per-piece rates for Lob. Different product.
5
5
  *
6
6
  * **Pricing source:** Replace `LOB_ADDRESSED_UNIT_CENTS_BY_SIZE` after verifying
7
7
  * print+postage with your Lob dashboard or account rep (note the date in comments
@@ -33,7 +33,7 @@ export const LOB_POSTCARD_TRIM_IN: Record<
33
33
  /**
34
34
  * Verified placeholder unit cost (print + postage to mailbox) in US cents per piece.
35
35
  * TODO: replace with values from Lob dashboard for your mail class (e.g. first class).
36
- * Last reviewed placeholder: 2026-04-26 — not for production pricing without verification.
36
+ * Last reviewed placeholder: 2026-04-26. Not for production pricing without verification.
37
37
  */
38
38
  export const LOB_ADDRESSED_UNIT_CENTS_BY_SIZE: Record<LobPostcardSizeKey, number> = {
39
39
  LOB_4X6: 85,
@@ -403,7 +403,7 @@ export function formatDayOfWeekHours(hours: LuxonDayOfWeekHours): string[] {
403
403
  const formattedRanges = ranges
404
404
  .map(
405
405
  ({ start, end }) =>
406
- `${start.toFormat("h:mm a")} – ${end.toFormat("h:mm a")}`
406
+ `${start.toFormat("h:mm a")} to ${end.toFormat("h:mm a")}`
407
407
  )
408
408
  .join(", ");
409
409
  return `${dayName}: ${formattedRanges}`;
@@ -873,10 +873,10 @@ export function dateTimeRangeCrossesMidnight(range: LuxonDateRange) {
873
873
  * end: March 9, 2025 9:00 pm
874
874
  *
875
875
  * then the segments produced are:
876
- * March 5, 11:00 am – March 6, 9:00 pm
877
- * March 6, 11:00 am – March 7, 9:00 pm
878
- * March 7, 11:00 am – March 8, 9:00 pm
879
- * March 8, 11:00 am – March 9, 9:00 pm
876
+ * March 5, 11:00 am. March 6, 9:00 pm
877
+ * March 6, 11:00 am. March 7, 9:00 pm
878
+ * March 7, 11:00 am. March 8, 9:00 pm
879
+ * March 8, 11:00 am. March 9, 9:00 pm
880
880
  *
881
881
  * (You can then filter out partial segments if you want only full "days.")
882
882
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Bash mood track — optional soundtrack URL on a bash.
2
+ * Bash mood track. Optional soundtrack URL on a bash.
3
3
  * Preferred: YouTube Music. Also: Spotify, Apple Music, SoundCloud.
4
4
  * Guests tap to play; never autoplay.
5
5
  */
@@ -3,7 +3,7 @@ import type { Organization } from "@prisma/client";
3
3
  /**
4
4
  * Subset of `Organization` fields the verified-nonprofit helpers need. Callers
5
5
  * may pass any prisma payload that selects (or includes) at least these
6
- * columns — keeps consumers free to use narrow `select` shapes.
6
+ * columns. Keeps consumers free to use narrow `select` shapes.
7
7
  */
8
8
  export type NonprofitVerificationFields = Pick<
9
9
  Organization,
@@ -15,7 +15,7 @@ export type NonprofitVerificationFields = Pick<
15
15
 
16
16
  /**
17
17
  * Verified-nonprofit status is determined solely by an admin stamp:
18
- * `nonprofitVerifiedAt` is set (in the past or now — future timestamps do
18
+ * `nonprofitVerifiedAt` is set (in the past or now. Future timestamps do
19
19
  * NOT count) AND we captured `nonprofitCountry` + `nonprofitRegistrationNumber`.
20
20
  * The Stripe nonprofit-pricing status is informational only and DOES NOT gate
21
21
  * verification (a charity can be verified by Bash even before applying to
@@ -23,7 +23,7 @@ export type NonprofitVerificationFields = Pick<
23
23
  *
24
24
  * IMPORTANT: `BashEvent.nonProfit` is a user-entered flag and MUST NOT be
25
25
  * passed in here. Fee-waiver code reads only the Organization's verification
26
- * fields — see Phase 3 of the donation-followups-leak-fix plan.
26
+ * fields. See Phase 3 of the donation-followups-leak-fix plan.
27
27
  */
28
28
  export function isVerifiedNonprofitOrganization(
29
29
  org: NonprofitVerificationFields | null | undefined
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Org Promotional Packages — hosts pay orgs to endorse events to org members.
2
+ * Org Promotional Packages. Hosts pay orgs to endorse events to org members.
3
3
  */
4
4
 
5
5
  export type OrgPromotionalPackageTierId = "community" | "spotlight" | "featured";
@@ -17,7 +17,7 @@ export interface OrganizationEntitlementInput {
17
17
  subscriptionStatus?: string | null;
18
18
  /**
19
19
  * True only when ops provisioned Enterprise via a signed deal (admin
20
- * enterprise-provisioning endpoint) — the only way to reach
20
+ * enterprise-provisioning endpoint). The only way to reach
21
21
  * subscriptionTier="Enterprise" (see docs/ENTERPRISE-B2B-SALES-PLAYBOOK.md;
22
22
  * self-serve checkout rejects Enterprise). Optional/undefined is treated as
23
23
  * false so legacy call sites that don't select this field fail closed on the
@@ -56,7 +56,7 @@ function hasActiveGrowthOrAboveTier(
56
56
  * Vanity subdomains ({slug}.bash.community) are a Growth-tier-and-up perk, not
57
57
  * Enterprise-only: unlike custom domains, granting one costs nothing extra
58
58
  * (a slug lookup against the existing bash.community CloudFront distribution,
59
- * no per-org AWS resources) — it's a cheap, visible upgrade incentive to dangle
59
+ * no per-org AWS resources). It's a cheap, visible upgrade incentive to dangle
60
60
  * in front of Starter orgs. See {@link organizationHasCustomDomainAccess} for
61
61
  * the pricier, Enterprise-only white-label surface.
62
62
  */
@@ -119,8 +119,8 @@ export function organizationHasComplianceAccess(
119
119
  * Custom domains (white-label tier): real DNS (e.g. members.acme.com) provisioned
120
120
  * via AWS CloudFront SaaS Manager Distribution Tenants, plus the "Powered by Bash"
121
121
  * removal toggle. Unlike {@link organizationHasVanitySubdomain}, this needs a real
122
- * per-org CloudFront Distribution Tenant + managed cert + the org's own DNS work —
123
- * actual infra cost and complexity per org — so it stays Enterprise-only (today
122
+ * per-org CloudFront Distribution Tenant + managed cert + the org's own DNS work.
123
+ * actual infra cost and complexity per org. So it stays Enterprise-only (today
124
124
  * always sales-provisioned, since self-serve Enterprise checkout is blocked; see
125
125
  * docs/ENTERPRISE-B2B-SALES-PLAYBOOK.md). Does NOT require
126
126
  * {@link organizationHasEnterprisePlatformAccess}'s `enterpriseSalesProvisioned`
@@ -150,7 +150,7 @@ export function convertDollarsToCents(
150
150
 
151
151
  /**
152
152
  * Calculate Stripe's standard card processing fee: 2.9% + $0.30.
153
- * This is passed through transparently — Stripe charges it regardless.
153
+ * This is passed through transparently. Stripe charges it regardless.
154
154
  * @param amountDollars - Transaction amount in dollars (not cents)
155
155
  * @returns Stripe fee in dollars
156
156
  */
@@ -161,7 +161,7 @@ export function calculateStripeFee(amountDollars: number): number {
161
161
  }
162
162
 
163
163
  /**
164
- * Stripe card processing pass-through (2.9% + $0.30), in cents — single source of truth with {@link STRIPE_PROCESSING_FEE}.
164
+ * Stripe card processing pass-through (2.9% + $0.30), in cents. Single source of truth with {@link STRIPE_PROCESSING_FEE}.
165
165
  * Use for Connect `application_fee_amount` and checkout line items so totals match the checkout UI.
166
166
  */
167
167
  export function calculateStripeProcessingFeeCents(amountCents: number): number {
@@ -171,7 +171,7 @@ export function calculateStripeProcessingFeeCents(amountCents: number): number {
171
171
  }
172
172
 
173
173
  /**
174
- * Bash **platform** fee only (currently 0% — no Bash take on tickets). Not the Stripe processing fee.
174
+ * Bash **platform** fee only (currently 0%. No Bash take on tickets). Not the Stripe processing fee.
175
175
  * @deprecated Prefer {@link calculateStripeProcessingFeeCents} for Stripe pass-through on ticket/donation charges.
176
176
  */
177
177
  export function calculateBashAppFee(total: number): number {
@@ -179,7 +179,7 @@ export function calculateBashAppFee(total: number): number {
179
179
  }
180
180
 
181
181
  /**
182
- * Calculate Stripe's processing fee for donations — transparent pass-through only.
182
+ * Calculate Stripe's processing fee for donations. Transparent pass-through only.
183
183
  * Same formula as tickets: {@link STRIPE_PROCESSING_FEE}.
184
184
  * @param amountCents - Donation amount in cents
185
185
  * @returns Stripe processing fee in cents (integer)
@@ -356,7 +356,7 @@ export function guestCheckoutHasNoAddedFees(
356
356
  }
357
357
 
358
358
  /**
359
- * Full guest ticket checkout breakdown — single source for API charges and UI copy.
359
+ * Full guest ticket checkout breakdown. Single source for API charges and UI copy.
360
360
  *
361
361
  * HostAbsorbs (default): guest pays subtotal (+ optional platform guest line only).
362
362
  * GuestPays/Split (enterprise): guest also pays a visible processing line (fee on subtotal, donation-style).
@@ -461,7 +461,7 @@ export function clampTicketCommissionBps(
461
461
  * along with its constituent parts.
462
462
  *
463
463
  * `isVerifiedNonprofitHost` waives ONLY Bash's platform take
464
- * (`bashPlatformTotalCents`) — Stripe's pass-through (2.9% + $0.30) is untouched
464
+ * (`bashPlatformTotalCents`). Stripe's pass-through (2.9% + $0.30) is untouched
465
465
  * because that's not ours to waive. The host applies for Stripe nonprofit
466
466
  * pricing directly. When `true`:
467
467
  * - `bashPlatformTotalCents` and `guestPlatformLineCents` are both zero
@@ -480,7 +480,7 @@ export function computeTicketApplicationFeeAmountCents(args: {
480
480
  bashPassWaivesGuestFee: boolean;
481
481
  /**
482
482
  * Verified-nonprofit hosts pay no Bash platform fee. Sourced from
483
- * `isVerifiedNonprofitOrganization()` over the host's Organization row —
483
+ * `isVerifiedNonprofitOrganization()` over the host's Organization row.
484
484
  * NEVER from `BashEvent.nonProfit`, which is user-entered.
485
485
  */
486
486
  isVerifiedNonprofitHost?: boolean;
@@ -571,9 +571,9 @@ export function getEffectiveBashPassTier(user: {
571
571
 
572
572
  /**
573
573
  * Remaining BashPass redemptions this billing month.
574
- * - `0` — no BashPass or cap exhausted
575
- * - positive integer — spots left
576
- * - `null` — unlimited tier (no monthly cap)
574
+ * - `0`. No BashPass or cap exhausted
575
+ * - positive integer. Spots left
576
+ * - `null`. Unlimited tier (no monthly cap)
577
577
  */
578
578
  export function getBashPassMonthlyCapRemaining(user: {
579
579
  bashPassTier: BashPassTier | null | undefined;
@@ -1,8 +1,8 @@
1
1
  /**
2
- * Promoter Competition — pure utility functions for the Street Team / Promoter
2
+ * Promoter Competition. Pure utility functions for the Street Team / Promoter
3
3
  * Competition workstream.
4
4
  *
5
- * No side effects, no DB imports — safe to import in bash-app (browser) and in api.
5
+ * No side effects, no DB imports. Safe to import in bash-app (browser) and in api.
6
6
  */
7
7
  import { PromoterRewardMode, PromoterRewardType } from '../definitions.js';
8
8
 
@@ -21,7 +21,7 @@ export interface PromoterMilestoneInput {
21
21
  export interface PromoterCompetitionEconomics {
22
22
  grossPotentialRevenueCents: number;
23
23
  maxCashRewardExposureCents: number;
24
- /** 0–100 range; maxCashReward / grossRevenue × 100, rounded to 1 decimal. */
24
+ /** 0 to 100 range; maxCashReward / grossRevenue × 100, rounded to 1 decimal. */
25
25
  effectiveAcquisitionCostPct: number;
26
26
  /** gross − maxCashReward */
27
27
  estimatedNetRevenueCents: number;
@@ -110,7 +110,7 @@ export function computePromoterCompetitionEconomics(params: {
110
110
  // Only the highest single threshold reward is effective at once.
111
111
  thresholdExposure = Math.max(0, ...thresholdCash.map((m) => m.rewardAmountCents ?? 0));
112
112
  } else {
113
- // ADDITIVE — every threshold reward stacks.
113
+ // ADDITIVE. Every threshold reward stacks.
114
114
  thresholdExposure = thresholdCash.reduce(
115
115
  (sum, m) => sum + (m.rewardAmountCents ?? 0),
116
116
  0
@@ -132,7 +132,7 @@ export function computePromoterCompetitionEconomics(params: {
132
132
 
133
133
  const estimatedNetRevenueCents = grossPotentialRevenueCents - maxCashRewardExposureCents;
134
134
 
135
- // Build rewardBreakdown — threshold milestones sorted ascending, rank milestones last.
135
+ // Build rewardBreakdown. Threshold milestones sorted ascending, rank milestones last.
136
136
  const sortedMilestones = [...milestones].sort((a, b) => {
137
137
  const aIsRank = a.rank != null;
138
138
  const bIsRank = b.rank != null;
@@ -141,7 +141,7 @@ export function computePromoterCompetitionEconomics(params: {
141
141
  if (!aIsRank && !bIsRank) {
142
142
  return (a.threshold ?? Infinity) - (b.threshold ?? Infinity);
143
143
  }
144
- // Both rank-based — sort by rank ascending.
144
+ // Both rank-based. Sort by rank ascending.
145
145
  return (a.rank ?? Infinity) - (b.rank ?? Infinity);
146
146
  });
147
147
 
@@ -168,7 +168,7 @@ const SALES_GOAL_SNAP_POINTS = [25, 50, 75, 100, 150, 200] as const;
168
168
  /**
169
169
  * Suggests a sales goal for the promoter competition wizard.
170
170
  *
171
- * Logic: take 40–60% of remaining capacity (capacity − ticketsSold), then snap
171
+ * Logic: take 40 to 60% of remaining capacity (capacity − ticketsSold), then snap
172
172
  * to the nearest common benchmark in [25, 50, 75, 100, 150, 200]. Returns null
173
173
  * when data is insufficient (null inputs or capacity ≤ 0).
174
174
  */
@@ -183,7 +183,7 @@ export function suggestPromoterSalesGoal(params: {
183
183
  const remaining = Math.max(0, capacity - sold);
184
184
  if (remaining === 0) return null;
185
185
 
186
- // Target the midpoint of 40–60% of remaining.
186
+ // Target the midpoint of 40 to 60% of remaining.
187
187
  const target = remaining * 0.5;
188
188
 
189
189
  // Snap to the nearest benchmark.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Promotion Blast — on-site partner promos (time-boxed + geofence).
2
+ * Promotion Blast. On-site partner promos (time-boxed + geofence).
3
3
  */
4
4
 
5
5
  export type PromotionBlastPackageTierId = "starter" | "standard" | "premium";
@@ -89,11 +89,11 @@ export function promotionBlastPackageTotalCents(pkg: PromotionBlastPackageTerms)
89
89
  export function promotionBlastPackageLabel(tierId: PromotionBlastPackageTierId): string {
90
90
  switch (tierId) {
91
91
  case "starter":
92
- return "Starter — 1 time-boxed blast";
92
+ return "Starter. 1 time-boxed blast";
93
93
  case "standard":
94
- return "Standard — 3 blasts + geofence";
94
+ return "Standard. 3 blasts + geofence";
95
95
  case "premium":
96
- return "Premium — unlimited blasts + geofence";
96
+ return "Premium. Unlimited blasts + geofence";
97
97
  default:
98
98
  return tierId;
99
99
  }
@@ -6,7 +6,7 @@ export function bashEventPrismaCheckoutQrCodeUrl(bashEventId: string | undefined
6
6
  return `${TICKET_DETAILS}/${bashEventId}/${prismaCheckoutId}`;
7
7
  }
8
8
 
9
- /** Builds a **navigable** `/ticket-details/...` URL for QR or links (not the JSON scan-at-door payload — see bash-app `encodeTicketQrPayload`). */
9
+ /** Builds a **navigable** `/ticket-details/...` URL for QR or links (not the JSON scan-at-door payload. See bash-app `encodeTicketQrPayload`). */
10
10
  export function bashEventQrCodeUrl(bashEventId: string | undefined | null, ticketTierId?: string | undefined | null, ticketId?: string | undefined | null, slug?: string | undefined | null): string {
11
11
  const baseUrl = slug ? generateBashDetailUrl(bashEventId!, slug).replace('/bash/', '/ticket-details/') : `${TICKET_DETAILS}/${bashEventId}`;
12
12
 
@@ -26,14 +26,14 @@ export async function createQrCodeImage(qrData: string): Promise<string> {
26
26
  }
27
27
 
28
28
  /**
29
- * Door-scan admission QR payload for a ticket — the same shape the buyer's
29
+ * Door-scan admission QR payload for a ticket. The same shape the buyer's
30
30
  * "show at door" QR encodes (bash-app `MyTicketInlineQr.tsx`, built inline as
31
31
  * `checkInData` for `encodeTicketQrPayload`) and what the API's door-verify
32
32
  * parser reads (`parseTicketQrScanPayload` in `ticketApi.ts`, which requires
33
33
  * string `eventId`/`ticketId` and reads an optional `qrToken`).
34
34
  *
35
35
  * Server-side callers (e.g. printed ticket artwork) MUST use this so a
36
- * physical ticket's QR scans identically to the in-app one — no new
36
+ * physical ticket's QR scans identically to the in-app one. No new
37
37
  * verification path, no schema changes to `qrToken` handling.
38
38
  */
39
39
  export function encodeTicketDoorQrPayload(args: {
@@ -48,6 +48,24 @@ export function occurrenceOverrideKey(
48
48
  return dt.toFormat(LUXON_DATETIME_FORMAT_ISO_LIKE);
49
49
  }
50
50
 
51
+ /** Normalize occurrence overrides for Prisma `Recurrence.occurrenceOverrides` (Json). */
52
+ export function occurrenceOverridesForStorage(
53
+ overrides: OccurrenceOverrideMap | Prisma.JsonValue | null | undefined
54
+ ): Prisma.JsonValue | null {
55
+ if (overrides == null) return null;
56
+ const map = parseOccurrenceOverrides(overrides);
57
+ if (Object.keys(map).length === 0) return null;
58
+ const obj: Prisma.JsonObject = {};
59
+ for (const [key, val] of Object.entries(map)) {
60
+ const entry: Prisma.JsonObject = { startDateTime: val.startDateTime };
61
+ if (val.endDateTime != null) {
62
+ entry.endDateTime = val.endDateTime;
63
+ }
64
+ obj[key] = entry;
65
+ }
66
+ return obj;
67
+ }
68
+
51
69
  /** Safely coerce the `Recurrence.occurrenceOverrides` Json column into a typed map. */
52
70
  export function parseOccurrenceOverrides(
53
71
  raw: unknown
@@ -414,11 +432,12 @@ function getYearlyRecurringDates(
414
432
 
415
433
  /**
416
434
  * For a daily run-of-shows (same start/end clock each night), returns the first and last
417
- * occurrence instants so UIs can show "Apr 3–5" instead of the first day plus "+N more".
435
+ * occurrence instants so UIs can show "Apr 3 to 5" instead of the first day plus "+N more".
418
436
  *
419
- * Returns null unless: Daily interval 1, `endDateTime` on the same calendar day as
420
- * `startDateTime` (per-show duration), and all generated occurrences are on consecutive
421
- * calendar days in `eventTimezone`.
437
+ * Returns null unless: Daily interval 1, each show stays under 24 hours (same calendar
438
+ * day, or ending the next morning), and all generated occurrences are on consecutive
439
+ * calendar days in `eventTimezone`. A span of two or more full days is a continuous
440
+ * event, not a nightly run.
422
441
  */
423
442
  export function getCompactRunFirstAndLastOccurrence(
424
443
  startDateTime: DateTimeArgType,
@@ -449,9 +468,18 @@ export function getCompactRunFirstAndLastOccurrence(
449
468
  ? endDateTime
450
469
  : new Date(endDateTime as string)
451
470
  ).setZone(z);
452
- if (!start.hasSame(end, "day")) {
471
+ const startDay = start.startOf("day");
472
+ const endDay = end.startOf("day");
473
+ const dayGap = Math.round(endDay.diff(startDay, "days").days);
474
+ if (dayGap < 0 || dayGap > 1) {
453
475
  return null;
454
476
  }
477
+ if (dayGap === 1) {
478
+ const durationHours = end.diff(start, "hours").hours;
479
+ if (durationHours <= 0 || durationHours >= 24) {
480
+ return null;
481
+ }
482
+ }
455
483
 
456
484
  const occ = getRecurringBashEventPossibleLuxonTimes(startDateTime, recurrence);
457
485
  if (occ.length < 2) {
@@ -11,11 +11,11 @@ export type ReputationActorType = "host" | "service" | "venue" | "artist";
11
11
 
12
12
  export interface ReputationSummary {
13
13
  actorType: ReputationActorType;
14
- /** Raw average rating (0–5), or null when there isn't enough signal. */
14
+ /** Raw average rating (0 to 5), or null when there isn't enough signal. */
15
15
  averageRating: number | null;
16
16
  /** Number of ratings behind the average. */
17
17
  totalRatings: number;
18
- /** Bayesian-adjusted score (0–5) for ranking; null below the minimum. */
18
+ /** Bayesian-adjusted score (0 to 5) for ranking; null below the minimum. */
19
19
  bayesianScore: number | null;
20
20
  /** Whether there are enough ratings to show stars publicly. */
21
21
  hasEnoughSignal: boolean;
@@ -26,7 +26,7 @@ export const MIN_RATINGS_FOR_DISPLAY = 3;
26
26
 
27
27
  /** Prior strength (how many "virtual" average-rated reviews to blend in). */
28
28
  const BAYESIAN_PRIOR_COUNT = 10;
29
- /** Prior mean — the platform's assumed baseline rating. */
29
+ /** Prior mean. The platform's assumed baseline rating. */
30
30
  const BAYESIAN_PRIOR_MEAN = 4.0;
31
31
 
32
32
  /**
@@ -1,4 +1,4 @@
1
- /** Optional 1–5 dimension rating from API/UI payloads. */
1
+ /** Optional 1 to 5 dimension rating from API/UI payloads. */
2
2
  export type OptionalDimensionRating = number | null | undefined;
3
3
 
4
4
  export interface EventReviewDimensionsInput {
@@ -32,7 +32,7 @@ export interface ReviewDimensionAverages {
32
32
  const MIN_DIM = 1;
33
33
  const MAX_DIM = 5;
34
34
 
35
- /** Validate optional 1–5 dimension; returns null when omitted. */
35
+ /** Validate optional 1 to 5 dimension; returns null when omitted. */
36
36
  export function parseOptionalDimensionRating(
37
37
  value: OptionalDimensionRating,
38
38
  fieldName: string
@@ -9,7 +9,7 @@ import {
9
9
 
10
10
  describe("defaultMaxBillableCents", () => {
11
11
  it("computes 1.5x of expectedAttendees * baseRateCents, rounded up to $10", () => {
12
- // 200 * $5 * 1.5 = $1500 — already a $10 multiple.
12
+ // 200 * $5 * 1.5 = $1500. Already a $10 multiple.
13
13
  expect(
14
14
  defaultMaxBillableCents({ expectedAttendees: 200, baseRateCents: 500 })
15
15
  ).toBe(150_000);
@@ -82,7 +82,7 @@ describe("defaultMaxBillableCents", () => {
82
82
  });
83
83
 
84
84
  it("respects a custom rounding granularity", () => {
85
- // 200 * 500 * 1.5 = 150,000 cents = $1,500 — already a $100 multiple.
85
+ // 200 * 500 * 1.5 = 150,000 cents = $1,500. Already a $100 multiple.
86
86
  expect(
87
87
  defaultMaxBillableCents({
88
88
  expectedAttendees: 200,
@@ -116,7 +116,7 @@ describe("defaultMaxBillableCents", () => {
116
116
 
117
117
  describe("defaultMaxBillableBashPoints", () => {
118
118
  it("computes the BP parallel of the USD cap, rounded up to nearest 100 BP", () => {
119
- // 100 * 50 * 1.5 = 7,500 — already a 100-multiple.
119
+ // 100 * 50 * 1.5 = 7,500. Already a 100-multiple.
120
120
  expect(
121
121
  defaultMaxBillableBashPoints({
122
122
  expectedAttendees: 100,
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Phase 3 of the unified-pricing roadmap — tests for the
2
+ * Phase 3 of the unified-pricing roadmap. Tests for the
3
3
  * - counting basis chooser,
4
4
  * - locked-models set / validator update,
5
5
  * - mixed USD + BashPoints settlement math,
@@ -330,7 +330,7 @@ describe("decideEventPromoterCancellation", () => {
330
330
  expect(result.refundCents).toBe(75_000);
331
331
  });
332
332
 
333
- it("host: NoRefund once the bash has started — settlement handles money", () => {
333
+ it("host: NoRefund once the bash has started. Settlement handles money", () => {
334
334
  const result = decideEventPromoterCancellation({
335
335
  who: "host",
336
336
  nowMs: now,