@bash-app/bash-common 30.219.0 → 30.220.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.
@@ -2,7 +2,7 @@
2
2
  * Tests for payment utility functions
3
3
  * Testing business logic without database dependencies
4
4
  */
5
- import { calculateDiscountFromPromoCode, convertCentsToDollars, convertDollarsToCents, calculateBashAppFee, calculateBashAppFeeWithMembershipDiscount, calculateStripeFee, calculateStripeProcessingFeeCents, calculateTotalPriceWithoutTax, calculateTotalBashPoints, calculateStripeDonationFee, calculateServiceFeeWithMembershipDiscount, } from "../paymentUtils.js";
5
+ import { calculateDiscountFromPromoCode, convertCentsToDollars, convertDollarsToCents, calculateBashAppFee, calculateBashAppFeeWithMembershipDiscount, calculateStripeFee, calculateStripeProcessingFeeCents, calculateTotalPriceWithoutTax, calculateTotalBashPoints, calculateStripeDonationFee, calculateServiceFeeWithMembershipDiscount, calculateBashPlatformFeeCents, splitBashPlatformFeeForTicketCheckout, computeTicketApplicationFeeAmountCents, userHasActiveBashPass, } from "../paymentUtils.js";
6
6
  describe("PaymentUtils - Core Functions", () => {
7
7
  describe("Currency Conversion", () => {
8
8
  test("convertCentsToDollars", () => {
@@ -69,6 +69,59 @@ describe("PaymentUtils - Core Functions", () => {
69
69
  test("calculateStripeFee (dollars) aligns with calculateStripeProcessingFeeCents", () => {
70
70
  expect(calculateStripeFee(100)).toBe(3.2);
71
71
  });
72
+ test("calculateBashPlatformFeeCents floors 3% of gross", () => {
73
+ expect(calculateBashPlatformFeeCents(10000, 0.03)).toBe(300);
74
+ expect(calculateBashPlatformFeeCents(100, 0.03)).toBe(3);
75
+ expect(calculateBashPlatformFeeCents(0, 0.03)).toBe(0);
76
+ });
77
+ test("splitBashPlatformFeeForTicketCheckout respects feeHandling and BashPass", () => {
78
+ const base = {
79
+ grossCents: 10000,
80
+ platformFeeEnabled: true,
81
+ platformFeeRate: 0.03,
82
+ };
83
+ expect(splitBashPlatformFeeForTicketCheckout({ ...base, feeHandling: "HostAbsorbs", bashPassWaivesGuestFee: false })).toEqual({
84
+ totalPlatformCents: 300,
85
+ guestPlatformLineCents: 0,
86
+ });
87
+ expect(splitBashPlatformFeeForTicketCheckout({ ...base, feeHandling: "GuestPays", bashPassWaivesGuestFee: false })).toEqual({
88
+ totalPlatformCents: 300,
89
+ guestPlatformLineCents: 300,
90
+ });
91
+ expect(splitBashPlatformFeeForTicketCheckout({ ...base, feeHandling: "Split", bashPassWaivesGuestFee: false })).toEqual({
92
+ totalPlatformCents: 300,
93
+ guestPlatformLineCents: 150,
94
+ });
95
+ expect(splitBashPlatformFeeForTicketCheckout({ ...base, feeHandling: "GuestPays", bashPassWaivesGuestFee: true })).toEqual({
96
+ totalPlatformCents: 300,
97
+ guestPlatformLineCents: 0,
98
+ });
99
+ });
100
+ test("computeTicketApplicationFeeAmountCents sums Stripe + Bash platform into application fee", () => {
101
+ const r = computeTicketApplicationFeeAmountCents({
102
+ discountedSubtotalCents: 10000,
103
+ platformFeeEnabled: true,
104
+ platformFeeRate: 0.03,
105
+ feeHandling: "HostAbsorbs",
106
+ bashPassWaivesGuestFee: false,
107
+ });
108
+ expect(r.totalChargedCents).toBe(10000);
109
+ expect(r.bashPlatformTotalCents).toBe(300);
110
+ expect(r.stripeProcessingCents).toBe(calculateStripeProcessingFeeCents(10000));
111
+ expect(r.applicationFeeAmountCents).toBe(r.stripeProcessingCents + 300);
112
+ });
113
+ test("userHasActiveBashPass", () => {
114
+ expect(userHasActiveBashPass({ bashPassStripeSubscriptionId: null, bashPassCurrentPeriodEnd: null })).toBe(false);
115
+ expect(userHasActiveBashPass({ bashPassStripeSubscriptionId: "sub_1", bashPassCurrentPeriodEnd: null })).toBe(true);
116
+ expect(userHasActiveBashPass({
117
+ bashPassStripeSubscriptionId: "sub_1",
118
+ bashPassCurrentPeriodEnd: new Date(Date.now() + 86400000),
119
+ })).toBe(true);
120
+ expect(userHasActiveBashPass({
121
+ bashPassStripeSubscriptionId: "sub_1",
122
+ bashPassCurrentPeriodEnd: new Date(Date.now() - 86400000),
123
+ })).toBe(false);
124
+ });
72
125
  });
73
126
  describe("Ticket total price (USD)", () => {
74
127
  test("calculateTotalPriceWithoutTax sums USD tiers only", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"paymentUtils.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/paymentUtils.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paymentUtils.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/paymentUtils.test.ts"],"names":[],"mappings":"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"}
@@ -69,6 +69,43 @@ export declare function calculateServiceFeeWithMembershipDiscount(total: number,
69
69
  * @returns Platform fee in cents, respecting both percentage discount and cap
70
70
  */
71
71
  export declare function calculatePartnerFeeWithMembershipDiscount(total: number, membershipTier?: MembershipTier | null): number;
72
+ /**
73
+ * Bash **platform** take rate on ticket gross (e.g. 3%). Separate from Stripe card processing pass-through.
74
+ */
75
+ export declare function calculateBashPlatformFeeCents(grossCents: number, rate: number): number;
76
+ export type BashPlatformTicketFeeSplit = {
77
+ totalPlatformCents: number;
78
+ /** Shown as a separate checkout line when greater than 0 */
79
+ guestPlatformLineCents: number;
80
+ };
81
+ /**
82
+ * Split the Bash platform fee between guest line items vs host absorption using `feeHandling`.
83
+ * BashPass waives the **guest-visible** portion only; the host still funds the full platform fee when the guest pays nothing extra.
84
+ */
85
+ export declare function splitBashPlatformFeeForTicketCheckout(args: {
86
+ grossCents: number;
87
+ platformFeeEnabled: boolean;
88
+ platformFeeRate: number;
89
+ feeHandling: string | null | undefined;
90
+ bashPassWaivesGuestFee: boolean;
91
+ }): BashPlatformTicketFeeSplit;
92
+ export declare function computeTicketApplicationFeeAmountCents(args: {
93
+ discountedSubtotalCents: number;
94
+ platformFeeEnabled: boolean;
95
+ platformFeeRate: number;
96
+ feeHandling: string | null | undefined;
97
+ bashPassWaivesGuestFee: boolean;
98
+ }): {
99
+ totalChargedCents: number;
100
+ stripeProcessingCents: number;
101
+ bashPlatformTotalCents: number;
102
+ applicationFeeAmountCents: number;
103
+ guestPlatformLineCents: number;
104
+ };
105
+ export declare function userHasActiveBashPass(user: {
106
+ bashPassStripeSubscriptionId: string | null | undefined;
107
+ bashPassCurrentPeriodEnd: Date | null | undefined;
108
+ }): boolean;
72
109
  export type VenuePricingPlanData = {
73
110
  name: string;
74
111
  description: string;
@@ -1 +1 @@
1
- {"version":3,"file":"paymentUtils.d.ts","sourceRoot":"","sources":["../../src/utils/paymentUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,IAAI,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAO5H,OAAO,EACL,sBAAsB,EAEvB,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,kBAAkB,GAAG,SAAS,GACxC,MAAM,CAeR;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,GAChD,MAAM,CAYR;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,GAChD,MAAM,CAYR;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAC/B,MAAM,CAKR;AACD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAC/B,MAAM,CAKR;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAI7E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,GACrC,MAAM,CAkBR;AAED;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,GACrC,MAAM,CAeR;AAED;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,GACrC,MAAM,CAeR;AAMD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;KAC/B,GAAG,IAAI,sBAAsB,GAAG,oBAAoB;CACtD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,mBAe5B,CAAC"}
1
+ {"version":3,"file":"paymentUtils.d.ts","sourceRoot":"","sources":["../../src/utils/paymentUtils.ts"],"names":[],"mappings":"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"}
@@ -165,6 +165,67 @@ export function calculatePartnerFeeWithMembershipDiscount(total, membershipTier)
165
165
  // Round to 2 decimal places (cents precision)
166
166
  return parseFloat(calculatedFee.toFixed(2));
167
167
  }
168
+ /**
169
+ * Bash **platform** take rate on ticket gross (e.g. 3%). Separate from Stripe card processing pass-through.
170
+ */
171
+ export function calculateBashPlatformFeeCents(grossCents, rate) {
172
+ if (grossCents <= 0 || rate <= 0)
173
+ return 0;
174
+ return Math.floor(grossCents * rate);
175
+ }
176
+ /**
177
+ * Split the Bash platform fee between guest line items vs host absorption using `feeHandling`.
178
+ * BashPass waives the **guest-visible** portion only; the host still funds the full platform fee when the guest pays nothing extra.
179
+ */
180
+ export function splitBashPlatformFeeForTicketCheckout(args) {
181
+ const { grossCents, platformFeeEnabled, platformFeeRate, feeHandling, bashPassWaivesGuestFee } = args;
182
+ const total = platformFeeEnabled
183
+ ? calculateBashPlatformFeeCents(grossCents, platformFeeRate)
184
+ : 0;
185
+ if (total <= 0) {
186
+ return { totalPlatformCents: 0, guestPlatformLineCents: 0 };
187
+ }
188
+ const mode = feeHandling ?? "HostAbsorbs";
189
+ let guestLine = 0;
190
+ if (mode === "GuestPays") {
191
+ guestLine = total;
192
+ }
193
+ else if (mode === "Split") {
194
+ guestLine = Math.floor(total / 2);
195
+ }
196
+ if (bashPassWaivesGuestFee && guestLine > 0) {
197
+ guestLine = 0;
198
+ }
199
+ return { totalPlatformCents: total, guestPlatformLineCents: guestLine };
200
+ }
201
+ export function computeTicketApplicationFeeAmountCents(args) {
202
+ const split = splitBashPlatformFeeForTicketCheckout({
203
+ grossCents: args.discountedSubtotalCents,
204
+ platformFeeEnabled: args.platformFeeEnabled,
205
+ platformFeeRate: args.platformFeeRate,
206
+ feeHandling: args.feeHandling,
207
+ bashPassWaivesGuestFee: args.bashPassWaivesGuestFee,
208
+ });
209
+ const guestPlatformLineCents = split.guestPlatformLineCents;
210
+ const bashPlatformTotalCents = split.totalPlatformCents;
211
+ const totalChargedCents = args.discountedSubtotalCents + guestPlatformLineCents;
212
+ const stripeProcessingCents = calculateStripeProcessingFeeCents(totalChargedCents);
213
+ const applicationFeeAmountCents = stripeProcessingCents + bashPlatformTotalCents;
214
+ return {
215
+ totalChargedCents,
216
+ stripeProcessingCents,
217
+ bashPlatformTotalCents,
218
+ applicationFeeAmountCents,
219
+ guestPlatformLineCents,
220
+ };
221
+ }
222
+ export function userHasActiveBashPass(user) {
223
+ if (!user.bashPassStripeSubscriptionId)
224
+ return false;
225
+ if (!user.bashPassCurrentPeriodEnd)
226
+ return true;
227
+ return user.bashPassCurrentPeriodEnd > new Date();
228
+ }
168
229
  /**
169
230
  * Venue pricing plan options
170
231
  * Moved from venueUtils.ts for centralization
@@ -1 +1 @@
1
- {"version":3,"file":"paymentUtils.js","sourceRoot":"","sources":["../../src/utils/paymentUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,gBAAgB,IAAI,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC5H,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAEL,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,cAAsB,EACtB,SAAyC;IAEzC,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,SAAS,CAAC,qBAAqB,EAAE,CAAC;YACpC,MAAM,iBAAiB,GAAG,qBAAqB,CAC7C,SAAS,CAAC,qBAAqB,CAChC,CAAC;YACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,0CAA0C;QACnF,CAAC;QACD,IAAI,SAAS,CAAC,wBAAwB,EAAE,CAAC;YACvC,MAAM,iBAAiB,GACrB,cAAc,GAAG,CAAC,SAAS,CAAC,wBAAwB,GAAG,GAAG,CAAC,CAAC;YAC9D,OAAO,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,CAAC,0CAA0C;QAChG,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,6BAA6B,CAC3C,WAAyB,EACzB,UAAiD;IAEjD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,WAAW,CAAC,OAAO,CAAC,CAAC,IAAgB,EAAE,EAAE;QACvC,qEAAqE;QACrE,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;YACtC,MAAM,oBAAoB,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrD,oBAAoB,EAAE,OAAO,CAAC,CAAC,UAAkC,EAAE,EAAE;gBACnE,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,UAAU,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;YAC1D,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CACtC,WAAyB,EACzB,UAAiD;IAEjD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,WAAW,CAAC,OAAO,CAAC,CAAC,IAAgB,EAAE,EAAE;QACvC,mCAAmC;QACnC,IAAI,IAAI,CAAC,WAAW,KAAK,YAAY,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YAC9D,MAAM,oBAAoB,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACrD,oBAAoB,EAAE,OAAO,CAAC,CAAC,UAAkC,EAAE,EAAE;gBACnE,KAAK,IAAI,IAAI,CAAC,eAAgB,GAAG,CAAC,UAAU,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC;YACrE,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAgC;IAEhC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,KAAK,GAAG,6BAA6B,CAAC;AAC/C,CAAC;AACD,MAAM,UAAU,qBAAqB,CACnC,KAAgC;IAEhC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,CAAC;IACX,CAAC;IACD,OAAO,KAAK,GAAG,6BAA6B,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,IAAI,aAAa,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,6BAA6B,CAAC,CAAC;IACxE,OAAO,qBAAqB,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iCAAiC,CAAC,WAAmB;IACnE,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC/B,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,qBAAqB,CAAC;IACtD,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,UAAU,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,UAAU,CAAC,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,WAAmB;IAC5D,OAAO,iCAAiC,CAAC,WAAW,CAAC,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yCAAyC,CACvD,KAAa,EACb,cAAsC;IAEtC,kDAAkD;IAClD,MAAM,IAAI,GAAG,cAAc,IAAI,OAAO,CAAC;IAEvC,+BAA+B;IAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAErC,oDAAoD;IACpD,IAAI,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;IAE3C,oBAAoB;IACpB,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAE7D,oCAAoC;IACpC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEzD,8CAA8C;IAC9C,OAAO,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,yCAAyC,CACvD,KAAa,EACb,cAAsC;IAEtC,kDAAkD;IAClD,MAAM,IAAI,GAAG,cAAc,IAAI,OAAO,CAAC;IAEvC,+BAA+B;IAC/B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE1C,iDAAiD;IACjD,IAAI,aAAa,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;IAEjE,oCAAoC;IACpC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEzD,8CAA8C;IAC9C,OAAO,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,yCAAyC,CACvD,KAAa,EACb,cAAsC;IAEtC,kDAAkD;IAClD,MAAM,IAAI,GAAG,cAAc,IAAI,OAAO,CAAC;IAEvC,+BAA+B;IAC/B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAE1C,oDAAoD;IACpD,IAAI,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;IAE3C,oCAAoC;IACpC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEzD,8CAA8C;IAC9C,OAAO,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC;AAkBD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAwB;IAC1D,CAAC,sBAAsB,CAAC,UAAU,CAAC,EAAE;QACnC,IAAI,EAAE,iBAAiB;QACvB,WAAW,EAAE,mCAAmC;QAChD,aAAa,EAAE,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,iCAAiC;QACpF,UAAU,EAAE,GAAG;QACf,OAAO,EAAE,GAAG;KACb;IACD,CAAC,sBAAsB,CAAC,YAAY,CAAC,EAAE;QACrC,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,+CAA+C;QAC5D,aAAa,EAAE,GAAG;QAClB,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,GAAG;KACb;CACO,CAAC"}
1
+ {"version":3,"file":"paymentUtils.js","sourceRoot":"","sources":["../../src/utils/paymentUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bash-app/bash-common",
3
- "version": "30.219.0",
3
+ "version": "30.220.0",
4
4
  "description": "Common data and scripts to use on the frontend and backend",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -28,7 +28,6 @@
28
28
  "@types/qrcode": "^1.5.5",
29
29
  "lodash-es": "^4.17.21",
30
30
  "mixpanel-browser": "^2.75.0",
31
- "npm": "^11.11.0",
32
31
  "qrcode": "^1.5.3",
33
32
  "slugify": "^1.6.6"
34
33
  },
@@ -49,6 +48,7 @@
49
48
  "@types/react": "^18.3.2",
50
49
  "@types/shelljs": "^0.10.0",
51
50
  "jest": "^29.7.0",
51
+ "npm": "^11.11.0",
52
52
  "shelljs": "^0.10.0",
53
53
  "stripe": "^20.1.2",
54
54
  "ts-jest": "^29.1.1",
@@ -492,6 +492,7 @@ model Promoter {
492
492
  createdAt DateTime @default(now())
493
493
  updatedAt DateTime @updatedAt
494
494
  userId String? // null until invited promoter signs up (do not use host id as placeholder)
495
+ invitedEmail String? // normalized invitee email for reconciliation when userId is null
495
496
  promoCodes BashEventPromoCode[]
496
497
  promoterUser User? @relation(fields: [userId], references: [id])
497
498
 
@@ -658,8 +659,20 @@ model BashEvent {
658
659
  donationDetails String?
659
660
  absorbDonationFees Boolean @default(false)
660
661
  absorbTicketFees Boolean @default(false)
661
- // GuestPays / Split preserved for possible future use; checkout always uses HostAbsorbs (no buyer-facing processing fee).
662
+ /// When true, attendees may request a refund from the app/email (host approves in Tickets Refunds). When false, self-serve refund CTAs are hidden.
663
+ allowAttendeeRefundRequests Boolean @default(true)
664
+ // GuestPays / Split: Stripe processing + Bash platform fee presentation (see platformFeeEnabled).
662
665
  feeHandling String @default("HostAbsorbs") // "GuestPays" | "HostAbsorbs" | "Split"
666
+ /// When true, Bash charges platformFeeRate on ticket gross (e.g. 3%) in addition to Stripe processing pass-through.
667
+ platformFeeEnabled Boolean @default(false)
668
+ /// Bash platform take rate on ticket gross (e.g. 0.03 = 3%). Ignored when platformFeeEnabled is false.
669
+ platformFeeRate Float @default(0.03)
670
+ /// Optional: attendees can tag which act they came to see; drives attribution reports and future payouts.
671
+ artistAttributionEnabled Boolean @default(false)
672
+ /// "percentage" | "flat" — how artistPayoutRate is interpreted for suggested splits (display/export).
673
+ artistPayoutMode String?
674
+ /// Percentage of door (0–100) or flat cents per ticket depending on artistPayoutMode.
675
+ artistPayoutRate Float?
663
676
  topPromoterPrize String? // Optional prize label: "Free table for your crew"
664
677
  promoterLeaderboardIsPublic Boolean @default(false) // Host opts in to public leaderboard
665
678
  showAttendees Boolean @default(true)
@@ -815,12 +828,59 @@ model BashEvent {
815
828
  eventGroups EventGroup[]
816
829
  groupUnlockOffers GroupUnlockOffer[]
817
830
 
831
+ bashEventArtists BashEventArtist[]
832
+
818
833
  @@index([templateId])
819
834
  @@index([parentEventId])
820
835
  @@index([organizationId])
821
836
  @@index([eventSeriesId])
822
837
  }
823
838
 
839
+ /// Lineup / attribution roster for an event (optional act list for checkout tagging).
840
+ model BashEventArtist {
841
+ id String @id @default(cuid())
842
+ bashEventId String
843
+ bashEvent BashEvent @relation(fields: [bashEventId], references: [id], onDelete: Cascade)
844
+ name String
845
+ serviceId String?
846
+ service Service? @relation(fields: [serviceId], references: [id], onDelete: SetNull)
847
+ sortOrder Int @default(0)
848
+ createdAt DateTime @default(now())
849
+
850
+ tickets Ticket[]
851
+
852
+ @@index([bashEventId])
853
+ @@index([serviceId])
854
+ }
855
+
856
+ enum BashCreativeStatus {
857
+ Pending
858
+ InReview
859
+ Editing
860
+ RevisionRequested
861
+ Delivered
862
+ }
863
+
864
+ /// Service provider promo video waitlist (Bash Creative).
865
+ model BashCreativeSubmission {
866
+ id String @id @default(cuid())
867
+ serviceId String
868
+ service Service @relation(fields: [serviceId], references: [id], onDelete: Cascade)
869
+ submittedById String?
870
+ submittedBy User? @relation(fields: [submittedById], references: [id], onDelete: SetNull)
871
+ status BashCreativeStatus @default(Pending)
872
+ scriptNotes String? @db.Text
873
+ footageUrl String?
874
+ deliverableUrl String?
875
+ requestedAt DateTime @default(now())
876
+ deliveredAt DateTime?
877
+ updatedAt DateTime @updatedAt
878
+
879
+ @@index([serviceId])
880
+ @@index([status])
881
+ @@index([submittedById])
882
+ }
883
+
824
884
  enum SuggestionType {
825
885
  Included
826
886
  Allowed
@@ -1346,6 +1406,8 @@ model Ticket {
1346
1406
  utmCampaign String?
1347
1407
 
1348
1408
  bashEvent BashEvent @relation(fields: [bashEventId], references: [id])
1409
+ attributedArtistId String?
1410
+ attributedArtist BashEventArtist? @relation(fields: [attributedArtistId], references: [id], onDelete: SetNull)
1349
1411
  checkout Checkout? @relation(fields: [checkoutId], references: [id])
1350
1412
  forUser User? @relation("TicketsISent", fields: [forUserId], references: [id])
1351
1413
  invitation Invitation? @relation("TicketsForInvitation", fields: [invitationId], references: [id])
@@ -1360,6 +1422,7 @@ model Ticket {
1360
1422
 
1361
1423
  @@index([bashEventId])
1362
1424
  @@index([waitlistUserId])
1425
+ @@index([attributedArtistId])
1363
1426
  }
1364
1427
 
1365
1428
  model TicketTransfer {
@@ -1851,6 +1914,9 @@ model User {
1851
1914
  membershipLastBilledAt DateTime?
1852
1915
  membershipFeaturedEventsUsed Int @default(0)
1853
1916
  membershipStripeSubscriptionId String? @unique
1917
+ /// Optional consumer BashPass subscription (waives guest platform fee on tickets; monthly BashPoints).
1918
+ bashPassStripeSubscriptionId String? @unique
1919
+ bashPassCurrentPeriodEnd DateTime?
1854
1920
  isVerified Boolean @default(false)
1855
1921
  verificationMethod String?
1856
1922
  verifiedAt DateTime?
@@ -1981,6 +2047,7 @@ model User {
1981
2047
  ticketsISent Ticket[] @relation("TicketsISent")
1982
2048
  ticketsIOwn Ticket[] @relation("TicketsIOwn")
1983
2049
  bashEventDonations BashEventDonation[]
2050
+ bashCreativeSubmissions BashCreativeSubmission[]
1984
2051
  ticketsOnWaitlist Ticket[] @relation("TicketsOnWaitlist")
1985
2052
  transfersFrom TicketTransfer[] @relation("TransfersFrom")
1986
2053
  transfersTo TicketTransfer[] @relation("TransfersTo")
@@ -2159,6 +2226,10 @@ model UserPreferences {
2159
2226
  bashFeedDefaultTab String @default("all") // "all", "upcoming", "live", "past", "saved", "my-posts"
2160
2227
  bashFeedDefaultSort String @default("chronological") // "for_you", "chronological", "trending", etc.
2161
2228
  bashFeedFilters Json? // Saved filter preferences as JSON
2229
+ /// Services discovery: keyed by service type tab, e.g. { "Entertainment": { ... } }
2230
+ serviceFilterSettings Json?
2231
+ /// Venue discovery filter bar (same pattern as serviceFilterSettings)
2232
+ venueFilterSettings Json?
2162
2233
 
2163
2234
  createdAt DateTime @default(now())
2164
2235
  updatedAt DateTime @updatedAt
@@ -2167,6 +2238,8 @@ model UserPreferences {
2167
2238
  allowTagging Boolean @default(true)
2168
2239
  showActivityStatus Boolean @default(true)
2169
2240
  hiddenBashIds String[] @default([])
2241
+ /// Stat card keys hidden on public profile (e.g. followersCount, servicesCount)
2242
+ hiddenProfileStatKeys String[] @default([])
2170
2243
  hideActivitySection Boolean @default(false)
2171
2244
  allowLocationSharing Boolean @default(false)
2172
2245
  defaultLandingPage String @default("dashboard")
@@ -2350,6 +2423,16 @@ model BiometricCredential {
2350
2423
  @@index([usedForVerification])
2351
2424
  }
2352
2425
 
2426
+ /// Ephemeral WebAuthn authentication challenges (server-issued; consumed after verify)
2427
+ model WebAuthnChallenge {
2428
+ id String @id @default(cuid())
2429
+ challenge String @unique
2430
+ expiresAt DateTime
2431
+ createdAt DateTime @default(now())
2432
+
2433
+ @@index([expiresAt])
2434
+ }
2435
+
2353
2436
  model Contact {
2354
2437
  id String @id @default(cuid())
2355
2438
  contactOwnerId String
@@ -2534,11 +2617,16 @@ model Service {
2534
2617
  serviceListingStripeSubscriptionId String?
2535
2618
  acceptsBashPoints Boolean @default(true) // NEW: Allow BashPoints payments
2536
2619
  isVerified Boolean @default(false) // Service owner verified
2620
+ /// Paid discovery: featured placement on Services discovery (admin or tier).
2621
+ isFeaturedService Boolean @default(false)
2622
+ featuredServiceUntil DateTime?
2537
2623
  isLicensed Boolean @default(false) // Has required licenses
2538
2624
  verifiedAt DateTime? // When verification was approved
2539
2625
  licenseNumber String? // License/registration number
2540
2626
  certifications String[] @default([]) // Array of certification names
2541
2627
  bashFeedPosts BashFeedPost[]
2628
+ bashEventArtists BashEventArtist[]
2629
+ bashCreativeSubmissions BashCreativeSubmission[]
2542
2630
  associatedServicesReferencingMe AssociatedService[]
2543
2631
  exhibitorBookingRequests ExhibitorBookingRequest[] @relation("ExhibitorBookingService")
2544
2632
  notification Notification[]
@@ -3505,6 +3593,8 @@ model ServiceBookingDay {
3505
3593
  serviceBookingRequestId String?
3506
3594
  startDate DateTime
3507
3595
  endDate DateTime
3596
+ /// Optional arrival/setup time label (e.g. "5:00 PM" or "2 hours before event"); used in reminder emails
3597
+ setupTime String?
3508
3598
  subtotalBeforeTaxesCents Int @default(0)
3509
3599
  totalBeforeTaxesCents Int
3510
3600
  addOns ServiceBookingAddOn[]
@@ -7512,3 +7602,67 @@ model GroupUnlock {
7512
7602
  @@unique([offerId, groupId])
7513
7603
  @@index([groupId])
7514
7604
  }
7605
+
7606
+ // ─── BashStore + Partner Ads ────────────────────────────────────────────────
7607
+
7608
+ enum PartnerTier {
7609
+ Affiliate
7610
+ Standard
7611
+ Featured
7612
+ }
7613
+
7614
+ model PartnerBrand {
7615
+ id String @id @default(cuid())
7616
+ name String
7617
+ logoUrl String?
7618
+ websiteUrl String?
7619
+ description String? @db.Text
7620
+ tier PartnerTier @default(Standard)
7621
+ isActive Boolean @default(true)
7622
+ affiliateBaseUrl String?
7623
+ listingFeeMonthly Int? // cents; null = affiliate-only
7624
+ createdAt DateTime @default(now())
7625
+ products PartnerProduct[]
7626
+ adSlots PartnerAdSlot[]
7627
+
7628
+ @@index([isActive, tier])
7629
+ }
7630
+
7631
+ model PartnerProduct {
7632
+ id String @id @default(cuid())
7633
+ brandId String
7634
+ brand PartnerBrand @relation(fields: [brandId], references: [id], onDelete: Cascade)
7635
+ name String
7636
+ description String? @db.Text
7637
+ imageUrl String?
7638
+ priceSummary String?
7639
+ affiliateUrl String
7640
+ categories String[]
7641
+ isActive Boolean @default(true)
7642
+ sortOrder Int @default(0)
7643
+ impressions Int @default(0)
7644
+ clicks Int @default(0)
7645
+ createdAt DateTime @default(now())
7646
+ adSlots PartnerAdSlot[]
7647
+
7648
+ @@index([brandId, isActive])
7649
+ }
7650
+
7651
+ model PartnerAdSlot {
7652
+ id String @id @default(cuid())
7653
+ brandId String
7654
+ productId String?
7655
+ wizardStep String? // e.g. "what_included", "how_services_dj"
7656
+ triggerTags String[]
7657
+ impressions Int @default(0)
7658
+ clicks Int @default(0)
7659
+ isActive Boolean @default(true)
7660
+ startsAt DateTime?
7661
+ endsAt DateTime?
7662
+ createdAt DateTime @default(now())
7663
+ brand PartnerBrand @relation(fields: [brandId], references: [id], onDelete: Cascade)
7664
+ product PartnerProduct? @relation(fields: [productId], references: [id], onDelete: SetNull)
7665
+
7666
+ @@index([isActive, wizardStep])
7667
+ @@index([brandId])
7668
+ }
@@ -15,7 +15,12 @@ import {
15
15
  YearsOfExperience,
16
16
  } from "@prisma/client";
17
17
  import type { BashEventDressTags, BashEventVibeTags } from "@prisma/client";
18
- import { CheckoutExt, PublicUser, ServiceBookingExt } from "./extendedSchemas.js";
18
+ import {
19
+ CheckoutExt,
20
+ PublicUser,
21
+ ServiceBookingExt,
22
+ type UserExt,
23
+ } from "./extendedSchemas.js";
19
24
  import { LuxonDateRange } from "./utils/luxonUtils.js";
20
25
  import { ApiServiceCantBookReason } from "./utils/service/apiServiceBookingApiUtils.js";
21
26
  import { ServiceAttendeeOption } from "./utils/service/attendeeOptionUtils.js";
@@ -318,7 +323,7 @@ export type DateTimeArgType = Date | string | undefined | null;
318
323
  export type RequiredStripeInfoMissingErrorDataType = {
319
324
  [k in keyof User]?: { type: string; label: string };
320
325
  };
321
- export type ContactOrUser = Contact | PublicUser;
326
+ export type ContactOrUser = Contact | PublicUser | UserExt;
322
327
 
323
328
  export type ValueOf<T> = T[keyof T];
324
329
 
@@ -2,6 +2,7 @@ import {
2
2
  AmountOfGuests,
3
3
  AssociatedBash,
4
4
  AssociatedService,
5
+ BashAvailability,
5
6
  BashComment,
6
7
  BashEvent,
7
8
  BashEventSuggestion,
@@ -791,6 +792,13 @@ export const SERVICE_BOOKING_PUBLIC_DATA_TO_INCLUDE = {
791
792
  },
792
793
  } satisfies Prisma.ServiceBookingInclude;
793
794
 
795
+ /** Minimal service shape returned by profile booking list APIs (`serviceName` is the DB column). */
796
+ export type BookingServiceRef = {
797
+ id: string;
798
+ serviceName: string;
799
+ serviceType: string;
800
+ };
801
+
794
802
  export const SERVICE_BOOKING_PRIVATE_DATA_TO_INCLUDE = {
795
803
  ...SERVICE_BOOKING_PUBLIC_DATA_TO_INCLUDE,
796
804
  checkout: {
@@ -1189,6 +1197,15 @@ export interface UserExt extends User {
1189
1197
  stats?: UserStats | null;
1190
1198
  demerits?: Demerit[] | null;
1191
1199
 
1200
+ /**
1201
+ * Computed by public user API when `showBirthdayOnProfile` is true (not a DB column).
1202
+ * Example: "April 3".
1203
+ */
1204
+ birthdayDisplay?: string;
1205
+
1206
+ /** Included when the user query selects the `UserAvailability` relation (not on default Prisma `User`). */
1207
+ bashAvailability?: BashAvailability | null;
1208
+
1192
1209
  // Do not include in fetch as there could be thousands of these
1193
1210
  userSubscription?: UserSubscriptionExt | null;
1194
1211
  associatedBashes?: AssociatedBash[] | null;
package/src/index.ts CHANGED
@@ -4,6 +4,7 @@ export * from "./utmAttribution.js";
4
4
  export * from "./venueLoyaltyRedemption.js";
5
5
  export * from "./stripeListingSubscriptionMessages.js";
6
6
  export * from "./extendedSchemas.js";
7
+ export * from "./partnerStoreTypes.js";
7
8
  export * from "./bashFeedTypes.js";
8
9
  export * from "./membershipDefinitions.js";
9
10
 
@@ -133,6 +134,7 @@ export {
133
134
  PrivateChefFormat,
134
135
  PrizePaymentMethod,
135
136
  PrizePaymentStatus,
137
+ PartnerTier,
136
138
  PrizeType,
137
139
  ProjectorSetupFormat,
138
140
  PromoterFormat,
@@ -224,6 +226,9 @@ export type {
224
226
  Link,
225
227
  Media,
226
228
  Organization,
229
+ PartnerAdSlot,
230
+ PartnerBrand,
231
+ PartnerProduct,
227
232
  Recurrence,
228
233
  Service,
229
234
  ServiceAddon,
@@ -0,0 +1,36 @@
1
+ import type { PartnerTier } from "@prisma/client";
2
+
3
+ /** Product row returned by BashStore / wizard suggestion APIs (no internal counters). */
4
+ export type PartnerProductPublic = {
5
+ id: string;
6
+ brandId: string;
7
+ name: string;
8
+ description: string | null;
9
+ imageUrl: string | null;
10
+ priceSummary: string | null;
11
+ affiliateUrl: string;
12
+ categories: string[];
13
+ sortOrder: number;
14
+ };
15
+
16
+ export type PartnerBrandSummary = {
17
+ id: string;
18
+ name: string;
19
+ logoUrl: string | null;
20
+ websiteUrl: string | null;
21
+ description: string | null;
22
+ tier: PartnerTier;
23
+ };
24
+
25
+ /** GET /api/partner/store */
26
+ export type PartnerStoreResponse = {
27
+ featured: (PartnerBrandSummary & { products: PartnerProductPublic[] }) | null;
28
+ brands: (PartnerBrandSummary & { products: PartnerProductPublic[] })[];
29
+ };
30
+
31
+ /** GET /api/partner/suggestions — at most one suggestion */
32
+ export type PartnerSuggestionResponse = {
33
+ slotId: string;
34
+ product: PartnerProductPublic;
35
+ brand: PartnerBrandSummary;
36
+ };