ecoportal-api-graphql 1.3.5 → 1.3.17

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 (527) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +943 -477
  3. data/LICENSE +21 -21
  4. data/README.md +24 -24
  5. data/lib/ecoportal/api/common/graphql/auth_service.rb +115 -115
  6. data/lib/ecoportal/api/common/graphql/class_helpers.rb +46 -46
  7. data/lib/ecoportal/api/common/graphql/client.rb +69 -69
  8. data/lib/ecoportal/api/common/graphql/hash_helpers.rb +105 -105
  9. data/lib/ecoportal/api/common/graphql/http_client.rb +195 -145
  10. data/lib/ecoportal/api/common/graphql/model/as_input.rb +54 -51
  11. data/lib/ecoportal/api/common/graphql/model/diffable/classic_diff_service.rb +49 -47
  12. data/lib/ecoportal/api/common/graphql/model/diffable/diff_service.rb +188 -180
  13. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff.rb +55 -55
  14. data/lib/ecoportal/api/common/graphql/model/diffable/hash_diff_nesting.rb +295 -242
  15. data/lib/ecoportal/api/common/graphql/model/diffable.rb +54 -54
  16. data/lib/ecoportal/api/common/graphql/model.rb +17 -17
  17. data/lib/ecoportal/api/common/graphql/patches.rb +1 -1
  18. data/lib/ecoportal/api/common/graphql/query_integration.rb +45 -45
  19. data/lib/ecoportal/api/common/graphql.rb +16 -16
  20. data/lib/ecoportal/api/common.graphql.rb +8 -8
  21. data/lib/ecoportal/api/graphql/base/action.rb +43 -43
  22. data/lib/ecoportal/api/graphql/base/action_category.rb +15 -15
  23. data/lib/ecoportal/api/graphql/base/ai_summary_version.rb +17 -0
  24. data/lib/ecoportal/api/graphql/base/contractor_entity/member_changes.rb +67 -67
  25. data/lib/ecoportal/api/graphql/base/contractor_entity.rb +24 -24
  26. data/lib/ecoportal/api/graphql/base/date_time.rb +12 -12
  27. data/lib/ecoportal/api/graphql/base/delta_result.rb +16 -0
  28. data/lib/ecoportal/api/graphql/base/field.rb +12 -12
  29. data/lib/ecoportal/api/graphql/base/file_attachment.rb +15 -15
  30. data/lib/ecoportal/api/graphql/base/file_container.rb +14 -14
  31. data/lib/ecoportal/api/graphql/base/force/binding.rb +19 -0
  32. data/lib/ecoportal/api/graphql/base/force/binding_collection.rb +62 -0
  33. data/lib/ecoportal/api/graphql/base/force/collection.rb +47 -0
  34. data/lib/ecoportal/api/graphql/base/force.rb +65 -0
  35. data/lib/ecoportal/api/graphql/base/kickstand/job.rb +17 -0
  36. data/lib/ecoportal/api/graphql/base/kickstand/workflow.rb +18 -0
  37. data/lib/ecoportal/api/graphql/base/kickstand.rb +13 -0
  38. data/lib/ecoportal/api/graphql/base/location_classification_type.rb +15 -15
  39. data/lib/ecoportal/api/graphql/base/location_node.rb +14 -14
  40. data/lib/ecoportal/api/graphql/base/location_structure/draft/structure.rb +37 -37
  41. data/lib/ecoportal/api/graphql/base/location_structure/draft.rb +93 -93
  42. data/lib/ecoportal/api/graphql/base/location_structure.rb +27 -27
  43. data/lib/ecoportal/api/graphql/base/organization.rb +15 -15
  44. data/lib/ecoportal/api/graphql/base/page/basic.rb +38 -0
  45. data/lib/ecoportal/api/graphql/base/page/data_field/actions_list.rb +9 -0
  46. data/lib/ecoportal/api/graphql/base/page/data_field/ai_summary.rb +18 -0
  47. data/lib/ecoportal/api/graphql/base/page/data_field/checklist.rb +29 -0
  48. data/lib/ecoportal/api/graphql/base/page/data_field/collection.rb +119 -0
  49. data/lib/ecoportal/api/graphql/base/page/data_field/contractor_entities.rb +28 -0
  50. data/lib/ecoportal/api/graphql/base/page/data_field/cross_reference.rb +54 -0
  51. data/lib/ecoportal/api/graphql/base/page/data_field/date_field.rb +23 -0
  52. data/lib/ecoportal/api/graphql/base/page/data_field/file_field.rb +25 -0
  53. data/lib/ecoportal/api/graphql/base/page/data_field/gauge.rb +19 -0
  54. data/lib/ecoportal/api/graphql/base/page/data_field/geo.rb +24 -0
  55. data/lib/ecoportal/api/graphql/base/page/data_field/image_gallery.rb +24 -0
  56. data/lib/ecoportal/api/graphql/base/page/data_field/law.rb +8 -0
  57. data/lib/ecoportal/api/graphql/base/page/data_field/mailbox.rb +9 -0
  58. data/lib/ecoportal/api/graphql/base/page/data_field/number.rb +20 -0
  59. data/lib/ecoportal/api/graphql/base/page/data_field/people.rb +35 -0
  60. data/lib/ecoportal/api/graphql/base/page/data_field/plain_text.rb +17 -0
  61. data/lib/ecoportal/api/graphql/base/page/data_field/rich_text.rb +26 -0
  62. data/lib/ecoportal/api/graphql/base/page/data_field/select.rb +41 -0
  63. data/lib/ecoportal/api/graphql/base/page/data_field/signature.rb +9 -0
  64. data/lib/ecoportal/api/graphql/base/page/data_field/smart_fill.rb +17 -0
  65. data/lib/ecoportal/api/graphql/base/page/data_field/table.rb +9 -0
  66. data/lib/ecoportal/api/graphql/base/page/data_field/tag_field.rb +21 -0
  67. data/lib/ecoportal/api/graphql/base/page/data_field.rb +137 -12
  68. data/lib/ecoportal/api/graphql/base/page/phased/stage.rb +68 -14
  69. data/lib/ecoportal/api/graphql/base/page/phased.rb +15 -14
  70. data/lib/ecoportal/api/graphql/base/page/section.rb +48 -12
  71. data/lib/ecoportal/api/graphql/base/page/section_collection.rb +85 -0
  72. data/lib/ecoportal/api/graphql/base/page/task.rb +24 -0
  73. data/lib/ecoportal/api/graphql/base/page.rb +17 -14
  74. data/lib/ecoportal/api/graphql/base/page_info.rb +12 -12
  75. data/lib/ecoportal/api/graphql/base/pages_workflow/action_type_selection.rb +17 -0
  76. data/lib/ecoportal/api/graphql/base/pages_workflow/callback_type.rb +28 -0
  77. data/lib/ecoportal/api/graphql/base/pages_workflow/command_change.rb +17 -0
  78. data/lib/ecoportal/api/graphql/base/pages_workflow/command_change_message.rb +15 -0
  79. data/lib/ecoportal/api/graphql/base/pages_workflow/command_es_change.rb +17 -0
  80. data/lib/ecoportal/api/graphql/base/pages_workflow/command_interface.rb +36 -0
  81. data/lib/ecoportal/api/graphql/base/pages_workflow/email_config.rb +18 -0
  82. data/lib/ecoportal/api/graphql/base/pages_workflow/escalation_level.rb +19 -0
  83. data/lib/ecoportal/api/graphql/base/pages_workflow/in_system_config.rb +16 -0
  84. data/lib/ecoportal/api/graphql/base/pages_workflow/mailbox_field_selection.rb +17 -0
  85. data/lib/ecoportal/api/graphql/base/pages_workflow/operation_interface.rb +39 -0
  86. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/assign_to.rb +27 -0
  87. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/create_page.rb +21 -0
  88. data/lib/ecoportal/api/graphql/base/pages_workflow/operations/send_notification.rb +30 -0
  89. data/lib/ecoportal/api/graphql/base/pages_workflow/people_field_selection.rb +17 -0
  90. data/lib/ecoportal/api/graphql/base/pages_workflow/recipient_config.rb +34 -0
  91. data/lib/ecoportal/api/graphql/base/pages_workflow/register_field.rb +17 -0
  92. data/lib/ecoportal/api/graphql/base/pages_workflow/task_config_selection.rb +17 -0
  93. data/lib/ecoportal/api/graphql/base/pages_workflow/time_delay_config.rb +16 -0
  94. data/lib/ecoportal/api/graphql/base/pages_workflow/trigger_interface.rb +26 -0
  95. data/lib/ecoportal/api/graphql/base/pages_workflow/triggers/conditional_logic.rb +17 -0
  96. data/lib/ecoportal/api/graphql/base/pages_workflow/user_selection.rb +16 -0
  97. data/lib/ecoportal/api/graphql/base/pages_workflow.rb +35 -0
  98. data/lib/ecoportal/api/graphql/base/person_member.rb +22 -22
  99. data/lib/ecoportal/api/graphql/base/preset_view.rb +17 -0
  100. data/lib/ecoportal/api/graphql/base/preview_page.rb +23 -0
  101. data/lib/ecoportal/api/graphql/base/register.rb +18 -0
  102. data/lib/ecoportal/api/graphql/base/resource.rb +13 -13
  103. data/lib/ecoportal/api/graphql/base/template.rb +35 -0
  104. data/lib/ecoportal/api/graphql/base.rb +37 -24
  105. data/lib/ecoportal/api/graphql/builder/action.rb +41 -41
  106. data/lib/ecoportal/api/graphql/builder/contractor_entity.rb +41 -41
  107. data/lib/ecoportal/api/graphql/builder/kickstand.rb +73 -0
  108. data/lib/ecoportal/api/graphql/builder/location_structure/draft.rb +64 -64
  109. data/lib/ecoportal/api/graphql/builder/location_structure.rb +40 -40
  110. data/lib/ecoportal/api/graphql/builder/page.rb +210 -41
  111. data/lib/ecoportal/api/graphql/builder/register/preset_view.rb +84 -0
  112. data/lib/ecoportal/api/graphql/builder/register.rb +49 -41
  113. data/lib/ecoportal/api/graphql/builder/template.rb +80 -0
  114. data/lib/ecoportal/api/graphql/builder/template_builder.rb +174 -0
  115. data/lib/ecoportal/api/graphql/builder.rb +17 -14
  116. data/lib/ecoportal/api/graphql/compat/filter_translator.rb +142 -0
  117. data/lib/ecoportal/api/graphql/compat/page_reference.rb +23 -0
  118. data/lib/ecoportal/api/graphql/compat/pages.rb +212 -0
  119. data/lib/ecoportal/api/graphql/compat/registers.rb +84 -0
  120. data/lib/ecoportal/api/graphql/compat/response.rb +35 -0
  121. data/lib/ecoportal/api/graphql/compat/search_results.rb +33 -0
  122. data/lib/ecoportal/api/graphql/compat/stage_collection.rb +70 -0
  123. data/lib/ecoportal/api/graphql/compat/stage_view.rb +76 -0
  124. data/lib/ecoportal/api/graphql/compat.rb +17 -0
  125. data/lib/ecoportal/api/graphql/concerns/data_field_access.rb +71 -0
  126. data/lib/ecoportal/api/graphql/concerns/deprecation.rb +20 -0
  127. data/lib/ecoportal/api/graphql/concerns/fragment_definitions.rb +68 -75
  128. data/lib/ecoportal/api/graphql/concerns/page_compat.rb +51 -0
  129. data/lib/ecoportal/api/graphql/concerns/snake_camel_access.rb +60 -0
  130. data/lib/ecoportal/api/graphql/concerns.rb +14 -10
  131. data/lib/ecoportal/api/graphql/connection/action.rb +11 -11
  132. data/lib/ecoportal/api/graphql/connection/action_category.rb +11 -11
  133. data/lib/ecoportal/api/graphql/connection/contractor_entity.rb +11 -11
  134. data/lib/ecoportal/api/graphql/connection/page.rb +11 -0
  135. data/lib/ecoportal/api/graphql/connection/pages_workflow_command.rb +13 -0
  136. data/lib/ecoportal/api/graphql/connection/person_member.rb +11 -11
  137. data/lib/ecoportal/api/graphql/connection/preset_view.rb +11 -0
  138. data/lib/ecoportal/api/graphql/connection/preview_page.rb +11 -0
  139. data/lib/ecoportal/api/graphql/connection.rb +17 -13
  140. data/lib/ecoportal/api/graphql/diff/change.rb +59 -0
  141. data/lib/ecoportal/api/graphql/diff/command_synthesizer.rb +329 -0
  142. data/lib/ecoportal/api/graphql/diff/cross_object_diff.rb +165 -0
  143. data/lib/ecoportal/api/graphql/diff/deploy.rb +121 -0
  144. data/lib/ecoportal/api/graphql/diff/id_resolver.rb +64 -0
  145. data/lib/ecoportal/api/graphql/diff/pairing/candidate.rb +32 -0
  146. data/lib/ecoportal/api/graphql/diff/pairing/engine.rb +173 -0
  147. data/lib/ecoportal/api/graphql/diff/pairing/ledger.rb +119 -0
  148. data/lib/ecoportal/api/graphql/diff/pairing/signals.rb +104 -0
  149. data/lib/ecoportal/api/graphql/diff/strategy.rb +113 -0
  150. data/lib/ecoportal/api/graphql/diff/version_diff.rb +332 -0
  151. data/lib/ecoportal/api/graphql/diff.rb +34 -0
  152. data/lib/ecoportal/api/graphql/error/locations_error/fetch_nested.rb +51 -51
  153. data/lib/ecoportal/api/graphql/error/locations_error.rb +28 -28
  154. data/lib/ecoportal/api/graphql/error/locations_validation_error.rb +20 -20
  155. data/lib/ecoportal/api/graphql/error/validation_errors.rb +28 -28
  156. data/lib/ecoportal/api/graphql/error.rb +12 -12
  157. data/lib/ecoportal/api/graphql/file_upload/client.rb +192 -0
  158. data/lib/ecoportal/api/graphql/file_upload.rb +10 -0
  159. data/lib/ecoportal/api/graphql/fragment/action.rb +65 -65
  160. data/lib/ecoportal/api/graphql/fragment/action_category.rb +17 -17
  161. data/lib/ecoportal/api/graphql/fragment/contractor_entity.rb +20 -20
  162. data/lib/ecoportal/api/graphql/fragment/field_configuration.rb +38 -0
  163. data/lib/ecoportal/api/graphql/fragment/force.rb +34 -0
  164. data/lib/ecoportal/api/graphql/fragment/location_draft.rb +53 -53
  165. data/lib/ecoportal/api/graphql/fragment/location_node.rb +26 -26
  166. data/lib/ecoportal/api/graphql/fragment/locations_error.rb +19 -19
  167. data/lib/ecoportal/api/graphql/fragment/page.rb +85 -0
  168. data/lib/ecoportal/api/graphql/fragment/page_task.rb +39 -0
  169. data/lib/ecoportal/api/graphql/fragment/pages/common_page_union.rb +396 -0
  170. data/lib/ecoportal/api/graphql/fragment/pages.rb +15 -0
  171. data/lib/ecoportal/api/graphql/fragment/pages_workflow.rb +172 -0
  172. data/lib/ecoportal/api/graphql/fragment/pagination.rb +17 -17
  173. data/lib/ecoportal/api/graphql/fragment/template.rb +51 -0
  174. data/lib/ecoportal/api/graphql/fragment.rb +40 -27
  175. data/lib/ecoportal/api/graphql/helpers/locations_tree.rb +41 -41
  176. data/lib/ecoportal/api/graphql/helpers.rb +10 -10
  177. data/lib/ecoportal/api/graphql/input/action/archive.rb +14 -14
  178. data/lib/ecoportal/api/graphql/input/action/create.rb +13 -13
  179. data/lib/ecoportal/api/graphql/input/action/update.rb +14 -14
  180. data/lib/ecoportal/api/graphql/input/action.rb +14 -14
  181. data/lib/ecoportal/api/graphql/input/contractor_entity/create.rb +14 -14
  182. data/lib/ecoportal/api/graphql/input/contractor_entity/destroy.rb +13 -13
  183. data/lib/ecoportal/api/graphql/input/contractor_entity/update.rb +41 -16
  184. data/lib/ecoportal/api/graphql/input/contractor_entity.rb +14 -14
  185. data/lib/ecoportal/api/graphql/input/delta_input.rb +16 -0
  186. data/lib/ecoportal/api/graphql/input/id_diff.rb +11 -11
  187. data/lib/ecoportal/api/graphql/input/location_structure/apply_commands.rb +47 -47
  188. data/lib/ecoportal/api/graphql/input/location_structure/archive_command.rb +13 -13
  189. data/lib/ecoportal/api/graphql/input/location_structure/delete_command.rb +13 -13
  190. data/lib/ecoportal/api/graphql/input/location_structure/draft/add_commands.rb +49 -49
  191. data/lib/ecoportal/api/graphql/input/location_structure/draft/create.rb +15 -15
  192. data/lib/ecoportal/api/graphql/input/location_structure/draft/delete.rb +15 -15
  193. data/lib/ecoportal/api/graphql/input/location_structure/draft/drop_bad_commands.rb +16 -16
  194. data/lib/ecoportal/api/graphql/input/location_structure/draft/publish.rb +16 -16
  195. data/lib/ecoportal/api/graphql/input/location_structure/draft.rb +19 -19
  196. data/lib/ecoportal/api/graphql/input/location_structure/insert_command.rb +13 -13
  197. data/lib/ecoportal/api/graphql/input/location_structure/move_command.rb +14 -14
  198. data/lib/ecoportal/api/graphql/input/location_structure/reorder_command.rb +13 -13
  199. data/lib/ecoportal/api/graphql/input/location_structure/unarchive_command.rb +13 -13
  200. data/lib/ecoportal/api/graphql/input/location_structure/update_command.rb +27 -27
  201. data/lib/ecoportal/api/graphql/input/location_structure.rb +20 -20
  202. data/lib/ecoportal/api/graphql/input/page/archive.rb +14 -0
  203. data/lib/ecoportal/api/graphql/input/page/build_from_template.rb +13 -0
  204. data/lib/ecoportal/api/graphql/input/page/create_draft.rb +13 -0
  205. data/lib/ecoportal/api/graphql/input/page/create_from_template.rb +18 -0
  206. data/lib/ecoportal/api/graphql/input/page/delete_draft.rb +13 -0
  207. data/lib/ecoportal/api/graphql/input/page/publish_draft.rb +13 -0
  208. data/lib/ecoportal/api/graphql/input/page/review_task.rb +14 -0
  209. data/lib/ecoportal/api/graphql/input/page/unarchive.rb +14 -0
  210. data/lib/ecoportal/api/graphql/input/page/update.rb +140 -0
  211. data/lib/ecoportal/api/graphql/input/page.rb +26 -0
  212. data/lib/ecoportal/api/graphql/input/preset_view/create.rb +18 -0
  213. data/lib/ecoportal/api/graphql/input/preset_view/permission.rb +16 -0
  214. data/lib/ecoportal/api/graphql/input/preset_view/update.rb +16 -0
  215. data/lib/ecoportal/api/graphql/input/preset_view.rb +14 -0
  216. data/lib/ecoportal/api/graphql/input/register/create.rb +18 -0
  217. data/lib/ecoportal/api/graphql/input/register/update.rb +15 -0
  218. data/lib/ecoportal/api/graphql/input/register.rb +13 -0
  219. data/lib/ecoportal/api/graphql/input/search.rb +13 -13
  220. data/lib/ecoportal/api/graphql/input/search_conf/ai_generator.rb +234 -0
  221. data/lib/ecoportal/api/graphql/input/search_conf.rb +436 -0
  222. data/lib/ecoportal/api/graphql/input/search_filter.rb +12 -12
  223. data/lib/ecoportal/api/graphql/input/search_sorter.rb +11 -11
  224. data/lib/ecoportal/api/graphql/input/variable_binding.rb +20 -0
  225. data/lib/ecoportal/api/graphql/input/workflow_command/add_action_tag.rb +18 -0
  226. data/lib/ecoportal/api/graphql/input/workflow_command/add_binding.rb +18 -0
  227. data/lib/ecoportal/api/graphql/input/workflow_command/add_comment_tagging_user_group.rb +18 -0
  228. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_direct_strategy_user.rb +18 -0
  229. data/lib/ecoportal/api/graphql/input/workflow_command/add_default_strategy.rb +18 -0
  230. data/lib/ecoportal/api/graphql/input/workflow_command/add_direct_strategy_user.rb +18 -0
  231. data/lib/ecoportal/api/graphql/input/workflow_command/add_field.rb +27 -0
  232. data/lib/ecoportal/api/graphql/input/workflow_command/add_force.rb +18 -0
  233. data/lib/ecoportal/api/graphql/input/workflow_command/add_gauge_field_stop.rb +19 -0
  234. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_field_config.rb +23 -0
  235. data/lib/ecoportal/api/graphql/input/workflow_command/add_linked_helper.rb +18 -0
  236. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation.rb +18 -0
  237. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_direct_strategy_user.rb +18 -0
  238. data/lib/ecoportal/api/graphql/input/workflow_command/add_operation_strategy.rb +18 -0
  239. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_action_type.rb +18 -0
  240. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_filter.rb +18 -0
  241. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_people_field.rb +18 -0
  242. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_task_config.rb +18 -0
  243. data/lib/ecoportal/api/graphql/input/workflow_command/add_recipient_user.rb +18 -0
  244. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback.rb +23 -0
  245. data/lib/ecoportal/api/graphql/input/workflow_command/add_scheduled_callback_action.rb +18 -0
  246. data/lib/ecoportal/api/graphql/input/workflow_command/add_section.rb +18 -0
  247. data/lib/ecoportal/api/graphql/input/workflow_command/add_select_field_option.rb +19 -0
  248. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage.rb +18 -0
  249. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_section.rb +18 -0
  250. data/lib/ecoportal/api/graphql/input/workflow_command/add_stage_tag.rb +18 -0
  251. data/lib/ecoportal/api/graphql/input/workflow_command/add_strategy.rb +18 -0
  252. data/lib/ecoportal/api/graphql/input/workflow_command/add_task.rb +18 -0
  253. data/lib/ecoportal/api/graphql/input/workflow_command/add_task_assignment_user_group.rb +18 -0
  254. data/lib/ecoportal/api/graphql/input/workflow_command/add_workflow_callback.rb +18 -0
  255. data/lib/ecoportal/api/graphql/input/workflow_command/collapse_section.rb +18 -0
  256. data/lib/ecoportal/api/graphql/input/workflow_command/edit_binding.rb +18 -0
  257. data/lib/ecoportal/api/graphql/input/workflow_command/edit_creator_permissions.rb +18 -0
  258. data/lib/ecoportal/api/graphql/input/workflow_command/edit_default_strategy.rb +18 -0
  259. data/lib/ecoportal/api/graphql/input/workflow_command/edit_field_configuration.rb +21 -0
  260. data/lib/ecoportal/api/graphql/input/workflow_command/edit_force.rb +18 -0
  261. data/lib/ecoportal/api/graphql/input/workflow_command/edit_gauge_field_stop.rb +19 -0
  262. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_field_config.rb +19 -0
  263. data/lib/ecoportal/api/graphql/input/workflow_command/edit_linked_helper.rb +18 -0
  264. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation.rb +18 -0
  265. data/lib/ecoportal/api/graphql/input/workflow_command/edit_operation_strategy.rb +18 -0
  266. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page.rb +28 -0
  267. data/lib/ecoportal/api/graphql/input/workflow_command/edit_page_creator_permissions.rb +18 -0
  268. data/lib/ecoportal/api/graphql/input/workflow_command/edit_reminder.rb +18 -0
  269. data/lib/ecoportal/api/graphql/input/workflow_command/edit_required_sign_offs.rb +18 -0
  270. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_comment_tagging.rb +18 -0
  271. data/lib/ecoportal/api/graphql/input/workflow_command/edit_restrict_task_assignment.rb +18 -0
  272. data/lib/ecoportal/api/graphql/input/workflow_command/edit_scheduled_callback.rb +22 -0
  273. data/lib/ecoportal/api/graphql/input/workflow_command/edit_section_header.rb +18 -0
  274. data/lib/ecoportal/api/graphql/input/workflow_command/edit_select_field_option.rb +19 -0
  275. data/lib/ecoportal/api/graphql/input/workflow_command/edit_stage.rb +18 -0
  276. data/lib/ecoportal/api/graphql/input/workflow_command/edit_strategy.rb +18 -0
  277. data/lib/ecoportal/api/graphql/input/workflow_command/edit_task_due.rb +18 -0
  278. data/lib/ecoportal/api/graphql/input/workflow_command/edit_trigger.rb +18 -0
  279. data/lib/ecoportal/api/graphql/input/workflow_command/expand_section.rb +18 -0
  280. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/contractor_entities.rb +24 -0
  281. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/cross_reference.rb +23 -0
  282. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/date.rb +20 -0
  283. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/gauge.rb +20 -0
  284. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/image_gallery.rb +20 -0
  285. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/location_field.rb +24 -0
  286. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/people.rb +24 -0
  287. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/plain_text.rb +20 -0
  288. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/rich_text.rb +20 -0
  289. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/select.rb +20 -0
  290. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/signature.rb +20 -0
  291. data/lib/ecoportal/api/graphql/input/workflow_command/field_config/table.rb +25 -0
  292. data/lib/ecoportal/api/graphql/input/workflow_command/move_field.rb +18 -0
  293. data/lib/ecoportal/api/graphql/input/workflow_command/move_stage.rb +18 -0
  294. data/lib/ecoportal/api/graphql/input/workflow_command/remove_action_tag.rb +18 -0
  295. data/lib/ecoportal/api/graphql/input/workflow_command/remove_binding.rb +18 -0
  296. data/lib/ecoportal/api/graphql/input/workflow_command/remove_callback.rb +18 -0
  297. data/lib/ecoportal/api/graphql/input/workflow_command/remove_comment_tagging_user_group.rb +18 -0
  298. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_direct_strategy_user.rb +18 -0
  299. data/lib/ecoportal/api/graphql/input/workflow_command/remove_default_strategy.rb +18 -0
  300. data/lib/ecoportal/api/graphql/input/workflow_command/remove_direct_strategy_user.rb +18 -0
  301. data/lib/ecoportal/api/graphql/input/workflow_command/remove_field.rb +18 -0
  302. data/lib/ecoportal/api/graphql/input/workflow_command/remove_force.rb +18 -0
  303. data/lib/ecoportal/api/graphql/input/workflow_command/remove_gauge_field_stop.rb +17 -0
  304. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_field_config.rb +17 -0
  305. data/lib/ecoportal/api/graphql/input/workflow_command/remove_linked_helper.rb +18 -0
  306. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation.rb +18 -0
  307. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_direct_strategy_user.rb +18 -0
  308. data/lib/ecoportal/api/graphql/input/workflow_command/remove_operation_strategy.rb +18 -0
  309. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_action_type.rb +18 -0
  310. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_filter.rb +18 -0
  311. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_people_field.rb +18 -0
  312. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_task_config.rb +18 -0
  313. data/lib/ecoportal/api/graphql/input/workflow_command/remove_recipient_user.rb +18 -0
  314. data/lib/ecoportal/api/graphql/input/workflow_command/remove_scheduled_callback.rb +18 -0
  315. data/lib/ecoportal/api/graphql/input/workflow_command/remove_section.rb +18 -0
  316. data/lib/ecoportal/api/graphql/input/workflow_command/remove_select_field_option.rb +17 -0
  317. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage.rb +18 -0
  318. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_section.rb +18 -0
  319. data/lib/ecoportal/api/graphql/input/workflow_command/remove_stage_tag.rb +18 -0
  320. data/lib/ecoportal/api/graphql/input/workflow_command/remove_strategy.rb +18 -0
  321. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task.rb +18 -0
  322. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_assignment_user_group.rb +18 -0
  323. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_due.rb +18 -0
  324. data/lib/ecoportal/api/graphql/input/workflow_command/remove_task_priority_level.rb +18 -0
  325. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_forces.rb +18 -0
  326. data/lib/ecoportal/api/graphql/input/workflow_command/reorder_section.rb +18 -0
  327. data/lib/ecoportal/api/graphql/input/workflow_command.rb +251 -0
  328. data/lib/ecoportal/api/graphql/input.rb +24 -16
  329. data/lib/ecoportal/api/graphql/interface/base_page.rb +100 -58
  330. data/lib/ecoportal/api/graphql/interface/location_structure/command.rb +30 -30
  331. data/lib/ecoportal/api/graphql/interface/location_structure/node.rb +43 -43
  332. data/lib/ecoportal/api/graphql/interface/location_structure/nodes.rb +27 -28
  333. data/lib/ecoportal/api/graphql/interface/location_structure.rb +14 -14
  334. data/lib/ecoportal/api/graphql/interface.rb +11 -11
  335. data/lib/ecoportal/api/graphql/logic/base_model.rb +15 -13
  336. data/lib/ecoportal/api/graphql/logic/base_query.rb +193 -150
  337. data/lib/ecoportal/api/graphql/logic/connection.rb +34 -34
  338. data/lib/ecoportal/api/graphql/logic/input.rb +26 -11
  339. data/lib/ecoportal/api/graphql/logic/mutation.rb +59 -59
  340. data/lib/ecoportal/api/graphql/logic/payload.rb +42 -42
  341. data/lib/ecoportal/api/graphql/logic/query.rb +23 -23
  342. data/lib/ecoportal/api/graphql/logic/query_array.rb +30 -30
  343. data/lib/ecoportal/api/graphql/logic/query_connection.rb +48 -48
  344. data/lib/ecoportal/api/graphql/logic.rb +18 -18
  345. data/lib/ecoportal/api/graphql/model/account.rb +15 -15
  346. data/lib/ecoportal/api/graphql/model/action.rb +22 -22
  347. data/lib/ecoportal/api/graphql/model/ai_summary_version.rb +10 -0
  348. data/lib/ecoportal/api/graphql/model/contractor_entity.rb +12 -12
  349. data/lib/ecoportal/api/graphql/model/field.rb +10 -10
  350. data/lib/ecoportal/api/graphql/model/file_attachment.rb +10 -10
  351. data/lib/ecoportal/api/graphql/model/file_container.rb +11 -11
  352. data/lib/ecoportal/api/graphql/model/location_node.rb +14 -14
  353. data/lib/ecoportal/api/graphql/model/location_structure/draft/structure.rb +15 -15
  354. data/lib/ecoportal/api/graphql/model/location_structure/draft.rb +15 -15
  355. data/lib/ecoportal/api/graphql/model/location_structure.rb +16 -16
  356. data/lib/ecoportal/api/graphql/model/organization.rb +65 -55
  357. data/lib/ecoportal/api/graphql/model/page/basic.rb +14 -0
  358. data/lib/ecoportal/api/graphql/model/page/data_field.rb +12 -12
  359. data/lib/ecoportal/api/graphql/model/page/phased/stage.rb +14 -14
  360. data/lib/ecoportal/api/graphql/model/page/phased.rb +82 -20
  361. data/lib/ecoportal/api/graphql/model/page/section.rb +12 -12
  362. data/lib/ecoportal/api/graphql/model/page/task.rb +16 -0
  363. data/lib/ecoportal/api/graphql/model/page.rb +16 -14
  364. data/lib/ecoportal/api/graphql/model/page_union.rb +21 -0
  365. data/lib/ecoportal/api/graphql/model/pages_workflow.rb +20 -0
  366. data/lib/ecoportal/api/graphql/model/person_member.rb +15 -15
  367. data/lib/ecoportal/api/graphql/model/preset_view.rb +10 -0
  368. data/lib/ecoportal/api/graphql/model/preview_page.rb +10 -0
  369. data/lib/ecoportal/api/graphql/model/register.rb +10 -0
  370. data/lib/ecoportal/api/graphql/model/resource.rb +13 -13
  371. data/lib/ecoportal/api/graphql/model/template.rb +15 -0
  372. data/lib/ecoportal/api/graphql/model/user.rb +14 -14
  373. data/lib/ecoportal/api/graphql/model.rb +32 -22
  374. data/lib/ecoportal/api/graphql/mutation/action/archive.rb +41 -41
  375. data/lib/ecoportal/api/graphql/mutation/action/create.rb +40 -40
  376. data/lib/ecoportal/api/graphql/mutation/action/update.rb +40 -40
  377. data/lib/ecoportal/api/graphql/mutation/action.rb +14 -14
  378. data/lib/ecoportal/api/graphql/mutation/ai_summary/generate.rb +45 -0
  379. data/lib/ecoportal/api/graphql/mutation/ai_summary/submit_feedback.rb +40 -0
  380. data/lib/ecoportal/api/graphql/mutation/ai_summary.rb +13 -0
  381. data/lib/ecoportal/api/graphql/mutation/contractor_entity/create.rb +40 -40
  382. data/lib/ecoportal/api/graphql/mutation/contractor_entity/destroy.rb +40 -40
  383. data/lib/ecoportal/api/graphql/mutation/contractor_entity/update.rb +40 -40
  384. data/lib/ecoportal/api/graphql/mutation/contractor_entity.rb +14 -14
  385. data/lib/ecoportal/api/graphql/mutation/kickstand/bulk_update_jobs.rb +43 -0
  386. data/lib/ecoportal/api/graphql/mutation/kickstand/bulk_update_workflows.rb +43 -0
  387. data/lib/ecoportal/api/graphql/mutation/kickstand/fail_job.rb +39 -0
  388. data/lib/ecoportal/api/graphql/mutation/kickstand/fail_workflow.rb +39 -0
  389. data/lib/ecoportal/api/graphql/mutation/kickstand/start_job.rb +39 -0
  390. data/lib/ecoportal/api/graphql/mutation/kickstand/start_workflow.rb +39 -0
  391. data/lib/ecoportal/api/graphql/mutation/kickstand/stop_workflow.rb +39 -0
  392. data/lib/ecoportal/api/graphql/mutation/kickstand.rb +18 -0
  393. data/lib/ecoportal/api/graphql/mutation/location_structure/apply_commands.rb +54 -54
  394. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/add_commands.rb +55 -55
  395. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/create.rb +54 -54
  396. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/delete.rb +43 -43
  397. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/drop_bad_commands.rb +56 -56
  398. data/lib/ecoportal/api/graphql/mutation/location_structure/draft/publish.rb +66 -66
  399. data/lib/ecoportal/api/graphql/mutation/location_structure/draft.rb +18 -18
  400. data/lib/ecoportal/api/graphql/mutation/location_structure.rb +13 -13
  401. data/lib/ecoportal/api/graphql/mutation/page/approve_review_task.rb +40 -0
  402. data/lib/ecoportal/api/graphql/mutation/page/archive.rb +40 -0
  403. data/lib/ecoportal/api/graphql/mutation/page/batch_update_review_task.rb +38 -0
  404. data/lib/ecoportal/api/graphql/mutation/page/build_from_template.rb +50 -0
  405. data/lib/ecoportal/api/graphql/mutation/page/create_draft.rb +38 -0
  406. data/lib/ecoportal/api/graphql/mutation/page/create_from_template.rb +43 -0
  407. data/lib/ecoportal/api/graphql/mutation/page/delete_draft.rb +38 -0
  408. data/lib/ecoportal/api/graphql/mutation/page/execute_force_commands.rb +69 -0
  409. data/lib/ecoportal/api/graphql/mutation/page/execute_workflow_commands.rb +52 -0
  410. data/lib/ecoportal/api/graphql/mutation/page/publish_draft.rb +38 -0
  411. data/lib/ecoportal/api/graphql/mutation/page/reject_review_task.rb +40 -0
  412. data/lib/ecoportal/api/graphql/mutation/page/restart_review_task.rb +40 -0
  413. data/lib/ecoportal/api/graphql/mutation/page/unarchive.rb +40 -0
  414. data/lib/ecoportal/api/graphql/mutation/page/undo_review_task.rb +40 -0
  415. data/lib/ecoportal/api/graphql/mutation/page/update.rb +40 -0
  416. data/lib/ecoportal/api/graphql/mutation/page/update_variable_bindings.rb +44 -0
  417. data/lib/ecoportal/api/graphql/mutation/page.rb +28 -0
  418. data/lib/ecoportal/api/graphql/mutation/preset_view/create.rb +35 -0
  419. data/lib/ecoportal/api/graphql/mutation/preset_view/destroy.rb +34 -0
  420. data/lib/ecoportal/api/graphql/mutation/preset_view/permission.rb +37 -0
  421. data/lib/ecoportal/api/graphql/mutation/preset_view/update.rb +35 -0
  422. data/lib/ecoportal/api/graphql/mutation/preset_view.rb +15 -0
  423. data/lib/ecoportal/api/graphql/mutation/register/create.rb +35 -0
  424. data/lib/ecoportal/api/graphql/mutation/register/destroy.rb +35 -0
  425. data/lib/ecoportal/api/graphql/mutation/register/update.rb +35 -0
  426. data/lib/ecoportal/api/graphql/mutation/register.rb +14 -0
  427. data/lib/ecoportal/api/graphql/mutation/smart_fill/generate.rb +36 -0
  428. data/lib/ecoportal/api/graphql/mutation/smart_fill/submit_feedback.rb +40 -0
  429. data/lib/ecoportal/api/graphql/mutation/smart_fill.rb +13 -0
  430. data/lib/ecoportal/api/graphql/mutation/template/create.rb +39 -0
  431. data/lib/ecoportal/api/graphql/mutation/template/create_related_page.rb +46 -0
  432. data/lib/ecoportal/api/graphql/mutation/template/destroy_related_page.rb +43 -0
  433. data/lib/ecoportal/api/graphql/mutation/template/publish.rb +39 -0
  434. data/lib/ecoportal/api/graphql/mutation/template/unpublish.rb +39 -0
  435. data/lib/ecoportal/api/graphql/mutation/template/update.rb +43 -0
  436. data/lib/ecoportal/api/graphql/mutation/template/update_information.rb +43 -0
  437. data/lib/ecoportal/api/graphql/mutation/template.rb +18 -0
  438. data/lib/ecoportal/api/graphql/mutation.rb +20 -12
  439. data/lib/ecoportal/api/graphql/payload/action/archive.rb +13 -13
  440. data/lib/ecoportal/api/graphql/payload/action/create.rb +13 -13
  441. data/lib/ecoportal/api/graphql/payload/action/update.rb +13 -13
  442. data/lib/ecoportal/api/graphql/payload/action.rb +14 -14
  443. data/lib/ecoportal/api/graphql/payload/ai_summary_generate.rb +12 -0
  444. data/lib/ecoportal/api/graphql/payload/contractor_entity/create.rb +13 -13
  445. data/lib/ecoportal/api/graphql/payload/contractor_entity/destroy.rb +12 -12
  446. data/lib/ecoportal/api/graphql/payload/contractor_entity/update.rb +12 -12
  447. data/lib/ecoportal/api/graphql/payload/contractor_entity.rb +14 -14
  448. data/lib/ecoportal/api/graphql/payload/execute_workflow_commands.rb +36 -0
  449. data/lib/ecoportal/api/graphql/payload/force_commands.rb +31 -0
  450. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_jobs.rb +36 -0
  451. data/lib/ecoportal/api/graphql/payload/kickstand/bulk_update_workflows.rb +36 -0
  452. data/lib/ecoportal/api/graphql/payload/kickstand/job.rb +13 -0
  453. data/lib/ecoportal/api/graphql/payload/kickstand/workflow.rb +13 -0
  454. data/lib/ecoportal/api/graphql/payload/kickstand.rb +15 -0
  455. data/lib/ecoportal/api/graphql/payload/location_structure/apply_commands.rb +51 -51
  456. data/lib/ecoportal/api/graphql/payload/location_structure/command_execution_result.rb +50 -50
  457. data/lib/ecoportal/api/graphql/payload/location_structure/draft/add_commands.rb +30 -30
  458. data/lib/ecoportal/api/graphql/payload/location_structure/draft/create.rb +33 -34
  459. data/lib/ecoportal/api/graphql/payload/location_structure/draft/delete.rb +30 -30
  460. data/lib/ecoportal/api/graphql/payload/location_structure/draft/drop_bad_commands.rb +43 -43
  461. data/lib/ecoportal/api/graphql/payload/location_structure/draft/publish.rb +63 -63
  462. data/lib/ecoportal/api/graphql/payload/location_structure/draft.rb +18 -18
  463. data/lib/ecoportal/api/graphql/payload/location_structure.rb +14 -14
  464. data/lib/ecoportal/api/graphql/payload/ok_payload.rb +36 -0
  465. data/lib/ecoportal/api/graphql/payload/page/archive.rb +13 -0
  466. data/lib/ecoportal/api/graphql/payload/page/build_from_template.rb +13 -0
  467. data/lib/ecoportal/api/graphql/payload/page/create_from_template.rb +13 -0
  468. data/lib/ecoportal/api/graphql/payload/page/draft.rb +26 -0
  469. data/lib/ecoportal/api/graphql/payload/page/review_task.rb +13 -0
  470. data/lib/ecoportal/api/graphql/payload/page/review_task_batch.rb +23 -0
  471. data/lib/ecoportal/api/graphql/payload/page/unarchive.rb +13 -0
  472. data/lib/ecoportal/api/graphql/payload/page/update.rb +13 -0
  473. data/lib/ecoportal/api/graphql/payload/page/update_variable_bindings.rb +13 -0
  474. data/lib/ecoportal/api/graphql/payload/page.rb +20 -0
  475. data/lib/ecoportal/api/graphql/payload/preset_view.rb +15 -0
  476. data/lib/ecoportal/api/graphql/payload/register.rb +15 -0
  477. data/lib/ecoportal/api/graphql/payload/template/create.rb +13 -0
  478. data/lib/ecoportal/api/graphql/payload/template/create_related_page.rb +13 -0
  479. data/lib/ecoportal/api/graphql/payload/template/destroy_related_page.rb +13 -0
  480. data/lib/ecoportal/api/graphql/payload/template/publish.rb +13 -0
  481. data/lib/ecoportal/api/graphql/payload/template/unpublish.rb +13 -0
  482. data/lib/ecoportal/api/graphql/payload/template/update.rb +13 -0
  483. data/lib/ecoportal/api/graphql/payload/template/update_information.rb +13 -0
  484. data/lib/ecoportal/api/graphql/payload/template.rb +18 -0
  485. data/lib/ecoportal/api/graphql/payload.rb +23 -12
  486. data/lib/ecoportal/api/graphql/query/action.rb +33 -33
  487. data/lib/ecoportal/api/graphql/query/action_categories.rb +53 -53
  488. data/lib/ecoportal/api/graphql/query/actions.rb +43 -43
  489. data/lib/ecoportal/api/graphql/query/contractor_entities.rb +53 -53
  490. data/lib/ecoportal/api/graphql/query/file_upload_signature.rb +76 -0
  491. data/lib/ecoportal/api/graphql/query/location_classifications.rb +39 -39
  492. data/lib/ecoportal/api/graphql/query/location_structure/draft.rb +62 -62
  493. data/lib/ecoportal/api/graphql/query/location_structure.rb +61 -61
  494. data/lib/ecoportal/api/graphql/query/location_structures.rb +57 -57
  495. data/lib/ecoportal/api/graphql/query/page.rb +45 -0
  496. data/lib/ecoportal/api/graphql/query/page_delta.rb +47 -0
  497. data/lib/ecoportal/api/graphql/query/page_with_forces.rb +49 -0
  498. data/lib/ecoportal/api/graphql/query/pages.rb +59 -0
  499. data/lib/ecoportal/api/graphql/query/pages_workflow_commands.rb +65 -0
  500. data/lib/ecoportal/api/graphql/query/register_preset_views.rb +78 -0
  501. data/lib/ecoportal/api/graphql/query/register_preview_pages.rb +83 -0
  502. data/lib/ecoportal/api/graphql/query/templates.rb +53 -0
  503. data/lib/ecoportal/api/graphql/query.rb +27 -16
  504. data/lib/ecoportal/api/graphql.rb +143 -80
  505. data/lib/ecoportal/api/graphql_version.rb +5 -5
  506. data/lib/ecoportal/api-graphql.rb +10 -10
  507. metadata +328 -25
  508. data/.gitignore +0 -24
  509. data/.markdownlint.json +0 -4
  510. data/.rspec +0 -3
  511. data/.rubocop.yml +0 -97
  512. data/.ruby-version +0 -1
  513. data/.yardopts +0 -10
  514. data/Gemfile +0 -6
  515. data/Rakefile +0 -38
  516. data/bin/console +0 -14
  517. data/bin/setup +0 -8
  518. data/bin/setup.ps1 +0 -6
  519. data/ecoportal-api-graphql.gemspec +0 -40
  520. data/tests/actions_get.rb +0 -7
  521. data/tests/contractor_entities_get.rb +0 -20
  522. data/tests/contractor_entity_create.rb +0 -19
  523. data/tests/contractor_entity_udpate.rb +0 -20
  524. data/tests/loc_structure_get.rb +0 -11
  525. data/tests/loc_structure_update.rb +0 -51
  526. data/tests/loc_structures_get.rb +0 -15
  527. data/tests/local_libs.rb +0 -20
@@ -0,0 +1,192 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'json'
4
+ require 'mime/types'
5
+
6
+ module Ecoportal
7
+ module API
8
+ class GraphQL
9
+ module FileUpload
10
+ # Orchestrates the full file upload workflow:
11
+ #
12
+ # Step 1 — Get S3 pre-signed credentials via GraphQL
13
+ # Step 2 — Upload file directly to S3 (multipart form POST)
14
+ # Step 3 — Register the upload with EcoPortal (REST POST /v2/s3/files)
15
+ # Step 4 — Poll until the FileContainer is created
16
+ #
17
+ # Returns a fileContainerId string on success, suitable for use in
18
+ # DataField::FileField#file_container_ids= or DataField::ImageGallery#file_container_ids=
19
+ #
20
+ # Usage:
21
+ # container_id = api.file_upload.upload('/path/to/report.pdf')
22
+ # page.components.get_by_name('Attachment').file_container_ids = [container_id]
23
+ # api.pages.update(page)
24
+ #
25
+ # Step 1 (GraphQL) authenticates via the gem's email/pass OAuth bearer token.
26
+ # Steps 3-4 (REST v2 `/s3/files`) require the gem to ALSO have been initialised
27
+ # with `api_key:` — `Ecoportal::API::GraphQL.new(email:, pass:, api_key:)` — since
28
+ # those endpoints authenticate via `X-ECOPORTAL-API-KEY`, not the GraphQL bearer
29
+ # token (mirrors `Ecoportal::API::Common::Content::Client#base_request` in
30
+ # ecoportal-api-v2).
31
+ class Client
32
+ POLL_INTERVAL = 2 # seconds between poll attempts
33
+ POLL_MAX_WAIT = 120 # seconds before giving up
34
+
35
+ def initialize(graphql_client)
36
+ @graphql_client = graphql_client
37
+ @http_client = graphql_client.client.http_client
38
+ @org_id = @http_client.org_id
39
+ @host = @http_client.host
40
+ end
41
+
42
+ # Upload a file and return the fileContainerId.
43
+ # Raises RuntimeError on failure.
44
+ def upload(file_path)
45
+ raise ArgumentError, "File not found: #{file_path}" unless File.exist?(file_path)
46
+
47
+ creds = fetch_s3_credentials
48
+ s3_key = direct_upload_to_storage(file_path, creds)
49
+ poll_id = register_upload(file_path, s3_key)
50
+ poll_for_container_id(poll_id)
51
+ end
52
+
53
+ private
54
+
55
+ # Step 1: GraphQL query → S3 presigned credentials
56
+ def fetch_s3_credentials
57
+ Query::FileUploadSignature.new(@graphql_client.client).query
58
+ end
59
+
60
+ # Step 2: Direct multipart POST to S3
61
+ def direct_upload_to_storage(file_path, creds)
62
+ filename = File.basename(file_path)
63
+ s3_key = "#{creds.upload_prefix}#{filename}"
64
+ mime_type = detect_mime_type(file_path)
65
+ endpoint = URI(creds.endpoint)
66
+
67
+ File.open(file_path, 'rb') do |file|
68
+ Net::HTTP.start(endpoint.host, endpoint.port,
69
+ use_ssl: endpoint.scheme == 'https') do |http|
70
+ boundary = "EcoPortalUpload#{SecureRandom.hex(8)}"
71
+ body = build_multipart(boundary, {
72
+ s3_key: s3_key, access_key: creds.access_key,
73
+ policy: creds.policy, signature: creds.signature,
74
+ mime_type: mime_type, filename: filename
75
+ }, file)
76
+ request = Net::HTTP::Post.new(endpoint.path.empty? ? '/' : endpoint.path)
77
+ request['Content-Type'] = "multipart/form-data; boundary=#{boundary}"
78
+ request.body = body
79
+ response = http.request(request)
80
+ raise "S3 upload failed (#{response.code}): #{response.body}" unless response.code.to_i < 300
81
+ end
82
+ end
83
+
84
+ s3_key
85
+ end
86
+
87
+ # Step 3: Register with EcoPortal backend (REST v2)
88
+ def register_upload(file_path, s3_key)
89
+ filename = File.basename(file_path)
90
+ mime_type = detect_mime_type(file_path)
91
+ filesize = File.size(file_path)
92
+
93
+ body = { filename: filename, filetype: mime_type, filesize: filesize, path: s3_key }
94
+ response = upload_post('/s3/files', body)
95
+ raise "File registration failed: #{response.body}" unless response.code.to_i < 300
96
+
97
+ JSON.parse(response.body)['id']
98
+ end
99
+
100
+ # Step 4: Poll until FileContainer is created; return fileContainerId
101
+ def poll_for_container_id(poll_id)
102
+ deadline = Time.now + POLL_MAX_WAIT
103
+ loop do
104
+ raise 'File upload timed out' if Time.now > deadline
105
+
106
+ response = upload_get("/s3/files/poll/#{poll_id}")
107
+ raise "Poll failed: #{response.body}" unless response.code.to_i < 300
108
+
109
+ data = JSON.parse(response.body)
110
+ status = data['status'] || data.dig('file', 'status')
111
+
112
+ return data.dig('file', 'file_container_id') if data['status'] == 'success'
113
+ raise "File upload failed: #{data.inspect}" if status == 'failed'
114
+
115
+ sleep POLL_INTERVAL
116
+ end
117
+ end
118
+
119
+ # --- REST helpers (v2 endpoints, X-ECOPORTAL-API-KEY auth) ---
120
+
121
+ def api_key
122
+ @api_key ||= @http_client.api_key.tap do |key|
123
+ if key.nil? || key.to_s.strip.empty?
124
+ raise 'File upload requires an api_key: Ecoportal::API::GraphQL.new(email:, pass:, api_key:). ' \
125
+ 'The v2 REST endpoints used to register/poll an upload authenticate via ' \
126
+ 'X-ECOPORTAL-API-KEY, not the GraphQL OAuth bearer token.'
127
+ end
128
+ end
129
+ end
130
+
131
+ def upload_base_url
132
+ "https://#{@host}/api/v2/#{@org_id}"
133
+ end
134
+
135
+ def upload_get(path)
136
+ uri = URI("#{upload_base_url}#{path}")
137
+ request = Net::HTTP::Get.new(uri)
138
+ request['X-ECOPORTAL-API-KEY'] = api_key
139
+ request['Accept'] = 'application/json'
140
+ Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(request) }
141
+ end
142
+
143
+ def upload_post(path, body)
144
+ uri = URI("#{upload_base_url}#{path}")
145
+ request = Net::HTTP::Post.new(uri)
146
+ request['X-ECOPORTAL-API-KEY'] = api_key
147
+ request['Content-Type'] = 'application/json'
148
+ request['Accept'] = 'application/json'
149
+ request.body = JSON.generate(body)
150
+ Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(request) }
151
+ end
152
+
153
+ # --- Multipart builder ---
154
+
155
+ def build_multipart(boundary, opts, file_io)
156
+ parts = {
157
+ 'key' => opts[:s3_key],
158
+ 'AWSAccessKeyId' => opts[:access_key],
159
+ 'policy' => opts[:policy],
160
+ 'signature' => opts[:signature],
161
+ 'x-amz-server-side-encryption' => 'AES256',
162
+ 'Content-Type' => opts[:mime_type]
163
+ }
164
+ filename = opts[:filename]
165
+ mime_type = opts[:mime_type]
166
+
167
+ body = +''
168
+ parts.each do |name, value|
169
+ body << "--#{boundary}\r\n"
170
+ body << "Content-Disposition: form-data; name=\"#{name}\"\r\n\r\n"
171
+ body << "#{value}\r\n"
172
+ end
173
+ # File field last
174
+ body << "--#{boundary}\r\n"
175
+ body << "Content-Disposition: form-data; name=\"file\"; filename=\"#{filename}\"\r\n"
176
+ body << "Content-Type: #{mime_type}\r\n\r\n"
177
+ body << file_io.read
178
+ body << "\r\n--#{boundary}--\r\n"
179
+ body
180
+ end
181
+
182
+ def detect_mime_type(file_path)
183
+ types = MIME::Types.type_for(file_path)
184
+ types.first&.to_s || 'application/octet-stream'
185
+ rescue StandardError
186
+ 'application/octet-stream'
187
+ end
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,10 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ module FileUpload
5
+ end
6
+ end
7
+ end
8
+ end
9
+
10
+ require_relative 'file_upload/client'
@@ -1,65 +1,65 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- class Fragment
5
- fragment :Action, <<~GRAPHQL
6
- fragment on Action {
7
- id
8
- altId
9
- actionCategory {
10
- name
11
- value
12
- }
13
- actionCategoryId
14
- standaloneAction
15
- status
16
- relativeStatus
17
- archived
18
- locations {
19
- id
20
- name
21
- objectId
22
- }
23
- name
24
- description
25
- assignedTo {
26
- id
27
- name
28
- email
29
- }
30
- createdAt {
31
- dateTime
32
- timeZone
33
- }
34
- updatedAt {
35
- dateTime
36
- timeZone
37
- }
38
- dueDate {
39
- dateTime
40
- timeZone
41
- }
42
- completedAt {
43
- dateTime
44
- timeZone
45
- }
46
- completer {
47
- name
48
- email
49
- }
50
- linkedResources {
51
- id
52
- page {
53
- ... on BasePageInterface {
54
- id
55
- name
56
- uid
57
- }
58
- }
59
- }
60
- }
61
- GRAPHQL
62
- end
63
- end
64
- end
65
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ class Fragment
5
+ fragment :Action, <<~GRAPHQL
6
+ fragment Action on Action {
7
+ id
8
+ altId
9
+ actionCategory {
10
+ name
11
+ value
12
+ }
13
+ actionCategoryId
14
+ standaloneAction
15
+ status
16
+ relativeStatus
17
+ archived
18
+ locations {
19
+ id
20
+ name
21
+ objectId
22
+ }
23
+ name
24
+ description
25
+ assignedTo {
26
+ id
27
+ name
28
+ email
29
+ }
30
+ createdAt {
31
+ dateTime
32
+ timeZone
33
+ }
34
+ updatedAt {
35
+ dateTime
36
+ timeZone
37
+ }
38
+ dueDate {
39
+ dateTime
40
+ timeZone
41
+ }
42
+ completedAt {
43
+ dateTime
44
+ timeZone
45
+ }
46
+ completer {
47
+ name
48
+ email
49
+ }
50
+ linkedResources {
51
+ id
52
+ page {
53
+ ... on BasePageInterface {
54
+ id
55
+ name
56
+ uid
57
+ }
58
+ }
59
+ }
60
+ }
61
+ GRAPHQL
62
+ end
63
+ end
64
+ end
65
+ end
@@ -1,17 +1,17 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- class Fragment
5
- fragment :ActionCategory, <<~GRAPHQL
6
- fragment on Category {
7
- id
8
- name
9
- value
10
- archived
11
- weight
12
- }
13
- GRAPHQL
14
- end
15
- end
16
- end
17
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ class Fragment
5
+ fragment :ActionCategory, <<~GRAPHQL
6
+ fragment ActionCategory on Category {
7
+ id
8
+ name
9
+ value
10
+ archived
11
+ weight
12
+ }
13
+ GRAPHQL
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,20 +1,20 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- class Fragment
5
- fragment :ContractorEntity, <<~GRAPHQL
6
- fragment on ContractorEntity {
7
- id
8
- externalId
9
- name
10
- schemaId
11
- active
12
- approved
13
- associatedPeopleIds
14
- leadContractorIds
15
- }
16
- GRAPHQL
17
- end
18
- end
19
- end
20
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ class Fragment
5
+ fragment :ContractorEntity, <<~GRAPHQL
6
+ fragment ContractorEntity on ContractorEntity {
7
+ id
8
+ externalId
9
+ name
10
+ schemaId
11
+ active
12
+ approved
13
+ associatedPeopleIds
14
+ leadContractorIds
15
+ }
16
+ GRAPHQL
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,38 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ class Fragment
5
+ # `RegisterPresetView#fieldConfigurations` returns a FieldConfigurationUnion.
6
+ # Selections can't be made directly on a union (GraphQL error: "Selections can't
7
+ # be made directly on unions"); the common fields live on FieldConfigurationInterface,
8
+ # which every union member implements, so they're pulled via an inline fragment on
9
+ # the interface rather than repeated per concrete type. Verified against the real
10
+ # frontend fragment (RegisterDataGrid/api/fieldConfigurationFragments/
11
+ # fieldConfigurationFields.graphql) — kept to the interface surface + the same three
12
+ # concrete-type extras it selects; other concrete types fall back to interface-only
13
+ # fields (matches the frontend, which doesn't cover every member either).
14
+ fragment :FieldConfiguration, <<~GRAPHQL
15
+ fragment FieldConfiguration on FieldConfigurationUnion {
16
+ __typename
17
+ ... on FieldConfigurationInterface {
18
+ id
19
+ key
20
+ name
21
+ dataFieldLabel
22
+ weight
23
+ }
24
+ ... on DateFieldConfiguration {
25
+ showTime
26
+ }
27
+ ... on DisplayLocationsFieldConfiguration {
28
+ mode
29
+ }
30
+ ... on PageNameFieldConfiguration {
31
+ displayUid
32
+ }
33
+ }
34
+ GRAPHQL
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,34 @@
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ class Fragment
5
+ # Fields for a Force object, including all bindings needed for scripting.
6
+ #
7
+ # `Force.bindings` is `[BindingInterface]` (verified in the backend:
8
+ # `app/graphql/types/force_type.rb` + `types/forces/binding_interface.rb`), so its common
9
+ # fields are selected directly on the interface — no per-member inline fragments needed.
10
+ #
11
+ # ★ The interface exposes ONLY `name` and `referenceId` (+ `reference` per concrete type):
12
+ # there is NO `id` on a binding. The previous selection asked for `id` inside
13
+ # `... on DataFieldBinding` / `... on SectionBinding`, which makes the whole query invalid.
14
+ # Read/write asymmetry to be aware of: `WorkflowEditBindingInput` / `removeBinding` DO
15
+ # require a binding `id`, so `Force::Binding#id` (and `BindingCollection#delete!`) has no
16
+ # readable source for it — tracked as a shape-asymmetry finding, not fixable client-side.
17
+ fragment :ForceFields, <<~GRAPHQL
18
+ fragment ForceFields on Force {
19
+ id
20
+ name
21
+ script
22
+ customScript
23
+ globalBindingIds
24
+ bindings {
25
+ __typename
26
+ name
27
+ referenceId
28
+ }
29
+ }
30
+ GRAPHQL
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,53 +1,53 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- class Fragment
5
- fragment :LocationDraft, <<~GRAPHQL
6
- fragment on Draft {
7
- id
8
- name
9
- notes
10
- committed
11
- createdAt
12
- ok
13
- conflictingIds
14
- results {
15
- ok
16
- command {
17
- id
18
- state
19
- __typename
20
- ... on LocationInsertCommand {
21
- nodeId name parentId insertBefore classificationIds
22
- }
23
- ... on LocationUpdateCommand {
24
- nodeId newId
25
- newName: name
26
- newClassificationIds: classificationIds
27
- }
28
- ... on LocationArchiveCommand { nodeId }
29
- ... on LocationUnarchiveCommand { nodeId }
30
- ... on LocationMoveCommand { nodeId parentId insertBefore }
31
- ... on LocationReorderCommand { parentId orderedIds }
32
- }
33
- error {
34
- message
35
- conflictingIds
36
- validationErrors {
37
- property
38
- error
39
- message
40
- }
41
- }
42
- }
43
- commands {
44
- id
45
- state
46
- __typename
47
- }
48
- }
49
- GRAPHQL
50
- end
51
- end
52
- end
53
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ class Fragment
5
+ fragment :LocationDraft, <<~GRAPHQL
6
+ fragment LocationDraft on Draft {
7
+ id
8
+ name
9
+ notes
10
+ committed
11
+ createdAt
12
+ ok
13
+ conflictingIds
14
+ results {
15
+ ok
16
+ command {
17
+ id
18
+ state
19
+ __typename
20
+ ... on LocationInsertCommand {
21
+ nodeId name parentId insertBefore classificationIds
22
+ }
23
+ ... on LocationUpdateCommand {
24
+ nodeId newId
25
+ newName: name
26
+ newClassificationIds: classificationIds
27
+ }
28
+ ... on LocationArchiveCommand { nodeId }
29
+ ... on LocationUnarchiveCommand { nodeId }
30
+ ... on LocationMoveCommand { nodeId parentId insertBefore }
31
+ ... on LocationReorderCommand { parentId orderedIds }
32
+ }
33
+ error {
34
+ message
35
+ conflictingIds
36
+ validationErrors {
37
+ property
38
+ error
39
+ message
40
+ }
41
+ }
42
+ }
43
+ commands {
44
+ id
45
+ state
46
+ __typename
47
+ }
48
+ }
49
+ GRAPHQL
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,26 +1,26 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- class Fragment
5
- fragment :LocationNode, <<~GRAPHQL
6
- fragment on LocationNodeInterface {
7
- id
8
- name
9
- weight
10
- archived
11
- archivedToken
12
- parent {
13
- id
14
- name
15
- }
16
- classifications {
17
- active
18
- id
19
- name
20
- }
21
- }
22
- GRAPHQL
23
- end
24
- end
25
- end
26
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ class Fragment
5
+ fragment :LocationNode, <<~GRAPHQL
6
+ fragment LocationNode on LocationNodeInterface {
7
+ id
8
+ name
9
+ weight
10
+ archived
11
+ archivedToken
12
+ parent {
13
+ id
14
+ name
15
+ }
16
+ classifications {
17
+ active
18
+ id
19
+ name
20
+ }
21
+ }
22
+ GRAPHQL
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,19 +1,19 @@
1
- module Ecoportal
2
- module API
3
- class GraphQL
4
- class Fragment
5
- fragment :LocationsError, <<~GRAPHQL
6
- fragment on LocationsError {
7
- message
8
- conflictingIds
9
- validationErrors {
10
- property
11
- error
12
- message
13
- }
14
- }
15
- GRAPHQL
16
- end
17
- end
18
- end
19
- end
1
+ module Ecoportal
2
+ module API
3
+ class GraphQL
4
+ class Fragment
5
+ fragment :LocationsError, <<~GRAPHQL
6
+ fragment LocationsError on LocationsError {
7
+ message
8
+ conflictingIds
9
+ validationErrors {
10
+ property
11
+ error
12
+ message
13
+ }
14
+ }
15
+ GRAPHQL
16
+ end
17
+ end
18
+ end
19
+ end