UNPKG

contentful-management

Version:
263 lines (261 loc) 8.86 kB
import entities from './entities'; import { wrapAppDefinition } from './entities/app-definition'; /** * @private */ /** * @private */ export default function createAppDefinitionApi(makeRequest) { const { wrapAppBundle, wrapAppBundleCollection } = entities.appBundle; const { wrapResourceProvider } = entities.resourceProvider; const getParams = data => ({ appDefinitionId: data.sys.id, organizationId: data.sys.organization.sys.id }); return { /** * Sends an update to the server with any changes made to the object's properties * @return Object returned from the server with updated changes. * @example ```javascript * const contentful = require('contentful-management') * * const client = contentful.createClient({ * accessToken: '<content_management_api_key>' * }) * * client.getOrganization('<org_id>') * .then((org) => org.getAppDefinition('<app_def_id>')) * .then((appDefinition) => { * appDefinition.name = 'New App Definition name' * return appDefinition.update() * }) * .then((appDefinition) => console.log(`App Definition ${appDefinition.sys.id} updated.`)) * .catch(console.error) * ``` */ update: function update() { const data = this.toPlainObject(); return makeRequest({ entityType: 'AppDefinition', action: 'update', params: getParams(data), headers: {}, payload: data }).then(data => wrapAppDefinition(makeRequest, data)); }, /** * Deletes this object on the server. * @return Promise for the deletion. It contains no data, but the Promise error case should be handled. * @example ```javascript * const contentful = require('contentful-management') * * const client = contentful.createClient({ * accessToken: '<content_management_api_key>' * }) * * client.getOrganization('<org_id>') * .then((org) => org.getAppDefinition('<app_def_id>')) * .then((appDefinition) => appDefinition.delete()) * .then(() => console.log(`App Definition deleted.`)) * .catch(console.error) * ``` */ delete: function del() { const data = this.toPlainObject(); return makeRequest({ entityType: 'AppDefinition', action: 'delete', params: getParams(data) }); }, /** * Gets an app bundle * @param id - AppBundle ID * @return Promise for an AppBundle * @example ```javascript * const contentful = require('contentful-management') * const client = contentful.createClient({ * accessToken: '<content_management_api_key>' * }) * * client.getOrganization('<org_id>') * .then((org) => org.getAppDefinition('<app_def_id>')) * .then((appDefinition) => appDefinition.getAppBundle('<app_upload_id>')) * .then((appBundle) => console.log(appBundle)) * .catch(console.error) * ``` */ getAppBundle(id) { const raw = this.toPlainObject(); return makeRequest({ entityType: 'AppBundle', action: 'get', params: { appBundleId: id, appDefinitionId: raw.sys.id, organizationId: raw.sys.organization.sys.id } }).then(data => wrapAppBundle(makeRequest, data)); }, /** * Gets a collection of AppBundles * @return Promise for a collection of AppBundles * @example ```javascript * const contentful = require('contentful-management') * const client = contentful.createClient({ * accessToken: '<content_management_api_key>' * }) * * client.getOrganization('<org_id>') * .then((org) => org.getAppDefinition('<app_def_id>')) * .then((appDefinition) => appDefinition.getAppBundles()) * .then((response) => console.log(response.items)) * .catch(console.error) * ``` */ getAppBundles(query = {}) { const raw = this.toPlainObject(); return makeRequest({ entityType: 'AppBundle', action: 'getMany', params: { organizationId: raw.sys.organization.sys.id, appDefinitionId: raw.sys.id, query } }).then(data => wrapAppBundleCollection(makeRequest, data)); }, /** * Creates an app bundle * @param Object representation of the App Bundle to be created * @return Promise for the newly created AppBundle * @example ```javascript * const contentful = require('contentful-management') * const client = contentful.createClient({ * accessToken: '<content_management_api_key>' * }) * client.getOrganization('<org_id>') * .then((org) => org.getAppDefinition('<app_def_id>')) * .then((appDefinition) => appDefinition.createAppBundle('<app_upload_id>')) * .then((appBundle) => console.log(appBundle)) * .catch(console.error) * ``` */ createAppBundle(data) { const raw = this.toPlainObject(); return makeRequest({ entityType: 'AppBundle', action: 'create', params: { appDefinitionId: raw.sys.id, organizationId: raw.sys.organization.sys.id }, payload: data }).then(data => wrapAppBundle(makeRequest, data)); }, /** * Gets a list of App Installations across an org for given organization and App Definition * If a spaceId is provided in the query object, it will return the App Installations for that specific space. * @return Promise for the newly created AppBundle * @example ```javascript * const contentful = require('contentful-management') * const client = contentful.createClient({ * accessToken: '<content_management_api_key>' * }) * client.getAppDefinition('<organization_id>', '<app_definition_id>') * .then((appDefinition) => appDefinition.getInstallationsForOrg( * { spaceId: '<space_id>' } // optional * )) * .then((appInstallationsForOrg) => console.log(appInstallationsForOrg.items)) * .catch(console.error) * ``` */ getInstallationsForOrg(query = {}) { const raw = this.toPlainObject(); return makeRequest({ entityType: 'AppDefinition', action: 'getInstallationsForOrg', params: { appDefinitionId: raw.sys.id, organizationId: raw.sys.organization.sys.id, query } }); }, /** * Creates or updates a resource provider * @param data representation of the ResourceProvider * @return Promise for the newly created or updated ResourceProvider * @example ```javascript * const contentful = require('contentful-management') * const client = contentful.createClient({ * accessToken: '<content_management_api_key>' * }) * * // You need a valid AppDefinition with an activated AppBundle that has a contentful function configured * client.getOrganization('<org_id>') * .then((org) => org.getAppDefinition('<app_def_id>')) * .then((appDefinition) => appDefinition.upsertResourceProvider({ * sys: { * id: '<resource_provider_id>' * }, * type: 'function', * function: { * sys: { * id: '<contentful_function_id>', * type: 'Link' * linkType: 'Function' * } * } * })) * .then((resourceProvider) => console.log(resourceProvider)) * .catch(console.error) * ``` */ upsertResourceProvider(data) { const raw = this.toPlainObject(); return makeRequest({ entityType: 'ResourceProvider', action: 'upsert', params: { appDefinitionId: raw.sys.id, organizationId: raw.sys.organization.sys.id }, payload: data }).then(payload => wrapResourceProvider(makeRequest, payload)); }, /** * Gets a Resource Provider * @return Promise for a Resource Provider * @example ```javascript * const contentful = require('contentful-management') * const client = contentful.createClient({ * accessToken: '<content_management_api_key>' * }) * * client.getOrganization('<org_id>') * .then((org) => org.getAppDefinition('<app_def_id>')) * .then((appDefinition) => appDefinition.getResourceProvider()) * .then((resourceProvider) => console.log(resourceProvider)) * .catch(console.error) * ``` */ getResourceProvider() { const raw = this.toPlainObject(); return makeRequest({ entityType: 'ResourceProvider', action: 'get', params: { appDefinitionId: raw.sys.id, organizationId: raw.sys.organization.sys.id } }).then(payload => wrapResourceProvider(makeRequest, payload)); } }; }