mstate-cli 0.2.0 → 0.2.2

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/package.json CHANGED
@@ -1,41 +1,41 @@
1
- {
2
- "name": "mstate-cli",
3
- "version": "0.2.0",
4
- "main": "index.js",
5
- "bin": {
6
- "mstate": "./dist/index.js"
7
- },
8
- "scripts": {
9
- "build": "npx rollup -c",
10
- "start": "npm run build && node dist/index.js"
11
- },
12
- "keywords": [
13
- "mstate",
14
- "workflow",
15
- "cli",
16
- "automation"
17
- ],
18
- "author": "",
19
- "license": "ISC",
20
- "description": "A CLI tool for maintaining mstate workflows config",
21
- "devDependencies": {
22
- "@rollup/plugin-commonjs": "^28.0.1",
23
- "@rollup/plugin-json": "^6.1.0",
24
- "@rollup/plugin-node-resolve": "^15.3.0",
25
- "@rollup/plugin-terser": "^0.4.4",
26
- "@rollup/plugin-typescript": "^12.1.1",
27
- "@types/cors": "^2.8.17",
28
- "@types/crypto-js": "^4.2.2",
29
- "@types/express": "^5.0.0",
30
- "@types/node": "^22.9.0",
31
- "tslib": "^2.8.1",
32
- "typescript": "^5.6.3"
33
- },
34
- "dependencies": {
35
- "cors": "^2.8.5",
36
- "crypto-js": "^4.2.0",
37
- "express": "^4.21.1",
38
- "mstate-cli": "^0.0.9",
39
- "open": "^10.1.0"
40
- }
41
- }
1
+ {
2
+ "name": "mstate-cli",
3
+ "version": "0.2.2",
4
+ "main": "index.js",
5
+ "bin": {
6
+ "mstate": "./dist/index.js"
7
+ },
8
+ "scripts": {
9
+ "build": "npx rollup -c",
10
+ "start": "npm run build && node dist/index.js"
11
+ },
12
+ "keywords": [
13
+ "mstate",
14
+ "workflow",
15
+ "cli",
16
+ "automation"
17
+ ],
18
+ "author": "",
19
+ "license": "ISC",
20
+ "description": "A CLI tool for maintaining mstate workflows config",
21
+ "devDependencies": {
22
+ "@rollup/plugin-commonjs": "^28.0.1",
23
+ "@rollup/plugin-json": "^6.1.0",
24
+ "@rollup/plugin-node-resolve": "^15.3.0",
25
+ "@rollup/plugin-terser": "^0.4.4",
26
+ "@rollup/plugin-typescript": "^12.1.1",
27
+ "@types/cors": "^2.8.17",
28
+ "@types/crypto-js": "^4.2.2",
29
+ "@types/express": "^5.0.0",
30
+ "@types/node": "^22.9.0",
31
+ "tslib": "^2.8.1",
32
+ "typescript": "^5.6.3"
33
+ },
34
+ "dependencies": {
35
+ "cors": "^2.8.5",
36
+ "crypto-js": "^4.2.0",
37
+ "express": "^4.21.1",
38
+ "mstate-cli": "^0.0.9",
39
+ "open": "^10.1.0"
40
+ }
41
+ }
@@ -1,6 +1,8 @@
1
1
  export enum CmdAction {
2
2
  LOGIN = 'login',
3
3
  LINK = 'link',
4
+ UPDATE = "update",
5
+ DEV = "dev",
4
6
  UNLINK = 'unlink',
5
7
  USER = 'user',
6
8
  ADD = 'add',
@@ -38,16 +38,15 @@ export function handleUpdateSecretKey(secret: string) {
38
38
  flag: 'w',
39
39
  mode: 0o600,
40
40
  });
41
- } catch (error) {}
41
+ } catch (error) { }
42
42
  }
43
43
 
44
44
  export function getSecretKey() {
45
45
  try {
46
46
  const fileData = fs.readFileSync(CRED_FILE_PATH, 'utf8');
47
47
  const secret =
48
- decryptData(fileData)?.secret ||
49
- getValueFromArgs(process.argv, 'secret=');
50
-
48
+ getValueFromArgs(process.argv, 'secret=') ||
49
+ decryptData(fileData)?.secret;
51
50
  if (!secret) {
52
51
  customLog.changeAndThrow(`Please login or Parameter secret is required`);
53
52
  }
@@ -14,20 +14,22 @@ enum Key {
14
14
  PERMISSIONS = 'permissions=',
15
15
  SECRET_KEY = 'secret=',
16
16
  USER_ID = 'user=',
17
+ COMPANY_ID = "company="
17
18
  }
18
19
 
19
20
  class CompanyHandler {
20
- constructor() {}
21
+ constructor() { }
21
22
 
22
23
  async addToken() {
23
24
  const args = process.argv;
24
25
 
25
26
  const pString = getValueFromArgs(args, Key.PERMISSIONS).trim();
26
- const permissions = pString.split(',');
27
+ const permissions = pString.split(',').map(s => s.trim());
27
28
  const secretKey = getSecretKey();
28
29
  const user = getValueFromArgs(args, Key.USER_ID);
30
+ const companyID = getValueFromArgs(args, Key.COMPANY_ID);
29
31
 
30
- if (!pString.length) {
32
+ if (!permissions.length && permissions[0]?.length) {
31
33
  customLog.changeAndThrow(`Parameter permissions is required`);
32
34
  return;
33
35
  }
@@ -42,6 +44,11 @@ class CompanyHandler {
42
44
  return;
43
45
  }
44
46
 
47
+ if (!companyID) {
48
+ customLog.changeAndThrow(`Parameter company is required`);
49
+ return;
50
+ }
51
+
45
52
  const url = `${MSTATE_URL}/company/permission`;
46
53
  const responseJSON = await fetch(url, {
47
54
  method: 'POST',
@@ -52,6 +59,7 @@ class CompanyHandler {
52
59
  body: JSON.stringify({
53
60
  user,
54
61
  permissions,
62
+ company: companyID
55
63
  }),
56
64
  });
57
65
 
@@ -64,17 +72,19 @@ class CompanyHandler {
64
72
  } else {
65
73
  customLog.success('Company updated successfully \n', response?.data);
66
74
  }
75
+
67
76
  }
68
77
 
69
78
  async revokePermission() {
70
79
  const args = process.argv;
71
80
 
72
81
  const pString = getValueFromArgs(args, Key.PERMISSIONS);
73
- const permissions = pString.split(',');
82
+ const permissions = pString.split(',').map(s => s.trim());
74
83
  const secretKey = getSecretKey();
75
84
  const user = getValueFromArgs(args, Key.USER_ID);
85
+ const companyID = getValueFromArgs(args, Key.COMPANY_ID);
76
86
 
77
- if (!permissions.length) {
87
+ if (!permissions.length && permissions[0]?.length) {
78
88
  customLog.changeAndThrow(`Parameter permissions is required`);
79
89
  return;
80
90
  }
@@ -89,6 +99,11 @@ class CompanyHandler {
89
99
  return;
90
100
  }
91
101
 
102
+ if (!companyID) {
103
+ customLog.changeAndThrow(`Parameter company is required`);
104
+ return;
105
+ }
106
+
92
107
  const url = `${MSTATE_URL}/company/permission`;
93
108
  const responseJSON = await fetch(url, {
94
109
  method: 'DELETE',
@@ -97,6 +112,7 @@ class CompanyHandler {
97
112
  'Content-Type': 'application/json',
98
113
  },
99
114
  body: JSON.stringify({
115
+ company: companyID,
100
116
  user,
101
117
  permissions,
102
118
  }),
@@ -148,14 +164,14 @@ class CompanyHandler {
148
164
  const { token } = req.query;
149
165
 
150
166
  if (token) {
151
- console.log('Authentication successful! Token received.');
167
+ console.log('Authentication successful!');
152
168
 
153
169
  // Save the token locally
154
170
  handleUpdateSecretKey(token as string);
155
171
 
156
172
  res.send('<h1>Login successful! You can close this window.</h1>');
157
173
  } else {
158
- console.error('Authentication failed. No token received.');
174
+ console.error('Authentication failed.');
159
175
  res.send('<h1>Authentication failed. Please try again.</h1>');
160
176
  }
161
177
  } catch (error) {
@@ -170,9 +186,9 @@ class CompanyHandler {
170
186
  .then(async () => {
171
187
  await open(
172
188
  MSTATE_DOMAIN +
173
- `oauth?redirect=${encodeURIComponent(
174
- 'cli/mstate/login',
175
- )}&open=${port}&scope=profile`,
189
+ `oauth?redirect=${encodeURIComponent(
190
+ 'cli/mstate/login',
191
+ )}&open=${port}&scope=profile`,
176
192
  );
177
193
  })
178
194
  .catch((err) => {
@@ -181,8 +197,13 @@ class CompanyHandler {
181
197
  });
182
198
  }
183
199
 
200
+ handleUpdateSavedSecretKey() {
201
+ handleUpdateSecretKey(getSecretKey());
202
+ }
203
+
184
204
  logToken() {
185
205
  customLog.info('Token', getSecretKey());
206
+ customLog.info('MSTATE_URL', MSTATE_URL);
186
207
  }
187
208
  }
188
209
 
package/src/index.ts CHANGED
@@ -29,10 +29,18 @@ const [action] = argv.slice(2);
29
29
  break;
30
30
 
31
31
  case CmdAction.USER:
32
- companyHandler.logToken();
33
- // if (hasFlag(argv, '-d')) companyHandler.revokePermission();
34
- // else companyHandler.addToken();
32
+ if (hasFlag(argv, '-d')) await companyHandler.revokePermission();
33
+ else await companyHandler.addToken();
35
34
  break;
35
+
36
+ case CmdAction.UPDATE:
37
+ companyHandler.handleUpdateSavedSecretKey();
38
+ break;
39
+
40
+ // case CmdAction.DEV: // comment this case on production build
41
+ // companyHandler.logToken()
42
+ // break;
43
+
36
44
  case CmdAction.LOGIN:
37
45
  await companyHandler.handleLogin();
38
46
  break;