@atbas/m-mcp 0.1.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 (366) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +364 -0
  3. package/dist/builder/transaction-builder.d.ts +53 -0
  4. package/dist/builder/transaction-builder.d.ts.map +1 -0
  5. package/dist/builder/transaction-builder.js +159 -0
  6. package/dist/builder/transaction-builder.js.map +1 -0
  7. package/dist/catalogue/default-catalogue.d.ts +18 -0
  8. package/dist/catalogue/default-catalogue.d.ts.map +1 -0
  9. package/dist/catalogue/default-catalogue.js +21 -0
  10. package/dist/catalogue/default-catalogue.js.map +1 -0
  11. package/dist/catalogue/endpoints.d.ts +22 -0
  12. package/dist/catalogue/endpoints.d.ts.map +1 -0
  13. package/dist/catalogue/endpoints.js +24 -0
  14. package/dist/catalogue/endpoints.js.map +1 -0
  15. package/dist/catalogue/flows.d.ts +32 -0
  16. package/dist/catalogue/flows.d.ts.map +1 -0
  17. package/dist/catalogue/flows.js +64 -0
  18. package/dist/catalogue/flows.js.map +1 -0
  19. package/dist/catalogue/hash-options.d.ts +112 -0
  20. package/dist/catalogue/hash-options.d.ts.map +1 -0
  21. package/dist/catalogue/hash-options.js +151 -0
  22. package/dist/catalogue/hash-options.js.map +1 -0
  23. package/dist/catalogue/types.d.ts +279 -0
  24. package/dist/catalogue/types.d.ts.map +1 -0
  25. package/dist/catalogue/types.js +360 -0
  26. package/dist/catalogue/types.js.map +1 -0
  27. package/dist/codegen/generate.d.ts +14 -0
  28. package/dist/codegen/generate.d.ts.map +1 -0
  29. package/dist/codegen/generate.js +490 -0
  30. package/dist/codegen/generate.js.map +1 -0
  31. package/dist/codegen/languages/node.d.ts +3 -0
  32. package/dist/codegen/languages/node.d.ts.map +1 -0
  33. package/dist/codegen/languages/node.js +32 -0
  34. package/dist/codegen/languages/node.js.map +1 -0
  35. package/dist/codegen/languages/php.d.ts +3 -0
  36. package/dist/codegen/languages/php.d.ts.map +1 -0
  37. package/dist/codegen/languages/php.js +27 -0
  38. package/dist/codegen/languages/php.js.map +1 -0
  39. package/dist/codegen/languages/python.d.ts +3 -0
  40. package/dist/codegen/languages/python.d.ts.map +1 -0
  41. package/dist/codegen/languages/python.js +27 -0
  42. package/dist/codegen/languages/python.js.map +1 -0
  43. package/dist/codegen/renderer.d.ts +24 -0
  44. package/dist/codegen/renderer.d.ts.map +1 -0
  45. package/dist/codegen/renderer.js +59 -0
  46. package/dist/codegen/renderer.js.map +1 -0
  47. package/dist/codegen/types.d.ts +50 -0
  48. package/dist/codegen/types.d.ts.map +1 -0
  49. package/dist/codegen/types.js +5 -0
  50. package/dist/codegen/types.js.map +1 -0
  51. package/dist/config/credentials.d.ts +64 -0
  52. package/dist/config/credentials.d.ts.map +1 -0
  53. package/dist/config/credentials.js +216 -0
  54. package/dist/config/credentials.js.map +1 -0
  55. package/dist/config/environment.d.ts +23 -0
  56. package/dist/config/environment.d.ts.map +1 -0
  57. package/dist/config/environment.js +54 -0
  58. package/dist/config/environment.js.map +1 -0
  59. package/dist/core/dependencies.d.ts +43 -0
  60. package/dist/core/dependencies.d.ts.map +1 -0
  61. package/dist/core/dependencies.js +2 -0
  62. package/dist/core/dependencies.js.map +1 -0
  63. package/dist/core/registry.d.ts +33 -0
  64. package/dist/core/registry.d.ts.map +1 -0
  65. package/dist/core/registry.js +13 -0
  66. package/dist/core/registry.js.map +1 -0
  67. package/dist/core/server.d.ts +61 -0
  68. package/dist/core/server.d.ts.map +1 -0
  69. package/dist/core/server.js +90 -0
  70. package/dist/core/server.js.map +1 -0
  71. package/dist/dependencies.d.ts +28 -0
  72. package/dist/dependencies.d.ts.map +1 -0
  73. package/dist/dependencies.js +2 -0
  74. package/dist/dependencies.js.map +1 -0
  75. package/dist/diagnostics/diagnose.d.ts +43 -0
  76. package/dist/diagnostics/diagnose.d.ts.map +1 -0
  77. package/dist/diagnostics/diagnose.js +121 -0
  78. package/dist/diagnostics/diagnose.js.map +1 -0
  79. package/dist/domain/amount.d.ts +157 -0
  80. package/dist/domain/amount.d.ts.map +1 -0
  81. package/dist/domain/amount.js +275 -0
  82. package/dist/domain/amount.js.map +1 -0
  83. package/dist/domain/datetime.d.ts +95 -0
  84. package/dist/domain/datetime.d.ts.map +1 -0
  85. package/dist/domain/datetime.js +211 -0
  86. package/dist/domain/datetime.js.map +1 -0
  87. package/dist/domain/response-codes.d.ts +116 -0
  88. package/dist/domain/response-codes.d.ts.map +1 -0
  89. package/dist/domain/response-codes.js +380 -0
  90. package/dist/domain/response-codes.js.map +1 -0
  91. package/dist/domain/secure-hash.d.ts +78 -0
  92. package/dist/domain/secure-hash.d.ts.map +1 -0
  93. package/dist/domain/secure-hash.js +69 -0
  94. package/dist/domain/secure-hash.js.map +1 -0
  95. package/dist/domain/signature/jazzcash.d.ts +56 -0
  96. package/dist/domain/signature/jazzcash.d.ts.map +1 -0
  97. package/dist/domain/signature/jazzcash.js +214 -0
  98. package/dist/domain/signature/jazzcash.js.map +1 -0
  99. package/dist/domain/signature/registry.d.ts +69 -0
  100. package/dist/domain/signature/registry.d.ts.map +1 -0
  101. package/dist/domain/signature/registry.js +92 -0
  102. package/dist/domain/signature/registry.js.map +1 -0
  103. package/dist/domain/signature/scheme.d.ts +349 -0
  104. package/dist/domain/signature/scheme.d.ts.map +1 -0
  105. package/dist/domain/signature/scheme.js +398 -0
  106. package/dist/domain/signature/scheme.js.map +1 -0
  107. package/dist/domain/txn-ref.d.ts +76 -0
  108. package/dist/domain/txn-ref.d.ts.map +1 -0
  109. package/dist/domain/txn-ref.js +126 -0
  110. package/dist/domain/txn-ref.js.map +1 -0
  111. package/dist/domain/types.d.ts +45 -0
  112. package/dist/domain/types.d.ts.map +1 -0
  113. package/dist/domain/types.js +70 -0
  114. package/dist/domain/types.js.map +1 -0
  115. package/dist/errors.d.ts +84 -0
  116. package/dist/errors.d.ts.map +1 -0
  117. package/dist/errors.js +87 -0
  118. package/dist/errors.js.map +1 -0
  119. package/dist/gateway/checkout-form.d.ts +16 -0
  120. package/dist/gateway/checkout-form.d.ts.map +1 -0
  121. package/dist/gateway/checkout-form.js +103 -0
  122. package/dist/gateway/checkout-form.js.map +1 -0
  123. package/dist/gateway/checkout-output.d.ts +70 -0
  124. package/dist/gateway/checkout-output.d.ts.map +1 -0
  125. package/dist/gateway/checkout-output.js +199 -0
  126. package/dist/gateway/checkout-output.js.map +1 -0
  127. package/dist/gateway/guards.d.ts +37 -0
  128. package/dist/gateway/guards.d.ts.map +1 -0
  129. package/dist/gateway/guards.js +44 -0
  130. package/dist/gateway/guards.js.map +1 -0
  131. package/dist/gateway/http-client.d.ts +42 -0
  132. package/dist/gateway/http-client.d.ts.map +1 -0
  133. package/dist/gateway/http-client.js +153 -0
  134. package/dist/gateway/http-client.js.map +1 -0
  135. package/dist/gateway/rest-client.d.ts +42 -0
  136. package/dist/gateway/rest-client.d.ts.map +1 -0
  137. package/dist/gateway/rest-client.js +241 -0
  138. package/dist/gateway/rest-client.js.map +1 -0
  139. package/dist/gateway/transport.d.ts +31 -0
  140. package/dist/gateway/transport.d.ts.map +1 -0
  141. package/dist/gateway/transport.js +73 -0
  142. package/dist/gateway/transport.js.map +1 -0
  143. package/dist/index.d.ts +3 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +75 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/install/cli.d.ts +38 -0
  148. package/dist/install/cli.d.ts.map +1 -0
  149. package/dist/install/cli.js +274 -0
  150. package/dist/install/cli.js.map +1 -0
  151. package/dist/install/harnesses.d.ts +74 -0
  152. package/dist/install/harnesses.d.ts.map +1 -0
  153. package/dist/install/harnesses.js +263 -0
  154. package/dist/install/harnesses.js.map +1 -0
  155. package/dist/knowledge/corpus.d.ts +15 -0
  156. package/dist/knowledge/corpus.d.ts.map +1 -0
  157. package/dist/knowledge/corpus.js +129 -0
  158. package/dist/knowledge/corpus.js.map +1 -0
  159. package/dist/knowledge/search.d.ts +29 -0
  160. package/dist/knowledge/search.d.ts.map +1 -0
  161. package/dist/knowledge/search.js +181 -0
  162. package/dist/knowledge/search.js.map +1 -0
  163. package/dist/knowledge/source.d.ts +60 -0
  164. package/dist/knowledge/source.d.ts.map +1 -0
  165. package/dist/knowledge/source.js +91 -0
  166. package/dist/knowledge/source.js.map +1 -0
  167. package/dist/knowledge/types.d.ts +40 -0
  168. package/dist/knowledge/types.d.ts.map +1 -0
  169. package/dist/knowledge/types.js +19 -0
  170. package/dist/knowledge/types.js.map +1 -0
  171. package/dist/paths.d.ts +26 -0
  172. package/dist/paths.d.ts.map +1 -0
  173. package/dist/paths.js +106 -0
  174. package/dist/paths.js.map +1 -0
  175. package/dist/prompts/integration-walkthrough.d.ts +11 -0
  176. package/dist/prompts/integration-walkthrough.d.ts.map +1 -0
  177. package/dist/prompts/integration-walkthrough.js +52 -0
  178. package/dist/prompts/integration-walkthrough.js.map +1 -0
  179. package/dist/prompts/register.d.ts +4 -0
  180. package/dist/prompts/register.d.ts.map +1 -0
  181. package/dist/prompts/register.js +4 -0
  182. package/dist/prompts/register.js.map +1 -0
  183. package/dist/registry.d.ts +14 -0
  184. package/dist/registry.d.ts.map +1 -0
  185. package/dist/registry.js +2 -0
  186. package/dist/registry.js.map +1 -0
  187. package/dist/resources/knowledge-resources.d.ts +5 -0
  188. package/dist/resources/knowledge-resources.d.ts.map +1 -0
  189. package/dist/resources/knowledge-resources.js +121 -0
  190. package/dist/resources/knowledge-resources.js.map +1 -0
  191. package/dist/resources/register.d.ts +4 -0
  192. package/dist/resources/register.d.ts.map +1 -0
  193. package/dist/resources/register.js +8 -0
  194. package/dist/resources/register.js.map +1 -0
  195. package/dist/server.d.ts +40 -0
  196. package/dist/server.d.ts.map +1 -0
  197. package/dist/server.js +56 -0
  198. package/dist/server.js.map +1 -0
  199. package/dist/telemetry/logger.d.ts +31 -0
  200. package/dist/telemetry/logger.d.ts.map +1 -0
  201. package/dist/telemetry/logger.js +67 -0
  202. package/dist/telemetry/logger.js.map +1 -0
  203. package/dist/telemetry/redaction.d.ts +88 -0
  204. package/dist/telemetry/redaction.d.ts.map +1 -0
  205. package/dist/telemetry/redaction.js +238 -0
  206. package/dist/telemetry/redaction.js.map +1 -0
  207. package/dist/tools/build-transaction-parameters.d.ts +10 -0
  208. package/dist/tools/build-transaction-parameters.d.ts.map +1 -0
  209. package/dist/tools/build-transaction-parameters.js +154 -0
  210. package/dist/tools/build-transaction-parameters.js.map +1 -0
  211. package/dist/tools/call-context.d.ts +47 -0
  212. package/dist/tools/call-context.d.ts.map +1 -0
  213. package/dist/tools/call-context.js +15 -0
  214. package/dist/tools/call-context.js.map +1 -0
  215. package/dist/tools/codegen-tools.d.ts +4 -0
  216. package/dist/tools/codegen-tools.d.ts.map +1 -0
  217. package/dist/tools/codegen-tools.js +131 -0
  218. package/dist/tools/codegen-tools.js.map +1 -0
  219. package/dist/tools/credential-tools.d.ts +32 -0
  220. package/dist/tools/credential-tools.d.ts.map +1 -0
  221. package/dist/tools/credential-tools.js +65 -0
  222. package/dist/tools/credential-tools.js.map +1 -0
  223. package/dist/tools/descriptor.d.ts +52 -0
  224. package/dist/tools/descriptor.d.ts.map +1 -0
  225. package/dist/tools/descriptor.js +2 -0
  226. package/dist/tools/descriptor.js.map +1 -0
  227. package/dist/tools/diagnostic-tools.d.ts +3 -0
  228. package/dist/tools/diagnostic-tools.d.ts.map +1 -0
  229. package/dist/tools/diagnostic-tools.js +128 -0
  230. package/dist/tools/diagnostic-tools.js.map +1 -0
  231. package/dist/tools/gateway-tools.d.ts +6 -0
  232. package/dist/tools/gateway-tools.d.ts.map +1 -0
  233. package/dist/tools/gateway-tools.js +381 -0
  234. package/dist/tools/gateway-tools.js.map +1 -0
  235. package/dist/tools/hash-tools.d.ts +5 -0
  236. package/dist/tools/hash-tools.d.ts.map +1 -0
  237. package/dist/tools/hash-tools.js +238 -0
  238. package/dist/tools/hash-tools.js.map +1 -0
  239. package/dist/tools/knowledge-tools.d.ts +7 -0
  240. package/dist/tools/knowledge-tools.d.ts.map +1 -0
  241. package/dist/tools/knowledge-tools.js +247 -0
  242. package/dist/tools/knowledge-tools.js.map +1 -0
  243. package/dist/tools/onboarding-checklist.d.ts +3 -0
  244. package/dist/tools/onboarding-checklist.d.ts.map +1 -0
  245. package/dist/tools/onboarding-checklist.js +141 -0
  246. package/dist/tools/onboarding-checklist.js.map +1 -0
  247. package/dist/tools/register.d.ts +60 -0
  248. package/dist/tools/register.d.ts.map +1 -0
  249. package/dist/tools/register.js +145 -0
  250. package/dist/tools/register.js.map +1 -0
  251. package/dist/tools/tool-kit.d.ts +88 -0
  252. package/dist/tools/tool-kit.d.ts.map +1 -0
  253. package/dist/tools/tool-kit.js +297 -0
  254. package/dist/tools/tool-kit.js.map +1 -0
  255. package/dist/validation/payload-validator.d.ts +29 -0
  256. package/dist/validation/payload-validator.d.ts.map +1 -0
  257. package/dist/validation/payload-validator.js +79 -0
  258. package/dist/validation/payload-validator.js.map +1 -0
  259. package/dist/validation/rules/amount.d.ts +3 -0
  260. package/dist/validation/rules/amount.d.ts.map +1 -0
  261. package/dist/validation/rules/amount.js +77 -0
  262. package/dist/validation/rules/amount.js.map +1 -0
  263. package/dist/validation/rules/bill-reference.d.ts +10 -0
  264. package/dist/validation/rules/bill-reference.d.ts.map +1 -0
  265. package/dist/validation/rules/bill-reference.js +34 -0
  266. package/dist/validation/rules/bill-reference.js.map +1 -0
  267. package/dist/validation/rules/cnic.d.ts +3 -0
  268. package/dist/validation/rules/cnic.d.ts.map +1 -0
  269. package/dist/validation/rules/cnic.js +42 -0
  270. package/dist/validation/rules/cnic.js.map +1 -0
  271. package/dist/validation/rules/constants.d.ts +9 -0
  272. package/dist/validation/rules/constants.d.ts.map +1 -0
  273. package/dist/validation/rules/constants.js +28 -0
  274. package/dist/validation/rules/constants.js.map +1 -0
  275. package/dist/validation/rules/constraints.d.ts +3 -0
  276. package/dist/validation/rules/constraints.d.ts.map +1 -0
  277. package/dist/validation/rules/constraints.js +113 -0
  278. package/dist/validation/rules/constraints.js.map +1 -0
  279. package/dist/validation/rules/datetime.d.ts +3 -0
  280. package/dist/validation/rules/datetime.d.ts.map +1 -0
  281. package/dist/validation/rules/datetime.js +49 -0
  282. package/dist/validation/rules/datetime.js.map +1 -0
  283. package/dist/validation/rules/empty-string.d.ts +13 -0
  284. package/dist/validation/rules/empty-string.d.ts.map +1 -0
  285. package/dist/validation/rules/empty-string.js +32 -0
  286. package/dist/validation/rules/empty-string.js.map +1 -0
  287. package/dist/validation/rules/expiry.d.ts +3 -0
  288. package/dist/validation/rules/expiry.d.ts.map +1 -0
  289. package/dist/validation/rules/expiry.js +52 -0
  290. package/dist/validation/rules/expiry.js.map +1 -0
  291. package/dist/validation/rules/msisdn.d.ts +3 -0
  292. package/dist/validation/rules/msisdn.d.ts.map +1 -0
  293. package/dist/validation/rules/msisdn.js +45 -0
  294. package/dist/validation/rules/msisdn.js.map +1 -0
  295. package/dist/validation/rules/presence.d.ts +3 -0
  296. package/dist/validation/rules/presence.d.ts.map +1 -0
  297. package/dist/validation/rules/presence.js +90 -0
  298. package/dist/validation/rules/presence.js.map +1 -0
  299. package/dist/validation/rules/return-url.d.ts +14 -0
  300. package/dist/validation/rules/return-url.d.ts.map +1 -0
  301. package/dist/validation/rules/return-url.js +58 -0
  302. package/dist/validation/rules/return-url.js.map +1 -0
  303. package/dist/validation/rules/tool-argument.d.ts +16 -0
  304. package/dist/validation/rules/tool-argument.d.ts.map +1 -0
  305. package/dist/validation/rules/tool-argument.js +38 -0
  306. package/dist/validation/rules/tool-argument.js.map +1 -0
  307. package/dist/validation/rules/txn-ref.d.ts +3 -0
  308. package/dist/validation/rules/txn-ref.d.ts.map +1 -0
  309. package/dist/validation/rules/txn-ref.js +47 -0
  310. package/dist/validation/rules/txn-ref.js.map +1 -0
  311. package/dist/validation/rules/unknown-fields.d.ts +10 -0
  312. package/dist/validation/rules/unknown-fields.d.ts.map +1 -0
  313. package/dist/validation/rules/unknown-fields.js +29 -0
  314. package/dist/validation/rules/unknown-fields.js.map +1 -0
  315. package/dist/validation/types.d.ts +36 -0
  316. package/dist/validation/types.d.ts.map +1 -0
  317. package/dist/validation/types.js +12 -0
  318. package/dist/validation/types.js.map +1 -0
  319. package/dist/version.d.ts +23 -0
  320. package/dist/version.d.ts.map +1 -0
  321. package/dist/version.js +23 -0
  322. package/dist/version.js.map +1 -0
  323. package/knowledge/diagnostics/symptoms.json +321 -0
  324. package/knowledge/docs/bnpl-guide.md +77 -0
  325. package/knowledge/docs/card-page-redirection.md +67 -0
  326. package/knowledge/docs/card-refund.md +91 -0
  327. package/knowledge/docs/hmac-sha256-calculation.md +72 -0
  328. package/knowledge/docs/index.json +189 -0
  329. package/knowledge/docs/ipn-implementation.md +89 -0
  330. package/knowledge/docs/mwallet-recurring.md +117 -0
  331. package/knowledge/docs/mwallet-refund.md +65 -0
  332. package/knowledge/docs/mwallet-rest-v1-1.md +126 -0
  333. package/knowledge/docs/mwallet-rest-v2-0-cnic.md +113 -0
  334. package/knowledge/docs/portal-guide.md +45 -0
  335. package/knowledge/docs/shopify-guide.md +74 -0
  336. package/knowledge/docs/status-inquiry-2025-26.md +32 -0
  337. package/knowledge/docs/status-inquiry.md +111 -0
  338. package/knowledge/docs/wordpress-guide.md +49 -0
  339. package/knowledge/flow.schema.json +390 -0
  340. package/knowledge/flows/bnpl-page-redirection-v1.1.json +211 -0
  341. package/knowledge/flows/card-page-redirection-v1.1.json +211 -0
  342. package/knowledge/flows/mwallet-rest-v1.1.json +187 -0
  343. package/knowledge/flows/mwallet-rest-v2.0-cnic.json +197 -0
  344. package/knowledge/flows/mwallet-token-pay-v4.0.json +130 -0
  345. package/knowledge/flows/refund-bnpl.json +105 -0
  346. package/knowledge/flows/refund-card-v1.1.json +112 -0
  347. package/knowledge/flows/refund-card-v2.0.json +121 -0
  348. package/knowledge/flows/refund-mwallet-v1.1.json +106 -0
  349. package/knowledge/flows/status-inquiry-v1.1.json +102 -0
  350. package/knowledge/flows/status-inquiry-v2.0.json +103 -0
  351. package/knowledge/flows/token-delete-v1.json +85 -0
  352. package/knowledge/flows/token-inquiry-v1.json +85 -0
  353. package/knowledge/flows/wallet-linking-portal.json +103 -0
  354. package/knowledge/templates/node/checkout-redirect.tmpl +166 -0
  355. package/knowledge/templates/node/ipn-handler.tmpl +108 -0
  356. package/knowledge/templates/node/rest-client.tmpl +197 -0
  357. package/knowledge/templates/node/wallet-linking.tmpl +147 -0
  358. package/knowledge/templates/php/checkout-redirect.tmpl +149 -0
  359. package/knowledge/templates/php/ipn-handler.tmpl +105 -0
  360. package/knowledge/templates/php/rest-client.tmpl +191 -0
  361. package/knowledge/templates/php/wallet-linking.tmpl +137 -0
  362. package/knowledge/templates/python/checkout-redirect.tmpl +148 -0
  363. package/knowledge/templates/python/ipn-handler.tmpl +110 -0
  364. package/knowledge/templates/python/rest-client.tmpl +179 -0
  365. package/knowledge/templates/python/wallet-linking.tmpl +133 -0
  366. package/package.json +84 -0
@@ -0,0 +1,238 @@
1
+ import { z } from 'zod';
2
+ import { forensicProvenance, requestHashOptions, responseHashOptions, signatureFieldName, UNKNOWN_FLOW_RESPONSE_HASH_OPTIONS, } from '../catalogue/hash-options.js';
3
+ import { JAZZCASH_ENVIRONMENTS } from '../config/environment.js';
4
+ import { buildHashString, computeSecureHash, diagnoseHashMismatch } from '../domain/secure-hash.js';
5
+ import { describeSignatureFor } from '../domain/signature/registry.js';
6
+ import { maskSecrets, REDACTED } from '../telemetry/redaction.js';
7
+ import { formatValidationResult, validatePayload } from '../validation/payload-validator.js';
8
+ import { citations, resolveEnvironment, resolveIntegritySalt, safeHandler, toolResult } from './tool-kit.js';
9
+ /**
10
+ * Secure hash and payload validation tools.
11
+ *
12
+ * These answer the question that generates most support traffic: "why am I
13
+ * getting HASH_MISMATCH?"
14
+ */
15
+ const parametersSchema = z
16
+ .record(z.string(), z.union([z.string(), z.number(), z.null()]))
17
+ .describe('The request or response payload, exactly as you send or receive it.');
18
+ const environmentSchema = z
19
+ .enum(JAZZCASH_ENVIRONMENTS)
20
+ .optional()
21
+ .describe('Which credential profile to take the Integrity Salt from. Defaults to the configured environment.');
22
+ const integritySaltSchema = z
23
+ .string()
24
+ .optional()
25
+ .describe("Integrity Salt to use instead of the configured one. Useful when debugging a merchant's own value.");
26
+ /** Replace the salt in a hash string so a transcript cannot leak it by default. */
27
+ function maskHashString(hashString, salt) {
28
+ return hashString.startsWith(`${salt}&`)
29
+ ? `${REDACTED}&${hashString.slice(salt.length + 1)}`
30
+ : hashString.replace(salt, REDACTED);
31
+ }
32
+ export const registerBuildSecureHash = (server, deps) => {
33
+ server.registerTool('jazzcash_build_secure_hash', {
34
+ title: 'Compute a JazzCash pp_SecureHash',
35
+ description: 'Compute pp_SecureHash for a payload and show exactly which fields contributed, in what order, and why each excluded field was excluded. Use this to check your own implementation field by field.',
36
+ inputSchema: {
37
+ flowId: z.string().optional().describe("Apply this flow's hash configuration. Omit for the default rules."),
38
+ parameters: parametersSchema,
39
+ integritySalt: integritySaltSchema,
40
+ environment: environmentSchema,
41
+ revealHashString: z
42
+ .boolean()
43
+ .optional()
44
+ .describe('Show the Integrity Salt inside the returned hash string. Off by default so the salt is not written into a shared transcript. Only applies to a salt passed as integritySalt: a salt taken from the configured credentials is scrubbed from every tool result and cannot be shown.'),
45
+ },
46
+ }, safeHandler(deps, 'jazzcash_build_secure_hash', ({ flowId, parameters, integritySalt, environment, revealHashString }) => {
47
+ const environmentName = resolveEnvironment(deps, environment);
48
+ const { salt, source } = resolveIntegritySalt(deps, integritySalt, environmentName);
49
+ const flow = flowId === undefined ? undefined : deps.catalogue.get(flowId);
50
+ const options = flow === undefined ? undefined : requestHashOptions(flow);
51
+ const breakdown = buildHashString(parameters, salt, options);
52
+ const secureHash = computeSecureHash(parameters, salt, options);
53
+ // Both the field the digest goes into and the sentence describing how it
54
+ // was produced come from the flow. Labelled `pp_SecureHash =` and
55
+ // described as HMAC-SHA256 into lowercase hex for every flow, this tool
56
+ // told a merchant whose field is `vp_Signature` to write a digest it
57
+ // does not compute into a field their gateway never reads.
58
+ const signatureField = flow === undefined ? undefined : signatureFieldName(flow);
59
+ const signature = describeSignatureFor(options);
60
+ // `safeHandler` scrubs every configured secret literal from the finished
61
+ // result, so revealing a configured salt is not something this tool can
62
+ // deliver however the flag is set. Asking redaction itself is the only
63
+ // honest test of whether the caller would actually see the value, and
64
+ // `saltRevealed` reports what happened rather than what was requested.
65
+ const saltIsRevealable = integritySalt !== undefined &&
66
+ integritySalt !== '' &&
67
+ maskSecrets(salt, deps.credentials.allSecrets()) === salt;
68
+ const saltRevealed = revealHashString === true && saltIsRevealable;
69
+ const displayed = saltRevealed ? breakdown.hashString : maskHashString(breakdown.hashString, salt);
70
+ const saltNote = saltRevealed
71
+ ? ''
72
+ : saltIsRevealable
73
+ ? 'The Integrity Salt is masked above. Pass revealHashString: true to see the exact string.'
74
+ : 'The Integrity Salt is masked above. It is a configured credential, and configured credentials are removed from every tool result, so it cannot be revealed through this transcript.';
75
+ const text = [
76
+ `${signatureField ?? 'pp_SecureHash'} = ${secureHash}`,
77
+ '',
78
+ `Integrity Salt taken from ${source}.`,
79
+ flow === undefined ? 'Using the default hash rules.' : `Using the hash rules for ${flow.id}.`,
80
+ '',
81
+ `## Fields that contributed (${String(breakdown.includedFields.length)}, sorted by name)`,
82
+ breakdown.includedFields.map((name, index) => `${String(index + 1)}. ${name}`).join('\n'),
83
+ '',
84
+ breakdown.excludedFields.length > 0
85
+ ? `## Fields excluded\n${breakdown.excludedFields
86
+ .map((entry) => `- ${entry.name} — ${entry.reason.replace(/-/g, ' ')}`)
87
+ .join('\n')}`
88
+ : '',
89
+ '',
90
+ '## Hash string',
91
+ '```',
92
+ displayed,
93
+ '```',
94
+ saltNote,
95
+ '',
96
+ '## How this signature is built',
97
+ signature.construction,
98
+ signature.encoding,
99
+ citations([{ docId: 'hmac-sha256-calculation', sectionId: 'how-is-hmac-sha256-calculated' }]),
100
+ ]
101
+ .filter((line) => line !== '')
102
+ .join('\n');
103
+ return toolResult(text, {
104
+ structuredContent: {
105
+ secureHash,
106
+ includedFields: breakdown.includedFields,
107
+ excludedFields: breakdown.excludedFields,
108
+ hashString: displayed,
109
+ saltRevealed,
110
+ },
111
+ });
112
+ },
113
+ // Refused before the payload is read at all: the hash string this tool
114
+ // renders would otherwise carry the value straight back into the
115
+ // transcript. `flowId` selects the explanatory sentence; the names refused
116
+ // are catalogue-wide regardless.
117
+ { payloadArguments: ['parameters'], flowFrom: 'flowId' }));
118
+ };
119
+ export const registerVerifySecureHash = (server, deps) => {
120
+ server.registerTool('jazzcash_verify_secure_hash', {
121
+ title: 'Verify a JazzCash pp_SecureHash and diagnose a mismatch',
122
+ description: "Check a secure hash against a payload. On a mismatch, replays the known-wrong constructions for the flow's own signature scheme against your parameters and reports which one reproduces your hash, so the cause is demonstrated rather than guessed.",
123
+ inputSchema: {
124
+ parameters: parametersSchema,
125
+ expectedHash: z.string().min(1).describe('The pp_SecureHash you produced or received.'),
126
+ flowId: z.string().optional().describe("Apply this flow's hash configuration."),
127
+ direction: z
128
+ .enum(['request', 'response'])
129
+ .optional()
130
+ .describe('Whether this is a request you sent or a response you received. Response verification is best-effort; see the note in the result.'),
131
+ integritySalt: integritySaltSchema,
132
+ environment: environmentSchema,
133
+ },
134
+ }, safeHandler(deps, 'jazzcash_verify_secure_hash', ({ parameters, expectedHash, flowId, direction, integritySalt, environment }) => {
135
+ const environmentName = resolveEnvironment(deps, environment);
136
+ const { salt } = resolveIntegritySalt(deps, integritySalt, environmentName);
137
+ const flow = flowId === undefined ? undefined : deps.catalogue.get(flowId);
138
+ const isResponse = direction === 'response';
139
+ // Requests and responses use different field selections. Spreading the
140
+ // request spec into a response check filters out every field of a card
141
+ // or BNPL refund response, reducing the hash input to the bare salt and
142
+ // making verification vacuous. See catalogue/hash-options.ts.
143
+ const options = isResponse
144
+ ? flow === undefined
145
+ ? UNKNOWN_FLOW_RESPONSE_HASH_OPTIONS
146
+ : responseHashOptions(flow)
147
+ : flow === undefined
148
+ ? undefined
149
+ : requestHashOptions(flow);
150
+ // A reproduction is only evidence under the construction the payload was
151
+ // signed with. On the response side that construction is this server's,
152
+ // not the flow's, so a foreign provider's CORRECT signature must not come
153
+ // back as a proven JazzCash construction error. See `forensicProvenance`.
154
+ const diagnosis = diagnoseHashMismatch(parameters, salt, expectedHash, options, forensicProvenance(flow, isResponse ? 'response' : 'request'));
155
+ if (diagnosis.matches) {
156
+ return toolResult([
157
+ 'The hash MATCHES.',
158
+ '',
159
+ `Computed and supplied hashes are identical (${diagnosis.expectedHash}).`,
160
+ `${String(diagnosis.breakdown.includedFields.length)} field(s) contributed: ${diagnosis.breakdown.includedFields.join(', ')}.`,
161
+ ].join('\n'), { structuredContent: { matches: true, verdict: 'match', expectedHash: diagnosis.expectedHash } });
162
+ }
163
+ // Assumption A2: no guide states which response fields feed the response
164
+ // hash, so a response mismatch is reported as unverified, never as failed.
165
+ const verdict = isResponse ? 'unverified' : 'mismatch';
166
+ const text = [
167
+ isResponse
168
+ ? 'The response hash could NOT be verified — treat this as UNVERIFIED, not as a failure.'
169
+ : 'The hash does NOT match.',
170
+ '',
171
+ `Expected (computed here): ${diagnosis.expectedHash}`,
172
+ `Supplied: ${diagnosis.providedHash}`,
173
+ '',
174
+ diagnosis.summary,
175
+ '',
176
+ '## Likely causes',
177
+ diagnosis.hypotheses
178
+ .map((entry, index) => `${String(index + 1)}. **${entry.label}** (${entry.confidence})\n ${entry.explanation}\n Fix: ${entry.fix}`)
179
+ .join('\n\n'),
180
+ '',
181
+ `## Fields used\nContributed (${String(diagnosis.breakdown.includedFields.length)}): ${diagnosis.breakdown.includedFields.join(', ')}`,
182
+ diagnosis.breakdown.excludedFields.length > 0
183
+ ? `Excluded: ${diagnosis.breakdown.excludedFields.map((entry) => `${entry.name} (${entry.reason})`).join(', ')}`
184
+ : '',
185
+ isResponse
186
+ ? '\nNote: JazzCash does not document which response fields feed the response hash. This server recomputes over all non-empty response fields except the hash field itself. A mismatch here may mean the assumption is wrong rather than that your integration is broken — do not tell a merchant their integration has failed on this basis alone.'
187
+ : '',
188
+ citations([{ docId: 'hmac-sha256-calculation', sectionId: 'common-failures' }]),
189
+ ]
190
+ .filter((line) => line !== '')
191
+ .join('\n');
192
+ return toolResult(text, {
193
+ structuredContent: {
194
+ matches: false,
195
+ verdict,
196
+ expectedHash: diagnosis.expectedHash,
197
+ providedHash: diagnosis.providedHash,
198
+ hypotheses: diagnosis.hypotheses,
199
+ includedFields: diagnosis.breakdown.includedFields,
200
+ },
201
+ });
202
+ },
203
+ // A response payload is refused on the same terms as a request one, so the
204
+ // declaration names the one argument either arrives in. A per-tool
205
+ // exemption is how a boundary rule stops being a boundary.
206
+ { payloadArguments: ['parameters'], flowFrom: 'flowId' }));
207
+ };
208
+ export const registerValidatePayload = (server, deps) => {
209
+ server.registerTool('jazzcash_validate_payload', {
210
+ title: 'Validate a JazzCash payload',
211
+ description: 'Check a payload against its flow specification: missing and extra fields, empty-string rules, modified constants, minor-unit amounts, Pakistan-time timestamps, expiry window, reference formats, Return URL, MSISDN and CNIC. Returns each problem with a concrete fix.',
212
+ inputSchema: {
213
+ flowId: z.string().describe('Flow to validate against, e.g. "mwallet-rest-v1.1".'),
214
+ parameters: parametersSchema,
215
+ environment: environmentSchema,
216
+ },
217
+ }, safeHandler(deps, 'jazzcash_validate_payload', ({ flowId, parameters, environment }) => {
218
+ const flow = deps.catalogue.get(flowId);
219
+ const environmentName = resolveEnvironment(deps, environment);
220
+ const registeredReturnUrl = deps.credentials.has(environmentName)
221
+ ? deps.credentials.get(environmentName).returnUrl
222
+ : undefined;
223
+ const result = validatePayload(flow, parameters, { registeredReturnUrl });
224
+ return toolResult(`${formatValidationResult(result)}${citations(flow.docRefs)}`, {
225
+ structuredContent: {
226
+ valid: result.valid,
227
+ flowId: result.flowId,
228
+ errors: result.errors,
229
+ warnings: result.warnings,
230
+ },
231
+ });
232
+ },
233
+ // The `tool-argument.forbidden` validation rule would report this field
234
+ // too, but only after the validator has read the value; refusing at the
235
+ // boundary means the payload is never inspected at all.
236
+ { payloadArguments: ['parameters'], flowFrom: 'flowId' }));
237
+ };
238
+ //# sourceMappingURL=hash-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash-tools.js","sourceRoot":"","sources":["../../src/tools/hash-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Registrar } from '../registry.js';
2
+ export declare const registerListIntegrationFlows: Registrar;
3
+ export declare const registerGetIntegrationFlow: Registrar;
4
+ export declare const registerSearchDocs: Registrar;
5
+ export declare const registerGetDocSection: Registrar;
6
+ export declare const registerExplainResponseCode: Registrar;
7
+ //# sourceMappingURL=knowledge-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-tools.d.ts","sourceRoot":"","sources":["../../src/tools/knowledge-tools.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA2ChD,eAAO,MAAM,4BAA4B,EAAE,SA8C1C,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,SAyFxC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,SA4ChC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,SAsCnC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,SAkCzC,CAAC"}
@@ -0,0 +1,247 @@
1
+ import { z } from 'zod';
2
+ import { PORTAL_URLS, resolveEndpoint } from '../catalogue/endpoints.js';
3
+ import { requestHashOptions } from '../catalogue/hash-options.js';
4
+ import { PRODUCTS } from '../catalogue/types.js';
5
+ import { describeApiResponseCode, describePaymentResponseCode } from '../domain/response-codes.js';
6
+ import { describeSignatureFor } from '../domain/signature/registry.js';
7
+ import { bulletList, citations, safeHandler, toolResult } from './tool-kit.js';
8
+ /**
9
+ * Documentation and catalogue tools.
10
+ *
11
+ * These are the tools that let a merchant's AI answer "how do I…" from the
12
+ * official guides rather than from general knowledge of payment gateways.
13
+ */
14
+ /**
15
+ * Sentence describing where a response signature arrives, or that none does.
16
+ *
17
+ * `hashField` is optional because a provider whose REST responses carry no
18
+ * signature has no field to name. Interpolating it unguarded printed the word
19
+ * `undefined` at a merchant, which reads as a field called "undefined" rather
20
+ * than as the absence of one — and absence is the security-relevant fact, since
21
+ * it means the response cannot be authenticated at all.
22
+ *
23
+ * Module-private: both branches are asserted through the rendered output of
24
+ * `jazzcash_get_integration_flow` in `tests/tools/knowledge-tools.test.ts`,
25
+ * which is where a merchant actually reads the sentence. Exported for a test,
26
+ * it was the only sentence in this file a test could reach without going
27
+ * through the tool that prints it.
28
+ */
29
+ function responseHashSentence(flow) {
30
+ return flow.response.hashField === undefined
31
+ ? 'This response carries no signature, so it cannot be authenticated — treat it as untrusted and confirm the outcome with a status inquiry.'
32
+ : `The response hash arrives in \`${flow.response.hashField}\`.`;
33
+ }
34
+ function describeFlowBrief(flow) {
35
+ return [
36
+ `**${flow.id}** — ${flow.title}`,
37
+ ` Transport: ${flow.transport} | Version: ${flow.version} | Moves money: ${flow.movesMoney ? 'yes' : 'no'}`,
38
+ ` Use when: ${flow.useWhen}`,
39
+ ` Endpoint: ${resolveEndpoint(flow, 'sandbox')}`,
40
+ flow.companionFlows.length > 0 ? ` Mandatory alongside: ${flow.companionFlows.join(', ')}` : undefined,
41
+ ]
42
+ .filter((line) => line !== undefined)
43
+ .join('\n');
44
+ }
45
+ export const registerListIntegrationFlows = (server, deps) => {
46
+ server.registerTool('jazzcash_list_integration_flows', {
47
+ title: 'List JazzCash integration flows',
48
+ description: 'List every JazzCash integration flow this server knows, with the endpoint, transport and when to use each. Start here when choosing how to integrate.',
49
+ inputSchema: {
50
+ product: z
51
+ .enum(PRODUCTS)
52
+ .optional()
53
+ .describe('Restrict to one product family, e.g. "card", "mwallet", "refund".'),
54
+ },
55
+ }, safeHandler(deps, 'jazzcash_list_integration_flows', ({ product }) => {
56
+ const flows = product === undefined ? deps.catalogue.list() : deps.catalogue.byProduct(product);
57
+ const text = [
58
+ product === undefined
59
+ ? `${String(flows.length)} integration flows are available.`
60
+ : `${String(flows.length)} ${product} flow(s).`,
61
+ '',
62
+ flows.map(describeFlowBrief).join('\n\n'),
63
+ '',
64
+ 'Sandbox and production share identical endpoints in every flow: the environment is determined by the credentials, not the URL.',
65
+ `Sandbox signup: ${PORTAL_URLS.sandboxSignup}`,
66
+ `Merchant portal: ${PORTAL_URLS.merchantPortalLogin}`,
67
+ ].join('\n');
68
+ return toolResult(text, {
69
+ structuredContent: {
70
+ flows: flows.map((flow) => ({
71
+ id: flow.id,
72
+ title: flow.title,
73
+ product: flow.product,
74
+ version: flow.version,
75
+ transport: flow.transport,
76
+ movesMoney: flow.movesMoney,
77
+ useWhen: flow.useWhen,
78
+ endpoint: resolveEndpoint(flow, 'sandbox'),
79
+ companionFlows: flow.companionFlows,
80
+ })),
81
+ },
82
+ });
83
+ }));
84
+ };
85
+ export const registerGetIntegrationFlow = (server, deps) => {
86
+ server.registerTool('jazzcash_get_integration_flow', {
87
+ title: 'Get a JazzCash integration flow specification',
88
+ description: 'Full specification for one flow: every parameter with its requirement and rules, the secure hash configuration, the response contract, known documentation defects, and citations.',
89
+ inputSchema: {
90
+ flowId: z.string().describe('Flow identifier, e.g. "mwallet-rest-v1.1". Use jazzcash_list_integration_flows.'),
91
+ },
92
+ }, safeHandler(deps, 'jazzcash_get_integration_flow', ({ flowId }) => {
93
+ const flow = deps.catalogue.get(flowId);
94
+ const parameterLines = flow.parameters.map((parameter) => {
95
+ const bits = [
96
+ `- \`${parameter.name}\` (${parameter.requirement}, ${parameter.valueType}`,
97
+ parameter.constantValue === undefined ? '' : `, fixed at "${parameter.constantValue}"`,
98
+ parameter.maxLength === undefined ? '' : `, max ${String(parameter.maxLength)} chars`,
99
+ parameter.sensitive ? ', SENSITIVE' : '',
100
+ `) — ${parameter.notes}`,
101
+ ];
102
+ return bits.join('');
103
+ });
104
+ // Rendered from the plan the engine will actually execute, not from a
105
+ // construction spelled out at this call site. A hand-written sentence
106
+ // describes what its author had in mind rather than what the flow
107
+ // configured, and the merchant implements the sentence.
108
+ const signature = describeSignatureFor(requestHashOptions(flow));
109
+ const text = [
110
+ `# ${flow.title}`,
111
+ '',
112
+ flow.summary,
113
+ '',
114
+ `**Use when:** ${flow.useWhen}`,
115
+ `**Transport:** ${flow.transport} | **Version:** ${flow.version} | **Moves money:** ${flow.movesMoney ? 'yes' : 'no'}`,
116
+ '',
117
+ '## Endpoint',
118
+ `Sandbox: ${resolveEndpoint(flow, 'sandbox')}`,
119
+ `Production: ${resolveEndpoint(flow, 'production')}`,
120
+ flow.sameEndpointForBothEnvironments
121
+ ? 'These are identical. The environment is determined by the credentials you send, never by the URL.'
122
+ : '',
123
+ '',
124
+ '## Parameters',
125
+ parameterLines.join('\n'),
126
+ '',
127
+ '## Secure hash',
128
+ `**Request:** ${signature.construction}`,
129
+ `Excluded from its own input: ${flow.hash.excludeFields.join(', ')}.`,
130
+ // Responses use a different field selection; stating only the request
131
+ // rule is what led implementations to verify responses vacuously.
132
+ `**Response:** ${flow.response.hashFieldPrefixes.length === 0
133
+ ? 'all non-empty response fields participate — no prefix filter. Card and BNPL refund responses use unprefixed names, so applying the request filter would exclude every field and reduce the hash to the bare salt.'
134
+ : `only fields prefixed ${flow.response.hashFieldPrefixes.map((prefix) => `\`${prefix}\``).join(' or ')} participate.`} ${responseHashSentence(flow)}`,
135
+ signature.encoding,
136
+ '',
137
+ '## Response',
138
+ `Success is \`${flow.response.successField}\` = "${flow.response.successValue}". ${responseHashSentence(flow)}`,
139
+ flow.response.settlement === undefined
140
+ ? ''
141
+ : // Both levels must be checked. A service-level success with a
142
+ // settlement code that is not the approval value is a DECLINED
143
+ // payment, so reporting the first level alone reads a decline as a
144
+ // sale.
145
+ `Settlement is \`${flow.response.settlement.field}\` = "${flow.response.settlement.successValue}", and both levels must pass.`,
146
+ flow.response.notableFields.length > 0 ? `Notable fields: ${flow.response.notableFields.join(', ')}.` : '',
147
+ '',
148
+ flow.companionFlows.length > 0 ? `## Mandatory alongside\n${bulletList([...flow.companionFlows])}\n` : '',
149
+ flow.knownIssues.length > 0
150
+ ? [
151
+ '## Known documentation issues',
152
+ flow.knownIssues
153
+ .map((entry) => `### ${entry.summary}\n${entry.detail}\n\n**Guidance:** ${entry.guidance}`)
154
+ .join('\n\n'),
155
+ ].join('\n')
156
+ : '',
157
+ citations(flow.docRefs),
158
+ ]
159
+ .filter((line) => line !== '')
160
+ .join('\n');
161
+ return toolResult(text, { structuredContent: { flow } });
162
+ }));
163
+ };
164
+ export const registerSearchDocs = (server, deps) => {
165
+ server.registerTool('jazzcash_search_docs', {
166
+ title: 'Search the official JazzCash documentation',
167
+ description: 'Search the curated 2026 JazzCash integration guides and return ranked passages with citations. Use this to answer merchant questions from the official documentation rather than from general knowledge.',
168
+ inputSchema: {
169
+ query: z.string().min(1).describe('What to look up, e.g. "hash mismatch order of fields".'),
170
+ flowId: z.string().optional().describe('Restrict to documents describing this flow.'),
171
+ limit: z.number().int().min(1).max(20).optional().describe('Maximum passages to return. Default 5.'),
172
+ },
173
+ }, safeHandler(deps, 'jazzcash_search_docs', ({ query, flowId, limit }) => {
174
+ const results = deps.search.search(query, { flowId, limit });
175
+ if (results.length === 0) {
176
+ return toolResult(`No passage in the 2026 JazzCash corpus matches "${query}".\n\nThe corpus covers: ${deps.corpus
177
+ .documents()
178
+ .map((document) => document.metadata.title)
179
+ .join('; ')}.\n\nIf the question is outside these guides, say so rather than answering from general knowledge.`, { structuredContent: { query, results: [] } });
180
+ }
181
+ const text = [
182
+ `${String(results.length)} passage(s) for "${query}":`,
183
+ '',
184
+ results
185
+ .map((result, index) => `## ${String(index + 1)}. ${result.documentTitle} — ${result.sectionTitle}\n${result.uri} (score ${String(result.score)})\n\n${result.excerpt}`)
186
+ .join('\n\n'),
187
+ '',
188
+ 'Read a full section with jazzcash_get_doc_section.',
189
+ ].join('\n');
190
+ return toolResult(text, { structuredContent: { query, results } });
191
+ }));
192
+ };
193
+ export const registerGetDocSection = (server, deps) => {
194
+ server.registerTool('jazzcash_get_doc_section', {
195
+ title: 'Read a JazzCash documentation section',
196
+ description: 'Return the full text of a curated documentation section, or the whole document when no section is given.',
197
+ inputSchema: {
198
+ docId: z.string().describe('Document identifier, e.g. "status-inquiry".'),
199
+ sectionId: z
200
+ .string()
201
+ .optional()
202
+ .describe('Section anchor, e.g. "common-failures". Omit for the whole document.'),
203
+ },
204
+ }, safeHandler(deps, 'jazzcash_get_doc_section', ({ docId, sectionId }) => {
205
+ if (sectionId === undefined) {
206
+ const document = deps.corpus.document(docId);
207
+ return toolResult(document.markdown, {
208
+ structuredContent: {
209
+ docId,
210
+ title: document.metadata.title,
211
+ sourcePdf: document.metadata.sourcePdf,
212
+ version: document.metadata.version,
213
+ sections: document.sections.map((section) => ({ id: section.sectionId, title: section.title })),
214
+ },
215
+ });
216
+ }
217
+ const section = deps.corpus.section(docId, sectionId);
218
+ const document = deps.corpus.document(docId);
219
+ return toolResult(`# ${document.metadata.title} — ${section.title}\n\n${section.text}\n\nSource: ${document.metadata.sourcePdf} (version ${document.metadata.version})`, { structuredContent: { docId, sectionId, title: section.title, text: section.text, uri: section.uri } });
220
+ }));
221
+ };
222
+ export const registerExplainResponseCode = (server, deps) => {
223
+ server.registerTool('jazzcash_explain_response_code', {
224
+ title: 'Explain a JazzCash response code',
225
+ description: 'Explain what a JazzCash response code means and what to do next. Distinguishes the API-operation code from the payment-status code, which are easy to confuse.',
226
+ inputSchema: {
227
+ code: z.string().describe('The code, e.g. "000", "121", "199".'),
228
+ field: z
229
+ .enum(['pp_ResponseCode', 'pp_PaymentResponseCode', 'ResponseCode'])
230
+ .describe('Which field carried it. pp_ResponseCode / ResponseCode describe the API call; pp_PaymentResponseCode describes the payment.'),
231
+ },
232
+ }, safeHandler(deps, 'jazzcash_explain_response_code', ({ code, field }) => {
233
+ const info = field === 'pp_PaymentResponseCode' ? describePaymentResponseCode(code) : describeApiResponseCode(code);
234
+ const text = [
235
+ `**${field} = "${code}"**`,
236
+ '',
237
+ info.meaning,
238
+ '',
239
+ `Outcome: ${info.outcome}${info.documented ? '' : ' (this code is not documented in the 2026 corpus)'}`,
240
+ '',
241
+ `What to do: ${info.action}`,
242
+ citations(info.docRefs),
243
+ ].join('\n');
244
+ return toolResult(text, { structuredContent: { ...info } });
245
+ }));
246
+ };
247
+ //# sourceMappingURL=knowledge-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-tools.js","sourceRoot":"","sources":["../../src/tools/knowledge-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Registrar } from '../registry.js';
2
+ export declare const registerOnboardingChecklist: Registrar;
3
+ //# sourceMappingURL=onboarding-checklist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding-checklist.d.ts","sourceRoot":"","sources":["../../src/tools/onboarding-checklist.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AA6FhD,eAAO,MAAM,2BAA2B,EAAE,SAwEzC,CAAC"}