@v-office/website-sdk 2.10.0 → 2.12.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.
- package/README.md +7 -3
- package/dist/cli.d.mts +1 -1
- package/dist/cli.mjs +2 -2
- package/dist/{client-DYAHnU5F.mjs → client-Bmxh2SAu.mjs} +54 -30
- package/dist/index.d.mts +590 -291
- package/dist/index.mjs +1 -1
- package/dist/instructions/CHANGELOG.md +2 -0
- package/dist/instructions/MIGRATION.md +2 -0
- package/dist/instructions/README.md +10 -3
- package/dist/instructions/quote.md +95 -3
- package/dist/instructions/search.md +118 -13
- package/dist/instructions/versions/2.11.0/CHANGELOG.md +28 -0
- package/dist/instructions/versions/2.11.0/MIGRATION.md +72 -0
- package/dist/instructions/versions/2.12.0/CHANGELOG.md +56 -0
- package/dist/instructions/versions/2.12.0/MIGRATION.md +194 -0
- package/dist/instructions/versions/2.5.0/MIGRATION.md +6 -0
- package/dist/{quote-Cs6jGoRS.mjs → quote-Qy_affum.mjs} +4 -4
- package/dist/{rentals-CFod9H4m.mjs → rentals-BG1diZoo.mjs} +7 -4
- package/dist/{search-QlZrI7ue.mjs → search-BlL8vSPY.mjs} +39 -19
- package/dist/{to-rental-highlights-B6a_fi0j.mjs → to-rental-highlights-BVikT4Iz.mjs} +4 -2
- package/instructions/CHANGELOG.md +2 -0
- package/instructions/MIGRATION.md +2 -0
- package/instructions/README.md +10 -3
- package/instructions/quote.md +95 -3
- package/instructions/search.md +118 -13
- package/instructions/versions/2.11.0/CHANGELOG.md +28 -0
- package/instructions/versions/2.11.0/MIGRATION.md +72 -0
- package/instructions/versions/2.12.0/CHANGELOG.md +56 -0
- package/instructions/versions/2.12.0/MIGRATION.md +194 -0
- package/instructions/versions/2.5.0/MIGRATION.md +6 -0
- package/package.json +15 -13
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { $ as ServiceBeonDataSchema, A as ErgoBookRequestSchema, At as quoteEffect, B as OnOfficeUnitSchema, C as DocumentResourceSchema, Ct as clearAdditionalServicesEffect, D as DocumentTypeSchema, Dt as getRentalsEffect, E as DocumentSummarySchema, Et as getInitialAvailabilityEffect, F as ErgoPolicyNumberRequestSchema, Ft as selectInsurancePaymentEffect, G as QuotePricesResponseSchema, H as PaymentScheduleSchema, I as ErgoReadPreContractRequestSchema, It as submitContactEffect, J as RawObjectResponseSchema, K as QuoteSchema, L as ErgoTripAndCustomerRequestSchema, Lt as submitPaymentOption, M as ErgoCreatePreContractRequestSchema, Mt as searchEffect, N as ErgoPersonSchema, Nt as selectCancellationPolicyEffect, O as ErgoAddressSchema, Ot as getStartDateSelectedAvailabilityEffect, P as ErgoPlanSearchRequestSchema, Pt as selectInsuranceEffect, Q as SearchPropertiesResponseSchema, R as FacilityListResponseSchema, Rt as submitPaymentOptionEffect, S as DocumentResourceResponseSchema, St as bookInsuranceEffect, T as DocumentStatusUpdateRequestSchema, Tt as getFiltersEffect, U as QuoteLineSchema, V as PaymentScheduleItemSchema, W as QuotePricesPayloadSchema, X as RegionListResponseSchema, Y as RawVofficeObjectSchema, Z as RoomImageSchema, _ as CalendarDaySchema, _t as V1_OPERATIONS, at as TileCollectionResponseSchema, b as CustomerUnitSummarySchema, bt as addAdditionalServiceEffect, c as V0OpenApiClient, ct as TravelInsuranceBookingSchema, d as makeV0OpenApiClientLive, dt as UnitListItemSchema, et as ServiceImageSchema, f as V1OpenApiClient, ft as UnitListResponseSchema, g as ApiEnvelopeBaseSchema, gt as V1_BASE_URL, h as makeV1OpenApiClientLive, ht as UnitServicePriceSchema, it as SetupResponseSchema, j as ErgoCommonFieldsSchema, jt as removeAdditionalServiceEffect, k as ErgoBankSchema, kt as getTermsAndPrivacyPolicyEffect, l as V0OpenApiClientError, lt as TravelInsuranceBookingStoreRequestSchema, m as makeV1OpenApiClientFetchLive, mt as UnitResponseSchema, nt as ServiceListResponseSchema, ot as TileSchema, p as V1OpenApiClientError, pt as UnitOfferSchema, q as QuoteServiceSchema, rt as SetupDataSchema, st as TileTagSchema, t as createWebsiteSDK, tt as ServiceLimitSchema, u as makeV0OpenApiClientFetchLive, ut as UnitIdsResponseSchema, v as CalendarResponseSchema, vt as VideoResponseSchema, w as DocumentStatusSchema, wt as createInsurancePreContractEffect, x as DocumentCollectionResponseSchema, xt as bookEffect, y as CurrentMemberResponseSchema, yt as decodeV1OperationResponse, z as OnOfficeUnitCollectionResponseSchema, zt as defineWebsiteSDKOptions } from "./client-
|
|
1
|
+
import { $ as ServiceBeonDataSchema, A as ErgoBookRequestSchema, At as quoteEffect, B as OnOfficeUnitSchema, C as DocumentResourceSchema, Ct as clearAdditionalServicesEffect, D as DocumentTypeSchema, Dt as getRentalsEffect, E as DocumentSummarySchema, Et as getInitialAvailabilityEffect, F as ErgoPolicyNumberRequestSchema, Ft as selectInsurancePaymentEffect, G as QuotePricesResponseSchema, H as PaymentScheduleSchema, I as ErgoReadPreContractRequestSchema, It as submitContactEffect, J as RawObjectResponseSchema, K as QuoteSchema, L as ErgoTripAndCustomerRequestSchema, Lt as submitPaymentOption, M as ErgoCreatePreContractRequestSchema, Mt as searchEffect, N as ErgoPersonSchema, Nt as selectCancellationPolicyEffect, O as ErgoAddressSchema, Ot as getStartDateSelectedAvailabilityEffect, P as ErgoPlanSearchRequestSchema, Pt as selectInsuranceEffect, Q as SearchPropertiesResponseSchema, R as FacilityListResponseSchema, Rt as submitPaymentOptionEffect, S as DocumentResourceResponseSchema, St as bookInsuranceEffect, T as DocumentStatusUpdateRequestSchema, Tt as getFiltersEffect, U as QuoteLineSchema, V as PaymentScheduleItemSchema, W as QuotePricesPayloadSchema, X as RegionListResponseSchema, Y as RawVofficeObjectSchema, Z as RoomImageSchema, _ as CalendarDaySchema, _t as V1_OPERATIONS, at as TileCollectionResponseSchema, b as CustomerUnitSummarySchema, bt as addAdditionalServiceEffect, c as V0OpenApiClient, ct as TravelInsuranceBookingSchema, d as makeV0OpenApiClientLive, dt as UnitListItemSchema, et as ServiceImageSchema, f as V1OpenApiClient, ft as UnitListResponseSchema, g as ApiEnvelopeBaseSchema, gt as V1_BASE_URL, h as makeV1OpenApiClientLive, ht as UnitServicePriceSchema, it as SetupResponseSchema, j as ErgoCommonFieldsSchema, jt as removeAdditionalServiceEffect, k as ErgoBankSchema, kt as getTermsAndPrivacyPolicyEffect, l as V0OpenApiClientError, lt as TravelInsuranceBookingStoreRequestSchema, m as makeV1OpenApiClientFetchLive, mt as UnitResponseSchema, nt as ServiceListResponseSchema, ot as TileSchema, p as V1OpenApiClientError, pt as UnitOfferSchema, q as QuoteServiceSchema, rt as SetupDataSchema, st as TileTagSchema, t as createWebsiteSDK, tt as ServiceLimitSchema, u as makeV0OpenApiClientFetchLive, ut as UnitIdsResponseSchema, v as CalendarResponseSchema, vt as VideoResponseSchema, w as DocumentStatusSchema, wt as createInsurancePreContractEffect, x as DocumentCollectionResponseSchema, xt as bookEffect, y as CurrentMemberResponseSchema, yt as decodeV1OperationResponse, z as OnOfficeUnitCollectionResponseSchema, zt as defineWebsiteSDKOptions } from "./client-Bmxh2SAu.mjs";
|
|
2
2
|
import { AdditionalServiceLimitExceeded, CoreSDKError, CoreSDKError as CMSError, CustomAttributeCatalogSchema, GuestQuoteSchema, InvalidAdditionalServiceQuantity, LocaleSchema, SearchSearchFieldOrderBySchema, SearchSearchFieldSortSchema, SearchSearchInputSchema, SearchSearchOutputSchema, SearchSearchPriceSortSchema, SearchSearchRandomSortSchema, SearchSearchRatingSortSchema, SearchSearchSortSchema, SearchSortDirectionSchema, UnknownAdditionalService, defineCustomAttributes, defineCustomAttributesFromUnknown, fetchCustomAttributeCatalog, parseCustomAttributeCatalog, validateContactSubmitInput } from "@v-office/sdk-core";
|
|
3
3
|
//#region codegen/v9/heuristic-generation/public-api.ts
|
|
4
4
|
const customDataAttribute = (name) => name;
|
|
@@ -4,6 +4,8 @@ This file is the versioned changelog index for the website SDK instructions.
|
|
|
4
4
|
|
|
5
5
|
## Versions
|
|
6
6
|
|
|
7
|
+
- `versions/2.12.0/CHANGELOG.md`: `@v-office/website-sdk` 2.12.0 release notes.
|
|
8
|
+
- `versions/2.11.0/CHANGELOG.md`: `@v-office/website-sdk` 2.11.0 release notes.
|
|
7
9
|
- `versions/2.10.0/CHANGELOG.md`: `@v-office/website-sdk` 2.10.0 release notes.
|
|
8
10
|
- `versions/2.9.0/CHANGELOG.md`: `@v-office/website-sdk` 2.9.0 release notes.
|
|
9
11
|
- `versions/2.8.0/CHANGELOG.md`: `@v-office/website-sdk` 2.8.0 release notes.
|
|
@@ -4,6 +4,8 @@ This file is the versioned migration index for the website SDK instructions.
|
|
|
4
4
|
|
|
5
5
|
## Available Guides
|
|
6
6
|
|
|
7
|
+
- `versions/2.12.0/MIGRATION.md`: migrate from `@v-office/website-sdk` 2.11.0 to 2.12.0.
|
|
8
|
+
- `versions/2.11.0/MIGRATION.md`: migrate from `@v-office/website-sdk` 2.10.0 to 2.11.0.
|
|
7
9
|
- `versions/2.10.0/MIGRATION.md`: migrate from `@v-office/website-sdk` 2.9.0 to 2.10.0.
|
|
8
10
|
- `versions/2.9.0/MIGRATION.md`: migrate from `@v-office/website-sdk` 2.8.0 to 2.9.0.
|
|
9
11
|
- `versions/2.8.0/MIGRATION.md`: migrate from `@v-office/website-sdk` 2.7.0 to 2.8.0.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Website SDK Instructions
|
|
2
2
|
|
|
3
3
|
These instructions describe the current source targeted for
|
|
4
|
-
`@v-office/website-sdk` 2.
|
|
4
|
+
`@v-office/website-sdk` 2.12.0. Package versions remain unchanged until the release
|
|
5
5
|
workflow performs the coordinated core and website bumps.
|
|
6
6
|
|
|
7
7
|
Use this directory as the consumer-facing reference for the package:
|
|
@@ -12,12 +12,17 @@ Use this directory as the consumer-facing reference for the package:
|
|
|
12
12
|
- `custom-attributes.md`: custom attribute catalog, configuration, per-backend behaviour, and the v9-to-v10 move.
|
|
13
13
|
- `search.md`: `sdk.live.search.search`.
|
|
14
14
|
- `availability.md`: date-picker availability flows.
|
|
15
|
-
- `quote.md`: quote, additional services, cancellation policy, and insurance flows.
|
|
15
|
+
- `quote.md`: quote booking-card modifiers, additional services, cancellation policy, and insurance flows.
|
|
16
16
|
- `booking.md`: booking and payment option submission.
|
|
17
17
|
- `contact.md`: contact submission.
|
|
18
18
|
- `document-structured-json.md`: `sdk.static.documents.getTermsAndPrivacyPolicy` and structured document JSON rendering rules.
|
|
19
19
|
- `CHANGELOG.md`: versioned changelog index.
|
|
20
20
|
- `MIGRATION.md`: versioned migration index.
|
|
21
|
+
- `versions/2.12.0/`: 2.12.0 legacy-v9 search discounts, empty-query browsing,
|
|
22
|
+
and flexible-period rejection; quote booking-card cleanup; and v10 modifier
|
|
23
|
+
guidance, plus the 2.11.0-to-2.12.0 migration guide.
|
|
24
|
+
- `versions/2.11.0/`: 2.11.0 search-discount release notes and
|
|
25
|
+
2.10.0-to-2.11.0 migration guide.
|
|
21
26
|
- `versions/2.10.0/`: 2.10.0 option-booking release notes and 2.9.0-to-2.10.0 migration guide.
|
|
22
27
|
- `versions/2.9.0/`: 2.9.0 highlight-selection release notes and 2.8.0-to-2.9.0 migration guide.
|
|
23
28
|
- `versions/2.8.0/`: 2.8.0 custom-attribute release notes and 2.7.0-to-2.8.0 migration guide.
|
|
@@ -76,4 +81,6 @@ website-sdk --backend v10 search --locale de-DE --query "adults=2"
|
|
|
76
81
|
website-sdk --backend v10 search --locale de-DE --query "adults=2" --sort '{"by":"field","orderBy":{"label":"ASC"}}'
|
|
77
82
|
```
|
|
78
83
|
|
|
79
|
-
Config file examples in these docs use the flat `WebsiteSDKConfig` shape introduced
|
|
84
|
+
Config file examples in these docs use the flat `WebsiteSDKConfig` shape introduced
|
|
85
|
+
in 2.0.0 and kept in 2.12.0. v10 config additionally requires `searchEndpoint` as
|
|
86
|
+
of 2.5.0.
|
|
@@ -62,13 +62,13 @@ Sample:
|
|
|
62
62
|
```
|
|
63
63
|
|
|
64
64
|
Dates are local dates formatted as `YYYY-MM-DD`. For `v9`, `rentalId` must be a numeric vOffice unit id.
|
|
65
|
-
Both backends accept `voucher` on quote and booking flows. `v10
|
|
65
|
+
Both backends accept `voucher` on quote and booking flows. On `v10`, applied voucher and non-voucher modifiers can be exposed through the booking-card fields described below. `v9` reflects voucher effects in quoted totals but does not expose booking-card modifier details.
|
|
66
66
|
|
|
67
67
|
## Output
|
|
68
68
|
|
|
69
69
|
Returns `Promise<GuestQuoteResult>`.
|
|
70
70
|
|
|
71
|
-
Available sample:
|
|
71
|
+
Available sample without modifiers:
|
|
72
72
|
|
|
73
73
|
```json
|
|
74
74
|
{
|
|
@@ -139,6 +139,94 @@ Unavailable sample:
|
|
|
139
139
|
|
|
140
140
|
Selection methods return `{ ok: true, quote }` or `{ ok: false, error }`. Possible selection errors include unknown additional service, additional service limit exceeded, unknown cancellation policy, unavailable cancellation policy quote, and unavailable quote combination.
|
|
141
141
|
|
|
142
|
+
## Booking-Card Breakdown
|
|
143
|
+
|
|
144
|
+
Booking-card sections are returned in display order. On both v9 and v10, the SDK
|
|
145
|
+
omits numeric zero-value lines without subitems from the included, tax, and other
|
|
146
|
+
breakdown sections. If no lines remain in a section, the section is omitted.
|
|
147
|
+
Non-zero lines are unchanged, including when they share an `other` section with a
|
|
148
|
+
filtered zero-value line.
|
|
149
|
+
|
|
150
|
+
A zero-total line with subitems can remain because those subitems carry
|
|
151
|
+
descriptive content. Do not use the absence or presence of a zero-value price row
|
|
152
|
+
as service-selection state; use the quote's explicit service or selection data.
|
|
153
|
+
|
|
154
|
+
### Modifiers and Pre-Modifier Totals
|
|
155
|
+
|
|
156
|
+
On `v10`, a booking-card item at
|
|
157
|
+
`bookingCardInformation.sections[].lines[].item` can include these optional
|
|
158
|
+
fields:
|
|
159
|
+
|
|
160
|
+
```ts
|
|
161
|
+
{
|
|
162
|
+
modifiers?: readonly {
|
|
163
|
+
label: string;
|
|
164
|
+
amount: string;
|
|
165
|
+
}[];
|
|
166
|
+
totalBeforeModifiers?: string;
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
`modifiers` contains localized, formatted adjustments applied to that item. A
|
|
171
|
+
negative amount represents a deduction and a positive amount represents a
|
|
172
|
+
surcharge. The SDK groups backend modifiers with the same label and formats their
|
|
173
|
+
summed amount as one entry. The field is omitted when the item has no modifiers.
|
|
174
|
+
|
|
175
|
+
`item.totalBeforeModifiers` is the formatted item amount before its modifiers. It
|
|
176
|
+
is present when the item has a non-zero net modifier effect and the amount can be
|
|
177
|
+
derived; otherwise it is omitted. `item.appliedCharge` remains the final amount
|
|
178
|
+
after modifiers.
|
|
179
|
+
|
|
180
|
+
The booking card itself can also include
|
|
181
|
+
`bookingCardInformation.totalBeforeModifiers`. It is the formatted whole-card
|
|
182
|
+
total before all backend modifiers and is present when those modifiers have a
|
|
183
|
+
non-zero net effect. It is omitted when there are no modifiers or their amounts
|
|
184
|
+
net to zero. The SDK derives quote pre-modifier totals from the final amounts and
|
|
185
|
+
modifier values.
|
|
186
|
+
|
|
187
|
+
Items in the included, tax, and other sections carry their adjustments in
|
|
188
|
+
`item.modifiers`; do not expect those adjustments to be separate section lines.
|
|
189
|
+
Negative modifiers on backend lines that cannot be mapped to those sections may
|
|
190
|
+
instead appear as dedicated booking-card lines. `v9` quote cards omit
|
|
191
|
+
`modifiers` and both `totalBeforeModifiers` fields.
|
|
192
|
+
|
|
193
|
+
Discounted `v10` example for locale `de-DE`:
|
|
194
|
+
|
|
195
|
+
```json
|
|
196
|
+
{
|
|
197
|
+
"bookingCardInformation": {
|
|
198
|
+
"sections": [
|
|
199
|
+
{
|
|
200
|
+
"lines": [
|
|
201
|
+
{
|
|
202
|
+
"item": {
|
|
203
|
+
"position": "Inklusivpreis",
|
|
204
|
+
"appliedCharge": "1.554,00 €",
|
|
205
|
+
"modifiers": [
|
|
206
|
+
{
|
|
207
|
+
"label": "Frühbucher/Last-Minute",
|
|
208
|
+
"amount": "-140,00 €"
|
|
209
|
+
}
|
|
210
|
+
],
|
|
211
|
+
"totalBeforeModifiers": "1.694,00 €"
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
],
|
|
217
|
+
"total": "1.596,70 €",
|
|
218
|
+
"totalBeforeModifiers": "1.736,70 €"
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
For a price breakdown that keeps its arithmetic visible, render
|
|
224
|
+
`totalBeforeModifiers` as the pre-modifier amount, show each modifier as an
|
|
225
|
+
adjustment row, and use `appliedCharge` or `total` as the resulting final amount.
|
|
226
|
+
The SDK supplies formatted values but does not decide whether a reference price
|
|
227
|
+
should be displayed or struck through; that presentation and its legal
|
|
228
|
+
requirements remain the consuming site's responsibility.
|
|
229
|
+
|
|
142
230
|
## Vouchers
|
|
143
231
|
|
|
144
232
|
When `voucher` is provided in the quote input, an available quote may include `quote.voucher`:
|
|
@@ -153,7 +241,11 @@ When `voucher` is provided in the quote input, an available quote may include `q
|
|
|
153
241
|
|
|
154
242
|
`status` is `"applied"`, `"not_applied"`, or `"unknown"`. `v10` reports `"applied"` when the backend returns a non-zero voucher modifier and `"not_applied"` when no voucher modifier is returned for the requested voucher. `v9` returns `"unknown"` for available voucher quotes because the legacy response does not provide a reliable voucher modifier signal.
|
|
155
243
|
|
|
156
|
-
|
|
244
|
+
Do not assume an applied voucher appears as its own section line. On `v10`, a
|
|
245
|
+
voucher adjustment on an included, tax, or other line appears in that line's
|
|
246
|
+
`item.modifiers`; an unmapped negative modifier can appear as a dedicated line.
|
|
247
|
+
Use `quote.voucher.status` for voucher application status and the booking-card
|
|
248
|
+
fields for price presentation.
|
|
157
249
|
|
|
158
250
|
## Additional Services
|
|
159
251
|
|
|
@@ -87,17 +87,38 @@ Use `&` to combine period, occupancy, and filter parameters:
|
|
|
87
87
|
"start=20-06-2026&end=27-06-2026&adults=2&wifi";
|
|
88
88
|
```
|
|
89
89
|
|
|
90
|
+
### Empty Queries
|
|
91
|
+
|
|
92
|
+
On v9, an empty query returns the first page of searchable inventory under the
|
|
93
|
+
configured rental scope:
|
|
94
|
+
|
|
95
|
+
```ts
|
|
96
|
+
await sdk.live.search.search({
|
|
97
|
+
locale: "de-DE",
|
|
98
|
+
query: "",
|
|
99
|
+
});
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
The v9 facade serializes an empty backend-filter set as GraphQL `data: null`.
|
|
103
|
+
Pagination and the configured `limit` still apply; an undated query does not
|
|
104
|
+
assert availability for a particular stay.
|
|
105
|
+
|
|
90
106
|
### Period Queries
|
|
91
107
|
|
|
92
108
|
Use one supported period structure per query.
|
|
93
109
|
|
|
94
|
-
|
|
110
|
+
Fixed-period search is supported by both v9 and v10:
|
|
95
111
|
|
|
96
112
|
```ts
|
|
97
113
|
"start=20-06-2026&end=27-06-2026";
|
|
98
114
|
```
|
|
99
115
|
|
|
100
|
-
Flexible search by month
|
|
116
|
+
Flexible-period search is supported by v10 only. Legacy v9 rejects the `month`,
|
|
117
|
+
`dates`, `nights`, and `weekend` keys before transport instead of silently
|
|
118
|
+
returning an unpriced item list. Keep the flexible selector unavailable on v9
|
|
119
|
+
sites and use `start` plus `end` for a fixed-period search.
|
|
120
|
+
|
|
121
|
+
Flexible v10 search by month:
|
|
101
122
|
|
|
102
123
|
```ts
|
|
103
124
|
"month=06-2026&nights=7";
|
|
@@ -106,7 +127,7 @@ Flexible search by month:
|
|
|
106
127
|
"month=06-2026&month=07-2026&weekend";
|
|
107
128
|
```
|
|
108
129
|
|
|
109
|
-
Flexible search by exact date tuples:
|
|
130
|
+
Flexible v10 search by exact date tuples:
|
|
110
131
|
|
|
111
132
|
```ts
|
|
112
133
|
"dates=20-06-2026,22-06-2026&nights=2";
|
|
@@ -134,6 +155,9 @@ Boolean filters can be provided as presence-only flags when supported:
|
|
|
134
155
|
|
|
135
156
|
### Invalid Combinations
|
|
136
157
|
|
|
158
|
+
The following flexible-query validation rules apply to v10. Legacy v9 rejects
|
|
159
|
+
every flexible-period key as described above.
|
|
160
|
+
|
|
137
161
|
Do not mix exact period search with flexible period options:
|
|
138
162
|
|
|
139
163
|
```ts
|
|
@@ -155,7 +179,7 @@ Flexible queries require either `nights` or `weekend`, but not both:
|
|
|
155
179
|
"month=06-2026&nights=7&weekend";
|
|
156
180
|
```
|
|
157
181
|
|
|
158
|
-
|
|
182
|
+
Flexible date tuples accept `DD-MM-YYYY` and `YYYY-MM-DD`; months use `MM-YYYY`.
|
|
159
183
|
|
|
160
184
|
Use `rentalIdsIn` to restrict results to specific rental IDs. This option is currently supported by `v10` only.
|
|
161
185
|
Use `voucher` to price v10 search results with a voucher code. This option is currently supported by `v10` only.
|
|
@@ -227,6 +251,18 @@ The supported fields are `label`, `name`, all six `roomSummary` counters, `attri
|
|
|
227
251
|
|
|
228
252
|
Returns `Promise<RentalSearchOutput>`.
|
|
229
253
|
|
|
254
|
+
Priced items and alternative periods share this optional discount shape:
|
|
255
|
+
|
|
256
|
+
```ts
|
|
257
|
+
type SearchDiscount = {
|
|
258
|
+
readonly formattedOriginalTotal: string;
|
|
259
|
+
readonly applied: readonly {
|
|
260
|
+
readonly label: string;
|
|
261
|
+
readonly formattedAmount: string;
|
|
262
|
+
}[];
|
|
263
|
+
};
|
|
264
|
+
```
|
|
265
|
+
|
|
230
266
|
Sample:
|
|
231
267
|
|
|
232
268
|
```json
|
|
@@ -250,7 +286,16 @@ Sample:
|
|
|
250
286
|
}
|
|
251
287
|
],
|
|
252
288
|
"highlights": ["2 bedrooms", "WiFi", "Parking"],
|
|
253
|
-
"formattedTotal": "1.
|
|
289
|
+
"formattedTotal": "1.111,00 €",
|
|
290
|
+
"discount": {
|
|
291
|
+
"formattedOriginalTotal": "1.234,00 €",
|
|
292
|
+
"applied": [
|
|
293
|
+
{
|
|
294
|
+
"label": "Frühbucher-Rabatt",
|
|
295
|
+
"formattedAmount": "-123,00 €"
|
|
296
|
+
}
|
|
297
|
+
]
|
|
298
|
+
}
|
|
254
299
|
}
|
|
255
300
|
],
|
|
256
301
|
"alternatives": [
|
|
@@ -264,7 +309,16 @@ Sample:
|
|
|
264
309
|
{
|
|
265
310
|
"start": "2026-07-10",
|
|
266
311
|
"end": "2026-07-17",
|
|
267
|
-
"formattedTotal": "1.
|
|
312
|
+
"formattedTotal": "1.310,00 €",
|
|
313
|
+
"discount": {
|
|
314
|
+
"formattedOriginalTotal": "1.456,00 €",
|
|
315
|
+
"applied": [
|
|
316
|
+
{
|
|
317
|
+
"label": "Frühbucher-Rabatt",
|
|
318
|
+
"formattedAmount": "-146,00 €"
|
|
319
|
+
}
|
|
320
|
+
]
|
|
321
|
+
}
|
|
268
322
|
}
|
|
269
323
|
]
|
|
270
324
|
}
|
|
@@ -288,7 +342,15 @@ Sample:
|
|
|
288
342
|
}
|
|
289
343
|
```
|
|
290
344
|
|
|
291
|
-
Search items share the rental base fields and may include `scope`, `address`,
|
|
345
|
+
Search items share the rental base fields and may include `scope`, `address`,
|
|
346
|
+
`property`, `highlights`, and `formattedTotal`. A priced item or alternative period
|
|
347
|
+
may also include `discount`. When it does, `formattedTotal` is the final price and
|
|
348
|
+
`discount.formattedOriginalTotal` is the price before the applied discounts.
|
|
349
|
+
Discount totals, labels, and amounts are already localized and formatted for the
|
|
350
|
+
requested locale; backend numeric amounts and modifier type keys are not exposed.
|
|
351
|
+
`applied` may be empty when the backend supplies an original total without
|
|
352
|
+
individual modifier lines. Exact-period results are returned in `items`;
|
|
353
|
+
alternative-period suggestions are returned in root-level `alternatives`.
|
|
292
354
|
|
|
293
355
|
`appliedFilters` reports what the backend actually applied, and is what a "remove
|
|
294
356
|
this filter" chip should be built from. `label` is localized presentation and can
|
|
@@ -311,15 +373,58 @@ the expanded leaf entries. A UI may collapse those leaves under the composition
|
|
|
311
373
|
display, but should keep the returned keys and canonical values when removing direct
|
|
312
374
|
filters.
|
|
313
375
|
|
|
314
|
-
##
|
|
376
|
+
## Backend Behavior
|
|
377
|
+
|
|
378
|
+
### v10
|
|
315
379
|
|
|
316
|
-
v10 search runs against the dedicated REST search backend (`POST` to the configured
|
|
380
|
+
v10 search runs against the dedicated REST search backend (`POST` to the configured
|
|
381
|
+
`searchEndpoint`). Existing calls and the output type remain compatible, while the
|
|
382
|
+
input additionally supports optional sorting. v10 results reflect the REST
|
|
383
|
+
projection:
|
|
317
384
|
|
|
318
385
|
- At most five images per item, and no image `category`.
|
|
319
|
-
- `property` is the minimal `{ id, nameOrLabel }` shape. Hydrate
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
-
|
|
386
|
+
- `property` is the minimal `{ id, nameOrLabel }` shape. Hydrate
|
|
387
|
+
`property.location`, `property.images`, or `property.address` from
|
|
388
|
+
`sdk.static.rentals.getRentals(...)` when a card needs them.
|
|
389
|
+
- Custom-attribute search filters and highlights require the `customAttributes`
|
|
390
|
+
registry. A definition with no catalog ID cannot be executed, so its query key
|
|
391
|
+
is left in `unusedFilterKeys`. See `custom-attributes.md`.
|
|
392
|
+
- Fixed-period and flexible searches are priced by the REST backend and require
|
|
393
|
+
occupancy.
|
|
394
|
+
- Priced items and alternative periods may include localized `discount` details
|
|
395
|
+
with multiple applied modifiers when the REST backend returns them.
|
|
396
|
+
- The v10 public search input shape is unchanged. The SDK keeps
|
|
397
|
+
alternative-cancellation-policy
|
|
398
|
+
pricing out of search; cancellation-policy selection remains part of the quote
|
|
399
|
+
and booking flow.
|
|
400
|
+
- Pagination uses the backend `from`/`size` window behind the same opaque `cursor`,
|
|
401
|
+
capped at 1,000 results.
|
|
402
|
+
|
|
403
|
+
### Legacy v9
|
|
404
|
+
|
|
405
|
+
Legacy v9 maps its aggregated search calculation into the shared price and discount
|
|
406
|
+
shape:
|
|
407
|
+
|
|
408
|
+
- Flexible-period keys (`month`, `dates`, `nights`, and `weekend`) are rejected
|
|
409
|
+
before transport. v9 sites must use a fixed `start`/`end` period.
|
|
410
|
+
- Empty basic-filter sets are sent as GraphQL `data: null`, allowing an empty
|
|
411
|
+
query to browse the scoped searchable inventory without a dummy occupancy
|
|
412
|
+
value.
|
|
413
|
+
- `calc.total` becomes `formattedTotal`.
|
|
414
|
+
- `discount` is included only when `calc.oTotal` is greater than `calc.total`.
|
|
415
|
+
- `calc.oTotal` becomes `discount.formattedOriginalTotal`.
|
|
416
|
+
- A non-empty `calc.discountName` becomes the label of the single `applied` entry.
|
|
417
|
+
- The applied amount is the formatted negative difference
|
|
418
|
+
`calc.total - calc.oTotal`.
|
|
419
|
+
- Missing discount names produce an empty `applied` array without discarding the
|
|
420
|
+
formatted original total.
|
|
421
|
+
- The same mapping applies to exact-period items and individual alternative
|
|
422
|
+
periods.
|
|
423
|
+
- v9 never executes a custom-attribute search filter.
|
|
424
|
+
|
|
425
|
+
The field is omitted when v9 returns no final total or when its original total is
|
|
426
|
+
not greater than the final total. v9 exposes at most one aggregated applied entry,
|
|
427
|
+
whereas v10 can expose multiple detailed modifiers.
|
|
323
428
|
|
|
324
429
|
## Configuration
|
|
325
430
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Changelog: 2.11.0
|
|
2
|
+
|
|
3
|
+
This release exposes localized v10 REST search discount details on priced search
|
|
4
|
+
results.
|
|
5
|
+
|
|
6
|
+
## Added
|
|
7
|
+
|
|
8
|
+
- Priced v10 search items may include an optional `discount` with the localized
|
|
9
|
+
pre-discount total in `formattedOriginalTotal`.
|
|
10
|
+
- `discount.applied` lists each applied discount as a localized `label` and
|
|
11
|
+
`formattedAmount`.
|
|
12
|
+
- Alternative-period suggestions expose the same optional discount shape on each
|
|
13
|
+
priced period.
|
|
14
|
+
|
|
15
|
+
## Changed
|
|
16
|
+
|
|
17
|
+
- When `discount` is present, `formattedTotal` remains the final price after the
|
|
18
|
+
listed discounts.
|
|
19
|
+
- Backend modifier types and numeric amounts remain internal; the public search
|
|
20
|
+
output contains presentation-ready localized strings.
|
|
21
|
+
|
|
22
|
+
## Migration Impact
|
|
23
|
+
|
|
24
|
+
- Existing search calls require no changes because `discount` is optional.
|
|
25
|
+
- Search configuration and input are unchanged.
|
|
26
|
+
- Legacy v9 search does not populate `discount`.
|
|
27
|
+
- Sites can opt in to strike-through pricing and discount labels by reading the
|
|
28
|
+
new field. See `versions/2.11.0/MIGRATION.md` and `../../search.md`.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Migration: 2.10.0 to 2.11.0
|
|
2
|
+
|
|
3
|
+
2.11.0 adds optional localized discount information to priced v10 search results.
|
|
4
|
+
Existing search calls and rendering remain valid without changes.
|
|
5
|
+
|
|
6
|
+
## 1. Read the Optional Discount
|
|
7
|
+
|
|
8
|
+
Exact-period items and individual alternative periods may now include:
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
type SearchDiscount = {
|
|
12
|
+
readonly formattedOriginalTotal: string;
|
|
13
|
+
readonly applied: readonly {
|
|
14
|
+
readonly label: string;
|
|
15
|
+
readonly formattedAmount: string;
|
|
16
|
+
}[];
|
|
17
|
+
};
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The field is omitted when the REST search backend returns no discount. Keep
|
|
21
|
+
rendering `formattedTotal` as before and add discount presentation only when
|
|
22
|
+
`discount` is present.
|
|
23
|
+
|
|
24
|
+
## 2. Distinguish Final and Original Totals
|
|
25
|
+
|
|
26
|
+
When a discount is present:
|
|
27
|
+
|
|
28
|
+
- `formattedTotal` is the final price after the applied discounts.
|
|
29
|
+
- `discount.formattedOriginalTotal` is the total before those discounts.
|
|
30
|
+
- `discount.applied` contains presentation-ready localized labels and formatted
|
|
31
|
+
amounts.
|
|
32
|
+
|
|
33
|
+
All monetary values already include locale-aware currency formatting. Backend
|
|
34
|
+
numeric amounts and modifier type keys are intentionally not exposed.
|
|
35
|
+
|
|
36
|
+
## 3. Handle Exact and Alternative Periods
|
|
37
|
+
|
|
38
|
+
For a fixed-period match, read the field from the item:
|
|
39
|
+
|
|
40
|
+
```ts
|
|
41
|
+
result.items[0]?.discount;
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
For a nearby-period suggestion, read it from the individual period:
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
result.alternatives?.[0]?.alternativePeriods[0]?.discount;
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Each alternative period has independent pricing and may have a different discount
|
|
51
|
+
or no discount.
|
|
52
|
+
|
|
53
|
+
## 4. Keep Search Inputs Unchanged
|
|
54
|
+
|
|
55
|
+
No configuration or input migration is required. The SDK continues to request the
|
|
56
|
+
existing default v10 search pricing and does not opt search into alternative
|
|
57
|
+
cancellation-policy pricing.
|
|
58
|
+
|
|
59
|
+
Legacy v9 search does not populate `discount`; consumers supporting both backends
|
|
60
|
+
must treat it as optional.
|
|
61
|
+
|
|
62
|
+
## Recommended Verification
|
|
63
|
+
|
|
64
|
+
1. Run a priced v10 exact-period search that has a configured discount and verify
|
|
65
|
+
the final and original totals.
|
|
66
|
+
2. Verify each applied entry has a localized label and formatted amount in every
|
|
67
|
+
supported locale.
|
|
68
|
+
3. Run a priced search without a discount and confirm existing rendering is
|
|
69
|
+
unchanged.
|
|
70
|
+
4. Check nearby alternative periods independently because discounts can differ by
|
|
71
|
+
period.
|
|
72
|
+
5. If the site supports v9, confirm its existing search output remains unchanged.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Changelog: 2.12.0
|
|
2
|
+
|
|
3
|
+
This release extends the optional search discount output introduced in 2.11.0 to
|
|
4
|
+
legacy v9 search results, keeps zero-value lines out of quote booking-card
|
|
5
|
+
breakdowns, and completes v10 card-level pre-modifier totals across all modifier
|
|
6
|
+
presentation paths. It also rejects unsupported v9 flexible-period searches before
|
|
7
|
+
transport and restores empty-query inventory browsing on v9.
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- Priced legacy v9 exact-period items may include the shared optional `discount`
|
|
12
|
+
output.
|
|
13
|
+
- Individual legacy v9 alternative periods expose the same optional discount
|
|
14
|
+
shape.
|
|
15
|
+
- v9 maps its aggregated original total and discount name into
|
|
16
|
+
`formattedOriginalTotal` and at most one localized `applied` entry.
|
|
17
|
+
|
|
18
|
+
## Changed
|
|
19
|
+
|
|
20
|
+
- Legacy v9 search now rejects the unsupported flexible-period query keys
|
|
21
|
+
`month`, `dates`, `nights`, and `weekend` before transport instead of silently
|
|
22
|
+
returning an unpriced item list. Fixed `start`/`end` searches are unchanged.
|
|
23
|
+
- Legacy v9 search serializes an empty backend-filter set as GraphQL `data: null`
|
|
24
|
+
instead of `data: []`. Empty queries can therefore browse searchable inventory
|
|
25
|
+
without seeding a dummy occupancy value.
|
|
26
|
+
- When a v9 discount is present, `formattedTotal` remains the final price and the
|
|
27
|
+
applied amount is the formatted difference from the original total.
|
|
28
|
+
- v10 search discount behavior is unchanged from 2.11.0 and can continue to expose
|
|
29
|
+
multiple applied modifiers.
|
|
30
|
+
- Quote booking cards now omit zero-value lines without subitems from the `other`
|
|
31
|
+
section on both v10 and legacy v9, matching the existing empty-line behavior of
|
|
32
|
+
the included and tax sections.
|
|
33
|
+
- If an `other` section contains both zero-value and non-zero lines, only the
|
|
34
|
+
non-zero lines remain. The section is omitted when no lines remain.
|
|
35
|
+
- v10 derives card-level `totalBeforeModifiers` from all backend modifiers,
|
|
36
|
+
including negative modifiers rendered as dedicated booking-card lines.
|
|
37
|
+
- Booking-card items omit the optional `modifiers` field when no modifier entries
|
|
38
|
+
are present instead of producing `modifiers: []`.
|
|
39
|
+
|
|
40
|
+
## Migration Impact
|
|
41
|
+
|
|
42
|
+
- Existing supported search calls require no changes because `discount` remains
|
|
43
|
+
optional. v9 sites must keep flexible search unavailable and use `start`/`end`
|
|
44
|
+
period queries.
|
|
45
|
+
- v9 sites that inject `adults=1` only to make an empty query return results
|
|
46
|
+
should remove that workaround. Real occupancy filters remain supported.
|
|
47
|
+
- Search configuration, the public input type, and the discount schema are
|
|
48
|
+
unchanged. Runtime validation is stricter for unsupported v9 flexible-period
|
|
49
|
+
keys.
|
|
50
|
+
- Cross-backend sites can use one discount renderer for v9 and v10, while allowing
|
|
51
|
+
v9 to return at most one applied entry.
|
|
52
|
+
- Quote inputs and booking-card types are unchanged. Consumers may receive fewer
|
|
53
|
+
booking-card lines and may now receive the existing optional card-level
|
|
54
|
+
`totalBeforeModifiers` in additional v10 modifier cases. Do not rely on
|
|
55
|
+
zero-value rows to represent declined services.
|
|
56
|
+
- See `versions/2.12.0/MIGRATION.md`, `../../search.md`, and `../../quote.md`.
|