@wiro-ai/wiro-mcp 1.1.4 → 1.2.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.
Files changed (69) hide show
  1. package/README.md +87 -5
  2. package/dist/client.d.ts +46 -11
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +239 -22
  5. package/dist/client.js.map +1 -1
  6. package/dist/tools/cancel-task.d.ts.map +1 -1
  7. package/dist/tools/cancel-task.js +34 -4
  8. package/dist/tools/cancel-task.js.map +1 -1
  9. package/dist/tools/explore.d.ts.map +1 -1
  10. package/dist/tools/explore.js +17 -1
  11. package/dist/tools/explore.js.map +1 -1
  12. package/dist/tools/get-model-schema.d.ts.map +1 -1
  13. package/dist/tools/get-model-schema.js +18 -2
  14. package/dist/tools/get-model-schema.js.map +1 -1
  15. package/dist/tools/get-task-price.d.ts.map +1 -1
  16. package/dist/tools/get-task-price.js +38 -5
  17. package/dist/tools/get-task-price.js.map +1 -1
  18. package/dist/tools/get-task.d.ts +1 -1
  19. package/dist/tools/get-task.d.ts.map +1 -1
  20. package/dist/tools/get-task.js +77 -7
  21. package/dist/tools/get-task.js.map +1 -1
  22. package/dist/tools/index.d.ts +3 -1
  23. package/dist/tools/index.d.ts.map +1 -1
  24. package/dist/tools/index.js +5 -1
  25. package/dist/tools/index.js.map +1 -1
  26. package/dist/tools/kill-task.d.ts.map +1 -1
  27. package/dist/tools/kill-task.js +34 -4
  28. package/dist/tools/kill-task.js.map +1 -1
  29. package/dist/tools/list-tasks.d.ts +4 -0
  30. package/dist/tools/list-tasks.d.ts.map +1 -0
  31. package/dist/tools/list-tasks.js +89 -0
  32. package/dist/tools/list-tasks.js.map +1 -0
  33. package/dist/tools/recommend-model.d.ts.map +1 -1
  34. package/dist/tools/recommend-model.js +51 -4
  35. package/dist/tools/recommend-model.js.map +1 -1
  36. package/dist/tools/run-model.d.ts +1 -1
  37. package/dist/tools/run-model.d.ts.map +1 -1
  38. package/dist/tools/run-model.js +115 -19
  39. package/dist/tools/run-model.js.map +1 -1
  40. package/dist/tools/schemas.d.ts +683 -0
  41. package/dist/tools/schemas.d.ts.map +1 -0
  42. package/dist/tools/schemas.js +134 -0
  43. package/dist/tools/schemas.js.map +1 -0
  44. package/dist/tools/search-docs.d.ts.map +1 -1
  45. package/dist/tools/search-docs.js +30 -4
  46. package/dist/tools/search-docs.js.map +1 -1
  47. package/dist/tools/search-models.d.ts.map +1 -1
  48. package/dist/tools/search-models.js +65 -15
  49. package/dist/tools/search-models.js.map +1 -1
  50. package/dist/tools/upload-file.d.ts.map +1 -1
  51. package/dist/tools/upload-file.js +42 -4
  52. package/dist/tools/upload-file.js.map +1 -1
  53. package/dist/tools/wait-for-task.d.ts +4 -0
  54. package/dist/tools/wait-for-task.d.ts.map +1 -0
  55. package/dist/tools/wait-for-task.js +121 -0
  56. package/dist/tools/wait-for-task.js.map +1 -0
  57. package/dist/types.d.ts +8 -1
  58. package/dist/types.d.ts.map +1 -1
  59. package/dist/types.js +3 -0
  60. package/dist/types.js.map +1 -1
  61. package/dist/utils/format.d.ts +10 -0
  62. package/dist/utils/format.d.ts.map +1 -1
  63. package/dist/utils/format.js +93 -4
  64. package/dist/utils/format.js.map +1 -1
  65. package/dist/utils/structured.d.ts +113 -0
  66. package/dist/utils/structured.d.ts.map +1 -0
  67. package/dist/utils/structured.js +227 -0
  68. package/dist/utils/structured.js.map +1 -0
  69. package/package.json +13 -6
package/README.md CHANGED
@@ -18,6 +18,9 @@
18
18
 
19
19
  ## Quick Start
20
20
 
21
+ Local `npx` and library usage require Node.js 20 or later. The hosted MCP
22
+ endpoint does not require a local Node.js installation.
23
+
21
24
  ### 1. Get API Keys
22
25
 
23
26
  Sign up at [wiro.ai](https://wiro.ai/) and create a project at [wiro.ai/panel/project/new](https://wiro.ai/panel/project/new) to get your API key and secret.
@@ -83,6 +86,44 @@ Then set environment variables `WIRO_API_KEY` and `WIRO_API_SECRET`.
83
86
  }
84
87
  ```
85
88
 
89
+ **OpenClaw** — configure a remote server under `mcp.servers`:
90
+
91
+ ```json
92
+ {
93
+ "mcp": {
94
+ "servers": {
95
+ "wiro": {
96
+ "url": "https://mcp.wiro.ai/v1",
97
+ "transport": "streamable-http",
98
+ "connectionTimeoutMs": 10000,
99
+ "headers": {
100
+ "Authorization": "Bearer ${WIRO_MCP_AUTH}"
101
+ }
102
+ }
103
+ }
104
+ }
105
+ }
106
+ ```
107
+
108
+ Set `WIRO_MCP_AUTH` in OpenClaw's environment, then verify with
109
+ `openclaw mcp doctor wiro --probe`. On older OpenClaw releases without that
110
+ probe command, use `openclaw mcp show wiro`, restart OpenClaw, and run
111
+ `/tools verbose`.
112
+
113
+ **Hermes** — add to `~/.hermes/config.yaml`:
114
+
115
+ ```yaml
116
+ mcp_servers:
117
+ wiro:
118
+ url: "https://mcp.wiro.ai/v1"
119
+ headers:
120
+ Authorization: "Bearer ${WIRO_MCP_AUTH}"
121
+ timeout: 60
122
+ connect_timeout: 10
123
+ ```
124
+
125
+ Store `WIRO_MCP_AUTH` in `~/.hermes/.env`, then run `/reload-mcp` and `/tools`.
126
+
86
127
  ### 3. Start Using
87
128
 
88
129
  Ask your AI assistant:
@@ -92,6 +133,7 @@ Ask your AI assistant:
92
133
  - *"Show me the parameters for openai/sora-2"*
93
134
  - *"Create a 5-second video with Kling V3 — a drone shot over mountains"*
94
135
  - *"Check the status of my last task"*
136
+ - *"Show my latest productions and open the newest result"*
95
137
 
96
138
  ## Authentication
97
139
 
@@ -122,21 +164,60 @@ WIRO_API_KEY=your-api-key
122
164
  | `get_model_schema` | Get full parameter schema and pricing for any model |
123
165
  | `recommend_model` | Describe what you want to build, get model recommendations by relevance |
124
166
  | `explore` | Browse curated models organized by category — no parameters needed |
125
- | `run_model` | Run any model — wait for result or get task token |
126
- | `get_task` | Check task status, outputs, and cost |
167
+ | `run_model` | Run any model — waits up to 45s by default, then returns a recoverable task token |
168
+ | `wait_for_task` | Continue waiting for an existing task without submitting or billing a duplicate run |
169
+ | `get_task` | Check task status immediately or wait up to 45s with `wait_seconds` |
170
+ | `list_tasks` | Browse authenticated task history across conversations, then continue with `get_task` |
127
171
  | `get_task_price` | Get the cost of a completed task |
128
172
  | `cancel_task` | Cancel a queued task |
129
173
  | `kill_task` | Kill a running task |
130
174
  | `upload_file` | Upload a file from URL for use as model input |
131
175
  | `search_docs` | Search the Wiro documentation for guides and API references |
132
176
 
177
+ For long generations, `run_model` returns the existing task ID and token when its
178
+ wait budget expires. The assistant must continue with `wait_for_task`; retrying
179
+ `run_model` creates a separate billable task.
180
+
181
+ ### LLM-friendly responses
182
+
183
+ All tools publish typed MCP input and output schemas. Successful calls return
184
+ `structuredContent` for reliable chaining, concise text `content` for clients
185
+ that only render text, and MCP resource links for generated media.
186
+
187
+ Task responses use the stable states `submitted`, `running`, `completed`,
188
+ `failed`, and `cancelled`. When more work is required, the response includes an
189
+ executable `nextAction`:
190
+
191
+ ```json
192
+ {
193
+ "state": "running",
194
+ "task": {
195
+ "id": "123",
196
+ "token": "task-token",
197
+ "status": "task_start"
198
+ },
199
+ "outputs": [],
200
+ "nextAction": {
201
+ "tool": "wait_for_task",
202
+ "arguments": { "tasktoken": "task-token" },
203
+ "reason": "Continue this exact task. Do not call run_model again."
204
+ }
205
+ }
206
+ ```
207
+
208
+ Generation chain:
209
+ `search_models → get_model_schema → run_model → wait_for_task`
210
+
211
+ Cross-conversation history:
212
+ `list_tasks → get_task`
213
+
133
214
  ## Hosted MCP Server
134
215
 
135
216
  Wiro also provides a hosted MCP server at `https://mcp.wiro.ai/v1` that requires no local installation. See the [MCP Server documentation](https://wiro.ai/docs/wiro-mcp-server) for setup instructions.
136
217
 
137
218
  ## Documentation
138
219
 
139
- - [MCP Server (Hosted)](https://wiro.ai/docs/wiro-mcp-server) — setup guides for Cursor, Claude Code, Claude Desktop, Windsurf
220
+ - [MCP Server (Hosted)](https://wiro.ai/docs/wiro-mcp-server) — setup guides for Cursor, Claude Code, Claude Desktop, Windsurf, OpenClaw, and Hermes
140
221
  - [Self-Hosted MCP](https://wiro.ai/docs/mcp-self-hosted) — run locally with npx, environment variables, library usage
141
222
  - [Authentication](https://wiro.ai/docs/authentication) — signature-based vs API Key Only
142
223
  - [Run a Model](https://wiro.ai/docs/run-a-model) — how the Run endpoint works
@@ -149,7 +230,8 @@ Wiro also provides a hosted MCP server at `https://mcp.wiro.ai/v1` that requires
149
230
  This package exports its core components for use in custom MCP servers:
150
231
 
151
232
  ```typescript
152
- import { createMcpServer, WiroClient } from '@wiro-ai/wiro-mcp';
233
+ import { WiroClient } from '@wiro-ai/wiro-mcp/client';
234
+ import { createMcpServer } from '@wiro-ai/wiro-mcp/server';
153
235
 
154
236
  const client = new WiroClient('your-api-key', 'your-api-secret');
155
237
  const server = createMcpServer(client);
@@ -159,7 +241,7 @@ const server = createMcpServer(client);
159
241
 
160
242
  | Export | Description |
161
243
  |--------|-------------|
162
- | `createMcpServer(client)` | Creates an McpServer with all 11 tools registered |
244
+ | `createMcpServer(client)` | Creates an McpServer with all 13 tools registered |
163
245
  | `WiroClient` | API client with both auth types |
164
246
  | `registerTools(server, client)` | Register tools on an existing McpServer |
165
247
 
package/dist/client.d.ts CHANGED
@@ -1,25 +1,60 @@
1
- import type { SearchModelsParams, RunModelResult, TaskDetailResponse, ToolListResponse, ToolDetailResponse, ExploreResponse, FileUploadResponse } from './types.js';
2
- export type { SearchModelsParams, RunModelResult, TaskDetailResponse, ToolListResponse, ToolDetailResponse, ExploreResponse, FileUploadResponse, } from './types.js';
1
+ import type { ListTasksParams, SearchModelsParams, RunModelResult, TaskDetailResponse, TaskListResponse, ToolListResponse, ToolDetailResponse, ExploreResponse, FileUploadResponse, Task } from './types.js';
2
+ export type { ListTasksParams, SearchModelsParams, RunModelResult, TaskDetailResponse, TaskListResponse, ToolListResponse, ToolDetailResponse, ExploreResponse, FileUploadResponse, } from './types.js';
3
3
  export type { Task, TaskOutput, TaskOutputRawContent, ToolListItem, ToolParameterGroup, ToolParameterItem } from './types.js';
4
+ export interface TaskReference {
5
+ tasktoken?: string;
6
+ taskid?: string;
7
+ }
8
+ export interface WaitForTaskOptions {
9
+ signal?: AbortSignal;
10
+ onPoll?: (task: Task, context: {
11
+ attempt: number;
12
+ elapsedMs: number;
13
+ }) => void | Promise<void>;
14
+ pollIntervalMs?: number;
15
+ maxConsecutiveErrors?: number;
16
+ }
17
+ export interface TrustedProxyContext {
18
+ clientIp: string;
19
+ sharedSecret: string;
20
+ }
21
+ export interface WiroClientOptions {
22
+ trustedProxy?: TrustedProxyContext;
23
+ }
24
+ export declare class WiroApiError extends Error {
25
+ readonly status: number;
26
+ readonly responseBody: string;
27
+ constructor(status: number, responseBody: string);
28
+ }
29
+ export declare class TaskWaitTimeoutError extends Error {
30
+ readonly timeoutMs: number;
31
+ readonly lastDetail?: TaskDetailResponse;
32
+ readonly lastError?: unknown;
33
+ constructor(timeoutMs: number, lastDetail?: TaskDetailResponse, lastError?: unknown);
34
+ }
35
+ export declare class TaskPollingError extends Error {
36
+ readonly lastDetail?: TaskDetailResponse;
37
+ readonly lastError?: unknown;
38
+ constructor(message: string, lastDetail?: TaskDetailResponse, lastError?: unknown);
39
+ }
4
40
  export declare class WiroClient {
5
41
  private readonly apiKey;
6
42
  private readonly apiSecret?;
7
43
  private readonly baseUrl;
44
+ private readonly trustedProxy?;
8
45
  readonly authType: 'signature' | 'apikey-only';
9
- constructor(apiKey: string, apiSecret?: string, baseUrl?: string);
46
+ constructor(apiKey: string, apiSecret?: string, baseUrl?: string, options?: WiroClientOptions);
10
47
  private getAuthHeaders;
11
48
  private request;
12
49
  searchModels(params?: SearchModelsParams): Promise<ToolListResponse>;
13
50
  explore(): Promise<ExploreResponse>;
14
51
  getModelSchema(model: string): Promise<ToolDetailResponse>;
15
- runModel(model: string, params: Record<string, unknown>): Promise<RunModelResult>;
16
- getTask(opts: {
17
- tasktoken?: string;
18
- taskid?: string;
19
- }): Promise<TaskDetailResponse>;
20
- cancelTask(tasktoken: string): Promise<Record<string, unknown>>;
21
- killTask(tasktoken: string): Promise<Record<string, unknown>>;
52
+ runModel(model: string, params: Record<string, unknown>, signal?: AbortSignal): Promise<RunModelResult>;
53
+ getTask(opts: TaskReference, signal?: AbortSignal): Promise<TaskDetailResponse>;
54
+ listTasks(params?: ListTasksParams, signal?: AbortSignal): Promise<TaskListResponse>;
55
+ cancelTask(task: string | TaskReference, signal?: AbortSignal): Promise<Record<string, unknown>>;
56
+ killTask(task: string | TaskReference, signal?: AbortSignal): Promise<Record<string, unknown>>;
22
57
  uploadFile(fileUrl: string, fileName?: string): Promise<FileUploadResponse>;
23
- waitForTask(tasktoken: string, timeoutMs?: number): Promise<TaskDetailResponse>;
58
+ waitForTask(task: string | TaskReference, timeoutMs?: number, options?: WaitForTaskOptions): Promise<TaskDetailResponse>;
24
59
  }
25
60
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,oBAAoB,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAM9H,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,SAAgB,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC;gBAE1C,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAQhE,OAAO,CAAC,cAAc;YAmBR,OAAO;IAuBf,YAAY,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAexE,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAInC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAY1D,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IASjF,OAAO,CAAC,IAAI,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAUnF,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI/D,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI7D,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoC3E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,SAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAkB/F"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,IAAI,EACL,MAAM,YAAY,CAAC;AAGpB,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,oBAAoB,EAAE,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAS9H,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,MAAM,CAAC,EAAE,CACP,IAAI,EAAE,IAAI,EACV,OAAO,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,KAC5C,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC;AAED,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;gBAElB,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;CAMjD;AAED,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;gBAEjB,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,OAAO;CAOpF;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,kBAAkB,EAAE,SAAS,CAAC,EAAE,OAAO;CAMlF;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAsB;IACpD,SAAgB,QAAQ,EAAE,WAAW,GAAG,aAAa,CAAC;gBAGpD,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE,iBAAsB;IAkBjC,OAAO,CAAC,cAAc;YAmCR,OAAO;IA4Bf,YAAY,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAexE,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;IAInC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAY1D,QAAQ,CACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC;IAapB,OAAO,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAU/E,SAAS,CACb,MAAM,GAAE,eAAoB,EAC5B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,CAAC;IAYtB,UAAU,CACd,IAAI,EAAE,MAAM,GAAG,aAAa,EAC5B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAgB7B,QAAQ,CACZ,IAAI,EAAE,MAAM,GAAG,aAAa,EAC5B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAe7B,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoC3E,WAAW,CACf,IAAI,EAAE,MAAM,GAAG,aAAa,EAC5B,SAAS,SAAkB,EAC3B,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,kBAAkB,CAAC;CAiG/B"}
package/dist/client.js CHANGED
@@ -1,22 +1,68 @@
1
1
  import crypto from 'node:crypto';
2
+ import net from 'node:net';
2
3
  import { TERMINAL_STATUSES } from './types.js';
3
4
  const DEFAULT_BASE_URL = 'https://api.wiro.ai/v1';
4
- const DEFAULT_POLL_INTERVAL = 3000;
5
5
  const DEFAULT_TIMEOUT = 120000;
6
+ const FAST_POLL_INTERVAL = 2000;
7
+ const NORMAL_POLL_INTERVAL = 5000;
8
+ const SLOW_POLL_INTERVAL = 10000;
9
+ const DEFAULT_MAX_CONSECUTIVE_ERRORS = 5;
10
+ export class WiroApiError extends Error {
11
+ status;
12
+ responseBody;
13
+ constructor(status, responseBody) {
14
+ super(`Wiro API error ${status}: ${responseBody}`);
15
+ this.name = 'WiroApiError';
16
+ this.status = status;
17
+ this.responseBody = responseBody;
18
+ }
19
+ }
20
+ export class TaskWaitTimeoutError extends Error {
21
+ timeoutMs;
22
+ lastDetail;
23
+ lastError;
24
+ constructor(timeoutMs, lastDetail, lastError) {
25
+ super(`Task timed out after ${timeoutMs / 1000} seconds`);
26
+ this.name = 'TaskWaitTimeoutError';
27
+ this.timeoutMs = timeoutMs;
28
+ this.lastDetail = lastDetail;
29
+ this.lastError = lastError;
30
+ }
31
+ }
32
+ export class TaskPollingError extends Error {
33
+ lastDetail;
34
+ lastError;
35
+ constructor(message, lastDetail, lastError) {
36
+ super(message);
37
+ this.name = 'TaskPollingError';
38
+ this.lastDetail = lastDetail;
39
+ this.lastError = lastError;
40
+ }
41
+ }
6
42
  export class WiroClient {
7
43
  apiKey;
8
44
  apiSecret;
9
45
  baseUrl;
46
+ trustedProxy;
10
47
  authType;
11
- constructor(apiKey, apiSecret, baseUrl) {
48
+ constructor(apiKey, apiSecret, baseUrl, options = {}) {
12
49
  if (!apiKey)
13
50
  throw new Error('WIRO_API_KEY is required');
51
+ if (options.trustedProxy) {
52
+ if (net.isIP(options.trustedProxy.clientIp) === 0) {
53
+ throw new Error('trustedProxy.clientIp must be a valid IPv4 or IPv6 address');
54
+ }
55
+ if (options.trustedProxy.sharedSecret.length < 32) {
56
+ throw new Error('trustedProxy.sharedSecret must be at least 32 characters');
57
+ }
58
+ }
14
59
  this.apiKey = apiKey;
15
60
  this.apiSecret = apiSecret;
16
61
  this.baseUrl = baseUrl ?? DEFAULT_BASE_URL;
62
+ this.trustedProxy = options.trustedProxy;
17
63
  this.authType = apiSecret ? 'signature' : 'apikey-only';
18
64
  }
19
- getAuthHeaders() {
65
+ getAuthHeaders(pathname) {
20
66
  const headers = {
21
67
  'x-api-key': this.apiKey,
22
68
  'Content-Type': 'application/json',
@@ -30,19 +76,35 @@ export class WiroClient {
30
76
  headers['x-signature'] = signature;
31
77
  headers['x-nonce'] = nonce;
32
78
  }
79
+ if (this.trustedProxy) {
80
+ const timestamp = Date.now().toString();
81
+ const payload = [
82
+ timestamp,
83
+ this.trustedProxy.clientIp,
84
+ this.apiKey,
85
+ pathname,
86
+ ].join('\n');
87
+ headers['x-wiro-proxy-client-ip'] = this.trustedProxy.clientIp;
88
+ headers['x-wiro-proxy-timestamp'] = timestamp;
89
+ headers['x-wiro-proxy-signature'] = crypto
90
+ .createHmac('sha256', this.trustedProxy.sharedSecret)
91
+ .update(payload)
92
+ .digest('hex');
93
+ }
33
94
  return headers;
34
95
  }
35
- async request(path, body) {
96
+ async request(path, body, signal) {
36
97
  const url = `${this.baseUrl}${path}`;
37
- const headers = this.getAuthHeaders();
98
+ const headers = this.getAuthHeaders(new URL(url).pathname);
38
99
  const response = await fetch(url, {
39
100
  method: 'POST',
40
101
  headers,
41
102
  body: JSON.stringify(body),
103
+ signal,
42
104
  });
43
105
  const text = await response.text();
44
106
  if (!response.ok) {
45
- throw new Error(`Wiro API error ${response.status}: ${text}`);
107
+ throw new WiroApiError(response.status, text);
46
108
  }
47
109
  try {
48
110
  return JSON.parse(text);
@@ -81,15 +143,15 @@ export class WiroClient {
81
143
  slugproject: cleanslugproject,
82
144
  });
83
145
  }
84
- async runModel(model, params) {
146
+ async runModel(model, params, signal) {
85
147
  const [cleanslugowner, ...rest] = model.split('/');
86
148
  const cleanslugproject = rest.join('/');
87
149
  if (!cleanslugowner || !cleanslugproject) {
88
150
  throw new Error('Model must be in "owner/model" format, e.g. "openai/sora-2"');
89
151
  }
90
- return this.request(`/Run/${cleanslugowner}/${cleanslugproject}`, params);
152
+ return this.request(`/Run/${cleanslugowner}/${cleanslugproject}`, params, signal);
91
153
  }
92
- async getTask(opts) {
154
+ async getTask(opts, signal) {
93
155
  if (!opts.tasktoken && !opts.taskid) {
94
156
  throw new Error('Either tasktoken or taskid is required');
95
157
  }
@@ -98,13 +160,45 @@ export class WiroClient {
98
160
  body.tasktoken = opts.tasktoken;
99
161
  if (opts.taskid)
100
162
  body.taskid = opts.taskid;
101
- return this.request('/Task/Detail', body);
163
+ return this.request('/Task/Detail', body, signal);
102
164
  }
103
- async cancelTask(tasktoken) {
104
- return this.request('/Task/Cancel', { tasktoken });
165
+ async listTasks(params = {}, signal) {
166
+ const body = {
167
+ type: 'model',
168
+ sort: 'id',
169
+ order: 'DESC',
170
+ start: String(params.start ?? 0),
171
+ limit: String(params.limit ?? 20),
172
+ };
173
+ if (params.model)
174
+ body.modelName = params.model;
175
+ return this.request('/Task/List', body, signal);
105
176
  }
106
- async killTask(tasktoken) {
107
- return this.request('/Task/Kill', { tasktoken });
177
+ async cancelTask(task, signal) {
178
+ const reference = normalizeTaskReference(task);
179
+ let taskid = reference.taskid;
180
+ if (!taskid && reference.tasktoken) {
181
+ const detail = await this.getTask({ tasktoken: reference.tasktoken }, signal);
182
+ taskid = detail.tasklist?.[0]?.id;
183
+ }
184
+ if (!taskid) {
185
+ throw new Error('Unable to resolve task ID for cancellation');
186
+ }
187
+ return this.request('/Task/Cancel', { taskid }, signal);
188
+ }
189
+ async killTask(task, signal) {
190
+ const reference = normalizeTaskReference(task);
191
+ const body = {};
192
+ if (reference.taskid) {
193
+ body.taskid = reference.taskid;
194
+ }
195
+ else if (reference.tasktoken) {
196
+ body.socketaccesstoken = reference.tasktoken;
197
+ }
198
+ else {
199
+ throw new Error('Either tasktoken or taskid is required');
200
+ }
201
+ return this.request('/Task/Kill', body, signal);
108
202
  }
109
203
  async uploadFile(fileUrl, fileName) {
110
204
  const fileResponse = await fetch(fileUrl);
@@ -118,7 +212,7 @@ export class WiroClient {
118
212
  const formData = new FormData();
119
213
  formData.append('file', blob, resolvedName);
120
214
  const url = `${this.baseUrl}/File/Upload`;
121
- const headers = this.getAuthHeaders();
215
+ const headers = this.getAuthHeaders(new URL(url).pathname);
122
216
  delete headers['Content-Type'];
123
217
  const response = await fetch(url, {
124
218
  method: 'POST',
@@ -136,19 +230,142 @@ export class WiroClient {
136
230
  throw new Error(`Invalid JSON response: ${text}`);
137
231
  }
138
232
  }
139
- async waitForTask(tasktoken, timeoutMs = DEFAULT_TIMEOUT) {
233
+ async waitForTask(task, timeoutMs = DEFAULT_TIMEOUT, options = {}) {
234
+ if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
235
+ throw new Error('timeoutMs must be a positive number');
236
+ }
237
+ const reference = normalizeTaskReference(task);
238
+ if (!reference.tasktoken && !reference.taskid) {
239
+ throw new Error('Either tasktoken or taskid is required');
240
+ }
241
+ const startedAt = Date.now();
140
242
  const deadline = Date.now() + timeoutMs;
243
+ const maxConsecutiveErrors = options.maxConsecutiveErrors
244
+ ?? DEFAULT_MAX_CONSECUTIVE_ERRORS;
245
+ let consecutiveErrors = 0;
246
+ let attempt = 0;
247
+ let lastDetail;
248
+ let lastError;
141
249
  while (Date.now() < deadline) {
142
- const detail = await this.getTask({ tasktoken });
143
- const task = detail.tasklist?.[0];
144
- if (task) {
145
- if (TERMINAL_STATUSES.includes(task.status)) {
250
+ throwIfAborted(options.signal);
251
+ const remainingMs = Math.max(1, deadline - Date.now());
252
+ const pollSignal = createDeadlineSignal(options.signal, remainingMs);
253
+ try {
254
+ const detail = await this.getTask(reference, pollSignal.signal);
255
+ lastDetail = detail;
256
+ if (!detail.result) {
257
+ const message = detail.errors?.map(error => error.message).join(', ')
258
+ || 'Task status request failed';
259
+ throw new Error(message);
260
+ }
261
+ const currentTask = detail.tasklist?.[0];
262
+ if (!currentTask) {
263
+ throw new Error('Task not found');
264
+ }
265
+ consecutiveErrors = 0;
266
+ attempt += 1;
267
+ await options.onPoll?.(currentTask, {
268
+ attempt,
269
+ elapsedMs: Date.now() - startedAt,
270
+ });
271
+ if (TERMINAL_STATUSES.includes(currentTask.status)) {
146
272
  return detail;
147
273
  }
148
274
  }
149
- await new Promise(resolve => setTimeout(resolve, DEFAULT_POLL_INTERVAL));
275
+ catch (error) {
276
+ if (options.signal?.aborted) {
277
+ throw createAbortError();
278
+ }
279
+ if (pollSignal.didTimeout()) {
280
+ lastError = error;
281
+ break;
282
+ }
283
+ lastError = error;
284
+ consecutiveErrors += 1;
285
+ if (error instanceof WiroApiError
286
+ && error.status >= 400
287
+ && error.status < 500
288
+ && error.status !== 408
289
+ && error.status !== 429) {
290
+ throw new TaskPollingError(`Task status request failed with HTTP ${error.status}`, lastDetail, error);
291
+ }
292
+ if (consecutiveErrors >= maxConsecutiveErrors) {
293
+ throw new TaskPollingError(`Task status check failed ${consecutiveErrors} times in a row`, lastDetail, error);
294
+ }
295
+ }
296
+ finally {
297
+ pollSignal.cleanup();
298
+ }
299
+ const remainingAfterPoll = deadline - Date.now();
300
+ if (remainingAfterPoll <= 0)
301
+ break;
302
+ const interval = options.pollIntervalMs
303
+ ?? getPollInterval(Date.now() - startedAt);
304
+ await sleep(Math.min(interval, remainingAfterPoll), options.signal);
150
305
  }
151
- throw new Error(`Task timed out after ${timeoutMs / 1000} seconds`);
306
+ throw new TaskWaitTimeoutError(timeoutMs, lastDetail, lastError);
307
+ }
308
+ }
309
+ function normalizeTaskReference(task) {
310
+ return typeof task === 'string' ? { tasktoken: task } : task;
311
+ }
312
+ function getPollInterval(elapsedMs) {
313
+ if (elapsedMs < 15000)
314
+ return FAST_POLL_INTERVAL;
315
+ if (elapsedMs < 60000)
316
+ return NORMAL_POLL_INTERVAL;
317
+ return SLOW_POLL_INTERVAL;
318
+ }
319
+ function createAbortError() {
320
+ const error = new Error('Task wait aborted by client');
321
+ error.name = 'AbortError';
322
+ return error;
323
+ }
324
+ function throwIfAborted(signal) {
325
+ if (signal?.aborted)
326
+ throw createAbortError();
327
+ }
328
+ function sleep(ms, signal) {
329
+ if (ms <= 0)
330
+ return Promise.resolve();
331
+ return new Promise((resolve, reject) => {
332
+ let timer;
333
+ const onAbort = () => {
334
+ clearTimeout(timer);
335
+ reject(createAbortError());
336
+ };
337
+ timer = setTimeout(() => {
338
+ signal?.removeEventListener('abort', onAbort);
339
+ resolve();
340
+ }, ms);
341
+ if (signal?.aborted) {
342
+ onAbort();
343
+ return;
344
+ }
345
+ signal?.addEventListener('abort', onAbort, { once: true });
346
+ });
347
+ }
348
+ function createDeadlineSignal(parentSignal, timeoutMs) {
349
+ const controller = new AbortController();
350
+ let timedOut = false;
351
+ const onParentAbort = () => controller.abort();
352
+ if (parentSignal?.aborted) {
353
+ controller.abort();
354
+ }
355
+ else {
356
+ parentSignal?.addEventListener('abort', onParentAbort, { once: true });
152
357
  }
358
+ const timer = setTimeout(() => {
359
+ timedOut = true;
360
+ controller.abort();
361
+ }, timeoutMs);
362
+ return {
363
+ signal: controller.signal,
364
+ didTimeout: () => timedOut,
365
+ cleanup: () => {
366
+ clearTimeout(timer);
367
+ parentSignal?.removeEventListener('abort', onParentAbort);
368
+ },
369
+ };
153
370
  }
154
371
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,GAAG,MAAM,UAAU,CAAC;AAa3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAe/C,MAAM,gBAAgB,GAAG,wBAAwB,CAAC;AAClD,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAChC,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAClC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AACjC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AA0BzC,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,MAAM,CAAS;IACf,YAAY,CAAS;IAE9B,YAAY,MAAc,EAAE,YAAoB;QAC9C,KAAK,CAAC,kBAAkB,MAAM,KAAK,YAAY,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,SAAS,CAAS;IAClB,UAAU,CAAsB;IAChC,SAAS,CAAW;IAE7B,YAAY,SAAiB,EAAE,UAA+B,EAAE,SAAmB;QACjF,KAAK,CAAC,wBAAwB,SAAS,GAAG,IAAI,UAAU,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,UAAU,CAAsB;IAChC,SAAS,CAAW;IAE7B,YAAY,OAAe,EAAE,UAA+B,EAAE,SAAmB;QAC/E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,UAAU;IACJ,MAAM,CAAS;IACf,SAAS,CAAU;IACnB,OAAO,CAAS;IAChB,YAAY,CAAuB;IACpC,QAAQ,CAA8B;IAEtD,YACE,MAAc,EACd,SAAkB,EAClB,OAAgB,EAChB,UAA6B,EAAE;QAE/B,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAChF,CAAC;YACD,IAAI,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,gBAAgB,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;IAC1D,CAAC;IAEO,cAAc,CAAC,QAAgB;QACrC,MAAM,OAAO,GAA2B;YACtC,WAAW,EAAE,IAAI,CAAC,MAAM;YACxB,cAAc,EAAE,kBAAkB;SACnC,CAAC;QAEF,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,MAAM;iBACrB,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC;iBACjC,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;iBAC9B,MAAM,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;YACnC,OAAO,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QAC7B,CAAC;QAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,OAAO,GAAG;gBACd,SAAS;gBACT,IAAI,CAAC,YAAY,CAAC,QAAQ;gBAC1B,IAAI,CAAC,MAAM;gBACX,QAAQ;aACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,OAAO,CAAC,wBAAwB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YAC/D,OAAO,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAAC;YAC9C,OAAO,CAAC,wBAAwB,CAAC,GAAG,MAAM;iBACvC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;iBACpD,MAAM,CAAC,OAAO,CAAC;iBACf,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,IAAY,EACZ,IAA6B,EAC7B,MAAoB;QAEpB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC1B,MAAM;SACP,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAA6B,EAAE;QAChD,MAAM,IAAI,GAA4B;YACpC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YAChC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;YAC3B,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;YACnC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,WAAW;YAChC,aAAa,EAAE,IAAI;YACnB,OAAO,EAAE,IAAI;SACd,CAAC;QACF,IAAI,MAAM,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QACxD,IAAI,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAmB,YAAY,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,OAAO,CAAkB,eAAe,EAAE,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa;QAChC,MAAM,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAqB,cAAc,EAAE;YACtD,SAAS,EAAE,cAAc;YACzB,WAAW,EAAE,gBAAgB;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,KAAa,EACb,MAA+B,EAC/B,MAAoB;QAEpB,MAAM,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,cAAc,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CACjB,QAAQ,cAAc,IAAI,gBAAgB,EAAE,EAC5C,MAAM,EACN,MAAM,CACP,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAmB,EAAE,MAAoB;QACrD,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,IAAI,GAA4B,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACpD,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAqB,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,SAAS,CACb,SAA0B,EAAE,EAC5B,MAAoB;QAEpB,MAAM,IAAI,GAA4B;YACpC,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,IAAI;YACV,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YAChC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SAClC,CAAC;QACF,IAAI,MAAM,CAAC,KAAK;YAAE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAChD,OAAO,IAAI,CAAC,OAAO,CAAmB,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,IAA4B,EAC5B,MAAoB;QAEpB,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAE9B,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC;YAC9E,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACpC,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,IAA4B,EAC5B,MAAoB;QAEpB,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,GAA4B,EAAE,CAAC;QAEzC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QACjC,CAAC;aAAM,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC,SAAS,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,QAAiB;QACjD,MAAM,YAAY,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,QAAQ;eACxB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;eACvC,QAAQ,CAAC;QAEd,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAChC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAE5C,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,cAAc,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC3D,OAAO,OAAO,CAAC,cAAc,CAAC,CAAC;QAE/B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO;YACP,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAuB,CAAC;QAChD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,IAA4B,EAC5B,SAAS,GAAG,eAAe,EAC3B,UAA8B,EAAE;QAEhC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QACxC,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB;eACpD,8BAA8B,CAAC;QACpC,IAAI,iBAAiB,GAAG,CAAC,CAAC;QAC1B,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,UAA0C,CAAC;QAC/C,IAAI,SAAkB,CAAC;QAEvB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,oBAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAErE,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;gBAChE,UAAU,GAAG,MAAM,CAAC;gBAEpB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBACnB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;2BAChE,4BAA4B,CAAC;oBAClC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC3B,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;gBACpC,CAAC;gBAED,iBAAiB,GAAG,CAAC,CAAC;gBACtB,OAAO,IAAI,CAAC,CAAC;gBACb,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;oBAClC,OAAO;oBACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBAClC,CAAC,CAAC;gBAEH,IAAK,iBAAuC,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1E,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;oBAC5B,MAAM,gBAAgB,EAAE,CAAC;gBAC3B,CAAC;gBACD,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC;oBAC5B,SAAS,GAAG,KAAK,CAAC;oBAClB,MAAM;gBACR,CAAC;gBAED,SAAS,GAAG,KAAK,CAAC;gBAClB,iBAAiB,IAAI,CAAC,CAAC;gBAEvB,IAAI,KAAK,YAAY,YAAY;uBAC5B,KAAK,CAAC,MAAM,IAAI,GAAG;uBACnB,KAAK,CAAC,MAAM,GAAG,GAAG;uBAClB,KAAK,CAAC,MAAM,KAAK,GAAG;uBACpB,KAAK,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC1B,MAAM,IAAI,gBAAgB,CACxB,wCAAwC,KAAK,CAAC,MAAM,EAAE,EACtD,UAAU,EACV,KAAK,CACN,CAAC;gBACJ,CAAC;gBAED,IAAI,iBAAiB,IAAI,oBAAoB,EAAE,CAAC;oBAC9C,MAAM,IAAI,gBAAgB,CACxB,4BAA4B,iBAAiB,iBAAiB,EAC9D,UAAU,EACV,KAAK,CACN,CAAC;gBACJ,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YAED,MAAM,kBAAkB,GAAG,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACjD,IAAI,kBAAkB,IAAI,CAAC;gBAAE,MAAM;YAEnC,MAAM,QAAQ,GAAG,OAAO,CAAC,cAAc;mBAClC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;YAC7C,MAAM,KAAK,CACT,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,EACtC,OAAO,CAAC,MAAM,CACf,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,oBAAoB,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACnE,CAAC;CACF;AAED,SAAS,sBAAsB,CAAC,IAA4B;IAC1D,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB;IACxC,IAAI,SAAS,GAAG,KAAK;QAAE,OAAO,kBAAkB,CAAC;IACjD,IAAI,SAAS,GAAG,KAAK;QAAE,OAAO,oBAAoB,CAAC;IACnD,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,MAAoB;IAC1C,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,gBAAgB,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,KAAK,CAAC,EAAU,EAAE,MAAoB;IAC7C,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAEtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,KAAoC,CAAC;QAEzC,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAC3B,YAAqC,EACrC,SAAiB;IAMjB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,aAAa,GAAG,GAAS,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IACrD,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC;QAC1B,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,YAAY,EAAE,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;QAC5B,QAAQ,GAAG,IAAI,CAAC;QAChB,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC,EAAE,SAAS,CAAC,CAAC;IAEd,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,UAAU,EAAE,GAAG,EAAE,CAAC,QAAQ;QAC1B,OAAO,EAAE,GAAG,EAAE;YACZ,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,YAAY,EAAE,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAC5D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"cancel-task.d.ts","sourceRoot":"","sources":["../../src/tools/cancel-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA4B9E"}
1
+ {"version":3,"file":"cancel-task.d.ts","sourceRoot":"","sources":["../../src/tools/cancel-task.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA4D9E"}