@lerianstudio/matcher-mcp 5.0.0-beta.65 → 5.0.0-beta.67

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 (177) hide show
  1. package/dist/auth/request-token.js +11 -69
  2. package/dist/auth/request-token.js.map +1 -1
  3. package/dist/config.js +5 -20
  4. package/dist/config.js.map +1 -1
  5. package/dist/copilot/agent.js +5 -9
  6. package/dist/copilot/agent.js.map +1 -1
  7. package/dist/copilot/provider-anthropic.js +2 -16
  8. package/dist/copilot/provider-anthropic.js.map +1 -1
  9. package/dist/copilot/provider-openrouter.js +5 -18
  10. package/dist/copilot/provider-openrouter.js.map +1 -1
  11. package/dist/copilot/provider-shared.js +11 -0
  12. package/dist/copilot/provider-shared.js.map +1 -1
  13. package/dist/copilot/speech-provider.js +84 -0
  14. package/dist/copilot/speech-provider.js.map +1 -0
  15. package/dist/copilot/sse.js +5 -0
  16. package/dist/copilot/sse.js.map +1 -1
  17. package/dist/copilot/test_helpers.js +50 -0
  18. package/dist/copilot/test_helpers.js.map +1 -0
  19. package/dist/copilot/tools.js +14 -65
  20. package/dist/copilot/tools.js.map +1 -1
  21. package/dist/copilot/transcribe-handler.js +8 -93
  22. package/dist/copilot/transcribe-handler.js.map +1 -1
  23. package/dist/copilot/turn-request.js +76 -0
  24. package/dist/copilot/turn-request.js.map +1 -0
  25. package/dist/copilot/turns-handler.js +11 -102
  26. package/dist/copilot/turns-handler.js.map +1 -1
  27. package/dist/observability/otel.js +7 -29
  28. package/dist/observability/otel.js.map +1 -1
  29. package/dist/server.js +12 -81
  30. package/dist/server.js.map +1 -1
  31. package/dist/spec/enum-policy.js +9 -41
  32. package/dist/spec/enum-policy.js.map +1 -1
  33. package/dist/spec/schema-parity.js +4 -18
  34. package/dist/spec/schema-parity.js.map +1 -1
  35. package/dist/tools/context/list.js +7 -34
  36. package/dist/tools/context/list.js.map +1 -1
  37. package/dist/tools/context/shared.js +3 -29
  38. package/dist/tools/context/shared.js.map +1 -1
  39. package/dist/tools/context/update.js +2 -3
  40. package/dist/tools/context/update.js.map +1 -1
  41. package/dist/tools/dashboard/aggregates.js +2 -8
  42. package/dist/tools/dashboard/aggregates.js.map +1 -1
  43. package/dist/tools/dashboard/cash-impact.js +2 -8
  44. package/dist/tools/dashboard/cash-impact.js.map +1 -1
  45. package/dist/tools/dashboard/match-rate.js +2 -8
  46. package/dist/tools/dashboard/match-rate.js.map +1 -1
  47. package/dist/tools/dashboard/metrics.js +2 -8
  48. package/dist/tools/dashboard/metrics.js.map +1 -1
  49. package/dist/tools/dashboard/shared.js +5 -26
  50. package/dist/tools/dashboard/shared.js.map +1 -1
  51. package/dist/tools/dashboard/sla.js +2 -8
  52. package/dist/tools/dashboard/sla.js.map +1 -1
  53. package/dist/tools/dashboard/source-breakdown.js +2 -8
  54. package/dist/tools/dashboard/source-breakdown.js.map +1 -1
  55. package/dist/tools/dashboard/volume.js +2 -8
  56. package/dist/tools/dashboard/volume.js.map +1 -1
  57. package/dist/tools/dispute/close.js +2 -3
  58. package/dist/tools/dispute/close.js.map +1 -1
  59. package/dist/tools/dispute/list.js +16 -46
  60. package/dist/tools/dispute/list.js.map +1 -1
  61. package/dist/tools/dispute/shared.js +3 -29
  62. package/dist/tools/dispute/shared.js.map +1 -1
  63. package/dist/tools/dispute/submit-evidence.js +2 -3
  64. package/dist/tools/dispute/submit-evidence.js.map +1 -1
  65. package/dist/tools/exception/adjust-entry.js +2 -3
  66. package/dist/tools/exception/adjust-entry.js.map +1 -1
  67. package/dist/tools/exception/history.js +6 -23
  68. package/dist/tools/exception/history.js.map +1 -1
  69. package/dist/tools/exception/list.js +9 -53
  70. package/dist/tools/exception/list.js.map +1 -1
  71. package/dist/tools/exception/shared.js +3 -29
  72. package/dist/tools/exception/shared.js.map +1 -1
  73. package/dist/tools/fee-rule/create.js +2 -3
  74. package/dist/tools/fee-rule/create.js.map +1 -1
  75. package/dist/tools/fee-rule/list.js +7 -28
  76. package/dist/tools/fee-rule/list.js.map +1 -1
  77. package/dist/tools/fee-rule/shared.js +3 -29
  78. package/dist/tools/fee-rule/shared.js.map +1 -1
  79. package/dist/tools/fee-rule/update.js +2 -3
  80. package/dist/tools/fee-rule/update.js.map +1 -1
  81. package/dist/tools/fee-schedule/list.js +6 -23
  82. package/dist/tools/fee-schedule/list.js.map +1 -1
  83. package/dist/tools/fee-schedule/shared.js +3 -29
  84. package/dist/tools/fee-schedule/shared.js.map +1 -1
  85. package/dist/tools/fee-schedule/simulate.js +2 -3
  86. package/dist/tools/fee-schedule/simulate.js.map +1 -1
  87. package/dist/tools/fee-schedule/update.js +2 -3
  88. package/dist/tools/fee-schedule/update.js.map +1 -1
  89. package/dist/tools/field-map/get.js +2 -5
  90. package/dist/tools/field-map/get.js.map +1 -1
  91. package/dist/tools/field-map/list.js +7 -28
  92. package/dist/tools/field-map/list.js.map +1 -1
  93. package/dist/tools/field-map/shared.js +3 -29
  94. package/dist/tools/field-map/shared.js.map +1 -1
  95. package/dist/tools/generic/invoke.js +4 -26
  96. package/dist/tools/generic/invoke.js.map +1 -1
  97. package/dist/tools/ingestion/job-errors-list.js +2 -5
  98. package/dist/tools/ingestion/job-errors-list.js.map +1 -1
  99. package/dist/tools/ingestion/job-get.js +2 -5
  100. package/dist/tools/ingestion/job-get.js.map +1 -1
  101. package/dist/tools/ingestion/job-transactions-list.js +8 -39
  102. package/dist/tools/ingestion/job-transactions-list.js.map +1 -1
  103. package/dist/tools/ingestion/jobs-list.js +7 -34
  104. package/dist/tools/ingestion/jobs-list.js.map +1 -1
  105. package/dist/tools/ingestion/shared.js +3 -29
  106. package/dist/tools/ingestion/shared.js.map +1 -1
  107. package/dist/tools/ingestion/transaction-ignore.js +2 -5
  108. package/dist/tools/ingestion/transaction-ignore.js.map +1 -1
  109. package/dist/tools/ingestion/transactions-search.js +7 -43
  110. package/dist/tools/ingestion/transactions-search.js.map +1 -1
  111. package/dist/tools/input-fields.js +36 -0
  112. package/dist/tools/input-fields.js.map +1 -0
  113. package/dist/tools/match-rule/delete.js +2 -4
  114. package/dist/tools/match-rule/delete.js.map +1 -1
  115. package/dist/tools/match-rule/get.js +2 -4
  116. package/dist/tools/match-rule/get.js.map +1 -1
  117. package/dist/tools/match-rule/list.js +7 -31
  118. package/dist/tools/match-rule/list.js.map +1 -1
  119. package/dist/tools/match-rule/shared.js +3 -29
  120. package/dist/tools/match-rule/shared.js.map +1 -1
  121. package/dist/tools/match-rule/update.js +4 -8
  122. package/dist/tools/match-rule/update.js.map +1 -1
  123. package/dist/tools/matching/groups.js +3 -12
  124. package/dist/tools/matching/groups.js.map +1 -1
  125. package/dist/tools/matching/list.js +7 -31
  126. package/dist/tools/matching/list.js.map +1 -1
  127. package/dist/tools/matching/shared.js +3 -31
  128. package/dist/tools/matching/shared.js.map +1 -1
  129. package/dist/tools/query-handler.js +8 -0
  130. package/dist/tools/query-handler.js.map +1 -0
  131. package/dist/tools/report/count-exceptions.js +2 -8
  132. package/dist/tools/report/count-exceptions.js.map +1 -1
  133. package/dist/tools/report/count-matched.js +2 -8
  134. package/dist/tools/report/count-matched.js.map +1 -1
  135. package/dist/tools/report/count-transactions.js +2 -8
  136. package/dist/tools/report/count-transactions.js.map +1 -1
  137. package/dist/tools/report/count-unmatched.js +2 -8
  138. package/dist/tools/report/count-unmatched.js.map +1 -1
  139. package/dist/tools/report/export-exceptions.js +2 -8
  140. package/dist/tools/report/export-exceptions.js.map +1 -1
  141. package/dist/tools/report/export-matched.js +2 -8
  142. package/dist/tools/report/export-matched.js.map +1 -1
  143. package/dist/tools/report/export-summary.js +2 -8
  144. package/dist/tools/report/export-summary.js.map +1 -1
  145. package/dist/tools/report/export-unmatched.js +2 -8
  146. package/dist/tools/report/export-unmatched.js.map +1 -1
  147. package/dist/tools/report/export-variance.js +2 -8
  148. package/dist/tools/report/export-variance.js.map +1 -1
  149. package/dist/tools/report/matched.js +2 -8
  150. package/dist/tools/report/matched.js.map +1 -1
  151. package/dist/tools/report/shared.js +9 -55
  152. package/dist/tools/report/shared.js.map +1 -1
  153. package/dist/tools/report/summary.js +2 -8
  154. package/dist/tools/report/summary.js.map +1 -1
  155. package/dist/tools/report/unmatched.js +2 -8
  156. package/dist/tools/report/unmatched.js.map +1 -1
  157. package/dist/tools/report/variance.js +2 -8
  158. package/dist/tools/report/variance.js.map +1 -1
  159. package/dist/tools/request-fields.js +17 -0
  160. package/dist/tools/request-fields.js.map +1 -0
  161. package/dist/tools/shared-dispatch.js +38 -0
  162. package/dist/tools/shared-dispatch.js.map +1 -0
  163. package/dist/tools/source/archive.js +2 -5
  164. package/dist/tools/source/archive.js.map +1 -1
  165. package/dist/tools/source/create.js +2 -3
  166. package/dist/tools/source/create.js.map +1 -1
  167. package/dist/tools/source/get.js +2 -5
  168. package/dist/tools/source/get.js.map +1 -1
  169. package/dist/tools/source/list.js +7 -31
  170. package/dist/tools/source/list.js.map +1 -1
  171. package/dist/tools/source/restore.js +2 -5
  172. package/dist/tools/source/restore.js.map +1 -1
  173. package/dist/tools/source/shared.js +3 -29
  174. package/dist/tools/source/shared.js.map +1 -1
  175. package/dist/tools/source/update.js +4 -9
  176. package/dist/tools/source/update.js.map +1 -1
  177. package/package.json +1 -1
@@ -7,6 +7,7 @@
7
7
  // fail-closed relay. The report is implicitly tenant-scoped by the relayed
8
8
  // token; contextId is a routing path param and source_id a data filter — neither
9
9
  // is a tenant field, and no tenant field is accepted.
10
+ import { queryHandler } from '../query-handler.js';
10
11
  import { buildDashboardQuery, contextDashboardPath, dashboardQueryInputShape, dispatchDashboard, } from './shared.js';
11
12
  /** Zod raw shape for `dashboard_aggregates` input — the shared dashboard shape. */
12
13
  export const dashboardAggregatesInputShape = dashboardQueryInputShape;
@@ -32,13 +33,6 @@ export function registerDashboardAggregatesTool(server) {
32
33
  'back in volume.periodStart/volume.periodEnd — check those before ' +
33
34
  'reporting a number as final. No tenant field is accepted.',
34
35
  inputSchema: dashboardAggregatesInputShape,
35
- }, async (args, extra) => {
36
- const query = buildDashboardQuery(args);
37
- return dispatchDashboard({
38
- method: 'GET',
39
- path: contextDashboardPath(args.contextId),
40
- ...(query !== undefined ? { query } : {}),
41
- }, extra);
42
- });
36
+ }, queryHandler(buildDashboardQuery, (args) => contextDashboardPath(args.contextId), dispatchDashboard));
43
37
  }
44
38
  //# sourceMappingURL=aggregates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"aggregates.js","sourceRoot":"","sources":["../../../src/tools/dashboard/aggregates.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,mDAAmD;AACnD,8EAA8E;AAC9E,2EAA2E;AAC3E,iFAAiF;AACjF,sDAAsD;AAItD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,mFAAmF;AACnF,MAAM,CAAC,MAAM,6BAA6B,GAAG,wBAAwB,CAAA;AAErE;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,WAAW,EACT,sEAAsE;YACtE,0EAA0E;YAC1E,wEAAwE;YACxE,wEAAwE;YACxE,0DAA0D;YAC1D,iDAAiD;YACjD,+DAA+D;YAC/D,wEAAwE;YACxE,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,qEAAqE;YACrE,mEAAmE;YACnE,2DAA2D;QAC7D,WAAW,EAAE,6BAA6B;KAC3C,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"aggregates.js","sourceRoot":"","sources":["../../../src/tools/dashboard/aggregates.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,EAAE;AACF,+EAA+E;AAC/E,6EAA6E;AAC7E,mDAAmD;AACnD,8EAA8E;AAC9E,2EAA2E;AAC3E,iFAAiF;AACjF,sDAAsD;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,mFAAmF;AACnF,MAAM,CAAC,MAAM,6BAA6B,GAAG,wBAAwB,CAAA;AAErE;;;;GAIG;AACH,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,WAAW,EACT,sEAAsE;YACtE,0EAA0E;YAC1E,wEAAwE;YACxE,wEAAwE;YACxE,0DAA0D;YAC1D,iDAAiD;YACjD,+DAA+D;YAC/D,wEAAwE;YACxE,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,qEAAqE;YACrE,mEAAmE;YACnE,2DAA2D;QAC7D,WAAW,EAAE,6BAA6B;KAC3C,EACD,YAAY,CACV,mBAAmB,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,EAC9C,iBAAiB,CAClB,CACF,CAAA;AACH,CAAC"}
@@ -6,6 +6,7 @@
6
6
  // path + optional date_from/date_to/source_id query) and the fail-closed relay.
7
7
  // contextId is a routing path param and source_id a data filter — neither is a
8
8
  // tenant field, and no tenant field is accepted.
9
+ import { queryHandler } from '../query-handler.js';
9
10
  import { buildDashboardQuery, contextDashboardSlicePath, dashboardQueryInputShape, dispatchDashboard, } from './shared.js';
10
11
  /** Zod raw shape for `dashboard_cash_impact` input — the shared dashboard shape. */
11
12
  export const dashboardCashImpactInputShape = dashboardQueryInputShape;
@@ -25,13 +26,6 @@ export function registerDashboardCashImpactTool(server) {
25
26
  'explicit date_from/date_to, max 90-day span) and/or source_id (UUID ' +
26
27
  'data filter). No tenant field is accepted.',
27
28
  inputSchema: dashboardCashImpactInputShape,
28
- }, async (args, extra) => {
29
- const query = buildDashboardQuery(args);
30
- return dispatchDashboard({
31
- method: 'GET',
32
- path: contextDashboardSlicePath(args.contextId, 'cash-impact'),
33
- ...(query !== undefined ? { query } : {}),
34
- }, extra);
35
- });
29
+ }, queryHandler(buildDashboardQuery, (args) => contextDashboardSlicePath(args.contextId, 'cash-impact'), dispatchDashboard));
36
30
  }
37
31
  //# sourceMappingURL=cash-impact.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cash-impact.js","sourceRoot":"","sources":["../../../src/tools/dashboard/cash-impact.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,0DAA0D;AAC1D,EAAE;AACF,yEAAyE;AACzE,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,iDAAiD;AAIjD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,oFAAoF;AACpF,MAAM,CAAC,MAAM,6BAA6B,GAAG,wBAAwB,CAAA;AAErE;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EACT,qEAAqE;YACrE,kEAAkE;YAClE,mEAAmE;YACnE,uEAAuE;YACvE,oEAAoE;YACpE,sEAAsE;YACtE,4CAA4C;QAC9C,WAAW,EAAE,6BAA6B;KAC3C,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC;YAC9D,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"cash-impact.js","sourceRoot":"","sources":["../../../src/tools/dashboard/cash-impact.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,0DAA0D;AAC1D,EAAE;AACF,yEAAyE;AACzE,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,iDAAiD;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,oFAAoF;AACpF,MAAM,CAAC,MAAM,6BAA6B,GAAG,wBAAwB,CAAA;AAErE;;;;;GAKG;AACH,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,WAAW,EACT,qEAAqE;YACrE,kEAAkE;YAClE,mEAAmE;YACnE,uEAAuE;YACvE,oEAAoE;YACpE,sEAAsE;YACtE,4CAA4C;QAC9C,WAAW,EAAE,6BAA6B;KAC3C,EACD,YAAY,CACV,mBAAmB,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,EAClE,iBAAiB,CAClB,CACF,CAAA;AACH,CAAC"}
@@ -6,6 +6,7 @@
6
6
  // date_from/date_to/source_id query) and the fail-closed relay. contextId is a
7
7
  // routing path param and source_id a data filter — neither is a tenant field,
8
8
  // and no tenant field is accepted.
9
+ import { queryHandler } from '../query-handler.js';
9
10
  import { buildDashboardQuery, contextDashboardSlicePath, dashboardQueryInputShape, dispatchDashboard, } from './shared.js';
10
11
  /** Zod raw shape for `dashboard_match_rate` input — the shared dashboard shape. */
11
12
  export const dashboardMatchRateInputShape = dashboardQueryInputShape;
@@ -25,13 +26,6 @@ export function registerDashboardMatchRateTool(server) {
25
26
  'an explicit date_from/date_to, max 90-day span) and/or source_id (UUID ' +
26
27
  'data filter). No tenant field is accepted.',
27
28
  inputSchema: dashboardMatchRateInputShape,
28
- }, async (args, extra) => {
29
- const query = buildDashboardQuery(args);
30
- return dispatchDashboard({
31
- method: 'GET',
32
- path: contextDashboardSlicePath(args.contextId, 'match-rate'),
33
- ...(query !== undefined ? { query } : {}),
34
- }, extra);
35
- });
29
+ }, queryHandler(buildDashboardQuery, (args) => contextDashboardSlicePath(args.contextId, 'match-rate'), dispatchDashboard));
36
30
  }
37
31
  //# sourceMappingURL=match-rate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"match-rate.js","sourceRoot":"","sources":["../../../src/tools/dashboard/match-rate.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,yDAAyD;AACzD,EAAE;AACF,yEAAyE;AACzE,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,mCAAmC;AAInC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,mFAAmF;AACnF,MAAM,CAAC,MAAM,4BAA4B,GAAG,wBAAwB,CAAA;AAEpE;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAAC,MAAiB;IAC9D,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,WAAW,EACT,8DAA8D;YAC9D,yEAAyE;YACzE,yEAAyE;YACzE,oEAAoE;YACpE,yEAAyE;YACzE,yEAAyE;YACzE,4CAA4C;QAC9C,WAAW,EAAE,4BAA4B;KAC1C,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC;YAC7D,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"match-rate.js","sourceRoot":"","sources":["../../../src/tools/dashboard/match-rate.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,yDAAyD;AACzD,EAAE;AACF,yEAAyE;AACzE,+EAA+E;AAC/E,+EAA+E;AAC/E,8EAA8E;AAC9E,mCAAmC;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,mFAAmF;AACnF,MAAM,CAAC,MAAM,4BAA4B,GAAG,wBAAwB,CAAA;AAEpE;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAAC,MAAiB;IAC9D,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,WAAW,EACT,8DAA8D;YAC9D,yEAAyE;YACzE,yEAAyE;YACzE,oEAAoE;YACpE,yEAAyE;YACzE,yEAAyE;YACzE,4CAA4C;QAC9C,WAAW,EAAE,4BAA4B;KAC1C,EACD,YAAY,CACV,mBAAmB,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EACjE,iBAAiB,CAClB,CACF,CAAA;AACH,CAAC"}
@@ -6,6 +6,7 @@
6
6
  // shape (contextId path + optional date_from/date_to/source_id query) and the
7
7
  // fail-closed relay. contextId is a routing path param and source_id a data
8
8
  // filter — neither is a tenant field, and no tenant field is accepted.
9
+ import { queryHandler } from '../query-handler.js';
9
10
  import { buildDashboardQuery, contextDashboardSlicePath, dashboardQueryInputShape, dispatchDashboard, } from './shared.js';
10
11
  /** Zod raw shape for `dashboard_metrics` input — the shared dashboard shape. */
11
12
  export const dashboardMetricsInputShape = dashboardQueryInputShape;
@@ -25,13 +26,6 @@ export function registerDashboardMetricsTool(server) {
25
26
  'date_from/date_to, max 90-day span) and/or source_id (UUID data ' +
26
27
  'filter). No tenant field is accepted.',
27
28
  inputSchema: dashboardMetricsInputShape,
28
- }, async (args, extra) => {
29
- const query = buildDashboardQuery(args);
30
- return dispatchDashboard({
31
- method: 'GET',
32
- path: contextDashboardSlicePath(args.contextId, 'metrics'),
33
- ...(query !== undefined ? { query } : {}),
34
- }, extra);
35
- });
29
+ }, queryHandler(buildDashboardQuery, (args) => contextDashboardSlicePath(args.contextId, 'metrics'), dispatchDashboard));
36
30
  }
37
31
  //# sourceMappingURL=metrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/tools/dashboard/metrics.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sDAAsD;AACtD,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,8EAA8E;AAC9E,4EAA4E;AAC5E,uEAAuE;AAIvE,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,wBAAwB,CAAA;AAElE;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,mEAAmE;YACnE,uEAAuE;YACvE,mEAAmE;YACnE,iEAAiE;YACjE,qEAAqE;YACrE,kEAAkE;YAClE,uCAAuC;QACzC,WAAW,EAAE,0BAA0B;KACxC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;YAC1D,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/tools/dashboard/metrics.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,sDAAsD;AACtD,EAAE;AACF,8EAA8E;AAC9E,iFAAiF;AACjF,8EAA8E;AAC9E,4EAA4E;AAC5E,uEAAuE;AAGvE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,gFAAgF;AAChF,MAAM,CAAC,MAAM,0BAA0B,GAAG,wBAAwB,CAAA;AAElE;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,mEAAmE;YACnE,uEAAuE;YACvE,mEAAmE;YACnE,iEAAiE;YACjE,qEAAqE;YACrE,kEAAkE;YAClE,uCAAuC;QACzC,WAAW,EAAE,0BAA0B;KACxC,EACD,YAAY,CACV,mBAAmB,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAC9D,iBAAiB,CAClB,CACF,CAAA;AACH,CAAC"}
@@ -18,7 +18,9 @@
18
18
  // ever read or injected, and no dashboard tool input carries one. source_id is a
19
19
  // data filter, never a tenant field.
20
20
  import { z } from 'zod';
21
+ import { reportDateFrom, reportDateTo } from '../input-fields.js';
21
22
  import { requireMatcherClient, UnauthenticatedError, } from '../../auth/request-token.js';
23
+ import { pickQuery } from '../request-fields.js';
22
24
  import { isMatcherApiError, toToolError } from '../tool-error.js';
23
25
  /** Build the context-scoped dashboard base path (the combined-aggregates op). */
24
26
  export function contextDashboardPath(contextId) {
@@ -56,21 +58,8 @@ export const dashboardQueryInputShape = {
56
58
  .min(1)
57
59
  .describe('The reconciliation context id (UUID) to report on. Routing path param, ' +
58
60
  'not a tenant field.'),
59
- date_from: z
60
- .string()
61
- .optional()
62
- .describe('Start date (YYYY-MM-DD), inclusive. Optional — if omitted (with ' +
63
- 'date_to), matcher defaults to the last ~30 days, SILENTLY EXCLUDING ' +
64
- 'everything older. A windowed result is NOT "the reconciliation ' +
65
- 'result" — for a complete picture, pass an explicit date_from/date_to ' +
66
- '(max 90-day span).'),
67
- date_to: z
68
- .string()
69
- .optional()
70
- .describe('End date (YYYY-MM-DD), inclusive. Optional — if omitted, matcher ' +
71
- 'defaults to tomorrow (UTC). Combined with an omitted date_from this ' +
72
- 'silently clips the window to the last ~30 days; pass an explicit ' +
73
- 'date_from/date_to (max 90-day span) for the full picture.'),
61
+ date_from: reportDateFrom,
62
+ date_to: reportDateTo,
74
63
  source_id: z
75
64
  .string()
76
65
  .optional()
@@ -83,17 +72,7 @@ export const dashboardQueryInputShape = {
83
72
  * param and is intentionally excluded here.
84
73
  */
85
74
  export function buildDashboardQuery(args) {
86
- const query = {};
87
- if (args.date_from !== undefined) {
88
- query.date_from = args.date_from;
89
- }
90
- if (args.date_to !== undefined) {
91
- query.date_to = args.date_to;
92
- }
93
- if (args.source_id !== undefined) {
94
- query.source_id = args.source_id;
95
- }
96
- return Object.keys(query).length > 0 ? query : undefined;
75
+ return pickQuery(args, ['date_from', 'date_to', 'source_id']);
97
76
  }
98
77
  /**
99
78
  * Run one assembled request through the relay: fail-closed auth, dispatch, and
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/tools/dashboard/shared.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/tools/dashboard/shared.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@
5
5
  // source_id query) and the fail-closed relay. contextId is a routing path param
6
6
  // and source_id a data filter — neither is a tenant field, and no tenant field
7
7
  // is accepted.
8
+ import { queryHandler } from '../query-handler.js';
8
9
  import { buildDashboardQuery, contextDashboardSlicePath, dashboardQueryInputShape, dispatchDashboard, } from './shared.js';
9
10
  /** Zod raw shape for `dashboard_sla` input — the shared dashboard shape. */
10
11
  export const dashboardSlaInputShape = dashboardQueryInputShape;
@@ -22,13 +23,6 @@ export function registerDashboardSlaTool(server) {
22
23
  'explicit date_from/date_to, max 90-day span) and/or source_id (UUID ' +
23
24
  'data filter). No tenant field is accepted.',
24
25
  inputSchema: dashboardSlaInputShape,
25
- }, async (args, extra) => {
26
- const query = buildDashboardQuery(args);
27
- return dispatchDashboard({
28
- method: 'GET',
29
- path: contextDashboardSlicePath(args.contextId, 'sla'),
30
- ...(query !== undefined ? { query } : {}),
31
- }, extra);
32
- });
26
+ }, queryHandler(buildDashboardQuery, (args) => contextDashboardSlicePath(args.contextId, 'sla'), dispatchDashboard));
33
27
  }
34
28
  //# sourceMappingURL=sla.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sla.js","sourceRoot":"","sources":["../../../src/tools/dashboard/sla.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,eAAe;AAIf,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,4EAA4E;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAA;AAE9D;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,uEAAuE;YACvE,mEAAmE;YACnE,uEAAuE;YACvE,sEAAsE;YACtE,sEAAsE;YACtE,4CAA4C;QAC9C,WAAW,EAAE,sBAAsB;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC;YACtD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"sla.js","sourceRoot":"","sources":["../../../src/tools/dashboard/sla.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,gFAAgF;AAChF,+EAA+E;AAC/E,eAAe;AAGf,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,4EAA4E;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAA;AAE9D;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,uEAAuE;YACvE,mEAAmE;YACnE,uEAAuE;YACvE,sEAAsE;YACtE,sEAAsE;YACtE,4CAA4C;QAC9C,WAAW,EAAE,sBAAsB;KACpC,EACD,YAAY,CACV,mBAAmB,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,EAC1D,iBAAiB,CAClB,CACF,CAAA;AACH,CAAC"}
@@ -6,6 +6,7 @@
6
6
  // + optional date_from/date_to/source_id query) and the fail-closed relay.
7
7
  // contextId is a routing path param and source_id a data filter — neither is a
8
8
  // tenant field, and no tenant field is accepted.
9
+ import { queryHandler } from '../query-handler.js';
9
10
  import { buildDashboardQuery, contextDashboardSlicePath, dashboardQueryInputShape, dispatchDashboard, } from './shared.js';
10
11
  /** Zod raw shape for `dashboard_source_breakdown` input — the shared dashboard shape. */
11
12
  export const dashboardSourceBreakdownInputShape = dashboardQueryInputShape;
@@ -25,13 +26,6 @@ export function registerDashboardSourceBreakdownTool(server) {
25
26
  'source_id (UUID data filter, to narrow to a single source). No tenant ' +
26
27
  'field is accepted.',
27
28
  inputSchema: dashboardSourceBreakdownInputShape,
28
- }, async (args, extra) => {
29
- const query = buildDashboardQuery(args);
30
- return dispatchDashboard({
31
- method: 'GET',
32
- path: contextDashboardSlicePath(args.contextId, 'source-breakdown'),
33
- ...(query !== undefined ? { query } : {}),
34
- }, extra);
35
- });
29
+ }, queryHandler(buildDashboardQuery, (args) => contextDashboardSlicePath(args.contextId, 'source-breakdown'), dispatchDashboard));
36
30
  }
37
31
  //# sourceMappingURL=source-breakdown.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-breakdown.js","sourceRoot":"","sources":["../../../src/tools/dashboard/source-breakdown.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,+DAA+D;AAC/D,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AACjF,2EAA2E;AAC3E,+EAA+E;AAC/E,iDAAiD;AAIjD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,yFAAyF;AACzF,MAAM,CAAC,MAAM,kCAAkC,GAAG,wBAAwB,CAAA;AAE1E;;;;;GAKG;AACH,MAAM,UAAU,oCAAoC,CAAC,MAAiB;IACpE,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,WAAW,EACT,wEAAwE;YACxE,qEAAqE;YACrE,yEAAyE;YACzE,qEAAqE;YACrE,sEAAsE;YACtE,wEAAwE;YACxE,oBAAoB;QACtB,WAAW,EAAE,kCAAkC;KAChD,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC;YACnE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"source-breakdown.js","sourceRoot":"","sources":["../../../src/tools/dashboard/source-breakdown.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,+DAA+D;AAC/D,EAAE;AACF,6EAA6E;AAC7E,iFAAiF;AACjF,2EAA2E;AAC3E,+EAA+E;AAC/E,iDAAiD;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,yFAAyF;AACzF,MAAM,CAAC,MAAM,kCAAkC,GAAG,wBAAwB,CAAA;AAE1E;;;;;GAKG;AACH,MAAM,UAAU,oCAAoC,CAAC,MAAiB;IACpE,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,WAAW,EACT,wEAAwE;YACxE,qEAAqE;YACrE,yEAAyE;YACzE,qEAAqE;YACrE,sEAAsE;YACtE,wEAAwE;YACxE,oBAAoB;QACtB,WAAW,EAAE,kCAAkC;KAChD,EACD,YAAY,CACV,mBAAmB,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,EACvE,iBAAiB,CAClB,CACF,CAAA;AACH,CAAC"}
@@ -6,6 +6,7 @@
6
6
  // date_from/date_to/source_id query) and the fail-closed relay. contextId is a
7
7
  // routing path param and source_id a data filter — neither is a tenant field,
8
8
  // and no tenant field is accepted.
9
+ import { queryHandler } from '../query-handler.js';
9
10
  import { buildDashboardQuery, contextDashboardSlicePath, dashboardQueryInputShape, dispatchDashboard, } from './shared.js';
10
11
  /** Zod raw shape for `dashboard_volume` input — the shared dashboard shape. */
11
12
  export const dashboardVolumeInputShape = dashboardQueryInputShape;
@@ -25,13 +26,6 @@ export function registerDashboardVolumeTool(server) {
25
26
  'resolved window in periodStart/periodEnd. Optionally also pass ' +
26
27
  'source_id (UUID data filter). No tenant field is accepted.',
27
28
  inputSchema: dashboardVolumeInputShape,
28
- }, async (args, extra) => {
29
- const query = buildDashboardQuery(args);
30
- return dispatchDashboard({
31
- method: 'GET',
32
- path: contextDashboardSlicePath(args.contextId, 'volume'),
33
- ...(query !== undefined ? { query } : {}),
34
- }, extra);
35
- });
29
+ }, queryHandler(buildDashboardQuery, (args) => contextDashboardSlicePath(args.contextId, 'volume'), dispatchDashboard));
36
30
  }
37
31
  //# sourceMappingURL=volume.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"volume.js","sourceRoot":"","sources":["../../../src/tools/dashboard/volume.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,qDAAqD;AACrD,EAAE;AACF,kEAAkE;AAClE,4EAA4E;AAC5E,+EAA+E;AAC/E,8EAA8E;AAC9E,mCAAmC;AAInC,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,+EAA+E;AAC/E,MAAM,CAAC,MAAM,yBAAyB,GAAG,wBAAwB,CAAA;AAEjE;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,sEAAsE;YACtE,wEAAwE;YACxE,uEAAuE;YACvE,kEAAkE;YAClE,wEAAwE;YACxE,iEAAiE;YACjE,4DAA4D;QAC9D,WAAW,EAAE,yBAAyB;KACvC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAA;QACvC,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;YACzD,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"volume.js","sourceRoot":"","sources":["../../../src/tools/dashboard/volume.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,qDAAqD;AACrD,EAAE;AACF,kEAAkE;AAClE,4EAA4E;AAC5E,+EAA+E;AAC/E,8EAA8E;AAC9E,mCAAmC;AAGnC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,+EAA+E;AAC/E,MAAM,CAAC,MAAM,yBAAyB,GAAG,wBAAwB,CAAA;AAEjE;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,WAAW,EACT,sEAAsE;YACtE,wEAAwE;YACxE,uEAAuE;YACvE,kEAAkE;YAClE,wEAAwE;YACxE,iEAAiE;YACjE,4DAA4D;QAC9D,WAAW,EAAE,yBAAyB;KACvC,EACD,YAAY,CACV,mBAAmB,EACnB,CAAC,IAAI,EAAE,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,EAC7D,iBAAiB,CAClB,CACF,CAAA;AACH,CAAC"}
@@ -5,6 +5,7 @@
5
5
  // `resolution` (1–5000 chars) are both required. disputeId is a UUID path param
6
6
  // and is stripped from the POST body; no tenant field is accepted.
7
7
  import { z } from 'zod';
8
+ import { bodyWithout } from '../request-fields.js';
8
9
  import { disputeClosePath, dispatchDispute } from './shared.js';
9
10
  /** Zod raw shape for `dispute_close` input — id (path) + the resolution body. */
10
11
  export const closeDisputeInputShape = {
@@ -21,9 +22,7 @@ export const closeDisputeInputShape = {
21
22
  };
22
23
  /** Build the close POST body from the input minus the path-only `disputeId`. */
23
24
  export function buildCloseBody(args) {
24
- const { disputeId: _disputeId, ...body } = args;
25
- void _disputeId;
26
- return body;
25
+ return bodyWithout(args, ['disputeId']);
27
26
  }
28
27
  /**
29
28
  * Register `dispute_close`. Splits the id (path) from the body, dispatches a POST
@@ -1 +1 @@
1
- {"version":3,"file":"close.js","sourceRoot":"","sources":["../../../src/tools/dispute/close.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,mEAAmE;AAEnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE/D,iFAAiF;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACxE,GAAG,EAAE,CAAC;SACH,OAAO,EAAE;SACT,QAAQ,CAAC,qDAAqD,CAAC;IAClE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CACP,2EAA2E;QACzE,8DAA8D,CACjE;CACJ,CAAA;AAOD,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAC5B,IAAuB;IAEvB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAC/C,KAAK,UAAU,CAAA;IACf,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,qEAAqE;YACrE,sEAAsE;YACtE,wEAAwE;YACxE,8DAA8D;QAChE,WAAW,EAAE,sBAAsB;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,eAAe,CACpB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;YACtC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;SAC3B,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"close.js","sourceRoot":"","sources":["../../../src/tools/dispute/close.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,gFAAgF;AAChF,mEAAmE;AAEnE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE/D,iFAAiF;AACjF,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACxE,GAAG,EAAE,CAAC;SACH,OAAO,EAAE;SACT,QAAQ,CAAC,qDAAqD,CAAC;IAClE,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CACP,2EAA2E;QACzE,8DAA8D,CACjE;CACJ,CAAA;AAOD,gFAAgF;AAChF,MAAM,UAAU,cAAc,CAC5B,IAAuB;IAEvB,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,WAAW,EACT,qEAAqE;YACrE,sEAAsE;YACtE,wEAAwE;YACxE,8DAA8D;QAChE,WAAW,EAAE,sBAAsB;KACpC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,eAAe,CACpB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;YACtC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;SAC3B,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -9,6 +9,9 @@
9
9
  // Input field names are idiomatic camelCase; they map to matcher's snake_case
10
10
  // wire query params (date_from/date_to/sort_by/sort_order) in buildListQuery.
11
11
  import { z } from 'zod';
12
+ import { nextCursor, pageLimit } from '../input-fields.js';
13
+ import { queryHandler } from '../query-handler.js';
14
+ import { optionalQuery } from '../request-fields.js';
12
15
  import { dispatchDispute, DISPUTES_PATH } from './shared.js';
13
16
  /** Lifecycle states a dispute can be filtered by. */
14
17
  export const DISPUTE_STATES = [
@@ -57,18 +60,8 @@ export const listDisputesInputShape = {
57
60
  .optional()
58
61
  .describe('Inclusive upper bound on the filter date, as an RFC 3339 timestamp, e.g. ' +
59
62
  '"2025-01-31T23:59:59Z". Sent as the date_to query param.'),
60
- limit: z
61
- .number()
62
- .int()
63
- .min(1)
64
- .max(200)
65
- .optional()
66
- .describe('Maximum number of records to return (1–200, default 20).'),
67
- cursor: z
68
- .string()
69
- .optional()
70
- .describe('Opaque pagination cursor from a prior response. Re-call with the ' +
71
- 'returned nextCursor to page forward (there is no auto-pagination).'),
63
+ limit: pageLimit,
64
+ cursor: nextCursor,
72
65
  sortBy: z
73
66
  .enum(DISPUTE_SORT_FIELDS)
74
67
  .optional()
@@ -84,32 +77,16 @@ export const listDisputesInputShape = {
84
77
  * camelCase input fields map to matcher's snake_case wire query params.
85
78
  */
86
79
  export function buildListQuery(args) {
87
- const query = {};
88
- if (args.state !== undefined) {
89
- query.state = args.state;
90
- }
91
- if (args.category !== undefined) {
92
- query.category = args.category;
93
- }
94
- if (args.dateFrom !== undefined) {
95
- query.date_from = args.dateFrom;
96
- }
97
- if (args.dateTo !== undefined) {
98
- query.date_to = args.dateTo;
99
- }
100
- if (args.limit !== undefined) {
101
- query.limit = args.limit;
102
- }
103
- if (args.cursor !== undefined) {
104
- query.cursor = args.cursor;
105
- }
106
- if (args.sortBy !== undefined) {
107
- query.sort_by = args.sortBy;
108
- }
109
- if (args.sortOrder !== undefined) {
110
- query.sort_order = args.sortOrder;
111
- }
112
- return Object.keys(query).length > 0 ? query : undefined;
80
+ return optionalQuery({
81
+ state: args.state,
82
+ category: args.category,
83
+ date_from: args.dateFrom,
84
+ date_to: args.dateTo,
85
+ limit: args.limit,
86
+ cursor: args.cursor,
87
+ sort_by: args.sortBy,
88
+ sort_order: args.sortOrder,
89
+ });
113
90
  }
114
91
  /**
115
92
  * Register `dispute_list`. Passes the filters/pagination/sort through and returns
@@ -125,13 +102,6 @@ export function registerDisputeListTool(server) {
125
102
  'paginate by re-calling with the returned nextCursor. No tenant field is ' +
126
103
  'accepted; the tenant is derived from your bearer token.',
127
104
  inputSchema: listDisputesInputShape,
128
- }, async (args, extra) => {
129
- const query = buildListQuery(args);
130
- return dispatchDispute({
131
- method: 'GET',
132
- path: DISPUTES_PATH,
133
- ...(query !== undefined ? { query } : {}),
134
- }, extra);
135
- });
105
+ }, queryHandler(buildListQuery, () => DISPUTES_PATH, dispatchDispute));
136
106
  }
137
107
  //# sourceMappingURL=list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/tools/dispute/list.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/tools/dispute/list.ts"],"names":[],"mappings":"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"}
@@ -11,8 +11,7 @@
11
11
  // owns the request-scoped relay and fails closed when no usable credential was
12
12
  // provided. No tenant identifier is ever read or injected (matcher derives
13
13
  // tenant from the relayed JWT); no dispute tool input carries one.
14
- import { requireMatcherClient, UnauthenticatedError, } from '../../auth/request-token.js';
15
- import { isMatcherApiError, toToolError } from '../tool-error.js';
14
+ import { dispatchToolRequest, } from '../shared-dispatch.js';
16
15
  /** Base path for the dispute resource (tenant-scoped; tenant from the token). */
17
16
  export const DISPUTES_PATH = '/v1/disputes';
18
17
  /** Build the single-dispute sub-path, URL-encoding the id so reserved chars are safe. */
@@ -35,32 +34,7 @@ export function disputeEvidencePath(disputeId) {
35
34
  * `clientFor` is injectable for tests; production callers pass nothing and get
36
35
  * the request-scoped, fail-closed `requireMatcherClient`.
37
36
  */
38
- export async function dispatchDispute(request, extra, clientFor = requireMatcherClient) {
39
- let client;
40
- try {
41
- // Fail-closed on a missing / empty / non-Bearer credential.
42
- client = clientFor(extra);
43
- }
44
- catch (err) {
45
- if (err instanceof UnauthenticatedError) {
46
- return { isError: true, content: [{ type: 'text', text: err.message }] };
47
- }
48
- throw err;
49
- }
50
- try {
51
- const result = await client.request(request);
52
- // Success → matcher's JSON returned as-is (incl. pagination envelopes and
53
- // 204 → null for an empty body).
54
- return { content: [{ type: 'text', text: JSON.stringify(result ?? null) }] };
55
- }
56
- catch (err) {
57
- // RFC 9457 problem → the SHARED structured tool error (status/title/detail/
58
- // code preserved). A non-matcher error is a bug, not a matcher failure, and
59
- // is re-thrown rather than masqueraded as one.
60
- if (isMatcherApiError(err)) {
61
- return toToolError(err);
62
- }
63
- throw err;
64
- }
37
+ export async function dispatchDispute(request, extra, clientFor) {
38
+ return dispatchToolRequest(request, extra, clientFor);
65
39
  }
66
40
  //# sourceMappingURL=shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/tools/dispute/shared.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,wEAAwE;AACxE,2EAA2E;AAC3E,iFAAiF;AACjF,iFAAiF;AACjF,4EAA4E;AAC5E,4CAA4C;AAC5C,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,mEAAmE;AAInE,OAAO,EACL,oBAAoB,EACpB,oBAAoB,GAErB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEjE,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAA;AAE3C,yFAAyF;AACzF,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO,GAAG,aAAa,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAA;AAC5D,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAA;AAC1C,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,WAAW,CAAA;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAuB,EACvB,KAAmC,EACnC,YAAyD,oBAAoB;IAE7E,IAAI,MAAqB,CAAA;IACzB,IAAI,CAAC;QACH,4DAA4D;QAC5D,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,oBAAoB,EAAE,CAAC;YACxC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,CAAA;QAC1E,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5C,0EAA0E;QAC1E,iCAAiC;QACjC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;IAC9E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,4EAA4E;QAC5E,4EAA4E;QAC5E,+CAA+C;QAC/C,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,WAAW,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/tools/dispute/shared.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,EAAE;AACF,wEAAwE;AACxE,2EAA2E;AAC3E,iFAAiF;AACjF,iFAAiF;AACjF,4EAA4E;AAC5E,4CAA4C;AAC5C,EAAE;AACF,gFAAgF;AAChF,+EAA+E;AAC/E,2EAA2E;AAC3E,mEAAmE;AAMnE,OAAO,EACL,mBAAmB,GAEpB,MAAM,uBAAuB,CAAA;AAE9B,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,cAAc,CAAA;AAE3C,yFAAyF;AACzF,MAAM,UAAU,WAAW,CAAC,SAAiB;IAC3C,OAAO,GAAG,aAAa,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAA;AAC5D,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAA;AAC1C,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,mBAAmB,CAAC,SAAiB;IACnD,OAAO,GAAG,WAAW,CAAC,SAAS,CAAC,WAAW,CAAA;AAC7C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAuB,EACvB,KAAmC,EACnC,SAAgC;IAEhC,OAAO,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;AACvD,CAAC"}
@@ -6,6 +6,7 @@
6
6
  // (a URL to an already-uploaded file), NOT a multipart upload. disputeId is a
7
7
  // UUID path param and is stripped from the POST body; no tenant field is accepted.
8
8
  import { z } from 'zod';
9
+ import { bodyWithout } from '../request-fields.js';
9
10
  import { disputeEvidencePath, dispatchDispute } from './shared.js';
10
11
  /** Zod raw shape for `dispute_submit_evidence` input — id (path) + evidence body. */
11
12
  export const submitEvidenceInputShape = {
@@ -29,9 +30,7 @@ export const submitEvidenceInputShape = {
29
30
  };
30
31
  /** Build the evidence POST body from the input minus the path-only `disputeId`. */
31
32
  export function buildEvidenceBody(args) {
32
- const { disputeId: _disputeId, ...body } = args;
33
- void _disputeId;
34
- return body;
33
+ return bodyWithout(args, ['disputeId']);
35
34
  }
36
35
  /**
37
36
  * Register `dispute_submit_evidence`. Splits the id (path) from the body,
@@ -1 +1 @@
1
- {"version":3,"file":"submit-evidence.js","sourceRoot":"","sources":["../../../src/tools/dispute/submit-evidence.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,iFAAiF;AACjF,6EAA6E;AAC7E,iFAAiF;AACjF,8EAA8E;AAC9E,mFAAmF;AAEnF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElE,qFAAqF;AACrF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CACP,sEAAsE;QACpE,oCAAoC,CACvC;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,wEAAwE;QACtE,wEAAwE;QACxE,SAAS,CACZ;CACJ,CAAA;AAOD,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAC/B,IAAyB;IAEzB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IAC/C,KAAK,UAAU,CAAA;IACf,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iCAAiC,CAAC,MAAiB;IACjE,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,WAAW,EACT,sEAAsE;YACtE,0EAA0E;YAC1E,sEAAsE;YACtE,wEAAwE;YACxE,8BAA8B;QAChC,WAAW,EAAE,wBAAwB;KACtC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,eAAe,CACpB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;YACzC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;SAC9B,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"submit-evidence.js","sourceRoot":"","sources":["../../../src/tools/dispute/submit-evidence.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,EAAE;AACF,iFAAiF;AACjF,6EAA6E;AAC7E,iFAAiF;AACjF,8EAA8E;AAC9E,mFAAmF;AAEnF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElE,qFAAqF;AACrF,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,SAAS,EAAE,CAAC;SACT,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,8CAA8C,CAAC;IAC3D,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CACP,sEAAsE;QACpE,oCAAoC,CACvC;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,wEAAwE;QACtE,wEAAwE;QACxE,SAAS,CACZ;CACJ,CAAA;AAOD,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAC/B,IAAyB;IAEzB,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC,CAAA;AACzC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iCAAiC,CAAC,MAAiB;IACjE,MAAM,CAAC,YAAY,CACjB,yBAAyB,EACzB;QACE,WAAW,EACT,sEAAsE;YACtE,0EAA0E;YAC1E,sEAAsE;YACtE,wEAAwE;YACxE,8BAA8B;QAChC,WAAW,EAAE,wBAAwB;KACtC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,eAAe,CACpB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;YACzC,IAAI,EAAE,iBAAiB,CAAC,IAAI,CAAC;SAC9B,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -7,6 +7,7 @@
7
7
  // (RFC 3339), all required. exceptionId is a path param; no tenant field is
8
8
  // accepted.
9
9
  import { z } from 'zod';
10
+ import { bodyWithout } from '../request-fields.js';
10
11
  import { dispatchException, exceptionAdjustEntryPath } from './shared.js';
11
12
  /** Zod raw shape for `exception_adjust_entry` input — path id + adjustment body. */
12
13
  export const adjustEntryInputShape = {
@@ -43,9 +44,7 @@ export const adjustEntryInputShape = {
43
44
  * AdjustEntryRequest fields are sent; exceptionId travels in the path.
44
45
  */
45
46
  export function buildAdjustEntryBody(args) {
46
- const { exceptionId: _exceptionId, ...body } = args;
47
- void _exceptionId;
48
- return body;
47
+ return bodyWithout(args, ['exceptionId']);
49
48
  }
50
49
  /**
51
50
  * Register `exception_adjust_entry`. Substitutes the id into the path, builds the
@@ -1 +1 @@
1
- {"version":3,"file":"adjust-entry.js","sourceRoot":"","sources":["../../../src/tools/exception/adjust-entry.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,EAAE;AACF,sEAAsE;AACtE,+EAA+E;AAC/E,iFAAiF;AACjF,6EAA6E;AAC7E,4EAA4E;AAC5E,YAAY;AAEZ,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAEzE,oFAAoF;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,8DAA8D,CAAC;IAC3E,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,sEAAsE,CAAC;IACnF,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,CACP,wEAAwE;QACtE,gEAAgE,CACnE;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,0EAA0E,CAAC;IACvF,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,CACP,mEAAmE;QACjE,0BAA0B,CAC7B;CACJ,CAAA;AAKD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAsB;IAEtB,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAA;IACnD,KAAK,YAAY,CAAA;IACjB,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAAC,MAAiB;IAChE,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,WAAW,EACT,wEAAwE;YACxE,0EAA0E;YAC1E,2EAA2E;YAC3E,mEAAmE;YACnE,0EAA0E;QAC5E,WAAW,EAAE,qBAAqB;KACnC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC;YAChD,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC;SACjC,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"adjust-entry.js","sourceRoot":"","sources":["../../../src/tools/exception/adjust-entry.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,EAAE;AACF,sEAAsE;AACtE,+EAA+E;AAC/E,iFAAiF;AACjF,6EAA6E;AAC7E,4EAA4E;AAC5E,YAAY;AAEZ,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAElD,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AAEzE,oFAAoF;AACpF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,8DAA8D,CAAC;IAC3E,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,CAAC,sEAAsE,CAAC;IACnF,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CAAC,iDAAiD,CAAC;IAC9D,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,CACP,wEAAwE;QACtE,gEAAgE,CACnE;IACH,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,0EAA0E,CAAC;IACvF,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,CACP,mEAAmE;QACjE,0BAA0B,CAC7B;CACJ,CAAA;AAKD;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAsB;IAEtB,OAAO,WAAW,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,CAAC,CAAA;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gCAAgC,CAAC,MAAiB;IAChE,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,WAAW,EACT,wEAAwE;YACxE,0EAA0E;YAC1E,2EAA2E;YAC3E,mEAAmE;YACnE,0EAA0E;QAC5E,WAAW,EAAE,qBAAqB;KACnC,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC;YAChD,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC;SACjC,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
@@ -5,6 +5,9 @@
5
5
  // returned nextCursor. exceptionId is a path param; the exception must belong to
6
6
  // the relayed token's tenant, and no tenant field is accepted.
7
7
  import { z } from 'zod';
8
+ import { pageLimit } from '../input-fields.js';
9
+ import { queryHandler } from '../query-handler.js';
10
+ import { pickQuery } from '../request-fields.js';
8
11
  import { dispatchException, exceptionHistoryPath } from './shared.js';
9
12
  /** Zod raw shape for `exception_history` input — path id + pagination. */
10
13
  export const getExceptionHistoryInputShape = {
@@ -17,24 +20,11 @@ export const getExceptionHistoryInputShape = {
17
20
  .optional()
18
21
  .describe('Opaque pagination cursor from a prior response. Re-call with the ' +
19
22
  'returned nextCursor to page forward (pagination is forward-only).'),
20
- limit: z
21
- .number()
22
- .int()
23
- .min(1)
24
- .max(200)
25
- .optional()
26
- .describe('Maximum number of records to return (1–200, default 20).'),
23
+ limit: pageLimit,
27
24
  };
28
25
  /** Build the history query, omitting unset pagination knobs. */
29
26
  export function buildHistoryQuery(args) {
30
- const query = {};
31
- if (args.cursor !== undefined) {
32
- query.cursor = args.cursor;
33
- }
34
- if (args.limit !== undefined) {
35
- query.limit = args.limit;
36
- }
37
- return Object.keys(query).length > 0 ? query : undefined;
27
+ return pickQuery(args, ['cursor', 'limit']);
38
28
  }
39
29
  /**
40
30
  * Register `exception_history`. Substitutes the id into the path, passes the
@@ -49,13 +39,6 @@ export function registerExceptionHistoryTool(server) {
49
39
  'tenant field is accepted). The response carries { items, nextCursor } — ' +
50
40
  'paginate by re-calling with the returned nextCursor.',
51
41
  inputSchema: getExceptionHistoryInputShape,
52
- }, async (args, extra) => {
53
- const query = buildHistoryQuery(args);
54
- return dispatchException({
55
- method: 'GET',
56
- path: exceptionHistoryPath(args.exceptionId),
57
- ...(query !== undefined ? { query } : {}),
58
- }, extra);
59
- });
42
+ }, queryHandler(buildHistoryQuery, (args) => exceptionHistoryPath(args.exceptionId), dispatchException));
60
43
  }
61
44
  //# sourceMappingURL=history.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/tools/exception/history.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAC1E,iFAAiF;AACjF,+DAA+D;AAE/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAErE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,uDAAuD,CAAC;IACpE,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mEAAmE;QACjE,mEAAmE,CACtE;IACH,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,0DAA0D,CAAC;CACxE,CAAA;AAOD,gEAAgE;AAChE,MAAM,UAAU,iBAAiB,CAC/B,IAA8B;IAE9B,MAAM,KAAK,GAAoC,EAAE,CAAA;IACjD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC5B,CAAC;IACD,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAC1D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,2EAA2E;YAC3E,0EAA0E;YAC1E,sEAAsE;YACtE,0EAA0E;YAC1E,sDAAsD;QACxD,WAAW,EAAE,6BAA6B;KAC3C,EACD,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;QACpB,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACrC,OAAO,iBAAiB,CACtB;YACE,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC;YAC5C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,EACD,KAAK,CACN,CAAA;IACH,CAAC,CACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../../src/tools/exception/history.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,EAAE;AACF,uEAAuE;AACvE,0EAA0E;AAC1E,iFAAiF;AACjF,+DAA+D;AAE/D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAG9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGlD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAErE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CAAC,uDAAuD,CAAC;IACpE,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,mEAAmE;QACjE,mEAAmE,CACtE;IACH,KAAK,EAAE,SAAS;CACjB,CAAA;AAOD,gEAAgE;AAChE,MAAM,UAAU,iBAAiB,CAC/B,IAA8B;IAE9B,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;AAC7C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAiB;IAC5D,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EACT,2EAA2E;YAC3E,0EAA0E;YAC1E,sEAAsE;YACtE,0EAA0E;YAC1E,sDAAsD;QACxD,WAAW,EAAE,6BAA6B;KAC3C,EACD,YAAY,CACV,iBAAiB,EACjB,CAAC,IAAI,EAAE,EAAE,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,EAChD,iBAAiB,CAClB,CACF,CAAA;AACH,CAAC"}