contentful-management
Version:
Client for Contentful's Content Management API
576 lines (575 loc) • 18.2 kB
JavaScript
const _excluded = ["url"];
function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
import { createRequestConfig } from 'contentful-sdk-core';
import entities from './entities';
/**
* @private
*/
export default function createClientApi(makeRequest) {
const {
wrapSpace,
wrapSpaceCollection
} = entities.space;
const {
wrapUser
} = entities.user;
const {
wrapPersonalAccessToken,
wrapPersonalAccessTokenCollection
} = entities.personalAccessToken;
const {
wrapAccessToken,
wrapAccessTokenCollection
} = entities.accessToken;
const {
wrapOrganization,
wrapOrganizationCollection
} = entities.organization;
const {
wrapUsageCollection
} = entities.usage;
const {
wrapAppDefinition
} = entities.appDefinition;
const {
wrapEnvironmentTemplate,
wrapEnvironmentTemplateCollection
} = entities.environmentTemplate;
return {
/**
* Gets all environment templates for a given organization with the lasted version
* @param organizationId - Organization ID
* @return Promise for a collection of EnvironmentTemplates
* ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getEnvironmentTemplates('<organization_id>')
* .then((response) => console.log(response.items))
* .catch(console.error)
* ```
*/
getEnvironmentTemplates: function getEnvironmentTemplates(organizationId, query = {}) {
return makeRequest({
entityType: 'EnvironmentTemplate',
action: 'getMany',
params: {
organizationId,
query: createRequestConfig({
query
}).params
}
}).then(data => wrapEnvironmentTemplateCollection(makeRequest, data, organizationId));
},
/**
* Gets the lasted version environment template if params.version is not specified
* @param params.organizationId - Organization ID
* @param params.environmentTemplateId - Environment template ID
* @param [params.version] - Template version number to return a specific version of the environment template
* @return Promise for a EnvironmentTemplate
* ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getEnvironmentTemplate({
* organizationId: '<organization_id>',
* environmentTemplateId: '<environment_template_id>',
* version: version>
* })
* .then((space) => console.log(space))
* .catch(console.error)
* ```
*/
getEnvironmentTemplate: function getEnvironmentTemplate({
organizationId,
environmentTemplateId,
version,
query = {}
}) {
return makeRequest({
entityType: 'EnvironmentTemplate',
action: 'get',
params: {
organizationId,
environmentTemplateId,
version,
query: createRequestConfig({
query
}).params
}
}).then(data => wrapEnvironmentTemplate(makeRequest, data, organizationId));
},
/**
* Creates an environment template
* @param organizationId - Organization ID
* @param environmentTemplateData - Object representation of the environment template to be created
* @return Promise for the newly created EnvironmentTemplate
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.createEnvironmentTemplate('<organization_id>', {<environment_template_date>})
* .then((environmentTemplate) => console.log(environmentTemplate))
* .catch(console.error)
* ```
*/
createEnvironmentTemplate: function createEnvironmentTemplate(organizationId, environmentTemplateData) {
return makeRequest({
entityType: 'EnvironmentTemplate',
action: 'create',
params: {
organizationId
},
payload: environmentTemplateData
}).then(data => wrapEnvironmentTemplate(makeRequest, data, organizationId));
},
/**
* Gets all spaces
* @return Promise for a collection of Spaces
* ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getSpaces()
* .then((response) => console.log(response.items))
* .catch(console.error)
* ```
*/
getSpaces: function getSpaces(query = {}) {
return makeRequest({
entityType: 'Space',
action: 'getMany',
params: {
query: createRequestConfig({
query: query
}).params
}
}).then(data => wrapSpaceCollection(makeRequest, data));
},
/**
* Gets a space
* @param spaceId - Space ID
* @return Promise for a Space
* ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getSpace('<space_id>')
* .then((space) => console.log(space))
* .catch(console.error)
* ```
*/
getSpace: function getSpace(spaceId) {
return makeRequest({
entityType: 'Space',
action: 'get',
params: {
spaceId
}
}).then(data => wrapSpace(makeRequest, data));
},
/**
* Creates a space
* @param spaceData - Object representation of the Space to be created
* @param organizationId - Organization ID, if the associated token can manage more than one organization.
* @return Promise for the newly created Space
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.createSpace({
* name: 'Name of new space'
* })
* .then((space) => console.log(space))
* .catch(console.error)
* ```
*/
createSpace: function createSpace(spaceData, organizationId) {
return makeRequest({
entityType: 'Space',
action: 'create',
params: {
organizationId
},
payload: spaceData
}).then(data => wrapSpace(makeRequest, data));
},
/**
* Gets an organization
* @param id - Organization ID
* @return Promise for a Organization
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getOrganization('<org_id>')
* .then((org) => console.log(org))
* .catch(console.error)
* ```
*/
getOrganization: function getOrganization(id) {
return makeRequest({
entityType: 'Organization',
action: 'get',
params: {
organizationId: id
}
}).then(data => wrapOrganization(makeRequest, data));
},
/**
* Gets a collection of Organizations
* @return Promise for a collection of Organizations
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getOrganizations()
* .then(result => console.log(result.items))
* .catch(console.error)
* ```
*/
getOrganizations: function getOrganizations(query = {}) {
return makeRequest({
entityType: 'Organization',
action: 'getMany',
params: {
query: createRequestConfig({
query
}).params
}
}).then(data => wrapOrganizationCollection(makeRequest, data));
},
/**
* Gets the authenticated user
* @return Promise for a User
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getCurrentUser()
* .then(user => console.log(user.firstName))
* .catch(console.error)
* ```
*/
getCurrentUser: function getCurrentUser(params) {
return makeRequest({
entityType: 'User',
action: 'getCurrent',
params
}).then(data => wrapUser(makeRequest, data));
},
/**
* Gets App Definition
* @return Promise for App Definition
* @param organizationId - Id of the organization where the app is installed
* @param appDefinitionId - Id of the app that will be returned
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getAppDefinition(<'org_id'>, <'app_id'>)
* .then(appDefinition => console.log(appDefinition.name))
* .catch(console.error)
* ```
*/
getAppDefinition: function getAppDefinition(params) {
return makeRequest({
entityType: 'AppDefinition',
action: 'get',
params
}).then(data => wrapAppDefinition(makeRequest, data));
},
/**
* Creates a personal access token
* @param data - personal access token config
* @return Promise for a Token
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.createPersonalAccessToken(
* {
* "name": "My Token",
* "scope": [
* "content_management_manage"
* ]
* }
* )
* .then(personalAccessToken => console.log(personalAccessToken.token))
* .catch(console.error)
* ```
*/
createPersonalAccessToken: function createPersonalAccessToken(data) {
return makeRequest({
/**
* When the `PersonalAccessToken` entity is removed, replace the `entityType` with `AccessToken`
* and update the action to `createPersonalToken` to ultilize the new entity called AccessToken.
*/
entityType: 'PersonalAccessToken',
action: 'create',
params: {},
payload: data
}).then(response => wrapPersonalAccessToken(makeRequest, response));
},
/**
* @deprecated - use getAccessToken instead
*
* Gets a personal access token
* @param data - personal access token config
* @return Promise for a Token
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getPersonalAccessToken(tokenId)
* .then(token => console.log(token.token))
* .catch(console.error)
* ```
*/
getPersonalAccessToken: function getPersonalAccessToken(tokenId) {
return makeRequest({
entityType: 'PersonalAccessToken',
action: 'get',
params: {
tokenId
}
}).then(data => wrapPersonalAccessToken(makeRequest, data));
},
/**
* @deprecated - use getAccessTokens instead
*
* Gets all personal access tokens
* @return Promise for a Token
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getPersonalAccessTokens()
* .then(response => console.log(reponse.items))
* .catch(console.error)
* ```
*/
getPersonalAccessTokens: function getPersonalAccessTokens() {
return makeRequest({
entityType: 'PersonalAccessToken',
action: 'getMany',
params: {}
}).then(data => wrapPersonalAccessTokenCollection(makeRequest, data));
},
/**
* Gets a users access token
* @param data - users access token config
* @return Promise for a Token
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getAccessToken(tokenId)
* .then(token => console.log(token.token))
* .catch(console.error)
* ```
*/
getAccessToken: function getAccessToken(tokenId) {
return makeRequest({
entityType: 'AccessToken',
action: 'get',
params: {
tokenId
}
}).then(data => wrapAccessToken(makeRequest, data));
},
/**
* Gets all user access tokens
* @return Promise for a Token
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getAccessTokens()
* .then(response => console.log(reponse.items))
* .catch(console.error)
* ```
*/
getAccessTokens: function getAccessTokens() {
return makeRequest({
entityType: 'AccessToken',
action: 'getMany',
params: {}
}).then(data => wrapAccessTokenCollection(makeRequest, data));
},
/**
* Retrieves a list of redacted versions of access tokens for an organization, accessible to owners or administrators of an organization.
*
* @return Promise for a Token
* @example ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getOrganizationAccessTokens(organizationId)
* .then(response => console.log(reponse.items))
* .catch(console.error)
* ```
*/
getOrganizationAccessTokens: function getOrganizationAccessTokens(organizationId, query = {}) {
return makeRequest({
entityType: 'AccessToken',
action: 'getManyForOrganization',
params: {
organizationId,
query
}
}).then(data => wrapAccessTokenCollection(makeRequest, data));
},
/**
* Get organization usage grouped by {@link UsageMetricEnum metric}
*
* @param organizationId - Id of an organization
* @param query - Query parameters
* @return Promise of a collection of usages
* @example ```javascript
*
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getOrganizationUsage('<organizationId>', {
* 'metric[in]': 'cma,gql',
* 'dateRange.startAt': '2019-10-22',
* 'dateRange.endAt': '2019-11-10'
* }
* })
* .then(result => console.log(result.items))
* .catch(console.error)
* ```
*/
getOrganizationUsage: function getOrganizationUsage(organizationId, query = {}) {
return makeRequest({
entityType: 'Usage',
action: 'getManyForOrganization',
params: {
organizationId,
query
}
}).then(data => wrapUsageCollection(makeRequest, data));
},
/**
* Get organization usage grouped by space and metric
*
* @param organizationId - Id of an organization
* @param query - Query parameters
* @return Promise of a collection of usages
* ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.getSpaceUsage('<organizationId>', {
* skip: 0,
* limit: 10,
* 'metric[in]': 'cda,cpa,gql',
* 'dateRange.startAt': '2019-10-22',
* 'dateRange.endAt': '2020-11-30'
* }
* })
* .then(result => console.log(result.items))
* .catch(console.error)
* ```
*/
getSpaceUsage: function getSpaceUsage(organizationId, query = {}) {
return makeRequest({
entityType: 'Usage',
action: 'getManyForSpace',
params: {
organizationId,
query
}
}).then(data => wrapUsageCollection(makeRequest, data));
},
/**
* Make a custom request to the Contentful management API's /spaces endpoint
* @param opts - axios request options (https://github.com/mzabriskie/axios)
* @return Promise for the response data
* ```javascript
* const contentful = require('contentful-management')
*
* const client = contentful.createClient({
* accessToken: '<content_management_api_key>'
* })
*
* client.rawRequest({
* method: 'GET',
* url: '/custom/path'
* })
* .then((responseData) => console.log(responseData))
* .catch(console.error)
* ```
*/
rawRequest: function rawRequest(_ref) {
let {
url
} = _ref,
config = _objectWithoutProperties(_ref, _excluded);
return makeRequest({
entityType: 'Http',
action: 'request',
params: {
url,
config
}
});
}
};
}