UNPKG

contensis-delivery-api

Version:

Client for retrieving content using the read-only Contensis Delivery API

173 lines (172 loc) 9.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EntryOperations = void 0; const tslib_1 = require("tslib"); const link_resolver_1 = require("./link-resolver"); const contensis_core_api_1 = require("contensis-core-api"); const defaultListUrl = `/api/delivery/projects/:projectId/entries`; let listUrl = (options, params) => { return !!options.contentTypeId ? `/api/delivery/projects/:projectId/contentTypes/:contentTypeId/entries` : defaultListUrl; }; let getMappers = { language: contensis_core_api_1.defaultMapperForLanguage, versionStatus: contensis_core_api_1.defaultMapperForPublishedVersionStatus, fields: (value) => (value && value.length > 0 ? value : null), linkDepth: (value) => (value && value > 0 ? value : null), fieldLinkDepths: (value) => Object.keys(value || {}).length > 0 ? JSON.stringify(value) : null, }; let listMappers = Object.assign(Object.assign({}, getMappers), { order: (value) => (value && value.length > 0) ? value : null, pageIndex: (value, options, params) => (options && options.pageOptions && options.pageOptions.pageIndex) || (params.pageIndex), pageSize: (value, options, params) => (options && options.pageOptions && options.pageOptions.pageSize) || (params.pageSize) }); let searchMappers = { aggregations: (value) => Object.keys(value || {}).length > 0 ? JSON.stringify(value) : null, linkDepth: (value) => (value && (value > 0)) ? value : null, fieldLinkDepths: (value) => Object.keys(value || {}).length > 0 ? JSON.stringify(value) : null, }; class EntryOperations { constructor(httpClient, contensisClient) { this.httpClient = httpClient; this.contensisClient = contensisClient; } get(idOrOptions) { let url = contensis_core_api_1.UrlBuilder.create('/api/delivery/projects/:projectId/entries/:id', { language: null, versionStatus: null, linkDepth: null, fieldLinkDepths: null, fields: null }) .addOptions(idOrOptions, 'id') .setParams(this.contensisClient.getParams()) .addMappers(getMappers) .toUrl(); return this.contensisClient.ensureIsAuthorized().then(() => { return this.httpClient.request(url, { headers: this.contensisClient.getHeaders() }); }); } list(contentTypeIdOrOptions) { let url = contensis_core_api_1.UrlBuilder.create(listUrl, { language: null, versionStatus: null, linkDepth: null, order: null, fieldLinkDepths: null, fields: null, pageIndex: null, pageSize: null }) .addOptions(contentTypeIdOrOptions, 'contentTypeId') .setParams(this.contensisClient.getParams()) .addMappers(listMappers) .toUrl(); return this.contensisClient.ensureIsAuthorized().then(() => { return this.httpClient.request(url, { headers: this.contensisClient.getHeaders() }); }); } search(query, linkDepth = 0) { if (!query) { return new Promise((resolve) => { resolve(null); }); } let deliveryQuery = query instanceof contensis_core_api_1.Query ? query : null; // use duck-typing for backwards compatibility pre v1.2.0 if (deliveryQuery !== null || !!query.where || !!query.orderBy) { return this.searchUsingQuery(deliveryQuery || query, linkDepth); } let zenqlQuery = query instanceof contensis_core_api_1.ZenqlQuery ? query : null; if (zenqlQuery === null) { if (typeof query === 'string') { zenqlQuery = new contensis_core_api_1.ZenqlQuery(query); } else { throw new Error('A valid query needs to be specified.'); } } let params = this.contensisClient.getParams(); let pageSize = params.pageSize || 25; let pageIndex = params.pageIndex || 0; let fields = []; let fieldLinkDepths = {}; pageSize = zenqlQuery.pageSize || pageSize; pageIndex = zenqlQuery.pageIndex || pageIndex; fields = zenqlQuery.fields || fields; fieldLinkDepths = zenqlQuery.fieldLinkDepths || fieldLinkDepths; // eslint-disable-next-line @typescript-eslint/no-unused-vars let { accessToken, projectId, language, responseHandler, rootUrl, versionStatus } = params, requestParams = tslib_1.__rest(params, ["accessToken", "projectId", "language", "responseHandler", "rootUrl", "versionStatus"]); let payload = Object.assign(Object.assign({}, requestParams), { aggregations: zenqlQuery.aggregations, fieldLinkDepths, linkDepth, pageSize, pageIndex, zenql: zenqlQuery.zenql }); if (fields && fields.length > 0) { payload['fields'] = fields; } let url = contensis_core_api_1.UrlBuilder.create(defaultListUrl, Object.assign({}, payload)) .setParams(Object.assign(Object.assign({}, payload), { projectId })) .addMappers(searchMappers) .toUrl(); return this.contensisClient.ensureIsAuthorized().then(() => { return this.httpClient.request(url, { method: 'GET', headers: this.contensisClient.getHeaders('application/json; charset=utf-8') }); }); } resolve(entryOrList, fields = null) { let params = this.contensisClient.getParams(); let resolver = new link_resolver_1.LinkResolver(entryOrList, fields, params.versionStatus, (query) => this.search(query)); return resolver.resolve(); } searchUsingQuery(query, linkDepth = 0) { if (!query) { return new Promise((resolve) => { resolve(null); }); } let deliveryQuery = query; let params = this.contensisClient.getParams(); let pageSize = params.pageSize || 25; let pageIndex = params.pageIndex || 0; let fields = []; let fieldLinkDepths = {}; pageSize = deliveryQuery.pageSize || pageSize; pageIndex = deliveryQuery.pageIndex || pageIndex; fields = deliveryQuery.fields || fields; fieldLinkDepths = deliveryQuery.fieldLinkDepths || fieldLinkDepths; let orderBy = (deliveryQuery.orderBy && (deliveryQuery.orderBy._items || deliveryQuery.orderBy)); // eslint-disable-next-line @typescript-eslint/no-unused-vars let { accessToken, projectId, language, responseHandler, rootUrl, versionStatus } = params, requestParams = tslib_1.__rest(params, ["accessToken", "projectId", "language", "responseHandler", "rootUrl", "versionStatus"]); let payload = Object.assign(Object.assign({}, requestParams), { aggregations: deliveryQuery.aggregations, fieldLinkDepths, linkDepth, pageSize, pageIndex, where: JSON.stringify(deliveryQuery.where) }); if (fields && fields.length > 0) { payload['fields'] = fields; } if (deliveryQuery.orderBy && (!Array.isArray(deliveryQuery.orderBy) || deliveryQuery.orderBy.length > 0)) { payload['orderBy'] = JSON.stringify(orderBy); } let url = contensis_core_api_1.UrlBuilder.create('/api/delivery/projects/:projectId/entries/search', Object.assign({}, payload)) .setParams(Object.assign(Object.assign({}, payload), { projectId })) .addMappers(searchMappers) .toUrl(); if (url.length > 8000 || ((0, contensis_core_api_1.isBrowser)() && (0, contensis_core_api_1.isIE)() && url.length > 2083)) { return this.searchUsingPost(query, linkDepth); } return this.contensisClient.ensureIsAuthorized().then(() => { return this.httpClient.request(url, { method: 'GET', headers: this.contensisClient.getHeaders('application/json; charset=utf-8') }); }); } searchUsingPost(query, linkDepth = 0) { if (!query) { return new Promise((resolve) => { resolve(null); }); } let params = this.contensisClient.getParams(); query.pageSize = query.pageSize || params.pageSize; query.pageIndex = query.pageIndex || 0; let url = contensis_core_api_1.UrlBuilder.create('/api/delivery/projects/:projectId/entries/search', { linkDepth, fieldLinkDepths: query.fieldLinkDepths }) .setParams(this.contensisClient.getParams()) .addMappers(searchMappers) .toUrl(); return this.contensisClient.ensureIsAuthorized().then(() => { // Clone the query instance so we can remove the fieldLinkDepths // from the POST body without mutating the supplied query arg const clone = Object.assign(Object.create(Object.getPrototypeOf(query)), query); delete clone.fieldLinkDepths; return this.httpClient.request(url, { method: 'POST', headers: this.contensisClient.getHeaders('application/json; charset=utf-8'), body: JSON.stringify(clone) }); }); } } exports.EntryOperations = EntryOperations;