@scalekit-sdk/node 2.2.0-beta.1 → 2.2.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 +5 -5
- package/{reference.md → REFERENCE.md} +530 -748
- package/lib/auth.d.ts +9 -6
- package/lib/auth.js +4 -20
- package/lib/auth.js.map +1 -1
- package/lib/connect.d.ts +3 -3
- package/lib/connect.js +1 -2
- package/lib/connect.js.map +1 -1
- package/lib/connection.d.ts +2 -2
- package/lib/connection.js +4 -4
- package/lib/connection.js.map +1 -1
- package/lib/core.js +2 -2
- package/lib/core.js.map +1 -1
- package/lib/directory.d.ts +2 -2
- package/lib/directory.js +7 -7
- package/lib/directory.js.map +1 -1
- package/lib/domain.d.ts +6 -5
- package/lib/domain.js +4 -5
- package/lib/domain.js.map +1 -1
- package/lib/errors/base-exception.d.ts +1 -1
- package/lib/errors/base-exception.js +1 -1
- package/lib/errors/base-exception.js.map +1 -1
- package/lib/organization.d.ts +10 -9
- package/lib/organization.js +11 -9
- package/lib/organization.js.map +1 -1
- package/lib/passwordless.d.ts +2 -2
- package/lib/passwordless.js +8 -7
- package/lib/passwordless.js.map +1 -1
- package/lib/permission.d.ts +6 -5
- package/lib/permission.js +10 -11
- package/lib/permission.js.map +1 -1
- package/lib/pkg/grpc/buf/validate/validate_pb.d.ts +7 -0
- package/lib/pkg/grpc/buf/validate/validate_pb.js +25 -0
- package/lib/pkg/grpc/buf/validate/validate_pb.js.map +1 -0
- package/lib/pkg/grpc/google/api/annotations_pb.d.ts +7 -0
- package/lib/pkg/grpc/google/api/annotations_pb.js +25 -0
- package/lib/pkg/grpc/google/api/annotations_pb.js.map +1 -0
- package/lib/pkg/grpc/google/api/field_behavior_pb.d.ts +7 -0
- package/lib/pkg/grpc/google/api/field_behavior_pb.js +25 -0
- package/lib/pkg/grpc/google/api/field_behavior_pb.js.map +1 -0
- package/lib/pkg/grpc/google/api/visibility_pb.d.ts +7 -0
- package/lib/pkg/grpc/google/api/visibility_pb.js +25 -0
- package/lib/pkg/grpc/google/api/visibility_pb.js.map +1 -0
- package/lib/pkg/grpc/protoc-gen-openapiv2/options/annotations_pb.d.ts +7 -0
- package/lib/pkg/grpc/protoc-gen-openapiv2/options/annotations_pb.js +25 -0
- package/lib/pkg/grpc/protoc-gen-openapiv2/options/annotations_pb.js.map +1 -0
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.d.ts +48 -42
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.js +27 -263
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/auth/auth_pb.d.ts +371 -325
- package/lib/pkg/grpc/scalekit/v1/auth/auth_pb.js +132 -835
- package/lib/pkg/grpc/scalekit/v1/auth/auth_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/auth/passwordless_pb.d.ts +113 -87
- package/lib/pkg/grpc/scalekit/v1/auth/passwordless_pb.js +45 -201
- package/lib/pkg/grpc/scalekit/v1/auth/passwordless_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/auth/webauthn_pb.d.ts +262 -265
- package/lib/pkg/grpc/scalekit/v1/auth/webauthn_pb.js +92 -938
- package/lib/pkg/grpc/scalekit/v1/auth/webauthn_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/commons/commons_pb.d.ts +162 -157
- package/lib/pkg/grpc/scalekit/v1/commons/commons_pb.js +42 -313
- package/lib/pkg/grpc/scalekit/v1/commons/commons_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/connections/connections_pb.d.ts +1488 -1459
- package/lib/pkg/grpc/scalekit/v1/connections/connections_pb.js +353 -2362
- package/lib/pkg/grpc/scalekit/v1/connections/connections_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/directories/directories_pb.d.ts +520 -483
- package/lib/pkg/grpc/scalekit/v1/directories/directories_pb.js +224 -1555
- package/lib/pkg/grpc/scalekit/v1/directories/directories_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/domains/domains_pb.d.ts +219 -191
- package/lib/pkg/grpc/scalekit/v1/domains/domains_pb.js +96 -553
- package/lib/pkg/grpc/scalekit/v1/domains/domains_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/errdetails/errdetails_pb.d.ts +76 -102
- package/lib/pkg/grpc/scalekit/v1/errdetails/errdetails_pb.js +37 -393
- package/lib/pkg/grpc/scalekit/v1/errdetails/errdetails_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/options/options_pb.d.ts +36 -26
- package/lib/pkg/grpc/scalekit/v1/options/options_pb.js +20 -69
- package/lib/pkg/grpc/scalekit/v1/options/options_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_pb.d.ts +447 -400
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_pb.js +163 -1238
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/roles/roles_pb.d.ts +622 -556
- package/lib/pkg/grpc/scalekit/v1/roles/roles_pb.js +201 -1718
- package/lib/pkg/grpc/scalekit/v1/roles/roles_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_pb.d.ts +135 -132
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_pb.js +55 -518
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_pb.js.map +1 -1
- package/lib/pkg/grpc/scalekit/v1/users/users_pb.d.ts +445 -413
- package/lib/pkg/grpc/scalekit/v1/users/users_pb.js +142 -1490
- package/lib/pkg/grpc/scalekit/v1/users/users_pb.js.map +1 -1
- package/lib/role.d.ts +8 -7
- package/lib/role.js +14 -14
- package/lib/role.js.map +1 -1
- package/lib/scalekit.d.ts +0 -4
- package/lib/scalekit.js +0 -4
- package/lib/scalekit.js.map +1 -1
- package/lib/session.js +15 -24
- package/lib/session.js.map +1 -1
- package/lib/user.d.ts +6 -5
- package/lib/user.js +17 -20
- package/lib/user.js.map +1 -1
- package/lib/webauthn.js +6 -5
- package/lib/webauthn.js.map +1 -1
- package/package.json +12 -10
- package/.github/dependabot.yml +0 -10
- package/.nvmrc +0 -1
- package/buf.gen.yaml +0 -24
- package/jest.config.js +0 -15
- package/lib/connected-accounts.d.ts +0 -119
- package/lib/connected-accounts.js +0 -241
- package/lib/connected-accounts.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.d.ts +0 -19
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.js +0 -27
- package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/auth/auth_connect.d.ts +0 -118
- package/lib/pkg/grpc/scalekit/v1/auth/auth_connect.js +0 -126
- package/lib/pkg/grpc/scalekit/v1/auth/auth_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/auth/passwordless_connect.d.ts +0 -37
- package/lib/pkg/grpc/scalekit/v1/auth/passwordless_connect.js +0 -45
- package/lib/pkg/grpc/scalekit/v1/auth/passwordless_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/auth/webauthn_connect.d.ts +0 -82
- package/lib/pkg/grpc/scalekit/v1/auth/webauthn_connect.js +0 -90
- package/lib/pkg/grpc/scalekit/v1/auth/webauthn_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_connect.d.ts +0 -87
- package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_connect.js +0 -95
- package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_pb.d.ts +0 -718
- package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_pb.js +0 -893
- package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_pb.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/connections/connections_connect.d.ts +0 -172
- package/lib/pkg/grpc/scalekit/v1/connections/connections_connect.js +0 -180
- package/lib/pkg/grpc/scalekit/v1/connections/connections_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/directories/directories_connect.d.ts +0 -154
- package/lib/pkg/grpc/scalekit/v1/directories/directories_connect.js +0 -162
- package/lib/pkg/grpc/scalekit/v1/directories/directories_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/domains/domains_connect.d.ts +0 -73
- package/lib/pkg/grpc/scalekit/v1/domains/domains_connect.js +0 -81
- package/lib/pkg/grpc/scalekit/v1/domains/domains_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_connect.d.ts +0 -171
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_connect.js +0 -179
- package/lib/pkg/grpc/scalekit/v1/organizations/organizations_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/roles/roles_connect.d.ts +0 -250
- package/lib/pkg/grpc/scalekit/v1/roles/roles_connect.js +0 -258
- package/lib/pkg/grpc/scalekit/v1/roles/roles_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_connect.d.ts +0 -46
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_connect.js +0 -54
- package/lib/pkg/grpc/scalekit/v1/sessions/sessions_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/tools/tools_connect.d.ts +0 -75
- package/lib/pkg/grpc/scalekit/v1/tools/tools_connect.js +0 -83
- package/lib/pkg/grpc/scalekit/v1/tools/tools_connect.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/tools/tools_pb.d.ts +0 -431
- package/lib/pkg/grpc/scalekit/v1/tools/tools_pb.js +0 -627
- package/lib/pkg/grpc/scalekit/v1/tools/tools_pb.js.map +0 -1
- package/lib/pkg/grpc/scalekit/v1/users/users_connect.d.ts +0 -173
- package/lib/pkg/grpc/scalekit/v1/users/users_connect.js +0 -181
- package/lib/pkg/grpc/scalekit/v1/users/users_connect.js.map +0 -1
- package/lib/tools.d.ts +0 -75
- package/lib/tools.js +0 -127
- package/lib/tools.js.map +0 -1
- package/src/auth.ts +0 -99
- package/src/connect.ts +0 -33
- package/src/connected-accounts.ts +0 -358
- package/src/connection.ts +0 -267
- package/src/constants/user.ts +0 -22
- package/src/core.ts +0 -139
- package/src/directory.ts +0 -431
- package/src/domain.ts +0 -272
- package/src/errors/base-exception.ts +0 -262
- package/src/errors/index.ts +0 -3
- package/src/errors/specific-exceptions.ts +0 -88
- package/src/index.ts +0 -10
- package/src/organization.ts +0 -568
- package/src/passwordless.ts +0 -138
- package/src/permission.ts +0 -310
- package/src/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.ts +0 -26
- package/src/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.ts +0 -342
- package/src/pkg/grpc/scalekit/v1/auth/auth_connect.ts +0 -125
- package/src/pkg/grpc/scalekit/v1/auth/auth_pb.ts +0 -1213
- package/src/pkg/grpc/scalekit/v1/auth/passwordless_connect.ts +0 -44
- package/src/pkg/grpc/scalekit/v1/auth/passwordless_pb.ts +0 -336
- package/src/pkg/grpc/scalekit/v1/auth/webauthn_connect.ts +0 -89
- package/src/pkg/grpc/scalekit/v1/auth/webauthn_pb.ts +0 -1263
- package/src/pkg/grpc/scalekit/v1/commons/commons_pb.ts +0 -573
- package/src/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_connect.ts +0 -94
- package/src/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_pb.ts +0 -1294
- package/src/pkg/grpc/scalekit/v1/connections/connections_connect.ts +0 -179
- package/src/pkg/grpc/scalekit/v1/connections/connections_pb.ts +0 -3846
- package/src/pkg/grpc/scalekit/v1/directories/directories_connect.ts +0 -161
- package/src/pkg/grpc/scalekit/v1/directories/directories_pb.ts +0 -2119
- package/src/pkg/grpc/scalekit/v1/domains/domains_connect.ts +0 -80
- package/src/pkg/grpc/scalekit/v1/domains/domains_pb.ts +0 -855
- package/src/pkg/grpc/scalekit/v1/errdetails/errdetails_pb.ts +0 -524
- package/src/pkg/grpc/scalekit/v1/options/options_pb.ts +0 -230
- package/src/pkg/grpc/scalekit/v1/organizations/organizations_connect.ts +0 -178
- package/src/pkg/grpc/scalekit/v1/organizations/organizations_pb.ts +0 -1766
- package/src/pkg/grpc/scalekit/v1/roles/roles_connect.ts +0 -257
- package/src/pkg/grpc/scalekit/v1/roles/roles_pb.ts +0 -2395
- package/src/pkg/grpc/scalekit/v1/sessions/sessions_connect.ts +0 -53
- package/src/pkg/grpc/scalekit/v1/sessions/sessions_pb.ts +0 -749
- package/src/pkg/grpc/scalekit/v1/tools/tools_connect.ts +0 -82
- package/src/pkg/grpc/scalekit/v1/tools/tools_pb.ts +0 -847
- package/src/pkg/grpc/scalekit/v1/users/users_connect.ts +0 -180
- package/src/pkg/grpc/scalekit/v1/users/users_pb.ts +0 -2151
- package/src/role.ts +0 -461
- package/src/scalekit.ts +0 -809
- package/src/session.ts +0 -337
- package/src/tools.ts +0 -166
- package/src/types/auth.ts +0 -73
- package/src/types/organization.ts +0 -12
- package/src/types/scalekit.ts +0 -50
- package/src/types/user.ts +0 -21
- package/src/user.ts +0 -825
- package/src/webauthn.ts +0 -98
- package/tests/README.md +0 -25
- package/tests/connected-accounts.test.ts +0 -472
- package/tests/connection.test.ts +0 -42
- package/tests/directory.test.ts +0 -46
- package/tests/domain.test.ts +0 -293
- package/tests/organization.test.ts +0 -81
- package/tests/passwordless.test.ts +0 -108
- package/tests/permission.test.ts +0 -399
- package/tests/role.test.ts +0 -323
- package/tests/scalekit.test.ts +0 -104
- package/tests/setup.ts +0 -34
- package/tests/tools.test.ts +0 -239
- package/tests/users.test.ts +0 -168
- package/tests/utils/test-data.ts +0 -481
- package/tsconfig.json +0 -19
package/tests/role.test.ts
DELETED
|
@@ -1,323 +0,0 @@
|
|
|
1
|
-
import ScalekitClient from '../src/scalekit';
|
|
2
|
-
import { describe, it, expect, beforeEach, afterEach } from '@jest/globals';
|
|
3
|
-
import { TestDataGenerator, TestOrganizationManager, TestRoleManager } from './utils/test-data';
|
|
4
|
-
|
|
5
|
-
describe('Roles', () => {
|
|
6
|
-
let client: ScalekitClient;
|
|
7
|
-
let testOrg: string;
|
|
8
|
-
let testRoleName: string | null = null;
|
|
9
|
-
let testOrgRoleName: string | null = null;
|
|
10
|
-
|
|
11
|
-
beforeEach(async () => {
|
|
12
|
-
// Use global client
|
|
13
|
-
client = global.client;
|
|
14
|
-
|
|
15
|
-
// Create test organization for each test
|
|
16
|
-
testOrg = await TestOrganizationManager.createTestOrganization(client);
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
afterEach(async () => {
|
|
20
|
-
// Clean up test resources
|
|
21
|
-
if (testRoleName) {
|
|
22
|
-
await TestRoleManager.cleanupTestRole(client, testRoleName);
|
|
23
|
-
testRoleName = null;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
if (testOrgRoleName) {
|
|
27
|
-
await TestRoleManager.cleanupTestOrganizationRole(client, testOrg, testOrgRoleName);
|
|
28
|
-
testOrgRoleName = null;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// Clean up test organization
|
|
32
|
-
await TestOrganizationManager.cleanupTestOrganization(client, testOrg);
|
|
33
|
-
});
|
|
34
|
-
|
|
35
|
-
describe('RoleClient', () => {
|
|
36
|
-
it('should have role client available', () => {
|
|
37
|
-
expect(client.role).toBeDefined();
|
|
38
|
-
expect(typeof client.role.createRole).toBe('function');
|
|
39
|
-
expect(typeof client.role.getRole).toBe('function');
|
|
40
|
-
expect(typeof client.role.listRoles).toBe('function');
|
|
41
|
-
expect(typeof client.role.updateRole).toBe('function');
|
|
42
|
-
expect(typeof client.role.deleteRole).toBe('function');
|
|
43
|
-
expect(typeof client.role.getRoleUsersCount).toBe('function');
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('should have organization role methods available', () => {
|
|
47
|
-
expect(typeof client.role.createOrganizationRole).toBe('function');
|
|
48
|
-
expect(typeof client.role.getOrganizationRole).toBe('function');
|
|
49
|
-
expect(typeof client.role.listOrganizationRoles).toBe('function');
|
|
50
|
-
expect(typeof client.role.updateOrganizationRole).toBe('function');
|
|
51
|
-
expect(typeof client.role.deleteOrganizationRole).toBe('function');
|
|
52
|
-
expect(typeof client.role.getOrganizationRoleUsersCount).toBe('function');
|
|
53
|
-
expect(typeof client.role.updateDefaultOrganizationRoles).toBe('function');
|
|
54
|
-
expect(typeof client.role.deleteOrganizationRoleBase).toBe('function');
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
|
|
58
|
-
describe('Role API Integration Tests', () => {
|
|
59
|
-
describe('createRole', () => {
|
|
60
|
-
it('should create a new role', async () => {
|
|
61
|
-
const roleData = TestDataGenerator.generateRoleData();
|
|
62
|
-
|
|
63
|
-
const response = await client.role.createRole(roleData);
|
|
64
|
-
|
|
65
|
-
expect(response).toBeDefined();
|
|
66
|
-
expect(response.role).toBeDefined();
|
|
67
|
-
expect(response.role?.name).toBe(roleData.name);
|
|
68
|
-
expect(response.role?.displayName).toBe(roleData.displayName);
|
|
69
|
-
expect(response.role?.description).toBe(roleData.description);
|
|
70
|
-
|
|
71
|
-
testRoleName = response.role?.name || null;
|
|
72
|
-
});
|
|
73
|
-
|
|
74
|
-
it('should throw error when role name is missing', async () => {
|
|
75
|
-
const roleData = TestDataGenerator.generateRoleData({ name: '' });
|
|
76
|
-
|
|
77
|
-
await expect(
|
|
78
|
-
client.role.createRole(roleData)
|
|
79
|
-
).rejects.toThrow();
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
describe('listRoles', () => {
|
|
84
|
-
it('should list all roles', async () => {
|
|
85
|
-
const response = await client.role.listRoles();
|
|
86
|
-
|
|
87
|
-
expect(response).toBeDefined();
|
|
88
|
-
expect(response.roles).toBeDefined();
|
|
89
|
-
expect(Array.isArray(response.roles)).toBe(true);
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
|
|
93
|
-
describe('getRole', () => {
|
|
94
|
-
it('should get role by name', async () => {
|
|
95
|
-
// Create a test role first
|
|
96
|
-
const roleData = TestDataGenerator.generateRoleData();
|
|
97
|
-
const createResponse = await client.role.createRole(roleData);
|
|
98
|
-
testRoleName = createResponse.role?.name || null;
|
|
99
|
-
|
|
100
|
-
const response = await client.role.getRole(testRoleName!);
|
|
101
|
-
|
|
102
|
-
expect(response).toBeDefined();
|
|
103
|
-
expect(response.role).toBeDefined();
|
|
104
|
-
expect(response.role?.name).toBe(testRoleName);
|
|
105
|
-
expect(response.role?.displayName).toBe(roleData.displayName);
|
|
106
|
-
expect(response.role?.description).toBe(roleData.description);
|
|
107
|
-
});
|
|
108
|
-
|
|
109
|
-
it('should throw error when role does not exist', async () => {
|
|
110
|
-
await expect(
|
|
111
|
-
client.role.getRole('non-existent-role')
|
|
112
|
-
).rejects.toThrow();
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
describe('updateRole', () => {
|
|
117
|
-
it('should update an existing role', async () => {
|
|
118
|
-
// Create a test role first
|
|
119
|
-
const roleData = TestDataGenerator.generateRoleData();
|
|
120
|
-
const createResponse = await client.role.createRole(roleData);
|
|
121
|
-
testRoleName = createResponse.role?.name || null;
|
|
122
|
-
|
|
123
|
-
const updateData = TestDataGenerator.generateRoleUpdateData();
|
|
124
|
-
const response = await client.role.updateRole(testRoleName!, updateData);
|
|
125
|
-
|
|
126
|
-
expect(response).toBeDefined();
|
|
127
|
-
expect(response.role).toBeDefined();
|
|
128
|
-
expect(response.role?.name).toBe(testRoleName);
|
|
129
|
-
expect(response.role?.displayName).toBe(updateData.displayName);
|
|
130
|
-
expect(response.role?.description).toBe(updateData.description);
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it('should throw error when updating non-existent role', async () => {
|
|
134
|
-
const updateData = TestDataGenerator.generateRoleUpdateData();
|
|
135
|
-
|
|
136
|
-
await expect(
|
|
137
|
-
client.role.updateRole('non-existent-role', updateData)
|
|
138
|
-
).rejects.toThrow();
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
|
|
142
|
-
describe('deleteRole', () => {
|
|
143
|
-
it('should delete an existing role', async () => {
|
|
144
|
-
// Create a test role first
|
|
145
|
-
const roleData = TestDataGenerator.generateRoleData();
|
|
146
|
-
const createResponse = await client.role.createRole(roleData);
|
|
147
|
-
const roleName = createResponse.role?.name || null;
|
|
148
|
-
|
|
149
|
-
const response = await client.role.deleteRole(roleName!);
|
|
150
|
-
|
|
151
|
-
expect(response).toBeDefined();
|
|
152
|
-
|
|
153
|
-
// Verify role is deleted
|
|
154
|
-
await expect(
|
|
155
|
-
client.role.getRole(roleName!)
|
|
156
|
-
).rejects.toThrow();
|
|
157
|
-
});
|
|
158
|
-
});
|
|
159
|
-
|
|
160
|
-
describe('getRoleUsersCount', () => {
|
|
161
|
-
it('should get user count for a role', async () => {
|
|
162
|
-
// Create a test role first
|
|
163
|
-
const roleData = TestDataGenerator.generateRoleData();
|
|
164
|
-
const createResponse = await client.role.createRole(roleData);
|
|
165
|
-
testRoleName = createResponse.role?.name || null;
|
|
166
|
-
|
|
167
|
-
const response = await client.role.getRoleUsersCount(testRoleName!);
|
|
168
|
-
|
|
169
|
-
expect(response).toBeDefined();
|
|
170
|
-
expect(Number(response.count)).toBeGreaterThanOrEqual(0);
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
});
|
|
174
|
-
|
|
175
|
-
describe('Organization Role API Integration Tests', () => {
|
|
176
|
-
describe('createOrganizationRole', () => {
|
|
177
|
-
it('should create a new organization role', async () => {
|
|
178
|
-
const roleData = TestDataGenerator.generateOrganizationRoleData();
|
|
179
|
-
|
|
180
|
-
const response = await client.role.createOrganizationRole(testOrg, roleData);
|
|
181
|
-
|
|
182
|
-
expect(response).toBeDefined();
|
|
183
|
-
expect(response.role).toBeDefined();
|
|
184
|
-
expect(response.role?.name).toBe(roleData.name);
|
|
185
|
-
expect(response.role?.displayName).toBe(roleData.displayName);
|
|
186
|
-
expect(response.role?.description).toBe(roleData.description);
|
|
187
|
-
expect(response.role?.isOrgRole).toBe(true);
|
|
188
|
-
|
|
189
|
-
testOrgRoleName = response.role?.name || null;
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
it('should throw error when organizationId is missing', async () => {
|
|
193
|
-
const roleData = TestDataGenerator.generateOrganizationRoleData();
|
|
194
|
-
|
|
195
|
-
await expect(
|
|
196
|
-
client.role.createOrganizationRole('', roleData)
|
|
197
|
-
).rejects.toThrow();
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
describe('listOrganizationRoles', () => {
|
|
202
|
-
it('should list all organization roles', async () => {
|
|
203
|
-
// Create a test organization role first
|
|
204
|
-
const roleData = TestDataGenerator.generateOrganizationRoleData();
|
|
205
|
-
const createResponse = await client.role.createOrganizationRole(testOrg, roleData);
|
|
206
|
-
testOrgRoleName = createResponse.role?.name || null;
|
|
207
|
-
|
|
208
|
-
const response = await client.role.listOrganizationRoles(testOrg);
|
|
209
|
-
|
|
210
|
-
expect(response).toBeDefined();
|
|
211
|
-
expect(response.roles).toBeDefined();
|
|
212
|
-
expect(Array.isArray(response.roles)).toBe(true);
|
|
213
|
-
expect(response.roles.length).toBeGreaterThan(0);
|
|
214
|
-
|
|
215
|
-
// Verify our test role is in the list
|
|
216
|
-
const testRole = response.roles.find(role => role.name === testOrgRoleName);
|
|
217
|
-
expect(testRole).toBeDefined();
|
|
218
|
-
expect(testRole?.isOrgRole).toBe(true);
|
|
219
|
-
});
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
describe('getOrganizationRole', () => {
|
|
223
|
-
it('should get organization role by name', async () => {
|
|
224
|
-
// Create a test organization role first
|
|
225
|
-
const roleData = TestDataGenerator.generateOrganizationRoleData();
|
|
226
|
-
const createResponse = await client.role.createOrganizationRole(testOrg, roleData);
|
|
227
|
-
testOrgRoleName = createResponse.role?.name || null;
|
|
228
|
-
|
|
229
|
-
const response = await client.role.getOrganizationRole(testOrg, testOrgRoleName!);
|
|
230
|
-
|
|
231
|
-
expect(response).toBeDefined();
|
|
232
|
-
expect(response.role).toBeDefined();
|
|
233
|
-
expect(response.role?.name).toBe(testOrgRoleName);
|
|
234
|
-
expect(response.role?.displayName).toBe(roleData.displayName);
|
|
235
|
-
expect(response.role?.isOrgRole).toBe(true);
|
|
236
|
-
});
|
|
237
|
-
});
|
|
238
|
-
|
|
239
|
-
describe('updateOrganizationRole', () => {
|
|
240
|
-
it('should update an existing organization role', async () => {
|
|
241
|
-
// Create a test organization role first
|
|
242
|
-
const roleData = TestDataGenerator.generateOrganizationRoleData();
|
|
243
|
-
const createResponse = await client.role.createOrganizationRole(testOrg, roleData);
|
|
244
|
-
testOrgRoleName = createResponse.role?.name || null;
|
|
245
|
-
|
|
246
|
-
const updateData = TestDataGenerator.generateRoleUpdateData();
|
|
247
|
-
const response = await client.role.updateOrganizationRole(testOrg, testOrgRoleName!, updateData);
|
|
248
|
-
|
|
249
|
-
expect(response).toBeDefined();
|
|
250
|
-
expect(response.role).toBeDefined();
|
|
251
|
-
expect(response.role?.name).toBe(testOrgRoleName);
|
|
252
|
-
expect(response.role?.displayName).toBe(updateData.displayName);
|
|
253
|
-
expect(response.role?.description).toBe(updateData.description);
|
|
254
|
-
expect(response.role?.isOrgRole).toBe(true);
|
|
255
|
-
});
|
|
256
|
-
});
|
|
257
|
-
|
|
258
|
-
describe('deleteOrganizationRole', () => {
|
|
259
|
-
it('should delete an existing organization role', async () => {
|
|
260
|
-
// Create a test organization role first
|
|
261
|
-
const roleData = TestDataGenerator.generateOrganizationRoleData();
|
|
262
|
-
const createResponse = await client.role.createOrganizationRole(testOrg, roleData);
|
|
263
|
-
const roleName = createResponse.role?.name || null;
|
|
264
|
-
|
|
265
|
-
const response = await client.role.deleteOrganizationRole(testOrg, roleName!);
|
|
266
|
-
|
|
267
|
-
expect(response).toBeDefined();
|
|
268
|
-
|
|
269
|
-
// Verify role is deleted
|
|
270
|
-
await expect(
|
|
271
|
-
client.role.getOrganizationRole(testOrg, roleName!)
|
|
272
|
-
).rejects.toThrow();
|
|
273
|
-
});
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
describe('getOrganizationRoleUsersCount', () => {
|
|
277
|
-
it('should get user count for an organization role', async () => {
|
|
278
|
-
// Create a test organization role first
|
|
279
|
-
const roleData = TestDataGenerator.generateOrganizationRoleData();
|
|
280
|
-
const createResponse = await client.role.createOrganizationRole(testOrg, roleData);
|
|
281
|
-
testOrgRoleName = createResponse.role?.name || null;
|
|
282
|
-
|
|
283
|
-
const response = await client.role.getOrganizationRoleUsersCount(testOrg, testOrgRoleName!);
|
|
284
|
-
|
|
285
|
-
expect(response).toBeDefined();
|
|
286
|
-
expect(Number(response.count)).toBeGreaterThanOrEqual(0);
|
|
287
|
-
});
|
|
288
|
-
});
|
|
289
|
-
|
|
290
|
-
describe('updateDefaultOrganizationRoles', () => {
|
|
291
|
-
it('should update default organization roles', async () => {
|
|
292
|
-
// Create a test organization role first
|
|
293
|
-
const roleData = TestDataGenerator.generateOrganizationRoleData();
|
|
294
|
-
const createResponse = await client.role.createOrganizationRole(testOrg, roleData);
|
|
295
|
-
testOrgRoleName = createResponse.role?.name || null;
|
|
296
|
-
|
|
297
|
-
const response = await client.role.updateDefaultOrganizationRoles(testOrg, testOrgRoleName!);
|
|
298
|
-
|
|
299
|
-
expect(response).toBeDefined();
|
|
300
|
-
expect(response.defaultMember).toBeDefined();
|
|
301
|
-
expect(response.defaultMember?.name).toBe(testOrgRoleName);
|
|
302
|
-
});
|
|
303
|
-
});
|
|
304
|
-
|
|
305
|
-
describe('deleteOrganizationRoleBase', () => {
|
|
306
|
-
it('should delete organization role base relationship', async () => {
|
|
307
|
-
// Create base org role
|
|
308
|
-
const baseRoleData = TestDataGenerator.generateOrganizationRoleData();
|
|
309
|
-
const baseResp = await client.role.createOrganizationRole(testOrg, baseRoleData);
|
|
310
|
-
const baseRoleName = baseResp.role?.name!;
|
|
311
|
-
|
|
312
|
-
// Create extended org role which extends base
|
|
313
|
-
const extendedRoleData = TestDataGenerator.generateOrganizationRoleData({ extends: baseRoleName });
|
|
314
|
-
const extResp = await client.role.createOrganizationRole(testOrg, extendedRoleData);
|
|
315
|
-
testOrgRoleName = extResp.role?.name || null;
|
|
316
|
-
|
|
317
|
-
const response = await client.role.deleteOrganizationRoleBase(testOrg, testOrgRoleName!);
|
|
318
|
-
|
|
319
|
-
expect(response).toBeDefined();
|
|
320
|
-
});
|
|
321
|
-
});
|
|
322
|
-
});
|
|
323
|
-
});
|
package/tests/scalekit.test.ts
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import ScalekitClient from '../src/scalekit';
|
|
2
|
-
import { AuthenticationOptions } from '../src/types/scalekit';
|
|
3
|
-
import { describe, it, expect, beforeEach } from '@jest/globals';
|
|
4
|
-
import { TestDataGenerator } from './utils/test-data';
|
|
5
|
-
|
|
6
|
-
describe('ScalekitClient', () => {
|
|
7
|
-
let client: ScalekitClient;
|
|
8
|
-
|
|
9
|
-
beforeEach(() => {
|
|
10
|
-
// Use global client
|
|
11
|
-
client = global.client;
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
describe('constructor', () => {
|
|
15
|
-
it('should initialize with correct parameters', () => {
|
|
16
|
-
expect(client).toBeInstanceOf(ScalekitClient);
|
|
17
|
-
expect(client.organization).toBeDefined();
|
|
18
|
-
expect(client.user).toBeDefined();
|
|
19
|
-
expect(client.connection).toBeDefined();
|
|
20
|
-
expect(client.directory).toBeDefined();
|
|
21
|
-
expect(client.passwordless).toBeDefined();
|
|
22
|
-
expect(client.domain).toBeDefined();
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
describe('getAuthorizationUrl', () => {
|
|
27
|
-
it('should generate authorization URL with basic parameters', () => {
|
|
28
|
-
const redirectUri = 'https://example.com/callback';
|
|
29
|
-
const url = client.getAuthorizationUrl(redirectUri);
|
|
30
|
-
|
|
31
|
-
expect(url).toContain('oauth/authorize');
|
|
32
|
-
expect(url).toContain(`redirect_uri=${encodeURIComponent(redirectUri)}`);
|
|
33
|
-
expect(url).toContain('response_type=code');
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
it('should include optional parameters when provided', () => {
|
|
37
|
-
const redirectUri = 'https://example.com/callback';
|
|
38
|
-
const options = TestDataGenerator.generateAuthorizationUrlOptions();
|
|
39
|
-
|
|
40
|
-
const url = client.getAuthorizationUrl(redirectUri, options);
|
|
41
|
-
|
|
42
|
-
expect(url).toContain('scope=openid%20profile');
|
|
43
|
-
expect(url).toContain('state=test-state');
|
|
44
|
-
expect(url).toContain('nonce=test-nonce');
|
|
45
|
-
expect(url).toContain('prompt=login');
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
it('should handle PKCE parameters', () => {
|
|
49
|
-
const redirectUri = 'https://example.com/callback';
|
|
50
|
-
const options = TestDataGenerator.generatePKCEParams();
|
|
51
|
-
|
|
52
|
-
const url = client.getAuthorizationUrl(redirectUri, options);
|
|
53
|
-
|
|
54
|
-
expect(url).toContain('code_challenge=test-challenge');
|
|
55
|
-
expect(url).toContain('code_challenge_method=S256');
|
|
56
|
-
});
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
describe('verifyWebhookPayload', () => {
|
|
60
|
-
it('should verify valid webhook payload', () => {
|
|
61
|
-
const webhookData = TestDataGenerator.generateWebhookData();
|
|
62
|
-
|
|
63
|
-
const result = client.verifyWebhookPayload(webhookData.secret, webhookData.headers, webhookData.payload);
|
|
64
|
-
expect(result).toBe(true);
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
it('should throw error for invalid signature', () => {
|
|
68
|
-
const webhookData = TestDataGenerator.generateWebhookData();
|
|
69
|
-
|
|
70
|
-
// Generate invalid signature using wrong payload data
|
|
71
|
-
const crypto = require('crypto');
|
|
72
|
-
const wrongData = `${webhookData.webhookId}.${webhookData.timestamp}.wrong-payload`;
|
|
73
|
-
const hmac = crypto.createHmac('sha256', Buffer.from('test-secret', 'base64'));
|
|
74
|
-
hmac.update(wrongData);
|
|
75
|
-
const wrongSignature = hmac.digest('base64');
|
|
76
|
-
const signature = `v1,${wrongSignature}`;
|
|
77
|
-
|
|
78
|
-
const headers = {
|
|
79
|
-
'webhook-id': webhookData.webhookId,
|
|
80
|
-
'webhook-timestamp': webhookData.timestamp,
|
|
81
|
-
'webhook-signature': signature
|
|
82
|
-
};
|
|
83
|
-
|
|
84
|
-
expect(() => {
|
|
85
|
-
client.verifyWebhookPayload(webhookData.secret, headers, webhookData.payload);
|
|
86
|
-
}).toThrow('Invalid Signature');
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
describe('validateAccessToken', () => {
|
|
91
|
-
it('should validate access token', async () => {
|
|
92
|
-
// Mock token for testing - expected to fail
|
|
93
|
-
const token = 'mock-token';
|
|
94
|
-
|
|
95
|
-
try {
|
|
96
|
-
const result = await client.validateAccessToken(token);
|
|
97
|
-
expect(typeof result).toBe('boolean');
|
|
98
|
-
} catch (error) {
|
|
99
|
-
// Expected failure with mock token
|
|
100
|
-
expect(error).toBeDefined();
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
});
|
package/tests/setup.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import ScalekitClient from '../src/scalekit';
|
|
2
|
-
import dotenv from 'dotenv';
|
|
3
|
-
|
|
4
|
-
// Import Jest globals
|
|
5
|
-
import { beforeAll } from '@jest/globals';
|
|
6
|
-
|
|
7
|
-
// Load environment variables
|
|
8
|
-
dotenv.config();
|
|
9
|
-
|
|
10
|
-
// Global test configuration
|
|
11
|
-
declare global {
|
|
12
|
-
var client: ScalekitClient;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
beforeAll(() => {
|
|
16
|
-
// Validate required environment variables
|
|
17
|
-
const environmentUrl = process.env.SCALEKIT_ENVIRONMENT_URL;
|
|
18
|
-
const clientId = process.env.SCALEKIT_CLIENT_ID;
|
|
19
|
-
const clientSecret = process.env.SCALEKIT_CLIENT_SECRET;
|
|
20
|
-
|
|
21
|
-
// Check for required environment variables
|
|
22
|
-
if (!environmentUrl) {
|
|
23
|
-
throw new Error('SCALEKIT_ENVIRONMENT_URL environment variable is required');
|
|
24
|
-
}
|
|
25
|
-
if (!clientId) {
|
|
26
|
-
throw new Error('SCALEKIT_CLIENT_ID environment variable is required');
|
|
27
|
-
}
|
|
28
|
-
if (!clientSecret) {
|
|
29
|
-
throw new Error('SCALEKIT_CLIENT_SECRET environment variable is required');
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
// Initialize test client
|
|
33
|
-
global.client = new ScalekitClient(environmentUrl, clientId, clientSecret);
|
|
34
|
-
});
|
package/tests/tools.test.ts
DELETED
|
@@ -1,239 +0,0 @@
|
|
|
1
|
-
import ScalekitClient from '../src/scalekit';
|
|
2
|
-
import { describe, it, expect, beforeEach, afterEach } from '@jest/globals';
|
|
3
|
-
import { TestOrganizationManager } from './utils/test-data';
|
|
4
|
-
|
|
5
|
-
describe('Tools', () => {
|
|
6
|
-
let client: ScalekitClient;
|
|
7
|
-
let testOrg: string;
|
|
8
|
-
|
|
9
|
-
beforeEach(async () => {
|
|
10
|
-
// Use global client
|
|
11
|
-
client = global.client;
|
|
12
|
-
|
|
13
|
-
// Create test organization for each test
|
|
14
|
-
testOrg = await TestOrganizationManager.createTestOrganization(client);
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
afterEach(async () => {
|
|
18
|
-
// Clean up test organization
|
|
19
|
-
await TestOrganizationManager.cleanupTestOrganization(client, testOrg);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
describe('listTools', () => {
|
|
23
|
-
it('should list tools', async () => {
|
|
24
|
-
const response = await client.tools.listTools();
|
|
25
|
-
|
|
26
|
-
expect(response).toBeDefined();
|
|
27
|
-
expect(response.tools).toBeDefined();
|
|
28
|
-
expect(Array.isArray(response.tools)).toBe(true);
|
|
29
|
-
expect(response.totalSize).toBeDefined();
|
|
30
|
-
expect(typeof response.totalSize).toBe('number');
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('should list tools with filter', async () => {
|
|
34
|
-
const response = await client.tools.listTools({
|
|
35
|
-
filter: {
|
|
36
|
-
provider: 'GOOGLE',
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
expect(response).toBeDefined();
|
|
41
|
-
expect(response.tools).toBeDefined();
|
|
42
|
-
expect(Array.isArray(response.tools)).toBe(true);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
it('should list tools with pagination', async () => {
|
|
46
|
-
const firstPage = await client.tools.listTools({
|
|
47
|
-
pageSize: 10,
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
expect(firstPage).toBeDefined();
|
|
51
|
-
expect(firstPage.tools).toBeDefined();
|
|
52
|
-
expect(firstPage.tools.length).toBeLessThanOrEqual(10);
|
|
53
|
-
|
|
54
|
-
if (firstPage.nextPageToken) {
|
|
55
|
-
const secondPage = await client.tools.listTools({
|
|
56
|
-
pageSize: 10,
|
|
57
|
-
pageToken: firstPage.nextPageToken,
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
expect(secondPage).toBeDefined();
|
|
61
|
-
expect(secondPage.tools).toBeDefined();
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
|
|
65
|
-
it('should list tools with summary filter', async () => {
|
|
66
|
-
const response = await client.tools.listTools({
|
|
67
|
-
filter: {
|
|
68
|
-
summary: true,
|
|
69
|
-
},
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
expect(response).toBeDefined();
|
|
73
|
-
expect(response.toolNames).toBeDefined();
|
|
74
|
-
expect(Array.isArray(response.toolNames)).toBe(true);
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it('should list tools with tool name filter', async () => {
|
|
78
|
-
const response = await client.tools.listTools({
|
|
79
|
-
filter: {
|
|
80
|
-
toolName: ['gmail_send_email'],
|
|
81
|
-
},
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
expect(response).toBeDefined();
|
|
85
|
-
expect(response.tools).toBeDefined();
|
|
86
|
-
expect(Array.isArray(response.tools)).toBe(true);
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
describe('listScopedTools', () => {
|
|
91
|
-
it('should list scoped tools with identifier', async () => {
|
|
92
|
-
const identifier = 'test_identifier';
|
|
93
|
-
|
|
94
|
-
// Filter is required by the API and must have at least one non-empty array
|
|
95
|
-
try {
|
|
96
|
-
const response = await client.tools.listScopedTools(identifier, {
|
|
97
|
-
filter: {
|
|
98
|
-
providers: ['GOOGLE'],
|
|
99
|
-
},
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
expect(response).toBeDefined();
|
|
103
|
-
expect(response.tools).toBeDefined();
|
|
104
|
-
expect(Array.isArray(response.tools)).toBe(true);
|
|
105
|
-
expect(response.totalSize).toBeDefined();
|
|
106
|
-
expect(typeof response.totalSize).toBe('number');
|
|
107
|
-
} catch (error: any) {
|
|
108
|
-
// Expected errors: connected account not found, etc.
|
|
109
|
-
expect(error).toBeDefined();
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
it('should list scoped tools with filter', async () => {
|
|
114
|
-
const identifier = 'test_identifier';
|
|
115
|
-
|
|
116
|
-
try {
|
|
117
|
-
const response = await client.tools.listScopedTools(identifier, {
|
|
118
|
-
filter: {
|
|
119
|
-
providers: ['GOOGLE'],
|
|
120
|
-
toolNames: ['gmail_send_email'],
|
|
121
|
-
},
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
expect(response).toBeDefined();
|
|
125
|
-
expect(response.tools).toBeDefined();
|
|
126
|
-
expect(Array.isArray(response.tools)).toBe(true);
|
|
127
|
-
} catch (error: any) {
|
|
128
|
-
// Expected errors: connected account not found, etc.
|
|
129
|
-
expect(error).toBeDefined();
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
it('should list scoped tools with pagination', async () => {
|
|
134
|
-
const identifier = 'test_identifier';
|
|
135
|
-
|
|
136
|
-
// Filter is required by the API and must have at least one non-empty array
|
|
137
|
-
try {
|
|
138
|
-
const firstPage = await client.tools.listScopedTools(identifier, {
|
|
139
|
-
filter: {
|
|
140
|
-
providers: ['GOOGLE'],
|
|
141
|
-
},
|
|
142
|
-
pageSize: 10,
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
expect(firstPage).toBeDefined();
|
|
146
|
-
expect(firstPage.tools).toBeDefined();
|
|
147
|
-
expect(firstPage.tools.length).toBeLessThanOrEqual(10);
|
|
148
|
-
|
|
149
|
-
if (firstPage.nextPageToken) {
|
|
150
|
-
const secondPage = await client.tools.listScopedTools(identifier, {
|
|
151
|
-
filter: {
|
|
152
|
-
providers: ['GOOGLE'],
|
|
153
|
-
},
|
|
154
|
-
pageSize: 10,
|
|
155
|
-
pageToken: firstPage.nextPageToken,
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
expect(secondPage).toBeDefined();
|
|
159
|
-
expect(secondPage.tools).toBeDefined();
|
|
160
|
-
}
|
|
161
|
-
} catch (error: any) {
|
|
162
|
-
// Expected errors: connected account not found, etc.
|
|
163
|
-
expect(error).toBeDefined();
|
|
164
|
-
}
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
describe('executeTool', () => {
|
|
169
|
-
it('should handle execute tool request with minimal params', async () => {
|
|
170
|
-
// This test expects an error since we don't have a real tool/connected account
|
|
171
|
-
// but it validates the request structure is correct
|
|
172
|
-
try {
|
|
173
|
-
await client.tools.executeTool({
|
|
174
|
-
toolName: 'test_tool',
|
|
175
|
-
params: {
|
|
176
|
-
test: 'value',
|
|
177
|
-
},
|
|
178
|
-
});
|
|
179
|
-
// If execution succeeds, that's fine too
|
|
180
|
-
} catch (error: any) {
|
|
181
|
-
// Expected errors: tool not found, connected account not found, etc.
|
|
182
|
-
expect(error).toBeDefined();
|
|
183
|
-
// Verify it's a proper error response, not a request structure issue
|
|
184
|
-
expect(error.message || error.toString()).toBeDefined();
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
|
|
188
|
-
it('should handle execute tool with connected account ID', async () => {
|
|
189
|
-
try {
|
|
190
|
-
await client.tools.executeTool({
|
|
191
|
-
toolName: 'test_tool',
|
|
192
|
-
connectedAccountId: 'ca_test123',
|
|
193
|
-
params: {
|
|
194
|
-
test: 'value',
|
|
195
|
-
},
|
|
196
|
-
});
|
|
197
|
-
} catch (error: any) {
|
|
198
|
-
// Expected errors: tool not found, connected account not found, etc.
|
|
199
|
-
expect(error).toBeDefined();
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
|
|
203
|
-
it('should handle execute tool with identifier and connector', async () => {
|
|
204
|
-
try {
|
|
205
|
-
await client.tools.executeTool({
|
|
206
|
-
toolName: 'test_tool',
|
|
207
|
-
identifier: 'test@example.com',
|
|
208
|
-
connector: 'google_workspace',
|
|
209
|
-
organizationId: testOrg,
|
|
210
|
-
params: {
|
|
211
|
-
test: 'value',
|
|
212
|
-
},
|
|
213
|
-
});
|
|
214
|
-
} catch (error: any) {
|
|
215
|
-
// Expected errors: tool not found, connected account not found, etc.
|
|
216
|
-
expect(error).toBeDefined();
|
|
217
|
-
}
|
|
218
|
-
});
|
|
219
|
-
|
|
220
|
-
it('should handle execute tool with complex params', async () => {
|
|
221
|
-
try {
|
|
222
|
-
await client.tools.executeTool({
|
|
223
|
-
toolName: 'gmail_send_email',
|
|
224
|
-
identifier: 'test@example.com',
|
|
225
|
-
connector: 'google_workspace',
|
|
226
|
-
params: {
|
|
227
|
-
to: 'recipient@example.com',
|
|
228
|
-
subject: 'Test Subject',
|
|
229
|
-
body: 'Test Body',
|
|
230
|
-
attachments: [],
|
|
231
|
-
},
|
|
232
|
-
});
|
|
233
|
-
} catch (error: any) {
|
|
234
|
-
// Expected errors: tool not found, connected account not found, etc.
|
|
235
|
-
expect(error).toBeDefined();
|
|
236
|
-
}
|
|
237
|
-
});
|
|
238
|
-
});
|
|
239
|
-
});
|