@lighthouse/common 6.2.0-canary.8 → 6.2.0
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/build-fetch-url/index.js +19 -9
- package/dist/helpers/fetch-image-for-pdf-generator-service/index.js +6 -39
- package/dist/helpers/fetch-image-for-web/index.js +4 -18
- package/dist/helpers/get-audit-items-data/index.js +15 -4
- package/dist/pdf/audit/index.js +1 -1
- package/lib/helpers/build-fetch-url/index.js +30 -9
- package/lib/helpers/build-fetch-url/index.js.map +1 -1
- package/lib/helpers/fetch-image-for-pdf-generator-service/index.js +7 -41
- package/lib/helpers/fetch-image-for-pdf-generator-service/index.js.map +1 -1
- package/lib/helpers/fetch-image-for-web/index.js +10 -29
- package/lib/helpers/fetch-image-for-web/index.js.map +1 -1
- package/lib/helpers/get-audit-items-data/index.js +14 -6
- package/lib/helpers/get-audit-items-data/index.js.map +1 -1
- package/lib/pdf/audit/index.js +1 -1
- package/lib/pdf/audit/index.js.map +1 -1
- package/package.json +15 -12
|
@@ -13,17 +13,27 @@ function buildFetchUrl(url, options) {
|
|
|
13
13
|
height,
|
|
14
14
|
width,
|
|
15
15
|
quality,
|
|
16
|
-
shouldUseCloudfront
|
|
16
|
+
shouldUseCloudfront,
|
|
17
|
+
Policy,
|
|
18
|
+
KeyPairId,
|
|
19
|
+
Signature
|
|
17
20
|
} = options;
|
|
18
21
|
if (shouldUseCloudfront) {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
const isWebContext = shouldUseCloudfront && typeof window === 'object';
|
|
23
|
+
const paramMap = {
|
|
24
|
+
width,
|
|
25
|
+
height,
|
|
26
|
+
quality,
|
|
27
|
+
fit: 'contain'
|
|
28
|
+
};
|
|
29
|
+
if (isWebContext) {
|
|
30
|
+
paramMap.Policy = Policy;
|
|
31
|
+
paramMap['Key-Pair-Id'] = KeyPairId;
|
|
32
|
+
paramMap.Signature = Signature;
|
|
33
|
+
}
|
|
34
|
+
const params = Object.entries(paramMap).filter(([, value]) => value != null).map(([key, value]) => `${key}=${String(value)}`);
|
|
35
|
+
const paramsString = params.join('&');
|
|
36
|
+
return `${cloudfrontBaseUrl}/${url}?${paramsString}`;
|
|
27
37
|
}
|
|
28
38
|
const transformations = [];
|
|
29
39
|
let transformationsString = '';
|
|
@@ -27,22 +27,20 @@ const fetchImageForPdfGeneratorService = async function (url) {
|
|
|
27
27
|
if (!applicationId) {
|
|
28
28
|
throw new Error('Requestor has insufficient permissions');
|
|
29
29
|
}
|
|
30
|
-
const
|
|
31
|
-
path,
|
|
32
|
-
queryParams
|
|
33
|
-
} = parseUrlString(url);
|
|
30
|
+
const keyWithTransformations = url.substring(url.indexOf(applicationId));
|
|
34
31
|
const alreadyTransformedImage = await fetchResourceFromS3({
|
|
35
32
|
bucketName: `${process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE}`,
|
|
36
|
-
key:
|
|
33
|
+
key: keyWithTransformations
|
|
37
34
|
});
|
|
38
35
|
if (alreadyTransformedImage?.body) {
|
|
39
36
|
const fullDataUrl = formatBase64Image({
|
|
40
37
|
base64String: alreadyTransformedImage.body.toString('base64'),
|
|
41
|
-
key:
|
|
38
|
+
key: keyWithTransformations
|
|
42
39
|
});
|
|
43
40
|
return fullDataUrl;
|
|
44
41
|
}
|
|
45
|
-
const
|
|
42
|
+
const keyWithoutTransformations = `/${keyWithTransformations.split('?')[0]}`;
|
|
43
|
+
const transformerResponse = await requestImageTransformation(keyWithoutTransformations);
|
|
46
44
|
const statusCode = transformerResponse.statusCode;
|
|
47
45
|
switch (statusCode) {
|
|
48
46
|
case 200:
|
|
@@ -50,7 +48,7 @@ const fetchImageForPdfGeneratorService = async function (url) {
|
|
|
50
48
|
console.debug('Image transformation successful');
|
|
51
49
|
const fullDataUrl = formatBase64Image({
|
|
52
50
|
base64String: transformerResponse.body.toString('base64'),
|
|
53
|
-
key:
|
|
51
|
+
key: keyWithTransformations
|
|
54
52
|
});
|
|
55
53
|
return fullDataUrl;
|
|
56
54
|
}
|
|
@@ -103,9 +101,6 @@ async function requestImageTransformation(key) {
|
|
|
103
101
|
InvocationType: 'RequestResponse',
|
|
104
102
|
Payload: JSON.stringify(lambdaEvent)
|
|
105
103
|
};
|
|
106
|
-
console.log({
|
|
107
|
-
params
|
|
108
|
-
});
|
|
109
104
|
try {
|
|
110
105
|
const result = await lambda.invoke(params).promise();
|
|
111
106
|
const response = JSON.parse(result.Payload);
|
|
@@ -165,32 +160,4 @@ function formatBase64Image({
|
|
|
165
160
|
throw new Error('InvalidImageError');
|
|
166
161
|
}
|
|
167
162
|
return fullDataUrl;
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
/**
|
|
171
|
-
* Parses a URL-like string into path and query parameters
|
|
172
|
-
* @param {string} urlString - String like "<applicationId>/<path>/filename.jpeg?width=100&height=100"
|
|
173
|
-
* @returns {Object} - Object with { path: string, queryParams: string }
|
|
174
|
-
* @example
|
|
175
|
-
* parseUrlString("abc123/folder/image.jpeg?width=100&height=100")
|
|
176
|
-
* // Returns: { path: "abc123/folder/image.jpeg", queryParams: "width=100,height=100" }
|
|
177
|
-
*/
|
|
178
|
-
function parseUrlString(urlString) {
|
|
179
|
-
if (!urlString || typeof urlString !== 'string') {
|
|
180
|
-
throw new Error('URL string is required and must be a string');
|
|
181
|
-
}
|
|
182
|
-
const [path, queryString] = urlString.split('?');
|
|
183
|
-
if (!path) {
|
|
184
|
-
throw new Error('Invalid URL string: missing path component');
|
|
185
|
-
}
|
|
186
|
-
if (!queryString) {
|
|
187
|
-
return `${path}`;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
// Parse query parameters and convert to comma-separated format
|
|
191
|
-
const queryParams = queryString.split('&').join(',');
|
|
192
|
-
return {
|
|
193
|
-
path,
|
|
194
|
-
queryParams
|
|
195
|
-
};
|
|
196
163
|
}
|
|
@@ -6,12 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.fetchImageForWeb = void 0;
|
|
7
7
|
var _images = require("../../images");
|
|
8
8
|
var _fetchLighthouseLogo = require("../fetch-lighthouse-logo");
|
|
9
|
-
var _fetchImage = require("../fetch-image");
|
|
10
|
-
var _imageValidators = require("../image-validators");
|
|
11
|
-
const contentTypes = {
|
|
12
|
-
'image/png': 'png',
|
|
13
|
-
'image/jpeg': 'jpeg'
|
|
14
|
-
};
|
|
15
9
|
const fetchImageForWeb = async function (url, options) {
|
|
16
10
|
const {
|
|
17
11
|
isHeader = false,
|
|
@@ -21,26 +15,18 @@ const fetchImageForWeb = async function (url, options) {
|
|
|
21
15
|
} = options;
|
|
22
16
|
try {
|
|
23
17
|
const firstParamConnector = url.indexOf('?') > -1 ? '&' : '?';
|
|
24
|
-
const
|
|
25
|
-
const
|
|
18
|
+
const hasSignatureParams = url.includes('Signature=') && url.includes('Policy=') && url.includes('Key-Pair-Id=');
|
|
19
|
+
const constructedUrl = !hasSignatureParams ? `${url}${firstParamConnector}Signature=${Signature}&Policy=${Policy}&Key-Pair-Id=${KeyPairId}` : url;
|
|
26
20
|
console.debug('Fetching image via CloudFront For Web');
|
|
27
|
-
const imageResponse = await fetch(
|
|
21
|
+
const imageResponse = await fetch(constructedUrl);
|
|
28
22
|
const contentLengthHeader = imageResponse.headers.get('content-length');
|
|
29
|
-
const contentType = imageResponse.headers.get('content-type');
|
|
30
23
|
if (contentLengthHeader === '0') {
|
|
31
24
|
return Promise.reject(new Error(`Failed to fetch image as no content length: ${encodedUrl}`));
|
|
32
25
|
}
|
|
33
26
|
if (!imageResponse.ok) {
|
|
34
27
|
return Promise.reject(new Error(`Failed to fetch image: ${encodedUrl}`));
|
|
35
28
|
}
|
|
36
|
-
|
|
37
|
-
const logoArrayBuffer = await imageResponse.arrayBuffer();
|
|
38
|
-
const base64Flag = `data:image/${imageType};base64,`;
|
|
39
|
-
const imageStr = (0, _fetchImage.arrayBufferToBase64)(logoArrayBuffer);
|
|
40
|
-
const base64 = `${base64Flag}${imageStr}`;
|
|
41
|
-
const isValid = (0, _imageValidators.validateBase64Image)(base64);
|
|
42
|
-
if (!isValid) throw new Error('InvalidImageError');
|
|
43
|
-
return base64;
|
|
29
|
+
return await imageResponse.arrayBuffer();
|
|
44
30
|
} catch (error) {
|
|
45
31
|
if (isHeader) {
|
|
46
32
|
// NOTE: Replace failed headers with LH logo
|
|
@@ -12,6 +12,9 @@ function getAuditItemsData(items, data) {
|
|
|
12
12
|
awsS3BaseUrl,
|
|
13
13
|
cloudinaryBaseUrl,
|
|
14
14
|
cloudfrontBaseUrl,
|
|
15
|
+
Policy,
|
|
16
|
+
KeyPairId,
|
|
17
|
+
Signature,
|
|
15
18
|
shouldUseCloudfront
|
|
16
19
|
} = {},
|
|
17
20
|
entity: {
|
|
@@ -55,11 +58,14 @@ function getAuditItemsData(items, data) {
|
|
|
55
58
|
awsS3BaseUrl,
|
|
56
59
|
cloudfrontBaseUrl,
|
|
57
60
|
cloudinaryBaseUrl,
|
|
58
|
-
shouldUseCloudfront,
|
|
59
|
-
fit: true,
|
|
60
61
|
height: 400,
|
|
61
62
|
width: 600,
|
|
62
|
-
quality: 50
|
|
63
|
+
quality: 50,
|
|
64
|
+
fit: true,
|
|
65
|
+
shouldUseCloudfront,
|
|
66
|
+
Policy,
|
|
67
|
+
KeyPairId,
|
|
68
|
+
Signature
|
|
63
69
|
});
|
|
64
70
|
const link = `${awsS3BaseUrl}/${asset}`;
|
|
65
71
|
const thumbnailUrl = (0, _.buildFetchUrl)(asset, {
|
|
@@ -68,7 +74,12 @@ function getAuditItemsData(items, data) {
|
|
|
68
74
|
cloudinaryBaseUrl,
|
|
69
75
|
shouldUseCloudfront,
|
|
70
76
|
width: 100,
|
|
71
|
-
quality: 50
|
|
77
|
+
quality: 50,
|
|
78
|
+
fit: true,
|
|
79
|
+
shouldUseCloudfront,
|
|
80
|
+
Policy,
|
|
81
|
+
KeyPairId,
|
|
82
|
+
Signature
|
|
72
83
|
});
|
|
73
84
|
const key = `${groupIndex}-item-asset-${assetIndex}`;
|
|
74
85
|
return {
|
package/dist/pdf/audit/index.js
CHANGED
|
@@ -196,7 +196,7 @@ function generateContent(data) {
|
|
|
196
196
|
timezone
|
|
197
197
|
});
|
|
198
198
|
const promises = {
|
|
199
|
-
entry: (0, _helpers.buildAuditContent)(groupedData.items),
|
|
199
|
+
entry: (0, _helpers.buildAuditContent)(groupedData.items, data.settings),
|
|
200
200
|
footerTemplate: (0, _helpers.buildTemplateContent)(footerFields.formGroups, data),
|
|
201
201
|
headerTemplate: (0, _helpers.buildTemplateContent)(headerFields.formGroups, data)
|
|
202
202
|
};
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
|
1
3
|
export function buildFetchUrl(url, options) {
|
|
2
4
|
var awsS3BaseUrl = options.awsS3BaseUrl,
|
|
3
5
|
_options$cloudfrontBa = options.cloudfrontBaseUrl,
|
|
@@ -7,16 +9,35 @@ export function buildFetchUrl(url, options) {
|
|
|
7
9
|
height = options.height,
|
|
8
10
|
width = options.width,
|
|
9
11
|
quality = options.quality,
|
|
10
|
-
shouldUseCloudfront = options.shouldUseCloudfront
|
|
12
|
+
shouldUseCloudfront = options.shouldUseCloudfront,
|
|
13
|
+
Policy = options.Policy,
|
|
14
|
+
KeyPairId = options.KeyPairId,
|
|
15
|
+
Signature = options.Signature;
|
|
11
16
|
if (shouldUseCloudfront) {
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
var isWebContext = shouldUseCloudfront && (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object';
|
|
18
|
+
var paramMap = {
|
|
19
|
+
width: width,
|
|
20
|
+
height: height,
|
|
21
|
+
quality: quality,
|
|
22
|
+
fit: 'contain'
|
|
23
|
+
};
|
|
24
|
+
if (isWebContext) {
|
|
25
|
+
paramMap.Policy = Policy;
|
|
26
|
+
paramMap['Key-Pair-Id'] = KeyPairId;
|
|
27
|
+
paramMap.Signature = Signature;
|
|
28
|
+
}
|
|
29
|
+
var params = Object.entries(paramMap).filter(function (_ref) {
|
|
30
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
31
|
+
value = _ref2[1];
|
|
32
|
+
return value != null;
|
|
33
|
+
}).map(function (_ref3) {
|
|
34
|
+
var _ref4 = _slicedToArray(_ref3, 2),
|
|
35
|
+
key = _ref4[0],
|
|
36
|
+
value = _ref4[1];
|
|
37
|
+
return "".concat(key, "=").concat(String(value));
|
|
38
|
+
});
|
|
39
|
+
var paramsString = params.join('&');
|
|
40
|
+
return "".concat(cloudfrontBaseUrl, "/").concat(url, "?").concat(paramsString);
|
|
20
41
|
}
|
|
21
42
|
var transformations = [];
|
|
22
43
|
var transformationsString = '';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["buildFetchUrl","url","options","awsS3BaseUrl","_options$cloudfrontBa","cloudfrontBaseUrl","cloudinaryBaseUrl","fit","height","width","quality","shouldUseCloudfront","
|
|
1
|
+
{"version":3,"file":"index.js","names":["buildFetchUrl","url","options","awsS3BaseUrl","_options$cloudfrontBa","cloudfrontBaseUrl","cloudinaryBaseUrl","fit","height","width","quality","shouldUseCloudfront","Policy","KeyPairId","Signature","isWebContext","window","_typeof","paramMap","params","Object","entries","filter","_ref","_ref2","_slicedToArray","value","map","_ref3","_ref4","key","concat","String","paramsString","join","transformations","transformationsString","push","toString","fetchUrl"],"sources":["../../../src/helpers/build-fetch-url/index.js"],"sourcesContent":["export function buildFetchUrl(url, options) {\n const {\n awsS3BaseUrl,\n cloudfrontBaseUrl = '',\n cloudinaryBaseUrl,\n fit,\n height,\n width,\n quality,\n shouldUseCloudfront,\n Policy,\n KeyPairId,\n Signature,\n } = options\n\n if (shouldUseCloudfront) {\n const isWebContext = shouldUseCloudfront && typeof window === 'object'\n\n const paramMap = {\n width,\n height,\n quality,\n fit: 'contain',\n }\n\n if (isWebContext) {\n paramMap.Policy = Policy\n paramMap['Key-Pair-Id'] = KeyPairId\n paramMap.Signature = Signature\n }\n const params = Object.entries(paramMap)\n .filter(([, value]) => value != null)\n .map(([key, value]) => `${key}=${String(value)}`)\n\n const paramsString = params.join('&')\n return `${cloudfrontBaseUrl}/${url}?${paramsString}`\n }\n\n const transformations = []\n let transformationsString = ''\n\n if (width) transformations.push(`w_${width.toString()}`)\n if (height) transformations.push(`h_${height.toString()}`)\n if (quality) transformations.push(`q_${quality.toString()}`)\n if (fit) transformations.push('c_fit')\n\n transformationsString = `${transformations.join(',')}/`\n\n const fetchUrl = `${cloudinaryBaseUrl}/${transformationsString}${awsS3BaseUrl}/${url}`\n\n return fetchUrl\n}\n"],"mappings":";;AAAA,OAAO,SAASA,aAAaA,CAACC,GAAG,EAAEC,OAAO,EAAE;EAC1C,IACEC,YAAY,GAWVD,OAAO,CAXTC,YAAY;IAAAC,qBAAA,GAWVF,OAAO,CAVTG,iBAAiB;IAAjBA,iBAAiB,GAAAD,qBAAA,cAAG,EAAE,GAAAA,qBAAA;IACtBE,iBAAiB,GASfJ,OAAO,CATTI,iBAAiB;IACjBC,GAAG,GAQDL,OAAO,CARTK,GAAG;IACHC,MAAM,GAOJN,OAAO,CAPTM,MAAM;IACNC,KAAK,GAMHP,OAAO,CANTO,KAAK;IACLC,OAAO,GAKLR,OAAO,CALTQ,OAAO;IACPC,mBAAmB,GAIjBT,OAAO,CAJTS,mBAAmB;IACnBC,MAAM,GAGJV,OAAO,CAHTU,MAAM;IACNC,SAAS,GAEPX,OAAO,CAFTW,SAAS;IACTC,SAAS,GACPZ,OAAO,CADTY,SAAS;EAGX,IAAIH,mBAAmB,EAAE;IACvB,IAAMI,YAAY,GAAGJ,mBAAmB,IAAI,QAAOK,MAAM,iCAAAC,OAAA,CAAND,MAAM,OAAK,QAAQ;IAEtE,IAAME,QAAQ,GAAG;MACfT,KAAK,EAALA,KAAK;MACLD,MAAM,EAANA,MAAM;MACNE,OAAO,EAAPA,OAAO;MACPH,GAAG,EAAE;IACP,CAAC;IAED,IAAIQ,YAAY,EAAE;MAChBG,QAAQ,CAACN,MAAM,GAAGA,MAAM;MACxBM,QAAQ,CAAC,aAAa,CAAC,GAAGL,SAAS;MACnCK,QAAQ,CAACJ,SAAS,GAAGA,SAAS;IAChC;IACA,IAAMK,MAAM,GAAGC,MAAM,CAACC,OAAO,CAACH,QAAQ,CAAC,CACpCI,MAAM,CAAC,UAAAC,IAAA;MAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,IAAA;QAAIG,KAAK,GAAAF,KAAA;MAAA,OAAME,KAAK,IAAI,IAAI;IAAA,EAAC,CACpCC,GAAG,CAAC,UAAAC,KAAA;MAAA,IAAAC,KAAA,GAAAJ,cAAA,CAAAG,KAAA;QAAEE,GAAG,GAAAD,KAAA;QAAEH,KAAK,GAAAG,KAAA;MAAA,UAAAE,MAAA,CAASD,GAAG,OAAAC,MAAA,CAAIC,MAAM,CAACN,KAAK,CAAC;IAAA,CAAE,CAAC;IAEnD,IAAMO,YAAY,GAAGd,MAAM,CAACe,IAAI,CAAC,GAAG,CAAC;IACrC,UAAAH,MAAA,CAAU1B,iBAAiB,OAAA0B,MAAA,CAAI9B,GAAG,OAAA8B,MAAA,CAAIE,YAAY;EACpD;EAEA,IAAME,eAAe,GAAG,EAAE;EAC1B,IAAIC,qBAAqB,GAAG,EAAE;EAE9B,IAAI3B,KAAK,EAAE0B,eAAe,CAACE,IAAI,MAAAN,MAAA,CAAMtB,KAAK,CAAC6B,QAAQ,CAAC,CAAC,CAAE,CAAC;EACxD,IAAI9B,MAAM,EAAE2B,eAAe,CAACE,IAAI,MAAAN,MAAA,CAAMvB,MAAM,CAAC8B,QAAQ,CAAC,CAAC,CAAE,CAAC;EAC1D,IAAI5B,OAAO,EAAEyB,eAAe,CAACE,IAAI,MAAAN,MAAA,CAAMrB,OAAO,CAAC4B,QAAQ,CAAC,CAAC,CAAE,CAAC;EAC5D,IAAI/B,GAAG,EAAE4B,eAAe,CAACE,IAAI,CAAC,OAAO,CAAC;EAEtCD,qBAAqB,MAAAL,MAAA,CAAMI,eAAe,CAACD,IAAI,CAAC,GAAG,CAAC,MAAG;EAEvD,IAAMK,QAAQ,MAAAR,MAAA,CAAMzB,iBAAiB,OAAAyB,MAAA,CAAIK,qBAAqB,EAAAL,MAAA,CAAG5B,YAAY,OAAA4B,MAAA,CAAI9B,GAAG,CAAE;EAEtF,OAAOsC,QAAQ;AACjB","ignoreList":[]}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
1
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
2
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
4
3
|
import { validateBase64Image } from '../image-validators';
|
|
@@ -12,7 +11,7 @@ var s3 = new AWS.S3({
|
|
|
12
11
|
});
|
|
13
12
|
export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
|
|
14
13
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(url) {
|
|
15
|
-
var urlMatch, applicationId,
|
|
14
|
+
var urlMatch, applicationId, keyWithTransformations, alreadyTransformedImage, fullDataUrl, keyWithoutTransformations, transformerResponse, statusCode, _fullDataUrl, _transformerResponse$, redirectLocation, newlyTransformedImage, _fullDataUrl2, _t;
|
|
16
15
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
17
16
|
while (1) switch (_context.prev = _context.next) {
|
|
18
17
|
case 0:
|
|
@@ -31,11 +30,11 @@ export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
|
|
|
31
30
|
}
|
|
32
31
|
throw new Error('Requestor has insufficient permissions');
|
|
33
32
|
case 2:
|
|
34
|
-
|
|
33
|
+
keyWithTransformations = url.substring(url.indexOf(applicationId));
|
|
35
34
|
_context.next = 3;
|
|
36
35
|
return fetchResourceFromS3({
|
|
37
36
|
bucketName: "".concat(process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE),
|
|
38
|
-
key:
|
|
37
|
+
key: keyWithTransformations
|
|
39
38
|
});
|
|
40
39
|
case 3:
|
|
41
40
|
alreadyTransformedImage = _context.sent;
|
|
@@ -45,12 +44,13 @@ export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
|
|
|
45
44
|
}
|
|
46
45
|
fullDataUrl = formatBase64Image({
|
|
47
46
|
base64String: alreadyTransformedImage.body.toString('base64'),
|
|
48
|
-
key:
|
|
47
|
+
key: keyWithTransformations
|
|
49
48
|
});
|
|
50
49
|
return _context.abrupt("return", fullDataUrl);
|
|
51
50
|
case 4:
|
|
51
|
+
keyWithoutTransformations = "/".concat(keyWithTransformations.split('?')[0]);
|
|
52
52
|
_context.next = 5;
|
|
53
|
-
return requestImageTransformation(
|
|
53
|
+
return requestImageTransformation(keyWithoutTransformations);
|
|
54
54
|
case 5:
|
|
55
55
|
transformerResponse = _context.sent;
|
|
56
56
|
statusCode = transformerResponse.statusCode;
|
|
@@ -61,7 +61,7 @@ export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
|
|
|
61
61
|
console.debug('Image transformation successful');
|
|
62
62
|
_fullDataUrl = formatBase64Image({
|
|
63
63
|
base64String: transformerResponse.body.toString('base64'),
|
|
64
|
-
key:
|
|
64
|
+
key: keyWithTransformations
|
|
65
65
|
});
|
|
66
66
|
return _context.abrupt("return", _fullDataUrl);
|
|
67
67
|
case 7:
|
|
@@ -135,9 +135,6 @@ function _requestImageTransformation() {
|
|
|
135
135
|
InvocationType: 'RequestResponse',
|
|
136
136
|
Payload: JSON.stringify(lambdaEvent)
|
|
137
137
|
};
|
|
138
|
-
console.log({
|
|
139
|
-
params: params
|
|
140
|
-
});
|
|
141
138
|
_context2.prev = 2;
|
|
142
139
|
_context2.next = 3;
|
|
143
140
|
return lambda.invoke(params).promise();
|
|
@@ -231,35 +228,4 @@ export function formatBase64Image(_ref3) {
|
|
|
231
228
|
}
|
|
232
229
|
return fullDataUrl;
|
|
233
230
|
}
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Parses a URL-like string into path and query parameters
|
|
237
|
-
* @param {string} urlString - String like "<applicationId>/<path>/filename.jpeg?width=100&height=100"
|
|
238
|
-
* @returns {Object} - Object with { path: string, queryParams: string }
|
|
239
|
-
* @example
|
|
240
|
-
* parseUrlString("abc123/folder/image.jpeg?width=100&height=100")
|
|
241
|
-
* // Returns: { path: "abc123/folder/image.jpeg", queryParams: "width=100,height=100" }
|
|
242
|
-
*/
|
|
243
|
-
function parseUrlString(urlString) {
|
|
244
|
-
if (!urlString || typeof urlString !== 'string') {
|
|
245
|
-
throw new Error('URL string is required and must be a string');
|
|
246
|
-
}
|
|
247
|
-
var _urlString$split = urlString.split('?'),
|
|
248
|
-
_urlString$split2 = _slicedToArray(_urlString$split, 2),
|
|
249
|
-
path = _urlString$split2[0],
|
|
250
|
-
queryString = _urlString$split2[1];
|
|
251
|
-
if (!path) {
|
|
252
|
-
throw new Error('Invalid URL string: missing path component');
|
|
253
|
-
}
|
|
254
|
-
if (!queryString) {
|
|
255
|
-
return "".concat(path);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
// Parse query parameters and convert to comma-separated format
|
|
259
|
-
var queryParams = queryString.split('&').join(',');
|
|
260
|
-
return {
|
|
261
|
-
path: path,
|
|
262
|
-
queryParams: queryParams
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
231
|
//# 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","_parseUrlString","path","queryParams","alreadyTransformedImage","fullDataUrl","transformerResponse","statusCode","_fullDataUrl","_transformerResponse$","redirectLocation","newlyTransformedImage","_fullDataUrl2","_t","wrap","_context","prev","next","console","debug","Error","match","parseUrlString","fetchResourceFromS3","bucketName","concat","S3_BUCKET_IMAGE_TRANSFORMER_CACHE","key","sent","body","formatBase64Image","base64String","toString","abrupt","requestImageTransformation","headers","Location","keyWithTransformations","stop","_x","apply","arguments","_x2","_requestImageTransformation","_callee2","lambdaEvent","params","result","response","errorMessage","_t2","_context2","requestContext","http","method","FunctionName","IMAGE_TRANSFORMER_ARN","InvocationType","Payload","JSON","stringify","log","invoke","promise","parse","message","error","_x3","_fetchResourceFromS","_callee3","_ref2","_t3","_context3","Bucket","Key","getObject","Body","contentType","ContentType","contentLength","ContentLength","lastModified","LastModified","etag","ETag","code","_ref3","imageType","toLowerCase","includes","base64Flag","isValid","urlString","_urlString$split","split","_urlString$split2","_slicedToArray","queryString","join"],"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.debug(\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 { path, queryParams } = parseUrlString(url)\n\n const alreadyTransformedImage = await fetchResourceFromS3({\n bucketName: `${process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE}`,\n key: `${path}/${queryParams}`,\n })\n\n if (alreadyTransformedImage?.body) {\n const fullDataUrl = formatBase64Image({\n base64String: alreadyTransformedImage.body.toString('base64'),\n key: url,\n })\n return fullDataUrl\n }\n\n const transformerResponse = await requestImageTransformation(url)\n\n const statusCode = transformerResponse.statusCode\n\n switch (statusCode) {\n case 200: {\n console.debug('Image transformation successful')\n\n const fullDataUrl = formatBase64Image({\n base64String: transformerResponse.body.toString('base64'),\n key: url,\n })\n\n return fullDataUrl\n }\n case 302: {\n console.debug(\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_IMAGE_TRANSFORMER_CACHE}`,\n key: keyWithTransformations,\n })\n console.debug(\n 'Image successfully fetched from S3 at:',\n redirectLocation\n )\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.debug(\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 console.log({ params })\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.debug(\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.error('Failed to fetch image:', error)\n throw new Error(`Failed to fetch image: ${bucketName}/${key}`)\n }\n\n console.debug('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\n/**\n * Parses a URL-like string into path and query parameters\n * @param {string} urlString - String like \"<applicationId>/<path>/filename.jpeg?width=100&height=100\"\n * @returns {Object} - Object with { path: string, queryParams: string }\n * @example\n * parseUrlString(\"abc123/folder/image.jpeg?width=100&height=100\")\n * // Returns: { path: \"abc123/folder/image.jpeg\", queryParams: \"width=100,height=100\" }\n */\nfunction parseUrlString(urlString) {\n if (!urlString || typeof urlString !== 'string') {\n throw new Error('URL string is required and must be a string')\n }\n\n const [path, queryString] = urlString.split('?')\n\n if (!path) {\n throw new Error('Invalid URL string: missing path component')\n }\n\n if (!queryString) {\n return `${path}`\n }\n\n // Parse query parameters and convert to comma-separated format\n const queryParams = queryString.split('&').join(',')\n\n return {\n path,\n queryParams,\n }\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","_t","wrap","_context","prev","next","console","debug","Error","match","substring","indexOf","fetchResourceFromS3","bucketName","concat","S3_BUCKET_IMAGE_TRANSFORMER_CACHE","key","sent","body","formatBase64Image","base64String","toString","abrupt","split","requestImageTransformation","headers","Location","stop","_x","apply","arguments","_x2","_requestImageTransformation","_callee2","lambdaEvent","params","result","response","errorMessage","_t2","_context2","requestContext","http","method","path","FunctionName","IMAGE_TRANSFORMER_ARN","InvocationType","Payload","JSON","stringify","invoke","promise","parse","message","error","_x3","_fetchResourceFromS","_callee3","_ref2","_t3","_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.debug(\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_IMAGE_TRANSFORMER_CACHE}`,\n key: keyWithTransformations,\n })\n\n if (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.debug('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.debug(\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_IMAGE_TRANSFORMER_CACHE}`,\n key: keyWithTransformations,\n })\n console.debug(\n 'Image successfully fetched from S3 at:',\n redirectLocation\n )\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.debug(\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.debug(\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.error('Failed to fetch image:', error)\n throw new Error(`Failed to fetch image: ${bucketName}/${key}`)\n }\n\n console.debug('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":[]}
|
|
@@ -2,30 +2,23 @@ import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
|
2
2
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
3
|
import { imageNotFound } from '../../images';
|
|
4
4
|
import { fetchLighthouseLogo } from '../fetch-lighthouse-logo';
|
|
5
|
-
import { arrayBufferToBase64 } from '../fetch-image';
|
|
6
|
-
import { validateBase64Image } from '../image-validators';
|
|
7
|
-
var contentTypes = {
|
|
8
|
-
'image/png': 'png',
|
|
9
|
-
'image/jpeg': 'jpeg'
|
|
10
|
-
};
|
|
11
5
|
export var fetchImageForWeb = /*#__PURE__*/function () {
|
|
12
6
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(url, options) {
|
|
13
|
-
var _options$isHeader, isHeader, Signature, Policy, KeyPairId, firstParamConnector,
|
|
7
|
+
var _options$isHeader, isHeader, Signature, Policy, KeyPairId, firstParamConnector, hasSignatureParams, constructedUrl, imageResponse, contentLengthHeader, _t;
|
|
14
8
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
15
9
|
while (1) switch (_context.prev = _context.next) {
|
|
16
10
|
case 0:
|
|
17
11
|
_options$isHeader = options.isHeader, isHeader = _options$isHeader === void 0 ? false : _options$isHeader, Signature = options.Signature, Policy = options.Policy, KeyPairId = options.KeyPairId;
|
|
18
12
|
_context.prev = 1;
|
|
19
13
|
firstParamConnector = url.indexOf('?') > -1 ? '&' : '?';
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
hasSignatureParams = url.includes('Signature=') && url.includes('Policy=') && url.includes('Key-Pair-Id=');
|
|
15
|
+
constructedUrl = !hasSignatureParams ? "".concat(url).concat(firstParamConnector, "Signature=").concat(Signature, "&Policy=").concat(Policy, "&Key-Pair-Id=").concat(KeyPairId) : url;
|
|
22
16
|
console.debug('Fetching image via CloudFront For Web');
|
|
23
17
|
_context.next = 2;
|
|
24
|
-
return fetch(
|
|
18
|
+
return fetch(constructedUrl);
|
|
25
19
|
case 2:
|
|
26
20
|
imageResponse = _context.sent;
|
|
27
21
|
contentLengthHeader = imageResponse.headers.get('content-length');
|
|
28
|
-
contentType = imageResponse.headers.get('content-type');
|
|
29
22
|
if (!(contentLengthHeader === '0')) {
|
|
30
23
|
_context.next = 3;
|
|
31
24
|
break;
|
|
@@ -38,40 +31,28 @@ export var fetchImageForWeb = /*#__PURE__*/function () {
|
|
|
38
31
|
}
|
|
39
32
|
return _context.abrupt("return", Promise.reject(new Error("Failed to fetch image: ".concat(encodedUrl))));
|
|
40
33
|
case 4:
|
|
41
|
-
imageType = contentTypes[contentType];
|
|
42
34
|
_context.next = 5;
|
|
43
35
|
return imageResponse.arrayBuffer();
|
|
44
36
|
case 5:
|
|
45
|
-
|
|
46
|
-
base64Flag = "data:image/".concat(imageType, ";base64,");
|
|
47
|
-
imageStr = arrayBufferToBase64(logoArrayBuffer);
|
|
48
|
-
base64 = "".concat(base64Flag).concat(imageStr);
|
|
49
|
-
isValid = validateBase64Image(base64);
|
|
50
|
-
if (isValid) {
|
|
51
|
-
_context.next = 6;
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
|
-
throw new Error('InvalidImageError');
|
|
37
|
+
return _context.abrupt("return", _context.sent);
|
|
55
38
|
case 6:
|
|
56
|
-
|
|
57
|
-
case 7:
|
|
58
|
-
_context.prev = 7;
|
|
39
|
+
_context.prev = 6;
|
|
59
40
|
_t = _context["catch"](1);
|
|
60
41
|
if (!isHeader) {
|
|
61
|
-
_context.next =
|
|
42
|
+
_context.next = 7;
|
|
62
43
|
break;
|
|
63
44
|
}
|
|
64
45
|
// NOTE: Replace failed headers with LH logo
|
|
65
46
|
console.error('FetchImageHeaderError', _t);
|
|
66
47
|
return _context.abrupt("return", fetchLighthouseLogo());
|
|
67
|
-
case
|
|
48
|
+
case 7:
|
|
68
49
|
console.error(_t);
|
|
69
50
|
return _context.abrupt("return", imageNotFound);
|
|
70
|
-
case
|
|
51
|
+
case 8:
|
|
71
52
|
case "end":
|
|
72
53
|
return _context.stop();
|
|
73
54
|
}
|
|
74
|
-
}, _callee, null, [[1,
|
|
55
|
+
}, _callee, null, [[1, 6]]);
|
|
75
56
|
}));
|
|
76
57
|
return function fetchImageForWeb(_x, _x2) {
|
|
77
58
|
return _ref.apply(this, arguments);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["imageNotFound","fetchLighthouseLogo","
|
|
1
|
+
{"version":3,"file":"index.js","names":["imageNotFound","fetchLighthouseLogo","fetchImageForWeb","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","options","_options$isHeader","isHeader","Signature","Policy","KeyPairId","firstParamConnector","hasSignatureParams","constructedUrl","imageResponse","contentLengthHeader","_t","wrap","_context","prev","next","indexOf","includes","concat","console","debug","fetch","sent","headers","get","abrupt","Promise","reject","Error","encodedUrl","ok","arrayBuffer","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'\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\n const hasSignatureParams =\n url.includes('Signature=') &&\n url.includes('Policy=') &&\n url.includes('Key-Pair-Id=')\n\n const constructedUrl = !hasSignatureParams\n ? `${url}${firstParamConnector}Signature=${Signature}&Policy=${Policy}&Key-Pair-Id=${KeyPairId}`\n : url\n\n console.debug('Fetching image via CloudFront For Web')\n\n const imageResponse = await fetch(constructedUrl)\n\n const contentLengthHeader = imageResponse.headers.get('content-length')\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 return await imageResponse.arrayBuffer()\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"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
1
2
|
import { find, groupBy, map, get, round } from 'lodash';
|
|
2
3
|
import { buildFetchUrl } from '../';
|
|
3
4
|
export function getAuditItemsData(items, data) {
|
|
@@ -6,6 +7,9 @@ export function getAuditItemsData(items, data) {
|
|
|
6
7
|
awsS3BaseUrl = _data$settings2.awsS3BaseUrl,
|
|
7
8
|
cloudinaryBaseUrl = _data$settings2.cloudinaryBaseUrl,
|
|
8
9
|
cloudfrontBaseUrl = _data$settings2.cloudfrontBaseUrl,
|
|
10
|
+
Policy = _data$settings2.Policy,
|
|
11
|
+
KeyPairId = _data$settings2.KeyPairId,
|
|
12
|
+
Signature = _data$settings2.Signature,
|
|
9
13
|
shouldUseCloudfront = _data$settings2.shouldUseCloudfront,
|
|
10
14
|
_data$entity = data.entity,
|
|
11
15
|
_data$entity2 = _data$entity === void 0 ? {} : _data$entity,
|
|
@@ -47,21 +51,25 @@ export function getAuditItemsData(items, data) {
|
|
|
47
51
|
awsS3BaseUrl: awsS3BaseUrl,
|
|
48
52
|
cloudfrontBaseUrl: cloudfrontBaseUrl,
|
|
49
53
|
cloudinaryBaseUrl: cloudinaryBaseUrl,
|
|
50
|
-
shouldUseCloudfront: shouldUseCloudfront,
|
|
51
|
-
fit: true,
|
|
52
54
|
height: 400,
|
|
53
55
|
width: 600,
|
|
54
|
-
quality: 50
|
|
56
|
+
quality: 50,
|
|
57
|
+
fit: true,
|
|
58
|
+
shouldUseCloudfront: shouldUseCloudfront,
|
|
59
|
+
Policy: Policy,
|
|
60
|
+
KeyPairId: KeyPairId,
|
|
61
|
+
Signature: Signature
|
|
55
62
|
});
|
|
56
63
|
var link = "".concat(awsS3BaseUrl, "/").concat(asset);
|
|
57
|
-
var thumbnailUrl = buildFetchUrl(asset, {
|
|
64
|
+
var thumbnailUrl = buildFetchUrl(asset, _defineProperty(_defineProperty(_defineProperty(_defineProperty({
|
|
58
65
|
awsS3BaseUrl: awsS3BaseUrl,
|
|
59
66
|
cloudfrontBaseUrl: cloudfrontBaseUrl,
|
|
60
67
|
cloudinaryBaseUrl: cloudinaryBaseUrl,
|
|
61
68
|
shouldUseCloudfront: shouldUseCloudfront,
|
|
62
69
|
width: 100,
|
|
63
|
-
quality: 50
|
|
64
|
-
|
|
70
|
+
quality: 50,
|
|
71
|
+
fit: true
|
|
72
|
+
}, "shouldUseCloudfront", shouldUseCloudfront), "Policy", Policy), "KeyPairId", KeyPairId), "Signature", Signature));
|
|
65
73
|
var key = "".concat(groupIndex, "-item-asset-").concat(assetIndex);
|
|
66
74
|
return {
|
|
67
75
|
assetUrl: assetUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["find","groupBy","map","get","round","buildFetchUrl","getAuditItemsData","items","data","_data$settings","settings","_data$settings2","awsS3BaseUrl","cloudinaryBaseUrl","cloudfrontBaseUrl","shouldUseCloudfront","_data$entity","entity","_data$entity2","groupScores","groupedItems","auditData","overallActualScore","overallMaximumScore","groupIndex","key","skipped","group","title","label","groupData","groupMaximumScore","groupActualScore","groupResultScore","groupPercentageResultScore","currentGroupScores","max","actual","result","percentageResult","item","itemIndex","hasScore","score","rawAssets","assets","assetCount","length","asset","assetIndex","assetUrl","
|
|
1
|
+
{"version":3,"file":"index.js","names":["find","groupBy","map","get","round","buildFetchUrl","getAuditItemsData","items","data","_data$settings","settings","_data$settings2","awsS3BaseUrl","cloudinaryBaseUrl","cloudfrontBaseUrl","Policy","KeyPairId","Signature","shouldUseCloudfront","_data$entity","entity","_data$entity2","groupScores","groupedItems","auditData","overallActualScore","overallMaximumScore","groupIndex","key","skipped","group","title","label","groupData","groupMaximumScore","groupActualScore","groupResultScore","groupPercentageResultScore","currentGroupScores","max","actual","result","percentageResult","item","itemIndex","hasScore","score","rawAssets","assets","assetCount","length","asset","assetIndex","assetUrl","height","width","quality","fit","link","concat","thumbnailUrl","_defineProperty","comments","matchingScore","scores","value","scoreLabel","scoreWeight","weight","questionId","_id"],"sources":["../../../src/helpers/get-audit-items-data/index.js"],"sourcesContent":["import { find, groupBy, map, get, round } from 'lodash'\n\nimport { buildFetchUrl } from '../'\n\nexport function getAuditItemsData(items, data) {\n const {\n settings: {\n awsS3BaseUrl,\n cloudinaryBaseUrl,\n cloudfrontBaseUrl,\n Policy,\n KeyPairId,\n Signature,\n shouldUseCloudfront,\n } = {},\n entity: { groupScores } = {},\n } = data\n\n const groupedItems = groupBy(items, 'group.id')\n\n const auditData = {\n overallActualScore: 0,\n overallMaximumScore: 0,\n }\n\n auditData.items = map(groupedItems, (items, groupIndex) => {\n const key = groupIndex\n const skipped = !!items[0].group.skipped\n const title = items[0].group.label\n\n const groupData = {\n key,\n groupMaximumScore: 0,\n groupActualScore: 0,\n groupResultScore: 0,\n groupPercentageResultScore: 0,\n skipped,\n title,\n }\n\n const currentGroupScores = get(groupScores, key)\n\n if (currentGroupScores) {\n groupData.groupMaximumScore = round(currentGroupScores.max, 2)\n groupData.groupActualScore = round(currentGroupScores.actual, 2)\n groupData.groupResultScore = currentGroupScores.result\n groupData.groupPercentageResultScore = currentGroupScores.percentageResult\n }\n\n groupData.items = items.map((item, itemIndex) => {\n // NOTE: we handle scores of -1, 0 and 1\n // -1 scores are skipped from group max and actual score\n // 0 and 1 must be included in the final scores\n const hasScore = item.score !== null && item.score !== -1\n const rawAssets = item.assets || []\n const assetCount = rawAssets.length\n\n const assets = rawAssets.map((asset, assetIndex) => {\n const assetUrl = buildFetchUrl(asset, {\n awsS3BaseUrl,\n cloudfrontBaseUrl,\n cloudinaryBaseUrl,\n height: 400,\n width: 600,\n quality: 50,\n fit: true,\n shouldUseCloudfront,\n Policy,\n KeyPairId,\n Signature,\n })\n\n const link = `${awsS3BaseUrl}/${asset}`\n\n const thumbnailUrl = buildFetchUrl(asset, {\n awsS3BaseUrl,\n cloudfrontBaseUrl,\n cloudinaryBaseUrl,\n shouldUseCloudfront,\n width: 100,\n quality: 50,\n fit: true,\n shouldUseCloudfront,\n Policy,\n KeyPairId,\n Signature,\n })\n\n const key = `${groupIndex}-item-asset-${assetIndex}`\n\n return {\n assetUrl,\n key,\n link,\n thumbnailUrl,\n }\n })\n\n const comments = item.comments\n const label = item.label\n const score = item.score\n const key = `${groupIndex}-item-${itemIndex}`\n const matchingScore = find(item.scores, { value: score })\n\n // NOTE: ensure we have a score otherwise fallback to - value\n const scoreLabel =\n hasScore && matchingScore && !skipped ? matchingScore.label : '-'\n const scoreWeight = hasScore && !skipped ? item.scoreWeight : '-'\n const weight = hasScore ? item.weight : '-'\n\n return {\n assetCount,\n assets,\n comments,\n key,\n label,\n questionId: item._id,\n score,\n scoreLabel,\n scoreWeight,\n weight,\n }\n })\n\n return groupData\n })\n\n return auditData\n}\n"],"mappings":"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","ignoreList":[]}
|
package/lib/pdf/audit/index.js
CHANGED
|
@@ -192,7 +192,7 @@ function generateContent(data) {
|
|
|
192
192
|
timezone: timezone
|
|
193
193
|
});
|
|
194
194
|
var promises = {
|
|
195
|
-
entry: buildAuditContent(groupedData.items),
|
|
195
|
+
entry: buildAuditContent(groupedData.items, data.settings),
|
|
196
196
|
footerTemplate: buildTemplateContent(footerFields.formGroups, data),
|
|
197
197
|
headerTemplate: buildTemplateContent(headerFields.formGroups, data)
|
|
198
198
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["Promise","isEmpty","round","moment","buildAuditContent","buildAuditFollowUps","buildTemplateContent","generateDefinition","getFormattedAddress","horizontalLine","text","twoColumnTable","getAuditEntryDetails","buildAuditPdf","pdfOptions","data","entity","timezone","_pdfOptions$flags","flags","sequenceId","timestamp","createdAt","title","fileTitle","concat","generateContent","then","content","_objectSpread","type","catch","err","Error","message","_entity$followUps","followUps","_entity$footerFields","footerFields","_entity$gps","gps","_entity$headerFields","headerFields","_entity$score","score","_entity$title","entityDetails","gpsText","groupedData","locationText","referenceValue","timezoneHourTime","scoreText","target","targetServiceLevel","renderTargetFields","headerTitle","style","headerScore","alignment","firstRow","subTitle","headerSubTitle","colSpan","secondRow","reverseGeocoded","address","renderHeaderAddress","dummyColumn","headerAddress","renderThirdRow","thirdRow","serviceLevelBelow","serviceLevelText","scoreServiceLevelSubTitle","truncatedTargetPercent","scoreTargetText","scoreTargetSubTitle","scoreBreakdown","actual","max","scorePercentage","scoreTitle","body","submittedAtInTimezone","submittedAt","tz","format","showSimplifiedDuration","push","startedAtInTimezone","startedAt","momentDuration","duration","Math","abs","formDuration","days","floor","asDays","toString","padStart","hours","minutes","seconds","formattedFormDuration","titleTable","layout","widths","margin","totalScoreTable","hLineTop","hLineBottom","followUpItems","promises","entry","items","footerTemplate","formGroups","headerTemplate","auditItemsTitle","font","lineHeight","props","_ref","_toConsumableArray"],"sources":["../../../src/pdf/audit/index.js"],"sourcesContent":["import Promise from 'bluebird'\nimport { isEmpty, round } from 'lodash'\nimport moment from 'moment-timezone'\n\nimport {\n buildAuditContent,\n buildAuditFollowUps,\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n horizontalLine,\n text,\n twoColumnTable,\n} from '../helpers'\nimport { getAuditEntryDetails } from '../../helpers'\n\n/**\n * buildAuditPdf\n *\n * @param {object} pdfOptions - the pdf options\n * @param {string} pdfOptions.fileTitle - pdf file title\n * @param {function} pdfOptions.footer - function executed to generate footer\n * @param {function} pdfOptions.header - function executed to generate header\n * @param {string} pdfOptions.logoUrl - pdf logo url\n * @param {array} pdfOptions.pageMargins - pdf page margins\n * @param {string} pdfOptions.pageOrientation - pdf page orientation\n * @param {string} pdfOptions.pageSize - pdf page size\n * @param {object} pdfOptions.styles - pdf styles\n * @param {object} pdfOptions.title - pdf title\n * @param {object} pdfOptions.flags - flags to conditionally render parts of the pdf\n * @param {object} data - pdf data\n * @param {object} data.entity - audit document\n * @param {object} data.locations - locations documents\n * @param {object} data.settings - settings properties\n * @param {string} data.settings.awsS3BaseUrl - aws S3 base url\n * @param {string} data.settings.cloudinaryBaseUrl - cloudinary base url\n * @param {string} data.timezone - timezone string\n * @param {object} data.users - application user documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport function buildAuditPdf(pdfOptions, data) {\n const { entity, timezone } = data\n const { flags = {} } = pdfOptions\n\n const sequenceId = entity.sequenceId\n const timestamp = entity.createdAt\n const title = entity.title || 'Unknown'\n const fileTitle = `Audit Report - ${title}`\n\n return generateContent(data, flags)\n .then(content =>\n generateDefinition({\n content,\n fileTitle,\n sequenceId,\n timestamp,\n timezone,\n type: 'Audit',\n ...pdfOptions,\n })\n )\n .catch(err => {\n throw new Error(`BuildAuditPdfError: ${err.message}`)\n })\n}\n\nfunction generateContent(data) {\n const { entity } = data\n\n const {\n followUps = [],\n footerFields = {},\n gps = {},\n headerFields = {},\n score = {},\n title = 'Unknown',\n } = entity\n\n const timezone = entity?.timezone || data?.timezone || 'UTC'\n const entityDetails = getAuditEntryDetails(data)\n\n const {\n gpsText,\n groupedData,\n locationText,\n referenceValue,\n timezoneHourTime,\n scoreText,\n target,\n targetServiceLevel,\n } = entityDetails\n\n const renderTargetFields = !!targetServiceLevel\n const headerTitle = text(title, { style: 'title' })\n const headerScore = text(scoreText, { alignment: 'right', style: 'title' })\n const firstRow = [headerTitle, headerScore]\n const subTitle = `${locationText ||\n gpsText} - ${timezoneHourTime} by ${referenceValue}`\n\n let headerSubTitle = text(subTitle, { colSpan: 2, style: 'subTitle' })\n let secondRow = [headerSubTitle]\n\n const reverseGeocoded = gps.reverseGeocoded\n const address = !isEmpty(reverseGeocoded)\n ? getFormattedAddress(reverseGeocoded)\n : ''\n const renderHeaderAddress = !isEmpty(reverseGeocoded)\n const dummyColumn = text(' ', { style: 'small' })\n\n let headerAddress = text(address, { colSpan: 2, style: 'small' })\n const renderThirdRow = renderHeaderAddress || renderTargetFields\n let thirdRow = renderHeaderAddress ? [headerAddress] : []\n\n if (renderTargetFields) {\n headerSubTitle = text(subTitle, { style: 'subTitle' })\n\n const serviceLevelBelow = targetServiceLevel === 'below'\n const serviceLevelText =\n targetServiceLevel === 'above'\n ? 'Above Target'\n : targetServiceLevel === 'on'\n ? 'On Target'\n : targetServiceLevel === 'below'\n ? 'Below Target'\n : ''\n\n const scoreServiceLevelSubTitle = text(serviceLevelText, {\n alignment: 'right',\n style: serviceLevelBelow ? 'serviceLevelBelow' : 'serviceLevelAboveOrOn',\n })\n\n secondRow = [headerSubTitle, scoreServiceLevelSubTitle]\n headerAddress = text(address, { style: 'small' })\n\n const truncatedTargetPercent = round(target, 2)\n const scoreTargetText = `(Target - ${truncatedTargetPercent}%)`\n const scoreTargetSubTitle = text(scoreTargetText, {\n alignment: 'right',\n style: 'subTitle',\n })\n\n thirdRow = renderHeaderAddress\n ? [headerAddress, scoreTargetSubTitle]\n : [dummyColumn, scoreTargetSubTitle]\n }\n\n const scoreBreakdown = text(\n `${round(score.actual, 2)} / ${round(score.max, 2)}`,\n {\n alignment: 'right',\n style: 'totalScore',\n }\n )\n const scorePercentage = text(scoreText, {\n alignment: 'right',\n colSpan: 2,\n style: 'totalAuditScore',\n })\n const scoreTitle = text('Total Score', { style: 'totalScore' })\n\n const body = renderThirdRow\n ? [firstRow, secondRow, thirdRow]\n : [firstRow, secondRow]\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n if (entity.showSimplifiedDuration) {\n body.push([submittedAt, dummyColumn])\n } else {\n const startedAtInTimezone = entity.startedAt\n ? moment(entity.startedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const startedAt = text(`Started: ${startedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const days = Math.floor(momentDuration.asDays())\n .toString()\n .padStart(2, '0')\n const hours = Math.floor(momentDuration.hours())\n .toString()\n .padStart(2, '0')\n const minutes = momentDuration\n .minutes()\n .toString()\n .padStart(2, '0')\n const seconds = momentDuration\n .seconds()\n .toString()\n .padStart(2, '0')\n const formattedFormDuration = entity.formDuration\n ? `${\n entity.formDuration < 0 ? '-' : ''\n }${days}:${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (DD:HH:MM:SS): ${formattedFormDuration}`,\n {\n colSpan: 2,\n style: 'small',\n }\n )\n\n body.push([startedAt, dummyColumn])\n body.push([submittedAt, dummyColumn])\n body.push([formDuration, dummyColumn])\n }\n\n const titleTable = twoColumnTable({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n widths: ['*', 100],\n margin: [0, 0, 0, 30],\n })\n\n const totalScoreTable = twoColumnTable({\n body: [[scoreTitle, scoreBreakdown], [scorePercentage]],\n layout: 'noBorders',\n widths: ['*', 100],\n })\n\n const hLineTop = horizontalLine({ margin: [0, 10, 0, 0] })\n const hLineBottom = horizontalLine()\n\n const followUpItems = buildAuditFollowUps(followUps, { timezone })\n\n const promises = {\n entry: buildAuditContent(groupedData.items),\n footerTemplate: buildTemplateContent(footerFields.formGroups, data),\n headerTemplate: buildTemplateContent(headerFields.formGroups, data),\n }\n\n const auditItemsTitle = [\n {\n text: 'Audit Items',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n },\n },\n hLineTop,\n ]\n\n return Promise.props(promises)\n .then(({ entry, footerTemplate, headerTemplate }) => [\n titleTable,\n followUpItems,\n ...auditItemsTitle,\n ...headerTemplate,\n ...entry,\n hLineTop,\n totalScoreTable,\n hLineBottom,\n ...footerTemplate,\n ])\n .catch(err => {\n throw new Error(`GenerateContentError: ${err.message}`)\n })\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["Promise","isEmpty","round","moment","buildAuditContent","buildAuditFollowUps","buildTemplateContent","generateDefinition","getFormattedAddress","horizontalLine","text","twoColumnTable","getAuditEntryDetails","buildAuditPdf","pdfOptions","data","entity","timezone","_pdfOptions$flags","flags","sequenceId","timestamp","createdAt","title","fileTitle","concat","generateContent","then","content","_objectSpread","type","catch","err","Error","message","_entity$followUps","followUps","_entity$footerFields","footerFields","_entity$gps","gps","_entity$headerFields","headerFields","_entity$score","score","_entity$title","entityDetails","gpsText","groupedData","locationText","referenceValue","timezoneHourTime","scoreText","target","targetServiceLevel","renderTargetFields","headerTitle","style","headerScore","alignment","firstRow","subTitle","headerSubTitle","colSpan","secondRow","reverseGeocoded","address","renderHeaderAddress","dummyColumn","headerAddress","renderThirdRow","thirdRow","serviceLevelBelow","serviceLevelText","scoreServiceLevelSubTitle","truncatedTargetPercent","scoreTargetText","scoreTargetSubTitle","scoreBreakdown","actual","max","scorePercentage","scoreTitle","body","submittedAtInTimezone","submittedAt","tz","format","showSimplifiedDuration","push","startedAtInTimezone","startedAt","momentDuration","duration","Math","abs","formDuration","days","floor","asDays","toString","padStart","hours","minutes","seconds","formattedFormDuration","titleTable","layout","widths","margin","totalScoreTable","hLineTop","hLineBottom","followUpItems","promises","entry","items","settings","footerTemplate","formGroups","headerTemplate","auditItemsTitle","font","lineHeight","props","_ref","_toConsumableArray"],"sources":["../../../src/pdf/audit/index.js"],"sourcesContent":["import Promise from 'bluebird'\nimport { isEmpty, round } from 'lodash'\nimport moment from 'moment-timezone'\n\nimport {\n buildAuditContent,\n buildAuditFollowUps,\n buildTemplateContent,\n generateDefinition,\n getFormattedAddress,\n horizontalLine,\n text,\n twoColumnTable,\n} from '../helpers'\nimport { getAuditEntryDetails } from '../../helpers'\n\n/**\n * buildAuditPdf\n *\n * @param {object} pdfOptions - the pdf options\n * @param {string} pdfOptions.fileTitle - pdf file title\n * @param {function} pdfOptions.footer - function executed to generate footer\n * @param {function} pdfOptions.header - function executed to generate header\n * @param {string} pdfOptions.logoUrl - pdf logo url\n * @param {array} pdfOptions.pageMargins - pdf page margins\n * @param {string} pdfOptions.pageOrientation - pdf page orientation\n * @param {string} pdfOptions.pageSize - pdf page size\n * @param {object} pdfOptions.styles - pdf styles\n * @param {object} pdfOptions.title - pdf title\n * @param {object} pdfOptions.flags - flags to conditionally render parts of the pdf\n * @param {object} data - pdf data\n * @param {object} data.entity - audit document\n * @param {object} data.locations - locations documents\n * @param {object} data.settings - settings properties\n * @param {string} data.settings.awsS3BaseUrl - aws S3 base url\n * @param {string} data.settings.cloudinaryBaseUrl - cloudinary base url\n * @param {string} data.timezone - timezone string\n * @param {object} data.users - application user documents\n * @returns {Promise} returns pdfmake definition object\n */\nexport function buildAuditPdf(pdfOptions, data) {\n const { entity, timezone } = data\n const { flags = {} } = pdfOptions\n\n const sequenceId = entity.sequenceId\n const timestamp = entity.createdAt\n const title = entity.title || 'Unknown'\n const fileTitle = `Audit Report - ${title}`\n\n return generateContent(data, flags)\n .then(content =>\n generateDefinition({\n content,\n fileTitle,\n sequenceId,\n timestamp,\n timezone,\n type: 'Audit',\n ...pdfOptions,\n })\n )\n .catch(err => {\n throw new Error(`BuildAuditPdfError: ${err.message}`)\n })\n}\n\nfunction generateContent(data) {\n const { entity } = data\n\n const {\n followUps = [],\n footerFields = {},\n gps = {},\n headerFields = {},\n score = {},\n title = 'Unknown',\n } = entity\n\n const timezone = entity?.timezone || data?.timezone || 'UTC'\n const entityDetails = getAuditEntryDetails(data)\n\n const {\n gpsText,\n groupedData,\n locationText,\n referenceValue,\n timezoneHourTime,\n scoreText,\n target,\n targetServiceLevel,\n } = entityDetails\n\n const renderTargetFields = !!targetServiceLevel\n const headerTitle = text(title, { style: 'title' })\n const headerScore = text(scoreText, { alignment: 'right', style: 'title' })\n const firstRow = [headerTitle, headerScore]\n const subTitle = `${locationText ||\n gpsText} - ${timezoneHourTime} by ${referenceValue}`\n\n let headerSubTitle = text(subTitle, { colSpan: 2, style: 'subTitle' })\n let secondRow = [headerSubTitle]\n\n const reverseGeocoded = gps.reverseGeocoded\n const address = !isEmpty(reverseGeocoded)\n ? getFormattedAddress(reverseGeocoded)\n : ''\n const renderHeaderAddress = !isEmpty(reverseGeocoded)\n const dummyColumn = text(' ', { style: 'small' })\n\n let headerAddress = text(address, { colSpan: 2, style: 'small' })\n const renderThirdRow = renderHeaderAddress || renderTargetFields\n let thirdRow = renderHeaderAddress ? [headerAddress] : []\n\n if (renderTargetFields) {\n headerSubTitle = text(subTitle, { style: 'subTitle' })\n\n const serviceLevelBelow = targetServiceLevel === 'below'\n const serviceLevelText =\n targetServiceLevel === 'above'\n ? 'Above Target'\n : targetServiceLevel === 'on'\n ? 'On Target'\n : targetServiceLevel === 'below'\n ? 'Below Target'\n : ''\n\n const scoreServiceLevelSubTitle = text(serviceLevelText, {\n alignment: 'right',\n style: serviceLevelBelow ? 'serviceLevelBelow' : 'serviceLevelAboveOrOn',\n })\n\n secondRow = [headerSubTitle, scoreServiceLevelSubTitle]\n headerAddress = text(address, { style: 'small' })\n\n const truncatedTargetPercent = round(target, 2)\n const scoreTargetText = `(Target - ${truncatedTargetPercent}%)`\n const scoreTargetSubTitle = text(scoreTargetText, {\n alignment: 'right',\n style: 'subTitle',\n })\n\n thirdRow = renderHeaderAddress\n ? [headerAddress, scoreTargetSubTitle]\n : [dummyColumn, scoreTargetSubTitle]\n }\n\n const scoreBreakdown = text(\n `${round(score.actual, 2)} / ${round(score.max, 2)}`,\n {\n alignment: 'right',\n style: 'totalScore',\n }\n )\n const scorePercentage = text(scoreText, {\n alignment: 'right',\n colSpan: 2,\n style: 'totalAuditScore',\n })\n const scoreTitle = text('Total Score', { style: 'totalScore' })\n\n const body = renderThirdRow\n ? [firstRow, secondRow, thirdRow]\n : [firstRow, secondRow]\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n if (entity.showSimplifiedDuration) {\n body.push([submittedAt, dummyColumn])\n } else {\n const startedAtInTimezone = entity.startedAt\n ? moment(entity.startedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const startedAt = text(`Started: ${startedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const submittedAtInTimezone = entity.submittedAt\n ? moment(entity.submittedAt)\n .tz(timezone)\n .format('YYYY-MM-DD HH:mm:ss z')\n : 'Not recorded'\n const submittedAt = text(`Submitted: ${submittedAtInTimezone}`, {\n colSpan: 2,\n style: 'small',\n })\n\n const momentDuration = moment.duration(Math.abs(entity.formDuration))\n const days = Math.floor(momentDuration.asDays())\n .toString()\n .padStart(2, '0')\n const hours = Math.floor(momentDuration.hours())\n .toString()\n .padStart(2, '0')\n const minutes = momentDuration\n .minutes()\n .toString()\n .padStart(2, '0')\n const seconds = momentDuration\n .seconds()\n .toString()\n .padStart(2, '0')\n const formattedFormDuration = entity.formDuration\n ? `${\n entity.formDuration < 0 ? '-' : ''\n }${days}:${hours}:${minutes}:${seconds}`\n : 'Not recorded'\n const formDuration = text(\n `Form Duration (DD:HH:MM:SS): ${formattedFormDuration}`,\n {\n colSpan: 2,\n style: 'small',\n }\n )\n\n body.push([startedAt, dummyColumn])\n body.push([submittedAt, dummyColumn])\n body.push([formDuration, dummyColumn])\n }\n\n const titleTable = twoColumnTable({\n body,\n layout: 'noBorders',\n style: 'titleTable',\n widths: ['*', 100],\n margin: [0, 0, 0, 30],\n })\n\n const totalScoreTable = twoColumnTable({\n body: [[scoreTitle, scoreBreakdown], [scorePercentage]],\n layout: 'noBorders',\n widths: ['*', 100],\n })\n\n const hLineTop = horizontalLine({ margin: [0, 10, 0, 0] })\n const hLineBottom = horizontalLine()\n\n const followUpItems = buildAuditFollowUps(followUps, { timezone })\n\n const promises = {\n entry: buildAuditContent(groupedData.items, data.settings),\n footerTemplate: buildTemplateContent(footerFields.formGroups, data),\n headerTemplate: buildTemplateContent(headerFields.formGroups, data),\n }\n\n const auditItemsTitle = [\n {\n text: 'Audit Items',\n style: {\n font: 'Gotham',\n lineHeight: 1.1,\n },\n },\n hLineTop,\n ]\n\n return Promise.props(promises)\n .then(({ entry, footerTemplate, headerTemplate }) => [\n titleTable,\n followUpItems,\n ...auditItemsTitle,\n ...headerTemplate,\n ...entry,\n hLineTop,\n totalScoreTable,\n hLineBottom,\n ...footerTemplate,\n ])\n .catch(err => {\n throw new Error(`GenerateContentError: ${err.message}`)\n })\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": "6.2.0
|
|
3
|
+
"version": "6.2.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "lib/index.js",
|
|
@@ -17,16 +17,16 @@
|
|
|
17
17
|
"precommit": "lint-staged",
|
|
18
18
|
"prepublishOnly": "yarn build",
|
|
19
19
|
"preversion": "yarn test",
|
|
20
|
-
"storybook:html": "
|
|
21
|
-
"storybook:react": "
|
|
20
|
+
"storybook:html": "sb dev -p 9001 -c .storybook-html",
|
|
21
|
+
"storybook:react": "sb dev -p 9002 -c .storybook-react",
|
|
22
|
+
"build-storybook:html": "sb build -c .storybook-html",
|
|
23
|
+
"build-storybook:react": "sb build -c .storybook-react",
|
|
22
24
|
"test": "TZ=UTC vitest run",
|
|
23
25
|
"test:ci": "yarn lint && yarn type-check && yarn test --coverage",
|
|
24
26
|
"type-check": "tsc --noEmit",
|
|
25
27
|
"type-check:watch": "yarn type-check --watch",
|
|
26
28
|
"validate:circleci": "circleci config validate -c .circleci/config.yml",
|
|
27
|
-
"version": "yarn build"
|
|
28
|
-
"watch:es": "nodemon --watch src --ext js,ts --exec \"yarn build:es\"",
|
|
29
|
-
"watch:node": "nodemon --watch src --ext js,ts --exec \"yarn build:node\""
|
|
29
|
+
"version": "yarn build"
|
|
30
30
|
},
|
|
31
31
|
"repository": {
|
|
32
32
|
"type": "git",
|
|
@@ -55,11 +55,13 @@
|
|
|
55
55
|
"@babel/preset-env": "^7.12.1",
|
|
56
56
|
"@babel/preset-react": "^7.8.3",
|
|
57
57
|
"@babel/preset-typescript": "^7.8.3",
|
|
58
|
-
"@storybook/addon-actions": "^
|
|
59
|
-
"@storybook/addon-
|
|
60
|
-
"@storybook/
|
|
61
|
-
"@storybook/html": "^
|
|
62
|
-
"@storybook/
|
|
58
|
+
"@storybook/addon-actions": "^7.6.20",
|
|
59
|
+
"@storybook/addon-essentials": "^7.6.20",
|
|
60
|
+
"@storybook/cli": "^7.6.20",
|
|
61
|
+
"@storybook/html": "^7.6.20",
|
|
62
|
+
"@storybook/html-webpack5": "^7.6.20",
|
|
63
|
+
"@storybook/react": "^7.6.20",
|
|
64
|
+
"@storybook/react-webpack5": "^7.6.20",
|
|
63
65
|
"@types/lodash": "^4.14.149",
|
|
64
66
|
"@types/node": "^12.7.5",
|
|
65
67
|
"@types/yup": "^0.26.32",
|
|
@@ -72,8 +74,9 @@
|
|
|
72
74
|
"lint-staged": "^15.2.0",
|
|
73
75
|
"mockdate": "^2.0.2",
|
|
74
76
|
"nock": "^12.0.2",
|
|
75
|
-
"nodemon": "^3.0.0",
|
|
76
77
|
"prettier": "^3.3.0",
|
|
78
|
+
"react": "^18.3.1",
|
|
79
|
+
"react-dom": "^18.3.1",
|
|
77
80
|
"react-visjs-timeline": "^1.6.0",
|
|
78
81
|
"rimraf": "^2.6.3",
|
|
79
82
|
"typescript": "^3.8.3",
|