Skip to content

Commit 314c8e0

Browse files
authored
Merge pull request #941 from contentstack/staging
Merge staging to main
2 parents 630f3d4 + 8e46a18 commit 314c8e0

100 files changed

Lines changed: 28022 additions & 5496 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/secrets-scan.yml

Lines changed: 0 additions & 11 deletions
This file was deleted.

package-lock.json

Lines changed: 19555 additions & 1540 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/contentstack-auth/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ $ npm install -g @contentstack/cli-auth
1818
$ csdx COMMAND
1919
running command...
2020
$ csdx (--version)
21-
@contentstack/cli-auth/1.3.11 darwin-x64 node-v18.12.1
21+
@contentstack/cli-auth/1.3.12 darwin-arm64 node-v18.16.0
2222
$ csdx --help [COMMAND]
2323
USAGE
2424
$ csdx COMMAND

packages/contentstack-auth/messages/index.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"CLI_AUTH_LOGIN_ASK_CHANNEL_FOR_OTP": "Please select OTP channel",
23
"CLI_AUTH_LOGIN_ENTER_EMAIL_ADDRESS": "Enter your email address",
34
"CLI_AUTH_LOGIN_ENTER_PASSWORD": "Enter your password",
45
"CLI_AUTH_LOGIN_SUCCESS": "Successfully logged in!!",

packages/contentstack-auth/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@contentstack/cli-auth",
33
"description": "Contentstack CLI plugin for authentication activities",
4-
"version": "1.3.11",
4+
"version": "1.3.12",
55
"author": "Contentstack",
66
"bugs": "https://github.com/contentstack/cli/issues",
77
"scripts": {
@@ -22,8 +22,8 @@
2222
"test:unit:report": "nyc --extension .ts mocha --forbid-only \"test/unit/**/*.test.ts\""
2323
},
2424
"dependencies": {
25-
"@contentstack/cli-command": "^1.2.10",
26-
"@contentstack/cli-utilities": "^1.5.0",
25+
"@contentstack/cli-command": "^1.2.11",
26+
"@contentstack/cli-utilities": "^1.5.1",
2727
"chalk": "^4.0.0",
2828
"debug": "^4.1.1",
2929
"inquirer": "8.2.4",

packages/contentstack-auth/src/commands/auth/tokens/add.ts

Lines changed: 14 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@ import { Command } from '@contentstack/cli-command';
22
import {
33
logger,
44
cliux,
5-
CLIError,
65
configHandler,
76
printFlagDeprecation,
87
flags,
9-
managementSDKClient,
108
FlagInput,
9+
HttpClient,
10+
messageHandler,
1111
} from '@contentstack/cli-utilities';
1212
import { askTokenType } from '../../../utils/interactive';
13-
import { tokenValidation } from '../../../utils';
14-
1513
export default class TokensAddCommand extends Command {
1614
static description = 'Adds management/delivery tokens to your session to use it with other CLI commands';
1715

@@ -130,39 +128,6 @@ export default class TokensAddCommand extends Command {
130128
token = await cliux.inquire({ type: 'input', message: 'CLI_AUTH_TOKENS_ADD_ENTER_TOKEN', name: 'token' });
131129
}
132130

133-
const managementAPIClient = await managementSDKClient({ host: this.cmaHost });
134-
135-
let doBranchesExistInPlan: boolean = false;
136-
137-
if (isManagement && apiKey && token) {
138-
await managementAPIClient
139-
.stack({ api_key: apiKey, management_token: token })
140-
.branch()
141-
.query()
142-
.find()
143-
.then(() => (doBranchesExistInPlan = true))
144-
.catch((err) => {
145-
if (err.errorCode && err.errorMessage && branch) {
146-
throw new Error(err.errorMessage);
147-
}
148-
});
149-
} else {
150-
if (!apiKey) {
151-
throw new Error('Api key is required');
152-
}
153-
if (!token) {
154-
throw new Error('Token is required');
155-
}
156-
}
157-
158-
if (doBranchesExistInPlan && !branch) {
159-
branch = await cliux.inquire({
160-
type: 'input',
161-
message: 'CLI_AUTH_ENTER_BRANCH',
162-
name: 'branch',
163-
});
164-
}
165-
166131
if (isDelivery && !environment) {
167132
environment = await cliux.inquire({
168133
type: 'input',
@@ -171,31 +136,18 @@ export default class TokensAddCommand extends Command {
171136
});
172137
}
173138

174-
let tokenValidationResult;
175-
176-
if (type === 'delivery') {
177-
branch = branch || 'main';
178-
tokenValidationResult = await tokenValidation.validateDeliveryToken(
179-
this.deliveryAPIClient,
180-
apiKey,
181-
token,
182-
environment,
183-
this.region.name,
184-
this.cdaHost,
185-
branch,
186-
);
187-
} else if (type === 'management') {
188-
tokenValidationResult = await tokenValidation.validateManagementToken(
189-
managementAPIClient,
190-
apiKey,
191-
token,
192-
doBranchesExistInPlan ? branch : null,
193-
);
194-
}
195-
if (!tokenValidationResult.valid) {
196-
throw new CLIError(tokenValidationResult.message);
197-
}
139+
if (type === 'management') {
140+
// FIXME - Once the SDK refresh token issue is resolved, need to revert this back to SDK call
141+
const httpClient = new HttpClient({ headers: { api_key: apiKey, authorization: token } });
198142

143+
const response = (await httpClient.get(`https://${this.cmaHost}/v3/environments?limit=1`)).data;
144+
145+
if (response?.error_code === 105) {
146+
throw new Error(messageHandler.parse('CLI_AUTH_TOKENS_VALIDATION_INVALID_MANAGEMENT_TOKEN'));
147+
} else if (response?.error_message) {
148+
throw new Error(response.error_message);
149+
}
150+
}
199151
if (isManagement) {
200152
configHandler.set(`${configKeyTokens}.${alias}`, { token, apiKey, type });
201153
} else {
@@ -210,7 +162,7 @@ export default class TokensAddCommand extends Command {
210162
} catch (error) {
211163
logger.error('token add error', error.message);
212164
cliux.print('CLI_AUTH_TOKENS_ADD_FAILED', { color: 'yellow' });
213-
cliux.print(error.message.message ? error.message.message : error.message, { color: 'red' });
165+
cliux.error(error.message.message ? error.message.message : error.message);
214166
}
215167
}
216168
}

packages/contentstack-auth/src/utils/tokens-validation.ts

Lines changed: 1 addition & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,5 @@
11
import { messageHandler, logger } from '@contentstack/cli-utilities';
22

3-
/**
4-
* Validate delivery token
5-
* @param contentStackClient
6-
* @param apiKey
7-
* @param deliveryToken
8-
* @param environment
9-
* @param region
10-
* @returns
11-
*/
12-
export const validateDeliveryToken = async (
13-
contentStackClient: any,
14-
apiKey: string,
15-
deliveryToken: string,
16-
environment: string,
17-
region: string,
18-
host: string,
19-
branch: string,
20-
): Promise<any> => {
21-
let result: { valid: boolean; message: string };
22-
try {
23-
const regionMap = {
24-
EU: 'eu',
25-
NA: 'us',
26-
AZURE_NA: 'azure-na',
27-
AZURE_EU: 'azure-eu',
28-
};
29-
30-
const stack = contentStackClient.Stack({
31-
api_key: apiKey,
32-
delivery_token: deliveryToken,
33-
environment,
34-
region: regionMap[region],
35-
host,
36-
branch,
37-
});
38-
39-
const parsedHost = host.replace(/^https?:\/\//, '');
40-
stack.setHost(parsedHost);
41-
const deliveryTokenResult = await stack.getContentTypes({ limit: 1 });
42-
43-
logger.debug('delivery token validation result', deliveryTokenResult);
44-
if (deliveryTokenResult?.content_types) {
45-
result = { valid: true, message: deliveryTokenResult };
46-
} else {
47-
result = { valid: false, message: messageHandler.parse('CLI_AUTH_TOKENS_VALIDATION_INVALID_DELIVERY_TOKEN') };
48-
}
49-
} catch (error) {
50-
logger.debug('validate delivery token error', error);
51-
if (error.error_code === 109) {
52-
result = { valid: false, message: messageHandler.parse('CLI_AUTH_TOKENS_VALIDATION_INVALID_API_KEY') };
53-
} else if (error.error_code === 141) {
54-
result = { valid: false, message: messageHandler.parse('CLI_AUTH_TOKENS_VALIDATION_INVALID_ENVIRONMENT_NAME') };
55-
} else if (error?.error_code) {
56-
throw new Error(error?.error_message);
57-
} else {
58-
result = { valid: false, message: messageHandler.parse('CLI_AUTH_TOKENS_VALIDATION_INVALID_DELIVERY_TOKEN') };
59-
}
60-
}
61-
return result;
62-
};
63-
643
/**
654
* Validate environment
665
* @param contentStackClient
@@ -75,7 +14,7 @@ export const validateEnvironment = async (
7514
): Promise<any> => {
7615
let result: { valid: boolean; message: string };
7716
try {
78-
const validationResult = await contentStackClient.stack({ api_key: apiKey }).environment(environment).fetch();
17+
const validationResult = await contentStackClient.Stack({ api_key: apiKey }).environment(environment).fetch();
7918
logger.debug('environment validation result', validationResult);
8019
if (validationResult.name === environment) {
8120
result = { valid: true, message: validationResult };
@@ -89,46 +28,6 @@ export const validateEnvironment = async (
8928
return result;
9029
};
9130

92-
/**
93-
* Validate management token
94-
* @param contentStackClient
95-
* @param apiKey
96-
* @param managementToken
97-
* @returns { valid: boolean; message: any }
98-
* Note: Fetching one content type using the management token to check whether it is valid or not
99-
*/
100-
export const validateManagementToken = async (
101-
contentStackClient: any,
102-
apiKey: string,
103-
managementToken: string,
104-
branch: string,
105-
): Promise<any> => {
106-
let result: { valid: boolean; message: string };
107-
try {
108-
const validationResuslt = await contentStackClient.axiosInstance.get('/content_types?limit=1&include_branch=true', {
109-
headers: { api_key: apiKey, authorization: managementToken, branch },
110-
});
111-
112-
logger.debug('Management validation result', validationResuslt);
113-
if (validationResuslt.status === 200) {
114-
result = { valid: true, message: validationResuslt };
115-
} else {
116-
result = { valid: false, message: messageHandler.parse('CLI_AUTH_TOKENS_VALIDATION_INVALID_MANAGEMENT_TOKEN') };
117-
}
118-
} catch (error) {
119-
logger.error('Failed to validate management token', error);
120-
if (error.response && error.response.status === 401) {
121-
result = { valid: false, message: messageHandler.parse('CLI_AUTH_TOKENS_VALIDATION_INVALID_MANAGEMENT_TOKEN') };
122-
}
123-
if (error?.response?.data) {
124-
throw new Error(error.response.data?.error_message);
125-
} else {
126-
result = { valid: false, message: messageHandler.parse('CLI_AUTH_TOKENS_VALIDATION_INVALID_API_KEY') };
127-
}
128-
}
129-
return result;
130-
};
131-
13231
/**
13332
* Validate API key
13433
* @param contentStackClient

packages/contentstack-bootstrap/README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ $ npm install -g @contentstack/cli-cm-bootstrap
1515
$ csdx COMMAND
1616
running command...
1717
$ csdx (--version)
18-
@contentstack/cli-cm-bootstrap/1.4.12 darwin-x64 node-v18.12.1
18+
@contentstack/cli-cm-bootstrap/1.4.13 darwin-arm64 node-v18.16.0
1919
$ csdx --help [COMMAND]
2020
USAGE
2121
$ csdx COMMAND
@@ -45,9 +45,10 @@ Bootstrap contentstack apps
4545
```
4646
USAGE
4747
$ csdx cm:bootstrap [--app-name <value>] [--project-dir <value>] [-k <value> | --org <value> | -n <value>] [-y
48-
<value>]
48+
<value>] [-a <value>]
4949
5050
FLAGS
51+
-a, --alias=<value> Alias of the management token
5152
-k, --stack-api-key=<value> Provide stack API key to seed content
5253
-n, --stack-name=<value> Name of a new stack that will be created.
5354
-y, --yes=<value> [Optional] Skip stack confirmation

packages/contentstack-bootstrap/package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@contentstack/cli-cm-bootstrap",
33
"description": "Bootstrap contentstack apps",
4-
"version": "1.4.12",
4+
"version": "1.4.13",
55
"author": "Contentstack",
66
"bugs": "https://github.com/contentstack/cli/issues",
77
"scripts": {
@@ -17,9 +17,9 @@
1717
"test:report": "nyc --reporter=lcov mocha \"test/**/*.test.js\""
1818
},
1919
"dependencies": {
20-
"@contentstack/cli-cm-seed": "^1.4.12",
21-
"@contentstack/cli-command": "^1.2.10",
22-
"@contentstack/cli-utilities": "^1.5.0",
20+
"@contentstack/cli-cm-seed": "^1.4.13",
21+
"@contentstack/cli-command": "^1.2.11",
22+
"@contentstack/cli-utilities": "^1.5.1",
2323
"inquirer": "8.2.4",
2424
"mkdirp": "^1.0.4",
2525
"tar": "^6.1.13"
@@ -73,4 +73,4 @@
7373
}
7474
},
7575
"repository": "contentstack/cli"
76-
}
76+
}

packages/contentstack-bootstrap/src/bootstrap/index.ts

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ export interface SeedParams {
2626
org?: string;
2727
stackName?: string;
2828
yes?: string;
29+
managementTokenAlias?: string | undefined;
30+
managementToken?: string | undefined;
2931
}
3032

3133
/**
@@ -62,7 +64,7 @@ export default class Bootstrap {
6264
}
6365

6466
async run(): Promise<any> {
65-
cliux.loader(messageHandler.parse('CLI_BOOTSTRAP_START_CLONE_APP'))
67+
cliux.loader(messageHandler.parse('CLI_BOOTSTRAP_START_CLONE_APP'));
6668

6769
try {
6870
await this.ghClient.getLatest(this.cloneDirectory);
@@ -79,35 +81,40 @@ export default class Bootstrap {
7981

8082
// seed plugin start
8183
try {
82-
const cmd = ['--repo', this.appConfig.stack]
84+
const cmd = ['--repo', this.appConfig.stack];
8385
if (this.options.seedParams.stackAPIKey) {
84-
cmd.push('--stack-api-key', this.options.seedParams.stackAPIKey)
86+
cmd.push('--stack-api-key', this.options.seedParams.stackAPIKey);
8587
}
8688
if (this.options.seedParams.org) {
87-
cmd.push('--org', this.options.seedParams.org)
89+
cmd.push('--org', this.options.seedParams.org);
8890
}
8991
if (this.options.seedParams.stackName) {
90-
cmd.push('-n', this.options.seedParams.stackName)
92+
cmd.push('-n', this.options.seedParams.stackName);
9193
}
9294
if (this.options.seedParams.yes) {
9395
cmd.push('-y', this.options.seedParams.yes);
9496
}
97+
if (this.options.seedParams.managementTokenAlias) {
98+
cmd.push('--alias', this.options.seedParams.managementTokenAlias);
99+
}
100+
95101
const result = await ContentStackSeed.run(cmd);
96-
if ( result && result.api_key) {
102+
if (result && result.api_key) {
97103
await setupEnvironments(
98104
this.managementAPIClient,
99105
result.api_key,
100106
this.appConfig,
101107
this.cloneDirectory,
102108
this.region,
103109
this.options.livePreviewEnabled as boolean,
110+
this.options.seedParams.managementToken as string,
104111
);
105112
} else {
106113
throw new Error(messageHandler.parse('CLI_BOOTSTRAP_NO_API_KEY_FOUND'));
107114
}
108-
cliux.print(messageHandler.parse('CLI_BOOTSTRAP_SUCCESS'))
115+
cliux.print(messageHandler.parse('CLI_BOOTSTRAP_SUCCESS'));
109116
} catch (error) {
110-
cliux.error(messageHandler.parse('CLI_BOOTSTRAP_STACK_CREATION_FAILED', this.appConfig.stack))
117+
cliux.error(messageHandler.parse('CLI_BOOTSTRAP_STACK_CREATION_FAILED', this.appConfig.stack));
111118
}
112119
}
113120
}

0 commit comments

Comments
 (0)