@galaxy-tool-util/tool-cache-proxy 1.10.1 → 1.12.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/openapi.json ADDED
@@ -0,0 +1,487 @@
1
+ {
2
+ "openapi": "3.1.0",
3
+ "info": {
4
+ "title": "Galaxy Tool Cache Proxy",
5
+ "description": "HTTP proxy that mirrors a subset of the Galaxy ToolShed API and exposes cache-admin routes for inspector UIs.",
6
+ "version": "1.1.0"
7
+ },
8
+ "paths": {
9
+ "/api/tools": {
10
+ "get": {
11
+ "summary": "Search cached tools",
12
+ "description": "Substring search across cached tools (q matches tool_id / name / description). Pagination via page (1-based) and page_size (default 25, max 200).",
13
+ "operationId": "searchTools",
14
+ "parameters": [
15
+ { "name": "q", "in": "query", "required": false, "schema": { "type": "string" } },
16
+ { "name": "page", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1 } },
17
+ { "name": "page_size", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 200 } }
18
+ ],
19
+ "responses": {
20
+ "200": {
21
+ "description": "Search results",
22
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SearchResults" } } }
23
+ }
24
+ }
25
+ }
26
+ },
27
+ "/api/ga4gh/trs/v2/tools": {
28
+ "get": {
29
+ "summary": "List TRS tools",
30
+ "description": "GA4GH TRS v2 — list all cached tools as TRS Tool objects.",
31
+ "operationId": "trsListTools",
32
+ "responses": {
33
+ "200": {
34
+ "description": "Tool list",
35
+ "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TrsTool" } } } }
36
+ }
37
+ }
38
+ }
39
+ },
40
+ "/api/ga4gh/trs/v2/tools/{tool_id}": {
41
+ "get": {
42
+ "summary": "Get a TRS tool",
43
+ "operationId": "trsGetTool",
44
+ "parameters": [{ "$ref": "#/components/parameters/ToolId" }],
45
+ "responses": {
46
+ "200": {
47
+ "description": "Tool",
48
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/TrsTool" } } }
49
+ },
50
+ "404": { "$ref": "#/components/responses/NotFound" }
51
+ }
52
+ }
53
+ },
54
+ "/api/ga4gh/trs/v2/tools/{tool_id}/versions": {
55
+ "get": {
56
+ "summary": "List TRS tool versions",
57
+ "operationId": "trsListVersions",
58
+ "parameters": [{ "$ref": "#/components/parameters/ToolId" }],
59
+ "responses": {
60
+ "200": {
61
+ "description": "Tool versions",
62
+ "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/TrsToolVersion" } } } }
63
+ },
64
+ "404": { "$ref": "#/components/responses/NotFound" }
65
+ }
66
+ }
67
+ },
68
+ "/api/tools/{tool_id}/versions/{tool_version}": {
69
+ "get": {
70
+ "summary": "Get parsed tool",
71
+ "description": "Returns the cached ParsedTool (Galaxy meta-model).",
72
+ "operationId": "getParsedTool",
73
+ "parameters": [
74
+ { "$ref": "#/components/parameters/ToolId" },
75
+ { "$ref": "#/components/parameters/ToolVersion" }
76
+ ],
77
+ "responses": {
78
+ "200": {
79
+ "description": "Parsed tool",
80
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ParsedTool" } } }
81
+ },
82
+ "404": { "$ref": "#/components/responses/NotFound" }
83
+ }
84
+ }
85
+ },
86
+ "/api/tools/{tool_id}/versions/{tool_version}/parameter_request_schema": {
87
+ "get": {
88
+ "summary": "Parameter request JSON Schema",
89
+ "operationId": "getParameterRequestSchema",
90
+ "parameters": [
91
+ { "$ref": "#/components/parameters/ToolId" },
92
+ { "$ref": "#/components/parameters/ToolVersion" }
93
+ ],
94
+ "responses": {
95
+ "200": { "$ref": "#/components/responses/JsonSchemaResponse" },
96
+ "404": { "$ref": "#/components/responses/NotFound" }
97
+ }
98
+ }
99
+ },
100
+ "/api/tools/{tool_id}/versions/{tool_version}/parameter_landing_request_schema": {
101
+ "get": {
102
+ "summary": "Parameter landing-request JSON Schema",
103
+ "operationId": "getParameterLandingRequestSchema",
104
+ "parameters": [
105
+ { "$ref": "#/components/parameters/ToolId" },
106
+ { "$ref": "#/components/parameters/ToolVersion" }
107
+ ],
108
+ "responses": {
109
+ "200": { "$ref": "#/components/responses/JsonSchemaResponse" },
110
+ "404": { "$ref": "#/components/responses/NotFound" }
111
+ }
112
+ }
113
+ },
114
+ "/api/tools/{tool_id}/versions/{tool_version}/parameter_test_case_xml_schema": {
115
+ "get": {
116
+ "summary": "Parameter test-case-XML JSON Schema",
117
+ "operationId": "getParameterTestCaseXmlSchema",
118
+ "parameters": [
119
+ { "$ref": "#/components/parameters/ToolId" },
120
+ { "$ref": "#/components/parameters/ToolVersion" }
121
+ ],
122
+ "responses": {
123
+ "200": { "$ref": "#/components/responses/JsonSchemaResponse" },
124
+ "404": { "$ref": "#/components/responses/NotFound" }
125
+ }
126
+ }
127
+ },
128
+ "/api/tools/{tool_id}/versions/{tool_version}/tool_source": {
129
+ "get": {
130
+ "summary": "Serialized tool wrapper source",
131
+ "description": "Lazily fetch and cache the serialized wrapper selected by tool version. XML macros are expanded by the upstream provider. Exact repository changesets and original macro files are not selected by this endpoint. Refetch or delete the cache entry to invalidate its source.",
132
+ "operationId": "getToolSource",
133
+ "parameters": [
134
+ {
135
+ "$ref": "#/components/parameters/ToolId"
136
+ },
137
+ {
138
+ "$ref": "#/components/parameters/ToolVersion"
139
+ }
140
+ ],
141
+ "responses": {
142
+ "200": {
143
+ "description": "Wrapper text, without JSON encoding.",
144
+ "headers": {
145
+ "language": {
146
+ "description": "Wrapper format reported by the provider, or text if unknown.",
147
+ "schema": {
148
+ "type": "string",
149
+ "enum": [
150
+ "xml",
151
+ "yaml",
152
+ "json",
153
+ "cwl",
154
+ "text"
155
+ ]
156
+ }
157
+ },
158
+ "X-Tool-Source-Macros-Expanded": {
159
+ "description": "true for expanded XML; false for formats without XML macros.",
160
+ "schema": {
161
+ "type": "string",
162
+ "enum": [
163
+ "true",
164
+ "false"
165
+ ]
166
+ }
167
+ }
168
+ },
169
+ "content": {
170
+ "text/plain": {
171
+ "schema": {
172
+ "type": "string",
173
+ "format": "binary"
174
+ }
175
+ }
176
+ }
177
+ },
178
+ "404": {
179
+ "description": "Tool source not found",
180
+ "content": {
181
+ "application/json": {
182
+ "schema": {
183
+ "type": "object",
184
+ "properties": {
185
+ "detail": {
186
+ "type": "string"
187
+ }
188
+ }
189
+ }
190
+ }
191
+ }
192
+ },
193
+ "502": {
194
+ "description": "Upstream source fetch failed",
195
+ "content": {
196
+ "application/json": {
197
+ "schema": {
198
+ "type": "object",
199
+ "properties": {
200
+ "detail": {
201
+ "type": "string"
202
+ }
203
+ }
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
209
+ }
210
+ },
211
+
212
+ "/api/tool-cache": {
213
+ "get": {
214
+ "summary": "List cached tools (admin)",
215
+ "operationId": "listCache",
216
+ "parameters": [
217
+ { "name": "decode", "in": "query", "required": false, "description": "When 1, probe each entry to flag undecodable payloads.", "schema": { "type": "string", "enum": ["1"] } }
218
+ ],
219
+ "responses": {
220
+ "200": {
221
+ "description": "Listing + stats",
222
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListResponse" } } }
223
+ }
224
+ }
225
+ },
226
+ "delete": {
227
+ "summary": "Clear cache (optionally by prefix)",
228
+ "operationId": "clearCache",
229
+ "parameters": [
230
+ { "name": "prefix", "in": "query", "required": false, "schema": { "type": "string" } }
231
+ ],
232
+ "responses": {
233
+ "200": {
234
+ "description": "Clear result",
235
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClearResponse" } } }
236
+ }
237
+ }
238
+ }
239
+ },
240
+ "/api/tool-cache/stats": {
241
+ "get": {
242
+ "summary": "Aggregate cache stats",
243
+ "operationId": "cacheStats",
244
+ "responses": {
245
+ "200": {
246
+ "description": "Stats",
247
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CacheStats" } } }
248
+ }
249
+ }
250
+ }
251
+ },
252
+ "/api/tool-cache/{cacheKey}": {
253
+ "delete": {
254
+ "summary": "Delete a single cache entry",
255
+ "operationId": "deleteCacheEntry",
256
+ "parameters": [
257
+ { "name": "cacheKey", "in": "path", "required": true, "schema": { "type": "string" } }
258
+ ],
259
+ "responses": {
260
+ "200": {
261
+ "description": "Removed",
262
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteResponse" } } }
263
+ },
264
+ "404": { "$ref": "#/components/responses/NotFound" }
265
+ }
266
+ }
267
+ },
268
+ "/api/tool-cache/refetch": {
269
+ "post": {
270
+ "summary": "Force-refetch a tool",
271
+ "operationId": "refetchTool",
272
+ "requestBody": {
273
+ "required": true,
274
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefetchRequest" } } }
275
+ },
276
+ "responses": {
277
+ "200": {
278
+ "description": "Refetch result",
279
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RefetchResponse" } } }
280
+ },
281
+ "400": { "$ref": "#/components/responses/Error" },
282
+ "502": { "$ref": "#/components/responses/Error" }
283
+ }
284
+ }
285
+ },
286
+ "/api/tool-cache/add": {
287
+ "post": {
288
+ "summary": "Populate the cache for a known tool id (idempotent)",
289
+ "operationId": "addTool",
290
+ "requestBody": {
291
+ "required": true,
292
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddRequest" } } }
293
+ },
294
+ "responses": {
295
+ "200": {
296
+ "description": "Add result",
297
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddResponse" } } }
298
+ },
299
+ "400": { "$ref": "#/components/responses/Error" },
300
+ "502": { "$ref": "#/components/responses/Error" }
301
+ }
302
+ }
303
+ }
304
+ },
305
+ "components": {
306
+ "parameters": {
307
+ "ToolId": {
308
+ "name": "tool_id",
309
+ "in": "path",
310
+ "required": true,
311
+ "description": "TRS-form tool id (owner~repo~tool_id).",
312
+ "schema": { "type": "string" }
313
+ },
314
+ "ToolVersion": {
315
+ "name": "tool_version",
316
+ "in": "path",
317
+ "required": true,
318
+ "schema": { "type": "string" }
319
+ }
320
+ },
321
+ "responses": {
322
+ "NotFound": {
323
+ "description": "Not found",
324
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" } } }
325
+ },
326
+ "Error": {
327
+ "description": "Error",
328
+ "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" } } }
329
+ },
330
+ "JsonSchemaResponse": {
331
+ "description": "JSON Schema document",
332
+ "content": { "application/json": { "schema": { "type": "object", "additionalProperties": true } } }
333
+ }
334
+ },
335
+ "schemas": {
336
+ "ErrorBody": {
337
+ "type": "object",
338
+ "properties": { "detail": { "type": "string" } },
339
+ "required": ["detail"]
340
+ },
341
+ "ParsedTool": {
342
+ "type": "object",
343
+ "description": "Galaxy parsed tool meta-model. Fully described in @galaxy-tool-util/schema; surfaced opaquely here.",
344
+ "additionalProperties": true
345
+ },
346
+ "TrsToolClass": {
347
+ "type": "object",
348
+ "properties": {
349
+ "id": { "type": "string" },
350
+ "name": { "type": "string" },
351
+ "description": { "type": "string" }
352
+ }
353
+ },
354
+ "TrsToolVersion": {
355
+ "type": "object",
356
+ "properties": {
357
+ "url": { "type": "string" },
358
+ "id": { "type": "string" },
359
+ "name": { "type": "string" },
360
+ "is_production": { "type": "boolean" },
361
+ "descriptor_type": { "type": "array", "items": { "type": "string", "enum": ["CWL", "WDL", "NFL", "GALAXY", "SMK"] } },
362
+ "containerfile": { "type": "boolean" },
363
+ "meta_version": { "type": "string" },
364
+ "verified": { "type": "boolean" },
365
+ "signed": { "type": "boolean" }
366
+ },
367
+ "required": ["url", "id"]
368
+ },
369
+ "TrsTool": {
370
+ "type": "object",
371
+ "properties": {
372
+ "url": { "type": "string" },
373
+ "id": { "type": "string" },
374
+ "organization": { "type": "string" },
375
+ "toolclass": { "$ref": "#/components/schemas/TrsToolClass" },
376
+ "versions": { "type": "array", "items": { "$ref": "#/components/schemas/TrsToolVersion" } },
377
+ "name": { "type": "string" },
378
+ "description": { "type": "string" },
379
+ "meta_version": { "type": "string" },
380
+ "has_checker": { "type": "boolean" },
381
+ "checker_url": { "type": "string" }
382
+ },
383
+ "required": ["url", "id", "organization", "toolclass", "versions"]
384
+ },
385
+ "SearchHit": {
386
+ "type": "object",
387
+ "properties": {
388
+ "toolId": { "type": "string" },
389
+ "toolVersion": { "type": "string" },
390
+ "name": { "type": "string" },
391
+ "description": { "type": "string" }
392
+ },
393
+ "required": ["toolId", "toolVersion"]
394
+ },
395
+ "SearchResults": {
396
+ "type": "object",
397
+ "properties": {
398
+ "q": { "type": "string" },
399
+ "page": { "type": "integer" },
400
+ "pageSize": { "type": "integer" },
401
+ "total": { "type": "integer" },
402
+ "hits": { "type": "array", "items": { "$ref": "#/components/schemas/SearchHit" } }
403
+ },
404
+ "required": ["q", "page", "pageSize", "total", "hits"]
405
+ },
406
+ "CachedToolEntry": {
407
+ "type": "object",
408
+ "properties": {
409
+ "cacheKey": { "type": "string" },
410
+ "toolId": { "type": "string" },
411
+ "toolVersion": { "type": "string" },
412
+ "requestVersion": { "type": "string", "description": "Cache request version when it differs from the displayed wrapper version, such as _default_." },
413
+ "source": { "type": "string" },
414
+ "sourceUrl": { "type": "string" },
415
+ "cachedAt": { "type": "string" },
416
+ "sizeBytes": { "type": "integer" },
417
+ "decodable": { "type": "boolean" },
418
+ "toolshedUrl": { "type": "string" },
419
+ "refetchable": { "type": "boolean" }
420
+ },
421
+ "required": ["cacheKey", "toolId", "toolVersion", "source", "sourceUrl", "cachedAt", "decodable", "refetchable"]
422
+ },
423
+ "CacheStats": {
424
+ "type": "object",
425
+ "properties": {
426
+ "count": { "type": "integer" },
427
+ "totalBytes": { "type": "integer" },
428
+ "bySource": { "type": "object", "additionalProperties": { "type": "integer" } },
429
+ "oldest": { "type": "string" },
430
+ "newest": { "type": "string" }
431
+ },
432
+ "required": ["count", "bySource"]
433
+ },
434
+ "ListResponse": {
435
+ "type": "object",
436
+ "properties": {
437
+ "entries": { "type": "array", "items": { "$ref": "#/components/schemas/CachedToolEntry" } },
438
+ "stats": { "$ref": "#/components/schemas/CacheStats" }
439
+ },
440
+ "required": ["entries", "stats"]
441
+ },
442
+ "DeleteResponse": {
443
+ "type": "object",
444
+ "properties": { "removed": { "type": "boolean" } },
445
+ "required": ["removed"]
446
+ },
447
+ "ClearResponse": {
448
+ "type": "object",
449
+ "properties": { "removed": { "type": "integer" } },
450
+ "required": ["removed"]
451
+ },
452
+ "RefetchRequest": {
453
+ "type": "object",
454
+ "properties": {
455
+ "toolId": { "type": "string" },
456
+ "toolVersion": { "type": "string" }
457
+ },
458
+ "required": ["toolId"]
459
+ },
460
+ "RefetchResponse": {
461
+ "type": "object",
462
+ "properties": {
463
+ "cacheKey": { "type": "string" },
464
+ "fetched": { "type": "boolean" },
465
+ "alreadyCached": { "type": "boolean" }
466
+ },
467
+ "required": ["cacheKey", "fetched", "alreadyCached"]
468
+ },
469
+ "AddRequest": {
470
+ "type": "object",
471
+ "properties": {
472
+ "toolId": { "type": "string" },
473
+ "toolVersion": { "type": "string" }
474
+ },
475
+ "required": ["toolId"]
476
+ },
477
+ "AddResponse": {
478
+ "type": "object",
479
+ "properties": {
480
+ "cacheKey": { "type": "string" },
481
+ "alreadyCached": { "type": "boolean" }
482
+ },
483
+ "required": ["cacheKey", "alreadyCached"]
484
+ }
485
+ }
486
+ }
487
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@galaxy-tool-util/tool-cache-proxy",
3
- "version": "1.10.1",
3
+ "version": "1.12.0",
4
4
  "description": "Galaxy tool cache proxy server — caches and serves tool schemas over HTTP",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,6 +14,8 @@
14
14
  },
15
15
  "files": [
16
16
  "dist",
17
+ "public",
18
+ "openapi.json",
17
19
  "README.md",
18
20
  "LICENSE"
19
21
  ],
@@ -30,14 +32,17 @@
30
32
  "dependencies": {
31
33
  "effect": "^3.21.0",
32
34
  "yaml": "^2.8.3",
33
- "@galaxy-tool-util/core": "1.10.1",
34
- "@galaxy-tool-util/schema": "1.10.1"
35
+ "@galaxy-tool-util/schema": "1.12.0",
36
+ "@galaxy-tool-util/core": "1.12.0"
35
37
  },
36
38
  "devDependencies": {
37
- "@types/node": "^25.5.0"
39
+ "@types/node": "^25.5.0",
40
+ "openapi-typescript": "^7.13.0"
38
41
  },
39
42
  "scripts": {
40
43
  "build": "tsc",
44
+ "copy-ui": "node scripts/copy-ui.mjs",
45
+ "codegen": "openapi-typescript openapi.json -o src/generated/api-types.ts",
41
46
  "typecheck": "tsc --noEmit",
42
47
  "test": "tsc --noEmit && vitest run",
43
48
  "test:watch": "vitest",