hatchet-sdk 0.0.0 → 0.1.0.pre.alpha

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 (443) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -2
  3. data/CLAUDE.md +61 -4
  4. data/INTEGRATION_TESTING.md +176 -0
  5. data/LICENSE.txt +1 -1
  6. data/REST_API_GENERATION.md +257 -0
  7. data/Rakefile +9 -0
  8. data/Rakefile.rest +133 -0
  9. data/config/openapi_generator_config.json +31 -0
  10. data/lib/hatchet/clients/rest/.gitignore +39 -0
  11. data/lib/hatchet/clients/rest/.gitlab-ci.yml +26 -0
  12. data/lib/hatchet/clients/rest/.openapi-generator/FILES +420 -0
  13. data/lib/hatchet/clients/rest/.openapi-generator/VERSION +1 -0
  14. data/lib/hatchet/clients/rest/.openapi-generator-ignore +23 -0
  15. data/lib/hatchet/clients/rest/.rspec +2 -0
  16. data/lib/hatchet/clients/rest/.rubocop.yml +148 -0
  17. data/lib/hatchet/clients/rest/.travis.yml +11 -0
  18. data/lib/hatchet/clients/rest/Gemfile +9 -0
  19. data/lib/hatchet/clients/rest/README.md +420 -0
  20. data/lib/hatchet/clients/rest/Rakefile +10 -0
  21. data/lib/hatchet/clients/rest/docs/APIError.md +24 -0
  22. data/lib/hatchet/clients/rest/docs/APIErrors.md +18 -0
  23. data/lib/hatchet/clients/rest/docs/APIMeta.md +30 -0
  24. data/lib/hatchet/clients/rest/docs/APIMetaAuth.md +18 -0
  25. data/lib/hatchet/clients/rest/docs/APIMetaIntegration.md +20 -0
  26. data/lib/hatchet/clients/rest/docs/APIMetaPosthog.md +20 -0
  27. data/lib/hatchet/clients/rest/docs/APIResourceMeta.md +22 -0
  28. data/lib/hatchet/clients/rest/docs/APIToken.md +22 -0
  29. data/lib/hatchet/clients/rest/docs/APITokenApi.md +235 -0
  30. data/lib/hatchet/clients/rest/docs/AcceptInviteRequest.md +18 -0
  31. data/lib/hatchet/clients/rest/docs/BulkCreateEventRequest.md +18 -0
  32. data/lib/hatchet/clients/rest/docs/CancelEventRequest.md +18 -0
  33. data/lib/hatchet/clients/rest/docs/ConcurrencyLimitStrategy.md +15 -0
  34. data/lib/hatchet/clients/rest/docs/CreateAPITokenRequest.md +20 -0
  35. data/lib/hatchet/clients/rest/docs/CreateAPITokenResponse.md +18 -0
  36. data/lib/hatchet/clients/rest/docs/CreateCronWorkflowTriggerRequest.md +26 -0
  37. data/lib/hatchet/clients/rest/docs/CreateEventRequest.md +26 -0
  38. data/lib/hatchet/clients/rest/docs/CreatePullRequestFromStepRun.md +18 -0
  39. data/lib/hatchet/clients/rest/docs/CreateSNSIntegrationRequest.md +18 -0
  40. data/lib/hatchet/clients/rest/docs/CreateTenantAlertEmailGroupRequest.md +18 -0
  41. data/lib/hatchet/clients/rest/docs/CreateTenantInviteRequest.md +20 -0
  42. data/lib/hatchet/clients/rest/docs/CreateTenantRequest.md +24 -0
  43. data/lib/hatchet/clients/rest/docs/CronWorkflows.md +40 -0
  44. data/lib/hatchet/clients/rest/docs/CronWorkflowsList.md +20 -0
  45. data/lib/hatchet/clients/rest/docs/CronWorkflowsMethod.md +15 -0
  46. data/lib/hatchet/clients/rest/docs/CronWorkflowsOrderByField.md +15 -0
  47. data/lib/hatchet/clients/rest/docs/DefaultApi.md +602 -0
  48. data/lib/hatchet/clients/rest/docs/Event.md +28 -0
  49. data/lib/hatchet/clients/rest/docs/EventApi.md +809 -0
  50. data/lib/hatchet/clients/rest/docs/EventData.md +18 -0
  51. data/lib/hatchet/clients/rest/docs/EventKeyList.md +20 -0
  52. data/lib/hatchet/clients/rest/docs/EventList.md +20 -0
  53. data/lib/hatchet/clients/rest/docs/EventOrderByDirection.md +15 -0
  54. data/lib/hatchet/clients/rest/docs/EventOrderByField.md +15 -0
  55. data/lib/hatchet/clients/rest/docs/EventUpdateCancel200Response.md +18 -0
  56. data/lib/hatchet/clients/rest/docs/EventWorkflowRunSummary.md +28 -0
  57. data/lib/hatchet/clients/rest/docs/Events.md +20 -0
  58. data/lib/hatchet/clients/rest/docs/FilterApi.md +402 -0
  59. data/lib/hatchet/clients/rest/docs/GetStepRunDiffResponse.md +18 -0
  60. data/lib/hatchet/clients/rest/docs/GithubApi.md +73 -0
  61. data/lib/hatchet/clients/rest/docs/HealthcheckApi.md +129 -0
  62. data/lib/hatchet/clients/rest/docs/InfoGetVersion200Response.md +18 -0
  63. data/lib/hatchet/clients/rest/docs/Job.md +30 -0
  64. data/lib/hatchet/clients/rest/docs/JobRun.md +48 -0
  65. data/lib/hatchet/clients/rest/docs/JobRunStatus.md +15 -0
  66. data/lib/hatchet/clients/rest/docs/ListAPITokensResponse.md +20 -0
  67. data/lib/hatchet/clients/rest/docs/ListPullRequestsResponse.md +18 -0
  68. data/lib/hatchet/clients/rest/docs/ListSNSIntegrations.md +20 -0
  69. data/lib/hatchet/clients/rest/docs/ListSlackWebhooks.md +20 -0
  70. data/lib/hatchet/clients/rest/docs/LogApi.md +171 -0
  71. data/lib/hatchet/clients/rest/docs/LogLine.md +22 -0
  72. data/lib/hatchet/clients/rest/docs/LogLineLevel.md +15 -0
  73. data/lib/hatchet/clients/rest/docs/LogLineList.md +20 -0
  74. data/lib/hatchet/clients/rest/docs/LogLineOrderByDirection.md +15 -0
  75. data/lib/hatchet/clients/rest/docs/LogLineOrderByField.md +15 -0
  76. data/lib/hatchet/clients/rest/docs/MetadataApi.md +203 -0
  77. data/lib/hatchet/clients/rest/docs/PaginationResponse.md +22 -0
  78. data/lib/hatchet/clients/rest/docs/PullRequest.md +32 -0
  79. data/lib/hatchet/clients/rest/docs/PullRequestState.md +15 -0
  80. data/lib/hatchet/clients/rest/docs/QueueMetrics.md +22 -0
  81. data/lib/hatchet/clients/rest/docs/RateLimit.md +28 -0
  82. data/lib/hatchet/clients/rest/docs/RateLimitList.md +20 -0
  83. data/lib/hatchet/clients/rest/docs/RateLimitOrderByDirection.md +15 -0
  84. data/lib/hatchet/clients/rest/docs/RateLimitOrderByField.md +15 -0
  85. data/lib/hatchet/clients/rest/docs/RateLimitsApi.md +94 -0
  86. data/lib/hatchet/clients/rest/docs/RecentStepRuns.md +30 -0
  87. data/lib/hatchet/clients/rest/docs/RejectInviteRequest.md +18 -0
  88. data/lib/hatchet/clients/rest/docs/ReplayEventRequest.md +18 -0
  89. data/lib/hatchet/clients/rest/docs/ReplayWorkflowRunsRequest.md +18 -0
  90. data/lib/hatchet/clients/rest/docs/ReplayWorkflowRunsResponse.md +18 -0
  91. data/lib/hatchet/clients/rest/docs/RerunStepRunRequest.md +18 -0
  92. data/lib/hatchet/clients/rest/docs/SNSApi.md +235 -0
  93. data/lib/hatchet/clients/rest/docs/SNSIntegration.md +24 -0
  94. data/lib/hatchet/clients/rest/docs/ScheduleWorkflowRunRequest.md +24 -0
  95. data/lib/hatchet/clients/rest/docs/ScheduledRunStatus.md +15 -0
  96. data/lib/hatchet/clients/rest/docs/ScheduledWorkflows.md +44 -0
  97. data/lib/hatchet/clients/rest/docs/ScheduledWorkflowsList.md +20 -0
  98. data/lib/hatchet/clients/rest/docs/ScheduledWorkflowsMethod.md +15 -0
  99. data/lib/hatchet/clients/rest/docs/ScheduledWorkflowsOrderByField.md +15 -0
  100. data/lib/hatchet/clients/rest/docs/SemaphoreSlots.md +28 -0
  101. data/lib/hatchet/clients/rest/docs/SlackApi.md +156 -0
  102. data/lib/hatchet/clients/rest/docs/SlackWebhook.md +28 -0
  103. data/lib/hatchet/clients/rest/docs/Step.md +32 -0
  104. data/lib/hatchet/clients/rest/docs/StepRun.md +68 -0
  105. data/lib/hatchet/clients/rest/docs/StepRunApi.md +560 -0
  106. data/lib/hatchet/clients/rest/docs/StepRunArchive.md +50 -0
  107. data/lib/hatchet/clients/rest/docs/StepRunArchiveList.md +20 -0
  108. data/lib/hatchet/clients/rest/docs/StepRunDiff.md +22 -0
  109. data/lib/hatchet/clients/rest/docs/StepRunEvent.md +36 -0
  110. data/lib/hatchet/clients/rest/docs/StepRunEventList.md +20 -0
  111. data/lib/hatchet/clients/rest/docs/StepRunEventReason.md +15 -0
  112. data/lib/hatchet/clients/rest/docs/StepRunEventSeverity.md +15 -0
  113. data/lib/hatchet/clients/rest/docs/StepRunStatus.md +15 -0
  114. data/lib/hatchet/clients/rest/docs/TaskApi.md +566 -0
  115. data/lib/hatchet/clients/rest/docs/Tenant.md +30 -0
  116. data/lib/hatchet/clients/rest/docs/TenantAlertEmailGroup.md +20 -0
  117. data/lib/hatchet/clients/rest/docs/TenantAlertEmailGroupList.md +20 -0
  118. data/lib/hatchet/clients/rest/docs/TenantAlertingSettings.md +30 -0
  119. data/lib/hatchet/clients/rest/docs/TenantApi.md +1362 -0
  120. data/lib/hatchet/clients/rest/docs/TenantInvite.md +28 -0
  121. data/lib/hatchet/clients/rest/docs/TenantInviteList.md +20 -0
  122. data/lib/hatchet/clients/rest/docs/TenantList.md +20 -0
  123. data/lib/hatchet/clients/rest/docs/TenantMember.md +24 -0
  124. data/lib/hatchet/clients/rest/docs/TenantMemberList.md +20 -0
  125. data/lib/hatchet/clients/rest/docs/TenantMemberRole.md +15 -0
  126. data/lib/hatchet/clients/rest/docs/TenantQueueMetrics.md +22 -0
  127. data/lib/hatchet/clients/rest/docs/TenantResource.md +15 -0
  128. data/lib/hatchet/clients/rest/docs/TenantResourceLimit.md +30 -0
  129. data/lib/hatchet/clients/rest/docs/TenantResourcePolicy.md +18 -0
  130. data/lib/hatchet/clients/rest/docs/TenantStepRunQueueMetrics.md +18 -0
  131. data/lib/hatchet/clients/rest/docs/TenantUIVersion.md +15 -0
  132. data/lib/hatchet/clients/rest/docs/TenantVersion.md +15 -0
  133. data/lib/hatchet/clients/rest/docs/TriggerWorkflowRunRequest.md +20 -0
  134. data/lib/hatchet/clients/rest/docs/UpdateTenantAlertEmailGroupRequest.md +18 -0
  135. data/lib/hatchet/clients/rest/docs/UpdateTenantInviteRequest.md +18 -0
  136. data/lib/hatchet/clients/rest/docs/UpdateTenantRequest.md +34 -0
  137. data/lib/hatchet/clients/rest/docs/UpdateWorkerRequest.md +18 -0
  138. data/lib/hatchet/clients/rest/docs/User.md +28 -0
  139. data/lib/hatchet/clients/rest/docs/UserApi.md +805 -0
  140. data/lib/hatchet/clients/rest/docs/UserChangePasswordRequest.md +20 -0
  141. data/lib/hatchet/clients/rest/docs/UserLoginRequest.md +20 -0
  142. data/lib/hatchet/clients/rest/docs/UserRegisterRequest.md +22 -0
  143. data/lib/hatchet/clients/rest/docs/UserTenantMembershipsList.md +20 -0
  144. data/lib/hatchet/clients/rest/docs/UserTenantPublic.md +20 -0
  145. data/lib/hatchet/clients/rest/docs/V1CancelTaskRequest.md +20 -0
  146. data/lib/hatchet/clients/rest/docs/V1CancelledTasks.md +18 -0
  147. data/lib/hatchet/clients/rest/docs/V1CreateFilterRequest.md +24 -0
  148. data/lib/hatchet/clients/rest/docs/V1DagChildren.md +20 -0
  149. data/lib/hatchet/clients/rest/docs/V1Event.md +36 -0
  150. data/lib/hatchet/clients/rest/docs/V1EventList.md +20 -0
  151. data/lib/hatchet/clients/rest/docs/V1EventTriggeredRun.md +20 -0
  152. data/lib/hatchet/clients/rest/docs/V1EventWorkflowRunSummary.md +26 -0
  153. data/lib/hatchet/clients/rest/docs/V1Filter.md +28 -0
  154. data/lib/hatchet/clients/rest/docs/V1FilterList.md +20 -0
  155. data/lib/hatchet/clients/rest/docs/V1LogLine.md +28 -0
  156. data/lib/hatchet/clients/rest/docs/V1LogLineLevel.md +15 -0
  157. data/lib/hatchet/clients/rest/docs/V1LogLineList.md +20 -0
  158. data/lib/hatchet/clients/rest/docs/V1ReplayTaskRequest.md +20 -0
  159. data/lib/hatchet/clients/rest/docs/V1ReplayedTasks.md +18 -0
  160. data/lib/hatchet/clients/rest/docs/V1TaskEvent.md +38 -0
  161. data/lib/hatchet/clients/rest/docs/V1TaskEventList.md +20 -0
  162. data/lib/hatchet/clients/rest/docs/V1TaskEventType.md +15 -0
  163. data/lib/hatchet/clients/rest/docs/V1TaskFilter.md +26 -0
  164. data/lib/hatchet/clients/rest/docs/V1TaskPointMetric.md +22 -0
  165. data/lib/hatchet/clients/rest/docs/V1TaskPointMetrics.md +18 -0
  166. data/lib/hatchet/clients/rest/docs/V1TaskRunMetric.md +20 -0
  167. data/lib/hatchet/clients/rest/docs/V1TaskRunStatus.md +15 -0
  168. data/lib/hatchet/clients/rest/docs/V1TaskStatus.md +15 -0
  169. data/lib/hatchet/clients/rest/docs/V1TaskSummary.md +72 -0
  170. data/lib/hatchet/clients/rest/docs/V1TaskSummaryList.md +20 -0
  171. data/lib/hatchet/clients/rest/docs/V1TaskTiming.md +46 -0
  172. data/lib/hatchet/clients/rest/docs/V1TaskTimingList.md +20 -0
  173. data/lib/hatchet/clients/rest/docs/V1TriggerWorkflowRunRequest.md +24 -0
  174. data/lib/hatchet/clients/rest/docs/V1UpdateFilterRequest.md +22 -0
  175. data/lib/hatchet/clients/rest/docs/V1WorkflowRun.md +46 -0
  176. data/lib/hatchet/clients/rest/docs/V1WorkflowRunDetails.md +26 -0
  177. data/lib/hatchet/clients/rest/docs/V1WorkflowRunDisplayName.md +20 -0
  178. data/lib/hatchet/clients/rest/docs/V1WorkflowRunDisplayNameList.md +20 -0
  179. data/lib/hatchet/clients/rest/docs/V1WorkflowType.md +15 -0
  180. data/lib/hatchet/clients/rest/docs/WebhookWorker.md +22 -0
  181. data/lib/hatchet/clients/rest/docs/WebhookWorkerCreateRequest.md +22 -0
  182. data/lib/hatchet/clients/rest/docs/WebhookWorkerCreateResponse.md +18 -0
  183. data/lib/hatchet/clients/rest/docs/WebhookWorkerCreated.md +24 -0
  184. data/lib/hatchet/clients/rest/docs/WebhookWorkerListResponse.md +20 -0
  185. data/lib/hatchet/clients/rest/docs/WebhookWorkerRequest.md +22 -0
  186. data/lib/hatchet/clients/rest/docs/WebhookWorkerRequestListResponse.md +18 -0
  187. data/lib/hatchet/clients/rest/docs/WebhookWorkerRequestMethod.md +15 -0
  188. data/lib/hatchet/clients/rest/docs/Worker.md +48 -0
  189. data/lib/hatchet/clients/rest/docs/WorkerApi.md +234 -0
  190. data/lib/hatchet/clients/rest/docs/WorkerLabel.md +22 -0
  191. data/lib/hatchet/clients/rest/docs/WorkerList.md +20 -0
  192. data/lib/hatchet/clients/rest/docs/WorkerRuntimeInfo.md +26 -0
  193. data/lib/hatchet/clients/rest/docs/WorkerRuntimeSDKs.md +15 -0
  194. data/lib/hatchet/clients/rest/docs/WorkerType.md +15 -0
  195. data/lib/hatchet/clients/rest/docs/Workflow.md +32 -0
  196. data/lib/hatchet/clients/rest/docs/WorkflowApi.md +1480 -0
  197. data/lib/hatchet/clients/rest/docs/WorkflowConcurrency.md +22 -0
  198. data/lib/hatchet/clients/rest/docs/WorkflowKind.md +15 -0
  199. data/lib/hatchet/clients/rest/docs/WorkflowList.md +22 -0
  200. data/lib/hatchet/clients/rest/docs/WorkflowMetrics.md +20 -0
  201. data/lib/hatchet/clients/rest/docs/WorkflowRun.md +48 -0
  202. data/lib/hatchet/clients/rest/docs/WorkflowRunApi.md +477 -0
  203. data/lib/hatchet/clients/rest/docs/WorkflowRunList.md +20 -0
  204. data/lib/hatchet/clients/rest/docs/WorkflowRunOrderByDirection.md +15 -0
  205. data/lib/hatchet/clients/rest/docs/WorkflowRunOrderByField.md +15 -0
  206. data/lib/hatchet/clients/rest/docs/WorkflowRunShape.md +50 -0
  207. data/lib/hatchet/clients/rest/docs/WorkflowRunShapeItemForWorkflowRunDetails.md +24 -0
  208. data/lib/hatchet/clients/rest/docs/WorkflowRunStatus.md +15 -0
  209. data/lib/hatchet/clients/rest/docs/WorkflowRunTriggeredBy.md +26 -0
  210. data/lib/hatchet/clients/rest/docs/WorkflowRunsApi.md +572 -0
  211. data/lib/hatchet/clients/rest/docs/WorkflowRunsCancelRequest.md +18 -0
  212. data/lib/hatchet/clients/rest/docs/WorkflowRunsMetrics.md +18 -0
  213. data/lib/hatchet/clients/rest/docs/WorkflowRunsMetricsCounts.md +28 -0
  214. data/lib/hatchet/clients/rest/docs/WorkflowTag.md +20 -0
  215. data/lib/hatchet/clients/rest/docs/WorkflowTriggerCronRef.md +20 -0
  216. data/lib/hatchet/clients/rest/docs/WorkflowTriggerEventRef.md +20 -0
  217. data/lib/hatchet/clients/rest/docs/WorkflowTriggers.md +26 -0
  218. data/lib/hatchet/clients/rest/docs/WorkflowUpdateRequest.md +18 -0
  219. data/lib/hatchet/clients/rest/docs/WorkflowVersion.md +40 -0
  220. data/lib/hatchet/clients/rest/docs/WorkflowVersionDefinition.md +18 -0
  221. data/lib/hatchet/clients/rest/docs/WorkflowVersionMeta.md +26 -0
  222. data/lib/hatchet/clients/rest/docs/WorkflowWorkersCount.md +22 -0
  223. data/lib/hatchet/clients/rest/git_push.sh +57 -0
  224. data/lib/hatchet/clients/rest/hatchet-sdk-rest.gemspec +41 -0
  225. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/api_token_api.rb +242 -0
  226. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/default_api.rb +622 -0
  227. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/event_api.rb +836 -0
  228. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/filter_api.rb +449 -0
  229. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/github_api.rb +107 -0
  230. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/healthcheck_api.rb +132 -0
  231. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/log_api.rb +182 -0
  232. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/metadata_api.rb +193 -0
  233. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/rate_limits_api.rb +108 -0
  234. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/slack_api.rb +164 -0
  235. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/sns_api.rb +242 -0
  236. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/step_run_api.rb +615 -0
  237. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/task_api.rb +599 -0
  238. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/tenant_api.rb +1327 -0
  239. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/user_api.rb +729 -0
  240. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/worker_api.rb +246 -0
  241. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/workflow_api.rb +1654 -0
  242. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/workflow_run_api.rb +540 -0
  243. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/workflow_runs_api.rb +614 -0
  244. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api_client.rb +437 -0
  245. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api_error.rb +58 -0
  246. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/configuration.rb +399 -0
  247. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/accept_invite_request.rb +255 -0
  248. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_error.rb +268 -0
  249. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_errors.rb +239 -0
  250. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_meta.rb +279 -0
  251. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_meta_auth.rb +223 -0
  252. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_meta_integration.rb +265 -0
  253. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_meta_posthog.rb +231 -0
  254. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_resource_meta.rb +310 -0
  255. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_token.rb +300 -0
  256. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/bulk_create_event_request.rb +239 -0
  257. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/cancel_event_request.rb +239 -0
  258. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/concurrency_limit_strategy.rb +42 -0
  259. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_api_token_request.rb +257 -0
  260. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_api_token_response.rb +238 -0
  261. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_cron_workflow_trigger_request.rb +352 -0
  262. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_event_request.rb +295 -0
  263. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_pull_request_from_step_run.rb +237 -0
  264. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_sns_integration_request.rb +238 -0
  265. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_tenant_alert_email_group_request.rb +240 -0
  266. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_tenant_invite_request.rb +287 -0
  267. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_tenant_request.rb +307 -0
  268. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/cron_workflows.rb +509 -0
  269. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/cron_workflows_list.rb +231 -0
  270. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/cron_workflows_method.rb +40 -0
  271. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/cron_workflows_order_by_field.rb +40 -0
  272. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event.rb +321 -0
  273. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_data.rb +238 -0
  274. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_key_list.rb +231 -0
  275. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_list.rb +231 -0
  276. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_order_by_direction.rb +40 -0
  277. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_order_by_field.rb +39 -0
  278. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_update_cancel200_response.rb +222 -0
  279. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_workflow_run_summary.rb +271 -0
  280. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/events.rb +266 -0
  281. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/get_step_run_diff_response.rb +239 -0
  282. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/info_get_version200_response.rb +237 -0
  283. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/job.rb +363 -0
  284. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/job_run.rb +464 -0
  285. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/job_run_status.rb +44 -0
  286. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/list_api_tokens_response.rb +231 -0
  287. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/list_pull_requests_response.rb +239 -0
  288. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/list_slack_webhooks.rb +265 -0
  289. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/list_sns_integrations.rb +265 -0
  290. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/log_line.rb +292 -0
  291. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/log_line_level.rb +42 -0
  292. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/log_line_list.rb +231 -0
  293. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/log_line_order_by_direction.rb +40 -0
  294. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/log_line_order_by_field.rb +39 -0
  295. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/pagination_response.rb +241 -0
  296. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/pull_request.rb +441 -0
  297. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/pull_request_state.rb +40 -0
  298. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/queue_metrics.rb +292 -0
  299. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/rate_limit.rb +373 -0
  300. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/rate_limit_list.rb +231 -0
  301. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/rate_limit_order_by_direction.rb +40 -0
  302. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/rate_limit_order_by_field.rb +41 -0
  303. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/recent_step_runs.rb +365 -0
  304. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/reject_invite_request.rb +255 -0
  305. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/replay_event_request.rb +239 -0
  306. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/replay_workflow_runs_request.rb +239 -0
  307. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/replay_workflow_runs_response.rb +239 -0
  308. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/rerun_step_run_request.rb +237 -0
  309. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/schedule_workflow_run_request.rb +326 -0
  310. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/scheduled_run_status.rb +45 -0
  311. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/scheduled_workflows.rb +538 -0
  312. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/scheduled_workflows_list.rb +231 -0
  313. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/scheduled_workflows_method.rb +40 -0
  314. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/scheduled_workflows_order_by_field.rb +40 -0
  315. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/semaphore_slots.rb +343 -0
  316. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/slack_webhook.rb +372 -0
  317. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/sns_integration.rb +301 -0
  318. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step.rb +374 -0
  319. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run.rb +556 -0
  320. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_archive.rb +432 -0
  321. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_archive_list.rb +231 -0
  322. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_diff.rb +289 -0
  323. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_event.rb +442 -0
  324. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_event_list.rb +231 -0
  325. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_event_reason.rb +55 -0
  326. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_event_severity.rb +41 -0
  327. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_status.rb +47 -0
  328. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant.rb +370 -0
  329. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_alert_email_group.rb +266 -0
  330. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_alert_email_group_list.rb +231 -0
  331. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_alerting_settings.rb +314 -0
  332. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_invite.rb +377 -0
  333. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_invite_list.rb +231 -0
  334. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_list.rb +231 -0
  335. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_member.rb +323 -0
  336. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_member_list.rb +231 -0
  337. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_member_role.rb +41 -0
  338. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_queue_metrics.rb +243 -0
  339. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_resource.rb +45 -0
  340. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_resource_limit.rb +370 -0
  341. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_resource_policy.rb +240 -0
  342. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_step_run_queue_metrics.rb +220 -0
  343. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_ui_version.rb +40 -0
  344. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_version.rb +40 -0
  345. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/trigger_workflow_run_request.rb +246 -0
  346. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/update_tenant_alert_email_group_request.rb +240 -0
  347. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/update_tenant_invite_request.rb +260 -0
  348. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/update_tenant_request.rb +323 -0
  349. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/update_worker_request.rb +221 -0
  350. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user.rb +321 -0
  351. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user_change_password_request.rb +265 -0
  352. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user_login_request.rb +265 -0
  353. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user_register_request.rb +292 -0
  354. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user_tenant_memberships_list.rb +231 -0
  355. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user_tenant_public.rb +248 -0
  356. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_cancel_task_request.rb +232 -0
  357. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_cancelled_tasks.rb +223 -0
  358. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_create_filter_request.rb +320 -0
  359. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_dag_children.rb +231 -0
  360. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_event.rb +380 -0
  361. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_event_list.rb +231 -0
  362. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_event_triggered_run.rb +266 -0
  363. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_event_workflow_run_summary.rb +346 -0
  364. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_filter.rb +390 -0
  365. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_filter_list.rb +231 -0
  366. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_log_line.rb +344 -0
  367. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_log_line_level.rb +42 -0
  368. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_log_line_list.rb +231 -0
  369. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_replay_task_request.rb +232 -0
  370. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_replayed_tasks.rb +223 -0
  371. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_event.rb +419 -0
  372. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_event_list.rb +231 -0
  373. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_event_type.rb +58 -0
  374. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_filter.rb +279 -0
  375. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_point_metric.rb +289 -0
  376. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_point_metrics.rb +222 -0
  377. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_run_metric.rb +285 -0
  378. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_run_status.rb +43 -0
  379. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_status.rb +43 -0
  380. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_summary.rb +812 -0
  381. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_summary_list.rb +266 -0
  382. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_timing.rb +581 -0
  383. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_timing_list.rb +266 -0
  384. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_trigger_workflow_run_request.rb +283 -0
  385. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_update_filter_request.rb +241 -0
  386. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_workflow_run.rb +544 -0
  387. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_workflow_run_details.rb +331 -0
  388. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_workflow_run_display_name.rb +263 -0
  389. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_workflow_run_display_name_list.rb +266 -0
  390. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_workflow_type.rb +40 -0
  391. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker.rb +291 -0
  392. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_create_request.rb +294 -0
  393. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_create_response.rb +220 -0
  394. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_created.rb +318 -0
  395. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_list_response.rb +231 -0
  396. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_request.rb +314 -0
  397. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_request_list_response.rb +223 -0
  398. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_request_method.rb +41 -0
  399. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker.rb +489 -0
  400. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker_label.rb +274 -0
  401. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker_list.rb +231 -0
  402. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker_runtime_info.rb +278 -0
  403. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker_runtime_sdks.rb +41 -0
  404. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker_type.rb +41 -0
  405. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow.rb +346 -0
  406. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_concurrency.rb +314 -0
  407. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_kind.rb +41 -0
  408. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_list.rb +240 -0
  409. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_metrics.rb +231 -0
  410. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run.rb +524 -0
  411. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_list.rb +231 -0
  412. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_order_by_direction.rb +40 -0
  413. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_order_by_field.rb +42 -0
  414. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_shape.rb +533 -0
  415. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_shape_item_for_workflow_run_details.rb +353 -0
  416. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_status.rb +45 -0
  417. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_triggered_by.rb +273 -0
  418. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_runs_cancel_request.rb +239 -0
  419. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_runs_metrics.rb +220 -0
  420. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_runs_metrics_counts.rb +265 -0
  421. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_tag.rb +265 -0
  422. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_trigger_cron_ref.rb +229 -0
  423. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_trigger_event_ref.rb +229 -0
  424. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_triggers.rb +260 -0
  425. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_update_request.rb +221 -0
  426. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_version.rb +392 -0
  427. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_version_definition.rb +238 -0
  428. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_version_meta.rb +325 -0
  429. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_workers_count.rb +238 -0
  430. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/version.rb +15 -0
  431. data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest.rb +241 -0
  432. data/lib/hatchet/clients/rest/spec/spec_helper.rb +111 -0
  433. data/lib/hatchet/clients/rest.rb +126 -0
  434. data/lib/hatchet/clients.rb +71 -0
  435. data/lib/hatchet/config.rb +482 -0
  436. data/lib/hatchet/features/events.rb +265 -0
  437. data/lib/hatchet/features/runs.rb +423 -0
  438. data/lib/hatchet/version.rb +1 -1
  439. data/lib/hatchet-sdk.rb +74 -3
  440. data/scripts/generate.sh +167 -0
  441. data/scripts/generate_api.rb +174 -0
  442. data/sig/hatchet-sdk.rbs +525 -1
  443. metadata +491 -1
@@ -0,0 +1,126 @@
1
+ # frozen_string_literal: true
2
+ # typed: strict
3
+
4
+ require 'fileutils'
5
+ require 'rbconfig'
6
+
7
+ # Integration file for generated Hatchet REST API client
8
+ # This file loads the generated REST client and makes it available under the Hatchet::Clients::Rest namespace
9
+
10
+ begin
11
+ # Set up load paths for the generated client
12
+ rest_lib_path = File.expand_path("rest/lib", __dir__)
13
+ $LOAD_PATH.unshift(rest_lib_path) unless $LOAD_PATH.include?(rest_lib_path)
14
+
15
+ # Create an alias so hatchet-sdk-rest/ paths resolve to the actual location
16
+ # This is a bit of a hack, but necessary because the generator expects gem-style paths
17
+ hatchet_sdk_rest_base = File.expand_path("rest/lib/hatchet-sdk-rest", __dir__)
18
+ $LOAD_PATH.unshift(hatchet_sdk_rest_base) unless $LOAD_PATH.include?(hatchet_sdk_rest_base)
19
+
20
+ # Create a symlink in the load path to make hatchet-sdk-rest/ paths work
21
+ fake_gem_path = File.expand_path("rest/lib/hatchet-sdk-rest/hatchet-sdk-rest", __dir__)
22
+ unless File.exist?(fake_gem_path)
23
+ FileUtils.mkdir_p(File.dirname(fake_gem_path))
24
+ # On Unix systems, create a symlink; on Windows, copy the files
25
+ if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
26
+ require 'fileutils'
27
+ FileUtils.cp_r(hatchet_sdk_rest_base, fake_gem_path)
28
+ else
29
+ File.symlink(hatchet_sdk_rest_base, fake_gem_path)
30
+ end
31
+ end
32
+
33
+ # Load the generated REST client
34
+ require_relative "rest/lib/hatchet-sdk-rest"
35
+
36
+ # The generated client creates classes under HatchetSdkRest module
37
+ # We need to alias them to our desired namespace structure
38
+ module Hatchet
39
+ module Clients
40
+ module Rest
41
+ # Re-export the main classes from the generated client
42
+ ApiClient = ::HatchetSdkRest::ApiClient
43
+ ApiError = ::HatchetSdkRest::ApiError
44
+
45
+ # Enhanced Configuration class with Hatchet integration
46
+ class Configuration < ::HatchetSdkRest::Configuration
47
+ # Create a Configuration instance from a Hatchet::Config
48
+ #
49
+ # @param hatchet_config [Hatchet::Config] The main Hatchet configuration
50
+ # @return [Configuration] Configured REST client configuration
51
+ def self.from_hatchet_config(hatchet_config)
52
+ config = new
53
+ config.access_token = hatchet_config.token
54
+
55
+ # Extract host from server_url
56
+ if hatchet_config.server_url && !hatchet_config.server_url.empty?
57
+ config.host = hatchet_config.server_url.gsub(/^https?:\/\//, '').split('/').first
58
+ config.scheme = hatchet_config.server_url.start_with?('https') ? 'https' : 'http'
59
+ end
60
+
61
+ # Set timeout if available
62
+ if hatchet_config.listener_v2_timeout
63
+ config.timeout = hatchet_config.listener_v2_timeout / 1000.0 # Convert ms to seconds
64
+ end
65
+
66
+ config
67
+ end
68
+ end
69
+
70
+ # Re-export API classes
71
+ WorkflowApi = ::HatchetSdkRest::WorkflowApi
72
+ EventApi = ::HatchetSdkRest::EventApi
73
+ StepRunApi = ::HatchetSdkRest::StepRunApi
74
+ WorkflowRunApi = ::HatchetSdkRest::WorkflowRunApi
75
+ WorkflowRunsApi = ::HatchetSdkRest::WorkflowRunsApi
76
+ TenantApi = ::HatchetSdkRest::TenantApi
77
+ UserApi = ::HatchetSdkRest::UserApi
78
+ WorkerApi = ::HatchetSdkRest::WorkerApi
79
+
80
+ # Re-export commonly used model classes
81
+ CreateEventRequest = ::HatchetSdkRest::CreateEventRequest
82
+ Event = ::HatchetSdkRest::Event
83
+
84
+ # Add more API classes and models as needed - you can extend this list
85
+ # with any other generated API classes or models you want to expose
86
+ end
87
+ end
88
+ end
89
+
90
+ rescue LoadError => e
91
+ # If the generated client files are not available, define an empty module
92
+ # This allows the main SDK to load without errors even before generation
93
+ warn "REST client not fully loaded: #{e.message}" if ENV["DEBUG"]
94
+
95
+ module Hatchet
96
+ module Clients
97
+ module Rest
98
+ # Placeholder classes that will raise helpful errors
99
+ class ApiClient
100
+ def initialize(*)
101
+ raise LoadError, "REST client not generated. Run `rake api:generate` to generate it."
102
+ end
103
+ end
104
+
105
+ class Configuration
106
+ def self.from_hatchet_config(*)
107
+ raise LoadError, "REST client not generated. Run `rake api:generate` to generate it."
108
+ end
109
+ end
110
+
111
+ # Placeholder model classes
112
+ class CreateEventRequest
113
+ def initialize(*)
114
+ raise LoadError, "REST client not generated. Run `rake api:generate` to generate it."
115
+ end
116
+ end
117
+
118
+ class Event
119
+ def initialize(*)
120
+ raise LoadError, "REST client not generated. Run `rake api:generate` to generate it."
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+ # typed: strict
3
+
4
+ # Hatchet clients module
5
+ # This module provides access to different client types (REST, gRPC, etc.)
6
+
7
+ module Hatchet
8
+ # Client implementations for different protocols
9
+ module Clients
10
+ # Load REST client if available
11
+ begin
12
+ require_relative "clients/rest"
13
+ rescue LoadError
14
+ # REST client not generated yet - this is expected initially
15
+ # Run `rake api:generate` to generate the REST client
16
+ end
17
+
18
+ # Factory methods for creating pre-configured clients
19
+ class << self
20
+ # Create a REST API client using the provided Hatchet configuration
21
+ #
22
+ # @param config [Hatchet::Config] The main Hatchet configuration
23
+ # @return [Hatchet::Clients::Rest::ApiClient] Configured REST API client
24
+ # @raise [LoadError] if REST client hasn't been generated yet
25
+ #
26
+ # @example Create a REST client
27
+ # config = Hatchet::Config.new(token: "your-jwt-token")
28
+ # rest_client = Hatchet::Clients.rest_client(config)
29
+ # workflows_api = Hatchet::Clients::Rest::WorkflowApi.new(rest_client)
30
+ def rest_client(config)
31
+ unless rest_available?
32
+ raise LoadError, "REST client not available. Run `rake api:generate` to generate it from the OpenAPI spec."
33
+ end
34
+
35
+ rest_config = Rest::Configuration.from_hatchet_config(config)
36
+ Rest::ApiClient.new(rest_config)
37
+ end
38
+
39
+ # Check if REST client is available
40
+ #
41
+ # @return [Boolean] true if REST client has been generated and is available
42
+ def rest_available?
43
+ return false unless defined?(Hatchet::Clients::Rest)
44
+
45
+ # Check if this is the real implementation or just the placeholder
46
+ # The placeholder Configuration.from_hatchet_config raises LoadError
47
+ begin
48
+ # Try to access a method that should exist in the real implementation
49
+ # If it's the placeholder, this will raise LoadError
50
+ Hatchet::Clients::Rest::Configuration.method(:from_hatchet_config)
51
+
52
+ # Try creating a dummy configuration to ensure the real client is loaded
53
+ dummy_config = Struct.new(:token, :server_url, :listener_v2_timeout).new("test", "", nil)
54
+ Hatchet::Clients::Rest::Configuration.from_hatchet_config(dummy_config)
55
+ true
56
+ rescue LoadError
57
+ false
58
+ end
59
+ end
60
+
61
+ # List available client types
62
+ #
63
+ # @return [Array<Symbol>] List of available client types
64
+ def available_clients
65
+ clients = []
66
+ clients << :rest if rest_available?
67
+ clients
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,482 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "logger"
4
+ require "json"
5
+ require "base64"
6
+
7
+ module Hatchet
8
+ # TLS configuration for client connections
9
+ #
10
+ # @example Basic TLS setup
11
+ # tls = TLSConfig.new(strategy: "tls", server_name: "api.hatchet.com")
12
+ #
13
+ # @example Custom certificate setup
14
+ # tls = TLSConfig.new(
15
+ # strategy: "mtls",
16
+ # cert_file: "/path/to/client.crt",
17
+ # key_file: "/path/to/client.key",
18
+ # root_ca_file: "/path/to/ca.crt"
19
+ # )
20
+ class TLSConfig
21
+ # @!attribute strategy
22
+ # @return [String] TLS strategy ("tls", "mtls", "insecure")
23
+ # @!attribute cert_file
24
+ # @return [String, nil] Path to client certificate file for mTLS
25
+ # @!attribute key_file
26
+ # @return [String, nil] Path to client private key file for mTLS
27
+ # @!attribute root_ca_file
28
+ # @return [String, nil] Path to root CA certificate file
29
+ # @!attribute server_name
30
+ # @return [String] Server name for TLS verification
31
+ attr_accessor :strategy, :cert_file, :key_file, :root_ca_file, :server_name
32
+
33
+ # Initialize TLS configuration
34
+ #
35
+ # @param options [Hash] TLS configuration options
36
+ # @option options [String] :strategy TLS strategy (default: "tls")
37
+ # @option options [String] :cert_file Path to client certificate file
38
+ # @option options [String] :key_file Path to client private key file
39
+ # @option options [String] :root_ca_file Path to root CA certificate file
40
+ # @option options [String] :server_name Server name for TLS verification
41
+ def initialize(**options)
42
+ @strategy = options[:strategy] || env_var("HATCHET_CLIENT_TLS_STRATEGY") || "tls"
43
+ @cert_file = options[:cert_file] || env_var("HATCHET_CLIENT_TLS_CERT_FILE")
44
+ @key_file = options[:key_file] || env_var("HATCHET_CLIENT_TLS_KEY_FILE")
45
+ @root_ca_file = options[:root_ca_file] || env_var("HATCHET_CLIENT_TLS_ROOT_CA_FILE")
46
+ @server_name = options[:server_name] || env_var("HATCHET_CLIENT_TLS_SERVER_NAME") || ""
47
+ end
48
+
49
+ private
50
+
51
+ def env_var(name)
52
+ ENV[name]
53
+ end
54
+ end
55
+
56
+ # Healthcheck configuration for worker health monitoring
57
+ #
58
+ # @example Enable healthcheck on custom port
59
+ # healthcheck = HealthcheckConfig.new(enabled: true, port: 8080)
60
+ class HealthcheckConfig
61
+ # @!attribute port
62
+ # @return [Integer] Port number for healthcheck endpoint
63
+ # @!attribute enabled
64
+ # @return [Boolean] Whether healthcheck is enabled
65
+ attr_accessor :port, :enabled
66
+
67
+ # Initialize healthcheck configuration
68
+ #
69
+ # @param options [Hash] Healthcheck configuration options
70
+ # @option options [Integer] :port Port number for healthcheck endpoint (default: 8001)
71
+ # @option options [Boolean] :enabled Whether healthcheck is enabled (default: false)
72
+ def initialize(**options)
73
+ @port = parse_int(options[:port] || env_var("HATCHET_CLIENT_WORKER_HEALTHCHECK_PORT")) || 8001
74
+ @enabled = parse_bool(options[:enabled] || env_var("HATCHET_CLIENT_WORKER_HEALTHCHECK_ENABLED")) || false
75
+ end
76
+
77
+ private
78
+
79
+ def env_var(name)
80
+ ENV[name]
81
+ end
82
+
83
+ def parse_int(value)
84
+ return nil if value.nil?
85
+ return value if value.is_a?(Integer)
86
+ return nil if value.respond_to?(:empty?) && value.empty?
87
+
88
+ Integer(value)
89
+ rescue ArgumentError
90
+ nil
91
+ end
92
+
93
+ def parse_bool(value)
94
+ return nil if value.nil?
95
+ return value if [true, false].include?(value)
96
+
97
+ %w[true 1 yes on].include?(value.to_s.downcase)
98
+ end
99
+ end
100
+
101
+ # OpenTelemetry configuration for observability
102
+ #
103
+ # @example Exclude sensitive attributes from telemetry
104
+ # otel = OpenTelemetryConfig.new(excluded_attributes: ["password", "api_key"])
105
+ class OpenTelemetryConfig
106
+ # @!attribute excluded_attributes
107
+ # @return [Array<String>] List of attribute names to exclude from telemetry
108
+ attr_accessor :excluded_attributes
109
+
110
+ # Initialize OpenTelemetry configuration
111
+ #
112
+ # @param options [Hash] OpenTelemetry configuration options
113
+ # @option options [Array<String>] :excluded_attributes List of attribute names to exclude from telemetry
114
+ def initialize(**options)
115
+ @excluded_attributes = options[:excluded_attributes] ||
116
+ parse_json_array(
117
+ env_var("HATCHET_CLIENT_OPENTELEMETRY_EXCLUDED_ATTRIBUTES")
118
+ ) || []
119
+ end
120
+
121
+ private
122
+
123
+ def env_var(name)
124
+ ENV[name]
125
+ end
126
+
127
+ def parse_json_array(value)
128
+ return nil if value.nil? || value.empty?
129
+
130
+ JSON.parse(value)
131
+ rescue JSON::ParserError
132
+ nil
133
+ end
134
+ end
135
+
136
+ # Configuration class for Hatchet client settings
137
+ #
138
+ # This class manages all configuration options for the Hatchet client, including
139
+ # token authentication, connection settings, and various client behaviors.
140
+ # Configuration can be set via constructor options, environment variables, or
141
+ # extracted from JWT tokens.
142
+ #
143
+ # @example Basic configuration
144
+ # config = Config.new(token: "your-jwt-token")
145
+ #
146
+ # @example Full configuration with all options
147
+ # config = Config.new(
148
+ # token: "your-jwt-token",
149
+ # host_port: "localhost:7070",
150
+ # server_url: "https://api.hatchet.com",
151
+ # namespace: "production",
152
+ # worker_preset_labels: { "env" => "prod", "region" => "us-east-1" }
153
+ # )
154
+ #
155
+ # @example Configuration via environment variables
156
+ # ENV["HATCHET_CLIENT_TOKEN"] = "your-jwt-token"
157
+ # ENV["HATCHET_CLIENT_HOST_PORT"] = "localhost:7070"
158
+ # config = Config.new # Will load from environment
159
+ class Config
160
+ DEFAULT_HOST_PORT = "localhost:7070"
161
+ DEFAULT_SERVER_URL = "https://app.dev.hatchet-tools.com"
162
+ DEFAULT_GRPC_MAX_MESSAGE_LENGTH = 4 * 1024 * 1024 # 4MB
163
+
164
+ ENV_FILE_NAMES = [".env", ".env.hatchet", ".env.dev", ".env.local"].freeze
165
+
166
+ # @!attribute token
167
+ # @return [String] JWT token for authentication
168
+ # @!attribute tenant_id
169
+ # @return [String] Tenant ID (extracted from JWT 'sub' field if not provided)
170
+ # @!attribute host_port
171
+ # @return [String] gRPC server host and port
172
+ # @!attribute server_url
173
+ # @return [String] Server URL for HTTP requests
174
+ # @!attribute namespace
175
+ # @return [String] Namespace prefix for resource names
176
+ # @!attribute logger
177
+ # @return [Logger] Logger instance
178
+ # @!attribute listener_v2_timeout
179
+ # @return [Integer, nil] Timeout for listener v2 in milliseconds
180
+ # @!attribute grpc_max_recv_message_length
181
+ # @return [Integer] Maximum gRPC receive message length in bytes
182
+ # @!attribute grpc_max_send_message_length
183
+ # @return [Integer] Maximum gRPC send message length in bytes
184
+ # @!attribute worker_preset_labels
185
+ # @return [Hash<String, String>] Hash of preset labels for workers
186
+ # @!attribute enable_force_kill_sync_threads
187
+ # @return [Boolean] Enable force killing of sync threads
188
+ # @!attribute enable_thread_pool_monitoring
189
+ # @return [Boolean] Enable thread pool monitoring
190
+ # @!attribute terminate_worker_after_num_tasks
191
+ # @return [Integer, nil] Terminate worker after this many tasks
192
+ # @!attribute disable_log_capture
193
+ # @return [Boolean] Disable log capture
194
+ # @!attribute grpc_enable_fork_support
195
+ # @return [Boolean] Enable gRPC fork support
196
+ # @!attribute tls_config
197
+ # @return [TLSConfig] TLS configuration
198
+ # @!attribute healthcheck
199
+ # @return [HealthcheckConfig] Healthcheck configuration
200
+ # @!attribute otel
201
+ # @return [OpenTelemetryConfig] OpenTelemetry configuration
202
+ attr_accessor :token, :host_port, :server_url, :namespace,
203
+ :logger, :listener_v2_timeout, :grpc_max_recv_message_length,
204
+ :grpc_max_send_message_length, :worker_preset_labels,
205
+ :enable_force_kill_sync_threads, :enable_thread_pool_monitoring,
206
+ :terminate_worker_after_num_tasks, :disable_log_capture,
207
+ :grpc_enable_fork_support, :tls_config, :healthcheck, :otel
208
+
209
+ attr_reader :tenant_id
210
+
211
+ # Initialize a new configuration instance
212
+ #
213
+ # Configuration values are loaded in the following priority order:
214
+ # 1. Explicit constructor options (highest priority)
215
+ # 2. Environment variables (HATCHET_CLIENT_*)
216
+ # 3. JWT token payload (for tenant_id from 'sub' field)
217
+ # 4. Default values (lowest priority)
218
+ #
219
+ # @param options [Hash] Configuration options
220
+ # @option options [String] :token JWT token for authentication (required)
221
+ # @option options [String] :host_port gRPC server host and port (default: "localhost:7070")
222
+ # @option options [String] :server_url Server URL for HTTP requests (default: "https://app.dev.hatchet-tools.com")
223
+ # @option options [String] :namespace Namespace prefix for resource names (default: "")
224
+ # @option options [Logger] :logger Custom logger instance (default: Logger.new($stdout))
225
+ # @option options [Integer] :listener_v2_timeout Timeout for listener v2 in milliseconds
226
+ # @option options [Integer] :grpc_max_recv_message_length Maximum gRPC receive message length in bytes (default: 4MB)
227
+ # @option options [Integer] :grpc_max_send_message_length Maximum gRPC send message length in bytes (default: 4MB)
228
+ # @option options [Hash<String, String>] :worker_preset_labels Hash of preset labels for workers
229
+ # @option options [Boolean] :enable_force_kill_sync_threads Enable force killing of sync threads (default: false)
230
+ # @option options [Boolean] :enable_thread_pool_monitoring Enable thread pool monitoring (default: false)
231
+ # @option options [Integer] :terminate_worker_after_num_tasks Terminate worker after this many tasks
232
+ # @option options [Boolean] :disable_log_capture Disable log capture (default: false)
233
+ # @option options [Boolean] :grpc_enable_fork_support Enable gRPC fork support (default: false)
234
+ # @option options [TLSConfig] :tls_config Custom TLS configuration
235
+ # @option options [HealthcheckConfig] :healthcheck Custom healthcheck configuration
236
+ # @option options [OpenTelemetryConfig] :otel Custom OpenTelemetry configuration
237
+ #
238
+ # @raise [Error] if token is missing, empty, or not a valid JWT
239
+ def initialize(**options)
240
+ load_env_files
241
+ @explicitly_set = options.keys.to_set
242
+
243
+ @token = options[:token] || env_var("HATCHET_CLIENT_TOKEN") || ""
244
+ @host_port = options[:host_port] || env_var("HATCHET_CLIENT_HOST_PORT") || DEFAULT_HOST_PORT
245
+ @server_url = options[:server_url] || env_var("HATCHET_CLIENT_SERVER_URL") || DEFAULT_SERVER_URL
246
+ @namespace = options[:namespace] || env_var("HATCHET_CLIENT_NAMESPACE") || ""
247
+ @logger = options[:logger] || Logger.new($stdout)
248
+
249
+ @listener_v2_timeout = parse_int(options[:listener_v2_timeout] || env_var("HATCHET_CLIENT_LISTENER_V2_TIMEOUT"))
250
+ @grpc_max_recv_message_length = parse_int(
251
+ options[:grpc_max_recv_message_length] ||
252
+ env_var("HATCHET_CLIENT_GRPC_MAX_RECV_MESSAGE_LENGTH")
253
+ ) || DEFAULT_GRPC_MAX_MESSAGE_LENGTH
254
+ @grpc_max_send_message_length = parse_int(
255
+ options[:grpc_max_send_message_length] ||
256
+ env_var("HATCHET_CLIENT_GRPC_MAX_SEND_MESSAGE_LENGTH")
257
+ ) || DEFAULT_GRPC_MAX_MESSAGE_LENGTH
258
+
259
+ @worker_preset_labels = options[:worker_preset_labels] ||
260
+ parse_hash(env_var("HATCHET_CLIENT_WORKER_PRESET_LABELS")) || {}
261
+ @enable_force_kill_sync_threads = parse_bool(
262
+ options[:enable_force_kill_sync_threads] ||
263
+ env_var("HATCHET_CLIENT_ENABLE_FORCE_KILL_SYNC_THREADS")
264
+ ) || false
265
+ @enable_thread_pool_monitoring = parse_bool(
266
+ options[:enable_thread_pool_monitoring] ||
267
+ env_var("HATCHET_CLIENT_ENABLE_THREAD_POOL_MONITORING")
268
+ ) || false
269
+ @terminate_worker_after_num_tasks = parse_int(
270
+ options[:terminate_worker_after_num_tasks] ||
271
+ env_var("HATCHET_CLIENT_TERMINATE_WORKER_AFTER_NUM_TASKS")
272
+ )
273
+ @disable_log_capture = parse_bool(
274
+ options[:disable_log_capture] ||
275
+ env_var("HATCHET_CLIENT_DISABLE_LOG_CAPTURE")
276
+ ) || false
277
+ @grpc_enable_fork_support = parse_bool(
278
+ options[:grpc_enable_fork_support] ||
279
+ env_var("HATCHET_CLIENT_GRPC_ENABLE_FORK_SUPPORT")
280
+ ) || false
281
+
282
+ # Initialize nested configurations
283
+ @tls_config = options[:tls_config] || TLSConfig.new
284
+ @healthcheck = options[:healthcheck] || HealthcheckConfig.new
285
+ @otel = options[:otel] || OpenTelemetryConfig.new
286
+
287
+ # Initialize tenant_id from JWT token
288
+ @tenant_id = ""
289
+
290
+ validate!
291
+ apply_token_defaults if valid_jwt_token?
292
+ apply_address_defaults if valid_jwt_token?
293
+ normalize_namespace!
294
+ end
295
+
296
+ def validate!
297
+ raise Error, "Hatchet Token is required. Please set HATCHET_CLIENT_TOKEN in your environment." if token.nil? || token.empty?
298
+
299
+ return if valid_jwt_token?
300
+
301
+ raise Error,
302
+ "Hatchet Token must be a valid JWT."
303
+ end
304
+
305
+ # Apply namespace prefix to a resource name
306
+ #
307
+ # @param resource_name [String, nil] The resource name to namespace
308
+ # @param namespace_override [String, nil] Optional namespace to use instead of the configured one
309
+ # @return [String, nil] The namespaced resource name, or nil if resource_name is nil
310
+ #
311
+ # @example Apply default namespace
312
+ # config = Config.new(token: "token", namespace: "prod")
313
+ # config.apply_namespace("workflow") #=> "prod_workflow"
314
+ #
315
+ # @example Apply custom namespace
316
+ # config.apply_namespace("workflow", namespace_override: "staging_") #=> "staging_workflow"
317
+ #
318
+ # @example Skip namespace if already present
319
+ # config.apply_namespace("prod_workflow") #=> "prod_workflow"
320
+ def apply_namespace(resource_name, namespace_override: nil)
321
+ return resource_name if resource_name.nil?
322
+
323
+ namespace_to_use = namespace_override || namespace
324
+ return resource_name if namespace_to_use.empty?
325
+ return resource_name if resource_name.start_with?(namespace_to_use)
326
+
327
+ "#{namespace_to_use}#{resource_name}"
328
+ end
329
+
330
+ def hash
331
+ to_h.hash
332
+ end
333
+
334
+ # Convert configuration to a hash representation
335
+ #
336
+ # @return [Hash<Symbol, Object>] Hash containing all configuration values
337
+ def to_h
338
+ {
339
+ token: token,
340
+ host_port: host_port,
341
+ server_url: server_url,
342
+ namespace: namespace,
343
+ listener_v2_timeout: listener_v2_timeout,
344
+ grpc_max_recv_message_length: grpc_max_recv_message_length,
345
+ grpc_max_send_message_length: grpc_max_send_message_length,
346
+ worker_preset_labels: worker_preset_labels,
347
+ enable_force_kill_sync_threads: enable_force_kill_sync_threads,
348
+ enable_thread_pool_monitoring: enable_thread_pool_monitoring,
349
+ terminate_worker_after_num_tasks: terminate_worker_after_num_tasks,
350
+ disable_log_capture: disable_log_capture,
351
+ grpc_enable_fork_support: grpc_enable_fork_support
352
+ }
353
+ end
354
+
355
+ private
356
+
357
+ def valid_jwt_token?
358
+ !token.nil? && !token.empty? && token.start_with?("ey")
359
+ end
360
+
361
+ def apply_token_defaults
362
+ # tenant_id is only set from JWT token, not from environment variables or parameters
363
+ extracted_tenant_id = extract_tenant_id_from_jwt
364
+ @tenant_id = extracted_tenant_id || ""
365
+ end
366
+
367
+ def apply_address_defaults
368
+ jwt_server_url, jwt_host_port = extract_addresses_from_jwt
369
+
370
+ @host_port = jwt_host_port if jwt_host_port && !explicitly_set?(:host_port)
371
+ @server_url = jwt_server_url if jwt_server_url && !explicitly_set?(:server_url)
372
+
373
+ # Set TLS server name if not already set
374
+ return unless tls_config.server_name.empty?
375
+
376
+ tls_config.server_name = host_port.split(":").first || "localhost"
377
+ end
378
+
379
+ def normalize_namespace!
380
+ return if namespace.empty?
381
+
382
+ @namespace = namespace.downcase
383
+ @namespace += "_" unless @namespace.end_with?("_")
384
+ end
385
+
386
+ def load_env_files
387
+ ENV_FILE_NAMES.each do |env_file|
388
+ next unless File.exist?(env_file)
389
+
390
+ File.foreach(env_file) do |line|
391
+ line = line.strip
392
+ next if line.empty? || line.start_with?("#")
393
+
394
+ key, value = line.split("=", 2)
395
+ next unless key && value
396
+
397
+ ENV[key] ||= value.gsub(/\A['"]|['"]\z/, "") # Remove surrounding quotes
398
+ end
399
+ end
400
+ end
401
+
402
+ def env_var(name)
403
+ ENV[name]
404
+ end
405
+
406
+ def parse_int(value)
407
+ return nil if value.nil?
408
+ return value if value.is_a?(Integer)
409
+ return nil if value.respond_to?(:empty?) && value.empty?
410
+
411
+ Integer(value)
412
+ rescue ArgumentError
413
+ nil
414
+ end
415
+
416
+ def parse_bool(value)
417
+ return nil if value.nil?
418
+ return value if [true, false].include?(value)
419
+
420
+ %w[true 1 yes on].include?(value.to_s.downcase)
421
+ end
422
+
423
+ def parse_hash(value)
424
+ return nil if value.nil? || value.empty?
425
+
426
+ # Simple key=value,key2=value2 parsing
427
+ result = {}
428
+ value.split(",").each do |pair|
429
+ key, val = pair.split("=", 2)
430
+ result[key.strip] = val&.strip if key && val
431
+ end
432
+ result
433
+ rescue StandardError
434
+ nil
435
+ end
436
+
437
+ def explicitly_set?(attr)
438
+ @explicitly_set.include?(attr)
439
+ end
440
+
441
+ def extract_tenant_id_from_jwt
442
+ return nil unless valid_jwt_token?
443
+
444
+ payload = decode_jwt_payload
445
+ payload&.dig("sub")
446
+ rescue StandardError
447
+ nil
448
+ end
449
+
450
+ def extract_addresses_from_jwt
451
+ return [nil, nil] unless valid_jwt_token?
452
+
453
+ payload = decode_jwt_payload
454
+ return [nil, nil] unless payload
455
+
456
+ server_url = payload["server_url"]
457
+ grpc_broadcast_address = payload["grpc_broadcast_address"]
458
+
459
+ [server_url, grpc_broadcast_address]
460
+ rescue StandardError
461
+ [nil, nil]
462
+ end
463
+
464
+ def decode_jwt_payload
465
+ return nil unless valid_jwt_token?
466
+
467
+ # JWT has three parts separated by dots: header.payload.signature
468
+ parts = token.split(".")
469
+ return nil unless parts.length == 3
470
+
471
+ # Decode the payload (second part)
472
+ payload_part = parts[1]
473
+ # Add padding if needed for Base64 decoding
474
+ payload_part += "=" * (4 - payload_part.length % 4) if payload_part.length % 4 != 0
475
+
476
+ decoded_payload = Base64.decode64(payload_part)
477
+ JSON.parse(decoded_payload)
478
+ rescue StandardError
479
+ nil
480
+ end
481
+ end
482
+ end