├── .github ├── dependabot.yml ├── docker │ ├── README.md │ ├── admin.dockerfile │ ├── api.dockerfile │ ├── engine.dockerfile │ ├── frontend.dockerfile │ └── migrate.dockerfile └── workflows │ ├── auto-merge.yml │ ├── build.yml │ └── lint.yml ├── .gitignore ├── Dockerfile ├── README.md ├── monorepo ├── Dockerfile ├── README.md ├── hatchet-worker │ ├── package.json │ ├── src │ │ ├── hatchet-client.ts │ │ ├── run.ts │ │ ├── worker.ts │ │ └── workflows │ │ │ └── first-workflow.ts │ └── tsconfig.json ├── package.json └── turbo.json ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── src ├── hatchet-client.ts ├── run.ts ├── worker.ts └── workflows │ └── first-workflow.ts └── tsconfig.json /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | 8 | - package-ecosystem: "docker" 9 | directory: ".github/docker" 10 | schedule: 11 | interval: "daily" 12 | groups: 13 | docker: 14 | applies-to: version-updates 15 | patterns: 16 | - "*hatchet-*" 17 | 18 | - package-ecosystem: "npm" 19 | directory: "/" 20 | schedule: 21 | interval: "daily" 22 | 23 | -------------------------------------------------------------------------------- /.github/docker/README.md: -------------------------------------------------------------------------------- 1 | https://github.com/dependabot/dependabot-core/issues/390#issuecomment-1062170379 2 | -------------------------------------------------------------------------------- /.github/docker/admin.dockerfile: -------------------------------------------------------------------------------- 1 | FROM ghcr.io/hatchet-dev/hatchet/hatchet-admin:v0.55.23 2 | -------------------------------------------------------------------------------- /.github/docker/api.dockerfile: -------------------------------------------------------------------------------- 1 | FROM ghcr.io/hatchet-dev/hatchet/hatchet-api:v0.55.23 2 | -------------------------------------------------------------------------------- /.github/docker/engine.dockerfile: -------------------------------------------------------------------------------- 1 | FROM ghcr.io/hatchet-dev/hatchet/hatchet-engine:v0.55.23 2 | -------------------------------------------------------------------------------- /.github/docker/frontend.dockerfile: -------------------------------------------------------------------------------- 1 | FROM ghcr.io/hatchet-dev/hatchet/hatchet-frontend:v0.55.23 2 | -------------------------------------------------------------------------------- /.github/docker/migrate.dockerfile: -------------------------------------------------------------------------------- 1 | FROM ghcr.io/hatchet-dev/hatchet/hatchet-migrate:v0.55.23 2 | -------------------------------------------------------------------------------- /.github/workflows/auto-merge.yml: -------------------------------------------------------------------------------- 1 | name: auto-merge 2 | 3 | on: pull_request_target 4 | 5 | jobs: 6 | auto-merge: 7 | runs-on: ubuntu-latest 8 | if: ${{ github.actor == 'dependabot[bot]' }} 9 | permissions: 10 | pull-requests: write 11 | issues: write 12 | repository-projects: write 13 | contents: write 14 | steps: 15 | - name: "Metadata" 16 | id: metadata 17 | uses: dependabot/fetch-metadata@v2.3.0 18 | with: 19 | github-token: "${{ secrets.GITHUB_TOKEN }}" 20 | - name: "Enable auto-squash" 21 | id: enable-auto-squash 22 | if: steps.metadata.outputs.update-type == 'version-update:semver-minor' || steps.metadata.outputs.update-type == 'version-update:semver-patch' || steps.metadata.outputs.dependency-group == 'docker' 23 | run: gh pr merge --auto --squash "$PR_URL" 24 | env: 25 | PR_URL: ${{ github.event.pull_request.html_url }} 26 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 27 | - name: "Approve (minor & patch)" 28 | id: approve 29 | if: steps.metadata.outputs.update-type == 'version-update:semver-minor' || steps.metadata.outputs.update-type == 'version-update:semver-patch' || steps.metadata.outputs.dependency-group == 'docker' 30 | run: gh pr review --approve "$PR_URL" 31 | env: 32 | PR_URL: ${{ github.event.pull_request.html_url }} 33 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 34 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: build 2 | on: pull_request 3 | jobs: 4 | build: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Clone repository 8 | uses: actions/checkout@v4 9 | - name: Setup Node.js 10 | uses: actions/setup-node@v4 11 | with: 12 | cache: npm 13 | cache-dependency-path: simple-examples/package.json 14 | - name: Simple – Install dependencies 15 | working-directory: simple-examples 16 | run: npm ci 17 | - name: Simple – Build 18 | working-directory: simple-examples 19 | run: npm run build 20 | - name: Child Workflows – Install dependencies 21 | working-directory: child-workflows 22 | run: npm ci 23 | - name: Child Workflows – Build 24 | working-directory: child-workflows 25 | run: npm run build 26 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: lint 2 | on: pull_request 3 | jobs: 4 | lint: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - name: Clone repository 8 | uses: actions/checkout@v4 9 | - name: Setup Node.js 10 | uses: actions/setup-node@v4 11 | with: 12 | cache: npm 13 | cache-dependency-path: simple-examples/package.json 14 | - name: Simple – Install dependencies 15 | working-directory: simple-examples 16 | run: npm ci 17 | - name: Simple – Build 18 | working-directory: simple-examples 19 | run: npm run lint:check 20 | - name: Child Workflows – Install dependencies 21 | working-directory: child-workflows 22 | run: npm ci 23 | - name: Child Workflows – Build 24 | working-directory: child-workflows 25 | run: npm run lint:check 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | certs/ 2 | 3 | # Environments 4 | .env 5 | env/ 6 | 7 | # TypeScript React 8 | node_modules/ 9 | dist/ 10 | build/ 11 | 12 | .DS_Store 13 | 14 | index/index.json -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:22 2 | 3 | RUN apt-get update -y && apt-get install -y openssl 4 | 5 | WORKDIR /app 6 | 7 | COPY package*.json ./ 8 | RUN npm install 9 | 10 | COPY src ./src 11 | COPY tsconfig.json ./ 12 | RUN npm run build 13 | 14 | CMD ["npm", "run", "start"] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hatchet First Workflow Example 2 | 3 | This is an example project demonstrating how to use Hatchet with TypeScript. For detailed setup instructions, see the [Hatchet Setup Guide](https://docs.hatchet.run/home/setup). 4 | 5 | ## Prerequisites 6 | 7 | Before running this project, make sure you have the following: 8 | 9 | 1. [Node.js v16 or higher](https://nodejs.org/en/download) 10 | 2. npm, yarn, or pnpm package manager 11 | 12 | ## Setup 13 | 14 | 1. Clone the repository: 15 | 16 | ```bash 17 | git clone https://github.com/hatchet-dev/hatchet-typescript-quickstart.git 18 | cd hatchet-typescript-quickstart 19 | ``` 20 | 21 | 2. Set the required environment variable `HATCHET_CLIENT_TOKEN` created in the [Getting Started Guide](https://docs.hatchet.run/home/hatchet-cloud-quickstart). 22 | 23 | ```bash 24 | export HATCHET_CLIENT_TOKEN= 25 | ``` 26 | 27 | > Note: If you're self hosting you may need to set `HATCHET_CLIENT_TLS_STRATEGY=none` to disable TLS 28 | 29 | 3. Install the project dependencies: 30 | 31 | ```bash 32 | npm install 33 | # or 34 | yarn install 35 | # or 36 | pnpm install 37 | ``` 38 | 39 | ### Running an example 40 | 41 | 1. Start a Hatchet worker: 42 | 43 | ```bash 44 | npm run start 45 | ``` 46 | 47 | 2. In a new terminal, run the example task: 48 | 49 | ```bash 50 | npm run run:simple 51 | ``` 52 | 53 | This will trigger the task on the worker running in the first terminal and print the output to the second terminal. -------------------------------------------------------------------------------- /monorepo/Dockerfile: -------------------------------------------------------------------------------- 1 | # Use the official Node.js image. 2 | FROM node:22 3 | 4 | # Install pnpm 5 | RUN npm install -g pnpm@9.15.4 6 | 7 | # Create app directory 8 | WORKDIR /usr/src/app 9 | 10 | # Copy the entire monorepo 11 | COPY . . 12 | 13 | # Install dependencies and build 14 | RUN cd hatchet-worker && \ 15 | pnpm install && \ 16 | pnpm build 17 | 18 | # Expose the port the app runs on 19 | EXPOSE 8080 20 | 21 | # Define the command to run the app 22 | CMD [ "node", "hatchet-worker/dist/worker.js" ] -------------------------------------------------------------------------------- /monorepo/README.md: -------------------------------------------------------------------------------- 1 | # Hatchet Worker Monorepo 2 | 3 | This monorepo contains a Hatchet worker implementation using TypeScript. 4 | 5 | ## Building and Running with Docker 6 | 7 | ### Prerequisites 8 | - Docker installed on your machine 9 | - Node.js 22 or later (for local development) 10 | 11 | ### Building the Docker Image 12 | 13 | From the root of the monorepo directory, run: 14 | 15 | ```bash 16 | docker build -t hatchet-worker . 17 | ``` 18 | 19 | This will create a Docker image named `hatchet-worker` using the Dockerfile in this directory. 20 | 21 | ### Running the Container 22 | 23 | To run the worker container: 24 | 25 | ```bash 26 | docker run hatchet-worker 27 | ``` 28 | 29 | This will: 30 | - Start the worker container 31 | - Map port 8080 from the container to your host machine 32 | - Run the worker process 33 | 34 | ### Environment Variables 35 | 36 | If you need to configure the worker with environment variables, you can pass them using the `-e` flag: 37 | 38 | ```bash 39 | docker run \ 40 | -e HATCHET_CLIENT_TOKEN=your_token \ 41 | -e OTHER_ENV_VAR=value \ 42 | hatchet-worker 43 | ``` -------------------------------------------------------------------------------- /monorepo/hatchet-worker/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hatchet-worker", 3 | "version": "1.0.0", 4 | "description": "This is the hatchet-worker app within the monorepo.", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node dist/worker.js", 8 | "run:simple": "npx ts-node src/run.ts", 9 | "build": "tsc --outDir dist" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "devDependencies": { 15 | "@types/node": "^22.15.3", 16 | "typescript": "^5.8.3" 17 | }, 18 | "dependencies": { 19 | "@hatchet-dev/typescript-sdk": "^1.4.1" 20 | }, 21 | "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" 22 | } -------------------------------------------------------------------------------- /monorepo/hatchet-worker/src/hatchet-client.ts: -------------------------------------------------------------------------------- 1 | import { HatchetClient } from '@hatchet-dev/typescript-sdk'; 2 | 3 | export const hatchet = HatchetClient.init(); 4 | -------------------------------------------------------------------------------- /monorepo/hatchet-worker/src/run.ts: -------------------------------------------------------------------------------- 1 | import { simple } from './workflows/first-workflow'; 2 | 3 | async function main() { 4 | const res = await simple.run({ 5 | message: 'hello', 6 | }); 7 | 8 | console.log(res['first-task'].message); 9 | console.log(res['second-task'].message); 10 | } 11 | 12 | if (require.main === module) { 13 | main().catch(console.error).finally(() => process.exit(0)); 14 | } 15 | -------------------------------------------------------------------------------- /monorepo/hatchet-worker/src/worker.ts: -------------------------------------------------------------------------------- 1 | import { hatchet } from './hatchet-client'; 2 | import { simple } from './workflows/first-workflow'; 3 | 4 | async function main() { 5 | const worker = await hatchet.worker('simple-worker', { 6 | workflows: [simple], 7 | }); 8 | 9 | await worker.start(); 10 | } 11 | 12 | if (require.main === module) { 13 | main(); 14 | } 15 | -------------------------------------------------------------------------------- /monorepo/hatchet-worker/src/workflows/first-workflow.ts: -------------------------------------------------------------------------------- 1 | import { hatchet } from '../hatchet-client'; 2 | 3 | type Input = { 4 | message: string; 5 | }; 6 | 7 | type Output = { 8 | "first-task": { 9 | message: string; 10 | }; 11 | "second-task": { 12 | message: string; 13 | }; 14 | }; 15 | 16 | export const simple = hatchet.workflow({ 17 | name: 'first-workflow', 18 | }); 19 | 20 | const step1 = simple.task({ 21 | name: 'first-task', 22 | fn: (input) => { 23 | return { 24 | "message": "Hello, world!" 25 | }; 26 | }, 27 | }); 28 | 29 | const step2 = simple.task({ 30 | name: 'second-task', 31 | parents: [step1], 32 | fn: (input) => { 33 | return { 34 | "message": "Hello, moon!" 35 | }; 36 | }, 37 | }); 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /monorepo/hatchet-worker/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES6", 4 | "module": "commonjs", 5 | "outDir": "./dist", 6 | "rootDir": "./src", 7 | "strict": true, 8 | "esModuleInterop": true, 9 | "skipLibCheck": true, 10 | "forceConsistentCasingInFileNames": true 11 | }, 12 | "include": ["src"], 13 | "exclude": ["node_modules", "dist"] 14 | } -------------------------------------------------------------------------------- /monorepo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hatchet-monorepo", 3 | "private": true, 4 | "workspaces": [ 5 | "hatchet-worker" 6 | ], 7 | "scripts": { 8 | "dev": "turbo run dev", 9 | "lint": "turbo run lint", 10 | "test": "turbo run test" 11 | }, 12 | "devDependencies": { 13 | "turbo": "latest" 14 | }, 15 | "packageManager": "pnpm@9.15.4" 16 | } -------------------------------------------------------------------------------- /monorepo/turbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://turborepo.org/schema.json", 3 | "tasks": { 4 | "build": { 5 | "dependsOn": ["^build"], 6 | "outputs": ["dist/**"] 7 | }, 8 | "lint": {}, 9 | "test": {} 10 | } 11 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hatchet-typescript-quickstart", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "hatchet-typescript-quickstart", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "@types/node": "^22.13.13", 13 | "typescript": "^5.8.2" 14 | } 15 | }, 16 | "node_modules/@types/node": { 17 | "version": "22.13.13", 18 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.13.tgz", 19 | "integrity": "sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==", 20 | "dev": true, 21 | "license": "MIT", 22 | "dependencies": { 23 | "undici-types": "~6.20.0" 24 | } 25 | }, 26 | "node_modules/typescript": { 27 | "version": "5.8.2", 28 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", 29 | "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", 30 | "dev": true, 31 | "license": "Apache-2.0", 32 | "bin": { 33 | "tsc": "bin/tsc", 34 | "tsserver": "bin/tsserver" 35 | }, 36 | "engines": { 37 | "node": ">=14.17" 38 | } 39 | }, 40 | "node_modules/undici-types": { 41 | "version": "6.20.0", 42 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", 43 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", 44 | "dev": true, 45 | "license": "MIT" 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hatchet-typescript-quickstart", 3 | "version": "1.0.0", 4 | "description": "This is an example project demonstrating how to use Hatchet with Typescript.", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node dist/worker.js", 8 | "run:simple": "npx ts-node src/run.ts", 9 | "build": "tsc --outDir dist" 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "devDependencies": { 15 | "@types/node": "^22.15.3", 16 | "typescript": "^5.8.3" 17 | }, 18 | "dependencies": { 19 | "@hatchet-dev/typescript-sdk": "^1.4.1" 20 | }, 21 | "packageManager": "pnpm@9.15.4+sha512.b2dc20e2fc72b3e18848459b37359a32064663e5627a51e4c74b2c29dd8e8e0491483c3abb40789cfd578bf362fb6ba8261b05f0387d76792ed6e23ea3b1b6a0" 22 | } 23 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@hatchet-dev/typescript-sdk': 12 | specifier: ^1.4.1 13 | version: 1.4.1 14 | devDependencies: 15 | '@types/node': 16 | specifier: ^22.15.3 17 | version: 22.15.3 18 | typescript: 19 | specifier: ^5.8.3 20 | version: 5.8.3 21 | 22 | packages: 23 | 24 | '@bufbuild/protobuf@2.2.5': 25 | resolution: {integrity: sha512-/g5EzJifw5GF8aren8wZ/G5oMuPoGeS6MQD3ca8ddcvdXR5UELUfdTZITCGNhNXynY/AYl3Z4plmxdj/tRl/hQ==} 26 | 27 | '@grpc/grpc-js@1.13.3': 28 | resolution: {integrity: sha512-FTXHdOoPbZrBjlVLHuKbDZnsTxXv2BlHF57xw6LuThXacXvtkahEPED0CKMk6obZDf65Hv4k3z62eyPNpvinIg==} 29 | engines: {node: '>=12.10.0'} 30 | 31 | '@grpc/proto-loader@0.7.15': 32 | resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} 33 | engines: {node: '>=6'} 34 | hasBin: true 35 | 36 | '@hatchet-dev/typescript-sdk@1.4.1': 37 | resolution: {integrity: sha512-iL2OkhOAsjlcLx3PxhD3XpbQu7kBuSomVG+NgNuP359FLaa8qUOUEATam1T+Rtz47i2IV6JqojOLv/17oTbACA==} 38 | 39 | '@js-sdsl/ordered-map@4.4.2': 40 | resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} 41 | 42 | '@protobufjs/aspromise@1.1.2': 43 | resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} 44 | 45 | '@protobufjs/base64@1.1.2': 46 | resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} 47 | 48 | '@protobufjs/codegen@2.0.4': 49 | resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} 50 | 51 | '@protobufjs/eventemitter@1.1.0': 52 | resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} 53 | 54 | '@protobufjs/fetch@1.1.0': 55 | resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} 56 | 57 | '@protobufjs/float@1.0.2': 58 | resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} 59 | 60 | '@protobufjs/inquire@1.1.0': 61 | resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} 62 | 63 | '@protobufjs/path@1.1.2': 64 | resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} 65 | 66 | '@protobufjs/pool@1.1.0': 67 | resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} 68 | 69 | '@protobufjs/utf8@1.1.0': 70 | resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} 71 | 72 | '@types/node@22.15.3': 73 | resolution: {integrity: sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==} 74 | 75 | '@types/qs@6.9.18': 76 | resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} 77 | 78 | abort-controller-x@0.4.3: 79 | resolution: {integrity: sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==} 80 | 81 | ansi-regex@5.0.1: 82 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 83 | engines: {node: '>=8'} 84 | 85 | ansi-styles@4.3.0: 86 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 87 | engines: {node: '>=8'} 88 | 89 | asynckit@0.4.0: 90 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 91 | 92 | axios@1.9.0: 93 | resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} 94 | 95 | call-bind-apply-helpers@1.0.2: 96 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 97 | engines: {node: '>= 0.4'} 98 | 99 | call-bound@1.0.4: 100 | resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 101 | engines: {node: '>= 0.4'} 102 | 103 | cliui@8.0.1: 104 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 105 | engines: {node: '>=12'} 106 | 107 | color-convert@2.0.1: 108 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 109 | engines: {node: '>=7.0.0'} 110 | 111 | color-name@1.1.4: 112 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 113 | 114 | combined-stream@1.0.8: 115 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 116 | engines: {node: '>= 0.8'} 117 | 118 | delayed-stream@1.0.0: 119 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 120 | engines: {node: '>=0.4.0'} 121 | 122 | dunder-proto@1.0.1: 123 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 124 | engines: {node: '>= 0.4'} 125 | 126 | emoji-regex@8.0.0: 127 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 128 | 129 | es-define-property@1.0.1: 130 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 131 | engines: {node: '>= 0.4'} 132 | 133 | es-errors@1.3.0: 134 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 135 | engines: {node: '>= 0.4'} 136 | 137 | es-object-atoms@1.1.1: 138 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 139 | engines: {node: '>= 0.4'} 140 | 141 | es-set-tostringtag@2.1.0: 142 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 143 | engines: {node: '>= 0.4'} 144 | 145 | escalade@3.2.0: 146 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 147 | engines: {node: '>=6'} 148 | 149 | follow-redirects@1.15.9: 150 | resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} 151 | engines: {node: '>=4.0'} 152 | peerDependencies: 153 | debug: '*' 154 | peerDependenciesMeta: 155 | debug: 156 | optional: true 157 | 158 | form-data@4.0.2: 159 | resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} 160 | engines: {node: '>= 6'} 161 | 162 | function-bind@1.1.2: 163 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 164 | 165 | get-caller-file@2.0.5: 166 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 167 | engines: {node: 6.* || 8.* || >= 10.*} 168 | 169 | get-intrinsic@1.3.0: 170 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 171 | engines: {node: '>= 0.4'} 172 | 173 | get-proto@1.0.1: 174 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 175 | engines: {node: '>= 0.4'} 176 | 177 | gopd@1.2.0: 178 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 179 | engines: {node: '>= 0.4'} 180 | 181 | has-symbols@1.1.0: 182 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 183 | engines: {node: '>= 0.4'} 184 | 185 | has-tostringtag@1.0.2: 186 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 187 | engines: {node: '>= 0.4'} 188 | 189 | hasown@2.0.2: 190 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 191 | engines: {node: '>= 0.4'} 192 | 193 | is-fullwidth-code-point@3.0.0: 194 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 195 | engines: {node: '>=8'} 196 | 197 | lodash.camelcase@4.3.0: 198 | resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} 199 | 200 | long@5.3.2: 201 | resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} 202 | 203 | math-intrinsics@1.1.0: 204 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 205 | engines: {node: '>= 0.4'} 206 | 207 | mime-db@1.52.0: 208 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 209 | engines: {node: '>= 0.6'} 210 | 211 | mime-types@2.1.35: 212 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 213 | engines: {node: '>= 0.6'} 214 | 215 | nice-grpc-common@2.0.2: 216 | resolution: {integrity: sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==} 217 | 218 | nice-grpc@2.1.12: 219 | resolution: {integrity: sha512-J1n4Wg+D3IhRhGQb+iqh2OpiM0GzTve/kf2lnlW4S+xczmIEd0aHUDV1OsJ5a3q8GSTqJf+s4Rgg1M8uJltarw==} 220 | 221 | object-inspect@1.13.4: 222 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 223 | engines: {node: '>= 0.4'} 224 | 225 | protobufjs@7.5.0: 226 | resolution: {integrity: sha512-Z2E/kOY1QjoMlCytmexzYfDm/w5fKAiRwpSzGtdnXW1zC88Z2yXazHHrOtwCzn+7wSxyE8PYM4rvVcMphF9sOA==} 227 | engines: {node: '>=12.0.0'} 228 | 229 | proxy-from-env@1.1.0: 230 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 231 | 232 | qs@6.14.0: 233 | resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} 234 | engines: {node: '>=0.6'} 235 | 236 | require-directory@2.1.1: 237 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 238 | engines: {node: '>=0.10.0'} 239 | 240 | semver@7.7.1: 241 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 242 | engines: {node: '>=10'} 243 | hasBin: true 244 | 245 | side-channel-list@1.0.0: 246 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 247 | engines: {node: '>= 0.4'} 248 | 249 | side-channel-map@1.0.1: 250 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 251 | engines: {node: '>= 0.4'} 252 | 253 | side-channel-weakmap@1.0.2: 254 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 255 | engines: {node: '>= 0.4'} 256 | 257 | side-channel@1.1.0: 258 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 259 | engines: {node: '>= 0.4'} 260 | 261 | string-width@4.2.3: 262 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 263 | engines: {node: '>=8'} 264 | 265 | strip-ansi@6.0.1: 266 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 267 | engines: {node: '>=8'} 268 | 269 | ts-error@1.0.6: 270 | resolution: {integrity: sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==} 271 | 272 | typescript@5.8.3: 273 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 274 | engines: {node: '>=14.17'} 275 | hasBin: true 276 | 277 | undici-types@6.21.0: 278 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 279 | 280 | wrap-ansi@7.0.0: 281 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 282 | engines: {node: '>=10'} 283 | 284 | y18n@5.0.8: 285 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 286 | engines: {node: '>=10'} 287 | 288 | yaml@2.7.1: 289 | resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} 290 | engines: {node: '>= 14'} 291 | hasBin: true 292 | 293 | yargs-parser@21.1.1: 294 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 295 | engines: {node: '>=12'} 296 | 297 | yargs@17.7.2: 298 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 299 | engines: {node: '>=12'} 300 | 301 | zod@3.24.3: 302 | resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} 303 | 304 | snapshots: 305 | 306 | '@bufbuild/protobuf@2.2.5': {} 307 | 308 | '@grpc/grpc-js@1.13.3': 309 | dependencies: 310 | '@grpc/proto-loader': 0.7.15 311 | '@js-sdsl/ordered-map': 4.4.2 312 | 313 | '@grpc/proto-loader@0.7.15': 314 | dependencies: 315 | lodash.camelcase: 4.3.0 316 | long: 5.3.2 317 | protobufjs: 7.5.0 318 | yargs: 17.7.2 319 | 320 | '@hatchet-dev/typescript-sdk@1.4.1': 321 | dependencies: 322 | '@bufbuild/protobuf': 2.2.5 323 | '@types/qs': 6.9.18 324 | abort-controller-x: 0.4.3 325 | axios: 1.9.0 326 | long: 5.3.2 327 | nice-grpc: 2.1.12 328 | nice-grpc-common: 2.0.2 329 | protobufjs: 7.5.0 330 | qs: 6.14.0 331 | semver: 7.7.1 332 | yaml: 2.7.1 333 | zod: 3.24.3 334 | transitivePeerDependencies: 335 | - debug 336 | 337 | '@js-sdsl/ordered-map@4.4.2': {} 338 | 339 | '@protobufjs/aspromise@1.1.2': {} 340 | 341 | '@protobufjs/base64@1.1.2': {} 342 | 343 | '@protobufjs/codegen@2.0.4': {} 344 | 345 | '@protobufjs/eventemitter@1.1.0': {} 346 | 347 | '@protobufjs/fetch@1.1.0': 348 | dependencies: 349 | '@protobufjs/aspromise': 1.1.2 350 | '@protobufjs/inquire': 1.1.0 351 | 352 | '@protobufjs/float@1.0.2': {} 353 | 354 | '@protobufjs/inquire@1.1.0': {} 355 | 356 | '@protobufjs/path@1.1.2': {} 357 | 358 | '@protobufjs/pool@1.1.0': {} 359 | 360 | '@protobufjs/utf8@1.1.0': {} 361 | 362 | '@types/node@22.15.3': 363 | dependencies: 364 | undici-types: 6.21.0 365 | 366 | '@types/qs@6.9.18': {} 367 | 368 | abort-controller-x@0.4.3: {} 369 | 370 | ansi-regex@5.0.1: {} 371 | 372 | ansi-styles@4.3.0: 373 | dependencies: 374 | color-convert: 2.0.1 375 | 376 | asynckit@0.4.0: {} 377 | 378 | axios@1.9.0: 379 | dependencies: 380 | follow-redirects: 1.15.9 381 | form-data: 4.0.2 382 | proxy-from-env: 1.1.0 383 | transitivePeerDependencies: 384 | - debug 385 | 386 | call-bind-apply-helpers@1.0.2: 387 | dependencies: 388 | es-errors: 1.3.0 389 | function-bind: 1.1.2 390 | 391 | call-bound@1.0.4: 392 | dependencies: 393 | call-bind-apply-helpers: 1.0.2 394 | get-intrinsic: 1.3.0 395 | 396 | cliui@8.0.1: 397 | dependencies: 398 | string-width: 4.2.3 399 | strip-ansi: 6.0.1 400 | wrap-ansi: 7.0.0 401 | 402 | color-convert@2.0.1: 403 | dependencies: 404 | color-name: 1.1.4 405 | 406 | color-name@1.1.4: {} 407 | 408 | combined-stream@1.0.8: 409 | dependencies: 410 | delayed-stream: 1.0.0 411 | 412 | delayed-stream@1.0.0: {} 413 | 414 | dunder-proto@1.0.1: 415 | dependencies: 416 | call-bind-apply-helpers: 1.0.2 417 | es-errors: 1.3.0 418 | gopd: 1.2.0 419 | 420 | emoji-regex@8.0.0: {} 421 | 422 | es-define-property@1.0.1: {} 423 | 424 | es-errors@1.3.0: {} 425 | 426 | es-object-atoms@1.1.1: 427 | dependencies: 428 | es-errors: 1.3.0 429 | 430 | es-set-tostringtag@2.1.0: 431 | dependencies: 432 | es-errors: 1.3.0 433 | get-intrinsic: 1.3.0 434 | has-tostringtag: 1.0.2 435 | hasown: 2.0.2 436 | 437 | escalade@3.2.0: {} 438 | 439 | follow-redirects@1.15.9: {} 440 | 441 | form-data@4.0.2: 442 | dependencies: 443 | asynckit: 0.4.0 444 | combined-stream: 1.0.8 445 | es-set-tostringtag: 2.1.0 446 | mime-types: 2.1.35 447 | 448 | function-bind@1.1.2: {} 449 | 450 | get-caller-file@2.0.5: {} 451 | 452 | get-intrinsic@1.3.0: 453 | dependencies: 454 | call-bind-apply-helpers: 1.0.2 455 | es-define-property: 1.0.1 456 | es-errors: 1.3.0 457 | es-object-atoms: 1.1.1 458 | function-bind: 1.1.2 459 | get-proto: 1.0.1 460 | gopd: 1.2.0 461 | has-symbols: 1.1.0 462 | hasown: 2.0.2 463 | math-intrinsics: 1.1.0 464 | 465 | get-proto@1.0.1: 466 | dependencies: 467 | dunder-proto: 1.0.1 468 | es-object-atoms: 1.1.1 469 | 470 | gopd@1.2.0: {} 471 | 472 | has-symbols@1.1.0: {} 473 | 474 | has-tostringtag@1.0.2: 475 | dependencies: 476 | has-symbols: 1.1.0 477 | 478 | hasown@2.0.2: 479 | dependencies: 480 | function-bind: 1.1.2 481 | 482 | is-fullwidth-code-point@3.0.0: {} 483 | 484 | lodash.camelcase@4.3.0: {} 485 | 486 | long@5.3.2: {} 487 | 488 | math-intrinsics@1.1.0: {} 489 | 490 | mime-db@1.52.0: {} 491 | 492 | mime-types@2.1.35: 493 | dependencies: 494 | mime-db: 1.52.0 495 | 496 | nice-grpc-common@2.0.2: 497 | dependencies: 498 | ts-error: 1.0.6 499 | 500 | nice-grpc@2.1.12: 501 | dependencies: 502 | '@grpc/grpc-js': 1.13.3 503 | abort-controller-x: 0.4.3 504 | nice-grpc-common: 2.0.2 505 | 506 | object-inspect@1.13.4: {} 507 | 508 | protobufjs@7.5.0: 509 | dependencies: 510 | '@protobufjs/aspromise': 1.1.2 511 | '@protobufjs/base64': 1.1.2 512 | '@protobufjs/codegen': 2.0.4 513 | '@protobufjs/eventemitter': 1.1.0 514 | '@protobufjs/fetch': 1.1.0 515 | '@protobufjs/float': 1.0.2 516 | '@protobufjs/inquire': 1.1.0 517 | '@protobufjs/path': 1.1.2 518 | '@protobufjs/pool': 1.1.0 519 | '@protobufjs/utf8': 1.1.0 520 | '@types/node': 22.15.3 521 | long: 5.3.2 522 | 523 | proxy-from-env@1.1.0: {} 524 | 525 | qs@6.14.0: 526 | dependencies: 527 | side-channel: 1.1.0 528 | 529 | require-directory@2.1.1: {} 530 | 531 | semver@7.7.1: {} 532 | 533 | side-channel-list@1.0.0: 534 | dependencies: 535 | es-errors: 1.3.0 536 | object-inspect: 1.13.4 537 | 538 | side-channel-map@1.0.1: 539 | dependencies: 540 | call-bound: 1.0.4 541 | es-errors: 1.3.0 542 | get-intrinsic: 1.3.0 543 | object-inspect: 1.13.4 544 | 545 | side-channel-weakmap@1.0.2: 546 | dependencies: 547 | call-bound: 1.0.4 548 | es-errors: 1.3.0 549 | get-intrinsic: 1.3.0 550 | object-inspect: 1.13.4 551 | side-channel-map: 1.0.1 552 | 553 | side-channel@1.1.0: 554 | dependencies: 555 | es-errors: 1.3.0 556 | object-inspect: 1.13.4 557 | side-channel-list: 1.0.0 558 | side-channel-map: 1.0.1 559 | side-channel-weakmap: 1.0.2 560 | 561 | string-width@4.2.3: 562 | dependencies: 563 | emoji-regex: 8.0.0 564 | is-fullwidth-code-point: 3.0.0 565 | strip-ansi: 6.0.1 566 | 567 | strip-ansi@6.0.1: 568 | dependencies: 569 | ansi-regex: 5.0.1 570 | 571 | ts-error@1.0.6: {} 572 | 573 | typescript@5.8.3: {} 574 | 575 | undici-types@6.21.0: {} 576 | 577 | wrap-ansi@7.0.0: 578 | dependencies: 579 | ansi-styles: 4.3.0 580 | string-width: 4.2.3 581 | strip-ansi: 6.0.1 582 | 583 | y18n@5.0.8: {} 584 | 585 | yaml@2.7.1: {} 586 | 587 | yargs-parser@21.1.1: {} 588 | 589 | yargs@17.7.2: 590 | dependencies: 591 | cliui: 8.0.1 592 | escalade: 3.2.0 593 | get-caller-file: 2.0.5 594 | require-directory: 2.1.1 595 | string-width: 4.2.3 596 | y18n: 5.0.8 597 | yargs-parser: 21.1.1 598 | 599 | zod@3.24.3: {} 600 | -------------------------------------------------------------------------------- /src/hatchet-client.ts: -------------------------------------------------------------------------------- 1 | import { HatchetClient } from '@hatchet-dev/typescript-sdk'; 2 | 3 | export const hatchet = HatchetClient.init(); 4 | -------------------------------------------------------------------------------- /src/run.ts: -------------------------------------------------------------------------------- 1 | import { simple } from './workflows/first-workflow'; 2 | 3 | async function main() { 4 | const res = await simple.run({ 5 | message: 'hello', 6 | }); 7 | 8 | console.log(res['first-task'].message); 9 | console.log(res['second-task'].message); 10 | } 11 | 12 | if (require.main === module) { 13 | main().catch(console.error).finally(() => process.exit(0)); 14 | } 15 | -------------------------------------------------------------------------------- /src/worker.ts: -------------------------------------------------------------------------------- 1 | import { hatchet } from './hatchet-client'; 2 | import { simple } from './workflows/first-workflow'; 3 | 4 | async function main() { 5 | const worker = await hatchet.worker('simple-worker', { 6 | workflows: [simple], 7 | }); 8 | 9 | await worker.start(); 10 | } 11 | 12 | if (require.main === module) { 13 | main(); 14 | } 15 | -------------------------------------------------------------------------------- /src/workflows/first-workflow.ts: -------------------------------------------------------------------------------- 1 | import { hatchet } from '../hatchet-client'; 2 | 3 | type Input = { 4 | message: string; 5 | }; 6 | 7 | type Output = { 8 | "first-task": { 9 | message: string; 10 | }; 11 | "second-task": { 12 | message: string; 13 | }; 14 | }; 15 | 16 | export const simple = hatchet.workflow({ 17 | name: 'first-workflow', 18 | }); 19 | 20 | const step1 = simple.task({ 21 | name: 'first-task', 22 | fn: (input) => { 23 | return { 24 | "message": "Hello, world!" 25 | }; 26 | }, 27 | }); 28 | 29 | const step2 = simple.task({ 30 | name: 'second-task', 31 | parents: [step1], 32 | fn: (input) => { 33 | return { 34 | "message": "Hello, moon!" 35 | }; 36 | }, 37 | }); 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "libReplacement": true, /* Enable lib replacement. */ 18 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 19 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 20 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 21 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 22 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 23 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 24 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 25 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 26 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 27 | 28 | /* Modules */ 29 | "module": "commonjs", /* Specify what module code is generated. */ 30 | // "rootDir": "./", /* Specify the root folder within your source files. */ 31 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 32 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 33 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 34 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 35 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 36 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 37 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 38 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 39 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 40 | // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ 41 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 42 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 43 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 44 | // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ 45 | // "resolveJsonModule": true, /* Enable importing .json files. */ 46 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 47 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 48 | 49 | /* JavaScript Support */ 50 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 51 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 52 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 53 | 54 | /* Emit */ 55 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 56 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 57 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 58 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 59 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 62 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 63 | // "removeComments": true, /* Disable emitting comments. */ 64 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 65 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 66 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 67 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 68 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 69 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 70 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 71 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 72 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 73 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 74 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 75 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 76 | 77 | /* Interop Constraints */ 78 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 79 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 80 | // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ 81 | // "erasableSyntaxOnly": true, /* Do not allow runtime constructs that are not part of ECMAScript. */ 82 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 83 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 84 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 85 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 86 | 87 | /* Type Checking */ 88 | "strict": true, /* Enable all strict type-checking options. */ 89 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 90 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 91 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 92 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 93 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 94 | // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ 95 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 96 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 97 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 98 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 99 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 100 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 101 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 102 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 103 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 104 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 105 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 106 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 107 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 108 | 109 | /* Completeness */ 110 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 111 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 112 | } 113 | } 114 | --------------------------------------------------------------------------------