@voyant-travel/catalog 0.117.2

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 (243) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +190 -0
  3. package/dist/adapter/booking-forwarding.d.ts +2 -0
  4. package/dist/adapter/booking-forwarding.d.ts.map +1 -0
  5. package/dist/adapter/booking-forwarding.js +1 -0
  6. package/dist/adapter/channel-push-contracts.d.ts +2 -0
  7. package/dist/adapter/channel-push-contracts.d.ts.map +1 -0
  8. package/dist/adapter/channel-push-contracts.js +1 -0
  9. package/dist/adapter/contract.d.ts +2 -0
  10. package/dist/adapter/contract.d.ts.map +1 -0
  11. package/dist/adapter/contract.js +1 -0
  12. package/dist/adapter/contract.test.d.ts +2 -0
  13. package/dist/adapter/contract.test.d.ts.map +1 -0
  14. package/dist/adapter/contract.test.js +390 -0
  15. package/dist/adapter/provider-contracts.d.ts +2 -0
  16. package/dist/adapter/provider-contracts.d.ts.map +1 -0
  17. package/dist/adapter/provider-contracts.js +1 -0
  18. package/dist/adapter/provider-contracts.test.d.ts +2 -0
  19. package/dist/adapter/provider-contracts.test.d.ts.map +1 -0
  20. package/dist/adapter/provider-contracts.test.js +206 -0
  21. package/dist/adapter/schemas.d.ts +2 -0
  22. package/dist/adapter/schemas.d.ts.map +1 -0
  23. package/dist/adapter/schemas.js +1 -0
  24. package/dist/adapter/schemas.test.d.ts +2 -0
  25. package/dist/adapter/schemas.test.d.ts.map +1 -0
  26. package/dist/adapter/schemas.test.js +344 -0
  27. package/dist/booking-engine/book.d.ts +124 -0
  28. package/dist/booking-engine/book.d.ts.map +1 -0
  29. package/dist/booking-engine/book.js +311 -0
  30. package/dist/booking-engine/cancel.d.ts +40 -0
  31. package/dist/booking-engine/cancel.d.ts.map +1 -0
  32. package/dist/booking-engine/cancel.js +56 -0
  33. package/dist/booking-engine/checkout-finalize.d.ts +146 -0
  34. package/dist/booking-engine/checkout-finalize.d.ts.map +1 -0
  35. package/dist/booking-engine/checkout-finalize.js +132 -0
  36. package/dist/booking-engine/contracts.d.ts +9 -0
  37. package/dist/booking-engine/contracts.d.ts.map +1 -0
  38. package/dist/booking-engine/contracts.js +8 -0
  39. package/dist/booking-engine/contracts.test.d.ts +2 -0
  40. package/dist/booking-engine/contracts.test.d.ts.map +1 -0
  41. package/dist/booking-engine/contracts.test.js +116 -0
  42. package/dist/booking-engine/draft-shape.d.ts +10 -0
  43. package/dist/booking-engine/draft-shape.d.ts.map +1 -0
  44. package/dist/booking-engine/draft-shape.js +9 -0
  45. package/dist/booking-engine/draft-shape.test.d.ts +2 -0
  46. package/dist/booking-engine/draft-shape.test.d.ts.map +1 -0
  47. package/dist/booking-engine/draft-shape.test.js +74 -0
  48. package/dist/booking-engine/drafts-schema.d.ts +302 -0
  49. package/dist/booking-engine/drafts-schema.d.ts.map +1 -0
  50. package/dist/booking-engine/drafts-schema.js +53 -0
  51. package/dist/booking-engine/drafts-service.d.ts +41 -0
  52. package/dist/booking-engine/drafts-service.d.ts.map +1 -0
  53. package/dist/booking-engine/drafts-service.js +108 -0
  54. package/dist/booking-engine/errors.d.ts +81 -0
  55. package/dist/booking-engine/errors.d.ts.map +1 -0
  56. package/dist/booking-engine/errors.js +113 -0
  57. package/dist/booking-engine/index.d.ts +36 -0
  58. package/dist/booking-engine/index.d.ts.map +1 -0
  59. package/dist/booking-engine/index.js +34 -0
  60. package/dist/booking-engine/orders.d.ts +41 -0
  61. package/dist/booking-engine/orders.d.ts.map +1 -0
  62. package/dist/booking-engine/orders.js +49 -0
  63. package/dist/booking-engine/owned-handler.d.ts +166 -0
  64. package/dist/booking-engine/owned-handler.d.ts.map +1 -0
  65. package/dist/booking-engine/owned-handler.js +50 -0
  66. package/dist/booking-engine/owned-handler.test.d.ts +2 -0
  67. package/dist/booking-engine/owned-handler.test.d.ts.map +1 -0
  68. package/dist/booking-engine/owned-handler.test.js +63 -0
  69. package/dist/booking-engine/promotions-contract.d.ts +8 -0
  70. package/dist/booking-engine/promotions-contract.d.ts.map +1 -0
  71. package/dist/booking-engine/promotions-contract.js +7 -0
  72. package/dist/booking-engine/quote-enricher.test.d.ts +12 -0
  73. package/dist/booking-engine/quote-enricher.test.d.ts.map +1 -0
  74. package/dist/booking-engine/quote-enricher.test.js +138 -0
  75. package/dist/booking-engine/quote.d.ts +163 -0
  76. package/dist/booking-engine/quote.d.ts.map +1 -0
  77. package/dist/booking-engine/quote.js +259 -0
  78. package/dist/booking-engine/registry.d.ts +85 -0
  79. package/dist/booking-engine/registry.d.ts.map +1 -0
  80. package/dist/booking-engine/registry.js +118 -0
  81. package/dist/booking-engine/registry.test.d.ts +2 -0
  82. package/dist/booking-engine/registry.test.d.ts.map +1 -0
  83. package/dist/booking-engine/registry.test.js +132 -0
  84. package/dist/booking-engine/routes-contracts.d.ts +169 -0
  85. package/dist/booking-engine/routes-contracts.d.ts.map +1 -0
  86. package/dist/booking-engine/routes-contracts.js +63 -0
  87. package/dist/booking-engine/routes.d.ts +7 -0
  88. package/dist/booking-engine/routes.d.ts.map +1 -0
  89. package/dist/booking-engine/routes.js +443 -0
  90. package/dist/booking-engine/routes.test.d.ts +2 -0
  91. package/dist/booking-engine/routes.test.d.ts.map +1 -0
  92. package/dist/booking-engine/routes.test.js +304 -0
  93. package/dist/booking-engine/schema.d.ts +455 -0
  94. package/dist/booking-engine/schema.d.ts.map +1 -0
  95. package/dist/booking-engine/schema.js +75 -0
  96. package/dist/booking-engine/snapshot-content.d.ts +120 -0
  97. package/dist/booking-engine/snapshot-content.d.ts.map +1 -0
  98. package/dist/booking-engine/snapshot-content.js +110 -0
  99. package/dist/booking-engine/snapshot-content.test.d.ts +2 -0
  100. package/dist/booking-engine/snapshot-content.test.d.ts.map +1 -0
  101. package/dist/booking-engine/snapshot-content.test.js +213 -0
  102. package/dist/booking-engine/sync.d.ts +136 -0
  103. package/dist/booking-engine/sync.d.ts.map +1 -0
  104. package/dist/booking-engine/sync.js +177 -0
  105. package/dist/booking-engine/sync.test.d.ts +2 -0
  106. package/dist/booking-engine/sync.test.d.ts.map +1 -0
  107. package/dist/booking-engine/sync.test.js +377 -0
  108. package/dist/contract.d.ts +2 -0
  109. package/dist/contract.d.ts.map +1 -0
  110. package/dist/contract.js +1 -0
  111. package/dist/contract.test.d.ts +2 -0
  112. package/dist/contract.test.d.ts.map +1 -0
  113. package/dist/contract.test.js +107 -0
  114. package/dist/drift/events.d.ts +2 -0
  115. package/dist/drift/events.d.ts.map +1 -0
  116. package/dist/drift/events.js +1 -0
  117. package/dist/drift/events.test.d.ts +2 -0
  118. package/dist/drift/events.test.d.ts.map +1 -0
  119. package/dist/drift/events.test.js +100 -0
  120. package/dist/embeddings/contract.d.ts +85 -0
  121. package/dist/embeddings/contract.d.ts.map +1 -0
  122. package/dist/embeddings/contract.js +42 -0
  123. package/dist/embeddings/contract.test.d.ts +2 -0
  124. package/dist/embeddings/contract.test.d.ts.map +1 -0
  125. package/dist/embeddings/contract.test.js +30 -0
  126. package/dist/embeddings/gemini.d.ts +110 -0
  127. package/dist/embeddings/gemini.d.ts.map +1 -0
  128. package/dist/embeddings/gemini.js +118 -0
  129. package/dist/embeddings/gemini.test.d.ts +2 -0
  130. package/dist/embeddings/gemini.test.d.ts.map +1 -0
  131. package/dist/embeddings/gemini.test.js +132 -0
  132. package/dist/embeddings/model-registry.d.ts +62 -0
  133. package/dist/embeddings/model-registry.d.ts.map +1 -0
  134. package/dist/embeddings/model-registry.js +78 -0
  135. package/dist/embeddings/model-registry.test.d.ts +2 -0
  136. package/dist/embeddings/model-registry.test.d.ts.map +1 -0
  137. package/dist/embeddings/model-registry.test.js +81 -0
  138. package/dist/embeddings/openai.d.ts +81 -0
  139. package/dist/embeddings/openai.d.ts.map +1 -0
  140. package/dist/embeddings/openai.js +123 -0
  141. package/dist/embeddings/openai.test.d.ts +2 -0
  142. package/dist/embeddings/openai.test.d.ts.map +1 -0
  143. package/dist/embeddings/openai.test.js +164 -0
  144. package/dist/events/taxonomy.d.ts +158 -0
  145. package/dist/events/taxonomy.d.ts.map +1 -0
  146. package/dist/events/taxonomy.js +99 -0
  147. package/dist/events/taxonomy.test.d.ts +2 -0
  148. package/dist/events/taxonomy.test.d.ts.map +1 -0
  149. package/dist/events/taxonomy.test.js +48 -0
  150. package/dist/index.d.ts +27 -0
  151. package/dist/index.d.ts.map +1 -0
  152. package/dist/index.js +39 -0
  153. package/dist/indexer/contract.d.ts +203 -0
  154. package/dist/indexer/contract.d.ts.map +1 -0
  155. package/dist/indexer/contract.js +16 -0
  156. package/dist/indexer/typesense-search-query.d.ts +31 -0
  157. package/dist/indexer/typesense-search-query.d.ts.map +1 -0
  158. package/dist/indexer/typesense-search-query.js +185 -0
  159. package/dist/indexer/typesense.d.ts +105 -0
  160. package/dist/indexer/typesense.d.ts.map +1 -0
  161. package/dist/indexer/typesense.js +394 -0
  162. package/dist/indexer/typesense.test.d.ts +2 -0
  163. package/dist/indexer/typesense.test.d.ts.map +1 -0
  164. package/dist/indexer/typesense.test.js +253 -0
  165. package/dist/overlay/resolver.d.ts +101 -0
  166. package/dist/overlay/resolver.d.ts.map +1 -0
  167. package/dist/overlay/resolver.js +167 -0
  168. package/dist/overlay/resolver.test.d.ts +2 -0
  169. package/dist/overlay/resolver.test.d.ts.map +1 -0
  170. package/dist/overlay/resolver.test.js +179 -0
  171. package/dist/overlay/schema.d.ts +266 -0
  172. package/dist/overlay/schema.d.ts.map +1 -0
  173. package/dist/overlay/schema.js +71 -0
  174. package/dist/provenance.d.ts +2 -0
  175. package/dist/provenance.d.ts.map +1 -0
  176. package/dist/provenance.js +1 -0
  177. package/dist/schema-sourced-entries.d.ts +344 -0
  178. package/dist/schema-sourced-entries.d.ts.map +1 -0
  179. package/dist/schema-sourced-entries.js +75 -0
  180. package/dist/schema.d.ts +21 -0
  181. package/dist/schema.d.ts.map +1 -0
  182. package/dist/schema.js +20 -0
  183. package/dist/search/federate.d.ts +58 -0
  184. package/dist/search/federate.d.ts.map +1 -0
  185. package/dist/search/federate.js +103 -0
  186. package/dist/search/federate.test.d.ts +2 -0
  187. package/dist/search/federate.test.d.ts.map +1 -0
  188. package/dist/search/federate.test.js +146 -0
  189. package/dist/search/rerank.d.ts +77 -0
  190. package/dist/search/rerank.d.ts.map +1 -0
  191. package/dist/search/rerank.js +68 -0
  192. package/dist/search/rerank.test.d.ts +2 -0
  193. package/dist/search/rerank.test.d.ts.map +1 -0
  194. package/dist/search/rerank.test.js +60 -0
  195. package/dist/search/routes.d.ts +144 -0
  196. package/dist/search/routes.d.ts.map +1 -0
  197. package/dist/search/routes.js +288 -0
  198. package/dist/search/routes.test.d.ts +2 -0
  199. package/dist/search/routes.test.d.ts.map +1 -0
  200. package/dist/search/routes.test.js +322 -0
  201. package/dist/search/semantic.d.ts +63 -0
  202. package/dist/search/semantic.d.ts.map +1 -0
  203. package/dist/search/semantic.js +75 -0
  204. package/dist/search/semantic.test.d.ts +2 -0
  205. package/dist/search/semantic.test.d.ts.map +1 -0
  206. package/dist/search/semantic.test.js +143 -0
  207. package/dist/services/build-indexer-document.test.d.ts +2 -0
  208. package/dist/services/build-indexer-document.test.d.ts.map +1 -0
  209. package/dist/services/build-indexer-document.test.js +102 -0
  210. package/dist/services/content-service.d.ts +125 -0
  211. package/dist/services/content-service.d.ts.map +1 -0
  212. package/dist/services/content-service.js +139 -0
  213. package/dist/services/content-service.test.d.ts +2 -0
  214. package/dist/services/content-service.test.d.ts.map +1 -0
  215. package/dist/services/content-service.test.js +322 -0
  216. package/dist/services/indexer-service.d.ts +109 -0
  217. package/dist/services/indexer-service.d.ts.map +1 -0
  218. package/dist/services/indexer-service.js +123 -0
  219. package/dist/services/indexer-service.test.d.ts +2 -0
  220. package/dist/services/indexer-service.test.d.ts.map +1 -0
  221. package/dist/services/indexer-service.test.js +176 -0
  222. package/dist/services/overlay-service.d.ts +108 -0
  223. package/dist/services/overlay-service.d.ts.map +1 -0
  224. package/dist/services/overlay-service.js +211 -0
  225. package/dist/services/overlay-service.test.d.ts +2 -0
  226. package/dist/services/overlay-service.test.d.ts.map +1 -0
  227. package/dist/services/overlay-service.test.js +79 -0
  228. package/dist/services/snapshot-builder.test.d.ts +2 -0
  229. package/dist/services/snapshot-builder.test.d.ts.map +1 -0
  230. package/dist/services/snapshot-builder.test.js +93 -0
  231. package/dist/services/snapshot-service.d.ts +78 -0
  232. package/dist/services/snapshot-service.d.ts.map +1 -0
  233. package/dist/services/snapshot-service.js +165 -0
  234. package/dist/services/sourced-entry-service.d.ts +142 -0
  235. package/dist/services/sourced-entry-service.d.ts.map +1 -0
  236. package/dist/services/sourced-entry-service.js +203 -0
  237. package/dist/services/sourced-entry-service.test.d.ts +10 -0
  238. package/dist/services/sourced-entry-service.test.d.ts.map +1 -0
  239. package/dist/services/sourced-entry-service.test.js +66 -0
  240. package/dist/snapshot/schema.d.ts +362 -0
  241. package/dist/snapshot/schema.d.ts.map +1 -0
  242. package/dist/snapshot/schema.js +102 -0
  243. package/package.json +210 -0
@@ -0,0 +1,118 @@
1
+ /**
2
+ * `SourceAdapterRegistry` — process-local map keyed by `connection_id` that
3
+ * the booking engine and channel-push pipeline consult when dispatching a
4
+ * quote / book / cancel / push call.
5
+ *
6
+ * Templates wire the registry at process start, registering one adapter
7
+ * instance per upstream connection. Two connections of the same kind
8
+ * (e.g. TUI dev + TUI prod, or two different Voyant Connect peers) get
9
+ * two registry entries with two distinct `connection_id`s — different
10
+ * credentials, different rate buckets, different `channel_id` mappings.
11
+ *
12
+ * `kind` remains a useful secondary index — "list all adapters of this
13
+ * kind" supports rotate-to-next-available policies and admin debug
14
+ * surfaces. But routing dispatches by `connection_id` because that's
15
+ * what the data carries (provenance.source_connection_id on sourced
16
+ * rows, channels.id on outbound mappings).
17
+ *
18
+ * Per channel-push-architecture §3.1 and catalog-booking-engine §4.
19
+ */
20
+ import { NoAdapterRegisteredError } from "./errors.js";
21
+ /**
22
+ * Construct a fresh registry. Templates create one at process start and
23
+ * pass it to the booking-engine route handlers + channel-push wiring.
24
+ */
25
+ export function createSourceAdapterRegistry() {
26
+ const byConnection = new Map();
27
+ const kindIndex = new Map();
28
+ function indexAdd(kind, connectionId) {
29
+ let set = kindIndex.get(kind);
30
+ if (!set) {
31
+ set = new Set();
32
+ kindIndex.set(kind, set);
33
+ }
34
+ set.add(connectionId);
35
+ }
36
+ function indexRemove(kind, connectionId) {
37
+ const set = kindIndex.get(kind);
38
+ if (!set)
39
+ return;
40
+ set.delete(connectionId);
41
+ if (set.size === 0)
42
+ kindIndex.delete(kind);
43
+ }
44
+ function register(arg1, arg2) {
45
+ let connectionId;
46
+ let adapter;
47
+ if (typeof arg1 === "string") {
48
+ if (!arg2) {
49
+ throw new TypeError("register(connectionId, adapter): adapter argument is required");
50
+ }
51
+ connectionId = arg1;
52
+ adapter = arg2;
53
+ }
54
+ else {
55
+ adapter = arg1;
56
+ connectionId = `default:${adapter.kind}`;
57
+ }
58
+ const previous = byConnection.get(connectionId);
59
+ if (previous) {
60
+ indexRemove(previous.kind, connectionId);
61
+ }
62
+ byConnection.set(connectionId, adapter);
63
+ indexAdd(adapter.kind, connectionId);
64
+ }
65
+ function resolveByConnection(connectionId) {
66
+ return byConnection.get(connectionId);
67
+ }
68
+ function resolveByConnectionOrThrow(connectionId) {
69
+ const adapter = byConnection.get(connectionId);
70
+ if (!adapter)
71
+ throw new NoAdapterRegisteredError(connectionId);
72
+ return adapter;
73
+ }
74
+ function byKind(sourceKind) {
75
+ const set = kindIndex.get(sourceKind);
76
+ if (!set || set.size === 0)
77
+ return [];
78
+ const out = [];
79
+ for (const connectionId of set) {
80
+ const adapter = byConnection.get(connectionId);
81
+ if (adapter)
82
+ out.push({ connectionId, adapter });
83
+ }
84
+ return out;
85
+ }
86
+ function resolveOrThrow(sourceKind) {
87
+ const set = kindIndex.get(sourceKind);
88
+ if (!set || set.size === 0)
89
+ throw new NoAdapterRegisteredError(sourceKind);
90
+ const first = set.values().next().value;
91
+ if (!first)
92
+ throw new NoAdapterRegisteredError(sourceKind);
93
+ const adapter = byConnection.get(first);
94
+ if (!adapter)
95
+ throw new NoAdapterRegisteredError(sourceKind);
96
+ return adapter;
97
+ }
98
+ return {
99
+ register: register,
100
+ resolveByConnection,
101
+ resolveByConnectionOrThrow,
102
+ resolveOrThrow,
103
+ byKind,
104
+ connections() {
105
+ return [...byConnection.keys()];
106
+ },
107
+ kinds() {
108
+ return [...kindIndex.keys()];
109
+ },
110
+ has(connectionId) {
111
+ return byConnection.has(connectionId);
112
+ },
113
+ hasKind(sourceKind) {
114
+ const set = kindIndex.get(sourceKind);
115
+ return !!set && set.size > 0;
116
+ },
117
+ };
118
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=registry.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.test.d.ts","sourceRoot":"","sources":["../../src/booking-engine/registry.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,132 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { NoAdapterRegisteredError } from "./errors.js";
3
+ import { createSourceAdapterRegistry } from "./registry.js";
4
+ function stubAdapter(kind) {
5
+ // Minimal SourceAdapter conforming to the contract surface — none of
6
+ // these methods get called by registry tests, but they need to exist
7
+ // for the type to satisfy.
8
+ return {
9
+ kind,
10
+ capabilities: {
11
+ verticals: ["products"],
12
+ supportsLiveResolution: false,
13
+ supportsDriftDetection: false,
14
+ supportsBookingForwarding: false,
15
+ postBookOperations: [],
16
+ },
17
+ connect: async () => undefined,
18
+ pause: async () => undefined,
19
+ disconnect: async () => undefined,
20
+ getState: async () => "active",
21
+ discover: async () => ({ projections: [], next_cursor: undefined }),
22
+ };
23
+ }
24
+ describe("createSourceAdapterRegistry — backward-compat (register without connection id)", () => {
25
+ it("registers an adapter under its declared kind", () => {
26
+ const registry = createSourceAdapterRegistry();
27
+ registry.register(stubAdapter("demo"));
28
+ expect(registry.hasKind("demo")).toBe(true);
29
+ expect(registry.resolveOrThrow("demo").kind).toBe("demo");
30
+ });
31
+ it("returns undefined for unknown kinds", () => {
32
+ const registry = createSourceAdapterRegistry();
33
+ expect(registry.hasKind("voyant-connect")).toBe(false);
34
+ expect(registry.byKind("voyant-connect")).toEqual([]);
35
+ });
36
+ it("resolveOrThrow throws NoAdapterRegisteredError on miss", () => {
37
+ const registry = createSourceAdapterRegistry();
38
+ expect(() => registry.resolveOrThrow("voyant-connect")).toThrowError(NoAdapterRegisteredError);
39
+ });
40
+ it("resolveOrThrow returns the adapter on hit", () => {
41
+ const registry = createSourceAdapterRegistry();
42
+ registry.register(stubAdapter("demo"));
43
+ const adapter = registry.resolveOrThrow("demo");
44
+ expect(adapter.kind).toBe("demo");
45
+ });
46
+ it("re-registering without connection id replaces under the synthetic key", () => {
47
+ const registry = createSourceAdapterRegistry();
48
+ const first = stubAdapter("demo");
49
+ const second = stubAdapter("demo");
50
+ registry.register(first);
51
+ registry.register(second);
52
+ expect(registry.resolveOrThrow("demo")).toBe(second);
53
+ expect(registry.resolveByConnection("default:demo")).toBe(second);
54
+ });
55
+ it("kinds() lists every registered kind", () => {
56
+ const registry = createSourceAdapterRegistry();
57
+ registry.register(stubAdapter("demo"));
58
+ registry.register(stubAdapter("voyant-connect"));
59
+ expect([...registry.kinds()].sort()).toEqual(["demo", "voyant-connect"]);
60
+ });
61
+ });
62
+ describe("createSourceAdapterRegistry — per-connection registration", () => {
63
+ it("registers and resolves by connection id", () => {
64
+ const registry = createSourceAdapterRegistry();
65
+ const adapter = stubAdapter("tui");
66
+ registry.register("conn_tui_dev", adapter);
67
+ expect(registry.has("conn_tui_dev")).toBe(true);
68
+ expect(registry.resolveByConnection("conn_tui_dev")).toBe(adapter);
69
+ expect(registry.resolveByConnectionOrThrow("conn_tui_dev")).toBe(adapter);
70
+ });
71
+ it("supports multiple connections of the same kind", () => {
72
+ const registry = createSourceAdapterRegistry();
73
+ const dev = stubAdapter("tui");
74
+ const prod = stubAdapter("tui");
75
+ registry.register("conn_tui_dev", dev);
76
+ registry.register("conn_tui_prod", prod);
77
+ expect(registry.resolveByConnection("conn_tui_dev")).toBe(dev);
78
+ expect(registry.resolveByConnection("conn_tui_prod")).toBe(prod);
79
+ const both = registry.byKind("tui");
80
+ expect(both.map((e) => e.connectionId).sort()).toEqual(["conn_tui_dev", "conn_tui_prod"]);
81
+ });
82
+ it("byKind returns empty array for unknown kind", () => {
83
+ const registry = createSourceAdapterRegistry();
84
+ expect(registry.byKind("nope")).toEqual([]);
85
+ });
86
+ it("resolveByConnectionOrThrow throws on miss", () => {
87
+ const registry = createSourceAdapterRegistry();
88
+ expect(() => registry.resolveByConnectionOrThrow("conn_x")).toThrowError(NoAdapterRegisteredError);
89
+ });
90
+ it("re-registering same connection id replaces and updates kind index", () => {
91
+ const registry = createSourceAdapterRegistry();
92
+ registry.register("conn_x", stubAdapter("tui"));
93
+ registry.register("conn_x", stubAdapter("voyant-connect"));
94
+ expect(registry.byKind("tui")).toEqual([]);
95
+ expect(registry.byKind("voyant-connect").map((e) => e.connectionId)).toEqual(["conn_x"]);
96
+ });
97
+ it("connections() returns every registered id", () => {
98
+ const registry = createSourceAdapterRegistry();
99
+ registry.register("conn_a", stubAdapter("tui"));
100
+ registry.register("conn_b", stubAdapter("voyant-connect"));
101
+ expect([...registry.connections()].sort()).toEqual(["conn_a", "conn_b"]);
102
+ });
103
+ it("rejects register(connectionId) without an adapter argument", () => {
104
+ const registry = createSourceAdapterRegistry();
105
+ // @ts-expect-error — missing adapter argument
106
+ expect(() => registry.register("conn_x")).toThrowError(TypeError);
107
+ });
108
+ });
109
+ describe("createSourceAdapterRegistry — outbound-only adapters", () => {
110
+ it("accepts adapters with no inbound methods", () => {
111
+ const outboundOnly = {
112
+ kind: "syndicate-target",
113
+ capabilities: {
114
+ verticals: ["products"],
115
+ supportsLiveResolution: false,
116
+ supportsDriftDetection: false,
117
+ supportsBookingForwarding: false,
118
+ postBookOperations: [],
119
+ supportsBookingPush: true,
120
+ supportsAvailabilityPush: true,
121
+ supportsContentPush: true,
122
+ },
123
+ pushBooking: async () => ({ upstreamRef: "ext_1" }),
124
+ pushAvailability: async () => ({}),
125
+ pushContent: async () => ({}),
126
+ };
127
+ const registry = createSourceAdapterRegistry();
128
+ registry.register("conn_syn_a", outboundOnly);
129
+ expect(registry.resolveByConnection("conn_syn_a")).toBe(outboundOnly);
130
+ expect(registry.byKind("syndicate-target").length).toBe(1);
131
+ });
132
+ });
@@ -0,0 +1,169 @@
1
+ import type { AnyDrizzleDb } from "@voyant-travel/db";
2
+ import type { Context } from "hono";
3
+ import { z } from "zod";
4
+ import type { SourceAdapterContext } from "../adapter/contract.js";
5
+ import type { BookEntityResult } from "./book.js";
6
+ import type { OwnedBookingHandlerRegistry } from "./owned-handler.js";
7
+ import type { QuoteEntityDeps, QuoteEntityResult } from "./quote.js";
8
+ import type { SourceAdapterRegistry } from "./registry.js";
9
+ import type { SnapshotContentCapturer } from "./snapshot-content.js";
10
+ export declare const quoteBodySchema: z.ZodObject<{
11
+ entityModule: z.ZodString;
12
+ entityId: z.ZodString;
13
+ sourceKind: z.ZodOptional<z.ZodString>;
14
+ sourceProvider: z.ZodOptional<z.ZodString>;
15
+ sourceConnectionId: z.ZodOptional<z.ZodString>;
16
+ sourceRef: z.ZodOptional<z.ZodString>;
17
+ scope: z.ZodOptional<z.ZodObject<{
18
+ locale: z.ZodOptional<z.ZodString>;
19
+ audience: z.ZodOptional<z.ZodEnum<{
20
+ staff: "staff";
21
+ customer: "customer";
22
+ partner: "partner";
23
+ supplier: "supplier";
24
+ }>>;
25
+ market: z.ZodOptional<z.ZodString>;
26
+ currency: z.ZodOptional<z.ZodString>;
27
+ }, z.core.$strip>>;
28
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
29
+ draft: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
30
+ ttlMs: z.ZodOptional<z.ZodNumber>;
31
+ }, z.core.$strip>;
32
+ export declare const bookBodySchema: z.ZodObject<{
33
+ quoteId: z.ZodOptional<z.ZodString>;
34
+ bookingId: z.ZodOptional<z.ZodString>;
35
+ party: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
36
+ paymentIntent: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
37
+ type: z.ZodLiteral<"hold">;
38
+ }, z.core.$strip>, z.ZodObject<{
39
+ type: z.ZodLiteral<"card">;
40
+ tokenizedCard: z.ZodString;
41
+ }, z.core.$strip>, z.ZodObject<{
42
+ type: z.ZodLiteral<"ticket_on_credit">;
43
+ agencyAccount: z.ZodString;
44
+ }, z.core.$strip>]>>;
45
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
46
+ draftId: z.ZodOptional<z.ZodString>;
47
+ idempotencyKey: z.ZodOptional<z.ZodString>;
48
+ }, z.core.$strip>;
49
+ export declare const draftBodySchema: z.ZodObject<{
50
+ entityModule: z.ZodOptional<z.ZodString>;
51
+ entityId: z.ZodOptional<z.ZodString>;
52
+ sourceKind: z.ZodOptional<z.ZodString>;
53
+ sourceConnectionId: z.ZodOptional<z.ZodString>;
54
+ sourceRef: z.ZodOptional<z.ZodString>;
55
+ draftPayload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
56
+ currentStep: z.ZodOptional<z.ZodString>;
57
+ currentQuoteId: z.ZodOptional<z.ZodString>;
58
+ ttlMs: z.ZodOptional<z.ZodNumber>;
59
+ }, z.core.$strip>;
60
+ export declare const holdPlaceBodySchema: z.ZodObject<{
61
+ entityModule: z.ZodString;
62
+ entityId: z.ZodString;
63
+ draftId: z.ZodString;
64
+ ttlMs: z.ZodOptional<z.ZodNumber>;
65
+ parameters: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
66
+ }, z.core.$strip>;
67
+ export declare const holdReleaseBodySchema: z.ZodObject<{
68
+ entityModule: z.ZodString;
69
+ holdToken: z.ZodString;
70
+ }, z.core.$strip>;
71
+ export type CatalogBookingQuoteBody = z.infer<typeof quoteBodySchema>;
72
+ export type CatalogBookingBookBody = z.infer<typeof bookBodySchema>;
73
+ export type CatalogBookingDraftBody = z.infer<typeof draftBodySchema>;
74
+ export type CatalogBookingHoldPlaceBody = z.infer<typeof holdPlaceBodySchema>;
75
+ export type CatalogBookingHoldReleaseBody = z.infer<typeof holdReleaseBodySchema>;
76
+ export interface CatalogBookingProvenance {
77
+ sourceKind: string;
78
+ sourceProvider?: string;
79
+ sourceConnectionId?: string;
80
+ sourceRef?: string;
81
+ }
82
+ export interface CatalogBookingProvenanceInput {
83
+ c: Context;
84
+ db: AnyDrizzleDb;
85
+ entityModule: string;
86
+ entityId: string;
87
+ }
88
+ export interface CatalogBookingAdapterContextInput {
89
+ c: Context;
90
+ db: AnyDrizzleDb;
91
+ operation: "quote" | "book" | "hold";
92
+ entityModule?: string;
93
+ entityId?: string;
94
+ sourceKind: string;
95
+ sourceConnectionId?: string;
96
+ correlationId: string;
97
+ }
98
+ export interface CatalogBookingHoldTtlInput {
99
+ c: Context;
100
+ db: AnyDrizzleDb;
101
+ entityModule: string;
102
+ entityId: string;
103
+ }
104
+ export interface CatalogBookingContentScopeInput {
105
+ c: Context;
106
+ db: AnyDrizzleDb;
107
+ body: CatalogBookingBookBody;
108
+ draftPayload?: Record<string, unknown>;
109
+ }
110
+ export interface CatalogBookingQuoteTransformInput {
111
+ c: Context;
112
+ db: AnyDrizzleDb;
113
+ request: CatalogBookingQuoteBody;
114
+ provenance: CatalogBookingProvenance;
115
+ result: QuoteEntityResult;
116
+ }
117
+ export interface CatalogBookingBookTransformInput {
118
+ c: Context;
119
+ db: AnyDrizzleDb;
120
+ request: CatalogBookingBookBody;
121
+ result: BookEntityResult;
122
+ }
123
+ export interface CatalogBookingDraftConsumedError {
124
+ c: Context;
125
+ db: AnyDrizzleDb;
126
+ draftId: string;
127
+ bookingId: string;
128
+ error: unknown;
129
+ }
130
+ export interface CatalogBookingCommittedEvent {
131
+ c: Context;
132
+ db: AnyDrizzleDb;
133
+ request: CatalogBookingBookBody;
134
+ result: BookEntityResult;
135
+ }
136
+ export interface CatalogBookingRoutesOptions {
137
+ resolveDb(c: Context): AnyDrizzleDb;
138
+ resolveSourceRegistry(c: Context): SourceAdapterRegistry;
139
+ resolveOwnedHandlers?(c: Context): OwnedBookingHandlerRegistry | undefined;
140
+ resolveActorId?(c: Context): string | null;
141
+ resolveCorrelationId?(c: Context): string;
142
+ resolveAdapterContext?(input: CatalogBookingAdapterContextInput): SourceAdapterContext;
143
+ resolveEntityProvenance?(input: CatalogBookingProvenanceInput): Promise<CatalogBookingProvenance>;
144
+ resolveHoldTtlMs?(input: CatalogBookingHoldTtlInput): Promise<number>;
145
+ resolveContentScope?(input: CatalogBookingContentScopeInput): {
146
+ locale: string;
147
+ market?: string;
148
+ currency?: string;
149
+ } | undefined;
150
+ contentEnricher?: QuoteEntityDeps["contentEnricher"];
151
+ onContentEnricherError?: QuoteEntityDeps["onEnricherError"];
152
+ /**
153
+ * Resolve a per-request `evaluatePromotions` hook. Returning `undefined`
154
+ * skips promotion evaluation. Templates typically wire
155
+ * `createCatalogPromotionEvaluator(db)` from `@voyant-travel/commerce`.
156
+ *
157
+ * Per docs/architecture/promotions-architecture.md §3.6 + §7.1.
158
+ */
159
+ resolveEvaluatePromotions?(input: {
160
+ c: Context;
161
+ db: AnyDrizzleDb;
162
+ }): QuoteEntityDeps["evaluatePromotions"];
163
+ captureSnapshotContent?: SnapshotContentCapturer;
164
+ transformQuoteResult?(input: CatalogBookingQuoteTransformInput): Promise<QuoteEntityResult>;
165
+ transformBookResult?(input: CatalogBookingBookTransformInput): Promise<BookEntityResult>;
166
+ onDraftConsumedError?(event: CatalogBookingDraftConsumedError): void;
167
+ onCommitted?(event: CatalogBookingCommittedEvent): Promise<void> | void;
168
+ }
169
+ //# sourceMappingURL=routes-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes-contracts.d.ts","sourceRoot":"","sources":["../../src/booking-engine/routes-contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import { z } from "zod";
2
+ const recordSchema = z.record(z.string(), z.unknown());
3
+ const quoteScopeSchema = z
4
+ .object({
5
+ locale: z.string().min(1).optional(),
6
+ audience: z.enum(["staff", "customer", "partner", "supplier"]).optional(),
7
+ market: z.string().min(1).optional(),
8
+ currency: z.string().min(1).optional(),
9
+ })
10
+ .optional();
11
+ export const quoteBodySchema = z.object({
12
+ entityModule: z.string().min(1),
13
+ entityId: z.string().min(1),
14
+ sourceKind: z.string().min(1).optional(),
15
+ sourceProvider: z.string().min(1).optional(),
16
+ sourceConnectionId: z.string().min(1).optional(),
17
+ sourceRef: z.string().min(1).optional(),
18
+ scope: quoteScopeSchema,
19
+ parameters: recordSchema.optional(),
20
+ draft: recordSchema.optional(),
21
+ ttlMs: z.number().int().positive().optional(),
22
+ });
23
+ export const bookBodySchema = z
24
+ .object({
25
+ quoteId: z.string().min(1).optional(),
26
+ bookingId: z.string().min(1).optional(),
27
+ party: recordSchema.optional(),
28
+ paymentIntent: z
29
+ .union([
30
+ z.object({ type: z.literal("hold") }),
31
+ z.object({ type: z.literal("card"), tokenizedCard: z.string().min(1) }),
32
+ z.object({ type: z.literal("ticket_on_credit"), agencyAccount: z.string().min(1) }),
33
+ ])
34
+ .optional(),
35
+ parameters: recordSchema.optional(),
36
+ draftId: z.string().min(1).optional(),
37
+ idempotencyKey: z.string().min(8).max(128).optional(),
38
+ })
39
+ .refine((body) => body.quoteId || body.draftId, {
40
+ message: "either quoteId or draftId is required",
41
+ });
42
+ export const draftBodySchema = z.object({
43
+ entityModule: z.string().min(1).optional(),
44
+ entityId: z.string().min(1).optional(),
45
+ sourceKind: z.string().min(1).optional(),
46
+ sourceConnectionId: z.string().min(1).optional(),
47
+ sourceRef: z.string().min(1).optional(),
48
+ draftPayload: recordSchema,
49
+ currentStep: z.string().min(1).optional(),
50
+ currentQuoteId: z.string().min(1).optional(),
51
+ ttlMs: z.number().int().positive().optional(),
52
+ });
53
+ export const holdPlaceBodySchema = z.object({
54
+ entityModule: z.string().min(1),
55
+ entityId: z.string().min(1),
56
+ draftId: z.string().min(1),
57
+ ttlMs: z.number().int().positive().optional(),
58
+ parameters: recordSchema.optional(),
59
+ });
60
+ export const holdReleaseBodySchema = z.object({
61
+ entityModule: z.string().min(1),
62
+ holdToken: z.string().min(1),
63
+ });
@@ -0,0 +1,7 @@
1
+ import type { HonoModule } from "@voyant-travel/hono/module";
2
+ import { Hono } from "hono";
3
+ import { type CatalogBookingRoutesOptions } from "./routes-contracts.js";
4
+ export type { CatalogBookingAdapterContextInput, CatalogBookingBookBody, CatalogBookingBookTransformInput, CatalogBookingCommittedEvent, CatalogBookingContentScopeInput, CatalogBookingDraftBody, CatalogBookingDraftConsumedError, CatalogBookingHoldPlaceBody, CatalogBookingHoldReleaseBody, CatalogBookingHoldTtlInput, CatalogBookingProvenance, CatalogBookingProvenanceInput, CatalogBookingQuoteBody, CatalogBookingQuoteTransformInput, CatalogBookingRoutesOptions, } from "./routes-contracts.js";
5
+ export declare function createCatalogBookingRoutes(options: CatalogBookingRoutesOptions): Hono;
6
+ export declare function createCatalogBookingHonoModule(options: CatalogBookingRoutesOptions): HonoModule;
7
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/booking-engine/routes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAmC3B,OAAO,EAIL,KAAK,2BAA2B,EAKjC,MAAM,uBAAuB,CAAA;AAI9B,YAAY,EACV,iCAAiC,EACjC,sBAAsB,EACtB,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,uBAAuB,EACvB,gCAAgC,EAChC,2BAA2B,EAC3B,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,6BAA6B,EAC7B,uBAAuB,EACvB,iCAAiC,EACjC,2BAA2B,GAC5B,MAAM,uBAAuB,CAAA;AAE9B,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,IAAI,CASrF;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,2BAA2B,GAAG,UAAU,CAM/F"}