TypeScript SDK
Job Wrapper
TypeScript wrapper for on-chain Job contract interaction.
Source:
wrappers/Job.tsConfiguration
TypeScript
import { Job, JobConfig } from '../wrappers/Job';
const config: JobConfig = {
jobId: 0,
factoryAddress: factory.address,
clientAddress: client.address,
evaluatorAddress: evaluator.address,
budget: toNano('1'),
descriptionHash: BigInt('0x1234...'),
timeout: 86400,
evalTimeout: 86400,
};Operations
TypeScript
await job.sendFund(client.getSender(), toNano('1.1'));
await job.sendTakeJob(provider.getSender(), toNano('0.05'));
await job.sendSubmitResult(provider.getSender(), toNano('0.05'), resultHash, 0);
await job.sendEvaluate(evaluator.getSender(), toNano('0.05'), true, 0n);
await job.sendCancel(client.getSender(), toNano('0.05'));
await job.sendClaim(provider.getSender(), toNano('0.05'));
await job.sendQuit(provider.getSender(), toNano('0.05'));
await job.sendSetBudget(client.getSender(), toNano('0.05'), toNano('2'));Getters
TypeScript
const state = await job.getState(); const data = await job.getJobData();
Common Patterns
Create & Fund a Job
TypeScript
const factory = provider.open(JobFactory.createFromAddress(factoryAddr));
await factory.sendCreateJob(client.getSender(), toNano('0.15'), {
evaluator: evalAddr, budget: toNano('2'), descriptionHash: descHash,
timeout: 86400, evalTimeout: 86400
});
const job = provider.open(Job.createFromAddress(await factory.getJobAddress(0)));
await job.sendFund(client.getSender(), toNano('2.1'));Provider Claims After Timeout
TypeScript
// If evaluator is silent for 24h after submission:
await job.sendClaim(provider.getSender(), toNano('0.05'));
// Funds automatically transfer to providerHandle Rejection & Retry
TypeScript
const state = await job.getState();
if (state === 4) { // DISPUTED — rejected
// Client was refunded, create a new job with updated requirements
await factory.sendCreateJob(client.getSender(), toNano('0.15'), newConfig);
}For deploying new jobs programmatically, see JobFactory Wrapper. For connecting an LLM agent, see MCP Server.