@sudoplatform/sudo-user 10.1.0 → 12.0.0

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 (195) hide show
  1. package/{lib → cjs/src}/client/apiClient.d.ts +0 -0
  2. package/cjs/src/client/apiClient.js +149 -0
  3. package/cjs/src/client/apiClient.js.map +1 -0
  4. package/{lib → cjs/src}/core/api-key-names.d.ts +0 -0
  5. package/cjs/src/core/api-key-names.js +12 -0
  6. package/cjs/src/core/api-key-names.js.map +1 -0
  7. package/{lib → cjs/src}/core/auth-store.d.ts +0 -0
  8. package/cjs/src/core/auth-store.js +92 -0
  9. package/cjs/src/core/auth-store.js.map +1 -0
  10. package/{lib → cjs/src}/core/crypto.d.ts +0 -0
  11. package/cjs/src/core/crypto.js +3 -0
  12. package/cjs/src/core/crypto.js.map +1 -0
  13. package/{lib → cjs/src}/core/key-manager.d.ts +0 -0
  14. package/cjs/src/core/key-manager.js +113 -0
  15. package/cjs/src/core/key-manager.js.map +1 -0
  16. package/cjs/src/core/protected-store.d.ts +5 -0
  17. package/cjs/src/core/protected-store.js +3 -0
  18. package/cjs/src/core/protected-store.js.map +1 -0
  19. package/{lib → cjs/src}/core/publisher.d.ts +0 -0
  20. package/cjs/src/core/publisher.js +3 -0
  21. package/cjs/src/core/publisher.js.map +1 -0
  22. package/{lib → cjs/src}/core/sdk-config.d.ts +0 -0
  23. package/cjs/src/core/sdk-config.js +61 -0
  24. package/cjs/src/core/sdk-config.js.map +1 -0
  25. package/{lib → cjs/src}/core/subscriber.d.ts +0 -0
  26. package/cjs/src/core/subscriber.js +3 -0
  27. package/cjs/src/core/subscriber.js.map +1 -0
  28. package/{lib → cjs/src}/gen/graphql-types.d.ts +5 -4
  29. package/cjs/src/gen/graphql-types.js +105 -0
  30. package/cjs/src/gen/graphql-types.js.map +1 -0
  31. package/{lib → cjs/src}/index.d.ts +0 -0
  32. package/cjs/src/index.js +13 -0
  33. package/cjs/src/index.js.map +1 -0
  34. package/{lib/runtimes/node/node-crypto.d.ts → cjs/src/runtimes/browser/browser-crypto.d.ts} +0 -0
  35. package/cjs/src/runtimes/browser/browser-crypto.js +10 -0
  36. package/cjs/src/runtimes/browser/browser-crypto.js.map +1 -0
  37. package/cjs/src/runtimes/node/node-crypto.d.ts +2 -0
  38. package/cjs/src/runtimes/node/node-crypto.js +9 -0
  39. package/cjs/src/runtimes/node/node-crypto.js.map +1 -0
  40. package/{lib → cjs/src}/sdk.d.ts +0 -0
  41. package/cjs/src/sdk.js +9 -0
  42. package/cjs/src/sdk.js.map +1 -0
  43. package/{lib → cjs/src}/user/auth-provider.d.ts +0 -0
  44. package/cjs/src/user/auth-provider.js +116 -0
  45. package/cjs/src/user/auth-provider.js.map +1 -0
  46. package/{lib → cjs/src}/user/auth.d.ts +0 -0
  47. package/cjs/src/user/auth.js +136 -0
  48. package/cjs/src/user/auth.js.map +1 -0
  49. package/{lib → cjs/src}/user/error.d.ts +0 -0
  50. package/{lib → cjs/src}/user/error.js +16 -29
  51. package/cjs/src/user/error.js.map +1 -0
  52. package/{lib → cjs/src}/user/identity-provider.d.ts +0 -0
  53. package/cjs/src/user/identity-provider.js +245 -0
  54. package/cjs/src/user/identity-provider.js.map +1 -0
  55. package/{lib → cjs/src}/user/user-client-interface.d.ts +0 -0
  56. package/cjs/src/user/user-client-interface.js +3 -0
  57. package/cjs/src/user/user-client-interface.js.map +1 -0
  58. package/{lib → cjs/src}/user/user-client.d.ts +0 -0
  59. package/cjs/src/user/user-client.js +440 -0
  60. package/cjs/src/user/user-client.js.map +1 -0
  61. package/{lib → cjs/src}/user/user-key-names.d.ts +0 -0
  62. package/cjs/src/user/user-key-names.js +10 -0
  63. package/cjs/src/user/user-key-names.js.map +1 -0
  64. package/{lib → cjs/src}/utils/resolvable-promise.d.ts +0 -0
  65. package/cjs/src/utils/resolvable-promise.js +20 -0
  66. package/cjs/src/utils/resolvable-promise.js.map +1 -0
  67. package/cjs/test/integration/user-client-int.spec.d.ts +1 -0
  68. package/cjs/test/integration/user-client-int.spec.js +206 -0
  69. package/cjs/test/integration/user-client-int.spec.js.map +1 -0
  70. package/cjs/test/unit/core/sdk-config.spec.d.ts +1 -0
  71. package/cjs/test/unit/core/sdk-config.spec.js +51 -0
  72. package/cjs/test/unit/core/sdk-config.spec.js.map +1 -0
  73. package/cjs/test/unit/key-manager.spec.d.ts +1 -0
  74. package/cjs/test/unit/key-manager.spec.js +23 -0
  75. package/cjs/test/unit/key-manager.spec.js.map +1 -0
  76. package/cjs/test/unit/user-client.spec.d.ts +1 -0
  77. package/cjs/test/unit/user-client.spec.js +323 -0
  78. package/cjs/test/unit/user-client.spec.js.map +1 -0
  79. package/docs/assets/highlight.css +3 -3
  80. package/docs/assets/main.js +4 -2
  81. package/docs/assets/search.js +1 -1
  82. package/docs/assets/style.css +427 -617
  83. package/docs/classes/AlreadyRegisteredError.html +163 -8
  84. package/docs/classes/DefaultSudoUserClient.html +568 -57
  85. package/docs/classes/IdentityServiceConfigNotFoundError.html +163 -8
  86. package/docs/classes/LocalAuthenticationProvider.html +131 -12
  87. package/docs/classes/TESTAuthenticationProvider.html +146 -11
  88. package/docs/index.html +47 -2
  89. package/docs/interfaces/AuthenticationProvider.html +89 -6
  90. package/docs/interfaces/AuthenticationTokens.html +97 -7
  91. package/docs/interfaces/SudoUserClient.html +431 -80
  92. package/docs/modules.html +62 -1
  93. package/lib/src/client/apiClient.d.ts +25 -0
  94. package/lib/src/client/apiClient.js +145 -0
  95. package/lib/src/client/apiClient.js.map +1 -0
  96. package/lib/src/core/api-key-names.d.ts +8 -0
  97. package/lib/src/core/api-key-names.js +9 -0
  98. package/lib/src/core/api-key-names.js.map +1 -0
  99. package/lib/src/core/auth-store.d.ts +51 -0
  100. package/lib/src/core/auth-store.js +88 -0
  101. package/lib/src/core/auth-store.js.map +1 -0
  102. package/lib/src/core/crypto.d.ts +3 -0
  103. package/lib/src/core/crypto.js +2 -0
  104. package/lib/src/core/crypto.js.map +1 -0
  105. package/lib/src/core/key-manager.d.ts +31 -0
  106. package/lib/src/core/key-manager.js +108 -0
  107. package/lib/src/core/key-manager.js.map +1 -0
  108. package/lib/src/core/protected-store.d.ts +5 -0
  109. package/lib/src/core/protected-store.js +2 -0
  110. package/lib/src/core/protected-store.js.map +1 -0
  111. package/lib/src/core/publisher.d.ts +6 -0
  112. package/lib/src/core/publisher.js +2 -0
  113. package/lib/src/core/publisher.js.map +1 -0
  114. package/lib/src/core/sdk-config.d.ts +52 -0
  115. package/lib/src/core/sdk-config.js +56 -0
  116. package/lib/src/core/sdk-config.js.map +1 -0
  117. package/lib/src/core/subscriber.d.ts +3 -0
  118. package/lib/src/core/subscriber.js +2 -0
  119. package/lib/src/core/subscriber.js.map +1 -0
  120. package/lib/src/gen/graphql-types.d.ts +101 -0
  121. package/lib/src/gen/graphql-types.js +102 -0
  122. package/lib/src/gen/graphql-types.js.map +1 -0
  123. package/lib/src/index.d.ts +4 -0
  124. package/lib/src/index.js +6 -0
  125. package/lib/src/index.js.map +1 -0
  126. package/lib/src/runtimes/browser/browser-crypto.d.ts +2 -0
  127. package/lib/src/runtimes/browser/browser-crypto.js +7 -0
  128. package/lib/src/runtimes/browser/browser-crypto.js.map +1 -0
  129. package/lib/src/runtimes/node/node-crypto.d.ts +2 -0
  130. package/lib/src/runtimes/node/node-crypto.js +6 -0
  131. package/lib/src/runtimes/node/node-crypto.js.map +1 -0
  132. package/lib/src/sdk.d.ts +1 -0
  133. package/lib/src/sdk.js +6 -0
  134. package/lib/src/sdk.js.map +1 -0
  135. package/lib/src/user/auth-provider.d.ts +97 -0
  136. package/lib/src/user/auth-provider.js +108 -0
  137. package/lib/src/user/auth-provider.js.map +1 -0
  138. package/lib/src/user/auth.d.ts +64 -0
  139. package/lib/src/user/auth.js +131 -0
  140. package/lib/src/user/auth.js.map +1 -0
  141. package/lib/src/user/error.d.ts +18 -0
  142. package/lib/src/user/error.js +28 -0
  143. package/lib/src/user/error.js.map +1 -0
  144. package/lib/src/user/identity-provider.d.ts +73 -0
  145. package/lib/src/user/identity-provider.js +241 -0
  146. package/lib/src/user/identity-provider.js.map +1 -0
  147. package/lib/src/user/user-client-interface.d.ts +168 -0
  148. package/lib/src/user/user-client-interface.js +2 -0
  149. package/lib/src/user/user-client-interface.js.map +1 -0
  150. package/lib/src/user/user-client.d.ts +82 -0
  151. package/lib/src/user/user-client.js +435 -0
  152. package/lib/src/user/user-client.js.map +1 -0
  153. package/lib/src/user/user-key-names.d.ts +6 -0
  154. package/lib/src/user/user-key-names.js +7 -0
  155. package/lib/src/user/user-key-names.js.map +1 -0
  156. package/lib/src/utils/resolvable-promise.d.ts +9 -0
  157. package/lib/src/utils/resolvable-promise.js +16 -0
  158. package/lib/src/utils/resolvable-promise.js.map +1 -0
  159. package/lib/test/integration/user-client-int.spec.d.ts +1 -0
  160. package/lib/test/integration/user-client-int.spec.js +203 -0
  161. package/lib/test/integration/user-client-int.spec.js.map +1 -0
  162. package/lib/test/unit/core/sdk-config.spec.d.ts +1 -0
  163. package/lib/test/unit/core/sdk-config.spec.js +49 -0
  164. package/lib/test/unit/core/sdk-config.spec.js.map +1 -0
  165. package/lib/test/unit/key-manager.spec.d.ts +1 -0
  166. package/lib/test/unit/key-manager.spec.js +21 -0
  167. package/lib/test/unit/key-manager.spec.js.map +1 -0
  168. package/lib/test/unit/user-client.spec.d.ts +1 -0
  169. package/lib/test/unit/user-client.spec.js +320 -0
  170. package/lib/test/unit/user-client.spec.js.map +1 -0
  171. package/package.json +47 -41
  172. package/docs/assets/icons.css +0 -1043
  173. package/docs/assets/icons.png +0 -0
  174. package/docs/assets/icons@2x.png +0 -0
  175. package/lib/client/apiClient.js +0 -206
  176. package/lib/core/api-key-names.js +0 -15
  177. package/lib/core/auth-store.js +0 -144
  178. package/lib/core/crypto.js +0 -5
  179. package/lib/core/key-manager.js +0 -158
  180. package/lib/core/protected-store.js +0 -5
  181. package/lib/core/publisher.js +0 -5
  182. package/lib/core/sdk-config.js +0 -56
  183. package/lib/core/subscriber.js +0 -5
  184. package/lib/gen/graphql-types.js +0 -141
  185. package/lib/index.js +0 -67
  186. package/lib/runtimes/browser/browser-crypto.js +0 -15
  187. package/lib/runtimes/node/node-crypto.js +0 -12
  188. package/lib/sdk.js +0 -18
  189. package/lib/user/auth-provider.js +0 -158
  190. package/lib/user/auth.js +0 -185
  191. package/lib/user/identity-provider.js +0 -272
  192. package/lib/user/user-client-interface.js +0 -5
  193. package/lib/user/user-client.js +0 -530
  194. package/lib/user/user-key-names.js +0 -13
  195. package/lib/utils/resolvable-promise.js +0 -22
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const sudo_common_1 = require("@sudoplatform/sudo-common");
5
+ const fs_1 = require("fs");
6
+ const uuid_1 = require("uuid");
7
+ const auth_provider_1 = require("../../src/user/auth-provider");
8
+ const error_1 = require("../../src/user/error");
9
+ const user_client_1 = require("../../src/user/user-client");
10
+ const fs_2 = tslib_1.__importDefault(require("fs"));
11
+ const sdk_config_1 = require("../../src/core/sdk-config");
12
+ const auth_1 = require("../../src/user/auth");
13
+ const globalAny = global;
14
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
15
+ global.crypto = require('crypto').webcrypto;
16
+ globalAny.WebSocket = require('ws');
17
+ require('isomorphic-fetch');
18
+ if (typeof btoa === 'undefined') {
19
+ global.btoa = function (b) {
20
+ return Buffer.from(b, 'binary').toString('base64');
21
+ };
22
+ }
23
+ if (typeof atob === 'undefined') {
24
+ global.atob = function (a) {
25
+ return Buffer.from(a, 'base64').toString('binary');
26
+ };
27
+ }
28
+ process.env.LOG_LEVEL = 'info';
29
+ process.env.PROJECT_NAME = 'SudoUser';
30
+ const registerPrivateKey = fs_2.default
31
+ .readFileSync(`${__dirname}/../../config/register_key.private`)
32
+ .toString('utf-8')
33
+ .trim();
34
+ const registerKeyId = fs_2.default
35
+ .readFileSync(`${__dirname}/../../config/register_key.id`)
36
+ .toString('utf-8')
37
+ .trim();
38
+ const configFileContents = fs_2.default
39
+ .readFileSync(`${__dirname}/../../config/sudoplatformconfig.json`)
40
+ .toString('utf-8')
41
+ .trim();
42
+ sudo_common_1.DefaultConfigurationManager.getInstance().setConfig(configFileContents);
43
+ const config = sudo_common_1.DefaultConfigurationManager.getInstance().bindConfigSet(sdk_config_1.Config, undefined);
44
+ const userClient = new user_client_1.DefaultSudoUserClient({});
45
+ const refreshTokenLifetime = config.identityService.refreshTokenLifetime ?? auth_1.DefaultRefreshTokenLifetime;
46
+ afterEach(async () => {
47
+ await userClient.sudoKeyManager.removeAllKeys();
48
+ });
49
+ async function registerAndSignIn() {
50
+ const testAuthenticationProvider = new auth_provider_1.TESTAuthenticationProvider('SudoUser', registerPrivateKey, registerKeyId, { 'custom:entitlementsSet': 'dummy_entitlements_set' });
51
+ await userClient.registerWithAuthenticationProvider(testAuthenticationProvider, 'dummy_rid');
52
+ expect(await userClient.isRegistered()).toBeTruthy();
53
+ // Sign in using private key
54
+ const authTokens = await userClient.signInWithKey();
55
+ expect(authTokens).toBeDefined();
56
+ expect(authTokens.idToken).toBeDefined();
57
+ expect(authTokens.idToken).toBe(await userClient.getIdToken());
58
+ // Verify refresh token expiry
59
+ const refreshTokenExpiry = await userClient.getRefreshTokenExpiry();
60
+ expect(refreshTokenExpiry).toBeDefined();
61
+ expect(refreshTokenExpiry?.getTime()).toBeGreaterThan(new Date().getTime() + refreshTokenLifetime * 24 * 60 * 60 * 1000 - 10000);
62
+ expect(refreshTokenExpiry?.getTime()).toBeLessThan(new Date().getTime() + refreshTokenLifetime * 24 * 60 * 60 * 1000 + 10000);
63
+ expect(await userClient.isSignedIn()).toBeTruthy();
64
+ expect(await userClient.getUserClaim('custom:entitlementsSet')).toBe('dummy_entitlements_set');
65
+ }
66
+ describe('SudoUserClient', () => {
67
+ describe('testRegister()', () => {
68
+ it('should complete successfully', async () => {
69
+ // Register
70
+ const testAuthenticationProvider = new auth_provider_1.TESTAuthenticationProvider('SudoUser', registerPrivateKey, registerKeyId, { 'custom:entitlementsSet': 'dummy_entitlements_set' });
71
+ await userClient.registerWithAuthenticationProvider(testAuthenticationProvider, 'dummy_rid');
72
+ expect(await userClient.isRegistered()).toBeTruthy();
73
+ // Sign in using private key
74
+ const authTokens = await userClient.signInWithKey();
75
+ expect(authTokens).toBeDefined();
76
+ expect(authTokens.idToken).toBeDefined();
77
+ expect(authTokens.idToken).toBe(await userClient.getIdToken());
78
+ // Verify refresh token expiry
79
+ const refreshTokenExpiry = await userClient.getRefreshTokenExpiry();
80
+ expect(refreshTokenExpiry).toBeDefined();
81
+ expect(refreshTokenExpiry?.getTime()).toBeGreaterThan(new Date().getTime() +
82
+ refreshTokenLifetime * 24 * 60 * 60 * 1000 -
83
+ 10000);
84
+ expect(refreshTokenExpiry?.getTime()).toBeLessThan(new Date().getTime() +
85
+ refreshTokenLifetime * 24 * 60 * 60 * 1000 +
86
+ 10000);
87
+ expect(await userClient.isSignedIn()).toBeTruthy();
88
+ expect(await userClient.getUserClaim('custom:entitlementsSet')).toBe('dummy_entitlements_set');
89
+ expect(await userClient.getUserClaim('custom:identityId')).toBeTruthy();
90
+ // Deregister
91
+ await userClient.deregister();
92
+ expect(await userClient.isRegistered()).toBeFalsy();
93
+ // Reset the client internal state
94
+ userClient.reset();
95
+ expect(await userClient.isSignedIn()).toBeFalsy();
96
+ }, 30000);
97
+ });
98
+ describe('testRegisterAndClearAuthTokens()', () => {
99
+ it('should complete successfully', async () => {
100
+ // Register
101
+ const testAuthenticationProvider = new auth_provider_1.TESTAuthenticationProvider('SudoUser', registerPrivateKey, registerKeyId);
102
+ await userClient.registerWithAuthenticationProvider(testAuthenticationProvider, 'dummy_rid');
103
+ expect(await userClient.isRegistered()).toBeTruthy();
104
+ // Sign in using private key
105
+ const authTokens = await userClient.signInWithKey();
106
+ expect(authTokens).toBeDefined();
107
+ expect(authTokens.idToken).toBeDefined();
108
+ expect(await userClient.isSignedIn()).toBeTruthy();
109
+ // clear auth tokens (local sign out)
110
+ await userClient.clearAuthenticationTokens();
111
+ expect(await userClient.isSignedIn()).toBeFalsy();
112
+ // Sign in again so we can call deregister
113
+ await userClient.signInWithKey();
114
+ expect(await userClient.isSignedIn()).toBeTruthy();
115
+ // Deregister
116
+ await userClient.deregister();
117
+ expect(await userClient.isRegistered()).toBeFalsy();
118
+ // Reset the client internal state
119
+ userClient.reset();
120
+ expect(await userClient.isSignedIn()).toBeFalsy();
121
+ }, 30000);
122
+ });
123
+ describe('testRegisterInvalidKeyId()', () => {
124
+ it('should fail with test registration error', async () => {
125
+ // Register
126
+ const testAuthenticationProvider = new auth_provider_1.TESTAuthenticationProvider('SudoUser', registerPrivateKey, 'invalid_key_id');
127
+ await expect(userClient.registerWithAuthenticationProvider(testAuthenticationProvider, 'dummy_rid')).rejects.toThrow(sudo_common_1.NotAuthorizedError);
128
+ // Reset the client internal state
129
+ userClient.reset();
130
+ }, 30000);
131
+ });
132
+ describe('testRegisterAndRefreshTokens()', () => {
133
+ it('should complete successfully', async () => {
134
+ await registerAndSignIn();
135
+ // Refresh the tokens
136
+ const refreshToken = await userClient.getRefreshToken();
137
+ if (!refreshToken) {
138
+ fail('refreshToken undefined');
139
+ }
140
+ const refreshedTokens = await userClient.refreshTokens(refreshToken);
141
+ const refreshedIdToken = await userClient.getIdToken();
142
+ expect(refreshedIdToken).toBe(refreshedTokens.idToken);
143
+ // Deregister
144
+ await userClient.deregister();
145
+ expect(await userClient.isRegistered()).toBeFalsy();
146
+ // Reset the client internal state
147
+ userClient.reset();
148
+ expect(await userClient.isSignedIn()).toBeFalsy();
149
+ }, 30000);
150
+ it('should fail invoking refreshTokens', async () => {
151
+ await registerAndSignIn();
152
+ // Refresh the tokens
153
+ await expect(userClient.refreshTokens('invalid_token')).rejects.toThrowError(sudo_common_1.AuthenticationError);
154
+ // Deregister
155
+ await userClient.deregister();
156
+ expect(await userClient.isRegistered()).toBeFalsy();
157
+ // Reset the client internal state
158
+ userClient.reset();
159
+ expect(await userClient.isSignedIn()).toBeFalsy();
160
+ }, 30000);
161
+ });
162
+ describe('testCustomFSSO()', () => {
163
+ const keyPath = 'config/fsso.key';
164
+ const keyIdPath = 'config/fsso.id';
165
+ if ((0, fs_1.existsSync)(keyPath) && (0, fs_1.existsSync)(keyIdPath)) {
166
+ it('should complete successfully', async () => {
167
+ const key = (0, fs_1.readFileSync)(keyPath, 'ascii').trim();
168
+ const keyId = (0, fs_1.readFileSync)(keyIdPath, 'ascii').trim();
169
+ const username = `sudouser-fsso-test-${(0, uuid_1.v4)()}`;
170
+ const authenticationProvider = new auth_provider_1.LocalAuthenticationProvider('client_system_test_iss', key, keyId, username, { 'custom:entitlementsSet': 'dummy_entitlements_set' });
171
+ const uid = await userClient.registerWithAuthenticationProvider(authenticationProvider, 'dummy_rid');
172
+ await expect(userClient.isRegistered()).resolves.toBeTruthy();
173
+ expect(uid).toBe(username);
174
+ await expect(userClient.registerWithAuthenticationProvider(authenticationProvider, 'dummy_rid')).rejects.toThrowError(error_1.AlreadyRegisteredError);
175
+ await userClient.signInWithAuthenticationProvider(authenticationProvider);
176
+ await expect(userClient.isSignedIn()).resolves.toBeTruthy();
177
+ await expect(userClient.getUserClaim('custom:entitlementsSet')).resolves.toBe('dummy_entitlements_set');
178
+ await expect(userClient.getUserClaim('custom:identityId')).resolves.toBeTruthy();
179
+ await userClient.deregister();
180
+ }, 30000);
181
+ }
182
+ else {
183
+ it('skip test.', () => {
184
+ console.log('No sudoplatformconfig.json, key and key ID file found. Skipping tests.');
185
+ });
186
+ }
187
+ });
188
+ describe('signOut()', () => {
189
+ it('should complete successfully', async () => {
190
+ await registerAndSignIn();
191
+ const refreshToken = await userClient.getRefreshToken();
192
+ if (!refreshToken) {
193
+ fail('Refresh token not found.');
194
+ }
195
+ await userClient.signOut();
196
+ await expect(userClient.refreshTokens(refreshToken)).rejects.toThrowError(sudo_common_1.AuthenticationError);
197
+ }, 30000);
198
+ });
199
+ describe('globalSignOut()', () => {
200
+ it('should complete successfully', async () => {
201
+ await registerAndSignIn();
202
+ await userClient.globalSignOut();
203
+ }, 30000);
204
+ });
205
+ });
206
+ //# sourceMappingURL=user-client-int.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-client-int.spec.js","sourceRoot":"","sources":["../../../test/integration/user-client-int.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const sudo_common_1 = require("@sudoplatform/sudo-common");
4
+ const sdk_config_1 = require("../../../src/core/sdk-config");
5
+ const error_1 = require("../../../src/user/error");
6
+ const testFederatedSignInConfig = {
7
+ appClientId: '120q904mra9d5l4psmvdbrgm49',
8
+ signInRedirectUri: 'http://localhost:3000/callback',
9
+ signOutRedirectUri: 'http://localhost:3000/',
10
+ webDomain: 'id-dev-fsso-sudoplatform.auth.us-east-1.amazoncognito.com',
11
+ };
12
+ const testIdentityServiceConfig = {
13
+ region: 'us-east-1',
14
+ poolId: 'us-east-1_ZiPDToF73',
15
+ clientId: '120q904mra9d5l4psmvdbrgm49',
16
+ identityPoolId: 'us-east-1:8fe6d8ed-cd77-4622-b1bb-3f0c147638ad',
17
+ apiUrl: 'https://mqn7cjrzcrd75jpsma3xw4744a.appsync-api.us-east-1.amazonaws.com/graphql',
18
+ apiKey: 'da2-xejsa343urfifmzkycmz3rqdom',
19
+ bucket: 'ids-userdata-id-dev-fsso-userdatabucket2d841c35-j9x47k5042fk',
20
+ transientBucket: 'ids-userdata-id-dev-fsso-transientuserdatabucket0-1enoeyoho1sjl',
21
+ registrationMethods: ['TEST', 'FSSO'],
22
+ };
23
+ describe('sdk-config tests', () => {
24
+ describe('getIdentityServiceConfig', () => {
25
+ it('should throw IdentityServiceConfigNotFoundError if identityService stanza not present in config', () => {
26
+ sudo_common_1.DefaultConfigurationManager.getInstance().setConfig(JSON.stringify({
27
+ federatedSignIn: testFederatedSignInConfig,
28
+ }));
29
+ expect(() => (0, sdk_config_1.getIdentityServiceConfig)()).toThrowError(error_1.IdentityServiceConfigNotFoundError);
30
+ });
31
+ it('should return identityServiceConfig without FSSO config', () => {
32
+ sudo_common_1.DefaultConfigurationManager.getInstance().setConfig(JSON.stringify({
33
+ identityService: testIdentityServiceConfig,
34
+ }));
35
+ expect((0, sdk_config_1.getIdentityServiceConfig)()).toEqual({
36
+ identityService: testIdentityServiceConfig,
37
+ });
38
+ });
39
+ it('should return identityServiceConfig with FSSO config', () => {
40
+ sudo_common_1.DefaultConfigurationManager.getInstance().setConfig(JSON.stringify({
41
+ identityService: testIdentityServiceConfig,
42
+ federatedSignIn: testFederatedSignInConfig,
43
+ }));
44
+ expect((0, sdk_config_1.getIdentityServiceConfig)()).toEqual({
45
+ identityService: testIdentityServiceConfig,
46
+ federatedSignIn: testFederatedSignInConfig,
47
+ });
48
+ });
49
+ });
50
+ });
51
+ //# sourceMappingURL=sdk-config.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk-config.spec.js","sourceRoot":"","sources":["../../../../test/unit/core/sdk-config.spec.ts"],"names":[],"mappings":";;AAAA,2DAAuE;AACvE,6DAAuE;AACvE,mDAA4E;AAE5E,MAAM,yBAAyB,GAAG;IAChC,WAAW,EAAE,4BAA4B;IACzC,iBAAiB,EAAE,gCAAgC;IACnD,kBAAkB,EAAE,wBAAwB;IAC5C,SAAS,EAAE,2DAA2D;CACvE,CAAA;AACD,MAAM,yBAAyB,GAAG;IAChC,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,qBAAqB;IAC7B,QAAQ,EAAE,4BAA4B;IACtC,cAAc,EAAE,gDAAgD;IAChE,MAAM,EACJ,gFAAgF;IAClF,MAAM,EAAE,gCAAgC;IACxC,MAAM,EAAE,8DAA8D;IACtE,eAAe,EACb,iEAAiE;IACnE,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;CACtC,CAAA;AAED,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,EAAE,CAAC,iGAAiG,EAAE,GAAG,EAAE;YACzG,yCAA2B,CAAC,WAAW,EAAE,CAAC,SAAS,CACjD,IAAI,CAAC,SAAS,CAAC;gBACb,eAAe,EAAE,yBAAyB;aAC3C,CAAC,CACH,CAAA;YAED,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,qCAAwB,GAAE,CAAC,CAAC,YAAY,CACnD,0CAAkC,CACnC,CAAA;QACH,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,yCAA2B,CAAC,WAAW,EAAE,CAAC,SAAS,CACjD,IAAI,CAAC,SAAS,CAAC;gBACb,eAAe,EAAE,yBAAyB;aAC3C,CAAC,CACH,CAAA;YAED,MAAM,CAAC,IAAA,qCAAwB,GAAE,CAAC,CAAC,OAAO,CAAC;gBACzC,eAAe,EAAE,yBAAyB;aAC3C,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,yCAA2B,CAAC,WAAW,EAAE,CAAC,SAAS,CACjD,IAAI,CAAC,SAAS,CAAC;gBACb,eAAe,EAAE,yBAAyB;gBAC1C,eAAe,EAAE,yBAAyB;aAC3C,CAAC,CACH,CAAA;YAED,MAAM,CAAC,IAAA,qCAAwB,GAAE,CAAC,CAAC,OAAO,CAAC;gBACzC,eAAe,EAAE,yBAAyB;gBAC1C,eAAe,EAAE,yBAAyB;aAC3C,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const ts_mockito_1 = require("ts-mockito");
4
+ const key_manager_1 = require("../../src/core/key-manager");
5
+ const commonKeyManagerMock = (0, ts_mockito_1.mock)();
6
+ describe('KeyManager Test Suite', () => {
7
+ let instanceUnderTest;
8
+ beforeEach(() => {
9
+ (0, ts_mockito_1.reset)(commonKeyManagerMock);
10
+ instanceUnderTest = new key_manager_1.KeyManager((0, ts_mockito_1.instance)(commonKeyManagerMock));
11
+ });
12
+ describe('addString', () => {
13
+ it('passes a buffer to the sudo key manager instance', async () => {
14
+ await instanceUnderTest.addString('dummyKeyId', 'dummyValue');
15
+ (0, ts_mockito_1.verify)(commonKeyManagerMock.addPassword((0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).once();
16
+ const [actualBuffer, actualKeyId] = (0, ts_mockito_1.capture)(commonKeyManagerMock.addPassword).first();
17
+ expect(actualBuffer).toBeInstanceOf(ArrayBuffer);
18
+ expect(actualBuffer).toStrictEqual(new TextEncoder().encode('dummyValue').buffer);
19
+ expect(actualKeyId).toStrictEqual('dummyKeyId');
20
+ });
21
+ });
22
+ });
23
+ //# sourceMappingURL=key-manager.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-manager.spec.js","sourceRoot":"","sources":["../../../test/unit/key-manager.spec.ts"],"names":[],"mappings":";;AACA,2CAA6E;AAC7E,4DAAuD;AAEvD,MAAM,oBAAoB,GAAG,IAAA,iBAAI,GAAkB,CAAA;AAEnD,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,IAAI,iBAA6B,CAAA;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,IAAA,kBAAK,EAAC,oBAAoB,CAAC,CAAA;QAC3B,iBAAiB,GAAG,IAAI,wBAAU,CAAC,IAAA,qBAAQ,EAAC,oBAAoB,CAAC,CAAC,CAAA;IACpE,CAAC,CAAC,CAAA;IACF,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;YAChE,MAAM,iBAAiB,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;YAC7D,IAAA,mBAAM,EAAC,oBAAoB,CAAC,WAAW,CAAC,IAAA,qBAAQ,GAAE,EAAE,IAAA,qBAAQ,GAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACvE,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,GAAG,IAAA,oBAAO,EACzC,oBAAoB,CAAC,WAAW,CACjC,CAAC,KAAK,EAAE,CAAA;YACT,MAAM,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;YAChD,MAAM,CAAC,YAAY,CAAC,CAAC,aAAa,CAChC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAC9C,CAAA;YACD,MAAM,CAAC,WAAW,CAAC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,323 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const auth_1 = require("../../src/user/auth");
5
+ const user_client_1 = require("../../src/user/user-client");
6
+ const sdk_config_1 = require("../../src/core/sdk-config");
7
+ const ts_mockito_1 = require("ts-mockito");
8
+ const JWT = tslib_1.__importStar(require("jsonwebtoken"));
9
+ const crypto_1 = require("crypto");
10
+ const api_key_names_1 = require("../../src/core/api-key-names");
11
+ const sudo_common_1 = require("@sudoplatform/sudo-common");
12
+ const crypto_2 = require("crypto");
13
+ const util_1 = require("util");
14
+ const auth_provider_1 = require("../../src/user/auth-provider");
15
+ const user_key_names_1 = require("../../src/user/user-key-names");
16
+ const generateKeyPairAsync = (0, util_1.promisify)(crypto_2.generateKeyPair);
17
+ const globalAny = global;
18
+ globalAny.WebSocket = require('ws');
19
+ require('isomorphic-fetch');
20
+ const testConfig = {
21
+ federatedSignIn: {
22
+ appClientId: '120q904mra9d5l4psmvdbrgm49',
23
+ signInRedirectUri: 'http://localhost:3000/callback',
24
+ signOutRedirectUri: 'http://localhost:3000/',
25
+ webDomain: 'id-dev-fsso-sudoplatform.auth.us-east-1.amazoncognito.com',
26
+ },
27
+ identityService: {
28
+ region: 'us-east-1',
29
+ poolId: 'us-east-1_ZiPDToF73',
30
+ clientId: '120q904mra9d5l4psmvdbrgm49',
31
+ identityPoolId: 'us-east-1:8fe6d8ed-cd77-4622-b1bb-3f0c147638ad',
32
+ apiUrl: 'https://mqn7cjrzcrd75jpsma3xw4744a.appsync-api.us-east-1.amazonaws.com/graphql',
33
+ apiKey: 'da2-xejsa343urfifmzkycmz3rqdom',
34
+ bucket: 'ids-userdata-id-dev-fsso-userdatabucket2d841c35-j9x47k5042fk',
35
+ transientBucket: 'ids-userdata-id-dev-fsso-transientuserdatabucket0-1enoeyoho1sjl',
36
+ registrationMethods: ['TEST', 'FSSO'],
37
+ },
38
+ };
39
+ const privateKey = (0, crypto_1.generateKeyPairSync)('rsa', {
40
+ modulusLength: 2048,
41
+ publicKeyEncoding: {
42
+ format: 'pem',
43
+ type: 'pkcs1',
44
+ },
45
+ privateKeyEncoding: {
46
+ format: 'pem',
47
+ type: 'pkcs1',
48
+ },
49
+ }).privateKey;
50
+ const kid = 'test';
51
+ const mockIdToken = 'eyJraWQiOiJ3YzlaekU1eDJMT1BvZVV1XC9cL1JPWnZCV3ozbU1Zem15bXJDTFhYTmRvcms9IiwiYWxnIjoiUlMyNTYifQ.eyJjdXN0b206b2dfaWRlbnRpdHlJZCI6InVzLWVhc3QtMTo4MzE3MThmNC00MzFlLTQ0MDgtYjM0Yi02YmM3MWZjNDJmZmIiLCJzdWIiOiIxMzA4MGI0OS1jMjc3LTQ4M2QtOGQ0Zi0yZGVmZGIyNjE0ZDQiLCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAudXMtZWFzdC0xLmFtYXpvbmF3cy5jb21cL3VzLWVhc3QtMV9aaVBEVG9GNzMiLCJjb2duaXRvOnVzZXJuYW1lIjoiU3Vkb1VzZXItMGNhZmYzNzEtMjc4Zi00ODE0LWE4NjQtN2NhMTdmYWU2ODg1IiwiY3VzdG9tOnVzZXJUeXBlIjoiVEVTVCIsImF1ZCI6IjEyMHE5MDRtcmE5ZDVsNHBzbXZkYnJnbTQ5IiwiY3VzdG9tOmVudGl0bGVtZW50c1NldCI6ImR1bW15X2VudGl0bGVtZW50c19zZXQiLCJldmVudF9pZCI6Ijg2YzFhZDFkLTMwNDItNDFjMC05OTVmLTQ3ZTM0NWNjMjUxZCIsImN1c3RvbTpvZ19zdWIiOiIxMzA4MGI0OS1jMjc3LTQ4M2QtOGQ0Zi0yZGVmZGIyNjE0ZDQiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTYyMjQyNzA5NywiY3VzdG9tOmlkZW50aXR5SWQiOiJ1cy1lYXN0LTE6ODMxNzE4ZjQtNDMxZS00NDA4LWIzNGItNmJjNzFmYzQyZmZiIiwiZXhwIjoxNjIyNDMwNzAyLCJpYXQiOjE2MjI0MjcxMDJ9.WfhwPvhZn9STh4BSMI_w9PIx9YmAKqEyCJYuJ8NDJCfbATtwSt3QRyYILMjx6mY8IYgnEwyfoDu3Lz5-fb2tBCANz4lykW5lzS7-FxCZ2Ba4Ywr89b2cCayp3Aw3dVSHwwPtFu7-odwnHR9tpZd7jHeIVBlKQIn0WLppRTU9H1AIJh8Pq9FS6YK7uIFaOmNZxe_S18HlT8GQJNwqPZk4P8QEVyazKN9fKidO8EcQVrJoCZnJHCPP9hzum7yo2HJWvWhhlN2Si-VnqfCwDG4hpig9NcCUkGbrOYKCpDjCRZhBhcnpec310X8Lf3Qya8wZEFs1IcYHnhdKpfX4A1DYLQ';
52
+ function customLaunchUriFunction(url) {
53
+ location.replace(url);
54
+ }
55
+ function toArrayBuffer(value) {
56
+ return new TextEncoder().encode(value).buffer;
57
+ }
58
+ const authUIMock = (0, ts_mockito_1.mock)();
59
+ const authUI = (0, ts_mockito_1.instance)(authUIMock);
60
+ const identityProviderMock = (0, ts_mockito_1.mock)();
61
+ const identityProvider = (0, ts_mockito_1.instance)(identityProviderMock);
62
+ const authenticationStoreMock = (0, ts_mockito_1.mock)();
63
+ const authenticationStore = (0, ts_mockito_1.instance)(authenticationStoreMock);
64
+ const keyManagerMock = (0, ts_mockito_1.mock)();
65
+ const keyManager = (0, ts_mockito_1.instance)(keyManagerMock);
66
+ const sudoKeyManagerMock = (0, ts_mockito_1.mock)();
67
+ const sudoKeyManager = (0, ts_mockito_1.instance)(sudoKeyManagerMock);
68
+ const apiClientMock = (0, ts_mockito_1.mock)();
69
+ const apiClient = (0, ts_mockito_1.instance)(apiClientMock);
70
+ sudo_common_1.DefaultConfigurationManager.getInstance().setConfig(JSON.stringify(testConfig));
71
+ const userClient = new user_client_1.DefaultSudoUserClient({
72
+ authenticationStore,
73
+ apiClient,
74
+ authUI,
75
+ identityProvider,
76
+ sudoKeyManager,
77
+ });
78
+ const config = sudo_common_1.DefaultConfigurationManager.getInstance().bindConfigSet(sdk_config_1.Config, undefined);
79
+ const logger = new sudo_common_1.DefaultLogger();
80
+ afterEach(() => {
81
+ (0, ts_mockito_1.reset)(authUIMock);
82
+ (0, ts_mockito_1.reset)(authenticationStoreMock);
83
+ (0, ts_mockito_1.reset)(keyManagerMock);
84
+ (0, ts_mockito_1.reset)(sudoKeyManagerMock);
85
+ (0, ts_mockito_1.reset)(identityProviderMock);
86
+ userClient.setAuthUI(authUI);
87
+ userClient.setIdentityProvider(identityProvider);
88
+ });
89
+ describe('SudoUserClient', () => {
90
+ describe('presentFederatedSignInUI()', () => {
91
+ it('should fail with authentication error - default launchUri - attempt to launch UI with window.open', async () => {
92
+ if (!config.federatedSignIn) {
93
+ fail('federatedSignIn unexpectedly falsy');
94
+ }
95
+ const authUI = new auth_1.CognitoAuthUI(authenticationStore, config.federatedSignIn, keyManager, logger);
96
+ userClient.setAuthUI(authUI);
97
+ expect(() => userClient.presentFederatedSignInUI()).toThrowError(sudo_common_1.AuthenticationError);
98
+ });
99
+ it('should fail with authentication error - custom launchUri - attempt to launch UI with location.replace(url)', async () => {
100
+ if (!config.federatedSignIn) {
101
+ fail('federatedSignIn unexpectedly falsy');
102
+ }
103
+ const authUI = new auth_1.CognitoAuthUI(authenticationStore, config.federatedSignIn, keyManager, logger, customLaunchUriFunction);
104
+ userClient.setAuthUI(authUI);
105
+ expect(() => userClient.presentFederatedSignInUI()).toThrowError(sudo_common_1.AuthenticationError);
106
+ });
107
+ });
108
+ describe('processFederatedSignInTokens()', () => {
109
+ it('should complete successfully', async () => {
110
+ (0, ts_mockito_1.when)(authUIMock.processFederatedSignInTokens('dummy_url')).thenResolve({
111
+ idToken: 'dummy_id_token',
112
+ accessToken: 'dummy_access_token',
113
+ refreshToken: 'dummy_refresh_token',
114
+ tokenExpiry: 12345,
115
+ });
116
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(user_key_names_1.userKeyNames.userId)).thenResolve(toArrayBuffer('dummy_username'));
117
+ (0, ts_mockito_1.when)(identityProviderMock.refreshTokens('dummy_refresh_token')).thenResolve({
118
+ idToken: mockIdToken,
119
+ accessToken: 'dummy_access_token',
120
+ refreshToken: 'dummy_refresh_token',
121
+ tokenExpiry: 12345,
122
+ });
123
+ const authTokens = await userClient.processFederatedSignInTokens('dummy_url');
124
+ expect(authTokens.idToken).toBe(mockIdToken);
125
+ expect(authTokens.accessToken).toBe('dummy_access_token');
126
+ expect(authTokens.refreshToken).toBe('dummy_refresh_token');
127
+ expect(authTokens.tokenExpiry).toBe(12345);
128
+ });
129
+ it('should fail with authentication error', async () => {
130
+ (0, ts_mockito_1.when)(authUIMock.processFederatedSignInTokens('dummy_url')).thenReject();
131
+ await expect(userClient.processFederatedSignInTokens('dummy_url')).rejects.toThrowError(sudo_common_1.AuthenticationError);
132
+ });
133
+ });
134
+ describe('getSubject()', () => {
135
+ const token = JWT.sign({}, privateKey, {
136
+ jwtid: '123',
137
+ audience: 'testAudience',
138
+ expiresIn: '10s',
139
+ notBefore: '0m',
140
+ subject: 'dummy_sub',
141
+ issuer: 'https://test.sudoplatform.com',
142
+ header: { alg: 'RS256', kid },
143
+ algorithm: 'RS256',
144
+ });
145
+ it('should complete successfully', async () => {
146
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.idToken)).thenResolve(toArrayBuffer(token));
147
+ const sub = await userClient.getSubject();
148
+ expect(sub).toBe('dummy_sub');
149
+ });
150
+ });
151
+ describe('getUserName()', () => {
152
+ it('should complete successfully', async () => {
153
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(user_key_names_1.userKeyNames.userId)).thenResolve(toArrayBuffer('test_user'));
154
+ const userName = await userClient.getUserName();
155
+ expect(userName).toBe('test_user');
156
+ });
157
+ });
158
+ describe('refreshTokens()', () => {
159
+ it('should complete successfully', async () => {
160
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(user_key_names_1.userKeyNames.userId)).thenResolve(toArrayBuffer('test_user'));
161
+ (0, ts_mockito_1.when)(identityProviderMock.refreshTokens('refresh_token')).thenResolve({
162
+ idToken: 'dummy_id_token',
163
+ accessToken: 'dummy_access_token',
164
+ refreshToken: 'dummy_refresh_token',
165
+ tokenExpiry: 12345,
166
+ });
167
+ const authTokens = await userClient.refreshTokens('refresh_token');
168
+ expect(authTokens.idToken).toBe('dummy_id_token');
169
+ expect(authTokens.accessToken).toBe('dummy_access_token');
170
+ expect(authTokens.refreshToken).toBe('dummy_refresh_token');
171
+ expect(authTokens.tokenExpiry).toBe(12345);
172
+ });
173
+ it('should fail with authentication error', async () => {
174
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(user_key_names_1.userKeyNames.userId)).thenResolve(toArrayBuffer('test_user'));
175
+ (0, ts_mockito_1.when)(identityProviderMock.refreshTokens('refresh_token')).thenReject();
176
+ await expect(userClient.refreshTokens('refresh_token')).rejects.toThrowError(sudo_common_1.AuthenticationError);
177
+ });
178
+ });
179
+ describe('getLatestAuthToken()', () => {
180
+ it('should complete successfully', async () => {
181
+ const tokenExpiry = new Date().getTime() + 3600000;
182
+ const validTokenExpiry = tokenExpiry / 1000;
183
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.idToken)).thenResolve(toArrayBuffer('dummy_id_token'));
184
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.refreshToken)).thenResolve(toArrayBuffer('dummy_refresh_token'));
185
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.tokenExpiry)).thenResolve(toArrayBuffer(validTokenExpiry.toString()));
186
+ const idToken = await userClient.getLatestAuthToken();
187
+ expect(idToken).toBe('dummy_id_token');
188
+ });
189
+ it('should return empty token - user not signed in', async () => {
190
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.idToken)).thenResolve();
191
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.refreshToken)).thenResolve();
192
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.tokenExpiry)).thenResolve();
193
+ const empty = '';
194
+ const idToken = await userClient.getLatestAuthToken();
195
+ expect(idToken).toBe(empty);
196
+ });
197
+ it('should return empty token - error encountered calling refreshTokens', async () => {
198
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.idToken)).thenResolve(toArrayBuffer('id_token'));
199
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.refreshToken)).thenResolve(toArrayBuffer('refresh_token'));
200
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.tokenExpiry)).thenResolve(toArrayBuffer('100'));
201
+ (0, ts_mockito_1.when)(identityProviderMock.refreshTokens('refresh_token')).thenReject();
202
+ const empty = '';
203
+ const idToken = await userClient.getLatestAuthToken();
204
+ expect(idToken).toBe(empty);
205
+ });
206
+ });
207
+ describe('signOut()', () => {
208
+ it('should complete successfully', async () => {
209
+ let isSignedOut = false;
210
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.refreshToken)).thenResolve(toArrayBuffer('dummy_refresh_token'));
211
+ await userClient.signOut();
212
+ isSignedOut = true;
213
+ expect(isSignedOut).toBeTruthy();
214
+ });
215
+ it('should fail if not signed in', async () => {
216
+ await expect(userClient.signOut()).rejects.toThrowError(sudo_common_1.NotSignedInError);
217
+ });
218
+ });
219
+ describe('globalSignOut()', () => {
220
+ it('should complete successfully', async () => {
221
+ let isSignedOut = false;
222
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.idToken)).thenResolve(toArrayBuffer('dummy_id_token'));
223
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.accessToken)).thenResolve(toArrayBuffer('dummy_access_token'));
224
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.refreshToken)).thenResolve(toArrayBuffer('dummy_refresh_token'));
225
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.tokenExpiry)).thenResolve(toArrayBuffer(Number(new Date().getTime() + 60 * 1000).toString()));
226
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.refreshTokenExpiry)).thenResolve(toArrayBuffer(Number(new Date().getTime() + 60 * 60 * 1000 + 10000).toString()));
227
+ await userClient.globalSignOut();
228
+ isSignedOut = true;
229
+ expect(isSignedOut).toBeTruthy();
230
+ });
231
+ it('should fail if not signed in', async () => {
232
+ await expect(userClient.globalSignOut()).rejects.toThrowError(sudo_common_1.NotSignedInError);
233
+ });
234
+ });
235
+ describe('presentSignOutUI()', () => {
236
+ it('should fail trying to invoke signout url - attempt to launch UI with window.open', async () => {
237
+ if (!config.federatedSignIn) {
238
+ fail('federatedSignIn unexpectedly falsy');
239
+ }
240
+ const authUI = new auth_1.CognitoAuthUI(authenticationStore, config.federatedSignIn, keyManager, logger);
241
+ userClient.setAuthUI(authUI);
242
+ expect(() => userClient.presentSignOutUI()).toThrowError(new Error('window is not defined'));
243
+ });
244
+ });
245
+ describe('isSignedIn()', () => {
246
+ it('should complete successfully', async () => {
247
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.idToken)).thenResolve(toArrayBuffer('dummy_id_token'));
248
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.accessToken)).thenResolve(toArrayBuffer('dummy_access_token'));
249
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.refreshToken)).thenResolve(toArrayBuffer('dummy_refresh_token'));
250
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.tokenExpiry)).thenResolve(toArrayBuffer(Number(new Date().getTime() + 60 * 1000).toString()));
251
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.refreshTokenExpiry)).thenResolve(toArrayBuffer(Number(new Date().getTime() + 60 * 60 * 1000 + 10000).toString()));
252
+ expect(await userClient.isSignedIn()).toBeTruthy();
253
+ });
254
+ });
255
+ describe('customFSSO()', () => {
256
+ it('should complete successfully', async () => {
257
+ const keyPair = await generateKeyPairAsync('rsa', {
258
+ modulusLength: 2048,
259
+ publicKeyEncoding: {
260
+ format: 'pem',
261
+ type: 'pkcs1',
262
+ },
263
+ privateKeyEncoding: {
264
+ format: 'pem',
265
+ type: 'pkcs1',
266
+ },
267
+ });
268
+ const authenticationProvider = new auth_provider_1.LocalAuthenticationProvider('client_system_test_iss', keyPair.privateKey, 'dummy_key_id', 'dummy_username');
269
+ const authInfo = await authenticationProvider.getAuthenticationInfo();
270
+ expect(authInfo.isValid()).toBeTruthy();
271
+ expect(authInfo.getUsername()).toBe('dummy_username');
272
+ const token = authInfo.encode();
273
+ const decoded = JWT.decode(token, { complete: true });
274
+ expect(decoded.header['kid']).toBe('dummy_key_id');
275
+ const verified = JWT.verify(token, keyPair.publicKey, {
276
+ issuer: 'client_system_test_iss',
277
+ audience: 'identity-service',
278
+ subject: 'dummy_username',
279
+ algorithms: ['RS256'],
280
+ });
281
+ expect(verified).toBeTruthy();
282
+ const authUIMock = (0, ts_mockito_1.mock)();
283
+ const authUI = (0, ts_mockito_1.instance)(authUIMock);
284
+ userClient.setAuthUI(authUI);
285
+ (0, ts_mockito_1.when)(identityProviderMock.signInWithToken('dummy_username', (0, ts_mockito_1.anyString)(), 'FSSO')).thenResolve({
286
+ idToken: mockIdToken,
287
+ accessToken: 'dummy_access_token',
288
+ refreshToken: 'dummy_refresh_token',
289
+ tokenExpiry: 1,
290
+ });
291
+ (0, ts_mockito_1.when)(keyManagerMock.getString(api_key_names_1.apiKeyNames.idToken)).thenResolve(mockIdToken);
292
+ (0, ts_mockito_1.when)(sudoKeyManagerMock.getPassword(api_key_names_1.apiKeyNames.idToken)).thenResolve(toArrayBuffer(mockIdToken));
293
+ const tokens = await userClient.signInWithAuthenticationProvider(authenticationProvider);
294
+ expect(tokens.idToken).toBe(mockIdToken);
295
+ expect(tokens.accessToken).toBe('dummy_access_token');
296
+ expect(tokens.refreshToken).toBe('dummy_refresh_token');
297
+ expect(tokens.tokenExpiry).toBe(1);
298
+ expect(await userClient.getUserClaim('custom:identityId')).toBeTruthy();
299
+ });
300
+ });
301
+ describe('disabledUser()', () => {
302
+ it('signInWithToken should fail due to user being disabled', async () => {
303
+ const keyPair = await generateKeyPairAsync('rsa', {
304
+ modulusLength: 2048,
305
+ publicKeyEncoding: {
306
+ format: 'pem',
307
+ type: 'pkcs1',
308
+ },
309
+ privateKeyEncoding: {
310
+ format: 'pem',
311
+ type: 'pkcs1',
312
+ },
313
+ });
314
+ const authenticationProvider = new auth_provider_1.LocalAuthenticationProvider('client_system_test_iss', keyPair.privateKey, 'dummy_key_id', 'disabled_username');
315
+ const authInfo = await authenticationProvider.getAuthenticationInfo();
316
+ expect(authInfo.isValid()).toBeTruthy();
317
+ expect(authInfo.getUsername()).toBe('disabled_username');
318
+ (0, ts_mockito_1.when)(identityProviderMock.signInWithToken('disabled_username', (0, ts_mockito_1.anyString)(), (0, ts_mockito_1.anyString)())).thenReject(new sudo_common_1.AuthenticationError('User disabled')); // reject due to user disabled error being returned from Cognito
319
+ await expect(userClient.signInWithAuthenticationProvider(authenticationProvider)).rejects.toThrowError(sudo_common_1.AuthenticationError);
320
+ });
321
+ });
322
+ });
323
+ //# sourceMappingURL=user-client.spec.js.map