@v-office/website-sdk 2.12.0 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +3 -2
  2. package/dist/capabilities/search.d.mts +2 -0
  3. package/dist/capabilities/search.mjs +2 -0
  4. package/dist/cli.mjs +2 -2
  5. package/dist/{client-Bmxh2SAu.mjs → client-BvQRpzYY.mjs} +807 -305
  6. package/dist/index.d.mts +3 -56
  7. package/dist/index.mjs +1 -1
  8. package/dist/instructions/CHANGELOG.md +2 -0
  9. package/dist/instructions/MIGRATION.md +2 -0
  10. package/dist/instructions/README.md +11 -3
  11. package/dist/instructions/booking.md +56 -40
  12. package/dist/instructions/quote.md +5 -3
  13. package/dist/instructions/rentals.md +46 -1
  14. package/dist/instructions/search.md +22 -0
  15. package/dist/instructions/versions/2.13.0/CHANGELOG.md +87 -0
  16. package/dist/instructions/versions/2.13.0/MIGRATION.md +315 -0
  17. package/dist/instructions/versions/2.14.0/CHANGELOG.md +72 -0
  18. package/dist/instructions/versions/2.14.0/MIGRATION.md +148 -0
  19. package/dist/{rentals-BG1diZoo.mjs → rentals-CN01jEkv.mjs} +8 -12
  20. package/dist/{search-BlL8vSPY.mjs → search-uXcReJdL.mjs} +2 -2
  21. package/dist/{to-rental-highlights-BVikT4Iz.mjs → to-rental-highlights-D_VRHaaC.mjs} +1355 -7
  22. package/dist/translations/shared/de-DE/booking.json +7 -0
  23. package/dist/translations/shared/en-US/booking.json +7 -0
  24. package/dist/translations/v9/de-DE/filter.json +4 -4
  25. package/dist/translations/v9/de-DE/rental-attribute-options.json +174 -0
  26. package/dist/translations/v9/de-DE/rental-attributes.json +95 -45
  27. package/dist/translations/v9/en-US/core.json +1 -1
  28. package/dist/translations/v9/en-US/filter.json +2 -2
  29. package/dist/translations/v9/en-US/rental-attribute-options.json +174 -0
  30. package/dist/translations/v9/en-US/rental-attributes.json +262 -212
  31. package/instructions/CHANGELOG.md +2 -0
  32. package/instructions/MIGRATION.md +2 -0
  33. package/instructions/README.md +11 -3
  34. package/instructions/booking.md +56 -40
  35. package/instructions/quote.md +5 -3
  36. package/instructions/rentals.md +46 -1
  37. package/instructions/search.md +22 -0
  38. package/instructions/versions/2.13.0/CHANGELOG.md +87 -0
  39. package/instructions/versions/2.13.0/MIGRATION.md +315 -0
  40. package/instructions/versions/2.14.0/CHANGELOG.md +72 -0
  41. package/instructions/versions/2.14.0/MIGRATION.md +148 -0
  42. package/package.json +7 -4
@@ -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.14.0/CHANGELOG.md`: `@v-office/website-sdk` 2.14.0 release notes.
8
+ - `versions/2.13.0/CHANGELOG.md`: `@v-office/website-sdk` 2.13.0 release notes.
7
9
  - `versions/2.12.0/CHANGELOG.md`: `@v-office/website-sdk` 2.12.0 release notes.
8
10
  - `versions/2.11.0/CHANGELOG.md`: `@v-office/website-sdk` 2.11.0 release notes.
9
11
  - `versions/2.10.0/CHANGELOG.md`: `@v-office/website-sdk` 2.10.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.14.0/MIGRATION.md`: migrate from `@v-office/website-sdk` 2.13.0 to 2.14.0.
8
+ - `versions/2.13.0/MIGRATION.md`: migrate from `@v-office/website-sdk` 2.12.0 to 2.13.0.
7
9
  - `versions/2.12.0/MIGRATION.md`: migrate from `@v-office/website-sdk` 2.11.0 to 2.12.0.
8
10
  - `versions/2.11.0/MIGRATION.md`: migrate from `@v-office/website-sdk` 2.10.0 to 2.11.0.
9
11
  - `versions/2.10.0/MIGRATION.md`: migrate from `@v-office/website-sdk` 2.9.0 to 2.10.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.12.0. Package versions remain unchanged until the release
4
+ `@v-office/website-sdk` 2.14.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:
@@ -18,6 +18,12 @@ Use this directory as the consumer-facing reference for the package:
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.14.0/`: 2.14.0 catalog-backed v9 property types and options,
22
+ corrected option/count rendering and translations, and the 2.13.0-to-2.14.0
23
+ migration guide.
24
+ - `versions/2.13.0/`: 2.13.0 static search capability discovery, shared v9/v10
25
+ booking-payment output, corrected remaining-payment deadlines, opaque booking
26
+ credentials, and the 2.12.0-to-2.13.0 migration guide.
21
27
  - `versions/2.12.0/`: 2.12.0 legacy-v9 search discounts, empty-query browsing,
22
28
  and flexible-period rejection; quote booking-card cleanup; and v10 modifier
23
29
  guidance, plus the 2.11.0-to-2.12.0 migration guide.
@@ -42,7 +48,9 @@ Use this directory as the consumer-facing reference for the package:
42
48
  pnpm add @v-office/website-sdk
43
49
  ```
44
50
 
45
- The package is ESM-only and exports the root SDK facade from `@v-office/website-sdk`.
51
+ The package is ESM-only. It exports the SDK facade from `@v-office/website-sdk`
52
+ and instance-independent search capability helpers from
53
+ `@v-office/website-sdk/capabilities/search`.
46
54
 
47
55
  ## Quick Start
48
56
 
@@ -82,5 +90,5 @@ website-sdk --backend v10 search --locale de-DE --query "adults=2" --sort '{"by"
82
90
  ```
83
91
 
84
92
  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
93
+ in 2.0.0 and kept in 2.14.0. v10 config additionally requires `searchEndpoint` as
86
94
  of 2.5.0.
@@ -78,47 +78,63 @@ Sample:
78
78
  ```json
79
79
  {
80
80
  "bookingNumber": "B-2026-0001",
81
- "guestToken": "guest-token",
82
- "paymentSchedules": [
83
- {
84
- "label": "Deposit",
85
- "dueOn": "2026-06-15",
86
- "lines": [
87
- {
88
- "label": "Deposit",
89
- "amount": "300.00 EUR"
90
- }
91
- ],
92
- "total": "300.00 EUR",
93
- "paymentOptions": [
94
- {
95
- "kind": "bank_transfer",
96
- "label": "Bank transfer",
97
- "holder": "Example GmbH",
98
- "iban": "DE02120300000000202051",
99
- "swiftOrBic": "BYLADEM1001",
100
- "remittanceText": "B-2026-0001"
101
- },
102
- {
103
- "kind": "redirect",
104
- "provider": "adyen",
105
- "label": "Credit card",
106
- "url": "https://checkout.example.com"
107
- },
108
- {
109
- "kind": "stripe_checkout",
110
- "provider": "stripe",
111
- "label": "Credit card",
112
- "sessionId": "cs_live_a1Upmvi1v62AdILeDZl4l",
113
- "accountId": "acct_1MpAB7AFrTg9gw7b"
114
- }
115
- ]
116
- }
117
- ],
118
- "insurancePaymentOptions": []
81
+ "payment": {
82
+ "schedule": [
83
+ {
84
+ "kind": "prepayment",
85
+ "label": "Down payment",
86
+ "amount": "€76.00",
87
+ "dueOn": "Payable until August 19, 2026",
88
+ "paymentOptions": [
89
+ {
90
+ "kind": "bank_transfer",
91
+ "label": "Bank transfer",
92
+ "holder": "Example GmbH",
93
+ "iban": "DE02120300000000202051",
94
+ "swiftOrBic": "BYLADEM1001",
95
+ "remittanceText": "Booking number: B-2026-0001"
96
+ }
97
+ ]
98
+ },
99
+ {
100
+ "kind": "remaining_payment",
101
+ "label": "Remaining payment",
102
+ "amount": "€304.00",
103
+ "dueOn": "Payable until February 6, 2027"
104
+ }
105
+ ],
106
+ "alternatives": [
107
+ {
108
+ "kind": "full_amount",
109
+ "label": "Total payment",
110
+ "amount": "€380.00",
111
+ "paymentOptions": [
112
+ {
113
+ "kind": "bank_transfer",
114
+ "label": "Bank transfer",
115
+ "holder": "Example GmbH",
116
+ "iban": "DE02120300000000202051",
117
+ "swiftOrBic": "BYLADEM1001",
118
+ "remittanceText": "Booking number: B-2026-0001"
119
+ }
120
+ ]
121
+ }
122
+ ]
123
+ }
119
124
  }
120
125
  ```
121
126
 
127
+ `payment.schedule` contains the remaining contractual payment steps known to the backend. Its `kind` is one of `prepayment`, `remaining_payment`, `installment`, or `deposit`. `v9` emits named prepayment and remaining-payment steps; `v10` emits its backend-provided installment and deposit steps.
128
+
129
+ `payment.alternatives` contains ways to settle the complete outstanding balance. A `full_amount` alternative has no inferred deadline. `dueOn`, `paymentAt`, labels, amounts, and line amounts are already translated and formatted for the booking locale.
130
+
131
+ `paymentOptions` is present only when the SDK can currently perform that payment. Future or on-site steps remain visible without payment options.
132
+
133
+ An optional `insurancePaymentOptions` array is returned only when post-booking insurance payment is available.
134
+
135
+ Sites upgrading from 2.12.0 must replace the former `paymentSchedules` output. See
136
+ `versions/2.13.0/MIGRATION.md`.
137
+
122
138
  Payment option variants:
123
139
 
124
140
  - `bank_transfer`: display-only payment details.
@@ -153,13 +169,13 @@ try {
153
169
 
154
170
  Online payment providers return the guest to a URL derived from `relativeRedirectUrl`. Stripe returns to that path with `payment=stripe&success=true` after payment and `payment=stripe&cancel=true` after cancellation, so the path must exist in your site and should read those query parameters.
155
171
 
156
- `relativeRedirectUrl` is supplied before the reservation exists, so the return URL cannot carry the booking number or guest token. Persist whatever the return page needs, for example in `sessionStorage`, before submitting a payment option.
172
+ `relativeRedirectUrl` is supplied before the reservation exists, so the return URL cannot carry the booking number. Persist whatever the return page needs, for example in `sessionStorage`, before submitting a payment option.
157
173
 
158
174
  A successful return means the provider sent the browser back, not that the payment has settled. Confirmation reaches vOffice through the provider's webhook.
159
175
 
160
176
  ## Configuration
161
177
 
162
- Booking requests are rate-limited to one backend request per second with a queue size of five. `v9` books through the v0 `book` action and initializes one Stripe Checkout Session per payment schedule option when the property has Stripe enabled. `v10` books through GraphQL and initializes Adyen redirect payment options.
178
+ Booking requests are rate-limited to one backend request per second with a queue size of five. `v9` books through the v0 `book` action and initializes Stripe only for currently payable choices when the property has Stripe enabled. `v10` books through GraphQL, preserves all remaining payment steps for display, and initializes Adyen for the next payable online step and the full-outstanding alternative.
163
179
 
164
180
  ## CLI Usage
165
181
 
@@ -393,16 +393,18 @@ quote = await sdk.live.quote.selectInsurancePayment({
393
393
  });
394
394
  ```
395
395
 
396
- After the rental booking is created, complete insurance booking with the booking number and guest token:
396
+ After the rental booking is created, complete insurance booking with the opaque booking result. Keep the live result object; its private backend credentials are intentionally not serialized:
397
397
 
398
398
  ```ts
399
399
  const insuranceBooking = await sdk.live.quote.bookInsurance({
400
400
  quote,
401
- bookingNumber: booking.bookingNumber,
402
- guestToken: booking.guestToken,
401
+ booking,
403
402
  });
404
403
  ```
405
404
 
405
+ This is a breaking change in 2.13.0. The former public `guestToken` input is no
406
+ longer used; see `versions/2.13.0/MIGRATION.md`.
407
+
406
408
  `v9` supports real insurance option refresh, pre-contract, payment selection, and booking. `v10` currently returns a no-insurance placeholder and insurance actions resolve as not required.
407
409
 
408
410
  ## Configuration
@@ -54,7 +54,7 @@ Sample item:
54
54
  "headline": "Holiday apartment near the sea",
55
55
  "description": "Short localized rental description."
56
56
  },
57
- "highlights": ["2 bedrooms", "WiFi", "Parking"],
57
+ "highlights": ["2 bedrooms", "Wi-Fi", "Parking"],
58
58
  "attributes": [
59
59
  {
60
60
  "label": "Amenities",
@@ -87,6 +87,51 @@ Sample item:
87
87
 
88
88
  Optional fields include `scope`, `address`, `property`, `rooms`, `roomSummary`, `vicinity`, and `reviews`.
89
89
 
90
+ ### Legacy v9 Built-In Attributes
91
+
92
+ From 2.14.0, built-in v9 property types and ordered option values come from the
93
+ vOffice property catalog rather than example-value inference. The SDK keeps
94
+ observed-only fields for compatibility, but examples do not redefine catalog
95
+ fields.
96
+
97
+ v9 `OPT` values are zero-based numeric indexes. The SDK resolves them to
98
+ localized display text before adding them to `attributes`, `highlights`, or
99
+ `vicinity`. For example:
100
+
101
+ ```text
102
+ youthgroups = 0 → Jugendgruppen: willkommen
103
+ youthgroups = 1 → Jugendgruppen: nicht erlaubt
104
+ youthgroups = 2 → Jugendgruppen: auf Anfrage
105
+ ```
106
+
107
+ An option index of `0` is a valid value, not Boolean `false`. Invalid,
108
+ fractional, negative, and out-of-range indexes are omitted.
109
+
110
+ Source-defined v9 `INT` values retain their numeric value, including `1`. Known
111
+ count attributes use localized singular and plural nouns:
112
+
113
+ ```text
114
+ bedrooms = 1 → 1 Schlafzimmer
115
+ bedrooms = 2 → 2 Schlafzimmer
116
+ bedrooms = 1 → 1 bedroom
117
+ bedrooms = 2 → 2 bedrooms
118
+ ```
119
+
120
+ Boolean behavior is unchanged: disabled values are omitted and enabled values
121
+ are rendered as the localized label.
122
+
123
+ Translation overrides use these key forms:
124
+
125
+ ```text
126
+ RentalAttributes.<attribute>.label
127
+ RentalAttributes.<attribute>.option.<zero-based-index>
128
+ RentalAttributes.<attribute>.count.one
129
+ RentalAttributes.<attribute>.count.other
130
+ ```
131
+
132
+ See `versions/2.14.0/CHANGELOG.md` and
133
+ `versions/2.14.0/MIGRATION.md`.
134
+
90
135
  ### Review Items
91
136
 
92
137
  Each review item contains at least `rating` or `text`. `id`, `author`, `label`, and `createdAt` are optional:
@@ -77,6 +77,28 @@ Common stable query keys:
77
77
  - Occupancy: `adults`, `children`, `childrenAges`, `babies`, `pets`, `petsCount`.
78
78
  - Filters: use `searchParameterQueryKey` values from `sdk.static.filter.getFilters(...)`.
79
79
 
80
+ ### Static Backend Capabilities
81
+
82
+ Search capabilities that only depend on a backend name are available without
83
+ constructing an SDK:
84
+
85
+ ```ts
86
+ import {
87
+ getSupportedPeriodQueryKeys,
88
+ supportsFlexiblePeriodSearch,
89
+ } from "@v-office/website-sdk/capabilities/search";
90
+
91
+ supportsFlexiblePeriodSearch("v9"); // false
92
+ supportsFlexiblePeriodSearch("v10"); // true
93
+
94
+ getSupportedPeriodQueryKeys("v9").has("month"); // false
95
+ getSupportedPeriodQueryKeys("v10").has("month"); // true
96
+ ```
97
+
98
+ The returned read-only set contains the stable period query keys accepted by the
99
+ selected backend, including aliases such as `from` and `till`. Key support does
100
+ not replace validation of complete query combinations.
101
+
80
102
  ## Query Structure
81
103
 
82
104
  The `query` field is a URL query-string style value without a leading `?`.
@@ -0,0 +1,87 @@
1
+ # Changelog: 2.13.0
2
+
3
+ This release adds static backend search capability discovery and replaces the
4
+ ambiguous flat booking payment schedule with a shared, presentation-ready payment
5
+ model for v9 and v10. It preserves every known remaining payment step, separates
6
+ contractual steps from full-payment alternatives, and keeps backend credentials
7
+ out of the public booking output.
8
+
9
+ ## Added
10
+
11
+ - `@v-office/website-sdk/capabilities/search` exposes pure, instance-independent
12
+ helpers for checking flexible-period support and the supported period query keys
13
+ for a backend.
14
+ - `BookingOutput.payment.schedule` contains the remaining contractual payment
15
+ steps known after booking.
16
+ - `BookingOutput.payment.alternatives` contains optional ways to settle the
17
+ complete outstanding balance.
18
+ - Schedule entries have a stable `kind`: `prepayment`, `remaining_payment`,
19
+ `installment`, or `deposit`.
20
+ - Full-payment alternatives use `kind: "full_amount"`.
21
+ - v10 booking output includes all remaining online, on-site, and external payment
22
+ steps instead of exposing only the next online step.
23
+ - v10 schedule entries can include translated `paymentAt` text derived from the
24
+ backend payment location and recipient.
25
+ - Legacy v9 now preserves its independently supplied remaining-payment amount and
26
+ deadline.
27
+
28
+ ## Changed
29
+
30
+ - `dueOn` is now a complete translated, long-form display string such as
31
+ `Zahlbar bis zum 6. Februar 2027`.
32
+ - Schedule and alternative amounts use the `amount` field and remain
33
+ locale-formatted display strings.
34
+ - `paymentOptions` is present on a schedule entry only when the SDK can currently
35
+ perform that payment. Informational future, on-site, and external steps remain
36
+ visible without payment options.
37
+ - A synthesized v9 full-payment alternative no longer copies the prepayment
38
+ deadline. An explicit backend total deadline can still be retained.
39
+ - v10 initializes Adyen only for the next payable online step and the
40
+ full-outstanding alternative.
41
+ - v9 initializes Stripe only for currently payable choices.
42
+ - Post-booking insurance now receives the opaque booking result:
43
+
44
+ ```ts
45
+ await sdk.live.quote.bookInsurance({ quote, booking });
46
+ ```
47
+
48
+ ## Removed
49
+
50
+ - `BookingOutput.paymentSchedules`
51
+ - Public `BookingOutput.guestToken`
52
+ - ISO-like or locale-short date assumptions for booking payment output
53
+
54
+ The private v9 guest token remains attached to the live opaque booking object and
55
+ is used internally when completing insurance. It is not enumerable or
56
+ serializable.
57
+
58
+ ## Backend Mapping
59
+
60
+ - v9 `prepayment` becomes `kind: "prepayment"`.
61
+ - v9 `rest` becomes `kind: "remaining_payment"`.
62
+ - v9 `total` becomes a `full_amount` alternative.
63
+ - v10 `INSTALLMENT` becomes `kind: "installment"`.
64
+ - v10 `DEPOSIT` becomes `kind: "deposit"`.
65
+ - v10 `financials.outstanding` becomes a `full_amount` alternative when it is a
66
+ distinct payable choice.
67
+
68
+ ## Migration Impact
69
+
70
+ This is a breaking output and insurance-input change. Consumers must:
71
+
72
+ 1. Replace reads of `paymentSchedules` with `payment.schedule` and
73
+ `payment.alternatives`.
74
+ 2. Read `amount` instead of the former schedule `total`.
75
+ 3. Treat schedule `paymentOptions` as optional.
76
+ 4. Render `dueOn`, `paymentAt`, labels, amounts, and line amounts directly without
77
+ reparsing or reformatting them.
78
+ 5. Pass the live `booking` object to `bookInsurance` instead of passing
79
+ `bookingNumber` and `guestToken`.
80
+ 6. Keep the booking object in memory until optional v9 insurance booking is
81
+ complete; private credentials do not survive JSON serialization.
82
+
83
+ The search capability API is additive. Consumers with hardcoded backend period-key
84
+ tables can replace them with the new helpers.
85
+
86
+ See `versions/2.13.0/MIGRATION.md`, `../../search.md`, `../../booking.md`, and
87
+ `../../quote.md`.