@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.
- package/{lib → cjs/src}/client/apiClient.d.ts +0 -0
- package/cjs/src/client/apiClient.js +149 -0
- package/cjs/src/client/apiClient.js.map +1 -0
- package/{lib → cjs/src}/core/api-key-names.d.ts +0 -0
- package/cjs/src/core/api-key-names.js +12 -0
- package/cjs/src/core/api-key-names.js.map +1 -0
- package/{lib → cjs/src}/core/auth-store.d.ts +0 -0
- package/cjs/src/core/auth-store.js +92 -0
- package/cjs/src/core/auth-store.js.map +1 -0
- package/{lib → cjs/src}/core/crypto.d.ts +0 -0
- package/cjs/src/core/crypto.js +3 -0
- package/cjs/src/core/crypto.js.map +1 -0
- package/{lib → cjs/src}/core/key-manager.d.ts +0 -0
- package/cjs/src/core/key-manager.js +113 -0
- package/cjs/src/core/key-manager.js.map +1 -0
- package/cjs/src/core/protected-store.d.ts +5 -0
- package/cjs/src/core/protected-store.js +3 -0
- package/cjs/src/core/protected-store.js.map +1 -0
- package/{lib → cjs/src}/core/publisher.d.ts +0 -0
- package/cjs/src/core/publisher.js +3 -0
- package/cjs/src/core/publisher.js.map +1 -0
- package/{lib → cjs/src}/core/sdk-config.d.ts +0 -0
- package/cjs/src/core/sdk-config.js +61 -0
- package/cjs/src/core/sdk-config.js.map +1 -0
- package/{lib → cjs/src}/core/subscriber.d.ts +0 -0
- package/cjs/src/core/subscriber.js +3 -0
- package/cjs/src/core/subscriber.js.map +1 -0
- package/{lib → cjs/src}/gen/graphql-types.d.ts +5 -4
- package/cjs/src/gen/graphql-types.js +105 -0
- package/cjs/src/gen/graphql-types.js.map +1 -0
- package/{lib → cjs/src}/index.d.ts +0 -0
- package/cjs/src/index.js +13 -0
- package/cjs/src/index.js.map +1 -0
- package/{lib/runtimes/node/node-crypto.d.ts → cjs/src/runtimes/browser/browser-crypto.d.ts} +0 -0
- package/cjs/src/runtimes/browser/browser-crypto.js +10 -0
- package/cjs/src/runtimes/browser/browser-crypto.js.map +1 -0
- package/cjs/src/runtimes/node/node-crypto.d.ts +2 -0
- package/cjs/src/runtimes/node/node-crypto.js +9 -0
- package/cjs/src/runtimes/node/node-crypto.js.map +1 -0
- package/{lib → cjs/src}/sdk.d.ts +0 -0
- package/cjs/src/sdk.js +9 -0
- package/cjs/src/sdk.js.map +1 -0
- package/{lib → cjs/src}/user/auth-provider.d.ts +0 -0
- package/cjs/src/user/auth-provider.js +116 -0
- package/cjs/src/user/auth-provider.js.map +1 -0
- package/{lib → cjs/src}/user/auth.d.ts +0 -0
- package/cjs/src/user/auth.js +136 -0
- package/cjs/src/user/auth.js.map +1 -0
- package/{lib → cjs/src}/user/error.d.ts +0 -0
- package/{lib → cjs/src}/user/error.js +16 -29
- package/cjs/src/user/error.js.map +1 -0
- package/{lib → cjs/src}/user/identity-provider.d.ts +0 -0
- package/cjs/src/user/identity-provider.js +245 -0
- package/cjs/src/user/identity-provider.js.map +1 -0
- package/{lib → cjs/src}/user/user-client-interface.d.ts +0 -0
- package/cjs/src/user/user-client-interface.js +3 -0
- package/cjs/src/user/user-client-interface.js.map +1 -0
- package/{lib → cjs/src}/user/user-client.d.ts +0 -0
- package/cjs/src/user/user-client.js +440 -0
- package/cjs/src/user/user-client.js.map +1 -0
- package/{lib → cjs/src}/user/user-key-names.d.ts +0 -0
- package/cjs/src/user/user-key-names.js +10 -0
- package/cjs/src/user/user-key-names.js.map +1 -0
- package/{lib → cjs/src}/utils/resolvable-promise.d.ts +0 -0
- package/cjs/src/utils/resolvable-promise.js +20 -0
- package/cjs/src/utils/resolvable-promise.js.map +1 -0
- package/cjs/test/integration/user-client-int.spec.d.ts +1 -0
- package/cjs/test/integration/user-client-int.spec.js +206 -0
- package/cjs/test/integration/user-client-int.spec.js.map +1 -0
- package/cjs/test/unit/core/sdk-config.spec.d.ts +1 -0
- package/cjs/test/unit/core/sdk-config.spec.js +51 -0
- package/cjs/test/unit/core/sdk-config.spec.js.map +1 -0
- package/cjs/test/unit/key-manager.spec.d.ts +1 -0
- package/cjs/test/unit/key-manager.spec.js +23 -0
- package/cjs/test/unit/key-manager.spec.js.map +1 -0
- package/cjs/test/unit/user-client.spec.d.ts +1 -0
- package/cjs/test/unit/user-client.spec.js +323 -0
- package/cjs/test/unit/user-client.spec.js.map +1 -0
- package/docs/assets/highlight.css +3 -3
- package/docs/assets/main.js +4 -2
- package/docs/assets/search.js +1 -1
- package/docs/assets/style.css +427 -617
- package/docs/classes/AlreadyRegisteredError.html +163 -8
- package/docs/classes/DefaultSudoUserClient.html +568 -57
- package/docs/classes/IdentityServiceConfigNotFoundError.html +163 -8
- package/docs/classes/LocalAuthenticationProvider.html +131 -12
- package/docs/classes/TESTAuthenticationProvider.html +146 -11
- package/docs/index.html +47 -2
- package/docs/interfaces/AuthenticationProvider.html +89 -6
- package/docs/interfaces/AuthenticationTokens.html +97 -7
- package/docs/interfaces/SudoUserClient.html +431 -80
- package/docs/modules.html +62 -1
- package/lib/src/client/apiClient.d.ts +25 -0
- package/lib/src/client/apiClient.js +145 -0
- package/lib/src/client/apiClient.js.map +1 -0
- package/lib/src/core/api-key-names.d.ts +8 -0
- package/lib/src/core/api-key-names.js +9 -0
- package/lib/src/core/api-key-names.js.map +1 -0
- package/lib/src/core/auth-store.d.ts +51 -0
- package/lib/src/core/auth-store.js +88 -0
- package/lib/src/core/auth-store.js.map +1 -0
- package/lib/src/core/crypto.d.ts +3 -0
- package/lib/src/core/crypto.js +2 -0
- package/lib/src/core/crypto.js.map +1 -0
- package/lib/src/core/key-manager.d.ts +31 -0
- package/lib/src/core/key-manager.js +108 -0
- package/lib/src/core/key-manager.js.map +1 -0
- package/lib/src/core/protected-store.d.ts +5 -0
- package/lib/src/core/protected-store.js +2 -0
- package/lib/src/core/protected-store.js.map +1 -0
- package/lib/src/core/publisher.d.ts +6 -0
- package/lib/src/core/publisher.js +2 -0
- package/lib/src/core/publisher.js.map +1 -0
- package/lib/src/core/sdk-config.d.ts +52 -0
- package/lib/src/core/sdk-config.js +56 -0
- package/lib/src/core/sdk-config.js.map +1 -0
- package/lib/src/core/subscriber.d.ts +3 -0
- package/lib/src/core/subscriber.js +2 -0
- package/lib/src/core/subscriber.js.map +1 -0
- package/lib/src/gen/graphql-types.d.ts +101 -0
- package/lib/src/gen/graphql-types.js +102 -0
- package/lib/src/gen/graphql-types.js.map +1 -0
- package/lib/src/index.d.ts +4 -0
- package/lib/src/index.js +6 -0
- package/lib/src/index.js.map +1 -0
- package/lib/src/runtimes/browser/browser-crypto.d.ts +2 -0
- package/lib/src/runtimes/browser/browser-crypto.js +7 -0
- package/lib/src/runtimes/browser/browser-crypto.js.map +1 -0
- package/lib/src/runtimes/node/node-crypto.d.ts +2 -0
- package/lib/src/runtimes/node/node-crypto.js +6 -0
- package/lib/src/runtimes/node/node-crypto.js.map +1 -0
- package/lib/src/sdk.d.ts +1 -0
- package/lib/src/sdk.js +6 -0
- package/lib/src/sdk.js.map +1 -0
- package/lib/src/user/auth-provider.d.ts +97 -0
- package/lib/src/user/auth-provider.js +108 -0
- package/lib/src/user/auth-provider.js.map +1 -0
- package/lib/src/user/auth.d.ts +64 -0
- package/lib/src/user/auth.js +131 -0
- package/lib/src/user/auth.js.map +1 -0
- package/lib/src/user/error.d.ts +18 -0
- package/lib/src/user/error.js +28 -0
- package/lib/src/user/error.js.map +1 -0
- package/lib/src/user/identity-provider.d.ts +73 -0
- package/lib/src/user/identity-provider.js +241 -0
- package/lib/src/user/identity-provider.js.map +1 -0
- package/lib/src/user/user-client-interface.d.ts +168 -0
- package/lib/src/user/user-client-interface.js +2 -0
- package/lib/src/user/user-client-interface.js.map +1 -0
- package/lib/src/user/user-client.d.ts +82 -0
- package/lib/src/user/user-client.js +435 -0
- package/lib/src/user/user-client.js.map +1 -0
- package/lib/src/user/user-key-names.d.ts +6 -0
- package/lib/src/user/user-key-names.js +7 -0
- package/lib/src/user/user-key-names.js.map +1 -0
- package/lib/src/utils/resolvable-promise.d.ts +9 -0
- package/lib/src/utils/resolvable-promise.js +16 -0
- package/lib/src/utils/resolvable-promise.js.map +1 -0
- package/lib/test/integration/user-client-int.spec.d.ts +1 -0
- package/lib/test/integration/user-client-int.spec.js +203 -0
- package/lib/test/integration/user-client-int.spec.js.map +1 -0
- package/lib/test/unit/core/sdk-config.spec.d.ts +1 -0
- package/lib/test/unit/core/sdk-config.spec.js +49 -0
- package/lib/test/unit/core/sdk-config.spec.js.map +1 -0
- package/lib/test/unit/key-manager.spec.d.ts +1 -0
- package/lib/test/unit/key-manager.spec.js +21 -0
- package/lib/test/unit/key-manager.spec.js.map +1 -0
- package/lib/test/unit/user-client.spec.d.ts +1 -0
- package/lib/test/unit/user-client.spec.js +320 -0
- package/lib/test/unit/user-client.spec.js.map +1 -0
- package/package.json +47 -41
- package/docs/assets/icons.css +0 -1043
- package/docs/assets/icons.png +0 -0
- package/docs/assets/icons@2x.png +0 -0
- package/lib/client/apiClient.js +0 -206
- package/lib/core/api-key-names.js +0 -15
- package/lib/core/auth-store.js +0 -144
- package/lib/core/crypto.js +0 -5
- package/lib/core/key-manager.js +0 -158
- package/lib/core/protected-store.js +0 -5
- package/lib/core/publisher.js +0 -5
- package/lib/core/sdk-config.js +0 -56
- package/lib/core/subscriber.js +0 -5
- package/lib/gen/graphql-types.js +0 -141
- package/lib/index.js +0 -67
- package/lib/runtimes/browser/browser-crypto.js +0 -15
- package/lib/runtimes/node/node-crypto.js +0 -12
- package/lib/sdk.js +0 -18
- package/lib/user/auth-provider.js +0 -158
- package/lib/user/auth.js +0 -185
- package/lib/user/identity-provider.js +0 -272
- package/lib/user/user-client-interface.js +0 -5
- package/lib/user/user-client.js +0 -530
- package/lib/user/user-key-names.js +0 -13
- 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
|