@affinidi/cli 2.0.0-beta.9 → 2.1.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/README.md +139 -55
- package/dist/commands/generate/app.d.ts +5 -0
- package/dist/commands/generate/app.js +54 -59
- package/dist/commands/generate/app.js.map +1 -1
- package/dist/commands/iam/add-principal.js +8 -9
- package/dist/commands/iam/add-principal.js.map +1 -1
- package/dist/commands/iam/get-policies.js +8 -9
- package/dist/commands/iam/get-policies.js.map +1 -1
- package/dist/commands/iam/list-principals.js +1 -2
- package/dist/commands/iam/list-principals.js.map +1 -1
- package/dist/commands/iam/remove-principal.js +8 -9
- package/dist/commands/iam/remove-principal.js.map +1 -1
- package/dist/commands/iam/update-policies.js +18 -17
- package/dist/commands/iam/update-policies.js.map +1 -1
- package/dist/commands/login/add-user-to-group.d.ts +1 -1
- package/dist/commands/login/add-user-to-group.js +9 -10
- package/dist/commands/login/add-user-to-group.js.map +1 -1
- package/dist/commands/login/create-config.js +13 -14
- package/dist/commands/login/create-config.js.map +1 -1
- package/dist/commands/login/create-group.js +3 -4
- package/dist/commands/login/create-group.js.map +1 -1
- package/dist/commands/login/delete-config.js +5 -6
- package/dist/commands/login/delete-config.js.map +1 -1
- package/dist/commands/login/delete-group.js +5 -6
- package/dist/commands/login/delete-group.js.map +1 -1
- package/dist/commands/login/export-configs.d.ts +10 -0
- package/dist/commands/login/export-configs.js +67 -0
- package/dist/commands/login/export-configs.js.map +1 -0
- package/dist/commands/login/export-groups.d.ts +10 -0
- package/dist/commands/login/export-groups.js +64 -0
- package/dist/commands/login/export-groups.js.map +1 -0
- package/dist/commands/login/get-config.js +5 -6
- package/dist/commands/login/get-config.js.map +1 -1
- package/dist/commands/login/get-group.js +5 -6
- package/dist/commands/login/get-group.js.map +1 -1
- package/dist/commands/login/import-configs.d.ts +12 -0
- package/dist/commands/login/import-configs.js +70 -0
- package/dist/commands/login/import-configs.js.map +1 -0
- package/dist/commands/login/import-groups.d.ts +12 -0
- package/dist/commands/login/import-groups.js +51 -0
- package/dist/commands/login/import-groups.js.map +1 -0
- package/dist/commands/login/list-configs.js +1 -2
- package/dist/commands/login/list-configs.js.map +1 -1
- package/dist/commands/login/list-groups.js +1 -2
- package/dist/commands/login/list-groups.js.map +1 -1
- package/dist/commands/login/list-users-in-group.js +5 -6
- package/dist/commands/login/list-users-in-group.js.map +1 -1
- package/dist/commands/login/remove-user-from-group.d.ts +2 -2
- package/dist/commands/login/remove-user-from-group.js +10 -11
- package/dist/commands/login/remove-user-from-group.js.map +1 -1
- package/dist/commands/login/update-config.js +11 -12
- package/dist/commands/login/update-config.js.map +1 -1
- package/dist/commands/project/create-project.js +8 -9
- package/dist/commands/project/create-project.js.map +1 -1
- package/dist/commands/project/get-active-project.js +5 -6
- package/dist/commands/project/get-active-project.js.map +1 -1
- package/dist/commands/project/list-projects.js +2 -3
- package/dist/commands/project/list-projects.js.map +1 -1
- package/dist/commands/project/select-project.js +13 -20
- package/dist/commands/project/select-project.js.map +1 -1
- package/dist/commands/start.d.ts +0 -3
- package/dist/commands/start.js +17 -22
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.js +5 -4
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/token/create-token.d.ts +2 -2
- package/dist/commands/token/create-token.js +8 -9
- package/dist/commands/token/create-token.js.map +1 -1
- package/dist/commands/token/delete-token.js +5 -6
- package/dist/commands/token/delete-token.js.map +1 -1
- package/dist/commands/token/get-token.d.ts +2 -2
- package/dist/commands/token/get-token.js +5 -6
- package/dist/commands/token/get-token.js.map +1 -1
- package/dist/commands/token/list-tokens.d.ts +2 -2
- package/dist/commands/token/list-tokens.js +3 -4
- package/dist/commands/token/list-tokens.js.map +1 -1
- package/dist/commands/token/update-token.d.ts +2 -2
- package/dist/commands/token/update-token.js +8 -9
- package/dist/commands/token/update-token.js.map +1 -1
- package/dist/commands/whoami.d.ts +1 -4
- package/dist/commands/whoami.js +5 -22
- package/dist/commands/whoami.js.map +1 -1
- package/dist/common/constants.d.ts +5 -11
- package/dist/common/constants.js +7 -15
- package/dist/common/constants.js.map +1 -1
- package/dist/{helpers/generate-error-message.js → common/error-messages.js} +1 -1
- package/dist/common/error-messages.js.map +1 -0
- package/dist/{helpers/prompt-required-flags.js → common/prompts.js} +5 -5
- package/dist/common/prompts.js.map +1 -0
- package/dist/{helpers/input-length-validation.d.ts → common/validators.d.ts} +1 -1
- package/dist/{helpers/input-length-validation.js → common/validators.js} +4 -4
- package/dist/common/validators.js.map +1 -0
- package/dist/helpers/app.d.ts +11 -1
- package/dist/helpers/app.js +84 -10
- package/dist/helpers/app.js.map +1 -1
- package/dist/helpers/jwk.d.ts +2 -0
- package/dist/helpers/jwk.js +21 -1
- package/dist/helpers/jwk.js.map +1 -1
- package/dist/services/affinidi/auth/auth-result-page.d.ts +1 -0
- package/dist/services/affinidi/auth/{providers/error-login-page.js → auth-result-page.js} +6 -7
- package/dist/services/affinidi/auth/auth-result-page.js.map +1 -0
- package/dist/services/affinidi/auth/bff-auth-provider.d.ts +30 -0
- package/dist/services/affinidi/auth/bff-auth-provider.js +136 -0
- package/dist/services/affinidi/auth/bff-auth-provider.js.map +1 -0
- package/dist/services/affinidi/auth/types.d.ts +11 -0
- package/dist/services/affinidi/auth/types.js.map +1 -0
- package/dist/services/affinidi/bff-service.d.ts +32 -0
- package/dist/services/affinidi/bff-service.js +195 -0
- package/dist/services/affinidi/bff-service.js.map +1 -0
- package/dist/services/affinidi/bff-service.types.d.ts +38 -0
- package/dist/services/affinidi/{config.js → bff-service.types.js} +1 -1
- package/dist/services/affinidi/bff-service.types.js.map +1 -0
- package/dist/services/affinidi/{errors/index.js → errors.js} +18 -9
- package/dist/services/affinidi/errors.js.map +1 -0
- package/dist/services/affinidi/iam/iam.api.d.ts +120 -105
- package/dist/services/affinidi/iam/iam.api.js +39 -118
- package/dist/services/affinidi/iam/iam.api.js.map +1 -1
- package/dist/services/affinidi/iam/index.d.ts +15 -15
- package/dist/services/affinidi/iam/index.js +48 -120
- package/dist/services/affinidi/iam/index.js.map +1 -1
- package/dist/services/affinidi/logger/console-logger-adapter.js.map +1 -0
- package/dist/services/affinidi/logger/index.js.map +1 -0
- package/dist/services/affinidi/logger/logger-adapter.js.map +1 -0
- package/dist/services/affinidi/vp-adapter/index.d.ts +12 -12
- package/dist/services/affinidi/vp-adapter/index.js +49 -70
- package/dist/services/affinidi/vp-adapter/index.js.map +1 -1
- package/dist/services/affinidi/vp-adapter/vp-adapter.api.d.ts +314 -54
- package/dist/services/affinidi/vp-adapter/vp-adapter.api.js +81 -15
- package/dist/services/affinidi/vp-adapter/vp-adapter.api.js.map +1 -1
- package/dist/services/credentials-vault.d.ts +20 -0
- package/dist/services/credentials-vault.js +59 -0
- package/dist/services/credentials-vault.js.map +1 -0
- package/dist/services/env-config.d.ts +35 -0
- package/dist/services/env-config.js +39 -0
- package/dist/services/env-config.js.map +1 -0
- package/package.json +7 -15
- package/dist/helpers/generate-error-message.js.map +0 -1
- package/dist/helpers/index.d.ts +0 -3
- package/dist/helpers/index.js +0 -11
- package/dist/helpers/index.js.map +0 -1
- package/dist/helpers/input-length-validation.js.map +0 -1
- package/dist/helpers/prompt-required-flags.js.map +0 -1
- package/dist/hooks/check/check-version.d.ts +0 -17
- package/dist/hooks/check/check-version.js +0 -24
- package/dist/hooks/check/check-version.js.map +0 -1
- package/dist/services/affinidi/adapters/index.d.ts +0 -1
- package/dist/services/affinidi/adapters/index.js +0 -5
- package/dist/services/affinidi/adapters/index.js.map +0 -1
- package/dist/services/affinidi/adapters/logger/console-logger-adapter.js.map +0 -1
- package/dist/services/affinidi/adapters/logger/index.js.map +0 -1
- package/dist/services/affinidi/adapters/logger/logger-adapter.js.map +0 -1
- package/dist/services/affinidi/auth/index.d.ts +0 -62
- package/dist/services/affinidi/auth/index.js +0 -131
- package/dist/services/affinidi/auth/index.js.map +0 -1
- package/dist/services/affinidi/auth/providers/config.d.ts +0 -15
- package/dist/services/affinidi/auth/providers/config.js +0 -33
- package/dist/services/affinidi/auth/providers/config.js.map +0 -1
- package/dist/services/affinidi/auth/providers/error-login-page.d.ts +0 -1
- package/dist/services/affinidi/auth/providers/error-login-page.js.map +0 -1
- package/dist/services/affinidi/auth/providers/index.d.ts +0 -3
- package/dist/services/affinidi/auth/providers/index.js +0 -8
- package/dist/services/affinidi/auth/providers/index.js.map +0 -1
- package/dist/services/affinidi/auth/providers/ory-pkce.d.ts +0 -47
- package/dist/services/affinidi/auth/providers/ory-pkce.js +0 -216
- package/dist/services/affinidi/auth/providers/ory-pkce.js.map +0 -1
- package/dist/services/affinidi/auth/providers/ory.d.ts +0 -22
- package/dist/services/affinidi/auth/providers/ory.js +0 -154
- package/dist/services/affinidi/auth/providers/ory.js.map +0 -1
- package/dist/services/affinidi/auth/providers/successful-login-page.d.ts +0 -1
- package/dist/services/affinidi/auth/providers/successful-login-page.js +0 -110
- package/dist/services/affinidi/auth/providers/successful-login-page.js.map +0 -1
- package/dist/services/affinidi/auth/providers/types.d.ts +0 -10
- package/dist/services/affinidi/auth/providers/types.js.map +0 -1
- package/dist/services/affinidi/auth/token.d.ts +0 -54
- package/dist/services/affinidi/auth/token.js +0 -121
- package/dist/services/affinidi/auth/token.js.map +0 -1
- package/dist/services/affinidi/config.d.ts +0 -12
- package/dist/services/affinidi/config.js.map +0 -1
- package/dist/services/affinidi/errors/index.js.map +0 -1
- package/dist/services/affinidi/index.d.ts +0 -24
- package/dist/services/affinidi/index.js +0 -52
- package/dist/services/affinidi/index.js.map +0 -1
- package/dist/services/config/index.d.ts +0 -36
- package/dist/services/config/index.js +0 -160
- package/dist/services/config/index.js.map +0 -1
- package/dist/services/index.d.ts +0 -1
- package/dist/services/index.js +0 -6
- package/dist/services/index.js.map +0 -1
- package/dist/services/urls.d.ts +0 -2
- package/dist/services/urls.js +0 -12
- package/dist/services/urls.js.map +0 -1
- /package/dist/{helpers/generate-error-message.d.ts → common/error-messages.d.ts} +0 -0
- /package/dist/{helpers/prompt-required-flags.d.ts → common/prompts.d.ts} +0 -0
- /package/dist/services/affinidi/auth/{providers/types.js → types.js} +0 -0
- /package/dist/services/affinidi/{errors/index.d.ts → errors.d.ts} +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/console-logger-adapter.d.ts +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/console-logger-adapter.js +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/index.d.ts +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/index.js +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/logger-adapter.d.ts +0 -0
- /package/dist/services/affinidi/{adapters/logger → logger}/logger-adapter.js +0 -0
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BFFAuthProvider = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
6
|
+
const express_1 = tslib_1.__importDefault(require("express"));
|
|
7
|
+
const helmet_1 = tslib_1.__importDefault(require("helmet"));
|
|
8
|
+
const open_1 = tslib_1.__importDefault(require("open"));
|
|
9
|
+
const tcp_port_used_1 = require("tcp-port-used");
|
|
10
|
+
const auth_result_page_1 = require("./auth-result-page");
|
|
11
|
+
const jwk_1 = require("../../../helpers/jwk");
|
|
12
|
+
const credentials_vault_1 = require("../../credentials-vault");
|
|
13
|
+
const env_config_1 = require("../../env-config");
|
|
14
|
+
const bff_service_1 = require("../bff-service");
|
|
15
|
+
class BFFAuthProvider {
|
|
16
|
+
constructor({ logger }) {
|
|
17
|
+
this.logger = logger;
|
|
18
|
+
}
|
|
19
|
+
async authenticate({ privateKey, publicKey }) {
|
|
20
|
+
const port = 64287;
|
|
21
|
+
const isPortInUse = await (0, tcp_port_used_1.check)(env_config_1.config.redirectPort);
|
|
22
|
+
if (isPortInUse) {
|
|
23
|
+
throw new Error(`\n💥 Port [${port}] is unavailable. Affinidi CLI is currently relying on it.\n` +
|
|
24
|
+
`Please close the process that is using port [${port}] and try again.`);
|
|
25
|
+
}
|
|
26
|
+
const authUrl = await bff_service_1.bffService.postAuthUrl(await (0, jwk_1.JWKToPem)(publicKey));
|
|
27
|
+
const state = authUrl.searchParams.get('state');
|
|
28
|
+
if (!state) {
|
|
29
|
+
throw new Error('Unexpected error occurred. state parameter missing');
|
|
30
|
+
}
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
this.logger.debug('Start express server');
|
|
33
|
+
const app = (0, express_1.default)();
|
|
34
|
+
app.use((0, helmet_1.default)({
|
|
35
|
+
contentSecurityPolicy: {
|
|
36
|
+
directives: {
|
|
37
|
+
scriptSrc: ["'none'"],
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
}));
|
|
41
|
+
const server = app.listen(port, () => {
|
|
42
|
+
this.logger.debug(`Express server started listening on port ${port}`);
|
|
43
|
+
});
|
|
44
|
+
const timeout = setTimeout(() => {
|
|
45
|
+
this.shutDownServer(server);
|
|
46
|
+
reject(new Error(`Authentication timeout (${env_config_1.config.redirectTimeoutMs / 1000}s) exceeded`));
|
|
47
|
+
}, env_config_1.config.redirectTimeoutMs);
|
|
48
|
+
app.get('/callback', async (req, res) => {
|
|
49
|
+
res.type('html');
|
|
50
|
+
if (req.query.state === 'error') {
|
|
51
|
+
this.handleError({ reject, req, res, timeout });
|
|
52
|
+
this.shutDownServer(server);
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
await this.handleSuccess({ privateKey, resolve, reject, res, timeout, state });
|
|
56
|
+
this.shutDownServer(server);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
this.logger.info(`\nAttempting to automatically open the authentication page in your default browser.\n` +
|
|
60
|
+
`\nIf the browser doesn't open automatically, or if your default browser isn't Google Chrome, please open the following URL in the Chrome browser:\n` +
|
|
61
|
+
`\n${chalk_1.default.underline(authUrl)}\n\n`);
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
63
|
+
(0, open_1.default)(authUrl.href);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Handles `Success` case when the user accepts
|
|
68
|
+
* the access to the personal data.
|
|
69
|
+
* This is the example of the accept endpoint call:
|
|
70
|
+
* http://127.0.0.1:64287/callback
|
|
71
|
+
* @param params
|
|
72
|
+
* @private
|
|
73
|
+
*/
|
|
74
|
+
async handleSuccess(params) {
|
|
75
|
+
const { privateKey, resolve, reject, res, timeout, state } = params;
|
|
76
|
+
clearTimeout(timeout);
|
|
77
|
+
try {
|
|
78
|
+
this.logger.debug(`Getting sessionId for state: ${JSON.stringify(state)}`);
|
|
79
|
+
const encryptedSessionIdBase64 = await bff_service_1.bffService.getSessionId(state);
|
|
80
|
+
const encryptedSessionId = Buffer.from(encryptedSessionIdBase64, 'base64').toString('utf-8');
|
|
81
|
+
const sessionId = await (0, jwk_1.decryptSessionIdWithPrivateKey)(encryptedSessionId, privateKey);
|
|
82
|
+
this.logger.debug(`Received session: ${JSON.stringify(sessionId)}`);
|
|
83
|
+
await credentials_vault_1.credentialsVault.setSessionId(sessionId);
|
|
84
|
+
this.logger.debug('Session stored in vault');
|
|
85
|
+
resolve(sessionId);
|
|
86
|
+
res.end((0, auth_result_page_1.authResultPage)('Logged in successfully', 'Head back to the terminal to continue using Affinidi CLI.<br><br>You can also access our services from the <a href="https://portal.affinidi.com" target="_blank">Affindi Portal</a>'));
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
this.logger.info(error);
|
|
90
|
+
const errorMessage = this.generateErrorMessage();
|
|
91
|
+
reject(errorMessage);
|
|
92
|
+
res.end((0, auth_result_page_1.authResultPage)('Login failed', errorMessage));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Handles `Error` case when there is an error or the
|
|
97
|
+
* user rejects the access to the personal data.
|
|
98
|
+
* This is the example of the reject endpoint call:
|
|
99
|
+
* http://127.0.0.1:64287/callback?state=error&error=access_denied&description=request_declined
|
|
100
|
+
* @param params
|
|
101
|
+
* @private
|
|
102
|
+
*/
|
|
103
|
+
handleError(params) {
|
|
104
|
+
const { res, req, reject, timeout } = params;
|
|
105
|
+
const { type, description } = req.query;
|
|
106
|
+
clearTimeout(timeout);
|
|
107
|
+
const errorMessage = this.generateErrorMessage(type, description);
|
|
108
|
+
reject(errorMessage);
|
|
109
|
+
res.end((0, auth_result_page_1.authResultPage)('Login failed', errorMessage));
|
|
110
|
+
}
|
|
111
|
+
generateErrorMessage(type, errorDescription) {
|
|
112
|
+
let errorMessage;
|
|
113
|
+
switch (type) {
|
|
114
|
+
case 'access_denied':
|
|
115
|
+
errorMessage =
|
|
116
|
+
errorDescription === 'request_declined'
|
|
117
|
+
? 'You have declined access to your data. Granting access to your data is necessary to avail our services.'
|
|
118
|
+
: 'Access denied.';
|
|
119
|
+
break;
|
|
120
|
+
default:
|
|
121
|
+
errorMessage = 'Unexpected error occurred';
|
|
122
|
+
}
|
|
123
|
+
return errorMessage;
|
|
124
|
+
}
|
|
125
|
+
shutDownServer(server) {
|
|
126
|
+
server.close((error) => {
|
|
127
|
+
if (error) {
|
|
128
|
+
this.logger.error(`Error while shutting down the express server: ${error.message}`);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
this.logger.debug('Express server has been successfully shut down');
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.BFFAuthProvider = BFFAuthProvider;
|
|
136
|
+
//# sourceMappingURL=bff-auth-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bff-auth-provider.js","sourceRoot":"","sources":["../../../../src/services/affinidi/auth/bff-auth-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { KeyLike } from 'jose';
|
|
2
|
+
import { LoggerAdapter } from '../logger';
|
|
3
|
+
export interface AuthProvider {
|
|
4
|
+
authenticate(keys: {
|
|
5
|
+
privateKey: KeyLike;
|
|
6
|
+
publicKey: KeyLike;
|
|
7
|
+
}): Promise<string>;
|
|
8
|
+
}
|
|
9
|
+
export type AuthProviderConfig = {
|
|
10
|
+
logger: LoggerAdapter;
|
|
11
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/services/affinidi/auth/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import axios, { RawAxiosRequestHeaders } from 'axios';
|
|
2
|
+
import { KeyLike } from 'jose';
|
|
3
|
+
import { AuthProvider } from './auth/types';
|
|
4
|
+
import { StatsProjectResourceLimit, StatsResponseOutput } from './bff-service.types';
|
|
5
|
+
import { CreateProjectInput, ProjectDto } from './iam/iam.api';
|
|
6
|
+
export declare const instance: axios.AxiosInstance;
|
|
7
|
+
export declare function getBFFHeaders(): Promise<RawAxiosRequestHeaders>;
|
|
8
|
+
export declare class BFFService {
|
|
9
|
+
private readonly logger;
|
|
10
|
+
readonly authProvider: AuthProvider;
|
|
11
|
+
constructor();
|
|
12
|
+
login(): Promise<string>;
|
|
13
|
+
logout(): Promise<void>;
|
|
14
|
+
whoami(): Promise<any>;
|
|
15
|
+
postAuthUrl(publicKey: string): Promise<URL>;
|
|
16
|
+
getSessionId(state: string): Promise<string>;
|
|
17
|
+
getProjects(): Promise<ProjectDto[]>;
|
|
18
|
+
createProject(projectInput: CreateProjectInput): Promise<ProjectDto>;
|
|
19
|
+
getActiveProjectLimits(resourceId?: string): Promise<number | StatsProjectResourceLimit[] | undefined>;
|
|
20
|
+
stats(): Promise<StatsResponseOutput>;
|
|
21
|
+
getActiveProject(): Promise<ProjectDto>;
|
|
22
|
+
setSessionActiveProject(projectId: string): Promise<string>;
|
|
23
|
+
exportLoginConfigs(ids: string[]): Promise<any>;
|
|
24
|
+
importLoginConfigs(data: any): Promise<any>;
|
|
25
|
+
exportGroups(groupNames: string[]): Promise<any>;
|
|
26
|
+
importGroups(data: any): Promise<any>;
|
|
27
|
+
generateKeyPair(): Promise<{
|
|
28
|
+
publicKey: KeyLike;
|
|
29
|
+
privateKey: KeyLike;
|
|
30
|
+
}>;
|
|
31
|
+
}
|
|
32
|
+
export declare const bffService: BFFService;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bffService = exports.BFFService = exports.getBFFHeaders = exports.instance = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const errors_1 = require("@oclif/core/lib/errors");
|
|
6
|
+
const axios_1 = tslib_1.__importStar(require("axios"));
|
|
7
|
+
const jose_1 = require("jose");
|
|
8
|
+
const bff_auth_provider_1 = require("./auth/bff-auth-provider");
|
|
9
|
+
const errors_2 = require("./errors");
|
|
10
|
+
const logger_1 = require("./logger");
|
|
11
|
+
const constants_1 = require("../../common/constants");
|
|
12
|
+
const credentials_vault_1 = require("../credentials-vault");
|
|
13
|
+
const env_config_1 = require("../env-config");
|
|
14
|
+
/* eslint-disable-next-line @typescript-eslint/ban-ts-comment, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires */
|
|
15
|
+
require('pkginfo')(module, 'version');
|
|
16
|
+
exports.instance = axios_1.default.create({
|
|
17
|
+
baseURL: env_config_1.config.bffHost,
|
|
18
|
+
});
|
|
19
|
+
async function getBFFHeaders() {
|
|
20
|
+
const sessionId = await credentials_vault_1.credentialsVault.getSessionId();
|
|
21
|
+
return {
|
|
22
|
+
'Content-Type': 'application/json',
|
|
23
|
+
Accept: 'application/json',
|
|
24
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
25
|
+
Cookie: `${env_config_1.config.bffCookieName}=${sessionId}`,
|
|
26
|
+
'affinidi-cli-version': module.exports.version,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
exports.getBFFHeaders = getBFFHeaders;
|
|
30
|
+
class BFFService {
|
|
31
|
+
constructor() {
|
|
32
|
+
this.logger = new logger_1.ConsoleLoggerAdapter(env_config_1.config.logLevel);
|
|
33
|
+
this.authProvider = new bff_auth_provider_1.BFFAuthProvider({
|
|
34
|
+
logger: this.logger,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
async login() {
|
|
38
|
+
const { privateKey, publicKey } = await this.generateKeyPair();
|
|
39
|
+
return this.authProvider.authenticate({ privateKey, publicKey });
|
|
40
|
+
}
|
|
41
|
+
async logout() {
|
|
42
|
+
const headers = await getBFFHeaders();
|
|
43
|
+
try {
|
|
44
|
+
await exports.instance.post('/api/auth/logout', {}, { headers });
|
|
45
|
+
await credentials_vault_1.credentialsVault.clear();
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
(0, errors_2.handleServiceError)(error);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
async whoami() {
|
|
52
|
+
const headers = await getBFFHeaders();
|
|
53
|
+
try {
|
|
54
|
+
const res = await exports.instance.get('/api/whoami', { headers });
|
|
55
|
+
return res.data;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
(0, errors_2.handleServiceError)(error);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async postAuthUrl(publicKey) {
|
|
62
|
+
try {
|
|
63
|
+
const response = await exports.instance.post('/api/auth/url', { publicKey, uxClient: env_config_1.config.bffUxClient }, { headers: await getBFFHeaders() });
|
|
64
|
+
return new URL(response.data.authUrl);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
(0, errors_2.handleServiceError)(error);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async getSessionId(state) {
|
|
71
|
+
const headers = await getBFFHeaders();
|
|
72
|
+
try {
|
|
73
|
+
const res = await exports.instance.get('/api/session-id', { params: { state: state }, headers });
|
|
74
|
+
return res.data.sessionId;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
(0, errors_2.handleServiceError)(error);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
async getProjects() {
|
|
81
|
+
const headers = await getBFFHeaders();
|
|
82
|
+
try {
|
|
83
|
+
const res = await exports.instance.get('/api/projects', { headers });
|
|
84
|
+
return res.data;
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
(0, errors_2.handleServiceError)(error);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async createProject(projectInput) {
|
|
91
|
+
const headers = await getBFFHeaders();
|
|
92
|
+
try {
|
|
93
|
+
const res = await exports.instance.post('/api/project', projectInput, { headers });
|
|
94
|
+
return res.data;
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (error instanceof axios_1.AxiosError && error.response?.data?.errorCodeStr === 'ProjectCreation') {
|
|
98
|
+
const projectsLimit = await this.getActiveProjectLimits(constants_1.ServiceResourceIds.IAM_PROJECTS);
|
|
99
|
+
throw new errors_1.CLIError(`You can create a maximum of ${projectsLimit} projects. For any further queries reach out to our Customer support.`);
|
|
100
|
+
}
|
|
101
|
+
(0, errors_2.handleServiceError)(error);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
async getActiveProjectLimits(resourceId) {
|
|
105
|
+
try {
|
|
106
|
+
const stats = await this.stats();
|
|
107
|
+
const limits = stats.projects[0].limits;
|
|
108
|
+
if (resourceId) {
|
|
109
|
+
return limits.find((limit) => limit.resourceId === resourceId)?.initialValue;
|
|
110
|
+
}
|
|
111
|
+
return limits;
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
(0, errors_2.handleServiceError)(error);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
async stats() {
|
|
118
|
+
const headers = await getBFFHeaders();
|
|
119
|
+
try {
|
|
120
|
+
const project = await this.getActiveProject();
|
|
121
|
+
const res = await exports.instance.get(`/api/stats/${project.id}`, { headers });
|
|
122
|
+
return res.data;
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
(0, errors_2.handleServiceError)(error);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async getActiveProject() {
|
|
129
|
+
const headers = await getBFFHeaders();
|
|
130
|
+
try {
|
|
131
|
+
const res = await exports.instance.get('/api/project', { headers });
|
|
132
|
+
return res.data;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
(0, errors_2.handleServiceError)(error);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async setSessionActiveProject(projectId) {
|
|
139
|
+
const headers = await getBFFHeaders();
|
|
140
|
+
try {
|
|
141
|
+
const res = await exports.instance.get(`/api/projects/${projectId}`, { headers });
|
|
142
|
+
return res.data.projectId;
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
(0, errors_2.handleServiceError)(error);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async exportLoginConfigs(ids) {
|
|
149
|
+
const headers = await getBFFHeaders();
|
|
150
|
+
try {
|
|
151
|
+
const res = await exports.instance.post('/api/login/export-login-configs', { ids }, { headers });
|
|
152
|
+
return res.data;
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
(0, errors_2.handleServiceError)(error);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
async importLoginConfigs(data) {
|
|
159
|
+
const headers = await getBFFHeaders();
|
|
160
|
+
try {
|
|
161
|
+
const res = await exports.instance.post('/api/login/import-login-configs', { data }, { headers });
|
|
162
|
+
return res.data;
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
(0, errors_2.handleServiceError)(error);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async exportGroups(groupNames) {
|
|
169
|
+
const headers = await getBFFHeaders();
|
|
170
|
+
try {
|
|
171
|
+
const res = await exports.instance.post('/api/login/export-user-groups', { groupNames }, { headers });
|
|
172
|
+
return res.data;
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
(0, errors_2.handleServiceError)(error);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async importGroups(data) {
|
|
179
|
+
const headers = await getBFFHeaders();
|
|
180
|
+
try {
|
|
181
|
+
const res = await exports.instance.post('/api/login/import-user-groups', { data }, { headers });
|
|
182
|
+
return res.data;
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
(0, errors_2.handleServiceError)(error);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async generateKeyPair() {
|
|
189
|
+
const { publicKey, privateKey } = await (0, jose_1.generateKeyPair)(constants_1.SupportedAlgorithms.RS256);
|
|
190
|
+
return { publicKey, privateKey };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
exports.BFFService = BFFService;
|
|
194
|
+
exports.bffService = new BFFService();
|
|
195
|
+
//# sourceMappingURL=bff-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bff-service.js","sourceRoot":"","sources":["../../../src/services/affinidi/bff-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
type StatsProjectScheduledBundleChange = {
|
|
2
|
+
bundleId: string;
|
|
3
|
+
bundleName: string;
|
|
4
|
+
bundleDescription: string;
|
|
5
|
+
startDate: string;
|
|
6
|
+
endDate: string;
|
|
7
|
+
changeType: string;
|
|
8
|
+
};
|
|
9
|
+
export type StatsProjectResourceLimit = {
|
|
10
|
+
resourceId: string;
|
|
11
|
+
initialValue: number;
|
|
12
|
+
value: number;
|
|
13
|
+
creditCost: number;
|
|
14
|
+
};
|
|
15
|
+
type StatsProject = {
|
|
16
|
+
id: string;
|
|
17
|
+
bundle: {
|
|
18
|
+
bundleId: string;
|
|
19
|
+
bundleName: string;
|
|
20
|
+
bundleDescription: string;
|
|
21
|
+
};
|
|
22
|
+
createdAt: string;
|
|
23
|
+
credits: number;
|
|
24
|
+
initialCredits: number;
|
|
25
|
+
scheduledBundleChanges: StatsProjectScheduledBundleChange[];
|
|
26
|
+
limits: StatsProjectResourceLimit[];
|
|
27
|
+
};
|
|
28
|
+
export type StatsResponseOutput = {
|
|
29
|
+
cachedAt: string;
|
|
30
|
+
updatedAt: string;
|
|
31
|
+
expiresAt: string;
|
|
32
|
+
health: {
|
|
33
|
+
status: number;
|
|
34
|
+
message: string;
|
|
35
|
+
};
|
|
36
|
+
projects: StatsProject[];
|
|
37
|
+
};
|
|
38
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bff-service.types.js","sourceRoot":"","sources":["../../../src/services/affinidi/bff-service.types.ts"],"names":[],"mappings":""}
|
|
@@ -6,6 +6,7 @@ const errors_1 = require("@oclif/core/lib/errors");
|
|
|
6
6
|
const axios_1 = require("axios");
|
|
7
7
|
const chalk_1 = tslib_1.__importDefault(require("chalk"));
|
|
8
8
|
const http_status_codes_1 = require("http-status-codes");
|
|
9
|
+
const credentials_vault_1 = require("../credentials-vault");
|
|
9
10
|
exports.AuthTokenExpired = "Your session has expired. Please, run command 'affinidi start' and try again.";
|
|
10
11
|
exports.InvalidOrMissingAuthToken = "Your session token is invalid or missing. Please, run command 'affinidi start' and try again.";
|
|
11
12
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -13,7 +14,7 @@ const getCommonAPIErrorMessage = (response) => {
|
|
|
13
14
|
switch (response.status) {
|
|
14
15
|
case http_status_codes_1.StatusCodes.FORBIDDEN:
|
|
15
16
|
case http_status_codes_1.StatusCodes.UNAUTHORIZED:
|
|
16
|
-
return "You are not authorized to perform this action\nPlease, make sure you are logged in
|
|
17
|
+
return "You are not authorized to perform this action\nPlease, make sure you are logged in by running command 'affinidi start'";
|
|
17
18
|
case http_status_codes_1.StatusCodes.NOT_FOUND:
|
|
18
19
|
return 'The resource you are trying to access was not found\nPlease, check the entered resource identifier';
|
|
19
20
|
case http_status_codes_1.StatusCodes.TOO_MANY_REQUESTS:
|
|
@@ -57,19 +58,27 @@ const getCommonAPIErrorMessage = (response) => {
|
|
|
57
58
|
}
|
|
58
59
|
};
|
|
59
60
|
function handleServiceError(error, serviceErrorMessageHandler) {
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
const isAxiosError = error instanceof axios_1.AxiosError;
|
|
62
|
+
if (!isAxiosError) {
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
const isServerError = isAxiosError && error.response && error.response.status >= 500;
|
|
66
|
+
if (isServerError) {
|
|
67
|
+
void credentials_vault_1.credentialsVault.clear();
|
|
68
|
+
}
|
|
69
|
+
if (error?.response?.data) {
|
|
70
|
+
const { name, details, message, errorCodeStr } = error.response.data;
|
|
62
71
|
const isJwtExpired = name && name === 'InvalidJwtTokenError' && details?.some((err) => err.issue === 'jwt-expired');
|
|
63
72
|
if (isJwtExpired) {
|
|
64
73
|
throw new Error(exports.AuthTokenExpired);
|
|
65
74
|
}
|
|
66
|
-
if (
|
|
67
|
-
throw new errors_1.CLIError(
|
|
68
|
-
? serviceErrorMessageHandler(error.response) ?? getCommonAPIErrorMessage(error.response)
|
|
69
|
-
: getCommonAPIErrorMessage(error.response));
|
|
75
|
+
if (errorCodeStr === 'CLIVersionInvalid' && message) {
|
|
76
|
+
throw new errors_1.CLIError(message);
|
|
70
77
|
}
|
|
71
78
|
}
|
|
72
|
-
throw
|
|
79
|
+
throw new errors_1.CLIError(serviceErrorMessageHandler
|
|
80
|
+
? serviceErrorMessageHandler(error.response) ?? getCommonAPIErrorMessage(error.response)
|
|
81
|
+
: getCommonAPIErrorMessage(error.response));
|
|
73
82
|
}
|
|
74
83
|
exports.handleServiceError = handleServiceError;
|
|
75
|
-
//# sourceMappingURL=
|
|
84
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/services/affinidi/errors.ts"],"names":[],"mappings":"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"}
|