@curless/hotel-storefront 0.49.0 → 0.49.2
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/dist/backend.d.ts +1 -1
- package/dist/card.generated.d.ts +1 -1
- package/dist/card.generated.js +2 -2
- package/dist/card.generated.js.map +1 -1
- package/dist/config.d.ts +16 -18
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/huazhu/backend.d.ts +2 -2
- package/dist/huazhu/backend.d.ts.map +1 -1
- package/dist/huazhu/backend.js +31 -61
- package/dist/huazhu/backend.js.map +1 -1
- package/dist/huazhu/bookings.d.ts +8 -5
- package/dist/huazhu/bookings.d.ts.map +1 -1
- package/dist/huazhu/bookings.js +1 -1
- package/dist/huazhu/bookings.js.map +1 -1
- package/dist/huazhu/catalog.d.ts +0 -1
- package/dist/huazhu/catalog.d.ts.map +1 -1
- package/dist/huazhu/catalog.js +7 -28
- package/dist/huazhu/catalog.js.map +1 -1
- package/dist/huazhu/check.d.ts +1 -1
- package/dist/huazhu/make.d.ts.map +1 -1
- package/dist/huazhu/make.js +6 -32
- package/dist/huazhu/make.js.map +1 -1
- package/dist/huazhu/sellable.d.ts.map +1 -1
- package/dist/huazhu/sellable.js +4 -3
- package/dist/huazhu/sellable.js.map +1 -1
- package/dist/legal.d.ts.map +1 -1
- package/dist/legal.js +9 -15
- package/dist/legal.js.map +1 -1
- package/dist/payments/checkout.d.ts +10 -70
- package/dist/payments/checkout.d.ts.map +1 -1
- package/dist/payments/checkout.js +14 -131
- package/dist/payments/checkout.js.map +1 -1
- package/dist/payments/stripe-checkout.js +4 -4
- package/dist/payments/stripe-checkout.js.map +1 -1
- package/dist/present.d.ts +5 -0
- package/dist/present.d.ts.map +1 -1
- package/dist/present.js +8 -0
- package/dist/present.js.map +1 -1
- package/dist/same-booking.d.ts.map +1 -1
- package/dist/same-booking.js +6 -5
- package/dist/same-booking.js.map +1 -1
- package/dist/server.d.ts +3 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +9 -3
- package/dist/server.js.map +1 -1
- package/dist/sessions.d.ts +26 -1
- package/dist/sessions.d.ts.map +1 -1
- package/dist/sessions.js +35 -2
- package/dist/sessions.js.map +1 -1
- package/dist/supplier.d.ts +4 -1
- package/dist/supplier.d.ts.map +1 -1
- package/dist/supplier.js.map +1 -1
- package/dist/surface.js +2 -2
- package/dist/surface.js.map +1 -1
- package/dist/tools.d.ts +18 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +70 -3
- package/dist/tools.js.map +1 -1
- package/dist/types.d.ts +5 -4
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/payments/fake-gateway.d.ts +0 -43
- package/dist/payments/fake-gateway.d.ts.map +0 -1
- package/dist/payments/fake-gateway.js +0 -135
- package/dist/payments/fake-gateway.js.map +0 -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,
|
|
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,k0jlCAAk0jlC,EACl0jlC,QAAQ,CACT,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAEnB,6GAA6G;AAC7G,MAAM,CAAC,MAAM,qBAAqB,GAChC,kEAAkE,CAAC;AAErE,0GAA0G;AAC1G,MAAM,CAAC,MAAM,qBAAqB,GAChC,iLAAiL,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -289,29 +289,27 @@ export type ApiSource = {
|
|
|
289
289
|
*/
|
|
290
290
|
hourly?: boolean;
|
|
291
291
|
/**
|
|
292
|
-
* Sell rates paid in advance, the money taken on
|
|
293
|
-
*
|
|
294
|
-
*
|
|
295
|
-
*
|
|
296
|
-
* is `<prefix>
|
|
292
|
+
* Sell rates paid in advance, the money taken on Stripe's own hosted
|
|
293
|
+
* Checkout page (test mode only) before Huazhu is asked. Only the SIMULATED
|
|
294
|
+
* Huazhu (`sandbox`) or Huazhu's own test environment (`test`) may turn it
|
|
295
|
+
* on, until robin decides who takes the money: any other config that sets
|
|
296
|
+
* this does not start. The Stripe test key is `<prefix>_STRIPE_KEY` in the
|
|
297
|
+
* environment, never here.
|
|
297
298
|
*/
|
|
298
299
|
prepaid?: {
|
|
299
300
|
/**
|
|
300
|
-
* Who takes the money: the
|
|
301
|
-
*
|
|
302
|
-
*
|
|
303
|
-
*
|
|
301
|
+
* Who takes the money: Stripe directly, the only one - its hosted Checkout
|
|
302
|
+
* page and refunds, test mode only (robin, 2026-10-15: Curless's acquiring
|
|
303
|
+
* is not connected yet, and no merchant can be opened there). Required: a
|
|
304
|
+
* config that leaves it out does not start. The agentbank gateway's own
|
|
305
|
+
* checkout was removed 2026-10-29 (code-health audit D3).
|
|
306
|
+
*/
|
|
307
|
+
provider: 'stripe';
|
|
308
|
+
/**
|
|
309
|
+
* Where Stripe sends the guest back after turning back from its page.
|
|
310
|
+
* Default: the connector's own `/docs` page, when it has a public URL.
|
|
304
311
|
*/
|
|
305
|
-
provider?: 'gateway' | 'stripe';
|
|
306
|
-
/** The gateway, e.g. https://mcp.curless.ai. Needed for `gateway`. */
|
|
307
|
-
gatewayUrl?: string;
|
|
308
|
-
/** The Curless merchant the money is taken for (a test-mode one). Needed for `gateway`. */
|
|
309
|
-
merchantId?: string;
|
|
310
|
-
/** On the paying page as whose order it is. Default: the brand. */
|
|
311
|
-
merchantName?: string;
|
|
312
312
|
merchantUrl?: string;
|
|
313
|
-
/** Only `card` is taken yet. */
|
|
314
|
-
method?: 'card';
|
|
315
313
|
/**
|
|
316
314
|
* A second way to pay a prepaid rate: UnionPay's page, whose one-time card
|
|
317
315
|
* the hotel's system charges (Huazhu's CCPN) - robin, 2026-10-15: "OPN 走
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAuPA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAuPA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAU,CAAC;AA0K1F,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;QAChD,uEAAuE;QACvE,2EAA2E;QAC3E,6CAA6C;QAC7C,eAAe,EAAE,OAAO,MAAM,uBAAuB;QACrD,yEAAyE;QACzE,0EAA0E;QAC1E,2EAA2E;QAC3E,0EAA0E;QAC1E,uEAAuE;QACvE,QAAQ,EAAE,QAAQ,MAAM,MAAM;QAC9B,UAAU,EAAE,eAAe,MAAM,MAAM;KAC/B,CAAC;AACb,CAAC,CAAC"}
|
package/dist/huazhu/backend.d.ts
CHANGED
|
@@ -33,8 +33,8 @@ export type HuazhuHotelsOptions = {
|
|
|
33
33
|
testEnvironment?: boolean;
|
|
34
34
|
hourly?: boolean;
|
|
35
35
|
/**
|
|
36
|
-
* Sell rates paid in advance, taking the money
|
|
37
|
-
*
|
|
36
|
+
* Sell rates paid in advance, taking the money on Stripe's checkout page
|
|
37
|
+
* before Huazhu is asked (`OPN`). A sandbox only - see `ApiSource.prepaid`.
|
|
38
38
|
*/
|
|
39
39
|
prepaid?: {
|
|
40
40
|
checkout: Checkout;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/huazhu/backend.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,mBAAmB,EAExB,KAAK,YAAY,EASlB,MAAM,eAAe,CAAC;AAavB,OAAO,EAEL,KAAK,aAAa,EAKnB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,QAAQ,EAAiC,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAGL,KAAK,eAAe,EAIrB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/huazhu/backend.ts"],"names":[],"mappings":"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"}
|
package/dist/huazhu/backend.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { randomBytes, randomUUID } from 'node:crypto';
|
|
2
2
|
import { DEFAULT_PAGE, MAX_PAGE, REQUEST_KINDS, REQUEST_NOTE_MAX, guestTooLong, partyNeedsOf, } from '../backend.js';
|
|
3
3
|
import { addDays, arrivalInstant, atHotelTime, nights as nightsBetween, stayProblem, stayProblemOf, todayAt, } from '../dates.js';
|
|
4
4
|
import { byWords, splitByStay } from '../demo-hotels.js';
|
|
@@ -8,6 +8,7 @@ import { BOOKING_LIMITS, DAY_MS, HOUR_MS, UNPAID_PER_STRICT, WindowCounter, } fr
|
|
|
8
8
|
import { formatMoney, minorFactor, money, multiplyMoney, toMinor } from '../money.js';
|
|
9
9
|
import { UnionPayError, expiryMMyy, lastFour, } from '../payments/unionpay.js';
|
|
10
10
|
import { bedKindsOf } from '../room-filters.js';
|
|
11
|
+
import { SAME_BOOKING_MS, guestDigest, singleFlight } from '../same-booking.js';
|
|
11
12
|
import { MAX_ROOMS_PER_LINE, quoteLineKey } from '../trip.js';
|
|
12
13
|
import { IN_REQUEST_AT_MS, NOT_FOUND, StoreWriteError, nextCheckAt, statusOf, } from './bookings.js';
|
|
13
14
|
import { describePolicy, feeFor, freeUntilOf, nightAuditOf, parseCancelPolicy, penaltyAt, phasesOf, refundableFrom, stepsOf, } from './cancel-policy.js';
|
|
@@ -62,8 +63,6 @@ export const newPublicCode = (taken) => {
|
|
|
62
63
|
return code;
|
|
63
64
|
}
|
|
64
65
|
};
|
|
65
|
-
/** The same booking asked for again this soon - same conversation, email, stays and guest (`tripKey`) - is answered with the first. */
|
|
66
|
-
const SAME_TRIP_MS = 10 * 60_000;
|
|
67
66
|
/**
|
|
68
67
|
* The most hotels priced for one search. A city can hold hundreds of Huazhu
|
|
69
68
|
* hotels, and every one priced is two calls to Huazhu; past this, the page is
|
|
@@ -563,43 +562,23 @@ export const createHuazhuHotels = (opts) => {
|
|
|
563
562
|
const unpaidAsk = (b) => !!b.prepaid &&
|
|
564
563
|
!paidInAdvance(b.prepaid) &&
|
|
565
564
|
(b.status === 'awaiting-payment' || b.status === 'expired');
|
|
566
|
-
/**
|
|
567
|
-
const
|
|
565
|
+
/** Every booking request asked and not yet answered - what `drain` waits for. */
|
|
566
|
+
const asking = new Set();
|
|
568
567
|
/** Set by `drain`: a stopping process starts no booking. */
|
|
569
568
|
let closing = false;
|
|
570
569
|
/**
|
|
571
|
-
* One booking request at a time per conversation and per email
|
|
572
|
-
*
|
|
573
|
-
*
|
|
574
|
-
*
|
|
575
|
-
*
|
|
576
|
-
* audit, P1-2). The second waits for the first, then finds its trip
|
|
577
|
-
* already booked.
|
|
570
|
+
* One booking request at a time per conversation and per email - the shared
|
|
571
|
+
* `singleFlight` (`../same-booking.js`), whose reasons it keeps (2026-10-05
|
|
572
|
+
* audit, P1-2: two at once booked twice). Every request asked through it is
|
|
573
|
+
* also remembered in `asking` until it is answered, for `drain`: the shared
|
|
574
|
+
* helper keeps its locks to itself.
|
|
578
575
|
*/
|
|
579
|
-
const
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
if (busy.length === 0)
|
|
586
|
-
break;
|
|
587
|
-
await Promise.allSettled(busy);
|
|
588
|
-
}
|
|
589
|
-
// Nothing awaited between the check above and these lines: no other
|
|
590
|
-
// request can slip in.
|
|
591
|
-
const p = run();
|
|
592
|
-
const done = p.then(() => undefined, () => undefined);
|
|
593
|
-
for (const k of keys)
|
|
594
|
-
flights.set(k, done);
|
|
595
|
-
try {
|
|
596
|
-
return await p;
|
|
597
|
-
}
|
|
598
|
-
finally {
|
|
599
|
-
for (const k of keys)
|
|
600
|
-
if (flights.get(k) === done)
|
|
601
|
-
flights.delete(k);
|
|
602
|
-
}
|
|
576
|
+
const sameBooking = singleFlight();
|
|
577
|
+
const single = (keys, run) => {
|
|
578
|
+
const asked = sameBooking(keys, run);
|
|
579
|
+
asking.add(asked);
|
|
580
|
+
void asked.finally(() => asking.delete(asked)).catch(() => { });
|
|
581
|
+
return asked;
|
|
603
582
|
};
|
|
604
583
|
// ------------------------------------------------------------- lookups ----
|
|
605
584
|
/**
|
|
@@ -1728,8 +1707,6 @@ export const createHuazhuHotels = (opts) => {
|
|
|
1728
1707
|
* matched by.
|
|
1729
1708
|
*/
|
|
1730
1709
|
const conversationOf = (who) => who.tripOwner ?? who.sessionId;
|
|
1731
|
-
/** A name for a booking in what the guest is told. */
|
|
1732
|
-
const named = (b) => `${b.hotelName} (${b.confirmationCode})`;
|
|
1733
1710
|
/**
|
|
1734
1711
|
* A booking that still counts against the limits on bookings still to come
|
|
1735
1712
|
* (`perEmailLive`, `perConversationLive`) - and the one set the guest is told
|
|
@@ -1778,7 +1755,7 @@ export const createHuazhuHotels = (opts) => {
|
|
|
1778
1755
|
.filter((b) => b.tripKey === tripKey &&
|
|
1779
1756
|
b.owners.includes(conversationOf(who)) &&
|
|
1780
1757
|
b.guest.email.trim().toLowerCase() === email &&
|
|
1781
|
-
now() - Date.parse(b.createdAt) <
|
|
1758
|
+
now() - Date.parse(b.createdAt) < SAME_BOOKING_MS &&
|
|
1782
1759
|
isLive(b));
|
|
1783
1760
|
const ref = earlier[0]?.tripRef;
|
|
1784
1761
|
const before = ref ? store.intent(ref) : undefined;
|
|
@@ -2062,9 +2039,9 @@ export const createHuazhuHotels = (opts) => {
|
|
|
2062
2039
|
await refundOf(id, said);
|
|
2063
2040
|
};
|
|
2064
2041
|
/**
|
|
2065
|
-
* Gives a guest's money back, in full
|
|
2066
|
-
*
|
|
2067
|
-
*
|
|
2042
|
+
* Gives a guest's money back, in full. Written down with the checkout
|
|
2043
|
+
* session (Stripe's, whose payment intent a refund names) and, once open,
|
|
2044
|
+
* its refund: the two ids the money is found by.
|
|
2068
2045
|
*/
|
|
2069
2046
|
const refundOf = async (id, reason) => {
|
|
2070
2047
|
const row = store.get(id);
|
|
@@ -2104,7 +2081,7 @@ export const createHuazhuHotels = (opts) => {
|
|
|
2104
2081
|
},
|
|
2105
2082
|
});
|
|
2106
2083
|
if (tries >= 8)
|
|
2107
|
-
raise(id, `the guest paid (
|
|
2084
|
+
raise(id, `the guest paid (payment session ${p.sessionId}) and the refund could not be opened`);
|
|
2108
2085
|
}
|
|
2109
2086
|
};
|
|
2110
2087
|
/**
|
|
@@ -2154,8 +2131,8 @@ export const createHuazhuHotels = (opts) => {
|
|
|
2154
2131
|
};
|
|
2155
2132
|
const fee = formatMoney(money(feeMinor, b.quote.total.currency));
|
|
2156
2133
|
const why = byGuest
|
|
2157
|
-
? `cancelled with a fee of ${fee} of the ${formatMoney(b.quote.total)} paid (
|
|
2158
|
-
: `Huazhu shows ${b.distributorResId} cancelled - not by the guest here - after its free period (a fee of ${fee} by its terms) with ${formatMoney(b.quote.total)} paid (
|
|
2134
|
+
? `cancelled with a fee of ${fee} of the ${formatMoney(b.quote.total)} paid (payment session ${p.sessionId}): the difference is owed back, and a part refund is not made here`
|
|
2135
|
+
: `Huazhu shows ${b.distributorResId} cancelled - not by the guest here - after its free period (a fee of ${fee} by its terms) with ${formatMoney(b.quote.total)} paid (payment session ${p.sessionId}): whether the guest is owed it back is to be judged with Huazhu`;
|
|
2159
2136
|
console.error(`[huazhu prepaid ${b.id}] ⚠️ NEEDS A PERSON: ${why}`);
|
|
2160
2137
|
return {
|
|
2161
2138
|
row: {
|
|
@@ -2571,7 +2548,7 @@ export const createHuazhuHotels = (opts) => {
|
|
|
2571
2548
|
if (latest && status !== latest.status)
|
|
2572
2549
|
patch(row.id, {}, { refund: { ...latest, status } });
|
|
2573
2550
|
if (status === 'failed' || status === 'rejected')
|
|
2574
|
-
raise(row.id, `refund ${refund.requestId} of
|
|
2551
|
+
raise(row.id, `refund ${refund.requestId} of payment session ${p.sessionId} came back ${status}: the guest's money is not back`);
|
|
2575
2552
|
}
|
|
2576
2553
|
catch {
|
|
2577
2554
|
// asked again on the next pass
|
|
@@ -2806,7 +2783,7 @@ export const createHuazhuHotels = (opts) => {
|
|
|
2806
2783
|
requestsByConversation.add(conversationOf(who));
|
|
2807
2784
|
const tripRef = randomUUID();
|
|
2808
2785
|
// ⚠️ PAID FIRST, BOOKED AFTER. A stay paid in advance is not asked of
|
|
2809
|
-
// Huazhu until the guest has paid on
|
|
2786
|
+
// Huazhu until the guest has paid on Stripe's checkout page - then
|
|
2810
2787
|
// `settlePrepaid` books it, and gives the money back whole if it cannot.
|
|
2811
2788
|
const prepaidPlan = plans.find((p) => p.sold.res.prepaid);
|
|
2812
2789
|
if (prepaidPlan) {
|
|
@@ -3549,7 +3526,7 @@ export const createHuazhuHotels = (opts) => {
|
|
|
3549
3526
|
closing = true;
|
|
3550
3527
|
// The steps on payments too - a refund or a booking half taken when the
|
|
3551
3528
|
// process stopped was lost (audit P1-3, P0-B).
|
|
3552
|
-
await Promise.allSettled([...
|
|
3529
|
+
await Promise.allSettled([...asking, ...steps]);
|
|
3553
3530
|
},
|
|
3554
3531
|
async searchHotels(q) {
|
|
3555
3532
|
const terms = (q.query ?? '')
|
|
@@ -4082,17 +4059,10 @@ export const createHuazhuHotels = (opts) => {
|
|
|
4082
4059
|
// says it again in other words - 「需要安静的房间」 then 「希望房间安静」 -
|
|
4083
4060
|
// which booked a second room, or opened a second payment. The requests
|
|
4084
4061
|
// are a closed list and the arrival a time; the name and the phone are
|
|
4085
|
-
// the same person written two ways (full-width, spacing) made one.
|
|
4086
|
-
|
|
4087
|
-
|
|
4088
|
-
|
|
4089
|
-
same(guest.name),
|
|
4090
|
-
(guest.phone ?? '').normalize('NFKC').replace(/\D/g, ''),
|
|
4091
|
-
[...(requests?.kinds ?? [])].sort(),
|
|
4092
|
-
requests?.arrivingAt ?? '',
|
|
4093
|
-
]))
|
|
4094
|
-
.digest('hex')
|
|
4095
|
-
.slice(0, 16);
|
|
4062
|
+
// the same person written two ways (full-width, spacing) made one. The
|
|
4063
|
+
// digest is the shared `guestDigest` (`../same-booking.js`, also the
|
|
4064
|
+
// demonstration backend's); the key around it stays this backend's.
|
|
4065
|
+
const whoFor = guestDigest(guest, requests);
|
|
4096
4066
|
const tripKey = `${lines
|
|
4097
4067
|
.map((l) => l.kind === 'room'
|
|
4098
4068
|
? `${l.hotelId}|${l.roomId}|${l.stay.checkIn}|${l.stay.checkOut}|${l.stay.guests}|${l.rooms ?? 1}|${l.hourly?.start ?? ''}`
|
|
@@ -4209,7 +4179,7 @@ export const createHuazhuHotels = (opts) => {
|
|
|
4209
4179
|
: '';
|
|
4210
4180
|
// A booking paid here in advance, in either: the money is a test too.
|
|
4211
4181
|
const paidTestNote = opts.sandbox
|
|
4212
|
-
? ' This is a test booking in the simulated Huazhu, paid in
|
|
4182
|
+
? ' This is a test booking in the simulated Huazhu, paid in Stripe’s test mode: no real money moves.'
|
|
4213
4183
|
: opts.testEnvironment
|
|
4214
4184
|
? ' This is a test booking in Huazhu’s test system, paid in test mode: no real money moves.'
|
|
4215
4185
|
: '';
|
|
@@ -4389,7 +4359,7 @@ export const createHuazhuHotels = (opts) => {
|
|
|
4389
4359
|
cancelledAt: when,
|
|
4390
4360
|
});
|
|
4391
4361
|
const paid = formatMoney(b.quote.total);
|
|
4392
|
-
raise(b.id, `Huazhu answered 5402 (already cancelled) to the cancellation of ${b.distributorResId}, and does not say when it was cancelled, and what cancelling cost was not the same at every moment since the booking was made (the free period ended before this was found, or the terms cannot be read), so what of the ${paid} paid (
|
|
4362
|
+
raise(b.id, `Huazhu answered 5402 (already cancelled) to the cancellation of ${b.distributorResId}, and does not say when it was cancelled, and what cancelling cost was not the same at every moment since the booking was made (the free period ended before this was found, or the terms cannot be read), so what of the ${paid} paid (payment session ${p?.sessionId}) comes back - whole if it was cancelled inside the free period, less the fee if after - is to be judged with Huazhu; nothing was refunded or kept`);
|
|
4393
4363
|
throw new Error(`Huazhu says ${b.confirmationCode} is already cancelled, but not when - and what cancelling costs depends on when - so what comes back of the ${paid} paid cannot be worked out here. The booking is shown as cancelled; nothing has been refunded or kept yet, and a person here is settling it with Huazhu.`);
|
|
4394
4364
|
}
|
|
4395
4365
|
}
|