@fnndsc/cumin 3.2.4
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/LICENSE +21 -0
- package/README.md +78 -0
- package/dist/activities/chrisActivity.d.ts +19 -0
- package/dist/activities/chrisActivity.js +29 -0
- package/dist/activities/chrisActivity.js.map +1 -0
- package/dist/cache/index.d.ts +9 -0
- package/dist/cache/index.js +15 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/listCache.d.ts +182 -0
- package/dist/cache/listCache.js +266 -0
- package/dist/cache/listCache.js.map +1 -0
- package/dist/cache/procCache.d.ts +150 -0
- package/dist/cache/procCache.js +257 -0
- package/dist/cache/procCache.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.js +43 -0
- package/dist/cli.js.map +1 -0
- package/dist/compute/computeResources.d.ts +65 -0
- package/dist/compute/computeResources.js +113 -0
- package/dist/compute/computeResources.js.map +1 -0
- package/dist/config/config.d.ts +221 -0
- package/dist/config/config.js +350 -0
- package/dist/config/config.js.map +1 -0
- package/dist/connect/chrisConnection.d.ts +121 -0
- package/dist/connect/chrisConnection.js +303 -0
- package/dist/connect/chrisConnection.js.map +1 -0
- package/dist/context/chrisContext.d.ts +110 -0
- package/dist/context/chrisContext.js +324 -0
- package/dist/context/chrisContext.js.map +1 -0
- package/dist/error/errorStack.d.ts +115 -0
- package/dist/error/errorStack.js +175 -0
- package/dist/error/errorStack.js.map +1 -0
- package/dist/feeds/chrisFeed.d.ts +188 -0
- package/dist/feeds/chrisFeed.js +432 -0
- package/dist/feeds/chrisFeed.js.map +1 -0
- package/dist/filebrowser/chrisFileBrowser.d.ts +77 -0
- package/dist/filebrowser/chrisFileBrowser.js +134 -0
- package/dist/filebrowser/chrisFileBrowser.js.map +1 -0
- package/dist/filebrowser/chrisFiles.d.ts +67 -0
- package/dist/filebrowser/chrisFiles.js +130 -0
- package/dist/filebrowser/chrisFiles.js.map +1 -0
- package/dist/filebrowser/chrisPACS.d.ts +43 -0
- package/dist/filebrowser/chrisPACS.js +103 -0
- package/dist/filebrowser/chrisPACS.js.map +1 -0
- package/dist/filebrowser/chrisPipeline.d.ts +47 -0
- package/dist/filebrowser/chrisPipeline.js +118 -0
- package/dist/filebrowser/chrisPipeline.js.map +1 -0
- package/dist/groups/chrisGroups.d.ts +11 -0
- package/dist/groups/chrisGroups.js +18 -0
- package/dist/groups/chrisGroups.js.map +1 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/io/browser_io.d.ts +97 -0
- package/dist/io/browser_io.js +149 -0
- package/dist/io/browser_io.js.map +1 -0
- package/dist/io/chrisIO.d.ts +110 -0
- package/dist/io/chrisIO.js +415 -0
- package/dist/io/chrisIO.js.map +1 -0
- package/dist/io/io.d.ts +21 -0
- package/dist/io/io.js +6 -0
- package/dist/io/io.js.map +1 -0
- package/dist/io/node_io.d.ts +30 -0
- package/dist/io/node_io.js +188 -0
- package/dist/io/node_io.js.map +1 -0
- package/dist/jobs/chrisJob.d.ts +43 -0
- package/dist/jobs/chrisJob.js +169 -0
- package/dist/jobs/chrisJob.js.map +1 -0
- package/dist/jobs/index.d.ts +7 -0
- package/dist/jobs/index.js +24 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/jobMonitor.d.ts +46 -0
- package/dist/jobs/jobMonitor.js +102 -0
- package/dist/jobs/jobMonitor.js.map +1 -0
- package/dist/pacs/chrisPACS.d.ts +200 -0
- package/dist/pacs/chrisPACS.js +562 -0
- package/dist/pacs/chrisPACS.js.map +1 -0
- package/dist/path/chrisPath.d.ts +78 -0
- package/dist/path/chrisPath.js +190 -0
- package/dist/path/chrisPath.js.map +1 -0
- package/dist/pipelines/chrisPipeline.d.ts +86 -0
- package/dist/pipelines/chrisPipeline.js +180 -0
- package/dist/pipelines/chrisPipeline.js.map +1 -0
- package/dist/pluginmetas/chrisPluginMetas.d.ts +11 -0
- package/dist/pluginmetas/chrisPluginMetas.js +18 -0
- package/dist/pluginmetas/chrisPluginMetas.js.map +1 -0
- package/dist/plugins/chrisPluginMetaPlugins.d.ts +12 -0
- package/dist/plugins/chrisPluginMetaPlugins.js +19 -0
- package/dist/plugins/chrisPluginMetaPlugins.js.map +1 -0
- package/dist/plugins/chrisPlugins.d.ts +127 -0
- package/dist/plugins/chrisPlugins.js +528 -0
- package/dist/plugins/chrisPlugins.js.map +1 -0
- package/dist/resources/chrisEmbeddedResourceGroup.d.ts +73 -0
- package/dist/resources/chrisEmbeddedResourceGroup.js +148 -0
- package/dist/resources/chrisEmbeddedResourceGroup.js.map +1 -0
- package/dist/resources/chrisObjContext.d.ts +16 -0
- package/dist/resources/chrisObjContext.js +109 -0
- package/dist/resources/chrisObjContext.js.map +1 -0
- package/dist/resources/chrisResourceGroup.d.ts +30 -0
- package/dist/resources/chrisResourceGroup.js +47 -0
- package/dist/resources/chrisResourceGroup.js.map +1 -0
- package/dist/resources/chrisResources.d.ts +163 -0
- package/dist/resources/chrisResources.js +415 -0
- package/dist/resources/chrisResources.js.map +1 -0
- package/dist/tags/chrisTags.d.ts +11 -0
- package/dist/tags/chrisTags.js +18 -0
- package/dist/tags/chrisTags.js.map +1 -0
- package/dist/users/chrisUsers.d.ts +34 -0
- package/dist/users/chrisUsers.js +57 -0
- package/dist/users/chrisUsers.js.map +1 -0
- package/dist/utils/keypair.d.ts +77 -0
- package/dist/utils/keypair.js +144 -0
- package/dist/utils/keypair.js.map +1 -0
- package/dist/utils/result.d.ts +77 -0
- package/dist/utils/result.js +58 -0
- package/dist/utils/result.js.map +1 -0
- package/dist/utils/searchable.d.ts +143 -0
- package/dist/utils/searchable.js +212 -0
- package/dist/utils/searchable.js.map +1 -0
- package/dist/workflows/chrisWorkflows.d.ts +11 -0
- package/dist/workflows/chrisWorkflows.js +18 -0
- package/dist/workflows/chrisWorkflows.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,528 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file ChRIS Plugin Management
|
|
4
|
+
*
|
|
5
|
+
* This module provides classes for managing ChRIS plugins.
|
|
6
|
+
* It includes the `ChRISPluginGroup` for collection operations and `ChRISPlugin` for individual plugin operations,
|
|
7
|
+
* such as searching for plugins and creating plugin instances.
|
|
8
|
+
*
|
|
9
|
+
* @module
|
|
10
|
+
*/
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.ChRISPlugin = exports.ChRISPluginInstanceGroup = exports.ChRISPluginGroup = void 0;
|
|
16
|
+
exports.plugin_registerDirect = plugin_registerDirect;
|
|
17
|
+
const chrisapi_1 = __importDefault(require("@fnndsc/chrisapi"));
|
|
18
|
+
const chrisConnection_js_1 = require("../connect/chrisConnection.js");
|
|
19
|
+
const chrisContext_js_1 = require("../context/chrisContext.js");
|
|
20
|
+
const chrisResources_js_1 = require("../resources/chrisResources.js");
|
|
21
|
+
const chrisResourceGroup_js_1 = require("../resources/chrisResourceGroup.js");
|
|
22
|
+
const keypair_js_1 = require("../utils/keypair.js");
|
|
23
|
+
const searchable_js_1 = require("../utils/searchable.js");
|
|
24
|
+
const errorStack_js_1 = require("../error/errorStack.js");
|
|
25
|
+
const result_js_1 = require("../utils/result.js");
|
|
26
|
+
/**
|
|
27
|
+
* Group handler for ChRIS plugins.
|
|
28
|
+
*/
|
|
29
|
+
class ChRISPluginGroup extends chrisResourceGroup_js_1.ChRISResourceGroup {
|
|
30
|
+
constructor() {
|
|
31
|
+
super("Plugins", "getPlugins");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
exports.ChRISPluginGroup = ChRISPluginGroup;
|
|
35
|
+
/**
|
|
36
|
+
* Group handler for ChRIS plugin instances.
|
|
37
|
+
*/
|
|
38
|
+
class ChRISPluginInstanceGroup extends chrisResourceGroup_js_1.ChRISResourceGroup {
|
|
39
|
+
constructor() {
|
|
40
|
+
super("PluginInstances", "getPluginInstances");
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.ChRISPluginInstanceGroup = ChRISPluginInstanceGroup;
|
|
44
|
+
/**
|
|
45
|
+
* Type guard for CollectionJson.
|
|
46
|
+
*/
|
|
47
|
+
function collectionJson_is(data) {
|
|
48
|
+
return (typeof data === 'object' &&
|
|
49
|
+
data !== null &&
|
|
50
|
+
'collection' in data &&
|
|
51
|
+
typeof data.collection === 'object');
|
|
52
|
+
}
|
|
53
|
+
function collectionItem_toData(item) {
|
|
54
|
+
const data = {};
|
|
55
|
+
item.data?.forEach((datum) => { data[datum.name] = datum.value; });
|
|
56
|
+
return data;
|
|
57
|
+
}
|
|
58
|
+
function collectionItem_selectBest(items, pluginName, version) {
|
|
59
|
+
const exactNameMatches = [];
|
|
60
|
+
let targetItem = null;
|
|
61
|
+
for (const item of items) {
|
|
62
|
+
const itemData = collectionItem_toData(item);
|
|
63
|
+
if (itemData['name'] === pluginName) {
|
|
64
|
+
exactNameMatches.push(item);
|
|
65
|
+
if (version && itemData['version'] === version) {
|
|
66
|
+
targetItem = item;
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (targetItem)
|
|
72
|
+
return targetItem;
|
|
73
|
+
if (exactNameMatches.length > 0 && !version)
|
|
74
|
+
return exactNameMatches[0];
|
|
75
|
+
const fallback = items[0];
|
|
76
|
+
const fallbackData = collectionItem_toData(fallback);
|
|
77
|
+
if (fallbackData['name'] !== pluginName) {
|
|
78
|
+
errorStack_js_1.errorStack.stack_push('warning', `Peer store search for exact plugin name '${pluginName}' returned '${fallbackData['name']}'. Exact name not found, using first result.`);
|
|
79
|
+
}
|
|
80
|
+
return fallback;
|
|
81
|
+
}
|
|
82
|
+
function collectionItem_toPluginData(item) {
|
|
83
|
+
const pluginData = collectionItem_toData(item);
|
|
84
|
+
if (item.href)
|
|
85
|
+
pluginData['url'] = item.href;
|
|
86
|
+
if (item.links)
|
|
87
|
+
pluginData['links'] = item.links;
|
|
88
|
+
return pluginData;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Class for managing individual ChRIS plugins.
|
|
92
|
+
*/
|
|
93
|
+
class ChRISPlugin {
|
|
94
|
+
constructor() {
|
|
95
|
+
this._client = null;
|
|
96
|
+
// Client is fetched lazily
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Retrieves the ChRIS client instance asynchronously.
|
|
100
|
+
* @returns A Promise resolving to the Client instance or null.
|
|
101
|
+
*/
|
|
102
|
+
async client_get() {
|
|
103
|
+
if (!this._client) {
|
|
104
|
+
this._client = await chrisConnection_js_1.chrisConnection.client_get();
|
|
105
|
+
}
|
|
106
|
+
return this._client;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Converts a plain string to a searchable format.
|
|
110
|
+
* @deprecated Use Searchable.from() instead.
|
|
111
|
+
*/
|
|
112
|
+
pluginString_makeSearchable(plugin) {
|
|
113
|
+
const searchable = searchable_js_1.Searchable.from(plugin);
|
|
114
|
+
return searchable.toNormalizedString();
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Resolves a searchable string or object to plugin IDs.
|
|
118
|
+
* @param pluginSearchable - A searchable string or Searchable object.
|
|
119
|
+
* @returns A Promise resolving to QueryHits containing matching plugin IDs.
|
|
120
|
+
*/
|
|
121
|
+
async pluginIDs_resolve(pluginSearchable) {
|
|
122
|
+
const searchable = typeof pluginSearchable === 'string'
|
|
123
|
+
? searchable_js_1.Searchable.from(pluginSearchable)
|
|
124
|
+
: pluginSearchable;
|
|
125
|
+
if (!searchable.validate()) {
|
|
126
|
+
errorStack_js_1.errorStack.stack_push("error", "Invalid searchable format");
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
const pluginList = await this.pluginIDs_getFromSearchable(searchable);
|
|
130
|
+
if (!pluginList || pluginList.hits.length === 0) {
|
|
131
|
+
errorStack_js_1.errorStack.stack_push("error", "No matching plugins found");
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
return pluginList;
|
|
135
|
+
}
|
|
136
|
+
async previousID_get() {
|
|
137
|
+
const previousIDstring = await chrisContext_js_1.chrisContext.ChRISplugin_get();
|
|
138
|
+
if (!previousIDstring) {
|
|
139
|
+
errorStack_js_1.errorStack.stack_push("error", "Could not resolve a previous plugin ID context");
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
return Number(previousIDstring);
|
|
143
|
+
}
|
|
144
|
+
async plugin_runOnCUBE(pluginID, previousID, options) {
|
|
145
|
+
const client = await this.client_get();
|
|
146
|
+
if (!client) {
|
|
147
|
+
console.error("Could not access ChRIS. Client is not initialized.");
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
const combinedParams = {
|
|
151
|
+
...options,
|
|
152
|
+
previous_id: previousID,
|
|
153
|
+
};
|
|
154
|
+
const pluginInstance = await client.createPluginInstance(pluginID, combinedParams);
|
|
155
|
+
if (!pluginInstance) {
|
|
156
|
+
errorStack_js_1.errorStack.stack_push("error", "Failed to create plugin instance");
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
return pluginInstance;
|
|
160
|
+
}
|
|
161
|
+
pluginInstance_toDict(pluginInstance) {
|
|
162
|
+
if (!pluginInstance) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const chrisResource = new chrisResources_js_1.ChRISResource();
|
|
166
|
+
chrisResource.resourceCollection = pluginInstance;
|
|
167
|
+
const items = chrisResource.resourceItems_buildFromCollection(pluginInstance);
|
|
168
|
+
if (!items) {
|
|
169
|
+
errorStack_js_1.errorStack.stack_push("error", "Could not convert pluginInstance resource into dictionary");
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
172
|
+
const dict = chrisResource.resourceItems_toDicts(items)[0];
|
|
173
|
+
return dict;
|
|
174
|
+
}
|
|
175
|
+
async plugin_run(plugin, params) {
|
|
176
|
+
let pluginList;
|
|
177
|
+
if ((pluginList = await this.pluginIDs_resolve(plugin)) === null) {
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
const pluginID = pluginList.hits[0];
|
|
181
|
+
// Parse params first to check for explicit previous_id
|
|
182
|
+
const pluginParams = (0, keypair_js_1.dictionary_fromCLI)(params);
|
|
183
|
+
// Prioritize explicit previous_id from params, fall back to context
|
|
184
|
+
let previousID;
|
|
185
|
+
if (pluginParams.previous_id !== undefined) {
|
|
186
|
+
// Explicit value provided in params - use it!
|
|
187
|
+
previousID = Number(pluginParams.previous_id);
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
// Fall back to context
|
|
191
|
+
const contextPreviousID = await this.previousID_get();
|
|
192
|
+
if (contextPreviousID === null) {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
previousID = contextPreviousID;
|
|
196
|
+
}
|
|
197
|
+
try {
|
|
198
|
+
const dict = this.pluginInstance_toDict(await this.plugin_runOnCUBE(pluginID, previousID, pluginParams));
|
|
199
|
+
return dict;
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
if (error instanceof Error) {
|
|
203
|
+
errorStack_js_1.errorStack.stack_push("error", `Error running plugin instance | ${error.message}`);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
errorStack_js_1.errorStack.stack_push("error", "An unknown error occurred while running plugin instance");
|
|
207
|
+
}
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
async pluginData_getFromSearch(searchOptions, dataField) {
|
|
212
|
+
const chrisPluginGroup = new ChRISPluginGroup();
|
|
213
|
+
// We rely on lazy initialization of ChRISResourceGroup
|
|
214
|
+
const searchParams = (0, keypair_js_1.listParams_fromOptions)(searchOptions);
|
|
215
|
+
const searchResults = await chrisPluginGroup.asset.resources_listAndFilterByOptions(searchParams);
|
|
216
|
+
if (!searchResults) {
|
|
217
|
+
return null;
|
|
218
|
+
}
|
|
219
|
+
const queryHits = (0, keypair_js_1.record_extract)(searchResults.tableData, dataField);
|
|
220
|
+
return queryHits;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Gets plugin IDs from a searchable.
|
|
224
|
+
* @param searchable - A searchable string or Searchable object.
|
|
225
|
+
* @returns A Promise resolving to QueryHits containing matching plugin IDs.
|
|
226
|
+
*/
|
|
227
|
+
async pluginIDs_getFromSearchable(searchable) {
|
|
228
|
+
const searchableObj = typeof searchable === 'string'
|
|
229
|
+
? searchable_js_1.Searchable.from(searchable)
|
|
230
|
+
: searchable;
|
|
231
|
+
const seachParams = {
|
|
232
|
+
search: searchableObj.toNormalizedString(),
|
|
233
|
+
};
|
|
234
|
+
const pluginList = await this.pluginData_getFromSearch(seachParams, "id");
|
|
235
|
+
if (!pluginList) {
|
|
236
|
+
errorStack_js_1.errorStack.stack_push("error", `A plugin conforming to "${searchableObj.raw}" was not found.`);
|
|
237
|
+
return null;
|
|
238
|
+
}
|
|
239
|
+
if (pluginList.hits.length > 1) {
|
|
240
|
+
errorStack_js_1.errorStack.stack_push("warning", `Multiple plugins conformed to "${searchableObj.raw}".`);
|
|
241
|
+
}
|
|
242
|
+
return pluginList;
|
|
243
|
+
}
|
|
244
|
+
async pluginIDs_get(name_exact) {
|
|
245
|
+
return await this.pluginData_getFromSearch({ search: "name_exact: " + name_exact }, "id");
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Uploads a plugin representation file to create a new plugin admin resource.
|
|
249
|
+
*
|
|
250
|
+
* Requires admin credentials. Will push error to errorStack if authentication fails.
|
|
251
|
+
*
|
|
252
|
+
* @param pluginData - Plugin descriptor JSON data.
|
|
253
|
+
* @param computeResources - Array of compute resource names to assign plugin to.
|
|
254
|
+
* @param adminToken - Optional admin authentication token (if different from current user).
|
|
255
|
+
* @returns Promise resolving to the created plugin data or null on failure.
|
|
256
|
+
*/
|
|
257
|
+
async plugin_registerWithAdmin(pluginData, computeResources = ['host'], adminToken) {
|
|
258
|
+
try {
|
|
259
|
+
let client;
|
|
260
|
+
if (adminToken) {
|
|
261
|
+
const url = await chrisConnection_js_1.chrisConnection.chrisURL_get();
|
|
262
|
+
if (!url) {
|
|
263
|
+
errorStack_js_1.errorStack.stack_push('error', 'ChRIS URL not found. Cannot create admin client.');
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
client = new chrisapi_1.default(url, { token: adminToken });
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
client = await this.client_get();
|
|
270
|
+
}
|
|
271
|
+
if (!client) {
|
|
272
|
+
errorStack_js_1.errorStack.stack_push('error', 'Not connected to ChRIS. Please log in.');
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
// Verify admin URL is available — non-admin users won't have this link
|
|
276
|
+
const clientAny = client;
|
|
277
|
+
if (!clientAny.adminUrl && clientAny.setUrls) {
|
|
278
|
+
await clientAny.setUrls().catch(() => undefined);
|
|
279
|
+
}
|
|
280
|
+
if (!clientAny.adminUrl) {
|
|
281
|
+
errorStack_js_1.errorStack.stack_push('error', 'Admin credentials required to register plugins. Authentication failed.');
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
// Create plugin representation as JSON string (ChRIS expects a file upload)
|
|
285
|
+
const pluginJson = JSON.stringify(pluginData, null, 2);
|
|
286
|
+
const pluginBlob = new Blob([pluginJson], { type: 'application/json' });
|
|
287
|
+
const computeNames = computeResources.join(',');
|
|
288
|
+
const pluginFileObj = { fname: pluginBlob };
|
|
289
|
+
const pluginAdmin = await client.adminUploadPlugin({ compute_names: computeNames }, pluginFileObj);
|
|
290
|
+
if (pluginAdmin && pluginAdmin.data) {
|
|
291
|
+
return pluginAdmin.data;
|
|
292
|
+
}
|
|
293
|
+
errorStack_js_1.errorStack.stack_push('error', 'Failed to register plugin. No data in response.');
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
298
|
+
const errorString = errorMessage.toLowerCase();
|
|
299
|
+
if (errorString.includes('403') || errorString.includes('forbidden') ||
|
|
300
|
+
errorString.includes('401') || errorString.includes('unauthorized') ||
|
|
301
|
+
errorString.includes('permission denied')) {
|
|
302
|
+
errorStack_js_1.errorStack.stack_push('error', 'Admin credentials required to register plugins. Authentication failed.');
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
errorStack_js_1.errorStack.stack_push('error', `Failed to register plugin: ${errorMessage}`);
|
|
306
|
+
}
|
|
307
|
+
return null;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Searches for a plugin in a peer ChRIS store (public plugin repository).
|
|
312
|
+
*
|
|
313
|
+
* Uses anonymous client to query public plugin stores without authentication.
|
|
314
|
+
*
|
|
315
|
+
* @param pluginName - Name of the plugin to search for.
|
|
316
|
+
* @param version - Optional version of the plugin to search for.
|
|
317
|
+
* @param peerStoreUrl - URL of the peer ChRIS store (default: cube.chrisproject.org).
|
|
318
|
+
* @returns Promise resolving to plugin data and store URL, or null if not found.
|
|
319
|
+
*/
|
|
320
|
+
async plugin_searchPeerStore(pluginName, version, peerStoreUrl = 'https://cube.chrisproject.org/api/v1/') {
|
|
321
|
+
try {
|
|
322
|
+
let searchUrl = `${peerStoreUrl}plugins/search/?name_exact=${encodeURIComponent(pluginName)}`;
|
|
323
|
+
if (version)
|
|
324
|
+
searchUrl += `&version=${encodeURIComponent(version)}`;
|
|
325
|
+
const response = await fetch(searchUrl, {
|
|
326
|
+
headers: { 'Accept': 'application/vnd.collection+json' },
|
|
327
|
+
});
|
|
328
|
+
if (!response.ok) {
|
|
329
|
+
errorStack_js_1.errorStack.stack_push('error', `Failed to search peer store: ${response.status} ${response.statusText}`);
|
|
330
|
+
return null;
|
|
331
|
+
}
|
|
332
|
+
const data = await response.json();
|
|
333
|
+
if (collectionJson_is(data) && data.collection?.items) {
|
|
334
|
+
const items = data.collection.items;
|
|
335
|
+
if (items.length === 0)
|
|
336
|
+
return null;
|
|
337
|
+
const targetItem = collectionItem_selectBest(items, pluginName, version);
|
|
338
|
+
const pluginData = collectionItem_toPluginData(targetItem);
|
|
339
|
+
return { plugin: pluginData, storeUrl: targetItem.href };
|
|
340
|
+
}
|
|
341
|
+
if (typeof data === 'object' && data !== null && 'results' in data) {
|
|
342
|
+
const results = data.results || [];
|
|
343
|
+
if (results.length === 0)
|
|
344
|
+
return null;
|
|
345
|
+
const plugin = results[0];
|
|
346
|
+
return { plugin, storeUrl: plugin.url || `${peerStoreUrl}plugins/${plugin.id}/` };
|
|
347
|
+
}
|
|
348
|
+
return null;
|
|
349
|
+
}
|
|
350
|
+
catch (error) {
|
|
351
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
352
|
+
errorStack_js_1.errorStack.stack_push('error', `Failed to search peer store: ${errorMessage}`);
|
|
353
|
+
return null;
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Checks if a plugin with given name or dock_image already exists in current CUBE.
|
|
358
|
+
*
|
|
359
|
+
* @param nameOrImage - Plugin name or docker image to search for.
|
|
360
|
+
* @returns Promise resolving to plugin data if found, null otherwise.
|
|
361
|
+
*/
|
|
362
|
+
async plugin_existsInCube(nameOrImage) {
|
|
363
|
+
try {
|
|
364
|
+
const client = await this.client_get();
|
|
365
|
+
if (!client) {
|
|
366
|
+
return null;
|
|
367
|
+
}
|
|
368
|
+
// Try searching by name first
|
|
369
|
+
let pluginList = await client.getPlugins({ name_exact: nameOrImage, limit: 1 });
|
|
370
|
+
if (pluginList && pluginList.data && pluginList.data.length > 0) {
|
|
371
|
+
return pluginList.data[0];
|
|
372
|
+
}
|
|
373
|
+
// Try searching by dock_image
|
|
374
|
+
pluginList = await client.getPlugins({ dock_image: nameOrImage, limit: 1 });
|
|
375
|
+
if (pluginList && pluginList.data && pluginList.data.length > 0) {
|
|
376
|
+
return pluginList.data[0];
|
|
377
|
+
}
|
|
378
|
+
return null;
|
|
379
|
+
}
|
|
380
|
+
catch (error) {
|
|
381
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
382
|
+
errorStack_js_1.errorStack.stack_push('error', `Failed to check if plugin exists: ${errorMessage}`);
|
|
383
|
+
return null;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Lists plugins from a peer ChRIS store.
|
|
388
|
+
* Handles pagination to fetch all results.
|
|
389
|
+
*
|
|
390
|
+
* @param peerStoreUrl - URL of the peer store.
|
|
391
|
+
* @param searchParams - Optional search parameters.
|
|
392
|
+
* @returns Promise resolving to array of plugin data objects.
|
|
393
|
+
*/
|
|
394
|
+
async plugin_listPeerStore(peerStoreUrl = 'https://cube.chrisproject.org/api/v1/', searchParams) {
|
|
395
|
+
try {
|
|
396
|
+
let url;
|
|
397
|
+
if (searchParams && Object.keys(searchParams).length > 0) {
|
|
398
|
+
url = `${peerStoreUrl}plugins/search/`;
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
url = `${peerStoreUrl}plugins/`;
|
|
402
|
+
}
|
|
403
|
+
const params = new URLSearchParams();
|
|
404
|
+
params.append('limit', '100'); // Efficient pagination
|
|
405
|
+
if (searchParams) {
|
|
406
|
+
for (const [key, value] of Object.entries(searchParams)) {
|
|
407
|
+
params.append(key, value);
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
url += `?${params.toString()}`;
|
|
411
|
+
const allPlugins = [];
|
|
412
|
+
let nextUrl = url;
|
|
413
|
+
while (nextUrl) {
|
|
414
|
+
const response = await fetch(nextUrl, {
|
|
415
|
+
headers: { 'Accept': 'application/vnd.collection+json' }
|
|
416
|
+
});
|
|
417
|
+
if (!response.ok) {
|
|
418
|
+
errorStack_js_1.errorStack.stack_push('error', `Failed to fetch from peer store: ${response.statusText}`);
|
|
419
|
+
return null;
|
|
420
|
+
}
|
|
421
|
+
const data = await response.json();
|
|
422
|
+
if (collectionJson_is(data) && data.collection.items) {
|
|
423
|
+
const items = data.collection.items;
|
|
424
|
+
items.forEach(item => {
|
|
425
|
+
const pluginData = {};
|
|
426
|
+
if (item.data) {
|
|
427
|
+
item.data.forEach((datum) => {
|
|
428
|
+
pluginData[datum.name] = datum.value;
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
if (item.href)
|
|
432
|
+
pluginData['url'] = item.href;
|
|
433
|
+
allPlugins.push(pluginData);
|
|
434
|
+
});
|
|
435
|
+
nextUrl = null;
|
|
436
|
+
if (data.collection.links) {
|
|
437
|
+
const nextLink = data.collection.links.find(l => l.rel === 'next');
|
|
438
|
+
if (nextLink) {
|
|
439
|
+
nextUrl = nextLink.href;
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
else {
|
|
444
|
+
break;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
return allPlugins;
|
|
448
|
+
}
|
|
449
|
+
catch (error) {
|
|
450
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
451
|
+
errorStack_js_1.errorStack.stack_push('error', `Error listing peer store: ${msg}`);
|
|
452
|
+
return null;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Gets the compute resources currently assigned to a plugin.
|
|
457
|
+
*
|
|
458
|
+
* @param pluginId - ID of the plugin.
|
|
459
|
+
* @returns Promise resolving to array of compute resource names.
|
|
460
|
+
*/
|
|
461
|
+
async plugin_getComputeResources(pluginId) {
|
|
462
|
+
try {
|
|
463
|
+
const client = await this.client_get();
|
|
464
|
+
if (!client) {
|
|
465
|
+
return [];
|
|
466
|
+
}
|
|
467
|
+
const plugin = await client.getPlugin(pluginId);
|
|
468
|
+
if (!plugin) {
|
|
469
|
+
return [];
|
|
470
|
+
}
|
|
471
|
+
const computeResourceList = await plugin.getPluginComputeResources();
|
|
472
|
+
const resources = computeResourceList.data || [];
|
|
473
|
+
return resources.map((r) => r.name);
|
|
474
|
+
}
|
|
475
|
+
catch (error) {
|
|
476
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
477
|
+
errorStack_js_1.errorStack.stack_push('error', `Failed to get plugin compute resources: ${errorMessage}`);
|
|
478
|
+
return [];
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
exports.ChRISPlugin = ChRISPlugin;
|
|
483
|
+
/**
|
|
484
|
+
* Registers a plugin using the legacy non-admin PluginList._post() method.
|
|
485
|
+
*
|
|
486
|
+
* **DEPRECATED:** This method uses the legacy non-admin plugin registration endpoint
|
|
487
|
+
* which may not be available in modern ChRIS CUBE installations. Prefer using
|
|
488
|
+
* ChRISPlugin.plugin_registerWithAdmin() instead.
|
|
489
|
+
*
|
|
490
|
+
* This function is provided for backward compatibility only and will be removed
|
|
491
|
+
* in a future release.
|
|
492
|
+
*
|
|
493
|
+
* @param pluginData - Plugin descriptor data (name, dock_image, etc.).
|
|
494
|
+
* @param computeResources - Optional array of compute resource names to assign.
|
|
495
|
+
* @returns A Result containing the registered plugin data, or an error.
|
|
496
|
+
*
|
|
497
|
+
* @deprecated Use ChRISPlugin.plugin_registerWithAdmin() instead.
|
|
498
|
+
*/
|
|
499
|
+
async function plugin_registerDirect(pluginData, computeResources) {
|
|
500
|
+
const client = await chrisConnection_js_1.chrisConnection.client_get();
|
|
501
|
+
if (!client) {
|
|
502
|
+
errorStack_js_1.errorStack.stack_push("error", "Not connected to ChRIS. Cannot register plugin.");
|
|
503
|
+
return (0, result_js_1.Err)();
|
|
504
|
+
}
|
|
505
|
+
try {
|
|
506
|
+
const pluginList = await client.getPlugins();
|
|
507
|
+
// Prepare data for POST request
|
|
508
|
+
const data = {
|
|
509
|
+
...pluginData,
|
|
510
|
+
};
|
|
511
|
+
if (computeResources && computeResources.length > 0) {
|
|
512
|
+
data.compute_resources = computeResources;
|
|
513
|
+
}
|
|
514
|
+
// Call the internal _post method directly (legacy API)
|
|
515
|
+
const response = await pluginList._post(data);
|
|
516
|
+
if (response && response.data) {
|
|
517
|
+
return (0, result_js_1.Ok)(response.data);
|
|
518
|
+
}
|
|
519
|
+
errorStack_js_1.errorStack.stack_push("error", "Failed to register plugin. No data in response.");
|
|
520
|
+
return (0, result_js_1.Err)();
|
|
521
|
+
}
|
|
522
|
+
catch (error) {
|
|
523
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
524
|
+
errorStack_js_1.errorStack.stack_push("error", `Failed to register plugin: ${msg}`);
|
|
525
|
+
return (0, result_js_1.Err)();
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
//# sourceMappingURL=chrisPlugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrisPlugins.js","sourceRoot":"","sources":["../../src/plugins/chrisPlugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file ChRIS Embedded Resource Group
|
|
3
|
+
*
|
|
4
|
+
* This module manages groups of ChRIS resources that are embedded within other resources
|
|
5
|
+
* (e.g., files within a folder, parameters of a plugin). It handles context-aware initialization.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { ChRISResourceGroup } from "../resources/chrisResourceGroup.js";
|
|
10
|
+
/**
|
|
11
|
+
* Error thrown when the ChRIS client is not connected.
|
|
12
|
+
*/
|
|
13
|
+
export declare class ChRISConnectionError extends Error {
|
|
14
|
+
constructor(message: string);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Error thrown when ChRIS initialization fails.
|
|
18
|
+
*/
|
|
19
|
+
export declare class ChRISInitializationError extends Error {
|
|
20
|
+
constructor(message: string);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Error thrown when a context specification is invalid.
|
|
24
|
+
*/
|
|
25
|
+
export declare class ChRISContextSpecError extends Error {
|
|
26
|
+
constructor(message: string);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Specification representing the parsed components of a context string.
|
|
30
|
+
*/
|
|
31
|
+
export interface ContextSpec {
|
|
32
|
+
/**
|
|
33
|
+
* The type of context (e.g., 'folder', 'plugin', 'feed').
|
|
34
|
+
*/
|
|
35
|
+
type: string;
|
|
36
|
+
/**
|
|
37
|
+
* The value or path associated with the context.
|
|
38
|
+
*/
|
|
39
|
+
value: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Splits a context string into its type and value components on the first occurrence of a delimiter.
|
|
43
|
+
*
|
|
44
|
+
* This function parses strings like "folder:/path/to/folder" or "plugin:123" into an object
|
|
45
|
+
* containing the type (the prefix before the first delimiter) and the value (the rest of the string).
|
|
46
|
+
* If the path contains extra delimiters (e.g. "/pacs/queries/2601_AccessionNumber:22548684"), this
|
|
47
|
+
* function correctly preserves those extra delimiters in the value component.
|
|
48
|
+
*
|
|
49
|
+
* @param context - The context string to be split. Must be a string.
|
|
50
|
+
* @param delimiter - The delimiter character to split on. Defaults to ":".
|
|
51
|
+
* @returns An object conforming to ContextSpec with the split components.
|
|
52
|
+
* @throws ChRISContextSpecError If the input is not a string or the delimiter is not found.
|
|
53
|
+
*/
|
|
54
|
+
export declare function context_split(context: unknown, delimiter?: string): ContextSpec;
|
|
55
|
+
/**
|
|
56
|
+
* Parameters for creating a ChRISEmbeddedResourceGroup.
|
|
57
|
+
*/
|
|
58
|
+
export interface ChRISEmbeddedResourceGroupParams<T = unknown> {
|
|
59
|
+
resourceName: string;
|
|
60
|
+
getMethod: string;
|
|
61
|
+
chrisContext: T;
|
|
62
|
+
context: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Group of ChRIS resources embedded within a specific context.
|
|
66
|
+
*/
|
|
67
|
+
export declare class ChRISEmbeddedResourceGroup<T = unknown> extends ChRISResourceGroup {
|
|
68
|
+
readonly context: string;
|
|
69
|
+
readonly chrisContextObj: T;
|
|
70
|
+
private constructor();
|
|
71
|
+
static create<T = unknown>(resourceName: string, getMethod: string, context: string): Promise<ChRISEmbeddedResourceGroup<T> | null>;
|
|
72
|
+
private static context_init;
|
|
73
|
+
}
|