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.
- package/CHANGELOG.md +136 -1
- package/README.md +169 -51
- package/dist/CHANGELOG.md +538 -0
- package/dist/index.d.mts +7122 -20872
- package/dist/index.mjs +1 -1
- package/package.json +5 -4
|
@@ -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.
|