ruby-jss 4.1.1 → 4.2.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 (779) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +84 -1
  3. data/README-2.0.0.md +19 -8
  4. data/README.md +46 -33
  5. data/bin/cgrouper +1 -1
  6. data/bin/jamfHelperBackgrounder +1 -1
  7. data/bin/netseg-update +2 -2
  8. data/data/ruby-jss.conf.example +1 -1
  9. data/lib/jamf/api/classic/api_objects/account.rb +6 -7
  10. data/lib/jamf/api/classic/api_objects/advanced_computer_search.rb +1 -1
  11. data/lib/jamf/api/classic/api_objects/advanced_mobile_device_search.rb +2 -2
  12. data/lib/jamf/api/classic/api_objects/advanced_user_search.rb +2 -2
  13. data/lib/jamf/api/classic/api_objects/building.rb +6 -1
  14. data/lib/jamf/api/classic/api_objects/categorizable.rb +4 -1
  15. data/lib/jamf/api/classic/api_objects/category.rb +7 -2
  16. data/lib/jamf/api/classic/api_objects/computer.rb +1 -1
  17. data/lib/jamf/api/classic/api_objects/computer_extension_attribute.rb +1 -1
  18. data/lib/jamf/api/classic/api_objects/computer_group.rb +1 -3
  19. data/lib/jamf/api/classic/api_objects/computer_invitation.rb +2 -5
  20. data/lib/jamf/api/classic/api_objects/creatable.rb +1 -1
  21. data/lib/jamf/api/classic/api_objects/criteriable/criteria.rb +7 -3
  22. data/lib/jamf/api/classic/api_objects/criteriable/criterion.rb +3 -1
  23. data/lib/jamf/api/classic/api_objects/criteriable.rb +2 -2
  24. data/lib/jamf/api/classic/api_objects/department.rb +2 -2
  25. data/lib/jamf/api/classic/api_objects/distribution_point.rb +9 -8
  26. data/lib/jamf/api/classic/api_objects/ebook.rb +1 -3
  27. data/lib/jamf/api/classic/api_objects/extendable.rb +1 -1
  28. data/lib/jamf/api/classic/api_objects/ibeacon.rb +2 -4
  29. data/lib/jamf/api/classic/api_objects/icon.rb +161 -161
  30. data/lib/jamf/api/classic/api_objects/ldap_server.rb +1 -1
  31. data/lib/jamf/api/classic/api_objects/locatable.rb +3 -3
  32. data/lib/jamf/api/classic/api_objects/mac_application.rb +1 -2
  33. data/lib/jamf/api/classic/api_objects/management_history/audit_event.rb +1 -1
  34. data/lib/jamf/api/classic/api_objects/management_history/casper_imaging_log.rb +1 -1
  35. data/lib/jamf/api/classic/api_objects/management_history/casper_remote_log.rb +1 -1
  36. data/lib/jamf/api/classic/api_objects/management_history/computer_usage_log.rb +1 -1
  37. data/lib/jamf/api/classic/api_objects/management_history/ebook.rb +1 -1
  38. data/lib/jamf/api/classic/api_objects/management_history/hash_like.rb +1 -3
  39. data/lib/jamf/api/classic/api_objects/management_history/mac_app_store_app.rb +1 -1
  40. data/lib/jamf/api/classic/api_objects/management_history/mdm_command.rb +1 -1
  41. data/lib/jamf/api/classic/api_objects/management_history/mobile_device_app.rb +1 -1
  42. data/lib/jamf/api/classic/api_objects/management_history/policy_log.rb +1 -1
  43. data/lib/jamf/api/classic/api_objects/management_history/screen_sharing_log.rb +1 -1
  44. data/lib/jamf/api/classic/api_objects/management_history/user_location_change.rb +1 -1
  45. data/lib/jamf/api/classic/api_objects/management_history.rb +14 -5
  46. data/lib/jamf/api/classic/api_objects/matchable.rb +6 -7
  47. data/lib/jamf/api/classic/api_objects/mdm.rb +1 -1
  48. data/lib/jamf/api/classic/api_objects/mobile_device.rb +1 -1
  49. data/lib/jamf/api/classic/api_objects/mobile_device_application.rb +23 -2
  50. data/lib/jamf/api/classic/api_objects/mobile_device_configuration_profile.rb +1 -1
  51. data/lib/jamf/api/classic/api_objects/mobile_device_extension_attribute.rb +3 -3
  52. data/lib/jamf/api/classic/api_objects/mobile_device_group.rb +6 -7
  53. data/lib/jamf/api/classic/api_objects/netboot_server.rb +2 -5
  54. data/lib/jamf/api/classic/api_objects/network_segment.rb +7 -2
  55. data/lib/jamf/api/classic/api_objects/osx_configuration_profile.rb +3 -3
  56. data/lib/jamf/api/classic/api_objects/package.rb +37 -17
  57. data/lib/jamf/api/classic/api_objects/patch_external_source.rb +7 -2
  58. data/lib/jamf/api/classic/api_objects/patch_internal_source.rb +1 -1
  59. data/lib/jamf/api/classic/api_objects/patch_policy.rb +1 -1
  60. data/lib/jamf/api/classic/api_objects/patch_title/version.rb +1 -1
  61. data/lib/jamf/api/classic/api_objects/patch_title.rb +5 -4
  62. data/lib/jamf/api/classic/api_objects/peripheral.rb +35 -44
  63. data/lib/jamf/api/classic/api_objects/peripheral_type.rb +33 -39
  64. data/lib/jamf/api/classic/api_objects/policy.rb +1 -1
  65. data/lib/jamf/api/classic/api_objects/purchasable.rb +55 -47
  66. data/lib/jamf/api/classic/api_objects/removable_macaddr.rb +3 -4
  67. data/lib/jamf/api/classic/api_objects/restricted_software.rb +6 -2
  68. data/lib/jamf/api/classic/api_objects/scopable/scope.rb +16 -14
  69. data/lib/jamf/api/classic/api_objects/scopable.rb +1 -1
  70. data/lib/jamf/api/classic/api_objects/script.rb +18 -12
  71. data/lib/jamf/api/classic/api_objects/self_servable.rb +26 -8
  72. data/lib/jamf/api/classic/api_objects/sitable.rb +3 -1
  73. data/lib/jamf/api/classic/api_objects/site.rb +1 -2
  74. data/lib/jamf/api/classic/api_objects/software_update_server.rb +2 -4
  75. data/lib/jamf/api/classic/api_objects/updatable.rb +2 -1
  76. data/lib/jamf/api/classic/api_objects/uploadable.rb +1 -1
  77. data/lib/jamf/api/classic/api_objects/user.rb +25 -25
  78. data/lib/jamf/api/classic/api_objects/user_extension_attribute.rb +1 -1
  79. data/lib/jamf/api/classic/api_objects/user_group.rb +6 -8
  80. data/lib/jamf/api/classic/api_objects/vpp_account.rb +1 -1
  81. data/lib/jamf/api/classic/api_objects/vppable.rb +2 -2
  82. data/lib/jamf/api/classic/api_objects/web_hook.rb +12 -5
  83. data/lib/jamf/api/classic/base_classes/advanced_search.rb +6 -7
  84. data/lib/jamf/api/classic/base_classes/api_object.rb +10 -2
  85. data/lib/jamf/api/classic/base_classes/configuration_profile.rb +1 -1
  86. data/lib/jamf/api/classic/base_classes/extension_attribute.rb +2 -4
  87. data/lib/jamf/api/classic/base_classes/group.rb +5 -5
  88. data/lib/jamf/api/classic/base_classes/patch_source.rb +1 -1
  89. data/lib/jamf/api/classic/xml_workaround.rb +1 -1
  90. data/lib/jamf/api/connection/attributes.rb +1 -1
  91. data/lib/jamf/api/connection/cache.rb +1 -1
  92. data/lib/jamf/api/connection/classic_api.rb +1 -1
  93. data/lib/jamf/api/connection/connect.rb +1 -1
  94. data/lib/jamf/api/connection/constants.rb +1 -1
  95. data/lib/jamf/api/connection/default_connection.rb +1 -1
  96. data/lib/jamf/api/connection/jamf_pro_api.rb +29 -3
  97. data/lib/jamf/api/connection/jamf_pro_api_error.rb +5 -5
  98. data/lib/jamf/api/connection/token.rb +1 -1
  99. data/lib/jamf/api/connection.rb +1 -1
  100. data/lib/jamf/api/jamf_pro/api_objects/api_client.rb +5 -6
  101. data/lib/jamf/api/jamf_pro/api_objects/api_integration.rb +1 -1
  102. data/lib/jamf/api/jamf_pro/api_objects/api_role.rb +4 -1
  103. data/lib/jamf/api/jamf_pro/api_objects/computer_prestage.rb +2 -2
  104. data/lib/jamf/api/jamf_pro/api_objects/device_enrollment.rb +1 -1
  105. data/lib/jamf/api/jamf_pro/api_objects/inventory_preload_record.rb +1 -1
  106. data/lib/jamf/api/jamf_pro/api_objects/{jp_building.rb → j_building.rb} +5 -2
  107. data/lib/jamf/api/jamf_pro/api_objects/j_package.rb +912 -0
  108. data/lib/jamf/api/jamf_pro/api_objects/managed_software_updates/plan.rb +237 -0
  109. data/lib/jamf/api/jamf_pro/api_objects/managed_software_updates.rb +291 -0
  110. data/lib/jamf/api/jamf_pro/api_objects/mobile_device_prestage.rb +1 -1
  111. data/lib/jamf/api/jamf_pro/base_classes/oapi_object.rb +12 -4
  112. data/lib/jamf/api/jamf_pro/mixins/bulk_deletable.rb +1 -1
  113. data/lib/jamf/api/jamf_pro/mixins/change_log.rb +1 -1
  114. data/lib/jamf/api/jamf_pro/mixins/collection_resource.rb +24 -10
  115. data/lib/jamf/api/jamf_pro/mixins/computer_recovery_lock.rb +1 -1
  116. data/lib/jamf/api/jamf_pro/mixins/filevault.rb +1 -1
  117. data/lib/jamf/api/jamf_pro/mixins/filterable.rb +9 -3
  118. data/lib/jamf/api/jamf_pro/mixins/immutable.rb +2 -1
  119. data/lib/jamf/api/jamf_pro/mixins/jpapi_resource.rb +18 -5
  120. data/lib/jamf/api/jamf_pro/mixins/lockable.rb +2 -2
  121. data/lib/jamf/api/jamf_pro/mixins/macos_managed_updates.rb +3 -1
  122. data/lib/jamf/api/jamf_pro/mixins/macos_redeploy_mgmt_framework.rb +1 -1
  123. data/lib/jamf/api/jamf_pro/mixins/prestage.rb +4 -1
  124. data/lib/jamf/api/jamf_pro/mixins/sortable.rb +1 -1
  125. data/lib/jamf/api/jamf_pro/mixins/uncreatable.rb +1 -1
  126. data/lib/jamf/api/jamf_pro/mixins/undeletable.rb +1 -1
  127. data/lib/jamf/api/jamf_pro/oapi_schemas/account_group.rb +1 -1
  128. data/lib/jamf/api/jamf_pro/oapi_schemas/account_preferences_v1.rb +1 -1
  129. data/lib/jamf/api/jamf_pro/oapi_schemas/account_settings_request.rb +7 -9
  130. data/lib/jamf/api/jamf_pro/oapi_schemas/account_settings_response.rb +7 -9
  131. data/lib/jamf/api/jamf_pro/oapi_schemas/api_error.rb +1 -1
  132. data/lib/jamf/api/jamf_pro/oapi_schemas/api_error_cause.rb +2 -6
  133. data/lib/jamf/api/jamf_pro/oapi_schemas/api_integration_request.rb +3 -7
  134. data/lib/jamf/api/jamf_pro/oapi_schemas/api_integration_response.rb +6 -8
  135. data/lib/jamf/api/jamf_pro/oapi_schemas/api_integration_search_result.rb +2 -6
  136. data/lib/jamf/api/jamf_pro/oapi_schemas/api_role.rb +2 -6
  137. data/lib/jamf/api/jamf_pro/oapi_schemas/api_role_request.rb +3 -7
  138. data/lib/jamf/api/jamf_pro/oapi_schemas/api_role_result.rb +1 -1
  139. data/lib/jamf/api/jamf_pro/oapi_schemas/assign_remove_profile_response_sync_state.rb +1 -1
  140. data/lib/jamf/api/jamf_pro/oapi_schemas/auth_account_v1.rb +1 -1
  141. data/lib/jamf/api/jamf_pro/oapi_schemas/authentication_type.rb +1 -1
  142. data/lib/jamf/api/jamf_pro/oapi_schemas/authorization_v1.rb +2 -6
  143. data/lib/jamf/api/jamf_pro/oapi_schemas/available_updates.rb +2 -2
  144. data/lib/jamf/api/jamf_pro/oapi_schemas/building.rb +2 -6
  145. data/lib/jamf/api/jamf_pro/oapi_schemas/building_search_results.rb +2 -6
  146. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_application.rb +2 -2
  147. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_attachment.rb +2 -2
  148. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_certificate.rb +2 -2
  149. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_configuration_profile.rb +2 -2
  150. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_content_caching.rb +2 -2
  151. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_content_caching_alert.rb +2 -2
  152. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_content_caching_cache_detail.rb +2 -2
  153. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_content_caching_data_migration_error.rb +2 -2
  154. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_content_caching_data_migration_error_user_info.rb +2 -2
  155. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_content_caching_parent.rb +2 -2
  156. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_content_caching_parent_alert.rb +2 -2
  157. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_content_caching_parent_capabilities.rb +2 -2
  158. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_content_caching_parent_details.rb +2 -2
  159. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_content_caching_parent_local_network.rb +2 -2
  160. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_disk.rb +2 -2
  161. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_disk_encryption.rb +2 -2
  162. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_extension_attribute.rb +2 -2
  163. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_font.rb +2 -2
  164. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_general.rb +2 -2
  165. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_hardware.rb +2 -2
  166. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_ibeacon.rb +2 -2
  167. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_inventory.rb +1 -1
  168. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_inventory_file_vault.rb +1 -1
  169. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_licensed_software.rb +2 -2
  170. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_local_user_account.rb +2 -2
  171. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_mdm_capability.rb +2 -2
  172. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_operating_system.rb +2 -2
  173. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_package_receipts.rb +2 -2
  174. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_partition.rb +2 -2
  175. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_partition_encryption.rb +2 -2
  176. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_partition_file_vault2_state.rb +2 -2
  177. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_plugin.rb +2 -2
  178. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_prestage_search_results_v3.rb +2 -6
  179. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_prestage_v3.rb +1 -1
  180. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_printer.rb +2 -2
  181. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_purchase.rb +2 -2
  182. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_remote_management.rb +3 -10
  183. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_section.rb +1 -1
  184. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_security.rb +2 -2
  185. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_service.rb +2 -2
  186. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_software_update.rb +2 -2
  187. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_storage.rb +2 -2
  188. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_user_and_location.rb +2 -2
  189. data/lib/jamf/api/jamf_pro/oapi_schemas/device_enrollment_device.rb +6 -8
  190. data/lib/jamf/api/jamf_pro/oapi_schemas/device_enrollment_device_search_results.rb +2 -6
  191. data/lib/jamf/api/jamf_pro/oapi_schemas/device_enrollment_disown_response.rb +3 -7
  192. data/lib/jamf/api/jamf_pro/oapi_schemas/device_enrollment_instance.rb +2 -6
  193. data/lib/jamf/api/jamf_pro/oapi_schemas/device_enrollment_instance_search_results.rb +2 -6
  194. data/lib/jamf/api/jamf_pro/oapi_schemas/device_enrollment_instance_sync_status.rb +3 -7
  195. data/lib/jamf/api/jamf_pro/oapi_schemas/device_enrollment_prestage_v2.rb +2 -6
  196. data/lib/jamf/api/jamf_pro/oapi_schemas/device_enrollment_token.rb +3 -7
  197. data/lib/jamf/api/jamf_pro/oapi_schemas/dss_declaration.rb +2 -2
  198. data/lib/jamf/api/jamf_pro/oapi_schemas/dss_declarations.rb +9 -3
  199. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_method.rb +2 -2
  200. data/lib/jamf/api/jamf_pro/oapi_schemas/get_computer_prestage_v3.rb +1 -6
  201. data/lib/jamf/api/jamf_pro/oapi_schemas/get_mobile_device_prestage_v2.rb +1 -6
  202. data/lib/jamf/api/jamf_pro/oapi_schemas/group_membership.rb +2 -2
  203. data/lib/jamf/api/jamf_pro/oapi_schemas/history_search_results_v1.rb +2 -6
  204. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_extension_attribute.rb +1 -1
  205. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_record_search_results_v2.rb +2 -6
  206. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_record_v2.rb +1 -3
  207. data/lib/jamf/api/jamf_pro/oapi_schemas/location_information.rb +1 -1
  208. data/lib/jamf/api/jamf_pro/oapi_schemas/location_information_v2.rb +1 -1
  209. data/lib/jamf/api/jamf_pro/oapi_schemas/mac_os_managed_software_update.rb +10 -12
  210. data/lib/jamf/api/jamf_pro/oapi_schemas/mac_os_managed_software_update_response.rb +2 -6
  211. data/lib/jamf/api/jamf_pro/oapi_schemas/managed_software_update_plan.rb +29 -19
  212. data/lib/jamf/api/jamf_pro/oapi_schemas/{venafi_service_status.rb → managed_software_update_plan_event_store.rb} +11 -9
  213. data/lib/jamf/api/jamf_pro/oapi_schemas/managed_software_update_plan_group_post.rb +2 -2
  214. data/lib/jamf/api/jamf_pro/oapi_schemas/managed_software_update_plan_post.rb +2 -2
  215. data/lib/jamf/api/jamf_pro/oapi_schemas/managed_software_update_plan_post_response.rb +2 -2
  216. data/lib/jamf/api/jamf_pro/oapi_schemas/managed_software_update_plan_toggle.rb +9 -2
  217. data/lib/jamf/api/jamf_pro/oapi_schemas/managed_software_update_plan_toggle_status.rb +2 -2
  218. data/lib/jamf/api/jamf_pro/oapi_schemas/managed_software_update_plan_toggle_status_wrapper.rb +2 -2
  219. data/lib/jamf/api/jamf_pro/oapi_schemas/managed_software_update_plans.rb +2 -2
  220. data/lib/jamf/api/jamf_pro/oapi_schemas/managed_software_update_status.rb +21 -22
  221. data/lib/jamf/api/jamf_pro/oapi_schemas/managed_software_update_statuses.rb +2 -2
  222. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_prestage_name_v2.rb +1 -1
  223. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_prestage_names_v2.rb +1 -1
  224. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_prestage_search_results_v2.rb +2 -6
  225. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_prestage_v2.rb +2 -7
  226. data/lib/jamf/api/jamf_pro/oapi_schemas/o_auth_client_credentials.rb +3 -7
  227. data/lib/jamf/api/jamf_pro/oapi_schemas/object_history_note.rb +3 -7
  228. data/lib/jamf/api/jamf_pro/oapi_schemas/object_history_v1.rb +2 -6
  229. data/lib/jamf/api/jamf_pro/oapi_schemas/package.rb +1 -1
  230. data/lib/jamf/api/jamf_pro/oapi_schemas/packages_search_results.rb +1 -1
  231. data/lib/jamf/api/jamf_pro/oapi_schemas/plan_configuration_post.rb +12 -3
  232. data/lib/jamf/api/jamf_pro/oapi_schemas/plan_device.rb +2 -2
  233. data/lib/jamf/api/jamf_pro/oapi_schemas/plan_device_post.rb +2 -2
  234. data/lib/jamf/api/jamf_pro/oapi_schemas/plan_device_response.rb +2 -2
  235. data/lib/jamf/api/jamf_pro/oapi_schemas/plan_group_post.rb +2 -2
  236. data/lib/jamf/api/jamf_pro/oapi_schemas/plan_search_results.rb +2 -2
  237. data/lib/jamf/api/jamf_pro/oapi_schemas/plan_status.rb +3 -2
  238. data/lib/jamf/api/jamf_pro/oapi_schemas/post_computer_prestage_v3.rb +2 -7
  239. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_purchasing_information.rb +1 -1
  240. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_purchasing_information_v2.rb +1 -1
  241. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_scope_assignment_v2.rb +1 -1
  242. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_scope_response_v2.rb +2 -6
  243. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_scope_v2.rb +3 -7
  244. data/lib/jamf/api/jamf_pro/oapi_schemas/put_computer_prestage_v3.rb +2 -7
  245. data/lib/jamf/api/jamf_pro/oapi_schemas/put_mobile_device_prestage_v2.rb +2 -7
  246. data/lib/jamf/api/jamf_pro/oapi_schemas/redeploy_jamf_management_framework_response.rb +3 -7
  247. data/lib/jamf/api/jamf_pro/oapi_schemas/v1_site.rb +1 -1
  248. data/lib/jamf/api/jamf_pro/oapi_schemas.rb +25 -2
  249. data/lib/jamf/api/jamf_pro/other_classes/change_log_entry.rb +1 -1
  250. data/lib/jamf/api/jamf_pro/other_classes/ip_address.rb +2 -3
  251. data/lib/jamf/api/jamf_pro/other_classes/pager.rb +1 -1
  252. data/lib/jamf/api/jamf_pro/other_classes/timestamp.rb +1 -1
  253. data/lib/jamf/base_class.rb +1 -1
  254. data/lib/jamf/client/jamf_binary.rb +1 -1
  255. data/lib/jamf/client/jamf_helper.rb +1 -1
  256. data/lib/jamf/client/management_action.rb +1 -1
  257. data/lib/jamf/client.rb +5 -1
  258. data/lib/jamf/composer.rb +115 -107
  259. data/lib/jamf/configuration.rb +137 -138
  260. data/lib/jamf/constants.rb +1 -1
  261. data/lib/jamf/db_connection.rb +13 -19
  262. data/lib/jamf/deprecations/deprecated_api_connection_class.rb +1 -1
  263. data/lib/jamf/deprecations/deprecated_api_constant.rb +3 -1
  264. data/lib/jamf/deprecations/deprecated_config_constant.rb +3 -1
  265. data/lib/jamf/deprecations.rb +1 -1
  266. data/lib/jamf/exceptions.rb +2 -2
  267. data/lib/jamf/oapi_validate.rb +2 -1
  268. data/lib/jamf/ruby_extensions/array/predicates.rb +1 -1
  269. data/lib/jamf/ruby_extensions/array/utils.rb +1 -1
  270. data/lib/jamf/ruby_extensions/array.rb +1 -1
  271. data/lib/jamf/ruby_extensions/filetest/predicates.rb +1 -1
  272. data/lib/jamf/ruby_extensions/filetest.rb +1 -1
  273. data/lib/jamf/ruby_extensions/hash/utils.rb +2 -2
  274. data/lib/jamf/ruby_extensions/hash.rb +1 -1
  275. data/lib/jamf/ruby_extensions/ipaddr/utils.rb +11 -13
  276. data/lib/jamf/ruby_extensions/ipaddr.rb +1 -1
  277. data/lib/jamf/ruby_extensions/object/predicates.rb +1 -1
  278. data/lib/jamf/ruby_extensions/object.rb +1 -1
  279. data/lib/jamf/ruby_extensions/pathname/predicates.rb +1 -1
  280. data/lib/jamf/ruby_extensions/pathname/utils.rb +1 -1
  281. data/lib/jamf/ruby_extensions/pathname.rb +1 -1
  282. data/lib/jamf/ruby_extensions/string/conversions.rb +1 -1
  283. data/lib/jamf/ruby_extensions/string/predicates.rb +1 -1
  284. data/lib/jamf/ruby_extensions/string.rb +1 -1
  285. data/lib/jamf/ruby_extensions/time/utils.rb +2 -3
  286. data/lib/jamf/ruby_extensions/time.rb +1 -1
  287. data/lib/jamf/ruby_extensions.rb +1 -1
  288. data/lib/jamf/utility.rb +1 -1
  289. data/lib/jamf/validate.rb +1 -1
  290. data/lib/jamf/version.rb +2 -2
  291. data/lib/jamf/zeitwerk_config.rb +1 -1
  292. data/lib/jamf.rb +1 -1
  293. data/lib/jss-api.rb +1 -1
  294. data/lib/jss.rb +1 -1
  295. data/lib/ruby-jss.rb +1 -1
  296. data/test/bin/runtests +3 -3
  297. data/test/lib/jamf_test/APITest.rb +7 -6
  298. data/test/lib/jamf_test/advanced_search.rb +1 -2
  299. data/test/lib/jamf_test/auth.rb +1 -1
  300. data/test/lib/jamf_test/collection_tests.rb +13 -5
  301. data/test/lib/jamf_test/prestage_tests.rb +1 -1
  302. data/test/lib/jamf_test.rb +1 -1
  303. data/test/tests/advanced_computer_search.rb +1 -1
  304. data/test/tests/advanced_mobile_device_search.rb +1 -1
  305. data/test/tests/advanced_user_search.rb +1 -1
  306. data/test/tests/building.rb +1 -1
  307. data/test/tests/category.rb +1 -1
  308. data/test/tests/computer.rb +1 -1
  309. data/test/tests/computer_group.rb +30 -14
  310. data/test/tests/computer_prestage.rb +1 -1
  311. data/test/tests/department.rb +1 -1
  312. data/test/tests/device_enrollment.rb +4 -2
  313. data/test/tests/inventory_preload_record.rb +1 -1
  314. data/test/tests/{jp_building.rb → j_building.rb} +3 -3
  315. data/test/tests/j_package.rb +47 -0
  316. data/test/tests/mobile_device.rb +1 -1
  317. data/test/tests/mobile_device_prestage.rb +1 -2
  318. data/test/tests/policy.rb +1 -1
  319. metadata +9 -465
  320. data/lib/jamf/api/jamf_pro/oapi_schemas/access_groups_preview_search_results.rb +0 -90
  321. data/lib/jamf/api/jamf_pro/oapi_schemas/access_groups_v2_search_results.rb +0 -90
  322. data/lib/jamf/api/jamf_pro/oapi_schemas/account.rb +0 -159
  323. data/lib/jamf/api/jamf_pro/oapi_schemas/account_driven_user_enrollment_session_token_settings.rb +0 -97
  324. data/lib/jamf/api/jamf_pro/oapi_schemas/account_preferences.rb +0 -107
  325. data/lib/jamf/api/jamf_pro/oapi_schemas/account_preferences_search_type.rb +0 -105
  326. data/lib/jamf/api/jamf_pro/oapi_schemas/account_preferences_user_interface_display_theme.rb +0 -88
  327. data/lib/jamf/api/jamf_pro/oapi_schemas/account_preferences_v4.rb +0 -142
  328. data/lib/jamf/api/jamf_pro/oapi_schemas/account_preferences_v5.rb +0 -299
  329. data/lib/jamf/api/jamf_pro/oapi_schemas/activation_code.rb +0 -86
  330. data/lib/jamf/api/jamf_pro/oapi_schemas/advanced_search.rb +0 -117
  331. data/lib/jamf/api/jamf_pro/oapi_schemas/advanced_search_criteria_choices.rb +0 -83
  332. data/lib/jamf/api/jamf_pro/oapi_schemas/advanced_search_search_results.rb +0 -91
  333. data/lib/jamf/api/jamf_pro/oapi_schemas/advanced_user_content_search.rb +0 -117
  334. data/lib/jamf/api/jamf_pro/oapi_schemas/advanced_user_content_search_search_results.rb +0 -91
  335. data/lib/jamf/api/jamf_pro/oapi_schemas/api_role_privileges.rb +0 -87
  336. data/lib/jamf/api/jamf_pro/oapi_schemas/app_analytics_setting.rb +0 -87
  337. data/lib/jamf/api/jamf_pro/oapi_schemas/app_config_reinstall_code.rb +0 -82
  338. data/lib/jamf/api/jamf_pro/oapi_schemas/app_path.rb +0 -90
  339. data/lib/jamf/api/jamf_pro/oapi_schemas/app_request_form_input_field.rb +0 -115
  340. data/lib/jamf/api/jamf_pro/oapi_schemas/app_request_form_input_field_search_results.rb +0 -91
  341. data/lib/jamf/api/jamf_pro/oapi_schemas/app_request_settings.rb +0 -104
  342. data/lib/jamf/api/jamf_pro/oapi_schemas/application_attributes.rb +0 -87
  343. data/lib/jamf/api/jamf_pro/oapi_schemas/application_configuration.rb +0 -87
  344. data/lib/jamf/api/jamf_pro/oapi_schemas/assignment.rb +0 -88
  345. data/lib/jamf/api/jamf_pro/oapi_schemas/attributes.rb +0 -100
  346. data/lib/jamf/api/jamf_pro/oapi_schemas/auth_account.rb +0 -159
  347. data/lib/jamf/api/jamf_pro/oapi_schemas/auth_token.rb +0 -88
  348. data/lib/jamf/api/jamf_pro/oapi_schemas/auth_token_v1.rb +0 -90
  349. data/lib/jamf/api/jamf_pro/oapi_schemas/authorization.rb +0 -105
  350. data/lib/jamf/api/jamf_pro/oapi_schemas/available_os_updates.rb +0 -82
  351. data/lib/jamf/api/jamf_pro/oapi_schemas/azure_configuration.rb +0 -94
  352. data/lib/jamf/api/jamf_pro/oapi_schemas/azure_configuration_request.rb +0 -92
  353. data/lib/jamf/api/jamf_pro/oapi_schemas/azure_configuration_update.rb +0 -92
  354. data/lib/jamf/api/jamf_pro/oapi_schemas/azure_mappings.rb +0 -156
  355. data/lib/jamf/api/jamf_pro/oapi_schemas/azure_server_configuration.rb +0 -160
  356. data/lib/jamf/api/jamf_pro/oapi_schemas/azure_server_configuration_request.rb +0 -152
  357. data/lib/jamf/api/jamf_pro/oapi_schemas/azure_server_configuration_update.rb +0 -138
  358. data/lib/jamf/api/jamf_pro/oapi_schemas/branding_image_url.rb +0 -86
  359. data/lib/jamf/api/jamf_pro/oapi_schemas/cache_settings.rb +0 -150
  360. data/lib/jamf/api/jamf_pro/oapi_schemas/categories_search_results.rb +0 -91
  361. data/lib/jamf/api/jamf_pro/oapi_schemas/category.rb +0 -104
  362. data/lib/jamf/api/jamf_pro/oapi_schemas/certificate_details.rb +0 -92
  363. data/lib/jamf/api/jamf_pro/oapi_schemas/certificate_identity_v2.rb +0 -112
  364. data/lib/jamf/api/jamf_pro/oapi_schemas/certificate_key.rb +0 -89
  365. data/lib/jamf/api/jamf_pro/oapi_schemas/certificate_record.rb +0 -146
  366. data/lib/jamf/api/jamf_pro/oapi_schemas/change_password.rb +0 -94
  367. data/lib/jamf/api/jamf_pro/oapi_schemas/classic_ldap_mappings.rb +0 -168
  368. data/lib/jamf/api/jamf_pro/oapi_schemas/clear_restrictions_password_command.rb +0 -77
  369. data/lib/jamf/api/jamf_pro/oapi_schemas/client_check_in_v3.rb +0 -134
  370. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_distribution_point_upload_capability.rb +0 -88
  371. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_id_p_common.rb +0 -108
  372. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_id_p_common_request.rb +0 -97
  373. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_id_p_common_response.rb +0 -108
  374. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_ldap_connection_pool_statistics.rb +0 -170
  375. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_ldap_connection_status.rb +0 -83
  376. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_ldap_keystore.rb +0 -102
  377. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_ldap_keystore_file.rb +0 -103
  378. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_ldap_mappings_request.rb +0 -101
  379. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_ldap_mappings_response.rb +0 -101
  380. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_ldap_server_request.rb +0 -157
  381. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_ldap_server_response.rb +0 -154
  382. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_ldap_server_update.rb +0 -154
  383. data/lib/jamf/api/jamf_pro/oapi_schemas/cloud_response.rb +0 -88
  384. data/lib/jamf/api/jamf_pro/oapi_schemas/compliance_vendor_device_information.rb +0 -84
  385. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_general_update.rb +0 -124
  386. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_group.rb +0 -97
  387. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_hardware_update.rb +0 -106
  388. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_inventory_collection_preferences.rb +0 -177
  389. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_inventory_collection_settings.rb +0 -108
  390. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_inventory_file_vault_search_results.rb +0 -90
  391. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_inventory_recovery_lock_password_response.rb +0 -84
  392. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_inventory_search_results.rb +0 -90
  393. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_inventory_update_request.rb +0 -124
  394. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_location.rb +0 -93
  395. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_operating_system_update.rb +0 -82
  396. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_overview.rb +0 -194
  397. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_prestage_search_results_v2.rb +0 -91
  398. data/lib/jamf/api/jamf_pro/oapi_schemas/computer_prestage_v2.rb +0 -129
  399. data/lib/jamf/api/jamf_pro/oapi_schemas/computers_search_results.rb +0 -91
  400. data/lib/jamf/api/jamf_pro/oapi_schemas/configuration_profile.rb +0 -101
  401. data/lib/jamf/api/jamf_pro/oapi_schemas/configuration_search_results.rb +0 -90
  402. data/lib/jamf/api/jamf_pro/oapi_schemas/connection_configuration_candidate_request.rb +0 -123
  403. data/lib/jamf/api/jamf_pro/oapi_schemas/connection_configuration_response.rb +0 -123
  404. data/lib/jamf/api/jamf_pro/oapi_schemas/connection_configuration_status_response.rb +0 -85
  405. data/lib/jamf/api/jamf_pro/oapi_schemas/connection_configuration_update_request.rb +0 -109
  406. data/lib/jamf/api/jamf_pro/oapi_schemas/country.rb +0 -87
  407. data/lib/jamf/api/jamf_pro/oapi_schemas/country_codes.rb +0 -83
  408. data/lib/jamf/api/jamf_pro/oapi_schemas/create_path.rb +0 -97
  409. data/lib/jamf/api/jamf_pro/oapi_schemas/credentials.rb +0 -129
  410. data/lib/jamf/api/jamf_pro/oapi_schemas/csa_token.rb +0 -96
  411. data/lib/jamf/api/jamf_pro/oapi_schemas/current_account.rb +0 -160
  412. data/lib/jamf/api/jamf_pro/oapi_schemas/current_authorization.rb +0 -97
  413. data/lib/jamf/api/jamf_pro/oapi_schemas/dashboard_api_error.rb +0 -95
  414. data/lib/jamf/api/jamf_pro/oapi_schemas/dashboard_item.rb +0 -131
  415. data/lib/jamf/api/jamf_pro/oapi_schemas/dashboard_setup.rb +0 -89
  416. data/lib/jamf/api/jamf_pro/oapi_schemas/dashboard_setup_task.rb +0 -87
  417. data/lib/jamf/api/jamf_pro/oapi_schemas/data_roaming_setting.rb +0 -87
  418. data/lib/jamf/api/jamf_pro/oapi_schemas/database_password.rb +0 -86
  419. data/lib/jamf/api/jamf_pro/oapi_schemas/day_of_week.rb +0 -92
  420. data/lib/jamf/api/jamf_pro/oapi_schemas/declarative_management_command.rb +0 -82
  421. data/lib/jamf/api/jamf_pro/oapi_schemas/delete_user_command.rb +0 -93
  422. data/lib/jamf/api/jamf_pro/oapi_schemas/department.rb +0 -98
  423. data/lib/jamf/api/jamf_pro/oapi_schemas/departments_search_results.rb +0 -91
  424. data/lib/jamf/api/jamf_pro/oapi_schemas/deployment_task.rb +0 -129
  425. data/lib/jamf/api/jamf_pro/oapi_schemas/deployment_task_search_results.rb +0 -91
  426. data/lib/jamf/api/jamf_pro/oapi_schemas/details_v2.rb +0 -264
  427. data/lib/jamf/api/jamf_pro/oapi_schemas/device_communication_settings.rb +0 -128
  428. data/lib/jamf/api/jamf_pro/oapi_schemas/device_compliance_information.rb +0 -123
  429. data/lib/jamf/api/jamf_pro/oapi_schemas/device_enrollment_disown_body.rb +0 -83
  430. data/lib/jamf/api/jamf_pro/oapi_schemas/device_enrollment_prestage.rb +0 -215
  431. data/lib/jamf/api/jamf_pro/oapi_schemas/device_information_command.rb +0 -83
  432. data/lib/jamf/api/jamf_pro/oapi_schemas/diagnostic_submission_setting.rb +0 -87
  433. data/lib/jamf/api/jamf_pro/oapi_schemas/dock_item.rb +0 -124
  434. data/lib/jamf/api/jamf_pro/oapi_schemas/download_url.rb +0 -83
  435. data/lib/jamf/api/jamf_pro/oapi_schemas/ebook.rb +0 -152
  436. data/lib/jamf/api/jamf_pro/oapi_schemas/ebook_exclusions.rb +0 -137
  437. data/lib/jamf/api/jamf_pro/oapi_schemas/ebook_limitations.rb +0 -97
  438. data/lib/jamf/api/jamf_pro/oapi_schemas/ebook_scope.rb +0 -170
  439. data/lib/jamf/api/jamf_pro/oapi_schemas/ebook_search_results.rb +0 -90
  440. data/lib/jamf/api/jamf_pro/oapi_schemas/enable_lost_mode_command.rb +0 -93
  441. data/lib/jamf/api/jamf_pro/oapi_schemas/engage.rb +0 -88
  442. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_access_group_preview.rb +0 -141
  443. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_access_group_v2.rb +0 -132
  444. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization.rb +0 -106
  445. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_branding_settings.rb +0 -111
  446. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_dependencies.rb +0 -85
  447. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_dependency.rb +0 -93
  448. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_ldap_group_access.rb +0 -87
  449. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_panel.rb +0 -89
  450. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_panel_ldap_auth.rb +0 -121
  451. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_panel_list.rb +0 -83
  452. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_panel_sso_auth.rb +0 -113
  453. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_panel_text.rb +0 -112
  454. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_search_results.rb +0 -90
  455. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_search_results_v2.rb +0 -90
  456. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_customization_v2.rb +0 -116
  457. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_method_prestage.rb +0 -87
  458. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_process_text_object.rb +0 -346
  459. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_settings_v2.rb +0 -278
  460. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_settings_v3.rb +0 -246
  461. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_settings_v4.rb +0 -264
  462. data/lib/jamf/api/jamf_pro/oapi_schemas/enrollment_sso_config.rb +0 -91
  463. data/lib/jamf/api/jamf_pro/oapi_schemas/erase_device_command.rb +0 -120
  464. data/lib/jamf/api/jamf_pro/oapi_schemas/export_field.rb +0 -91
  465. data/lib/jamf/api/jamf_pro/oapi_schemas/export_parameters.rb +0 -133
  466. data/lib/jamf/api/jamf_pro/oapi_schemas/extension_attribute_v2.rb +0 -116
  467. data/lib/jamf/api/jamf_pro/oapi_schemas/external_recipient.rb +0 -91
  468. data/lib/jamf/api/jamf_pro/oapi_schemas/file_attachment.rb +0 -89
  469. data/lib/jamf/api/jamf_pro/oapi_schemas/file_attachment_delete.rb +0 -83
  470. data/lib/jamf/api/jamf_pro/oapi_schemas/file_attachment_v2.rb +0 -89
  471. data/lib/jamf/api/jamf_pro/oapi_schemas/file_data.rb +0 -117
  472. data/lib/jamf/api/jamf_pro/oapi_schemas/file_transfer_item.rb +0 -100
  473. data/lib/jamf/api/jamf_pro/oapi_schemas/font_path.rb +0 -90
  474. data/lib/jamf/api/jamf_pro/oapi_schemas/get_computer_prestage_v2.rb +0 -104
  475. data/lib/jamf/api/jamf_pro/oapi_schemas/get_enrollment_customization.rb +0 -87
  476. data/lib/jamf/api/jamf_pro/oapi_schemas/get_enrollment_customization_panel.rb +0 -89
  477. data/lib/jamf/api/jamf_pro/oapi_schemas/get_enrollment_customization_panel_ldap_auth.rb +0 -93
  478. data/lib/jamf/api/jamf_pro/oapi_schemas/get_enrollment_customization_panel_sso_auth.rb +0 -93
  479. data/lib/jamf/api/jamf_pro/oapi_schemas/get_enrollment_customization_panel_text.rb +0 -93
  480. data/lib/jamf/api/jamf_pro/oapi_schemas/get_mobile_device_prestage.rb +0 -105
  481. data/lib/jamf/api/jamf_pro/oapi_schemas/group_mappings.rb +0 -138
  482. data/lib/jamf/api/jamf_pro/oapi_schemas/group_test_search.rb +0 -106
  483. data/lib/jamf/api/jamf_pro/oapi_schemas/group_test_search_request.rb +0 -83
  484. data/lib/jamf/api/jamf_pro/oapi_schemas/group_test_search_response.rb +0 -89
  485. data/lib/jamf/api/jamf_pro/oapi_schemas/gsx_connection.rb +0 -127
  486. data/lib/jamf/api/jamf_pro/oapi_schemas/gsx_connection_update.rb +0 -114
  487. data/lib/jamf/api/jamf_pro/oapi_schemas/gsx_keystore.rb +0 -117
  488. data/lib/jamf/api/jamf_pro/oapi_schemas/gsx_test_response.rb +0 -96
  489. data/lib/jamf/api/jamf_pro/oapi_schemas/history_search_results.rb +0 -151
  490. data/lib/jamf/api/jamf_pro/oapi_schemas/href_response.rb +0 -194
  491. data/lib/jamf/api/jamf_pro/oapi_schemas/icon_response.rb +0 -91
  492. data/lib/jamf/api/jamf_pro/oapi_schemas/id_and_name_v2.rb +0 -88
  493. data/lib/jamf/api/jamf_pro/oapi_schemas/ids.rb +0 -101
  494. data/lib/jamf/api/jamf_pro/oapi_schemas/initialize_v1.rb +0 -133
  495. data/lib/jamf/api/jamf_pro/oapi_schemas/install_package.rb +0 -103
  496. data/lib/jamf/api/jamf_pro/oapi_schemas/internal_recipient.rb +0 -94
  497. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_information.rb +0 -113
  498. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_list_mobile_device.rb +0 -680
  499. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_list_mobile_device_search_results.rb +0 -90
  500. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_csv_error.rb +0 -123
  501. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_csv_validation_error.rb +0 -89
  502. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_csv_validation_error_cause.rb +0 -105
  503. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_csv_validation_success.rb +0 -86
  504. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_extension_attribute_column.rb +0 -87
  505. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_extension_attribute_column_result.rb +0 -90
  506. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_invalid_csv_response.rb +0 -88
  507. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_record.rb +0 -248
  508. data/lib/jamf/api/jamf_pro/oapi_schemas/inventory_preload_record_search_results.rb +0 -92
  509. data/lib/jamf/api/jamf_pro/oapi_schemas/ios_branding_configuration.rb +0 -129
  510. data/lib/jamf/api/jamf_pro/oapi_schemas/ios_branding_search_results.rb +0 -90
  511. data/lib/jamf/api/jamf_pro/oapi_schemas/jamf_application_response.rb +0 -95
  512. data/lib/jamf/api/jamf_pro/oapi_schemas/jamf_package_response.rb +0 -107
  513. data/lib/jamf/api/jamf_pro/oapi_schemas/jamf_pro_information.rb +0 -124
  514. data/lib/jamf/api/jamf_pro/oapi_schemas/jamf_pro_information_v2.rb +0 -124
  515. data/lib/jamf/api/jamf_pro/oapi_schemas/jamf_pro_server_url.rb +0 -85
  516. data/lib/jamf/api/jamf_pro/oapi_schemas/jamf_pro_version.rb +0 -82
  517. data/lib/jamf/api/jamf_pro/oapi_schemas/jamf_protect_plan.rb +0 -125
  518. data/lib/jamf/api/jamf_pro/oapi_schemas/jcds_properties.rb +0 -94
  519. data/lib/jamf/api/jamf_pro/oapi_schemas/language_code.rb +0 -94
  520. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_account_management_history.rb +0 -123
  521. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_account_management_history_response.rb +0 -90
  522. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_audit.rb +0 -90
  523. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_audit_v2.rb +0 -90
  524. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_history.rb +0 -114
  525. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_history_response.rb +0 -92
  526. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_password_and_audits.rb +0 -107
  527. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_password_and_audits_v2.rb +0 -107
  528. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_password_audits_results.rb +0 -90
  529. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_password_audits_results_v2.rb +0 -92
  530. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_password_response.rb +0 -84
  531. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_password_response_v2.rb +0 -86
  532. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_pending_rotation.rb +0 -88
  533. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_pending_rotation_response.rb +0 -90
  534. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_settings_request.rb +0 -100
  535. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_settings_request_v2.rb +0 -108
  536. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_settings_response.rb +0 -99
  537. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_settings_response_v2.rb +0 -106
  538. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_user.rb +0 -105
  539. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_user_password.rb +0 -90
  540. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_user_password_request.rb +0 -84
  541. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_user_password_request_v2.rb +0 -84
  542. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_user_password_response.rb +0 -83
  543. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_user_password_response_v2.rb +0 -83
  544. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_user_password_v2.rb +0 -90
  545. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_user_results.rb +0 -90
  546. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_user_results_v2.rb +0 -90
  547. data/lib/jamf/api/jamf_pro/oapi_schemas/laps_user_v2.rb +0 -106
  548. data/lib/jamf/api/jamf_pro/oapi_schemas/ldap_configuration_request.rb +0 -99
  549. data/lib/jamf/api/jamf_pro/oapi_schemas/ldap_configuration_response.rb +0 -101
  550. data/lib/jamf/api/jamf_pro/oapi_schemas/ldap_configuration_update.rb +0 -99
  551. data/lib/jamf/api/jamf_pro/oapi_schemas/ldap_group.rb +0 -107
  552. data/lib/jamf/api/jamf_pro/oapi_schemas/ldap_group_search_results.rb +0 -92
  553. data/lib/jamf/api/jamf_pro/oapi_schemas/ldap_server.rb +0 -94
  554. data/lib/jamf/api/jamf_pro/oapi_schemas/linked_connect_profile.rb +0 -126
  555. data/lib/jamf/api/jamf_pro/oapi_schemas/linked_connect_profile_search_results.rb +0 -89
  556. data/lib/jamf/api/jamf_pro/oapi_schemas/locale.rb +0 -88
  557. data/lib/jamf/api/jamf_pro/oapi_schemas/location_v2.rb +0 -124
  558. data/lib/jamf/api/jamf_pro/oapi_schemas/log_out_user_command.rb +0 -77
  559. data/lib/jamf/api/jamf_pro/oapi_schemas/login_content.rb +0 -107
  560. data/lib/jamf/api/jamf_pro/oapi_schemas/login_content_put.rb +0 -101
  561. data/lib/jamf/api/jamf_pro/oapi_schemas/mac_os_branding_configuration.rb +0 -118
  562. data/lib/jamf/api/jamf_pro/oapi_schemas/mac_os_branding_search_results.rb +0 -90
  563. data/lib/jamf/api/jamf_pro/oapi_schemas/markdown.rb +0 -84
  564. data/lib/jamf/api/jamf_pro/oapi_schemas/mdm_client_type.rb +0 -90
  565. data/lib/jamf/api/jamf_pro/oapi_schemas/mdm_command.rb +0 -109
  566. data/lib/jamf/api/jamf_pro/oapi_schemas/mdm_command_base.rb +0 -82
  567. data/lib/jamf/api/jamf_pro/oapi_schemas/mdm_command_client.rb +0 -87
  568. data/lib/jamf/api/jamf_pro/oapi_schemas/mdm_command_client_request.rb +0 -81
  569. data/lib/jamf/api/jamf_pro/oapi_schemas/mdm_command_request.rb +0 -87
  570. data/lib/jamf/api/jamf_pro/oapi_schemas/mdm_command_results.rb +0 -89
  571. data/lib/jamf/api/jamf_pro/oapi_schemas/mdm_command_state.rb +0 -89
  572. data/lib/jamf/api/jamf_pro/oapi_schemas/mdm_command_type.rb +0 -98
  573. data/lib/jamf/api/jamf_pro/oapi_schemas/membership_mappings.rb +0 -84
  574. data/lib/jamf/api/jamf_pro/oapi_schemas/membership_test_search_request.rb +0 -90
  575. data/lib/jamf/api/jamf_pro/oapi_schemas/membership_test_search_response.rb +0 -88
  576. data/lib/jamf/api/jamf_pro/oapi_schemas/memcached_endpoints.rb +0 -114
  577. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_application.rb +0 -100
  578. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_application_inventory_detail.rb +0 -123
  579. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_attachment_v2.rb +0 -90
  580. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_certificate.rb +0 -94
  581. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_certificate_v2.rb +0 -147
  582. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_details_get_v2.rb +0 -83
  583. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_details_v2.rb +0 -295
  584. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_ebook.rb +0 -93
  585. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_ebook_inventory_detail.rb +0 -105
  586. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_extension_attribute.rb +0 -125
  587. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_extension_attribute_results.rb +0 -83
  588. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_general.rb +0 -216
  589. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_group.rb +0 -96
  590. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_hardware.rb +0 -160
  591. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_inventory.rb +0 -136
  592. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_inventory_search_results.rb +0 -91
  593. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_ios_general.rb +0 -191
  594. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_ios_inventory.rb +0 -134
  595. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_lost_mode_location.rb +0 -118
  596. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_network.rb +0 -180
  597. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_prestage.rb +0 -136
  598. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_prestage_name.rb +0 -94
  599. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_prestage_names.rb +0 -118
  600. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_prestage_search_results.rb +0 -90
  601. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_profile.rb +0 -112
  602. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_provisioning_profiles.rb +0 -95
  603. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_purchasing.rb +0 -157
  604. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_response.rb +0 -74
  605. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_search_results_v2.rb +0 -90
  606. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_section.rb +0 -100
  607. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_security.rb +0 -178
  608. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_service_subscriptions.rb +0 -173
  609. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_shared_user.rb +0 -93
  610. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_tv_os_general.rb +0 -93
  611. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_tv_os_inventory.rb +0 -94
  612. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_user_and_location.rb +0 -142
  613. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_user_profile.rb +0 -118
  614. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_v2.rb +0 -160
  615. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_watch_os_general.rb +0 -112
  616. data/lib/jamf/api/jamf_pro/oapi_schemas/mobile_device_watch_os_inventory.rb +0 -94
  617. data/lib/jamf/api/jamf_pro/oapi_schemas/network_v2.rb +0 -179
  618. data/lib/jamf/api/jamf_pro/oapi_schemas/notification.rb +0 -96
  619. data/lib/jamf/api/jamf_pro/oapi_schemas/notification_type.rb +0 -147
  620. data/lib/jamf/api/jamf_pro/oapi_schemas/notification_v1.rb +0 -96
  621. data/lib/jamf/api/jamf_pro/oapi_schemas/object_history.rb +0 -141
  622. data/lib/jamf/api/jamf_pro/oapi_schemas/onboarding_configuration.rb +0 -101
  623. data/lib/jamf/api/jamf_pro/oapi_schemas/onboarding_eligible_item.rb +0 -104
  624. data/lib/jamf/api/jamf_pro/oapi_schemas/onboarding_eligible_items_search_result.rb +0 -94
  625. data/lib/jamf/api/jamf_pro/oapi_schemas/onboarding_item.rb +0 -140
  626. data/lib/jamf/api/jamf_pro/oapi_schemas/package_manifest.rb +0 -148
  627. data/lib/jamf/api/jamf_pro/oapi_schemas/parent_app.rb +0 -131
  628. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_policies.rb +0 -89
  629. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_policy_detail.rb +0 -190
  630. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_policy_details.rb +0 -89
  631. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_policy_list_view.rb +0 -142
  632. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_policy_log_detail.rb +0 -102
  633. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_policy_log_detail_action.rb +0 -94
  634. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_policy_log_eligible_retry_count.rb +0 -82
  635. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_policy_log_retry.rb +0 -83
  636. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_policy_log_v2.rb +0 -133
  637. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_policy_logs.rb +0 -89
  638. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_policy_v2_on_dashboard.rb +0 -82
  639. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_configuration.rb +0 -94
  640. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_configuration_base.rb +0 -163
  641. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_configuration_definition_kill_app.rb +0 -81
  642. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_configuration_dependencies.rb +0 -89
  643. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_configuration_dependency.rb +0 -87
  644. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_configuration_extension_attributes.rb +0 -89
  645. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_configuration_patch.rb +0 -126
  646. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_definition.rb +0 -118
  647. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_definitions.rb +0 -89
  648. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_extension_attributes.rb +0 -101
  649. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_packages.rb +0 -94
  650. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_report.rb +0 -130
  651. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_software_title_report_search_result.rb +0 -89
  652. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_summary.rb +0 -125
  653. data/lib/jamf/api/jamf_pro/oapi_schemas/patch_summary_version.rb +0 -94
  654. data/lib/jamf/api/jamf_pro/oapi_schemas/personal_hotspot_setting.rb +0 -87
  655. data/lib/jamf/api/jamf_pro/oapi_schemas/plugin_path.rb +0 -90
  656. data/lib/jamf/api/jamf_pro/oapi_schemas/policy_properties.rb +0 -91
  657. data/lib/jamf/api/jamf_pro/oapi_schemas/policy_properties_v1.rb +0 -91
  658. data/lib/jamf/api/jamf_pro/oapi_schemas/post_computer_prestage_v2.rb +0 -85
  659. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_dependencies.rb +0 -85
  660. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_dependency.rb +0 -93
  661. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_file_attachment.rb +0 -95
  662. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_file_attachment_v2.rb +0 -95
  663. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_scope.rb +0 -84
  664. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_scope_assignment.rb +0 -93
  665. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_scope_response.rb +0 -109
  666. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_scope_update.rb +0 -113
  667. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_sync_status.rb +0 -98
  668. data/lib/jamf/api/jamf_pro/oapi_schemas/prestage_sync_status_v2.rb +0 -98
  669. data/lib/jamf/api/jamf_pro/oapi_schemas/process_texts_search_results.rb +0 -92
  670. data/lib/jamf/api/jamf_pro/oapi_schemas/protect_registration_request.rb +0 -100
  671. data/lib/jamf/api/jamf_pro/oapi_schemas/protect_settings_response.rb +0 -141
  672. data/lib/jamf/api/jamf_pro/oapi_schemas/protect_updatable_settings_request.rb +0 -83
  673. data/lib/jamf/api/jamf_pro/oapi_schemas/purchasing_v2.rb +0 -153
  674. data/lib/jamf/api/jamf_pro/oapi_schemas/put_computer_prestage_v2.rb +0 -91
  675. data/lib/jamf/api/jamf_pro/oapi_schemas/put_mobile_device_prestage.rb +0 -82
  676. data/lib/jamf/api/jamf_pro/oapi_schemas/recalculation_results.rb +0 -92
  677. data/lib/jamf/api/jamf_pro/oapi_schemas/reenrollment.rb +0 -117
  678. data/lib/jamf/api/jamf_pro/oapi_schemas/remote_administration_response.rb +0 -107
  679. data/lib/jamf/api/jamf_pro/oapi_schemas/remote_administration_search_results.rb +0 -90
  680. data/lib/jamf/api/jamf_pro/oapi_schemas/renew_mdm_profile_response.rb +0 -82
  681. data/lib/jamf/api/jamf_pro/oapi_schemas/restart_device_command.rb +0 -95
  682. data/lib/jamf/api/jamf_pro/oapi_schemas/return_to_service_configuration.rb +0 -100
  683. data/lib/jamf/api/jamf_pro/oapi_schemas/return_to_service_configuration_request.rb +0 -92
  684. data/lib/jamf/api/jamf_pro/oapi_schemas/return_to_service_configuration_search_results.rb +0 -91
  685. data/lib/jamf/api/jamf_pro/oapi_schemas/safelisted_app.rb +0 -89
  686. data/lib/jamf/api/jamf_pro/oapi_schemas/scheduler_job.rb +0 -89
  687. data/lib/jamf/api/jamf_pro/oapi_schemas/scheduler_jobs.rb +0 -83
  688. data/lib/jamf/api/jamf_pro/oapi_schemas/scheduler_summary.rb +0 -100
  689. data/lib/jamf/api/jamf_pro/oapi_schemas/scheduler_trigger.rb +0 -95
  690. data/lib/jamf/api/jamf_pro/oapi_schemas/script.rb +0 -193
  691. data/lib/jamf/api/jamf_pro/oapi_schemas/scripts_search_results.rb +0 -91
  692. data/lib/jamf/api/jamf_pro/oapi_schemas/security_v2.rb +0 -130
  693. data/lib/jamf/api/jamf_pro/oapi_schemas/self_service_install_settings.rb +0 -92
  694. data/lib/jamf/api/jamf_pro/oapi_schemas/self_service_interaction_settings.rb +0 -122
  695. data/lib/jamf/api/jamf_pro/oapi_schemas/self_service_login_settings.rb +0 -113
  696. data/lib/jamf/api/jamf_pro/oapi_schemas/self_service_settings.rb +0 -100
  697. data/lib/jamf/api/jamf_pro/oapi_schemas/session.rb +0 -82
  698. data/lib/jamf/api/jamf_pro/oapi_schemas/session_candidate_request.rb +0 -108
  699. data/lib/jamf/api/jamf_pro/oapi_schemas/session_details.rb +0 -175
  700. data/lib/jamf/api/jamf_pro/oapi_schemas/session_details_search_results.rb +0 -90
  701. data/lib/jamf/api/jamf_pro/oapi_schemas/session_history_item.rb +0 -145
  702. data/lib/jamf/api/jamf_pro/oapi_schemas/session_history_item_details.rb +0 -82
  703. data/lib/jamf/api/jamf_pro/oapi_schemas/session_history_item_with_details.rb +0 -153
  704. data/lib/jamf/api/jamf_pro/oapi_schemas/session_history_search_results.rb +0 -91
  705. data/lib/jamf/api/jamf_pro/oapi_schemas/session_status.rb +0 -98
  706. data/lib/jamf/api/jamf_pro/oapi_schemas/set_auto_admin_password_command.rb +0 -92
  707. data/lib/jamf/api/jamf_pro/oapi_schemas/set_recovery_lock_command.rb +0 -83
  708. data/lib/jamf/api/jamf_pro/oapi_schemas/settings_command.rb +0 -166
  709. data/lib/jamf/api/jamf_pro/oapi_schemas/shared_device_compliance_feature_toggle.rb +0 -83
  710. data/lib/jamf/api/jamf_pro/oapi_schemas/shared_device_configuration.rb +0 -87
  711. data/lib/jamf/api/jamf_pro/oapi_schemas/shut_down_device_command.rb +0 -77
  712. data/lib/jamf/api/jamf_pro/oapi_schemas/signature.rb +0 -93
  713. data/lib/jamf/api/jamf_pro/oapi_schemas/site.rb +0 -90
  714. data/lib/jamf/api/jamf_pro/oapi_schemas/site_object.rb +0 -150
  715. data/lib/jamf/api/jamf_pro/oapi_schemas/smart_search_criterion.rb +0 -118
  716. data/lib/jamf/api/jamf_pro/oapi_schemas/smtp_basic_credentials.rb +0 -91
  717. data/lib/jamf/api/jamf_pro/oapi_schemas/smtp_connection_settings.rb +0 -113
  718. data/lib/jamf/api/jamf_pro/oapi_schemas/smtp_graph_api_credentials.rb +0 -98
  719. data/lib/jamf/api/jamf_pro/oapi_schemas/smtp_sender_settings.rb +0 -88
  720. data/lib/jamf/api/jamf_pro/oapi_schemas/smtp_server.rb +0 -158
  721. data/lib/jamf/api/jamf_pro/oapi_schemas/smtp_server_test.rb +0 -83
  722. data/lib/jamf/api/jamf_pro/oapi_schemas/smtp_server_v2.rb +0 -127
  723. data/lib/jamf/api/jamf_pro/oapi_schemas/software_title_configuration_on_dashboard.rb +0 -82
  724. data/lib/jamf/api/jamf_pro/oapi_schemas/software_update_settings.rb +0 -88
  725. data/lib/jamf/api/jamf_pro/oapi_schemas/sso_failover_data.rb +0 -93
  726. data/lib/jamf/api/jamf_pro/oapi_schemas/sso_keystore.rb +0 -128
  727. data/lib/jamf/api/jamf_pro/oapi_schemas/sso_keystore_cert_parse_response.rb +0 -130
  728. data/lib/jamf/api/jamf_pro/oapi_schemas/sso_keystore_details.rb +0 -107
  729. data/lib/jamf/api/jamf_pro/oapi_schemas/sso_keystore_parse.rb +0 -103
  730. data/lib/jamf/api/jamf_pro/oapi_schemas/sso_keystore_response.rb +0 -120
  731. data/lib/jamf/api/jamf_pro/oapi_schemas/sso_keystore_response_with_details.rb +0 -93
  732. data/lib/jamf/api/jamf_pro/oapi_schemas/sso_keystore_with_details.rb +0 -93
  733. data/lib/jamf/api/jamf_pro/oapi_schemas/sso_metadata_url.rb +0 -85
  734. data/lib/jamf/api/jamf_pro/oapi_schemas/sso_settings_v1.rb +0 -253
  735. data/lib/jamf/api/jamf_pro/oapi_schemas/sso_settings_v2.rb +0 -253
  736. data/lib/jamf/api/jamf_pro/oapi_schemas/startup_status.rb +0 -197
  737. data/lib/jamf/api/jamf_pro/oapi_schemas/static_group.rb +0 -94
  738. data/lib/jamf/api/jamf_pro/oapi_schemas/static_group_assignment.rb +0 -105
  739. data/lib/jamf/api/jamf_pro/oapi_schemas/static_group_search_results.rb +0 -90
  740. data/lib/jamf/api/jamf_pro/oapi_schemas/static_group_summary.rb +0 -101
  741. data/lib/jamf/api/jamf_pro/oapi_schemas/static_user_group.rb +0 -91
  742. data/lib/jamf/api/jamf_pro/oapi_schemas/supervision_identity.rb +0 -107
  743. data/lib/jamf/api/jamf_pro/oapi_schemas/supervision_identity_certificate_upload.rb +0 -100
  744. data/lib/jamf/api/jamf_pro/oapi_schemas/supervision_identity_create.rb +0 -91
  745. data/lib/jamf/api/jamf_pro/oapi_schemas/supervision_identity_search_results.rb +0 -90
  746. data/lib/jamf/api/jamf_pro/oapi_schemas/supervision_identity_update.rb +0 -83
  747. data/lib/jamf/api/jamf_pro/oapi_schemas/teacher_features.rb +0 -105
  748. data/lib/jamf/api/jamf_pro/oapi_schemas/teacher_settings_request.rb +0 -108
  749. data/lib/jamf/api/jamf_pro/oapi_schemas/teacher_settings_response.rb +0 -122
  750. data/lib/jamf/api/jamf_pro/oapi_schemas/time_frame.rb +0 -87
  751. data/lib/jamf/api/jamf_pro/oapi_schemas/time_zone.rb +0 -107
  752. data/lib/jamf/api/jamf_pro/oapi_schemas/tv_os_details.rb +0 -141
  753. data/lib/jamf/api/jamf_pro/oapi_schemas/udids.rb +0 -83
  754. data/lib/jamf/api/jamf_pro/oapi_schemas/update_ios_v2.rb +0 -81
  755. data/lib/jamf/api/jamf_pro/oapi_schemas/update_mobile_device_v2.rb +0 -137
  756. data/lib/jamf/api/jamf_pro/oapi_schemas/update_tv_os.rb +0 -88
  757. data/lib/jamf/api/jamf_pro/oapi_schemas/user_mappings.rb +0 -193
  758. data/lib/jamf/api/jamf_pro/oapi_schemas/user_preferences_settings.rb +0 -100
  759. data/lib/jamf/api/jamf_pro/oapi_schemas/user_test_attributes.rb +0 -117
  760. data/lib/jamf/api/jamf_pro/oapi_schemas/user_test_search.rb +0 -112
  761. data/lib/jamf/api/jamf_pro/oapi_schemas/user_test_search_request.rb +0 -83
  762. data/lib/jamf/api/jamf_pro/oapi_schemas/user_test_search_response.rb +0 -89
  763. data/lib/jamf/api/jamf_pro/oapi_schemas/venafi_ca_record.rb +0 -148
  764. data/lib/jamf/api/jamf_pro/oapi_schemas/venafi_pki_payload_record.rb +0 -87
  765. data/lib/jamf/api/jamf_pro/oapi_schemas/venafi_pki_payload_record_search_results.rb +0 -90
  766. data/lib/jamf/api/jamf_pro/oapi_schemas/verbose_package_deployment_response.rb +0 -90
  767. data/lib/jamf/api/jamf_pro/oapi_schemas/voice_roaming_setting.rb +0 -87
  768. data/lib/jamf/api/jamf_pro/oapi_schemas/volume_purchasing_content.rb +0 -154
  769. data/lib/jamf/api/jamf_pro/oapi_schemas/volume_purchasing_content_list.rb +0 -89
  770. data/lib/jamf/api/jamf_pro/oapi_schemas/volume_purchasing_location.rb +0 -86
  771. data/lib/jamf/api/jamf_pro/oapi_schemas/volume_purchasing_location_list_view.rb +0 -184
  772. data/lib/jamf/api/jamf_pro/oapi_schemas/volume_purchasing_location_patch.rb +0 -111
  773. data/lib/jamf/api/jamf_pro/oapi_schemas/volume_purchasing_location_post.rb +0 -114
  774. data/lib/jamf/api/jamf_pro/oapi_schemas/volume_purchasing_locations.rb +0 -89
  775. data/lib/jamf/api/jamf_pro/oapi_schemas/volume_purchasing_subscription.rb +0 -86
  776. data/lib/jamf/api/jamf_pro/oapi_schemas/volume_purchasing_subscription_base.rb +0 -127
  777. data/lib/jamf/api/jamf_pro/oapi_schemas/volume_purchasing_subscriptions.rb +0 -89
  778. data/lib/jamf/api/jamf_pro/oapi_schemas/watch_os_details_v2.rb +0 -201
  779. data/lib/jamf/api/jamf_pro/oapi_schemas/web_link.rb +0 -87
@@ -0,0 +1,912 @@
1
+ # Copyright 2025 Pixar
2
+
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "Apache License")
5
+ # with the following modification; you may not use this file except in
6
+ # compliance with the Apache License and the following modification to it:
7
+ # Section 6. Trademarks. is deleted and replaced with:
8
+ #
9
+ # 6. Trademarks. This License does not grant permission to use the trade
10
+ # names, trademarks, service marks, or product names of the Licensor
11
+ # and its affiliates, except as required to comply with Section 4(c) of
12
+ # the License and to reproduce the content of the NOTICE file.
13
+ #
14
+ # You may obtain a copy of the Apache License at
15
+ #
16
+ # http://www.apache.org/licenses/LICENSE-2.0
17
+ #
18
+ # Unless required by applicable law or agreed to in writing, software
19
+ # distributed under the Apache License with the above modification is
20
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21
+ # KIND, either express or implied. See the Apache License for the specific
22
+ # language governing permissions and limitations under the Apache License.
23
+ #
24
+ #
25
+
26
+ # frozen_string_literal: true
27
+
28
+ require 'cfpropertylist'
29
+
30
+ # The main Module
31
+ module Jamf
32
+
33
+ # Classes
34
+ #####################################
35
+
36
+ # A Package in the Jamf Pro API
37
+ #
38
+ #################################
39
+ class JPackage < Jamf::OAPISchemas::Package
40
+
41
+ # Mix-Ins
42
+ #####################################
43
+
44
+ include Jamf::CollectionResource
45
+ extend Jamf::Filterable
46
+ include Jamf::ChangeLog
47
+
48
+ # Constants
49
+ #####################################
50
+
51
+ ########### RELATED OAPI OBJECTS
52
+ # These objects should be OAPIObjects, NOT subclasses of them and
53
+ # not Collection or Singleton resources.
54
+
55
+ # The OAPI object class we get back from a 'list' query to get the
56
+ # whole collection, or a subset of it. It contains a :results key
57
+ # which is an array of data for objects of the parent class.
58
+ SEARCH_RESULT_OBJECT = Jamf::OAPISchemas::PackagesSearchResults
59
+
60
+ # The OAPI object class we send with a POST request to make a new member of
61
+ # the collection in Jamf. This is usually the same as the parent class.
62
+ POST_OBJECT = Jamf::OAPISchemas::Package
63
+
64
+ # The OAPI object class we send with a PUT request to change an object in
65
+ # Jamf by specifying all its values. Most updates happen this way,
66
+ # and this is usually the same as the parent class
67
+ PUT_OBJECT = Jamf::OAPISchemas::Package
68
+
69
+ # The OAPI object we send with a PATCH request to change an object in
70
+ # Jamf by replacing only some of its values. This is never the same as the
71
+ # parent class, and is usually used when most of the data about an
72
+ # object cannot be changed via the API.
73
+ # PATCH_OBJECT = Jamf::OAPISchemas::Building
74
+
75
+ ############# API PATHS
76
+ # TODO: See if these paths can be auto-generated from the
77
+ # OAPI schema and baked into the parent class
78
+
79
+ # The path for GETting the list of all objects in the collection, possibly
80
+ # filtered, sorted, and/or paged
81
+ # REQUIRED for all collection resources
82
+ #
83
+ # GET_PATH, POST_PATH, PUT_PATH, PATCH_PATH, and DELETE_PATH are automatically
84
+ # assumed from the LIST_PATH if they follow the standards:
85
+ # - GET_PATH = "#{LIST_PATH}/id"
86
+ # - fetch an object from the collection
87
+ # - POST_PATH = LIST_PATH
88
+ # - create a new object in the collection
89
+ # - PUT_PATH = "#{LIST_PATH}/id"
90
+ # - update an object passing all its values back.
91
+ # Most objects use this or PATCH but not both
92
+ # - PATCH_PATH = "#{LIST_PATH}/id"
93
+ # - update an object passing some of its values back
94
+ # Most objects use this or PUT but not both
95
+ # - DELETE_PATH = "#{LIST_PATH}/id"
96
+ # - delete an object from the collection
97
+ #
98
+ # If those paths differ from the standards, the constants must be defined
99
+ # here
100
+ #
101
+ LIST_PATH = 'v1/packages'
102
+
103
+ # Identifiers not marked in the superclass's OAPI_PROPERTIES constant
104
+ # which usually only identifies ':id'
105
+ ALT_IDENTIFIERS = %i[packageName fileName].freeze
106
+
107
+ # If the object does not have a 'name' attribute, this is the attribute
108
+ # that holds its name. Used to allow referencing objects by 'name',
109
+ # creates a alias of the attribute called "name" and "name=",
110
+ # and allows the use of "name:" as an identifier in the .fetch, .valid_id and
111
+ # similar methods.
112
+ OBJECT_NAME_ATTR = :packageName
113
+
114
+ # Must define this when extending Filterable
115
+ FILTER_KEYS = %i[
116
+ id fileName packageName categoryId info notes manifestFileName cloudTransferStatus
117
+ ].freeze
118
+
119
+ # the suffix for the REST resource for uploading a package
120
+ UPLOAD_ENDPOINT = 'upload'
121
+
122
+ # Defaults for some required values
123
+ ############
124
+
125
+ DEFAULT_CATEGORY_ID = '-1'
126
+ DEFAULT_PRIORITY = 10
127
+ DEFAULT_FUT = false
128
+ DEFAULT_REBOOT_REQUIRED = false
129
+ DEFAULT_OS_INSTALL = false
130
+ DEFAULT_SUPPRESS_UPDATES = false
131
+ DEFAULT_SUPPRESS_FROM_DOCK = false
132
+ DEFAULT_SUPPRESS_EULA = false
133
+ DEFAULT_SUPPRESS_REGISTRATION = false
134
+
135
+ # The hashType value in the API or manifests for md5
136
+ CHECKSUM_HASH_TYPE_MD5 = 'MD5'
137
+
138
+ # The hashType value in the API for sha256 - IF it exists?
139
+ CHECKSUM_HASH_TYPE_SHA256 = 'SHA_256'
140
+
141
+ # The hashType value in MDM deploy manifests for sha256
142
+ CHECKSUM_HASH_TYPE_SHA256_MDM_DEPLOY = 'SHA256'
143
+
144
+ # The hashType value in the API for sha512
145
+ CHECKSUM_HASH_TYPE_SHA512 = 'SHA_512'
146
+
147
+ # Mapping of the hash types to the maching Digest modules
148
+ # See {.calculate_checksum}
149
+ CHECKSUM_HASH_TYPES = {
150
+ CHECKSUM_HASH_TYPE_MD5 => Digest::MD5,
151
+ CHECKSUM_HASH_TYPE_SHA256 => Digest::SHA256,
152
+ CHECKSUM_HASH_TYPE_SHA512 => Digest::SHA512
153
+ }.freeze
154
+
155
+ DEFAULT_CHECKSUM_HASH_TYPE = CHECKSUM_HASH_TYPE_SHA512
156
+
157
+ # if no manifest filename is provided, this suffix will be appended to the
158
+ # fileName, with spaces converted to dashes.
159
+ MANIFEST_FILENAME_DEFAULT_SUFFIX = '-manifest.plist'
160
+
161
+ # If no manifest bundle identifier is provided, this will be used before
162
+ # the packageName.
163
+ MANIFEST_BUNDLE_ID_PREFIX = 'com.pixar.ruby-jss.'
164
+
165
+ # if no manifest bundle version is provided, this will be used.
166
+ MANIFEST_BUNDLE_VERSION_DEFAULT = '0'
167
+
168
+ # Not doing chunking by default in generated manifests,
169
+ # but if we do, we'll use this
170
+ MANIFEST_CHUNK_SIZE = 1024 * 1024 * 10 # 10MB
171
+
172
+ MANIFEST_PLIST_TEMPLATE = {
173
+ items: [
174
+ {
175
+ assets: [
176
+ {
177
+ 'kind' => 'software-package',
178
+ 'sha256s' => [],
179
+ 'url' => 'url-goes-here'
180
+ } # end hash
181
+ ], # end assets array,
182
+ metadata: {
183
+ 'kind' => 'software',
184
+ 'bundle-identifier' => "#{MANIFEST_BUNDLE_ID_PREFIX}example",
185
+ 'bundle-version' => MANIFEST_BUNDLE_VERSION_DEFAULT,
186
+ 'title' => 'title',
187
+ 'sizeInBytes' => 1,
188
+ 'sha256-whole' => 'sha256-goes-here'
189
+ } # end metadata
190
+ } # end hash
191
+ ] # end items array
192
+ }.freeze
193
+
194
+ # The endpoint for deploying a package via MDM
195
+ # see https://developer.jamf.com/jamf-pro/reference/post_v1-deploy-package
196
+ DEPLOYMENT_ENDPOINT = '/v1/deploy-package?verbose=true'
197
+
198
+ # Class Methods
199
+ #####################################
200
+
201
+ # Given a file path, and hash type, generate the checksum for an arbitrary
202
+ # file.
203
+ #
204
+ # @param filepath [String, Pathname] The file to checksum
205
+ #
206
+ # @param type [String ] One of the keys of CHECKSUM_HASH_TYPES, either
207
+ # CHECKSUM_HASH_TYPE_MD5 or CHECKSUM_HASH_TYPE_SHA512
208
+ #
209
+ # @return [String] The checksum of the file
210
+ #
211
+ def self.calculate_checksum(filepath, type = DEFAULT_CHECKSUM_HASH_TYPE)
212
+ raise ArgumentError, 'Unknown checksum hash type' unless CHECKSUM_HASH_TYPES.key? type
213
+
214
+ CHECKSUM_HASH_TYPES[type].file(filepath).hexdigest
215
+ end
216
+
217
+ # Setter for a default base URL for package manifests.
218
+ # Manifests are required for packages deployed via enrollment prestages
219
+ # or via the InstallEnterpriseApplication MDM command.
220
+ #
221
+ # When generating a manifest for a package, you must provide a URL
222
+ # from which the package can be downloaded. This is usually from your
223
+ # Cloud Distribution Point, but can be some other https web server.
224
+ #
225
+ # If Jamf.config.package_manifest_base_url is defined (see {Jamf::Configuration})
226
+ # then that will be used as the default. Otherwise, or if you wish to override
227
+ # the config, the value set here will be used as the default for generating manifests
228
+ # for all Jamf::JPackage objects in this ruby session.
229
+ #
230
+ # Setting this in the config or here means you don't have to provide a base URL
231
+ # each time when calling #generate_manifest or #upload, however you can still provide
232
+ # one at that time to override any default.
233
+ #
234
+ # Normally, the package's fileName is appended to this URL to generate the full
235
+ # download URL. E.g. for a package with a fileName 'my-app.pkg', with the base URL of
236
+ # 'https://my-cdp.myorg.com', the download URL in the manifest would be
237
+ # 'https://my-cdp.myorg.com/my-app.pkg'
238
+ #
239
+ # See {#generate_manifest} for more info.
240
+ #
241
+ # @param url[String] the default base URL for building manifests, overrides any
242
+ # value in the config.
243
+ #
244
+ # @return [void]
245
+ ############
246
+ def self.default_manifest_base_url=(url)
247
+ @default_manifest_url = url.to_s
248
+ end
249
+
250
+ # Getter for the default base URL for package manifests.
251
+ # This will be the one set for the class for this ruby session, or the one set in the
252
+ # Jamf.config.package_manifest_base_url
253
+ # seealso {JPackage.default_manifest_base_url=}
254
+ #
255
+ # @return [String] the default base URL for building manifests
256
+ ############
257
+ def self.default_manifest_base_url
258
+ @default_manifest_url || Jamf.config.package_manifest_base_url
259
+ end
260
+
261
+ # Attributes
262
+ #####################################
263
+
264
+ # Checksums
265
+ #
266
+ # Packages in Jamf Pro can have a checksum in either MD5 or SHA512, or possibly
267
+ # SHA256 - none of our 1500 pkgs have 256, but given the existence of the sha256
268
+ # attribute in the API data, I'm assuming it existed at some point, and behaves like
269
+ # md5 (read on)
270
+ #
271
+ # In all cases, the hashType attribute indicates the type of checksum, as a string,
272
+ # one of 'MD5', 'SHA_256', or 'SHA_512'.
273
+ #
274
+ # In the case of md5 and sha256, the actual digest value (the checksum) is in the
275
+ # 'md5' or 'sha256' attribute. In the case of sha512, the digest is in the 'hashValue'
276
+ # attribute.
277
+ # In anycase, the digest value will also be stored in the checksum attribute
278
+ #
279
+ # NOTE: This is the checksum used when installing via a Policy.
280
+ # The checksum(s) used when deploying via MDM is stored in the manifest.
281
+ #
282
+ # @return [String] the checksum of the package, either an MD5, SHA256, or SHA512
283
+ # digest of the package file.
284
+ attr_reader :checksum
285
+
286
+ # The response body of the last upload of this package, with a timestamp added.
287
+ # Looks like:
288
+ # {
289
+ # :id=>"10392",
290
+ # :href=>"https://casper-int.pixar.com:8443/api/v1/packages/10392/upload/10392"
291
+ # :time=>2025-09-01 12:00:00 -0700
292
+ # }
293
+ # see #upload
294
+ # @return [Hash] the response body of the last upload of this package
295
+ attr_reader :upload_response
296
+
297
+ # The response body of the last mdm-deploy of this package. see #deploy_via_mdm
298
+ #
299
+ # {
300
+ # "queuedCommands": [
301
+ # {
302
+ # "device": 1,
303
+ # "commandUuid": "aaaaaaaa-3f1e-4b3a-a5b3-ca0cd7430937"
304
+ # }
305
+ # ],
306
+ # "errors": [
307
+ # {
308
+ # "device": 2,
309
+ # "group": 3,
310
+ # "reason": "Device does not support the InstallEnterpriseApplication command"
311
+ # }
312
+ # ]
313
+ # }
314
+ #
315
+ # @return [Hash] the response body of the last mdm-deploy of this package
316
+ attr_reader :deploy_response
317
+
318
+ # Constructor
319
+ #####################################
320
+
321
+ # Make an instance. Data comes from the API
322
+ #
323
+ # @param data[Hash] the data for constructing a new object.
324
+ ##############################
325
+ def initialize(**data)
326
+ super
327
+
328
+ # set defaults for some required values
329
+ #
330
+ # check for explicit nils, since if these are boolean false
331
+ # we don't want to change them.
332
+
333
+ self.categoryId = DEFAULT_CATEGORY_ID if categoryId.nil?
334
+ self.priority = DEFAULT_PRIORITY if priority.nil?
335
+ self.fillUserTemplate = DEFAULT_FUT if fillUserTemplate.nil?
336
+ self.rebootRequired = DEFAULT_REBOOT_REQUIRED if rebootRequired.nil?
337
+ self.osInstall = DEFAULT_OS_INSTALL if osInstall.nil?
338
+ self.suppressUpdates = DEFAULT_SUPPRESS_UPDATES if suppressUpdates.nil?
339
+ self.suppressFromDock = DEFAULT_SUPPRESS_FROM_DOCK if suppressFromDock.nil?
340
+ self.suppressEula = DEFAULT_SUPPRESS_EULA if suppressEula.nil?
341
+ self.suppressRegistration = DEFAULT_SUPPRESS_REGISTRATION if suppressRegistration.nil?
342
+
343
+ @checksum =
344
+ case hashType
345
+ when CHECKSUM_HASH_TYPE_MD5
346
+ md5 || hashValue
347
+ when CHECKSUM_HASH_TYPE_SHA256
348
+ sha256 || hashValue
349
+ when CHECKSUM_HASH_TYPE_SHA512
350
+ hashValue
351
+ end
352
+ end # init
353
+
354
+ # Public Instance Methods
355
+ #####################################
356
+
357
+ # @return [Pathname] the local receipt when this pkg is installed by a policy
358
+ #############################
359
+ def receipt
360
+ # the receipt is the filename with any .zip extension removed.
361
+ fileName ? (Jamf::Client::RECEIPTS_FOLDER + fileName.to_s.sub(/.zip$/, '')) : nil
362
+ end
363
+
364
+ # Change the os_requirements field in the JSS
365
+ # E.g. 10.5, 10.5.3, 10.6.x
366
+ #
367
+ # Extra feature: Minumum OS's can now be specified as a
368
+ # string using the notation ">=10.6.7".
369
+ #
370
+ # @see Jamf.expand_min_os
371
+ #
372
+ # @param new_val [String,Array<String>] comma-separated string, or array of os versions
373
+ #
374
+ # @return [void]
375
+ #############################
376
+ def osRequirements=(new_val)
377
+ # make sure we have an array
378
+ new_val = [new_val].flatten.compact.uniq.map(&:to_s)
379
+ new_val.map! do |vers|
380
+ vers.start_with?('>=') ? Jamf.expand_min_os(vers) : vers
381
+ end
382
+
383
+ orig_osRequirements = osRequirements
384
+ @osRequirements = new_val.join(', ')
385
+ note_unsaved_change :osRequirements, orig_osRequirements
386
+ end
387
+
388
+ # Recalculate the checksum of the package file from a given filepath, and update the
389
+ # object's checksum and hashValue attributes.
390
+ #
391
+ # NOTE: This updates the checksum used when installing via a Policy.
392
+ # The checksum(s) used when deploying via MDM is stored in the manifest.
393
+ #
394
+ # You will need to call #save on the object to save the new checksum to the server.
395
+ #
396
+ # New checksums are always SHA512
397
+ #
398
+ # @param filepath [String, Pathname] the path to a local copy of the package file
399
+ #
400
+ # @return [String] The new checksum of the package file
401
+ ##############################
402
+ def recalculate_checksum(filepath)
403
+ # update the checksum
404
+ @checksum = self.class.calculate_checksum(filepath, DEFAULT_CHECKSUM_HASH_TYPE)
405
+ self.hashType = DEFAULT_CHECKSUM_HASH_TYPE
406
+ self.sha256 = nil
407
+ self.md5 = nil
408
+ self.hashValue = @checksum
409
+ end
410
+
411
+ # @param filepath [String, Pathname] the path to a local copy of the package file
412
+ # @return [Boolean] Does the checksum of the file match the checksum in the object?
413
+ # nil if there is no checksum in the object.
414
+ ##############################
415
+ def checksum_valid?(filepath)
416
+ return unless checksum
417
+
418
+ self.class.calculate_checksum(filepath, hashType) == checksum
419
+ end
420
+
421
+ # @return [String] A default if none is set explicitly
422
+ ##############################
423
+ def default_manifestFileName
424
+ "#{fileName.gsub(' ', '-')}#{MANIFEST_FILENAME_DEFAULT_SUFFIX}"
425
+ end
426
+
427
+ # Set the manifest from a local file or a String containing an XML plist.
428
+ # If from a file, the manifestFileName attribute is set to the filename
429
+ #
430
+ # To automatically generate a manifest plist for this package from a
431
+ # locally-readable .pkg file, use #generate_manifest
432
+ #
433
+ # All manifests require a valid URL for downloading the .pkg file when
434
+ # installing on a client.
435
+ #
436
+ # No validation of the manifest is done here.
437
+ #
438
+ # DEPLOYING VIA MDM:
439
+ #
440
+ # When using this method, if you want to be able to deploy the package using
441
+ # deploy_via_mdm, the manifest MUST include a metadata dictionary
442
+ # with at least the following keys:
443
+ # - 'kind' = 'software'
444
+ # - 'bundle-identifier' that preferably matches the bundle identifier of the pkg
445
+ # - 'bundle-version' = that preferably matches the version of the pkg
446
+ # - 'title' = the name of the pkg or what it installs
447
+ # - 'sizeInBytes' = the size of the .pkg in bytes
448
+ # as well as one of these non-standard keys:
449
+ # - 'sha256-whole' = the SHA256 digest of the whole file, regardless of chunking data in the 'assets' array
450
+ # OR
451
+ # - 'md5-whole' = the MD5 digest of the whole file, regardless of chunking data in the 'assets' array
452
+ #
453
+ # The non-standard keys are because the Jamf Pro API endpoint for deploying via MDM requires
454
+ # a whole-file checksum even if the file is chunked in the manifest.
455
+ #
456
+ # See the MANIFEST_PLIST_TEMPLATE constant for an example of the data structure (as a ruby hash, not a plist)
457
+ #
458
+ # @param new_manifest [String, Pathname] the manifest plist data or path to a local file
459
+ #
460
+ # @return [void]
461
+ ##############################
462
+ def manifest=(new_manifest)
463
+ # if its a string but not an xml plist, assume its a path
464
+ new_manifest = Pathname.new(new_manifest) if new_manifest.is_a?(String) && !new_manifest.start_with?('<?xml')
465
+ orig_manifest = manifest
466
+
467
+ new_xml =
468
+ if new_manifest.is_a? Pathname
469
+ new_manifest.read
470
+
471
+ elsif new_manifest.is_a? String
472
+ new_manifest
473
+
474
+ else
475
+ raise ArgumentError, 'Argument must be a Pathname, or a String containing a path or an XML plist'
476
+ end
477
+
478
+ @manifest = new_xml
479
+ note_unsaved_change :manifest, orig_manifest
480
+ end
481
+
482
+ # return the manifest as a ruby hash converted from the plist
483
+ # IMPORTANT: all hash keys are strings, not symbols
484
+ #
485
+ # @return [Hash] the manifest as a ruby hash
486
+ ##############################
487
+ def manifest_hash
488
+ return if manifest.to_s.empty?
489
+
490
+ CFPropertyList.native_types(CFPropertyList::List.new(data: manifest).value)
491
+ end
492
+
493
+ # Generate a manifest plist (xml) for this package from a local .pkg file,
494
+ # and update the #manifest and #manifestFileName attributes
495
+ #
496
+ # Afterwards, you will need to call #save on the object to save the new values to
497
+ # the server.
498
+ #
499
+ # See also #manifest= for setting the manifest from a file or string.
500
+ #
501
+ # The download URL used in the manifest will be the default for the class
502
+ # (if you have set one) usually with the fileName appended. The
503
+ # class default may come from the ruby-jss config, or be set directly on the class,
504
+ # see JPackage.default_manifest_base_url=
505
+ #
506
+ # Unless set explicitly afterward using #manifestFileName= the manifest filename
507
+ # will be the fileName of the Package object, with spaces converted to dashes,
508
+ # followed by MANIFEST_FILENAME_DEFAULT_SUFFIX.
509
+ # e.g. my-app.pkg-manifest.plist
510
+ #
511
+ # By default, this method is invoked when uploading the pkg file using #upload
512
+ # and the opts will be passed from that method to this one.
513
+ # When invoked from #upload, the new values will be saved to the Jamf Pro server automatically.
514
+ #
515
+ # The manifests generated by this method are suitable for use in MDM deployments.
516
+ #
517
+ # If you don't provide a bundle_identifier, it will be generated from the packageName,
518
+ # prefixed with 'com.pixar.ruby-jss.' and with spaces converted to dashes.
519
+ #
520
+ # If you don't provide a bundle_version, it will be '0'
521
+ #
522
+ # @param filepath [String, Pathname] the path to a local copy of the package file for which
523
+ # this manifest is being generated. This MUST match the one uploaded to the server, as it is
524
+ # used to calculate the checksums in the manifest.
525
+ #
526
+ # @param opts [Hash] a hash of keyword arguments
527
+ #
528
+ # @options opts url [String] the URL where the package will be downloaded from,
529
+ # defaults to the class default
530
+ #
531
+ # @option opts append_filename_to_url [Boolean] should the fileName be appended to the URL,
532
+ # defaults to true.
533
+ # If false, the url given must be the full URL to download the individual package file.
534
+ #
535
+ # @option opts chunk_size [Integer] the size of each chunk in the manifest, in bytes.
536
+ # If omitted, the whole file will be checksummed at once and downloads will not be chunked.
537
+ # A common chunk size is 10MB, or 1024 * 1024 * 10.
538
+ # NOTE: Not all distribution points support chunked downloads.
539
+ #
540
+ # @option opts bundle_identifier [String, Symbol] The bundle identifier of the package,
541
+ # Should match that in the .pkg itself.
542
+ # Defaults to 'com.pixar.ruby-jss.packageName' where packageName is the
543
+ # packageName with whitespace converted to dashes.
544
+ #
545
+ # @option opts bundle_version [String] the version of the package.
546
+ # Defaults to '0'
547
+ #
548
+ # @option opts subtitle [String] a subtitle for the package, optional
549
+ #
550
+ # @option opts full_size_image_url [String] optional, used during MDM deployment
551
+ #
552
+ # @option opts display_image_url [String] optional, used during MDM deployment
553
+ #
554
+ # @return [void]
555
+ ##############################
556
+ def generate_manifest(filepath, **opts)
557
+ # make sure the file exists
558
+ file = Pathname.new(filepath)
559
+ validate_local_file(file)
560
+
561
+ filesize = file.size
562
+
563
+ # make the manifest
564
+ new_manifest = MANIFEST_PLIST_TEMPLATE.dup
565
+
566
+ url = build_manifest_url opts[:url], append_filename: opts[:append_filename_to_url]
567
+
568
+ new_manifest[:items][0][:assets][0]['url'] = url.to_s
569
+
570
+ # get the checksum(s)
571
+ calculate_manifest_checksums(file, new_manifest, chunk_size: opts[:chunk_size])
572
+
573
+ append_manifest_image('full-size-image', opts[:full_size_image_url], new_manifest) if opts[:full_size_image_url]
574
+
575
+ append_manifest_image('display-image', opts[:display_image_url], new_manifest) if opts[:display_image_url]
576
+
577
+ new_manifest[:items][0][:metadata]['title'] = packageName
578
+ new_manifest[:items][0][:metadata]['subtitle'] = opts[:subtitle] if opts[:subtitle]
579
+ new_manifest[:items][0][:metadata]['sizeInBytes'] = filesize
580
+ new_manifest[:items][0][:metadata]['bundle-identifier'] =
581
+ (opts[:bundle_identifier] || "#{MANIFEST_BUNDLE_ID_PREFIX}#{packageName.gsub(/\s+/, '-')}")
582
+ new_manifest[:items][0][:metadata]['bundle-version'] = opts[:bundle_version] if opts[:bundle_version]
583
+
584
+ plist = CFPropertyList::List.new
585
+ plist.value = CFPropertyList.guess(new_manifest)
586
+ self.manifest = plist.to_str(CFPropertyList::List::FORMAT_XML, formatted: true)
587
+
588
+ self.manifestFileName = default_manifestFileName
589
+ end
590
+
591
+ # validate a local file path, raising an error if it's not valid
592
+ #
593
+ # @param filepath [Pathname] the path to a local copy of the package file for which
594
+ # @return [void]
595
+ ##############################
596
+ def validate_local_file(file)
597
+ raise ArgumentError, 'No locally-readable file provided' unless file.readable?
598
+ end
599
+ private :validate_local_file
600
+
601
+ # Figure out the url to use for a manifest, based on the class default or
602
+ # one provided in the options.
603
+ # Raises an error if no URL is provided directly or via the class default, or if
604
+ # the url is not valid.
605
+ #
606
+ # @param given_url [String] the URL to use, if provided
607
+ # @param append_filename [Boolean] should the filename be appended to the URL?
608
+ #
609
+ # @return [URI] the URI object for the URL
610
+ ##############################
611
+ def build_manifest_url(given_url = nil, append_filename: true)
612
+ url = given_url || self.class.default_manifest_base_url
613
+ unless url
614
+ raise ArgumentError,
615
+ 'No URL for manifest. Pass one with url: or set one with Jamf::JPackage.default_manifest_base_url=, or set package_manifest_base_url in the ruby-jss.conf file.'
616
+ end
617
+
618
+ # append the filename to the URL if needed
619
+ url = "#{url.to_s.chomp('/')}/#{CGI.escape fileName}" unless append_filename == false
620
+
621
+ # check validity and return
622
+ URI.parse url
623
+ end
624
+ private :build_manifest_url
625
+
626
+ # calculate the manifest checksum[s] for a given file, and store in the manifest data.
627
+ # We only do SHA256, but Apple supports MD5 as well.
628
+ #
629
+ # @param file [Pathname] the path to the file to checksum
630
+ # @param chunk_size [Integer] the size of each chunk in the manifest, in bytes.
631
+ # if omitted, the whole file will be checksummed at once and downloads will not be chunked.
632
+ # A common chunk size is 10MB, or 1024 * 1024 * 10
633
+ # @param new_manifest [Hash] the manifest data to update with the checksums
634
+ #
635
+ # @return [void]
636
+ ##############################
637
+ def calculate_manifest_checksums(file, new_manifest, chunk_size: nil)
638
+ # are we chunking the download?
639
+ if chunk_size.is_a? Integer
640
+ new_manifest[:items][0][:assets][0]['sha256-size'] = chunk_size
641
+ file.open do |f|
642
+ while chunk = f.read(chunk_size) # only load chunk_size bytes at a time
643
+ new_manifest[:items][0][:assets][0]['sha256s'] << Digest::SHA256.hexdigest(chunk)
644
+ end
645
+ end
646
+
647
+ # not chunking, use the file filesize
648
+ else
649
+ new_manifest[:items][0][:assets][0]['sha256-size'] = file.size
650
+ new_manifest[:items][0][:assets][0]['sha256s'] = [Digest::SHA256.hexdigest(file.read)]
651
+ end
652
+
653
+ # Store the whole-file checksum in
654
+ # manifest[:items][0][:metadata]['sha256-whole']. taking it from
655
+ # manifest[:items][0][:assets][0]['sha256s'][0], if available, or generate it if needed
656
+ # It is used by the deploy_via_mdm method.
657
+ # This value is required for MDM deployments, even if the file is chunked in the manifest.
658
+ new_manifest[:items][0][:metadata]['sha256-whole'] =
659
+ if new_manifest[:items][0][:assets][0]['sha256s'].size == 1
660
+ new_manifest[:items][0][:assets][0]['sha256s'][0]
661
+ else
662
+ Digest::SHA256.hexdigest(file.read)
663
+ end
664
+ end
665
+ private :calculate_manifest_checksums
666
+
667
+ # Append an image URL to the manifest, validating it as a URI
668
+ #
669
+ # @param asset_kind [String] the kind of asset, either 'full-size-image' or 'display-image'
670
+ # @param url [String] the URL to append
671
+ # @param new_manifest [Hash] the manifest data to update with the image URL
672
+ #
673
+ # @return [void]
674
+ ##############################
675
+ def append_manifest_image(asset_kind, url, new_manifest)
676
+ new_manifest[:items][0][:assets] << {
677
+ 'kind' => asset_kind,
678
+ 'url' => URI.parse(url).to_s
679
+ }
680
+ end
681
+ private :append_manifest_image
682
+
683
+ # Upload a package file to Jamf Pro.
684
+ #
685
+ # WARNING: This will automatically call #save, saving any pending changes to
686
+ # the Jamf Pro server!
687
+ #
688
+ # This uses the Jamf Pro API to upload the file via the package/upload endpoint.
689
+ # If you don't use an appropriate primary distribution point, this may not work.
690
+ # Also, that endpoint may not upload to any other distribution points.
691
+ #
692
+ # The fileName attribute of the JPackage object will be updated to the local filename.
693
+ # If that filename is in use by some other package, you'll get an error:
694
+ # Field: fileName, Error: DUPLICATE_FIELD duplicate name
695
+ #
696
+ # This will automatically call #save at least once, and possibly twice.
697
+ # First, in order to ensure the correct fileName in Jamf based on the file being uploaded,
698
+ # and second, in order to update the checksum and manifest in Jamf Pro, if needed.
699
+ # *** Any other outstanding changes will also be saved!
700
+ #
701
+ # After uploading, the response from the server is in the #upload_response attribute,
702
+ # with a timestamp added to the data from the API.
703
+ #
704
+ # @param filepath [String, Pathname] the path to the package file to upload
705
+ #
706
+ # @param opts[Hash] a hash of keyword arguments
707
+ #
708
+ # @option opts :update_checksum [Boolean] update the checksum of the package in Jamf Pro.
709
+ # Defaults to true. All new checksums are SHA_512.
710
+ # WARNING: If you set this to false, the checksum in the object will not be updated
711
+ # and installs may fail. Be sure to set it to the correct value yourself.
712
+ #
713
+ # @option opts :update_manifest [Boolean] update the manifest of the package in Jamf Pro
714
+ # Defaults to true.
715
+ # WARNING: If you set this to false, the manifest in the object will not be updated
716
+ # and PreStage & MDM deployments may fail. Be sure to set it to the correct value
717
+ # using #generate_manifest or #manifest= yourself.
718
+ #
719
+ # @options opts url [String] See #generate_manifest
720
+ #
721
+ # @option opts append_filename_to_url [Boolean] See #generate_manifest
722
+ #
723
+ # @option opts chunk_size [Integer] See #generate_manifest
724
+ #
725
+ # @option opts bundle_identifier [String] See #generate_manifest
726
+ #
727
+ # @option opts bundle_version [String] See #generate_manifest
728
+ #
729
+ # @option opts subtitle [String] See #generate_manifest
730
+ #
731
+ # @option opts full_size_image_url [String] See #generate_manifest
732
+ #
733
+ # @option opts display_image_url [String] See #generate_manifest
734
+ #
735
+ # @return [void]
736
+ ##############################
737
+ def upload(filepath, **opts)
738
+ file = Pathname.new(filepath)
739
+ validate_local_file(file)
740
+
741
+ # update the filename if needed
742
+ # must happen before the upload so it matches the file being uploaded
743
+ self.fileName = file.basename.to_s
744
+
745
+ # We must save the checksum and manifest to the server before uploading
746
+ # the file, because otherwise jamf will likely overwrite the manifest
747
+ # after it uploads to the primary distribution point.
748
+
749
+ # recalulate the checksum unless told no to
750
+ # NOTE: It appears that the checksum will always be recaluclated by
751
+ # the Jamf Pro server, as MD5. If you really want our default SHA512,
752
+ # then do this again later, manually.
753
+ recalculate_checksum(file) unless opts[:update_checksum] == false
754
+
755
+ # generate a manifest using the new file
756
+ generate_manifest(file, **opts) unless opts[:update_manifest] == false
757
+
758
+ # save the new fileName, checksum and manifest
759
+ save
760
+
761
+ # upload the file
762
+ @upload_response = cnx.jp_upload("#{get_path}/#{UPLOAD_ENDPOINT}", file)
763
+ @upload_response[:time] = Time.now
764
+ @upload_response
765
+ end
766
+
767
+ # Deploy this package to computers or a group via MDM.
768
+ #
769
+ # REQUIREMENTS:
770
+ # - The package must have a manifest with specific data. See #manifest=
771
+ # and #generate_manifest for details.
772
+ # - The .pkg file must be a product archive (.pkg) built with Xcode or productbuild.
773
+ # (it must contain a 'Distribution' file, usually generated by those tools)
774
+ # Simple 'component' packages built with pkgbuild are not supported.
775
+ # - The .pkg file must be signed with a trusted signing certificate
776
+ #
777
+ # This will send an MDM InstallEnterpriseApplication command to install the package
778
+ # to one or more computers, and/or the members of a single computer group.
779
+ #
780
+ # @param computer_ids [Array<Integer>,Integer] The ids of the computers to deploy to
781
+ #
782
+ # @param group_id [Integer] The id of the computer group to deploy to
783
+ #
784
+ # @param managed [Boolean] Should the installed package be managed by Jamf Pro?
785
+ # Defaults to false. This seems to be for App Store apps only??
786
+ #
787
+ # @return [Hash] the response from the server. see #deploy_response
788
+ ##############################
789
+ def deploy_via_mdm(computer_ids: nil, group_id: nil, managed: false)
790
+ raise ArgumentError, 'No computer_ids or group_id provided' unless computer_ids || group_id
791
+ raise Jamf::MissingDataError, 'No manifest set for this package' if manifest.to_s.empty?
792
+ raise Jamf::NoSuchItemError, 'This package has no id, it must be saved in Jamf Pro before uploading' unless exist?
793
+
794
+ # convert the full manifest to a ruby hash
795
+ parsed_manifest = manifest_hash
796
+
797
+ # manifest data for the MDMDeploy command, which is a hash.
798
+ # hopefully some day Jamf will just use the manifest for the pkg
799
+ mdm_manifest = {}
800
+ mdm_manifest['url'] = manifest_url_for_deployment(parsed_manifest)
801
+ mdm_manifest['hash'], mdm_manifest['hashType'] = manifest_checksum_for_deployment(parsed_manifest)
802
+ mdm_manifest['bundleId'] = manifest_bundle_identifier_for_deployment(parsed_manifest)
803
+ mdm_manifest['bundleVersion'] = manifest_bundle_version_for_deployment(parsed_manifest)
804
+ mdm_manifest['title'] = manifest_title_for_deployment(parsed_manifest)
805
+ mdm_manifest['sizeInBytes'] = manifest_size_for_deployment(parsed_manifest)
806
+
807
+ set_optional_mdm_manifest_values(parsed_manifest, mdm_manifest)
808
+
809
+ # make sure the computers are in an array
810
+ computer_ids = [computer_ids].flatten.compact.uniq
811
+
812
+ # make the payload
813
+ payload = {
814
+ manifest: mdm_manifest,
815
+ installAsManaged: managed,
816
+ devices: computer_ids
817
+ }
818
+ payload[:groupId] = group_id.to_s if group_id
819
+
820
+ # send the command
821
+ @deploy_response = cnx.post(DEPLOYMENT_ENDPOINT, payload)
822
+ end
823
+
824
+ # the URL is required for MDM deployments
825
+ # @param parsed_manifest [Hash] the parsed manifest data as a ruby hash
826
+ # @return [String] the URL in the manifest for MDM deployments
827
+ #####################################
828
+ def manifest_url_for_deployment(parsed_manifest)
829
+ url = parsed_manifest.dig 'items', 0, 'assets', 0, 'url'
830
+ raise Jamf::MissingDataError, 'No URL in the manifest' unless url
831
+
832
+ url
833
+ end
834
+ private :manifest_url_for_deployment
835
+
836
+ # whole-file checksums are required for MDM deployments
837
+ # @return [Array<String>] the checksum and checksum type in the manifest for MDM deployments
838
+ #####################################
839
+ def manifest_checksum_for_deployment(parsed_manifest)
840
+ if whole = parsed_manifest.dig('items', 0, 'metadata', 'sha256-whole')
841
+ [whole, CHECKSUM_HASH_TYPE_SHA256_MDM_DEPLOY]
842
+ elsif whole = parsed_manifest.dig('items', 0, 'metadata', 'md5-whole')
843
+ [whole, CHECKSUM_HASH_TYPE_MD5]
844
+ else
845
+ raise Jamf::MissingDataError, 'No whole-file checksum in the manifest. Must have either sha256-whole or md5-whole in the metadata'
846
+ end
847
+ end
848
+ private :manifest_checksum_for_deployment
849
+
850
+ # size in bytes is required for MDM deployments
851
+ # @return [Integer] the size in bytes in the manifest for MDM deployments
852
+ #####################################
853
+ def manifest_size_for_deployment(parsed_manifest)
854
+ size = parsed_manifest.dig 'items', 0, 'metadata', 'sizeInBytes'
855
+ raise Jamf::MissingDataError, 'No sizeInBytes in the manifest metadata' unless size
856
+
857
+ size
858
+ end
859
+ private :manifest_size_for_deployment
860
+
861
+ # bundle identifier is required for MDM deployments
862
+ # @return [String] the bundle identifier in the manifest for MDM deployments
863
+ #####################################
864
+ def manifest_bundle_identifier_for_deployment(parsed_manifest)
865
+ bid = parsed_manifest.dig 'items', 0, 'metadata', 'bundle-identifier'
866
+ raise Jamf::MissingDataError, 'No bundle-identifier in the manifest metadata' unless bid
867
+
868
+ bid
869
+ end
870
+ private :manifest_bundle_identifier_for_deployment
871
+
872
+ # bundle version is required for MDM deployments
873
+ # @return [String] the bundle version in the manifest for MDM deployments
874
+ #####################################
875
+ def manifest_bundle_version_for_deployment(parsed_manifest)
876
+ bv = parsed_manifest.dig 'items', 0, 'metadata', 'bundle-version'
877
+ raise Jamf::MissingDataError, 'No bundle-version in the manifest metadata' unless bv
878
+
879
+ bv
880
+ end
881
+ private :manifest_bundle_version_for_deployment
882
+
883
+ # title is required for MDM deployments
884
+ # @return [String] the title in the manifest for MDM deployments
885
+ #####################################
886
+ def manifest_title_for_deployment(parsed_manifest)
887
+ ttl = parsed_manifest.dig 'items', 0, 'metadata', 'title'
888
+ raise Jamf::MissingDataError, 'No title in the manifest metadata' unless ttl
889
+
890
+ ttl
891
+ end
892
+ private :manifest_title_for_deployment
893
+
894
+ # set the optional values for the MDM deployment manifest
895
+ # @return [void]
896
+ #####################################
897
+ def set_optional_mdm_manifest_values(parsed_manifest, mdm_manifest)
898
+ # subtitle is optional for MDM deployments
899
+ sttl = parsed_manifest.dig 'items', 0, 'metadata', 'subtitle'
900
+ mdm_manifest['subtitle'] = sttl if sttl
901
+
902
+ # Images are optional for MDM deployments
903
+ parsed_manifest['items'][0]['assets']&.each do |asset|
904
+ mdm_manifest['fullSizeImageURL'] = asset['url'] if asset['kind'] == 'full-size-image'
905
+ mdm_manifest['displayImageURL'] = asset['url'] if asset['kind'] == 'display-image'
906
+ end
907
+ end
908
+ private :set_optional_mdm_manifest_values
909
+
910
+ end # class
911
+
912
+ end # module