@bash-app/bash-common 30.265.0 → 30.273.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__/statusEnums.test.js +1 -0
- package/dist/__tests__/statusEnums.test.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/mirroredPrismaEnums.d.ts +1 -0
- package/dist/mirroredPrismaEnums.d.ts.map +1 -1
- package/dist/mirroredPrismaEnums.js +1 -0
- package/dist/mirroredPrismaEnums.js.map +1 -1
- package/dist/partnerStoreTypes.d.ts +93 -3
- package/dist/partnerStoreTypes.d.ts.map +1 -1
- package/dist/partnerStoreTypes.js +39 -1
- package/dist/partnerStoreTypes.js.map +1 -1
- package/dist/requestAuthUser.d.ts.map +1 -1
- package/dist/requestAuthUser.js +5 -3
- package/dist/requestAuthUser.js.map +1 -1
- package/dist/utils/__tests__/eventCitySlug.test.d.ts +2 -0
- package/dist/utils/__tests__/eventCitySlug.test.d.ts.map +1 -0
- package/dist/utils/__tests__/eventCitySlug.test.js +12 -0
- package/dist/utils/__tests__/eventCitySlug.test.js.map +1 -0
- package/dist/utils/__tests__/localPartnerHours.test.d.ts +2 -0
- package/dist/utils/__tests__/localPartnerHours.test.d.ts.map +1 -0
- package/dist/utils/__tests__/localPartnerHours.test.js +35 -0
- package/dist/utils/__tests__/localPartnerHours.test.js.map +1 -0
- package/dist/utils/__tests__/orgPromotionalPackageUtils.test.d.ts +2 -0
- package/dist/utils/__tests__/orgPromotionalPackageUtils.test.d.ts.map +1 -0
- package/dist/utils/__tests__/orgPromotionalPackageUtils.test.js +88 -0
- package/dist/utils/__tests__/orgPromotionalPackageUtils.test.js.map +1 -0
- package/dist/utils/eventCitySlug.d.ts +11 -0
- package/dist/utils/eventCitySlug.d.ts.map +1 -0
- package/dist/utils/eventCitySlug.js +20 -0
- package/dist/utils/eventCitySlug.js.map +1 -0
- package/dist/utils/localPartnerHours.d.ts +12 -0
- package/dist/utils/localPartnerHours.d.ts.map +1 -0
- package/dist/utils/localPartnerHours.js +92 -0
- package/dist/utils/localPartnerHours.js.map +1 -0
- package/dist/utils/orgPromotionalPackageUtils.d.ts +100 -0
- package/dist/utils/orgPromotionalPackageUtils.d.ts.map +1 -0
- package/dist/utils/orgPromotionalPackageUtils.js +201 -0
- package/dist/utils/orgPromotionalPackageUtils.js.map +1 -0
- package/package.json +1 -1
- package/prisma/schema.prisma +137 -9
- package/src/__tests__/statusEnums.test.ts +1 -0
- package/src/index.ts +5 -0
- package/src/mirroredPrismaEnums.ts +1 -0
- package/src/partnerStoreTypes.ts +134 -3
- package/src/requestAuthUser.ts +5 -3
- package/src/utils/__tests__/eventCitySlug.test.ts +17 -0
- package/src/utils/__tests__/localPartnerHours.test.ts +45 -0
- package/src/utils/__tests__/orgPromotionalPackageUtils.test.ts +115 -0
- package/src/utils/eventCitySlug.ts +23 -0
- package/src/utils/localPartnerHours.ts +98 -0
- package/src/utils/orgPromotionalPackageUtils.ts +278 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { generateSlug } from "./slugUtils.js";
|
|
2
|
+
/**
|
|
3
|
+
* Derive a partner-store city slug from bash event location text.
|
|
4
|
+
* Matches admin `citySlug` conventions (kebab-case).
|
|
5
|
+
*/
|
|
6
|
+
export function resolveEventCitySlug(context) {
|
|
7
|
+
const city = context.city?.trim();
|
|
8
|
+
if (!city)
|
|
9
|
+
return null;
|
|
10
|
+
return generateSlug(city);
|
|
11
|
+
}
|
|
12
|
+
export function resolveEventStateSlug(context) {
|
|
13
|
+
const state = context.state?.trim();
|
|
14
|
+
if (!state)
|
|
15
|
+
return null;
|
|
16
|
+
if (state.length === 2)
|
|
17
|
+
return state.toLowerCase();
|
|
18
|
+
return generateSlug(state);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=eventCitySlug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventCitySlug.js","sourceRoot":"","sources":["../../src/utils/eventCitySlug.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAO9C;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAyB;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IAClC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAyB;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IACnD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Weekly hours shape aligned with service profile hours config. */
|
|
2
|
+
export type LocalPartnerHoursConfig = {
|
|
3
|
+
hours: Record<string, {
|
|
4
|
+
open: string;
|
|
5
|
+
close: string;
|
|
6
|
+
}[]>;
|
|
7
|
+
openDays: Record<string, boolean>;
|
|
8
|
+
};
|
|
9
|
+
/** Returns null when hours are not configured; true/false when they are. */
|
|
10
|
+
export declare function isLocalPartnerOpenNow(businessHours: unknown, timezone: string | null | undefined, now?: Date): boolean | null;
|
|
11
|
+
export declare function localPartnerHasBusinessHours(businessHours: unknown): boolean;
|
|
12
|
+
//# sourceMappingURL=localPartnerHours.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localPartnerHours.d.ts","sourceRoot":"","sources":["../../src/utils/localPartnerHours.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IACzD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AA6DF,4EAA4E;AAC5E,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,OAAO,EACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,GAAG,GAAE,IAAiB,GACrB,OAAO,GAAG,IAAI,CAuBhB;AAED,wBAAgB,4BAA4B,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAE5E"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
const WEEKDAYS = [
|
|
2
|
+
"Sunday",
|
|
3
|
+
"Monday",
|
|
4
|
+
"Tuesday",
|
|
5
|
+
"Wednesday",
|
|
6
|
+
"Thursday",
|
|
7
|
+
"Friday",
|
|
8
|
+
"Saturday",
|
|
9
|
+
];
|
|
10
|
+
function parseMinutes(value) {
|
|
11
|
+
const trimmed = value.trim();
|
|
12
|
+
if (!trimmed)
|
|
13
|
+
return null;
|
|
14
|
+
const match = /^(\d{1,2}):(\d{2})$/.exec(trimmed);
|
|
15
|
+
if (!match)
|
|
16
|
+
return null;
|
|
17
|
+
const hours = Number(match[1]);
|
|
18
|
+
const minutes = Number(match[2]);
|
|
19
|
+
if (hours > 23 || minutes > 59)
|
|
20
|
+
return null;
|
|
21
|
+
return hours * 60 + minutes;
|
|
22
|
+
}
|
|
23
|
+
function parseHoursConfig(raw) {
|
|
24
|
+
if (!raw || typeof raw !== "object")
|
|
25
|
+
return null;
|
|
26
|
+
const config = raw;
|
|
27
|
+
if (!config.hours || typeof config.hours !== "object")
|
|
28
|
+
return null;
|
|
29
|
+
if (!config.openDays || typeof config.openDays !== "object")
|
|
30
|
+
return null;
|
|
31
|
+
return {
|
|
32
|
+
hours: config.hours,
|
|
33
|
+
openDays: config.openDays,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function getZonedWeekdayAndMinutes(now, timeZone) {
|
|
37
|
+
try {
|
|
38
|
+
const formatter = new Intl.DateTimeFormat("en-US", {
|
|
39
|
+
timeZone,
|
|
40
|
+
weekday: "long",
|
|
41
|
+
hour: "2-digit",
|
|
42
|
+
minute: "2-digit",
|
|
43
|
+
hour12: false,
|
|
44
|
+
});
|
|
45
|
+
const parts = formatter.formatToParts(now);
|
|
46
|
+
const weekday = parts.find((p) => p.type === "weekday")?.value;
|
|
47
|
+
const hour = parts.find((p) => p.type === "hour")?.value;
|
|
48
|
+
const minute = parts.find((p) => p.type === "minute")?.value;
|
|
49
|
+
if (!weekday || hour == null || minute == null)
|
|
50
|
+
return null;
|
|
51
|
+
if (!WEEKDAYS.includes(weekday))
|
|
52
|
+
return null;
|
|
53
|
+
return {
|
|
54
|
+
weekday: weekday,
|
|
55
|
+
minutes: Number(hour) * 60 + Number(minute),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/** Returns null when hours are not configured; true/false when they are. */
|
|
63
|
+
export function isLocalPartnerOpenNow(businessHours, timezone, now = new Date()) {
|
|
64
|
+
const config = parseHoursConfig(businessHours);
|
|
65
|
+
if (!config)
|
|
66
|
+
return null;
|
|
67
|
+
const tz = timezone?.trim() || "America/New_York";
|
|
68
|
+
const zoned = getZonedWeekdayAndMinutes(now, tz);
|
|
69
|
+
if (!zoned)
|
|
70
|
+
return null;
|
|
71
|
+
if (config.openDays[zoned.weekday] === false)
|
|
72
|
+
return false;
|
|
73
|
+
const slots = config.hours[zoned.weekday] ?? [];
|
|
74
|
+
for (const slot of slots) {
|
|
75
|
+
const open = parseMinutes(slot.open);
|
|
76
|
+
const close = parseMinutes(slot.close);
|
|
77
|
+
if (open == null || close == null)
|
|
78
|
+
continue;
|
|
79
|
+
if (close > open) {
|
|
80
|
+
if (zoned.minutes >= open && zoned.minutes < close)
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
else if (zoned.minutes >= open || zoned.minutes < close) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
export function localPartnerHasBusinessHours(businessHours) {
|
|
90
|
+
return parseHoursConfig(businessHours) != null;
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=localPartnerHours.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"localPartnerHours.js","sourceRoot":"","sources":["../../src/utils/localPartnerHours.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Org Promotional Packages — hosts pay orgs to endorse events to org members.
|
|
3
|
+
*/
|
|
4
|
+
export type OrgPromotionalPackageTierId = "community" | "spotlight" | "featured";
|
|
5
|
+
export type OrgPromoIneligibleReason = "event_not_published" | "event_ended" | "event_cancelled" | "event_org_only" | "event_not_ticketable" | "event_missing_dates";
|
|
6
|
+
export interface OrgPromotionalPackageTerms {
|
|
7
|
+
tierId: OrgPromotionalPackageTierId;
|
|
8
|
+
maxReach: number;
|
|
9
|
+
orgFeeCents: number;
|
|
10
|
+
bashPlatformFeeCents: number;
|
|
11
|
+
}
|
|
12
|
+
export interface OrgPromotionalPackageRates {
|
|
13
|
+
community?: {
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
orgFeeCents: number;
|
|
16
|
+
};
|
|
17
|
+
spotlight?: {
|
|
18
|
+
enabled: boolean;
|
|
19
|
+
orgFeeCents: number;
|
|
20
|
+
};
|
|
21
|
+
featured?: {
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
orgFeeCents: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
export declare const ORG_PROMO_PLATFORM_FEES_CENTS: Record<OrgPromotionalPackageTierId, number>;
|
|
27
|
+
/** Runtime cap; featured uses MAX_REACH_UNLIMITED_SNAPSHOT in DB. */
|
|
28
|
+
export declare const ORG_PROMO_MAX_REACH: Record<OrgPromotionalPackageTierId, number>;
|
|
29
|
+
/** Stored on OrgPromotionalPackage.maxReach when tier is featured. */
|
|
30
|
+
export declare const ORG_PROMO_MAX_REACH_UNLIMITED_SNAPSHOT = 2147483647;
|
|
31
|
+
export declare const ORG_PROMO_MAX_ORG_FEE_CENTS = 500000;
|
|
32
|
+
export declare const ORG_PROMO_HOST_NOTE_MAX_LENGTH = 500;
|
|
33
|
+
export declare const ORG_PROMO_OPEN_STATUSES: readonly ["PENDING_APPROVAL", "ACTIVE"];
|
|
34
|
+
export declare const ORG_PROMO_TIER_IDS: OrgPromotionalPackageTierId[];
|
|
35
|
+
export declare const ORG_PROMO_PI_METADATA_TYPE = "org_promotional_package";
|
|
36
|
+
export declare const FCM_MULTICAST_MAX_TOKENS = 500;
|
|
37
|
+
export declare function orgPromoMaxReachForSnapshot(tierId: OrgPromotionalPackageTierId): number;
|
|
38
|
+
export declare function isOrgPromoTierId(value: string): value is OrgPromotionalPackageTierId;
|
|
39
|
+
export declare function parseOrgPromotionalPackageRates(raw: unknown): OrgPromotionalPackageRates | null;
|
|
40
|
+
export declare function orgHasEnabledPromoTier(rates: OrgPromotionalPackageRates | null): boolean;
|
|
41
|
+
export declare function assertOrgPromoRatesAllowEnable(rates: OrgPromotionalPackageRates, stripeConnectedAccountId: string | null): {
|
|
42
|
+
ok: true;
|
|
43
|
+
} | {
|
|
44
|
+
error: "org_connect_required";
|
|
45
|
+
};
|
|
46
|
+
export declare function buildOrgPromoPackageTerms(tierId: OrgPromotionalPackageTierId, rates: OrgPromotionalPackageRates): OrgPromotionalPackageTerms | null;
|
|
47
|
+
export declare function orgPromoPackageTotalCents(terms: OrgPromotionalPackageTerms): number;
|
|
48
|
+
/** PaymentIntent.metadata shape written by createOrgPromoPaymentIntent. */
|
|
49
|
+
export type OrgPromoPaymentIntentMetadata = {
|
|
50
|
+
type?: string;
|
|
51
|
+
organizationId?: string;
|
|
52
|
+
bashEventId?: string;
|
|
53
|
+
tierId?: string;
|
|
54
|
+
hostUserId?: string;
|
|
55
|
+
orgFeeCents?: string;
|
|
56
|
+
bashPlatformFeeCents?: string;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Build package fee snapshot from an authorized PI (confirm-paid).
|
|
60
|
+
* Amount and metadata must match what was set at intent time.
|
|
61
|
+
*/
|
|
62
|
+
export declare function orgPromoPackageTermsFromPaymentIntent(pi: {
|
|
63
|
+
amount: number | null;
|
|
64
|
+
metadata?: OrgPromoPaymentIntentMetadata | null;
|
|
65
|
+
}, expectedTierId: OrgPromotionalPackageTierId): {
|
|
66
|
+
ok: true;
|
|
67
|
+
terms: OrgPromotionalPackageTerms;
|
|
68
|
+
totalCents: number;
|
|
69
|
+
} | {
|
|
70
|
+
ok: false;
|
|
71
|
+
error: string;
|
|
72
|
+
};
|
|
73
|
+
export declare function selectMembersForOrgPromoReach<T extends {
|
|
74
|
+
joinedAt?: Date | string | null;
|
|
75
|
+
}>(members: T[], maxReach: number): T[];
|
|
76
|
+
export declare function chunkArray<T>(items: T[], size: number): T[][];
|
|
77
|
+
export type BashEventOrgPromoEligibilityInput = {
|
|
78
|
+
status?: string | null;
|
|
79
|
+
isApproved?: boolean | null;
|
|
80
|
+
startDateTime?: Date | string | null;
|
|
81
|
+
endDateTime?: Date | string | null;
|
|
82
|
+
requiresOrgMembership?: boolean | null;
|
|
83
|
+
ticketTierCount?: number;
|
|
84
|
+
allowDonations?: boolean | null;
|
|
85
|
+
};
|
|
86
|
+
export declare function isBashEventEligibleForOrgPromo(event: BashEventOrgPromoEligibilityInput): {
|
|
87
|
+
eligible: true;
|
|
88
|
+
} | {
|
|
89
|
+
eligible: false;
|
|
90
|
+
reason: OrgPromoIneligibleReason;
|
|
91
|
+
};
|
|
92
|
+
export declare function formatOrgPromoRatesForHost(rates: OrgPromotionalPackageRates | null, connected: boolean): Array<{
|
|
93
|
+
tierId: OrgPromotionalPackageTierId;
|
|
94
|
+
enabled: boolean;
|
|
95
|
+
orgFeeCents: number;
|
|
96
|
+
platformFeeCents: number;
|
|
97
|
+
totalCents: number;
|
|
98
|
+
maxReach: number;
|
|
99
|
+
}>;
|
|
100
|
+
//# sourceMappingURL=orgPromotionalPackageUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orgPromotionalPackageUtils.d.ts","sourceRoot":"","sources":["../../src/utils/orgPromotionalPackageUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Org Promotional Packages — hosts pay orgs to endorse events to org members.
|
|
3
|
+
*/
|
|
4
|
+
export const ORG_PROMO_PLATFORM_FEES_CENTS = {
|
|
5
|
+
community: 300,
|
|
6
|
+
spotlight: 700,
|
|
7
|
+
featured: 1500,
|
|
8
|
+
};
|
|
9
|
+
/** Runtime cap; featured uses MAX_REACH_UNLIMITED_SNAPSHOT in DB. */
|
|
10
|
+
export const ORG_PROMO_MAX_REACH = {
|
|
11
|
+
community: 500,
|
|
12
|
+
spotlight: 2000,
|
|
13
|
+
featured: Number.POSITIVE_INFINITY,
|
|
14
|
+
};
|
|
15
|
+
/** Stored on OrgPromotionalPackage.maxReach when tier is featured. */
|
|
16
|
+
export const ORG_PROMO_MAX_REACH_UNLIMITED_SNAPSHOT = 2_147_483_647;
|
|
17
|
+
export const ORG_PROMO_MAX_ORG_FEE_CENTS = 500_000;
|
|
18
|
+
export const ORG_PROMO_HOST_NOTE_MAX_LENGTH = 500;
|
|
19
|
+
export const ORG_PROMO_OPEN_STATUSES = ["PENDING_APPROVAL", "ACTIVE"];
|
|
20
|
+
export const ORG_PROMO_TIER_IDS = [
|
|
21
|
+
"community",
|
|
22
|
+
"spotlight",
|
|
23
|
+
"featured",
|
|
24
|
+
];
|
|
25
|
+
export const ORG_PROMO_PI_METADATA_TYPE = "org_promotional_package";
|
|
26
|
+
export const FCM_MULTICAST_MAX_TOKENS = 500;
|
|
27
|
+
export function orgPromoMaxReachForSnapshot(tierId) {
|
|
28
|
+
const reach = ORG_PROMO_MAX_REACH[tierId];
|
|
29
|
+
if (reach === Number.POSITIVE_INFINITY) {
|
|
30
|
+
return ORG_PROMO_MAX_REACH_UNLIMITED_SNAPSHOT;
|
|
31
|
+
}
|
|
32
|
+
return reach;
|
|
33
|
+
}
|
|
34
|
+
export function isOrgPromoTierId(value) {
|
|
35
|
+
return ORG_PROMO_TIER_IDS.includes(value);
|
|
36
|
+
}
|
|
37
|
+
export function parseOrgPromotionalPackageRates(raw) {
|
|
38
|
+
if (!raw || typeof raw !== "object")
|
|
39
|
+
return null;
|
|
40
|
+
const out = {};
|
|
41
|
+
for (const tierId of ORG_PROMO_TIER_IDS) {
|
|
42
|
+
const entry = raw[tierId];
|
|
43
|
+
if (entry === undefined)
|
|
44
|
+
continue;
|
|
45
|
+
if (!entry || typeof entry !== "object")
|
|
46
|
+
return null;
|
|
47
|
+
const e = entry;
|
|
48
|
+
if (typeof e.enabled !== "boolean")
|
|
49
|
+
return null;
|
|
50
|
+
if (typeof e.orgFeeCents !== "number" || !Number.isInteger(e.orgFeeCents))
|
|
51
|
+
return null;
|
|
52
|
+
if (e.orgFeeCents < 0 || e.orgFeeCents > ORG_PROMO_MAX_ORG_FEE_CENTS)
|
|
53
|
+
return null;
|
|
54
|
+
out[tierId] = { enabled: e.enabled, orgFeeCents: e.orgFeeCents };
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
export function orgHasEnabledPromoTier(rates) {
|
|
59
|
+
if (!rates)
|
|
60
|
+
return false;
|
|
61
|
+
return ORG_PROMO_TIER_IDS.some((t) => rates[t]?.enabled === true);
|
|
62
|
+
}
|
|
63
|
+
export function assertOrgPromoRatesAllowEnable(rates, stripeConnectedAccountId) {
|
|
64
|
+
if (!orgHasEnabledPromoTier(rates))
|
|
65
|
+
return { ok: true };
|
|
66
|
+
if (!stripeConnectedAccountId)
|
|
67
|
+
return { error: "org_connect_required" };
|
|
68
|
+
return { ok: true };
|
|
69
|
+
}
|
|
70
|
+
export function buildOrgPromoPackageTerms(tierId, rates) {
|
|
71
|
+
const tierRate = rates[tierId];
|
|
72
|
+
if (!tierRate?.enabled)
|
|
73
|
+
return null;
|
|
74
|
+
return {
|
|
75
|
+
tierId,
|
|
76
|
+
maxReach: ORG_PROMO_MAX_REACH[tierId],
|
|
77
|
+
orgFeeCents: tierRate.orgFeeCents,
|
|
78
|
+
bashPlatformFeeCents: ORG_PROMO_PLATFORM_FEES_CENTS[tierId],
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
export function orgPromoPackageTotalCents(terms) {
|
|
82
|
+
return terms.orgFeeCents + terms.bashPlatformFeeCents;
|
|
83
|
+
}
|
|
84
|
+
function parseMetadataInt(value) {
|
|
85
|
+
if (value === undefined || value === "")
|
|
86
|
+
return null;
|
|
87
|
+
const n = Number.parseInt(value, 10);
|
|
88
|
+
if (!Number.isInteger(n) || n < 0)
|
|
89
|
+
return null;
|
|
90
|
+
return n;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Build package fee snapshot from an authorized PI (confirm-paid).
|
|
94
|
+
* Amount and metadata must match what was set at intent time.
|
|
95
|
+
*/
|
|
96
|
+
export function orgPromoPackageTermsFromPaymentIntent(pi, expectedTierId) {
|
|
97
|
+
const m = pi.metadata ?? {};
|
|
98
|
+
if (m.type !== ORG_PROMO_PI_METADATA_TYPE) {
|
|
99
|
+
return { ok: false, error: "invalid_payment_type" };
|
|
100
|
+
}
|
|
101
|
+
if (!isOrgPromoTierId(m.tierId ?? "") || m.tierId !== expectedTierId) {
|
|
102
|
+
return { ok: false, error: "payment_tier_mismatch" };
|
|
103
|
+
}
|
|
104
|
+
const orgFeeCents = parseMetadataInt(m.orgFeeCents);
|
|
105
|
+
const bashPlatformFeeCents = parseMetadataInt(m.bashPlatformFeeCents);
|
|
106
|
+
if (orgFeeCents === null || bashPlatformFeeCents === null) {
|
|
107
|
+
return { ok: false, error: "invalid_payment_amounts" };
|
|
108
|
+
}
|
|
109
|
+
if (orgFeeCents > ORG_PROMO_MAX_ORG_FEE_CENTS) {
|
|
110
|
+
return { ok: false, error: "invalid_payment_amounts" };
|
|
111
|
+
}
|
|
112
|
+
const expectedPlatform = ORG_PROMO_PLATFORM_FEES_CENTS[expectedTierId];
|
|
113
|
+
if (bashPlatformFeeCents !== expectedPlatform) {
|
|
114
|
+
return { ok: false, error: "invalid_platform_fee" };
|
|
115
|
+
}
|
|
116
|
+
const totalCents = orgFeeCents + bashPlatformFeeCents;
|
|
117
|
+
if (totalCents < 50) {
|
|
118
|
+
return { ok: false, error: "invalid_payment_amounts" };
|
|
119
|
+
}
|
|
120
|
+
if (pi.amount !== null && pi.amount !== totalCents) {
|
|
121
|
+
return { ok: false, error: "payment_amount_mismatch" };
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
ok: true,
|
|
125
|
+
totalCents,
|
|
126
|
+
terms: {
|
|
127
|
+
tierId: expectedTierId,
|
|
128
|
+
maxReach: ORG_PROMO_MAX_REACH[expectedTierId],
|
|
129
|
+
orgFeeCents,
|
|
130
|
+
bashPlatformFeeCents,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
export function selectMembersForOrgPromoReach(members, maxReach) {
|
|
135
|
+
const sorted = [...members].sort((a, b) => {
|
|
136
|
+
const ta = a.joinedAt ? new Date(a.joinedAt).getTime() : 0;
|
|
137
|
+
const tb = b.joinedAt ? new Date(b.joinedAt).getTime() : 0;
|
|
138
|
+
return ta - tb;
|
|
139
|
+
});
|
|
140
|
+
if (maxReach === Number.POSITIVE_INFINITY || maxReach >= ORG_PROMO_MAX_REACH_UNLIMITED_SNAPSHOT) {
|
|
141
|
+
return sorted;
|
|
142
|
+
}
|
|
143
|
+
return sorted.slice(0, maxReach);
|
|
144
|
+
}
|
|
145
|
+
export function chunkArray(items, size) {
|
|
146
|
+
if (size <= 0)
|
|
147
|
+
return [items];
|
|
148
|
+
const chunks = [];
|
|
149
|
+
for (let i = 0; i < items.length; i += size) {
|
|
150
|
+
chunks.push(items.slice(i, i + size));
|
|
151
|
+
}
|
|
152
|
+
return chunks;
|
|
153
|
+
}
|
|
154
|
+
const TICKETABLE_STATUSES = new Set(["Published", "PreSale"]);
|
|
155
|
+
export function isBashEventEligibleForOrgPromo(event) {
|
|
156
|
+
const status = event.status ?? "Draft";
|
|
157
|
+
if (status === "Cancelled" || status === "Rejected" || status === "Archived") {
|
|
158
|
+
return { eligible: false, reason: "event_cancelled" };
|
|
159
|
+
}
|
|
160
|
+
if (!TICKETABLE_STATUSES.has(status)) {
|
|
161
|
+
return { eligible: false, reason: "event_not_published" };
|
|
162
|
+
}
|
|
163
|
+
if (event.isApproved === false) {
|
|
164
|
+
return { eligible: false, reason: "event_not_published" };
|
|
165
|
+
}
|
|
166
|
+
if (!event.startDateTime) {
|
|
167
|
+
return { eligible: false, reason: "event_missing_dates" };
|
|
168
|
+
}
|
|
169
|
+
if (event.endDateTime) {
|
|
170
|
+
const end = new Date(event.endDateTime);
|
|
171
|
+
if (end.getTime() < Date.now()) {
|
|
172
|
+
return { eligible: false, reason: "event_ended" };
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (event.requiresOrgMembership) {
|
|
176
|
+
return { eligible: false, reason: "event_org_only" };
|
|
177
|
+
}
|
|
178
|
+
const tierCount = event.ticketTierCount ?? 0;
|
|
179
|
+
if (tierCount === 0 && !event.allowDonations) {
|
|
180
|
+
return { eligible: false, reason: "event_not_ticketable" };
|
|
181
|
+
}
|
|
182
|
+
return { eligible: true };
|
|
183
|
+
}
|
|
184
|
+
export function formatOrgPromoRatesForHost(rates, connected) {
|
|
185
|
+
const parsed = rates ?? {};
|
|
186
|
+
return ORG_PROMO_TIER_IDS.map((tierId) => {
|
|
187
|
+
const tier = parsed[tierId];
|
|
188
|
+
const enabled = Boolean(tier?.enabled && connected);
|
|
189
|
+
const orgFeeCents = tier?.orgFeeCents ?? 0;
|
|
190
|
+
const platformFeeCents = ORG_PROMO_PLATFORM_FEES_CENTS[tierId];
|
|
191
|
+
return {
|
|
192
|
+
tierId,
|
|
193
|
+
enabled,
|
|
194
|
+
orgFeeCents,
|
|
195
|
+
platformFeeCents,
|
|
196
|
+
totalCents: orgFeeCents + platformFeeCents,
|
|
197
|
+
maxReach: orgPromoMaxReachForSnapshot(tierId),
|
|
198
|
+
};
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=orgPromotionalPackageUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orgPromotionalPackageUtils.js","sourceRoot":"","sources":["../../src/utils/orgPromotionalPackageUtils.ts"],"names":[],"mappings":"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"}
|