@galaxy-tool-util/core 1.10.1 → 1.13.1

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 (80) hide show
  1. package/dist/cache/index.d.ts +1 -1
  2. package/dist/cache/index.d.ts.map +1 -1
  3. package/dist/cache/node.d.ts +5 -5
  4. package/dist/cache/node.d.ts.map +1 -1
  5. package/dist/cache/node.js +6 -1
  6. package/dist/cache/node.js.map +1 -1
  7. package/dist/cache/storage/filesystem.d.ts +6 -1
  8. package/dist/cache/storage/filesystem.d.ts.map +1 -1
  9. package/dist/cache/storage/filesystem.js +53 -15
  10. package/dist/cache/storage/filesystem.js.map +1 -1
  11. package/dist/cache/storage/indexeddb.d.ts +3 -0
  12. package/dist/cache/storage/indexeddb.d.ts.map +1 -1
  13. package/dist/cache/storage/indexeddb.js +20 -3
  14. package/dist/cache/storage/indexeddb.js.map +1 -1
  15. package/dist/cache/storage/interface.d.ts +4 -0
  16. package/dist/cache/storage/interface.d.ts.map +1 -1
  17. package/dist/cache/tool-cache.d.ts +13 -4
  18. package/dist/cache/tool-cache.d.ts.map +1 -1
  19. package/dist/cache/tool-cache.js +31 -4
  20. package/dist/cache/tool-cache.js.map +1 -1
  21. package/dist/cache-http/cache-to-trs.d.ts +36 -0
  22. package/dist/cache-http/cache-to-trs.d.ts.map +1 -0
  23. package/dist/cache-http/cache-to-trs.js +81 -0
  24. package/dist/cache-http/cache-to-trs.js.map +1 -0
  25. package/dist/cache-http/dto.d.ts +69 -0
  26. package/dist/cache-http/dto.d.ts.map +1 -0
  27. package/dist/cache-http/dto.js +8 -0
  28. package/dist/cache-http/dto.js.map +1 -0
  29. package/dist/cache-http/error.d.ts +10 -0
  30. package/dist/cache-http/error.d.ts.map +1 -0
  31. package/dist/cache-http/error.js +15 -0
  32. package/dist/cache-http/error.js.map +1 -0
  33. package/dist/cache-http/handlers.d.ts +41 -0
  34. package/dist/cache-http/handlers.d.ts.map +1 -0
  35. package/dist/cache-http/handlers.js +241 -0
  36. package/dist/cache-http/handlers.js.map +1 -0
  37. package/dist/cache-http/index.d.ts +13 -0
  38. package/dist/cache-http/index.d.ts.map +1 -0
  39. package/dist/cache-http/index.js +12 -0
  40. package/dist/cache-http/index.js.map +1 -0
  41. package/dist/cache-http/route-table.d.ts +67 -0
  42. package/dist/cache-http/route-table.d.ts.map +1 -0
  43. package/dist/cache-http/route-table.js +145 -0
  44. package/dist/cache-http/route-table.js.map +1 -0
  45. package/dist/client/index.d.ts +1 -0
  46. package/dist/client/index.d.ts.map +1 -1
  47. package/dist/client/index.js +1 -0
  48. package/dist/client/index.js.map +1 -1
  49. package/dist/client/tool-source.d.ts +6 -0
  50. package/dist/client/tool-source.d.ts.map +1 -0
  51. package/dist/client/tool-source.js +27 -0
  52. package/dist/client/tool-source.js.map +1 -0
  53. package/dist/client/toolshed.d.ts.map +1 -1
  54. package/dist/client/toolshed.js +24 -2
  55. package/dist/client/toolshed.js.map +1 -1
  56. package/dist/diagnostics.d.ts +5 -0
  57. package/dist/diagnostics.d.ts.map +1 -0
  58. package/dist/diagnostics.js +3 -0
  59. package/dist/diagnostics.js.map +1 -0
  60. package/dist/index.d.ts +8 -1
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +4 -0
  63. package/dist/index.js.map +1 -1
  64. package/dist/node-http.d.ts +39 -0
  65. package/dist/node-http.d.ts.map +1 -0
  66. package/dist/node-http.js +114 -0
  67. package/dist/node-http.js.map +1 -0
  68. package/dist/node.d.ts +1 -0
  69. package/dist/node.d.ts.map +1 -1
  70. package/dist/node.js +1 -0
  71. package/dist/node.js.map +1 -1
  72. package/dist/tool-info.d.ts +7 -0
  73. package/dist/tool-info.d.ts.map +1 -1
  74. package/dist/tool-info.js +77 -19
  75. package/dist/tool-info.js.map +1 -1
  76. package/dist/tool-source.d.ts +9 -0
  77. package/dist/tool-source.d.ts.map +1 -0
  78. package/dist/tool-source.js +9 -0
  79. package/dist/tool-source.js.map +1 -0
  80. package/package.json +2 -2
@@ -0,0 +1,145 @@
1
+ /**
2
+ * URL routing for the shared cache HTTP surface.
3
+ *
4
+ * `matchCacheRoute` returns a tagged-union route object given a method + url
5
+ * (or null if no cache route matches). `dispatchCacheRoute` invokes the
6
+ * matching handler. Both are framework-agnostic — server adapters (Node http,
7
+ * Effect HttpServer, …) compose them with their own non-cache routes.
8
+ */
9
+ import { addTool, cacheStats, clearCache, deleteCacheEntry, getParameterSchema, getParsedTool, getToolSource, listCache, refetchTool, searchTools, trsGetTool, trsListTools, trsListVersions, } from "./handlers.js";
10
+ const PARAMETER_SCHEMA_TAILS = {
11
+ parameter_request_schema: "request",
12
+ parameter_landing_request_schema: "landing_request",
13
+ parameter_test_case_xml_schema: "test_case_xml",
14
+ };
15
+ const TRS_PREFIX = "/api/ga4gh/trs/v2/tools";
16
+ /** Match a method + url against the shared cache HTTP surface. */
17
+ export function matchCacheRoute(method, url) {
18
+ const [rawPath, queryStr] = url.split("?");
19
+ const query = new URLSearchParams(queryStr ?? "");
20
+ // Admin namespace
21
+ if (rawPath === "/api/tool-cache" || rawPath.startsWith("/api/tool-cache/")) {
22
+ if (rawPath === "/api/tool-cache") {
23
+ if (method === "GET")
24
+ return { handler: "listCache", query };
25
+ if (method === "DELETE")
26
+ return { handler: "clearCache", query };
27
+ return null;
28
+ }
29
+ if (rawPath === "/api/tool-cache/stats" && method === "GET") {
30
+ return { handler: "cacheStats" };
31
+ }
32
+ if (rawPath === "/api/tool-cache/refetch" && method === "POST") {
33
+ return { handler: "refetchTool" };
34
+ }
35
+ if (rawPath === "/api/tool-cache/add" && method === "POST") {
36
+ return { handler: "addTool" };
37
+ }
38
+ const keyMatch = rawPath.match(/^\/api\/tool-cache\/([^/]+)$/);
39
+ if (keyMatch && method === "DELETE") {
40
+ return { handler: "deleteCacheEntry", cacheKey: decodeURIComponent(keyMatch[1]) };
41
+ }
42
+ return null;
43
+ }
44
+ // TRS namespace
45
+ if (rawPath === TRS_PREFIX || rawPath.startsWith(`${TRS_PREFIX}/`)) {
46
+ if (method !== "GET")
47
+ return null;
48
+ if (rawPath === TRS_PREFIX)
49
+ return { handler: "trsListTools" };
50
+ const versionsMatch = rawPath.match(/^\/api\/ga4gh\/trs\/v2\/tools\/([^/]+)\/versions$/);
51
+ if (versionsMatch) {
52
+ return { handler: "trsListVersions", toolId: decodeURIComponent(versionsMatch[1]) };
53
+ }
54
+ const toolMatch = rawPath.match(/^\/api\/ga4gh\/trs\/v2\/tools\/([^/]+)$/);
55
+ if (toolMatch) {
56
+ return { handler: "trsGetTool", toolId: decodeURIComponent(toolMatch[1]) };
57
+ }
58
+ return null;
59
+ }
60
+ // /api/tools (search + per-version reads)
61
+ if (rawPath === "/api/tools" && method === "GET") {
62
+ return { handler: "searchTools", query };
63
+ }
64
+ const versionMatch = rawPath.match(/^\/api\/tools\/([^/]+)\/versions\/([^/]+)(?:\/([^/]+))?$/);
65
+ if (versionMatch && method === "GET") {
66
+ const toolId = decodeURIComponent(versionMatch[1]);
67
+ const toolVersion = decodeURIComponent(versionMatch[2]);
68
+ const tail = versionMatch[3];
69
+ if (tail === undefined) {
70
+ return { handler: "getParsedTool", toolId, toolVersion };
71
+ }
72
+ if (tail === "tool_source") {
73
+ return { handler: "getToolSource", toolId, toolVersion };
74
+ }
75
+ const kind = PARAMETER_SCHEMA_TAILS[tail];
76
+ if (kind !== undefined) {
77
+ return { handler: "getParameterSchema", toolId, toolVersion, kind };
78
+ }
79
+ }
80
+ return null;
81
+ }
82
+ /**
83
+ * Run a matched route. Body-bearing routes call `readBody` for parsed JSON.
84
+ * Errors throw `HttpError`; adapters translate them.
85
+ */
86
+ export async function dispatchCacheRoute(route, ctx, readBody) {
87
+ if (route.handler === "getToolSource") {
88
+ const source = await getToolSource(ctx, route.toolId, route.toolVersion);
89
+ return {
90
+ kind: "bytes",
91
+ body: new TextEncoder().encode(source.contents),
92
+ headers: {
93
+ "Content-Type": "text/plain; charset=utf-8",
94
+ language: source.language,
95
+ "X-Tool-Source-Macros-Expanded": String(source.macrosExpanded),
96
+ "X-Content-Type-Options": "nosniff",
97
+ },
98
+ };
99
+ }
100
+ return { kind: "json", body: await dispatchJsonCacheRoute(route, ctx, readBody) };
101
+ }
102
+ async function dispatchJsonCacheRoute(route, ctx, readBody) {
103
+ switch (route.handler) {
104
+ case "searchTools": {
105
+ const q = route.query.get("q") ?? undefined;
106
+ const pageStr = route.query.get("page");
107
+ const pageSizeStr = route.query.get("page_size");
108
+ const opts = {};
109
+ if (q !== undefined)
110
+ opts.q = q;
111
+ if (pageStr !== null)
112
+ opts.page = Number(pageStr);
113
+ if (pageSizeStr !== null)
114
+ opts.pageSize = Number(pageSizeStr);
115
+ return searchTools(ctx, opts);
116
+ }
117
+ case "trsListTools":
118
+ return trsListTools(ctx);
119
+ case "trsGetTool":
120
+ return trsGetTool(ctx, route.toolId);
121
+ case "trsListVersions":
122
+ return trsListVersions(ctx, route.toolId);
123
+ case "getParsedTool":
124
+ return getParsedTool(ctx, route.toolId, route.toolVersion);
125
+ case "getParameterSchema":
126
+ return getParameterSchema(ctx, route.toolId, route.toolVersion, route.kind);
127
+ case "listCache": {
128
+ const decode = route.query.get("decode") === "1";
129
+ return listCache(ctx, { decode });
130
+ }
131
+ case "cacheStats":
132
+ return cacheStats(ctx);
133
+ case "deleteCacheEntry":
134
+ return deleteCacheEntry(ctx, route.cacheKey);
135
+ case "clearCache": {
136
+ const prefix = route.query.get("prefix") ?? undefined;
137
+ return clearCache(ctx, prefix);
138
+ }
139
+ case "refetchTool":
140
+ return refetchTool(ctx, await readBody());
141
+ case "addTool":
142
+ return addTool(ctx, await readBody());
143
+ }
144
+ }
145
+ //# sourceMappingURL=route-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route-table.js","sourceRoot":"","sources":["../../src/cache-http/route-table.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  export { fetchFromToolShed, fetchFromGalaxy, ToolFetchError } from "./toolshed.js";
2
2
  export { getTRSToolVersions, getLatestTRSToolVersion } from "./trs.js";
3
3
  export type { TRSToolVersion } from "./trs.js";
4
+ export { fetchToolSourceFromToolShed, fetchToolSourceFromGalaxy } from "./tool-source.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AACvE,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export { fetchFromToolShed, fetchFromGalaxy, ToolFetchError } from "./toolshed.js";
2
2
  export { getTRSToolVersions, getLatestTRSToolVersion } from "./trs.js";
3
+ export { fetchToolSourceFromToolShed, fetchToolSourceFromGalaxy } from "./tool-source.js";
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAEvE,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ToolSourceDocument } from "../tool-source.js";
2
+ /** Fetch the expanded wrapper selected by tool version, without changeset selection. */
3
+ export declare function fetchToolSourceFromToolShed(toolshedUrl: string, trsToolId: string, toolVersion: string, fetcher?: typeof fetch): Promise<ToolSourceDocument>;
4
+ /** Galaxy may restrict source display to administrators, depending on its configuration. */
5
+ export declare function fetchToolSourceFromGalaxy(galaxyUrl: string, toolId: string, toolVersion?: string | null, fetcher?: typeof fetch): Promise<ToolSourceDocument>;
6
+ //# sourceMappingURL=tool-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-source.d.ts","sourceRoot":"","sources":["../../src/client/tool-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAyB5D,wFAAwF;AACxF,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAO,KAAwB,GACvC,OAAO,CAAC,kBAAkB,CAAC,CAK7B;AAED,4FAA4F;AAC5F,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,OAAO,GAAE,OAAO,KAAwB,GACvC,OAAO,CAAC,kBAAkB,CAAC,CAM7B"}
@@ -0,0 +1,27 @@
1
+ import { ToolFetchError } from "./toolshed.js";
2
+ async function fetchSource(url, fetcher) {
3
+ const response = await fetcher(url, {
4
+ headers: { Accept: "text/plain, application/xml, application/yaml, application/json" },
5
+ signal: AbortSignal.timeout(30_000),
6
+ });
7
+ if (!response.ok) {
8
+ const body = await response.text().catch(() => "");
9
+ throw new ToolFetchError(`Failed to fetch tool source from ${url}: ${response.status} ${body.slice(0, 200)}`, url, response.status);
10
+ }
11
+ const contents = await response.text();
12
+ const header = response.headers.get("language")?.toLowerCase();
13
+ const language = header === "xml" || header === "yaml" || header === "json" || header === "cwl"
14
+ ? header
15
+ : "text";
16
+ return { contents, language, macrosExpanded: language === "xml" };
17
+ }
18
+ /** Fetch the expanded wrapper selected by tool version, without changeset selection. */
19
+ export function fetchToolSourceFromToolShed(toolshedUrl, trsToolId, toolVersion, fetcher = globalThis.fetch) {
20
+ return fetchSource(`${toolshedUrl.replace(/\/$/, "")}/api/tools/${encodeURIComponent(trsToolId)}/versions/${encodeURIComponent(toolVersion)}/tool_source`, fetcher);
21
+ }
22
+ /** Galaxy may restrict source display to administrators, depending on its configuration. */
23
+ export function fetchToolSourceFromGalaxy(galaxyUrl, toolId, toolVersion, fetcher = globalThis.fetch) {
24
+ const params = toolVersion ? `?tool_version=${encodeURIComponent(toolVersion)}` : "";
25
+ return fetchSource(`${galaxyUrl.replace(/\/$/, "")}/api/tools/${encodeURIComponent(toolId)}/raw_tool_source${params}`, fetcher);
26
+ }
27
+ //# sourceMappingURL=tool-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-source.js","sourceRoot":"","sources":["../../src/client/tool-source.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,KAAK,UAAU,WAAW,CAAC,GAAW,EAAE,OAAqB;IAC3D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;QAClC,OAAO,EAAE,EAAE,MAAM,EAAE,iEAAiE,EAAE;QACtF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;KACpC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,cAAc,CACtB,oCAAoC,GAAG,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EACnF,GAAG,EACH,QAAQ,CAAC,MAAM,CAChB,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC;IAC/D,MAAM,QAAQ,GACZ,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,KAAK;QAC5E,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,KAAK,KAAK,EAAE,CAAC;AACpE,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,2BAA2B,CACzC,WAAmB,EACnB,SAAiB,EACjB,WAAmB,EACnB,UAAwB,UAAU,CAAC,KAAK;IAExC,OAAO,WAAW,CAChB,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,kBAAkB,CAAC,SAAS,CAAC,aAAa,kBAAkB,CAAC,WAAW,CAAC,cAAc,EACtI,OAAO,CACR,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,yBAAyB,CACvC,SAAiB,EACjB,MAAc,EACd,WAA2B,EAC3B,UAAwB,UAAU,CAAC,KAAK;IAExC,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,OAAO,WAAW,CAChB,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,kBAAkB,CAAC,MAAM,CAAC,mBAAmB,MAAM,EAAE,EAClG,OAAO,CACR,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"toolshed.d.ts","sourceRoot":"","sources":["../../src/client/toolshed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,oEAAoE;AACpE,qBAAa,cAAe,SAAQ,KAAK;IAIrC,kCAAkC;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM;IAN9B,QAAQ,CAAC,IAAI,oBAAoB;gBAE/B,OAAO,EAAE,MAAM;IACf,kCAAkC;IACzB,GAAG,EAAE,MAAM;IACpB,2DAA2D;IAClD,UAAU,CAAC,EAAE,MAAM,YAAA;CAI/B;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAO,KAAwB,GACvC,OAAO,CAAC,UAAU,CAAC,CAgBrB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,OAAO,GAAE,OAAO,KAAwB,GACvC,OAAO,CAAC,UAAU,CAAC,CAkBrB"}
1
+ {"version":3,"file":"toolshed.d.ts","sourceRoot":"","sources":["../../src/client/toolshed.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,oEAAoE;AACpE,qBAAa,cAAe,SAAQ,KAAK;IAIrC,kCAAkC;IAClC,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM;IAN9B,QAAQ,CAAC,IAAI,oBAAoB;gBAE/B,OAAO,EAAE,MAAM;IACf,kCAAkC;IACzB,GAAG,EAAE,MAAM;IACpB,2DAA2D;IAClD,UAAU,CAAC,EAAE,MAAM,YAAA;CAI/B;AA0BD;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAO,KAAwB,GACvC,OAAO,CAAC,UAAU,CAAC,CAgBrB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,OAAO,GAAE,OAAO,KAAwB,GACvC,OAAO,CAAC,UAAU,CAAC,CAkBrB"}
@@ -1,3 +1,5 @@
1
+ import * as Either from "effect/Either";
2
+ import * as ParseResult from "effect/ParseResult";
1
3
  import * as S from "effect/Schema";
2
4
  import { ParsedTool } from "@galaxy-tool-util/schema";
3
5
  /** Error thrown when fetching a tool from a remote source fails. */
@@ -15,6 +17,26 @@ export class ToolFetchError extends Error {
15
17
  this.statusCode = statusCode;
16
18
  }
17
19
  }
20
+ function truncateDiagnostic(text, limit) {
21
+ return text.length > limit ? `${text.slice(0, limit - 1)}…` : text;
22
+ }
23
+ /**
24
+ * Report the first failing field path and a bounded reason. ArrayFormatter
25
+ * removes the outer error tree, but its Type messages can still render large
26
+ * schema declarations and actual values, so replace those with a short reason.
27
+ * Bound both source and detail to keep the complete message under 500 characters;
28
+ * ToolFetchError.url retains the full source URL.
29
+ */
30
+ function decodeParsedTool(json, url) {
31
+ const result = S.decodeUnknownEither(ParsedTool)(json);
32
+ if (Either.isRight(result))
33
+ return result.right;
34
+ const issues = ParseResult.ArrayFormatter.formatErrorSync(result.left);
35
+ const issue = issues[0];
36
+ const reason = issue?._tag === "Type" ? "has invalid type" : issue?.message;
37
+ const detail = issue ? `[${issue.path.join(".")}] ${reason}` : "decode failed";
38
+ throw new ToolFetchError(`invalid tool metadata from ${truncateDiagnostic(url, 160)}: ${truncateDiagnostic(detail, 300)}`, url);
39
+ }
18
40
  /**
19
41
  * Fetch parsed tool metadata from a ToolShed instance via its TRS API.
20
42
  * @param toolshedUrl - Base URL of the ToolShed (e.g. `https://toolshed.g2.bx.psu.edu`)
@@ -33,7 +55,7 @@ export async function fetchFromToolShed(toolshedUrl, trsToolId, toolVersion, fet
33
55
  throw new ToolFetchError(`Failed to fetch from ${url}: ${response.status} ${body.slice(0, 200)}`, url, response.status);
34
56
  }
35
57
  const json = await response.json();
36
- return S.decodeUnknownSync(ParsedTool)(json);
58
+ return decodeParsedTool(json, url);
37
59
  }
38
60
  /**
39
61
  * Fetch parsed tool metadata from a Galaxy instance via its API.
@@ -55,6 +77,6 @@ export async function fetchFromGalaxy(galaxyUrl, toolId, toolVersion, fetcher =
55
77
  throw new ToolFetchError(`Failed to fetch from Galaxy ${url}: ${response.status} ${body.slice(0, 200)}`, url, response.status);
56
78
  }
57
79
  const json = await response.json();
58
- return S.decodeUnknownSync(ParsedTool)(json);
80
+ return decodeParsedTool(json, url);
59
81
  }
60
82
  //# sourceMappingURL=toolshed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toolshed.js","sourceRoot":"","sources":["../../src/client/toolshed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,oEAAoE;AACpE,MAAM,OAAO,cAAe,SAAQ,KAAK;IAK5B;IAEA;IANF,IAAI,GAAG,gBAAgB,CAAC;IACjC,YACE,OAAe;IACf,kCAAkC;IACzB,GAAW;IACpB,2DAA2D;IAClD,UAAmB;QAE5B,KAAK,CAAC,OAAO,CAAC,CAAC;QAJN,QAAG,GAAH,GAAG,CAAQ;QAEX,eAAU,GAAV,UAAU,CAAS;IAG9B,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,WAAmB,EACnB,SAAiB,EACjB,WAAmB,EACnB,UAAwB,UAAU,CAAC,KAAK;IAExC,MAAM,GAAG,GAAG,GAAG,WAAW,cAAc,SAAS,aAAa,WAAW,EAAE,CAAC;IAC5E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;QAClC,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;QACvC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;KACpC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,cAAc,CACtB,wBAAwB,GAAG,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EACvE,GAAG,EACH,QAAQ,CAAC,MAAM,CAChB,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAiB,EACjB,MAAc,EACd,WAA2B,EAC3B,UAAwB,UAAU,CAAC,KAAK;IAExC,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,MAAM,GAAG,GAAG,GAAG,SAAS,cAAc,SAAS,UAAU,MAAM,EAAE,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;QAClC,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;QACvC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;KACpC,CAAC,CAAC;IACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,cAAc,CACtB,+BAA+B,GAAG,KAAK,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAC9E,GAAG,EACH,QAAQ,CAAC,MAAM,CAChB,CAAC;IACJ,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,OAAO,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC"}
1
+ {"version":3,"file":"toolshed.js","sourceRoot":"","sources":["../../src/client/toolshed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Optional sink for recoverable diagnostics emitted by core services. */
2
+ export type DiagnosticSink = (message: string) => void;
3
+ /** Default sink for library consumers: recoverable failures stay silent. */
4
+ export declare const ignoreDiagnostic: DiagnosticSink;
5
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;AAEvD,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,EAAE,cAAyB,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Default sink for library consumers: recoverable failures stay silent. */
2
+ export const ignoreDiagnostic = () => { };
3
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,MAAM,CAAC,MAAM,gBAAgB,GAAmB,GAAG,EAAE,GAAE,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -20,7 +20,7 @@ cacheKey,
20
20
  CacheIndex,
21
21
  /** Two-layer cache (memory + storage) for parsed tool metadata. */
22
22
  ToolCache, DEFAULT_TOOLSHED_URL, TOOLSHED_URL_ENV_VAR, } from "./cache/index.js";
23
- export type { ToolCoordinates, CacheIndexEntry, CacheIndexData, CacheStorage, ResolvedCoordinates, CacheStats, } from "./cache/index.js";
23
+ export type { ToolCoordinates, CacheIndexEntry, CacheIndexData, CacheStorage, ResolvedCoordinates, CacheStats, ToolCacheOptions, } from "./cache/index.js";
24
24
  /** IndexedDB-backed cache storage for browser/Web Worker contexts. */
25
25
  export { IndexedDBCacheStorage } from "./cache/index.js";
26
26
  /** Fetch parsed tool metadata from a ToolShed instance via TRS API. */
@@ -31,7 +31,14 @@ export type { TRSToolVersion } from "./client/index.js";
31
31
  /** High-level service: fetch tools from multiple sources with automatic caching. */
32
32
  export { ToolInfoService } from "./tool-info.js";
33
33
  export type { ToolInfoOptions, ToolSource } from "./tool-info.js";
34
+ export { ignoreDiagnostic } from "./diagnostics.js";
35
+ export type { DiagnosticSink } from "./diagnostics.js";
34
36
  /** Shared YAML config schema for tool sources and cache settings. */
35
37
  export { WorkflowToolConfig, ToolSourceConfig, ToolCacheConfig, toolInfoOptionsFromConfig, } from "./config.js";
36
38
  export type { ConfigToolInfoOptions } from "./config.js";
39
+ /** Framework-agnostic HTTP handlers + DTOs shared by gxwf-web and tool-cache-proxy. */
40
+ export { HttpError, matchCacheRoute, dispatchCacheRoute, type CacheResult, type CacheRoute, cacheToTrs, cacheToTrsOne, entryToTrsVersion, listCache, cacheStats, deleteCacheEntry, clearCache, refetchTool, addTool, searchTools, trsListTools, trsGetTool, trsListVersions, getParsedTool, getParameterSchema, getToolSource, } from "./cache-http/index.js";
41
+ export type { HandlerCtx, ListOptions, SearchOptions, CacheIndexRecord, AddRequest, AddResponse, CachedToolEntry, ClearResponse, DeleteResponse, ListResponse, ParameterSchemaKind, RefetchRequest, RefetchResponse, SearchResults, } from "./cache-http/index.js";
42
+ export type { ToolSourceDocument } from "./tool-source.js";
43
+ export { fetchToolSourceFromToolShed, fetchToolSourceFromGalaxy } from "./client/index.js";
37
44
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO;AACL,4FAA4F;AAC5F,mBAAmB;AACnB,oEAAoE;AACpE,aAAa;AACb,wFAAwF;AACxF,uBAAuB;AACvB,gGAAgG;AAChG,WAAW;AACX,sFAAsF;AACtF,QAAQ;AACR,iFAAiF;AACjF,UAAU;AACV,mEAAmE;AACnE,SAAS,EACT,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,sEAAsE;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,uEAAuE;AACvE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACvF,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAChF,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,oFAAoF;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClE,qEAAqE;AACrE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO;AACL,4FAA4F;AAC5F,mBAAmB;AACnB,oEAAoE;AACpE,aAAa;AACb,wFAAwF;AACxF,uBAAuB;AACvB,gGAAgG;AAChG,WAAW;AACX,sFAAsF;AACtF,QAAQ;AACR,iFAAiF;AACjF,UAAU;AACV,mEAAmE;AACnE,SAAS,EACT,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,eAAe,EACf,eAAe,EACf,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACV,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,sEAAsE;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,uEAAuE;AACvE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACvF,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAChF,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,oFAAoF;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,qEAAqE;AACrE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,uFAAuF;AACvF,OAAO,EACL,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,eAAe,EACf,aAAa,EACb,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,aAAa,GACd,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js CHANGED
@@ -28,6 +28,10 @@ export { fetchFromToolShed, fetchFromGalaxy, ToolFetchError } from "./client/ind
28
28
  export { getTRSToolVersions, getLatestTRSToolVersion } from "./client/index.js";
29
29
  /** High-level service: fetch tools from multiple sources with automatic caching. */
30
30
  export { ToolInfoService } from "./tool-info.js";
31
+ export { ignoreDiagnostic } from "./diagnostics.js";
31
32
  /** Shared YAML config schema for tool sources and cache settings. */
32
33
  export { WorkflowToolConfig, ToolSourceConfig, ToolCacheConfig, toolInfoOptionsFromConfig, } from "./config.js";
34
+ /** Framework-agnostic HTTP handlers + DTOs shared by gxwf-web and tool-cache-proxy. */
35
+ export { HttpError, matchCacheRoute, dispatchCacheRoute, cacheToTrs, cacheToTrsOne, entryToTrsVersion, listCache, cacheStats, deleteCacheEntry, clearCache, refetchTool, addTool, searchTools, trsListTools, trsGetTool, trsListVersions, getParsedTool, getParameterSchema, getToolSource, } from "./cache-http/index.js";
36
+ export { fetchToolSourceFromToolShed, fetchToolSourceFromGalaxy } from "./client/index.js";
33
37
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO;AACL,4FAA4F;AAC5F,mBAAmB;AACnB,oEAAoE;AACpE,aAAa;AACb,wFAAwF;AACxF,uBAAuB;AACvB,gGAAgG;AAChG,WAAW;AACX,sFAAsF;AACtF,QAAQ;AACR,iFAAiF;AACjF,UAAU;AACV,mEAAmE;AACnE,SAAS,EACT,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAS1B,sEAAsE;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,uEAAuE;AACvE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACvF,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEhF,oFAAoF;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,qEAAqE;AACrE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,GAC1B,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO;AACL,4FAA4F;AAC5F,mBAAmB;AACnB,oEAAoE;AACpE,aAAa;AACb,wFAAwF;AACxF,uBAAuB;AACvB,gGAAgG;AAChG,WAAW;AACX,sFAAsF;AACtF,QAAQ;AACR,iFAAiF;AACjF,UAAU;AACV,mEAAmE;AACnE,SAAS,EACT,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAU1B,sEAAsE;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AACzD,uEAAuE;AACvE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACvF,8DAA8D;AAC9D,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEhF,oFAAoF;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,qEAAqE;AACrE,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAGrB,uFAAuF;AACvF,OAAO,EACL,SAAS,EACT,eAAe,EACf,kBAAkB,EAGlB,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,EACX,YAAY,EACZ,UAAU,EACV,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAmB/B,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @module @galaxy-tool-util/core/node-http
3
+ *
4
+ * Shared Node `http` adapter helpers for servers that compose
5
+ * `matchCacheRoute` / `dispatchCacheRoute` with their own routes
6
+ * (`gxwf-web`, `tool-cache-proxy`).
7
+ *
8
+ * Re-exported from `@galaxy-tool-util/core/node` — import from there.
9
+ */
10
+ import type { IncomingMessage, ServerResponse } from "node:http";
11
+ import type { CacheResult } from "./cache-http/route-table.js";
12
+ /** Write a JSON response with status, content-type, and content-length set. */
13
+ export declare function writeJson(res: ServerResponse, status: number, body: unknown): void;
14
+ /** Serialize a cache handler result, preserving source bytes and response headers. */
15
+ export declare function writeCacheResult(res: ServerResponse, result: CacheResult): void;
16
+ export interface CorsOptions {
17
+ /** `Access-Control-Allow-Origin` value. Default `*`. */
18
+ origin?: string;
19
+ /** `Access-Control-Allow-Methods` value. */
20
+ methods?: string;
21
+ /** `Access-Control-Allow-Headers` value. */
22
+ headers?: string;
23
+ }
24
+ /** Set `Access-Control-Allow-*` headers on a response. */
25
+ export declare function setCorsHeaders(res: ServerResponse, opts?: CorsOptions): void;
26
+ /** Read a JSON body off the request. Throws `HttpError(400)` on parse failure. */
27
+ export declare function readJsonBody<T>(req: IncomingMessage): Promise<T>;
28
+ export interface ServeStaticOptions {
29
+ /** Content-Security-Policy header to set on responses. Omit to skip. */
30
+ csp?: string;
31
+ /** Extra MIME-type entries, merged over the defaults. */
32
+ mimeTypes?: Record<string, string>;
33
+ }
34
+ /**
35
+ * Serve a file from `uiDir` based on `urlPath`, falling back to `index.html`
36
+ * for SPA routing. Guards against path traversal. Uses the merged MIME table.
37
+ */
38
+ export declare function serveStatic(res: ServerResponse, uiDir: string, urlPath: string, opts?: ServeStaticOptions): Promise<void>;
39
+ //# sourceMappingURL=node-http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-http.d.ts","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAsB/D,+EAA+E;AAC/E,wBAAgB,SAAS,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAOlF;AAED,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAO/E;AAED,MAAM,WAAW,WAAW;IAC1B,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,0DAA0D;AAC1D,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,GAAE,WAAgB,GAAG,IAAI,CAWhF;AAED,kFAAkF;AAClF,wBAAsB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,CAatE;AAED,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkCf"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * @module @galaxy-tool-util/core/node-http
3
+ *
4
+ * Shared Node `http` adapter helpers for servers that compose
5
+ * `matchCacheRoute` / `dispatchCacheRoute` with their own routes
6
+ * (`gxwf-web`, `tool-cache-proxy`).
7
+ *
8
+ * Re-exported from `@galaxy-tool-util/core/node` — import from there.
9
+ */
10
+ import * as fs from "node:fs";
11
+ import * as fsPromises from "node:fs/promises";
12
+ import * as path from "node:path";
13
+ import { HttpError } from "./cache-http/error.js";
14
+ const DEFAULT_MIME_TYPES = {
15
+ ".html": "text/html; charset=utf-8",
16
+ ".js": "application/javascript",
17
+ ".mjs": "application/javascript",
18
+ ".css": "text/css",
19
+ ".json": "application/json",
20
+ ".svg": "image/svg+xml",
21
+ ".png": "image/png",
22
+ ".jpg": "image/jpeg",
23
+ ".jpeg": "image/jpeg",
24
+ ".gif": "image/gif",
25
+ ".webp": "image/webp",
26
+ ".ico": "image/x-icon",
27
+ ".woff2": "font/woff2",
28
+ ".woff": "font/woff",
29
+ ".ttf": "font/ttf",
30
+ ".map": "application/json",
31
+ };
32
+ /** Write a JSON response with status, content-type, and content-length set. */
33
+ export function writeJson(res, status, body) {
34
+ const payload = JSON.stringify(body);
35
+ res.writeHead(status, {
36
+ "Content-Type": "application/json",
37
+ "Content-Length": Buffer.byteLength(payload),
38
+ });
39
+ res.end(payload);
40
+ }
41
+ /** Serialize a cache handler result, preserving source bytes and response headers. */
42
+ export function writeCacheResult(res, result) {
43
+ if (result.kind === "json") {
44
+ writeJson(res, 200, result.body);
45
+ }
46
+ else {
47
+ res.writeHead(200, { ...result.headers, "Content-Length": result.body.byteLength });
48
+ res.end(result.body);
49
+ }
50
+ }
51
+ /** Set `Access-Control-Allow-*` headers on a response. */
52
+ export function setCorsHeaders(res, opts = {}) {
53
+ res.setHeader("Access-Control-Expose-Headers", "language, X-Tool-Source-Macros-Expanded");
54
+ res.setHeader("Access-Control-Allow-Origin", opts.origin ?? "*");
55
+ res.setHeader("Access-Control-Allow-Methods", opts.methods ?? "GET, POST, PUT, PATCH, DELETE, OPTIONS");
56
+ res.setHeader("Access-Control-Allow-Headers", opts.headers ?? "Content-Type, Authorization, If-Unmodified-Since");
57
+ }
58
+ /** Read a JSON body off the request. Throws `HttpError(400)` on parse failure. */
59
+ export async function readJsonBody(req) {
60
+ return new Promise((resolve, reject) => {
61
+ const chunks = [];
62
+ req.on("data", (chunk) => chunks.push(chunk));
63
+ req.on("end", () => {
64
+ try {
65
+ resolve(JSON.parse(Buffer.concat(chunks).toString("utf-8")));
66
+ }
67
+ catch (e) {
68
+ reject(new HttpError(400, `Invalid JSON body: ${String(e)}`));
69
+ }
70
+ });
71
+ req.on("error", reject);
72
+ });
73
+ }
74
+ /**
75
+ * Serve a file from `uiDir` based on `urlPath`, falling back to `index.html`
76
+ * for SPA routing. Guards against path traversal. Uses the merged MIME table.
77
+ */
78
+ export async function serveStatic(res, uiDir, urlPath, opts = {}) {
79
+ let decoded;
80
+ try {
81
+ decoded = decodeURIComponent(urlPath);
82
+ }
83
+ catch {
84
+ writeJson(res, 400, { detail: "Invalid URL encoding" });
85
+ return;
86
+ }
87
+ const relPath = decoded.replace(/^\/+/, "") || "index.html";
88
+ const base = path.resolve(uiDir);
89
+ const resolved = path.resolve(base, relPath);
90
+ if (resolved !== base && !resolved.startsWith(base + path.sep)) {
91
+ writeJson(res, 403, { detail: "Forbidden" });
92
+ return;
93
+ }
94
+ const filePath = fs.existsSync(resolved) && fs.statSync(resolved).isFile()
95
+ ? resolved
96
+ : path.join(base, "index.html");
97
+ if (!fs.existsSync(filePath)) {
98
+ writeJson(res, 404, { detail: "Not found" });
99
+ return;
100
+ }
101
+ const ext = path.extname(filePath);
102
+ const mime = opts.mimeTypes ? { ...DEFAULT_MIME_TYPES, ...opts.mimeTypes } : DEFAULT_MIME_TYPES;
103
+ const contentType = mime[ext] ?? "application/octet-stream";
104
+ const content = await fsPromises.readFile(filePath);
105
+ const headers = {
106
+ "Content-Type": contentType,
107
+ "Content-Length": content.length,
108
+ };
109
+ if (opts.csp)
110
+ headers["Content-Security-Policy"] = opts.csp;
111
+ res.writeHead(200, headers);
112
+ res.end(content);
113
+ }
114
+ //# sourceMappingURL=node-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-http.js","sourceRoot":"","sources":["../src/node-http.ts"],"names":[],"mappings":"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"}
package/dist/node.d.ts CHANGED
@@ -9,4 +9,5 @@
9
9
  export { FilesystemCacheStorage, DEFAULT_CACHE_DIR, CACHE_DIR_ENV_VAR, getCacheDir, makeNodeToolCache, makeNodeToolInfoService, } from "./cache/node.js";
10
10
  export type { NodeToolCacheOptions, NodeToolInfoOptions } from "./cache/node.js";
11
11
  export { loadWorkflowToolConfig } from "./config-node.js";
12
+ export { writeJson, writeCacheResult, setCorsHeaders, readJsonBody, serveStatic, type CorsOptions, type ServeStaticOptions, } from "./node-http.js";
12
13
  //# sourceMappingURL=node.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,gBAAgB,CAAC"}
package/dist/node.js CHANGED
@@ -8,4 +8,5 @@
8
8
  */
9
9
  export { FilesystemCacheStorage, DEFAULT_CACHE_DIR, CACHE_DIR_ENV_VAR, getCacheDir, makeNodeToolCache, makeNodeToolInfoService, } from "./cache/node.js";
10
10
  export { loadWorkflowToolConfig } from "./config-node.js";
11
+ export { writeJson, writeCacheResult, setCorsHeaders, readJsonBody, serveStatic, } from "./node-http.js";
11
12
  //# sourceMappingURL=node.js.map
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,WAAW,GAGZ,MAAM,gBAAgB,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import type { ParsedTool } from "@galaxy-tool-util/schema";
2
2
  import { ToolCache } from "./cache/tool-cache.js";
3
+ import type { ToolSourceDocument } from "./tool-source.js";
3
4
  import type { CacheStorage } from "./cache/storage/interface.js";
5
+ import { type DiagnosticSink } from "./diagnostics.js";
4
6
  /** A remote source for fetching tool metadata. */
5
7
  export interface ToolSource {
6
8
  type: "toolshed" | "galaxy";
@@ -16,6 +18,8 @@ export interface ToolInfoOptions {
16
18
  /** @deprecated Use sources instead. Kept for simple single-source usage. */
17
19
  galaxyUrl?: string;
18
20
  fetcher?: typeof fetch;
21
+ /** Receives recoverable fetch/cache diagnostics. Silent by default. */
22
+ onDiagnostic?: DiagnosticSink;
19
23
  }
20
24
  /**
21
25
  * High-level service for fetching Galaxy tool metadata with automatic caching.
@@ -25,8 +29,11 @@ export declare class ToolInfoService {
25
29
  readonly cache: ToolCache;
26
30
  private readonly sources;
27
31
  private readonly fetcher;
32
+ private readonly onDiagnostic;
28
33
  constructor(opts: ToolInfoOptions);
29
34
  getToolInfo(toolId: string, toolVersion?: string | null): Promise<ParsedTool | null>;
35
+ /** Lazy wrapper-source fetch with write-through caching, independent of parsed metadata. */
36
+ fetchToolSource(toolId: string, toolVersion?: string | null): Promise<ToolSourceDocument | null>;
30
37
  /**
31
38
  * Like {@link getToolInfo}, but also returns the cache key the tool lives under
32
39
  * — the authoritative key this service caches with. Callers needing the key
@@ -1 +1 @@
1
- {"version":3,"file":"tool-info.d.ts","sourceRoot":"","sources":["../src/tool-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAwB,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAIxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,gGAAgG;IAChG,OAAO,EAAE,YAAY,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4FAA4F;IAC5F,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAE3B,IAAI,EAAE,eAAe;IAsB3B,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAK1F;;;;;OAKG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA8EpD;;;OAGG;YACW,oBAAoB;IAalC;;;;;;;OAOG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GACzB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC;IAoCpE,OAAO,CACX,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,GAAE,MAAgB,EACxB,SAAS,GAAE,MAAW,GACrB,OAAO,CAAC,MAAM,CAAC;CAOnB"}
1
+ {"version":3,"file":"tool-info.d.ts","sourceRoot":"","sources":["../src/tool-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAwB,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAKxE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEzE,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,0DAA0D;AAC1D,MAAM,WAAW,eAAe;IAC9B,gGAAgG;IAChG,OAAO,EAAE,YAAY,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4FAA4F;IAC5F,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,uEAAuE;IACvE,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiB;gBAElC,IAAI,EAAE,eAAe;IAwB3B,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAK1F,4FAA4F;IACtF,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;IA+DrC;;;;;OAKG;IACG,WAAW,CACf,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAC1B,OAAO,CAAC;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAoFpD;;;OAGG;YACW,oBAAoB;IAelC;;;;;;;OAOG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,EAC3B,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GACzB,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,CAAC;IAiCpE,OAAO,CACX,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,GAAE,MAAgB,EACxB,SAAS,GAAE,MAAW,GACrB,OAAO,CAAC,MAAM,CAAC;CAOnB"}