{"_id":"@akshatgiri/convex-orchestrator","_rev":"5-981317f17d180aca256b7d0fca4bee9d","name":"@akshatgiri/convex-orchestrator","dist-tags":{"alpha":"0.1.2-alpha.1","latest":"0.1.5"},"versions":{"0.1.2-alpha.0":{"name":"@akshatgiri/convex-orchestrator","version":"0.1.2-alpha.0","keywords":["convex","component"],"license":"Apache-2.0","_id":"@akshatgiri/convex-orchestrator@0.1.2-alpha.0","maintainers":[{"name":"akshatgiri","email":"akshatgiri@gmail.com"}],"homepage":"https://github.com/akshatgiri/convex-orchestrator#readme","bugs":{"url":"https://github.com/akshatgiri/convex-orchestrator/issues"},"dist":{"shasum":"c5372912544bd8407b640c9a14ce726f04368bc1","tarball":"https://registry.npmjs.org/@akshatgiri/convex-orchestrator/-/convex-orchestrator-0.1.2-alpha.0.tgz","fileCount":58,"integrity":"sha512-aaDoBVPsndFy7VLc3lc5JuP03nzH3VlQaTn7bEoMA6yVQjFeROw2BH4zp/7nxH4oi8ST2br2CJgjqu5c+ge5Gg==","signatures":[{"sig":"MEUCIEmfNjKQ2MAdIZY5ONtE7JNk+fSzZtdOgbzrfzCrTEEPAiEAqJ+R5kyIVFWdR93w5CvIUJqqGpvvIMZFSr/DTwcaT1Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":186968},"type":"module","types":"./dist/client/index.d.ts","module":"./dist/client/index.js","exports":{".":{"types":"./dist/client/index.d.ts","default":"./dist/client/index.js"},"./test":"./src/test.ts","./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./package.json":"./package.json","./convex.config":{"types":"./dist/component/convex.config.d.ts","default":"./dist/component/convex.config.js"},"./convex.config.js":{"types":"./dist/component/convex.config.d.ts","default":"./dist/component/convex.config.js"},"./_generated/component":{"types":"./dist/component/_generated/component.d.ts"},"./_generated/component.js":{"types":"./dist/component/_generated/component.d.ts"}},"gitHead":"4412caaedfb8c1d8b1e92c88f52d7979c1b385d7","scripts":{"all":"run-p -r 'dev:*' 'test:watch'","dev":"run-p -r 'dev:*'","lint":"eslint .","test":"vitest run --typecheck","alpha":"npm version prerelease --preid alpha && npm publish --tag alpha --access public && git push --follow-tags","build":"tsc --project ./tsconfig.build.json","predev":"path-exists .env.local dist || (npm run build && convex dev --once)","prepack":"npm run build","prepare":"npm run build","release":"npm version patch && npm publish --access public && git push --follow-tags","version":"vim -c 'normal o' -c 'normal o## '$npm_package_version CHANGELOG.md && prettier -w CHANGELOG.md && git add CHANGELOG.md","dev:build":"chokidar 'tsconfig*.json' 'src/**/*.ts' -i '**/*.test.ts' -c 'npm run build:codegen' --initial","typecheck":"tsc --noEmit && tsc -p example && tsc -p example/convex","preversion":"npm install --no-package-lock && npm run build:clean && run-p test lint typecheck","test:debug":"vitest --inspect-brk --no-file-parallelism","test:watch":"vitest --typecheck --clearScreen false","build:clean":"rm -rf dist *.tsbuildinfo && npm run build:codegen","dev:backend":"convex dev --typecheck-components","dev:frontend":"cd example && vite --clearScreen false","build:codegen":"npx convex codegen --component-dir ./src/component && npm run build","test:coverage":"vitest run --coverage --coverage.reporter=text","prepublishOnly":"npm whoami || npm login"},"_npmUser":{"name":"akshatgiri","email":"akshatgiri@gmail.com"},"repository":{"url":"git+https://github.com/akshatgiri/convex-orchestrator.git","type":"git"},"_npmVersion":"10.9.2","description":"A convex orchestrator component for Convex.","directories":{},"_nodeVersion":"23.5.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.3.1","react":"^19.2.3","convex":"1.31.6","eslint":"9.39.2","vitest":"4.0.18","cpy-cli":"^6.0.0","globals":"^17.1.0","prettier":"3.8.1","react-dom":"^19.2.3","@eslint/js":"9.39.2","pkg-pr-new":"^0.0.62","typescript":"5.9.3","@types/node":"^24.10.9","convex-test":"0.0.41","@types/react":"^19.2.9","chokidar-cli":"3.0.0","npm-run-all2":"8.0.4","path-exists-cli":"2.0.0","@edge-runtime/vm":"^5.0.0","@eslint/eslintrc":"^3.3.3","@types/react-dom":"^19.2.3","typescript-eslint":"8.53.1","eslint-plugin-react":"^7.37.5","@vitejs/plugin-react":"^5.1.2","@convex-dev/eslint-plugin":"^1.1.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.26"},"peerDependencies":{"react":"^18.3.1 || ^19.0.0","convex":"^1.31.6"},"_npmOperationalInternal":{"tmp":"tmp/convex-orchestrator_0.1.2-alpha.0_1769489427958_0.7989577248157878","host":"s3://npm-registry-packages-npm-production"}},"0.1.2-alpha.1":{"name":"@akshatgiri/convex-orchestrator","version":"0.1.2-alpha.1","keywords":["convex","component"],"license":"Apache-2.0","_id":"@akshatgiri/convex-orchestrator@0.1.2-alpha.1","maintainers":[{"name":"akshatgiri","email":"akshatgiri@gmail.com"}],"homepage":"https://github.com/akshatgiri/convex-orchestrator#readme","bugs":{"url":"https://github.com/akshatgiri/convex-orchestrator/issues"},"dist":{"shasum":"92888ade9a40a24dbfffb9dd129f235485340796","tarball":"https://registry.npmjs.org/@akshatgiri/convex-orchestrator/-/convex-orchestrator-0.1.2-alpha.1.tgz","fileCount":58,"integrity":"sha512-fvbghNKtjOd7qepEXle/Niei5GXUoiztSFqfN6by/UT7t6BR64a6XYF9AnncCvhlhnQMGfO2L9nDjZiXf3a/5g==","signatures":[{"sig":"MEUCIQDSBN9eIy65kHIx3fDzpI5PftKAbpET8knBCDv/8lDX1gIgAmUqFVkXmGkMgMFcWZ/s8sy+BN5EdDJxmnKl4YHpn8k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185510},"type":"module","types":"./dist/client/index.d.ts","module":"./dist/client/index.js","exports":{".":{"types":"./dist/client/index.d.ts","default":"./dist/client/index.js"},"./test":"./src/test.ts","./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./package.json":"./package.json","./convex.config":{"types":"./dist/component/convex.config.d.ts","default":"./dist/component/convex.config.js"},"./convex.config.js":{"types":"./dist/component/convex.config.d.ts","default":"./dist/component/convex.config.js"},"./_generated/component":{"types":"./dist/component/_generated/component.d.ts"},"./_generated/component.js":{"types":"./dist/component/_generated/component.d.ts"}},"gitHead":"91747866f94ff085dc74f6fe12ae1a737076b66f","scripts":{"all":"run-p -r 'dev:*' 'test:watch'","dev":"run-p -r 'dev:*'","lint":"eslint .","test":"vitest run --typecheck","alpha":"npm version prerelease --preid alpha && npm publish --tag alpha --access public && git push --follow-tags","build":"tsc --project ./tsconfig.build.json","predev":"path-exists .env.local dist || (npm run build && convex dev --once)","prepack":"npm run build","prepare":"npm run build","release":"npm version patch && npm publish --access public && git push --follow-tags","version":"vim -c 'normal o' -c 'normal o## '$npm_package_version CHANGELOG.md && prettier -w CHANGELOG.md && git add CHANGELOG.md","dev:build":"chokidar 'tsconfig*.json' 'src/**/*.ts' -i '**/*.test.ts' -c 'npm run build:codegen' --initial","typecheck":"tsc --noEmit && tsc -p example && tsc -p example/convex","preversion":"npm install --no-package-lock && npm run build:clean && run-p test lint typecheck","test:debug":"vitest --inspect-brk --no-file-parallelism","test:watch":"vitest --typecheck --clearScreen false","build:clean":"rm -rf dist *.tsbuildinfo && npm run build:codegen","dev:backend":"convex dev --typecheck-components","dev:frontend":"cd example && vite --clearScreen false","build:codegen":"npx convex codegen --component-dir ./src/component && npm run build","test:coverage":"vitest run --coverage --coverage.reporter=text","prepublishOnly":"npm whoami || npm login"},"_npmUser":{"name":"akshatgiri","email":"akshatgiri@gmail.com"},"repository":{"url":"git+https://github.com/akshatgiri/convex-orchestrator.git","type":"git"},"_npmVersion":"10.9.2","description":"A convex orchestrator component for Convex.","directories":{},"_nodeVersion":"23.5.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"vite":"7.3.1","react":"^19.2.3","convex":"1.31.6","eslint":"9.39.2","vitest":"4.0.18","cpy-cli":"^6.0.0","globals":"^17.1.0","prettier":"3.8.1","react-dom":"^19.2.3","@eslint/js":"9.39.2","pkg-pr-new":"^0.0.62","typescript":"5.9.3","@types/node":"^24.10.9","convex-test":"0.0.41","@types/react":"^19.2.9","chokidar-cli":"3.0.0","npm-run-all2":"8.0.4","path-exists-cli":"2.0.0","@edge-runtime/vm":"^5.0.0","@eslint/eslintrc":"^3.3.3","@types/react-dom":"^19.2.3","typescript-eslint":"8.53.1","eslint-plugin-react":"^7.37.5","@vitejs/plugin-react":"^5.1.2","@convex-dev/eslint-plugin":"^1.1.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.26"},"peerDependencies":{"react":"^18.3.1 || ^19.0.0","convex":"^1.31.6"},"_npmOperationalInternal":{"tmp":"tmp/convex-orchestrator_0.1.2-alpha.1_1769489889082_0.4593725071774051","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@akshatgiri/convex-orchestrator","version":"0.1.2","keywords":["convex","component"],"license":"Apache-2.0","_id":"@akshatgiri/convex-orchestrator@0.1.2","maintainers":[{"name":"akshatgiri","email":"akshatgiri@gmail.com"}],"homepage":"https://github.com/akshatgiri/convex-orchestrator#readme","bugs":{"url":"https://github.com/akshatgiri/convex-orchestrator/issues"},"dist":{"shasum":"63808a2aa31a46ad74b767df41c40df3ccbe5f54","tarball":"https://registry.npmjs.org/@akshatgiri/convex-orchestrator/-/convex-orchestrator-0.1.2.tgz","fileCount":58,"integrity":"sha512-zcM+MtaM3L4zGrovD11OKj17Uy6JFpOUtaLlgRg/9ik7/hJpJt5q9lszgiRp5NyF3kIBBGkspjnzelC5SuUIcw==","signatures":[{"sig":"MEUCIESnSmULGnMt/QYArjkSNqEzd+ZOd2OzU80f19fwWL/7AiEAhMCOw2C2pDolr6ZDrKiQ+m/ClD2dvpL1bnNUM+s7HSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185502},"type":"module","types":"./dist/client/index.d.ts","module":"./dist/client/index.js","exports":{".":{"types":"./dist/client/index.d.ts","default":"./dist/client/index.js"},"./test":"./src/test.ts","./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./package.json":"./package.json","./convex.config":{"types":"./dist/component/convex.config.d.ts","default":"./dist/component/convex.config.js"},"./convex.config.js":{"types":"./dist/component/convex.config.d.ts","default":"./dist/component/convex.config.js"},"./_generated/component":{"types":"./dist/component/_generated/component.d.ts"},"./_generated/component.js":{"types":"./dist/component/_generated/component.d.ts"}},"gitHead":"26b4c8c44b28c036b111c0182275dbaaa9ccd6af","scripts":{"all":"run-p -r 'dev:*' 'test:watch'","dev":"run-p -r 'dev:*'","lint":"eslint .","test":"vitest run --typecheck","alpha":"npm version prerelease --preid alpha && npm publish --tag alpha --access public && git push --follow-tags","build":"tsc --project ./tsconfig.build.json","predev":"path-exists .env.local dist || (npm run build && convex dev --once)","prepack":"npm run build","prepare":"npm run build","release":"npm version patch && npm publish --access public && git push --follow-tags","version":"vim -c 'normal o' -c 'normal o## '$npm_package_version CHANGELOG.md && prettier -w CHANGELOG.md && git add CHANGELOG.md","dev:build":"chokidar 'tsconfig*.json' 'src/**/*.ts' -i '**/*.test.ts' -c 'npm run build:codegen' --initial","typecheck":"tsc --noEmit && tsc -p example && tsc -p example/convex","preversion":"npm install --no-package-lock && npm run build:clean && run-p test lint typecheck","test:debug":"vitest --inspect-brk --no-file-parallelism","test:watch":"vitest --typecheck --clearScreen false","build:clean":"rm -rf dist *.tsbuildinfo && npm run build:codegen","dev:backend":"convex dev --typecheck-components","dev:frontend":"cd example && vite --clearScreen false","build:codegen":"npx convex codegen --component-dir ./src/component && npm run build","test:coverage":"vitest run --coverage --coverage.reporter=text","prepublishOnly":"npm whoami || npm login"},"_npmUser":{"name":"akshatgiri","email":"akshatgiri@gmail.com"},"repository":{"url":"git+https://github.com/akshatgiri/convex-orchestrator.git","type":"git"},"_npmVersion":"10.9.2","description":"A convex orchestrator component for Convex.","directories":{},"_nodeVersion":"23.5.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.3.1","react":"^19.2.3","convex":"1.31.6","eslint":"9.39.2","vitest":"4.0.18","cpy-cli":"^6.0.0","globals":"^17.1.0","prettier":"3.8.1","react-dom":"^19.2.3","@eslint/js":"9.39.2","pkg-pr-new":"^0.0.62","typescript":"5.9.3","@types/node":"^24.10.9","convex-test":"0.0.41","@types/react":"^19.2.9","chokidar-cli":"3.0.0","npm-run-all2":"8.0.4","path-exists-cli":"2.0.0","@edge-runtime/vm":"^5.0.0","@eslint/eslintrc":"^3.3.3","@types/react-dom":"^19.2.3","typescript-eslint":"8.53.1","eslint-plugin-react":"^7.37.5","@vitejs/plugin-react":"^5.1.2","@convex-dev/eslint-plugin":"^1.1.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.26"},"peerDependencies":{"react":"^18.3.1 || ^19.0.0","convex":"^1.31.6"},"_npmOperationalInternal":{"tmp":"tmp/convex-orchestrator_0.1.2_1769490072944_0.9986436072942977","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@akshatgiri/convex-orchestrator","version":"0.1.3","keywords":["convex","component"],"license":"Apache-2.0","_id":"@akshatgiri/convex-orchestrator@0.1.3","maintainers":[{"name":"akshatgiri","email":"akshatgiri@gmail.com"}],"homepage":"https://github.com/akshatgiri/convex-orchestrator#readme","bugs":{"url":"https://github.com/akshatgiri/convex-orchestrator/issues"},"dist":{"shasum":"0ceaea96f081379f5b5a0571ebb80ccb8640e1af","tarball":"https://registry.npmjs.org/@akshatgiri/convex-orchestrator/-/convex-orchestrator-0.1.3.tgz","fileCount":58,"integrity":"sha512-ERYdr5sj/6pWUfkksiQbg14r9GdH1DmpcJBOJ0Va8wVUJlGQZ1GR3rdkcrS8uP5GjwJjnWG6VCCbb1Z2+fHoRQ==","signatures":[{"sig":"MEYCIQCvqVwt0oZjXl01DmRCe0JmIMDLNTxvVvAZGwIu2IBRXAIhAOByc0n3AMpVL5ZIWgk6Es+zx3mHF/qP2bvyEfPj+YWk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":203938},"type":"module","types":"./dist/client/index.d.ts","module":"./dist/client/index.js","exports":{".":{"types":"./dist/client/index.d.ts","default":"./dist/client/index.js"},"./test":"./src/test.ts","./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./package.json":"./package.json","./convex.config":{"types":"./dist/component/convex.config.d.ts","default":"./dist/component/convex.config.js"},"./convex.config.js":{"types":"./dist/component/convex.config.d.ts","default":"./dist/component/convex.config.js"},"./_generated/component":{"types":"./dist/component/_generated/component.d.ts"},"./_generated/component.js":{"types":"./dist/component/_generated/component.d.ts"}},"gitHead":"86f63dc5211cc243f5112e3a8a1e2eb500436e11","scripts":{"all":"run-p -r 'dev:*' 'test:watch'","dev":"run-p -r 'dev:*'","lint":"eslint .","test":"vitest run --typecheck","alpha":"npm version prerelease --preid alpha && npm publish --tag alpha --access public && git push --follow-tags","build":"tsc --project ./tsconfig.build.json","predev":"path-exists .env.local dist || (npm run build && convex dev --once)","prepack":"npm run build","prepare":"npm run build","release":"npm version patch && npm publish --access public && git push --follow-tags","version":"vim -c 'normal o' -c 'normal o## '$npm_package_version CHANGELOG.md && prettier -w CHANGELOG.md && git add CHANGELOG.md","dev:build":"chokidar 'tsconfig*.json' 'src/**/*.ts' -i '**/*.test.ts' -c 'npm run build:codegen' --initial","typecheck":"tsc --noEmit && tsc -p example && tsc -p example/convex","preversion":"npm ci && npm run build:clean && run-p test lint typecheck","test:debug":"vitest --inspect-brk --no-file-parallelism","test:watch":"vitest --typecheck --clearScreen false","build:clean":"rm -rf dist *.tsbuildinfo && npm run build:codegen","dev:backend":"convex dev --typecheck-components","dev:frontend":"cd example && vite --clearScreen false","build:codegen":"npx convex codegen --component-dir ./src/component && npm run build","test:coverage":"vitest run --coverage --coverage.reporter=text","prepublishOnly":"npm whoami || npm login"},"_npmUser":{"name":"akshatgiri","email":"akshatgiri@gmail.com"},"repository":{"url":"git+https://github.com/akshatgiri/convex-orchestrator.git","type":"git"},"_npmVersion":"10.9.2","description":"A convex orchestrator component for Convex.","directories":{},"_nodeVersion":"23.5.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"7.3.1","react":"^19.2.3","convex":"1.31.6","eslint":"9.39.2","vitest":"4.0.18","cpy-cli":"^6.0.0","globals":"^17.1.0","prettier":"3.8.1","react-dom":"^19.2.3","@eslint/js":"9.39.2","pkg-pr-new":"^0.0.62","typescript":"5.9.3","@types/node":"^24.10.9","convex-test":"0.0.41","@types/react":"^19.2.9","chokidar-cli":"3.0.0","npm-run-all2":"8.0.4","path-exists-cli":"2.0.0","@edge-runtime/vm":"^5.0.0","@eslint/eslintrc":"^3.3.3","@types/react-dom":"^19.2.3","typescript-eslint":"8.53.1","eslint-plugin-react":"^7.37.5","@vitejs/plugin-react":"^5.1.2","@convex-dev/eslint-plugin":"^1.1.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.26"},"peerDependencies":{"react":"^18.3.1 || ^19.0.0","convex":"^1.31.6"},"_npmOperationalInternal":{"tmp":"tmp/convex-orchestrator_0.1.3_1769494693767_0.8200806883584864","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@akshatgiri/convex-orchestrator","description":"A convex orchestrator component for Convex.","repository":{"type":"git","url":"git+https://github.com/akshatgiri/convex-orchestrator.git"},"homepage":"https://github.com/akshatgiri/convex-orchestrator#readme","bugs":{"url":"https://github.com/akshatgiri/convex-orchestrator/issues"},"version":"0.1.5","license":"Apache-2.0","keywords":["convex","component"],"type":"module","scripts":{"dev":"run-p -r 'dev:*'","dev:backend":"convex dev --typecheck-components","dev:frontend":"cd example && vite --clearScreen false","dev:build":"chokidar 'tsconfig*.json' 'src/**/*.ts' -i '**/*.test.ts' -c 'npm run build:codegen' --initial","predev":"path-exists .env.local dist || (npm run build && convex dev --once)","build":"tsc --project ./tsconfig.build.json","build:codegen":"npx convex codegen --component-dir ./src/component && npm run build","build:clean":"rm -rf dist *.tsbuildinfo && npm run build:codegen","typecheck":"tsc --noEmit && tsc -p example && tsc -p example/convex","lint":"eslint .","all":"run-p -r 'dev:*' 'test:watch'","test":"vitest run --typecheck","test:watch":"vitest --typecheck --clearScreen false","test:debug":"vitest --inspect-brk --no-file-parallelism","test:coverage":"vitest run --coverage --coverage.reporter=text","verify:exports":"node scripts/verify-exports.mjs","preversion":"npm ci && npm run build:clean && run-p test lint typecheck verify:exports","prepublishOnly":"npm whoami || npm login","prepare":"npm run build","prepack":"npm run build && npm run verify:exports","alpha":"npm version prerelease --preid alpha && npm publish --tag alpha --access public && git push --follow-tags","release":"npm version patch && npm publish --access public && git push --follow-tags","version":"vim -c 'normal o' -c 'normal o## '$npm_package_version CHANGELOG.md && prettier -w CHANGELOG.md && git add CHANGELOG.md"},"publishConfig":{"access":"public"},"exports":{"./package.json":"./package.json",".":{"types":"./dist/client/index.d.ts","default":"./dist/client/index.js"},"./react":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./test":"./src/test.ts","./_generated/component.js":{"types":"./dist/component/_generated/component.d.ts"},"./_generated/component":{"types":"./dist/component/_generated/component.d.ts"},"./convex.config.js":{"types":"./dist/component/convex.config.d.ts","default":"./dist/component/convex.config.js"},"./convex.config":{"types":"./dist/component/convex.config.d.ts","default":"./dist/component/convex.config.js"}},"peerDependencies":{"convex":"^1.31.6","react":"^18.3.1 || ^19.0.0"},"devDependencies":{"@convex-dev/eslint-plugin":"^1.1.1","@edge-runtime/vm":"^5.0.0","@eslint/eslintrc":"^3.3.3","@eslint/js":"9.39.2","@types/node":"^24.10.9","@types/react":"^19.2.9","@types/react-dom":"^19.2.3","@vitejs/plugin-react":"^5.1.2","chokidar-cli":"3.0.0","convex":"^1.31.6","convex-test":"0.0.41","cpy-cli":"^6.0.0","eslint":"9.39.2","eslint-plugin-react":"^7.37.5","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.26","globals":"^17.1.0","npm-run-all2":"8.0.4","path-exists-cli":"2.0.0","pkg-pr-new":"^0.0.62","prettier":"3.8.1","react":"^19.2.3","react-dom":"^19.2.3","typescript":"5.9.3","typescript-eslint":"8.53.1","vite":"7.3.1","vitest":"4.0.18"},"types":"./dist/client/index.d.ts","module":"./dist/client/index.js","_id":"@akshatgiri/convex-orchestrator@0.1.5","gitHead":"68427d858c542256b5d502cb7e044a0acec8779d","_nodeVersion":"23.5.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-J8QIptLWXg48mDcIram6JlFLe2L6BrMYTclQ+dIeq0GkuFGCaKNX/A82JBP+E3+mmH+qqouF6UPvv1+HWaUVyA==","shasum":"e121724844fdc4ca6fb345ad08027fe805f6c595","tarball":"https://registry.npmjs.org/@akshatgiri/convex-orchestrator/-/convex-orchestrator-0.1.5.tgz","fileCount":58,"unpackedSize":299175,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEffr9udUNWz6NOsU+DXkfz3lcWKkfhXT/wueY5Y6YwTAiEArKXwXXc9kFIxNkP2kwCr07ctN35Yp5WMj5p/YD3vcps="}]},"_npmUser":{"name":"akshatgiri","email":"akshatgiri@gmail.com"},"directories":{},"maintainers":[{"name":"akshatgiri","email":"akshatgiri@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/convex-orchestrator_0.1.5_1769623357713_0.5382201951107868"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-27T04:50:27.832Z","modified":"2026-01-28T18:02:37.996Z","0.1.2-alpha.0":"2026-01-27T04:50:28.119Z","0.1.2-alpha.1":"2026-01-27T04:58:09.230Z","0.1.2":"2026-01-27T05:01:13.091Z","0.1.3":"2026-01-27T06:18:13.938Z","0.1.5":"2026-01-28T18:02:37.873Z"},"bugs":{"url":"https://github.com/akshatgiri/convex-orchestrator/issues"},"license":"Apache-2.0","homepage":"https://github.com/akshatgiri/convex-orchestrator#readme","keywords":["convex","component"],"repository":{"type":"git","url":"git+https://github.com/akshatgiri/convex-orchestrator.git"},"description":"A convex orchestrator component for Convex.","maintainers":[{"name":"akshatgiri","email":"akshatgiri@gmail.com"}],"readme":"# @akshatgiri/convex-orchestrator\n\nDurable workflow orchestration on Convex where *step execution happens on your machines* (workers pull work from Convex), inspired by Temporal’s worker model.\n\nThis project is early-stage. The API may change.\n\n## What you get\n\n- Durable workflow runs stored in Convex (`workflows` + `steps` tables)\n- A worker SDK (`createWorker`, `workflow`, `ctx.step`) that executes activities locally and records step results durably\n- Leasing + heartbeats so workflows can be reclaimed if a worker dies\n- Simple dashboard primitives: list workflows, view workflow + steps\n\n## Install\n\n```sh\nnpm i @akshatgiri/convex-orchestrator\n```\n\n## Add the component to your Convex app\n\n```ts\n// convex/convex.config.ts\nimport { defineApp } from \"convex/server\";\nimport convexOrchestrator from \"@akshatgiri/convex-orchestrator/convex.config.js\";\n\nconst app = defineApp();\napp.use(convexOrchestrator);\n\nexport default app;\n```\n\n## Expose API from your app\n\nCreate a module in your Convex app (for example `convex/orchestrator.ts`) and export:\n\n```ts\n// convex/orchestrator.ts\nimport { components } from \"./_generated/api.js\";\nimport { exposeApi, exposeApiWithWorker } from \"@akshatgiri/convex-orchestrator\";\n\n// Safe to expose to clients (dashboard + starters)\nexport const {\n  startWorkflow,\n  getWorkflow,\n  listWorkflows,\n  getWorkflowSteps,\n  signalWorkflow,\n} = exposeApi(components.convexOrchestrator);\n\n// Worker operations (DO NOT expose without auth in production)\nexport const {\n  claimWorkflow,\n  heartbeat,\n  completeWorkflow,\n  failWorkflow,\n  getOrCreateStep,\n  scheduleSleep,\n  waitForSignal,\n  completeStep,\n  failStep,\n  subscribePendingWorkflows,\n} = exposeApiWithWorker(components.convexOrchestrator, {\n  authorize: async (ctx) => {\n    // TODO: implement real auth (service token / identity / secret)\n    // Returning true is fine for local dev, unsafe for production.\n    void ctx;\n    return true;\n  },\n});\n```\n\n## Define workflows\n\n```ts\nimport { workflow } from \"@akshatgiri/convex-orchestrator\";\n\nconst greet = workflow(\"greet\", async (ctx, input: { name: string }) => {\n  const greeting = await ctx.step(\"greeting\", async () => `Hello, ${input.name}!`);\n  return { greeting };\n});\n```\n\n## Run a worker (on your machine)\n\n```ts\nimport { ConvexClient } from \"convex/browser\";\nimport { createWorker } from \"@akshatgiri/convex-orchestrator\";\nimport { api } from \"./convex/_generated/api.js\";\n\nconst client = new ConvexClient(process.env.CONVEX_URL!);\n\nconst worker = createWorker(client, api.orchestrator, {\n  workflows: [greet],\n  maxConcurrentWorkflows: 4,\n});\nawait worker.start();\n```\n\n## Start a workflow\n\nFrom any Convex client:\n\n```ts\nawait client.mutation(api.orchestrator.startWorkflow, {\n  name: \"greet\",\n  input: { name: \"World\" },\n});\n```\n\n## Execution model (important)\n\n- `ctx.step(\"name\", fn)` is durable: the first successful result is stored and returned on replay.\n- `ctx.sleep(\"marker\", durationMs)` / `ctx.sleepUntil(\"marker\", timestamp)` are durable and replay-safe (the marker is persisted).\n- `ctx.sleep*` is **not allowed** inside `ctx.step` callbacks.\n- `await ctx.waitForSignal(\"marker\", \"signalName\")` parks the workflow until `signalWorkflow(...)` is called and is replay-safe.\n- Steps are **at-least-once** from the perspective of your side effects. Make your step code idempotent.\n- Workers hold a **lease** and heartbeat while executing. If the lease expires, another worker may reclaim the workflow; the original worker should stop writing results.\n\n## Durable sleep / timers\n\nWorkflows replay from the top on resume, so sleep must have a durable marker to avoid re-sleeping forever.\n\n```ts\nconst reminder = workflow(\"reminder\", async (ctx, input: { email: string }) => {\n  await ctx.step(\"send-welcome\", () => activities.sendEmail(input.email, \"Welcome!\"));\n\n  // Replay-safe: uses the marker to persist sleepUntil durably.\n  await ctx.sleep(\"followup-delay\", 24 * 60 * 60 * 1000);\n\n  await ctx.step(\"send-followup\", () => activities.sendEmail(input.email, \"How's it going?\"));\n});\n```\n\nThe marker must be stable/deterministic across replays (e.g. a literal string for that sleep site).\n\n## Signals\n\n```ts\nconst approval = workflow(\"approval\", async (ctx) => {\n  await ctx.step(\"request-approval\", () => activities.sendApprovalEmail());\n\n  const decision = await ctx.waitForSignal<{ approved: boolean }>(\n    \"approval-decision\",\n    \"approved\",\n  );\n\n  if (decision.approved) {\n    await ctx.step(\"provision\", () => activities.provisionAccess());\n  }\n});\n```\n\nSend the signal from your app (auth it appropriately):\n\n```ts\nawait client.mutation(api.orchestrator.signalWorkflow, {\n  workflowId,\n  signal: \"approved\",\n  payload: { approved: true },\n});\n```\n\n## Demo (this repo)\n\n```sh\nnpm i\nnpm run dev\n```\n\nIn another terminal:\n\n```sh\nbun example/worker.ts\nbun example/trigger.ts greet\n```\n\n## Limitations / TODOs\n\n- No cancellations/terminations yet (cancel a workflow run, cancel a sleep, cancel waitForSignal, etc.)\n- No retries/backoff yet (step-level retry policy, transient vs permanent failures, jitter)\n- No workflow versioning yet (pin long-lived runs to a workflow build/version; safe schema evolution for step outputs)\n- Signals need more semantics (timeouts, buffering/multiple signals, retention/GC for the signal inbox)\n- No built-in worker authentication/authorization (you must enforce this in your app)\n- Observability is minimal (no structured logs/metrics/tracing yet)\n- Production hardening still needed (rate limiting/backpressure for high worker concurrency, idempotency patterns for side effects)\n\n## Contributing\n\nIssues/PRs welcome: https://github.com/akshatgiri/convex-orchestrator/issues\n","readmeFilename":"README.md"}