@bash-app/bash-common 30.375.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.
- package/dist/__tests__/locationShare.test.js +22 -1
- package/dist/__tests__/locationShare.test.js.map +1 -1
- package/dist/definitions.d.ts +7 -0
- package/dist/definitions.d.ts.map +1 -1
- package/dist/definitions.js.map +1 -1
- package/dist/extendedSchemas.d.ts +57 -1
- package/dist/extendedSchemas.d.ts.map +1 -1
- package/dist/extendedSchemas.js +10 -0
- package/dist/extendedSchemas.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/locationShare.d.ts +15 -0
- package/dist/locationShare.d.ts.map +1 -1
- package/dist/locationShare.js +46 -0
- package/dist/locationShare.js.map +1 -1
- package/dist/utils/__tests__/ticketPrintPostageUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/ticketPrintPostageUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/ticketPrintPostageUtils.test.js +70 -0
- package/dist/utils/__tests__/ticketPrintPostageUtils.test.js.map +1 -0
- package/dist/utils/lobFlyerUtils.d.ts +2 -0
- package/dist/utils/lobFlyerUtils.d.ts.map +1 -1
- package/dist/utils/lobFlyerUtils.js +8 -0
- package/dist/utils/lobFlyerUtils.js.map +1 -1
- package/dist/utils/qrCodeUtils.d.ts +17 -0
- package/dist/utils/qrCodeUtils.d.ts.map +1 -1
- package/dist/utils/qrCodeUtils.js +20 -0
- package/dist/utils/qrCodeUtils.js.map +1 -1
- package/dist/utils/ticketPrintPostageUtils.d.ts +27 -0
- package/dist/utils/ticketPrintPostageUtils.d.ts.map +1 -0
- package/dist/utils/ticketPrintPostageUtils.js +65 -0
- package/dist/utils/ticketPrintPostageUtils.js.map +1 -0
- package/package.json +1 -1
- package/prisma/schema.prisma +96 -0
- package/src/__tests__/locationShare.test.ts +29 -0
- package/src/definitions.ts +8 -0
- package/src/extendedSchemas.ts +64 -0
- package/src/index.ts +1 -0
- package/src/locationShare.ts +73 -0
- package/src/utils/__tests__/ticketPrintPostageUtils.test.ts +95 -0
- package/src/utils/lobFlyerUtils.ts +7 -0
- package/src/utils/qrCodeUtils.ts +26 -0
- package/src/utils/ticketPrintPostageUtils.ts +81 -0
package/src/utils/qrCodeUtils.ts
CHANGED
|
@@ -24,3 +24,29 @@ export async function createQrCodeImage(qrData: string): Promise<string> {
|
|
|
24
24
|
errorCorrectionLevel: 'high',
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Door-scan admission QR payload for a ticket — the same shape the buyer's
|
|
30
|
+
* "show at door" QR encodes (bash-app `MyTicketInlineQr.tsx`, built inline as
|
|
31
|
+
* `checkInData` for `encodeTicketQrPayload`) and what the API's door-verify
|
|
32
|
+
* parser reads (`parseTicketQrScanPayload` in `ticketApi.ts`, which requires
|
|
33
|
+
* string `eventId`/`ticketId` and reads an optional `qrToken`).
|
|
34
|
+
*
|
|
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
|
|
37
|
+
* verification path, no schema changes to `qrToken` handling.
|
|
38
|
+
*/
|
|
39
|
+
export function encodeTicketDoorQrPayload(args: {
|
|
40
|
+
eventId: string;
|
|
41
|
+
ticketId: string;
|
|
42
|
+
ownerUserId?: string | null;
|
|
43
|
+
qrToken?: string | null;
|
|
44
|
+
}): string {
|
|
45
|
+
return JSON.stringify({
|
|
46
|
+
eventId: args.eventId,
|
|
47
|
+
userId: args.ownerUserId ?? "",
|
|
48
|
+
ticketId: args.ticketId,
|
|
49
|
+
qrToken: args.qrToken ?? undefined,
|
|
50
|
+
timestamp: new Date().toISOString(),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Buyer-facing surcharge for physical ticket delivery (mail-to-buyer or venue
|
|
3
|
+
* will-call), both fulfilled as individually-addressed Lob postcards — one
|
|
4
|
+
* ticket = one piece, same product used by Flyer Blast's addressed mail path.
|
|
5
|
+
*
|
|
6
|
+
* Reuses the Lob per-piece cost table from `lobFlyerUtils.ts` rather than
|
|
7
|
+
* duplicating pricing — same "verify before production" caveat applies here.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { TicketDeliveryMethod, TicketPrintOrderStatus } from "@prisma/client";
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
quoteLobAddressedPostageCents,
|
|
14
|
+
type LobPostcardSizeKey,
|
|
15
|
+
} from "./lobFlyerUtils.js";
|
|
16
|
+
|
|
17
|
+
/** Surcharge for a single printed/mailed ticket piece (integer cents). */
|
|
18
|
+
export function ticketPrintSurchargeCentsPerPiece(size: LobPostcardSizeKey): number {
|
|
19
|
+
return quoteLobAddressedPostageCents(size, 1);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Total buyer-facing surcharge (integer cents) for `quantity` physical ticket
|
|
24
|
+
* pieces of the given size — used as the Stripe checkout line item amount.
|
|
25
|
+
*/
|
|
26
|
+
export function ticketPrintSurchargeCentsForQuantity(
|
|
27
|
+
size: LobPostcardSizeKey,
|
|
28
|
+
quantity: number
|
|
29
|
+
): number {
|
|
30
|
+
if (quantity < 1) return 0;
|
|
31
|
+
return quoteLobAddressedPostageCents(size, quantity);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Buyer-facing badge copy for a ticket's physical delivery status — shared by
|
|
36
|
+
* My Tickets and the ticket details view so both surfaces stay in sync.
|
|
37
|
+
* `null`/`undefined` (Digital) means no badge should render.
|
|
38
|
+
*/
|
|
39
|
+
export function ticketDeliveryStatusLabel(
|
|
40
|
+
printOrder:
|
|
41
|
+
| { deliveryMethod: TicketDeliveryMethod; status: TicketPrintOrderStatus }
|
|
42
|
+
| null
|
|
43
|
+
| undefined
|
|
44
|
+
): string | null {
|
|
45
|
+
if (!printOrder) return null;
|
|
46
|
+
const { deliveryMethod, status } = printOrder;
|
|
47
|
+
|
|
48
|
+
if (
|
|
49
|
+
status === TicketPrintOrderStatus.CancelledBeforeSubmit ||
|
|
50
|
+
status === TicketPrintOrderStatus.CancelledAfterSubmit
|
|
51
|
+
) {
|
|
52
|
+
return "Physical ticket cancelled";
|
|
53
|
+
}
|
|
54
|
+
if (status === TicketPrintOrderStatus.Failed) {
|
|
55
|
+
return "Physical ticket delivery failed — contact the host";
|
|
56
|
+
}
|
|
57
|
+
if (deliveryMethod === TicketDeliveryMethod.VenueWillCall) {
|
|
58
|
+
switch (status) {
|
|
59
|
+
case TicketPrintOrderStatus.Queued:
|
|
60
|
+
return "Pick up at venue: will-call (printing soon)";
|
|
61
|
+
case TicketPrintOrderStatus.Delivered:
|
|
62
|
+
return "Pick up at venue: will-call (ready)";
|
|
63
|
+
default:
|
|
64
|
+
return "Pick up at venue: will-call";
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// PhysicalMail
|
|
68
|
+
switch (status) {
|
|
69
|
+
case TicketPrintOrderStatus.Queued:
|
|
70
|
+
case TicketPrintOrderStatus.Submitted:
|
|
71
|
+
return "Mailed ticket: printing";
|
|
72
|
+
case TicketPrintOrderStatus.Printed:
|
|
73
|
+
return "Mailed ticket: printed";
|
|
74
|
+
case TicketPrintOrderStatus.InTransit:
|
|
75
|
+
return "Mailed ticket: in transit";
|
|
76
|
+
case TicketPrintOrderStatus.Delivered:
|
|
77
|
+
return "Mailed ticket: delivered";
|
|
78
|
+
default:
|
|
79
|
+
return "Mailed ticket";
|
|
80
|
+
}
|
|
81
|
+
}
|