sentdm 0.18.0 → 0.19.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 (291) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +13 -0
  3. data/README.md +1 -31
  4. data/lib/sentdm/internal/transport/base_client.rb +2 -0
  5. data/lib/sentdm/internal/type/base_model.rb +5 -5
  6. data/lib/sentdm/internal/type/enum.rb +0 -25
  7. data/lib/sentdm/models/contact_create_response.rb +236 -0
  8. data/lib/sentdm/models/contact_delete_params.rb +16 -2
  9. data/lib/sentdm/models/contact_list_response.rb +278 -12
  10. data/lib/sentdm/models/contact_retrieve_response.rb +236 -0
  11. data/lib/sentdm/models/contact_update_params.rb +4 -16
  12. data/lib/sentdm/models/contact_update_response.rb +236 -0
  13. data/lib/sentdm/models/me_retrieve_response.rb +204 -12
  14. data/lib/sentdm/models/message_retrieve_activities_response.rb +74 -6
  15. data/lib/sentdm/models/message_retrieve_status_response.rb +87 -7
  16. data/lib/sentdm/models/message_send_params.rb +2 -2
  17. data/lib/sentdm/models/message_send_response.rb +74 -6
  18. data/lib/sentdm/models/number_lookup_response.rb +74 -6
  19. data/lib/sentdm/models/profile_complete_response.rb +74 -6
  20. data/lib/sentdm/models/profile_create_params.rb +423 -9
  21. data/lib/sentdm/models/profile_create_response.rb +781 -0
  22. data/lib/sentdm/models/profile_delete_params.rb +16 -2
  23. data/lib/sentdm/models/profile_list_response.rb +753 -9
  24. data/lib/sentdm/models/profile_retrieve_response.rb +783 -0
  25. data/lib/sentdm/models/profile_update_params.rb +423 -9
  26. data/lib/sentdm/models/profile_update_response.rb +781 -0
  27. data/lib/sentdm/models/profiles/campaign_create_params.rb +165 -3
  28. data/lib/sentdm/models/profiles/campaign_create_response.rb +459 -0
  29. data/lib/sentdm/models/profiles/campaign_delete_params.rb +17 -2
  30. data/lib/sentdm/models/profiles/campaign_list_response.rb +420 -9
  31. data/lib/sentdm/models/profiles/campaign_update_params.rb +165 -3
  32. data/lib/sentdm/models/profiles/campaign_update_response.rb +459 -0
  33. data/lib/sentdm/models/template_create_params.rb +889 -3
  34. data/lib/sentdm/models/template_create_response.rb +197 -0
  35. data/lib/sentdm/models/template_list_response.rb +242 -12
  36. data/lib/sentdm/models/template_retrieve_response.rb +197 -0
  37. data/lib/sentdm/models/template_update_params.rb +889 -3
  38. data/lib/sentdm/models/template_update_response.rb +197 -0
  39. data/lib/sentdm/models/user_invite_response.rb +189 -0
  40. data/lib/sentdm/models/user_list_response.rb +154 -9
  41. data/lib/sentdm/models/user_remove_params.rb +16 -2
  42. data/lib/sentdm/models/user_retrieve_response.rb +189 -0
  43. data/lib/sentdm/models/user_update_role_response.rb +189 -0
  44. data/lib/sentdm/models/webhook_create_response.rb +204 -0
  45. data/lib/sentdm/models/webhook_list_event_types_response.rb +118 -9
  46. data/lib/sentdm/models/webhook_list_events_response.rb +153 -9
  47. data/lib/sentdm/models/webhook_list_response.rb +247 -12
  48. data/lib/sentdm/models/webhook_retrieve_response.rb +204 -0
  49. data/lib/sentdm/models/webhook_rotate_secret_params.rb +17 -2
  50. data/lib/sentdm/models/webhook_rotate_secret_response.rb +74 -6
  51. data/lib/sentdm/models/webhook_test_response.rb +74 -6
  52. data/lib/sentdm/models/webhook_toggle_status_response.rb +204 -0
  53. data/lib/sentdm/models/webhook_update_response.rb +204 -0
  54. data/lib/sentdm/models.rb +0 -77
  55. data/lib/sentdm/resources/contacts.rb +8 -10
  56. data/lib/sentdm/resources/profiles/campaigns.rb +6 -6
  57. data/lib/sentdm/resources/profiles.rb +12 -12
  58. data/lib/sentdm/resources/templates.rb +8 -8
  59. data/lib/sentdm/resources/users.rb +6 -6
  60. data/lib/sentdm/resources/webhooks.rb +8 -8
  61. data/lib/sentdm/version.rb +1 -1
  62. data/lib/sentdm.rb +18 -40
  63. data/rbi/sentdm/models/contact_create_response.rbi +390 -0
  64. data/rbi/sentdm/models/contact_delete_params.rbi +19 -2
  65. data/rbi/sentdm/models/contact_list_response.rbi +505 -16
  66. data/rbi/sentdm/models/contact_retrieve_response.rbi +392 -0
  67. data/rbi/sentdm/models/contact_update_params.rbi +4 -20
  68. data/rbi/sentdm/models/contact_update_response.rbi +390 -0
  69. data/rbi/sentdm/models/me_retrieve_response.rbi +335 -16
  70. data/rbi/sentdm/models/message_retrieve_activities_response.rbi +154 -8
  71. data/rbi/sentdm/models/message_retrieve_status_response.rbi +171 -11
  72. data/rbi/sentdm/models/message_send_params.rbi +4 -4
  73. data/rbi/sentdm/models/message_send_response.rbi +135 -8
  74. data/rbi/sentdm/models/number_lookup_response.rbi +135 -8
  75. data/rbi/sentdm/models/profile_complete_response.rbi +137 -8
  76. data/rbi/sentdm/models/profile_create_params.rbi +810 -12
  77. data/rbi/sentdm/models/profile_create_response.rbi +1439 -0
  78. data/rbi/sentdm/models/profile_delete_params.rbi +19 -2
  79. data/rbi/sentdm/models/profile_list_response.rbi +1400 -14
  80. data/rbi/sentdm/models/profile_retrieve_response.rbi +1443 -0
  81. data/rbi/sentdm/models/profile_update_params.rbi +810 -12
  82. data/rbi/sentdm/models/profile_update_response.rbi +1439 -0
  83. data/rbi/sentdm/models/profiles/campaign_create_params.rbi +289 -4
  84. data/rbi/sentdm/models/profiles/campaign_create_response.rbi +814 -0
  85. data/rbi/sentdm/models/profiles/campaign_delete_params.rbi +14 -1
  86. data/rbi/sentdm/models/profiles/campaign_list_response.rbi +733 -11
  87. data/rbi/sentdm/models/profiles/campaign_update_params.rbi +289 -4
  88. data/rbi/sentdm/models/profiles/campaign_update_response.rbi +814 -0
  89. data/rbi/sentdm/models/template_create_params.rbi +1701 -4
  90. data/rbi/sentdm/models/template_create_response.rbi +339 -0
  91. data/rbi/sentdm/models/template_list_response.rbi +454 -16
  92. data/rbi/sentdm/models/template_retrieve_response.rbi +345 -0
  93. data/rbi/sentdm/models/template_update_params.rbi +1701 -4
  94. data/rbi/sentdm/models/template_update_response.rbi +339 -0
  95. data/rbi/sentdm/models/user_invite_response.rbi +323 -0
  96. data/rbi/sentdm/models/user_list_response.rbi +271 -14
  97. data/rbi/sentdm/models/user_remove_params.rbi +19 -2
  98. data/rbi/sentdm/models/user_retrieve_response.rbi +323 -0
  99. data/rbi/sentdm/models/user_update_role_response.rbi +328 -0
  100. data/rbi/sentdm/models/webhook_create_response.rbi +348 -0
  101. data/rbi/sentdm/models/webhook_list_event_types_response.rbi +247 -12
  102. data/rbi/sentdm/models/webhook_list_events_response.rbi +314 -12
  103. data/rbi/sentdm/models/webhook_list_response.rbi +462 -16
  104. data/rbi/sentdm/models/webhook_retrieve_response.rbi +350 -0
  105. data/rbi/sentdm/models/webhook_rotate_secret_params.rbi +14 -1
  106. data/rbi/sentdm/models/webhook_rotate_secret_response.rbi +148 -8
  107. data/rbi/sentdm/models/webhook_test_response.rbi +135 -8
  108. data/rbi/sentdm/models/webhook_toggle_status_response.rbi +366 -0
  109. data/rbi/sentdm/models/webhook_update_response.rbi +348 -0
  110. data/rbi/sentdm/models.rbi +0 -77
  111. data/rbi/sentdm/resources/contacts.rbi +5 -12
  112. data/rbi/sentdm/resources/messages.rbi +2 -2
  113. data/rbi/sentdm/resources/profiles/campaigns.rbi +4 -4
  114. data/rbi/sentdm/resources/profiles.rbi +13 -9
  115. data/rbi/sentdm/resources/templates.rbi +6 -5
  116. data/rbi/sentdm/resources/users.rbi +3 -3
  117. data/rbi/sentdm/resources/webhooks.rbi +4 -4
  118. data/sig/sentdm/models/contact_create_response.rbs +209 -0
  119. data/sig/sentdm/models/contact_delete_params.rbs +10 -6
  120. data/sig/sentdm/models/contact_list_response.rbs +256 -20
  121. data/sig/sentdm/models/contact_retrieve_response.rbs +209 -0
  122. data/sig/sentdm/models/contact_update_params.rbs +0 -5
  123. data/sig/sentdm/models/contact_update_response.rbs +209 -0
  124. data/sig/sentdm/models/me_retrieve_response.rbs +176 -18
  125. data/sig/sentdm/models/message_retrieve_activities_response.rbs +71 -9
  126. data/sig/sentdm/models/message_retrieve_status_response.rbs +95 -13
  127. data/sig/sentdm/models/message_send_response.rbs +71 -9
  128. data/sig/sentdm/models/number_lookup_response.rbs +71 -9
  129. data/sig/sentdm/models/profile_complete_response.rbs +71 -9
  130. data/sig/sentdm/models/profile_create_params.rbs +363 -12
  131. data/sig/sentdm/models/profile_create_response.rbs +662 -0
  132. data/sig/sentdm/models/profile_delete_params.rbs +10 -6
  133. data/sig/sentdm/models/profile_list_response.rbs +645 -15
  134. data/sig/sentdm/models/profile_retrieve_response.rbs +662 -0
  135. data/sig/sentdm/models/profile_update_params.rbs +363 -12
  136. data/sig/sentdm/models/profile_update_response.rbs +662 -0
  137. data/sig/sentdm/models/profiles/campaign_create_params.rbs +138 -4
  138. data/sig/sentdm/models/profiles/campaign_create_response.rbs +424 -0
  139. data/sig/sentdm/models/profiles/campaign_delete_params.rbs +15 -8
  140. data/sig/sentdm/models/profiles/campaign_list_response.rbs +396 -13
  141. data/sig/sentdm/models/profiles/campaign_update_params.rbs +138 -4
  142. data/sig/sentdm/models/profiles/campaign_update_response.rbs +424 -0
  143. data/sig/sentdm/models/template_create_params.rbs +853 -6
  144. data/sig/sentdm/models/template_create_response.rbs +177 -0
  145. data/sig/sentdm/models/template_list_response.rbs +225 -19
  146. data/sig/sentdm/models/template_retrieve_response.rbs +177 -0
  147. data/sig/sentdm/models/template_update_params.rbs +851 -4
  148. data/sig/sentdm/models/template_update_response.rbs +177 -0
  149. data/sig/sentdm/models/user_invite_response.rbs +170 -0
  150. data/sig/sentdm/models/user_list_response.rbs +151 -15
  151. data/sig/sentdm/models/user_remove_params.rbs +10 -6
  152. data/sig/sentdm/models/user_retrieve_response.rbs +170 -0
  153. data/sig/sentdm/models/user_update_role_response.rbs +170 -0
  154. data/sig/sentdm/models/webhook_create_response.rbs +201 -0
  155. data/sig/sentdm/models/webhook_list_event_types_response.rbs +130 -15
  156. data/sig/sentdm/models/webhook_list_events_response.rbs +142 -14
  157. data/sig/sentdm/models/webhook_list_response.rbs +248 -20
  158. data/sig/sentdm/models/webhook_retrieve_response.rbs +201 -0
  159. data/sig/sentdm/models/webhook_rotate_secret_params.rbs +17 -8
  160. data/sig/sentdm/models/webhook_rotate_secret_response.rbs +71 -9
  161. data/sig/sentdm/models/webhook_test_response.rbs +71 -9
  162. data/sig/sentdm/models/webhook_toggle_status_response.rbs +201 -0
  163. data/sig/sentdm/models/webhook_update_response.rbs +201 -0
  164. data/sig/sentdm/models.rbs +0 -68
  165. data/sig/sentdm/resources/contacts.rbs +3 -4
  166. data/sig/sentdm/resources/profiles/campaigns.rbs +4 -4
  167. data/sig/sentdm/resources/profiles.rbs +9 -9
  168. data/sig/sentdm/resources/templates.rbs +5 -5
  169. data/sig/sentdm/resources/users.rbs +3 -3
  170. data/sig/sentdm/resources/webhooks.rbs +4 -4
  171. metadata +56 -122
  172. data/lib/sentdm/models/api_meta.rb +0 -34
  173. data/lib/sentdm/models/api_response_of_contact.rb +0 -46
  174. data/lib/sentdm/models/api_response_of_profile_detail.rb +0 -43
  175. data/lib/sentdm/models/api_response_of_user.rb +0 -43
  176. data/lib/sentdm/models/api_response_template.rb +0 -43
  177. data/lib/sentdm/models/api_response_webhook.rb +0 -43
  178. data/lib/sentdm/models/billing_contact_info.rb +0 -47
  179. data/lib/sentdm/models/brands_brand_data.rb +0 -38
  180. data/lib/sentdm/models/contact_response.rb +0 -136
  181. data/lib/sentdm/models/destination_country.rb +0 -21
  182. data/lib/sentdm/models/error_detail.rb +0 -42
  183. data/lib/sentdm/models/mutation_request.rb +0 -20
  184. data/lib/sentdm/models/pagination_meta.rb +0 -80
  185. data/lib/sentdm/models/payment_details.rb +0 -44
  186. data/lib/sentdm/models/profile_detail.rb +0 -605
  187. data/lib/sentdm/models/profile_settings.rb +0 -66
  188. data/lib/sentdm/models/profiles/api_response_of_tcr_campaign_with_use_cases.rb +0 -45
  189. data/lib/sentdm/models/profiles/base_dto.rb +0 -32
  190. data/lib/sentdm/models/profiles/campaign_data.rb +0 -123
  191. data/lib/sentdm/models/profiles/messaging_use_case_us.rb +0 -28
  192. data/lib/sentdm/models/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data.rb +0 -29
  193. data/lib/sentdm/models/profiles/tcr_campaign_with_use_cases.rb +0 -236
  194. data/lib/sentdm/models/sent_dm_services_common_contracts_poc_os_authentication_config.rb +0 -34
  195. data/lib/sentdm/models/sent_dm_services_common_contracts_poc_os_template_body.rb +0 -40
  196. data/lib/sentdm/models/sent_dm_services_common_contracts_poc_os_template_button.rb +0 -38
  197. data/lib/sentdm/models/sent_dm_services_common_contracts_poc_os_template_button_props.rb +0 -81
  198. data/lib/sentdm/models/sent_dm_services_common_contracts_poc_os_template_footer.rb +0 -34
  199. data/lib/sentdm/models/sent_dm_services_common_contracts_poc_os_template_header.rb +0 -39
  200. data/lib/sentdm/models/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info.rb +0 -116
  201. data/lib/sentdm/models/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info.rb +0 -75
  202. data/lib/sentdm/models/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info.rb +0 -58
  203. data/lib/sentdm/models/tcr_brand_relationship.rb +0 -18
  204. data/lib/sentdm/models/tcr_vertical.rb +0 -36
  205. data/lib/sentdm/models/template.rb +0 -90
  206. data/lib/sentdm/models/template_body_content.rb +0 -27
  207. data/lib/sentdm/models/template_definition.rb +0 -66
  208. data/lib/sentdm/models/template_variable.rb +0 -80
  209. data/lib/sentdm/models/user_response.rb +0 -82
  210. data/lib/sentdm/models/webhook_event_type.rb +0 -45
  211. data/lib/sentdm/models/webhook_response.rb +0 -95
  212. data/rbi/sentdm/models/api_meta.rbi +0 -55
  213. data/rbi/sentdm/models/api_response_of_contact.rbi +0 -74
  214. data/rbi/sentdm/models/api_response_of_profile_detail.rbi +0 -74
  215. data/rbi/sentdm/models/api_response_of_user.rbi +0 -74
  216. data/rbi/sentdm/models/api_response_template.rbi +0 -74
  217. data/rbi/sentdm/models/api_response_webhook.rbi +0 -74
  218. data/rbi/sentdm/models/billing_contact_info.rbi +0 -65
  219. data/rbi/sentdm/models/brands_brand_data.rbi +0 -104
  220. data/rbi/sentdm/models/contact_response.rbi +0 -195
  221. data/rbi/sentdm/models/destination_country.rbi +0 -32
  222. data/rbi/sentdm/models/error_detail.rbi +0 -66
  223. data/rbi/sentdm/models/mutation_request.rbi +0 -32
  224. data/rbi/sentdm/models/pagination_meta.rbi +0 -135
  225. data/rbi/sentdm/models/payment_details.rbi +0 -59
  226. data/rbi/sentdm/models/profile_detail.rbi +0 -874
  227. data/rbi/sentdm/models/profile_settings.rbi +0 -86
  228. data/rbi/sentdm/models/profiles/api_response_of_tcr_campaign_with_use_cases.rbi +0 -83
  229. data/rbi/sentdm/models/profiles/base_dto.rbi +0 -53
  230. data/rbi/sentdm/models/profiles/campaign_data.rbi +0 -148
  231. data/rbi/sentdm/models/profiles/messaging_use_case_us.rbi +0 -73
  232. data/rbi/sentdm/models/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data.rbi +0 -51
  233. data/rbi/sentdm/models/profiles/tcr_campaign_with_use_cases.rbi +0 -410
  234. data/rbi/sentdm/models/sent_dm_services_common_contracts_poc_os_authentication_config.rbi +0 -56
  235. data/rbi/sentdm/models/sent_dm_services_common_contracts_poc_os_template_body.rbi +0 -76
  236. data/rbi/sentdm/models/sent_dm_services_common_contracts_poc_os_template_button.rbi +0 -72
  237. data/rbi/sentdm/models/sent_dm_services_common_contracts_poc_os_template_button_props.rbi +0 -104
  238. data/rbi/sentdm/models/sent_dm_services_common_contracts_poc_os_template_footer.rbi +0 -57
  239. data/rbi/sentdm/models/sent_dm_services_common_contracts_poc_os_template_header.rbi +0 -59
  240. data/rbi/sentdm/models/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info.rbi +0 -180
  241. data/rbi/sentdm/models/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info.rbi +0 -95
  242. data/rbi/sentdm/models/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info.rbi +0 -81
  243. data/rbi/sentdm/models/tcr_brand_relationship.rbi +0 -30
  244. data/rbi/sentdm/models/tcr_vertical.rbi +0 -41
  245. data/rbi/sentdm/models/template.rbi +0 -129
  246. data/rbi/sentdm/models/template_body_content.rbi +0 -43
  247. data/rbi/sentdm/models/template_definition.rbi +0 -164
  248. data/rbi/sentdm/models/template_variable.rbi +0 -120
  249. data/rbi/sentdm/models/user_response.rbi +0 -118
  250. data/rbi/sentdm/models/webhook_event_type.rbi +0 -74
  251. data/rbi/sentdm/models/webhook_response.rbi +0 -140
  252. data/sig/sentdm/models/api_meta.rbs +0 -27
  253. data/sig/sentdm/models/api_response_of_contact.rbs +0 -39
  254. data/sig/sentdm/models/api_response_of_profile_detail.rbs +0 -39
  255. data/sig/sentdm/models/api_response_of_user.rbs +0 -39
  256. data/sig/sentdm/models/api_response_template.rbs +0 -39
  257. data/sig/sentdm/models/api_response_webhook.rbs +0 -39
  258. data/sig/sentdm/models/billing_contact_info.rbs +0 -30
  259. data/sig/sentdm/models/brands_brand_data.rbs +0 -30
  260. data/sig/sentdm/models/contact_response.rbs +0 -116
  261. data/sig/sentdm/models/destination_country.rbs +0 -19
  262. data/sig/sentdm/models/error_detail.rbs +0 -39
  263. data/sig/sentdm/models/mutation_request.rbs +0 -15
  264. data/sig/sentdm/models/pagination_meta.rbs +0 -67
  265. data/sig/sentdm/models/payment_details.rbs +0 -30
  266. data/sig/sentdm/models/profile_detail.rbs +0 -474
  267. data/sig/sentdm/models/profile_settings.rbs +0 -50
  268. data/sig/sentdm/models/profiles/api_response_of_tcr_campaign_with_use_cases.rbs +0 -41
  269. data/sig/sentdm/models/profiles/base_dto.rbs +0 -27
  270. data/sig/sentdm/models/profiles/campaign_data.rbs +0 -82
  271. data/sig/sentdm/models/profiles/messaging_use_case_us.rbs +0 -40
  272. data/sig/sentdm/models/profiles/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_campaigns_campaign_use_case_data.rbs +0 -27
  273. data/sig/sentdm/models/profiles/tcr_campaign_with_use_cases.rbs +0 -285
  274. data/sig/sentdm/models/sent_dm_services_common_contracts_poc_os_authentication_config.rbs +0 -24
  275. data/sig/sentdm/models/sent_dm_services_common_contracts_poc_os_template_body.rbs +0 -30
  276. data/sig/sentdm/models/sent_dm_services_common_contracts_poc_os_template_button.rbs +0 -32
  277. data/sig/sentdm/models/sent_dm_services_common_contracts_poc_os_template_button_props.rbs +0 -75
  278. data/sig/sentdm/models/sent_dm_services_common_contracts_poc_os_template_footer.rbs +0 -30
  279. data/sig/sentdm/models/sent_dm_services_common_contracts_poc_os_template_header.rbs +0 -30
  280. data/sig/sentdm/models/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_business_info.rbs +0 -89
  281. data/sig/sentdm/models/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_compliance_info.rbs +0 -55
  282. data/sig/sentdm/models/sent_dm_services_endpoints_customer_ap_iv3_contracts_requests_brands_brand_contact_info.rbs +0 -45
  283. data/sig/sentdm/models/tcr_brand_relationship.rbs +0 -22
  284. data/sig/sentdm/models/tcr_vertical.rbs +0 -58
  285. data/sig/sentdm/models/template.rbs +0 -79
  286. data/sig/sentdm/models/template_body_content.rbs +0 -30
  287. data/sig/sentdm/models/template_definition.rbs +0 -45
  288. data/sig/sentdm/models/template_variable.rbs +0 -84
  289. data/sig/sentdm/models/user_response.rbs +0 -72
  290. data/sig/sentdm/models/webhook_event_type.rbs +0 -51
  291. data/sig/sentdm/models/webhook_response.rbs +0 -103
@@ -13,14 +13,14 @@ module Sentdm
13
13
  # @!attribute error
14
14
  # Error information
15
15
  #
16
- # @return [Sentdm::Models::ErrorDetail, nil]
17
- optional :error, -> { Sentdm::ErrorDetail }, nil?: true
16
+ # @return [Sentdm::Models::ContactListResponse::Error, nil]
17
+ optional :error, -> { Sentdm::Models::ContactListResponse::Error }, nil?: true
18
18
 
19
19
  # @!attribute meta
20
20
  # Request and response metadata
21
21
  #
22
- # @return [Sentdm::Models::APIMeta, nil]
23
- optional :meta, -> { Sentdm::APIMeta }
22
+ # @return [Sentdm::Models::ContactListResponse::Meta, nil]
23
+ optional :meta, -> { Sentdm::Models::ContactListResponse::Meta }
24
24
 
25
25
  # @!attribute success
26
26
  # Indicates whether the request was successful
@@ -33,9 +33,9 @@ module Sentdm
33
33
  #
34
34
  # @param data [Sentdm::Models::ContactListResponse::Data, nil] Paginated list of contacts response
35
35
  #
36
- # @param error [Sentdm::Models::ErrorDetail, nil] Error information
36
+ # @param error [Sentdm::Models::ContactListResponse::Error, nil] Error information
37
37
  #
38
- # @param meta [Sentdm::Models::APIMeta] Request and response metadata
38
+ # @param meta [Sentdm::Models::ContactListResponse::Meta] Request and response metadata
39
39
  #
40
40
  # @param success [Boolean] Indicates whether the request was successful
41
41
 
@@ -44,21 +44,287 @@ module Sentdm
44
44
  # @!attribute contacts
45
45
  # List of contacts
46
46
  #
47
- # @return [Array<Sentdm::Models::ContactResponse>, nil]
48
- optional :contacts, -> { Sentdm::Internal::Type::ArrayOf[Sentdm::ContactResponse] }
47
+ # @return [Array<Sentdm::Models::ContactListResponse::Data::Contact>, nil]
48
+ optional :contacts,
49
+ -> { Sentdm::Internal::Type::ArrayOf[Sentdm::Models::ContactListResponse::Data::Contact] }
49
50
 
50
51
  # @!attribute pagination
51
52
  # Pagination metadata for list responses
52
53
  #
53
- # @return [Sentdm::Models::PaginationMeta, nil]
54
- optional :pagination, -> { Sentdm::PaginationMeta }
54
+ # @return [Sentdm::Models::ContactListResponse::Data::Pagination, nil]
55
+ optional :pagination, -> { Sentdm::Models::ContactListResponse::Data::Pagination }
55
56
 
56
57
  # @!method initialize(contacts: nil, pagination: nil)
57
58
  # Paginated list of contacts response
58
59
  #
59
- # @param contacts [Array<Sentdm::Models::ContactResponse>] List of contacts
60
+ # @param contacts [Array<Sentdm::Models::ContactListResponse::Data::Contact>] List of contacts
60
61
  #
61
- # @param pagination [Sentdm::Models::PaginationMeta] Pagination metadata for list responses
62
+ # @param pagination [Sentdm::Models::ContactListResponse::Data::Pagination] Pagination metadata for list responses
63
+
64
+ class Contact < Sentdm::Internal::Type::BaseModel
65
+ # @!attribute id
66
+ # Unique identifier for the contact
67
+ #
68
+ # @return [String, nil]
69
+ optional :id, String
70
+
71
+ # @!attribute available_channels
72
+ # Comma-separated list of available messaging channels (e.g., "sms,whatsapp")
73
+ #
74
+ # @return [String, nil]
75
+ optional :available_channels, String
76
+
77
+ # @!attribute country_code
78
+ # Country calling code (e.g., 1 for US/Canada)
79
+ #
80
+ # @return [String, nil]
81
+ optional :country_code, String
82
+
83
+ # @!attribute created_at
84
+ # When the contact was created
85
+ #
86
+ # @return [Time, nil]
87
+ optional :created_at, Time
88
+
89
+ # @!attribute default_channel
90
+ # Default messaging channel to use (e.g., "sms" or "whatsapp")
91
+ #
92
+ # @return [String, nil]
93
+ optional :default_channel, String
94
+
95
+ # @!attribute format_e164
96
+ # Phone number in E.164 format (e.g., +1234567890)
97
+ #
98
+ # @return [String, nil]
99
+ optional :format_e164, String
100
+
101
+ # @!attribute format_international
102
+ # Phone number in international format (e.g., +1 234-567-890)
103
+ #
104
+ # @return [String, nil]
105
+ optional :format_international, String
106
+
107
+ # @!attribute format_national
108
+ # Phone number in national format (e.g., (234) 567-890)
109
+ #
110
+ # @return [String, nil]
111
+ optional :format_national, String
112
+
113
+ # @!attribute format_rfc
114
+ # Phone number in RFC 3966 format (e.g., tel:+1-234-567-890)
115
+ #
116
+ # @return [String, nil]
117
+ optional :format_rfc, String
118
+
119
+ # @!attribute is_inherited
120
+ # Whether this is an inherited contact (read-only)
121
+ #
122
+ # @return [Boolean, nil]
123
+ optional :is_inherited, Sentdm::Internal::Type::Boolean
124
+
125
+ # @!attribute opt_out
126
+ # Whether the contact has opted out of messaging. Single source of truth — opt-out
127
+ # is per-contact, not per-channel.
128
+ #
129
+ # @return [Boolean, nil]
130
+ optional :opt_out, Sentdm::Internal::Type::Boolean
131
+
132
+ # @!attribute phone_number
133
+ # Phone number in original format
134
+ #
135
+ # @return [String, nil]
136
+ optional :phone_number, String
137
+
138
+ # @!attribute region_code
139
+ # ISO 3166-1 alpha-2 country code (e.g., US, CA, GB)
140
+ #
141
+ # @return [String, nil]
142
+ optional :region_code, String
143
+
144
+ # @!attribute updated_at
145
+ # When the contact was last updated
146
+ #
147
+ # @return [Time, nil]
148
+ optional :updated_at, Time, nil?: true
149
+
150
+ # @!method initialize(id: nil, available_channels: nil, country_code: nil, created_at: nil, default_channel: nil, format_e164: nil, format_international: nil, format_national: nil, format_rfc: nil, is_inherited: nil, opt_out: nil, phone_number: nil, region_code: nil, updated_at: nil)
151
+ # Some parameter documentations has been truncated, see
152
+ # {Sentdm::Models::ContactListResponse::Data::Contact} for more details.
153
+ #
154
+ # Contact response for v3 API Uses snake_case for JSON property names
155
+ #
156
+ # @param id [String] Unique identifier for the contact
157
+ #
158
+ # @param available_channels [String] Comma-separated list of available messaging channels (e.g., "sms,whatsapp")
159
+ #
160
+ # @param country_code [String] Country calling code (e.g., 1 for US/Canada)
161
+ #
162
+ # @param created_at [Time] When the contact was created
163
+ #
164
+ # @param default_channel [String] Default messaging channel to use (e.g., "sms" or "whatsapp")
165
+ #
166
+ # @param format_e164 [String] Phone number in E.164 format (e.g., +1234567890)
167
+ #
168
+ # @param format_international [String] Phone number in international format (e.g., +1 234-567-890)
169
+ #
170
+ # @param format_national [String] Phone number in national format (e.g., (234) 567-890)
171
+ #
172
+ # @param format_rfc [String] Phone number in RFC 3966 format (e.g., tel:+1-234-567-890)
173
+ #
174
+ # @param is_inherited [Boolean] Whether this is an inherited contact (read-only)
175
+ #
176
+ # @param opt_out [Boolean] Whether the contact has opted out of messaging. Single source of truth — opt-out
177
+ #
178
+ # @param phone_number [String] Phone number in original format
179
+ #
180
+ # @param region_code [String] ISO 3166-1 alpha-2 country code (e.g., US, CA, GB)
181
+ #
182
+ # @param updated_at [Time, nil] When the contact was last updated
183
+ end
184
+
185
+ # @see Sentdm::Models::ContactListResponse::Data#pagination
186
+ class Pagination < Sentdm::Internal::Type::BaseModel
187
+ # @!attribute cursors
188
+ # Cursor-based pagination pointers
189
+ #
190
+ # @return [Sentdm::Models::ContactListResponse::Data::Pagination::Cursors, nil]
191
+ optional :cursors, -> { Sentdm::Models::ContactListResponse::Data::Pagination::Cursors }, nil?: true
192
+
193
+ # @!attribute has_more
194
+ # Whether there are more pages after this one
195
+ #
196
+ # @return [Boolean, nil]
197
+ optional :has_more, Sentdm::Internal::Type::Boolean
198
+
199
+ # @!attribute page
200
+ # Current page number (1-indexed)
201
+ #
202
+ # @return [Integer, nil]
203
+ optional :page, Integer
204
+
205
+ # @!attribute page_size
206
+ # Number of items per page
207
+ #
208
+ # @return [Integer, nil]
209
+ optional :page_size, Integer
210
+
211
+ # @!attribute total_count
212
+ # Total number of items across all pages
213
+ #
214
+ # @return [Integer, nil]
215
+ optional :total_count, Integer
216
+
217
+ # @!attribute total_pages
218
+ # Total number of pages
219
+ #
220
+ # @return [Integer, nil]
221
+ optional :total_pages, Integer
222
+
223
+ # @!method initialize(cursors: nil, has_more: nil, page: nil, page_size: nil, total_count: nil, total_pages: nil)
224
+ # Pagination metadata for list responses
225
+ #
226
+ # @param cursors [Sentdm::Models::ContactListResponse::Data::Pagination::Cursors, nil] Cursor-based pagination pointers
227
+ #
228
+ # @param has_more [Boolean] Whether there are more pages after this one
229
+ #
230
+ # @param page [Integer] Current page number (1-indexed)
231
+ #
232
+ # @param page_size [Integer] Number of items per page
233
+ #
234
+ # @param total_count [Integer] Total number of items across all pages
235
+ #
236
+ # @param total_pages [Integer] Total number of pages
237
+
238
+ # @see Sentdm::Models::ContactListResponse::Data::Pagination#cursors
239
+ class Cursors < Sentdm::Internal::Type::BaseModel
240
+ # @!attribute after
241
+ # Cursor to fetch the next page
242
+ #
243
+ # @return [String, nil]
244
+ optional :after, String, nil?: true
245
+
246
+ # @!attribute before
247
+ # Cursor to fetch the previous page
248
+ #
249
+ # @return [String, nil]
250
+ optional :before, String, nil?: true
251
+
252
+ # @!method initialize(after: nil, before: nil)
253
+ # Cursor-based pagination pointers
254
+ #
255
+ # @param after [String, nil] Cursor to fetch the next page
256
+ #
257
+ # @param before [String, nil] Cursor to fetch the previous page
258
+ end
259
+ end
260
+ end
261
+
262
+ # @see Sentdm::Models::ContactListResponse#error
263
+ class Error < Sentdm::Internal::Type::BaseModel
264
+ # @!attribute code
265
+ # Machine-readable error code (e.g., "RESOURCE_001")
266
+ #
267
+ # @return [String, nil]
268
+ optional :code, String
269
+
270
+ # @!attribute details
271
+ # Additional validation error details (field-level errors)
272
+ #
273
+ # @return [Hash{Symbol=>Array<String>}, nil]
274
+ optional :details, Sentdm::Internal::Type::HashOf[Sentdm::Internal::Type::ArrayOf[String]], nil?: true
275
+
276
+ # @!attribute doc_url
277
+ # URL to documentation about this error
278
+ #
279
+ # @return [String, nil]
280
+ optional :doc_url, String, nil?: true
281
+
282
+ # @!attribute message
283
+ # Human-readable error message
284
+ #
285
+ # @return [String, nil]
286
+ optional :message, String
287
+
288
+ # @!method initialize(code: nil, details: nil, doc_url: nil, message: nil)
289
+ # Error information
290
+ #
291
+ # @param code [String] Machine-readable error code (e.g., "RESOURCE_001")
292
+ #
293
+ # @param details [Hash{Symbol=>Array<String>}, nil] Additional validation error details (field-level errors)
294
+ #
295
+ # @param doc_url [String, nil] URL to documentation about this error
296
+ #
297
+ # @param message [String] Human-readable error message
298
+ end
299
+
300
+ # @see Sentdm::Models::ContactListResponse#meta
301
+ class Meta < Sentdm::Internal::Type::BaseModel
302
+ # @!attribute request_id
303
+ # Unique identifier for this request (for tracing and support)
304
+ #
305
+ # @return [String, nil]
306
+ optional :request_id, String
307
+
308
+ # @!attribute timestamp
309
+ # Server timestamp when the response was generated
310
+ #
311
+ # @return [Time, nil]
312
+ optional :timestamp, Time
313
+
314
+ # @!attribute version
315
+ # API version used for this request
316
+ #
317
+ # @return [String, nil]
318
+ optional :version, String
319
+
320
+ # @!method initialize(request_id: nil, timestamp: nil, version: nil)
321
+ # Request and response metadata
322
+ #
323
+ # @param request_id [String] Unique identifier for this request (for tracing and support)
324
+ #
325
+ # @param timestamp [Time] Server timestamp when the response was generated
326
+ #
327
+ # @param version [String] API version used for this request
62
328
  end
63
329
  end
64
330
  end
@@ -0,0 +1,236 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sentdm
4
+ module Models
5
+ # @see Sentdm::Resources::Contacts#retrieve
6
+ class ContactRetrieveResponse < Sentdm::Internal::Type::BaseModel
7
+ # @!attribute data
8
+ # Contact response for v3 API Uses snake_case for JSON property names
9
+ #
10
+ # @return [Sentdm::Models::ContactRetrieveResponse::Data, nil]
11
+ optional :data, -> { Sentdm::Models::ContactRetrieveResponse::Data }, nil?: true
12
+
13
+ # @!attribute error
14
+ # Error information
15
+ #
16
+ # @return [Sentdm::Models::ContactRetrieveResponse::Error, nil]
17
+ optional :error, -> { Sentdm::Models::ContactRetrieveResponse::Error }, nil?: true
18
+
19
+ # @!attribute meta
20
+ # Request and response metadata
21
+ #
22
+ # @return [Sentdm::Models::ContactRetrieveResponse::Meta, nil]
23
+ optional :meta, -> { Sentdm::Models::ContactRetrieveResponse::Meta }
24
+
25
+ # @!attribute success
26
+ # Indicates whether the request was successful
27
+ #
28
+ # @return [Boolean, nil]
29
+ optional :success, Sentdm::Internal::Type::Boolean
30
+
31
+ # @!method initialize(data: nil, error: nil, meta: nil, success: nil)
32
+ # Some parameter documentations has been truncated, see
33
+ # {Sentdm::Models::ContactRetrieveResponse} for more details.
34
+ #
35
+ # Standard API response envelope for all v3 endpoints
36
+ #
37
+ # @param data [Sentdm::Models::ContactRetrieveResponse::Data, nil] Contact response for v3 API
38
+ #
39
+ # @param error [Sentdm::Models::ContactRetrieveResponse::Error, nil] Error information
40
+ #
41
+ # @param meta [Sentdm::Models::ContactRetrieveResponse::Meta] Request and response metadata
42
+ #
43
+ # @param success [Boolean] Indicates whether the request was successful
44
+
45
+ # @see Sentdm::Models::ContactRetrieveResponse#data
46
+ class Data < Sentdm::Internal::Type::BaseModel
47
+ # @!attribute id
48
+ # Unique identifier for the contact
49
+ #
50
+ # @return [String, nil]
51
+ optional :id, String
52
+
53
+ # @!attribute available_channels
54
+ # Comma-separated list of available messaging channels (e.g., "sms,whatsapp")
55
+ #
56
+ # @return [String, nil]
57
+ optional :available_channels, String
58
+
59
+ # @!attribute country_code
60
+ # Country calling code (e.g., 1 for US/Canada)
61
+ #
62
+ # @return [String, nil]
63
+ optional :country_code, String
64
+
65
+ # @!attribute created_at
66
+ # When the contact was created
67
+ #
68
+ # @return [Time, nil]
69
+ optional :created_at, Time
70
+
71
+ # @!attribute default_channel
72
+ # Default messaging channel to use (e.g., "sms" or "whatsapp")
73
+ #
74
+ # @return [String, nil]
75
+ optional :default_channel, String
76
+
77
+ # @!attribute format_e164
78
+ # Phone number in E.164 format (e.g., +1234567890)
79
+ #
80
+ # @return [String, nil]
81
+ optional :format_e164, String
82
+
83
+ # @!attribute format_international
84
+ # Phone number in international format (e.g., +1 234-567-890)
85
+ #
86
+ # @return [String, nil]
87
+ optional :format_international, String
88
+
89
+ # @!attribute format_national
90
+ # Phone number in national format (e.g., (234) 567-890)
91
+ #
92
+ # @return [String, nil]
93
+ optional :format_national, String
94
+
95
+ # @!attribute format_rfc
96
+ # Phone number in RFC 3966 format (e.g., tel:+1-234-567-890)
97
+ #
98
+ # @return [String, nil]
99
+ optional :format_rfc, String
100
+
101
+ # @!attribute is_inherited
102
+ # Whether this is an inherited contact (read-only)
103
+ #
104
+ # @return [Boolean, nil]
105
+ optional :is_inherited, Sentdm::Internal::Type::Boolean
106
+
107
+ # @!attribute opt_out
108
+ # Whether the contact has opted out of messaging. Single source of truth — opt-out
109
+ # is per-contact, not per-channel.
110
+ #
111
+ # @return [Boolean, nil]
112
+ optional :opt_out, Sentdm::Internal::Type::Boolean
113
+
114
+ # @!attribute phone_number
115
+ # Phone number in original format
116
+ #
117
+ # @return [String, nil]
118
+ optional :phone_number, String
119
+
120
+ # @!attribute region_code
121
+ # ISO 3166-1 alpha-2 country code (e.g., US, CA, GB)
122
+ #
123
+ # @return [String, nil]
124
+ optional :region_code, String
125
+
126
+ # @!attribute updated_at
127
+ # When the contact was last updated
128
+ #
129
+ # @return [Time, nil]
130
+ optional :updated_at, Time, nil?: true
131
+
132
+ # @!method initialize(id: nil, available_channels: nil, country_code: nil, created_at: nil, default_channel: nil, format_e164: nil, format_international: nil, format_national: nil, format_rfc: nil, is_inherited: nil, opt_out: nil, phone_number: nil, region_code: nil, updated_at: nil)
133
+ # Some parameter documentations has been truncated, see
134
+ # {Sentdm::Models::ContactRetrieveResponse::Data} for more details.
135
+ #
136
+ # Contact response for v3 API Uses snake_case for JSON property names
137
+ #
138
+ # @param id [String] Unique identifier for the contact
139
+ #
140
+ # @param available_channels [String] Comma-separated list of available messaging channels (e.g., "sms,whatsapp")
141
+ #
142
+ # @param country_code [String] Country calling code (e.g., 1 for US/Canada)
143
+ #
144
+ # @param created_at [Time] When the contact was created
145
+ #
146
+ # @param default_channel [String] Default messaging channel to use (e.g., "sms" or "whatsapp")
147
+ #
148
+ # @param format_e164 [String] Phone number in E.164 format (e.g., +1234567890)
149
+ #
150
+ # @param format_international [String] Phone number in international format (e.g., +1 234-567-890)
151
+ #
152
+ # @param format_national [String] Phone number in national format (e.g., (234) 567-890)
153
+ #
154
+ # @param format_rfc [String] Phone number in RFC 3966 format (e.g., tel:+1-234-567-890)
155
+ #
156
+ # @param is_inherited [Boolean] Whether this is an inherited contact (read-only)
157
+ #
158
+ # @param opt_out [Boolean] Whether the contact has opted out of messaging. Single source of truth — opt-out
159
+ #
160
+ # @param phone_number [String] Phone number in original format
161
+ #
162
+ # @param region_code [String] ISO 3166-1 alpha-2 country code (e.g., US, CA, GB)
163
+ #
164
+ # @param updated_at [Time, nil] When the contact was last updated
165
+ end
166
+
167
+ # @see Sentdm::Models::ContactRetrieveResponse#error
168
+ class Error < Sentdm::Internal::Type::BaseModel
169
+ # @!attribute code
170
+ # Machine-readable error code (e.g., "RESOURCE_001")
171
+ #
172
+ # @return [String, nil]
173
+ optional :code, String
174
+
175
+ # @!attribute details
176
+ # Additional validation error details (field-level errors)
177
+ #
178
+ # @return [Hash{Symbol=>Array<String>}, nil]
179
+ optional :details, Sentdm::Internal::Type::HashOf[Sentdm::Internal::Type::ArrayOf[String]], nil?: true
180
+
181
+ # @!attribute doc_url
182
+ # URL to documentation about this error
183
+ #
184
+ # @return [String, nil]
185
+ optional :doc_url, String, nil?: true
186
+
187
+ # @!attribute message
188
+ # Human-readable error message
189
+ #
190
+ # @return [String, nil]
191
+ optional :message, String
192
+
193
+ # @!method initialize(code: nil, details: nil, doc_url: nil, message: nil)
194
+ # Error information
195
+ #
196
+ # @param code [String] Machine-readable error code (e.g., "RESOURCE_001")
197
+ #
198
+ # @param details [Hash{Symbol=>Array<String>}, nil] Additional validation error details (field-level errors)
199
+ #
200
+ # @param doc_url [String, nil] URL to documentation about this error
201
+ #
202
+ # @param message [String] Human-readable error message
203
+ end
204
+
205
+ # @see Sentdm::Models::ContactRetrieveResponse#meta
206
+ class Meta < Sentdm::Internal::Type::BaseModel
207
+ # @!attribute request_id
208
+ # Unique identifier for this request (for tracing and support)
209
+ #
210
+ # @return [String, nil]
211
+ optional :request_id, String
212
+
213
+ # @!attribute timestamp
214
+ # Server timestamp when the response was generated
215
+ #
216
+ # @return [Time, nil]
217
+ optional :timestamp, Time
218
+
219
+ # @!attribute version
220
+ # API version used for this request
221
+ #
222
+ # @return [String, nil]
223
+ optional :version, String
224
+
225
+ # @!method initialize(request_id: nil, timestamp: nil, version: nil)
226
+ # Request and response metadata
227
+ #
228
+ # @param request_id [String] Unique identifier for this request (for tracing and support)
229
+ #
230
+ # @param timestamp [Time] Server timestamp when the response was generated
231
+ #
232
+ # @param version [String] API version used for this request
233
+ end
234
+ end
235
+ end
236
+ end
@@ -12,17 +12,6 @@ module Sentdm
12
12
  # @return [String]
13
13
  required :id, String
14
14
 
15
- # @!attribute channel_consent
16
- # Consent status by channel. Keys: "sms", "whatsapp". Values: "opted_in",
17
- # "opted_out". All entries must have the same status — mixed values (e.g., sms:
18
- # opted_out + whatsapp: opted_in) are rejected with 400. The provided status is
19
- # applied to ALL channels regardless of which keys are specified, because consent
20
- # is global across channels. When provided, takes precedence over the opt_out
21
- # field.
22
- #
23
- # @return [Hash{Symbol=>String}, nil]
24
- optional :channel_consent, Sentdm::Internal::Type::HashOf[String], nil?: true
25
-
26
15
  # @!attribute default_channel
27
16
  # Default messaging channel: "sms" or "whatsapp"
28
17
  #
@@ -30,7 +19,8 @@ module Sentdm
30
19
  optional :default_channel, String, nil?: true
31
20
 
32
21
  # @!attribute opt_out
33
- # Whether the contact has opted out of messaging
22
+ # Whether the contact has opted out of messaging. Single source of truth — opt-out
23
+ # is per-contact, not per-channel.
34
24
  #
35
25
  # @return [Boolean, nil]
36
26
  optional :opt_out, Sentdm::Internal::Type::Boolean, nil?: true
@@ -52,17 +42,15 @@ module Sentdm
52
42
  # @return [String, nil]
53
43
  optional :x_profile_id, String
54
44
 
55
- # @!method initialize(id:, channel_consent: nil, default_channel: nil, opt_out: nil, sandbox: nil, idempotency_key: nil, x_profile_id: nil, request_options: {})
45
+ # @!method initialize(id:, default_channel: nil, opt_out: nil, sandbox: nil, idempotency_key: nil, x_profile_id: nil, request_options: {})
56
46
  # Some parameter documentations has been truncated, see
57
47
  # {Sentdm::Models::ContactUpdateParams} for more details.
58
48
  #
59
49
  # @param id [String]
60
50
  #
61
- # @param channel_consent [Hash{Symbol=>String}, nil] Consent status by channel. Keys: "sms", "whatsapp". Values: "opted_in", "opted_o
62
- #
63
51
  # @param default_channel [String, nil] Default messaging channel: "sms" or "whatsapp"
64
52
  #
65
- # @param opt_out [Boolean, nil] Whether the contact has opted out of messaging
53
+ # @param opt_out [Boolean, nil] Whether the contact has opted out of messaging. Single source of truth — opt-out
66
54
  #
67
55
  # @param sandbox [Boolean] Sandbox flag - when true, the operation is simulated without side effects
68
56
  #