@boltic/cli 1.0.1 ā 1.0.3
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/api/environment.js +28 -0
- package/api/login.js +2 -2
- package/cli.js +9 -0
- package/commands/env.js +133 -0
- package/commands/login.js +5 -2
- package/config/environments.js +19 -1
- package/helper/env.js +13 -0
- package/package.json +1 -1
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { environments } from "../config/environments.js";
|
|
2
|
+
import { handleError } from "../helper/error.js";
|
|
3
|
+
|
|
4
|
+
const getEnvironments = () => {
|
|
5
|
+
try {
|
|
6
|
+
return environments;
|
|
7
|
+
} catch (error) {
|
|
8
|
+
handleError(error);
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const setEnvironment = async (environment) => {
|
|
13
|
+
try {
|
|
14
|
+
return environments[environment];
|
|
15
|
+
} catch (error) {
|
|
16
|
+
handleError(error);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const getEnvironment = async (configData) => {
|
|
21
|
+
try {
|
|
22
|
+
return configData.environment || "uat";
|
|
23
|
+
} catch (error) {
|
|
24
|
+
handleError(error);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export { getEnvironment, getEnvironments, setEnvironment };
|
package/api/login.js
CHANGED
|
@@ -31,14 +31,14 @@ const getCliSession = async (apiUrl, requestCode) => {
|
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
33
|
|
|
34
|
-
const getCliBearerToken = async (apiUrl, account_id, session) => {
|
|
34
|
+
const getCliBearerToken = async (name, apiUrl, account_id, session) => {
|
|
35
35
|
try {
|
|
36
36
|
const response = await axios({
|
|
37
37
|
method: "get",
|
|
38
38
|
url: `${apiUrl}/service/web/token/${account_id}`,
|
|
39
39
|
headers: {
|
|
40
40
|
"Content-Type": "application/json",
|
|
41
|
-
Cookie:
|
|
41
|
+
Cookie: `${name}.session=${session}`,
|
|
42
42
|
},
|
|
43
43
|
});
|
|
44
44
|
return response;
|
package/cli.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
2
|
import fs from "fs";
|
|
3
|
+
import EnvironmentCommands from "./commands/env.js";
|
|
3
4
|
import IntegrationCommands from "./commands/integration.js";
|
|
4
5
|
import AuthCommands from "./commands/login.js";
|
|
5
6
|
|
|
@@ -22,6 +23,10 @@ const createCLI = (consoleUrl, apiUrl, serviceName, env) => {
|
|
|
22
23
|
description: "Logout and clear access token",
|
|
23
24
|
action: AuthCommands.handleLogout,
|
|
24
25
|
},
|
|
26
|
+
env: {
|
|
27
|
+
description: "Manage environment settings (list, set, show)",
|
|
28
|
+
action: (args) => handleEnvironment(args),
|
|
29
|
+
},
|
|
25
30
|
help: {
|
|
26
31
|
description: "Display this help guide.",
|
|
27
32
|
action: () => showHelp(commands),
|
|
@@ -117,6 +122,10 @@ async function handleIntegration(args) {
|
|
|
117
122
|
await IntegrationCommands.execute(args);
|
|
118
123
|
}
|
|
119
124
|
|
|
125
|
+
async function handleEnvironment(args) {
|
|
126
|
+
await EnvironmentCommands.execute(args);
|
|
127
|
+
}
|
|
128
|
+
|
|
120
129
|
async function showVersion() {
|
|
121
130
|
const packageJson = JSON.parse(
|
|
122
131
|
fs.readFileSync(new URL("./package.json", import.meta.url))
|
package/commands/env.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { select } from "@inquirer/prompts";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { environments } from "../config/environments.js";
|
|
4
|
+
import { getSecret, storeSecret } from "../helper/secure-storage.js";
|
|
5
|
+
|
|
6
|
+
// Define commands and their descriptions
|
|
7
|
+
const commands = {
|
|
8
|
+
list: {
|
|
9
|
+
description: "List available environments",
|
|
10
|
+
action: handleList,
|
|
11
|
+
},
|
|
12
|
+
set: {
|
|
13
|
+
description: "Set the active environment",
|
|
14
|
+
action: handleSet,
|
|
15
|
+
},
|
|
16
|
+
show: {
|
|
17
|
+
description: "Show the current environment",
|
|
18
|
+
action: handleShow,
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
// Execute the environment command
|
|
23
|
+
const execute = async (args) => {
|
|
24
|
+
const subCommand = args[0];
|
|
25
|
+
|
|
26
|
+
if (!subCommand) {
|
|
27
|
+
showHelp();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (!commands[subCommand]) {
|
|
32
|
+
console.log(chalk.red("Unknown or missing environment sub-command.\n"));
|
|
33
|
+
showHelp();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const commandObj = commands[subCommand];
|
|
38
|
+
await commandObj.action(args.slice(1));
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
// List available environments
|
|
42
|
+
async function handleList() {
|
|
43
|
+
console.log(chalk.bgCyan.black("\n š Available Environments \n"));
|
|
44
|
+
Object.entries(environments).forEach(([key, env]) => {
|
|
45
|
+
console.log(
|
|
46
|
+
chalk.blue.bold(`š¹ ${key}`) +
|
|
47
|
+
chalk.gray(` - ${env.name}`) +
|
|
48
|
+
chalk.dim(` (${env.loginUrl})`)
|
|
49
|
+
);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Set the active environment
|
|
54
|
+
async function handleSet(args) {
|
|
55
|
+
const currentEnv = await getSecret("environment");
|
|
56
|
+
let selectedEnv;
|
|
57
|
+
|
|
58
|
+
if (args[0]) {
|
|
59
|
+
if (environments[args[0]]) {
|
|
60
|
+
selectedEnv = args[0];
|
|
61
|
+
} else {
|
|
62
|
+
console.log(
|
|
63
|
+
chalk.yellow(
|
|
64
|
+
`\nInvalid environment '${args[0]}', please select from available options.\n`
|
|
65
|
+
)
|
|
66
|
+
);
|
|
67
|
+
selectedEnv = await select({
|
|
68
|
+
message: "Select environment:",
|
|
69
|
+
choices: Object.entries(environments).map(([key, env]) => ({
|
|
70
|
+
name: `${env.name} (${env.loginUrl})`,
|
|
71
|
+
value: key,
|
|
72
|
+
})),
|
|
73
|
+
default: currentEnv,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
} else {
|
|
77
|
+
selectedEnv = await select({
|
|
78
|
+
message: "Select environment:",
|
|
79
|
+
choices: Object.entries(environments).map(([key, env]) => ({
|
|
80
|
+
name: `${env.name} (${env.loginUrl})`,
|
|
81
|
+
value: key,
|
|
82
|
+
})),
|
|
83
|
+
default: currentEnv,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
await storeSecret("environment", selectedEnv);
|
|
88
|
+
|
|
89
|
+
if (environments[selectedEnv]) {
|
|
90
|
+
console.log(
|
|
91
|
+
chalk.bgGreen.black("\n ā
Success! ") +
|
|
92
|
+
chalk.green(
|
|
93
|
+
` Environment set to ${chalk.bold.white(environments[selectedEnv].name)} ${chalk.dim(`(${environments[selectedEnv].loginUrl})`)}\n`
|
|
94
|
+
)
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Show the current environment
|
|
100
|
+
async function handleShow() {
|
|
101
|
+
const currentEnv = (await getSecret("environment")) || "bolt";
|
|
102
|
+
const env = environments[currentEnv];
|
|
103
|
+
|
|
104
|
+
console.log(chalk.bgCyan.black("\n š Current Environment \n"));
|
|
105
|
+
if (env) {
|
|
106
|
+
console.log(chalk.blue.bold("š Name: ") + chalk.white(env.name));
|
|
107
|
+
console.log(
|
|
108
|
+
chalk.blue.bold("š Login URL: ") + chalk.white(env.loginUrl)
|
|
109
|
+
);
|
|
110
|
+
console.log(
|
|
111
|
+
chalk.blue.bold("š„ļø Console URL: ") + chalk.white(env.consoleUrl)
|
|
112
|
+
);
|
|
113
|
+
console.log(chalk.blue.bold("š API URL: ") + chalk.white(env.apiUrl));
|
|
114
|
+
} else {
|
|
115
|
+
console.log(chalk.bold("Name: ") + environments.bolt.name);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Show help for environment commands
|
|
120
|
+
function showHelp() {
|
|
121
|
+
console.log(chalk.bgCyan.black("\n ā” Environment Commands \n"));
|
|
122
|
+
Object.entries(commands).forEach(([cmd, details]) => {
|
|
123
|
+
console.log(
|
|
124
|
+
chalk.blue.bold(`šø ${cmd}`) +
|
|
125
|
+
chalk.gray(` - ${details.description}`)
|
|
126
|
+
);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export default {
|
|
131
|
+
execute,
|
|
132
|
+
handleSet,
|
|
133
|
+
};
|
package/commands/login.js
CHANGED
|
@@ -41,7 +41,8 @@ function showHelp() {
|
|
|
41
41
|
|
|
42
42
|
// Handle login command
|
|
43
43
|
async function handleLogin(args) {
|
|
44
|
-
const { apiUrl, loginUrl, clientId, frontendUrl } =
|
|
44
|
+
const { apiUrl, loginUrl, clientId, frontendUrl, name } =
|
|
45
|
+
await getCurrentEnv();
|
|
45
46
|
|
|
46
47
|
const requestCode = uuidv4();
|
|
47
48
|
const state = {
|
|
@@ -55,6 +56,7 @@ async function handleLogin(args) {
|
|
|
55
56
|
loginPage.searchParams.append("state", JSON.stringify(state));
|
|
56
57
|
|
|
57
58
|
console.log(chalk.cyan("\nš Opening browser for login..."));
|
|
59
|
+
console.log(chalk.cyan("\n" + loginPage.toString() + "\n"));
|
|
58
60
|
try {
|
|
59
61
|
await open(loginPage.toString());
|
|
60
62
|
console.log(chalk.cyan("ā
Browser launched successfully"));
|
|
@@ -105,11 +107,12 @@ async function handleLogin(args) {
|
|
|
105
107
|
try {
|
|
106
108
|
await storeSecret(
|
|
107
109
|
"session",
|
|
108
|
-
|
|
110
|
+
`${name}.session=${encodeURIComponent(session)}`
|
|
109
111
|
);
|
|
110
112
|
await storeSecret("account_id", accountId);
|
|
111
113
|
|
|
112
114
|
const token = await getCliBearerToken(
|
|
115
|
+
name,
|
|
113
116
|
apiUrl,
|
|
114
117
|
accountId,
|
|
115
118
|
session
|
package/config/environments.js
CHANGED
|
@@ -1,6 +1,24 @@
|
|
|
1
1
|
const environments = {
|
|
2
|
+
fcz0: {
|
|
3
|
+
name: "fcz0",
|
|
4
|
+
consoleUrl: "https://api.central.sit.fyndx1.de",
|
|
5
|
+
apiUrl: "https://asia-south1.api.fcz0.de",
|
|
6
|
+
loginUrl: "https://central.sit.fyndx1.de",
|
|
7
|
+
clientId: "ad140196-7d3c-477a-98bf-343187252f01",
|
|
8
|
+
allowedOrigin: "*.console.fcz0.de",
|
|
9
|
+
frontendUrl: "https://asia-south1.console.fcz0.de",
|
|
10
|
+
},
|
|
11
|
+
fcz5: {
|
|
12
|
+
name: "fcz5",
|
|
13
|
+
consoleUrl: "https://api.console.uat.fyndx1.de",
|
|
14
|
+
apiUrl: "https://asia-south1.api.uat.fcz0.de",
|
|
15
|
+
loginUrl: "https://console.uat.fyndx1.de",
|
|
16
|
+
clientId: "a65052b6-eef1-42e8-88c0-b80abca8dc51",
|
|
17
|
+
allowedOrigin: "*.console.uat.fcz0.de",
|
|
18
|
+
frontendUrl: "https://asia-south1.console.uat.fcz0.de",
|
|
19
|
+
},
|
|
2
20
|
bolt: {
|
|
3
|
-
name: "
|
|
21
|
+
name: "bolt",
|
|
4
22
|
consoleUrl: "https://api.console.fynd.com",
|
|
5
23
|
apiUrl: "https://asia-south1.api.boltic.io",
|
|
6
24
|
loginUrl: "https://console.fynd.com",
|
package/helper/env.js
CHANGED
|
@@ -13,8 +13,21 @@ export const getCurrentEnv = async () => {
|
|
|
13
13
|
acc[account] = password;
|
|
14
14
|
return acc;
|
|
15
15
|
}, {});
|
|
16
|
+
const environment = config.environment || "bolt";
|
|
17
|
+
return {
|
|
18
|
+
name: environments[environment].name,
|
|
19
|
+
apiUrl: environments[environment].apiUrl,
|
|
20
|
+
loginUrl: environments[environment].loginUrl,
|
|
21
|
+
consoleUrl: environments[environment].consoleUrl,
|
|
22
|
+
clientId: environments[environment].clientId,
|
|
23
|
+
token: config.token || null,
|
|
24
|
+
session: config.session || null,
|
|
25
|
+
accountId: config.account_id || null,
|
|
26
|
+
frontendUrl: environments[environment].frontendUrl,
|
|
27
|
+
};
|
|
16
28
|
}
|
|
17
29
|
return {
|
|
30
|
+
name: environments.bolt.name,
|
|
18
31
|
apiUrl: environments.bolt.apiUrl,
|
|
19
32
|
loginUrl: environments.bolt.loginUrl,
|
|
20
33
|
consoleUrl: environments.bolt.consoleUrl,
|