@lighthouse/common 6.9.5 → 6.9.6
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/debug-storybook.log +1 -0
- package/dist/errors/FetchImageError.js +19 -0
- package/dist/helpers/build-fetch-url/index.js +26 -1
- package/dist/helpers/fetch-image/index.js +37 -8
- package/dist/helpers/fetch-image-for-web/index.js +36 -5
- package/dist/helpers/validate-url/index.js +15 -0
- package/dist/pdf/helpers/default-header/index.js +11 -1
- package/dist/pdf/helpers/fields/index.js +51 -8
- package/dist/pdf/helpers/generate-definition/index.js +10 -2
- package/lib/errors/FetchImageError.js +27 -0
- package/lib/errors/FetchImageError.js.map +1 -0
- package/lib/helpers/build-fetch-url/index.js +26 -1
- package/lib/helpers/build-fetch-url/index.js.map +1 -1
- package/lib/helpers/fetch-image/index.js +39 -7
- package/lib/helpers/fetch-image/index.js.map +1 -1
- package/lib/helpers/fetch-image-for-web/index.js +56 -22
- package/lib/helpers/fetch-image-for-web/index.js.map +1 -1
- package/lib/helpers/validate-url/index.js +10 -0
- package/lib/helpers/validate-url/index.js.map +1 -0
- package/lib/pdf/helpers/default-header/index.js +11 -1
- package/lib/pdf/helpers/default-header/index.js.map +1 -1
- package/lib/pdf/helpers/fields/index.js +52 -8
- package/lib/pdf/helpers/fields/index.js.map +1 -1
- package/lib/pdf/helpers/generate-definition/index.js +10 -2
- package/lib/pdf/helpers/generate-definition/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[17:05:07.504] [ERROR] Error: Unknown codemod storiesof-to-csf. Run --list for options.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.FetchImageError = void 0;
|
|
7
|
+
/**
|
|
8
|
+
* Custom error class for image fetching operations
|
|
9
|
+
* Includes context information for better debugging
|
|
10
|
+
*/
|
|
11
|
+
class FetchImageError extends Error {
|
|
12
|
+
constructor(message, context = {}) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.name = 'FetchImageError';
|
|
15
|
+
this.context = context;
|
|
16
|
+
this.url = context.url;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.FetchImageError = FetchImageError;
|
|
@@ -4,7 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.buildFetchUrl = buildFetchUrl;
|
|
7
|
+
var _index = require("../validate-url/index.js");
|
|
7
8
|
function buildFetchUrl(url, options) {
|
|
9
|
+
// Validate url parameter
|
|
10
|
+
if (!url || typeof url !== 'string') {
|
|
11
|
+
throw new Error(`buildFetchUrl: Invalid url parameter. url=${JSON.stringify(url)}`);
|
|
12
|
+
}
|
|
8
13
|
const {
|
|
9
14
|
awsS3BaseUrl,
|
|
10
15
|
cloudfrontBaseUrl = '',
|
|
@@ -19,6 +24,10 @@ function buildFetchUrl(url, options) {
|
|
|
19
24
|
Signature
|
|
20
25
|
} = options;
|
|
21
26
|
if (shouldUseCloudfront) {
|
|
27
|
+
// Validate cloudfrontBaseUrl when using CloudFront
|
|
28
|
+
if (!cloudfrontBaseUrl) {
|
|
29
|
+
throw new Error(`buildFetchUrl: cloudfrontBaseUrl is required when shouldUseCloudfront=true. cloudfrontBaseUrl=${JSON.stringify(cloudfrontBaseUrl)}`);
|
|
30
|
+
}
|
|
22
31
|
const isWebContext = shouldUseCloudfront && typeof window === 'object';
|
|
23
32
|
const paramMap = {
|
|
24
33
|
width,
|
|
@@ -33,7 +42,18 @@ function buildFetchUrl(url, options) {
|
|
|
33
42
|
}
|
|
34
43
|
const params = Object.entries(paramMap).filter(([, value]) => value != null).map(([key, value]) => `${key}=${String(value)}`);
|
|
35
44
|
const paramsString = params.join('&');
|
|
36
|
-
|
|
45
|
+
const result = `${cloudfrontBaseUrl}/${url}?${paramsString}`;
|
|
46
|
+
|
|
47
|
+
// Validate output is absolute URL
|
|
48
|
+
if (!(0, _index.isAbsoluteUrl)(result)) {
|
|
49
|
+
throw new Error(`buildFetchUrl: Constructed URL is not absolute. cloudfrontBaseUrl=${JSON.stringify(cloudfrontBaseUrl)}, url=${JSON.stringify(url)}, result=${JSON.stringify(result)}`);
|
|
50
|
+
}
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Validate required base URLs for Cloudinary path
|
|
55
|
+
if (!cloudinaryBaseUrl || !awsS3BaseUrl) {
|
|
56
|
+
throw new Error(`buildFetchUrl: cloudinaryBaseUrl and awsS3BaseUrl are required. cloudinaryBaseUrl=${JSON.stringify(cloudinaryBaseUrl)}, awsS3BaseUrl=${JSON.stringify(awsS3BaseUrl)}`);
|
|
37
57
|
}
|
|
38
58
|
const transformations = [];
|
|
39
59
|
let transformationsString = '';
|
|
@@ -43,5 +63,10 @@ function buildFetchUrl(url, options) {
|
|
|
43
63
|
if (fit) transformations.push('c_fit');
|
|
44
64
|
transformationsString = `${transformations.join(',')}/`;
|
|
45
65
|
const fetchUrl = `${cloudinaryBaseUrl}/${transformationsString}${awsS3BaseUrl}/${url}`;
|
|
66
|
+
|
|
67
|
+
// Validate output is absolute URL
|
|
68
|
+
if (!(0, _index.isAbsoluteUrl)(fetchUrl)) {
|
|
69
|
+
throw new Error(`buildFetchUrl: Constructed URL is not absolute. cloudinaryBaseUrl=${JSON.stringify(cloudinaryBaseUrl)}, awsS3BaseUrl=${JSON.stringify(awsS3BaseUrl)}, url=${JSON.stringify(url)}, result=${JSON.stringify(fetchUrl)}`);
|
|
70
|
+
}
|
|
46
71
|
return fetchUrl;
|
|
47
72
|
}
|
|
@@ -15,6 +15,7 @@ var _constants = require("../../constants");
|
|
|
15
15
|
var _images = require("../../images");
|
|
16
16
|
var _fetchImageForPdfGeneratorService = require("../fetch-image-for-pdf-generator-service");
|
|
17
17
|
var _fetchImageForWeb = require("../fetch-image-for-web");
|
|
18
|
+
var _index = require("../validate-url/index.js");
|
|
18
19
|
// NOTE use the native fetch if it's available in the browser, because the
|
|
19
20
|
// ponyfill (which actually uses the github polyfill) does not support all the
|
|
20
21
|
// same options as native fetch
|
|
@@ -37,8 +38,29 @@ const defaultOptions = {
|
|
|
37
38
|
};
|
|
38
39
|
function fetchImage(url, options = {}) {
|
|
39
40
|
const {
|
|
40
|
-
shouldUseCloudfront
|
|
41
|
+
shouldUseCloudfront,
|
|
42
|
+
isHeader = false,
|
|
43
|
+
context = {}
|
|
41
44
|
} = options;
|
|
45
|
+
|
|
46
|
+
// Validate url parameter
|
|
47
|
+
if (!url || typeof url !== 'string') {
|
|
48
|
+
const error = new Error(`fetchImage: Invalid url parameter. url=${JSON.stringify(url)}`);
|
|
49
|
+
if (isHeader) {
|
|
50
|
+
console.error('FetchImageHeaderError', {
|
|
51
|
+
message: error.message,
|
|
52
|
+
url,
|
|
53
|
+
context
|
|
54
|
+
});
|
|
55
|
+
return fetchImage(_constants.LIGHTHOUSE_LOGO_URL, defaultOptions);
|
|
56
|
+
}
|
|
57
|
+
console.error('FetchImageError', {
|
|
58
|
+
message: error.message,
|
|
59
|
+
url,
|
|
60
|
+
context
|
|
61
|
+
});
|
|
62
|
+
return _bluebird.default.resolve(_images.imageNotFound);
|
|
63
|
+
}
|
|
42
64
|
if (shouldUseCloudfront) {
|
|
43
65
|
const isWebContext = typeof window === 'object';
|
|
44
66
|
return isWebContext ?
|
|
@@ -50,9 +72,6 @@ function fetchImage(url, options = {}) {
|
|
|
50
72
|
...defaultOptions,
|
|
51
73
|
...options
|
|
52
74
|
};
|
|
53
|
-
const {
|
|
54
|
-
isHeader = false
|
|
55
|
-
} = options;
|
|
56
75
|
return fetch(encodedUrl, fetchOptions).then(response => {
|
|
57
76
|
const contentHeader = response.headers.get('content-length');
|
|
58
77
|
const contentType = response.headers.get('content-type');
|
|
@@ -60,10 +79,10 @@ function fetchImage(url, options = {}) {
|
|
|
60
79
|
// NOTE: the response will be ok but we won't be able to render any
|
|
61
80
|
// image meaning pdfmake will error. Raise error here and return early.
|
|
62
81
|
if (contentHeader === '0') {
|
|
63
|
-
return _bluebird.default.reject(new Error(`Failed to fetch image as no content length: ${
|
|
82
|
+
return _bluebird.default.reject(new Error(`Failed to fetch image as no content length: ${url}`));
|
|
64
83
|
}
|
|
65
84
|
if (!response.ok) {
|
|
66
|
-
return _bluebird.default.reject(new Error(`Failed to fetch image: ${
|
|
85
|
+
return _bluebird.default.reject(new Error(`Failed to fetch image: ${url}`));
|
|
67
86
|
}
|
|
68
87
|
const imageType = contentTypes[contentType];
|
|
69
88
|
return response.arrayBuffer().then(buffer => ({
|
|
@@ -85,10 +104,20 @@ function fetchImage(url, options = {}) {
|
|
|
85
104
|
}).catch(error => {
|
|
86
105
|
if (isHeader) {
|
|
87
106
|
// NOTE: Replace failed headers with LH logo
|
|
88
|
-
console.error('FetchImageHeaderError',
|
|
107
|
+
console.error('FetchImageHeaderError', {
|
|
108
|
+
url,
|
|
109
|
+
message: error.message,
|
|
110
|
+
context,
|
|
111
|
+
stack: error.stack
|
|
112
|
+
});
|
|
89
113
|
return fetchImage(_constants.LIGHTHOUSE_LOGO_URL, defaultOptions);
|
|
90
114
|
}
|
|
91
|
-
console.error(
|
|
115
|
+
console.error('FetchImageError', {
|
|
116
|
+
url,
|
|
117
|
+
message: error.message,
|
|
118
|
+
context,
|
|
119
|
+
stack: error.stack
|
|
120
|
+
});
|
|
92
121
|
return _images.imageNotFound;
|
|
93
122
|
});
|
|
94
123
|
}
|
|
@@ -6,13 +6,34 @@ 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 _index = require("../validate-url/index.js");
|
|
9
10
|
const fetchImageForWeb = async function (url, options) {
|
|
10
11
|
const {
|
|
11
12
|
isHeader = false,
|
|
12
13
|
Signature,
|
|
13
14
|
Policy,
|
|
14
|
-
KeyPairId
|
|
15
|
+
KeyPairId,
|
|
16
|
+
context = {}
|
|
15
17
|
} = options;
|
|
18
|
+
|
|
19
|
+
// Validate url parameter
|
|
20
|
+
if (!url || typeof url !== 'string') {
|
|
21
|
+
const error = new Error(`fetchImageForWeb: Invalid url parameter. url=${JSON.stringify(url)}`);
|
|
22
|
+
if (isHeader) {
|
|
23
|
+
console.error('FetchImageHeaderError', {
|
|
24
|
+
message: error.message,
|
|
25
|
+
url,
|
|
26
|
+
context
|
|
27
|
+
});
|
|
28
|
+
return (0, _fetchLighthouseLogo.fetchLighthouseLogo)();
|
|
29
|
+
}
|
|
30
|
+
console.error('FetchImageError', {
|
|
31
|
+
message: error.message,
|
|
32
|
+
url,
|
|
33
|
+
context
|
|
34
|
+
});
|
|
35
|
+
return _images.imageNotFound;
|
|
36
|
+
}
|
|
16
37
|
try {
|
|
17
38
|
const firstParamConnector = url.indexOf('?') > -1 ? '&' : '?';
|
|
18
39
|
const hasSignatureParams = url.includes('Signature=') && url.includes('Policy=') && url.includes('Key-Pair-Id=');
|
|
@@ -21,19 +42,29 @@ const fetchImageForWeb = async function (url, options) {
|
|
|
21
42
|
const imageResponse = await fetch(constructedUrl);
|
|
22
43
|
const contentLengthHeader = imageResponse.headers.get('content-length');
|
|
23
44
|
if (contentLengthHeader === '0') {
|
|
24
|
-
return Promise.reject(new Error(`Failed to fetch image as no content length: ${
|
|
45
|
+
return Promise.reject(new Error(`Failed to fetch image as no content length: ${url}`));
|
|
25
46
|
}
|
|
26
47
|
if (!imageResponse.ok) {
|
|
27
|
-
return Promise.reject(new Error(`Failed to fetch image: ${
|
|
48
|
+
return Promise.reject(new Error(`Failed to fetch image: ${url}`));
|
|
28
49
|
}
|
|
29
50
|
return await imageResponse.arrayBuffer();
|
|
30
51
|
} catch (error) {
|
|
31
52
|
if (isHeader) {
|
|
32
53
|
// NOTE: Replace failed headers with LH logo
|
|
33
|
-
console.error('FetchImageHeaderError',
|
|
54
|
+
console.error('FetchImageHeaderError', {
|
|
55
|
+
url,
|
|
56
|
+
message: error.message,
|
|
57
|
+
context,
|
|
58
|
+
stack: error.stack
|
|
59
|
+
});
|
|
34
60
|
return (0, _fetchLighthouseLogo.fetchLighthouseLogo)();
|
|
35
61
|
}
|
|
36
|
-
console.error(
|
|
62
|
+
console.error('FetchImageError', {
|
|
63
|
+
url,
|
|
64
|
+
message: error.message,
|
|
65
|
+
context,
|
|
66
|
+
stack: error.stack
|
|
67
|
+
});
|
|
37
68
|
return _images.imageNotFound;
|
|
38
69
|
}
|
|
39
70
|
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.isAbsoluteUrl = isAbsoluteUrl;
|
|
7
|
+
/**
|
|
8
|
+
* Checks if a URL is absolute (starts with http:// or https://)
|
|
9
|
+
* @param {string} url - The URL to validate
|
|
10
|
+
* @returns {boolean} - True if URL is absolute, false otherwise
|
|
11
|
+
*/
|
|
12
|
+
function isAbsoluteUrl(url) {
|
|
13
|
+
if (!url || typeof url !== 'string') return false;
|
|
14
|
+
return url.startsWith('http://') || url.startsWith('https://');
|
|
15
|
+
}
|
|
@@ -5,6 +5,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.defaultHeader = defaultHeader;
|
|
7
7
|
var _helpers = require("../../../helpers");
|
|
8
|
+
var _constants = require("../../../constants");
|
|
9
|
+
var _index = require("../../../helpers/validate-url/index.js");
|
|
8
10
|
function defaultHeader({
|
|
9
11
|
Signature,
|
|
10
12
|
Policy,
|
|
@@ -19,7 +21,15 @@ function defaultHeader({
|
|
|
19
21
|
timestamp,
|
|
20
22
|
timezone
|
|
21
23
|
});
|
|
22
|
-
|
|
24
|
+
|
|
25
|
+
// Validate logoUrl and use fallback if invalid
|
|
26
|
+
const effectiveLogoUrl = (0, _index.isAbsoluteUrl)(logoUrl) ? logoUrl : _constants.LIGHTHOUSE_LOGO_URL;
|
|
27
|
+
if (!(0, _index.isAbsoluteUrl)(logoUrl)) {
|
|
28
|
+
console.warn('defaultHeader: Invalid logoUrl, using Lighthouse logo', {
|
|
29
|
+
providedLogoUrl: logoUrl
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
return (0, _helpers.fetchImage)(effectiveLogoUrl, {
|
|
23
33
|
Signature,
|
|
24
34
|
Policy,
|
|
25
35
|
KeyPairId,
|
|
@@ -41,7 +41,9 @@ function buildImage(options) {
|
|
|
41
41
|
height = 210,
|
|
42
42
|
settings = {},
|
|
43
43
|
signedAsset,
|
|
44
|
-
width = 210
|
|
44
|
+
width = 210,
|
|
45
|
+
fieldLabel,
|
|
46
|
+
fieldType = 'image'
|
|
45
47
|
} = options;
|
|
46
48
|
const {
|
|
47
49
|
awsS3BaseUrl,
|
|
@@ -71,7 +73,15 @@ function buildImage(options) {
|
|
|
71
73
|
});
|
|
72
74
|
|
|
73
75
|
// NOTE: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used in this context
|
|
74
|
-
return (0, _helpers.fetchImage)(url,
|
|
76
|
+
return (0, _helpers.fetchImage)(url, {
|
|
77
|
+
...settings,
|
|
78
|
+
context: {
|
|
79
|
+
stage: 'field',
|
|
80
|
+
fieldLabel,
|
|
81
|
+
fieldType,
|
|
82
|
+
filepath
|
|
83
|
+
}
|
|
84
|
+
}).then(base64String => ({
|
|
75
85
|
alignment,
|
|
76
86
|
fit: [width, height],
|
|
77
87
|
image: base64String,
|
|
@@ -121,7 +131,14 @@ function buildSummaryField({
|
|
|
121
131
|
};
|
|
122
132
|
}
|
|
123
133
|
// NOTE: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used in this context
|
|
124
|
-
return (0, _helpers.fetchImage)(value,
|
|
134
|
+
return (0, _helpers.fetchImage)(value, {
|
|
135
|
+
...settings,
|
|
136
|
+
context: {
|
|
137
|
+
stage: 'field',
|
|
138
|
+
fieldLabel: field.label,
|
|
139
|
+
fieldType: 'signature'
|
|
140
|
+
}
|
|
141
|
+
}).then(base64String => {
|
|
125
142
|
return {
|
|
126
143
|
alignment: 'left',
|
|
127
144
|
image: base64String,
|
|
@@ -145,7 +162,9 @@ function buildSummaryField({
|
|
|
145
162
|
height: 140,
|
|
146
163
|
width: 140,
|
|
147
164
|
settings,
|
|
148
|
-
signedAsset: signedAssets && (0, _lodash.isArray)(signedAssets) ? signedAssets[0] : null
|
|
165
|
+
signedAsset: signedAssets && (0, _lodash.isArray)(signedAssets) ? signedAssets[0] : null,
|
|
166
|
+
fieldLabel: field.label,
|
|
167
|
+
fieldType: 'media'
|
|
149
168
|
});
|
|
150
169
|
return image;
|
|
151
170
|
}
|
|
@@ -244,7 +263,14 @@ function buildTemplateFieldRow({
|
|
|
244
263
|
if (isSignatureField) {
|
|
245
264
|
if (!value) return [labelText, ''];
|
|
246
265
|
// NOTE: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used in this context
|
|
247
|
-
return (0, _helpers.fetchImage)(value,
|
|
266
|
+
return (0, _helpers.fetchImage)(value, {
|
|
267
|
+
...settings,
|
|
268
|
+
context: {
|
|
269
|
+
stage: 'field',
|
|
270
|
+
fieldLabel: label,
|
|
271
|
+
fieldType: 'signature'
|
|
272
|
+
}
|
|
273
|
+
}).then(base64String => {
|
|
248
274
|
const values = {
|
|
249
275
|
alignment: 'left',
|
|
250
276
|
image: base64String,
|
|
@@ -254,22 +280,39 @@ function buildTemplateFieldRow({
|
|
|
254
280
|
});
|
|
255
281
|
}
|
|
256
282
|
if (isDisplayImageField) {
|
|
257
|
-
|
|
283
|
+
// Guard against nullish values
|
|
284
|
+
if (!value) {
|
|
285
|
+
return [[], {}];
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
// Ensure value is always treated as an array of filepaths
|
|
289
|
+
const filepaths = (0, _lodash.isArray)(value) ? value : [value];
|
|
290
|
+
return _bluebird.default.map(filepaths, (filepath, index) => {
|
|
258
291
|
const signedAssetValue = (0, _lodash.isArray)(signedAssets) ? signedAssets[index] : signedAssets;
|
|
259
292
|
return buildImage({
|
|
260
293
|
filepath,
|
|
261
294
|
settings,
|
|
262
|
-
signedAsset: signedAssetValue
|
|
295
|
+
signedAsset: signedAssetValue,
|
|
296
|
+
fieldLabel: label,
|
|
297
|
+
fieldType: 'image-display'
|
|
263
298
|
});
|
|
264
299
|
}).then(fieldImages => [fieldImages, {}]);
|
|
265
300
|
}
|
|
266
301
|
if (isPhotoField) {
|
|
302
|
+
// Guard against nullish values
|
|
303
|
+
if (!value || (0, _lodash.isArray)(value) && value.length === 0) {
|
|
304
|
+
return [labelText, {
|
|
305
|
+
text: ''
|
|
306
|
+
}];
|
|
307
|
+
}
|
|
267
308
|
return _bluebird.default.map(value, (filepath, index) => {
|
|
268
309
|
const signedAssetValue = (0, _lodash.isArray)(signedAssets) ? signedAssets[index] : signedAssets;
|
|
269
310
|
return buildImage({
|
|
270
311
|
filepath,
|
|
271
312
|
settings,
|
|
272
|
-
signedAsset: signedAssetValue
|
|
313
|
+
signedAsset: signedAssetValue,
|
|
314
|
+
fieldLabel: label,
|
|
315
|
+
fieldType: 'media'
|
|
273
316
|
});
|
|
274
317
|
}).then(fieldImages => {
|
|
275
318
|
const tables = !(0, _lodash.isEmpty)(fieldImages) ? (0, _.imageTables)(fieldImages) : [];
|
|
@@ -52,8 +52,16 @@ function generateDefinition(options) {
|
|
|
52
52
|
pageOrientation,
|
|
53
53
|
pageSize,
|
|
54
54
|
styles: pdfStyles
|
|
55
|
-
})).catch(
|
|
56
|
-
|
|
55
|
+
})).catch(error => {
|
|
56
|
+
// Preserve structured error information for better debugging
|
|
57
|
+
console.error('GenerateDefinitionError', {
|
|
58
|
+
message: error.message,
|
|
59
|
+
context: error.context,
|
|
60
|
+
url: error.url,
|
|
61
|
+
type: options.type,
|
|
62
|
+
stack: error.stack
|
|
63
|
+
});
|
|
64
|
+
throw error; // Preserve original error instead of wrapping
|
|
57
65
|
});
|
|
58
66
|
}
|
|
59
67
|
function pdfHeader(header) {
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import _createClass from "@babel/runtime/helpers/createClass";
|
|
2
|
+
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
|
|
3
|
+
import _possibleConstructorReturn from "@babel/runtime/helpers/possibleConstructorReturn";
|
|
4
|
+
import _getPrototypeOf from "@babel/runtime/helpers/getPrototypeOf";
|
|
5
|
+
import _inherits from "@babel/runtime/helpers/inherits";
|
|
6
|
+
import _wrapNativeSuper from "@babel/runtime/helpers/wrapNativeSuper";
|
|
7
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
8
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
9
|
+
/**
|
|
10
|
+
* Custom error class for image fetching operations
|
|
11
|
+
* Includes context information for better debugging
|
|
12
|
+
*/
|
|
13
|
+
export var FetchImageError = /*#__PURE__*/function (_Error) {
|
|
14
|
+
function FetchImageError(message) {
|
|
15
|
+
var _this;
|
|
16
|
+
var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
17
|
+
_classCallCheck(this, FetchImageError);
|
|
18
|
+
_this = _callSuper(this, FetchImageError, [message]);
|
|
19
|
+
_this.name = 'FetchImageError';
|
|
20
|
+
_this.context = context;
|
|
21
|
+
_this.url = context.url;
|
|
22
|
+
return _this;
|
|
23
|
+
}
|
|
24
|
+
_inherits(FetchImageError, _Error);
|
|
25
|
+
return _createClass(FetchImageError);
|
|
26
|
+
}(/*#__PURE__*/_wrapNativeSuper(Error));
|
|
27
|
+
//# sourceMappingURL=FetchImageError.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FetchImageError.js","names":["FetchImageError","_Error","message","_this","context","arguments","length","undefined","_classCallCheck","_callSuper","name","url","_inherits","_createClass","_wrapNativeSuper","Error"],"sources":["../../src/errors/FetchImageError.js"],"sourcesContent":["/**\n * Custom error class for image fetching operations\n * Includes context information for better debugging\n */\nexport class FetchImageError extends Error {\n constructor(message, context = {}) {\n super(message)\n this.name = 'FetchImageError'\n this.context = context\n this.url = context.url\n }\n}\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA,WAAaA,eAAe,0BAAAC,MAAA;EAC1B,SAAAD,gBAAYE,OAAO,EAAgB;IAAA,IAAAC,KAAA;IAAA,IAAdC,OAAO,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC,CAAC;IAAAG,eAAA,OAAAR,eAAA;IAC/BG,KAAA,GAAAM,UAAA,OAAAT,eAAA,GAAME,OAAO;IACbC,KAAA,CAAKO,IAAI,GAAG,iBAAiB;IAC7BP,KAAA,CAAKC,OAAO,GAAGA,OAAO;IACtBD,KAAA,CAAKQ,GAAG,GAAGP,OAAO,CAACO,GAAG;IAAA,OAAAR,KAAA;EACxB;EAACS,SAAA,CAAAZ,eAAA,EAAAC,MAAA;EAAA,OAAAY,YAAA,CAAAb,eAAA;AAAA,eAAAc,gBAAA,CANkCC,KAAK","ignoreList":[]}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
2
2
|
import _typeof from "@babel/runtime/helpers/typeof";
|
|
3
|
+
import { isAbsoluteUrl } from '../validate-url/index.js';
|
|
3
4
|
export function buildFetchUrl(url, options) {
|
|
5
|
+
// Validate url parameter
|
|
6
|
+
if (!url || typeof url !== 'string') {
|
|
7
|
+
throw new Error("buildFetchUrl: Invalid url parameter. url=".concat(JSON.stringify(url)));
|
|
8
|
+
}
|
|
4
9
|
var awsS3BaseUrl = options.awsS3BaseUrl,
|
|
5
10
|
_options$cloudfrontBa = options.cloudfrontBaseUrl,
|
|
6
11
|
cloudfrontBaseUrl = _options$cloudfrontBa === void 0 ? '' : _options$cloudfrontBa,
|
|
@@ -14,6 +19,10 @@ export function buildFetchUrl(url, options) {
|
|
|
14
19
|
KeyPairId = options.KeyPairId,
|
|
15
20
|
Signature = options.Signature;
|
|
16
21
|
if (shouldUseCloudfront) {
|
|
22
|
+
// Validate cloudfrontBaseUrl when using CloudFront
|
|
23
|
+
if (!cloudfrontBaseUrl) {
|
|
24
|
+
throw new Error("buildFetchUrl: cloudfrontBaseUrl is required when shouldUseCloudfront=true. cloudfrontBaseUrl=".concat(JSON.stringify(cloudfrontBaseUrl)));
|
|
25
|
+
}
|
|
17
26
|
var isWebContext = shouldUseCloudfront && (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object';
|
|
18
27
|
var paramMap = {
|
|
19
28
|
width: width,
|
|
@@ -37,7 +46,18 @@ export function buildFetchUrl(url, options) {
|
|
|
37
46
|
return "".concat(key, "=").concat(String(value));
|
|
38
47
|
});
|
|
39
48
|
var paramsString = params.join('&');
|
|
40
|
-
|
|
49
|
+
var result = "".concat(cloudfrontBaseUrl, "/").concat(url, "?").concat(paramsString);
|
|
50
|
+
|
|
51
|
+
// Validate output is absolute URL
|
|
52
|
+
if (!isAbsoluteUrl(result)) {
|
|
53
|
+
throw new Error("buildFetchUrl: Constructed URL is not absolute. cloudfrontBaseUrl=".concat(JSON.stringify(cloudfrontBaseUrl), ", url=").concat(JSON.stringify(url), ", result=").concat(JSON.stringify(result)));
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Validate required base URLs for Cloudinary path
|
|
59
|
+
if (!cloudinaryBaseUrl || !awsS3BaseUrl) {
|
|
60
|
+
throw new Error("buildFetchUrl: cloudinaryBaseUrl and awsS3BaseUrl are required. cloudinaryBaseUrl=".concat(JSON.stringify(cloudinaryBaseUrl), ", awsS3BaseUrl=").concat(JSON.stringify(awsS3BaseUrl)));
|
|
41
61
|
}
|
|
42
62
|
var transformations = [];
|
|
43
63
|
var transformationsString = '';
|
|
@@ -47,6 +67,11 @@ export function buildFetchUrl(url, options) {
|
|
|
47
67
|
if (fit) transformations.push('c_fit');
|
|
48
68
|
transformationsString = "".concat(transformations.join(','), "/");
|
|
49
69
|
var fetchUrl = "".concat(cloudinaryBaseUrl, "/").concat(transformationsString).concat(awsS3BaseUrl, "/").concat(url);
|
|
70
|
+
|
|
71
|
+
// Validate output is absolute URL
|
|
72
|
+
if (!isAbsoluteUrl(fetchUrl)) {
|
|
73
|
+
throw new Error("buildFetchUrl: Constructed URL is not absolute. cloudinaryBaseUrl=".concat(JSON.stringify(cloudinaryBaseUrl), ", awsS3BaseUrl=").concat(JSON.stringify(awsS3BaseUrl), ", url=").concat(JSON.stringify(url), ", result=").concat(JSON.stringify(fetchUrl)));
|
|
74
|
+
}
|
|
50
75
|
return fetchUrl;
|
|
51
76
|
}
|
|
52
77
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
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","
|
|
1
|
+
{"version":3,"file":"index.js","names":["isAbsoluteUrl","buildFetchUrl","url","options","Error","concat","JSON","stringify","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","String","paramsString","join","result","transformations","transformationsString","push","toString","fetchUrl"],"sources":["../../../src/helpers/build-fetch-url/index.js"],"sourcesContent":["import { isAbsoluteUrl } from '../validate-url/index.js'\n\nexport function buildFetchUrl(url, options) {\n // Validate url parameter\n if (!url || typeof url !== 'string') {\n throw new Error(\n `buildFetchUrl: Invalid url parameter. url=${JSON.stringify(url)}`\n )\n }\n\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 // Validate cloudfrontBaseUrl when using CloudFront\n if (!cloudfrontBaseUrl) {\n throw new Error(\n `buildFetchUrl: cloudfrontBaseUrl is required when shouldUseCloudfront=true. cloudfrontBaseUrl=${JSON.stringify(cloudfrontBaseUrl)}`\n )\n }\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 const result = `${cloudfrontBaseUrl}/${url}?${paramsString}`\n\n // Validate output is absolute URL\n if (!isAbsoluteUrl(result)) {\n throw new Error(\n `buildFetchUrl: Constructed URL is not absolute. cloudfrontBaseUrl=${JSON.stringify(cloudfrontBaseUrl)}, url=${JSON.stringify(url)}, result=${JSON.stringify(result)}`\n )\n }\n\n return result\n }\n\n // Validate required base URLs for Cloudinary path\n if (!cloudinaryBaseUrl || !awsS3BaseUrl) {\n throw new Error(\n `buildFetchUrl: cloudinaryBaseUrl and awsS3BaseUrl are required. cloudinaryBaseUrl=${JSON.stringify(cloudinaryBaseUrl)}, awsS3BaseUrl=${JSON.stringify(awsS3BaseUrl)}`\n )\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 // Validate output is absolute URL\n if (!isAbsoluteUrl(fetchUrl)) {\n throw new Error(\n `buildFetchUrl: Constructed URL is not absolute. cloudinaryBaseUrl=${JSON.stringify(cloudinaryBaseUrl)}, awsS3BaseUrl=${JSON.stringify(awsS3BaseUrl)}, url=${JSON.stringify(url)}, result=${JSON.stringify(fetchUrl)}`\n )\n }\n\n return fetchUrl\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,6 +8,7 @@ import { LIGHTHOUSE_LOGO_URL } from '../../constants';
|
|
|
8
8
|
import { imageNotFound } from '../../images';
|
|
9
9
|
import { fetchImageForPdfGeneratorService } from '../fetch-image-for-pdf-generator-service';
|
|
10
10
|
import { fetchImageForWeb } from '../fetch-image-for-web';
|
|
11
|
+
import { isAbsoluteUrl } from '../validate-url/index.js';
|
|
11
12
|
|
|
12
13
|
// NOTE use the native fetch if it's available in the browser, because the
|
|
13
14
|
// ponyfill (which actually uses the github polyfill) does not support all the
|
|
@@ -31,7 +32,30 @@ var defaultOptions = {
|
|
|
31
32
|
};
|
|
32
33
|
export function fetchImage(url) {
|
|
33
34
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
34
|
-
var shouldUseCloudfront = options.shouldUseCloudfront
|
|
35
|
+
var shouldUseCloudfront = options.shouldUseCloudfront,
|
|
36
|
+
_options$isHeader = options.isHeader,
|
|
37
|
+
isHeader = _options$isHeader === void 0 ? false : _options$isHeader,
|
|
38
|
+
_options$context = options.context,
|
|
39
|
+
context = _options$context === void 0 ? {} : _options$context;
|
|
40
|
+
|
|
41
|
+
// Validate url parameter
|
|
42
|
+
if (!url || typeof url !== 'string') {
|
|
43
|
+
var error = new Error("fetchImage: Invalid url parameter. url=".concat(JSON.stringify(url)));
|
|
44
|
+
if (isHeader) {
|
|
45
|
+
console.error('FetchImageHeaderError', {
|
|
46
|
+
message: error.message,
|
|
47
|
+
url: url,
|
|
48
|
+
context: context
|
|
49
|
+
});
|
|
50
|
+
return fetchImage(LIGHTHOUSE_LOGO_URL, defaultOptions);
|
|
51
|
+
}
|
|
52
|
+
console.error('FetchImageError', {
|
|
53
|
+
message: error.message,
|
|
54
|
+
url: url,
|
|
55
|
+
context: context
|
|
56
|
+
});
|
|
57
|
+
return Promise.resolve(imageNotFound);
|
|
58
|
+
}
|
|
35
59
|
if (shouldUseCloudfront) {
|
|
36
60
|
var isWebContext = (typeof window === "undefined" ? "undefined" : _typeof(window)) === 'object';
|
|
37
61
|
return isWebContext ?
|
|
@@ -40,8 +64,6 @@ export function fetchImage(url) {
|
|
|
40
64
|
}
|
|
41
65
|
var encodedUrl = encodeURI(url);
|
|
42
66
|
var fetchOptions = _objectSpread(_objectSpread({}, defaultOptions), options);
|
|
43
|
-
var _options$isHeader = options.isHeader,
|
|
44
|
-
isHeader = _options$isHeader === void 0 ? false : _options$isHeader;
|
|
45
67
|
return fetch(encodedUrl, fetchOptions).then(function (response) {
|
|
46
68
|
var contentHeader = response.headers.get('content-length');
|
|
47
69
|
var contentType = response.headers.get('content-type');
|
|
@@ -49,10 +71,10 @@ export function fetchImage(url) {
|
|
|
49
71
|
// NOTE: the response will be ok but we won't be able to render any
|
|
50
72
|
// image meaning pdfmake will error. Raise error here and return early.
|
|
51
73
|
if (contentHeader === '0') {
|
|
52
|
-
return Promise.reject(new Error("Failed to fetch image as no content length: ".concat(
|
|
74
|
+
return Promise.reject(new Error("Failed to fetch image as no content length: ".concat(url)));
|
|
53
75
|
}
|
|
54
76
|
if (!response.ok) {
|
|
55
|
-
return Promise.reject(new Error("Failed to fetch image: ".concat(
|
|
77
|
+
return Promise.reject(new Error("Failed to fetch image: ".concat(url)));
|
|
56
78
|
}
|
|
57
79
|
var imageType = contentTypes[contentType];
|
|
58
80
|
return response.arrayBuffer().then(function (buffer) {
|
|
@@ -75,10 +97,20 @@ export function fetchImage(url) {
|
|
|
75
97
|
}).catch(function (error) {
|
|
76
98
|
if (isHeader) {
|
|
77
99
|
// NOTE: Replace failed headers with LH logo
|
|
78
|
-
console.error('FetchImageHeaderError',
|
|
100
|
+
console.error('FetchImageHeaderError', {
|
|
101
|
+
url: url,
|
|
102
|
+
message: error.message,
|
|
103
|
+
context: context,
|
|
104
|
+
stack: error.stack
|
|
105
|
+
});
|
|
79
106
|
return fetchImage(LIGHTHOUSE_LOGO_URL, defaultOptions);
|
|
80
107
|
}
|
|
81
|
-
console.error(
|
|
108
|
+
console.error('FetchImageError', {
|
|
109
|
+
url: url,
|
|
110
|
+
message: error.message,
|
|
111
|
+
context: context,
|
|
112
|
+
stack: error.stack
|
|
113
|
+
});
|
|
82
114
|
return imageNotFound;
|
|
83
115
|
});
|
|
84
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["fetchPonyfill","Promise","LIGHTHOUSE_LOGO_URL","imageNotFound","fetchImageForPdfGeneratorService","fetchImageForWeb","fetch","self","_typeof","contentTypes","defaultOptions","cache","fetchImage","url","options","arguments","length","undefined","shouldUseCloudfront","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","btoa","base64String","isJpeg","startsWith","validateJpegImage","isPng","validatePngImage","base64string","src","imageData","from","atob","replace","c","charCodeAt","imageCorrupted","sequence","i"],"sources":["../../../src/helpers/fetch-image/index.js"],"sourcesContent":["import 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 } = options\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\nexport function 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":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["fetchPonyfill","Promise","LIGHTHOUSE_LOGO_URL","imageNotFound","fetchImageForPdfGeneratorService","fetchImageForWeb","isAbsoluteUrl","fetch","self","_typeof","contentTypes","defaultOptions","cache","fetchImage","url","options","arguments","length","undefined","shouldUseCloudfront","_options$isHeader","isHeader","_options$context","context","error","Error","concat","JSON","stringify","console","message","resolve","isWebContext","window","encodedUrl","encodeURI","fetchOptions","_objectSpread","then","response","contentHeader","headers","get","contentType","reject","ok","imageType","arrayBuffer","buffer","_ref","base64Flag","imageStr","arrayBufferToBase64","base64","isValid","validateBase64Image","catch","stack","binary","bytes","slice","call","Uint8Array","forEach","b","String","fromCharCode","btoa","base64String","isJpeg","startsWith","validateJpegImage","isPng","validatePngImage","base64string","src","imageData","from","atob","replace","c","charCodeAt","imageCorrupted","sequence","i"],"sources":["../../../src/helpers/fetch-image/index.js"],"sourcesContent":["import 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'\nimport { isAbsoluteUrl } from '../validate-url/index.js'\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, isHeader = false, context = {} } = options\n\n // Validate url parameter\n if (!url || typeof url !== 'string') {\n const error = new Error(\n `fetchImage: Invalid url parameter. url=${JSON.stringify(url)}`\n )\n if (isHeader) {\n console.error('FetchImageHeaderError', {\n message: error.message,\n url,\n context,\n })\n return fetchImage(LIGHTHOUSE_LOGO_URL, defaultOptions)\n }\n console.error('FetchImageError', {\n message: error.message,\n url,\n context,\n })\n return Promise.resolve(imageNotFound)\n }\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\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: ${url}`)\n )\n }\n\n if (!response.ok) {\n return Promise.reject(new Error(`Failed to fetch image: ${url}`))\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', {\n url,\n message: error.message,\n context,\n stack: error.stack,\n })\n return fetchImage(LIGHTHOUSE_LOGO_URL, defaultOptions)\n }\n\n console.error('FetchImageError', {\n url,\n message: error.message,\n context,\n stack: error.stack,\n })\n return imageNotFound\n })\n}\n\nexport function 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":[]}
|
|
@@ -2,57 +2,91 @@ 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 { isAbsoluteUrl } from '../validate-url/index.js';
|
|
5
6
|
export var fetchImageForWeb = /*#__PURE__*/function () {
|
|
6
7
|
var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(url, options) {
|
|
7
|
-
var _options$isHeader, isHeader, Signature, Policy, KeyPairId, firstParamConnector, hasSignatureParams, constructedUrl, imageResponse, contentLengthHeader, _t;
|
|
8
|
+
var _options$isHeader, isHeader, Signature, Policy, KeyPairId, _options$context, context, error, firstParamConnector, hasSignatureParams, constructedUrl, imageResponse, contentLengthHeader, _t;
|
|
8
9
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
9
10
|
while (1) switch (_context.prev = _context.next) {
|
|
10
11
|
case 0:
|
|
11
|
-
_options$isHeader = options.isHeader, isHeader = _options$isHeader === void 0 ? false : _options$isHeader, Signature = options.Signature, Policy = options.Policy, KeyPairId = options.KeyPairId;
|
|
12
|
-
|
|
12
|
+
_options$isHeader = options.isHeader, isHeader = _options$isHeader === void 0 ? false : _options$isHeader, Signature = options.Signature, Policy = options.Policy, KeyPairId = options.KeyPairId, _options$context = options.context, context = _options$context === void 0 ? {} : _options$context; // Validate url parameter
|
|
13
|
+
if (!(!url || typeof url !== 'string')) {
|
|
14
|
+
_context.next = 2;
|
|
15
|
+
break;
|
|
16
|
+
}
|
|
17
|
+
error = new Error("fetchImageForWeb: Invalid url parameter. url=".concat(JSON.stringify(url)));
|
|
18
|
+
if (!isHeader) {
|
|
19
|
+
_context.next = 1;
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
console.error('FetchImageHeaderError', {
|
|
23
|
+
message: error.message,
|
|
24
|
+
url: url,
|
|
25
|
+
context: context
|
|
26
|
+
});
|
|
27
|
+
return _context.abrupt("return", fetchLighthouseLogo());
|
|
28
|
+
case 1:
|
|
29
|
+
console.error('FetchImageError', {
|
|
30
|
+
message: error.message,
|
|
31
|
+
url: url,
|
|
32
|
+
context: context
|
|
33
|
+
});
|
|
34
|
+
return _context.abrupt("return", imageNotFound);
|
|
35
|
+
case 2:
|
|
36
|
+
_context.prev = 2;
|
|
13
37
|
firstParamConnector = url.indexOf('?') > -1 ? '&' : '?';
|
|
14
38
|
hasSignatureParams = url.includes('Signature=') && url.includes('Policy=') && url.includes('Key-Pair-Id=');
|
|
15
39
|
constructedUrl = !hasSignatureParams ? "".concat(url).concat(firstParamConnector, "Signature=").concat(Signature, "&Policy=").concat(Policy, "&Key-Pair-Id=").concat(KeyPairId) : url;
|
|
16
40
|
console.debug('Fetching image via CloudFront For Web');
|
|
17
|
-
_context.next =
|
|
41
|
+
_context.next = 3;
|
|
18
42
|
return fetch(constructedUrl);
|
|
19
|
-
case
|
|
43
|
+
case 3:
|
|
20
44
|
imageResponse = _context.sent;
|
|
21
45
|
contentLengthHeader = imageResponse.headers.get('content-length');
|
|
22
46
|
if (!(contentLengthHeader === '0')) {
|
|
23
|
-
_context.next =
|
|
47
|
+
_context.next = 4;
|
|
24
48
|
break;
|
|
25
49
|
}
|
|
26
|
-
return _context.abrupt("return", Promise.reject(new Error("Failed to fetch image as no content length: ".concat(
|
|
27
|
-
case
|
|
50
|
+
return _context.abrupt("return", Promise.reject(new Error("Failed to fetch image as no content length: ".concat(url))));
|
|
51
|
+
case 4:
|
|
28
52
|
if (imageResponse.ok) {
|
|
29
|
-
_context.next =
|
|
53
|
+
_context.next = 5;
|
|
30
54
|
break;
|
|
31
55
|
}
|
|
32
|
-
return _context.abrupt("return", Promise.reject(new Error("Failed to fetch image: ".concat(
|
|
33
|
-
case 4:
|
|
34
|
-
_context.next = 5;
|
|
35
|
-
return imageResponse.arrayBuffer();
|
|
56
|
+
return _context.abrupt("return", Promise.reject(new Error("Failed to fetch image: ".concat(url))));
|
|
36
57
|
case 5:
|
|
37
|
-
|
|
58
|
+
_context.next = 6;
|
|
59
|
+
return imageResponse.arrayBuffer();
|
|
38
60
|
case 6:
|
|
39
|
-
_context.
|
|
40
|
-
|
|
61
|
+
return _context.abrupt("return", _context.sent);
|
|
62
|
+
case 7:
|
|
63
|
+
_context.prev = 7;
|
|
64
|
+
_t = _context["catch"](2);
|
|
41
65
|
if (!isHeader) {
|
|
42
|
-
_context.next =
|
|
66
|
+
_context.next = 8;
|
|
43
67
|
break;
|
|
44
68
|
}
|
|
45
69
|
// NOTE: Replace failed headers with LH logo
|
|
46
|
-
console.error('FetchImageHeaderError',
|
|
70
|
+
console.error('FetchImageHeaderError', {
|
|
71
|
+
url: url,
|
|
72
|
+
message: _t.message,
|
|
73
|
+
context: context,
|
|
74
|
+
stack: _t.stack
|
|
75
|
+
});
|
|
47
76
|
return _context.abrupt("return", fetchLighthouseLogo());
|
|
48
|
-
case 7:
|
|
49
|
-
console.error(_t);
|
|
50
|
-
return _context.abrupt("return", imageNotFound);
|
|
51
77
|
case 8:
|
|
78
|
+
console.error('FetchImageError', {
|
|
79
|
+
url: url,
|
|
80
|
+
message: _t.message,
|
|
81
|
+
context: context,
|
|
82
|
+
stack: _t.stack
|
|
83
|
+
});
|
|
84
|
+
return _context.abrupt("return", imageNotFound);
|
|
85
|
+
case 9:
|
|
52
86
|
case "end":
|
|
53
87
|
return _context.stop();
|
|
54
88
|
}
|
|
55
|
-
}, _callee, null, [[
|
|
89
|
+
}, _callee, null, [[2, 7]]);
|
|
56
90
|
}));
|
|
57
91
|
return function fetchImageForWeb(_x, _x2) {
|
|
58
92
|
return _ref.apply(this, arguments);
|
|
@@ -1 +1 @@
|
|
|
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","
|
|
1
|
+
{"version":3,"file":"index.js","names":["imageNotFound","fetchLighthouseLogo","isAbsoluteUrl","fetchImageForWeb","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","options","_options$isHeader","isHeader","Signature","Policy","KeyPairId","_options$context","context","error","firstParamConnector","hasSignatureParams","constructedUrl","imageResponse","contentLengthHeader","_t","wrap","_context","prev","next","Error","concat","JSON","stringify","console","message","abrupt","indexOf","includes","debug","fetch","sent","headers","get","Promise","reject","ok","arrayBuffer","stack","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 { isAbsoluteUrl } from '../validate-url/index.js'\n\nexport const fetchImageForWeb = async function (url, options) {\n const {\n isHeader = false,\n Signature,\n Policy,\n KeyPairId,\n context = {},\n } = options\n\n // Validate url parameter\n if (!url || typeof url !== 'string') {\n const error = new Error(\n `fetchImageForWeb: Invalid url parameter. url=${JSON.stringify(url)}`\n )\n if (isHeader) {\n console.error('FetchImageHeaderError', {\n message: error.message,\n url,\n context,\n })\n return fetchLighthouseLogo()\n }\n console.error('FetchImageError', {\n message: error.message,\n url,\n context,\n })\n return imageNotFound\n }\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: ${url}`)\n )\n }\n\n if (!imageResponse.ok) {\n return Promise.reject(new Error(`Failed to fetch image: ${url}`))\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', {\n url,\n message: error.message,\n context,\n stack: error.stack,\n })\n return fetchLighthouseLogo()\n }\n\n console.error('FetchImageError', {\n url,\n message: error.message,\n context,\n stack: error.stack,\n })\n return imageNotFound\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks if a URL is absolute (starts with http:// or https://)
|
|
3
|
+
* @param {string} url - The URL to validate
|
|
4
|
+
* @returns {boolean} - True if URL is absolute, false otherwise
|
|
5
|
+
*/
|
|
6
|
+
export function isAbsoluteUrl(url) {
|
|
7
|
+
if (!url || typeof url !== 'string') return false;
|
|
8
|
+
return url.startsWith('http://') || url.startsWith('https://');
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["isAbsoluteUrl","url","startsWith"],"sources":["../../../src/helpers/validate-url/index.js"],"sourcesContent":["/**\n * Checks if a URL is absolute (starts with http:// or https://)\n * @param {string} url - The URL to validate\n * @returns {boolean} - True if URL is absolute, false otherwise\n */\nexport function isAbsoluteUrl(url) {\n if (!url || typeof url !== 'string') return false\n return url.startsWith('http://') || url.startsWith('https://')\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,aAAaA,CAACC,GAAG,EAAE;EACjC,IAAI,CAACA,GAAG,IAAI,OAAOA,GAAG,KAAK,QAAQ,EAAE,OAAO,KAAK;EACjD,OAAOA,GAAG,CAACC,UAAU,CAAC,SAAS,CAAC,IAAID,GAAG,CAACC,UAAU,CAAC,UAAU,CAAC;AAChE","ignoreList":[]}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { fetchImage, getTimezoneDatetime } from '../../../helpers';
|
|
2
|
+
import { LIGHTHOUSE_LOGO_URL } from '../../../constants';
|
|
3
|
+
import { isAbsoluteUrl } from '../../../helpers/validate-url/index.js';
|
|
2
4
|
export function defaultHeader(_ref) {
|
|
3
5
|
var Signature = _ref.Signature,
|
|
4
6
|
Policy = _ref.Policy,
|
|
@@ -12,7 +14,15 @@ export function defaultHeader(_ref) {
|
|
|
12
14
|
timestamp: timestamp,
|
|
13
15
|
timezone: timezone
|
|
14
16
|
});
|
|
15
|
-
|
|
17
|
+
|
|
18
|
+
// Validate logoUrl and use fallback if invalid
|
|
19
|
+
var effectiveLogoUrl = isAbsoluteUrl(logoUrl) ? logoUrl : LIGHTHOUSE_LOGO_URL;
|
|
20
|
+
if (!isAbsoluteUrl(logoUrl)) {
|
|
21
|
+
console.warn('defaultHeader: Invalid logoUrl, using Lighthouse logo', {
|
|
22
|
+
providedLogoUrl: logoUrl
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return fetchImage(effectiveLogoUrl, {
|
|
16
26
|
Signature: Signature,
|
|
17
27
|
Policy: Policy,
|
|
18
28
|
KeyPairId: KeyPairId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["fetchImage","getTimezoneDatetime","defaultHeader","_ref","Signature","Policy","KeyPairId","logoUrl","timestamp","timezone","datetime","format","showTzAbbr","isHeader","then","image","columns","fit","margin","alignment","color","font","fontSize","text"],"sources":["../../../../src/pdf/helpers/default-header/index.js"],"sourcesContent":["import { fetchImage, getTimezoneDatetime } from '../../../helpers'\n\nexport function defaultHeader({\n Signature,\n Policy,\n KeyPairId,\n logoUrl,\n timestamp,\n timezone,\n}) {\n const datetime = getTimezoneDatetime({\n format: 'ddd, Do MMM YYYY',\n showTzAbbr: false,\n timestamp,\n timezone,\n })\n\n return fetchImage(
|
|
1
|
+
{"version":3,"file":"index.js","names":["fetchImage","getTimezoneDatetime","LIGHTHOUSE_LOGO_URL","isAbsoluteUrl","defaultHeader","_ref","Signature","Policy","KeyPairId","logoUrl","timestamp","timezone","datetime","format","showTzAbbr","effectiveLogoUrl","console","warn","providedLogoUrl","isHeader","then","image","columns","fit","margin","alignment","color","font","fontSize","text"],"sources":["../../../../src/pdf/helpers/default-header/index.js"],"sourcesContent":["import { fetchImage, getTimezoneDatetime } from '../../../helpers'\nimport { LIGHTHOUSE_LOGO_URL } from '../../../constants'\nimport { isAbsoluteUrl } from '../../../helpers/validate-url/index.js'\n\nexport function defaultHeader({\n Signature,\n Policy,\n KeyPairId,\n logoUrl,\n timestamp,\n timezone,\n}) {\n const datetime = getTimezoneDatetime({\n format: 'ddd, Do MMM YYYY',\n showTzAbbr: false,\n timestamp,\n timezone,\n })\n\n // Validate logoUrl and use fallback if invalid\n const effectiveLogoUrl = isAbsoluteUrl(logoUrl)\n ? logoUrl\n : LIGHTHOUSE_LOGO_URL\n\n if (!isAbsoluteUrl(logoUrl)) {\n console.warn('defaultHeader: Invalid logoUrl, using Lighthouse logo', {\n providedLogoUrl: logoUrl,\n })\n }\n\n return fetchImage(effectiveLogoUrl, {\n Signature,\n Policy,\n KeyPairId,\n isHeader: true,\n }).then((image) => ({\n columns: [\n {\n fit: [130, 30],\n image,\n margin: [60, 60, 60, 0],\n },\n {\n alignment: 'right',\n color: '#999',\n font: 'Gotham',\n fontSize: 11,\n text: datetime,\n margin: [60, 70, 60, 0],\n },\n ],\n }))\n}\n"],"mappings":"AAAA,SAASA,UAAU,EAAEC,mBAAmB,QAAQ,kBAAkB;AAClE,SAASC,mBAAmB,QAAQ,oBAAoB;AACxD,SAASC,aAAa,QAAQ,wCAAwC;AAEtE,OAAO,SAASC,aAAaA,CAAAC,IAAA,EAO1B;EAAA,IANDC,SAAS,GAAAD,IAAA,CAATC,SAAS;IACTC,MAAM,GAAAF,IAAA,CAANE,MAAM;IACNC,SAAS,GAAAH,IAAA,CAATG,SAAS;IACTC,OAAO,GAAAJ,IAAA,CAAPI,OAAO;IACPC,SAAS,GAAAL,IAAA,CAATK,SAAS;IACTC,QAAQ,GAAAN,IAAA,CAARM,QAAQ;EAER,IAAMC,QAAQ,GAAGX,mBAAmB,CAAC;IACnCY,MAAM,EAAE,kBAAkB;IAC1BC,UAAU,EAAE,KAAK;IACjBJ,SAAS,EAATA,SAAS;IACTC,QAAQ,EAARA;EACF,CAAC,CAAC;;EAEF;EACA,IAAMI,gBAAgB,GAAGZ,aAAa,CAACM,OAAO,CAAC,GAC3CA,OAAO,GACPP,mBAAmB;EAEvB,IAAI,CAACC,aAAa,CAACM,OAAO,CAAC,EAAE;IAC3BO,OAAO,CAACC,IAAI,CAAC,uDAAuD,EAAE;MACpEC,eAAe,EAAET;IACnB,CAAC,CAAC;EACJ;EAEA,OAAOT,UAAU,CAACe,gBAAgB,EAAE;IAClCT,SAAS,EAATA,SAAS;IACTC,MAAM,EAANA,MAAM;IACNC,SAAS,EAATA,SAAS;IACTW,QAAQ,EAAE;EACZ,CAAC,CAAC,CAACC,IAAI,CAAC,UAACC,KAAK;IAAA,OAAM;MAClBC,OAAO,EAAE,CACP;QACEC,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC;QACdF,KAAK,EAALA,KAAK;QACLG,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;MACxB,CAAC,EACD;QACEC,SAAS,EAAE,OAAO;QAClBC,KAAK,EAAE,MAAM;QACbC,IAAI,EAAE,QAAQ;QACdC,QAAQ,EAAE,EAAE;QACZC,IAAI,EAAEjB,QAAQ;QACdY,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;MACxB,CAAC;IAEL,CAAC;EAAA,CAAC,CAAC;AACL","ignoreList":[]}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
2
5
|
import { isArray, isEmpty, join, first, map, startsWith } from 'lodash';
|
|
3
6
|
import Promise from 'bluebird';
|
|
4
7
|
import moment from 'moment-timezone';
|
|
@@ -31,7 +34,10 @@ function buildImage(options) {
|
|
|
31
34
|
settings = _options$settings === void 0 ? {} : _options$settings,
|
|
32
35
|
signedAsset = options.signedAsset,
|
|
33
36
|
_options$width = options.width,
|
|
34
|
-
width = _options$width === void 0 ? 210 : _options$width
|
|
37
|
+
width = _options$width === void 0 ? 210 : _options$width,
|
|
38
|
+
fieldLabel = options.fieldLabel,
|
|
39
|
+
_options$fieldType = options.fieldType,
|
|
40
|
+
fieldType = _options$fieldType === void 0 ? 'image' : _options$fieldType;
|
|
35
41
|
var awsS3BaseUrl = settings.awsS3BaseUrl,
|
|
36
42
|
cloudinaryBaseUrl = settings.cloudinaryBaseUrl,
|
|
37
43
|
cloudfrontBaseUrl = settings.cloudfrontBaseUrl,
|
|
@@ -58,7 +64,14 @@ function buildImage(options) {
|
|
|
58
64
|
});
|
|
59
65
|
|
|
60
66
|
// NOTE: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used in this context
|
|
61
|
-
return fetchImage(url,
|
|
67
|
+
return fetchImage(url, _objectSpread(_objectSpread({}, settings), {}, {
|
|
68
|
+
context: {
|
|
69
|
+
stage: 'field',
|
|
70
|
+
fieldLabel: fieldLabel,
|
|
71
|
+
fieldType: fieldType,
|
|
72
|
+
filepath: filepath
|
|
73
|
+
}
|
|
74
|
+
})).then(function (base64String) {
|
|
62
75
|
return {
|
|
63
76
|
alignment: alignment,
|
|
64
77
|
fit: [width, height],
|
|
@@ -108,7 +121,13 @@ export function buildSummaryField(_ref2) {
|
|
|
108
121
|
};
|
|
109
122
|
}
|
|
110
123
|
// NOTE: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used in this context
|
|
111
|
-
return fetchImage(value,
|
|
124
|
+
return fetchImage(value, _objectSpread(_objectSpread({}, settings), {}, {
|
|
125
|
+
context: {
|
|
126
|
+
stage: 'field',
|
|
127
|
+
fieldLabel: field.label,
|
|
128
|
+
fieldType: 'signature'
|
|
129
|
+
}
|
|
130
|
+
})).then(function (base64String) {
|
|
112
131
|
return {
|
|
113
132
|
alignment: 'left',
|
|
114
133
|
image: base64String,
|
|
@@ -132,7 +151,9 @@ export function buildSummaryField(_ref2) {
|
|
|
132
151
|
height: 140,
|
|
133
152
|
width: 140,
|
|
134
153
|
settings: settings,
|
|
135
|
-
signedAsset: signedAssets && isArray(signedAssets) ? signedAssets[0] : null
|
|
154
|
+
signedAsset: signedAssets && isArray(signedAssets) ? signedAssets[0] : null,
|
|
155
|
+
fieldLabel: field.label,
|
|
156
|
+
fieldType: 'media'
|
|
136
157
|
});
|
|
137
158
|
return image;
|
|
138
159
|
}
|
|
@@ -234,7 +255,13 @@ export function buildTemplateFieldRow(_ref3) {
|
|
|
234
255
|
if (isSignatureField) {
|
|
235
256
|
if (!value) return [labelText, ''];
|
|
236
257
|
// NOTE: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used in this context
|
|
237
|
-
return fetchImage(value,
|
|
258
|
+
return fetchImage(value, _objectSpread(_objectSpread({}, settings), {}, {
|
|
259
|
+
context: {
|
|
260
|
+
stage: 'field',
|
|
261
|
+
fieldLabel: label,
|
|
262
|
+
fieldType: 'signature'
|
|
263
|
+
}
|
|
264
|
+
})).then(function (base64String) {
|
|
238
265
|
var values = {
|
|
239
266
|
alignment: 'left',
|
|
240
267
|
image: base64String,
|
|
@@ -244,24 +271,41 @@ export function buildTemplateFieldRow(_ref3) {
|
|
|
244
271
|
});
|
|
245
272
|
}
|
|
246
273
|
if (isDisplayImageField) {
|
|
247
|
-
|
|
274
|
+
// Guard against nullish values
|
|
275
|
+
if (!value) {
|
|
276
|
+
return [[], {}];
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
// Ensure value is always treated as an array of filepaths
|
|
280
|
+
var filepaths = isArray(value) ? value : [value];
|
|
281
|
+
return Promise.map(filepaths, function (filepath, index) {
|
|
248
282
|
var signedAssetValue = isArray(signedAssets) ? signedAssets[index] : signedAssets;
|
|
249
283
|
return buildImage({
|
|
250
284
|
filepath: filepath,
|
|
251
285
|
settings: settings,
|
|
252
|
-
signedAsset: signedAssetValue
|
|
286
|
+
signedAsset: signedAssetValue,
|
|
287
|
+
fieldLabel: label,
|
|
288
|
+
fieldType: 'image-display'
|
|
253
289
|
});
|
|
254
290
|
}).then(function (fieldImages) {
|
|
255
291
|
return [fieldImages, {}];
|
|
256
292
|
});
|
|
257
293
|
}
|
|
258
294
|
if (isPhotoField) {
|
|
295
|
+
// Guard against nullish values
|
|
296
|
+
if (!value || isArray(value) && value.length === 0) {
|
|
297
|
+
return [labelText, {
|
|
298
|
+
text: ''
|
|
299
|
+
}];
|
|
300
|
+
}
|
|
259
301
|
return Promise.map(value, function (filepath, index) {
|
|
260
302
|
var signedAssetValue = isArray(signedAssets) ? signedAssets[index] : signedAssets;
|
|
261
303
|
return buildImage({
|
|
262
304
|
filepath: filepath,
|
|
263
305
|
settings: settings,
|
|
264
|
-
signedAsset: signedAssetValue
|
|
306
|
+
signedAsset: signedAssetValue,
|
|
307
|
+
fieldLabel: label,
|
|
308
|
+
fieldType: 'media'
|
|
265
309
|
});
|
|
266
310
|
}).then(function (fieldImages) {
|
|
267
311
|
var tables = !isEmpty(fieldImages) ? imageTables(fieldImages) : [];
|
|
@@ -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","signedAsset","extension","name","path","awsS3BaseUrl","shouldUseCloudfront","cloudfrontBaseUrl","link","concat","margin","buildImage","options","_options$alignment","alignment","filepath","_options$height","height","_options$settings","_options$width","width","cloudinaryBaseUrl","isVideoType","RegExp","test","fit","image","url","quality","then","base64String","buildSummaryField","_ref2","field","timezone","fieldtype","_field$options","value","signedAssets","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","_ref3","skipped","_field$options2","_options$showOnRead","showOnRead","isDisplayImageField","length","labelText","parsed","replace","values","index","signedAssetValue","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, signedAsset }) {\n const { extension, name, path } = file\n const { awsS3BaseUrl, shouldUseCloudfront, cloudfrontBaseUrl } = settings\n\n const link = shouldUseCloudfront\n ? `${cloudfrontBaseUrl}/${signedAsset}`\n : `${awsS3BaseUrl}/${path}`\n\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 signedAsset,\n width = 210,\n } = options\n const {\n awsS3BaseUrl,\n cloudinaryBaseUrl,\n cloudfrontBaseUrl,\n shouldUseCloudfront,\n } = settings\n\n const isVideoType = new RegExp('.mp4$').test(filepath)\n\n const link = shouldUseCloudfront\n ? `${cloudfrontBaseUrl}/${signedAsset || filepath}`\n : `${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 shouldUseCloudfront,\n })\n\n // NOTE: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used 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, signedAssets } = field\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: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used 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 signedAsset:\n signedAssets && isArray(signedAssets) ? signedAssets[0] : null,\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).tz(timezone).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, signedAssets } = 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 =\n fieldtype === 'image-display' &&\n showOnRead &&\n !(isArray(value) && value.length === 0)\n const isReferenceField = fieldtype === 'reference'\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 // NOTE: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used 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, index) => {\n const signedAssetValue = isArray(signedAssets)\n ? signedAssets[index]\n : signedAssets\n return buildImage({ filepath, settings, signedAsset: signedAssetValue })\n }).then((fieldImages) => [fieldImages, {}])\n }\n\n if (isPhotoField) {\n return Promise.map(value, (filepath, index) => {\n const signedAssetValue = isArray(signedAssets)\n ? signedAssets[index]\n : signedAssets\n return buildImage({ filepath, settings, signedAsset: signedAssetValue })\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, index) => {\n const signedAsset = signedAssets?.[index]\n return buildFile({ file, settings, signedAsset })\n })\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 ? moment(value).tz(timezone).format(format) : ''\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","signedAsset","extension","name","path","awsS3BaseUrl","shouldUseCloudfront","cloudfrontBaseUrl","link","concat","margin","buildImage","options","_options$alignment","alignment","filepath","_options$height","height","_options$settings","_options$width","width","fieldLabel","_options$fieldType","fieldType","cloudinaryBaseUrl","isVideoType","RegExp","test","fit","image","url","quality","_objectSpread","context","stage","then","base64String","buildSummaryField","_ref2","field","timezone","fieldtype","_field$options","value","signedAssets","isDayFirstDateField","format","isMonthFirstDateField","isFileField","isHtmlField","type","isNumberField","isPhotoField","isReferenceField","isSelectField","isSignatureField","isStarField","isSwitchField","isTextField","is12HourTimeField","is24HourTimeField","isDataImage","label","fileList","ol","parsedValue","displayValue","fontSize","filter","val","tz","buildTemplateFieldRow","_ref3","skipped","_field$options2","_options$showOnRead","showOnRead","isDisplayImageField","length","labelText","parsed","replace","values","filepaths","index","signedAssetValue","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, signedAsset }) {\n const { extension, name, path } = file\n const { awsS3BaseUrl, shouldUseCloudfront, cloudfrontBaseUrl } = settings\n\n const link = shouldUseCloudfront\n ? `${cloudfrontBaseUrl}/${signedAsset}`\n : `${awsS3BaseUrl}/${path}`\n\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 signedAsset,\n width = 210,\n fieldLabel,\n fieldType = 'image',\n } = options\n const {\n awsS3BaseUrl,\n cloudinaryBaseUrl,\n cloudfrontBaseUrl,\n shouldUseCloudfront,\n } = settings\n\n const isVideoType = new RegExp('.mp4$').test(filepath)\n\n const link = shouldUseCloudfront\n ? `${cloudfrontBaseUrl}/${signedAsset || filepath}`\n : `${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 shouldUseCloudfront,\n })\n\n // NOTE: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used in this context\n return fetchImage(url, {\n ...settings,\n context: {\n stage: 'field',\n fieldLabel,\n fieldType,\n filepath,\n },\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, signedAssets } = field\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: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used in this context\n return fetchImage(value, {\n ...settings,\n context: {\n stage: 'field',\n fieldLabel: field.label,\n fieldType: 'signature',\n },\n }).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 signedAsset:\n signedAssets && isArray(signedAssets) ? signedAssets[0] : null,\n fieldLabel: field.label,\n fieldType: 'media',\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).tz(timezone).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, signedAssets } = 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 =\n fieldtype === 'image-display' &&\n showOnRead &&\n !(isArray(value) && value.length === 0)\n const isReferenceField = fieldtype === 'reference'\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 // NOTE: shouldUseCloudfront, Signature, Policy and KeyPairId from settings are used in this context\n return fetchImage(value, {\n ...settings,\n context: {\n stage: 'field',\n fieldLabel: label,\n fieldType: 'signature',\n },\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 // Guard against nullish values\n if (!value) {\n return [[], {}]\n }\n\n // Ensure value is always treated as an array of filepaths\n const filepaths = isArray(value) ? value : [value]\n return Promise.map(filepaths, (filepath, index) => {\n const signedAssetValue = isArray(signedAssets)\n ? signedAssets[index]\n : signedAssets\n return buildImage({\n filepath,\n settings,\n signedAsset: signedAssetValue,\n fieldLabel: label,\n fieldType: 'image-display',\n })\n }).then((fieldImages) => [fieldImages, {}])\n }\n\n if (isPhotoField) {\n // Guard against nullish values\n if (!value || (isArray(value) && value.length === 0)) {\n return [labelText, { text: '' }]\n }\n\n return Promise.map(value, (filepath, index) => {\n const signedAssetValue = isArray(signedAssets)\n ? signedAssets[index]\n : signedAssets\n return buildImage({\n filepath,\n settings,\n signedAsset: signedAssetValue,\n fieldLabel: label,\n fieldType: 'media',\n })\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, index) => {\n const signedAsset = signedAssets?.[index]\n return buildFile({ file, settings, signedAsset })\n })\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 ? moment(value).tz(timezone).format(format) : ''\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":[]}
|
|
@@ -57,8 +57,16 @@ export function generateDefinition(options) {
|
|
|
57
57
|
pageSize: pageSize,
|
|
58
58
|
styles: pdfStyles
|
|
59
59
|
};
|
|
60
|
-
}).catch(function (
|
|
61
|
-
|
|
60
|
+
}).catch(function (error) {
|
|
61
|
+
// Preserve structured error information for better debugging
|
|
62
|
+
console.error('GenerateDefinitionError', {
|
|
63
|
+
message: error.message,
|
|
64
|
+
context: error.context,
|
|
65
|
+
url: error.url,
|
|
66
|
+
type: options.type,
|
|
67
|
+
stack: error.stack
|
|
68
|
+
});
|
|
69
|
+
throw error; // Preserve original error instead of wrapping
|
|
62
70
|
});
|
|
63
71
|
}
|
|
64
72
|
function pdfHeader(header) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["defaults","isFunction","Promise","LIGHTHOUSE_LOGO_URL","DEFAULT_PAGE_MARGINS","DEFAULT_PAGE_ORIENTATION","DEFAULT_PAGE_SIZE","defaultFooter","defaultHeader","defaultStyles","generateDefinition","options","content","fileTitle","_options$footer","footer","sequenceId","_options$header","header","_options$logoUrl","logoUrl","_options$pageMargins","pageMargins","_options$pageOrientat","pageOrientation","_options$pageSize","pageSize","_options$styles","styles","timestamp","timezone","type","pdfStyles","pdfInfo","title","headerPromise","pdfHeader","contentPromise","pdfContent","footerPromise","pdfFooter","promises","all","then","_ref","_ref2","_slicedToArray","info","catch","
|
|
1
|
+
{"version":3,"file":"index.js","names":["defaults","isFunction","Promise","LIGHTHOUSE_LOGO_URL","DEFAULT_PAGE_MARGINS","DEFAULT_PAGE_ORIENTATION","DEFAULT_PAGE_SIZE","defaultFooter","defaultHeader","defaultStyles","generateDefinition","options","content","fileTitle","_options$footer","footer","sequenceId","_options$header","header","_options$logoUrl","logoUrl","_options$pageMargins","pageMargins","_options$pageOrientat","pageOrientation","_options$pageSize","pageSize","_options$styles","styles","timestamp","timezone","type","pdfStyles","pdfInfo","title","headerPromise","pdfHeader","contentPromise","pdfContent","footerPromise","pdfFooter","promises","all","then","_ref","_ref2","_slicedToArray","info","catch","error","console","message","context","url","stack","resolve"],"sources":["../../../../src/pdf/helpers/generate-definition/index.js"],"sourcesContent":["import { defaults, isFunction } from 'lodash'\nimport Promise from 'bluebird'\n\nimport {\n LIGHTHOUSE_LOGO_URL,\n DEFAULT_PAGE_MARGINS,\n DEFAULT_PAGE_ORIENTATION,\n DEFAULT_PAGE_SIZE,\n} from '../../../constants'\n\nimport { defaultFooter, defaultHeader, defaultStyles } from '../'\n\nexport function generateDefinition(options) {\n const {\n content,\n fileTitle,\n footer = defaultFooter,\n sequenceId,\n header = defaultHeader,\n logoUrl = LIGHTHOUSE_LOGO_URL,\n pageMargins = DEFAULT_PAGE_MARGINS,\n pageOrientation = DEFAULT_PAGE_ORIENTATION,\n pageSize = DEFAULT_PAGE_SIZE,\n styles = {},\n timestamp,\n timezone,\n type,\n } = options\n\n const pdfStyles = defaults({}, styles, defaultStyles)\n const pdfInfo = { title: fileTitle }\n\n const headerPromise = pdfHeader(\n header({\n logoUrl,\n timestamp,\n timezone,\n })\n )\n\n const contentPromise = pdfContent(content)\n\n const footerPromise = pdfFooter(\n footer({\n sequenceId,\n logoUrl: LIGHTHOUSE_LOGO_URL,\n timestamp,\n timezone,\n type,\n })\n )\n\n const promises = [headerPromise, contentPromise, footerPromise]\n\n return Promise.all(promises)\n .then(([header, content, footer]) => ({\n header,\n content,\n footer,\n info: pdfInfo,\n pageMargins,\n pageOrientation,\n pageSize,\n styles: pdfStyles,\n }))\n .catch((error) => {\n // Preserve structured error information for better debugging\n console.error('GenerateDefinitionError', {\n message: error.message,\n context: error.context,\n url: error.url,\n type: options.type,\n stack: error.stack,\n })\n throw error // Preserve original error instead of wrapping\n })\n}\n\nfunction pdfHeader(header) {\n if (isFunction(header)) {\n return Promise.resolve(header())\n }\n\n return Promise.resolve(header)\n}\n\nfunction pdfContent(content) {\n if (isFunction(content)) {\n return Promise.resolve(content())\n }\n\n return Promise.resolve(content)\n}\n\nfunction pdfFooter(footer) {\n if (isFunction(footer)) {\n return Promise.resolve(footer())\n }\n\n return Promise.resolve(footer)\n}\n"],"mappings":"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","ignoreList":[]}
|