@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.
Files changed (226) hide show
  1. package/README.md +5 -5
  2. package/{reference.md → REFERENCE.md} +530 -748
  3. package/lib/auth.d.ts +9 -6
  4. package/lib/auth.js +4 -20
  5. package/lib/auth.js.map +1 -1
  6. package/lib/connect.d.ts +3 -3
  7. package/lib/connect.js +1 -2
  8. package/lib/connect.js.map +1 -1
  9. package/lib/connection.d.ts +2 -2
  10. package/lib/connection.js +4 -4
  11. package/lib/connection.js.map +1 -1
  12. package/lib/core.js +2 -2
  13. package/lib/core.js.map +1 -1
  14. package/lib/directory.d.ts +2 -2
  15. package/lib/directory.js +7 -7
  16. package/lib/directory.js.map +1 -1
  17. package/lib/domain.d.ts +6 -5
  18. package/lib/domain.js +4 -5
  19. package/lib/domain.js.map +1 -1
  20. package/lib/errors/base-exception.d.ts +1 -1
  21. package/lib/errors/base-exception.js +1 -1
  22. package/lib/errors/base-exception.js.map +1 -1
  23. package/lib/organization.d.ts +10 -9
  24. package/lib/organization.js +11 -9
  25. package/lib/organization.js.map +1 -1
  26. package/lib/passwordless.d.ts +2 -2
  27. package/lib/passwordless.js +8 -7
  28. package/lib/passwordless.js.map +1 -1
  29. package/lib/permission.d.ts +6 -5
  30. package/lib/permission.js +10 -11
  31. package/lib/permission.js.map +1 -1
  32. package/lib/pkg/grpc/buf/validate/validate_pb.d.ts +7 -0
  33. package/lib/pkg/grpc/buf/validate/validate_pb.js +25 -0
  34. package/lib/pkg/grpc/buf/validate/validate_pb.js.map +1 -0
  35. package/lib/pkg/grpc/google/api/annotations_pb.d.ts +7 -0
  36. package/lib/pkg/grpc/google/api/annotations_pb.js +25 -0
  37. package/lib/pkg/grpc/google/api/annotations_pb.js.map +1 -0
  38. package/lib/pkg/grpc/google/api/field_behavior_pb.d.ts +7 -0
  39. package/lib/pkg/grpc/google/api/field_behavior_pb.js +25 -0
  40. package/lib/pkg/grpc/google/api/field_behavior_pb.js.map +1 -0
  41. package/lib/pkg/grpc/google/api/visibility_pb.d.ts +7 -0
  42. package/lib/pkg/grpc/google/api/visibility_pb.js +25 -0
  43. package/lib/pkg/grpc/google/api/visibility_pb.js.map +1 -0
  44. package/lib/pkg/grpc/protoc-gen-openapiv2/options/annotations_pb.d.ts +7 -0
  45. package/lib/pkg/grpc/protoc-gen-openapiv2/options/annotations_pb.js +25 -0
  46. package/lib/pkg/grpc/protoc-gen-openapiv2/options/annotations_pb.js.map +1 -0
  47. package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.d.ts +48 -42
  48. package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.js +27 -263
  49. package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.js.map +1 -1
  50. package/lib/pkg/grpc/scalekit/v1/auth/auth_pb.d.ts +371 -325
  51. package/lib/pkg/grpc/scalekit/v1/auth/auth_pb.js +132 -835
  52. package/lib/pkg/grpc/scalekit/v1/auth/auth_pb.js.map +1 -1
  53. package/lib/pkg/grpc/scalekit/v1/auth/passwordless_pb.d.ts +113 -87
  54. package/lib/pkg/grpc/scalekit/v1/auth/passwordless_pb.js +45 -201
  55. package/lib/pkg/grpc/scalekit/v1/auth/passwordless_pb.js.map +1 -1
  56. package/lib/pkg/grpc/scalekit/v1/auth/webauthn_pb.d.ts +262 -265
  57. package/lib/pkg/grpc/scalekit/v1/auth/webauthn_pb.js +92 -938
  58. package/lib/pkg/grpc/scalekit/v1/auth/webauthn_pb.js.map +1 -1
  59. package/lib/pkg/grpc/scalekit/v1/commons/commons_pb.d.ts +162 -157
  60. package/lib/pkg/grpc/scalekit/v1/commons/commons_pb.js +42 -313
  61. package/lib/pkg/grpc/scalekit/v1/commons/commons_pb.js.map +1 -1
  62. package/lib/pkg/grpc/scalekit/v1/connections/connections_pb.d.ts +1488 -1459
  63. package/lib/pkg/grpc/scalekit/v1/connections/connections_pb.js +353 -2362
  64. package/lib/pkg/grpc/scalekit/v1/connections/connections_pb.js.map +1 -1
  65. package/lib/pkg/grpc/scalekit/v1/directories/directories_pb.d.ts +520 -483
  66. package/lib/pkg/grpc/scalekit/v1/directories/directories_pb.js +224 -1555
  67. package/lib/pkg/grpc/scalekit/v1/directories/directories_pb.js.map +1 -1
  68. package/lib/pkg/grpc/scalekit/v1/domains/domains_pb.d.ts +219 -191
  69. package/lib/pkg/grpc/scalekit/v1/domains/domains_pb.js +96 -553
  70. package/lib/pkg/grpc/scalekit/v1/domains/domains_pb.js.map +1 -1
  71. package/lib/pkg/grpc/scalekit/v1/errdetails/errdetails_pb.d.ts +76 -102
  72. package/lib/pkg/grpc/scalekit/v1/errdetails/errdetails_pb.js +37 -393
  73. package/lib/pkg/grpc/scalekit/v1/errdetails/errdetails_pb.js.map +1 -1
  74. package/lib/pkg/grpc/scalekit/v1/options/options_pb.d.ts +36 -26
  75. package/lib/pkg/grpc/scalekit/v1/options/options_pb.js +20 -69
  76. package/lib/pkg/grpc/scalekit/v1/options/options_pb.js.map +1 -1
  77. package/lib/pkg/grpc/scalekit/v1/organizations/organizations_pb.d.ts +447 -400
  78. package/lib/pkg/grpc/scalekit/v1/organizations/organizations_pb.js +163 -1238
  79. package/lib/pkg/grpc/scalekit/v1/organizations/organizations_pb.js.map +1 -1
  80. package/lib/pkg/grpc/scalekit/v1/roles/roles_pb.d.ts +622 -556
  81. package/lib/pkg/grpc/scalekit/v1/roles/roles_pb.js +201 -1718
  82. package/lib/pkg/grpc/scalekit/v1/roles/roles_pb.js.map +1 -1
  83. package/lib/pkg/grpc/scalekit/v1/sessions/sessions_pb.d.ts +135 -132
  84. package/lib/pkg/grpc/scalekit/v1/sessions/sessions_pb.js +55 -518
  85. package/lib/pkg/grpc/scalekit/v1/sessions/sessions_pb.js.map +1 -1
  86. package/lib/pkg/grpc/scalekit/v1/users/users_pb.d.ts +445 -413
  87. package/lib/pkg/grpc/scalekit/v1/users/users_pb.js +142 -1490
  88. package/lib/pkg/grpc/scalekit/v1/users/users_pb.js.map +1 -1
  89. package/lib/role.d.ts +8 -7
  90. package/lib/role.js +14 -14
  91. package/lib/role.js.map +1 -1
  92. package/lib/scalekit.d.ts +0 -4
  93. package/lib/scalekit.js +0 -4
  94. package/lib/scalekit.js.map +1 -1
  95. package/lib/session.js +15 -24
  96. package/lib/session.js.map +1 -1
  97. package/lib/user.d.ts +6 -5
  98. package/lib/user.js +17 -20
  99. package/lib/user.js.map +1 -1
  100. package/lib/webauthn.js +6 -5
  101. package/lib/webauthn.js.map +1 -1
  102. package/package.json +12 -10
  103. package/.github/dependabot.yml +0 -10
  104. package/.nvmrc +0 -1
  105. package/buf.gen.yaml +0 -24
  106. package/jest.config.js +0 -15
  107. package/lib/connected-accounts.d.ts +0 -119
  108. package/lib/connected-accounts.js +0 -241
  109. package/lib/connected-accounts.js.map +0 -1
  110. package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.d.ts +0 -19
  111. package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.js +0 -27
  112. package/lib/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.js.map +0 -1
  113. package/lib/pkg/grpc/scalekit/v1/auth/auth_connect.d.ts +0 -118
  114. package/lib/pkg/grpc/scalekit/v1/auth/auth_connect.js +0 -126
  115. package/lib/pkg/grpc/scalekit/v1/auth/auth_connect.js.map +0 -1
  116. package/lib/pkg/grpc/scalekit/v1/auth/passwordless_connect.d.ts +0 -37
  117. package/lib/pkg/grpc/scalekit/v1/auth/passwordless_connect.js +0 -45
  118. package/lib/pkg/grpc/scalekit/v1/auth/passwordless_connect.js.map +0 -1
  119. package/lib/pkg/grpc/scalekit/v1/auth/webauthn_connect.d.ts +0 -82
  120. package/lib/pkg/grpc/scalekit/v1/auth/webauthn_connect.js +0 -90
  121. package/lib/pkg/grpc/scalekit/v1/auth/webauthn_connect.js.map +0 -1
  122. package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_connect.d.ts +0 -87
  123. package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_connect.js +0 -95
  124. package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_connect.js.map +0 -1
  125. package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_pb.d.ts +0 -718
  126. package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_pb.js +0 -893
  127. package/lib/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_pb.js.map +0 -1
  128. package/lib/pkg/grpc/scalekit/v1/connections/connections_connect.d.ts +0 -172
  129. package/lib/pkg/grpc/scalekit/v1/connections/connections_connect.js +0 -180
  130. package/lib/pkg/grpc/scalekit/v1/connections/connections_connect.js.map +0 -1
  131. package/lib/pkg/grpc/scalekit/v1/directories/directories_connect.d.ts +0 -154
  132. package/lib/pkg/grpc/scalekit/v1/directories/directories_connect.js +0 -162
  133. package/lib/pkg/grpc/scalekit/v1/directories/directories_connect.js.map +0 -1
  134. package/lib/pkg/grpc/scalekit/v1/domains/domains_connect.d.ts +0 -73
  135. package/lib/pkg/grpc/scalekit/v1/domains/domains_connect.js +0 -81
  136. package/lib/pkg/grpc/scalekit/v1/domains/domains_connect.js.map +0 -1
  137. package/lib/pkg/grpc/scalekit/v1/organizations/organizations_connect.d.ts +0 -171
  138. package/lib/pkg/grpc/scalekit/v1/organizations/organizations_connect.js +0 -179
  139. package/lib/pkg/grpc/scalekit/v1/organizations/organizations_connect.js.map +0 -1
  140. package/lib/pkg/grpc/scalekit/v1/roles/roles_connect.d.ts +0 -250
  141. package/lib/pkg/grpc/scalekit/v1/roles/roles_connect.js +0 -258
  142. package/lib/pkg/grpc/scalekit/v1/roles/roles_connect.js.map +0 -1
  143. package/lib/pkg/grpc/scalekit/v1/sessions/sessions_connect.d.ts +0 -46
  144. package/lib/pkg/grpc/scalekit/v1/sessions/sessions_connect.js +0 -54
  145. package/lib/pkg/grpc/scalekit/v1/sessions/sessions_connect.js.map +0 -1
  146. package/lib/pkg/grpc/scalekit/v1/tools/tools_connect.d.ts +0 -75
  147. package/lib/pkg/grpc/scalekit/v1/tools/tools_connect.js +0 -83
  148. package/lib/pkg/grpc/scalekit/v1/tools/tools_connect.js.map +0 -1
  149. package/lib/pkg/grpc/scalekit/v1/tools/tools_pb.d.ts +0 -431
  150. package/lib/pkg/grpc/scalekit/v1/tools/tools_pb.js +0 -627
  151. package/lib/pkg/grpc/scalekit/v1/tools/tools_pb.js.map +0 -1
  152. package/lib/pkg/grpc/scalekit/v1/users/users_connect.d.ts +0 -173
  153. package/lib/pkg/grpc/scalekit/v1/users/users_connect.js +0 -181
  154. package/lib/pkg/grpc/scalekit/v1/users/users_connect.js.map +0 -1
  155. package/lib/tools.d.ts +0 -75
  156. package/lib/tools.js +0 -127
  157. package/lib/tools.js.map +0 -1
  158. package/src/auth.ts +0 -99
  159. package/src/connect.ts +0 -33
  160. package/src/connected-accounts.ts +0 -358
  161. package/src/connection.ts +0 -267
  162. package/src/constants/user.ts +0 -22
  163. package/src/core.ts +0 -139
  164. package/src/directory.ts +0 -431
  165. package/src/domain.ts +0 -272
  166. package/src/errors/base-exception.ts +0 -262
  167. package/src/errors/index.ts +0 -3
  168. package/src/errors/specific-exceptions.ts +0 -88
  169. package/src/index.ts +0 -10
  170. package/src/organization.ts +0 -568
  171. package/src/passwordless.ts +0 -138
  172. package/src/permission.ts +0 -310
  173. package/src/pkg/grpc/scalekit/v1/auditlogs/auditlogs_connect.ts +0 -26
  174. package/src/pkg/grpc/scalekit/v1/auditlogs/auditlogs_pb.ts +0 -342
  175. package/src/pkg/grpc/scalekit/v1/auth/auth_connect.ts +0 -125
  176. package/src/pkg/grpc/scalekit/v1/auth/auth_pb.ts +0 -1213
  177. package/src/pkg/grpc/scalekit/v1/auth/passwordless_connect.ts +0 -44
  178. package/src/pkg/grpc/scalekit/v1/auth/passwordless_pb.ts +0 -336
  179. package/src/pkg/grpc/scalekit/v1/auth/webauthn_connect.ts +0 -89
  180. package/src/pkg/grpc/scalekit/v1/auth/webauthn_pb.ts +0 -1263
  181. package/src/pkg/grpc/scalekit/v1/commons/commons_pb.ts +0 -573
  182. package/src/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_connect.ts +0 -94
  183. package/src/pkg/grpc/scalekit/v1/connected_accounts/connected_accounts_pb.ts +0 -1294
  184. package/src/pkg/grpc/scalekit/v1/connections/connections_connect.ts +0 -179
  185. package/src/pkg/grpc/scalekit/v1/connections/connections_pb.ts +0 -3846
  186. package/src/pkg/grpc/scalekit/v1/directories/directories_connect.ts +0 -161
  187. package/src/pkg/grpc/scalekit/v1/directories/directories_pb.ts +0 -2119
  188. package/src/pkg/grpc/scalekit/v1/domains/domains_connect.ts +0 -80
  189. package/src/pkg/grpc/scalekit/v1/domains/domains_pb.ts +0 -855
  190. package/src/pkg/grpc/scalekit/v1/errdetails/errdetails_pb.ts +0 -524
  191. package/src/pkg/grpc/scalekit/v1/options/options_pb.ts +0 -230
  192. package/src/pkg/grpc/scalekit/v1/organizations/organizations_connect.ts +0 -178
  193. package/src/pkg/grpc/scalekit/v1/organizations/organizations_pb.ts +0 -1766
  194. package/src/pkg/grpc/scalekit/v1/roles/roles_connect.ts +0 -257
  195. package/src/pkg/grpc/scalekit/v1/roles/roles_pb.ts +0 -2395
  196. package/src/pkg/grpc/scalekit/v1/sessions/sessions_connect.ts +0 -53
  197. package/src/pkg/grpc/scalekit/v1/sessions/sessions_pb.ts +0 -749
  198. package/src/pkg/grpc/scalekit/v1/tools/tools_connect.ts +0 -82
  199. package/src/pkg/grpc/scalekit/v1/tools/tools_pb.ts +0 -847
  200. package/src/pkg/grpc/scalekit/v1/users/users_connect.ts +0 -180
  201. package/src/pkg/grpc/scalekit/v1/users/users_pb.ts +0 -2151
  202. package/src/role.ts +0 -461
  203. package/src/scalekit.ts +0 -809
  204. package/src/session.ts +0 -337
  205. package/src/tools.ts +0 -166
  206. package/src/types/auth.ts +0 -73
  207. package/src/types/organization.ts +0 -12
  208. package/src/types/scalekit.ts +0 -50
  209. package/src/types/user.ts +0 -21
  210. package/src/user.ts +0 -825
  211. package/src/webauthn.ts +0 -98
  212. package/tests/README.md +0 -25
  213. package/tests/connected-accounts.test.ts +0 -472
  214. package/tests/connection.test.ts +0 -42
  215. package/tests/directory.test.ts +0 -46
  216. package/tests/domain.test.ts +0 -293
  217. package/tests/organization.test.ts +0 -81
  218. package/tests/passwordless.test.ts +0 -108
  219. package/tests/permission.test.ts +0 -399
  220. package/tests/role.test.ts +0 -323
  221. package/tests/scalekit.test.ts +0 -104
  222. package/tests/setup.ts +0 -34
  223. package/tests/tools.test.ts +0 -239
  224. package/tests/users.test.ts +0 -168
  225. package/tests/utils/test-data.ts +0 -481
  226. package/tsconfig.json +0 -19
@@ -1,168 +0,0 @@
1
- import ScalekitClient from '../src/scalekit';
2
- import { CreateUserRequest, UpdateUserRequest } from '../src/types/user';
3
- import { describe, it, expect, beforeEach, afterEach } from '@jest/globals';
4
- import { TestDataGenerator, TestOrganizationManager, TestUserManager } from './utils/test-data';
5
-
6
- describe('Users', () => {
7
- let client: ScalekitClient;
8
- let testOrg: string;
9
- let userId: string | null = null;
10
- let sharedUserData: CreateUserRequest;
11
-
12
- beforeEach(async () => {
13
- // Use global client
14
- client = global.client;
15
-
16
- // Create test organization for each test
17
- testOrg = await TestOrganizationManager.createTestOrganization(client);
18
-
19
- // Create a shared user for testing
20
- sharedUserData = TestDataGenerator.generateUserData();
21
- const createResponse = await client.user.createUserAndMembership(testOrg, sharedUserData);
22
- userId = createResponse.user?.id || null;
23
- expect(userId).toBeDefined();
24
- });
25
-
26
- afterEach(async () => {
27
- // Clean up test resources
28
- if (userId) {
29
- await TestUserManager.cleanupTestUser(client, testOrg, userId);
30
- userId = null;
31
- }
32
-
33
- // Clean up test organization
34
- await TestOrganizationManager.cleanupTestOrganization(client, testOrg);
35
- });
36
-
37
- describe('listOrganizationUsers', () => {
38
- it('should list users by organization', async () => {
39
- // List users in the organization
40
- const usersList = await client.user.listOrganizationUsers(testOrg, TestDataGenerator.generatePaginationParams());
41
-
42
- expect(usersList).toBeDefined();
43
- expect(usersList.users).toBeDefined();
44
- expect(Array.isArray(usersList.users)).toBe(true);
45
- expect(usersList.users.length).toBeGreaterThan(0);
46
-
47
- // Verify basic user attributes
48
- const firstUser = usersList.users[0];
49
- expect(firstUser.id).toBeDefined();
50
- expect(firstUser.email).toBeDefined();
51
- expect(firstUser.environmentId).toBeDefined();
52
- });
53
-
54
- it('should handle pagination', async () => {
55
- const firstPage = await client.user.listOrganizationUsers(testOrg, TestDataGenerator.generatePaginationParams(5));
56
-
57
- expect(firstPage).toBeDefined();
58
- expect(firstPage.users.length).toBeLessThanOrEqual(5);
59
-
60
- if (firstPage.nextPageToken) {
61
- const secondPage = await client.user.listOrganizationUsers(testOrg, {
62
- pageSize: 5,
63
- pageToken: firstPage.nextPageToken
64
- });
65
-
66
- expect(secondPage).toBeDefined();
67
- expect(secondPage.users).toBeDefined();
68
- }
69
- });
70
- });
71
-
72
- describe('getUser', () => {
73
- it('should get user by ID', async () => {
74
- // Retrieve the user by ID
75
- const user = await client.user.getUser(userId!);
76
-
77
- expect(user).toBeDefined();
78
- expect(user.user).toBeDefined();
79
- expect(user.user?.id).toBe(userId);
80
- expect(user.user?.email).toBe(sharedUserData.email);
81
- });
82
- });
83
-
84
- describe('createUserAndMembership', () => {
85
- it('should create user and membership', async () => {
86
- // Create a new user for this specific test
87
- const userData = TestDataGenerator.generateUserData();
88
- let newUserId: string | null = null;
89
-
90
- try {
91
- const response = await client.user.createUserAndMembership(testOrg, userData);
92
-
93
- expect(response).toBeDefined();
94
- expect(response.user).toBeDefined();
95
- expect(response.user?.id).toBeDefined();
96
- expect(response.user?.email).toBe(userData.email);
97
- expect(response.user?.metadata?.source).toBe('test');
98
-
99
- newUserId = response.user?.id || null;
100
- } finally {
101
- // Clean up the new user created in this test
102
- if (newUserId) {
103
- await TestUserManager.cleanupTestUser(client, testOrg, newUserId);
104
- }
105
- }
106
- });
107
-
108
- it('should throw error when email is missing', async () => {
109
- const userData = TestDataGenerator.generateUserData({ email: '' }); // Empty email
110
-
111
- await expect(
112
- client.user.createUserAndMembership(testOrg, userData)
113
- ).rejects.toThrow('email is required');
114
- });
115
-
116
- it('should throw error when organizationId is missing', async () => {
117
- const userData = TestDataGenerator.generateUserData({ email: 'test@example.com' });
118
-
119
- await expect(
120
- client.user.createUserAndMembership('', userData)
121
- ).rejects.toThrow('organizationId is required');
122
- });
123
- });
124
-
125
- describe('updateUser', () => {
126
- it('should update user', async () => {
127
- // Modify the shared user
128
- const updateData = TestDataGenerator.generateUserUpdateData();
129
-
130
- const updatedUser = await client.user.updateUser(userId!, updateData);
131
-
132
- expect(updatedUser).toBeDefined();
133
- expect(updatedUser.user).toBeDefined();
134
- expect(updatedUser.user?.id).toBe(userId);
135
- expect(updatedUser.user?.userProfile?.firstName).toBe('Updated');
136
- expect(updatedUser.user?.userProfile?.lastName).toBe('Name');
137
- });
138
- });
139
-
140
- describe('resendInvite', () => {
141
- it('should resend invite to user', async () => {
142
- // Resend invite to the shared user
143
- const resendResponse = await client.user.resendInvite(testOrg, userId!);
144
-
145
- // Verify the response structure
146
- expect(resendResponse).toBeDefined();
147
- expect(resendResponse.invite).toBeDefined();
148
- expect(resendResponse.invite?.userId).toBe(userId);
149
- expect(resendResponse.invite?.organizationId).toBe(testOrg);
150
- expect(resendResponse.invite?.status).toBe('PENDING_INVITE');
151
- expect(resendResponse.invite?.createdAt).toBeDefined();
152
- expect(resendResponse.invite?.expiresAt).toBeDefined();
153
- expect(resendResponse.invite?.resentCount).toBe(1);
154
- });
155
-
156
- it('should throw error when organizationId is missing', async () => {
157
- await expect(
158
- client.user.resendInvite('', userId!)
159
- ).rejects.toThrow('organizationId is required');
160
- });
161
-
162
- it('should throw error when userId is missing', async () => {
163
- await expect(
164
- client.user.resendInvite(testOrg, '')
165
- ).rejects.toThrow('userId is required');
166
- });
167
- });
168
- });
@@ -1,481 +0,0 @@
1
- import { CreateUserRequest, UpdateUserRequest } from '../../src/types/user';
2
- import { TemplateType } from '../../src/pkg/grpc/scalekit/v1/auth/passwordless_pb';
3
- import { DomainType } from '../../src/pkg/grpc/scalekit/v1/domains/domains_pb';
4
- import { CreateRole, UpdateRole, CreateOrganizationRole } from '../../src/pkg/grpc/scalekit/v1/roles/roles_pb';
5
- import { CreatePermission } from '../../src/pkg/grpc/scalekit/v1/roles/roles_pb';
6
-
7
- /**
8
- * Test data generation utilities to reduce redundancy across test files
9
- */
10
-
11
- export class TestDataGenerator {
12
- /**
13
- * Generate a unique timestamp-based identifier
14
- */
15
- static generateUniqueId(): string {
16
- // Alphanumeric only (no hyphens), to satisfy backend regex constraints
17
- const ts = Date.now().toString(36);
18
- const rnd = Math.random().toString(36).substr(2, 9);
19
- return `${ts}${rnd}`;
20
- }
21
-
22
- /**
23
- * Generate a unique email address for testing
24
- */
25
- static generateUniqueEmail(): string {
26
- return `test.user.${this.generateUniqueId()}@example.com`;
27
- }
28
-
29
- /**
30
- * Generate test organization data
31
- */
32
- static generateOrganizationData() {
33
- const uniqueId = this.generateUniqueId();
34
- return {
35
- name: `Test Org ${uniqueId}`,
36
- externalId: `ext_org_${uniqueId}`
37
- };
38
- }
39
-
40
- /**
41
- * Generate test user data
42
- */
43
- static generateUserData(overrides: Partial<CreateUserRequest> = {}): CreateUserRequest {
44
- const uniqueEmail = this.generateUniqueEmail();
45
-
46
- return {
47
- email: uniqueEmail,
48
- userProfile: {
49
- firstName: 'Test',
50
- lastName: 'User'
51
- },
52
- metadata: {
53
- source: 'test'
54
- },
55
- ...overrides
56
- };
57
- }
58
-
59
- /**
60
- * Generate test user update data
61
- */
62
- static generateUserUpdateData(overrides: Partial<UpdateUserRequest> = {}): UpdateUserRequest {
63
- return {
64
- userProfile: {
65
- firstName: 'Updated',
66
- lastName: 'Name'
67
- },
68
- ...overrides
69
- };
70
- }
71
-
72
- /**
73
- * Generate test passwordless email data
74
- */
75
- static generatePasswordlessEmailData(overrides: any = {}) {
76
- return {
77
- template: TemplateType.SIGNIN,
78
- state: 'test-state',
79
- expiresIn: 3600,
80
- magiclinkAuthUri: 'https://example.com/auth/callback',
81
- ...overrides
82
- };
83
- }
84
-
85
- /**
86
- * Generate test passwordless email with template variables
87
- */
88
- static generatePasswordlessEmailWithTemplateData(overrides: any = {}) {
89
- return {
90
- template: TemplateType.SIGNUP,
91
- templateVariables: {
92
- companyName: 'Test Company',
93
- appName: 'Test App'
94
- },
95
- magiclinkAuthUri: 'https://example.com/auth/callback',
96
- ...overrides
97
- };
98
- }
99
-
100
- /**
101
- * Generate test webhook data for verification
102
- */
103
- static generateWebhookData() {
104
- const secret = 'whsec_test-secret';
105
- const payload = '{"test": "data"}';
106
- const timestamp = Math.floor(Date.now() / 1000).toString();
107
- const webhookId = 'msg_test_webhook_id';
108
-
109
- // Generate valid signature for testing
110
- const crypto = require('crypto');
111
- const data = `${webhookId}.${timestamp}.${payload}`;
112
- const hmac = crypto.createHmac('sha256', Buffer.from('test-secret', 'base64'));
113
- hmac.update(data);
114
- const computedSignature = hmac.digest('base64');
115
- const signature = `v1,${computedSignature}`;
116
-
117
- return {
118
- secret,
119
- payload,
120
- timestamp,
121
- webhookId,
122
- signature,
123
- headers: {
124
- 'webhook-id': webhookId,
125
- 'webhook-timestamp': timestamp,
126
- 'webhook-signature': signature
127
- }
128
- };
129
- }
130
-
131
- /**
132
- * Generate test authorization URL options
133
- */
134
- static generateAuthorizationUrlOptions(overrides: any = {}) {
135
- return {
136
- scopes: ['openid', 'profile'],
137
- state: 'test-state',
138
- nonce: 'test-nonce',
139
- prompt: 'login',
140
- ...overrides
141
- };
142
- }
143
-
144
- /**
145
- * Generate test PKCE parameters
146
- */
147
- static generatePKCEParams() {
148
- return {
149
- codeChallenge: 'test-challenge',
150
- codeChallengeMethod: 'S256'
151
- };
152
- }
153
-
154
- /**
155
- * Generate test pagination parameters
156
- */
157
- static generatePaginationParams(pageSize: number = 10) {
158
- return {
159
- pageSize,
160
- pageToken: ''
161
- };
162
- }
163
-
164
- /**
165
- * Generate test credential data for passwordless verification
166
- */
167
- static generateCredentialData(type: 'code' | 'linkToken' = 'code') {
168
- if (type === 'code') {
169
- return { code: 'mock-code' };
170
- } else {
171
- return { linkToken: 'mock-link-token' };
172
- }
173
- }
174
-
175
- /**
176
- * Generate test domain data
177
- */
178
- static generateDomainData(domainType?: 'allowed' | 'organization') {
179
- const uniqueId = this.generateUniqueId();
180
- const baseDomain = `test-domain-${uniqueId}.com`;
181
-
182
- return {
183
- domain: baseDomain,
184
- domainType: domainType === 'allowed' ? 'ALLOWED_EMAIL_DOMAIN' :
185
- domainType === 'organization' ? 'ORGANIZATION_DOMAIN' : undefined
186
- };
187
- }
188
-
189
- /**
190
- * Generate unique domain name for testing
191
- */
192
- static generateUniqueDomainName(prefix: string = 'test'): string {
193
- const uniqueId = this.generateUniqueId();
194
- return `${prefix}-${uniqueId}.com`;
195
- }
196
-
197
- /**
198
- * Generate test role data
199
- */
200
- static generateRoleData(overrides: Partial<CreateRole> = {}): CreateRole {
201
- const uniqueId = this.generateUniqueId();
202
-
203
- return new CreateRole({
204
- name: `test_role_${uniqueId}`,
205
- displayName: `Test Role ${uniqueId}`,
206
- description: `Test role description ${uniqueId}`,
207
- permissions: [], // Initialize empty permissions array
208
- ...overrides
209
- });
210
- }
211
-
212
- /**
213
- * Generate test role update data
214
- */
215
- static generateRoleUpdateData(overrides: Partial<UpdateRole> = {}): UpdateRole {
216
- const uniqueId = this.generateUniqueId();
217
-
218
- return new UpdateRole({
219
- displayName: `Updated Role ${uniqueId}`,
220
- description: `Updated role description ${uniqueId}`,
221
- ...overrides
222
- });
223
- }
224
-
225
- /**
226
- * Generate test organization role data
227
- */
228
- static generateOrganizationRoleData(overrides: Partial<CreateOrganizationRole> = {}): CreateOrganizationRole {
229
- const uniqueId = this.generateUniqueId();
230
-
231
- return new CreateOrganizationRole({
232
- name: `test_org_role_${uniqueId}`,
233
- displayName: `Test Organization Role ${uniqueId}`,
234
- description: `Test organization role description ${uniqueId}`,
235
- permissions: [], // Initialize empty permissions array
236
- ...overrides
237
- });
238
- }
239
-
240
- /**
241
- * Generate test permission data
242
- */
243
- static generatePermissionData(overrides: Partial<CreatePermission> = {}): CreatePermission {
244
- const uniqueId = this.generateUniqueId();
245
-
246
- return new CreatePermission({
247
- name: `test_permission_${uniqueId}`,
248
- description: `Test permission description ${uniqueId}`,
249
- ...overrides
250
- });
251
- }
252
- }
253
-
254
- /**
255
- * Test organization management utilities
256
- */
257
- export class TestOrganizationManager {
258
- /**
259
- * Create a test organization and return its ID
260
- */
261
- static async createTestOrganization(client: any): Promise<string> {
262
- const orgData = TestDataGenerator.generateOrganizationData();
263
- const orgResponse = await client.organization.createOrganization(
264
- orgData.name,
265
- { externalId: orgData.externalId }
266
- );
267
-
268
- const testOrg = orgResponse.organization?.id || '';
269
- if (!testOrg) {
270
- throw new Error('Failed to create test organization');
271
- }
272
-
273
- return testOrg;
274
- }
275
-
276
- /**
277
- * Clean up a test organization
278
- */
279
- static async cleanupTestOrganization(client: any, testOrg: string): Promise<void> {
280
- if (testOrg) {
281
- try {
282
- await client.organization.deleteOrganization(testOrg);
283
- } catch (error) {
284
- // Organization may already be deleted
285
- }
286
- }
287
- }
288
- }
289
-
290
- /**
291
- * Test user management utilities
292
- */
293
- export class TestUserManager {
294
- /**
295
- * Create a test user and return user data
296
- */
297
- static async createTestUser(client: any, testOrg: string, overrides: Partial<CreateUserRequest> = {}) {
298
- const userData = TestDataGenerator.generateUserData(overrides);
299
- const createResponse = await client.user.createUserAndMembership(testOrg, userData);
300
- const createdUserId = createResponse.user?.id;
301
-
302
- if (!createdUserId) {
303
- throw new Error('Failed to create test user');
304
- }
305
-
306
- return {
307
- userId: createdUserId,
308
- userData,
309
- response: createResponse
310
- };
311
- }
312
-
313
- /**
314
- * Clean up a test user
315
- */
316
- static async cleanupTestUser(client: any, testOrg: string, userId: string): Promise<void> {
317
- if (userId) {
318
- try {
319
- // Remove membership if it exists
320
- await client.user.deleteMembership(testOrg, userId);
321
- } catch (error) {
322
- // Membership may not exist
323
- }
324
-
325
- try {
326
- await client.user.deleteUser(userId);
327
- } catch (error) {
328
- // User may already be deleted
329
- }
330
- }
331
- }
332
- }
333
-
334
- /**
335
- * Test domain management utilities
336
- */
337
- export class TestDomainManager {
338
- /**
339
- * Create a test domain and return domain data
340
- */
341
- static async createTestDomain(client: any, testOrg: string, domainType?: 'allowed' | 'organization') {
342
- const domainName = TestDataGenerator.generateUniqueDomainName();
343
- const options = domainType ? {
344
- domainType: domainType === 'allowed' ? DomainType.ALLOWED_EMAIL_DOMAIN : DomainType.ORGANIZATION_DOMAIN
345
- } : undefined;
346
-
347
- const response = await client.domain.createDomain(testOrg, domainName, options);
348
- const createdDomainId = response.domain?.id;
349
-
350
- if (!createdDomainId) {
351
- throw new Error('Failed to create test domain');
352
- }
353
-
354
- return {
355
- domainId: createdDomainId,
356
- domainName,
357
- domainType: response.domain?.domainType,
358
- response
359
- };
360
- }
361
-
362
- /**
363
- * Clean up a test domain (if domain deletion is supported)
364
- */
365
- static async cleanupTestDomain(client: any, testOrg: string, domainId: string): Promise<void> {
366
- if (domainId) {
367
- try {
368
- // Note: Domain deletion may not be implemented yet
369
- // await client.domain.deleteDomain(testOrg, domainId);
370
- } catch (error) {
371
- // Domain may already be deleted or deletion not supported
372
- }
373
- }
374
- }
375
- }
376
-
377
- /**
378
- * Test role management utilities
379
- */
380
- export class TestRoleManager {
381
- /**
382
- * Create a test role and return role data
383
- */
384
- static async createTestRole(client: any, overrides: Partial<CreateRole> = {}) {
385
- const roleData = TestDataGenerator.generateRoleData(overrides);
386
- const response = await client.role.createRole(roleData);
387
- const createdRoleName = response.role?.name;
388
-
389
- if (!createdRoleName) {
390
- throw new Error('Failed to create test role');
391
- }
392
-
393
- return {
394
- roleName: createdRoleName,
395
- roleData,
396
- response
397
- };
398
- }
399
-
400
- /**
401
- * Clean up a test role
402
- */
403
- static async cleanupTestRole(client: any, roleName: string): Promise<void> {
404
- if (roleName) {
405
- try {
406
- await client.role.deleteRole(roleName);
407
- } catch (error) {
408
- // Role may already be deleted
409
- }
410
- }
411
- }
412
-
413
- /**
414
- * Create a test organization role and return role data
415
- */
416
- static async createTestOrganizationRole(client: any, testOrg: string, overrides: Partial<CreateOrganizationRole> = {}) {
417
- const roleData = TestDataGenerator.generateOrganizationRoleData(overrides);
418
- const response = await client.role.createOrganizationRole(testOrg, roleData);
419
- const createdRoleName = response.role?.name;
420
-
421
- if (!createdRoleName) {
422
- throw new Error('Failed to create test organization role');
423
- }
424
-
425
- return {
426
- roleName: createdRoleName,
427
- roleData,
428
- response
429
- };
430
- }
431
-
432
- /**
433
- * Clean up a test organization role
434
- */
435
- static async cleanupTestOrganizationRole(client: any, testOrg: string, roleName: string): Promise<void> {
436
- if (roleName) {
437
- try {
438
- await client.role.deleteOrganizationRole(testOrg, roleName);
439
- } catch (error) {
440
- // Role may already be deleted
441
- }
442
- }
443
- }
444
- }
445
-
446
- /**
447
- * Test permission management utilities
448
- */
449
- export class TestPermissionManager {
450
- /**
451
- * Create a test permission and return permission data
452
- */
453
- static async createTestPermission(client: any, overrides: Partial<CreatePermission> = {}) {
454
- const permissionData = TestDataGenerator.generatePermissionData(overrides);
455
- const response = await client.permission.createPermission(permissionData);
456
- const createdPermissionName = response.permission?.name;
457
-
458
- if (!createdPermissionName) {
459
- throw new Error('Failed to create test permission');
460
- }
461
-
462
- return {
463
- permissionName: createdPermissionName,
464
- permissionData,
465
- response
466
- };
467
- }
468
-
469
- /**
470
- * Clean up a test permission
471
- */
472
- static async cleanupTestPermission(client: any, permissionName: string): Promise<void> {
473
- if (permissionName) {
474
- try {
475
- await client.permission.deletePermission(permissionName);
476
- } catch (error) {
477
- // Permission may already be deleted
478
- }
479
- }
480
- }
481
- }
package/tsconfig.json DELETED
@@ -1,19 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "noImplicitAny": false,
4
- "target": "ES6",
5
- "lib": ["ES2020"],
6
- "module": "commonjs",
7
- "declaration": true,
8
- "strictNullChecks": true,
9
- "strictPropertyInitialization": true,
10
- "outDir": "lib",
11
- "strict": true,
12
- "sourceMap": true,
13
- "skipLibCheck": true,
14
- "esModuleInterop": true,
15
- "typeRoots": ["src/types", "node_modules/@types"],
16
- "moduleResolution": "Node"
17
- },
18
- "include": ["src"],
19
- }