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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +3 -2
- data/CLAUDE.md +61 -4
- data/INTEGRATION_TESTING.md +176 -0
- data/LICENSE.txt +1 -1
- data/REST_API_GENERATION.md +257 -0
- data/Rakefile +9 -0
- data/Rakefile.rest +133 -0
- data/config/openapi_generator_config.json +31 -0
- data/lib/hatchet/clients/rest/.gitignore +39 -0
- data/lib/hatchet/clients/rest/.gitlab-ci.yml +26 -0
- data/lib/hatchet/clients/rest/.openapi-generator/FILES +420 -0
- data/lib/hatchet/clients/rest/.openapi-generator/VERSION +1 -0
- data/lib/hatchet/clients/rest/.openapi-generator-ignore +23 -0
- data/lib/hatchet/clients/rest/.rspec +2 -0
- data/lib/hatchet/clients/rest/.rubocop.yml +148 -0
- data/lib/hatchet/clients/rest/.travis.yml +11 -0
- data/lib/hatchet/clients/rest/Gemfile +9 -0
- data/lib/hatchet/clients/rest/README.md +420 -0
- data/lib/hatchet/clients/rest/Rakefile +10 -0
- data/lib/hatchet/clients/rest/docs/APIError.md +24 -0
- data/lib/hatchet/clients/rest/docs/APIErrors.md +18 -0
- data/lib/hatchet/clients/rest/docs/APIMeta.md +30 -0
- data/lib/hatchet/clients/rest/docs/APIMetaAuth.md +18 -0
- data/lib/hatchet/clients/rest/docs/APIMetaIntegration.md +20 -0
- data/lib/hatchet/clients/rest/docs/APIMetaPosthog.md +20 -0
- data/lib/hatchet/clients/rest/docs/APIResourceMeta.md +22 -0
- data/lib/hatchet/clients/rest/docs/APIToken.md +22 -0
- data/lib/hatchet/clients/rest/docs/APITokenApi.md +235 -0
- data/lib/hatchet/clients/rest/docs/AcceptInviteRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/BulkCreateEventRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/CancelEventRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/ConcurrencyLimitStrategy.md +15 -0
- data/lib/hatchet/clients/rest/docs/CreateAPITokenRequest.md +20 -0
- data/lib/hatchet/clients/rest/docs/CreateAPITokenResponse.md +18 -0
- data/lib/hatchet/clients/rest/docs/CreateCronWorkflowTriggerRequest.md +26 -0
- data/lib/hatchet/clients/rest/docs/CreateEventRequest.md +26 -0
- data/lib/hatchet/clients/rest/docs/CreatePullRequestFromStepRun.md +18 -0
- data/lib/hatchet/clients/rest/docs/CreateSNSIntegrationRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/CreateTenantAlertEmailGroupRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/CreateTenantInviteRequest.md +20 -0
- data/lib/hatchet/clients/rest/docs/CreateTenantRequest.md +24 -0
- data/lib/hatchet/clients/rest/docs/CronWorkflows.md +40 -0
- data/lib/hatchet/clients/rest/docs/CronWorkflowsList.md +20 -0
- data/lib/hatchet/clients/rest/docs/CronWorkflowsMethod.md +15 -0
- data/lib/hatchet/clients/rest/docs/CronWorkflowsOrderByField.md +15 -0
- data/lib/hatchet/clients/rest/docs/DefaultApi.md +602 -0
- data/lib/hatchet/clients/rest/docs/Event.md +28 -0
- data/lib/hatchet/clients/rest/docs/EventApi.md +809 -0
- data/lib/hatchet/clients/rest/docs/EventData.md +18 -0
- data/lib/hatchet/clients/rest/docs/EventKeyList.md +20 -0
- data/lib/hatchet/clients/rest/docs/EventList.md +20 -0
- data/lib/hatchet/clients/rest/docs/EventOrderByDirection.md +15 -0
- data/lib/hatchet/clients/rest/docs/EventOrderByField.md +15 -0
- data/lib/hatchet/clients/rest/docs/EventUpdateCancel200Response.md +18 -0
- data/lib/hatchet/clients/rest/docs/EventWorkflowRunSummary.md +28 -0
- data/lib/hatchet/clients/rest/docs/Events.md +20 -0
- data/lib/hatchet/clients/rest/docs/FilterApi.md +402 -0
- data/lib/hatchet/clients/rest/docs/GetStepRunDiffResponse.md +18 -0
- data/lib/hatchet/clients/rest/docs/GithubApi.md +73 -0
- data/lib/hatchet/clients/rest/docs/HealthcheckApi.md +129 -0
- data/lib/hatchet/clients/rest/docs/InfoGetVersion200Response.md +18 -0
- data/lib/hatchet/clients/rest/docs/Job.md +30 -0
- data/lib/hatchet/clients/rest/docs/JobRun.md +48 -0
- data/lib/hatchet/clients/rest/docs/JobRunStatus.md +15 -0
- data/lib/hatchet/clients/rest/docs/ListAPITokensResponse.md +20 -0
- data/lib/hatchet/clients/rest/docs/ListPullRequestsResponse.md +18 -0
- data/lib/hatchet/clients/rest/docs/ListSNSIntegrations.md +20 -0
- data/lib/hatchet/clients/rest/docs/ListSlackWebhooks.md +20 -0
- data/lib/hatchet/clients/rest/docs/LogApi.md +171 -0
- data/lib/hatchet/clients/rest/docs/LogLine.md +22 -0
- data/lib/hatchet/clients/rest/docs/LogLineLevel.md +15 -0
- data/lib/hatchet/clients/rest/docs/LogLineList.md +20 -0
- data/lib/hatchet/clients/rest/docs/LogLineOrderByDirection.md +15 -0
- data/lib/hatchet/clients/rest/docs/LogLineOrderByField.md +15 -0
- data/lib/hatchet/clients/rest/docs/MetadataApi.md +203 -0
- data/lib/hatchet/clients/rest/docs/PaginationResponse.md +22 -0
- data/lib/hatchet/clients/rest/docs/PullRequest.md +32 -0
- data/lib/hatchet/clients/rest/docs/PullRequestState.md +15 -0
- data/lib/hatchet/clients/rest/docs/QueueMetrics.md +22 -0
- data/lib/hatchet/clients/rest/docs/RateLimit.md +28 -0
- data/lib/hatchet/clients/rest/docs/RateLimitList.md +20 -0
- data/lib/hatchet/clients/rest/docs/RateLimitOrderByDirection.md +15 -0
- data/lib/hatchet/clients/rest/docs/RateLimitOrderByField.md +15 -0
- data/lib/hatchet/clients/rest/docs/RateLimitsApi.md +94 -0
- data/lib/hatchet/clients/rest/docs/RecentStepRuns.md +30 -0
- data/lib/hatchet/clients/rest/docs/RejectInviteRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/ReplayEventRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/ReplayWorkflowRunsRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/ReplayWorkflowRunsResponse.md +18 -0
- data/lib/hatchet/clients/rest/docs/RerunStepRunRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/SNSApi.md +235 -0
- data/lib/hatchet/clients/rest/docs/SNSIntegration.md +24 -0
- data/lib/hatchet/clients/rest/docs/ScheduleWorkflowRunRequest.md +24 -0
- data/lib/hatchet/clients/rest/docs/ScheduledRunStatus.md +15 -0
- data/lib/hatchet/clients/rest/docs/ScheduledWorkflows.md +44 -0
- data/lib/hatchet/clients/rest/docs/ScheduledWorkflowsList.md +20 -0
- data/lib/hatchet/clients/rest/docs/ScheduledWorkflowsMethod.md +15 -0
- data/lib/hatchet/clients/rest/docs/ScheduledWorkflowsOrderByField.md +15 -0
- data/lib/hatchet/clients/rest/docs/SemaphoreSlots.md +28 -0
- data/lib/hatchet/clients/rest/docs/SlackApi.md +156 -0
- data/lib/hatchet/clients/rest/docs/SlackWebhook.md +28 -0
- data/lib/hatchet/clients/rest/docs/Step.md +32 -0
- data/lib/hatchet/clients/rest/docs/StepRun.md +68 -0
- data/lib/hatchet/clients/rest/docs/StepRunApi.md +560 -0
- data/lib/hatchet/clients/rest/docs/StepRunArchive.md +50 -0
- data/lib/hatchet/clients/rest/docs/StepRunArchiveList.md +20 -0
- data/lib/hatchet/clients/rest/docs/StepRunDiff.md +22 -0
- data/lib/hatchet/clients/rest/docs/StepRunEvent.md +36 -0
- data/lib/hatchet/clients/rest/docs/StepRunEventList.md +20 -0
- data/lib/hatchet/clients/rest/docs/StepRunEventReason.md +15 -0
- data/lib/hatchet/clients/rest/docs/StepRunEventSeverity.md +15 -0
- data/lib/hatchet/clients/rest/docs/StepRunStatus.md +15 -0
- data/lib/hatchet/clients/rest/docs/TaskApi.md +566 -0
- data/lib/hatchet/clients/rest/docs/Tenant.md +30 -0
- data/lib/hatchet/clients/rest/docs/TenantAlertEmailGroup.md +20 -0
- data/lib/hatchet/clients/rest/docs/TenantAlertEmailGroupList.md +20 -0
- data/lib/hatchet/clients/rest/docs/TenantAlertingSettings.md +30 -0
- data/lib/hatchet/clients/rest/docs/TenantApi.md +1362 -0
- data/lib/hatchet/clients/rest/docs/TenantInvite.md +28 -0
- data/lib/hatchet/clients/rest/docs/TenantInviteList.md +20 -0
- data/lib/hatchet/clients/rest/docs/TenantList.md +20 -0
- data/lib/hatchet/clients/rest/docs/TenantMember.md +24 -0
- data/lib/hatchet/clients/rest/docs/TenantMemberList.md +20 -0
- data/lib/hatchet/clients/rest/docs/TenantMemberRole.md +15 -0
- data/lib/hatchet/clients/rest/docs/TenantQueueMetrics.md +22 -0
- data/lib/hatchet/clients/rest/docs/TenantResource.md +15 -0
- data/lib/hatchet/clients/rest/docs/TenantResourceLimit.md +30 -0
- data/lib/hatchet/clients/rest/docs/TenantResourcePolicy.md +18 -0
- data/lib/hatchet/clients/rest/docs/TenantStepRunQueueMetrics.md +18 -0
- data/lib/hatchet/clients/rest/docs/TenantUIVersion.md +15 -0
- data/lib/hatchet/clients/rest/docs/TenantVersion.md +15 -0
- data/lib/hatchet/clients/rest/docs/TriggerWorkflowRunRequest.md +20 -0
- data/lib/hatchet/clients/rest/docs/UpdateTenantAlertEmailGroupRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/UpdateTenantInviteRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/UpdateTenantRequest.md +34 -0
- data/lib/hatchet/clients/rest/docs/UpdateWorkerRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/User.md +28 -0
- data/lib/hatchet/clients/rest/docs/UserApi.md +805 -0
- data/lib/hatchet/clients/rest/docs/UserChangePasswordRequest.md +20 -0
- data/lib/hatchet/clients/rest/docs/UserLoginRequest.md +20 -0
- data/lib/hatchet/clients/rest/docs/UserRegisterRequest.md +22 -0
- data/lib/hatchet/clients/rest/docs/UserTenantMembershipsList.md +20 -0
- data/lib/hatchet/clients/rest/docs/UserTenantPublic.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1CancelTaskRequest.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1CancelledTasks.md +18 -0
- data/lib/hatchet/clients/rest/docs/V1CreateFilterRequest.md +24 -0
- data/lib/hatchet/clients/rest/docs/V1DagChildren.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1Event.md +36 -0
- data/lib/hatchet/clients/rest/docs/V1EventList.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1EventTriggeredRun.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1EventWorkflowRunSummary.md +26 -0
- data/lib/hatchet/clients/rest/docs/V1Filter.md +28 -0
- data/lib/hatchet/clients/rest/docs/V1FilterList.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1LogLine.md +28 -0
- data/lib/hatchet/clients/rest/docs/V1LogLineLevel.md +15 -0
- data/lib/hatchet/clients/rest/docs/V1LogLineList.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1ReplayTaskRequest.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1ReplayedTasks.md +18 -0
- data/lib/hatchet/clients/rest/docs/V1TaskEvent.md +38 -0
- data/lib/hatchet/clients/rest/docs/V1TaskEventList.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1TaskEventType.md +15 -0
- data/lib/hatchet/clients/rest/docs/V1TaskFilter.md +26 -0
- data/lib/hatchet/clients/rest/docs/V1TaskPointMetric.md +22 -0
- data/lib/hatchet/clients/rest/docs/V1TaskPointMetrics.md +18 -0
- data/lib/hatchet/clients/rest/docs/V1TaskRunMetric.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1TaskRunStatus.md +15 -0
- data/lib/hatchet/clients/rest/docs/V1TaskStatus.md +15 -0
- data/lib/hatchet/clients/rest/docs/V1TaskSummary.md +72 -0
- data/lib/hatchet/clients/rest/docs/V1TaskSummaryList.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1TaskTiming.md +46 -0
- data/lib/hatchet/clients/rest/docs/V1TaskTimingList.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1TriggerWorkflowRunRequest.md +24 -0
- data/lib/hatchet/clients/rest/docs/V1UpdateFilterRequest.md +22 -0
- data/lib/hatchet/clients/rest/docs/V1WorkflowRun.md +46 -0
- data/lib/hatchet/clients/rest/docs/V1WorkflowRunDetails.md +26 -0
- data/lib/hatchet/clients/rest/docs/V1WorkflowRunDisplayName.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1WorkflowRunDisplayNameList.md +20 -0
- data/lib/hatchet/clients/rest/docs/V1WorkflowType.md +15 -0
- data/lib/hatchet/clients/rest/docs/WebhookWorker.md +22 -0
- data/lib/hatchet/clients/rest/docs/WebhookWorkerCreateRequest.md +22 -0
- data/lib/hatchet/clients/rest/docs/WebhookWorkerCreateResponse.md +18 -0
- data/lib/hatchet/clients/rest/docs/WebhookWorkerCreated.md +24 -0
- data/lib/hatchet/clients/rest/docs/WebhookWorkerListResponse.md +20 -0
- data/lib/hatchet/clients/rest/docs/WebhookWorkerRequest.md +22 -0
- data/lib/hatchet/clients/rest/docs/WebhookWorkerRequestListResponse.md +18 -0
- data/lib/hatchet/clients/rest/docs/WebhookWorkerRequestMethod.md +15 -0
- data/lib/hatchet/clients/rest/docs/Worker.md +48 -0
- data/lib/hatchet/clients/rest/docs/WorkerApi.md +234 -0
- data/lib/hatchet/clients/rest/docs/WorkerLabel.md +22 -0
- data/lib/hatchet/clients/rest/docs/WorkerList.md +20 -0
- data/lib/hatchet/clients/rest/docs/WorkerRuntimeInfo.md +26 -0
- data/lib/hatchet/clients/rest/docs/WorkerRuntimeSDKs.md +15 -0
- data/lib/hatchet/clients/rest/docs/WorkerType.md +15 -0
- data/lib/hatchet/clients/rest/docs/Workflow.md +32 -0
- data/lib/hatchet/clients/rest/docs/WorkflowApi.md +1480 -0
- data/lib/hatchet/clients/rest/docs/WorkflowConcurrency.md +22 -0
- data/lib/hatchet/clients/rest/docs/WorkflowKind.md +15 -0
- data/lib/hatchet/clients/rest/docs/WorkflowList.md +22 -0
- data/lib/hatchet/clients/rest/docs/WorkflowMetrics.md +20 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRun.md +48 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunApi.md +477 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunList.md +20 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunOrderByDirection.md +15 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunOrderByField.md +15 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunShape.md +50 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunShapeItemForWorkflowRunDetails.md +24 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunStatus.md +15 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunTriggeredBy.md +26 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunsApi.md +572 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunsCancelRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunsMetrics.md +18 -0
- data/lib/hatchet/clients/rest/docs/WorkflowRunsMetricsCounts.md +28 -0
- data/lib/hatchet/clients/rest/docs/WorkflowTag.md +20 -0
- data/lib/hatchet/clients/rest/docs/WorkflowTriggerCronRef.md +20 -0
- data/lib/hatchet/clients/rest/docs/WorkflowTriggerEventRef.md +20 -0
- data/lib/hatchet/clients/rest/docs/WorkflowTriggers.md +26 -0
- data/lib/hatchet/clients/rest/docs/WorkflowUpdateRequest.md +18 -0
- data/lib/hatchet/clients/rest/docs/WorkflowVersion.md +40 -0
- data/lib/hatchet/clients/rest/docs/WorkflowVersionDefinition.md +18 -0
- data/lib/hatchet/clients/rest/docs/WorkflowVersionMeta.md +26 -0
- data/lib/hatchet/clients/rest/docs/WorkflowWorkersCount.md +22 -0
- data/lib/hatchet/clients/rest/git_push.sh +57 -0
- data/lib/hatchet/clients/rest/hatchet-sdk-rest.gemspec +41 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/api_token_api.rb +242 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/default_api.rb +622 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/event_api.rb +836 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/filter_api.rb +449 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/github_api.rb +107 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/healthcheck_api.rb +132 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/log_api.rb +182 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/metadata_api.rb +193 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/rate_limits_api.rb +108 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/slack_api.rb +164 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/sns_api.rb +242 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/step_run_api.rb +615 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/task_api.rb +599 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/tenant_api.rb +1327 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/user_api.rb +729 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/worker_api.rb +246 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/workflow_api.rb +1654 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/workflow_run_api.rb +540 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api/workflow_runs_api.rb +614 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api_client.rb +437 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/api_error.rb +58 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/configuration.rb +399 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/accept_invite_request.rb +255 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_error.rb +268 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_errors.rb +239 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_meta.rb +279 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_meta_auth.rb +223 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_meta_integration.rb +265 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_meta_posthog.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_resource_meta.rb +310 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/api_token.rb +300 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/bulk_create_event_request.rb +239 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/cancel_event_request.rb +239 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/concurrency_limit_strategy.rb +42 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_api_token_request.rb +257 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_api_token_response.rb +238 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_cron_workflow_trigger_request.rb +352 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_event_request.rb +295 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_pull_request_from_step_run.rb +237 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_sns_integration_request.rb +238 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_tenant_alert_email_group_request.rb +240 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_tenant_invite_request.rb +287 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/create_tenant_request.rb +307 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/cron_workflows.rb +509 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/cron_workflows_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/cron_workflows_method.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/cron_workflows_order_by_field.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event.rb +321 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_data.rb +238 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_key_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_order_by_direction.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_order_by_field.rb +39 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_update_cancel200_response.rb +222 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/event_workflow_run_summary.rb +271 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/events.rb +266 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/get_step_run_diff_response.rb +239 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/info_get_version200_response.rb +237 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/job.rb +363 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/job_run.rb +464 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/job_run_status.rb +44 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/list_api_tokens_response.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/list_pull_requests_response.rb +239 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/list_slack_webhooks.rb +265 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/list_sns_integrations.rb +265 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/log_line.rb +292 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/log_line_level.rb +42 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/log_line_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/log_line_order_by_direction.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/log_line_order_by_field.rb +39 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/pagination_response.rb +241 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/pull_request.rb +441 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/pull_request_state.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/queue_metrics.rb +292 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/rate_limit.rb +373 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/rate_limit_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/rate_limit_order_by_direction.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/rate_limit_order_by_field.rb +41 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/recent_step_runs.rb +365 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/reject_invite_request.rb +255 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/replay_event_request.rb +239 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/replay_workflow_runs_request.rb +239 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/replay_workflow_runs_response.rb +239 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/rerun_step_run_request.rb +237 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/schedule_workflow_run_request.rb +326 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/scheduled_run_status.rb +45 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/scheduled_workflows.rb +538 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/scheduled_workflows_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/scheduled_workflows_method.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/scheduled_workflows_order_by_field.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/semaphore_slots.rb +343 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/slack_webhook.rb +372 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/sns_integration.rb +301 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step.rb +374 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run.rb +556 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_archive.rb +432 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_archive_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_diff.rb +289 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_event.rb +442 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_event_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_event_reason.rb +55 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_event_severity.rb +41 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/step_run_status.rb +47 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant.rb +370 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_alert_email_group.rb +266 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_alert_email_group_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_alerting_settings.rb +314 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_invite.rb +377 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_invite_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_member.rb +323 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_member_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_member_role.rb +41 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_queue_metrics.rb +243 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_resource.rb +45 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_resource_limit.rb +370 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_resource_policy.rb +240 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_step_run_queue_metrics.rb +220 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_ui_version.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/tenant_version.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/trigger_workflow_run_request.rb +246 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/update_tenant_alert_email_group_request.rb +240 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/update_tenant_invite_request.rb +260 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/update_tenant_request.rb +323 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/update_worker_request.rb +221 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user.rb +321 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user_change_password_request.rb +265 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user_login_request.rb +265 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user_register_request.rb +292 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user_tenant_memberships_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/user_tenant_public.rb +248 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_cancel_task_request.rb +232 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_cancelled_tasks.rb +223 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_create_filter_request.rb +320 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_dag_children.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_event.rb +380 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_event_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_event_triggered_run.rb +266 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_event_workflow_run_summary.rb +346 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_filter.rb +390 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_filter_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_log_line.rb +344 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_log_line_level.rb +42 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_log_line_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_replay_task_request.rb +232 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_replayed_tasks.rb +223 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_event.rb +419 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_event_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_event_type.rb +58 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_filter.rb +279 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_point_metric.rb +289 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_point_metrics.rb +222 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_run_metric.rb +285 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_run_status.rb +43 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_status.rb +43 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_summary.rb +812 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_summary_list.rb +266 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_timing.rb +581 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_task_timing_list.rb +266 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_trigger_workflow_run_request.rb +283 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_update_filter_request.rb +241 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_workflow_run.rb +544 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_workflow_run_details.rb +331 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_workflow_run_display_name.rb +263 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_workflow_run_display_name_list.rb +266 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/v1_workflow_type.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker.rb +291 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_create_request.rb +294 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_create_response.rb +220 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_created.rb +318 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_list_response.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_request.rb +314 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_request_list_response.rb +223 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/webhook_worker_request_method.rb +41 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker.rb +489 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker_label.rb +274 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker_runtime_info.rb +278 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker_runtime_sdks.rb +41 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/worker_type.rb +41 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow.rb +346 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_concurrency.rb +314 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_kind.rb +41 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_list.rb +240 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_metrics.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run.rb +524 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_list.rb +231 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_order_by_direction.rb +40 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_order_by_field.rb +42 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_shape.rb +533 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_shape_item_for_workflow_run_details.rb +353 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_status.rb +45 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_run_triggered_by.rb +273 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_runs_cancel_request.rb +239 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_runs_metrics.rb +220 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_runs_metrics_counts.rb +265 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_tag.rb +265 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_trigger_cron_ref.rb +229 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_trigger_event_ref.rb +229 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_triggers.rb +260 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_update_request.rb +221 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_version.rb +392 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_version_definition.rb +238 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_version_meta.rb +325 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/models/workflow_workers_count.rb +238 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest/version.rb +15 -0
- data/lib/hatchet/clients/rest/lib/hatchet-sdk-rest.rb +241 -0
- data/lib/hatchet/clients/rest/spec/spec_helper.rb +111 -0
- data/lib/hatchet/clients/rest.rb +126 -0
- data/lib/hatchet/clients.rb +71 -0
- data/lib/hatchet/config.rb +482 -0
- data/lib/hatchet/features/events.rb +265 -0
- data/lib/hatchet/features/runs.rb +423 -0
- data/lib/hatchet/version.rb +1 -1
- data/lib/hatchet-sdk.rb +74 -3
- data/scripts/generate.sh +167 -0
- data/scripts/generate_api.rb +174 -0
- data/sig/hatchet-sdk.rbs +525 -1
- 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
|