@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.
Files changed (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +78 -0
  3. package/dist/activities/chrisActivity.d.ts +19 -0
  4. package/dist/activities/chrisActivity.js +29 -0
  5. package/dist/activities/chrisActivity.js.map +1 -0
  6. package/dist/cache/index.d.ts +9 -0
  7. package/dist/cache/index.js +15 -0
  8. package/dist/cache/index.js.map +1 -0
  9. package/dist/cache/listCache.d.ts +182 -0
  10. package/dist/cache/listCache.js +266 -0
  11. package/dist/cache/listCache.js.map +1 -0
  12. package/dist/cache/procCache.d.ts +150 -0
  13. package/dist/cache/procCache.js +257 -0
  14. package/dist/cache/procCache.js.map +1 -0
  15. package/dist/cli.d.ts +7 -0
  16. package/dist/cli.js +43 -0
  17. package/dist/cli.js.map +1 -0
  18. package/dist/compute/computeResources.d.ts +65 -0
  19. package/dist/compute/computeResources.js +113 -0
  20. package/dist/compute/computeResources.js.map +1 -0
  21. package/dist/config/config.d.ts +221 -0
  22. package/dist/config/config.js +350 -0
  23. package/dist/config/config.js.map +1 -0
  24. package/dist/connect/chrisConnection.d.ts +121 -0
  25. package/dist/connect/chrisConnection.js +303 -0
  26. package/dist/connect/chrisConnection.js.map +1 -0
  27. package/dist/context/chrisContext.d.ts +110 -0
  28. package/dist/context/chrisContext.js +324 -0
  29. package/dist/context/chrisContext.js.map +1 -0
  30. package/dist/error/errorStack.d.ts +115 -0
  31. package/dist/error/errorStack.js +175 -0
  32. package/dist/error/errorStack.js.map +1 -0
  33. package/dist/feeds/chrisFeed.d.ts +188 -0
  34. package/dist/feeds/chrisFeed.js +432 -0
  35. package/dist/feeds/chrisFeed.js.map +1 -0
  36. package/dist/filebrowser/chrisFileBrowser.d.ts +77 -0
  37. package/dist/filebrowser/chrisFileBrowser.js +134 -0
  38. package/dist/filebrowser/chrisFileBrowser.js.map +1 -0
  39. package/dist/filebrowser/chrisFiles.d.ts +67 -0
  40. package/dist/filebrowser/chrisFiles.js +130 -0
  41. package/dist/filebrowser/chrisFiles.js.map +1 -0
  42. package/dist/filebrowser/chrisPACS.d.ts +43 -0
  43. package/dist/filebrowser/chrisPACS.js +103 -0
  44. package/dist/filebrowser/chrisPACS.js.map +1 -0
  45. package/dist/filebrowser/chrisPipeline.d.ts +47 -0
  46. package/dist/filebrowser/chrisPipeline.js +118 -0
  47. package/dist/filebrowser/chrisPipeline.js.map +1 -0
  48. package/dist/groups/chrisGroups.d.ts +11 -0
  49. package/dist/groups/chrisGroups.js +18 -0
  50. package/dist/groups/chrisGroups.js.map +1 -0
  51. package/dist/index.d.ts +68 -0
  52. package/dist/index.js +86 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/io/browser_io.d.ts +97 -0
  55. package/dist/io/browser_io.js +149 -0
  56. package/dist/io/browser_io.js.map +1 -0
  57. package/dist/io/chrisIO.d.ts +110 -0
  58. package/dist/io/chrisIO.js +415 -0
  59. package/dist/io/chrisIO.js.map +1 -0
  60. package/dist/io/io.d.ts +21 -0
  61. package/dist/io/io.js +6 -0
  62. package/dist/io/io.js.map +1 -0
  63. package/dist/io/node_io.d.ts +30 -0
  64. package/dist/io/node_io.js +188 -0
  65. package/dist/io/node_io.js.map +1 -0
  66. package/dist/jobs/chrisJob.d.ts +43 -0
  67. package/dist/jobs/chrisJob.js +169 -0
  68. package/dist/jobs/chrisJob.js.map +1 -0
  69. package/dist/jobs/index.d.ts +7 -0
  70. package/dist/jobs/index.js +24 -0
  71. package/dist/jobs/index.js.map +1 -0
  72. package/dist/jobs/jobMonitor.d.ts +46 -0
  73. package/dist/jobs/jobMonitor.js +102 -0
  74. package/dist/jobs/jobMonitor.js.map +1 -0
  75. package/dist/pacs/chrisPACS.d.ts +200 -0
  76. package/dist/pacs/chrisPACS.js +562 -0
  77. package/dist/pacs/chrisPACS.js.map +1 -0
  78. package/dist/path/chrisPath.d.ts +78 -0
  79. package/dist/path/chrisPath.js +190 -0
  80. package/dist/path/chrisPath.js.map +1 -0
  81. package/dist/pipelines/chrisPipeline.d.ts +86 -0
  82. package/dist/pipelines/chrisPipeline.js +180 -0
  83. package/dist/pipelines/chrisPipeline.js.map +1 -0
  84. package/dist/pluginmetas/chrisPluginMetas.d.ts +11 -0
  85. package/dist/pluginmetas/chrisPluginMetas.js +18 -0
  86. package/dist/pluginmetas/chrisPluginMetas.js.map +1 -0
  87. package/dist/plugins/chrisPluginMetaPlugins.d.ts +12 -0
  88. package/dist/plugins/chrisPluginMetaPlugins.js +19 -0
  89. package/dist/plugins/chrisPluginMetaPlugins.js.map +1 -0
  90. package/dist/plugins/chrisPlugins.d.ts +127 -0
  91. package/dist/plugins/chrisPlugins.js +528 -0
  92. package/dist/plugins/chrisPlugins.js.map +1 -0
  93. package/dist/resources/chrisEmbeddedResourceGroup.d.ts +73 -0
  94. package/dist/resources/chrisEmbeddedResourceGroup.js +148 -0
  95. package/dist/resources/chrisEmbeddedResourceGroup.js.map +1 -0
  96. package/dist/resources/chrisObjContext.d.ts +16 -0
  97. package/dist/resources/chrisObjContext.js +109 -0
  98. package/dist/resources/chrisObjContext.js.map +1 -0
  99. package/dist/resources/chrisResourceGroup.d.ts +30 -0
  100. package/dist/resources/chrisResourceGroup.js +47 -0
  101. package/dist/resources/chrisResourceGroup.js.map +1 -0
  102. package/dist/resources/chrisResources.d.ts +163 -0
  103. package/dist/resources/chrisResources.js +415 -0
  104. package/dist/resources/chrisResources.js.map +1 -0
  105. package/dist/tags/chrisTags.d.ts +11 -0
  106. package/dist/tags/chrisTags.js +18 -0
  107. package/dist/tags/chrisTags.js.map +1 -0
  108. package/dist/users/chrisUsers.d.ts +34 -0
  109. package/dist/users/chrisUsers.js +57 -0
  110. package/dist/users/chrisUsers.js.map +1 -0
  111. package/dist/utils/keypair.d.ts +77 -0
  112. package/dist/utils/keypair.js +144 -0
  113. package/dist/utils/keypair.js.map +1 -0
  114. package/dist/utils/result.d.ts +77 -0
  115. package/dist/utils/result.js +58 -0
  116. package/dist/utils/result.js.map +1 -0
  117. package/dist/utils/searchable.d.ts +143 -0
  118. package/dist/utils/searchable.js +212 -0
  119. package/dist/utils/searchable.js.map +1 -0
  120. package/dist/workflows/chrisWorkflows.d.ts +11 -0
  121. package/dist/workflows/chrisWorkflows.js +18 -0
  122. package/dist/workflows/chrisWorkflows.js.map +1 -0
  123. package/package.json +55 -0
@@ -0,0 +1,188 @@
1
+ /**
2
+ * @file ChRIS Feed Management
3
+ *
4
+ * This module provides classes for managing ChRIS feeds.
5
+ * It includes the `ChRISFeedGroup` for collection operations and `ChRISFeed` for individual feed operations,
6
+ * particularly creation from directories using the 'pl-dircopy' plugin.
7
+ *
8
+ * @module
9
+ */
10
+ import Client from "@fnndsc/chrisapi";
11
+ import { PluginInstance } from "@fnndsc/chrisapi";
12
+ import { Feed } from "@fnndsc/chrisapi";
13
+ import { SimpleRecord } from "../resources/chrisResources.js";
14
+ import { ChRISResourceGroup } from "../resources/chrisResourceGroup.js";
15
+ import { ChRISObjectParams } from "../utils/keypair.js";
16
+ import { Result } from "../utils/result.js";
17
+ /**
18
+ * Group handler for ChRIS feeds.
19
+ */
20
+ export declare class ChRISFeedGroup extends ChRISResourceGroup {
21
+ constructor();
22
+ }
23
+ /**
24
+ * Class for managing individual ChRIS feeds.
25
+ */
26
+ export declare class ChRISFeed {
27
+ private _client;
28
+ constructor();
29
+ /**
30
+ * Retrieves the ChRIS client instance asynchronously.
31
+ * @returns A Promise resolving to the Client instance or null.
32
+ */
33
+ client_get(): Promise<Client | null>;
34
+ error_parse(error: unknown, activity?: string): null;
35
+ feedDetail_getFromPluginInstance(pluginInstance: PluginInstance | null, detailSpec: string[]): Promise<SimpleRecord | null>;
36
+ createFromDirs(dirs: string, feedParams: ChRISObjectParams): Promise<SimpleRecord | null>;
37
+ }
38
+ /**
39
+ * Makes a feed public by feed ID.
40
+ *
41
+ * Retrieves the feed resource and calls its makePublic() method to change
42
+ * the feed's visibility to public.
43
+ *
44
+ * @param feedId - The numeric ID of the feed to make public.
45
+ * @returns A Result containing true on success, or an error.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * const result = await feed_makePublic(123);
50
+ * if (result.ok) {
51
+ * console.log("Feed is now public");
52
+ * }
53
+ * ```
54
+ */
55
+ export declare function feed_makePublic(feedId: number): Promise<Result<boolean>>;
56
+ /**
57
+ * Makes a feed private by feed ID.
58
+ *
59
+ * Retrieves the feed resource and calls its makeUnpublic() method to change
60
+ * the feed's visibility to private (unpublish it).
61
+ *
62
+ * @param feedId - The numeric ID of the feed to make private.
63
+ * @returns A Result containing true on success, or an error.
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const result = await feed_makePrivate(123);
68
+ * if (result.ok) {
69
+ * console.log("Feed is now private");
70
+ * }
71
+ * ```
72
+ */
73
+ export declare function feed_makePrivate(feedId: number): Promise<Result<boolean>>;
74
+ /**
75
+ * Deletes a feed by feed ID.
76
+ *
77
+ * Retrieves the feed resource and calls its delete() method to permanently
78
+ * remove the feed from ChRIS.
79
+ *
80
+ * @param feedId - The numeric ID of the feed to delete.
81
+ * @returns A Result containing true on success, or an error.
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * const result = await feed_delete(123);
86
+ * if (result.ok) {
87
+ * console.log("Feed deleted successfully");
88
+ * }
89
+ * ```
90
+ */
91
+ export declare function feed_delete(feedId: number): Promise<Result<boolean>>;
92
+ /**
93
+ * Retrieves a feed resource by feed ID.
94
+ *
95
+ * Returns the raw Feed object from chrisapi for advanced operations that
96
+ * are not covered by the other cumin feed functions.
97
+ *
98
+ * @param feedId - The numeric ID of the feed to retrieve.
99
+ * @returns A Result containing the Feed resource, or an error.
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * const result = await feed_get(123);
104
+ * if (result.ok) {
105
+ * const feed: Feed = result.value;
106
+ * // Perform advanced operations with the feed
107
+ * }
108
+ * ```
109
+ */
110
+ /**
111
+ * Represents a feed's note (singleton per feed).
112
+ */
113
+ export interface FeedNote {
114
+ title: string;
115
+ content: string;
116
+ }
117
+ /**
118
+ * Represents a single feed comment.
119
+ */
120
+ export interface FeedComment {
121
+ id: number;
122
+ title: string;
123
+ content: string;
124
+ owner_username: string;
125
+ }
126
+ /**
127
+ * Fetches the note for a feed.
128
+ *
129
+ * @param feedId - Feed ID.
130
+ * @returns Result containing the note's title and content.
131
+ */
132
+ export declare function feedNote_get(feedId: number): Promise<Result<FeedNote>>;
133
+ /**
134
+ * Updates the note for a feed.
135
+ *
136
+ * @param feedId - Feed ID.
137
+ * @param data - Partial note data to update (title and/or content).
138
+ * @returns Result containing true on success.
139
+ */
140
+ export declare function feedNote_update(feedId: number, data: {
141
+ title?: string;
142
+ content?: string;
143
+ }): Promise<Result<boolean>>;
144
+ /**
145
+ * Lists all comments on a feed.
146
+ *
147
+ * @param feedId - Feed ID.
148
+ * @returns Result containing array of comments.
149
+ */
150
+ export declare function feedComments_list(feedId: number): Promise<Result<FeedComment[]>>;
151
+ /**
152
+ * Creates a new comment on a feed.
153
+ *
154
+ * @param feedId - Feed ID.
155
+ * @param data - Comment title and content.
156
+ * @returns Result containing the created comment.
157
+ */
158
+ export declare function feedComment_create(feedId: number, data: {
159
+ title?: string;
160
+ content?: string;
161
+ }): Promise<Result<FeedComment>>;
162
+ /**
163
+ * Deletes a comment from a feed.
164
+ *
165
+ * @param feedId - Feed ID.
166
+ * @param commentId - Comment ID to delete.
167
+ * @returns Result containing true on success.
168
+ */
169
+ export declare function feedComment_delete(feedId: number, commentId: number): Promise<Result<boolean>>;
170
+ /**
171
+ * Updates a comment on a feed.
172
+ *
173
+ * @param feedId - Feed ID.
174
+ * @param commentId - Comment ID to update.
175
+ * @param data - Partial comment data to update.
176
+ * @returns Result containing true on success.
177
+ */
178
+ export declare function feedComment_update(feedId: number, commentId: number, data: {
179
+ title?: string;
180
+ content?: string;
181
+ }): Promise<Result<boolean>>;
182
+ /**
183
+ * Fetches a feed by its ID.
184
+ *
185
+ * @param feedId - The feed ID.
186
+ * @returns Result wrapping the Feed, or Err on failure.
187
+ */
188
+ export declare function feed_get(feedId: number): Promise<Result<Feed>>;
@@ -0,0 +1,432 @@
1
+ "use strict";
2
+ /**
3
+ * @file ChRIS Feed Management
4
+ *
5
+ * This module provides classes for managing ChRIS feeds.
6
+ * It includes the `ChRISFeedGroup` for collection operations and `ChRISFeed` for individual feed operations,
7
+ * particularly creation from directories using the 'pl-dircopy' plugin.
8
+ *
9
+ * @module
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ChRISFeed = exports.ChRISFeedGroup = void 0;
13
+ exports.feed_makePublic = feed_makePublic;
14
+ exports.feed_makePrivate = feed_makePrivate;
15
+ exports.feed_delete = feed_delete;
16
+ exports.feedNote_get = feedNote_get;
17
+ exports.feedNote_update = feedNote_update;
18
+ exports.feedComments_list = feedComments_list;
19
+ exports.feedComment_create = feedComment_create;
20
+ exports.feedComment_delete = feedComment_delete;
21
+ exports.feedComment_update = feedComment_update;
22
+ exports.feed_get = feed_get;
23
+ const chrisConnection_js_1 = require("../connect/chrisConnection.js");
24
+ const chrisResources_js_1 = require("../resources/chrisResources.js");
25
+ const chrisResourceGroup_js_1 = require("../resources/chrisResourceGroup.js");
26
+ const chrisPlugins_js_1 = require("../plugins/chrisPlugins.js");
27
+ const keypair_js_1 = require("../utils/keypair.js");
28
+ const errorStack_js_1 = require("../error/errorStack.js");
29
+ const result_js_1 = require("../utils/result.js");
30
+ /**
31
+ * Group handler for ChRIS feeds.
32
+ */
33
+ class ChRISFeedGroup extends chrisResourceGroup_js_1.ChRISResourceGroup {
34
+ constructor() {
35
+ super("Feeds", "getFeeds");
36
+ }
37
+ }
38
+ exports.ChRISFeedGroup = ChRISFeedGroup;
39
+ /**
40
+ * Class for managing individual ChRIS feeds.
41
+ */
42
+ class ChRISFeed {
43
+ constructor() {
44
+ this._client = null;
45
+ // Client is fetched lazily
46
+ }
47
+ /**
48
+ * Retrieves the ChRIS client instance asynchronously.
49
+ * @returns A Promise resolving to the Client instance or null.
50
+ */
51
+ async client_get() {
52
+ if (!this._client) {
53
+ this._client = await chrisConnection_js_1.chrisConnection.client_get();
54
+ }
55
+ return this._client;
56
+ }
57
+ error_parse(error, activity) {
58
+ if (error instanceof Error) {
59
+ errorStack_js_1.errorStack.stack_push("error", `Error ${activity}: ${error.message}`);
60
+ }
61
+ else {
62
+ errorStack_js_1.errorStack.stack_push("error", `An unknown error occurred while ${activity}`);
63
+ }
64
+ return null;
65
+ }
66
+ async feedDetail_getFromPluginInstance(pluginInstance, detailSpec) {
67
+ if (!pluginInstance) {
68
+ return null;
69
+ }
70
+ const feed = await pluginInstance.getFeed();
71
+ if (!feed) {
72
+ return null;
73
+ }
74
+ const feedDetail = (0, chrisResources_js_1.resourceFields_get)(feed, detailSpec);
75
+ if (!feedDetail) {
76
+ return null;
77
+ }
78
+ feedDetail.pluginInstance = pluginInstance;
79
+ return feedDetail;
80
+ }
81
+ async createFromDirs(dirs, feedParams) {
82
+ const client = await this.client_get();
83
+ if (!client) {
84
+ console.error("Could not access ChRIS. Have you connected with the 'connect' command?");
85
+ return null;
86
+ }
87
+ let pluginInstance;
88
+ try {
89
+ const chrisPlugin = new chrisPlugins_js_1.ChRISPlugin();
90
+ const pluginList = await chrisPlugin.pluginIDs_get("pl-dircopy");
91
+ if (!pluginList) {
92
+ errorStack_js_1.errorStack.stack_push("error", "pl-dircopy was not found! No feeds can be created.");
93
+ return null;
94
+ }
95
+ const pluginID = pluginList.hits[0];
96
+ const createParams = (0, keypair_js_1.keyPairParams_apply)({ dir: dirs }, feedParams.params);
97
+ pluginInstance = await client.createPluginInstance(pluginID, createParams);
98
+ }
99
+ catch (error) {
100
+ return this.error_parse(error, "creating feed");
101
+ }
102
+ return await this.feedDetail_getFromPluginInstance(pluginInstance, [
103
+ "id",
104
+ "name",
105
+ "owner_username",
106
+ ]);
107
+ }
108
+ }
109
+ exports.ChRISFeed = ChRISFeed;
110
+ /**
111
+ * Makes a feed public by feed ID.
112
+ *
113
+ * Retrieves the feed resource and calls its makePublic() method to change
114
+ * the feed's visibility to public.
115
+ *
116
+ * @param feedId - The numeric ID of the feed to make public.
117
+ * @returns A Result containing true on success, or an error.
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * const result = await feed_makePublic(123);
122
+ * if (result.ok) {
123
+ * console.log("Feed is now public");
124
+ * }
125
+ * ```
126
+ */
127
+ async function feed_makePublic(feedId) {
128
+ const client = await chrisConnection_js_1.chrisConnection.client_get();
129
+ if (!client) {
130
+ errorStack_js_1.errorStack.stack_push("error", "Not connected to ChRIS. Cannot make feed public.");
131
+ return (0, result_js_1.Err)();
132
+ }
133
+ try {
134
+ const feed = await client.getFeed(feedId);
135
+ if (!feed) {
136
+ errorStack_js_1.errorStack.stack_push("error", `Feed with ID ${feedId} not found.`);
137
+ return (0, result_js_1.Err)();
138
+ }
139
+ await feed.makePublic();
140
+ return (0, result_js_1.Ok)(true);
141
+ }
142
+ catch (error) {
143
+ const msg = error instanceof Error ? error.message : String(error);
144
+ errorStack_js_1.errorStack.stack_push("error", `Failed to make feed ${feedId} public: ${msg}`);
145
+ return (0, result_js_1.Err)();
146
+ }
147
+ }
148
+ /**
149
+ * Makes a feed private by feed ID.
150
+ *
151
+ * Retrieves the feed resource and calls its makeUnpublic() method to change
152
+ * the feed's visibility to private (unpublish it).
153
+ *
154
+ * @param feedId - The numeric ID of the feed to make private.
155
+ * @returns A Result containing true on success, or an error.
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * const result = await feed_makePrivate(123);
160
+ * if (result.ok) {
161
+ * console.log("Feed is now private");
162
+ * }
163
+ * ```
164
+ */
165
+ async function feed_makePrivate(feedId) {
166
+ const client = await chrisConnection_js_1.chrisConnection.client_get();
167
+ if (!client) {
168
+ errorStack_js_1.errorStack.stack_push("error", "Not connected to ChRIS. Cannot make feed private.");
169
+ return (0, result_js_1.Err)();
170
+ }
171
+ try {
172
+ const feed = await client.getFeed(feedId);
173
+ if (!feed) {
174
+ errorStack_js_1.errorStack.stack_push("error", `Feed with ID ${feedId} not found.`);
175
+ return (0, result_js_1.Err)();
176
+ }
177
+ await feed.makeUnpublic();
178
+ return (0, result_js_1.Ok)(true);
179
+ }
180
+ catch (error) {
181
+ const msg = error instanceof Error ? error.message : String(error);
182
+ errorStack_js_1.errorStack.stack_push("error", `Failed to make feed ${feedId} private: ${msg}`);
183
+ return (0, result_js_1.Err)();
184
+ }
185
+ }
186
+ /**
187
+ * Deletes a feed by feed ID.
188
+ *
189
+ * Retrieves the feed resource and calls its delete() method to permanently
190
+ * remove the feed from ChRIS.
191
+ *
192
+ * @param feedId - The numeric ID of the feed to delete.
193
+ * @returns A Result containing true on success, or an error.
194
+ *
195
+ * @example
196
+ * ```typescript
197
+ * const result = await feed_delete(123);
198
+ * if (result.ok) {
199
+ * console.log("Feed deleted successfully");
200
+ * }
201
+ * ```
202
+ */
203
+ async function feed_delete(feedId) {
204
+ const client = await chrisConnection_js_1.chrisConnection.client_get();
205
+ if (!client) {
206
+ errorStack_js_1.errorStack.stack_push("error", "Not connected to ChRIS. Cannot delete feed.");
207
+ return (0, result_js_1.Err)();
208
+ }
209
+ try {
210
+ const feed = await client.getFeed(feedId);
211
+ if (!feed) {
212
+ errorStack_js_1.errorStack.stack_push("error", `Feed with ID ${feedId} not found.`);
213
+ return (0, result_js_1.Err)();
214
+ }
215
+ await feed.delete();
216
+ return (0, result_js_1.Ok)(true);
217
+ }
218
+ catch (error) {
219
+ const msg = error instanceof Error ? error.message : String(error);
220
+ errorStack_js_1.errorStack.stack_push("error", `Failed to delete feed ${feedId}: ${msg}`);
221
+ return (0, result_js_1.Err)();
222
+ }
223
+ }
224
+ /**
225
+ * Fetches the note for a feed.
226
+ *
227
+ * @param feedId - Feed ID.
228
+ * @returns Result containing the note's title and content.
229
+ */
230
+ async function feedNote_get(feedId) {
231
+ const client = await chrisConnection_js_1.chrisConnection.client_get();
232
+ if (!client) {
233
+ errorStack_js_1.errorStack.stack_push('error', 'Not connected to ChRIS.');
234
+ return (0, result_js_1.Err)();
235
+ }
236
+ try {
237
+ const feed = await client.getFeed(feedId);
238
+ if (!feed) {
239
+ errorStack_js_1.errorStack.stack_push('error', `Feed ${feedId} not found.`);
240
+ return (0, result_js_1.Err)();
241
+ }
242
+ const note = await feed.getNote();
243
+ const data = note.data;
244
+ return (0, result_js_1.Ok)({ title: data?.title ?? '', content: data?.content ?? '' });
245
+ }
246
+ catch (error) {
247
+ const msg = error instanceof Error ? error.message : String(error);
248
+ errorStack_js_1.errorStack.stack_push('error', `Failed to get note for feed ${feedId}: ${msg}`);
249
+ return (0, result_js_1.Err)();
250
+ }
251
+ }
252
+ /**
253
+ * Updates the note for a feed.
254
+ *
255
+ * @param feedId - Feed ID.
256
+ * @param data - Partial note data to update (title and/or content).
257
+ * @returns Result containing true on success.
258
+ */
259
+ async function feedNote_update(feedId, data) {
260
+ const client = await chrisConnection_js_1.chrisConnection.client_get();
261
+ if (!client) {
262
+ errorStack_js_1.errorStack.stack_push('error', 'Not connected to ChRIS.');
263
+ return (0, result_js_1.Err)();
264
+ }
265
+ try {
266
+ const feed = await client.getFeed(feedId);
267
+ if (!feed) {
268
+ errorStack_js_1.errorStack.stack_push('error', `Feed ${feedId} not found.`);
269
+ return (0, result_js_1.Err)();
270
+ }
271
+ const note = await feed.getNote();
272
+ await note.put(data);
273
+ return (0, result_js_1.Ok)(true);
274
+ }
275
+ catch (error) {
276
+ const msg = error instanceof Error ? error.message : String(error);
277
+ errorStack_js_1.errorStack.stack_push('error', `Failed to update note for feed ${feedId}: ${msg}`);
278
+ return (0, result_js_1.Err)();
279
+ }
280
+ }
281
+ /**
282
+ * Lists all comments on a feed.
283
+ *
284
+ * @param feedId - Feed ID.
285
+ * @returns Result containing array of comments.
286
+ */
287
+ async function feedComments_list(feedId) {
288
+ const client = await chrisConnection_js_1.chrisConnection.client_get();
289
+ if (!client) {
290
+ errorStack_js_1.errorStack.stack_push('error', 'Not connected to ChRIS.');
291
+ return (0, result_js_1.Err)();
292
+ }
293
+ try {
294
+ const feed = await client.getFeed(feedId);
295
+ if (!feed) {
296
+ errorStack_js_1.errorStack.stack_push('error', `Feed ${feedId} not found.`);
297
+ return (0, result_js_1.Err)();
298
+ }
299
+ const commentList = await feed.getComments({ limit: 1000 });
300
+ const comments = commentList.data || [];
301
+ return (0, result_js_1.Ok)(comments);
302
+ }
303
+ catch (error) {
304
+ const msg = error instanceof Error ? error.message : String(error);
305
+ errorStack_js_1.errorStack.stack_push('error', `Failed to list comments for feed ${feedId}: ${msg}`);
306
+ return (0, result_js_1.Err)();
307
+ }
308
+ }
309
+ /**
310
+ * Creates a new comment on a feed.
311
+ *
312
+ * @param feedId - Feed ID.
313
+ * @param data - Comment title and content.
314
+ * @returns Result containing the created comment.
315
+ */
316
+ async function feedComment_create(feedId, data) {
317
+ const client = await chrisConnection_js_1.chrisConnection.client_get();
318
+ if (!client) {
319
+ errorStack_js_1.errorStack.stack_push('error', 'Not connected to ChRIS.');
320
+ return (0, result_js_1.Err)();
321
+ }
322
+ try {
323
+ const feed = await client.getFeed(feedId);
324
+ if (!feed) {
325
+ errorStack_js_1.errorStack.stack_push('error', `Feed ${feedId} not found.`);
326
+ return (0, result_js_1.Err)();
327
+ }
328
+ const commentList = await feed.getComments({ limit: 1 });
329
+ const created = await commentList.post(data);
330
+ const createdData = created.data?.[0];
331
+ return (0, result_js_1.Ok)(createdData ?? { id: 0, title: data.title ?? '', content: data.content ?? '', owner_username: '' });
332
+ }
333
+ catch (error) {
334
+ const msg = error instanceof Error ? error.message : String(error);
335
+ errorStack_js_1.errorStack.stack_push('error', `Failed to create comment on feed ${feedId}: ${msg}`);
336
+ return (0, result_js_1.Err)();
337
+ }
338
+ }
339
+ /**
340
+ * Deletes a comment from a feed.
341
+ *
342
+ * @param feedId - Feed ID.
343
+ * @param commentId - Comment ID to delete.
344
+ * @returns Result containing true on success.
345
+ */
346
+ async function feedComment_delete(feedId, commentId) {
347
+ const client = await chrisConnection_js_1.chrisConnection.client_get();
348
+ if (!client) {
349
+ errorStack_js_1.errorStack.stack_push('error', 'Not connected to ChRIS.');
350
+ return (0, result_js_1.Err)();
351
+ }
352
+ try {
353
+ const feed = await client.getFeed(feedId);
354
+ if (!feed) {
355
+ errorStack_js_1.errorStack.stack_push('error', `Feed ${feedId} not found.`);
356
+ return (0, result_js_1.Err)();
357
+ }
358
+ const comment = await feed.getComment(commentId);
359
+ if (!comment) {
360
+ errorStack_js_1.errorStack.stack_push('error', `Comment ${commentId} not found on feed ${feedId}.`);
361
+ return (0, result_js_1.Err)();
362
+ }
363
+ await comment.delete();
364
+ return (0, result_js_1.Ok)(true);
365
+ }
366
+ catch (error) {
367
+ const msg = error instanceof Error ? error.message : String(error);
368
+ errorStack_js_1.errorStack.stack_push('error', `Failed to delete comment ${commentId}: ${msg}`);
369
+ return (0, result_js_1.Err)();
370
+ }
371
+ }
372
+ /**
373
+ * Updates a comment on a feed.
374
+ *
375
+ * @param feedId - Feed ID.
376
+ * @param commentId - Comment ID to update.
377
+ * @param data - Partial comment data to update.
378
+ * @returns Result containing true on success.
379
+ */
380
+ async function feedComment_update(feedId, commentId, data) {
381
+ const client = await chrisConnection_js_1.chrisConnection.client_get();
382
+ if (!client) {
383
+ errorStack_js_1.errorStack.stack_push('error', 'Not connected to ChRIS.');
384
+ return (0, result_js_1.Err)();
385
+ }
386
+ try {
387
+ const feed = await client.getFeed(feedId);
388
+ if (!feed) {
389
+ errorStack_js_1.errorStack.stack_push('error', `Feed ${feedId} not found.`);
390
+ return (0, result_js_1.Err)();
391
+ }
392
+ const comment = await feed.getComment(commentId);
393
+ if (!comment) {
394
+ errorStack_js_1.errorStack.stack_push('error', `Comment ${commentId} not found on feed ${feedId}.`);
395
+ return (0, result_js_1.Err)();
396
+ }
397
+ await comment.put(data);
398
+ return (0, result_js_1.Ok)(true);
399
+ }
400
+ catch (error) {
401
+ const msg = error instanceof Error ? error.message : String(error);
402
+ errorStack_js_1.errorStack.stack_push('error', `Failed to update comment ${commentId}: ${msg}`);
403
+ return (0, result_js_1.Err)();
404
+ }
405
+ }
406
+ /**
407
+ * Fetches a feed by its ID.
408
+ *
409
+ * @param feedId - The feed ID.
410
+ * @returns Result wrapping the Feed, or Err on failure.
411
+ */
412
+ async function feed_get(feedId) {
413
+ const client = await chrisConnection_js_1.chrisConnection.client_get();
414
+ if (!client) {
415
+ errorStack_js_1.errorStack.stack_push("error", "Not connected to ChRIS. Cannot retrieve feed.");
416
+ return (0, result_js_1.Err)();
417
+ }
418
+ try {
419
+ const feed = await client.getFeed(feedId);
420
+ if (!feed) {
421
+ errorStack_js_1.errorStack.stack_push("error", `Feed with ID ${feedId} not found.`);
422
+ return (0, result_js_1.Err)();
423
+ }
424
+ return (0, result_js_1.Ok)(feed);
425
+ }
426
+ catch (error) {
427
+ const msg = error instanceof Error ? error.message : String(error);
428
+ errorStack_js_1.errorStack.stack_push("error", `Failed to retrieve feed ${feedId}: ${msg}`);
429
+ return (0, result_js_1.Err)();
430
+ }
431
+ }
432
+ //# sourceMappingURL=chrisFeed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrisFeed.js","sourceRoot":"","sources":["../../src/feeds/chrisFeed.ts"],"names":[],"mappings":"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"}