@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 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/codegen/generate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAQ7D,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EAGb,YAAY,EAEb,MAAM,YAAY,CAAC;AAmfpB,wCAAwC;AACxC,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAqBnE;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,YAAY,EAAE,CAW7E"}
@@ -0,0 +1,490 @@
1
+ import { resolveEndpoint } from '../catalogue/endpoints.js';
2
+ import { signatureFieldName } from '../catalogue/hash-options.js';
3
+ import { JazzCashValidationError } from '../errors.js';
4
+ import { describeTransportMismatch } from '../gateway/transport.js';
5
+ import { CORPUS_VERSION } from '../version.js';
6
+ import { nodeAdapter } from './languages/node.js';
7
+ import { phpAdapter } from './languages/php.js';
8
+ import { pythonAdapter } from './languages/python.js';
9
+ import { loadTemplate, render } from './renderer.js';
10
+ /**
11
+ * Bind a flow specification to a language template.
12
+ *
13
+ * The parameter list is derived from the catalogue rather than written into the
14
+ * template, so generated code can never drift from the documented field set.
15
+ * Credentials and runtime values are assigned separately, after the literal, so
16
+ * a secret is never embedded in generated source.
17
+ */
18
+ const ADAPTERS = {
19
+ php: phpAdapter,
20
+ node: nodeAdapter,
21
+ python: pythonAdapter,
22
+ };
23
+ /**
24
+ * Fields every template assigns at runtime rather than from the literal.
25
+ *
26
+ * Credentials, timestamps and references are computed by the generated code, so
27
+ * embedding them in the literal would either bake in a secret or emit a stale
28
+ * value.
29
+ */
30
+ const RUNTIME_ASSIGNED_EVERYWHERE = new Set([
31
+ 'pp_MerchantID',
32
+ 'pp_Password',
33
+ 'pp_MerchantMPIN',
34
+ 'pp_ReturnURL',
35
+ 'pp_TxnDateTime',
36
+ 'pp_TxnExpiryDateTime',
37
+ 'pp_TxnRefNo',
38
+ 'pp_RequestID',
39
+ ]);
40
+ /**
41
+ * Business fields only SOME templates assign at runtime.
42
+ *
43
+ * The checkout and wallet-linking templates carry an order-data block and fill
44
+ * these in themselves. The REST client has no such block, so treating them as
45
+ * runtime-assigned there dropped them from the generated file entirely: code
46
+ * that moves money with no amount in it, and no `TODO` for the merchant to
47
+ * replace.
48
+ */
49
+ const RUNTIME_ASSIGNED_BUSINESS_FIELDS = new Set(['pp_Amount', 'pp_BillReference', 'pp_Description', 'pp_MSISDN']);
50
+ /**
51
+ * Whether the template assigns `name` itself, so the literal must omit it.
52
+ *
53
+ * The signature field is taken from the flow rather than listed above, because
54
+ * `pp_SecureHash` is only JazzCash's name for it. Spelled as a literal, a flow
55
+ * that signs into `vp_Signature` had that field emitted into the parameter map
56
+ * as a `TODO` for the merchant to fill in by hand — a signature the generated
57
+ * code computes being asked of the reader instead.
58
+ */
59
+ function isRuntimeAssigned(flow, name, kind) {
60
+ if (name === signatureFieldName(flow) || RUNTIME_ASSIGNED_EVERYWHERE.has(name)) {
61
+ return true;
62
+ }
63
+ return kind !== 'rest-client' && RUNTIME_ASSIGNED_BUSINESS_FIELDS.has(name);
64
+ }
65
+ const TODO = 'TODO';
66
+ /** The exact rupees-to-minor-units helper each generated file ships. */
67
+ const MINOR_UNITS_HELPER = {
68
+ php: 'jazzcash_to_minor_units()',
69
+ node: 'toMinorUnits()',
70
+ python: 'to_minor_units()',
71
+ };
72
+ /**
73
+ * Build the literal parameter map a template embeds.
74
+ *
75
+ * Constants get their fixed value, `must-be-empty` fields get `''`, and business
76
+ * fields the merchant must supply get a `TODO` marker rather than a plausible
77
+ * placeholder that could be shipped unnoticed. A field is omitted only when the
78
+ * template provably assigns it, which `isRuntimeAssigned` decides per kind: a
79
+ * mandatory field that is neither in the literal nor assigned at runtime would
80
+ * leave the generated request incomplete with nothing to tell the merchant so.
81
+ */
82
+ function literalParameters(flow, kind) {
83
+ const entries = new Map();
84
+ for (const parameter of flow.parameters) {
85
+ if (isRuntimeAssigned(flow, parameter.name, kind)) {
86
+ continue;
87
+ }
88
+ if (parameter.valueType === 'constant') {
89
+ entries.set(parameter.name, parameter.constantValue ?? flow.constants[parameter.name] ?? '');
90
+ continue;
91
+ }
92
+ if (parameter.requirement === 'must-be-empty' || parameter.requirement === 'optional') {
93
+ entries.set(parameter.name, '');
94
+ continue;
95
+ }
96
+ entries.set(parameter.name, `${TODO}: ${parameter.notes}`);
97
+ }
98
+ return entries;
99
+ }
100
+ /** Runtime assignments the template appends after the literal, per language. */
101
+ function runtimeOverrides(flow, language) {
102
+ const lines = [];
103
+ const needsMpin = flow.parameters.some((parameter) => parameter.name === 'pp_MerchantMPIN');
104
+ const assign = (name, expression) => {
105
+ switch (language) {
106
+ case 'php':
107
+ lines.push(`$params['${name}'] = ${expression};`);
108
+ break;
109
+ case 'node':
110
+ lines.push(` ${name}: ${expression},`);
111
+ break;
112
+ case 'python':
113
+ lines.push(` parameters['${name}'] = ${expression}`);
114
+ break;
115
+ }
116
+ };
117
+ const envRead = (variable) => {
118
+ switch (language) {
119
+ case 'php':
120
+ return `getenv('${variable}') ?: ''`;
121
+ case 'node':
122
+ return `process.env.${variable} ?? ''`;
123
+ case 'python':
124
+ return `os.environ.get('${variable}', '')`;
125
+ }
126
+ };
127
+ /**
128
+ * Call the template's reference builder rather than inlining a timestamp.
129
+ *
130
+ * A wall-clock stamp alone is not unique: two orders placed in the same
131
+ * millisecond produce the same reference, which the gateway rejects as a
132
+ * duplicate. The builder appends random characters from the language's
133
+ * cryptographic source, inside the documented 20-character limit.
134
+ */
135
+ const reference = (prefix) => {
136
+ switch (language) {
137
+ case 'php':
138
+ return `jazzcash_reference('${prefix}')`;
139
+ case 'node':
140
+ return `generateReference('${prefix}')`;
141
+ case 'python':
142
+ return `generate_reference('${prefix}')`;
143
+ }
144
+ };
145
+ if (needsMpin) {
146
+ assign('pp_MerchantMPIN', envRead('JAZZCASH_MERCHANT_MPIN'));
147
+ }
148
+ for (const parameter of flow.parameters) {
149
+ switch (parameter.name) {
150
+ case 'pp_TxnDateTime':
151
+ assign('pp_TxnDateTime', language === 'php' ? "date('YmdHis')" : language === 'node' ? 'txnDateTime()' : 'txn_date_time()');
152
+ break;
153
+ case 'pp_TxnExpiryDateTime':
154
+ assign('pp_TxnExpiryDateTime', language === 'php'
155
+ ? "date('YmdHis', strtotime('+1 day'))"
156
+ : language === 'node'
157
+ ? 'txnExpiryDateTime()'
158
+ : 'txn_expiry_date_time()');
159
+ break;
160
+ case 'pp_TxnRefNo':
161
+ // A refund and a status enquiry reference an EXISTING transaction, so
162
+ // generating a fresh reference there would look up nothing.
163
+ if (flow.responseContext === 'refund' || flow.responseContext === 'inquiry') {
164
+ assign('pp_TxnRefNo', "'TODO-original-transaction-reference'");
165
+ }
166
+ else {
167
+ assign('pp_TxnRefNo', reference('T'));
168
+ }
169
+ break;
170
+ case 'pp_RequestID':
171
+ // Unique for every attempt, unlike pp_TxnRefNo, which a refund or an
172
+ // enquiry carries over from the transaction it names.
173
+ assign('pp_RequestID', reference('R'));
174
+ break;
175
+ case 'pp_ReturnURL':
176
+ assign('pp_ReturnURL', envRead('JAZZCASH_RETURN_URL'));
177
+ break;
178
+ default:
179
+ break;
180
+ }
181
+ }
182
+ return lines.join('\n');
183
+ }
184
+ /**
185
+ * The nested settlement guard, per language.
186
+ *
187
+ * Rendered by the ordinary renderer from the flow's own declared field and
188
+ * value, and emitted ONLY where the flow declares a settlement level, so the
189
+ * generated file for a JazzCash flow — which answers in one field — carries no
190
+ * check for a field its gateway never sends.
191
+ *
192
+ * The guard has to be here rather than in the template because the renderer
193
+ * substitutes and nothing else: it has no way to drop a block. A guard left in
194
+ * the template unconditionally would compare an empty field name for every
195
+ * JazzCash flow, which is dead code in a file that moves money.
196
+ */
197
+ const SETTLEMENT_GUARDS = {
198
+ php: ` // Two-level success rule. {{SUCCESS_FIELD}} says only that the gateway accepted
199
+ // and processed the request; {{SETTLEMENT_FIELD}} is the card issuer's own
200
+ // verdict, and it is the one that says whether money moved. Read the first
201
+ // level alone and a DECLINED card prints Success: the merchant releases the
202
+ // goods and is never paid.
203
+ $settlementCode = (string) ($response['{{SETTLEMENT_FIELD}}'] ?? '');
204
+
205
+ if ($settlementCode !== '{{SETTLEMENT_SUCCESS_VALUE}}') {
206
+ // An absent verdict is not an approval either: this flow declares a
207
+ // settlement level, so a response without one has not been answered.
208
+ echo 'DECLINED. {{SETTLEMENT_FIELD}}: ' . ($settlementCode === '' ? '(absent)' : $settlementCode) . PHP_EOL;
209
+ echo 'Do NOT release goods. Ask the customer for another payment method.' . PHP_EOL;
210
+ exit(1);
211
+ }
212
+
213
+ `,
214
+ node: ` // Two-level success rule. {{SUCCESS_FIELD}} says only that the gateway accepted
215
+ // and processed the request; {{SETTLEMENT_FIELD}} is the card issuer's own
216
+ // verdict, and it is the one that says whether money moved. Read the first
217
+ // level alone and a DECLINED card prints Success: the merchant releases the
218
+ // goods and is never paid.
219
+ const settlementCode = String(result['{{SETTLEMENT_FIELD}}'] ?? '');
220
+
221
+ if (settlementCode !== '{{SETTLEMENT_SUCCESS_VALUE}}') {
222
+ // An absent verdict is not an approval either: this flow declares a
223
+ // settlement level, so a response without one has not been answered.
224
+ console.error('DECLINED. {{SETTLEMENT_FIELD}}:', settlementCode === '' ? '(absent)' : settlementCode);
225
+ console.error('Do NOT release goods. Ask the customer for another payment method.');
226
+ return result;
227
+ }
228
+
229
+ `,
230
+ python: ` # Two-level success rule. {{SUCCESS_FIELD}} says only that the gateway
231
+ # accepted and processed the request; {{SETTLEMENT_FIELD}} is the card
232
+ # issuer's own verdict, and it is the one that says whether money moved.
233
+ # Read the first level alone and a DECLINED card prints Success: the
234
+ # merchant releases the goods and is never paid.
235
+ settlement_code = str(result.get('{{SETTLEMENT_FIELD}}') or '')
236
+
237
+ if settlement_code != '{{SETTLEMENT_SUCCESS_VALUE}}':
238
+ # An absent verdict is not an approval either: this flow declares a
239
+ # settlement level, so a response without one has not been answered.
240
+ print('DECLINED. {{SETTLEMENT_FIELD}}:', settlement_code or '(absent)')
241
+ print('Do NOT release goods. Ask the customer for another payment method.')
242
+ return result
243
+
244
+ `,
245
+ };
246
+ /**
247
+ * Render the settlement guard for a flow, or nothing where it declares none.
248
+ *
249
+ * Rendered here rather than by the caller so the guard's own placeholders are
250
+ * already substituted by the time it is spliced into the outer template: the
251
+ * renderer replaces in a single pass and does not rescan what it inserted, so a
252
+ * `{{SETTLEMENT_FIELD}}` left inside would reach the merchant's file verbatim.
253
+ */
254
+ function settlementGuard(flow, adapter) {
255
+ const settlement = flow.response.settlement;
256
+ if (settlement === undefined) {
257
+ return '';
258
+ }
259
+ return render(SETTLEMENT_GUARDS[adapter.id], {
260
+ SUCCESS_FIELD: flow.response.successField,
261
+ SETTLEMENT_FIELD: settlement.field,
262
+ SETTLEMENT_SUCCESS_VALUE: adapter.escape(settlement.successValue),
263
+ });
264
+ }
265
+ /**
266
+ * The line a generated client prints when the call succeeds.
267
+ *
268
+ * The field comes from the flow's response contract. It used to be derived from
269
+ * the SHAPE of the success field — `pp_ResponseMessage` unless the flow answered
270
+ * in a bare `ResponseCode` — which is a JazzCash naming convention applied to
271
+ * every provider, so a client generated for anyone else read a field its gateway
272
+ * never sends. The failure is silent in all three languages: an absent key is an
273
+ * empty line where the gateway's own explanation of a failed payment should be.
274
+ *
275
+ * Built here rather than written into the template for the same reason as the
276
+ * settlement guard: the renderer substitutes and cannot drop a block, so a flow
277
+ * whose contract names no message field could only be rendered as a lookup of
278
+ * the empty string — which prints `undefined` in Node and `None` in Python in
279
+ * front of a merchant, reading as a broken integration rather than as a provider
280
+ * that sends no message.
281
+ *
282
+ * The name is escaped even though `responseFieldNameSchema` already restricts it
283
+ * to an identifier: this value is interpolated into source code that will handle
284
+ * money, and the escaping must not depend on a check made somewhere else.
285
+ */
286
+ function successReport(flow, adapter) {
287
+ const field = flow.response.messageField;
288
+ switch (adapter.id) {
289
+ case 'php':
290
+ return field === undefined
291
+ ? [
292
+ " // This flow's response contract names no message field, so nothing is read.",
293
+ ' echo "Success." . PHP_EOL;',
294
+ ].join('\n')
295
+ : ` echo "Success: " . ($response['${adapter.escape(field)}'] ?? '') . PHP_EOL;`;
296
+ case 'node':
297
+ return field === undefined
298
+ ? [
299
+ " // This flow's response contract names no message field, so nothing is read.",
300
+ " console.error('Call succeeded.');",
301
+ ].join('\n')
302
+ : ` console.error('JazzCash call succeeded:', result['${adapter.escape(field)}']);`;
303
+ case 'python':
304
+ return field === undefined
305
+ ? [
306
+ " # This flow's response contract names no message field, so nothing is read.",
307
+ " print('Call succeeded.')",
308
+ ].join('\n')
309
+ : ` print('JazzCash call succeeded:', result.get('${adapter.escape(field)}'))`;
310
+ }
311
+ }
312
+ function docSources(flow) {
313
+ return flow.docRefs
314
+ .map((ref) => ref.label ?? `jazzcash://docs/${ref.docId}`)
315
+ .filter((label, index, all) => all.indexOf(label) === index)
316
+ .join('; ');
317
+ }
318
+ /**
319
+ * Route the generated IPN listener answers on.
320
+ *
321
+ * WooCommerce merchants must instead register `{base}/jazzcash_ipn_v2`, which
322
+ * the plugin owns; this default is for bespoke integrations.
323
+ */
324
+ const IPN_PATH = '/jazzcash/ipn';
325
+ function defaultFramework(language) {
326
+ switch (language) {
327
+ case 'php':
328
+ return 'plain PHP (no framework)';
329
+ case 'node':
330
+ return 'Express';
331
+ case 'python':
332
+ return 'Flask';
333
+ }
334
+ }
335
+ /**
336
+ * Characters a framework name may keep once it is rendered into a comment.
337
+ *
338
+ * `FRAMEWORK` is the only template value taken from a free-text tool argument —
339
+ * every other one comes from the catalogue, the version constant or a `z.enum` —
340
+ * and in all three IPN templates it sits inside a block comment or a docstring.
341
+ * A value carrying a comment terminator — a star followed by a slash, or a
342
+ * triple quote — closes that comment and leaves the remainder as executable
343
+ * top-level code in a file that will handle money. The value is therefore
344
+ * reduced to a conservative allow-list rather than escaped per language, which
345
+ * would need a different escape for each of the three comment syntaxes.
346
+ */
347
+ const FRAMEWORK_DISALLOWED = /[^\w .,+#()-]+/g;
348
+ const MAX_FRAMEWORK_LENGTH = 80;
349
+ /** The framework label to render, reduced to something no comment can escape. */
350
+ function frameworkLabel(request) {
351
+ const supplied = (request.framework ?? '')
352
+ .replace(FRAMEWORK_DISALLOWED, ' ')
353
+ .replace(/\s+/g, ' ')
354
+ .trim()
355
+ .slice(0, MAX_FRAMEWORK_LENGTH)
356
+ .trim();
357
+ return supplied === '' ? defaultFramework(request.language) : supplied;
358
+ }
359
+ function templateValues(request, adapter) {
360
+ const { flow } = request;
361
+ const indent = request.language === 'php' ? ' ' : ' ';
362
+ return {
363
+ FLOW_ID: flow.id,
364
+ FLOW_TITLE: flow.title,
365
+ CORPUS_VERSION,
366
+ ENDPOINT: resolveEndpoint(flow, request.environment),
367
+ DOC_SOURCES: docSources(flow),
368
+ MOVES_MONEY: flow.movesMoney ? 'YES — a successful call debits or refunds real money' : 'no',
369
+ PARAMS: adapter.literal(literalParameters(flow, request.kind), indent),
370
+ RUNTIME_OVERRIDES: runtimeOverrides(flow, request.language),
371
+ SUCCESS_FIELD: flow.response.successField,
372
+ SUCCESS_VALUE: flow.response.successValue,
373
+ // A flow that declares no response signature names no field. The empty
374
+ // string is what the templates already treat as "no hash arrived", so the
375
+ // generated verification block reads nothing and skips — which is the truth
376
+ // for an unsigned response, rather than a check against an invented name.
377
+ RESPONSE_HASH_FIELD: flow.response.hashField ?? '',
378
+ // Empty for every JazzCash flow, which reports one outcome in one field. A
379
+ // provider that answers a card sale at two levels gets a nested guard here,
380
+ // because a service-level success on its own does not say the card was
381
+ // approved.
382
+ SETTLEMENT_CHECK: settlementGuard(flow, adapter),
383
+ // The line that prints the gateway's own message on success, or none at all
384
+ // where the flow declares no field to read it from. See `successReport`.
385
+ SUCCESS_REPORT: successReport(flow, adapter),
386
+ FRAMEWORK: frameworkLabel(request),
387
+ IPN_PATH,
388
+ };
389
+ }
390
+ function assertKindSuitsFlow(flow, kind) {
391
+ if (kind === 'checkout-redirect' && flow.transport !== 'form-post') {
392
+ throw new JazzCashValidationError(describeTransportMismatch(flow, 'form-post'));
393
+ }
394
+ if (kind === 'rest-client' && flow.transport !== 'rest') {
395
+ throw new JazzCashValidationError(describeTransportMismatch(flow, 'rest'));
396
+ }
397
+ if (kind === 'wallet-linking' && flow.id !== 'wallet-linking-portal') {
398
+ throw new JazzCashValidationError(`"wallet-linking" applies only to the wallet-linking-portal flow, not to ${flow.id}.`);
399
+ }
400
+ // NOTE: the twelve templates hard-code one signature construction — sort by
401
+ // name, join with "&", prepend the salt, HMAC-SHA256, lowercase hex. There is
402
+ // no runtime guard for a second construction because `flowSchema` admits only
403
+ // `hmac-sha256`, so a flow declaring another one cannot be loaded at all. A
404
+ // construction added there MUST either template the hashing helper per scheme
405
+ // or reinstate a refusal here: generated code that computes a confident, wrong
406
+ // digest is pasted straight into a payment integration and fails in a way that
407
+ // reads as a gateway problem.
408
+ }
409
+ function followUp(request) {
410
+ const { flow } = request;
411
+ const steps = [
412
+ 'Set JAZZCASH_MERCHANT_ID, JAZZCASH_PASSWORD and JAZZCASH_INTEGRITY_SALT in the environment. Never hard-code them and never commit them.',
413
+ `The endpoint is identical for sandbox and production. Which environment you reach is decided by the credentials you load, so confirm them before running${flow.movesMoney ? ' — a successful call here moves real money' : ''}.`,
414
+ ];
415
+ if (flow.parameters.some((parameter) => parameter.name === 'pp_ReturnURL')) {
416
+ steps.push('Set JAZZCASH_RETURN_URL to the URL registered under Integration → Credentials. It must match byte for byte, including any trailing slash.');
417
+ }
418
+ if (flow.parameters.some((parameter) => parameter.name === 'pp_MerchantMPIN')) {
419
+ steps.push('Set JAZZCASH_MERCHANT_MPIN, and save the same MPIN in the merchant portal. Refunds fail until it is stored there.');
420
+ }
421
+ if (request.kind === 'ipn-handler') {
422
+ steps.push('Register this endpoint as your IPN URL in the portal and confirm it is reachable from the internet.');
423
+ steps.push('Replace the commented persistence calls with your own order lookup, and keep the handler idempotent.');
424
+ }
425
+ if (request.kind === 'rest-client') {
426
+ steps.push('Replace every value marked TODO with data from your application.');
427
+ if (flow.parameters.some((parameter) => parameter.name === 'pp_Amount')) {
428
+ steps.push(`pp_Amount is in MINOR units: PKR 100.00 is sent as "10000". Convert your rupee total with ${MINOR_UNITS_HELPER[request.language]} in the generated file, which uses exact arithmetic. Never multiply a floating-point value.`);
429
+ }
430
+ }
431
+ steps.push('Implement the Status Inquiry API if you have not already: it is mandatory and is how you resolve an unknown outcome.');
432
+ return steps;
433
+ }
434
+ function envExample(request) {
435
+ const lines = [
436
+ '# JazzCash credentials — from Integration → Credentials in the merchant portal.',
437
+ '# Never commit this file.',
438
+ 'JAZZCASH_MERCHANT_ID=',
439
+ 'JAZZCASH_PASSWORD=',
440
+ 'JAZZCASH_INTEGRITY_SALT=',
441
+ ];
442
+ if (request.flow.parameters.some((parameter) => parameter.name === 'pp_ReturnURL')) {
443
+ lines.push('# Must match the URL registered in the portal, byte for byte.', 'JAZZCASH_RETURN_URL=');
444
+ }
445
+ if (request.flow.parameters.some((parameter) => parameter.name === 'pp_MerchantMPIN')) {
446
+ lines.push('# Also save this MPIN in the merchant portal, or refunds will fail.', 'JAZZCASH_MERCHANT_MPIN=');
447
+ }
448
+ return lines.join('\n');
449
+ }
450
+ /** Generate one artefact for a flow. */
451
+ export function generateCode(request) {
452
+ assertKindSuitsFlow(request.flow, request.kind);
453
+ const adapter = ADAPTERS[request.language];
454
+ const template = loadTemplate(request.language, request.kind);
455
+ const contents = render(template, templateValues(request, adapter));
456
+ return {
457
+ flowId: request.flow.id,
458
+ language: request.language,
459
+ kind: request.kind,
460
+ files: [
461
+ {
462
+ path: adapter.fileName(request.kind, request.flow),
463
+ language: request.language,
464
+ contents,
465
+ },
466
+ ],
467
+ followUp: followUp(request),
468
+ envExample: envExample(request),
469
+ };
470
+ }
471
+ /**
472
+ * The artefact kinds that make sense for a flow.
473
+ *
474
+ * Every shipped transport has a kind, so this is currently total. It returns a
475
+ * list rather than one kind because a transport nothing here can generate for
476
+ * must be able to answer "none" — naming a kind and then refusing it in
477
+ * `assertKindSuitsFlow` sent the caller round in a circle between the two.
478
+ */
479
+ export function availableKinds(flow) {
480
+ if (flow.id === 'wallet-linking-portal') {
481
+ return ['wallet-linking'];
482
+ }
483
+ switch (flow.transport) {
484
+ case 'form-post':
485
+ return ['checkout-redirect'];
486
+ case 'rest':
487
+ return ['rest-client'];
488
+ }
489
+ }
490
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/codegen/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { LanguageAdapter } from '../types.js';
2
+ export declare const nodeAdapter: LanguageAdapter;
3
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../src/codegen/languages/node.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,aAAa,CAAC;AAUjE,eAAO,MAAM,WAAW,EAAE,eA2BzB,CAAC"}
@@ -0,0 +1,32 @@
1
+ /** Escape for a JavaScript single-quoted string. */
2
+ function escapeJs(value) {
3
+ return value.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\r/g, '\\r').replace(/\n/g, '\\n');
4
+ }
5
+ /** JavaScript identifiers may be unquoted; anything else must be quoted. */
6
+ const SAFE_KEY = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
7
+ export const nodeAdapter = {
8
+ id: 'node',
9
+ label: 'Node.js (TypeScript-compatible ESM)',
10
+ escape: escapeJs,
11
+ literal(parameters, indent) {
12
+ return [...parameters.entries()]
13
+ .map(([name, value]) => {
14
+ const key = SAFE_KEY.test(name) ? name : `'${escapeJs(name)}'`;
15
+ return `${indent}${key}: '${escapeJs(value)}',`;
16
+ })
17
+ .join('\n');
18
+ },
19
+ fileName(kind, flow) {
20
+ switch (kind) {
21
+ case 'checkout-redirect':
22
+ return `jazzcash/${flow.product}-checkout.mjs`;
23
+ case 'rest-client':
24
+ return `jazzcash/${flow.id}.mjs`;
25
+ case 'ipn-handler':
26
+ return 'jazzcash/ipn-handler.mjs';
27
+ case 'wallet-linking':
28
+ return 'jazzcash/wallet-linking.mjs';
29
+ }
30
+ },
31
+ };
32
+ //# sourceMappingURL=node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../../../src/codegen/languages/node.ts"],"names":[],"mappings":"AAGA,oDAAoD;AACpD,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACvG,CAAC;AAED,4EAA4E;AAC5E,MAAM,QAAQ,GAAG,4BAA4B,CAAC;AAE9C,MAAM,CAAC,MAAM,WAAW,GAAoB;IAC1C,EAAE,EAAE,MAAM;IACV,KAAK,EAAE,qCAAqC;IAE5C,MAAM,EAAE,QAAQ;IAEhB,OAAO,CAAC,UAAU,EAAE,MAAM;QACxB,OAAO,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;YACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC;YAC/D,OAAO,GAAG,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAClD,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,IAAkB,EAAE,IAAqB;QAChD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,mBAAmB;gBACtB,OAAO,YAAY,IAAI,CAAC,OAAO,eAAe,CAAC;YACjD,KAAK,aAAa;gBAChB,OAAO,YAAY,IAAI,CAAC,EAAE,MAAM,CAAC;YACnC,KAAK,aAAa;gBAChB,OAAO,0BAA0B,CAAC;YACpC,KAAK,gBAAgB;gBACnB,OAAO,6BAA6B,CAAC;QACzC,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { LanguageAdapter } from '../types.js';
2
+ export declare const phpAdapter: LanguageAdapter;
3
+ //# sourceMappingURL=php.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php.d.ts","sourceRoot":"","sources":["../../../src/codegen/languages/php.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,aAAa,CAAC;AAOjE,eAAO,MAAM,UAAU,EAAE,eAwBxB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /** Escape for a PHP single-quoted string: only `\` and `'` are special. */
2
+ function escapePhp(value) {
3
+ return value.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
4
+ }
5
+ export const phpAdapter = {
6
+ id: 'php',
7
+ label: 'PHP',
8
+ escape: escapePhp,
9
+ literal(parameters, indent) {
10
+ return [...parameters.entries()]
11
+ .map(([name, value]) => `${indent}'${escapePhp(name)}' => ${value === '' ? "''" : `'${escapePhp(value)}'`},`)
12
+ .join('\n');
13
+ },
14
+ fileName(kind, flow) {
15
+ switch (kind) {
16
+ case 'checkout-redirect':
17
+ return `jazzcash/${flow.product}-checkout.php`;
18
+ case 'rest-client':
19
+ return `jazzcash/${flow.id}.php`;
20
+ case 'ipn-handler':
21
+ return 'jazzcash/ipn-handler.php';
22
+ case 'wallet-linking':
23
+ return 'jazzcash/wallet-linking.php';
24
+ }
25
+ },
26
+ };
27
+ //# sourceMappingURL=php.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"php.js","sourceRoot":"","sources":["../../../src/codegen/languages/php.ts"],"names":[],"mappings":"AAGA,2EAA2E;AAC3E,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GAAoB;IACzC,EAAE,EAAE,KAAK;IACT,KAAK,EAAE,KAAK;IAEZ,MAAM,EAAE,SAAS;IAEjB,OAAO,CAAC,UAAU,EAAE,MAAM;QACxB,OAAO,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;aAC5G,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,IAAkB,EAAE,IAAqB;QAChD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,mBAAmB;gBACtB,OAAO,YAAY,IAAI,CAAC,OAAO,eAAe,CAAC;YACjD,KAAK,aAAa;gBAChB,OAAO,YAAY,IAAI,CAAC,EAAE,MAAM,CAAC;YACnC,KAAK,aAAa;gBAChB,OAAO,0BAA0B,CAAC;YACpC,KAAK,gBAAgB;gBACnB,OAAO,6BAA6B,CAAC;QACzC,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { LanguageAdapter } from '../types.js';
2
+ export declare const pythonAdapter: LanguageAdapter;
3
+ //# sourceMappingURL=python.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/codegen/languages/python.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAgB,MAAM,aAAa,CAAC;AAOjE,eAAO,MAAM,aAAa,EAAE,eAwB3B,CAAC"}
@@ -0,0 +1,27 @@
1
+ /** Escape for a Python single-quoted string. */
2
+ function escapePython(value) {
3
+ return value.replace(/\\/g, '\\\\').replace(/'/g, "\\'").replace(/\r/g, '\\r').replace(/\n/g, '\\n');
4
+ }
5
+ export const pythonAdapter = {
6
+ id: 'python',
7
+ label: 'Python',
8
+ escape: escapePython,
9
+ literal(parameters, indent) {
10
+ return [...parameters.entries()]
11
+ .map(([name, value]) => `${indent}'${escapePython(name)}': '${escapePython(value)}',`)
12
+ .join('\n');
13
+ },
14
+ fileName(kind, flow) {
15
+ switch (kind) {
16
+ case 'checkout-redirect':
17
+ return `jazzcash/${flow.product}_checkout.py`;
18
+ case 'rest-client':
19
+ return `jazzcash/${flow.id.replace(/[.-]/g, '_')}.py`;
20
+ case 'ipn-handler':
21
+ return 'jazzcash/ipn_handler.py';
22
+ case 'wallet-linking':
23
+ return 'jazzcash/wallet_linking.py';
24
+ }
25
+ },
26
+ };
27
+ //# sourceMappingURL=python.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.js","sourceRoot":"","sources":["../../../src/codegen/languages/python.ts"],"names":[],"mappings":"AAGA,gDAAgD;AAChD,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACvG,CAAC;AAED,MAAM,CAAC,MAAM,aAAa,GAAoB;IAC5C,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,QAAQ;IAEf,MAAM,EAAE,YAAY;IAEpB,OAAO,CAAC,UAAU,EAAE,MAAM;QACxB,OAAO,CAAC,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;aACrF,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,QAAQ,CAAC,IAAkB,EAAE,IAAqB;QAChD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,mBAAmB;gBACtB,OAAO,YAAY,IAAI,CAAC,OAAO,cAAc,CAAC;YAChD,KAAK,aAAa;gBAChB,OAAO,YAAY,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,KAAK,CAAC;YACxD,KAAK,aAAa;gBAChB,OAAO,yBAAyB,CAAC;YACnC,KAAK,gBAAgB;gBACnB,OAAO,4BAA4B,CAAC;QACxC,CAAC;IACH,CAAC;CACF,CAAC"}