dana-python 1.1.0__tar.gz → 1.1.1__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 (229) hide show
  1. {dana_python-1.1.0/dana_python.egg-info → dana_python-1.1.1}/PKG-INFO +6 -6
  2. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/enum.py +1 -0
  3. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/dana_account_inquiry_response.py +4 -4
  4. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/transfer_to_bank_response.py +1 -1
  5. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/transfer_to_dana_response.py +3 -1
  6. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/enum.py +1 -0
  7. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/api/payment_gateway_api.py +4 -4
  8. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/enum.py +1 -0
  9. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/actor_context.py +1 -1
  10. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/create_order_by_api_request.py +1 -1
  11. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/create_order_by_redirect_request.py +1 -1
  12. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/goods.py +3 -1
  13. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/pay_option_detail.py +3 -3
  14. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/pay_option_info.py +3 -3
  15. {dana_python-1.1.0 → dana_python-1.1.1}/dana/utils/models.py +1 -1
  16. {dana_python-1.1.0 → dana_python-1.1.1}/dana/utils/open_api_configuration.py +8 -6
  17. {dana_python-1.1.0 → dana_python-1.1.1}/dana/utils/snap_configuration.py +7 -6
  18. {dana_python-1.1.0 → dana_python-1.1.1}/dana/utils/snap_header.py +144 -15
  19. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/api/widget_api.py +12 -10
  20. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/enum.py +5 -0
  21. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/balance_inquiry_request.py +1 -1
  22. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/balance_inquiry_request_additional_info.py +34 -6
  23. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/goods.py +3 -1
  24. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/oauth2_url_data.py +15 -3
  25. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/pay_option_info.py +3 -3
  26. dana_python-1.1.1/dana/widget/v1/util.py +261 -0
  27. {dana_python-1.1.0 → dana_python-1.1.1/dana_python.egg-info}/PKG-INFO +6 -6
  28. {dana_python-1.1.0 → dana_python-1.1.1}/dana_python.egg-info/SOURCES.txt +4 -1
  29. dana_python-1.1.1/dana_python.egg-info/requires.txt +10 -0
  30. {dana_python-1.1.0 → dana_python-1.1.1}/pyproject.toml +6 -6
  31. dana_python-1.1.1/tests/test_disbursement_api.py +218 -0
  32. dana_python-1.1.1/tests/test_payment_gateway_api.py +67 -0
  33. dana_python-1.1.1/tests/test_payment_gateway_with_automation.py +198 -0
  34. dana_python-1.1.1/tests/test_widget_api.py +93 -0
  35. dana_python-1.1.1/tests/test_widget_with_automation.py +265 -0
  36. dana_python-1.1.0/dana_python.egg-info/requires.txt +0 -10
  37. dana_python-1.1.0/tests/test_disbursement_api.py +0 -209
  38. dana_python-1.1.0/tests/test_payment_gateway_api.py +0 -136
  39. dana_python-1.1.0/tests/test_widget_api.py +0 -100
  40. {dana_python-1.1.0 → dana_python-1.1.1}/LICENSE +0 -0
  41. {dana_python-1.1.0 → dana_python-1.1.1}/README.md +0 -0
  42. {dana_python-1.1.0 → dana_python-1.1.1}/dana/__init__.py +0 -0
  43. {dana_python-1.1.0 → dana_python-1.1.1}/dana/api_client.py +0 -0
  44. {dana_python-1.1.0 → dana_python-1.1.1}/dana/api_response.py +0 -0
  45. {dana_python-1.1.0 → dana_python-1.1.1}/dana/base/__init__.py +0 -0
  46. {dana_python-1.1.0 → dana_python-1.1.1}/dana/base/configuration.py +0 -0
  47. {dana_python-1.1.0 → dana_python-1.1.1}/dana/base/model.py +0 -0
  48. {dana_python-1.1.0 → dana_python-1.1.1}/dana/base/types.py +0 -0
  49. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/__init__.py +0 -0
  50. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/__init__.py +0 -0
  51. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/api/__init__.py +0 -0
  52. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/api/disbursement_api.py +0 -0
  53. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/__init__.py +0 -0
  54. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/bank_account_inquiry_request.py +0 -0
  55. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/bank_account_inquiry_request_additional_info.py +0 -0
  56. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/bank_account_inquiry_response.py +0 -0
  57. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/bank_account_inquiry_response_additional_info.py +0 -0
  58. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/dana_account_inquiry_request.py +0 -0
  59. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/dana_account_inquiry_request_additional_info.py +0 -0
  60. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/money.py +0 -0
  61. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/transfer_to_bank_inquiry_status_request.py +0 -0
  62. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/transfer_to_bank_inquiry_status_response.py +0 -0
  63. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/transfer_to_bank_request.py +0 -0
  64. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/transfer_to_bank_request_additional_info.py +0 -0
  65. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/transfer_to_dana_inquiry_status_request.py +0 -0
  66. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/transfer_to_dana_inquiry_status_response.py +0 -0
  67. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/transfer_to_dana_request.py +0 -0
  68. {dana_python-1.1.0 → dana_python-1.1.1}/dana/disbursement/v1/models/transfer_to_dana_request_additional_info.py +0 -0
  69. {dana_python-1.1.0 → dana_python-1.1.1}/dana/exceptions.py +0 -0
  70. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/__init__.py +0 -0
  71. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/__init__.py +0 -0
  72. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/api/__init__.py +0 -0
  73. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/api/merchant_management_api.py +0 -0
  74. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/__init__.py +0 -0
  75. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/address_info.py +0 -0
  76. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/business_docs.py +0 -0
  77. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/create_division_request.py +0 -0
  78. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/create_division_request_ext_info.py +0 -0
  79. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/create_division_response.py +0 -0
  80. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/create_division_response_response.py +0 -0
  81. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/create_division_response_response_body.py +0 -0
  82. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/create_division_response_response_head.py +0 -0
  83. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/create_shop_request.py +0 -0
  84. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/create_shop_response.py +0 -0
  85. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/create_shop_response_response.py +0 -0
  86. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/create_shop_response_response_body.py +0 -0
  87. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/create_shop_response_response_head.py +0 -0
  88. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/division_resource_info.py +0 -0
  89. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/merchant_resource_information.py +0 -0
  90. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/mobile_no_info.py +0 -0
  91. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/pic_info.py +0 -0
  92. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_division_request.py +0 -0
  93. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_division_response.py +0 -0
  94. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_division_response_response.py +0 -0
  95. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_division_response_response_body.py +0 -0
  96. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_division_response_response_head.py +0 -0
  97. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_merchant_resource_request.py +0 -0
  98. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_merchant_resource_response.py +0 -0
  99. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_merchant_resource_response_response.py +0 -0
  100. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_merchant_resource_response_response_body.py +0 -0
  101. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_merchant_resource_response_response_head.py +0 -0
  102. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_shop_request.py +0 -0
  103. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_shop_response.py +0 -0
  104. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_shop_response_response.py +0 -0
  105. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_shop_response_response_body.py +0 -0
  106. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/query_shop_response_response_head.py +0 -0
  107. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/result_info.py +0 -0
  108. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/shop_resource_info.py +0 -0
  109. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/update_division_request.py +0 -0
  110. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/update_division_response.py +0 -0
  111. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/update_division_response_response.py +0 -0
  112. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/update_division_response_response_body.py +0 -0
  113. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/update_division_response_response_head.py +0 -0
  114. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/update_shop_request.py +0 -0
  115. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/update_shop_response.py +0 -0
  116. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/update_shop_response_response.py +0 -0
  117. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/update_shop_response_response_head.py +0 -0
  118. {dana_python-1.1.0 → dana_python-1.1.1}/dana/merchant_management/v1/models/user_name.py +0 -0
  119. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/__init__.py +0 -0
  120. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/__init__.py +0 -0
  121. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/api/__init__.py +0 -0
  122. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/__init__.py +0 -0
  123. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/amount_detail.py +0 -0
  124. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/audit_info.py +0 -0
  125. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/buyer.py +0 -0
  126. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/cancel_order_request.py +0 -0
  127. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/cancel_order_response.py +0 -0
  128. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/consult_pay_payment_info.py +0 -0
  129. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/consult_pay_request.py +0 -0
  130. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/consult_pay_request_additional_info.py +0 -0
  131. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/consult_pay_response.py +0 -0
  132. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/create_order_by_api_additional_info.py +0 -0
  133. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/create_order_by_redirect_additional_info.py +0 -0
  134. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/create_order_response.py +0 -0
  135. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/create_order_response_additional_info.py +0 -0
  136. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/env_info.py +0 -0
  137. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/money.py +0 -0
  138. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/order_api_object.py +0 -0
  139. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/order_redirect_object.py +0 -0
  140. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/pay_option_additional_info.py +0 -0
  141. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/payment_view.py +0 -0
  142. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/promo_info.py +0 -0
  143. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/query_payment_request.py +0 -0
  144. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/query_payment_response.py +0 -0
  145. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/query_payment_response_additional_info.py +0 -0
  146. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/refund_option_bill.py +0 -0
  147. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/refund_order_request.py +0 -0
  148. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/refund_order_request_additional_info.py +0 -0
  149. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/refund_order_response.py +0 -0
  150. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/seller.py +0 -0
  151. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/shipping_info.py +0 -0
  152. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/status_detail.py +0 -0
  153. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/time_detail.py +0 -0
  154. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/url_param.py +0 -0
  155. {dana_python-1.1.0 → dana_python-1.1.1}/dana/payment_gateway/v1/models/virtual_account_info.py +0 -0
  156. {dana_python-1.1.0 → dana_python-1.1.1}/dana/rest.py +0 -0
  157. {dana_python-1.1.0 → dana_python-1.1.1}/dana/utils/open_api_header.py +0 -0
  158. {dana_python-1.1.0 → dana_python-1.1.1}/dana/utils/script.py +0 -0
  159. {dana_python-1.1.0 → dana_python-1.1.1}/dana/utils/url.py +0 -0
  160. {dana_python-1.1.0 → dana_python-1.1.1}/dana/webhook/__init__.py +0 -0
  161. {dana_python-1.1.0 → dana_python-1.1.1}/dana/webhook/finish_notify_payment_info.py +0 -0
  162. {dana_python-1.1.0 → dana_python-1.1.1}/dana/webhook/finish_notify_request.py +0 -0
  163. {dana_python-1.1.0 → dana_python-1.1.1}/dana/webhook/finish_notify_request_additional_info.py +0 -0
  164. {dana_python-1.1.0 → dana_python-1.1.1}/dana/webhook/finish_notify_response.py +0 -0
  165. {dana_python-1.1.0 → dana_python-1.1.1}/dana/webhook/money.py +0 -0
  166. {dana_python-1.1.0 → dana_python-1.1.1}/dana/webhook/pay_option_info.py +0 -0
  167. {dana_python-1.1.0 → dana_python-1.1.1}/dana/webhook/shop_info.py +0 -0
  168. {dana_python-1.1.0 → dana_python-1.1.1}/dana/webhook/webhook.py +0 -0
  169. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/__init__.py +0 -0
  170. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/__init__.py +0 -0
  171. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/api/__init__.py +0 -0
  172. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/__init__.py +0 -0
  173. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/account_info.py +0 -0
  174. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/account_unbinding_request.py +0 -0
  175. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/account_unbinding_request_additional_info.py +0 -0
  176. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/account_unbinding_response.py +0 -0
  177. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/amount_detail.py +0 -0
  178. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/apply_ott_request.py +0 -0
  179. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/apply_ott_request_additional_info.py +0 -0
  180. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/apply_ott_response.py +0 -0
  181. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/apply_ott_response_user_resources_inner.py +0 -0
  182. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/apply_token_authorization_code_request.py +0 -0
  183. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/apply_token_refresh_token_request.py +0 -0
  184. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/apply_token_response.py +0 -0
  185. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/apply_token_response_additional_info.py +0 -0
  186. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/apply_token_response_additional_info_user_info.py +0 -0
  187. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/balance_inquiry_response.py +0 -0
  188. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/buyer.py +0 -0
  189. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/cancel_order_request.py +0 -0
  190. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/cancel_order_response.py +0 -0
  191. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/env_info.py +0 -0
  192. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/international_order_info.py +0 -0
  193. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/international_order_info_exchange_rate.py +0 -0
  194. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/money.py +0 -0
  195. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/oauth2_url_data_seamless_data.py +0 -0
  196. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/order.py +0 -0
  197. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/pay_option_detail.py +0 -0
  198. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/pay_option_detail_additional_info.py +0 -0
  199. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/payment_promo_info.py +0 -0
  200. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/payment_view.py +0 -0
  201. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/query_payment_request.py +0 -0
  202. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/query_payment_response.py +0 -0
  203. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/query_payment_response_additional_info.py +0 -0
  204. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/query_user_profile_request.py +0 -0
  205. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/query_user_profile_response.py +0 -0
  206. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/query_user_profile_response_response.py +0 -0
  207. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/query_user_profile_response_response_body.py +0 -0
  208. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/query_user_profile_response_response_head.py +0 -0
  209. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/refund_order_request.py +0 -0
  210. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/refund_order_request_additional_info.py +0 -0
  211. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/refund_order_response.py +0 -0
  212. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/refund_promo_info.py +0 -0
  213. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/result_info.py +0 -0
  214. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/seller.py +0 -0
  215. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/service_info.py +0 -0
  216. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/shipping_info.py +0 -0
  217. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/status_detail.py +0 -0
  218. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/time_detail.py +0 -0
  219. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/url_param.py +0 -0
  220. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/user_resource_info.py +0 -0
  221. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/virtual_account_info.py +0 -0
  222. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/widget_payment_request.py +0 -0
  223. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/widget_payment_request_additional_info.py +0 -0
  224. {dana_python-1.1.0 → dana_python-1.1.1}/dana/widget/v1/models/widget_payment_response.py +0 -0
  225. {dana_python-1.1.0 → dana_python-1.1.1}/dana_python.egg-info/dependency_links.txt +0 -0
  226. {dana_python-1.1.0 → dana_python-1.1.1}/dana_python.egg-info/top_level.txt +0 -0
  227. {dana_python-1.1.0 → dana_python-1.1.1}/setup.cfg +0 -0
  228. {dana_python-1.1.0 → dana_python-1.1.1}/tests/test_merchant_management_api.py +0 -0
  229. {dana_python-1.1.0 → dana_python-1.1.1}/tests/test_webhook.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dana-python
3
- Version: 1.1.0
3
+ Version: 1.1.1
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>
@@ -13,14 +13,14 @@ Description-Content-Type: text/markdown
13
13
  License-File: LICENSE
14
14
  Requires-Dist: annotated-types==0.7.0
15
15
  Requires-Dist: cffi==1.17.1
16
- Requires-Dist: cryptography==44.0.2
16
+ Requires-Dist: cryptography<46.0.0,>=44.0.2
17
17
  Requires-Dist: pycparser==2.22
18
- Requires-Dist: pydantic==2.10.6
19
- Requires-Dist: pydantic-core==2.27.2
18
+ Requires-Dist: pydantic<3.0.0,>=2.10.6
19
+ Requires-Dist: pydantic-core<3.0.0,>=2.27.2
20
20
  Requires-Dist: python-dateutil==2.9.0.post0
21
21
  Requires-Dist: six==1.17.0
22
- Requires-Dist: typing-extensions==4.12.2
23
- Requires-Dist: urllib3==2.3.0
22
+ Requires-Dist: typing-extensions<5.0.0,>=4.12.2
23
+ Requires-Dist: urllib3<3.0.0,>=2.3.0
24
24
  Dynamic: license-file
25
25
 
26
26
  # dana-python
@@ -62,6 +62,7 @@ class PayMethod(str, Enum):
62
62
  ONLINE_CREDIT = "ONLINE_CREDIT"
63
63
  LOAN_CREDIT = "LOAN_CREDIT"
64
64
  NETWORK_PAY = "NETWORK_PAY"
65
+ CARD = "CARD"
65
66
 
66
67
  class PayMethod(str, Enum):
67
68
  BALANCE = "BALANCE"
@@ -34,7 +34,7 @@ import json
34
34
  from dana.base.model import BaseSdkModel
35
35
 
36
36
  from pydantic import BaseModel, ConfigDict, Field
37
- from typing import Any, ClassVar, Dict, List, Optional, Union
37
+ from typing import Any, ClassVar, Dict, List, Optional
38
38
  from typing_extensions import Annotated
39
39
  from dana.disbursement.v1.models.money import Money
40
40
  from typing import Optional, Set
@@ -53,14 +53,14 @@ class DanaAccountInquiryResponse(BaseModel, BaseSdkModel):
53
53
  session_id: Optional[Annotated[str, Field(strict=True, max_length=25)]] = Field(default=None, description="Session identifier")
54
54
  customer_number: Optional[Annotated[str, Field(strict=True, max_length=32)]] = Field(default=None, description="Customer account number, in format 628xxx")
55
55
  customer_name: Annotated[str, Field(strict=True, max_length=255)] = Field(description="Customer account name")
56
- customer_monthly_limit: Optional[Union[Annotated[float, Field(le=100000000000000000, strict=True)], Annotated[int, Field(le=2147483647, strict=True)]]] = Field(default=None, description="Limitation of transfer to DANA balance for customer per month")
56
+ customer_monthly_in_limit: Optional[Annotated[str, Field(strict=True, max_length=17)]] = Field(default=None, description="Limitation of transfer to DANA balance for customer per month")
57
57
  min_amount: Money = Field(description="Minimal amount. Contains two sub-fields:<br> 1. Value: Amount, including the cents<br> 2. Currency: Currency code based on ISO ")
58
58
  max_amount: Money = Field(description="Maximal amount. Contains two sub-fields:<br> 1. Value: Amount, including the cents<br> 2. Currency: Currency code based on ISO ")
59
59
  amount: Money = Field(description="Amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO ")
60
60
  fee_amount: Money = Field(description="Fee amount. Contains two sub-fields:<br> 1. Value: Amount, including the cents<br> 2. Currency: Currency code based on ISO ")
61
61
  fee_type: Optional[Annotated[str, Field(strict=True, max_length=25)]] = Field(default=None, description="Type of fee for each transfer to DANA transaction. Such as admin fee")
62
62
  additional_info: Optional[Dict[str, Any]] = Field(default=None, description="Additional information")
63
- __properties: ClassVar[List[str]] = ["responseCode", "responseMessage", "referenceNo", "partnerReferenceNo", "sessionId", "customerNumber", "customerName", "customerMonthlyLimit", "minAmount", "maxAmount", "amount", "feeAmount", "feeType", "additionalInfo"]
63
+ __properties: ClassVar[List[str]] = ["responseCode", "responseMessage", "referenceNo", "partnerReferenceNo", "sessionId", "customerNumber", "customerName", "customerMonthlyInLimit", "minAmount", "maxAmount", "amount", "feeAmount", "feeType", "additionalInfo"]
64
64
 
65
65
  model_config = ConfigDict(
66
66
  populate_by_name=True,
@@ -133,7 +133,7 @@ class DanaAccountInquiryResponse(BaseModel, BaseSdkModel):
133
133
  "sessionId": obj.get("sessionId"),
134
134
  "customerNumber": obj.get("customerNumber"),
135
135
  "customerName": obj.get("customerName"),
136
- "customerMonthlyLimit": obj.get("customerMonthlyLimit"),
136
+ "customerMonthlyInLimit": obj.get("customerMonthlyInLimit"),
137
137
  "minAmount": Money.from_dict(obj["minAmount"]) if obj.get("minAmount") is not None else None,
138
138
  "maxAmount": Money.from_dict(obj["maxAmount"]) if obj.get("maxAmount") is not None else None,
139
139
  "amount": Money.from_dict(obj["amount"]) if obj.get("amount") is not None else None,
@@ -50,7 +50,7 @@ class TransferToBankResponse(BaseModel, BaseSdkModel):
50
50
  reference_no: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Transaction identifier on DANA system")
51
51
  partner_reference_no: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Unique transaction identifier on partner system which assigned to each transaction<br> Notes:<br> If the partner receives a timeout or an unexpected response from DANA and partner expects to perform retry request to DANA, please use the partnerReferenceNo that is the same as the one used in the transaction request process before ")
52
52
  transaction_date: Optional[Annotated[str, Field(strict=True, max_length=25)]] = Field(default=None, description="Transaction date, in format YYYY-MM-DDTHH:mm:ss+07:00. Time must be in GMT+7 (Jakarta time)")
53
- reference_number: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Reference number")
53
+ reference_number: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Reference number")
54
54
  additional_info: Optional[Dict[str, Any]] = Field(default=None, description="Additional information")
55
55
  __properties: ClassVar[List[str]] = ["responseCode", "responseMessage", "referenceNo", "partnerReferenceNo", "transactionDate", "referenceNumber", "additionalInfo"]
56
56
 
@@ -52,9 +52,10 @@ class TransferToDanaResponse(BaseModel, BaseSdkModel):
52
52
  partner_reference_no: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Unique transaction identifier on partner system which assigned to each transaction<br> Notes:<br> If the partner receives a timeout or an unexpected response from DANA and partner expects to perform retry request to DANA, please use the partnerReferenceNo that is the same as the one used in the transaction request process before ")
53
53
  session_id: Optional[Annotated[str, Field(strict=True, max_length=25)]] = Field(default=None, description="Session identifier")
54
54
  customer_number: Optional[Annotated[str, Field(strict=True, max_length=32)]] = Field(default=None, description="Customer account number, in format 628xxx")
55
+ customer_name: Optional[Annotated[str, Field(strict=True, max_length=255)]] = Field(default=None, description="Customer account name")
55
56
  amount: Money = Field(description="Amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO ")
56
57
  additional_info: Optional[Dict[str, Any]] = Field(default=None, description="Additional information")
57
- __properties: ClassVar[List[str]] = ["responseCode", "responseMessage", "referenceNo", "partnerReferenceNo", "sessionId", "customerNumber", "amount", "additionalInfo"]
58
+ __properties: ClassVar[List[str]] = ["responseCode", "responseMessage", "referenceNo", "partnerReferenceNo", "sessionId", "customerNumber", "customerName", "amount", "additionalInfo"]
58
59
 
59
60
  model_config = ConfigDict(
60
61
  populate_by_name=True,
@@ -117,6 +118,7 @@ class TransferToDanaResponse(BaseModel, BaseSdkModel):
117
118
  "partnerReferenceNo": obj.get("partnerReferenceNo"),
118
119
  "sessionId": obj.get("sessionId"),
119
120
  "customerNumber": obj.get("customerNumber"),
121
+ "customerName": obj.get("customerName"),
120
122
  "amount": Money.from_dict(obj["amount"]) if obj.get("amount") is not None else None,
121
123
  "additionalInfo": obj.get("additionalInfo")
122
124
  })
@@ -250,6 +250,7 @@ class PayMethod(str, Enum):
250
250
  ONLINE_CREDIT = "ONLINE_CREDIT"
251
251
  LOAN_CREDIT = "LOAN_CREDIT"
252
252
  NETWORK_PAY = "NETWORK_PAY"
253
+ CARD = "CARD"
253
254
 
254
255
  class PayMethod(str, Enum):
255
256
  BALANCE = "BALANCE"
@@ -539,12 +539,12 @@ class PaymentGatewayApi:
539
539
  _header_params['Content-Type'] = _default_content_type
540
540
  # authentication setting
541
541
  _auth_settings: List[str] = [
542
+ 'DANA_ENV',
542
543
  'ORIGIN',
543
544
  'X_PARTNER_ID',
544
545
  'CHANNEL_ID',
545
546
  'PRIVATE_KEY',
546
- 'PRIVATE_KEY_PATH',
547
- 'ENV'
547
+ 'PRIVATE_KEY_PATH'
548
548
  ]
549
549
  # merge list of auth settings
550
550
  # with list of auth generated at runtime for headers
@@ -798,12 +798,12 @@ class PaymentGatewayApi:
798
798
  _header_params['Content-Type'] = _default_content_type
799
799
  # authentication setting
800
800
  _auth_settings: List[str] = [
801
+ 'DANA_ENV',
801
802
  'ORIGIN',
802
803
  'X_PARTNER_ID',
803
804
  'CHANNEL_ID',
804
805
  'PRIVATE_KEY',
805
- 'PRIVATE_KEY_PATH',
806
- 'ENV'
806
+ 'PRIVATE_KEY_PATH'
807
807
  ]
808
808
  # merge list of auth settings
809
809
  # with list of auth generated at runtime for headers
@@ -41,6 +41,7 @@ class PayMethod(str, Enum):
41
41
  ONLINE_CREDIT = "ONLINE_CREDIT"
42
42
  LOAN_CREDIT = "LOAN_CREDIT"
43
43
  NETWORK_PAY = "NETWORK_PAY"
44
+ CARD = "CARD"
44
45
 
45
46
  class PayOption(str, Enum):
46
47
  NETWORK_PAY_PG_SPAY = "NETWORK_PAY_PG_SPAY"
@@ -46,7 +46,7 @@ class ActorContext(BaseModel, BaseSdkModel):
46
46
  ActorContext
47
47
  """ # noqa: E501
48
48
  actor_id: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Actor identifier")
49
- actor_type: Optional[Annotated[str, Field(strict=True, max_length=32)]] = Field(default=None, description="Actor type. The enums:<br> * USER - User<br> * MERCHANT - Merchant<br * MERCHANT_OPERATOR - Merchant operator<br> * BACK_OFFICE - Back office<br> * SYSTEM - System<br> ")
49
+ actor_type: Optional[Annotated[str, Field(strict=True, max_length=32)]] = Field(default=None, description="Actor type. The enums:<br> * USER - User<br> * MERCHANT - Merchant<br> * MERCHANT_OPERATOR - Merchant operator<br> * BACK_OFFICE - Back office<br> * SYSTEM - System<br> ")
50
50
  __properties: ClassVar[List[str]] = ["actorId", "actorType"]
51
51
 
52
52
  @field_validator('actor_type')
@@ -56,7 +56,7 @@ class CreateOrderByApiRequest(BaseModel, BaseSdkModel):
56
56
  sub_merchant_id: Optional[Annotated[str, Field(strict=True, max_length=32)]] = Field(default=None, description="Information of sub merchant identifier")
57
57
  amount: Money = Field(description="Amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO<br> ")
58
58
  external_store_id: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Store identifier to indicate to which store this payment belongs to")
59
- valid_up_to: Optional[Annotated[str, Field(strict=True, max_length=25)]] = Field(default=None, description="The time when the payment will be automatically expired, in format YYYY-MM-DDTHH:mm:ss+07:00. Time must be in GMT+7 (Jakarta time)")
59
+ valid_up_to: Optional[Annotated[str, Field(strict=True, max_length=25)]] = Field(default=None, description="The time when the payment will be automatically expired, in format YYYY-MM-DDTHH:mm:ss+07:00. Time must be in GMT+7 (Jakarta time) and cannot be more than one week in the future.")
60
60
  disabled_pay_methods: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Payment method(s) that cannot be used for this")
61
61
  url_params: List[UrlParam] = Field(description="Notify URL that DANA must send the payment notification to")
62
62
  __properties: ClassVar[List[str]] = ["partnerReferenceNo", "merchantId", "subMerchantId", "amount", "externalStoreId", "validUpTo", "disabledPayMethods", "urlParams"]
@@ -54,7 +54,7 @@ class CreateOrderByRedirectRequest(BaseModel, BaseSdkModel):
54
54
  sub_merchant_id: Optional[Annotated[str, Field(strict=True, max_length=32)]] = Field(default=None, description="Information of sub merchant identifier")
55
55
  amount: Money = Field(description="Amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO<br> ")
56
56
  external_store_id: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Store identifier to indicate to which store this payment belongs to")
57
- valid_up_to: Optional[Annotated[str, Field(strict=True, max_length=25)]] = Field(default=None, description="The time when the payment will be automatically expired, in format YYYY-MM-DDTHH:mm:ss+07:00. Time must be in GMT+7 (Jakarta time)")
57
+ valid_up_to: Optional[Annotated[str, Field(strict=True, max_length=25)]] = Field(default=None, description="The time when the payment will be automatically expired, in format YYYY-MM-DDTHH:mm:ss+07:00. Time must be in GMT+7 (Jakarta time) and cannot be more than one week in the future.")
58
58
  disabled_pay_methods: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Payment method(s) that cannot be used for this")
59
59
  url_params: List[UrlParam] = Field(description="Notify URL that DANA must send the payment notification to")
60
60
  __properties: ClassVar[List[str]] = ["partnerReferenceNo", "merchantId", "subMerchantId", "amount", "externalStoreId", "validUpTo", "disabledPayMethods", "urlParams"]
@@ -46,6 +46,7 @@ class Goods(BaseModel, BaseSdkModel):
46
46
  """
47
47
  Goods
48
48
  """ # noqa: E501
49
+ name: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Goods name")
49
50
  merchant_goods_id: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Goods identifier provided by merchant")
50
51
  description: Annotated[str, Field(strict=True, max_length=1024)] = Field(description="Goods description")
51
52
  category: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Goods category")
@@ -55,7 +56,7 @@ class Goods(BaseModel, BaseSdkModel):
55
56
  merchant_shipping_id: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Shipment identifier provided by merchant")
56
57
  snapshot_url: Optional[Annotated[str, Field(strict=True, max_length=512)]] = Field(default=None, description="The URL of good's snapshot web page")
57
58
  extend_info: Optional[Annotated[str, Field(strict=True, max_length=4096)]] = Field(default=None, description="Extend information")
58
- __properties: ClassVar[List[str]] = ["merchantGoodsId", "description", "category", "price", "unit", "quantity", "merchantShippingId", "snapshotUrl", "extendInfo"]
59
+ __properties: ClassVar[List[str]] = ["name", "merchantGoodsId", "description", "category", "price", "unit", "quantity", "merchantShippingId", "snapshotUrl", "extendInfo"]
59
60
 
60
61
  model_config = ConfigDict(
61
62
  populate_by_name=True,
@@ -112,6 +113,7 @@ class Goods(BaseModel, BaseSdkModel):
112
113
  return cls.model_validate(obj)
113
114
 
114
115
  _obj = cls.model_validate({
116
+ "name": obj.get("name"),
115
117
  "merchantGoodsId": obj.get("merchantGoodsId"),
116
118
  "description": obj.get("description"),
117
119
  "category": obj.get("category"),
@@ -47,7 +47,7 @@ class PayOptionDetail(BaseModel, BaseSdkModel):
47
47
  """
48
48
  PayOptionDetail
49
49
  """ # noqa: E501
50
- pay_method: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Payment method that used to payment. The enums:<br> * BALANCE - Payment method with balance<br> * COUPON - Payment method with coupon<br> * NET_BANKING - Payment method with internet banking<br> * CREDIT_CARD - Payment method with credit card<br> * DEBIT_CARD - Payment method with debit card<br> * VIRTUAL_ACCOUNT - Payment method with virtual account<br> * OTC - Payment method with OTC<br> * DIRECT_DEBIT_CREDIT_CARD - Payment method with direct debit of credit card<br> * DIRECT_DEBIT_DEBIT_CARD - Payment method with direct debit of debit card<br> * ONLINE_CREDIT - Payment method with online Credit<br> * LOAN_CREDIT - Payment method with DANA Cicil<br> * NETWORK_PAY - Payment method with e-wallet<br> ")
50
+ pay_method: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Payment method that used to payment. The enums:<br> * BALANCE - Payment method with balance<br> * COUPON - Payment method with coupon<br> * NET_BANKING - Payment method with internet banking<br> * CREDIT_CARD - Payment method with credit card<br> * DEBIT_CARD - Payment method with debit card<br> * VIRTUAL_ACCOUNT - Payment method with virtual account<br> * OTC - Payment method with OTC<br> * DIRECT_DEBIT_CREDIT_CARD - Payment method with direct debit of credit card<br> * DIRECT_DEBIT_DEBIT_CARD - Payment method with direct debit of debit card<br> * ONLINE_CREDIT - Payment method with online Credit<br> * LOAN_CREDIT - Payment method with DANA Cicil<br> * NETWORK_PAY - Payment method with e-wallet<br> * CARD - Payment method with card<br> ")
51
51
  pay_option: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Payment option that available to used to payment, depends on the payment method. The enums:<br> * NETWORK_PAY_PG_SPAY - Payment method with ShopeePay e-wallet<br> * NETWORK_PAY_PG_OVO - Payment method with OVO e-wallet<br> * NETWORK_PAY_PG_GOPAY - Payment method with GoPay e-wallet<br> * NETWORK_PAY_PG_LINKAJA - Payment method with LinkAja e-wallet<br> * NETWORK_PAY_PG_CARD - Payment method with Card<br> * NETWORK_PAY_PG_QRIS - Payment method with QRIS<br> * VIRTUAL_ACCOUNT_BCA - Payment method with BCA virtual account<br> * VIRTUAL_ACCOUNT_BNI - Payment method with BNI virtual account<br> * VIRTUAL_ACCOUNT_MANDIRI - Payment method with Mandiri virtual account<br> * VIRTUAL_ACCOUNT_BRI - Payment method with BRI virtual account<br> * VIRTUAL_ACCOUNT_BTPN - Payment method with BTPN virtual account<br> * VIRTUAL_ACCOUNT_CIMB - Payment method with CIMB virtual account<br> * VIRTUAL_ACCOUNT_PERMATA - Payment method with Permata virtual account<br> ")
52
52
  trans_amount: Money = Field()
53
53
  fee_amount: Optional[Money] = Field(default=None)
@@ -61,8 +61,8 @@ class PayOptionDetail(BaseModel, BaseSdkModel):
61
61
  """Validates the enum"""
62
62
  if value == "":
63
63
  return value
64
- if value not in set(['BALANCE', 'COUPON', 'NET_BANKING', 'CREDIT_CARD', 'DEBIT_CARD', 'VIRTUAL_ACCOUNT', 'OTC', 'DIRECT_DEBIT_CREDIT_CARD', 'DIRECT_DEBIT_DEBIT_CARD', 'ONLINE_CREDIT', 'LOAN_CREDIT', 'NETWORK_PAY']):
65
- raise ValueError("must be one of enum values ('BALANCE', 'COUPON', 'NET_BANKING', 'CREDIT_CARD', 'DEBIT_CARD', 'VIRTUAL_ACCOUNT', 'OTC', 'DIRECT_DEBIT_CREDIT_CARD', 'DIRECT_DEBIT_DEBIT_CARD', 'ONLINE_CREDIT', 'LOAN_CREDIT', 'NETWORK_PAY')")
64
+ if value not in set(['BALANCE', 'COUPON', 'NET_BANKING', 'CREDIT_CARD', 'DEBIT_CARD', 'VIRTUAL_ACCOUNT', 'OTC', 'DIRECT_DEBIT_CREDIT_CARD', 'DIRECT_DEBIT_DEBIT_CARD', 'ONLINE_CREDIT', 'LOAN_CREDIT', 'NETWORK_PAY', 'CARD']):
65
+ raise ValueError("must be one of enum values ('BALANCE', 'COUPON', 'NET_BANKING', 'CREDIT_CARD', 'DEBIT_CARD', 'VIRTUAL_ACCOUNT', 'OTC', 'DIRECT_DEBIT_CREDIT_CARD', 'DIRECT_DEBIT_DEBIT_CARD', 'ONLINE_CREDIT', 'LOAN_CREDIT', 'NETWORK_PAY', 'CARD')")
66
66
  return value
67
67
 
68
68
  @field_validator('pay_option')
@@ -46,7 +46,7 @@ class PayOptionInfo(BaseModel, BaseSdkModel):
46
46
  """
47
47
  PayOptionInfo
48
48
  """ # noqa: E501
49
- pay_method: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Payment method name. The enums:<br> * BALANCE - Payment method with balance<br> * COUPON - Payment method with coupon<br> * NET_BANKING - Payment method with internet banking<br> * CREDIT_CARD - Payment method with credit card<br> * DEBIT_CARD - Payment method with debit card<br> * VIRTUAL_ACCOUNT - Payment method with virtual account<br> * OTC - Payment method with OTC<br> * DIRECT_DEBIT_CREDIT_CARD - Payment method with direct debit of credit card<br> * DIRECT_DEBIT_DEBIT_CARD - Payment method with direct debit of debit card<br> * ONLINE_CREDIT - Payment method with online Credit<br> * LOAN_CREDIT - Payment method with DANA Cicil<br> * NETWORK_PAY - Payment method with e-wallet ")
49
+ pay_method: Annotated[str, Field(strict=True, max_length=64)] = Field(description="Payment method name. The enums:<br> * BALANCE - Payment method with balance<br> * COUPON - Payment method with coupon<br> * NET_BANKING - Payment method with internet banking<br> * CREDIT_CARD - Payment method with credit card<br> * DEBIT_CARD - Payment method with debit card<br> * VIRTUAL_ACCOUNT - Payment method with virtual account<br> * OTC - Payment method with OTC<br> * DIRECT_DEBIT_CREDIT_CARD - Payment method with direct debit of credit card<br> * DIRECT_DEBIT_DEBIT_CARD - Payment method with direct debit of debit card<br> * ONLINE_CREDIT - Payment method with online Credit<br> * LOAN_CREDIT - Payment method with DANA Cicil<br> * NETWORK_PAY - Payment method with e-wallet * CARD - Payment method with Card ")
50
50
  pay_option: Optional[Annotated[str, Field(strict=True, max_length=64)]] = Field(default=None, description="Payment option which shows the provider of this payment. The enums:<br> * NETWORK_PAY_PG_SPAY - Payment method with ShopeePay e-wallet<br> * NETWORK_PAY_PG_OVO - Payment method with OVO e-wallet<br> * NETWORK_PAY_PG_GOPAY - Payment method with GoPay e-wallet<br> * NETWORK_PAY_PG_LINKAJA - Payment method with LinkAja e-wallet<br> * NETWORK_PAY_PG_CARD - Payment method with Card<br> * VIRTUAL_ACCOUNT_BCA - Payment method with BCA virtual account<br> * VIRTUAL_ACCOUNT_BNI - Payment method with BNI virtual account<br> * VIRTUAL_ACCOUNT_MANDIRI - Payment method with Mandiri virtual account<br> * VIRTUAL_ACCOUNT_BRI - Payment method with BRI virtual account<br> * VIRTUAL_ACCOUNT_BTPN - Payment method with BTPN virtual account<br> * VIRTUAL_ACCOUNT_CIMB - Payment method with CIMB virtual account<br> * VIRTUAL_ACCOUNT_PERMATA - Payment method with Permata virtual account<br> ")
51
51
  pay_amount: Optional[Money] = Field(default=None, description="Pay amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO<br> ")
52
52
  trans_amount: Optional[Money] = Field(default=None, description="Trans amount. Contains two sub-fields:<br> 1. Value: Transaction amount, including the cents<br> 2. Currency: Currency code based on ISO<br> ")
@@ -61,8 +61,8 @@ class PayOptionInfo(BaseModel, BaseSdkModel):
61
61
  """Validates the enum"""
62
62
  if value == "":
63
63
  return value
64
- if value not in set(['BALANCE', 'COUPON', 'NET_BANKING', 'CREDIT_CARD', 'DEBIT_CARD', 'VIRTUAL_ACCOUNT', 'OTC', 'DIRECT_DEBIT_CREDIT_CARD', 'DIRECT_DEBIT_DEBIT_CARD', 'ONLINE_CREDIT', 'LOAN_CREDIT', 'NETWORK_PAY']):
65
- raise ValueError("must be one of enum values ('BALANCE', 'COUPON', 'NET_BANKING', 'CREDIT_CARD', 'DEBIT_CARD', 'VIRTUAL_ACCOUNT', 'OTC', 'DIRECT_DEBIT_CREDIT_CARD', 'DIRECT_DEBIT_DEBIT_CARD', 'ONLINE_CREDIT', 'LOAN_CREDIT', 'NETWORK_PAY')")
64
+ if value not in set(['BALANCE', 'COUPON', 'NET_BANKING', 'CREDIT_CARD', 'DEBIT_CARD', 'VIRTUAL_ACCOUNT', 'OTC', 'DIRECT_DEBIT_CREDIT_CARD', 'DIRECT_DEBIT_DEBIT_CARD', 'ONLINE_CREDIT', 'LOAN_CREDIT', 'NETWORK_PAY', 'CARD']):
65
+ raise ValueError("must be one of enum values ('BALANCE', 'COUPON', 'NET_BANKING', 'CREDIT_CARD', 'DEBIT_CARD', 'VIRTUAL_ACCOUNT', 'OTC', 'DIRECT_DEBIT_CREDIT_CARD', 'DIRECT_DEBIT_DEBIT_CARD', 'ONLINE_CREDIT', 'LOAN_CREDIT', 'NETWORK_PAY', 'CARD')")
66
66
  return value
67
67
 
68
68
  @field_validator('pay_option')
@@ -45,4 +45,4 @@ def get_model_from_name(*, name: str) -> Any:
45
45
  return getattr(sys.modules[module_name], name, None)
46
46
 
47
47
  else:
48
- raise ValueError("Unregistered model")
48
+ raise ValueError("Unregistered model")
@@ -46,6 +46,7 @@ OpenApiAuthSettings = TypedDict(
46
46
  {
47
47
  "CLIENT_SECRET": APIKeyAuthSetting,
48
48
  "CLIENT_ID": APIKeyAuthSetting,
49
+ "DANA_ENV": APIKeyAuthSetting,
49
50
  "ENV": APIKeyAuthSetting,
50
51
  "ACCESS_TOKEN": APIKeyAuthSetting,
51
52
  "PRIVATE_KEY": APIKeyAuthSetting,
@@ -96,6 +97,7 @@ class OpenApiConfiguration(BaseConfiguration):
96
97
  auth_settings = OpenApiAuthSettings(
97
98
  CLIENT_SECRET=os.getenv("CLIENT_SECRET"),
98
99
  CLIENT_ID=os.getenv("CLIENT_ID"),
100
+ DANA_ENV=os.getenv("DANA_ENV"),
99
101
  ENV=Env.SANDBOX
100
102
  )
101
103
  config = OpenApiConfiguration(api_key=auth_settings)
@@ -132,9 +134,9 @@ class OpenApiConfiguration(BaseConfiguration):
132
134
  self.ignore_operation_servers = ignore_operation_servers
133
135
 
134
136
  # Set host based on environment
135
- if api_key and "ENV" in api_key:
136
- self.host = "https://api.sandbox.dana.id" if api_key["ENV"] == Env.SANDBOX else \
137
- "https://api.saas.dana.id" if api_key["ENV"] == Env.PRODUCTION else None
137
+ if api_key and ("DANA_ENV" in api_key or "ENV" in api_key):
138
+ self.host = "https://api.sandbox.dana.id" if (api_key["DANA_ENV"] == Env.SANDBOX or api_key["ENV"] == Env.SANDBOX) else \
139
+ "https://api.saas.dana.id" if (api_key["DANA_ENV"] == Env.PRODUCTION or api_key["ENV"] == Env.PRODUCTION) else None
138
140
  self._base_path = self.host
139
141
  else:
140
142
  self.host = host or "https://api.sandbox.dana.id"
@@ -329,10 +331,10 @@ class OpenApiConfiguration(BaseConfiguration):
329
331
 
330
332
  def get_host_settings(self) -> List[HostSetting]:
331
333
  """Gets an array of host settings"""
332
- if self.api_key and "ENV" in self.api_key:
333
- if self.api_key["ENV"] == Env.SANDBOX:
334
+ if self.api_key and ("DANA_ENV" in self.api_key or "ENV" in self.api_key):
335
+ if self.api_key["DANA_ENV"] == Env.SANDBOX or self.api_key["ENV"] == Env.SANDBOX:
334
336
  return [{'url': "https://api.sandbox.dana.id", 'description': "Sandbox server"}]
335
- elif self.api_key["ENV"] == Env.PRODUCTION:
337
+ elif self.api_key["DANA_ENV"] == Env.PRODUCTION or self.api_key["ENV"] == Env.PRODUCTION:
336
338
  return [{'url': "https://api.saas.dana.id", 'description': "Production server"}]
337
339
 
338
340
  return [{'url': "https://api.sandbox.dana.id", 'description': "Default sandbox server"}]
@@ -130,6 +130,7 @@ AuthSettings = TypedDict(
130
130
  "X_PARTNER_ID": APIKeyAuthSetting,
131
131
  "CHANNEL_ID": APIKeyAuthSetting,
132
132
  "ENV": APIKeyAuthSetting,
133
+ "DANA_ENV": APIKeyAuthSetting,
133
134
  },
134
135
  total=False,
135
136
  )
@@ -229,10 +230,10 @@ class SnapConfiguration(BaseConfiguration):
229
230
  ) -> None:
230
231
  """Constructor
231
232
  """
232
- self.host = "http://api.sandbox.dana.id" if api_key["ENV"] == Env.SANDBOX else \
233
- "https://api.saas.dana.id" if api_key["ENV"] == Env.PRODUCTION else None
234
- self._base_path = "http://api.sandbox.dana.id" if api_key["ENV"] == Env.SANDBOX else \
235
- "https://api.saas.dana.id" if api_key["ENV"] == Env.PRODUCTION else None
233
+ self.host = "http://api.sandbox.dana.id" if (api_key["DANA_ENV"] == Env.SANDBOX or api_key["ENV"] == Env.SANDBOX) else \
234
+ "https://api.saas.dana.id" if (api_key["DANA_ENV"] == Env.PRODUCTION or api_key["ENV"] == Env.PRODUCTION) else None
235
+ self._base_path = "http://api.sandbox.dana.id" if (api_key["DANA_ENV"] == Env.SANDBOX or api_key["ENV"] == Env.SANDBOX) else \
236
+ "https://api.saas.dana.id" if (api_key["DANA_ENV"] == Env.PRODUCTION or api_key["ENV"] == Env.PRODUCTION) else None
236
237
  """Default Base url
237
238
  """
238
239
  self.server_index = 0 if server_index is None and host is None else server_index
@@ -587,12 +588,12 @@ class SnapConfiguration(BaseConfiguration):
587
588
  'url': "http://api.sandbox.dana.id",
588
589
  'description': "No description provided",
589
590
  }
590
- ] if self.api_key["ENV"] == Env.SANDBOX else [
591
+ ] if (self.api_key["DANA_ENV"] == Env.SANDBOX or self.api_key["ENV"] == Env.SANDBOX) else [
591
592
  {
592
593
  'url': "https://api.saas.dana.id",
593
594
  'description': "No description provided",
594
595
  }
595
- ] if self.api_key["ENV"] == Env.PRODUCTION else None
596
+ ] if (self.api_key["DANA_ENV"] == Env.PRODUCTION or self.api_key["ENV"] == Env.PRODUCTION) else None
596
597
 
597
598
  return host_settings
598
599
 
@@ -14,11 +14,13 @@
14
14
 
15
15
  from cryptography.hazmat.primitives import hashes, serialization
16
16
  from cryptography.hazmat.primitives.asymmetric import padding
17
- from cryptography.hazmat.primitives.serialization import load_pem_private_key
17
+ from cryptography.hazmat.primitives.serialization import load_pem_private_key, load_pem_public_key
18
18
  from cryptography.hazmat.backends import default_backend
19
+ import re
19
20
  import base64
20
21
  from hashlib import sha256
21
22
  import uuid
23
+ import os
22
24
  import json
23
25
  from typing import Any, List, Mapping
24
26
  from datetime import datetime, timedelta, timezone
@@ -56,6 +58,10 @@ class SnapHeader:
56
58
  X_PARTNER_ID, X_EXTERNALID, X_IP_ADDRESS,
57
59
  X_DEVICE_ID, X_LATITUDE, X_LONGITUDE, CHANNEL_ID
58
60
  ]
61
+ SnapBalanceInquiryRuntimeHeaders: List[str] = [
62
+ AUTHORIZATION_CUSTOMER, X_TIMESTAMP, X_SIGNATURE,
63
+ X_PARTNER_ID, X_EXTERNALID, X_DEVICE_ID, CHANNEL_ID
64
+ ]
59
65
 
60
66
  @staticmethod
61
67
  def merge_with_snap_runtime_headers(auth_from_users: List[str], scenario: str="") -> List[str]:
@@ -79,9 +85,132 @@ class SnapHeader:
79
85
  elif scenario == "apply_ott" or scenario == "unbinding_account":
80
86
  return list(set(filtered_auth).union(SnapHeader.SnapApplyOTTRuntimeHeaders))
81
87
 
88
+ elif scenario == "balance_inquiry":
89
+ return list(set(filtered_auth).union(SnapHeader.SnapBalanceInquiryRuntimeHeaders))
90
+
82
91
  else:
83
92
  return list(set(filtered_auth).union(SnapHeader.SnapRuntimeHeaders))
84
93
 
94
+ @staticmethod
95
+ def convert_to_pem(key: str, key_type: str) -> str:
96
+ """
97
+ Convert a key to PEM format
98
+
99
+ Args:
100
+ key: The key as a string
101
+ key_type: Type of key ("PRIVATE" or "PUBLIC")
102
+
103
+ Returns:
104
+ The key in PEM format
105
+ """
106
+ # Determine if this is an RSA key or generic private key format
107
+ possible_headers = [
108
+ f"-----BEGIN {key_type} KEY-----",
109
+ f"-----BEGIN RSA {key_type} KEY-----"
110
+ ]
111
+ possible_footers = [
112
+ f"-----END {key_type} KEY-----",
113
+ f"-----END RSA {key_type} KEY-----"
114
+ ]
115
+
116
+ delimiter = "\n"
117
+ header_found = None
118
+ footer_found = None
119
+
120
+ # Clean up the key first
121
+ key = key.strip()
122
+
123
+ # Replace escaped newlines with actual newlines
124
+ key = key.replace('\\n', "\n")
125
+
126
+ # Check if key already has headers/footers
127
+ for index, header in enumerate(possible_headers):
128
+ if header in key and possible_footers[index] in key:
129
+ header_found = header
130
+ footer_found = possible_footers[index]
131
+ break
132
+
133
+ # If headers/footers found, extract and clean the body
134
+ if header_found is not None and footer_found is not None:
135
+ # Extract body between header and footer
136
+ parts = key.split(header_found, 1)
137
+ parts = parts[1].split(footer_found, 1)
138
+ body = parts[0].strip()
139
+
140
+ # Keep the original format but ensure proper line breaks
141
+ body = re.sub(r'\s+', '', body) # Remove all whitespace
142
+ # Format with proper line breaks - chunk into 64-character lines
143
+ formatted_body = ''
144
+ for i in range(0, len(body), 64):
145
+ formatted_body += body[i:i+64] + delimiter
146
+
147
+ return header_found + delimiter + formatted_body + footer_found
148
+
149
+ # For keys without headers/footers - try both RSA and standard formats
150
+ # Remove all whitespace
151
+ clean_key = re.sub(r'\s+', '', key)
152
+ # Format with proper line breaks
153
+ formatted_body = ''
154
+ for i in range(0, len(clean_key), 64):
155
+ formatted_body += clean_key[i:i+64] + delimiter
156
+
157
+ # First attempt standard key format
158
+ standard_header = f"-----BEGIN {key_type} KEY-----"
159
+ standard_footer = f"-----END {key_type} KEY-----"
160
+ formatted_key = standard_header + delimiter + formatted_body + standard_footer
161
+
162
+ # Try to validate the key using cryptography library
163
+ try:
164
+ # For private keys
165
+ if key_type == "PRIVATE":
166
+ load_pem_private_key(formatted_key.encode(), password=None, backend=default_backend())
167
+ return formatted_key
168
+ # For public keys
169
+ elif key_type == "PUBLIC":
170
+ load_pem_public_key(formatted_key.encode(), backend=default_backend())
171
+ return formatted_key
172
+ except Exception:
173
+ # If standard format fails, try RSA format
174
+ pass
175
+
176
+ # Try RSA format
177
+ rsa_header = f"-----BEGIN RSA {key_type} KEY-----"
178
+ rsa_footer = f"-----END RSA {key_type} KEY-----"
179
+ rsa_formatted_key = rsa_header + delimiter + formatted_body + rsa_footer
180
+
181
+ return rsa_formatted_key
182
+
183
+ @staticmethod
184
+ def get_usable_private_key(private_key: str = None, private_key_path: str = None) -> str:
185
+ """
186
+ Get usable private key from either file path or string content
187
+
188
+ Args:
189
+ private_key: Optional private key content as string
190
+ private_key_path: Optional path to private key file
191
+
192
+ Returns:
193
+ str: Properly formatted private key as PEM
194
+
195
+ Raises:
196
+ ValueError: If neither private_key nor private_key_path is provided or valid
197
+ """
198
+ # If private_key_path is provided and exists, it takes precedence over private_key
199
+ if private_key_path and os.path.exists(private_key_path):
200
+ with open(private_key_path, 'rb') as pem_in:
201
+ pemlines = pem_in.read()
202
+ key = pemlines.decode('utf-8')
203
+ return SnapHeader.convert_to_pem(key, "PRIVATE")
204
+
205
+ # Handle direct private key string
206
+ if private_key:
207
+ # Replace escaped newlines with actual newlines
208
+ key = private_key.replace("\\n", "\n")
209
+ return SnapHeader.convert_to_pem(key, "PRIVATE")
210
+
211
+ # Throw exception if neither key is provided
212
+ raise ValueError("Provide one of private_key or private_key_path")
213
+
85
214
  @staticmethod
86
215
  def get_snap_generated_auth(
87
216
  method: str,
@@ -100,22 +229,11 @@ class SnapHeader:
100
229
  'type': 'api_key',
101
230
  'value': value
102
231
  }
103
-
104
- def get_usable_private_key(private_key: str, private_key_path: str) -> str:
105
232
 
106
- if private_key_path:
107
- with open(private_key_path, 'rb') as pem_in:
108
- pemlines = pem_in.read()
109
- private_key = load_pem_private_key(pemlines, None, default_backend())
110
- return private_key
111
- elif private_key:
112
- private_key = private_key.replace("\\n", "\n")
113
- return private_key
114
- else:
115
- raise ValueError("Provide one of private_key or private_key_path")
116
233
 
117
- private_key = get_usable_private_key(private_key=private_key,
118
- private_key_path=private_key_path)
234
+ # Use the class method to get the usable private key
235
+ private_key = SnapHeader.get_usable_private_key(private_key=private_key,
236
+ private_key_path=private_key_path)
119
237
 
120
238
  jakarta_time = datetime.now(timezone.utc) + timedelta(hours=7)
121
239
  timestamp = jakarta_time.strftime('%Y-%m-%dT%H:%M:%S+07:00')
@@ -164,6 +282,17 @@ class SnapHeader:
164
282
  X_LONGITUDE: generateApiKeyAuthSetting(key=X_LONGITUDE, value=body_dict.get('additionalInfo', {}).get('longitude', '')),
165
283
  CHANNEL_ID: generateApiKeyAuthSetting(key=CHANNEL_ID, value='95221')
166
284
  }
285
+ elif scenario == "balance_inquiry":
286
+ external_id = str(uuid.uuid4())
287
+ body_dict: dict = json.loads(body)
288
+ return {
289
+ AUTHORIZATION_CUSTOMER: generateApiKeyAuthSetting(key=AUTHORIZATION_CUSTOMER, value=f"Bearer {body_dict.get('additionalInfo', {}).get('accessToken', '')}"),
290
+ X_TIMESTAMP: generateApiKeyAuthSetting(key=X_TIMESTAMP, value=timestamp),
291
+ X_SIGNATURE: generateApiKeyAuthSetting(key=X_SIGNATURE, value=encoded_signature),
292
+ X_EXTERNALID: generateApiKeyAuthSetting(key=X_EXTERNALID, value=external_id),
293
+ X_DEVICE_ID: generateApiKeyAuthSetting(key=X_DEVICE_ID, value=body_dict.get('additionalInfo', {}).get('deviceId', '')),
294
+ CHANNEL_ID: generateApiKeyAuthSetting(key=CHANNEL_ID, value='95221')
295
+ }
167
296
  else:
168
297
  external_id = str(uuid.uuid4())
169
298
  return {
@@ -287,10 +287,10 @@ class WidgetApi:
287
287
  _header_params['Content-Type'] = _default_content_type
288
288
  # authentication setting
289
289
  _auth_settings: List[str] = [
290
+ 'DANA_ENV',
290
291
  'X_PARTNER_ID',
291
292
  'PRIVATE_KEY',
292
- 'PRIVATE_KEY_PATH',
293
- 'ENV'
293
+ 'PRIVATE_KEY_PATH'
294
294
  ]
295
295
  # merge list of auth settings
296
296
  # with list of auth generated at runtime for headers
@@ -546,12 +546,12 @@ class WidgetApi:
546
546
  _header_params['Content-Type'] = _default_content_type
547
547
  # authentication setting
548
548
  _auth_settings: List[str] = [
549
+ 'DANA_ENV',
549
550
  'ORIGIN',
550
551
  'X_PARTNER_ID',
551
552
  'CHANNEL_ID',
552
553
  'PRIVATE_KEY',
553
- 'PRIVATE_KEY_PATH',
554
- 'ENV'
554
+ 'PRIVATE_KEY_PATH'
555
555
  ]
556
556
  # merge list of auth settings
557
557
  # with list of auth generated at runtime for headers
@@ -807,10 +807,10 @@ class WidgetApi:
807
807
  _header_params['Content-Type'] = _default_content_type
808
808
  # authentication setting
809
809
  _auth_settings: List[str] = [
810
+ 'DANA_ENV',
810
811
  'X_PARTNER_ID',
811
812
  'PRIVATE_KEY',
812
- 'PRIVATE_KEY_PATH',
813
- 'ENV'
813
+ 'PRIVATE_KEY_PATH'
814
814
  ]
815
815
  # merge list of auth settings
816
816
  # with list of auth generated at runtime for headers
@@ -1074,13 +1074,15 @@ class WidgetApi:
1074
1074
  ]
1075
1075
  # merge list of auth settings
1076
1076
  # with list of auth generated at runtime for headers
1077
- _auth_settings = SnapHeader.merge_with_snap_runtime_headers(_auth_settings)
1077
+ _auth_settings = SnapHeader.merge_with_snap_runtime_headers(_auth_settings, scenario="balance_inquiry")
1078
1078
  _generated_auth = SnapHeader.get_snap_generated_auth(
1079
1079
  method='POST',
1080
1080
  resource_path='/v1.0/balance-inquiry.htm',
1081
1081
  body=balance_inquiry_request.to_json(),
1082
1082
  private_key=self.api_client.configuration.get_api_key_with_prefix('PRIVATE_KEY'),
1083
- private_key_path=self.api_client.configuration.get_api_key_with_prefix('PRIVATE_KEY_PATH')
1083
+ private_key_path=self.api_client.configuration.get_api_key_with_prefix('PRIVATE_KEY_PATH'),
1084
+ scenario="balance_inquiry",
1085
+ client_key=self.api_client.configuration.get_api_key_with_prefix('X_PARTNER_ID')
1084
1086
  )
1085
1087
  return self.api_client.param_serialize(
1086
1088
  method='POST',
@@ -2326,12 +2328,12 @@ class WidgetApi:
2326
2328
  _header_params['Content-Type'] = _default_content_type
2327
2329
  # authentication setting
2328
2330
  _auth_settings: List[str] = [
2331
+ 'DANA_ENV',
2329
2332
  'ORIGIN',
2330
2333
  'X_PARTNER_ID',
2331
2334
  'CHANNEL_ID',
2332
2335
  'PRIVATE_KEY',
2333
- 'PRIVATE_KEY_PATH',
2334
- 'ENV'
2336
+ 'PRIVATE_KEY_PATH'
2335
2337
  ]
2336
2338
  # merge list of auth settings
2337
2339
  # with list of auth generated at runtime for headers