kintsugi_sdk 5.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. checksums.yaml +7 -0
  2. data/lib/crystalline/metadata_fields.rb +209 -0
  3. data/lib/crystalline/module.rb +92 -0
  4. data/lib/crystalline/types.rb +78 -0
  5. data/lib/crystalline/utils.rb +56 -0
  6. data/lib/crystalline.rb +13 -0
  7. data/lib/kintsugi_sdk/addressvalidation.rb +350 -0
  8. data/lib/kintsugi_sdk/customers.rb +981 -0
  9. data/lib/kintsugi_sdk/exemptions.rb +779 -0
  10. data/lib/kintsugi_sdk/models/callbacks.rb +12 -0
  11. data/lib/kintsugi_sdk/models/errors/apierror.rb +37 -0
  12. data/lib/kintsugi_sdk/models/errors/apierror.rbi +16 -0
  13. data/lib/kintsugi_sdk/models/errors/backend_src_address_validation_responses_validationerrorresponse.rb +33 -0
  14. data/lib/kintsugi_sdk/models/errors/backend_src_address_validation_responses_validationerrorresponse.rbi +13 -0
  15. data/lib/kintsugi_sdk/models/errors/backend_src_customers_responses_validationerrorresponse.rb +33 -0
  16. data/lib/kintsugi_sdk/models/errors/backend_src_customers_responses_validationerrorresponse.rbi +13 -0
  17. data/lib/kintsugi_sdk/models/errors/backend_src_exemptions_responses_validationerrorresponse.rb +33 -0
  18. data/lib/kintsugi_sdk/models/errors/backend_src_exemptions_responses_validationerrorresponse.rbi +13 -0
  19. data/lib/kintsugi_sdk/models/errors/backend_src_products_responses_validationerrorresponse.rb +33 -0
  20. data/lib/kintsugi_sdk/models/errors/backend_src_products_responses_validationerrorresponse.rbi +13 -0
  21. data/lib/kintsugi_sdk/models/errors/backend_src_tax_estimation_responses_validationerrorresponse.rb +33 -0
  22. data/lib/kintsugi_sdk/models/errors/backend_src_tax_estimation_responses_validationerrorresponse.rbi +13 -0
  23. data/lib/kintsugi_sdk/models/errors/backend_src_transactions_responses_validationerrorresponse.rb +33 -0
  24. data/lib/kintsugi_sdk/models/errors/backend_src_transactions_responses_validationerrorresponse.rbi +13 -0
  25. data/lib/kintsugi_sdk/models/errors/errorresponse.rb +33 -0
  26. data/lib/kintsugi_sdk/models/errors/errorresponse.rbi +13 -0
  27. data/lib/kintsugi_sdk/models/errors/httpvalidationerror.rb +33 -0
  28. data/lib/kintsugi_sdk/models/errors/httpvalidationerror.rbi +13 -0
  29. data/lib/kintsugi_sdk/models/errors.rb +20 -0
  30. data/lib/kintsugi_sdk/models/ops/createtransactionbycustomer_request.rb +37 -0
  31. data/lib/kintsugi_sdk/models/ops/createtransactionbycustomer_request.rbi +15 -0
  32. data/lib/kintsugi_sdk/models/ops/estimate_tax_v1_tax_estimate_post_request.rb +39 -0
  33. data/lib/kintsugi_sdk/models/ops/estimate_tax_v1_tax_estimate_post_request.rbi +15 -0
  34. data/lib/kintsugi_sdk/models/ops/get_customer_by_external_id_v1_customers_external_external_id_get_request.rb +33 -0
  35. data/lib/kintsugi_sdk/models/ops/get_customer_by_external_id_v1_customers_external_external_id_get_request.rbi +13 -0
  36. data/lib/kintsugi_sdk/models/ops/get_customer_by_id_v1_customers_customer_id_get_request.rb +33 -0
  37. data/lib/kintsugi_sdk/models/ops/get_customer_by_id_v1_customers_customer_id_get_request.rbi +13 -0
  38. data/lib/kintsugi_sdk/models/ops/get_customers_v1_request.rb +57 -0
  39. data/lib/kintsugi_sdk/models/ops/get_customers_v1_request.rbi +25 -0
  40. data/lib/kintsugi_sdk/models/ops/get_exemption_by_id_v1_exemptions_exemption_id_get_request.rb +33 -0
  41. data/lib/kintsugi_sdk/models/ops/get_exemption_by_id_v1_exemptions_exemption_id_get_request.rbi +13 -0
  42. data/lib/kintsugi_sdk/models/ops/get_exemptions_v1_exemptions_get_request.rb +73 -0
  43. data/lib/kintsugi_sdk/models/ops/get_exemptions_v1_exemptions_get_request.rbi +33 -0
  44. data/lib/kintsugi_sdk/models/ops/get_nexus_for_org_v1_nexus_get_request.rb +57 -0
  45. data/lib/kintsugi_sdk/models/ops/get_nexus_for_org_v1_nexus_get_request.rbi +25 -0
  46. data/lib/kintsugi_sdk/models/ops/get_product_by_id_v1_products_product_id_get_request.rb +33 -0
  47. data/lib/kintsugi_sdk/models/ops/get_product_by_id_v1_products_product_id_get_request.rbi +13 -0
  48. data/lib/kintsugi_sdk/models/ops/get_products_v1_products_get_request.rb +61 -0
  49. data/lib/kintsugi_sdk/models/ops/get_products_v1_products_get_request.rbi +27 -0
  50. data/lib/kintsugi_sdk/models/ops/get_transaction_by_id_v1_transactions_transaction_id_get_request.rb +33 -0
  51. data/lib/kintsugi_sdk/models/ops/get_transaction_by_id_v1_transactions_transaction_id_get_request.rbi +13 -0
  52. data/lib/kintsugi_sdk/models/ops/get_transactions_v1_transactions_get_request.rb +107 -0
  53. data/lib/kintsugi_sdk/models/ops/get_transactions_v1_transactions_get_request.rbi +45 -0
  54. data/lib/kintsugi_sdk/models/ops/getexemptionattachments_request.rb +34 -0
  55. data/lib/kintsugi_sdk/models/ops/getexemptionattachments_request.rbi +13 -0
  56. data/lib/kintsugi_sdk/models/ops/gettransactionbyexternalid_request.rb +33 -0
  57. data/lib/kintsugi_sdk/models/ops/gettransactionbyexternalid_request.rbi +13 -0
  58. data/lib/kintsugi_sdk/models/ops/gettransactionsbycustomer_request.rb +33 -0
  59. data/lib/kintsugi_sdk/models/ops/gettransactionsbycustomer_request.rbi +13 -0
  60. data/lib/kintsugi_sdk/models/ops/gettransactionsbyfiling_request.rb +35 -0
  61. data/lib/kintsugi_sdk/models/ops/gettransactionsbyfiling_request.rbi +13 -0
  62. data/lib/kintsugi_sdk/models/ops/search_v1_address_validation_search_post_security.rb +33 -0
  63. data/lib/kintsugi_sdk/models/ops/search_v1_address_validation_search_post_security.rbi +13 -0
  64. data/lib/kintsugi_sdk/models/ops/update_customer_v1_customers_customer_id_put_request.rb +37 -0
  65. data/lib/kintsugi_sdk/models/ops/update_customer_v1_customers_customer_id_put_request.rbi +15 -0
  66. data/lib/kintsugi_sdk/models/ops/update_product_v1_products_product_id_put_request.rb +37 -0
  67. data/lib/kintsugi_sdk/models/ops/update_product_v1_products_product_id_put_request.rbi +15 -0
  68. data/lib/kintsugi_sdk/models/ops/update_transaction_v1_transactions_transaction_id_put_request.rb +37 -0
  69. data/lib/kintsugi_sdk/models/ops/update_transaction_v1_transactions_transaction_id_put_request.rbi +15 -0
  70. data/lib/kintsugi_sdk/models/ops/uploadexemptioncert_request.rb +37 -0
  71. data/lib/kintsugi_sdk/models/ops/uploadexemptioncert_request.rbi +15 -0
  72. data/lib/kintsugi_sdk/models/ops.rb +32 -0
  73. data/lib/kintsugi_sdk/models/shared/addressbase.rb +65 -0
  74. data/lib/kintsugi_sdk/models/shared/addressbase.rbi +29 -0
  75. data/lib/kintsugi_sdk/models/shared/addresses.rb +76 -0
  76. data/lib/kintsugi_sdk/models/shared/addresses.rbi +33 -0
  77. data/lib/kintsugi_sdk/models/shared/addressresponsedata.rb +61 -0
  78. data/lib/kintsugi_sdk/models/shared/addressresponsedata.rbi +27 -0
  79. data/lib/kintsugi_sdk/models/shared/addresssearchresponse.rb +45 -0
  80. data/lib/kintsugi_sdk/models/shared/addresssearchresponse.rbi +19 -0
  81. data/lib/kintsugi_sdk/models/shared/addressstatus.rb +26 -0
  82. data/lib/kintsugi_sdk/models/shared/addressstatus.rbi +11 -0
  83. data/lib/kintsugi_sdk/models/shared/addresssubmittedresponse.rb +61 -0
  84. data/lib/kintsugi_sdk/models/shared/addresssubmittedresponse.rbi +27 -0
  85. data/lib/kintsugi_sdk/models/shared/addresstype.rb +24 -0
  86. data/lib/kintsugi_sdk/models/shared/addresstype.rbi +11 -0
  87. data/lib/kintsugi_sdk/models/shared/appliedto.rb +22 -0
  88. data/lib/kintsugi_sdk/models/shared/appliedto.rbi +11 -0
  89. data/lib/kintsugi_sdk/models/shared/attachmentread.rb +42 -0
  90. data/lib/kintsugi_sdk/models/shared/attachmentread.rbi +17 -0
  91. data/lib/kintsugi_sdk/models/shared/backend_src_address_validation_responses_validationerroritem.rb +49 -0
  92. data/lib/kintsugi_sdk/models/shared/backend_src_address_validation_responses_validationerroritem.rbi +21 -0
  93. data/lib/kintsugi_sdk/models/shared/backend_src_customers_responses_validationerroritem.rb +49 -0
  94. data/lib/kintsugi_sdk/models/shared/backend_src_customers_responses_validationerroritem.rbi +21 -0
  95. data/lib/kintsugi_sdk/models/shared/backend_src_exemptions_models_exemptionread.rb +87 -0
  96. data/lib/kintsugi_sdk/models/shared/backend_src_exemptions_models_exemptionread.rbi +39 -0
  97. data/lib/kintsugi_sdk/models/shared/backend_src_exemptions_responses_validationerroritem.rb +50 -0
  98. data/lib/kintsugi_sdk/models/shared/backend_src_exemptions_responses_validationerroritem.rbi +21 -0
  99. data/lib/kintsugi_sdk/models/shared/backend_src_exemptions_serializers_exemptionread.rb +81 -0
  100. data/lib/kintsugi_sdk/models/shared/backend_src_exemptions_serializers_exemptionread.rbi +37 -0
  101. data/lib/kintsugi_sdk/models/shared/backend_src_products_responses_validationerroritem.rb +50 -0
  102. data/lib/kintsugi_sdk/models/shared/backend_src_products_responses_validationerroritem.rbi +21 -0
  103. data/lib/kintsugi_sdk/models/shared/backend_src_tax_estimation_responses_validationerroritem.rb +49 -0
  104. data/lib/kintsugi_sdk/models/shared/backend_src_tax_estimation_responses_validationerroritem.rbi +21 -0
  105. data/lib/kintsugi_sdk/models/shared/backend_src_transactions_responses_validationerroritem.rb +50 -0
  106. data/lib/kintsugi_sdk/models/shared/backend_src_transactions_responses_validationerroritem.rbi +21 -0
  107. data/lib/kintsugi_sdk/models/shared/body_upload_exemption_certificate_v1_exemptions_exemption_id_attachments_post.rb +33 -0
  108. data/lib/kintsugi_sdk/models/shared/body_upload_exemption_certificate_v1_exemptions_exemption_id_attachments_post.rbi +13 -0
  109. data/lib/kintsugi_sdk/models/shared/countrycodeenum.rb +270 -0
  110. data/lib/kintsugi_sdk/models/shared/countrycodeenum.rbi +11 -0
  111. data/lib/kintsugi_sdk/models/shared/currencyenum.rb +182 -0
  112. data/lib/kintsugi_sdk/models/shared/currencyenum.rbi +11 -0
  113. data/lib/kintsugi_sdk/models/shared/customerbase.rb +97 -0
  114. data/lib/kintsugi_sdk/models/shared/customerbase.rbi +45 -0
  115. data/lib/kintsugi_sdk/models/shared/customerbasebase.rb +109 -0
  116. data/lib/kintsugi_sdk/models/shared/customerbasebase.rbi +51 -0
  117. data/lib/kintsugi_sdk/models/shared/customerbasepublic.rb +97 -0
  118. data/lib/kintsugi_sdk/models/shared/customerbasepublic.rbi +45 -0
  119. data/lib/kintsugi_sdk/models/shared/customercreate.rb +97 -0
  120. data/lib/kintsugi_sdk/models/shared/customercreate.rbi +45 -0
  121. data/lib/kintsugi_sdk/models/shared/customerread.rb +105 -0
  122. data/lib/kintsugi_sdk/models/shared/customerread.rbi +49 -0
  123. data/lib/kintsugi_sdk/models/shared/customerupdate.rb +89 -0
  124. data/lib/kintsugi_sdk/models/shared/customerupdate.rbi +41 -0
  125. data/lib/kintsugi_sdk/models/shared/discountbuilder.rb +41 -0
  126. data/lib/kintsugi_sdk/models/shared/discountbuilder.rbi +17 -0
  127. data/lib/kintsugi_sdk/models/shared/exemption.rb +91 -0
  128. data/lib/kintsugi_sdk/models/shared/exemption.rbi +41 -0
  129. data/lib/kintsugi_sdk/models/shared/exemptioncreate.rb +73 -0
  130. data/lib/kintsugi_sdk/models/shared/exemptioncreate.rbi +33 -0
  131. data/lib/kintsugi_sdk/models/shared/exemptionrequired.rb +57 -0
  132. data/lib/kintsugi_sdk/models/shared/exemptionrequired.rbi +25 -0
  133. data/lib/kintsugi_sdk/models/shared/exemptionstatus.rb +25 -0
  134. data/lib/kintsugi_sdk/models/shared/exemptionstatus.rbi +11 -0
  135. data/lib/kintsugi_sdk/models/shared/exemptiontype.rb +23 -0
  136. data/lib/kintsugi_sdk/models/shared/exemptiontype.rbi +11 -0
  137. data/lib/kintsugi_sdk/models/shared/fastapi_pagination_default_page_exemptionread_2.rb +49 -0
  138. data/lib/kintsugi_sdk/models/shared/fastapi_pagination_default_page_exemptionread_2.rbi +21 -0
  139. data/lib/kintsugi_sdk/models/shared/file.rb +37 -0
  140. data/lib/kintsugi_sdk/models/shared/file.rbi +15 -0
  141. data/lib/kintsugi_sdk/models/shared/jurisdictiontype.rb +28 -0
  142. data/lib/kintsugi_sdk/models/shared/jurisdictiontype.rbi +11 -0
  143. data/lib/kintsugi_sdk/models/shared/nexusresponse.rb +253 -0
  144. data/lib/kintsugi_sdk/models/shared/nexusresponse.rbi +121 -0
  145. data/lib/kintsugi_sdk/models/shared/nexusstateenum.rb +27 -0
  146. data/lib/kintsugi_sdk/models/shared/nexusstateenum.rbi +11 -0
  147. data/lib/kintsugi_sdk/models/shared/nexusstatusenum.rb +23 -0
  148. data/lib/kintsugi_sdk/models/shared/nexusstatusenum.rbi +11 -0
  149. data/lib/kintsugi_sdk/models/shared/nexustypeenum.rb +24 -0
  150. data/lib/kintsugi_sdk/models/shared/nexustypeenum.rbi +11 -0
  151. data/lib/kintsugi_sdk/models/shared/page_customerread_.rb +49 -0
  152. data/lib/kintsugi_sdk/models/shared/page_customerread_.rbi +21 -0
  153. data/lib/kintsugi_sdk/models/shared/page_nexusresponse_.rb +49 -0
  154. data/lib/kintsugi_sdk/models/shared/page_nexusresponse_.rbi +21 -0
  155. data/lib/kintsugi_sdk/models/shared/page_productread_.rb +49 -0
  156. data/lib/kintsugi_sdk/models/shared/page_productread_.rbi +21 -0
  157. data/lib/kintsugi_sdk/models/shared/page_transactionestimateresponse_.rb +49 -0
  158. data/lib/kintsugi_sdk/models/shared/page_transactionestimateresponse_.rbi +21 -0
  159. data/lib/kintsugi_sdk/models/shared/page_transactionread_.rb +49 -0
  160. data/lib/kintsugi_sdk/models/shared/page_transactionread_.rbi +21 -0
  161. data/lib/kintsugi_sdk/models/shared/periodmodelenum.rb +29 -0
  162. data/lib/kintsugi_sdk/models/shared/periodmodelenum.rbi +11 -0
  163. data/lib/kintsugi_sdk/models/shared/processingstatusenum.rb +34 -0
  164. data/lib/kintsugi_sdk/models/shared/processingstatusenum.rbi +11 -0
  165. data/lib/kintsugi_sdk/models/shared/productcategories.rb +38 -0
  166. data/lib/kintsugi_sdk/models/shared/productcategories.rbi +15 -0
  167. data/lib/kintsugi_sdk/models/shared/productcategoryenum.rb +25 -0
  168. data/lib/kintsugi_sdk/models/shared/productcategoryenum.rbi +11 -0
  169. data/lib/kintsugi_sdk/models/shared/productcodeenum.rb +82 -0
  170. data/lib/kintsugi_sdk/models/shared/productcodeenum.rbi +11 -0
  171. data/lib/kintsugi_sdk/models/shared/productcreatemanual.rb +61 -0
  172. data/lib/kintsugi_sdk/models/shared/productcreatemanual.rbi +27 -0
  173. data/lib/kintsugi_sdk/models/shared/productread.rb +81 -0
  174. data/lib/kintsugi_sdk/models/shared/productread.rbi +37 -0
  175. data/lib/kintsugi_sdk/models/shared/productstatusenum.rb +23 -0
  176. data/lib/kintsugi_sdk/models/shared/productstatusenum.rbi +11 -0
  177. data/lib/kintsugi_sdk/models/shared/productsubcategory.rb +46 -0
  178. data/lib/kintsugi_sdk/models/shared/productsubcategory.rbi +19 -0
  179. data/lib/kintsugi_sdk/models/shared/productsubcategoryenum.rb +83 -0
  180. data/lib/kintsugi_sdk/models/shared/productsubcategoryenum.rbi +11 -0
  181. data/lib/kintsugi_sdk/models/shared/productupdate.rb +70 -0
  182. data/lib/kintsugi_sdk/models/shared/productupdate.rbi +31 -0
  183. data/lib/kintsugi_sdk/models/shared/registration.rb +28 -0
  184. data/lib/kintsugi_sdk/models/shared/registration.rbi +11 -0
  185. data/lib/kintsugi_sdk/models/shared/registrationsregimeenum.rb +22 -0
  186. data/lib/kintsugi_sdk/models/shared/registrationsregimeenum.rbi +11 -0
  187. data/lib/kintsugi_sdk/models/shared/relatedentitytype.rb +24 -0
  188. data/lib/kintsugi_sdk/models/shared/relatedentitytype.rbi +11 -0
  189. data/lib/kintsugi_sdk/models/shared/salesortransactionsenum.rb +24 -0
  190. data/lib/kintsugi_sdk/models/shared/salesortransactionsenum.rbi +11 -0
  191. data/lib/kintsugi_sdk/models/shared/security.rb +37 -0
  192. data/lib/kintsugi_sdk/models/shared/security.rbi +15 -0
  193. data/lib/kintsugi_sdk/models/shared/sourceenum.rb +70 -0
  194. data/lib/kintsugi_sdk/models/shared/sourceenum.rbi +11 -0
  195. data/lib/kintsugi_sdk/models/shared/statusenum.rb +22 -0
  196. data/lib/kintsugi_sdk/models/shared/statusenum.rbi +11 -0
  197. data/lib/kintsugi_sdk/models/shared/taxexemptionenum.rb +31 -0
  198. data/lib/kintsugi_sdk/models/shared/taxexemptionenum.rbi +11 -0
  199. data/lib/kintsugi_sdk/models/shared/taxitembuilder.rb +77 -0
  200. data/lib/kintsugi_sdk/models/shared/taxitembuilder.rbi +35 -0
  201. data/lib/kintsugi_sdk/models/shared/taxitemestimate.rb +53 -0
  202. data/lib/kintsugi_sdk/models/shared/taxitemestimate.rbi +23 -0
  203. data/lib/kintsugi_sdk/models/shared/taxitemread.rb +73 -0
  204. data/lib/kintsugi_sdk/models/shared/taxitemread.rbi +33 -0
  205. data/lib/kintsugi_sdk/models/shared/taxitemreturnreasonenum.rb +25 -0
  206. data/lib/kintsugi_sdk/models/shared/taxitemreturnreasonenum.rbi +11 -0
  207. data/lib/kintsugi_sdk/models/shared/taxitemtypeenum.rb +23 -0
  208. data/lib/kintsugi_sdk/models/shared/taxitemtypeenum.rbi +11 -0
  209. data/lib/kintsugi_sdk/models/shared/taxliabilitysourceenum.rb +22 -0
  210. data/lib/kintsugi_sdk/models/shared/taxliabilitysourceenum.rbi +11 -0
  211. data/lib/kintsugi_sdk/models/shared/transactionaddressbuilder.rb +81 -0
  212. data/lib/kintsugi_sdk/models/shared/transactionaddressbuilder.rbi +37 -0
  213. data/lib/kintsugi_sdk/models/shared/transactionaddresspublic.rb +69 -0
  214. data/lib/kintsugi_sdk/models/shared/transactionaddresspublic.rbi +31 -0
  215. data/lib/kintsugi_sdk/models/shared/transactionaddressread_output.rb +85 -0
  216. data/lib/kintsugi_sdk/models/shared/transactionaddressread_output.rbi +39 -0
  217. data/lib/kintsugi_sdk/models/shared/transactioncreate.rb +235 -0
  218. data/lib/kintsugi_sdk/models/shared/transactioncreate.rbi +111 -0
  219. data/lib/kintsugi_sdk/models/shared/transactionestimatepublicrequest.rb +70 -0
  220. data/lib/kintsugi_sdk/models/shared/transactionestimatepublicrequest.rbi +31 -0
  221. data/lib/kintsugi_sdk/models/shared/transactionestimateresponse.rb +91 -0
  222. data/lib/kintsugi_sdk/models/shared/transactionestimateresponse.rbi +41 -0
  223. data/lib/kintsugi_sdk/models/shared/transactionestimateresponse_addresses.rb +80 -0
  224. data/lib/kintsugi_sdk/models/shared/transactionestimateresponse_addresses.rbi +35 -0
  225. data/lib/kintsugi_sdk/models/shared/transactionestimateresponse_type.rb +23 -0
  226. data/lib/kintsugi_sdk/models/shared/transactionestimateresponse_type.rbi +11 -0
  227. data/lib/kintsugi_sdk/models/shared/transactionexemptstatusenum.rb +26 -0
  228. data/lib/kintsugi_sdk/models/shared/transactionexemptstatusenum.rbi +11 -0
  229. data/lib/kintsugi_sdk/models/shared/transactionitembuilder.rb +141 -0
  230. data/lib/kintsugi_sdk/models/shared/transactionitembuilder.rbi +67 -0
  231. data/lib/kintsugi_sdk/models/shared/transactionitemcreateupdate.rb +141 -0
  232. data/lib/kintsugi_sdk/models/shared/transactionitemcreateupdate.rbi +67 -0
  233. data/lib/kintsugi_sdk/models/shared/transactionitemestimatebase.rb +78 -0
  234. data/lib/kintsugi_sdk/models/shared/transactionitemestimatebase.rbi +35 -0
  235. data/lib/kintsugi_sdk/models/shared/transactionitemestimateresponse.rb +98 -0
  236. data/lib/kintsugi_sdk/models/shared/transactionitemestimateresponse.rbi +45 -0
  237. data/lib/kintsugi_sdk/models/shared/transactionitemread.rb +149 -0
  238. data/lib/kintsugi_sdk/models/shared/transactionitemread.rbi +71 -0
  239. data/lib/kintsugi_sdk/models/shared/transactionpublicrequest.rb +194 -0
  240. data/lib/kintsugi_sdk/models/shared/transactionpublicrequest.rbi +91 -0
  241. data/lib/kintsugi_sdk/models/shared/transactionread.rb +259 -0
  242. data/lib/kintsugi_sdk/models/shared/transactionread.rbi +123 -0
  243. data/lib/kintsugi_sdk/models/shared/transactionrefundstatus.rb +24 -0
  244. data/lib/kintsugi_sdk/models/shared/transactionrefundstatus.rbi +11 -0
  245. data/lib/kintsugi_sdk/models/shared/transactionstatusenum.rb +27 -0
  246. data/lib/kintsugi_sdk/models/shared/transactionstatusenum.rbi +11 -0
  247. data/lib/kintsugi_sdk/models/shared/transactiontypeenum.rb +25 -0
  248. data/lib/kintsugi_sdk/models/shared/transactiontypeenum.rbi +11 -0
  249. data/lib/kintsugi_sdk/models/shared/transactionupdate.rb +235 -0
  250. data/lib/kintsugi_sdk/models/shared/transactionupdate.rbi +111 -0
  251. data/lib/kintsugi_sdk/models/shared/treatmentenum.rb +25 -0
  252. data/lib/kintsugi_sdk/models/shared/treatmentenum.rbi +11 -0
  253. data/lib/kintsugi_sdk/models/shared/type.rb +23 -0
  254. data/lib/kintsugi_sdk/models/shared/type.rbi +11 -0
  255. data/lib/kintsugi_sdk/models/shared/validationaddress.rb +73 -0
  256. data/lib/kintsugi_sdk/models/shared/validationaddress.rbi +31 -0
  257. data/lib/kintsugi_sdk/models/shared/validationerror.rb +41 -0
  258. data/lib/kintsugi_sdk/models/shared/validationerror.rbi +17 -0
  259. data/lib/kintsugi_sdk/models/shared.rb +104 -0
  260. data/lib/kintsugi_sdk/nexus.rb +155 -0
  261. data/lib/kintsugi_sdk/openapisdk.rb +104 -0
  262. data/lib/kintsugi_sdk/products.rb +756 -0
  263. data/lib/kintsugi_sdk/sdk_hooks/hooks.rb +95 -0
  264. data/lib/kintsugi_sdk/sdk_hooks/types.rb +170 -0
  265. data/lib/kintsugi_sdk/sdkconfiguration.rb +104 -0
  266. data/lib/kintsugi_sdk/sdkconfiguration.rbi +57 -0
  267. data/lib/kintsugi_sdk/taxestimation.rb +197 -0
  268. data/lib/kintsugi_sdk/transactions.rb +902 -0
  269. data/lib/kintsugi_sdk/utils/forms.rb +206 -0
  270. data/lib/kintsugi_sdk/utils/headers.rb +77 -0
  271. data/lib/kintsugi_sdk/utils/query_params.rb +131 -0
  272. data/lib/kintsugi_sdk/utils/request_bodies.rb +61 -0
  273. data/lib/kintsugi_sdk/utils/retries.rb +95 -0
  274. data/lib/kintsugi_sdk/utils/security.rb +130 -0
  275. data/lib/kintsugi_sdk/utils/url.rb +100 -0
  276. data/lib/kintsugi_sdk/utils/utils.rb +187 -0
  277. data/lib/kintsugi_sdk.rb +31 -0
  278. metadata +492 -0
@@ -0,0 +1,206 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'cgi'
7
+ require 'date'
8
+ require 'base64'
9
+ require 'sorbet-runtime'
10
+
11
+ module KintsugiSDK
12
+ module Utils
13
+ extend T::Sig
14
+
15
+ sig do
16
+ params(field_name: String, explode: T::Boolean, obj: Object, delimiter: String,
17
+ get_field_name_lambda: T.proc.params(obj_field: ::Crystalline::MetadataFields::Field).returns(String))
18
+ .returns(T::Hash[String, T::Array[String]])
19
+ end
20
+ def self._populate_form(field_name, explode, obj, delimiter, &get_field_name_lambda)
21
+ params = {}
22
+
23
+ return params if obj.nil?
24
+
25
+ if obj.respond_to? :fields
26
+ items = []
27
+ T.unsafe(obj).fields.each do |obj_field|
28
+ obj_field_name = get_field_name_lambda.call(obj_field)
29
+ next if obj_field_name == ''
30
+
31
+ val = obj.send(obj_field.name.to_sym)
32
+ next if val.nil?
33
+
34
+ if explode
35
+ params[obj_field_name] = [val_to_string(val)]
36
+ else
37
+ items.append("#{obj_field_name}#{delimiter}#{val_to_string(val)}")
38
+ end
39
+ end
40
+
41
+ params[field_name] = [items.join(delimiter)] if !items.empty?
42
+ elsif obj.is_a? Hash
43
+ items = []
44
+ obj.each do |key, value|
45
+ next if value.nil?
46
+
47
+ if explode
48
+ params[key] = val_to_string(value)
49
+ else
50
+ items.append("#{key}#{delimiter}#{val_to_string(value)}")
51
+ end
52
+ end
53
+ params[field_name] = [items.join(delimiter)] if !items.empty?
54
+
55
+ elsif obj.is_a? Array
56
+ items = []
57
+ obj.each do |value|
58
+ next if value.nil?
59
+
60
+ if explode
61
+ params[field_name] = [] if !params.key? field_name
62
+
63
+ params[field_name].append(val_to_string(value))
64
+ else
65
+ items.append(val_to_string(value))
66
+ end
67
+ end
68
+ params[field_name] = items.map(&:to_s).join(delimiter) if !items.empty?
69
+
70
+ else
71
+ params[field_name] = val_to_string(obj)
72
+ end
73
+ params
74
+ end
75
+
76
+ sig { params(media_type: String, request: Object).returns([String, Object, T::Array[T::Array[T.any(T::Array[T.nilable(String)], String)]]]) }
77
+ def self.serialize_multipart_form(media_type, request)
78
+ form = []
79
+ T.unsafe(request).fields.each do |field|
80
+ val = request.send(field.name)
81
+ next if val.nil?
82
+
83
+ field_metadata = field.metadata[:multipart_form]
84
+ next if field_metadata.nil?
85
+
86
+ if field_metadata[:file] == true
87
+ field_name = field_metadata[:field_name]
88
+
89
+ # Handle arrays of files
90
+ if val.is_a? Array
91
+ val.each do |file_obj|
92
+ file_name = T.let('', String)
93
+ content = nil
94
+
95
+ T.must(file_obj).fields.each do |file_field|
96
+ file_metadata = file_field.metadata[:multipart_form]
97
+ next if file_metadata.nil?
98
+
99
+ if file_metadata[:content] == true
100
+ content = T.let(file_obj.send(file_field.name), String)
101
+ else
102
+ file_name = T.let(file_obj.send(file_field.name), String)
103
+ end
104
+ end
105
+ raise StandardError, 'invalid multipart/form-data file' if T.unsafe(file_name) == '' || T.unsafe(content).nil?
106
+
107
+ form.append([field_name, [file_name, content]])
108
+ end
109
+ else
110
+ # Handle single file
111
+ file_name = T.let('', String)
112
+ content = nil
113
+
114
+ T.must(val).fields.each do |file_field|
115
+ file_metadata = file_field.metadata[:multipart_form]
116
+ next if file_metadata.nil?
117
+
118
+ if file_metadata[:content] == true
119
+ content = T.let(val.send(file_field.name), String)
120
+ else
121
+ file_name = T.let(val.send(file_field.name), String)
122
+ end
123
+ end
124
+ raise StandardError, 'invalid multipart/form-data file' if T.unsafe(file_name) == '' || T.unsafe(content).nil?
125
+
126
+ form.append([field_name, [file_name, content]])
127
+ end
128
+ elsif field_metadata[:json] == true
129
+ to_append = [
130
+ field_metadata.fetch(:field_name, field.name), [
131
+ nil, ::Crystalline.to_json(val), 'application/json'
132
+ ]
133
+ ]
134
+ form.append(to_append)
135
+ else
136
+ field_name = field_metadata.fetch(
137
+ :field_name, field.name
138
+ )
139
+ if val.is_a? Array
140
+ val.each do |value|
141
+ next if value.nil?
142
+
143
+ form.append(
144
+ ["#{field_name}[]", [nil, val_to_string(value)]]
145
+ )
146
+ end
147
+ else
148
+ form.append([field_name, [nil, val_to_string(val)]])
149
+ end
150
+ end
151
+ end
152
+ [media_type, nil, form]
153
+ end
154
+
155
+
156
+ sig do
157
+ params(data: T.any(Object, T::Hash[String, String]))
158
+ .returns(T::Hash[T.any(String, Symbol), Object])
159
+ end
160
+ def self.serialize_form_data(data)
161
+ get_form_field_name = lambda do |obj_field|
162
+ obj_param_metadata = obj_field.metadata[:form]
163
+
164
+ return T.let({}, T::Hash[T.any(String, Symbol), Object]) if obj_param_metadata.nil?
165
+
166
+ return obj_param_metadata.fetch(:field_name, obj_field.name)
167
+ end
168
+
169
+ form = T.let({}, T::Hash[T.any(String, Symbol), Object])
170
+ if data.respond_to? :fields
171
+ T.unsafe(data).fields.each do |field|
172
+ val = data.send(field.name)
173
+ next if val.nil?
174
+
175
+ metadata = field.metadata[:form]
176
+
177
+ next if metadata.nil?
178
+
179
+ field_name = metadata.fetch(:field_name, field.name)
180
+
181
+ if metadata[:json]
182
+ form[field_name] = ::Crystalline.to_json(val)
183
+ else
184
+ if metadata.fetch(:style, 'form') == 'form'
185
+ form = form.merge(
186
+ _populate_form(
187
+ field_name, metadata.fetch(:explode, true), val, ',', &get_form_field_name
188
+ )
189
+ )
190
+ else
191
+ raise StandardError, "Invalid form style for field #{field.name}"
192
+ end
193
+ end
194
+ end
195
+ elsif data.is_a? Hash
196
+ data.each do |key, value|
197
+ form[key] = [val_to_string(value)]
198
+ end
199
+ else
200
+ raise StandardError, "Invalid request body type #{data.class}"
201
+ end
202
+
203
+ form
204
+ end
205
+ end
206
+ end
@@ -0,0 +1,77 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'cgi'
7
+ require 'date'
8
+ require 'base64'
9
+ require 'sorbet-runtime'
10
+
11
+ module KintsugiSDK
12
+ module Utils
13
+ extend T::Sig
14
+
15
+ sig { params(headers_params: Object, gbls: T.nilable(T::Hash[Symbol, T::Hash[Symbol, T::Hash[Symbol, Object]]])).returns(T::Hash[Symbol, String]) }
16
+ def self.get_headers(headers_params, gbls = nil)
17
+ return {} if headers_params.nil?
18
+
19
+ headers = {}
20
+ T.unsafe(headers_params).fields.each do |f|
21
+ metadata = f.metadata[:header]
22
+ next if metadata.nil?
23
+
24
+ value = _populate_from_globals(f.name, headers_params&.send(f.name), 'header', gbls)
25
+ value = _serialize_header(metadata.fetch(:explode, false), value)
26
+ headers[metadata.fetch(:field_name, f.name)] = value if !T.must(value).empty?
27
+ end
28
+ headers
29
+ end
30
+
31
+ sig { params(explode: T::Boolean, obj: Object).returns(T.nilable(String)) }
32
+ def self._serialize_header(explode, obj)
33
+ return '' if obj.nil?
34
+
35
+ if obj.respond_to? :fields
36
+ items = []
37
+ T.unsafe(obj).fields.each do |obj_field|
38
+ obj_param_metadata = obj_field.metadata[:header]
39
+ next if obj_param_metadata.nil?
40
+
41
+ obj_field_name = obj_param_metadata.fetch(:field_name, obj_field.name)
42
+ next if obj_field_name == ''
43
+
44
+ val = obj.send(obj_field.name)
45
+ next if val.nil?
46
+
47
+ if explode
48
+ items.append("#{obj_field_name}=#{val_to_string(val)}")
49
+ else
50
+ items.append(obj_field_name)
51
+ items.append(val_to_string(val))
52
+ end
53
+ end
54
+
55
+ items.join(',') if !items.empty?
56
+ elsif obj.is_a? Hash
57
+ items = []
58
+ obj.each do |key, value|
59
+ next if value.nil?
60
+
61
+ if explode
62
+ items.append("#{key}=#{val_to_string(value)}")
63
+ else
64
+ items.append(key)
65
+ items.append(val_to_string(value))
66
+ end
67
+ end
68
+
69
+ items.join(',') if !items.empty?
70
+ elsif obj.is_a? Array
71
+ items = obj.filter { |v| !v.nil? }.map { |v| val_to_string(v) }.join(',')
72
+ else
73
+ val_to_string(obj)
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,131 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'cgi'
7
+ require 'date'
8
+ require 'base64'
9
+ require 'sorbet-runtime'
10
+
11
+ module KintsugiSDK
12
+ module Utils
13
+ extend T::Sig
14
+
15
+ sig { params(clazz: Object, query_params: Object, url_override: T.nilable(::String), gbls: T.nilable(T::Hash[Symbol, T::Hash[Symbol, T::Hash[Symbol, Object]]])).returns(T::Hash[T.any(String, Symbol), T::Array[String]]) }
16
+ def self.get_query_params(clazz, query_params, url_override = nil, gbls = nil)
17
+ parsed_params = T.let({}, T::Hash[T.any(String, Symbol), T::Array[String]])
18
+ if !url_override.nil?
19
+ parsed_url = URI.parse url_override
20
+ parsed_params = CGI.parse parsed_url.query
21
+ end
22
+ params = T.let({}, T::Hash[T.any(String, Symbol), T::Array[String]])
23
+ T.unsafe(clazz).fields.each do |f|
24
+ request_metadata = f.metadata[:request]
25
+ next if !request_metadata.nil?
26
+
27
+ metadata = f.metadata[:query_param]
28
+ next if metadata.nil?
29
+
30
+ param_name = f.name
31
+ value = query_params&.send(param_name.to_sym)
32
+ value = _populate_from_globals(param_name, value, 'queryParam', gbls)
33
+
34
+ f_name = metadata[:field_name]
35
+ serialization = metadata.fetch(:serialization, '')
36
+ if serialization != ''
37
+ params = params.merge _get_serialized_params(
38
+ metadata, f_name, value
39
+ )
40
+ else
41
+ style = metadata.fetch(:style, 'form')
42
+ case style
43
+ when 'deepObject'
44
+ params = params.merge _get_deep_object_query_params(
45
+ metadata, f_name, value
46
+ )
47
+ when 'form'
48
+ params = params.merge _get_delimited_query_params(
49
+ metadata, f_name, value, ','
50
+ )
51
+ when 'pipeDelimited'
52
+ params = params.merge _get_delimited_query_params(
53
+ metadata, f_name, value, '|'
54
+ )
55
+ else
56
+ raise StandardError, 'not yet implemented'
57
+ end
58
+ end
59
+ end
60
+ params.merge parsed_params
61
+ end
62
+
63
+ sig do
64
+ params(metadata: T::Hash[Symbol, String], field_name: String, obj: Object)
65
+ .returns(T::Hash[T.any(String, Symbol), T::Array[String]])
66
+ end
67
+ def self._get_deep_object_query_params(metadata, field_name, obj)
68
+ params = T.let({}, T::Hash[T.any(String, Symbol), T::Array[String]])
69
+
70
+ return params if obj.nil?
71
+
72
+ if obj.respond_to? :fields
73
+ T.unsafe(obj).fields.each do |obj_field|
74
+ obj_param_metadata = obj_field.metadata[:query_param]
75
+ next if obj_param_metadata.nil?
76
+
77
+ val = obj.send(obj_field.name)
78
+ next if val.nil?
79
+
80
+ key = "#{metadata.fetch(:field_name, field_name)}[#{obj_param_metadata.fetch(:field_name, obj_field.name)}]"
81
+ if val.is_a? Array
82
+ val.each do |v|
83
+ next if v.nil?
84
+
85
+ params[key] = [] if !params.include? key
86
+
87
+ T.must(params[key]) << val_to_string(v)
88
+ end
89
+ else
90
+ params[key] = [val_to_string(val)]
91
+ end
92
+ end
93
+ elsif obj.is_a? Hash
94
+ obj.each do |key, value|
95
+ next if value.nil?
96
+
97
+ param_key = "#{metadata.fetch(:field_name, field_name)}[#{key}]"
98
+ if value.is_a? Array
99
+ value.each do |val|
100
+ next if val.nil?
101
+
102
+ params[param_key] = [] if !params.include? param_key
103
+
104
+ T.must(params[param_key]).append(val_to_string(val))
105
+ end
106
+ else
107
+ params[param_key] = [val_to_string(value)]
108
+ end
109
+ end
110
+ end
111
+ params
112
+ end
113
+
114
+
115
+ sig do
116
+ params(metadata: T::Hash[Symbol, String], field_name: String, obj: Object, delimiter: String)
117
+ .returns(T::Hash[T.any(String, Symbol), T::Array[String]])
118
+ end
119
+ def self._get_delimited_query_params(metadata, field_name, obj, delimiter)
120
+ get_query_param_field_name = lambda do |obj_field|
121
+ obj_param_metadata = obj_field.metadata[:query_param]
122
+
123
+ return {} if obj_param_metadata.nil?
124
+
125
+ return obj_param_metadata.fetch(:field_name, obj_field.name)
126
+ end
127
+
128
+ _populate_form(field_name, T.cast(metadata.fetch(:explode, true), T::Boolean), obj, delimiter, &get_query_param_field_name)
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,61 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'cgi'
7
+ require 'date'
8
+ require 'base64'
9
+ require 'sorbet-runtime'
10
+
11
+ module KintsugiSDK
12
+ module Utils
13
+ extend T::Sig
14
+
15
+ SERIALIZATION_METHOD_TO_CONTENT_TYPE = {
16
+ 'json': 'application/json',
17
+ 'form': 'application/x-www-form-urlencoded',
18
+ 'multipart': 'multipart/form-data',
19
+ 'raw': 'application/octet-stream',
20
+ 'string': 'text/plain'
21
+ }.freeze
22
+
23
+ sig do
24
+ params(request: Object, nullable: T::Boolean, optional: T::Boolean, request_field_name: Symbol, serialization_method: Symbol)
25
+ .returns([String, Object, T.nilable(T::Array[T::Array[T.any(T::Array[T.nilable(String)], String)]])])
26
+ end
27
+ def self.serialize_request_body(request, nullable, optional, request_field_name, serialization_method)
28
+ return ['', nil, nil] if request.nil? && !nullable && optional
29
+
30
+ return serialize_content_type(SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], request) if !request.respond_to?(:fields) || !request.respond_to?(request_field_name)
31
+
32
+ request_val = request.send(request_field_name)
33
+
34
+ request_metadata = T.let(nil, T.nilable(T::Array[T::Array[T.any(T::Array[T.nilable(String)], String)]]))
35
+ T.unsafe(request).fields.each do |f|
36
+ if f.name == request_field_name
37
+ request_metadata = f.metadata[:request]
38
+ break
39
+ end
40
+ end
41
+ raise StandardError, 'invalid request type' if request_metadata.nil?
42
+
43
+ serialize_content_type(
44
+ request_metadata.fetch(:media_type, 'application/octet-stream'), request_val
45
+ )
46
+ end
47
+
48
+ sig do
49
+ params(media_type: String, request: Object)
50
+ .returns([String, Object, T.nilable(T::Array[T::Array[T.any(T::Array[T.nilable(String)], String)]])])
51
+ end
52
+ def self.serialize_content_type(media_type, request)
53
+ return media_type, ::Crystalline.to_json(request), nil if media_type.match('(application|text)\/.*?\+*json.*')
54
+ return serialize_multipart_form(media_type, request) if media_type.match('multipart\/.*')
55
+ return media_type, serialize_form_data(request), nil if media_type.match('application\/x-www-form-urlencoded.*')
56
+ return media_type, request, nil if request.is_a?(String) || request.is_a?(Array)
57
+
58
+ raise StandardError, "invalid request body type #{request.class} for mediaType #{media_type}"
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,95 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'faraday/retry'
7
+ require 'sorbet-runtime'
8
+
9
+ module KintsugiSDK
10
+ module Utils
11
+ class BackoffStrategy
12
+ extend T::Sig
13
+
14
+ sig { returns(T.nilable(::Float)) }
15
+ attr_accessor :exponent
16
+
17
+ sig { returns(T.nilable(::Integer)) }
18
+ attr_accessor :initial_interval
19
+
20
+ sig { returns(T.nilable(::Integer)) }
21
+ attr_accessor :max_elapsed_time
22
+
23
+ sig { returns(T.nilable(::Integer)) }
24
+ attr_accessor :max_interval
25
+
26
+ sig do
27
+ params(
28
+ exponent: T.nilable(::Float),
29
+ initial_interval: T.nilable(::Integer),
30
+ max_elapsed_time: T.nilable(::Integer),
31
+ max_interval: T.nilable(::Integer)
32
+ ).void
33
+ end
34
+ def initialize(exponent: nil, initial_interval: nil, max_elapsed_time: nil, max_interval: nil)
35
+ @exponent = T.let(exponent, T.nilable(::Float))
36
+ @initial_interval = T.let(initial_interval, T.nilable(::Integer))
37
+ @max_elapsed_time = T.let(max_elapsed_time, T.nilable(::Integer))
38
+ @max_interval = T.let(max_interval, T.nilable(::Integer))
39
+ end
40
+ end
41
+
42
+ class RetryConfig
43
+ extend T::Sig
44
+
45
+ sig { returns(T.nilable(BackoffStrategy)) }
46
+ attr_accessor :backoff
47
+
48
+ sig { returns(T.nilable(T::Boolean)) }
49
+ attr_accessor :retry_connection_errors
50
+
51
+ sig { returns(T.nilable(::String)) }
52
+ attr_accessor :strategy
53
+
54
+ sig do
55
+ params(
56
+ backoff: T.nilable(BackoffStrategy),
57
+ retry_connection_errors: T.nilable(T::Boolean),
58
+ strategy: T.nilable(::String)
59
+ ).void
60
+ end
61
+ def initialize(backoff: nil, retry_connection_errors: nil, strategy: nil)
62
+ @backoff = T.let(backoff, T.nilable(BackoffStrategy))
63
+ @retry_connection_errors = T.let(retry_connection_errors, T.nilable(T::Boolean))
64
+ @strategy = T.let(strategy, T.nilable(::String))
65
+ end
66
+
67
+ sig { params(initial_time: ::Time).returns(::Hash) }
68
+ def to_faraday_retry_options(initial_time:)
69
+ retry_options = {
70
+ # must overwrite default max of 2 retries and it must be positive
71
+ max: 1_000_000_000,
72
+ # ensure all HTTP methods are retried, especially via retry_if
73
+ methods: [],
74
+ }
75
+
76
+ if @retry_connection_errors
77
+ retry_options[:exceptions] = Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS + [Faraday::ConnectionFailed]
78
+ end
79
+
80
+ if @strategy == 'backoff' && @backoff
81
+ retry_options[:backoff_factor] = @backoff.exponent unless @backoff.exponent.nil?
82
+ retry_options[:interval] = (@backoff.initial_interval.to_f / 1000) unless @backoff.initial_interval.nil?
83
+ retry_options[:max_interval] = @backoff.max_interval unless @backoff.max_interval.nil?
84
+
85
+ unless @backoff.max_elapsed_time.nil?
86
+ stop_time = initial_time + (@backoff.max_elapsed_time.to_f / 1000)
87
+ retry_options[:retry_if] = ->(_env, _exc) { Time.now < stop_time }
88
+ end
89
+ end
90
+
91
+ retry_options
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,130 @@
1
+ # Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
2
+
3
+ # typed: true
4
+ # frozen_string_literal: true
5
+
6
+ require 'cgi'
7
+ require 'date'
8
+ require 'base64'
9
+ require 'sorbet-runtime'
10
+
11
+ module KintsugiSDK
12
+ module Utils
13
+ extend T::Sig
14
+
15
+ sig { params(req: Faraday::Request, security: Object).void }
16
+ def self.configure_request_security(req, security)
17
+ return if security.nil?
18
+ T.unsafe(security).fields.each do |sec_field|
19
+ value = security.send(sec_field.name)
20
+ next if value.nil?
21
+
22
+ metadata = sec_field.metadata[:security]
23
+ next if metadata.nil?
24
+
25
+ _parse_security_option(req, value) if metadata[:option]
26
+
27
+ if metadata[:scheme]
28
+ # Special case for basic auth which could be a flattened struct
29
+ if metadata[:sub_type] == 'basic' && !value.respond_to?(:fields)
30
+ _parse_security_scheme(req, metadata, security)
31
+ else
32
+ _parse_security_scheme(req, metadata, value)
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ sig { params(req: Faraday::Request, option: Object).void }
39
+ def self._parse_security_option(req, option)
40
+ T.unsafe(option).fields.each do |opt_field|
41
+ metadata = opt_field.metadata[:security]
42
+ next if metadata.nil? || !metadata.include?(:scheme)
43
+
44
+ _parse_security_scheme(req, metadata, option.send(opt_field.name))
45
+ end
46
+ end
47
+
48
+ sig { params(req: Faraday::Request, scheme_metadata: T::Hash[Symbol, String], scheme: Object).void }
49
+ def self._parse_security_scheme(req, scheme_metadata, scheme)
50
+ scheme_type = scheme_metadata[:type]
51
+ sub_type = scheme_metadata[:sub_type]
52
+
53
+ if scheme.respond_to? :fields
54
+ if scheme_type == 'http' && sub_type == 'basic'
55
+ _parse_basic_auth_scheme(req, scheme)
56
+ return
57
+ end
58
+
59
+ T.unsafe(scheme).fields.each do |field|
60
+ metadata = field.metadata[:security]
61
+ next if metadata.nil? || metadata[:field_name].nil?
62
+
63
+ value = scheme.send(field.name)
64
+ _parse_security_scheme_value(req, scheme_metadata, metadata, T.cast(value, String))
65
+ end
66
+ else
67
+ _parse_security_scheme_value(req, scheme_metadata, scheme_metadata, T.cast(scheme, String))
68
+ end
69
+ end
70
+
71
+ sig do
72
+ params(req: Faraday::Request, scheme_metadata: T::Hash[Symbol, String],
73
+ security_metadata: T::Hash[Symbol, String], value: String).void
74
+ end
75
+ def self._parse_security_scheme_value(req, scheme_metadata, security_metadata, value)
76
+ scheme_type = scheme_metadata[:type]
77
+ sub_type = scheme_metadata[:sub_type]
78
+
79
+ header_name = security_metadata[:field_name]
80
+
81
+ case scheme_type
82
+ when 'apiKey'
83
+ case sub_type
84
+ when 'header'
85
+ req.headers[header_name] = value
86
+ when 'query'
87
+ req.params[header_name] = value
88
+ when 'cookie'
89
+ req.headers['Cookie'][header_name] = value
90
+ else
91
+ raise StandardError, 'not supported'
92
+ end
93
+ when 'openIdConnect'
94
+ req.headers[header_name] = value.downcase.start_with?('bearer ') ? value : "Bearer #{value}"
95
+ when 'oauth2'
96
+ req.headers[header_name] = value.downcase.start_with?('bearer ') ? value : "Bearer #{value}"
97
+ when 'http'
98
+ if sub_type == 'bearer'
99
+ req.headers[header_name] = value.downcase.start_with?('bearer ') ? value : "Bearer #{value}"
100
+ elsif sub_type != 'custom'
101
+ raise StandardError, 'not supported'
102
+ end
103
+ else
104
+ raise StandardError, 'not supported'
105
+ end
106
+ end
107
+
108
+ sig { params(req: Faraday::Request, scheme: Object).void }
109
+ def self._parse_basic_auth_scheme(req, scheme)
110
+ username = T.let('', String)
111
+ password = T.let('', String)
112
+
113
+ T.unsafe(scheme).fields.each do |scheme_field|
114
+ metadata = scheme_field.metadata[:security]
115
+ next if metadata.nil? || !metadata.include?(:field_name)
116
+
117
+ field_name = metadata[:field_name]
118
+ value = scheme.send(scheme_field.name)
119
+
120
+ username = T.let(value, String) if field_name == 'username'
121
+ password = T.let(value, String) if field_name == 'password'
122
+ end
123
+
124
+ data = "#{username}:#{password}".encode
125
+ # Use strict_encode, because encode adds newlines after 60 chars
126
+ # https://docs.ruby-lang.org/en/3.0/Base64.html#method-i-encode64
127
+ req.headers['Authorization'] = "Basic #{Base64.strict_encode64(data)}"
128
+ end
129
+ end
130
+ end