dana-python 1.1.7__tar.gz → 1.1.9__tar.gz

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 (225) hide show
  1. {dana_python-1.1.7/dana_python.egg-info → dana_python-1.1.9}/PKG-INFO +1 -1
  2. {dana_python-1.1.7 → dana_python-1.1.9}/dana/webhook/webhook.py +54 -9
  3. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/util.py +1 -1
  4. {dana_python-1.1.7 → dana_python-1.1.9/dana_python.egg-info}/PKG-INFO +1 -1
  5. {dana_python-1.1.7 → dana_python-1.1.9}/pyproject.toml +1 -1
  6. {dana_python-1.1.7 → dana_python-1.1.9}/tests/test_webhook.py +46 -1
  7. {dana_python-1.1.7 → dana_python-1.1.9}/LICENSE +0 -0
  8. {dana_python-1.1.7 → dana_python-1.1.9}/README.md +0 -0
  9. {dana_python-1.1.7 → dana_python-1.1.9}/dana/__init__.py +0 -0
  10. {dana_python-1.1.7 → dana_python-1.1.9}/dana/api_client.py +0 -0
  11. {dana_python-1.1.7 → dana_python-1.1.9}/dana/api_response.py +0 -0
  12. {dana_python-1.1.7 → dana_python-1.1.9}/dana/base/__init__.py +0 -0
  13. {dana_python-1.1.7 → dana_python-1.1.9}/dana/base/configuration.py +0 -0
  14. {dana_python-1.1.7 → dana_python-1.1.9}/dana/base/model.py +0 -0
  15. {dana_python-1.1.7 → dana_python-1.1.9}/dana/base/types.py +0 -0
  16. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/__init__.py +0 -0
  17. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/__init__.py +0 -0
  18. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/api/__init__.py +0 -0
  19. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/api/disbursement_api.py +0 -0
  20. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/enum.py +0 -0
  21. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/__init__.py +0 -0
  22. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/bank_account_inquiry_request.py +0 -0
  23. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/bank_account_inquiry_request_additional_info.py +0 -0
  24. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/bank_account_inquiry_response.py +0 -0
  25. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/bank_account_inquiry_response_additional_info.py +0 -0
  26. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/dana_account_inquiry_request.py +0 -0
  27. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/dana_account_inquiry_request_additional_info.py +0 -0
  28. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/dana_account_inquiry_response.py +0 -0
  29. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/money.py +0 -0
  30. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/transfer_to_bank_inquiry_status_request.py +0 -0
  31. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/transfer_to_bank_inquiry_status_response.py +0 -0
  32. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/transfer_to_bank_request.py +0 -0
  33. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/transfer_to_bank_request_additional_info.py +0 -0
  34. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/transfer_to_bank_response.py +0 -0
  35. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/transfer_to_dana_inquiry_status_request.py +0 -0
  36. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/transfer_to_dana_inquiry_status_response.py +0 -0
  37. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/transfer_to_dana_request.py +0 -0
  38. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/transfer_to_dana_request_additional_info.py +0 -0
  39. {dana_python-1.1.7 → dana_python-1.1.9}/dana/disbursement/v1/models/transfer_to_dana_response.py +0 -0
  40. {dana_python-1.1.7 → dana_python-1.1.9}/dana/exceptions.py +0 -0
  41. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/__init__.py +0 -0
  42. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/__init__.py +0 -0
  43. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/api/__init__.py +0 -0
  44. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/api/merchant_management_api.py +0 -0
  45. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/enum.py +0 -0
  46. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/__init__.py +0 -0
  47. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/address_info.py +0 -0
  48. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/business_docs.py +0 -0
  49. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/create_division_request.py +0 -0
  50. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/create_division_request_ext_info.py +0 -0
  51. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/create_division_response.py +0 -0
  52. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/create_division_response_response.py +0 -0
  53. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/create_division_response_response_body.py +0 -0
  54. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/create_division_response_response_head.py +0 -0
  55. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/create_shop_request.py +0 -0
  56. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/create_shop_response.py +0 -0
  57. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/create_shop_response_response.py +0 -0
  58. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/create_shop_response_response_body.py +0 -0
  59. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/create_shop_response_response_head.py +0 -0
  60. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/division_resource_info.py +0 -0
  61. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/merchant_resource_information.py +0 -0
  62. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/mobile_no_info.py +0 -0
  63. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/pic_info.py +0 -0
  64. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_division_request.py +0 -0
  65. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_division_response.py +0 -0
  66. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_division_response_response.py +0 -0
  67. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_division_response_response_body.py +0 -0
  68. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_division_response_response_head.py +0 -0
  69. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_merchant_resource_request.py +0 -0
  70. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_merchant_resource_response.py +0 -0
  71. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_merchant_resource_response_response.py +0 -0
  72. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_merchant_resource_response_response_body.py +0 -0
  73. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_merchant_resource_response_response_head.py +0 -0
  74. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_shop_request.py +0 -0
  75. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_shop_response.py +0 -0
  76. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_shop_response_response.py +0 -0
  77. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_shop_response_response_body.py +0 -0
  78. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/query_shop_response_response_head.py +0 -0
  79. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/result_info.py +0 -0
  80. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/shop_resource_info.py +0 -0
  81. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/update_division_request.py +0 -0
  82. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/update_division_response.py +0 -0
  83. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/update_division_response_response.py +0 -0
  84. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/update_division_response_response_body.py +0 -0
  85. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/update_division_response_response_head.py +0 -0
  86. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/update_shop_request.py +0 -0
  87. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/update_shop_response.py +0 -0
  88. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/update_shop_response_response.py +0 -0
  89. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/update_shop_response_response_head.py +0 -0
  90. {dana_python-1.1.7 → dana_python-1.1.9}/dana/merchant_management/v1/models/user_name.py +0 -0
  91. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/__init__.py +0 -0
  92. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/__init__.py +0 -0
  93. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/api/__init__.py +0 -0
  94. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/api/payment_gateway_api.py +0 -0
  95. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/enum.py +0 -0
  96. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/__init__.py +0 -0
  97. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/actor_context.py +0 -0
  98. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/amount_detail.py +0 -0
  99. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/audit_info.py +0 -0
  100. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/buyer.py +0 -0
  101. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/cancel_order_request.py +0 -0
  102. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/cancel_order_response.py +0 -0
  103. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/consult_pay_payment_info.py +0 -0
  104. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/consult_pay_request.py +0 -0
  105. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/consult_pay_request_additional_info.py +0 -0
  106. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/consult_pay_response.py +0 -0
  107. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/create_order_by_api_additional_info.py +0 -0
  108. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/create_order_by_api_request.py +0 -0
  109. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/create_order_by_redirect_additional_info.py +0 -0
  110. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/create_order_by_redirect_request.py +0 -0
  111. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/create_order_response.py +0 -0
  112. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/create_order_response_additional_info.py +0 -0
  113. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/env_info.py +0 -0
  114. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/goods.py +0 -0
  115. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/money.py +0 -0
  116. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/order_api_object.py +0 -0
  117. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/order_redirect_object.py +0 -0
  118. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/pay_option_additional_info.py +0 -0
  119. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/pay_option_detail.py +0 -0
  120. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/pay_option_info.py +0 -0
  121. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/payment_view.py +0 -0
  122. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/promo_info.py +0 -0
  123. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/query_payment_request.py +0 -0
  124. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/query_payment_response.py +0 -0
  125. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/query_payment_response_additional_info.py +0 -0
  126. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/refund_option_bill.py +0 -0
  127. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/refund_order_request.py +0 -0
  128. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/refund_order_request_additional_info.py +0 -0
  129. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/refund_order_response.py +0 -0
  130. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/seller.py +0 -0
  131. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/shipping_info.py +0 -0
  132. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/status_detail.py +0 -0
  133. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/time_detail.py +0 -0
  134. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/url_param.py +0 -0
  135. {dana_python-1.1.7 → dana_python-1.1.9}/dana/payment_gateway/v1/models/virtual_account_info.py +0 -0
  136. {dana_python-1.1.7 → dana_python-1.1.9}/dana/rest.py +0 -0
  137. {dana_python-1.1.7 → dana_python-1.1.9}/dana/utils/models.py +0 -0
  138. {dana_python-1.1.7 → dana_python-1.1.9}/dana/utils/open_api_configuration.py +0 -0
  139. {dana_python-1.1.7 → dana_python-1.1.9}/dana/utils/open_api_header.py +0 -0
  140. {dana_python-1.1.7 → dana_python-1.1.9}/dana/utils/script.py +0 -0
  141. {dana_python-1.1.7 → dana_python-1.1.9}/dana/utils/snap_configuration.py +0 -0
  142. {dana_python-1.1.7 → dana_python-1.1.9}/dana/utils/snap_header.py +0 -0
  143. {dana_python-1.1.7 → dana_python-1.1.9}/dana/utils/url.py +0 -0
  144. {dana_python-1.1.7 → dana_python-1.1.9}/dana/webhook/__init__.py +0 -0
  145. {dana_python-1.1.7 → dana_python-1.1.9}/dana/webhook/finish_notify_payment_info.py +0 -0
  146. {dana_python-1.1.7 → dana_python-1.1.9}/dana/webhook/finish_notify_request.py +0 -0
  147. {dana_python-1.1.7 → dana_python-1.1.9}/dana/webhook/finish_notify_request_additional_info.py +0 -0
  148. {dana_python-1.1.7 → dana_python-1.1.9}/dana/webhook/finish_notify_response.py +0 -0
  149. {dana_python-1.1.7 → dana_python-1.1.9}/dana/webhook/money.py +0 -0
  150. {dana_python-1.1.7 → dana_python-1.1.9}/dana/webhook/pay_option_info.py +0 -0
  151. {dana_python-1.1.7 → dana_python-1.1.9}/dana/webhook/shop_info.py +0 -0
  152. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/__init__.py +0 -0
  153. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/__init__.py +0 -0
  154. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/api/__init__.py +0 -0
  155. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/api/widget_api.py +0 -0
  156. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/enum.py +0 -0
  157. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/__init__.py +0 -0
  158. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/account_info.py +0 -0
  159. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/account_unbinding_request.py +0 -0
  160. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/account_unbinding_request_additional_info.py +0 -0
  161. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/account_unbinding_response.py +0 -0
  162. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/amount_detail.py +0 -0
  163. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/apply_ott_request.py +0 -0
  164. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/apply_ott_request_additional_info.py +0 -0
  165. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/apply_ott_response.py +0 -0
  166. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/apply_ott_response_user_resources_inner.py +0 -0
  167. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/apply_token_authorization_code_request.py +0 -0
  168. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/apply_token_refresh_token_request.py +0 -0
  169. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/apply_token_response.py +0 -0
  170. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/apply_token_response_additional_info.py +0 -0
  171. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/apply_token_response_additional_info_user_info.py +0 -0
  172. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/balance_inquiry_request.py +0 -0
  173. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/balance_inquiry_request_additional_info.py +0 -0
  174. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/balance_inquiry_response.py +0 -0
  175. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/buyer.py +0 -0
  176. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/cancel_order_request.py +0 -0
  177. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/cancel_order_response.py +0 -0
  178. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/env_info.py +0 -0
  179. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/goods.py +0 -0
  180. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/international_order_info.py +0 -0
  181. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/international_order_info_exchange_rate.py +0 -0
  182. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/money.py +0 -0
  183. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/oauth2_url_data.py +0 -0
  184. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/oauth2_url_data_seamless_data.py +0 -0
  185. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/order.py +0 -0
  186. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/pay_option_detail.py +0 -0
  187. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/pay_option_detail_additional_info.py +0 -0
  188. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/pay_option_info.py +0 -0
  189. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/payment_promo_info.py +0 -0
  190. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/payment_view.py +0 -0
  191. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/query_payment_request.py +0 -0
  192. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/query_payment_response.py +0 -0
  193. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/query_payment_response_additional_info.py +0 -0
  194. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/query_user_profile_request.py +0 -0
  195. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/query_user_profile_response.py +0 -0
  196. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/query_user_profile_response_response.py +0 -0
  197. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/query_user_profile_response_response_body.py +0 -0
  198. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/query_user_profile_response_response_head.py +0 -0
  199. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/refund_order_request.py +0 -0
  200. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/refund_order_request_additional_info.py +0 -0
  201. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/refund_order_response.py +0 -0
  202. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/refund_promo_info.py +0 -0
  203. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/result_info.py +0 -0
  204. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/seller.py +0 -0
  205. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/service_info.py +0 -0
  206. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/shipping_info.py +0 -0
  207. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/status_detail.py +0 -0
  208. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/time_detail.py +0 -0
  209. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/url_param.py +0 -0
  210. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/user_resource_info.py +0 -0
  211. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/virtual_account_info.py +0 -0
  212. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/widget_payment_request.py +0 -0
  213. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/widget_payment_request_additional_info.py +0 -0
  214. {dana_python-1.1.7 → dana_python-1.1.9}/dana/widget/v1/models/widget_payment_response.py +0 -0
  215. {dana_python-1.1.7 → dana_python-1.1.9}/dana_python.egg-info/SOURCES.txt +0 -0
  216. {dana_python-1.1.7 → dana_python-1.1.9}/dana_python.egg-info/dependency_links.txt +0 -0
  217. {dana_python-1.1.7 → dana_python-1.1.9}/dana_python.egg-info/requires.txt +0 -0
  218. {dana_python-1.1.7 → dana_python-1.1.9}/dana_python.egg-info/top_level.txt +0 -0
  219. {dana_python-1.1.7 → dana_python-1.1.9}/setup.cfg +0 -0
  220. {dana_python-1.1.7 → dana_python-1.1.9}/tests/test_disbursement_api.py +0 -0
  221. {dana_python-1.1.7 → dana_python-1.1.9}/tests/test_merchant_management_api.py +0 -0
  222. {dana_python-1.1.7 → dana_python-1.1.9}/tests/test_payment_gateway_api.py +0 -0
  223. {dana_python-1.1.7 → dana_python-1.1.9}/tests/test_payment_gateway_with_automation.py +0 -0
  224. {dana_python-1.1.7 → dana_python-1.1.9}/tests/test_widget_api.py +0 -0
  225. {dana_python-1.1.7 → dana_python-1.1.9}/tests/test_widget_with_automation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dana-python
3
- Version: 1.1.7
3
+ Version: 1.1.9
4
4
  Summary: API Client (SDK) for DANA APIs based on https://dashboard.dana.id/api-docs
5
5
  Author-email: DANA Package Manager <package-manager@dana.id>
6
6
  Maintainer-email: DANA Package Manager <package-manager@dana.id>
@@ -16,6 +16,7 @@ import base64
16
16
  import hashlib
17
17
  import json
18
18
  import os
19
+ import re
19
20
 
20
21
  from pathlib import Path
21
22
  from cryptography.exceptions import InvalidSignature
@@ -98,19 +99,60 @@ class WebhookParser:
98
99
  )
99
100
 
100
101
  @staticmethod
101
- def _ensure_minified_json(json_str: str) -> tuple[str, Exception]:
102
+ def _is_json_minified(json_str: str) -> bool:
102
103
  """
103
- Ensures JSON string is minified
104
- Returns tuple of (minified_json, error)
104
+ Performs a quick heuristic check to see if JSON is already minified
105
+ """
106
+ indicators = [": ", ", ", "{ ", "[ ", "\n", "\t", "\r"]
107
+
108
+ for indicator in indicators:
109
+ if indicator in json_str:
110
+ return False
111
+
112
+ return True
113
+
114
+
115
+ @staticmethod
116
+ def _minify_json(json_str: str) -> tuple[str, Exception]:
117
+ """
118
+ Compacts a JSON string by removing unnecessary whitespace
105
119
  """
106
120
  try:
107
121
  obj = json.loads(json_str)
108
122
  minified = json.dumps(obj, separators=(",", ":"))
109
123
  return minified, None
110
124
  except json.JSONDecodeError as e:
111
- return "", e
125
+ return "", Exception(f"MinifyJSON: failed to unmarshal JSON: {e}")
112
126
  except Exception as e:
113
- return "", e
127
+ return "", Exception(f"MinifyJSON: failed to marshal JSON for minification: {e}")
128
+
129
+ @staticmethod
130
+ def _ensure_minified_json(json_str: str) -> tuple[str, Exception]:
131
+ """
132
+ Ensures JSON string is minified
133
+ Returns tuple of (minified_json, error)
134
+ """
135
+ try:
136
+ normalized_str = json_str.replace('\\"', '"')
137
+
138
+ pattern = r'"(\w+)":"(\{.*?\})"'
139
+ def replace_func(match):
140
+ field_name = match.group(1)
141
+ json_value = match.group(2)
142
+ escaped_value = json_value.replace('"', '\\"')
143
+ return f'"{field_name}":"{escaped_value}"'
144
+
145
+ processed_str = re.sub(pattern, replace_func, normalized_str)
146
+
147
+ if WebhookParser._is_json_minified(processed_str):
148
+ return processed_str, None
149
+
150
+ return WebhookParser._minify_json(processed_str)
151
+
152
+ except json.JSONDecodeError as e:
153
+ return "", Exception(f"EnsureMinifiedJSON: failed to unmarshal JSON: {e}")
154
+ except Exception as e:
155
+ return "", Exception(f"EnsureMinifiedJSON: failed to marshal JSON for minification: {e}")
114
156
 
115
157
  @staticmethod
116
158
  def _sha256_lower_hex(data: str) -> str:
@@ -123,11 +165,11 @@ class WebhookParser:
123
165
  body: str,
124
166
  x_timestamp: str
125
167
  ) -> tuple[str, Exception]:
126
- minified_body, err = self._ensure_minified_json(body)
168
+ processed_body, err = self._ensure_minified_json(body)
127
169
  if err:
128
170
  return "", Exception(f"_construct_string_to_verify: failed to ensure JSON is minified: {err}")
129
171
 
130
- body_hash = self._sha256_lower_hex(minified_body)
172
+ body_hash = self._sha256_lower_hex(processed_body)
131
173
  return f"{http_method}:{relative_path_url}:{body_hash}:{x_timestamp}", None
132
174
 
133
175
  def parse_webhook(
@@ -152,7 +194,6 @@ class WebhookParser:
152
194
  if err:
153
195
  raise ValueError(str(err))
154
196
  signature_bytes = base64.b64decode(x_signature)
155
-
156
197
  try:
157
198
  self.public_key.verify(
158
199
  signature_bytes,
@@ -163,8 +204,12 @@ class WebhookParser:
163
204
  except InvalidSignature:
164
205
  raise ValueError("Signature verification failed.")
165
206
 
207
+ processed_body, err = self._ensure_minified_json(body)
208
+ if err:
209
+ raise ValueError(f"Failed to process JSON body: {err}")
210
+
166
211
  try:
167
- payload_dict = json.loads(body)
212
+ payload_dict = json.loads(processed_body)
168
213
  return FinishNotifyRequest.from_dict(payload_dict)
169
214
  except json.JSONDecodeError:
170
215
  raise ValueError("Invalid JSON in request body.")
@@ -73,7 +73,7 @@ class Util:
73
73
  if mode == Mode.DEEPLINK:
74
74
  base_url = 'https://link.dana.id/bindSnap' if env.lower() == 'production' else 'https://m.sandbox.dana.id/n/link/binding'
75
75
  elif mode == Mode.API:
76
- base_url = 'https://m.dana.id/n/ipg/oauth' if env.lower() == 'production' else 'https://m.sandbox.dana.id/n/ipg/oauth'
76
+ base_url = 'https://m.dana.id/v1.0/get-auth-code' if env.lower() == 'production' else 'https://m.sandbox.dana.id/v1.0/get-auth-code'
77
77
 
78
78
  # Get partner ID from environment
79
79
  partner_id = os.environ.get('X_PARTNER_ID')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dana-python
3
- Version: 1.1.7
3
+ Version: 1.1.9
4
4
  Summary: API Client (SDK) for DANA APIs based on https://dashboard.dana.id/api-docs
5
5
  Author-email: DANA Package Manager <package-manager@dana.id>
6
6
  Maintainer-email: DANA Package Manager <package-manager@dana.id>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "dana-python"
3
- version = "1.1.7"
3
+ version = "1.1.9"
4
4
  readme = "README.md"
5
5
  description = "API Client (SDK) for DANA APIs based on https://dashboard.dana.id/api-docs"
6
6
  license = "Apache-2.0"
@@ -29,7 +29,7 @@ class TestWebhookParser:
29
29
  webhook_http_method = "POST"
30
30
  webhook_relative_url = "/api/v2/test-notif/dana"
31
31
 
32
- webhook_body_str = '{"amount":{"currency":"IDR","value":"100000.00"},"originalReferenceNo":"20250916111230999500166191900293793","merchantId":"216620080007039826152","latestTransactionStatus":"00","additionalInfo":{"paidTime":"1757998714761","paymentInfo":{"payOptionInfos":[{"transAmount":{"currency":"IDR","value":"100000.00"},"payAmount":{"currency":"IDR","value":"100000.00"},"payMethod":"NETWORK_PAY","payOption":"NETWORK_PAY_PG_LINKAJA"}],"extendInfo":"{\\"externalPromoInfos\\":[]}"}},"originalPartnerReferenceNo":"LINKIT25091757998646","createdTime":"1757998647000","finishedTime":"1757998714761","transactionStatusDesc":"SUCCESS"}'
32
+ webhook_body_str = '{"amount":{"currency":"IDR","value":"100000.00"},"originalReferenceNo":"20250916111230999500166191900293793","merchantId":"216620080007039826152","latestTransactionStatus":"00","additionalInfo":{"paidTime":"1757998714761","paymentInfo":{"payOptionInfos":[{"transAmount":{"currency":"IDR","value":"100000.00"},"payAmount":{"currency":"IDR","value":"100000.00"},"payMethod":"NETWORK_PAY","payOption":"NETWORK_PAY_PG_LINKAJA"}],"extendInfo":"{\"externalPromoInfos\":[]}"}},"originalPartnerReferenceNo":"LINKIT25091757998646","createdTime":"1757998647000","finishedTime":"1757998714761","transactionStatusDesc":"SUCCESS"}'
33
33
 
34
34
  x_timestamp = "2025-09-16T12:11:30+07:00"
35
35
  signature = "d/7mle7A+FCl4zvBZ2dMr3s7TVbbaK+toMtZwoev4OmLhn6Ctz/ynMaL3m3vHjAmV3UL3Fq5xp9thZFsO8BY74Vehqr1N9LQblV6i3TfMwT6lMvvhzWr0Fjbasyj23c5nFu1MOxpBiZFMMDNh8GQNLBAehHbjOmNldXSL6OQYRrK/TN9tdDyYFK6ltnKf4BN6bZa2ViAlI/np/U3QBW2LnDL82+8ZK7tYVF5bZyLLUSLXeWXBGQFTSDWqN+JdUHSnxGdQr3hZ7Y9Vqm/7G6rj6NrCxLPiEJYq1DQO3DjokMsORA2lOxzuo53bwqmhmD1mFhJKWF1JmyJuFdo2HB9JA=="
@@ -64,3 +64,48 @@ class TestWebhookParser:
64
64
  assert result.amount.value == "100000.00"
65
65
  assert result.amount.currency == "IDR"
66
66
  assert result.latest_transaction_status == "00"
67
+
68
+ def test_webhook_with_double_escaped_quotes(self):
69
+ """Test webhook parsing with double-escaped quotes in JSON (like PHP test)"""
70
+ # Load keys from environment variables
71
+ public_key = os.getenv("WEBHOOK_PUBLIC_KEY")
72
+
73
+ webhook_http_method = "POST"
74
+ webhook_relative_url = "/d34021fa-7599-413b-8743-ddab605fea49"
75
+
76
+ # This webhook body contains double-escaped quotes in extendInfo field
77
+ webhook_body_str = '{"amount":{"currency":"IDR","value":"50000.00"},"originalReferenceNo":"20251010111230999500166931000229476","merchantId":"216620090016041032029","latestTransactionStatus":"00","additionalInfo":{"paidTime":"2025-10-10T16:16:33+07:00","paymentInfo":{"payOptionInfos":[{"transAmount":{"currency":"IDR","value":"50000.00"},"payAmount":{"currency":"IDR","value":"50000.00"},"payMethod":"VIRTUAL_ACCOUNT","payOption":"VIRTUAL_ACCOUNT_BRI"}],"extendInfo":"{\\"externalPromoInfos\\":[]}"}},"originalPartnerReferenceNo":"ORDER-1760087736146","createdTime":"2025-10-10T16:15:37+07:00","finishedTime":"2025-10-10T16:16:33+07:00","transactionStatusDesc":"SUCCESS"}'
78
+
79
+ x_timestamp = "2025-10-13T13:43:30+07:00"
80
+ signature = "fqrQPxlzEN4ZGW9vYt3PokmIrbG2HQtlbdj6krjf9HFW1qS3ilZjSR+9Z4XZNYxQIxyHHqXmjEiBU4ui/JrknSXlCpPQe7DztB/Ye+yLxIHYBnwdeCXn2zGGAV51nQki+eD2aL8Z6d6MyWz9hoytwE+jtWKUC0KtU7wQfoB0XjdEXzU3/4Ao/rWQbt97UONaaf7i5l3+M/ICP187PYw9iRHLUFh7WRPs8JKpZyO0kcJqEJbeOUjHMmIsLQImOlYVbQTM/1v89Ou1WcVAo0cXNE5yrvosB4pQROeI8KY2X1FNTuB1pdFtQTIyUcd/t1wuIxqHqqFKjrFdcQxlZOIyRg=="
81
+
82
+ headers = {
83
+ "Channel-Id": "DANA",
84
+ "Charset": "UTF-8",
85
+ "Content-Type": "application/json",
86
+ "User-Agent": "Jakarta Commons-HttpClient/3.1",
87
+ "X-External-Id": "nXPTWcwt7lgCOy01wWGKDerEMlKwV5wc",
88
+ "X-Partner-Id": "2025091611385324660336",
89
+ "X-Signature": signature,
90
+ "X-Timestamp": x_timestamp
91
+ }
92
+
93
+ # Create the parser with the public key
94
+ parser = WebhookParser(public_key=public_key)
95
+
96
+ # Verify and parse - this should work with the JSON normalization
97
+ result = parser.parse_webhook(
98
+ http_method=webhook_http_method,
99
+ relative_path_url=webhook_relative_url,
100
+ headers=headers,
101
+ body=webhook_body_str
102
+ )
103
+
104
+ # Verify specific fields like in the PHP test
105
+ assert result is not None
106
+ assert result.original_partner_reference_no == "ORDER-1760087736146"
107
+ assert result.original_reference_no == "20251010111230999500166931000229476"
108
+ assert result.merchant_id == "216620090016041032029"
109
+ assert result.amount.value == "50000.00"
110
+ assert result.amount.currency == "IDR"
111
+ assert result.latest_transaction_status == "00"
File without changes
File without changes
File without changes
File without changes