@bash-app/bash-common 30.377.0 → 30.380.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.
@@ -1,4 +1,4 @@
1
- import { computeLocationShareExpiresAt, isLocationShareCrewMember, isLocationShareEventParticipant, isLocationShareLiveBookingStatus, isLocationShareLiveTaskStatus, LOCATION_SHARE_BOOKING_STATUSES, LOCATION_SHARE_DEFAULT_TTL_MS, LOCATION_SHARE_GRACE_MS, LOCATION_SHARE_START_FALLBACK_MS, LOCATION_SHARE_TASK_STATUSES, } from "../locationShare.js";
1
+ import { computeLocationShareExpiresAt, isLocationShareCrewMember, isLocationShareEventParticipant, isLocationShareLiveBookingStatus, isLocationShareLiveTaskStatus, LOCATION_SHARE_BOOKING_STATUSES, LOCATION_SHARE_DEFAULT_TTL_MS, LOCATION_SHARE_GRACE_MS, LOCATION_SHARE_START_FALLBACK_MS, LOCATION_SHARE_TASK_STATUSES, mergeLocationShareViewer, sortLocationShareViewers, } from "../locationShare.js";
2
2
  describe("locationShare helpers", () => {
3
3
  describe("isLocationShareCrewMember", () => {
4
4
  it("allows the creator", () => {
@@ -70,5 +70,26 @@ describe("locationShare helpers", () => {
70
70
  expect(expires.getTime()).toBe(now.getTime() + LOCATION_SHARE_DEFAULT_TTL_MS);
71
71
  });
72
72
  });
73
+ describe("mergeLocationShareViewer", () => {
74
+ const teaser = (id) => ({ id });
75
+ it("keeps Host over Task for the same person", () => {
76
+ const byUserId = new Map();
77
+ mergeLocationShareViewer(byUserId, teaser("u1"), "Task");
78
+ mergeLocationShareViewer(byUserId, teaser("u1"), "Host");
79
+ expect(byUserId.get("u1")?.role).toBe("Host");
80
+ });
81
+ it("ignores a missing user", () => {
82
+ const byUserId = new Map();
83
+ mergeLocationShareViewer(byUserId, null, "Host");
84
+ expect(byUserId.size).toBe(0);
85
+ });
86
+ it("sorts Host before hired providers", () => {
87
+ const sorted = sortLocationShareViewers([
88
+ { userId: "b", role: "Provider", user: teaser("b") },
89
+ { userId: "a", role: "Host", user: teaser("a") },
90
+ ]);
91
+ expect(sorted.map((v) => v.role)).toEqual(["Host", "Provider"]);
92
+ });
93
+ });
73
94
  });
74
95
  //# sourceMappingURL=locationShare.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locationShare.test.js","sourceRoot":"","sources":["../../src/__tests__/locationShare.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locationShare.test.js","sourceRoot":"","sources":["../../src/__tests__/locationShare.test.ts"],"names":[],"mappings":"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"}
@@ -111,4 +111,19 @@ export type LocationShareSessionListItem = Prisma.LocationShareSessionGetPayload
111
111
  select: typeof LOCATION_SHARE_SESSION_LIST_SELECT;
112
112
  }>;
113
113
  export type LocationShareMySession = Pick<LocationShareSessionListItem, "id" | "bashEventId" | "userId" | "status" | "startedAt" | "expiresAt" | "stoppedAt" | "lastLat" | "lastLng" | "lastAccuracyM" | "lastUpdatedAt">;
114
+ /** Why this person can see live location on the bash. */
115
+ export declare const LOCATION_SHARE_VIEWER_ROLES: readonly ["Host", "Organizer", "CoHost", "Promoter", "Task", "Provider"];
116
+ export type LocationShareViewerRole = (typeof LOCATION_SHARE_VIEWER_ROLES)[number];
117
+ /** Host-facing labels — access copy, not promoter voice. */
118
+ export declare const LOCATION_SHARE_VIEWER_ROLE_LABEL: Record<LocationShareViewerRole, string>;
119
+ export type LocationShareViewer = {
120
+ userId: string;
121
+ role: LocationShareViewerRole;
122
+ user: Prisma.UserGetPayload<{
123
+ select: typeof LOCATION_SHARE_SESSION_USER_SELECT;
124
+ }>;
125
+ };
126
+ /** Keep the highest-rank role when the same person qualifies more than once. */
127
+ export declare function mergeLocationShareViewer(byUserId: Map<string, LocationShareViewer>, user: LocationShareViewer["user"] | null | undefined, role: LocationShareViewerRole): void;
128
+ export declare function sortLocationShareViewers(viewers: LocationShareViewer[]): LocationShareViewer[];
114
129
  //# sourceMappingURL=locationShare.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"locationShare.d.ts","sourceRoot":"","sources":["../src/locationShare.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAI7C,mEAAmE;AACnE,eAAO,MAAM,uBAAuB,QAAqB,CAAC;AAE1D,yDAAyD;AACzD,eAAO,MAAM,6BAA6B,QAAsB,CAAC;AAEjE,uDAAuD;AACvD,eAAO,MAAM,gCAAgC,QAAsB,CAAC;AAEpE,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAC7B,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC;AAEjE,+DAA+D;AAC/D,eAAO,MAAM,4BAA4B,iDAI/B,CAAC;AAEX,MAAM,MAAM,uBAAuB,GACjC,CAAC,OAAO,4BAA4B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhD,oEAAoE;AACpE,eAAO,MAAM,+BAA+B,oCAGlC,CAAC;AAEX,MAAM,MAAM,0BAA0B,GACpC,CAAC,OAAO,+BAA+B,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnD,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,MAAM,IAAI,uBAAuB,CAKnC;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAChC,MAAM,IAAI,0BAA0B,CAKtC;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC3B,WAAW,CAAC,EAAE;IACZ,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC3B,GAAG,IAAI,GACP,OAAO,CAOT;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAC3B,OAAO,CAAC,EAAE;IACR,WAAW,CAAC,EAAE;QACZ,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;QAC7B,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;KAC3B,GAAG,IAAI,CAAC;IACT,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qFAAqF;IACrF,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,GACA,OAAO,CAYT;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE;IACJ,aAAa,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;IACrC,WAAW,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;CACpC,EACD,GAAG,GAAE,IAAiB,GACrB,IAAI,CAUN;AAED,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;CAElB,CAAC;AAE9B,eAAO,MAAM,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAaF,CAAC;AAE9C,MAAM,MAAM,4BAA4B,GAAG,MAAM,CAAC,8BAA8B,CAAC;IAC/E,MAAM,EAAE,OAAO,kCAAkC,CAAC;CACnD,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,4BAA4B,EAC1B,IAAI,GACJ,aAAa,GACb,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,WAAW,GACX,WAAW,GACX,SAAS,GACT,SAAS,GACT,eAAe,GACf,eAAe,CAClB,CAAC"}
1
+ {"version":3,"file":"locationShare.d.ts","sourceRoot":"","sources":["../src/locationShare.ts"],"names":[],"mappings":"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"}
@@ -92,4 +92,50 @@ export const LOCATION_SHARE_SESSION_LIST_SELECT = {
92
92
  lastUpdatedAt: true,
93
93
  user: { select: LOCATION_SHARE_SESSION_USER_SELECT },
94
94
  };
95
+ /** Why this person can see live location on the bash. */
96
+ export const LOCATION_SHARE_VIEWER_ROLES = [
97
+ "Host",
98
+ "Organizer",
99
+ "CoHost",
100
+ "Promoter",
101
+ "Task",
102
+ "Provider",
103
+ ];
104
+ const LOCATION_SHARE_VIEWER_ROLE_RANK = {
105
+ Host: 0,
106
+ Organizer: 1,
107
+ CoHost: 2,
108
+ Promoter: 3,
109
+ Task: 4,
110
+ Provider: 5,
111
+ };
112
+ /** Host-facing labels — access copy, not promoter voice. */
113
+ export const LOCATION_SHARE_VIEWER_ROLE_LABEL = {
114
+ Host: "Host",
115
+ Organizer: "Organizer",
116
+ CoHost: "Co-host",
117
+ Promoter: "Promoter",
118
+ Task: "On a task",
119
+ Provider: "Hired",
120
+ };
121
+ /** Keep the highest-rank role when the same person qualifies more than once. */
122
+ export function mergeLocationShareViewer(byUserId, user, role) {
123
+ if (!user?.id)
124
+ return;
125
+ const existing = byUserId.get(user.id);
126
+ if (!existing ||
127
+ LOCATION_SHARE_VIEWER_ROLE_RANK[role] <
128
+ LOCATION_SHARE_VIEWER_ROLE_RANK[existing.role]) {
129
+ byUserId.set(user.id, { userId: user.id, role, user });
130
+ }
131
+ }
132
+ export function sortLocationShareViewers(viewers) {
133
+ return [...viewers].sort((a, b) => {
134
+ const rank = LOCATION_SHARE_VIEWER_ROLE_RANK[a.role] -
135
+ LOCATION_SHARE_VIEWER_ROLE_RANK[b.role];
136
+ if (rank !== 0)
137
+ return rank;
138
+ return a.userId.localeCompare(b.userId);
139
+ });
140
+ }
95
141
  //# sourceMappingURL=locationShare.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"locationShare.js","sourceRoot":"","sources":["../src/locationShare.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locationShare.js","sourceRoot":"","sources":["../src/locationShare.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.377.0",
3
+ "version": "30.380.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",
@@ -927,6 +927,8 @@ model BashEvent {
927
927
  featuredGuestsHeadline String?
928
928
  /// When true, bash detail shows the full privacy-filtered guest list to everyone (not just tier holders).
929
929
  attendeeListPublic Boolean @default(false)
930
+ /// Host opt-in: show live current-location pins on the public bash page.
931
+ locationSharePublic Boolean @default(false)
930
932
  /// Preview = count + curated faces; Public = full list for everyone; TicketHolders = full list for ticket buyers only.
931
933
  attendeeListAccess String @default("Preview")
932
934
  /// When true, only accounts with a published service profile (Vendor/Venue/Entertainment/Exhibitor/Sponsor/Event
@@ -9,6 +9,9 @@ import {
9
9
  LOCATION_SHARE_GRACE_MS,
10
10
  LOCATION_SHARE_START_FALLBACK_MS,
11
11
  LOCATION_SHARE_TASK_STATUSES,
12
+ mergeLocationShareViewer,
13
+ sortLocationShareViewers,
14
+ type LocationShareViewer,
12
15
  } from "../locationShare.js";
13
16
 
14
17
  describe("locationShare helpers", () => {
@@ -119,4 +122,30 @@ describe("locationShare helpers", () => {
119
122
  );
120
123
  });
121
124
  });
125
+
126
+ describe("mergeLocationShareViewer", () => {
127
+ const teaser = (id: string) =>
128
+ ({ id }) as LocationShareViewer["user"];
129
+
130
+ it("keeps Host over Task for the same person", () => {
131
+ const byUserId = new Map<string, LocationShareViewer>();
132
+ mergeLocationShareViewer(byUserId, teaser("u1"), "Task");
133
+ mergeLocationShareViewer(byUserId, teaser("u1"), "Host");
134
+ expect(byUserId.get("u1")?.role).toBe("Host");
135
+ });
136
+
137
+ it("ignores a missing user", () => {
138
+ const byUserId = new Map<string, LocationShareViewer>();
139
+ mergeLocationShareViewer(byUserId, null, "Host");
140
+ expect(byUserId.size).toBe(0);
141
+ });
142
+
143
+ it("sorts Host before hired providers", () => {
144
+ const sorted = sortLocationShareViewers([
145
+ { userId: "b", role: "Provider", user: teaser("b") },
146
+ { userId: "a", role: "Host", user: teaser("a") },
147
+ ]);
148
+ expect(sorted.map((v) => v.role)).toEqual(["Host", "Provider"]);
149
+ });
150
+ });
122
151
  });
@@ -171,3 +171,76 @@ export type LocationShareMySession = Pick<
171
171
  | "lastAccuracyM"
172
172
  | "lastUpdatedAt"
173
173
  >;
174
+
175
+ /** Why this person can see live location on the bash. */
176
+ export const LOCATION_SHARE_VIEWER_ROLES = [
177
+ "Host",
178
+ "Organizer",
179
+ "CoHost",
180
+ "Promoter",
181
+ "Task",
182
+ "Provider",
183
+ ] as const;
184
+
185
+ export type LocationShareViewerRole =
186
+ (typeof LOCATION_SHARE_VIEWER_ROLES)[number];
187
+
188
+ const LOCATION_SHARE_VIEWER_ROLE_RANK: Record<LocationShareViewerRole, number> =
189
+ {
190
+ Host: 0,
191
+ Organizer: 1,
192
+ CoHost: 2,
193
+ Promoter: 3,
194
+ Task: 4,
195
+ Provider: 5,
196
+ };
197
+
198
+ /** Host-facing labels — access copy, not promoter voice. */
199
+ export const LOCATION_SHARE_VIEWER_ROLE_LABEL: Record<
200
+ LocationShareViewerRole,
201
+ string
202
+ > = {
203
+ Host: "Host",
204
+ Organizer: "Organizer",
205
+ CoHost: "Co-host",
206
+ Promoter: "Promoter",
207
+ Task: "On a task",
208
+ Provider: "Hired",
209
+ };
210
+
211
+ export type LocationShareViewer = {
212
+ userId: string;
213
+ role: LocationShareViewerRole;
214
+ user: Prisma.UserGetPayload<{
215
+ select: typeof LOCATION_SHARE_SESSION_USER_SELECT;
216
+ }>;
217
+ };
218
+
219
+ /** Keep the highest-rank role when the same person qualifies more than once. */
220
+ export function mergeLocationShareViewer(
221
+ byUserId: Map<string, LocationShareViewer>,
222
+ user: LocationShareViewer["user"] | null | undefined,
223
+ role: LocationShareViewerRole
224
+ ): void {
225
+ if (!user?.id) return;
226
+ const existing = byUserId.get(user.id);
227
+ if (
228
+ !existing ||
229
+ LOCATION_SHARE_VIEWER_ROLE_RANK[role] <
230
+ LOCATION_SHARE_VIEWER_ROLE_RANK[existing.role]
231
+ ) {
232
+ byUserId.set(user.id, { userId: user.id, role, user });
233
+ }
234
+ }
235
+
236
+ export function sortLocationShareViewers(
237
+ viewers: LocationShareViewer[]
238
+ ): LocationShareViewer[] {
239
+ return [...viewers].sort((a, b) => {
240
+ const rank =
241
+ LOCATION_SHARE_VIEWER_ROLE_RANK[a.role] -
242
+ LOCATION_SHARE_VIEWER_ROLE_RANK[b.role];
243
+ if (rank !== 0) return rank;
244
+ return a.userId.localeCompare(b.userId);
245
+ });
246
+ }