Skip to content

Commit 7073080

Browse files
authored
Merge pull request #241 from contentstack/staging
DX | 13-01-2025 | Release
2 parents b5aeab3 + fc4b763 commit 7073080

File tree

15 files changed

+1340
-336
lines changed

15 files changed

+1340
-336
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
# Changelog
2+
3+
## [v1.19.0](https://github.com/contentstack/contentstack-management-javascript/tree/v1.19.0) (2025-01-13)
4+
- Feature
5+
- Release 2.0 feature
26
## [v1.18.4](https://github.com/contentstack/contentstack-management-javascript/tree/v1.18.4) (2024-11-22)
37
- Enhancement
48
- Added support for response headers.

LICENSE

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
MIT License
22

3-
Copyright (c) 2012-2024 Contentstack
3+
Copyright (c) 2012-2025 Contentstack
44

55
Permission is hereby granted, free of charge, to any person obtaining a copy
66
of this software and associated documentation files (the "Software"), to deal

lib/core/concurrency-queue.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ export function ConcurrencyQueue ({ axios, config }) {
205205
} else {
206206
return Promise.reject(responseHandler(error))
207207
}
208-
} else if (response.status === 429 || (response.status === 401 && this.config.refreshToken)) {
208+
} else if ((response.status === 401 && this.config.refreshToken)) {
209209
retryErrorType = `Error with status: ${response.status}`
210210
networkError++
211211

lib/stack/bulkOperation/index.js

+103
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,109 @@ export function BulkOperation (http, data = {}) {
99
this.stackHeaders = data.stackHeaders
1010
this.urlPath = `/bulk`
1111

12+
/**
13+
* The addItems request allows you to add multiple items to a release in bulk.
14+
* @memberof BulkOperation
15+
* @func addItems
16+
* @returns {Promise<Object>} Response Object.
17+
* @param {Object} params.data - The data containing the items to be added to the release.
18+
* @param {String} [params.bulk_version] - The bulk version.
19+
* @example
20+
* const itemsData = {
21+
* items: [
22+
* {
23+
* uid: '{{entry_uid}}',
24+
* content_type: '{{content_type_uid}}'
25+
* }
26+
* ]
27+
* }
28+
* client.stack({ api_key: 'api_key'}).bulkOperation().addItems({ data: itemsData })
29+
* .then((response) => { console.log(response) })
30+
*/
31+
this.addItems = async ({ data, bulk_version = "" }) => {
32+
this.urlPath = `/bulk/release/items`;
33+
const headers = {
34+
headers: {
35+
...cloneDeep(this.stackHeaders),
36+
},
37+
};
38+
if (bulk_version) headers.headers.bulk_version = bulk_version;
39+
try {
40+
const response = await http.post(this.urlPath, data, headers);
41+
if (response.data) {
42+
return response.data;
43+
}
44+
} catch (error) {
45+
console.error(error);
46+
}
47+
};
48+
49+
/**
50+
* The updateItems request allows you to update multiple items in a release in bulk.
51+
* @memberof BulkOperation
52+
* @func updateItems
53+
* @returns {Promise<Object>} Response Object.
54+
* @param {Object} params.data - The data containing the items to be updated in the release.
55+
* @param {String} [params.bulk_version] - The bulk version.
56+
* @example
57+
* const itemsData = {
58+
* items: [
59+
* {
60+
* uid: '{{entry_uid}}',
61+
* content_type: '{{content_type_uid}}'
62+
* }
63+
* ]
64+
* }
65+
* client.stack({ api_key: 'api_key'}).bulkOperation().updateItems({ data: itemsData })
66+
* .then((response) => { console.log(response) })
67+
*/
68+
this.updateItems = async ({ data, bulk_version = "" }) => {
69+
this.urlPath = `/bulk/release/update_items`;
70+
const headers = {
71+
headers: {
72+
...cloneDeep(this.stackHeaders),
73+
},
74+
};
75+
if (bulk_version) headers.headers.bulk_version = bulk_version;
76+
try {
77+
const response = await http.put(this.urlPath, data, headers);
78+
if (response.data) {
79+
return response.data;
80+
}
81+
} catch (error) {
82+
console.error(error);
83+
}
84+
};
85+
86+
/**
87+
* The jobStatus request allows you to check the status of a bulk job.
88+
* @memberof BulkOperation
89+
* @func jobStatus
90+
* @returns {Promise<Object>} Response Object.
91+
* @param {String} params.job_id - The ID of the job.
92+
* @param {String} [params.bulk_version] - The bulk version.
93+
* @example
94+
* client.stack({ api_key: 'api_key'}).bulkOperation().jobStatus({ job_id: 'job_id' })
95+
* .then((response) => { console.log(response) })
96+
*/
97+
this.jobStatus = async ({ job_id, bulk_version = "" }) => {
98+
this.urlPath = `/bulk/jobs/${job_id}`;
99+
const headers = {
100+
headers: {
101+
...cloneDeep(this.stackHeaders),
102+
},
103+
};
104+
if (bulk_version) headers.headers.bulk_version = bulk_version;
105+
try {
106+
const response = await http.get(this.urlPath, headers);
107+
if (response.data) {
108+
return response.data;
109+
}
110+
} catch (error) {
111+
console.error(error);
112+
}
113+
};
114+
12115
/**
13116
* The Publish entries and assets in bulk request allows you to publish multiple entries and assets at the same time.
14117
* @memberof BulkOperation

lib/stack/release/items/index.js

+67-6
Original file line numberDiff line numberDiff line change
@@ -52,25 +52,36 @@ export function ReleaseItem (http, data = {}) {
5252
* client.stack({ api_key: 'api_key'}).release('release_uid').delete({items})
5353
* .then((response) => console.log(response.notice))
5454
*/
55-
this.delete = async (items) => {
55+
this.delete = async (params) => {
5656
let param = {}
57-
if (items === undefined) {
57+
if (params.items === undefined && params.item === undefined) {
5858
param = {all: true}
59+
params.items = []
5960
}
6061
try {
6162
const headers = {
6263
headers: { ...cloneDeep(this.stackHeaders) },
6364
data: {
64-
...cloneDeep(items)
65+
...cloneDeep(params)
6566
},
6667
params: {
6768
...cloneDeep(param)
6869
}
6970
} || {}
71+
72+
if (params.release_version) {
73+
headers.headers['release_version'] = params.release_version;
74+
}
75+
76+
if (params.item) {
77+
this.urlPath = `releases/${data.releaseUid}/item`
78+
headers.data['item'] = params.item
79+
} else
80+
headers.data['items'] = params.items
7081

7182
const response = await http.delete(this.urlPath, headers)
7283
if (response.data) {
73-
return new Release(http, { ...response.data, stackHeaders: data.stackHeaders })
84+
return response.data
7485
} else {
7586
throw error(response)
7687
}
@@ -129,9 +140,18 @@ export function ReleaseItem (http, data = {}) {
129140
...cloneDeep(this.stackHeaders)
130141
}
131142
} || {}
143+
144+
if (param.release_version) {
145+
headers.headers['release_version'] = param.release_version;
146+
}
147+
if (param.item) {
148+
this.urlPath = `releases/${data.releaseUid}/item`
149+
param['item'] = param.item
150+
} else
151+
param['items'] = param.items
132152

133153
try {
134-
const response = await http.post(param.item ? `releases/${data.releaseUid}/item` : this.urlPath, param, headers)
154+
const response = await http.post(this.urlPath, param, headers)
135155
if (response.data) {
136156
if (response.data) {
137157
return new Release(http, { ...response.data, stackHeaders: data.stackHeaders })
@@ -166,7 +186,10 @@ export function ReleaseItem (http, data = {}) {
166186
...cloneDeep(param)
167187
}
168188
} || {}
169-
189+
if (param.release_version) {
190+
headers.headers['release_version'] = param.release_version;
191+
delete headers.params.release_version;
192+
}
170193
const response = await http.get(this.urlPath, headers)
171194
if (response.data) {
172195
return new ContentstackCollection(response, http, this.stackHeaders, ReleaseItemCollection)
@@ -177,6 +200,44 @@ export function ReleaseItem (http, data = {}) {
177200
error(err)
178201
}
179202
}
203+
204+
/**
205+
* The move request allows you to move multiple items within a release.
206+
* @memberof ReleaseItem
207+
* @func move
208+
* @returns {Promise<Object>} Response Object.
209+
* @param {Object} params.param - The data containing the items to be moved within the release.
210+
* @param {String} [params.release_version] - The release version.
211+
* @example
212+
* const moveData = {
213+
* items: [
214+
* {
215+
* uid: '{{entry_uid}}',
216+
* content_type: '{{content_type_uid}}'
217+
* }
218+
* ]
219+
* }
220+
* client.stack({ api_key: 'api_key'}).release('release_uid').item().move({ param: moveData, release_version: '1.0' })
221+
* .then((response) => { console.log(response) })
222+
*/
223+
this.move = async ({ param, release_version = '' }) => {
224+
const headers = {
225+
headers: {
226+
...cloneDeep(this.stackHeaders)
227+
}
228+
} || {}
229+
if (release_version) {
230+
headers.headers['release_version'] = release_version;
231+
}
232+
try {
233+
const response = await http.put(`${this.urlPath}/move`, param, headers)
234+
if (response.data) {
235+
return response.data
236+
}
237+
} catch (err) {
238+
throw error(err)
239+
}
240+
}
180241
}
181242
return this
182243
}

0 commit comments

Comments
 (0)