@bash-app/bash-common 30.272.0 → 30.274.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 { buildOrgPromoPackageTerms, chunkArray, isBashEventEligibleForOrgPromo, orgPromoPackageTotalCents, parseOrgPromotionalPackageRates, selectMembersForOrgPromoReach, } from "../orgPromotionalPackageUtils.js";
1
+ import { buildOrgPromoPackageTerms, chunkArray, isBashEventEligibleForOrgPromo, orgPromoPackageTermsFromPaymentIntent, orgPromoPackageTotalCents, ORG_PROMO_PI_METADATA_TYPE, parseOrgPromotionalPackageRates, selectMembersForOrgPromoReach, } from "../orgPromotionalPackageUtils.js";
2
2
  describe("orgPromotionalPackageUtils", () => {
3
3
  it("parses valid rates", () => {
4
4
  const rates = parseOrgPromotionalPackageRates({
@@ -43,6 +43,38 @@ describe("orgPromotionalPackageUtils", () => {
43
43
  expect(orgOnly.reason).toBe("event_org_only");
44
44
  }
45
45
  });
46
+ it("builds terms from payment intent metadata", () => {
47
+ const result = orgPromoPackageTermsFromPaymentIntent({
48
+ amount: 5300,
49
+ metadata: {
50
+ type: ORG_PROMO_PI_METADATA_TYPE,
51
+ tierId: "community",
52
+ orgFeeCents: "5000",
53
+ bashPlatformFeeCents: "300",
54
+ },
55
+ }, "community");
56
+ expect(result.ok).toBe(true);
57
+ if (result.ok) {
58
+ expect(result.totalCents).toBe(5300);
59
+ expect(result.terms.orgFeeCents).toBe(5000);
60
+ expect(result.terms.bashPlatformFeeCents).toBe(300);
61
+ }
62
+ });
63
+ it("rejects payment intent amount mismatch", () => {
64
+ const result = orgPromoPackageTermsFromPaymentIntent({
65
+ amount: 9999,
66
+ metadata: {
67
+ type: ORG_PROMO_PI_METADATA_TYPE,
68
+ tierId: "community",
69
+ orgFeeCents: "5000",
70
+ bashPlatformFeeCents: "300",
71
+ },
72
+ }, "community");
73
+ expect(result.ok).toBe(false);
74
+ if (!result.ok) {
75
+ expect(result.error).toBe("payment_amount_mismatch");
76
+ }
77
+ });
46
78
  it("accepts published ticketed events", () => {
47
79
  expect(isBashEventEligibleForOrgPromo({
48
80
  status: "Published",
@@ -1 +1 @@
1
- {"version":3,"file":"orgPromotionalPackageUtils.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/orgPromotionalPackageUtils.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orgPromotionalPackageUtils.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/orgPromotionalPackageUtils.test.ts"],"names":[],"mappings":"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"}
@@ -45,6 +45,31 @@ export declare function assertOrgPromoRatesAllowEnable(rates: OrgPromotionalPack
45
45
  };
46
46
  export declare function buildOrgPromoPackageTerms(tierId: OrgPromotionalPackageTierId, rates: OrgPromotionalPackageRates): OrgPromotionalPackageTerms | null;
47
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
+ };
48
73
  export declare function selectMembersForOrgPromoReach<T extends {
49
74
  joinedAt?: Date | string | null;
50
75
  }>(members: T[], maxReach: number): T[];
@@ -1 +1 @@
1
- {"version":3,"file":"orgPromotionalPackageUtils.d.ts","sourceRoot":"","sources":["../../src/utils/orgPromotionalPackageUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orgPromotionalPackageUtils.d.ts","sourceRoot":"","sources":["../../src/utils/orgPromotionalPackageUtils.ts"],"names":[],"mappings":"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"}
@@ -81,6 +81,56 @@ export function buildOrgPromoPackageTerms(tierId, rates) {
81
81
  export function orgPromoPackageTotalCents(terms) {
82
82
  return terms.orgFeeCents + terms.bashPlatformFeeCents;
83
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
+ }
84
134
  export function selectMembersForOrgPromoReach(members, maxReach) {
85
135
  const sorted = [...members].sort((a, b) => {
86
136
  const ta = a.joinedAt ? new Date(a.joinedAt).getTime() : 0;
@@ -1 +1 @@
1
- {"version":3,"file":"orgPromotionalPackageUtils.js","sourceRoot":"","sources":["../../src/utils/orgPromotionalPackageUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,MAAM,CAAC,MAAM,6BAA6B,GAAgD;IACxF,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAgD;IAC9E,SAAS,EAAE,GAAG;IACd,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,MAAM,CAAC,iBAAiB;CACnC,CAAC;AAEF,sEAAsE;AACtE,MAAM,CAAC,MAAM,sCAAsC,GAAG,aAAa,CAAC;AAEpE,MAAM,CAAC,MAAM,2BAA2B,GAAG,OAAO,CAAC;AACnD,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAClD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,kBAAkB,EAAE,QAAQ,CAAU,CAAC;AAE/E,MAAM,CAAC,MAAM,kBAAkB,GAAkC;IAC/D,WAAW;IACX,WAAW;IACX,UAAU;CACX,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AAEpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAE5C,MAAM,UAAU,2BAA2B,CAAC,MAAmC;IAC7E,MAAM,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,MAAM,CAAC,iBAAiB,EAAE,CAAC;QACvC,OAAO,sCAAsC,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,kBAAkB,CAAC,QAAQ,CAAC,KAAoC,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,GAAY;IAC1D,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,GAAG,GAA+B,EAAE,CAAC;IAC3C,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,KAAK,GAAI,GAA+B,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACrD,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QAChD,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC;YAAE,OAAO,IAAI,CAAC;QACvF,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,2BAA2B;YAAE,OAAO,IAAI,CAAC;QAClF,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAwC;IAC7E,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,KAAiC,EACjC,wBAAuC;IAEvC,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,wBAAwB;QAAE,OAAO,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC;IACxE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,MAAmC,EACnC,KAAiC;IAEjC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,QAAQ,EAAE,OAAO;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO;QACL,MAAM;QACN,QAAQ,EAAE,mBAAmB,CAAC,MAAM,CAAC;QACrC,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,oBAAoB,EAAE,6BAA6B,CAAC,MAAM,CAAC;KAC5D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAiC;IACzE,OAAO,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,oBAAoB,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,OAAY,EACZ,QAAgB;IAEhB,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACxC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,IAAI,QAAQ,KAAK,MAAM,CAAC,iBAAiB,IAAI,QAAQ,IAAI,sCAAsC,EAAE,CAAC;QAChG,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,UAAU,CAAI,KAAU,EAAE,IAAY;IACpD,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAU,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAYD,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;AAE9D,MAAM,UAAU,8BAA8B,CAC5C,KAAwC;IAExC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC;IACvC,IAAI,MAAM,KAAK,WAAW,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;QAC7E,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACxD,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QAC/B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAC5D,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC/B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QACpD,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;QAChC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACvD,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,eAAe,IAAI,CAAC,CAAC;IAC7C,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;QAC7C,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAwC,EACxC,SAAkB;IASlB,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE,CAAC;IAC3B,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,SAAS,CAAC,CAAC;QACpD,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,CAAC,CAAC;QAC3C,MAAM,gBAAgB,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;QAC/D,OAAO;YACL,MAAM;YACN,OAAO;YACP,WAAW;YACX,gBAAgB;YAChB,UAAU,EAAE,WAAW,GAAG,gBAAgB;YAC1C,QAAQ,EAAE,2BAA2B,CAAC,MAAM,CAAC;SAC9C,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"orgPromotionalPackageUtils.js","sourceRoot":"","sources":["../../src/utils/orgPromotionalPackageUtils.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.272.0",
3
+ "version": "30.274.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",
@@ -644,7 +644,7 @@ model BashEvent {
644
644
  /// GlutenFreeOptions, VeganOptions). Stored as an array of `DietaryOption`
645
645
  /// enum values; surfaced on the wizard "Allowed/Not Allowed" step and used
646
646
  /// for the homepage filter so guests can find bashes matching their needs.
647
- dietaryOptions DietaryOption[]
647
+ dietaryOptions DietaryOption[] @default([])
648
648
  eventFormat EventFormat? // Derived from location and videoLink: In-Person, Virtual, or Hybrid
649
649
  nonProfit Boolean?
650
650
  nonProfitId String?
@@ -2,7 +2,9 @@ import {
2
2
  buildOrgPromoPackageTerms,
3
3
  chunkArray,
4
4
  isBashEventEligibleForOrgPromo,
5
+ orgPromoPackageTermsFromPaymentIntent,
5
6
  orgPromoPackageTotalCents,
7
+ ORG_PROMO_PI_METADATA_TYPE,
6
8
  parseOrgPromotionalPackageRates,
7
9
  selectMembersForOrgPromoReach,
8
10
  } from "../orgPromotionalPackageUtils.js";
@@ -59,6 +61,46 @@ describe("orgPromotionalPackageUtils", () => {
59
61
  }
60
62
  });
61
63
 
64
+ it("builds terms from payment intent metadata", () => {
65
+ const result = orgPromoPackageTermsFromPaymentIntent(
66
+ {
67
+ amount: 5300,
68
+ metadata: {
69
+ type: ORG_PROMO_PI_METADATA_TYPE,
70
+ tierId: "community",
71
+ orgFeeCents: "5000",
72
+ bashPlatformFeeCents: "300",
73
+ },
74
+ },
75
+ "community"
76
+ );
77
+ expect(result.ok).toBe(true);
78
+ if (result.ok) {
79
+ expect(result.totalCents).toBe(5300);
80
+ expect(result.terms.orgFeeCents).toBe(5000);
81
+ expect(result.terms.bashPlatformFeeCents).toBe(300);
82
+ }
83
+ });
84
+
85
+ it("rejects payment intent amount mismatch", () => {
86
+ const result = orgPromoPackageTermsFromPaymentIntent(
87
+ {
88
+ amount: 9999,
89
+ metadata: {
90
+ type: ORG_PROMO_PI_METADATA_TYPE,
91
+ tierId: "community",
92
+ orgFeeCents: "5000",
93
+ bashPlatformFeeCents: "300",
94
+ },
95
+ },
96
+ "community"
97
+ );
98
+ expect(result.ok).toBe(false);
99
+ if (!result.ok) {
100
+ expect(result.error).toBe("payment_amount_mismatch");
101
+ }
102
+ });
103
+
62
104
  it("accepts published ticketed events", () => {
63
105
  expect(
64
106
  isBashEventEligibleForOrgPromo({
@@ -115,6 +115,72 @@ export function orgPromoPackageTotalCents(terms: OrgPromotionalPackageTerms): nu
115
115
  return terms.orgFeeCents + terms.bashPlatformFeeCents;
116
116
  }
117
117
 
118
+ /** PaymentIntent.metadata shape written by createOrgPromoPaymentIntent. */
119
+ export type OrgPromoPaymentIntentMetadata = {
120
+ type?: string;
121
+ organizationId?: string;
122
+ bashEventId?: string;
123
+ tierId?: string;
124
+ hostUserId?: string;
125
+ orgFeeCents?: string;
126
+ bashPlatformFeeCents?: string;
127
+ };
128
+
129
+ function parseMetadataInt(value: string | undefined): number | null {
130
+ if (value === undefined || value === "") return null;
131
+ const n = Number.parseInt(value, 10);
132
+ if (!Number.isInteger(n) || n < 0) return null;
133
+ return n;
134
+ }
135
+
136
+ /**
137
+ * Build package fee snapshot from an authorized PI (confirm-paid).
138
+ * Amount and metadata must match what was set at intent time.
139
+ */
140
+ export function orgPromoPackageTermsFromPaymentIntent(
141
+ pi: { amount: number | null; metadata?: OrgPromoPaymentIntentMetadata | null },
142
+ expectedTierId: OrgPromotionalPackageTierId
143
+ ):
144
+ | { ok: true; terms: OrgPromotionalPackageTerms; totalCents: number }
145
+ | { ok: false; error: string } {
146
+ const m = pi.metadata ?? {};
147
+ if (m.type !== ORG_PROMO_PI_METADATA_TYPE) {
148
+ return { ok: false, error: "invalid_payment_type" };
149
+ }
150
+ if (!isOrgPromoTierId(m.tierId ?? "") || m.tierId !== expectedTierId) {
151
+ return { ok: false, error: "payment_tier_mismatch" };
152
+ }
153
+ const orgFeeCents = parseMetadataInt(m.orgFeeCents);
154
+ const bashPlatformFeeCents = parseMetadataInt(m.bashPlatformFeeCents);
155
+ if (orgFeeCents === null || bashPlatformFeeCents === null) {
156
+ return { ok: false, error: "invalid_payment_amounts" };
157
+ }
158
+ if (orgFeeCents > ORG_PROMO_MAX_ORG_FEE_CENTS) {
159
+ return { ok: false, error: "invalid_payment_amounts" };
160
+ }
161
+ const expectedPlatform = ORG_PROMO_PLATFORM_FEES_CENTS[expectedTierId];
162
+ if (bashPlatformFeeCents !== expectedPlatform) {
163
+ return { ok: false, error: "invalid_platform_fee" };
164
+ }
165
+ const totalCents = orgFeeCents + bashPlatformFeeCents;
166
+ if (totalCents < 50) {
167
+ return { ok: false, error: "invalid_payment_amounts" };
168
+ }
169
+ if (pi.amount !== null && pi.amount !== totalCents) {
170
+ return { ok: false, error: "payment_amount_mismatch" };
171
+ }
172
+ return {
173
+ ok: true,
174
+ totalCents,
175
+ terms: {
176
+ tierId: expectedTierId,
177
+ maxReach: ORG_PROMO_MAX_REACH[expectedTierId],
178
+ orgFeeCents,
179
+ bashPlatformFeeCents,
180
+ },
181
+ };
182
+ }
183
+
118
184
  export function selectMembersForOrgPromoReach<T extends { joinedAt?: Date | string | null }>(
119
185
  members: T[],
120
186
  maxReach: number