@optimizely-opal/opal-tool-ocp-sdk 0.0.0-dev.5 → 0.0.0-devmg.11
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 +106 -45
- package/dist/auth/TokenVerifier.d.ts +31 -0
- package/dist/auth/TokenVerifier.d.ts.map +1 -0
- package/dist/auth/TokenVerifier.js +127 -0
- package/dist/auth/TokenVerifier.js.map +1 -0
- package/dist/auth/TokenVerifier.test.d.ts +2 -0
- package/dist/auth/TokenVerifier.test.d.ts.map +1 -0
- package/dist/auth/TokenVerifier.test.js +114 -0
- package/dist/auth/TokenVerifier.test.js.map +1 -0
- package/dist/decorator/Decorator.test.js.map +1 -1
- package/dist/function/ToolFunction.d.ts +11 -7
- package/dist/function/ToolFunction.d.ts.map +1 -1
- package/dist/function/ToolFunction.js +53 -10
- package/dist/function/ToolFunction.js.map +1 -1
- package/dist/function/ToolFunction.test.js +225 -122
- 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/service/Service.d.ts +14 -13
- package/dist/service/Service.d.ts.map +1 -1
- package/dist/service/Service.js +22 -16
- package/dist/service/Service.js.map +1 -1
- package/dist/service/Service.test.js +53 -36
- package/dist/service/Service.test.js.map +1 -1
- package/dist/types/Models.d.ts +5 -5
- package/dist/types/Models.d.ts.map +1 -1
- package/dist/types/Models.js +9 -9
- package/dist/types/Models.js.map +1 -1
- package/package.json +10 -3
- package/src/auth/TokenVerifier.test.ts +152 -0
- package/src/auth/TokenVerifier.ts +145 -0
- package/src/decorator/Decorator.test.ts +4 -4
- package/src/function/ToolFunction.test.ts +251 -128
- package/src/function/ToolFunction.ts +60 -11
- package/src/index.ts +1 -0
- package/src/service/Service.test.ts +55 -37
- package/src/service/Service.ts +29 -22
- package/src/types/Models.ts +4 -4
|
@@ -3,35 +3,78 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ToolFunction = void 0;
|
|
4
4
|
const app_sdk_1 = require("@zaiusinc/app-sdk");
|
|
5
5
|
const Service_1 = require("../service/Service");
|
|
6
|
+
const TokenVerifier_1 = require("../auth/TokenVerifier");
|
|
6
7
|
/**
|
|
7
8
|
* Abstract base class for tool-based function execution
|
|
8
9
|
* Provides a standard interface for processing requests through registered tools
|
|
9
10
|
*/
|
|
10
11
|
class ToolFunction extends app_sdk_1.Function {
|
|
12
|
+
/**
|
|
13
|
+
* Override this method to implement any required credentials and/or other configuration
|
|
14
|
+
* exist and are valid. Reasonable caching should be utilized to prevent excessive requests to external resources.
|
|
15
|
+
* @async
|
|
16
|
+
* @returns true if the opal function is ready to use
|
|
17
|
+
*/
|
|
18
|
+
ready() {
|
|
19
|
+
return Promise.resolve(true);
|
|
20
|
+
}
|
|
11
21
|
/**
|
|
12
22
|
* Process the incoming request using the tools service
|
|
13
23
|
*
|
|
14
24
|
* @returns Response as the HTTP response
|
|
15
25
|
*/
|
|
16
26
|
async perform() {
|
|
17
|
-
|
|
18
|
-
if (
|
|
27
|
+
(0, app_sdk_1.amendLogContext)({ opalThreadId: this.request.headers.get('x-opal-thread-id') || '' });
|
|
28
|
+
if (!(await this.authorizeRequest())) {
|
|
19
29
|
return new app_sdk_1.Response(403, { error: 'Forbidden' });
|
|
20
30
|
}
|
|
31
|
+
if (this.request.path === '/ready') {
|
|
32
|
+
const isReady = await this.ready();
|
|
33
|
+
return new app_sdk_1.Response(200, { ready: isReady });
|
|
34
|
+
}
|
|
21
35
|
// Pass 'this' as context so decorated methods can use the existing instance
|
|
22
36
|
return Service_1.toolsService.processRequest(this.request, this);
|
|
23
37
|
}
|
|
24
38
|
/**
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* This method provides a default implementation that accepts all tokens.
|
|
28
|
-
* Subclasses can override this method to implement custom bearer token validation logic.
|
|
39
|
+
* Authenticate the incoming request by validating the OptiID token and organization ID
|
|
29
40
|
*
|
|
30
|
-
* @
|
|
31
|
-
* @returns true if the token is valid and the request should proceed, false to return 403 Forbidden
|
|
41
|
+
* @throws true if authentication succeeds
|
|
32
42
|
*/
|
|
33
|
-
|
|
34
|
-
|
|
43
|
+
async authorizeRequest() {
|
|
44
|
+
app_sdk_1.logger.info('Authorizing request:', this.request.bodyJSON);
|
|
45
|
+
if (this.request.path === '/discovery' || this.request.path === '/ready') {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
const authData = this.request.bodyJSON?.auth;
|
|
49
|
+
const accessToken = authData?.credentials?.access_token;
|
|
50
|
+
if (!accessToken || authData?.provider?.toLowerCase() !== 'optiid') {
|
|
51
|
+
app_sdk_1.logger.error('OptiID token is required but not provided');
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
const customerId = authData.credentials?.customer_id;
|
|
55
|
+
if (!customerId) {
|
|
56
|
+
app_sdk_1.logger.error('Organisation ID is required but not provided');
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
const appOrganisationId = (0, app_sdk_1.getAppContext)().account?.organizationId;
|
|
60
|
+
if (customerId !== appOrganisationId) {
|
|
61
|
+
app_sdk_1.logger.error(`Invalid organisation ID: expected ${appOrganisationId}, received ${customerId}`);
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
return await this.validateAccessToken(accessToken);
|
|
65
|
+
}
|
|
66
|
+
async validateAccessToken(accessToken) {
|
|
67
|
+
try {
|
|
68
|
+
if (!accessToken) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const tokenVerifier = await (0, TokenVerifier_1.getTokenVerifier)();
|
|
72
|
+
return await tokenVerifier.verify(accessToken);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
app_sdk_1.logger.error('OptiID token validation failed:', error);
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
35
78
|
}
|
|
36
79
|
}
|
|
37
80
|
exports.ToolFunction = ToolFunction;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolFunction.js","sourceRoot":"","sources":["../../src/function/ToolFunction.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"file":"ToolFunction.js","sourceRoot":"","sources":["../../src/function/ToolFunction.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,19 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const ToolFunction_1 = require("./ToolFunction");
|
|
4
4
|
const Service_1 = require("../service/Service");
|
|
5
5
|
const app_sdk_1 = require("@zaiusinc/app-sdk");
|
|
6
|
-
|
|
6
|
+
const TokenVerifier_1 = require("../auth/TokenVerifier");
|
|
7
|
+
// Mock the dependencies
|
|
7
8
|
jest.mock('../service/Service', () => ({
|
|
8
9
|
toolsService: {
|
|
9
10
|
processRequest: jest.fn(),
|
|
10
|
-
extractBearerToken: jest.fn(),
|
|
11
11
|
},
|
|
12
12
|
}));
|
|
13
|
-
|
|
13
|
+
jest.mock('../auth/TokenVerifier', () => ({
|
|
14
|
+
getTokenVerifier: jest.fn(),
|
|
15
|
+
}));
|
|
14
16
|
jest.mock('@zaiusinc/app-sdk', () => ({
|
|
15
17
|
Function: class {
|
|
16
18
|
request;
|
|
17
19
|
constructor(_name) {
|
|
18
|
-
// Mock constructor that accepts optional name parameter
|
|
19
20
|
this.request = {};
|
|
20
21
|
}
|
|
21
22
|
},
|
|
@@ -26,26 +27,32 @@ jest.mock('@zaiusinc/app-sdk', () => ({
|
|
|
26
27
|
bodyJSON: data,
|
|
27
28
|
bodyAsU8Array: new Uint8Array()
|
|
28
29
|
})),
|
|
30
|
+
amendLogContext: jest.fn(),
|
|
31
|
+
getAppContext: jest.fn(),
|
|
32
|
+
logger: {
|
|
33
|
+
info: jest.fn(),
|
|
34
|
+
error: jest.fn(),
|
|
35
|
+
warn: jest.fn(),
|
|
36
|
+
debug: jest.fn(),
|
|
37
|
+
},
|
|
29
38
|
}));
|
|
30
39
|
// Create a concrete implementation for testing
|
|
31
40
|
class TestToolFunction extends ToolFunction_1.ToolFunction {
|
|
32
|
-
|
|
41
|
+
mockReady;
|
|
33
42
|
constructor(request) {
|
|
34
|
-
super(request || {});
|
|
35
|
-
// Set the request directly without defaulting to empty object
|
|
43
|
+
super(request || {});
|
|
36
44
|
this.request = request;
|
|
37
|
-
this.
|
|
45
|
+
this.mockReady = jest.fn().mockResolvedValue(true);
|
|
38
46
|
}
|
|
39
|
-
// Override the
|
|
40
|
-
|
|
41
|
-
return this.
|
|
47
|
+
// Override the ready method with mock implementation for testing
|
|
48
|
+
ready() {
|
|
49
|
+
return this.mockReady();
|
|
42
50
|
}
|
|
43
|
-
// Expose request and validation mock for testing
|
|
44
51
|
getRequest() {
|
|
45
52
|
return this.request;
|
|
46
53
|
}
|
|
47
|
-
|
|
48
|
-
return this.
|
|
54
|
+
getMockReady() {
|
|
55
|
+
return this.mockReady;
|
|
49
56
|
}
|
|
50
57
|
}
|
|
51
58
|
describe('ToolFunction', () => {
|
|
@@ -53,129 +60,120 @@ describe('ToolFunction', () => {
|
|
|
53
60
|
let mockResponse;
|
|
54
61
|
let toolFunction;
|
|
55
62
|
let mockProcessRequest;
|
|
56
|
-
let
|
|
63
|
+
let mockGetTokenVerifier;
|
|
64
|
+
let mockGetAppContext;
|
|
65
|
+
let mockTokenVerifier;
|
|
57
66
|
beforeEach(() => {
|
|
58
67
|
jest.clearAllMocks();
|
|
59
|
-
// Create mock
|
|
68
|
+
// Create mock token verifier
|
|
69
|
+
mockTokenVerifier = {
|
|
70
|
+
verify: jest.fn(),
|
|
71
|
+
};
|
|
72
|
+
// Setup the mocks
|
|
73
|
+
mockProcessRequest = jest.mocked(Service_1.toolsService.processRequest);
|
|
74
|
+
mockGetTokenVerifier = jest.mocked(TokenVerifier_1.getTokenVerifier);
|
|
75
|
+
mockGetAppContext = jest.mocked(app_sdk_1.getAppContext);
|
|
76
|
+
mockGetTokenVerifier.mockResolvedValue(mockTokenVerifier);
|
|
77
|
+
mockGetAppContext.mockReturnValue({
|
|
78
|
+
account: {
|
|
79
|
+
organizationId: 'app-org-123'
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
// Create mock request with bodyJSON structure
|
|
60
83
|
mockRequest = {
|
|
61
84
|
headers: new Map(),
|
|
62
85
|
method: 'POST',
|
|
63
|
-
path: '/test'
|
|
86
|
+
path: '/test',
|
|
87
|
+
bodyJSON: {
|
|
88
|
+
parameters: {
|
|
89
|
+
task_id: 'task-123',
|
|
90
|
+
content_id: 'content-456'
|
|
91
|
+
},
|
|
92
|
+
auth: {
|
|
93
|
+
provider: 'OptiID',
|
|
94
|
+
credentials: {
|
|
95
|
+
token_type: 'Bearer',
|
|
96
|
+
access_token: 'valid-access-token',
|
|
97
|
+
org_sso_id: 'org-sso-123',
|
|
98
|
+
user_id: 'user-456',
|
|
99
|
+
instance_id: 'instance-789',
|
|
100
|
+
customer_id: 'app-org-123',
|
|
101
|
+
product_sku: 'OPAL'
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
environment: {
|
|
105
|
+
execution_mode: 'headless'
|
|
106
|
+
}
|
|
107
|
+
}
|
|
64
108
|
};
|
|
65
109
|
mockResponse = {};
|
|
66
|
-
// Setup the mocks
|
|
67
|
-
mockProcessRequest = jest.mocked(Service_1.toolsService.processRequest);
|
|
68
|
-
mockExtractBearerToken = jest.mocked(Service_1.toolsService.extractBearerToken);
|
|
69
|
-
// Create test instance
|
|
70
110
|
toolFunction = new TestToolFunction(mockRequest);
|
|
71
111
|
});
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
// Assert
|
|
95
|
-
expect(mockExtractBearerToken).toHaveBeenCalledWith(mockRequest.headers);
|
|
96
|
-
expect(toolFunction.getMockValidateBearerToken()).toHaveBeenCalledWith(bearerToken);
|
|
97
|
-
expect(mockProcessRequest).not.toHaveBeenCalled();
|
|
98
|
-
expect(result).toEqual(new app_sdk_1.Response(403, { error: 'Forbidden' }));
|
|
99
|
-
});
|
|
100
|
-
it('should handle complex bearer token validation scenarios', async () => {
|
|
101
|
-
// Arrange - simulate a token that should be valid based on some complex logic
|
|
102
|
-
const complexToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9l' +
|
|
103
|
-
'IiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
|
|
104
|
-
mockExtractBearerToken.mockReturnValue(complexToken);
|
|
105
|
-
toolFunction.getMockValidateBearerToken().mockReturnValue(true);
|
|
106
|
-
mockProcessRequest.mockResolvedValue(mockResponse);
|
|
107
|
-
// Act
|
|
108
|
-
const result = await toolFunction.perform();
|
|
109
|
-
// Assert
|
|
110
|
-
expect(mockExtractBearerToken).toHaveBeenCalledWith(mockRequest.headers);
|
|
111
|
-
expect(toolFunction.getMockValidateBearerToken()).toHaveBeenCalledWith(complexToken);
|
|
112
|
-
expect(mockProcessRequest).toHaveBeenCalledWith(mockRequest, toolFunction);
|
|
113
|
-
expect(result).toBe(mockResponse);
|
|
112
|
+
// Helper function to create a ready request with valid auth
|
|
113
|
+
const createReadyRequestWithAuth = () => ({
|
|
114
|
+
headers: new Map(),
|
|
115
|
+
method: 'GET',
|
|
116
|
+
path: '/ready',
|
|
117
|
+
bodyJSON: {
|
|
118
|
+
auth: {
|
|
119
|
+
provider: 'OptiID',
|
|
120
|
+
credentials: {
|
|
121
|
+
access_token: 'valid-token',
|
|
122
|
+
customer_id: 'app-org-123'
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
// Helper function to setup authorization mocks to pass
|
|
128
|
+
const setupAuthMocks = () => {
|
|
129
|
+
mockTokenVerifier.verify.mockResolvedValue(true);
|
|
130
|
+
mockGetAppContext.mockReturnValue({
|
|
131
|
+
account: {
|
|
132
|
+
organizationId: 'app-org-123'
|
|
133
|
+
}
|
|
114
134
|
});
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
toolFunction.getMockValidateBearerToken().mockImplementation(() => {
|
|
120
|
-
throw new Error('Token validation error');
|
|
121
|
-
});
|
|
122
|
-
// Act & Assert
|
|
123
|
-
await expect(toolFunction.perform()).rejects.toThrow('Token validation error');
|
|
124
|
-
expect(mockExtractBearerToken).toHaveBeenCalledWith(mockRequest.headers);
|
|
125
|
-
expect(toolFunction.getMockValidateBearerToken()).toHaveBeenCalledWith(bearerToken);
|
|
126
|
-
expect(mockProcessRequest).not.toHaveBeenCalled();
|
|
135
|
+
};
|
|
136
|
+
describe('/ready endpoint', () => {
|
|
137
|
+
beforeEach(() => {
|
|
138
|
+
setupAuthMocks();
|
|
127
139
|
});
|
|
128
|
-
it('should
|
|
140
|
+
it('should return ready: true when ready method returns true', async () => {
|
|
129
141
|
// Arrange
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
toolFunction.
|
|
133
|
-
mockProcessRequest.mockResolvedValue(mockResponse);
|
|
142
|
+
const readyRequest = createReadyRequestWithAuth();
|
|
143
|
+
toolFunction = new TestToolFunction(readyRequest);
|
|
144
|
+
toolFunction.getMockReady().mockResolvedValue(true);
|
|
134
145
|
// Act
|
|
135
|
-
await toolFunction.perform();
|
|
136
|
-
// Assert
|
|
137
|
-
expect(toolFunction.getMockValidateBearerToken()).toHaveBeenCalledTimes(1);
|
|
138
|
-
expect(toolFunction.getMockValidateBearerToken()).toHaveBeenCalledWith(bearerToken);
|
|
139
|
-
});
|
|
140
|
-
it('should extract bearer token only once per request', async () => {
|
|
141
|
-
// Arrange
|
|
142
|
-
const bearerToken = 'test-token';
|
|
143
|
-
mockExtractBearerToken.mockReturnValue(bearerToken);
|
|
144
|
-
toolFunction.getMockValidateBearerToken().mockReturnValue(true);
|
|
145
|
-
mockProcessRequest.mockResolvedValue(mockResponse);
|
|
146
|
-
// Act
|
|
147
|
-
await toolFunction.perform();
|
|
146
|
+
const result = await toolFunction.perform();
|
|
148
147
|
// Assert
|
|
149
|
-
expect(
|
|
150
|
-
expect(
|
|
148
|
+
expect(toolFunction.getMockReady()).toHaveBeenCalledTimes(1);
|
|
149
|
+
expect(result).toEqual(new app_sdk_1.Response(200, { ready: true }));
|
|
150
|
+
expect(mockProcessRequest).not.toHaveBeenCalled(); // Should not call service
|
|
151
151
|
});
|
|
152
|
-
it('should
|
|
152
|
+
it('should return ready: false when ready method returns false', async () => {
|
|
153
153
|
// Arrange
|
|
154
|
-
|
|
155
|
-
|
|
154
|
+
const readyRequest = createReadyRequestWithAuth();
|
|
155
|
+
toolFunction = new TestToolFunction(readyRequest);
|
|
156
|
+
toolFunction.getMockReady().mockResolvedValue(false);
|
|
156
157
|
// Act
|
|
157
158
|
const result = await toolFunction.perform();
|
|
158
159
|
// Assert
|
|
159
|
-
expect(
|
|
160
|
-
expect(
|
|
161
|
-
expect(mockProcessRequest).
|
|
162
|
-
expect(result).toBe(mockResponse);
|
|
160
|
+
expect(toolFunction.getMockReady()).toHaveBeenCalledTimes(1);
|
|
161
|
+
expect(result).toEqual(new app_sdk_1.Response(200, { ready: false }));
|
|
162
|
+
expect(mockProcessRequest).not.toHaveBeenCalled(); // Should not call service
|
|
163
163
|
});
|
|
164
|
-
it('should
|
|
164
|
+
it('should handle ready method throwing an error', async () => {
|
|
165
165
|
// Arrange
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
expect(
|
|
172
|
-
expect(
|
|
173
|
-
expect(mockProcessRequest).toHaveBeenCalledWith(mockRequest, toolFunction);
|
|
174
|
-
expect(result).toBe(mockResponse);
|
|
166
|
+
const readyRequest = createReadyRequestWithAuth();
|
|
167
|
+
toolFunction = new TestToolFunction(readyRequest);
|
|
168
|
+
toolFunction.getMockReady().mockRejectedValue(new Error('Ready check failed'));
|
|
169
|
+
// Act & Assert
|
|
170
|
+
await expect(toolFunction.perform()).rejects.toThrow('Ready check failed');
|
|
171
|
+
expect(toolFunction.getMockReady()).toHaveBeenCalledTimes(1);
|
|
172
|
+
expect(mockProcessRequest).not.toHaveBeenCalled(); // Should not call service
|
|
175
173
|
});
|
|
176
|
-
it('should use default
|
|
177
|
-
// Create a class that doesn't override
|
|
178
|
-
class
|
|
174
|
+
it('should use default ready implementation when not overridden', async () => {
|
|
175
|
+
// Create a class that doesn't override ready method
|
|
176
|
+
class DefaultReadyToolFunction extends ToolFunction_1.ToolFunction {
|
|
179
177
|
constructor(request) {
|
|
180
178
|
super(request || {});
|
|
181
179
|
this.request = request;
|
|
@@ -185,16 +183,121 @@ describe('ToolFunction', () => {
|
|
|
185
183
|
}
|
|
186
184
|
}
|
|
187
185
|
// Arrange
|
|
188
|
-
const
|
|
189
|
-
const
|
|
190
|
-
mockExtractBearerToken.mockReturnValue(bearerToken);
|
|
191
|
-
mockProcessRequest.mockResolvedValue(mockResponse);
|
|
186
|
+
const readyRequest = createReadyRequestWithAuth();
|
|
187
|
+
const defaultToolFunction = new DefaultReadyToolFunction(readyRequest);
|
|
192
188
|
// Act
|
|
193
189
|
const result = await defaultToolFunction.perform();
|
|
194
|
-
// Assert - Default implementation should return true
|
|
195
|
-
expect(
|
|
196
|
-
expect(mockProcessRequest).
|
|
190
|
+
// Assert - Default implementation should return true
|
|
191
|
+
expect(result).toEqual(new app_sdk_1.Response(200, { ready: true }));
|
|
192
|
+
expect(mockProcessRequest).not.toHaveBeenCalled(); // Should not call service
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
describe('perform', () => {
|
|
196
|
+
it('should execute successfully with valid token and matching organization', async () => {
|
|
197
|
+
// Setup mock token verifier to return true for valid token
|
|
198
|
+
mockTokenVerifier.verify.mockResolvedValue(true);
|
|
199
|
+
mockProcessRequest.mockResolvedValue(mockResponse);
|
|
200
|
+
const result = await toolFunction.perform();
|
|
197
201
|
expect(result).toBe(mockResponse);
|
|
202
|
+
expect(mockGetTokenVerifier).toHaveBeenCalled();
|
|
203
|
+
expect(mockTokenVerifier.verify).toHaveBeenCalledWith('valid-access-token');
|
|
204
|
+
expect(mockGetAppContext).toHaveBeenCalled();
|
|
205
|
+
expect(mockProcessRequest).toHaveBeenCalledWith(mockRequest, toolFunction);
|
|
206
|
+
});
|
|
207
|
+
it('should return 403 response with invalid token', async () => {
|
|
208
|
+
// Setup mock token verifier to return false
|
|
209
|
+
mockTokenVerifier.verify.mockResolvedValue(false);
|
|
210
|
+
const result = await toolFunction.perform();
|
|
211
|
+
expect(result).toEqual(new app_sdk_1.Response(403, { error: 'Forbidden' }));
|
|
212
|
+
expect(mockGetTokenVerifier).toHaveBeenCalled();
|
|
213
|
+
expect(mockTokenVerifier.verify).toHaveBeenCalledWith('valid-access-token');
|
|
214
|
+
expect(mockProcessRequest).not.toHaveBeenCalled();
|
|
215
|
+
});
|
|
216
|
+
it('should return 403 response when organization ID does not match', async () => {
|
|
217
|
+
// Update mock request with different customer_id
|
|
218
|
+
const requestWithDifferentOrgId = {
|
|
219
|
+
...mockRequest,
|
|
220
|
+
bodyJSON: {
|
|
221
|
+
...mockRequest.bodyJSON,
|
|
222
|
+
auth: {
|
|
223
|
+
...mockRequest.bodyJSON.auth,
|
|
224
|
+
credentials: {
|
|
225
|
+
...mockRequest.bodyJSON.auth.credentials,
|
|
226
|
+
customer_id: 'different-org-123'
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
const toolFunctionWithDifferentOrgId = new TestToolFunction(requestWithDifferentOrgId);
|
|
232
|
+
const result = await toolFunctionWithDifferentOrgId.perform();
|
|
233
|
+
expect(result).toEqual(new app_sdk_1.Response(403, { error: 'Forbidden' }));
|
|
234
|
+
expect(mockGetAppContext).toHaveBeenCalled();
|
|
235
|
+
expect(mockProcessRequest).not.toHaveBeenCalled();
|
|
236
|
+
});
|
|
237
|
+
it('should return 403 response when access token is missing', async () => {
|
|
238
|
+
// Create request without access token
|
|
239
|
+
const requestWithoutToken = {
|
|
240
|
+
...mockRequest,
|
|
241
|
+
bodyJSON: {
|
|
242
|
+
...mockRequest.bodyJSON,
|
|
243
|
+
auth: {
|
|
244
|
+
...mockRequest.bodyJSON.auth,
|
|
245
|
+
credentials: {
|
|
246
|
+
...mockRequest.bodyJSON.auth.credentials,
|
|
247
|
+
access_token: undefined
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
const toolFunctionWithoutToken = new TestToolFunction(requestWithoutToken);
|
|
253
|
+
const result = await toolFunctionWithoutToken.perform();
|
|
254
|
+
expect(result).toEqual(new app_sdk_1.Response(403, { error: 'Forbidden' }));
|
|
255
|
+
expect(mockGetTokenVerifier).not.toHaveBeenCalled();
|
|
256
|
+
expect(mockProcessRequest).not.toHaveBeenCalled();
|
|
257
|
+
});
|
|
258
|
+
it('should return 403 response when organisation id is missing', async () => {
|
|
259
|
+
// Create request without customer_id
|
|
260
|
+
const requestWithoutCustomerId = {
|
|
261
|
+
...mockRequest,
|
|
262
|
+
bodyJSON: {
|
|
263
|
+
...mockRequest.bodyJSON,
|
|
264
|
+
auth: {
|
|
265
|
+
...mockRequest.bodyJSON.auth,
|
|
266
|
+
credentials: {
|
|
267
|
+
...mockRequest.bodyJSON.auth.credentials,
|
|
268
|
+
customer_id: undefined
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
const toolFunctionWithoutCustomerId = new TestToolFunction(requestWithoutCustomerId);
|
|
274
|
+
const result = await toolFunctionWithoutCustomerId.perform();
|
|
275
|
+
expect(result).toEqual(new app_sdk_1.Response(403, { error: 'Forbidden' }));
|
|
276
|
+
expect(mockGetTokenVerifier).not.toHaveBeenCalled();
|
|
277
|
+
expect(mockProcessRequest).not.toHaveBeenCalled();
|
|
278
|
+
});
|
|
279
|
+
it('should return 403 response when auth structure is missing', async () => {
|
|
280
|
+
// Create request without auth structure
|
|
281
|
+
const requestWithoutAuth = {
|
|
282
|
+
...mockRequest,
|
|
283
|
+
bodyJSON: {
|
|
284
|
+
parameters: mockRequest.bodyJSON.parameters,
|
|
285
|
+
environment: mockRequest.bodyJSON.environment
|
|
286
|
+
}
|
|
287
|
+
};
|
|
288
|
+
const toolFunctionWithoutAuth = new TestToolFunction(requestWithoutAuth);
|
|
289
|
+
const result = await toolFunctionWithoutAuth.perform();
|
|
290
|
+
expect(result).toEqual(new app_sdk_1.Response(403, { error: 'Forbidden' }));
|
|
291
|
+
expect(mockGetTokenVerifier).not.toHaveBeenCalled();
|
|
292
|
+
expect(mockProcessRequest).not.toHaveBeenCalled();
|
|
293
|
+
});
|
|
294
|
+
it('should return 403 response when token verifier initialization fails', async () => {
|
|
295
|
+
// Setup mock to fail during token verifier initialization
|
|
296
|
+
mockGetTokenVerifier.mockRejectedValue(new Error('Failed to initialize token verifier'));
|
|
297
|
+
const result = await toolFunction.perform();
|
|
298
|
+
expect(result).toEqual(new app_sdk_1.Response(403, { error: 'Forbidden' }));
|
|
299
|
+
expect(mockGetTokenVerifier).toHaveBeenCalled();
|
|
300
|
+
expect(mockProcessRequest).not.toHaveBeenCalled();
|
|
198
301
|
});
|
|
199
302
|
});
|
|
200
303
|
describe('inheritance', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolFunction.test.js","sourceRoot":"","sources":["../../src/function/ToolFunction.test.ts"],"names":[],"mappings":";;AAAA,iDAA8C;AAC9C,gDAAkD;AAClD,+
|
|
1
|
+
{"version":3,"file":"ToolFunction.test.js","sourceRoot":"","sources":["../../src/function/ToolFunction.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -18,6 +18,7 @@ exports.InteractionResult = exports.Interaction = exports.Tool = void 0;
|
|
|
18
18
|
__exportStar(require("./function/ToolFunction"), exports);
|
|
19
19
|
__exportStar(require("./types/Models"), exports);
|
|
20
20
|
__exportStar(require("./decorator/Decorator"), exports);
|
|
21
|
+
__exportStar(require("./auth/TokenVerifier"), exports);
|
|
21
22
|
var Service_1 = require("./service/Service");
|
|
22
23
|
Object.defineProperty(exports, "Tool", { enumerable: true, get: function () { return Service_1.Tool; } });
|
|
23
24
|
Object.defineProperty(exports, "Interaction", { enumerable: true, get: function () { return Service_1.Interaction; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,iDAA+B;AAC/B,wDAAsC;AACtC,6CAAyE;AAAhE,+FAAA,IAAI,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,4GAAA,iBAAiB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0DAAwC;AACxC,iDAA+B;AAC/B,wDAAsC;AACtC,uDAAqC;AACrC,6CAAyE;AAAhE,+FAAA,IAAI,OAAA;AAAE,sGAAA,WAAW,OAAA;AAAE,4GAAA,iBAAiB,OAAA"}
|