@bash-app/bash-common 30.255.0 → 30.256.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.
@@ -40,11 +40,20 @@ describe("eventTimezoneIana", () => {
40
40
  });
41
41
  });
42
42
  describe("resolveEventTimezoneIanaForDisplay", () => {
43
- it("prefers valid stored timezone", () => {
43
+ it("prefers geographic inference over stored timezone when location is known", () => {
44
+ // Regression: an event in Utah (state: UT) had timezone: "America/New_York"
45
+ // stored incorrectly, causing the BashCard to show EDT instead of MDT.
46
+ // Geographic data should win when it has an opinion.
44
47
  expect(resolveEventTimezoneIanaForDisplay({
45
- timezone: "America/Los_Angeles",
48
+ timezone: "America/New_York",
46
49
  state: "UT",
47
50
  country: "USA",
51
+ })).toBe("America/Denver");
52
+ });
53
+ it("falls back to stored timezone when no geographic clues exist", () => {
54
+ // Online / location-less events rely entirely on the stored timezone.
55
+ expect(resolveEventTimezoneIanaForDisplay({
56
+ timezone: "America/Los_Angeles",
48
57
  })).toBe("America/Los_Angeles");
49
58
  });
50
59
  it("infers from city/state when timezone is missing", () => {
@@ -55,6 +64,17 @@ describe("eventTimezoneIana", () => {
55
64
  country: "United States",
56
65
  })).toBe("America/Denver");
57
66
  });
67
+ it("returns stored timezone for a Park City UT event that also has correct stored timezone", () => {
68
+ expect(resolveEventTimezoneIanaForDisplay({
69
+ timezone: "America/Denver",
70
+ state: "UT",
71
+ country: "USA",
72
+ city: "Park City",
73
+ })).toBe("America/Denver");
74
+ });
75
+ it("returns UTC when neither geographic nor stored timezone is available", () => {
76
+ expect(resolveEventTimezoneIanaForDisplay({})).toBe("UTC");
77
+ });
58
78
  });
59
79
  });
60
80
  //# sourceMappingURL=eventTimezoneIana.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventTimezoneIana.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/eventTimezoneIana.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eventTimezoneIana.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/eventTimezoneIana.test.ts"],"names":[],"mappings":"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"}
@@ -37,5 +37,49 @@ describe("ticketListUtils", () => {
37
37
  const decoded = ticketListStrToTicketList(plain);
38
38
  expect(decoded.get("tier1")[0].numberOfTickets).toBe(2);
39
39
  });
40
+ describe("ticketDateTime ISO round-trip (timezone-safe)", () => {
41
+ /**
42
+ * Regression: before the fix, ticketListStrToTicketList re-formatted the
43
+ * datetime using a locale-specific format ("5/25/2026 7:00 PM") which
44
+ * new Date() parses in the server's local timezone, shifting the UTC value
45
+ * and causing the ticket's validDate to mismatch the event startDateTime.
46
+ * After the fix, toISO() is used, keeping the timestamp unambiguous.
47
+ */
48
+ test("preserves the exact UTC instant through encode → decode", () => {
49
+ const utcDate = "2026-05-25T01:00:00.000Z";
50
+ const ticketList = new Map([
51
+ ["tier-free", [{ numberOfTickets: 1, ticketDateTime: utcDate }]],
52
+ ]);
53
+ const encoded = ticketListToString(ticketList);
54
+ const decoded = ticketListStrToTicketList(encoded);
55
+ const decodedDateStr = decoded.get("tier-free")[0].ticketDateTime;
56
+ // The decoded string must parse back to the same UTC millisecond.
57
+ expect(new Date(decodedDateStr).getTime()).toBe(new Date(utcDate).getTime());
58
+ });
59
+ test("decoded ticketDateTime is a valid ISO string (not a locale string)", () => {
60
+ const utcDate = "2026-05-25T19:00:00.000Z";
61
+ const ticketList = new Map([
62
+ ["tier-free", [{ numberOfTickets: 2, ticketDateTime: utcDate }]],
63
+ ]);
64
+ const encoded = ticketListToString(ticketList);
65
+ const decoded = ticketListStrToTicketList(encoded);
66
+ const decodedDateStr = String(decoded.get("tier-free")[0].ticketDateTime);
67
+ // ISO strings are parseable by DateTime.fromISO; locale strings like
68
+ // "5/25/2026 7:00 PM" are not valid ISO and would cause NaN.
69
+ expect(DateTime.fromISO(decodedDateStr).isValid).toBe(true);
70
+ });
71
+ test("round-trip is stable regardless of DST offset for Mountain-time events", () => {
72
+ // Park City, UT is America/Denver (UTC-6 in MDT).
73
+ // An 8:30 PM MDT event = 2026-05-28T02:30:00.000Z in UTC.
74
+ const utcDate = "2026-05-28T02:30:00.000Z";
75
+ const ticketList = new Map([
76
+ ["tier-general", [{ numberOfTickets: 1, ticketDateTime: utcDate }]],
77
+ ]);
78
+ const encoded = ticketListToString(ticketList);
79
+ const decoded = ticketListStrToTicketList(encoded);
80
+ const decodedDateStr = decoded.get("tier-general")[0].ticketDateTime;
81
+ expect(new Date(decodedDateStr).getTime()).toBe(new Date(utcDate).getTime());
82
+ });
83
+ });
40
84
  });
41
85
  //# sourceMappingURL=ticketListUtils.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ticketListUtils.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/ticketListUtils.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAGtF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,OAAO,GAAG,0BAA0B,CAAC;IAE3C,IAAI,CAAC,iDAAiD,EAAE,GAAG,EAAE;QAC3D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAmC;YAC3D;gBACE,UAAU;gBACV;oBACE,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE;oBAC/C,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE;iBAChD;aACF;YACD,CAAC,UAAU,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;SAChE,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAEnC,MAAM,OAAO,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAmC;YAC3D,CAAC,YAAY,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;YACjE,CAAC,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,OAAO,EAAE,CAAC,CAAC;SACjE,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,yBAAyB,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACnE,MAAM,KAAK,GAAG,aAAa,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC;QACjE,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ticketListUtils.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/ticketListUtils.test.ts"],"names":[],"mappings":"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"}
@@ -31,8 +31,11 @@ export type ResolveEventTimezoneForDisplayArgs = InferEventTimezoneArgs & {
31
31
  timezone?: string | null;
32
32
  };
33
33
  /**
34
- * For public surfaces (e.g. BashCard): prefer a valid stored IANA, then infer from geography.
35
- * Never uses the viewer's device timezone.
34
+ * For public surfaces (e.g. BashCard): prefer geographic inference when location
35
+ * data is available — it is more reliable than the stored timezone which may have
36
+ * been set by AI or defaulted incorrectly. Falls back to the stored IANA only when
37
+ * geographic inference produces no opinion (returns UTC). Never uses the viewer's
38
+ * device timezone.
36
39
  */
37
40
  export declare function resolveEventTimezoneIanaForDisplay(args: ResolveEventTimezoneForDisplayArgs): string;
38
41
  //# sourceMappingURL=eventTimezoneIana.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventTimezoneIana.d.ts","sourceRoot":"","sources":["../../src/utils/eventTimezoneIana.ts"],"names":[],"mappings":"AAoEA;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACjC,MAAM,GAAG,IAAI,CAMf;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAIhF;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,MAAM,GAAG,IAAI,CAsGf;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,MAAM,GAAG,IAAI,CAuEf;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAoB3E;AAED,MAAM,MAAM,kCAAkC,GAAG,sBAAsB,GAAG;IACxE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,kCAAkC,GACvC,MAAM,CAMR"}
1
+ {"version":3,"file":"eventTimezoneIana.d.ts","sourceRoot":"","sources":["../../src/utils/eventTimezoneIana.ts"],"names":[],"mappings":"AAoEA;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACjC,MAAM,GAAG,IAAI,CAMf;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAIhF;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACnC,MAAM,GAAG,IAAI,CAsGf;AAED;;;GAGG;AACH,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAClC,MAAM,GAAG,IAAI,CAuEf;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,sBAAsB,GAAG,MAAM,CAoB3E;AAED,MAAM,MAAM,kCAAkC,GAAG,sBAAsB,GAAG;IACxE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,kCAAkC,GACvC,MAAM,CAQR"}
@@ -264,14 +264,19 @@ export function inferEventTimezoneIana(args) {
264
264
  return "UTC";
265
265
  }
266
266
  /**
267
- * For public surfaces (e.g. BashCard): prefer a valid stored IANA, then infer from geography.
268
- * Never uses the viewer's device timezone.
267
+ * For public surfaces (e.g. BashCard): prefer geographic inference when location
268
+ * data is available — it is more reliable than the stored timezone which may have
269
+ * been set by AI or defaulted incorrectly. Falls back to the stored IANA only when
270
+ * geographic inference produces no opinion (returns UTC). Never uses the viewer's
271
+ * device timezone.
269
272
  */
270
273
  export function resolveEventTimezoneIanaForDisplay(args) {
274
+ const inferred = inferEventTimezoneIana(args);
275
+ if (inferred !== "UTC")
276
+ return inferred;
271
277
  const stored = args.timezone?.trim();
272
- if (stored && isValidIanaTimezone(stored)) {
278
+ if (stored && isValidIanaTimezone(stored))
273
279
  return stored;
274
- }
275
- return inferEventTimezoneIana(args);
280
+ return "UTC";
276
281
  }
277
282
  //# sourceMappingURL=eventTimezoneIana.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"eventTimezoneIana.js","sourceRoot":"","sources":["../../src/utils/eventTimezoneIana.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eventTimezoneIana.js","sourceRoot":"","sources":["../../src/utils/eventTimezoneIana.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ticketListUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ticketListUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EAKvB,MAAM,mBAAmB,CAAC;AAiD3B;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,GAChD,MAAM,CAsCR;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,GACpB,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAgEvC"}
1
+ {"version":3,"file":"ticketListUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ticketListUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EAKvB,MAAM,mBAAmB,CAAC;AA4C3B;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,GAChD,MAAM,CAsCR;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,GACpB,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAgEvC"}
@@ -1,6 +1,6 @@
1
1
  import { DateTime } from "luxon";
2
2
  import { URL_PARAMS_NUMBER_OF_TICKETS_TICKETS_DATE_DELIM, URL_PARAMS_TICKET_LIST_DELIM, URL_PARAMS_TICKET_TIER_ID_NUMBER_OF_TICKETS_DATE_DELIM, URL_PARAMS_TICKETS_DATE_DELIM, } from "../definitions.js";
3
- import { dateTimeFormat, dateTimeFromDate, } from "./luxonUtils.js";
3
+ import { dateTimeFromDate } from "./luxonUtils.js";
4
4
  /**
5
5
  * Encodes a string to Base64 URL-safe format
6
6
  * Replaces + with -, / with _, and removes = padding
@@ -119,7 +119,7 @@ export function ticketListStrToTicketList(ticketListStr) {
119
119
  const ticketDateTime = DateTime.fromISO(ticketDateTimeStr);
120
120
  let ticketDateTimeFormattedStr = undefined;
121
121
  if (ticketDateTime.isValid) {
122
- ticketDateTimeFormattedStr = dateTimeFormat(ticketDateTime);
122
+ ticketDateTimeFormattedStr = ticketDateTime.toISO() ?? undefined;
123
123
  }
124
124
  ticketNumAndDatesArr.push({
125
125
  numberOfTickets: parseInt(numberOfTickets),
@@ -1 +1 @@
1
- {"version":3,"file":"ticketListUtils.js","sourceRoot":"","sources":["../../src/utils/ticketListUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ticketListUtils.js","sourceRoot":"","sources":["../../src/utils/ticketListUtils.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.255.0",
3
+ "version": "30.256.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",
@@ -68,13 +68,25 @@ describe("eventTimezoneIana", () => {
68
68
  });
69
69
 
70
70
  describe("resolveEventTimezoneIanaForDisplay", () => {
71
- it("prefers valid stored timezone", () => {
71
+ it("prefers geographic inference over stored timezone when location is known", () => {
72
+ // Regression: an event in Utah (state: UT) had timezone: "America/New_York"
73
+ // stored incorrectly, causing the BashCard to show EDT instead of MDT.
74
+ // Geographic data should win when it has an opinion.
72
75
  expect(
73
76
  resolveEventTimezoneIanaForDisplay({
74
- timezone: "America/Los_Angeles",
77
+ timezone: "America/New_York",
75
78
  state: "UT",
76
79
  country: "USA",
77
80
  })
81
+ ).toBe("America/Denver");
82
+ });
83
+
84
+ it("falls back to stored timezone when no geographic clues exist", () => {
85
+ // Online / location-less events rely entirely on the stored timezone.
86
+ expect(
87
+ resolveEventTimezoneIanaForDisplay({
88
+ timezone: "America/Los_Angeles",
89
+ })
78
90
  ).toBe("America/Los_Angeles");
79
91
  });
80
92
 
@@ -88,5 +100,20 @@ describe("eventTimezoneIana", () => {
88
100
  })
89
101
  ).toBe("America/Denver");
90
102
  });
103
+
104
+ it("returns stored timezone for a Park City UT event that also has correct stored timezone", () => {
105
+ expect(
106
+ resolveEventTimezoneIanaForDisplay({
107
+ timezone: "America/Denver",
108
+ state: "UT",
109
+ country: "USA",
110
+ city: "Park City",
111
+ })
112
+ ).toBe("America/Denver");
113
+ });
114
+
115
+ it("returns UTC when neither geographic nor stored timezone is available", () => {
116
+ expect(resolveEventTimezoneIanaForDisplay({})).toBe("UTC");
117
+ });
91
118
  });
92
119
  });
@@ -44,4 +44,61 @@ describe("ticketListUtils", () => {
44
44
  const decoded = ticketListStrToTicketList(plain);
45
45
  expect(decoded.get("tier1")![0].numberOfTickets).toBe(2);
46
46
  });
47
+
48
+ describe("ticketDateTime ISO round-trip (timezone-safe)", () => {
49
+ /**
50
+ * Regression: before the fix, ticketListStrToTicketList re-formatted the
51
+ * datetime using a locale-specific format ("5/25/2026 7:00 PM") which
52
+ * new Date() parses in the server's local timezone, shifting the UTC value
53
+ * and causing the ticket's validDate to mismatch the event startDateTime.
54
+ * After the fix, toISO() is used, keeping the timestamp unambiguous.
55
+ */
56
+ test("preserves the exact UTC instant through encode → decode", () => {
57
+ const utcDate = "2026-05-25T01:00:00.000Z";
58
+ const ticketList = new Map<string, NumberOfTicketsForDate[]>([
59
+ ["tier-free", [{ numberOfTickets: 1, ticketDateTime: utcDate }]],
60
+ ]);
61
+
62
+ const encoded = ticketListToString(ticketList);
63
+ const decoded = ticketListStrToTicketList(encoded);
64
+
65
+ const decodedDateStr = decoded.get("tier-free")![0].ticketDateTime!;
66
+ // The decoded string must parse back to the same UTC millisecond.
67
+ expect(new Date(decodedDateStr).getTime()).toBe(
68
+ new Date(utcDate).getTime()
69
+ );
70
+ });
71
+
72
+ test("decoded ticketDateTime is a valid ISO string (not a locale string)", () => {
73
+ const utcDate = "2026-05-25T19:00:00.000Z";
74
+ const ticketList = new Map<string, NumberOfTicketsForDate[]>([
75
+ ["tier-free", [{ numberOfTickets: 2, ticketDateTime: utcDate }]],
76
+ ]);
77
+
78
+ const encoded = ticketListToString(ticketList);
79
+ const decoded = ticketListStrToTicketList(encoded);
80
+ const decodedDateStr = String(decoded.get("tier-free")![0].ticketDateTime!);
81
+
82
+ // ISO strings are parseable by DateTime.fromISO; locale strings like
83
+ // "5/25/2026 7:00 PM" are not valid ISO and would cause NaN.
84
+ expect(DateTime.fromISO(decodedDateStr).isValid).toBe(true);
85
+ });
86
+
87
+ test("round-trip is stable regardless of DST offset for Mountain-time events", () => {
88
+ // Park City, UT is America/Denver (UTC-6 in MDT).
89
+ // An 8:30 PM MDT event = 2026-05-28T02:30:00.000Z in UTC.
90
+ const utcDate = "2026-05-28T02:30:00.000Z";
91
+ const ticketList = new Map<string, NumberOfTicketsForDate[]>([
92
+ ["tier-general", [{ numberOfTickets: 1, ticketDateTime: utcDate }]],
93
+ ]);
94
+
95
+ const encoded = ticketListToString(ticketList);
96
+ const decoded = ticketListStrToTicketList(encoded);
97
+ const decodedDateStr = decoded.get("tier-general")![0].ticketDateTime!;
98
+
99
+ expect(new Date(decodedDateStr).getTime()).toBe(
100
+ new Date(utcDate).getTime()
101
+ );
102
+ });
103
+ });
47
104
  });
@@ -317,15 +317,20 @@ export type ResolveEventTimezoneForDisplayArgs = InferEventTimezoneArgs & {
317
317
  };
318
318
 
319
319
  /**
320
- * For public surfaces (e.g. BashCard): prefer a valid stored IANA, then infer from geography.
321
- * Never uses the viewer's device timezone.
320
+ * For public surfaces (e.g. BashCard): prefer geographic inference when location
321
+ * data is available — it is more reliable than the stored timezone which may have
322
+ * been set by AI or defaulted incorrectly. Falls back to the stored IANA only when
323
+ * geographic inference produces no opinion (returns UTC). Never uses the viewer's
324
+ * device timezone.
322
325
  */
323
326
  export function resolveEventTimezoneIanaForDisplay(
324
327
  args: ResolveEventTimezoneForDisplayArgs
325
328
  ): string {
329
+ const inferred = inferEventTimezoneIana(args);
330
+ if (inferred !== "UTC") return inferred;
331
+
326
332
  const stored = args.timezone?.trim();
327
- if (stored && isValidIanaTimezone(stored)) {
328
- return stored;
329
- }
330
- return inferEventTimezoneIana(args);
333
+ if (stored && isValidIanaTimezone(stored)) return stored;
334
+
335
+ return "UTC";
331
336
  }
@@ -6,12 +6,7 @@ import {
6
6
  URL_PARAMS_TICKET_TIER_ID_NUMBER_OF_TICKETS_DATE_DELIM,
7
7
  URL_PARAMS_TICKETS_DATE_DELIM,
8
8
  } from "../definitions.js";
9
- import {
10
- dateTimeFormat,
11
- dateTimeFromDate,
12
- dateTimeFromString,
13
- LUXON_DATETIME_FORMAT_ISO_LIKE,
14
- } from "./luxonUtils.js";
9
+ import { dateTimeFromDate } from "./luxonUtils.js";
15
10
 
16
11
  /**
17
12
  * Encodes a string to Base64 URL-safe format
@@ -160,7 +155,7 @@ export function ticketListStrToTicketList(
160
155
  let ticketDateTimeFormattedStr: string | undefined = undefined;
161
156
 
162
157
  if (ticketDateTime.isValid) {
163
- ticketDateTimeFormattedStr = dateTimeFormat(ticketDateTime);
158
+ ticketDateTimeFormattedStr = ticketDateTime.toISO() ?? undefined;
164
159
  }
165
160
 
166
161
  ticketNumAndDatesArr.push({