storyblok 3.17.1 → 3.18.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/.github/workflows/release.yml +2 -2
- package/README.md +39 -31
- package/package.json +1 -1
- package/src/cli.js +1 -1
- package/src/constants.js +1 -1
- package/src/utils/api.js +35 -12
- package/src/utils/get-questions.js +54 -15
|
@@ -12,7 +12,7 @@ jobs:
|
|
|
12
12
|
- uses: actions/checkout@v3
|
|
13
13
|
- uses: actions/setup-node@v3
|
|
14
14
|
with:
|
|
15
|
-
node-version:
|
|
15
|
+
node-version: 18
|
|
16
16
|
cache: 'yarn'
|
|
17
17
|
- name: Install dependencies
|
|
18
18
|
run: yarn
|
|
@@ -20,4 +20,4 @@ jobs:
|
|
|
20
20
|
env:
|
|
21
21
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
22
22
|
NPM_TOKEN: ${{ secrets.NPM_PUBLISH }}
|
|
23
|
-
run: npx semantic-release
|
|
23
|
+
run: npx semantic-release
|
package/README.md
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
|
|
6
6
|
[](https://www.npmjs.com/package/storyblok)
|
|
7
7
|
[](ttps://img.shields.io/npm/dt/storyblok.svg)
|
|
8
|
-
[](https://github.com/storyblok/storyblok/issues?q=is%3Aopen+is%3Aissue)
|
|
9
|
-
[](https://github.com/storyblok/storyblok/issues?q=is%3Aissue+is%3Aclosed)
|
|
8
|
+
[](https://github.com/storyblok/storyblok/issues?q=is%3Aopen+is%3Aissue)
|
|
9
|
+
[](https://github.com/storyblok/storyblok-cli/issues?q=is%3Aissue+is%3Aclosed)
|
|
10
10
|
|
|
11
11
|
## BREAKING CHANGE
|
|
12
12
|
|
|
@@ -22,6 +22,43 @@ $ npm i storyblok -g
|
|
|
22
22
|
|
|
23
23
|
## Commands
|
|
24
24
|
|
|
25
|
+
|
|
26
|
+
### login
|
|
27
|
+
|
|
28
|
+
Login to the Storyblok cli
|
|
29
|
+
|
|
30
|
+
```sh
|
|
31
|
+
$ storyblok login
|
|
32
|
+
```
|
|
33
|
+
#### Login options
|
|
34
|
+
|
|
35
|
+
##### Options for Login with email and password
|
|
36
|
+
* `email`: your user's email address
|
|
37
|
+
* `password`: your user's password
|
|
38
|
+
|
|
39
|
+
##### Options for Login with token (Recomended to SSO user's but works with all user accounts)
|
|
40
|
+
* `token`: your access token
|
|
41
|
+
|
|
42
|
+
**For Both login options you nedd to pass the region**
|
|
43
|
+
|
|
44
|
+
* `region`: your user's region (default: `eu`). You can use `us`, `cn` or `eu`. This region will be used for the other cli's commands.
|
|
45
|
+
|
|
46
|
+
### logout
|
|
47
|
+
|
|
48
|
+
Logout from the Storyblok cli
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
$ storyblok logout
|
|
52
|
+
```
|
|
53
|
+
### user
|
|
54
|
+
|
|
55
|
+
Get the currently logged in user
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
$ storyblok user
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
|
|
25
62
|
### select
|
|
26
63
|
|
|
27
64
|
Usage to kickstart a boilerplate, fieldtype or theme
|
|
@@ -188,35 +225,6 @@ Create a space in Storyblok and select the boilerplate to use
|
|
|
188
225
|
$ storyblok quickstart
|
|
189
226
|
```
|
|
190
227
|
|
|
191
|
-
### logout
|
|
192
|
-
|
|
193
|
-
Logout from the Storyblok cli
|
|
194
|
-
|
|
195
|
-
```sh
|
|
196
|
-
$ storyblok logout
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
### login
|
|
200
|
-
|
|
201
|
-
Login to the Storyblok cli
|
|
202
|
-
|
|
203
|
-
```sh
|
|
204
|
-
$ storyblok login
|
|
205
|
-
```
|
|
206
|
-
#### Options
|
|
207
|
-
|
|
208
|
-
* `email`: your user's email address
|
|
209
|
-
* `password`: your user's password
|
|
210
|
-
* `region`: your user's region (default: `eu`). You can use `us`, `cn` or `eu`. This region will be used for the other cli's commands.
|
|
211
|
-
|
|
212
|
-
### user
|
|
213
|
-
|
|
214
|
-
Get the currently logged in user
|
|
215
|
-
|
|
216
|
-
```sh
|
|
217
|
-
$ storyblok user
|
|
218
|
-
```
|
|
219
|
-
|
|
220
228
|
### generate-migration
|
|
221
229
|
|
|
222
230
|
Create a migration file (with the name `change_<COMPONENT>_<FIELD>.js`) inside the `migrations` folder. Check **Migrations** section to more details
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -16,7 +16,7 @@ const { getQuestions, lastStep, api, creds } = require('./utils')
|
|
|
16
16
|
const { SYNC_TYPES, COMMANDS } = require('./constants')
|
|
17
17
|
|
|
18
18
|
clear()
|
|
19
|
-
console.log(chalk.cyan(figlet.textSync('
|
|
19
|
+
console.log(chalk.cyan(figlet.textSync('storyblok')))
|
|
20
20
|
console.log()
|
|
21
21
|
console.log()
|
|
22
22
|
console.log('Hi, welcome to the Storyblok CLI')
|
package/src/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const API_URL = 'https://api.storyblok.com/v1/'
|
|
2
2
|
const US_API_URL = 'https://api-us.storyblok.com/v1/'
|
|
3
|
-
const CN_API_URL = 'https://
|
|
3
|
+
const CN_API_URL = 'https://app.storyblokchina.cn/v1/'
|
|
4
4
|
const LOGIN_URL = `${API_URL}users/login`
|
|
5
5
|
const SIGNUP_URL = `${API_URL}users/signup`
|
|
6
6
|
|
package/src/utils/api.js
CHANGED
|
@@ -35,7 +35,8 @@ module.exports = {
|
|
|
35
35
|
return path
|
|
36
36
|
},
|
|
37
37
|
|
|
38
|
-
async login (
|
|
38
|
+
async login (content) {
|
|
39
|
+
const { email, password, region } = content
|
|
39
40
|
try {
|
|
40
41
|
const response = await axios.post(`${this.apiSwitcher(region)}users/login`, {
|
|
41
42
|
email: email,
|
|
@@ -68,10 +69,10 @@ module.exports = {
|
|
|
68
69
|
otp_attempt: code
|
|
69
70
|
})
|
|
70
71
|
|
|
71
|
-
return this.persistCredentials(email, newResponse.data || {}, region)
|
|
72
|
+
return this.persistCredentials(email, newResponse.data.access_token || {}, region)
|
|
72
73
|
}
|
|
73
74
|
|
|
74
|
-
return this.persistCredentials(email, data, region)
|
|
75
|
+
return this.persistCredentials(email, data.access_token, region)
|
|
75
76
|
} catch (e) {
|
|
76
77
|
return Promise.reject(e)
|
|
77
78
|
}
|
|
@@ -92,27 +93,37 @@ module.exports = {
|
|
|
92
93
|
}
|
|
93
94
|
},
|
|
94
95
|
|
|
95
|
-
persistCredentials (email,
|
|
96
|
-
const token = this.extractToken(data)
|
|
96
|
+
persistCredentials (email, token = null, region = 'eu') {
|
|
97
97
|
if (token) {
|
|
98
98
|
this.oauthToken = token
|
|
99
99
|
creds.set(email, token, region)
|
|
100
100
|
|
|
101
|
-
return Promise.resolve(
|
|
101
|
+
return Promise.resolve(token)
|
|
102
102
|
}
|
|
103
103
|
return Promise.reject(new Error('The code could not be authenticated.'))
|
|
104
104
|
},
|
|
105
105
|
|
|
106
106
|
async processLogin () {
|
|
107
107
|
try {
|
|
108
|
-
|
|
109
|
-
|
|
108
|
+
let content = {}
|
|
109
|
+
await inquirer
|
|
110
|
+
.prompt(getQuestions('login-strategy'))
|
|
111
|
+
.then(async ({ strategy }) => {
|
|
112
|
+
content = await inquirer.prompt(getQuestions(strategy))
|
|
113
|
+
})
|
|
114
|
+
.catch((error) => {
|
|
115
|
+
console.log(error)
|
|
116
|
+
})
|
|
110
117
|
|
|
111
|
-
|
|
118
|
+
if (!content.token) {
|
|
119
|
+
await this.login(content)
|
|
120
|
+
} else {
|
|
121
|
+
await this.loginWithToken(content)
|
|
122
|
+
}
|
|
112
123
|
|
|
113
124
|
console.log(chalk.green('✓') + ' Log in successfully! Token has been added to .netrc file.')
|
|
114
125
|
|
|
115
|
-
return Promise.resolve(
|
|
126
|
+
return Promise.resolve(content)
|
|
116
127
|
} catch (e) {
|
|
117
128
|
if (e.response && e.response.data && e.response.data.error) {
|
|
118
129
|
console.error(chalk.red('X') + ' An error ocurred when login the user: ' + e.response.data.error)
|
|
@@ -125,8 +136,20 @@ module.exports = {
|
|
|
125
136
|
}
|
|
126
137
|
},
|
|
127
138
|
|
|
128
|
-
|
|
129
|
-
|
|
139
|
+
async loginWithToken (content) {
|
|
140
|
+
const { token, region } = content
|
|
141
|
+
try {
|
|
142
|
+
const { data } = await axios.get(`${this.apiSwitcher(region)}users/me`, {
|
|
143
|
+
headers: {
|
|
144
|
+
Authorization: token
|
|
145
|
+
}
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
this.persistCredentials(data.user.email, token, region)
|
|
149
|
+
return data.user
|
|
150
|
+
} catch (e) {
|
|
151
|
+
return Promise.reject(e)
|
|
152
|
+
}
|
|
130
153
|
},
|
|
131
154
|
|
|
132
155
|
logout (unauthorized) {
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
const getOptions = (subCommand, argv = {}, api = {}) => {
|
|
2
2
|
let email = ''
|
|
3
|
+
const moreOptions = [
|
|
4
|
+
'delete-templates',
|
|
5
|
+
'pull-components',
|
|
6
|
+
'push-components',
|
|
7
|
+
'scaffold'
|
|
8
|
+
]
|
|
9
|
+
const regionInput = {
|
|
10
|
+
type: 'input',
|
|
11
|
+
name: 'region',
|
|
12
|
+
message: 'Enter your user\'s region (us, eu or cn):',
|
|
13
|
+
validate: function (value) {
|
|
14
|
+
const flagList = ['us', 'cn', 'eu']
|
|
15
|
+
if (flagList.indexOf(value) > -1) {
|
|
16
|
+
return true
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return 'Please enter a valid region: us, eu or cn'
|
|
20
|
+
}
|
|
21
|
+
}
|
|
3
22
|
|
|
4
23
|
if (subCommand === 'select') {
|
|
5
24
|
return [
|
|
@@ -103,7 +122,29 @@ const getOptions = (subCommand, argv = {}, api = {}) => {
|
|
|
103
122
|
]
|
|
104
123
|
}
|
|
105
124
|
|
|
106
|
-
if (subCommand === 'login') {
|
|
125
|
+
if (subCommand === 'login-strategy') {
|
|
126
|
+
return [
|
|
127
|
+
{
|
|
128
|
+
type: 'list',
|
|
129
|
+
name: 'strategy',
|
|
130
|
+
message: 'Select the login strategy: ',
|
|
131
|
+
choices: [
|
|
132
|
+
{
|
|
133
|
+
name: 'With email and password (Common users with storyblok account)',
|
|
134
|
+
value: 'login-with-email',
|
|
135
|
+
short: 'Email'
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: 'With Token (Most recommended for SSO users)',
|
|
139
|
+
value: 'login-with-token',
|
|
140
|
+
short: 'Token'
|
|
141
|
+
}
|
|
142
|
+
]
|
|
143
|
+
}
|
|
144
|
+
]
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (subCommand === 'login-with-email') {
|
|
107
148
|
return [
|
|
108
149
|
{
|
|
109
150
|
type: 'input',
|
|
@@ -129,29 +170,27 @@ const getOptions = (subCommand, argv = {}, api = {}) => {
|
|
|
129
170
|
return 'Please enter a valid password:'
|
|
130
171
|
}
|
|
131
172
|
},
|
|
173
|
+
regionInput
|
|
174
|
+
]
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (subCommand === 'login-with-token') {
|
|
178
|
+
return [
|
|
132
179
|
{
|
|
133
180
|
type: 'input',
|
|
134
|
-
name: '
|
|
135
|
-
message: 'Enter your
|
|
181
|
+
name: 'token',
|
|
182
|
+
message: 'Enter your token:',
|
|
136
183
|
validate: function (value) {
|
|
137
|
-
|
|
138
|
-
if (flagList.indexOf(value) > -1) {
|
|
184
|
+
if (value.length > 0) {
|
|
139
185
|
return true
|
|
140
186
|
}
|
|
141
|
-
|
|
142
|
-
return 'Please enter a valid region: us, eu or cn'
|
|
187
|
+
return 'Please enter a valid token:'
|
|
143
188
|
}
|
|
144
|
-
}
|
|
189
|
+
},
|
|
190
|
+
regionInput
|
|
145
191
|
]
|
|
146
192
|
}
|
|
147
193
|
|
|
148
|
-
const moreOptions = [
|
|
149
|
-
'delete-templates',
|
|
150
|
-
'pull-components',
|
|
151
|
-
'push-components',
|
|
152
|
-
'scaffold'
|
|
153
|
-
]
|
|
154
|
-
|
|
155
194
|
if (moreOptions.indexOf(subCommand) > -1) {
|
|
156
195
|
const loginQuestions = [
|
|
157
196
|
{
|