Source: contentful.js

  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = createClient;
  6. var _defaults = require('lodash/defaults');
  7. var _defaults2 = _interopRequireDefault(_defaults);
  8. var _assign = require('lodash/assign');
  9. var _assign2 = _interopRequireDefault(_assign);
  10. var _cloneDeep = require('lodash/cloneDeep');
  11. var _cloneDeep2 = _interopRequireDefault(_cloneDeep);
  12. var _version = require('../version');
  13. var _version2 = _interopRequireDefault(_version);
  14. var _createHttpClient = require('contentful-sdk-core/create-http-client');
  15. var _createHttpClient2 = _interopRequireDefault(_createHttpClient);
  16. var _wrapHttpClient = require('contentful-sdk-core/wrap-http-client');
  17. var _wrapHttpClient2 = _interopRequireDefault(_wrapHttpClient);
  18. var _createContentfulApi = require('./create-contentful-api');
  19. var _createContentfulApi2 = _interopRequireDefault(_createContentfulApi);
  20. var _createLinkResolver = require('./create-link-resolver');
  21. var _createLinkResolver2 = _interopRequireDefault(_createLinkResolver);
  22. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  23. /**
  24. * Create a client instance
  25. * @func
  26. * @name createClient
  27. * @memberof contentful
  28. * @param {Object} params - Client initialization parameters
  29. * @prop {string} params.space - Space ID
  30. * @prop {string} params.accessToken - Contentful CDA Access Token
  31. * @prop {boolean=} params.insecure - Requests will be made over http instead of the default https (default: true)
  32. * @prop {string=} params.host - API host (default: cdn.contentful.com). Also usable with preview.contentful.com.
  33. * @prop {Object=} params.agent - Optional Node.js HTTP agent for proxying (see <a href="https://nodejs.org/api/http.html#http_class_http_agent">Node.js docs</a> and <a href="https://www.npmjs.com/package/https-proxy-agent">https-proxy-agent</a>)
  34. * @prop {Object=} params.headers - Optional additional headers
  35. * @prop {number=} params.concurrency - Number of allowed concurrent requests. Changing this value is not recommended. (default: 6)
  36. * @prop {number=} params.delay - Delay in milliseconds for waiting after hitting the allowed number of concurrent requests. Changing this value is not recommended. (default: 1000)
  37. * @prop {number=} params.maxRetries - Maximum number of retries when a 429 is received (default: 5)
  38. * @prop {boolean=} params.retryOnTooManyRequests - If we should retry on 429s (default: true)
  39. * @prop {boolean=} params.resolveLinks - If we should resolve links between entries
  40. * @returns {ContentfulClientAPI.ClientAPI}
  41. * @example
  42. * const client = contentful.createClient({
  43. * accessToken: 'myAccessToken',
  44. * space: 'mySpaceId'
  45. * })
  46. */
  47. /**
  48. * Contentful Delivery API SDK. Allows you to create instances of a client
  49. * with access to the Contentful Content Delivery API.
  50. * @namespace contentful
  51. * @see ContentfulClientAPI
  52. */
  53. function createClient(axios, params) {
  54. params = (0, _defaults2.default)((0, _cloneDeep2.default)(params), {
  55. rateLimit: 9,
  56. rateLimitPeriod: 1000,
  57. maxRetries: 5,
  58. retryOnTooManyRequests: true
  59. });
  60. if (!params.accessToken) {
  61. throw new TypeError('Expected parameter accessToken');
  62. }
  63. if (!params.space) {
  64. throw new TypeError('Expected parameter space');
  65. }
  66. // Use resolveLinks param if specified, otherwise default to true
  67. var resolveLinks = !!('resolveLinks' in params ? params.resolveLinks : true);
  68. var shouldLinksResolve = (0, _createLinkResolver2.default)(resolveLinks);
  69. params.defaultHostname = 'cdn.contentful.com';
  70. params.headers = (0, _assign2.default)(params.headers, {
  71. 'Content-Type': 'application/vnd.contentful.delivery.v1+json',
  72. 'X-Contentful-User-Agent': 'contentful.js/' + _version2.default
  73. });
  74. var http = (0, _wrapHttpClient2.default)((0, _createHttpClient2.default)(axios, params), {
  75. concurrency: params.rateLimit,
  76. delay: params.rateLimitPeriod,
  77. maxRetries: params.maxRetries,
  78. retryOnTooManyRequests: params.retryOnTooManyRequests
  79. });
  80. return (0, _createContentfulApi2.default)({
  81. http: http,
  82. shouldLinksResolve: shouldLinksResolve
  83. });
  84. }