@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,211 @@
1
+ {
2
+ "id": "bnpl-page-redirection-v1.1",
3
+ "title": "Buy Now Pay Later (BNPL) — Page Redirection v1.1",
4
+ "provider": "jazzcash",
5
+ "product": "bnpl",
6
+ "version": "1.1",
7
+ "transport": "form-post",
8
+ "summary": "Hosted BNPL checkout. Identical in shape to card page redirection, with pp_TxnType set to BNPL.",
9
+ "useWhen": "You want to offer Buy Now Pay Later at checkout.",
10
+ "endpoints": {
11
+ "sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/CustomerPortal/transactionmanagement/merchantform",
12
+ "production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/CustomerPortal/transactionmanagement/merchantform"
13
+ },
14
+ "sameEndpointForBothEnvironments": true,
15
+ "movesMoney": true,
16
+ "responseContext": "payment",
17
+ "constants": {
18
+ "pp_Version": "1.1",
19
+ "pp_TxnType": "BNPL",
20
+ "pp_Language": "EN",
21
+ "pp_TxnCurrency": "PKR"
22
+ },
23
+ "parameters": [
24
+ {
25
+ "name": "pp_Version",
26
+ "requirement": "mandatory",
27
+ "valueType": "constant",
28
+ "notes": "Constant. Must not be modified.",
29
+ "constantValue": "1.1"
30
+ },
31
+ {
32
+ "name": "pp_TxnType",
33
+ "requirement": "mandatory",
34
+ "valueType": "constant",
35
+ "notes": "BNPL selects the Buy Now Pay Later flow.",
36
+ "constantValue": "BNPL"
37
+ },
38
+ {
39
+ "name": "pp_Language",
40
+ "requirement": "mandatory",
41
+ "valueType": "constant",
42
+ "notes": "Constant. Must not be modified.",
43
+ "constantValue": "EN"
44
+ },
45
+ {
46
+ "name": "pp_MerchantID",
47
+ "requirement": "mandatory",
48
+ "valueType": "string",
49
+ "notes": "From Integration > Credentials in the merchant portal."
50
+ },
51
+ {
52
+ "name": "pp_Password",
53
+ "requirement": "mandatory",
54
+ "valueType": "string",
55
+ "notes": "From Integration > Credentials. Never render this into client-side code.",
56
+ "sensitive": true
57
+ },
58
+ {
59
+ "name": "pp_TxnRefNo",
60
+ "requirement": "mandatory",
61
+ "valueType": "txn-ref",
62
+ "notes": "Unique for every transaction. Recommended shape: three-letter merchant prefix followed by YYYYMMDDHHMMSS.",
63
+ "maxLength": 20
64
+ },
65
+ {
66
+ "name": "pp_Amount",
67
+ "requirement": "mandatory",
68
+ "valueType": "minor-units",
69
+ "notes": "Minor units. Multiply the order total by 100: PKR 100.00 is sent as \"10000\"."
70
+ },
71
+ {
72
+ "name": "pp_TxnCurrency",
73
+ "requirement": "mandatory",
74
+ "valueType": "constant",
75
+ "notes": "The gateway processes PKR only and performs no conversion.",
76
+ "constantValue": "PKR"
77
+ },
78
+ {
79
+ "name": "pp_TxnDateTime",
80
+ "requirement": "mandatory",
81
+ "valueType": "pkt-datetime",
82
+ "notes": "YYYYMMDDHHMMSS in Pakistan Standard Time."
83
+ },
84
+ {
85
+ "name": "pp_BillReference",
86
+ "requirement": "mandatory",
87
+ "valueType": "bill-reference",
88
+ "notes": "Alphanumeric only. May repeat across transactions."
89
+ },
90
+ {
91
+ "name": "pp_Description",
92
+ "requirement": "mandatory",
93
+ "valueType": "string",
94
+ "notes": "Product or order description."
95
+ },
96
+ {
97
+ "name": "pp_TxnExpiryDateTime",
98
+ "requirement": "mandatory",
99
+ "valueType": "pkt-expiry",
100
+ "notes": "YYYYMMDDHHMMSS in Pakistan Standard Time, one day after pp_TxnDateTime."
101
+ },
102
+ {
103
+ "name": "pp_ReturnURL",
104
+ "requirement": "mandatory",
105
+ "valueType": "url",
106
+ "notes": "Must exactly match the URL registered against the merchant profile. It is part of merchant authentication; any difference fails validation."
107
+ },
108
+ {
109
+ "name": "pp_SubMerchantID",
110
+ "requirement": "must-be-empty",
111
+ "valueType": "string",
112
+ "notes": "Send as \"\". Do not use null and do not omit it."
113
+ },
114
+ {
115
+ "name": "pp_BankID",
116
+ "requirement": "must-be-empty",
117
+ "valueType": "string",
118
+ "notes": "Send as \"\". Do not use null and do not omit it."
119
+ },
120
+ {
121
+ "name": "pp_ProductID",
122
+ "requirement": "must-be-empty",
123
+ "valueType": "string",
124
+ "notes": "Send as \"\". Do not use null and do not omit it."
125
+ },
126
+ {
127
+ "name": "ppmpf_1",
128
+ "requirement": "must-be-empty",
129
+ "valueType": "string",
130
+ "notes": "Leave empty."
131
+ },
132
+ {
133
+ "name": "ppmpf_2",
134
+ "requirement": "must-be-empty",
135
+ "valueType": "string",
136
+ "notes": "Leave empty."
137
+ },
138
+ {
139
+ "name": "ppmpf_3",
140
+ "requirement": "must-be-empty",
141
+ "valueType": "string",
142
+ "notes": "Leave empty."
143
+ },
144
+ {
145
+ "name": "ppmpf_4",
146
+ "requirement": "must-be-empty",
147
+ "valueType": "string",
148
+ "notes": "Leave empty."
149
+ },
150
+ {
151
+ "name": "ppmpf_5",
152
+ "requirement": "must-be-empty",
153
+ "valueType": "string",
154
+ "notes": "Leave empty."
155
+ },
156
+ {
157
+ "name": "pp_SecureHash",
158
+ "requirement": "mandatory",
159
+ "valueType": "secure-hash",
160
+ "notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
161
+ }
162
+ ],
163
+ "hash": {
164
+ "algorithm": "hmac-sha256",
165
+ "includeFieldPrefixes": ["pp_", "ppmpf_"],
166
+ "excludeFields": ["pp_SecureHash", "SecureHash"],
167
+ "outputEncoding": "hex-lowercase",
168
+ "comparison": "case-insensitive"
169
+ },
170
+ "response": {
171
+ "hashField": "pp_SecureHash",
172
+ "hashFieldPrefixes": [],
173
+ "successField": "pp_ResponseCode",
174
+ "successValue": "000",
175
+ "messageField": "pp_ResponseMessage",
176
+ "hashVerification": "assumed-all-non-empty",
177
+ "notableFields": ["pp_ResponseCode", "pp_ResponseMessage", "pp_TxnRefNo"]
178
+ },
179
+ "companionFlows": ["status-inquiry-v1.1", "refund-bnpl"],
180
+ "docRefs": [
181
+ {
182
+ "docId": "bnpl-guide",
183
+ "sectionId": "introduction",
184
+ "label": "JazzCash Buy Now Pay Later (BNPL) Guide, 2026"
185
+ },
186
+ {
187
+ "docId": "hmac-sha256-calculation",
188
+ "sectionId": "how-is-hmac-sha256-calculated"
189
+ }
190
+ ],
191
+ "knownIssues": [
192
+ {
193
+ "id": "bnpl-production-credentials-for-testing",
194
+ "summary": "BNPL testing uses production credentials",
195
+ "detail": "The BNPL guide states \"Use Production Credentials for BNPL Testing\", unlike every other flow, which is tested in sandbox.",
196
+ "guidance": "Treat every BNPL test as a live transaction: use the smallest possible amount, expect a real debit, and refund it afterwards."
197
+ },
198
+ {
199
+ "id": "php-sample-loose-comparison",
200
+ "summary": "The official PHP sample drops a value of integer 0 from the hash",
201
+ "detail": "The sample filters with `$value != null && $value != \"\"`, which is false for integer 0 in PHP, silently removing that field from the hash string.",
202
+ "guidance": "Filter with a strict string comparison instead: `$value !== null && (string)$value !== ''`."
203
+ },
204
+ {
205
+ "id": "php-sample-ksort-mode",
206
+ "summary": "The official PHP sample sorts with ksort() in SORT_REGULAR mode",
207
+ "detail": "The specification requires ascending ASCII order of parameter names. SORT_REGULAR is not guaranteed to be a plain string comparison.",
208
+ "guidance": "Use `ksort($params, SORT_STRING);` so the ordering is deterministic and matches the specification."
209
+ }
210
+ ]
211
+ }
@@ -0,0 +1,211 @@
1
+ {
2
+ "id": "card-page-redirection-v1.1",
3
+ "title": "Card Payment — Page Redirection / Checkout v1.1",
4
+ "provider": "jazzcash",
5
+ "product": "card",
6
+ "version": "1.1",
7
+ "transport": "form-post",
8
+ "summary": "Hosted checkout. The merchant posts a signed HTML form to JazzCash, the customer completes payment on the JazzCash landing page, and the result is posted back to the registered Return URL.",
9
+ "useWhen": "You want card payments without handling card data yourself. The same landing page also offers mobile account and voucher payment.",
10
+ "endpoints": {
11
+ "sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/CustomerPortal/transactionmanagement/merchantform",
12
+ "production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/CustomerPortal/transactionmanagement/merchantform"
13
+ },
14
+ "sameEndpointForBothEnvironments": true,
15
+ "movesMoney": true,
16
+ "responseContext": "payment",
17
+ "constants": {
18
+ "pp_Version": "1.1",
19
+ "pp_TxnType": "MPAY",
20
+ "pp_Language": "EN",
21
+ "pp_TxnCurrency": "PKR"
22
+ },
23
+ "parameters": [
24
+ {
25
+ "name": "pp_Version",
26
+ "requirement": "mandatory",
27
+ "valueType": "constant",
28
+ "constantValue": "1.1",
29
+ "notes": "Constant. Must not be modified."
30
+ },
31
+ {
32
+ "name": "pp_TxnType",
33
+ "requirement": "mandatory",
34
+ "valueType": "constant",
35
+ "constantValue": "MPAY",
36
+ "notes": "MPAY selects the card checkout page."
37
+ },
38
+ {
39
+ "name": "pp_Language",
40
+ "requirement": "mandatory",
41
+ "valueType": "constant",
42
+ "constantValue": "EN",
43
+ "notes": "Constant. Must not be modified."
44
+ },
45
+ {
46
+ "name": "pp_MerchantID",
47
+ "requirement": "mandatory",
48
+ "valueType": "string",
49
+ "notes": "From Integration > Credentials in the merchant portal."
50
+ },
51
+ {
52
+ "name": "pp_Password",
53
+ "requirement": "mandatory",
54
+ "valueType": "string",
55
+ "sensitive": true,
56
+ "notes": "From Integration > Credentials. Never render this into client-side code."
57
+ },
58
+ {
59
+ "name": "pp_TxnRefNo",
60
+ "requirement": "mandatory",
61
+ "valueType": "txn-ref",
62
+ "maxLength": 20,
63
+ "notes": "Unique for every transaction. Recommended shape: three-letter merchant prefix followed by YYYYMMDDHHMMSS."
64
+ },
65
+ {
66
+ "name": "pp_Amount",
67
+ "requirement": "mandatory",
68
+ "valueType": "minor-units",
69
+ "notes": "Minor units. Multiply the order total by 100: PKR 2.00 is sent as \"200\"."
70
+ },
71
+ {
72
+ "name": "pp_TxnCurrency",
73
+ "requirement": "mandatory",
74
+ "valueType": "constant",
75
+ "constantValue": "PKR",
76
+ "notes": "The gateway processes PKR only and performs no conversion."
77
+ },
78
+ {
79
+ "name": "pp_TxnDateTime",
80
+ "requirement": "mandatory",
81
+ "valueType": "pkt-datetime",
82
+ "notes": "YYYYMMDDHHMMSS in Pakistan Standard Time."
83
+ },
84
+ {
85
+ "name": "pp_BillReference",
86
+ "requirement": "mandatory",
87
+ "valueType": "bill-reference",
88
+ "notes": "Alphanumeric only. May repeat across transactions."
89
+ },
90
+ {
91
+ "name": "pp_Description",
92
+ "requirement": "mandatory",
93
+ "valueType": "string",
94
+ "notes": "Shown to the customer on the payment page."
95
+ },
96
+ {
97
+ "name": "pp_TxnExpiryDateTime",
98
+ "requirement": "mandatory",
99
+ "valueType": "pkt-expiry",
100
+ "notes": "YYYYMMDDHHMMSS in Pakistan Standard Time, one day after pp_TxnDateTime."
101
+ },
102
+ {
103
+ "name": "pp_ReturnURL",
104
+ "requirement": "mandatory",
105
+ "valueType": "url",
106
+ "notes": "Must exactly match the URL registered against the merchant profile. It is part of merchant authentication; any difference fails validation."
107
+ },
108
+ {
109
+ "name": "pp_SubMerchantID",
110
+ "requirement": "must-be-empty",
111
+ "valueType": "string",
112
+ "notes": "Send as \"\". Do not use null and do not omit it."
113
+ },
114
+ {
115
+ "name": "pp_BankID",
116
+ "requirement": "must-be-empty",
117
+ "valueType": "string",
118
+ "notes": "Send as \"\"."
119
+ },
120
+ {
121
+ "name": "pp_ProductID",
122
+ "requirement": "must-be-empty",
123
+ "valueType": "string",
124
+ "notes": "Send as \"\"."
125
+ },
126
+ {
127
+ "name": "ppmpf_1",
128
+ "requirement": "must-be-empty",
129
+ "valueType": "string",
130
+ "notes": "Leave empty for card checkout."
131
+ },
132
+ {
133
+ "name": "ppmpf_2",
134
+ "requirement": "must-be-empty",
135
+ "valueType": "string",
136
+ "notes": "Leave empty for card checkout."
137
+ },
138
+ {
139
+ "name": "ppmpf_3",
140
+ "requirement": "optional",
141
+ "valueType": "string",
142
+ "notes": "Optional merchant-defined field. When non-empty it participates in the secure hash."
143
+ },
144
+ {
145
+ "name": "ppmpf_4",
146
+ "requirement": "optional",
147
+ "valueType": "string",
148
+ "notes": "Optional merchant-defined field. When non-empty it participates in the secure hash."
149
+ },
150
+ {
151
+ "name": "ppmpf_5",
152
+ "requirement": "optional",
153
+ "valueType": "string",
154
+ "notes": "Optional merchant-defined field. When non-empty it participates in the secure hash."
155
+ },
156
+ {
157
+ "name": "pp_SecureHash",
158
+ "requirement": "mandatory",
159
+ "valueType": "secure-hash",
160
+ "notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
161
+ }
162
+ ],
163
+ "hash": {
164
+ "algorithm": "hmac-sha256",
165
+ "includeFieldPrefixes": ["pp_", "ppmpf_"],
166
+ "excludeFields": ["pp_SecureHash", "SecureHash"],
167
+ "outputEncoding": "hex-lowercase",
168
+ "comparison": "case-insensitive"
169
+ },
170
+ "response": {
171
+ "hashField": "pp_SecureHash",
172
+ "hashFieldPrefixes": [],
173
+ "successField": "pp_ResponseCode",
174
+ "successValue": "000",
175
+ "messageField": "pp_ResponseMessage",
176
+ "hashVerification": "assumed-all-non-empty",
177
+ "notableFields": ["pp_ResponseCode", "pp_ResponseMessage", "pp_TxnRefNo", "pp_RetreivalReferenceNo", "pp_AuthCode"]
178
+ },
179
+ "companionFlows": ["status-inquiry-v1.1"],
180
+ "docRefs": [
181
+ {
182
+ "docId": "card-page-redirection",
183
+ "sectionId": "introduction",
184
+ "label": "Card Payment — Page Redirection/Checkout (v1.1), 2026"
185
+ },
186
+ {
187
+ "docId": "hmac-sha256-calculation",
188
+ "sectionId": "how-is-hmac-sha256-calculated"
189
+ }
190
+ ],
191
+ "knownIssues": [
192
+ {
193
+ "id": "php-sample-loose-comparison",
194
+ "summary": "The official PHP sample drops a value of integer 0 from the hash",
195
+ "detail": "The sample filters with `$value != null && $value != \"\"`, which is false for integer 0 in PHP, silently removing that field from the hash string.",
196
+ "guidance": "Filter with a strict string comparison instead: `$value !== null && (string)$value !== ''`."
197
+ },
198
+ {
199
+ "id": "php-sample-ksort-mode",
200
+ "summary": "The official PHP sample sorts with ksort() in SORT_REGULAR mode",
201
+ "detail": "The specification requires ascending ASCII order of parameter names. SORT_REGULAR is not guaranteed to be a plain string comparison.",
202
+ "guidance": "Use `ksort($params, SORT_STRING);` so the ordering is deterministic and matches the specification."
203
+ },
204
+ {
205
+ "id": "browser-rendered-values",
206
+ "summary": "Form values are rendered into HTML without escaping in the official sample",
207
+ "detail": "Values are echoed directly into hidden inputs, so a quote in pp_Description breaks the form and can alter what is submitted.",
208
+ "guidance": "Escape every rendered value, e.g. `htmlspecialchars($value, ENT_QUOTES, 'UTF-8')`."
209
+ }
210
+ ]
211
+ }
@@ -0,0 +1,187 @@
1
+ {
2
+ "id": "mwallet-rest-v1.1",
3
+ "title": "MWallet REST API v1.1 (without CNIC)",
4
+ "provider": "jazzcash",
5
+ "product": "mwallet",
6
+ "version": "1.1",
7
+ "transport": "rest",
8
+ "summary": "Server-to-server mobile account debit. The customer approves the transaction on their handset.",
9
+ "useWhen": "You want to charge a JazzCash mobile wallet directly, without CNIC verification and without a hosted page.",
10
+ "endpoints": {
11
+ "sandbox": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/m-wallet",
12
+ "production": "https://onlinepayments.jazzcash.com.pk/payment-orchestrator/api/v1/rest/payments/m-wallet"
13
+ },
14
+ "sameEndpointForBothEnvironments": true,
15
+ "movesMoney": true,
16
+ "responseContext": "payment",
17
+ "constants": {
18
+ "pp_Version": "1.1",
19
+ "pp_TxnType": "MWALLET",
20
+ "pp_Language": "EN",
21
+ "pp_TxnCurrency": "PKR"
22
+ },
23
+ "parameters": [
24
+ {
25
+ "name": "pp_Amount",
26
+ "requirement": "mandatory",
27
+ "valueType": "minor-units",
28
+ "notes": "Minor units. Multiply the order total by 100: PKR 100.00 is sent as \"10000\"."
29
+ },
30
+ {
31
+ "name": "pp_BillReference",
32
+ "requirement": "mandatory",
33
+ "valueType": "bill-reference",
34
+ "notes": "Alphanumeric only. May repeat across transactions."
35
+ },
36
+ {
37
+ "name": "pp_Description",
38
+ "requirement": "mandatory",
39
+ "valueType": "string",
40
+ "notes": "Product or order description."
41
+ },
42
+ {
43
+ "name": "pp_Language",
44
+ "requirement": "mandatory",
45
+ "valueType": "constant",
46
+ "notes": "Constant. Must not be modified.",
47
+ "constantValue": "EN"
48
+ },
49
+ {
50
+ "name": "pp_MerchantID",
51
+ "requirement": "mandatory",
52
+ "valueType": "string",
53
+ "notes": "From Integration > Credentials in the merchant portal."
54
+ },
55
+ {
56
+ "name": "pp_Password",
57
+ "requirement": "mandatory",
58
+ "valueType": "string",
59
+ "notes": "From Integration > Credentials. Never render this into client-side code.",
60
+ "sensitive": true
61
+ },
62
+ {
63
+ "name": "pp_ReturnURL",
64
+ "requirement": "mandatory",
65
+ "valueType": "url",
66
+ "notes": "Must exactly match the URL registered against the merchant profile. It is part of merchant authentication; any difference fails validation."
67
+ },
68
+ {
69
+ "name": "pp_SecureHash",
70
+ "requirement": "mandatory",
71
+ "valueType": "secure-hash",
72
+ "notes": "HMAC-SHA256 over the sorted non-empty values, prefixed by the Integrity Salt. Excluded from its own input."
73
+ },
74
+ {
75
+ "name": "pp_TxnCurrency",
76
+ "requirement": "mandatory",
77
+ "valueType": "constant",
78
+ "notes": "The gateway processes PKR only and performs no conversion.",
79
+ "constantValue": "PKR"
80
+ },
81
+ {
82
+ "name": "pp_TxnDateTime",
83
+ "requirement": "mandatory",
84
+ "valueType": "pkt-datetime",
85
+ "notes": "YYYYMMDDHHMMSS in Pakistan Standard Time."
86
+ },
87
+ {
88
+ "name": "pp_TxnExpiryDateTime",
89
+ "requirement": "mandatory",
90
+ "valueType": "pkt-expiry",
91
+ "notes": "YYYYMMDDHHMMSS in Pakistan Standard Time, one day after pp_TxnDateTime."
92
+ },
93
+ {
94
+ "name": "pp_TxnRefNo",
95
+ "requirement": "mandatory",
96
+ "valueType": "txn-ref",
97
+ "notes": "Unique for every transaction. Recommended shape: three-letter merchant prefix followed by YYYYMMDDHHMMSS.",
98
+ "maxLength": 20
99
+ },
100
+ {
101
+ "name": "pp_TxnType",
102
+ "requirement": "mandatory",
103
+ "valueType": "constant",
104
+ "notes": "Constant. Must not be modified.",
105
+ "constantValue": "MWALLET"
106
+ },
107
+ {
108
+ "name": "pp_Version",
109
+ "requirement": "mandatory",
110
+ "valueType": "constant",
111
+ "notes": "Constant. Must not be modified.",
112
+ "constantValue": "1.1"
113
+ },
114
+ {
115
+ "name": "ppmpf_1",
116
+ "requirement": "mandatory",
117
+ "valueType": "msisdn",
118
+ "notes": "Mobile wallet number. Mandatory for this flow, unlike every other, where ppmpf_1 is left empty."
119
+ },
120
+ {
121
+ "name": "ppmpf_2",
122
+ "requirement": "must-be-empty",
123
+ "valueType": "string",
124
+ "notes": "Leave empty."
125
+ },
126
+ {
127
+ "name": "ppmpf_3",
128
+ "requirement": "must-be-empty",
129
+ "valueType": "string",
130
+ "notes": "Leave empty."
131
+ },
132
+ {
133
+ "name": "ppmpf_4",
134
+ "requirement": "must-be-empty",
135
+ "valueType": "string",
136
+ "notes": "Leave empty."
137
+ },
138
+ {
139
+ "name": "ppmpf_5",
140
+ "requirement": "must-be-empty",
141
+ "valueType": "string",
142
+ "notes": "Leave empty."
143
+ }
144
+ ],
145
+ "hash": {
146
+ "algorithm": "hmac-sha256",
147
+ "includeFieldPrefixes": ["pp_", "ppmpf_"],
148
+ "excludeFields": ["pp_SecureHash", "SecureHash"],
149
+ "outputEncoding": "hex-lowercase",
150
+ "comparison": "case-insensitive"
151
+ },
152
+ "response": {
153
+ "hashField": "pp_SecureHash",
154
+ "hashFieldPrefixes": [],
155
+ "successField": "pp_ResponseCode",
156
+ "successValue": "000",
157
+ "messageField": "pp_ResponseMessage",
158
+ "hashVerification": "assumed-all-non-empty",
159
+ "notableFields": ["pp_ResponseCode", "pp_ResponseMessage", "pp_RetreivalReferenceNo", "pp_TxnRefNo"]
160
+ },
161
+ "companionFlows": ["status-inquiry-v1.1", "refund-mwallet-v1.1"],
162
+ "docRefs": [
163
+ {
164
+ "docId": "mwallet-rest-v1-1",
165
+ "sectionId": "implementation-notes",
166
+ "label": "MWallet REST API v1.1 (Without CNIC) Merchant Guide, 2026"
167
+ },
168
+ {
169
+ "docId": "hmac-sha256-calculation",
170
+ "sectionId": "how-is-hmac-sha256-calculated"
171
+ }
172
+ ],
173
+ "knownIssues": [
174
+ {
175
+ "id": "identical-sandbox-and-production-endpoint",
176
+ "summary": "Sandbox and production use the same URL",
177
+ "detail": "The guide lists an identical endpoint for both environments, so the URL carries no information about which environment a request reaches. The environment is determined entirely by the credentials.",
178
+ "guidance": "Declare the environment explicitly on every call and cross-check it against the credential profile in use. Never infer it from the endpoint."
179
+ },
180
+ {
181
+ "id": "ppmpf1-carries-the-wallet-number",
182
+ "summary": "ppmpf_1 is a mandatory business field in this flow",
183
+ "detail": "Every other guide instructs merchants to leave ppmpf_1 empty. In MWallet REST v1.1 it carries the customer's mobile wallet number and is mandatory.",
184
+ "guidance": "Populate ppmpf_1 with the wallet MSISDN. Because it is non-empty it also participates in the secure hash."
185
+ }
186
+ ]
187
+ }