@curless/hotel-storefront 0.53.0 → 0.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/about.d.ts +24 -0
  2. package/dist/about.d.ts.map +1 -0
  3. package/dist/about.js +28 -0
  4. package/dist/about.js.map +1 -0
  5. package/dist/aggregate/make.js +2 -2
  6. package/dist/aggregate/make.js.map +1 -1
  7. package/dist/backend.d.ts +15 -0
  8. package/dist/backend.d.ts.map +1 -1
  9. package/dist/backend.js.map +1 -1
  10. package/dist/card.generated.d.ts +1 -1
  11. package/dist/card.generated.js +2 -2
  12. package/dist/card.generated.js.map +1 -1
  13. package/dist/config.d.ts +33 -2
  14. package/dist/config.d.ts.map +1 -1
  15. package/dist/config.js.map +1 -1
  16. package/dist/coupon-words.d.ts +12 -0
  17. package/dist/coupon-words.d.ts.map +1 -0
  18. package/dist/coupon-words.js +19 -0
  19. package/dist/coupon-words.js.map +1 -0
  20. package/dist/dates.js +1 -1
  21. package/dist/dates.js.map +1 -1
  22. package/dist/demo-hotels.d.ts +6 -0
  23. package/dist/demo-hotels.d.ts.map +1 -1
  24. package/dist/demo-hotels.js +57 -17
  25. package/dist/demo-hotels.js.map +1 -1
  26. package/dist/fence.d.ts.map +1 -1
  27. package/dist/fence.js +4 -3
  28. package/dist/fence.js.map +1 -1
  29. package/dist/huazhu/backend.d.ts +6 -0
  30. package/dist/huazhu/backend.d.ts.map +1 -1
  31. package/dist/huazhu/backend.js +25 -22
  32. package/dist/huazhu/backend.js.map +1 -1
  33. package/dist/huazhu/catalog.d.ts +6 -6
  34. package/dist/huazhu/catalog.d.ts.map +1 -1
  35. package/dist/huazhu/catalog.js +33 -15
  36. package/dist/huazhu/catalog.js.map +1 -1
  37. package/dist/huazhu/client.js +1 -1
  38. package/dist/huazhu/client.js.map +1 -1
  39. package/dist/huazhu/make.d.ts.map +1 -1
  40. package/dist/huazhu/make.js +1 -0
  41. package/dist/huazhu/make.js.map +1 -1
  42. package/dist/huazhu/sandbox.d.ts.map +1 -1
  43. package/dist/huazhu/sandbox.js +5 -3
  44. package/dist/huazhu/sandbox.js.map +1 -1
  45. package/dist/legal.d.ts.map +1 -1
  46. package/dist/legal.js +104 -80
  47. package/dist/legal.js.map +1 -1
  48. package/dist/lib.d.ts +1 -1
  49. package/dist/lib.d.ts.map +1 -1
  50. package/dist/lib.js +1 -1
  51. package/dist/lib.js.map +1 -1
  52. package/dist/otaless/backend.d.ts +31 -0
  53. package/dist/otaless/backend.d.ts.map +1 -0
  54. package/dist/otaless/backend.js +502 -0
  55. package/dist/otaless/backend.js.map +1 -0
  56. package/dist/otaless/client.d.ts +103 -0
  57. package/dist/otaless/client.d.ts.map +1 -0
  58. package/dist/otaless/client.js +110 -0
  59. package/dist/otaless/client.js.map +1 -0
  60. package/dist/otaless/fake.d.ts +27 -0
  61. package/dist/otaless/fake.d.ts.map +1 -0
  62. package/dist/otaless/fake.js +239 -0
  63. package/dist/otaless/fake.js.map +1 -0
  64. package/dist/otaless/make.d.ts +4 -0
  65. package/dist/otaless/make.d.ts.map +1 -0
  66. package/dist/otaless/make.js +71 -0
  67. package/dist/otaless/make.js.map +1 -0
  68. package/dist/paid.d.ts.map +1 -1
  69. package/dist/paid.js +9 -9
  70. package/dist/paid.js.map +1 -1
  71. package/dist/present.d.ts +6 -1
  72. package/dist/present.d.ts.map +1 -1
  73. package/dist/present.js +20 -5
  74. package/dist/present.js.map +1 -1
  75. package/dist/reference.d.ts.map +1 -1
  76. package/dist/reference.js +10 -3
  77. package/dist/reference.js.map +1 -1
  78. package/dist/server.d.ts +2 -2
  79. package/dist/server.d.ts.map +1 -1
  80. package/dist/server.js +8 -6
  81. package/dist/server.js.map +1 -1
  82. package/dist/supplier.d.ts +6 -0
  83. package/dist/supplier.d.ts.map +1 -1
  84. package/dist/supplier.js +4 -0
  85. package/dist/supplier.js.map +1 -1
  86. package/dist/surface.d.ts.map +1 -1
  87. package/dist/surface.js +100 -71
  88. package/dist/surface.js.map +1 -1
  89. package/dist/tools.d.ts +19 -0
  90. package/dist/tools.d.ts.map +1 -1
  91. package/dist/tools.js +204 -102
  92. package/dist/tools.js.map +1 -1
  93. package/dist/types.d.ts +58 -0
  94. package/dist/types.d.ts.map +1 -1
  95. package/dist/vocab.d.ts +0 -14
  96. package/dist/vocab.d.ts.map +1 -1
  97. package/dist/vocab.js +19 -22
  98. package/dist/vocab.js.map +1 -1
  99. package/package.json +1 -1
@@ -0,0 +1,110 @@
1
+ // The Otaless hotel backend ("酒旅统一中台聚合 API", `/api/v1/ota/*`, the
2
+ // document of 2026-11-02 - kept on robin's machine, not in git): what it says
3
+ // on the wire, and how one request is made.
4
+ //
5
+ // ⚠️ READ-ONLY. Only search, rooms and quote are called. Every endpoint there
6
+ // is anonymous - an order id is enough to cancel anyone's booking (docs/
7
+ // otaless-hotels.md §8.0) - so nothing that books, cancels, signs in or lists
8
+ // orders is called from here until the backend says who is asking.
9
+ /** The backend refused, in its own code and words - or did not answer. */
10
+ export class OtalessError extends Error {
11
+ status;
12
+ backendCode;
13
+ constructor(message, status, backendCode) {
14
+ super(message);
15
+ this.status = status;
16
+ this.backendCode = backendCode;
17
+ }
18
+ }
19
+ /**
20
+ * The backend's `@RepeatSubmit`: the same request again within its window is
21
+ * refused with this code - reads too (总线程, 2026-11-03). Every read is kept
22
+ * for `CACHE_MS`, so a card redrawing or a model asking twice is answered from
23
+ * here and never sends the same request twice in a row.
24
+ */
25
+ export const REPEAT_SUBMIT = 10014;
26
+ const CACHE_MS = 60_000;
27
+ const CACHE_MAX = 300;
28
+ /** …and refused anyway (another process asked the same): once more, after a pause. */
29
+ const REPEAT_PAUSE_MS = 2_000;
30
+ export const createOtalessClient = (opts) => {
31
+ const base = opts.baseUrl.replace(/\/+$/, '');
32
+ const doFetch = opts.fetch ?? fetch;
33
+ const now = opts.now ?? Date.now;
34
+ const timeoutMs = opts.timeoutMs ?? 10_000;
35
+ const pause = opts.repeatPauseMs ?? REPEAT_PAUSE_MS;
36
+ const cache = new Map();
37
+ const once = async (method, path, body) => {
38
+ let res;
39
+ try {
40
+ res = await doFetch(`${base}${path}`, {
41
+ method,
42
+ headers: {
43
+ accept: 'application/json',
44
+ ...(body === undefined ? {} : { 'content-type': 'application/json' }),
45
+ 'X-Tenant-Id': opts.tenant,
46
+ },
47
+ ...(body === undefined ? {} : { body: JSON.stringify(body) }),
48
+ signal: AbortSignal.timeout(timeoutMs),
49
+ });
50
+ }
51
+ catch (err) {
52
+ throw new OtalessError(`the Otaless hotel backend did not answer: ${err.message}`);
53
+ }
54
+ const text = await res.text();
55
+ let json;
56
+ try {
57
+ json = JSON.parse(text);
58
+ }
59
+ catch {
60
+ json = undefined;
61
+ }
62
+ if (!res.ok || !json || typeof json !== 'object') {
63
+ throw new OtalessError(`the Otaless hotel backend answered HTTP ${res.status}${json?.msg ? `: ${json.msg}` : ''}`, res.status, json?.code);
64
+ }
65
+ return json;
66
+ };
67
+ const call = async (method, path, body) => {
68
+ let r = await once(method, path, body);
69
+ if (r.code === REPEAT_SUBMIT) {
70
+ await new Promise((ok) => setTimeout(ok, pause));
71
+ r = await once(method, path, body);
72
+ }
73
+ if (r.code !== 200) {
74
+ throw new OtalessError(`the Otaless hotel backend refused: ${r.code ?? '?'} ${r.msg ?? ''}`.trim(), 200, r.code);
75
+ }
76
+ return r.data;
77
+ };
78
+ /** One read, kept for a minute - a failure is not kept. */
79
+ const read = (key, make) => {
80
+ const t = now();
81
+ const hit = cache.get(key);
82
+ if (hit && t - hit.at < CACHE_MS)
83
+ return hit.value;
84
+ const value = make();
85
+ cache.set(key, { at: t, value });
86
+ value.catch(() => {
87
+ if (cache.get(key)?.value === value)
88
+ cache.delete(key);
89
+ });
90
+ while (cache.size > CACHE_MAX) {
91
+ const first = cache.keys().next().value;
92
+ if (first === undefined)
93
+ break;
94
+ cache.delete(first);
95
+ }
96
+ return value;
97
+ };
98
+ return {
99
+ search: (body) => read(`search ${JSON.stringify(body)}`, () => call('POST', '/api/v1/ota/search', body)),
100
+ rooms: (q) => {
101
+ const qs = new URLSearchParams(Object.entries(q).filter((e) => typeof e[1] === 'string'));
102
+ return read(`rooms ${qs}`, async () => {
103
+ const data = await call('GET', `/api/v1/ota/rooms?${qs}`);
104
+ return Array.isArray(data) ? data : [];
105
+ });
106
+ },
107
+ quote: (body) => read(`quote ${JSON.stringify(body)}`, () => call('POST', '/api/v1/ota/rooms/quote', body)),
108
+ };
109
+ };
110
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/otaless/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { R, WireHotel, WireRoom, WireSearch } from './client.js';
2
+ export type OtalessScene = 'data' | 'empty' | 'degraded';
3
+ /** The dev backend's search answer, 2026-11-03 (总线程 and 酒店对接 both read it). */
4
+ export declare const RECORDED_DEGRADED: R<WireSearch>;
5
+ export declare const FAKE_HOTELS: WireHotel[];
6
+ export declare const FAKE_ROOMS: Record<string, WireRoom[]>;
7
+ export type FakeCall = {
8
+ method: string;
9
+ path: string;
10
+ body?: unknown;
11
+ };
12
+ export type OtalessFake = {
13
+ fetch: typeof fetch;
14
+ /** Every request it was sent, in order. */
15
+ calls: FakeCall[];
16
+ /** Which answer a search gets from now on. */
17
+ scene: (s: OtalessScene) => void;
18
+ /** These groups are degraded in the `data` scene too - their hotels left out. */
19
+ degrade: (codes: string[]) => void;
20
+ /** The next request is refused as a repeat (`@RepeatSubmit`, code 10014). */
21
+ refuseNextAsRepeat: () => void;
22
+ };
23
+ export declare const createOtalessFake: (opts?: {
24
+ scene?: OtalessScene;
25
+ tenant?: string;
26
+ }) => OtalessFake;
27
+ //# sourceMappingURL=fake.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake.d.ts","sourceRoot":"","sources":["../../src/otaless/fake.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,SAAS,EAAa,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAUjF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAIzD,+EAA+E;AAC/E,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,UAAU,CAW3C,CAAC;AAUF,eAAO,MAAM,WAAW,EAAE,SAAS,EA2DlC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CA4EjD,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAExE,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,OAAO,KAAK,CAAC;IACpB,2CAA2C;IAC3C,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,8CAA8C;IAC9C,KAAK,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,IAAI,CAAC;IACjC,iFAAiF;IACjF,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACnC,6EAA6E;IAC7E,kBAAkB,EAAE,MAAM,IAAI,CAAC;CAChC,CAAC;AAWF,eAAO,MAAM,iBAAiB,GAC5B,OAAM;IAAE,KAAK,CAAC,EAAE,YAAY,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAO,KACnD,WAgFF,CAAC"}
@@ -0,0 +1,239 @@
1
+ const ALL = ['clubmed', 'atour', 'ji', 'ascott', 'shangrila', 'curlessatour'];
2
+ /** The dev backend's search answer, 2026-11-03 (总线程 and 酒店对接 both read it). */
3
+ export const RECORDED_DEGRADED = {
4
+ code: 200,
5
+ data: {
6
+ totalCount: 0,
7
+ queriedProviders: ALL,
8
+ successProviders: [],
9
+ degradedProviders: ALL,
10
+ hotels: [],
11
+ executionTimes: { atour: 6, clubmed: 7, ascott: 6, curlessatour: 5, shangrila: 6, ji: 7 },
12
+ },
13
+ msg: 'Operation successful',
14
+ };
15
+ const price = (amount, currency = 'CNY', feeNotice) => ({
16
+ originalCurrency: currency,
17
+ originalAmount: amount,
18
+ settlementCurrency: 'USD',
19
+ settlementAmount: Math.round(amount * 0.14 * 100) / 100,
20
+ ...(feeNotice ? { feeNotice } : {}),
21
+ });
22
+ export const FAKE_HOTELS = [
23
+ // The document's own example, as it gives it.
24
+ {
25
+ unifiedId: 'ascott:orchard_sh',
26
+ providerCode: 'ascott',
27
+ brand: 'Ascott The Residence',
28
+ originalId: 'orchard_sh',
29
+ name: '上海雅诗阁淮海路服务公寓',
30
+ city: '上海',
31
+ country: 'CN',
32
+ address: '淮海中路282号香港广场',
33
+ latitude: 31.2231,
34
+ longitude: 121.4789,
35
+ distanceKm: 0.5,
36
+ score: 4.8,
37
+ minPrice: price(1280, 'CNY', '包含10%服务费与6%增值税'),
38
+ amenities: ['全套厨房', '室内恒温泳池', '洗衣干衣机', '高速WiFi'],
39
+ extensions: { residence_type: 'serviced_apartment', has_balcony: true },
40
+ },
41
+ {
42
+ unifiedId: 'atour:sh-xintiandi',
43
+ providerCode: 'atour',
44
+ brand: '亚朵酒店',
45
+ originalId: 'sh-xintiandi',
46
+ name: '上海新天地亚朵酒店',
47
+ city: '上海',
48
+ country: 'CN',
49
+ address: '黄浦区马当路388号',
50
+ latitude: 31.2152,
51
+ longitude: 121.4751,
52
+ score: 4.7,
53
+ minPrice: price(689),
54
+ amenities: ['健身房', '洗衣房', '高速WiFi'],
55
+ },
56
+ {
57
+ unifiedId: 'shangrila:pudong',
58
+ providerCode: 'shangrila',
59
+ brand: 'Shangri-La',
60
+ originalId: 'pudong',
61
+ // A name as long as a real one gets, for the card's wrapping.
62
+ name: '上海浦东香格里拉大酒店(陆家嘴滨江大道国际金融中心店)',
63
+ city: '上海',
64
+ country: 'CN',
65
+ address: '浦东富城路33号',
66
+ score: 4.9,
67
+ minPrice: price(1650),
68
+ amenities: ['室内泳池', '水疗中心', '健身中心'],
69
+ },
70
+ {
71
+ unifiedId: 'shangrila:penang-rasa',
72
+ providerCode: 'shangrila',
73
+ brand: 'Shangri-La',
74
+ originalId: 'penang-rasa',
75
+ name: 'Shangri-La Rasa Sayang, Penang',
76
+ city: 'Penang',
77
+ country: 'MY',
78
+ minPrice: price(980, 'MYR'),
79
+ amenities: ['Beachfront', 'Spa', 'Pool'],
80
+ },
81
+ ];
82
+ export const FAKE_ROOMS = {
83
+ 'ascott:orchard_sh': [
84
+ {
85
+ unifiedRoomId: 'ascott:room_1br_exec',
86
+ originalRoomId: '1br_exec',
87
+ providerCode: 'ascott',
88
+ name: '豪华一居室行政套房',
89
+ bedType: '特大双人床',
90
+ maxOccupancy: 2,
91
+ price: price(1380, 'CNY', '含税费及服务费'),
92
+ breakfastIncluded: true,
93
+ cancellationPolicy: '入住日前24小时内不可免费取消',
94
+ amenities: ['独立客厅', '高层景观', 'Nespresso咖啡机', '浴缸'],
95
+ },
96
+ {
97
+ unifiedRoomId: 'ascott:room_studio',
98
+ originalRoomId: 'studio',
99
+ providerCode: 'ascott',
100
+ name: '开间公寓',
101
+ bedType: '大床',
102
+ maxOccupancy: 2,
103
+ price: price(1280, 'CNY', '含税费及服务费'),
104
+ breakfastIncluded: false,
105
+ cancellationPolicy: '入住前1天18:00前可免费取消',
106
+ },
107
+ ],
108
+ 'atour:sh-xintiandi': [
109
+ {
110
+ unifiedRoomId: 'atour:room_king',
111
+ originalRoomId: 'king',
112
+ providerCode: 'atour',
113
+ name: '高级大床房',
114
+ bedType: '1.8米大床',
115
+ maxOccupancy: 2,
116
+ price: price(689),
117
+ breakfastIncluded: false,
118
+ cancellationPolicy: '入住前1天18:00前可免费取消',
119
+ },
120
+ {
121
+ unifiedRoomId: 'atour:room_twin',
122
+ originalRoomId: 'twin',
123
+ providerCode: 'atour',
124
+ name: '高级双床房',
125
+ bedType: '1.2米双床',
126
+ maxOccupancy: 2,
127
+ price: price(729),
128
+ breakfastIncluded: true,
129
+ // No terms sent: none are said.
130
+ },
131
+ ],
132
+ 'shangrila:pudong': [
133
+ {
134
+ unifiedRoomId: 'shangrila:deluxe_river',
135
+ originalRoomId: 'deluxe_river',
136
+ providerCode: 'shangrila',
137
+ name: '豪华江景房(含双人自助早餐及行政酒廊礼遇,可延迟退房至下午两点)',
138
+ bedType: '特大床',
139
+ maxOccupancy: 3,
140
+ price: price(1650),
141
+ breakfastIncluded: true,
142
+ cancellationPolicy: '2026-11-14 18:00 前免费取消',
143
+ },
144
+ ],
145
+ 'shangrila:penang-rasa': [
146
+ {
147
+ unifiedRoomId: 'shangrila:garden',
148
+ originalRoomId: 'garden',
149
+ providerCode: 'shangrila',
150
+ name: 'Garden Wing Deluxe',
151
+ bedType: 'King',
152
+ maxOccupancy: 2,
153
+ price: price(980, 'MYR'),
154
+ breakfastIncluded: false,
155
+ cancellationPolicy: 'Free cancellation until 3 days before arrival',
156
+ },
157
+ ],
158
+ };
159
+ const json = (body, status = 200) => new Response(JSON.stringify(body), { status, headers: { 'content-type': 'application/json' } });
160
+ const nightsBetween = (a, b) => Math.max(1, Math.round((Date.parse(`${b}T00:00:00Z`) - Date.parse(`${a}T00:00:00Z`)) / 86_400_000));
161
+ export const createOtalessFake = (opts = {}) => {
162
+ let scene = opts.scene ?? 'data';
163
+ let down = [];
164
+ let repeat = false;
165
+ const calls = [];
166
+ const fetchFake = (async (input, init) => {
167
+ const url = new URL(String(input instanceof Request ? input.url : input));
168
+ const method = init?.method ?? 'GET';
169
+ const body = typeof init?.body === 'string' ? JSON.parse(init.body) : undefined;
170
+ calls.push({ method, path: `${url.pathname}${url.search}`, ...(body ? { body } : {}) });
171
+ const tenant = new Headers(init?.headers).get('X-Tenant-Id');
172
+ if (opts.tenant && tenant !== opts.tenant)
173
+ return json({ code: 401, msg: '租户不存在' });
174
+ if (repeat) {
175
+ repeat = false;
176
+ return json({ code: 10014, msg: 'Repeat submit is not allowed' });
177
+ }
178
+ if (url.pathname === '/api/v1/ota/search' && method === 'POST') {
179
+ if (scene === 'degraded')
180
+ return json(RECORDED_DEGRADED);
181
+ const asked = body?.channelCodes?.length
182
+ ? body.channelCodes
183
+ : ALL;
184
+ const failing = scene === 'empty' ? [] : asked.filter((c) => down.includes(c));
185
+ const where = String(body?.destination ?? '').toLowerCase();
186
+ const hotels = scene === 'empty'
187
+ ? []
188
+ : FAKE_HOTELS.filter((h) => asked.includes(h.providerCode ?? '') &&
189
+ !failing.includes(h.providerCode ?? '') &&
190
+ (!where ||
191
+ String(h.city).toLowerCase().includes(where) ||
192
+ (where === 'shanghai' && h.city === '上海') ||
193
+ String(h.name).toLowerCase().includes(where)));
194
+ return json({
195
+ code: 200,
196
+ msg: '操作成功',
197
+ data: {
198
+ totalCount: hotels.length,
199
+ queriedProviders: asked,
200
+ successProviders: asked.filter((c) => !failing.includes(c)),
201
+ degradedProviders: failing,
202
+ executionTimes: Object.fromEntries(asked.map((c) => [c, 200])),
203
+ hotels,
204
+ },
205
+ });
206
+ }
207
+ if (url.pathname === '/api/v1/ota/rooms' && method === 'GET') {
208
+ const id = url.searchParams.get('unifiedHotelId') ?? '';
209
+ return json({ code: 200, msg: '操作成功', data: FAKE_ROOMS[id] ?? [] });
210
+ }
211
+ if (url.pathname === '/api/v1/ota/rooms/quote' && method === 'POST') {
212
+ const room = (FAKE_ROOMS[String(body?.unifiedHotelId)] ?? []).find((r) => r.unifiedRoomId === `${String(body?.unifiedHotelId).split(':')[0]}:${body?.roomId}`);
213
+ if (!room?.price)
214
+ return json({ code: 500, msg: '房型不存在' });
215
+ const n = nightsBetween(String(body?.checkIn), String(body?.checkOut));
216
+ const total = Number(room.price.originalAmount) * n * Number(body?.roomCount ?? 1);
217
+ return json({
218
+ code: 200,
219
+ msg: '操作成功',
220
+ data: price(total, room.price.originalCurrency, `共${n}晚总价,已含税费及服务费`),
221
+ });
222
+ }
223
+ return json({ code: 404, msg: 'Not Found' }, 404);
224
+ });
225
+ return {
226
+ fetch: fetchFake,
227
+ calls,
228
+ scene: (s) => {
229
+ scene = s;
230
+ },
231
+ degrade: (codes) => {
232
+ down = codes;
233
+ },
234
+ refuseNextAsRepeat: () => {
235
+ repeat = true;
236
+ },
237
+ };
238
+ };
239
+ //# sourceMappingURL=fake.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fake.js","sourceRoot":"","sources":["../../src/otaless/fake.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { HotelConfig } from '../config.js';
2
+ import type { Made, SupplierContext } from '../supplier.js';
3
+ export declare const makeOtaless: (data: HotelConfig["data"], ctx: SupplierContext) => Made;
4
+ //# sourceMappingURL=make.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make.d.ts","sourceRoot":"","sources":["../../src/otaless/make.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAkB5D,eAAO,MAAM,WAAW,GAAI,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,eAAe,KAAG,IA4D7E,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { logoUrlOf } from '../aggregate/make.js';
2
+ import { createOtalessHotels } from './backend.js';
3
+ import { createOtalessClient } from './client.js';
4
+ // The Otaless hotel market as a config's `data` section (robin, 2026-11-03):
5
+ //
6
+ // "data": {
7
+ // "source": "otaless",
8
+ // "otaless": {
9
+ // "baseUrl": "https://apidev.curless.ai", "tenant": "207650",
10
+ // "groups": [{ "code": "atour", "name": "Atour", "names": { "zh": "亚朵" } }]
11
+ // }
12
+ // }
13
+ //
14
+ // `OTALESS_API_URL` and `OTALESS_TENANT_ID` in the environment win over both.
15
+ const CODE = /^[a-z0-9][a-z0-9-]{0,39}$/;
16
+ export const makeOtaless = (data, ctx) => {
17
+ const o = data.otaless ?? {};
18
+ const prefix = o.envPrefix ?? 'OTALESS';
19
+ const baseUrl = ctx.env[`${prefix}_API_URL`]?.trim() || o.baseUrl?.trim();
20
+ const tenant = ctx.env[`${prefix}_TENANT_ID`]?.trim() || o.tenant?.trim();
21
+ if (!baseUrl || !/^https?:\/\//.test(baseUrl)) {
22
+ throw new Error(`${ctx.brand}: data.source "otaless" needs the backend's address - ${prefix}_API_URL, or data.otaless.baseUrl`);
23
+ }
24
+ if (!tenant) {
25
+ throw new Error(`${ctx.brand}: data.source "otaless" needs the tenant id - ${prefix}_TENANT_ID, or data.otaless.tenant`);
26
+ }
27
+ const groups = (o.groups ?? []).map((g) => {
28
+ // ⚠️ THE CODE IS AN ADDRESS TOO: a group's logo is /suppliers/<code>/logo.png.
29
+ if (!CODE.test(g.code ?? '')) {
30
+ throw new Error(`${ctx.brand}: data.otaless.groups code "${String(g.code)}" must be the backend's providerCode: lower-case letters, digits and -`);
31
+ }
32
+ if (!g.name?.trim())
33
+ throw new Error(`${ctx.brand}: data.otaless.groups "${g.code}" needs a name`);
34
+ const logoUrl = ctx.publicUrl
35
+ ? logoUrlOf(ctx.publicUrl, g.code, g.logoFile, ctx.configPath)
36
+ : undefined;
37
+ return {
38
+ code: g.code,
39
+ name: g.name.trim(),
40
+ ...(g.names ? { names: g.names } : {}),
41
+ ...(logoUrl ? { logoUrl } : {}),
42
+ };
43
+ });
44
+ if (new Set(groups.map((g) => g.code)).size !== groups.length) {
45
+ throw new Error(`${ctx.brand}: data.otaless.groups names one code twice`);
46
+ }
47
+ const client = createOtalessClient({
48
+ baseUrl,
49
+ tenant,
50
+ ...(ctx.fetch ? { fetch: ctx.fetch } : {}),
51
+ now: ctx.now,
52
+ ...(data.timeoutMs ? { timeoutMs: data.timeoutMs } : {}),
53
+ });
54
+ const state = ctx.state.file('otaless-hotels.json');
55
+ const backend = createOtalessHotels({
56
+ brand: ctx.brand,
57
+ client,
58
+ groups,
59
+ ...(state ? { state } : {}),
60
+ });
61
+ return {
62
+ backend: data.reference ? { ...backend, reference: data.reference } : backend,
63
+ // The backend sends no picture (§8.2), so the card loads none.
64
+ imageDomains: () => [],
65
+ // Not known until a search: the home is never "the deployment's few hotels".
66
+ hotelCount: () => 0,
67
+ health: () => ({ backend: new URL(baseUrl).host, tenant }),
68
+ ready: () => Promise.resolve(),
69
+ };
70
+ };
71
+ //# sourceMappingURL=make.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make.js","sourceRoot":"","sources":["../../src/otaless/make.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"paid.d.ts","sourceRoot":"","sources":["../src/paid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAmBlD,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/C,oHAAoH;AACpH,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,GAAG,IAAI,KAAG,QAqBjD,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,UAAU,QAAwC,CAAC;AAEhE,2GAA2G;AAC3G,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,MAAM,KAAK,CAAC;AAQzB,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAClE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,yGAAyG;IACzG,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,UAAU,GAAU,GAAG,OAAO,KAAG,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAuBxF,CAAC;AAEF,iHAAiH;AACjH,KAAK,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC,GAAG;IAClF,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAWF,eAAO,MAAM,QAAQ,GAAI,GAAG,KAAK,KAAG,MAkRnC,CAAC"}
1
+ {"version":3,"file":"paid.d.ts","sourceRoot":"","sources":["../src/paid.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAmBlD,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/C,oHAAoH;AACpH,eAAO,MAAM,QAAQ,GAAI,SAAS,MAAM,GAAG,IAAI,KAAG,QAqBjD,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,UAAU,QAAwC,CAAC;AAEhE,2GAA2G;AAC3G,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,MAAM,KAAK,CAAC;AAQzB,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC;IAClE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,yGAAyG;IACzG,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,+EAA+E;AAC/E,eAAO,MAAM,UAAU,GAAU,GAAG,OAAO,KAAG,OAAO,CAAC;IAAE,MAAM,EAAE,GAAG,GAAG,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAuBxF,CAAC;AAEF,iHAAiH;AACjH,KAAK,KAAK,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC,GAAG;IAClF,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAQF,eAAO,MAAM,QAAQ,GAAI,GAAG,KAAK,KAAG,MAmRnC,CAAC"}
package/dist/paid.js CHANGED
@@ -63,8 +63,6 @@ export const paidAnswer = async (a) => {
63
63
  const hant = Converter({ from: 'cn', to: 'twp' });
64
64
  /** A name keeps its own words - characters only (see names.ts). */
65
65
  const hantName = Converter({ from: 'cn', to: 'tw' });
66
- /** A hotel's mark of being simulated or a test - said once, by the page, not inside its name. */
67
- const MARKED = /^\s*[【[]\s*(模拟|simulated|测试|test)\s*[】\]]\s*/i;
68
66
  const hasCJK = (t) => /[㐀-鿿]/.test(t);
69
67
  export const paidPage = (d) => {
70
68
  const zh = d.lang !== 'en';
@@ -189,12 +187,15 @@ export const paidPage = (d) => {
189
187
  ],
190
188
  ]
191
189
  : [];
190
+ // ⚠️ NO BADGE, ONLY WHAT HAPPENED (robin, 2026-11-03: 「不用特意写不是真的」): the
191
+ // page said 「模拟」 / 「测试环境」 in its corner; now it says the booking's fact -
192
+ // not sent to the group, or in its own system holding no room - and that no real
193
+ // money moved.
192
194
  const env = d.env
193
195
  ? {
194
- badge: d.env === 'test' ? say('Test system', '测试环境') : say('Simulated', '模拟'),
195
196
  note: d.env === 'test'
196
- ? say(`A test booking in ${d.brand}'s test system: no room is held for anyone, and it was paid in test mode with a test card - no real money moved.`, `这是${group}测试环境里的测试单,不给任何人留房;用测试卡在测试模式下付款,没有真实扣款。`)
197
- : say(`A test booking in a simulated copy of ${d.brand}'s system, not a reservation: paid in test mode with a test card - no real money moved.`, `这是${group}系统模拟副本里的测试单,不是真实预订;用测试卡在测试模式下付款,没有真实扣款。`),
197
+ ? say('This booking holds no room for anyone, and no real money moved.', '这笔预订不会为任何人保留房间,也没有真实扣款。')
198
+ : say(`This booking was not sent to ${d.brand}, and no real money moved.`, `这笔预订没有发到${group},也没有真实扣款。`),
198
199
  }
199
200
  : undefined;
200
201
  const refresh = waiting && d.session
@@ -244,8 +245,6 @@ ${refresh}<title>${esc(words.title)} · ${esc(d.brand)}</title>
244
245
  .top { display: flex; align-items: center; gap: 10px; padding-bottom: 18px; border-bottom: 1px solid var(--line); }
245
246
  .logo { height: 28px; width: auto; display: block; }
246
247
  .brand { font-weight: 760; letter-spacing: -0.01em; color: var(--brand); }
247
- .env { margin-left: auto; font-size: 11.5px; font-weight: 650; padding: 3px 9px; border-radius: 999px;
248
- background: var(--wait-bg); color: var(--wait); white-space: nowrap; }
249
248
  .mark { width: 46px; height: 46px; margin: 22px 0 14px; border-radius: 999px; display: grid; place-items: center; }
250
249
  .mark svg { width: 24px; height: 24px; }
251
250
  .mark.ok { background: var(--ok-bg); color: var(--ok); }
@@ -265,7 +264,7 @@ ${refresh}<title>${esc(words.title)} · ${esc(d.brand)}</title>
265
264
  </style>
266
265
  </head><body>
267
266
  <main class="card">
268
- <div class="top">${logo}${env ? `<span class="env">${esc(env.badge)}</span>` : ''}</div>
267
+ <div class="top">${logo}</div>
269
268
  <div class="mark ${words.mark}">${MARKS[words.mark]}</div>
270
269
  <h1>${esc(words.title)}</h1>
271
270
  <p class="lead">${esc(words.lead)}</p>
@@ -306,7 +305,8 @@ const hotelSaid = (f, lang) => {
306
305
  : lang === 'zh-Hant'
307
306
  ? (n?.['zh-Hant'] ?? hantName(n?.zh ?? f.hotelName))
308
307
  : (n?.en ?? f.hotelName);
309
- return name.replace(MARKED, '');
308
+ // As the group gives it, its own mark and all (robin, 2026-11-03).
309
+ return name;
310
310
  };
311
311
  /** "Sun 25 Oct → Tue 27 Oct · 2 nights" / "10月25日周日 至 10月27日周二 · 2 晚" - the hotel's own dates, never moved by a clock. */
312
312
  const staySaid = (s, lang) => {
package/dist/paid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paid.js","sourceRoot":"","sources":["../src/paid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paid.js","sourceRoot":"","sources":["../src/paid.ts"],"names":[],"mappings":"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"}