@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.
- package/dist/helpers/fetch-image/index.js +10 -25
- package/dist/helpers/fetch-image-for-pdf-generator-service/index.js +8 -5
- package/dist/helpers/fetch-image-for-web/index.js +1 -1
- package/dist/helpers/image-validators/index.js +1 -1
- package/dist/pdf/helpers/build-audit-content/index.js +2 -5
- package/dist/pdf/helpers/fields/index.js +9 -15
- package/lib/helpers/fetch-image/index.js +9 -21
- package/lib/helpers/fetch-image/index.js.map +1 -1
- package/lib/helpers/fetch-image-for-pdf-generator-service/index.js +36 -59
- package/lib/helpers/fetch-image-for-pdf-generator-service/index.js.map +1 -1
- package/lib/helpers/fetch-image-for-web/index.js +1 -1
- package/lib/helpers/fetch-image-for-web/index.js.map +1 -1
- package/lib/helpers/image-validators/index.js +1 -1
- package/lib/helpers/image-validators/index.js.map +1 -1
- package/lib/pdf/helpers/build-audit-content/index.js +2 -5
- package/lib/pdf/helpers/build-audit-content/index.js.map +1 -1
- package/lib/pdf/helpers/fields/index.js +9 -15
- package/lib/pdf/helpers/fields/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -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
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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];
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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];
|
|
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
|
-
|
|
21
|
-
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
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
|
-
|
|
243
|
-
|
|
244
|
-
|
|
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
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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(
|
|
56
|
-
|
|
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];
|
|
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 =
|
|
43
|
+
_context.next = 14;
|
|
44
44
|
break;
|
|
45
45
|
}
|
|
46
|
-
|
|
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
|
|
51
|
+
case 14:
|
|
55
52
|
keyWithoutTransformations = "/".concat(keyWithTransformations.split('?')[0]);
|
|
56
|
-
_context.next =
|
|
53
|
+
_context.next = 17;
|
|
57
54
|
return requestImageTransformation(keyWithoutTransformations);
|
|
58
|
-
case
|
|
55
|
+
case 17:
|
|
59
56
|
transformerResponse = _context.sent;
|
|
60
57
|
statusCode = transformerResponse.statusCode;
|
|
61
58
|
_context.t0 = statusCode;
|
|
62
|
-
_context.next = _context.t0 === 200 ?
|
|
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
|
|
61
|
+
case 22:
|
|
65
62
|
console.log('Image transformation successful');
|
|
66
|
-
|
|
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
|
|
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 =
|
|
72
|
+
_context.next = 34;
|
|
79
73
|
break;
|
|
80
74
|
}
|
|
81
|
-
_context.next =
|
|
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
|
|
80
|
+
case 30:
|
|
87
81
|
newlyTransformedImage = _context.sent;
|
|
88
82
|
console.log('Image successfully fetched from S3 at:', redirectLocation);
|
|
89
|
-
|
|
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
|
|
88
|
+
case 34:
|
|
98
89
|
throw new Error('Redirect response received but no location provided');
|
|
99
|
-
case
|
|
90
|
+
case 35:
|
|
100
91
|
throw new Error("Bad request to image transformer: ".concat(transformerResponse.body));
|
|
101
|
-
case
|
|
92
|
+
case 36:
|
|
102
93
|
throw new Error('Requested transformed image is too big');
|
|
103
|
-
case
|
|
94
|
+
case 37:
|
|
104
95
|
throw new Error('The requested image does not exist');
|
|
105
|
-
case
|
|
96
|
+
case 38:
|
|
106
97
|
throw new Error("Image transformation failed: ".concat(transformerResponse.body));
|
|
107
|
-
case
|
|
98
|
+
case 39:
|
|
108
99
|
throw new Error("Unexpected response from image transformer: ".concat(statusCode, " - ").concat(transformerResponse.body));
|
|
109
|
-
case
|
|
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(
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
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 =
|
|
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","
|
|
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];
|
|
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]
|
|
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
|
-
|
|
15
|
-
|
|
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","
|
|
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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
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
|
-
|
|
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
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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":[]}
|