@voyant-travel/cruises 0.118.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 (210) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +50 -0
  3. package/dist/adapters/connect-compat.d.ts +20 -0
  4. package/dist/adapters/connect-compat.d.ts.map +1 -0
  5. package/dist/adapters/connect-compat.js +71 -0
  6. package/dist/adapters/contract-fixture.d.ts +32 -0
  7. package/dist/adapters/contract-fixture.d.ts.map +1 -0
  8. package/dist/adapters/contract-fixture.js +152 -0
  9. package/dist/adapters/index.d.ts +331 -0
  10. package/dist/adapters/index.d.ts.map +1 -0
  11. package/dist/adapters/index.js +16 -0
  12. package/dist/adapters/memoize.d.ts +28 -0
  13. package/dist/adapters/memoize.d.ts.map +1 -0
  14. package/dist/adapters/memoize.js +131 -0
  15. package/dist/adapters/mock.d.ts +44 -0
  16. package/dist/adapters/mock.d.ts.map +1 -0
  17. package/dist/adapters/mock.js +192 -0
  18. package/dist/adapters/registry.d.ts +26 -0
  19. package/dist/adapters/registry.d.ts.map +1 -0
  20. package/dist/adapters/registry.js +42 -0
  21. package/dist/adapters/source-adapter-shim.d.ts +80 -0
  22. package/dist/adapters/source-adapter-shim.d.ts.map +1 -0
  23. package/dist/adapters/source-adapter-shim.js +390 -0
  24. package/dist/booking-engine/handler.d.ts +108 -0
  25. package/dist/booking-engine/handler.d.ts.map +1 -0
  26. package/dist/booking-engine/handler.js +225 -0
  27. package/dist/booking-engine/index.d.ts +9 -0
  28. package/dist/booking-engine/index.d.ts.map +1 -0
  29. package/dist/booking-engine/index.js +8 -0
  30. package/dist/booking-extension.d.ts +1179 -0
  31. package/dist/booking-extension.d.ts.map +1 -0
  32. package/dist/booking-extension.js +342 -0
  33. package/dist/cabin-features.d.ts +8 -0
  34. package/dist/cabin-features.d.ts.map +1 -0
  35. package/dist/cabin-features.js +7 -0
  36. package/dist/catalog-policy-cabins.d.ts +18 -0
  37. package/dist/catalog-policy-cabins.d.ts.map +1 -0
  38. package/dist/catalog-policy-cabins.js +96 -0
  39. package/dist/catalog-policy-core.d.ts +3 -0
  40. package/dist/catalog-policy-core.d.ts.map +1 -0
  41. package/dist/catalog-policy-core.js +247 -0
  42. package/dist/catalog-policy-structure.d.ts +3 -0
  43. package/dist/catalog-policy-structure.d.ts.map +1 -0
  44. package/dist/catalog-policy-structure.js +387 -0
  45. package/dist/catalog-policy.d.ts +15 -0
  46. package/dist/catalog-policy.d.ts.map +1 -0
  47. package/dist/catalog-policy.js +19 -0
  48. package/dist/content-shape.d.ts +5 -0
  49. package/dist/content-shape.d.ts.map +1 -0
  50. package/dist/content-shape.js +13 -0
  51. package/dist/draft-shape.d.ts +59 -0
  52. package/dist/draft-shape.d.ts.map +1 -0
  53. package/dist/draft-shape.js +98 -0
  54. package/dist/events.d.ts +21 -0
  55. package/dist/events.d.ts.map +1 -0
  56. package/dist/events.js +21 -0
  57. package/dist/index.d.ts +43 -0
  58. package/dist/index.d.ts.map +1 -0
  59. package/dist/index.js +66 -0
  60. package/dist/lib/key.d.ts +41 -0
  61. package/dist/lib/key.d.ts.map +1 -0
  62. package/dist/lib/key.js +100 -0
  63. package/dist/routes-booking-payloads.d.ts +133 -0
  64. package/dist/routes-booking-payloads.d.ts.map +1 -0
  65. package/dist/routes-booking-payloads.js +142 -0
  66. package/dist/routes-content.d.ts +53 -0
  67. package/dist/routes-content.d.ts.map +1 -0
  68. package/dist/routes-content.js +158 -0
  69. package/dist/routes-core.d.ts +4 -0
  70. package/dist/routes-core.d.ts.map +1 -0
  71. package/dist/routes-core.js +68 -0
  72. package/dist/routes-detail.d.ts +4 -0
  73. package/dist/routes-detail.d.ts.map +1 -0
  74. package/dist/routes-detail.js +261 -0
  75. package/dist/routes-env.d.ts +13 -0
  76. package/dist/routes-env.d.ts.map +1 -0
  77. package/dist/routes-env.js +1 -0
  78. package/dist/routes-keying.d.ts +28 -0
  79. package/dist/routes-keying.d.ts.map +1 -0
  80. package/dist/routes-keying.js +70 -0
  81. package/dist/routes-public.d.ts +911 -0
  82. package/dist/routes-public.d.ts.map +1 -0
  83. package/dist/routes-public.js +252 -0
  84. package/dist/routes-sailings-prices.d.ts +4 -0
  85. package/dist/routes-sailings-prices.d.ts.map +1 -0
  86. package/dist/routes-sailings-prices.js +278 -0
  87. package/dist/routes-search-index.d.ts +4 -0
  88. package/dist/routes-search-index.d.ts.map +1 -0
  89. package/dist/routes-search-index.js +25 -0
  90. package/dist/routes-ships.d.ts +4 -0
  91. package/dist/routes-ships.d.ts.map +1 -0
  92. package/dist/routes-ships.js +147 -0
  93. package/dist/routes-voyage-groups.d.ts +4 -0
  94. package/dist/routes-voyage-groups.d.ts.map +1 -0
  95. package/dist/routes-voyage-groups.js +85 -0
  96. package/dist/routes.d.ts +5 -0
  97. package/dist/routes.d.ts.map +1 -0
  98. package/dist/routes.js +14 -0
  99. package/dist/schema-cabins.d.ts +1098 -0
  100. package/dist/schema-cabins.d.ts.map +1 -0
  101. package/dist/schema-cabins.js +105 -0
  102. package/dist/schema-content.d.ts +577 -0
  103. package/dist/schema-content.d.ts.map +1 -0
  104. package/dist/schema-content.js +63 -0
  105. package/dist/schema-core.d.ts +1790 -0
  106. package/dist/schema-core.d.ts.map +1 -0
  107. package/dist/schema-core.js +171 -0
  108. package/dist/schema-itinerary.d.ts +556 -0
  109. package/dist/schema-itinerary.d.ts.map +1 -0
  110. package/dist/schema-itinerary.js +50 -0
  111. package/dist/schema-pricing.d.ts +633 -0
  112. package/dist/schema-pricing.d.ts.map +1 -0
  113. package/dist/schema-pricing.js +73 -0
  114. package/dist/schema-search.d.ts +611 -0
  115. package/dist/schema-search.d.ts.map +1 -0
  116. package/dist/schema-search.js +64 -0
  117. package/dist/schema-shared.d.ts +23 -0
  118. package/dist/schema-shared.d.ts.map +1 -0
  119. package/dist/schema-shared.js +107 -0
  120. package/dist/schema-sourced-content.d.ts +247 -0
  121. package/dist/schema-sourced-content.d.ts.map +1 -0
  122. package/dist/schema-sourced-content.js +38 -0
  123. package/dist/schema.d.ts +10 -0
  124. package/dist/schema.d.ts.map +1 -0
  125. package/dist/schema.js +9 -0
  126. package/dist/service-booking-helpers.d.ts +12 -0
  127. package/dist/service-booking-helpers.d.ts.map +1 -0
  128. package/dist/service-booking-helpers.js +94 -0
  129. package/dist/service-booking-types.d.ts +101 -0
  130. package/dist/service-booking-types.d.ts.map +1 -0
  131. package/dist/service-booking-types.js +1 -0
  132. package/dist/service-bookings.d.ts +46 -0
  133. package/dist/service-bookings.d.ts.map +1 -0
  134. package/dist/service-bookings.js +420 -0
  135. package/dist/service-catalog-plane-cabins.d.ts +24 -0
  136. package/dist/service-catalog-plane-cabins.d.ts.map +1 -0
  137. package/dist/service-catalog-plane-cabins.js +90 -0
  138. package/dist/service-catalog-plane.d.ts +74 -0
  139. package/dist/service-catalog-plane.d.ts.map +1 -0
  140. package/dist/service-catalog-plane.js +194 -0
  141. package/dist/service-content-synthesizer.d.ts +42 -0
  142. package/dist/service-content-synthesizer.d.ts.map +1 -0
  143. package/dist/service-content-synthesizer.js +144 -0
  144. package/dist/service-content.d.ts +74 -0
  145. package/dist/service-content.d.ts.map +1 -0
  146. package/dist/service-content.js +315 -0
  147. package/dist/service-core.d.ts +134 -0
  148. package/dist/service-core.d.ts.map +1 -0
  149. package/dist/service-core.js +257 -0
  150. package/dist/service-detach.d.ts +18 -0
  151. package/dist/service-detach.d.ts.map +1 -0
  152. package/dist/service-detach.js +199 -0
  153. package/dist/service-enrichment.d.ts +11 -0
  154. package/dist/service-enrichment.d.ts.map +1 -0
  155. package/dist/service-enrichment.js +47 -0
  156. package/dist/service-external-refresh.d.ts +39 -0
  157. package/dist/service-external-refresh.d.ts.map +1 -0
  158. package/dist/service-external-refresh.js +47 -0
  159. package/dist/service-itinerary.d.ts +22 -0
  160. package/dist/service-itinerary.d.ts.map +1 -0
  161. package/dist/service-itinerary.js +34 -0
  162. package/dist/service-prices.d.ts +46 -0
  163. package/dist/service-prices.d.ts.map +1 -0
  164. package/dist/service-prices.js +89 -0
  165. package/dist/service-pricing.d.ts +97 -0
  166. package/dist/service-pricing.d.ts.map +1 -0
  167. package/dist/service-pricing.js +198 -0
  168. package/dist/service-sailings.d.ts +48 -0
  169. package/dist/service-sailings.d.ts.map +1 -0
  170. package/dist/service-sailings.js +145 -0
  171. package/dist/service-search-types.d.ts +54 -0
  172. package/dist/service-search-types.d.ts.map +1 -0
  173. package/dist/service-search-types.js +1 -0
  174. package/dist/service-search.d.ts +65 -0
  175. package/dist/service-search.d.ts.map +1 -0
  176. package/dist/service-search.js +467 -0
  177. package/dist/service-shared.d.ts +22 -0
  178. package/dist/service-shared.d.ts.map +1 -0
  179. package/dist/service-shared.js +22 -0
  180. package/dist/service-ships.d.ts +47 -0
  181. package/dist/service-ships.d.ts.map +1 -0
  182. package/dist/service-ships.js +156 -0
  183. package/dist/service.d.ts +255 -0
  184. package/dist/service.d.ts.map +1 -0
  185. package/dist/service.js +12 -0
  186. package/dist/validation-cabins.d.ts +267 -0
  187. package/dist/validation-cabins.d.ts.map +1 -0
  188. package/dist/validation-cabins.js +77 -0
  189. package/dist/validation-content.d.ts +123 -0
  190. package/dist/validation-content.d.ts.map +1 -0
  191. package/dist/validation-content.js +40 -0
  192. package/dist/validation-core.d.ts +393 -0
  193. package/dist/validation-core.d.ts.map +1 -0
  194. package/dist/validation-core.js +162 -0
  195. package/dist/validation-itinerary.d.ts +123 -0
  196. package/dist/validation-itinerary.d.ts.map +1 -0
  197. package/dist/validation-itinerary.js +47 -0
  198. package/dist/validation-pricing.d.ts +137 -0
  199. package/dist/validation-pricing.d.ts.map +1 -0
  200. package/dist/validation-pricing.js +49 -0
  201. package/dist/validation-search.d.ts +118 -0
  202. package/dist/validation-search.d.ts.map +1 -0
  203. package/dist/validation-search.js +60 -0
  204. package/dist/validation-shared.d.ts +123 -0
  205. package/dist/validation-shared.d.ts.map +1 -0
  206. package/dist/validation-shared.js +103 -0
  207. package/dist/validation.d.ts +8 -0
  208. package/dist/validation.d.ts.map +1 -0
  209. package/dist/validation.js +7 -0
  210. package/package.json +146 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-core.d.ts","sourceRoot":"","sources":["../src/schema-core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,171 @@
1
+ import { typeId, typeIdRef } from "@voyant-travel/db/lib/typeid-column";
2
+ import { boolean, date, index, integer, jsonb, numeric, pgTable, text, timestamp, uniqueIndex, } from "drizzle-orm/pg-core";
3
+ import { cruiseShips } from "./schema-cabins.js";
4
+ import { cruiseSailingDirectionEnum, cruiseStatusEnum, cruiseTypeEnum, cruiseVoyageGroupKindEnum, cruiseVoyageSegmentKindEnum, cruiseVoyageSegmentRoleEnum, sailingSalesStatusEnum, } from "./schema-shared.js";
5
+ export const cruiseVoyageGroups = pgTable("cruise_voyage_groups", {
6
+ id: typeId("cruise_voyage_groups"),
7
+ slug: text("slug").notNull(),
8
+ name: text("name").notNull(),
9
+ groupKind: cruiseVoyageGroupKindEnum("group_kind").notNull(),
10
+ lineSupplierId: text("line_supplier_id"),
11
+ nights: integer("nights").notNull(),
12
+ embarkPortFacilityId: text("embark_port_facility_id"),
13
+ embarkPortCanonicalPlaceId: text("embark_port_canonical_place_id"),
14
+ disembarkPortFacilityId: text("disembark_port_facility_id"),
15
+ disembarkPortCanonicalPlaceId: text("disembark_port_canonical_place_id"),
16
+ description: text("description"),
17
+ shortDescription: text("short_description"),
18
+ highlights: jsonb("highlights").$type().default([]),
19
+ regions: jsonb("regions").$type().default([]),
20
+ themes: jsonb("themes").$type().default([]),
21
+ heroImageUrl: text("hero_image_url"),
22
+ mapImageUrl: text("map_image_url"),
23
+ status: cruiseStatusEnum("status").notNull().default("draft"),
24
+ lowestPriceCached: numeric("lowest_price_cached", { precision: 12, scale: 2 }),
25
+ lowestPriceCurrencyCached: text("lowest_price_currency_cached"),
26
+ earliestDepartureCached: date("earliest_departure_cached"),
27
+ latestDepartureCached: date("latest_departure_cached"),
28
+ externalRefs: jsonb("external_refs").$type().default({}),
29
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
30
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
31
+ }, (table) => [
32
+ uniqueIndex("uidx_cruise_voyage_groups_slug").on(table.slug),
33
+ index("idx_cruise_voyage_groups_kind_status").on(table.groupKind, table.status),
34
+ index("idx_cruise_voyage_groups_supplier_status").on(table.lineSupplierId, table.status),
35
+ index("idx_cruise_voyage_groups_embark_place").on(table.embarkPortCanonicalPlaceId),
36
+ index("idx_cruise_voyage_groups_disembark_place").on(table.disembarkPortCanonicalPlaceId),
37
+ index("idx_cruise_voyage_groups_earliest_status").on(table.earliestDepartureCached, table.status),
38
+ index("idx_cruise_voyage_groups_status_created").on(table.status, table.createdAt),
39
+ ]);
40
+ export const cruises = pgTable("cruises", {
41
+ id: typeId("cruises"),
42
+ slug: text("slug").notNull(),
43
+ name: text("name").notNull(),
44
+ cruiseType: cruiseTypeEnum("cruise_type").notNull(),
45
+ lineSupplierId: text("line_supplier_id"),
46
+ defaultShipId: typeIdRef("default_ship_id").references(() => cruiseShips.id, {
47
+ onDelete: "set null",
48
+ }),
49
+ nights: integer("nights").notNull(),
50
+ embarkPortFacilityId: text("embark_port_facility_id"),
51
+ embarkPortCanonicalPlaceId: text("embark_port_canonical_place_id"),
52
+ disembarkPortFacilityId: text("disembark_port_facility_id"),
53
+ disembarkPortCanonicalPlaceId: text("disembark_port_canonical_place_id"),
54
+ description: text("description"),
55
+ shortDescription: text("short_description"),
56
+ highlights: jsonb("highlights").$type().default([]),
57
+ inclusionsHtml: text("inclusions_html"),
58
+ exclusionsHtml: text("exclusions_html"),
59
+ regionIds: jsonb("region_ids").$type().default([]),
60
+ waterwayIds: jsonb("waterway_ids").$type().default([]),
61
+ portIds: jsonb("port_ids").$type().default([]),
62
+ countryIso: jsonb("country_iso").$type().default([]),
63
+ regions: jsonb("regions").$type().default([]),
64
+ waterways: jsonb("waterways").$type().default([]),
65
+ ports: jsonb("ports").$type().default([]),
66
+ countries: jsonb("countries").$type().default([]),
67
+ themes: jsonb("themes").$type().default([]),
68
+ heroImageUrl: text("hero_image_url"),
69
+ mapImageUrl: text("map_image_url"),
70
+ status: cruiseStatusEnum("status").notNull().default("draft"),
71
+ lowestPriceCached: numeric("lowest_price_cached", { precision: 12, scale: 2 }),
72
+ lowestPriceCurrencyCached: text("lowest_price_currency_cached"),
73
+ earliestDepartureCached: date("earliest_departure_cached"),
74
+ latestDepartureCached: date("latest_departure_cached"),
75
+ externalRefs: jsonb("external_refs").$type().default({}),
76
+ /**
77
+ * Cruise-level customer payment policy override. Lowest precedence
78
+ * inside the cruise vertical — overridden by per-sailing or per-
79
+ * cabin-category policies. Shape mirrors `PaymentPolicy` from
80
+ * `@voyant-travel/finance`.
81
+ */
82
+ customerPaymentPolicy: jsonb("customer_payment_policy"),
83
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
84
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
85
+ }, (table) => [
86
+ uniqueIndex("uidx_cruises_slug").on(table.slug),
87
+ index("idx_cruises_type_status").on(table.cruiseType, table.status),
88
+ index("idx_cruises_supplier_status").on(table.lineSupplierId, table.status),
89
+ index("idx_cruises_embark_place").on(table.embarkPortCanonicalPlaceId),
90
+ index("idx_cruises_disembark_place").on(table.disembarkPortCanonicalPlaceId),
91
+ index("idx_cruises_region_ids_gin").using("gin", table.regionIds),
92
+ index("idx_cruises_waterway_ids_gin").using("gin", table.waterwayIds),
93
+ index("idx_cruises_port_ids_gin").using("gin", table.portIds),
94
+ index("idx_cruises_country_iso_gin").using("gin", table.countryIso),
95
+ index("idx_cruises_waterways_gin").using("gin", table.waterways),
96
+ index("idx_cruises_ports_gin").using("gin", table.ports),
97
+ index("idx_cruises_countries_gin").using("gin", table.countries),
98
+ index("idx_cruises_earliest_departure_status").on(table.earliestDepartureCached, table.status),
99
+ index("idx_cruises_status_created").on(table.status, table.createdAt),
100
+ ]);
101
+ export const cruiseSailings = pgTable("cruise_sailings", {
102
+ id: typeId("cruise_sailings"),
103
+ cruiseId: typeIdRef("cruise_id")
104
+ .notNull()
105
+ .references(() => cruises.id, { onDelete: "cascade" }),
106
+ shipId: typeIdRef("ship_id")
107
+ .notNull()
108
+ .references(() => cruiseShips.id, { onDelete: "restrict" }),
109
+ departureDate: date("departure_date").notNull(),
110
+ returnDate: date("return_date").notNull(),
111
+ embarkPortFacilityId: text("embark_port_facility_id"),
112
+ embarkPortCanonicalPlaceId: text("embark_port_canonical_place_id"),
113
+ disembarkPortFacilityId: text("disembark_port_facility_id"),
114
+ disembarkPortCanonicalPlaceId: text("disembark_port_canonical_place_id"),
115
+ direction: cruiseSailingDirectionEnum("direction"),
116
+ availabilityNote: text("availability_note"),
117
+ isCharter: boolean("is_charter").notNull().default(false),
118
+ salesStatus: sailingSalesStatusEnum("sales_status").notNull().default("open"),
119
+ externalRefs: jsonb("external_refs").$type().default({}),
120
+ /**
121
+ * Per-sailing customer payment policy override. Wins over the
122
+ * parent cruise's policy. Useful for high-season departures with
123
+ * stricter terms (gala sailings, holiday-week premiums, …).
124
+ */
125
+ customerPaymentPolicy: jsonb("customer_payment_policy"),
126
+ lastSyncedAt: timestamp("last_synced_at", { withTimezone: true }),
127
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
128
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
129
+ }, (table) => [
130
+ index("idx_cruise_sailings_cruise_departure").on(table.cruiseId, table.departureDate),
131
+ index("idx_cruise_sailings_ship_departure").on(table.shipId, table.departureDate),
132
+ index("idx_cruise_sailings_status_departure").on(table.salesStatus, table.departureDate),
133
+ index("idx_cruise_sailings_embark_place").on(table.embarkPortCanonicalPlaceId),
134
+ index("idx_cruise_sailings_disembark_place").on(table.disembarkPortCanonicalPlaceId),
135
+ uniqueIndex("uidx_cruise_sailings_cruise_date_ship").on(table.cruiseId, table.departureDate, table.shipId),
136
+ ]);
137
+ export const cruiseVoyageGroupSegments = pgTable("cruise_voyage_group_segments", {
138
+ id: typeId("cruise_voyage_group_segments"),
139
+ voyageGroupId: typeIdRef("voyage_group_id")
140
+ .notNull()
141
+ .references(() => cruiseVoyageGroups.id, { onDelete: "cascade" }),
142
+ sortOrder: integer("sort_order").notNull(),
143
+ segmentKind: cruiseVoyageSegmentKindEnum("segment_kind").notNull(),
144
+ segmentRole: cruiseVoyageSegmentRoleEnum("segment_role").notNull().default("core"),
145
+ title: text("title").notNull(),
146
+ description: text("description"),
147
+ cruiseId: typeIdRef("cruise_id").references(() => cruises.id, { onDelete: "set null" }),
148
+ sailingId: typeIdRef("sailing_id").references(() => cruiseSailings.id, {
149
+ onDelete: "set null",
150
+ }),
151
+ startDay: integer("start_day"),
152
+ endDay: integer("end_day"),
153
+ startDate: date("start_date"),
154
+ endDate: date("end_date"),
155
+ embarkPortFacilityId: text("embark_port_facility_id"),
156
+ embarkPortCanonicalPlaceId: text("embark_port_canonical_place_id"),
157
+ disembarkPortFacilityId: text("disembark_port_facility_id"),
158
+ disembarkPortCanonicalPlaceId: text("disembark_port_canonical_place_id"),
159
+ nights: integer("nights"),
160
+ externalRefs: jsonb("external_refs").$type().default({}),
161
+ metadata: jsonb("metadata").$type().default({}),
162
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
163
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
164
+ }, (table) => [
165
+ uniqueIndex("uidx_cruise_voyage_segments_group_sort").on(table.voyageGroupId, table.sortOrder),
166
+ index("idx_cruise_voyage_segments_group_role").on(table.voyageGroupId, table.segmentRole),
167
+ index("idx_cruise_voyage_segments_cruise").on(table.cruiseId),
168
+ index("idx_cruise_voyage_segments_sailing").on(table.sailingId),
169
+ index("idx_cruise_voyage_segments_embark_place").on(table.embarkPortCanonicalPlaceId),
170
+ index("idx_cruise_voyage_segments_disembark_place").on(table.disembarkPortCanonicalPlaceId),
171
+ ]);