@optimizely-opal/opal-tool-ocp-sdk 1.0.0-beta.3 → 1.0.0-beta.5

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 (57) hide show
  1. package/README.md +114 -0
  2. package/dist/auth/AuthUtils.d.ts +5 -5
  3. package/dist/auth/AuthUtils.d.ts.map +1 -1
  4. package/dist/auth/AuthUtils.js +53 -25
  5. package/dist/auth/AuthUtils.js.map +1 -1
  6. package/dist/auth/AuthUtils.test.js +62 -117
  7. package/dist/auth/AuthUtils.test.js.map +1 -1
  8. package/dist/function/GlobalToolFunction.d.ts +1 -1
  9. package/dist/function/GlobalToolFunction.d.ts.map +1 -1
  10. package/dist/function/GlobalToolFunction.js +17 -4
  11. package/dist/function/GlobalToolFunction.js.map +1 -1
  12. package/dist/function/GlobalToolFunction.test.js +54 -8
  13. package/dist/function/GlobalToolFunction.test.js.map +1 -1
  14. package/dist/function/ToolFunction.d.ts +1 -1
  15. package/dist/function/ToolFunction.d.ts.map +1 -1
  16. package/dist/function/ToolFunction.js +17 -4
  17. package/dist/function/ToolFunction.js.map +1 -1
  18. package/dist/function/ToolFunction.test.js +54 -8
  19. package/dist/function/ToolFunction.test.js.map +1 -1
  20. package/dist/index.d.ts +1 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1 -0
  23. package/dist/index.js.map +1 -1
  24. package/dist/service/Service.d.ts +15 -2
  25. package/dist/service/Service.d.ts.map +1 -1
  26. package/dist/service/Service.js +43 -17
  27. package/dist/service/Service.js.map +1 -1
  28. package/dist/service/Service.test.js +84 -2
  29. package/dist/service/Service.test.js.map +1 -1
  30. package/dist/types/ToolError.d.ts +72 -0
  31. package/dist/types/ToolError.d.ts.map +1 -0
  32. package/dist/types/ToolError.js +107 -0
  33. package/dist/types/ToolError.js.map +1 -0
  34. package/dist/types/ToolError.test.d.ts +2 -0
  35. package/dist/types/ToolError.test.d.ts.map +1 -0
  36. package/dist/types/ToolError.test.js +185 -0
  37. package/dist/types/ToolError.test.js.map +1 -0
  38. package/dist/validation/ParameterValidator.d.ts +5 -16
  39. package/dist/validation/ParameterValidator.d.ts.map +1 -1
  40. package/dist/validation/ParameterValidator.js +10 -3
  41. package/dist/validation/ParameterValidator.js.map +1 -1
  42. package/dist/validation/ParameterValidator.test.js +187 -146
  43. package/dist/validation/ParameterValidator.test.js.map +1 -1
  44. package/package.json +1 -1
  45. package/src/auth/AuthUtils.test.ts +62 -157
  46. package/src/auth/AuthUtils.ts +66 -32
  47. package/src/function/GlobalToolFunction.test.ts +54 -8
  48. package/src/function/GlobalToolFunction.ts +26 -6
  49. package/src/function/ToolFunction.test.ts +54 -8
  50. package/src/function/ToolFunction.ts +26 -6
  51. package/src/index.ts +1 -0
  52. package/src/service/Service.test.ts +103 -2
  53. package/src/service/Service.ts +45 -17
  54. package/src/types/ToolError.test.ts +222 -0
  55. package/src/types/ToolError.ts +125 -0
  56. package/src/validation/ParameterValidator.test.ts +188 -158
  57. package/src/validation/ParameterValidator.ts +17 -20
@@ -0,0 +1,185 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ToolError_1 = require("./ToolError");
4
+ describe('ToolError', () => {
5
+ describe('constructor', () => {
6
+ it('should create error with message and default status 500', () => {
7
+ const error = new ToolError_1.ToolError('Something went wrong');
8
+ expect(error.message).toBe('[500] Something went wrong');
9
+ expect(error.title).toBe('Something went wrong');
10
+ expect(error.status).toBe(500);
11
+ expect(error.detail).toBeUndefined();
12
+ expect(error.name).toBe('ToolError');
13
+ });
14
+ it('should create error with custom status code', () => {
15
+ const error = new ToolError_1.ToolError('Not found', 404);
16
+ expect(error.message).toBe('[404] Not found');
17
+ expect(error.title).toBe('Not found');
18
+ expect(error.status).toBe(404);
19
+ expect(error.detail).toBeUndefined();
20
+ });
21
+ it('should create error with message, status, and detail', () => {
22
+ const error = new ToolError_1.ToolError('Validation failed', 400, 'Email format is invalid');
23
+ expect(error.message).toBe('[400] Validation failed: Email format is invalid');
24
+ expect(error.title).toBe('Validation failed');
25
+ expect(error.status).toBe(400);
26
+ expect(error.detail).toBe('Email format is invalid');
27
+ });
28
+ it('should create error with errors array in message', () => {
29
+ const errors = [
30
+ { field: 'email', message: 'Invalid email format' },
31
+ { field: 'age', message: 'Must be a positive number' }
32
+ ];
33
+ const error = new ToolError_1.ToolError('Validation failed', 400, "See 'errors' field for details.", errors);
34
+ expect(error.message).toBe('[400] Validation failed: email (Invalid email format); age (Must be a positive number)');
35
+ expect(error.title).toBe('Validation failed');
36
+ expect(error.status).toBe(400);
37
+ expect(error.detail).toBe("See 'errors' field for details.");
38
+ expect(error.errors).toEqual(errors);
39
+ });
40
+ it('should create error with single error in message', () => {
41
+ const errors = [{ field: 'username', message: 'Required field is missing' }];
42
+ const error = new ToolError_1.ToolError('Validation failed', 400, undefined, errors);
43
+ expect(error.message).toBe('[400] Validation failed: username (Required field is missing)');
44
+ expect(error.title).toBe('Validation failed');
45
+ expect(error.status).toBe(400);
46
+ expect(error.detail).toBeUndefined();
47
+ expect(error.errors).toEqual(errors);
48
+ });
49
+ it('should be an instance of Error', () => {
50
+ const error = new ToolError_1.ToolError('Test error');
51
+ expect(error).toBeInstanceOf(Error);
52
+ expect(error).toBeInstanceOf(ToolError_1.ToolError);
53
+ });
54
+ it('should have a stack trace', () => {
55
+ const error = new ToolError_1.ToolError('Test error');
56
+ expect(error.stack).toBeDefined();
57
+ expect(error.stack).toContain('ToolError');
58
+ });
59
+ });
60
+ describe('toProblemDetails', () => {
61
+ it('should convert to RFC 9457 format with all fields', () => {
62
+ const error = new ToolError_1.ToolError('Resource not found', 404, 'The task with ID 123 does not exist');
63
+ const problemDetails = error.toProblemDetails('/api/tasks/123');
64
+ expect(problemDetails).toEqual({
65
+ title: 'Resource not found',
66
+ status: 404,
67
+ detail: 'The task with ID 123 does not exist',
68
+ instance: '/api/tasks/123'
69
+ });
70
+ });
71
+ it('should omit detail field when not provided', () => {
72
+ const error = new ToolError_1.ToolError('Bad request', 400);
73
+ const problemDetails = error.toProblemDetails('/api/tasks');
74
+ expect(problemDetails).toEqual({
75
+ title: 'Bad request',
76
+ status: 400,
77
+ instance: '/api/tasks'
78
+ });
79
+ expect(problemDetails).not.toHaveProperty('detail');
80
+ });
81
+ it('should include default status 500', () => {
82
+ const error = new ToolError_1.ToolError('Internal error');
83
+ const problemDetails = error.toProblemDetails('/api/endpoint');
84
+ expect(problemDetails).toEqual({
85
+ title: 'Internal error',
86
+ status: 500,
87
+ instance: '/api/endpoint'
88
+ });
89
+ });
90
+ it('should handle different instance paths', () => {
91
+ const error = new ToolError_1.ToolError('Error', 500, 'Details');
92
+ const problemDetails1 = error.toProblemDetails('/api/v1/resource');
93
+ const problemDetails2 = error.toProblemDetails('/webhook/callback');
94
+ expect(problemDetails1.instance).toBe('/api/v1/resource');
95
+ expect(problemDetails2.instance).toBe('/webhook/callback');
96
+ });
97
+ it('should include errors array when provided', () => {
98
+ const errors = [
99
+ { field: 'email', message: 'Invalid email format' },
100
+ { field: 'age', message: 'Must be a positive number' }
101
+ ];
102
+ const error = new ToolError_1.ToolError('Validation failed', 400, "See 'errors' field for details.", errors);
103
+ const problemDetails = error.toProblemDetails('/api/users');
104
+ expect(problemDetails).toEqual({
105
+ title: 'Validation failed',
106
+ status: 400,
107
+ detail: "See 'errors' field for details.",
108
+ instance: '/api/users',
109
+ errors: [
110
+ { field: 'email', message: 'Invalid email format' },
111
+ { field: 'age', message: 'Must be a positive number' }
112
+ ]
113
+ });
114
+ });
115
+ it('should omit errors field when empty array', () => {
116
+ const error = new ToolError_1.ToolError('Error', 400, 'Detail', []);
117
+ const problemDetails = error.toProblemDetails('/api/endpoint');
118
+ expect(problemDetails).toEqual({
119
+ title: 'Error',
120
+ status: 400,
121
+ detail: 'Detail',
122
+ instance: '/api/endpoint'
123
+ });
124
+ expect(problemDetails).not.toHaveProperty('errors');
125
+ });
126
+ it('should omit errors field when not provided', () => {
127
+ const error = new ToolError_1.ToolError('Error', 400, 'Detail');
128
+ const problemDetails = error.toProblemDetails('/api/endpoint');
129
+ expect(problemDetails).toEqual({
130
+ title: 'Error',
131
+ status: 400,
132
+ detail: 'Detail',
133
+ instance: '/api/endpoint'
134
+ });
135
+ expect(problemDetails).not.toHaveProperty('errors');
136
+ });
137
+ it('should support errors without detail field', () => {
138
+ const errors = [{ field: 'name', message: 'Required' }];
139
+ const error = new ToolError_1.ToolError('Validation failed', 400, undefined, errors);
140
+ const problemDetails = error.toProblemDetails('/api/endpoint');
141
+ expect(problemDetails).toEqual({
142
+ title: 'Validation failed',
143
+ status: 400,
144
+ instance: '/api/endpoint',
145
+ errors: [{ field: 'name', message: 'Required' }]
146
+ });
147
+ expect(problemDetails).not.toHaveProperty('detail');
148
+ });
149
+ });
150
+ describe('common HTTP status codes', () => {
151
+ it('should support 400 Bad Request', () => {
152
+ const error = new ToolError_1.ToolError('Bad Request', 400);
153
+ expect(error.status).toBe(400);
154
+ });
155
+ it('should support 401 Unauthorized', () => {
156
+ const error = new ToolError_1.ToolError('Unauthorized', 401);
157
+ expect(error.status).toBe(401);
158
+ });
159
+ it('should support 403 Forbidden', () => {
160
+ const error = new ToolError_1.ToolError('Forbidden', 403);
161
+ expect(error.status).toBe(403);
162
+ });
163
+ it('should support 404 Not Found', () => {
164
+ const error = new ToolError_1.ToolError('Not Found', 404);
165
+ expect(error.status).toBe(404);
166
+ });
167
+ it('should support 409 Conflict', () => {
168
+ const error = new ToolError_1.ToolError('Conflict', 409);
169
+ expect(error.status).toBe(409);
170
+ });
171
+ it('should support 422 Unprocessable Entity', () => {
172
+ const error = new ToolError_1.ToolError('Unprocessable Entity', 422);
173
+ expect(error.status).toBe(422);
174
+ });
175
+ it('should support 500 Internal Server Error', () => {
176
+ const error = new ToolError_1.ToolError('Internal Server Error', 500);
177
+ expect(error.status).toBe(500);
178
+ });
179
+ it('should support 503 Service Unavailable', () => {
180
+ const error = new ToolError_1.ToolError('Service Unavailable', 503);
181
+ expect(error.status).toBe(503);
182
+ });
183
+ });
184
+ });
185
+ //# sourceMappingURL=ToolError.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolError.test.js","sourceRoot":"","sources":["../../src/types/ToolError.test.ts"],"names":[],"mappings":"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"}
@@ -1,29 +1,18 @@
1
1
  import { Parameter } from '../types/Models';
2
- /**
3
- * Validation error details
4
- */
5
- export interface ValidationError {
6
- field: string;
7
- message: string;
8
- }
9
- /**
10
- * Validation result
11
- */
12
- export interface ValidationResult {
13
- isValid: boolean;
14
- errors: ValidationError[];
15
- }
16
2
  /**
17
3
  * Parameter validator for tool inputs
18
4
  */
19
5
  export declare class ParameterValidator {
20
6
  /**
21
7
  * Validate parameters against their definitions
8
+ * Throws ToolError with status 400 if validation fails
9
+ *
22
10
  * @param params The actual parameters received
23
11
  * @param parameterDefinitions The expected parameter definitions
24
- * @returns Validation result with any errors found
12
+ * @param _endpoint The endpoint being validated (reserved for future use)
13
+ * @throws {ToolError} When validation fails
25
14
  */
26
- static validate(params: any, parameterDefinitions: Parameter[]): ValidationResult;
15
+ static validate(params: any, parameterDefinitions: Parameter[], _endpoint: string): void;
27
16
  /**
28
17
  * Validate a single parameter's type
29
18
  * @param paramName Parameter name
@@ -1 +1 @@
1
- {"version":3,"file":"ParameterValidator.d.ts","sourceRoot":"","sources":["../../src/validation/ParameterValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;;;;OAKG;WACW,QAAQ,CACpB,MAAM,EAAE,GAAG,EACX,oBAAoB,EAAE,SAAS,EAAE,GAChC,gBAAgB;IA+BnB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAwEpC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;CAM7B"}
1
+ {"version":3,"file":"ParameterValidator.d.ts","sourceRoot":"","sources":["../../src/validation/ParameterValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAG3D;;GAEG;AACH,qBAAa,kBAAkB;IAC7B;;;;;;;;OAQG;WACW,QAAQ,CACpB,MAAM,EAAE,GAAG,EACX,oBAAoB,EAAE,SAAS,EAAE,EACjC,SAAS,EAAE,MAAM,GAChB,IAAI;IAuCP;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,qBAAqB;IAwEpC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;CAM7B"}
@@ -2,17 +2,21 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ParameterValidator = void 0;
4
4
  const Models_1 = require("../types/Models");
5
+ const ToolError_1 = require("../types/ToolError");
5
6
  /**
6
7
  * Parameter validator for tool inputs
7
8
  */
8
9
  class ParameterValidator {
9
10
  /**
10
11
  * Validate parameters against their definitions
12
+ * Throws ToolError with status 400 if validation fails
13
+ *
11
14
  * @param params The actual parameters received
12
15
  * @param parameterDefinitions The expected parameter definitions
13
- * @returns Validation result with any errors found
16
+ * @param _endpoint The endpoint being validated (reserved for future use)
17
+ * @throws {ToolError} When validation fails
14
18
  */
15
- static validate(params, parameterDefinitions) {
19
+ static validate(params, parameterDefinitions, _endpoint) {
16
20
  const errors = [];
17
21
  // Validate each defined parameter
18
22
  for (const paramDef of parameterDefinitions) {
@@ -35,7 +39,10 @@ class ParameterValidator {
35
39
  errors.push(typeError);
36
40
  }
37
41
  }
38
- return { isValid: errors.length === 0, errors };
42
+ // Throw ToolError if validation failed
43
+ if (errors.length > 0) {
44
+ throw new ToolError_1.ToolError('One or more validation errors occurred.', 400, "See 'errors' field for details.", errors);
45
+ }
39
46
  }
40
47
  /**
41
48
  * Validate a single parameter's type
@@ -1 +1 @@
1
- {"version":3,"file":"ParameterValidator.js","sourceRoot":"","sources":["../../src/validation/ParameterValidator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ParameterValidator.js","sourceRoot":"","sources":["../../src/validation/ParameterValidator.ts"],"names":[],"mappings":"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"}