localsbnb-mcp-server 1.0.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 (169) hide show
  1. package/README.md +93 -0
  2. package/dist/auth/apiKeyManager.d.ts +61 -0
  3. package/dist/auth/apiKeyManager.d.ts.map +1 -0
  4. package/dist/auth/apiKeyManager.js +121 -0
  5. package/dist/auth/apiKeyManager.js.map +1 -0
  6. package/dist/auth/index.d.ts +3 -0
  7. package/dist/auth/index.d.ts.map +1 -0
  8. package/dist/auth/index.js +3 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/permissionChecker.d.ts +10 -0
  11. package/dist/auth/permissionChecker.d.ts.map +1 -0
  12. package/dist/auth/permissionChecker.js +45 -0
  13. package/dist/auth/permissionChecker.js.map +1 -0
  14. package/dist/client/cacheManager.d.ts +24 -0
  15. package/dist/client/cacheManager.d.ts.map +1 -0
  16. package/dist/client/cacheManager.js +64 -0
  17. package/dist/client/cacheManager.js.map +1 -0
  18. package/dist/client/httpClient.d.ts +12 -0
  19. package/dist/client/httpClient.d.ts.map +1 -0
  20. package/dist/client/httpClient.js +121 -0
  21. package/dist/client/httpClient.js.map +1 -0
  22. package/dist/client/index.d.ts +4 -0
  23. package/dist/client/index.d.ts.map +1 -0
  24. package/dist/client/index.js +4 -0
  25. package/dist/client/index.js.map +1 -0
  26. package/dist/client/retryHandler.d.ts +18 -0
  27. package/dist/client/retryHandler.d.ts.map +1 -0
  28. package/dist/client/retryHandler.js +68 -0
  29. package/dist/client/retryHandler.js.map +1 -0
  30. package/dist/config/index.d.ts +24 -0
  31. package/dist/config/index.d.ts.map +1 -0
  32. package/dist/config/index.js +39 -0
  33. package/dist/config/index.js.map +1 -0
  34. package/dist/config/tools.d.ts +7 -0
  35. package/dist/config/tools.d.ts.map +1 -0
  36. package/dist/config/tools.js +159 -0
  37. package/dist/config/tools.js.map +1 -0
  38. package/dist/index.d.ts +3 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +34 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/logs/combined.log +30 -0
  43. package/dist/logs/error.log +0 -0
  44. package/dist/package.json +64 -0
  45. package/dist/run.cjs +19 -0
  46. package/dist/run.sh +3 -0
  47. package/dist/server.d.ts +26 -0
  48. package/dist/server.d.ts.map +1 -0
  49. package/dist/server.js +129 -0
  50. package/dist/server.js.map +1 -0
  51. package/dist/start.mjs +34 -0
  52. package/dist/tools/channels/getChannelDetails.d.ts +3 -0
  53. package/dist/tools/channels/getChannelDetails.d.ts.map +1 -0
  54. package/dist/tools/channels/getChannelDetails.js +30 -0
  55. package/dist/tools/channels/getChannelDetails.js.map +1 -0
  56. package/dist/tools/channels/index.d.ts +1 -0
  57. package/dist/tools/channels/index.d.ts.map +1 -0
  58. package/dist/tools/channels/index.js +6 -0
  59. package/dist/tools/channels/index.js.map +1 -0
  60. package/dist/tools/channels/listChannels.d.ts +3 -0
  61. package/dist/tools/channels/listChannels.d.ts.map +1 -0
  62. package/dist/tools/channels/listChannels.js +29 -0
  63. package/dist/tools/channels/listChannels.js.map +1 -0
  64. package/dist/tools/finance/analyzeRevenue.d.ts +3 -0
  65. package/dist/tools/finance/analyzeRevenue.d.ts.map +1 -0
  66. package/dist/tools/finance/analyzeRevenue.js +30 -0
  67. package/dist/tools/finance/analyzeRevenue.js.map +1 -0
  68. package/dist/tools/finance/index.d.ts +2 -0
  69. package/dist/tools/finance/index.d.ts.map +1 -0
  70. package/dist/tools/finance/index.js +8 -0
  71. package/dist/tools/finance/index.js.map +1 -0
  72. package/dist/tools/finance/queryFinancialData.d.ts +3 -0
  73. package/dist/tools/finance/queryFinancialData.d.ts.map +1 -0
  74. package/dist/tools/finance/queryFinancialData.js +30 -0
  75. package/dist/tools/finance/queryFinancialData.js.map +1 -0
  76. package/dist/tools/finance/queryOperationalData.d.ts +3 -0
  77. package/dist/tools/finance/queryOperationalData.d.ts.map +1 -0
  78. package/dist/tools/finance/queryOperationalData.js +30 -0
  79. package/dist/tools/finance/queryOperationalData.js.map +1 -0
  80. package/dist/tools/finance/queryOperationalDataV2.d.ts +3 -0
  81. package/dist/tools/finance/queryOperationalDataV2.d.ts.map +1 -0
  82. package/dist/tools/finance/queryOperationalDataV2.js +125 -0
  83. package/dist/tools/finance/queryOperationalDataV2.js.map +1 -0
  84. package/dist/tools/orders/cancelOrder.d.ts +3 -0
  85. package/dist/tools/orders/cancelOrder.d.ts.map +1 -0
  86. package/dist/tools/orders/cancelOrder.js +27 -0
  87. package/dist/tools/orders/cancelOrder.js.map +1 -0
  88. package/dist/tools/orders/getOrderDetails.d.ts +3 -0
  89. package/dist/tools/orders/getOrderDetails.d.ts.map +1 -0
  90. package/dist/tools/orders/getOrderDetails.js +23 -0
  91. package/dist/tools/orders/getOrderDetails.js.map +1 -0
  92. package/dist/tools/orders/getOrderDetailsV2.d.ts +3 -0
  93. package/dist/tools/orders/getOrderDetailsV2.d.ts.map +1 -0
  94. package/dist/tools/orders/getOrderDetailsV2.js +48 -0
  95. package/dist/tools/orders/getOrderDetailsV2.js.map +1 -0
  96. package/dist/tools/orders/index.d.ts +3 -0
  97. package/dist/tools/orders/index.d.ts.map +1 -0
  98. package/dist/tools/orders/index.js +12 -0
  99. package/dist/tools/orders/index.js.map +1 -0
  100. package/dist/tools/orders/queryOrders.d.ts +3 -0
  101. package/dist/tools/orders/queryOrders.d.ts.map +1 -0
  102. package/dist/tools/orders/queryOrders.js +37 -0
  103. package/dist/tools/orders/queryOrders.js.map +1 -0
  104. package/dist/tools/orders/queryTodayOrders.d.ts +3 -0
  105. package/dist/tools/orders/queryTodayOrders.d.ts.map +1 -0
  106. package/dist/tools/orders/queryTodayOrders.js +159 -0
  107. package/dist/tools/orders/queryTodayOrders.js.map +1 -0
  108. package/dist/tools/rooms/batchUpdatePrices.d.ts +3 -0
  109. package/dist/tools/rooms/batchUpdatePrices.d.ts.map +1 -0
  110. package/dist/tools/rooms/batchUpdatePrices.js +40 -0
  111. package/dist/tools/rooms/batchUpdatePrices.js.map +1 -0
  112. package/dist/tools/rooms/index.d.ts +6 -0
  113. package/dist/tools/rooms/index.d.ts.map +1 -0
  114. package/dist/tools/rooms/index.js +7 -0
  115. package/dist/tools/rooms/index.js.map +1 -0
  116. package/dist/tools/rooms/queryRoomPrices.d.ts +3 -0
  117. package/dist/tools/rooms/queryRoomPrices.d.ts.map +1 -0
  118. package/dist/tools/rooms/queryRoomPrices.js +66 -0
  119. package/dist/tools/rooms/queryRoomPrices.js.map +1 -0
  120. package/dist/tools/rooms/queryRoomStatusNew.d.ts +28 -0
  121. package/dist/tools/rooms/queryRoomStatusNew.d.ts.map +1 -0
  122. package/dist/tools/rooms/queryRoomStatusNew.js +66 -0
  123. package/dist/tools/rooms/queryRoomStatusNew.js.map +1 -0
  124. package/dist/tools/rooms/queryTodayRoomStatus.d.ts +3 -0
  125. package/dist/tools/rooms/queryTodayRoomStatus.d.ts.map +1 -0
  126. package/dist/tools/rooms/queryTodayRoomStatus.js +72 -0
  127. package/dist/tools/rooms/queryTodayRoomStatus.js.map +1 -0
  128. package/dist/tools/rooms/updateRoomPrice.d.ts +3 -0
  129. package/dist/tools/rooms/updateRoomPrice.d.ts.map +1 -0
  130. package/dist/tools/rooms/updateRoomPrice.js +39 -0
  131. package/dist/tools/rooms/updateRoomPrice.js.map +1 -0
  132. package/dist/types/api.d.ts +122 -0
  133. package/dist/types/api.d.ts.map +1 -0
  134. package/dist/types/api.js +3 -0
  135. package/dist/types/api.js.map +1 -0
  136. package/dist/types/index.d.ts +5 -0
  137. package/dist/types/index.d.ts.map +1 -0
  138. package/dist/types/index.js +3 -0
  139. package/dist/types/index.js.map +1 -0
  140. package/dist/types/mcp.d.ts +41 -0
  141. package/dist/types/mcp.d.ts.map +1 -0
  142. package/dist/types/mcp.js +2 -0
  143. package/dist/types/mcp.js.map +1 -0
  144. package/dist/types/tools.d.ts +93 -0
  145. package/dist/types/tools.d.ts.map +1 -0
  146. package/dist/types/tools.js +2 -0
  147. package/dist/types/tools.js.map +1 -0
  148. package/dist/utils/desensitize.d.ts +32 -0
  149. package/dist/utils/desensitize.d.ts.map +1 -0
  150. package/dist/utils/desensitize.js +100 -0
  151. package/dist/utils/desensitize.js.map +1 -0
  152. package/dist/utils/errorHandler.d.ts +21 -0
  153. package/dist/utils/errorHandler.d.ts.map +1 -0
  154. package/dist/utils/errorHandler.js +137 -0
  155. package/dist/utils/errorHandler.js.map +1 -0
  156. package/dist/utils/index.d.ts +5 -0
  157. package/dist/utils/index.d.ts.map +1 -0
  158. package/dist/utils/index.js +5 -0
  159. package/dist/utils/index.js.map +1 -0
  160. package/dist/utils/logger.d.ts +4 -0
  161. package/dist/utils/logger.d.ts.map +1 -0
  162. package/dist/utils/logger.js +37 -0
  163. package/dist/utils/logger.js.map +1 -0
  164. package/dist/utils/validator.d.ts +273 -0
  165. package/dist/utils/validator.d.ts.map +1 -0
  166. package/dist/utils/validator.js +153 -0
  167. package/dist/utils/validator.js.map +1 -0
  168. package/mcp.sample.json +12 -0
  169. package/package.json +64 -0
@@ -0,0 +1,23 @@
1
+ import { validateGetOrderDetailsParams } from '../../utils/validator.js';
2
+ import { handleError, createSuccessResult } from '../../utils/errorHandler.js';
3
+ export const getOrderDetailsHandler = async (args, context) => {
4
+ try {
5
+ const { apiClient, logger, permissionChecker } = context;
6
+ // 权限检查
7
+ permissionChecker.checkPermission('get_order_details', ['orders:read']);
8
+ // 参数验证
9
+ const params = validateGetOrderDetailsParams(args);
10
+ logger.info('Getting order details', { orderId: params.orderId });
11
+ // 调用API
12
+ const response = await apiClient.request({
13
+ method: 'GET',
14
+ url: `/api/v1/orders/${params.orderId}`,
15
+ });
16
+ logger.info('Order details retrieved', { orderId: params.orderId });
17
+ return createSuccessResult(response.data);
18
+ }
19
+ catch (error) {
20
+ return handleError(error);
21
+ }
22
+ };
23
+ //# sourceMappingURL=getOrderDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrderDetails.js","sourceRoot":"","sources":["../../../src/tools/orders/getOrderDetails.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,6BAA6B,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAG/E,MAAM,CAAC,MAAM,sBAAsB,GAAgB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IACzE,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;QAEzD,OAAO;QACP,iBAAiB,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QAExE,OAAO;QACP,MAAM,MAAM,GAAG,6BAA6B,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAElE,QAAQ;QACR,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAA6B;YACnE,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,kBAAkB,MAAM,CAAC,OAAO,EAAE;SACxC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAEpE,OAAO,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolHandler } from '../../types/mcp.js';
2
+ export declare const getOrderDetailsV2Handler: ToolHandler;
3
+ //# sourceMappingURL=getOrderDetailsV2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrderDetailsV2.d.ts","sourceRoot":"","sources":["../../../src/tools/orders/getOrderDetailsV2.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA0JtD,eAAO,MAAM,wBAAwB,EAAE,WA8CtC,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { handleError, createSuccessResult } from '../../utils/errorHandler.js';
2
+ import { desensitizeOrderDetail } from '../../utils/desensitize.js';
3
+ import { z } from 'zod';
4
+ // 参数验证Schema
5
+ const getOrderDetailsV2Schema = z.object({
6
+ orderId: z.union([z.string(), z.number()]).transform((val) => String(val)),
7
+ });
8
+ export const getOrderDetailsV2Handler = async (args, context) => {
9
+ try {
10
+ const { apiClient, logger, permissionChecker } = context;
11
+ // 权限检查
12
+ permissionChecker.checkPermission('get_order_details_v2', ['orders:read']);
13
+ // 参数验证
14
+ const validatedParams = getOrderDetailsV2Schema.parse(args);
15
+ logger.info('Getting order details (v2)', { orderId: validatedParams.orderId });
16
+ // 从context中获取campId
17
+ const campId = context.campId;
18
+ if (!campId) {
19
+ throw new Error('APP_ID not configured. Please set APP_ID environment variable.');
20
+ }
21
+ // 调用API
22
+ const response = await apiClient.request({
23
+ method: 'POST',
24
+ url: '/order/get',
25
+ headers: {
26
+ 'Content-Type': 'application/json',
27
+ },
28
+ data: {
29
+ campId: String(campId),
30
+ orderId: validatedParams.orderId,
31
+ },
32
+ });
33
+ // 检查API响应
34
+ if (!response.success) {
35
+ throw new Error(response.errorMsg || response.errorCode || '订单详情接口请求失败');
36
+ }
37
+ logger.info('Order details retrieved successfully (v2)', {
38
+ orderId: validatedParams.orderId,
39
+ });
40
+ const data = response.data;
41
+ const safeData = data ? desensitizeOrderDetail(data) : data;
42
+ return createSuccessResult(safeData);
43
+ }
44
+ catch (error) {
45
+ return handleError(error);
46
+ }
47
+ };
48
+ //# sourceMappingURL=getOrderDetailsV2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getOrderDetailsV2.js","sourceRoot":"","sources":["../../../src/tools/orders/getOrderDetailsV2.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,aAAa;AACb,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CAC3E,CAAC,CAAC;AAkJH,MAAM,CAAC,MAAM,wBAAwB,GAAgB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC3E,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;QAEzD,OAAO;QACP,iBAAiB,CAAC,eAAe,CAAC,sBAAsB,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QAE3E,OAAO;QACP,MAAM,eAAe,GAAG,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE5D,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAEhF,oBAAoB;QACpB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QAED,QAAQ;QACR,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAA4B;YAClE,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,YAAY;YACjB,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE;gBACJ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;gBACtB,OAAO,EAAE,eAAe,CAAC,OAAO;aACjC;SACF,CAAC,CAAC;QAEH,UAAU;QACV,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,SAAS,IAAI,YAAY,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,2CAA2C,EAAE;YACvD,OAAO,EAAE,eAAe,CAAC,OAAO;SACjC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,IAA2C,CAAC;QAClE,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { queryTodayOrdersHandler } from './queryTodayOrders.js';
2
+ export { getOrderDetailsV2Handler } from './getOrderDetailsV2.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/orders/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,12 @@
1
+ // 暂时只导出已实现的工具
2
+ // TODO: 实现其他订单工具
3
+ // export { queryOrdersHandler } from './queryOrders.js';
4
+ // export { getOrderDetailsHandler } from './getOrderDetails.js';
5
+ // export { createOrderHandler } from './createOrder.js';
6
+ // export { checkInOrderHandler } from './checkIn.js';
7
+ // export { checkOutOrderHandler } from './checkOut.js';
8
+ // export { cancelOrderHandler } from './cancelOrder.js';
9
+ // 今日订单和订单详情工具
10
+ export { queryTodayOrdersHandler } from './queryTodayOrders.js';
11
+ export { getOrderDetailsV2Handler } from './getOrderDetailsV2.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/orders/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,iBAAiB;AACjB,yDAAyD;AACzD,iEAAiE;AACjE,yDAAyD;AACzD,sDAAsD;AACtD,wDAAwD;AACxD,yDAAyD;AAEzD,cAAc;AACd,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolHandler } from '../../types/mcp.js';
2
+ export declare const queryOrdersHandler: ToolHandler;
3
+ //# sourceMappingURL=queryOrders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryOrders.d.ts","sourceRoot":"","sources":["../../../src/tools/orders/queryOrders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;AAKnE,eAAO,MAAM,kBAAkB,EAAE,WAqChC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { validateQueryOrdersParams } from '../../utils/validator.js';
2
+ import { handleError, createSuccessResult } from '../../utils/errorHandler.js';
3
+ export const queryOrdersHandler = async (args, context) => {
4
+ try {
5
+ const { apiClient, logger, permissionChecker } = context;
6
+ // 权限检查
7
+ permissionChecker.checkPermission('query_orders', ['orders:read']);
8
+ // 参数验证
9
+ const params = validateQueryOrdersParams(args);
10
+ logger.info('Querying orders', params);
11
+ // 调用API
12
+ const response = await apiClient.request({
13
+ method: 'GET',
14
+ url: '/api/v1/orders',
15
+ params: {
16
+ store_id: params.storeId,
17
+ start_date: params.startDate,
18
+ end_date: params.endDate,
19
+ status: params.status,
20
+ room_type: params.roomType,
21
+ guest_name: params.guestName,
22
+ phone: params.phone,
23
+ page: params.page,
24
+ page_size: params.pageSize,
25
+ },
26
+ });
27
+ logger.info('Orders queried successfully', {
28
+ total: response.data.total,
29
+ count: response.data.list.length,
30
+ });
31
+ return createSuccessResult(response.data);
32
+ }
33
+ catch (error) {
34
+ return handleError(error);
35
+ }
36
+ };
37
+ //# sourceMappingURL=queryOrders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryOrders.js","sourceRoot":"","sources":["../../../src/tools/orders/queryOrders.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAG/E,MAAM,CAAC,MAAM,kBAAkB,GAAgB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IACrE,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;QAEzD,OAAO;QACP,iBAAiB,CAAC,eAAe,CAAC,cAAc,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QAEnE,OAAO;QACP,MAAM,MAAM,GAAG,yBAAyB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAA4C,CAAC,CAAC;QAE7E,QAAQ;QACR,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAA8B;YACpE,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,gBAAgB;YACrB,MAAM,EAAE;gBACN,QAAQ,EAAE,MAAM,CAAC,OAAO;gBACxB,UAAU,EAAE,MAAM,CAAC,SAAS;gBAC5B,QAAQ,EAAE,MAAM,CAAC,OAAO;gBACxB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,MAAM,CAAC,QAAQ;gBAC1B,UAAU,EAAE,MAAM,CAAC,SAAS;gBAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,SAAS,EAAE,MAAM,CAAC,QAAQ;aAC3B;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,6BAA6B,EAAE;YACzC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK;YAC1B,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM;SACjC,CAAC,CAAC;QAEH,OAAO,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolHandler } from '../../types/mcp.js';
2
+ export declare const queryTodayOrdersHandler: ToolHandler;
3
+ //# sourceMappingURL=queryTodayOrders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryTodayOrders.d.ts","sourceRoot":"","sources":["../../../src/tools/orders/queryTodayOrders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA8ItD,eAAO,MAAM,uBAAuB,EAAE,WA8IrC,CAAC"}
@@ -0,0 +1,159 @@
1
+ import { handleError } from '../../utils/errorHandler.js';
2
+ import { desensitizeOrderItem } from '../../utils/desensitize.js';
3
+ import { z } from 'zod';
4
+ // 参数验证Schema
5
+ const queryTodayOrdersSchema = z.object({});
6
+ // 订单类型枚举
7
+ const ORDER_TYPE = {
8
+ PRE_ARRIVAL: '11', // 预抵
9
+ IN_HOUSE: '10', // 在住
10
+ PRE_DEPARTURE: '12', // 预离
11
+ };
12
+ function formatPrice(value) {
13
+ if (value == null || Number.isNaN(value))
14
+ return '0';
15
+ return Number(value).toFixed(2);
16
+ }
17
+ function buildOrderLine(order, index) {
18
+ const inOut = `${order.checkInDateStr} ~ ${order.checkOutDateStr}`;
19
+ const totalIncome = formatPrice(order.totalPrice);
20
+ const reduceCommission = formatPrice(order.reduceCommissionRoomPrice);
21
+ const commission = formatPrice(order.invoicePrice);
22
+ return [
23
+ `${index}:订单ID:${order.orderId}`,
24
+ `渠道:${order.channelName || '-'}`,
25
+ `客人名称:${order.guestName || '-'}`,
26
+ `房型:${order.roomCategoryName || '-'}`,
27
+ `房间:${order.roomName || '-'}`,
28
+ `入离时间:${inOut}`,
29
+ `房费减佣:${reduceCommission}(佣金:${commission})`,
30
+ `押金:0(待收取)`,
31
+ `订单总收入:${totalIncome}`,
32
+ ].join('\n');
33
+ }
34
+ function buildSection(title, orders, emptyText) {
35
+ const lines = [];
36
+ lines.push(title);
37
+ if (!orders.length) {
38
+ lines.push(emptyText);
39
+ return lines.join('\n');
40
+ }
41
+ orders.forEach((o, idx) => {
42
+ lines.push(buildOrderLine(o, idx + 1));
43
+ });
44
+ return lines.join('\n\n');
45
+ }
46
+ export const queryTodayOrdersHandler = async (args, context) => {
47
+ try {
48
+ const { apiClient, logger, permissionChecker } = context;
49
+ // 权限检查
50
+ permissionChecker.checkPermission('query_today_orders', ['orders:read']);
51
+ // 参数验证
52
+ queryTodayOrdersSchema.parse(args);
53
+ // 获取当天日期
54
+ const today = new Date().toISOString().split('T')[0];
55
+ logger.info('Querying today orders', { date: today });
56
+ // 从context中获取campId
57
+ const campId = context.campId;
58
+ if (!campId) {
59
+ throw new Error('APP_ID not configured. Please set APP_ID environment variable.');
60
+ }
61
+ // 并行调用三次接口,分别获取预抵、在住、预离订单
62
+ const [preArrivalResponse, inHouseResponse, preDepartureResponse] = await Promise.all([
63
+ // 预抵订单 (orderType: "11")
64
+ apiClient.request({
65
+ method: 'POST',
66
+ url: '/orders/get',
67
+ headers: {
68
+ 'Content-Type': 'application/json',
69
+ },
70
+ data: {
71
+ campId: String(campId),
72
+ orderType: ORDER_TYPE.PRE_ARRIVAL,
73
+ },
74
+ }),
75
+ // 在住订单 (orderType: "10")
76
+ apiClient.request({
77
+ method: 'POST',
78
+ url: '/orders/get',
79
+ headers: {
80
+ 'Content-Type': 'application/json',
81
+ },
82
+ data: {
83
+ campId: String(campId),
84
+ orderType: ORDER_TYPE.IN_HOUSE,
85
+ },
86
+ }),
87
+ // 预离订单 (orderType: "12")
88
+ apiClient.request({
89
+ method: 'POST',
90
+ url: '/orders/get',
91
+ headers: {
92
+ 'Content-Type': 'application/json',
93
+ },
94
+ data: {
95
+ campId: String(campId),
96
+ orderType: ORDER_TYPE.PRE_DEPARTURE,
97
+ },
98
+ }),
99
+ ]);
100
+ // 检查API响应
101
+ if (!preArrivalResponse.success) {
102
+ throw new Error(preArrivalResponse.errorMsg || preArrivalResponse.errorCode || '预抵订单接口请求失败');
103
+ }
104
+ if (!inHouseResponse.success) {
105
+ throw new Error(inHouseResponse.errorMsg || inHouseResponse.errorCode || '在住订单接口请求失败');
106
+ }
107
+ if (!preDepartureResponse.success) {
108
+ throw new Error(preDepartureResponse.errorMsg || preDepartureResponse.errorCode || '预离订单接口请求失败');
109
+ }
110
+ // 合并数据并脱敏(PRD 5.2)
111
+ const preArrival = (preArrivalResponse.data?.list || []).map(desensitizeOrderItem);
112
+ const inHouse = (inHouseResponse.data?.list || []).map(desensitizeOrderItem);
113
+ const preDeparture = (preDepartureResponse.data?.list || []).map(desensitizeOrderItem);
114
+ const mergedData = {
115
+ preArrival,
116
+ inHouse,
117
+ preDeparture,
118
+ total: {
119
+ preArrival: preArrival.length,
120
+ inHouse: inHouse.length,
121
+ preDeparture: preDeparture.length,
122
+ all: preArrival.length + inHouse.length + preDeparture.length,
123
+ },
124
+ queryDate: today,
125
+ };
126
+ logger.info('Today orders queried successfully', {
127
+ date: today,
128
+ preArrival: preArrival.length,
129
+ inHouse: inHouse.length,
130
+ preDeparture: preDeparture.length,
131
+ });
132
+ const headerLines = [
133
+ `今日酒店订单情况(${today})`,
134
+ '订单概览',
135
+ `预抵订单(今日入住):${mergedData.total.preArrival}个`,
136
+ `在住订单(当前在住):${mergedData.total.inHouse}个`,
137
+ `预离订单(今日退房):${mergedData.total.preDeparture}个`,
138
+ `总计待处理订单:${mergedData.total.all}个`,
139
+ '',
140
+ ];
141
+ const sections = [];
142
+ sections.push(buildSection('预抵订单', preArrival, '今天没有预抵的订单'));
143
+ sections.push(buildSection('在住订单', inHouse, '今天没有在住的订单'));
144
+ sections.push(buildSection('预离订单', preDeparture, '今天没有预离的订单'));
145
+ const text = [...headerLines, ...sections].join('\n');
146
+ return {
147
+ content: [
148
+ {
149
+ type: 'text',
150
+ text,
151
+ },
152
+ ],
153
+ };
154
+ }
155
+ catch (error) {
156
+ return handleError(error);
157
+ }
158
+ };
159
+ //# sourceMappingURL=queryTodayOrders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryTodayOrders.js","sourceRoot":"","sources":["../../../src/tools/orders/queryTodayOrders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolHandler } from '../../types/mcp.js';
2
+ export declare const batchUpdatePricesHandler: ToolHandler;
3
+ //# sourceMappingURL=batchUpdatePrices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchUpdatePrices.d.ts","sourceRoot":"","sources":["../../../src/tools/rooms/batchUpdatePrices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAKtD,eAAO,MAAM,wBAAwB,EAAE,WAwCtC,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { validateBatchUpdatePricesParams } from '../../utils/validator.js';
2
+ import { handleError, createSuccessResult } from '../../utils/errorHandler.js';
3
+ export const batchUpdatePricesHandler = async (args, context) => {
4
+ try {
5
+ const { apiClient, logger, permissionChecker } = context;
6
+ // 权限检查
7
+ permissionChecker.checkPermission('batch_update_prices', ['rooms:write']);
8
+ // 参数验证
9
+ const params = validateBatchUpdatePricesParams(args);
10
+ logger.info('Batch updating prices', {
11
+ storeId: params.storeId,
12
+ updateCount: params.updates.length,
13
+ });
14
+ // 调用API
15
+ const response = await apiClient.request({
16
+ method: 'POST',
17
+ url: '/api/v1/rooms/prices/batch',
18
+ data: {
19
+ store_id: params.storeId,
20
+ updates: params.updates.map((update) => ({
21
+ room_type_id: update.roomTypeId,
22
+ date: update.date,
23
+ price: update.price,
24
+ })),
25
+ },
26
+ });
27
+ logger.info('Prices batch updated', {
28
+ successCount: response.data.successCount,
29
+ failedCount: response.data.failedCount,
30
+ });
31
+ return createSuccessResult({
32
+ message: '批量更新完成',
33
+ ...response.data,
34
+ });
35
+ }
36
+ catch (error) {
37
+ return handleError(error);
38
+ }
39
+ };
40
+ //# sourceMappingURL=batchUpdatePrices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchUpdatePrices.js","sourceRoot":"","sources":["../../../src/tools/rooms/batchUpdatePrices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,+BAA+B,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAG/E,MAAM,CAAC,MAAM,wBAAwB,GAAgB,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC3E,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;QAEzD,OAAO;QACP,iBAAiB,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;QAE1E,OAAO;QACP,MAAM,MAAM,GAAG,+BAA+B,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;YACnC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM;SACnC,CAAC,CAAC;QAEH,QAAQ;QACR,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,OAAO,CAAqF;YAC3H,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,4BAA4B;YACjC,IAAI,EAAE;gBACJ,QAAQ,EAAE,MAAM,CAAC,OAAO;gBACxB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBACvC,YAAY,EAAE,MAAM,CAAC,UAAU;oBAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;iBACpB,CAAC,CAAC;aACJ;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAClC,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY;YACxC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW;SACvC,CAAC,CAAC;QAEH,OAAO,mBAAmB,CAAC;YACzB,OAAO,EAAE,QAAQ;YACjB,GAAG,QAAQ,CAAC,IAAI;SACjB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { updateRoomPriceHandler } from './updateRoomPrice.js';
2
+ export { batchUpdatePricesHandler } from './batchUpdatePrices.js';
3
+ export { queryRoomStatusNewHandler } from './queryRoomStatusNew.js';
4
+ export { queryTodayRoomStatusHandler } from './queryTodayRoomStatus.js';
5
+ export { queryRoomPricesHandler } from './queryRoomPrices.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/rooms/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,7 @@
1
+ // 暂时只导出已实现的工具
2
+ export { updateRoomPriceHandler } from './updateRoomPrice.js';
3
+ export { batchUpdatePricesHandler } from './batchUpdatePrices.js';
4
+ export { queryRoomStatusNewHandler } from './queryRoomStatusNew.js';
5
+ export { queryTodayRoomStatusHandler } from './queryTodayRoomStatus.js';
6
+ export { queryRoomPricesHandler } from './queryRoomPrices.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/rooms/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ToolHandler } from '../../types/mcp.js';
2
+ export declare const queryRoomPricesHandler: ToolHandler;
3
+ //# sourceMappingURL=queryRoomPrices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryRoomPrices.d.ts","sourceRoot":"","sources":["../../../src/tools/rooms/queryRoomPrices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAwFtD,eAAO,MAAM,sBAAsB,EAAE,WAiEpC,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { handleError, createSuccessResult } from '../../utils/errorHandler.js';
2
+ import { z } from 'zod';
3
+ // 参数验证Schema
4
+ const queryRoomPricesSchema = z.object({
5
+ date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, '日期格式必须是 YYYY-MM-DD').optional(),
6
+ days: z.number().int().positive().max(30).default(7),
7
+ });
8
+ export const queryRoomPricesHandler = async (args, context) => {
9
+ try {
10
+ const { apiClient, logger, permissionChecker } = context;
11
+ // 权限检查
12
+ permissionChecker.checkPermission('query_room_prices', ['rooms:read']);
13
+ // 参数验证
14
+ const validatedParams = queryRoomPricesSchema.parse(args);
15
+ // 如果没有提供date,使用当天日期
16
+ const date = validatedParams.date || new Date().toISOString().split('T')[0];
17
+ logger.info('Querying room prices', { date, days: validatedParams.days });
18
+ // 从context中获取campId
19
+ const campId = context.campId;
20
+ if (!campId) {
21
+ throw new Error('APP_ID not configured. Please set APP_ID environment variable.');
22
+ }
23
+ // 调用API
24
+ const response = await apiClient.request({
25
+ method: 'POST',
26
+ url: '/roomCategoryStatuses/roomCategory/channel/get',
27
+ headers: {
28
+ 'Content-Type': 'application/json',
29
+ },
30
+ data: {
31
+ campId: String(campId),
32
+ roomCategoryIds: [],
33
+ roomCategoryGroupIds: [],
34
+ channelIds: [],
35
+ poiIds: [],
36
+ roomCategoryProductSaleType: 1, // 1-全日房, 2-钟点房
37
+ date,
38
+ days: validatedParams.days,
39
+ isAvailability: 1, // 1-在线, 0-离线
40
+ searchKey: '',
41
+ accountIds: [],
42
+ channelPoiIds: [],
43
+ isChannelRp: '0',
44
+ channelRoomCategoryIds: [],
45
+ },
46
+ });
47
+ // 检查API响应
48
+ if (!response.success) {
49
+ throw new Error(response.errorMsg || response.errorCode || '房价接口请求失败');
50
+ }
51
+ logger.info('Room prices queried successfully', {
52
+ date,
53
+ days: validatedParams.days,
54
+ roomCategoryCount: response.data?.roomCategoryInfos.length || 0,
55
+ });
56
+ return createSuccessResult({
57
+ ...response.data,
58
+ queryDate: date,
59
+ queryDays: validatedParams.days,
60
+ });
61
+ }
62
+ catch (error) {
63
+ return handleError(error);
64
+ }
65
+ };
66
+ //# sourceMappingURL=queryRoomPrices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryRoomPrices.js","sourceRoot":"","sources":["../../../src/tools/rooms/queryRoomPrices.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { ToolHandler } from '../../types/mcp.js';
2
+ export interface RoomStatusView {
3
+ roomId: number;
4
+ roomName: string;
5
+ floorName: string;
6
+ isDirty: number;
7
+ isHasNotCheckOutOrder: number;
8
+ roomCategoryId: number;
9
+ roomCategoryName: string;
10
+ statuses: StatusView[];
11
+ }
12
+ export interface StatusView {
13
+ date: string;
14
+ isBlock: number;
15
+ isOccupation: number;
16
+ }
17
+ export interface RoomCategoryStatusesResponse {
18
+ roomStatusViews: RoomStatusView[];
19
+ }
20
+ export interface APIResponse {
21
+ success: boolean;
22
+ errorCode?: string;
23
+ errorMsg?: string;
24
+ errorDetail?: string;
25
+ data?: RoomCategoryStatusesResponse;
26
+ }
27
+ export declare const queryRoomStatusNewHandler: ToolHandler;
28
+ //# sourceMappingURL=queryRoomStatusNew.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryRoomStatusNew.d.ts","sourceRoot":"","sources":["../../../src/tools/rooms/queryRoomStatusNew.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAiBtD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,cAAc,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,4BAA4B,CAAC;CACrC;AAED,eAAO,MAAM,yBAAyB,EAAE,WA2DvC,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { handleError, createSuccessResult } from '../../utils/errorHandler.js';
2
+ import { z } from 'zod';
3
+ // 参数验证Schema
4
+ const queryRoomStatusNewSchema = z.object({
5
+ date: z.string().regex(/^\d{4}-\d{2}-\d{2}$/, '日期格式必须是 YYYY-MM-DD').optional(),
6
+ days: z.number().int().positive().default(30),
7
+ roomCategoryIds: z.array(z.number()).optional(),
8
+ roomCategoryGroupIds: z.array(z.number()).optional(),
9
+ channelIds: z.array(z.number()).optional(),
10
+ searchKey: z.string().optional(),
11
+ pageNum: z.number().int().positive().default(1),
12
+ pageSize: z.number().int().positive().max(100).default(15),
13
+ });
14
+ export const queryRoomStatusNewHandler = async (args, context) => {
15
+ try {
16
+ const { apiClient, logger, permissionChecker } = context;
17
+ // 权限检查
18
+ permissionChecker.checkPermission('query_room_status_new', ['rooms:read']);
19
+ // 参数验证
20
+ const validatedParams = queryRoomStatusNewSchema.parse(args);
21
+ // 如果没有提供date,使用当天日期
22
+ const date = validatedParams.date || new Date().toISOString().split('T')[0];
23
+ logger.info('Querying room status (new API)', {
24
+ date,
25
+ days: validatedParams.days,
26
+ });
27
+ // 从context中获取campId
28
+ const campId = context.campId;
29
+ if (!campId) {
30
+ throw new Error('APP_ID not configured. Please set APP_ID environment variable.');
31
+ }
32
+ // 调用API
33
+ // 注意:hudson-access-token 已在HTTPClient拦截器中自动添加到header
34
+ const response = await apiClient.request({
35
+ method: 'POST',
36
+ url: '/roomCategoryStatuses/central/get',
37
+ headers: {
38
+ 'Content-Type': 'application/json',
39
+ },
40
+ data: {
41
+ // campId作为字符串传递
42
+ campId: String(campId),
43
+ date,
44
+ days: validatedParams.days,
45
+ roomCategoryIds: validatedParams.roomCategoryIds || null,
46
+ roomCategoryGroupIds: validatedParams.roomCategoryGroupIds || null,
47
+ channelIds: validatedParams.channelIds || null,
48
+ searchKey: validatedParams.searchKey || '',
49
+ pageNum: validatedParams.pageNum,
50
+ pageSize: validatedParams.pageSize,
51
+ },
52
+ });
53
+ // 检查API响应格式
54
+ if (!response.success) {
55
+ throw new Error(response.errorMsg || response.errorCode || 'API请求失败');
56
+ }
57
+ logger.info('Room status queried successfully (new API)', {
58
+ roomCount: response.data?.roomStatusViews?.length || 0,
59
+ });
60
+ return createSuccessResult(response.data || { roomStatusViews: [] });
61
+ }
62
+ catch (error) {
63
+ return handleError(error);
64
+ }
65
+ };
66
+ //# sourceMappingURL=queryRoomStatusNew.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryRoomStatusNew.js","sourceRoot":"","sources":["../../../src/tools/rooms/queryRoomStatusNew.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolHandler } from '../../types/mcp.js';
2
+ export declare const queryTodayRoomStatusHandler: ToolHandler;
3
+ //# sourceMappingURL=queryTodayRoomStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryTodayRoomStatus.d.ts","sourceRoot":"","sources":["../../../src/tools/rooms/queryTodayRoomStatus.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AA2FtD,eAAO,MAAM,2BAA2B,EAAE,WAyEzC,CAAC"}