@optimizely-opal/opal-tool-ocp-sdk 1.0.0-OCP-1442.5 → 1.0.0-OCP-1449.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.
- package/README.md +114 -72
- package/dist/auth/AuthUtils.d.ts +12 -5
- package/dist/auth/AuthUtils.d.ts.map +1 -1
- package/dist/auth/AuthUtils.js +80 -25
- package/dist/auth/AuthUtils.js.map +1 -1
- package/dist/auth/AuthUtils.test.js +161 -117
- package/dist/auth/AuthUtils.test.js.map +1 -1
- package/dist/function/GlobalToolFunction.d.ts +1 -1
- package/dist/function/GlobalToolFunction.d.ts.map +1 -1
- package/dist/function/GlobalToolFunction.js +17 -4
- package/dist/function/GlobalToolFunction.js.map +1 -1
- package/dist/function/GlobalToolFunction.test.js +54 -8
- package/dist/function/GlobalToolFunction.test.js.map +1 -1
- package/dist/function/ToolFunction.d.ts +1 -1
- package/dist/function/ToolFunction.d.ts.map +1 -1
- package/dist/function/ToolFunction.js +24 -4
- package/dist/function/ToolFunction.js.map +1 -1
- package/dist/function/ToolFunction.test.js +260 -8
- package/dist/function/ToolFunction.test.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/logging/ToolLogger.d.ts.map +1 -1
- package/dist/logging/ToolLogger.js +13 -12
- package/dist/logging/ToolLogger.js.map +1 -1
- package/dist/logging/ToolLogger.test.js +171 -0
- package/dist/logging/ToolLogger.test.js.map +1 -1
- package/dist/service/Service.d.ts +88 -2
- package/dist/service/Service.d.ts.map +1 -1
- package/dist/service/Service.js +227 -55
- package/dist/service/Service.js.map +1 -1
- package/dist/service/Service.test.js +464 -36
- package/dist/service/Service.test.js.map +1 -1
- package/dist/types/ToolError.d.ts +59 -0
- package/dist/types/ToolError.d.ts.map +1 -0
- package/dist/types/ToolError.js +79 -0
- package/dist/types/ToolError.js.map +1 -0
- package/dist/types/ToolError.test.d.ts +2 -0
- package/dist/types/ToolError.test.d.ts.map +1 -0
- package/dist/types/ToolError.test.js +161 -0
- package/dist/types/ToolError.test.js.map +1 -0
- package/dist/validation/ParameterValidator.d.ts +5 -16
- package/dist/validation/ParameterValidator.d.ts.map +1 -1
- package/dist/validation/ParameterValidator.js +10 -3
- package/dist/validation/ParameterValidator.js.map +1 -1
- package/dist/validation/ParameterValidator.test.js +186 -146
- package/dist/validation/ParameterValidator.test.js.map +1 -1
- package/package.json +1 -1
- package/src/auth/AuthUtils.test.ts +176 -157
- package/src/auth/AuthUtils.ts +96 -33
- package/src/function/GlobalToolFunction.test.ts +54 -8
- package/src/function/GlobalToolFunction.ts +26 -6
- package/src/function/ToolFunction.test.ts +274 -8
- package/src/function/ToolFunction.ts +33 -7
- package/src/index.ts +1 -0
- package/src/logging/ToolLogger.test.ts +184 -0
- package/src/logging/ToolLogger.ts +13 -12
- package/src/service/Service.test.ts +577 -34
- package/src/service/Service.ts +286 -54
- package/src/types/ToolError.test.ts +192 -0
- package/src/types/ToolError.ts +95 -0
- package/src/validation/ParameterValidator.test.ts +185 -158
- package/src/validation/ParameterValidator.ts +17 -20
package/dist/service/Service.js
CHANGED
|
@@ -33,9 +33,10 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.toolsService = exports.ToolsService = exports.Tool = exports.Interaction = exports.InteractionResult = void 0;
|
|
36
|
+
exports.toolsService = exports.ToolsService = exports.Tool = exports.Interaction = exports.InteractionResult = exports.NestedInteractions = void 0;
|
|
37
37
|
/* eslint-disable max-classes-per-file */
|
|
38
38
|
const Models_1 = require("../types/Models");
|
|
39
|
+
const ToolError_1 = require("../types/ToolError");
|
|
39
40
|
const App = __importStar(require("@zaiusinc/app-sdk"));
|
|
40
41
|
const app_sdk_1 = require("@zaiusinc/app-sdk");
|
|
41
42
|
const ParameterValidator_1 = require("../validation/ParameterValidator");
|
|
@@ -43,15 +44,26 @@ const ParameterValidator_1 = require("../validation/ParameterValidator");
|
|
|
43
44
|
* Default OptiID authentication requirement that will be enforced for all tools
|
|
44
45
|
*/
|
|
45
46
|
const DEFAULT_OPTIID_AUTH = new Models_1.AuthRequirement('OptiID', 'default', true);
|
|
47
|
+
class NestedInteractions {
|
|
48
|
+
response;
|
|
49
|
+
constructor(response) {
|
|
50
|
+
this.response = response;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.NestedInteractions = NestedInteractions;
|
|
46
54
|
/**
|
|
47
55
|
* Result type for interaction handlers
|
|
48
56
|
*/
|
|
49
57
|
class InteractionResult {
|
|
50
58
|
message;
|
|
51
59
|
link;
|
|
52
|
-
|
|
60
|
+
dispatch_event;
|
|
61
|
+
interactions;
|
|
62
|
+
constructor(message, link, dispatch_event, interactions) {
|
|
53
63
|
this.message = message;
|
|
54
64
|
this.link = link;
|
|
65
|
+
this.dispatch_event = dispatch_event;
|
|
66
|
+
this.interactions = interactions;
|
|
55
67
|
}
|
|
56
68
|
}
|
|
57
69
|
exports.InteractionResult = InteractionResult;
|
|
@@ -119,6 +131,82 @@ exports.Tool = Tool;
|
|
|
119
131
|
class ToolsService {
|
|
120
132
|
functions = new Map();
|
|
121
133
|
interactions = new Map();
|
|
134
|
+
/**
|
|
135
|
+
* Generate KV store key for tool overrides
|
|
136
|
+
* @param appVersionId App version ID
|
|
137
|
+
* @param functionName Function name
|
|
138
|
+
* @returns KV store key
|
|
139
|
+
*/
|
|
140
|
+
getOverrideKey(appVersionId, functionName) {
|
|
141
|
+
return `${appVersionId}:${functionName}:opal-tools-overrides`;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Get tool overrides from KV store
|
|
145
|
+
* @param appVersionId App version ID
|
|
146
|
+
* @param functionName Function name
|
|
147
|
+
* @returns Stored overrides or null if not found
|
|
148
|
+
*/
|
|
149
|
+
async getOverrides(appVersionId, functionName) {
|
|
150
|
+
const key = this.getOverrideKey(appVersionId, functionName);
|
|
151
|
+
return await App.storage.kvStore.get(key);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Apply overrides to tool definitions
|
|
155
|
+
* @param tools Original tool definitions
|
|
156
|
+
* @param overrides Override data
|
|
157
|
+
* @returns Tools with overrides applied
|
|
158
|
+
*/
|
|
159
|
+
applyOverrides(tools, overrides) {
|
|
160
|
+
return tools.map((tool) => {
|
|
161
|
+
const override = overrides[tool.name];
|
|
162
|
+
if (!override) {
|
|
163
|
+
return tool;
|
|
164
|
+
}
|
|
165
|
+
// Clone the tool and apply overrides
|
|
166
|
+
const overriddenTool = new Tool(tool.name, override.description, tool.parameters.map((param) => {
|
|
167
|
+
const paramOverride = override.parameters?.find((p) => p.name === param.name);
|
|
168
|
+
if (paramOverride) {
|
|
169
|
+
return new Models_1.Parameter(param.name, param.type, paramOverride.description, param.required);
|
|
170
|
+
}
|
|
171
|
+
return param;
|
|
172
|
+
}), tool.endpoint, tool.handler, tool.authRequirements);
|
|
173
|
+
overriddenTool.httpMethod = tool.httpMethod;
|
|
174
|
+
return overriddenTool;
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Save tool description overrides
|
|
179
|
+
* @param appVersionId App version ID
|
|
180
|
+
* @param functionName Function name
|
|
181
|
+
* @param overrideData Override data from request
|
|
182
|
+
*/
|
|
183
|
+
async saveToolOverrides(appVersionId, functionName, overrides) {
|
|
184
|
+
const key = this.getOverrideKey(appVersionId, functionName);
|
|
185
|
+
await App.storage.kvStore.patch(key, overrides);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Delete tool description overrides
|
|
189
|
+
* @param appVersionId App version ID
|
|
190
|
+
* @param functionName Function name
|
|
191
|
+
*/
|
|
192
|
+
async deleteToolOverrides(appVersionId, functionName) {
|
|
193
|
+
const key = this.getOverrideKey(appVersionId, functionName);
|
|
194
|
+
await App.storage.kvStore.delete(key);
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Get tool definitions with overrides applied
|
|
198
|
+
* @param appVersionId App version ID
|
|
199
|
+
* @param functionName Function name
|
|
200
|
+
* @returns Tool definitions with overrides applied
|
|
201
|
+
*/
|
|
202
|
+
async getToolsWithOverrides(appVersionId, functionName) {
|
|
203
|
+
const tools = Array.from(this.functions.values());
|
|
204
|
+
const overrides = await this.getOverrides(appVersionId, functionName);
|
|
205
|
+
if (overrides) {
|
|
206
|
+
return this.applyOverrides(tools, overrides);
|
|
207
|
+
}
|
|
208
|
+
return tools;
|
|
209
|
+
}
|
|
122
210
|
/**
|
|
123
211
|
* Enforce OptiID authentication for tools by ensuring OptiID auth requirement is present
|
|
124
212
|
* @param authRequirements Original authentication requirements
|
|
@@ -132,6 +220,31 @@ class ToolsService {
|
|
|
132
220
|
}
|
|
133
221
|
return [...(authRequirements || []), DEFAULT_OPTIID_AUTH];
|
|
134
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* Format an error as RFC 9457 Problem Details response
|
|
225
|
+
* @param error The error to format
|
|
226
|
+
* @param instance URI reference identifying the specific occurrence
|
|
227
|
+
* @returns RFC 9457 compliant Response
|
|
228
|
+
*/
|
|
229
|
+
formatErrorResponse(error, instance) {
|
|
230
|
+
let status = 500;
|
|
231
|
+
let problemDetails;
|
|
232
|
+
if (error instanceof ToolError_1.ToolError) {
|
|
233
|
+
// Use ToolError's status and format
|
|
234
|
+
status = error.status;
|
|
235
|
+
problemDetails = error.toProblemDetails(instance);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
// Convert regular errors to RFC 9457 format with 500 status
|
|
239
|
+
problemDetails = {
|
|
240
|
+
title: 'Internal Server Error',
|
|
241
|
+
status: 500,
|
|
242
|
+
detail: error.message || 'An unexpected error occurred',
|
|
243
|
+
instance
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
return new App.Response(status, problemDetails, new app_sdk_1.Headers([['content-type', 'application/problem+json']]));
|
|
247
|
+
}
|
|
135
248
|
/**
|
|
136
249
|
* Register a tool function with generic auth data
|
|
137
250
|
* @param name Tool name
|
|
@@ -158,68 +271,127 @@ class ToolsService {
|
|
|
158
271
|
this.interactions.set(endpoint, func);
|
|
159
272
|
}
|
|
160
273
|
async processRequest(req, functionContext) {
|
|
274
|
+
// Handle discovery endpoint with overrides
|
|
161
275
|
if (req.path === '/discovery') {
|
|
162
|
-
return
|
|
276
|
+
return await this.handleDiscoveryRequest(functionContext);
|
|
163
277
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (!validationResult.isValid) {
|
|
179
|
-
return new App.Response(400, {
|
|
180
|
-
title: 'One or more validation errors occurred.',
|
|
181
|
-
status: 400,
|
|
182
|
-
detail: "See 'errors' field for details.",
|
|
183
|
-
instance: func.endpoint,
|
|
184
|
-
errors: validationResult.errors.map((error) => ({
|
|
185
|
-
field: error.field,
|
|
186
|
-
message: error.message
|
|
187
|
-
}))
|
|
188
|
-
}, new app_sdk_1.Headers([['content-type', 'application/problem+json']]));
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
// Extract auth data from body JSON
|
|
192
|
-
const authData = req.bodyJSON ? req.bodyJSON.auth : undefined;
|
|
193
|
-
const result = await func.handler(functionContext, params, authData);
|
|
194
|
-
return new App.Response(200, result);
|
|
278
|
+
// Handle overrides endpoint
|
|
279
|
+
if (req.path === '/overrides') {
|
|
280
|
+
return await this.handleOverridesRequest(req, functionContext);
|
|
281
|
+
}
|
|
282
|
+
// Handle regular tool functions
|
|
283
|
+
const func = this.functions.get(req.path);
|
|
284
|
+
if (func) {
|
|
285
|
+
try {
|
|
286
|
+
let params;
|
|
287
|
+
if (req.bodyJSON && req.bodyJSON.parameters) {
|
|
288
|
+
params = req.bodyJSON.parameters;
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
params = req.bodyJSON;
|
|
195
292
|
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
293
|
+
// Validate parameters before calling the handler (only if tool has parameter definitions)
|
|
294
|
+
// ParameterValidator.validate() throws ToolError if validation fails
|
|
295
|
+
if (func.parameters && func.parameters.length > 0) {
|
|
296
|
+
ParameterValidator_1.ParameterValidator.validate(params, func.parameters, func.endpoint);
|
|
199
297
|
}
|
|
298
|
+
// Extract auth data from body JSON
|
|
299
|
+
const authData = req.bodyJSON ? req.bodyJSON.auth : undefined;
|
|
300
|
+
const result = await func.handler(functionContext, params, authData);
|
|
301
|
+
return new App.Response(200, result);
|
|
200
302
|
}
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
303
|
+
catch (error) {
|
|
304
|
+
app_sdk_1.logger.error(`Error in function ${func.name}:`, error);
|
|
305
|
+
return this.formatErrorResponse(error, func.endpoint);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
// Handle interactions
|
|
309
|
+
const interaction = this.interactions.get(req.path);
|
|
310
|
+
if (interaction) {
|
|
311
|
+
try {
|
|
312
|
+
let params;
|
|
313
|
+
if (req.bodyJSON && req.bodyJSON.data) {
|
|
314
|
+
params = req.bodyJSON.data;
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
params = req.bodyJSON;
|
|
215
318
|
}
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
319
|
+
// Extract auth data from body JSON
|
|
320
|
+
const authData = req.bodyJSON ? req.bodyJSON.auth : undefined;
|
|
321
|
+
const result = await interaction.handler(functionContext, params, authData);
|
|
322
|
+
return new App.Response(200, result);
|
|
323
|
+
}
|
|
324
|
+
catch (error) {
|
|
325
|
+
app_sdk_1.logger.error(`Error in function ${interaction.name}:`, error);
|
|
326
|
+
return this.formatErrorResponse(error, interaction.endpoint);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return new App.Response(404, 'Function not found');
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Handle discovery endpoint with overrides applied
|
|
333
|
+
* @param functionContext The function context to get function name from
|
|
334
|
+
* @returns Response with tool definitions
|
|
335
|
+
*/
|
|
336
|
+
async handleDiscoveryRequest(functionContext) {
|
|
337
|
+
try {
|
|
338
|
+
// Get app version from app context
|
|
339
|
+
const appVersionId = (0, app_sdk_1.getAppContext)().manifest.meta.version;
|
|
340
|
+
// Get function name from function context
|
|
341
|
+
const functionName = functionContext.constructor.name;
|
|
342
|
+
const toolsWithOverrides = await this.getToolsWithOverrides(appVersionId, functionName);
|
|
343
|
+
return new App.Response(200, { functions: toolsWithOverrides.map((f) => f.toJSON()) });
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
app_sdk_1.logger.error('Error getting tools with overrides:', error);
|
|
347
|
+
// Fallback to original tools if override fetch fails
|
|
348
|
+
return new App.Response(200, { functions: Array.from(this.functions.values()).map((f) => f.toJSON()) });
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Handle overrides endpoint for saving and deleting tool description overrides
|
|
353
|
+
* @param req The request object
|
|
354
|
+
* @param functionContext The function context to get function name from
|
|
355
|
+
* @returns Response indicating success or failure
|
|
356
|
+
*/
|
|
357
|
+
async handleOverridesRequest(req, functionContext) {
|
|
358
|
+
if (req.method === 'PATCH') {
|
|
359
|
+
try {
|
|
360
|
+
// Get app version from app context
|
|
361
|
+
const appVersionId = (0, app_sdk_1.getAppContext)().manifest.meta.version;
|
|
362
|
+
// Get function name from function context
|
|
363
|
+
const functionName = functionContext.constructor.name;
|
|
364
|
+
if (!req.bodyJSON?.functions || !Array.isArray(req.bodyJSON.functions)) {
|
|
365
|
+
return new App.Response(400, { error: 'Invalid request body. Expected functions array.' });
|
|
219
366
|
}
|
|
367
|
+
// Convert array format to map format for storage
|
|
368
|
+
const overrideData = req.bodyJSON.functions.reduce((map, tool) => {
|
|
369
|
+
map[tool.name] = tool;
|
|
370
|
+
return map;
|
|
371
|
+
}, {});
|
|
372
|
+
await this.saveToolOverrides(appVersionId, functionName, overrideData);
|
|
373
|
+
return new App.Response(200, { success: true });
|
|
374
|
+
}
|
|
375
|
+
catch (error) {
|
|
376
|
+
app_sdk_1.logger.error('Error saving tool overrides:', error);
|
|
377
|
+
return new App.Response(500, { error: error.message || 'Unknown error' });
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
else if (req.method === 'DELETE') {
|
|
381
|
+
try {
|
|
382
|
+
// Get app version from app context
|
|
383
|
+
const appVersionId = (0, app_sdk_1.getAppContext)().manifest.meta.version;
|
|
384
|
+
// Get function name from function context
|
|
385
|
+
const functionName = functionContext.constructor.name;
|
|
386
|
+
await this.deleteToolOverrides(appVersionId, functionName);
|
|
387
|
+
return new App.Response(200, { success: true });
|
|
388
|
+
}
|
|
389
|
+
catch (error) {
|
|
390
|
+
app_sdk_1.logger.error('Error deleting tool overrides:', error);
|
|
391
|
+
return new App.Response(500, { error: error.message || 'Unknown error' });
|
|
220
392
|
}
|
|
221
|
-
return new App.Response(404, 'Function not found');
|
|
222
393
|
}
|
|
394
|
+
return new App.Response(405, { error: 'Method not allowed' });
|
|
223
395
|
}
|
|
224
396
|
}
|
|
225
397
|
exports.ToolsService = ToolsService;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/service/Service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAyC;AACzC,
|
|
1
|
+
{"version":3,"file":"Service.js","sourceRoot":"","sources":["../../src/service/Service.ts"],"names":[],"mappings":"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"}
|