@curless/hotel-storefront 0.23.2 → 0.24.1

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 (107) hide show
  1. package/README.md +35 -11
  2. package/dist/__tests__/__fixtures__/huazhu-fake.d.ts +2 -0
  3. package/dist/__tests__/__fixtures__/huazhu-fake.d.ts.map +1 -0
  4. package/dist/__tests__/__fixtures__/huazhu-fake.js +3 -0
  5. package/dist/__tests__/__fixtures__/huazhu-fake.js.map +1 -0
  6. package/dist/__tests__/huazhu-backend.test.d.ts +2 -0
  7. package/dist/__tests__/huazhu-backend.test.d.ts.map +1 -0
  8. package/dist/__tests__/huazhu-backend.test.js +434 -0
  9. package/dist/__tests__/huazhu-backend.test.js.map +1 -0
  10. package/dist/__tests__/huazhu-cancel-policy.test.d.ts +2 -0
  11. package/dist/__tests__/huazhu-cancel-policy.test.d.ts.map +1 -0
  12. package/dist/__tests__/huazhu-cancel-policy.test.js +82 -0
  13. package/dist/__tests__/huazhu-cancel-policy.test.js.map +1 -0
  14. package/dist/__tests__/huazhu-sandbox.test.d.ts +2 -0
  15. package/dist/__tests__/huazhu-sandbox.test.d.ts.map +1 -0
  16. package/dist/__tests__/huazhu-sandbox.test.js +172 -0
  17. package/dist/__tests__/huazhu-sandbox.test.js.map +1 -0
  18. package/dist/__tests__/huazhu-sellable.test.d.ts +2 -0
  19. package/dist/__tests__/huazhu-sellable.test.d.ts.map +1 -0
  20. package/dist/__tests__/huazhu-sellable.test.js +192 -0
  21. package/dist/__tests__/huazhu-sellable.test.js.map +1 -0
  22. package/dist/__tests__/server.test.js +129 -4
  23. package/dist/__tests__/server.test.js.map +1 -1
  24. package/dist/__tests__/tool-descriptions.test.js +85 -7
  25. package/dist/__tests__/tool-descriptions.test.js.map +1 -1
  26. package/dist/backend.d.ts +27 -0
  27. package/dist/backend.d.ts.map +1 -1
  28. package/dist/backend.js +7 -0
  29. package/dist/backend.js.map +1 -1
  30. package/dist/card.generated.d.ts +1 -1
  31. package/dist/card.generated.js +2 -2
  32. package/dist/card.generated.js.map +1 -1
  33. package/dist/config.d.ts +64 -4
  34. package/dist/config.d.ts.map +1 -1
  35. package/dist/config.js.map +1 -1
  36. package/dist/facilities.d.ts.map +1 -1
  37. package/dist/facilities.js +7 -5
  38. package/dist/facilities.js.map +1 -1
  39. package/dist/huazhu/backend.d.ts +40 -0
  40. package/dist/huazhu/backend.d.ts.map +1 -0
  41. package/dist/huazhu/backend.js +1318 -0
  42. package/dist/huazhu/backend.js.map +1 -0
  43. package/dist/huazhu/bookings.d.ts +81 -0
  44. package/dist/huazhu/bookings.d.ts.map +1 -0
  45. package/dist/huazhu/bookings.js +189 -0
  46. package/dist/huazhu/bookings.js.map +1 -0
  47. package/dist/huazhu/cancel-policy.d.ts +69 -0
  48. package/dist/huazhu/cancel-policy.d.ts.map +1 -0
  49. package/dist/huazhu/cancel-policy.js +201 -0
  50. package/dist/huazhu/cancel-policy.js.map +1 -0
  51. package/dist/huazhu/catalog.d.ts +75 -0
  52. package/dist/huazhu/catalog.d.ts.map +1 -0
  53. package/dist/huazhu/catalog.js +251 -0
  54. package/dist/huazhu/catalog.js.map +1 -0
  55. package/dist/huazhu/check.d.ts +5 -0
  56. package/dist/huazhu/check.d.ts.map +1 -0
  57. package/dist/huazhu/check.js +170 -0
  58. package/dist/huazhu/check.js.map +1 -0
  59. package/dist/huazhu/client.d.ts +100 -0
  60. package/dist/huazhu/client.d.ts.map +1 -0
  61. package/dist/huazhu/client.js +232 -0
  62. package/dist/huazhu/client.js.map +1 -0
  63. package/dist/huazhu/fake.d.ts +64 -0
  64. package/dist/huazhu/fake.d.ts.map +1 -0
  65. package/dist/huazhu/fake.js +365 -0
  66. package/dist/huazhu/fake.js.map +1 -0
  67. package/dist/huazhu/sandbox.d.ts +26 -0
  68. package/dist/huazhu/sandbox.d.ts.map +1 -0
  69. package/dist/huazhu/sandbox.js +289 -0
  70. package/dist/huazhu/sandbox.js.map +1 -0
  71. package/dist/huazhu/sellable.d.ts +81 -0
  72. package/dist/huazhu/sellable.d.ts.map +1 -0
  73. package/dist/huazhu/sellable.js +219 -0
  74. package/dist/huazhu/sellable.js.map +1 -0
  75. package/dist/huazhu/wire.d.ts +389 -0
  76. package/dist/huazhu/wire.d.ts.map +1 -0
  77. package/dist/huazhu/wire.js +72 -0
  78. package/dist/huazhu/wire.js.map +1 -0
  79. package/dist/index.js +18 -4
  80. package/dist/index.js.map +1 -1
  81. package/dist/legal.d.ts +4 -3
  82. package/dist/legal.d.ts.map +1 -1
  83. package/dist/legal.js +71 -30
  84. package/dist/legal.js.map +1 -1
  85. package/dist/lib.d.ts +8 -3
  86. package/dist/lib.d.ts.map +1 -1
  87. package/dist/lib.js +8 -1
  88. package/dist/lib.js.map +1 -1
  89. package/dist/server.d.ts +20 -8
  90. package/dist/server.d.ts.map +1 -1
  91. package/dist/server.js +132 -28
  92. package/dist/server.js.map +1 -1
  93. package/dist/surface.d.ts +2 -1
  94. package/dist/surface.d.ts.map +1 -1
  95. package/dist/surface.js +42 -10
  96. package/dist/surface.js.map +1 -1
  97. package/dist/tools.d.ts +33 -20
  98. package/dist/tools.d.ts.map +1 -1
  99. package/dist/tools.js +122 -11
  100. package/dist/tools.js.map +1 -1
  101. package/dist/types.d.ts +21 -2
  102. package/dist/types.d.ts.map +1 -1
  103. package/dist/vocab.d.ts +5 -0
  104. package/dist/vocab.d.ts.map +1 -1
  105. package/dist/vocab.js +2 -1
  106. package/dist/vocab.js.map +1 -1
  107. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"card.generated.js","sourceRoot":"","sources":["../src/card.generated.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,wEAAwE;AACxE,gFAAgF;AAChF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAW,MAAM,CAAC,IAAI,CAChD,83gYAA83gY,EAC93gY,QAAQ,CACT,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEnB,2FAA2F;AAC3F,MAAM,CAAC,MAAM,qBAAqB,GAChC,kEAAkE,CAAC"}
1
+ {"version":3,"file":"card.generated.js","sourceRoot":"","sources":["../src/card.generated.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,wEAAwE;AACxE,gFAAgF;AAChF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,eAAe,GAAW,MAAM,CAAC,IAAI,CAChD,8+iYAA8+iY,EAC9+iY,QAAQ,CACT,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEnB,2FAA2F;AAC3F,MAAM,CAAC,MAAM,qBAAqB,GAChC,kEAAkE,CAAC"}
package/dist/config.d.ts CHANGED
@@ -49,14 +49,14 @@ export type HotelConfig = {
49
49
  * `demo` - read `file` and price it ourselves. Every rate it answers with is
50
50
  * marked as a demonstration value, in the tool output and on the card, so
51
51
  * nobody can mistake it for a rate they could book.
52
- * `api` - the group's own booking API. Not implemented yet; named here so
53
- * the config does not have to change when it lands.
52
+ * `api` - the group's own booking system, named in `api`. Real rooms, real
53
+ * rates, real bookings: nothing on the card or in the tools says "demo".
54
54
  */
55
55
  source: 'demo' | 'api';
56
56
  /** Demo only: the hotels file, resolved against the config file's directory. */
57
57
  file?: string;
58
- /** api only: where it answers. The key comes from the environment. */
59
- baseUrl?: string;
58
+ /** api only: which system, and how to reach it. */
59
+ api?: ApiSource;
60
60
  /**
61
61
  * demo only: how many minutes a booking request holds its rooms.
62
62
  *
@@ -104,6 +104,66 @@ export type HotelConfig = {
104
104
  updated?: string;
105
105
  };
106
106
  };
107
+ /**
108
+ * A group's own booking system. One kind today - Huazhu's distributor API -
109
+ * and the next group's is another member of this union, not another config
110
+ * shape.
111
+ *
112
+ * ⚠️ NO SECRET GOES HERE. The client id, the secret and the distributor id
113
+ * arrive through the environment, named by `envPrefix`: a config lives in the
114
+ * group's repository, where their people read it.
115
+ */
116
+ export type ApiSource = {
117
+ provider: 'huazhu';
118
+ /** The business endpoints: https://<bizdomain>. */
119
+ baseUrl: string;
120
+ /** The token issuer: https://<authservicedomain>, which serves POST /oauth/token. */
121
+ authUrl: string;
122
+ /**
123
+ * A TEST deployment: `baseUrl` and `authUrl` answer from the simulated
124
+ * provider (`huazhu/sandbox.ts`), not the group's own system. The payloads
125
+ * then say `demo`, the card prints its strip, and the instructions and the
126
+ * pages say that nothing booked here is a reservation - the hotels, rates and
127
+ * bookings are the simulation's.
128
+ *
129
+ * ⚠️ Without this flag an api source is taken to be real, and every page
130
+ * says the booking went to the group: a sandbox that forgot it would tell a
131
+ * tester they hold a real room.
132
+ */
133
+ sandbox?: boolean;
134
+ /**
135
+ * A directory this deployment may WRITE: the copy of the hotel list and the
136
+ * bookings it made. Absolute, or against the config file's directory - and
137
+ * outside a read-only mount of the group's repository. `HOTEL_STATE_DIR` in
138
+ * the environment overrides it, which is how a deployment moves it there.
139
+ */
140
+ stateDir: string;
141
+ /**
142
+ * `<prefix>_CLIENT_ID`, `<prefix>_CLIENT_SECRET`, `<prefix>_DISTRIBUTOR_ID`.
143
+ * Default `HUAZHU`.
144
+ */
145
+ envPrefix?: string;
146
+ /**
147
+ * How our bookings are settled, which the contract decides. `NGPL`: nobody
148
+ * guarantees the booking and the guest pays at the hotel. `OGPL`: WE
149
+ * guarantee it - a no-show is billed to us - and the guest pays at the hotel.
150
+ * Default `NGPL`. The prepaid kinds are not offered: this connector takes no
151
+ * money.
152
+ */
153
+ paymentType?: 'NGPL' | 'OGPL';
154
+ /** Only these hotel ids, for a deployment that sells some of what the list offers. */
155
+ hotels?: string[];
156
+ /** Names and addresses in Chinese (the records' own) or English where the record has it. Default `zh`. */
157
+ language?: 'zh' | 'en';
158
+ /** The hotels' clock. Default `Asia/Shanghai` - Huazhu's records carry no zone. */
159
+ timezone?: string;
160
+ /**
161
+ * Rate tags that limit who may see a rate - students, first stays, coupon
162
+ * holders. None is shown unless named here, because the contract puts the
163
+ * loss of showing one to the wrong guest on us.
164
+ */
165
+ allowTags?: string[];
166
+ };
107
167
  /**
108
168
  * The tool names this config produces.
109
169
  *
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAC;IAEX,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IAEd,qDAAqD;IACrD,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB;;;;;;WAMG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,sFAAsF;QACtF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,iCAAiC;IACjC,IAAI,EAAE;QACJ;;;;;;WAMG;QACH,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;QACvB,gFAAgF;QAChF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,sEAAsE;QACtE,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB;;;;;WAKG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;;;;OAKG;IACH,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;KACzB,CAAC;IAEF,2GAA2G;IAC3G,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,6EAA6E;QAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,KAAK,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mEAAmE;QACnE,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAQF;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;CAiC5D,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,sFAAsF;IACtF,EAAE,EAAE,MAAM,CAAC;IAEX,oFAAoF;IACpF,KAAK,EAAE,MAAM,CAAC;IAEd,qDAAqD;IACrD,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB;;;;;;WAMG;QACH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE;QACP,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,sFAAsF;QACtF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IAEF,iCAAiC;IACjC,IAAI,EAAE;QACJ;;;;;;WAMG;QACH,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;QACvB,gFAAgF;QAChF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,mDAAmD;QACnD,GAAG,CAAC,EAAE,SAAS,CAAC;QAChB;;;;;WAKG;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IAEF;;;;;OAKG;IACH,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;KACzB,CAAC;IAEF,2GAA2G;IAC3G,IAAI,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAEF;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE;QACN,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,6EAA6E;QAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IAEF,KAAK,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,mEAAmE;QACnE,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,EAAE,QAAQ,CAAC;IACnB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,qFAAqF;IACrF,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,0GAA0G;IAC1G,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAQF;;;;;;;GAOG;AACH,eAAO,MAAM,SAAS,GAAI,QAAQ,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC;;;;;;;;;;;;;;;;;;;;CAiC5D,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA0GH,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CACjC,CAAC;KACE,WAAW,EAAE;KACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;KAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAmC,EAAE,EAAE;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;IAC7D,OAAO;QACL,UAAU,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE;QACrC,QAAQ,EAAE,OAAO,MAAM,GAAG,IAAI,EAAE;QAChC,yEAAyE;QACzE,0EAA0E;QAC1E,+CAA+C;QAC/C,MAAM,EAAE,WAAW,MAAM,GAAG,MAAM,EAAE;QACpC,UAAU,EAAE,QAAQ,MAAM,QAAQ;QAClC,SAAS,EAAE,UAAU,MAAM,MAAM;QACjC,QAAQ,EAAE,QAAQ,MAAM,MAAM;QAC9B,SAAS,EAAE,SAAS,MAAM,MAAM;QAChC,cAAc,EAAE,WAAW,MAAM,SAAS;QAC1C,YAAY,EAAE,WAAW,MAAM,UAAU;QACzC,mBAAmB,EAAE,WAAW,MAAM,cAAc;QACpD,aAAa,EAAE,UAAU,MAAM,SAAS;QACxC,yEAAyE;QACzE,kEAAkE;QAClE,aAAa,EAAE,WAAW,MAAM,gBAAgB;QAChD,aAAa,EAAE,UAAU,MAAM,SAAS;QACxC,QAAQ,EAAE,OAAO,MAAM,GAAG,IAAI,WAAW;QACzC,wEAAwE;QACxE,2EAA2E;QAC3E,6DAA6D;QAC7D,OAAO,EAAE,WAAW,MAAM,GAAG,MAAM,EAAE;QACrC,SAAS,EAAE,QAAQ,MAAM,WAAW;QACpC,MAAM,EAAE,WAAW,MAAM,QAAQ;QACjC,OAAO,EAAE,YAAY,MAAM,QAAQ;QACnC,iBAAiB,EAAE,UAAU,MAAM,aAAa;KACxC,CAAC;AACb,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuKH,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE,CACjC,CAAC;KACE,WAAW,EAAE;KACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;KAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE3B;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAmC,EAAE,EAAE;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7E,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,IAAI,OAAO,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;IAC7D,OAAO;QACL,UAAU,EAAE,QAAQ,MAAM,GAAG,MAAM,EAAE;QACrC,QAAQ,EAAE,OAAO,MAAM,GAAG,IAAI,EAAE;QAChC,yEAAyE;QACzE,0EAA0E;QAC1E,+CAA+C;QAC/C,MAAM,EAAE,WAAW,MAAM,GAAG,MAAM,EAAE;QACpC,UAAU,EAAE,QAAQ,MAAM,QAAQ;QAClC,SAAS,EAAE,UAAU,MAAM,MAAM;QACjC,QAAQ,EAAE,QAAQ,MAAM,MAAM;QAC9B,SAAS,EAAE,SAAS,MAAM,MAAM;QAChC,cAAc,EAAE,WAAW,MAAM,SAAS;QAC1C,YAAY,EAAE,WAAW,MAAM,UAAU;QACzC,mBAAmB,EAAE,WAAW,MAAM,cAAc;QACpD,aAAa,EAAE,UAAU,MAAM,SAAS;QACxC,yEAAyE;QACzE,kEAAkE;QAClE,aAAa,EAAE,WAAW,MAAM,gBAAgB;QAChD,aAAa,EAAE,UAAU,MAAM,SAAS;QACxC,QAAQ,EAAE,OAAO,MAAM,GAAG,IAAI,WAAW;QACzC,wEAAwE;QACxE,2EAA2E;QAC3E,6DAA6D;QAC7D,OAAO,EAAE,WAAW,MAAM,GAAG,MAAM,EAAE;QACrC,SAAS,EAAE,QAAQ,MAAM,WAAW;QACpC,MAAM,EAAE,WAAW,MAAM,QAAQ;QACjC,OAAO,EAAE,YAAY,MAAM,QAAQ;QACnC,iBAAiB,EAAE,UAAU,MAAM,aAAa;KACxC,CAAC;AACb,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"facilities.d.ts","sourceRoot":"","sources":["../src/facilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAMrE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,WAAW,SAAS,MAAM,EAAE,EAAE,KAAK,MAAM,KAAG,OAGvE,CAAC"}
1
+ {"version":3,"file":"facilities.d.ts","sourceRoot":"","sources":["../src/facilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,eAAO,MAAM,UAAU,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAMrE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,WAAW,SAAS,MAAM,EAAE,EAAE,KAAK,MAAM,KAAG,OAGvE,CAAC"}
@@ -4,12 +4,14 @@
4
4
  * others. A hotel's own amenity names are matched against these; nothing
5
5
  * here invents an amenity a hotel did not list.
6
6
  */
7
+ // A group whose records are in Chinese names its facilities in Chinese -
8
+ // Huazhu's are 游泳池, SPA, 健身房 - so each also matches the Chinese word.
7
9
  export const FACILITIES = [
8
- { key: 'pool', label: 'Pool', match: /pool/i },
9
- { key: 'spa', label: 'Spa', match: /\bspa\b/i },
10
- { key: 'beach', label: 'Beachfront', match: /beach/i },
11
- { key: 'fitness', label: 'Fitness centre', match: /fitness|gym/i },
12
- { key: 'kids', label: 'Kids club', match: /kids/i },
10
+ { key: 'pool', label: 'Pool', match: /pool|游泳/i },
11
+ { key: 'spa', label: 'Spa', match: /\bspa\b|水疗/i },
12
+ { key: 'beach', label: 'Beachfront', match: /beach|海滩|沙滩/i },
13
+ { key: 'fitness', label: 'Fitness centre', match: /fitness|gym|健身/i },
14
+ { key: 'kids', label: 'Kids club', match: /kids|儿童乐园|儿童俱乐部/i },
13
15
  ];
14
16
  export const hasFacility = (amenities, key) => {
15
17
  const f = FACILITIES.find((x) => x.key === key);
@@ -1 +1 @@
1
- {"version":3,"file":"facilities.js","sourceRoot":"","sources":["../src/facilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAoD;IACzE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;IAC9C,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE;IAC/C,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE;IACtD,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE;IAClE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE;CACpD,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,SAA4B,EAAE,GAAW,EAAW,EAAE;IAChF,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC"}
1
+ {"version":3,"file":"facilities.js","sourceRoot":"","sources":["../src/facilities.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,yEAAyE;AACzE,sEAAsE;AACtE,MAAM,CAAC,MAAM,UAAU,GAAoD;IACzE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE;IACjD,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;IAClD,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE;IAC5D,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACrE,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE;CAC/D,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,SAA4B,EAAE,GAAW,EAAW,EAAE;IAChF,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;IAChD,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type BackendCapabilities, type HotelBackend } from '../backend.js';
2
+ import { type BookingStore, type Reconciler } from './bookings.js';
3
+ import { type Catalog } from './catalog.js';
4
+ import { type HuazhuClient } from './client.js';
5
+ import type { PaymentType } from './wire.js';
6
+ export type HuazhuHotelsOptions = {
7
+ brand: string;
8
+ client: HuazhuClient;
9
+ catalog: Catalog;
10
+ store: BookingStore;
11
+ reconciler: Reconciler;
12
+ /** How our bookings are settled. Only the pay-at-hotel kinds: this connector takes no money. */
13
+ paymentType: Extract<PaymentType, 'NGPL' | 'OGPL'>;
14
+ language: 'zh' | 'en';
15
+ /** The hotels' clock. Huazhu's records carry none; its hotels are in China. */
16
+ tz: string;
17
+ /** Gated rate tags the contract lets this deployment show - see `GATED_TAGS`. */
18
+ allowTags?: string[];
19
+ now?: () => number;
20
+ ariTtlMs?: number;
21
+ productsTtlMs?: number;
22
+ /** How long a booking call's unknown outcome is chased inside the guest's request, before the rest is left to the reconciler. */
23
+ settleWithinMs?: number;
24
+ /** Test hook: how a pause is taken. */
25
+ sleep?: (ms: number) => Promise<void>;
26
+ };
27
+ export declare const HUAZHU_CAPABILITIES: BackendCapabilities;
28
+ /**
29
+ * The most hotels priced for one search. A city can hold hundreds of Huazhu
30
+ * hotels, and every one priced is two calls to Huazhu; past this, the page is
31
+ * priced and a price ORDER or CEILING is not applied - and the answer says so,
32
+ * rather than sorting the twenty it happened to price.
33
+ */
34
+ export declare const PRICE_ALL = 20;
35
+ export declare const createHuazhuHotels: (opts: HuazhuHotelsOptions) => HotelBackend & {
36
+ capabilities: BackendCapabilities;
37
+ imageDomains(): string[];
38
+ health(): Record<string, unknown>;
39
+ };
40
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/huazhu/backend.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,mBAAmB,EAExB,KAAK,YAAY,EAIlB,MAAM,eAAe,CAAC;AA0BvB,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAgC,MAAM,eAAe,CAAC;AAWjG,OAAO,EAAE,KAAK,OAAO,EAA2C,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,KAAK,YAAY,EAAoC,MAAM,aAAa,CAAC;AAWlF,OAAO,KAAK,EAMV,WAAW,EAIZ,MAAM,WAAW,CAAC;AAsBnB,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,gGAAgG;IAChG,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;IACnD,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iIAAiI;IACjI,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,mBAKjC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,SAAS,KAAK,CAAC;AA0H5B,eAAO,MAAM,kBAAkB,GAC7B,MAAM,mBAAmB,KACxB,YAAY,GAAG;IAChB,YAAY,EAAE,mBAAmB,CAAC;IAClC,YAAY,IAAI,MAAM,EAAE,CAAC;IACzB,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CA2tCnC,CAAC"}