@voyant-travel/commerce 0.1.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 (210) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +145 -0
  3. package/dist/accepted-quote-version-reservation-golden-flow.test.d.ts +2 -0
  4. package/dist/accepted-quote-version-reservation-golden-flow.test.d.ts.map +1 -0
  5. package/dist/accepted-quote-version-reservation-golden-flow.test.js +398 -0
  6. package/dist/index.d.ts +15 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +14 -0
  9. package/dist/interface.d.ts +18 -0
  10. package/dist/interface.d.ts.map +1 -0
  11. package/dist/interface.js +246 -0
  12. package/dist/interface.test.d.ts +2 -0
  13. package/dist/interface.test.d.ts.map +1 -0
  14. package/dist/interface.test.js +357 -0
  15. package/dist/markets/index.d.ts +11 -0
  16. package/dist/markets/index.d.ts.map +1 -0
  17. package/dist/markets/index.js +12 -0
  18. package/dist/markets/routes.d.ts +1182 -0
  19. package/dist/markets/routes.d.ts.map +1 -0
  20. package/dist/markets/routes.js +209 -0
  21. package/dist/markets/schema.d.ts +1527 -0
  22. package/dist/markets/schema.d.ts.map +1 -0
  23. package/dist/markets/schema.js +240 -0
  24. package/dist/markets/service-core.d.ts +253 -0
  25. package/dist/markets/service-core.d.ts.map +1 -0
  26. package/dist/markets/service-core.js +242 -0
  27. package/dist/markets/service-rules.d.ts +191 -0
  28. package/dist/markets/service-rules.d.ts.map +1 -0
  29. package/dist/markets/service-rules.js +155 -0
  30. package/dist/markets/service-shared.d.ts +36 -0
  31. package/dist/markets/service-shared.d.ts.map +1 -0
  32. package/dist/markets/service-shared.js +7 -0
  33. package/dist/markets/service.d.ts +43 -0
  34. package/dist/markets/service.d.ts.map +1 -0
  35. package/dist/markets/service.js +42 -0
  36. package/dist/markets/validation.d.ts +451 -0
  37. package/dist/markets/validation.d.ts.map +1 -0
  38. package/dist/markets/validation.js +160 -0
  39. package/dist/pricing/events.d.ts +53 -0
  40. package/dist/pricing/events.d.ts.map +1 -0
  41. package/dist/pricing/events.js +28 -0
  42. package/dist/pricing/index.d.ts +15 -0
  43. package/dist/pricing/index.d.ts.map +1 -0
  44. package/dist/pricing/index.js +18 -0
  45. package/dist/pricing/routes-core.d.ts +981 -0
  46. package/dist/pricing/routes-core.d.ts.map +1 -0
  47. package/dist/pricing/routes-core.js +102 -0
  48. package/dist/pricing/routes-public.d.ts +136 -0
  49. package/dist/pricing/routes-public.d.ts.map +1 -0
  50. package/dist/pricing/routes-public.js +14 -0
  51. package/dist/pricing/routes-rules.d.ts +1339 -0
  52. package/dist/pricing/routes-rules.d.ts.map +1 -0
  53. package/dist/pricing/routes-rules.js +138 -0
  54. package/dist/pricing/routes-shared.d.ts +14 -0
  55. package/dist/pricing/routes-shared.d.ts.map +1 -0
  56. package/dist/pricing/routes-shared.js +3 -0
  57. package/dist/pricing/routes.d.ts +7 -0
  58. package/dist/pricing/routes.d.ts.map +1 -0
  59. package/dist/pricing/routes.js +6 -0
  60. package/dist/pricing/schema-catalogs.d.ts +467 -0
  61. package/dist/pricing/schema-catalogs.d.ts.map +1 -0
  62. package/dist/pricing/schema-catalogs.js +47 -0
  63. package/dist/pricing/schema-categories.d.ts +497 -0
  64. package/dist/pricing/schema-categories.d.ts.map +1 -0
  65. package/dist/pricing/schema-categories.js +54 -0
  66. package/dist/pricing/schema-departure-overrides.d.ts +228 -0
  67. package/dist/pricing/schema-departure-overrides.d.ts.map +1 -0
  68. package/dist/pricing/schema-departure-overrides.js +36 -0
  69. package/dist/pricing/schema-option-rules.d.ts +1770 -0
  70. package/dist/pricing/schema-option-rules.d.ts.map +1 -0
  71. package/dist/pricing/schema-option-rules.js +181 -0
  72. package/dist/pricing/schema-policies.d.ts +395 -0
  73. package/dist/pricing/schema-policies.d.ts.map +1 -0
  74. package/dist/pricing/schema-policies.js +41 -0
  75. package/dist/pricing/schema-relations.d.ts +59 -0
  76. package/dist/pricing/schema-relations.d.ts.map +1 -0
  77. package/dist/pricing/schema-relations.js +111 -0
  78. package/dist/pricing/schema-shared.d.ts +11 -0
  79. package/dist/pricing/schema-shared.d.ts.map +1 -0
  80. package/dist/pricing/schema-shared.js +67 -0
  81. package/dist/pricing/schema.d.ts +8 -0
  82. package/dist/pricing/schema.d.ts.map +1 -0
  83. package/dist/pricing/schema.js +7 -0
  84. package/dist/pricing/service-catalog-plane-pricing.d.ts +95 -0
  85. package/dist/pricing/service-catalog-plane-pricing.d.ts.map +1 -0
  86. package/dist/pricing/service-catalog-plane-pricing.js +382 -0
  87. package/dist/pricing/service-catalogs.d.ts +139 -0
  88. package/dist/pricing/service-catalogs.d.ts.map +1 -0
  89. package/dist/pricing/service-catalogs.js +89 -0
  90. package/dist/pricing/service-categories.d.ts +147 -0
  91. package/dist/pricing/service-categories.d.ts.map +1 -0
  92. package/dist/pricing/service-categories.js +105 -0
  93. package/dist/pricing/service-departure-overrides.d.ts +67 -0
  94. package/dist/pricing/service-departure-overrides.d.ts.map +1 -0
  95. package/dist/pricing/service-departure-overrides.js +54 -0
  96. package/dist/pricing/service-option-rules.d.ts +321 -0
  97. package/dist/pricing/service-option-rules.d.ts.map +1 -0
  98. package/dist/pricing/service-option-rules.js +340 -0
  99. package/dist/pricing/service-policies.d.ts +123 -0
  100. package/dist/pricing/service-policies.d.ts.map +1 -0
  101. package/dist/pricing/service-policies.js +95 -0
  102. package/dist/pricing/service-public.d.ts +89 -0
  103. package/dist/pricing/service-public.d.ts.map +1 -0
  104. package/dist/pricing/service-public.js +473 -0
  105. package/dist/pricing/service-rule-resolver.d.ts +67 -0
  106. package/dist/pricing/service-rule-resolver.d.ts.map +1 -0
  107. package/dist/pricing/service-rule-resolver.js +204 -0
  108. package/dist/pricing/service-shared.d.ts +53 -0
  109. package/dist/pricing/service-shared.d.ts.map +1 -0
  110. package/dist/pricing/service-shared.js +4 -0
  111. package/dist/pricing/service-transfer-rules.d.ts +211 -0
  112. package/dist/pricing/service-transfer-rules.d.ts.map +1 -0
  113. package/dist/pricing/service-transfer-rules.js +139 -0
  114. package/dist/pricing/service.d.ts +79 -0
  115. package/dist/pricing/service.d.ts.map +1 -0
  116. package/dist/pricing/service.js +78 -0
  117. package/dist/pricing/validation-public.d.ts +412 -0
  118. package/dist/pricing/validation-public.d.ts.map +1 -0
  119. package/dist/pricing/validation-public.js +111 -0
  120. package/dist/pricing/validation-shared.d.ts +71 -0
  121. package/dist/pricing/validation-shared.d.ts.map +1 -0
  122. package/dist/pricing/validation-shared.js +63 -0
  123. package/dist/pricing/validation.d.ts +987 -0
  124. package/dist/pricing/validation.d.ts.map +1 -0
  125. package/dist/pricing/validation.js +307 -0
  126. package/dist/promotions/events.d.ts +38 -0
  127. package/dist/promotions/events.d.ts.map +1 -0
  128. package/dist/promotions/events.js +25 -0
  129. package/dist/promotions/index.d.ts +12 -0
  130. package/dist/promotions/index.d.ts.map +1 -0
  131. package/dist/promotions/index.js +17 -0
  132. package/dist/promotions/routes-shared.d.ts +14 -0
  133. package/dist/promotions/routes-shared.d.ts.map +1 -0
  134. package/dist/promotions/routes-shared.js +3 -0
  135. package/dist/promotions/routes.d.ts +395 -0
  136. package/dist/promotions/routes.d.ts.map +1 -0
  137. package/dist/promotions/routes.js +55 -0
  138. package/dist/promotions/schema.d.ts +675 -0
  139. package/dist/promotions/schema.d.ts.map +1 -0
  140. package/dist/promotions/schema.js +126 -0
  141. package/dist/promotions/service-booking-confirmed.d.ts +77 -0
  142. package/dist/promotions/service-booking-confirmed.d.ts.map +1 -0
  143. package/dist/promotions/service-booking-confirmed.js +134 -0
  144. package/dist/promotions/service-boundary-scheduler.d.ts +85 -0
  145. package/dist/promotions/service-boundary-scheduler.d.ts.map +1 -0
  146. package/dist/promotions/service-boundary-scheduler.js +141 -0
  147. package/dist/promotions/service-catalog-evaluator.d.ts +22 -0
  148. package/dist/promotions/service-catalog-evaluator.d.ts.map +1 -0
  149. package/dist/promotions/service-catalog-evaluator.js +33 -0
  150. package/dist/promotions/service-catalog-plane-promotions.d.ts +73 -0
  151. package/dist/promotions/service-catalog-plane-promotions.d.ts.map +1 -0
  152. package/dist/promotions/service-catalog-plane-promotions.js +118 -0
  153. package/dist/promotions/service-evaluator.d.ts +134 -0
  154. package/dist/promotions/service-evaluator.d.ts.map +1 -0
  155. package/dist/promotions/service-evaluator.js +302 -0
  156. package/dist/promotions/service-storefront.d.ts +147 -0
  157. package/dist/promotions/service-storefront.d.ts.map +1 -0
  158. package/dist/promotions/service-storefront.js +326 -0
  159. package/dist/promotions/service.d.ts +143 -0
  160. package/dist/promotions/service.d.ts.map +1 -0
  161. package/dist/promotions/service.js +359 -0
  162. package/dist/promotions/validation.d.ts +195 -0
  163. package/dist/promotions/validation.d.ts.map +1 -0
  164. package/dist/promotions/validation.js +167 -0
  165. package/dist/promotions/workflow-bulk-reindex.d.ts +36 -0
  166. package/dist/promotions/workflow-bulk-reindex.d.ts.map +1 -0
  167. package/dist/promotions/workflow-bulk-reindex.js +53 -0
  168. package/dist/promotions/workflow-runtime.d.ts +17 -0
  169. package/dist/promotions/workflow-runtime.d.ts.map +1 -0
  170. package/dist/promotions/workflow-runtime.js +9 -0
  171. package/dist/runtime.d.ts +18 -0
  172. package/dist/runtime.d.ts.map +1 -0
  173. package/dist/runtime.js +27 -0
  174. package/dist/runtime.test.d.ts +2 -0
  175. package/dist/runtime.test.d.ts.map +1 -0
  176. package/dist/runtime.test.js +25 -0
  177. package/dist/schema.d.ts +5 -0
  178. package/dist/schema.d.ts.map +1 -0
  179. package/dist/schema.js +4 -0
  180. package/dist/sellability/index.d.ts +13 -0
  181. package/dist/sellability/index.d.ts.map +1 -0
  182. package/dist/sellability/index.js +17 -0
  183. package/dist/sellability/routes.d.ts +2332 -0
  184. package/dist/sellability/routes.d.ts.map +1 -0
  185. package/dist/sellability/routes.js +166 -0
  186. package/dist/sellability/schema.d.ts +1716 -0
  187. package/dist/sellability/schema.d.ts.map +1 -0
  188. package/dist/sellability/schema.js +278 -0
  189. package/dist/sellability/service-records.d.ts +316 -0
  190. package/dist/sellability/service-records.d.ts.map +1 -0
  191. package/dist/sellability/service-records.js +253 -0
  192. package/dist/sellability/service-resolve.d.ts +72 -0
  193. package/dist/sellability/service-resolve.d.ts.map +1 -0
  194. package/dist/sellability/service-resolve.js +580 -0
  195. package/dist/sellability/service-shared.d.ts +124 -0
  196. package/dist/sellability/service-shared.d.ts.map +1 -0
  197. package/dist/sellability/service-shared.js +96 -0
  198. package/dist/sellability/service-snapshots.d.ts +191 -0
  199. package/dist/sellability/service-snapshots.d.ts.map +1 -0
  200. package/dist/sellability/service-snapshots.js +153 -0
  201. package/dist/sellability/service.d.ts +1038 -0
  202. package/dist/sellability/service.d.ts.map +1 -0
  203. package/dist/sellability/service.js +17 -0
  204. package/dist/sellability/validation.d.ts +477 -0
  205. package/dist/sellability/validation.d.ts.map +1 -0
  206. package/dist/sellability/validation.js +192 -0
  207. package/dist/types.d.ts +239 -0
  208. package/dist/types.d.ts.map +1 -0
  209. package/dist/types.js +1 -0
  210. package/package.json +62 -0
@@ -0,0 +1,160 @@
1
+ import { booleanQueryParam } from "@voyant-travel/db/helpers";
2
+ import { z } from "zod";
3
+ const paginationSchema = z.object({
4
+ limit: z.coerce.number().int().min(1).max(200).default(50),
5
+ offset: z.coerce.number().int().min(0).default(0),
6
+ });
7
+ const languageTagSchema = z
8
+ .string()
9
+ .min(2)
10
+ .max(35)
11
+ .regex(/^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8})*$/);
12
+ const currencyCodeSchema = z
13
+ .string()
14
+ .length(3)
15
+ .regex(/^[A-Z]{3}$/);
16
+ const numericStringSchema = z.string().regex(/^\d+(\.\d+)?$/);
17
+ export const marketStatusSchema = z.enum(["active", "inactive", "archived"]);
18
+ export const marketVisibilitySchema = z.enum(["public", "private", "hidden"]);
19
+ export const marketSellabilitySchema = z.enum(["sellable", "on_request", "unavailable"]);
20
+ export const marketChannelScopeSchema = z.enum(["all", "b2c", "b2b", "internal"]);
21
+ export const fxRateSourceSchema = z.enum([
22
+ "manual",
23
+ "ecb",
24
+ "custom",
25
+ "channel",
26
+ "supplier",
27
+ "other",
28
+ ]);
29
+ export const marketCoreSchema = z.object({
30
+ code: z.string().min(1).max(50),
31
+ name: z.string().min(1).max(255),
32
+ status: marketStatusSchema.default("active"),
33
+ regionCode: z.string().max(20).nullable().optional(),
34
+ countryCode: z.string().max(2).nullable().optional(),
35
+ defaultLanguageTag: languageTagSchema,
36
+ defaultCurrency: currencyCodeSchema,
37
+ timezone: z.string().max(100).nullable().optional(),
38
+ taxContext: z.string().max(255).nullable().optional(),
39
+ metadata: z.record(z.string(), z.unknown()).nullable().optional(),
40
+ });
41
+ export const insertMarketSchema = marketCoreSchema;
42
+ export const updateMarketSchema = marketCoreSchema.partial();
43
+ export const marketListQuerySchema = paginationSchema.extend({
44
+ status: marketStatusSchema.optional(),
45
+ countryCode: z.string().optional(),
46
+ search: z.string().optional(),
47
+ });
48
+ export const marketLocaleCoreSchema = z.object({
49
+ languageTag: languageTagSchema,
50
+ isDefault: z.boolean().default(false),
51
+ sortOrder: z.number().int().min(0).default(0),
52
+ active: z.boolean().default(true),
53
+ });
54
+ export const insertMarketLocaleSchema = marketLocaleCoreSchema;
55
+ export const updateMarketLocaleSchema = marketLocaleCoreSchema.partial();
56
+ export const marketLocaleListQuerySchema = paginationSchema.extend({
57
+ marketId: z.string().optional(),
58
+ languageTag: languageTagSchema.optional(),
59
+ active: booleanQueryParam.optional(),
60
+ });
61
+ export const marketCurrencyCoreSchema = z.object({
62
+ currencyCode: currencyCodeSchema,
63
+ isDefault: z.boolean().default(false),
64
+ isSettlement: z.boolean().default(false),
65
+ isReporting: z.boolean().default(false),
66
+ sortOrder: z.number().int().min(0).default(0),
67
+ active: z.boolean().default(true),
68
+ });
69
+ export const insertMarketCurrencySchema = marketCurrencyCoreSchema;
70
+ export const updateMarketCurrencySchema = marketCurrencyCoreSchema.partial();
71
+ export const marketCurrencyListQuerySchema = paginationSchema.extend({
72
+ marketId: z.string().optional(),
73
+ currencyCode: currencyCodeSchema.optional(),
74
+ active: booleanQueryParam.optional(),
75
+ });
76
+ export const fxRateSetCoreSchema = z.object({
77
+ source: fxRateSourceSchema.default("manual"),
78
+ baseCurrency: currencyCodeSchema,
79
+ effectiveAt: z.string().datetime(),
80
+ observedAt: z.string().datetime().nullable().optional(),
81
+ sourceReference: z.string().max(255).nullable().optional(),
82
+ notes: z.string().nullable().optional(),
83
+ metadata: z.record(z.string(), z.unknown()).nullable().optional(),
84
+ });
85
+ export const insertFxRateSetSchema = fxRateSetCoreSchema;
86
+ export const updateFxRateSetSchema = fxRateSetCoreSchema.partial();
87
+ export const fxRateSetListQuerySchema = paginationSchema.extend({
88
+ source: fxRateSourceSchema.optional(),
89
+ baseCurrency: currencyCodeSchema.optional(),
90
+ });
91
+ export const exchangeRateCoreSchema = z.object({
92
+ baseCurrency: currencyCodeSchema,
93
+ quoteCurrency: currencyCodeSchema,
94
+ rateDecimal: numericStringSchema,
95
+ inverseRateDecimal: numericStringSchema.nullable().optional(),
96
+ observedAt: z.string().datetime().nullable().optional(),
97
+ });
98
+ export const insertExchangeRateSchema = exchangeRateCoreSchema;
99
+ export const updateExchangeRateSchema = exchangeRateCoreSchema.partial();
100
+ export const exchangeRateListQuerySchema = paginationSchema.extend({
101
+ fxRateSetId: z.string().optional(),
102
+ baseCurrency: currencyCodeSchema.optional(),
103
+ quoteCurrency: currencyCodeSchema.optional(),
104
+ });
105
+ export const marketPriceCatalogCoreSchema = z.object({
106
+ marketId: z.string(),
107
+ priceCatalogId: z.string(),
108
+ isDefault: z.boolean().default(false),
109
+ priority: z.number().int().default(0),
110
+ active: z.boolean().default(true),
111
+ notes: z.string().nullable().optional(),
112
+ metadata: z.record(z.string(), z.unknown()).nullable().optional(),
113
+ });
114
+ export const insertMarketPriceCatalogSchema = marketPriceCatalogCoreSchema;
115
+ export const updateMarketPriceCatalogSchema = marketPriceCatalogCoreSchema.partial();
116
+ export const marketPriceCatalogListQuerySchema = paginationSchema.extend({
117
+ marketId: z.string().optional(),
118
+ priceCatalogId: z.string().optional(),
119
+ active: booleanQueryParam.optional(),
120
+ });
121
+ export const marketProductRuleCoreSchema = z.object({
122
+ marketId: z.string(),
123
+ productId: z.string(),
124
+ optionId: z.string().nullable().optional(),
125
+ priceCatalogId: z.string().nullable().optional(),
126
+ visibility: marketVisibilitySchema.default("public"),
127
+ sellability: marketSellabilitySchema.default("sellable"),
128
+ channelScope: marketChannelScopeSchema.default("all"),
129
+ active: z.boolean().default(true),
130
+ availableFrom: z.string().date().nullable().optional(),
131
+ availableTo: z.string().date().nullable().optional(),
132
+ notes: z.string().nullable().optional(),
133
+ });
134
+ export const insertMarketProductRuleSchema = marketProductRuleCoreSchema;
135
+ export const updateMarketProductRuleSchema = marketProductRuleCoreSchema.partial();
136
+ export const marketProductRuleListQuerySchema = paginationSchema.extend({
137
+ marketId: z.string().optional(),
138
+ productId: z.string().optional(),
139
+ optionId: z.string().optional(),
140
+ sellability: marketSellabilitySchema.optional(),
141
+ active: booleanQueryParam.optional(),
142
+ });
143
+ export const marketChannelRuleCoreSchema = z.object({
144
+ marketId: z.string(),
145
+ channelId: z.string(),
146
+ priceCatalogId: z.string().nullable().optional(),
147
+ visibility: marketVisibilitySchema.default("public"),
148
+ sellability: marketSellabilitySchema.default("sellable"),
149
+ active: z.boolean().default(true),
150
+ priority: z.number().int().default(0),
151
+ notes: z.string().nullable().optional(),
152
+ });
153
+ export const insertMarketChannelRuleSchema = marketChannelRuleCoreSchema;
154
+ export const updateMarketChannelRuleSchema = marketChannelRuleCoreSchema.partial();
155
+ export const marketChannelRuleListQuerySchema = paginationSchema.extend({
156
+ marketId: z.string().optional(),
157
+ channelId: z.string().optional(),
158
+ sellability: marketSellabilitySchema.optional(),
159
+ active: booleanQueryParam.optional(),
160
+ });
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Pricing domain events.
3
+ *
4
+ * Emitted (after commit) by paths that mutate pricing rules feeding the
5
+ * catalog-plane `priceFromAmountCents` projection (PR4 of #493). The
6
+ * catalog bridge subscribes to these and reindexes the affected
7
+ * product so the denormalized "from $X" stays in sync without a full
8
+ * reindex run.
9
+ *
10
+ * Subscriber contract: treat the payload as a *trigger*, not the source
11
+ * of truth. Re-read the row(s) before acting on them — concurrent edits
12
+ * may have superseded the snapshot in this payload.
13
+ *
14
+ * Per docs/architecture/channel-push-architecture.md §5.1 (same shape as
15
+ * `availability.slot.changed`).
16
+ *
17
+ * Today's surface covers `option_price_rules` + `option_unit_price_rules`
18
+ * — the two tables that feed PR4's MIN aggregation. Other pricing
19
+ * tables (`option_start_time_rules`, `option_unit_tiers`,
20
+ * `departure_price_overrides`, `pickup_price_rules`, `cancellation_*`)
21
+ * intentionally do NOT emit yet: extending the catalog projection to
22
+ * read them is its own design conversation and emitting an event no
23
+ * subscriber consumes is dead surface area. When a future projection
24
+ * grows to read one of those tables, extend `kind` and add emission to
25
+ * the corresponding service function.
26
+ */
27
+ /** Stable string identifier for the event. */
28
+ export declare const PRICING_RULE_CHANGED_EVENT: "pricing.rule.changed";
29
+ /** Origin of the change. Diagnostic only — subscribers don't behave
30
+ * differently on this field, but it's preserved end-to-end so logs
31
+ * and dashboards can attribute drift to a cause. */
32
+ export type PricingRuleChangeSource = "created" | "updated" | "deleted";
33
+ /**
34
+ * Which pricing-rule table the mutation touched. Lets a subscriber
35
+ * filter without re-reading the row (e.g. a future projection that
36
+ * only cares about `option-rule` mutations can skip per-unit deltas).
37
+ */
38
+ export type PricingRuleKind = "option-rule" | "option-unit-rule";
39
+ export interface PricingRuleChangedEvent {
40
+ /**
41
+ * The product whose pricing surface changed. Subscribers reindex
42
+ * this product. Always set — every relevant rule belongs to a
43
+ * product (option-unit rules join through their parent option-rule
44
+ * to find the product).
45
+ */
46
+ productId: string;
47
+ /** The mutated row's id, for diagnostics. */
48
+ ruleId: string;
49
+ /** Which table was touched. */
50
+ kind: PricingRuleKind;
51
+ source: PricingRuleChangeSource;
52
+ }
53
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/pricing/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,0BAA0B,EAAG,sBAA+B,CAAA;AAEzE;;qDAEqD;AACrD,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAA;AAEvE;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,kBAAkB,CAAA;AAEhE,MAAM,WAAW,uBAAuB;IACtC;;;;;OAKG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB,6CAA6C;IAC7C,MAAM,EAAE,MAAM,CAAA;IACd,+BAA+B;IAC/B,IAAI,EAAE,eAAe,CAAA;IACrB,MAAM,EAAE,uBAAuB,CAAA;CAChC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Pricing domain events.
3
+ *
4
+ * Emitted (after commit) by paths that mutate pricing rules feeding the
5
+ * catalog-plane `priceFromAmountCents` projection (PR4 of #493). The
6
+ * catalog bridge subscribes to these and reindexes the affected
7
+ * product so the denormalized "from $X" stays in sync without a full
8
+ * reindex run.
9
+ *
10
+ * Subscriber contract: treat the payload as a *trigger*, not the source
11
+ * of truth. Re-read the row(s) before acting on them — concurrent edits
12
+ * may have superseded the snapshot in this payload.
13
+ *
14
+ * Per docs/architecture/channel-push-architecture.md §5.1 (same shape as
15
+ * `availability.slot.changed`).
16
+ *
17
+ * Today's surface covers `option_price_rules` + `option_unit_price_rules`
18
+ * — the two tables that feed PR4's MIN aggregation. Other pricing
19
+ * tables (`option_start_time_rules`, `option_unit_tiers`,
20
+ * `departure_price_overrides`, `pickup_price_rules`, `cancellation_*`)
21
+ * intentionally do NOT emit yet: extending the catalog projection to
22
+ * read them is its own design conversation and emitting an event no
23
+ * subscriber consumes is dead surface area. When a future projection
24
+ * grows to read one of those tables, extend `kind` and add emission to
25
+ * the corresponding service function.
26
+ */
27
+ /** Stable string identifier for the event. */
28
+ export const PRICING_RULE_CHANGED_EVENT = "pricing.rule.changed";
@@ -0,0 +1,15 @@
1
+ import type { Module } from "@voyant-travel/core";
2
+ import type { HonoModule } from "@voyant-travel/hono/module";
3
+ import { pricingService } from "./service.js";
4
+ export type { PricingRoutes } from "./routes.js";
5
+ export type { PublicPricingRoutes } from "./routes-public.js";
6
+ export { publicPricingRoutes } from "./routes-public.js";
7
+ export { publicPricingService } from "./service-public.js";
8
+ export declare const pricingModule: Module;
9
+ export declare const pricingHonoModule: HonoModule;
10
+ export type { CancellationPolicy, CancellationPolicyRule, DeparturePriceOverride, DropoffPriceRule, ExtraPriceRule, NewCancellationPolicy, NewCancellationPolicyRule, NewDeparturePriceOverride, NewDropoffPriceRule, NewExtraPriceRule, NewOptionPriceRule, NewOptionStartTimeRule, NewOptionUnitPriceRule, NewOptionUnitTier, NewPickupPriceRule, NewPriceCatalog, NewPriceSchedule, NewPricingCategory, NewPricingCategoryDependency, OptionPriceRule, OptionStartTimeRule, OptionUnitPriceRule, OptionUnitTier, PickupPriceRule, PriceCatalog, PriceSchedule, PricingCategory, PricingCategoryDependency, } from "./schema.js";
11
+ export { addonPricingModeEnum, cancellationChargeTypeEnum, cancellationPolicies, cancellationPolicyRules, cancellationPolicyTypeEnum, departurePriceOverrides, dropoffPriceRules, extraPriceRules, optionPriceRules, optionPricingModeEnum, optionStartTimeRuleModeEnum, optionStartTimeRules, optionUnitPriceRules, optionUnitPricingModeEnum, optionUnitTiers, pickupPriceRules, priceAdjustmentTypeEnum, priceCatalogs, priceCatalogTypeEnum, priceSchedules, pricingCategories, pricingCategoryDependencies, pricingCategoryTypeEnum, pricingDependencyTypeEnum, } from "./schema.js";
12
+ export { loadDeparturePriceOverrides, pickRulesForDate, type ResolverRuleInput, type ResolverScheduleInput, resolveOptionPriceRulesForDate, type UnitPriceOverride, } from "./service-rule-resolver.js";
13
+ export { addonPricingModeSchema, cancellationChargeTypeSchema, cancellationPolicyListQuerySchema, cancellationPolicyRuleListQuerySchema, cancellationPolicyTypeSchema, departurePriceOverrideListQuerySchema, dropoffPriceRuleListQuerySchema, extraPriceRuleListQuerySchema, insertCancellationPolicyRuleSchema, insertCancellationPolicySchema, insertDeparturePriceOverrideSchema, insertDropoffPriceRuleSchema, insertExtraPriceRuleSchema, insertOptionPriceRuleSchema, insertOptionStartTimeRuleSchema, insertOptionUnitPriceRuleSchema, insertOptionUnitTierSchema, insertPickupPriceRuleSchema, insertPriceCatalogSchema, insertPriceScheduleSchema, insertPricingCategoryDependencySchema, insertPricingCategorySchema, optionPriceRuleListQuerySchema, optionPricingModeSchema, optionStartTimeRuleListQuerySchema, optionStartTimeRuleModeSchema, optionUnitPriceRuleListQuerySchema, optionUnitPricingModeSchema, optionUnitTierListQuerySchema, pickupPriceRuleListQuerySchema, priceAdjustmentTypeSchema, priceCatalogListQuerySchema, priceCatalogTypeSchema, priceScheduleListQuerySchema, pricingCategoryDependencyListQuerySchema, pricingCategoryListQuerySchema, pricingCategoryTypeSchema, pricingDependencyTypeSchema, updateCancellationPolicyRuleSchema, updateCancellationPolicySchema, updateDeparturePriceOverrideSchema, updateDropoffPriceRuleSchema, updateExtraPriceRuleSchema, updateOptionPriceRuleSchema, updateOptionStartTimeRuleSchema, updateOptionUnitPriceRuleSchema, updateOptionUnitTierSchema, updatePickupPriceRuleSchema, updatePriceCatalogSchema, updatePriceScheduleSchema, updatePricingCategoryDependencySchema, updatePricingCategorySchema, } from "./validation.js";
14
+ export { pricingService };
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pricing/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAG5D,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,eAAO,MAAM,aAAa,EAAE,MAE3B,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,UAK/B,CAAA;AAED,YAAY,EACV,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,yBAAyB,EACzB,yBAAyB,EACzB,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,4BAA4B,EAC5B,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EACf,yBAAyB,GAC1B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,oBAAoB,EACpB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,EACvB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,qBAAqB,EACrB,2BAA2B,EAC3B,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,aAAa,EACb,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,2BAA2B,EAC3B,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,2BAA2B,EAC3B,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,8BAA8B,EAC9B,KAAK,iBAAiB,GACvB,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,sBAAsB,EACtB,4BAA4B,EAC5B,iCAAiC,EACjC,qCAAqC,EACrC,4BAA4B,EAC5B,qCAAqC,EACrC,+BAA+B,EAC/B,6BAA6B,EAC7B,kCAAkC,EAClC,8BAA8B,EAC9B,kCAAkC,EAClC,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,+BAA+B,EAC/B,+BAA+B,EAC/B,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,qCAAqC,EACrC,2BAA2B,EAC3B,8BAA8B,EAC9B,uBAAuB,EACvB,kCAAkC,EAClC,6BAA6B,EAC7B,kCAAkC,EAClC,2BAA2B,EAC3B,6BAA6B,EAC7B,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,4BAA4B,EAC5B,wCAAwC,EACxC,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,kCAAkC,EAClC,8BAA8B,EAC9B,kCAAkC,EAClC,4BAA4B,EAC5B,0BAA0B,EAC1B,2BAA2B,EAC3B,+BAA+B,EAC/B,+BAA+B,EAC/B,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,qCAAqC,EACrC,2BAA2B,GAC5B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { pricingRoutes } from "./routes.js";
2
+ import { publicPricingRoutes } from "./routes-public.js";
3
+ import { pricingService } from "./service.js";
4
+ export { publicPricingRoutes } from "./routes-public.js";
5
+ export { publicPricingService } from "./service-public.js";
6
+ export const pricingModule = {
7
+ name: "pricing",
8
+ };
9
+ export const pricingHonoModule = {
10
+ module: pricingModule,
11
+ adminRoutes: pricingRoutes,
12
+ publicRoutes: publicPricingRoutes,
13
+ routes: pricingRoutes,
14
+ };
15
+ export { addonPricingModeEnum, cancellationChargeTypeEnum, cancellationPolicies, cancellationPolicyRules, cancellationPolicyTypeEnum, departurePriceOverrides, dropoffPriceRules, extraPriceRules, optionPriceRules, optionPricingModeEnum, optionStartTimeRuleModeEnum, optionStartTimeRules, optionUnitPriceRules, optionUnitPricingModeEnum, optionUnitTiers, pickupPriceRules, priceAdjustmentTypeEnum, priceCatalogs, priceCatalogTypeEnum, priceSchedules, pricingCategories, pricingCategoryDependencies, pricingCategoryTypeEnum, pricingDependencyTypeEnum, } from "./schema.js";
16
+ export { loadDeparturePriceOverrides, pickRulesForDate, resolveOptionPriceRulesForDate, } from "./service-rule-resolver.js";
17
+ export { addonPricingModeSchema, cancellationChargeTypeSchema, cancellationPolicyListQuerySchema, cancellationPolicyRuleListQuerySchema, cancellationPolicyTypeSchema, departurePriceOverrideListQuerySchema, dropoffPriceRuleListQuerySchema, extraPriceRuleListQuerySchema, insertCancellationPolicyRuleSchema, insertCancellationPolicySchema, insertDeparturePriceOverrideSchema, insertDropoffPriceRuleSchema, insertExtraPriceRuleSchema, insertOptionPriceRuleSchema, insertOptionStartTimeRuleSchema, insertOptionUnitPriceRuleSchema, insertOptionUnitTierSchema, insertPickupPriceRuleSchema, insertPriceCatalogSchema, insertPriceScheduleSchema, insertPricingCategoryDependencySchema, insertPricingCategorySchema, optionPriceRuleListQuerySchema, optionPricingModeSchema, optionStartTimeRuleListQuerySchema, optionStartTimeRuleModeSchema, optionUnitPriceRuleListQuerySchema, optionUnitPricingModeSchema, optionUnitTierListQuerySchema, pickupPriceRuleListQuerySchema, priceAdjustmentTypeSchema, priceCatalogListQuerySchema, priceCatalogTypeSchema, priceScheduleListQuerySchema, pricingCategoryDependencyListQuerySchema, pricingCategoryListQuerySchema, pricingCategoryTypeSchema, pricingDependencyTypeSchema, updateCancellationPolicyRuleSchema, updateCancellationPolicySchema, updateDeparturePriceOverrideSchema, updateDropoffPriceRuleSchema, updateExtraPriceRuleSchema, updateOptionPriceRuleSchema, updateOptionStartTimeRuleSchema, updateOptionUnitPriceRuleSchema, updateOptionUnitTierSchema, updatePickupPriceRuleSchema, updatePriceCatalogSchema, updatePriceScheduleSchema, updatePricingCategoryDependencySchema, updatePricingCategorySchema, } from "./validation.js";
18
+ export { pricingService };