aves-sdk 4.0.0 → 5.0.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.
@@ -0,0 +1,538 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ <a id="v5.0.0"></a>
9
+ ## [5.0.0] - 2026-08-24
10
+
11
+ Effect-native core: **Effect Schema** + **`@effect/platform` HttpClient**, Promise `Result` facade at the edge, optional Layers / `ManagedRuntime` for Effect apps.
12
+
13
+ ### Added
14
+
15
+ - `makeAvesRuntime(options, deps?)` — `ManagedRuntime` over `avesClientLayer` for `yield* AvesBooking` / `AvesMaster` / `AvesPackages` / `AvesTransport`
16
+ - `avesClientLayer` / `AvesClientLive` — composable Effect Layers (`config → http → transport → domains`)
17
+ - Domain Tags: `AvesBooking`, `AvesMaster`, `AvesPackages`, `AvesTransport`, `AvesHttp`, `AvesConfig`
18
+ - `createAvesClient` — plain-object Promise facade (same shape as `AvesClient`)
19
+ - Public `Result` / `ok` / `err`; `isAvesError`; tagged errors `AvesValidationError` / `AvesApiError` / `AvesUnknownError` (+ factories)
20
+ - Test DI: `deps.httpClient` (`HttpClient.make`) and/or `deps.http` / domain service overrides
21
+
22
+ ### Changed
23
+
24
+ - **Breaking:** Validation stack is **Effect Schema** (`effect`). Valibot is removed.
25
+ - **Breaking:** HTTP is **`@effect/platform`** (`FetchHttpClient` by default). Undici is no longer a dependency; do not use `MockAgent` / `setGlobalDispatcher` for SDK tests — inject `HttpClient.make` via `deps.httpClient`.
26
+ - **Breaking:** Domains are Effect-native (`Effect.Effect<…, AvesError>`). The Promise API is a thin `toPromiseFacade` edge on `createAvesClient` / `AvesClient`.
27
+ - **Breaking:** `client.transport` is **removed** from the Promise facade. Effect programs use `yield* AvesTransport` (or domain Tags) with `makeAvesRuntime` / `avesClientLayer`.
28
+ - **Breaking:** `AvesError` is a **tagged union**, not a single constructible class. Prefer `isAvesError(e)`, `e instanceof AvesApiError`, or `Effect.catchTag("AvesApiError", …)`. Promise `error.kind` (`validation` | `api` | `unknown`) is unchanged.
29
+ - **Breaking:** DI no longer uses `new AvesTransport(options)` / `new BookingClient(transport)`. Use `AvesClientDeps`: `{ httpClient?, http?, transport?, master?, booking?, packages? }`.
30
+ - Internal layout: `src/client/{booking,master,packages,http,transport,config}/` (types / tag / service / layer).
31
+ - Published types shrank from 1.21 MB to 404 kB (npm tarball 115 kB → 72 kB): op params/results and the domain service types are now written against named types instead of inferred, so the declaration bundle references `BookingInput` & co. instead of inlining every schema structure. The public API is unchanged — `src/client/{ops,services}.test-d.ts` pin each op and domain method against the schema the transport actually uses.
32
+
33
+ ### Migration (4.x → 5.x)
34
+
35
+ 1. **Install** — `aves-sdk@5` pulls `effect` and `@effect/platform`. No Valibot/undici required.
36
+ 2. **Promise apps** — keep `new AvesClient(options)` / `createAvesClient(options)`. Import `Result` from `aves-sdk` if you typed it locally. Stop reading `client.transport`.
37
+ 3. **Errors** — replace `instanceof AvesError` with `isAvesError(error)` (or the concrete tagged class). `error.kind` / `message` / `status` / `code` still work on the Promise path.
38
+ 4. **Tests / DI** — replace undici `MockAgent` with platform mocks:
39
+
40
+ ```ts
41
+ import { HttpClient, HttpClientResponse } from "@effect/platform";
42
+ import { Effect } from "effect";
43
+ import { AvesClient } from "aves-sdk";
44
+
45
+ const httpClient = HttpClient.make((request, url) =>
46
+ Effect.succeed(
47
+ HttpClientResponse.fromWeb(
48
+ request,
49
+ new Response(`<SearchMasterRecordRS><RsStatus Status="OK"/></SearchMasterRecordRS>`, {
50
+ status: 200,
51
+ }),
52
+ ),
53
+ ),
54
+ );
55
+
56
+ const client = new AvesClient(options, { httpClient });
57
+ ```
58
+
59
+ 5. **Effect apps** — use Layers instead of the Promise facade:
60
+
61
+ ```ts
62
+ import { Effect } from "effect";
63
+ import { AvesMaster, makeAvesRuntime } from "aves-sdk";
64
+
65
+ const runtime = makeAvesRuntime(options);
66
+ const records = await runtime.runPromise(
67
+ Effect.gen(function* () {
68
+ const master = yield* AvesMaster;
69
+ return yield* master.search({ searchType: "CODE", recordCode: "508558" });
70
+ }),
71
+ );
72
+ await runtime.dispose();
73
+ ```
74
+
75
+ Or `Effect.provide(avesClientLayer(options, deps))` without a ManagedRuntime. Recover with `Effect.catchTag("AvesApiError", …)` / `"AvesValidationError"` / `"AvesUnknownError"`.
76
+
77
+ XML wire shapes, facade aliases, and domain method names from 4.x are unchanged.
78
+
79
+ <a id="v4.1.0"></a>
80
+ ## [4.1.0] - 2026-08-07
81
+
82
+ ### Added
83
+
84
+ - `client.booking.exportData(params)` — **ExportBookingData** (`BookingDataExportRQ` / `BookingDataExportRS`). The only AVES operation that reads a booking file back whole: header, passengers, booked services with per-line `amountsDetail`, file-level `bookedFileAmounts`, and **registered payments**. `addPayments` finally has a read counterpart.
85
+ - `ExtraInfo` lookup tables on the response: `currencyList`, `vatList`, `nationList`, `travelAgentList`, `programList`, `statisticList`, `priceOffertList`, `userList`, `passengerCategoryList`, `masterDataSet`, `masterDataSetExtraInfo`. `nationList[].territoriality` (`IN_UE` / `OUT_UE` / `MIXED_UE`) is the VAT-regime input.
86
+ - Object enums (+ schemas) for every closed picklist the export returns: `ExportType`, `Territoriality`, `StatisticType`, `ToSubServiceType`, `SellingType`, `Printable`, `PrintType`, `DeadlineStatus`, `CommissionIncomeType`, `CommissionOwedType`.
87
+ - `RecordTypeWire` — `RecordType` plus `NOT_SET`, for read responses. Mirrors the existing `BookingFileStatus` / `BookingFileStatusWire` split.
88
+ - Remaining documented export structures are now typed: `customerProcessedPrintList`, `instalmentPlanList`, `supplierInstalmentPlanList`, file- and service-level `deadlineList`, `commissionIncomeDetails`, `commissionOwedDetails`.
89
+ - Types `ExportBookingDataRQ` / `ExportBookingDataRS`, `ExportedBookingFile`, `ExportExtraInfo`, and facade aliases `BookingExportInput` / `BookingExportResult`.
90
+ - Facade output aliases: `bookingFileList` → `bookings`, `bookedServices` → `services`, `amountsDetail` → `amounts`, `bookedFileAmounts` → `totals`.
91
+
92
+ ### Fixed
93
+
94
+ - `master.search` / `master.upsert` responses no longer reject a record whose `RecordType` is `NOT_SET`. The response validation schema was reusing the request picklist, which omits it. Server-only fields AVES returns on read (`AreaCode`, `LastDateContact`, `UseSupplierDataOnTravelDoc`, `BookingEnabled`, `PrivacyPolicyAccepted`, and the misspelled `ModifitedDate`) are no longer dropped.
95
+
96
+ Note for TypeScript consumers: `MasterRecordDetailResponse["recordType"]` widens from `RecordType` to `RecordTypeWire`, so an exhaustive `switch` over it now needs a `NOT_SET` branch. Input types are unchanged.
97
+ - Facade arrays now expose public aliases when **iterated**, not only when indexed. `withPublicAliases` bound array methods to the raw target, so `for…of`, destructuring, spread, `Array.from`, `map`, `filter`, `find`, `forEach` and `at` all handed back rows without their alias keys — `const [p] = result.data.payments` yielded a row with `paymentDate` but no aliases, while `result.data.payments[0]` worked. Methods now run with `this` bound to the proxy. This also makes `indexOf` / `includes` consistent: `arr.indexOf(arr[0])` returned `-1` before, since it compared wrapped items against raw ones.
98
+
99
+ ### Changed
100
+
101
+ - `BoolishSchema` moved from `schemas/booking-shared.ts` to `schemas/common.ts`, next to `StringishSchema` — it is a cross-domain wire primitive, and `master-record` / `package-catalog` were already importing it out of the booking module. Internal only; it is not part of the published entry point.
102
+
103
+ ### Notes
104
+
105
+ - Request roots are `BookingDataExport*`, not `ExportBookingData*`: the spec's section tables name the endpoint, while its index and both worked XML examples name the elements.
106
+ - `limitRange` enforces the documented bounds (`skip` ≥ 0, `take` ≤ 1000) before the request leaves the SDK.
107
+ - Wire misspellings are normalized on the way in: `PaumentNote` → `paymentNote`, `FirstConfemationDate` → `firstConfirmationDate`, `UsersList` → `userList`, `TOSubServiceType` → `toSubServiceType`.
108
+ - `extraInfo.masterDataSet` rows validate as full master records, reusing the schema behind `master.search`.
109
+ - `regimeType` and `customerPayAt` are the only response fields left as plain strings: Booking.txt:11312 documents no value list for the first, and the second appears nowhere in the response table — only in the example, as `OUR_AGENCY`. There is nothing to validate against; an enum built from one sample would reject every other value.
110
+ - `Printable` values are rejoined from a spec table that hard-wraps identifiers mid-token. If a live response is ever rejected on that field, check the reconstruction against Booking.txt:11261-11289 first.
111
+
112
+ <a id="v4.0.1"></a>
113
+ ## [4.0.1] - 2026-08-06
114
+
115
+ ### Added
116
+
117
+ - Copy `CHANGELOG.md` into `dist/` on build (`tsdown` `copy`) and include `dist/CHANGELOG.md` in published `files`.
118
+
119
+ <a id="v4.0.0"></a>
120
+ ## [4.0.0] - 2026-08-06
121
+
122
+ ### Added
123
+
124
+ - `OpBodyKey` object enum (`MasterRecordDetail`) for RQ payload nest keys; typed on `AVES_OPS` / envelope.
125
+ - `AvesOp` object enum (+ `AvesOpSchema`) for `invokeOp` keys; domains use `AvesOp.create` instead of string literals.
126
+
127
+ ### Changed
128
+
129
+ - **Breaking:** Domain method names no longer repeat the namespace / AVES verb soup. `AVES_OPS` keys follow the same short names (with `searchBookings` / `searchPackages` where `search` would collide).
130
+
131
+ | Namespace | 3.x | 4.x |
132
+ | --------- | --- | --- |
133
+ | `master` | `upsertRecord` | `upsert` |
134
+ | `booking` | `createBooking` | `create` |
135
+ | `booking` | `modBookingServices` | `updateServices` |
136
+ | `booking` | `modBookingHeader` | `updateHeader` |
137
+ | `booking` | `cancelBooking` | `cancel` |
138
+ | `booking` | `setBookingStatus` | `setStatus` |
139
+ | `booking` | `setBookingServiceStatus` | `setServiceStatus` |
140
+ | `booking` | `insertFilePaymentList` | `addPayments` |
141
+ | `booking` | `searchBookingFiles` | `search` |
142
+ | `packages` | `searchPackages` | `search` |
143
+ | `packages` | `searchTopServices` | `searchServices` |
144
+ | `packages` | `getPackageDetail` | `get` |
145
+ | `packages` | `commitPackage` | `commit` |
146
+
147
+ `master.search` is unchanged. Endpoint URLs and XML roots are unchanged.
148
+
149
+ ### Migration (1.x / 3.x → 4.x)
150
+
151
+ Jump straight to 4.x for September apps: apply the 3.x facade + `master.search` flat-array notes, then rename methods per the table above (no compatibility aliases).
152
+
153
+ ```ts
154
+ // 3.x
155
+ await client.booking.createBooking(params);
156
+ await client.packages.searchPackages(params);
157
+ await client.master.upsertRecord(record);
158
+
159
+ // 4.x
160
+ await client.booking.create(params);
161
+ await client.packages.search(params);
162
+ await client.master.upsert(record);
163
+ ```
164
+
165
+ <a id="v3.1.1"></a>
166
+ ## [3.1.1] - 2026-08-06
167
+
168
+ ### Added
169
+
170
+ - Concise facade aliases for common I/O properties: `customerCode`, `bookingCode`, `services`, `passengers`, `packageCode`, `serviceCode`, `quantity`, `session`, and related fields.
171
+ - Schema-owned dual keys via `facadeObject` / `coalesceAliases` (same pattern as `coalesceCustomerRecordCode`).
172
+ - Simplified public type aliases including `BookingInput`, `Booking`, `MasterRecord`, `PackageInput`, and `Package`.
173
+ - `AVES_OPS` registry + `invokeOp(op, params)` with external `OpParams` / `OpResult` typings.
174
+ - Full facade alias property map in README (outbound `publicKeyAliases` + inbound scoped maps).
175
+ - 2.x → 3.x migration notes for `master.search` (flat array success payload).
176
+
177
+ ### Changed
178
+
179
+ - Facade names are accepted on Valibot input schemas and coalesced to AVES camelCase before wire encoding. Success payloads also expose concise compatibility aliases.
180
+ - Internal transport split: `HttpClient`, `buildOpEnvelope`, `readAvesResponse`, `createRqHeader`; `toAvesError` lives in `error.ts`. Public `invokeOp` API unchanged.
181
+ - Hot-path micro-opts: cached endpoint URLs, shared XML POST headers, frozen cached `RqHeader`, single `AVES_OPS` lookup per `invokeOp`.
182
+ - Cap HTTP error body reads via `readTextCapped` (drain stream, keep ≤ `MAX_ERROR_BODY`).
183
+ - WeakMap cache for `itemShape` / `encodeShapeFor` on static WireShape refs.
184
+ - `toWireBody` single shape-driven walk (list wrap + pax normalize + wire keys).
185
+ - Zero-copy `withPublicAliases` via hardened lazy Proxy (WeakMap identity, proto-pollution blocked).
186
+ - `createResponseSchema` camelizes Valibot output **in place** (`pascalToCamelKeysInPlace`) — no second deep-copy.
187
+ - Performance harness: `yarn test:bench` (Vitest bench) and `AVES_PERF=1 yarn test:perf` (relative hot-path asserts).
188
+
189
+ <a id="v3.0.0"></a>
190
+ ## [3.0.0] - 2026-08-06
191
+
192
+ ### Changed
193
+
194
+ - **Breaking:** `master.search` success payload is now `MasterRecordDetailResponse[]` — always a flat array (`[]`, one element, or many). No `rsStatus` wrapper on success (non-OK AVES status remains `result.error`). Replaces the prior `{ rsStatus, masterRecordList }` shape.
195
+
196
+ ### Migration (2.x → 3.x)
197
+
198
+ Only `master.search` success shape changed. Other domain methods and error/`Result` contracts are unchanged from 2.x.
199
+
200
+ | Change | Symptom on upgrade | Fix |
201
+ | ------ | ------------------ | --- |
202
+ | `master.search` success is a flat array | `result.data.masterRecordList` / `result.data.rsStatus` are `undefined`; types fail | Use `result.data` as `MasterRecordDetailResponse[]` (e.g. `const [record] = result.data` or `result.data.map(...)`) |
203
+ | Looking for `rsStatus` on success | Always missing when `result.success` | Keep using `result.error` for non-OK AVES / HTTP failures (`error.kind`, `error.status`, `error.code`) |
204
+ | Empty search | May have expected a missing list or wrapper | Success with no hits is `result.data === []` |
205
+
206
+ **Before (2.x):**
207
+
208
+ ```ts
209
+ const result = await client.master.search({
210
+ searchType: "CODE",
211
+ recordCode: "508558",
212
+ });
213
+ if (result.success) {
214
+ const records = result.data.masterRecordList ?? [];
215
+ console.log(result.data.rsStatus.status, records[0]?.recordCode);
216
+ }
217
+ ```
218
+
219
+ **After (3.x):**
220
+
221
+ ```ts
222
+ const result = await client.master.search({
223
+ searchType: "CODE",
224
+ recordCode: "508558",
225
+ });
226
+ if (result.success) {
227
+ const [record] = result.data; // MasterRecordDetailResponse[]
228
+ console.log(record?.recordCode);
229
+ } else {
230
+ console.error(result.error.kind, result.error.status, result.error.message);
231
+ }
232
+ ```
233
+
234
+ 3.1.x on top of 3.0 is additive (facade aliases / internal transport). No further breaking migration from 3.0 → 3.1.1.
235
+
236
+ <a id="v2.0.1"></a>
237
+ ## [2.0.1] - 2026-08-05
238
+
239
+ ### Changed
240
+
241
+ - Omit source maps from the published package; `files` now ships only
242
+ `dist/index.mjs` and `dist/index.d.mts`.
243
+
244
+ <a id="v2.0.0"></a>
245
+ ## [2.0.0] - 2026-08-05
246
+
247
+ ### Changed
248
+
249
+ - **Breaking:** flat operation aliases were removed; use namespaced domain clients only.
250
+ - **Breaking:** enum-typed fields now reject arbitrary strings at compile time.
251
+ - **Breaking:** `AvesError.status` retains AVES casing and `AvesError.code` is `number | undefined`.
252
+ - **Breaking:** master-record responses reflect the actual API payload, including server-only fields; `dynamicFields` is an array.
253
+ - Fixed AVES language codes (`01` Italian, `02` English), raw warning text preservation, and the `PaymentDetail` `@PaumentNote` wire spelling.
254
+
255
+ ### Migration
256
+
257
+ | Change | Symptom on upgrade | Fix |
258
+ | ------ | ------------------ | --- |
259
+ | Flat aliases removed | Runtime `TypeError` | Insert the domain namespace: `client.search` → `client.master.search` |
260
+ | Enum types narrowed | Compile errors for enum fields receiving `string` | Use exported enum objects or unions |
261
+ | `AvesError.status` casing | `err.status === "error"` no longer matches | Compare with `RsStatusValue` (`"OK"`, `"ERROR"`, `"WARNING"`, `"TIMEOUT"`) |
262
+ | `AvesError.code` | Absent codes are `undefined`, not `0` | Check for `undefined` |
263
+ | `MasterRecordDetailResponse` corrected | Type gains server-only fields | Remove local re-declarations |
264
+ | `dynamicFields` is an array | Single-object assignment fails | Wrap the field in an array |
265
+
266
+ ---
267
+
268
+ <a id="v1.9.0"></a>
269
+ ## [1.9.0] - 2026-08-03
270
+
271
+ ### Changed
272
+
273
+ - **Breaking:** `upsertRecord` spreads `masterRecordDetail` into `data` — `result.data.recordCode`
274
+ - **Breaking:** booking create/mod/status spreads `bookingFileDetail` into `data` — `result.data.bookingFileCode`
275
+ - **Breaking:** `getPackageDetail` spreads `packageDetail` into `data` — `result.data.pCode`
276
+ - **Breaking:** response `*List` fields are flat Detail arrays (no inner `*Detail` wrapper) — e.g. `data.packageList?.[0]`, `data.masterRecordList`, `data.bookingFileList`, `data.bookedServiceList`
277
+ - **Breaking:** nested booking/catalog lists unwrapped the same way (`passengerList`, `serviceList`, `paxPriceList`, …)
278
+ - Input aliases: `customerRecordCode` ↔ `customerDetail`; `bookingFileStatus` / `fileStatus` as string or `{ value }`; `paxAssociated: string[]`; mod `selectedPackageList` ↔ `selectedPackageDetail`
279
+
280
+ ### Added
281
+
282
+ - Response helpers: `listDetailApiSchema`, `flattenResponseDetail`, `createFlattenedResponseSchema`, `createListResponseSchema`
283
+ - Request helpers: `createApiSchema`, `valueFieldSchema`, `coalesceCustomerRecordCode`, `coalesceListHead`, `coalesceWireAliases`
284
+ - Shared primitives: `LanguageCodeSchema`, `StringishSchema`, `DateRangeSchema`, `StatusOnlyResponseSchema`, `createWireSchemaPair`
285
+ - `yarn typecheck` script (`tsc --noEmit`)
286
+
287
+ ---
288
+
289
+ <a id="v1.8.0"></a>
290
+ ## [1.8.0] - 2026-08-03
291
+
292
+ ### Added
293
+
294
+ - Exportable shared object enums (`PaxQtyCriteria`, `AvesSearchType`, `PaymentType`, `InsertCriteria`, booking/master statuses, etc.) and matching `*Schema` picklists
295
+
296
+ ### Changed
297
+
298
+ - **Breaking:** `searchPackages` / `searchTopServices` payload is flat (no `baseSearch` nest)
299
+ - Defaults: `avesSearchType` (`PACKAGE` / `SERVICE` by method), `paxQty` ← `passengerList.length`, `paxQtyCriteria` ← `GREATER_OR_EQUAL`
300
+ - `languageCode` optional when set on `AvesClient` options
301
+ - Schemas use shared object enums instead of inline string unions
302
+
303
+ ---
304
+
305
+ <a id="v1.7.0"></a>
306
+ ## [1.7.0] - 2026-08-03
307
+
308
+ ### Added
309
+
310
+ - Package / Program catalog APIs: `searchPackages`, `searchTopServices`, `getPackageDetail`, `commitPackage`
311
+ - `searchBookingFiles` (`FILE_CODE` | `PAX_NAME` | `PACKAGE_CODE` | `OTHER`)
312
+ - Domain clients with DI: `AvesTransport`, `MasterRecordsClient`, `BookingClient`, `PackageCatalogClient`, `AvesClientDeps`
313
+ - Per-request `WireShape` model (`src/utils/wire-shapes.ts`)
314
+ - Flat method aliases auto-bound from domain prototypes (`client/flat-aliases.ts`)
315
+
316
+ ### Changed
317
+
318
+ - `AvesClient` is a thin facade; prefer `client.booking.*` / `client.packages.*` / `client.master.*`
319
+ - Single outbound wire path: `createApiSchema` / `toWireBody` / `invokeOp` (optional `bodyKey`)
320
+ - XML helpers moved to `src/xml/`
321
+ - Master search/upsert routed through `invokeOp`
322
+
323
+ ### Fixed
324
+
325
+ - InsertFilePaymentList root `paymentUser` emitted as `@PaymentUser` (not a child element)
326
+
327
+ ### Removed
328
+
329
+ - Global `ATTRIBUTE_FIELDS` registry
330
+ - Versioned docs under `docs/` from git (`docs/` gitignored)
331
+
332
+ ---
333
+
334
+ <a id="v1.6.0"></a>
335
+ ## [1.6.0] - 2026-07-29
336
+
337
+ ### Changed
338
+
339
+ - **Breaking:** booking `*List` SDK inputs are flat `Detail[]`; SDK wraps to AVES List/Detail XML
340
+ - Shared `PaymentTypeSchema` across booking ops
341
+ - README refreshed for constructor, `Result` / `AvesError`, and flat list examples
342
+ - Documented additional package managers in README
343
+
344
+ ---
345
+
346
+ <a id="v1.5.1"></a>
347
+ ## [1.5.1] - 2026-07-29
348
+
349
+ ### Changed
350
+
351
+ - Added `fast-xml-builder` dependency
352
+ - Dependency / `tsdown` config maintenance
353
+
354
+ ---
355
+
356
+ <a id="v1.5.0"></a>
357
+ ## [1.5.0] - 2026-07-29
358
+
359
+ ### Added
360
+
361
+ - `insertFilePaymentList` (InsertFilePaymentList) for payment registration
362
+ - Tighter `invokeOp` schema inference
363
+ - Booking ops documentation updates
364
+
365
+ ---
366
+
367
+ <a id="v1.4.0"></a>
368
+ ## [1.4.0] - 2026-07-29
369
+
370
+ ### Added
371
+
372
+ - Booking ops: ModBookingFileServices, ModBookingFileHeader, CancelBookingFile, SetStatus / SetStatusService
373
+ - Shared transforms and typed BOOKEDFILE responses
374
+ - Unit coverage for booking ops
375
+
376
+ ### Changed
377
+
378
+ - Dependency updates
379
+
380
+ ---
381
+
382
+ <a id="v1.3.4"></a>
383
+ ## [1.3.4] - 2026-03-09
384
+
385
+ ### Added
386
+
387
+ - Create-booking related input schemas: financial deadlines, payments, selected packages/services, notes, passengers
388
+
389
+ ### Fixed
390
+
391
+ - Union formatting in `SelectedServiceListInputSchema`
392
+
393
+ ### Changed
394
+
395
+ - Error handling via `isOk`
396
+ - Schema / quote standardization across client and types
397
+
398
+ ---
399
+
400
+ <a id="v1.3.3"></a>
401
+ ## [1.3.3] - 2026-02-26
402
+
403
+ ### Fixed
404
+
405
+ - `package.json` packaging fix
406
+
407
+ ---
408
+
409
+ <a id="v1.3.2"></a>
410
+ ## [1.3.2] - 2026-02-10
411
+
412
+ ### Added
413
+
414
+ - `createBooking` (CreateBookingFile) with tests
415
+ - Migrated bundler from `tsup` to `tsdown`
416
+
417
+ ### Changed
418
+
419
+ - Package configuration updates
420
+
421
+ ---
422
+
423
+ <a id="v1.3.1"></a>
424
+ ## [1.3.1] - 2026-02-01
425
+
426
+ ### Changed
427
+
428
+ - Error-handling path formatting simplified
429
+ - String-quote standardization
430
+
431
+ ---
432
+
433
+ <a id="v1.3.0"></a>
434
+ ## [1.3.0] - 2026-02-01
435
+
436
+ ### Added
437
+
438
+ - Biome linting
439
+ - Undici-based mock improvements in tests
440
+ - Additional master-record properties and attribute-schema refactor
441
+ - Broader test coverage
442
+
443
+ ### Changed
444
+
445
+ - Consolidated XML root element definitions and utilities
446
+
447
+ ---
448
+
449
+ <a id="v1.2.16"></a>
450
+ ## [1.2.16] - 2026-01-27
451
+
452
+ ### Changed
453
+
454
+ - Removed unnecessary `as any` casts
455
+
456
+ ---
457
+
458
+ <a id="v1.2.15"></a>
459
+ ## [1.2.15] - 2026-01-27
460
+
461
+ ### Fixed
462
+
463
+ - XML / validation follow-up fixes
464
+
465
+ ---
466
+
467
+ <a id="v1.2.14"></a>
468
+ ## [1.2.14] - 2026-01-27
469
+
470
+ ### Changed
471
+
472
+ - XML ↔ JSON conversion and validation schema improvements
473
+
474
+ ---
475
+
476
+ <a id="v1.2.13"></a>
477
+ ## [1.2.13] - 2026-01-27
478
+
479
+ ### Added
480
+
481
+ - Request timeout handling with clear timeout vs other errors
482
+ - `isAbortError` utility
483
+
484
+ ### Changed
485
+
486
+ - `AvesClientOptions` moved to `types.ts`
487
+ - Request method uses Valibot `BaseSchema` more consistently
488
+ - Upsert response schema and error detail improvements
489
+ - `recordCode` length validation tests
490
+
491
+ ---
492
+
493
+ <a id="v1.2.12"></a>
494
+ ## [1.2.12] - 2026-01-26
495
+
496
+ ### Added
497
+
498
+ - Export `AvesClientOptions` for external usage
499
+ - Mapped profiling record support
500
+
501
+ ### Changed
502
+
503
+ - Restructured `AvesError` handling and client initialization
504
+ - Optional `insertCriteria` on upsert flow
505
+
506
+ ### Fixed
507
+
508
+ - Misc client fixes
509
+
510
+ ---
511
+
512
+ <a id="v1.2.11"></a>
513
+ ## [1.2.11] - 2026-01-21
514
+
515
+ ### Fixed
516
+
517
+ - Error code handling uses numeric values instead of strings
518
+
519
+ ---
520
+
521
+ <a id="v1.0.3"></a>
522
+ ## [1.0.3] - 2025-10-04
523
+
524
+ Early tagged releases (`v1.0.0` … `v1.0.3`) from the initial NestJS-oriented AVES SDK work. Detailed commit notes for those tags are limited in the current branch history.
525
+
526
+ ### Added
527
+
528
+ - Initial AVES SDK implementation with XML/REST interfaces (2025-10-03)
529
+
530
+ ---
531
+
532
+ ## Links
533
+
534
+ - [npm](https://www.npmjs.com/package/aves-sdk)
535
+ - [GitHub](https://github.com/simoneguglielmi/aves-sdk)
536
+ - Tags: [v1.0.0](https://github.com/simoneguglielmi/aves-sdk/releases/tag/v1.0.0) … [v1.0.3](https://github.com/simoneguglielmi/aves-sdk/releases/tag/v1.0.3)
537
+
538
+ > Git tags after `v1.0.3` were not present when this file was generated; version sections follow `package.json` bumps and commit messages.