cabloy 5.1.122 → 5.1.124

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 (244) hide show
  1. package/.cabloy-version +1 -1
  2. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +13 -3
  3. package/.claude/skills/cabloy-workflow/SKILL.md +6 -0
  4. package/.claude/skills/cabloy-workflow/evals/evals.json +6 -0
  5. package/CHANGELOG.md +24 -0
  6. package/CLAUDE.md +1 -1
  7. package/cabloy-docs/.vitepress/config.mjs +4 -0
  8. package/cabloy-docs/frontend/form-layout-guide.md +29 -7
  9. package/cabloy-docs/fullstack/parallel-worktree-environment.md +87 -0
  10. package/e2e/scripts/e2e.ts +13 -1
  11. package/e2e/scripts/startE2eVona.ts +4 -1
  12. package/e2e/specs/a-commerce/commerce.spec.ts +129 -32
  13. package/package.json +2 -1
  14. package/playwright-report/data/24ac790ec112339c76cfb0c8e2c2539c2f953a0b.zip +0 -0
  15. package/playwright-report/data/2fddcabcdbd0b695061a565acfff243cb3a4f5e3.zip +0 -0
  16. package/playwright-report/data/4738038d9e861d63fd25937c9a3570934786a62f.zip +0 -0
  17. package/playwright-report/data/72f99c7da67c7f6ea53cab7d8681798b70d79a10.md +222 -0
  18. package/playwright-report/data/7b9684a7c793e9798b898f8ff50177b660a7a733.md +222 -0
  19. package/playwright-report/data/8b31595f5f1cc9d23863af51a592e6b90dcbc4ce.zip +0 -0
  20. package/playwright-report/data/95b578407a68806202dda917a61c50c750bd285b.md +222 -0
  21. package/playwright-report/data/ad960b3a58f224f5b4cad04a24067600064ffb7b.md +222 -0
  22. package/playwright-report/index.html +90 -0
  23. package/playwright-report/trace/assets/codeMirrorModule-LEHpjmcn.js +32 -0
  24. package/playwright-report/trace/assets/defaultSettingsView-BNmKHKpQ.js +264 -0
  25. package/playwright-report/trace/assets/urlMatch-BYQrIQwR.js +1 -0
  26. package/playwright-report/trace/codeMirrorModule.DYBRYzYX.css +1 -0
  27. package/playwright-report/trace/codicon.DCmgc-ay.ttf +0 -0
  28. package/playwright-report/trace/defaultSettingsView.CjdS-WJx.css +1 -0
  29. package/playwright-report/trace/index.CzXZzn5A.css +1 -0
  30. package/playwright-report/trace/index.DMMX1gXU.js +2 -0
  31. package/playwright-report/trace/index.html +44 -0
  32. package/playwright-report/trace/manifest.webmanifest +16 -0
  33. package/playwright-report/trace/playwright-logo.svg +9 -0
  34. package/playwright-report/trace/snapshot.html +10 -0
  35. package/playwright-report/trace/snapshot.v8KI4P3m.js +2 -0
  36. package/playwright-report/trace/sw.bundle.js +5 -0
  37. package/playwright-report/trace/uiMode.BZQ54Kgt.css +1 -0
  38. package/playwright-report/trace/uiMode.Ut8wwJNp.js +6 -0
  39. package/playwright-report/trace/uiMode.html +18 -0
  40. package/playwright-report/trace/xtermModule.DYP7pi_n.css +32 -0
  41. package/vona/env/.env +12 -0
  42. package/vona/env/.env.test +7 -0
  43. package/vona/packages-cli/cli/package.json +1 -1
  44. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudBasic/boilerplate/src/dto/{{resourceName}}Create.tsx_ +19 -1
  45. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudBasic/boilerplate/src/dto/{{resourceName}}Update.tsx_ +19 -1
  46. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudBasic/boilerplate/src/dto/{{resourceName}}View.tsx_ +19 -1
  47. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudBasic/snippets/3-en-us.ts +6 -1
  48. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudBasic/snippets/4-zh-cn.ts +6 -1
  49. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudStart/boilerplate/src/dto/{{resourceName}}Create.tsx_ +19 -1
  50. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudStart/boilerplate/src/dto/{{resourceName}}Update.tsx_ +19 -1
  51. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudStart/boilerplate/src/dto/{{resourceName}}View.tsx_ +19 -1
  52. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudStart/snippets/3-en-us.ts +6 -1
  53. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudStart/snippets/4-zh-cn.ts +6 -1
  54. package/vona/packages-cli/cli-set-api/package.json +1 -1
  55. package/vona/pnpm-lock.yaml +255 -12
  56. package/vona/pnpm-workspace.yaml +1 -1
  57. package/vona/src/suite/a-commerce/modules/commerce-payment/package.json +4 -1
  58. package/vona/src/suite/a-commerce/modules/commerce-payment/src/.metadata/index.ts +45 -3
  59. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.index.ts +1 -0
  60. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/meta.version.ts +25 -1
  61. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/payScene.commerceOrder.ts +20 -0
  62. package/vona/src/suite/a-commerce/modules/commerce-payment/src/entity/paymentAttempt.tsx +9 -0
  63. package/vona/src/suite/a-commerce/modules/commerce-payment/src/entity/paymentAudit.tsx +5 -2
  64. package/vona/src/suite/a-commerce/modules/commerce-payment/src/entity/refundAttempt.tsx +6 -0
  65. package/vona/src/suite/a-commerce/modules/commerce-payment/src/index.ts +2 -0
  66. package/vona/src/suite/a-commerce/modules/commerce-payment/src/lib/index.ts +1 -0
  67. package/vona/src/suite/a-commerce/modules/commerce-payment/src/service/commercePayScene.ts +54 -0
  68. package/vona/src/suite/a-commerce/modules/commerce-payment/src/service/paymentAttempt.ts +7 -1
  69. package/vona/src/suite/a-commerce/modules/commerce-payment/src/types/index.ts +1 -0
  70. package/vona/src/suite/a-commerce/modules/commerce-payment/test/paymentAttempt.test.ts +21 -0
  71. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/.metadata/index.ts +30 -0
  72. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/config/locale/en-us.ts +4 -0
  73. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/config/locale/zh-cn.ts +4 -0
  74. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateCreate.tsx +88 -1
  75. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateUpdate.tsx +44 -1
  76. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateView.tsx +72 -1
  77. package/vona/src/suite/a-commerce/modules/commerce-promotion/test/couponTemplateFormLayout.test.ts +121 -0
  78. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/bean/ssrMenu.home.ts +4 -1
  79. package/vona/src/suite/a-commerce/modules/commerce-trade/package.json +4 -1
  80. package/vona/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +0 -21
  81. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/checkoutResult.tsx +3 -0
  82. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/order.ts +79 -0
  83. package/vona/src/suite/a-commerce/modules/commerce-trade/test/orderSnapshot.test.ts +227 -0
  84. package/vona/src/suite/a-commerce/modules/commerce-trade/test/paymentOutcome.test.ts +121 -13
  85. package/vona/src/suite/a-commerce/modules/commerce-trade/test/refundLifecycle.test.ts +312 -0
  86. package/vona/src/suite-vendor/a-pay/modules/a-pay/package.json +76 -0
  87. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/.metadata/index.ts +842 -0
  88. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/.metadata/this.ts +2 -0
  89. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/bean.payProvider.ts +92 -0
  90. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/bean.payScene.ts +105 -0
  91. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.index.ts +28 -0
  92. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.redlock.ts +11 -0
  93. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.version.ts +113 -0
  94. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/queue.outboxDispatch.ts +31 -0
  95. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/schedule.outboxDispatch.ts +11 -0
  96. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/controller/paymentSession.ts +55 -0
  97. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/controller/webhook.ts +47 -0
  98. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/dto/paymentSessionStart.tsx +8 -0
  99. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/dto/paymentSessionView.tsx +69 -0
  100. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/dto/webhookReceipt.tsx +12 -0
  101. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/outboxEvent.tsx +46 -0
  102. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/paymentAudit.tsx +36 -0
  103. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/paymentSession.tsx +72 -0
  104. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/providerOperation.tsx +54 -0
  105. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/refundOperation.tsx +37 -0
  106. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/webhookInbox.tsx +59 -0
  107. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/index.ts +3 -0
  108. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/lib/index.ts +2 -0
  109. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/lib/payProvider.ts +7 -0
  110. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/lib/payScene.ts +7 -0
  111. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/model/outboxEvent.ts +10 -0
  112. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/model/paymentAudit.ts +10 -0
  113. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/model/paymentSession.ts +10 -0
  114. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/model/providerOperation.ts +10 -0
  115. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/model/refundOperation.ts +10 -0
  116. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/model/webhookInbox.ts +10 -0
  117. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/outbox.ts +156 -0
  118. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/paymentSession.ts +278 -0
  119. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/providerOperation.ts +5 -0
  120. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/webhook.ts +127 -0
  121. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/types/index.ts +3 -0
  122. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/types/payProvider.ts +74 -0
  123. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/types/payScene.ts +63 -0
  124. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/types/payment.ts +151 -0
  125. package/vona/src/suite-vendor/a-pay/modules/a-pay/test/outbox.test.ts +209 -0
  126. package/vona/src/suite-vendor/a-pay/modules/a-pay/test/paymentSession.test.ts +153 -0
  127. package/vona/src/suite-vendor/a-pay/modules/a-pay/test/webhook.test.ts +278 -0
  128. package/vona/src/suite-vendor/a-pay/modules/a-pay/tsconfig.build.json +11 -0
  129. package/vona/src/suite-vendor/a-pay/modules/a-pay/tsconfig.json +7 -0
  130. package/vona/src/suite-vendor/a-pay/modules/pay-mock/package.json +55 -0
  131. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/.metadata/index.ts +182 -0
  132. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/.metadata/this.ts +2 -0
  133. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/bean/payProvider.mock.ts +149 -0
  134. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/controller/mockPayment.ts +25 -0
  135. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/dto/mockPaymentComplete.tsx +13 -0
  136. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/dto/mockPaymentReceipt.tsx +16 -0
  137. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/index.ts +3 -0
  138. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/lib/index.ts +1 -0
  139. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/service/payMock.ts +78 -0
  140. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/types/index.ts +10 -0
  141. package/vona/src/suite-vendor/a-pay/modules/pay-mock/test/payMock.test.ts +141 -0
  142. package/vona/src/suite-vendor/a-pay/modules/pay-mock/tsconfig.build.json +11 -0
  143. package/vona/src/suite-vendor/a-pay/modules/pay-mock/tsconfig.json +7 -0
  144. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/package.json +55 -0
  145. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/.metadata/index.ts +62 -0
  146. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/.metadata/this.ts +2 -0
  147. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/bean/payProvider.paypal.ts +91 -0
  148. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/index.ts +3 -0
  149. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/lib/index.ts +1 -0
  150. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/types/index.ts +9 -0
  151. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/tsconfig.build.json +11 -0
  152. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/tsconfig.json +7 -0
  153. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/package.json +55 -0
  154. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/.metadata/index.ts +62 -0
  155. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/.metadata/this.ts +2 -0
  156. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/bean/payProvider.stripe.ts +88 -0
  157. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/index.ts +2 -0
  158. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/types/index.ts +8 -0
  159. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/tsconfig.build.json +11 -0
  160. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/tsconfig.json +7 -0
  161. package/vona/src/suite-vendor/a-pay/package.json +15 -0
  162. package/vona/src/suite-vendor/a-pay/tsconfig.base.json +4 -0
  163. package/vona/src/suite-vendor/a-pay/tsconfig.json +19 -0
  164. package/zova/env/.env +1 -0
  165. package/zova/openapi.config.ts +5 -1
  166. package/zova/package.original.json +1 -1
  167. package/zova/packages-cli/cli/package.json +2 -2
  168. package/zova/packages-cli/cli-set-front/cli/templates/openapi/config/boilerplate/project/openapi.config.ts +5 -1
  169. package/zova/packages-cli/cli-set-front/package.json +1 -1
  170. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.generate.ts +8 -0
  171. package/zova/packages-cli/cli-set-front/src/lib/common/cliCreatePage.ts +7 -24
  172. package/zova/packages-cli/cli-set-front/src/lib/common/utils.ts +10 -1
  173. package/zova/packages-utils/zova-jsx/package.json +2 -2
  174. package/zova/packages-zova/zova/package.json +3 -3
  175. package/zova/packages-zova/zova-core/package.json +1 -1
  176. package/zova/packages-zova/zova-core/src/types/interface/component.ts +5 -0
  177. package/zova/pnpm-lock.yaml +96 -26
  178. package/zova/src/front/config/config/config.cabloyCommerce.ts +1 -1
  179. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/schemas.ts +110 -12
  180. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/types.ts +1292 -160
  181. package/zova/src/suite/a-commerce/modules/commerce-trade/cli/openapi.config.ts +0 -1
  182. package/zova/src/suite/a-commerce/modules/commerce-trade/package.json +4 -1
  183. package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +1 -47
  184. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/schemas.ts +23 -8
  185. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +249 -62
  186. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/checkout/controller.tsx +5 -1
  187. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/payment/controller.tsx +152 -39
  188. package/zova/src/suite/a-commerce/modules/commerce-trade/src/routes.ts +1 -1
  189. package/zova/src/suite-vendor/a-pay/modules/a-pay/cli/openapi.config.ts +9 -0
  190. package/zova/src/suite-vendor/a-pay/modules/a-pay/package.json +53 -0
  191. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/.metadata/component/paymentNextAction.ts +31 -0
  192. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/.metadata/index.ts +217 -0
  193. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/.metadata/this.ts +2 -0
  194. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/api/openapi/baseURL.ts +5 -0
  195. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/api/openapi/index.ts +3 -0
  196. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/api/openapi/schemas.ts +584 -0
  197. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/api/openapi/types.ts +9324 -0
  198. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/api/paymentSession.ts +52 -0
  199. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/apiSchema/paymentSession.ts +20 -0
  200. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/component/paymentNextAction/controller.tsx +76 -0
  201. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/index.ts +3 -0
  202. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/lib/index.ts +1 -0
  203. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/model/paymentSession.ts +32 -0
  204. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/service/paymentCoordinator.ts +13 -0
  205. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/types/index.ts +1 -0
  206. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/types/payment.ts +25 -0
  207. package/zova/src/suite-vendor/a-pay/modules/a-pay/tsconfig.build.json +13 -0
  208. package/zova/src/suite-vendor/a-pay/modules/a-pay/tsconfig.json +5 -0
  209. package/zova/src/suite-vendor/a-pay/modules/pay-mock/cli/openapi.config.ts +9 -0
  210. package/zova/src/suite-vendor/a-pay/modules/pay-mock/package.json +53 -0
  211. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/.metadata/index.ts +140 -0
  212. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/.metadata/this.ts +2 -0
  213. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/api/openapi/baseURL.ts +5 -0
  214. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/api/openapi/index.ts +3 -0
  215. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/api/openapi/schemas.ts +584 -0
  216. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/api/openapi/types.ts +9324 -0
  217. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/api/payMockPayment.ts +34 -0
  218. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/apiSchema/payMockPayment.ts +13 -0
  219. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/index.ts +1 -0
  220. package/zova/src/suite-vendor/a-pay/modules/pay-mock/src/model/payMockPayment.ts +20 -0
  221. package/zova/src/suite-vendor/a-pay/modules/pay-mock/tsconfig.build.json +13 -0
  222. package/zova/src/suite-vendor/a-pay/modules/pay-mock/tsconfig.json +5 -0
  223. package/zova/src/suite-vendor/a-pay/modules/pay-paypal/package.json +52 -0
  224. package/zova/src/suite-vendor/a-pay/modules/pay-paypal/src/.metadata/index.ts +26 -0
  225. package/zova/src/suite-vendor/a-pay/modules/pay-paypal/src/.metadata/this.ts +2 -0
  226. package/zova/src/suite-vendor/a-pay/modules/pay-paypal/src/index.ts +1 -0
  227. package/zova/src/suite-vendor/a-pay/modules/pay-paypal/tsconfig.build.json +13 -0
  228. package/zova/src/suite-vendor/a-pay/modules/pay-paypal/tsconfig.json +5 -0
  229. package/zova/src/suite-vendor/a-pay/modules/pay-stripe/package.json +52 -0
  230. package/zova/src/suite-vendor/a-pay/modules/pay-stripe/src/.metadata/index.ts +26 -0
  231. package/zova/src/suite-vendor/a-pay/modules/pay-stripe/src/.metadata/this.ts +2 -0
  232. package/zova/src/suite-vendor/a-pay/modules/pay-stripe/src/index.ts +1 -0
  233. package/zova/src/suite-vendor/a-pay/modules/pay-stripe/tsconfig.build.json +13 -0
  234. package/zova/src/suite-vendor/a-pay/modules/pay-stripe/tsconfig.json +5 -0
  235. package/zova/src/suite-vendor/a-pay/package.json +15 -0
  236. package/zova/src/suite-vendor/a-pay/tsconfig.base.json +4 -0
  237. package/zova/src/suite-vendor/a-pay/tsconfig.json +4 -0
  238. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  239. package/zova/src/suite-vendor/a-zova/package.json +2 -2
  240. package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/payment.ts +0 -23
  241. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/commerceTradePayment.ts +0 -36
  242. package/zova/src/suite/a-commerce/modules/commerce-trade/src/apiSchema/commerceTradePayment.ts +0 -13
  243. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/payment.ts +0 -25
  244. /package/vona/patches/{zova-core@5.1.79.patch → zova-core@5.1.81.patch} +0 -0
@@ -1,48 +1,113 @@
1
+ import type { ModelPaymentSession } from 'zova-module-a-pay';
2
+ import type { ModelPayMockPayment } from 'zova-module-pay-mock';
3
+
1
4
  import { z } from 'zod';
2
5
  import { BeanControllerPageBase, Use } from 'zova';
3
6
  import { Controller } from 'zova-module-a-bean';
7
+ import { $QueryEnsureLoaded } from 'zova-module-a-model';
8
+ import { ZPaymentNextAction } from 'zova-module-a-pay';
4
9
  import { ZPage } from 'zova-module-home-base';
5
10
 
6
- import { ModelPayment } from '../../model/payment.js';
11
+ import { ModelOrderMine } from '../../model/orderMine.js';
7
12
 
8
13
  export const ControllerPagePaymentSchemaParams = z.object({
9
- attemptId: z.string(),
14
+ paymentSessionId: z.string(),
15
+ orderId: z.string(),
10
16
  locale: z.string().optional(),
11
17
  });
12
18
  export const ControllerPagePaymentSchemaQuery = z.object({});
13
19
 
20
+ type TypeMockPaymentOutcome = 'succeeded' | 'failed' | 'cancelled';
21
+
14
22
  @Controller()
15
23
  export class ControllerPagePayment extends BeanControllerPageBase {
24
+ @Use({ beanFullName: 'a-pay.model.paymentSession' })
25
+ $$modelPaymentSession: ModelPaymentSession;
26
+
27
+ @Use({ beanFullName: 'pay-mock.model.payMockPayment' })
28
+ $$modelPayMockPayment: ModelPayMockPayment;
29
+
16
30
  @Use()
17
- $$modelPayment: ModelPayment;
31
+ $$modelOrderMine: ModelOrderMine;
18
32
 
33
+ paymentSessionId?: string;
34
+ orderId?: string;
19
35
  submitting = false;
20
- idempotencyKeys: Partial<Record<'succeeded' | 'failed' | 'cancelled', string>> = {};
36
+ waitingForOrder = false;
37
+ message?: string;
38
+
39
+ protected async __init__() {
40
+ this.paymentSessionId = this.$computed(() => this.$params.paymentSessionId);
41
+ this.orderId = this.$computed(() => this.$params.orderId);
42
+ if (this.$ssr.isRuntimeSsrHydrated) {
43
+ await $QueryEnsureLoaded(() => this.queryPaymentSession);
44
+ await $QueryEnsureLoaded(() => this.queryOrder);
45
+ }
46
+ }
21
47
 
22
- get attemptId() {
23
- return this.$params.attemptId;
48
+ get queryPaymentSession() {
49
+ return this.$$modelPaymentSession.view(this.paymentSessionId!);
50
+ }
51
+
52
+ get queryOrder() {
53
+ return this.$$modelOrderMine.viewMine(this.orderId!);
54
+ }
55
+
56
+ async start() {
57
+ if (!this.paymentSessionId || this.submitting) return;
58
+ this.submitting = true;
59
+ this.message = undefined;
60
+ try {
61
+ await this.$$modelPaymentSession.start(this.paymentSessionId).mutateAsync();
62
+ await this.queryPaymentSession?.refetch();
63
+ } catch (error: any) {
64
+ this.message = error.message;
65
+ } finally {
66
+ this.submitting = false;
67
+ }
24
68
  }
25
69
 
26
- async settle(outcome: 'succeeded' | 'failed' | 'cancelled') {
27
- if (this.submitting) return;
70
+ async settle(outcome: TypeMockPaymentOutcome) {
71
+ if (!this.paymentSessionId || this.submitting) return;
28
72
  this.submitting = true;
73
+ this.message = undefined;
29
74
  try {
30
- const idempotencyKey =
31
- this.idempotencyKeys[outcome] ?? `${Date.now()}-${Math.random().toString(36).slice(2, 12)}`;
32
- this.idempotencyKeys[outcome] = idempotencyKey;
33
- const result = await this.$$modelPayment.outcome().mutateAsync({
34
- attemptId: this.attemptId,
35
- body: { outcome, idempotencyKey },
36
- });
37
- this.$router.push({
38
- name: 'commerce-trade:order',
39
- params: { id: String(result.orderId) },
40
- });
75
+ await this.$$modelPayMockPayment.complete(this.paymentSessionId).mutateAsync({ outcome });
76
+ await this._waitForSettlement(outcome);
77
+ } catch (error: any) {
78
+ this.message = error.message;
41
79
  } finally {
42
80
  this.submitting = false;
43
81
  }
44
82
  }
45
83
 
84
+ private async _waitForSettlement(outcome: TypeMockPaymentOutcome) {
85
+ this.waitingForOrder = true;
86
+ const terminalSessionState = outcome;
87
+ const terminalOrderState = outcome === 'succeeded' ? 'paid' : 'cancelled';
88
+ try {
89
+ for (let attempt = 0; attempt < 60; attempt++) {
90
+ const session = await this.queryPaymentSession?.refetch();
91
+ const order = await this.scope.api.commerceTradeOrder.viewMine({
92
+ params: { id: this.orderId! },
93
+ });
94
+ if (session?.data?.state === terminalSessionState && order?.state === terminalOrderState) {
95
+ await this.queryOrder?.refetch();
96
+ await this.$router.push({
97
+ name: 'commerce-trade:order',
98
+ params: { id: this.orderId, locale: this.$params.locale },
99
+ });
100
+ return;
101
+ }
102
+ await new Promise(resolve => setTimeout(resolve, 500));
103
+ }
104
+ this.message =
105
+ 'Payment confirmation is still pending. Open the order to check its latest status.';
106
+ } finally {
107
+ this.waitingForOrder = false;
108
+ }
109
+ }
110
+
46
111
  protected render() {
47
112
  if (!this.$ssr.isRuntimeSsrHydrated) {
48
113
  return (
@@ -51,36 +116,84 @@ export class ControllerPagePayment extends BeanControllerPageBase {
51
116
  </ZPage>
52
117
  );
53
118
  }
119
+ const session = this.queryPaymentSession?.data;
120
+ const isMockSession = session?.providerName === 'pay-mock:mock';
121
+ const isCreated = session?.state === 'created';
122
+ const isActionable = session?.state === 'requires_action';
54
123
  return (
55
124
  <ZPage>
56
125
  <section class="mx-auto max-w-xl p-6">
57
- <h1 class="text-3xl font-semibold">Mock payment</h1>
126
+ <h1 class="text-3xl font-semibold">Payment</h1>
58
127
  <p class="mt-3 text-base-content/70">
59
- Choose a server-authoritative mock payment outcome for this order.
128
+ Payment status is verified before Commerce updates the order.
60
129
  </p>
61
- <div class="mt-6 flex flex-wrap gap-3">
130
+ {isCreated && (
62
131
  <button
63
- class="btn btn-primary"
132
+ class="btn btn-primary mt-6"
64
133
  disabled={this.submitting}
65
- onClick={() => this.settle('succeeded')}
134
+ onClick={() => this.start()}
66
135
  >
67
- Payment succeeded
136
+ Start payment
68
137
  </button>
69
- <button
70
- class="btn btn-outline"
138
+ )}
139
+ {!isCreated && !this.waitingForOrder && (
140
+ <ZPaymentNextAction
141
+ action={session?.nextAction}
71
142
  disabled={this.submitting}
72
- onClick={() => this.settle('failed')}
73
- >
74
- Payment failed
75
- </button>
76
- <button
77
- class="btn btn-error btn-outline"
78
- disabled={this.submitting}
79
- onClick={() => this.settle('cancelled')}
80
- >
81
- Cancel payment
82
- </button>
83
- </div>
143
+ onRefresh={async () => {
144
+ await this.queryPaymentSession?.refetch();
145
+ }}
146
+ />
147
+ )}
148
+ {isMockSession && isActionable && (
149
+ <section class="mt-6 rounded border border-dashed border-base-300 p-4">
150
+ <h2 class="font-semibold">Mock payment simulator</h2>
151
+ <p class="mt-1 text-sm text-base-content/70">
152
+ Available only when the server enables the development/test mock provider.
153
+ </p>
154
+ <div class="mt-3 flex flex-wrap gap-3">
155
+ <button
156
+ class="btn btn-primary"
157
+ disabled={this.submitting || this.waitingForOrder}
158
+ onClick={() => this.settle('succeeded')}
159
+ >
160
+ Payment succeeded
161
+ </button>
162
+ <button
163
+ class="btn btn-outline"
164
+ disabled={this.submitting || this.waitingForOrder}
165
+ onClick={() => this.settle('failed')}
166
+ >
167
+ Payment failed
168
+ </button>
169
+ <button
170
+ class="btn btn-error btn-outline"
171
+ disabled={this.submitting || this.waitingForOrder}
172
+ onClick={() => this.settle('cancelled')}
173
+ >
174
+ Cancel payment
175
+ </button>
176
+ </div>
177
+ </section>
178
+ )}
179
+ {this.waitingForOrder && (
180
+ <p class="mt-6 text-base-content/70" aria-live="polite">
181
+ Waiting for verified provider confirmation and order settlement…
182
+ </p>
183
+ )}
184
+ {session && !isCreated && !isActionable && !this.waitingForOrder && (
185
+ <p class="mt-6 text-base-content/70">Payment session state: {session.state}</p>
186
+ )}
187
+ {this.message && (
188
+ <div class="alert alert-error mt-6" role="alert">
189
+ <span>{this.message}</span>
190
+ </div>
191
+ )}
192
+ {this.queryPaymentSession?.error && (
193
+ <div class="alert alert-error mt-6" role="alert">
194
+ <span>{this.queryPaymentSession.error.message}</span>
195
+ </div>
196
+ )}
84
197
  </section>
85
198
  </ZPage>
86
199
  );
@@ -21,7 +21,7 @@ export const routes: IModuleRoute[] = [
21
21
  },
22
22
  {
23
23
  name: 'payment',
24
- path: 'payment/:attemptId/:locale?',
24
+ path: 'payment/:paymentSessionId/:orderId/:locale?',
25
25
  component: ZPagePayment,
26
26
  meta: { locale: true, requiresAuth: true },
27
27
  },
@@ -0,0 +1,9 @@
1
+ import type { ZovaOpenapiConfigModule } from 'zova-openapi';
2
+
3
+ export default function (): ZovaOpenapiConfigModule {
4
+ return {
5
+ operations: {
6
+ match: ['PaymentSession_start', 'PaymentSession_view'],
7
+ },
8
+ };
9
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "zova-module-a-pay",
3
+ "version": "5.0.2",
4
+ "description": "",
5
+ "keywords": [
6
+ "Zova Module"
7
+ ],
8
+ "author": "",
9
+ "files": [
10
+ "mock",
11
+ "dist",
12
+ "src",
13
+ "icons",
14
+ "cli",
15
+ "assets"
16
+ ],
17
+ "type": "module",
18
+ "exports": {
19
+ ".": {
20
+ "types": [
21
+ "./src/index.ts",
22
+ "./dist/index.d.ts"
23
+ ],
24
+ "import": "./src/index.ts",
25
+ "default": "./dist/index.js"
26
+ },
27
+ "./*": "./*"
28
+ },
29
+ "scripts": {
30
+ "clean": "rimraf dist tsconfig.build.tsbuildinfo",
31
+ "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
+ "prepublishOnly": "npm run tsc:publish",
33
+ "prepack": "clean-package",
34
+ "postpack": "clean-package restore"
35
+ },
36
+ "dependencies": {},
37
+ "devDependencies": {
38
+ "clean-package": "^2.2.0",
39
+ "rimraf": "^6.1.3"
40
+ },
41
+ "clean-package": {
42
+ "indent": 2,
43
+ "replace": {
44
+ "exports.\\..types": "./dist/index.d.ts"
45
+ },
46
+ "remove": [
47
+ "clean-package",
48
+ "devDependencies",
49
+ "exports.\\..import"
50
+ ]
51
+ },
52
+ "title": "a-pay"
53
+ }
@@ -0,0 +1,31 @@
1
+ import type { TypeControllerInnerProps } from 'zova';
2
+
3
+ import { defineComponent } from 'vue';
4
+ import { prepareComponentOptions, useController } from 'zova';
5
+
6
+ import type { ControllerPaymentNextActionProps } from '../../component/paymentNextAction/controller.jsx';
7
+
8
+ import { ControllerPaymentNextAction } from '../../component/paymentNextAction/controller.jsx';
9
+ export type ZPaymentNextActionProps = {
10
+ controllerRef?: (ref: ControllerPaymentNextAction) => void;
11
+ } & ControllerPaymentNextActionProps;
12
+
13
+ type ControllerInnerProps = TypeControllerInnerProps<
14
+ ControllerPaymentNextActionProps,
15
+ keyof typeof ControllerPaymentNextAction.$propsDefault
16
+ >;
17
+ declare module 'zova-module-a-pay' {
18
+ export interface ControllerPaymentNextAction {
19
+ $props: ControllerInnerProps;
20
+ }
21
+ }
22
+
23
+ export const ZPaymentNextAction = defineComponent((_props: ZPaymentNextActionProps) => {
24
+ useController(ControllerPaymentNextAction, undefined, undefined);
25
+ return () => {};
26
+ }, prepareComponentOptions());
27
+ declare module 'zova-module-a-bean' {
28
+ export interface IVonaComponentRecord {
29
+ 'a-pay:paymentNextAction': ControllerPaymentNextActionProps;
30
+ }
31
+ }
@@ -0,0 +1,217 @@
1
+ // eslint-disable
2
+ /** model: begin */
3
+ export * from '../model/paymentSession.js';
4
+ import { IModelOptionsPaymentSession } from '../model/paymentSession.js';
5
+ import 'zova-module-a-model';
6
+ declare module 'zova-module-a-model' {
7
+
8
+ export interface IModelRecord {
9
+ 'a-pay:paymentSession': IModelOptionsPaymentSession;
10
+ }
11
+
12
+
13
+ }
14
+ declare module 'zova-module-a-pay' {
15
+
16
+ export interface ModelPaymentSession {
17
+ /** @internal */
18
+ get scope(): ScopeModuleAPay;
19
+ }
20
+
21
+ export interface ModelPaymentSession {
22
+ get $beanFullName(): 'a-pay.model.paymentSession';
23
+ get $onionName(): 'a-pay:paymentSession';
24
+ get $onionOptions(): IModelOptionsPaymentSession;
25
+ }
26
+ }
27
+ /** model: end */
28
+ /** model: begin */
29
+ import { ModelPaymentSession } from '../model/paymentSession.js';
30
+ import 'zova';
31
+ declare module 'zova' {
32
+ export interface IBeanRecordGeneral {
33
+ 'a-pay.model.paymentSession': ModelPaymentSession;
34
+ }
35
+ }
36
+ /** model: end */
37
+ /** api: begin */
38
+ export * from '../api/paymentSession.js';
39
+
40
+ import 'zova';
41
+ declare module 'zova' {
42
+
43
+
44
+ }
45
+ declare module 'zova-module-a-pay' {
46
+
47
+ export interface ApiPaymentSession {
48
+ /** @internal */
49
+ get scope(): ScopeModuleAPay;
50
+ }
51
+
52
+ export interface ApiPaymentSession {
53
+ get $beanFullName(): 'a-pay.api.paymentSession';
54
+ get $onionName(): 'a-pay:paymentSession';
55
+
56
+ }
57
+ }
58
+ /** api: end */
59
+ /** api: begin */
60
+ import { ApiPaymentSession } from '../api/paymentSession.js';
61
+ export interface IModuleApi {
62
+ 'paymentSession': ApiPaymentSession;
63
+ }
64
+ /** api: end */
65
+ /** api: begin */
66
+
67
+ import 'zova';
68
+ declare module 'zova' {
69
+ export interface IBeanRecordGeneral {
70
+ 'a-pay.api.paymentSession': ApiPaymentSession;
71
+ }
72
+ }
73
+ /** api: end */
74
+ /** openapi: begin */
75
+ export * from '../api/openapi/index.js';
76
+ /** openapi: end */
77
+ /** apiSchema: begin */
78
+ export * from '../apiSchema/paymentSession.js';
79
+
80
+ import 'zova';
81
+ declare module 'zova' {
82
+
83
+
84
+ }
85
+ declare module 'zova-module-a-pay' {
86
+
87
+ export interface ApiSchemaPaymentSession {
88
+ /** @internal */
89
+ get scope(): ScopeModuleAPay;
90
+ }
91
+
92
+ export interface ApiSchemaPaymentSession {
93
+ get $beanFullName(): 'a-pay.apiSchema.paymentSession';
94
+ get $onionName(): 'a-pay:paymentSession';
95
+
96
+ }
97
+ }
98
+ /** apiSchema: end */
99
+ /** apiSchema: begin */
100
+ import { ApiSchemaPaymentSession } from '../apiSchema/paymentSession.js';
101
+ export interface IModuleApiSchema {
102
+ 'paymentSession': ApiSchemaPaymentSession;
103
+ }
104
+ /** apiSchema: end */
105
+ /** apiSchema: begin */
106
+
107
+ import 'zova';
108
+ declare module 'zova' {
109
+ export interface IBeanRecordGeneral {
110
+ 'a-pay.apiSchema.paymentSession': ApiSchemaPaymentSession;
111
+ }
112
+ }
113
+ /** apiSchema: end */
114
+ /** service: begin */
115
+ export * from '../service/paymentCoordinator.js';
116
+
117
+ import 'zova-module-a-bean';
118
+ declare module 'zova-module-a-bean' {
119
+
120
+ export interface IServiceRecord {
121
+ 'a-pay:paymentCoordinator': never;
122
+ }
123
+
124
+
125
+ }
126
+ declare module 'zova-module-a-pay' {
127
+
128
+ export interface ServicePaymentCoordinator {
129
+ /** @internal */
130
+ get scope(): ScopeModuleAPay;
131
+ }
132
+
133
+ export interface ServicePaymentCoordinator {
134
+ get $beanFullName(): 'a-pay.service.paymentCoordinator';
135
+ get $onionName(): 'a-pay:paymentCoordinator';
136
+
137
+ }
138
+ }
139
+ /** service: end */
140
+ /** service: begin */
141
+ import { ServicePaymentCoordinator } from '../service/paymentCoordinator.js';
142
+ import 'zova';
143
+ declare module 'zova' {
144
+ export interface IBeanRecordGeneral {
145
+ 'a-pay.service.paymentCoordinator': ServicePaymentCoordinator;
146
+ }
147
+ }
148
+ /** service: end */
149
+ /** controller: begin */
150
+ export * from '../component/paymentNextAction/controller.jsx';
151
+
152
+ import 'zova';
153
+ declare module 'zova' {
154
+
155
+
156
+ }
157
+ declare module 'zova-module-a-pay' {
158
+
159
+ export interface ControllerPaymentNextAction {
160
+ /** @internal */
161
+ get scope(): ScopeModuleAPay;
162
+ }
163
+ }
164
+ /** controller: end */
165
+ /** controller: begin */
166
+ import { ControllerPaymentNextAction } from '../component/paymentNextAction/controller.jsx';
167
+ import 'zova';
168
+ declare module 'zova' {
169
+ export interface IBeanRecordLocal {
170
+ 'a-pay.controller.paymentNextAction': ControllerPaymentNextAction;
171
+ }
172
+ }
173
+ /** controller: end */
174
+
175
+ /** components: begin */
176
+ export * from './component/paymentNextAction.js';
177
+ import { ZPaymentNextAction } from './component/paymentNextAction.js';
178
+ export const components = {
179
+ 'paymentNextAction': ZPaymentNextAction,
180
+ };
181
+ import 'zova';
182
+ declare module 'zova' {
183
+ export interface IComponentRecord {
184
+ 'a-pay:paymentNextAction': ControllerPaymentNextAction;
185
+ }
186
+ export interface IZovaComponentRecord {
187
+ 'a-pay:paymentNextAction': typeof ZPaymentNextAction;
188
+ }
189
+ }
190
+ /** components: end */
191
+ /** scope: begin */
192
+ import { BeanScopeBase, type BeanScopeUtil } from 'zova';
193
+ import { Scope } from 'zova-module-a-bean';
194
+
195
+ @Scope()
196
+ export class ScopeModuleAPay extends BeanScopeBase {}
197
+
198
+ export interface ScopeModuleAPay {
199
+ util: BeanScopeUtil;
200
+ api: IModuleApi;
201
+ apiSchema: IModuleApiSchema;
202
+ }
203
+
204
+ import 'zova';
205
+ declare module 'zova' {
206
+ export interface IBeanScopeRecord {
207
+ 'a-pay': ScopeModuleAPay;
208
+ }
209
+
210
+
211
+
212
+
213
+
214
+
215
+ }
216
+
217
+ /** scope: end */
@@ -0,0 +1,2 @@
1
+ export const __ThisModule__ = 'a-pay';
2
+ export { ScopeModuleAPay as ScopeModule } from './index.js';
@@ -0,0 +1,5 @@
1
+ import type { ZovaSys } from 'zova';
2
+
3
+ export const OpenApiBaseURL = (sys: ZovaSys) => {
4
+ return sys.util.getOpenApiBaseURL('OPENAPI_BASE_URL_A_PAY');
5
+ };
@@ -0,0 +1,3 @@
1
+ export * from './baseURL.js';
2
+ export * from './schemas.js';
3
+ export * from './types.js';