@lighthouse/common 5.0.0-canary-9 → 5.0.0-canary-11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36,36 +36,21 @@ const defaultOptions = {
36
36
  cache: 'no-cache'
37
37
  };
38
38
  function fetchImage(url, options = {}) {
39
- const isWebContext = typeof window === 'object';
40
- const {
41
- isHeader = false
42
- } = options;
43
39
  const shouldUseCloudfront = url && url.includes('.cloudfront.net');
44
- if (shouldUseCloudfront && isWebContext) {
45
- // NOTE: Instead of passing in options directly
46
- // we expose the used variables for readability
47
- const {
48
- Signature,
49
- Policy,
50
- KeyPairId
51
- } = options;
52
- return (0, _fetchImageForWeb.fetchImageForWeb)(url, {
53
- isHeader,
54
- Signature,
55
- Policy,
56
- KeyPairId
57
- });
58
- } else if (shouldUseCloudfront && !isWebContext) {
59
- return (0, _fetchImageForPdfGeneratorService.fetchImageForPdfGeneratorService)(url);
40
+ if (shouldUseCloudfront) {
41
+ const isWebContext = typeof window === 'object';
42
+ return isWebContext ?
43
+ // Values used from options: isHeader, Signature, Policy, KeyPairId
44
+ (0, _fetchImageForWeb.fetchImageForWeb)(url, options) : (0, _fetchImageForPdfGeneratorService.fetchImageForPdfGeneratorService)(url);
60
45
  }
61
46
  const encodedUrl = encodeURI(url);
62
47
  const fetchOptions = {
63
48
  ...defaultOptions,
64
- ...options,
65
- headers: {
66
- ...(options.headers || {})
67
- }
49
+ ...options
68
50
  };
51
+ const {
52
+ isHeader = false
53
+ } = options;
69
54
  return fetch(encodedUrl, fetchOptions).then(response => {
70
55
  const contentHeader = response.headers.get('content-length');
71
56
  const contentType = response.headers.get('content-type');
@@ -133,7 +118,7 @@ function validateJpegImage(base64string) {
133
118
  function validatePngImage(base64string) {
134
119
  const src = base64string;
135
120
  const imageData = Uint8Array.from((0, _abab.atob)(src.replace('data:image/png;base64,', '')), c => c.charCodeAt(0));
136
- const sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]; // in hex:
121
+ const sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130];
137
122
 
138
123
  //check last 12 elements of array so they contains needed values
139
124
  for (let i = 12; i > 0; i--) {
@@ -33,7 +33,7 @@ const fetchImageForPdfGeneratorService = async function (url) {
33
33
  key: keyWithTransformations
34
34
  });
35
35
  if (alreadyTransformedImage && alreadyTransformedImage.body) {
36
- const fullDataUrl = await formatBase64Image({
36
+ const fullDataUrl = formatBase64Image({
37
37
  base64String: alreadyTransformedImage.body.toString('base64'),
38
38
  key: keyWithTransformations
39
39
  });
@@ -46,7 +46,7 @@ const fetchImageForPdfGeneratorService = async function (url) {
46
46
  case 200:
47
47
  {
48
48
  console.log('Image transformation successful');
49
- const fullDataUrl = await formatBase64Image({
49
+ const fullDataUrl = formatBase64Image({
50
50
  base64String: transformerResponse.body.toString('base64'),
51
51
  key: keyWithTransformations
52
52
  });
@@ -62,7 +62,7 @@ const fetchImageForPdfGeneratorService = async function (url) {
62
62
  key: keyWithTransformations
63
63
  });
64
64
  console.log('Image successfully fetched from S3 at:', redirectLocation);
65
- const fullDataUrl = await formatBase64Image({
65
+ const fullDataUrl = formatBase64Image({
66
66
  base64String: newlyTransformedImage.body.toString('base64'),
67
67
  key: keyWithTransformations
68
68
  });
@@ -143,10 +143,13 @@ async function fetchResourceFromS3({
143
143
  console.info('Image not found in transformed bucket, invoking transformer');
144
144
  }
145
145
  }
146
- async function formatBase64Image({
146
+ function formatBase64Image({
147
147
  base64String,
148
148
  key
149
149
  }) {
150
+ if (!key) {
151
+ throw new Error('Key is required for image formatting');
152
+ }
150
153
  const imageType = key.toLowerCase().includes('.png') ? 'png' : 'jpeg';
151
154
  const base64Flag = `data:image/${imageType};base64,`;
152
155
  const fullDataUrl = `${base64Flag}${base64String}`;
@@ -154,7 +157,7 @@ async function formatBase64Image({
154
157
  // Validate the formatted data URL
155
158
  const isValid = (0, _imageValidators.validateBase64Image)(fullDataUrl);
156
159
  if (!isValid) {
157
- return Promise.reject(new Error('InvalidImageError'));
160
+ throw new Error('InvalidImageError');
158
161
  }
159
162
  return fullDataUrl;
160
163
  }
@@ -29,7 +29,7 @@ const fetchImageForWeb = async function (url, options) {
29
29
  KeyPairId
30
30
  } = options;
31
31
  try {
32
- const firstParamConnector = new URL(url).searchParams.size > 0 ? '&' : '?';
32
+ const firstParamConnector = url.indexOf('?') > -1 ? '&' : '?';
33
33
  const urlToEncode = `${url}${firstParamConnector}Signature=${Signature}&Policy=${Policy}&Key-Pair-Id=${KeyPairId}`;
34
34
  const encodedUrl = encodeURI(urlToEncode);
35
35
  console.info('Fetching image via CloudFront For Web');
@@ -28,7 +28,7 @@ function validatePngImage(base64string) {
28
28
  const src = base64string;
29
29
  const base64Data = src.replace('data:image/png;base64,', '');
30
30
  const imageData = new Uint8Array(Buffer.from(base64Data, 'base64'));
31
- const sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]; // in hex:
31
+ const sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130];
32
32
 
33
33
  //check last 12 elements of array so they contains needed values
34
34
  for (let i = 12; i > 0; i--) {
@@ -17,11 +17,8 @@ const buildAuditContent = exports.buildAuditContent = _bluebird.default.method((
17
17
  assetUrl,
18
18
  link
19
19
  }) => {
20
- return (0, _helpers.fetchImage)(assetUrl, {
21
- Signature: settings.Signature,
22
- Policy: settings.Policy,
23
- KeyPairId: settings.KeyPairId
24
- }).then(base64String => ({
20
+ // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context
21
+ return (0, _helpers.fetchImage)(assetUrl, settings).then(base64String => ({
25
22
  alignment: 'center',
26
23
  fit: [210, 210],
27
24
  image: base64String,
@@ -42,10 +42,7 @@ function buildImage(options) {
42
42
  const {
43
43
  awsS3BaseUrl,
44
44
  cloudinaryBaseUrl,
45
- cloudfrontBaseUrl,
46
- Signature,
47
- Policy,
48
- KeyPairId
45
+ cloudfrontBaseUrl
49
46
  } = settings || {};
50
47
  const isVideoType = new RegExp('.mp4$').test(filepath);
51
48
  const link = `${awsS3BaseUrl}/${filepath}`;
@@ -66,11 +63,9 @@ function buildImage(options) {
66
63
  width: 600,
67
64
  quality: 50
68
65
  });
69
- return (0, _helpers.fetchImage)(url, {
70
- Signature,
71
- Policy,
72
- KeyPairId
73
- }).then(base64String => ({
66
+
67
+ // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context
68
+ return (0, _helpers.fetchImage)(url, settings).then(base64String => ({
74
69
  alignment,
75
70
  fit: [width, height],
76
71
  image: base64String,
@@ -118,7 +113,8 @@ function buildSummaryField({
118
113
  width: 140
119
114
  };
120
115
  }
121
- return (0, _helpers.fetchImage)(value).then(base64String => {
116
+ // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context
117
+ return (0, _helpers.fetchImage)(value, settings).then(base64String => {
122
118
  return {
123
119
  alignment: 'left',
124
120
  image: base64String,
@@ -239,11 +235,9 @@ function buildTemplateFieldRow({
239
235
  }
240
236
  if (isSignatureField) {
241
237
  if (!value) return [labelText, ''];
242
- return (0, _helpers.fetchImage)(value, {
243
- Signature: settings.Signature,
244
- Policy: settings.Policy,
245
- KeyPairId: settings.KeyPairId
246
- }).then(base64String => {
238
+
239
+ // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context
240
+ return (0, _helpers.fetchImage)(value, settings).then(base64String => {
247
241
  const values = {
248
242
  alignment: 'left',
249
243
  image: base64String,
@@ -32,29 +32,17 @@ var defaultOptions = {
32
32
  };
33
33
  export function fetchImage(url) {
34
34
  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
35
- var isWebContext = (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object';
36
- var _options$isHeader = options.isHeader,
37
- isHeader = _options$isHeader === void 0 ? false : _options$isHeader;
38
35
  var shouldUseCloudfront = url && url.includes('.cloudfront.net');
39
- if (shouldUseCloudfront && isWebContext) {
40
- // NOTE: Instead of passing in options directly
41
- // we expose the used variables for readability
42
- var Signature = options.Signature,
43
- Policy = options.Policy,
44
- KeyPairId = options.KeyPairId;
45
- return fetchImageForWeb(url, {
46
- isHeader: isHeader,
47
- Signature: Signature,
48
- Policy: Policy,
49
- KeyPairId: KeyPairId
50
- });
51
- } else if (shouldUseCloudfront && !isWebContext) {
52
- return fetchImageForPdfGeneratorService(url);
36
+ if (shouldUseCloudfront) {
37
+ var isWebContext = (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object';
38
+ return isWebContext ?
39
+ // Values used from options: isHeader, Signature, Policy, KeyPairId
40
+ fetchImageForWeb(url, options) : fetchImageForPdfGeneratorService(url);
53
41
  }
54
42
  var encodedUrl = encodeURI(url);
55
- var fetchOptions = _objectSpread(_objectSpread(_objectSpread({}, defaultOptions), options), {}, {
56
- headers: _objectSpread({}, options.headers || {})
57
- });
43
+ var fetchOptions = _objectSpread(_objectSpread({}, defaultOptions), options);
44
+ var _options$isHeader = options.isHeader,
45
+ isHeader = _options$isHeader === void 0 ? false : _options$isHeader;
58
46
  return fetch(encodedUrl, fetchOptions).then(function (response) {
59
47
  var contentHeader = response.headers.get('content-length');
60
48
  var contentType = response.headers.get('content-type');
@@ -129,7 +117,7 @@ export function validatePngImage(base64string) {
129
117
  var imageData = Uint8Array.from(atob(src.replace('data:image/png;base64,', '')), function (c) {
130
118
  return c.charCodeAt(0);
131
119
  });
132
- var sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]; // in hex:
120
+ var sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130];
133
121
 
134
122
  //check last 12 elements of array so they contains needed values
135
123
  for (var i = 12; i > 0; i--) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["atob","btoa","fetchPonyfill","Promise","LIGHTHOUSE_LOGO_URL","imageNotFound","fetchImageForPdfGeneratorService","fetchImageForWeb","fetch","self","_typeof","contentTypes","defaultOptions","cache","fetchImage","url","options","arguments","length","undefined","isWebContext","window","_options$isHeader","isHeader","shouldUseCloudfront","includes","Signature","Policy","KeyPairId","encodedUrl","encodeURI","fetchOptions","_objectSpread","headers","then","response","contentHeader","get","contentType","reject","Error","concat","ok","imageType","arrayBuffer","buffer","_ref","base64Flag","imageStr","arrayBufferToBase64","base64","isValid","validateBase64Image","catch","error","console","binary","bytes","slice","call","Uint8Array","forEach","b","String","fromCharCode","base64String","isJpeg","startsWith","validateJpegImage","isPng","validatePngImage","base64string","src","imageData","from","replace","c","charCodeAt","imageCorrupted","sequence","i"],"sources":["../../../src/helpers/fetch-image/index.js"],"sourcesContent":["import { atob, btoa } from '@lighthouse/abab'\nimport fetchPonyfill from 'fetch-ponyfill'\nimport Promise from 'bluebird'\nimport { LIGHTHOUSE_LOGO_URL } from '../../constants'\nimport { imageNotFound } from '../../images'\nimport { fetchImageForPdfGeneratorService } from '../fetch-image-for-pdf-generator-service'\nimport { fetchImageForWeb } from '../fetch-image-for-web'\n\n// NOTE use the native fetch if it's available in the browser, because the\n// ponyfill (which actually uses the github polyfill) does not support all the\n// same options as native fetch\nconst fetch =\n (typeof self === 'object' && self.fetch) || fetchPonyfill({ Promise }).fetch\n\nconst contentTypes = {\n 'image/png': 'png',\n 'image/jpeg': 'jpeg',\n}\n\nconst defaultOptions = {\n // NOTE The cache: no-cache option is important to avoid an issue with CORS\n // and caching on Chrome. Here's a good explanation of the issue:\n // https://stackoverflow.com/a/37455118\n // In our case, when loading the web version of a form, the signature image is\n // cached without the correct CORS headers. If the pdf is then generated,\n // there's a mismatch between the cached image headers and the CORS headers\n // sent from the fetch request, causing an error\n cache: 'no-cache',\n}\n\nexport function fetchImage(url, options = {}) {\n const isWebContext = typeof window === 'object'\n\n const { isHeader = false } = options\n\n const shouldUseCloudfront = url && url.includes('.cloudfront.net')\n\n if (shouldUseCloudfront && isWebContext) {\n // NOTE: Instead of passing in options directly\n // we expose the used variables for readability\n const { Signature, Policy, KeyPairId } = options\n\n return fetchImageForWeb(url, {\n isHeader,\n Signature,\n Policy,\n KeyPairId,\n })\n } else if (shouldUseCloudfront && !isWebContext) {\n return fetchImageForPdfGeneratorService(url)\n }\n\n const encodedUrl = encodeURI(url)\n\n const fetchOptions = {\n ...defaultOptions,\n ...options,\n headers: {\n ...(options.headers || {}),\n },\n }\n\n return fetch(encodedUrl, fetchOptions)\n .then(response => {\n const contentHeader = response.headers.get('content-length')\n const contentType = response.headers.get('content-type')\n\n // NOTE: the response will be ok but we won't be able to render any\n // image meaning pdfmake will error. Raise error here and return early.\n if (contentHeader === '0') {\n return Promise.reject(\n new Error(`Failed to fetch image as no content length: ${encodedUrl}`)\n )\n }\n\n if (!response.ok) {\n return Promise.reject(new Error(`Failed to fetch image: ${encodedUrl}`))\n }\n\n const imageType = contentTypes[contentType]\n\n return response.arrayBuffer().then(buffer => ({\n buffer,\n imageType,\n }))\n })\n .then(({ buffer, imageType }) => {\n const base64Flag = `data:image/${imageType};base64,`\n const imageStr = arrayBufferToBase64(buffer)\n\n const base64 = `${base64Flag}${imageStr}`\n const isValid = validateBase64Image(base64)\n\n if (!isValid) {\n return Promise.reject(new Error('InvalidImageError'))\n }\n\n return base64\n })\n .catch(error => {\n if (isHeader) {\n // NOTE: Replace failed headers with LH logo\n console.error('FetchImageHeaderError', error)\n return fetchImage(LIGHTHOUSE_LOGO_URL, defaultOptions)\n }\n\n console.error(error)\n return imageNotFound\n })\n}\n\nfunction arrayBufferToBase64(buffer) {\n let binary = ''\n const bytes = [].slice.call(new Uint8Array(buffer))\n\n bytes.forEach(b => (binary += String.fromCharCode(b)))\n\n return btoa(binary)\n}\n\nexport function validateBase64Image(base64String) {\n const isJpeg = base64String.startsWith('data:image/jpeg;base64,')\n\n if (isJpeg) return validateJpegImage(base64String)\n\n const isPng = base64String.startsWith('data:image/png;base64,')\n\n if (isPng) return validatePngImage(base64String)\n\n return false\n}\n\n// See SO for more info: https://stackoverflow.com/a/41635312\n// Fiddle: https://jsfiddle.net/Lnyxuchw/\nexport function validateJpegImage(base64string) {\n const src = base64string\n const imageData = Uint8Array.from(\n atob(src.replace('data:image/jpeg;base64,', '')),\n c => c.charCodeAt(0)\n )\n const imageCorrupted =\n imageData[imageData.length - 1] === 217 &&\n imageData[imageData.length - 2] === 255\n\n return imageCorrupted\n}\n\n// See SO for more info: https://stackoverflow.com/a/41635312\n// Fiddle: https://jsfiddle.net/Lnyxuchw/\nexport function validatePngImage(base64string) {\n const src = base64string\n const imageData = Uint8Array.from(\n atob(src.replace('data:image/png;base64,', '')),\n c => c.charCodeAt(0)\n )\n const sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130] // in hex:\n\n //check last 12 elements of array so they contains needed values\n for (let i = 12; i > 0; i--) {\n if (imageData[imageData.length - i] !== sequence[12 - i]) {\n return false\n }\n }\n\n return true\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["atob","btoa","fetchPonyfill","Promise","LIGHTHOUSE_LOGO_URL","imageNotFound","fetchImageForPdfGeneratorService","fetchImageForWeb","fetch","self","_typeof","contentTypes","defaultOptions","cache","fetchImage","url","options","arguments","length","undefined","shouldUseCloudfront","includes","isWebContext","window","encodedUrl","encodeURI","fetchOptions","_objectSpread","_options$isHeader","isHeader","then","response","contentHeader","headers","get","contentType","reject","Error","concat","ok","imageType","arrayBuffer","buffer","_ref","base64Flag","imageStr","arrayBufferToBase64","base64","isValid","validateBase64Image","catch","error","console","binary","bytes","slice","call","Uint8Array","forEach","b","String","fromCharCode","base64String","isJpeg","startsWith","validateJpegImage","isPng","validatePngImage","base64string","src","imageData","from","replace","c","charCodeAt","imageCorrupted","sequence","i"],"sources":["../../../src/helpers/fetch-image/index.js"],"sourcesContent":["import { atob, btoa } from '@lighthouse/abab'\nimport fetchPonyfill from 'fetch-ponyfill'\nimport Promise from 'bluebird'\nimport { LIGHTHOUSE_LOGO_URL } from '../../constants'\nimport { imageNotFound } from '../../images'\nimport { fetchImageForPdfGeneratorService } from '../fetch-image-for-pdf-generator-service'\nimport { fetchImageForWeb } from '../fetch-image-for-web'\n\n// NOTE use the native fetch if it's available in the browser, because the\n// ponyfill (which actually uses the github polyfill) does not support all the\n// same options as native fetch\nconst fetch =\n (typeof self === 'object' && self.fetch) || fetchPonyfill({ Promise }).fetch\n\nconst contentTypes = {\n 'image/png': 'png',\n 'image/jpeg': 'jpeg',\n}\n\nconst defaultOptions = {\n // NOTE The cache: no-cache option is important to avoid an issue with CORS\n // and caching on Chrome. Here's a good explanation of the issue:\n // https://stackoverflow.com/a/37455118\n // In our case, when loading the web version of a form, the signature image is\n // cached without the correct CORS headers. If the pdf is then generated,\n // there's a mismatch between the cached image headers and the CORS headers\n // sent from the fetch request, causing an error\n cache: 'no-cache',\n}\n\nexport function fetchImage(url, options = {}) {\n const shouldUseCloudfront = url && url.includes('.cloudfront.net')\n\n if (shouldUseCloudfront) {\n const isWebContext = typeof window === 'object'\n\n return isWebContext\n ? // Values used from options: isHeader, Signature, Policy, KeyPairId\n fetchImageForWeb(url, options)\n : fetchImageForPdfGeneratorService(url)\n }\n\n const encodedUrl = encodeURI(url)\n\n const fetchOptions = {\n ...defaultOptions,\n ...options,\n }\n const { isHeader = false } = options\n\n return fetch(encodedUrl, fetchOptions)\n .then(response => {\n const contentHeader = response.headers.get('content-length')\n const contentType = response.headers.get('content-type')\n\n // NOTE: the response will be ok but we won't be able to render any\n // image meaning pdfmake will error. Raise error here and return early.\n if (contentHeader === '0') {\n return Promise.reject(\n new Error(`Failed to fetch image as no content length: ${encodedUrl}`)\n )\n }\n\n if (!response.ok) {\n return Promise.reject(new Error(`Failed to fetch image: ${encodedUrl}`))\n }\n\n const imageType = contentTypes[contentType]\n\n return response.arrayBuffer().then(buffer => ({\n buffer,\n imageType,\n }))\n })\n .then(({ buffer, imageType }) => {\n const base64Flag = `data:image/${imageType};base64,`\n const imageStr = arrayBufferToBase64(buffer)\n\n const base64 = `${base64Flag}${imageStr}`\n const isValid = validateBase64Image(base64)\n\n if (!isValid) {\n return Promise.reject(new Error('InvalidImageError'))\n }\n\n return base64\n })\n .catch(error => {\n if (isHeader) {\n // NOTE: Replace failed headers with LH logo\n console.error('FetchImageHeaderError', error)\n return fetchImage(LIGHTHOUSE_LOGO_URL, defaultOptions)\n }\n\n console.error(error)\n return imageNotFound\n })\n}\n\nfunction arrayBufferToBase64(buffer) {\n let binary = ''\n const bytes = [].slice.call(new Uint8Array(buffer))\n\n bytes.forEach(b => (binary += String.fromCharCode(b)))\n\n return btoa(binary)\n}\n\nexport function validateBase64Image(base64String) {\n const isJpeg = base64String.startsWith('data:image/jpeg;base64,')\n\n if (isJpeg) return validateJpegImage(base64String)\n\n const isPng = base64String.startsWith('data:image/png;base64,')\n\n if (isPng) return validatePngImage(base64String)\n\n return false\n}\n\n// See SO for more info: https://stackoverflow.com/a/41635312\n// Fiddle: https://jsfiddle.net/Lnyxuchw/\nexport function validateJpegImage(base64string) {\n const src = base64string\n const imageData = Uint8Array.from(\n atob(src.replace('data:image/jpeg;base64,', '')),\n c => c.charCodeAt(0)\n )\n const imageCorrupted =\n imageData[imageData.length - 1] === 217 &&\n imageData[imageData.length - 2] === 255\n\n return imageCorrupted\n}\n\n// See SO for more info: https://stackoverflow.com/a/41635312\n// Fiddle: https://jsfiddle.net/Lnyxuchw/\nexport function validatePngImage(base64string) {\n const src = base64string\n const imageData = Uint8Array.from(\n atob(src.replace('data:image/png;base64,', '')),\n c => c.charCodeAt(0)\n )\n const sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]\n\n //check last 12 elements of array so they contains needed values\n for (let i = 12; i > 0; i--) {\n if (imageData[imageData.length - i] !== sequence[12 - i]) {\n return false\n }\n }\n\n return true\n}\n"],"mappings":"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","ignoreList":[]}
@@ -40,73 +40,64 @@ export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
40
40
  case 10:
41
41
  alreadyTransformedImage = _context.sent;
42
42
  if (!(alreadyTransformedImage && alreadyTransformedImage.body)) {
43
- _context.next = 16;
43
+ _context.next = 14;
44
44
  break;
45
45
  }
46
- _context.next = 14;
47
- return formatBase64Image({
46
+ fullDataUrl = formatBase64Image({
48
47
  base64String: alreadyTransformedImage.body.toString('base64'),
49
48
  key: keyWithTransformations
50
49
  });
51
- case 14:
52
- fullDataUrl = _context.sent;
53
50
  return _context.abrupt("return", fullDataUrl);
54
- case 16:
51
+ case 14:
55
52
  keyWithoutTransformations = "/".concat(keyWithTransformations.split('?')[0]);
56
- _context.next = 19;
53
+ _context.next = 17;
57
54
  return requestImageTransformation(keyWithoutTransformations);
58
- case 19:
55
+ case 17:
59
56
  transformerResponse = _context.sent;
60
57
  statusCode = transformerResponse.statusCode;
61
58
  _context.t0 = statusCode;
62
- _context.next = _context.t0 === 200 ? 24 : _context.t0 === 302 ? 29 : _context.t0 === 400 ? 41 : _context.t0 === 403 ? 42 : _context.t0 === 404 ? 43 : _context.t0 === 500 ? 44 : 45;
59
+ _context.next = _context.t0 === 200 ? 22 : _context.t0 === 302 ? 25 : _context.t0 === 400 ? 35 : _context.t0 === 403 ? 36 : _context.t0 === 404 ? 37 : _context.t0 === 500 ? 38 : 39;
63
60
  break;
64
- case 24:
61
+ case 22:
65
62
  console.log('Image transformation successful');
66
- _context.next = 27;
67
- return formatBase64Image({
63
+ _fullDataUrl = formatBase64Image({
68
64
  base64String: transformerResponse.body.toString('base64'),
69
65
  key: keyWithTransformations
70
66
  });
71
- case 27:
72
- _fullDataUrl = _context.sent;
73
67
  return _context.abrupt("return", _fullDataUrl);
74
- case 29:
68
+ case 25:
75
69
  console.log('Image transformation successful but image is too big for lambda delivery, fetching directly from S3');
76
70
  redirectLocation = (_transformerResponse$ = transformerResponse.headers) === null || _transformerResponse$ === void 0 ? void 0 : _transformerResponse$.Location;
77
71
  if (!redirectLocation) {
78
- _context.next = 40;
72
+ _context.next = 34;
79
73
  break;
80
74
  }
81
- _context.next = 34;
75
+ _context.next = 30;
82
76
  return fetchResourceFromS3({
83
77
  bucketName: "".concat(process.env.S3_BUCKET_UPLOADS, "-transformed"),
84
78
  key: keyWithTransformations
85
79
  });
86
- case 34:
80
+ case 30:
87
81
  newlyTransformedImage = _context.sent;
88
82
  console.log('Image successfully fetched from S3 at:', redirectLocation);
89
- _context.next = 38;
90
- return formatBase64Image({
83
+ _fullDataUrl2 = formatBase64Image({
91
84
  base64String: newlyTransformedImage.body.toString('base64'),
92
85
  key: keyWithTransformations
93
86
  });
94
- case 38:
95
- _fullDataUrl2 = _context.sent;
96
87
  return _context.abrupt("return", _fullDataUrl2);
97
- case 40:
88
+ case 34:
98
89
  throw new Error('Redirect response received but no location provided');
99
- case 41:
90
+ case 35:
100
91
  throw new Error("Bad request to image transformer: ".concat(transformerResponse.body));
101
- case 42:
92
+ case 36:
102
93
  throw new Error('Requested transformed image is too big');
103
- case 43:
94
+ case 37:
104
95
  throw new Error('The requested image does not exist');
105
- case 44:
96
+ case 38:
106
97
  throw new Error("Image transformation failed: ".concat(transformerResponse.body));
107
- case 45:
98
+ case 39:
108
99
  throw new Error("Unexpected response from image transformer: ".concat(statusCode, " - ").concat(transformerResponse.body));
109
- case 46:
100
+ case 40:
110
101
  case "end":
111
102
  return _context.stop();
112
103
  }
@@ -226,35 +217,21 @@ function _fetchResourceFromS() {
226
217
  }));
227
218
  return _fetchResourceFromS.apply(this, arguments);
228
219
  }
229
- export function formatBase64Image(_x4) {
230
- return _formatBase64Image.apply(this, arguments);
231
- }
232
- function _formatBase64Image() {
233
- _formatBase64Image = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(_ref3) {
234
- var base64String, key, imageType, base64Flag, fullDataUrl, isValid;
235
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
236
- while (1) {
237
- switch (_context4.prev = _context4.next) {
238
- case 0:
239
- base64String = _ref3.base64String, key = _ref3.key;
240
- imageType = key.toLowerCase().includes('.png') ? 'png' : 'jpeg';
241
- base64Flag = "data:image/".concat(imageType, ";base64,");
242
- fullDataUrl = "".concat(base64Flag).concat(base64String); // Validate the formatted data URL
243
- isValid = validateBase64Image(fullDataUrl);
244
- if (isValid) {
245
- _context4.next = 7;
246
- break;
247
- }
248
- return _context4.abrupt("return", Promise.reject(new Error('InvalidImageError')));
249
- case 7:
250
- return _context4.abrupt("return", fullDataUrl);
251
- case 8:
252
- case "end":
253
- return _context4.stop();
254
- }
255
- }
256
- }, _callee4);
257
- }));
258
- return _formatBase64Image.apply(this, arguments);
220
+ export function formatBase64Image(_ref3) {
221
+ var base64String = _ref3.base64String,
222
+ key = _ref3.key;
223
+ if (!key) {
224
+ throw new Error('Key is required for image formatting');
225
+ }
226
+ var imageType = key.toLowerCase().includes('.png') ? 'png' : 'jpeg';
227
+ var base64Flag = "data:image/".concat(imageType, ";base64,");
228
+ var fullDataUrl = "".concat(base64Flag).concat(base64String);
229
+
230
+ // Validate the formatted data URL
231
+ var isValid = validateBase64Image(fullDataUrl);
232
+ if (!isValid) {
233
+ throw new Error('InvalidImageError');
234
+ }
235
+ return fullDataUrl;
259
236
  }
260
237
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["validateBase64Image","AWS","REGION","process","env","AWS_REGION","lambda","Lambda","region","s3","S3","fetchImageForPdfGeneratorService","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","urlMatch","applicationId","keyWithTransformations","alreadyTransformedImage","fullDataUrl","keyWithoutTransformations","transformerResponse","statusCode","_fullDataUrl","_transformerResponse$","redirectLocation","newlyTransformedImage","_fullDataUrl2","wrap","_callee$","_context","prev","next","console","info","Error","match","substring","indexOf","fetchResourceFromS3","bucketName","concat","S3_BUCKET_UPLOADS","key","sent","body","formatBase64Image","base64String","toString","abrupt","split","requestImageTransformation","t0","log","headers","Location","stop","_x","apply","arguments","_x2","_requestImageTransformation","_callee2","lambdaEvent","params","result","response","errorMessage","_callee2$","_context2","requestContext","http","method","path","FunctionName","IMAGE_TRANSFORMER_ARN","InvocationType","Payload","JSON","stringify","invoke","promise","parse","message","error","_x3","_fetchResourceFromS","_callee3","_ref2","_callee3$","_context3","Bucket","Key","getObject","Body","contentType","ContentType","contentLength","ContentLength","lastModified","LastModified","etag","ETag","code","_x4","_formatBase64Image","_callee4","_ref3","imageType","base64Flag","isValid","_callee4$","_context4","toLowerCase","includes","Promise","reject"],"sources":["../../../src/helpers/fetch-image-for-pdf-generator-service/index.js"],"sourcesContent":["import { validateBase64Image } from '../image-validators'\nimport AWS from 'aws-sdk'\nconst REGION = process.env.AWS_REGION\n\nconst lambda = new AWS.Lambda({\n region: REGION,\n})\nconst s3 = new AWS.S3({\n region: REGION,\n})\n\nexport const fetchImageForPdfGeneratorService = async function(url) {\n console.info(\n 'Fetching image via CloudFront For Serverless Pdf Generator Service'\n )\n\n if (!url) {\n throw new Error('URL is required to fetch image for PDF generator service')\n }\n\n const urlMatch = url && url.match(/([a-f0-9]{24})\\//)\n const applicationId = urlMatch && urlMatch[1]\n\n if (!applicationId) {\n throw new Error('Requestor has insufficient permissions')\n }\n\n const keyWithTransformations = url.substring(url.indexOf(applicationId))\n\n const alreadyTransformedImage = await fetchResourceFromS3({\n bucketName: `${process.env.S3_BUCKET_UPLOADS}-transformed`,\n key: keyWithTransformations,\n })\n\n if (alreadyTransformedImage && alreadyTransformedImage.body) {\n const fullDataUrl = await formatBase64Image({\n base64String: alreadyTransformedImage.body.toString('base64'),\n key: keyWithTransformations,\n })\n return fullDataUrl\n }\n\n const keyWithoutTransformations = `/${keyWithTransformations.split('?')[0]}`\n\n const transformerResponse = await requestImageTransformation(keyWithoutTransformations)\n\n const statusCode = transformerResponse.statusCode\n\n switch (statusCode) {\n case 200: {\n console.log('Image transformation successful')\n\n const fullDataUrl = await formatBase64Image({\n base64String: transformerResponse.body.toString('base64'),\n key: keyWithTransformations,\n })\n\n return fullDataUrl\n }\n case 302: {\n console.log(\n 'Image transformation successful but image is too big for lambda delivery, fetching directly from S3'\n )\n const redirectLocation = transformerResponse.headers?.Location\n if (redirectLocation) {\n const newlyTransformedImage = await fetchResourceFromS3({\n bucketName: `${process.env.S3_BUCKET_UPLOADS}-transformed`,\n key: keyWithTransformations,\n })\n console.log('Image successfully fetched from S3 at:', redirectLocation)\n\n const fullDataUrl = await formatBase64Image({\n base64String: newlyTransformedImage.body.toString('base64'),\n key: keyWithTransformations,\n })\n\n return fullDataUrl\n }\n throw new Error('Redirect response received but no location provided')\n }\n case 400:\n throw new Error(\n `Bad request to image transformer: ${transformerResponse.body}`\n )\n case 403:\n throw new Error('Requested transformed image is too big')\n case 404:\n throw new Error('The requested image does not exist')\n case 500:\n throw new Error(\n `Image transformation failed: ${transformerResponse.body}`\n )\n default:\n throw new Error(\n `Unexpected response from image transformer: ${statusCode} - ${transformerResponse.body}`\n )\n }\n}\n\nexport async function requestImageTransformation(key) {\n if (!key) {\n throw new Error('Image Path is required for image transformation')\n }\n\n console.log(\n 'ImageTransformation: Invoking image transformer lambda for path:',\n key\n )\n\n const lambdaEvent = {\n requestContext: {\n http: {\n method: 'GET',\n path: key,\n },\n },\n }\n\n const params = {\n FunctionName: process.env.IMAGE_TRANSFORMER_ARN,\n InvocationType: 'RequestResponse',\n Payload: JSON.stringify(lambdaEvent),\n }\n\n try {\n const result = await lambda.invoke(params).promise()\n\n const response = JSON.parse(result.Payload)\n\n return response\n } catch (error) {\n const errorMessage = `Failed to invoke image transformer lambda: ${error.message}`\n console.error(errorMessage, error)\n throw new Error(errorMessage)\n }\n}\n\nexport async function fetchResourceFromS3({ bucketName, key }) {\n console.info(\n `Fetching resource from S3 Bucket: '${bucketName}' at path: '${key}'`\n )\n if (!bucketName || !key) {\n throw new Error(\n 'bucketName and key are required for S3 resource fetch ' +\n JSON.stringify({ bucketName, key })\n )\n }\n\n const params = {\n Bucket: bucketName,\n Key: key,\n }\n\n try {\n const result = await s3.getObject(params).promise()\n\n return {\n body: result.Body,\n contentType: result.ContentType,\n contentLength: result.ContentLength,\n lastModified: result.LastModified,\n etag: result.ETag,\n }\n } catch (error) {\n if (error.code !== 'NoSuchKey') {\n console.info('Failed to fetch image:', error)\n throw new Error(`Failed to fetch image: ${bucketName}/${key}`)\n }\n\n console.info('Image not found in transformed bucket, invoking transformer')\n }\n}\n\nexport async function formatBase64Image({ base64String, key }) {\n const imageType = key.toLowerCase().includes('.png') ? 'png' : 'jpeg'\n const base64Flag = `data:image/${imageType};base64,`\n const fullDataUrl = `${base64Flag}${base64String}`\n\n // Validate the formatted data URL\n const isValid = validateBase64Image(fullDataUrl)\n if (!isValid) {\n return Promise.reject(new Error('InvalidImageError'))\n }\n\n return fullDataUrl\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["validateBase64Image","AWS","REGION","process","env","AWS_REGION","lambda","Lambda","region","s3","S3","fetchImageForPdfGeneratorService","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","urlMatch","applicationId","keyWithTransformations","alreadyTransformedImage","fullDataUrl","keyWithoutTransformations","transformerResponse","statusCode","_fullDataUrl","_transformerResponse$","redirectLocation","newlyTransformedImage","_fullDataUrl2","wrap","_callee$","_context","prev","next","console","info","Error","match","substring","indexOf","fetchResourceFromS3","bucketName","concat","S3_BUCKET_UPLOADS","key","sent","body","formatBase64Image","base64String","toString","abrupt","split","requestImageTransformation","t0","log","headers","Location","stop","_x","apply","arguments","_x2","_requestImageTransformation","_callee2","lambdaEvent","params","result","response","errorMessage","_callee2$","_context2","requestContext","http","method","path","FunctionName","IMAGE_TRANSFORMER_ARN","InvocationType","Payload","JSON","stringify","invoke","promise","parse","message","error","_x3","_fetchResourceFromS","_callee3","_ref2","_callee3$","_context3","Bucket","Key","getObject","Body","contentType","ContentType","contentLength","ContentLength","lastModified","LastModified","etag","ETag","code","_ref3","imageType","toLowerCase","includes","base64Flag","isValid"],"sources":["../../../src/helpers/fetch-image-for-pdf-generator-service/index.js"],"sourcesContent":["import { validateBase64Image } from '../image-validators'\nimport AWS from 'aws-sdk'\nconst REGION = process.env.AWS_REGION\n\nconst lambda = new AWS.Lambda({\n region: REGION,\n})\nconst s3 = new AWS.S3({\n region: REGION,\n})\n\nexport const fetchImageForPdfGeneratorService = async function(url) {\n console.info(\n 'Fetching image via CloudFront For Serverless Pdf Generator Service'\n )\n\n if (!url) {\n throw new Error('URL is required to fetch image for PDF generator service')\n }\n\n const urlMatch = url && url.match(/([a-f0-9]{24})\\//)\n const applicationId = urlMatch && urlMatch[1]\n\n if (!applicationId) {\n throw new Error('Requestor has insufficient permissions')\n }\n\n const keyWithTransformations = url.substring(url.indexOf(applicationId))\n\n const alreadyTransformedImage = await fetchResourceFromS3({\n bucketName: `${process.env.S3_BUCKET_UPLOADS}-transformed`,\n key: keyWithTransformations,\n })\n\n if (alreadyTransformedImage && alreadyTransformedImage.body) {\n const fullDataUrl = formatBase64Image({\n base64String: alreadyTransformedImage.body.toString('base64'),\n key: keyWithTransformations,\n })\n return fullDataUrl\n }\n\n const keyWithoutTransformations = `/${keyWithTransformations.split('?')[0]}`\n\n const transformerResponse = await requestImageTransformation(\n keyWithoutTransformations\n )\n\n const statusCode = transformerResponse.statusCode\n\n switch (statusCode) {\n case 200: {\n console.log('Image transformation successful')\n\n const fullDataUrl = formatBase64Image({\n base64String: transformerResponse.body.toString('base64'),\n key: keyWithTransformations,\n })\n\n return fullDataUrl\n }\n case 302: {\n console.log(\n 'Image transformation successful but image is too big for lambda delivery, fetching directly from S3'\n )\n const redirectLocation = transformerResponse.headers?.Location\n if (redirectLocation) {\n const newlyTransformedImage = await fetchResourceFromS3({\n bucketName: `${process.env.S3_BUCKET_UPLOADS}-transformed`,\n key: keyWithTransformations,\n })\n console.log('Image successfully fetched from S3 at:', redirectLocation)\n\n const fullDataUrl = formatBase64Image({\n base64String: newlyTransformedImage.body.toString('base64'),\n key: keyWithTransformations,\n })\n\n return fullDataUrl\n }\n throw new Error('Redirect response received but no location provided')\n }\n case 400:\n throw new Error(\n `Bad request to image transformer: ${transformerResponse.body}`\n )\n case 403:\n throw new Error('Requested transformed image is too big')\n case 404:\n throw new Error('The requested image does not exist')\n case 500:\n throw new Error(\n `Image transformation failed: ${transformerResponse.body}`\n )\n default:\n throw new Error(\n `Unexpected response from image transformer: ${statusCode} - ${transformerResponse.body}`\n )\n }\n}\n\nexport async function requestImageTransformation(key) {\n if (!key) {\n throw new Error('Image Path is required for image transformation')\n }\n\n console.log(\n 'ImageTransformation: Invoking image transformer lambda for path:',\n key\n )\n\n const lambdaEvent = {\n requestContext: {\n http: {\n method: 'GET',\n path: key,\n },\n },\n }\n\n const params = {\n FunctionName: process.env.IMAGE_TRANSFORMER_ARN,\n InvocationType: 'RequestResponse',\n Payload: JSON.stringify(lambdaEvent),\n }\n\n try {\n const result = await lambda.invoke(params).promise()\n\n const response = JSON.parse(result.Payload)\n\n return response\n } catch (error) {\n const errorMessage = `Failed to invoke image transformer lambda: ${error.message}`\n console.error(errorMessage, error)\n throw new Error(errorMessage)\n }\n}\n\nexport async function fetchResourceFromS3({ bucketName, key }) {\n console.info(\n `Fetching resource from S3 Bucket: '${bucketName}' at path: '${key}'`\n )\n if (!bucketName || !key) {\n throw new Error(\n 'bucketName and key are required for S3 resource fetch ' +\n JSON.stringify({ bucketName, key })\n )\n }\n\n const params = {\n Bucket: bucketName,\n Key: key,\n }\n\n try {\n const result = await s3.getObject(params).promise()\n\n return {\n body: result.Body,\n contentType: result.ContentType,\n contentLength: result.ContentLength,\n lastModified: result.LastModified,\n etag: result.ETag,\n }\n } catch (error) {\n if (error.code !== 'NoSuchKey') {\n console.info('Failed to fetch image:', error)\n throw new Error(`Failed to fetch image: ${bucketName}/${key}`)\n }\n\n console.info('Image not found in transformed bucket, invoking transformer')\n }\n}\n\nexport function formatBase64Image({ base64String, key }) {\n if (!key) {\n throw new Error('Key is required for image formatting')\n }\n\n const imageType = key.toLowerCase().includes('.png') ? 'png' : 'jpeg'\n const base64Flag = `data:image/${imageType};base64,`\n const fullDataUrl = `${base64Flag}${base64String}`\n\n // Validate the formatted data URL\n const isValid = validateBase64Image(fullDataUrl)\n if (!isValid) {\n throw new Error('InvalidImageError')\n }\n\n return fullDataUrl\n}\n"],"mappings":"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","ignoreList":[]}
@@ -26,7 +26,7 @@ export var fetchImageForWeb = /*#__PURE__*/function () {
26
26
  case 0:
27
27
  _options$isHeader = options.isHeader, isHeader = _options$isHeader === void 0 ? false : _options$isHeader, Signature = options.Signature, Policy = options.Policy, KeyPairId = options.KeyPairId;
28
28
  _context.prev = 1;
29
- firstParamConnector = new URL(url).searchParams.size > 0 ? '&' : '?';
29
+ firstParamConnector = url.indexOf('?') > -1 ? '&' : '?';
30
30
  urlToEncode = "".concat(url).concat(firstParamConnector, "Signature=").concat(Signature, "&Policy=").concat(Policy, "&Key-Pair-Id=").concat(KeyPairId);
31
31
  encodedUrl = encodeURI(urlToEncode);
32
32
  console.info('Fetching image via CloudFront For Web');
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["imageNotFound","fetchLighthouseLogo","arrayBufferToBase64","validateBase64Image","fetchPonyfill","contentTypes","fetch","self","_typeof","Promise","fetchImageForWeb","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","options","_options$isHeader","isHeader","Signature","Policy","KeyPairId","firstParamConnector","urlToEncode","encodedUrl","imageResponse","contentLengthHeader","contentType","imageType","logoArrayBuffer","base64Flag","imageStr","base64","isValid","wrap","_callee$","_context","prev","next","URL","searchParams","size","concat","encodeURI","console","info","sent","headers","get","abrupt","reject","Error","ok","arrayBuffer","t0","error","stop","_x","_x2","apply","arguments"],"sources":["../../../src/helpers/fetch-image-for-web/index.js"],"sourcesContent":["import { imageNotFound } from '../../images'\nimport { fetchLighthouseLogo } from '../fetch-lighthouse-logo'\nimport { arrayBufferToBase64 } from '../array-buffer-to-base-64'\nimport { validateBase64Image } from '../image-validators'\nimport fetchPonyfill from 'fetch-ponyfill'\nconst contentTypes = {\n 'image/png': 'png',\n 'image/jpeg': 'jpeg',\n}\n\n// NOTE use the native fetch if it's available in the browser, because the\n// ponyfill (which actually uses the github polyfill) does not support all the\n// same options as native fetch\nconst fetch =\n (typeof self === 'object' && self.fetch) || fetchPonyfill({ Promise }).fetch\n\nexport const fetchImageForWeb = async function(url, options) {\n const { isHeader = false, Signature, Policy, KeyPairId } = options\n\n try {\n const firstParamConnector = new URL(url).searchParams.size > 0 ? '&' : '?'\n const urlToEncode = `${url}${firstParamConnector}Signature=${Signature}&Policy=${Policy}&Key-Pair-Id=${KeyPairId}`\n\n const encodedUrl = encodeURI(urlToEncode)\n\n console.info('Fetching image via CloudFront For Web')\n\n const imageResponse = await fetch(encodedUrl)\n\n const contentLengthHeader = imageResponse.headers.get('content-length')\n const contentType = imageResponse.headers.get('content-type')\n\n if (contentLengthHeader === '0') {\n return Promise.reject(\n new Error(`Failed to fetch image as no content length: ${encodedUrl}`)\n )\n }\n\n if (!imageResponse.ok) {\n return Promise.reject(new Error(`Failed to fetch image: ${encodedUrl}`))\n }\n\n const imageType = contentTypes[contentType]\n\n const logoArrayBuffer = await imageResponse.arrayBuffer()\n\n const base64Flag = `data:image/${imageType};base64,`\n const imageStr = arrayBufferToBase64(logoArrayBuffer)\n\n const base64 = `${base64Flag}${imageStr}`\n const isValid = validateBase64Image(base64)\n\n if (isValid) {\n return base64\n }\n } catch (error) {\n if (isHeader) {\n // NOTE: Replace failed headers with LH logo\n console.error('FetchImageHeaderError', error)\n return fetchLighthouseLogo()\n }\n\n console.error(error)\n return imageNotFound\n }\n\n return Promise.reject(new Error('InvalidImageError'))\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["imageNotFound","fetchLighthouseLogo","arrayBufferToBase64","validateBase64Image","fetchPonyfill","contentTypes","fetch","self","_typeof","Promise","fetchImageForWeb","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","options","_options$isHeader","isHeader","Signature","Policy","KeyPairId","firstParamConnector","urlToEncode","encodedUrl","imageResponse","contentLengthHeader","contentType","imageType","logoArrayBuffer","base64Flag","imageStr","base64","isValid","wrap","_callee$","_context","prev","next","indexOf","concat","encodeURI","console","info","sent","headers","get","abrupt","reject","Error","ok","arrayBuffer","t0","error","stop","_x","_x2","apply","arguments"],"sources":["../../../src/helpers/fetch-image-for-web/index.js"],"sourcesContent":["import { imageNotFound } from '../../images'\nimport { fetchLighthouseLogo } from '../fetch-lighthouse-logo'\nimport { arrayBufferToBase64 } from '../array-buffer-to-base-64'\nimport { validateBase64Image } from '../image-validators'\nimport fetchPonyfill from 'fetch-ponyfill'\nconst contentTypes = {\n 'image/png': 'png',\n 'image/jpeg': 'jpeg',\n}\n\n// NOTE use the native fetch if it's available in the browser, because the\n// ponyfill (which actually uses the github polyfill) does not support all the\n// same options as native fetch\nconst fetch =\n (typeof self === 'object' && self.fetch) || fetchPonyfill({ Promise }).fetch\n\nexport const fetchImageForWeb = async function(url, options) {\n const { isHeader = false, Signature, Policy, KeyPairId } = options\n\n try {\n const firstParamConnector = url.indexOf('?') > -1 ? '&' : '?'\n const urlToEncode = `${url}${firstParamConnector}Signature=${Signature}&Policy=${Policy}&Key-Pair-Id=${KeyPairId}`\n\n const encodedUrl = encodeURI(urlToEncode)\n\n console.info('Fetching image via CloudFront For Web')\n\n const imageResponse = await fetch(encodedUrl)\n\n const contentLengthHeader = imageResponse.headers.get('content-length')\n const contentType = imageResponse.headers.get('content-type')\n\n if (contentLengthHeader === '0') {\n return Promise.reject(\n new Error(`Failed to fetch image as no content length: ${encodedUrl}`)\n )\n }\n\n if (!imageResponse.ok) {\n return Promise.reject(new Error(`Failed to fetch image: ${encodedUrl}`))\n }\n\n const imageType = contentTypes[contentType]\n\n const logoArrayBuffer = await imageResponse.arrayBuffer()\n\n const base64Flag = `data:image/${imageType};base64,`\n const imageStr = arrayBufferToBase64(logoArrayBuffer)\n\n const base64 = `${base64Flag}${imageStr}`\n const isValid = validateBase64Image(base64)\n\n if (isValid) {\n return base64\n }\n } catch (error) {\n if (isHeader) {\n // NOTE: Replace failed headers with LH logo\n console.error('FetchImageHeaderError', error)\n return fetchLighthouseLogo()\n }\n\n console.error(error)\n return imageNotFound\n }\n\n return Promise.reject(new Error('InvalidImageError'))\n}\n"],"mappings":"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","ignoreList":[]}
@@ -22,7 +22,7 @@ function validatePngImage(base64string) {
22
22
  var src = base64string;
23
23
  var base64Data = src.replace('data:image/png;base64,', '');
24
24
  var imageData = new Uint8Array(Buffer.from(base64Data, 'base64'));
25
- var sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]; // in hex:
25
+ var sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130];
26
26
 
27
27
  //check last 12 elements of array so they contains needed values
28
28
  for (var i = 12; i > 0; i--) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["validateBase64Image","base64String","isJpeg","startsWith","validateJpegImage","isPng","validatePngImage","base64string","src","base64Data","replace","imageData","Uint8Array","Buffer","from","imageCorrupted","length","sequence","i"],"sources":["../../../src/helpers/image-validators/index.js"],"sourcesContent":["export function validateBase64Image(base64String) {\n const isJpeg = base64String.startsWith('data:image/jpeg;base64,')\n\n if (isJpeg) return validateJpegImage(base64String)\n\n const isPng = base64String.startsWith('data:image/png;base64,')\n\n if (isPng) return validatePngImage(base64String)\n\n return false\n}\n\n// See SO for more info: https://stackoverflow.com/a/41635312\n// Fiddle: https://jsfiddle.net/Lnyxuchw/\nfunction validateJpegImage(base64string) {\n const src = base64string\n const base64Data = src.replace('data:image/jpeg;base64,', '')\n const imageData = new Uint8Array(Buffer.from(base64Data, 'base64'))\n const imageCorrupted =\n imageData[imageData.length - 1] === 217 &&\n imageData[imageData.length - 2] === 255\n\n return imageCorrupted\n}\n\n// See SO for more info: https://stackoverflow.com/a/41635312\n// Fiddle: https://jsfiddle.net/Lnyxuchw/\nfunction validatePngImage(base64string) {\n const src = base64string\n const base64Data = src.replace('data:image/png;base64,', '')\n const imageData = new Uint8Array(Buffer.from(base64Data, 'base64'))\n const sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130] // in hex:\n\n //check last 12 elements of array so they contains needed values\n for (let i = 12; i > 0; i--) {\n if (imageData[imageData.length - i] !== sequence[12 - i]) {\n return false\n }\n }\n\n return true\n}\n"],"mappings":"AAAA,OAAO,SAASA,mBAAmBA,CAACC,YAAY,EAAE;EAChD,IAAMC,MAAM,GAAGD,YAAY,CAACE,UAAU,CAAC,yBAAyB,CAAC;EAEjE,IAAID,MAAM,EAAE,OAAOE,iBAAiB,CAACH,YAAY,CAAC;EAElD,IAAMI,KAAK,GAAGJ,YAAY,CAACE,UAAU,CAAC,wBAAwB,CAAC;EAE/D,IAAIE,KAAK,EAAE,OAAOC,gBAAgB,CAACL,YAAY,CAAC;EAEhD,OAAO,KAAK;AACd;;AAEA;AACA;AACA,SAASG,iBAAiBA,CAACG,YAAY,EAAE;EACvC,IAAMC,GAAG,GAAGD,YAAY;EACxB,IAAME,UAAU,GAAGD,GAAG,CAACE,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC;EAC7D,IAAMC,SAAS,GAAG,IAAIC,UAAU,CAACC,MAAM,CAACC,IAAI,CAACL,UAAU,EAAE,QAAQ,CAAC,CAAC;EACnE,IAAMM,cAAc,GAClBJ,SAAS,CAACA,SAAS,CAACK,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,IACvCL,SAAS,CAACA,SAAS,CAACK,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;EAEzC,OAAOD,cAAc;AACvB;;AAEA;AACA;AACA,SAAST,gBAAgBA,CAACC,YAAY,EAAE;EACtC,IAAMC,GAAG,GAAGD,YAAY;EACxB,IAAME,UAAU,GAAGD,GAAG,CAACE,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;EAC5D,IAAMC,SAAS,GAAG,IAAIC,UAAU,CAACC,MAAM,CAACC,IAAI,CAACL,UAAU,EAAE,QAAQ,CAAC,CAAC;EACnE,IAAMQ,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAC;;EAEhE;EACA,KAAK,IAAIC,CAAC,GAAG,EAAE,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;IAC3B,IAAIP,SAAS,CAACA,SAAS,CAACK,MAAM,GAAGE,CAAC,CAAC,KAAKD,QAAQ,CAAC,EAAE,GAAGC,CAAC,CAAC,EAAE;MACxD,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["validateBase64Image","base64String","isJpeg","startsWith","validateJpegImage","isPng","validatePngImage","base64string","src","base64Data","replace","imageData","Uint8Array","Buffer","from","imageCorrupted","length","sequence","i"],"sources":["../../../src/helpers/image-validators/index.js"],"sourcesContent":["export function validateBase64Image(base64String) {\n const isJpeg = base64String.startsWith('data:image/jpeg;base64,')\n\n if (isJpeg) return validateJpegImage(base64String)\n\n const isPng = base64String.startsWith('data:image/png;base64,')\n\n if (isPng) return validatePngImage(base64String)\n\n return false\n}\n\n// See SO for more info: https://stackoverflow.com/a/41635312\n// Fiddle: https://jsfiddle.net/Lnyxuchw/\nfunction validateJpegImage(base64string) {\n const src = base64string\n const base64Data = src.replace('data:image/jpeg;base64,', '')\n const imageData = new Uint8Array(Buffer.from(base64Data, 'base64'))\n const imageCorrupted =\n imageData[imageData.length - 1] === 217 &&\n imageData[imageData.length - 2] === 255\n\n return imageCorrupted\n}\n\n// See SO for more info: https://stackoverflow.com/a/41635312\n// Fiddle: https://jsfiddle.net/Lnyxuchw/\nfunction validatePngImage(base64string) {\n const src = base64string\n const base64Data = src.replace('data:image/png;base64,', '')\n const imageData = new Uint8Array(Buffer.from(base64Data, 'base64'))\n const sequence = [0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130]\n\n //check last 12 elements of array so they contains needed values\n for (let i = 12; i > 0; i--) {\n if (imageData[imageData.length - i] !== sequence[12 - i]) {\n return false\n }\n }\n\n return true\n}\n"],"mappings":"AAAA,OAAO,SAASA,mBAAmBA,CAACC,YAAY,EAAE;EAChD,IAAMC,MAAM,GAAGD,YAAY,CAACE,UAAU,CAAC,yBAAyB,CAAC;EAEjE,IAAID,MAAM,EAAE,OAAOE,iBAAiB,CAACH,YAAY,CAAC;EAElD,IAAMI,KAAK,GAAGJ,YAAY,CAACE,UAAU,CAAC,wBAAwB,CAAC;EAE/D,IAAIE,KAAK,EAAE,OAAOC,gBAAgB,CAACL,YAAY,CAAC;EAEhD,OAAO,KAAK;AACd;;AAEA;AACA;AACA,SAASG,iBAAiBA,CAACG,YAAY,EAAE;EACvC,IAAMC,GAAG,GAAGD,YAAY;EACxB,IAAME,UAAU,GAAGD,GAAG,CAACE,OAAO,CAAC,yBAAyB,EAAE,EAAE,CAAC;EAC7D,IAAMC,SAAS,GAAG,IAAIC,UAAU,CAACC,MAAM,CAACC,IAAI,CAACL,UAAU,EAAE,QAAQ,CAAC,CAAC;EACnE,IAAMM,cAAc,GAClBJ,SAAS,CAACA,SAAS,CAACK,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,IACvCL,SAAS,CAACA,SAAS,CAACK,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG;EAEzC,OAAOD,cAAc;AACvB;;AAEA;AACA;AACA,SAAST,gBAAgBA,CAACC,YAAY,EAAE;EACtC,IAAMC,GAAG,GAAGD,YAAY;EACxB,IAAME,UAAU,GAAGD,GAAG,CAACE,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;EAC5D,IAAMC,SAAS,GAAG,IAAIC,UAAU,CAACC,MAAM,CAACC,IAAI,CAACL,UAAU,EAAE,QAAQ,CAAC,CAAC;EACnE,IAAMQ,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;;EAE/D;EACA,KAAK,IAAIC,CAAC,GAAG,EAAE,EAAEA,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;IAC3B,IAAIP,SAAS,CAACA,SAAS,CAACK,MAAM,GAAGE,CAAC,CAAC,KAAKD,QAAQ,CAAC,EAAE,GAAGC,CAAC,CAAC,EAAE;MACxD,OAAO,KAAK;IACd;EACF;EAEA,OAAO,IAAI;AACb","ignoreList":[]}
@@ -11,11 +11,8 @@ export var buildAuditContent = Promise.method(function (items) {
11
11
  return Promise.map(item.assets, function (_ref) {
12
12
  var assetUrl = _ref.assetUrl,
13
13
  link = _ref.link;
14
- return fetchImage(assetUrl, {
15
- Signature: settings.Signature,
16
- Policy: settings.Policy,
17
- KeyPairId: settings.KeyPairId
18
- }).then(function (base64String) {
14
+ // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context
15
+ return fetchImage(assetUrl, settings).then(function (base64String) {
19
16
  return {
20
17
  alignment: 'center',
21
18
  fit: [210, 210],
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["flatten","isEmpty","round","Promise","fetchImage","fourColumnTable","horizontalLine","imageTables","table","text","LIGHT_BLUE","WHITE","buildAuditContent","method","items","settings","arguments","length","undefined","map","group","item","index","assets","_ref","assetUrl","link","Signature","Policy","KeyPairId","then","base64String","alignment","fit","image","rowImages","rows","fillColor","hasImages","hasComments","comments","label","id","questionId","push","scoreLabel","weight","scoreWeight","imageRow","colSpan","stack","commentsRow","margin","style","groupTableRows","actual","groupActualScore","max","groupMaximumScore","resultText","concat","groupPercentageResultScore","skipped","groupScoreText","bold","headerText","title","groupHeaderTable","body","layout","widths","groupTableHeader","groupTable","headerRows","_toConsumableArray","hLine"],"sources":["../../../../src/pdf/helpers/build-audit-content/index.js"],"sourcesContent":["import { flatten, isEmpty, round } from 'lodash'\nimport Promise from 'bluebird'\n\nimport { fetchImage } from '../../../helpers'\nimport { fourColumnTable, horizontalLine, imageTables, table, text } from '../'\nimport { LIGHT_BLUE, WHITE } from '../table'\n\nexport const buildAuditContent = Promise.method((items, settings = {}) => {\n return Promise.map(items, group => {\n return Promise.map(group.items, (item, index) => {\n return Promise.map(item.assets, ({ assetUrl, link }) => {\n return fetchImage(assetUrl, {\n Signature: settings.Signature,\n Policy: settings.Policy,\n KeyPairId: settings.KeyPairId,\n }).then(base64String => ({\n alignment: 'center',\n fit: [210, 210],\n image: base64String,\n link,\n }))\n }).then(rowImages => {\n const rows = []\n\n const fillColor = index % 2 === 0 ? WHITE : LIGHT_BLUE\n const hasImages = !isEmpty(rowImages)\n const hasComments = !isEmpty(item.comments)\n\n // Some audits use questionId to link a follow-up issue and its question\n const label = { text: item.label, fillColor, id: item.questionId }\n\n rows.push([\n label,\n { text: item.scoreLabel, fillColor },\n { alignment: 'center', text: item.weight, fillColor },\n { alignment: 'right', text: item.scoreWeight, fillColor },\n ])\n\n if (hasImages) {\n const imageRow = [\n {\n colSpan: 4,\n fillColor,\n stack: imageTables(rowImages),\n },\n ]\n\n rows.push(imageRow)\n }\n\n if (hasComments) {\n const commentsRow = [\n {\n colSpan: 4,\n fillColor,\n margin: [0, -10, 0, 0],\n stack: [\n { text: 'Comments:', style: 'commentsHeader' },\n { text: item.comments },\n ],\n },\n ]\n\n rows.push(commentsRow)\n }\n\n return rows\n })\n }).then(groupTableRows => {\n const actual = round(group.groupActualScore, 2)\n const max = round(group.groupMaximumScore, 2)\n const resultText = `${group.groupPercentageResultScore}%`\n\n const { skipped } = group\n\n const groupScoreText = skipped\n ? null\n : text(`${actual} / ${max} (${resultText})`, {\n alignment: 'right',\n bold: true,\n })\n const headerText = text(group.title)\n\n const groupHeaderTable = table({\n body: [[headerText, groupScoreText]],\n layout: 'noBorders',\n style: 'groupHeaderTable',\n widths: ['*', '*'],\n })\n\n const groupTableHeader = [\n text('Question', { bold: true }),\n text('Answer', { bold: true }),\n text('Weight', { alignment: 'center', bold: true }),\n text('Score', { alignment: 'right', bold: true }),\n ]\n\n const groupTable = fourColumnTable({\n headerRows: 0,\n // NOTE: must flatten here as we have arrays of rows\n body: [groupTableHeader, ...flatten(groupTableRows)],\n widths: ['60%', '24%', '8%', '8%'],\n })\n\n const hLine = horizontalLine()\n\n return [groupHeaderTable, hLine, groupTable]\n })\n })\n})\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["flatten","isEmpty","round","Promise","fetchImage","fourColumnTable","horizontalLine","imageTables","table","text","LIGHT_BLUE","WHITE","buildAuditContent","method","items","settings","arguments","length","undefined","map","group","item","index","assets","_ref","assetUrl","link","then","base64String","alignment","fit","image","rowImages","rows","fillColor","hasImages","hasComments","comments","label","id","questionId","push","scoreLabel","weight","scoreWeight","imageRow","colSpan","stack","commentsRow","margin","style","groupTableRows","actual","groupActualScore","max","groupMaximumScore","resultText","concat","groupPercentageResultScore","skipped","groupScoreText","bold","headerText","title","groupHeaderTable","body","layout","widths","groupTableHeader","groupTable","headerRows","_toConsumableArray","hLine"],"sources":["../../../../src/pdf/helpers/build-audit-content/index.js"],"sourcesContent":["import { flatten, isEmpty, round } from 'lodash'\nimport Promise from 'bluebird'\n\nimport { fetchImage } from '../../../helpers'\nimport { fourColumnTable, horizontalLine, imageTables, table, text } from '../'\nimport { LIGHT_BLUE, WHITE } from '../table'\n\nexport const buildAuditContent = Promise.method((items, settings = {}) => {\n return Promise.map(items, group => {\n return Promise.map(group.items, (item, index) => {\n return Promise.map(item.assets, ({ assetUrl, link }) => {\n // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context\n return fetchImage(assetUrl, settings).then(base64String => ({\n alignment: 'center',\n fit: [210, 210],\n image: base64String,\n link,\n }))\n }).then(rowImages => {\n const rows = []\n\n const fillColor = index % 2 === 0 ? WHITE : LIGHT_BLUE\n const hasImages = !isEmpty(rowImages)\n const hasComments = !isEmpty(item.comments)\n\n // Some audits use questionId to link a follow-up issue and its question\n const label = { text: item.label, fillColor, id: item.questionId }\n\n rows.push([\n label,\n { text: item.scoreLabel, fillColor },\n { alignment: 'center', text: item.weight, fillColor },\n { alignment: 'right', text: item.scoreWeight, fillColor },\n ])\n\n if (hasImages) {\n const imageRow = [\n {\n colSpan: 4,\n fillColor,\n stack: imageTables(rowImages),\n },\n ]\n\n rows.push(imageRow)\n }\n\n if (hasComments) {\n const commentsRow = [\n {\n colSpan: 4,\n fillColor,\n margin: [0, -10, 0, 0],\n stack: [\n { text: 'Comments:', style: 'commentsHeader' },\n { text: item.comments },\n ],\n },\n ]\n\n rows.push(commentsRow)\n }\n\n return rows\n })\n }).then(groupTableRows => {\n const actual = round(group.groupActualScore, 2)\n const max = round(group.groupMaximumScore, 2)\n const resultText = `${group.groupPercentageResultScore}%`\n\n const { skipped } = group\n\n const groupScoreText = skipped\n ? null\n : text(`${actual} / ${max} (${resultText})`, {\n alignment: 'right',\n bold: true,\n })\n const headerText = text(group.title)\n\n const groupHeaderTable = table({\n body: [[headerText, groupScoreText]],\n layout: 'noBorders',\n style: 'groupHeaderTable',\n widths: ['*', '*'],\n })\n\n const groupTableHeader = [\n text('Question', { bold: true }),\n text('Answer', { bold: true }),\n text('Weight', { alignment: 'center', bold: true }),\n text('Score', { alignment: 'right', bold: true }),\n ]\n\n const groupTable = fourColumnTable({\n headerRows: 0,\n // NOTE: must flatten here as we have arrays of rows\n body: [groupTableHeader, ...flatten(groupTableRows)],\n widths: ['60%', '24%', '8%', '8%'],\n })\n\n const hLine = horizontalLine()\n\n return [groupHeaderTable, hLine, groupTable]\n })\n })\n})\n"],"mappings":"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","ignoreList":[]}
@@ -30,10 +30,7 @@ function buildImage(options) {
30
30
  var _ref2 = settings || {},
31
31
  awsS3BaseUrl = _ref2.awsS3BaseUrl,
32
32
  cloudinaryBaseUrl = _ref2.cloudinaryBaseUrl,
33
- cloudfrontBaseUrl = _ref2.cloudfrontBaseUrl,
34
- Signature = _ref2.Signature,
35
- Policy = _ref2.Policy,
36
- KeyPairId = _ref2.KeyPairId;
33
+ cloudfrontBaseUrl = _ref2.cloudfrontBaseUrl;
37
34
  var isVideoType = new RegExp('.mp4$').test(filepath);
38
35
  var link = "".concat(awsS3BaseUrl, "/").concat(filepath);
39
36
  if (isVideoType) {
@@ -53,11 +50,9 @@ function buildImage(options) {
53
50
  width: 600,
54
51
  quality: 50
55
52
  });
56
- return fetchImage(url, {
57
- Signature: Signature,
58
- Policy: Policy,
59
- KeyPairId: KeyPairId
60
- }).then(function (base64String) {
53
+
54
+ // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context
55
+ return fetchImage(url, settings).then(function (base64String) {
61
56
  return {
62
57
  alignment: alignment,
63
58
  fit: [width, height],
@@ -105,7 +100,8 @@ export function buildSummaryField(_ref3) {
105
100
  width: 140
106
101
  };
107
102
  }
108
- return fetchImage(value).then(function (base64String) {
103
+ // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context
104
+ return fetchImage(value, settings).then(function (base64String) {
109
105
  return {
110
106
  alignment: 'left',
111
107
  image: base64String,
@@ -229,11 +225,9 @@ export function buildTemplateFieldRow(_ref4) {
229
225
  }
230
226
  if (isSignatureField) {
231
227
  if (!value) return [labelText, ''];
232
- return fetchImage(value, {
233
- Signature: settings.Signature,
234
- Policy: settings.Policy,
235
- KeyPairId: settings.KeyPairId
236
- }).then(function (base64String) {
228
+
229
+ // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context
230
+ return fetchImage(value, settings).then(function (base64String) {
237
231
  var values = {
238
232
  alignment: 'left',
239
233
  image: base64String,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["isArray","isEmpty","join","first","map","startsWith","Promise","moment","buildFetchUrl","fetchImage","videoIcon","imageTables","parseValue","text","toPdf","buildFile","_ref","file","settings","extension","name","path","awsS3BaseUrl","link","concat","margin","buildImage","options","_options$alignment","alignment","filepath","_options$height","height","_options$width","width","_ref2","cloudinaryBaseUrl","cloudfrontBaseUrl","Signature","Policy","KeyPairId","isVideoType","RegExp","test","fit","image","url","quality","then","base64String","buildSummaryField","_ref3","field","timezone","fieldtype","_field$options","value","isDayFirstDateField","format","isMonthFirstDateField","isFileField","isHtmlField","type","isNumberField","isPhotoField","isReferenceField","isSelectField","isSignatureField","isStarField","isSwitchField","isTextField","is12HourTimeField","is24HourTimeField","isDataImage","fileList","ol","parsedValue","displayValue","fontSize","filter","val","label","tz","buildTemplateFieldRow","_ref4","skipped","_field$options2","_options$showOnRead","showOnRead","isDisplayImageField","labelText","parsed","replace","values","fieldImages","tables","imagesRow","colSpan","layout","hLineWidth","paddingLeft","paddingRight","paddingTop","paddingBottom","vLineWidth","table","body","_toConsumableArray","widths","string"],"sources":["../../../../src/pdf/helpers/fields/index.js"],"sourcesContent":["import { isArray, isEmpty, join, first, map, startsWith } from 'lodash'\nimport Promise from 'bluebird'\nimport moment from 'moment-timezone'\n\nimport { buildFetchUrl, fetchImage } from '../../../helpers'\nimport { videoIcon } from '../../../images'\nimport { imageTables, parseValue, text, toPdf } from '../'\n\nexport function buildFile({ file, settings }) {\n const { extension, name, path } = file\n const { awsS3BaseUrl } = settings\n\n const link = `${awsS3BaseUrl}/${path}`\n return text(`${name}.${extension}`, { link, margin: [0, 0, 0, 10] })\n}\n\nfunction buildImage(options) {\n const {\n alignment = 'center',\n filepath,\n height = 210,\n settings,\n width = 210,\n } = options\n const {\n awsS3BaseUrl,\n cloudinaryBaseUrl,\n cloudfrontBaseUrl,\n Signature,\n Policy,\n KeyPairId,\n } = settings || {}\n\n const isVideoType = new RegExp('.mp4$').test(filepath)\n const link = `${awsS3BaseUrl}/${filepath}`\n\n if (isVideoType) {\n return {\n alignment,\n fit: [width, height],\n image: videoIcon,\n link,\n }\n }\n\n const url = buildFetchUrl(filepath, {\n awsS3BaseUrl,\n cloudfrontBaseUrl,\n cloudinaryBaseUrl,\n fit: true,\n height: 400,\n width: 600,\n quality: 50,\n })\n\n return fetchImage(url, {\n Signature,\n Policy,\n KeyPairId,\n }).then(base64String => ({\n alignment,\n fit: [width, height],\n image: base64String,\n link,\n }))\n}\n\nexport function buildSummaryField({ field, settings, timezone }) {\n const { fieldtype, options = {}, value } = field\n\n const isDayFirstDateField =\n fieldtype === 'date' && options.format === 'DD/MM/YY'\n const isMonthFirstDateField =\n fieldtype === 'date' && options.format === 'MM/DD/YY'\n const isFileField = fieldtype === 'file'\n const isHtmlField = fieldtype === 'text' && options.type === 'html'\n const isNumberField = fieldtype === 'number'\n const isPhotoField = fieldtype === 'list' && options.type === 'media'\n const isReferenceField = fieldtype === 'reference'\n const isSelectField = fieldtype === 'select' && options.type !== 'stars'\n const isSignatureField = fieldtype === 'text' && options.type === 'signature'\n const isStarField = fieldtype === 'select' && options.type === 'stars'\n const isSwitchField = fieldtype === 'switch'\n const isTextField = fieldtype === 'text'\n const is12HourTimeField = fieldtype === 'time' && options.format === 'h:mm a'\n const is24HourTimeField = fieldtype === 'time' && options.format === 'HH:mm'\n\n // NOTE: html field is not supported for the summary fields but adding\n // logic to catch this and return empty text for completeness\n if (isHtmlField) {\n return { text: '' }\n }\n\n if (isSignatureField) {\n if (!value) return ''\n\n if (isDataImage(value)) {\n return { alignment: 'left', image: value, width: 140 }\n }\n\n return fetchImage(value).then(base64String => {\n return {\n alignment: 'left',\n image: base64String,\n width: 140,\n }\n })\n }\n\n if (isPhotoField) {\n const filepath = first(value)\n\n // NOTE: if no filepath return empty text as user has not uploaded an image\n // for this field\n if (!filepath) {\n return { text: '' }\n }\n\n const image = buildImage({\n alignment: 'left',\n filepath,\n height: 140,\n width: 140,\n settings,\n })\n\n return image\n }\n\n if (isFileField) {\n const fileList = map(value, file => buildFile({ file, settings }))\n return { ol: fileList }\n }\n\n if (isNumberField || isSelectField || isSwitchField || isTextField) {\n const parsedValue = parseValue(value)\n const displayValue = isArray(parsedValue)\n ? { text: join(parsedValue, ', '), fontSize: 7 }\n : { text: parsedValue, fontSize: 7 }\n\n return displayValue\n }\n\n if (isReferenceField) {\n const parsedValue = parseValue(value)\n const displayValue = isArray(parsedValue)\n ? {\n text: parsedValue\n .filter(val => val && val.label)\n .map(val => val.label)\n .join(', '),\n fontSize: 7,\n }\n : { text: parsedValue.label, fontSize: 7 }\n\n return displayValue\n }\n\n if (isStarField) {\n if (!value) return ''\n const displayValue = value === '1' ? `${value} star` : `${value} stars`\n return displayValue\n }\n\n if (\n isDayFirstDateField ||\n isMonthFirstDateField ||\n is12HourTimeField ||\n is24HourTimeField\n ) {\n const format = options.format\n const displayValue = moment(value)\n .tz(timezone)\n .format(format)\n\n return displayValue\n }\n\n // NOTE: return empty text fallback value when no match\n return { text: '' }\n}\n\nexport function buildTemplateFieldRow({ field, settings, timezone, skipped }) {\n const { fieldtype, label, options = {}, value } = field\n const { showOnRead = true } = options\n\n const isDayFirstDateField =\n fieldtype === 'date' && options.format === 'DD/MM/YY'\n const isMonthFirstDateField =\n fieldtype === 'date' && options.format === 'MM/DD/YY'\n const isFileField = fieldtype === 'file'\n const isHtmlField = fieldtype === 'text' && options.type === 'html'\n const isNumberField = fieldtype === 'number'\n const isPhotoField = fieldtype === 'list' && options.type === 'media'\n const isSelectField = fieldtype === 'select' && options.type !== 'stars'\n const isSignatureField = fieldtype === 'text' && options.type === 'signature'\n const isStarField = fieldtype === 'select' && options.type === 'stars'\n const isSwitchField = fieldtype === 'switch'\n const isTextField = fieldtype === 'text'\n const is12HourTimeField = fieldtype === 'time' && options.format === 'h:mm a'\n const is24HourTimeField = fieldtype === 'time' && options.format === 'HH:mm'\n const isDisplayImageField = fieldtype === 'image-display' && showOnRead\n const isReferenceField = fieldtype === 'reference'\n\n // NOTE: only show field when show on read is true\n if (!showOnRead) return null\n\n const labelText = [{ text: label }]\n\n if (skipped) {\n return [labelText, [{ text: '-' }]]\n }\n\n if (isHtmlField) {\n const parsed = value.replace(/<p><\\/p>/g, '')\n return [labelText, toPdf(parsed)]\n }\n\n if (isSignatureField) {\n if (!value) return [labelText, '']\n\n return fetchImage(value, {\n Signature: settings.Signature,\n Policy: settings.Policy,\n KeyPairId: settings.KeyPairId,\n }).then(base64String => {\n const values = {\n alignment: 'left',\n image: base64String,\n width: 140,\n }\n return [labelText, values]\n })\n }\n\n if (isDisplayImageField) {\n return Promise.map([value], filepath =>\n buildImage({ filepath, settings })\n ).then(fieldImages => [fieldImages, {}])\n }\n\n if (isPhotoField) {\n return Promise.map(value, filepath =>\n buildImage({ filepath, settings })\n ).then(fieldImages => {\n const tables = !isEmpty(fieldImages) ? imageTables(fieldImages) : []\n\n const imagesRow = {\n colSpan: 2,\n layout: {\n hLineWidth: () => 0,\n paddingLeft: () => 0,\n paddingRight: () => 0,\n paddingTop: () => 0,\n paddingBottom: () => 0,\n vLineWidth: () => 0,\n },\n table: {\n body: [labelText, ...tables],\n widths: ['*'],\n },\n }\n\n // NOTE: pass empty value here as otherwise\n // we can accidentally hide content below\n // this row. Please see the following issue:\n // https://github.com/bpampuch/pdfmake/issues/1598\n return [imagesRow, {}]\n })\n }\n\n if (isFileField) {\n const fileList = map(value, file => buildFile({ file, settings }))\n return [labelText, { ol: fileList }]\n }\n\n if (isNumberField || isSelectField || isSwitchField || isTextField) {\n const parsedValue = parseValue(value)\n const displayValue = isArray(parsedValue)\n ? { text: join(parsedValue, ', ') }\n : { text: parsedValue }\n\n return [labelText, displayValue]\n }\n\n if (isReferenceField) {\n const parsedValue = parseValue(value)\n const displayValue = isArray(parsedValue)\n ? {\n text: parsedValue\n .filter(val => val && val.label)\n .map(val => val.label)\n .join(', '),\n fontSize: 7,\n }\n : { text: parsedValue.label, fontSize: 7 }\n\n return [labelText, displayValue]\n }\n\n if (isStarField) {\n if (!value) return [labelText, '']\n const displayValue = value === '1' ? `${value} star` : `${value} stars`\n return [labelText, displayValue]\n }\n\n if (\n isDayFirstDateField ||\n isMonthFirstDateField ||\n is12HourTimeField ||\n is24HourTimeField\n ) {\n const format = options.format\n const displayValue = value\n ? moment(value)\n .tz(timezone)\n .format(format)\n : ''\n\n return [labelText, displayValue]\n }\n\n // NOTE: if no match above null values will be stripped within calling fn\n return null\n}\n\nfunction isDataImage(string) {\n return startsWith(string, 'data:image/png;')\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["isArray","isEmpty","join","first","map","startsWith","Promise","moment","buildFetchUrl","fetchImage","videoIcon","imageTables","parseValue","text","toPdf","buildFile","_ref","file","settings","extension","name","path","awsS3BaseUrl","link","concat","margin","buildImage","options","_options$alignment","alignment","filepath","_options$height","height","_options$width","width","_ref2","cloudinaryBaseUrl","cloudfrontBaseUrl","isVideoType","RegExp","test","fit","image","url","quality","then","base64String","buildSummaryField","_ref3","field","timezone","fieldtype","_field$options","value","isDayFirstDateField","format","isMonthFirstDateField","isFileField","isHtmlField","type","isNumberField","isPhotoField","isReferenceField","isSelectField","isSignatureField","isStarField","isSwitchField","isTextField","is12HourTimeField","is24HourTimeField","isDataImage","fileList","ol","parsedValue","displayValue","fontSize","filter","val","label","tz","buildTemplateFieldRow","_ref4","skipped","_field$options2","_options$showOnRead","showOnRead","isDisplayImageField","labelText","parsed","replace","values","fieldImages","tables","imagesRow","colSpan","layout","hLineWidth","paddingLeft","paddingRight","paddingTop","paddingBottom","vLineWidth","table","body","_toConsumableArray","widths","string"],"sources":["../../../../src/pdf/helpers/fields/index.js"],"sourcesContent":["import { isArray, isEmpty, join, first, map, startsWith } from 'lodash'\nimport Promise from 'bluebird'\nimport moment from 'moment-timezone'\n\nimport { buildFetchUrl, fetchImage } from '../../../helpers'\nimport { videoIcon } from '../../../images'\nimport { imageTables, parseValue, text, toPdf } from '../'\n\nexport function buildFile({ file, settings }) {\n const { extension, name, path } = file\n const { awsS3BaseUrl } = settings\n\n const link = `${awsS3BaseUrl}/${path}`\n return text(`${name}.${extension}`, { link, margin: [0, 0, 0, 10] })\n}\n\nfunction buildImage(options) {\n const {\n alignment = 'center',\n filepath,\n height = 210,\n settings,\n width = 210,\n } = options\n const { awsS3BaseUrl, cloudinaryBaseUrl, cloudfrontBaseUrl } = settings || {}\n\n const isVideoType = new RegExp('.mp4$').test(filepath)\n const link = `${awsS3BaseUrl}/${filepath}`\n\n if (isVideoType) {\n return {\n alignment,\n fit: [width, height],\n image: videoIcon,\n link,\n }\n }\n\n const url = buildFetchUrl(filepath, {\n awsS3BaseUrl,\n cloudfrontBaseUrl,\n cloudinaryBaseUrl,\n fit: true,\n height: 400,\n width: 600,\n quality: 50,\n })\n\n // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context\n return fetchImage(url, settings).then(base64String => ({\n alignment,\n fit: [width, height],\n image: base64String,\n link,\n }))\n}\n\nexport function buildSummaryField({ field, settings, timezone }) {\n const { fieldtype, options = {}, value } = field\n\n const isDayFirstDateField =\n fieldtype === 'date' && options.format === 'DD/MM/YY'\n const isMonthFirstDateField =\n fieldtype === 'date' && options.format === 'MM/DD/YY'\n const isFileField = fieldtype === 'file'\n const isHtmlField = fieldtype === 'text' && options.type === 'html'\n const isNumberField = fieldtype === 'number'\n const isPhotoField = fieldtype === 'list' && options.type === 'media'\n const isReferenceField = fieldtype === 'reference'\n const isSelectField = fieldtype === 'select' && options.type !== 'stars'\n const isSignatureField = fieldtype === 'text' && options.type === 'signature'\n const isStarField = fieldtype === 'select' && options.type === 'stars'\n const isSwitchField = fieldtype === 'switch'\n const isTextField = fieldtype === 'text'\n const is12HourTimeField = fieldtype === 'time' && options.format === 'h:mm a'\n const is24HourTimeField = fieldtype === 'time' && options.format === 'HH:mm'\n\n // NOTE: html field is not supported for the summary fields but adding\n // logic to catch this and return empty text for completeness\n if (isHtmlField) {\n return { text: '' }\n }\n\n if (isSignatureField) {\n if (!value) return ''\n\n if (isDataImage(value)) {\n return { alignment: 'left', image: value, width: 140 }\n }\n // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context\n return fetchImage(value, settings).then(base64String => {\n return {\n alignment: 'left',\n image: base64String,\n width: 140,\n }\n })\n }\n\n if (isPhotoField) {\n const filepath = first(value)\n\n // NOTE: if no filepath return empty text as user has not uploaded an image\n // for this field\n if (!filepath) {\n return { text: '' }\n }\n\n const image = buildImage({\n alignment: 'left',\n filepath,\n height: 140,\n width: 140,\n settings,\n })\n\n return image\n }\n\n if (isFileField) {\n const fileList = map(value, file => buildFile({ file, settings }))\n return { ol: fileList }\n }\n\n if (isNumberField || isSelectField || isSwitchField || isTextField) {\n const parsedValue = parseValue(value)\n const displayValue = isArray(parsedValue)\n ? { text: join(parsedValue, ', '), fontSize: 7 }\n : { text: parsedValue, fontSize: 7 }\n\n return displayValue\n }\n\n if (isReferenceField) {\n const parsedValue = parseValue(value)\n const displayValue = isArray(parsedValue)\n ? {\n text: parsedValue\n .filter(val => val && val.label)\n .map(val => val.label)\n .join(', '),\n fontSize: 7,\n }\n : { text: parsedValue.label, fontSize: 7 }\n\n return displayValue\n }\n\n if (isStarField) {\n if (!value) return ''\n const displayValue = value === '1' ? `${value} star` : `${value} stars`\n return displayValue\n }\n\n if (\n isDayFirstDateField ||\n isMonthFirstDateField ||\n is12HourTimeField ||\n is24HourTimeField\n ) {\n const format = options.format\n const displayValue = moment(value)\n .tz(timezone)\n .format(format)\n\n return displayValue\n }\n\n // NOTE: return empty text fallback value when no match\n return { text: '' }\n}\n\nexport function buildTemplateFieldRow({ field, settings, timezone, skipped }) {\n const { fieldtype, label, options = {}, value } = field\n const { showOnRead = true } = options\n\n const isDayFirstDateField =\n fieldtype === 'date' && options.format === 'DD/MM/YY'\n const isMonthFirstDateField =\n fieldtype === 'date' && options.format === 'MM/DD/YY'\n const isFileField = fieldtype === 'file'\n const isHtmlField = fieldtype === 'text' && options.type === 'html'\n const isNumberField = fieldtype === 'number'\n const isPhotoField = fieldtype === 'list' && options.type === 'media'\n const isSelectField = fieldtype === 'select' && options.type !== 'stars'\n const isSignatureField = fieldtype === 'text' && options.type === 'signature'\n const isStarField = fieldtype === 'select' && options.type === 'stars'\n const isSwitchField = fieldtype === 'switch'\n const isTextField = fieldtype === 'text'\n const is12HourTimeField = fieldtype === 'time' && options.format === 'h:mm a'\n const is24HourTimeField = fieldtype === 'time' && options.format === 'HH:mm'\n const isDisplayImageField = fieldtype === 'image-display' && showOnRead\n const isReferenceField = fieldtype === 'reference'\n\n // NOTE: only show field when show on read is true\n if (!showOnRead) return null\n\n const labelText = [{ text: label }]\n\n if (skipped) {\n return [labelText, [{ text: '-' }]]\n }\n\n if (isHtmlField) {\n const parsed = value.replace(/<p><\\/p>/g, '')\n return [labelText, toPdf(parsed)]\n }\n\n if (isSignatureField) {\n if (!value) return [labelText, '']\n\n // NOTE: Signature, Policy and KeyPairId are the only used values from settings in this context\n return fetchImage(value, settings).then(base64String => {\n const values = {\n alignment: 'left',\n image: base64String,\n width: 140,\n }\n return [labelText, values]\n })\n }\n\n if (isDisplayImageField) {\n return Promise.map([value], filepath =>\n buildImage({ filepath, settings })\n ).then(fieldImages => [fieldImages, {}])\n }\n\n if (isPhotoField) {\n return Promise.map(value, filepath =>\n buildImage({ filepath, settings })\n ).then(fieldImages => {\n const tables = !isEmpty(fieldImages) ? imageTables(fieldImages) : []\n\n const imagesRow = {\n colSpan: 2,\n layout: {\n hLineWidth: () => 0,\n paddingLeft: () => 0,\n paddingRight: () => 0,\n paddingTop: () => 0,\n paddingBottom: () => 0,\n vLineWidth: () => 0,\n },\n table: {\n body: [labelText, ...tables],\n widths: ['*'],\n },\n }\n\n // NOTE: pass empty value here as otherwise\n // we can accidentally hide content below\n // this row. Please see the following issue:\n // https://github.com/bpampuch/pdfmake/issues/1598\n return [imagesRow, {}]\n })\n }\n\n if (isFileField) {\n const fileList = map(value, file => buildFile({ file, settings }))\n return [labelText, { ol: fileList }]\n }\n\n if (isNumberField || isSelectField || isSwitchField || isTextField) {\n const parsedValue = parseValue(value)\n const displayValue = isArray(parsedValue)\n ? { text: join(parsedValue, ', ') }\n : { text: parsedValue }\n\n return [labelText, displayValue]\n }\n\n if (isReferenceField) {\n const parsedValue = parseValue(value)\n const displayValue = isArray(parsedValue)\n ? {\n text: parsedValue\n .filter(val => val && val.label)\n .map(val => val.label)\n .join(', '),\n fontSize: 7,\n }\n : { text: parsedValue.label, fontSize: 7 }\n\n return [labelText, displayValue]\n }\n\n if (isStarField) {\n if (!value) return [labelText, '']\n const displayValue = value === '1' ? `${value} star` : `${value} stars`\n return [labelText, displayValue]\n }\n\n if (\n isDayFirstDateField ||\n isMonthFirstDateField ||\n is12HourTimeField ||\n is24HourTimeField\n ) {\n const format = options.format\n const displayValue = value\n ? moment(value)\n .tz(timezone)\n .format(format)\n : ''\n\n return [labelText, displayValue]\n }\n\n // NOTE: if no match above null values will be stripped within calling fn\n return null\n}\n\nfunction isDataImage(string) {\n return startsWith(string, 'data:image/png;')\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lighthouse/common",
3
- "version": "5.0.0-canary-9",
3
+ "version": "5.0.0-canary-11",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "lib/index.js",