@lighthouse/common 6.9.3-canary.0 → 6.9.3

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/CHANGELOG.md CHANGED
@@ -1,3 +1,18 @@
1
+ # 6.9.3 (Wed Feb 26 2026)
2
+
3
+ #### 🐛 Bug Fix
4
+
5
+ - 🐛 Fix - Cross-region S3/Lambda access for image transformer cache [#TBD](https://github.com/Lighthouse-io/common/pull/TBD) ([@AndrewFinlay](https://github.com/AndrewFinlay))
6
+ - Hardcode IMAGE_CACHE_REGION to us-east-1 for Lambda and S3 clients
7
+ - Fixes NoSuchBucket errors when generating PDFs with images in non-us-east-1 regions
8
+ - Image transformer Lambda and cache bucket only exist in us-east-1
9
+
10
+ #### Authors: 1
11
+
12
+ - Andrew Finlay ([@AndrewFinlay](https://github.com/AndrewFinlay))
13
+
14
+ ---
15
+
1
16
  # 4.27.5 (Fri May 12 2023)
2
17
 
3
18
  #### 🐛 Bug Fix
@@ -4,24 +4,19 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.fetchFromImageCache = fetchFromImageCache;
8
7
  exports.fetchImageForPdfGeneratorService = void 0;
8
+ exports.fetchResourceFromS3 = fetchResourceFromS3;
9
9
  exports.formatBase64Image = formatBase64Image;
10
10
  exports.requestImageTransformation = requestImageTransformation;
11
11
  var _imageValidators = require("../image-validators");
12
12
  var _awsSdk = _interopRequireDefault(require("aws-sdk"));
13
13
  // Image transformer and cache are always in us-east-1 (shared across all regions)
14
14
  // The image-optimisation-image-processing Lambda only exists in us-east-1
15
- // Default to us-east-1 to fix cross-region access by default
16
- const IMAGE_CACHE_REGION = process.env.S3_IMAGE_CACHE_REGION || 'us-east-1';
17
-
18
- // Lambda client - uses cache region to invoke image transformer (always us-east-1)
15
+ const IMAGE_CACHE_REGION = 'us-east-1';
19
16
  const lambda = new _awsSdk.default.Lambda({
20
17
  region: IMAGE_CACHE_REGION
21
18
  });
22
-
23
- // S3 client - dedicated client for cache bucket (always us-east-1)
24
- const cacheS3 = new _awsSdk.default.S3({
19
+ const s3 = new _awsSdk.default.S3({
25
20
  region: IMAGE_CACHE_REGION
26
21
  });
27
22
  const fetchImageForPdfGeneratorService = async function (url) {
@@ -40,7 +35,7 @@ const fetchImageForPdfGeneratorService = async function (url) {
40
35
  searchParamsObject
41
36
  } = parseUrlString(url);
42
37
  const transformedBucketImagePath = path + (queryString ? `/${queryString}` : '');
43
- const alreadyTransformedImage = await fetchFromImageCache({
38
+ const alreadyTransformedImage = await fetchResourceFromS3({
44
39
  bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,
45
40
  key: transformedBucketImagePath
46
41
  });
@@ -70,7 +65,7 @@ const fetchImageForPdfGeneratorService = async function (url) {
70
65
  if (!redirectLocation) {
71
66
  throw new Error('Redirect response received but no location provided');
72
67
  }
73
- const newlyTransformedImage = await fetchFromImageCache({
68
+ const newlyTransformedImage = await fetchResourceFromS3({
74
69
  bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,
75
70
  key: transformedBucketImagePath
76
71
  });
@@ -126,26 +121,13 @@ async function requestImageTransformation(path, searchParamsObject) {
126
121
  throw new Error(errorMessage);
127
122
  }
128
123
  }
129
-
130
- /**
131
- * Fetches a resource from the image transformer cache bucket in us-east-1.
132
- *
133
- * NOTE: This function uses a dedicated S3 client configured for IMAGE_CACHE_REGION
134
- * (defaults to us-east-1) and should only be used for the image transformer cache bucket.
135
- * Do not use this for regional or other S3 buckets.
136
- *
137
- * @param {Object} params - Parameters
138
- * @param {string} params.bucketName - Name of the cache bucket (must be in us-east-1)
139
- * @param {string} params.key - S3 object key
140
- * @returns {Promise<Object>} Object with body, contentType, contentLength, etc.
141
- */
142
- async function fetchFromImageCache({
124
+ async function fetchResourceFromS3({
143
125
  bucketName,
144
126
  key
145
127
  }) {
146
- console.debug(`Fetching resource from image cache bucket: '${bucketName}' at path: '${key}'`);
128
+ console.debug(`Fetching resource from S3 Bucket: '${bucketName}' at path: '${key}'`);
147
129
  if (!bucketName || !key) {
148
- throw new Error('bucketName and key are required for image cache fetch ' + JSON.stringify({
130
+ throw new Error('bucketName and key are required for S3 resource fetch ' + JSON.stringify({
149
131
  bucketName,
150
132
  key
151
133
  }));
@@ -155,7 +137,7 @@ async function fetchFromImageCache({
155
137
  Key: key
156
138
  };
157
139
  try {
158
- const result = await cacheS3.getObject(params).promise();
140
+ const result = await s3.getObject(params).promise();
159
141
  return {
160
142
  body: result.Body,
161
143
  contentType: result.ContentType,
@@ -5,16 +5,11 @@ import AWS from 'aws-sdk';
5
5
 
6
6
  // Image transformer and cache are always in us-east-1 (shared across all regions)
7
7
  // The image-optimisation-image-processing Lambda only exists in us-east-1
8
- // Default to us-east-1 to fix cross-region access by default
9
- var IMAGE_CACHE_REGION = process.env.S3_IMAGE_CACHE_REGION || 'us-east-1';
10
-
11
- // Lambda client - uses cache region to invoke image transformer (always us-east-1)
8
+ var IMAGE_CACHE_REGION = 'us-east-1';
12
9
  var lambda = new AWS.Lambda({
13
10
  region: IMAGE_CACHE_REGION
14
11
  });
15
-
16
- // S3 client - dedicated client for cache bucket (always us-east-1)
17
- var cacheS3 = new AWS.S3({
12
+ var s3 = new AWS.S3({
18
13
  region: IMAGE_CACHE_REGION
19
14
  });
20
15
  export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
@@ -41,7 +36,7 @@ export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
41
36
  _parseUrlString = parseUrlString(url), path = _parseUrlString.path, queryString = _parseUrlString.queryString, searchParamsObject = _parseUrlString.searchParamsObject;
42
37
  transformedBucketImagePath = path + (queryString ? "/".concat(queryString) : '');
43
38
  _context.next = 3;
44
- return fetchFromImageCache({
39
+ return fetchResourceFromS3({
45
40
  bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,
46
41
  key: transformedBucketImagePath
47
42
  });
@@ -82,7 +77,7 @@ export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
82
77
  throw new Error('Redirect response received but no location provided');
83
78
  case 8:
84
79
  _context.next = 9;
85
- return fetchFromImageCache({
80
+ return fetchResourceFromS3({
86
81
  bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,
87
82
  key: transformedBucketImagePath
88
83
  });
@@ -117,19 +112,6 @@ export var fetchImageForPdfGeneratorService = /*#__PURE__*/function () {
117
112
  export function requestImageTransformation(_x2, _x3) {
118
113
  return _requestImageTransformation.apply(this, arguments);
119
114
  }
120
-
121
- /**
122
- * Fetches a resource from the image transformer cache bucket in us-east-1.
123
- *
124
- * NOTE: This function uses a dedicated S3 client configured for IMAGE_CACHE_REGION
125
- * (defaults to us-east-1) and should only be used for the image transformer cache bucket.
126
- * Do not use this for regional or other S3 buckets.
127
- *
128
- * @param {Object} params - Parameters
129
- * @param {string} params.bucketName - Name of the cache bucket (must be in us-east-1)
130
- * @param {string} params.key - S3 object key
131
- * @returns {Promise<Object>} Object with body, contentType, contentLength, etc.
132
- */
133
115
  function _requestImageTransformation() {
134
116
  _requestImageTransformation = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(path, searchParamsObject) {
135
117
  var lambdaEvent, params, result, response, errorMessage, _t2;
@@ -181,22 +163,22 @@ function _requestImageTransformation() {
181
163
  }));
182
164
  return _requestImageTransformation.apply(this, arguments);
183
165
  }
184
- export function fetchFromImageCache(_x4) {
185
- return _fetchFromImageCache.apply(this, arguments);
166
+ export function fetchResourceFromS3(_x4) {
167
+ return _fetchResourceFromS.apply(this, arguments);
186
168
  }
187
- function _fetchFromImageCache() {
188
- _fetchFromImageCache = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref2) {
169
+ function _fetchResourceFromS() {
170
+ _fetchResourceFromS = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref2) {
189
171
  var bucketName, key, params, result, _t3;
190
172
  return _regeneratorRuntime.wrap(function (_context3) {
191
173
  while (1) switch (_context3.prev = _context3.next) {
192
174
  case 0:
193
175
  bucketName = _ref2.bucketName, key = _ref2.key;
194
- console.debug("Fetching resource from image cache bucket: '".concat(bucketName, "' at path: '").concat(key, "'"));
176
+ console.debug("Fetching resource from S3 Bucket: '".concat(bucketName, "' at path: '").concat(key, "'"));
195
177
  if (!(!bucketName || !key)) {
196
178
  _context3.next = 1;
197
179
  break;
198
180
  }
199
- throw new Error('bucketName and key are required for image cache fetch ' + JSON.stringify({
181
+ throw new Error('bucketName and key are required for S3 resource fetch ' + JSON.stringify({
200
182
  bucketName: bucketName,
201
183
  key: key
202
184
  }));
@@ -207,7 +189,7 @@ function _fetchFromImageCache() {
207
189
  };
208
190
  _context3.prev = 2;
209
191
  _context3.next = 3;
210
- return cacheS3.getObject(params).promise();
192
+ return s3.getObject(params).promise();
211
193
  case 3:
212
194
  result = _context3.sent;
213
195
  return _context3.abrupt("return", {
@@ -234,7 +216,7 @@ function _fetchFromImageCache() {
234
216
  }
235
217
  }, _callee3, null, [[2, 4]]);
236
218
  }));
237
- return _fetchFromImageCache.apply(this, arguments);
219
+ return _fetchResourceFromS.apply(this, arguments);
238
220
  }
239
221
  export function formatBase64Image(_ref3) {
240
222
  var base64String = _ref3.base64String,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["validateBase64Image","AWS","IMAGE_CACHE_REGION","process","env","S3_IMAGE_CACHE_REGION","lambda","Lambda","region","cacheS3","S3","fetchImageForPdfGeneratorService","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","urlMatch","applicationId","_parseUrlString","path","queryString","searchParamsObject","transformedBucketImagePath","alreadyTransformedImage","fullDataUrl","transformerResponse","statusCode","_fullDataUrl","redirectLocation","newlyTransformedImage","_fullDataUrl2","_t","wrap","_context","prev","next","console","debug","Error","match","parseUrlString","concat","fetchFromImageCache","bucketName","S3_BUCKET_IMAGE_TRANSFORMER_CACHE","key","sent","body","formatBase64Image","base64String","toString","abrupt","requestImageTransformation","headers","Location","stop","_x","apply","arguments","_x2","_x3","_requestImageTransformation","_callee2","lambdaEvent","params","result","response","errorMessage","_t2","_context2","queryStringParameters","requestContext","http","method","FunctionName","IMAGE_TRANSFORMER_ARN","InvocationType","Payload","JSON","stringify","invoke","promise","parse","message","error","_x4","_fetchFromImageCache","_callee3","_ref2","_t3","_context3","Bucket","Key","getObject","Body","contentType","ContentType","contentLength","ContentLength","lastModified","LastModified","etag","ETag","code","_ref3","imageType","toLowerCase","includes","base64Flag","isValid","urlString","URL","searchParams","forEach","value","replace","pathname","substring"],"sources":["../../../src/helpers/fetch-image-for-pdf-generator-service/index.js"],"sourcesContent":["import { validateBase64Image } from '../image-validators'\nimport AWS from 'aws-sdk'\n\n// Image transformer and cache are always in us-east-1 (shared across all regions)\n// The image-optimisation-image-processing Lambda only exists in us-east-1\n// Default to us-east-1 to fix cross-region access by default\nconst IMAGE_CACHE_REGION = process.env.S3_IMAGE_CACHE_REGION || 'us-east-1'\n\n// Lambda client - uses cache region to invoke image transformer (always us-east-1)\nconst lambda = new AWS.Lambda({\n region: IMAGE_CACHE_REGION,\n})\n\n// S3 client - dedicated client for cache bucket (always us-east-1)\nconst cacheS3 = new AWS.S3({\n region: IMAGE_CACHE_REGION,\n})\n\nexport const fetchImageForPdfGeneratorService = async function (url) {\n console.debug(\n 'Fetching image via CloudFront For Serverless Pdf Generator Service'\n )\n\n if (!url) {\n throw new Error('URL is required to fetch image for PDF generator service')\n }\n\n const urlMatch = url && url.match(/([a-f0-9]{24})\\//)\n const applicationId = urlMatch && urlMatch[1]\n\n if (!applicationId) {\n throw new Error('Requestor has insufficient permissions')\n }\n\n const { path, queryString, searchParamsObject } = parseUrlString(url)\n\n const transformedBucketImagePath =\n path + (queryString ? `/${queryString}` : '')\n\n const alreadyTransformedImage = await fetchFromImageCache({\n bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,\n key: transformedBucketImagePath,\n })\n\n if (alreadyTransformedImage?.body) {\n const fullDataUrl = formatBase64Image({\n base64String: alreadyTransformedImage.body.toString('base64'),\n key: transformedBucketImagePath,\n })\n return fullDataUrl\n }\n\n const transformerResponse = await requestImageTransformation(\n `/${path}`,\n searchParamsObject\n )\n\n const statusCode = transformerResponse.statusCode\n\n switch (statusCode) {\n case 200: {\n console.debug('Image transformation successful')\n\n const fullDataUrl = formatBase64Image({\n base64String: transformerResponse.body.toString('base64'),\n key: url,\n })\n\n return fullDataUrl\n }\n case 302: {\n console.debug(\n 'Image transformation successful but image is too big for lambda delivery, fetching directly from S3'\n )\n const redirectLocation = transformerResponse.headers.Location\n\n if (!redirectLocation) {\n throw new Error('Redirect response received but no location provided')\n }\n const newlyTransformedImage = await fetchFromImageCache({\n bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,\n key: transformedBucketImagePath,\n })\n console.debug('Image successfully fetched from S3 at:', redirectLocation)\n\n const fullDataUrl = formatBase64Image({\n base64String: newlyTransformedImage.body.toString('base64'),\n key: transformedBucketImagePath,\n })\n\n return fullDataUrl\n }\n case 400:\n throw new Error(\n `Bad request to image transformer: ${transformerResponse.body}`\n )\n case 403:\n throw new Error('Requested transformed image is too big')\n case 404:\n throw new Error('The requested image does not exist')\n case 500:\n throw new Error(\n `Image transformation failed: ${transformerResponse.body}`\n )\n default:\n throw new Error(\n `Unexpected response from image transformer: ${statusCode} - ${transformerResponse.body}`\n )\n }\n}\n\nexport async function requestImageTransformation(path, searchParamsObject) {\n if (!path) {\n throw new Error('Image Path is required for image transformation')\n }\n\n console.debug(\n 'ImageTransformation: Invoking image transformer lambda for path:',\n { path, searchParamsObject }\n )\n\n const lambdaEvent = {\n queryStringParameters: searchParamsObject,\n requestContext: {\n http: {\n method: 'GET',\n path,\n },\n },\n }\n\n const params = {\n FunctionName: process.env.IMAGE_TRANSFORMER_ARN,\n InvocationType: 'RequestResponse',\n Payload: JSON.stringify(lambdaEvent),\n }\n\n try {\n const result = await lambda.invoke(params).promise()\n\n const response = JSON.parse(result.Payload)\n\n return response\n } catch (error) {\n const errorMessage = `Failed to invoke image transformer lambda: ${error.message}`\n console.error(errorMessage, error)\n throw new Error(errorMessage)\n }\n}\n\n/**\n * Fetches a resource from the image transformer cache bucket in us-east-1.\n *\n * NOTE: This function uses a dedicated S3 client configured for IMAGE_CACHE_REGION\n * (defaults to us-east-1) and should only be used for the image transformer cache bucket.\n * Do not use this for regional or other S3 buckets.\n *\n * @param {Object} params - Parameters\n * @param {string} params.bucketName - Name of the cache bucket (must be in us-east-1)\n * @param {string} params.key - S3 object key\n * @returns {Promise<Object>} Object with body, contentType, contentLength, etc.\n */\nexport async function fetchFromImageCache({ bucketName, key }) {\n console.debug(\n `Fetching resource from image cache bucket: '${bucketName}' at path: '${key}'`\n )\n if (!bucketName || !key) {\n throw new Error(\n 'bucketName and key are required for image cache fetch ' +\n JSON.stringify({ bucketName, key })\n )\n }\n\n const params = {\n Bucket: bucketName,\n Key: key,\n }\n\n try {\n const result = await cacheS3.getObject(params).promise()\n\n return {\n body: result.Body,\n contentType: result.ContentType,\n contentLength: result.ContentLength,\n lastModified: result.LastModified,\n etag: result.ETag,\n }\n } catch (error) {\n if (error.code !== 'NoSuchKey') {\n console.error('Failed to fetch image:', error)\n throw new Error(`Failed to fetch image: ${bucketName}/${key}`)\n }\n\n console.debug('Image not found in transformed bucket, invoking transformer')\n }\n}\n\nexport function formatBase64Image({ base64String, key }) {\n if (!key) {\n throw new Error('Key is required for image formatting')\n }\n\n const imageType = key.toLowerCase().includes('.png') ? 'png' : 'jpeg'\n const base64Flag = `data:image/${imageType};base64,`\n const fullDataUrl = `${base64Flag}${base64String}`\n\n // Validate the formatted data URL\n const isValid = validateBase64Image(fullDataUrl)\n if (!isValid) {\n throw new Error('InvalidImageError')\n }\n\n return fullDataUrl\n}\n\n/**\n * Parses a URL-like string into path and query parameters\n * @param {string} urlString - String like \"https://example.cloudfront.net/<applicationId>/<path>/filename.jpeg?width=100&height=100\"\n * @returns {Object} - Object with { path: string, queryString: string, searchParamsObject: Object }\n * @example\n * parseUrlString(\"https://example.cloudfront.net/abc123/folder/image.jpeg?width=100&height=100\")\n * // Returns: { path: \"abc123/folder/image.jpeg\", queryString: \"width=100,t=456\", searchParamsObject: { width: \"100\", height: \"100\" } }\n */\nfunction parseUrlString(urlString) {\n if (!urlString || typeof urlString !== 'string') {\n throw new Error('URL string is required and must be a string')\n }\n\n // Extract the path after the domain\n const url = new URL(urlString)\n\n let searchParamsObject = {}\n url.searchParams.forEach((value, key) => {\n searchParamsObject[key] = value\n })\n\n let queryString = url.searchParams.toString()\n queryString = queryString ? queryString.replace(/&/g, ',') : ''\n\n return {\n path: url.pathname.substring(1), // Remove leading '/'\n queryString,\n searchParamsObject,\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["validateBase64Image","AWS","IMAGE_CACHE_REGION","lambda","Lambda","region","s3","S3","fetchImageForPdfGeneratorService","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","urlMatch","applicationId","_parseUrlString","path","queryString","searchParamsObject","transformedBucketImagePath","alreadyTransformedImage","fullDataUrl","transformerResponse","statusCode","_fullDataUrl","redirectLocation","newlyTransformedImage","_fullDataUrl2","_t","wrap","_context","prev","next","console","debug","Error","match","parseUrlString","concat","fetchResourceFromS3","bucketName","process","env","S3_BUCKET_IMAGE_TRANSFORMER_CACHE","key","sent","body","formatBase64Image","base64String","toString","abrupt","requestImageTransformation","headers","Location","stop","_x","apply","arguments","_x2","_x3","_requestImageTransformation","_callee2","lambdaEvent","params","result","response","errorMessage","_t2","_context2","queryStringParameters","requestContext","http","method","FunctionName","IMAGE_TRANSFORMER_ARN","InvocationType","Payload","JSON","stringify","invoke","promise","parse","message","error","_x4","_fetchResourceFromS","_callee3","_ref2","_t3","_context3","Bucket","Key","getObject","Body","contentType","ContentType","contentLength","ContentLength","lastModified","LastModified","etag","ETag","code","_ref3","imageType","toLowerCase","includes","base64Flag","isValid","urlString","URL","searchParams","forEach","value","replace","pathname","substring"],"sources":["../../../src/helpers/fetch-image-for-pdf-generator-service/index.js"],"sourcesContent":["import { validateBase64Image } from '../image-validators'\nimport AWS from 'aws-sdk'\n\n// Image transformer and cache are always in us-east-1 (shared across all regions)\n// The image-optimisation-image-processing Lambda only exists in us-east-1\nconst IMAGE_CACHE_REGION = 'us-east-1'\n\nconst lambda = new AWS.Lambda({\n region: IMAGE_CACHE_REGION,\n})\n\nconst s3 = new AWS.S3({\n region: IMAGE_CACHE_REGION,\n})\n\nexport const fetchImageForPdfGeneratorService = async function (url) {\n console.debug(\n 'Fetching image via CloudFront For Serverless Pdf Generator Service'\n )\n\n if (!url) {\n throw new Error('URL is required to fetch image for PDF generator service')\n }\n\n const urlMatch = url && url.match(/([a-f0-9]{24})\\//)\n const applicationId = urlMatch && urlMatch[1]\n\n if (!applicationId) {\n throw new Error('Requestor has insufficient permissions')\n }\n\n const { path, queryString, searchParamsObject } = parseUrlString(url)\n\n const transformedBucketImagePath =\n path + (queryString ? `/${queryString}` : '')\n\n const alreadyTransformedImage = await fetchResourceFromS3({\n bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,\n key: transformedBucketImagePath,\n })\n\n if (alreadyTransformedImage?.body) {\n const fullDataUrl = formatBase64Image({\n base64String: alreadyTransformedImage.body.toString('base64'),\n key: transformedBucketImagePath,\n })\n return fullDataUrl\n }\n\n const transformerResponse = await requestImageTransformation(\n `/${path}`,\n searchParamsObject\n )\n\n const statusCode = transformerResponse.statusCode\n\n switch (statusCode) {\n case 200: {\n console.debug('Image transformation successful')\n\n const fullDataUrl = formatBase64Image({\n base64String: transformerResponse.body.toString('base64'),\n key: url,\n })\n\n return fullDataUrl\n }\n case 302: {\n console.debug(\n 'Image transformation successful but image is too big for lambda delivery, fetching directly from S3'\n )\n const redirectLocation = transformerResponse.headers.Location\n\n if (!redirectLocation) {\n throw new Error('Redirect response received but no location provided')\n }\n const newlyTransformedImage = await fetchResourceFromS3({\n bucketName: process.env.S3_BUCKET_IMAGE_TRANSFORMER_CACHE,\n key: transformedBucketImagePath,\n })\n console.debug('Image successfully fetched from S3 at:', redirectLocation)\n\n const fullDataUrl = formatBase64Image({\n base64String: newlyTransformedImage.body.toString('base64'),\n key: transformedBucketImagePath,\n })\n\n return fullDataUrl\n }\n case 400:\n throw new Error(\n `Bad request to image transformer: ${transformerResponse.body}`\n )\n case 403:\n throw new Error('Requested transformed image is too big')\n case 404:\n throw new Error('The requested image does not exist')\n case 500:\n throw new Error(\n `Image transformation failed: ${transformerResponse.body}`\n )\n default:\n throw new Error(\n `Unexpected response from image transformer: ${statusCode} - ${transformerResponse.body}`\n )\n }\n}\n\nexport async function requestImageTransformation(path, searchParamsObject) {\n if (!path) {\n throw new Error('Image Path is required for image transformation')\n }\n\n console.debug(\n 'ImageTransformation: Invoking image transformer lambda for path:',\n { path, searchParamsObject }\n )\n\n const lambdaEvent = {\n queryStringParameters: searchParamsObject,\n requestContext: {\n http: {\n method: 'GET',\n path,\n },\n },\n }\n\n const params = {\n FunctionName: process.env.IMAGE_TRANSFORMER_ARN,\n InvocationType: 'RequestResponse',\n Payload: JSON.stringify(lambdaEvent),\n }\n\n try {\n const result = await lambda.invoke(params).promise()\n\n const response = JSON.parse(result.Payload)\n\n return response\n } catch (error) {\n const errorMessage = `Failed to invoke image transformer lambda: ${error.message}`\n console.error(errorMessage, error)\n throw new Error(errorMessage)\n }\n}\n\nexport async function fetchResourceFromS3({ bucketName, key }) {\n console.debug(\n `Fetching resource from S3 Bucket: '${bucketName}' at path: '${key}'`\n )\n if (!bucketName || !key) {\n throw new Error(\n 'bucketName and key are required for S3 resource fetch ' +\n JSON.stringify({ bucketName, key })\n )\n }\n\n const params = {\n Bucket: bucketName,\n Key: key,\n }\n\n try {\n const result = await s3.getObject(params).promise()\n\n return {\n body: result.Body,\n contentType: result.ContentType,\n contentLength: result.ContentLength,\n lastModified: result.LastModified,\n etag: result.ETag,\n }\n } catch (error) {\n if (error.code !== 'NoSuchKey') {\n console.error('Failed to fetch image:', error)\n throw new Error(`Failed to fetch image: ${bucketName}/${key}`)\n }\n\n console.debug('Image not found in transformed bucket, invoking transformer')\n }\n}\n\nexport function formatBase64Image({ base64String, key }) {\n if (!key) {\n throw new Error('Key is required for image formatting')\n }\n\n const imageType = key.toLowerCase().includes('.png') ? 'png' : 'jpeg'\n const base64Flag = `data:image/${imageType};base64,`\n const fullDataUrl = `${base64Flag}${base64String}`\n\n // Validate the formatted data URL\n const isValid = validateBase64Image(fullDataUrl)\n if (!isValid) {\n throw new Error('InvalidImageError')\n }\n\n return fullDataUrl\n}\n\n/**\n * Parses a URL-like string into path and query parameters\n * @param {string} urlString - String like \"https://example.cloudfront.net/<applicationId>/<path>/filename.jpeg?width=100&height=100\"\n * @returns {Object} - Object with { path: string, queryString: string, searchParamsObject: Object }\n * @example\n * parseUrlString(\"https://example.cloudfront.net/abc123/folder/image.jpeg?width=100&height=100\")\n * // Returns: { path: \"abc123/folder/image.jpeg\", queryString: \"width=100,t=456\", searchParamsObject: { width: \"100\", height: \"100\" } }\n */\nfunction parseUrlString(urlString) {\n if (!urlString || typeof urlString !== 'string') {\n throw new Error('URL string is required and must be a string')\n }\n\n // Extract the path after the domain\n const url = new URL(urlString)\n\n let searchParamsObject = {}\n url.searchParams.forEach((value, key) => {\n searchParamsObject[key] = value\n })\n\n let queryString = url.searchParams.toString()\n queryString = queryString ? queryString.replace(/&/g, ',') : ''\n\n return {\n path: url.pathname.substring(1), // Remove leading '/'\n queryString,\n searchParamsObject,\n }\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lighthouse/common",
3
- "version": "6.9.3-canary.0",
3
+ "version": "6.9.3",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "lib/index.js",