UNPKG

storyblok-ts-client

Version:

Typescript library for working with Storyblok management API.

1,180 lines 55.1 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (_) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); var FormData = require("form-data"); var imageProcessing_1 = require("../utilities/imageProcessing"); var Storyblok_1 = require("./Storyblok"); exports.retrySettings = { burst: { retries: 20, retryDelay: 1750, }, extended: { retries: 40, retryDelay: 1250, }, }; var storyblok; /** * Management API wrapper around Storyblok class. * * @export * @class ApiClient * @implements {IStoryblokClass} * @param {string} apiToken - API access token. * @param {number} spaceId - Storyblok working space id. * @example * const {ApiClient} = require('storyblok-ts-client') * const apiClient = new ApiClient('fake_api_token', 12345) */ var ApiClient = /** @class */ (function () { function ApiClient(apiToken, spaceId) { this.spaceId = spaceId; if (!storyblok) { storyblok = new Storyblok_1.Storyblok(apiToken); } this.storyblok = storyblok; } Object.defineProperty(ApiClient.prototype, "assetFolders", { /** * Object that contains API methods for asset folder operations * * @readonly * @name ApiClient#assetFolders * @memberof ApiClient */ get: function () { var _this = this; return { /** * Create an asset folder. * * @name ApiClient#assetFolders#create * @param {string} name - Name of asset folder to create. * @returns {Promise} * @fulfil {IAssetFolder} Details of the asset folder created. * @reject {AxiosError} Axios error. * @memberof ApiClient#assetFolders */ create: function (name) { return _this.createAssetFolder(name); }, /** * Delete a specific asset folder. * * @name ApiClient#assetFolders#delete * @param {number} id - Id of asset folder to be deleted. * @returns {Promise} * @fulfil {void} * @reject {AxiosError} Axios error. * @memberof ApiClient#assetFolders */ delete: function (id) { return _this.deleteAssetFolder(id); }, /** * Delete all existing asset folders. * * @name ApiClient#assetFolders#deleteExisting * @returns {Promise} * @fulfil {void[]} * @reject {AxiosError} Axios error. * @memberof ApiClient#assetFolders */ deleteExisting: function () { return _this.deleteExistingAssetFolders(); }, /** * Get a specific asset folder. * * @name ApiClient#assetFolders#get * @param {number} id - Id of the target asset folder. * @returns {Promise} * @fulfil {IAssetFolder} Asset folder information. * @reject {AxiosError} Axios error. * @memberof ApiClient#assetFolders */ get: function (id) { return _this.getAssetFolder(id); }, /** * Get asset folders by matching asset folders names to the supplied string. * * @name ApiClient#assetFolders#getByName * @param {string} searchString - String to search by. * @returns {Promise} * @fulfil {IAssetFolder[]} List of matched asset folders. * @reject {AxiosError} Axios error. * @memberof ApiClient#assetFolders */ getByName: function (searchString) { return _this.getAssetFolderByName(searchString); }, /** * Get existing asset folders. * * @name ApiClient#assetFolders#getExisting * @returns {Promise} * @fulfil {IAssetFolder[]} List of existing asset folders. * @reject {AxiosError} Axios error. * @memberof ApiClient#assetFolders */ getExisting: function () { return _this.getExistingAssetFolders(); }, }; }, enumerable: true, configurable: true }); Object.defineProperty(ApiClient.prototype, "assets", { /** * Object that contains API methods for asset operations * * @readonly * @name ApiClient#assets * @memberof ApiClient */ get: function () { var _this = this; return { /** * Get total number of existing assets. * * @name ApiClient#assets#count * @returns {Promise} * @fulfil {number} A count of existing assets. * @reject {AxiosError} Axios error. * @memberof ApiClient#assets */ count: function () { return _this.countAssets(); }, /** * Create an asset and upload the physical file. * * @name ApiClient#assets#createFromImage * @param {IPendingAsset} data - Asset information. * @param {string} filePath - Absolute file path to the image. * @param {boolean} compress - Flag to compress image. * @param {number} sizeLimit - Resizing dimension limit value. * @returns {Promise} * @fulfil {string} public access url of the new asset. * @reject {AxiosError} Axios error. * @memberof ApiClient#assets */ createFromImage: function (data, filePath, compress, sizeLimit) { return _this.createAssetFromImage(data, filePath, compress, sizeLimit); }, /** * Delete a specific asset. * * @name ApiClient#assets#delete * @param {number} id - Id of the asset to be deleted. * @returns {Promise} * @fulfil {IAsset} Information of the deleted asset. * @reject {AxiosError} Axios error. * @memberof ApiClient#assets */ delete: function (id) { return _this.deleteAsset(id); }, /** * Delete all existing assets. * * @name ApiClient#assets#deleteExisting * @returns {Promise} * @fulfil {IAsset[]} Information on the deleted assets. * @reject {AxiosError} Axios error. * @memberof ApiClient#assets */ deleteExisting: function () { return _this.deleteExistingAssets(); }, /** * Get a specific asset. * * @name ApiClient#assets#get * @param {number} id - Id of asset to fetch. * @returns {Promise} * @fulfil {IAsset} Details of the asset. * @reject {AxiosError} Axios error. * @memberof ApiClient#assets */ get: function (id) { return _this.getAsset(id); }, /** * Get asset on a specific pagination page number. * * @name ApiClient#assets#getByPage * @param {number} [page=1] - Pagination page. * @param {number} [perPage=25] - Assets per page. * @returns {Promise<IAsset[]>} * @fulfil {IAsset[]} Assets on the pagination page. * @reject {AxiosError} Axios error. * @memberof ApiClient#assets */ getByPage: function (page, perPage) { return _this.getAssetsByPage(page, perPage); }, /** * Find a specific asset by its public url. * * @name ApiClient#assets#getByUrl * @param {string} url - Url to match by. * @returns {Promise} * @fulfil {IAsset} Matched asset. * @reject {AxiosError} Axios error. * @memberof ApiClient */ getByUrl: function (url) { return _this.getAssetByUrl(url); }, /** * List all existing assets. * * @name ApiClient#assets#getExisting * @returns {Promise} * @fulfil {IAsset[]} A list of existing assets. * @reject {AxiosError} Axios error. * @memberof ApiClient#assets */ getExisting: function () { return _this.getExistingAssets(); }, /** * Register a Storyblok asset. * * @name ApiClient#assets#register * @param {IPendingAsset} asset - Information to create asset from. * @param {string} asset.filename - File name to register for. * @param {number} [asset.asset_folder_id] - (optional) Assign a asset folder. * @param {number} [asset.id] - (optional) Id of existing asset to replace with this new asset. * @returns {Promise} * @fulfil {IRegistration} Asset registration info (used for uploading). * @reject {AxiosError} Axios error. * @memberof ApiClient#assets */ register: function (data) { return _this.registerAsset(data); }, /** * Upload a registered asset with failure-retry (20 retries and incremental delay period of 1250ms with +/- 500ms variance). * * @name ApiClient#assets#upload * @param {Buffer} buffer - Buffered asset data. * @param {IRegistration} registration - Registration info. * @returns {Promise} * @fulfil {string} Access url of the uploaded asset. * @reject {AxiosError} Axios error. * @memberof ApiClient#assets */ upload: function (buffer, registration) { return _this.uploadAsset(buffer, registration); }, }; }, enumerable: true, configurable: true }); Object.defineProperty(ApiClient.prototype, "components", { /** * Object that contains API methods for component operations * * @name ApiClient#components * @readonly * @memberof ApiClient */ get: function () { var _this = this; return { /** * Create a component. * * @name ApiClient#components#create * @param {IPendingComponent} data - Info on component to be created. * @returns {Promise} * @fulfil {IComponent} Details of the component that was created. * @reject {AxiosError} Axios error. * @memberof ApiClient#components */ create: function (data) { return _this.createComponent(data); }, /** * Delete a specific component. * * @name ApiClient#components#delete * @param {number} id - Id of component to be deleted. * @returns {Promise} * @fulfil {IComponent} Details of the deleted component. * @reject {AxiosError} Axios error. * @memberof ApiClient#components */ delete: function (id) { return _this.deleteComponent(id); }, /** * Delete existing components. * * @name ApiClient#components#deleteExisting * @returns {Promise} * @fulfil {IComponent[]} A list of deleted components details. * @reject {AxiosError} Axios error. * @memberof ApiClient#components */ deleteExisting: function () { return _this.deleteExistingComponents(); }, /** * Fetch for a specific component. * * @name ApiClient#components#get * @param {number} id - Component id to fetch by. * @returns {Promise} * @fulfil {IComponent} Details of the component definition. * @reject {AxiosError} Axios error. * @memberof ApiClient#components */ get: function (id) { return _this.getComponent(id); }, /** * List existing components. * * @name ApiClient#components#getExisting * @returns {Promise} * @fulfil {IComponent[]} A list of component definitions. * @reject {AxiosError} Axios error. * @memberof ApiClient#components */ getExisting: function () { return _this.getExistingComponents(); }, /** * Update a component. * * @name ApiClient#components#update * @param {IComponent} data - Storyblok component data object with modified info. * @returns {Promise} * @fulfil {IComponent} Details of component that was updated. * @reject {AxiosError} Axios error. * @memberof ApiClient */ update: function (data) { return _this.updateComponent(data); }, }; }, enumerable: true, configurable: true }); Object.defineProperty(ApiClient.prototype, "spaces", { /** * Object that contains API methods for space operations * * @name ApiClient#spaces * @readonly * @memberof ApiClient */ get: function () { var _this = this; return { /** * Get information on the working Storyblok space. * * @name ApiClient#spaces#get * @returns {Promise} * @fulfil {ISpace} Working space information. * @reject {AxiosError} Axios error. * @memberof ApiClient#spaces */ get: function () { return _this.getSpace(); }, }; }, enumerable: true, configurable: true }); Object.defineProperty(ApiClient.prototype, "stories", { /** * Object that contains API methods for story operations * * @name ApiClient#stories * @readonly * @memberof ApiClient */ get: function () { var _this = this; return { /** * Get total number of existing stories (including folders). * * @name ApiClient#stories#count * @returns {Promise} * @fulfil {number} A count of existing stories. * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ count: function () { return _this.countStories(); }, /** * Get total pagination page count. * * @name ApiClient#stories#countPages * @param {number} [perPage] - (optional) How many stories per page. Defaults to 25. * @returns {Promise} * @fulfil {number} Total story pagination page count. * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ countPages: function (perPage) { if (perPage === void 0) { perPage = 25; } return _this.countStoryPages(perPage); }, /** * Create a story. * * @name ApiClient#stories#create * @param {IPendingStory} data - Storyblok story data object. * @returns {Promise} * @fulfil {IStory} Details of story that was created. * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ create: function (data) { return _this.createStory(data); }, /** * Delete a specific story. * * @name ApiClient#stories#delete * @param {IStory} id - Id of the story to be deleted. * @returns {Promise} * @fulfil {IStory} Details of the story that was deleted. * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ delete: function (id) { return _this.deleteStory(id); }, /** * Delete all existing stories. * * @name ApiClient#stories#deleteExisting * @returns {Promise} * @fulfil {IStory[]} A list of deleted stories details. * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ deleteExisting: function () { return _this.deleteExistingStories(); }, /** * Get a specific story. * * @name ApiClient#stories#get * @param {number} id - Id of the content story. * @returns {Promise} * @fulfil {IStory} Details of content story. * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ get: function (id) { return _this.getStory(id); }, /** * Get stories on a pagination page. * * @name ApiClient#stories#getByPage * @param {number} page - Pagination page number. * @param {number} [perPage] - (optional) How many stories per page. Defaults to 25. * @returns {Promise} * @fulfil {IStory[]} A page of stories. * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ getByPage: function (page, perPage) { return _this.getStoriesByPage(page, perPage); }, /** * List all existing stories. * * @name ApiClient#stories#getExisting * @returns {Promise} * @fulfil {IStory[]} A list of existing content stories. * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ getExisting: function () { return _this.getExistingStories(); }, /** * Publish a specific story. * * @name ApiClient#stories#publish * @param {number} id - Id of the story to publish * @returns {Promise} * @fulfil {IStory} Details of the published story * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ publish: function (id) { return _this.publishStory(id); }, /** * Publish all unpublished stories. * * @name ApiClient#stories#publishPendings * @returns {Promise} * @fulfil {IStory[]} List of published stories. * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ publishPendings: function () { return _this.publishPendingStories(); }, /** * Update a story's sequential order. * * @name ApiClient#stories#reorder * @param {number} id - Id of the story to be moved. * @param {number} afterId - Id of reference story to position after. * @returns {Promise} * @fulfil {IStory} Details of the moved story. * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ reorder: function (id, afterId) { return _this.reorderStory(id, afterId); }, /** * Update a story. * * @name ApiClient#stories#update * @param {IStory} data - Modified story info. * @returns {Promise} * @fulfil {IStory} Details of story that was updated. * @reject {AxiosError} Axios error. * @memberof ApiClient#stories */ update: function (data) { return _this.updateStory(data); }, }; }, enumerable: true, configurable: true }); /** * Get total number of existing assets. * * @name ApiClient#countAssets * @returns {Promise} * @fulfil {number} A count of existing assets. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.countAssets = function () { return this.getSpace() .then(function (s) { return s.assets_count; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Get total number of existing stories (including folders). * * @name ApiClient#countStories * @returns {Promise} * @fulfil {number} A count of existing stories. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.countStories = function () { return this.getExistingStories() .then(function (ss) { return ss.length; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Get total pagination page count. * * @name ApiClient#countStoryPages * @param {number} [perPage] - (optional) How many stories per page. Defaults to 25. * @returns {Promise} * @fulfil {number} Total story pagination page count. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.countStoryPages = function (perPage) { if (perPage === void 0) { perPage = 25; } var url = "/" + this.spaceId + "/stories"; var responseHandler = function (r) { var total = r.headers.total; return Math.ceil(total / perPage); }; return this.storyblok .get(url, exports.retrySettings.burst) .then(responseHandler) .catch(function (r) { return Promise.reject(r); }); }; /** * Create an asset folder. * * @name ApiClient#createAssetFolder * @param {string} name - Name of asset folder to create. * @returns {Promise} * @fulfil {IAssetFolder} Details of the asset folder created. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.createAssetFolder = function (name) { var url = "/" + this.spaceId + "/asset_folders"; var data = { name: name }; return this.storyblok .post(url, { asset_folder: data }, exports.retrySettings.burst) .then(function (r) { return r.data.asset_folder; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Create an asset and upload the physical file. * * @name ApiClient#createAssetFromImage * @param {IPendingAsset} data - Asset information. * @param {string} filePath - Absolute file path to the image. * @param {boolean} compress - Flag to compress image. * @param {number} sizeLimit - Resizing dimension limit value. * @returns {Promise} * @fulfil {string} Public access url of the new asset. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.createAssetFromImage = function (data, filePath, compress, sizeLimit) { if (compress === void 0) { compress = true; } if (sizeLimit === void 0) { sizeLimit = 640; } return __awaiter(this, void 0, void 0, function () { var _a, registration, buffer, e_1; return __generator(this, function (_b) { switch (_b.label) { case 0: _b.trys.push([0, 3, , 4]); return [4 /*yield*/, Promise.all([ this.registerAsset(data), imageProcessing_1.imageToBuffer(filePath, compress, sizeLimit), ])]; case 1: _a = _b.sent(), registration = _a[0], buffer = _a[1]; return [4 /*yield*/, this.uploadAsset(buffer, registration)]; case 2: return [2 /*return*/, _b.sent()]; case 3: e_1 = _b.sent(); throw e_1; case 4: return [2 /*return*/]; } }); }); }; /** * Create a component. * * @name ApiClient#components#create * @param {IPendingComponent} data - Info on component to be created. * @returns {Promise} * @fulfil {IComponent} Details of the component that was created. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.createComponent = function (data) { var url = "/" + this.spaceId + "/components"; return this.storyblok .post(url, { component: data }, exports.retrySettings.burst) .then(function (r) { return r.data.component; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Create a story. * * @name ApiClient#createStory * @param {IPendingStory} data - Storyblok story data object. * @returns {Promise} * @fulfil {IStory} Details of story that was created. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.createStory = function (data) { var url = "/" + this.spaceId + "/stories"; return this.storyblok .post(url, { story: data }, exports.retrySettings.burst) .then(function (r) { return r.data.story; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Delete a specific asset. * * @name ApiClient#deleteAsset * @param {number} id - Id of the asset to be deleted. * @returns {Promise} * @fulfil {IAsset} Information of the deleted asset. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.deleteAsset = function (id) { var url = "/" + this.spaceId + "/assets/" + id; return this.storyblok .delete(url, exports.retrySettings.burst) .then(function (r) { return r.data; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Delete a specific asset folder. * * @name ApiClient#deleteAssetFolder * @param {number} id - Id of asset folder to be deleted. * @returns {Promise} * @fulfil {void} * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.deleteAssetFolder = function (id) { var url = "/" + this.spaceId + "/asset_folders/" + id; return this.storyblok .delete(url, exports.retrySettings.burst) .then(function () { return Promise.resolve(); }) .catch(function (e) { return Promise.reject(e); }); }; /** * Delete a specific component. * * @name ApiClient#deleteComponent * @param {number} id - Id of component to be deleted. * @returns {Promise} * @fulfil {IComponent} Details of the deleted component. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.deleteComponent = function (id) { var url = "/" + this.spaceId + "/components/" + id; return this.storyblok .delete(url, exports.retrySettings.burst) .then(function (r) { return r.data.component; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Delete a specific story. * * @name ApiClient#deleteStory * @param {IStory} id - Id of the story to be deleted. * @returns {Promise} * @fulfil {IStory} Details of the story that was deleted. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.deleteStory = function (id) { var url = "/" + this.spaceId + "/stories/" + id; return this.storyblok .delete(url, exports.retrySettings.burst) .then(function (r) { return r.data.story; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Delete all existing asset folders. * * @name ApiClient#deleteExistingAssetFolders * @returns {Promise} * @fulfil {void[]} * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.deleteExistingAssetFolders = function () { var _this = this; var mapFn = function (af) { return _this.deleteAssetFolder(af.id); }; return this.getExistingAssetFolders() .then(function (afs) { return Promise.all(afs.map(mapFn)); }) .catch(function (e) { return Promise.reject(e); }); }; /** * Delete all existing assets. * * @name ApiClient#deleteExistingAssets * @returns {Promise} * @fulfil {IAsset[]} Information on the deleted assets. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.deleteExistingAssets = function () { var _this = this; var mapFn = function (a) { return _this.deleteAsset(a.id); }; return this.getExistingAssets() .then(function (as) { return Promise.all(as.map(mapFn)); }) .catch(function (e) { return Promise.reject(e); }); }; /** * Delete existing components. * * @name ApiClient#deleteExistingComponents * @returns {Promise} * @fulfil {IComponent[]} A list of deleted components details. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.deleteExistingComponents = function () { var _this = this; var mapFn = function (c) { return _this.deleteComponent(c.id); }; return this.getExistingComponents() .then(function (cs) { return Promise.all(cs.map(mapFn)); }) .catch(function (e) { return Promise.reject(e); }); }; /** * Delete all existing stories. * * @name ApiClient#deleteExistingStories * @returns {Promise} * @fulfil {IStory[]} A list of deleted stories details. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.deleteExistingStories = function () { return __awaiter(this, void 0, void 0, function () { var existing, filterFn, root, mapFn, deleted, remainder, _a, _b, e_2; var _this = this; return __generator(this, function (_c) { switch (_c.label) { case 0: _c.trys.push([0, 5, , 6]); return [4 /*yield*/, this.getExistingStories()]; case 1: existing = _c.sent(); filterFn = function (s) { return s.parent_id === 0; }; root = existing.filter(filterFn); mapFn = function (s) { return _this.deleteStory(s.id); }; return [4 /*yield*/, Promise.all(root.map(mapFn))]; case 2: deleted = _c.sent(); return [4 /*yield*/, this.getExistingStories()]; case 3: remainder = _c.sent(); _b = (_a = deleted).concat; return [4 /*yield*/, Promise.all(remainder.map(mapFn))]; case 4: return [2 /*return*/, _b.apply(_a, [_c.sent()])]; case 5: e_2 = _c.sent(); throw e_2; case 6: return [2 /*return*/]; } }); }); }; /** * Get a specific asset. * * @name ApiClient#getAsset * @param {number} id - Id of asset to fetch. * @returns {Promise} * @fulfil {IAsset} Details of the asset. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getAsset = function (id) { var url = "/" + this.spaceId + "/assets/" + id; return this.storyblok .get(url, exports.retrySettings.burst) .then(function (r) { return r.data; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Find a specific asset by its public url. * * @name ApiClient#getAssetByUrl * @param {string} url - Url to match by. * @returns {Promise} * @fulfil {IAsset} Matched asset. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getAssetByUrl = function (url) { var responseHandler = function (as) { var findFn = function (a) { return a.filename === url; }; var asset = as.find(findFn); if (!asset) { throw new Error('unable to find an asset by this url'); } else { return asset; } }; return this.getExistingAssets() .then(responseHandler) .catch(function (e) { return Promise.reject(e); }); }; /** * Get a specific asset folder. * * @name ApiClient#getAssetFolder * @param {number} id - Id of the target asset folder. * @returns {Promise} * @fulfil {IAssetFolder} Asset folder information. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getAssetFolder = function (id) { var url = "/" + this.spaceId + "/asset_folders/" + id; return this.storyblok .get(url, exports.retrySettings.burst) .then(function (r) { return r.data.asset_folder; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Get asset folders by matching asset folders names to the supplied string. * * @name ApiClient#getAssetFolderByName * @param {string} searchString - String to search by. * @returns {Promise} * @fulfil {IAssetFolder[]} List of matched asset folders. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getAssetFolderByName = function (searchString) { var url = "/" + this.spaceId + "/asset_folders"; var query = "?search=" + searchString; return this.storyblok .get(url + query, exports.retrySettings.burst) .then(function (r) { return r.data.asset_folders; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Get asset on a specific pagination page number. * * @param {number} [page=1] - Pagination page. * @param {number} [perPage=25] - Assets per page. * @returns {Promise<IAsset[]>} * @fulfil {IAsset[]} Assets on the pagination page. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getAssetsByPage = function (page, perPage) { if (page === void 0) { page = 1; } if (perPage === void 0) { perPage = 25; } var url = "/" + this.spaceId + "/assets"; var query = "?per_page=" + perPage + "&page=" + page; return this.storyblok .get(url + query, exports.retrySettings.burst) .then(function (r) { return r.data.assets; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Fetch for a specific component. * * @name ApiClient#getComponent * @param {number} id - Component id to fetch by. * @returns {Promise} * @fulfil {IComponent} Details of the component definition. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getComponent = function (id) { var url = "/" + this.spaceId + "/components/" + id; return this.storyblok .get(url, exports.retrySettings.burst) .then(function (r) { return r.data.component; }) .catch(function (e) { return Promise.reject(e); }); }; /** * List all existing assets. * * @name ApiClient#getExistingAssets * @returns {Promise} * @fulfil {IAsset[]} A list of existing assets. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getExistingAssets = function () { return __awaiter(this, void 0, void 0, function () { var perPage_1, total, pageCount, pageIndices, mapFn, arrayOfAssets, e_3; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 3, , 4]); perPage_1 = 1000; return [4 /*yield*/, this.countAssets()]; case 1: total = _a.sent(); pageCount = Math.ceil(total / perPage_1); if (pageCount === 0) { return [2 /*return*/, []]; } pageIndices = Array.from(Array(pageCount).keys()); mapFn = function (pi) { return _this.getAssetsByPage(pi + 1, perPage_1); }; return [4 /*yield*/, Promise.all(pageIndices.map(mapFn))]; case 2: arrayOfAssets = _a.sent(); return [2 /*return*/, [].concat.apply([], arrayOfAssets)]; case 3: e_3 = _a.sent(); throw e_3; case 4: return [2 /*return*/]; } }); }); }; /** * List existing components. * * @name ApiClient#getExistingComponents * @returns {Promise} * @fulfil {IComponent[]} A list of component definitions. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getExistingComponents = function () { var url = "/" + this.spaceId + "/components"; return this.storyblok .get(url, exports.retrySettings.burst) .then(function (r) { return r.data.components; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Get existing asset folders. * * @name ApiClient#getExistingAssetFolders * @returns {Promise} * @fulfil {IAssetFolder[]} List of existing asset folders. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getExistingAssetFolders = function () { var url = "/" + this.spaceId + "/asset_folders?search"; return this.storyblok .get(url, exports.retrySettings.burst) .then(function (r) { return r.data.asset_folders; }) .catch(function (e) { return Promise.reject(e); }); }; /** * List all existing stories. * * @name ApiClient#getExistingStories * @returns {Promise} * @fulfil {IStory[]} A list of existing content stories. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getExistingStories = function () { return __awaiter(this, void 0, void 0, function () { var perPage_2, pageCount, pageIndices, mapFn, arrayOfStories, e_4; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 3, , 4]); perPage_2 = 1000; return [4 /*yield*/, this.countStoryPages(perPage_2)]; case 1: pageCount = _a.sent(); if (pageCount === 0) { return [2 /*return*/, []]; } pageIndices = Array.from(Array(pageCount).keys()); mapFn = function (pi) { return _this.getStoriesByPage(pi + 1, perPage_2); }; return [4 /*yield*/, Promise.all(pageIndices.map(mapFn))]; case 2: arrayOfStories = _a.sent(); return [2 /*return*/, [].concat.apply([], arrayOfStories)]; case 3: e_4 = _a.sent(); throw e_4; case 4: return [2 /*return*/]; } }); }); }; /** * Get information on the working Storyblok space. * * @name ApiClient#getSpace * @returns {Promise} * @fulfil {ISpace} Working space information. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getSpace = function () { var url = "/" + this.spaceId; return this.storyblok .get(url, exports.retrySettings.burst) .then(function (r) { return r.data.space; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Get stories on a pagination page. * * @name ApiClient#getStoriesByPage * @param {number} page - Pagination page number. * @param {number} [perPage] - (optional) How many stories per page. Defaults to 25. * @returns {Promise} * @fulfil {IStory[]} A page of stories. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.getStoriesByPage = function (page, perPage) { if (page === void 0) { page = 1; } if (perPage === void 0) { perPage = 25; } var url = "/" + this.spaceId + "/stories"; var query = "?per_page=" + perPage + "&page=" + page; return this.storyblok .get(url + query, exports.retrySettings.burst) .then(function (r) { return r.data.stories; }) .catch(function (e) { return Promise.reject(e); }); }; ApiClient.prototype.getStory = function (id) { var url = "/" + this.spaceId + "/stories/" + id; return this.storyblok .get(url, exports.retrySettings.burst) .then(function (r) { return r.data.story; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Publish all unpublished stories. * * @name ApiClient#stories#publishPendings * @returns {Promise} * @fulfil {IStory[]} List of published stories. * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.publishPendingStories = function () { return __awaiter(this, void 0, void 0, function () { var existing, filterFn, pendings, mapFn, e_5; var _this = this; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 3, , 4]); return [4 /*yield*/, this.getExistingStories()]; case 1: existing = _a.sent(); filterFn = function (s) { return !s.is_folder && !s.published; }; pendings = existing.filter(filterFn); mapFn = function (s) { return _this.publishStory(s.id); }; return [4 /*yield*/, Promise.all(pendings.map(mapFn))]; case 2: return [2 /*return*/, _a.sent()]; case 3: e_5 = _a.sent(); throw e_5; case 4: return [2 /*return*/]; } }); }); }; /** * Publish a specific story. * * @name ApiClient#publishStory * @param {number} id - Id of the story to publish * @returns {Promise} * @fulfil {IStory} Details of the published story * @reject {AxiosError} Axios error. * @memberof ApiClient */ ApiClient.prototype.publishStory = function (id) { var url = "/" + this.spaceId + "/stories/" + id + "/publish"; return this.storyblok .get(url, exports.retrySettings.burst) .then(function (r) { return r.data.story; }) .catch(function (e) { return Promise.reject(e); }); }; /** * Register a Storyblok asset. * * @name ApiClient#registerAsset * @param {IPendingAsset} asset - Information to create asset from. * @param {string} asset.filename -