@bash-app/bash-common 30.432.0 → 30.434.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.
Files changed (164) hide show
  1. package/dist/__tests__/appleIapProducts.test.js +1 -0
  2. package/dist/__tests__/appleIapProducts.test.js.map +1 -1
  3. package/dist/__tests__/bashSectionTitleForBashType.test.js +2 -0
  4. package/dist/__tests__/bashSectionTitleForBashType.test.js.map +1 -1
  5. package/dist/__tests__/discoveryScope.test.js +9 -1
  6. package/dist/__tests__/discoveryScope.test.js.map +1 -1
  7. package/dist/__tests__/promoCartEngine.test.d.ts +2 -0
  8. package/dist/__tests__/promoCartEngine.test.d.ts.map +1 -0
  9. package/dist/__tests__/promoCartEngine.test.js +174 -0
  10. package/dist/__tests__/promoCartEngine.test.js.map +1 -0
  11. package/dist/__tests__/promoCodeRedemption.test.d.ts +2 -0
  12. package/dist/__tests__/promoCodeRedemption.test.d.ts.map +1 -0
  13. package/dist/__tests__/promoCodeRedemption.test.js +103 -0
  14. package/dist/__tests__/promoCodeRedemption.test.js.map +1 -0
  15. package/dist/__tests__/promoCodeScope.test.d.ts +2 -0
  16. package/dist/__tests__/promoCodeScope.test.d.ts.map +1 -0
  17. package/dist/__tests__/promoCodeScope.test.js +84 -0
  18. package/dist/__tests__/promoCodeScope.test.js.map +1 -0
  19. package/dist/__tests__/statusEnums.test.js +1 -0
  20. package/dist/__tests__/statusEnums.test.js.map +1 -1
  21. package/dist/appleIapProducts.d.ts +12 -2
  22. package/dist/appleIapProducts.d.ts.map +1 -1
  23. package/dist/appleIapProducts.js +13 -0
  24. package/dist/appleIapProducts.js.map +1 -1
  25. package/dist/definitions.d.ts +3 -1
  26. package/dist/definitions.d.ts.map +1 -1
  27. package/dist/definitions.js +4 -2
  28. package/dist/definitions.js.map +1 -1
  29. package/dist/discoveryScope.d.ts +6 -6
  30. package/dist/discoveryScope.d.ts.map +1 -1
  31. package/dist/discoveryScope.js +25 -16
  32. package/dist/discoveryScope.js.map +1 -1
  33. package/dist/extendedSchemas.d.ts +1 -0
  34. package/dist/extendedSchemas.d.ts.map +1 -1
  35. package/dist/extendedSchemas.js.map +1 -1
  36. package/dist/index.d.ts +4 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +4 -0
  39. package/dist/index.js.map +1 -1
  40. package/dist/intros/__tests__/introsReleaseGates.test.d.ts +2 -0
  41. package/dist/intros/__tests__/introsReleaseGates.test.d.ts.map +1 -0
  42. package/dist/intros/__tests__/introsReleaseGates.test.js +140 -0
  43. package/dist/intros/__tests__/introsReleaseGates.test.js.map +1 -0
  44. package/dist/intros/__tests__/psychExperiment.test.d.ts +2 -0
  45. package/dist/intros/__tests__/psychExperiment.test.d.ts.map +1 -0
  46. package/dist/intros/__tests__/psychExperiment.test.js +63 -0
  47. package/dist/intros/__tests__/psychExperiment.test.js.map +1 -0
  48. package/dist/intros/__tests__/reasons.test.d.ts +2 -0
  49. package/dist/intros/__tests__/reasons.test.d.ts.map +1 -0
  50. package/dist/intros/__tests__/reasons.test.js +72 -0
  51. package/dist/intros/__tests__/reasons.test.js.map +1 -0
  52. package/dist/intros/__tests__/sharedNotes.test.d.ts +2 -0
  53. package/dist/intros/__tests__/sharedNotes.test.d.ts.map +1 -0
  54. package/dist/intros/__tests__/sharedNotes.test.js +19 -0
  55. package/dist/intros/__tests__/sharedNotes.test.js.map +1 -0
  56. package/dist/intros/__tests__/transitions.test.d.ts +2 -0
  57. package/dist/intros/__tests__/transitions.test.d.ts.map +1 -0
  58. package/dist/intros/__tests__/transitions.test.js +43 -0
  59. package/dist/intros/__tests__/transitions.test.js.map +1 -0
  60. package/dist/intros/__tests__/warmDisclosure.test.d.ts +2 -0
  61. package/dist/intros/__tests__/warmDisclosure.test.d.ts.map +1 -0
  62. package/dist/intros/__tests__/warmDisclosure.test.js +10 -0
  63. package/dist/intros/__tests__/warmDisclosure.test.js.map +1 -0
  64. package/dist/intros/age.d.ts +4 -0
  65. package/dist/intros/age.d.ts.map +1 -0
  66. package/dist/intros/age.js +14 -0
  67. package/dist/intros/age.js.map +1 -0
  68. package/dist/intros/attendance.d.ts +11 -0
  69. package/dist/intros/attendance.d.ts.map +1 -0
  70. package/dist/intros/attendance.js +27 -0
  71. package/dist/intros/attendance.js.map +1 -0
  72. package/dist/intros/attributeCatalog.d.ts +17 -0
  73. package/dist/intros/attributeCatalog.d.ts.map +1 -0
  74. package/dist/intros/attributeCatalog.js +96 -0
  75. package/dist/intros/attributeCatalog.js.map +1 -0
  76. package/dist/intros/index.d.ts +10 -0
  77. package/dist/intros/index.d.ts.map +1 -0
  78. package/dist/intros/index.js +10 -0
  79. package/dist/intros/index.js.map +1 -0
  80. package/dist/intros/intents.d.ts +8 -0
  81. package/dist/intros/intents.d.ts.map +1 -0
  82. package/dist/intros/intents.js +44 -0
  83. package/dist/intros/intents.js.map +1 -0
  84. package/dist/intros/psychExperiment.d.ts +29 -0
  85. package/dist/intros/psychExperiment.d.ts.map +1 -0
  86. package/dist/intros/psychExperiment.js +82 -0
  87. package/dist/intros/psychExperiment.js.map +1 -0
  88. package/dist/intros/reasons.d.ts +38 -0
  89. package/dist/intros/reasons.d.ts.map +1 -0
  90. package/dist/intros/reasons.js +162 -0
  91. package/dist/intros/reasons.js.map +1 -0
  92. package/dist/intros/sharedNotes.d.ts +10 -0
  93. package/dist/intros/sharedNotes.d.ts.map +1 -0
  94. package/dist/intros/sharedNotes.js +56 -0
  95. package/dist/intros/sharedNotes.js.map +1 -0
  96. package/dist/intros/transitions.d.ts +29 -0
  97. package/dist/intros/transitions.d.ts.map +1 -0
  98. package/dist/intros/transitions.js +128 -0
  99. package/dist/intros/transitions.js.map +1 -0
  100. package/dist/intros/validation.d.ts +50 -0
  101. package/dist/intros/validation.d.ts.map +1 -0
  102. package/dist/intros/validation.js +212 -0
  103. package/dist/intros/validation.js.map +1 -0
  104. package/dist/mirroredPrismaEnums.d.ts +1 -0
  105. package/dist/mirroredPrismaEnums.d.ts.map +1 -1
  106. package/dist/mirroredPrismaEnums.js +1 -0
  107. package/dist/mirroredPrismaEnums.js.map +1 -1
  108. package/dist/promoCartEngine.d.ts +55 -0
  109. package/dist/promoCartEngine.d.ts.map +1 -0
  110. package/dist/promoCartEngine.js +135 -0
  111. package/dist/promoCartEngine.js.map +1 -0
  112. package/dist/promoCodeRedemption.d.ts +44 -0
  113. package/dist/promoCodeRedemption.d.ts.map +1 -0
  114. package/dist/promoCodeRedemption.js +81 -0
  115. package/dist/promoCodeRedemption.js.map +1 -0
  116. package/dist/promoCodeScope.d.ts +91 -0
  117. package/dist/promoCodeScope.d.ts.map +1 -0
  118. package/dist/promoCodeScope.js +102 -0
  119. package/dist/promoCodeScope.js.map +1 -0
  120. package/dist/utils/__tests__/discountEngine/discountCalculator.test.js +8 -1
  121. package/dist/utils/__tests__/discountEngine/discountCalculator.test.js.map +1 -1
  122. package/dist/utils/__tests__/paymentUtils.test.js +87 -4
  123. package/dist/utils/__tests__/paymentUtils.test.js.map +1 -1
  124. package/dist/utils/paymentUtils.d.ts +30 -5
  125. package/dist/utils/paymentUtils.d.ts.map +1 -1
  126. package/dist/utils/paymentUtils.js +43 -11
  127. package/dist/utils/paymentUtils.js.map +1 -1
  128. package/package.json +1 -1
  129. package/prisma/schema.prisma +427 -6
  130. package/src/__tests__/appleIapProducts.test.ts +3 -0
  131. package/src/__tests__/bashSectionTitleForBashType.test.ts +4 -0
  132. package/src/__tests__/discoveryScope.test.ts +22 -1
  133. package/src/__tests__/promoCartEngine.test.ts +201 -0
  134. package/src/__tests__/promoCodeRedemption.test.ts +134 -0
  135. package/src/__tests__/promoCodeScope.test.ts +119 -0
  136. package/src/__tests__/statusEnums.test.ts +1 -0
  137. package/src/appleIapProducts.ts +29 -2
  138. package/src/definitions.ts +4 -2
  139. package/src/discoveryScope.ts +30 -20
  140. package/src/extendedSchemas.ts +1 -0
  141. package/src/index.ts +4 -0
  142. package/src/intros/__tests__/introsReleaseGates.test.ts +181 -0
  143. package/src/intros/__tests__/psychExperiment.test.ts +99 -0
  144. package/src/intros/__tests__/reasons.test.ts +122 -0
  145. package/src/intros/__tests__/sharedNotes.test.ts +20 -0
  146. package/src/intros/__tests__/transitions.test.ts +61 -0
  147. package/src/intros/__tests__/warmDisclosure.test.ts +10 -0
  148. package/src/intros/age.ts +13 -0
  149. package/src/intros/attendance.ts +33 -0
  150. package/src/intros/attributeCatalog.ts +113 -0
  151. package/src/intros/index.ts +9 -0
  152. package/src/intros/intents.ts +49 -0
  153. package/src/intros/psychExperiment.ts +130 -0
  154. package/src/intros/reasons.ts +187 -0
  155. package/src/intros/sharedNotes.ts +59 -0
  156. package/src/intros/transitions.ts +172 -0
  157. package/src/intros/validation.ts +248 -0
  158. package/src/mirroredPrismaEnums.ts +1 -0
  159. package/src/promoCartEngine.ts +193 -0
  160. package/src/promoCodeRedemption.ts +123 -0
  161. package/src/promoCodeScope.ts +180 -0
  162. package/src/utils/__tests__/discountEngine/discountCalculator.test.ts +8 -0
  163. package/src/utils/__tests__/paymentUtils.test.ts +100 -6
  164. package/src/utils/paymentUtils.ts +56 -13
@@ -21,6 +21,7 @@ describe("appleIapProducts", () => {
21
21
  expect(APPLE_BASHPASS_PRODUCTS.length).toBe(3);
22
22
  expect(APPLE_FEATURE_BOOST_PRODUCTS.length).toBe(5);
23
23
  expect(getAppleIapProduct("community.bash.us.boost.7d")?.family).toBe("feature_boost");
24
+ expect(getAppleIapProduct("community.bash.us.intros.earlyreveal")?.family).toBe("early_reveal");
24
25
  });
25
26
  it("listAppleIapProductIds filters by family", () => {
26
27
  const membershipIds = listAppleIapProductIds("membership");
@@ -1 +1 @@
1
- {"version":3,"file":"appleIapProducts.test.js","sourceRoot":"","sources":["../../src/__tests__/appleIapProducts.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,yBAAyB,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,CACJ,0BAA0B,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,CACzE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACvD,MAAM,CACJ,0BAA0B,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,CACzE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,MAAM;YACN,SAAS;YACT,QAAQ;SACT,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CACJ,kBAAkB,CAAC,4BAA4B,CAAC,EAAE,MAAM,CACzD,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,aAAa,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"appleIapProducts.test.js","sourceRoot":"","sources":["../../src/__tests__/appleIapProducts.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,kBAAkB,EAClB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACvD,MAAM,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,CAAC,yBAAyB,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,CACJ,0BAA0B,CAAC,cAAc,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,SAAS,CACzE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;QACvD,MAAM,CACJ,0BAA0B,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,SAAS,CACzE,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACxD,MAAM;YACN,SAAS;YACT,QAAQ;SACT,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CACJ,kBAAkB,CAAC,4BAA4B,CAAC,EAAE,MAAM,CACzD,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACxB,MAAM,CAAC,kBAAkB,CAAC,sCAAsC,CAAC,EAAE,MAAM,CAAC,CAAC,IAAI,CAC7E,cAAc,CACf,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,aAAa,GAAG,sBAAsB,CAAC,YAAY,CAAC,CAAC;QAC3D,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1D,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -42,6 +42,8 @@ describe("bashSectionTitleForBashType", () => {
42
42
  expect(bashSectionTitleForBashType("Ideas")).toBe("Ideas");
43
43
  });
44
44
  it("scope rows use destination copy", () => {
45
+ expect(bashSectionTitleForBashType("Local")).toBe("City & Community Events");
46
+ expect(bashSectionTitleForBashType("State")).toBe("State Events");
45
47
  expect(bashSectionTitleForBashType("National")).toBe("Across the country");
46
48
  expect(bashSectionTitleForBashType("International")).toBe("Worth the flight");
47
49
  expect(bashSectionTitleForBashType("CrewGoing")).toBe("The crew's going");
@@ -1 +1 @@
1
- {"version":3,"file":"bashSectionTitleForBashType.test.js","sourceRoot":"","sources":["../../src/__tests__/bashSectionTitleForBashType.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bashSectionTitleForBashType.test.js","sourceRoot":"","sources":["../../src/__tests__/bashSectionTitleForBashType.test.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,16 @@ describe("discoveryScope", () => {
6
6
  expect(isHostSettableDiscoveryScope(DiscoveryScope.National)).toBe(false);
7
7
  expect(isHostSettableDiscoveryScope(DiscoveryScope.International)).toBe(false);
8
8
  });
9
- it("infers State from state fair copy", () => {
9
+ it("infers State from a state-run event, not from travel or sponsorship", () => {
10
10
  expect(inferDiscoveryScopeFromText("Utah State Fair")).toBe(DiscoveryScope.State);
11
+ expect(inferDiscoveryScopeFromText("People are coming from statewide")).toBe(DiscoveryScope.Unspecified);
12
+ expect(inferDiscoveryScopeFromText("Sponsored by the Utah state agency office")).toBe(DiscoveryScope.Unspecified);
13
+ expect(inferDiscoveryScopeFromText("Organized by Utah State Parks")).toBe(DiscoveryScope.State);
14
+ expect(inferDiscoveryScopeFromText("Neighborhood party sponsored by the state")).toBe(DiscoveryScope.Unspecified);
15
+ });
16
+ it("infers Local from the organizer, not from how close the party is", () => {
17
+ expect(inferDiscoveryScopeFromText("City of Provo parks and recreation concert")).toBe(DiscoveryScope.Local);
18
+ expect(inferDiscoveryScopeFromText("Sugar House block party")).toBe(DiscoveryScope.Unspecified);
11
19
  });
12
20
  it("infers National from destination brands", () => {
13
21
  expect(inferDiscoveryScopeFromText("EDC Las Vegas")).toBe(DiscoveryScope.National);
@@ -1 +1 @@
1
- {"version":3,"file":"discoveryScope.test.js","sourceRoot":"","sources":["../../src/__tests__/discoveryScope.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,sBAAsB,CAAC;AAE9B,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,4BAA4B,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,4BAA4B,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,4BAA4B,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1E,MAAM,CAAC,4BAA4B,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CACrE,KAAK,CACN,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,2BAA2B,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CACzD,cAAc,CAAC,KAAK,CACrB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CACvD,cAAc,CAAC,QAAQ,CACxB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,2BAA2B,CAAC,yBAAyB,CAAC,CAAC,CAAC,IAAI,CACjE,cAAc,CAAC,aAAa,CAC7B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,CACJ,6BAA6B,CAAC;YAC5B,SAAS,EAAE,cAAc,CAAC,QAAQ;YAClC,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,4BAA4B;SACpC,CAAC,CACH,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,CACJ,6BAA6B,CAAC;YAC5B,SAAS,EAAE,cAAc,CAAC,QAAQ;YAClC,IAAI,EAAE,MAAM;YACZ,KAAK,EAAE,qBAAqB;SAC7B,CAAC,CACH,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,CACJ,6BAA6B,CAAC;YAC5B,SAAS,EAAE,cAAc,CAAC,QAAQ;YAClC,IAAI,EAAE,SAAS;YACf,KAAK,EAAE,aAAa;SACrB,CAAC,CACH,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"discoveryScope.test.js","sourceRoot":"","sources":["../../src/__tests__/discoveryScope.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=promoCartEngine.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promoCartEngine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/promoCartEngine.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,174 @@
1
+ import { allocateAcrossTickets, allocateProportionally, resolvePromoForCart, } from "../promoCartEngine.js";
2
+ const now = new Date("2026-10-14T12:00:00Z");
3
+ const earlyBird = { ticketTierId: "early", pricing: "USD", quantity: 2, cashSubtotalCents: 2000, pointsSubtotal: 0 };
4
+ const regular = { ticketTierId: "regular", pricing: "USD", quantity: 1, cashSubtotalCents: 2500, pointsSubtotal: 0 };
5
+ const vip = { ticketTierId: "vip", pricing: "USD", quantity: 1, cashSubtotalCents: 7500, pointsSubtotal: 0 };
6
+ const points = { ticketTierId: "points", pricing: "BASHPOINTS", quantity: 2, cashSubtotalCents: 0, pointsSubtotal: 1000 };
7
+ const free = { ticketTierId: "free", pricing: "FREE", quantity: 3, cashSubtotalCents: 0, pointsSubtotal: 0 };
8
+ describe("allocateProportionally", () => {
9
+ it("splits by weight, flooring, with leftover to the largest line then tier id", () => {
10
+ const result = allocateProportionally(1000, [
11
+ { key: "b", weight: 1000 },
12
+ { key: "a", weight: 1000 },
13
+ { key: "c", weight: 1000 },
14
+ ]);
15
+ expect([...result.entries()].sort()).toEqual([["a", 334], ["b", 333], ["c", 333]]);
16
+ });
17
+ it("gives leftover cents to the largest line first", () => {
18
+ const result = allocateProportionally(1001, [
19
+ { key: "small", weight: 1000 },
20
+ { key: "big", weight: 3000 },
21
+ ]);
22
+ expect(result.get("big")).toBe(751);
23
+ expect(result.get("small")).toBe(250);
24
+ });
25
+ it("never allocates more than the eligible total", () => {
26
+ const result = allocateProportionally(9999, [{ key: "a", weight: 500 }]);
27
+ expect(result.get("a")).toBe(500);
28
+ });
29
+ });
30
+ describe("allocateAcrossTickets", () => {
31
+ it("splits evenly with leftover cents to the lowest ticket ids, summing exactly", () => {
32
+ const result = allocateAcrossTickets(1001, ["t3", "t1", "t2"]);
33
+ expect([...result.entries()]).toEqual([["t1", 334], ["t2", 334], ["t3", 333]]);
34
+ expect([...result.values()].reduce((s, v) => s + v, 0)).toBe(1001);
35
+ });
36
+ });
37
+ describe("resolvePromoForCart", () => {
38
+ it("attribution-only (NONE) on all tiers counts cash, BashPoints, and free tickets with no discount", () => {
39
+ const result = resolvePromoForCart({
40
+ promo: { eligibilityMode: "ALL_TIERS", discountType: "NONE" },
41
+ cartLines: [earlyBird, points, free],
42
+ now,
43
+ });
44
+ expect(result.status).toBe("applied");
45
+ expect(result.cashDiscountTotalCents).toBe(0);
46
+ expect(result.pointsDiscountTotal).toBe(0);
47
+ expect(result.attributedTicketCount).toBe(7);
48
+ });
49
+ it("attributes cash, hybrid, BashPoints-only, and free lines, including a tier added later, with a 0 guest discount", () => {
50
+ const hybrid = {
51
+ ticketTierId: "hybrid",
52
+ pricing: "USD",
53
+ quantity: 1,
54
+ cashSubtotalCents: 3000,
55
+ pointsSubtotal: 100,
56
+ };
57
+ const addedLater = {
58
+ ticketTierId: "tier_added_later",
59
+ pricing: "USD",
60
+ quantity: 4,
61
+ cashSubtotalCents: 4000,
62
+ pointsSubtotal: 0,
63
+ };
64
+ const result = resolvePromoForCart({
65
+ promo: { eligibilityMode: "ALL_TIERS", discountType: "NONE" },
66
+ cartLines: [earlyBird, hybrid, points, free, addedLater],
67
+ now,
68
+ });
69
+ expect(result.status).toBe("applied");
70
+ expect(result.cashDiscountTotalCents).toBe(0);
71
+ expect(result.pointsDiscountTotal).toBe(0);
72
+ expect(result.lines.map((line) => [line.ticketTierId, line.eligible, line.attributedTicketCount])).toEqual([
73
+ ["early", true, 2],
74
+ ["hybrid", true, 1],
75
+ ["points", true, 2],
76
+ ["free", true, 3],
77
+ ["tier_added_later", true, 4],
78
+ ]);
79
+ expect(result.attributedTicketCount).toBe(12);
80
+ });
81
+ it("percentage on selected tiers discounts only those cash lines", () => {
82
+ const result = resolvePromoForCart({
83
+ promo: {
84
+ eligibilityMode: "SELECTED_TIERS",
85
+ eligibleTiers: [{ ticketTierId: "regular" }, { ticketTierId: "vip" }],
86
+ discountType: "PERCENT",
87
+ discountAmountPercentage: 10,
88
+ },
89
+ cartLines: [earlyBird, regular, vip],
90
+ now,
91
+ });
92
+ expect(result.lines.map((l) => [l.ticketTierId, l.cashDiscountCents])).toEqual([
93
+ ["early", 0],
94
+ ["regular", 250],
95
+ ["vip", 750],
96
+ ]);
97
+ expect(result.attributedTicketCount).toBe(2);
98
+ });
99
+ it("percentage leaves BashPoints alone unless the host opts in", () => {
100
+ const off = resolvePromoForCart({
101
+ promo: { eligibilityMode: "ALL_TIERS", discountAmountPercentage: 20 },
102
+ cartLines: [points],
103
+ now,
104
+ });
105
+ expect(off.pointsDiscountTotal).toBe(0);
106
+ expect(off.attributedTicketCount).toBe(2);
107
+ const on = resolvePromoForCart({
108
+ promo: { eligibilityMode: "ALL_TIERS", discountAmountPercentage: 20, discountAppliesToBashPoints: true },
109
+ cartLines: [points],
110
+ now,
111
+ });
112
+ expect(on.pointsDiscountTotal).toBe(200);
113
+ expect(on.lines[0].finalPoints).toBe(800);
114
+ });
115
+ it("fixed cash applies once per order across eligible cash lines, never to points", () => {
116
+ const result = resolvePromoForCart({
117
+ promo: { eligibilityMode: "ALL_TIERS", discountType: "FIXED_CASH", discountAmountInCents: 1000 },
118
+ cartLines: [earlyBird, regular, points],
119
+ now,
120
+ });
121
+ expect(result.cashDiscountTotalCents).toBe(1000);
122
+ expect(result.pointsDiscountTotal).toBe(0);
123
+ const byTier = Object.fromEntries(result.lines.map((l) => [l.ticketTierId, l.cashDiscountCents]));
124
+ expect(byTier).toEqual({ early: 444, regular: 556, points: 0 });
125
+ });
126
+ it("caps a fixed discount at the eligible cash total and floors totals at 0", () => {
127
+ const result = resolvePromoForCart({
128
+ promo: { eligibilityMode: "ALL_TIERS", discountAmountInCents: 99999 },
129
+ cartLines: [regular],
130
+ now,
131
+ });
132
+ expect(result.lines[0].finalCashCents).toBe(0);
133
+ expect(result.cashDiscountTotalCents).toBe(2500);
134
+ });
135
+ it("caps a percentage above 100 at the line price", () => {
136
+ const result = resolvePromoForCart({
137
+ promo: { ticketTierId: "regular", discountAmountPercentage: 150 },
138
+ cartLines: [regular],
139
+ now,
140
+ });
141
+ expect(result.lines[0].cashDiscountCents).toBe(2500);
142
+ });
143
+ it("a legacy single-tier code keeps today's total: whole discount on its one line", () => {
144
+ const result = resolvePromoForCart({
145
+ promo: { ticketTierId: "regular", discountAmountInCents: 500 },
146
+ cartLines: [earlyBird, regular],
147
+ now,
148
+ });
149
+ expect(result.cashDiscountTotalCents).toBe(500);
150
+ expect(result.lines.find((l) => l.ticketTierId === "regular")?.cashDiscountCents).toBe(500);
151
+ });
152
+ it("an all-tiers code covers a tier added after the code was created", () => {
153
+ const result = resolvePromoForCart({
154
+ promo: { eligibilityMode: "ALL_TIERS", discountAmountPercentage: 10 },
155
+ cartLines: [{ ...regular, ticketTierId: "added_later" }],
156
+ now,
157
+ });
158
+ expect(result.lines[0].eligible).toBe(true);
159
+ });
160
+ it("reports not_applicable, expired, and disabled", () => {
161
+ expect(resolvePromoForCart({ promo: { ticketTierId: "vip" }, cartLines: [regular], now }).status).toBe("not_applicable");
162
+ expect(resolvePromoForCart({
163
+ promo: { eligibilityMode: "ALL_TIERS", redeemBy: new Date("2026-10-01") },
164
+ cartLines: [regular],
165
+ now,
166
+ }).status).toBe("expired");
167
+ expect(resolvePromoForCart({
168
+ promo: { eligibilityMode: "ALL_TIERS", disabledAt: now },
169
+ cartLines: [regular],
170
+ now,
171
+ }).status).toBe("disabled");
172
+ });
173
+ });
174
+ //# sourceMappingURL=promoCartEngine.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promoCartEngine.test.js","sourceRoot":"","sources":["../../src/__tests__/promoCartEngine.test.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,sBAAsB,CAAC,CAAC;AAE7C,MAAM,SAAS,GAAkB,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AACpI,MAAM,OAAO,GAAkB,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AACpI,MAAM,GAAG,GAAkB,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAC5H,MAAM,MAAM,GAAkB,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;AACzI,MAAM,IAAI,GAAkB,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAE5H,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;IACtC,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;QACpF,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE;YAC1C,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;YAC1B,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;YAC1B,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;SAC3B,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE;YAC1C,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;YAC9B,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;SAC7B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC/D,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,iGAAiG,EAAE,GAAG,EAAE;QACzG,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE;YAC7D,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC;YACpC,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iHAAiH,EAAE,GAAG,EAAE;QACzH,MAAM,MAAM,GAAkB;YAC5B,YAAY,EAAE,QAAQ;YACtB,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,CAAC;YACX,iBAAiB,EAAE,IAAI;YACvB,cAAc,EAAE,GAAG;SACpB,CAAC;QACF,MAAM,UAAU,GAAkB;YAChC,YAAY,EAAE,kBAAkB;YAChC,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,CAAC;YACX,iBAAiB,EAAE,IAAI;YACvB,cAAc,EAAE,CAAC;SAClB,CAAC;QACF,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,EAAE;YAC7D,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC;YACxD,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YACzG,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAClB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACnB,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACnB,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YACjB,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC;SAC9B,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,KAAK,EAAE;gBACL,eAAe,EAAE,gBAAgB;gBACjC,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;gBACrE,YAAY,EAAE,SAAS;gBACvB,wBAAwB,EAAE,EAAE;aAC7B;YACD,SAAS,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC;YACpC,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,CAAC,OAAO,EAAE,CAAC,CAAC;YACZ,CAAC,SAAS,EAAE,GAAG,CAAC;YAChB,CAAC,KAAK,EAAE,GAAG,CAAC;SACb,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,GAAG,GAAG,mBAAmB,CAAC;YAC9B,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,wBAAwB,EAAE,EAAE,EAAE;YACrE,SAAS,EAAE,CAAC,MAAM,CAAC;YACnB,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE1C,MAAM,EAAE,GAAG,mBAAmB,CAAC;YAC7B,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,wBAAwB,EAAE,EAAE,EAAE,2BAA2B,EAAE,IAAI,EAAE;YACxG,SAAS,EAAE,CAAC,MAAM,CAAC;YACnB,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,IAAI,EAAE;YAChG,SAAS,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC;YACvC,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAClG,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,qBAAqB,EAAE,KAAK,EAAE;YACrE,SAAS,EAAE,CAAC,OAAO,CAAC;YACpB,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,wBAAwB,EAAE,GAAG,EAAE;YACjE,SAAS,EAAE,CAAC,OAAO,CAAC;YACpB,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,KAAK,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,qBAAqB,EAAE,GAAG,EAAE;YAC9D,SAAS,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC;YAC/B,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,EAAE,iBAAiB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,MAAM,GAAG,mBAAmB,CAAC;YACjC,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,wBAAwB,EAAE,EAAE,EAAE;YACrE,SAAS,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC;YACxD,GAAG;SACJ,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CACJ,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAC1F,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACzB,MAAM,CACJ,mBAAmB,CAAC;YAClB,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE;YACzE,SAAS,EAAE,CAAC,OAAO,CAAC;YACpB,GAAG;SACJ,CAAC,CAAC,MAAM,CACV,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClB,MAAM,CACJ,mBAAmB,CAAC;YAClB,KAAK,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,EAAE;YACxD,SAAS,EAAE,CAAC,OAAO,CAAC;YACpB,GAAG;SACJ,CAAC,CAAC,MAAM,CACV,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=promoCodeRedemption.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promoCodeRedemption.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/promoCodeRedemption.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,103 @@
1
+ import { evaluatePromoRedeemability, isPromoCodeRejectReason, normalizePromoRedemptionEmail, pickPromoCodeAmongDuplicates, PROMO_CODE_REJECT_MESSAGES, PROMO_CODE_REJECT_REASONS, } from "../promoCodeRedemption.js";
2
+ const now = new Date("2026-10-14T12:00:00Z");
3
+ function base(overrides = {}) {
4
+ return {
5
+ redeemBy: null,
6
+ disabledAt: null,
7
+ maxRedemptions: null,
8
+ maxUsesPerAccount: null,
9
+ activeOrderCount: 0,
10
+ accountOrderCount: 0,
11
+ now,
12
+ ...overrides,
13
+ };
14
+ }
15
+ describe("evaluatePromoRedeemability", () => {
16
+ it("allows a code with no limits", () => {
17
+ expect(evaluatePromoRedeemability(base())).toBeNull();
18
+ });
19
+ it("rejects a disabled code before anything else", () => {
20
+ expect(evaluatePromoRedeemability(base({ disabledAt: now, redeemBy: new Date("2020-01-01"), activeOrderCount: 99, maxRedemptions: 1 }))).toBe("disabled");
21
+ });
22
+ it("rejects a code past redeemBy and allows one still before it", () => {
23
+ expect(evaluatePromoRedeemability(base({ redeemBy: new Date("2026-10-14T11:59:59Z") }))).toBe("expired");
24
+ expect(evaluatePromoRedeemability(base({ redeemBy: new Date("2026-10-14T12:00:01Z") }))).toBeNull();
25
+ });
26
+ it("counts orders against maxRedemptions: 8 of 10 used leaves room, 10 of 10 is exhausted", () => {
27
+ expect(evaluatePromoRedeemability(base({ maxRedemptions: 10, activeOrderCount: 8 }))).toBeNull();
28
+ expect(evaluatePromoRedeemability(base({ maxRedemptions: 10, activeOrderCount: 10 }))).toBe("exhausted");
29
+ });
30
+ it("treats maxRedemptions 0 or null as unlimited", () => {
31
+ expect(evaluatePromoRedeemability(base({ maxRedemptions: 0, activeOrderCount: 50 }))).toBeNull();
32
+ expect(evaluatePromoRedeemability(base({ maxRedemptions: null, activeOrderCount: 50 }))).toBeNull();
33
+ });
34
+ it("applies the per-account limit only when set", () => {
35
+ expect(evaluatePromoRedeemability(base({ maxUsesPerAccount: 1, accountOrderCount: 1 }))).toBe("already_used");
36
+ expect(evaluatePromoRedeemability(base({ maxUsesPerAccount: 2, accountOrderCount: 1 }))).toBeNull();
37
+ expect(evaluatePromoRedeemability(base({ maxUsesPerAccount: null, accountOrderCount: 9 }))).toBeNull();
38
+ });
39
+ });
40
+ function row(id, overrides = {}) {
41
+ return {
42
+ id,
43
+ ticketTierId: `tier_${id}`,
44
+ promoterId: "promoter_row",
45
+ discountAmountInCents: 500,
46
+ discountAmountPercentage: null,
47
+ redeemBy: null,
48
+ maxRedemptions: null,
49
+ bashPointsRewardPerTicket: null,
50
+ ...overrides,
51
+ };
52
+ }
53
+ describe("pickPromoCodeAmongDuplicates", () => {
54
+ it("returns the only row", () => {
55
+ expect(pickPromoCodeAmongDuplicates([row("b")])).toEqual({ row: row("b") });
56
+ });
57
+ it("picks the oldest id among identical rows", () => {
58
+ const result = pickPromoCodeAmongDuplicates([row("c"), row("a"), row("b")]);
59
+ expect("row" in result && result.row.id).toBe("a");
60
+ });
61
+ it("prefers an identical row whose tier is in the cart", () => {
62
+ const result = pickPromoCodeAmongDuplicates([row("a"), row("b")], ["tier_b"]);
63
+ expect("row" in result && result.row.id).toBe("b");
64
+ });
65
+ it("falls back to the oldest row when no duplicate tier is in the cart", () => {
66
+ const result = pickPromoCodeAmongDuplicates([row("b"), row("a")], ["tier_z"]);
67
+ expect("row" in result && result.row.id).toBe("a");
68
+ });
69
+ it.each([
70
+ ["promoter", { promoterId: "someone_else" }],
71
+ ["discount", { discountAmountInCents: 700 }],
72
+ ["percentage", { discountAmountPercentage: 10, discountAmountInCents: null }],
73
+ ["expiry", { redeemBy: new Date("2027-01-01") }],
74
+ ["limit", { maxRedemptions: 5 }],
75
+ ["BashPoints reward", { bashPointsRewardPerTicket: 25 }],
76
+ ])("asks the host to review duplicates that differ on %s", (_label, diff) => {
77
+ expect(pickPromoCodeAmongDuplicates([row("a"), row("b", diff)])).toEqual({
78
+ reason: "host_review_required",
79
+ });
80
+ });
81
+ it("throws on an empty list", () => {
82
+ expect(() => pickPromoCodeAmongDuplicates([])).toThrow();
83
+ });
84
+ });
85
+ describe("reason helpers", () => {
86
+ it("has a guest message for every reason", () => {
87
+ for (const reason of PROMO_CODE_REJECT_REASONS) {
88
+ expect(PROMO_CODE_REJECT_MESSAGES[reason].length).toBeGreaterThan(0);
89
+ }
90
+ expect(PROMO_CODE_REJECT_MESSAGES.host_review_required).toBe("This code needs the host to review it.");
91
+ });
92
+ it("recognizes reason strings", () => {
93
+ expect(isPromoCodeRejectReason("expired")).toBe(true);
94
+ expect(isPromoCodeRejectReason("nope")).toBe(false);
95
+ expect(isPromoCodeRejectReason(3)).toBe(false);
96
+ });
97
+ it("normalizes emails", () => {
98
+ expect(normalizePromoRedemptionEmail(" Guest@Example.COM ")).toBe("guest@example.com");
99
+ expect(normalizePromoRedemptionEmail(" ")).toBeNull();
100
+ expect(normalizePromoRedemptionEmail(null)).toBeNull();
101
+ });
102
+ });
103
+ //# sourceMappingURL=promoCodeRedemption.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promoCodeRedemption.test.js","sourceRoot":"","sources":["../../src/__tests__/promoCodeRedemption.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=promoCodeScope.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promoCodeScope.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/promoCodeScope.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,84 @@
1
+ import { promoCodeAppliesToTier, promoCodeBashEventId, promoCodeDiscountKind, promoCodeEligibleTierIds, getPromoterShareUrl, promoterCodeInputErrors, } from "../promoCodeScope.js";
2
+ describe("promoCodeDiscountKind", () => {
3
+ it("uses the explicit type, else derives it from legacy amounts", () => {
4
+ expect(promoCodeDiscountKind({ discountType: "NONE", discountAmountPercentage: 10 })).toBe("NONE");
5
+ expect(promoCodeDiscountKind({ discountAmountPercentage: 10 })).toBe("PERCENT");
6
+ expect(promoCodeDiscountKind({ discountAmountInCents: 500 })).toBe("FIXED_CASH");
7
+ expect(promoCodeDiscountKind({})).toBe("NONE");
8
+ });
9
+ });
10
+ describe("promoCodeBashEventId", () => {
11
+ it("prefers the row's bash, else the legacy tier's bash", () => {
12
+ expect(promoCodeBashEventId({ bashEventId: "evt_1", ticketTier: { bashEventId: "evt_2" } })).toBe("evt_1");
13
+ expect(promoCodeBashEventId({ ticketTier: { bashEventId: "evt_2" } })).toBe("evt_2");
14
+ expect(promoCodeBashEventId({})).toBeNull();
15
+ });
16
+ });
17
+ describe("promoCodeEligibleTierIds", () => {
18
+ it("returns ALL for an all-tiers code, so tiers added later qualify", () => {
19
+ const allTiers = { eligibilityMode: "ALL_TIERS", ticketTierId: "ga" };
20
+ expect(promoCodeEligibleTierIds(allTiers)).toBe("ALL");
21
+ expect(promoCodeAppliesToTier(allTiers, "tier_added_later")).toBe(true);
22
+ });
23
+ it("uses selected tiers, else the legacy tier", () => {
24
+ expect(promoCodeEligibleTierIds({
25
+ eligibilityMode: "SELECTED_TIERS",
26
+ eligibleTiers: [{ ticketTierId: "ga" }, { ticketTierId: "vip" }, { ticketTierId: "ga" }],
27
+ })).toEqual(["ga", "vip"]);
28
+ expect(promoCodeEligibleTierIds({ ticketTierId: "ga" })).toEqual(["ga"]);
29
+ expect(promoCodeEligibleTierIds({})).toEqual([]);
30
+ expect(promoCodeAppliesToTier({ ticketTierId: "ga" }, "vip")).toBe(false);
31
+ });
32
+ });
33
+ describe("getPromoterShareUrl", () => {
34
+ it("uses the active vanity path when there is one", () => {
35
+ expect(getPromoterShareUrl({
36
+ bashEventId: "evt_1",
37
+ slug: "summer-bash",
38
+ vanityPaths: [
39
+ { segment: "old", status: "Revoked" },
40
+ { segment: "BashFest", status: "Active" },
41
+ ],
42
+ code: " crew 1 ",
43
+ origin: "https://bash.community/",
44
+ })).toBe("https://bash.community/bash/bashfest?promo=CREW%201");
45
+ });
46
+ it("falls back to the id-slug path, never /bashes/", () => {
47
+ const url = getPromoterShareUrl({ bashEventId: "evt_1", slug: "summer-bash", code: "vip" });
48
+ expect(url).toBe("/bash/evt_1-summer-bash?promo=VIP");
49
+ expect(url).not.toContain("/bashes/");
50
+ });
51
+ });
52
+ describe("promoterCodeInputErrors", () => {
53
+ const ok = {
54
+ code: "CREW",
55
+ discountType: "NONE",
56
+ eligibilityMode: "ALL_TIERS",
57
+ };
58
+ it("accepts an attribution-only all-tiers code", () => {
59
+ expect(promoterCodeInputErrors(ok, ["ga"])).toEqual([]);
60
+ });
61
+ it("allows a guest discount of 0 and rejects negatives, separately from promoter commission", () => {
62
+ expect(promoterCodeInputErrors({ ...ok, discountType: "PERCENT", discountValue: 0 }, [])).toEqual([]);
63
+ expect(promoterCodeInputErrors({ ...ok, discountType: "FIXED_CASH", discountValue: 0 }, [])).toEqual([]);
64
+ expect(promoterCodeInputErrors({ ...ok, discountType: "PERCENT", discountValue: -1 }, [])).toContain("Guest discount must be between 0% and 100%.");
65
+ expect(promoterCodeInputErrors({ ...ok, discountType: "FIXED_CASH", discountValue: -100 }, [])).toContain("Enter a fixed discount of $0 or more.");
66
+ expect(promoterCodeInputErrors({ ...ok, discountType: "PERCENT", discountValue: 100 }, [])).toEqual([]);
67
+ expect(promoterCodeInputErrors({ ...ok, promoterCommissionBps: 0 }, [])).toEqual([]);
68
+ expect(promoterCodeInputErrors({ ...ok, promoterCommissionBps: 10000 }, [])).toEqual([]);
69
+ expect(promoterCodeInputErrors({ ...ok, promoterCommissionBps: 10001 }, [])).toContain("Promoter commission must be between 0% and 100%.");
70
+ });
71
+ it("requires selected tiers on this bash", () => {
72
+ expect(promoterCodeInputErrors({ ...ok, eligibilityMode: "SELECTED_TIERS" }, ["ga"])).toContain("Pick at least one ticket tier.");
73
+ expect(promoterCodeInputErrors({ ...ok, eligibilityMode: "SELECTED_TIERS", eligibleTierIds: ["other"] }, ["ga"])).toContain("A selected tier isn't on this bash.");
74
+ });
75
+ it("blocks saving a promoter code until the reward is reviewed", () => {
76
+ expect(promoterCodeInputErrors({ ...ok, promoterEmail: "p@x.com" }, [])).toContain("Review the promoter reward before saving.");
77
+ expect(promoterCodeInputErrors({ ...ok, promoterEmail: "p@x.com", promoterRewardReviewed: true }, [])).toEqual([]);
78
+ });
79
+ it("accepts BashPoints as a compensation method", () => {
80
+ expect(promoterCodeInputErrors({ ...ok, compensationMethod: "BashPoints" }, [])).toEqual([]);
81
+ expect(promoterCodeInputErrors({ ...ok, compensationMethod: "Wire" }, [])).toContain("Choose Venmo, Zelle, Cash App, or BashPoints.");
82
+ });
83
+ });
84
+ //# sourceMappingURL=promoCodeScope.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promoCodeScope.test.js","sourceRoot":"","sources":["../../src/__tests__/promoCodeScope.test.ts"],"names":[],"mappings":"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"}
@@ -109,6 +109,7 @@ describe("status enum value sets", () => {
109
109
  "CompetitionFinalist",
110
110
  "CompetitionWin",
111
111
  "HornClear",
112
+ "IntrosEarlyReveal",
112
113
  ].sort());
113
114
  });
114
115
  });
@@ -1 +1 @@
1
- {"version":3,"file":"statusEnums.test.js","sourceRoot":"","sources":["../../src/__tests__/statusEnums.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"statusEnums.test.js","sourceRoot":"","sources":["../../src/__tests__/statusEnums.test.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,7 @@
8
8
  */
9
9
  import { BashPassTier, MembershipTier } from "@prisma/client";
10
10
  import { FEATURE_BOOST_DURATIONS } from "./membershipDefinitions.js";
11
- export type AppleIapProductFamily = "membership" | "listing" | "bashpass" | "feature_boost";
11
+ export type AppleIapProductFamily = "membership" | "listing" | "bashpass" | "feature_boost" | "early_reveal";
12
12
  export type AppleMembershipInterval = "monthly" | "yearly" | "lifetime";
13
13
  export type AppleListingTier = "Ally" | "Partner" | "Patron";
14
14
  export interface AppleMembershipProduct {
@@ -40,7 +40,13 @@ export interface AppleFeatureBoostProduct {
40
40
  hours: number;
41
41
  priceCents: number;
42
42
  }
43
- export type AppleIapProduct = AppleMembershipProduct | AppleListingProduct | AppleBashPassProduct | AppleFeatureBoostProduct;
43
+ /** Consumable. App Store Connect must exist before a live iOS purchase can complete. */
44
+ export interface AppleEarlyRevealProduct {
45
+ productId: string;
46
+ family: "early_reveal";
47
+ priceCents: number;
48
+ }
49
+ export type AppleIapProduct = AppleMembershipProduct | AppleListingProduct | AppleBashPassProduct | AppleFeatureBoostProduct | AppleEarlyRevealProduct;
44
50
  export declare const APPLE_MEMBERSHIP_PRODUCTS: readonly AppleMembershipProduct[];
45
51
  /** Listing seat subscriptions. Dollars in SERVICE_SUBSCRIPTION_TIERS → cents. */
46
52
  export declare const APPLE_LISTING_PRODUCTS: readonly AppleListingProduct[];
@@ -51,14 +57,18 @@ export declare const APPLE_LISTING_PRODUCTS: readonly AppleListingProduct[];
51
57
  export declare const APPLE_BASHPASS_PRICE_CENTS: Record<BashPassTier, number>;
52
58
  export declare const APPLE_BASHPASS_PRODUCTS: readonly AppleBashPassProduct[];
53
59
  export declare const APPLE_FEATURE_BOOST_PRODUCTS: readonly AppleFeatureBoostProduct[];
60
+ export declare const APPLE_EARLY_REVEAL_PRODUCT: AppleEarlyRevealProduct;
54
61
  export declare const APPLE_IAP_PRODUCTS: readonly AppleIapProduct[];
55
62
  export declare function getAppleIapProduct(productId: string): AppleIapProduct | undefined;
56
63
  export declare function isAppleIapProductId(productId: string): boolean;
64
+ /** Play Console product IDs for this release. Early reveal is excluded. */
65
+ export declare function listPlayBillingProductIds(): string[];
57
66
  export declare function listAppleIapProductIds(family?: AppleIapProductFamily): string[];
58
67
  export declare function findAppleMembershipProduct(tier: Exclude<MembershipTier, "Basic" | "Guest">, interval: AppleMembershipInterval): AppleMembershipProduct | undefined;
59
68
  export declare function findAppleListingProduct(tier: AppleListingTier): AppleListingProduct | undefined;
60
69
  export declare function findAppleBashPassProduct(tier: BashPassTier): AppleBashPassProduct | undefined;
61
70
  export declare function findAppleFeatureBoostProduct(durationId: (typeof FEATURE_BOOST_DURATIONS)[number]["id"]): AppleFeatureBoostProduct | undefined;
71
+ export declare function findAppleEarlyRevealProduct(): AppleEarlyRevealProduct;
62
72
  /** Apple subscription management deep link (Settings → Subscriptions). */
63
73
  export declare const APPLE_SUBSCRIPTIONS_MANAGEMENT_URL = "https://apps.apple.com/account/subscriptions";
64
74
  //# sourceMappingURL=appleIapProducts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"appleIapProducts.d.ts","sourceRoot":"","sources":["../src/appleIapProducts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"appleIapProducts.d.ts","sourceRoot":"","sources":["../src/appleIapProducts.ts"],"names":[],"mappings":"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"}