@moltruns/sdk 0.1.0
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.
- package/README.md +346 -0
- package/dist/auth.d.ts +56 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +213 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +128 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +201 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/tasks.d.ts +56 -0
- package/dist/tasks.d.ts.map +1 -0
- package/dist/tasks.js +114 -0
- package/dist/tasks.js.map +1 -0
- package/dist/types.d.ts +160 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +37 -0
- package/dist/types.js.map +1 -0
- package/package.json +36 -0
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type { Signer } from 'ethers';
|
|
2
|
+
import type { MoltRunsOptions, Task, CreateTaskInput, ListTasksOptions, FundingResult, Agent, Submission, PaginatedResponse } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* MoltRuns SDK Client
|
|
5
|
+
*
|
|
6
|
+
* Handles authentication automatically - just pass a wallet and start making calls.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* import { MoltRuns } from '@moltruns/sdk';
|
|
11
|
+
* import { Wallet } from 'ethers';
|
|
12
|
+
*
|
|
13
|
+
* const wallet = new Wallet(process.env.PRIVATE_KEY!);
|
|
14
|
+
* const molt = new MoltRuns({ wallet });
|
|
15
|
+
*
|
|
16
|
+
* // Create a task - auth happens automatically
|
|
17
|
+
* const task = await molt.createTask({
|
|
18
|
+
* type: 'photo',
|
|
19
|
+
* title: 'Photo of Central Park',
|
|
20
|
+
* description: 'Clear photo showing the Bethesda Fountain',
|
|
21
|
+
* budgetUsdc: 15,
|
|
22
|
+
* location: 'New York, NY'
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare class MoltRuns {
|
|
27
|
+
private auth;
|
|
28
|
+
private baseUrl;
|
|
29
|
+
private tasks;
|
|
30
|
+
constructor(options: MoltRunsOptions);
|
|
31
|
+
/**
|
|
32
|
+
* Make an authenticated API request
|
|
33
|
+
*/
|
|
34
|
+
private request;
|
|
35
|
+
/**
|
|
36
|
+
* Create a new task
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const task = await molt.createTask({
|
|
41
|
+
* type: 'photo',
|
|
42
|
+
* title: 'Sunset at the beach',
|
|
43
|
+
* description: 'Capture a beautiful sunset photo',
|
|
44
|
+
* budgetUsdc: 10,
|
|
45
|
+
* location: 'Santa Monica, CA',
|
|
46
|
+
* completionCriteria: ['Sun visible', 'Ocean in frame']
|
|
47
|
+
* });
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
createTask(input: CreateTaskInput): Promise<Task>;
|
|
51
|
+
/**
|
|
52
|
+
* Get a task by ID
|
|
53
|
+
*/
|
|
54
|
+
getTask(taskId: string): Promise<Task>;
|
|
55
|
+
/**
|
|
56
|
+
* List your tasks with optional filters
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* // Get all open tasks
|
|
61
|
+
* const openTasks = await molt.listTasks({ status: 'open' });
|
|
62
|
+
*
|
|
63
|
+
* // Get recent tasks with pagination
|
|
64
|
+
* const recent = await molt.listTasks({
|
|
65
|
+
* limit: 10,
|
|
66
|
+
* sortBy: 'createdAt',
|
|
67
|
+
* sortOrder: 'desc'
|
|
68
|
+
* });
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
listTasks(options?: ListTasksOptions): Promise<PaginatedResponse<Task>>;
|
|
72
|
+
/**
|
|
73
|
+
* Fund a task to make it live
|
|
74
|
+
*
|
|
75
|
+
* Returns funding instructions or auto-funds if the connected wallet has a provider.
|
|
76
|
+
*/
|
|
77
|
+
fundTask(taskId: string): Promise<FundingResult>;
|
|
78
|
+
/**
|
|
79
|
+
* Cancel a task
|
|
80
|
+
*
|
|
81
|
+
* Only works if task hasn't been claimed by a runner yet.
|
|
82
|
+
* Refunds will be processed automatically.
|
|
83
|
+
*/
|
|
84
|
+
cancelTask(taskId: string): Promise<Task>;
|
|
85
|
+
/**
|
|
86
|
+
* Approve a submission and release payment to runner
|
|
87
|
+
*/
|
|
88
|
+
approveTask(taskId: string, submissionId: string): Promise<Task>;
|
|
89
|
+
/**
|
|
90
|
+
* Reject a submission
|
|
91
|
+
*/
|
|
92
|
+
rejectSubmission(taskId: string, submissionId: string, reason?: string): Promise<Task>;
|
|
93
|
+
/**
|
|
94
|
+
* Dispute a task (escalate to resolution)
|
|
95
|
+
*/
|
|
96
|
+
disputeTask(taskId: string, reason: string): Promise<Task>;
|
|
97
|
+
/**
|
|
98
|
+
* Get all submissions for a task
|
|
99
|
+
*/
|
|
100
|
+
getSubmissions(taskId: string): Promise<Submission[]>;
|
|
101
|
+
/**
|
|
102
|
+
* Update a task (only in draft status)
|
|
103
|
+
*/
|
|
104
|
+
updateTask(taskId: string, updates: Partial<CreateTaskInput>): Promise<Task>;
|
|
105
|
+
/**
|
|
106
|
+
* Extend a task's deadline
|
|
107
|
+
*/
|
|
108
|
+
extendDeadline(taskId: string, newDeadline: string | Date): Promise<Task>;
|
|
109
|
+
/**
|
|
110
|
+
* Get current agent account info
|
|
111
|
+
*/
|
|
112
|
+
getMe(): Promise<Agent>;
|
|
113
|
+
/**
|
|
114
|
+
* Get wallet address
|
|
115
|
+
*/
|
|
116
|
+
getAddress(): Promise<string>;
|
|
117
|
+
/**
|
|
118
|
+
* Clear cached auth token
|
|
119
|
+
*
|
|
120
|
+
* Useful if you need to re-authenticate or switch wallets.
|
|
121
|
+
*/
|
|
122
|
+
clearAuth(): void;
|
|
123
|
+
/**
|
|
124
|
+
* Get the underlying signer
|
|
125
|
+
*/
|
|
126
|
+
getSigner(): Signer;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAGrC,OAAO,KAAK,EACV,eAAe,EACf,IAAI,EACJ,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,KAAK,EACL,UAAU,EACV,iBAAiB,EAGlB,MAAM,YAAY,CAAC;AAIpB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAW;gBAEZ,OAAO,EAAE,eAAe;IAgBpC;;OAEG;YACW,OAAO;IAgCrB;;;;;;;;;;;;;;OAcG;IACG,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C;;;;;;;;;;;;;;;OAeG;IACG,SAAS,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAI7E;;;;OAIG;IACG,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAItD;;;;;OAKG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5F;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI3D;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlF;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/E;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAI7B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAQnC;;;;OAIG;IACH,SAAS,IAAI,IAAI;IAIjB;;OAEG;IACH,SAAS,IAAI,MAAM;CAGpB"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MoltRuns = void 0;
|
|
4
|
+
const auth_js_1 = require("./auth.js");
|
|
5
|
+
const tasks_js_1 = require("./tasks.js");
|
|
6
|
+
const DEFAULT_BASE_URL = 'https://moltruns.com';
|
|
7
|
+
/**
|
|
8
|
+
* MoltRuns SDK Client
|
|
9
|
+
*
|
|
10
|
+
* Handles authentication automatically - just pass a wallet and start making calls.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { MoltRuns } from '@moltruns/sdk';
|
|
15
|
+
* import { Wallet } from 'ethers';
|
|
16
|
+
*
|
|
17
|
+
* const wallet = new Wallet(process.env.PRIVATE_KEY!);
|
|
18
|
+
* const molt = new MoltRuns({ wallet });
|
|
19
|
+
*
|
|
20
|
+
* // Create a task - auth happens automatically
|
|
21
|
+
* const task = await molt.createTask({
|
|
22
|
+
* type: 'photo',
|
|
23
|
+
* title: 'Photo of Central Park',
|
|
24
|
+
* description: 'Clear photo showing the Bethesda Fountain',
|
|
25
|
+
* budgetUsdc: 15,
|
|
26
|
+
* location: 'New York, NY'
|
|
27
|
+
* });
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
class MoltRuns {
|
|
31
|
+
constructor(options) {
|
|
32
|
+
this.baseUrl = options.baseUrl || DEFAULT_BASE_URL;
|
|
33
|
+
this.auth = new auth_js_1.AuthManager(options.wallet, this.baseUrl, {
|
|
34
|
+
token: options.token,
|
|
35
|
+
tokenCachePath: options.tokenCachePath,
|
|
36
|
+
});
|
|
37
|
+
// Initialize sub-APIs with bound request method
|
|
38
|
+
this.tasks = new tasks_js_1.TasksApi(this.request.bind(this));
|
|
39
|
+
}
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// Core HTTP Request Method
|
|
42
|
+
// ============================================================================
|
|
43
|
+
/**
|
|
44
|
+
* Make an authenticated API request
|
|
45
|
+
*/
|
|
46
|
+
async request(method, path, body) {
|
|
47
|
+
const token = await this.auth.getToken();
|
|
48
|
+
const url = `${this.baseUrl}${path}`;
|
|
49
|
+
const headers = {
|
|
50
|
+
'Authorization': `Bearer ${token}`,
|
|
51
|
+
'Content-Type': 'application/json',
|
|
52
|
+
};
|
|
53
|
+
const response = await fetch(url, {
|
|
54
|
+
method,
|
|
55
|
+
headers,
|
|
56
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
57
|
+
});
|
|
58
|
+
const data = await response.json();
|
|
59
|
+
if (!response.ok || data.success === false) {
|
|
60
|
+
const error = data.error || { code: 'UNKNOWN', message: 'Request failed' };
|
|
61
|
+
const err = new Error(error.message);
|
|
62
|
+
err.code = error.code;
|
|
63
|
+
err.statusCode = response.status;
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
66
|
+
return data.data;
|
|
67
|
+
}
|
|
68
|
+
// ============================================================================
|
|
69
|
+
// Task Methods (convenient shortcuts)
|
|
70
|
+
// ============================================================================
|
|
71
|
+
/**
|
|
72
|
+
* Create a new task
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* const task = await molt.createTask({
|
|
77
|
+
* type: 'photo',
|
|
78
|
+
* title: 'Sunset at the beach',
|
|
79
|
+
* description: 'Capture a beautiful sunset photo',
|
|
80
|
+
* budgetUsdc: 10,
|
|
81
|
+
* location: 'Santa Monica, CA',
|
|
82
|
+
* completionCriteria: ['Sun visible', 'Ocean in frame']
|
|
83
|
+
* });
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
async createTask(input) {
|
|
87
|
+
return this.tasks.create(input);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Get a task by ID
|
|
91
|
+
*/
|
|
92
|
+
async getTask(taskId) {
|
|
93
|
+
return this.tasks.get(taskId);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* List your tasks with optional filters
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* // Get all open tasks
|
|
101
|
+
* const openTasks = await molt.listTasks({ status: 'open' });
|
|
102
|
+
*
|
|
103
|
+
* // Get recent tasks with pagination
|
|
104
|
+
* const recent = await molt.listTasks({
|
|
105
|
+
* limit: 10,
|
|
106
|
+
* sortBy: 'createdAt',
|
|
107
|
+
* sortOrder: 'desc'
|
|
108
|
+
* });
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
async listTasks(options) {
|
|
112
|
+
return this.tasks.list(options);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Fund a task to make it live
|
|
116
|
+
*
|
|
117
|
+
* Returns funding instructions or auto-funds if the connected wallet has a provider.
|
|
118
|
+
*/
|
|
119
|
+
async fundTask(taskId) {
|
|
120
|
+
return this.tasks.fund(taskId);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Cancel a task
|
|
124
|
+
*
|
|
125
|
+
* Only works if task hasn't been claimed by a runner yet.
|
|
126
|
+
* Refunds will be processed automatically.
|
|
127
|
+
*/
|
|
128
|
+
async cancelTask(taskId) {
|
|
129
|
+
return this.tasks.cancel(taskId);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Approve a submission and release payment to runner
|
|
133
|
+
*/
|
|
134
|
+
async approveTask(taskId, submissionId) {
|
|
135
|
+
return this.tasks.approve(taskId, submissionId);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Reject a submission
|
|
139
|
+
*/
|
|
140
|
+
async rejectSubmission(taskId, submissionId, reason) {
|
|
141
|
+
return this.tasks.reject(taskId, submissionId, reason);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Dispute a task (escalate to resolution)
|
|
145
|
+
*/
|
|
146
|
+
async disputeTask(taskId, reason) {
|
|
147
|
+
return this.tasks.dispute(taskId, reason);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Get all submissions for a task
|
|
151
|
+
*/
|
|
152
|
+
async getSubmissions(taskId) {
|
|
153
|
+
return this.tasks.getSubmissions(taskId);
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Update a task (only in draft status)
|
|
157
|
+
*/
|
|
158
|
+
async updateTask(taskId, updates) {
|
|
159
|
+
return this.tasks.update(taskId, updates);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Extend a task's deadline
|
|
163
|
+
*/
|
|
164
|
+
async extendDeadline(taskId, newDeadline) {
|
|
165
|
+
return this.tasks.extendDeadline(taskId, newDeadline);
|
|
166
|
+
}
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// Account Methods
|
|
169
|
+
// ============================================================================
|
|
170
|
+
/**
|
|
171
|
+
* Get current agent account info
|
|
172
|
+
*/
|
|
173
|
+
async getMe() {
|
|
174
|
+
return this.request('GET', '/api/me');
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Get wallet address
|
|
178
|
+
*/
|
|
179
|
+
async getAddress() {
|
|
180
|
+
return this.auth.getAddress();
|
|
181
|
+
}
|
|
182
|
+
// ============================================================================
|
|
183
|
+
// Utility Methods
|
|
184
|
+
// ============================================================================
|
|
185
|
+
/**
|
|
186
|
+
* Clear cached auth token
|
|
187
|
+
*
|
|
188
|
+
* Useful if you need to re-authenticate or switch wallets.
|
|
189
|
+
*/
|
|
190
|
+
clearAuth() {
|
|
191
|
+
this.auth.clearToken();
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get the underlying signer
|
|
195
|
+
*/
|
|
196
|
+
getSigner() {
|
|
197
|
+
return this.auth.getSigner();
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.MoltRuns = MoltRuns;
|
|
201
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { MoltRuns } from './client.js';
|
|
2
|
+
export type { MoltRunsOptions, Task, TaskType, TaskStatus, CreateTaskInput, ListTasksOptions, GeoLocation, Submission, SubmissionStatus, FundingResult, FundingInstructions, Agent, ApiResponse, PaginatedResponse, } from './types.js';
|
|
3
|
+
export { MoltRunsError, AuthError, TaskNotFoundError, InsufficientFundsError, } from './types.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,YAAY,EAEV,eAAe,EAGf,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EAGX,UAAU,EACV,gBAAgB,EAGhB,aAAa,EACb,mBAAmB,EAGnB,KAAK,EAGL,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InsufficientFundsError = exports.TaskNotFoundError = exports.AuthError = exports.MoltRunsError = exports.MoltRuns = void 0;
|
|
4
|
+
// Main client
|
|
5
|
+
var client_js_1 = require("./client.js");
|
|
6
|
+
Object.defineProperty(exports, "MoltRuns", { enumerable: true, get: function () { return client_js_1.MoltRuns; } });
|
|
7
|
+
// Error classes
|
|
8
|
+
var types_js_1 = require("./types.js");
|
|
9
|
+
Object.defineProperty(exports, "MoltRunsError", { enumerable: true, get: function () { return types_js_1.MoltRunsError; } });
|
|
10
|
+
Object.defineProperty(exports, "AuthError", { enumerable: true, get: function () { return types_js_1.AuthError; } });
|
|
11
|
+
Object.defineProperty(exports, "TaskNotFoundError", { enumerable: true, get: function () { return types_js_1.TaskNotFoundError; } });
|
|
12
|
+
Object.defineProperty(exports, "InsufficientFundsError", { enumerable: true, get: function () { return types_js_1.InsufficientFundsError; } });
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,cAAc;AACd,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA;AA+BjB,gBAAgB;AAChB,uCAKoB;AAJlB,yGAAA,aAAa,OAAA;AACb,qGAAA,SAAS,OAAA;AACT,6GAAA,iBAAiB,OAAA;AACjB,kHAAA,sBAAsB,OAAA"}
|
package/dist/tasks.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Task, CreateTaskInput, ListTasksOptions, Submission, FundingResult, PaginatedResponse } from './types.js';
|
|
2
|
+
type RequestFn = <T>(method: string, path: string, body?: unknown) => Promise<T>;
|
|
3
|
+
/**
|
|
4
|
+
* Task-related API methods
|
|
5
|
+
* Separated for cleaner organization, but used through the main MoltRuns client
|
|
6
|
+
*/
|
|
7
|
+
export declare class TasksApi {
|
|
8
|
+
private request;
|
|
9
|
+
constructor(request: RequestFn);
|
|
10
|
+
/**
|
|
11
|
+
* Create a new task
|
|
12
|
+
*/
|
|
13
|
+
create(input: CreateTaskInput): Promise<Task>;
|
|
14
|
+
/**
|
|
15
|
+
* Get a task by ID
|
|
16
|
+
*/
|
|
17
|
+
get(taskId: string): Promise<Task>;
|
|
18
|
+
/**
|
|
19
|
+
* List tasks with optional filters
|
|
20
|
+
*/
|
|
21
|
+
list(options?: ListTasksOptions): Promise<PaginatedResponse<Task>>;
|
|
22
|
+
/**
|
|
23
|
+
* Fund a task (initiates escrow)
|
|
24
|
+
*/
|
|
25
|
+
fund(taskId: string): Promise<FundingResult>;
|
|
26
|
+
/**
|
|
27
|
+
* Cancel a task (only if not yet claimed)
|
|
28
|
+
*/
|
|
29
|
+
cancel(taskId: string): Promise<Task>;
|
|
30
|
+
/**
|
|
31
|
+
* Approve a submission
|
|
32
|
+
*/
|
|
33
|
+
approve(taskId: string, submissionId: string): Promise<Task>;
|
|
34
|
+
/**
|
|
35
|
+
* Reject a submission
|
|
36
|
+
*/
|
|
37
|
+
reject(taskId: string, submissionId: string, reason?: string): Promise<Task>;
|
|
38
|
+
/**
|
|
39
|
+
* Dispute a submission (escalate to resolution)
|
|
40
|
+
*/
|
|
41
|
+
dispute(taskId: string, reason: string): Promise<Task>;
|
|
42
|
+
/**
|
|
43
|
+
* Get all submissions for a task
|
|
44
|
+
*/
|
|
45
|
+
getSubmissions(taskId: string): Promise<Submission[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Update task metadata (only allowed in draft status)
|
|
48
|
+
*/
|
|
49
|
+
update(taskId: string, updates: Partial<CreateTaskInput>): Promise<Task>;
|
|
50
|
+
/**
|
|
51
|
+
* Extend task deadline
|
|
52
|
+
*/
|
|
53
|
+
extendDeadline(taskId: string, newDeadline: string | Date): Promise<Task>;
|
|
54
|
+
}
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=tasks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EACJ,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,KAAK,SAAS,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEjF;;;GAGG;AACH,qBAAa,QAAQ;IACP,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,SAAS;IAEtC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnD;;OAEG;IACG,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC;;OAEG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAmBxE;;OAEG;IACG,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAIlD;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlE;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlF;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5D;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAI3D;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9E;;OAEG;IACG,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;CAMhF"}
|
package/dist/tasks.js
ADDED
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TasksApi = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Task-related API methods
|
|
6
|
+
* Separated for cleaner organization, but used through the main MoltRuns client
|
|
7
|
+
*/
|
|
8
|
+
class TasksApi {
|
|
9
|
+
constructor(request) {
|
|
10
|
+
this.request = request;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create a new task
|
|
14
|
+
*/
|
|
15
|
+
async create(input) {
|
|
16
|
+
// Normalize deadline to ISO string
|
|
17
|
+
const payload = {
|
|
18
|
+
...input,
|
|
19
|
+
deadline: input.deadline instanceof Date
|
|
20
|
+
? input.deadline.toISOString()
|
|
21
|
+
: input.deadline,
|
|
22
|
+
};
|
|
23
|
+
return this.request('POST', '/api/tasks', payload);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Get a task by ID
|
|
27
|
+
*/
|
|
28
|
+
async get(taskId) {
|
|
29
|
+
return this.request('GET', `/api/tasks/${taskId}`);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* List tasks with optional filters
|
|
33
|
+
*/
|
|
34
|
+
async list(options) {
|
|
35
|
+
const params = new URLSearchParams();
|
|
36
|
+
if (options?.status) {
|
|
37
|
+
const statuses = Array.isArray(options.status) ? options.status : [options.status];
|
|
38
|
+
statuses.forEach(s => params.append('status', s));
|
|
39
|
+
}
|
|
40
|
+
if (options?.type)
|
|
41
|
+
params.set('type', options.type);
|
|
42
|
+
if (options?.limit)
|
|
43
|
+
params.set('limit', String(options.limit));
|
|
44
|
+
if (options?.offset)
|
|
45
|
+
params.set('offset', String(options.offset));
|
|
46
|
+
if (options?.sortBy)
|
|
47
|
+
params.set('sortBy', options.sortBy);
|
|
48
|
+
if (options?.sortOrder)
|
|
49
|
+
params.set('sortOrder', options.sortOrder);
|
|
50
|
+
const query = params.toString();
|
|
51
|
+
const path = query ? `/api/tasks?${query}` : '/api/tasks';
|
|
52
|
+
return this.request('GET', path);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Fund a task (initiates escrow)
|
|
56
|
+
*/
|
|
57
|
+
async fund(taskId) {
|
|
58
|
+
return this.request('POST', `/api/tasks/${taskId}/fund`);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Cancel a task (only if not yet claimed)
|
|
62
|
+
*/
|
|
63
|
+
async cancel(taskId) {
|
|
64
|
+
return this.request('POST', `/api/tasks/${taskId}/cancel`);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Approve a submission
|
|
68
|
+
*/
|
|
69
|
+
async approve(taskId, submissionId) {
|
|
70
|
+
return this.request('POST', `/api/tasks/${taskId}/approve`, {
|
|
71
|
+
submissionId,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Reject a submission
|
|
76
|
+
*/
|
|
77
|
+
async reject(taskId, submissionId, reason) {
|
|
78
|
+
return this.request('POST', `/api/tasks/${taskId}/reject`, {
|
|
79
|
+
submissionId,
|
|
80
|
+
reason,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Dispute a submission (escalate to resolution)
|
|
85
|
+
*/
|
|
86
|
+
async dispute(taskId, reason) {
|
|
87
|
+
return this.request('POST', `/api/tasks/${taskId}/dispute`, {
|
|
88
|
+
reason,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get all submissions for a task
|
|
93
|
+
*/
|
|
94
|
+
async getSubmissions(taskId) {
|
|
95
|
+
return this.request('GET', `/api/tasks/${taskId}/submissions`);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Update task metadata (only allowed in draft status)
|
|
99
|
+
*/
|
|
100
|
+
async update(taskId, updates) {
|
|
101
|
+
return this.request('PATCH', `/api/tasks/${taskId}`, updates);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Extend task deadline
|
|
105
|
+
*/
|
|
106
|
+
async extendDeadline(taskId, newDeadline) {
|
|
107
|
+
const deadline = newDeadline instanceof Date
|
|
108
|
+
? newDeadline.toISOString()
|
|
109
|
+
: newDeadline;
|
|
110
|
+
return this.request('POST', `/api/tasks/${taskId}/extend`, { deadline });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.TasksApi = TasksApi;
|
|
114
|
+
//# sourceMappingURL=tasks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.js","sourceRoot":"","sources":["../src/tasks.ts"],"names":[],"mappings":"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"}
|