@curless/hotel-storefront 0.45.2 → 0.46.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,76 @@
1
+ import type { Room } from './types.js';
2
+ /** The bed a guest asks for: a large bed for two, or two beds. */
3
+ export type BedFilter = 'king' | 'twin';
4
+ /** The four ways a room can be narrowed, as the card's chips and `roomFilters` name them. */
5
+ export type RoomFilterKey = 'breakfast' | 'king' | 'twin' | 'freeCancellation';
6
+ /** In the order a chip row shows them. */
7
+ export declare const ROOM_FILTER_KEYS: readonly RoomFilterKey[];
8
+ /** What a call asked for - all of it must hold (AND). */
9
+ export type RoomTerms = {
10
+ bed?: BedFilter;
11
+ breakfast?: true;
12
+ freeCancellation?: true;
13
+ };
14
+ /** What is true of one room, for the card to draw and to filter by without re-deriving. */
15
+ export type RoomFacets = Record<RoomFilterKey, boolean>;
16
+ /** One chip a hotel's rooms offer, with how many rooms (rates) it keeps. */
17
+ export type RoomFilterOption = {
18
+ key: RoomFilterKey;
19
+ count: number;
20
+ };
21
+ /**
22
+ * Which beds a room has: from `bedTypes` where they say a king or a twin,
23
+ * otherwise from what `beds` says in words ("1 king", "1 king or 2 twins",
24
+ * "2 twins or 1 king", "1 queen", "1 king and 2 singles", 大床 / 双床,
25
+ * 「2张1.2米单人床」), and last from the room type's NAME where neither says a
26
+ * bed: Huazhu's test environment sends no `bedTypes` and no `beds`, but a type
27
+ * called 「豪华大床房」 is a king room (2026-10-23). The order is the order of trust.
28
+ */
29
+ export declare const bedKindsOf: (room: Pick<Room, "beds" | "bedTypes"> & Partial<Pick<Room, "name" | "names" | "roomType">>) => {
30
+ king: boolean;
31
+ twin: boolean;
32
+ };
33
+ /**
34
+ * Whether the room's rate includes breakfast. The meal, where a backend gives
35
+ * one, is what the rate includes (`MealPlan`); then its labels; then the plain
36
+ * flag. Room only is no.
37
+ */
38
+ export declare const breakfastOf: (room: Pick<Room, "breakfast" | "meal" | "labels">) => boolean;
39
+ /**
40
+ * Whether the rate can be cancelled for nothing NOW: refundable, with a free
41
+ * window that has not closed. Where the window has closed, `refundable` stays
42
+ * true and `freeCancellationUntil` is gone - "refundable" alone is a rate that
43
+ * once had a free window (the demo's own search and Huazhu's read it the same
44
+ * way). A room by the hour has no cancellation terms to speak of.
45
+ */
46
+ export declare const freeCancellationOf: (room: Pick<Room, "refundable" | "freeCancellationUntil" | "hourly">) => boolean;
47
+ /** Everything a card needs to know about one room to filter it. */
48
+ export declare const facetsOf: (room: Room) => RoomFacets;
49
+ /** The terms a call asked for, or undefined when it asked for none. Only `true` narrows. */
50
+ export declare const roomTermsOf: (args: Record<string, unknown>) => RoomTerms | undefined;
51
+ /** The terms as the chip keys they switch on - the order a chip row shows them. */
52
+ export declare const activeKeysOf: (terms: RoomTerms | undefined) => RoomFilterKey[];
53
+ /** Whether a room has everything the terms ask for. */
54
+ export declare const matchesTerms: (room: Room, terms: RoomTerms | undefined) => boolean;
55
+ /**
56
+ * The chips a hotel's rooms offer: only a kind at least one room has, each with
57
+ * how many rooms (rates) it keeps on its own, in the order a chip row shows
58
+ * them.
59
+ */
60
+ export declare const optionsOf: (rooms: Room[]) => RoomFilterOption[];
61
+ /** The terms in words, for a sentence: "king bed, breakfast included, free cancellation". */
62
+ export declare const termWords: (terms: RoomTerms) => string;
63
+ /** One chip in words, for a sentence. */
64
+ export declare const keyWords: (key: RoomFilterKey) => string;
65
+ /**
66
+ * A hotel's rooms by room type, in the order the types first appear: a group
67
+ * that sells several rates on one type (Huazhu's 房型 × 房价码) shares a
68
+ * `roomType`; one whose every room is its own type (Shangri-La's) does not,
69
+ * and each is a type of its own.
70
+ */
71
+ export declare const byRoomType: <R extends Pick<Room, "id" | "name" | "roomType">>(rooms: R[]) => {
72
+ id: string;
73
+ name: string;
74
+ rooms: R[];
75
+ }[];
76
+ //# sourceMappingURL=room-filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-filters.d.ts","sourceRoot":"","sources":["../src/room-filters.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,YAAY,CAAC;AAYhD,kEAAkE;AAClE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAExC,6FAA6F;AAC7F,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,kBAAkB,CAAC;AAE/E,0CAA0C;AAC1C,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAKpD,CAAC;AAEF,yDAAyD;AACzD,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,gBAAgB,CAAC,EAAE,IAAI,CAAC;CACzB,CAAC;AAEF,2FAA2F;AAC3F,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;AAExD,4EAA4E;AAC5E,MAAM,MAAM,gBAAgB,GAAG;IAAE,GAAG,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAiErE;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC,CAAC,KACzF;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAkBhC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC,KAAG,OAM/E,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,IAAI,CAAC,IAAI,EAAE,YAAY,GAAG,uBAAuB,GAAG,QAAQ,CAAC,KAClE,OAA0E,CAAC;AAE9E,mEAAmE;AACnE,eAAO,MAAM,QAAQ,GAAI,MAAM,IAAI,KAAG,UAQrC,CAAC;AAEF,4FAA4F;AAC5F,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,SAAS,GAAG,SAOvE,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,GAAG,SAAS,KAAG,aAAa,EAKtE,CAAC;AAEJ,uDAAuD;AACvD,eAAO,MAAM,YAAY,GAAI,MAAM,IAAI,EAAE,OAAO,SAAS,GAAG,SAAS,KAAG,OAQvE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,IAAI,EAAE,KAAG,gBAAgB,EAKzD,CAAC;AAEF,6FAA6F;AAC7F,eAAO,MAAM,SAAS,GAAI,OAAO,SAAS,KAAG,MAO9B,CAAC;AAEhB,yCAAyC;AACzC,eAAO,MAAM,QAAQ,GAAI,KAAK,aAAa,KAAG,MAG3C,CAAC;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,UAAU,CAAC,EACzE,OAAO,CAAC,EAAE,KACT;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,EAAE,CAAA;CAAE,EAS1C,CAAC"}
@@ -0,0 +1,191 @@
1
+ /** In the order a chip row shows them. */
2
+ export const ROOM_FILTER_KEYS = [
3
+ 'breakfast',
4
+ 'king',
5
+ 'twin',
6
+ 'freeCancellation',
7
+ ];
8
+ /**
9
+ * Two ways of reading a bed in words. A QUEEN COUNTS WITH THE KING: "king" is
10
+ * the large-bed filter - one big bed for two, which is what a guest who says
11
+ * 大床 / "a king" wants and what a hotel that lists "1 queen" sells. A DOUBLE
12
+ * is the same bed.
13
+ */
14
+ const LARGE = /\b(?:king|queen|double)\b|大床|双人床/i;
15
+ const TWIN = /\btwins?\b|双床/i;
16
+ /** "2 singles" - the digits before the word. */
17
+ const SINGLES = /(\d+)\s*(?:x\s*)?singles?\b/gi;
18
+ /**
19
+ * 「2张1.2米单人床」 / 「两张单人床」 - the count before 张, then the word. The gap
20
+ * may not cross another 张, so "1张1.8米大床 + 2张1.2米单人床" counts the two
21
+ * beside the king, not one run from the first 张 to the last bed.
22
+ */
23
+ const SINGLES_ZH = /(\d+|两|二)\s*张[^张]*?单人床/g;
24
+ const singlesIn = (text) => [...text.matchAll(SINGLES)].reduce((n, m) => n + Number(m[1]), 0) +
25
+ [...text.matchAll(SINGLES_ZH)].reduce((n, m) => n + (Number(m[1]) || 2), 0);
26
+ /**
27
+ * The beds in a text. A "1 king or 2 twins" room is sold either way, so the
28
+ * alternatives (split on "or" and "/") are read one by one and a room matches
29
+ * every kind any of them has. Within one alternative the beds are all there at
30
+ * once - "1 king and 2 singles" is a king room with two singles beside it, not
31
+ * a twin - so singles make twin beds only where there is no large bed with them.
32
+ */
33
+ const bedsInText = (text) => {
34
+ let king = false;
35
+ let twin = false;
36
+ for (const part of text.split(/\bor\b|\/|或/i)) {
37
+ const large = LARGE.test(part);
38
+ if (large)
39
+ king = true;
40
+ if (TWIN.test(part) || (!large && singlesIn(part) >= 2))
41
+ twin = true;
42
+ }
43
+ return { king, twin };
44
+ };
45
+ /**
46
+ * The same split, for a room type's NAME: only the words a name says a bed in -
47
+ * 大床 / 双床, "king" / "twin" - and none of the looser ones (a "queen", a
48
+ * "double", singles) that a `beds` line reads. In Chinese hotel naming 大床房 /
49
+ * 双床房 is the trade convention, so it is trustworthy; a name without them
50
+ * (家庭房, 榻榻米房, 备用房) says no bed and stays neither.
51
+ */
52
+ const bedsInName = (text) => {
53
+ let king = false;
54
+ let twin = false;
55
+ for (const part of text.split(/\bor\b|\/|或/i)) {
56
+ if (/\bking\b|大床/i.test(part))
57
+ king = true;
58
+ if (TWIN.test(part))
59
+ twin = true;
60
+ }
61
+ return { king, twin };
62
+ };
63
+ /** The beds in a room's codes: a king, a twin, or two singles that are not beside a king. */
64
+ const bedsInCodes = (types) => {
65
+ const king = types.some((b) => b.kind === 'king');
66
+ const singles = types.filter((b) => b.kind === 'single').length;
67
+ return { king, twin: types.some((b) => b.kind === 'twin') || (!king && singles >= 2) };
68
+ };
69
+ /**
70
+ * Which beds a room has: from `bedTypes` where they say a king or a twin,
71
+ * otherwise from what `beds` says in words ("1 king", "1 king or 2 twins",
72
+ * "2 twins or 1 king", "1 queen", "1 king and 2 singles", 大床 / 双床,
73
+ * 「2张1.2米单人床」), and last from the room type's NAME where neither says a
74
+ * bed: Huazhu's test environment sends no `bedTypes` and no `beds`, but a type
75
+ * called 「豪华大床房」 is a king room (2026-10-23). The order is the order of trust.
76
+ */
77
+ export const bedKindsOf = (room) => {
78
+ const coded = room.bedTypes?.length ? bedsInCodes(room.bedTypes) : undefined;
79
+ if (coded && (coded.king || coded.twin))
80
+ return coded;
81
+ const worded = room.beds ? bedsInText(room.beds) : undefined;
82
+ if (worded && (worded.king || worded.twin))
83
+ return worded;
84
+ // The type's name, else the room's own - a rate's suffix ("· 门市价含早") is not the type's.
85
+ const names = room.roomType
86
+ ? [room.roomType.name, room.roomType.names?.zh]
87
+ : [room.name, room.names?.zh];
88
+ let king = false;
89
+ let twin = false;
90
+ for (const name of names) {
91
+ if (!name)
92
+ continue;
93
+ const named = bedsInName(name);
94
+ king ||= named.king;
95
+ twin ||= named.twin;
96
+ }
97
+ return { king, twin };
98
+ };
99
+ /**
100
+ * Whether the room's rate includes breakfast. The meal, where a backend gives
101
+ * one, is what the rate includes (`MealPlan`); then its labels; then the plain
102
+ * flag. Room only is no.
103
+ */
104
+ export const breakfastOf = (room) => {
105
+ if (room.meal)
106
+ return room.meal.plan !== 'none';
107
+ const labels = room.labels ?? [];
108
+ if (labels.some((l) => l.startsWith('breakfast')))
109
+ return true;
110
+ if (labels.includes('room-only'))
111
+ return false;
112
+ return !!room.breakfast;
113
+ };
114
+ /**
115
+ * Whether the rate can be cancelled for nothing NOW: refundable, with a free
116
+ * window that has not closed. Where the window has closed, `refundable` stays
117
+ * true and `freeCancellationUntil` is gone - "refundable" alone is a rate that
118
+ * once had a free window (the demo's own search and Huazhu's read it the same
119
+ * way). A room by the hour has no cancellation terms to speak of.
120
+ */
121
+ export const freeCancellationOf = (room) => !room.hourly && room.refundable && !!room.freeCancellationUntil;
122
+ /** Everything a card needs to know about one room to filter it. */
123
+ export const facetsOf = (room) => {
124
+ const beds = bedKindsOf(room);
125
+ return {
126
+ breakfast: breakfastOf(room),
127
+ king: beds.king,
128
+ twin: beds.twin,
129
+ freeCancellation: freeCancellationOf(room),
130
+ };
131
+ };
132
+ /** The terms a call asked for, or undefined when it asked for none. Only `true` narrows. */
133
+ export const roomTermsOf = (args) => {
134
+ const terms = {
135
+ ...(args.bed === 'king' || args.bed === 'twin' ? { bed: args.bed } : {}),
136
+ ...(args.breakfast === true ? { breakfast: true } : {}),
137
+ ...(args.freeCancellation === true ? { freeCancellation: true } : {}),
138
+ };
139
+ return Object.keys(terms).length ? terms : undefined;
140
+ };
141
+ /** The terms as the chip keys they switch on - the order a chip row shows them. */
142
+ export const activeKeysOf = (terms) => ROOM_FILTER_KEYS.filter((k) => k === 'king' || k === 'twin'
143
+ ? terms?.bed === k
144
+ : !!terms?.[k]);
145
+ /** Whether a room has everything the terms ask for. */
146
+ export const matchesTerms = (room, terms) => {
147
+ if (!terms)
148
+ return true;
149
+ const f = facetsOf(room);
150
+ return ((!terms.bed || f[terms.bed]) &&
151
+ (!terms.breakfast || f.breakfast) &&
152
+ (!terms.freeCancellation || f.freeCancellation));
153
+ };
154
+ /**
155
+ * The chips a hotel's rooms offer: only a kind at least one room has, each with
156
+ * how many rooms (rates) it keeps on its own, in the order a chip row shows
157
+ * them.
158
+ */
159
+ export const optionsOf = (rooms) => {
160
+ const all = rooms.map(facetsOf);
161
+ return ROOM_FILTER_KEYS.map((key) => ({ key, count: all.filter((f) => f[key]).length })).filter((o) => o.count > 0);
162
+ };
163
+ /** The terms in words, for a sentence: "king bed, breakfast included, free cancellation". */
164
+ export const termWords = (terms) => [
165
+ terms.bed === 'king' ? 'king bed' : terms.bed === 'twin' ? 'twin beds' : '',
166
+ terms.breakfast ? 'breakfast included' : '',
167
+ terms.freeCancellation ? 'free cancellation' : '',
168
+ ]
169
+ .filter(Boolean)
170
+ .join(', ');
171
+ /** One chip in words, for a sentence. */
172
+ export const keyWords = (key) => termWords(key === 'king' ? { bed: 'king' } : key === 'twin' ? { bed: 'twin' } : { [key]: true });
173
+ /**
174
+ * A hotel's rooms by room type, in the order the types first appear: a group
175
+ * that sells several rates on one type (Huazhu's 房型 × 房价码) shares a
176
+ * `roomType`; one whose every room is its own type (Shangri-La's) does not,
177
+ * and each is a type of its own.
178
+ */
179
+ export const byRoomType = (rooms) => {
180
+ const types = new Map();
181
+ for (const r of rooms) {
182
+ const id = r.roomType?.id ?? r.id;
183
+ const type = types.get(id);
184
+ if (type)
185
+ type.rooms.push(r);
186
+ else
187
+ types.set(id, { id, name: r.roomType?.name ?? r.name, rooms: [r] });
188
+ }
189
+ return [...types.values()];
190
+ };
191
+ //# sourceMappingURL=room-filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-filters.js","sourceRoot":"","sources":["../src/room-filters.ts"],"names":[],"mappings":"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"}
package/dist/server.d.ts CHANGED
@@ -28,7 +28,7 @@ export declare const INITIALIZE_PER_MINUTE = 300;
28
28
  * number. Found by reading the boot banner of a container that had just been
29
29
  * deployed (2026-09-22): seventeen tools listed, and "0.7.0" above them.
30
30
  */
31
- export declare const VERSION = "0.45.2";
31
+ export declare const VERSION = "0.46.0";
32
32
  /**
33
33
  * The card's resource URI.
34
34
  *
@@ -37,7 +37,7 @@ export declare const VERSION = "0.45.2";
37
37
  * connector went storefront-v35 → v40 in a single day of UI work for exactly
38
38
  * this reason.
39
39
  */
40
- export declare const CARD_URI = "ui://curless/hotel/booking-v86.html";
40
+ export declare const CARD_URI = "ui://curless/hotel/booking-v87.html";
41
41
  /**
42
42
  * The URI one deployment names its card by: `CARD_URI` with a short hash of
43
43
  * everything a host caches under it - the card itself, and the hosts it may
package/dist/server.js CHANGED
@@ -47,7 +47,7 @@ export const INITIALIZE_PER_MINUTE = 300;
47
47
  * number. Found by reading the boot banner of a container that had just been
48
48
  * deployed (2026-09-22): seventeen tools listed, and "0.7.0" above them.
49
49
  */
50
- export const VERSION = '0.45.2';
50
+ export const VERSION = '0.46.0';
51
51
  /**
52
52
  * The card's resource URI.
53
53
  *
@@ -56,7 +56,7 @@ export const VERSION = '0.45.2';
56
56
  * connector went storefront-v35 → v40 in a single day of UI work for exactly
57
57
  * this reason.
58
58
  */
59
- export const CARD_URI = 'ui://curless/hotel/booking-v86.html';
59
+ export const CARD_URI = 'ui://curless/hotel/booking-v87.html';
60
60
  /** The card as it ships, hashed once - what a host caches under the URI. */
61
61
  const CARD_HTML_SHA = createHash('sha256').update(HOTEL_CARD_HTML).digest('hex');
62
62
  /**
@@ -47,6 +47,7 @@ export declare const imageDomainsOf: (hotels: {
47
47
  imageUrl?: string;
48
48
  rooms: {
49
49
  imageUrl?: string;
50
+ images?: string[];
50
51
  }[];
51
52
  }[]) => string[];
52
53
  //# sourceMappingURL=supplier.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"supplier.d.ts","sourceRoot":"","sources":["../src/supplier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAa3C,8FAA8F;AAC9F,MAAM,MAAM,IAAI,GAAG;IACjB,OAAO,EAAE,YAAY,CAAC;IACtB,qDAAqD;IACrD,YAAY,EAAE,MAAM,MAAM,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,iGAAiG;IACjG,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,8EAA8E;IAC9E,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;CACvD,CAAC;AAEF,oGAAoG;AACpG,MAAM,MAAM,eAAe,GAAG;IAC5B,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,sGAAsG;IACtG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACxC,mFAAmF;IACnF,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,gHAAgH;IAChH,YAAY,CAAC,EAAE,OAAO,KAAK,CAAC;IAC5B,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,sFAAsF;IACtF,UAAU,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,KAAK,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,eAAe,KAAG,IAW9E,CAAC;AAuBF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAAE,EAAE,KAC9D,MAAM,EAIR,CAAC"}
1
+ {"version":3,"file":"supplier.d.ts","sourceRoot":"","sources":["../src/supplier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAa3C,8FAA8F;AAC9F,MAAM,MAAM,IAAI,GAAG;IACjB,OAAO,EAAE,YAAY,CAAC;IACtB,qDAAqD;IACrD,YAAY,EAAE,MAAM,MAAM,EAAE,CAAC;IAC7B,UAAU,EAAE,MAAM,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,iGAAiG;IACjG,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,sFAAsF;IACtF,KAAK,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,8EAA8E;IAC9E,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC;CACvD,CAAC;AAEF,oGAAoG;AACpG,MAAM,MAAM,eAAe,GAAG;IAC5B,sFAAsF;IACtF,KAAK,EAAE,MAAM,CAAC;IACd,sGAAsG;IACtG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACxC,mFAAmF;IACnF,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,gHAAgH;IAChH,YAAY,CAAC,EAAE,OAAO,KAAK,CAAC;IAC5B,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,sFAAsF;IACtF,UAAU,EAAE,OAAO,CAAC;IACpB,0EAA0E;IAC1E,KAAK,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,eAAe,KAAG,IAW9E,CAAC;AAuBF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GACzB,QAAQ;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;CAAE,EAAE,KACjF,MAAM,EAOR,CAAC"}
package/dist/supplier.js CHANGED
@@ -43,7 +43,10 @@ const makeDemo = (data, ctx) => {
43
43
  * one blank thumbnail per room, with nothing in any log to say why.
44
44
  */
45
45
  export const imageDomainsOf = (hotels) => [
46
- ...new Set(hotels.flatMap((h) => [...hostOf(h.imageUrl), ...h.rooms.flatMap((r) => hostOf(r.imageUrl))])),
46
+ ...new Set(hotels.flatMap((h) => [
47
+ ...hostOf(h.imageUrl),
48
+ ...h.rooms.flatMap((r) => [...hostOf(r.imageUrl), ...(r.images ?? []).flatMap(hostOf)]),
49
+ ])),
47
50
  ];
48
51
  const hostOf = (url) => {
49
52
  if (!url)
@@ -1 +1 @@
1
- {"version":3,"file":"supplier.js","sourceRoot":"","sources":["../src/supplier.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"supplier.js","sourceRoot":"","sources":["../src/supplier.ts"],"names":[],"mappings":"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"}
package/dist/tools.d.ts CHANGED
@@ -15,7 +15,7 @@ export declare const LOOK_UP_MAX = 6;
15
15
  */
16
16
  export declare const buildTools: (n: ToolNames, v: Vocabulary, caps?: BackendCapabilities) => ({
17
17
  readonly name: `list_${string}${string}`;
18
- readonly description: `${string}, shown as a card. Asked with no place - or a country of many cities - it answers with the places to choose from: regions, countries and cities, each with how many ${string} it has; \`all\` lists the ${string} themselves. \`city\` (a city or a country) or \`query\` answers with the ${string}: a picture, the city and area, a rating where the ${string} publishes one, and a from-price, and a city usually holds several. With \`checkIn\` and \`checkOut\` every ${string} is priced for those nights - its cheapest room that takes the party, \`rooms\` of it, for the whole stay with taxes - or marked as having no room for them. \`sort\` and \`maxNightly\` order and cap by that price, or by the from-price without dates, where the matches share one currency. \`brand\`, \`facilities\`, \`freeCancellation\` and \`breakfast\` narrow the list, and the answer counts what each would leave. A long list comes a page at a time: the answer says how many more there are and the \`offset\` of the next page. Words or a place that match nothing are widened once, and the answer names what it widened to.${string}`;
18
+ readonly description: `${string}, shown as a card. Asked with no place - or a country of many cities - it answers with the places to choose from: regions, countries and cities, each with how many ${string} it has; \`all\` lists the ${string} themselves. \`city\` (a city or a country) or \`query\` answers with the ${string}: a picture, the city and area, a rating where the ${string} publishes one, and a from-price, and a city usually holds several. With \`checkIn\` and \`checkOut\` every ${string} is priced for those nights - its cheapest room that takes the party, \`rooms\` of it, for the whole stay with taxes - or marked as having no room for them. \`sort\` and \`maxNightly\` order and cap by that price, or by the from-price without dates, where the matches share one currency. \`brand\`, \`facilities\`, \`freeCancellation\`, \`breakfast\` and \`bed\` narrow the list, and the answer counts what each would leave. A long list comes a page at a time: the answer says how many more there are and the \`offset\` of the next page. Words or a place that match nothing are widened once, and the answer names what it widened to.${string}`;
19
19
  readonly annotations: {
20
20
  readonly title: string;
21
21
  readonly readOnlyHint: true;
@@ -42,6 +42,11 @@ export declare const buildTools: (n: ToolNames, v: Vocabulary, caps?: BackendCap
42
42
  readonly type: "boolean";
43
43
  readonly description: `Only ${string} with a room that includes breakfast - and, with dates, that room is the one priced`;
44
44
  };
45
+ readonly bed: {
46
+ readonly type: "string";
47
+ readonly enum: readonly ["king", "twin"];
48
+ readonly description: `Only ${string} with a room that has this bed - \`king\` is one large bed (king, queen or double), \`twin\` is two beds - and, with dates, that room is the one priced. Given with \`freeCancellation\` or \`breakfast\`, one room must have all of them`;
49
+ };
45
50
  readonly all: {
46
51
  readonly type: "boolean";
47
52
  readonly description: `Unnarrowed, or narrowed to a country of many cities, the answer is the places to choose from; true lists the ${string} themselves`;
@@ -105,7 +110,7 @@ export declare const buildTools: (n: ToolNames, v: Vocabulary, caps?: BackendCap
105
110
  };
106
111
  } | {
107
112
  readonly name: `get_${string}${string}`;
108
- readonly description: `One ${string} in full: description, amenities, address, and check-in and check-out times where the ${string} publishes them. Given \`checkIn\` and \`checkOut\` it also returns the room types that can be booked for those nights, each with its nightly rate, the stay total including taxes and fees, whether it can be cancelled free and until when, and how many rooms are left. \`rooms\` leaves out the types that have fewer than that many. Without dates it returns the ${string} only, because a room has no price until the nights are known. The ${string} is drawn as a card for the guest to look at.${string}`;
113
+ readonly description: `One ${string} in full: description, amenities, address, and check-in and check-out times where the ${string} publishes them. Given \`checkIn\` and \`checkOut\` it also returns the room types that can be booked for those nights, one line per type at its lowest rate: the nightly rate, the stay total including taxes and fees, whether it can be cancelled free and until when, and how many rates it has. \`rooms\` leaves out the types that have fewer than that many left. \`bed\`, \`breakfast\` and \`freeCancellation\` keep only the rates that meet all of those given; the card still holds every room, with the given filters selected. Without dates it returns the ${string} only, because a room has no price until the nights are known. The ${string} is drawn as a card for the guest to look at.${string}`;
109
114
  readonly annotations: {
110
115
  readonly title: string;
111
116
  readonly readOnlyHint: true;
@@ -122,6 +127,19 @@ export declare const buildTools: (n: ToolNames, v: Vocabulary, caps?: BackendCap
122
127
  readonly maximum: 5;
123
128
  readonly description: "How many rooms of one type, 1 to 5. Default 1";
124
129
  };
130
+ readonly bed: {
131
+ readonly type: "string";
132
+ readonly enum: readonly ["king", "twin"];
133
+ readonly description: "With dates: only rooms with this bed - `king` is one large bed (king, queen or double), `twin` is two beds. A room sold as king or twin has both";
134
+ };
135
+ readonly breakfast: {
136
+ readonly type: "boolean";
137
+ readonly description: "With dates: only rooms whose rate includes breakfast";
138
+ };
139
+ readonly freeCancellation: {
140
+ readonly type: "boolean";
141
+ readonly description: "With dates: only rooms that can be cancelled free";
142
+ };
125
143
  readonly checkIn: {
126
144
  readonly type: "string";
127
145
  readonly pattern: "^\\d{4}-\\d{2}-\\d{2}$";
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,mBAAmB,EASzB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAa,YAAY,EAAgB,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAK7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAmBhD,OAAO,EAGL,KAAK,SAAS,EAIf,MAAM,WAAW,CAAC;AACnB,OAAO,KAAK,EAEV,cAAc,EAkBd,eAAe,EAKhB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAa,KAAK,UAAU,EAAwC,MAAM,YAAY,CAAC;AAuF9F,+GAA+G;AAC/G,eAAO,MAAM,WAAW,IAAI,CAAC;AAE7B;;;;GAIG;AACH,eAAO,MAAM,UAAU,GACrB,GAAG,SAAS,EACZ,GAAG,UAAU,EACb,OAAM,mBAAuC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IACC,CAAC;AAEjD,mEAAmE;AACnE;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,EAC7E,GAAG,CAAC,EACJ,OAAO;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,KAC7C,CAWF,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,GAAG,SAAS,EAAE,MAAM,mBAAmB,KAAG,GAAG,CAAC,MAAM,CAO9E,CAAC;AAo3BL;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,mBAAmB,EACzB,OAAO,IAAI,EACX,OAAM;IACJ,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CAChB,KACL,MAAM,CAAC,MAAM,EAAE,OAAO,CAgDxB,CAAC;AAqBF,eAAO,MAAM,kBAAkB,GAAI,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAyPtE,CAAC;AAEH,qDAAqD;AACrD,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/B;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9F,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB;;;OAGG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,SAAS,CAAC;IACjB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oFAAoF;IACpF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4FAA4F;IAC5F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,0FAA0F;IAC1F,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4FAA4F;IAC5F,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,4FAA4F;IAC5F,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AA0MF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjC,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAChC,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAwlCF;;;;GAIG;AACH,eAAO,MAAM,eAAe,IAAI,CAAC;AAyKjC;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,QAAQ,KAAG,UAOzC,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,MAAM,QAAQ,EACd,MAAM,MAAM,EACZ,SAAS,OAAO,EAChB,KAAK,WAAW,KACf,OAAO,CAAC,UAAU,CAkBpB,CAAC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}