@gojinko/api-client 2.24.0 → 2.25.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 +35 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/money.d.ts +53 -0
- package/dist/money.d.ts.map +1 -0
- package/dist/money.js +149 -0
- package/dist/money.js.map +1 -0
- package/dist/types/devplatform.d.ts +24 -5
- package/dist/types/devplatform.d.ts.map +1 -1
- package/dist/types/devplatform.js +6 -5
- package/dist/types/devplatform.js.map +1 -1
- package/dist/types/generated.d.ts +1004 -783
- package/dist/types/generated.d.ts.map +1 -1
- package/package.json +1 -1
- package/public-api.yaml +936 -1490
package/README.md
CHANGED
|
@@ -323,6 +323,41 @@ import type {
|
|
|
323
323
|
The generated `paths` and `components` from the OpenAPI spec are also exported
|
|
324
324
|
for advanced use.
|
|
325
325
|
|
|
326
|
+
## Reading money
|
|
327
|
+
|
|
328
|
+
Money objects come in two shapes that share field names, and `decimal_places`
|
|
329
|
+
is what tells them apart ([docs.gojinko.com/concepts/money](https://docs.gojinko.com/concepts/money)).
|
|
330
|
+
`readMoney` applies that rule so you don't divide by 100 on the wrong shape:
|
|
331
|
+
|
|
332
|
+
```typescript
|
|
333
|
+
import { readMoney, tryReadMoney, MoneyShapeError } from '@gojinko/api-client';
|
|
334
|
+
|
|
335
|
+
const { itineraries } = await client.flightCalendar({
|
|
336
|
+
origins: ['CDG'],
|
|
337
|
+
destinations: ['JFK'],
|
|
338
|
+
departure_date_ranges: [{ start: '2026-10-01', end: '2026-10-31' }],
|
|
339
|
+
trip_type: 'oneway',
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
const total = readMoney(itineraries[0].total);
|
|
343
|
+
// { currency: 'USD', scale: 'minor', decimalPlaces: 2, minor: 33000,
|
|
344
|
+
// amount: 330, text: '330.00', display: 'USD 330.00' }
|
|
345
|
+
|
|
346
|
+
console.log(total.display ?? `${total.currency} ${total.text}`); // "USD 330.00"
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
- **`decimal_places` present** → the figure is an integer in minor units:
|
|
350
|
+
`amount` is the figure / 10^`decimal_places`.
|
|
351
|
+
- **`decimal_places` absent** → an `amount` is already major units. A bare
|
|
352
|
+
`value` is read at the currency's ISO 4217 digits (JPY 0, KWD 3, most others
|
|
353
|
+
2), never an assumed 2.
|
|
354
|
+
- **`amount` and `value` both present** → the non-zero one.
|
|
355
|
+
- `text` is exact decimal text built with integer arithmetic, not float
|
|
356
|
+
rounding. `display` is the server's own string, when the response carries one.
|
|
357
|
+
- An unexpected shape (no currency, a fractional minor figure, two figures that
|
|
358
|
+
disagree, …) throws `MoneyShapeError`. `tryReadMoney` returns `undefined`
|
|
359
|
+
instead.
|
|
360
|
+
|
|
326
361
|
## Raw Client
|
|
327
362
|
|
|
328
363
|
The underlying openapi-fetch client is still accessible and is typed against the
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,8 @@ export { type JinkoTools } from './tools.js';
|
|
|
3
3
|
export { resolveAuth, resolveBaseUrl, resolveEnvironment, readConfigFile, writeConfigFile, writeEnvAuth, setEnvironment, clearAuthConfig, ENV_BASE_URLS, CONFIG_DIR, CONFIG_FILE, DEFAULT_ENVIRONMENT, type AuthMethod, type Environment, type ResolvedAuth, type OAuthConfig, } from './auth.js';
|
|
4
4
|
export { loadOrCreateCliSession, clearCliSession, extractUserIdFromJwt, getSessionFilePath, SESSION_TTL_MS } from './session.js';
|
|
5
5
|
export { ApiError, AuthError, ValidationError, type ApiErrorDetail, type ApiErrorDetails, } from './errors.js';
|
|
6
|
+
export { readMoney, tryReadMoney, MoneyShapeError, type MoneyReading } from './money.js';
|
|
6
7
|
export { requestDeviceAuthorization, pollForToken, refreshAccessToken, isTokenExpired, OAuthError, OAuthRefreshError, resolveExpiresAt, type OAuthTokens, type DeviceAuthorization, } from './oauth.js';
|
|
7
8
|
export type { paths, components } from './types/generated.js';
|
|
8
|
-
export type { Money, Amount, DateRange, Itinerary, FlightDiscoveryRequest, FlightFindRequest, FlightCalendarResponse, FindDestinationRequest, FlightDestinationSearchRequest, DestinationSuggestion, FindDestinationResponse, FlightSearchRequest, FlightSearchResponse, FlightOffer, Fare, FlightLeg, TimeRange, UnappliedFilter, PriceMonitoringRequest, PriceMonitoringResponse, HotelOccupancy, GroundSearchRequest, GroundSearchResponse, GroundConnection, GroundFare, GroundStation, GroundCarrier, GroundAmount, HotelSearchRequest, HotelSearchResponse, HotelDetailsRequest, HotelDetailsResponse, Traveler, TripRequest, TripResponse, PriceChange, BookRequest, BookResponse, CheckoutRequest, CheckoutResponse, GetTripResponse, TripStatusResponse, TripAncillariesResponse, AncillaryOffer, AncillaryRequest, AncillaryResponse, SelectAncillariesRequest, BookingGetRequest, BookingGetResponse, BookingLookupRequest, BookingLookupResponse, RefundCheckRequest, RefundCheckResponse, RefundCommitRequest, RefundCommitResponse, RefundStatusRequest, RefundStatusResponse, ExchangeShopRequest, ExchangeShopResponse, ExchangePriceRequest, ExchangePriceResponse, ExchangeCommitRequest, ExchangeCommitResponse, ExchangeStatusRequest, ExchangeStatusResponse, HotelCancelBookingRequest, HotelCancelBookingResponse, DemandQuery, Level, TravelerType, TripType, DestinationRow, MarketRow, AudienceRow, DestinationResponse, MarketResponse, AudienceResponse, DemandTrendQuery, Granularity, TrendPoint, SeriesSummary, TrendSeries, TrendResponse, } from './types/devplatform.js';
|
|
9
|
+
export type { Money, Amount, DateRange, Itinerary, FlightDiscoveryRequest, FlightFindRequest, FlightCalendarResponse, FindDestinationRequest, FlightDestinationSearchRequest, DestinationSuggestion, FindDestinationResponse, FlightSearchRequest, FlightSearchResponse, FlightOffer, Fare, FlightLeg, TimeRange, UnappliedFilter, PriceMonitoringRequest, PriceMonitoringResponse, HotelOccupancy, GroundSearchRequest, GroundSearchResponse, GroundConnection, GroundFare, GroundStation, GroundCarrier, GroundAmount, HotelSearchRequest, HotelSearchResponse, HotelDetailsRequest, HotelDetailsResponse, Traveler, TripRequest, TripResponse, PriceChange, BookRequest, BookResponse, CheckoutRequest, CheckoutResponse, GetTripResponse, TripStatusResponse, TripAncillariesResponse, AncillaryOffer, AncillaryRequest, AncillaryResponse, SelectAncillariesRequest, BookingGetRequest, BookingGetResponse, BookingCalendar, BookingCalendarFile, BookingLookupRequest, BookingLookupResponse, RefundCheckRequest, RefundCheckResponse, RefundCommitRequest, RefundCommitResponse, RefundStatusRequest, RefundStatusResponse, ExchangeShopRequest, ExchangeShopResponse, ExchangePriceRequest, ExchangePriceResponse, ExchangeCommitRequest, ExchangeCommitResponse, ExchangeStatusRequest, ExchangeStatusResponse, HotelCancelBookingRequest, HotelCancelBookingResponse, DemandQuery, Level, TravelerType, TripType, DestinationRow, MarketRow, AudienceRow, DestinationResponse, MarketResponse, AudienceResponse, DemandTrendQuery, Granularity, TrendPoint, SeriesSummary, TrendSeries, TrendResponse, } from './types/devplatform.js';
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3G,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjI,OAAO,EACL,QAAQ,EACR,SAAS,EACT,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAEV,KAAK,EACL,MAAM,EACN,SAAS,EACT,SAAS,EAET,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,qBAAqB,EACrB,uBAAuB,EAEvB,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,IAAI,EACJ,SAAS,EACT,SAAS,EACT,eAAe,EAEf,sBAAsB,EACtB,uBAAuB,EAEvB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EAEpB,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EAExB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAE1B,WAAW,EACX,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAEhB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACX,aAAa,GACd,MAAM,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3G,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EACL,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,UAAU,EACV,WAAW,EACX,mBAAmB,EACnB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjI,OAAO,EACL,QAAQ,EACR,SAAS,EACT,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,KAAK,WAAW,EAChB,KAAK,mBAAmB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC9D,YAAY,EAEV,KAAK,EACL,MAAM,EACN,SAAS,EACT,SAAS,EAET,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,qBAAqB,EACrB,uBAAuB,EAEvB,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,IAAI,EACJ,SAAS,EACT,SAAS,EACT,eAAe,EAEf,sBAAsB,EACtB,uBAAuB,EAEvB,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EAEpB,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,uBAAuB,EACvB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EAExB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAE1B,WAAW,EACX,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAEhB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,aAAa,EACb,WAAW,EACX,aAAa,GACd,MAAM,wBAAwB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,5 +2,6 @@ export { createJinkoClient } from './client.js';
|
|
|
2
2
|
export { resolveAuth, resolveBaseUrl, resolveEnvironment, readConfigFile, writeConfigFile, writeEnvAuth, setEnvironment, clearAuthConfig, ENV_BASE_URLS, CONFIG_DIR, CONFIG_FILE, DEFAULT_ENVIRONMENT, } from './auth.js';
|
|
3
3
|
export { loadOrCreateCliSession, clearCliSession, extractUserIdFromJwt, getSessionFilePath, SESSION_TTL_MS } from './session.js';
|
|
4
4
|
export { ApiError, AuthError, ValidationError, } from './errors.js';
|
|
5
|
+
export { readMoney, tryReadMoney, MoneyShapeError } from './money.js';
|
|
5
6
|
export { requestDeviceAuthorization, pollForToken, refreshAccessToken, isTokenExpired, OAuthError, OAuthRefreshError, resolveExpiresAt, } from './oauth.js';
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA6D,MAAM,aAAa,CAAC;AAE3G,OAAO,EACL,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,UAAU,EACV,WAAW,EACX,mBAAmB,GAKpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjI,OAAO,EACL,QAAQ,EACR,SAAS,EACT,eAAe,GAGhB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GAGjB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAA6D,MAAM,aAAa,CAAC;AAE3G,OAAO,EACL,WAAW,EACX,cAAc,EACd,kBAAkB,EAClB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,aAAa,EACb,UAAU,EACV,WAAW,EACX,mBAAmB,GAKpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjI,OAAO,EACL,QAAQ,EACR,SAAS,EACT,eAAe,GAGhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAqB,MAAM,YAAY,CAAC;AACzF,OAAO,EACL,0BAA0B,EAC1B,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,gBAAgB,GAGjB,MAAM,YAAY,CAAC"}
|
package/dist/money.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads a money object off a response body, following the published rule
|
|
3
|
+
* (https://docs.gojinko.com/concepts/money).
|
|
4
|
+
*
|
|
5
|
+
* The public surface carries money in two shapes that share field names:
|
|
6
|
+
*
|
|
7
|
+
* - WITH `decimal_places` → the figure (`value` or `amount`) is an INTEGER in
|
|
8
|
+
* minor units: 15977 at 2 places is 159.77.
|
|
9
|
+
* - WITHOUT `decimal_places` → an `amount` is already MAJOR units. A `value`
|
|
10
|
+
* without a scale should not occur; it is read defensively as minor units at
|
|
11
|
+
* the currency's ISO 4217 digits — never an assumed 2, which renders a
|
|
12
|
+
* zero-decimal currency 100x low.
|
|
13
|
+
*
|
|
14
|
+
* When both figures are present the non-zero one wins, which is how the BFF
|
|
15
|
+
* picks between them. Anything else unexpected throws {@link MoneyShapeError}
|
|
16
|
+
* rather than producing a plausible wrong price.
|
|
17
|
+
*/
|
|
18
|
+
export declare class MoneyShapeError extends Error {
|
|
19
|
+
/** The input that could not be read, as it was passed in. */
|
|
20
|
+
readonly raw: unknown;
|
|
21
|
+
constructor(message: string, raw: unknown);
|
|
22
|
+
}
|
|
23
|
+
export interface MoneyReading {
|
|
24
|
+
readonly currency: string;
|
|
25
|
+
/** Whether the figure that was sent was minor units or major units. */
|
|
26
|
+
readonly scale: 'minor' | 'major';
|
|
27
|
+
/**
|
|
28
|
+
* The scale that was sent, or the currency's ISO 4217 digits when none was:
|
|
29
|
+
* for a bare `value`, and for formatting a major `amount`.
|
|
30
|
+
*/
|
|
31
|
+
readonly decimalPlaces: number;
|
|
32
|
+
/** The figure as sent, when it was minor units. */
|
|
33
|
+
readonly minor?: number;
|
|
34
|
+
/** Major units. */
|
|
35
|
+
readonly amount: number;
|
|
36
|
+
/**
|
|
37
|
+
* The major amount as exact decimal text at `decimalPlaces`, with a leading
|
|
38
|
+
* "-" when negative: "159.77", "3200", "1.234". Built by integer arithmetic,
|
|
39
|
+
* never float rounding.
|
|
40
|
+
*/
|
|
41
|
+
readonly text: string;
|
|
42
|
+
/** The server-formatted string (e.g. "USD 159.77"), when the object carried one. */
|
|
43
|
+
readonly display?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Reads one money object. Throws {@link MoneyShapeError} on a non-object, a
|
|
47
|
+
* missing or empty `currency`, no finite figure, a `decimal_places` outside
|
|
48
|
+
* 0..18, a non-integer minor figure, or two non-zero figures that disagree.
|
|
49
|
+
*/
|
|
50
|
+
export declare function readMoney(raw: unknown): MoneyReading;
|
|
51
|
+
/** {@link readMoney}, returning `undefined` instead of throwing on an unexpected shape. */
|
|
52
|
+
export declare function tryReadMoney(raw: unknown): MoneyReading | undefined;
|
|
53
|
+
//# sourceMappingURL=money.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"money.d.ts","sourceRoot":"","sources":["../src/money.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,6DAA6D;IAC7D,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;CAK1C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,mDAAmD;IACnD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,mBAAmB;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAiFD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CAgCpD;AAED,2FAA2F;AAC3F,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,GAAG,SAAS,CAOnE"}
|
package/dist/money.js
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reads a money object off a response body, following the published rule
|
|
3
|
+
* (https://docs.gojinko.com/concepts/money).
|
|
4
|
+
*
|
|
5
|
+
* The public surface carries money in two shapes that share field names:
|
|
6
|
+
*
|
|
7
|
+
* - WITH `decimal_places` → the figure (`value` or `amount`) is an INTEGER in
|
|
8
|
+
* minor units: 15977 at 2 places is 159.77.
|
|
9
|
+
* - WITHOUT `decimal_places` → an `amount` is already MAJOR units. A `value`
|
|
10
|
+
* without a scale should not occur; it is read defensively as minor units at
|
|
11
|
+
* the currency's ISO 4217 digits — never an assumed 2, which renders a
|
|
12
|
+
* zero-decimal currency 100x low.
|
|
13
|
+
*
|
|
14
|
+
* When both figures are present the non-zero one wins, which is how the BFF
|
|
15
|
+
* picks between them. Anything else unexpected throws {@link MoneyShapeError}
|
|
16
|
+
* rather than producing a plausible wrong price.
|
|
17
|
+
*/
|
|
18
|
+
export class MoneyShapeError extends Error {
|
|
19
|
+
/** The input that could not be read, as it was passed in. */
|
|
20
|
+
raw;
|
|
21
|
+
constructor(message, raw) {
|
|
22
|
+
super(message);
|
|
23
|
+
this.name = 'MoneyShapeError';
|
|
24
|
+
this.raw = raw;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/** ISO 4217 minor-unit digits that differ from 2, per the published rule. */
|
|
28
|
+
const ISO_DIGITS = {
|
|
29
|
+
JPY: 0,
|
|
30
|
+
KRW: 0,
|
|
31
|
+
VND: 0,
|
|
32
|
+
CLP: 0,
|
|
33
|
+
ISK: 0,
|
|
34
|
+
BHD: 3,
|
|
35
|
+
JOD: 3,
|
|
36
|
+
KWD: 3,
|
|
37
|
+
OMR: 3,
|
|
38
|
+
TND: 3,
|
|
39
|
+
};
|
|
40
|
+
const MAX_DECIMAL_PLACES = 18;
|
|
41
|
+
function isoDigits(currency) {
|
|
42
|
+
return ISO_DIGITS[currency.toUpperCase()] ?? 2;
|
|
43
|
+
}
|
|
44
|
+
/** A signed integer count of minor units as decimal text at `digits` places. */
|
|
45
|
+
function minorText(minor, digits) {
|
|
46
|
+
const negative = minor < 0n;
|
|
47
|
+
const units = (negative ? -minor : minor).toString().padStart(digits + 1, '0');
|
|
48
|
+
const sign = negative ? '-' : '';
|
|
49
|
+
if (digits === 0)
|
|
50
|
+
return `${sign}${units}`;
|
|
51
|
+
return `${sign}${units.slice(0, -digits)}.${units.slice(-digits)}`;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* A major amount as decimal text at `digits` places, rounded half away from
|
|
55
|
+
* zero on the decimal the number was written as. `toFixed` rounds the binary
|
|
56
|
+
* value instead, so 1.005 — stored as 1.00499… — would print "1.00".
|
|
57
|
+
*/
|
|
58
|
+
function majorText(amount, digits) {
|
|
59
|
+
const match = /^(\d+)(?:\.(\d+))?$/.exec(String(Math.abs(amount)));
|
|
60
|
+
// Exponent notation only appears beyond 1e21 or below 1e-6, outside any price.
|
|
61
|
+
if (!match)
|
|
62
|
+
return amount.toFixed(digits);
|
|
63
|
+
const [, whole, fraction = ''] = match;
|
|
64
|
+
let minor = BigInt(whole + fraction.padEnd(digits, '0').slice(0, digits));
|
|
65
|
+
if ((fraction[digits] ?? '0') >= '5')
|
|
66
|
+
minor += 1n;
|
|
67
|
+
return minorText(amount < 0 ? -minor : minor, digits);
|
|
68
|
+
}
|
|
69
|
+
/** A figure field: absent (undefined or null), or a finite number. */
|
|
70
|
+
function readFigure(money, field, raw) {
|
|
71
|
+
const figure = money[field];
|
|
72
|
+
if (figure === undefined || figure === null)
|
|
73
|
+
return undefined;
|
|
74
|
+
if (typeof figure !== 'number' || !Number.isFinite(figure)) {
|
|
75
|
+
throw new MoneyShapeError(`money \`${field}\` is not a finite number: ${String(figure)}`, raw);
|
|
76
|
+
}
|
|
77
|
+
return figure;
|
|
78
|
+
}
|
|
79
|
+
/** The figure to read and the field it came from, as the BFF picks it. */
|
|
80
|
+
function pickFigure(money, raw) {
|
|
81
|
+
const amount = readFigure(money, 'amount', raw);
|
|
82
|
+
const value = readFigure(money, 'value', raw);
|
|
83
|
+
if (amount === undefined && value === undefined) {
|
|
84
|
+
throw new MoneyShapeError('money has neither `amount` nor `value`', raw);
|
|
85
|
+
}
|
|
86
|
+
if (amount === undefined)
|
|
87
|
+
return { figure: value, field: 'value' };
|
|
88
|
+
if (value === undefined || value === 0)
|
|
89
|
+
return { figure: amount, field: 'amount' };
|
|
90
|
+
if (amount === 0 || amount === value)
|
|
91
|
+
return { figure: value, field: 'value' };
|
|
92
|
+
throw new MoneyShapeError(`money \`amount\` (${amount}) and \`value\` (${value}) disagree`, raw);
|
|
93
|
+
}
|
|
94
|
+
function readDecimalPlaces(money, raw) {
|
|
95
|
+
const places = money.decimal_places;
|
|
96
|
+
if (places === undefined || places === null)
|
|
97
|
+
return undefined;
|
|
98
|
+
if (typeof places !== 'number' || !Number.isInteger(places) || places < 0 || places > MAX_DECIMAL_PLACES) {
|
|
99
|
+
throw new MoneyShapeError(`money \`decimal_places\` must be an integer from 0 to ${MAX_DECIMAL_PLACES}: ${JSON.stringify(places)}`, raw);
|
|
100
|
+
}
|
|
101
|
+
return places;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Reads one money object. Throws {@link MoneyShapeError} on a non-object, a
|
|
105
|
+
* missing or empty `currency`, no finite figure, a `decimal_places` outside
|
|
106
|
+
* 0..18, a non-integer minor figure, or two non-zero figures that disagree.
|
|
107
|
+
*/
|
|
108
|
+
export function readMoney(raw) {
|
|
109
|
+
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
110
|
+
throw new MoneyShapeError('money is not an object', raw);
|
|
111
|
+
}
|
|
112
|
+
const money = raw;
|
|
113
|
+
const { currency } = money;
|
|
114
|
+
if (typeof currency !== 'string' || currency === '') {
|
|
115
|
+
throw new MoneyShapeError('money has no `currency`', raw);
|
|
116
|
+
}
|
|
117
|
+
const { figure, field } = pickFigure(money, raw);
|
|
118
|
+
const sentPlaces = readDecimalPlaces(money, raw);
|
|
119
|
+
const display = typeof money.display === 'string' && money.display !== '' ? { display: money.display } : {};
|
|
120
|
+
if (sentPlaces === undefined && field === 'amount') {
|
|
121
|
+
const decimalPlaces = isoDigits(currency);
|
|
122
|
+
return { currency, scale: 'major', decimalPlaces, amount: figure, text: majorText(figure, decimalPlaces), ...display };
|
|
123
|
+
}
|
|
124
|
+
const decimalPlaces = sentPlaces ?? isoDigits(currency);
|
|
125
|
+
if (!Number.isSafeInteger(figure)) {
|
|
126
|
+
throw new MoneyShapeError(`money \`${field}\` is minor units and must be an integer: ${figure}`, raw);
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
currency,
|
|
130
|
+
scale: 'minor',
|
|
131
|
+
decimalPlaces,
|
|
132
|
+
minor: figure,
|
|
133
|
+
amount: figure / 10 ** decimalPlaces,
|
|
134
|
+
text: minorText(BigInt(figure), decimalPlaces),
|
|
135
|
+
...display,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/** {@link readMoney}, returning `undefined` instead of throwing on an unexpected shape. */
|
|
139
|
+
export function tryReadMoney(raw) {
|
|
140
|
+
try {
|
|
141
|
+
return readMoney(raw);
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (error instanceof MoneyShapeError)
|
|
145
|
+
return undefined;
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=money.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"money.js","sourceRoot":"","sources":["../src/money.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,11 +13,12 @@
|
|
|
13
13
|
* not the BFF's nested `filters.locations` / `passengers.adt` body
|
|
14
14
|
* - `checkout` returns `CheckoutResponse`, `getTrip` returns `GetTripResponse`, …
|
|
15
15
|
*
|
|
16
|
-
* To update a shape: edit the contract in `jinko-api` and
|
|
17
|
-
* `
|
|
18
|
-
* (
|
|
19
|
-
* `generated.ts`
|
|
20
|
-
*
|
|
16
|
+
* To update a shape: edit the contract in `jinko-api` and merge it, then run
|
|
17
|
+
* `pnpm sync:api-spec <jinko-api ref>` here. It vendors `public-api.yaml` at
|
|
18
|
+
* that commit (writing the `# synced from` header) and runs
|
|
19
|
+
* `pnpm generate:api-types`; CI fails when `generated.ts` and the vendored
|
|
20
|
+
* spec disagree. `generated.ts` is regenerated in full from the vendored spec —
|
|
21
|
+
* never edit it by hand, and never re-introduce BFF-internal field names. (The vendored
|
|
21
22
|
* spec was re-synced to contract 0.8.0 by JIN-2054, which ended the period
|
|
22
23
|
* where `generated.ts` was hand-maintained ahead of a stale 0.5.0 spec.)
|
|
23
24
|
*/
|
|
@@ -152,6 +153,24 @@ export type AncillaryResponse = Schemas['AncillaryResponse'];
|
|
|
152
153
|
export type SelectAncillariesRequest = AncillaryRequest;
|
|
153
154
|
export type BookingGetRequest = Schemas['GetBookingRequest'];
|
|
154
155
|
export type BookingGetResponse = Schemas['GetBookingResponse'];
|
|
156
|
+
/**
|
|
157
|
+
* The iCalendar files a booking is carried in (JIN-2176) — the same bytes the
|
|
158
|
+
* traveller's confirmation, cancellation and exchange emails attach.
|
|
159
|
+
*
|
|
160
|
+
* `booking.calendar` is ABSENT — not null, and never an empty `files` list —
|
|
161
|
+
* when the booking holds no flight and no hotel, and whenever the files could
|
|
162
|
+
* not be built. `files` is ordered cancellation first, then invitation, the
|
|
163
|
+
* order the emails attach them in.
|
|
164
|
+
*/
|
|
165
|
+
export type BookingCalendar = Schemas['BookingCalendar'];
|
|
166
|
+
/**
|
|
167
|
+
* One iCalendar file. `method` is the iTIP method (RFC 5546) it carries —
|
|
168
|
+
* `REQUEST` for the events the booking still holds, `CANCEL` for the ones it no
|
|
169
|
+
* longer does; one file is never both. Serve or attach it under `content_type`
|
|
170
|
+
* exactly: the `method` parameter is what makes a mail client act on the file
|
|
171
|
+
* rather than store it as a plain attachment.
|
|
172
|
+
*/
|
|
173
|
+
export type BookingCalendarFile = Schemas['BookingCalendarFile'];
|
|
155
174
|
/** @deprecated Renamed to {@link BookingGetRequest} by JIN-663. */
|
|
156
175
|
export type BookingLookupRequest = BookingGetRequest;
|
|
157
176
|
/** @deprecated Renamed to {@link BookingGetResponse} by JIN-663. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devplatform.d.ts","sourceRoot":"","sources":["../../src/types/devplatform.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"devplatform.d.ts","sourceRoot":"","sources":["../../src/types/devplatform.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,11 +13,12 @@
|
|
|
13
13
|
* not the BFF's nested `filters.locations` / `passengers.adt` body
|
|
14
14
|
* - `checkout` returns `CheckoutResponse`, `getTrip` returns `GetTripResponse`, …
|
|
15
15
|
*
|
|
16
|
-
* To update a shape: edit the contract in `jinko-api` and
|
|
17
|
-
* `
|
|
18
|
-
* (
|
|
19
|
-
* `generated.ts`
|
|
20
|
-
*
|
|
16
|
+
* To update a shape: edit the contract in `jinko-api` and merge it, then run
|
|
17
|
+
* `pnpm sync:api-spec <jinko-api ref>` here. It vendors `public-api.yaml` at
|
|
18
|
+
* that commit (writing the `# synced from` header) and runs
|
|
19
|
+
* `pnpm generate:api-types`; CI fails when `generated.ts` and the vendored
|
|
20
|
+
* spec disagree. `generated.ts` is regenerated in full from the vendored spec —
|
|
21
|
+
* never edit it by hand, and never re-introduce BFF-internal field names. (The vendored
|
|
21
22
|
* spec was re-synced to contract 0.8.0 by JIN-2054, which ended the period
|
|
22
23
|
* where `generated.ts` was hand-maintained ahead of a stale 0.5.0 spec.)
|
|
23
24
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devplatform.js","sourceRoot":"","sources":["../../src/types/devplatform.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"devplatform.js","sourceRoot":"","sources":["../../src/types/devplatform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
|