@pisell/pisellos 0.10.53 → 0.10.55

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 (68) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +3 -1
  3. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  4. package/dist/modules/BusinessAvailability/index.d.ts +30 -0
  5. package/dist/modules/BusinessAvailability/index.js +204 -0
  6. package/dist/modules/OpenData/index.js +1 -1
  7. package/dist/modules/OpenData/types.d.ts +2 -0
  8. package/dist/modules/Order/index.d.ts +5 -2
  9. package/dist/modules/Order/index.js +320 -247
  10. package/dist/modules/Order/types.d.ts +8 -0
  11. package/dist/modules/Payment/index.js +9 -10
  12. package/dist/plugins/request.d.ts +3 -0
  13. package/dist/server/utils/small-ticket.d.ts +1 -85
  14. package/dist/server/utils/small-ticket.js +2 -2576
  15. package/dist/shared/payment/loadPaymentMethods.d.ts +9 -0
  16. package/dist/shared/payment/loadPaymentMethods.js +66 -0
  17. package/dist/shared/receipt/small-ticket.d.ts +85 -0
  18. package/dist/shared/receipt/small-ticket.js +2576 -0
  19. package/dist/shared/sales/loadSalesOrderSnapshot.d.ts +9 -0
  20. package/dist/shared/sales/loadSalesOrderSnapshot.js +21 -0
  21. package/dist/solution/BaseSales/index.d.ts +4 -15
  22. package/dist/solution/BaseSales/index.js +131 -86
  23. package/dist/solution/BaseSales/types.d.ts +11 -0
  24. package/dist/solution/BookingByStep/index.d.ts +1 -1
  25. package/dist/solution/BookingTicket/index.js +41 -13
  26. package/dist/solution/OrderInvoicePreview/index.d.ts +56 -0
  27. package/dist/solution/OrderInvoicePreview/index.js +269 -0
  28. package/dist/solution/UnifiedBookingSales/businessAvailability.d.ts +27 -0
  29. package/dist/solution/UnifiedBookingSales/businessAvailability.js +292 -0
  30. package/dist/solution/UnifiedBookingSales/index.d.ts +11 -0
  31. package/dist/solution/UnifiedBookingSales/index.js +154 -75
  32. package/dist/solution/UnifiedBookingSales/types.d.ts +2 -0
  33. package/dist/solution/index.d.ts +1 -0
  34. package/dist/solution/index.js +2 -1
  35. package/lib/index.d.ts +2 -0
  36. package/lib/index.js +21 -1
  37. package/lib/modules/BusinessAvailability/index.d.ts +30 -0
  38. package/lib/modules/BusinessAvailability/index.js +146 -0
  39. package/lib/modules/OpenData/index.js +1 -1
  40. package/lib/modules/OpenData/types.d.ts +2 -0
  41. package/lib/modules/Order/index.d.ts +5 -2
  42. package/lib/modules/Order/index.js +67 -13
  43. package/lib/modules/Order/types.d.ts +8 -0
  44. package/lib/modules/Payment/index.js +3 -4
  45. package/lib/plugins/request.d.ts +3 -0
  46. package/lib/server/utils/small-ticket.d.ts +1 -85
  47. package/lib/server/utils/small-ticket.js +9 -2335
  48. package/lib/shared/payment/loadPaymentMethods.d.ts +9 -0
  49. package/lib/shared/payment/loadPaymentMethods.js +40 -0
  50. package/lib/shared/receipt/small-ticket.d.ts +85 -0
  51. package/lib/shared/receipt/small-ticket.js +2342 -0
  52. package/lib/shared/sales/loadSalesOrderSnapshot.d.ts +9 -0
  53. package/lib/shared/sales/loadSalesOrderSnapshot.js +22 -0
  54. package/lib/solution/BaseSales/index.d.ts +4 -15
  55. package/lib/solution/BaseSales/index.js +45 -24
  56. package/lib/solution/BaseSales/types.d.ts +11 -0
  57. package/lib/solution/BookingByStep/index.d.ts +1 -1
  58. package/lib/solution/BookingTicket/index.js +37 -4
  59. package/lib/solution/OrderInvoicePreview/index.d.ts +56 -0
  60. package/lib/solution/OrderInvoicePreview/index.js +194 -0
  61. package/lib/solution/UnifiedBookingSales/businessAvailability.d.ts +27 -0
  62. package/lib/solution/UnifiedBookingSales/businessAvailability.js +138 -0
  63. package/lib/solution/UnifiedBookingSales/index.d.ts +11 -0
  64. package/lib/solution/UnifiedBookingSales/index.js +54 -0
  65. package/lib/solution/UnifiedBookingSales/types.d.ts +2 -0
  66. package/lib/solution/index.d.ts +1 -0
  67. package/lib/solution/index.js +11 -0
  68. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -10,3 +10,5 @@ export * from './model';
10
10
  export { PisellOSCore } from './core';
11
11
  import PisellOSCore from './core';
12
12
  export default PisellOSCore;
13
+ export * from './shared/receipt/small-ticket';
14
+ export { loadSalesOrderSnapshot } from './shared/sales/loadSalesOrderSnapshot';
package/dist/index.js CHANGED
@@ -15,4 +15,6 @@ export { PisellOSCore } from "./core";
15
15
 
16
16
  // 导出框架主类
17
17
  import PisellOSCore from "./core";
18
- export default PisellOSCore;
18
+ export default PisellOSCore;
19
+ export * from "./shared/receipt/small-ticket";
20
+ export { loadSalesOrderSnapshot } from "./shared/sales/loadSalesOrderSnapshot";
@@ -0,0 +1,9 @@
1
+ // 导出评估器
2
+ export { PromotionEvaluator } from "./evaluator";
3
+
4
+ // 导出适配器
5
+ export { PromotionAdapter } from "./adapter";
6
+ export { default } from "./adapter";
7
+
8
+ // 导出策略配置示例常量
9
+ export { X_ITEMS_FOR_Y_PRICE_STRATEGY, BUY_X_GET_Y_FREE_STRATEGY, ITEM_REWARD_STRATEGY } from "./examples";
@@ -0,0 +1,30 @@
1
+ import type { MultiLangObject } from '../OpenData/types';
2
+ import type { ScheduleItem } from '../Schedule/types';
3
+ export type BusinessClosedBehavior = 'show_menu_disabled' | 'hide_all';
4
+ export interface BusinessAvailability {
5
+ status: 'open' | 'paused' | 'closed' | 'error';
6
+ behavior: BusinessClosedBehavior | null;
7
+ message: string | MultiLangObject | null;
8
+ /** Epoch milliseconds. Re-evaluate the cached configuration at this time. */
9
+ nextChangeAt: number;
10
+ requirePaymentOnSubmit: boolean;
11
+ error?: string;
12
+ }
13
+ export interface BusinessAvailabilityConfig {
14
+ paused: boolean;
15
+ pauseBehavior: BusinessClosedBehavior;
16
+ closedBehavior: BusinessClosedBehavior;
17
+ pauseMessage: BusinessAvailability['message'];
18
+ closedMessage: BusinessAvailability['message'];
19
+ scheduleIds: number[];
20
+ invalidScheduleIds: boolean;
21
+ requirePaymentOnSubmit: boolean;
22
+ }
23
+ export declare function normalizeBusinessAvailabilityConfig(data: Record<string, unknown>): BusinessAvailabilityConfig;
24
+ /** Business ordering is independent of reservation switches and Pickup slot availability. */
25
+ export declare function computeBusinessAvailability(input: {
26
+ config: BusinessAvailabilityConfig;
27
+ schedules: ScheduleItem[];
28
+ timezone: string;
29
+ now: Date;
30
+ }): BusinessAvailability;
@@ -0,0 +1,204 @@
1
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
4
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
5
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
6
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8
+ function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
9
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
10
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
11
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
12
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
13
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
14
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
15
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
16
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
17
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
18
+ import dayjs from 'dayjs';
19
+ import isSameOrAfter from 'dayjs/plugin/isSameOrAfter';
20
+ import isSameOrBefore from 'dayjs/plugin/isSameOrBefore';
21
+ import { getScheduleStartEndTimePoints } from "../Schedule/getDateIsInSchedule";
22
+ dayjs.extend(isSameOrAfter);
23
+ dayjs.extend(isSameOrBefore);
24
+ var DAY = 86400000;
25
+ var behavior = function behavior(value) {
26
+ return value === 'show_menu_disabled' ? value : 'hide_all';
27
+ };
28
+ var message = function message(value) {
29
+ return typeof value === 'string' || value !== null && _typeof(value) === 'object' && !Array.isArray(value) ? value : null;
30
+ };
31
+ export function normalizeBusinessAvailabilityConfig(data) {
32
+ var rawIds = data['availability.operating_hours'];
33
+ var ids = Array.isArray(rawIds) ? rawIds.map(function (id) {
34
+ return typeof id === 'number' || typeof id === 'string' ? Number(id) : NaN;
35
+ }) : [];
36
+ var validIds = ids.filter(function (id) {
37
+ return Number.isInteger(id) && id > 0;
38
+ });
39
+ var paused = data['availability.paused'];
40
+ return {
41
+ paused: paused === true || paused === 1 || paused === 'true' || paused === '1',
42
+ pauseBehavior: behavior(data['availability.pause_behavior']),
43
+ closedBehavior: behavior(data['availability.closed_behavior']),
44
+ pauseMessage: message(data['availability.pause_message']),
45
+ closedMessage: message(data['availability.closed_message']),
46
+ scheduleIds: _toConsumableArray(new Set(validIds)),
47
+ invalidScheduleIds: rawIds != null && (!Array.isArray(rawIds) || validIds.length !== ids.length),
48
+ // Only an explicitly disabled setting changes the existing payment flow.
49
+ requirePaymentOnSubmit: data['sale.require_payment_on_submit'] !== false
50
+ };
51
+ }
52
+ function createClock(timezone) {
53
+ if (!timezone) throw new Error('Store timezone is unavailable.');
54
+ var formatter = new Intl.DateTimeFormat('en-GB', {
55
+ timeZone: timezone,
56
+ year: 'numeric',
57
+ month: '2-digit',
58
+ day: '2-digit',
59
+ hour: '2-digit',
60
+ minute: '2-digit',
61
+ second: '2-digit',
62
+ hourCycle: 'h23'
63
+ });
64
+ var local = function local(timestamp) {
65
+ var parts = {};
66
+ formatter.formatToParts(timestamp).forEach(function (part) {
67
+ parts[part.type] = part.value;
68
+ });
69
+ var date = "".concat(parts.year, "-").concat(parts.month, "-").concat(parts.day);
70
+ return {
71
+ date: date,
72
+ scalar: Date.parse("".concat(date, "T").concat(parts.hour, ":").concat(parts.minute, ":").concat(parts.second, "Z"))
73
+ };
74
+ };
75
+ var offsets = new Set();
76
+ var instants = function instants(scalar) {
77
+ offsets.clear();
78
+ for (var hours = -36; hours <= 36; hours += 6) {
79
+ var sample = scalar + hours * 3600000;
80
+ offsets.add(local(sample).scalar - sample);
81
+ }
82
+ return _toConsumableArray(offsets).map(function (offset) {
83
+ return scalar - offset;
84
+ }).filter(function (instant) {
85
+ return local(instant).scalar === scalar;
86
+ }).sort(function (a, b) {
87
+ return a - b;
88
+ });
89
+ };
90
+ return {
91
+ local: local,
92
+ instants: instants
93
+ };
94
+ }
95
+
96
+ /** Business ordering is independent of reservation switches and Pickup slot availability. */
97
+ export function computeBusinessAvailability(input) {
98
+ var config = input.config,
99
+ schedules = input.schedules,
100
+ timezone = input.timezone,
101
+ now = input.now;
102
+ var nowAt = now.getTime();
103
+ var base = {
104
+ requirePaymentOnSubmit: config.requirePaymentOnSubmit,
105
+ nextChangeAt: nowAt + DAY
106
+ };
107
+ if (config.paused) {
108
+ return _objectSpread(_objectSpread({}, base), {}, {
109
+ status: 'paused',
110
+ behavior: config.pauseBehavior,
111
+ message: config.pauseMessage
112
+ });
113
+ }
114
+ if (config.invalidScheduleIds) throw new Error('Business operating-hours configuration is invalid.');
115
+ if (!config.scheduleIds.length) return _objectSpread(_objectSpread({}, base), {}, {
116
+ status: 'open',
117
+ behavior: null,
118
+ message: null
119
+ });
120
+ var selected = schedules.filter(function (schedule) {
121
+ return config.scheduleIds.includes(Number(schedule.id));
122
+ });
123
+ if (config.scheduleIds.some(function (id) {
124
+ return !selected.some(function (schedule) {
125
+ return Number(schedule.id) === id;
126
+ });
127
+ })) {
128
+ throw new Error('A configured business operating-hours schedule is unavailable.');
129
+ }
130
+ var clock = createClock(timezone);
131
+ var current = clock.local(nowAt);
132
+ var today = Date.parse("".concat(current.date, "T00:00:00Z"));
133
+ var nextMidnight = clock.instants(today + DAY).find(function (instant) {
134
+ return instant > nowAt;
135
+ });
136
+ var nextChangeAt = nextMidnight !== null && nextMidnight !== void 0 ? nextMidnight : nowAt + 60000;
137
+ var open = false;
138
+ // Yesterday contributes the tail of overnight windows; today supplies the next boundary.
139
+ for (var _i = 0, _arr = [today - DAY, today]; _i < _arr.length; _i++) {
140
+ var dateAt = _arr[_i];
141
+ var date = new Date(dateAt).toISOString().slice(0, 10);
142
+ // Schedule's resolver merges by time-of-day, so resolve each schedule independently.
143
+ var _iterator = _createForOfIteratorHelper(selected),
144
+ _step;
145
+ try {
146
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
147
+ var schedule = _step.value;
148
+ var _iterator2 = _createForOfIteratorHelper(getScheduleStartEndTimePoints(date, [schedule])),
149
+ _step2;
150
+ try {
151
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
152
+ var window = _step2.value;
153
+ var toMinutes = function toMinutes(value) {
154
+ if (!/^(?:[01]\d|2[0-3]):[0-5]\d$/.test(value) && value !== '24:00') {
155
+ throw new Error('Business operating-hours schedule contains an invalid time.');
156
+ }
157
+ var _value$split$map = value.split(':').map(Number),
158
+ _value$split$map2 = _slicedToArray(_value$split$map, 2),
159
+ hours = _value$split$map2[0],
160
+ minutes = _value$split$map2[1];
161
+ return hours * 60 + minutes;
162
+ };
163
+ var start = dateAt + toMinutes(window.start_time) * 60000;
164
+ var end = dateAt + toMinutes(window.end_time) * 60000;
165
+ if (end <= start) end += DAY;
166
+ if (current.scalar >= start && current.scalar < end) open = true;
167
+ for (var _i2 = 0, _arr2 = [start, end]; _i2 < _arr2.length; _i2++) {
168
+ var boundary = _arr2[_i2];
169
+ var _iterator3 = _createForOfIteratorHelper(clock.instants(boundary)),
170
+ _step3;
171
+ try {
172
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
173
+ var instant = _step3.value;
174
+ if (instant > nowAt) nextChangeAt = Math.min(nextChangeAt, instant);
175
+ }
176
+ } catch (err) {
177
+ _iterator3.e(err);
178
+ } finally {
179
+ _iterator3.f();
180
+ }
181
+ }
182
+ }
183
+ } catch (err) {
184
+ _iterator2.e(err);
185
+ } finally {
186
+ _iterator2.f();
187
+ }
188
+ }
189
+ } catch (err) {
190
+ _iterator.e(err);
191
+ } finally {
192
+ _iterator.f();
193
+ }
194
+ }
195
+ // A timezone offset change can repeat/skip a wall-clock boundary. A local-only safety
196
+ // check also covers throttled timers; it does not fetch either configuration source.
197
+ nextChangeAt = Math.min(nextChangeAt, nowAt + 60000);
198
+ return _objectSpread(_objectSpread({}, base), {}, {
199
+ nextChangeAt: nextChangeAt,
200
+ status: open ? 'open' : 'closed',
201
+ behavior: open ? null : config.closedBehavior,
202
+ message: open ? null : config.closedMessage
203
+ });
204
+ }
@@ -132,7 +132,7 @@ export var OpenDataModule = /*#__PURE__*/function (_BaseModule) {
132
132
  key: "shouldSkipInvoiceTemplateDocument",
133
133
  value: function shouldSkipInvoiceTemplateDocument() {
134
134
  var _this$otherParams;
135
- return String(((_this$otherParams = this.otherParams) === null || _this$otherParams === void 0 ? void 0 : _this$otherParams.platform) || '').trim().toLowerCase() === 'h5';
135
+ return this.otherParams.invoiceDocument !== true && String(((_this$otherParams = this.otherParams) === null || _this$otherParams === void 0 ? void 0 : _this$otherParams.platform) || '').trim().toLowerCase() === 'h5';
136
136
  }
137
137
  }, {
138
138
  key: "fetchOpenData",
@@ -69,6 +69,8 @@ export interface OpenDataConfig {
69
69
  'reservation.time_slice'?: number | string;
70
70
  'sale.allow_item_notes'?: boolean;
71
71
  'sale.allow_order_notes'?: boolean;
72
+ /** False submits an order without starting or confirming payment. */
73
+ 'sale.require_payment_on_submit'?: boolean | null;
72
74
  'sale.enable_item_rules'?: boolean;
73
75
  'sale.enable_short_number'?: boolean;
74
76
  'sale.short_number_daily_reset'?: boolean;
@@ -4,7 +4,7 @@ import { OrderModuleAPI, CommitOrderParams, UpdateOrderBookingParams, UpdateOrde
4
4
  import { CartItem } from '../Cart/types';
5
5
  import { type SubmitPayloadEnhancer } from './utils';
6
6
  import { type PickupTimingBooking, type PickupTimingBookingInput } from './pickupTiming';
7
- import type { OrderAmountSnapshot, AddProductBookingInput, AddProductToOrderOptions, OrderIdentitySnapshot, OrderPaymentSource, OrderSnapshot, OrderSyncState, SyncPaymentsToOrderParams, SyncPaymentsToOrderResult, SubmitSalesOrderParams, OrderProduct, OrderProductIdentity, OrderSummary, OrderTempOrder, OrderPaymentData, OrderPaymentUpdateOptions, OrderPaymentUpdateResult, SendCustomerPayLinkParams, UpdateTempOrderCustomerInput, OrderCustomerPatch, OrderCustomerView, ReplaceTempOrderOptions, OrderPromotionEvaluator, OrderGiftSelectResolver, OrderUnfulfilledPromotion, OrderLastGiftActions, RemoveProductsFromOrderOptions, SalesNote, SalesNotesMutationSnapshot, SetSalesNoteInput, PickupReferenceMode, PointCardSnapshotMergeContext, PointCardSnapshotItem, ShopServiceData, ShopServiceType } from './types';
7
+ import type { OrderAmountSnapshot, AddProductBookingInput, AddProductToOrderOptions, OrderIdentitySnapshot, OrderPaymentSource, OrderSnapshot, OrderSyncState, SyncPaymentsToOrderParams, SyncPaymentsToOrderResult, SubmitSalesOrderParams, OrderProduct, OrderProductIdentity, OrderSummary, OrderTempOrder, OrderPaymentData, OrderPaymentUpdateOptions, OrderPaymentUpdateResult, SendCustomerPayLinkParams, UpdateTempOrderCustomerInput, OrderCustomerPatch, OrderCustomerView, OrderCartIntentCommitContext, ReplaceTempOrderOptions, OrderPromotionEvaluator, OrderGiftSelectResolver, OrderUnfulfilledPromotion, OrderLastGiftActions, RemoveProductsFromOrderOptions, SalesNote, SalesNotesMutationSnapshot, SetSalesNoteInput, PickupReferenceMode, PointCardSnapshotMergeContext, PointCardSnapshotItem, ShopServiceData, ShopServiceType } from './types';
8
8
  import type { ICustomer } from '../AccountList/types';
9
9
  import type { Discount } from '../Discount/types';
10
10
  import { UnavailableReason } from '../Rules/types';
@@ -67,6 +67,8 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
67
67
  * orderModule.updateOtherParams({ cacheId: 'cache-2', channel: 'pos' });
68
68
  */
69
69
  updateOtherParams(params: Record<string, any>): void;
70
+ /** Internal intent boundary shared with asynchronous scanner/detail flows. */
71
+ createCartIntentCommitGuard(action: OrderCartIntentCommitContext['action'], tempOrder?: OrderTempOrder | null): () => void;
70
72
  /** PC/H5 属于在线店铺;其它或缺失平台统一沿用 POS 行为。 */
71
73
  isOnlineStorePlatform(): boolean;
72
74
  /**
@@ -501,6 +503,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
501
503
  private hasSameEntitlementMergePriceConfig;
502
504
  private getBundleRuntimeIdentity;
503
505
  private preservePersistedBundlePriceFields;
506
+ private isRestrictedCartProductUpdate;
504
507
  private applyOrderProductUpdateToTempOrder;
505
508
  updateOrderProduct(params: UpdateOrderProductParams): Promise<OrderProduct[]>;
506
509
  updateOrderProducts(paramsList: UpdateOrderProductParams[]): Promise<OrderProduct[]>;
@@ -588,7 +591,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
588
591
  generateIdempotencyToken(): string;
589
592
  syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
590
593
  createOrder(params: CommitOrderParams['query']): {
591
- type: "appointment_booking" | "virtual";
594
+ type: "virtual" | "appointment_booking";
592
595
  platform: string;
593
596
  sales_channel: string;
594
597
  order_sales_channel: string;