@bash-app/bash-common 30.226.0 → 30.227.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/aiApproval.d.ts +25 -0
- package/dist/aiApproval.d.ts.map +1 -1
- package/dist/aiApproval.js +32 -4
- package/dist/aiApproval.js.map +1 -1
- package/dist/extendedSchemas.d.ts +43 -1
- package/dist/extendedSchemas.d.ts.map +1 -1
- package/dist/extendedSchemas.js +22 -0
- package/dist/extendedSchemas.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/__tests__/flyerUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/flyerUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/flyerUtils.test.js +49 -0
- package/dist/utils/__tests__/flyerUtils.test.js.map +1 -0
- package/dist/utils/flyerUtils.d.ts +42 -0
- package/dist/utils/flyerUtils.d.ts.map +1 -0
- package/dist/utils/flyerUtils.js +104 -0
- package/dist/utils/flyerUtils.js.map +1 -0
- package/package.json +1 -1
- package/prisma/schema.prisma +319 -50
- package/src/aiApproval.ts +118 -0
- package/src/extendedSchemas.ts +45 -1
- package/src/index.ts +14 -0
- package/src/utils/__tests__/flyerUtils.test.ts +70 -0
- package/src/utils/flyerUtils.ts +137 -0
- package/dist/utils/__tests__/cancellationPolicyRefundResolver.test.d.ts +0 -6
- package/dist/utils/__tests__/cancellationPolicyRefundResolver.test.d.ts.map +0 -1
- package/dist/utils/__tests__/cancellationPolicyRefundResolver.test.js +0 -104
- package/dist/utils/__tests__/cancellationPolicyRefundResolver.test.js.map +0 -1
- package/dist/utils/service/serviceRateDBUtils.d.ts +0 -1
- package/dist/utils/service/serviceRateDBUtils.d.ts.map +0 -1
- package/dist/utils/service/serviceRateDBUtils.js +0 -159
- package/dist/utils/service/serviceRateDBUtils.js.map +0 -1
- package/prisma/migrations/add_bash_availability.sql +0 -53
- package/prisma/migrations/add_bashcash_pricing_to_ticket_tier.sql +0 -15
- package/prisma/migrations/add_bashpoints_purchase_tracking.sql +0 -33
- package/prisma/migrations/add_event_group_allow_auto_join.sql +0 -17
- package/prisma/migrations/add_group_member_status_not_going_maybe.sql +0 -5
- package/prisma/migrations/add_groups_and_momentum.sql +0 -135
- package/prisma/migrations/add_groups_momentum_phase0_4.sql +0 -200
- package/prisma/migrations/add_new_feature_tables.sql +0 -140
- package/prisma/migrations/add_pricing_type_enum.sql +0 -88
- package/prisma/migrations/add_tier_privacy_and_fee_handling.sql +0 -29
- package/prisma/migrations/diagnostic_bashcash_columns.sql +0 -157
- package/prisma/migrations/fix_bashcash_referral_code_schema_mismatch.sql +0 -81
- package/prisma/migrations/rename_bashcash_to_bashpoints.sql +0 -183
- package/prisma/migrations/rename_bashcredits_to_bashpoints.sql +0 -96
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* USPS EDDM flat minimum: 6.125" × 11" (one dimension must be at least 11").
|
|
3
|
+
* Product standard used by Flyer Blast: 6.25" × 11" portrait.
|
|
4
|
+
*/
|
|
5
|
+
export const FLYER_EDDM_WIDTH_IN = 6.25;
|
|
6
|
+
export const FLYER_EDDM_HEIGHT_IN = 11;
|
|
7
|
+
export const FLYER_EDDM_MIN_WIDTH_IN = 6.125;
|
|
8
|
+
export const FLYER_EDDM_MIN_HEIGHT_IN = 11;
|
|
9
|
+
/** USPS EDDM Retail per-piece postage (2026 — verify periodically). */
|
|
10
|
+
export const USPS_EDDM_RETAIL_PER_PIECE_CENTS = 24.7;
|
|
11
|
+
/**
|
|
12
|
+
* USPS EDDM Retail minimum mailpieces per mailing (saturation).
|
|
13
|
+
* Aligns with starter tier lower bound in `FLYER_PRICING_TIERS`.
|
|
14
|
+
*/
|
|
15
|
+
export const USPS_EDDM_RETAIL_MIN_MAILPIECES = 200;
|
|
16
|
+
export const FLYER_PRICING_TIERS = [
|
|
17
|
+
{
|
|
18
|
+
tierId: "starter",
|
|
19
|
+
label: "Starter",
|
|
20
|
+
minHouseholds: 200,
|
|
21
|
+
maxHouseholds: 499,
|
|
22
|
+
hostPriceCents: 14900,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
tierId: "neighborhood",
|
|
26
|
+
label: "Neighborhood",
|
|
27
|
+
minHouseholds: 500,
|
|
28
|
+
maxHouseholds: 1499,
|
|
29
|
+
hostPriceCents: 32900,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
tierId: "district",
|
|
33
|
+
label: "District",
|
|
34
|
+
minHouseholds: 1500,
|
|
35
|
+
maxHouseholds: 3999,
|
|
36
|
+
hostPriceCents: 69900,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
tierId: "metro",
|
|
40
|
+
label: "Metro",
|
|
41
|
+
minHouseholds: 4000,
|
|
42
|
+
maxHouseholds: 9999,
|
|
43
|
+
hostPriceCents: 139900,
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
/** Default sponsor slot list prices (Utah / intermountain — cents). */
|
|
47
|
+
export const FLYER_SPONSOR_DEFAULT_FEATURED_CENTS = 10000;
|
|
48
|
+
export const FLYER_SPONSOR_DEFAULT_SUPPORTING_CENTS = 5000;
|
|
49
|
+
export function isEddmFlatSizeCompliant(widthIn, heightIn) {
|
|
50
|
+
const long = Math.max(widthIn, heightIn);
|
|
51
|
+
const short = Math.min(widthIn, heightIn);
|
|
52
|
+
return long >= FLYER_EDDM_MIN_HEIGHT_IN && short >= FLYER_EDDM_MIN_WIDTH_IN;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Map total selected households to a pricing tier. Returns null if below minimum (200 for EDDM Retail).
|
|
56
|
+
*/
|
|
57
|
+
export function quoteFlyerTierForHouseholds(totalHouseholds) {
|
|
58
|
+
if (totalHouseholds < FLYER_PRICING_TIERS[0].minHouseholds) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
for (const tier of FLYER_PRICING_TIERS) {
|
|
62
|
+
if (totalHouseholds >= tier.minHouseholds &&
|
|
63
|
+
totalHouseholds <= tier.maxHouseholds) {
|
|
64
|
+
return tier;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Above metro max — use metro as ceiling for MVP
|
|
68
|
+
const last = FLYER_PRICING_TIERS[FLYER_PRICING_TIERS.length - 1];
|
|
69
|
+
if (totalHouseholds > last.maxHouseholds) {
|
|
70
|
+
return last;
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
export function computeHostTotalAfterSponsors(printPostageCostCents, sponsorRevenueCents) {
|
|
75
|
+
return Math.max(0, printPostageCostCents - sponsorRevenueCents);
|
|
76
|
+
}
|
|
77
|
+
const EARTH_RADIUS_MI = 3958.8;
|
|
78
|
+
/** Haversine distance in miles between two WGS84 points. */
|
|
79
|
+
export function distanceMiles(lat1, lng1, lat2, lng2) {
|
|
80
|
+
const rlat1 = (lat1 * Math.PI) / 180;
|
|
81
|
+
const rlat2 = (lat2 * Math.PI) / 180;
|
|
82
|
+
const dLat = rlat2 - rlat1;
|
|
83
|
+
const dLng = ((lng2 - lng1) * Math.PI) / 180;
|
|
84
|
+
const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) +
|
|
85
|
+
Math.cos(rlat1) * Math.cos(rlat2) * Math.sin(dLng / 2) * Math.sin(dLng / 2);
|
|
86
|
+
const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
|
|
87
|
+
return EARTH_RADIUS_MI * c;
|
|
88
|
+
}
|
|
89
|
+
/** URL path for the public QR scan endpoint (prepend API origin in clients). */
|
|
90
|
+
export function flyerQrScanPath(campaignQrSlug) {
|
|
91
|
+
return `/api/flyer/qr-scan?c=${encodeURIComponent(campaignQrSlug)}`;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Short slug for campaign QR (avoid ambiguous chars); unique enforced in DB.
|
|
95
|
+
*/
|
|
96
|
+
export function generateFlyerCampaignSlug() {
|
|
97
|
+
const alphabet = "23456789abcdefghjkmnpqrstuvwxyz";
|
|
98
|
+
let out = "fb";
|
|
99
|
+
for (let i = 0; i < 12; i++) {
|
|
100
|
+
out += alphabet[Math.floor(Math.random() * alphabet.length)];
|
|
101
|
+
}
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=flyerUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flyerUtils.js","sourceRoot":"","sources":["../../src/utils/flyerUtils.ts"],"names":[],"mappings":"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"}
|