@bash-app/bash-common 30.396.0 → 30.399.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 (41) hide show
  1. package/dist/__tests__/agePolicy.test.js +18 -1
  2. package/dist/__tests__/agePolicy.test.js.map +1 -1
  3. package/dist/__tests__/entertainmentNotableVenues.test.js +8 -1
  4. package/dist/__tests__/entertainmentNotableVenues.test.js.map +1 -1
  5. package/dist/definitions.d.ts +14 -0
  6. package/dist/definitions.d.ts.map +1 -1
  7. package/dist/definitions.js +11 -0
  8. package/dist/definitions.js.map +1 -1
  9. package/dist/extendedSchemas.d.ts +2 -0
  10. package/dist/extendedSchemas.d.ts.map +1 -1
  11. package/dist/extendedSchemas.js +2 -0
  12. package/dist/extendedSchemas.js.map +1 -1
  13. package/dist/seatMapBestAvailable.d.ts.map +1 -1
  14. package/dist/seatMapBestAvailable.js +7 -3
  15. package/dist/seatMapBestAvailable.js.map +1 -1
  16. package/dist/utils/__tests__/blogUtils.test.js +18 -4
  17. package/dist/utils/__tests__/blogUtils.test.js.map +1 -1
  18. package/dist/utils/__tests__/reputationUtils.serviceListing.test.js +3 -3
  19. package/dist/utils/__tests__/reputationUtils.serviceListing.test.js.map +1 -1
  20. package/dist/utils/blogUtils.d.ts +2 -0
  21. package/dist/utils/blogUtils.d.ts.map +1 -1
  22. package/dist/utils/blogUtils.js +11 -4
  23. package/dist/utils/blogUtils.js.map +1 -1
  24. package/dist/utils/eventTimezoneIana.d.ts.map +1 -1
  25. package/dist/utils/eventTimezoneIana.js +3 -0
  26. package/dist/utils/eventTimezoneIana.js.map +1 -1
  27. package/dist/utils/service/foodAndBeverageQuote.d.ts.map +1 -1
  28. package/dist/utils/service/foodAndBeverageQuote.js +2 -1
  29. package/dist/utils/service/foodAndBeverageQuote.js.map +1 -1
  30. package/package.json +3 -3
  31. package/prisma/schema.prisma +5 -0
  32. package/src/__tests__/agePolicy.test.ts +21 -0
  33. package/src/__tests__/entertainmentNotableVenues.test.ts +8 -1
  34. package/src/definitions.ts +23 -0
  35. package/src/extendedSchemas.ts +2 -0
  36. package/src/seatMapBestAvailable.ts +8 -3
  37. package/src/utils/__tests__/blogUtils.test.ts +20 -3
  38. package/src/utils/__tests__/reputationUtils.serviceListing.test.ts +3 -3
  39. package/src/utils/blogUtils.ts +14 -5
  40. package/src/utils/eventTimezoneIana.ts +4 -1
  41. package/src/utils/service/foodAndBeverageQuote.ts +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"foodAndBeverageQuote.d.ts","sourceRoot":"","sources":["../../../src/utils/service/foodAndBeverageQuote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"foodAndBeverageQuote.d.ts","sourceRoot":"","sources":["../../../src/utils/service/foodAndBeverageQuote.ts"],"names":[],"mappings":"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"}
@@ -235,10 +235,11 @@ export function foodAndBeverageQuoteCents({ baseRateCents, headcount, minimumQua
235
235
  * Human-readable summary string, e.g. "$18 / guest · min 25 guests".
236
236
  */
237
237
  export function foodAndBeverageRateSummary(baseRateCents, minimumQuantity) {
238
+ const hasCents = baseRateCents % 100 !== 0;
238
239
  const formatted = new Intl.NumberFormat("en-US", {
239
240
  style: "currency",
240
241
  currency: "USD",
241
- minimumFractionDigits: 0,
242
+ minimumFractionDigits: hasCents ? 2 : 0,
242
243
  maximumFractionDigits: 2,
243
244
  }).format(baseRateCents / 100);
244
245
  const perGuest = `${formatted} / guest`;
@@ -1 +1 @@
1
- {"version":3,"file":"foodAndBeverageQuote.js","sourceRoot":"","sources":["../../../src/utils/service/foodAndBeverageQuote.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"foodAndBeverageQuote.js","sourceRoot":"","sources":["../../../src/utils/service/foodAndBeverageQuote.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.396.0",
3
+ "version": "30.399.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",
@@ -19,8 +19,8 @@
19
19
  "test": "jest --config jest.config.cjs",
20
20
  "knip": "knip --config knip.config.ts",
21
21
  "build": "npm run generate && npm run tsc",
22
- "generate": "prisma generate",
23
- "db": "prisma generate && prisma db push",
22
+ "generate": "node scripts/prisma-generate-if-changed.mjs",
23
+ "db": "npm run generate && prisma db push",
24
24
  "tsc": "NODE_OPTIONS='--max-old-space-size=16384' tsc",
25
25
  "typecheck": "NODE_OPTIONS='--max-old-space-size=16384' tsc --noEmit",
26
26
  "block-malicious": "./scripts/block-malicious-patterns.sh .",
@@ -4464,6 +4464,8 @@ model User {
4464
4464
  phone String?
4465
4465
  /// Set when the user completes SMS phone verification (OTP).
4466
4466
  phoneVerifiedAt DateTime?
4467
+ /// Opt-in: require a text code after password login.
4468
+ smsMfaEnabled Boolean @default(false)
4467
4469
  documentIDId String? @unique
4468
4470
  /// Encrypted-S3 key for the user's stored government-ID image (deleted per retention policy / on ID expiration)
4469
4471
  govIdImageS3Key String?
@@ -4895,6 +4897,8 @@ model PhoneVerificationCode {
4895
4897
  id String @id @default(cuid())
4896
4898
  userId String
4897
4899
  phoneE164 String
4900
+ /// Isolates phone-verify OTPs from login MFA OTPs.
4901
+ purpose String @default("phone_verify")
4898
4902
  codeHash String
4899
4903
  attempts Int @default(0)
4900
4904
  expiresAt DateTime
@@ -4903,6 +4907,7 @@ model PhoneVerificationCode {
4903
4907
  user User @relation(fields: [userId], references: [id], onDelete: Cascade)
4904
4908
 
4905
4909
  @@index([userId])
4910
+ @@index([userId, purpose])
4906
4911
  @@index([phoneE164])
4907
4912
  }
4908
4913
 
@@ -9,6 +9,7 @@
9
9
  * edge case, and leap-day birthdays without throwing or off-by-one errors.
10
10
  */
11
11
  import {
12
+ ACCOUNT_MINIMUM_AGE,
12
13
  AgePolicy,
13
14
  AgePolicyLabel,
14
15
  AgePolicyMinimumAge,
@@ -16,6 +17,7 @@ import {
16
17
  eventMatchesAgeFilter,
17
18
  getAgeFromDob,
18
19
  legacyAgeRangeMatchesFilter,
20
+ meetsAccountMinimumAge,
19
21
  meetsAgePolicy,
20
22
  } from "../definitions";
21
23
 
@@ -107,6 +109,25 @@ describe("getAgeFromDob", () => {
107
109
  });
108
110
  });
109
111
 
112
+ describe("meetsAccountMinimumAge", () => {
113
+ const yearsAgo = (n: number): string => {
114
+ const d = new Date();
115
+ d.setFullYear(d.getFullYear() - n);
116
+ d.setDate(d.getDate() - 1);
117
+ return d.toISOString();
118
+ };
119
+
120
+ it("is 13 and denies missing or under-13 DOBs", () => {
121
+ expect(ACCOUNT_MINIMUM_AGE).toBe(13);
122
+ expect(meetsAccountMinimumAge(null)).toBe(false);
123
+ expect(meetsAccountMinimumAge(undefined)).toBe(false);
124
+ expect(meetsAccountMinimumAge("not-a-date")).toBe(false);
125
+ expect(meetsAccountMinimumAge(yearsAgo(12))).toBe(false);
126
+ expect(meetsAccountMinimumAge(yearsAgo(13))).toBe(true);
127
+ expect(meetsAccountMinimumAge(yearsAgo(40))).toBe(true);
128
+ });
129
+ });
130
+
110
131
  describe("meetsAgePolicy", () => {
111
132
  const yearsAgo = (n: number): string => {
112
133
  const d = new Date();
@@ -35,7 +35,14 @@ describe("parseNotableVenueEntries", () => {
35
35
  { name: " ", reasonTags: ["NotARealTag"] },
36
36
  { name: "Valid", reasonTags: ["NiceAesthetic"] },
37
37
  ])
38
- ).toEqual([{ name: "Valid", reasonTags: ["NiceAesthetic"] }]);
38
+ ).toEqual([
39
+ {
40
+ name: "Valid",
41
+ isFavorite: false,
42
+ reasonTags: ["NiceAesthetic"],
43
+ otherNote: undefined,
44
+ },
45
+ ]);
39
46
  });
40
47
  });
41
48
 
@@ -1044,6 +1044,12 @@ export interface ApiResult<T, P extends ErrorDataType = ErrorDataType> {
1044
1044
  bonusAwarded?: boolean;
1045
1045
  status?: number;
1046
1046
  token?: string;
1047
+ /** Password login: a text code is required before the session is issued. */
1048
+ mfaRequired?: boolean;
1049
+ /** Short-lived challenge token for POST /auth/mfa/sms/verify (not a session). */
1050
+ mfaToken?: string;
1051
+ /** Last four digits of the phone that received the login code. */
1052
+ phoneHint?: string;
1047
1053
  /** e.g. safe path to navigate after password reset */
1048
1054
  returnTo?: string;
1049
1055
  error?: string;
@@ -1552,6 +1558,23 @@ export function getAgeFromDob(dob: Date | string | null | undefined): number | n
1552
1558
  return age;
1553
1559
  }
1554
1560
 
1561
+ /**
1562
+ * Account floor (COPPA / store ratings). Event 18+/21+ gates are separate
1563
+ * (`AgePolicy`). Do not store a DOB under this age.
1564
+ */
1565
+ export const ACCOUNT_MINIMUM_AGE = 13;
1566
+
1567
+ export const ACCOUNT_MINIMUM_AGE_MESSAGE =
1568
+ "You must be 13 or older to use Bash.";
1569
+
1570
+ /** True when DOB is present, parseable, and age is at least {@link ACCOUNT_MINIMUM_AGE}. */
1571
+ export function meetsAccountMinimumAge(
1572
+ dob: Date | string | null | undefined
1573
+ ): boolean {
1574
+ const age = getAgeFromDob(dob);
1575
+ return age !== null && age >= ACCOUNT_MINIMUM_AGE;
1576
+ }
1577
+
1555
1578
  /** Whether the given DOB satisfies the policy's minimum age. AllAges is always true. */
1556
1579
  export function meetsAgePolicy(
1557
1580
  policy: AgePolicy,
@@ -277,6 +277,8 @@ export const PRIVATE_USER_ACCOUNT_TO_SELECT = {
277
277
  phone: true,
278
278
  /** SMS verification — self account only. */
279
279
  phoneVerifiedAt: true,
280
+ /** Opt-in SMS login codes — self account only. */
281
+ smsMfaEnabled: true,
280
282
  membershipExpiresAt: true,
281
283
  bashPassStripeSubscriptionId: true,
282
284
  bashPassCurrentPeriodEnd: true,
@@ -107,15 +107,20 @@ export function findBestAvailableSeats(input: {
107
107
  for (let ri = 0; ri < rowOrder.length; ri += 1) {
108
108
  const sorted = sortSeatsInRow(byRow.get(rowOrder[ri])!);
109
109
  const runs = findContiguousRuns(sorted, qty);
110
+ const rowFirst = seatSortKey(sorted[0].label)[0];
111
+ const rowLast = seatSortKey(sorted[sorted.length - 1].label)[0];
112
+ const rowMid =
113
+ Number.isFinite(rowFirst) && Number.isFinite(rowLast)
114
+ ? (rowFirst + rowLast) / 2
115
+ : (sorted.length - 1) / 2;
110
116
  for (const run of runs) {
111
- const mid = (sorted.length - 1) / 2;
112
117
  const runMid =
113
118
  (seatSortKey(run[0].label)[0] +
114
119
  seatSortKey(run[run.length - 1].label)[0]) /
115
120
  2;
116
121
  const centerDist = Number.isFinite(runMid)
117
- ? Math.abs(runMid - mid)
118
- : Math.abs((run.length - 1) / 2 - mid);
122
+ ? Math.abs(runMid - rowMid)
123
+ : Math.abs((run.length - 1) / 2 - rowMid);
119
124
  contiguous.push({ seats: run, rowIndex: ri, centerDist });
120
125
  }
121
126
  }
@@ -10,6 +10,7 @@ import {
10
10
  getBlogDetailUrl,
11
11
  getBlogImageUrl,
12
12
  highlightSearchTerms,
13
+ looksLikePrismaCuid,
13
14
  parseBlogUrlParams,
14
15
  processTags,
15
16
  validateBlogContent,
@@ -45,13 +46,29 @@ describe("blogUtils", () => {
45
46
  expect(parseBlogUrlParams("abc123")).toEqual({ id: "abc123" });
46
47
  });
47
48
 
48
- test("parseBlogUrlParams splits id-slug at first hyphen", () => {
49
- expect(parseBlogUrlParams("abc123-my-cool-post")).toEqual({
50
- id: "abc123",
49
+ test("parseBlogUrlParams splits CUID-slug at first hyphen", () => {
50
+ const id = "cmr8las8i00orbg01m8sxg7fe";
51
+ expect(looksLikePrismaCuid(id)).toBe(true);
52
+ expect(parseBlogUrlParams(`${id}-my-cool-post`)).toEqual({
53
+ id,
51
54
  slug: "my-cool-post",
52
55
  });
53
56
  });
54
57
 
58
+ test("looksLikePrismaCuid rejects short or hyphenated prefixes", () => {
59
+ expect(looksLikePrismaCuid("bash")).toBe(false);
60
+ expect(looksLikePrismaCuid("abc123")).toBe(false);
61
+ });
62
+
63
+ test("parseBlogUrlParams treats hyphenated slug-only URLs as a single id", () => {
64
+ expect(parseBlogUrlParams("bash-community-vs-eventbrite")).toEqual({
65
+ id: "bash-community-vs-eventbrite",
66
+ });
67
+ expect(parseBlogUrlParams("abc123-my-cool-post")).toEqual({
68
+ id: "abc123-my-cool-post",
69
+ });
70
+ });
71
+
55
72
  test("parseBlogUrlParams returns null for empty input", () => {
56
73
  expect(parseBlogUrlParams("")).toBeNull();
57
74
  });
@@ -20,18 +20,18 @@ describe("getServiceListingReputation", () => {
20
20
  ).toEqual({
21
21
  averageRating: 4,
22
22
  totalRatings: MIN_RATINGS_FOR_DISPLAY,
23
- sourceLabel: undefined,
23
+ sourceLabel: "Bash",
24
24
  });
25
25
  });
26
26
 
27
- it("omits sourceLabel for non-google external sources", () => {
27
+ it("labels native ratings as Bash even when an external source is set", () => {
28
28
  expect(
29
29
  getServiceListingReputation({
30
30
  serviceRating: 4.2,
31
31
  totalRatings: 8,
32
32
  externalReviewSource: "yelp",
33
33
  })?.sourceLabel
34
- ).toBeUndefined();
34
+ ).toBe("Bash");
35
35
  });
36
36
 
37
37
  it("uses Bash sourceLabel when native reviews exist", () => {
@@ -22,23 +22,32 @@ 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. */
26
+ export function looksLikePrismaCuid(id: string): boolean {
27
+ return /^c[a-z0-9]{20,32}$/i.test(id);
28
+ }
29
+
25
30
  // Parse blog URL parameters
26
31
  export function parseBlogUrlParams(blogIdSlug: string): { id: string; slug?: string } | null {
27
32
  if (!blogIdSlug) return null;
28
33
 
29
- // Check if it contains a hyphen (ID-slug format)
30
34
  const hyphenIndex = blogIdSlug.indexOf('-');
31
35
 
32
36
  if (hyphenIndex === -1) {
33
- // No hyphen found, treat as just an ID
34
37
  return { id: blogIdSlug };
35
38
  }
36
39
 
37
- // Split at the first hyphen
38
40
  const id = blogIdSlug.substring(0, hyphenIndex);
39
41
  const slug = blogIdSlug.substring(hyphenIndex + 1);
40
-
41
- return { id, slug };
42
+
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"
45
+ // would be parsed as id "bash".
46
+ if (looksLikePrismaCuid(id)) {
47
+ return { id, slug };
48
+ }
49
+
50
+ return { id: blogIdSlug };
42
51
  }
43
52
 
44
53
  // Content processing
@@ -88,7 +88,10 @@ export function isValidIanaTimezone(timezone: string | null | undefined): boolea
88
88
  // IANA zones follow "Region/City" format or special cases like "UTC".
89
89
  const looksLikeAbbreviation = /^[A-Z]{2,5}T?$/.test(t);
90
90
  if (looksLikeAbbreviation && t !== "UTC") return false;
91
-
91
+
92
+ // Newer ICU accepts offset ids (`+05:00`) as timeZone; those are not IANA names.
93
+ if (/^[+-]\d{1,2}(?::?\d{2})?$/.test(t)) return false;
94
+
92
95
  // Intl throws RangeError for unknown IANA ids — no luxon needed.
93
96
  try {
94
97
  Intl.DateTimeFormat(undefined, { timeZone: t });
@@ -306,10 +306,11 @@ export function foodAndBeverageRateSummary(
306
306
  baseRateCents: number,
307
307
  minimumQuantity?: number | null
308
308
  ): string {
309
+ const hasCents = baseRateCents % 100 !== 0;
309
310
  const formatted = new Intl.NumberFormat("en-US", {
310
311
  style: "currency",
311
312
  currency: "USD",
312
- minimumFractionDigits: 0,
313
+ minimumFractionDigits: hasCents ? 2 : 0,
313
314
  maximumFractionDigits: 2,
314
315
  }).format(baseRateCents / 100);
315
316
  const perGuest = `${formatted} / guest`;